diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 000000000000..e5e9997f44fa --- /dev/null +++ b/.editorconfig @@ -0,0 +1,142 @@ +# Copyright 2025 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 . + +# This file helps editors auto-configure whitespace settings. +# +# See here for more information about the format and editor support: +# +# https://editorconfig.org/ + +# This file is common to the GCC and GDB/Binutils projects. If you +# update one, please sync it with the other. + +# top-most EditorConfig file +root = true + +[*] +end_of_line = lf +insert_final_newline = true +tab_width = 8 + +# EditorConfig files +[.editorconfig] +charset = utf-8 +trim_trailing_whitespace = true + +# Makefile +[{Makefile,*.mk,*.am}*] +indent_style = tab +indent_size = 8 +trim_trailing_whitespace = true + +# ChangeLogs +[ChangeLog*] +indent_style = tab +indent_size = 8 +trim_trailing_whitespace = true +charset = utf-8 + +# C/C++ +[*.{c,h,cc}] +charset = utf-8 +indent_style = tab +indent_size = 2 +trim_trailing_whitespace = true + +# GCC .def files. These are generally C fragments that get included +# one or more times +[gcc/**.def] +charset = utf-8 +indent_style = tab +indent_size = 2 +trim_trailing_whitespace = true + +# Texinfo files +[*.texi] +charset = utf-8 +indent_size = 2 +trim_trailing_whitespace = true + +# Expect / TCL +[*.{exp,tcl}] +indent_style = tab +indent_size = 4 +trim_trailing_whitespace = true + +# Python +[*.py] +indent_style = space +indent_size = 4 +trim_trailing_whitespace = true + +# Assembler +[*.{s,S,asm}] +indent_style = tab +indent_size = 8 +trim_trailing_whitespace = true + +# GCC Machine description files +[gcc/config/**.md] +indent_style = tab +indent_size = 2 +trim_trailing_whitespace = true + +# Awk +[*.awk] +indent_style = tab +indent_size = 2 +trim_trailing_whitespace = true + +# Autoconf +[*.{ac,m4}] +indent_style = tab +indent_size = 2 +trim_trailing_whitespace = true + +# Shell scripts +[*.sh] +indent_style = tab +indent_size = 4 +trim_trailing_whitespace = true + +# Ada +[*.ad[bs]] +indent_style = space +indent_size = 3 +trim_trailing_whitespace = true + +# D +[*.d] +indent_style = space +indent_size = 4 +trim_trailing_whitespace = true + +# Go +[*.go] +indent_style = tab +indent_size = 8 +trim_trailing_whitespace = true + +# Fortran +[*.[Ff]90] +indent_style = space +indent_size = 2 +trim_trailing_whitespace = true + +# Cobol +[*.cbl] +indent_style = space +indent_size = 2 +trim_trailing_whitespace = true diff --git a/.github/workflows/ccpp.yml b/.github/workflows/ccpp.yml index 5159505ce813..25ad6cc0f24e 100644 --- a/.github/workflows/ccpp.yml +++ b/.github/workflows/ccpp.yml @@ -392,7 +392,7 @@ jobs: git fetch arm-ian; GIT_AUTHOR_NAME=CI \ GIT_AUTHOR_EMAIL='ci@invalid' \ - git merge --no-edit e110b7b04a6df1275330455aa886a6e283d06e48; + git merge --no-edit master-wip-apple-si-on-r16-4308-g50959e53e40ae0; - name: Install Deps run: | diff --git a/ChangeLog b/ChangeLog index 18cc0d32e4e6..53ae63bc9d9f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,23 @@ +2025-10-02 H.J. Lu + + * Makefile.in: Regenerated. + * configure: Likewise. + * Makefile.tpl: Synced from binutils-gdb. + * configure.ac: Likewise. + * libtool.m4: Likewise. + +2025-10-01 Richard Earnshaw + + * .editorconfig: Unify the GCC and GDB/binutils root config. + +2025-09-23 Richard Earnshaw + + * .editorconfig: Fix glob patterns. + +2025-09-22 Jonathan Wakely + + * .editorconfig: New file. + 2025-09-04 Wilco Dijkstra * MAINTAINERS (Reviewers): Add myself for the aarch64 port. diff --git a/Makefile.def b/Makefile.def index fa60f6ea0b90..e7f33345aa82 100644 --- a/Makefile.def +++ b/Makefile.def @@ -313,7 +313,6 @@ flags_to_pass = { flag= GNATBIND ; }; flags_to_pass = { flag= GNATMAKE ; }; flags_to_pass = { flag= GDC ; }; flags_to_pass = { flag= GDCFLAGS ; }; -flags_to_pass = { flag= GUILE ; }; // Target tools flags_to_pass = { flag= AR_FOR_TARGET ; }; @@ -463,9 +462,11 @@ dependencies = { module=all-gdb; on=all-libbacktrace; }; // Host modules specific to gdbserver. dependencies = { module=configure-gdbserver; on=all-gnulib; }; +dependencies = { module=configure-gdbserver; on=all-libiconv; }; dependencies = { module=all-gdbserver; on=all-gdbsupport; }; dependencies = { module=all-gdbserver; on=all-gnulib; }; dependencies = { module=all-gdbserver; on=all-libiberty; }; +dependencies = { module=all-gdbserver; on=all-libiconv; }; dependencies = { module=configure-libgui; on=configure-tcl; }; dependencies = { module=configure-libgui; on=configure-tk; }; @@ -524,7 +525,7 @@ dependencies = { module=install-bfd; on=install-libsframe; }; dependencies = { module=install-strip-bfd; on=install-strip-libsframe; }; // libopcodes depends on libbfd -dependencies = { module=configure-opcodes; on=configure-bfd; hard=true; }; +dependencies = { module=configure-opcodes; on=all-bfd; hard=true; }; dependencies = { module=install-opcodes; on=install-bfd; }; dependencies = { module=install-strip-opcodes; on=install-strip-bfd; }; @@ -550,8 +551,8 @@ dependencies = { module=install-gprofng; on=install-opcodes; }; dependencies = { module=install-gprofng; on=install-bfd; }; dependencies = { module=configure-ld; on=configure-gettext; }; +dependencies = { module=configure-ld; on=all-bfd; }; dependencies = { module=all-ld; on=all-libiberty; }; -dependencies = { module=all-ld; on=all-bfd; }; dependencies = { module=all-ld; on=all-opcodes; }; dependencies = { module=all-ld; on=all-build-bison; }; dependencies = { module=all-ld; on=all-build-flex; }; @@ -649,14 +650,15 @@ dependencies = { module=all-m4; on=all-build-texinfo; }; // on libgcc and newlib/libgloss. lang_env_dependencies = { module=libitm; cxx=true; }; lang_env_dependencies = { module=libffi; cxx=true; }; -lang_env_dependencies = { module=newlib; no_c=true; }; -lang_env_dependencies = { module=libgloss; no_c=true; }; -lang_env_dependencies = { module=libgcc; no_gcc=true; no_c=true; }; +lang_env_dependencies = { module=newlib; no_c=true; no_atomic=true; }; +lang_env_dependencies = { module=libgloss; no_c=true; no_atomic=true; }; +lang_env_dependencies = { module=libgcc; no_gcc=true; no_c=true; no_atomic=true; }; // libiberty does not depend on newlib or libgloss because it must be // built newlib on some targets (e.g. Cygwin). It still needs // a dependency on libgcc for native targets to configure. -lang_env_dependencies = { module=libiberty; no_c=true; }; -lang_env_dependencies = { module=libgcobol; cxx=true; }; +lang_env_dependencies = { module=libiberty; no_c=true; no_atomic=true; }; +lang_env_dependencies = { module=libgcobol; cxx=true; no_atomic=true; }; +lang_env_dependencies = { module=libatomic; no_atomic=true; }; dependencies = { module=configure-target-fastjar; on=configure-target-zlib; }; dependencies = { module=all-target-fastjar; on=all-target-zlib; }; diff --git a/Makefile.in b/Makefile.in index 12d4395d8e2f..8ac778a0e09c 100644 --- a/Makefile.in +++ b/Makefile.in @@ -3,7 +3,7 @@ # # Makefile for directory with subdirs to build. # Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, -# 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2023 +# 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 # Free Software Foundation # # This file is free software; you can redistribute it and/or modify @@ -144,8 +144,7 @@ BASE_EXPORTS = \ M4="$(M4)"; export M4; \ SED="$(SED)"; export SED; \ AWK="$(AWK)"; export AWK; \ - MAKEINFO="$(MAKEINFO)"; export MAKEINFO; \ - GUILE="$(GUILE)"; export GUILE; + MAKEINFO="$(MAKEINFO)"; export MAKEINFO; # This is the list of variables to export in the environment when # configuring subdirectories for the build system. @@ -244,6 +243,7 @@ HOST_EXPORTS = \ GMPINC="$(HOST_GMPINC)"; export GMPINC; \ ISLLIBS="$(HOST_ISLLIBS)"; export ISLLIBS; \ ISLINC="$(HOST_ISLINC)"; export ISLINC; \ + TARGET_CONFIGDIRS="$(TARGET_CONFIGDIRS)"; export TARGET_CONFIGDIRS; \ XGCC_FLAGS_FOR_TARGET="$(XGCC_FLAGS_FOR_TARGET)"; export XGCC_FLAGS_FOR_TARGET; \ @if gcc-bootstrap $(RPATH_ENVVAR)=`echo "$(TARGET_LIB_PATH)$$$(RPATH_ENVVAR)" | sed 's,::*,:,g;s,^:*,,;s,:*$$,,'`; export $(RPATH_ENVVAR); \ @@ -434,7 +434,7 @@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ LD = @LD@ LIPO = @LIPO@ -NM = @NM@ +NM = @NM@ @NM_PLUGIN_OPTION@ OBJDUMP = @OBJDUMP@ OTOOL = @OTOOL@ RANLIB = @RANLIB@ @RANLIB_PLUGIN_OPTION@ @@ -460,8 +460,6 @@ CRAB1_LIBS = @CRAB1_LIBS@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ -GUILE = guile - # Pass additional PGO and LTO compiler options to the PGO build. BUILD_CFLAGS = $(PGO_BUILD_CFLAGS) $(PGO_BUILD_LTO_CFLAGS) override CFLAGS += $(BUILD_CFLAGS) @@ -667,7 +665,7 @@ do-compare3 = $(do-compare) # Programs producing files for the TARGET machine # ----------------------------------------------- -AR_FOR_TARGET=@AR_FOR_TARGET@ +AR_FOR_TARGET=@AR_FOR_TARGET@ @AR_PLUGIN_OPTION_FOR_TARGET@ AS_FOR_TARGET=@AS_FOR_TARGET@ CC_FOR_TARGET=$(STAGE_CC_WRAPPER) @CC_FOR_TARGET@ @@ -687,11 +685,11 @@ DSYMUTIL_FOR_TARGET=@DSYMUTIL_FOR_TARGET@ LD_FOR_TARGET=@LD_FOR_TARGET@ LIPO_FOR_TARGET=@LIPO_FOR_TARGET@ -NM_FOR_TARGET=@NM_FOR_TARGET@ +NM_FOR_TARGET=@NM_FOR_TARGET@ @NM_PLUGIN_OPTION_FOR_TARGET@ OBJDUMP_FOR_TARGET=@OBJDUMP_FOR_TARGET@ OBJCOPY_FOR_TARGET=@OBJCOPY_FOR_TARGET@ OTOOL_FOR_TARGET=@OTOOL_FOR_TARGET@ -RANLIB_FOR_TARGET=@RANLIB_FOR_TARGET@ +RANLIB_FOR_TARGET=@RANLIB_FOR_TARGET@ @RANLIB_PLUGIN_OPTION_FOR_TARGET@ READELF_FOR_TARGET=@READELF_FOR_TARGET@ STRIP_FOR_TARGET=@STRIP_FOR_TARGET@ WINDRES_FOR_TARGET=@WINDRES_FOR_TARGET@ @@ -891,7 +889,6 @@ BASE_FLAGS_TO_PASS = \ "GNATMAKE=$(GNATMAKE)" \ "GDC=$(GDC)" \ "GDCFLAGS=$(GDCFLAGS)" \ - "GUILE=$(GUILE)" \ "AR_FOR_TARGET=$(AR_FOR_TARGET)" \ "AS_FOR_TARGET=$(AS_FOR_TARGET)" \ "CC_FOR_TARGET=$(CC_FOR_TARGET)" \ @@ -68682,16 +68679,16 @@ install-strip-ld: maybe-install-strip-bfd install-strip-ld: maybe-install-strip-libctf install-bfd: maybe-install-libsframe install-strip-bfd: maybe-install-strip-libsframe -configure-opcodes: configure-bfd -configure-stage1-opcodes: configure-stage1-bfd -configure-stage2-opcodes: configure-stage2-bfd -configure-stage3-opcodes: configure-stage3-bfd -configure-stage4-opcodes: configure-stage4-bfd -configure-stageprofile-opcodes: configure-stageprofile-bfd -configure-stagetrain-opcodes: configure-stagetrain-bfd -configure-stagefeedback-opcodes: configure-stagefeedback-bfd -configure-stageautoprofile-opcodes: configure-stageautoprofile-bfd -configure-stageautofeedback-opcodes: configure-stageautofeedback-bfd +configure-opcodes: all-bfd +configure-stage1-opcodes: all-stage1-bfd +configure-stage2-opcodes: all-stage2-bfd +configure-stage3-opcodes: all-stage3-bfd +configure-stage4-opcodes: all-stage4-bfd +configure-stageprofile-opcodes: all-stageprofile-bfd +configure-stagetrain-opcodes: all-stagetrain-bfd +configure-stagefeedback-opcodes: all-stagefeedback-bfd +configure-stageautoprofile-opcodes: all-stageautoprofile-bfd +configure-stageautofeedback-opcodes: all-stageautofeedback-bfd install-opcodes: maybe-install-bfd install-strip-opcodes: maybe-install-strip-bfd configure-gas: maybe-configure-gettext @@ -68756,6 +68753,16 @@ configure-stagetrain-ld: maybe-configure-stagetrain-gettext configure-stagefeedback-ld: maybe-configure-stagefeedback-gettext configure-stageautoprofile-ld: maybe-configure-stageautoprofile-gettext configure-stageautofeedback-ld: maybe-configure-stageautofeedback-gettext +configure-ld: maybe-all-bfd +configure-stage1-ld: maybe-all-stage1-bfd +configure-stage2-ld: maybe-all-stage2-bfd +configure-stage3-ld: maybe-all-stage3-bfd +configure-stage4-ld: maybe-all-stage4-bfd +configure-stageprofile-ld: maybe-all-stageprofile-bfd +configure-stagetrain-ld: maybe-all-stagetrain-bfd +configure-stagefeedback-ld: maybe-all-stagefeedback-bfd +configure-stageautoprofile-ld: maybe-all-stageautoprofile-bfd +configure-stageautofeedback-ld: maybe-all-stageautofeedback-bfd all-ld: maybe-all-libiberty all-stage1-ld: maybe-all-stage1-libiberty all-stage2-ld: maybe-all-stage2-libiberty @@ -68766,16 +68773,6 @@ all-stagetrain-ld: maybe-all-stagetrain-libiberty all-stagefeedback-ld: maybe-all-stagefeedback-libiberty all-stageautoprofile-ld: maybe-all-stageautoprofile-libiberty all-stageautofeedback-ld: maybe-all-stageautofeedback-libiberty -all-ld: maybe-all-bfd -all-stage1-ld: maybe-all-stage1-bfd -all-stage2-ld: maybe-all-stage2-bfd -all-stage3-ld: maybe-all-stage3-bfd -all-stage4-ld: maybe-all-stage4-bfd -all-stageprofile-ld: maybe-all-stageprofile-bfd -all-stagetrain-ld: maybe-all-stagetrain-bfd -all-stagefeedback-ld: maybe-all-stagefeedback-bfd -all-stageautoprofile-ld: maybe-all-stageautoprofile-bfd -all-stageautofeedback-ld: maybe-all-stageautofeedback-bfd all-ld: maybe-all-opcodes all-stage1-ld: maybe-all-stage1-opcodes all-stage2-ld: maybe-all-stage2-opcodes @@ -69249,7 +69246,9 @@ all-gdb: maybe-all-opcodes all-gdb: maybe-all-libdecnumber all-gdb: maybe-all-libctf all-gdb: maybe-all-libbacktrace +configure-gdbserver: maybe-all-libiconv all-gdbserver: maybe-all-libiberty +all-gdbserver: maybe-all-libiconv configure-gdbsupport: maybe-configure-gettext all-gdbsupport: maybe-all-gettext configure-gprof: maybe-configure-gettext @@ -69401,54 +69400,3332 @@ configure-target-libgcobol: maybe-all-target-libgcc configure-target-libstdc++-v3: maybe-all-target-newlib maybe-all-target-libgloss +@if gcc-bootstrap +configure-stage1-target-libstdc++-v3: maybe-all-stage1-target-libatomic +configure-stage2-target-libstdc++-v3: maybe-all-stage2-target-libatomic +configure-stage3-target-libstdc++-v3: maybe-all-stage3-target-libatomic +configure-stage4-target-libstdc++-v3: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libstdc++-v3: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libstdc++-v3: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libstdc++-v3: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libstdc++-v3: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libstdc++-v3: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libsanitizer: maybe-all-stage1-target-libatomic +configure-stage2-target-libsanitizer: maybe-all-stage2-target-libatomic +configure-stage3-target-libsanitizer: maybe-all-stage3-target-libatomic +configure-stage4-target-libsanitizer: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libsanitizer: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libsanitizer: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libsanitizer: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libsanitizer: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libsanitizer: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libvtv: maybe-all-stage1-target-libatomic +configure-stage2-target-libvtv: maybe-all-stage2-target-libatomic +configure-stage3-target-libvtv: maybe-all-stage3-target-libatomic +configure-stage4-target-libvtv: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libvtv: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libvtv: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libvtv: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libvtv: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libvtv: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libssp: maybe-all-stage1-target-libatomic +configure-stage2-target-libssp: maybe-all-stage2-target-libatomic +configure-stage3-target-libssp: maybe-all-stage3-target-libatomic +configure-stage4-target-libssp: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libssp: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libssp: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libssp: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libssp: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libssp: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libbacktrace: maybe-all-stage1-target-libatomic +configure-stage2-target-libbacktrace: maybe-all-stage2-target-libatomic +configure-stage3-target-libbacktrace: maybe-all-stage3-target-libatomic +configure-stage4-target-libbacktrace: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libbacktrace: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libbacktrace: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libbacktrace: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libbacktrace: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libbacktrace: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libquadmath: maybe-all-stage1-target-libatomic +configure-stage2-target-libquadmath: maybe-all-stage2-target-libatomic +configure-stage3-target-libquadmath: maybe-all-stage3-target-libatomic +configure-stage4-target-libquadmath: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libquadmath: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libquadmath: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libquadmath: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libquadmath: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libquadmath: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgfortran: maybe-all-stage1-target-libatomic +configure-stage2-target-libgfortran: maybe-all-stage2-target-libatomic +configure-stage3-target-libgfortran: maybe-all-stage3-target-libatomic +configure-stage4-target-libgfortran: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgfortran: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgfortran: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgfortran: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgfortran: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgfortran: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libobjc: maybe-all-stage1-target-libatomic +configure-stage2-target-libobjc: maybe-all-stage2-target-libatomic +configure-stage3-target-libobjc: maybe-all-stage3-target-libatomic +configure-stage4-target-libobjc: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libobjc: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libobjc: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libobjc: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libobjc: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libobjc: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgo: maybe-all-stage1-target-libatomic +configure-stage2-target-libgo: maybe-all-stage2-target-libatomic +configure-stage3-target-libgo: maybe-all-stage3-target-libatomic +configure-stage4-target-libgo: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgo: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgo: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgo: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgo: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgo: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libphobos: maybe-all-stage1-target-libatomic +configure-stage2-target-libphobos: maybe-all-stage2-target-libatomic +configure-stage3-target-libphobos: maybe-all-stage3-target-libatomic +configure-stage4-target-libphobos: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libphobos: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libphobos: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libphobos: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libphobos: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libphobos: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libtermcap: maybe-all-stage1-target-libatomic +configure-stage2-target-libtermcap: maybe-all-stage2-target-libatomic +configure-stage3-target-libtermcap: maybe-all-stage3-target-libatomic +configure-stage4-target-libtermcap: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libtermcap: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libtermcap: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libtermcap: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libtermcap: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libtermcap: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-winsup: maybe-all-stage1-target-libatomic +configure-stage2-target-winsup: maybe-all-stage2-target-libatomic +configure-stage3-target-winsup: maybe-all-stage3-target-libatomic +configure-stage4-target-winsup: maybe-all-stage4-target-libatomic +configure-stageprofile-target-winsup: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-winsup: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-winsup: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-winsup: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-winsup: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libffi: maybe-all-stage1-target-libatomic +configure-stage2-target-libffi: maybe-all-stage2-target-libatomic +configure-stage3-target-libffi: maybe-all-stage3-target-libatomic +configure-stage4-target-libffi: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libffi: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libffi: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libffi: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libffi: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libffi: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-zlib: maybe-all-stage1-target-libatomic +configure-stage2-target-zlib: maybe-all-stage2-target-libatomic +configure-stage3-target-zlib: maybe-all-stage3-target-libatomic +configure-stage4-target-zlib: maybe-all-stage4-target-libatomic +configure-stageprofile-target-zlib: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-zlib: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-zlib: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-zlib: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-zlib: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-rda: maybe-all-stage1-target-libatomic +configure-stage2-target-rda: maybe-all-stage2-target-libatomic +configure-stage3-target-rda: maybe-all-stage3-target-libatomic +configure-stage4-target-rda: maybe-all-stage4-target-libatomic +configure-stageprofile-target-rda: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-rda: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-rda: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-rda: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-rda: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libada: maybe-all-stage1-target-libatomic +configure-stage2-target-libada: maybe-all-stage2-target-libatomic +configure-stage3-target-libada: maybe-all-stage3-target-libatomic +configure-stage4-target-libada: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libada: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libada: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libada: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libada: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libada: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgm2: maybe-all-stage1-target-libatomic +configure-stage2-target-libgm2: maybe-all-stage2-target-libatomic +configure-stage3-target-libgm2: maybe-all-stage3-target-libatomic +configure-stage4-target-libgm2: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgm2: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgm2: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgm2: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgm2: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgm2: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgomp: maybe-all-stage1-target-libatomic +configure-stage2-target-libgomp: maybe-all-stage2-target-libatomic +configure-stage3-target-libgomp: maybe-all-stage3-target-libatomic +configure-stage4-target-libgomp: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgomp: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgomp: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgomp: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgomp: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgomp: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libitm: maybe-all-stage1-target-libatomic +configure-stage2-target-libitm: maybe-all-stage2-target-libatomic +configure-stage3-target-libitm: maybe-all-stage3-target-libatomic +configure-stage4-target-libitm: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libitm: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libitm: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libitm: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libitm: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libitm: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgrust: maybe-all-stage1-target-libatomic +configure-stage2-target-libgrust: maybe-all-stage2-target-libatomic +configure-stage3-target-libgrust: maybe-all-stage3-target-libatomic +configure-stage4-target-libgrust: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgrust: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgrust: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgrust: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgrust: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgrust: maybe-all-stageautofeedback-target-libatomic +@endif gcc-bootstrap + +@if gcc-no-bootstrap +configure-target-libstdc++-v3: maybe-all-target-libatomic +configure-target-libsanitizer: maybe-all-target-libatomic +configure-target-libvtv: maybe-all-target-libatomic +configure-target-libssp: maybe-all-target-libatomic +configure-target-libbacktrace: maybe-all-target-libatomic +configure-target-libquadmath: maybe-all-target-libatomic +configure-target-libgfortran: maybe-all-target-libatomic +configure-target-libobjc: maybe-all-target-libatomic +configure-target-libgo: maybe-all-target-libatomic +configure-target-libphobos: maybe-all-target-libatomic +configure-target-libtermcap: maybe-all-target-libatomic +configure-target-winsup: maybe-all-target-libatomic +configure-target-libffi: maybe-all-target-libatomic +configure-target-zlib: maybe-all-target-libatomic +configure-target-rda: maybe-all-target-libatomic +configure-target-libada: maybe-all-target-libatomic +configure-target-libgm2: maybe-all-target-libatomic +configure-target-libgomp: maybe-all-target-libatomic +configure-target-libitm: maybe-all-target-libatomic +configure-target-libgrust: maybe-all-target-libatomic +@endif gcc-no-bootstrap + configure-target-libsanitizer: maybe-all-target-newlib maybe-all-target-libgloss +@if gcc-bootstrap +configure-stage1-target-libstdc++-v3: maybe-all-stage1-target-libatomic +configure-stage2-target-libstdc++-v3: maybe-all-stage2-target-libatomic +configure-stage3-target-libstdc++-v3: maybe-all-stage3-target-libatomic +configure-stage4-target-libstdc++-v3: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libstdc++-v3: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libstdc++-v3: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libstdc++-v3: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libstdc++-v3: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libstdc++-v3: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libsanitizer: maybe-all-stage1-target-libatomic +configure-stage2-target-libsanitizer: maybe-all-stage2-target-libatomic +configure-stage3-target-libsanitizer: maybe-all-stage3-target-libatomic +configure-stage4-target-libsanitizer: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libsanitizer: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libsanitizer: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libsanitizer: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libsanitizer: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libsanitizer: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libvtv: maybe-all-stage1-target-libatomic +configure-stage2-target-libvtv: maybe-all-stage2-target-libatomic +configure-stage3-target-libvtv: maybe-all-stage3-target-libatomic +configure-stage4-target-libvtv: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libvtv: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libvtv: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libvtv: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libvtv: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libvtv: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libssp: maybe-all-stage1-target-libatomic +configure-stage2-target-libssp: maybe-all-stage2-target-libatomic +configure-stage3-target-libssp: maybe-all-stage3-target-libatomic +configure-stage4-target-libssp: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libssp: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libssp: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libssp: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libssp: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libssp: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libbacktrace: maybe-all-stage1-target-libatomic +configure-stage2-target-libbacktrace: maybe-all-stage2-target-libatomic +configure-stage3-target-libbacktrace: maybe-all-stage3-target-libatomic +configure-stage4-target-libbacktrace: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libbacktrace: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libbacktrace: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libbacktrace: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libbacktrace: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libbacktrace: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libquadmath: maybe-all-stage1-target-libatomic +configure-stage2-target-libquadmath: maybe-all-stage2-target-libatomic +configure-stage3-target-libquadmath: maybe-all-stage3-target-libatomic +configure-stage4-target-libquadmath: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libquadmath: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libquadmath: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libquadmath: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libquadmath: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libquadmath: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgfortran: maybe-all-stage1-target-libatomic +configure-stage2-target-libgfortran: maybe-all-stage2-target-libatomic +configure-stage3-target-libgfortran: maybe-all-stage3-target-libatomic +configure-stage4-target-libgfortran: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgfortran: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgfortran: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgfortran: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgfortran: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgfortran: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libobjc: maybe-all-stage1-target-libatomic +configure-stage2-target-libobjc: maybe-all-stage2-target-libatomic +configure-stage3-target-libobjc: maybe-all-stage3-target-libatomic +configure-stage4-target-libobjc: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libobjc: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libobjc: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libobjc: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libobjc: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libobjc: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgo: maybe-all-stage1-target-libatomic +configure-stage2-target-libgo: maybe-all-stage2-target-libatomic +configure-stage3-target-libgo: maybe-all-stage3-target-libatomic +configure-stage4-target-libgo: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgo: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgo: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgo: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgo: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgo: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libphobos: maybe-all-stage1-target-libatomic +configure-stage2-target-libphobos: maybe-all-stage2-target-libatomic +configure-stage3-target-libphobos: maybe-all-stage3-target-libatomic +configure-stage4-target-libphobos: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libphobos: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libphobos: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libphobos: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libphobos: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libphobos: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libtermcap: maybe-all-stage1-target-libatomic +configure-stage2-target-libtermcap: maybe-all-stage2-target-libatomic +configure-stage3-target-libtermcap: maybe-all-stage3-target-libatomic +configure-stage4-target-libtermcap: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libtermcap: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libtermcap: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libtermcap: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libtermcap: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libtermcap: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-winsup: maybe-all-stage1-target-libatomic +configure-stage2-target-winsup: maybe-all-stage2-target-libatomic +configure-stage3-target-winsup: maybe-all-stage3-target-libatomic +configure-stage4-target-winsup: maybe-all-stage4-target-libatomic +configure-stageprofile-target-winsup: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-winsup: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-winsup: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-winsup: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-winsup: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libffi: maybe-all-stage1-target-libatomic +configure-stage2-target-libffi: maybe-all-stage2-target-libatomic +configure-stage3-target-libffi: maybe-all-stage3-target-libatomic +configure-stage4-target-libffi: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libffi: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libffi: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libffi: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libffi: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libffi: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-zlib: maybe-all-stage1-target-libatomic +configure-stage2-target-zlib: maybe-all-stage2-target-libatomic +configure-stage3-target-zlib: maybe-all-stage3-target-libatomic +configure-stage4-target-zlib: maybe-all-stage4-target-libatomic +configure-stageprofile-target-zlib: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-zlib: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-zlib: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-zlib: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-zlib: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-rda: maybe-all-stage1-target-libatomic +configure-stage2-target-rda: maybe-all-stage2-target-libatomic +configure-stage3-target-rda: maybe-all-stage3-target-libatomic +configure-stage4-target-rda: maybe-all-stage4-target-libatomic +configure-stageprofile-target-rda: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-rda: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-rda: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-rda: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-rda: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libada: maybe-all-stage1-target-libatomic +configure-stage2-target-libada: maybe-all-stage2-target-libatomic +configure-stage3-target-libada: maybe-all-stage3-target-libatomic +configure-stage4-target-libada: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libada: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libada: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libada: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libada: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libada: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgm2: maybe-all-stage1-target-libatomic +configure-stage2-target-libgm2: maybe-all-stage2-target-libatomic +configure-stage3-target-libgm2: maybe-all-stage3-target-libatomic +configure-stage4-target-libgm2: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgm2: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgm2: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgm2: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgm2: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgm2: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgomp: maybe-all-stage1-target-libatomic +configure-stage2-target-libgomp: maybe-all-stage2-target-libatomic +configure-stage3-target-libgomp: maybe-all-stage3-target-libatomic +configure-stage4-target-libgomp: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgomp: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgomp: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgomp: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgomp: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgomp: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libitm: maybe-all-stage1-target-libatomic +configure-stage2-target-libitm: maybe-all-stage2-target-libatomic +configure-stage3-target-libitm: maybe-all-stage3-target-libatomic +configure-stage4-target-libitm: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libitm: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libitm: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libitm: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libitm: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libitm: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgrust: maybe-all-stage1-target-libatomic +configure-stage2-target-libgrust: maybe-all-stage2-target-libatomic +configure-stage3-target-libgrust: maybe-all-stage3-target-libatomic +configure-stage4-target-libgrust: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgrust: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgrust: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgrust: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgrust: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgrust: maybe-all-stageautofeedback-target-libatomic +@endif gcc-bootstrap + +@if gcc-no-bootstrap +configure-target-libstdc++-v3: maybe-all-target-libatomic +configure-target-libsanitizer: maybe-all-target-libatomic +configure-target-libvtv: maybe-all-target-libatomic +configure-target-libssp: maybe-all-target-libatomic +configure-target-libbacktrace: maybe-all-target-libatomic +configure-target-libquadmath: maybe-all-target-libatomic +configure-target-libgfortran: maybe-all-target-libatomic +configure-target-libobjc: maybe-all-target-libatomic +configure-target-libgo: maybe-all-target-libatomic +configure-target-libphobos: maybe-all-target-libatomic +configure-target-libtermcap: maybe-all-target-libatomic +configure-target-winsup: maybe-all-target-libatomic +configure-target-libffi: maybe-all-target-libatomic +configure-target-zlib: maybe-all-target-libatomic +configure-target-rda: maybe-all-target-libatomic +configure-target-libada: maybe-all-target-libatomic +configure-target-libgm2: maybe-all-target-libatomic +configure-target-libgomp: maybe-all-target-libatomic +configure-target-libitm: maybe-all-target-libatomic +configure-target-libgrust: maybe-all-target-libatomic +@endif gcc-no-bootstrap + configure-target-libvtv: maybe-all-target-newlib maybe-all-target-libgloss +@if gcc-bootstrap +configure-stage1-target-libstdc++-v3: maybe-all-stage1-target-libatomic +configure-stage2-target-libstdc++-v3: maybe-all-stage2-target-libatomic +configure-stage3-target-libstdc++-v3: maybe-all-stage3-target-libatomic +configure-stage4-target-libstdc++-v3: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libstdc++-v3: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libstdc++-v3: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libstdc++-v3: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libstdc++-v3: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libstdc++-v3: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libsanitizer: maybe-all-stage1-target-libatomic +configure-stage2-target-libsanitizer: maybe-all-stage2-target-libatomic +configure-stage3-target-libsanitizer: maybe-all-stage3-target-libatomic +configure-stage4-target-libsanitizer: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libsanitizer: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libsanitizer: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libsanitizer: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libsanitizer: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libsanitizer: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libvtv: maybe-all-stage1-target-libatomic +configure-stage2-target-libvtv: maybe-all-stage2-target-libatomic +configure-stage3-target-libvtv: maybe-all-stage3-target-libatomic +configure-stage4-target-libvtv: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libvtv: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libvtv: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libvtv: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libvtv: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libvtv: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libssp: maybe-all-stage1-target-libatomic +configure-stage2-target-libssp: maybe-all-stage2-target-libatomic +configure-stage3-target-libssp: maybe-all-stage3-target-libatomic +configure-stage4-target-libssp: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libssp: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libssp: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libssp: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libssp: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libssp: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libbacktrace: maybe-all-stage1-target-libatomic +configure-stage2-target-libbacktrace: maybe-all-stage2-target-libatomic +configure-stage3-target-libbacktrace: maybe-all-stage3-target-libatomic +configure-stage4-target-libbacktrace: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libbacktrace: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libbacktrace: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libbacktrace: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libbacktrace: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libbacktrace: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libquadmath: maybe-all-stage1-target-libatomic +configure-stage2-target-libquadmath: maybe-all-stage2-target-libatomic +configure-stage3-target-libquadmath: maybe-all-stage3-target-libatomic +configure-stage4-target-libquadmath: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libquadmath: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libquadmath: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libquadmath: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libquadmath: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libquadmath: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgfortran: maybe-all-stage1-target-libatomic +configure-stage2-target-libgfortran: maybe-all-stage2-target-libatomic +configure-stage3-target-libgfortran: maybe-all-stage3-target-libatomic +configure-stage4-target-libgfortran: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgfortran: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgfortran: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgfortran: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgfortran: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgfortran: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libobjc: maybe-all-stage1-target-libatomic +configure-stage2-target-libobjc: maybe-all-stage2-target-libatomic +configure-stage3-target-libobjc: maybe-all-stage3-target-libatomic +configure-stage4-target-libobjc: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libobjc: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libobjc: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libobjc: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libobjc: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libobjc: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgo: maybe-all-stage1-target-libatomic +configure-stage2-target-libgo: maybe-all-stage2-target-libatomic +configure-stage3-target-libgo: maybe-all-stage3-target-libatomic +configure-stage4-target-libgo: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgo: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgo: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgo: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgo: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgo: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libphobos: maybe-all-stage1-target-libatomic +configure-stage2-target-libphobos: maybe-all-stage2-target-libatomic +configure-stage3-target-libphobos: maybe-all-stage3-target-libatomic +configure-stage4-target-libphobos: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libphobos: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libphobos: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libphobos: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libphobos: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libphobos: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libtermcap: maybe-all-stage1-target-libatomic +configure-stage2-target-libtermcap: maybe-all-stage2-target-libatomic +configure-stage3-target-libtermcap: maybe-all-stage3-target-libatomic +configure-stage4-target-libtermcap: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libtermcap: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libtermcap: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libtermcap: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libtermcap: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libtermcap: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-winsup: maybe-all-stage1-target-libatomic +configure-stage2-target-winsup: maybe-all-stage2-target-libatomic +configure-stage3-target-winsup: maybe-all-stage3-target-libatomic +configure-stage4-target-winsup: maybe-all-stage4-target-libatomic +configure-stageprofile-target-winsup: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-winsup: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-winsup: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-winsup: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-winsup: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libffi: maybe-all-stage1-target-libatomic +configure-stage2-target-libffi: maybe-all-stage2-target-libatomic +configure-stage3-target-libffi: maybe-all-stage3-target-libatomic +configure-stage4-target-libffi: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libffi: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libffi: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libffi: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libffi: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libffi: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-zlib: maybe-all-stage1-target-libatomic +configure-stage2-target-zlib: maybe-all-stage2-target-libatomic +configure-stage3-target-zlib: maybe-all-stage3-target-libatomic +configure-stage4-target-zlib: maybe-all-stage4-target-libatomic +configure-stageprofile-target-zlib: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-zlib: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-zlib: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-zlib: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-zlib: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-rda: maybe-all-stage1-target-libatomic +configure-stage2-target-rda: maybe-all-stage2-target-libatomic +configure-stage3-target-rda: maybe-all-stage3-target-libatomic +configure-stage4-target-rda: maybe-all-stage4-target-libatomic +configure-stageprofile-target-rda: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-rda: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-rda: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-rda: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-rda: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libada: maybe-all-stage1-target-libatomic +configure-stage2-target-libada: maybe-all-stage2-target-libatomic +configure-stage3-target-libada: maybe-all-stage3-target-libatomic +configure-stage4-target-libada: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libada: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libada: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libada: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libada: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libada: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgm2: maybe-all-stage1-target-libatomic +configure-stage2-target-libgm2: maybe-all-stage2-target-libatomic +configure-stage3-target-libgm2: maybe-all-stage3-target-libatomic +configure-stage4-target-libgm2: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgm2: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgm2: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgm2: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgm2: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgm2: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgomp: maybe-all-stage1-target-libatomic +configure-stage2-target-libgomp: maybe-all-stage2-target-libatomic +configure-stage3-target-libgomp: maybe-all-stage3-target-libatomic +configure-stage4-target-libgomp: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgomp: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgomp: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgomp: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgomp: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgomp: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libitm: maybe-all-stage1-target-libatomic +configure-stage2-target-libitm: maybe-all-stage2-target-libatomic +configure-stage3-target-libitm: maybe-all-stage3-target-libatomic +configure-stage4-target-libitm: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libitm: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libitm: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libitm: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libitm: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libitm: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgrust: maybe-all-stage1-target-libatomic +configure-stage2-target-libgrust: maybe-all-stage2-target-libatomic +configure-stage3-target-libgrust: maybe-all-stage3-target-libatomic +configure-stage4-target-libgrust: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgrust: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgrust: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgrust: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgrust: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgrust: maybe-all-stageautofeedback-target-libatomic +@endif gcc-bootstrap + +@if gcc-no-bootstrap +configure-target-libstdc++-v3: maybe-all-target-libatomic +configure-target-libsanitizer: maybe-all-target-libatomic +configure-target-libvtv: maybe-all-target-libatomic +configure-target-libssp: maybe-all-target-libatomic +configure-target-libbacktrace: maybe-all-target-libatomic +configure-target-libquadmath: maybe-all-target-libatomic +configure-target-libgfortran: maybe-all-target-libatomic +configure-target-libobjc: maybe-all-target-libatomic +configure-target-libgo: maybe-all-target-libatomic +configure-target-libphobos: maybe-all-target-libatomic +configure-target-libtermcap: maybe-all-target-libatomic +configure-target-winsup: maybe-all-target-libatomic +configure-target-libffi: maybe-all-target-libatomic +configure-target-zlib: maybe-all-target-libatomic +configure-target-rda: maybe-all-target-libatomic +configure-target-libada: maybe-all-target-libatomic +configure-target-libgm2: maybe-all-target-libatomic +configure-target-libgomp: maybe-all-target-libatomic +configure-target-libitm: maybe-all-target-libatomic +configure-target-libgrust: maybe-all-target-libatomic +@endif gcc-no-bootstrap + configure-target-libssp: maybe-all-target-newlib maybe-all-target-libgloss +@if gcc-bootstrap +configure-stage1-target-libstdc++-v3: maybe-all-stage1-target-libatomic +configure-stage2-target-libstdc++-v3: maybe-all-stage2-target-libatomic +configure-stage3-target-libstdc++-v3: maybe-all-stage3-target-libatomic +configure-stage4-target-libstdc++-v3: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libstdc++-v3: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libstdc++-v3: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libstdc++-v3: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libstdc++-v3: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libstdc++-v3: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libsanitizer: maybe-all-stage1-target-libatomic +configure-stage2-target-libsanitizer: maybe-all-stage2-target-libatomic +configure-stage3-target-libsanitizer: maybe-all-stage3-target-libatomic +configure-stage4-target-libsanitizer: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libsanitizer: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libsanitizer: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libsanitizer: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libsanitizer: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libsanitizer: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libvtv: maybe-all-stage1-target-libatomic +configure-stage2-target-libvtv: maybe-all-stage2-target-libatomic +configure-stage3-target-libvtv: maybe-all-stage3-target-libatomic +configure-stage4-target-libvtv: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libvtv: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libvtv: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libvtv: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libvtv: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libvtv: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libbacktrace: maybe-all-stage1-target-libatomic +configure-stage2-target-libbacktrace: maybe-all-stage2-target-libatomic +configure-stage3-target-libbacktrace: maybe-all-stage3-target-libatomic +configure-stage4-target-libbacktrace: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libbacktrace: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libbacktrace: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libbacktrace: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libbacktrace: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libbacktrace: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libphobos: maybe-all-stage1-target-libatomic +configure-stage2-target-libphobos: maybe-all-stage2-target-libatomic +configure-stage3-target-libphobos: maybe-all-stage3-target-libatomic +configure-stage4-target-libphobos: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libphobos: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libphobos: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libphobos: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libphobos: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libphobos: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-zlib: maybe-all-stage1-target-libatomic +configure-stage2-target-zlib: maybe-all-stage2-target-libatomic +configure-stage3-target-zlib: maybe-all-stage3-target-libatomic +configure-stage4-target-zlib: maybe-all-stage4-target-libatomic +configure-stageprofile-target-zlib: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-zlib: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-zlib: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-zlib: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-zlib: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgomp: maybe-all-stage1-target-libatomic +configure-stage2-target-libgomp: maybe-all-stage2-target-libatomic +configure-stage3-target-libgomp: maybe-all-stage3-target-libatomic +configure-stage4-target-libgomp: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgomp: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgomp: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgomp: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgomp: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgomp: maybe-all-stageautofeedback-target-libatomic +@endif gcc-bootstrap + +@if gcc-no-bootstrap +configure-target-libstdc++-v3: maybe-all-target-libatomic +configure-target-libsanitizer: maybe-all-target-libatomic +configure-target-libvtv: maybe-all-target-libatomic +configure-target-libssp: maybe-all-target-libatomic +configure-target-libbacktrace: maybe-all-target-libatomic +configure-target-libquadmath: maybe-all-target-libatomic +configure-target-libgfortran: maybe-all-target-libatomic +configure-target-libobjc: maybe-all-target-libatomic +configure-target-libgo: maybe-all-target-libatomic +configure-target-libphobos: maybe-all-target-libatomic +configure-target-libtermcap: maybe-all-target-libatomic +configure-target-winsup: maybe-all-target-libatomic +configure-target-libffi: maybe-all-target-libatomic +configure-target-zlib: maybe-all-target-libatomic +configure-target-rda: maybe-all-target-libatomic +configure-target-libada: maybe-all-target-libatomic +configure-target-libgm2: maybe-all-target-libatomic +configure-target-libgomp: maybe-all-target-libatomic +configure-target-libitm: maybe-all-target-libatomic +configure-target-libgrust: maybe-all-target-libatomic +@endif gcc-no-bootstrap +@if gcc-bootstrap +configure-stage1-target-libstdc++-v3: maybe-all-stage1-target-libatomic +configure-stage2-target-libstdc++-v3: maybe-all-stage2-target-libatomic +configure-stage3-target-libstdc++-v3: maybe-all-stage3-target-libatomic +configure-stage4-target-libstdc++-v3: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libstdc++-v3: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libstdc++-v3: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libstdc++-v3: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libstdc++-v3: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libstdc++-v3: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libsanitizer: maybe-all-stage1-target-libatomic +configure-stage2-target-libsanitizer: maybe-all-stage2-target-libatomic +configure-stage3-target-libsanitizer: maybe-all-stage3-target-libatomic +configure-stage4-target-libsanitizer: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libsanitizer: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libsanitizer: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libsanitizer: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libsanitizer: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libsanitizer: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libvtv: maybe-all-stage1-target-libatomic +configure-stage2-target-libvtv: maybe-all-stage2-target-libatomic +configure-stage3-target-libvtv: maybe-all-stage3-target-libatomic +configure-stage4-target-libvtv: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libvtv: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libvtv: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libvtv: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libvtv: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libvtv: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libbacktrace: maybe-all-stage1-target-libatomic +configure-stage2-target-libbacktrace: maybe-all-stage2-target-libatomic +configure-stage3-target-libbacktrace: maybe-all-stage3-target-libatomic +configure-stage4-target-libbacktrace: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libbacktrace: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libbacktrace: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libbacktrace: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libbacktrace: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libbacktrace: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libphobos: maybe-all-stage1-target-libatomic +configure-stage2-target-libphobos: maybe-all-stage2-target-libatomic +configure-stage3-target-libphobos: maybe-all-stage3-target-libatomic +configure-stage4-target-libphobos: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libphobos: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libphobos: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libphobos: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libphobos: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libphobos: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-zlib: maybe-all-stage1-target-libatomic +configure-stage2-target-zlib: maybe-all-stage2-target-libatomic +configure-stage3-target-zlib: maybe-all-stage3-target-libatomic +configure-stage4-target-zlib: maybe-all-stage4-target-libatomic +configure-stageprofile-target-zlib: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-zlib: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-zlib: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-zlib: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-zlib: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgomp: maybe-all-stage1-target-libatomic +configure-stage2-target-libgomp: maybe-all-stage2-target-libatomic +configure-stage3-target-libgomp: maybe-all-stage3-target-libatomic +configure-stage4-target-libgomp: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgomp: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgomp: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgomp: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgomp: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgomp: maybe-all-stageautofeedback-target-libatomic +@endif gcc-bootstrap + +@if gcc-no-bootstrap +configure-target-libstdc++-v3: maybe-all-target-libatomic +configure-target-libsanitizer: maybe-all-target-libatomic +configure-target-libvtv: maybe-all-target-libatomic +configure-target-libssp: maybe-all-target-libatomic +configure-target-libbacktrace: maybe-all-target-libatomic +configure-target-libquadmath: maybe-all-target-libatomic +configure-target-libgfortran: maybe-all-target-libatomic +configure-target-libobjc: maybe-all-target-libatomic +configure-target-libgo: maybe-all-target-libatomic +configure-target-libphobos: maybe-all-target-libatomic +configure-target-libtermcap: maybe-all-target-libatomic +configure-target-winsup: maybe-all-target-libatomic +configure-target-libffi: maybe-all-target-libatomic +configure-target-zlib: maybe-all-target-libatomic +configure-target-rda: maybe-all-target-libatomic +configure-target-libada: maybe-all-target-libatomic +configure-target-libgm2: maybe-all-target-libatomic +configure-target-libgomp: maybe-all-target-libatomic +configure-target-libitm: maybe-all-target-libatomic +configure-target-libgrust: maybe-all-target-libatomic +@endif gcc-no-bootstrap + + +@if gcc-bootstrap +configure-stage1-target-libstdc++-v3: maybe-all-stage1-target-libatomic +configure-stage2-target-libstdc++-v3: maybe-all-stage2-target-libatomic +configure-stage3-target-libstdc++-v3: maybe-all-stage3-target-libatomic +configure-stage4-target-libstdc++-v3: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libstdc++-v3: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libstdc++-v3: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libstdc++-v3: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libstdc++-v3: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libstdc++-v3: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libsanitizer: maybe-all-stage1-target-libatomic +configure-stage2-target-libsanitizer: maybe-all-stage2-target-libatomic +configure-stage3-target-libsanitizer: maybe-all-stage3-target-libatomic +configure-stage4-target-libsanitizer: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libsanitizer: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libsanitizer: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libsanitizer: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libsanitizer: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libsanitizer: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libvtv: maybe-all-stage1-target-libatomic +configure-stage2-target-libvtv: maybe-all-stage2-target-libatomic +configure-stage3-target-libvtv: maybe-all-stage3-target-libatomic +configure-stage4-target-libvtv: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libvtv: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libvtv: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libvtv: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libvtv: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libvtv: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libssp: maybe-all-stage1-target-libatomic +configure-stage2-target-libssp: maybe-all-stage2-target-libatomic +configure-stage3-target-libssp: maybe-all-stage3-target-libatomic +configure-stage4-target-libssp: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libssp: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libssp: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libssp: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libssp: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libssp: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libbacktrace: maybe-all-stage1-target-libatomic +configure-stage2-target-libbacktrace: maybe-all-stage2-target-libatomic +configure-stage3-target-libbacktrace: maybe-all-stage3-target-libatomic +configure-stage4-target-libbacktrace: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libbacktrace: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libbacktrace: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libbacktrace: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libbacktrace: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libbacktrace: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libquadmath: maybe-all-stage1-target-libatomic +configure-stage2-target-libquadmath: maybe-all-stage2-target-libatomic +configure-stage3-target-libquadmath: maybe-all-stage3-target-libatomic +configure-stage4-target-libquadmath: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libquadmath: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libquadmath: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libquadmath: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libquadmath: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libquadmath: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgfortran: maybe-all-stage1-target-libatomic +configure-stage2-target-libgfortran: maybe-all-stage2-target-libatomic +configure-stage3-target-libgfortran: maybe-all-stage3-target-libatomic +configure-stage4-target-libgfortran: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgfortran: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgfortran: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgfortran: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgfortran: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgfortran: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libobjc: maybe-all-stage1-target-libatomic +configure-stage2-target-libobjc: maybe-all-stage2-target-libatomic +configure-stage3-target-libobjc: maybe-all-stage3-target-libatomic +configure-stage4-target-libobjc: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libobjc: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libobjc: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libobjc: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libobjc: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libobjc: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgo: maybe-all-stage1-target-libatomic +configure-stage2-target-libgo: maybe-all-stage2-target-libatomic +configure-stage3-target-libgo: maybe-all-stage3-target-libatomic +configure-stage4-target-libgo: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgo: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgo: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgo: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgo: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgo: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libphobos: maybe-all-stage1-target-libatomic +configure-stage2-target-libphobos: maybe-all-stage2-target-libatomic +configure-stage3-target-libphobos: maybe-all-stage3-target-libatomic +configure-stage4-target-libphobos: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libphobos: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libphobos: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libphobos: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libphobos: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libphobos: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libtermcap: maybe-all-stage1-target-libatomic +configure-stage2-target-libtermcap: maybe-all-stage2-target-libatomic +configure-stage3-target-libtermcap: maybe-all-stage3-target-libatomic +configure-stage4-target-libtermcap: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libtermcap: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libtermcap: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libtermcap: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libtermcap: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libtermcap: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-winsup: maybe-all-stage1-target-libatomic +configure-stage2-target-winsup: maybe-all-stage2-target-libatomic +configure-stage3-target-winsup: maybe-all-stage3-target-libatomic +configure-stage4-target-winsup: maybe-all-stage4-target-libatomic +configure-stageprofile-target-winsup: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-winsup: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-winsup: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-winsup: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-winsup: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libffi: maybe-all-stage1-target-libatomic +configure-stage2-target-libffi: maybe-all-stage2-target-libatomic +configure-stage3-target-libffi: maybe-all-stage3-target-libatomic +configure-stage4-target-libffi: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libffi: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libffi: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libffi: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libffi: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libffi: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-zlib: maybe-all-stage1-target-libatomic +configure-stage2-target-zlib: maybe-all-stage2-target-libatomic +configure-stage3-target-zlib: maybe-all-stage3-target-libatomic +configure-stage4-target-zlib: maybe-all-stage4-target-libatomic +configure-stageprofile-target-zlib: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-zlib: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-zlib: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-zlib: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-zlib: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-rda: maybe-all-stage1-target-libatomic +configure-stage2-target-rda: maybe-all-stage2-target-libatomic +configure-stage3-target-rda: maybe-all-stage3-target-libatomic +configure-stage4-target-rda: maybe-all-stage4-target-libatomic +configure-stageprofile-target-rda: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-rda: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-rda: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-rda: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-rda: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libada: maybe-all-stage1-target-libatomic +configure-stage2-target-libada: maybe-all-stage2-target-libatomic +configure-stage3-target-libada: maybe-all-stage3-target-libatomic +configure-stage4-target-libada: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libada: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libada: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libada: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libada: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libada: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgm2: maybe-all-stage1-target-libatomic +configure-stage2-target-libgm2: maybe-all-stage2-target-libatomic +configure-stage3-target-libgm2: maybe-all-stage3-target-libatomic +configure-stage4-target-libgm2: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgm2: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgm2: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgm2: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgm2: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgm2: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgomp: maybe-all-stage1-target-libatomic +configure-stage2-target-libgomp: maybe-all-stage2-target-libatomic +configure-stage3-target-libgomp: maybe-all-stage3-target-libatomic +configure-stage4-target-libgomp: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgomp: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgomp: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgomp: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgomp: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgomp: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libitm: maybe-all-stage1-target-libatomic +configure-stage2-target-libitm: maybe-all-stage2-target-libatomic +configure-stage3-target-libitm: maybe-all-stage3-target-libatomic +configure-stage4-target-libitm: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libitm: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libitm: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libitm: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libitm: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libitm: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgrust: maybe-all-stage1-target-libatomic +configure-stage2-target-libgrust: maybe-all-stage2-target-libatomic +configure-stage3-target-libgrust: maybe-all-stage3-target-libatomic +configure-stage4-target-libgrust: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgrust: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgrust: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgrust: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgrust: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgrust: maybe-all-stageautofeedback-target-libatomic +@endif gcc-bootstrap + +@if gcc-no-bootstrap +configure-target-libstdc++-v3: maybe-all-target-libatomic +configure-target-libsanitizer: maybe-all-target-libatomic +configure-target-libvtv: maybe-all-target-libatomic +configure-target-libssp: maybe-all-target-libatomic +configure-target-libbacktrace: maybe-all-target-libatomic +configure-target-libquadmath: maybe-all-target-libatomic +configure-target-libgfortran: maybe-all-target-libatomic +configure-target-libobjc: maybe-all-target-libatomic +configure-target-libgo: maybe-all-target-libatomic +configure-target-libphobos: maybe-all-target-libatomic +configure-target-libtermcap: maybe-all-target-libatomic +configure-target-winsup: maybe-all-target-libatomic +configure-target-libffi: maybe-all-target-libatomic +configure-target-zlib: maybe-all-target-libatomic +configure-target-rda: maybe-all-target-libatomic +configure-target-libada: maybe-all-target-libatomic +configure-target-libgm2: maybe-all-target-libatomic +configure-target-libgomp: maybe-all-target-libatomic +configure-target-libitm: maybe-all-target-libatomic +configure-target-libgrust: maybe-all-target-libatomic +@endif gcc-no-bootstrap + configure-target-libbacktrace: maybe-all-target-newlib maybe-all-target-libgloss +@if gcc-bootstrap +configure-stage1-target-libstdc++-v3: maybe-all-stage1-target-libatomic +configure-stage2-target-libstdc++-v3: maybe-all-stage2-target-libatomic +configure-stage3-target-libstdc++-v3: maybe-all-stage3-target-libatomic +configure-stage4-target-libstdc++-v3: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libstdc++-v3: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libstdc++-v3: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libstdc++-v3: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libstdc++-v3: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libstdc++-v3: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libsanitizer: maybe-all-stage1-target-libatomic +configure-stage2-target-libsanitizer: maybe-all-stage2-target-libatomic +configure-stage3-target-libsanitizer: maybe-all-stage3-target-libatomic +configure-stage4-target-libsanitizer: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libsanitizer: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libsanitizer: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libsanitizer: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libsanitizer: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libsanitizer: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libvtv: maybe-all-stage1-target-libatomic +configure-stage2-target-libvtv: maybe-all-stage2-target-libatomic +configure-stage3-target-libvtv: maybe-all-stage3-target-libatomic +configure-stage4-target-libvtv: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libvtv: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libvtv: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libvtv: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libvtv: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libvtv: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libssp: maybe-all-stage1-target-libatomic +configure-stage2-target-libssp: maybe-all-stage2-target-libatomic +configure-stage3-target-libssp: maybe-all-stage3-target-libatomic +configure-stage4-target-libssp: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libssp: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libssp: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libssp: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libssp: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libssp: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libbacktrace: maybe-all-stage1-target-libatomic +configure-stage2-target-libbacktrace: maybe-all-stage2-target-libatomic +configure-stage3-target-libbacktrace: maybe-all-stage3-target-libatomic +configure-stage4-target-libbacktrace: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libbacktrace: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libbacktrace: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libbacktrace: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libbacktrace: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libbacktrace: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libquadmath: maybe-all-stage1-target-libatomic +configure-stage2-target-libquadmath: maybe-all-stage2-target-libatomic +configure-stage3-target-libquadmath: maybe-all-stage3-target-libatomic +configure-stage4-target-libquadmath: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libquadmath: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libquadmath: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libquadmath: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libquadmath: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libquadmath: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgfortran: maybe-all-stage1-target-libatomic +configure-stage2-target-libgfortran: maybe-all-stage2-target-libatomic +configure-stage3-target-libgfortran: maybe-all-stage3-target-libatomic +configure-stage4-target-libgfortran: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgfortran: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgfortran: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgfortran: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgfortran: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgfortran: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libobjc: maybe-all-stage1-target-libatomic +configure-stage2-target-libobjc: maybe-all-stage2-target-libatomic +configure-stage3-target-libobjc: maybe-all-stage3-target-libatomic +configure-stage4-target-libobjc: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libobjc: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libobjc: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libobjc: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libobjc: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libobjc: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgo: maybe-all-stage1-target-libatomic +configure-stage2-target-libgo: maybe-all-stage2-target-libatomic +configure-stage3-target-libgo: maybe-all-stage3-target-libatomic +configure-stage4-target-libgo: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgo: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgo: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgo: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgo: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgo: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libphobos: maybe-all-stage1-target-libatomic +configure-stage2-target-libphobos: maybe-all-stage2-target-libatomic +configure-stage3-target-libphobos: maybe-all-stage3-target-libatomic +configure-stage4-target-libphobos: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libphobos: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libphobos: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libphobos: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libphobos: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libphobos: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libtermcap: maybe-all-stage1-target-libatomic +configure-stage2-target-libtermcap: maybe-all-stage2-target-libatomic +configure-stage3-target-libtermcap: maybe-all-stage3-target-libatomic +configure-stage4-target-libtermcap: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libtermcap: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libtermcap: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libtermcap: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libtermcap: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libtermcap: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-winsup: maybe-all-stage1-target-libatomic +configure-stage2-target-winsup: maybe-all-stage2-target-libatomic +configure-stage3-target-winsup: maybe-all-stage3-target-libatomic +configure-stage4-target-winsup: maybe-all-stage4-target-libatomic +configure-stageprofile-target-winsup: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-winsup: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-winsup: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-winsup: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-winsup: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libffi: maybe-all-stage1-target-libatomic +configure-stage2-target-libffi: maybe-all-stage2-target-libatomic +configure-stage3-target-libffi: maybe-all-stage3-target-libatomic +configure-stage4-target-libffi: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libffi: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libffi: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libffi: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libffi: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libffi: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-zlib: maybe-all-stage1-target-libatomic +configure-stage2-target-zlib: maybe-all-stage2-target-libatomic +configure-stage3-target-zlib: maybe-all-stage3-target-libatomic +configure-stage4-target-zlib: maybe-all-stage4-target-libatomic +configure-stageprofile-target-zlib: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-zlib: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-zlib: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-zlib: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-zlib: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-rda: maybe-all-stage1-target-libatomic +configure-stage2-target-rda: maybe-all-stage2-target-libatomic +configure-stage3-target-rda: maybe-all-stage3-target-libatomic +configure-stage4-target-rda: maybe-all-stage4-target-libatomic +configure-stageprofile-target-rda: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-rda: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-rda: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-rda: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-rda: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libada: maybe-all-stage1-target-libatomic +configure-stage2-target-libada: maybe-all-stage2-target-libatomic +configure-stage3-target-libada: maybe-all-stage3-target-libatomic +configure-stage4-target-libada: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libada: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libada: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libada: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libada: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libada: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgm2: maybe-all-stage1-target-libatomic +configure-stage2-target-libgm2: maybe-all-stage2-target-libatomic +configure-stage3-target-libgm2: maybe-all-stage3-target-libatomic +configure-stage4-target-libgm2: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgm2: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgm2: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgm2: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgm2: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgm2: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgomp: maybe-all-stage1-target-libatomic +configure-stage2-target-libgomp: maybe-all-stage2-target-libatomic +configure-stage3-target-libgomp: maybe-all-stage3-target-libatomic +configure-stage4-target-libgomp: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgomp: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgomp: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgomp: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgomp: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgomp: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libitm: maybe-all-stage1-target-libatomic +configure-stage2-target-libitm: maybe-all-stage2-target-libatomic +configure-stage3-target-libitm: maybe-all-stage3-target-libatomic +configure-stage4-target-libitm: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libitm: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libitm: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libitm: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libitm: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libitm: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgrust: maybe-all-stage1-target-libatomic +configure-stage2-target-libgrust: maybe-all-stage2-target-libatomic +configure-stage3-target-libgrust: maybe-all-stage3-target-libatomic +configure-stage4-target-libgrust: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgrust: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgrust: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgrust: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgrust: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgrust: maybe-all-stageautofeedback-target-libatomic +@endif gcc-bootstrap + +@if gcc-no-bootstrap +configure-target-libstdc++-v3: maybe-all-target-libatomic +configure-target-libsanitizer: maybe-all-target-libatomic +configure-target-libvtv: maybe-all-target-libatomic +configure-target-libssp: maybe-all-target-libatomic +configure-target-libbacktrace: maybe-all-target-libatomic +configure-target-libquadmath: maybe-all-target-libatomic +configure-target-libgfortran: maybe-all-target-libatomic +configure-target-libobjc: maybe-all-target-libatomic +configure-target-libgo: maybe-all-target-libatomic +configure-target-libphobos: maybe-all-target-libatomic +configure-target-libtermcap: maybe-all-target-libatomic +configure-target-winsup: maybe-all-target-libatomic +configure-target-libffi: maybe-all-target-libatomic +configure-target-zlib: maybe-all-target-libatomic +configure-target-rda: maybe-all-target-libatomic +configure-target-libada: maybe-all-target-libatomic +configure-target-libgm2: maybe-all-target-libatomic +configure-target-libgomp: maybe-all-target-libatomic +configure-target-libitm: maybe-all-target-libatomic +configure-target-libgrust: maybe-all-target-libatomic +@endif gcc-no-bootstrap + configure-target-libquadmath: maybe-all-target-newlib maybe-all-target-libgloss +@if gcc-bootstrap +configure-stage1-target-libstdc++-v3: maybe-all-stage1-target-libatomic +configure-stage2-target-libstdc++-v3: maybe-all-stage2-target-libatomic +configure-stage3-target-libstdc++-v3: maybe-all-stage3-target-libatomic +configure-stage4-target-libstdc++-v3: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libstdc++-v3: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libstdc++-v3: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libstdc++-v3: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libstdc++-v3: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libstdc++-v3: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libsanitizer: maybe-all-stage1-target-libatomic +configure-stage2-target-libsanitizer: maybe-all-stage2-target-libatomic +configure-stage3-target-libsanitizer: maybe-all-stage3-target-libatomic +configure-stage4-target-libsanitizer: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libsanitizer: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libsanitizer: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libsanitizer: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libsanitizer: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libsanitizer: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libvtv: maybe-all-stage1-target-libatomic +configure-stage2-target-libvtv: maybe-all-stage2-target-libatomic +configure-stage3-target-libvtv: maybe-all-stage3-target-libatomic +configure-stage4-target-libvtv: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libvtv: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libvtv: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libvtv: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libvtv: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libvtv: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libbacktrace: maybe-all-stage1-target-libatomic +configure-stage2-target-libbacktrace: maybe-all-stage2-target-libatomic +configure-stage3-target-libbacktrace: maybe-all-stage3-target-libatomic +configure-stage4-target-libbacktrace: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libbacktrace: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libbacktrace: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libbacktrace: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libbacktrace: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libbacktrace: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libphobos: maybe-all-stage1-target-libatomic +configure-stage2-target-libphobos: maybe-all-stage2-target-libatomic +configure-stage3-target-libphobos: maybe-all-stage3-target-libatomic +configure-stage4-target-libphobos: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libphobos: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libphobos: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libphobos: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libphobos: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libphobos: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-zlib: maybe-all-stage1-target-libatomic +configure-stage2-target-zlib: maybe-all-stage2-target-libatomic +configure-stage3-target-zlib: maybe-all-stage3-target-libatomic +configure-stage4-target-zlib: maybe-all-stage4-target-libatomic +configure-stageprofile-target-zlib: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-zlib: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-zlib: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-zlib: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-zlib: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgomp: maybe-all-stage1-target-libatomic +configure-stage2-target-libgomp: maybe-all-stage2-target-libatomic +configure-stage3-target-libgomp: maybe-all-stage3-target-libatomic +configure-stage4-target-libgomp: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgomp: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgomp: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgomp: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgomp: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgomp: maybe-all-stageautofeedback-target-libatomic +@endif gcc-bootstrap + +@if gcc-no-bootstrap +configure-target-libstdc++-v3: maybe-all-target-libatomic +configure-target-libsanitizer: maybe-all-target-libatomic +configure-target-libvtv: maybe-all-target-libatomic +configure-target-libssp: maybe-all-target-libatomic +configure-target-libbacktrace: maybe-all-target-libatomic +configure-target-libquadmath: maybe-all-target-libatomic +configure-target-libgfortran: maybe-all-target-libatomic +configure-target-libobjc: maybe-all-target-libatomic +configure-target-libgo: maybe-all-target-libatomic +configure-target-libphobos: maybe-all-target-libatomic +configure-target-libtermcap: maybe-all-target-libatomic +configure-target-winsup: maybe-all-target-libatomic +configure-target-libffi: maybe-all-target-libatomic +configure-target-zlib: maybe-all-target-libatomic +configure-target-rda: maybe-all-target-libatomic +configure-target-libada: maybe-all-target-libatomic +configure-target-libgm2: maybe-all-target-libatomic +configure-target-libgomp: maybe-all-target-libatomic +configure-target-libitm: maybe-all-target-libatomic +configure-target-libgrust: maybe-all-target-libatomic +@endif gcc-no-bootstrap + configure-target-libgfortran: maybe-all-target-newlib maybe-all-target-libgloss +@if gcc-bootstrap +configure-stage1-target-libstdc++-v3: maybe-all-stage1-target-libatomic +configure-stage2-target-libstdc++-v3: maybe-all-stage2-target-libatomic +configure-stage3-target-libstdc++-v3: maybe-all-stage3-target-libatomic +configure-stage4-target-libstdc++-v3: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libstdc++-v3: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libstdc++-v3: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libstdc++-v3: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libstdc++-v3: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libstdc++-v3: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libsanitizer: maybe-all-stage1-target-libatomic +configure-stage2-target-libsanitizer: maybe-all-stage2-target-libatomic +configure-stage3-target-libsanitizer: maybe-all-stage3-target-libatomic +configure-stage4-target-libsanitizer: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libsanitizer: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libsanitizer: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libsanitizer: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libsanitizer: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libsanitizer: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libvtv: maybe-all-stage1-target-libatomic +configure-stage2-target-libvtv: maybe-all-stage2-target-libatomic +configure-stage3-target-libvtv: maybe-all-stage3-target-libatomic +configure-stage4-target-libvtv: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libvtv: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libvtv: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libvtv: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libvtv: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libvtv: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libbacktrace: maybe-all-stage1-target-libatomic +configure-stage2-target-libbacktrace: maybe-all-stage2-target-libatomic +configure-stage3-target-libbacktrace: maybe-all-stage3-target-libatomic +configure-stage4-target-libbacktrace: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libbacktrace: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libbacktrace: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libbacktrace: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libbacktrace: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libbacktrace: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libphobos: maybe-all-stage1-target-libatomic +configure-stage2-target-libphobos: maybe-all-stage2-target-libatomic +configure-stage3-target-libphobos: maybe-all-stage3-target-libatomic +configure-stage4-target-libphobos: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libphobos: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libphobos: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libphobos: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libphobos: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libphobos: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-zlib: maybe-all-stage1-target-libatomic +configure-stage2-target-zlib: maybe-all-stage2-target-libatomic +configure-stage3-target-zlib: maybe-all-stage3-target-libatomic +configure-stage4-target-zlib: maybe-all-stage4-target-libatomic +configure-stageprofile-target-zlib: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-zlib: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-zlib: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-zlib: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-zlib: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgomp: maybe-all-stage1-target-libatomic +configure-stage2-target-libgomp: maybe-all-stage2-target-libatomic +configure-stage3-target-libgomp: maybe-all-stage3-target-libatomic +configure-stage4-target-libgomp: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgomp: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgomp: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgomp: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgomp: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgomp: maybe-all-stageautofeedback-target-libatomic +@endif gcc-bootstrap + +@if gcc-no-bootstrap +configure-target-libstdc++-v3: maybe-all-target-libatomic +configure-target-libsanitizer: maybe-all-target-libatomic +configure-target-libvtv: maybe-all-target-libatomic +configure-target-libssp: maybe-all-target-libatomic +configure-target-libbacktrace: maybe-all-target-libatomic +configure-target-libquadmath: maybe-all-target-libatomic +configure-target-libgfortran: maybe-all-target-libatomic +configure-target-libobjc: maybe-all-target-libatomic +configure-target-libgo: maybe-all-target-libatomic +configure-target-libphobos: maybe-all-target-libatomic +configure-target-libtermcap: maybe-all-target-libatomic +configure-target-winsup: maybe-all-target-libatomic +configure-target-libffi: maybe-all-target-libatomic +configure-target-zlib: maybe-all-target-libatomic +configure-target-rda: maybe-all-target-libatomic +configure-target-libada: maybe-all-target-libatomic +configure-target-libgm2: maybe-all-target-libatomic +configure-target-libgomp: maybe-all-target-libatomic +configure-target-libitm: maybe-all-target-libatomic +configure-target-libgrust: maybe-all-target-libatomic +@endif gcc-no-bootstrap + configure-target-libobjc: maybe-all-target-newlib maybe-all-target-libgloss +@if gcc-bootstrap +configure-stage1-target-libstdc++-v3: maybe-all-stage1-target-libatomic +configure-stage2-target-libstdc++-v3: maybe-all-stage2-target-libatomic +configure-stage3-target-libstdc++-v3: maybe-all-stage3-target-libatomic +configure-stage4-target-libstdc++-v3: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libstdc++-v3: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libstdc++-v3: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libstdc++-v3: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libstdc++-v3: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libstdc++-v3: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libsanitizer: maybe-all-stage1-target-libatomic +configure-stage2-target-libsanitizer: maybe-all-stage2-target-libatomic +configure-stage3-target-libsanitizer: maybe-all-stage3-target-libatomic +configure-stage4-target-libsanitizer: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libsanitizer: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libsanitizer: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libsanitizer: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libsanitizer: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libsanitizer: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libvtv: maybe-all-stage1-target-libatomic +configure-stage2-target-libvtv: maybe-all-stage2-target-libatomic +configure-stage3-target-libvtv: maybe-all-stage3-target-libatomic +configure-stage4-target-libvtv: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libvtv: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libvtv: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libvtv: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libvtv: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libvtv: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libbacktrace: maybe-all-stage1-target-libatomic +configure-stage2-target-libbacktrace: maybe-all-stage2-target-libatomic +configure-stage3-target-libbacktrace: maybe-all-stage3-target-libatomic +configure-stage4-target-libbacktrace: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libbacktrace: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libbacktrace: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libbacktrace: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libbacktrace: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libbacktrace: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libphobos: maybe-all-stage1-target-libatomic +configure-stage2-target-libphobos: maybe-all-stage2-target-libatomic +configure-stage3-target-libphobos: maybe-all-stage3-target-libatomic +configure-stage4-target-libphobos: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libphobos: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libphobos: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libphobos: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libphobos: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libphobos: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-zlib: maybe-all-stage1-target-libatomic +configure-stage2-target-zlib: maybe-all-stage2-target-libatomic +configure-stage3-target-zlib: maybe-all-stage3-target-libatomic +configure-stage4-target-zlib: maybe-all-stage4-target-libatomic +configure-stageprofile-target-zlib: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-zlib: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-zlib: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-zlib: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-zlib: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgomp: maybe-all-stage1-target-libatomic +configure-stage2-target-libgomp: maybe-all-stage2-target-libatomic +configure-stage3-target-libgomp: maybe-all-stage3-target-libatomic +configure-stage4-target-libgomp: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgomp: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgomp: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgomp: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgomp: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgomp: maybe-all-stageautofeedback-target-libatomic +@endif gcc-bootstrap + +@if gcc-no-bootstrap +configure-target-libstdc++-v3: maybe-all-target-libatomic +configure-target-libsanitizer: maybe-all-target-libatomic +configure-target-libvtv: maybe-all-target-libatomic +configure-target-libssp: maybe-all-target-libatomic +configure-target-libbacktrace: maybe-all-target-libatomic +configure-target-libquadmath: maybe-all-target-libatomic +configure-target-libgfortran: maybe-all-target-libatomic +configure-target-libobjc: maybe-all-target-libatomic +configure-target-libgo: maybe-all-target-libatomic +configure-target-libphobos: maybe-all-target-libatomic +configure-target-libtermcap: maybe-all-target-libatomic +configure-target-winsup: maybe-all-target-libatomic +configure-target-libffi: maybe-all-target-libatomic +configure-target-zlib: maybe-all-target-libatomic +configure-target-rda: maybe-all-target-libatomic +configure-target-libada: maybe-all-target-libatomic +configure-target-libgm2: maybe-all-target-libatomic +configure-target-libgomp: maybe-all-target-libatomic +configure-target-libitm: maybe-all-target-libatomic +configure-target-libgrust: maybe-all-target-libatomic +@endif gcc-no-bootstrap + configure-target-libgo: maybe-all-target-newlib maybe-all-target-libgloss +@if gcc-bootstrap +configure-stage1-target-libstdc++-v3: maybe-all-stage1-target-libatomic +configure-stage2-target-libstdc++-v3: maybe-all-stage2-target-libatomic +configure-stage3-target-libstdc++-v3: maybe-all-stage3-target-libatomic +configure-stage4-target-libstdc++-v3: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libstdc++-v3: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libstdc++-v3: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libstdc++-v3: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libstdc++-v3: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libstdc++-v3: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libsanitizer: maybe-all-stage1-target-libatomic +configure-stage2-target-libsanitizer: maybe-all-stage2-target-libatomic +configure-stage3-target-libsanitizer: maybe-all-stage3-target-libatomic +configure-stage4-target-libsanitizer: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libsanitizer: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libsanitizer: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libsanitizer: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libsanitizer: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libsanitizer: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libvtv: maybe-all-stage1-target-libatomic +configure-stage2-target-libvtv: maybe-all-stage2-target-libatomic +configure-stage3-target-libvtv: maybe-all-stage3-target-libatomic +configure-stage4-target-libvtv: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libvtv: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libvtv: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libvtv: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libvtv: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libvtv: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libbacktrace: maybe-all-stage1-target-libatomic +configure-stage2-target-libbacktrace: maybe-all-stage2-target-libatomic +configure-stage3-target-libbacktrace: maybe-all-stage3-target-libatomic +configure-stage4-target-libbacktrace: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libbacktrace: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libbacktrace: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libbacktrace: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libbacktrace: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libbacktrace: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libphobos: maybe-all-stage1-target-libatomic +configure-stage2-target-libphobos: maybe-all-stage2-target-libatomic +configure-stage3-target-libphobos: maybe-all-stage3-target-libatomic +configure-stage4-target-libphobos: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libphobos: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libphobos: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libphobos: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libphobos: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libphobos: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-zlib: maybe-all-stage1-target-libatomic +configure-stage2-target-zlib: maybe-all-stage2-target-libatomic +configure-stage3-target-zlib: maybe-all-stage3-target-libatomic +configure-stage4-target-zlib: maybe-all-stage4-target-libatomic +configure-stageprofile-target-zlib: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-zlib: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-zlib: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-zlib: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-zlib: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgomp: maybe-all-stage1-target-libatomic +configure-stage2-target-libgomp: maybe-all-stage2-target-libatomic +configure-stage3-target-libgomp: maybe-all-stage3-target-libatomic +configure-stage4-target-libgomp: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgomp: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgomp: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgomp: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgomp: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgomp: maybe-all-stageautofeedback-target-libatomic +@endif gcc-bootstrap + +@if gcc-no-bootstrap +configure-target-libstdc++-v3: maybe-all-target-libatomic +configure-target-libsanitizer: maybe-all-target-libatomic +configure-target-libvtv: maybe-all-target-libatomic +configure-target-libssp: maybe-all-target-libatomic +configure-target-libbacktrace: maybe-all-target-libatomic +configure-target-libquadmath: maybe-all-target-libatomic +configure-target-libgfortran: maybe-all-target-libatomic +configure-target-libobjc: maybe-all-target-libatomic +configure-target-libgo: maybe-all-target-libatomic +configure-target-libphobos: maybe-all-target-libatomic +configure-target-libtermcap: maybe-all-target-libatomic +configure-target-winsup: maybe-all-target-libatomic +configure-target-libffi: maybe-all-target-libatomic +configure-target-zlib: maybe-all-target-libatomic +configure-target-rda: maybe-all-target-libatomic +configure-target-libada: maybe-all-target-libatomic +configure-target-libgm2: maybe-all-target-libatomic +configure-target-libgomp: maybe-all-target-libatomic +configure-target-libitm: maybe-all-target-libatomic +configure-target-libgrust: maybe-all-target-libatomic +@endif gcc-no-bootstrap + configure-target-libphobos: maybe-all-target-newlib maybe-all-target-libgloss +@if gcc-bootstrap +configure-stage1-target-libstdc++-v3: maybe-all-stage1-target-libatomic +configure-stage2-target-libstdc++-v3: maybe-all-stage2-target-libatomic +configure-stage3-target-libstdc++-v3: maybe-all-stage3-target-libatomic +configure-stage4-target-libstdc++-v3: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libstdc++-v3: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libstdc++-v3: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libstdc++-v3: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libstdc++-v3: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libstdc++-v3: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libsanitizer: maybe-all-stage1-target-libatomic +configure-stage2-target-libsanitizer: maybe-all-stage2-target-libatomic +configure-stage3-target-libsanitizer: maybe-all-stage3-target-libatomic +configure-stage4-target-libsanitizer: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libsanitizer: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libsanitizer: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libsanitizer: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libsanitizer: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libsanitizer: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libvtv: maybe-all-stage1-target-libatomic +configure-stage2-target-libvtv: maybe-all-stage2-target-libatomic +configure-stage3-target-libvtv: maybe-all-stage3-target-libatomic +configure-stage4-target-libvtv: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libvtv: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libvtv: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libvtv: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libvtv: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libvtv: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libssp: maybe-all-stage1-target-libatomic +configure-stage2-target-libssp: maybe-all-stage2-target-libatomic +configure-stage3-target-libssp: maybe-all-stage3-target-libatomic +configure-stage4-target-libssp: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libssp: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libssp: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libssp: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libssp: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libssp: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libbacktrace: maybe-all-stage1-target-libatomic +configure-stage2-target-libbacktrace: maybe-all-stage2-target-libatomic +configure-stage3-target-libbacktrace: maybe-all-stage3-target-libatomic +configure-stage4-target-libbacktrace: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libbacktrace: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libbacktrace: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libbacktrace: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libbacktrace: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libbacktrace: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libquadmath: maybe-all-stage1-target-libatomic +configure-stage2-target-libquadmath: maybe-all-stage2-target-libatomic +configure-stage3-target-libquadmath: maybe-all-stage3-target-libatomic +configure-stage4-target-libquadmath: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libquadmath: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libquadmath: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libquadmath: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libquadmath: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libquadmath: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgfortran: maybe-all-stage1-target-libatomic +configure-stage2-target-libgfortran: maybe-all-stage2-target-libatomic +configure-stage3-target-libgfortran: maybe-all-stage3-target-libatomic +configure-stage4-target-libgfortran: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgfortran: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgfortran: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgfortran: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgfortran: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgfortran: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libobjc: maybe-all-stage1-target-libatomic +configure-stage2-target-libobjc: maybe-all-stage2-target-libatomic +configure-stage3-target-libobjc: maybe-all-stage3-target-libatomic +configure-stage4-target-libobjc: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libobjc: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libobjc: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libobjc: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libobjc: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libobjc: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgo: maybe-all-stage1-target-libatomic +configure-stage2-target-libgo: maybe-all-stage2-target-libatomic +configure-stage3-target-libgo: maybe-all-stage3-target-libatomic +configure-stage4-target-libgo: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgo: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgo: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgo: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgo: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgo: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libphobos: maybe-all-stage1-target-libatomic +configure-stage2-target-libphobos: maybe-all-stage2-target-libatomic +configure-stage3-target-libphobos: maybe-all-stage3-target-libatomic +configure-stage4-target-libphobos: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libphobos: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libphobos: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libphobos: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libphobos: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libphobos: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libtermcap: maybe-all-stage1-target-libatomic +configure-stage2-target-libtermcap: maybe-all-stage2-target-libatomic +configure-stage3-target-libtermcap: maybe-all-stage3-target-libatomic +configure-stage4-target-libtermcap: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libtermcap: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libtermcap: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libtermcap: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libtermcap: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libtermcap: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-winsup: maybe-all-stage1-target-libatomic +configure-stage2-target-winsup: maybe-all-stage2-target-libatomic +configure-stage3-target-winsup: maybe-all-stage3-target-libatomic +configure-stage4-target-winsup: maybe-all-stage4-target-libatomic +configure-stageprofile-target-winsup: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-winsup: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-winsup: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-winsup: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-winsup: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libffi: maybe-all-stage1-target-libatomic +configure-stage2-target-libffi: maybe-all-stage2-target-libatomic +configure-stage3-target-libffi: maybe-all-stage3-target-libatomic +configure-stage4-target-libffi: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libffi: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libffi: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libffi: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libffi: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libffi: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-zlib: maybe-all-stage1-target-libatomic +configure-stage2-target-zlib: maybe-all-stage2-target-libatomic +configure-stage3-target-zlib: maybe-all-stage3-target-libatomic +configure-stage4-target-zlib: maybe-all-stage4-target-libatomic +configure-stageprofile-target-zlib: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-zlib: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-zlib: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-zlib: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-zlib: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-rda: maybe-all-stage1-target-libatomic +configure-stage2-target-rda: maybe-all-stage2-target-libatomic +configure-stage3-target-rda: maybe-all-stage3-target-libatomic +configure-stage4-target-rda: maybe-all-stage4-target-libatomic +configure-stageprofile-target-rda: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-rda: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-rda: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-rda: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-rda: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libada: maybe-all-stage1-target-libatomic +configure-stage2-target-libada: maybe-all-stage2-target-libatomic +configure-stage3-target-libada: maybe-all-stage3-target-libatomic +configure-stage4-target-libada: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libada: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libada: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libada: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libada: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libada: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgm2: maybe-all-stage1-target-libatomic +configure-stage2-target-libgm2: maybe-all-stage2-target-libatomic +configure-stage3-target-libgm2: maybe-all-stage3-target-libatomic +configure-stage4-target-libgm2: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgm2: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgm2: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgm2: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgm2: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgm2: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgomp: maybe-all-stage1-target-libatomic +configure-stage2-target-libgomp: maybe-all-stage2-target-libatomic +configure-stage3-target-libgomp: maybe-all-stage3-target-libatomic +configure-stage4-target-libgomp: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgomp: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgomp: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgomp: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgomp: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgomp: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libitm: maybe-all-stage1-target-libatomic +configure-stage2-target-libitm: maybe-all-stage2-target-libatomic +configure-stage3-target-libitm: maybe-all-stage3-target-libatomic +configure-stage4-target-libitm: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libitm: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libitm: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libitm: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libitm: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libitm: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgrust: maybe-all-stage1-target-libatomic +configure-stage2-target-libgrust: maybe-all-stage2-target-libatomic +configure-stage3-target-libgrust: maybe-all-stage3-target-libatomic +configure-stage4-target-libgrust: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgrust: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgrust: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgrust: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgrust: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgrust: maybe-all-stageautofeedback-target-libatomic +@endif gcc-bootstrap + +@if gcc-no-bootstrap +configure-target-libstdc++-v3: maybe-all-target-libatomic +configure-target-libsanitizer: maybe-all-target-libatomic +configure-target-libvtv: maybe-all-target-libatomic +configure-target-libssp: maybe-all-target-libatomic +configure-target-libbacktrace: maybe-all-target-libatomic +configure-target-libquadmath: maybe-all-target-libatomic +configure-target-libgfortran: maybe-all-target-libatomic +configure-target-libobjc: maybe-all-target-libatomic +configure-target-libgo: maybe-all-target-libatomic +configure-target-libphobos: maybe-all-target-libatomic +configure-target-libtermcap: maybe-all-target-libatomic +configure-target-winsup: maybe-all-target-libatomic +configure-target-libffi: maybe-all-target-libatomic +configure-target-zlib: maybe-all-target-libatomic +configure-target-rda: maybe-all-target-libatomic +configure-target-libada: maybe-all-target-libatomic +configure-target-libgm2: maybe-all-target-libatomic +configure-target-libgomp: maybe-all-target-libatomic +configure-target-libitm: maybe-all-target-libatomic +configure-target-libgrust: maybe-all-target-libatomic +@endif gcc-no-bootstrap + configure-target-libtermcap: maybe-all-target-newlib maybe-all-target-libgloss +@if gcc-bootstrap +configure-stage1-target-libstdc++-v3: maybe-all-stage1-target-libatomic +configure-stage2-target-libstdc++-v3: maybe-all-stage2-target-libatomic +configure-stage3-target-libstdc++-v3: maybe-all-stage3-target-libatomic +configure-stage4-target-libstdc++-v3: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libstdc++-v3: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libstdc++-v3: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libstdc++-v3: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libstdc++-v3: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libstdc++-v3: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libsanitizer: maybe-all-stage1-target-libatomic +configure-stage2-target-libsanitizer: maybe-all-stage2-target-libatomic +configure-stage3-target-libsanitizer: maybe-all-stage3-target-libatomic +configure-stage4-target-libsanitizer: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libsanitizer: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libsanitizer: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libsanitizer: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libsanitizer: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libsanitizer: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libvtv: maybe-all-stage1-target-libatomic +configure-stage2-target-libvtv: maybe-all-stage2-target-libatomic +configure-stage3-target-libvtv: maybe-all-stage3-target-libatomic +configure-stage4-target-libvtv: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libvtv: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libvtv: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libvtv: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libvtv: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libvtv: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libbacktrace: maybe-all-stage1-target-libatomic +configure-stage2-target-libbacktrace: maybe-all-stage2-target-libatomic +configure-stage3-target-libbacktrace: maybe-all-stage3-target-libatomic +configure-stage4-target-libbacktrace: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libbacktrace: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libbacktrace: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libbacktrace: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libbacktrace: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libbacktrace: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libphobos: maybe-all-stage1-target-libatomic +configure-stage2-target-libphobos: maybe-all-stage2-target-libatomic +configure-stage3-target-libphobos: maybe-all-stage3-target-libatomic +configure-stage4-target-libphobos: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libphobos: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libphobos: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libphobos: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libphobos: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libphobos: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-zlib: maybe-all-stage1-target-libatomic +configure-stage2-target-zlib: maybe-all-stage2-target-libatomic +configure-stage3-target-zlib: maybe-all-stage3-target-libatomic +configure-stage4-target-zlib: maybe-all-stage4-target-libatomic +configure-stageprofile-target-zlib: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-zlib: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-zlib: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-zlib: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-zlib: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgomp: maybe-all-stage1-target-libatomic +configure-stage2-target-libgomp: maybe-all-stage2-target-libatomic +configure-stage3-target-libgomp: maybe-all-stage3-target-libatomic +configure-stage4-target-libgomp: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgomp: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgomp: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgomp: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgomp: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgomp: maybe-all-stageautofeedback-target-libatomic +@endif gcc-bootstrap + +@if gcc-no-bootstrap +configure-target-libstdc++-v3: maybe-all-target-libatomic +configure-target-libsanitizer: maybe-all-target-libatomic +configure-target-libvtv: maybe-all-target-libatomic +configure-target-libssp: maybe-all-target-libatomic +configure-target-libbacktrace: maybe-all-target-libatomic +configure-target-libquadmath: maybe-all-target-libatomic +configure-target-libgfortran: maybe-all-target-libatomic +configure-target-libobjc: maybe-all-target-libatomic +configure-target-libgo: maybe-all-target-libatomic +configure-target-libphobos: maybe-all-target-libatomic +configure-target-libtermcap: maybe-all-target-libatomic +configure-target-winsup: maybe-all-target-libatomic +configure-target-libffi: maybe-all-target-libatomic +configure-target-zlib: maybe-all-target-libatomic +configure-target-rda: maybe-all-target-libatomic +configure-target-libada: maybe-all-target-libatomic +configure-target-libgm2: maybe-all-target-libatomic +configure-target-libgomp: maybe-all-target-libatomic +configure-target-libitm: maybe-all-target-libatomic +configure-target-libgrust: maybe-all-target-libatomic +@endif gcc-no-bootstrap + configure-target-winsup: maybe-all-target-newlib maybe-all-target-libgloss +@if gcc-bootstrap +configure-stage1-target-libstdc++-v3: maybe-all-stage1-target-libatomic +configure-stage2-target-libstdc++-v3: maybe-all-stage2-target-libatomic +configure-stage3-target-libstdc++-v3: maybe-all-stage3-target-libatomic +configure-stage4-target-libstdc++-v3: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libstdc++-v3: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libstdc++-v3: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libstdc++-v3: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libstdc++-v3: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libstdc++-v3: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libsanitizer: maybe-all-stage1-target-libatomic +configure-stage2-target-libsanitizer: maybe-all-stage2-target-libatomic +configure-stage3-target-libsanitizer: maybe-all-stage3-target-libatomic +configure-stage4-target-libsanitizer: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libsanitizer: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libsanitizer: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libsanitizer: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libsanitizer: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libsanitizer: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libvtv: maybe-all-stage1-target-libatomic +configure-stage2-target-libvtv: maybe-all-stage2-target-libatomic +configure-stage3-target-libvtv: maybe-all-stage3-target-libatomic +configure-stage4-target-libvtv: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libvtv: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libvtv: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libvtv: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libvtv: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libvtv: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libbacktrace: maybe-all-stage1-target-libatomic +configure-stage2-target-libbacktrace: maybe-all-stage2-target-libatomic +configure-stage3-target-libbacktrace: maybe-all-stage3-target-libatomic +configure-stage4-target-libbacktrace: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libbacktrace: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libbacktrace: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libbacktrace: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libbacktrace: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libbacktrace: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libphobos: maybe-all-stage1-target-libatomic +configure-stage2-target-libphobos: maybe-all-stage2-target-libatomic +configure-stage3-target-libphobos: maybe-all-stage3-target-libatomic +configure-stage4-target-libphobos: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libphobos: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libphobos: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libphobos: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libphobos: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libphobos: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-zlib: maybe-all-stage1-target-libatomic +configure-stage2-target-zlib: maybe-all-stage2-target-libatomic +configure-stage3-target-zlib: maybe-all-stage3-target-libatomic +configure-stage4-target-zlib: maybe-all-stage4-target-libatomic +configure-stageprofile-target-zlib: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-zlib: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-zlib: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-zlib: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-zlib: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgomp: maybe-all-stage1-target-libatomic +configure-stage2-target-libgomp: maybe-all-stage2-target-libatomic +configure-stage3-target-libgomp: maybe-all-stage3-target-libatomic +configure-stage4-target-libgomp: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgomp: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgomp: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgomp: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgomp: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgomp: maybe-all-stageautofeedback-target-libatomic +@endif gcc-bootstrap + +@if gcc-no-bootstrap +configure-target-libstdc++-v3: maybe-all-target-libatomic +configure-target-libsanitizer: maybe-all-target-libatomic +configure-target-libvtv: maybe-all-target-libatomic +configure-target-libssp: maybe-all-target-libatomic +configure-target-libbacktrace: maybe-all-target-libatomic +configure-target-libquadmath: maybe-all-target-libatomic +configure-target-libgfortran: maybe-all-target-libatomic +configure-target-libobjc: maybe-all-target-libatomic +configure-target-libgo: maybe-all-target-libatomic +configure-target-libphobos: maybe-all-target-libatomic +configure-target-libtermcap: maybe-all-target-libatomic +configure-target-winsup: maybe-all-target-libatomic +configure-target-libffi: maybe-all-target-libatomic +configure-target-zlib: maybe-all-target-libatomic +configure-target-rda: maybe-all-target-libatomic +configure-target-libada: maybe-all-target-libatomic +configure-target-libgm2: maybe-all-target-libatomic +configure-target-libgomp: maybe-all-target-libatomic +configure-target-libitm: maybe-all-target-libatomic +configure-target-libgrust: maybe-all-target-libatomic +@endif gcc-no-bootstrap + + +@if gcc-bootstrap +configure-stage1-target-libstdc++-v3: maybe-all-stage1-target-libatomic +configure-stage2-target-libstdc++-v3: maybe-all-stage2-target-libatomic +configure-stage3-target-libstdc++-v3: maybe-all-stage3-target-libatomic +configure-stage4-target-libstdc++-v3: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libstdc++-v3: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libstdc++-v3: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libstdc++-v3: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libstdc++-v3: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libstdc++-v3: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libsanitizer: maybe-all-stage1-target-libatomic +configure-stage2-target-libsanitizer: maybe-all-stage2-target-libatomic +configure-stage3-target-libsanitizer: maybe-all-stage3-target-libatomic +configure-stage4-target-libsanitizer: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libsanitizer: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libsanitizer: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libsanitizer: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libsanitizer: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libsanitizer: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libvtv: maybe-all-stage1-target-libatomic +configure-stage2-target-libvtv: maybe-all-stage2-target-libatomic +configure-stage3-target-libvtv: maybe-all-stage3-target-libatomic +configure-stage4-target-libvtv: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libvtv: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libvtv: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libvtv: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libvtv: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libvtv: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libbacktrace: maybe-all-stage1-target-libatomic +configure-stage2-target-libbacktrace: maybe-all-stage2-target-libatomic +configure-stage3-target-libbacktrace: maybe-all-stage3-target-libatomic +configure-stage4-target-libbacktrace: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libbacktrace: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libbacktrace: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libbacktrace: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libbacktrace: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libbacktrace: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libphobos: maybe-all-stage1-target-libatomic +configure-stage2-target-libphobos: maybe-all-stage2-target-libatomic +configure-stage3-target-libphobos: maybe-all-stage3-target-libatomic +configure-stage4-target-libphobos: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libphobos: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libphobos: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libphobos: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libphobos: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libphobos: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-zlib: maybe-all-stage1-target-libatomic +configure-stage2-target-zlib: maybe-all-stage2-target-libatomic +configure-stage3-target-zlib: maybe-all-stage3-target-libatomic +configure-stage4-target-zlib: maybe-all-stage4-target-libatomic +configure-stageprofile-target-zlib: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-zlib: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-zlib: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-zlib: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-zlib: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgomp: maybe-all-stage1-target-libatomic +configure-stage2-target-libgomp: maybe-all-stage2-target-libatomic +configure-stage3-target-libgomp: maybe-all-stage3-target-libatomic +configure-stage4-target-libgomp: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgomp: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgomp: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgomp: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgomp: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgomp: maybe-all-stageautofeedback-target-libatomic +@endif gcc-bootstrap + +@if gcc-no-bootstrap +configure-target-libstdc++-v3: maybe-all-target-libatomic +configure-target-libsanitizer: maybe-all-target-libatomic +configure-target-libvtv: maybe-all-target-libatomic +configure-target-libssp: maybe-all-target-libatomic +configure-target-libbacktrace: maybe-all-target-libatomic +configure-target-libquadmath: maybe-all-target-libatomic +configure-target-libgfortran: maybe-all-target-libatomic +configure-target-libobjc: maybe-all-target-libatomic +configure-target-libgo: maybe-all-target-libatomic +configure-target-libphobos: maybe-all-target-libatomic +configure-target-libtermcap: maybe-all-target-libatomic +configure-target-winsup: maybe-all-target-libatomic +configure-target-libffi: maybe-all-target-libatomic +configure-target-zlib: maybe-all-target-libatomic +configure-target-rda: maybe-all-target-libatomic +configure-target-libada: maybe-all-target-libatomic +configure-target-libgm2: maybe-all-target-libatomic +configure-target-libgomp: maybe-all-target-libatomic +configure-target-libitm: maybe-all-target-libatomic +configure-target-libgrust: maybe-all-target-libatomic +@endif gcc-no-bootstrap configure-target-libffi: maybe-all-target-newlib maybe-all-target-libgloss configure-target-libffi: maybe-all-target-libstdc++-v3 +@if gcc-bootstrap +configure-stage1-target-libstdc++-v3: maybe-all-stage1-target-libatomic +configure-stage2-target-libstdc++-v3: maybe-all-stage2-target-libatomic +configure-stage3-target-libstdc++-v3: maybe-all-stage3-target-libatomic +configure-stage4-target-libstdc++-v3: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libstdc++-v3: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libstdc++-v3: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libstdc++-v3: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libstdc++-v3: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libstdc++-v3: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libsanitizer: maybe-all-stage1-target-libatomic +configure-stage2-target-libsanitizer: maybe-all-stage2-target-libatomic +configure-stage3-target-libsanitizer: maybe-all-stage3-target-libatomic +configure-stage4-target-libsanitizer: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libsanitizer: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libsanitizer: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libsanitizer: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libsanitizer: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libsanitizer: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libvtv: maybe-all-stage1-target-libatomic +configure-stage2-target-libvtv: maybe-all-stage2-target-libatomic +configure-stage3-target-libvtv: maybe-all-stage3-target-libatomic +configure-stage4-target-libvtv: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libvtv: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libvtv: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libvtv: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libvtv: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libvtv: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libbacktrace: maybe-all-stage1-target-libatomic +configure-stage2-target-libbacktrace: maybe-all-stage2-target-libatomic +configure-stage3-target-libbacktrace: maybe-all-stage3-target-libatomic +configure-stage4-target-libbacktrace: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libbacktrace: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libbacktrace: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libbacktrace: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libbacktrace: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libbacktrace: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libphobos: maybe-all-stage1-target-libatomic +configure-stage2-target-libphobos: maybe-all-stage2-target-libatomic +configure-stage3-target-libphobos: maybe-all-stage3-target-libatomic +configure-stage4-target-libphobos: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libphobos: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libphobos: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libphobos: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libphobos: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libphobos: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-zlib: maybe-all-stage1-target-libatomic +configure-stage2-target-zlib: maybe-all-stage2-target-libatomic +configure-stage3-target-zlib: maybe-all-stage3-target-libatomic +configure-stage4-target-zlib: maybe-all-stage4-target-libatomic +configure-stageprofile-target-zlib: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-zlib: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-zlib: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-zlib: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-zlib: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgomp: maybe-all-stage1-target-libatomic +configure-stage2-target-libgomp: maybe-all-stage2-target-libatomic +configure-stage3-target-libgomp: maybe-all-stage3-target-libatomic +configure-stage4-target-libgomp: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgomp: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgomp: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgomp: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgomp: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgomp: maybe-all-stageautofeedback-target-libatomic +@endif gcc-bootstrap + +@if gcc-no-bootstrap +configure-target-libstdc++-v3: maybe-all-target-libatomic +configure-target-libsanitizer: maybe-all-target-libatomic +configure-target-libvtv: maybe-all-target-libatomic +configure-target-libssp: maybe-all-target-libatomic +configure-target-libbacktrace: maybe-all-target-libatomic +configure-target-libquadmath: maybe-all-target-libatomic +configure-target-libgfortran: maybe-all-target-libatomic +configure-target-libobjc: maybe-all-target-libatomic +configure-target-libgo: maybe-all-target-libatomic +configure-target-libphobos: maybe-all-target-libatomic +configure-target-libtermcap: maybe-all-target-libatomic +configure-target-winsup: maybe-all-target-libatomic +configure-target-libffi: maybe-all-target-libatomic +configure-target-zlib: maybe-all-target-libatomic +configure-target-rda: maybe-all-target-libatomic +configure-target-libada: maybe-all-target-libatomic +configure-target-libgm2: maybe-all-target-libatomic +configure-target-libgomp: maybe-all-target-libatomic +configure-target-libitm: maybe-all-target-libatomic +configure-target-libgrust: maybe-all-target-libatomic +@endif gcc-no-bootstrap + configure-target-zlib: maybe-all-target-newlib maybe-all-target-libgloss +@if gcc-bootstrap +configure-stage1-target-libstdc++-v3: maybe-all-stage1-target-libatomic +configure-stage2-target-libstdc++-v3: maybe-all-stage2-target-libatomic +configure-stage3-target-libstdc++-v3: maybe-all-stage3-target-libatomic +configure-stage4-target-libstdc++-v3: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libstdc++-v3: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libstdc++-v3: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libstdc++-v3: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libstdc++-v3: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libstdc++-v3: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libsanitizer: maybe-all-stage1-target-libatomic +configure-stage2-target-libsanitizer: maybe-all-stage2-target-libatomic +configure-stage3-target-libsanitizer: maybe-all-stage3-target-libatomic +configure-stage4-target-libsanitizer: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libsanitizer: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libsanitizer: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libsanitizer: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libsanitizer: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libsanitizer: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libvtv: maybe-all-stage1-target-libatomic +configure-stage2-target-libvtv: maybe-all-stage2-target-libatomic +configure-stage3-target-libvtv: maybe-all-stage3-target-libatomic +configure-stage4-target-libvtv: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libvtv: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libvtv: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libvtv: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libvtv: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libvtv: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libssp: maybe-all-stage1-target-libatomic +configure-stage2-target-libssp: maybe-all-stage2-target-libatomic +configure-stage3-target-libssp: maybe-all-stage3-target-libatomic +configure-stage4-target-libssp: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libssp: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libssp: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libssp: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libssp: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libssp: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libbacktrace: maybe-all-stage1-target-libatomic +configure-stage2-target-libbacktrace: maybe-all-stage2-target-libatomic +configure-stage3-target-libbacktrace: maybe-all-stage3-target-libatomic +configure-stage4-target-libbacktrace: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libbacktrace: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libbacktrace: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libbacktrace: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libbacktrace: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libbacktrace: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libquadmath: maybe-all-stage1-target-libatomic +configure-stage2-target-libquadmath: maybe-all-stage2-target-libatomic +configure-stage3-target-libquadmath: maybe-all-stage3-target-libatomic +configure-stage4-target-libquadmath: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libquadmath: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libquadmath: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libquadmath: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libquadmath: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libquadmath: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgfortran: maybe-all-stage1-target-libatomic +configure-stage2-target-libgfortran: maybe-all-stage2-target-libatomic +configure-stage3-target-libgfortran: maybe-all-stage3-target-libatomic +configure-stage4-target-libgfortran: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgfortran: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgfortran: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgfortran: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgfortran: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgfortran: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libobjc: maybe-all-stage1-target-libatomic +configure-stage2-target-libobjc: maybe-all-stage2-target-libatomic +configure-stage3-target-libobjc: maybe-all-stage3-target-libatomic +configure-stage4-target-libobjc: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libobjc: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libobjc: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libobjc: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libobjc: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libobjc: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgo: maybe-all-stage1-target-libatomic +configure-stage2-target-libgo: maybe-all-stage2-target-libatomic +configure-stage3-target-libgo: maybe-all-stage3-target-libatomic +configure-stage4-target-libgo: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgo: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgo: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgo: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgo: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgo: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libphobos: maybe-all-stage1-target-libatomic +configure-stage2-target-libphobos: maybe-all-stage2-target-libatomic +configure-stage3-target-libphobos: maybe-all-stage3-target-libatomic +configure-stage4-target-libphobos: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libphobos: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libphobos: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libphobos: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libphobos: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libphobos: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libtermcap: maybe-all-stage1-target-libatomic +configure-stage2-target-libtermcap: maybe-all-stage2-target-libatomic +configure-stage3-target-libtermcap: maybe-all-stage3-target-libatomic +configure-stage4-target-libtermcap: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libtermcap: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libtermcap: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libtermcap: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libtermcap: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libtermcap: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-winsup: maybe-all-stage1-target-libatomic +configure-stage2-target-winsup: maybe-all-stage2-target-libatomic +configure-stage3-target-winsup: maybe-all-stage3-target-libatomic +configure-stage4-target-winsup: maybe-all-stage4-target-libatomic +configure-stageprofile-target-winsup: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-winsup: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-winsup: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-winsup: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-winsup: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libffi: maybe-all-stage1-target-libatomic +configure-stage2-target-libffi: maybe-all-stage2-target-libatomic +configure-stage3-target-libffi: maybe-all-stage3-target-libatomic +configure-stage4-target-libffi: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libffi: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libffi: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libffi: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libffi: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libffi: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-zlib: maybe-all-stage1-target-libatomic +configure-stage2-target-zlib: maybe-all-stage2-target-libatomic +configure-stage3-target-zlib: maybe-all-stage3-target-libatomic +configure-stage4-target-zlib: maybe-all-stage4-target-libatomic +configure-stageprofile-target-zlib: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-zlib: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-zlib: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-zlib: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-zlib: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-rda: maybe-all-stage1-target-libatomic +configure-stage2-target-rda: maybe-all-stage2-target-libatomic +configure-stage3-target-rda: maybe-all-stage3-target-libatomic +configure-stage4-target-rda: maybe-all-stage4-target-libatomic +configure-stageprofile-target-rda: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-rda: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-rda: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-rda: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-rda: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libada: maybe-all-stage1-target-libatomic +configure-stage2-target-libada: maybe-all-stage2-target-libatomic +configure-stage3-target-libada: maybe-all-stage3-target-libatomic +configure-stage4-target-libada: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libada: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libada: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libada: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libada: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libada: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgm2: maybe-all-stage1-target-libatomic +configure-stage2-target-libgm2: maybe-all-stage2-target-libatomic +configure-stage3-target-libgm2: maybe-all-stage3-target-libatomic +configure-stage4-target-libgm2: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgm2: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgm2: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgm2: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgm2: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgm2: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgomp: maybe-all-stage1-target-libatomic +configure-stage2-target-libgomp: maybe-all-stage2-target-libatomic +configure-stage3-target-libgomp: maybe-all-stage3-target-libatomic +configure-stage4-target-libgomp: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgomp: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgomp: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgomp: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgomp: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgomp: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libitm: maybe-all-stage1-target-libatomic +configure-stage2-target-libitm: maybe-all-stage2-target-libatomic +configure-stage3-target-libitm: maybe-all-stage3-target-libatomic +configure-stage4-target-libitm: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libitm: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libitm: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libitm: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libitm: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libitm: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgrust: maybe-all-stage1-target-libatomic +configure-stage2-target-libgrust: maybe-all-stage2-target-libatomic +configure-stage3-target-libgrust: maybe-all-stage3-target-libatomic +configure-stage4-target-libgrust: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgrust: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgrust: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgrust: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgrust: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgrust: maybe-all-stageautofeedback-target-libatomic +@endif gcc-bootstrap + +@if gcc-no-bootstrap +configure-target-libstdc++-v3: maybe-all-target-libatomic +configure-target-libsanitizer: maybe-all-target-libatomic +configure-target-libvtv: maybe-all-target-libatomic +configure-target-libssp: maybe-all-target-libatomic +configure-target-libbacktrace: maybe-all-target-libatomic +configure-target-libquadmath: maybe-all-target-libatomic +configure-target-libgfortran: maybe-all-target-libatomic +configure-target-libobjc: maybe-all-target-libatomic +configure-target-libgo: maybe-all-target-libatomic +configure-target-libphobos: maybe-all-target-libatomic +configure-target-libtermcap: maybe-all-target-libatomic +configure-target-winsup: maybe-all-target-libatomic +configure-target-libffi: maybe-all-target-libatomic +configure-target-zlib: maybe-all-target-libatomic +configure-target-rda: maybe-all-target-libatomic +configure-target-libada: maybe-all-target-libatomic +configure-target-libgm2: maybe-all-target-libatomic +configure-target-libgomp: maybe-all-target-libatomic +configure-target-libitm: maybe-all-target-libatomic +configure-target-libgrust: maybe-all-target-libatomic +@endif gcc-no-bootstrap + configure-target-rda: maybe-all-target-newlib maybe-all-target-libgloss +@if gcc-bootstrap +configure-stage1-target-libstdc++-v3: maybe-all-stage1-target-libatomic +configure-stage2-target-libstdc++-v3: maybe-all-stage2-target-libatomic +configure-stage3-target-libstdc++-v3: maybe-all-stage3-target-libatomic +configure-stage4-target-libstdc++-v3: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libstdc++-v3: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libstdc++-v3: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libstdc++-v3: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libstdc++-v3: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libstdc++-v3: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libsanitizer: maybe-all-stage1-target-libatomic +configure-stage2-target-libsanitizer: maybe-all-stage2-target-libatomic +configure-stage3-target-libsanitizer: maybe-all-stage3-target-libatomic +configure-stage4-target-libsanitizer: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libsanitizer: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libsanitizer: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libsanitizer: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libsanitizer: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libsanitizer: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libvtv: maybe-all-stage1-target-libatomic +configure-stage2-target-libvtv: maybe-all-stage2-target-libatomic +configure-stage3-target-libvtv: maybe-all-stage3-target-libatomic +configure-stage4-target-libvtv: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libvtv: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libvtv: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libvtv: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libvtv: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libvtv: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libbacktrace: maybe-all-stage1-target-libatomic +configure-stage2-target-libbacktrace: maybe-all-stage2-target-libatomic +configure-stage3-target-libbacktrace: maybe-all-stage3-target-libatomic +configure-stage4-target-libbacktrace: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libbacktrace: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libbacktrace: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libbacktrace: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libbacktrace: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libbacktrace: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libphobos: maybe-all-stage1-target-libatomic +configure-stage2-target-libphobos: maybe-all-stage2-target-libatomic +configure-stage3-target-libphobos: maybe-all-stage3-target-libatomic +configure-stage4-target-libphobos: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libphobos: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libphobos: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libphobos: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libphobos: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libphobos: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-zlib: maybe-all-stage1-target-libatomic +configure-stage2-target-zlib: maybe-all-stage2-target-libatomic +configure-stage3-target-zlib: maybe-all-stage3-target-libatomic +configure-stage4-target-zlib: maybe-all-stage4-target-libatomic +configure-stageprofile-target-zlib: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-zlib: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-zlib: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-zlib: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-zlib: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgomp: maybe-all-stage1-target-libatomic +configure-stage2-target-libgomp: maybe-all-stage2-target-libatomic +configure-stage3-target-libgomp: maybe-all-stage3-target-libatomic +configure-stage4-target-libgomp: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgomp: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgomp: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgomp: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgomp: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgomp: maybe-all-stageautofeedback-target-libatomic +@endif gcc-bootstrap + +@if gcc-no-bootstrap +configure-target-libstdc++-v3: maybe-all-target-libatomic +configure-target-libsanitizer: maybe-all-target-libatomic +configure-target-libvtv: maybe-all-target-libatomic +configure-target-libssp: maybe-all-target-libatomic +configure-target-libbacktrace: maybe-all-target-libatomic +configure-target-libquadmath: maybe-all-target-libatomic +configure-target-libgfortran: maybe-all-target-libatomic +configure-target-libobjc: maybe-all-target-libatomic +configure-target-libgo: maybe-all-target-libatomic +configure-target-libphobos: maybe-all-target-libatomic +configure-target-libtermcap: maybe-all-target-libatomic +configure-target-winsup: maybe-all-target-libatomic +configure-target-libffi: maybe-all-target-libatomic +configure-target-zlib: maybe-all-target-libatomic +configure-target-rda: maybe-all-target-libatomic +configure-target-libada: maybe-all-target-libatomic +configure-target-libgm2: maybe-all-target-libatomic +configure-target-libgomp: maybe-all-target-libatomic +configure-target-libitm: maybe-all-target-libatomic +configure-target-libgrust: maybe-all-target-libatomic +@endif gcc-no-bootstrap + configure-target-libada: maybe-all-target-newlib maybe-all-target-libgloss +@if gcc-bootstrap +configure-stage1-target-libstdc++-v3: maybe-all-stage1-target-libatomic +configure-stage2-target-libstdc++-v3: maybe-all-stage2-target-libatomic +configure-stage3-target-libstdc++-v3: maybe-all-stage3-target-libatomic +configure-stage4-target-libstdc++-v3: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libstdc++-v3: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libstdc++-v3: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libstdc++-v3: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libstdc++-v3: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libstdc++-v3: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libsanitizer: maybe-all-stage1-target-libatomic +configure-stage2-target-libsanitizer: maybe-all-stage2-target-libatomic +configure-stage3-target-libsanitizer: maybe-all-stage3-target-libatomic +configure-stage4-target-libsanitizer: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libsanitizer: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libsanitizer: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libsanitizer: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libsanitizer: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libsanitizer: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libvtv: maybe-all-stage1-target-libatomic +configure-stage2-target-libvtv: maybe-all-stage2-target-libatomic +configure-stage3-target-libvtv: maybe-all-stage3-target-libatomic +configure-stage4-target-libvtv: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libvtv: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libvtv: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libvtv: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libvtv: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libvtv: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libbacktrace: maybe-all-stage1-target-libatomic +configure-stage2-target-libbacktrace: maybe-all-stage2-target-libatomic +configure-stage3-target-libbacktrace: maybe-all-stage3-target-libatomic +configure-stage4-target-libbacktrace: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libbacktrace: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libbacktrace: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libbacktrace: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libbacktrace: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libbacktrace: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libphobos: maybe-all-stage1-target-libatomic +configure-stage2-target-libphobos: maybe-all-stage2-target-libatomic +configure-stage3-target-libphobos: maybe-all-stage3-target-libatomic +configure-stage4-target-libphobos: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libphobos: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libphobos: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libphobos: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libphobos: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libphobos: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-zlib: maybe-all-stage1-target-libatomic +configure-stage2-target-zlib: maybe-all-stage2-target-libatomic +configure-stage3-target-zlib: maybe-all-stage3-target-libatomic +configure-stage4-target-zlib: maybe-all-stage4-target-libatomic +configure-stageprofile-target-zlib: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-zlib: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-zlib: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-zlib: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-zlib: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgomp: maybe-all-stage1-target-libatomic +configure-stage2-target-libgomp: maybe-all-stage2-target-libatomic +configure-stage3-target-libgomp: maybe-all-stage3-target-libatomic +configure-stage4-target-libgomp: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgomp: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgomp: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgomp: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgomp: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgomp: maybe-all-stageautofeedback-target-libatomic +@endif gcc-bootstrap + +@if gcc-no-bootstrap +configure-target-libstdc++-v3: maybe-all-target-libatomic +configure-target-libsanitizer: maybe-all-target-libatomic +configure-target-libvtv: maybe-all-target-libatomic +configure-target-libssp: maybe-all-target-libatomic +configure-target-libbacktrace: maybe-all-target-libatomic +configure-target-libquadmath: maybe-all-target-libatomic +configure-target-libgfortran: maybe-all-target-libatomic +configure-target-libobjc: maybe-all-target-libatomic +configure-target-libgo: maybe-all-target-libatomic +configure-target-libphobos: maybe-all-target-libatomic +configure-target-libtermcap: maybe-all-target-libatomic +configure-target-winsup: maybe-all-target-libatomic +configure-target-libffi: maybe-all-target-libatomic +configure-target-zlib: maybe-all-target-libatomic +configure-target-rda: maybe-all-target-libatomic +configure-target-libada: maybe-all-target-libatomic +configure-target-libgm2: maybe-all-target-libatomic +configure-target-libgomp: maybe-all-target-libatomic +configure-target-libitm: maybe-all-target-libatomic +configure-target-libgrust: maybe-all-target-libatomic +@endif gcc-no-bootstrap + configure-target-libgm2: maybe-all-target-newlib maybe-all-target-libgloss +@if gcc-bootstrap +configure-stage1-target-libstdc++-v3: maybe-all-stage1-target-libatomic +configure-stage2-target-libstdc++-v3: maybe-all-stage2-target-libatomic +configure-stage3-target-libstdc++-v3: maybe-all-stage3-target-libatomic +configure-stage4-target-libstdc++-v3: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libstdc++-v3: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libstdc++-v3: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libstdc++-v3: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libstdc++-v3: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libstdc++-v3: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libsanitizer: maybe-all-stage1-target-libatomic +configure-stage2-target-libsanitizer: maybe-all-stage2-target-libatomic +configure-stage3-target-libsanitizer: maybe-all-stage3-target-libatomic +configure-stage4-target-libsanitizer: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libsanitizer: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libsanitizer: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libsanitizer: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libsanitizer: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libsanitizer: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libvtv: maybe-all-stage1-target-libatomic +configure-stage2-target-libvtv: maybe-all-stage2-target-libatomic +configure-stage3-target-libvtv: maybe-all-stage3-target-libatomic +configure-stage4-target-libvtv: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libvtv: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libvtv: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libvtv: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libvtv: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libvtv: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libbacktrace: maybe-all-stage1-target-libatomic +configure-stage2-target-libbacktrace: maybe-all-stage2-target-libatomic +configure-stage3-target-libbacktrace: maybe-all-stage3-target-libatomic +configure-stage4-target-libbacktrace: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libbacktrace: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libbacktrace: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libbacktrace: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libbacktrace: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libbacktrace: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libphobos: maybe-all-stage1-target-libatomic +configure-stage2-target-libphobos: maybe-all-stage2-target-libatomic +configure-stage3-target-libphobos: maybe-all-stage3-target-libatomic +configure-stage4-target-libphobos: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libphobos: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libphobos: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libphobos: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libphobos: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libphobos: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-zlib: maybe-all-stage1-target-libatomic +configure-stage2-target-zlib: maybe-all-stage2-target-libatomic +configure-stage3-target-zlib: maybe-all-stage3-target-libatomic +configure-stage4-target-zlib: maybe-all-stage4-target-libatomic +configure-stageprofile-target-zlib: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-zlib: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-zlib: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-zlib: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-zlib: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgomp: maybe-all-stage1-target-libatomic +configure-stage2-target-libgomp: maybe-all-stage2-target-libatomic +configure-stage3-target-libgomp: maybe-all-stage3-target-libatomic +configure-stage4-target-libgomp: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgomp: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgomp: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgomp: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgomp: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgomp: maybe-all-stageautofeedback-target-libatomic +@endif gcc-bootstrap + +@if gcc-no-bootstrap +configure-target-libstdc++-v3: maybe-all-target-libatomic +configure-target-libsanitizer: maybe-all-target-libatomic +configure-target-libvtv: maybe-all-target-libatomic +configure-target-libssp: maybe-all-target-libatomic +configure-target-libbacktrace: maybe-all-target-libatomic +configure-target-libquadmath: maybe-all-target-libatomic +configure-target-libgfortran: maybe-all-target-libatomic +configure-target-libobjc: maybe-all-target-libatomic +configure-target-libgo: maybe-all-target-libatomic +configure-target-libphobos: maybe-all-target-libatomic +configure-target-libtermcap: maybe-all-target-libatomic +configure-target-winsup: maybe-all-target-libatomic +configure-target-libffi: maybe-all-target-libatomic +configure-target-zlib: maybe-all-target-libatomic +configure-target-rda: maybe-all-target-libatomic +configure-target-libada: maybe-all-target-libatomic +configure-target-libgm2: maybe-all-target-libatomic +configure-target-libgomp: maybe-all-target-libatomic +configure-target-libitm: maybe-all-target-libatomic +configure-target-libgrust: maybe-all-target-libatomic +@endif gcc-no-bootstrap + configure-target-libgomp: maybe-all-target-newlib maybe-all-target-libgloss +@if gcc-bootstrap +configure-stage1-target-libstdc++-v3: maybe-all-stage1-target-libatomic +configure-stage2-target-libstdc++-v3: maybe-all-stage2-target-libatomic +configure-stage3-target-libstdc++-v3: maybe-all-stage3-target-libatomic +configure-stage4-target-libstdc++-v3: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libstdc++-v3: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libstdc++-v3: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libstdc++-v3: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libstdc++-v3: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libstdc++-v3: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libsanitizer: maybe-all-stage1-target-libatomic +configure-stage2-target-libsanitizer: maybe-all-stage2-target-libatomic +configure-stage3-target-libsanitizer: maybe-all-stage3-target-libatomic +configure-stage4-target-libsanitizer: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libsanitizer: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libsanitizer: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libsanitizer: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libsanitizer: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libsanitizer: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libvtv: maybe-all-stage1-target-libatomic +configure-stage2-target-libvtv: maybe-all-stage2-target-libatomic +configure-stage3-target-libvtv: maybe-all-stage3-target-libatomic +configure-stage4-target-libvtv: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libvtv: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libvtv: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libvtv: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libvtv: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libvtv: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libssp: maybe-all-stage1-target-libatomic +configure-stage2-target-libssp: maybe-all-stage2-target-libatomic +configure-stage3-target-libssp: maybe-all-stage3-target-libatomic +configure-stage4-target-libssp: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libssp: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libssp: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libssp: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libssp: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libssp: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libbacktrace: maybe-all-stage1-target-libatomic +configure-stage2-target-libbacktrace: maybe-all-stage2-target-libatomic +configure-stage3-target-libbacktrace: maybe-all-stage3-target-libatomic +configure-stage4-target-libbacktrace: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libbacktrace: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libbacktrace: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libbacktrace: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libbacktrace: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libbacktrace: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libquadmath: maybe-all-stage1-target-libatomic +configure-stage2-target-libquadmath: maybe-all-stage2-target-libatomic +configure-stage3-target-libquadmath: maybe-all-stage3-target-libatomic +configure-stage4-target-libquadmath: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libquadmath: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libquadmath: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libquadmath: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libquadmath: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libquadmath: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgfortran: maybe-all-stage1-target-libatomic +configure-stage2-target-libgfortran: maybe-all-stage2-target-libatomic +configure-stage3-target-libgfortran: maybe-all-stage3-target-libatomic +configure-stage4-target-libgfortran: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgfortran: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgfortran: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgfortran: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgfortran: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgfortran: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libobjc: maybe-all-stage1-target-libatomic +configure-stage2-target-libobjc: maybe-all-stage2-target-libatomic +configure-stage3-target-libobjc: maybe-all-stage3-target-libatomic +configure-stage4-target-libobjc: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libobjc: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libobjc: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libobjc: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libobjc: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libobjc: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgo: maybe-all-stage1-target-libatomic +configure-stage2-target-libgo: maybe-all-stage2-target-libatomic +configure-stage3-target-libgo: maybe-all-stage3-target-libatomic +configure-stage4-target-libgo: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgo: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgo: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgo: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgo: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgo: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libphobos: maybe-all-stage1-target-libatomic +configure-stage2-target-libphobos: maybe-all-stage2-target-libatomic +configure-stage3-target-libphobos: maybe-all-stage3-target-libatomic +configure-stage4-target-libphobos: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libphobos: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libphobos: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libphobos: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libphobos: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libphobos: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libtermcap: maybe-all-stage1-target-libatomic +configure-stage2-target-libtermcap: maybe-all-stage2-target-libatomic +configure-stage3-target-libtermcap: maybe-all-stage3-target-libatomic +configure-stage4-target-libtermcap: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libtermcap: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libtermcap: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libtermcap: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libtermcap: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libtermcap: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-winsup: maybe-all-stage1-target-libatomic +configure-stage2-target-winsup: maybe-all-stage2-target-libatomic +configure-stage3-target-winsup: maybe-all-stage3-target-libatomic +configure-stage4-target-winsup: maybe-all-stage4-target-libatomic +configure-stageprofile-target-winsup: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-winsup: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-winsup: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-winsup: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-winsup: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libffi: maybe-all-stage1-target-libatomic +configure-stage2-target-libffi: maybe-all-stage2-target-libatomic +configure-stage3-target-libffi: maybe-all-stage3-target-libatomic +configure-stage4-target-libffi: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libffi: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libffi: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libffi: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libffi: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libffi: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-zlib: maybe-all-stage1-target-libatomic +configure-stage2-target-zlib: maybe-all-stage2-target-libatomic +configure-stage3-target-zlib: maybe-all-stage3-target-libatomic +configure-stage4-target-zlib: maybe-all-stage4-target-libatomic +configure-stageprofile-target-zlib: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-zlib: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-zlib: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-zlib: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-zlib: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-rda: maybe-all-stage1-target-libatomic +configure-stage2-target-rda: maybe-all-stage2-target-libatomic +configure-stage3-target-rda: maybe-all-stage3-target-libatomic +configure-stage4-target-rda: maybe-all-stage4-target-libatomic +configure-stageprofile-target-rda: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-rda: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-rda: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-rda: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-rda: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libada: maybe-all-stage1-target-libatomic +configure-stage2-target-libada: maybe-all-stage2-target-libatomic +configure-stage3-target-libada: maybe-all-stage3-target-libatomic +configure-stage4-target-libada: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libada: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libada: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libada: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libada: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libada: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgm2: maybe-all-stage1-target-libatomic +configure-stage2-target-libgm2: maybe-all-stage2-target-libatomic +configure-stage3-target-libgm2: maybe-all-stage3-target-libatomic +configure-stage4-target-libgm2: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgm2: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgm2: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgm2: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgm2: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgm2: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgomp: maybe-all-stage1-target-libatomic +configure-stage2-target-libgomp: maybe-all-stage2-target-libatomic +configure-stage3-target-libgomp: maybe-all-stage3-target-libatomic +configure-stage4-target-libgomp: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgomp: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgomp: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgomp: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgomp: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgomp: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libitm: maybe-all-stage1-target-libatomic +configure-stage2-target-libitm: maybe-all-stage2-target-libatomic +configure-stage3-target-libitm: maybe-all-stage3-target-libatomic +configure-stage4-target-libitm: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libitm: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libitm: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libitm: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libitm: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libitm: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgrust: maybe-all-stage1-target-libatomic +configure-stage2-target-libgrust: maybe-all-stage2-target-libatomic +configure-stage3-target-libgrust: maybe-all-stage3-target-libatomic +configure-stage4-target-libgrust: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgrust: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgrust: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgrust: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgrust: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgrust: maybe-all-stageautofeedback-target-libatomic +@endif gcc-bootstrap + +@if gcc-no-bootstrap +configure-target-libstdc++-v3: maybe-all-target-libatomic +configure-target-libsanitizer: maybe-all-target-libatomic +configure-target-libvtv: maybe-all-target-libatomic +configure-target-libssp: maybe-all-target-libatomic +configure-target-libbacktrace: maybe-all-target-libatomic +configure-target-libquadmath: maybe-all-target-libatomic +configure-target-libgfortran: maybe-all-target-libatomic +configure-target-libobjc: maybe-all-target-libatomic +configure-target-libgo: maybe-all-target-libatomic +configure-target-libphobos: maybe-all-target-libatomic +configure-target-libtermcap: maybe-all-target-libatomic +configure-target-winsup: maybe-all-target-libatomic +configure-target-libffi: maybe-all-target-libatomic +configure-target-zlib: maybe-all-target-libatomic +configure-target-rda: maybe-all-target-libatomic +configure-target-libada: maybe-all-target-libatomic +configure-target-libgm2: maybe-all-target-libatomic +configure-target-libgomp: maybe-all-target-libatomic +configure-target-libitm: maybe-all-target-libatomic +configure-target-libgrust: maybe-all-target-libatomic +@endif gcc-no-bootstrap + configure-target-libitm: maybe-all-target-newlib maybe-all-target-libgloss configure-target-libitm: maybe-all-target-libstdc++-v3 +@if gcc-bootstrap +configure-stage1-target-libstdc++-v3: maybe-all-stage1-target-libatomic +configure-stage2-target-libstdc++-v3: maybe-all-stage2-target-libatomic +configure-stage3-target-libstdc++-v3: maybe-all-stage3-target-libatomic +configure-stage4-target-libstdc++-v3: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libstdc++-v3: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libstdc++-v3: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libstdc++-v3: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libstdc++-v3: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libstdc++-v3: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libsanitizer: maybe-all-stage1-target-libatomic +configure-stage2-target-libsanitizer: maybe-all-stage2-target-libatomic +configure-stage3-target-libsanitizer: maybe-all-stage3-target-libatomic +configure-stage4-target-libsanitizer: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libsanitizer: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libsanitizer: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libsanitizer: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libsanitizer: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libsanitizer: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libvtv: maybe-all-stage1-target-libatomic +configure-stage2-target-libvtv: maybe-all-stage2-target-libatomic +configure-stage3-target-libvtv: maybe-all-stage3-target-libatomic +configure-stage4-target-libvtv: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libvtv: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libvtv: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libvtv: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libvtv: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libvtv: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libbacktrace: maybe-all-stage1-target-libatomic +configure-stage2-target-libbacktrace: maybe-all-stage2-target-libatomic +configure-stage3-target-libbacktrace: maybe-all-stage3-target-libatomic +configure-stage4-target-libbacktrace: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libbacktrace: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libbacktrace: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libbacktrace: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libbacktrace: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libbacktrace: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libphobos: maybe-all-stage1-target-libatomic +configure-stage2-target-libphobos: maybe-all-stage2-target-libatomic +configure-stage3-target-libphobos: maybe-all-stage3-target-libatomic +configure-stage4-target-libphobos: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libphobos: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libphobos: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libphobos: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libphobos: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libphobos: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-zlib: maybe-all-stage1-target-libatomic +configure-stage2-target-zlib: maybe-all-stage2-target-libatomic +configure-stage3-target-zlib: maybe-all-stage3-target-libatomic +configure-stage4-target-zlib: maybe-all-stage4-target-libatomic +configure-stageprofile-target-zlib: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-zlib: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-zlib: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-zlib: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-zlib: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgomp: maybe-all-stage1-target-libatomic +configure-stage2-target-libgomp: maybe-all-stage2-target-libatomic +configure-stage3-target-libgomp: maybe-all-stage3-target-libatomic +configure-stage4-target-libgomp: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgomp: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgomp: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgomp: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgomp: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgomp: maybe-all-stageautofeedback-target-libatomic +@endif gcc-bootstrap + +@if gcc-no-bootstrap +configure-target-libstdc++-v3: maybe-all-target-libatomic +configure-target-libsanitizer: maybe-all-target-libatomic +configure-target-libvtv: maybe-all-target-libatomic +configure-target-libssp: maybe-all-target-libatomic +configure-target-libbacktrace: maybe-all-target-libatomic +configure-target-libquadmath: maybe-all-target-libatomic +configure-target-libgfortran: maybe-all-target-libatomic +configure-target-libobjc: maybe-all-target-libatomic +configure-target-libgo: maybe-all-target-libatomic +configure-target-libphobos: maybe-all-target-libatomic +configure-target-libtermcap: maybe-all-target-libatomic +configure-target-winsup: maybe-all-target-libatomic +configure-target-libffi: maybe-all-target-libatomic +configure-target-zlib: maybe-all-target-libatomic +configure-target-rda: maybe-all-target-libatomic +configure-target-libada: maybe-all-target-libatomic +configure-target-libgm2: maybe-all-target-libatomic +configure-target-libgomp: maybe-all-target-libatomic +configure-target-libitm: maybe-all-target-libatomic +configure-target-libgrust: maybe-all-target-libatomic +@endif gcc-no-bootstrap + configure-target-libatomic: maybe-all-target-newlib maybe-all-target-libgloss +@if gcc-bootstrap +configure-stage1-target-libstdc++-v3: maybe-all-stage1-target-libatomic +configure-stage2-target-libstdc++-v3: maybe-all-stage2-target-libatomic +configure-stage3-target-libstdc++-v3: maybe-all-stage3-target-libatomic +configure-stage4-target-libstdc++-v3: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libstdc++-v3: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libstdc++-v3: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libstdc++-v3: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libstdc++-v3: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libstdc++-v3: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libsanitizer: maybe-all-stage1-target-libatomic +configure-stage2-target-libsanitizer: maybe-all-stage2-target-libatomic +configure-stage3-target-libsanitizer: maybe-all-stage3-target-libatomic +configure-stage4-target-libsanitizer: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libsanitizer: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libsanitizer: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libsanitizer: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libsanitizer: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libsanitizer: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libvtv: maybe-all-stage1-target-libatomic +configure-stage2-target-libvtv: maybe-all-stage2-target-libatomic +configure-stage3-target-libvtv: maybe-all-stage3-target-libatomic +configure-stage4-target-libvtv: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libvtv: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libvtv: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libvtv: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libvtv: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libvtv: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libssp: maybe-all-stage1-target-libatomic +configure-stage2-target-libssp: maybe-all-stage2-target-libatomic +configure-stage3-target-libssp: maybe-all-stage3-target-libatomic +configure-stage4-target-libssp: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libssp: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libssp: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libssp: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libssp: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libssp: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libbacktrace: maybe-all-stage1-target-libatomic +configure-stage2-target-libbacktrace: maybe-all-stage2-target-libatomic +configure-stage3-target-libbacktrace: maybe-all-stage3-target-libatomic +configure-stage4-target-libbacktrace: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libbacktrace: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libbacktrace: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libbacktrace: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libbacktrace: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libbacktrace: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libquadmath: maybe-all-stage1-target-libatomic +configure-stage2-target-libquadmath: maybe-all-stage2-target-libatomic +configure-stage3-target-libquadmath: maybe-all-stage3-target-libatomic +configure-stage4-target-libquadmath: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libquadmath: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libquadmath: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libquadmath: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libquadmath: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libquadmath: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgfortran: maybe-all-stage1-target-libatomic +configure-stage2-target-libgfortran: maybe-all-stage2-target-libatomic +configure-stage3-target-libgfortran: maybe-all-stage3-target-libatomic +configure-stage4-target-libgfortran: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgfortran: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgfortran: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgfortran: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgfortran: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgfortran: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libobjc: maybe-all-stage1-target-libatomic +configure-stage2-target-libobjc: maybe-all-stage2-target-libatomic +configure-stage3-target-libobjc: maybe-all-stage3-target-libatomic +configure-stage4-target-libobjc: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libobjc: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libobjc: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libobjc: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libobjc: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libobjc: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgo: maybe-all-stage1-target-libatomic +configure-stage2-target-libgo: maybe-all-stage2-target-libatomic +configure-stage3-target-libgo: maybe-all-stage3-target-libatomic +configure-stage4-target-libgo: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgo: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgo: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgo: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgo: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgo: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libphobos: maybe-all-stage1-target-libatomic +configure-stage2-target-libphobos: maybe-all-stage2-target-libatomic +configure-stage3-target-libphobos: maybe-all-stage3-target-libatomic +configure-stage4-target-libphobos: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libphobos: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libphobos: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libphobos: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libphobos: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libphobos: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libtermcap: maybe-all-stage1-target-libatomic +configure-stage2-target-libtermcap: maybe-all-stage2-target-libatomic +configure-stage3-target-libtermcap: maybe-all-stage3-target-libatomic +configure-stage4-target-libtermcap: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libtermcap: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libtermcap: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libtermcap: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libtermcap: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libtermcap: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-winsup: maybe-all-stage1-target-libatomic +configure-stage2-target-winsup: maybe-all-stage2-target-libatomic +configure-stage3-target-winsup: maybe-all-stage3-target-libatomic +configure-stage4-target-winsup: maybe-all-stage4-target-libatomic +configure-stageprofile-target-winsup: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-winsup: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-winsup: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-winsup: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-winsup: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libffi: maybe-all-stage1-target-libatomic +configure-stage2-target-libffi: maybe-all-stage2-target-libatomic +configure-stage3-target-libffi: maybe-all-stage3-target-libatomic +configure-stage4-target-libffi: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libffi: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libffi: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libffi: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libffi: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libffi: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-zlib: maybe-all-stage1-target-libatomic +configure-stage2-target-zlib: maybe-all-stage2-target-libatomic +configure-stage3-target-zlib: maybe-all-stage3-target-libatomic +configure-stage4-target-zlib: maybe-all-stage4-target-libatomic +configure-stageprofile-target-zlib: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-zlib: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-zlib: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-zlib: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-zlib: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-rda: maybe-all-stage1-target-libatomic +configure-stage2-target-rda: maybe-all-stage2-target-libatomic +configure-stage3-target-rda: maybe-all-stage3-target-libatomic +configure-stage4-target-rda: maybe-all-stage4-target-libatomic +configure-stageprofile-target-rda: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-rda: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-rda: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-rda: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-rda: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libada: maybe-all-stage1-target-libatomic +configure-stage2-target-libada: maybe-all-stage2-target-libatomic +configure-stage3-target-libada: maybe-all-stage3-target-libatomic +configure-stage4-target-libada: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libada: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libada: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libada: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libada: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libada: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgm2: maybe-all-stage1-target-libatomic +configure-stage2-target-libgm2: maybe-all-stage2-target-libatomic +configure-stage3-target-libgm2: maybe-all-stage3-target-libatomic +configure-stage4-target-libgm2: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgm2: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgm2: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgm2: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgm2: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgm2: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgomp: maybe-all-stage1-target-libatomic +configure-stage2-target-libgomp: maybe-all-stage2-target-libatomic +configure-stage3-target-libgomp: maybe-all-stage3-target-libatomic +configure-stage4-target-libgomp: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgomp: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgomp: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgomp: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgomp: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgomp: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libitm: maybe-all-stage1-target-libatomic +configure-stage2-target-libitm: maybe-all-stage2-target-libatomic +configure-stage3-target-libitm: maybe-all-stage3-target-libatomic +configure-stage4-target-libitm: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libitm: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libitm: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libitm: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libitm: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libitm: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgrust: maybe-all-stage1-target-libatomic +configure-stage2-target-libgrust: maybe-all-stage2-target-libatomic +configure-stage3-target-libgrust: maybe-all-stage3-target-libatomic +configure-stage4-target-libgrust: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgrust: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgrust: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgrust: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgrust: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgrust: maybe-all-stageautofeedback-target-libatomic +@endif gcc-bootstrap + +@if gcc-no-bootstrap +configure-target-libstdc++-v3: maybe-all-target-libatomic +configure-target-libsanitizer: maybe-all-target-libatomic +configure-target-libvtv: maybe-all-target-libatomic +configure-target-libssp: maybe-all-target-libatomic +configure-target-libbacktrace: maybe-all-target-libatomic +configure-target-libquadmath: maybe-all-target-libatomic +configure-target-libgfortran: maybe-all-target-libatomic +configure-target-libobjc: maybe-all-target-libatomic +configure-target-libgo: maybe-all-target-libatomic +configure-target-libphobos: maybe-all-target-libatomic +configure-target-libtermcap: maybe-all-target-libatomic +configure-target-winsup: maybe-all-target-libatomic +configure-target-libffi: maybe-all-target-libatomic +configure-target-zlib: maybe-all-target-libatomic +configure-target-rda: maybe-all-target-libatomic +configure-target-libada: maybe-all-target-libatomic +configure-target-libgm2: maybe-all-target-libatomic +configure-target-libgomp: maybe-all-target-libatomic +configure-target-libitm: maybe-all-target-libatomic +configure-target-libgrust: maybe-all-target-libatomic +@endif gcc-no-bootstrap + configure-target-libgrust: maybe-all-target-newlib maybe-all-target-libgloss +@if gcc-bootstrap +configure-stage1-target-libstdc++-v3: maybe-all-stage1-target-libatomic +configure-stage2-target-libstdc++-v3: maybe-all-stage2-target-libatomic +configure-stage3-target-libstdc++-v3: maybe-all-stage3-target-libatomic +configure-stage4-target-libstdc++-v3: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libstdc++-v3: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libstdc++-v3: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libstdc++-v3: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libstdc++-v3: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libstdc++-v3: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libsanitizer: maybe-all-stage1-target-libatomic +configure-stage2-target-libsanitizer: maybe-all-stage2-target-libatomic +configure-stage3-target-libsanitizer: maybe-all-stage3-target-libatomic +configure-stage4-target-libsanitizer: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libsanitizer: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libsanitizer: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libsanitizer: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libsanitizer: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libsanitizer: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libvtv: maybe-all-stage1-target-libatomic +configure-stage2-target-libvtv: maybe-all-stage2-target-libatomic +configure-stage3-target-libvtv: maybe-all-stage3-target-libatomic +configure-stage4-target-libvtv: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libvtv: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libvtv: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libvtv: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libvtv: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libvtv: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libbacktrace: maybe-all-stage1-target-libatomic +configure-stage2-target-libbacktrace: maybe-all-stage2-target-libatomic +configure-stage3-target-libbacktrace: maybe-all-stage3-target-libatomic +configure-stage4-target-libbacktrace: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libbacktrace: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libbacktrace: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libbacktrace: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libbacktrace: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libbacktrace: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libphobos: maybe-all-stage1-target-libatomic +configure-stage2-target-libphobos: maybe-all-stage2-target-libatomic +configure-stage3-target-libphobos: maybe-all-stage3-target-libatomic +configure-stage4-target-libphobos: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libphobos: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libphobos: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libphobos: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libphobos: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libphobos: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-zlib: maybe-all-stage1-target-libatomic +configure-stage2-target-zlib: maybe-all-stage2-target-libatomic +configure-stage3-target-zlib: maybe-all-stage3-target-libatomic +configure-stage4-target-zlib: maybe-all-stage4-target-libatomic +configure-stageprofile-target-zlib: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-zlib: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-zlib: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-zlib: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-zlib: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgomp: maybe-all-stage1-target-libatomic +configure-stage2-target-libgomp: maybe-all-stage2-target-libatomic +configure-stage3-target-libgomp: maybe-all-stage3-target-libatomic +configure-stage4-target-libgomp: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgomp: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgomp: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgomp: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgomp: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgomp: maybe-all-stageautofeedback-target-libatomic +@endif gcc-bootstrap + +@if gcc-no-bootstrap +configure-target-libstdc++-v3: maybe-all-target-libatomic +configure-target-libsanitizer: maybe-all-target-libatomic +configure-target-libvtv: maybe-all-target-libatomic +configure-target-libssp: maybe-all-target-libatomic +configure-target-libbacktrace: maybe-all-target-libatomic +configure-target-libquadmath: maybe-all-target-libatomic +configure-target-libgfortran: maybe-all-target-libatomic +configure-target-libobjc: maybe-all-target-libatomic +configure-target-libgo: maybe-all-target-libatomic +configure-target-libphobos: maybe-all-target-libatomic +configure-target-libtermcap: maybe-all-target-libatomic +configure-target-winsup: maybe-all-target-libatomic +configure-target-libffi: maybe-all-target-libatomic +configure-target-zlib: maybe-all-target-libatomic +configure-target-rda: maybe-all-target-libatomic +configure-target-libada: maybe-all-target-libatomic +configure-target-libgm2: maybe-all-target-libatomic +configure-target-libgomp: maybe-all-target-libatomic +configure-target-libitm: maybe-all-target-libatomic +configure-target-libgrust: maybe-all-target-libatomic +@endif gcc-no-bootstrap + configure-target-libgcobol: maybe-all-target-newlib maybe-all-target-libgloss configure-target-libgcobol: maybe-all-target-libstdc++-v3 +@if gcc-bootstrap +configure-stage1-target-libstdc++-v3: maybe-all-stage1-target-libatomic +configure-stage2-target-libstdc++-v3: maybe-all-stage2-target-libatomic +configure-stage3-target-libstdc++-v3: maybe-all-stage3-target-libatomic +configure-stage4-target-libstdc++-v3: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libstdc++-v3: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libstdc++-v3: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libstdc++-v3: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libstdc++-v3: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libstdc++-v3: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libsanitizer: maybe-all-stage1-target-libatomic +configure-stage2-target-libsanitizer: maybe-all-stage2-target-libatomic +configure-stage3-target-libsanitizer: maybe-all-stage3-target-libatomic +configure-stage4-target-libsanitizer: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libsanitizer: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libsanitizer: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libsanitizer: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libsanitizer: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libsanitizer: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libvtv: maybe-all-stage1-target-libatomic +configure-stage2-target-libvtv: maybe-all-stage2-target-libatomic +configure-stage3-target-libvtv: maybe-all-stage3-target-libatomic +configure-stage4-target-libvtv: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libvtv: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libvtv: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libvtv: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libvtv: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libvtv: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libbacktrace: maybe-all-stage1-target-libatomic +configure-stage2-target-libbacktrace: maybe-all-stage2-target-libatomic +configure-stage3-target-libbacktrace: maybe-all-stage3-target-libatomic +configure-stage4-target-libbacktrace: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libbacktrace: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libbacktrace: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libbacktrace: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libbacktrace: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libbacktrace: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libphobos: maybe-all-stage1-target-libatomic +configure-stage2-target-libphobos: maybe-all-stage2-target-libatomic +configure-stage3-target-libphobos: maybe-all-stage3-target-libatomic +configure-stage4-target-libphobos: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libphobos: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libphobos: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libphobos: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libphobos: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libphobos: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-zlib: maybe-all-stage1-target-libatomic +configure-stage2-target-zlib: maybe-all-stage2-target-libatomic +configure-stage3-target-zlib: maybe-all-stage3-target-libatomic +configure-stage4-target-zlib: maybe-all-stage4-target-libatomic +configure-stageprofile-target-zlib: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-zlib: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-zlib: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-zlib: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-zlib: maybe-all-stageautofeedback-target-libatomic +configure-stage1-target-libgomp: maybe-all-stage1-target-libatomic +configure-stage2-target-libgomp: maybe-all-stage2-target-libatomic +configure-stage3-target-libgomp: maybe-all-stage3-target-libatomic +configure-stage4-target-libgomp: maybe-all-stage4-target-libatomic +configure-stageprofile-target-libgomp: maybe-all-stageprofile-target-libatomic +configure-stagetrain-target-libgomp: maybe-all-stagetrain-target-libatomic +configure-stagefeedback-target-libgomp: maybe-all-stagefeedback-target-libatomic +configure-stageautoprofile-target-libgomp: maybe-all-stageautoprofile-target-libatomic +configure-stageautofeedback-target-libgomp: maybe-all-stageautofeedback-target-libatomic +@endif gcc-bootstrap + +@if gcc-no-bootstrap +configure-target-libstdc++-v3: maybe-all-target-libatomic +configure-target-libsanitizer: maybe-all-target-libatomic +configure-target-libvtv: maybe-all-target-libatomic +configure-target-libssp: maybe-all-target-libatomic +configure-target-libbacktrace: maybe-all-target-libatomic +configure-target-libquadmath: maybe-all-target-libatomic +configure-target-libgfortran: maybe-all-target-libatomic +configure-target-libobjc: maybe-all-target-libatomic +configure-target-libgo: maybe-all-target-libatomic +configure-target-libphobos: maybe-all-target-libatomic +configure-target-libtermcap: maybe-all-target-libatomic +configure-target-winsup: maybe-all-target-libatomic +configure-target-libffi: maybe-all-target-libatomic +configure-target-zlib: maybe-all-target-libatomic +configure-target-rda: maybe-all-target-libatomic +configure-target-libada: maybe-all-target-libatomic +configure-target-libgm2: maybe-all-target-libatomic +configure-target-libgomp: maybe-all-target-libatomic +configure-target-libitm: maybe-all-target-libatomic +configure-target-libgrust: maybe-all-target-libatomic +@endif gcc-no-bootstrap + CONFIGURE_GDB_TK = @CONFIGURE_GDB_TK@ GDB_TK = @GDB_TK@ diff --git a/Makefile.tpl b/Makefile.tpl index ddcca5589137..431ce5ceb9c0 100644 --- a/Makefile.tpl +++ b/Makefile.tpl @@ -6,7 +6,7 @@ in # # Makefile for directory with subdirs to build. # Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, -# 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2023 +# 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 # Free Software Foundation # # This file is free software; you can redistribute it and/or modify @@ -147,8 +147,7 @@ BASE_EXPORTS = \ M4="$(M4)"; export M4; \ SED="$(SED)"; export SED; \ AWK="$(AWK)"; export AWK; \ - MAKEINFO="$(MAKEINFO)"; export MAKEINFO; \ - GUILE="$(GUILE)"; export GUILE; + MAKEINFO="$(MAKEINFO)"; export MAKEINFO; # This is the list of variables to export in the environment when # configuring subdirectories for the build system. @@ -247,6 +246,7 @@ HOST_EXPORTS = \ GMPINC="$(HOST_GMPINC)"; export GMPINC; \ ISLLIBS="$(HOST_ISLLIBS)"; export ISLLIBS; \ ISLINC="$(HOST_ISLINC)"; export ISLINC; \ + TARGET_CONFIGDIRS="$(TARGET_CONFIGDIRS)"; export TARGET_CONFIGDIRS; \ XGCC_FLAGS_FOR_TARGET="$(XGCC_FLAGS_FOR_TARGET)"; export XGCC_FLAGS_FOR_TARGET; \ @if gcc-bootstrap $(RPATH_ENVVAR)=`echo "$(TARGET_LIB_PATH)$$$(RPATH_ENVVAR)" | sed 's,::*,:,g;s,^:*,,;s,:*$$,,'`; export $(RPATH_ENVVAR); \ @@ -437,7 +437,7 @@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ LD = @LD@ LIPO = @LIPO@ -NM = @NM@ +NM = @NM@ @NM_PLUGIN_OPTION@ OBJDUMP = @OBJDUMP@ OTOOL = @OTOOL@ RANLIB = @RANLIB@ @RANLIB_PLUGIN_OPTION@ @@ -463,8 +463,6 @@ CRAB1_LIBS = @CRAB1_LIBS@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ -GUILE = guile - # Pass additional PGO and LTO compiler options to the PGO build. BUILD_CFLAGS = $(PGO_BUILD_CFLAGS) $(PGO_BUILD_LTO_CFLAGS) override CFLAGS += $(BUILD_CFLAGS) @@ -590,7 +588,7 @@ do-compare3 = $(do-compare) # Programs producing files for the TARGET machine # ----------------------------------------------- -AR_FOR_TARGET=@AR_FOR_TARGET@ +AR_FOR_TARGET=@AR_FOR_TARGET@ @AR_PLUGIN_OPTION_FOR_TARGET@ AS_FOR_TARGET=@AS_FOR_TARGET@ CC_FOR_TARGET=$(STAGE_CC_WRAPPER) @CC_FOR_TARGET@ @@ -610,11 +608,11 @@ DSYMUTIL_FOR_TARGET=@DSYMUTIL_FOR_TARGET@ LD_FOR_TARGET=@LD_FOR_TARGET@ LIPO_FOR_TARGET=@LIPO_FOR_TARGET@ -NM_FOR_TARGET=@NM_FOR_TARGET@ +NM_FOR_TARGET=@NM_FOR_TARGET@ @NM_PLUGIN_OPTION_FOR_TARGET@ OBJDUMP_FOR_TARGET=@OBJDUMP_FOR_TARGET@ OBJCOPY_FOR_TARGET=@OBJCOPY_FOR_TARGET@ OTOOL_FOR_TARGET=@OTOOL_FOR_TARGET@ -RANLIB_FOR_TARGET=@RANLIB_FOR_TARGET@ +RANLIB_FOR_TARGET=@RANLIB_FOR_TARGET@ @RANLIB_PLUGIN_OPTION_FOR_TARGET@ READELF_FOR_TARGET=@READELF_FOR_TARGET@ STRIP_FOR_TARGET=@STRIP_FOR_TARGET@ WINDRES_FOR_TARGET=@WINDRES_FOR_TARGET@ @@ -2101,6 +2099,11 @@ ENDFOR dependencies +]@endif gcc-bootstrap (if (exist? "no_gcc") (hash-create-handle! lang-env-deps (string-append (get "module") "-" "no_gcc") #t)) + + (if (exist? "no_atomic") + (hash-create-handle! lang-env-deps + (string-append (get "module") "-" "no_atomic") #t)) + "" +][+ ENDFOR lang_env_dependencies +] @if gcc-bootstrap[+ FOR target_modules +][+ IF (not (lang-dep "no_gcc")) @@ -2119,6 +2122,17 @@ configure-target-[+module+]: maybe-all-target-newlib maybe-all-target-libgloss[+ ENDIF +][+ IF (lang-dep "cxx") +] configure-target-[+module+]: maybe-all-target-libstdc++-v3[+ ENDIF +] + +@if gcc-bootstrap[+ FOR target_modules +][+ IF (not (lang-dep "no_atomic")) + +][+ IF bootstrap +][+ FOR bootstrap_stage +] +configure-stage[+id+]-target-[+module+]: maybe-all-stage[+id+]-target-libatomic[+ + ENDFOR +][+ ENDIF bootstrap +][+ ENDIF +][+ ENDFOR target_modules +] +@endif gcc-bootstrap + +@if gcc-no-bootstrap[+ FOR target_modules +][+ IF (not (lang-dep "no_atomic")) +] +configure-target-[+module+]: maybe-all-target-libatomic[+ + ENDIF +][+ ENDFOR target_modules +] +@endif gcc-no-bootstrap [+ ENDFOR target_modules +] CONFIGURE_GDB_TK = @CONFIGURE_GDB_TK@ diff --git a/config/ChangeLog b/config/ChangeLog index 10bce27d8e91..473d9a0a1826 100644 --- a/config/ChangeLog +++ b/config/ChangeLog @@ -1,3 +1,8 @@ +2025-10-02 H.J. Lu + + * clang-plugin.m4: Synced from binutils-gdb. + * gcc-plugin.m4: Likewise. + 2025-08-10 Ijaz, Abdul B * lib-link.m4: Handle dash in the library name for diff --git a/config/acx.m4 b/config/acx.m4 index c45e55e7f517..db54ccf1c7c1 100644 --- a/config/acx.m4 +++ b/config/acx.m4 @@ -107,9 +107,9 @@ AC_SUBST([target_subdir]) []dnl #### -# _NCN_TOOL_PREFIXES: Some stuff that oughtta be done in AC_CANONICAL_SYSTEM +# _NCN_TOOL_PREFIXES: Some stuff that oughtta be done in AC_CANONICAL_TARGET # or AC_INIT. -# These demand that AC_CANONICAL_SYSTEM be called beforehand. +# These demand that AC_CANONICAL_HOST and AC_CANONICAL_TARGET be called beforehand. AC_DEFUN([_NCN_TOOL_PREFIXES], [ncn_tool_prefix= test -n "$host_alias" && ncn_tool_prefix=$host_alias- diff --git a/config/clang-plugin.m4 b/config/clang-plugin.m4 new file mode 100644 index 000000000000..cc051fe48e32 --- /dev/null +++ b/config/clang-plugin.m4 @@ -0,0 +1,114 @@ +# clang-plugin.m4 -*- Autoconf -*- +# Check clang plugin file. + +dnl Copyright (C) 2025 Free Software Foundation, Inc. +dnl This file is free software, distributed under the terms of the GNU +dnl General Public License. As a special exception to the GNU General +dnl Public License, this file may be distributed as part of a program +dnl that contains a configuration script generated by Autoconf, under +dnl the same distribution terms as the rest of that program. + +dnl +dnl +dnl CLANG_PLUGIN_FILE +dnl (SHELL-CODE_HANDLER) +dnl +AC_DEFUN([CLANG_PLUGIN_FILE],[dnl + AC_CACHE_CHECK([for clang], clang_cv_is_clang, [ + AC_EGREP_CPP(yes, [ +#ifdef __clang__ + yes +#endif + ], clang_cv_is_clang=yes, clang_cv_is_clang=no)]) + plugin_file= + if test $clang_cv_is_clang = yes; then + AC_MSG_CHECKING([for clang plugin file]) + plugin_names="LLVMgold.so" + for plugin in $plugin_names; do + plugin_file=`${CC} ${CFLAGS} --print-file-name $plugin` + if test x$plugin_file = x$plugin; then + AC_CHECK_TOOL(LLVM_CONFIG, llvm-config) + if test "$?" != 0; then + AC_MSG_ERROR([Required tool 'llvm-config' not found on PATH.]) + fi + clang_lib_dir=`$LLVM_CONFIG --libdir` + if test -f $clang_lib_dir/$plugin; then + plugin_file=$clang_lib_dir/$plugin + fi + if test x$plugin_file != x$plugin; then + break; + fi + fi + done + if test -z $plugin_file; then + AC_MSG_ERROR([Couldn't find clang plugin file for $CC.]) + fi + dnl Check if ${AR} $plugin_option rc works. + AC_CHECK_TOOL(AR, ar) + if test "${AR}" = "" ; then + AC_MSG_ERROR([Required archive tool 'ar' not found on PATH.]) + fi + plugin_option="--plugin $plugin_file" + touch conftest.c + ${AR} $plugin_option rc conftest.a conftest.c + if test "$?" != 0; then + AC_MSG_WARN([Failed: $AR $plugin_option rc]) + plugin_file= + fi + rm -f conftest.* + AC_MSG_RESULT($plugin_file) + fi + $1="$plugin_file" +]) + +dnl +dnl +dnl CLANG_PLUGIN_FILE_FOR_TARGET +dnl (SHELL-CODE_HANDLER) +dnl +AC_DEFUN([CLANG_PLUGIN_FILE_FOR_TARGET],[dnl + COMPILER_FOR_TARGET="${CC_FOR_TARGET}" + if test x"${COMPILER_FOR_TARGET}" = x"\$(CC)"; then + COMPILER_FOR_TARGET="$CC" + fi + saved_CC="$CC" + CC="$COMPILER_FOR_TARGET" + AC_CACHE_CHECK([for clang for target], clang_target_cv_working, [ + AC_TRY_COMPILE([ +#ifndef __clang__ +#error Not clang +#endif + ], + [], + clang_target_cv_working=yes, clang_target_cv_working=no)]) + CC="$saved_CC" + plugin_file= + if test $clang_target_cv_working = yes; then + AC_MSG_CHECKING([for clang plugin file for target]) + plugin_names="LLVMgold.so" + dnl Check if the host compiler is used. + for plugin in $plugin_names; do + plugin_file=`${COMPILER_FOR_TARGET} ${CFLAGS_FOR_TARGET} --print-file-name $plugin` + if test x$plugin_file = x$plugin; then + GCC_TARGET_TOOL(llvm-config, LLVM_CONFIG_FOR_TARGET, LLVM_CONFIG) + if test "$?" != 0; then + AC_MSG_ERROR([Required target tool 'llvm-config' not found.]) + fi + clang_lib_dir=`$LLVM_CONFIG_FOR_TARGET --libdir` + if test -f $clang_lib_dir/$plugin; then + plugin_file=$clang_lib_dir/$plugin + fi + fi + if test x$plugin_file != x$plugin; then + break; + fi + plugin_file= + done + if test -n $plugin_file; then + AC_MSG_RESULT($plugin_file) + else + AC_MSG_RESULT([no]) + fi + fi + $1="$plugin_file" +]) diff --git a/config/gcc-plugin.m4 b/config/gcc-plugin.m4 index c30cfdd8fadb..0382147b3818 100644 --- a/config/gcc-plugin.m4 +++ b/config/gcc-plugin.m4 @@ -169,3 +169,46 @@ else AC_MSG_RESULT([no]) fi ]) + +dnl +dnl +dnl GCC_PLUGIN_OPTION_FOR_TARGET +dnl (SHELL-CODE_HANDLER) +dnl +AC_DEFUN([GCC_PLUGIN_OPTION_FOR_TARGET],[dnl +COMPILER_FOR_TARGET="${CC_FOR_TARGET}" +dnl Check if the host compiler is used. +if test x"${COMPILER_FOR_TARGET}" = x"\$(CC)"; then + COMPILER_FOR_TARGET="$CC" +fi +saved_CC="$CC" +CC="$COMPILER_FOR_TARGET" +AC_CACHE_CHECK([for gcc for target], gcc_target_cv_working, [ + AC_TRY_COMPILE( + [], + [], + gcc_target_cv_working=yes, + gcc_target_cv_working=no)]) +CC="$saved_CC" +AC_MSG_CHECKING([for -plugin option]) +plugin_option= +if test $gcc_target_cv_working = yes; then + plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll" + for plugin in $plugin_names; do + plugin_so=`${COMPILER_FOR_TARGET} ${CFLAGS_FOR_TARGET} --print-prog-name $plugin` + if test x$plugin_so = x$plugin; then + plugin_so=`${COMPILER_FOR_TARGET} ${CFLAGS_FOR_TARGET} --print-file-name $plugin` + fi + if test x$plugin_so != x$plugin; then + plugin_option="--plugin $plugin_so" + break + fi + done +fi +if test -n "$plugin_option"; then + $1="$plugin_option" + AC_MSG_RESULT($plugin_option) +else + AC_MSG_RESULT([no]) +fi +]) diff --git a/config/lthostflags.m4 b/config/lthostflags.m4 index bc0f59ee79e0..4a389a75ea83 100644 --- a/config/lthostflags.m4 +++ b/config/lthostflags.m4 @@ -10,7 +10,7 @@ dnl Defines and AC_SUBSTs lt_host_flags AC_DEFUN([ACX_LT_HOST_FLAGS], [ -AC_REQUIRE([AC_CANONICAL_SYSTEM]) +AC_REQUIRE([AC_CANONICAL_HOST]) case $host in *-cygwin* | *-mingw*) diff --git a/configure b/configure index ccec3f21cd85..4f2ba5e8a056 100755 --- a/configure +++ b/configure @@ -596,6 +596,10 @@ MAINTAINER_MODE_TRUE COMPILER_NM_FOR_TARGET COMPILER_LD_FOR_TARGET COMPILER_AS_FOR_TARGET +RANLIB_PLUGIN_OPTION_FOR_TARGET +NM_PLUGIN_OPTION_FOR_TARGET +AR_PLUGIN_OPTION_FOR_TARGET +LLVM_CONFIG_FOR_TARGET FLAGS_FOR_TARGET RAW_CXX_FOR_TARGET WINDMC_FOR_TARGET @@ -621,7 +625,12 @@ GCC_FOR_TARGET CXX_FOR_TARGET CC_FOR_TARGET RANLIB_PLUGIN_OPTION +NM_PLUGIN_OPTION AR_PLUGIN_OPTION +LLVM_CONFIG +EGREP +GREP +CPP PKG_CONFIG_PATH GDCFLAGS READELF @@ -893,6 +902,7 @@ OBJCOPY OBJDUMP OTOOL READELF +CPP CC_FOR_TARGET CXX_FOR_TARGET GCC_FOR_TARGET @@ -1693,6 +1703,7 @@ Some influential environment variables: OBJDUMP OBJDUMP for the host OTOOL OTOOL for the host READELF READELF for the host + CPP C preprocessor CC_FOR_TARGET CC for the target CXX_FOR_TARGET @@ -1985,6 +1996,43 @@ fi as_fn_set_status $ac_retval } # ac_fn_c_try_link + +# ac_fn_c_try_cpp LINENO +# ---------------------- +# Try to preprocess conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } > conftest.i && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_cpp cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. @@ -2343,6 +2391,7 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu + progname=$0 # if PWD already has a value, it is probably wrong. if test -n "$PWD" ; then PWD=`${PWDCMD-pwd}`; fi @@ -2538,7 +2587,6 @@ test -n "$target_alias" && test "$program_prefix$program_suffix$program_transform_name" = \ NONENONEs,x,x, && program_prefix=${target_alias}- - test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. @@ -4104,10 +4152,6 @@ case "${target}" in # always build newlib. skipdirs=`echo " ${skipdirs} " | sed -e 's/ target-newlib / /'` ;; - # This is temporary until we can link against shared libraries - powerpcle-*-solaris*) - noconfigdirs="$noconfigdirs gdb sim tcl tk itcl" - ;; powerpc-*-beos*) noconfigdirs="$noconfigdirs gdb" ;; @@ -11031,6 +11075,11 @@ if echo " ${target_configdirs} " | grep " libgomp " > /dev/null 2>&1 ; then bootstrap_target_libs=${bootstrap_target_libs}target-libgomp, fi +# If we are building libatomic, bootstrap it. +if echo " ${target_configdirs} " | grep " libatomic " > /dev/null 2>&1 ; then + bootstrap_target_libs=${bootstrap_target_libs}target-libatomic, +fi + # If we are building libsanitizer and $BUILD_CONFIG contains bootstrap-asan # or bootstrap-ubsan, bootstrap it. if echo " ${target_configdirs} " | grep " libsanitizer " > /dev/null 2>&1; then @@ -14221,7 +14270,529 @@ fi GDCFLAGS=${GDCFLAGS-${CFLAGS}} -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for -plugin option" >&5 +# Try CLANG_PLUGIN_FILE first since GCC_PLUGIN_OPTION may return the +# wrong PLUGIN_OPTION with clang. +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +$as_echo_n "checking how to run the C preprocessor... " >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if ${ac_cv_prog_CPP+:} false; then : + $as_echo_n "(cached) " >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi + + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +$as_echo "$CPP" >&6; } +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details" "$LINENO" 5; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 +$as_echo_n "checking for grep that handles long lines and -e... " >&6; } +if ${ac_cv_path_GREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$GREP"; then + ac_path_GREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in grep ggrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_GREP" || continue +# Check for GNU ac_path_GREP and select it if it is found. + # Check for GNU $ac_path_GREP +case `"$ac_path_GREP" --version 2>&1` in +*GNU*) + ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'GREP' >> "conftest.nl" + "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_GREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_GREP="$ac_path_GREP" + ac_path_GREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_GREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_GREP"; then + as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_GREP=$GREP +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 +$as_echo "$ac_cv_path_GREP" >&6; } + GREP="$ac_cv_path_GREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 +$as_echo_n "checking for egrep... " >&6; } +if ${ac_cv_path_EGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 + then ac_cv_path_EGREP="$GREP -E" + else + if test -z "$EGREP"; then + ac_path_EGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in egrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_EGREP" || continue +# Check for GNU ac_path_EGREP and select it if it is found. + # Check for GNU $ac_path_EGREP +case `"$ac_path_EGREP" --version 2>&1` in +*GNU*) + ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'EGREP' >> "conftest.nl" + "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_EGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP="$ac_path_EGREP" + ac_path_EGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_EGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_EGREP"; then + as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_EGREP=$EGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 +$as_echo "$ac_cv_path_EGREP" >&6; } + EGREP="$ac_cv_path_EGREP" + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang" >&5 +$as_echo_n "checking for clang... " >&6; } +if ${clang_cv_is_clang+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifdef __clang__ + yes +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "yes" >/dev/null 2>&1; then : + clang_cv_is_clang=yes +else + clang_cv_is_clang=no +fi +rm -f conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $clang_cv_is_clang" >&5 +$as_echo "$clang_cv_is_clang" >&6; } + plugin_file= + if test $clang_cv_is_clang = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang plugin file" >&5 +$as_echo_n "checking for clang plugin file... " >&6; } + plugin_names="LLVMgold.so" + for plugin in $plugin_names; do + plugin_file=`${CC} ${CFLAGS} --print-file-name $plugin` + if test x$plugin_file = x$plugin; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}llvm-config", so it can be a program name with args. +set dummy ${ac_tool_prefix}llvm-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_LLVM_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$LLVM_CONFIG"; then + ac_cv_prog_LLVM_CONFIG="$LLVM_CONFIG" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_LLVM_CONFIG="${ac_tool_prefix}llvm-config" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +LLVM_CONFIG=$ac_cv_prog_LLVM_CONFIG +if test -n "$LLVM_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LLVM_CONFIG" >&5 +$as_echo "$LLVM_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_LLVM_CONFIG"; then + ac_ct_LLVM_CONFIG=$LLVM_CONFIG + # Extract the first word of "llvm-config", so it can be a program name with args. +set dummy llvm-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_LLVM_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_LLVM_CONFIG"; then + ac_cv_prog_ac_ct_LLVM_CONFIG="$ac_ct_LLVM_CONFIG" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_LLVM_CONFIG="llvm-config" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_LLVM_CONFIG=$ac_cv_prog_ac_ct_LLVM_CONFIG +if test -n "$ac_ct_LLVM_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LLVM_CONFIG" >&5 +$as_echo "$ac_ct_LLVM_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_LLVM_CONFIG" = x; then + LLVM_CONFIG="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + LLVM_CONFIG=$ac_ct_LLVM_CONFIG + fi +else + LLVM_CONFIG="$ac_cv_prog_LLVM_CONFIG" +fi + + if test "$?" != 0; then + as_fn_error $? "Required tool 'llvm-config' not found on PATH." "$LINENO" 5 + fi + clang_lib_dir=`$LLVM_CONFIG --libdir` + if test -f $clang_lib_dir/$plugin; then + plugin_file=$clang_lib_dir/$plugin + fi + if test x$plugin_file != x$plugin; then + break; + fi + fi + done + if test -z $plugin_file; then + as_fn_error $? "Couldn't find clang plugin file for $CC." "$LINENO" 5 + fi + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + + if test "${AR}" = "" ; then + as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5 + fi + plugin_option="--plugin $plugin_file" + touch conftest.c + ${AR} $plugin_option rc conftest.a conftest.c + if test "$?" != 0; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 +$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} + plugin_file= + fi + rm -f conftest.* + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_file" >&5 +$as_echo "$plugin_file" >&6; } + fi + PLUGIN_FILE="$plugin_file" + +if test -n "$PLUGIN_FILE"; then + PLUGIN_OPTION="--plugin $PLUGIN_FILE" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -plugin option" >&5 $as_echo_n "checking for -plugin option... " >&6; } plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll" @@ -14348,12 +14919,17 @@ else $as_echo "no" >&6; } fi +fi AR_PLUGIN_OPTION= +NM_PLUGIN_OPTION= RANLIB_PLUGIN_OPTION= if test -n "$PLUGIN_OPTION"; then if $AR --help 2>&1 | grep -q "\--plugin"; then AR_PLUGIN_OPTION="$PLUGIN_OPTION" fi + if $NM --help 2>&1 | grep -q "\--plugin"; then + NM_PLUGIN_OPTION="$PLUGIN_OPTION" + fi if $RANLIB --help 2>&1 | grep -q "\--plugin"; then RANLIB_PLUGIN_OPTION="$PLUGIN_OPTION" fi @@ -14361,6 +14937,7 @@ fi + # Target tools. # Check whether --with-build-time-tools was given. @@ -20024,6 +20601,182 @@ AR_FOR_TARGET=${AR_FOR_TARGET}${extra_arflags_for_target} RANLIB_FOR_TARGET=${RANLIB_FOR_TARGET}${extra_ranlibflags_for_target} NM_FOR_TARGET=${NM_FOR_TARGET}${extra_nmflags_for_target} +# Try CLANG_PLUGIN_FILE_FOR_TARGET first since GCC_PLUGIN_OPTION_FOR_TARGET +# may return the wrong PLUGIN_OPTION_FOR_TARGET with clang. + COMPILER_FOR_TARGET="${CC_FOR_TARGET}" + if test x"${COMPILER_FOR_TARGET}" = x"\$(CC)"; then + COMPILER_FOR_TARGET="$CC" + fi + saved_CC="$CC" + CC="$COMPILER_FOR_TARGET" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang for target" >&5 +$as_echo_n "checking for clang for target... " >&6; } +if ${clang_target_cv_working+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifndef __clang__ +#error Not clang +#endif + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + clang_target_cv_working=yes +else + clang_target_cv_working=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $clang_target_cv_working" >&5 +$as_echo "$clang_target_cv_working" >&6; } + CC="$saved_CC" + plugin_file= + if test $clang_target_cv_working = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang plugin file for target" >&5 +$as_echo_n "checking for clang plugin file for target... " >&6; } + plugin_names="LLVMgold.so" + for plugin in $plugin_names; do + plugin_file=`${COMPILER_FOR_TARGET} ${CFLAGS_FOR_TARGET} --print-file-name $plugin` + if test x$plugin_file = x$plugin; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking where to find the target llvm-config" >&5 +$as_echo_n "checking where to find the target llvm-config... " >&6; } +if test "x${build}" != "x${host}" ; then + if expr "x$LLVM_CONFIG_FOR_TARGET" : "x/" > /dev/null; then + # We already found the complete path + ac_dir=`dirname $LLVM_CONFIG_FOR_TARGET` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: pre-installed in $ac_dir" >&5 +$as_echo "pre-installed in $ac_dir" >&6; } + else + # Canadian cross, just use what we found + { $as_echo "$as_me:${as_lineno-$LINENO}: result: pre-installed" >&5 +$as_echo "pre-installed" >&6; } + fi +else + if expr "x$LLVM_CONFIG_FOR_TARGET" : "x/" > /dev/null; then + # We already found the complete path + ac_dir=`dirname $LLVM_CONFIG_FOR_TARGET` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: pre-installed in $ac_dir" >&5 +$as_echo "pre-installed in $ac_dir" >&6; } + elif test "x$target" = "x$host"; then + # We can use an host tool + LLVM_CONFIG_FOR_TARGET='$(LLVM_CONFIG)' + { $as_echo "$as_me:${as_lineno-$LINENO}: result: host tool" >&5 +$as_echo "host tool" >&6; } + else + # We need a cross tool + { $as_echo "$as_me:${as_lineno-$LINENO}: result: pre-installed" >&5 +$as_echo "pre-installed" >&6; } + fi +fi + + if test "$?" != 0; then + as_fn_error $? "Required target tool 'llvm-config' not found." "$LINENO" 5 + fi + clang_lib_dir=`$LLVM_CONFIG_FOR_TARGET --libdir` + if test -f $clang_lib_dir/$plugin; then + plugin_file=$clang_lib_dir/$plugin + fi + fi + if test x$plugin_file != x$plugin; then + break; + fi + plugin_file= + done + if test -n $plugin_file; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_file" >&5 +$as_echo "$plugin_file" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + fi + fi + PLUGIN_FILE_FOR_TARGET="$plugin_file" + +if test -n "$PLUGIN_FILE_FOR_TARGET"; then + PLUGIN_OPTION_FOR_TARGET="--plugin $PLUGIN_FILE_FOR_TARGET" +else + COMPILER_FOR_TARGET="${CC_FOR_TARGET}" +if test x"${COMPILER_FOR_TARGET}" = x"\$(CC)"; then + COMPILER_FOR_TARGET="$CC" +fi +saved_CC="$CC" +CC="$COMPILER_FOR_TARGET" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for gcc for target" >&5 +$as_echo_n "checking for gcc for target... " >&6; } +if ${gcc_target_cv_working+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gcc_target_cv_working=yes +else + gcc_target_cv_working=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_target_cv_working" >&5 +$as_echo "$gcc_target_cv_working" >&6; } +CC="$saved_CC" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for -plugin option" >&5 +$as_echo_n "checking for -plugin option... " >&6; } +plugin_option= +if test $gcc_target_cv_working = yes; then + plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll" + for plugin in $plugin_names; do + plugin_so=`${COMPILER_FOR_TARGET} ${CFLAGS_FOR_TARGET} --print-prog-name $plugin` + if test x$plugin_so = x$plugin; then + plugin_so=`${COMPILER_FOR_TARGET} ${CFLAGS_FOR_TARGET} --print-file-name $plugin` + fi + if test x$plugin_so != x$plugin; then + plugin_option="--plugin $plugin_so" + break + fi + done +fi +if test -n "$plugin_option"; then + PLUGIN_OPTION_FOR_TARGET="$plugin_option" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_option" >&5 +$as_echo "$plugin_option" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + +fi +if test -n "$PLUGIN_OPTION_FOR_TARGET"; then + AR_PLUGIN_OPTION_FOR_TARGET="$PLUGIN_OPTION_FOR_TARGET" + NM_PLUGIN_OPTION_FOR_TARGET="$PLUGIN_OPTION_FOR_TARGET" + RANLIB_PLUGIN_OPTION_FOR_TARGET="$PLUGIN_OPTION_FOR_TARGET" +else + AR_PLUGIN_OPTION_FOR_TARGET= + NM_PLUGIN_OPTION_FOR_TARGET= + RANLIB_PLUGIN_OPTION_FOR_TARGET= +fi + + + + # When building target libraries, except in a Canadian cross, we use # the same toolchain as the compiler we just built. COMPILER_AS_FOR_TARGET='$(AS_FOR_TARGET)' diff --git a/configure.ac b/configure.ac index 89ebe4041b61..94321ffd20ab 100644 --- a/configure.ac +++ b/configure.ac @@ -24,6 +24,7 @@ m4_include(config/override.m4) m4_include(config/proginstall.m4) m4_include(config/elf.m4) m4_include(config/ax_cxx_compile_stdcxx.m4) +m4_include(config/clang-plugin.m4) m4_include(config/gcc-plugin.m4) m4_include([libtool.m4]) m4_include([ltoptions.m4]) @@ -32,7 +33,8 @@ m4_include([ltversion.m4]) m4_include([lt~obsolete.m4]) m4_include([config/isl.m4]) -AC_INIT(move-if-change) +AC_INIT +AC_CONFIG_SRCDIR([move-if-change]) AC_DISABLE_OPTION_CHECKING progname=$0 @@ -70,14 +72,14 @@ ACX_NONCANONICAL_TARGET dnl Autoconf 2.5x and later will set a default program prefix if dnl --target was used, even if it was the same as --host. Disable -dnl that behavior. This must be done before AC_CANONICAL_SYSTEM +dnl that behavior. This must be done before AC_CANONICAL_TARGET dnl to take effect. test "$host_noncanonical" = "$target_noncanonical" && test "$program_prefix$program_suffix$program_transform_name" = \ NONENONEs,x,x, && program_transform_name=s,y,y, -AC_CANONICAL_SYSTEM +AC_CANONICAL_TARGET AC_ARG_PROGRAM m4_pattern_allow([^AS_FOR_TARGET$])dnl @@ -1319,10 +1321,6 @@ case "${target}" in # always build newlib. skipdirs=`echo " ${skipdirs} " | sed -e 's/ target-newlib / /'` ;; - # This is temporary until we can link against shared libraries - powerpcle-*-solaris*) - noconfigdirs="$noconfigdirs gdb sim tcl tk itcl" - ;; powerpc-*-beos*) noconfigdirs="$noconfigdirs gdb" ;; @@ -3253,6 +3251,11 @@ if echo " ${target_configdirs} " | grep " libgomp " > /dev/null 2>&1 ; then bootstrap_target_libs=${bootstrap_target_libs}target-libgomp, fi +# If we are building libatomic, bootstrap it. +if echo " ${target_configdirs} " | grep " libatomic " > /dev/null 2>&1 ; then + bootstrap_target_libs=${bootstrap_target_libs}target-libatomic, +fi + # If we are building libsanitizer and $BUILD_CONFIG contains bootstrap-asan # or bootstrap-ubsan, bootstrap it. if echo " ${target_configdirs} " | grep " libsanitizer " > /dev/null 2>&1; then @@ -4015,18 +4018,30 @@ AC_SUBST(GDCFLAGS) GDCFLAGS=${GDCFLAGS-${CFLAGS}} AC_SUBST(PKG_CONFIG_PATH) -GCC_PLUGIN_OPTION(PLUGIN_OPTION) +# Try CLANG_PLUGIN_FILE first since GCC_PLUGIN_OPTION may return the +# wrong PLUGIN_OPTION with clang. +CLANG_PLUGIN_FILE(PLUGIN_FILE) +if test -n "$PLUGIN_FILE"; then + PLUGIN_OPTION="--plugin $PLUGIN_FILE" +else + GCC_PLUGIN_OPTION(PLUGIN_OPTION) +fi AR_PLUGIN_OPTION= +NM_PLUGIN_OPTION= RANLIB_PLUGIN_OPTION= if test -n "$PLUGIN_OPTION"; then if $AR --help 2>&1 | grep -q "\--plugin"; then AR_PLUGIN_OPTION="$PLUGIN_OPTION" fi + if $NM --help 2>&1 | grep -q "\--plugin"; then + NM_PLUGIN_OPTION="$PLUGIN_OPTION" + fi if $RANLIB --help 2>&1 | grep -q "\--plugin"; then RANLIB_PLUGIN_OPTION="$PLUGIN_OPTION" fi fi AC_SUBST(AR_PLUGIN_OPTION) +AC_SUBST(NM_PLUGIN_OPTION) AC_SUBST(RANLIB_PLUGIN_OPTION) # Target tools. @@ -4121,6 +4136,27 @@ AR_FOR_TARGET=${AR_FOR_TARGET}${extra_arflags_for_target} RANLIB_FOR_TARGET=${RANLIB_FOR_TARGET}${extra_ranlibflags_for_target} NM_FOR_TARGET=${NM_FOR_TARGET}${extra_nmflags_for_target} +# Try CLANG_PLUGIN_FILE_FOR_TARGET first since GCC_PLUGIN_OPTION_FOR_TARGET +# may return the wrong PLUGIN_OPTION_FOR_TARGET with clang. +CLANG_PLUGIN_FILE_FOR_TARGET(PLUGIN_FILE_FOR_TARGET) +if test -n "$PLUGIN_FILE_FOR_TARGET"; then + PLUGIN_OPTION_FOR_TARGET="--plugin $PLUGIN_FILE_FOR_TARGET" +else + GCC_PLUGIN_OPTION_FOR_TARGET(PLUGIN_OPTION_FOR_TARGET) +fi +if test -n "$PLUGIN_OPTION_FOR_TARGET"; then + AR_PLUGIN_OPTION_FOR_TARGET="$PLUGIN_OPTION_FOR_TARGET" + NM_PLUGIN_OPTION_FOR_TARGET="$PLUGIN_OPTION_FOR_TARGET" + RANLIB_PLUGIN_OPTION_FOR_TARGET="$PLUGIN_OPTION_FOR_TARGET" +else + AR_PLUGIN_OPTION_FOR_TARGET= + NM_PLUGIN_OPTION_FOR_TARGET= + RANLIB_PLUGIN_OPTION_FOR_TARGET= +fi +AC_SUBST(AR_PLUGIN_OPTION_FOR_TARGET) +AC_SUBST(NM_PLUGIN_OPTION_FOR_TARGET) +AC_SUBST(RANLIB_PLUGIN_OPTION_FOR_TARGET) + # When building target libraries, except in a Canadian cross, we use # the same toolchain as the compiler we just built. COMPILER_AS_FOR_TARGET='$(AS_FOR_TARGET)' diff --git a/contrib/ChangeLog b/contrib/ChangeLog index 691203f9036b..55737ced848a 100644 --- a/contrib/ChangeLog +++ b/contrib/ChangeLog @@ -1,3 +1,59 @@ +2025-10-08 Jakub Jelinek + + * unicode/README: Add HangulSyllableType.txt file to the + list as newest utf8_gen.py from glibc now needs it. Adjust + git commit hash and change unicode 16 version to 17. + * unicode/from_glibc/utf8_gen.py: Updated from glibc. + * unicode/DerivedCoreProperties.txt: Updated from Unicode 17.0.0. + * unicode/emoji-data.txt: Likewise. + * unicode/PropList.txt: Likewise. + * unicode/GraphemeBreakProperty.txt: Likewise. + * unicode/DerivedNormalizationProps.txt: Likewise. + * unicode/NameAliases.txt: Likewise. + * unicode/UnicodeData.txt: Likewise. + * unicode/EastAsianWidth.txt: Likewise. + * unicode/DerivedGeneralCategory.txt: Likewise. + * unicode/HangulSyllableType.txt: New file. + +2025-10-05 Mark Wielaard + + * gcc-changelog/git_update_version.py (ignored_commits): Add + commit b40ef6e9dc096c8c19399e94947a1965258a6942. + +2025-10-03 David Malcolm + + Revert: + 2025-10-02 David Malcolm + + * gcc.doxy (INPUT): Add gcc/custom-sarif-properties + +2025-10-02 David Malcolm + + * gcc.doxy (INPUT): Add gcc/custom-sarif-properties + +2025-09-23 Jonathan Wakely + + * unicode/gen_libstdcxx_unicode_data.py: Fix comment type. + +2025-09-22 Jonathan Wakely + + * unicode/gen_libstdcxx_unicode_data.py: Update comment at the + top of the file to mention DerivedGeneralCategory.txt + prerequisite. + +2025-09-17 Andrew Pinski + + * uninclude: Add `lib/gcc//include`. + +2025-09-10 Christophe Lyon + + * compare_tests: Improve non-unique tests report when testing + several configurations. + +2025-09-08 Christophe Lyon + + * compare_tests: Report non-unique test names. + 2025-08-17 Filip Kastl * check-MAINTAINERS.py: Document the way the script sorts diff --git a/contrib/compare_tests b/contrib/compare_tests index 152957bc3247..8efd15e903f1 100755 --- a/contrib/compare_tests +++ b/contrib/compare_tests @@ -126,10 +126,18 @@ fi sort -t ':' $skip1 "$now" > "$now_s" sort -t ':' $skip1 "$before" > "$before_s" -# Report non-unique test names, but print the two lists only if they -# are different. -sed '/^$/d' "$now_s" | uniq -cd > "$now_u" -sed '/^$/d' "$before_s" | uniq -cd > "$before_u" +# Report non-unique test names and print the diff between the two +# lists if they are different. +# +# If the results include several configurations (schedule of +# variations), we report duplicates several times with different +# target/tool prefixes because at this stage we do not know if the +# target and/or tool prefix was inserted. +# If we used the input files (so generally several times the same +# results in one section per target), we would incorreclty detect +# duplicates (as many as targets) +grep -E '^(PASS|XPASS|FAIL|XFAIL|UNRESOLVED|UNSUPPORTED|UNTESTED|ERROR):' "$now_s" | uniq -cd > "$now_u" +grep -E '^(PASS|XPASS|FAIL|XFAIL|UNRESOLVED|UNSUPPORTED|UNTESTED|ERROR):' "$before_s" | uniq -cd > "$before_u" same_uniq=" now" cmp -s "$before_u" "$now_u" && same_uniq="" @@ -142,8 +150,8 @@ if [ -s "$now_u" ]; then fi if [ -s "$before_u" -a "x$same_uniq" != "x" ]; then - echo "Non-unique test names before: (Eeek!)" - cat "$before_u" + echo "Changes to non-unique test names:" + diff -u "$before_u" "$now_u" | grep -E '^[-\\+] ' echo exit_status=1 fi diff --git a/contrib/gcc-changelog/git_update_version.py b/contrib/gcc-changelog/git_update_version.py index b3ea33bb5161..09a42520624f 100755 --- a/contrib/gcc-changelog/git_update_version.py +++ b/contrib/gcc-changelog/git_update_version.py @@ -47,7 +47,8 @@ '72677e1119dc40aa680755d009e079ad49446c46', '10d76b7f1e5b63ad6d2b92940c39007913ced037', 'de3b277247ce98d189f121155b75f490725a42f6', - '13cf22eb557eb5e3d796822247d8d4957bdb25da'} + '13cf22eb557eb5e3d796822247d8d4957bdb25da', + 'b40ef6e9dc096c8c19399e94947a1965258a6942'} FORMAT = '%(asctime)s:%(levelname)s:%(name)s:%(message)s' logging.basicConfig(level=logging.INFO, format=FORMAT, diff --git a/contrib/unicode/DerivedCoreProperties.txt b/contrib/unicode/DerivedCoreProperties.txt index 1075638f1a65..f327784bf395 100644 --- a/contrib/unicode/DerivedCoreProperties.txt +++ b/contrib/unicode/DerivedCoreProperties.txt @@ -1,6 +1,6 @@ -# DerivedCoreProperties-16.0.0.txt -# Date: 2024-05-31, 18:09:32 GMT -# © 2024 Unicode®, Inc. +# DerivedCoreProperties-17.0.0.txt +# Date: 2025-07-30, 23:55:08 GMT +# © 2025 Unicode®, Inc. # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. # For terms of use and license, see https://www.unicode.org/terms_of_use.html # @@ -178,6 +178,7 @@ FF5E ; Math # Sm FULLWIDTH TILDE FFE2 ; Math # Sm FULLWIDTH NOT SIGN FFE9..FFEC ; Math # Sm [4] HALFWIDTH LEFTWARDS ARROW..HALFWIDTH DOWNWARDS ARROW 10D8E..10D8F ; Math # Sm [2] GARAY PLUS SIGN..GARAY MINUS SIGN +1CEF0 ; Math # Sm MEDIUM SMALL WHITE CIRCLE WITH HORIZONTAL BAR 1D400..1D454 ; Math # L& [85] MATHEMATICAL BOLD CAPITAL A..MATHEMATICAL ITALIC SMALL G 1D456..1D49C ; Math # L& [71] MATHEMATICAL ITALIC SMALL I..MATHEMATICAL SCRIPT CAPITAL A 1D49E..1D49F ; Math # L& [2] MATHEMATICAL SCRIPT CAPITAL C..MATHEMATICAL SCRIPT CAPITAL D @@ -253,8 +254,9 @@ FFE9..FFEC ; Math # Sm [4] HALFWIDTH LEFTWARDS ARROW..HALFWIDTH DOWNWARDS A 1EEA5..1EEA9 ; Math # Lo [5] ARABIC MATHEMATICAL DOUBLE-STRUCK WAW..ARABIC MATHEMATICAL DOUBLE-STRUCK YEH 1EEAB..1EEBB ; Math # Lo [17] ARABIC MATHEMATICAL DOUBLE-STRUCK LAM..ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN 1EEF0..1EEF1 ; Math # Sm [2] ARABIC MATHEMATICAL OPERATOR MEEM WITH HAH WITH TATWEEL..ARABIC MATHEMATICAL OPERATOR HAH WITH DAL +1F8D0..1F8D8 ; Math # Sm [9] LONG RIGHTWARDS ARROW OVER LONG LEFTWARDS ARROW..LONG LEFT RIGHT ARROW WITH DEPENDENT LOBE -# Total code points: 2312 +# Total code points: 2322 # ================================================ @@ -273,8 +275,8 @@ FFE9..FFEC ; Math # Sm [4] HALFWIDTH LEFTWARDS ARROW..HALFWIDTH DOWNWARDS A 01BC..01BF ; Alphabetic # L& [4] LATIN CAPITAL LETTER TONE FIVE..LATIN LETTER WYNN 01C0..01C3 ; Alphabetic # Lo [4] LATIN LETTER DENTAL CLICK..LATIN LETTER RETROFLEX CLICK 01C4..0293 ; Alphabetic # L& [208] LATIN CAPITAL LETTER DZ WITH CARON..LATIN SMALL LETTER EZH WITH CURL -0294 ; Alphabetic # Lo LATIN LETTER GLOTTAL STOP -0295..02AF ; Alphabetic # L& [27] LATIN LETTER PHARYNGEAL VOICED FRICATIVE..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL +0294..0295 ; Alphabetic # Lo [2] LATIN LETTER GLOTTAL STOP..LATIN LETTER PHARYNGEAL VOICED FRICATIVE +0296..02AF ; Alphabetic # L& [26] LATIN LETTER INVERTED GLOTTAL STOP..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL 02B0..02C1 ; Alphabetic # Lm [18] MODIFIER LETTER SMALL H..MODIFIER LETTER REVERSED GLOTTAL STOP 02C6..02D1 ; Alphabetic # Lm [12] MODIFIER LETTER CIRCUMFLEX ACCENT..MODIFIER LETTER HALF TRIANGULAR COLON 02E0..02E4 ; Alphabetic # Lm [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP @@ -344,7 +346,7 @@ FFE9..FFEC ; Math # Sm [4] HALFWIDTH LEFTWARDS ARROW..HALFWIDTH DOWNWARDS A 0840..0858 ; Alphabetic # Lo [25] MANDAIC LETTER HALQA..MANDAIC LETTER AIN 0860..086A ; Alphabetic # Lo [11] SYRIAC LETTER MALAYALAM NGA..SYRIAC LETTER MALAYALAM SSA 0870..0887 ; Alphabetic # Lo [24] ARABIC LETTER ALEF WITH ATTACHED FATHA..ARABIC BASELINE ROUND DOT -0889..088E ; Alphabetic # Lo [6] ARABIC LETTER NOON WITH INVERTED SMALL V..ARABIC VERTICAL TAIL +0889..088F ; Alphabetic # Lo [7] ARABIC LETTER NOON WITH INVERTED SMALL V..ARABIC LETTER NOON WITH RING ABOVE 0897 ; Alphabetic # Mn ARABIC PEPET 08A0..08C8 ; Alphabetic # Lo [41] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER GRAF 08C9 ; Alphabetic # Lm ARABIC SMALL FARSI YEH @@ -477,7 +479,7 @@ FFE9..FFEC ; Math # Sm [4] HALFWIDTH LEFTWARDS ARROW..HALFWIDTH DOWNWARDS A 0C4A..0C4C ; Alphabetic # Mn [3] TELUGU VOWEL SIGN O..TELUGU VOWEL SIGN AU 0C55..0C56 ; Alphabetic # Mn [2] TELUGU LENGTH MARK..TELUGU AI LENGTH MARK 0C58..0C5A ; Alphabetic # Lo [3] TELUGU LETTER TSA..TELUGU LETTER RRRA -0C5D ; Alphabetic # Lo TELUGU LETTER NAKAARA POLLU +0C5C..0C5D ; Alphabetic # Lo [2] TELUGU ARCHAIC SHRII..TELUGU LETTER NAKAARA POLLU 0C60..0C61 ; Alphabetic # Lo [2] TELUGU LETTER VOCALIC RR..TELUGU LETTER VOCALIC LL 0C62..0C63 ; Alphabetic # Mn [2] TELUGU VOWEL SIGN VOCALIC L..TELUGU VOWEL SIGN VOCALIC LL 0C80 ; Alphabetic # Lo KANNADA SIGN SPACING CANDRABINDU @@ -497,7 +499,7 @@ FFE9..FFEC ; Math # Sm [4] HALFWIDTH LEFTWARDS ARROW..HALFWIDTH DOWNWARDS A 0CCA..0CCB ; Alphabetic # Mc [2] KANNADA VOWEL SIGN O..KANNADA VOWEL SIGN OO 0CCC ; Alphabetic # Mn KANNADA VOWEL SIGN AU 0CD5..0CD6 ; Alphabetic # Mc [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK -0CDD..0CDE ; Alphabetic # Lo [2] KANNADA LETTER NAKAARA POLLU..KANNADA LETTER FA +0CDC..0CDE ; Alphabetic # Lo [3] KANNADA ARCHAIC SHRII..KANNADA LETTER FA 0CE0..0CE1 ; Alphabetic # Lo [2] KANNADA LETTER VOCALIC RR..KANNADA LETTER VOCALIC LL 0CE2..0CE3 ; Alphabetic # Mn [2] KANNADA VOWEL SIGN VOCALIC L..KANNADA VOWEL SIGN VOCALIC LL 0CF1..0CF2 ; Alphabetic # Lo [2] KANNADA SIGN JIHVAMULIYA..KANNADA SIGN UPADHMANIYA @@ -833,11 +835,8 @@ A771..A787 ; Alphabetic # L& [23] LATIN SMALL LETTER DUM..LATIN SMALL LETTER A788 ; Alphabetic # Lm MODIFIER LETTER LOW CIRCUMFLEX ACCENT A78B..A78E ; Alphabetic # L& [4] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT A78F ; Alphabetic # Lo LATIN LETTER SINOLOGICAL DOT -A790..A7CD ; Alphabetic # L& [62] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER S WITH DIAGONAL STROKE -A7D0..A7D1 ; Alphabetic # L& [2] LATIN CAPITAL LETTER CLOSED INSULAR G..LATIN SMALL LETTER CLOSED INSULAR G -A7D3 ; Alphabetic # L& LATIN SMALL LETTER DOUBLE THORN -A7D5..A7DC ; Alphabetic # L& [8] LATIN SMALL LETTER DOUBLE WYNN..LATIN CAPITAL LETTER LAMBDA WITH STROKE -A7F2..A7F4 ; Alphabetic # Lm [3] MODIFIER LETTER CAPITAL C..MODIFIER LETTER CAPITAL Q +A790..A7DC ; Alphabetic # L& [77] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN CAPITAL LETTER LAMBDA WITH STROKE +A7F1..A7F4 ; Alphabetic # Lm [4] MODIFIER LETTER CAPITAL S..MODIFIER LETTER CAPITAL Q A7F5..A7F6 ; Alphabetic # L& [2] LATIN CAPITAL LETTER REVERSED HALF H..LATIN SMALL LETTER REVERSED HALF H A7F7 ; Alphabetic # Lo LATIN EPIGRAPHIC LETTER SIDEWAYS I A7F8..A7F9 ; Alphabetic # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE @@ -1020,6 +1019,7 @@ FFDA..FFDC ; Alphabetic # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANG 108F4..108F5 ; Alphabetic # Lo [2] HATRAN LETTER SHIN..HATRAN LETTER TAW 10900..10915 ; Alphabetic # Lo [22] PHOENICIAN LETTER ALF..PHOENICIAN LETTER TAU 10920..10939 ; Alphabetic # Lo [26] LYDIAN LETTER A..LYDIAN LETTER C +10940..10959 ; Alphabetic # Lo [26] SIDETIC LETTER N01..SIDETIC LETTER N26 10980..109B7 ; Alphabetic # Lo [56] MEROITIC HIEROGLYPHIC LETTER A..MEROITIC CURSIVE LETTER DA 109BE..109BF ; Alphabetic # Lo [2] MEROITIC CURSIVE LOGOGRAM RMT..MEROITIC CURSIVE LOGOGRAM IMN 10A00 ; Alphabetic # Lo KHAROSHTHI LETTER A @@ -1053,7 +1053,9 @@ FFDA..FFDC ; Alphabetic # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANG 10EAB..10EAC ; Alphabetic # Mn [2] YEZIDI COMBINING HAMZA MARK..YEZIDI COMBINING MADDA MARK 10EB0..10EB1 ; Alphabetic # Lo [2] YEZIDI LETTER LAM WITH DOT ABOVE..YEZIDI LETTER YOT WITH CIRCUMFLEX ABOVE 10EC2..10EC4 ; Alphabetic # Lo [3] ARABIC LETTER DAL WITH TWO DOTS VERTICALLY BELOW..ARABIC LETTER KAF WITH TWO DOTS VERTICALLY BELOW -10EFC ; Alphabetic # Mn ARABIC COMBINING ALEF OVERLAY +10EC5 ; Alphabetic # Lm ARABIC SMALL YEH BARREE WITH TWO DOTS BELOW +10EC6..10EC7 ; Alphabetic # Lo [2] ARABIC LETTER THIN NOON..ARABIC LETTER YEH WITH FOUR DOTS BELOW +10EFA..10EFC ; Alphabetic # Mn [3] ARABIC DOUBLE VERTICAL BAR BELOW..ARABIC COMBINING ALEF OVERLAY 10F00..10F1C ; Alphabetic # Lo [29] OLD SOGDIAN LETTER ALEPH..OLD SOGDIAN LETTER FINAL TAW WITH VERTICAL TAIL 10F27 ; Alphabetic # Lo OLD SOGDIAN LIGATURE AYIN-DALETH 10F30..10F45 ; Alphabetic # Lo [22] SOGDIAN LETTER ALEPH..SOGDIAN INDEPENDENT SHIN @@ -1239,6 +1241,12 @@ FFDA..FFDC ; Alphabetic # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANG 11A97 ; Alphabetic # Mc SOYOMBO SIGN VISARGA 11A9D ; Alphabetic # Lo SOYOMBO MARK PLUTA 11AB0..11AF8 ; Alphabetic # Lo [73] CANADIAN SYLLABICS NATTILIK HI..PAU CIN HAU GLOTTAL STOP FINAL +11B60 ; Alphabetic # Mn SHARADA VOWEL SIGN OE +11B61 ; Alphabetic # Mc SHARADA VOWEL SIGN OOE +11B62..11B64 ; Alphabetic # Mn [3] SHARADA VOWEL SIGN UE..SHARADA VOWEL SIGN SHORT E +11B65 ; Alphabetic # Mc SHARADA VOWEL SIGN SHORT O +11B66 ; Alphabetic # Mn SHARADA VOWEL SIGN CANDRA E +11B67 ; Alphabetic # Mc SHARADA VOWEL SIGN CANDRA O 11BC0..11BE0 ; Alphabetic # Lo [33] SUNUWAR LETTER DEVI..SUNUWAR LETTER KLOKO 11C00..11C08 ; Alphabetic # Lo [9] BHAIKSUKI LETTER A..BHAIKSUKI LETTER VOCALIC L 11C0A..11C2E ; Alphabetic # Lo [37] BHAIKSUKI LETTER E..BHAIKSUKI LETTER HA @@ -1274,6 +1282,9 @@ FFDA..FFDC ; Alphabetic # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANG 11D95 ; Alphabetic # Mn GUNJALA GONDI SIGN ANUSVARA 11D96 ; Alphabetic # Mc GUNJALA GONDI SIGN VISARGA 11D98 ; Alphabetic # Lo GUNJALA GONDI OM +11DB0..11DD8 ; Alphabetic # Lo [41] TOLONG SIKI LETTER I..TOLONG SIKI LETTER RRH +11DD9 ; Alphabetic # Lm TOLONG SIKI SIGN SELA +11DDA..11DDB ; Alphabetic # Lo [2] TOLONG SIKI SIGN HECAKA..TOLONG SIKI UNGGA 11EE0..11EF2 ; Alphabetic # Lo [19] MAKASAR LETTER KA..MAKASAR ANGKA 11EF3..11EF4 ; Alphabetic # Mn [2] MAKASAR VOWEL SIGN I..MAKASAR VOWEL SIGN U 11EF5..11EF6 ; Alphabetic # Mc [2] MAKASAR VOWEL SIGN E..MAKASAR VOWEL SIGN O @@ -1311,6 +1322,8 @@ FFDA..FFDC ; Alphabetic # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANG 16D43..16D6A ; Alphabetic # Lo [40] KIRAT RAI LETTER A..KIRAT RAI VOWEL SIGN AU 16D6B..16D6C ; Alphabetic # Lm [2] KIRAT RAI SIGN VIRAMA..KIRAT RAI SIGN SAAT 16E40..16E7F ; Alphabetic # L& [64] MEDEFAIDRIN CAPITAL LETTER M..MEDEFAIDRIN SMALL LETTER Y +16EA0..16EB8 ; Alphabetic # L& [25] BERIA ERFE CAPITAL LETTER ARKAB..BERIA ERFE CAPITAL LETTER AY +16EBB..16ED3 ; Alphabetic # L& [25] BERIA ERFE SMALL LETTER ARKAB..BERIA ERFE SMALL LETTER AY 16F00..16F4A ; Alphabetic # Lo [75] MIAO LETTER PA..MIAO LETTER RTE 16F4F ; Alphabetic # Mn MIAO SIGN CONSONANT MODIFIER BAR 16F50 ; Alphabetic # Lo MIAO LETTER NASALIZATION @@ -1320,9 +1333,11 @@ FFDA..FFDC ; Alphabetic # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANG 16FE0..16FE1 ; Alphabetic # Lm [2] TANGUT ITERATION MARK..NUSHU ITERATION MARK 16FE3 ; Alphabetic # Lm OLD CHINESE ITERATION MARK 16FF0..16FF1 ; Alphabetic # Mc [2] VIETNAMESE ALTERNATE READING MARK CA..VIETNAMESE ALTERNATE READING MARK NHAY -17000..187F7 ; Alphabetic # Lo [6136] TANGUT IDEOGRAPH-17000..TANGUT IDEOGRAPH-187F7 -18800..18CD5 ; Alphabetic # Lo [1238] TANGUT COMPONENT-001..KHITAN SMALL SCRIPT CHARACTER-18CD5 -18CFF..18D08 ; Alphabetic # Lo [10] KHITAN SMALL SCRIPT CHARACTER-18CFF..TANGUT IDEOGRAPH-18D08 +16FF2..16FF3 ; Alphabetic # Lm [2] CHINESE SMALL SIMPLIFIED ER..CHINESE SMALL TRADITIONAL ER +16FF4..16FF6 ; Alphabetic # Nl [3] YANGQIN SIGN SLOW ONE BEAT..YANGQIN SIGN SLOW TWO BEATS +17000..18CD5 ; Alphabetic # Lo [7382] TANGUT IDEOGRAPH-17000..KHITAN SMALL SCRIPT CHARACTER-18CD5 +18CFF..18D1E ; Alphabetic # Lo [32] KHITAN SMALL SCRIPT CHARACTER-18CFF..TANGUT IDEOGRAPH-18D1E +18D80..18DF2 ; Alphabetic # Lo [115] TANGUT COMPONENT-769..TANGUT COMPONENT-883 1AFF0..1AFF3 ; Alphabetic # Lm [4] KATAKANA LETTER MINNAN TONE-2..KATAKANA LETTER MINNAN TONE-5 1AFF5..1AFFB ; Alphabetic # Lm [7] KATAKANA LETTER MINNAN TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-5 1AFFD..1AFFE ; Alphabetic # Lm [2] KATAKANA LETTER MINNAN NASALIZED TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-8 @@ -1387,6 +1402,17 @@ FFDA..FFDC ; Alphabetic # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANG 1E4EB ; Alphabetic # Lm NAG MUNDARI SIGN OJOD 1E5D0..1E5ED ; Alphabetic # Lo [30] OL ONAL LETTER O..OL ONAL LETTER EG 1E5F0 ; Alphabetic # Lo OL ONAL SIGN HODDOND +1E6C0..1E6DE ; Alphabetic # Lo [31] TAI YO LETTER LOW KO..TAI YO LETTER HIGH KVO +1E6E0..1E6E2 ; Alphabetic # Lo [3] TAI YO LETTER AA..TAI YO LETTER UE +1E6E3 ; Alphabetic # Mn TAI YO SIGN UE +1E6E4..1E6E5 ; Alphabetic # Lo [2] TAI YO LETTER U..TAI YO LETTER AE +1E6E6 ; Alphabetic # Mn TAI YO SIGN AU +1E6E7..1E6ED ; Alphabetic # Lo [7] TAI YO LETTER O..TAI YO LETTER AUE +1E6EE..1E6EF ; Alphabetic # Mn [2] TAI YO SIGN AY..TAI YO SIGN ANG +1E6F0..1E6F4 ; Alphabetic # Lo [5] TAI YO LETTER AN..TAI YO LETTER AP +1E6F5 ; Alphabetic # Mn TAI YO SIGN OM +1E6FE ; Alphabetic # Lo TAI YO SYMBOL MUEANG +1E6FF ; Alphabetic # Lm TAI YO XAM LAI 1E7E0..1E7E6 ; Alphabetic # Lo [7] ETHIOPIC SYLLABLE HHYA..ETHIOPIC SYLLABLE HHYO 1E7E8..1E7EB ; Alphabetic # Lo [4] ETHIOPIC SYLLABLE GURAGE HHWA..ETHIOPIC SYLLABLE HHWE 1E7ED..1E7EE ; Alphabetic # Lo [2] ETHIOPIC SYLLABLE GURAGE MWI..ETHIOPIC SYLLABLE GURAGE MWEE @@ -1432,16 +1458,15 @@ FFDA..FFDC ; Alphabetic # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANG 1F150..1F169 ; Alphabetic # So [26] NEGATIVE CIRCLED LATIN CAPITAL LETTER A..NEGATIVE CIRCLED LATIN CAPITAL LETTER Z 1F170..1F189 ; Alphabetic # So [26] NEGATIVE SQUARED LATIN CAPITAL LETTER A..NEGATIVE SQUARED LATIN CAPITAL LETTER Z 20000..2A6DF ; Alphabetic # Lo [42720] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DF -2A700..2B739 ; Alphabetic # Lo [4154] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B739 -2B740..2B81D ; Alphabetic # Lo [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D -2B820..2CEA1 ; Alphabetic # Lo [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1 +2A700..2B81D ; Alphabetic # Lo [4382] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B81D +2B820..2CEAD ; Alphabetic # Lo [5774] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEAD 2CEB0..2EBE0 ; Alphabetic # Lo [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0 2EBF0..2EE5D ; Alphabetic # Lo [622] CJK UNIFIED IDEOGRAPH-2EBF0..CJK UNIFIED IDEOGRAPH-2EE5D 2F800..2FA1D ; Alphabetic # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D 30000..3134A ; Alphabetic # Lo [4939] CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A -31350..323AF ; Alphabetic # Lo [4192] CJK UNIFIED IDEOGRAPH-31350..CJK UNIFIED IDEOGRAPH-323AF +31350..33479 ; Alphabetic # Lo [8490] CJK UNIFIED IDEOGRAPH-31350..CJK UNIFIED IDEOGRAPH-33479 -# Total code points: 142759 +# Total code points: 147421 # ================================================ @@ -1595,7 +1620,7 @@ FFDA..FFDC ; Alphabetic # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANG 024B ; Lowercase # L& LATIN SMALL LETTER Q WITH HOOK TAIL 024D ; Lowercase # L& LATIN SMALL LETTER R WITH STROKE 024F..0293 ; Lowercase # L& [69] LATIN SMALL LETTER Y WITH STROKE..LATIN SMALL LETTER EZH WITH CURL -0295..02AF ; Lowercase # L& [27] LATIN LETTER PHARYNGEAL VOICED FRICATIVE..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL +0296..02AF ; Lowercase # L& [26] LATIN LETTER INVERTED GLOTTAL STOP..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL 02B0..02B8 ; Lowercase # Lm [9] MODIFIER LETTER SMALL H..MODIFIER LETTER SMALL Y 02C0..02C1 ; Lowercase # Lm [2] MODIFIER LETTER GLOTTAL STOP..MODIFIER LETTER REVERSED GLOTTAL STOP 02E0..02E4 ; Lowercase # Lm [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP @@ -2073,13 +2098,14 @@ A7C3 ; Lowercase # L& LATIN SMALL LETTER ANGLICANA W A7C8 ; Lowercase # L& LATIN SMALL LETTER D WITH SHORT STROKE OVERLAY A7CA ; Lowercase # L& LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY A7CD ; Lowercase # L& LATIN SMALL LETTER S WITH DIAGONAL STROKE +A7CF ; Lowercase # L& LATIN SMALL LETTER PHARYNGEAL VOICED FRICATIVE A7D1 ; Lowercase # L& LATIN SMALL LETTER CLOSED INSULAR G A7D3 ; Lowercase # L& LATIN SMALL LETTER DOUBLE THORN A7D5 ; Lowercase # L& LATIN SMALL LETTER DOUBLE WYNN A7D7 ; Lowercase # L& LATIN SMALL LETTER MIDDLE SCOTS S A7D9 ; Lowercase # L& LATIN SMALL LETTER SIGMOID S A7DB ; Lowercase # L& LATIN SMALL LETTER LAMBDA -A7F2..A7F4 ; Lowercase # Lm [3] MODIFIER LETTER CAPITAL C..MODIFIER LETTER CAPITAL Q +A7F1..A7F4 ; Lowercase # Lm [4] MODIFIER LETTER CAPITAL S..MODIFIER LETTER CAPITAL Q A7F6 ; Lowercase # L& LATIN SMALL LETTER REVERSED HALF H A7F8..A7F9 ; Lowercase # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE A7FA ; Lowercase # L& LATIN LETTER SMALL CAPITAL TURNED M @@ -2105,6 +2131,7 @@ FF41..FF5A ; Lowercase # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH L 10D70..10D85 ; Lowercase # L& [22] GARAY SMALL LETTER A..GARAY SMALL LETTER OLD NA 118C0..118DF ; Lowercase # L& [32] WARANG CITI SMALL LETTER NGAA..WARANG CITI SMALL LETTER VIYO 16E60..16E7F ; Lowercase # L& [32] MEDEFAIDRIN SMALL LETTER M..MEDEFAIDRIN SMALL LETTER Y +16EBB..16ED3 ; Lowercase # L& [25] BERIA ERFE SMALL LETTER ARKAB..BERIA ERFE SMALL LETTER AY 1D41A..1D433 ; Lowercase # L& [26] MATHEMATICAL BOLD SMALL A..MATHEMATICAL BOLD SMALL Z 1D44E..1D454 ; Lowercase # L& [7] MATHEMATICAL ITALIC SMALL A..MATHEMATICAL ITALIC SMALL G 1D456..1D467 ; Lowercase # L& [18] MATHEMATICAL ITALIC SMALL I..MATHEMATICAL ITALIC SMALL Z @@ -2139,7 +2166,7 @@ FF41..FF5A ; Lowercase # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH L 1E030..1E06D ; Lowercase # Lm [62] MODIFIER LETTER CYRILLIC SMALL A..MODIFIER LETTER CYRILLIC SMALL STRAIGHT U WITH STROKE 1E922..1E943 ; Lowercase # L& [34] ADLAM SMALL LETTER ALIF..ADLAM SMALL LETTER SHA -# Total code points: 2569 +# Total code points: 2595 # ================================================ @@ -2750,7 +2777,10 @@ A7C2 ; Uppercase # L& LATIN CAPITAL LETTER ANGLICANA W A7C4..A7C7 ; Uppercase # L& [4] LATIN CAPITAL LETTER C WITH PALATAL HOOK..LATIN CAPITAL LETTER D WITH SHORT STROKE OVERLAY A7C9 ; Uppercase # L& LATIN CAPITAL LETTER S WITH SHORT STROKE OVERLAY A7CB..A7CC ; Uppercase # L& [2] LATIN CAPITAL LETTER RAMS HORN..LATIN CAPITAL LETTER S WITH DIAGONAL STROKE +A7CE ; Uppercase # L& LATIN CAPITAL LETTER PHARYNGEAL VOICED FRICATIVE A7D0 ; Uppercase # L& LATIN CAPITAL LETTER CLOSED INSULAR G +A7D2 ; Uppercase # L& LATIN CAPITAL LETTER DOUBLE THORN +A7D4 ; Uppercase # L& LATIN CAPITAL LETTER DOUBLE WYNN A7D6 ; Uppercase # L& LATIN CAPITAL LETTER MIDDLE SCOTS S A7D8 ; Uppercase # L& LATIN CAPITAL LETTER SIGMOID S A7DA ; Uppercase # L& LATIN CAPITAL LETTER LAMBDA @@ -2767,6 +2797,7 @@ FF21..FF3A ; Uppercase # L& [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH 10D50..10D65 ; Uppercase # L& [22] GARAY CAPITAL LETTER A..GARAY CAPITAL LETTER OLD NA 118A0..118BF ; Uppercase # L& [32] WARANG CITI CAPITAL LETTER NGAA..WARANG CITI CAPITAL LETTER VIYO 16E40..16E5F ; Uppercase # L& [32] MEDEFAIDRIN CAPITAL LETTER M..MEDEFAIDRIN CAPITAL LETTER Y +16EA0..16EB8 ; Uppercase # L& [25] BERIA ERFE CAPITAL LETTER ARKAB..BERIA ERFE CAPITAL LETTER AY 1D400..1D419 ; Uppercase # L& [26] MATHEMATICAL BOLD CAPITAL A..MATHEMATICAL BOLD CAPITAL Z 1D434..1D44D ; Uppercase # L& [26] MATHEMATICAL ITALIC CAPITAL A..MATHEMATICAL ITALIC CAPITAL Z 1D468..1D481 ; Uppercase # L& [26] MATHEMATICAL BOLD ITALIC CAPITAL A..MATHEMATICAL BOLD ITALIC CAPITAL Z @@ -2803,7 +2834,7 @@ FF21..FF3A ; Uppercase # L& [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH 1F150..1F169 ; Uppercase # So [26] NEGATIVE CIRCLED LATIN CAPITAL LETTER A..NEGATIVE CIRCLED LATIN CAPITAL LETTER Z 1F170..1F189 ; Uppercase # So [26] NEGATIVE SQUARED LATIN CAPITAL LETTER A..NEGATIVE SQUARED LATIN CAPITAL LETTER Z -# Total code points: 1978 +# Total code points: 2006 # ================================================ @@ -2821,7 +2852,7 @@ FF21..FF3A ; Uppercase # L& [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH 00F8..01BA ; Cased # L& [195] LATIN SMALL LETTER O WITH STROKE..LATIN SMALL LETTER EZH WITH TAIL 01BC..01BF ; Cased # L& [4] LATIN CAPITAL LETTER TONE FIVE..LATIN LETTER WYNN 01C4..0293 ; Cased # L& [208] LATIN CAPITAL LETTER DZ WITH CARON..LATIN SMALL LETTER EZH WITH CURL -0295..02AF ; Cased # L& [27] LATIN LETTER PHARYNGEAL VOICED FRICATIVE..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL +0296..02AF ; Cased # L& [26] LATIN LETTER INVERTED GLOTTAL STOP..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL 02B0..02B8 ; Cased # Lm [9] MODIFIER LETTER SMALL H..MODIFIER LETTER SMALL Y 02C0..02C1 ; Cased # Lm [2] MODIFIER LETTER GLOTTAL STOP..MODIFIER LETTER REVERSED GLOTTAL STOP 02E0..02E4 ; Cased # Lm [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP @@ -2911,11 +2942,8 @@ A722..A76F ; Cased # L& [78] LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF..LATIN A770 ; Cased # Lm MODIFIER LETTER US A771..A787 ; Cased # L& [23] LATIN SMALL LETTER DUM..LATIN SMALL LETTER INSULAR T A78B..A78E ; Cased # L& [4] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT -A790..A7CD ; Cased # L& [62] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER S WITH DIAGONAL STROKE -A7D0..A7D1 ; Cased # L& [2] LATIN CAPITAL LETTER CLOSED INSULAR G..LATIN SMALL LETTER CLOSED INSULAR G -A7D3 ; Cased # L& LATIN SMALL LETTER DOUBLE THORN -A7D5..A7DC ; Cased # L& [8] LATIN SMALL LETTER DOUBLE WYNN..LATIN CAPITAL LETTER LAMBDA WITH STROKE -A7F2..A7F4 ; Cased # Lm [3] MODIFIER LETTER CAPITAL C..MODIFIER LETTER CAPITAL Q +A790..A7DC ; Cased # L& [77] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN CAPITAL LETTER LAMBDA WITH STROKE +A7F1..A7F4 ; Cased # Lm [4] MODIFIER LETTER CAPITAL S..MODIFIER LETTER CAPITAL Q A7F5..A7F6 ; Cased # L& [2] LATIN CAPITAL LETTER REVERSED HALF H..LATIN SMALL LETTER REVERSED HALF H A7F8..A7F9 ; Cased # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE A7FA ; Cased # L& LATIN LETTER SMALL CAPITAL TURNED M @@ -2949,6 +2977,8 @@ FF41..FF5A ; Cased # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN 10D70..10D85 ; Cased # L& [22] GARAY SMALL LETTER A..GARAY SMALL LETTER OLD NA 118A0..118DF ; Cased # L& [64] WARANG CITI CAPITAL LETTER NGAA..WARANG CITI SMALL LETTER VIYO 16E40..16E7F ; Cased # L& [64] MEDEFAIDRIN CAPITAL LETTER M..MEDEFAIDRIN SMALL LETTER Y +16EA0..16EB8 ; Cased # L& [25] BERIA ERFE CAPITAL LETTER ARKAB..BERIA ERFE CAPITAL LETTER AY +16EBB..16ED3 ; Cased # L& [25] BERIA ERFE SMALL LETTER ARKAB..BERIA ERFE SMALL LETTER AY 1D400..1D454 ; Cased # L& [85] MATHEMATICAL BOLD CAPITAL A..MATHEMATICAL ITALIC SMALL G 1D456..1D49C ; Cased # L& [71] MATHEMATICAL ITALIC SMALL I..MATHEMATICAL SCRIPT CAPITAL A 1D49E..1D49F ; Cased # L& [2] MATHEMATICAL SCRIPT CAPITAL C..MATHEMATICAL SCRIPT CAPITAL D @@ -2988,7 +3018,7 @@ FF41..FF5A ; Cased # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN 1F150..1F169 ; Cased # So [26] NEGATIVE CIRCLED LATIN CAPITAL LETTER A..NEGATIVE CIRCLED LATIN CAPITAL LETTER Z 1F170..1F189 ; Cased # So [26] NEGATIVE SQUARED LATIN CAPITAL LETTER A..NEGATIVE SQUARED LATIN CAPITAL LETTER Z -# Total code points: 4578 +# Total code points: 4632 # ================================================ @@ -3194,7 +3224,8 @@ FF41..FF5A ; Cased # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN 1AA7 ; Case_Ignorable # Lm TAI THAM SIGN MAI YAMOK 1AB0..1ABD ; Case_Ignorable # Mn [14] COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW 1ABE ; Case_Ignorable # Me COMBINING PARENTHESES OVERLAY -1ABF..1ACE ; Case_Ignorable # Mn [16] COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER INSULAR T +1ABF..1ADD ; Case_Ignorable # Mn [31] COMBINING LATIN SMALL LETTER W BELOW..COMBINING DOT-AND-RING BELOW +1AE0..1AEB ; Case_Ignorable # Mn [12] COMBINING LEFT TACK ABOVE..COMBINING DOUBLE RIGHTWARDS ARROW ABOVE 1B00..1B03 ; Case_Ignorable # Mn [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG 1B34 ; Case_Ignorable # Mn BALINESE SIGN REREKAN 1B36..1B3A ; Case_Ignorable # Mn [5] BALINESE VOWEL SIGN ULU..BALINESE VOWEL SIGN RA REPA @@ -3274,7 +3305,7 @@ A720..A721 ; Case_Ignorable # Sk [2] MODIFIER LETTER STRESS AND HIGH TONE.. A770 ; Case_Ignorable # Lm MODIFIER LETTER US A788 ; Case_Ignorable # Lm MODIFIER LETTER LOW CIRCUMFLEX ACCENT A789..A78A ; Case_Ignorable # Sk [2] MODIFIER LETTER COLON..MODIFIER LETTER SHORT EQUALS SIGN -A7F2..A7F4 ; Case_Ignorable # Lm [3] MODIFIER LETTER CAPITAL C..MODIFIER LETTER CAPITAL Q +A7F1..A7F4 ; Case_Ignorable # Lm [4] MODIFIER LETTER CAPITAL S..MODIFIER LETTER CAPITAL Q A7F8..A7F9 ; Case_Ignorable # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE A802 ; Case_Ignorable # Mn SYLOTI NAGRI SIGN DVISVARA A806 ; Case_Ignorable # Mn SYLOTI NAGRI SIGN HASANTA @@ -3350,7 +3381,8 @@ FFF9..FFFB ; Case_Ignorable # Cf [3] INTERLINEAR ANNOTATION ANCHOR..INTERLI 10D69..10D6D ; Case_Ignorable # Mn [5] GARAY VOWEL SIGN E..GARAY CONSONANT NASALIZATION MARK 10D6F ; Case_Ignorable # Lm GARAY REDUPLICATION MARK 10EAB..10EAC ; Case_Ignorable # Mn [2] YEZIDI COMBINING HAMZA MARK..YEZIDI COMBINING MADDA MARK -10EFC..10EFF ; Case_Ignorable # Mn [4] ARABIC COMBINING ALEF OVERLAY..ARABIC SMALL LOW WORD MADDA +10EC5 ; Case_Ignorable # Lm ARABIC SMALL YEH BARREE WITH TWO DOTS BELOW +10EFA..10EFF ; Case_Ignorable # Mn [6] ARABIC DOUBLE VERTICAL BAR BELOW..ARABIC SMALL LOW WORD MADDA 10F46..10F50 ; Case_Ignorable # Mn [11] SOGDIAN COMBINING DOT BELOW..SOGDIAN COMBINING STROKE BELOW 10F82..10F85 ; Case_Ignorable # Mn [4] OLD UYGHUR COMBINING DOT ABOVE..OLD UYGHUR COMBINING TWO DOTS BELOW 11001 ; Case_Ignorable # Mn BRAHMI SIGN ANUSVARA @@ -3427,6 +3459,9 @@ FFF9..FFFB ; Case_Ignorable # Cf [3] INTERLINEAR ANNOTATION ANCHOR..INTERLI 11A59..11A5B ; Case_Ignorable # Mn [3] SOYOMBO VOWEL SIGN VOCALIC R..SOYOMBO VOWEL LENGTH MARK 11A8A..11A96 ; Case_Ignorable # Mn [13] SOYOMBO FINAL CONSONANT SIGN G..SOYOMBO SIGN ANUSVARA 11A98..11A99 ; Case_Ignorable # Mn [2] SOYOMBO GEMINATION MARK..SOYOMBO SUBJOINER +11B60 ; Case_Ignorable # Mn SHARADA VOWEL SIGN OE +11B62..11B64 ; Case_Ignorable # Mn [3] SHARADA VOWEL SIGN UE..SHARADA VOWEL SIGN SHORT E +11B66 ; Case_Ignorable # Mn SHARADA VOWEL SIGN CANDRA E 11C30..11C36 ; Case_Ignorable # Mn [7] BHAIKSUKI VOWEL SIGN I..BHAIKSUKI VOWEL SIGN VOCALIC L 11C38..11C3D ; Case_Ignorable # Mn [6] BHAIKSUKI VOWEL SIGN E..BHAIKSUKI SIGN ANUSVARA 11C3F ; Case_Ignorable # Mn BHAIKSUKI SIGN VIRAMA @@ -3442,6 +3477,7 @@ FFF9..FFFB ; Case_Ignorable # Cf [3] INTERLINEAR ANNOTATION ANCHOR..INTERLI 11D90..11D91 ; Case_Ignorable # Mn [2] GUNJALA GONDI VOWEL SIGN EE..GUNJALA GONDI VOWEL SIGN AI 11D95 ; Case_Ignorable # Mn GUNJALA GONDI SIGN ANUSVARA 11D97 ; Case_Ignorable # Mn GUNJALA GONDI VIRAMA +11DD9 ; Case_Ignorable # Lm TOLONG SIKI SIGN SELA 11EF3..11EF4 ; Case_Ignorable # Mn [2] MAKASAR VOWEL SIGN I..MAKASAR VOWEL SIGN U 11F00..11F01 ; Case_Ignorable # Mn [2] KAWI SIGN CANDRABINDU..KAWI SIGN ANUSVARA 11F36..11F3A ; Case_Ignorable # Mn [5] KAWI VOWEL SIGN I..KAWI VOWEL SIGN VOCALIC R @@ -3464,6 +3500,7 @@ FFF9..FFFB ; Case_Ignorable # Cf [3] INTERLINEAR ANNOTATION ANCHOR..INTERLI 16FE0..16FE1 ; Case_Ignorable # Lm [2] TANGUT ITERATION MARK..NUSHU ITERATION MARK 16FE3 ; Case_Ignorable # Lm OLD CHINESE ITERATION MARK 16FE4 ; Case_Ignorable # Mn KHITAN SMALL SCRIPT FILLER +16FF2..16FF3 ; Case_Ignorable # Lm [2] CHINESE SMALL SIMPLIFIED ER..CHINESE SMALL TRADITIONAL ER 1AFF0..1AFF3 ; Case_Ignorable # Lm [4] KATAKANA LETTER MINNAN TONE-2..KATAKANA LETTER MINNAN TONE-5 1AFF5..1AFFB ; Case_Ignorable # Lm [7] KATAKANA LETTER MINNAN TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-5 1AFFD..1AFFE ; Case_Ignorable # Lm [2] KATAKANA LETTER MINNAN NASALIZED TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-8 @@ -3497,6 +3534,11 @@ FFF9..FFFB ; Case_Ignorable # Cf [3] INTERLINEAR ANNOTATION ANCHOR..INTERLI 1E4EB ; Case_Ignorable # Lm NAG MUNDARI SIGN OJOD 1E4EC..1E4EF ; Case_Ignorable # Mn [4] NAG MUNDARI SIGN MUHOR..NAG MUNDARI SIGN SUTUH 1E5EE..1E5EF ; Case_Ignorable # Mn [2] OL ONAL SIGN MU..OL ONAL SIGN IKIR +1E6E3 ; Case_Ignorable # Mn TAI YO SIGN UE +1E6E6 ; Case_Ignorable # Mn TAI YO SIGN AU +1E6EE..1E6EF ; Case_Ignorable # Mn [2] TAI YO SIGN AY..TAI YO SIGN ANG +1E6F5 ; Case_Ignorable # Mn TAI YO SIGN OM +1E6FF ; Case_Ignorable # Lm TAI YO XAM LAI 1E8D0..1E8D6 ; Case_Ignorable # Mn [7] MENDE KIKAKUI COMBINING NUMBER TEENS..MENDE KIKAKUI COMBINING NUMBER MILLIONS 1E944..1E94A ; Case_Ignorable # Mn [7] ADLAM ALIF LENGTHENER..ADLAM NUKTA 1E94B ; Case_Ignorable # Lm ADLAM NASALIZATION MARK @@ -3505,13 +3547,14 @@ E0001 ; Case_Ignorable # Cf LANGUAGE TAG E0020..E007F ; Case_Ignorable # Cf [96] TAG SPACE..CANCEL TAG E0100..E01EF ; Case_Ignorable # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256 -# Total code points: 2749 +# Total code points: 2794 # ================================================ # Derived Property: Changes_When_Lowercased (CWL) # Characters whose normalized forms are not stable under a toLowercase mapping. -# For more information, see D139 in Section 3.13, "Default Case Algorithms". +# For more information, see the definition of "isLowercase(X)" +# in the "Conformance" / "Default Case Algorithms" section of the core specification. # Changes_When_Lowercased(X) is true when toLowercase(toNFD(X)) != toNFD(X) 0041..005A ; Changes_When_Lowercased # L& [26] LATIN CAPITAL LETTER A..LATIN CAPITAL LETTER Z @@ -4110,7 +4153,10 @@ A7C2 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER ANGLICAN A7C4..A7C7 ; Changes_When_Lowercased # L& [4] LATIN CAPITAL LETTER C WITH PALATAL HOOK..LATIN CAPITAL LETTER D WITH SHORT STROKE OVERLAY A7C9 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER S WITH SHORT STROKE OVERLAY A7CB..A7CC ; Changes_When_Lowercased # L& [2] LATIN CAPITAL LETTER RAMS HORN..LATIN CAPITAL LETTER S WITH DIAGONAL STROKE +A7CE ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER PHARYNGEAL VOICED FRICATIVE A7D0 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER CLOSED INSULAR G +A7D2 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER DOUBLE THORN +A7D4 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER DOUBLE WYNN A7D6 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER MIDDLE SCOTS S A7D8 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER SIGMOID S A7DA ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER LAMBDA @@ -4127,15 +4173,17 @@ FF21..FF3A ; Changes_When_Lowercased # L& [26] FULLWIDTH LATIN CAPITAL LETTE 10D50..10D65 ; Changes_When_Lowercased # L& [22] GARAY CAPITAL LETTER A..GARAY CAPITAL LETTER OLD NA 118A0..118BF ; Changes_When_Lowercased # L& [32] WARANG CITI CAPITAL LETTER NGAA..WARANG CITI CAPITAL LETTER VIYO 16E40..16E5F ; Changes_When_Lowercased # L& [32] MEDEFAIDRIN CAPITAL LETTER M..MEDEFAIDRIN CAPITAL LETTER Y +16EA0..16EB8 ; Changes_When_Lowercased # L& [25] BERIA ERFE CAPITAL LETTER ARKAB..BERIA ERFE CAPITAL LETTER AY 1E900..1E921 ; Changes_When_Lowercased # L& [34] ADLAM CAPITAL LETTER ALIF..ADLAM CAPITAL LETTER SHA -# Total code points: 1460 +# Total code points: 1488 # ================================================ # Derived Property: Changes_When_Uppercased (CWU) # Characters whose normalized forms are not stable under a toUppercase mapping. -# For more information, see D140 in Section 3.13, "Default Case Algorithms". +# For more information, see the definition of "isUppercase(X)" +# in the "Conformance" / "Default Case Algorithms" section of the core specification. # Changes_When_Uppercased(X) is true when toUppercase(toNFD(X)) != toNFD(X) 0061..007A ; Changes_When_Uppercased # L& [26] LATIN SMALL LETTER A..LATIN SMALL LETTER Z @@ -4747,7 +4795,10 @@ A7C3 ; Changes_When_Uppercased # L& LATIN SMALL LETTER ANGLICANA A7C8 ; Changes_When_Uppercased # L& LATIN SMALL LETTER D WITH SHORT STROKE OVERLAY A7CA ; Changes_When_Uppercased # L& LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY A7CD ; Changes_When_Uppercased # L& LATIN SMALL LETTER S WITH DIAGONAL STROKE +A7CF ; Changes_When_Uppercased # L& LATIN SMALL LETTER PHARYNGEAL VOICED FRICATIVE A7D1 ; Changes_When_Uppercased # L& LATIN SMALL LETTER CLOSED INSULAR G +A7D3 ; Changes_When_Uppercased # L& LATIN SMALL LETTER DOUBLE THORN +A7D5 ; Changes_When_Uppercased # L& LATIN SMALL LETTER DOUBLE WYNN A7D7 ; Changes_When_Uppercased # L& LATIN SMALL LETTER MIDDLE SCOTS S A7D9 ; Changes_When_Uppercased # L& LATIN SMALL LETTER SIGMOID S A7DB ; Changes_When_Uppercased # L& LATIN SMALL LETTER LAMBDA @@ -4767,15 +4818,17 @@ FF41..FF5A ; Changes_When_Uppercased # L& [26] FULLWIDTH LATIN SMALL LETTER 10D70..10D85 ; Changes_When_Uppercased # L& [22] GARAY SMALL LETTER A..GARAY SMALL LETTER OLD NA 118C0..118DF ; Changes_When_Uppercased # L& [32] WARANG CITI SMALL LETTER NGAA..WARANG CITI SMALL LETTER VIYO 16E60..16E7F ; Changes_When_Uppercased # L& [32] MEDEFAIDRIN SMALL LETTER M..MEDEFAIDRIN SMALL LETTER Y +16EBB..16ED3 ; Changes_When_Uppercased # L& [25] BERIA ERFE SMALL LETTER ARKAB..BERIA ERFE SMALL LETTER AY 1E922..1E943 ; Changes_When_Uppercased # L& [34] ADLAM SMALL LETTER ALIF..ADLAM SMALL LETTER SHA -# Total code points: 1552 +# Total code points: 1580 # ================================================ # Derived Property: Changes_When_Titlecased (CWT) # Characters whose normalized forms are not stable under a toTitlecase mapping. -# For more information, see D141 in Section 3.13, "Default Case Algorithms". +# For more information, see the definition of "isTitlecase(X)" +# in the "Conformance" / "Default Case Algorithms" section of the core specification. # Changes_When_Titlecased(X) is true when toTitlecase(toNFD(X)) != toNFD(X) 0061..007A ; Changes_When_Titlecased # L& [26] LATIN SMALL LETTER A..LATIN SMALL LETTER Z @@ -5386,7 +5439,10 @@ A7C3 ; Changes_When_Titlecased # L& LATIN SMALL LETTER ANGLICANA A7C8 ; Changes_When_Titlecased # L& LATIN SMALL LETTER D WITH SHORT STROKE OVERLAY A7CA ; Changes_When_Titlecased # L& LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY A7CD ; Changes_When_Titlecased # L& LATIN SMALL LETTER S WITH DIAGONAL STROKE +A7CF ; Changes_When_Titlecased # L& LATIN SMALL LETTER PHARYNGEAL VOICED FRICATIVE A7D1 ; Changes_When_Titlecased # L& LATIN SMALL LETTER CLOSED INSULAR G +A7D3 ; Changes_When_Titlecased # L& LATIN SMALL LETTER DOUBLE THORN +A7D5 ; Changes_When_Titlecased # L& LATIN SMALL LETTER DOUBLE WYNN A7D7 ; Changes_When_Titlecased # L& LATIN SMALL LETTER MIDDLE SCOTS S A7D9 ; Changes_When_Titlecased # L& LATIN SMALL LETTER SIGMOID S A7DB ; Changes_When_Titlecased # L& LATIN SMALL LETTER LAMBDA @@ -5406,15 +5462,17 @@ FF41..FF5A ; Changes_When_Titlecased # L& [26] FULLWIDTH LATIN SMALL LETTER 10D70..10D85 ; Changes_When_Titlecased # L& [22] GARAY SMALL LETTER A..GARAY SMALL LETTER OLD NA 118C0..118DF ; Changes_When_Titlecased # L& [32] WARANG CITI SMALL LETTER NGAA..WARANG CITI SMALL LETTER VIYO 16E60..16E7F ; Changes_When_Titlecased # L& [32] MEDEFAIDRIN SMALL LETTER M..MEDEFAIDRIN SMALL LETTER Y +16EBB..16ED3 ; Changes_When_Titlecased # L& [25] BERIA ERFE SMALL LETTER ARKAB..BERIA ERFE SMALL LETTER AY 1E922..1E943 ; Changes_When_Titlecased # L& [34] ADLAM SMALL LETTER ALIF..ADLAM SMALL LETTER SHA -# Total code points: 1479 +# Total code points: 1507 # ================================================ # Derived Property: Changes_When_Casefolded (CWCF) # Characters whose normalized forms are not stable under case folding. -# For more information, see D142 in Section 3.13, "Default Case Algorithms". +# For more information, see the definition of "isCasefolded(X)" +# in the "Conformance" / "Default Case Algorithms" section of the core specification. # Changes_When_Casefolded(X) is true when toCasefold(toNFD(X)) != toNFD(X) 0041..005A ; Changes_When_Casefolded # L& [26] LATIN CAPITAL LETTER A..LATIN CAPITAL LETTER Z @@ -6022,7 +6080,10 @@ A7C2 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER ANGLICAN A7C4..A7C7 ; Changes_When_Casefolded # L& [4] LATIN CAPITAL LETTER C WITH PALATAL HOOK..LATIN CAPITAL LETTER D WITH SHORT STROKE OVERLAY A7C9 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER S WITH SHORT STROKE OVERLAY A7CB..A7CC ; Changes_When_Casefolded # L& [2] LATIN CAPITAL LETTER RAMS HORN..LATIN CAPITAL LETTER S WITH DIAGONAL STROKE +A7CE ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER PHARYNGEAL VOICED FRICATIVE A7D0 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER CLOSED INSULAR G +A7D2 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER DOUBLE THORN +A7D4 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER DOUBLE WYNN A7D6 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER MIDDLE SCOTS S A7D8 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER SIGMOID S A7DA ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER LAMBDA @@ -6042,15 +6103,17 @@ FF21..FF3A ; Changes_When_Casefolded # L& [26] FULLWIDTH LATIN CAPITAL LETTE 10D50..10D65 ; Changes_When_Casefolded # L& [22] GARAY CAPITAL LETTER A..GARAY CAPITAL LETTER OLD NA 118A0..118BF ; Changes_When_Casefolded # L& [32] WARANG CITI CAPITAL LETTER NGAA..WARANG CITI CAPITAL LETTER VIYO 16E40..16E5F ; Changes_When_Casefolded # L& [32] MEDEFAIDRIN CAPITAL LETTER M..MEDEFAIDRIN CAPITAL LETTER Y +16EA0..16EB8 ; Changes_When_Casefolded # L& [25] BERIA ERFE CAPITAL LETTER ARKAB..BERIA ERFE CAPITAL LETTER AY 1E900..1E921 ; Changes_When_Casefolded # L& [34] ADLAM CAPITAL LETTER ALIF..ADLAM CAPITAL LETTER SHA -# Total code points: 1533 +# Total code points: 1561 # ================================================ # Derived Property: Changes_When_Casemapped (CWCM) # Characters whose normalized forms are not stable under case mapping. -# For more information, see D143 in Section 3.13, "Default Case Algorithms". +# For more information, see the definition of "isCased(X)" +# in the "Conformance" / "Default Case Algorithms" section of the core specification. # Changes_When_Casemapped(X) is true when CWL(X), or CWT(X), or CWU(X) 0041..005A ; Changes_When_Casemapped # L& [26] LATIN CAPITAL LETTER A..LATIN CAPITAL LETTER Z @@ -6156,9 +6219,7 @@ A779..A787 ; Changes_When_Casemapped # L& [15] LATIN CAPITAL LETTER INSULAR A78B..A78D ; Changes_When_Casemapped # L& [3] LATIN CAPITAL LETTER SALTILLO..LATIN CAPITAL LETTER TURNED H A790..A794 ; Changes_When_Casemapped # L& [5] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER C WITH PALATAL HOOK A796..A7AE ; Changes_When_Casemapped # L& [25] LATIN CAPITAL LETTER B WITH FLOURISH..LATIN CAPITAL LETTER SMALL CAPITAL I -A7B0..A7CD ; Changes_When_Casemapped # L& [30] LATIN CAPITAL LETTER TURNED K..LATIN SMALL LETTER S WITH DIAGONAL STROKE -A7D0..A7D1 ; Changes_When_Casemapped # L& [2] LATIN CAPITAL LETTER CLOSED INSULAR G..LATIN SMALL LETTER CLOSED INSULAR G -A7D6..A7DC ; Changes_When_Casemapped # L& [7] LATIN CAPITAL LETTER MIDDLE SCOTS S..LATIN CAPITAL LETTER LAMBDA WITH STROKE +A7B0..A7DC ; Changes_When_Casemapped # L& [45] LATIN CAPITAL LETTER TURNED K..LATIN CAPITAL LETTER LAMBDA WITH STROKE A7F5..A7F6 ; Changes_When_Casemapped # L& [2] LATIN CAPITAL LETTER REVERSED HALF H..LATIN SMALL LETTER REVERSED HALF H AB53 ; Changes_When_Casemapped # L& LATIN SMALL LETTER CHI AB70..ABBF ; Changes_When_Casemapped # L& [80] CHEROKEE SMALL LETTER A..CHEROKEE SMALL LETTER YA @@ -6183,9 +6244,11 @@ FF41..FF5A ; Changes_When_Casemapped # L& [26] FULLWIDTH LATIN SMALL LETTER 10D70..10D85 ; Changes_When_Casemapped # L& [22] GARAY SMALL LETTER A..GARAY SMALL LETTER OLD NA 118A0..118DF ; Changes_When_Casemapped # L& [64] WARANG CITI CAPITAL LETTER NGAA..WARANG CITI SMALL LETTER VIYO 16E40..16E7F ; Changes_When_Casemapped # L& [64] MEDEFAIDRIN CAPITAL LETTER M..MEDEFAIDRIN SMALL LETTER Y +16EA0..16EB8 ; Changes_When_Casemapped # L& [25] BERIA ERFE CAPITAL LETTER ARKAB..BERIA ERFE CAPITAL LETTER AY +16EBB..16ED3 ; Changes_When_Casemapped # L& [25] BERIA ERFE SMALL LETTER ARKAB..BERIA ERFE SMALL LETTER AY 1E900..1E943 ; Changes_When_Casemapped # L& [68] ADLAM CAPITAL LETTER ALIF..ADLAM SMALL LETTER SHA -# Total code points: 2981 +# Total code points: 3037 # ================================================ @@ -6210,8 +6273,8 @@ FF41..FF5A ; Changes_When_Casemapped # L& [26] FULLWIDTH LATIN SMALL LETTER 01BC..01BF ; ID_Start # L& [4] LATIN CAPITAL LETTER TONE FIVE..LATIN LETTER WYNN 01C0..01C3 ; ID_Start # Lo [4] LATIN LETTER DENTAL CLICK..LATIN LETTER RETROFLEX CLICK 01C4..0293 ; ID_Start # L& [208] LATIN CAPITAL LETTER DZ WITH CARON..LATIN SMALL LETTER EZH WITH CURL -0294 ; ID_Start # Lo LATIN LETTER GLOTTAL STOP -0295..02AF ; ID_Start # L& [27] LATIN LETTER PHARYNGEAL VOICED FRICATIVE..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL +0294..0295 ; ID_Start # Lo [2] LATIN LETTER GLOTTAL STOP..LATIN LETTER PHARYNGEAL VOICED FRICATIVE +0296..02AF ; ID_Start # L& [26] LATIN LETTER INVERTED GLOTTAL STOP..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL 02B0..02C1 ; ID_Start # Lm [18] MODIFIER LETTER SMALL H..MODIFIER LETTER REVERSED GLOTTAL STOP 02C6..02D1 ; ID_Start # Lm [12] MODIFIER LETTER CIRCUMFLEX ACCENT..MODIFIER LETTER HALF TRIANGULAR COLON 02E0..02E4 ; ID_Start # Lm [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP @@ -6259,7 +6322,7 @@ FF41..FF5A ; Changes_When_Casemapped # L& [26] FULLWIDTH LATIN SMALL LETTER 0840..0858 ; ID_Start # Lo [25] MANDAIC LETTER HALQA..MANDAIC LETTER AIN 0860..086A ; ID_Start # Lo [11] SYRIAC LETTER MALAYALAM NGA..SYRIAC LETTER MALAYALAM SSA 0870..0887 ; ID_Start # Lo [24] ARABIC LETTER ALEF WITH ATTACHED FATHA..ARABIC BASELINE ROUND DOT -0889..088E ; ID_Start # Lo [6] ARABIC LETTER NOON WITH INVERTED SMALL V..ARABIC VERTICAL TAIL +0889..088F ; ID_Start # Lo [7] ARABIC LETTER NOON WITH INVERTED SMALL V..ARABIC LETTER NOON WITH RING ABOVE 08A0..08C8 ; ID_Start # Lo [41] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER GRAF 08C9 ; ID_Start # Lm ARABIC SMALL FARSI YEH 0904..0939 ; ID_Start # Lo [54] DEVANAGARI LETTER SHORT A..DEVANAGARI LETTER HA @@ -6327,7 +6390,7 @@ FF41..FF5A ; Changes_When_Casemapped # L& [26] FULLWIDTH LATIN SMALL LETTER 0C2A..0C39 ; ID_Start # Lo [16] TELUGU LETTER PA..TELUGU LETTER HA 0C3D ; ID_Start # Lo TELUGU SIGN AVAGRAHA 0C58..0C5A ; ID_Start # Lo [3] TELUGU LETTER TSA..TELUGU LETTER RRRA -0C5D ; ID_Start # Lo TELUGU LETTER NAKAARA POLLU +0C5C..0C5D ; ID_Start # Lo [2] TELUGU ARCHAIC SHRII..TELUGU LETTER NAKAARA POLLU 0C60..0C61 ; ID_Start # Lo [2] TELUGU LETTER VOCALIC RR..TELUGU LETTER VOCALIC LL 0C80 ; ID_Start # Lo KANNADA SIGN SPACING CANDRABINDU 0C85..0C8C ; ID_Start # Lo [8] KANNADA LETTER A..KANNADA LETTER VOCALIC L @@ -6336,7 +6399,7 @@ FF41..FF5A ; Changes_When_Casemapped # L& [26] FULLWIDTH LATIN SMALL LETTER 0CAA..0CB3 ; ID_Start # Lo [10] KANNADA LETTER PA..KANNADA LETTER LLA 0CB5..0CB9 ; ID_Start # Lo [5] KANNADA LETTER VA..KANNADA LETTER HA 0CBD ; ID_Start # Lo KANNADA SIGN AVAGRAHA -0CDD..0CDE ; ID_Start # Lo [2] KANNADA LETTER NAKAARA POLLU..KANNADA LETTER FA +0CDC..0CDE ; ID_Start # Lo [3] KANNADA ARCHAIC SHRII..KANNADA LETTER FA 0CE0..0CE1 ; ID_Start # Lo [2] KANNADA LETTER VOCALIC RR..KANNADA LETTER VOCALIC LL 0CF1..0CF2 ; ID_Start # Lo [2] KANNADA SIGN JIHVAMULIYA..KANNADA SIGN UPADHMANIYA 0D04..0D0C ; ID_Start # Lo [9] MALAYALAM LETTER VEDIC ANUSVARA..MALAYALAM LETTER VOCALIC L @@ -6561,11 +6624,8 @@ A771..A787 ; ID_Start # L& [23] LATIN SMALL LETTER DUM..LATIN SMALL LETTER I A788 ; ID_Start # Lm MODIFIER LETTER LOW CIRCUMFLEX ACCENT A78B..A78E ; ID_Start # L& [4] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT A78F ; ID_Start # Lo LATIN LETTER SINOLOGICAL DOT -A790..A7CD ; ID_Start # L& [62] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER S WITH DIAGONAL STROKE -A7D0..A7D1 ; ID_Start # L& [2] LATIN CAPITAL LETTER CLOSED INSULAR G..LATIN SMALL LETTER CLOSED INSULAR G -A7D3 ; ID_Start # L& LATIN SMALL LETTER DOUBLE THORN -A7D5..A7DC ; ID_Start # L& [8] LATIN SMALL LETTER DOUBLE WYNN..LATIN CAPITAL LETTER LAMBDA WITH STROKE -A7F2..A7F4 ; ID_Start # Lm [3] MODIFIER LETTER CAPITAL C..MODIFIER LETTER CAPITAL Q +A790..A7DC ; ID_Start # L& [77] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN CAPITAL LETTER LAMBDA WITH STROKE +A7F1..A7F4 ; ID_Start # Lm [4] MODIFIER LETTER CAPITAL S..MODIFIER LETTER CAPITAL Q A7F5..A7F6 ; ID_Start # L& [2] LATIN CAPITAL LETTER REVERSED HALF H..LATIN SMALL LETTER REVERSED HALF H A7F7 ; ID_Start # Lo LATIN EPIGRAPHIC LETTER SIDEWAYS I A7F8..A7F9 ; ID_Start # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE @@ -6702,6 +6762,7 @@ FFDA..FFDC ; ID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL 108F4..108F5 ; ID_Start # Lo [2] HATRAN LETTER SHIN..HATRAN LETTER TAW 10900..10915 ; ID_Start # Lo [22] PHOENICIAN LETTER ALF..PHOENICIAN LETTER TAU 10920..10939 ; ID_Start # Lo [26] LYDIAN LETTER A..LYDIAN LETTER C +10940..10959 ; ID_Start # Lo [26] SIDETIC LETTER N01..SIDETIC LETTER N26 10980..109B7 ; ID_Start # Lo [56] MEROITIC HIEROGLYPHIC LETTER A..MEROITIC CURSIVE LETTER DA 109BE..109BF ; ID_Start # Lo [2] MEROITIC CURSIVE LOGOGRAM RMT..MEROITIC CURSIVE LOGOGRAM IMN 10A00 ; ID_Start # Lo KHAROSHTHI LETTER A @@ -6729,6 +6790,8 @@ FFDA..FFDC ; ID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL 10E80..10EA9 ; ID_Start # Lo [42] YEZIDI LETTER ELIF..YEZIDI LETTER ET 10EB0..10EB1 ; ID_Start # Lo [2] YEZIDI LETTER LAM WITH DOT ABOVE..YEZIDI LETTER YOT WITH CIRCUMFLEX ABOVE 10EC2..10EC4 ; ID_Start # Lo [3] ARABIC LETTER DAL WITH TWO DOTS VERTICALLY BELOW..ARABIC LETTER KAF WITH TWO DOTS VERTICALLY BELOW +10EC5 ; ID_Start # Lm ARABIC SMALL YEH BARREE WITH TWO DOTS BELOW +10EC6..10EC7 ; ID_Start # Lo [2] ARABIC LETTER THIN NOON..ARABIC LETTER YEH WITH FOUR DOTS BELOW 10F00..10F1C ; ID_Start # Lo [29] OLD SOGDIAN LETTER ALEPH..OLD SOGDIAN LETTER FINAL TAW WITH VERTICAL TAIL 10F27 ; ID_Start # Lo OLD SOGDIAN LIGATURE AYIN-DALETH 10F30..10F45 ; ID_Start # Lo [22] SOGDIAN LETTER ALEPH..SOGDIAN INDEPENDENT SHIN @@ -6821,6 +6884,9 @@ FFDA..FFDC ; ID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL 11D67..11D68 ; ID_Start # Lo [2] GUNJALA GONDI LETTER EE..GUNJALA GONDI LETTER AI 11D6A..11D89 ; ID_Start # Lo [32] GUNJALA GONDI LETTER OO..GUNJALA GONDI LETTER SA 11D98 ; ID_Start # Lo GUNJALA GONDI OM +11DB0..11DD8 ; ID_Start # Lo [41] TOLONG SIKI LETTER I..TOLONG SIKI LETTER RRH +11DD9 ; ID_Start # Lm TOLONG SIKI SIGN SELA +11DDA..11DDB ; ID_Start # Lo [2] TOLONG SIKI SIGN HECAKA..TOLONG SIKI UNGGA 11EE0..11EF2 ; ID_Start # Lo [19] MAKASAR LETTER KA..MAKASAR ANGKA 11F02 ; ID_Start # Lo KAWI SIGN REPHA 11F04..11F10 ; ID_Start # Lo [13] KAWI LETTER A..KAWI LETTER O @@ -6847,14 +6913,18 @@ FFDA..FFDC ; ID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL 16D43..16D6A ; ID_Start # Lo [40] KIRAT RAI LETTER A..KIRAT RAI VOWEL SIGN AU 16D6B..16D6C ; ID_Start # Lm [2] KIRAT RAI SIGN VIRAMA..KIRAT RAI SIGN SAAT 16E40..16E7F ; ID_Start # L& [64] MEDEFAIDRIN CAPITAL LETTER M..MEDEFAIDRIN SMALL LETTER Y +16EA0..16EB8 ; ID_Start # L& [25] BERIA ERFE CAPITAL LETTER ARKAB..BERIA ERFE CAPITAL LETTER AY +16EBB..16ED3 ; ID_Start # L& [25] BERIA ERFE SMALL LETTER ARKAB..BERIA ERFE SMALL LETTER AY 16F00..16F4A ; ID_Start # Lo [75] MIAO LETTER PA..MIAO LETTER RTE 16F50 ; ID_Start # Lo MIAO LETTER NASALIZATION 16F93..16F9F ; ID_Start # Lm [13] MIAO LETTER TONE-2..MIAO LETTER REFORMED TONE-8 16FE0..16FE1 ; ID_Start # Lm [2] TANGUT ITERATION MARK..NUSHU ITERATION MARK 16FE3 ; ID_Start # Lm OLD CHINESE ITERATION MARK -17000..187F7 ; ID_Start # Lo [6136] TANGUT IDEOGRAPH-17000..TANGUT IDEOGRAPH-187F7 -18800..18CD5 ; ID_Start # Lo [1238] TANGUT COMPONENT-001..KHITAN SMALL SCRIPT CHARACTER-18CD5 -18CFF..18D08 ; ID_Start # Lo [10] KHITAN SMALL SCRIPT CHARACTER-18CFF..TANGUT IDEOGRAPH-18D08 +16FF2..16FF3 ; ID_Start # Lm [2] CHINESE SMALL SIMPLIFIED ER..CHINESE SMALL TRADITIONAL ER +16FF4..16FF6 ; ID_Start # Nl [3] YANGQIN SIGN SLOW ONE BEAT..YANGQIN SIGN SLOW TWO BEATS +17000..18CD5 ; ID_Start # Lo [7382] TANGUT IDEOGRAPH-17000..KHITAN SMALL SCRIPT CHARACTER-18CD5 +18CFF..18D1E ; ID_Start # Lo [32] KHITAN SMALL SCRIPT CHARACTER-18CFF..TANGUT IDEOGRAPH-18D1E +18D80..18DF2 ; ID_Start # Lo [115] TANGUT COMPONENT-769..TANGUT COMPONENT-883 1AFF0..1AFF3 ; ID_Start # Lm [4] KATAKANA LETTER MINNAN TONE-2..KATAKANA LETTER MINNAN TONE-5 1AFF5..1AFFB ; ID_Start # Lm [7] KATAKANA LETTER MINNAN TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-5 1AFFD..1AFFE ; ID_Start # Lm [2] KATAKANA LETTER MINNAN NASALIZED TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-8 @@ -6912,6 +6982,13 @@ FFDA..FFDC ; ID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL 1E4EB ; ID_Start # Lm NAG MUNDARI SIGN OJOD 1E5D0..1E5ED ; ID_Start # Lo [30] OL ONAL LETTER O..OL ONAL LETTER EG 1E5F0 ; ID_Start # Lo OL ONAL SIGN HODDOND +1E6C0..1E6DE ; ID_Start # Lo [31] TAI YO LETTER LOW KO..TAI YO LETTER HIGH KVO +1E6E0..1E6E2 ; ID_Start # Lo [3] TAI YO LETTER AA..TAI YO LETTER UE +1E6E4..1E6E5 ; ID_Start # Lo [2] TAI YO LETTER U..TAI YO LETTER AE +1E6E7..1E6ED ; ID_Start # Lo [7] TAI YO LETTER O..TAI YO LETTER AUE +1E6F0..1E6F4 ; ID_Start # Lo [5] TAI YO LETTER AN..TAI YO LETTER AP +1E6FE ; ID_Start # Lo TAI YO SYMBOL MUEANG +1E6FF ; ID_Start # Lm TAI YO XAM LAI 1E7E0..1E7E6 ; ID_Start # Lo [7] ETHIOPIC SYLLABLE HHYA..ETHIOPIC SYLLABLE HHYO 1E7E8..1E7EB ; ID_Start # Lo [4] ETHIOPIC SYLLABLE GURAGE HHWA..ETHIOPIC SYLLABLE HHWE 1E7ED..1E7EE ; ID_Start # Lo [2] ETHIOPIC SYLLABLE GURAGE MWI..ETHIOPIC SYLLABLE GURAGE MWEE @@ -6953,16 +7030,15 @@ FFDA..FFDC ; ID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL 1EEA5..1EEA9 ; ID_Start # Lo [5] ARABIC MATHEMATICAL DOUBLE-STRUCK WAW..ARABIC MATHEMATICAL DOUBLE-STRUCK YEH 1EEAB..1EEBB ; ID_Start # Lo [17] ARABIC MATHEMATICAL DOUBLE-STRUCK LAM..ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN 20000..2A6DF ; ID_Start # Lo [42720] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DF -2A700..2B739 ; ID_Start # Lo [4154] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B739 -2B740..2B81D ; ID_Start # Lo [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D -2B820..2CEA1 ; ID_Start # Lo [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1 +2A700..2B81D ; ID_Start # Lo [4382] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B81D +2B820..2CEAD ; ID_Start # Lo [5774] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEAD 2CEB0..2EBE0 ; ID_Start # Lo [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0 2EBF0..2EE5D ; ID_Start # Lo [622] CJK UNIFIED IDEOGRAPH-2EBF0..CJK UNIFIED IDEOGRAPH-2EE5D 2F800..2FA1D ; ID_Start # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D 30000..3134A ; ID_Start # Lo [4939] CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A -31350..323AF ; ID_Start # Lo [4192] CJK UNIFIED IDEOGRAPH-31350..CJK UNIFIED IDEOGRAPH-323AF +31350..33479 ; ID_Start # Lo [8490] CJK UNIFIED IDEOGRAPH-31350..CJK UNIFIED IDEOGRAPH-33479 -# Total code points: 141269 +# Total code points: 145916 # ================================================ @@ -6991,8 +7067,8 @@ FFDA..FFDC ; ID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL 01BC..01BF ; ID_Continue # L& [4] LATIN CAPITAL LETTER TONE FIVE..LATIN LETTER WYNN 01C0..01C3 ; ID_Continue # Lo [4] LATIN LETTER DENTAL CLICK..LATIN LETTER RETROFLEX CLICK 01C4..0293 ; ID_Continue # L& [208] LATIN CAPITAL LETTER DZ WITH CARON..LATIN SMALL LETTER EZH WITH CURL -0294 ; ID_Continue # Lo LATIN LETTER GLOTTAL STOP -0295..02AF ; ID_Continue # L& [27] LATIN LETTER PHARYNGEAL VOICED FRICATIVE..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL +0294..0295 ; ID_Continue # Lo [2] LATIN LETTER GLOTTAL STOP..LATIN LETTER PHARYNGEAL VOICED FRICATIVE +0296..02AF ; ID_Continue # L& [26] LATIN LETTER INVERTED GLOTTAL STOP..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL 02B0..02C1 ; ID_Continue # Lm [18] MODIFIER LETTER SMALL H..MODIFIER LETTER REVERSED GLOTTAL STOP 02C6..02D1 ; ID_Continue # Lm [12] MODIFIER LETTER CIRCUMFLEX ACCENT..MODIFIER LETTER HALF TRIANGULAR COLON 02E0..02E4 ; ID_Continue # Lm [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP @@ -7068,7 +7144,7 @@ FFDA..FFDC ; ID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL 0859..085B ; ID_Continue # Mn [3] MANDAIC AFFRICATION MARK..MANDAIC GEMINATION MARK 0860..086A ; ID_Continue # Lo [11] SYRIAC LETTER MALAYALAM NGA..SYRIAC LETTER MALAYALAM SSA 0870..0887 ; ID_Continue # Lo [24] ARABIC LETTER ALEF WITH ATTACHED FATHA..ARABIC BASELINE ROUND DOT -0889..088E ; ID_Continue # Lo [6] ARABIC LETTER NOON WITH INVERTED SMALL V..ARABIC VERTICAL TAIL +0889..088F ; ID_Continue # Lo [7] ARABIC LETTER NOON WITH INVERTED SMALL V..ARABIC LETTER NOON WITH RING ABOVE 0897..089F ; ID_Continue # Mn [9] ARABIC PEPET..ARABIC HALF MADDA OVER MADDA 08A0..08C8 ; ID_Continue # Lo [41] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER GRAF 08C9 ; ID_Continue # Lm ARABIC SMALL FARSI YEH @@ -7218,7 +7294,7 @@ FFDA..FFDC ; ID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL 0C4A..0C4D ; ID_Continue # Mn [4] TELUGU VOWEL SIGN O..TELUGU SIGN VIRAMA 0C55..0C56 ; ID_Continue # Mn [2] TELUGU LENGTH MARK..TELUGU AI LENGTH MARK 0C58..0C5A ; ID_Continue # Lo [3] TELUGU LETTER TSA..TELUGU LETTER RRRA -0C5D ; ID_Continue # Lo TELUGU LETTER NAKAARA POLLU +0C5C..0C5D ; ID_Continue # Lo [2] TELUGU ARCHAIC SHRII..TELUGU LETTER NAKAARA POLLU 0C60..0C61 ; ID_Continue # Lo [2] TELUGU LETTER VOCALIC RR..TELUGU LETTER VOCALIC LL 0C62..0C63 ; ID_Continue # Mn [2] TELUGU VOWEL SIGN VOCALIC L..TELUGU VOWEL SIGN VOCALIC LL 0C66..0C6F ; ID_Continue # Nd [10] TELUGU DIGIT ZERO..TELUGU DIGIT NINE @@ -7240,7 +7316,7 @@ FFDA..FFDC ; ID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL 0CCA..0CCB ; ID_Continue # Mc [2] KANNADA VOWEL SIGN O..KANNADA VOWEL SIGN OO 0CCC..0CCD ; ID_Continue # Mn [2] KANNADA VOWEL SIGN AU..KANNADA SIGN VIRAMA 0CD5..0CD6 ; ID_Continue # Mc [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK -0CDD..0CDE ; ID_Continue # Lo [2] KANNADA LETTER NAKAARA POLLU..KANNADA LETTER FA +0CDC..0CDE ; ID_Continue # Lo [3] KANNADA ARCHAIC SHRII..KANNADA LETTER FA 0CE0..0CE1 ; ID_Continue # Lo [2] KANNADA LETTER VOCALIC RR..KANNADA LETTER VOCALIC LL 0CE2..0CE3 ; ID_Continue # Mn [2] KANNADA VOWEL SIGN VOCALIC L..KANNADA VOWEL SIGN VOCALIC LL 0CE6..0CEF ; ID_Continue # Nd [10] KANNADA DIGIT ZERO..KANNADA DIGIT NINE @@ -7457,7 +7533,8 @@ FFDA..FFDC ; ID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL 1A90..1A99 ; ID_Continue # Nd [10] TAI THAM THAM DIGIT ZERO..TAI THAM THAM DIGIT NINE 1AA7 ; ID_Continue # Lm TAI THAM SIGN MAI YAMOK 1AB0..1ABD ; ID_Continue # Mn [14] COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW -1ABF..1ACE ; ID_Continue # Mn [16] COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER INSULAR T +1ABF..1ADD ; ID_Continue # Mn [31] COMBINING LATIN SMALL LETTER W BELOW..COMBINING DOT-AND-RING BELOW +1AE0..1AEB ; ID_Continue # Mn [12] COMBINING LEFT TACK ABOVE..COMBINING DOUBLE RIGHTWARDS ARROW ABOVE 1B00..1B03 ; ID_Continue # Mn [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG 1B04 ; ID_Continue # Mc BALINESE SIGN BISAH 1B05..1B33 ; ID_Continue # Lo [47] BALINESE LETTER AKARA..BALINESE LETTER HA @@ -7646,11 +7723,8 @@ A771..A787 ; ID_Continue # L& [23] LATIN SMALL LETTER DUM..LATIN SMALL LETTE A788 ; ID_Continue # Lm MODIFIER LETTER LOW CIRCUMFLEX ACCENT A78B..A78E ; ID_Continue # L& [4] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT A78F ; ID_Continue # Lo LATIN LETTER SINOLOGICAL DOT -A790..A7CD ; ID_Continue # L& [62] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER S WITH DIAGONAL STROKE -A7D0..A7D1 ; ID_Continue # L& [2] LATIN CAPITAL LETTER CLOSED INSULAR G..LATIN SMALL LETTER CLOSED INSULAR G -A7D3 ; ID_Continue # L& LATIN SMALL LETTER DOUBLE THORN -A7D5..A7DC ; ID_Continue # L& [8] LATIN SMALL LETTER DOUBLE WYNN..LATIN CAPITAL LETTER LAMBDA WITH STROKE -A7F2..A7F4 ; ID_Continue # Lm [3] MODIFIER LETTER CAPITAL C..MODIFIER LETTER CAPITAL Q +A790..A7DC ; ID_Continue # L& [77] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN CAPITAL LETTER LAMBDA WITH STROKE +A7F1..A7F4 ; ID_Continue # Lm [4] MODIFIER LETTER CAPITAL S..MODIFIER LETTER CAPITAL Q A7F5..A7F6 ; ID_Continue # L& [2] LATIN CAPITAL LETTER REVERSED HALF H..LATIN SMALL LETTER REVERSED HALF H A7F7 ; ID_Continue # Lo LATIN EPIGRAPHIC LETTER SIDEWAYS I A7F8..A7F9 ; ID_Continue # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE @@ -7857,6 +7931,7 @@ FFDA..FFDC ; ID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HAN 108F4..108F5 ; ID_Continue # Lo [2] HATRAN LETTER SHIN..HATRAN LETTER TAW 10900..10915 ; ID_Continue # Lo [22] PHOENICIAN LETTER ALF..PHOENICIAN LETTER TAU 10920..10939 ; ID_Continue # Lo [26] LYDIAN LETTER A..LYDIAN LETTER C +10940..10959 ; ID_Continue # Lo [26] SIDETIC LETTER N01..SIDETIC LETTER N26 10980..109B7 ; ID_Continue # Lo [56] MEROITIC HIEROGLYPHIC LETTER A..MEROITIC CURSIVE LETTER DA 109BE..109BF ; ID_Continue # Lo [2] MEROITIC CURSIVE LOGOGRAM RMT..MEROITIC CURSIVE LOGOGRAM IMN 10A00 ; ID_Continue # Lo KHAROSHTHI LETTER A @@ -7895,7 +7970,9 @@ FFDA..FFDC ; ID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HAN 10EAB..10EAC ; ID_Continue # Mn [2] YEZIDI COMBINING HAMZA MARK..YEZIDI COMBINING MADDA MARK 10EB0..10EB1 ; ID_Continue # Lo [2] YEZIDI LETTER LAM WITH DOT ABOVE..YEZIDI LETTER YOT WITH CIRCUMFLEX ABOVE 10EC2..10EC4 ; ID_Continue # Lo [3] ARABIC LETTER DAL WITH TWO DOTS VERTICALLY BELOW..ARABIC LETTER KAF WITH TWO DOTS VERTICALLY BELOW -10EFC..10EFF ; ID_Continue # Mn [4] ARABIC COMBINING ALEF OVERLAY..ARABIC SMALL LOW WORD MADDA +10EC5 ; ID_Continue # Lm ARABIC SMALL YEH BARREE WITH TWO DOTS BELOW +10EC6..10EC7 ; ID_Continue # Lo [2] ARABIC LETTER THIN NOON..ARABIC LETTER YEH WITH FOUR DOTS BELOW +10EFA..10EFF ; ID_Continue # Mn [6] ARABIC DOUBLE VERTICAL BAR BELOW..ARABIC SMALL LOW WORD MADDA 10F00..10F1C ; ID_Continue # Lo [29] OLD SOGDIAN LETTER ALEPH..OLD SOGDIAN LETTER FINAL TAW WITH VERTICAL TAIL 10F27 ; ID_Continue # Lo OLD SOGDIAN LIGATURE AYIN-DALETH 10F30..10F45 ; ID_Continue # Lo [22] SOGDIAN LETTER ALEPH..SOGDIAN INDEPENDENT SHIN @@ -8122,6 +8199,12 @@ FFDA..FFDC ; ID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HAN 11A98..11A99 ; ID_Continue # Mn [2] SOYOMBO GEMINATION MARK..SOYOMBO SUBJOINER 11A9D ; ID_Continue # Lo SOYOMBO MARK PLUTA 11AB0..11AF8 ; ID_Continue # Lo [73] CANADIAN SYLLABICS NATTILIK HI..PAU CIN HAU GLOTTAL STOP FINAL +11B60 ; ID_Continue # Mn SHARADA VOWEL SIGN OE +11B61 ; ID_Continue # Mc SHARADA VOWEL SIGN OOE +11B62..11B64 ; ID_Continue # Mn [3] SHARADA VOWEL SIGN UE..SHARADA VOWEL SIGN SHORT E +11B65 ; ID_Continue # Mc SHARADA VOWEL SIGN SHORT O +11B66 ; ID_Continue # Mn SHARADA VOWEL SIGN CANDRA E +11B67 ; ID_Continue # Mc SHARADA VOWEL SIGN CANDRA O 11BC0..11BE0 ; ID_Continue # Lo [33] SUNUWAR LETTER DEVI..SUNUWAR LETTER KLOKO 11BF0..11BF9 ; ID_Continue # Nd [10] SUNUWAR DIGIT ZERO..SUNUWAR DIGIT NINE 11C00..11C08 ; ID_Continue # Lo [9] BHAIKSUKI LETTER A..BHAIKSUKI LETTER VOCALIC L @@ -8162,6 +8245,10 @@ FFDA..FFDC ; ID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HAN 11D97 ; ID_Continue # Mn GUNJALA GONDI VIRAMA 11D98 ; ID_Continue # Lo GUNJALA GONDI OM 11DA0..11DA9 ; ID_Continue # Nd [10] GUNJALA GONDI DIGIT ZERO..GUNJALA GONDI DIGIT NINE +11DB0..11DD8 ; ID_Continue # Lo [41] TOLONG SIKI LETTER I..TOLONG SIKI LETTER RRH +11DD9 ; ID_Continue # Lm TOLONG SIKI SIGN SELA +11DDA..11DDB ; ID_Continue # Lo [2] TOLONG SIKI SIGN HECAKA..TOLONG SIKI UNGGA +11DE0..11DE9 ; ID_Continue # Nd [10] TOLONG SIKI DIGIT ZERO..TOLONG SIKI DIGIT NINE 11EE0..11EF2 ; ID_Continue # Lo [19] MAKASAR LETTER KA..MAKASAR ANGKA 11EF3..11EF4 ; ID_Continue # Mn [2] MAKASAR VOWEL SIGN I..MAKASAR VOWEL SIGN U 11EF5..11EF6 ; ID_Continue # Mc [2] MAKASAR VOWEL SIGN E..MAKASAR VOWEL SIGN O @@ -8212,6 +8299,8 @@ FFDA..FFDC ; ID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HAN 16D6B..16D6C ; ID_Continue # Lm [2] KIRAT RAI SIGN VIRAMA..KIRAT RAI SIGN SAAT 16D70..16D79 ; ID_Continue # Nd [10] KIRAT RAI DIGIT ZERO..KIRAT RAI DIGIT NINE 16E40..16E7F ; ID_Continue # L& [64] MEDEFAIDRIN CAPITAL LETTER M..MEDEFAIDRIN SMALL LETTER Y +16EA0..16EB8 ; ID_Continue # L& [25] BERIA ERFE CAPITAL LETTER ARKAB..BERIA ERFE CAPITAL LETTER AY +16EBB..16ED3 ; ID_Continue # L& [25] BERIA ERFE SMALL LETTER ARKAB..BERIA ERFE SMALL LETTER AY 16F00..16F4A ; ID_Continue # Lo [75] MIAO LETTER PA..MIAO LETTER RTE 16F4F ; ID_Continue # Mn MIAO SIGN CONSONANT MODIFIER BAR 16F50 ; ID_Continue # Lo MIAO LETTER NASALIZATION @@ -8222,9 +8311,11 @@ FFDA..FFDC ; ID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HAN 16FE3 ; ID_Continue # Lm OLD CHINESE ITERATION MARK 16FE4 ; ID_Continue # Mn KHITAN SMALL SCRIPT FILLER 16FF0..16FF1 ; ID_Continue # Mc [2] VIETNAMESE ALTERNATE READING MARK CA..VIETNAMESE ALTERNATE READING MARK NHAY -17000..187F7 ; ID_Continue # Lo [6136] TANGUT IDEOGRAPH-17000..TANGUT IDEOGRAPH-187F7 -18800..18CD5 ; ID_Continue # Lo [1238] TANGUT COMPONENT-001..KHITAN SMALL SCRIPT CHARACTER-18CD5 -18CFF..18D08 ; ID_Continue # Lo [10] KHITAN SMALL SCRIPT CHARACTER-18CFF..TANGUT IDEOGRAPH-18D08 +16FF2..16FF3 ; ID_Continue # Lm [2] CHINESE SMALL SIMPLIFIED ER..CHINESE SMALL TRADITIONAL ER +16FF4..16FF6 ; ID_Continue # Nl [3] YANGQIN SIGN SLOW ONE BEAT..YANGQIN SIGN SLOW TWO BEATS +17000..18CD5 ; ID_Continue # Lo [7382] TANGUT IDEOGRAPH-17000..KHITAN SMALL SCRIPT CHARACTER-18CD5 +18CFF..18D1E ; ID_Continue # Lo [32] KHITAN SMALL SCRIPT CHARACTER-18CFF..TANGUT IDEOGRAPH-18D1E +18D80..18DF2 ; ID_Continue # Lo [115] TANGUT COMPONENT-769..TANGUT COMPONENT-883 1AFF0..1AFF3 ; ID_Continue # Lm [4] KATAKANA LETTER MINNAN TONE-2..KATAKANA LETTER MINNAN TONE-5 1AFF5..1AFFB ; ID_Continue # Lm [7] KATAKANA LETTER MINNAN TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-5 1AFFD..1AFFE ; ID_Continue # Lm [2] KATAKANA LETTER MINNAN NASALIZED TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-8 @@ -8315,6 +8406,17 @@ FFDA..FFDC ; ID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HAN 1E5EE..1E5EF ; ID_Continue # Mn [2] OL ONAL SIGN MU..OL ONAL SIGN IKIR 1E5F0 ; ID_Continue # Lo OL ONAL SIGN HODDOND 1E5F1..1E5FA ; ID_Continue # Nd [10] OL ONAL DIGIT ZERO..OL ONAL DIGIT NINE +1E6C0..1E6DE ; ID_Continue # Lo [31] TAI YO LETTER LOW KO..TAI YO LETTER HIGH KVO +1E6E0..1E6E2 ; ID_Continue # Lo [3] TAI YO LETTER AA..TAI YO LETTER UE +1E6E3 ; ID_Continue # Mn TAI YO SIGN UE +1E6E4..1E6E5 ; ID_Continue # Lo [2] TAI YO LETTER U..TAI YO LETTER AE +1E6E6 ; ID_Continue # Mn TAI YO SIGN AU +1E6E7..1E6ED ; ID_Continue # Lo [7] TAI YO LETTER O..TAI YO LETTER AUE +1E6EE..1E6EF ; ID_Continue # Mn [2] TAI YO SIGN AY..TAI YO SIGN ANG +1E6F0..1E6F4 ; ID_Continue # Lo [5] TAI YO LETTER AN..TAI YO LETTER AP +1E6F5 ; ID_Continue # Mn TAI YO SIGN OM +1E6FE ; ID_Continue # Lo TAI YO SYMBOL MUEANG +1E6FF ; ID_Continue # Lm TAI YO XAM LAI 1E7E0..1E7E6 ; ID_Continue # Lo [7] ETHIOPIC SYLLABLE HHYA..ETHIOPIC SYLLABLE HHYO 1E7E8..1E7EB ; ID_Continue # Lo [4] ETHIOPIC SYLLABLE GURAGE HHWA..ETHIOPIC SYLLABLE HHWE 1E7ED..1E7EE ; ID_Continue # Lo [2] ETHIOPIC SYLLABLE GURAGE MWI..ETHIOPIC SYLLABLE GURAGE MWEE @@ -8360,17 +8462,16 @@ FFDA..FFDC ; ID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HAN 1EEAB..1EEBB ; ID_Continue # Lo [17] ARABIC MATHEMATICAL DOUBLE-STRUCK LAM..ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN 1FBF0..1FBF9 ; ID_Continue # Nd [10] SEGMENTED DIGIT ZERO..SEGMENTED DIGIT NINE 20000..2A6DF ; ID_Continue # Lo [42720] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DF -2A700..2B739 ; ID_Continue # Lo [4154] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B739 -2B740..2B81D ; ID_Continue # Lo [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D -2B820..2CEA1 ; ID_Continue # Lo [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1 +2A700..2B81D ; ID_Continue # Lo [4382] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B81D +2B820..2CEAD ; ID_Continue # Lo [5774] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEAD 2CEB0..2EBE0 ; ID_Continue # Lo [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0 2EBF0..2EE5D ; ID_Continue # Lo [622] CJK UNIFIED IDEOGRAPH-2EBF0..CJK UNIFIED IDEOGRAPH-2EE5D 2F800..2FA1D ; ID_Continue # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D 30000..3134A ; ID_Continue # Lo [4939] CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A -31350..323AF ; ID_Continue # Lo [4192] CJK UNIFIED IDEOGRAPH-31350..CJK UNIFIED IDEOGRAPH-323AF +31350..33479 ; ID_Continue # Lo [8490] CJK UNIFIED IDEOGRAPH-31350..CJK UNIFIED IDEOGRAPH-33479 E0100..E01EF ; ID_Continue # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256 -# Total code points: 144541 +# Total code points: 149240 # ================================================ @@ -8393,8 +8494,8 @@ E0100..E01EF ; ID_Continue # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR 01BC..01BF ; XID_Start # L& [4] LATIN CAPITAL LETTER TONE FIVE..LATIN LETTER WYNN 01C0..01C3 ; XID_Start # Lo [4] LATIN LETTER DENTAL CLICK..LATIN LETTER RETROFLEX CLICK 01C4..0293 ; XID_Start # L& [208] LATIN CAPITAL LETTER DZ WITH CARON..LATIN SMALL LETTER EZH WITH CURL -0294 ; XID_Start # Lo LATIN LETTER GLOTTAL STOP -0295..02AF ; XID_Start # L& [27] LATIN LETTER PHARYNGEAL VOICED FRICATIVE..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL +0294..0295 ; XID_Start # Lo [2] LATIN LETTER GLOTTAL STOP..LATIN LETTER PHARYNGEAL VOICED FRICATIVE +0296..02AF ; XID_Start # L& [26] LATIN LETTER INVERTED GLOTTAL STOP..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL 02B0..02C1 ; XID_Start # Lm [18] MODIFIER LETTER SMALL H..MODIFIER LETTER REVERSED GLOTTAL STOP 02C6..02D1 ; XID_Start # Lm [12] MODIFIER LETTER CIRCUMFLEX ACCENT..MODIFIER LETTER HALF TRIANGULAR COLON 02E0..02E4 ; XID_Start # Lm [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP @@ -8441,7 +8542,7 @@ E0100..E01EF ; ID_Continue # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR 0840..0858 ; XID_Start # Lo [25] MANDAIC LETTER HALQA..MANDAIC LETTER AIN 0860..086A ; XID_Start # Lo [11] SYRIAC LETTER MALAYALAM NGA..SYRIAC LETTER MALAYALAM SSA 0870..0887 ; XID_Start # Lo [24] ARABIC LETTER ALEF WITH ATTACHED FATHA..ARABIC BASELINE ROUND DOT -0889..088E ; XID_Start # Lo [6] ARABIC LETTER NOON WITH INVERTED SMALL V..ARABIC VERTICAL TAIL +0889..088F ; XID_Start # Lo [7] ARABIC LETTER NOON WITH INVERTED SMALL V..ARABIC LETTER NOON WITH RING ABOVE 08A0..08C8 ; XID_Start # Lo [41] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER GRAF 08C9 ; XID_Start # Lm ARABIC SMALL FARSI YEH 0904..0939 ; XID_Start # Lo [54] DEVANAGARI LETTER SHORT A..DEVANAGARI LETTER HA @@ -8509,7 +8610,7 @@ E0100..E01EF ; ID_Continue # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR 0C2A..0C39 ; XID_Start # Lo [16] TELUGU LETTER PA..TELUGU LETTER HA 0C3D ; XID_Start # Lo TELUGU SIGN AVAGRAHA 0C58..0C5A ; XID_Start # Lo [3] TELUGU LETTER TSA..TELUGU LETTER RRRA -0C5D ; XID_Start # Lo TELUGU LETTER NAKAARA POLLU +0C5C..0C5D ; XID_Start # Lo [2] TELUGU ARCHAIC SHRII..TELUGU LETTER NAKAARA POLLU 0C60..0C61 ; XID_Start # Lo [2] TELUGU LETTER VOCALIC RR..TELUGU LETTER VOCALIC LL 0C80 ; XID_Start # Lo KANNADA SIGN SPACING CANDRABINDU 0C85..0C8C ; XID_Start # Lo [8] KANNADA LETTER A..KANNADA LETTER VOCALIC L @@ -8518,7 +8619,7 @@ E0100..E01EF ; ID_Continue # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR 0CAA..0CB3 ; XID_Start # Lo [10] KANNADA LETTER PA..KANNADA LETTER LLA 0CB5..0CB9 ; XID_Start # Lo [5] KANNADA LETTER VA..KANNADA LETTER HA 0CBD ; XID_Start # Lo KANNADA SIGN AVAGRAHA -0CDD..0CDE ; XID_Start # Lo [2] KANNADA LETTER NAKAARA POLLU..KANNADA LETTER FA +0CDC..0CDE ; XID_Start # Lo [3] KANNADA ARCHAIC SHRII..KANNADA LETTER FA 0CE0..0CE1 ; XID_Start # Lo [2] KANNADA LETTER VOCALIC RR..KANNADA LETTER VOCALIC LL 0CF1..0CF2 ; XID_Start # Lo [2] KANNADA SIGN JIHVAMULIYA..KANNADA SIGN UPADHMANIYA 0D04..0D0C ; XID_Start # Lo [9] MALAYALAM LETTER VEDIC ANUSVARA..MALAYALAM LETTER VOCALIC L @@ -8742,11 +8843,8 @@ A771..A787 ; XID_Start # L& [23] LATIN SMALL LETTER DUM..LATIN SMALL LETTER A788 ; XID_Start # Lm MODIFIER LETTER LOW CIRCUMFLEX ACCENT A78B..A78E ; XID_Start # L& [4] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT A78F ; XID_Start # Lo LATIN LETTER SINOLOGICAL DOT -A790..A7CD ; XID_Start # L& [62] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER S WITH DIAGONAL STROKE -A7D0..A7D1 ; XID_Start # L& [2] LATIN CAPITAL LETTER CLOSED INSULAR G..LATIN SMALL LETTER CLOSED INSULAR G -A7D3 ; XID_Start # L& LATIN SMALL LETTER DOUBLE THORN -A7D5..A7DC ; XID_Start # L& [8] LATIN SMALL LETTER DOUBLE WYNN..LATIN CAPITAL LETTER LAMBDA WITH STROKE -A7F2..A7F4 ; XID_Start # Lm [3] MODIFIER LETTER CAPITAL C..MODIFIER LETTER CAPITAL Q +A790..A7DC ; XID_Start # L& [77] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN CAPITAL LETTER LAMBDA WITH STROKE +A7F1..A7F4 ; XID_Start # Lm [4] MODIFIER LETTER CAPITAL S..MODIFIER LETTER CAPITAL Q A7F5..A7F6 ; XID_Start # L& [2] LATIN CAPITAL LETTER REVERSED HALF H..LATIN SMALL LETTER REVERSED HALF H A7F7 ; XID_Start # Lo LATIN EPIGRAPHIC LETTER SIDEWAYS I A7F8..A7F9 ; XID_Start # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE @@ -8888,6 +8986,7 @@ FFDA..FFDC ; XID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGU 108F4..108F5 ; XID_Start # Lo [2] HATRAN LETTER SHIN..HATRAN LETTER TAW 10900..10915 ; XID_Start # Lo [22] PHOENICIAN LETTER ALF..PHOENICIAN LETTER TAU 10920..10939 ; XID_Start # Lo [26] LYDIAN LETTER A..LYDIAN LETTER C +10940..10959 ; XID_Start # Lo [26] SIDETIC LETTER N01..SIDETIC LETTER N26 10980..109B7 ; XID_Start # Lo [56] MEROITIC HIEROGLYPHIC LETTER A..MEROITIC CURSIVE LETTER DA 109BE..109BF ; XID_Start # Lo [2] MEROITIC CURSIVE LOGOGRAM RMT..MEROITIC CURSIVE LOGOGRAM IMN 10A00 ; XID_Start # Lo KHAROSHTHI LETTER A @@ -8915,6 +9014,8 @@ FFDA..FFDC ; XID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGU 10E80..10EA9 ; XID_Start # Lo [42] YEZIDI LETTER ELIF..YEZIDI LETTER ET 10EB0..10EB1 ; XID_Start # Lo [2] YEZIDI LETTER LAM WITH DOT ABOVE..YEZIDI LETTER YOT WITH CIRCUMFLEX ABOVE 10EC2..10EC4 ; XID_Start # Lo [3] ARABIC LETTER DAL WITH TWO DOTS VERTICALLY BELOW..ARABIC LETTER KAF WITH TWO DOTS VERTICALLY BELOW +10EC5 ; XID_Start # Lm ARABIC SMALL YEH BARREE WITH TWO DOTS BELOW +10EC6..10EC7 ; XID_Start # Lo [2] ARABIC LETTER THIN NOON..ARABIC LETTER YEH WITH FOUR DOTS BELOW 10F00..10F1C ; XID_Start # Lo [29] OLD SOGDIAN LETTER ALEPH..OLD SOGDIAN LETTER FINAL TAW WITH VERTICAL TAIL 10F27 ; XID_Start # Lo OLD SOGDIAN LIGATURE AYIN-DALETH 10F30..10F45 ; XID_Start # Lo [22] SOGDIAN LETTER ALEPH..SOGDIAN INDEPENDENT SHIN @@ -9007,6 +9108,9 @@ FFDA..FFDC ; XID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGU 11D67..11D68 ; XID_Start # Lo [2] GUNJALA GONDI LETTER EE..GUNJALA GONDI LETTER AI 11D6A..11D89 ; XID_Start # Lo [32] GUNJALA GONDI LETTER OO..GUNJALA GONDI LETTER SA 11D98 ; XID_Start # Lo GUNJALA GONDI OM +11DB0..11DD8 ; XID_Start # Lo [41] TOLONG SIKI LETTER I..TOLONG SIKI LETTER RRH +11DD9 ; XID_Start # Lm TOLONG SIKI SIGN SELA +11DDA..11DDB ; XID_Start # Lo [2] TOLONG SIKI SIGN HECAKA..TOLONG SIKI UNGGA 11EE0..11EF2 ; XID_Start # Lo [19] MAKASAR LETTER KA..MAKASAR ANGKA 11F02 ; XID_Start # Lo KAWI SIGN REPHA 11F04..11F10 ; XID_Start # Lo [13] KAWI LETTER A..KAWI LETTER O @@ -9033,14 +9137,18 @@ FFDA..FFDC ; XID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGU 16D43..16D6A ; XID_Start # Lo [40] KIRAT RAI LETTER A..KIRAT RAI VOWEL SIGN AU 16D6B..16D6C ; XID_Start # Lm [2] KIRAT RAI SIGN VIRAMA..KIRAT RAI SIGN SAAT 16E40..16E7F ; XID_Start # L& [64] MEDEFAIDRIN CAPITAL LETTER M..MEDEFAIDRIN SMALL LETTER Y +16EA0..16EB8 ; XID_Start # L& [25] BERIA ERFE CAPITAL LETTER ARKAB..BERIA ERFE CAPITAL LETTER AY +16EBB..16ED3 ; XID_Start # L& [25] BERIA ERFE SMALL LETTER ARKAB..BERIA ERFE SMALL LETTER AY 16F00..16F4A ; XID_Start # Lo [75] MIAO LETTER PA..MIAO LETTER RTE 16F50 ; XID_Start # Lo MIAO LETTER NASALIZATION 16F93..16F9F ; XID_Start # Lm [13] MIAO LETTER TONE-2..MIAO LETTER REFORMED TONE-8 16FE0..16FE1 ; XID_Start # Lm [2] TANGUT ITERATION MARK..NUSHU ITERATION MARK 16FE3 ; XID_Start # Lm OLD CHINESE ITERATION MARK -17000..187F7 ; XID_Start # Lo [6136] TANGUT IDEOGRAPH-17000..TANGUT IDEOGRAPH-187F7 -18800..18CD5 ; XID_Start # Lo [1238] TANGUT COMPONENT-001..KHITAN SMALL SCRIPT CHARACTER-18CD5 -18CFF..18D08 ; XID_Start # Lo [10] KHITAN SMALL SCRIPT CHARACTER-18CFF..TANGUT IDEOGRAPH-18D08 +16FF2..16FF3 ; XID_Start # Lm [2] CHINESE SMALL SIMPLIFIED ER..CHINESE SMALL TRADITIONAL ER +16FF4..16FF6 ; XID_Start # Nl [3] YANGQIN SIGN SLOW ONE BEAT..YANGQIN SIGN SLOW TWO BEATS +17000..18CD5 ; XID_Start # Lo [7382] TANGUT IDEOGRAPH-17000..KHITAN SMALL SCRIPT CHARACTER-18CD5 +18CFF..18D1E ; XID_Start # Lo [32] KHITAN SMALL SCRIPT CHARACTER-18CFF..TANGUT IDEOGRAPH-18D1E +18D80..18DF2 ; XID_Start # Lo [115] TANGUT COMPONENT-769..TANGUT COMPONENT-883 1AFF0..1AFF3 ; XID_Start # Lm [4] KATAKANA LETTER MINNAN TONE-2..KATAKANA LETTER MINNAN TONE-5 1AFF5..1AFFB ; XID_Start # Lm [7] KATAKANA LETTER MINNAN TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-5 1AFFD..1AFFE ; XID_Start # Lm [2] KATAKANA LETTER MINNAN NASALIZED TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-8 @@ -9098,6 +9206,13 @@ FFDA..FFDC ; XID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGU 1E4EB ; XID_Start # Lm NAG MUNDARI SIGN OJOD 1E5D0..1E5ED ; XID_Start # Lo [30] OL ONAL LETTER O..OL ONAL LETTER EG 1E5F0 ; XID_Start # Lo OL ONAL SIGN HODDOND +1E6C0..1E6DE ; XID_Start # Lo [31] TAI YO LETTER LOW KO..TAI YO LETTER HIGH KVO +1E6E0..1E6E2 ; XID_Start # Lo [3] TAI YO LETTER AA..TAI YO LETTER UE +1E6E4..1E6E5 ; XID_Start # Lo [2] TAI YO LETTER U..TAI YO LETTER AE +1E6E7..1E6ED ; XID_Start # Lo [7] TAI YO LETTER O..TAI YO LETTER AUE +1E6F0..1E6F4 ; XID_Start # Lo [5] TAI YO LETTER AN..TAI YO LETTER AP +1E6FE ; XID_Start # Lo TAI YO SYMBOL MUEANG +1E6FF ; XID_Start # Lm TAI YO XAM LAI 1E7E0..1E7E6 ; XID_Start # Lo [7] ETHIOPIC SYLLABLE HHYA..ETHIOPIC SYLLABLE HHYO 1E7E8..1E7EB ; XID_Start # Lo [4] ETHIOPIC SYLLABLE GURAGE HHWA..ETHIOPIC SYLLABLE HHWE 1E7ED..1E7EE ; XID_Start # Lo [2] ETHIOPIC SYLLABLE GURAGE MWI..ETHIOPIC SYLLABLE GURAGE MWEE @@ -9139,16 +9254,15 @@ FFDA..FFDC ; XID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGU 1EEA5..1EEA9 ; XID_Start # Lo [5] ARABIC MATHEMATICAL DOUBLE-STRUCK WAW..ARABIC MATHEMATICAL DOUBLE-STRUCK YEH 1EEAB..1EEBB ; XID_Start # Lo [17] ARABIC MATHEMATICAL DOUBLE-STRUCK LAM..ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN 20000..2A6DF ; XID_Start # Lo [42720] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DF -2A700..2B739 ; XID_Start # Lo [4154] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B739 -2B740..2B81D ; XID_Start # Lo [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D -2B820..2CEA1 ; XID_Start # Lo [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1 +2A700..2B81D ; XID_Start # Lo [4382] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B81D +2B820..2CEAD ; XID_Start # Lo [5774] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEAD 2CEB0..2EBE0 ; XID_Start # Lo [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0 2EBF0..2EE5D ; XID_Start # Lo [622] CJK UNIFIED IDEOGRAPH-2EBF0..CJK UNIFIED IDEOGRAPH-2EE5D 2F800..2FA1D ; XID_Start # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D 30000..3134A ; XID_Start # Lo [4939] CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A -31350..323AF ; XID_Start # Lo [4192] CJK UNIFIED IDEOGRAPH-31350..CJK UNIFIED IDEOGRAPH-323AF +31350..33479 ; XID_Start # Lo [8490] CJK UNIFIED IDEOGRAPH-31350..CJK UNIFIED IDEOGRAPH-33479 -# Total code points: 141246 +# Total code points: 145893 # ================================================ @@ -9174,8 +9288,8 @@ FFDA..FFDC ; XID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGU 01BC..01BF ; XID_Continue # L& [4] LATIN CAPITAL LETTER TONE FIVE..LATIN LETTER WYNN 01C0..01C3 ; XID_Continue # Lo [4] LATIN LETTER DENTAL CLICK..LATIN LETTER RETROFLEX CLICK 01C4..0293 ; XID_Continue # L& [208] LATIN CAPITAL LETTER DZ WITH CARON..LATIN SMALL LETTER EZH WITH CURL -0294 ; XID_Continue # Lo LATIN LETTER GLOTTAL STOP -0295..02AF ; XID_Continue # L& [27] LATIN LETTER PHARYNGEAL VOICED FRICATIVE..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL +0294..0295 ; XID_Continue # Lo [2] LATIN LETTER GLOTTAL STOP..LATIN LETTER PHARYNGEAL VOICED FRICATIVE +0296..02AF ; XID_Continue # L& [26] LATIN LETTER INVERTED GLOTTAL STOP..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL 02B0..02C1 ; XID_Continue # Lm [18] MODIFIER LETTER SMALL H..MODIFIER LETTER REVERSED GLOTTAL STOP 02C6..02D1 ; XID_Continue # Lm [12] MODIFIER LETTER CIRCUMFLEX ACCENT..MODIFIER LETTER HALF TRIANGULAR COLON 02E0..02E4 ; XID_Continue # Lm [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP @@ -9250,7 +9364,7 @@ FFDA..FFDC ; XID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGU 0859..085B ; XID_Continue # Mn [3] MANDAIC AFFRICATION MARK..MANDAIC GEMINATION MARK 0860..086A ; XID_Continue # Lo [11] SYRIAC LETTER MALAYALAM NGA..SYRIAC LETTER MALAYALAM SSA 0870..0887 ; XID_Continue # Lo [24] ARABIC LETTER ALEF WITH ATTACHED FATHA..ARABIC BASELINE ROUND DOT -0889..088E ; XID_Continue # Lo [6] ARABIC LETTER NOON WITH INVERTED SMALL V..ARABIC VERTICAL TAIL +0889..088F ; XID_Continue # Lo [7] ARABIC LETTER NOON WITH INVERTED SMALL V..ARABIC LETTER NOON WITH RING ABOVE 0897..089F ; XID_Continue # Mn [9] ARABIC PEPET..ARABIC HALF MADDA OVER MADDA 08A0..08C8 ; XID_Continue # Lo [41] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER GRAF 08C9 ; XID_Continue # Lm ARABIC SMALL FARSI YEH @@ -9400,7 +9514,7 @@ FFDA..FFDC ; XID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGU 0C4A..0C4D ; XID_Continue # Mn [4] TELUGU VOWEL SIGN O..TELUGU SIGN VIRAMA 0C55..0C56 ; XID_Continue # Mn [2] TELUGU LENGTH MARK..TELUGU AI LENGTH MARK 0C58..0C5A ; XID_Continue # Lo [3] TELUGU LETTER TSA..TELUGU LETTER RRRA -0C5D ; XID_Continue # Lo TELUGU LETTER NAKAARA POLLU +0C5C..0C5D ; XID_Continue # Lo [2] TELUGU ARCHAIC SHRII..TELUGU LETTER NAKAARA POLLU 0C60..0C61 ; XID_Continue # Lo [2] TELUGU LETTER VOCALIC RR..TELUGU LETTER VOCALIC LL 0C62..0C63 ; XID_Continue # Mn [2] TELUGU VOWEL SIGN VOCALIC L..TELUGU VOWEL SIGN VOCALIC LL 0C66..0C6F ; XID_Continue # Nd [10] TELUGU DIGIT ZERO..TELUGU DIGIT NINE @@ -9422,7 +9536,7 @@ FFDA..FFDC ; XID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGU 0CCA..0CCB ; XID_Continue # Mc [2] KANNADA VOWEL SIGN O..KANNADA VOWEL SIGN OO 0CCC..0CCD ; XID_Continue # Mn [2] KANNADA VOWEL SIGN AU..KANNADA SIGN VIRAMA 0CD5..0CD6 ; XID_Continue # Mc [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK -0CDD..0CDE ; XID_Continue # Lo [2] KANNADA LETTER NAKAARA POLLU..KANNADA LETTER FA +0CDC..0CDE ; XID_Continue # Lo [3] KANNADA ARCHAIC SHRII..KANNADA LETTER FA 0CE0..0CE1 ; XID_Continue # Lo [2] KANNADA LETTER VOCALIC RR..KANNADA LETTER VOCALIC LL 0CE2..0CE3 ; XID_Continue # Mn [2] KANNADA VOWEL SIGN VOCALIC L..KANNADA VOWEL SIGN VOCALIC LL 0CE6..0CEF ; XID_Continue # Nd [10] KANNADA DIGIT ZERO..KANNADA DIGIT NINE @@ -9639,7 +9753,8 @@ FFDA..FFDC ; XID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGU 1A90..1A99 ; XID_Continue # Nd [10] TAI THAM THAM DIGIT ZERO..TAI THAM THAM DIGIT NINE 1AA7 ; XID_Continue # Lm TAI THAM SIGN MAI YAMOK 1AB0..1ABD ; XID_Continue # Mn [14] COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW -1ABF..1ACE ; XID_Continue # Mn [16] COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER INSULAR T +1ABF..1ADD ; XID_Continue # Mn [31] COMBINING LATIN SMALL LETTER W BELOW..COMBINING DOT-AND-RING BELOW +1AE0..1AEB ; XID_Continue # Mn [12] COMBINING LEFT TACK ABOVE..COMBINING DOUBLE RIGHTWARDS ARROW ABOVE 1B00..1B03 ; XID_Continue # Mn [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG 1B04 ; XID_Continue # Mc BALINESE SIGN BISAH 1B05..1B33 ; XID_Continue # Lo [47] BALINESE LETTER AKARA..BALINESE LETTER HA @@ -9827,11 +9942,8 @@ A771..A787 ; XID_Continue # L& [23] LATIN SMALL LETTER DUM..LATIN SMALL LETT A788 ; XID_Continue # Lm MODIFIER LETTER LOW CIRCUMFLEX ACCENT A78B..A78E ; XID_Continue # L& [4] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT A78F ; XID_Continue # Lo LATIN LETTER SINOLOGICAL DOT -A790..A7CD ; XID_Continue # L& [62] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER S WITH DIAGONAL STROKE -A7D0..A7D1 ; XID_Continue # L& [2] LATIN CAPITAL LETTER CLOSED INSULAR G..LATIN SMALL LETTER CLOSED INSULAR G -A7D3 ; XID_Continue # L& LATIN SMALL LETTER DOUBLE THORN -A7D5..A7DC ; XID_Continue # L& [8] LATIN SMALL LETTER DOUBLE WYNN..LATIN CAPITAL LETTER LAMBDA WITH STROKE -A7F2..A7F4 ; XID_Continue # Lm [3] MODIFIER LETTER CAPITAL C..MODIFIER LETTER CAPITAL Q +A790..A7DC ; XID_Continue # L& [77] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN CAPITAL LETTER LAMBDA WITH STROKE +A7F1..A7F4 ; XID_Continue # Lm [4] MODIFIER LETTER CAPITAL S..MODIFIER LETTER CAPITAL Q A7F5..A7F6 ; XID_Continue # L& [2] LATIN CAPITAL LETTER REVERSED HALF H..LATIN SMALL LETTER REVERSED HALF H A7F7 ; XID_Continue # Lo LATIN EPIGRAPHIC LETTER SIDEWAYS I A7F8..A7F9 ; XID_Continue # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE @@ -10044,6 +10156,7 @@ FFDA..FFDC ; XID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HA 108F4..108F5 ; XID_Continue # Lo [2] HATRAN LETTER SHIN..HATRAN LETTER TAW 10900..10915 ; XID_Continue # Lo [22] PHOENICIAN LETTER ALF..PHOENICIAN LETTER TAU 10920..10939 ; XID_Continue # Lo [26] LYDIAN LETTER A..LYDIAN LETTER C +10940..10959 ; XID_Continue # Lo [26] SIDETIC LETTER N01..SIDETIC LETTER N26 10980..109B7 ; XID_Continue # Lo [56] MEROITIC HIEROGLYPHIC LETTER A..MEROITIC CURSIVE LETTER DA 109BE..109BF ; XID_Continue # Lo [2] MEROITIC CURSIVE LOGOGRAM RMT..MEROITIC CURSIVE LOGOGRAM IMN 10A00 ; XID_Continue # Lo KHAROSHTHI LETTER A @@ -10082,7 +10195,9 @@ FFDA..FFDC ; XID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HA 10EAB..10EAC ; XID_Continue # Mn [2] YEZIDI COMBINING HAMZA MARK..YEZIDI COMBINING MADDA MARK 10EB0..10EB1 ; XID_Continue # Lo [2] YEZIDI LETTER LAM WITH DOT ABOVE..YEZIDI LETTER YOT WITH CIRCUMFLEX ABOVE 10EC2..10EC4 ; XID_Continue # Lo [3] ARABIC LETTER DAL WITH TWO DOTS VERTICALLY BELOW..ARABIC LETTER KAF WITH TWO DOTS VERTICALLY BELOW -10EFC..10EFF ; XID_Continue # Mn [4] ARABIC COMBINING ALEF OVERLAY..ARABIC SMALL LOW WORD MADDA +10EC5 ; XID_Continue # Lm ARABIC SMALL YEH BARREE WITH TWO DOTS BELOW +10EC6..10EC7 ; XID_Continue # Lo [2] ARABIC LETTER THIN NOON..ARABIC LETTER YEH WITH FOUR DOTS BELOW +10EFA..10EFF ; XID_Continue # Mn [6] ARABIC DOUBLE VERTICAL BAR BELOW..ARABIC SMALL LOW WORD MADDA 10F00..10F1C ; XID_Continue # Lo [29] OLD SOGDIAN LETTER ALEPH..OLD SOGDIAN LETTER FINAL TAW WITH VERTICAL TAIL 10F27 ; XID_Continue # Lo OLD SOGDIAN LIGATURE AYIN-DALETH 10F30..10F45 ; XID_Continue # Lo [22] SOGDIAN LETTER ALEPH..SOGDIAN INDEPENDENT SHIN @@ -10309,6 +10424,12 @@ FFDA..FFDC ; XID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HA 11A98..11A99 ; XID_Continue # Mn [2] SOYOMBO GEMINATION MARK..SOYOMBO SUBJOINER 11A9D ; XID_Continue # Lo SOYOMBO MARK PLUTA 11AB0..11AF8 ; XID_Continue # Lo [73] CANADIAN SYLLABICS NATTILIK HI..PAU CIN HAU GLOTTAL STOP FINAL +11B60 ; XID_Continue # Mn SHARADA VOWEL SIGN OE +11B61 ; XID_Continue # Mc SHARADA VOWEL SIGN OOE +11B62..11B64 ; XID_Continue # Mn [3] SHARADA VOWEL SIGN UE..SHARADA VOWEL SIGN SHORT E +11B65 ; XID_Continue # Mc SHARADA VOWEL SIGN SHORT O +11B66 ; XID_Continue # Mn SHARADA VOWEL SIGN CANDRA E +11B67 ; XID_Continue # Mc SHARADA VOWEL SIGN CANDRA O 11BC0..11BE0 ; XID_Continue # Lo [33] SUNUWAR LETTER DEVI..SUNUWAR LETTER KLOKO 11BF0..11BF9 ; XID_Continue # Nd [10] SUNUWAR DIGIT ZERO..SUNUWAR DIGIT NINE 11C00..11C08 ; XID_Continue # Lo [9] BHAIKSUKI LETTER A..BHAIKSUKI LETTER VOCALIC L @@ -10349,6 +10470,10 @@ FFDA..FFDC ; XID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HA 11D97 ; XID_Continue # Mn GUNJALA GONDI VIRAMA 11D98 ; XID_Continue # Lo GUNJALA GONDI OM 11DA0..11DA9 ; XID_Continue # Nd [10] GUNJALA GONDI DIGIT ZERO..GUNJALA GONDI DIGIT NINE +11DB0..11DD8 ; XID_Continue # Lo [41] TOLONG SIKI LETTER I..TOLONG SIKI LETTER RRH +11DD9 ; XID_Continue # Lm TOLONG SIKI SIGN SELA +11DDA..11DDB ; XID_Continue # Lo [2] TOLONG SIKI SIGN HECAKA..TOLONG SIKI UNGGA +11DE0..11DE9 ; XID_Continue # Nd [10] TOLONG SIKI DIGIT ZERO..TOLONG SIKI DIGIT NINE 11EE0..11EF2 ; XID_Continue # Lo [19] MAKASAR LETTER KA..MAKASAR ANGKA 11EF3..11EF4 ; XID_Continue # Mn [2] MAKASAR VOWEL SIGN I..MAKASAR VOWEL SIGN U 11EF5..11EF6 ; XID_Continue # Mc [2] MAKASAR VOWEL SIGN E..MAKASAR VOWEL SIGN O @@ -10399,6 +10524,8 @@ FFDA..FFDC ; XID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HA 16D6B..16D6C ; XID_Continue # Lm [2] KIRAT RAI SIGN VIRAMA..KIRAT RAI SIGN SAAT 16D70..16D79 ; XID_Continue # Nd [10] KIRAT RAI DIGIT ZERO..KIRAT RAI DIGIT NINE 16E40..16E7F ; XID_Continue # L& [64] MEDEFAIDRIN CAPITAL LETTER M..MEDEFAIDRIN SMALL LETTER Y +16EA0..16EB8 ; XID_Continue # L& [25] BERIA ERFE CAPITAL LETTER ARKAB..BERIA ERFE CAPITAL LETTER AY +16EBB..16ED3 ; XID_Continue # L& [25] BERIA ERFE SMALL LETTER ARKAB..BERIA ERFE SMALL LETTER AY 16F00..16F4A ; XID_Continue # Lo [75] MIAO LETTER PA..MIAO LETTER RTE 16F4F ; XID_Continue # Mn MIAO SIGN CONSONANT MODIFIER BAR 16F50 ; XID_Continue # Lo MIAO LETTER NASALIZATION @@ -10409,9 +10536,11 @@ FFDA..FFDC ; XID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HA 16FE3 ; XID_Continue # Lm OLD CHINESE ITERATION MARK 16FE4 ; XID_Continue # Mn KHITAN SMALL SCRIPT FILLER 16FF0..16FF1 ; XID_Continue # Mc [2] VIETNAMESE ALTERNATE READING MARK CA..VIETNAMESE ALTERNATE READING MARK NHAY -17000..187F7 ; XID_Continue # Lo [6136] TANGUT IDEOGRAPH-17000..TANGUT IDEOGRAPH-187F7 -18800..18CD5 ; XID_Continue # Lo [1238] TANGUT COMPONENT-001..KHITAN SMALL SCRIPT CHARACTER-18CD5 -18CFF..18D08 ; XID_Continue # Lo [10] KHITAN SMALL SCRIPT CHARACTER-18CFF..TANGUT IDEOGRAPH-18D08 +16FF2..16FF3 ; XID_Continue # Lm [2] CHINESE SMALL SIMPLIFIED ER..CHINESE SMALL TRADITIONAL ER +16FF4..16FF6 ; XID_Continue # Nl [3] YANGQIN SIGN SLOW ONE BEAT..YANGQIN SIGN SLOW TWO BEATS +17000..18CD5 ; XID_Continue # Lo [7382] TANGUT IDEOGRAPH-17000..KHITAN SMALL SCRIPT CHARACTER-18CD5 +18CFF..18D1E ; XID_Continue # Lo [32] KHITAN SMALL SCRIPT CHARACTER-18CFF..TANGUT IDEOGRAPH-18D1E +18D80..18DF2 ; XID_Continue # Lo [115] TANGUT COMPONENT-769..TANGUT COMPONENT-883 1AFF0..1AFF3 ; XID_Continue # Lm [4] KATAKANA LETTER MINNAN TONE-2..KATAKANA LETTER MINNAN TONE-5 1AFF5..1AFFB ; XID_Continue # Lm [7] KATAKANA LETTER MINNAN TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-5 1AFFD..1AFFE ; XID_Continue # Lm [2] KATAKANA LETTER MINNAN NASALIZED TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-8 @@ -10502,6 +10631,17 @@ FFDA..FFDC ; XID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HA 1E5EE..1E5EF ; XID_Continue # Mn [2] OL ONAL SIGN MU..OL ONAL SIGN IKIR 1E5F0 ; XID_Continue # Lo OL ONAL SIGN HODDOND 1E5F1..1E5FA ; XID_Continue # Nd [10] OL ONAL DIGIT ZERO..OL ONAL DIGIT NINE +1E6C0..1E6DE ; XID_Continue # Lo [31] TAI YO LETTER LOW KO..TAI YO LETTER HIGH KVO +1E6E0..1E6E2 ; XID_Continue # Lo [3] TAI YO LETTER AA..TAI YO LETTER UE +1E6E3 ; XID_Continue # Mn TAI YO SIGN UE +1E6E4..1E6E5 ; XID_Continue # Lo [2] TAI YO LETTER U..TAI YO LETTER AE +1E6E6 ; XID_Continue # Mn TAI YO SIGN AU +1E6E7..1E6ED ; XID_Continue # Lo [7] TAI YO LETTER O..TAI YO LETTER AUE +1E6EE..1E6EF ; XID_Continue # Mn [2] TAI YO SIGN AY..TAI YO SIGN ANG +1E6F0..1E6F4 ; XID_Continue # Lo [5] TAI YO LETTER AN..TAI YO LETTER AP +1E6F5 ; XID_Continue # Mn TAI YO SIGN OM +1E6FE ; XID_Continue # Lo TAI YO SYMBOL MUEANG +1E6FF ; XID_Continue # Lm TAI YO XAM LAI 1E7E0..1E7E6 ; XID_Continue # Lo [7] ETHIOPIC SYLLABLE HHYA..ETHIOPIC SYLLABLE HHYO 1E7E8..1E7EB ; XID_Continue # Lo [4] ETHIOPIC SYLLABLE GURAGE HHWA..ETHIOPIC SYLLABLE HHWE 1E7ED..1E7EE ; XID_Continue # Lo [2] ETHIOPIC SYLLABLE GURAGE MWI..ETHIOPIC SYLLABLE GURAGE MWEE @@ -10547,17 +10687,16 @@ FFDA..FFDC ; XID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HA 1EEAB..1EEBB ; XID_Continue # Lo [17] ARABIC MATHEMATICAL DOUBLE-STRUCK LAM..ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN 1FBF0..1FBF9 ; XID_Continue # Nd [10] SEGMENTED DIGIT ZERO..SEGMENTED DIGIT NINE 20000..2A6DF ; XID_Continue # Lo [42720] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DF -2A700..2B739 ; XID_Continue # Lo [4154] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B739 -2B740..2B81D ; XID_Continue # Lo [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D -2B820..2CEA1 ; XID_Continue # Lo [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1 +2A700..2B81D ; XID_Continue # Lo [4382] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B81D +2B820..2CEAD ; XID_Continue # Lo [5774] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEAD 2CEB0..2EBE0 ; XID_Continue # Lo [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0 2EBF0..2EE5D ; XID_Continue # Lo [622] CJK UNIFIED IDEOGRAPH-2EBF0..CJK UNIFIED IDEOGRAPH-2EE5D 2F800..2FA1D ; XID_Continue # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D 30000..3134A ; XID_Continue # Lo [4939] CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A -31350..323AF ; XID_Continue # Lo [4192] CJK UNIFIED IDEOGRAPH-31350..CJK UNIFIED IDEOGRAPH-323AF +31350..33479 ; XID_Continue # Lo [8490] CJK UNIFIED IDEOGRAPH-31350..CJK UNIFIED IDEOGRAPH-33479 E0100..E01EF ; XID_Continue # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256 -# Total code points: 144522 +# Total code points: 149221 # ================================================ @@ -10778,7 +10917,8 @@ E01F0..E0FFF ; Default_Ignorable_Code_Point # Cn [3600] .... 085F ; Cn # 086B..086F ; Cn # [5] .. -088F ; Cn # 0892..0896 ; Cn # [5] .. 0984 ; Cn # 098D..098E ; Cn # [2] .. @@ -120,7 +119,7 @@ 0C49 ; Cn # 0C4E..0C54 ; Cn # [7] .. 0C57 ; Cn # -0C5B..0C5C ; Cn # [2] .. +0C5B ; Cn # 0C5E..0C5F ; Cn # [2] .. 0C64..0C65 ; Cn # [2] .. 0C70..0C76 ; Cn # [7] .. @@ -132,7 +131,7 @@ 0CC5 ; Cn # 0CC9 ; Cn # 0CCE..0CD4 ; Cn # [7] .. -0CD7..0CDC ; Cn # [6] .. +0CD7..0CDB ; Cn # [5] .. 0CDF ; Cn # 0CE4..0CE5 ; Cn # [2] .. 0CF0 ; Cn # @@ -228,7 +227,8 @@ 1A8A..1A8F ; Cn # [6] .. 1A9A..1A9F ; Cn # [6] .. 1AAE..1AAF ; Cn # [2] .. -1ACF..1AFF ; Cn # [49] .. +1ADE..1ADF ; Cn # [2] .. +1AEC..1AFF ; Cn # [20] .. 1B4D ; Cn # 1BF4..1BFB ; Cn # [8] .. 1C38..1C3A ; Cn # [3] .. @@ -257,13 +257,12 @@ 2072..2073 ; Cn # [2] .. 208F ; Cn # 209D..209F ; Cn # [3] .. -20C1..20CF ; Cn # [15] .. +20C2..20CF ; Cn # [14] .. 20F1..20FF ; Cn # [15] .. 218C..218F ; Cn # [4] .. 242A..243F ; Cn # [22] .. 244B..245F ; Cn # [21] .. 2B74..2B75 ; Cn # [2] .. -2B96 ; Cn # 2CF4..2CF8 ; Cn # [5] .. 2D26 ; Cn # 2D28..2D2C ; Cn # [5] .. @@ -294,10 +293,7 @@ A48D..A48F ; Cn # [3] .. A4C7..A4CF ; Cn # [9] .. A62C..A63F ; Cn # [20] .. A6F8..A6FF ; Cn # [8] .. -A7CE..A7CF ; Cn # [2] .. -A7D2 ; Cn # -A7D4 ; Cn # -A7DD..A7F1 ; Cn # [21] .. +A7DD..A7F0 ; Cn # [20] .. A82D..A82F ; Cn # [3] .. A83A..A83F ; Cn # [6] .. A878..A87F ; Cn # [8] .. @@ -333,9 +329,6 @@ FB3D ; Cn # FB3F ; Cn # FB42 ; Cn # FB45 ; Cn # -FBC3..FBD2 ; Cn # [16] .. -FD90..FD91 ; Cn # [2] .. -FDC8..FDCE ; Cn # [7] .. FDD0..FDEF ; Cn # [32] .. FE1A..FE1F ; Cn # [6] .. FE53 ; Cn # @@ -407,7 +400,7 @@ FFFE..FFFF ; Cn # [2] .. 108F6..108FA ; Cn # [5] .. 1091C..1091E ; Cn # [3] .. 1093A..1093E ; Cn # [5] .. -10940..1097F ; Cn # [64] .. +1095A..1097F ; Cn # [38] .. 109B8..109BB ; Cn # [4] .. 109D0..109D1 ; Cn # [2] .. 10A04 ; Cn # @@ -439,7 +432,8 @@ FFFE..FFFF ; Cn # [2] .. 10EAA ; Cn # 10EAE..10EAF ; Cn # [2] .. 10EB2..10EC1 ; Cn # [16] .. -10EC5..10EFB ; Cn # [55] .. +10EC8..10ECF ; Cn # [8] .. +10ED9..10EF9 ; Cn # [33] .. 10F28..10F2F ; Cn # [8] .. 10F5A..10F6F ; Cn # [22] .. 10F8A..10FAF ; Cn # [38] .. @@ -522,7 +516,8 @@ FFFE..FFFF ; Cn # [2] .. 11A48..11A4F ; Cn # [8] .. 11AA3..11AAF ; Cn # [13] .. 11AF9..11AFF ; Cn # [7] .. -11B0A..11BBF ; Cn # [182] .. +11B0A..11B5F ; Cn # [86] .. +11B68..11BBF ; Cn # [88] .. 11BE2..11BEF ; Cn # [14] .. 11BFA..11BFF ; Cn # [6] .. 11C09 ; Cn # @@ -544,7 +539,9 @@ FFFE..FFFF ; Cn # [2] .. 11D8F ; Cn # 11D92 ; Cn # 11D99..11D9F ; Cn # [7] .. -11DAA..11EDF ; Cn # [310] .. +11DAA..11DAF ; Cn # [6] .. +11DDC..11DDF ; Cn # [4] .. +11DEA..11EDF ; Cn # [246] .. 11EF9..11EFF ; Cn # [7] .. 11F11 ; Cn # 11F3B..11F3D ; Cn # [3] .. @@ -573,15 +570,17 @@ FFFE..FFFF ; Cn # [2] .. 16B78..16B7C ; Cn # [5] .. 16B90..16D3F ; Cn # [432] .. 16D7A..16E3F ; Cn # [198] .. -16E9B..16EFF ; Cn # [101] .. +16E9B..16E9F ; Cn # [5] .. +16EB9..16EBA ; Cn # [2] .. +16ED4..16EFF ; Cn # [44] .. 16F4B..16F4E ; Cn # [4] .. 16F88..16F8E ; Cn # [7] .. 16FA0..16FDF ; Cn # [64] .. 16FE5..16FEF ; Cn # [11] .. -16FF2..16FFF ; Cn # [14] .. -187F8..187FF ; Cn # [8] .. +16FF7..16FFF ; Cn # [9] .. 18CD6..18CFE ; Cn # [41] .. -18D09..1AFEF ; Cn # [8935] .. +18D1F..18D7F ; Cn # [97] .. +18DF3..1AFEF ; Cn # [8701] .. 1AFF4 ; Cn # 1AFFC ; Cn # 1AFFF ; Cn # @@ -596,8 +595,10 @@ FFFE..FFFF ; Cn # [2] .. 1BC89..1BC8F ; Cn # [7] .. 1BC9A..1BC9B ; Cn # [2] .. 1BCA4..1CBFF ; Cn # [3932] .. -1CCFA..1CCFF ; Cn # [6] .. -1CEB4..1CEFF ; Cn # [76] .. +1CCFD..1CCFF ; Cn # [3] .. +1CEB4..1CEB9 ; Cn # [6] .. +1CED1..1CEDF ; Cn # [15] .. +1CEF1..1CEFF ; Cn # [15] .. 1CF2E..1CF2F ; Cn # [2] .. 1CF47..1CF4F ; Cn # [9] .. 1CFC4..1CFFF ; Cn # [60] .. @@ -650,7 +651,10 @@ FFFE..FFFF ; Cn # [2] .. 1E300..1E4CF ; Cn # [464] .. 1E4FA..1E5CF ; Cn # [214] .. 1E5FB..1E5FE ; Cn # [4] .. -1E600..1E7DF ; Cn # [480] .. +1E600..1E6BF ; Cn # [192] .. +1E6DF ; Cn # +1E6F6..1E6FD ; Cn # [8] .. +1E700..1E7DF ; Cn # [224] .. 1E7E7 ; Cn # 1E7EC ; Cn # 1E7EF ; Cn # @@ -708,10 +712,9 @@ FFFE..FFFF ; Cn # [2] .. 1F249..1F24F ; Cn # [7] .. 1F252..1F25F ; Cn # [14] .. 1F266..1F2FF ; Cn # [154] .. -1F6D8..1F6DB ; Cn # [4] .. +1F6D9..1F6DB ; Cn # [3] .. 1F6ED..1F6EF ; Cn # [3] .. 1F6FD..1F6FF ; Cn # [3] .. -1F777..1F77A ; Cn # [4] .. 1F7DA..1F7DF ; Cn # [6] .. 1F7EC..1F7EF ; Cn # [4] .. 1F7F1..1F7FF ; Cn # [15] .. @@ -721,33 +724,34 @@ FFFE..FFFF ; Cn # [2] .. 1F888..1F88F ; Cn # [8] .. 1F8AE..1F8AF ; Cn # [2] .. 1F8BC..1F8BF ; Cn # [4] .. -1F8C2..1F8FF ; Cn # [62] .. -1FA54..1FA5F ; Cn # [12] .. +1F8C2..1F8CF ; Cn # [14] .. +1F8D9..1F8FF ; Cn # [39] .. +1FA58..1FA5F ; Cn # [8] .. 1FA6E..1FA6F ; Cn # [2] .. 1FA7D..1FA7F ; Cn # [3] .. -1FA8A..1FA8E ; Cn # [5] .. -1FAC7..1FACD ; Cn # [7] .. +1FA8B..1FA8D ; Cn # [3] .. +1FAC7 ; Cn # +1FAC9..1FACC ; Cn # [4] .. 1FADD..1FADE ; Cn # [2] .. -1FAEA..1FAEF ; Cn # [6] .. +1FAEB..1FAEE ; Cn # [4] .. 1FAF9..1FAFF ; Cn # [7] .. 1FB93 ; Cn # -1FBFA..1FFFF ; Cn # [1030] .. +1FBFB..1FFFF ; Cn # [1029] .. 2A6E0..2A6FF ; Cn # [32] .. -2B73A..2B73F ; Cn # [6] .. 2B81E..2B81F ; Cn # [2] .. -2CEA2..2CEAF ; Cn # [14] .. +2CEAE..2CEAF ; Cn # [2] .. 2EBE1..2EBEF ; Cn # [15] .. 2EE5E..2F7FF ; Cn # [2466] .. 2FA1E..2FFFF ; Cn # [1506] .. 3134B..3134F ; Cn # [5] .. -323B0..E0000 ; Cn # [711761] .. +3347A..E0000 ; Cn # [707463] .. E0002..E001F ; Cn # [30] .. E0080..E00FF ; Cn # [128] .. E01F0..EFFFF ; Cn # [65040] .. FFFFE..FFFFF ; Cn # [2] .. 10FFFE..10FFFF; Cn # [2] .. -# Total code points: 819533 +# Total code points: 814730 # ================================================ @@ -1355,7 +1359,10 @@ A7C2 ; Lu # LATIN CAPITAL LETTER ANGLICANA W A7C4..A7C7 ; Lu # [4] LATIN CAPITAL LETTER C WITH PALATAL HOOK..LATIN CAPITAL LETTER D WITH SHORT STROKE OVERLAY A7C9 ; Lu # LATIN CAPITAL LETTER S WITH SHORT STROKE OVERLAY A7CB..A7CC ; Lu # [2] LATIN CAPITAL LETTER RAMS HORN..LATIN CAPITAL LETTER S WITH DIAGONAL STROKE +A7CE ; Lu # LATIN CAPITAL LETTER PHARYNGEAL VOICED FRICATIVE A7D0 ; Lu # LATIN CAPITAL LETTER CLOSED INSULAR G +A7D2 ; Lu # LATIN CAPITAL LETTER DOUBLE THORN +A7D4 ; Lu # LATIN CAPITAL LETTER DOUBLE WYNN A7D6 ; Lu # LATIN CAPITAL LETTER MIDDLE SCOTS S A7D8 ; Lu # LATIN CAPITAL LETTER SIGMOID S A7DA ; Lu # LATIN CAPITAL LETTER LAMBDA @@ -1372,6 +1379,7 @@ FF21..FF3A ; Lu # [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAP 10D50..10D65 ; Lu # [22] GARAY CAPITAL LETTER A..GARAY CAPITAL LETTER OLD NA 118A0..118BF ; Lu # [32] WARANG CITI CAPITAL LETTER NGAA..WARANG CITI CAPITAL LETTER VIYO 16E40..16E5F ; Lu # [32] MEDEFAIDRIN CAPITAL LETTER M..MEDEFAIDRIN CAPITAL LETTER Y +16EA0..16EB8 ; Lu # [25] BERIA ERFE CAPITAL LETTER ARKAB..BERIA ERFE CAPITAL LETTER AY 1D400..1D419 ; Lu # [26] MATHEMATICAL BOLD CAPITAL A..MATHEMATICAL BOLD CAPITAL Z 1D434..1D44D ; Lu # [26] MATHEMATICAL ITALIC CAPITAL A..MATHEMATICAL ITALIC CAPITAL Z 1D468..1D481 ; Lu # [26] MATHEMATICAL BOLD ITALIC CAPITAL A..MATHEMATICAL BOLD ITALIC CAPITAL Z @@ -1405,7 +1413,7 @@ FF21..FF3A ; Lu # [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAP 1D7CA ; Lu # MATHEMATICAL BOLD CAPITAL DIGAMMA 1E900..1E921 ; Lu # [34] ADLAM CAPITAL LETTER ALIF..ADLAM CAPITAL LETTER SHA -# Total code points: 1858 +# Total code points: 1886 # ================================================ @@ -1556,7 +1564,7 @@ FF21..FF3A ; Lu # [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAP 024B ; Ll # LATIN SMALL LETTER Q WITH HOOK TAIL 024D ; Ll # LATIN SMALL LETTER R WITH STROKE 024F..0293 ; Ll # [69] LATIN SMALL LETTER Y WITH STROKE..LATIN SMALL LETTER EZH WITH CURL -0295..02AF ; Ll # [27] LATIN LETTER PHARYNGEAL VOICED FRICATIVE..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL +0296..02AF ; Ll # [26] LATIN LETTER INVERTED GLOTTAL STOP..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL 0371 ; Ll # GREEK SMALL LETTER HETA 0373 ; Ll # GREEK SMALL LETTER ARCHAIC SAMPI 0377 ; Ll # GREEK SMALL LETTER PAMPHYLIAN DIGAMMA @@ -2017,6 +2025,7 @@ A7C3 ; Ll # LATIN SMALL LETTER ANGLICANA W A7C8 ; Ll # LATIN SMALL LETTER D WITH SHORT STROKE OVERLAY A7CA ; Ll # LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY A7CD ; Ll # LATIN SMALL LETTER S WITH DIAGONAL STROKE +A7CF ; Ll # LATIN SMALL LETTER PHARYNGEAL VOICED FRICATIVE A7D1 ; Ll # LATIN SMALL LETTER CLOSED INSULAR G A7D3 ; Ll # LATIN SMALL LETTER DOUBLE THORN A7D5 ; Ll # LATIN SMALL LETTER DOUBLE WYNN @@ -2041,6 +2050,7 @@ FF41..FF5A ; Ll # [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL 10D70..10D85 ; Ll # [22] GARAY SMALL LETTER A..GARAY SMALL LETTER OLD NA 118C0..118DF ; Ll # [32] WARANG CITI SMALL LETTER NGAA..WARANG CITI SMALL LETTER VIYO 16E60..16E7F ; Ll # [32] MEDEFAIDRIN SMALL LETTER M..MEDEFAIDRIN SMALL LETTER Y +16EBB..16ED3 ; Ll # [25] BERIA ERFE SMALL LETTER ARKAB..BERIA ERFE SMALL LETTER AY 1D41A..1D433 ; Ll # [26] MATHEMATICAL BOLD SMALL A..MATHEMATICAL BOLD SMALL Z 1D44E..1D454 ; Ll # [7] MATHEMATICAL ITALIC SMALL A..MATHEMATICAL ITALIC SMALL G 1D456..1D467 ; Ll # [18] MATHEMATICAL ITALIC SMALL I..MATHEMATICAL ITALIC SMALL Z @@ -2074,7 +2084,7 @@ FF41..FF5A ; Ll # [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL 1DF25..1DF2A ; Ll # [6] LATIN SMALL LETTER D WITH MID-HEIGHT LEFT HOOK..LATIN SMALL LETTER T WITH MID-HEIGHT LEFT HOOK 1E922..1E943 ; Ll # [34] ADLAM SMALL LETTER ALIF..ADLAM SMALL LETTER SHA -# Total code points: 2258 +# Total code points: 2283 # ================================================ @@ -2143,7 +2153,7 @@ A69C..A69D ; Lm # [2] MODIFIER LETTER CYRILLIC HARD SIGN..MODIFIER LETTER C A717..A71F ; Lm # [9] MODIFIER LETTER DOT VERTICAL BAR..MODIFIER LETTER LOW INVERTED EXCLAMATION MARK A770 ; Lm # MODIFIER LETTER US A788 ; Lm # MODIFIER LETTER LOW CIRCUMFLEX ACCENT -A7F2..A7F4 ; Lm # [3] MODIFIER LETTER CAPITAL C..MODIFIER LETTER CAPITAL Q +A7F1..A7F4 ; Lm # [4] MODIFIER LETTER CAPITAL S..MODIFIER LETTER CAPITAL Q A7F8..A7F9 ; Lm # [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE A9CF ; Lm # JAVANESE PANGRANGKEP A9E6 ; Lm # MYANMAR MODIFIER LETTER SHAN REDUPLICATION @@ -2159,21 +2169,25 @@ FF9E..FF9F ; Lm # [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAK 107B2..107BA ; Lm # [9] MODIFIER LETTER SMALL CAPITAL Y..MODIFIER LETTER SMALL S WITH CURL 10D4E ; Lm # GARAY VOWEL LENGTH MARK 10D6F ; Lm # GARAY REDUPLICATION MARK +10EC5 ; Lm # ARABIC SMALL YEH BARREE WITH TWO DOTS BELOW +11DD9 ; Lm # TOLONG SIKI SIGN SELA 16B40..16B43 ; Lm # [4] PAHAWH HMONG SIGN VOS SEEV..PAHAWH HMONG SIGN IB YAM 16D40..16D42 ; Lm # [3] KIRAT RAI SIGN ANUSVARA..KIRAT RAI SIGN VISARGA 16D6B..16D6C ; Lm # [2] KIRAT RAI SIGN VIRAMA..KIRAT RAI SIGN SAAT 16F93..16F9F ; Lm # [13] MIAO LETTER TONE-2..MIAO LETTER REFORMED TONE-8 16FE0..16FE1 ; Lm # [2] TANGUT ITERATION MARK..NUSHU ITERATION MARK 16FE3 ; Lm # OLD CHINESE ITERATION MARK +16FF2..16FF3 ; Lm # [2] CHINESE SMALL SIMPLIFIED ER..CHINESE SMALL TRADITIONAL ER 1AFF0..1AFF3 ; Lm # [4] KATAKANA LETTER MINNAN TONE-2..KATAKANA LETTER MINNAN TONE-5 1AFF5..1AFFB ; Lm # [7] KATAKANA LETTER MINNAN TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-5 1AFFD..1AFFE ; Lm # [2] KATAKANA LETTER MINNAN NASALIZED TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-8 1E030..1E06D ; Lm # [62] MODIFIER LETTER CYRILLIC SMALL A..MODIFIER LETTER CYRILLIC SMALL STRAIGHT U WITH STROKE 1E137..1E13D ; Lm # [7] NYIAKENG PUACHUE HMONG SIGN FOR PERSON..NYIAKENG PUACHUE HMONG SYLLABLE LENGTHENER 1E4EB ; Lm # NAG MUNDARI SIGN OJOD +1E6FF ; Lm # TAI YO XAM LAI 1E94B ; Lm # ADLAM NASALIZATION MARK -# Total code points: 404 +# Total code points: 410 # ================================================ @@ -2183,7 +2197,7 @@ FF9E..FF9F ; Lm # [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAK 00BA ; Lo # MASCULINE ORDINAL INDICATOR 01BB ; Lo # LATIN LETTER TWO WITH STROKE 01C0..01C3 ; Lo # [4] LATIN LETTER DENTAL CLICK..LATIN LETTER RETROFLEX CLICK -0294 ; Lo # LATIN LETTER GLOTTAL STOP +0294..0295 ; Lo # [2] LATIN LETTER GLOTTAL STOP..LATIN LETTER PHARYNGEAL VOICED FRICATIVE 05D0..05EA ; Lo # [27] HEBREW LETTER ALEF..HEBREW LETTER TAV 05EF..05F2 ; Lo # [4] HEBREW YOD TRIANGLE..HEBREW LIGATURE YIDDISH DOUBLE YOD 0620..063F ; Lo # [32] ARABIC LETTER KASHMIRI YEH..ARABIC LETTER FARSI YEH WITH THREE DOTS ABOVE @@ -2203,7 +2217,7 @@ FF9E..FF9F ; Lm # [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAK 0840..0858 ; Lo # [25] MANDAIC LETTER HALQA..MANDAIC LETTER AIN 0860..086A ; Lo # [11] SYRIAC LETTER MALAYALAM NGA..SYRIAC LETTER MALAYALAM SSA 0870..0887 ; Lo # [24] ARABIC LETTER ALEF WITH ATTACHED FATHA..ARABIC BASELINE ROUND DOT -0889..088E ; Lo # [6] ARABIC LETTER NOON WITH INVERTED SMALL V..ARABIC VERTICAL TAIL +0889..088F ; Lo # [7] ARABIC LETTER NOON WITH INVERTED SMALL V..ARABIC LETTER NOON WITH RING ABOVE 08A0..08C8 ; Lo # [41] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER GRAF 0904..0939 ; Lo # [54] DEVANAGARI LETTER SHORT A..DEVANAGARI LETTER HA 093D ; Lo # DEVANAGARI SIGN AVAGRAHA @@ -2269,7 +2283,7 @@ FF9E..FF9F ; Lm # [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAK 0C2A..0C39 ; Lo # [16] TELUGU LETTER PA..TELUGU LETTER HA 0C3D ; Lo # TELUGU SIGN AVAGRAHA 0C58..0C5A ; Lo # [3] TELUGU LETTER TSA..TELUGU LETTER RRRA -0C5D ; Lo # TELUGU LETTER NAKAARA POLLU +0C5C..0C5D ; Lo # [2] TELUGU ARCHAIC SHRII..TELUGU LETTER NAKAARA POLLU 0C60..0C61 ; Lo # [2] TELUGU LETTER VOCALIC RR..TELUGU LETTER VOCALIC LL 0C80 ; Lo # KANNADA SIGN SPACING CANDRABINDU 0C85..0C8C ; Lo # [8] KANNADA LETTER A..KANNADA LETTER VOCALIC L @@ -2278,7 +2292,7 @@ FF9E..FF9F ; Lm # [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAK 0CAA..0CB3 ; Lo # [10] KANNADA LETTER PA..KANNADA LETTER LLA 0CB5..0CB9 ; Lo # [5] KANNADA LETTER VA..KANNADA LETTER HA 0CBD ; Lo # KANNADA SIGN AVAGRAHA -0CDD..0CDE ; Lo # [2] KANNADA LETTER NAKAARA POLLU..KANNADA LETTER FA +0CDC..0CDE ; Lo # [3] KANNADA ARCHAIC SHRII..KANNADA LETTER FA 0CE0..0CE1 ; Lo # [2] KANNADA LETTER VOCALIC RR..KANNADA LETTER VOCALIC LL 0CF1..0CF2 ; Lo # [2] KANNADA SIGN JIHVAMULIYA..KANNADA SIGN UPADHMANIYA 0D04..0D0C ; Lo # [9] MALAYALAM LETTER VEDIC ANUSVARA..MALAYALAM LETTER VOCALIC L @@ -2504,6 +2518,7 @@ FFDA..FFDC ; Lo # [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER I 108F4..108F5 ; Lo # [2] HATRAN LETTER SHIN..HATRAN LETTER TAW 10900..10915 ; Lo # [22] PHOENICIAN LETTER ALF..PHOENICIAN LETTER TAU 10920..10939 ; Lo # [26] LYDIAN LETTER A..LYDIAN LETTER C +10940..10959 ; Lo # [26] SIDETIC LETTER N01..SIDETIC LETTER N26 10980..109B7 ; Lo # [56] MEROITIC HIEROGLYPHIC LETTER A..MEROITIC CURSIVE LETTER DA 109BE..109BF ; Lo # [2] MEROITIC CURSIVE LOGOGRAM RMT..MEROITIC CURSIVE LOGOGRAM IMN 10A00 ; Lo # KHAROSHTHI LETTER A @@ -2525,6 +2540,7 @@ FFDA..FFDC ; Lo # [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER I 10E80..10EA9 ; Lo # [42] YEZIDI LETTER ELIF..YEZIDI LETTER ET 10EB0..10EB1 ; Lo # [2] YEZIDI LETTER LAM WITH DOT ABOVE..YEZIDI LETTER YOT WITH CIRCUMFLEX ABOVE 10EC2..10EC4 ; Lo # [3] ARABIC LETTER DAL WITH TWO DOTS VERTICALLY BELOW..ARABIC LETTER KAF WITH TWO DOTS VERTICALLY BELOW +10EC6..10EC7 ; Lo # [2] ARABIC LETTER THIN NOON..ARABIC LETTER YEH WITH FOUR DOTS BELOW 10F00..10F1C ; Lo # [29] OLD SOGDIAN LETTER ALEPH..OLD SOGDIAN LETTER FINAL TAW WITH VERTICAL TAIL 10F27 ; Lo # OLD SOGDIAN LIGATURE AYIN-DALETH 10F30..10F45 ; Lo # [22] SOGDIAN LETTER ALEPH..SOGDIAN INDEPENDENT SHIN @@ -2616,6 +2632,8 @@ FFDA..FFDC ; Lo # [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER I 11D67..11D68 ; Lo # [2] GUNJALA GONDI LETTER EE..GUNJALA GONDI LETTER AI 11D6A..11D89 ; Lo # [32] GUNJALA GONDI LETTER OO..GUNJALA GONDI LETTER SA 11D98 ; Lo # GUNJALA GONDI OM +11DB0..11DD8 ; Lo # [41] TOLONG SIKI LETTER I..TOLONG SIKI LETTER RRH +11DDA..11DDB ; Lo # [2] TOLONG SIKI SIGN HECAKA..TOLONG SIKI UNGGA 11EE0..11EF2 ; Lo # [19] MAKASAR LETTER KA..MAKASAR ANGKA 11F02 ; Lo # KAWI SIGN REPHA 11F04..11F10 ; Lo # [13] KAWI LETTER A..KAWI LETTER O @@ -2639,9 +2657,9 @@ FFDA..FFDC ; Lo # [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER I 16D43..16D6A ; Lo # [40] KIRAT RAI LETTER A..KIRAT RAI VOWEL SIGN AU 16F00..16F4A ; Lo # [75] MIAO LETTER PA..MIAO LETTER RTE 16F50 ; Lo # MIAO LETTER NASALIZATION -17000..187F7 ; Lo # [6136] TANGUT IDEOGRAPH-17000..TANGUT IDEOGRAPH-187F7 -18800..18CD5 ; Lo # [1238] TANGUT COMPONENT-001..KHITAN SMALL SCRIPT CHARACTER-18CD5 -18CFF..18D08 ; Lo # [10] KHITAN SMALL SCRIPT CHARACTER-18CFF..TANGUT IDEOGRAPH-18D08 +17000..18CD5 ; Lo # [7382] TANGUT IDEOGRAPH-17000..KHITAN SMALL SCRIPT CHARACTER-18CD5 +18CFF..18D1E ; Lo # [32] KHITAN SMALL SCRIPT CHARACTER-18CFF..TANGUT IDEOGRAPH-18D1E +18D80..18DF2 ; Lo # [115] TANGUT COMPONENT-769..TANGUT COMPONENT-883 1B000..1B122 ; Lo # [291] KATAKANA LETTER ARCHAIC E..KATAKANA LETTER ARCHAIC WU 1B132 ; Lo # HIRAGANA LETTER SMALL KO 1B150..1B152 ; Lo # [3] HIRAGANA LETTER SMALL WI..HIRAGANA LETTER SMALL WO @@ -2660,6 +2678,12 @@ FFDA..FFDC ; Lo # [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER I 1E4D0..1E4EA ; Lo # [27] NAG MUNDARI LETTER O..NAG MUNDARI LETTER ELL 1E5D0..1E5ED ; Lo # [30] OL ONAL LETTER O..OL ONAL LETTER EG 1E5F0 ; Lo # OL ONAL SIGN HODDOND +1E6C0..1E6DE ; Lo # [31] TAI YO LETTER LOW KO..TAI YO LETTER HIGH KVO +1E6E0..1E6E2 ; Lo # [3] TAI YO LETTER AA..TAI YO LETTER UE +1E6E4..1E6E5 ; Lo # [2] TAI YO LETTER U..TAI YO LETTER AE +1E6E7..1E6ED ; Lo # [7] TAI YO LETTER O..TAI YO LETTER AUE +1E6F0..1E6F4 ; Lo # [5] TAI YO LETTER AN..TAI YO LETTER AP +1E6FE ; Lo # TAI YO SYMBOL MUEANG 1E7E0..1E7E6 ; Lo # [7] ETHIOPIC SYLLABLE HHYA..ETHIOPIC SYLLABLE HHYO 1E7E8..1E7EB ; Lo # [4] ETHIOPIC SYLLABLE GURAGE HHWA..ETHIOPIC SYLLABLE HHWE 1E7ED..1E7EE ; Lo # [2] ETHIOPIC SYLLABLE GURAGE MWI..ETHIOPIC SYLLABLE GURAGE MWEE @@ -2699,16 +2723,15 @@ FFDA..FFDC ; Lo # [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER I 1EEA5..1EEA9 ; Lo # [5] ARABIC MATHEMATICAL DOUBLE-STRUCK WAW..ARABIC MATHEMATICAL DOUBLE-STRUCK YEH 1EEAB..1EEBB ; Lo # [17] ARABIC MATHEMATICAL DOUBLE-STRUCK LAM..ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN 20000..2A6DF ; Lo # [42720] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DF -2A700..2B739 ; Lo # [4154] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B739 -2B740..2B81D ; Lo # [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D -2B820..2CEA1 ; Lo # [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1 +2A700..2B81D ; Lo # [4382] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B81D +2B820..2CEAD ; Lo # [5774] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEAD 2CEB0..2EBE0 ; Lo # [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0 2EBF0..2EE5D ; Lo # [622] CJK UNIFIED IDEOGRAPH-2EBF0..CJK UNIFIED IDEOGRAPH-2EE5D 2F800..2FA1D ; Lo # [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D 30000..3134A ; Lo # [4939] CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A -31350..323AF ; Lo # [4192] CJK UNIFIED IDEOGRAPH-31350..CJK UNIFIED IDEOGRAPH-323AF +31350..33479 ; Lo # [8490] CJK UNIFIED IDEOGRAPH-31350..CJK UNIFIED IDEOGRAPH-33479 -# Total code points: 136477 +# Total code points: 141062 # ================================================ @@ -2856,7 +2879,8 @@ FFDA..FFDC ; Lo # [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER I 1A73..1A7C ; Mn # [10] TAI THAM VOWEL SIGN OA ABOVE..TAI THAM SIGN KHUEN-LUE KARAN 1A7F ; Mn # TAI THAM COMBINING CRYPTOGRAMMIC DOT 1AB0..1ABD ; Mn # [14] COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW -1ABF..1ACE ; Mn # [16] COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER INSULAR T +1ABF..1ADD ; Mn # [31] COMBINING LATIN SMALL LETTER W BELOW..COMBINING DOT-AND-RING BELOW +1AE0..1AEB ; Mn # [12] COMBINING LEFT TACK ABOVE..COMBINING DOUBLE RIGHTWARDS ARROW ABOVE 1B00..1B03 ; Mn # [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG 1B34 ; Mn # BALINESE SIGN REREKAN 1B36..1B3A ; Mn # [5] BALINESE VOWEL SIGN ULU..BALINESE VOWEL SIGN RA REPA @@ -2938,7 +2962,7 @@ FE20..FE2F ; Mn # [16] COMBINING LIGATURE LEFT HALF..COMBINING CYRILLIC TITL 10D24..10D27 ; Mn # [4] HANIFI ROHINGYA SIGN HARBAHAY..HANIFI ROHINGYA SIGN TASSI 10D69..10D6D ; Mn # [5] GARAY VOWEL SIGN E..GARAY CONSONANT NASALIZATION MARK 10EAB..10EAC ; Mn # [2] YEZIDI COMBINING HAMZA MARK..YEZIDI COMBINING MADDA MARK -10EFC..10EFF ; Mn # [4] ARABIC COMBINING ALEF OVERLAY..ARABIC SMALL LOW WORD MADDA +10EFA..10EFF ; Mn # [6] ARABIC DOUBLE VERTICAL BAR BELOW..ARABIC SMALL LOW WORD MADDA 10F46..10F50 ; Mn # [11] SOGDIAN COMBINING DOT BELOW..SOGDIAN COMBINING STROKE BELOW 10F82..10F85 ; Mn # [4] OLD UYGHUR COMBINING DOT ABOVE..OLD UYGHUR COMBINING TWO DOTS BELOW 11001 ; Mn # BRAHMI SIGN ANUSVARA @@ -3013,6 +3037,9 @@ FE20..FE2F ; Mn # [16] COMBINING LIGATURE LEFT HALF..COMBINING CYRILLIC TITL 11A59..11A5B ; Mn # [3] SOYOMBO VOWEL SIGN VOCALIC R..SOYOMBO VOWEL LENGTH MARK 11A8A..11A96 ; Mn # [13] SOYOMBO FINAL CONSONANT SIGN G..SOYOMBO SIGN ANUSVARA 11A98..11A99 ; Mn # [2] SOYOMBO GEMINATION MARK..SOYOMBO SUBJOINER +11B60 ; Mn # SHARADA VOWEL SIGN OE +11B62..11B64 ; Mn # [3] SHARADA VOWEL SIGN UE..SHARADA VOWEL SIGN SHORT E +11B66 ; Mn # SHARADA VOWEL SIGN CANDRA E 11C30..11C36 ; Mn # [7] BHAIKSUKI VOWEL SIGN I..BHAIKSUKI VOWEL SIGN VOCALIC L 11C38..11C3D ; Mn # [6] BHAIKSUKI VOWEL SIGN E..BHAIKSUKI SIGN ANUSVARA 11C3F ; Mn # BHAIKSUKI SIGN VIRAMA @@ -3068,11 +3095,15 @@ FE20..FE2F ; Mn # [16] COMBINING LIGATURE LEFT HALF..COMBINING CYRILLIC TITL 1E2EC..1E2EF ; Mn # [4] WANCHO TONE TUP..WANCHO TONE KOINI 1E4EC..1E4EF ; Mn # [4] NAG MUNDARI SIGN MUHOR..NAG MUNDARI SIGN SUTUH 1E5EE..1E5EF ; Mn # [2] OL ONAL SIGN MU..OL ONAL SIGN IKIR +1E6E3 ; Mn # TAI YO SIGN UE +1E6E6 ; Mn # TAI YO SIGN AU +1E6EE..1E6EF ; Mn # [2] TAI YO SIGN AY..TAI YO SIGN ANG +1E6F5 ; Mn # TAI YO SIGN OM 1E8D0..1E8D6 ; Mn # [7] MENDE KIKAKUI COMBINING NUMBER TEENS..MENDE KIKAKUI COMBINING NUMBER MILLIONS 1E944..1E94A ; Mn # [7] ADLAM ALIF LENGTHENER..ADLAM NUKTA E0100..E01EF ; Mn # [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256 -# Total code points: 2020 +# Total code points: 2059 # ================================================ @@ -3262,6 +3293,9 @@ ABEC ; Mc # MEETEI MAYEK LUM IYEK 11A39 ; Mc # ZANABAZAR SQUARE SIGN VISARGA 11A57..11A58 ; Mc # [2] SOYOMBO VOWEL SIGN AI..SOYOMBO VOWEL SIGN AU 11A97 ; Mc # SOYOMBO SIGN VISARGA +11B61 ; Mc # SHARADA VOWEL SIGN OOE +11B65 ; Mc # SHARADA VOWEL SIGN SHORT O +11B67 ; Mc # SHARADA VOWEL SIGN CANDRA O 11C2F ; Mc # BHAIKSUKI VOWEL SIGN AA 11C3E ; Mc # BHAIKSUKI SIGN VISARGA 11CA9 ; Mc # MARCHEN SUBJOINED LETTER YA @@ -3281,7 +3315,7 @@ ABEC ; Mc # MEETEI MAYEK LUM IYEK 1D165..1D166 ; Mc # [2] MUSICAL SYMBOL COMBINING STEM..MUSICAL SYMBOL COMBINING SPRECHGESANG STEM 1D16D..1D172 ; Mc # [6] MUSICAL SYMBOL COMBINING AUGMENTATION DOT..MUSICAL SYMBOL COMBINING FLAG-5 -# Total code points: 468 +# Total code points: 471 # ================================================ @@ -3344,6 +3378,7 @@ FF10..FF19 ; Nd # [10] FULLWIDTH DIGIT ZERO..FULLWIDTH DIGIT NINE 11C50..11C59 ; Nd # [10] BHAIKSUKI DIGIT ZERO..BHAIKSUKI DIGIT NINE 11D50..11D59 ; Nd # [10] MASARAM GONDI DIGIT ZERO..MASARAM GONDI DIGIT NINE 11DA0..11DA9 ; Nd # [10] GUNJALA GONDI DIGIT ZERO..GUNJALA GONDI DIGIT NINE +11DE0..11DE9 ; Nd # [10] TOLONG SIKI DIGIT ZERO..TOLONG SIKI DIGIT NINE 11F50..11F59 ; Nd # [10] KAWI DIGIT ZERO..KAWI DIGIT NINE 16130..16139 ; Nd # [10] GURUNG KHEMA DIGIT ZERO..GURUNG KHEMA DIGIT NINE 16A60..16A69 ; Nd # [10] MRO DIGIT ZERO..MRO DIGIT NINE @@ -3359,7 +3394,7 @@ FF10..FF19 ; Nd # [10] FULLWIDTH DIGIT ZERO..FULLWIDTH DIGIT NINE 1E950..1E959 ; Nd # [10] ADLAM DIGIT ZERO..ADLAM DIGIT NINE 1FBF0..1FBF9 ; Nd # [10] SEGMENTED DIGIT ZERO..SEGMENTED DIGIT NINE -# Total code points: 760 +# Total code points: 770 # ================================================ @@ -3377,8 +3412,9 @@ A6E6..A6EF ; Nl # [10] BAMUM LETTER MO..BAMUM LETTER KOGHOM 1034A ; Nl # GOTHIC LETTER NINE HUNDRED 103D1..103D5 ; Nl # [5] OLD PERSIAN NUMBER ONE..OLD PERSIAN NUMBER HUNDRED 12400..1246E ; Nl # [111] CUNEIFORM NUMERIC SIGN TWO ASH..CUNEIFORM NUMERIC SIGN NINE U VARIANT FORM +16FF4..16FF6 ; Nl # [3] YANGQIN SIGN SLOW ONE BEAT..YANGQIN SIGN SLOW TWO BEATS -# Total code points: 236 +# Total code points: 239 # ================================================ @@ -3900,6 +3936,7 @@ FF64..FF65 ; Po # [2] HALFWIDTH IDEOGRAPHIC COMMA..HALFWIDTH KATAKANA MIDDL 10AF0..10AF6 ; Po # [7] MANICHAEAN PUNCTUATION STAR..MANICHAEAN PUNCTUATION LINE FILLER 10B39..10B3F ; Po # [7] AVESTAN ABBREVIATION MARK..LARGE ONE RING OVER TWO RINGS PUNCTUATION 10B99..10B9C ; Po # [4] PSALTER PAHLAVI SECTION MARK..PSALTER PAHLAVI FOUR DOTS WITH DOT +10ED0 ; Po # ARABIC BIBLICAL END OF VERSE 10F55..10F59 ; Po # [5] SOGDIAN PUNCTUATION TWO VERTICAL BARS..SOGDIAN PUNCTUATION HALF CIRCLE WITH DOT 10F86..10F89 ; Po # [4] OLD UYGHUR PUNCTUATION BAR..OLD UYGHUR PUNCTUATION FOUR DOTS 11047..1104D ; Po # [7] BRAHMI DANDA..BRAHMI PUNCTUATION LOTUS @@ -3951,7 +3988,7 @@ FF64..FF65 ; Po # [2] HALFWIDTH IDEOGRAPHIC COMMA..HALFWIDTH KATAKANA MIDDL 1E5FF ; Po # OL ONAL ABBREVIATION SIGN 1E95E..1E95F ; Po # [2] ADLAM INITIAL EXCLAMATION MARK..ADLAM INITIAL QUESTION MARK -# Total code points: 640 +# Total code points: 641 # ================================================ @@ -4011,6 +4048,7 @@ FF5E ; Sm # FULLWIDTH TILDE FFE2 ; Sm # FULLWIDTH NOT SIGN FFE9..FFEC ; Sm # [4] HALFWIDTH LEFTWARDS ARROW..HALFWIDTH DOWNWARDS ARROW 10D8E..10D8F ; Sm # [2] GARAY PLUS SIGN..GARAY MINUS SIGN +1CEF0 ; Sm # MEDIUM SMALL WHITE CIRCLE WITH HORIZONTAL BAR 1D6C1 ; Sm # MATHEMATICAL BOLD NABLA 1D6DB ; Sm # MATHEMATICAL BOLD PARTIAL DIFFERENTIAL 1D6FB ; Sm # MATHEMATICAL ITALIC NABLA @@ -4022,8 +4060,9 @@ FFE9..FFEC ; Sm # [4] HALFWIDTH LEFTWARDS ARROW..HALFWIDTH DOWNWARDS ARROW 1D7A9 ; Sm # MATHEMATICAL SANS-SERIF BOLD ITALIC NABLA 1D7C3 ; Sm # MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL 1EEF0..1EEF1 ; Sm # [2] ARABIC MATHEMATICAL OPERATOR MEEM WITH HAH WITH TATWEEL..ARABIC MATHEMATICAL OPERATOR HAH WITH DAL +1F8D0..1F8D8 ; Sm # [9] LONG RIGHTWARDS ARROW OVER LONG LEFTWARDS ARROW..LONG LEFT RIGHT ARROW WITH DEPENDENT LOBE -# Total code points: 950 +# Total code points: 960 # ================================================ @@ -4040,7 +4079,7 @@ FFE9..FFEC ; Sm # [4] HALFWIDTH LEFTWARDS ARROW..HALFWIDTH DOWNWARDS ARROW 0BF9 ; Sc # TAMIL RUPEE SIGN 0E3F ; Sc # THAI CURRENCY SYMBOL BAHT 17DB ; Sc # KHMER CURRENCY SYMBOL RIEL -20A0..20C0 ; Sc # [33] EURO-CURRENCY SIGN..SOM SIGN +20A0..20C1 ; Sc # [34] EURO-CURRENCY SIGN..SAUDI RIYAL SIGN A838 ; Sc # NORTH INDIC RUPEE MARK FDFC ; Sc # RIAL SIGN FE69 ; Sc # SMALL DOLLAR SIGN @@ -4051,7 +4090,7 @@ FFE5..FFE6 ; Sc # [2] FULLWIDTH YEN SIGN..FULLWIDTH WON SIGN 1E2FF ; Sc # WANCHO NGUN SIGN 1ECB0 ; Sc # INDIC SIYAQ RUPEE MARK -# Total code points: 63 +# Total code points: 64 # ================================================ @@ -4174,8 +4213,7 @@ FFE3 ; Sk # FULLWIDTH MACRON 2B00..2B2F ; So # [48] NORTH EAST WHITE ARROW..WHITE VERTICAL ELLIPSE 2B45..2B46 ; So # [2] LEFTWARDS QUADRUPLE ARROW..RIGHTWARDS QUADRUPLE ARROW 2B4D..2B73 ; So # [39] DOWNWARDS TRIANGLE-HEADED ZIGZAG ARROW..DOWNWARDS TRIANGLE-HEADED ARROW TO BAR -2B76..2B95 ; So # [32] NORTH WEST TRIANGLE-HEADED ARROW TO BAR..RIGHTWARDS BLACK ARROW -2B97..2BFF ; So # [105] SYMBOL FOR TYPE A ELECTRONICS..HELLSCHREIBER PAUSE SYMBOL +2B76..2BFF ; So # [138] NORTH WEST TRIANGLE-HEADED ARROW TO BAR..HELLSCHREIBER PAUSE SYMBOL 2CE5..2CEA ; So # [6] COPTIC SYMBOL MI RO..COPTIC SYMBOL SHIMA SIMA 2E50..2E51 ; So # [2] CROSS PATTY WITH RIGHT CROSSBAR..CROSS PATTY WITH LEFT CROSSBAR 2E80..2E99 ; So # [26] CJK RADICAL REPEAT..CJK RADICAL RAP @@ -4203,8 +4241,10 @@ A828..A82B ; So # [4] SYLOTI NAGRI POETRY MARK-1..SYLOTI NAGRI POETRY MARK- A836..A837 ; So # [2] NORTH INDIC QUARTER MARK..NORTH INDIC PLACEHOLDER MARK A839 ; So # NORTH INDIC QUANTITY MARK AA77..AA79 ; So # [3] MYANMAR SYMBOL AITON EXCLAMATION..MYANMAR SYMBOL AITON TWO +FBC3..FBD2 ; So # [16] ARABIC LIGATURE JALLA WA-ALAA..ARABIC LIGATURE ALAYHI AR-RAHMAH FD40..FD4F ; So # [16] ARABIC LIGATURE RAHIMAHU ALLAAH..ARABIC LIGATURE RAHIMAHUM ALLAAH -FDCF ; So # ARABIC LIGATURE SALAAMUHU ALAYNAA +FD90..FD91 ; So # [2] ARABIC LIGATURE RAHMATU ALLAAHI ALAYH..ARABIC LIGATURE RAHMATU ALLAAHI ALAYHAA +FDC8..FDCF ; So # [8] ARABIC LIGATURE RAHIMAHU ALLAAH TAAALAA..ARABIC LIGATURE SALAAMUHU ALAYNAA FDFD..FDFF ; So # [3] ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM..ARABIC LIGATURE AZZA WA JALL FFE4 ; So # FULLWIDTH BROKEN BAR FFE8 ; So # HALFWIDTH FORMS LIGHT VERTICAL @@ -4218,6 +4258,7 @@ FFFC..FFFD ; So # [2] OBJECT REPLACEMENT CHARACTER..REPLACEMENT CHARACTER 101D0..101FC ; So # [45] PHAISTOS DISC SIGN PEDESTRIAN..PHAISTOS DISC SIGN WAVY BAND 10877..10878 ; So # [2] PALMYRENE LEFT-POINTING FLEURON..PALMYRENE RIGHT-POINTING FLEURON 10AC8 ; So # MANICHAEAN SIGN UD +10ED1..10ED8 ; So # [8] ARABIC LIGATURE ALAYHAA AS-SALAATU WAS-SALAAM..ARABIC LIGATURE NAWWARA ALLAAHU MARQADAH 1173F ; So # AHOM SYMBOL VI 11FD5..11FDC ; So # [8] TAMIL SIGN NEL..TAMIL SIGN MUKKURUNI 11FE1..11FF1 ; So # [17] TAMIL SIGN PAARAM..TAMIL SIGN VAKAIYARAA @@ -4225,7 +4266,10 @@ FFFC..FFFD ; So # [2] OBJECT REPLACEMENT CHARACTER..REPLACEMENT CHARACTER 16B45 ; So # PAHAWH HMONG SIGN CIM TSOV ROG 1BC9C ; So # DUPLOYAN SIGN O WITH CROSS 1CC00..1CCEF ; So # [240] UP-POINTING GO-KART..OUTLINED LATIN CAPITAL LETTER Z +1CCFA..1CCFC ; So # [3] SNAKE SYMBOL..NOSE SYMBOL 1CD00..1CEB3 ; So # [436] BLOCK OCTANT-3..BLACK RIGHT TRIANGLE CARET +1CEBA..1CED0 ; So # [23] FRAGILE SYMBOL..LEUKOTHEA +1CEE0..1CEEF ; So # [16] GEOMANTIC FIGURE POPULUS..GEOMANTIC FIGURE VIA 1CF50..1CFC3 ; So # [116] ZNAMENNY NEUME KRYUK..ZNAMENNY NEUME PAUK 1D000..1D0F5 ; So # [246] BYZANTINE MUSICAL SYMBOL PSILI..BYZANTINE MUSICAL SYMBOL GORGON NEO KATO 1D100..1D126 ; So # [39] MUSICAL SYMBOL SINGLE BARLINE..MUSICAL SYMBOL DRUM CLEF-2 @@ -4258,11 +4302,10 @@ FFFC..FFFD ; So # [2] OBJECT REPLACEMENT CHARACTER..REPLACEMENT CHARACTER 1F250..1F251 ; So # [2] CIRCLED IDEOGRAPH ADVANTAGE..CIRCLED IDEOGRAPH ACCEPT 1F260..1F265 ; So # [6] ROUNDED SYMBOL FOR FU..ROUNDED SYMBOL FOR CAI 1F300..1F3FA ; So # [251] CYCLONE..AMPHORA -1F400..1F6D7 ; So # [728] RAT..ELEVATOR +1F400..1F6D8 ; So # [729] RAT..LANDSLIDE 1F6DC..1F6EC ; So # [17] WIRELESS..AIRPLANE ARRIVING 1F6F0..1F6FC ; So # [13] SATELLITE..ROLLER SKATE -1F700..1F776 ; So # [119] ALCHEMICAL SYMBOL FOR QUINTESSENCE..LUNAR ECLIPSE -1F77B..1F7D9 ; So # [95] HAUMEA..NINE POINTED WHITE STAR +1F700..1F7D9 ; So # [218] ALCHEMICAL SYMBOL FOR QUINTESSENCE..NINE POINTED WHITE STAR 1F7E0..1F7EB ; So # [12] LARGE ORANGE CIRCLE..LARGE BROWN SQUARE 1F7F0 ; So # HEAVY EQUALS SIGN 1F800..1F80B ; So # [12] LEFTWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD..DOWNWARDS ARROW WITH LARGE TRIANGLE ARROWHEAD @@ -4272,18 +4315,20 @@ FFFC..FFFD ; So # [2] OBJECT REPLACEMENT CHARACTER..REPLACEMENT CHARACTER 1F890..1F8AD ; So # [30] LEFTWARDS TRIANGLE ARROWHEAD..WHITE ARROW SHAFT WIDTH TWO THIRDS 1F8B0..1F8BB ; So # [12] ARROW POINTING UPWARDS THEN NORTH WEST..SOUTH WEST ARROW FROM BAR 1F8C0..1F8C1 ; So # [2] LEFTWARDS ARROW FROM DOWNWARDS ARROW..RIGHTWARDS ARROW FROM DOWNWARDS ARROW -1F900..1FA53 ; So # [340] CIRCLED CROSS FORMEE WITH FOUR DOTS..BLACK CHESS KNIGHT-BISHOP +1F900..1FA57 ; So # [344] CIRCLED CROSS FORMEE WITH FOUR DOTS..BLACK CHESS ALFIL 1FA60..1FA6D ; So # [14] XIANGQI RED GENERAL..XIANGQI BLACK SOLDIER 1FA70..1FA7C ; So # [13] BALLET SHOES..CRUTCH -1FA80..1FA89 ; So # [10] YO-YO..HARP -1FA8F..1FAC6 ; So # [56] SHOVEL..FINGERPRINT -1FACE..1FADC ; So # [15] MOOSE..ROOT VEGETABLE -1FADF..1FAE9 ; So # [11] SPLATTER..FACE WITH BAGS UNDER EYES -1FAF0..1FAF8 ; So # [9] HAND WITH INDEX FINGER AND THUMB CROSSED..RIGHTWARDS PUSHING HAND +1FA80..1FA8A ; So # [11] YO-YO..TROMBONE +1FA8E..1FAC6 ; So # [57] TREASURE CHEST..FINGERPRINT +1FAC8 ; So # HAIRY CREATURE +1FACD..1FADC ; So # [16] ORCA..ROOT VEGETABLE +1FADF..1FAEA ; So # [12] SPLATTER..DISTORTED FACE +1FAEF..1FAF8 ; So # [10] FIGHT CLOUD..RIGHTWARDS PUSHING HAND 1FB00..1FB92 ; So # [147] BLOCK SEXTANT-1..UPPER HALF INVERSE MEDIUM SHADE AND LOWER HALF BLOCK 1FB94..1FBEF ; So # [92] LEFT HALF INVERSE MEDIUM SHADE AND RIGHT HALF BLOCK..TOP LEFT JUSTIFIED LOWER RIGHT QUARTER BLACK CIRCLE +1FBFA ; So # ALARM BELL SYMBOL -# Total code points: 7376 +# Total code points: 7468 # ================================================ diff --git a/contrib/unicode/DerivedNormalizationProps.txt b/contrib/unicode/DerivedNormalizationProps.txt index ce636abb537a..448ba69d6399 100644 --- a/contrib/unicode/DerivedNormalizationProps.txt +++ b/contrib/unicode/DerivedNormalizationProps.txt @@ -1,6 +1,6 @@ -# DerivedNormalizationProps-16.0.0.txt -# Date: 2024-04-30, 21:48:18 GMT -# © 2024 Unicode®, Inc. +# DerivedNormalizationProps-17.0.0.txt +# Date: 2025-01-27, 18:09:14 GMT +# © 2025 Unicode®, Inc. # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. # For terms of use and license, see https://www.unicode.org/terms_of_use.html # @@ -132,6 +132,7 @@ 33DD ; FC_NFKC; 0077 0062 # So SQUARE WB 33DE ; FC_NFKC; 0076 2215 006D # So SQUARE V OVER M 33DF ; FC_NFKC; 0061 2215 006D # So SQUARE A OVER M +A7F1 ; FC_NFKC; 0073 # Lm MODIFIER LETTER CAPITAL S A7F2 ; FC_NFKC; 0063 # Lm MODIFIER LETTER CAPITAL C A7F3 ; FC_NFKC; 0066 # Lm MODIFIER LETTER CAPITAL F A7F4 ; FC_NFKC; 0071 # Lm MODIFIER LETTER CAPITAL Q @@ -679,7 +680,7 @@ A7F8 ; FC_NFKC; 0127 # Lm MODIFIER LETTER CAPITAL H WITH STROKE 1F16C ; FC_NFKC; 006D 0072 # So RAISED MR SIGN 1F190 ; FC_NFKC; 0064 006A # So SQUARE DJ -# Total code points: 663 +# Total code points: 664 # ================================================ @@ -1515,7 +1516,7 @@ FB46..FB4E ; NFC_QC; N # Lo [9] HEBREW LETTER TSADI WITH DAGESH..HEBREW LET 32C0..33FF ; NFKD_QC; N # So [320] IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY..SQUARE GAL A69C..A69D ; NFKD_QC; N # Lm [2] MODIFIER LETTER CYRILLIC HARD SIGN..MODIFIER LETTER CYRILLIC SOFT SIGN A770 ; NFKD_QC; N # Lm MODIFIER LETTER US -A7F2..A7F4 ; NFKD_QC; N # Lm [3] MODIFIER LETTER CAPITAL C..MODIFIER LETTER CAPITAL Q +A7F1..A7F4 ; NFKD_QC; N # Lm [4] MODIFIER LETTER CAPITAL S..MODIFIER LETTER CAPITAL Q A7F8..A7F9 ; NFKD_QC; N # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE AB5C..AB5F ; NFKD_QC; N # Lm [4] MODIFIER LETTER SMALL HENG..MODIFIER LETTER SMALL U WITH LEFT HOOK AB69 ; NFKD_QC; N # Lm MODIFIER LETTER SMALL TURNED W @@ -1753,7 +1754,7 @@ FFED..FFEE ; NFKD_QC; N # So [2] HALFWIDTH BLACK SQUARE..HALFWIDTH WHITE CI 1FBF0..1FBF9 ; NFKD_QC; N # Nd [10] SEGMENTED DIGIT ZERO..SEGMENTED DIGIT NINE 2F800..2FA1D ; NFKD_QC; N # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D -# Total code points: 17085 +# Total code points: 17086 # ================================================ @@ -1946,7 +1947,7 @@ FFED..FFEE ; NFKD_QC; N # So [2] HALFWIDTH BLACK SQUARE..HALFWIDTH WHITE CI 32C0..33FF ; NFKC_QC; N # So [320] IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY..SQUARE GAL A69C..A69D ; NFKC_QC; N # Lm [2] MODIFIER LETTER CYRILLIC HARD SIGN..MODIFIER LETTER CYRILLIC SOFT SIGN A770 ; NFKC_QC; N # Lm MODIFIER LETTER US -A7F2..A7F4 ; NFKC_QC; N # Lm [3] MODIFIER LETTER CAPITAL C..MODIFIER LETTER CAPITAL Q +A7F1..A7F4 ; NFKC_QC; N # Lm [4] MODIFIER LETTER CAPITAL S..MODIFIER LETTER CAPITAL Q A7F8..A7F9 ; NFKC_QC; N # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE AB5C..AB5F ; NFKC_QC; N # Lm [4] MODIFIER LETTER SMALL HENG..MODIFIER LETTER SMALL U WITH LEFT HOOK AB69 ; NFKC_QC; N # Lm MODIFIER LETTER SMALL TURNED W @@ -2164,7 +2165,7 @@ FFED..FFEE ; NFKC_QC; N # So [2] HALFWIDTH BLACK SQUARE..HALFWIDTH WHITE CI 1FBF0..1FBF9 ; NFKC_QC; N # Nd [10] SEGMENTED DIGIT ZERO..SEGMENTED DIGIT NINE 2F800..2FA1D ; NFKC_QC; N # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D -# Total code points: 4964 +# Total code points: 4965 # ================================================ @@ -5448,11 +5449,15 @@ A7C7 ; NFKC_CF; A7C8 # L& LATIN CAPITAL LETTER D WITH S A7C9 ; NFKC_CF; A7CA # L& LATIN CAPITAL LETTER S WITH SHORT STROKE OVERLAY A7CB ; NFKC_CF; 0264 # L& LATIN CAPITAL LETTER RAMS HORN A7CC ; NFKC_CF; A7CD # L& LATIN CAPITAL LETTER S WITH DIAGONAL STROKE +A7CE ; NFKC_CF; A7CF # L& LATIN CAPITAL LETTER PHARYNGEAL VOICED FRICATIVE A7D0 ; NFKC_CF; A7D1 # L& LATIN CAPITAL LETTER CLOSED INSULAR G +A7D2 ; NFKC_CF; A7D3 # L& LATIN CAPITAL LETTER DOUBLE THORN +A7D4 ; NFKC_CF; A7D5 # L& LATIN CAPITAL LETTER DOUBLE WYNN A7D6 ; NFKC_CF; A7D7 # L& LATIN CAPITAL LETTER MIDDLE SCOTS S A7D8 ; NFKC_CF; A7D9 # L& LATIN CAPITAL LETTER SIGMOID S A7DA ; NFKC_CF; A7DB # L& LATIN CAPITAL LETTER LAMBDA A7DC ; NFKC_CF; 019B # L& LATIN CAPITAL LETTER LAMBDA WITH STROKE +A7F1 ; NFKC_CF; 0073 # Lm MODIFIER LETTER CAPITAL S A7F2 ; NFKC_CF; 0063 # Lm MODIFIER LETTER CAPITAL C A7F3 ; NFKC_CF; 0066 # Lm MODIFIER LETTER CAPITAL F A7F4 ; NFKC_CF; 0071 # Lm MODIFIER LETTER CAPITAL Q @@ -7184,6 +7189,31 @@ FFF0..FFF8 ; NFKC_CF; # Cn [9] ...... -# Total code points: 10554 +# Total code points: 10583 # ================================================ @@ -11582,11 +11612,15 @@ A7C7 ; NFKC_SCF; A7C8 # L& LATIN CAPITAL LETTER D WITH A7C9 ; NFKC_SCF; A7CA # L& LATIN CAPITAL LETTER S WITH SHORT STROKE OVERLAY A7CB ; NFKC_SCF; 0264 # L& LATIN CAPITAL LETTER RAMS HORN A7CC ; NFKC_SCF; A7CD # L& LATIN CAPITAL LETTER S WITH DIAGONAL STROKE +A7CE ; NFKC_SCF; A7CF # L& LATIN CAPITAL LETTER PHARYNGEAL VOICED FRICATIVE A7D0 ; NFKC_SCF; A7D1 # L& LATIN CAPITAL LETTER CLOSED INSULAR G +A7D2 ; NFKC_SCF; A7D3 # L& LATIN CAPITAL LETTER DOUBLE THORN +A7D4 ; NFKC_SCF; A7D5 # L& LATIN CAPITAL LETTER DOUBLE WYNN A7D6 ; NFKC_SCF; A7D7 # L& LATIN CAPITAL LETTER MIDDLE SCOTS S A7D8 ; NFKC_SCF; A7D9 # L& LATIN CAPITAL LETTER SIGMOID S A7DA ; NFKC_SCF; A7DB # L& LATIN CAPITAL LETTER LAMBDA A7DC ; NFKC_SCF; 019B # L& LATIN CAPITAL LETTER LAMBDA WITH STROKE +A7F1 ; NFKC_SCF; 0073 # Lm MODIFIER LETTER CAPITAL S A7F2 ; NFKC_SCF; 0063 # Lm MODIFIER LETTER CAPITAL C A7F3 ; NFKC_SCF; 0066 # Lm MODIFIER LETTER CAPITAL F A7F4 ; NFKC_SCF; 0071 # Lm MODIFIER LETTER CAPITAL Q @@ -13318,6 +13352,31 @@ FFF0..FFF8 ; NFKC_SCF; # Cn [9] ...... -# Total code points: 10516 +# Total code points: 10545 # ================================================ @@ -16052,12 +16111,15 @@ A7C2 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER ANG A7C4..A7C7 ; Changes_When_NFKC_Casefolded # L& [4] LATIN CAPITAL LETTER C WITH PALATAL HOOK..LATIN CAPITAL LETTER D WITH SHORT STROKE OVERLAY A7C9 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER S WITH SHORT STROKE OVERLAY A7CB..A7CC ; Changes_When_NFKC_Casefolded # L& [2] LATIN CAPITAL LETTER RAMS HORN..LATIN CAPITAL LETTER S WITH DIAGONAL STROKE +A7CE ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER PHARYNGEAL VOICED FRICATIVE A7D0 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER CLOSED INSULAR G +A7D2 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER DOUBLE THORN +A7D4 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER DOUBLE WYNN A7D6 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER MIDDLE SCOTS S A7D8 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER SIGMOID S A7DA ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER LAMBDA A7DC ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER LAMBDA WITH STROKE -A7F2..A7F4 ; Changes_When_NFKC_Casefolded # Lm [3] MODIFIER LETTER CAPITAL C..MODIFIER LETTER CAPITAL Q +A7F1..A7F4 ; Changes_When_NFKC_Casefolded # Lm [4] MODIFIER LETTER CAPITAL S..MODIFIER LETTER CAPITAL Q A7F5 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER REVERSED HALF H A7F8..A7F9 ; Changes_When_NFKC_Casefolded # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE AB5C..AB5F ; Changes_When_NFKC_Casefolded # Lm [4] MODIFIER LETTER SMALL HENG..MODIFIER LETTER SMALL U WITH LEFT HOOK @@ -16199,6 +16261,7 @@ FFF0..FFF8 ; Changes_When_NFKC_Casefolded # Cn [9] ...... -# Total code points: 10554 +# Total code points: 10583 # EOF diff --git a/contrib/unicode/EastAsianWidth.txt b/contrib/unicode/EastAsianWidth.txt index 99f7a31ea5d8..3e46eb65df2e 100644 --- a/contrib/unicode/EastAsianWidth.txt +++ b/contrib/unicode/EastAsianWidth.txt @@ -1,6 +1,6 @@ -# EastAsianWidth-16.0.0.txt -# Date: 2024-04-30, 21:48:20 GMT -# © 2024 Unicode®, Inc. +# EastAsianWidth-17.0.0.txt +# Date: 2025-07-24, 00:12:54 GMT +# © 2025 Unicode®, Inc. # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. # For terms of use and license, see https://www.unicode.org/terms_of_use.html # @@ -180,8 +180,8 @@ 0252..0260 ; N # Ll [15] LATIN SMALL LETTER TURNED ALPHA..LATIN SMALL LETTER G WITH HOOK 0261 ; A # Ll LATIN SMALL LETTER SCRIPT G 0262..0293 ; N # Ll [50] LATIN LETTER SMALL CAPITAL G..LATIN SMALL LETTER EZH WITH CURL -0294 ; N # Lo LATIN LETTER GLOTTAL STOP -0295..02AF ; N # Ll [27] LATIN LETTER PHARYNGEAL VOICED FRICATIVE..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL +0294..0295 ; N # Lo [2] LATIN LETTER GLOTTAL STOP..LATIN LETTER PHARYNGEAL VOICED FRICATIVE +0296..02AF ; N # Ll [26] LATIN LETTER INVERTED GLOTTAL STOP..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL 02B0..02C1 ; N # Lm [18] MODIFIER LETTER SMALL H..MODIFIER LETTER REVERSED GLOTTAL STOP 02C2..02C3 ; N # Sk [2] MODIFIER LETTER LEFT ARROWHEAD..MODIFIER LETTER RIGHT ARROWHEAD 02C4 ; A # Sk MODIFIER LETTER UP ARROWHEAD @@ -332,7 +332,7 @@ 0860..086A ; N # Lo [11] SYRIAC LETTER MALAYALAM NGA..SYRIAC LETTER MALAYALAM SSA 0870..0887 ; N # Lo [24] ARABIC LETTER ALEF WITH ATTACHED FATHA..ARABIC BASELINE ROUND DOT 0888 ; N # Sk ARABIC RAISED ROUND DOT -0889..088E ; N # Lo [6] ARABIC LETTER NOON WITH INVERTED SMALL V..ARABIC VERTICAL TAIL +0889..088F ; N # Lo [7] ARABIC LETTER NOON WITH INVERTED SMALL V..ARABIC LETTER NOON WITH RING ABOVE 0890..0891 ; N # Cf [2] ARABIC POUND MARK ABOVE..ARABIC PIASTRE MARK ABOVE 0897..089F ; N # Mn [9] ARABIC PEPET..ARABIC HALF MADDA OVER MADDA 08A0..08C8 ; N # Lo [41] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER GRAF @@ -502,7 +502,7 @@ 0C4A..0C4D ; N # Mn [4] TELUGU VOWEL SIGN O..TELUGU SIGN VIRAMA 0C55..0C56 ; N # Mn [2] TELUGU LENGTH MARK..TELUGU AI LENGTH MARK 0C58..0C5A ; N # Lo [3] TELUGU LETTER TSA..TELUGU LETTER RRRA -0C5D ; N # Lo TELUGU LETTER NAKAARA POLLU +0C5C..0C5D ; N # Lo [2] TELUGU ARCHAIC SHRII..TELUGU LETTER NAKAARA POLLU 0C60..0C61 ; N # Lo [2] TELUGU LETTER VOCALIC RR..TELUGU LETTER VOCALIC LL 0C62..0C63 ; N # Mn [2] TELUGU VOWEL SIGN VOCALIC L..TELUGU VOWEL SIGN VOCALIC LL 0C66..0C6F ; N # Nd [10] TELUGU DIGIT ZERO..TELUGU DIGIT NINE @@ -528,7 +528,7 @@ 0CCA..0CCB ; N # Mc [2] KANNADA VOWEL SIGN O..KANNADA VOWEL SIGN OO 0CCC..0CCD ; N # Mn [2] KANNADA VOWEL SIGN AU..KANNADA SIGN VIRAMA 0CD5..0CD6 ; N # Mc [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK -0CDD..0CDE ; N # Lo [2] KANNADA LETTER NAKAARA POLLU..KANNADA LETTER FA +0CDC..0CDE ; N # Lo [3] KANNADA ARCHAIC SHRII..KANNADA LETTER FA 0CE0..0CE1 ; N # Lo [2] KANNADA LETTER VOCALIC RR..KANNADA LETTER VOCALIC LL 0CE2..0CE3 ; N # Mn [2] KANNADA VOWEL SIGN VOCALIC L..KANNADA VOWEL SIGN VOCALIC LL 0CE6..0CEF ; N # Nd [10] KANNADA DIGIT ZERO..KANNADA DIGIT NINE @@ -806,7 +806,8 @@ 1AA8..1AAD ; N # Po [6] TAI THAM SIGN KAAN..TAI THAM SIGN CAANG 1AB0..1ABD ; N # Mn [14] COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW 1ABE ; N # Me COMBINING PARENTHESES OVERLAY -1ABF..1ACE ; N # Mn [16] COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER INSULAR T +1ABF..1ADD ; N # Mn [31] COMBINING LATIN SMALL LETTER W BELOW..COMBINING DOT-AND-RING BELOW +1AE0..1AEB ; N # Mn [12] COMBINING LEFT TACK ABOVE..COMBINING DOUBLE RIGHTWARDS ARROW ABOVE 1B00..1B03 ; N # Mn [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG 1B04 ; N # Mc BALINESE SIGN BISAH 1B05..1B33 ; N # Lo [47] BALINESE LETTER AKARA..BALINESE LETTER HA @@ -976,7 +977,7 @@ 20A9 ; H # Sc WON SIGN 20AA..20AB ; N # Sc [2] NEW SHEQEL SIGN..DONG SIGN 20AC ; A # Sc EURO SIGN -20AD..20C0 ; N # Sc [20] KIP SIGN..SOM SIGN +20AD..20C1 ; N # Sc [21] KIP SIGN..SAUDI RIYAL SIGN 20D0..20DC ; N # Mn [13] COMBINING LEFT HARPOON ABOVE..COMBINING FOUR DOTS ABOVE 20DD..20E0 ; N # Me [4] COMBINING ENCLOSING CIRCLE..COMBINING ENCLOSING CIRCLE BACKSLASH 20E1 ; N # Mn COMBINING LEFT RIGHT ARROW ABOVE @@ -1351,8 +1352,7 @@ 2B55 ; W # So HEAVY LARGE CIRCLE 2B56..2B59 ; A # So [4] HEAVY OVAL WITH OVAL INSIDE..HEAVY CIRCLED SALTIRE 2B5A..2B73 ; N # So [26] SLANTED NORTH ARROW WITH HOOKED HEAD..DOWNWARDS TRIANGLE-HEADED ARROW TO BAR -2B76..2B95 ; N # So [32] NORTH WEST TRIANGLE-HEADED ARROW TO BAR..RIGHTWARDS BLACK ARROW -2B97..2BFF ; N # So [105] SYMBOL FOR TYPE A ELECTRONICS..HELLSCHREIBER PAUSE SYMBOL +2B76..2BFF ; N # So [138] NORTH WEST TRIANGLE-HEADED ARROW TO BAR..HELLSCHREIBER PAUSE SYMBOL 2C00..2C5F ; N # L& [96] GLAGOLITIC CAPITAL LETTER AZU..GLAGOLITIC SMALL LETTER CAUDATE CHRIVI 2C60..2C7B ; N # L& [28] LATIN CAPITAL LETTER L WITH DOUBLE BAR..LATIN LETTER SMALL CAPITAL TURNED E 2C7C..2C7D ; N # Lm [2] LATIN SUBSCRIPT SMALL LETTER J..MODIFIER LETTER CAPITAL V @@ -1548,11 +1548,8 @@ A788 ; N # Lm MODIFIER LETTER LOW CIRCUMFLEX ACCENT A789..A78A ; N # Sk [2] MODIFIER LETTER COLON..MODIFIER LETTER SHORT EQUALS SIGN A78B..A78E ; N # L& [4] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT A78F ; N # Lo LATIN LETTER SINOLOGICAL DOT -A790..A7CD ; N # L& [62] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER S WITH DIAGONAL STROKE -A7D0..A7D1 ; N # L& [2] LATIN CAPITAL LETTER CLOSED INSULAR G..LATIN SMALL LETTER CLOSED INSULAR G -A7D3 ; N # Ll LATIN SMALL LETTER DOUBLE THORN -A7D5..A7DC ; N # L& [8] LATIN SMALL LETTER DOUBLE WYNN..LATIN CAPITAL LETTER LAMBDA WITH STROKE -A7F2..A7F4 ; N # Lm [3] MODIFIER LETTER CAPITAL C..MODIFIER LETTER CAPITAL Q +A790..A7DC ; N # L& [77] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN CAPITAL LETTER LAMBDA WITH STROKE +A7F1..A7F4 ; N # Lm [4] MODIFIER LETTER CAPITAL S..MODIFIER LETTER CAPITAL Q A7F5..A7F6 ; N # L& [2] LATIN CAPITAL LETTER REVERSED HALF H..LATIN SMALL LETTER REVERSED HALF H A7F7 ; N # Lo LATIN EPIGRAPHIC LETTER SIDEWAYS I A7F8..A7F9 ; N # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE @@ -1709,13 +1706,15 @@ FB43..FB44 ; N # Lo [2] HEBREW LETTER FINAL PE WITH DAGESH..HEBREW LETT FB46..FB4F ; N # Lo [10] HEBREW LETTER TSADI WITH DAGESH..HEBREW LIGATURE ALEF LAMED FB50..FBB1 ; N # Lo [98] ARABIC LETTER ALEF WASLA ISOLATED FORM..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM FBB2..FBC2 ; N # Sk [17] ARABIC SYMBOL DOT ABOVE..ARABIC SYMBOL WASLA ABOVE +FBC3..FBD2 ; N # So [16] ARABIC LIGATURE JALLA WA-ALAA..ARABIC LIGATURE ALAYHI AR-RAHMAH FBD3..FD3D ; N # Lo [363] ARABIC LETTER NG ISOLATED FORM..ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM FD3E ; N # Pe ORNATE LEFT PARENTHESIS FD3F ; N # Ps ORNATE RIGHT PARENTHESIS FD40..FD4F ; N # So [16] ARABIC LIGATURE RAHIMAHU ALLAAH..ARABIC LIGATURE RAHIMAHUM ALLAAH FD50..FD8F ; N # Lo [64] ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM..ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM +FD90..FD91 ; N # So [2] ARABIC LIGATURE RAHMATU ALLAAHI ALAYH..ARABIC LIGATURE RAHMATU ALLAAHI ALAYHAA FD92..FDC7 ; N # Lo [54] ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM..ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM -FDCF ; N # So ARABIC LIGATURE SALAAMUHU ALAYNAA +FDC8..FDCF ; N # So [8] ARABIC LIGATURE RAHIMAHU ALLAAH TAAALAA..ARABIC LIGATURE SALAAMUHU ALAYNAA FDF0..FDFB ; N # Lo [12] ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM..ARABIC LIGATURE JALLAJALALOUHOU FDFC ; N # Sc RIAL SIGN FDFD..FDFF ; N # So [3] ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM..ARABIC LIGATURE AZZA WA JALL @@ -1904,6 +1903,7 @@ FFFD ; A # So REPLACEMENT CHARACTER 1091F ; N # Po PHOENICIAN WORD SEPARATOR 10920..10939 ; N # Lo [26] LYDIAN LETTER A..LYDIAN LETTER C 1093F ; N # Po LYDIAN TRIANGULAR MARK +10940..10959 ; N # Lo [26] SIDETIC LETTER N01..SIDETIC LETTER N26 10980..1099F ; N # Lo [32] MEROITIC HIEROGLYPHIC LETTER A..MEROITIC HIEROGLYPHIC SYMBOL VIDJ-2 109A0..109B7 ; N # Lo [24] MEROITIC CURSIVE LETTER A..MEROITIC CURSIVE LETTER DA 109BC..109BD ; N # No [2] MEROITIC CURSIVE FRACTION ELEVEN TWELFTHS..MEROITIC CURSIVE FRACTION ONE HALF @@ -1964,7 +1964,11 @@ FFFD ; A # So REPLACEMENT CHARACTER 10EAD ; N # Pd YEZIDI HYPHENATION MARK 10EB0..10EB1 ; N # Lo [2] YEZIDI LETTER LAM WITH DOT ABOVE..YEZIDI LETTER YOT WITH CIRCUMFLEX ABOVE 10EC2..10EC4 ; N # Lo [3] ARABIC LETTER DAL WITH TWO DOTS VERTICALLY BELOW..ARABIC LETTER KAF WITH TWO DOTS VERTICALLY BELOW -10EFC..10EFF ; N # Mn [4] ARABIC COMBINING ALEF OVERLAY..ARABIC SMALL LOW WORD MADDA +10EC5 ; N # Lm ARABIC SMALL YEH BARREE WITH TWO DOTS BELOW +10EC6..10EC7 ; N # Lo [2] ARABIC LETTER THIN NOON..ARABIC LETTER YEH WITH FOUR DOTS BELOW +10ED0 ; N # Po ARABIC BIBLICAL END OF VERSE +10ED1..10ED8 ; N # So [8] ARABIC LIGATURE ALAYHAA AS-SALAATU WAS-SALAAM..ARABIC LIGATURE NAWWARA ALLAAHU MARQADAH +10EFA..10EFF ; N # Mn [6] ARABIC DOUBLE VERTICAL BAR BELOW..ARABIC SMALL LOW WORD MADDA 10F00..10F1C ; N # Lo [29] OLD SOGDIAN LETTER ALEPH..OLD SOGDIAN LETTER FINAL TAW WITH VERTICAL TAIL 10F1D..10F26 ; N # No [10] OLD SOGDIAN NUMBER ONE..OLD SOGDIAN FRACTION ONE HALF 10F27 ; N # Lo OLD SOGDIAN LIGATURE AYIN-DALETH @@ -2235,6 +2239,12 @@ FFFD ; A # So REPLACEMENT CHARACTER 11AB0..11ABF ; N # Lo [16] CANADIAN SYLLABICS NATTILIK HI..CANADIAN SYLLABICS SPA 11AC0..11AF8 ; N # Lo [57] PAU CIN HAU LETTER PA..PAU CIN HAU GLOTTAL STOP FINAL 11B00..11B09 ; N # Po [10] DEVANAGARI HEAD MARK..DEVANAGARI SIGN MINDU +11B60 ; N # Mn SHARADA VOWEL SIGN OE +11B61 ; N # Mc SHARADA VOWEL SIGN OOE +11B62..11B64 ; N # Mn [3] SHARADA VOWEL SIGN UE..SHARADA VOWEL SIGN SHORT E +11B65 ; N # Mc SHARADA VOWEL SIGN SHORT O +11B66 ; N # Mn SHARADA VOWEL SIGN CANDRA E +11B67 ; N # Mc SHARADA VOWEL SIGN CANDRA O 11BC0..11BE0 ; N # Lo [33] SUNUWAR LETTER DEVI..SUNUWAR LETTER KLOKO 11BE1 ; N # Po SUNUWAR SIGN PVO 11BF0..11BF9 ; N # Nd [10] SUNUWAR DIGIT ZERO..SUNUWAR DIGIT NINE @@ -2279,6 +2289,10 @@ FFFD ; A # So REPLACEMENT CHARACTER 11D97 ; N # Mn GUNJALA GONDI VIRAMA 11D98 ; N # Lo GUNJALA GONDI OM 11DA0..11DA9 ; N # Nd [10] GUNJALA GONDI DIGIT ZERO..GUNJALA GONDI DIGIT NINE +11DB0..11DD8 ; N # Lo [41] TOLONG SIKI LETTER I..TOLONG SIKI LETTER RRH +11DD9 ; N # Lm TOLONG SIKI SIGN SELA +11DDA..11DDB ; N # Lo [2] TOLONG SIKI SIGN HECAKA..TOLONG SIKI UNGGA +11DE0..11DE9 ; N # Nd [10] TOLONG SIKI DIGIT ZERO..TOLONG SIKI DIGIT NINE 11EE0..11EF2 ; N # Lo [19] MAKASAR LETTER KA..MAKASAR ANGKA 11EF3..11EF4 ; N # Mn [2] MAKASAR VOWEL SIGN I..MAKASAR VOWEL SIGN U 11EF5..11EF6 ; N # Mc [2] MAKASAR VOWEL SIGN E..MAKASAR VOWEL SIGN O @@ -2349,6 +2363,8 @@ FFFD ; A # So REPLACEMENT CHARACTER 16E40..16E7F ; N # L& [64] MEDEFAIDRIN CAPITAL LETTER M..MEDEFAIDRIN SMALL LETTER Y 16E80..16E96 ; N # No [23] MEDEFAIDRIN DIGIT ZERO..MEDEFAIDRIN DIGIT THREE ALTERNATE FORM 16E97..16E9A ; N # Po [4] MEDEFAIDRIN COMMA..MEDEFAIDRIN EXCLAMATION OH +16EA0..16EB8 ; N # Lu [25] BERIA ERFE CAPITAL LETTER ARKAB..BERIA ERFE CAPITAL LETTER AY +16EBB..16ED3 ; N # Ll [25] BERIA ERFE SMALL LETTER ARKAB..BERIA ERFE SMALL LETTER AY 16F00..16F4A ; N # Lo [75] MIAO LETTER PA..MIAO LETTER RTE 16F4F ; N # Mn MIAO SIGN CONSONANT MODIFIER BAR 16F50 ; N # Lo MIAO LETTER NASALIZATION @@ -2360,11 +2376,14 @@ FFFD ; A # So REPLACEMENT CHARACTER 16FE3 ; W # Lm OLD CHINESE ITERATION MARK 16FE4 ; W # Mn KHITAN SMALL SCRIPT FILLER 16FF0..16FF1 ; W # Mc [2] VIETNAMESE ALTERNATE READING MARK CA..VIETNAMESE ALTERNATE READING MARK NHAY -17000..187F7 ; W # Lo [6136] TANGUT IDEOGRAPH-17000..TANGUT IDEOGRAPH-187F7 +16FF2..16FF3 ; W # Lm [2] CHINESE SMALL SIMPLIFIED ER..CHINESE SMALL TRADITIONAL ER +16FF4..16FF6 ; W # Nl [3] YANGQIN SIGN SLOW ONE BEAT..YANGQIN SIGN SLOW TWO BEATS +17000..187FF ; W # Lo [6144] TANGUT IDEOGRAPH-17000..TANGUT IDEOGRAPH-187FF 18800..18AFF ; W # Lo [768] TANGUT COMPONENT-001..TANGUT COMPONENT-768 18B00..18CD5 ; W # Lo [470] KHITAN SMALL SCRIPT CHARACTER-18B00..KHITAN SMALL SCRIPT CHARACTER-18CD5 18CFF ; W # Lo KHITAN SMALL SCRIPT CHARACTER-18CFF -18D00..18D08 ; W # Lo [9] TANGUT IDEOGRAPH-18D00..TANGUT IDEOGRAPH-18D08 +18D00..18D1E ; W # Lo [31] TANGUT IDEOGRAPH-18D00..TANGUT IDEOGRAPH-18D1E +18D80..18DF2 ; W # Lo [115] TANGUT COMPONENT-769..TANGUT COMPONENT-883 1AFF0..1AFF3 ; W # Lm [4] KATAKANA LETTER MINNAN TONE-2..KATAKANA LETTER MINNAN TONE-5 1AFF5..1AFFB ; W # Lm [7] KATAKANA LETTER MINNAN TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-5 1AFFD..1AFFE ; W # Lm [2] KATAKANA LETTER MINNAN NASALIZED TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-8 @@ -2385,7 +2404,12 @@ FFFD ; A # So REPLACEMENT CHARACTER 1BCA0..1BCA3 ; N # Cf [4] SHORTHAND FORMAT LETTER OVERLAP..SHORTHAND FORMAT UP STEP 1CC00..1CCEF ; N # So [240] UP-POINTING GO-KART..OUTLINED LATIN CAPITAL LETTER Z 1CCF0..1CCF9 ; N # Nd [10] OUTLINED DIGIT ZERO..OUTLINED DIGIT NINE +1CCFA..1CCFC ; N # So [3] SNAKE SYMBOL..NOSE SYMBOL 1CD00..1CEB3 ; N # So [436] BLOCK OCTANT-3..BLACK RIGHT TRIANGLE CARET +1CEBA..1CEBF ; N # So [6] FRAGILE SYMBOL..STRAWBERRY SYMBOL +1CEC0..1CED0 ; N # So [17] HEBE..LEUKOTHEA +1CEE0..1CEEF ; N # So [16] GEOMANTIC FIGURE POPULUS..GEOMANTIC FIGURE VIA +1CEF0 ; N # Sm MEDIUM SMALL WHITE CIRCLE WITH HORIZONTAL BAR 1CF00..1CF2D ; N # Mn [46] ZNAMENNY COMBINING MARK GORAZDO NIZKO S KRYZHEM ON LEFT..ZNAMENNY COMBINING MARK KRYZH ON LEFT 1CF30..1CF46 ; N # Mn [23] ZNAMENNY COMBINING TONAL RANGE MARK MRACHNO..ZNAMENNY PRIZNAK MODIFIER ROG 1CF50..1CFC3 ; N # So [116] ZNAMENNY NEUME KRYUK..ZNAMENNY NEUME PAUK @@ -2496,6 +2520,17 @@ FFFD ; A # So REPLACEMENT CHARACTER 1E5F0 ; N # Lo OL ONAL SIGN HODDOND 1E5F1..1E5FA ; N # Nd [10] OL ONAL DIGIT ZERO..OL ONAL DIGIT NINE 1E5FF ; N # Po OL ONAL ABBREVIATION SIGN +1E6C0..1E6DE ; N # Lo [31] TAI YO LETTER LOW KO..TAI YO LETTER HIGH KVO +1E6E0..1E6E2 ; N # Lo [3] TAI YO LETTER AA..TAI YO LETTER UE +1E6E3 ; N # Mn TAI YO SIGN UE +1E6E4..1E6E5 ; N # Lo [2] TAI YO LETTER U..TAI YO LETTER AE +1E6E6 ; N # Mn TAI YO SIGN AU +1E6E7..1E6ED ; N # Lo [7] TAI YO LETTER O..TAI YO LETTER AUE +1E6EE..1E6EF ; N # Mn [2] TAI YO SIGN AY..TAI YO SIGN ANG +1E6F0..1E6F4 ; N # Lo [5] TAI YO LETTER AN..TAI YO LETTER AP +1E6F5 ; N # Mn TAI YO SIGN OM +1E6FE ; N # Lo TAI YO SYMBOL MUEANG +1E6FF ; N # Lm TAI YO XAM LAI 1E7E0..1E7E6 ; N # Lo [7] ETHIOPIC SYLLABLE HHYA..ETHIOPIC SYLLABLE HHYO 1E7E8..1E7EB ; N # Lo [4] ETHIOPIC SYLLABLE GURAGE HHWA..ETHIOPIC SYLLABLE HHWE 1E7ED..1E7EE ; N # Lo [2] ETHIOPIC SYLLABLE GURAGE MWI..ETHIOPIC SYLLABLE GURAGE MWEE @@ -2623,14 +2658,13 @@ FFFD ; A # So REPLACEMENT CHARACTER 1F6CD..1F6CF ; N # So [3] SHOPPING BAGS..BED 1F6D0..1F6D2 ; W # So [3] PLACE OF WORSHIP..SHOPPING TROLLEY 1F6D3..1F6D4 ; N # So [2] STUPA..PAGODA -1F6D5..1F6D7 ; W # So [3] HINDU TEMPLE..ELEVATOR +1F6D5..1F6D8 ; W # So [4] HINDU TEMPLE..LANDSLIDE 1F6DC..1F6DF ; W # So [4] WIRELESS..RING BUOY 1F6E0..1F6EA ; N # So [11] HAMMER AND WRENCH..NORTHEAST-POINTING AIRPLANE 1F6EB..1F6EC ; W # So [2] AIRPLANE DEPARTURE..AIRPLANE ARRIVING 1F6F0..1F6F3 ; N # So [4] SATELLITE..PASSENGER SHIP 1F6F4..1F6FC ; W # So [9] SCOOTER..ROLLER SKATE -1F700..1F776 ; N # So [119] ALCHEMICAL SYMBOL FOR QUINTESSENCE..LUNAR ECLIPSE -1F77B..1F77F ; N # So [5] HAUMEA..ORCUS +1F700..1F77F ; N # So [128] ALCHEMICAL SYMBOL FOR QUINTESSENCE..ORCUS 1F780..1F7D9 ; N # So [90] BLACK LEFT-POINTING ISOSCELES RIGHT TRIANGLE..NINE POINTED WHITE STAR 1F7E0..1F7EB ; W # So [12] LARGE ORANGE CIRCLE..LARGE BROWN SQUARE 1F7F0 ; W # So HEAVY EQUALS SIGN @@ -2641,31 +2675,32 @@ FFFD ; A # So REPLACEMENT CHARACTER 1F890..1F8AD ; N # So [30] LEFTWARDS TRIANGLE ARROWHEAD..WHITE ARROW SHAFT WIDTH TWO THIRDS 1F8B0..1F8BB ; N # So [12] ARROW POINTING UPWARDS THEN NORTH WEST..SOUTH WEST ARROW FROM BAR 1F8C0..1F8C1 ; N # So [2] LEFTWARDS ARROW FROM DOWNWARDS ARROW..RIGHTWARDS ARROW FROM DOWNWARDS ARROW +1F8D0..1F8D8 ; N # Sm [9] LONG RIGHTWARDS ARROW OVER LONG LEFTWARDS ARROW..LONG LEFT RIGHT ARROW WITH DEPENDENT LOBE 1F900..1F90B ; N # So [12] CIRCLED CROSS FORMEE WITH FOUR DOTS..DOWNWARD FACING NOTCHED HOOK WITH DOT 1F90C..1F93A ; W # So [47] PINCHED FINGERS..FENCER 1F93B ; N # So MODERN PENTATHLON 1F93C..1F945 ; W # So [10] WRESTLERS..GOAL NET 1F946 ; N # So RIFLE 1F947..1F9FF ; W # So [185] FIRST PLACE MEDAL..NAZAR AMULET -1FA00..1FA53 ; N # So [84] NEUTRAL CHESS KING..BLACK CHESS KNIGHT-BISHOP +1FA00..1FA57 ; N # So [88] NEUTRAL CHESS KING..BLACK CHESS ALFIL 1FA60..1FA6D ; N # So [14] XIANGQI RED GENERAL..XIANGQI BLACK SOLDIER 1FA70..1FA7C ; W # So [13] BALLET SHOES..CRUTCH -1FA80..1FA89 ; W # So [10] YO-YO..HARP -1FA8F..1FAC6 ; W # So [56] SHOVEL..FINGERPRINT -1FACE..1FADC ; W # So [15] MOOSE..ROOT VEGETABLE -1FADF..1FAE9 ; W # So [11] SPLATTER..FACE WITH BAGS UNDER EYES -1FAF0..1FAF8 ; W # So [9] HAND WITH INDEX FINGER AND THUMB CROSSED..RIGHTWARDS PUSHING HAND +1FA80..1FA8A ; W # So [11] YO-YO..TROMBONE +1FA8E..1FAC6 ; W # So [57] TREASURE CHEST..FINGERPRINT +1FAC8 ; W # So HAIRY CREATURE +1FACD..1FADC ; W # So [16] ORCA..ROOT VEGETABLE +1FADF..1FAEA ; W # So [12] SPLATTER..DISTORTED FACE +1FAEF..1FAF8 ; W # So [10] FIGHT CLOUD..RIGHTWARDS PUSHING HAND 1FB00..1FB92 ; N # So [147] BLOCK SEXTANT-1..UPPER HALF INVERSE MEDIUM SHADE AND LOWER HALF BLOCK 1FB94..1FBEF ; N # So [92] LEFT HALF INVERSE MEDIUM SHADE AND RIGHT HALF BLOCK..TOP LEFT JUSTIFIED LOWER RIGHT QUARTER BLACK CIRCLE 1FBF0..1FBF9 ; N # Nd [10] SEGMENTED DIGIT ZERO..SEGMENTED DIGIT NINE +1FBFA ; N # So ALARM BELL SYMBOL 20000..2A6DF ; W # Lo [42720] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DF 2A6E0..2A6FF ; W # Cn [32] .. -2A700..2B739 ; W # Lo [4154] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B739 -2B73A..2B73F ; W # Cn [6] .. -2B740..2B81D ; W # Lo [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D +2A700..2B81D ; W # Lo [4382] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B81D 2B81E..2B81F ; W # Cn [2] .. -2B820..2CEA1 ; W # Lo [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1 -2CEA2..2CEAF ; W # Cn [14] .. +2B820..2CEAD ; W # Lo [5774] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEAD +2CEAE..2CEAF ; W # Cn [2] .. 2CEB0..2EBE0 ; W # Lo [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0 2EBE1..2EBEF ; W # Cn [15] .. 2EBF0..2EE5D ; W # Lo [622] CJK UNIFIED IDEOGRAPH-2EBF0..CJK UNIFIED IDEOGRAPH-2EE5D @@ -2675,8 +2710,8 @@ FFFD ; A # So REPLACEMENT CHARACTER 2FA20..2FFFD ; W # Cn [1502] .. 30000..3134A ; W # Lo [4939] CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A 3134B..3134F ; W # Cn [5] .. -31350..323AF ; W # Lo [4192] CJK UNIFIED IDEOGRAPH-31350..CJK UNIFIED IDEOGRAPH-323AF -323B0..3FFFD ; W # Cn [56398] .. +31350..33479 ; W # Lo [8490] CJK UNIFIED IDEOGRAPH-31350..CJK UNIFIED IDEOGRAPH-33479 +3347A..3FFFD ; W # Cn [52100] .. E0001 ; N # Cf LANGUAGE TAG E0020..E007F ; N # Cf [96] TAG SPACE..CANCEL TAG E0100..E01EF ; A # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256 diff --git a/contrib/unicode/GraphemeBreakProperty.txt b/contrib/unicode/GraphemeBreakProperty.txt index a863397ddaba..19b13571f347 100644 --- a/contrib/unicode/GraphemeBreakProperty.txt +++ b/contrib/unicode/GraphemeBreakProperty.txt @@ -1,6 +1,6 @@ -# GraphemeBreakProperty-16.0.0.txt -# Date: 2024-05-31, 18:09:38 GMT -# © 2024 Unicode®, Inc. +# GraphemeBreakProperty-17.0.0.txt +# Date: 2025-06-30, 06:20:23 GMT +# © 2025 Unicode®, Inc. # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. # For terms of use and license, see https://www.unicode.org/terms_of_use.html # @@ -30,12 +30,11 @@ 113D1 ; Prepend # Lo TULU-TIGALARI REPHA 1193F ; Prepend # Lo DIVES AKURU PREFIXED NASAL SIGN 11941 ; Prepend # Lo DIVES AKURU INITIAL RA -11A3A ; Prepend # Lo ZANABAZAR SQUARE CLUSTER-INITIAL LETTER RA 11A84..11A89 ; Prepend # Lo [6] SOYOMBO SIGN JIHVAMULIYA..SOYOMBO CLUSTER-INITIAL LETTER SA 11D46 ; Prepend # Lo MASARAM GONDI REPHA 11F02 ; Prepend # Lo KAWI SIGN REPHA -# Total code points: 28 +# Total code points: 27 # ================================================ @@ -243,7 +242,8 @@ E01F0..E0FFF ; Control # Cn [3600] .. 1A7F ; Extend # Mn TAI THAM COMBINING CRYPTOGRAMMIC DOT 1AB0..1ABD ; Extend # Mn [14] COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW 1ABE ; Extend # Me COMBINING PARENTHESES OVERLAY -1ABF..1ACE ; Extend # Mn [16] COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER INSULAR T +1ABF..1ADD ; Extend # Mn [31] COMBINING LATIN SMALL LETTER W BELOW..COMBINING DOT-AND-RING BELOW +1AE0..1AEB ; Extend # Mn [12] COMBINING LEFT TACK ABOVE..COMBINING DOUBLE RIGHTWARDS ARROW ABOVE 1B00..1B03 ; Extend # Mn [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG 1B34 ; Extend # Mn BALINESE SIGN REREKAN 1B35 ; Extend # Mc BALINESE VOWEL SIGN TEDUNG @@ -339,7 +339,7 @@ FF9E..FF9F ; Extend # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDT 10D24..10D27 ; Extend # Mn [4] HANIFI ROHINGYA SIGN HARBAHAY..HANIFI ROHINGYA SIGN TASSI 10D69..10D6D ; Extend # Mn [5] GARAY VOWEL SIGN E..GARAY CONSONANT NASALIZATION MARK 10EAB..10EAC ; Extend # Mn [2] YEZIDI COMBINING HAMZA MARK..YEZIDI COMBINING MADDA MARK -10EFC..10EFF ; Extend # Mn [4] ARABIC COMBINING ALEF OVERLAY..ARABIC SMALL LOW WORD MADDA +10EFA..10EFF ; Extend # Mn [6] ARABIC DOUBLE VERTICAL BAR BELOW..ARABIC SMALL LOW WORD MADDA 10F46..10F50 ; Extend # Mn [11] SOGDIAN COMBINING DOT BELOW..SOGDIAN COMBINING STROKE BELOW 10F82..10F85 ; Extend # Mn [4] OLD UYGHUR COMBINING DOT ABOVE..OLD UYGHUR COMBINING TWO DOTS BELOW 11001 ; Extend # Mn BRAHMI SIGN ANUSVARA @@ -430,6 +430,9 @@ FF9E..FF9F ; Extend # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDT 11A59..11A5B ; Extend # Mn [3] SOYOMBO VOWEL SIGN VOCALIC R..SOYOMBO VOWEL LENGTH MARK 11A8A..11A96 ; Extend # Mn [13] SOYOMBO FINAL CONSONANT SIGN G..SOYOMBO SIGN ANUSVARA 11A98..11A99 ; Extend # Mn [2] SOYOMBO GEMINATION MARK..SOYOMBO SUBJOINER +11B60 ; Extend # Mn SHARADA VOWEL SIGN OE +11B62..11B64 ; Extend # Mn [3] SHARADA VOWEL SIGN UE..SHARADA VOWEL SIGN SHORT E +11B66 ; Extend # Mn SHARADA VOWEL SIGN CANDRA E 11C30..11C36 ; Extend # Mn [7] BHAIKSUKI VOWEL SIGN I..BHAIKSUKI VOWEL SIGN VOCALIC L 11C38..11C3D ; Extend # Mn [6] BHAIKSUKI VOWEL SIGN E..BHAIKSUKI SIGN ANUSVARA 11C3F ; Extend # Mn BHAIKSUKI SIGN VIRAMA @@ -489,13 +492,17 @@ FF9E..FF9F ; Extend # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDT 1E2EC..1E2EF ; Extend # Mn [4] WANCHO TONE TUP..WANCHO TONE KOINI 1E4EC..1E4EF ; Extend # Mn [4] NAG MUNDARI SIGN MUHOR..NAG MUNDARI SIGN SUTUH 1E5EE..1E5EF ; Extend # Mn [2] OL ONAL SIGN MU..OL ONAL SIGN IKIR +1E6E3 ; Extend # Mn TAI YO SIGN UE +1E6E6 ; Extend # Mn TAI YO SIGN AU +1E6EE..1E6EF ; Extend # Mn [2] TAI YO SIGN AY..TAI YO SIGN ANG +1E6F5 ; Extend # Mn TAI YO SIGN OM 1E8D0..1E8D6 ; Extend # Mn [7] MENDE KIKAKUI COMBINING NUMBER TEENS..MENDE KIKAKUI COMBINING NUMBER MILLIONS 1E944..1E94A ; Extend # Mn [7] ADLAM ALIF LENGTHENER..ADLAM NUKTA 1F3FB..1F3FF ; Extend # Sk [5] EMOJI MODIFIER FITZPATRICK TYPE-1-2..EMOJI MODIFIER FITZPATRICK TYPE-6 E0020..E007F ; Extend # Cf [96] TAG SPACE..CANCEL TAG E0100..E01EF ; Extend # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256 -# Total code points: 2198 +# Total code points: 2237 # ================================================ @@ -646,6 +653,9 @@ ABEC ; SpacingMark # Mc MEETEI MAYEK LUM IYEK 11A39 ; SpacingMark # Mc ZANABAZAR SQUARE SIGN VISARGA 11A57..11A58 ; SpacingMark # Mc [2] SOYOMBO VOWEL SIGN AI..SOYOMBO VOWEL SIGN AU 11A97 ; SpacingMark # Mc SOYOMBO SIGN VISARGA +11B61 ; SpacingMark # Mc SHARADA VOWEL SIGN OOE +11B65 ; SpacingMark # Mc SHARADA VOWEL SIGN SHORT O +11B67 ; SpacingMark # Mc SHARADA VOWEL SIGN CANDRA O 11C2F ; SpacingMark # Mc BHAIKSUKI VOWEL SIGN AA 11C3E ; SpacingMark # Mc BHAIKSUKI SIGN VISARGA 11CA9 ; SpacingMark # Mc MARCHEN SUBJOINED LETTER YA @@ -661,7 +671,7 @@ ABEC ; SpacingMark # Mc MEETEI MAYEK LUM IYEK 1612A..1612C ; SpacingMark # Mc [3] GURUNG KHEMA CONSONANT SIGN MEDIAL YA..GURUNG KHEMA CONSONANT SIGN MEDIAL HA 16F51..16F87 ; SpacingMark # Mc [55] MIAO SIGN ASPIRATION..MIAO VOWEL SIGN UI -# Total code points: 378 +# Total code points: 381 # ================================================ diff --git a/contrib/unicode/HangulSyllableType.txt b/contrib/unicode/HangulSyllableType.txt new file mode 100644 index 000000000000..8c3cf4a73672 --- /dev/null +++ b/contrib/unicode/HangulSyllableType.txt @@ -0,0 +1,858 @@ +# HangulSyllableType-17.0.0.txt +# Date: 2025-01-27, 18:09:16 GMT +# © 2025 Unicode®, Inc. +# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. +# For terms of use and license, see https://www.unicode.org/terms_of_use.html +# +# Unicode Character Database +# For documentation, see https://www.unicode.org/reports/tr44/ + +# ================================================ + +# Property: Hangul_Syllable_Type + +# All code points not explicitly listed for Hangul_Syllable_Type +# have the value Not_Applicable (NA). + +# @missing: 0000..10FFFF; Not_Applicable + +# ================================================ + +# Hangul_Syllable_Type=Leading_Jamo + +1100..115F ; L # Lo [96] HANGUL CHOSEONG KIYEOK..HANGUL CHOSEONG FILLER +A960..A97C ; L # Lo [29] HANGUL CHOSEONG TIKEUT-MIEUM..HANGUL CHOSEONG SSANGYEORINHIEUH + +# Total code points: 125 + +# ================================================ + +# Hangul_Syllable_Type=Vowel_Jamo + +1160..11A7 ; V # Lo [72] HANGUL JUNGSEONG FILLER..HANGUL JUNGSEONG O-YAE +D7B0..D7C6 ; V # Lo [23] HANGUL JUNGSEONG O-YEO..HANGUL JUNGSEONG ARAEA-E + +# Total code points: 95 + +# ================================================ + +# Hangul_Syllable_Type=Trailing_Jamo + +11A8..11FF ; T # Lo [88] HANGUL JONGSEONG KIYEOK..HANGUL JONGSEONG SSANGNIEUN +D7CB..D7FB ; T # Lo [49] HANGUL JONGSEONG NIEUN-RIEUL..HANGUL JONGSEONG PHIEUPH-THIEUTH + +# Total code points: 137 + +# ================================================ + +# Hangul_Syllable_Type=LV_Syllable + +AC00 ; LV # Lo HANGUL SYLLABLE GA +AC1C ; LV # Lo HANGUL SYLLABLE GAE +AC38 ; LV # Lo HANGUL SYLLABLE GYA +AC54 ; LV # Lo HANGUL SYLLABLE GYAE +AC70 ; LV # Lo HANGUL SYLLABLE GEO +AC8C ; LV # Lo HANGUL SYLLABLE GE +ACA8 ; LV # Lo HANGUL SYLLABLE GYEO +ACC4 ; LV # Lo HANGUL SYLLABLE GYE +ACE0 ; LV # Lo HANGUL SYLLABLE GO +ACFC ; LV # Lo HANGUL SYLLABLE GWA +AD18 ; LV # Lo HANGUL SYLLABLE GWAE +AD34 ; LV # Lo HANGUL SYLLABLE GOE +AD50 ; LV # Lo HANGUL SYLLABLE GYO +AD6C ; LV # Lo HANGUL SYLLABLE GU +AD88 ; LV # Lo HANGUL SYLLABLE GWEO +ADA4 ; LV # Lo HANGUL SYLLABLE GWE +ADC0 ; LV # Lo HANGUL SYLLABLE GWI +ADDC ; LV # Lo HANGUL SYLLABLE GYU +ADF8 ; LV # Lo HANGUL SYLLABLE GEU +AE14 ; LV # Lo HANGUL SYLLABLE GYI +AE30 ; LV # Lo HANGUL SYLLABLE GI +AE4C ; LV # Lo HANGUL SYLLABLE GGA +AE68 ; LV # Lo HANGUL SYLLABLE GGAE +AE84 ; LV # Lo HANGUL SYLLABLE GGYA +AEA0 ; LV # Lo HANGUL SYLLABLE GGYAE +AEBC ; LV # Lo HANGUL SYLLABLE GGEO +AED8 ; LV # Lo HANGUL SYLLABLE GGE +AEF4 ; LV # Lo HANGUL SYLLABLE GGYEO +AF10 ; LV # Lo HANGUL SYLLABLE GGYE +AF2C ; LV # Lo HANGUL SYLLABLE GGO +AF48 ; LV # Lo HANGUL SYLLABLE GGWA +AF64 ; LV # Lo HANGUL SYLLABLE GGWAE +AF80 ; LV # Lo HANGUL SYLLABLE GGOE +AF9C ; LV # Lo HANGUL SYLLABLE GGYO +AFB8 ; LV # Lo HANGUL SYLLABLE GGU +AFD4 ; LV # Lo HANGUL SYLLABLE GGWEO +AFF0 ; LV # Lo HANGUL SYLLABLE GGWE +B00C ; LV # Lo HANGUL SYLLABLE GGWI +B028 ; LV # Lo HANGUL SYLLABLE GGYU +B044 ; LV # Lo HANGUL SYLLABLE GGEU +B060 ; LV # Lo HANGUL SYLLABLE GGYI +B07C ; LV # Lo HANGUL SYLLABLE GGI +B098 ; LV # Lo HANGUL SYLLABLE NA +B0B4 ; LV # Lo HANGUL SYLLABLE NAE +B0D0 ; LV # Lo HANGUL SYLLABLE NYA +B0EC ; LV # Lo HANGUL SYLLABLE NYAE +B108 ; LV # Lo HANGUL SYLLABLE NEO +B124 ; LV # Lo HANGUL SYLLABLE NE +B140 ; LV # Lo HANGUL SYLLABLE NYEO +B15C ; LV # Lo HANGUL SYLLABLE NYE +B178 ; LV # Lo HANGUL SYLLABLE NO +B194 ; LV # Lo HANGUL SYLLABLE NWA +B1B0 ; LV # Lo HANGUL SYLLABLE NWAE +B1CC ; LV # Lo HANGUL SYLLABLE NOE +B1E8 ; LV # Lo HANGUL SYLLABLE NYO +B204 ; LV # Lo HANGUL SYLLABLE NU +B220 ; LV # Lo HANGUL SYLLABLE NWEO +B23C ; LV # Lo HANGUL SYLLABLE NWE +B258 ; LV # Lo HANGUL SYLLABLE NWI +B274 ; LV # Lo HANGUL SYLLABLE NYU +B290 ; LV # Lo HANGUL SYLLABLE NEU +B2AC ; LV # Lo HANGUL SYLLABLE NYI +B2C8 ; LV # Lo HANGUL SYLLABLE NI +B2E4 ; LV # Lo HANGUL SYLLABLE DA +B300 ; LV # Lo HANGUL SYLLABLE DAE +B31C ; LV # Lo HANGUL SYLLABLE DYA +B338 ; LV # Lo HANGUL SYLLABLE DYAE +B354 ; LV # Lo HANGUL SYLLABLE DEO +B370 ; LV # Lo HANGUL SYLLABLE DE +B38C ; LV # Lo HANGUL SYLLABLE DYEO +B3A8 ; LV # Lo HANGUL SYLLABLE DYE +B3C4 ; LV # Lo HANGUL SYLLABLE DO +B3E0 ; LV # Lo HANGUL SYLLABLE DWA +B3FC ; LV # Lo HANGUL SYLLABLE DWAE +B418 ; LV # Lo HANGUL SYLLABLE DOE +B434 ; LV # Lo HANGUL SYLLABLE DYO +B450 ; LV # Lo HANGUL SYLLABLE DU +B46C ; LV # Lo HANGUL SYLLABLE DWEO +B488 ; LV # Lo HANGUL SYLLABLE DWE +B4A4 ; LV # Lo HANGUL SYLLABLE DWI +B4C0 ; LV # Lo HANGUL SYLLABLE DYU +B4DC ; LV # Lo HANGUL SYLLABLE DEU +B4F8 ; LV # Lo HANGUL SYLLABLE DYI +B514 ; LV # Lo HANGUL SYLLABLE DI +B530 ; LV # Lo HANGUL SYLLABLE DDA +B54C ; LV # Lo HANGUL SYLLABLE DDAE +B568 ; LV # Lo HANGUL SYLLABLE DDYA +B584 ; LV # Lo HANGUL SYLLABLE DDYAE +B5A0 ; LV # Lo HANGUL SYLLABLE DDEO +B5BC ; LV # Lo HANGUL SYLLABLE DDE +B5D8 ; LV # Lo HANGUL SYLLABLE DDYEO +B5F4 ; LV # Lo HANGUL SYLLABLE DDYE +B610 ; LV # Lo HANGUL SYLLABLE DDO +B62C ; LV # Lo HANGUL SYLLABLE DDWA +B648 ; LV # Lo HANGUL SYLLABLE DDWAE +B664 ; LV # Lo HANGUL SYLLABLE DDOE +B680 ; LV # Lo HANGUL SYLLABLE DDYO +B69C ; LV # Lo HANGUL SYLLABLE DDU +B6B8 ; LV # Lo HANGUL SYLLABLE DDWEO +B6D4 ; LV # Lo HANGUL SYLLABLE DDWE +B6F0 ; LV # Lo HANGUL SYLLABLE DDWI +B70C ; LV # Lo HANGUL SYLLABLE DDYU +B728 ; LV # Lo HANGUL SYLLABLE DDEU +B744 ; LV # Lo HANGUL SYLLABLE DDYI +B760 ; LV # Lo HANGUL SYLLABLE DDI +B77C ; LV # Lo HANGUL SYLLABLE RA +B798 ; LV # Lo HANGUL SYLLABLE RAE +B7B4 ; LV # Lo HANGUL SYLLABLE RYA +B7D0 ; LV # Lo HANGUL SYLLABLE RYAE +B7EC ; LV # Lo HANGUL SYLLABLE REO +B808 ; LV # Lo HANGUL SYLLABLE RE +B824 ; LV # Lo HANGUL SYLLABLE RYEO +B840 ; LV # Lo HANGUL SYLLABLE RYE +B85C ; LV # Lo HANGUL SYLLABLE RO +B878 ; LV # Lo HANGUL SYLLABLE RWA +B894 ; LV # Lo HANGUL SYLLABLE RWAE +B8B0 ; LV # Lo HANGUL SYLLABLE ROE +B8CC ; LV # Lo HANGUL SYLLABLE RYO +B8E8 ; LV # Lo HANGUL SYLLABLE RU +B904 ; LV # Lo HANGUL SYLLABLE RWEO +B920 ; LV # Lo HANGUL SYLLABLE RWE +B93C ; LV # Lo HANGUL SYLLABLE RWI +B958 ; LV # Lo HANGUL SYLLABLE RYU +B974 ; LV # Lo HANGUL SYLLABLE REU +B990 ; LV # Lo HANGUL SYLLABLE RYI +B9AC ; LV # Lo HANGUL SYLLABLE RI +B9C8 ; LV # Lo HANGUL SYLLABLE MA +B9E4 ; LV # Lo HANGUL SYLLABLE MAE +BA00 ; LV # Lo HANGUL SYLLABLE MYA +BA1C ; LV # Lo HANGUL SYLLABLE MYAE +BA38 ; LV # Lo HANGUL SYLLABLE MEO +BA54 ; LV # Lo HANGUL SYLLABLE ME +BA70 ; LV # Lo HANGUL SYLLABLE MYEO +BA8C ; LV # Lo HANGUL SYLLABLE MYE +BAA8 ; LV # Lo HANGUL SYLLABLE MO +BAC4 ; LV # Lo HANGUL SYLLABLE MWA +BAE0 ; LV # Lo HANGUL SYLLABLE MWAE +BAFC ; LV # Lo HANGUL SYLLABLE MOE +BB18 ; LV # Lo HANGUL SYLLABLE MYO +BB34 ; LV # Lo HANGUL SYLLABLE MU +BB50 ; LV # Lo HANGUL SYLLABLE MWEO +BB6C ; LV # Lo HANGUL SYLLABLE MWE +BB88 ; LV # Lo HANGUL SYLLABLE MWI +BBA4 ; LV # Lo HANGUL SYLLABLE MYU +BBC0 ; LV # Lo HANGUL SYLLABLE MEU +BBDC ; LV # Lo HANGUL SYLLABLE MYI +BBF8 ; LV # Lo HANGUL SYLLABLE MI +BC14 ; LV # Lo HANGUL SYLLABLE BA +BC30 ; LV # Lo HANGUL SYLLABLE BAE +BC4C ; LV # Lo HANGUL SYLLABLE BYA +BC68 ; LV # Lo HANGUL SYLLABLE BYAE +BC84 ; LV # Lo HANGUL SYLLABLE BEO +BCA0 ; LV # Lo HANGUL SYLLABLE BE +BCBC ; LV # Lo HANGUL SYLLABLE BYEO +BCD8 ; LV # Lo HANGUL SYLLABLE BYE +BCF4 ; LV # Lo HANGUL SYLLABLE BO +BD10 ; LV # Lo HANGUL SYLLABLE BWA +BD2C ; LV # Lo HANGUL SYLLABLE BWAE +BD48 ; LV # Lo HANGUL SYLLABLE BOE +BD64 ; LV # Lo HANGUL SYLLABLE BYO +BD80 ; LV # Lo HANGUL SYLLABLE BU +BD9C ; LV # Lo HANGUL SYLLABLE BWEO +BDB8 ; LV # Lo HANGUL SYLLABLE BWE +BDD4 ; LV # Lo HANGUL SYLLABLE BWI +BDF0 ; LV # Lo HANGUL SYLLABLE BYU +BE0C ; LV # Lo HANGUL SYLLABLE BEU +BE28 ; LV # Lo HANGUL SYLLABLE BYI +BE44 ; LV # Lo HANGUL SYLLABLE BI +BE60 ; LV # Lo HANGUL SYLLABLE BBA +BE7C ; LV # Lo HANGUL SYLLABLE BBAE +BE98 ; LV # Lo HANGUL SYLLABLE BBYA +BEB4 ; LV # Lo HANGUL SYLLABLE BBYAE +BED0 ; LV # Lo HANGUL SYLLABLE BBEO +BEEC ; LV # Lo HANGUL SYLLABLE BBE +BF08 ; LV # Lo HANGUL SYLLABLE BBYEO +BF24 ; LV # Lo HANGUL SYLLABLE BBYE +BF40 ; LV # Lo HANGUL SYLLABLE BBO +BF5C ; LV # Lo HANGUL SYLLABLE BBWA +BF78 ; LV # Lo HANGUL SYLLABLE BBWAE +BF94 ; LV # Lo HANGUL SYLLABLE BBOE +BFB0 ; LV # Lo HANGUL SYLLABLE BBYO +BFCC ; LV # Lo HANGUL SYLLABLE BBU +BFE8 ; LV # Lo HANGUL SYLLABLE BBWEO +C004 ; LV # Lo HANGUL SYLLABLE BBWE +C020 ; LV # Lo HANGUL SYLLABLE BBWI +C03C ; LV # Lo HANGUL SYLLABLE BBYU +C058 ; LV # Lo HANGUL SYLLABLE BBEU +C074 ; LV # Lo HANGUL SYLLABLE BBYI +C090 ; LV # Lo HANGUL SYLLABLE BBI +C0AC ; LV # Lo HANGUL SYLLABLE SA +C0C8 ; LV # Lo HANGUL SYLLABLE SAE +C0E4 ; LV # Lo HANGUL SYLLABLE SYA +C100 ; LV # Lo HANGUL SYLLABLE SYAE +C11C ; LV # Lo HANGUL SYLLABLE SEO +C138 ; LV # Lo HANGUL SYLLABLE SE +C154 ; LV # Lo HANGUL SYLLABLE SYEO +C170 ; LV # Lo HANGUL SYLLABLE SYE +C18C ; LV # Lo HANGUL SYLLABLE SO +C1A8 ; LV # Lo HANGUL SYLLABLE SWA +C1C4 ; LV # Lo HANGUL SYLLABLE SWAE +C1E0 ; LV # Lo HANGUL SYLLABLE SOE +C1FC ; LV # Lo HANGUL SYLLABLE SYO +C218 ; LV # Lo HANGUL SYLLABLE SU +C234 ; LV # Lo HANGUL SYLLABLE SWEO +C250 ; LV # Lo HANGUL SYLLABLE SWE +C26C ; LV # Lo HANGUL SYLLABLE SWI +C288 ; LV # Lo HANGUL SYLLABLE SYU +C2A4 ; LV # Lo HANGUL SYLLABLE SEU +C2C0 ; LV # Lo HANGUL SYLLABLE SYI +C2DC ; LV # Lo HANGUL SYLLABLE SI +C2F8 ; LV # Lo HANGUL SYLLABLE SSA +C314 ; LV # Lo HANGUL SYLLABLE SSAE +C330 ; LV # Lo HANGUL SYLLABLE SSYA +C34C ; LV # Lo HANGUL SYLLABLE SSYAE +C368 ; LV # Lo HANGUL SYLLABLE SSEO +C384 ; LV # Lo HANGUL SYLLABLE SSE +C3A0 ; LV # Lo HANGUL SYLLABLE SSYEO +C3BC ; LV # Lo HANGUL SYLLABLE SSYE +C3D8 ; LV # Lo HANGUL SYLLABLE SSO +C3F4 ; LV # Lo HANGUL SYLLABLE SSWA +C410 ; LV # Lo HANGUL SYLLABLE SSWAE +C42C ; LV # Lo HANGUL SYLLABLE SSOE +C448 ; LV # Lo HANGUL SYLLABLE SSYO +C464 ; LV # Lo HANGUL SYLLABLE SSU +C480 ; LV # Lo HANGUL SYLLABLE SSWEO +C49C ; LV # Lo HANGUL SYLLABLE SSWE +C4B8 ; LV # Lo HANGUL SYLLABLE SSWI +C4D4 ; LV # Lo HANGUL SYLLABLE SSYU +C4F0 ; LV # Lo HANGUL SYLLABLE SSEU +C50C ; LV # Lo HANGUL SYLLABLE SSYI +C528 ; LV # Lo HANGUL SYLLABLE SSI +C544 ; LV # Lo HANGUL SYLLABLE A +C560 ; LV # Lo HANGUL SYLLABLE AE +C57C ; LV # Lo HANGUL SYLLABLE YA +C598 ; LV # Lo HANGUL SYLLABLE YAE +C5B4 ; LV # Lo HANGUL SYLLABLE EO +C5D0 ; LV # Lo HANGUL SYLLABLE E +C5EC ; LV # Lo HANGUL SYLLABLE YEO +C608 ; LV # Lo HANGUL SYLLABLE YE +C624 ; LV # Lo HANGUL SYLLABLE O +C640 ; LV # Lo HANGUL SYLLABLE WA +C65C ; LV # Lo HANGUL SYLLABLE WAE +C678 ; LV # Lo HANGUL SYLLABLE OE +C694 ; LV # Lo HANGUL SYLLABLE YO +C6B0 ; LV # Lo HANGUL SYLLABLE U +C6CC ; LV # Lo HANGUL SYLLABLE WEO +C6E8 ; LV # Lo HANGUL SYLLABLE WE +C704 ; LV # Lo HANGUL SYLLABLE WI +C720 ; LV # Lo HANGUL SYLLABLE YU +C73C ; LV # Lo HANGUL SYLLABLE EU +C758 ; LV # Lo HANGUL SYLLABLE YI +C774 ; LV # Lo HANGUL SYLLABLE I +C790 ; LV # Lo HANGUL SYLLABLE JA +C7AC ; LV # Lo HANGUL SYLLABLE JAE +C7C8 ; LV # Lo HANGUL SYLLABLE JYA +C7E4 ; LV # Lo HANGUL SYLLABLE JYAE +C800 ; LV # Lo HANGUL SYLLABLE JEO +C81C ; LV # Lo HANGUL SYLLABLE JE +C838 ; LV # Lo HANGUL SYLLABLE JYEO +C854 ; LV # Lo HANGUL SYLLABLE JYE +C870 ; LV # Lo HANGUL SYLLABLE JO +C88C ; LV # Lo HANGUL SYLLABLE JWA +C8A8 ; LV # Lo HANGUL SYLLABLE JWAE +C8C4 ; LV # Lo HANGUL SYLLABLE JOE +C8E0 ; LV # Lo HANGUL SYLLABLE JYO +C8FC ; LV # Lo HANGUL SYLLABLE JU +C918 ; LV # Lo HANGUL SYLLABLE JWEO +C934 ; LV # Lo HANGUL SYLLABLE JWE +C950 ; LV # Lo HANGUL SYLLABLE JWI +C96C ; LV # Lo HANGUL SYLLABLE JYU +C988 ; LV # Lo HANGUL SYLLABLE JEU +C9A4 ; LV # Lo HANGUL SYLLABLE JYI +C9C0 ; LV # Lo HANGUL SYLLABLE JI +C9DC ; LV # Lo HANGUL SYLLABLE JJA +C9F8 ; LV # Lo HANGUL SYLLABLE JJAE +CA14 ; LV # Lo HANGUL SYLLABLE JJYA +CA30 ; LV # Lo HANGUL SYLLABLE JJYAE +CA4C ; LV # Lo HANGUL SYLLABLE JJEO +CA68 ; LV # Lo HANGUL SYLLABLE JJE +CA84 ; LV # Lo HANGUL SYLLABLE JJYEO +CAA0 ; LV # Lo HANGUL SYLLABLE JJYE +CABC ; LV # Lo HANGUL SYLLABLE JJO +CAD8 ; LV # Lo HANGUL SYLLABLE JJWA +CAF4 ; LV # Lo HANGUL SYLLABLE JJWAE +CB10 ; LV # Lo HANGUL SYLLABLE JJOE +CB2C ; LV # Lo HANGUL SYLLABLE JJYO +CB48 ; LV # Lo HANGUL SYLLABLE JJU +CB64 ; LV # Lo HANGUL SYLLABLE JJWEO +CB80 ; LV # Lo HANGUL SYLLABLE JJWE +CB9C ; LV # Lo HANGUL SYLLABLE JJWI +CBB8 ; LV # Lo HANGUL SYLLABLE JJYU +CBD4 ; LV # Lo HANGUL SYLLABLE JJEU +CBF0 ; LV # Lo HANGUL SYLLABLE JJYI +CC0C ; LV # Lo HANGUL SYLLABLE JJI +CC28 ; LV # Lo HANGUL SYLLABLE CA +CC44 ; LV # Lo HANGUL SYLLABLE CAE +CC60 ; LV # Lo HANGUL SYLLABLE CYA +CC7C ; LV # Lo HANGUL SYLLABLE CYAE +CC98 ; LV # Lo HANGUL SYLLABLE CEO +CCB4 ; LV # Lo HANGUL SYLLABLE CE +CCD0 ; LV # Lo HANGUL SYLLABLE CYEO +CCEC ; LV # Lo HANGUL SYLLABLE CYE +CD08 ; LV # Lo HANGUL SYLLABLE CO +CD24 ; LV # Lo HANGUL SYLLABLE CWA +CD40 ; LV # Lo HANGUL SYLLABLE CWAE +CD5C ; LV # Lo HANGUL SYLLABLE COE +CD78 ; LV # Lo HANGUL SYLLABLE CYO +CD94 ; LV # Lo HANGUL SYLLABLE CU +CDB0 ; LV # Lo HANGUL SYLLABLE CWEO +CDCC ; LV # Lo HANGUL SYLLABLE CWE +CDE8 ; LV # Lo HANGUL SYLLABLE CWI +CE04 ; LV # Lo HANGUL SYLLABLE CYU +CE20 ; LV # Lo HANGUL SYLLABLE CEU +CE3C ; LV # Lo HANGUL SYLLABLE CYI +CE58 ; LV # Lo HANGUL SYLLABLE CI +CE74 ; LV # Lo HANGUL SYLLABLE KA +CE90 ; LV # Lo HANGUL SYLLABLE KAE +CEAC ; LV # Lo HANGUL SYLLABLE KYA +CEC8 ; LV # Lo HANGUL SYLLABLE KYAE +CEE4 ; LV # Lo HANGUL SYLLABLE KEO +CF00 ; LV # Lo HANGUL SYLLABLE KE +CF1C ; LV # Lo HANGUL SYLLABLE KYEO +CF38 ; LV # Lo HANGUL SYLLABLE KYE +CF54 ; LV # Lo HANGUL SYLLABLE KO +CF70 ; LV # Lo HANGUL SYLLABLE KWA +CF8C ; LV # Lo HANGUL SYLLABLE KWAE +CFA8 ; LV # Lo HANGUL SYLLABLE KOE +CFC4 ; LV # Lo HANGUL SYLLABLE KYO +CFE0 ; LV # Lo HANGUL SYLLABLE KU +CFFC ; LV # Lo HANGUL SYLLABLE KWEO +D018 ; LV # Lo HANGUL SYLLABLE KWE +D034 ; LV # Lo HANGUL SYLLABLE KWI +D050 ; LV # Lo HANGUL SYLLABLE KYU +D06C ; LV # Lo HANGUL SYLLABLE KEU +D088 ; LV # Lo HANGUL SYLLABLE KYI +D0A4 ; LV # Lo HANGUL SYLLABLE KI +D0C0 ; LV # Lo HANGUL SYLLABLE TA +D0DC ; LV # Lo HANGUL SYLLABLE TAE +D0F8 ; LV # Lo HANGUL SYLLABLE TYA +D114 ; LV # Lo HANGUL SYLLABLE TYAE +D130 ; LV # Lo HANGUL SYLLABLE TEO +D14C ; LV # Lo HANGUL SYLLABLE TE +D168 ; LV # Lo HANGUL SYLLABLE TYEO +D184 ; LV # Lo HANGUL SYLLABLE TYE +D1A0 ; LV # Lo HANGUL SYLLABLE TO +D1BC ; LV # Lo HANGUL SYLLABLE TWA +D1D8 ; LV # Lo HANGUL SYLLABLE TWAE +D1F4 ; LV # Lo HANGUL SYLLABLE TOE +D210 ; LV # Lo HANGUL SYLLABLE TYO +D22C ; LV # Lo HANGUL SYLLABLE TU +D248 ; LV # Lo HANGUL SYLLABLE TWEO +D264 ; LV # Lo HANGUL SYLLABLE TWE +D280 ; LV # Lo HANGUL SYLLABLE TWI +D29C ; LV # Lo HANGUL SYLLABLE TYU +D2B8 ; LV # Lo HANGUL SYLLABLE TEU +D2D4 ; LV # Lo HANGUL SYLLABLE TYI +D2F0 ; LV # Lo HANGUL SYLLABLE TI +D30C ; LV # Lo HANGUL SYLLABLE PA +D328 ; LV # Lo HANGUL SYLLABLE PAE +D344 ; LV # Lo HANGUL SYLLABLE PYA +D360 ; LV # Lo HANGUL SYLLABLE PYAE +D37C ; LV # Lo HANGUL SYLLABLE PEO +D398 ; LV # Lo HANGUL SYLLABLE PE +D3B4 ; LV # Lo HANGUL SYLLABLE PYEO +D3D0 ; LV # Lo HANGUL SYLLABLE PYE +D3EC ; LV # Lo HANGUL SYLLABLE PO +D408 ; LV # Lo HANGUL SYLLABLE PWA +D424 ; LV # Lo HANGUL SYLLABLE PWAE +D440 ; LV # Lo HANGUL SYLLABLE POE +D45C ; LV # Lo HANGUL SYLLABLE PYO +D478 ; LV # Lo HANGUL SYLLABLE PU +D494 ; LV # Lo HANGUL SYLLABLE PWEO +D4B0 ; LV # Lo HANGUL SYLLABLE PWE +D4CC ; LV # Lo HANGUL SYLLABLE PWI +D4E8 ; LV # Lo HANGUL SYLLABLE PYU +D504 ; LV # Lo HANGUL SYLLABLE PEU +D520 ; LV # Lo HANGUL SYLLABLE PYI +D53C ; LV # Lo HANGUL SYLLABLE PI +D558 ; LV # Lo HANGUL SYLLABLE HA +D574 ; LV # Lo HANGUL SYLLABLE HAE +D590 ; LV # Lo HANGUL SYLLABLE HYA +D5AC ; LV # Lo HANGUL SYLLABLE HYAE +D5C8 ; LV # Lo HANGUL SYLLABLE HEO +D5E4 ; LV # Lo HANGUL SYLLABLE HE +D600 ; LV # Lo HANGUL SYLLABLE HYEO +D61C ; LV # Lo HANGUL SYLLABLE HYE +D638 ; LV # Lo HANGUL SYLLABLE HO +D654 ; LV # Lo HANGUL SYLLABLE HWA +D670 ; LV # Lo HANGUL SYLLABLE HWAE +D68C ; LV # Lo HANGUL SYLLABLE HOE +D6A8 ; LV # Lo HANGUL SYLLABLE HYO +D6C4 ; LV # Lo HANGUL SYLLABLE HU +D6E0 ; LV # Lo HANGUL SYLLABLE HWEO +D6FC ; LV # Lo HANGUL SYLLABLE HWE +D718 ; LV # Lo HANGUL SYLLABLE HWI +D734 ; LV # Lo HANGUL SYLLABLE HYU +D750 ; LV # Lo HANGUL SYLLABLE HEU +D76C ; LV # Lo HANGUL SYLLABLE HYI +D788 ; LV # Lo HANGUL SYLLABLE HI + +# Total code points: 399 + +# ================================================ + +# Hangul_Syllable_Type=LVT_Syllable + +AC01..AC1B ; LVT # Lo [27] HANGUL SYLLABLE GAG..HANGUL SYLLABLE GAH +AC1D..AC37 ; LVT # Lo [27] HANGUL SYLLABLE GAEG..HANGUL SYLLABLE GAEH +AC39..AC53 ; LVT # Lo [27] HANGUL SYLLABLE GYAG..HANGUL SYLLABLE GYAH +AC55..AC6F ; LVT # Lo [27] HANGUL SYLLABLE GYAEG..HANGUL SYLLABLE GYAEH +AC71..AC8B ; LVT # Lo [27] HANGUL SYLLABLE GEOG..HANGUL SYLLABLE GEOH +AC8D..ACA7 ; LVT # Lo [27] HANGUL SYLLABLE GEG..HANGUL SYLLABLE GEH +ACA9..ACC3 ; LVT # Lo [27] HANGUL SYLLABLE GYEOG..HANGUL SYLLABLE GYEOH +ACC5..ACDF ; LVT # Lo [27] HANGUL SYLLABLE GYEG..HANGUL SYLLABLE GYEH +ACE1..ACFB ; LVT # Lo [27] HANGUL SYLLABLE GOG..HANGUL SYLLABLE GOH +ACFD..AD17 ; LVT # Lo [27] HANGUL SYLLABLE GWAG..HANGUL SYLLABLE GWAH +AD19..AD33 ; LVT # Lo [27] HANGUL SYLLABLE GWAEG..HANGUL SYLLABLE GWAEH +AD35..AD4F ; LVT # Lo [27] HANGUL SYLLABLE GOEG..HANGUL SYLLABLE GOEH +AD51..AD6B ; LVT # Lo [27] HANGUL SYLLABLE GYOG..HANGUL SYLLABLE GYOH +AD6D..AD87 ; LVT # Lo [27] HANGUL SYLLABLE GUG..HANGUL SYLLABLE GUH +AD89..ADA3 ; LVT # Lo [27] HANGUL SYLLABLE GWEOG..HANGUL SYLLABLE GWEOH +ADA5..ADBF ; LVT # Lo [27] HANGUL SYLLABLE GWEG..HANGUL SYLLABLE GWEH +ADC1..ADDB ; LVT # Lo [27] HANGUL SYLLABLE GWIG..HANGUL SYLLABLE GWIH +ADDD..ADF7 ; LVT # Lo [27] HANGUL SYLLABLE GYUG..HANGUL SYLLABLE GYUH +ADF9..AE13 ; LVT # Lo [27] HANGUL SYLLABLE GEUG..HANGUL SYLLABLE GEUH +AE15..AE2F ; LVT # Lo [27] HANGUL SYLLABLE GYIG..HANGUL SYLLABLE GYIH +AE31..AE4B ; LVT # Lo [27] HANGUL SYLLABLE GIG..HANGUL SYLLABLE GIH +AE4D..AE67 ; LVT # Lo [27] HANGUL SYLLABLE GGAG..HANGUL SYLLABLE GGAH +AE69..AE83 ; LVT # Lo [27] HANGUL SYLLABLE GGAEG..HANGUL SYLLABLE GGAEH +AE85..AE9F ; LVT # Lo [27] HANGUL SYLLABLE GGYAG..HANGUL SYLLABLE GGYAH +AEA1..AEBB ; LVT # Lo [27] HANGUL SYLLABLE GGYAEG..HANGUL SYLLABLE GGYAEH +AEBD..AED7 ; LVT # Lo [27] HANGUL SYLLABLE GGEOG..HANGUL SYLLABLE GGEOH +AED9..AEF3 ; LVT # Lo [27] HANGUL SYLLABLE GGEG..HANGUL SYLLABLE GGEH +AEF5..AF0F ; LVT # Lo [27] HANGUL SYLLABLE GGYEOG..HANGUL SYLLABLE GGYEOH +AF11..AF2B ; LVT # Lo [27] HANGUL SYLLABLE GGYEG..HANGUL SYLLABLE GGYEH +AF2D..AF47 ; LVT # Lo [27] HANGUL SYLLABLE GGOG..HANGUL SYLLABLE GGOH +AF49..AF63 ; LVT # Lo [27] HANGUL SYLLABLE GGWAG..HANGUL SYLLABLE GGWAH +AF65..AF7F ; LVT # Lo [27] HANGUL SYLLABLE GGWAEG..HANGUL SYLLABLE GGWAEH +AF81..AF9B ; LVT # Lo [27] HANGUL SYLLABLE GGOEG..HANGUL SYLLABLE GGOEH +AF9D..AFB7 ; LVT # Lo [27] HANGUL SYLLABLE GGYOG..HANGUL SYLLABLE GGYOH +AFB9..AFD3 ; LVT # Lo [27] HANGUL SYLLABLE GGUG..HANGUL SYLLABLE GGUH +AFD5..AFEF ; LVT # Lo [27] HANGUL SYLLABLE GGWEOG..HANGUL SYLLABLE GGWEOH +AFF1..B00B ; LVT # Lo [27] HANGUL SYLLABLE GGWEG..HANGUL SYLLABLE GGWEH +B00D..B027 ; LVT # Lo [27] HANGUL SYLLABLE GGWIG..HANGUL SYLLABLE GGWIH +B029..B043 ; LVT # Lo [27] HANGUL SYLLABLE GGYUG..HANGUL SYLLABLE GGYUH +B045..B05F ; LVT # Lo [27] HANGUL SYLLABLE GGEUG..HANGUL SYLLABLE GGEUH +B061..B07B ; LVT # Lo [27] HANGUL SYLLABLE GGYIG..HANGUL SYLLABLE GGYIH +B07D..B097 ; LVT # Lo [27] HANGUL SYLLABLE GGIG..HANGUL SYLLABLE GGIH +B099..B0B3 ; LVT # Lo [27] HANGUL SYLLABLE NAG..HANGUL SYLLABLE NAH +B0B5..B0CF ; LVT # Lo [27] HANGUL SYLLABLE NAEG..HANGUL SYLLABLE NAEH +B0D1..B0EB ; LVT # Lo [27] HANGUL SYLLABLE NYAG..HANGUL SYLLABLE NYAH +B0ED..B107 ; LVT # Lo [27] HANGUL SYLLABLE NYAEG..HANGUL SYLLABLE NYAEH +B109..B123 ; LVT # Lo [27] HANGUL SYLLABLE NEOG..HANGUL SYLLABLE NEOH +B125..B13F ; LVT # Lo [27] HANGUL SYLLABLE NEG..HANGUL SYLLABLE NEH +B141..B15B ; LVT # Lo [27] HANGUL SYLLABLE NYEOG..HANGUL SYLLABLE NYEOH +B15D..B177 ; LVT # Lo [27] HANGUL SYLLABLE NYEG..HANGUL SYLLABLE NYEH +B179..B193 ; LVT # Lo [27] HANGUL SYLLABLE NOG..HANGUL SYLLABLE NOH +B195..B1AF ; LVT # Lo [27] HANGUL SYLLABLE NWAG..HANGUL SYLLABLE NWAH +B1B1..B1CB ; LVT # Lo [27] HANGUL SYLLABLE NWAEG..HANGUL SYLLABLE NWAEH +B1CD..B1E7 ; LVT # Lo [27] HANGUL SYLLABLE NOEG..HANGUL SYLLABLE NOEH +B1E9..B203 ; LVT # Lo [27] HANGUL SYLLABLE NYOG..HANGUL SYLLABLE NYOH +B205..B21F ; LVT # Lo [27] HANGUL SYLLABLE NUG..HANGUL SYLLABLE NUH +B221..B23B ; LVT # Lo [27] HANGUL SYLLABLE NWEOG..HANGUL SYLLABLE NWEOH +B23D..B257 ; LVT # Lo [27] HANGUL SYLLABLE NWEG..HANGUL SYLLABLE NWEH +B259..B273 ; LVT # Lo [27] HANGUL SYLLABLE NWIG..HANGUL SYLLABLE NWIH +B275..B28F ; LVT # Lo [27] HANGUL SYLLABLE NYUG..HANGUL SYLLABLE NYUH +B291..B2AB ; LVT # Lo [27] HANGUL SYLLABLE NEUG..HANGUL SYLLABLE NEUH +B2AD..B2C7 ; LVT # Lo [27] HANGUL SYLLABLE NYIG..HANGUL SYLLABLE NYIH +B2C9..B2E3 ; LVT # Lo [27] HANGUL SYLLABLE NIG..HANGUL SYLLABLE NIH +B2E5..B2FF ; LVT # Lo [27] HANGUL SYLLABLE DAG..HANGUL SYLLABLE DAH +B301..B31B ; LVT # Lo [27] HANGUL SYLLABLE DAEG..HANGUL SYLLABLE DAEH +B31D..B337 ; LVT # Lo [27] HANGUL SYLLABLE DYAG..HANGUL SYLLABLE DYAH +B339..B353 ; LVT # Lo [27] HANGUL SYLLABLE DYAEG..HANGUL SYLLABLE DYAEH +B355..B36F ; LVT # Lo [27] HANGUL SYLLABLE DEOG..HANGUL SYLLABLE DEOH +B371..B38B ; LVT # Lo [27] HANGUL SYLLABLE DEG..HANGUL SYLLABLE DEH +B38D..B3A7 ; LVT # Lo [27] HANGUL SYLLABLE DYEOG..HANGUL SYLLABLE DYEOH +B3A9..B3C3 ; LVT # Lo [27] HANGUL SYLLABLE DYEG..HANGUL SYLLABLE DYEH +B3C5..B3DF ; LVT # Lo [27] HANGUL SYLLABLE DOG..HANGUL SYLLABLE DOH +B3E1..B3FB ; LVT # Lo [27] HANGUL SYLLABLE DWAG..HANGUL SYLLABLE DWAH +B3FD..B417 ; LVT # Lo [27] HANGUL SYLLABLE DWAEG..HANGUL SYLLABLE DWAEH +B419..B433 ; LVT # Lo [27] HANGUL SYLLABLE DOEG..HANGUL SYLLABLE DOEH +B435..B44F ; LVT # Lo [27] HANGUL SYLLABLE DYOG..HANGUL SYLLABLE DYOH +B451..B46B ; LVT # Lo [27] HANGUL SYLLABLE DUG..HANGUL SYLLABLE DUH +B46D..B487 ; LVT # Lo [27] HANGUL SYLLABLE DWEOG..HANGUL SYLLABLE DWEOH +B489..B4A3 ; LVT # Lo [27] HANGUL SYLLABLE DWEG..HANGUL SYLLABLE DWEH +B4A5..B4BF ; LVT # Lo [27] HANGUL SYLLABLE DWIG..HANGUL SYLLABLE DWIH +B4C1..B4DB ; LVT # Lo [27] HANGUL SYLLABLE DYUG..HANGUL SYLLABLE DYUH +B4DD..B4F7 ; LVT # Lo [27] HANGUL SYLLABLE DEUG..HANGUL SYLLABLE DEUH +B4F9..B513 ; LVT # Lo [27] HANGUL SYLLABLE DYIG..HANGUL SYLLABLE DYIH +B515..B52F ; LVT # Lo [27] HANGUL SYLLABLE DIG..HANGUL SYLLABLE DIH +B531..B54B ; LVT # Lo [27] HANGUL SYLLABLE DDAG..HANGUL SYLLABLE DDAH +B54D..B567 ; LVT # Lo [27] HANGUL SYLLABLE DDAEG..HANGUL SYLLABLE DDAEH +B569..B583 ; LVT # Lo [27] HANGUL SYLLABLE DDYAG..HANGUL SYLLABLE DDYAH +B585..B59F ; LVT # Lo [27] HANGUL SYLLABLE DDYAEG..HANGUL SYLLABLE DDYAEH +B5A1..B5BB ; LVT # Lo [27] HANGUL SYLLABLE DDEOG..HANGUL SYLLABLE DDEOH +B5BD..B5D7 ; LVT # Lo [27] HANGUL SYLLABLE DDEG..HANGUL SYLLABLE DDEH +B5D9..B5F3 ; LVT # Lo [27] HANGUL SYLLABLE DDYEOG..HANGUL SYLLABLE DDYEOH +B5F5..B60F ; LVT # Lo [27] HANGUL SYLLABLE DDYEG..HANGUL SYLLABLE DDYEH +B611..B62B ; LVT # Lo [27] HANGUL SYLLABLE DDOG..HANGUL SYLLABLE DDOH +B62D..B647 ; LVT # Lo [27] HANGUL SYLLABLE DDWAG..HANGUL SYLLABLE DDWAH +B649..B663 ; LVT # Lo [27] HANGUL SYLLABLE DDWAEG..HANGUL SYLLABLE DDWAEH +B665..B67F ; LVT # Lo [27] HANGUL SYLLABLE DDOEG..HANGUL SYLLABLE DDOEH +B681..B69B ; LVT # Lo [27] HANGUL SYLLABLE DDYOG..HANGUL SYLLABLE DDYOH +B69D..B6B7 ; LVT # Lo [27] HANGUL SYLLABLE DDUG..HANGUL SYLLABLE DDUH +B6B9..B6D3 ; LVT # Lo [27] HANGUL SYLLABLE DDWEOG..HANGUL SYLLABLE DDWEOH +B6D5..B6EF ; LVT # Lo [27] HANGUL SYLLABLE DDWEG..HANGUL SYLLABLE DDWEH +B6F1..B70B ; LVT # Lo [27] HANGUL SYLLABLE DDWIG..HANGUL SYLLABLE DDWIH +B70D..B727 ; LVT # Lo [27] HANGUL SYLLABLE DDYUG..HANGUL SYLLABLE DDYUH +B729..B743 ; LVT # Lo [27] HANGUL SYLLABLE DDEUG..HANGUL SYLLABLE DDEUH +B745..B75F ; LVT # Lo [27] HANGUL SYLLABLE DDYIG..HANGUL SYLLABLE DDYIH +B761..B77B ; LVT # Lo [27] HANGUL SYLLABLE DDIG..HANGUL SYLLABLE DDIH +B77D..B797 ; LVT # Lo [27] HANGUL SYLLABLE RAG..HANGUL SYLLABLE RAH +B799..B7B3 ; LVT # Lo [27] HANGUL SYLLABLE RAEG..HANGUL SYLLABLE RAEH +B7B5..B7CF ; LVT # Lo [27] HANGUL SYLLABLE RYAG..HANGUL SYLLABLE RYAH +B7D1..B7EB ; LVT # Lo [27] HANGUL SYLLABLE RYAEG..HANGUL SYLLABLE RYAEH +B7ED..B807 ; LVT # Lo [27] HANGUL SYLLABLE REOG..HANGUL SYLLABLE REOH +B809..B823 ; LVT # Lo [27] HANGUL SYLLABLE REG..HANGUL SYLLABLE REH +B825..B83F ; LVT # Lo [27] HANGUL SYLLABLE RYEOG..HANGUL SYLLABLE RYEOH +B841..B85B ; LVT # Lo [27] HANGUL SYLLABLE RYEG..HANGUL SYLLABLE RYEH +B85D..B877 ; LVT # Lo [27] HANGUL SYLLABLE ROG..HANGUL SYLLABLE ROH +B879..B893 ; LVT # Lo [27] HANGUL SYLLABLE RWAG..HANGUL SYLLABLE RWAH +B895..B8AF ; LVT # Lo [27] HANGUL SYLLABLE RWAEG..HANGUL SYLLABLE RWAEH +B8B1..B8CB ; LVT # Lo [27] HANGUL SYLLABLE ROEG..HANGUL SYLLABLE ROEH +B8CD..B8E7 ; LVT # Lo [27] HANGUL SYLLABLE RYOG..HANGUL SYLLABLE RYOH +B8E9..B903 ; LVT # Lo [27] HANGUL SYLLABLE RUG..HANGUL SYLLABLE RUH +B905..B91F ; LVT # Lo [27] HANGUL SYLLABLE RWEOG..HANGUL SYLLABLE RWEOH +B921..B93B ; LVT # Lo [27] HANGUL SYLLABLE RWEG..HANGUL SYLLABLE RWEH +B93D..B957 ; LVT # Lo [27] HANGUL SYLLABLE RWIG..HANGUL SYLLABLE RWIH +B959..B973 ; LVT # Lo [27] HANGUL SYLLABLE RYUG..HANGUL SYLLABLE RYUH +B975..B98F ; LVT # Lo [27] HANGUL SYLLABLE REUG..HANGUL SYLLABLE REUH +B991..B9AB ; LVT # Lo [27] HANGUL SYLLABLE RYIG..HANGUL SYLLABLE RYIH +B9AD..B9C7 ; LVT # Lo [27] HANGUL SYLLABLE RIG..HANGUL SYLLABLE RIH +B9C9..B9E3 ; LVT # Lo [27] HANGUL SYLLABLE MAG..HANGUL SYLLABLE MAH +B9E5..B9FF ; LVT # Lo [27] HANGUL SYLLABLE MAEG..HANGUL SYLLABLE MAEH +BA01..BA1B ; LVT # Lo [27] HANGUL SYLLABLE MYAG..HANGUL SYLLABLE MYAH +BA1D..BA37 ; LVT # Lo [27] HANGUL SYLLABLE MYAEG..HANGUL SYLLABLE MYAEH +BA39..BA53 ; LVT # Lo [27] HANGUL SYLLABLE MEOG..HANGUL SYLLABLE MEOH +BA55..BA6F ; LVT # Lo [27] HANGUL SYLLABLE MEG..HANGUL SYLLABLE MEH +BA71..BA8B ; LVT # Lo [27] HANGUL SYLLABLE MYEOG..HANGUL SYLLABLE MYEOH +BA8D..BAA7 ; LVT # Lo [27] HANGUL SYLLABLE MYEG..HANGUL SYLLABLE MYEH +BAA9..BAC3 ; LVT # Lo [27] HANGUL SYLLABLE MOG..HANGUL SYLLABLE MOH +BAC5..BADF ; LVT # Lo [27] HANGUL SYLLABLE MWAG..HANGUL SYLLABLE MWAH +BAE1..BAFB ; LVT # Lo [27] HANGUL SYLLABLE MWAEG..HANGUL SYLLABLE MWAEH +BAFD..BB17 ; LVT # Lo [27] HANGUL SYLLABLE MOEG..HANGUL SYLLABLE MOEH +BB19..BB33 ; LVT # Lo [27] HANGUL SYLLABLE MYOG..HANGUL SYLLABLE MYOH +BB35..BB4F ; LVT # Lo [27] HANGUL SYLLABLE MUG..HANGUL SYLLABLE MUH +BB51..BB6B ; LVT # Lo [27] HANGUL SYLLABLE MWEOG..HANGUL SYLLABLE MWEOH +BB6D..BB87 ; LVT # Lo [27] HANGUL SYLLABLE MWEG..HANGUL SYLLABLE MWEH +BB89..BBA3 ; LVT # Lo [27] HANGUL SYLLABLE MWIG..HANGUL SYLLABLE MWIH +BBA5..BBBF ; LVT # Lo [27] HANGUL SYLLABLE MYUG..HANGUL SYLLABLE MYUH +BBC1..BBDB ; LVT # Lo [27] HANGUL SYLLABLE MEUG..HANGUL SYLLABLE MEUH +BBDD..BBF7 ; LVT # Lo [27] HANGUL SYLLABLE MYIG..HANGUL SYLLABLE MYIH +BBF9..BC13 ; LVT # Lo [27] HANGUL SYLLABLE MIG..HANGUL SYLLABLE MIH +BC15..BC2F ; LVT # Lo [27] HANGUL SYLLABLE BAG..HANGUL SYLLABLE BAH +BC31..BC4B ; LVT # Lo [27] HANGUL SYLLABLE BAEG..HANGUL SYLLABLE BAEH +BC4D..BC67 ; LVT # Lo [27] HANGUL SYLLABLE BYAG..HANGUL SYLLABLE BYAH +BC69..BC83 ; LVT # Lo [27] HANGUL SYLLABLE BYAEG..HANGUL SYLLABLE BYAEH +BC85..BC9F ; LVT # Lo [27] HANGUL SYLLABLE BEOG..HANGUL SYLLABLE BEOH +BCA1..BCBB ; LVT # Lo [27] HANGUL SYLLABLE BEG..HANGUL SYLLABLE BEH +BCBD..BCD7 ; LVT # Lo [27] HANGUL SYLLABLE BYEOG..HANGUL SYLLABLE BYEOH +BCD9..BCF3 ; LVT # Lo [27] HANGUL SYLLABLE BYEG..HANGUL SYLLABLE BYEH +BCF5..BD0F ; LVT # Lo [27] HANGUL SYLLABLE BOG..HANGUL SYLLABLE BOH +BD11..BD2B ; LVT # Lo [27] HANGUL SYLLABLE BWAG..HANGUL SYLLABLE BWAH +BD2D..BD47 ; LVT # Lo [27] HANGUL SYLLABLE BWAEG..HANGUL SYLLABLE BWAEH +BD49..BD63 ; LVT # Lo [27] HANGUL SYLLABLE BOEG..HANGUL SYLLABLE BOEH +BD65..BD7F ; LVT # Lo [27] HANGUL SYLLABLE BYOG..HANGUL SYLLABLE BYOH +BD81..BD9B ; LVT # Lo [27] HANGUL SYLLABLE BUG..HANGUL SYLLABLE BUH +BD9D..BDB7 ; LVT # Lo [27] HANGUL SYLLABLE BWEOG..HANGUL SYLLABLE BWEOH +BDB9..BDD3 ; LVT # Lo [27] HANGUL SYLLABLE BWEG..HANGUL SYLLABLE BWEH +BDD5..BDEF ; LVT # Lo [27] HANGUL SYLLABLE BWIG..HANGUL SYLLABLE BWIH +BDF1..BE0B ; LVT # Lo [27] HANGUL SYLLABLE BYUG..HANGUL SYLLABLE BYUH +BE0D..BE27 ; LVT # Lo [27] HANGUL SYLLABLE BEUG..HANGUL SYLLABLE BEUH +BE29..BE43 ; LVT # Lo [27] HANGUL SYLLABLE BYIG..HANGUL SYLLABLE BYIH +BE45..BE5F ; LVT # Lo [27] HANGUL SYLLABLE BIG..HANGUL SYLLABLE BIH +BE61..BE7B ; LVT # Lo [27] HANGUL SYLLABLE BBAG..HANGUL SYLLABLE BBAH +BE7D..BE97 ; LVT # Lo [27] HANGUL SYLLABLE BBAEG..HANGUL SYLLABLE BBAEH +BE99..BEB3 ; LVT # Lo [27] HANGUL SYLLABLE BBYAG..HANGUL SYLLABLE BBYAH +BEB5..BECF ; LVT # Lo [27] HANGUL SYLLABLE BBYAEG..HANGUL SYLLABLE BBYAEH +BED1..BEEB ; LVT # Lo [27] HANGUL SYLLABLE BBEOG..HANGUL SYLLABLE BBEOH +BEED..BF07 ; LVT # Lo [27] HANGUL SYLLABLE BBEG..HANGUL SYLLABLE BBEH +BF09..BF23 ; LVT # Lo [27] HANGUL SYLLABLE BBYEOG..HANGUL SYLLABLE BBYEOH +BF25..BF3F ; LVT # Lo [27] HANGUL SYLLABLE BBYEG..HANGUL SYLLABLE BBYEH +BF41..BF5B ; LVT # Lo [27] HANGUL SYLLABLE BBOG..HANGUL SYLLABLE BBOH +BF5D..BF77 ; LVT # Lo [27] HANGUL SYLLABLE BBWAG..HANGUL SYLLABLE BBWAH +BF79..BF93 ; LVT # Lo [27] HANGUL SYLLABLE BBWAEG..HANGUL SYLLABLE BBWAEH +BF95..BFAF ; LVT # Lo [27] HANGUL SYLLABLE BBOEG..HANGUL SYLLABLE BBOEH +BFB1..BFCB ; LVT # Lo [27] HANGUL SYLLABLE BBYOG..HANGUL SYLLABLE BBYOH +BFCD..BFE7 ; LVT # Lo [27] HANGUL SYLLABLE BBUG..HANGUL SYLLABLE BBUH +BFE9..C003 ; LVT # Lo [27] HANGUL SYLLABLE BBWEOG..HANGUL SYLLABLE BBWEOH +C005..C01F ; LVT # Lo [27] HANGUL SYLLABLE BBWEG..HANGUL SYLLABLE BBWEH +C021..C03B ; LVT # Lo [27] HANGUL SYLLABLE BBWIG..HANGUL SYLLABLE BBWIH +C03D..C057 ; LVT # Lo [27] HANGUL SYLLABLE BBYUG..HANGUL SYLLABLE BBYUH +C059..C073 ; LVT # Lo [27] HANGUL SYLLABLE BBEUG..HANGUL SYLLABLE BBEUH +C075..C08F ; LVT # Lo [27] HANGUL SYLLABLE BBYIG..HANGUL SYLLABLE BBYIH +C091..C0AB ; LVT # Lo [27] HANGUL SYLLABLE BBIG..HANGUL SYLLABLE BBIH +C0AD..C0C7 ; LVT # Lo [27] HANGUL SYLLABLE SAG..HANGUL SYLLABLE SAH +C0C9..C0E3 ; LVT # Lo [27] HANGUL SYLLABLE SAEG..HANGUL SYLLABLE SAEH +C0E5..C0FF ; LVT # Lo [27] HANGUL SYLLABLE SYAG..HANGUL SYLLABLE SYAH +C101..C11B ; LVT # Lo [27] HANGUL SYLLABLE SYAEG..HANGUL SYLLABLE SYAEH +C11D..C137 ; LVT # Lo [27] HANGUL SYLLABLE SEOG..HANGUL SYLLABLE SEOH +C139..C153 ; LVT # Lo [27] HANGUL SYLLABLE SEG..HANGUL SYLLABLE SEH +C155..C16F ; LVT # Lo [27] HANGUL SYLLABLE SYEOG..HANGUL SYLLABLE SYEOH +C171..C18B ; LVT # Lo [27] HANGUL SYLLABLE SYEG..HANGUL SYLLABLE SYEH +C18D..C1A7 ; LVT # Lo [27] HANGUL SYLLABLE SOG..HANGUL SYLLABLE SOH +C1A9..C1C3 ; LVT # Lo [27] HANGUL SYLLABLE SWAG..HANGUL SYLLABLE SWAH +C1C5..C1DF ; LVT # Lo [27] HANGUL SYLLABLE SWAEG..HANGUL SYLLABLE SWAEH +C1E1..C1FB ; LVT # Lo [27] HANGUL SYLLABLE SOEG..HANGUL SYLLABLE SOEH +C1FD..C217 ; LVT # Lo [27] HANGUL SYLLABLE SYOG..HANGUL SYLLABLE SYOH +C219..C233 ; LVT # Lo [27] HANGUL SYLLABLE SUG..HANGUL SYLLABLE SUH +C235..C24F ; LVT # Lo [27] HANGUL SYLLABLE SWEOG..HANGUL SYLLABLE SWEOH +C251..C26B ; LVT # Lo [27] HANGUL SYLLABLE SWEG..HANGUL SYLLABLE SWEH +C26D..C287 ; LVT # Lo [27] HANGUL SYLLABLE SWIG..HANGUL SYLLABLE SWIH +C289..C2A3 ; LVT # Lo [27] HANGUL SYLLABLE SYUG..HANGUL SYLLABLE SYUH +C2A5..C2BF ; LVT # Lo [27] HANGUL SYLLABLE SEUG..HANGUL SYLLABLE SEUH +C2C1..C2DB ; LVT # Lo [27] HANGUL SYLLABLE SYIG..HANGUL SYLLABLE SYIH +C2DD..C2F7 ; LVT # Lo [27] HANGUL SYLLABLE SIG..HANGUL SYLLABLE SIH +C2F9..C313 ; LVT # Lo [27] HANGUL SYLLABLE SSAG..HANGUL SYLLABLE SSAH +C315..C32F ; LVT # Lo [27] HANGUL SYLLABLE SSAEG..HANGUL SYLLABLE SSAEH +C331..C34B ; LVT # Lo [27] HANGUL SYLLABLE SSYAG..HANGUL SYLLABLE SSYAH +C34D..C367 ; LVT # Lo [27] HANGUL SYLLABLE SSYAEG..HANGUL SYLLABLE SSYAEH +C369..C383 ; LVT # Lo [27] HANGUL SYLLABLE SSEOG..HANGUL SYLLABLE SSEOH +C385..C39F ; LVT # Lo [27] HANGUL SYLLABLE SSEG..HANGUL SYLLABLE SSEH +C3A1..C3BB ; LVT # Lo [27] HANGUL SYLLABLE SSYEOG..HANGUL SYLLABLE SSYEOH +C3BD..C3D7 ; LVT # Lo [27] HANGUL SYLLABLE SSYEG..HANGUL SYLLABLE SSYEH +C3D9..C3F3 ; LVT # Lo [27] HANGUL SYLLABLE SSOG..HANGUL SYLLABLE SSOH +C3F5..C40F ; LVT # Lo [27] HANGUL SYLLABLE SSWAG..HANGUL SYLLABLE SSWAH +C411..C42B ; LVT # Lo [27] HANGUL SYLLABLE SSWAEG..HANGUL SYLLABLE SSWAEH +C42D..C447 ; LVT # Lo [27] HANGUL SYLLABLE SSOEG..HANGUL SYLLABLE SSOEH +C449..C463 ; LVT # Lo [27] HANGUL SYLLABLE SSYOG..HANGUL SYLLABLE SSYOH +C465..C47F ; LVT # Lo [27] HANGUL SYLLABLE SSUG..HANGUL SYLLABLE SSUH +C481..C49B ; LVT # Lo [27] HANGUL SYLLABLE SSWEOG..HANGUL SYLLABLE SSWEOH +C49D..C4B7 ; LVT # Lo [27] HANGUL SYLLABLE SSWEG..HANGUL SYLLABLE SSWEH +C4B9..C4D3 ; LVT # Lo [27] HANGUL SYLLABLE SSWIG..HANGUL SYLLABLE SSWIH +C4D5..C4EF ; LVT # Lo [27] HANGUL SYLLABLE SSYUG..HANGUL SYLLABLE SSYUH +C4F1..C50B ; LVT # Lo [27] HANGUL SYLLABLE SSEUG..HANGUL SYLLABLE SSEUH +C50D..C527 ; LVT # Lo [27] HANGUL SYLLABLE SSYIG..HANGUL SYLLABLE SSYIH +C529..C543 ; LVT # Lo [27] HANGUL SYLLABLE SSIG..HANGUL SYLLABLE SSIH +C545..C55F ; LVT # Lo [27] HANGUL SYLLABLE AG..HANGUL SYLLABLE AH +C561..C57B ; LVT # Lo [27] HANGUL SYLLABLE AEG..HANGUL SYLLABLE AEH +C57D..C597 ; LVT # Lo [27] HANGUL SYLLABLE YAG..HANGUL SYLLABLE YAH +C599..C5B3 ; LVT # Lo [27] HANGUL SYLLABLE YAEG..HANGUL SYLLABLE YAEH +C5B5..C5CF ; LVT # Lo [27] HANGUL SYLLABLE EOG..HANGUL SYLLABLE EOH +C5D1..C5EB ; LVT # Lo [27] HANGUL SYLLABLE EG..HANGUL SYLLABLE EH +C5ED..C607 ; LVT # Lo [27] HANGUL SYLLABLE YEOG..HANGUL SYLLABLE YEOH +C609..C623 ; LVT # Lo [27] HANGUL SYLLABLE YEG..HANGUL SYLLABLE YEH +C625..C63F ; LVT # Lo [27] HANGUL SYLLABLE OG..HANGUL SYLLABLE OH +C641..C65B ; LVT # Lo [27] HANGUL SYLLABLE WAG..HANGUL SYLLABLE WAH +C65D..C677 ; LVT # Lo [27] HANGUL SYLLABLE WAEG..HANGUL SYLLABLE WAEH +C679..C693 ; LVT # Lo [27] HANGUL SYLLABLE OEG..HANGUL SYLLABLE OEH +C695..C6AF ; LVT # Lo [27] HANGUL SYLLABLE YOG..HANGUL SYLLABLE YOH +C6B1..C6CB ; LVT # Lo [27] HANGUL SYLLABLE UG..HANGUL SYLLABLE UH +C6CD..C6E7 ; LVT # Lo [27] HANGUL SYLLABLE WEOG..HANGUL SYLLABLE WEOH +C6E9..C703 ; LVT # Lo [27] HANGUL SYLLABLE WEG..HANGUL SYLLABLE WEH +C705..C71F ; LVT # Lo [27] HANGUL SYLLABLE WIG..HANGUL SYLLABLE WIH +C721..C73B ; LVT # Lo [27] HANGUL SYLLABLE YUG..HANGUL SYLLABLE YUH +C73D..C757 ; LVT # Lo [27] HANGUL SYLLABLE EUG..HANGUL SYLLABLE EUH +C759..C773 ; LVT # Lo [27] HANGUL SYLLABLE YIG..HANGUL SYLLABLE YIH +C775..C78F ; LVT # Lo [27] HANGUL SYLLABLE IG..HANGUL SYLLABLE IH +C791..C7AB ; LVT # Lo [27] HANGUL SYLLABLE JAG..HANGUL SYLLABLE JAH +C7AD..C7C7 ; LVT # Lo [27] HANGUL SYLLABLE JAEG..HANGUL SYLLABLE JAEH +C7C9..C7E3 ; LVT # Lo [27] HANGUL SYLLABLE JYAG..HANGUL SYLLABLE JYAH +C7E5..C7FF ; LVT # Lo [27] HANGUL SYLLABLE JYAEG..HANGUL SYLLABLE JYAEH +C801..C81B ; LVT # Lo [27] HANGUL SYLLABLE JEOG..HANGUL SYLLABLE JEOH +C81D..C837 ; LVT # Lo [27] HANGUL SYLLABLE JEG..HANGUL SYLLABLE JEH +C839..C853 ; LVT # Lo [27] HANGUL SYLLABLE JYEOG..HANGUL SYLLABLE JYEOH +C855..C86F ; LVT # Lo [27] HANGUL SYLLABLE JYEG..HANGUL SYLLABLE JYEH +C871..C88B ; LVT # Lo [27] HANGUL SYLLABLE JOG..HANGUL SYLLABLE JOH +C88D..C8A7 ; LVT # Lo [27] HANGUL SYLLABLE JWAG..HANGUL SYLLABLE JWAH +C8A9..C8C3 ; LVT # Lo [27] HANGUL SYLLABLE JWAEG..HANGUL SYLLABLE JWAEH +C8C5..C8DF ; LVT # Lo [27] HANGUL SYLLABLE JOEG..HANGUL SYLLABLE JOEH +C8E1..C8FB ; LVT # Lo [27] HANGUL SYLLABLE JYOG..HANGUL SYLLABLE JYOH +C8FD..C917 ; LVT # Lo [27] HANGUL SYLLABLE JUG..HANGUL SYLLABLE JUH +C919..C933 ; LVT # Lo [27] HANGUL SYLLABLE JWEOG..HANGUL SYLLABLE JWEOH +C935..C94F ; LVT # Lo [27] HANGUL SYLLABLE JWEG..HANGUL SYLLABLE JWEH +C951..C96B ; LVT # Lo [27] HANGUL SYLLABLE JWIG..HANGUL SYLLABLE JWIH +C96D..C987 ; LVT # Lo [27] HANGUL SYLLABLE JYUG..HANGUL SYLLABLE JYUH +C989..C9A3 ; LVT # Lo [27] HANGUL SYLLABLE JEUG..HANGUL SYLLABLE JEUH +C9A5..C9BF ; LVT # Lo [27] HANGUL SYLLABLE JYIG..HANGUL SYLLABLE JYIH +C9C1..C9DB ; LVT # Lo [27] HANGUL SYLLABLE JIG..HANGUL SYLLABLE JIH +C9DD..C9F7 ; LVT # Lo [27] HANGUL SYLLABLE JJAG..HANGUL SYLLABLE JJAH +C9F9..CA13 ; LVT # Lo [27] HANGUL SYLLABLE JJAEG..HANGUL SYLLABLE JJAEH +CA15..CA2F ; LVT # Lo [27] HANGUL SYLLABLE JJYAG..HANGUL SYLLABLE JJYAH +CA31..CA4B ; LVT # Lo [27] HANGUL SYLLABLE JJYAEG..HANGUL SYLLABLE JJYAEH +CA4D..CA67 ; LVT # Lo [27] HANGUL SYLLABLE JJEOG..HANGUL SYLLABLE JJEOH +CA69..CA83 ; LVT # Lo [27] HANGUL SYLLABLE JJEG..HANGUL SYLLABLE JJEH +CA85..CA9F ; LVT # Lo [27] HANGUL SYLLABLE JJYEOG..HANGUL SYLLABLE JJYEOH +CAA1..CABB ; LVT # Lo [27] HANGUL SYLLABLE JJYEG..HANGUL SYLLABLE JJYEH +CABD..CAD7 ; LVT # Lo [27] HANGUL SYLLABLE JJOG..HANGUL SYLLABLE JJOH +CAD9..CAF3 ; LVT # Lo [27] HANGUL SYLLABLE JJWAG..HANGUL SYLLABLE JJWAH +CAF5..CB0F ; LVT # Lo [27] HANGUL SYLLABLE JJWAEG..HANGUL SYLLABLE JJWAEH +CB11..CB2B ; LVT # Lo [27] HANGUL SYLLABLE JJOEG..HANGUL SYLLABLE JJOEH +CB2D..CB47 ; LVT # Lo [27] HANGUL SYLLABLE JJYOG..HANGUL SYLLABLE JJYOH +CB49..CB63 ; LVT # Lo [27] HANGUL SYLLABLE JJUG..HANGUL SYLLABLE JJUH +CB65..CB7F ; LVT # Lo [27] HANGUL SYLLABLE JJWEOG..HANGUL SYLLABLE JJWEOH +CB81..CB9B ; LVT # Lo [27] HANGUL SYLLABLE JJWEG..HANGUL SYLLABLE JJWEH +CB9D..CBB7 ; LVT # Lo [27] HANGUL SYLLABLE JJWIG..HANGUL SYLLABLE JJWIH +CBB9..CBD3 ; LVT # Lo [27] HANGUL SYLLABLE JJYUG..HANGUL SYLLABLE JJYUH +CBD5..CBEF ; LVT # Lo [27] HANGUL SYLLABLE JJEUG..HANGUL SYLLABLE JJEUH +CBF1..CC0B ; LVT # Lo [27] HANGUL SYLLABLE JJYIG..HANGUL SYLLABLE JJYIH +CC0D..CC27 ; LVT # Lo [27] HANGUL SYLLABLE JJIG..HANGUL SYLLABLE JJIH +CC29..CC43 ; LVT # Lo [27] HANGUL SYLLABLE CAG..HANGUL SYLLABLE CAH +CC45..CC5F ; LVT # Lo [27] HANGUL SYLLABLE CAEG..HANGUL SYLLABLE CAEH +CC61..CC7B ; LVT # Lo [27] HANGUL SYLLABLE CYAG..HANGUL SYLLABLE CYAH +CC7D..CC97 ; LVT # Lo [27] HANGUL SYLLABLE CYAEG..HANGUL SYLLABLE CYAEH +CC99..CCB3 ; LVT # Lo [27] HANGUL SYLLABLE CEOG..HANGUL SYLLABLE CEOH +CCB5..CCCF ; LVT # Lo [27] HANGUL SYLLABLE CEG..HANGUL SYLLABLE CEH +CCD1..CCEB ; LVT # Lo [27] HANGUL SYLLABLE CYEOG..HANGUL SYLLABLE CYEOH +CCED..CD07 ; LVT # Lo [27] HANGUL SYLLABLE CYEG..HANGUL SYLLABLE CYEH +CD09..CD23 ; LVT # Lo [27] HANGUL SYLLABLE COG..HANGUL SYLLABLE COH +CD25..CD3F ; LVT # Lo [27] HANGUL SYLLABLE CWAG..HANGUL SYLLABLE CWAH +CD41..CD5B ; LVT # Lo [27] HANGUL SYLLABLE CWAEG..HANGUL SYLLABLE CWAEH +CD5D..CD77 ; LVT # Lo [27] HANGUL SYLLABLE COEG..HANGUL SYLLABLE COEH +CD79..CD93 ; LVT # Lo [27] HANGUL SYLLABLE CYOG..HANGUL SYLLABLE CYOH +CD95..CDAF ; LVT # Lo [27] HANGUL SYLLABLE CUG..HANGUL SYLLABLE CUH +CDB1..CDCB ; LVT # Lo [27] HANGUL SYLLABLE CWEOG..HANGUL SYLLABLE CWEOH +CDCD..CDE7 ; LVT # Lo [27] HANGUL SYLLABLE CWEG..HANGUL SYLLABLE CWEH +CDE9..CE03 ; LVT # Lo [27] HANGUL SYLLABLE CWIG..HANGUL SYLLABLE CWIH +CE05..CE1F ; LVT # Lo [27] HANGUL SYLLABLE CYUG..HANGUL SYLLABLE CYUH +CE21..CE3B ; LVT # Lo [27] HANGUL SYLLABLE CEUG..HANGUL SYLLABLE CEUH +CE3D..CE57 ; LVT # Lo [27] HANGUL SYLLABLE CYIG..HANGUL SYLLABLE CYIH +CE59..CE73 ; LVT # Lo [27] HANGUL SYLLABLE CIG..HANGUL SYLLABLE CIH +CE75..CE8F ; LVT # Lo [27] HANGUL SYLLABLE KAG..HANGUL SYLLABLE KAH +CE91..CEAB ; LVT # Lo [27] HANGUL SYLLABLE KAEG..HANGUL SYLLABLE KAEH +CEAD..CEC7 ; LVT # Lo [27] HANGUL SYLLABLE KYAG..HANGUL SYLLABLE KYAH +CEC9..CEE3 ; LVT # Lo [27] HANGUL SYLLABLE KYAEG..HANGUL SYLLABLE KYAEH +CEE5..CEFF ; LVT # Lo [27] HANGUL SYLLABLE KEOG..HANGUL SYLLABLE KEOH +CF01..CF1B ; LVT # Lo [27] HANGUL SYLLABLE KEG..HANGUL SYLLABLE KEH +CF1D..CF37 ; LVT # Lo [27] HANGUL SYLLABLE KYEOG..HANGUL SYLLABLE KYEOH +CF39..CF53 ; LVT # Lo [27] HANGUL SYLLABLE KYEG..HANGUL SYLLABLE KYEH +CF55..CF6F ; LVT # Lo [27] HANGUL SYLLABLE KOG..HANGUL SYLLABLE KOH +CF71..CF8B ; LVT # Lo [27] HANGUL SYLLABLE KWAG..HANGUL SYLLABLE KWAH +CF8D..CFA7 ; LVT # Lo [27] HANGUL SYLLABLE KWAEG..HANGUL SYLLABLE KWAEH +CFA9..CFC3 ; LVT # Lo [27] HANGUL SYLLABLE KOEG..HANGUL SYLLABLE KOEH +CFC5..CFDF ; LVT # Lo [27] HANGUL SYLLABLE KYOG..HANGUL SYLLABLE KYOH +CFE1..CFFB ; LVT # Lo [27] HANGUL SYLLABLE KUG..HANGUL SYLLABLE KUH +CFFD..D017 ; LVT # Lo [27] HANGUL SYLLABLE KWEOG..HANGUL SYLLABLE KWEOH +D019..D033 ; LVT # Lo [27] HANGUL SYLLABLE KWEG..HANGUL SYLLABLE KWEH +D035..D04F ; LVT # Lo [27] HANGUL SYLLABLE KWIG..HANGUL SYLLABLE KWIH +D051..D06B ; LVT # Lo [27] HANGUL SYLLABLE KYUG..HANGUL SYLLABLE KYUH +D06D..D087 ; LVT # Lo [27] HANGUL SYLLABLE KEUG..HANGUL SYLLABLE KEUH +D089..D0A3 ; LVT # Lo [27] HANGUL SYLLABLE KYIG..HANGUL SYLLABLE KYIH +D0A5..D0BF ; LVT # Lo [27] HANGUL SYLLABLE KIG..HANGUL SYLLABLE KIH +D0C1..D0DB ; LVT # Lo [27] HANGUL SYLLABLE TAG..HANGUL SYLLABLE TAH +D0DD..D0F7 ; LVT # Lo [27] HANGUL SYLLABLE TAEG..HANGUL SYLLABLE TAEH +D0F9..D113 ; LVT # Lo [27] HANGUL SYLLABLE TYAG..HANGUL SYLLABLE TYAH +D115..D12F ; LVT # Lo [27] HANGUL SYLLABLE TYAEG..HANGUL SYLLABLE TYAEH +D131..D14B ; LVT # Lo [27] HANGUL SYLLABLE TEOG..HANGUL SYLLABLE TEOH +D14D..D167 ; LVT # Lo [27] HANGUL SYLLABLE TEG..HANGUL SYLLABLE TEH +D169..D183 ; LVT # Lo [27] HANGUL SYLLABLE TYEOG..HANGUL SYLLABLE TYEOH +D185..D19F ; LVT # Lo [27] HANGUL SYLLABLE TYEG..HANGUL SYLLABLE TYEH +D1A1..D1BB ; LVT # Lo [27] HANGUL SYLLABLE TOG..HANGUL SYLLABLE TOH +D1BD..D1D7 ; LVT # Lo [27] HANGUL SYLLABLE TWAG..HANGUL SYLLABLE TWAH +D1D9..D1F3 ; LVT # Lo [27] HANGUL SYLLABLE TWAEG..HANGUL SYLLABLE TWAEH +D1F5..D20F ; LVT # Lo [27] HANGUL SYLLABLE TOEG..HANGUL SYLLABLE TOEH +D211..D22B ; LVT # Lo [27] HANGUL SYLLABLE TYOG..HANGUL SYLLABLE TYOH +D22D..D247 ; LVT # Lo [27] HANGUL SYLLABLE TUG..HANGUL SYLLABLE TUH +D249..D263 ; LVT # Lo [27] HANGUL SYLLABLE TWEOG..HANGUL SYLLABLE TWEOH +D265..D27F ; LVT # Lo [27] HANGUL SYLLABLE TWEG..HANGUL SYLLABLE TWEH +D281..D29B ; LVT # Lo [27] HANGUL SYLLABLE TWIG..HANGUL SYLLABLE TWIH +D29D..D2B7 ; LVT # Lo [27] HANGUL SYLLABLE TYUG..HANGUL SYLLABLE TYUH +D2B9..D2D3 ; LVT # Lo [27] HANGUL SYLLABLE TEUG..HANGUL SYLLABLE TEUH +D2D5..D2EF ; LVT # Lo [27] HANGUL SYLLABLE TYIG..HANGUL SYLLABLE TYIH +D2F1..D30B ; LVT # Lo [27] HANGUL SYLLABLE TIG..HANGUL SYLLABLE TIH +D30D..D327 ; LVT # Lo [27] HANGUL SYLLABLE PAG..HANGUL SYLLABLE PAH +D329..D343 ; LVT # Lo [27] HANGUL SYLLABLE PAEG..HANGUL SYLLABLE PAEH +D345..D35F ; LVT # Lo [27] HANGUL SYLLABLE PYAG..HANGUL SYLLABLE PYAH +D361..D37B ; LVT # Lo [27] HANGUL SYLLABLE PYAEG..HANGUL SYLLABLE PYAEH +D37D..D397 ; LVT # Lo [27] HANGUL SYLLABLE PEOG..HANGUL SYLLABLE PEOH +D399..D3B3 ; LVT # Lo [27] HANGUL SYLLABLE PEG..HANGUL SYLLABLE PEH +D3B5..D3CF ; LVT # Lo [27] HANGUL SYLLABLE PYEOG..HANGUL SYLLABLE PYEOH +D3D1..D3EB ; LVT # Lo [27] HANGUL SYLLABLE PYEG..HANGUL SYLLABLE PYEH +D3ED..D407 ; LVT # Lo [27] HANGUL SYLLABLE POG..HANGUL SYLLABLE POH +D409..D423 ; LVT # Lo [27] HANGUL SYLLABLE PWAG..HANGUL SYLLABLE PWAH +D425..D43F ; LVT # Lo [27] HANGUL SYLLABLE PWAEG..HANGUL SYLLABLE PWAEH +D441..D45B ; LVT # Lo [27] HANGUL SYLLABLE POEG..HANGUL SYLLABLE POEH +D45D..D477 ; LVT # Lo [27] HANGUL SYLLABLE PYOG..HANGUL SYLLABLE PYOH +D479..D493 ; LVT # Lo [27] HANGUL SYLLABLE PUG..HANGUL SYLLABLE PUH +D495..D4AF ; LVT # Lo [27] HANGUL SYLLABLE PWEOG..HANGUL SYLLABLE PWEOH +D4B1..D4CB ; LVT # Lo [27] HANGUL SYLLABLE PWEG..HANGUL SYLLABLE PWEH +D4CD..D4E7 ; LVT # Lo [27] HANGUL SYLLABLE PWIG..HANGUL SYLLABLE PWIH +D4E9..D503 ; LVT # Lo [27] HANGUL SYLLABLE PYUG..HANGUL SYLLABLE PYUH +D505..D51F ; LVT # Lo [27] HANGUL SYLLABLE PEUG..HANGUL SYLLABLE PEUH +D521..D53B ; LVT # Lo [27] HANGUL SYLLABLE PYIG..HANGUL SYLLABLE PYIH +D53D..D557 ; LVT # Lo [27] HANGUL SYLLABLE PIG..HANGUL SYLLABLE PIH +D559..D573 ; LVT # Lo [27] HANGUL SYLLABLE HAG..HANGUL SYLLABLE HAH +D575..D58F ; LVT # Lo [27] HANGUL SYLLABLE HAEG..HANGUL SYLLABLE HAEH +D591..D5AB ; LVT # Lo [27] HANGUL SYLLABLE HYAG..HANGUL SYLLABLE HYAH +D5AD..D5C7 ; LVT # Lo [27] HANGUL SYLLABLE HYAEG..HANGUL SYLLABLE HYAEH +D5C9..D5E3 ; LVT # Lo [27] HANGUL SYLLABLE HEOG..HANGUL SYLLABLE HEOH +D5E5..D5FF ; LVT # Lo [27] HANGUL SYLLABLE HEG..HANGUL SYLLABLE HEH +D601..D61B ; LVT # Lo [27] HANGUL SYLLABLE HYEOG..HANGUL SYLLABLE HYEOH +D61D..D637 ; LVT # Lo [27] HANGUL SYLLABLE HYEG..HANGUL SYLLABLE HYEH +D639..D653 ; LVT # Lo [27] HANGUL SYLLABLE HOG..HANGUL SYLLABLE HOH +D655..D66F ; LVT # Lo [27] HANGUL SYLLABLE HWAG..HANGUL SYLLABLE HWAH +D671..D68B ; LVT # Lo [27] HANGUL SYLLABLE HWAEG..HANGUL SYLLABLE HWAEH +D68D..D6A7 ; LVT # Lo [27] HANGUL SYLLABLE HOEG..HANGUL SYLLABLE HOEH +D6A9..D6C3 ; LVT # Lo [27] HANGUL SYLLABLE HYOG..HANGUL SYLLABLE HYOH +D6C5..D6DF ; LVT # Lo [27] HANGUL SYLLABLE HUG..HANGUL SYLLABLE HUH +D6E1..D6FB ; LVT # Lo [27] HANGUL SYLLABLE HWEOG..HANGUL SYLLABLE HWEOH +D6FD..D717 ; LVT # Lo [27] HANGUL SYLLABLE HWEG..HANGUL SYLLABLE HWEH +D719..D733 ; LVT # Lo [27] HANGUL SYLLABLE HWIG..HANGUL SYLLABLE HWIH +D735..D74F ; LVT # Lo [27] HANGUL SYLLABLE HYUG..HANGUL SYLLABLE HYUH +D751..D76B ; LVT # Lo [27] HANGUL SYLLABLE HEUG..HANGUL SYLLABLE HEUH +D76D..D787 ; LVT # Lo [27] HANGUL SYLLABLE HYIG..HANGUL SYLLABLE HYIH +D789..D7A3 ; LVT # Lo [27] HANGUL SYLLABLE HIG..HANGUL SYLLABLE HIH + +# Total code points: 10773 + +# EOF diff --git a/contrib/unicode/NameAliases.txt b/contrib/unicode/NameAliases.txt index 45744de96ac3..09df7d666f12 100644 --- a/contrib/unicode/NameAliases.txt +++ b/contrib/unicode/NameAliases.txt @@ -1,6 +1,6 @@ -# NameAliases-16.0.0.txt -# Date: 2024-04-24 -# © 2024 Unicode®, Inc. +# NameAliases-17.0.0.txt +# Date: 2025-04-23 +# © 2025 Unicode®, Inc. # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. # For terms of use and license, see https://www.unicode.org/terms_of_use.html # @@ -323,6 +323,10 @@ FEFF;ZWNBSP;abbreviation 122D5;CUNEIFORM SIGN NU11 OVER NU11 BUR OVER BUR;correction 12327;CUNEIFORM SIGN KALAM;correction 1680B;BAMUM LETTER PHASE-A MAEMGBIEE;correction +16881;BAMUM LETTER PHASE-B PUNGGAAM;correction +1688E;BAMUM LETTER PHASE-B NGGOM;correction +168DC;BAMUM LETTER PHASE-C SHETFON;correction +1697D;BAMUM LETTER PHASE-E NGGOP;correction 16E56;MEDEFAIDRIN CAPITAL LETTER H;correction 16E57;MEDEFAIDRIN CAPITAL LETTER NG;correction 16E76;MEDEFAIDRIN SMALL LETTER H;correction diff --git a/contrib/unicode/PropList.txt b/contrib/unicode/PropList.txt index fae2831e7a5f..e64b4224d727 100644 --- a/contrib/unicode/PropList.txt +++ b/contrib/unicode/PropList.txt @@ -1,6 +1,6 @@ -# PropList-16.0.0.txt -# Date: 2024-05-31, 18:09:48 GMT -# © 2024 Unicode®, Inc. +# PropList-17.0.0.txt +# Date: 2025-06-30, 06:19:01 GMT +# © 2025 Unicode®, Inc. # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. # For terms of use and license, see https://www.unicode.org/terms_of_use.html # @@ -702,7 +702,7 @@ FB1E ; Other_Alphabetic # Mn HEBREW POINT JUDEO-SPANISH VARIKA 10D24..10D27 ; Other_Alphabetic # Mn [4] HANIFI ROHINGYA SIGN HARBAHAY..HANIFI ROHINGYA SIGN TASSI 10D69 ; Other_Alphabetic # Mn GARAY VOWEL SIGN E 10EAB..10EAC ; Other_Alphabetic # Mn [2] YEZIDI COMBINING HAMZA MARK..YEZIDI COMBINING MADDA MARK -10EFC ; Other_Alphabetic # Mn ARABIC COMBINING ALEF OVERLAY +10EFA..10EFC ; Other_Alphabetic # Mn [3] ARABIC DOUBLE VERTICAL BAR BELOW..ARABIC COMBINING ALEF OVERLAY 11000 ; Other_Alphabetic # Mc BRAHMI SIGN CANDRABINDU 11001 ; Other_Alphabetic # Mn BRAHMI SIGN ANUSVARA 11002 ; Other_Alphabetic # Mc BRAHMI SIGN VISARGA @@ -809,6 +809,12 @@ FB1E ; Other_Alphabetic # Mn HEBREW POINT JUDEO-SPANISH VARIKA 11A59..11A5B ; Other_Alphabetic # Mn [3] SOYOMBO VOWEL SIGN VOCALIC R..SOYOMBO VOWEL LENGTH MARK 11A8A..11A96 ; Other_Alphabetic # Mn [13] SOYOMBO FINAL CONSONANT SIGN G..SOYOMBO SIGN ANUSVARA 11A97 ; Other_Alphabetic # Mc SOYOMBO SIGN VISARGA +11B60 ; Other_Alphabetic # Mn SHARADA VOWEL SIGN OE +11B61 ; Other_Alphabetic # Mc SHARADA VOWEL SIGN OOE +11B62..11B64 ; Other_Alphabetic # Mn [3] SHARADA VOWEL SIGN UE..SHARADA VOWEL SIGN SHORT E +11B65 ; Other_Alphabetic # Mc SHARADA VOWEL SIGN SHORT O +11B66 ; Other_Alphabetic # Mn SHARADA VOWEL SIGN CANDRA E +11B67 ; Other_Alphabetic # Mc SHARADA VOWEL SIGN CANDRA O 11C2F ; Other_Alphabetic # Mc BHAIKSUKI VOWEL SIGN AA 11C30..11C36 ; Other_Alphabetic # Mn [7] BHAIKSUKI VOWEL SIGN I..BHAIKSUKI VOWEL SIGN VOCALIC L 11C38..11C3D ; Other_Alphabetic # Mn [6] BHAIKSUKI VOWEL SIGN E..BHAIKSUKI SIGN ANUSVARA @@ -853,12 +859,16 @@ FB1E ; Other_Alphabetic # Mn HEBREW POINT JUDEO-SPANISH VARIKA 1E023..1E024 ; Other_Alphabetic # Mn [2] COMBINING GLAGOLITIC LETTER YU..COMBINING GLAGOLITIC LETTER SMALL YUS 1E026..1E02A ; Other_Alphabetic # Mn [5] COMBINING GLAGOLITIC LETTER YO..COMBINING GLAGOLITIC LETTER FITA 1E08F ; Other_Alphabetic # Mn COMBINING CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I +1E6E3 ; Other_Alphabetic # Mn TAI YO SIGN UE +1E6E6 ; Other_Alphabetic # Mn TAI YO SIGN AU +1E6EE..1E6EF ; Other_Alphabetic # Mn [2] TAI YO SIGN AY..TAI YO SIGN ANG +1E6F5 ; Other_Alphabetic # Mn TAI YO SIGN OM 1E947 ; Other_Alphabetic # Mn ADLAM HAMZA 1F130..1F149 ; Other_Alphabetic # So [26] SQUARED LATIN CAPITAL LETTER A..SQUARED LATIN CAPITAL LETTER Z 1F150..1F169 ; Other_Alphabetic # So [26] NEGATIVE CIRCLED LATIN CAPITAL LETTER A..NEGATIVE CIRCLED LATIN CAPITAL LETTER Z 1F170..1F189 ; Other_Alphabetic # So [26] NEGATIVE SQUARED LATIN CAPITAL LETTER A..NEGATIVE SQUARED LATIN CAPITAL LETTER Z -# Total code points: 1495 +# Total code points: 1510 # ================================================ @@ -871,21 +881,22 @@ FB1E ; Other_Alphabetic # Mn HEBREW POINT JUDEO-SPANISH VARIKA F900..FA6D ; Ideographic # Lo [366] CJK COMPATIBILITY IDEOGRAPH-F900..CJK COMPATIBILITY IDEOGRAPH-FA6D FA70..FAD9 ; Ideographic # Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COMPATIBILITY IDEOGRAPH-FAD9 16FE4 ; Ideographic # Mn KHITAN SMALL SCRIPT FILLER -17000..187F7 ; Ideographic # Lo [6136] TANGUT IDEOGRAPH-17000..TANGUT IDEOGRAPH-187F7 -18800..18CD5 ; Ideographic # Lo [1238] TANGUT COMPONENT-001..KHITAN SMALL SCRIPT CHARACTER-18CD5 -18CFF..18D08 ; Ideographic # Lo [10] KHITAN SMALL SCRIPT CHARACTER-18CFF..TANGUT IDEOGRAPH-18D08 +16FF2..16FF3 ; Ideographic # Lm [2] CHINESE SMALL SIMPLIFIED ER..CHINESE SMALL TRADITIONAL ER +16FF4..16FF6 ; Ideographic # Nl [3] YANGQIN SIGN SLOW ONE BEAT..YANGQIN SIGN SLOW TWO BEATS +17000..18CD5 ; Ideographic # Lo [7382] TANGUT IDEOGRAPH-17000..KHITAN SMALL SCRIPT CHARACTER-18CD5 +18CFF..18D1E ; Ideographic # Lo [32] KHITAN SMALL SCRIPT CHARACTER-18CFF..TANGUT IDEOGRAPH-18D1E +18D80..18DF2 ; Ideographic # Lo [115] TANGUT COMPONENT-769..TANGUT COMPONENT-883 1B170..1B2FB ; Ideographic # Lo [396] NUSHU CHARACTER-1B170..NUSHU CHARACTER-1B2FB 20000..2A6DF ; Ideographic # Lo [42720] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DF -2A700..2B739 ; Ideographic # Lo [4154] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B739 -2B740..2B81D ; Ideographic # Lo [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D -2B820..2CEA1 ; Ideographic # Lo [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1 +2A700..2B81D ; Ideographic # Lo [4382] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B81D +2B820..2CEAD ; Ideographic # Lo [5774] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEAD 2CEB0..2EBE0 ; Ideographic # Lo [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0 2EBF0..2EE5D ; Ideographic # Lo [622] CJK UNIFIED IDEOGRAPH-2EBF0..CJK UNIFIED IDEOGRAPH-2EE5D 2F800..2FA1D ; Ideographic # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D 30000..3134A ; Ideographic # Lo [4939] CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A -31350..323AF ; Ideographic # Lo [4192] CJK UNIFIED IDEOGRAPH-31350..CJK UNIFIED IDEOGRAPH-323AF +31350..33479 ; Ideographic # Lo [8490] CJK UNIFIED IDEOGRAPH-31350..CJK UNIFIED IDEOGRAPH-33479 -# Total code points: 106477 +# Total code points: 110943 # ================================================ @@ -915,11 +926,11 @@ FA70..FAD9 ; Ideographic # Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COM 0384..0385 ; Diacritic # Sk [2] GREEK TONOS..GREEK DIALYTIKA TONOS 0483..0487 ; Diacritic # Mn [5] COMBINING CYRILLIC TITLO..COMBINING CYRILLIC POKRYTIE 0559 ; Diacritic # Lm ARMENIAN MODIFIER LETTER LEFT HALF RING -0591..05A1 ; Diacritic # Mn [17] HEBREW ACCENT ETNAHTA..HEBREW ACCENT PAZER -05A3..05BD ; Diacritic # Mn [27] HEBREW ACCENT MUNAH..HEBREW POINT METEG +0591..05BD ; Diacritic # Mn [45] HEBREW ACCENT ETNAHTA..HEBREW POINT METEG 05BF ; Diacritic # Mn HEBREW POINT RAFE 05C1..05C2 ; Diacritic # Mn [2] HEBREW POINT SHIN DOT..HEBREW POINT SIN DOT -05C4 ; Diacritic # Mn HEBREW MARK UPPER DOT +05C4..05C5 ; Diacritic # Mn [2] HEBREW MARK UPPER DOT..HEBREW MARK LOWER DOT +05C7 ; Diacritic # Mn HEBREW POINT QAMATS QATAN 064B..0652 ; Diacritic # Mn [8] ARABIC FATHATAN..ARABIC SUKUN 0657..0658 ; Diacritic # Mn [2] ARABIC INVERTED DAMMA..ARABIC MARK NOON GHUNNA 06DF..06E0 ; Diacritic # Mn [2] ARABIC SMALL HIGH ROUNDED ZERO..ARABIC SMALL HIGH UPRIGHT RECTANGULAR ZERO @@ -990,6 +1001,8 @@ FA70..FAD9 ; Ideographic # Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COM 1AB0..1ABD ; Diacritic # Mn [14] COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW 1ABE ; Diacritic # Me COMBINING PARENTHESES OVERLAY 1AC1..1ACB ; Diacritic # Mn [11] COMBINING LEFT PARENTHESIS ABOVE LEFT..COMBINING TRIPLE ACUTE ACCENT +1ACF..1ADD ; Diacritic # Mn [15] COMBINING DOUBLE CARON..COMBINING DOT-AND-RING BELOW +1AE0..1AEB ; Diacritic # Mn [12] COMBINING LEFT TACK ABOVE..COMBINING DOUBLE RIGHTWARDS ARROW ABOVE 1B34 ; Diacritic # Mn BALINESE SIGN REREKAN 1B44 ; Diacritic # Mc BALINESE ADEG ADEG 1B6B..1B73 ; Diacritic # Mn [9] BALINESE MUSICAL SYMBOL COMBINING TEGEH..BALINESE MUSICAL SYMBOL COMBINING GONG @@ -1009,6 +1022,7 @@ FA70..FAD9 ; Ideographic # Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COM 1CF7 ; Diacritic # Mc VEDIC SIGN ATIKRAMA 1CF8..1CF9 ; Diacritic # Mn [2] VEDIC TONE RING ABOVE..VEDIC TONE DOUBLE RING ABOVE 1D2C..1D6A ; Diacritic # Lm [63] MODIFIER LETTER CAPITAL A..GREEK SUBSCRIPT SMALL LETTER CHI +1D9B..1DBE ; Diacritic # Lm [36] MODIFIER LETTER SMALL TURNED ALPHA..MODIFIER LETTER SMALL EZH 1DC4..1DCF ; Diacritic # Mn [12] COMBINING MACRON-ACUTE..COMBINING ZIGZAG BELOW 1DF5..1DFF ; Diacritic # Mn [11] COMBINING UP TACK ABOVE..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW 1FBD ; Diacritic # Sk GREEK KORONIS @@ -1034,6 +1048,7 @@ A717..A71F ; Diacritic # Lm [9] MODIFIER LETTER DOT VERTICAL BAR..MODIFIER A720..A721 ; Diacritic # Sk [2] MODIFIER LETTER STRESS AND HIGH TONE..MODIFIER LETTER STRESS AND LOW TONE A788 ; Diacritic # Lm MODIFIER LETTER LOW CIRCUMFLEX ACCENT A789..A78A ; Diacritic # Sk [2] MODIFIER LETTER COLON..MODIFIER LETTER SHORT EQUALS SIGN +A7F1 ; Diacritic # Lm MODIFIER LETTER CAPITAL S A7F8..A7F9 ; Diacritic # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE A806 ; Diacritic # Mn SYLOTI NAGRI SIGN HASANTA A82C ; Diacritic # Mn SYLOTI NAGRI SIGN ALTERNATE HASANTA @@ -1077,6 +1092,7 @@ FFE3 ; Diacritic # Sk FULLWIDTH MACRON 10D24..10D27 ; Diacritic # Mn [4] HANIFI ROHINGYA SIGN HARBAHAY..HANIFI ROHINGYA SIGN TASSI 10D4E ; Diacritic # Lm GARAY VOWEL LENGTH MARK 10D69..10D6D ; Diacritic # Mn [5] GARAY VOWEL SIGN E..GARAY CONSONANT NASALIZATION MARK +10EFA ; Diacritic # Mn ARABIC DOUBLE VERTICAL BAR BELOW 10EFD..10EFF ; Diacritic # Mn [3] ARABIC SMALL LOW WORD SAKTA..ARABIC SMALL LOW WORD MADDA 10F46..10F50 ; Diacritic # Mn [11] SOGDIAN COMBINING DOT BELOW..SOGDIAN COMBINING STROKE BELOW 10F82..10F85 ; Diacritic # Mn [4] OLD UYGHUR COMBINING DOT ABOVE..OLD UYGHUR COMBINING TWO DOTS BELOW @@ -1120,6 +1136,7 @@ FFE3 ; Diacritic # Sk FULLWIDTH MACRON 11D42 ; Diacritic # Mn MASARAM GONDI SIGN NUKTA 11D44..11D45 ; Diacritic # Mn [2] MASARAM GONDI SIGN HALANTA..MASARAM GONDI VIRAMA 11D97 ; Diacritic # Mn GUNJALA GONDI VIRAMA +11DD9 ; Diacritic # Lm TOLONG SIKI SIGN SELA 11F41 ; Diacritic # Mc KAWI SIGN KILLER 11F42 ; Diacritic # Mn KAWI CONJOINER 11F5A ; Diacritic # Mn KAWI SIGN NUKTA @@ -1150,7 +1167,7 @@ FFE3 ; Diacritic # Sk FULLWIDTH MACRON 1E944..1E946 ; Diacritic # Mn [3] ADLAM ALIF LENGTHENER..ADLAM GEMINATION MARK 1E948..1E94A ; Diacritic # Mn [3] ADLAM CONSONANT MODIFIER..ADLAM NUKTA -# Total code points: 1178 +# Total code points: 1247 # ================================================ @@ -1190,14 +1207,16 @@ FF70 ; Extender # Lm HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND 113D3 ; Extender # Lo TULU-TIGALARI SIGN PLUTA 115C6..115C8 ; Extender # Po [3] SIDDHAM REPETITION MARK-1..SIDDHAM REPETITION MARK-3 11A98 ; Extender # Mn SOYOMBO GEMINATION MARK +11DD9 ; Extender # Lm TOLONG SIKI SIGN SELA 16B42..16B43 ; Extender # Lm [2] PAHAWH HMONG SIGN VOS NRUA..PAHAWH HMONG SIGN IB YAM 16FE0..16FE1 ; Extender # Lm [2] TANGUT ITERATION MARK..NUSHU ITERATION MARK 16FE3 ; Extender # Lm OLD CHINESE ITERATION MARK +16FF2..16FF3 ; Extender # Lm [2] CHINESE SMALL SIMPLIFIED ER..CHINESE SMALL TRADITIONAL ER 1E13C..1E13D ; Extender # Lm [2] NYIAKENG PUACHUE HMONG SIGN XW XW..NYIAKENG PUACHUE HMONG SYLLABLE LENGTHENER 1E5EF ; Extender # Mn OL ONAL SIGN IKIR 1E944..1E946 ; Extender # Mn [3] ADLAM ALIF LENGTHENER..ADLAM GEMINATION MARK -# Total code points: 59 +# Total code points: 62 # ================================================ @@ -1220,7 +1239,7 @@ FF70 ; Extender # Lm HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND 2C7C..2C7D ; Other_Lowercase # Lm [2] LATIN SUBSCRIPT SMALL LETTER J..MODIFIER LETTER CAPITAL V A69C..A69D ; Other_Lowercase # Lm [2] MODIFIER LETTER CYRILLIC HARD SIGN..MODIFIER LETTER CYRILLIC SOFT SIGN A770 ; Other_Lowercase # Lm MODIFIER LETTER US -A7F2..A7F4 ; Other_Lowercase # Lm [3] MODIFIER LETTER CAPITAL C..MODIFIER LETTER CAPITAL Q +A7F1..A7F4 ; Other_Lowercase # Lm [4] MODIFIER LETTER CAPITAL S..MODIFIER LETTER CAPITAL Q A7F8..A7F9 ; Other_Lowercase # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE AB5C..AB5F ; Other_Lowercase # Lm [4] MODIFIER LETTER SMALL HENG..MODIFIER LETTER SMALL U WITH LEFT HOOK AB69 ; Other_Lowercase # Lm MODIFIER LETTER SMALL TURNED W @@ -1230,7 +1249,7 @@ AB69 ; Other_Lowercase # Lm MODIFIER LETTER SMALL TURNED W 107B2..107BA ; Other_Lowercase # Lm [9] MODIFIER LETTER SMALL CAPITAL Y..MODIFIER LETTER SMALL S WITH CURL 1E030..1E06D ; Other_Lowercase # Lm [62] MODIFIER LETTER CYRILLIC SMALL A..MODIFIER LETTER CYRILLIC SMALL STRAIGHT U WITH STROKE -# Total code points: 311 +# Total code points: 312 # ================================================ @@ -1359,15 +1378,14 @@ FA21 ; Unified_Ideograph # Lo CJK COMPATIBILITY IDEOGRAPH-FA21 FA23..FA24 ; Unified_Ideograph # Lo [2] CJK COMPATIBILITY IDEOGRAPH-FA23..CJK COMPATIBILITY IDEOGRAPH-FA24 FA27..FA29 ; Unified_Ideograph # Lo [3] CJK COMPATIBILITY IDEOGRAPH-FA27..CJK COMPATIBILITY IDEOGRAPH-FA29 20000..2A6DF ; Unified_Ideograph # Lo [42720] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DF -2A700..2B739 ; Unified_Ideograph # Lo [4154] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B739 -2B740..2B81D ; Unified_Ideograph # Lo [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D -2B820..2CEA1 ; Unified_Ideograph # Lo [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1 +2A700..2B81D ; Unified_Ideograph # Lo [4382] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B81D +2B820..2CEAD ; Unified_Ideograph # Lo [5774] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEAD 2CEB0..2EBE0 ; Unified_Ideograph # Lo [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0 2EBF0..2EE5D ; Unified_Ideograph # Lo [622] CJK UNIFIED IDEOGRAPH-2EBF0..CJK UNIFIED IDEOGRAPH-2EE5D 30000..3134A ; Unified_Ideograph # Lo [4939] CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A -31350..323AF ; Unified_Ideograph # Lo [4192] CJK UNIFIED IDEOGRAPH-31350..CJK UNIFIED IDEOGRAPH-323AF +31350..33479 ; Unified_Ideograph # Lo [8490] CJK UNIFIED IDEOGRAPH-31350..CJK UNIFIED IDEOGRAPH-33479 -# Total code points: 97680 +# Total code points: 101996 # ================================================ @@ -1809,9 +1827,7 @@ E0100..E01EF ; Variation_Selector # Mn [240] VARIATION SELECTOR-17..VARIATION S 2B47..2B4C ; Pattern_Syntax # Sm [6] REVERSE TILDE OPERATOR ABOVE RIGHTWARDS ARROW..RIGHTWARDS ARROW ABOVE REVERSE TILDE OPERATOR 2B4D..2B73 ; Pattern_Syntax # So [39] DOWNWARDS TRIANGLE-HEADED ZIGZAG ARROW..DOWNWARDS TRIANGLE-HEADED ARROW TO BAR 2B74..2B75 ; Pattern_Syntax # Cn [2] .. -2B76..2B95 ; Pattern_Syntax # So [32] NORTH WEST TRIANGLE-HEADED ARROW TO BAR..RIGHTWARDS BLACK ARROW -2B96 ; Pattern_Syntax # Cn -2B97..2BFF ; Pattern_Syntax # So [105] SYMBOL FOR TYPE A ELECTRONICS..HELLSCHREIBER PAUSE SYMBOL +2B76..2BFF ; Pattern_Syntax # So [138] NORTH WEST TRIANGLE-HEADED ARROW TO BAR..HELLSCHREIBER PAUSE SYMBOL 2E00..2E01 ; Pattern_Syntax # Po [2] RIGHT ANGLE SUBSTITUTION MARKER..RIGHT ANGLE DOTTED SUBSTITUTION MARKER 2E02 ; Pattern_Syntax # Pi LEFT SUBSTITUTION BRACKET 2E03 ; Pattern_Syntax # Pf RIGHT SUBSTITUTION BRACKET diff --git a/contrib/unicode/README b/contrib/unicode/README index a459f3496e08..a9840647f689 100644 --- a/contrib/unicode/README +++ b/contrib/unicode/README @@ -15,6 +15,7 @@ ftp://ftp.unicode.org/Public/UNIDATA/PropList.txt ftp://ftp.unicode.org/Public/UNIDATA/DerivedNormalizationProps.txt ftp://ftp.unicode.org/Public/UNIDATA/DerivedCoreProperties.txt ftp://ftp.unicode.org/Public/UNIDATA/NameAliases.txt +ftp://ftp.unicode.org/Public/UNIDATA/HangulSyllableType.txt Three additional files are needed for lookup tables in libstdc++: @@ -36,7 +37,7 @@ localedata/unicode-gen/unicode_utils.py localedata/unicode-gen/utf8_gen.py And the most recent versions added to GCC are from glibc git commit: -064c708c78cc2a6b5802dce73108fc0c1c6bfc80 +2642002380aafb71a1d3b569b6d7ebeab3284816 The script gen_wcwidth.py found here contains the GCC-specific code to map glibc's output to the lookup tables we require. This script should not need @@ -53,7 +54,7 @@ The procedure to update GCC's Unicode support is the following: 3. Run ./gen_wcwidth.py X.Y > ../../libcpp/generated_cpp_wcwidth.h (where X.Y is the version of the Unicode standard corresponding to the - Unicode data files being used, most recently, 16.0.0). + Unicode data files being used, most recently, 17.0.0). 4. Update Unicode Copyright years in libcpp/makeucnid.cc and in libcpp/makeuname2c.cc up to the year in which the Unicode @@ -68,7 +69,7 @@ The procedure to update GCC's Unicode support is the following: > ../../libcpp/ucnid.h 7. Read the corresponding Unicode's standard and update correspondingly - generated_ranges table in libcpp/makeuname2c.cc (in Unicode 16 all + generated_ranges table in libcpp/makeuname2c.cc (in Unicode 17 all the needed information was in Table 4-8). 8. Compile makeuname2c, e.g. with: diff --git a/contrib/unicode/UnicodeData.txt b/contrib/unicode/UnicodeData.txt index 64258a373953..fca68e3e154e 100644 --- a/contrib/unicode/UnicodeData.txt +++ b/contrib/unicode/UnicodeData.txt @@ -659,7 +659,7 @@ 0292;LATIN SMALL LETTER EZH;Ll;0;L;;;;;N;LATIN SMALL LETTER YOGH;;01B7;;01B7 0293;LATIN SMALL LETTER EZH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER YOGH CURL;;;; 0294;LATIN LETTER GLOTTAL STOP;Lo;0;L;;;;;N;;;;; -0295;LATIN LETTER PHARYNGEAL VOICED FRICATIVE;Ll;0;L;;;;;N;LATIN LETTER REVERSED GLOTTAL STOP;;;; +0295;LATIN LETTER PHARYNGEAL VOICED FRICATIVE;Lo;0;L;;;;;N;LATIN LETTER REVERSED GLOTTAL STOP;;;; 0296;LATIN LETTER INVERTED GLOTTAL STOP;Ll;0;L;;;;;N;;;;; 0297;LATIN LETTER STRETCHED C;Ll;0;L;;;;;N;;;;; 0298;LATIN LETTER BILABIAL CLICK;Ll;0;L;;;;;N;LATIN LETTER BULLSEYE;;;; @@ -2121,6 +2121,7 @@ 088C;ARABIC LETTER TAH WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;;;;; 088D;ARABIC LETTER KEHEH WITH TWO DOTS VERTICALLY BELOW;Lo;0;AL;;;;;N;;;;; 088E;ARABIC VERTICAL TAIL;Lo;0;AL;;;;;N;;;;; +088F;ARABIC LETTER NOON WITH RING ABOVE;Lo;0;AL;;;;;N;;;;; 0890;ARABIC POUND MARK ABOVE;Cf;0;AN;;;;;N;;;;; 0891;ARABIC PIASTRE MARK ABOVE;Cf;0;AN;;;;;N;;;;; 0897;ARABIC PEPET;Mn;230;NSM;;;;;N;;;;; @@ -2862,6 +2863,7 @@ 0C58;TELUGU LETTER TSA;Lo;0;L;;;;;N;;;;; 0C59;TELUGU LETTER DZA;Lo;0;L;;;;;N;;;;; 0C5A;TELUGU LETTER RRRA;Lo;0;L;;;;;N;;;;; +0C5C;TELUGU ARCHAIC SHRII;Lo;0;L;;;;;N;;;;; 0C5D;TELUGU LETTER NAKAARA POLLU;Lo;0;L;;;;;N;;;;; 0C60;TELUGU LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; 0C61;TELUGU LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; @@ -2958,6 +2960,7 @@ 0CCD;KANNADA SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; 0CD5;KANNADA LENGTH MARK;Mc;0;L;;;;;N;;;;; 0CD6;KANNADA AI LENGTH MARK;Mc;0;L;;;;;N;;;;; +0CDC;KANNADA ARCHAIC SHRII;Lo;0;L;;;;;N;;;;; 0CDD;KANNADA LETTER NAKAARA POLLU;Lo;0;L;;;;;N;;;;; 0CDE;KANNADA LETTER FA;Lo;0;L;;;;;N;;;;; 0CE0;KANNADA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; @@ -6137,6 +6140,33 @@ 1ACC;COMBINING LATIN SMALL LETTER INSULAR G;Mn;230;NSM;;;;;N;;;;; 1ACD;COMBINING LATIN SMALL LETTER INSULAR R;Mn;230;NSM;;;;;N;;;;; 1ACE;COMBINING LATIN SMALL LETTER INSULAR T;Mn;230;NSM;;;;;N;;;;; +1ACF;COMBINING DOUBLE CARON;Mn;230;NSM;;;;;N;;;;; +1AD0;COMBINING VERTICAL-LINE-ACUTE;Mn;230;NSM;;;;;N;;;;; +1AD1;COMBINING GRAVE-VERTICAL-LINE;Mn;230;NSM;;;;;N;;;;; +1AD2;COMBINING VERTICAL-LINE-GRAVE;Mn;230;NSM;;;;;N;;;;; +1AD3;COMBINING ACUTE-VERTICAL-LINE;Mn;230;NSM;;;;;N;;;;; +1AD4;COMBINING VERTICAL-LINE-MACRON;Mn;230;NSM;;;;;N;;;;; +1AD5;COMBINING MACRON-VERTICAL-LINE;Mn;230;NSM;;;;;N;;;;; +1AD6;COMBINING VERTICAL-LINE-ACUTE-GRAVE;Mn;230;NSM;;;;;N;;;;; +1AD7;COMBINING VERTICAL-LINE-GRAVE-ACUTE;Mn;230;NSM;;;;;N;;;;; +1AD8;COMBINING MACRON-ACUTE-GRAVE;Mn;230;NSM;;;;;N;;;;; +1AD9;COMBINING SHARP SIGN;Mn;230;NSM;;;;;N;;;;; +1ADA;COMBINING FLAT SIGN;Mn;230;NSM;;;;;N;;;;; +1ADB;COMBINING DOWN TACK ABOVE;Mn;230;NSM;;;;;N;;;;; +1ADC;COMBINING DIAERESIS WITH RAISED LEFT DOT;Mn;230;NSM;;;;;N;;;;; +1ADD;COMBINING DOT-AND-RING BELOW;Mn;220;NSM;;;;;N;;;;; +1AE0;COMBINING LEFT TACK ABOVE;Mn;230;NSM;;;;;N;;;;; +1AE1;COMBINING RIGHT TACK ABOVE;Mn;230;NSM;;;;;N;;;;; +1AE2;COMBINING MINUS SIGN ABOVE;Mn;230;NSM;;;;;N;;;;; +1AE3;COMBINING INVERTED BRIDGE ABOVE;Mn;230;NSM;;;;;N;;;;; +1AE4;COMBINING SQUARE ABOVE;Mn;230;NSM;;;;;N;;;;; +1AE5;COMBINING SEAGULL ABOVE;Mn;230;NSM;;;;;N;;;;; +1AE6;COMBINING DOUBLE ARCH BELOW;Mn;220;NSM;;;;;N;;;;; +1AE7;COMBINING DOUBLE ARCH ABOVE;Mn;230;NSM;;;;;N;;;;; +1AE8;COMBINING EQUALS SIGN ABOVE;Mn;230;NSM;;;;;N;;;;; +1AE9;COMBINING LEFT ANGLE CENTRED ABOVE;Mn;230;NSM;;;;;N;;;;; +1AEA;COMBINING UPWARDS ARROW ABOVE;Mn;230;NSM;;;;;N;;;;; +1AEB;COMBINING DOUBLE RIGHTWARDS ARROW ABOVE;Mn;234;NSM;;;;;N;;;;; 1B00;BALINESE SIGN ULU RICEM;Mn;0;NSM;;;;;N;;;;; 1B01;BALINESE SIGN ULU CANDRA;Mn;0;NSM;;;;;N;;;;; 1B02;BALINESE SIGN CECEK;Mn;0;NSM;;;;;N;;;;; @@ -7545,6 +7575,7 @@ 20BE;LARI SIGN;Sc;0;ET;;;;;N;;;;; 20BF;BITCOIN SIGN;Sc;0;ET;;;;;N;;;;; 20C0;SOM SIGN;Sc;0;ET;;;;;N;;;;; +20C1;SAUDI RIYAL SIGN;Sc;0;ET;;;;;N;;;;; 20D0;COMBINING LEFT HARPOON ABOVE;Mn;230;NSM;;;;;N;NON-SPACING LEFT HARPOON ABOVE;;;; 20D1;COMBINING RIGHT HARPOON ABOVE;Mn;230;NSM;;;;;N;NON-SPACING RIGHT HARPOON ABOVE;;;; 20D2;COMBINING LONG VERTICAL LINE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING LONG VERTICAL BAR OVERLAY;;;; @@ -10239,6 +10270,7 @@ 2B93;NEWLINE RIGHT;So;0;ON;;;;;N;;;;; 2B94;FOUR CORNER ARROWS CIRCLING ANTICLOCKWISE;So;0;ON;;;;;N;;;;; 2B95;RIGHTWARDS BLACK ARROW;So;0;ON;;;;;N;;;;; +2B96;EQUALS SIGN WITH INFINITY ABOVE;So;0;ON;;;;;N;;;;; 2B97;SYMBOL FOR TYPE A ELECTRONICS;So;0;ON;;;;;N;;;;; 2B98;THREE-D TOP-LIGHTED LEFTWARDS EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;; 2B99;THREE-D RIGHT-LIGHTED UPWARDS EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;; @@ -14274,10 +14306,14 @@ A7CA;LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY;Ll;0;L;;;;;N;;;A7C9;;A7C9 A7CB;LATIN CAPITAL LETTER RAMS HORN;Lu;0;L;;;;;N;;;;0264; A7CC;LATIN CAPITAL LETTER S WITH DIAGONAL STROKE;Lu;0;L;;;;;N;;;;A7CD; A7CD;LATIN SMALL LETTER S WITH DIAGONAL STROKE;Ll;0;L;;;;;N;;;A7CC;;A7CC +A7CE;LATIN CAPITAL LETTER PHARYNGEAL VOICED FRICATIVE;Lu;0;L;;;;;N;;;;A7CF; +A7CF;LATIN SMALL LETTER PHARYNGEAL VOICED FRICATIVE;Ll;0;L;;;;;N;;;A7CE;;A7CE A7D0;LATIN CAPITAL LETTER CLOSED INSULAR G;Lu;0;L;;;;;N;;;;A7D1; A7D1;LATIN SMALL LETTER CLOSED INSULAR G;Ll;0;L;;;;;N;;;A7D0;;A7D0 -A7D3;LATIN SMALL LETTER DOUBLE THORN;Ll;0;L;;;;;N;;;;; -A7D5;LATIN SMALL LETTER DOUBLE WYNN;Ll;0;L;;;;;N;;;;; +A7D2;LATIN CAPITAL LETTER DOUBLE THORN;Lu;0;L;;;;;N;;;;A7D3; +A7D3;LATIN SMALL LETTER DOUBLE THORN;Ll;0;L;;;;;N;;;A7D2;;A7D2 +A7D4;LATIN CAPITAL LETTER DOUBLE WYNN;Lu;0;L;;;;;N;;;;A7D5; +A7D5;LATIN SMALL LETTER DOUBLE WYNN;Ll;0;L;;;;;N;;;A7D4;;A7D4 A7D6;LATIN CAPITAL LETTER MIDDLE SCOTS S;Lu;0;L;;;;;N;;;;A7D7; A7D7;LATIN SMALL LETTER MIDDLE SCOTS S;Ll;0;L;;;;;N;;;A7D6;;A7D6 A7D8;LATIN CAPITAL LETTER SIGMOID S;Lu;0;L;;;;;N;;;;A7D9; @@ -14285,6 +14321,7 @@ A7D9;LATIN SMALL LETTER SIGMOID S;Ll;0;L;;;;;N;;;A7D8;;A7D8 A7DA;LATIN CAPITAL LETTER LAMBDA;Lu;0;L;;;;;N;;;;A7DB; A7DB;LATIN SMALL LETTER LAMBDA;Ll;0;L;;;;;N;;;A7DA;;A7DA A7DC;LATIN CAPITAL LETTER LAMBDA WITH STROKE;Lu;0;L;;;;;N;;;;019B; +A7F1;MODIFIER LETTER CAPITAL S;Lm;0;L; 0053;;;;N;;;;; A7F2;MODIFIER LETTER CAPITAL C;Lm;0;L; 0043;;;;N;;;;; A7F3;MODIFIER LETTER CAPITAL F;Lm;0;L; 0046;;;;N;;;;; A7F4;MODIFIER LETTER CAPITAL Q;Lm;0;L; 0051;;;;N;;;;; @@ -15925,6 +15962,22 @@ FBBF;ARABIC SYMBOL RING;Sk;0;AL;;;;;N;;;;; FBC0;ARABIC SYMBOL SMALL TAH ABOVE;Sk;0;AL;;;;;N;;;;; FBC1;ARABIC SYMBOL SMALL TAH BELOW;Sk;0;AL;;;;;N;;;;; FBC2;ARABIC SYMBOL WASLA ABOVE;Sk;0;AL;;;;;N;;;;; +FBC3;ARABIC LIGATURE JALLA WA-ALAA;So;0;ON;;;;;N;;;;; +FBC4;ARABIC LIGATURE DAAMAT BARAKAATUHUM;So;0;ON;;;;;N;;;;; +FBC5;ARABIC LIGATURE RAHMATU ALLAAHI TAAALAA ALAYH;So;0;ON;;;;;N;;;;; +FBC6;ARABIC LIGATURE RAHMATU ALLAAHI ALAYHIM;So;0;ON;;;;;N;;;;; +FBC7;ARABIC LIGATURE RAHMATU ALLAAHI ALAYHIMAA;So;0;ON;;;;;N;;;;; +FBC8;ARABIC LIGATURE RAHIMAHUM ALLAAHU TAAALAA;So;0;ON;;;;;N;;;;; +FBC9;ARABIC LIGATURE RAHIMAHUMAA ALLAAH;So;0;ON;;;;;N;;;;; +FBCA;ARABIC LIGATURE RAHIMAHUMAA ALLAAHU TAAALAA;So;0;ON;;;;;N;;;;; +FBCB;ARABIC LIGATURE RADI ALLAAHU TAAALAA ANHUM;So;0;ON;;;;;N;;;;; +FBCC;ARABIC LIGATURE HAFIZAHU ALLAAH;So;0;ON;;;;;N;;;;; +FBCD;ARABIC LIGATURE HAFIZAHU ALLAAHU TAAALAA;So;0;ON;;;;;N;;;;; +FBCE;ARABIC LIGATURE HAFIZAHUM ALLAAHU TAAALAA;So;0;ON;;;;;N;;;;; +FBCF;ARABIC LIGATURE HAFIZAHUMAA ALLAAHU TAAALAA;So;0;ON;;;;;N;;;;; +FBD0;ARABIC LIGATURE SALLALLAAHU TAAALAA ALAYHI WA-SALLAM;So;0;ON;;;;;N;;;;; +FBD1;ARABIC LIGATURE AJJAL ALLAAHU FARAJAHU ASH-SHAREEF;So;0;ON;;;;;N;;;;; +FBD2;ARABIC LIGATURE ALAYHI AR-RAHMAH;So;0;ON;;;;;N;;;;; FBD3;ARABIC LETTER NG ISOLATED FORM;Lo;0;AL; 06AD;;;;N;;;;; FBD4;ARABIC LETTER NG FINAL FORM;Lo;0;AL; 06AD;;;;N;;;;; FBD5;ARABIC LETTER NG INITIAL FORM;Lo;0;AL; 06AD;;;;N;;;;; @@ -16370,6 +16423,8 @@ FD8C;ARABIC LIGATURE MEEM WITH JEEM WITH HAH INITIAL FORM;Lo;0;AL; 0645 FD8D;ARABIC LIGATURE MEEM WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL; 0645 062C 0645;;;;N;;;;; FD8E;ARABIC LIGATURE MEEM WITH KHAH WITH JEEM INITIAL FORM;Lo;0;AL; 0645 062E 062C;;;;N;;;;; FD8F;ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL; 0645 062E 0645;;;;N;;;;; +FD90;ARABIC LIGATURE RAHMATU ALLAAHI ALAYH;So;0;ON;;;;;N;;;;; +FD91;ARABIC LIGATURE RAHMATU ALLAAHI ALAYHAA;So;0;ON;;;;;N;;;;; FD92;ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM;Lo;0;AL; 0645 062C 062E;;;;N;;;;; FD93;ARABIC LIGATURE HEH WITH MEEM WITH JEEM INITIAL FORM;Lo;0;AL; 0647 0645 062C;;;;N;;;;; FD94;ARABIC LIGATURE HEH WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL; 0647 0645 0645;;;;N;;;;; @@ -16424,6 +16479,13 @@ FDC4;ARABIC LIGATURE AIN WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL; 0639 FDC5;ARABIC LIGATURE SAD WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL; 0635 0645 0645;;;;N;;;;; FDC6;ARABIC LIGATURE SEEN WITH KHAH WITH YEH FINAL FORM;Lo;0;AL; 0633 062E 064A;;;;N;;;;; FDC7;ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM;Lo;0;AL; 0646 062C 064A;;;;N;;;;; +FDC8;ARABIC LIGATURE RAHIMAHU ALLAAH TAAALAA;So;0;ON;;;;;N;;;;; +FDC9;ARABIC LIGATURE RADI ALLAAHU TAAALAA ANH;So;0;ON;;;;;N;;;;; +FDCA;ARABIC LIGATURE RADI ALLAAHU TAAALAA ANHAA;So;0;ON;;;;;N;;;;; +FDCB;ARABIC LIGATURE RADI ALLAAHU TAAALAA ANHUMAA;So;0;ON;;;;;N;;;;; +FDCC;ARABIC LIGATURE SALLALLAHU ALAYHI WA-ALAA AALIHEE WA-SALLAM;So;0;ON;;;;;N;;;;; +FDCD;ARABIC LIGATURE AJJAL ALLAAHU TAAALAA FARAJAHU ASH-SHAREEF;So;0;ON;;;;;N;;;;; +FDCE;ARABIC LIGATURE KARRAMA ALLAAHU WAJHAH;So;0;ON;;;;;N;;;;; FDCF;ARABIC LIGATURE SALAAMUHU ALAYNAA;So;0;ON;;;;;N;;;;; FDF0;ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM;Lo;0;AL; 0635 0644 06D2;;;;N;;;;; FDF1;ARABIC LIGATURE QALA USED AS KORANIC STOP SIGN ISOLATED FORM;Lo;0;AL; 0642 0644 06D2;;;;N;;;;; @@ -18708,6 +18770,32 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 10938;LYDIAN LETTER NN;Lo;0;R;;;;;N;;;;; 10939;LYDIAN LETTER C;Lo;0;R;;;;;N;;;;; 1093F;LYDIAN TRIANGULAR MARK;Po;0;R;;;;;N;;;;; +10940;SIDETIC LETTER N01;Lo;0;R;;;;;N;;;;; +10941;SIDETIC LETTER N02;Lo;0;R;;;;;N;;;;; +10942;SIDETIC LETTER N03;Lo;0;R;;;;;N;;;;; +10943;SIDETIC LETTER N04;Lo;0;R;;;;;N;;;;; +10944;SIDETIC LETTER N05;Lo;0;R;;;;;N;;;;; +10945;SIDETIC LETTER N06;Lo;0;R;;;;;N;;;;; +10946;SIDETIC LETTER N07;Lo;0;R;;;;;N;;;;; +10947;SIDETIC LETTER N08;Lo;0;R;;;;;N;;;;; +10948;SIDETIC LETTER N09;Lo;0;R;;;;;N;;;;; +10949;SIDETIC LETTER N10;Lo;0;R;;;;;N;;;;; +1094A;SIDETIC LETTER N11;Lo;0;R;;;;;N;;;;; +1094B;SIDETIC LETTER N12;Lo;0;R;;;;;N;;;;; +1094C;SIDETIC LETTER N13;Lo;0;R;;;;;N;;;;; +1094D;SIDETIC LETTER N14;Lo;0;R;;;;;N;;;;; +1094E;SIDETIC LETTER N15;Lo;0;R;;;;;N;;;;; +1094F;SIDETIC LETTER N16;Lo;0;R;;;;;N;;;;; +10950;SIDETIC LETTER N17;Lo;0;R;;;;;N;;;;; +10951;SIDETIC LETTER N18;Lo;0;R;;;;;N;;;;; +10952;SIDETIC LETTER N19;Lo;0;R;;;;;N;;;;; +10953;SIDETIC LETTER N20;Lo;0;R;;;;;N;;;;; +10954;SIDETIC LETTER N21;Lo;0;R;;;;;N;;;;; +10955;SIDETIC LETTER N22;Lo;0;R;;;;;N;;;;; +10956;SIDETIC LETTER N23;Lo;0;R;;;;;N;;;;; +10957;SIDETIC LETTER N24;Lo;0;R;;;;;N;;;;; +10958;SIDETIC LETTER N25;Lo;0;R;;;;;N;;;;; +10959;SIDETIC LETTER N26;Lo;0;R;;;;;N;;;;; 10980;MEROITIC HIEROGLYPHIC LETTER A;Lo;0;R;;;;;N;;;;; 10981;MEROITIC HIEROGLYPHIC LETTER E;Lo;0;R;;;;;N;;;;; 10982;MEROITIC HIEROGLYPHIC LETTER I;Lo;0;R;;;;;N;;;;; @@ -19541,6 +19629,20 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 10EC2;ARABIC LETTER DAL WITH TWO DOTS VERTICALLY BELOW;Lo;0;AL;;;;;N;;;;; 10EC3;ARABIC LETTER TAH WITH TWO DOTS VERTICALLY BELOW;Lo;0;AL;;;;;N;;;;; 10EC4;ARABIC LETTER KAF WITH TWO DOTS VERTICALLY BELOW;Lo;0;AL;;;;;N;;;;; +10EC5;ARABIC SMALL YEH BARREE WITH TWO DOTS BELOW;Lm;0;AL;;;;;N;;;;; +10EC6;ARABIC LETTER THIN NOON;Lo;0;AL;;;;;N;;;;; +10EC7;ARABIC LETTER YEH WITH FOUR DOTS BELOW;Lo;0;AL;;;;;N;;;;; +10ED0;ARABIC BIBLICAL END OF VERSE;Po;0;ON;;;;;N;;;;; +10ED1;ARABIC LIGATURE ALAYHAA AS-SALAATU WAS-SALAAM;So;0;ON;;;;;N;;;;; +10ED2;ARABIC LIGATURE ALAYHIM AS-SALAATU WAS-SALAAM;So;0;ON;;;;;N;;;;; +10ED3;ARABIC LIGATURE ALAYHIMAA AS-SALAATU WAS-SALAAM;So;0;ON;;;;;N;;;;; +10ED4;ARABIC LIGATURE QADDASA ALLAAHU SIRRAH;So;0;ON;;;;;N;;;;; +10ED5;ARABIC LIGATURE QUDDISA SIRRUHUM;So;0;ON;;;;;N;;;;; +10ED6;ARABIC LIGATURE QUDDISA SIRRUHUMAA;So;0;ON;;;;;N;;;;; +10ED7;ARABIC LIGATURE QUDDISAT ASRAARUHUM;So;0;ON;;;;;N;;;;; +10ED8;ARABIC LIGATURE NAWWARA ALLAAHU MARQADAH;So;0;ON;;;;;N;;;;; +10EFA;ARABIC DOUBLE VERTICAL BAR BELOW;Mn;220;NSM;;;;;N;;;;; +10EFB;ARABIC SMALL LOW NOON;Mn;220;NSM;;;;;N;;;;; 10EFC;ARABIC COMBINING ALEF OVERLAY;Mn;0;NSM;;;;;N;;;;; 10EFD;ARABIC SMALL LOW WORD SAKTA;Mn;220;NSM;;;;;N;;;;; 10EFE;ARABIC SMALL LOW WORD QASR;Mn;220;NSM;;;;;N;;;;; @@ -21521,6 +21623,14 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 11B07;DEVANAGARI SIGN WESTERN NINE-LIKE BHALE;Po;0;L;;;;;N;;;;; 11B08;DEVANAGARI SIGN REVERSED NINE-LIKE BHALE;Po;0;L;;;;;N;;;;; 11B09;DEVANAGARI SIGN MINDU;Po;0;L;;;;;N;;;;; +11B60;SHARADA VOWEL SIGN OE;Mn;0;NSM;;;;;N;;;;; +11B61;SHARADA VOWEL SIGN OOE;Mc;0;L;;;;;N;;;;; +11B62;SHARADA VOWEL SIGN UE;Mn;0;NSM;;;;;N;;;;; +11B63;SHARADA VOWEL SIGN UUE;Mn;0;NSM;;;;;N;;;;; +11B64;SHARADA VOWEL SIGN SHORT E;Mn;0;NSM;;;;;N;;;;; +11B65;SHARADA VOWEL SIGN SHORT O;Mc;0;L;;;;;N;;;;; +11B66;SHARADA VOWEL SIGN CANDRA E;Mn;0;NSM;;;;;N;;;;; +11B67;SHARADA VOWEL SIGN CANDRA O;Mc;0;L;;;;;N;;;;; 11BC0;SUNUWAR LETTER DEVI;Lo;0;L;;;;;N;;;;; 11BC1;SUNUWAR LETTER TASLA;Lo;0;L;;;;;N;;;;; 11BC2;SUNUWAR LETTER EKO;Lo;0;L;;;;;N;;;;; @@ -21868,6 +21978,60 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 11DA7;GUNJALA GONDI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 11DA8;GUNJALA GONDI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 11DA9;GUNJALA GONDI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +11DB0;TOLONG SIKI LETTER I;Lo;0;L;;;;;N;;;;; +11DB1;TOLONG SIKI LETTER E;Lo;0;L;;;;;N;;;;; +11DB2;TOLONG SIKI LETTER U;Lo;0;L;;;;;N;;;;; +11DB3;TOLONG SIKI LETTER O;Lo;0;L;;;;;N;;;;; +11DB4;TOLONG SIKI LETTER A;Lo;0;L;;;;;N;;;;; +11DB5;TOLONG SIKI LETTER AA;Lo;0;L;;;;;N;;;;; +11DB6;TOLONG SIKI LETTER P;Lo;0;L;;;;;N;;;;; +11DB7;TOLONG SIKI LETTER PH;Lo;0;L;;;;;N;;;;; +11DB8;TOLONG SIKI LETTER B;Lo;0;L;;;;;N;;;;; +11DB9;TOLONG SIKI LETTER BH;Lo;0;L;;;;;N;;;;; +11DBA;TOLONG SIKI LETTER M;Lo;0;L;;;;;N;;;;; +11DBB;TOLONG SIKI LETTER T;Lo;0;L;;;;;N;;;;; +11DBC;TOLONG SIKI LETTER TH;Lo;0;L;;;;;N;;;;; +11DBD;TOLONG SIKI LETTER D;Lo;0;L;;;;;N;;;;; +11DBE;TOLONG SIKI LETTER DH;Lo;0;L;;;;;N;;;;; +11DBF;TOLONG SIKI LETTER N;Lo;0;L;;;;;N;;;;; +11DC0;TOLONG SIKI LETTER TT;Lo;0;L;;;;;N;;;;; +11DC1;TOLONG SIKI LETTER TTH;Lo;0;L;;;;;N;;;;; +11DC2;TOLONG SIKI LETTER DD;Lo;0;L;;;;;N;;;;; +11DC3;TOLONG SIKI LETTER DDH;Lo;0;L;;;;;N;;;;; +11DC4;TOLONG SIKI LETTER NN;Lo;0;L;;;;;N;;;;; +11DC5;TOLONG SIKI LETTER C;Lo;0;L;;;;;N;;;;; +11DC6;TOLONG SIKI LETTER CH;Lo;0;L;;;;;N;;;;; +11DC7;TOLONG SIKI LETTER J;Lo;0;L;;;;;N;;;;; +11DC8;TOLONG SIKI LETTER JH;Lo;0;L;;;;;N;;;;; +11DC9;TOLONG SIKI LETTER NY;Lo;0;L;;;;;N;;;;; +11DCA;TOLONG SIKI LETTER K;Lo;0;L;;;;;N;;;;; +11DCB;TOLONG SIKI LETTER KH;Lo;0;L;;;;;N;;;;; +11DCC;TOLONG SIKI LETTER G;Lo;0;L;;;;;N;;;;; +11DCD;TOLONG SIKI LETTER GH;Lo;0;L;;;;;N;;;;; +11DCE;TOLONG SIKI LETTER NG;Lo;0;L;;;;;N;;;;; +11DCF;TOLONG SIKI LETTER Y;Lo;0;L;;;;;N;;;;; +11DD0;TOLONG SIKI LETTER R;Lo;0;L;;;;;N;;;;; +11DD1;TOLONG SIKI LETTER L;Lo;0;L;;;;;N;;;;; +11DD2;TOLONG SIKI LETTER V;Lo;0;L;;;;;N;;;;; +11DD3;TOLONG SIKI LETTER NNY;Lo;0;L;;;;;N;;;;; +11DD4;TOLONG SIKI LETTER S;Lo;0;L;;;;;N;;;;; +11DD5;TOLONG SIKI LETTER H;Lo;0;L;;;;;N;;;;; +11DD6;TOLONG SIKI LETTER X;Lo;0;L;;;;;N;;;;; +11DD7;TOLONG SIKI LETTER RR;Lo;0;L;;;;;N;;;;; +11DD8;TOLONG SIKI LETTER RRH;Lo;0;L;;;;;N;;;;; +11DD9;TOLONG SIKI SIGN SELA;Lm;0;L;;;;;N;;;;; +11DDA;TOLONG SIKI SIGN HECAKA;Lo;0;L;;;;;N;;;;; +11DDB;TOLONG SIKI UNGGA;Lo;0;L;;;;;N;;;;; +11DE0;TOLONG SIKI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +11DE1;TOLONG SIKI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +11DE2;TOLONG SIKI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +11DE3;TOLONG SIKI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +11DE4;TOLONG SIKI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +11DE5;TOLONG SIKI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +11DE6;TOLONG SIKI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +11DE7;TOLONG SIKI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +11DE8;TOLONG SIKI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +11DE9;TOLONG SIKI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 11EE0;MAKASAR LETTER KA;Lo;0;L;;;;;N;;;;; 11EE1;MAKASAR LETTER GA;Lo;0;L;;;;;N;;;;; 11EE2;MAKASAR LETTER NGA;Lo;0;L;;;;;N;;;;; @@ -22088,8 +22252,8 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 12035;CUNEIFORM SIGN ARAD TIMES KUR;Lo;0;L;;;;;N;;;;; 12036;CUNEIFORM SIGN ARKAB;Lo;0;L;;;;;N;;;;; 12037;CUNEIFORM SIGN ASAL2;Lo;0;L;;;;;N;;;;; -12038;CUNEIFORM SIGN ASH;Lo;0;L;;;;;N;;;;; -12039;CUNEIFORM SIGN ASH ZIDA TENU;Lo;0;L;;;;;N;;;;; +12038;CUNEIFORM SIGN ASH;Lo;0;L;;;;1;N;;;;; +12039;CUNEIFORM SIGN ASH ZIDA TENU;Lo;0;L;;;;1;N;;;;; 1203A;CUNEIFORM SIGN ASH KABA TENU;Lo;0;L;;;;;N;;;;; 1203B;CUNEIFORM SIGN ASH OVER ASH TUG2 OVER TUG2 TUG2 OVER TUG2 PAP;Lo;0;L;;;;;N;;;;; 1203C;CUNEIFORM SIGN ASH OVER ASH OVER ASH;Lo;0;L;;;;;N;;;;; @@ -22153,7 +22317,7 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 12076;CUNEIFORM SIGN DIM2;Lo;0;L;;;;;N;;;;; 12077;CUNEIFORM SIGN DIN;Lo;0;L;;;;;N;;;;; 12078;CUNEIFORM SIGN DIN KASKAL U GUNU DISH;Lo;0;L;;;;;N;;;;; -12079;CUNEIFORM SIGN DISH;Lo;0;L;;;;;N;;;;; +12079;CUNEIFORM SIGN DISH;Lo;0;L;;;;1;N;;;;; 1207A;CUNEIFORM SIGN DU;Lo;0;L;;;;;N;;;;; 1207B;CUNEIFORM SIGN DU OVER DU;Lo;0;L;;;;;N;;;;; 1207C;CUNEIFORM SIGN DU GUNU;Lo;0;L;;;;;N;;;;; @@ -22582,12 +22746,12 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 12223;CUNEIFORM SIGN MA2;Lo;0;L;;;;;N;;;;; 12224;CUNEIFORM SIGN MAH;Lo;0;L;;;;;N;;;;; 12225;CUNEIFORM SIGN MAR;Lo;0;L;;;;;N;;;;; -12226;CUNEIFORM SIGN MASH;Lo;0;L;;;;;N;;;;; +12226;CUNEIFORM SIGN MASH;Lo;0;L;;;;1/2;N;;;;; 12227;CUNEIFORM SIGN MASH2;Lo;0;L;;;;;N;;;;; 12228;CUNEIFORM SIGN ME;Lo;0;L;;;;;N;;;;; 12229;CUNEIFORM SIGN MES;Lo;0;L;;;;;N;;;;; 1222A;CUNEIFORM SIGN MI;Lo;0;L;;;;;N;;;;; -1222B;CUNEIFORM SIGN MIN;Lo;0;L;;;;;N;;;;; +1222B;CUNEIFORM SIGN MIN;Lo;0;L;;;;2;N;;;;; 1222C;CUNEIFORM SIGN MU;Lo;0;L;;;;;N;;;;; 1222D;CUNEIFORM SIGN MU OVER MU;Lo;0;L;;;;;N;;;;; 1222E;CUNEIFORM SIGN MUG;Lo;0;L;;;;;N;;;;; @@ -22811,9 +22975,9 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 12308;CUNEIFORM SIGN TUM;Lo;0;L;;;;;N;;;;; 12309;CUNEIFORM SIGN TUR;Lo;0;L;;;;;N;;;;; 1230A;CUNEIFORM SIGN TUR OVER TUR ZA OVER ZA;Lo;0;L;;;;;N;;;;; -1230B;CUNEIFORM SIGN U;Lo;0;L;;;;;N;;;;; +1230B;CUNEIFORM SIGN U;Lo;0;L;;;;1;N;;;;; 1230C;CUNEIFORM SIGN U GUD;Lo;0;L;;;;;N;;;;; -1230D;CUNEIFORM SIGN U U U;Lo;0;L;;;;;N;;;;; +1230D;CUNEIFORM SIGN U U U;Lo;0;L;;;;3;N;;;;; 1230E;CUNEIFORM SIGN U OVER U PA OVER PA GAR OVER GAR;Lo;0;L;;;;;N;;;;; 1230F;CUNEIFORM SIGN U OVER U SUR OVER SUR;Lo;0;L;;;;;N;;;;; 12310;CUNEIFORM SIGN U OVER U U REVERSED OVER U REVERSED;Lo;0;L;;;;;N;;;;; @@ -22953,7 +23117,7 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 12396;CUNEIFORM SIGN SAG TIMES IGI GUNU;Lo;0;L;;;;;N;;;;; 12397;CUNEIFORM SIGN TI2;Lo;0;L;;;;;N;;;;; 12398;CUNEIFORM SIGN UM TIMES ME;Lo;0;L;;;;;N;;;;; -12399;CUNEIFORM SIGN U U;Lo;0;L;;;;;N;;;;; +12399;CUNEIFORM SIGN U U;Lo;0;L;;;;2;N;;;;; 12400;CUNEIFORM NUMERIC SIGN TWO ASH;Nl;0;L;;;;2;N;;;;; 12401;CUNEIFORM NUMERIC SIGN THREE ASH;Nl;0;L;;;;3;N;;;;; 12402;CUNEIFORM NUMERIC SIGN FOUR ASH;Nl;0;L;;;;4;N;;;;; @@ -30124,6 +30288,56 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 16E98;MEDEFAIDRIN FULL STOP;Po;0;L;;;;;N;;;;; 16E99;MEDEFAIDRIN SYMBOL AIVA;Po;0;L;;;;;N;;;;; 16E9A;MEDEFAIDRIN EXCLAMATION OH;Po;0;L;;;;;N;;;;; +16EA0;BERIA ERFE CAPITAL LETTER ARKAB;Lu;0;L;;;;;N;;;;16EBB; +16EA1;BERIA ERFE CAPITAL LETTER BASIGNA;Lu;0;L;;;;;N;;;;16EBC; +16EA2;BERIA ERFE CAPITAL LETTER DARBAI;Lu;0;L;;;;;N;;;;16EBD; +16EA3;BERIA ERFE CAPITAL LETTER EH;Lu;0;L;;;;;N;;;;16EBE; +16EA4;BERIA ERFE CAPITAL LETTER FITKO;Lu;0;L;;;;;N;;;;16EBF; +16EA5;BERIA ERFE CAPITAL LETTER GOWAY;Lu;0;L;;;;;N;;;;16EC0; +16EA6;BERIA ERFE CAPITAL LETTER HIRDEABO;Lu;0;L;;;;;N;;;;16EC1; +16EA7;BERIA ERFE CAPITAL LETTER I;Lu;0;L;;;;;N;;;;16EC2; +16EA8;BERIA ERFE CAPITAL LETTER DJAI;Lu;0;L;;;;;N;;;;16EC3; +16EA9;BERIA ERFE CAPITAL LETTER KOBO;Lu;0;L;;;;;N;;;;16EC4; +16EAA;BERIA ERFE CAPITAL LETTER LAKKO;Lu;0;L;;;;;N;;;;16EC5; +16EAB;BERIA ERFE CAPITAL LETTER MERI;Lu;0;L;;;;;N;;;;16EC6; +16EAC;BERIA ERFE CAPITAL LETTER NINI;Lu;0;L;;;;;N;;;;16EC7; +16EAD;BERIA ERFE CAPITAL LETTER GNA;Lu;0;L;;;;;N;;;;16EC8; +16EAE;BERIA ERFE CAPITAL LETTER NGAY;Lu;0;L;;;;;N;;;;16EC9; +16EAF;BERIA ERFE CAPITAL LETTER OI;Lu;0;L;;;;;N;;;;16ECA; +16EB0;BERIA ERFE CAPITAL LETTER PI;Lu;0;L;;;;;N;;;;16ECB; +16EB1;BERIA ERFE CAPITAL LETTER ERIGO;Lu;0;L;;;;;N;;;;16ECC; +16EB2;BERIA ERFE CAPITAL LETTER ERIGO TAMURA;Lu;0;L;;;;;N;;;;16ECD; +16EB3;BERIA ERFE CAPITAL LETTER SERI;Lu;0;L;;;;;N;;;;16ECE; +16EB4;BERIA ERFE CAPITAL LETTER SHEP;Lu;0;L;;;;;N;;;;16ECF; +16EB5;BERIA ERFE CAPITAL LETTER TATASOUE;Lu;0;L;;;;;N;;;;16ED0; +16EB6;BERIA ERFE CAPITAL LETTER UI;Lu;0;L;;;;;N;;;;16ED1; +16EB7;BERIA ERFE CAPITAL LETTER WASSE;Lu;0;L;;;;;N;;;;16ED2; +16EB8;BERIA ERFE CAPITAL LETTER AY;Lu;0;L;;;;;N;;;;16ED3; +16EBB;BERIA ERFE SMALL LETTER ARKAB;Ll;0;L;;;;;N;;;16EA0;;16EA0 +16EBC;BERIA ERFE SMALL LETTER BASIGNA;Ll;0;L;;;;;N;;;16EA1;;16EA1 +16EBD;BERIA ERFE SMALL LETTER DARBAI;Ll;0;L;;;;;N;;;16EA2;;16EA2 +16EBE;BERIA ERFE SMALL LETTER EH;Ll;0;L;;;;;N;;;16EA3;;16EA3 +16EBF;BERIA ERFE SMALL LETTER FITKO;Ll;0;L;;;;;N;;;16EA4;;16EA4 +16EC0;BERIA ERFE SMALL LETTER GOWAY;Ll;0;L;;;;;N;;;16EA5;;16EA5 +16EC1;BERIA ERFE SMALL LETTER HIRDEABO;Ll;0;L;;;;;N;;;16EA6;;16EA6 +16EC2;BERIA ERFE SMALL LETTER I;Ll;0;L;;;;;N;;;16EA7;;16EA7 +16EC3;BERIA ERFE SMALL LETTER DJAI;Ll;0;L;;;;;N;;;16EA8;;16EA8 +16EC4;BERIA ERFE SMALL LETTER KOBO;Ll;0;L;;;;;N;;;16EA9;;16EA9 +16EC5;BERIA ERFE SMALL LETTER LAKKO;Ll;0;L;;;;;N;;;16EAA;;16EAA +16EC6;BERIA ERFE SMALL LETTER MERI;Ll;0;L;;;;;N;;;16EAB;;16EAB +16EC7;BERIA ERFE SMALL LETTER NINI;Ll;0;L;;;;;N;;;16EAC;;16EAC +16EC8;BERIA ERFE SMALL LETTER GNA;Ll;0;L;;;;;N;;;16EAD;;16EAD +16EC9;BERIA ERFE SMALL LETTER NGAY;Ll;0;L;;;;;N;;;16EAE;;16EAE +16ECA;BERIA ERFE SMALL LETTER OI;Ll;0;L;;;;;N;;;16EAF;;16EAF +16ECB;BERIA ERFE SMALL LETTER PI;Ll;0;L;;;;;N;;;16EB0;;16EB0 +16ECC;BERIA ERFE SMALL LETTER ERIGO;Ll;0;L;;;;;N;;;16EB1;;16EB1 +16ECD;BERIA ERFE SMALL LETTER ERIGO TAMURA;Ll;0;L;;;;;N;;;16EB2;;16EB2 +16ECE;BERIA ERFE SMALL LETTER SERI;Ll;0;L;;;;;N;;;16EB3;;16EB3 +16ECF;BERIA ERFE SMALL LETTER SHEP;Ll;0;L;;;;;N;;;16EB4;;16EB4 +16ED0;BERIA ERFE SMALL LETTER TATASOUE;Ll;0;L;;;;;N;;;16EB5;;16EB5 +16ED1;BERIA ERFE SMALL LETTER UI;Ll;0;L;;;;;N;;;16EB6;;16EB6 +16ED2;BERIA ERFE SMALL LETTER WASSE;Ll;0;L;;;;;N;;;16EB7;;16EB7 +16ED3;BERIA ERFE SMALL LETTER AY;Ll;0;L;;;;;N;;;16EB8;;16EB8 16F00;MIAO LETTER PA;Lo;0;L;;;;;N;;;;; 16F01;MIAO LETTER BA;Lo;0;L;;;;;N;;;;; 16F02;MIAO LETTER YI PA;Lo;0;L;;;;;N;;;;; @@ -30280,8 +30494,13 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 16FE4;KHITAN SMALL SCRIPT FILLER;Mn;0;NSM;;;;;N;;;;; 16FF0;VIETNAMESE ALTERNATE READING MARK CA;Mc;6;L;;;;;N;;;;; 16FF1;VIETNAMESE ALTERNATE READING MARK NHAY;Mc;6;L;;;;;N;;;;; +16FF2;CHINESE SMALL SIMPLIFIED ER;Lm;0;L;;;;;N;;;;; +16FF3;CHINESE SMALL TRADITIONAL ER;Lm;0;L;;;;;N;;;;; +16FF4;YANGQIN SIGN SLOW ONE BEAT;Nl;0;L;;;;1;N;;;;; +16FF5;YANGQIN SIGN SLOW THREE HALF BEATS;Nl;0;L;;;;3/2;N;;;;; +16FF6;YANGQIN SIGN SLOW TWO BEATS;Nl;0;L;;;;2;N;;;;; 17000;;Lo;0;L;;;;;N;;;;; -187F7;;Lo;0;L;;;;;N;;;;; +187FF;;Lo;0;L;;;;;N;;;;; 18800;TANGUT COMPONENT-001;Lo;0;L;;;;;N;;;;; 18801;TANGUT COMPONENT-002;Lo;0;L;;;;;N;;;;; 18802;TANGUT COMPONENT-003;Lo;0;L;;;;;N;;;;; @@ -31522,7 +31741,122 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 18CD5;KHITAN SMALL SCRIPT CHARACTER-18CD5;Lo;0;L;;;;;N;;;;; 18CFF;KHITAN SMALL SCRIPT CHARACTER-18CFF;Lo;0;L;;;;;N;;;;; 18D00;;Lo;0;L;;;;;N;;;;; -18D08;;Lo;0;L;;;;;N;;;;; +18D1E;;Lo;0;L;;;;;N;;;;; +18D80;TANGUT COMPONENT-769;Lo;0;L;;;;;N;;;;; +18D81;TANGUT COMPONENT-770;Lo;0;L;;;;;N;;;;; +18D82;TANGUT COMPONENT-771;Lo;0;L;;;;;N;;;;; +18D83;TANGUT COMPONENT-772;Lo;0;L;;;;;N;;;;; +18D84;TANGUT COMPONENT-773;Lo;0;L;;;;;N;;;;; +18D85;TANGUT COMPONENT-774;Lo;0;L;;;;;N;;;;; +18D86;TANGUT COMPONENT-775;Lo;0;L;;;;;N;;;;; +18D87;TANGUT COMPONENT-776;Lo;0;L;;;;;N;;;;; +18D88;TANGUT COMPONENT-777;Lo;0;L;;;;;N;;;;; +18D89;TANGUT COMPONENT-778;Lo;0;L;;;;;N;;;;; +18D8A;TANGUT COMPONENT-779;Lo;0;L;;;;;N;;;;; +18D8B;TANGUT COMPONENT-780;Lo;0;L;;;;;N;;;;; +18D8C;TANGUT COMPONENT-781;Lo;0;L;;;;;N;;;;; +18D8D;TANGUT COMPONENT-782;Lo;0;L;;;;;N;;;;; +18D8E;TANGUT COMPONENT-783;Lo;0;L;;;;;N;;;;; +18D8F;TANGUT COMPONENT-784;Lo;0;L;;;;;N;;;;; +18D90;TANGUT COMPONENT-785;Lo;0;L;;;;;N;;;;; +18D91;TANGUT COMPONENT-786;Lo;0;L;;;;;N;;;;; +18D92;TANGUT COMPONENT-787;Lo;0;L;;;;;N;;;;; +18D93;TANGUT COMPONENT-788;Lo;0;L;;;;;N;;;;; +18D94;TANGUT COMPONENT-789;Lo;0;L;;;;;N;;;;; +18D95;TANGUT COMPONENT-790;Lo;0;L;;;;;N;;;;; +18D96;TANGUT COMPONENT-791;Lo;0;L;;;;;N;;;;; +18D97;TANGUT COMPONENT-792;Lo;0;L;;;;;N;;;;; +18D98;TANGUT COMPONENT-793;Lo;0;L;;;;;N;;;;; +18D99;TANGUT COMPONENT-794;Lo;0;L;;;;;N;;;;; +18D9A;TANGUT COMPONENT-795;Lo;0;L;;;;;N;;;;; +18D9B;TANGUT COMPONENT-796;Lo;0;L;;;;;N;;;;; +18D9C;TANGUT COMPONENT-797;Lo;0;L;;;;;N;;;;; +18D9D;TANGUT COMPONENT-798;Lo;0;L;;;;;N;;;;; +18D9E;TANGUT COMPONENT-799;Lo;0;L;;;;;N;;;;; +18D9F;TANGUT COMPONENT-800;Lo;0;L;;;;;N;;;;; +18DA0;TANGUT COMPONENT-801;Lo;0;L;;;;;N;;;;; +18DA1;TANGUT COMPONENT-802;Lo;0;L;;;;;N;;;;; +18DA2;TANGUT COMPONENT-803;Lo;0;L;;;;;N;;;;; +18DA3;TANGUT COMPONENT-804;Lo;0;L;;;;;N;;;;; +18DA4;TANGUT COMPONENT-805;Lo;0;L;;;;;N;;;;; +18DA5;TANGUT COMPONENT-806;Lo;0;L;;;;;N;;;;; +18DA6;TANGUT COMPONENT-807;Lo;0;L;;;;;N;;;;; +18DA7;TANGUT COMPONENT-808;Lo;0;L;;;;;N;;;;; +18DA8;TANGUT COMPONENT-809;Lo;0;L;;;;;N;;;;; +18DA9;TANGUT COMPONENT-810;Lo;0;L;;;;;N;;;;; +18DAA;TANGUT COMPONENT-811;Lo;0;L;;;;;N;;;;; +18DAB;TANGUT COMPONENT-812;Lo;0;L;;;;;N;;;;; +18DAC;TANGUT COMPONENT-813;Lo;0;L;;;;;N;;;;; +18DAD;TANGUT COMPONENT-814;Lo;0;L;;;;;N;;;;; +18DAE;TANGUT COMPONENT-815;Lo;0;L;;;;;N;;;;; +18DAF;TANGUT COMPONENT-816;Lo;0;L;;;;;N;;;;; +18DB0;TANGUT COMPONENT-817;Lo;0;L;;;;;N;;;;; +18DB1;TANGUT COMPONENT-818;Lo;0;L;;;;;N;;;;; +18DB2;TANGUT COMPONENT-819;Lo;0;L;;;;;N;;;;; +18DB3;TANGUT COMPONENT-820;Lo;0;L;;;;;N;;;;; +18DB4;TANGUT COMPONENT-821;Lo;0;L;;;;;N;;;;; +18DB5;TANGUT COMPONENT-822;Lo;0;L;;;;;N;;;;; +18DB6;TANGUT COMPONENT-823;Lo;0;L;;;;;N;;;;; +18DB7;TANGUT COMPONENT-824;Lo;0;L;;;;;N;;;;; +18DB8;TANGUT COMPONENT-825;Lo;0;L;;;;;N;;;;; +18DB9;TANGUT COMPONENT-826;Lo;0;L;;;;;N;;;;; +18DBA;TANGUT COMPONENT-827;Lo;0;L;;;;;N;;;;; +18DBB;TANGUT COMPONENT-828;Lo;0;L;;;;;N;;;;; +18DBC;TANGUT COMPONENT-829;Lo;0;L;;;;;N;;;;; +18DBD;TANGUT COMPONENT-830;Lo;0;L;;;;;N;;;;; +18DBE;TANGUT COMPONENT-831;Lo;0;L;;;;;N;;;;; +18DBF;TANGUT COMPONENT-832;Lo;0;L;;;;;N;;;;; +18DC0;TANGUT COMPONENT-833;Lo;0;L;;;;;N;;;;; +18DC1;TANGUT COMPONENT-834;Lo;0;L;;;;;N;;;;; +18DC2;TANGUT COMPONENT-835;Lo;0;L;;;;;N;;;;; +18DC3;TANGUT COMPONENT-836;Lo;0;L;;;;;N;;;;; +18DC4;TANGUT COMPONENT-837;Lo;0;L;;;;;N;;;;; +18DC5;TANGUT COMPONENT-838;Lo;0;L;;;;;N;;;;; +18DC6;TANGUT COMPONENT-839;Lo;0;L;;;;;N;;;;; +18DC7;TANGUT COMPONENT-840;Lo;0;L;;;;;N;;;;; +18DC8;TANGUT COMPONENT-841;Lo;0;L;;;;;N;;;;; +18DC9;TANGUT COMPONENT-842;Lo;0;L;;;;;N;;;;; +18DCA;TANGUT COMPONENT-843;Lo;0;L;;;;;N;;;;; +18DCB;TANGUT COMPONENT-844;Lo;0;L;;;;;N;;;;; +18DCC;TANGUT COMPONENT-845;Lo;0;L;;;;;N;;;;; +18DCD;TANGUT COMPONENT-846;Lo;0;L;;;;;N;;;;; +18DCE;TANGUT COMPONENT-847;Lo;0;L;;;;;N;;;;; +18DCF;TANGUT COMPONENT-848;Lo;0;L;;;;;N;;;;; +18DD0;TANGUT COMPONENT-849;Lo;0;L;;;;;N;;;;; +18DD1;TANGUT COMPONENT-850;Lo;0;L;;;;;N;;;;; +18DD2;TANGUT COMPONENT-851;Lo;0;L;;;;;N;;;;; +18DD3;TANGUT COMPONENT-852;Lo;0;L;;;;;N;;;;; +18DD4;TANGUT COMPONENT-853;Lo;0;L;;;;;N;;;;; +18DD5;TANGUT COMPONENT-854;Lo;0;L;;;;;N;;;;; +18DD6;TANGUT COMPONENT-855;Lo;0;L;;;;;N;;;;; +18DD7;TANGUT COMPONENT-856;Lo;0;L;;;;;N;;;;; +18DD8;TANGUT COMPONENT-857;Lo;0;L;;;;;N;;;;; +18DD9;TANGUT COMPONENT-858;Lo;0;L;;;;;N;;;;; +18DDA;TANGUT COMPONENT-859;Lo;0;L;;;;;N;;;;; +18DDB;TANGUT COMPONENT-860;Lo;0;L;;;;;N;;;;; +18DDC;TANGUT COMPONENT-861;Lo;0;L;;;;;N;;;;; +18DDD;TANGUT COMPONENT-862;Lo;0;L;;;;;N;;;;; +18DDE;TANGUT COMPONENT-863;Lo;0;L;;;;;N;;;;; +18DDF;TANGUT COMPONENT-864;Lo;0;L;;;;;N;;;;; +18DE0;TANGUT COMPONENT-865;Lo;0;L;;;;;N;;;;; +18DE1;TANGUT COMPONENT-866;Lo;0;L;;;;;N;;;;; +18DE2;TANGUT COMPONENT-867;Lo;0;L;;;;;N;;;;; +18DE3;TANGUT COMPONENT-868;Lo;0;L;;;;;N;;;;; +18DE4;TANGUT COMPONENT-869;Lo;0;L;;;;;N;;;;; +18DE5;TANGUT COMPONENT-870;Lo;0;L;;;;;N;;;;; +18DE6;TANGUT COMPONENT-871;Lo;0;L;;;;;N;;;;; +18DE7;TANGUT COMPONENT-872;Lo;0;L;;;;;N;;;;; +18DE8;TANGUT COMPONENT-873;Lo;0;L;;;;;N;;;;; +18DE9;TANGUT COMPONENT-874;Lo;0;L;;;;;N;;;;; +18DEA;TANGUT COMPONENT-875;Lo;0;L;;;;;N;;;;; +18DEB;TANGUT COMPONENT-876;Lo;0;L;;;;;N;;;;; +18DEC;TANGUT COMPONENT-877;Lo;0;L;;;;;N;;;;; +18DED;TANGUT COMPONENT-878;Lo;0;L;;;;;N;;;;; +18DEE;TANGUT COMPONENT-879;Lo;0;L;;;;;N;;;;; +18DEF;TANGUT COMPONENT-880;Lo;0;L;;;;;N;;;;; +18DF0;TANGUT COMPONENT-881;Lo;0;L;;;;;N;;;;; +18DF1;TANGUT COMPONENT-882;Lo;0;L;;;;;N;;;;; +18DF2;TANGUT COMPONENT-883;Lo;0;L;;;;;N;;;;; 1AFF0;KATAKANA LETTER MINNAN TONE-2;Lm;0;L;;;;;N;;;;; 1AFF1;KATAKANA LETTER MINNAN TONE-3;Lm;0;L;;;;;N;;;;; 1AFF2;KATAKANA LETTER MINNAN TONE-4;Lm;0;L;;;;;N;;;;; @@ -32629,6 +32963,9 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1CCF7;OUTLINED DIGIT SEVEN;Nd;0;EN; 0037;7;7;7;N;;;;; 1CCF8;OUTLINED DIGIT EIGHT;Nd;0;EN; 0038;8;8;8;N;;;;; 1CCF9;OUTLINED DIGIT NINE;Nd;0;EN; 0039;9;9;9;N;;;;; +1CCFA;SNAKE SYMBOL;So;0;ON;;;;;N;;;;; +1CCFB;FLYING SAUCER SYMBOL;So;0;ON;;;;;N;;;;; +1CCFC;NOSE SYMBOL;So;0;ON;;;;;N;;;;; 1CD00;BLOCK OCTANT-3;So;0;ON;;;;;N;;;;; 1CD01;BLOCK OCTANT-23;So;0;ON;;;;;N;;;;; 1CD02;BLOCK OCTANT-123;So;0;ON;;;;;N;;;;; @@ -33065,6 +33402,46 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1CEB1;KEYHOLE;So;0;ON;;;;;N;;;;; 1CEB2;OLD PERSONAL COMPUTER WITH MONITOR IN PORTRAIT ORIENTATION;So;0;ON;;;;;N;;;;; 1CEB3;BLACK RIGHT TRIANGLE CARET;So;0;ON;;;;;N;;;;; +1CEBA;FRAGILE SYMBOL;So;0;ON;;;;;N;;;;; +1CEBB;OFFICE BUILDING SYMBOL;So;0;ON;;;;;N;;;;; +1CEBC;TREE SYMBOL;So;0;ON;;;;;N;;;;; +1CEBD;APPLE SYMBOL;So;0;ON;;;;;N;;;;; +1CEBE;CHERRY SYMBOL;So;0;ON;;;;;N;;;;; +1CEBF;STRAWBERRY SYMBOL;So;0;ON;;;;;N;;;;; +1CEC0;HEBE;So;0;ON;;;;;N;;;;; +1CEC1;IRIS;So;0;ON;;;;;N;;;;; +1CEC2;FLORA;So;0;ON;;;;;N;;;;; +1CEC3;METIS;So;0;ON;;;;;N;;;;; +1CEC4;PARTHENOPE;So;0;ON;;;;;N;;;;; +1CEC5;VICTORIA;So;0;ON;;;;;N;;;;; +1CEC6;EGERIA;So;0;ON;;;;;N;;;;; +1CEC7;IRENE;So;0;ON;;;;;N;;;;; +1CEC8;EUNOMIA;So;0;ON;;;;;N;;;;; +1CEC9;PSYCHE;So;0;ON;;;;;N;;;;; +1CECA;THETIS;So;0;ON;;;;;N;;;;; +1CECB;MELPOMENE;So;0;ON;;;;;N;;;;; +1CECC;FORTUNA;So;0;ON;;;;;N;;;;; +1CECD;ASTRONOMICAL SYMBOL FOR ASTEROID PROSERPINA;So;0;ON;;;;;N;;;;; +1CECE;BELLONA;So;0;ON;;;;;N;;;;; +1CECF;AMPHITRITE;So;0;ON;;;;;N;;;;; +1CED0;LEUKOTHEA;So;0;ON;;;;;N;;;;; +1CEE0;GEOMANTIC FIGURE POPULUS;So;0;ON;;;;;N;;;;; +1CEE1;GEOMANTIC FIGURE TRISTITIA;So;0;ON;;;;;N;;;;; +1CEE2;GEOMANTIC FIGURE ALBUS;So;0;ON;;;;;N;;;;; +1CEE3;GEOMANTIC FIGURE FORTUNA MAJOR;So;0;ON;;;;;N;;;;; +1CEE4;GEOMANTIC FIGURE RUBEUS;So;0;ON;;;;;N;;;;; +1CEE5;GEOMANTIC FIGURE ACQUISITIO;So;0;ON;;;;;N;;;;; +1CEE6;GEOMANTIC FIGURE CONJUNCTIO;So;0;ON;;;;;N;;;;; +1CEE7;GEOMANTIC FIGURE CAPUT DRACONIS;So;0;ON;;;;;N;;;;; +1CEE8;GEOMANTIC FIGURE LAETITIA;So;0;ON;;;;;N;;;;; +1CEE9;GEOMANTIC FIGURE CARCER;So;0;ON;;;;;N;;;;; +1CEEA;GEOMANTIC FIGURE AMISSIO;So;0;ON;;;;;N;;;;; +1CEEB;GEOMANTIC FIGURE PUELLA;So;0;ON;;;;;N;;;;; +1CEEC;GEOMANTIC FIGURE FORTUNA MINOR;So;0;ON;;;;;N;;;;; +1CEED;GEOMANTIC FIGURE PUER;So;0;ON;;;;;N;;;;; +1CEEE;GEOMANTIC FIGURE CAUDA DRACONIS;So;0;ON;;;;;N;;;;; +1CEEF;GEOMANTIC FIGURE VIA;So;0;ON;;;;;N;;;;; +1CEF0;MEDIUM SMALL WHITE CIRCLE WITH HORIZONTAL BAR;Sm;0;ON;;;;;N;;;;; 1CF00;ZNAMENNY COMBINING MARK GORAZDO NIZKO S KRYZHEM ON LEFT;Mn;0;NSM;;;;;N;;;;; 1CF01;ZNAMENNY COMBINING MARK NIZKO S KRYZHEM ON LEFT;Mn;0;NSM;;;;;N;;;;; 1CF02;ZNAMENNY COMBINING MARK TSATA ON LEFT;Mn;0;NSM;;;;;N;;;;; @@ -36004,6 +36381,61 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1E5F9;OL ONAL DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 1E5FA;OL ONAL DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 1E5FF;OL ONAL ABBREVIATION SIGN;Po;0;L;;;;;N;;;;; +1E6C0;TAI YO LETTER LOW KO;Lo;0;L;;;;;N;;;;; +1E6C1;TAI YO LETTER HIGH KO;Lo;0;L;;;;;N;;;;; +1E6C2;TAI YO LETTER LOW KHO;Lo;0;L;;;;;N;;;;; +1E6C3;TAI YO LETTER HIGH KHO;Lo;0;L;;;;;N;;;;; +1E6C4;TAI YO LETTER GO;Lo;0;L;;;;;N;;;;; +1E6C5;TAI YO LETTER NGO;Lo;0;L;;;;;N;;;;; +1E6C6;TAI YO LETTER CO;Lo;0;L;;;;;N;;;;; +1E6C7;TAI YO LETTER LOW XO;Lo;0;L;;;;;N;;;;; +1E6C8;TAI YO LETTER HIGH XO;Lo;0;L;;;;;N;;;;; +1E6C9;TAI YO LETTER LOW NYO;Lo;0;L;;;;;N;;;;; +1E6CA;TAI YO LETTER HIGH NYO;Lo;0;L;;;;;N;;;;; +1E6CB;TAI YO LETTER DO;Lo;0;L;;;;;N;;;;; +1E6CC;TAI YO LETTER LOW TO;Lo;0;L;;;;;N;;;;; +1E6CD;TAI YO LETTER HIGH TO;Lo;0;L;;;;;N;;;;; +1E6CE;TAI YO LETTER THO;Lo;0;L;;;;;N;;;;; +1E6CF;TAI YO LETTER NO;Lo;0;L;;;;;N;;;;; +1E6D0;TAI YO LETTER BO;Lo;0;L;;;;;N;;;;; +1E6D1;TAI YO LETTER LOW PO;Lo;0;L;;;;;N;;;;; +1E6D2;TAI YO LETTER HIGH PO;Lo;0;L;;;;;N;;;;; +1E6D3;TAI YO LETTER PHO;Lo;0;L;;;;;N;;;;; +1E6D4;TAI YO LETTER LOW FO;Lo;0;L;;;;;N;;;;; +1E6D5;TAI YO LETTER HIGH FO;Lo;0;L;;;;;N;;;;; +1E6D6;TAI YO LETTER MO;Lo;0;L;;;;;N;;;;; +1E6D7;TAI YO LETTER YO;Lo;0;L;;;;;N;;;;; +1E6D8;TAI YO LETTER LO;Lo;0;L;;;;;N;;;;; +1E6D9;TAI YO LETTER VO;Lo;0;L;;;;;N;;;;; +1E6DA;TAI YO LETTER LOW HO;Lo;0;L;;;;;N;;;;; +1E6DB;TAI YO LETTER HIGH HO;Lo;0;L;;;;;N;;;;; +1E6DC;TAI YO LETTER QO;Lo;0;L;;;;;N;;;;; +1E6DD;TAI YO LETTER LOW KVO;Lo;0;L;;;;;N;;;;; +1E6DE;TAI YO LETTER HIGH KVO;Lo;0;L;;;;;N;;;;; +1E6E0;TAI YO LETTER AA;Lo;0;L;;;;;N;;;;; +1E6E1;TAI YO LETTER I;Lo;0;L;;;;;N;;;;; +1E6E2;TAI YO LETTER UE;Lo;0;L;;;;;N;;;;; +1E6E3;TAI YO SIGN UE;Mn;230;NSM;;;;;N;;;;; +1E6E4;TAI YO LETTER U;Lo;0;L;;;;;N;;;;; +1E6E5;TAI YO LETTER AE;Lo;0;L;;;;;N;;;;; +1E6E6;TAI YO SIGN AU;Mn;230;NSM;;;;;N;;;;; +1E6E7;TAI YO LETTER O;Lo;0;L;;;;;N;;;;; +1E6E8;TAI YO LETTER E;Lo;0;L;;;;;N;;;;; +1E6E9;TAI YO LETTER IA;Lo;0;L;;;;;N;;;;; +1E6EA;TAI YO LETTER UEA;Lo;0;L;;;;;N;;;;; +1E6EB;TAI YO LETTER UA;Lo;0;L;;;;;N;;;;; +1E6EC;TAI YO LETTER OO;Lo;0;L;;;;;N;;;;; +1E6ED;TAI YO LETTER AUE;Lo;0;L;;;;;N;;;;; +1E6EE;TAI YO SIGN AY;Mn;230;NSM;;;;;N;;;;; +1E6EF;TAI YO SIGN ANG;Mn;230;NSM;;;;;N;;;;; +1E6F0;TAI YO LETTER AN;Lo;0;L;;;;;N;;;;; +1E6F1;TAI YO LETTER AM;Lo;0;L;;;;;N;;;;; +1E6F2;TAI YO LETTER AK;Lo;0;L;;;;;N;;;;; +1E6F3;TAI YO LETTER AT;Lo;0;L;;;;;N;;;;; +1E6F4;TAI YO LETTER AP;Lo;0;L;;;;;N;;;;; +1E6F5;TAI YO SIGN OM;Mn;230;NSM;;;;;N;;;;; +1E6FE;TAI YO SYMBOL MUEANG;Lo;0;L;;;;;N;;;;; +1E6FF;TAI YO XAM LAI;Lm;0;L;;;;;N;;;;; 1E7E0;ETHIOPIC SYLLABLE HHYA;Lo;0;L;;;;;N;;;;; 1E7E1;ETHIOPIC SYLLABLE HHYU;Lo;0;L;;;;;N;;;;; 1E7E2;ETHIOPIC SYLLABLE HHYI;Lo;0;L;;;;;N;;;;; @@ -38079,6 +38511,7 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1F6D5;HINDU TEMPLE;So;0;ON;;;;;N;;;;; 1F6D6;HUT;So;0;ON;;;;;N;;;;; 1F6D7;ELEVATOR;So;0;ON;;;;;N;;;;; +1F6D8;LANDSLIDE;So;0;ON;;;;;N;;;;; 1F6DC;WIRELESS;So;0;ON;;;;;N;;;;; 1F6DD;PLAYGROUND SLIDE;So;0;ON;;;;;N;;;;; 1F6DE;WHEEL;So;0;ON;;;;;N;;;;; @@ -38228,6 +38661,10 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1F774;LOT OF FORTUNE;So;0;ON;;;;;N;;;;; 1F775;OCCULTATION;So;0;ON;;;;;N;;;;; 1F776;LUNAR ECLIPSE;So;0;ON;;;;;N;;;;; +1F777;VESTA FORM TWO;So;0;ON;;;;;N;;;;; +1F778;ASTRAEA FORM TWO;So;0;ON;;;;;N;;;;; +1F779;HYGIEA FORM TWO;So;0;ON;;;;;N;;;;; +1F77A;PARTHENOPE FORM TWO;So;0;ON;;;;;N;;;;; 1F77B;HAUMEA;So;0;ON;;;;;N;;;;; 1F77C;MAKEMAKE;So;0;ON;;;;;N;;;;; 1F77D;GONGGONG;So;0;ON;;;;;N;;;;; @@ -38498,6 +38935,15 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1F8BB;SOUTH WEST ARROW FROM BAR;So;0;ON;;;;;N;;;;; 1F8C0;LEFTWARDS ARROW FROM DOWNWARDS ARROW;So;0;ON;;;;;N;;;;; 1F8C1;RIGHTWARDS ARROW FROM DOWNWARDS ARROW;So;0;ON;;;;;N;;;;; +1F8D0;LONG RIGHTWARDS ARROW OVER LONG LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;; +1F8D1;LONG RIGHTWARDS HARPOON OVER LONG LEFTWARDS HARPOON;Sm;0;ON;;;;;N;;;;; +1F8D2;LONG RIGHTWARDS HARPOON ABOVE SHORT LEFTWARDS HARPOON;Sm;0;ON;;;;;N;;;;; +1F8D3;SHORT RIGHTWARDS HARPOON ABOVE LONG LEFTWARDS HARPOON;Sm;0;ON;;;;;N;;;;; +1F8D4;LONG LEFTWARDS HARPOON ABOVE SHORT RIGHTWARDS HARPOON;Sm;0;ON;;;;;N;;;;; +1F8D5;SHORT LEFTWARDS HARPOON ABOVE LONG RIGHTWARDS HARPOON;Sm;0;ON;;;;;N;;;;; +1F8D6;LONG RIGHTWARDS ARROW THROUGH X;Sm;0;ON;;;;;N;;;;; +1F8D7;LONG RIGHTWARDS ARROW WITH DOUBLE SLASH;Sm;0;ON;;;;;N;;;;; +1F8D8;LONG LEFT RIGHT ARROW WITH DEPENDENT LOBE;Sm;0;ON;;;;;N;;;;; 1F900;CIRCLED CROSS FORMEE WITH FOUR DOTS;So;0;ON;;;;;N;;;;; 1F901;CIRCLED CROSS FORMEE WITH TWO DOTS;So;0;ON;;;;;N;;;;; 1F902;CIRCLED CROSS FORMEE;So;0;ON;;;;;N;;;;; @@ -38838,6 +39284,10 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1FA51;BLACK CHESS KNIGHT-QUEEN;So;0;ON;;;;;N;;;;; 1FA52;BLACK CHESS KNIGHT-ROOK;So;0;ON;;;;;N;;;;; 1FA53;BLACK CHESS KNIGHT-BISHOP;So;0;ON;;;;;N;;;;; +1FA54;WHITE CHESS FERZ;So;0;ON;;;;;N;;;;; +1FA55;WHITE CHESS ALFIL;So;0;ON;;;;;N;;;;; +1FA56;BLACK CHESS FERZ;So;0;ON;;;;;N;;;;; +1FA57;BLACK CHESS ALFIL;So;0;ON;;;;;N;;;;; 1FA60;XIANGQI RED GENERAL;So;0;ON;;;;;N;;;;; 1FA61;XIANGQI RED MANDARIN;So;0;ON;;;;;N;;;;; 1FA62;XIANGQI RED ELEPHANT;So;0;ON;;;;;N;;;;; @@ -38875,6 +39325,8 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1FA87;MARACAS;So;0;ON;;;;;N;;;;; 1FA88;FLUTE;So;0;ON;;;;;N;;;;; 1FA89;HARP;So;0;ON;;;;;N;;;;; +1FA8A;TROMBONE;So;0;ON;;;;;N;;;;; +1FA8E;TREASURE CHEST;So;0;ON;;;;;N;;;;; 1FA8F;SHOVEL;So;0;ON;;;;;N;;;;; 1FA90;RINGED PLANET;So;0;ON;;;;;N;;;;; 1FA91;CHAIR;So;0;ON;;;;;N;;;;; @@ -38931,6 +39383,8 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1FAC4;PREGNANT PERSON;So;0;ON;;;;;N;;;;; 1FAC5;PERSON WITH CROWN;So;0;ON;;;;;N;;;;; 1FAC6;FINGERPRINT;So;0;ON;;;;;N;;;;; +1FAC8;HAIRY CREATURE;So;0;ON;;;;;N;;;;; +1FACD;ORCA;So;0;ON;;;;;N;;;;; 1FACE;MOOSE;So;0;ON;;;;;N;;;;; 1FACF;DONKEY;So;0;ON;;;;;N;;;;; 1FAD0;BLUEBERRIES;So;0;ON;;;;;N;;;;; @@ -38957,6 +39411,8 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1FAE7;BUBBLES;So;0;ON;;;;;N;;;;; 1FAE8;SHAKING FACE;So;0;ON;;;;;N;;;;; 1FAE9;FACE WITH BAGS UNDER EYES;So;0;ON;;;;;N;;;;; +1FAEA;DISTORTED FACE;So;0;ON;;;;;N;;;;; +1FAEF;FIGHT CLOUD;So;0;ON;;;;;N;;;;; 1FAF0;HAND WITH INDEX FINGER AND THUMB CROSSED;So;0;ON;;;;;N;;;;; 1FAF1;RIGHTWARDS HAND;So;0;ON;;;;;N;;;;; 1FAF2;LEFTWARDS HAND;So;0;ON;;;;;N;;;;; @@ -39215,14 +39671,15 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1FBF7;SEGMENTED DIGIT SEVEN;Nd;0;EN; 0037;7;7;7;N;;;;; 1FBF8;SEGMENTED DIGIT EIGHT;Nd;0;EN; 0038;8;8;8;N;;;;; 1FBF9;SEGMENTED DIGIT NINE;Nd;0;EN; 0039;9;9;9;N;;;;; +1FBFA;ALARM BELL SYMBOL;So;0;ON;;;;;N;;;;; 20000;;Lo;0;L;;;;;N;;;;; 2A6DF;;Lo;0;L;;;;;N;;;;; 2A700;;Lo;0;L;;;;;N;;;;; -2B739;;Lo;0;L;;;;;N;;;;; +2B73F;;Lo;0;L;;;;;N;;;;; 2B740;;Lo;0;L;;;;;N;;;;; 2B81D;;Lo;0;L;;;;;N;;;;; 2B820;;Lo;0;L;;;;;N;;;;; -2CEA1;;Lo;0;L;;;;;N;;;;; +2CEAD;;Lo;0;L;;;;;N;;;;; 2CEB0;;Lo;0;L;;;;;N;;;;; 2EBE0;;Lo;0;L;;;;;N;;;;; 2EBF0;;Lo;0;L;;;;;N;;;;; @@ -39773,6 +40230,8 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 3134A;;Lo;0;L;;;;;N;;;;; 31350;;Lo;0;L;;;;;N;;;;; 323AF;;Lo;0;L;;;;;N;;;;; +323B0;;Lo;0;L;;;;;N;;;;; +33479;;Lo;0;L;;;;;N;;;;; E0001;LANGUAGE TAG;Cf;0;BN;;;;;N;;;;; E0020;TAG SPACE;Cf;0;BN;;;;;N;;;;; E0021;TAG EXCLAMATION MARK;Cf;0;BN;;;;;N;;;;; diff --git a/contrib/unicode/emoji-data.txt b/contrib/unicode/emoji-data.txt index ff99028248b5..450252c4df3f 100644 --- a/contrib/unicode/emoji-data.txt +++ b/contrib/unicode/emoji-data.txt @@ -1,11 +1,11 @@ # emoji-data.txt -# Date: 2024-05-01, 21:25:24 GMT -# © 2024 Unicode®, Inc. +# Date: 2025-07-25, 17:54:31 GMT +# © 2025 Unicode®, Inc. # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. # For terms of use and license, see https://www.unicode.org/terms_of_use.html # # Emoji Data for UTS #51 -# Used with Emoji Version 16.0 and subsequent minor revisions (if any) +# Version: 17.0 # # For documentation and usage, see https://www.unicode.org/reports/tr51 # @@ -340,6 +340,7 @@ 1F6D1..1F6D2 ; Emoji # E3.0 [2] (🛑..🛒) stop sign..shopping cart 1F6D5 ; Emoji # E12.0 [1] (🛕) hindu temple 1F6D6..1F6D7 ; Emoji # E13.0 [2] (🛖..🛗) hut..elevator +1F6D8 ; Emoji # E17.0 [1] (🛘) landslide 1F6DC ; Emoji # E15.0 [1] (🛜) wireless 1F6DD..1F6DF ; Emoji # E14.0 [3] (🛝..🛟) playground slide..ring buoy 1F6E0..1F6E5 ; Emoji # E0.7 [6] (🛠️..🛥️) hammer and wrench..motor boat @@ -408,6 +409,8 @@ 1FA83..1FA86 ; Emoji # E13.0 [4] (🪃..🪆) boomerang..nesting dolls 1FA87..1FA88 ; Emoji # E15.0 [2] (🪇..🪈) maracas..flute 1FA89 ; Emoji # E16.0 [1] (🪉) harp +1FA8A ; Emoji # E17.0 [1] (🪊) trombone +1FA8E ; Emoji # E17.0 [1] (🪎) treasure chest 1FA8F ; Emoji # E16.0 [1] (🪏) shovel 1FA90..1FA95 ; Emoji # E12.0 [6] (🪐..🪕) ringed planet..banjo 1FA96..1FAA8 ; Emoji # E13.0 [19] (🪖..🪨) military helmet..rock @@ -421,6 +424,8 @@ 1FAC0..1FAC2 ; Emoji # E13.0 [3] (🫀..🫂) anatomical heart..people hugging 1FAC3..1FAC5 ; Emoji # E14.0 [3] (🫃..🫅) pregnant man..person with crown 1FAC6 ; Emoji # E16.0 [1] (🫆) fingerprint +1FAC8 ; Emoji # E17.0 [1] (🫈) hairy creature +1FACD ; Emoji # E17.0 [1] (🫍) orca 1FACE..1FACF ; Emoji # E15.0 [2] (🫎..🫏) moose..donkey 1FAD0..1FAD6 ; Emoji # E13.0 [7] (🫐..🫖) blueberries..teapot 1FAD7..1FAD9 ; Emoji # E14.0 [3] (🫗..🫙) pouring liquid..jar @@ -430,10 +435,12 @@ 1FAE0..1FAE7 ; Emoji # E14.0 [8] (🫠..🫧) melting face..bubbles 1FAE8 ; Emoji # E15.0 [1] (🫨) shaking face 1FAE9 ; Emoji # E16.0 [1] (🫩) face with bags under eyes +1FAEA ; Emoji # E17.0 [1] (🫪) distorted face +1FAEF ; Emoji # E17.0 [1] (🫯) fight cloud 1FAF0..1FAF6 ; Emoji # E14.0 [7] (🫰..🫶) hand with index finger and thumb crossed..heart hands 1FAF7..1FAF8 ; Emoji # E15.0 [2] (🫷..🫸) leftwards pushing hand..rightwards pushing hand -# Total elements: 1431 +# Total elements: 1438 # ================================================ @@ -640,6 +647,7 @@ 1F6D1..1F6D2 ; Emoji_Presentation # E3.0 [2] (🛑..🛒) stop sign..shopping cart 1F6D5 ; Emoji_Presentation # E12.0 [1] (🛕) hindu temple 1F6D6..1F6D7 ; Emoji_Presentation # E13.0 [2] (🛖..🛗) hut..elevator +1F6D8 ; Emoji_Presentation # E17.0 [1] (🛘) landslide 1F6DC ; Emoji_Presentation # E15.0 [1] (🛜) wireless 1F6DD..1F6DF ; Emoji_Presentation # E14.0 [3] (🛝..🛟) playground slide..ring buoy 1F6EB..1F6EC ; Emoji_Presentation # E1.0 [2] (🛫..🛬) airplane departure..airplane arrival @@ -704,6 +712,8 @@ 1FA83..1FA86 ; Emoji_Presentation # E13.0 [4] (🪃..🪆) boomerang..nesting dolls 1FA87..1FA88 ; Emoji_Presentation # E15.0 [2] (🪇..🪈) maracas..flute 1FA89 ; Emoji_Presentation # E16.0 [1] (🪉) harp +1FA8A ; Emoji_Presentation # E17.0 [1] (🪊) trombone +1FA8E ; Emoji_Presentation # E17.0 [1] (🪎) treasure chest 1FA8F ; Emoji_Presentation # E16.0 [1] (🪏) shovel 1FA90..1FA95 ; Emoji_Presentation # E12.0 [6] (🪐..🪕) ringed planet..banjo 1FA96..1FAA8 ; Emoji_Presentation # E13.0 [19] (🪖..🪨) military helmet..rock @@ -717,6 +727,8 @@ 1FAC0..1FAC2 ; Emoji_Presentation # E13.0 [3] (🫀..🫂) anatomical heart..people hugging 1FAC3..1FAC5 ; Emoji_Presentation # E14.0 [3] (🫃..🫅) pregnant man..person with crown 1FAC6 ; Emoji_Presentation # E16.0 [1] (🫆) fingerprint +1FAC8 ; Emoji_Presentation # E17.0 [1] (🫈) hairy creature +1FACD ; Emoji_Presentation # E17.0 [1] (🫍) orca 1FACE..1FACF ; Emoji_Presentation # E15.0 [2] (🫎..🫏) moose..donkey 1FAD0..1FAD6 ; Emoji_Presentation # E13.0 [7] (🫐..🫖) blueberries..teapot 1FAD7..1FAD9 ; Emoji_Presentation # E14.0 [3] (🫗..🫙) pouring liquid..jar @@ -726,10 +738,12 @@ 1FAE0..1FAE7 ; Emoji_Presentation # E14.0 [8] (🫠..🫧) melting face..bubbles 1FAE8 ; Emoji_Presentation # E15.0 [1] (🫨) shaking face 1FAE9 ; Emoji_Presentation # E16.0 [1] (🫩) face with bags under eyes +1FAEA ; Emoji_Presentation # E17.0 [1] (🫪) distorted face +1FAEF ; Emoji_Presentation # E17.0 [1] (🫯) fight cloud 1FAF0..1FAF6 ; Emoji_Presentation # E14.0 [7] (🫰..🫶) hand with index finger and thumb crossed..heart hands 1FAF7..1FAF8 ; Emoji_Presentation # E15.0 [2] (🫷..🫸) leftwards pushing hand..rightwards pushing hand -# Total elements: 1212 +# Total elements: 1219 # ================================================ @@ -827,7 +841,6 @@ E0020..E007F ; Emoji_Component # E0.0 [96] (󠀠..󠁿) tag space..c 21A9..21AA ; Extended_Pictographic# E0.6 [2] (↩️..↪️) right arrow curving left..left arrow curving right 231A..231B ; Extended_Pictographic# E0.6 [2] (⌚..⌛) watch..hourglass done 2328 ; Extended_Pictographic# E1.0 [1] (⌨️) keyboard -2388 ; Extended_Pictographic# E0.0 [1] (⎈) HELM SYMBOL 23CF ; Extended_Pictographic# E1.0 [1] (⏏️) eject button 23E9..23EC ; Extended_Pictographic# E0.6 [4] (⏩..⏬) fast-forward button..fast down button 23ED..23EE ; Extended_Pictographic# E0.7 [2] (⏭️..⏮️) next track button..last track button @@ -844,106 +857,63 @@ E0020..E007F ; Emoji_Component # E0.0 [96] (󠀠..󠁿) tag space..c 2600..2601 ; Extended_Pictographic# E0.6 [2] (☀️..☁️) sun..cloud 2602..2603 ; Extended_Pictographic# E0.7 [2] (☂️..☃️) umbrella..snowman 2604 ; Extended_Pictographic# E1.0 [1] (☄️) comet -2605 ; Extended_Pictographic# E0.0 [1] (★) BLACK STAR -2607..260D ; Extended_Pictographic# E0.0 [7] (☇..☍) LIGHTNING..OPPOSITION 260E ; Extended_Pictographic# E0.6 [1] (☎️) telephone -260F..2610 ; Extended_Pictographic# E0.0 [2] (☏..☐) WHITE TELEPHONE..BALLOT BOX 2611 ; Extended_Pictographic# E0.6 [1] (☑️) check box with check -2612 ; Extended_Pictographic# E0.0 [1] (☒) BALLOT BOX WITH X 2614..2615 ; Extended_Pictographic# E0.6 [2] (☔..☕) umbrella with rain drops..hot beverage -2616..2617 ; Extended_Pictographic# E0.0 [2] (☖..☗) WHITE SHOGI PIECE..BLACK SHOGI PIECE 2618 ; Extended_Pictographic# E1.0 [1] (☘️) shamrock -2619..261C ; Extended_Pictographic# E0.0 [4] (☙..☜) REVERSED ROTATED FLORAL HEART BULLET..WHITE LEFT POINTING INDEX 261D ; Extended_Pictographic# E0.6 [1] (☝️) index pointing up -261E..261F ; Extended_Pictographic# E0.0 [2] (☞..☟) WHITE RIGHT POINTING INDEX..WHITE DOWN POINTING INDEX 2620 ; Extended_Pictographic# E1.0 [1] (☠️) skull and crossbones -2621 ; Extended_Pictographic# E0.0 [1] (☡) CAUTION SIGN 2622..2623 ; Extended_Pictographic# E1.0 [2] (☢️..☣️) radioactive..biohazard -2624..2625 ; Extended_Pictographic# E0.0 [2] (☤..☥) CADUCEUS..ANKH 2626 ; Extended_Pictographic# E1.0 [1] (☦️) orthodox cross -2627..2629 ; Extended_Pictographic# E0.0 [3] (☧..☩) CHI RHO..CROSS OF JERUSALEM 262A ; Extended_Pictographic# E0.7 [1] (☪️) star and crescent -262B..262D ; Extended_Pictographic# E0.0 [3] (☫..☭) FARSI SYMBOL..HAMMER AND SICKLE 262E ; Extended_Pictographic# E1.0 [1] (☮️) peace symbol 262F ; Extended_Pictographic# E0.7 [1] (☯️) yin yang -2630..2637 ; Extended_Pictographic# E0.0 [8] (☰..☷) TRIGRAM FOR HEAVEN..TRIGRAM FOR EARTH 2638..2639 ; Extended_Pictographic# E0.7 [2] (☸️..☹️) wheel of dharma..frowning face 263A ; Extended_Pictographic# E0.6 [1] (☺️) smiling face -263B..263F ; Extended_Pictographic# E0.0 [5] (☻..☿) BLACK SMILING FACE..MERCURY 2640 ; Extended_Pictographic# E4.0 [1] (♀️) female sign -2641 ; Extended_Pictographic# E0.0 [1] (♁) EARTH 2642 ; Extended_Pictographic# E4.0 [1] (♂️) male sign -2643..2647 ; Extended_Pictographic# E0.0 [5] (♃..♇) JUPITER..PLUTO 2648..2653 ; Extended_Pictographic# E0.6 [12] (♈..♓) Aries..Pisces -2654..265E ; Extended_Pictographic# E0.0 [11] (♔..♞) WHITE CHESS KING..BLACK CHESS KNIGHT 265F ; Extended_Pictographic# E11.0 [1] (♟️) chess pawn 2660 ; Extended_Pictographic# E0.6 [1] (♠️) spade suit -2661..2662 ; Extended_Pictographic# E0.0 [2] (♡..♢) WHITE HEART SUIT..WHITE DIAMOND SUIT 2663 ; Extended_Pictographic# E0.6 [1] (♣️) club suit -2664 ; Extended_Pictographic# E0.0 [1] (♤) WHITE SPADE SUIT 2665..2666 ; Extended_Pictographic# E0.6 [2] (♥️..♦️) heart suit..diamond suit -2667 ; Extended_Pictographic# E0.0 [1] (♧) WHITE CLUB SUIT 2668 ; Extended_Pictographic# E0.6 [1] (♨️) hot springs -2669..267A ; Extended_Pictographic# E0.0 [18] (♩..♺) QUARTER NOTE..RECYCLING SYMBOL FOR GENERIC MATERIALS 267B ; Extended_Pictographic# E0.6 [1] (♻️) recycling symbol -267C..267D ; Extended_Pictographic# E0.0 [2] (♼..♽) RECYCLED PAPER SYMBOL..PARTIALLY-RECYCLED PAPER SYMBOL 267E ; Extended_Pictographic# E11.0 [1] (♾️) infinity 267F ; Extended_Pictographic# E0.6 [1] (♿) wheelchair symbol -2680..2685 ; Extended_Pictographic# E0.0 [6] (⚀..⚅) DIE FACE-1..DIE FACE-6 -2690..2691 ; Extended_Pictographic# E0.0 [2] (⚐..⚑) WHITE FLAG..BLACK FLAG 2692 ; Extended_Pictographic# E1.0 [1] (⚒️) hammer and pick 2693 ; Extended_Pictographic# E0.6 [1] (⚓) anchor 2694 ; Extended_Pictographic# E1.0 [1] (⚔️) crossed swords 2695 ; Extended_Pictographic# E4.0 [1] (⚕️) medical symbol 2696..2697 ; Extended_Pictographic# E1.0 [2] (⚖️..⚗️) balance scale..alembic -2698 ; Extended_Pictographic# E0.0 [1] (⚘) FLOWER 2699 ; Extended_Pictographic# E1.0 [1] (⚙️) gear -269A ; Extended_Pictographic# E0.0 [1] (⚚) STAFF OF HERMES 269B..269C ; Extended_Pictographic# E1.0 [2] (⚛️..⚜️) atom symbol..fleur-de-lis -269D..269F ; Extended_Pictographic# E0.0 [3] (⚝..⚟) OUTLINED WHITE STAR..THREE LINES CONVERGING LEFT 26A0..26A1 ; Extended_Pictographic# E0.6 [2] (⚠️..⚡) warning..high voltage -26A2..26A6 ; Extended_Pictographic# E0.0 [5] (⚢..⚦) DOUBLED FEMALE SIGN..MALE WITH STROKE SIGN 26A7 ; Extended_Pictographic# E13.0 [1] (⚧️) transgender symbol -26A8..26A9 ; Extended_Pictographic# E0.0 [2] (⚨..⚩) VERTICAL MALE WITH STROKE SIGN..HORIZONTAL MALE WITH STROKE SIGN 26AA..26AB ; Extended_Pictographic# E0.6 [2] (⚪..⚫) white circle..black circle -26AC..26AF ; Extended_Pictographic# E0.0 [4] (⚬..⚯) MEDIUM SMALL WHITE CIRCLE..UNMARRIED PARTNERSHIP SYMBOL 26B0..26B1 ; Extended_Pictographic# E1.0 [2] (⚰️..⚱️) coffin..funeral urn -26B2..26BC ; Extended_Pictographic# E0.0 [11] (⚲..⚼) NEUTER..SESQUIQUADRATE 26BD..26BE ; Extended_Pictographic# E0.6 [2] (⚽..⚾) soccer ball..baseball -26BF..26C3 ; Extended_Pictographic# E0.0 [5] (⚿..⛃) SQUARED KEY..BLACK DRAUGHTS KING 26C4..26C5 ; Extended_Pictographic# E0.6 [2] (⛄..⛅) snowman without snow..sun behind cloud -26C6..26C7 ; Extended_Pictographic# E0.0 [2] (⛆..⛇) RAIN..BLACK SNOWMAN 26C8 ; Extended_Pictographic# E0.7 [1] (⛈️) cloud with lightning and rain -26C9..26CD ; Extended_Pictographic# E0.0 [5] (⛉..⛍) TURNED WHITE SHOGI PIECE..DISABLED CAR 26CE ; Extended_Pictographic# E0.6 [1] (⛎) Ophiuchus 26CF ; Extended_Pictographic# E0.7 [1] (⛏️) pick -26D0 ; Extended_Pictographic# E0.0 [1] (⛐) CAR SLIDING 26D1 ; Extended_Pictographic# E0.7 [1] (⛑️) rescue worker’s helmet -26D2 ; Extended_Pictographic# E0.0 [1] (⛒) CIRCLED CROSSING LANES 26D3 ; Extended_Pictographic# E0.7 [1] (⛓️) chains 26D4 ; Extended_Pictographic# E0.6 [1] (⛔) no entry -26D5..26E8 ; Extended_Pictographic# E0.0 [20] (⛕..⛨) ALTERNATE ONE-WAY LEFT WAY TRAFFIC..BLACK CROSS ON SHIELD 26E9 ; Extended_Pictographic# E0.7 [1] (⛩️) shinto shrine 26EA ; Extended_Pictographic# E0.6 [1] (⛪) church -26EB..26EF ; Extended_Pictographic# E0.0 [5] (⛫..⛯) CASTLE..MAP SYMBOL FOR LIGHTHOUSE 26F0..26F1 ; Extended_Pictographic# E0.7 [2] (⛰️..⛱️) mountain..umbrella on ground 26F2..26F3 ; Extended_Pictographic# E0.6 [2] (⛲..⛳) fountain..flag in hole 26F4 ; Extended_Pictographic# E0.7 [1] (⛴️) ferry 26F5 ; Extended_Pictographic# E0.6 [1] (⛵) sailboat -26F6 ; Extended_Pictographic# E0.0 [1] (⛶) SQUARE FOUR CORNERS 26F7..26F9 ; Extended_Pictographic# E0.7 [3] (⛷️..⛹️) skier..person bouncing ball 26FA ; Extended_Pictographic# E0.6 [1] (⛺) tent -26FB..26FC ; Extended_Pictographic# E0.0 [2] (⛻..⛼) JAPANESE BANK SYMBOL..HEADSTONE GRAVEYARD SYMBOL 26FD ; Extended_Pictographic# E0.6 [1] (⛽) fuel pump -26FE..2701 ; Extended_Pictographic# E0.0 [4] (⛾..✁) CUP ON BLACK SQUARE..UPPER BLADE SCISSORS 2702 ; Extended_Pictographic# E0.6 [1] (✂️) scissors -2703..2704 ; Extended_Pictographic# E0.0 [2] (✃..✄) LOWER BLADE SCISSORS..WHITE SCISSORS 2705 ; Extended_Pictographic# E0.6 [1] (✅) check mark button 2708..270C ; Extended_Pictographic# E0.6 [5] (✈️..✌️) airplane..victory hand 270D ; Extended_Pictographic# E0.7 [1] (✍️) writing hand -270E ; Extended_Pictographic# E0.0 [1] (✎) LOWER RIGHT PENCIL 270F ; Extended_Pictographic# E0.6 [1] (✏️) pencil -2710..2711 ; Extended_Pictographic# E0.0 [2] (✐..✑) UPPER RIGHT PENCIL..WHITE NIB 2712 ; Extended_Pictographic# E0.6 [1] (✒️) black nib 2714 ; Extended_Pictographic# E0.6 [1] (✔️) check mark 2716 ; Extended_Pictographic# E0.6 [1] (✖️) multiply @@ -959,7 +929,6 @@ E0020..E007F ; Emoji_Component # E0.0 [96] (󠀠..󠁿) tag space..c 2757 ; Extended_Pictographic# E0.6 [1] (❗) red exclamation mark 2763 ; Extended_Pictographic# E1.0 [1] (❣️) heart exclamation 2764 ; Extended_Pictographic# E0.6 [1] (❤️) red heart -2765..2767 ; Extended_Pictographic# E0.0 [3] (❥..❧) ROTATED HEAVY BLACK HEART BULLET..ROTATED FLORAL HEART BULLET 2795..2797 ; Extended_Pictographic# E0.6 [3] (➕..➗) plus..divide 27A1 ; Extended_Pictographic# E0.6 [1] (➡️) right arrow 27B0 ; Extended_Pictographic# E0.6 [1] (➰) curly loop @@ -973,19 +942,19 @@ E0020..E007F ; Emoji_Component # E0.0 [96] (󠀠..󠁿) tag space..c 303D ; Extended_Pictographic# E0.6 [1] (〽️) part alternation mark 3297 ; Extended_Pictographic# E0.6 [1] (㊗️) Japanese “congratulations” button 3299 ; Extended_Pictographic# E0.6 [1] (㊙️) Japanese “secret” button -1F000..1F003 ; Extended_Pictographic# E0.0 [4] (🀀..🀃) MAHJONG TILE EAST WIND..MAHJONG TILE NORTH WIND 1F004 ; Extended_Pictographic# E0.6 [1] (🀄) mahjong red dragon -1F005..1F0CE ; Extended_Pictographic# E0.0 [202] (🀅..🃎) MAHJONG TILE GREEN DRAGON..PLAYING CARD KING OF DIAMONDS +1F02C..1F02F ; Extended_Pictographic# E0.0 [4] (🀬..🀯) .. +1F094..1F09F ; Extended_Pictographic# E0.0 [12] (🂔..🂟) .. +1F0AF..1F0B0 ; Extended_Pictographic# E0.0 [2] (🂯..🂰) .. +1F0C0 ; Extended_Pictographic# E0.0 [1] (🃀) 1F0CF ; Extended_Pictographic# E0.6 [1] (🃏) joker -1F0D0..1F0FF ; Extended_Pictographic# E0.0 [48] (🃐..🃿) .. -1F10D..1F10F ; Extended_Pictographic# E0.0 [3] (🄍..🄏) CIRCLED ZERO WITH SLASH..CIRCLED DOLLAR SIGN WITH OVERLAID BACKSLASH -1F12F ; Extended_Pictographic# E0.0 [1] (🄯) COPYLEFT SYMBOL -1F16C..1F16F ; Extended_Pictographic# E0.0 [4] (🅬..🅯) RAISED MR SIGN..CIRCLED HUMAN FIGURE +1F0D0 ; Extended_Pictographic# E0.0 [1] (🃐) +1F0F6..1F0FF ; Extended_Pictographic# E0.0 [10] (🃶..🃿) .. 1F170..1F171 ; Extended_Pictographic# E0.6 [2] (🅰️..🅱️) A button (blood type)..B button (blood type) 1F17E..1F17F ; Extended_Pictographic# E0.6 [2] (🅾️..🅿️) O button (blood type)..P button 1F18E ; Extended_Pictographic# E0.6 [1] (🆎) AB button (blood type) 1F191..1F19A ; Extended_Pictographic# E0.6 [10] (🆑..🆚) CL button..VS button -1F1AD..1F1E5 ; Extended_Pictographic# E0.0 [57] (🆭..🇥) MASK WORK SYMBOL.. +1F1AE..1F1E5 ; Extended_Pictographic# E0.0 [56] (🆮..🇥) .. 1F201..1F202 ; Extended_Pictographic# E0.6 [2] (🈁..🈂️) Japanese “here” button..Japanese “service charge” button 1F203..1F20F ; Extended_Pictographic# E0.0 [13] (🈃..🈏) .. 1F21A ; Extended_Pictographic# E0.6 [1] (🈚) Japanese “free of charge” button @@ -994,7 +963,8 @@ E0020..E007F ; Emoji_Component # E0.0 [96] (󠀠..󠁿) tag space..c 1F23C..1F23F ; Extended_Pictographic# E0.0 [4] (🈼..🈿) .. 1F249..1F24F ; Extended_Pictographic# E0.0 [7] (🉉..🉏) .. 1F250..1F251 ; Extended_Pictographic# E0.6 [2] (🉐..🉑) Japanese “bargain” button..Japanese “acceptable” button -1F252..1F2FF ; Extended_Pictographic# E0.0 [174] (🉒..🋿) .. +1F252..1F25F ; Extended_Pictographic# E0.0 [14] (🉒..🉟) .. +1F266..1F2FF ; Extended_Pictographic# E0.0 [154] (🉦..🋿) .. 1F300..1F30C ; Extended_Pictographic# E0.6 [13] (🌀..🌌) cyclone..milky way 1F30D..1F30E ; Extended_Pictographic# E0.7 [2] (🌍..🌎) globe showing Europe-Africa..globe showing Americas 1F30F ; Extended_Pictographic# E0.6 [1] (🌏) globe showing Asia-Australia @@ -1010,7 +980,6 @@ E0020..E007F ; Emoji_Component # E0.0 [96] (󠀠..󠁿) tag space..c 1F31D..1F31E ; Extended_Pictographic# E1.0 [2] (🌝..🌞) full moon face..sun with face 1F31F..1F320 ; Extended_Pictographic# E0.6 [2] (🌟..🌠) glowing star..shooting star 1F321 ; Extended_Pictographic# E0.7 [1] (🌡️) thermometer -1F322..1F323 ; Extended_Pictographic# E0.0 [2] (🌢..🌣) BLACK DROPLET..WHITE SUN 1F324..1F32C ; Extended_Pictographic# E0.7 [9] (🌤️..🌬️) sun behind small cloud..wind face 1F32D..1F32F ; Extended_Pictographic# E1.0 [3] (🌭..🌯) hot dog..burrito 1F330..1F331 ; Extended_Pictographic# E0.6 [2] (🌰..🌱) chestnut..seedling @@ -1026,11 +995,8 @@ E0020..E007F ; Emoji_Component # E0.0 [96] (󠀠..󠁿) tag space..c 1F37D ; Extended_Pictographic# E0.7 [1] (🍽️) fork and knife with plate 1F37E..1F37F ; Extended_Pictographic# E1.0 [2] (🍾..🍿) bottle with popping cork..popcorn 1F380..1F393 ; Extended_Pictographic# E0.6 [20] (🎀..🎓) ribbon..graduation cap -1F394..1F395 ; Extended_Pictographic# E0.0 [2] (🎔..🎕) HEART WITH TIP ON THE LEFT..BOUQUET OF FLOWERS 1F396..1F397 ; Extended_Pictographic# E0.7 [2] (🎖️..🎗️) military medal..reminder ribbon -1F398 ; Extended_Pictographic# E0.0 [1] (🎘) MUSICAL KEYBOARD WITH JACKS 1F399..1F39B ; Extended_Pictographic# E0.7 [3] (🎙️..🎛️) studio microphone..control knobs -1F39C..1F39D ; Extended_Pictographic# E0.0 [2] (🎜..🎝) BEAMED ASCENDING MUSICAL NOTES..BEAMED DESCENDING MUSICAL NOTES 1F39E..1F39F ; Extended_Pictographic# E0.7 [2] (🎞️..🎟️) film frames..admission tickets 1F3A0..1F3C4 ; Extended_Pictographic# E0.6 [37] (🎠..🏄) carousel horse..person surfing 1F3C5 ; Extended_Pictographic# E1.0 [1] (🏅) sports medal @@ -1045,11 +1011,9 @@ E0020..E007F ; Emoji_Component # E0.0 [96] (󠀠..󠁿) tag space..c 1F3E0..1F3E3 ; Extended_Pictographic# E0.6 [4] (🏠..🏣) house..Japanese post office 1F3E4 ; Extended_Pictographic# E1.0 [1] (🏤) post office 1F3E5..1F3F0 ; Extended_Pictographic# E0.6 [12] (🏥..🏰) hospital..castle -1F3F1..1F3F2 ; Extended_Pictographic# E0.0 [2] (🏱..🏲) WHITE PENNANT..BLACK PENNANT 1F3F3 ; Extended_Pictographic# E0.7 [1] (🏳️) white flag 1F3F4 ; Extended_Pictographic# E1.0 [1] (🏴) black flag 1F3F5 ; Extended_Pictographic# E0.7 [1] (🏵️) rosette -1F3F6 ; Extended_Pictographic# E0.0 [1] (🏶) BLACK ROSETTE 1F3F7 ; Extended_Pictographic# E0.7 [1] (🏷️) label 1F3F8..1F3FA ; Extended_Pictographic# E1.0 [3] (🏸..🏺) badminton..amphora 1F400..1F407 ; Extended_Pictographic# E1.0 [8] (🐀..🐇) rat..rabbit @@ -1086,7 +1050,6 @@ E0020..E007F ; Emoji_Component # E0.0 [96] (󠀠..󠁿) tag space..c 1F4F8 ; Extended_Pictographic# E1.0 [1] (📸) camera with flash 1F4F9..1F4FC ; Extended_Pictographic# E0.6 [4] (📹..📼) video camera..videocassette 1F4FD ; Extended_Pictographic# E0.7 [1] (📽️) film projector -1F4FE ; Extended_Pictographic# E0.0 [1] (📾) PORTABLE STEREO 1F4FF..1F502 ; Extended_Pictographic# E1.0 [4] (📿..🔂) prayer beads..repeat single button 1F503 ; Extended_Pictographic# E0.6 [1] (🔃) clockwise vertical arrows 1F504..1F507 ; Extended_Pictographic# E1.0 [4] (🔄..🔇) counterclockwise arrows button..muted speaker @@ -1097,51 +1060,30 @@ E0020..E007F ; Emoji_Component # E0.0 [96] (󠀠..󠁿) tag space..c 1F516..1F52B ; Extended_Pictographic# E0.6 [22] (🔖..🔫) bookmark..water pistol 1F52C..1F52D ; Extended_Pictographic# E1.0 [2] (🔬..🔭) microscope..telescope 1F52E..1F53D ; Extended_Pictographic# E0.6 [16] (🔮..🔽) crystal ball..downwards button -1F546..1F548 ; Extended_Pictographic# E0.0 [3] (🕆..🕈) WHITE LATIN CROSS..CELTIC CROSS 1F549..1F54A ; Extended_Pictographic# E0.7 [2] (🕉️..🕊️) om..dove 1F54B..1F54E ; Extended_Pictographic# E1.0 [4] (🕋..🕎) kaaba..menorah -1F54F ; Extended_Pictographic# E0.0 [1] (🕏) BOWL OF HYGIEIA 1F550..1F55B ; Extended_Pictographic# E0.6 [12] (🕐..🕛) one o’clock..twelve o’clock 1F55C..1F567 ; Extended_Pictographic# E0.7 [12] (🕜..🕧) one-thirty..twelve-thirty -1F568..1F56E ; Extended_Pictographic# E0.0 [7] (🕨..🕮) RIGHT SPEAKER..BOOK 1F56F..1F570 ; Extended_Pictographic# E0.7 [2] (🕯️..🕰️) candle..mantelpiece clock -1F571..1F572 ; Extended_Pictographic# E0.0 [2] (🕱..🕲) BLACK SKULL AND CROSSBONES..NO PIRACY 1F573..1F579 ; Extended_Pictographic# E0.7 [7] (🕳️..🕹️) hole..joystick 1F57A ; Extended_Pictographic# E3.0 [1] (🕺) man dancing -1F57B..1F586 ; Extended_Pictographic# E0.0 [12] (🕻..🖆) LEFT HAND TELEPHONE RECEIVER..PEN OVER STAMPED ENVELOPE 1F587 ; Extended_Pictographic# E0.7 [1] (🖇️) linked paperclips -1F588..1F589 ; Extended_Pictographic# E0.0 [2] (🖈..🖉) BLACK PUSHPIN..LOWER LEFT PENCIL 1F58A..1F58D ; Extended_Pictographic# E0.7 [4] (🖊️..🖍️) pen..crayon -1F58E..1F58F ; Extended_Pictographic# E0.0 [2] (🖎..🖏) LEFT WRITING HAND..TURNED OK HAND SIGN 1F590 ; Extended_Pictographic# E0.7 [1] (🖐️) hand with fingers splayed -1F591..1F594 ; Extended_Pictographic# E0.0 [4] (🖑..🖔) REVERSED RAISED HAND WITH FINGERS SPLAYED..REVERSED VICTORY HAND 1F595..1F596 ; Extended_Pictographic# E1.0 [2] (🖕..🖖) middle finger..vulcan salute -1F597..1F5A3 ; Extended_Pictographic# E0.0 [13] (🖗..🖣) WHITE DOWN POINTING LEFT HAND INDEX..BLACK DOWN POINTING BACKHAND INDEX 1F5A4 ; Extended_Pictographic# E3.0 [1] (🖤) black heart 1F5A5 ; Extended_Pictographic# E0.7 [1] (🖥️) desktop computer -1F5A6..1F5A7 ; Extended_Pictographic# E0.0 [2] (🖦..🖧) KEYBOARD AND MOUSE..THREE NETWORKED COMPUTERS 1F5A8 ; Extended_Pictographic# E0.7 [1] (🖨️) printer -1F5A9..1F5B0 ; Extended_Pictographic# E0.0 [8] (🖩..🖰) POCKET CALCULATOR..TWO BUTTON MOUSE 1F5B1..1F5B2 ; Extended_Pictographic# E0.7 [2] (🖱️..🖲️) computer mouse..trackball -1F5B3..1F5BB ; Extended_Pictographic# E0.0 [9] (🖳..🖻) OLD PERSONAL COMPUTER..DOCUMENT WITH PICTURE 1F5BC ; Extended_Pictographic# E0.7 [1] (🖼️) framed picture -1F5BD..1F5C1 ; Extended_Pictographic# E0.0 [5] (🖽..🗁) FRAME WITH TILES..OPEN FOLDER 1F5C2..1F5C4 ; Extended_Pictographic# E0.7 [3] (🗂️..🗄️) card index dividers..file cabinet -1F5C5..1F5D0 ; Extended_Pictographic# E0.0 [12] (🗅..🗐) EMPTY NOTE..PAGES 1F5D1..1F5D3 ; Extended_Pictographic# E0.7 [3] (🗑️..🗓️) wastebasket..spiral calendar -1F5D4..1F5DB ; Extended_Pictographic# E0.0 [8] (🗔..🗛) DESKTOP WINDOW..DECREASE FONT SIZE SYMBOL 1F5DC..1F5DE ; Extended_Pictographic# E0.7 [3] (🗜️..🗞️) clamp..rolled-up newspaper -1F5DF..1F5E0 ; Extended_Pictographic# E0.0 [2] (🗟..🗠) PAGE WITH CIRCLED TEXT..STOCK CHART 1F5E1 ; Extended_Pictographic# E0.7 [1] (🗡️) dagger -1F5E2 ; Extended_Pictographic# E0.0 [1] (🗢) LIPS 1F5E3 ; Extended_Pictographic# E0.7 [1] (🗣️) speaking head -1F5E4..1F5E7 ; Extended_Pictographic# E0.0 [4] (🗤..🗧) THREE RAYS ABOVE..THREE RAYS RIGHT 1F5E8 ; Extended_Pictographic# E2.0 [1] (🗨️) left speech bubble -1F5E9..1F5EE ; Extended_Pictographic# E0.0 [6] (🗩..🗮) RIGHT SPEECH BUBBLE..LEFT ANGER BUBBLE 1F5EF ; Extended_Pictographic# E0.7 [1] (🗯️) right anger bubble -1F5F0..1F5F2 ; Extended_Pictographic# E0.0 [3] (🗰..🗲) MOOD BUBBLE..LIGHTNING MOOD 1F5F3 ; Extended_Pictographic# E0.7 [1] (🗳️) ballot box with ballot -1F5F4..1F5F9 ; Extended_Pictographic# E0.0 [6] (🗴..🗹) BALLOT SCRIPT X..BALLOT BOX WITH BOLD CHECK 1F5FA ; Extended_Pictographic# E0.7 [1] (🗺️) world map 1F5FB..1F5FF ; Extended_Pictographic# E0.6 [5] (🗻..🗿) mount fuji..moai 1F600 ; Extended_Pictographic# E1.0 [1] (😀) grinning face @@ -1210,26 +1152,22 @@ E0020..E007F ; Emoji_Component # E0.0 [96] (󠀠..󠁿) tag space..c 1F6BF ; Extended_Pictographic# E1.0 [1] (🚿) shower 1F6C0 ; Extended_Pictographic# E0.6 [1] (🛀) person taking bath 1F6C1..1F6C5 ; Extended_Pictographic# E1.0 [5] (🛁..🛅) bathtub..left luggage -1F6C6..1F6CA ; Extended_Pictographic# E0.0 [5] (🛆..🛊) TRIANGLE WITH ROUNDED CORNERS..GIRLS SYMBOL 1F6CB ; Extended_Pictographic# E0.7 [1] (🛋️) couch and lamp 1F6CC ; Extended_Pictographic# E1.0 [1] (🛌) person in bed 1F6CD..1F6CF ; Extended_Pictographic# E0.7 [3] (🛍️..🛏️) shopping bags..bed 1F6D0 ; Extended_Pictographic# E1.0 [1] (🛐) place of worship 1F6D1..1F6D2 ; Extended_Pictographic# E3.0 [2] (🛑..🛒) stop sign..shopping cart -1F6D3..1F6D4 ; Extended_Pictographic# E0.0 [2] (🛓..🛔) STUPA..PAGODA 1F6D5 ; Extended_Pictographic# E12.0 [1] (🛕) hindu temple 1F6D6..1F6D7 ; Extended_Pictographic# E13.0 [2] (🛖..🛗) hut..elevator -1F6D8..1F6DB ; Extended_Pictographic# E0.0 [4] (🛘..🛛) .. +1F6D8 ; Extended_Pictographic# E17.0 [1] (🛘) landslide +1F6D9..1F6DB ; Extended_Pictographic# E0.0 [3] (🛙..🛛) .. 1F6DC ; Extended_Pictographic# E15.0 [1] (🛜) wireless 1F6DD..1F6DF ; Extended_Pictographic# E14.0 [3] (🛝..🛟) playground slide..ring buoy 1F6E0..1F6E5 ; Extended_Pictographic# E0.7 [6] (🛠️..🛥️) hammer and wrench..motor boat -1F6E6..1F6E8 ; Extended_Pictographic# E0.0 [3] (🛦..🛨) UP-POINTING MILITARY AIRPLANE..UP-POINTING SMALL AIRPLANE 1F6E9 ; Extended_Pictographic# E0.7 [1] (🛩️) small airplane -1F6EA ; Extended_Pictographic# E0.0 [1] (🛪) NORTHEAST-POINTING AIRPLANE 1F6EB..1F6EC ; Extended_Pictographic# E1.0 [2] (🛫..🛬) airplane departure..airplane arrival 1F6ED..1F6EF ; Extended_Pictographic# E0.0 [3] (🛭..🛯) .. 1F6F0 ; Extended_Pictographic# E0.7 [1] (🛰️) satellite -1F6F1..1F6F2 ; Extended_Pictographic# E0.0 [2] (🛱..🛲) ONCOMING FIRE ENGINE..DIESEL LOCOMOTIVE 1F6F3 ; Extended_Pictographic# E0.7 [1] (🛳️) passenger ship 1F6F4..1F6F6 ; Extended_Pictographic# E3.0 [3] (🛴..🛶) kick scooter..canoe 1F6F7..1F6F8 ; Extended_Pictographic# E5.0 [2] (🛷..🛸) sled..flying saucer @@ -1237,8 +1175,7 @@ E0020..E007F ; Emoji_Component # E0.0 [96] (󠀠..󠁿) tag space..c 1F6FA ; Extended_Pictographic# E12.0 [1] (🛺) auto rickshaw 1F6FB..1F6FC ; Extended_Pictographic# E13.0 [2] (🛻..🛼) pickup truck..roller skate 1F6FD..1F6FF ; Extended_Pictographic# E0.0 [3] (🛽..🛿) .. -1F774..1F77F ; Extended_Pictographic# E0.0 [12] (🝴..🝿) LOT OF FORTUNE..ORCUS -1F7D5..1F7DF ; Extended_Pictographic# E0.0 [11] (🟕..🟟) CIRCLED TRIANGLE.. +1F7DA..1F7DF ; Extended_Pictographic# E0.0 [6] (🟚..🟟) .. 1F7E0..1F7EB ; Extended_Pictographic# E12.0 [12] (🟠..🟫) orange circle..brown square 1F7EC..1F7EF ; Extended_Pictographic# E0.0 [4] (🟬..🟯) .. 1F7F0 ; Extended_Pictographic# E14.0 [1] (🟰) heavy equals sign @@ -1247,7 +1184,10 @@ E0020..E007F ; Emoji_Component # E0.0 [96] (󠀠..󠁿) tag space..c 1F848..1F84F ; Extended_Pictographic# E0.0 [8] (🡈..🡏) .. 1F85A..1F85F ; Extended_Pictographic# E0.0 [6] (🡚..🡟) .. 1F888..1F88F ; Extended_Pictographic# E0.0 [8] (🢈..🢏) .. -1F8AE..1F8FF ; Extended_Pictographic# E0.0 [82] (🢮..🣿) .. +1F8AE..1F8AF ; Extended_Pictographic# E0.0 [2] (🢮..🢯) .. +1F8BC..1F8BF ; Extended_Pictographic# E0.0 [4] (🢼..🢿) .. +1F8C2..1F8CF ; Extended_Pictographic# E0.0 [14] (🣂..🣏) .. +1F8D9..1F8FF ; Extended_Pictographic# E0.0 [39] (🣙..🣿) .. 1F90C ; Extended_Pictographic# E13.0 [1] (🤌) pinched fingers 1F90D..1F90F ; Extended_Pictographic# E12.0 [3] (🤍..🤏) white heart..pinching hand 1F910..1F918 ; Extended_Pictographic# E1.0 [9] (🤐..🤘) zipper-mouth face..sign of the horns @@ -1293,7 +1233,8 @@ E0020..E007F ; Emoji_Component # E0.0 [96] (󠀠..󠁿) tag space..c 1F9CD..1F9CF ; Extended_Pictographic# E12.0 [3] (🧍..🧏) person standing..deaf person 1F9D0..1F9E6 ; Extended_Pictographic# E5.0 [23] (🧐..🧦) face with monocle..socks 1F9E7..1F9FF ; Extended_Pictographic# E11.0 [25] (🧧..🧿) red envelope..nazar amulet -1FA00..1FA6F ; Extended_Pictographic# E0.0 [112] (🨀..🩯) NEUTRAL CHESS KING.. +1FA58..1FA5F ; Extended_Pictographic# E0.0 [8] (🩘..🩟) .. +1FA6E..1FA6F ; Extended_Pictographic# E0.0 [2] (🩮..🩯) .. 1FA70..1FA73 ; Extended_Pictographic# E12.0 [4] (🩰..🩳) ballet shoes..shorts 1FA74 ; Extended_Pictographic# E13.0 [1] (🩴) thong sandal 1FA75..1FA77 ; Extended_Pictographic# E15.0 [3] (🩵..🩷) light blue heart..pink heart @@ -1304,7 +1245,9 @@ E0020..E007F ; Emoji_Component # E0.0 [96] (󠀠..󠁿) tag space..c 1FA83..1FA86 ; Extended_Pictographic# E13.0 [4] (🪃..🪆) boomerang..nesting dolls 1FA87..1FA88 ; Extended_Pictographic# E15.0 [2] (🪇..🪈) maracas..flute 1FA89 ; Extended_Pictographic# E16.0 [1] (🪉) harp -1FA8A..1FA8E ; Extended_Pictographic# E0.0 [5] (🪊..🪎) .. +1FA8A ; Extended_Pictographic# E17.0 [1] (🪊) trombone +1FA8B..1FA8D ; Extended_Pictographic# E0.0 [3] (🪋..🪍) .. +1FA8E ; Extended_Pictographic# E17.0 [1] (🪎) treasure chest 1FA8F ; Extended_Pictographic# E16.0 [1] (🪏) shovel 1FA90..1FA95 ; Extended_Pictographic# E12.0 [6] (🪐..🪕) ringed planet..banjo 1FA96..1FAA8 ; Extended_Pictographic# E13.0 [19] (🪖..🪨) military helmet..rock @@ -1318,7 +1261,10 @@ E0020..E007F ; Emoji_Component # E0.0 [96] (󠀠..󠁿) tag space..c 1FAC0..1FAC2 ; Extended_Pictographic# E13.0 [3] (🫀..🫂) anatomical heart..people hugging 1FAC3..1FAC5 ; Extended_Pictographic# E14.0 [3] (🫃..🫅) pregnant man..person with crown 1FAC6 ; Extended_Pictographic# E16.0 [1] (🫆) fingerprint -1FAC7..1FACD ; Extended_Pictographic# E0.0 [7] (🫇..🫍) .. +1FAC7 ; Extended_Pictographic# E0.0 [1] (🫇) +1FAC8 ; Extended_Pictographic# E17.0 [1] (🫈) hairy creature +1FAC9..1FACC ; Extended_Pictographic# E0.0 [4] (🫉..🫌) .. +1FACD ; Extended_Pictographic# E17.0 [1] (🫍) orca 1FACE..1FACF ; Extended_Pictographic# E15.0 [2] (🫎..🫏) moose..donkey 1FAD0..1FAD6 ; Extended_Pictographic# E13.0 [7] (🫐..🫖) blueberries..teapot 1FAD7..1FAD9 ; Extended_Pictographic# E14.0 [3] (🫗..🫙) pouring liquid..jar @@ -1329,12 +1275,14 @@ E0020..E007F ; Emoji_Component # E0.0 [96] (󠀠..󠁿) tag space..c 1FAE0..1FAE7 ; Extended_Pictographic# E14.0 [8] (🫠..🫧) melting face..bubbles 1FAE8 ; Extended_Pictographic# E15.0 [1] (🫨) shaking face 1FAE9 ; Extended_Pictographic# E16.0 [1] (🫩) face with bags under eyes -1FAEA..1FAEF ; Extended_Pictographic# E0.0 [6] (🫪..🫯) .. +1FAEA ; Extended_Pictographic# E17.0 [1] (🫪) distorted face +1FAEB..1FAEE ; Extended_Pictographic# E0.0 [4] (🫫..🫮) .. +1FAEF ; Extended_Pictographic# E17.0 [1] (🫯) fight cloud 1FAF0..1FAF6 ; Extended_Pictographic# E14.0 [7] (🫰..🫶) hand with index finger and thumb crossed..heart hands 1FAF7..1FAF8 ; Extended_Pictographic# E15.0 [2] (🫷..🫸) leftwards pushing hand..rightwards pushing hand 1FAF9..1FAFF ; Extended_Pictographic# E0.0 [7] (🫹..🫿) .. 1FC00..1FFFD ; Extended_Pictographic# E0.0[1022] (🰀..🿽) .. -# Total elements: 3537 +# Total elements: 2848 #EOF diff --git a/contrib/unicode/from_glibc/utf8_gen.py b/contrib/unicode/from_glibc/utf8_gen.py index 59cd9bbfa9d8..2e01fab96586 100755 --- a/contrib/unicode/from_glibc/utf8_gen.py +++ b/contrib/unicode/from_glibc/utf8_gen.py @@ -1,6 +1,7 @@ #!/usr/bin/python3 # -*- coding: utf-8 -*- # Copyright (C) 2014-2025 Free Software Foundation, Inc. +# Copyright The GNU Toolchain Authors. # This file is part of the GNU C Library. # # The GNU C Library is free software; you can redistribute it and/or @@ -10,7 +11,7 @@ # # The GNU C Library 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 +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public @@ -28,7 +29,6 @@ ''' import argparse -import sys import re import unicode_utils @@ -200,30 +200,40 @@ def write_header_charmap(outfile): def write_header_width(outfile, unicode_version): '''Writes the header on top of the WIDTH section to the output file''' - outfile.write('% Character width according to Unicode ' - + '{:s}.\n'.format(unicode_version)) - outfile.write('% - Default width is 1.\n') + outfile.write('% Character width according to Unicode {:s}.\n'.format(unicode_version)) + outfile.write('% Width is determined by the following rules, in order of decreasing precedence:\n') + outfile.write('% - U+00AD SOFT HYPHEN has width 1, as a special case for compatibility (https://archive.is/b5Ck).\n') + outfile.write('% - U+115F HANGUL CHOSEONG FILLER has width 2.\n') + outfile.write('% This character stands in for an intentionally omitted leading consonant\n') + outfile.write('% in a Hangul syllable block; as such it must be assigned width 2 despite its lack\n') + outfile.write('% of visible display to ensure that the complete block has the correct width.\n') + outfile.write('% (See below for more information on Hangul syllables.)\n') + outfile.write('% - Combining jungseong and jongseong Hangul jamo have width 0; generated from\n') + outfile.write('% "grep \'^[^;]*;[VT]\' HangulSyllableType.txt".\n') + outfile.write('% One composed Hangul "syllable block" like 퓛 is made up of\n') + outfile.write('% two to three individual component characters called "jamo".\n') + outfile.write('% The complete block must have total width 2;\n') + outfile.write('% to achieve this, we assign a width of 2 to leading "choseong" jamo,\n') + outfile.write('% and of 0 to medial vowel "jungseong" and trailing "jongseong" jamo.\n') + outfile.write('% - Non-spacing and enclosing marks have width 0; generated from\n') + outfile.write('% "grep -E \'^[^;]*;[^;]*;(Mn|Me);\' UnicodeData.txt".\n') + outfile.write('% - "Default_Ignorable_Code_Point"s have width 0; generated from\n') + outfile.write('% "grep \'^[^;]*;\\s*Default_Ignorable_Code_Point\' DerivedCoreProperties.txt".\n') outfile.write('% - Double-width characters have width 2; generated from\n') - outfile.write('% "grep \'^[^;]*;\\s*[WF]\' EastAsianWidth.txt"\n') - outfile.write('% - Non-spacing characters have width 0; ' - + 'generated from PropList.txt or\n') - outfile.write('% "grep \'^[^;]*;[^;]*;[^;]*;[^;]*;NSM;\' ' - + 'UnicodeData.txt"\n') - outfile.write('% - Format control characters have width 0; ' - + 'generated from\n') - outfile.write("% \"grep '^[^;]*;[^;]*;Cf;' UnicodeData.txt\"\n") -# Not needed covered by Cf -# outfile.write("% - Zero width characters have width 0; generated from\n") -# outfile.write("% \"grep '^[^;]*;ZERO WIDTH ' UnicodeData.txt\"\n") + outfile.write('% "grep \'^[^;]*;[WF]\' EastAsianWidth.txt".\n') + outfile.write('% - Default width for all other characters is 1.\n') outfile.write("WIDTH\n") -def process_width(outfile, ulines, elines, plines): - '''ulines are lines from UnicodeData.txt, elines are lines from - EastAsianWidth.txt containing characters with width “W” or “F”, - plines are lines from PropList.txt which contain characters - with the property “Prepended_Concatenation_Mark”. - +def process_width(outfile, ulines, dlines, elines, klines): + '''ulines are lines from UnicodeData.txt. + elines are lines from EastAsianWidth.txt containing characters with width + “W” or “F”. + dlines are lines from DerivedCoreProperties.txt which contain + characters with the property “Default_Ignorable_Code_Point”. + klines are lines from HangulSyllableType.txt which contain characters + with syllable type “V” or “T”. ''' + # Wide and fullwidth characters have width 1 width_dict = {} for line in elines: fields = line.split(";") @@ -235,14 +245,14 @@ def process_width(outfile, ulines, elines, plines): int(code_points[1], 16)+1): width_dict[key] = 2 + # Nonspacing and enclosing marks have width 0 for line in ulines: fields = line.split(";") - if fields[4] == "NSM" or fields[2] in ("Cf", "Me", "Mn"): + if fields[4] == "NSM" or fields[2] in ("Me", "Mn"): width_dict[int(fields[0], 16)] = 0 - for line in plines: - # Characters with the property “Prepended_Concatenation_Mark” - # should have the width 1: + # Conjoining vowel and trailing jamo have width 0 + for line in klines: fields = line.split(";") if not '..' in fields[0]: code_points = (fields[0], fields[0]) @@ -250,21 +260,26 @@ def process_width(outfile, ulines, elines, plines): code_points = fields[0].split("..") for key in range(int(code_points[0], 16), int(code_points[1], 16)+1): - del width_dict[key] # default width is 1 - - # handle special cases for compatibility - for key in list((0x00AD,)): - # https://www.cs.tut.fi/~jkorpela/shy.html - if key in width_dict: - del width_dict[key] # default width is 1 - for key in list(range(0x1160, 0x1200)): - # Hangul jungseong and jongseong: - if key in unicode_utils.UNICODE_ATTRIBUTES: - width_dict[key] = 0 - for key in list(range(0xD7B0, 0xD800)): - # Hangul jungseong and jongseong: - if key in unicode_utils.UNICODE_ATTRIBUTES: width_dict[key] = 0 + + # “Default_Ignorable_Code_Point”s have width 0 + for line in dlines: + fields = line.split(";") + if not '..' in fields[0]: + code_points = (fields[0], fields[0]) + else: + code_points = fields[0].split("..") + for key in range(int(code_points[0], 16), + int(code_points[1], 16)+1): + width_dict[key] = 0 # default width is 1 + + + # Special case: U+00AD SOFT HYPHEN + del width_dict[0x00AD] + + # Special case: U+115F HANGUL CHOSEONG FILLER + width_dict[0x115F] = 2 + for key in list(range(0x3248, 0x3250)): # These are “A” which means we can decide whether to treat them # as “W” or “N” based on context: @@ -302,7 +317,7 @@ def process_width(outfile, ulines, elines, plines): if __name__ == "__main__": PARSER = argparse.ArgumentParser( description=''' - Generate a UTF-8 file from UnicodeData.txt, EastAsianWidth.txt, and PropList.txt. + Generate a UTF-8 file from UnicodeData.txt, DerivedCoreProperties.txt, EastAsianWidth.txt, and HangulSyllableType.txt ''') PARSER.add_argument( '-u', '--unicode_data_file', @@ -311,6 +326,13 @@ def process_width(outfile, ulines, elines, plines): default='UnicodeData.txt', help=('The UnicodeData.txt file to read, ' + 'default: %(default)s')) + PARSER.add_argument( + '-d', '--derived_core_properties_file', + nargs='?', + type=str, + default='DerivedCoreProperties.txt', + help=('The DerivedCoreProperties.txt file to read, ' + + 'default: %(default)s')) PARSER.add_argument( '-e', '--east_asian_with_file', nargs='?', @@ -319,11 +341,11 @@ def process_width(outfile, ulines, elines, plines): help=('The EastAsianWidth.txt file to read, ' + 'default: %(default)s')) PARSER.add_argument( - '-p', '--prop_list_file', + '-k', '--hangul_syllable_type_file', nargs='?', type=str, - default='PropList.txt', - help=('The PropList.txt file to read, ' + default='HangulSyllableType.txt', + help=('The HangulSyllableType.txt file to read, ' + 'default: %(default)s')) PARSER.add_argument( '--unicode_version', @@ -336,27 +358,35 @@ def process_width(outfile, ulines, elines, plines): unicode_utils.fill_attributes(ARGS.unicode_data_file) with open(ARGS.unicode_data_file, mode='r') as UNIDATA_FILE: UNICODE_DATA_LINES = UNIDATA_FILE.readlines() - with open(ARGS.east_asian_with_file, mode='r') as EAST_ASIAN_WIDTH_FILE: - EAST_ASIAN_WIDTH_LINES = [] - for LINE in EAST_ASIAN_WIDTH_FILE: - # If characters from EastAsianWidth.txt which are from - # reserved ranges (i.e. not yet assigned code points) + with open(ARGS.derived_core_properties_file, mode='r') as DERIVED_CORE_PROPERTIES_FILE: + DERIVED_CORE_PROPERTIES_LINES = [] + for LINE in DERIVED_CORE_PROPERTIES_FILE: + # If characters which are from reserved ranges + # (i.e. not yet assigned code points) # are added to the WIDTH section of the UTF-8 file, then # “make check” produces “Unknown Character” errors for # these code points because such unassigned code points # are not in the CHARMAP section of the UTF-8 file. # - # Therefore, we skip all reserved code points when reading - # the EastAsianWidth.txt file. - if re.match(r'.*\.\..*', LINE): + # Therefore, we skip all reserved code points. + if re.match(r'.*', LINE): + continue + if re.match(r'^[^;]*;\s*Default_Ignorable_Code_Point', LINE): + DERIVED_CORE_PROPERTIES_LINES.append(LINE.strip()) + with open(ARGS.east_asian_with_file, mode='r') as EAST_ASIAN_WIDTH_FILE: + EAST_ASIAN_WIDTH_LINES = [] + for LINE in EAST_ASIAN_WIDTH_FILE: + if re.match(r'.*', LINE): continue if re.match(r'^[^;]*;\s*[WF]', LINE): EAST_ASIAN_WIDTH_LINES.append(LINE.strip()) - with open(ARGS.prop_list_file, mode='r') as PROP_LIST_FILE: - PROP_LIST_LINES = [] - for LINE in PROP_LIST_FILE: - if re.match(r'^[^;]*;[\s]*Prepended_Concatenation_Mark', LINE): - PROP_LIST_LINES.append(LINE.strip()) + with open(ARGS.hangul_syllable_type_file, mode='r') as HANGUL_SYLLABLE_TYPE_FILE: + HANGUL_SYLLABLE_TYPE_LINES = [] + for LINE in HANGUL_SYLLABLE_TYPE_FILE: + if re.match(r'.*', LINE): + continue + if re.match(r'^[^;]*;\s*[VT]', LINE): + HANGUL_SYLLABLE_TYPE_LINES.append(LINE.strip()) with open('UTF-8', mode='w') as OUTFILE: # Processing UnicodeData.txt and write CHARMAP to UTF-8 file write_header_charmap(OUTFILE) @@ -366,6 +396,7 @@ def process_width(outfile, ulines, elines, plines): write_header_width(OUTFILE, ARGS.unicode_version) process_width(OUTFILE, UNICODE_DATA_LINES, + DERIVED_CORE_PROPERTIES_LINES, EAST_ASIAN_WIDTH_LINES, - PROP_LIST_LINES) + HANGUL_SYLLABLE_TYPE_LINES) OUTFILE.write("END WIDTH\n") diff --git a/contrib/unicode/gen_libstdcxx_unicode_data.py b/contrib/unicode/gen_libstdcxx_unicode_data.py index c50884d91dea..f5f3ab282481 100755 --- a/contrib/unicode/gen_libstdcxx_unicode_data.py +++ b/contrib/unicode/gen_libstdcxx_unicode_data.py @@ -23,6 +23,7 @@ # ftp://ftp.unicode.org/Public/UNIDATA/DerivedCoreProperties.txt # ftp://ftp.unicode.org/Public/UNIDATA/auxiliary/GraphemeBreakProperty.txt # ftp://ftp.unicode.org/Public/UNIDATA/emoji/emoji-data.txt +# ftp://ftp.unicode.org/Public/UNIDATA/extracted/DerivedGeneralCategory.txt # Then run this script and save the output to # ../../libstdc++-v3/include/bits/unicode-data.h @@ -148,7 +149,7 @@ def process_code_points(code_points, val): "Cc", "Cf", "Cs", "Co", "Cn", } -# Extract General_Category and detrmine if it should be escaped +# Extract General_Category and determine if it should be escaped # for all code points. for line in open("DerivedGeneralCategory.txt", "r"): # Example lines: diff --git a/contrib/uninclude b/contrib/uninclude index 5612e655a985..f445bfeeb050 100755 --- a/contrib/uninclude +++ b/contrib/uninclude @@ -27,13 +27,14 @@ # Header files whose pathnames contain any of the following patterns # are considered as standard headers: usr/include, g++-include, -# include/g++, include/c++/, gcc-lib//include. +# include/g++, include/c++/, gcc-lib//include, +# lib/gcc//include. gawk ${EXCLUDEPATT+-vexclude="$EXCLUDEPATT"} \ ${INCLUDEPATT+-vinclude="$INCLUDEPATT"} ' BEGIN { skipping = 0; - cppline = "^# [0-9]+ \"[^\"]*/(usr/include|g\\+\\+-include|include/g\\+\\+|include/c\\+\\+/[^/]+|gcc-lib/[^\"]+/include|gcc/include)/([^\"]+)\"( [1-4])*$" + cppline = "^# [0-9]+ \"[^\"]*/(usr/include|g\\+\\+-include|include/g\\+\\+|include/c\\+\\+/[^/]+|gcc-lib/[^\"]+/include|lib/gcc/[^\"]+/include|gcc/include)/([^\"]+)\"( [1-4])*$" } !skipping && $0 ~ cppline && (exclude == "" || $3 !~ exclude) && (include == "" || $3 ~ include) { diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 6a8792ab77cc..19a17a393597 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,2322 @@ +2025-10-08 Antoni Boucher + + * configure: Regenerate. + +2025-10-08 Trevor Gross + + PR target/115054 + * config/i386/i386.cc (function_arg_ms_64, + function_value_ms_64): Pass and return _Float16 in vector + registers on Windows. + +2025-10-08 Richard Biener + + PR tree-optimization/110223 + PR tree-optimization/122128 + * tree-vect-patterns.cc (vect_recog_bool_pattern): Add + compensation for mixed mask/data bitwise operations. + +2025-10-08 Richard Biener + + * tree-vect-patterns.cc (integer_type_for_mask): Only + reject vect_external_defs. + +2025-10-08 Richard Biener + + * doc/tm.texi.in (JIT Language and ABI): Add menu item. + * doc/tm.texi: Re-generate. + +2025-10-08 Richard Biener + + PR tree-optimization/110223 + * tree-vect-patterns.cc (vect_recog_bool_pattern): Fix + mistakes in the store-from-mask bool pattern. Add + required mask conversions. + +2025-10-08 Richard Biener + + PR tree-optimization/105490 + * tree-vect-patterns.cc (build_mask_conversion): Move earlier. + (vect_convert_mask_for_vectype): Likewise. + (vect_recog_bool_pattern): Remove redundant truth type + construction. Add missing possibly required mask conversion. + +2025-10-08 Antoni Boucher + + PR jit/112466 + * Makefile.in (tm_jit_file_list, tm_jit_include_list, TM_JIT_H, + JIT_TARGET_DEF, JIT_TARGET_H, JIT_TARGET_OBJS): New variables. + (tm_jit.h, cs-tm_jit.h, jit/jit-target-hooks-def.h, + s-jit-target-hooks-def-h, default-jit.o): New rules. + (s-tm-texi): Also check timestamp on jit-target.def. + (generated_files): Add TM_JIT_H and jit/jit-target-hooks-def.h. + (build/genhooks.o): Also depend on JIT_TARGET_DEF. + * config.gcc (tm_jit_file, jit_target_objs, target_has_targetjitm): + New variables. + * config/i386/t-i386 (i386-jit.o): New rule. + * configure: Regenerate. + * configure.ac (tm_jit_file_list, tm_jit_include_list, + jit_target_objs): Add substitutes. + * doc/tm.texi: Regenerate. + * doc/tm.texi.in (targetjitm): Document. + (target_has_targetjitm): Document. + * genhooks.cc: Include jit/jit-target.def. + * config/default-jit.cc: New file. + * config/i386/i386-jit.cc: New file. + * config/i386/i386-jit.h: New file. + +2025-10-07 Alfie Richards + + * doc/tm.texi: Regenerate. + * doc/tm.texi.in: Add documentation for TARGET_HAS_FMV_TARGET_ATTRIBUTE. + +2025-10-07 Georg-Johann Lay + + PR target/122187 + * config/avr/avr.cc (avr_out_extr, avr_out_extr_not): + Make a local copy of the passed rtx[] operands. + +2025-10-07 Jonathan Wakely + + * config/i386/i386-features.cc + (general_scalar_chain::vector_const_cost): Fix spelling in + comment. + * ipa-prop.h (enum jump_func_type): Likewise. + * tree-vectorizer.cc (try_vectorize_loop_1): Likewise. + +2025-10-07 Robin Dapp + + PR target/121845 + * config/riscv/riscv-v.cc (shuffle_series_patterns): + Modulo indices for VLA and punt when wrapping for VLS. + +2025-10-07 Raphael Moreira Zinsly + + PR target/122124 + * config/riscv/riscv-v.cc (shuffle_slide_patterns): Check if + the second pivot is in OP1 and improve comments. + +2025-10-07 Andrew Pinski + + PR tree-optimization/121921 + * match.pd (`-(a ptrdiff b)`): Extend for a nop_convert + between the neg and ptrdiff. + +2025-10-07 Andrew Pinski + + PR tree-optimization/122083 + * tree-ssa-phiopt.cc (single_trailing_store_in_bb): Rename to ... + (trailing_store_in_bb): This and take new argument to check for + only store. + (cond_if_else_store_replacement_limited): Update to use + trailing_store_in_bb. + (cond_if_else_store_replacement): Loop until + cond_if_else_store_replacement_limited returns false. + (pass_phiopt::execute): Instead of calling cond_if_else_store_replacement_limited + once, also loop on it. + +2025-10-06 Andrew Pinski + + PR tree-optimization/122155 + * tree-ssa-phiopt.cc (cond_if_else_store_replacement_1): Don't + create a phi if the 2 rhs are the same. + +2025-10-06 Jan Hubicka + + PR middle-end/122122 + * tree-cfgcleanup.cc (tree_forwarder_block_p): Cleanup. + * tree-ssa-dce.cc (propagate_counts): New function. + (eliminate_unnecessary_stmts): Use it. + +2025-10-06 Jan Hubicka + + * params.opt (-param=auto-profile-bbs=): Add missing full stop after + description. + +2025-10-06 Andrew MacLeod + + PR tree-optimization/121206 + * value-range.cc (irange::intersect_bitmask): Always call + set_range_from_bitmask if the bitmask changes. + +2025-10-06 Sam James + + PR rtl-optimization/111619 + * doc/install.texi (Building a native compiler): Discuss STAGE1_CFLAGS. + +2025-10-06 Jennifer Schmitz + + PR target/121599 + * config/aarch64/aarch64-sve-builtins.cc + (function_expander::use_cond_insn): Use add_fixed_operand if + fallback_arg == CONST0_RTX (mode). + +2025-10-06 Richard Biener + + PR tree-optimization/122131 + * tree-vect-data-refs.cc (vect_supportable_dr_alignment): Do + not use re-align loads for gathers. + +2025-10-06 Richard Biener + + PR tree-optimization/122158 + * tree-vect-loop.cc (vect_create_epilog_for_reduction): Handle + bit-precision result. + +2025-10-06 Jakub Jelinek + + PR middle-end/122133 + * stmt.cc (resolve_asm_operand_names): Handle % and 2 letters followed + by open square. + +2025-10-06 Andrew Pinski + + PR tree-optimization/122142 + * generic-match-head.cc: Include gimple-iterator.h + and gimple-fold.h. + * gimple-fold.cc (gimple_fold_builtin_constant_p): Use + fold_before_rtl_expansion_p. + (gimple_fold_builtin_assume_aligned): Likewise. + (gimple_fold_builtin_stdarg): Likewise. + (gimple_fold_call): Likewise. + * gimple-fold.h: Include "tree-pass.h". + (fold_before_rtl_expansion_p): New function. + * match.pd: Use fold_before_rtl_expansion_p + instead of `cfun->curr_properties & PROP_last_full_fold`. + * tree-ssa-forwprop.cc (simplify_builtin_memcmp): Likewise. + (optimize_stack_restore): Likewise. + +2025-10-05 H.J. Lu + + PR target/122150 + * config/i386/i386-expand.cc (setmem_epilogue_gen_val): Duplicate + OP if its size is smaller than MODE size. + +2025-10-05 John David Anglin + + * config/pa/pa.h (FUNCTION_BOUNDARY): Set to 32. + +2025-10-05 Pan Li + + * config/riscv/autovec-opt.md (*widen_waddu_wx_): Add new + pattern to match vwaddu.wx. + +2025-10-05 Pan Li + + * match.pd: Refactor the form 1 of SAT_MUL by keyword for. + +2025-10-04 Andrew Pinski + + PR tree-optimization/122143 + * tree-ssa-forwprop.cc (pass_forwprop::execute): Restrict setting + TODO_update_address_taken only when the statement was a call before fold_stmt. + +2025-10-04 Andrew Pinski + + PR tree-optimization/122153 + * tree-ssa-phiopt.cc (cond_if_else_store_replacement_1): Handle + stores of empty constructors too. + +2025-10-04 Matteo Nicoli + + PR tree-optimization/117760 + * match.pd: Add simplifications that exploit implied values after + logical tests. + +2025-10-04 Jakub Jelinek + + PR tree-optimization/122104 + * tree-ssa-math-opts.cc (maybe_optimize_guarding_check): Call + reset_flow_sensitive_info_in_bb on bb when optimizing out the + guarding condition. + +2025-10-04 Raphael Moreira Zinsly + + PR target/122114 + * config/riscv/riscv.cc + (riscv_allocate_and_probe_stack_space): Change initial_cfa_offset + type. + +2025-10-04 Jeff Law + + PR target/122147 + * config/riscv/predicates.md (move_operand): Only allow a REG as the + operand of a SUBREG. + +2025-10-04 Zhongyao Chen + + PR target/118945 + * config/riscv/riscv.cc (riscv_prefer_agnostic_p): New function. + (riscv_tune_param): Add prefer_agnostic member. + (various tune info structures): Initialize prefer_agnostic. + * config/riscv/riscv-protos.h (riscv_prefer_agnostic_p): Add + prototype. + * config/riscv/riscv-v.cc (get_prefer_tail_policy, + get_prefer_mask_policy): Use riscv_prefer_agnostic_p. + * config/riscv/riscv-vsetvl.cc (vsetvl_info::get_demand_flags): + demand policy for agnostic when prefer_agnostic is true. + +2025-10-04 Jakub Jelinek + + PR c++/114457 + * flag-types.h (enum auto_init_type): Add AUTO_INIT_CXX26. + * tree.h (VACUOUS_INIT_LABEL_P): Define. + * gimplify.cc (is_var_need_auto_init): Renamed to ... + (var_needs_auto_init_p): ... this. Don't return true for + vars with "indeterminate" attribute. Formatting fixes. + (gimplify_decl_expr): Use var_needs_auto_init_p instead of + is_var_need_auto_init. + (emit_warn_switch_unreachable): Remove the flag_auto_var_init + special cases. + (warn_switch_unreachable_and_auto_init_r): Handle them here + by doing just returning NULL. + (last_stmt_in_scope): Don't skip just debug stmts to find + the last stmt in seq, skip for + flag_auto_var_init > AUTO_INIT_UNINITIALIZED also IFN_DEFERRED_INIT + calls. + (collect_fallthrough_labels): For + flag_auto_var_init > AUTO_INIT_UNINITIALIZED ignore + IFN_DEFERRED_INIT calls and GIMPLE_GOTOs to + VACUOUS_INIT_LABEL_P. + (should_warn_for_implicit_fallthrough): For + flag_auto_var_init > AUTO_INIT_UNINITIALIZED also skip over + IFN_DEFERRED_INIT calls. + (expand_FALLTHROUGH_r): Likewise, and handle GIMPLE_GOTOs + to VACUOUS_INIT_LABEL_P. + (gimplify_init_constructor): Use var_needs_auto_init_p instead + of is_var_need_auto_init and for flag_auto_var_init + AUTO_INIT_CXX26 don't call gimple_add_padding_init_for_auto_var. + (gimplify_target_expr): If var_needs_auto_init_p and init has + void type, call gimple_add_init_for_auto_var and for + AUTO_INIT_PATTERN also gimple_add_padding_init_for_auto_var. + * tree-ssa-uninit.cc (maybe_warn_operand): Handle loads from *this + at the start of the function with "clobber *this" attribute on the + PARM_DECL. + * ipa-split.cc (split_function): Remove "clobber *this" attribute + from the first PARM_DECL (if any). + * doc/invoke.texi (ftrivial-auto-var-init=): Adjust documentation. + +2025-10-04 Nathaniel Shead + + PR c++/117658 + * doc/invoke.texi: Document '-Wno-external-tu-local'. + +2025-10-03 David Malcolm + + Revert: + 2025-10-03 David Malcolm + + * Makefile.in (OBJS-libcommon): Add + custom-sarif-properties/digraphs.o and + custom-sarif-properties/state-graphs.o. Remove + diagnostics/state-graphs.o. + * configure: Regenerate. + * configure.ac: Add custom-sarif-properties to subdir iteration. + * custom-sarif-properties/digraphs.cc: New file. + * custom-sarif-properties/digraphs.h: New file. + * custom-sarif-properties/state-graphs.cc: New file. + * custom-sarif-properties/state-graphs.h: New file. + * diagnostics/diagnostics-selftests.cc + (run_diagnostics_selftests): Drop call of state_graphs_cc_tests. + * diagnostics/diagnostics-selftests.h (state_graphs_cc_tests): + Delete decl. + * diagnostics/digraphs.cc: Include + "custom-sarif-properties/digraphs.h". Move include of + "selftest.h" to within CHECKING_P section. + (using digraph_object): New. + (namespace properties): New. + (diagnostics::digraphs::object::get_attr): Delete. + (diagnostics::digraphs::object::set_attr): Delete. + (diagnostics::digraphs::object::set_json_attr): Delete. + (digraph_object::get_property): New definitions, for various + property types. + (digraph_object::set_property): Likewise. + (digraph_object::maybe_get_property): New. + (digraph_object::get_property_as_tristate): New. + (digraph_object::ensure_property_bag): New. + (digraph::get_graph_kind): New. + (digraph::set_graph_kind): New. + Add include of "custom-sarif-properties/state-graphs.h". + (selftest::test_simple_graph): Rewrite to use json::property + instances rather than string attribute names. + (selftest::test_property_objects): New test. + (selftest::digraphs_cc_tests): Call it. + * diagnostics/digraphs.h: Include "tristate.h". + (object::get_attr): Delete. + (object::set_attr): Delete. + (object::get_property): New decls. + (object::set_property): New decls. + (object::maybe_get_property): New. + (object::get_property_as_tristate): New. + (object::set_json_attr): Delete. + (object::ensure_property_bag): New. + (graph::get_graph_kind): New. + (graph::set_graph_kind): New. + * diagnostics/html-sink.cc + (html_generation_options::html_generation_options): Update for + field renamings. + (html_generation_options::dump): Likewise. + (html_builder::maybe_make_state_diagram): Likewise. + (html_builder::add_graph): Show SARIF and .dot src inline, if + requested. + * diagnostics/html-sink.h + (html_generation_options::m_show_state_diagrams_sarif): Rename + to... + (html_generation_options::m_show_graph_sarif): ...this. + (html_generation_options::m_show_state_diagrams_dot_src): Rename + to... + (html_generation_options::m_show_graph_dot_src0): ...this. + * diagnostics/output-spec.cc + (html_scheme_handler::maybe_handle_kv): Rename keys. + (html_scheme_handler::get_keys): Likewise. + * diagnostics/state-graphs-to-dot.cc: : Reimplement throughout to + use json::property instances found within custom_sarif_properties + throughout, rather than types in diagnostics::state_graphs. + * diagnostics/state-graphs.cc: Deleted file. + * diagnostics/state-graphs.h: Delete almost all, except decl of + diagnostics::state_graphs::make_dot_graph. + * doc/invoke.texi: Update for changes to "experimental-html" sink + keys. + * json.cc (json::object::set_string): New. + (json::object::set_integer): New. + (json::object::set_bool): New. + (json::object::set_array_of_string): New. + * json.h: Include "label-text.h". + (struct json::property): New template. + (json::string_property): New. + (json::integer_property): New. + (json::bool_property): New. + (json::json_property): New. + (using json::array_of_string_property): New. + (struct json::enum_traits): New. + (enum_json::property): New. + (json::value::dyn_cast_array): New vfunc. + (json::value::dyn_cast_integer_number): New vfunc. + (json::value::set_string): New. + (json::value::set_integer): New. + (json::value::set_bool): New. + (json::value::set_array_of_string): New. + (json::value::maybe_get_enum): New. + (json::value::set_enum): New. + (json::array::dyn_cast_array): New. + (json::integer_number::dyn_cast_integer_number): New. + (object::maybe_get_enum): New. + (object::set_enum): New. + +2025-10-03 Jeff Law + + PR rtl-optimization/121937 + * simplify-rtx.cc (simplify_context::simplify_binary_operation_1): Make + sure we've got a scalar_int_mode before calling neg_poly_int_rtx. + +2025-10-03 Andrew Pinski + + PR tree-optimization/121762 + * passes.def: Remove both pass_fold_builtin. + Swap out pass_copy_prop for pass_forwprop with + full_walk = false and last=true. + * tree-pass.h (make_pass_fold_builtins): Remove. + * tree-ssa-ccp.cc (class pass_fold_builtins): Delete. + (pass_fold_builtins::execute): Delete. + (make_pass_fold_builtins): Remove. + * doc/passes.texi (Folding built-in functions): Remove. + +2025-10-03 Andrew Pinski + + PR tree-optimization/121762 + * gimple-isel.cc (gimple_nop_atomic_bit_test_and_p): New decl. + (gimple_nop_convert): Likewise. + (convert_atomic_bit_not): Moved from tree-ssa-ccp.cc. + (optimize_atomic_bit_test_and): Likewise. + (optimize_atomic_op_fetch_cmp_0): Likewise. + (gimple_isel_builtin_call): New function. + (CASE_ATOMIC): Moved from tree-ssa-ccp.cc. + (CASE_ATOMIC_CMP0): Likewise. + (CASE_ATOMIC_BIT_TEST_AND): Likewise. + (pass_gimple_isel::execute): For calls just call gimple_isel_builtin_call. + * tree-ssa-ccp.cc (convert_atomic_bit_not): Move to gimple-isel.cc. + (gimple_nop_atomic_bit_test_and_p): Likewise. + (gimple_nop_convert): Likewise. + (optimize_atomic_bit_test_and): Likewise. + (optimize_atomic_op_fetch_cmp_0): Likewise. + (pass_fold_builtins::execute): Just call fold_stmt for internal + or normal bultin calls. + (CASE_ATOMIC): Move to gimple-isel.cc. + (CASE_ATOMIC_CMP0): Likewise. + (CASE_ATOMIC_BIT_TEST_AND): Likewise. + +2025-10-03 Andrew Pinski + + * tree-ssa-ccp.cc (CASE_ATOMIC): New defined. + (CASE_ATOMIC_CMP0): New define. + (CASE_ATOMIC_BIT_TEST_AND): New defined. + (pass_fold_builtins::execute): Use CASE_ATOMIC, CASE_ATOMIC_CMP0, + and CASE_ATOMIC_BIT_TEST_AND. + +2025-10-03 Andrew Pinski + + PR tree-optimization/121762 + * gimple-fold.cc (gimple_fold_builtin_stdarg): New function, + moved from tree-ssa-ccp.cc (optimize_stdarg_builtin). + (gimple_fold_builtin): Call gimple_fold_builtin_stdarg for + va_start, va_copy and va_end. + * tree-ssa-ccp.cc (optimize_stdarg_builtin): Remove. + (pass_fold_builtins::execute): Remove handling of + va_start, va_copy and va_end. + * tree-ssa-forwprop.cc (pass_forwprop::execute): Update + todos if fold_stmt return true if last forwprop to include + TODO_update_address_taken. + +2025-10-03 Andrew Pinski + + PR tree-optimization/121762 + * tree-ssa-ccp.cc (optimize_unreachable): Move to tree-ssa-forwprop.cc + (pass_fold_builtins::execute): Remove handling of __builtin_unreachable. + * tree-ssa-forwprop.cc (optimize_unreachable): New function from + tree-ssa-ccp.cc. Change argument to bb. Remove check on first statement + being the __builtin_unreachable since it is handled already. + (pass_forwprop::execute): Handle first statement as being __builtin_unreachable + by calling optimize_unreachable. + +2025-10-03 Andrew Pinski + + PR tree-optimization/121762 + * tree-ssa-ccp.cc (optimize_stack_restore): Move to tree-ssa-forwprop.cc. + (pass_fold_builtins::execute): Don't call optimize_stack_restore. + * tree-ssa-forwprop.cc (optimize_stack_restore): New function from + tree-ssa-ccp.cc. Return bool instead of value, use replace_call_with_value + istead of returning integer_zero_node. + (simplify_builtin_call): Call optimize_stack_restore. + +2025-10-03 Andrew Pinski + + PR tree-optimization/122033 + * tree-ssa-ccp.cc (optimize_stack_restore): Rewrite the call check. + Update comment in the front to new rules on calls. + * tree.h (fndecl_builtin_alloc_p): New function. + +2025-10-03 Andrew Pinski + + PR tree-optimization/121762 + * gimple-fold.cc (gimple_fold_call): Remove ASSUME internal function + calls when PROP_last_full_fold is set. + * tree-ssa-ccp.cc (pass_fold_builtins::execute): Handling folding + of all internal functions. + +2025-10-03 Andrew Pinski + + * tree-ssa-ccp.cc (optimize_stdarg_builtin): Mannually create the + gimple statements instead of depending on the gimplifier. + (pass_fold_builtins::execute): Handle updated call to optimize_stdarg_builtin. + +2025-10-03 Andrew Pinski + + * tree-ssa-ccp.cc (optimize_memcmp_eq): Remove. + (pass_fold_builtins::execute): Remove handling of memcmp. + * tree-ssa-forwprop.cc (simplify_builtin_memcmp): Add folding + of memcmp to memcmp_eq for PROP_last_full_fold. + +2025-10-02 David Malcolm + + * Makefile.in (OBJS-libcommon): Add + custom-sarif-properties/digraphs.o and + custom-sarif-properties/state-graphs.o. Remove + diagnostics/state-graphs.o. + * configure: Regenerate. + * configure.ac: Add custom-sarif-properties to subdir iteration. + * custom-sarif-properties/digraphs.cc: New file. + * custom-sarif-properties/digraphs.h: New file. + * custom-sarif-properties/state-graphs.cc: New file. + * custom-sarif-properties/state-graphs.h: New file. + * diagnostics/diagnostics-selftests.cc + (run_diagnostics_selftests): Drop call of state_graphs_cc_tests. + * diagnostics/diagnostics-selftests.h (state_graphs_cc_tests): + Delete decl. + * diagnostics/digraphs.cc: Include + "custom-sarif-properties/digraphs.h". Move include of + "selftest.h" to within CHECKING_P section. + (using digraph_object): New. + (namespace properties): New. + (diagnostics::digraphs::object::get_attr): Delete. + (diagnostics::digraphs::object::set_attr): Delete. + (diagnostics::digraphs::object::set_json_attr): Delete. + (digraph_object::get_property): New definitions, for various + property types. + (digraph_object::set_property): Likewise. + (digraph_object::maybe_get_property): New. + (digraph_object::get_property_as_tristate): New. + (digraph_object::ensure_property_bag): New. + (digraph::get_graph_kind): New. + (digraph::set_graph_kind): New. + Add include of "custom-sarif-properties/state-graphs.h". + (selftest::test_simple_graph): Rewrite to use json::property + instances rather than string attribute names. + (selftest::test_property_objects): New test. + (selftest::digraphs_cc_tests): Call it. + * diagnostics/digraphs.h: Include "tristate.h". + (object::get_attr): Delete. + (object::set_attr): Delete. + (object::get_property): New decls. + (object::set_property): New decls. + (object::maybe_get_property): New. + (object::get_property_as_tristate): New. + (object::set_json_attr): Delete. + (object::ensure_property_bag): New. + (graph::get_graph_kind): New. + (graph::set_graph_kind): New. + * diagnostics/html-sink.cc + (html_generation_options::html_generation_options): Update for + field renamings. + (html_generation_options::dump): Likewise. + (html_builder::maybe_make_state_diagram): Likewise. + (html_builder::add_graph): Show SARIF and .dot src inline, if + requested. + * diagnostics/html-sink.h + (html_generation_options::m_show_state_diagrams_sarif): Rename + to... + (html_generation_options::m_show_graph_sarif): ...this. + (html_generation_options::m_show_state_diagrams_dot_src): Rename + to... + (html_generation_options::m_show_graph_dot_src0): ...this. + * diagnostics/output-spec.cc + (html_scheme_handler::maybe_handle_kv): Rename keys. + (html_scheme_handler::get_keys): Likewise. + * diagnostics/state-graphs-to-dot.cc: : Reimplement throughout to + use json::property instances found within custom_sarif_properties + throughout, rather than types in diagnostics::state_graphs. + * diagnostics/state-graphs.cc: Deleted file. + * diagnostics/state-graphs.h: Delete almost all, except decl of + diagnostics::state_graphs::make_dot_graph. + * doc/invoke.texi: Update for changes to "experimental-html" sink + keys. + * json.cc (json::object::set_string): New. + (json::object::set_integer): New. + (json::object::set_bool): New. + (json::object::set_array_of_string): New. + * json.h: Include "label-text.h". + (struct json::property): New template. + (json::string_property): New. + (json::integer_property): New. + (json::bool_property): New. + (json::json_property): New. + (using json::array_of_string_property): New. + (struct json::enum_traits): New. + (enum_json::property): New. + (json::value::dyn_cast_array): New vfunc. + (json::value::dyn_cast_integer_number): New vfunc. + (json::value::set_string): New. + (json::value::set_integer): New. + (json::value::set_bool): New. + (json::value::set_array_of_string): New. + (json::value::maybe_get_enum): New. + (json::value::set_enum): New. + (json::array::dyn_cast_array): New. + (json::integer_number::dyn_cast_integer_number): New. + (object::maybe_get_enum): New. + (object::set_enum): New. + +2025-10-02 Aurelien Jarno + + PR target/121652 + * config/riscv/riscv.md (round_pattern): special case NaN input + instead of saving/restoring fflags. + +2025-10-02 David Malcolm + + * diagnostics/output-spec.cc: (scheme_handler::parse_bool_value): + Convert to... + (key_handler::parse_bool_value): ...this. + (scheme_handler::parse_enum_value): Convert to... + (key_handler::parse_enum_value): ...this. + (struct text_scheme_handler::decoded_args): Eliminate, moving + fields into class text_scheme_handler. + (text_scheme_handler::text_scheme_handler): Initialize the new + fields. + Add a "dc" param and use it to initialize m_show_color. + (struct sarif_scheme_handler::decoded_args): Eliminate, moving + fields into class sarif_scheme_handler. + (sarif_scheme_handler::sarif_scheme_handler): Initialize the new + fields. + (struct html_scheme_handler::decoded_args): Eliminate, moving + fields into class html_scheme_handler. + (html_scheme_handler::html_scheme_handler): Initialize the new + fields. + (context::report_unknown_key): Get keys from scheme rather than + passing them in. Support client keys. + (context::parse_and_make_sink): Pass dc to output_factory ctor. + (output_factory::output_factory): Pass dc to text_scheme_handler. + (output_factory::get_scheme_handler): Make return non-const. + (output_factory::make_sink): Move key-handling here, rather than + in individual sinks. + (context::handle_kv): New. + (text_scheme_handler::make_sink): Eliminate key decoding. + (text_scheme_handler::decode_kv): Convert to... + (text_scheme_handler::maybe_handle_kv): ...this... + (text_scheme_handler::get_keys): ...and this. + (sarif_scheme_handler::make_sink): Eliminate key decoding. + (sarif_scheme_handler::decode_kv): Convert to... + (sarif_scheme_handler::maybe_handle_kv): ...this... + (sarif_scheme_handler::get_keys): ...and this. + (html_scheme_handler::make_sink): Eliminate key decoding. + (html_scheme_handler::decode_kv): Convert to... + (html_scheme_handler::maybe_handle_kv): ...this... + (html_scheme_handler::get_keys): ...and this. + (struct selftest::parser_test): Add "client_keys" arg, and update + for new param ordering. + (selftest::parser_test::parse_and_make_sink): New. + (selftest::test_output_arg_parsing): Move auto-fixes to caller. + (class selftest::test_key_handler): New. + (selftest::test_client_arg_parsing): New test. + (selftest::output_spec_cc_tests): Call it. + * diagnostics/output-spec.h (class key_handler): New. + (class scheme_handler): Move here from output-spec.cc. + (context::report_unknown_key): Simplify params. + (context::handle_kv): Update params. + (context::context): Add "client_keys" param. + (context::m_client_keys): New field. + (struct dc_spec_context): Update order of params. Add + "client_keys" param. + * libgdiagnostics.cc (spec_context::spec_context): Pass nullptr + for client keys. + * opts-diagnostic.cc (opt_spec_context::opt_spec_context): + Likewise. Update for new param ordering. + +2025-10-02 Richard Biener + + * tree-vect-loop.cc (vectorizable_reduction): Do not allow + mask reductions. + +2025-10-02 Jan Hubicka + H.J. Lu + + * cfghooks.cc (merge_blocks): Fix typo in the previous change. + +2025-10-02 Jeff Law + + PR target/122051 + * config/riscv/predicates.md (pmode_reg_or_uimm5_operand): Implement + directly rather than using vector_length_operand. + +2025-10-02 H.J. Lu + + * aclocal.m4: Regenerated. + * configure: Likewise. + +2025-10-02 Richard Biener + + PR tree-optimization/122079 + * tree-ssa-pre.cc (compute_antic_aux): Re-instantiate + ANTIC_IN value pruning by the old solution. + +2025-10-02 Richard Biener + + PR tree-optimization/122079 + * tree-ssa-pre.cc (prune_clobbered_mems): Do not prune + values when the maximum expression set is involved. + +2025-10-01 Jeff Law + + PR target/122106 + * config/riscv/bitmanip.md (crc expanders): Add predicate for + polynomial argument. Drop unnecessary constraints. + +2025-10-01 Andreas Schwab + + PR target/122066 + * config/m68k/m68k.md (adddi3, subdi3): Strip POST_INC and PRE_DEC + when generating high part of the destination operand. + +2025-10-01 Jan Hubicka + + * auto-profile.cc (afdo_calculate_branch_prob): Improve dump file. + +2025-10-01 Jan Hubicka + + * auto-profile.cc (determine_scale): Break out from ... + (afdo_adjust_guessed_profile): ... here. + (scale_bb_profile): New function. + (afdo_annotate_cfg): Use it. + * params.opt (auto-profile-bbs): New parmaeter. + * doc/invoke.texi (auto-profile-bbs): Document. + +2025-10-01 Jan Hubicka + + * auto-profile.cc (afdo_unscaled_edge_count): New function based on + part of ... + (afdo_set_bb_count): ... this function; use it here. + (afdo_calculate_branch_prob): Try to determine edge counts using + phi args and goto locuses. + +2025-10-01 Jan Hubicka + + * Makefile.in (ALL_FDAS): New variable. + (ALL_HOST_BACKEND_OBJ): Use all.fda instead of cc1plus.fda + (all.fda): New target + +2025-10-01 Jan Hubicka + + * cfghooks.cc (merge_blocks): Choose more reliable or higher BB + count. + +2025-10-01 Jan Hubicka + + * predict.cc (unlikely_executed_stmt_p): Remove redundant check. + (rebuild_frequencies): Also recompute unlikely bbs when profile is + present or consistent. + +2025-10-01 Andrew MacLeod + + PR tree-optimization/120560 + * vr-values.cc (range_from_loop_direction): Use wi::ge_p rather + than wi::gt_p. + +2025-10-01 Richard Biener + + PR tree-optimization/122110 + * tree-vect-loop.cc (vectorizable_reduction): Relax restriction + to mode-precision operations. + +2025-09-30 David Malcolm + + * diagnostics/output-spec.cc (text_scheme_handler::make_sink): Use + the value of the "color" to determine if the sink's printer is + colorized. + +2025-09-30 David Malcolm + + * diagnostics/output-spec.cc: Add comments. Introduce a + "struct decoded_args" within each scheme_handler subclass, + and split out per-scheme key-value parsing from each make_sink + implementation into new per-scheme decode_kv member functions. + +2025-09-30 David Malcolm + + * diagnostics/output-spec.cc: Move class scheme_handler out from + inside class output_factory. + +2025-09-30 David Malcolm + + * diagnostics/output-spec.cc: Rename "parsed_arg" to + "scheme_and_kvs" throughout. Rename "unparsed_arg" to + "unparsed_spec" throughout, and make a member of + output_spec::context rather than passing it around. + * diagnostics/output-spec.h: Likewise. + * libgdiagnostics.cc: Likewise. + * opts-diagnostic.cc: Likewise. + +2025-09-30 Alfie Richards + + * config/aarch64/aarch64.cc (aarch64_functions_b_resolvable_from_a): New + function. + (TARGET_OPTION_FUNCTIONS_B_RESOLVABLE_FROM_A): New define. + * doc/tm.texi: Regenerate. + * doc/tm.texi.in: Add documentation for + TARGET_OPTION_FUNCTIONS_B_RESOLVABLE_FROM_A. + * multiple_target.cc (redirect_to_specific_clone): Add new optimisation + logic. + (ipa_target_clone): Remove check for TARGET_HAS_FMV_TARGET_ATTRIBUTE. + * target.def: Document new hook.. + * attribs.cc: (functions_b_resolvable_from_a) New function. + * attribs.h: (functions_b_resolvable_from_a) New function. + +2025-09-30 Jakub Jelinek + + * auto-profile.h (maybe_hot_afdo_count_p): Fix comment typos, + possiby -> possibly and ture -> true. + * gimplify.cc (build_asan_poison_call_expr): Change "of a for" + to "memory of the" in a comment. + * ipa-devirt.cc (add_type_duplicate): Fix comment typo, + mangles -> mangled. + * auto-profile.cc: Fix comment typo, -fauto-profile-inlinig + -> -fauto-profile-inlining. + (maybe_hot_afdo_count_p): Fix comment typos, possiby -> possibly + and ture -> true. + (function_instance::removed_icall_target): Fix comment typo, + Reutrn -> Return. + (function_instance::in_worklist_): Fix comment typo, Ture -> True. + (function_instance::offline): Fix comment typo, tolevel -> toplevel. + (function_instance::match): Fix comment typo, craeate_gcov -> + create_gcov. + (autofdo_source_profile::offline_external_functions): Fix comment + typos, tolevel -> toplevel and porfile -> profile. + (autofdo_source_profile::get_function_instance_by_inline_stack): Fix + comment typo, chekcing -> checking. + (struct scale): Fix comment typo, scalle -> scale. + * gimple.h (currently_expanding_gimple_stmt): Fix comment typo, + comminucating -> communicating. + * tree.h (canonical_type_used_p): Fix comment typo, ture -> true. + * tree-ssa-alias.cc (types_equal_for_same_type_for_tbaa_p): Likewise. + * ipa-profile.cc (contains_hot_call_p): Likewise. + * cfgexpand.cc (add_scope_conflicts_2): Fix comment typos, + Querry -> Query, referendd -> referenced and Querrying -> Querying. + * ipa-param-manipulation.cc (currently_expanding_gimple_stmt): Fix + comment typo, comminucating -> communicating. + * ipa-prop.cc (ipa_cst_ref_desc::refcount): Fix comment typo, + if -> is. + * tree-if-conv.cc (version_loop_for_if_conversion): Fix comment typos, + porfile -> profile and confistency -> consistency. + * fold-const.cc: Change size_int_wide in comment to size_int as + size_int_wide doesn't exit for 21 years. + +2025-09-30 Jan Hubicka + + * auto-profile.cc (function_instance::match): Sanity check + that gimple PHI has no location. + * tree-cfg.cc (assign_discriminators): Also remap locations + of gimple PHI arguments. + +2025-09-30 Jan Hubicka + + * basic-block.h (GCOV_COMPUTE_SCALE): Remove. + * ipa-profile.cc (ipa_profile_generate_summary): Use + profile-count scaling. + * sched-rgn.cc (compute_trg_info): Likewise. + +2025-09-30 Jan Hubicka + + * auto-profile.cc (stmt_loc_used_by_debug_info): New function. + (autofdo_source_profile::get_count_info): Use it. + (afdo_set_bb_count): Likewise. + (afdo_vpt_for_early_inline): Likewise. + +2025-09-30 Andre Vieira + + * gimple-lower-bitint.cc (bitint_precision_kind): Fix inconsistency in + results between first and consecutive calls to this function. + +2025-09-28 liuhongt + + PR target/121970 + * config/i386/i386-options.cc (ix86_target_string): Remove + store_max. + (ix86_debug_options): Ditto. + (ix86_function_specific_print): Ditto. + (ix86_valid_target_attribute_tree): Ditto. + (ix86_option_override_internal): Ditto. + * config/i386/i386-expand.cc (ix86_expand_builtin): Ditto. + * config/i386/i386-options.h (ix86_target_string): Ditto. + * config/i386/i386.h (MOVE_MAX): Ditto. + (STORE_MAX_PIECES): Set by move_max. + * config/i386/i386.opt: Deprecate mmove-max=. + * config/i386/x86-tune.def (X86_TUNE_AVX256_STORE_BY_PIECES): + Removed. + (X86_TUNE_AVX512_STORE_BY_PIECES): Ditto. + +2025-09-28 Peter Damianov + + * pretty-print.cc (decode_utf8_char): Move forward declaration. + (mingw_utf8_str_to_utf16_str): New function to convert UTF-8 to UTF-16. + (is_console_handle): New function to detect Windows console handles. + (write_all): Add UTF-8 to UTF-16 conversion for console output, + falling back to WriteFile for ASCII strings and regular files. + +2025-09-27 ChengLulu + + PR target/99217 + * config/mips/mips.cc (mips_start_function_definition): + Implements the functionality of '-fpatchable-function-entry='. + (mips_print_patchable_function_entry): Define empty function. + (TARGET_ASM_PRINT_PATCHABLE_FUNCTION_ENTRY): Define macro. + +2025-09-27 Jie Mei + + * config/mips/mips.cc(mips_option_override):Add conditions + for use of the -mmips16e2 and -mips16 option. + +2025-09-27 Jie Mei + + * config/mips/mips.md (fms4): Generates MSUBF.fmt + instructions. + (*fms4_msubf): Same as above. + (fnma4): Same as above. + (*fnma4_msubf): Same as above. + +2025-09-26 Alejandro Colomar + + * doc/extend.texi: Clarify documentation about lists of + parameter forward declarations, and mention that more than one + of them are unnecessary. + * doc/invoke.texi: Document the new + -Wmultiple-parameter-fwd-decl-lists. + +2025-09-26 Jan Hubicka + + * auto-profile.cc (afdo_propagate_edge): Fix handling of precize 0 + counts. + +2025-09-26 Andrew Stubbs + + * config/gcn/gcn.cc + (gcn_vectorize_support_vector_misalignment): Allow any alignment, as + long as it's not packed. + +2025-09-26 Jan Hubicka + + * profile-count.h (profile_probability::operator/): Do not cap + twice. + (profile_probability::operator/=): Likewise. + (profile_probability::apply_scale): Do not watch for overflow. + (profile_count::probability_in): Watch overflow. + +2025-09-26 Lulu Cheng + + PR target/121875 + * config/loongarch/loongarch.cc + (loongarch_can_inline_p): New function. + (TARGET_CAN_INLINE_P): Define. + +2025-09-25 Gerald Pfeifer + + * doc/invoke.texi (Warning Options): Use "bitwise" over + "bit-wise". + * doc/extend.texi (Vector Extensions): Use "elementwise" + over "element-wise". + * doc/md.texi (Standard Names): Ditto. + +2025-09-25 Gerald Pfeifer + + * doc/extend.texi (Vector Extensions): Fix grammar. + +2025-09-25 Xi Ruoyao + + * doc/invoke.texi (-ffp-int-builtin-inexact): Reword to match + the default value with the default C standard. + +2025-09-24 Dusan Stojkovic + + PR target/121778 + * config/riscv/riscv.md: Add define_split pattern. + +2025-09-24 Andrew Pinski + + PR tree-optimization/121762 + * gimple-fold.cc (gimple_fold_builtin_assume_aligned): New function. + (gimple_fold_builtin): Call gimple_fold_builtin_assume_aligned + for BUILT_IN_ASSUME_ALIGNED. + * tree-ssa-ccp.cc (pass_fold_builtins::execute): Remove handling + of BUILT_IN_ASSUME_ALIGNED. + +2025-09-24 Jennifer Schmitz + + * config/aarch64/aarch64.md: Include neoversev2.md. + * config/aarch64/tuning_models/neoversev2.h: Enable dispatch + scheduling and add dispatch constraints. + * config/aarch64/neoversev2.md: New file and new instruction attribute + neoversev2_dispatch. + +2025-09-24 Jennifer Schmitz + + * config.gcc: Add aarch64-sched-dispatch.o to extra_objs. + * config/aarch64/aarch64-protos.h (struct tune_params): New + field for dispatch scheduling. + (struct dispatch_constraint_info): New struct for dispatch scheduling. + * config/aarch64/aarch64-tuning-flags.def + (AARCH64_EXTRA_TUNING_OPTION): New flag to enable dispatch scheduling. + * config/aarch64/aarch64.cc (TARGET_SCHED_DISPATCH): Implement + target hook. + (TARGET_SCHED_DISPATCH_DO): Likewise. + (aarch64_override_options_internal): Add check for definition of + dispatch constraints if dispatch-scheduling tune flag is set. + * config/aarch64/t-aarch64: Add aarch64-sched-dispatch.o. + * config/aarch64/tuning_models/a64fx.h: Initialize fields for + dispatch scheduling in tune_params. + * config/aarch64/tuning_models/ampere1.h: Likewise. + * config/aarch64/tuning_models/ampere1a.h: Likewise. + * config/aarch64/tuning_models/ampere1b.h: Likewise. + * config/aarch64/tuning_models/cortexa35.h: Likewise. + * config/aarch64/tuning_models/cortexa53.h: Likewise. + * config/aarch64/tuning_models/cortexa57.h: Likewise. + * config/aarch64/tuning_models/cortexa72.h: Likewise. + * config/aarch64/tuning_models/cortexa73.h: Likewise. + * config/aarch64/tuning_models/cortexx925.h: Likewise. + * config/aarch64/tuning_models/emag.h: Likewise. + * config/aarch64/tuning_models/exynosm1.h: Likewise. + * config/aarch64/tuning_models/fujitsu_monaka.h: Likewise. + * config/aarch64/tuning_models/generic.h: Likewise. + * config/aarch64/tuning_models/generic_armv8_a.h: Likewise. + * config/aarch64/tuning_models/generic_armv9_a.h: Likewise. + * config/aarch64/tuning_models/neoverse512tvb.h: Likewise. + * config/aarch64/tuning_models/neoversen1.h: Likewise. + * config/aarch64/tuning_models/neoversen2.h: Likewise. + * config/aarch64/tuning_models/neoversen3.h: Likewise. + * config/aarch64/tuning_models/neoversev1.h: Likewise. + * config/aarch64/tuning_models/neoversev2.h: Likewise. + * config/aarch64/tuning_models/neoversev3.h: Likewise. + * config/aarch64/tuning_models/neoversev3ae.h: Likewise. + * config/aarch64/tuning_models/olympus.h: Likewise. + * config/aarch64/tuning_models/qdf24xx.h: Likewise. + * config/aarch64/tuning_models/saphira.h: Likewise. + * config/aarch64/tuning_models/thunderx.h: Likewise. + * config/aarch64/tuning_models/thunderx2t99.h: Likewise. + * config/aarch64/tuning_models/thunderx3t110.h: Likewise. + * config/aarch64/tuning_models/thunderxt88.h: Likewise. + * config/aarch64/tuning_models/tsv110.h: Likewise. + * config/aarch64/tuning_models/xgene1.h: Likewise. + * config/aarch64/aarch64-sched-dispatch.cc: New file for + dispatch scheduling for aarch64. + * config/aarch64/aarch64-sched-dispatch.h: New header file. + +2025-09-24 Jennifer Schmitz + + * config/aarch64/aarch64-sve.md: Annotate instructions with + attribute sve_type. + * config/aarch64/aarch64-sve2.md: Likewise. + * config/aarch64/aarch64.md (sve_type): New attribute sve_type. + * config/aarch64/iterators.md (sve_type_unspec): New int attribute. + (sve_type_int): New code attribute. + (sve_type_fp): New int attribute. + +2025-09-24 Richard Biener + + PR tree-optimization/116816 + * tree-vect-stmts.cc (get_load_store_type): Allow multi-lane + single-element interleaving to fall back to VMAT_ELEMENTWISE. + Fall back to VMAT_ELEMENTWISE when we cannot handle a load + permutation. + (vectorizable_load): Do not check a load permutation + for VMAT_ELEMENTWISE. Handle grouped loads with + VMAT_ELEMENTWISE and directly apply a load permutation. + +2025-09-24 Richard Biener + + * tree-vect-stmts.cc (get_load_store_type): Explicitly fail + when we end up with VMAT_ELEMENTWISE for BB vectorization. + +2025-09-24 Xi Ruoyao + + PR tree-optimization/122040 + * doc/invoke.texi (-fisolate-erroneous-paths-dereference): + Mention it also turns division by zero into a trap in addition + to null dereference. + +2025-09-24 Xi Ruoyao + + PR middle-end/66462 + * config/loongarch/loongarch.md (FCLASS_MASK): Add 3. + (fclass_optab): Assign isnan for 3. + (2): If FCLASS_MASK is 3, + only enable when -fsignaling-nans. + +2025-09-24 Pan Li + + * match.pd: Add pattern of mult and reuse the widen-mul + by for keyword. + +2025-09-23 David Malcolm + + PR diagnostics/121986 + * diagnostics/sarif-sink.cc: Include "intl.h". + (sarif_builder::make_message_describing_fix_it_hint): New. + (sarif_builder::make_fix_object): Attempt to auto-generate a + description for fix-it hints. + +2025-09-23 Richard Earnshaw + + PR target/121810 + * config/arm/mve.md (mve_mov): Move the Ui constraint + and pool_range attributes to the final alternative. Fix + the forward range value and correctly name the negative + range. + +2025-09-23 Pan Li + + PR middle-end/122031 + * tree-ssa-math-opts.cc (build_and_insert_cast): Fix the typo + of self assignment. + +2025-09-23 Alfie Richards + + * config/aarch64/aarch64.cc (aarch64_process_target_version_attr): + Remove warning. + * config/aarch64/aarch64.opt: Mark -Wno-experimental-fmv-target + deprecated. + * doc/invoke.texi: Ditto. + +2025-09-23 Alfie Richards + + * attribs.cc (is_function_default_version): Update to handle + target_clones. + * cgraph.h (FOR_EACH_FUNCTION_REMOVABLE): New macro. + * multiple_target.cc (expand_target_clones): Update logic to delete + empty target_clones and modify diagnostic. + (ipa_target_clone): Update to use FOR_EACH_FUNCTION_REMOVABLE. + +2025-09-23 Alfie Richards + + * attribs.h (common_function_versions): Removed. + * attribs.cc (common_function_versions): Removed. + * config/aarch64/aarch64.cc (aarch64_common_function_versions): Removed. + (aarch64_same_function_versions): New function to check if two version + strings imply the same version. + (TARGET_OPTION_FUNCTION_VERSIONS): Removed. + (TARGET_OPTION_SAME_FUNCTION_VERSIONS): New macro. + * config/i386/i386.cc (TARGET_OPTION_FUNCTION_VERSIONS): Removed. + * config/rs6000/rs6000.cc (TARGET_OPTION_FUNCTION_VERSIONS): Removed. + * config/riscv/riscv.cc (riscv_same_function_versions): New function + to check if two version strings imply the same version. + (riscv_common_function_versions): Removed. + (TARGET_OPTION_FUNCTION_VERSIONS): Removed. + (TARGET_OPTION_SAME_FUNCTION_VERSIONS): New macro. + * doc/tm.texi: Regenerated. + * target.def: Remove common_version hook and add same_function_version + hook. + * doc/tm.texi.in: Ditto. + * tree.cc (distinct_version_decls): New function. + (mergeable_version_decls): Ditto. + * tree.h (distinct_version_decls): New function. + (mergeable_version_decls): Ditto. + * hooks.h (hook_stringslice_stringslice_unreachable): New function. + * hooks.cc (hook_stringslice_stringslice_unreachable): New function. + +2025-09-23 Alfie Richards + + PR target/118313 + * cgraph.cc (delete_function_version): Made public static member of + cgraph_node. + * cgraph.h (delete_function_version): Ditto. + * cgraphunit.cc (analyze_functions): Add logic for target version + dependencies. + * ipa.cc (symbol_table::remove_unreachable_nodes): Ditto. + * multiple_target.cc (create_dispatcher_calls): Change to support + target version semantics. + (ipa_target_clone): Change to dispatch all function sets in + target_version semantics, and to have early and late pass. + (expand_target_clones): Add logic for cases of target_clones with no + defaults. + (is_simple_target_clones_case): New function. + (class pass_target_clone): New parameter for early or late pass. + * config/aarch64/aarch64.cc: (aarch64_get_function_versions_dispatcher): + Refactor with the assumption that the DECL node will be default. + * config/riscv/riscv.cc: (riscv_get_function_versions_dispatcher): + Refactor with the assumption that the DECL node will be default. + * passes.def: Split target_clones pass into early and late version. + +2025-09-23 Alfie Richards + + PR target/118339 + * target.def: Add check_target_clone_version hook. + * tree.cc (get_clone_attr_versions): Add filter argument. + (get_clone_versions): Add filter argument. + * tree.h (get_clone_attr_versions): Add filter. + (get_clone_versions): Add filter argument. + * config/aarch64/aarch64.cc (aarch64_check_target_clone_version): + New function + (TARGET_CHECK_TARGET_CLONE_VERSION): New define. + * config/riscv/riscv.cc (riscv_check_target_clone_version): + New function. + (TARGET_CHECK_TARGET_CLONE_VERSION): New define. + * doc/tm.texi: Regenerated. + * doc/tm.texi.in: Add documentation for new hook. + * hooks.h (hook_stringslice_locationtptr_true): New function. + * hooks.cc (hook_stringslice_locationtptr_true): New function. + +2025-09-23 Alfie Richards + + * config/riscv/riscv-protos.h (riscv_process_target_version_str): New function.. + * config/riscv/riscv-target-attr.cc (riscv_process_target_attr): Refactor to take + string_slice. + (riscv_process_target_version_str): New function. + * config/riscv/riscv.cc (parse_features_for_version): Refactor to take + string_slice. + (riscv_compare_version_priority): Ditto. + (dispatch_function_versions): Change to pass location. + +2025-09-23 Alfie Richards + + * attribs.cc (make_dispatcher_decl): Move duplicated cgraph logic into + this function and change to use targetm.mangle_decl_assembler_name for + mangling. + * cgraph.cc (cgraph_node::insert_new_function_version): Record + assembler_name. + * cgraph.h (struct cgraph_function_version_info): Add assembler_name. + (struct cgraph_node): Add dispatcher_resolver_function and + is_target_clone. + * config/aarch64/aarch64.cc (aarch64_parse_fmv_features): Change to + support string_slice. + (aarch64_process_target_version_attr): Ditto. + (get_feature_mask_for_version): Ditto. + (aarch64_mangle_decl_assembler_name): Add logic for mangling dispatched + symbol and resolver. + (get_suffixed_assembler_name): Removed. + (make_resolver_func): Refactor to use + aarch64_mangle_decl_assembler_name for mangling. + (aarch64_generate_version_dispatcher_body): Remove remangling. + (aarch64_get_function_versions_dispatcher): Refactor to remove + duplicated cgraph logic. + * config/i386/i386-features.cc + (ix86_mangle_function_version_assembler_name): Refactor to use + clone_identifier and to mangle default. + (ix86_mangle_decl_assembler_name): Add logic for mangling dispatched + symbol and resolver. + (ix86_get_function_versions_dispatcher): Remove duplicated cgraph + logic. + (make_resolver_func): Refactor to use ix86_mangle_decl_assembler_name + for mangling. + * config/riscv/riscv.cc (riscv_mangle_decl_assembler_name): Add logic + for FMV mangling. + (get_suffixed_assembler_name): Removed. + (make_resolver_func): Refactor to use riscv_mangle_decl_assembler_name + for mangling. + (riscv_generate_version_dispatcher_body): Remove unnecessary remangling. + (riscv_get_function_versions_dispatcher): Remove duplicated cgraph + logic. + * config/rs6000/rs6000.cc (rs6000_mangle_decl_assembler_name): New + function. + (rs6000_get_function_versions_dispatcher): Remove duplicated cgraph + logic. + (make_resolver_func): Refactor to use rs6000_mangle_decl_assembler_name + for mangling. + (rs6000_mangle_function_version_assembler_name): New function. + * multiple_target.cc (create_dispatcher_calls): Remove mangling code. + (get_attr_str): Removed. + (separate_attrs): Ditto. + (is_valid_asm_symbol): Removed. + (create_new_asm_name): Ditto. + (expand_target_clones): Refactor to use + targetm.mangle_decl_assembler_name for mangling and be more general. + * tree.cc (get_target_clone_attr_len): Removed. + * tree.h (get_target_clone_attr_len): Removed. + +2025-09-23 Alfie Richards + + * cgraph.h (clone_identifier): New function. + * cgraphclones.cc (clone_identifier): New function. + (clone_function_name): Refactored to use clone_identifier. + (is_valid_asm_symbol): New helper function. + +2025-09-23 liuhongt + + PR target/121994 + * config/i386/x86-tune-costs.h (znver2_cost): Set + vect_unroll_limit to 1. + (znver1_cost): Ditto. + * config/i386/i386.cc (ix86_vector_costs::add_stmt_cost): + Adjust count number for {AVX256,AVX512}_SPLIT_REGS. + +2025-09-22 Peter Bergner + + PR target/121982 + * config/riscv/tt-ascalon-d8.md (tt_ascalon_d8_vec_idiv_byte): New + define_insn_reservation. + +2025-09-22 Andrew Pinski + + PR tree-optimization/121762 + * builtins.cc (fold_builtin_constant_p): Make non-static. + * builtins.h (fold_builtin_constant_p): New declaration. + * gimple-fold.cc (gimple_fold_builtin_constant_p): New function. + (gimple_fold_builtin): Call gimple_fold_builtin_constant_p + for BUILT_IN_CONSTANT_P. + * tree-ssa-ccp.cc (pass_fold_builtins::execute): Set PROP_last_full_fold + on curr_properties. Remove handling of BUILT_IN_CONSTANT_P. + +2025-09-22 Gerald Pfeifer + + * doc/libgdiagnostics/index.rst: Drop broken reference to + `modindex`. + +2025-09-22 Pan Li + + PR middle-end/122021 + * tree-ssa-math-opts.cc (build_and_insert_cast): Add sign-extend + check before prop. + +2025-09-22 Richard Biener + + PR tree-optimization/122016 + * tree-ssa-sccvn.cc (vn_nary_simplify): Do not use the + simplified expression when it references abnormals. + +2025-09-22 Richard Biener + + PR tree-optimization/122023 + * tree-vect-patterns.cc (vect_recog_rotate_pattern): Disable + for rotates. + +2025-09-22 Dimitar Dimitrov + + PR target/116205 + * config/pru/pru-passes.cc (class pass_pru_tiabi_check): Make + this an IPA pass. + (chkp_type_has_function_pointer): Remove. + (check_type_tiabi_compatibility): New function. + (chk_function_decl): Rename. + (check_function_decl): Simplify. + (check_op_callback): Rework to use + check_type_tiabi_compatibility. + (pass_pru_tiabi_check::execute): Rework to scan all symbols and + gimple contents of all defined functions. + * config/pru/pru-passes.def (INSERT_PASS_AFTER): Move after + pass_ipa_auto_profile_offline. + * config/pru/pru-protos.h (make_pru_tiabi_check): New + declaration to mark as IPA pass. + (make_pru_minrt_check): Specify it is making a gimple pass. + * doc/invoke.texi: Document that bit-fields are now rejected for + TI ABI. + +2025-09-21 Andrew Pinski + + * tree-ssa-ccp.cc (optimize_unreachable): Don't check for forced labels. + +2025-09-21 Jan Hubicka + + * cgraphclones.cc (cgraph_node::create_version_clone): Recompute + calls_comdat_local + +2025-09-21 Jan Hubicka + + * cgraph.cc (cgraph_edge::maybe_hot_p): For AFDO profiles force + count to be non-zero. + +2025-09-21 Jan Hubicka + + * auto-profile.cc (autofdo_source_profile::read): Scale profile up to + profile_count::n_bits - 10. + +2025-09-21 Jan Hubicka + + * ipa-inline-transform.cc (clone_inlined_nodes): Add KEEP_OFFLINE_COPY + parameter. + (inline_call): Sanity check profile and if it is clearly broken do + not subtract profile from original function. + * ipa-inline.cc (recursive_inlining): Update. + * ipa-inline.h (clone_inlined_nodes): Update. + +2025-09-20 Jan Hubicka + + * doc/invoke.texi (--param max-devirt-targets) Document. + * ipa-devirt.cc (ipa_devirt): Implement muti-target + devirtualization. + * params.opt (max-devirt-targets): New parameter. + +2025-09-19 Alexandre Oliva + + * ira.cc (setup_reg_equiv): Retain function invariant + equivalences. + +2025-09-19 Andrew Pinski + + * tree-ssa-forwprop.cc (optimize_aggr_zeroprop): Take gimple* + instead of iterator. + (optimize_agr_copyprop): Likewise. + (simplify_builtin_call): Update call to optimize_aggr_zeroprop. + (pass_forwprop::execute): Update calls to optimize_aggr_zeroprop + and optimize_agr_copyprop. + +2025-09-19 Andrew Pinski + + * tree-ssa-forwprop.cc (optimize_aggr_zeroprop_1): Change return type + to void. + (optimize_aggr_zeroprop): Likewise. + (optimize_agr_copyprop_1): Likewise. + (optimize_agr_copyprop_arg): Likewise. + (optimize_agr_copyprop): Likewise. + (simplify_builtin_call): Handle update of the return type + of optimize_aggr_zeroprop. + (pass_forwprop::execute): Likewise and optimize_agr_copyprop. + +2025-09-19 Michael Eager + + PR target/118280 + * config/microblaze/iterators.md: New. + * config/microblaze/microblaze-protos.h: Add + microblaze_subword_address. + * config/microblaze/microblaze.cc: Ditto. + * config/microblaze/microblaze.md: constants: Add UNSPECV_CAS_BOOL, + UNSPECV_CAS_MEM, UNSPECV_CAS_VAL, UNSPECV_ATOMIC_FETCH_OP + type: add atomic + * config/microblaze/sync.md: Add atomic_fetch_si + atomic_test_and_set + +2025-09-19 Jan Hubicka + + * ipa-fnsummary.cc (estimate_edge_devirt_benefit): Handle speculative + edges correctly. + (estimate_edge_size_and_time): Even when not collecting hints, + devirtualization affects function size. + (estimate_calls_size_and_time): Do not use tables when devirtualization + is possible. + +2025-09-19 Jan Hubicka + + * cgraph.cc (cgraph_edge::make_direct): Do not ICE when there are + multiple speculations to comptaible targets + (cgraph_edge::combined_sreal_frequency): New member function. + * cgraph.h (cgraph_edge::combined_sreal_frequency): Declare. + * ipa-cp.cc (devirtualization_time_bonus): Return sreal; consider + profile. + (estimate_local_effects): Likewise. + +2025-09-19 Gaius Mulley + + PR modula2/121856 + * doc/gm2.texi (Compiler options): New item -fwideset. + +2025-09-19 Jeff Law + + PR target/121983 + * config/riscv/riscv.cc (riscv_macro_fusion_pair_p): Make sure + object is a REG before asking for its REGNO. Fix a trivial + whitespace nit. + +2025-09-19 Raphael Moreira Zinsly + + * config/riscv/riscv-v.cc + (shuffle_slide_patterns): Cover more permutations. + +2025-09-19 Jim Lin + + * config/riscv/riscv.cc (riscv_compute_frame_info): Remove the + dedicated calculation for RVE. + +2025-09-19 Jeff Law + + * config.gcc (riscv*); Add riscv-bclr-lowest-set-bit.o to extra_objs. + * config/riscv/riscv-bclr-lowest-set-bit.cc: New file. + * config/riscv/riscv-passes.def: Add new pass after combine. + * config/riscv/riscv-protos.h (make_pass_bclr_lowest_set_bit): Add + prototype. + * config/riscv/t-riscv: Add rules to build riscv-bclr-lowest-set-bit.o. + +2025-09-19 Richard Biener + + * tree-ssa-pre.cc (compute_antic_aux): Remove dead code. + +2025-09-19 Richard Biener + + * tree-vectorizer.h (_stmt_vec_info::store_count): Remove. + (DR_GROUP_STORE_COUNT): Likewise. + * tree-vect-stmts.cc (vect_transform_stmt): Remove non-SLP + path. + +2025-09-19 Richard Biener + + * tree-vectorizer.h (vect_get_num_copies): Remove unused + overload. Remove defaulted vectype argument and always + use the vector type of the SLP node. + * tree-vect-loop.cc (vect_reduction_update_partial_vector_usage): + Adjust. + (vectorizable_lane_reducing): Likewise. + (vect_transform_reduction): Likewise. + (vectorizable_nonlinear_induction): Likewise. + * tree-vect-stmts.cc (check_load_store_for_partial_vectors): + Likewise. + +2025-09-19 Richard Biener + + * tree-vectorizer.h (_slp_tree::vec_stmts_size): Remove. + (SLP_TREE_NUMBER_OF_VEC_STMTS): Likewise. + * tree-vect-loop.cc (vectorizable_reduction): Adjust. + (vect_transform_cycle_phi): Likewise. + (vect_transform_lc_phi): Likewise. + (vectorizable_recurr): Likewise. + (vectorizable_induction): Likewise. + (vectorizable_live_operation): Likewise. + * tree-vect-slp.cc (_slp_tree::_slp_tree): Do not set + SLP_TREE_NUMBER_OF_VEC_STMTS. + (vect_slp_analyze_node_operations_1): Likewise. + (vect_slp_analyze_node_operations): Likewise. + (vect_prologue_cost_for_slp): Adjust. + (vect_create_constant_vectors): Likewise. + (vect_get_slp_vect_def): Likewise. + (vect_transform_slp_perm_load_1): Likewise. + (vectorizable_slp_permutation_1): Likewise. + (vect_schedule_slp_node): Likewise. + (vectorize_slp_instance_root_stmt): Likewise. + * tree-vect-stmts.cc (vect_model_simple_cost): Likewise. + (vectorizable_bswap): Likewise. + (vectorizable_call): Likewise. + (vectorizable_conversion): Likewise. + (vectorizable_shift): Likewise. + (vectorizable_operation): Likewise. + (vectorizable_store): Likewise. + (vectorizable_load): Likewise. + (vectorizable_condition): Likewise. + (vectorizable_early_exit): Likewise. + +2025-09-18 David Malcolm + + * diagnostics/client-data-hooks.h (client_data_hooks::dump): New. + * diagnostics/context.cc (context::dump): Dump + m_client_data_hooks. + (client_data_hooks::dump): New. + * diagnostics/logical-locations.h + (logical_locations::manager::dump): New. + * diagnostics/selftest-logical-locations.cc: Include + "diagnostics/dumping.h". + (test_manager::dump): New. + * diagnostics/selftest-logical-locations.h (test_manager::dump): + New decl. + * libgdiagnostics.cc: Include "diagnostics/dumping.h". + (impl_logical_location_manager::dump): New. + * tree-logical-location.cc: Include "diagnostics/dumping.h". + (tree_logical_location_manager::dump): New. + * tree-logical-location.h (tree_logical_location_manager::dump): + New decl. + +2025-09-18 David Malcolm + + * diagnostics/paths-output.cc: Update for conversion of + location_aspect to enum class. + * diagnostics/source-printing.cc: Likewise. + * input.cc: Likewise. + * input.h: Likewise. + +2025-09-18 David Malcolm + + * diagnostics/buffering.cc: Drop include of "diagnostic.h". + * diagnostics/buffering.h: Likewise. + * diagnostics/context.h (diagnostics::metadata): Add forward decl. + * diagnostics/html-sink.cc: Drop include of "diagnostic.h". + * diagnostics/lazy-paths.cc: Likewise. + * diagnostics/macro-unwinding.cc: Likewise. + * diagnostics/macro-unwinding.h (diagnostics:diagnostic_info): Add + forward decl. + * diagnostics/option-classifier.h: Include + "diagnostics/option-id.h" and "diagnostics/kinds.h". + (diagnostics:diagnostic_info): Add forward decl. + * diagnostics/output-spec.cc: Drop include of "diagnostic.h". + * diagnostics/paths-output.cc: Likewise. + * diagnostics/paths.cc: Likewise. + * diagnostics/sarif-sink.cc: Likewise. + * diagnostics/selftest-context.cc: Likewise. + * diagnostics/selftest-paths.cc: Likewise. + * diagnostics/source-printing-options.h: Include + "rich-location.h". + * diagnostics/text-sink.cc: Drop include of "diagnostic.h". + +2025-09-18 Qing Zhao + + PR tree-optimization/121894 + * tree-sra.cc (scan_function): Set grp_assignment_write to 1 when + specially handle call to .DEFERRED_INIT. + +2025-09-18 Zhongyao Chen + + PR target/121910 + * config/riscv/riscv-vector-costs.cc (compute_estimated_lmul): + Return RVV_M8 when estimated lmul is too large. + +2025-09-18 Jakub Jelinek + + PR c++/121977 + * omp-low.cc (lower_omp_regimplify_operands_p): If maybe_lookup_decl + returns NULL, use maybe_lookup_decl_in_outer_ctx as fallback. + +2025-09-18 Karl Meakin + + * config/aarch64/aarch64-sme.md (@aarch64_sme_write_zt): New insn. + (aarch64_sme_lut_zt): Likewise. + * config/aarch64/aarch64-sve-builtins-shapes.cc (parse_type): New type format "%T". + (struct luti_lane_zt_base): New function shape. + (SHAPE): Likewise. + (struct write_zt_def): Likewise. + (struct write_lane_zt_def): Likewise. + * config/aarch64/aarch64-sve-builtins-shapes.h: New function shape. + * config/aarch64/aarch64-sve-builtins-sme.cc (class svluti_zt_impl): New function expander. + (class svwrite_zt_impl): Likewise. + (class svwrite_lane_zt_impl): Likewise. + (FUNCTION): Likewise + * config/aarch64/aarch64-sve-builtins-sme.def (svwrite_zt): New function shape. + (svwrite_lane_zt): Likewise. + (svluti4_zt): Likewise. + * config/aarch64/aarch64-sve-builtins-sme.h: New function base. + * config/aarch64/aarch64-sve-builtins.h: Mention the arrays of function_group_info by name. + +2025-09-18 Karl Meakin + + * config/aarch64/aarch64-c.cc (aarch64_update_cpp_builtins): Conditonally define + `__ARM_FEATURE_SME_LUTv2" macro. + * config/aarch64/aarch64-option-extensions.def (AARCH64_OPT_EXTENSION("sme-lutv2")): New + optional architecture extension. + * config/aarch64/aarch64.h (TARGET_SME_LUTv2): New macro. + * doc/invoke.texi: Document `+sme-lutv2` flag. + +2025-09-18 Pan Li + + * match.pd: Add pattern for SAT_MUL form 5. + * tree-ssa-math-opts.cc (math_opts_dom_walker::after_dom_children): + Try match pattern for IOR. + +2025-09-18 Jan Hubicka + + * ipa-cp.cc (update_counts_for_self_gen_clones): Do not update + call frequency for local profiles. + +2025-09-18 Richard Biener + + PR tree-optimization/87615 + * tree-ssa-sccvn.cc (vn_nary_op_insert_into): When inserting + a new predicate or location into an existing predicate list + make sure to not exceed 8 locations. Avoid copying things + when we later eventually throw them away. + (vn_nary_op_insert_pieces_predicated): Avoid expensive check + when not checking. + (dominated_by_p_w_unex): Apply the limit on a single successors + predecessor count consistently. + +2025-09-18 Tobias Burnus + Sandra Loosemore + + PR middle-end/121922 + * omp-general.cc (omp_dynamic_cond): Use 'unshare_expr' for + the user condition. + +2025-09-18 Richard Biener + + PR tree-optimization/121720 + * tree-ssa-pre.cc (bitmap_set_subtract_expressions): Add + flag to tell whether we should copy instead of prune the + value set. + (compute_antic_aux): Remove intersection of ANTIC_IN with + the old solution. When subtracting TMP_GEN from + ANTIC_OUT do not prune the value set when MAX was involved + in the ANTIC_OUT computation. + +2025-09-18 hongtao.liu + + * config/i386/x86-tune.def (X86_TUNE_AVX512_MOVE_BY_PIECES): + Remove SPR/GNR/DMR. + (X86_TUNE_AVX512_STORE_BY_PIECES): Ditto. + +2025-09-17 David Malcolm + + * sarif-replay.cc (set_defaults): Initialize + m_debug_physical_locations. + +2025-09-17 Andrew Pinski + + PR tree-optimization/121962 + * tree-ssa-forwprop.cc (same_for_assignment): New function. + (optimize_agr_copyprop_1): Use same_for_assignment to check for + nop copies. + (optimize_agr_copyprop): Likewise. + +2025-09-17 Andrew Pinski + + * tree-ssa-forwprop.cc (new_src_based_on_copy): An early out + if both are decls. + +2025-09-17 Andrew Pinski + + * tree-ssa-forwprop.cc (optimize_agr_copyprop_1): Split out + the case where `operand_equal_p (dest, src2)` is false into ... + (new_src_based_on_copy): This. New function. + (optimize_agr_copyprop_arg): Use new_src_based_on_copy + instead of operand_equal_p to find the new src. + +2025-09-17 Shreya Munnangi + + PR tree-optimization/58727 + * simplify-rtx.cc (simplify_context::simplify_binary_operation_1): + In (A & C1) | C2, if (C1|C2) results in a constant with a single bit + clear, then adjust C1 appropriately. + +2025-09-17 Eric Botcazou + + * tree-inline.cc (maybe_copy_this_notrap): New function. Also copy + the TREE_THIS_NOTRAP flag for parameters when the argument is a full + object and the parameter's type is self-referential. + (remap_gimple_op_r): Call maybe_copy_this_notrap. + (copy_tree_body_r): Likewise. + +2025-09-17 Pan Li + + * config/riscv/autovec-opt.md (*widen_first__vx_): + Add helper bridge pattern for vwaddu.vx combine. + (*widen___vx_): Add + new pattern to match vwaddu.vx combine. + * config/riscv/iterators.md: Add code attr to get extend CODE. + * config/riscv/vector-iterators.md: Add Dmode iterator for + widen. + +2025-09-16 Jakub Jelinek + + * doc/invoke.texi (Wimplicit-fallthrough=): Document that also C23 + provides a standard way to suppress the warning with [[fallthrough]];. + +2025-09-16 Takayuki 'January June' Suwa + + * config/xtensa/xtensa.cc (#include): + Add "addresses.h". + * config/xtensa/xtensa.h (REGNO_OK_FOR_BASE_P): + Simplify to just a call to GP_REG_P(). + (BASE_REG_P): Replace REGNO_OK_FOR_BASE_P() with the equivalent + call to regno_ok_for_base_p(). + +2025-09-16 Wilco Dijkstra + + PR middle-end/66462 + * config/aarch64/aarch64.md (isnan2): Add new expander. + +2025-09-16 Richard Biener + + * tree-vect-stmts.cc (get_load_store_type): Get in a flag + whether a SLP_TREE_LOAD_PERMUTATION on the node can be + code generated and use it. Fix the condition on using + strided gather/scatter to avoid dropping a meaningful + permutation. + (vectorizable_store): Adjust. + (vectorizable_load): Analyze the permutation early and + pass the result down to get_load_store_type. Fix the + condition on when we are allowed to elide a load permutation. + +2025-09-16 Jennifer Schmitz + + PR target/121602 + * config/aarch64/aarch64-sve-builtins.cc + (gimple_folder::fold_active_lanes_to): Add force_vector + statement. + +2025-09-16 Jiawei + + * config.gcc: Accept RISC-V profiles in `--with-arch`. + * config/riscv/arch-canonicalize: Add profile detection and + skip canonicalization for profiles. + +2025-09-16 Jiawei + + * common/config/riscv/riscv-common.cc (struct riscv_profiles): Add comments. + (RISCV_PROFILE): Removed. + * config/riscv/riscv-profiles.def: New file. + +2025-09-16 Dongyan Chen + + * config/riscv/riscv-ext.def: Imply zicsr. + +2025-09-16 liuhongt + + * config/i386/predicates.md (avx_vbroadcast128_operand): New + predicate. + * config/i386/sse.md (*avx_vbroadcastf128__perm): New + pre_reload splitter. + +2025-09-15 Alexandre Oliva + + * config/rs6000/vxworks.h (TARGET_CMODEL, SET_CMODEL): Define. + +2025-09-15 Alexandre Oliva + + * configure.ac: Adjust base register in linker test for large + TOC support. + * configure: Rebuild. + +2025-09-15 Pan Li + + * match.pd: Remove unnecessary cast of unsigned + SAT_MUL for widen-mul. + +2025-09-15 Pan Li + + * tree-ssa-math-opts.cc (build_and_insert_cast): Refine + the cast insert by check the rhs of val. + +2025-09-15 David Faust + + PR debug/121411 + PR debug/121903 + * ctfc.h (ctf_add_sou): Change size arg from size_t to uHWI. + * ctfc.cc (ctf_add_sou): Likewise. + +2025-09-15 Andrew Pinski + + PR tree-optimization/121751 + PR tree-optimization/121418 + PR tree-optimization/121417 + * tree-ssa-forwprop.cc (split_core_and_offset_size): New function. + (optimize_agr_copyprop_1): Allow for the same + address but different type accesses via a VCE. + +2025-09-15 Alex Coplan + + PR tree-optimization/121772 + * match.pd: Add type check to reduc(ctor) pattern. + +2025-09-15 Georg-Johann Lay + + * config/avr/avr-mcus.def: Add avr32eb14, avr32eb20, + avr32eb28, avr32eb32. + * doc/avr-mmcu.texi: Rebuild. + +2025-09-15 H.J. Lu + + PR target/121934 + * config/i386/i386-expand.cc (ix86_expand_set_or_cpymem): If a + single instruction can store or move the whole block of memory, + use vector instruction and don't align destination. + +2025-09-15 Xi Ruoyao + + PR target/121906 + * config/loongarch/loongarch.md (*bstrins__for_ior_mask): + Always create a new pseudo for the input register of the bstrins + instruction. + +2025-09-15 Jakub Jelinek + + PR middle-end/121904 + * tree.cc (get_range_pos_neg): Return 3 if arg doesn't have + scalar integral type. + * expr.cc (expand_expr_real_2) : Only choose between + sign and zero extension based on costs for scalar integral inner + types. + +2025-09-15 Stefan Schulze Frielinghaus + + PR middle-end/121391 + * gimplify.cc (gimplify_asm_expr): In case an asm operand is an + error node, bail out early. + +2025-09-14 Richard Biener + + PR lto/121935 + * ipa-free-lang-data.cc (find_decls_types_r): Visit DECL_ARGUMENTS + chain manually. + +2025-09-14 Richard Biener + + * tree-vectorizer.h (stmt_vec_info_type::permute_info_type): Add. + (vectorizable_slp_permutation): Declare. + * tree-vect-slp.cc (vectorizable_slp_permutation): Export. + (vect_slp_analyze_node_operations_1): Set permute_info_type + on permute nodes successfully analyzed. + (vect_schedule_slp_node): Dispatch to vect_transform_stmt + for all nodes. + * tree-vect-stmts.cc (vect_transform_stmt): Remove redundant + dump, handle permute_info_type. + +2025-09-14 Richard Biener + + * tree-vect-stmts.cc (get_load_store_type): Use VMAT_STRIDED_SLP + for negative stride accesses when VMAT_CONTIGUOUS_REVERSE + isn't applicable. + +2025-09-14 Richard Biener + + * tree-vectorizer.h (vect_load_store_data::n_perms): New. + * tree-vect-stmts.cc (vectorizable_load): Analyze + SLP_TREE_LOAD_PERMUTATION only once and remember n_perms. + Verify the transform-time n_perms against the value stored + during analysis. + +2025-09-13 Gerald Pfeifer + + * target.def (dtors_from_cxa_atexit): Properly mark up + __cxa_atexit as code. + * doc/tm.texi: Regenerate. + +2025-09-13 Stefan Schulze Frielinghaus + + PR rtl-optimization/121205 + * lra-constraints.cc (curr_insn_transform): Stop processing on + error. + +2025-09-13 Gerald Pfeifer + + * doc/invoke.texi (Optimize Options): Editorial changes around + -fprofile-partial-training. + +2025-09-12 Jeff Law + + * lra-constraints.cc (get_equiv): Bounds check before accessing + data in ira_reg_equiv. + +2025-09-12 Edwin Lu + + * match.pd: New NARROW_CLIP variant for SAT_TRUNC. + * tree-vect-patterns.cc (gimple_unsigned_integer_narrow_clip): + Add new decl for NARROW_CLIP. + (vect_recog_sat_trunc_pattern): Add NARROW_CLIP check. + +2025-09-12 David Malcolm + + PR diagnostics/120063 + * diagnostics/context.cc (context::execution_failed_p): Also treat + any kind::fatal errors as leading to failed execution. + * diagnostics/sarif-sink.cc (maybe_get_sarif_level): Handle + kind::fatal as SARIF level "error". + +2025-09-12 David Malcolm + + PR diagnostics/121876 + * diagnostics/buffering.cc (context::set_diagnostic_buffer): Add + early reject of the no-op case. + +2025-09-12 Nathaniel Shead + + PR c++/121865 + * ipa-free-lang-data.cc (find_decls_types_r): Don't walk into + DECL_CHAIN for any DECL. + +2025-09-12 Eric Botcazou + + * ipa-pure-const.cc (check_stmt): Minor formatting tweaks. + (pass_data_nothrow): Fix pasto in description. + +2025-09-12 Tamar Christina + + * internal-fn.def (VEC_TRUNC_ADD_HIGH): New. + * doc/generic.texi: Document it. + * optabs.def (vec_trunc_add_high): New. + * doc/md.texi: Document it. + * tree-vect-stmts.cc (vectorizable_early_exit): Use addhn if supported. + +2025-09-12 Tamar Christina + + * config/aarch64/aarch64-simd.md (vec_addh_narrow): New. + +2025-09-12 Tamar Christina + + * tree-vect-loop.cc (vect_analyze_loop_1): If the unroll pragma was set + mark it as handled. + * doc/extend.texi (pragma GCC unroll): Update documentation. + +2025-09-11 Trevor Gross + + * doc/libgcc.texi (Comparison functions): Document functions as + returning CMPtype. + +2025-09-11 Wilco Dijkstra + + PR middle-end/66462 + * config/aarch64/aarch64.md (isfinite2): Add new expander. + +2025-09-11 Matteo Nicoli + + PR tree-optimization/121595 + * match.pd (fabs(a + 0.0) -> fabs (a)): Optimization pattern limited to + the -fno-trapping-math case. + +2025-09-11 Xi Ruoyao + + * config/loongarch/sync.md (atomic_compare_and_swapti_scq): + Require LSX. Change the operands for the output, the memory, + and the expected value to LSX vector modes. Add a FCCmode + output to indicate if CAS has written the desired value into + memory. Use LSX to atomically load both words of the 16B value + in memory. + (atomic_compare_and_swapti): Pun the modes to satisify + the new atomic_compare_and_swapti_scq implementation. Read the + bool return value from the FCC instead of performing a + comparision. + +2025-09-11 Xi Ruoyao + + * config/loongarch/loongarch.cc (loongarch_print_operand): Call + reg_or_0_operand for checking the sanity of %t. + +2025-09-11 Richard Biener + + PR tree-optimization/121703 + * tree-vect-stmts.cc (vectorizable_store): Value-initialize ls. + (vectorizable_load): Likewise. + +2025-09-11 Tsukasa OI + + * config/riscv/riscv.cc (riscv_function_ok_for_sibcall): + Suppress cross calling convention sibcall optimization from + the vector calling convention variant. + +2025-09-11 Richard Biener + + PR tree-optimization/121829 + * cfgloopmanip.cc (create_preheader): Ensure we can insert + at the end of a preheader. + +2025-09-11 Richard Biener + + PR tree-optimization/121870 + * tree-ssa-propagate.cc + (substitute_and_fold_engine::substitute_and_fold): Skip + removed stmts from noreturn fixup. + +2025-09-11 Robin Dapp + + * config/riscv/bitmanip.md (*_cmp_3): + New min/max ifcvt pattern. + * config/riscv/iterators.md (minu): New iterator. + * config/riscv/riscv.cc (riscv_noce_conversion_profitable_p): + Remove riscv-specific adjustment. + +2025-09-11 Robin Dapp + + * ifcvt.cc (noce_convert_multiple_sets_1): Add use_cond_earliest + param. + (noce_convert_multiple_sets): Set use_cond_earliest. + (noce_process_if_block): Just use original cost. + (noce_find_if_block): Use insn_cost (jump_insn). + +2025-09-11 Kito Cheng + + * config/riscv/riscv-selftests.cc (riscv_run_selftests): Call + run_vectorize_related_mode_selftests. + (test_vectorize_related_mode): New function to test + vectorize_related_mode behavior. + (run_vectorize_related_mode_selftests): New function to run all + vectorize_related_mode tests. + (run_vectorize_related_mode_vla_selftests): New function to test + VLA modes. + (run_vectorize_related_mode_vls_rv64gcv_selftests): New function to + test VLS modes on rv64gcv. + (run_vectorize_related_mode_vls_rv32gc_zve32x_zvl256b_selftests): + New function to test VLS modes on rv32gc_zve32x_zvl256b. + (run_vectorize_related_mode_vls_selftests): New function to run all + VLS mode tests. + * config/riscv/riscv-v.cc (can_find_related_mode_p): Fix VLS type + handling by converting TARGET_MIN_VLEN from bits to bytes. + +2025-09-10 Georg-Johann Lay + + PR target/81540 + PR target/49857 + * common/config/avr/avr-common.cc: Disable -ftree-switch-conversion. + +2025-09-10 Takayuki 'January June' Suwa + + * config/xtensa/xtensa.h (TARGET_SMALL_REGISTER_CLASSES_FOR_MODE_P): + Change "Xtrnase" in the comment to "Xtensa". + +2025-09-10 Peter Bergner + + PR target/121878 + * config/riscv/tt-ascalon-d8.md (tt_ascalon_d8_vec_idiv_half): Test the + Selected Element Width (SEW) rather than the mode. + (tt_ascalon_d8_vec_idiv_single): Likewise. + (tt_ascalon_d8_vec_idiv_double): Likewise. + (tt_ascalon_d8_vec_float_divsqrt_half): Likewise. + (tt_ascalon_d8_vec_float_divsqrt_single): Likewise. + (tt_ascalon_d8_vec_float_divsqrt_double): Likewise. + +2025-09-10 Juergen Christ + + * tree-vect-loop.cc (vectorizable_live_operation_1): Fix + load/store bias handling. + +2025-09-10 Paul-Antoine Arras + + * config/riscv/autovec-opt.md (*vfwsub_wf_): New pattern to + combine float_extend + vec_duplicate + vfsub.vv into vfwsub.wf. + +2025-09-10 Jakub Jelinek + + PR middle-end/121828 + * gimple-lower-bitint.cc (gimple_lower_bitint): For REALPART_EXPR + consumed by store in the same bb and with REALPART_EXPR from + optimizable_arith_overflow, don't add REALPART_EXPR lhs to + the m_names bitmap only if the cast from IMAGPART_EXPR doesn't + appear in between the REALPART_EXPR and the store. + +2025-09-10 Jakub Jelinek + + PR middle-end/121831 + * expr.cc (raw_data_cst_read_str): New function. + (store_constructor) : Handle RAW_DATA_CST. + +2025-09-10 Juergen Christ + + * config/s390/s390.h (CLZ_DEFINED_VALUE_AT_ZERO): Adjust and + return 2. + (CTZ_DEFINED_VALUE_AT_ZERO): Return 2. + * config/s390/s390.md (clzsi2): Implement. + (ctzsi2): Implement. + +2025-09-10 Maximilian Immanuel Brandtner + + * config/s390/vector.md (*vec_extract_plus_zero_extend): + Fix define insn. + +2025-09-09 Andrew Stubbs + + * config/gcn/gcn-devices.def: Correct the Max ISA VGPRs counts for + GFX10 and GFX11 devices. + * config/gcn/gcn.cc (gcn_hsa_declare_function_name): Remove the wave64 + VGPR count fudge. + +2025-09-09 Andrew Stubbs + + * config/gcn/gcn.cc (gcn_expand_builtin_1): Enable the "mode" parameter + and ensure that "target" is a register for most of the builtins. + +2025-09-09 David Faust + + PR debug/121411 + * dwarf2ctf.cc (ctf_get_AT_data_member_location) Use AT_unsigned + when fetching AT_bit_offset and AT_data_member_location. Simplify. + (ctf_die_bitsize): Return unsigned HOST_WIDE_INT instead of + uint32_t. + (gen_ctf_base_type, gen_ctf_sou_type, gen_ctf_enumeration_type): + Adapt accordingly. + +2025-09-09 Paul-Antoine Arras + + * config/riscv/autovec-opt.md (*vfwsub_vf_): New pattern to + combine float_extend + vec_duplicate + vfwsub.vv into vfwsub.vf. + +2025-09-09 Jakub Jelinek + + PR c++/121678 + * tree.cc (staticp): Handle REALPART_EXPR and IMAGPART_EXPR. + +2025-09-09 Jonathan Wakely + + * doc/invoke.texi (Warning Options): Note that an option + enabled by -Wextra is for C and ObjC only. + +2025-09-09 Paul-Antoine Arras + + * config/riscv/autovec-opt.md (*vfwadd_wf_): New pattern to + combine float_extend + vec_duplicate + vfadd.vv into vfwadd.wf. + * config/riscv/vector.md + (@pred_single_widen__scalar): Swap and reorder + operands to match the RTL emitted by expand. + +2025-09-09 Kyrylo Tkachov + + Revert: + 2025-07-11 Kyrylo Tkachov + + * config/aarch64/aarch64-simd.md (*bcaxqdi4): New + define_insn_and_split. + +2025-09-09 Tamar Christina + + Revert: + 2025-09-08 Richard Biener + + PR tree-optimization/121829 + * tree-vect-loop-manip.cc (vect_remove_forwarder): New + function. + (slpeel_tree_duplicate_loop_to_edge_cfg): Use it. + +2025-09-09 H.J. Lu + + PR target/121861 + * config/i386/i386.cc (ix86_optab_supported_p): Drop + !flag_trapping_math check for floor_optab, ceil_optab and + btrunc_optab. + +2025-09-09 liuhongt + + * config/i386/i386-expand.cc (expand_vec_perm_vpermil): Extend + to handle V8SImode. + * config/i386/i386.cc (avx_vpermilp_parallel): Extend to + handle vector integer modes with same vector size and same + component size. + * config/i386/sse.md + (_vpermilp): Ditto. + (V48_AVX): New mode iterator. + (ssefltmodesuffix): Extend for V16SI/V8DI/V16SF/V8DF. + +2025-09-09 liuhongt + + * config/i386/i386.cc (ix86_vector_costs::add_stmt_cost): + Check permutation index for vec_perm, don't count it if we + know it's not a cross-lane permutation. + +2025-09-08 Richard Biener + + PR tree-optimization/107997 + PR tree-optimization/121844 + * tree-ssa-loop-ivopts.cc (allow_ip_end_pos_p): Do not allow + IP_END for latches ending with a control stmt. + (create_new_iv): Do not split the latch edge, instead assert + that's not necessary. + +2025-09-08 Paul-Antoine Arras + + * config/riscv/autovec-opt.md (*vfwadd_vf_): New pattern to + combine float_extend + vec_duplicate + vfwadd.vv into vfwadd.vf. + +2025-09-08 Anton Blanchard + + * config/riscv/riscv.cc (tt_ascalon_d8_tune_info): Increase branch_cost + from 3 to 4. + +2025-09-08 Richard Biener + + PR tree-optimization/121830 + * tree-vect-loop.cc (vect_analyze_scalar_cycles_1): Only + set STMT_VINFO_REDUC_DEF on reductions. + * tree-vect-slp.cc (vect_build_slp_tree_2): Identify reduction + PHIs by a set STMT_VINFO_REDUC_DEF instead of their def type. + +2025-09-08 Richard Biener + + PR tree-optimization/121829 + * tree-vect-loop-manip.cc (vect_remove_forwarder): New + function. + (slpeel_tree_duplicate_loop_to_edge_cfg): Use it. + +2025-09-08 Alex Coplan + + PR tree-optimization/114892 + * doc/invoke.texi (Developer Options): Document -folding option + for -fdump-tree-*. + +2025-09-08 Kugan Vivekanandarajah + + * ipa-cp.cc (gather_count_of_non_rec_edges): Check count + initialization before adding to total. + +2025-09-08 Paul-Antoine Arras + + * config/riscv/autovec-opt.md (*vfrsub_vf_): New pattern to + combine vec_duplicate + vfsub.vv into vfrsub.vf. + +2025-09-08 Paul-Antoine Arras + + * config/riscv/autovec-opt.md (*vfsub_vf_): New pattern to + combine vec_duplicate + vfsub.vv into vfsub.vf. + * config/riscv/vector.md (@pred__scalar): Allow VLS modes. + +2025-09-08 Paul-Antoine Arras + + * config/riscv/autovec-opt.md (*vfadd_vf_): New pattern to + combine vec_duplicate + vfadd.vv into vfadd.vf. + +2025-09-08 Paul-Antoine Arras + + * config/riscv/autovec-opt.md (*vfwmul_vf_): New pattern to + combine float_extend + vec_duplicate + vfmul.vv into vfmul.vf. + * config/riscv/vector.md (*@pred_dual_widen__scalar): + Swap operands to match the RTL emitted by expand, i.e. first + float_extend then vec_duplicate. + +2025-09-08 Paul-Antoine Arras + + * config/riscv/autovec-opt.md (*vfmin_vf_ieee_): Rename into... + (*v_vf_): New pattern to combine vec_duplicate + + vf{max,min}.vv (unspec) into vf{max,min}.vf. + +2025-09-08 Gerald Pfeifer + + * doc/extend.texi (SH Function Attributes): Remove reference to + GNU Binutils 2.7 requirement. + (H8/300 Variable Attributes): Ditto. + +2025-09-08 Andrew Pinski + + PR tree-optimization/87900 + * tree-ssa-strlen.cc (strlen_pass::handle_assign): Add RHS argument. + For empty constructor RHS, see if can combine with a previous malloc into + a calloc. + (strlen_pass::check_and_optimize_call): Update call to handle_assign; + passing NULL_TREE for RHS. + (strlen_pass::check_and_optimize_stmt): Update call to handle_assign. + +2025-09-08 Andrew Pinski + + PR tree-optimization/83022 + * tree-ssa-strlen.cc (last_stmt_ptr_check): New function. + (allow_memset_malloc_to_calloc): New function. + (strlen_pass::handle_builtin_memset): Check to see if it is a good + idea to do the malloc+memset->calloc optimization. + (printf_strlen_execute): Free post dom info. + +2025-09-08 Sam James + + * common.opt.urls: Regenerate. + 2025-09-07 Andrew Pinski PR tree-optimization/121841 diff --git a/gcc/DATESTAMP b/gcc/DATESTAMP index 535d724e1543..80c58c12bccf 100644 --- a/gcc/DATESTAMP +++ b/gcc/DATESTAMP @@ -1 +1 @@ -20250908 +20251009 diff --git a/gcc/Makefile.in b/gcc/Makefile.in index 4503dab60372..cf1408d56e29 100644 --- a/gcc/Makefile.in +++ b/gcc/Makefile.in @@ -613,6 +613,8 @@ tm_d_file_list=@tm_d_file_list@ tm_d_include_list=@tm_d_include_list@ tm_rust_file_list=@tm_rust_file_list@ tm_rust_include_list=@tm_rust_include_list@ +tm_jit_file_list=@tm_jit_file_list@ +tm_jit_include_list=@tm_jit_include_list@ build_xm_file_list=@build_xm_file_list@ build_xm_include_list=@build_xm_include_list@ build_xm_defines=@build_xm_defines@ @@ -917,6 +919,7 @@ TCONFIG_H = tconfig.h $(xm_file_list) TM_P_H = tm_p.h $(tm_p_file_list) $(TREE_H) TM_D_H = tm_d.h $(tm_d_file_list) TM_RUST_H = tm_rust.h $(tm_rust_file_list) +TM_JIT_H = tm_jit.h $(tm_jit_file_list) GTM_H = tm.h $(tm_file_list) insn-constants.h TM_H = $(GTM_H) insn-flags.h $(OPTIONS_H) @@ -977,11 +980,13 @@ C_TARGET_DEF = c-family/c-target.def target-hooks-macros.h COMMON_TARGET_DEF = common/common-target.def target-hooks-macros.h D_TARGET_DEF = d/d-target.def target-hooks-macros.h RUST_TARGET_DEF = rust/rust-target.def target-hooks-macros.h +JIT_TARGET_DEF = jit/jit-target.def target-hooks-macros.h TARGET_H = $(TM_H) target.h $(TARGET_DEF) insn-modes.h insn-codes.h C_TARGET_H = c-family/c-target.h $(C_TARGET_DEF) COMMON_TARGET_H = common/common-target.h $(INPUT_H) $(COMMON_TARGET_DEF) D_TARGET_H = d/d-target.h $(D_TARGET_DEF) RUST_TARGET_H = rust/rust-target.h $(RUST_TARGET_DEF) +JIT_TARGET_H = jit/jit-target.h $(JIT_TARGET_DEF) MACHMODE_H = machmode.h mode-classes.def HOOKS_H = hooks.h HOSTHOOKS_DEF_H = hosthooks-def.h $(HOOKS_H) @@ -1297,6 +1302,9 @@ CXX_TARGET_OBJS=@cxx_target_objs@ # Target specific, D specific object file D_TARGET_OBJS=@d_target_objs@ +# Target specific, JIT specific object file +JIT_TARGET_OBJS=@jit_target_objs@ + # Target specific, Fortran specific object file FORTRAN_TARGET_OBJS=@fortran_target_objs@ @@ -1796,6 +1804,7 @@ OBJS = \ tree-ssa-strlen.o \ tree-ssa-structalias.o \ pta-andersen.o \ + gimple-ssa-pta-constraints.o \ tree-ssa-tail-merge.o \ tree-ssa-ter.o \ tree-ssa-threadbackward.o \ @@ -1908,6 +1917,9 @@ OBJS-libcommon-target = $(common_out_object_file) prefix.o \ # This lists all host objects for the front ends. ALL_HOST_FRONTEND_OBJS = $(foreach v,$(CONFIG_LANGUAGES),$($(v)_OBJS)) +# All auto-profile files +ALL_FDAS = $(foreach v,$(CONFIG_LANGUAGES),$($(v)_FDAS)) + ALL_HOST_BACKEND_OBJS = $(GCC_OBJS) $(OBJS) $(OBJS-libcommon) \ $(OBJS-libcommon-target) main.o c-family/cppspec.o \ $(COLLECT2_OBJS) $(EXTRA_GCC_OBJS) $(GCOV_OBJS) $(GCOV_DUMP_OBJS) \ @@ -1918,8 +1930,8 @@ ALL_HOST_BACKEND_OBJS = $(GCC_OBJS) $(OBJS) $(OBJS-libcommon) \ # is likely the most exercised during the build ifeq ($(if $(wildcard ../stage_current),$(shell cat \ ../stage_current)),stageautofeedback) -$(ALL_HOST_BACKEND_OBJS): ALL_COMPILERFLAGS += -fauto-profile=cc1plus.fda -$(ALL_HOST_BACKEND_OBJS): cc1plus.fda +$(ALL_HOST_BACKEND_OBJS): ALL_COMPILERFLAGS += -fauto-profile=all.fda +$(ALL_HOST_BACKEND_OBJS): all.fda endif # This lists all host object files, whether they are included in this @@ -2102,6 +2114,7 @@ tm.h: cs-tm.h ; @true tm_p.h: cs-tm_p.h ; @true tm_d.h: cs-tm_d.h ; @true tm_rust.h: cs-tm_rust.h ; @true +tm_jit.h: cs-tm_jit.h ; @true cs-config.h: Makefile TARGET_CPU_DEFAULT="" \ @@ -2141,6 +2154,11 @@ cs-tm_rust.h: Makefile HEADERS="$(tm_rust_include_list)" DEFINES="" \ $(SHELL) $(srcdir)/mkconfig.sh tm_rust.h +cs-tm_jit.h: Makefile + TARGET_CPU_DEFAULT="" \ + HEADERS="$(tm_jit_include_list)" DEFINES="" \ + $(SHELL) $(srcdir)/mkconfig.sh tm_jit.h + # Don't automatically run autoconf, since configure.ac might be accidentally # newer than configure. Also, this writes into the source directory which # might be on a read-only file system. If configured for maintainer mode @@ -2608,6 +2626,12 @@ default-d.o: config/default-d.cc $(COMPILE) $< $(POSTCOMPILE) +# Files used by the JIT language front end. + +default-jit.o: config/default-jit.cc + $(COMPILE) $< + $(POSTCOMPILE) + # Files used by the Rust language front end. default-rust.o: config/default-rust.cc @@ -2960,6 +2984,15 @@ s-rust-target-hooks-def-h: build/genhooks$(build_exeext) rust/rust-target-hooks-def.h $(STAMP) s-rust-target-hooks-def-h +jit/jit-target-hooks-def.h: s-jit-target-hooks-def-h; @true + +s-jit-target-hooks-def-h: build/genhooks$(build_exeext) + $(RUN_GEN) build/genhooks$(build_exeext) "JIT Target Hook" \ + > tmp-jit-target-hooks-def.h + $(SHELL) $(srcdir)/../move-if-change tmp-jit-target-hooks-def.h \ + jit/jit-target-hooks-def.h + $(STAMP) s-jit-target-hooks-def-h + # check if someone mistakenly only changed tm.texi. # We use a different pathname here to avoid a circular dependency. s-tm-texi: $(srcdir)/doc/../doc/tm.texi @@ -3157,8 +3190,8 @@ s-gtype: $(EXTRA_GTYPE_DEPS) build/gengtype$(build_exeext) \ -r gtype.state $(STAMP) s-gtype -generated_files = config.h tm.h $(TM_P_H) $(TM_D_H) $(TM_H) multilib.h \ - $(simple_generated_h) specs.h \ +generated_files = config.h tm.h $(TM_P_H) $(TM_D_H) $(TM_JIT_H) $(TM_H) \ + multilib.h $(simple_generated_h) specs.h \ tree-check.h genrtl.h insn-modes.h insn-modes-inline.h \ tm-preds.h tm-constrs.h \ $(ALL_GTFILES_H) gtype-desc.cc gtype-desc.h version.h \ @@ -3169,6 +3202,7 @@ generated_files = config.h tm.h $(TM_P_H) $(TM_D_H) $(TM_H) multilib.h \ c-family/c-target-hooks-def.h d/d-target-hooks-def.h \ $(TM_RUST_H) rust/rust-target-hooks-def.h \ case-cfn-macros.h \ + jit/jit-target-hooks-def.h case-cfn-macros.h \ cfn-operators.pd omp-device-properties.h # @@ -3302,8 +3336,8 @@ build/genrecog.o : genrecog.cc $(RTL_BASE_H) $(BCONFIG_H) $(SYSTEM_H) \ $(CORETYPES_H) $(GTM_H) errors.h $(READ_MD_H) $(GENSUPPORT_H) \ $(HASH_TABLE_H) inchash.h build/genhooks.o : genhooks.cc $(TARGET_DEF) $(C_TARGET_DEF) \ - $(COMMON_TARGET_DEF) $(D_TARGET_DEF) $(RUST_TARGET_DEF) $(BCONFIG_H) \ - $(SYSTEM_H) errors.h + $(COMMON_TARGET_DEF) $(D_TARGET_DEF) $(RUST_TARGET_DEF) $(JIT_TARGET_DEF) \ + $(BCONFIG_H) $(SYSTEM_H) errors.h build/genmddump.o : genmddump.cc $(RTL_BASE_H) $(BCONFIG_H) $(SYSTEM_H) \ $(CORETYPES_H) $(GTM_H) errors.h $(READ_MD_H) $(GENSUPPORT_H) build/genmatch.o : genmatch.cc $(BCONFIG_H) $(SYSTEM_H) $(CORETYPES_H) \ @@ -4744,6 +4778,9 @@ paranoia.o: $(srcdir)/../contrib/paranoia.cc $(CONFIG_H) $(SYSTEM_H) $(TREE_H) paranoia: paranoia.o real.o $(LIBIBERTY) g++ -o $@ paranoia.o real.o $(LIBIBERTY) +all.fda: $(ALL_FDAS) + $(PROFILE_MERGER) $(ALL_FDAS) --output_file all.fda -gcov_version 2 + # These exist for maintenance purposes. CTAGS=@CTAGS@ diff --git a/gcc/aclocal.m4 b/gcc/aclocal.m4 index 762e9490b6a8..e44fc5fb2ab6 100644 --- a/gcc/aclocal.m4 +++ b/gcc/aclocal.m4 @@ -69,6 +69,7 @@ m4_include([../ltversion.m4]) m4_include([../lt~obsolete.m4]) m4_include([../config/acx.m4]) m4_include([../config/cet.m4]) +m4_include([../config/clang-plugin.m4]) m4_include([../config/codeset.m4]) m4_include([../config/depstand.m4]) m4_include([../config/dfp.m4]) diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 063d6a73db8b..08d714855aba 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,1626 @@ +2025-10-07 Eric Botcazou + + Revert: + 2025-10-05 Eric Botcazou + + PR ada/118343 + * Makefile.rtl (LLVM_BUILD): Delete. + +2025-10-06 Marc Poulhiès + Éric Botcazou + + * gcc-interface/decl.cc (get_extended_unconstrained_array): Handle + array subtype. + +2025-10-06 Eric Botcazou + + * gcc-interface/utils.cc (convert): Also extract the _Parent field + to implement upcasting in the case where only the sizes match. + +2025-10-06 Marc Poulhiès + + * gcc-interface/trans.cc (Attribute_to_gnu): Handle + extended access. + +2025-10-06 Ronan Desplanques + + * fmap.adb (File_Mapping, Path_Mapping): Fix instantiations. + (Add_To_File_Map): Use Table.Table.Append. + +2025-10-06 Ronan Desplanques + + * fmap.ads (Add_Forbidden_File_Name): Remove obsolete code. + * fmap.adb (Forbidden_Names, Add_Forbidden_File_Name, + Mapped_Path_Name, Reset_Tables): Remove obsolete code. + +2025-10-06 Tonu Naks + + * doc/gnat_ugn/building_executable_programs_with_gnat.rst: refine + description of -gnatwr + * gnat_ugn.texi: Regenerate. + +2025-10-05 Franck Behaghel + + PR ada/110314 + * sem_ch4.adb (Analyze_Allocator): Add call to New_Copy_Tree. + +2025-10-05 Eric Botcazou + + PR ada/112446 + * usage.adb (Usage): Add 'z' to the list of 'g' style. + +2025-10-05 Eric Botcazou + + PR ada/118343 + * Makefile.rtl (LLVM_BUILD): Delete. + +2025-10-04 Eric Botcazou + + PR ada/64869 + * sem_ch7.adb (Install_Private_Declarations): Also propagate the + Current_Use_Clause from partial to full view. + (Uninstall_Declarations): Extend implementation of RM 8.4(8.1/3) + subclause to all primitive subprograms. + +2025-09-30 Eric Botcazou + + PR ada/117517 + * sem_attr.adb (Resolve_Attribute) : Try to + resolve the reducer first. Fix casing of error message. + +2025-09-29 Tonu Naks + + * doc/gnat_rm/implementation_advice.rst: PolyORB + * doc/gnat_rm/implementation_defined_characteristics.rst: PolyORB + * doc/gnat_rm/implementation_defined_pragmas.rst: ASIS + * doc/gnat_rm/obsolescent_features.rst: PolyORB + * doc/gnat_rm/specialized_needs_annexes.rst: PolyORB + * doc/gnat_rm/the_gnat_library.rst: PolyORB + * doc/gnat_ugn/building_executable_programs_with_gnat.rst: ASIS + * gnat_rm.texi: Regenerate. + * gnat_ugn.texi: Regenerate. + +2025-09-29 Piotr Trojanek + + * sem_prag.adb (Analyze_Pre_Post_Condition): Handle contracts on + generic formal subprograms like on declarations of access-to-subprogram + types. + +2025-09-29 Piotr Trojanek + + * exp_util.adb (Attribute_Constrained_Static_Value): Special case + stand-alone objects for GNATprove. + +2025-09-29 Ronan Desplanques + + * sem_ch3.adb (Process_Full_View): Fix error message. + +2025-09-29 Javier Miranda + + * aspects.adb (Get_Aspect_Id): Return No_Aspect for Unsigned_Base_Range + name. + * sem_prag.adb (Analyze_Pragma): Disable pragma Unsigned_Base_Range. + * par-ch4.adb (Scan_Apostrophe): Disable attribute Unsigned_Base_Range. + * doc/gnat_rm/gnat_language_extensions.rst: Remove documentation + of aspect unsigned base range. + * gnat_rm.texi: Regenerate. + +2025-09-29 Ghjuvan Lacambre + + * exp_ch6.adb (Validate_Subprogram_Calls): Do not Check_Calls in CodePeer_Mode. + (Check_Calls): Remove CodePeer_Mode special case. + +2025-09-29 Viljar Indus + + * doc/gnat_rm/implementation_defined_pragmas.rst: update + rules for pragmas affected by assertion levels. + * gnat_rm.texi: Regenerate. + +2025-09-29 Viljar Indus + + * ghost.adb (Check_Procedure_Call_Policies): Update the check + between the levels of the argument and the call. + +2025-09-23 Bob Duff + + * exp_ch6.adb (Prepend_Constructor_Procedure_Prologue): + Push/Pop the procedure scope, so that temps created herein + get the right Scope. + +2025-09-23 Jose Ruiz + + * libgnarl/s-stusta.adb (Report_Impl): Export a copy of + the current stack usage while holding the runtime lock. + (Report_For_Task): Do not compute stack usage for a task + that has not yet initialized its stack with the expected + pattern. + (Report_For_Task): The Stack_Analyzer object for the + environment task is not part of its ATCB. For the rest of + the tasks wait until we have initialized the stack pattern + before computing stack usage. + (Report_All_Tasks, Get_All_Tasks_Usage, + Get_Current_Task_Usage): Adapt to the new interface from + Report_Impl. Take into account that Result_Array can be + null. When we don't store stack results for a task we + need to compute it when requested. + (Print): Handle the case when we don't know the stack + usage to be reported. + * libgnat/s-stausa.adb (Initialize): For the environment + task, approximate the stack origin with the topmost + stack address that is known. + * libgnat/s-stausa.ads: Clarify comments. + +2025-09-23 Denis Mazzucato + + * sem_util.adb (Ultimate_Prefix): Clean-up the loop condition by using + Has_prefix instead of an explicit list of node kinds. + +2025-09-23 Denis Mazzucato + + * sem_ch10.adb (Install_Siblings): Fix condition to emit warning. + +2025-09-23 Viljar Indus + + * sem_case.adb (Is_Case_Choice_Pattern): Return False for allocators. + +2025-09-23 Douglas B Rupp + + * libgnat/system-vxworks7-aarch64-rtp-smp.ads (Linker_Options): + Remove pragma for RTP specs. + * libgnat/system-vxworks7-ppc-rtp-smp.ads: Likewise. + * libgnat/system-vxworks7-ppc64-rtp-smp.ads: Likewise. + * libgnat/system-vxworks7-x86-rtp-smp.ads: Likewise. + * libgnat/system-vxworks7-x86_64-rtp-smp.ads: Likewise. + +2025-09-23 Gary Dismukes + + * doc/gnat_ugn/building_executable_programs_with_gnat.rst: Add doc + for addition of -gnateG options b, c, and e. + * doc/gnat_ugn/the_gnat_compilation_model.rst: Add doc for "-e" optionn + on gnatprep and integrated preprocessing. Add doc for addition of + -gnateG options b, c, and e. + * gprep.adb (Scan_Command_Line): Add 'e' to the list of allowed switch + letters in the string passed to GNAT.Command_Line.Getopt. Set the flag + Opt.Empty_Comment_Deleted_Lines to True when the "-e" switch is found. + (Usage): Output a switch description for the "-e" switch. + * opt.ads: Add new flag variable Empty_Comment_Deleted_Lines. Add + "GNAT" to the "GNATPREP" comment line for Comment_Deleted_Lines. + * prep.adb (Output_Line): Add handling for Empty_Comment_Deleted_Lines, + outputting comment lines consisting of "--!" for lines that are removed + in the preprocessed source file when Empty_Comment_Deleted_Lines is True. + * prepcomp.adb (Preproc_Data): Add Empty_Comments component (defaulting + to False). + (No_Preproc_Data): Add association for Empty_Comments component. + (Parse_Preprocessing_Data_File): Add handling for new switch -e. + (Prepare_To_Preprocess): Add logic for setting the new option + Empty_Comment_Deleted_Lines (and making it the default for + integrated preprocessing in the absence of other switches). + * switch-c.adb (Scan_Front_End_Switches): Add support adding a single + character 'b', 'c', 'e' to the "-gnateG" switch, to select any of the + three options for replacing deleted lines in preprocessing output file. + * usage.adb: Update usage info for -gnateG, to reflect the option of + appending b, c, or e to the switch. + * gnat_ugn.texi: Regenerate. + +2025-09-23 Piotr Trojanek + + * sprint.adb (Sprint_Node_Actual): Print finally statements, if + present. + +2025-09-23 Javier Miranda + + * sem_util.adb (Is_Partially_Initialized_Type): Return False + for record types with no components. + +2025-09-23 Steve Baird + + * doc/gnat_rm/implementation_defined_aspects.rst: Document the + Extended_Access aspect. + * gnat_rm.texi: Regenerate. + * gnat_ugn.texi: Regenerate. + +2025-09-22 Eric Botcazou + + PR ada/121968 + * sem_ch12.adb (Associations.Find_Assoc): Add guard for clauses. + * sem_dim.adb (Analyze_Dimension_Array_Aggregate): Add test for + N_Iterated_Component_Association nodes. + +2025-09-19 Eric Botcazou + + * gcc-interface/gigi.h (create_var_decl): Add LINKONCE_FLAG boolean + parameter. + (create_subprog_decl): Likewise. + * gcc-interface/decl.cc (gnat_to_gnu_entity): Adjust calls to + create_var_decl and create_subprog_decl. + (elaborate_expression_1): Likewise. + * gcc-interface/trans.cc (gigi): Likewise. + (build_raise_check): Likewise. + (Subprogram_Body_to_gnu): Likewise. + (create_temporary): Likewise. + (Exception_Handler_to_gnu): Likewise. + (Compilation_Unit_to_gnu): Likewise. + (gnat_to_gnu): Likewise. + (use_alias_for_thunk_p): Return false for a one-only target. + * gcc-interface/utils.cc (maybe_pad_type): Adjust call to + create_var_decl. + (create_var_decl): Add LINKONCE_FLAG boolean parameter. + (create_subprog_decl): Likewise. + +2025-09-19 Marc Poulhiès + + * gcc-interface/ada-tree.h (TYPE_EXTENDED_POINTER_P): New. + (TYPE_IS_EXTENDED_POINTER_P): New. + (TYPE_EXTENDED_UNCONSTRAINED_ARRAY): New. + (SET_TYPE_EXTENDED_UNCONSTRAINED_ARRAY): New. + (TYPE_DUMMY_EXT_POINTER_TO): New. + (SET_TYPE_DUMMY_EXT_POINTER_TO): New. + * gcc-interface/decl.cc (get_extended_unconstrained_array): New. + (gnat_to_gnu_entity): Handle extended access type. + (get_unpadded_extended_type): New. + (gnat_to_gnu_component_type): Handle extended access type. + (build_template_type): New. + (gnat_to_gnu_field): Handle extended access type. + (validate_size): Likewise. + (set_rm_size): Likewise. + (copy_and_substitute_in_layout): Likewise. + (rm_size): Likewise. + * gcc-interface/gigi.h (get_unpadded_extended_type): New. + (build_template_type): New. + (build_dummy_unc_pointer_types_ext): New. + (finish_extended_pointer_type): New. + (build_unc_object_type_from_ptr): Rename first parameter. + * gcc-interface/misc.cc (gnat_print_type): Handle extended access type. + * gcc-interface/trans.cc (Identifier_to_gnu): Likewise. + (Attribute_to_gnu): Likewise. + (gnat_to_gnu): Likewise. + * gcc-interface/utils.cc (convert_to_fat_pointer): Assert if converting an + extended pointer. + (build_dummy_unc_pointer_types_ext): New. + (finish_extended_pointer_type): New. + (finish_record_type): Handle extended access type. + (build_unc_object_type_from_ptr): Likewise. + (convert_to_extended_pointer): New. + (convert): Handle extended access type. + (gnat_pushdecl): Likewise. + (maybe_pad_type): Likewise. + * gcc-interface/utils2.cc (build_unary_op): Likewise. + (build_binary_op): Likewise. + (build_allocator): Likewise. + (gnat_save_expr): Likewise. + (gnat_protect_expr): Likewise. + (gnat_stabilize_reference_1): Likewise. + +2025-09-19 Eric Botcazou + + * sem_ch4.adb (Analyze_Selected_Component): Bail out if the prefix + has Void_Type. + +2025-09-19 Piotr Trojanek + + * sem_ch4.adb (Analyze_User_Defined_Binary_Op): Remove declare block. + +2025-09-19 Eric Botcazou + + * doc/gnat_rm/gnat_language_extensions.rst (Structural Generic + Instantiation): New entry + * einfo.ads (Is_Link_Once): New flag defined in entities. + * sinfo.ads (Is_Structural): New flag defined in instantiations. + * gen_il-fields.ads (Opt_Field_Enum): Add Is_Link_Once and + Is_Structural. + * gen_il-gen-gen_entities.adb (Entity_Kind): Add Is_Link_Once + semantic flag. + * gen_il-gen-gen_nodes.adb (N_Generic_Instantiation): Move up + Parent_Spec field and add Is_Structural semantic flag. + * frontend.adb: Add with clause for Sem_Ch12. + (Frontend): After analysis is complete and bodies are instantiated, + call Sem_Ch12.Mark_Link_Once on the declarations of the main unit. + * par.adb (P_Qualified_Simple_Name): Delete. + (P_Qualified_Simple_Name_Resync): Likewise + (P_Exception_Name): New function declaration. + (P_Label_Name): Likewise. + (P_Loop_Name): Likewise. + (P_Generic_Unit_Name): Likewise. + (P_Library_Unit_Name): Likewise. + (P_Package_Name): Likewise. + (P_Parent_Unit_Name): Likewise. + (P_Subtype_Name): Likewise. + (P_Subtype_Name_Resync): Likewise. + * par-ch3.adb (P_Subtype_Mark_Resync): Replace call to + P_Qualified_Simple_Name_Resync by P_Subtype_Name_Resync. + (P_Identifier_Declarations): Replace call to + P_Qualified_Simple_Name_Resync by P_Exception_Name. + (P_Derived_Type_Def_Or_Private_Ext_Decl): Replace call to + P_Qualified_Simple_Name by P_Subtype_Name. + (P_Interface_Type_Definition): Replace calls to + P_Qualified_Simple_Name by P_Subtype_Name. + * par-ch4.adb (P_Reduction_Attribute_Reference): Move around and + change name of parameter. + (P_Name): Document new grammar rule and make a couple of tweaks. + (P_Exception_Name): New function. + (P_Label_Name): Likewise. + (P_Loop_Name): Likewise. + (P_Generic_Unit_Name): Likewise. + (P_Library_Unit_Name): Likewise. + (P_Package_Name): Likewise. + (P_Parent_Unit_Name): Likewise. + (P_Subtype_Name): Likewise. + (P_Subtype_Name_Resync): Likewise. + (P_Qualified_Simple_Name): Rename into... + (P_Simple_Name): ...this. + (P_Qualified_Simple_Name_Resync): Rename into... + (P_Simple_Name_Resync): ...this. Accept left parenthesis and + dot as name extensions. + (P_Allocator): Replace call to P_Qualified_Simple_Name_Resync + by P_Subtype_Name_Resync. + * par-ch5.adb (P_Goto_Statement): Replace call to + P_Qualified_Simple_Name by P_Label_Name. + (Parse_Loop_Flow_Statement): Replace call to + P_Qualified_Simple_Name by P_Loop_Name. + * par-ch6.adb (P_Subprogram): Replace call to + P_Qualified_Simple_Name by P_Generic_Unit_Name. + * par-ch7.adb (P_Package): Replace calls to + P_Qualified_Simple_Name by P_Package_Name and P_Generic_Unit_Name. + * par-ch8.adb (P_Use_Package_Clause): Replace calls to + P_Qualified_Simple_Name by P_Package_Name. + * par-ch9.adb (P_Task): Replace call to + P_Qualified_Simple_Name by P_Subtype_Name. + (P_Protected): Likewise. + * par-ch10.adb (P_Context_Clause): Replace call to + P_Qualified_Simple_Name by P_Library_Unit_Name. + (P_Subunit): Replace call to P_Qualified_Simple_Name by + P_Parent_Unit_Name. + * par-ch12.adb (P_Generic): Replace call to + P_Qualified_Simple_Name by P_Generic_Unit_Name. + (P_Formal_Derived_Type_Definition): Replace call to + P_Qualified_Simple_Name by P_Subtype_Name. + (P_Formal_Package_Declaration): Replace call to + P_Qualified_Simple_Name by P_Generic_Unit_Name. + * sem_ch4.adb: Add with and use clauses for Sem_Ch12. + (Analyze_Call): Accept implicit instantiations with -gnatX0. + (Analyze_Indexed_Component_Form): Likewise. + * sem_ch8.adb (Analyze_Use_Package): Add guard before inserting + a with clause automatically when there is a use clause. + (Check_In_Previous_With_Clause): Retrieve original names. + (Check_Library_Unit_Renaming): Deal with structural instances. + (End_Use_Type): Minor tweak. + * sem_ch10.adb (Analyze_With_Clause): Remove useless test and + call Defining_Entity_Of_Instance. + * sem_ch12.ads (Build_Structural_Instantiation): New function. + (Mark_Link_Once): New procedure. + * sem_ch12.adb: Add with and use clauses for Exp_Dbug. + (Analyze_Associations): Add support for structural instantiations. + (Analyze_Package_Instantiation): Likewise. + (Analyze_Subprogram_Instantiation): Likewise. + (Analyze_Structural_Associations): New procedure. + (Need_Subprogram_Instance_Body): Return True for instantiation is + in the auxiliary declarations of the main unit. + (Build_Structural_Instantiation): New function. + (Mark_Link_Once): New procedure. + * sem_util.ads (Add_Local_Declaration): New procedure. + (Defining_Entity_Of_Instance): New function. + * sem_util.adb (Add_Local_Declaration): New procedure. + (Defining_Entity_Of_Instance): New function. + * gnat_rm.texi: Regenerate. + * gnat_ugn.texi: Regenerate. + +2025-09-19 Ronan Desplanques + + * aspects.ads: Fix comment. + +2025-09-19 Ronan Desplanques + + * aspects.ads: Remove comment. + +2025-09-19 Marc Poulhiès + + * libgnat/s-putima.ads (Ext_Access_Pointer): New. + (Put_Image_Extended_Access_Pointer): New. + * libgnat/s-putima.adb (Ext_Acc_Instance): New. + (Put_Image_Extended_Access_Pointer): New. + * rtsfind.ads (RE_Id, RE_Unit_Table): Set value for + RE_Put_Image_Extended_Access_Pointer. + * exp_put_image.adb (Build_Elementary_Put_Image_Call): Handle extended + access. + +2025-09-19 Marc Poulhiès + + * fe.h (Is_Extended_Access_Type): Add C bindings. + * sem_util.ads (Is_Extended_Access_Type): Add comment that any + change to the function must take care of the C binding. + +2025-09-19 Marc Poulhiès + + * layout.adb (Layout_Type): Adjust comment and code extended + accesses. + +2025-09-19 Ronan Desplanques + + * sem_ch3.adb (Add_Tag): Remove superfluous statements. + +2025-09-19 Steve Baird + + * exp_attr.adb (Interunit_Ref_OK): Treat a subunit like a body. + (Build_And_Insert_Type_Attr_Subp): When climbing up the + tree, go from an N_Subunit node to its stub (instead of to the + subunit's N_Compilation_Unit node). + +2025-09-19 Gary Dismukes + + * sem_attr.adb (Eval_Attribute): In the case of a VADS-specific + size attribute, only fold to the object size when the Esize field + is known. + +2025-09-16 Ronan Desplanques + + * exp_strm.ads (Get_Primitives): New function. + * exp_strm.adb (Get_Primitives): Likewise. + (Build_Elementary_Input_Call, Build_Elementary_Write_Call): use + Get_Primitives. + (Has_Stream_Standard_Rep): Add formal parameter and rename to... + (Is_Stream_Standard_Rep): New function. + * sem_ch13.adb (Analyze_Attribute_Definition_Clause): Fix error + emission. + +2025-09-16 Gary Dismukes + + Revert: + 2025-09-15 Gary Dismukes + + * exp_ch6.ads (Make_Build_In_Place_Call_In_Allocator): Simplify comment. + * exp_ch6.adb (Make_Build_In_Place_Call_In_Allocator): Remove obsolete + comment about not being able to allocate fixed-size controlled results + on the caller side, and replace another obsolete comment with a simpler + comment. Call Build_Allocate_Deallocate_Proc when the function doesn't + need a BIPalloc formal to ensure that function results with controlled + parts allocated on the caller side will be chained for finalization. + (Make_Build_In_Place_Call_In_Object_Declaration): Call Needs_BIP_Collection + on the function's Entity_Id rather than the function call. + (Needs_BIP_Collection): If a BIP function doesn't need a BIPalloc formal + then it doesn't need a BIP collection either; return False in that case. + (Needs_BIP_Alloc_Form): Remove test of Needs_BIP_Collection. + * exp_ch7.adb (Expand_Cleanup_Actions): Move test of Uses_Sec_Stack + to be the first conjunct in setting of Needs_Sec_Stack_Mark, and put + the other tests in a disjunction subsidiary to that. Improve preceding + comment. + +2025-09-16 Iain Sandoe + + PR ada/114065 + * libgnarl/s-osinte__darwin.adb: Add and reference clause + for Interfaces.C, remove clause for Interfaces.C.Extensions. + +2025-09-15 Eric Botcazou + + PR ada/114065 + PR ada/121953 + * Makefile.rtl (LIBGNAT_TARGET_PAIRS) [x32-linux]: Replace + libgnarl/s-osinte__x32.adb with libgnarl/s-osinte__posix.adb. + * libgnarl/s-osinte__x32.adb: Delete. + +2025-09-15 Eric Botcazou + + * gcc-interface/trans.cc (gnat_to_gnu) + : Deal with objects whose elaboration + is deferred. + (process_freeze_entity): Deal with renamed objects whose elaboration + is deferred. + +2025-09-15 Gary Dismukes + + * exp_ch6.ads (Make_Build_In_Place_Call_In_Allocator): Simplify comment. + * exp_ch6.adb (Make_Build_In_Place_Call_In_Allocator): Remove obsolete + comment about not being able to allocate fixed-size controlled results + on the caller side, and replace another obsolete comment with a simpler + comment. Call Build_Allocate_Deallocate_Proc when the function doesn't + need a BIPalloc formal to ensure that function results with controlled + parts allocated on the caller side will be chained for finalization. + (Make_Build_In_Place_Call_In_Object_Declaration): Call Needs_BIP_Collection + on the function's Entity_Id rather than the function call. + (Needs_BIP_Collection): If a BIP function doesn't need a BIPalloc formal + then it doesn't need a BIP collection either; return False in that case. + (Needs_BIP_Alloc_Form): Remove test of Needs_BIP_Collection. + * exp_ch7.adb (Expand_Cleanup_Actions): Move test of Uses_Sec_Stack + to be the first conjunct in setting of Needs_Sec_Stack_Mark, and put + the other tests in a disjunction subsidiary to that. Improve preceding + comment. + +2025-09-15 Eric Botcazou + + * checks.adb (Apply_Discriminant_Check): Remove undocumented test + on Is_Aliased_View applied to the left-hand side to skip the check + in the case where the subtypes are the same, and replace it with a + test that the subtypes are constrained. + +2025-09-15 Jose Ruiz + + * doc/gnat_rm/security_hardening_features.rst: + clarify that hardening options are not supported by the + LLVM back end. + * gnat_rm.texi: Regenerate. + * gnat_ugn.texi: Regenerate. + +2025-09-15 Viljar Indus + + * sem_prag.adb (Analyze_Pragma): Disable context checks for + the preanalysis of the expression for Loop_Invariant pragmas + as the ghost region for the pragma has not been set up yet. + +2025-09-15 Viljar Indus + + * sem_prag.adb (Get_Applicable_Policy): Match assertion levels + by name. + +2025-09-15 Steve Baird + + * freeze.adb (Freeze_Entity): In the case of an anonymous + access-to-subprogram type where Do_Freeze_Profile is True, freeze + the designated subprogram type. + (Should_Freeze_Type): Do not call Unit_Declaration_Node with + a parentless argument. + * sem_ch3.adb (Analyze_Object_Declaration): When calling + Freeze_Before, override the default value for Do_Freeze_Profile. + This is needed in some cases to prevent premature freezing in the + case of an object of an anonymous access-to-subprogram type. + +2025-09-15 Viljar Indus + + * sem_prag.adb (Analyze_Pragma): Add ghost level check to + Assertion_Policy. + +2025-09-15 Viljar Indus + + * ghost.adb (Check_Assignment_Policies): The level of the assignee + should depend on the level of the region. + +2025-09-15 Viljar Indus + + * ghost.adb (Is_Ok_Pragma): Remove calls to Check_Policies. + +2025-09-15 Viljar Indus + + * contracts.adb: Update SPARK RM reference numbers. + * freeze.adb: Likewise. + * ghost.adb: Likewise. + * ghost.ads: Likewise. + * sem_ch12.adb: Likewise. + * sem_ch3.adb: Likewise. + * sem_ch6.adb: Likewise. + * sem_prag.adb: Likwise. + * sem_res.adb: Likewise. + +2025-09-15 Viljar Indus + + * sem_prag.adb (Check_Inconsistent_Argument_Ghostliness): + new method for handling the ghost constency errors between + different arguments. Use this method in the processing for + pragmas Unused, Unrefefrenced, Unreferenced_Objects, Inline and + No_Return. + * sem_prag.ads (Suppressed_Ghost_Policy_Check_Pragma): add + missing entry for pragma Inline. + +2025-09-15 Viljar Indus + + * ghost.adb (Check_Assignee_Levels): Fix the condition and improve + error message handling. + +2025-09-15 Nicolas Boulenguez + + PR ada/114065 + * Makefile.rtl (GNATRTL_NONTASKING_OBJS): Add g-c_time$(objext) and + s-c_time$(objext). + (Aarch64/Android): Do not use s-osinte__android.adb. + (SPARC/Solaris): Do not use s-osprim__solaris.adb. + (x86/Solaris): Likewise. + (LynxOS178): Do not use s-parame__posix2008.ads. + (RTEMS): Likewise. + (x32/Linux): Likewise, as well as s-linux__x32.ads. Replace + s-osprim__x32.adb with s-osprim__posix.adb. + (LIBGNAT_OBJS): Remove cal.o. + * cal.c: Delete. + * doc/gnat_rm/the_gnat_library.rst (GNAT.C_Time): New entry. + (GNAT.Calendar): Do not mention the obsolete conversion functions. + * impunit.adb (Non_Imp_File_Names_95): Add g-c_time. + * libgnarl/a-exetim__posix.adb: Add with clause for System.C_Time + (Clock): Use type and functions from System.C_Time. + * libgnarl/s-linux.ads: Remove with clause for System.Parameters. + Remove declarations of C time types. + * libgnarl/s-linux__alpha.ads: Likewise. + * libgnarl/s-linux__android-aarch64.ads: Likewise. + * libgnarl/s-linux__android-arm.ads: Likewise. + * libgnarl/s-linux__hppa.ads: Likewise. + * libgnarl/s-linux__loongarch.ads: Likewise. + * libgnarl/s-linux__mips.ads: Likewise. + * libgnarl/s-linux__riscv.ads: Likewise. + * libgnarl/s-linux__sparc.ads: Likewise. + * libgnarl/s-osinte__aix.ads: Likewise. + * libgnarl/s-osinte__android.ads: Likewise. + * libgnarl/s-osinte__cheribsd.ads: Likewise. + * libgnarl/s-osinte__darwin.ads: Likewise. + * libgnarl/s-osinte__dragonfly.ads: Likewise. + * libgnarl/s-osinte__freebsd.ads: Likewise. + * libgnarl/s-osinte__gnu.ads: Likewise. + * libgnarl/s-osinte__hpux.ads: Likewise. + * libgnarl/s-osinte__kfreebsd-gnu.ads: Likewise. + * libgnarl/s-osinte__linux.ads: Likewise. + * libgnarl/s-osinte__lynxos178e.ads: Likewise. + * libgnarl/s-osinte__qnx.ads: Likewise. + * libgnarl/s-osinte__rtems.ads: Likewise. + * libgnarl/s-osinte__solaris.ads: Likewise. + * libgnarl/s-osinte__vxworks.ads: Likewise. + * libgnarl/s-qnx.ads: Likewise. + * libgnarl/s-linux__x32.ads: Delete. + * libgnarl/s-osinte__darwin.adb (To_Duration): Remove. + (To_Timespec): Likewise. + * libgnarl/s-osinte__aix.adb: Likewise. + * libgnarl/s-osinte__dragonfly.adb: Likewise. + * libgnarl/s-osinte__freebsd.adb: Likewise. + * libgnarl/s-osinte__gnu.adb: Likewise. + * libgnarl/s-osinte__lynxos178.adb: Likewise. + * libgnarl/s-osinte__posix.adb: Likewise. + * libgnarl/s-osinte__qnx.adb: Likewise. + * libgnarl/s-osinte__rtems.adb: Likewise. + * libgnarl/s-osinte__solaris.adb: Likewise. + * libgnarl/s-osinte__vxworks.adb: Likewise. + * libgnarl/s-osinte__x32.adb: Likewise. + * libgnarl/s-taprop__solaris.adb: Add with clause for System.C_Time. + (Monotonic_Clock): Use type and functions from System.C_Time. + (RT_Resolution): Likewise. + (Timed_Sleep): Likewise. + (Timed_Delay): Likewise. + * libgnarl/s-taprop__vxworks.adb: Likewise. + * libgnarl/s-tpopmo.adb: Likewise. + * libgnarl/s-osinte__android.adb: Delete. + * libgnat/g-c_time.ads: New file. + * libgnat/g-calend.adb: Delegate to System.C_Time. + * libgnat/g-calend.ads: Likewise. + * libgnat/g-socket.adb: Likewise. + * libgnat/g-socthi.adb: Likewise. + * libgnat/g-socthi__vxworks.adb: Likewise. + * libgnat/g-sothco.ads: Likewise. + * libgnat/g-spogwa.adb: Likewise. + * libgnat/s-c_time.adb: New file. + * libgnat/s-c_time.ads: Likewise. + * libgnat/s-optide.adb: Import nanosleep here. + * libgnat/s-os_lib.ads (time_t): Remove. + (To_Ada): Adjust. + (To_C): Likewise. + * libgnat/s-os_lib.adb: Likewise. + * libgnat/s-osprim__darwin.adb: Delegate to System.C_Time. + * libgnat/s-osprim__posix.adb: Likewise. + * libgnat/s-osprim__posix2008.adb: Likewise. + * libgnat/s-osprim__rtems.adb: Likewise. + * libgnat/s-osprim__unix.adb: Likewise. + * libgnat/s-osprim__solaris.adb: Delete. + * libgnat/s-osprim__x32.adb: Likewise. + * libgnat/s-parame.ads (time_t_bits): Remove. + * libgnat/s-parame__hpux.ads: Likewise. + * libgnat/s-parame__vxworks.ads: Likewise. + * libgnat/s-parame__posix2008.ads: Delete. + * s-oscons-tmplt.c (SIZEOF_tv_nsec): New constant. + * gnat_rm.texi: Regenerate. + +2025-09-15 Eric Botcazou + + * exp_util.adb (Finalize_Address): In an untagged derivation, call + Root_Type on the full view of the base type if the partial view is + itself not a derived type. + (Is_Untagged_Derivation): Minor formatting tweak. + +2025-09-15 Eric Botcazou + + * exp_util.ads (Unqualified_Unconditional_Parent): New function. + * exp_util.adb (Unconditional_Parent): Do not look through qualified + expressions. + (Unqualified_Unconditional_Parent): New function identical to the + original Unconditional_Parent. + * exp_aggr.adb (Convert_To_Assignments): Replace Unconditional_Parent + with Unqualified_Unconditional_Parent. + (Expand_Array_Aggregate): Likewse. + * exp_ch4.adb (Expand_N_Case_Expression): Likewise. + (Expand_N_If_Expression): Likewise. + * exp_ch6.adb (Expand_Ctrl_Function_Call): Do not bypass an enclosing + qualified expression in the parent chain. + +2025-09-15 Ronan Desplanques + + * doc/gnat_rm/gnat_language_extensions.rst: Fix section of Finalizable. + * gnat_rm.texi: Regenerate. + * gnat_ugn.texi: Regenerate. + +2025-09-15 Viljar Indus + + * sem_ch6.adb (Analyze_Expression_Function): Disable ghost + checks during the early freeze. + +2025-09-15 Steve Baird + + * aspects.ads: Define Super aspect; allow Initialize aspect + specification on a subprogram body. + * exp_attr.adb (Expand_N_Attribute_Reference): Rewrite Make + attribute implementation. + * exp_ch3.adb (Initialization_Control): Delete Initialization_Mode + and Make_Mode_Literal (those declarations were moved to the spec). + (Build_Record_Init_Proc): For a constructor type, component + initialization (other than for the tag component, if any) must be + performed by calling the single-argument constructor procedure. + (Requires_Init_Proc): Return True for a constructor type. + * exp_ch3.ads (Make_Mode_Literal, Initialization_Mode): New, moved + from the body of this package. + * exp_ch6.adb (Expand_N_Subprogram_Body): Declare, implement, and + call a new local procedure, Prepend_Constructor_Procedure_Prologue + in order to generate component initialization for a constructor + procedure. + * sem_attr.adb (Analyze_Attribute): Improve the error message + generated for a 'Make attribute reference if GNAT extensions are + not all allowed. + * sem_ch13.adb (Analyze_One_Aspect): Improved implementation of + aspect specifications for Initialize, Constructor, and Super + aspects. For Super, there was no previous implementation. + +2025-09-15 Viljar Indus + + * atree.adb (Mark_New_Ghost_Node): Set Is_Implicit_Ghost for + all newly created nodes. + * gen_il-fields.ads (Is_Implicit_Ghost): New attribute. + * gen_il-gen-gen_entities.adb (Entity_Kind): Add Is_Implicit_Ghost + attribute. + * ghost.adb (Ghost_Policy_In_Effect): Implicit_Ghost_Entities inside + pragmas get the ghost mode from the region isntead of the global + ghost policy. + (Ghost_Assertion_Level_In_Effect): New function that returns the + applicable assertion level for the given entity in a similar manner + as Ghost_Policy_In_Effect. + (Install_Ghost_Region): Set Is_Inside_Statement_Or_Pragma attribute. + (Mark_And_Set_Ghost_Body): Update the logic for deriving the ghost + region. + (Set_Ghost_Mode): Ignored pragmas attached to checked ghost entities + now create an ignored ghost region. Pragmas attached to non-ghost + entities create the ghost region based on the policy applied to the + given pragma. + * opt.ads (Ghost_Config_Type): add new attribute + Is_Inside_Statement_Or_Pragama to track whether we should take the + active ghost mode from the ghost region for implicit ghost entities. + * sem_prag.adb (Analyze_Pragma): Mark entities that have an explicit + ghost pragma as non-implicit ghost. + +2025-09-15 Sebastian Poeplau + + * doc/gnat_ugn/building_executable_programs_with_gnat.rst: + Remove the note on light runtimes. + +2025-09-15 Sebastian Poeplau + + * doc/gnat_ugn/building_executable_programs_with_gnat.rst: Move + recommendation of Toolchain_Name up. + * gnat_ugn.texi: Regenerate. + +2025-09-15 Vadim Godunko + + * bindgen.adb (Gen_Adafinal): Don't generate call of adafinal + when use of standard library suppressed. + +2025-09-15 Vadim Godunko + + * bindgen.adb (Gen_Adafinal): Don't generate code when + use of standard library suppressed. + +2025-09-15 Vadim Godunko + + * libgnat/a-swunau.ads (Set_Wide_String): New subprogram. + * libgnat/a-swunau.adb (Set_Wide_String): Likewise. + * libgnat/a-swunau__shared.adb (Set_Wide_String): Likewise. + * libgnat/a-szunau.ads (Set_Wide_Wide_String): Likewise. + * libgnat/a-szunau.adb (Set_Wide_Wide_String): Likewise. + * libgnat/a-szunau__shared.adb (Set_Wide_Wide_String): Likewise. + +2025-09-15 Viljar Indus + + * ghost.adb (Check_Ghost_Context): Avoid context checks when they + are globally disabled. + * sem.ads (Ghost_Context_Checks_Disabled): New flag to control + whether ghost context checks are activated or not. + * sem_prag.adb (Analyze_Pragma): Disable ghost context checks for + pragmas that determine their ghostliness based on one of its arguments. + +2025-09-15 Ronan Desplanques + + * sem_util.ads (Is_Ancestor_Package): Fix documentation comment. + * sem_util.adb (Is_Ancestor_Package): Rename local object. + +2025-09-11 Marc Poulhiès + + * libgnat/g-socket.adb (Listen_Socket): Change default value. + * libgnat/g-socket.ads (Listen_Socket): Likewise. + * s-oscons-tmplt.c (BACKLOG_MAX): New. + +2025-09-11 Marc Poulhiès + + * env.c (__gnat_clearenv): Adjust comment. + * libgnarl/a-intnam__bsd.ads: Fix copyright date. + +2025-09-11 Eric Botcazou + + * gcc-interface/decl.cc (gnat_to_gnu_entity) : Give a + warning for huge imported objects as well. + +2025-09-11 Eric Botcazou + + * gcc-interface/ada-tree.h (TYPE_ALIGN_OK): Delete. + * gcc-interface/decl.cc (gnat_to_gnu_entity): Do not set it. + * gcc-interface/gigi.h (standard_datatypes): Add ADT_tag_name_id. + (tag_name_id): New macro. + (type_is_tagged_or_cw_equivalent): New inline predicate. + * gcc-interface/trans.cc (gigi): Initialize tag_name_id. + (gnat_to_gnu) : Replace tests on + TYPE_ALIGN_OK with calls to type_is_tagged_or_cw_equivalent. + (addressable_p): Likewise. + * gcc-interface/utils.cc (convert): Likewise. + * gcc-interface/utils2.cc (build_binary_op): Likewise. + +2025-09-11 Eric Botcazou + + * gcc-interface/misc.cc (gnat_get_array_descr_info): In the record + type case, bail out if the original array type cannot be retrieved. + +2025-09-11 Eric Botcazou + + * gcc-interface/gigi.h (standard_datatypes): Add ADT_uns_mulv64_decl + and ADT_uns_mulv128_decl. + (uns_mulv64_decl): New macro. + (uns_mulv128_decl): Likewise. + * gcc-interface/trans.cc (gigi): Create the uns_mulv64_decl and + uns_mulv128_decl declarations. + (gnat_to_gnu) : Perform an overflow check for unsigned + integer addition, subtraction and multiplication if required. + : Perform an overflow check for unsigned integer + negation if required. + (build_unary_op_trapv): Add support for unsigned types. + (build_binary_op_trapv): Likewise. + : Perform the check if the LHS is zero in the signed + case as well. + +2025-09-11 Steve Baird + + * exp_ch6.adb (Expand_Actuals): After building the tree for a + predicate check, call Prepend_To instead of Append_To so that the + check is performed before, instead of after, the corresponding + parameter copy-back. + +2025-09-11 Viljar Indus + + * sem_prag.adb: Create a ghost region for pragma annotate before + analyzing its arguments. + +2025-09-11 Viljar Indus + + * sem_ch5.adb (Analyze_Iterator_Specification): Check ghost context + of Iterable functions when handling iterator specifications with an + Iterable aspect. + +2025-09-11 Viljar Indus + + * ghost.adb (Check_Ghost_Policy): Update coding style. + +2025-09-11 Viljar Indus + + * ghost.adb (Check_Ghost_Policy): Avoid triggering a ghost + policy error if the policy is referenced within the Iterable + aspect. + +2025-09-11 Viljar Indus + + * ghost.adb (Is_OK_Statement): Check the levels of the + assignee with the levels of the entity are ghost level dependent. + (Check_Assignement_Levels): New function for checking the level + dependencies. + +2025-09-11 Piotr Trojanek + + * einfo.ads (Ghost_Assertion_Level): Fix comment. + +2025-09-11 Viljar Indus + + * ghost.adb (Mark_And_Set_Ghost_Assignment): Create a ghost region + for an assigment irregardless of whether the expander is active. + Relocate the Assignment validity checks from Is_OK_Statement to + this subprogram. + +2025-09-11 Gary Dismukes + + * exp_aggr.adb (Build_Container_Aggr_Code.Build_Size_Expr): In the case + of an association with a single choice, only call Update_Choices when + the choice expression is nonstatic. + +2025-09-11 Bob Duff + + * exp_ch5.adb + (Expand_Assign_With_Target_Names.Replace_Target): + Remove code setting Entity to Empty. + * sinfo.ads (Has_Target_Names): + Improve comment: add "@" to clarify what "target name" + means, and remove the content-free phrase "and must + be expanded accordingly." + +2025-09-11 Bob Duff + + * einfo-utils.adb (Root_Type): Do not deal with missing Etype. + +2025-09-11 Bob Duff + + * einfo-utils.adb (Root_Type): Deal with missing Etype. + (Root_Type_If_Set): Likewise. + +2025-09-11 Javier Miranda + + * freeze.adb (Freeze_Entity): Protect call to Associated_Storage_Pool + since it cannot be used when the Etype is not set. + * sem_ch3.adb (Access_Type_Declaration): Ditto. + * sem_aux.adb (Is_Derived_Type): Protect call to Root_Type since it + cannot be used when the Etype is not set. + +2025-09-11 Tonu Naks + + * libgnat/s-crtl.ads: define unsigned + * libgnat/s-crtl__mingw.adb (read, write): change arg type + +2025-09-11 Bob Duff + + * freeze.adb (Freeze_Entity): Change "=" to ">=" in + size comparison for Implicit_Packing mode. + Keep it as "=" for giving error messages. + * opt.ads (Implicit_Packing): Minor: correct obsolete + comment. + +2025-09-11 Javier Miranda + + * sem_aggr.adb (Report_Null_Array_Constraint_Error): Adjust code + for reporting the error on enumeration types. + (Resolve_Null_Array_Aggregate): On multidimiensional arrays, avoid + reporting the same error several times. Flag the node as raising + constraint error when the bounds are known and some of them is + known to raise constraint error. + +2025-09-11 Bob Duff + + * atree.ads (Node_To_Fetch_From_If_Set): Alternative to + Node_To_Fetch_From that returns Empty in error cases. + For use only in Treepr. + * treepr.adb (Print_Entity_Field): Avoid printing field + if Node_To_Fetch_From_If_Set returns Empty. + * einfo-utils.ads (Base_Type_If_Set): Alternative to + Base_Type that returns Empty in error cases. + (Implementation_Base_Type_If_Set): Likewise. + (Root_Type_If_Set): Likewise. + (Underlying_Type): Use more accurate result subtype. + * einfo-utils.adb (Base_Type): Add Asserts. + (Implementation_Base_Type): Add Assert; minor cleanup. + (Root_Type): Add Assert; minor cleanup. Remove Assert that + is redundant with predicate. + (Base_Type_If_Set): Body of new function. + (Implementation_Base_Type_If_Set): Body of new function. + (Root_Type_If_Set): Body of new function. + +2025-09-11 Johannes Kliemann + + * adaint.c: Add functions to disable and enable signals on QNX. + * libgnarl/s-taprop__qnx.adb (Create_Task): Disable + signals when calling pthread_create. + +2025-09-11 Gary Dismukes + + * exp_ch4.adb (Expand_N_Op_Eq): Test for absence of user-defined + equality on type being compared (for both array and record types) + as a condition for checking for abstract equality on component + types. Add a "???" comment about current limitations on issuing + the new warning. + (Warn_On_Abstract_Equality_For_Component): Remove temporary disabling + of the warning. Improve comment on declaration. + +2025-09-11 Ronan Desplanques + + * sem_ch3.adb (Process_Discriminants, Process_Full_View): Fix + comments. + +2025-09-11 Denis Mazzucato + + * sem_attr.adb (Eval_Attribute): Remove strict analysis condition. + +2025-09-11 Denis Mazzucato + + * par-load.adb (Load): Better warning message. + +2025-09-11 Tucker Taft + + * exp_attr.adb + (Build_Array_VS_Func and Build_Record_VS_Func): Pass in the + Attr as the Related_Node parametr when calling + Make_Temporary for the Func_Id for the array and record + Valid_Scalars local functions. + +2025-09-11 Ronan Desplanques + + * sem_ch3.ads (Find_Type_Name): Improve documentation comment. + +2025-09-11 Gary Dismukes + + * exp_ch4.adb (Warn_On_Abstract_Equality_For_Component): Temporarily + disable warning. + +2025-09-10 Eric Botcazou + + PR ada/121885 + * snames.ads-tmpl (Pragma_Id): Rename Unknown_Pragma to + Pragma_Unknown for the sake of XSnamesT. + * snames.adb-tmpl (Get_Pragma_Id): Adjust to above renaming. + * snames.h-tmpl (Attribute_Id): Change underlying type to Byte. + (Get_Attribute_Id): Use Byte as return value. + (Pragma_Id): Change underlying type to Word. + (Get_Pragma_Id): Use Word as return value. + * types.h (Word): New typedef. + * exp_prag.adb (Expand_N_Pragma): Remove useless comment. + * par-prag.adb (Prag): Adjust to above renaming. + * sem_prag.adb (Analyze_Pragma): Likewise. + (Sig_Flags): Likewise. + +2025-09-09 Gary Dismukes + + * exp_ch4.adb (Expand_N_Op_Eq): Check for warning about call to + the abstract equality function of a component type, for both array + and record enclosing types. + (Warn_On_Abstract_Equality_For_Component): New procedure to issue + a warning when an abstract equality function of a component type + will be called and result in Program_Error. + +2025-09-09 Ronan Desplanques + + * sem_ch5.adb (Make_Call): Mark generated nodes as coming from source. + +2025-09-09 Ronan Desplanques + + * sem_ch3.adb (Analyze_Incomplete_Type_Decl): Remove incorrect + comment. + +2025-09-09 Viljar Indus + + * ghost.adb (Is_OK_Pragma): Use the + Suppressed_Ghost_Policy_Check_Pragma list for ignoring certain + pragmas. + * sem_prag.ads (Suppressed_Ghost_Policy_Check_Pragma): New variable + to store the pragmas that could be ignored when checking for + consitant ghost policy. + +2025-09-09 Tonu Naks + Eric Botcazou + + * libgnat/s-crtl.ads (read, write): remove import + * libgnat/s-crtl__mingw.adb: body for windows + * libgnat/s-crtl.adb: body for all the other targets + * Makefile.rtl: configure s-crtl.adb/libgnat/s-crtl__mingw.adb + * gcc-interface/Make-lang.in (GNAT_ADA_OBJS): Alphabetize. + (GNATBIND_OBJS): Add ada/libgnat/s-crtl.o. + +2025-09-09 Viljar Indus + + * contracts.adb: Use the In_Codegen function instead. + * exp_ch3.adb: Likewise. + * exp_ch5.adb: Likewise. + * exp_ch6.adb: Likewise. + * exp_ch7.adb: Likewise. + * exp_ch9.adb: Likewise. + * exp_disp.adb: Likewise. + * exp_util.adb: Likewise. + * freeze.adb: Likewise. + * ghost.adb: Likewise. + * inline.adb: Likewise. + * repinfo.adb: Likewise. + * sem_ch10.adb: Likewise. + * sem_ch13.adb: Likewise. + * sem_ch3.adb: Likewise. + * sem_ch6.adb: Likewise. + * sem_elab.adb: Likewise. + * sem_res.adb: Likewise. + * sem_util.adb (Predicates_Ignored_In_Codegen): Add new function for + the Predicates_Ignored property. + (Predicates_Enabled): Use Predicates_Ignored_In_Codegen instead. + * sem_util.ads (Predicates_Ignored_In_Codegen): New function. + (Is_Ignored_In_Codegen): Add documentation on how _In_Codegen + functions should be used. + +2025-09-09 Ronan Desplanques + + * sem_ch3.adb (Copy_And_Swap): Improve comments. + +2025-09-09 Javier Miranda + + * sem_util.adb (Needs_One_Actual): Add support for untagged record + types when the sources are compiled with Core Extensions allowed. + +2025-09-09 Ronan Desplanques + + * sem_ch3.adb (Find_Type_Name): Fix comment. + +2025-09-09 Ronan Desplanques + + * sem_ch3.adb (Check_Nonoverridable_Aspects): Remove if statement. + +2025-09-09 Ronan Desplanques + + * sem_ch3.adb (Check_Nonoverridable_Aspects): Improve documentation + comment. + +2025-09-09 Viljar Indus + + * ghost.adb (Check_Ghost_Completion): Add location info + to the policy messages. + (Check_Ghost_Policy): Likwise. + +2025-09-09 Javier Miranda + + * exp_attr.adb (Rewrite_Attribute_Proc_Call): Add new parameter + to calls to Create_Extra_Formals. + (Expand_N_Attribute_Reference): Ditto. + * exp_ch3.adb (Expand_Freeze_Record_Type): Ditto. + * exp_ch6.adb (Expand_Call_Helper): Ditto. + * exp_disp.adb (Expand_Dispatching_Call): Ditto. + * freeze.adb (Check_Itype): Ditto. + (Freeze_Expression): Ditto. + * sem_ch6.adb (Analyze_Subprogram_Body_Helper): Ditto. + (Create_Extra_Formals): Add new formal, and use it to determine + if the creation of the extra formals can be deferred. Add the + new parameter to calls to Create_Extra_Formals. + (Is_Unsupported_Extra_Actuals_Call): Adjust the code to improve + its performance when the result is known. + (Is_Unsupported_Extra_Formals_Entity): Ditto. Add new formal + * sem_ch6.ads (Create_Extra_Formals): Add new formal. + (Is_Unsupported_Extra_Formals_Entity): Ditto. + +2025-09-09 Viljar Indus + + * sem_aggr.adb (Resolve_Array_Aggregate): Indicate an out of + bounds index error also in the case of a missing index. + +2025-09-09 Viljar Indus + + * sem_ch13.adb (Analyze_Aspect_Definitions): Create a temporary + pragma for the non-task and access type cases. + +2025-09-09 Ronan Desplanques + + * sem_ch7.adb (New_Private_Type): Remove useless statements. + +2025-09-09 Denis Mazzucato + + * targparm.adb (Get_Target_Parameters): Address type declaration doesn't + ends anymore with a semicolon. + * libgnat/a-cdlili.ads: Replace Preelaborable_Initialization. + * libgnat/a-cidlli.ads: Likewise. + * libgnat/a-cihama.ads: Likewise. + * libgnat/a-cihase.ads: Likewise. + * libgnat/a-cimutr.ads: Likewise. + * libgnat/a-ciorma.ads: Likewise. + * libgnat/a-ciormu.ads: Likewise. + * libgnat/a-ciorse.ads: Likewise. + * libgnat/a-cohama.ads: Likewise. + * libgnat/a-cohase.ads: Likewise. + * libgnat/a-coinho.ads: Likewise. + * libgnat/a-coinho__shared.ads: Likewise. + * libgnat/a-coinve.ads: Likewise. + * libgnat/a-comutr.ads: Likewise. + * libgnat/a-convec.ads: Likewise. + * libgnat/a-coorma.ads: Likewise. + * libgnat/a-coormu.ads: Likewise. + * libgnat/a-coorse.ads: Likewise. + * libgnat/a-crdlli.ads: Likewise. + * libgnat/a-except.ads: Likewise. + * libgnat/a-finali.ads: Likewise. + * libgnat/a-ngcoty.ads: Likewise. + * libgnat/a-strbou.ads: Likewise. + * libgnat/a-stream.ads: Likewise. + * libgnat/a-strmap.ads: Likewise. + * libgnat/a-strunb.ads: Likewise. + * libgnat/a-strunb__shared.ads: Likewise. + * libgnat/a-ststio.ads: Likewise. + * libgnat/a-stwibo.ads: Likewise. + * libgnat/a-stwima.ads: Likewise. + * libgnat/a-stwiun.ads: Likewise. + * libgnat/a-stwiun__shared.ads: Likewise. + * libgnat/a-stzbou.ads: Likewise. + * libgnat/a-stzmap.ads: Likewise. + * libgnat/a-stzunb.ads: Likewise. + * libgnat/a-stzunb__shared.ads: Likewise. + * libgnat/a-tags.ads: Likewise. + * libgnat/i-cstrin.ads: Likewise. + * libgnat/s-stopoo.ads: Likewise. + * libgnat/s-stposu.ads: Likewise. + * libgnat/system-aix.ads: Likewise. + * libgnat/system-darwin-arm.ads: Likewise. + * libgnat/system-darwin-ppc.ads: Likewise. + * libgnat/system-darwin-x86.ads: Likewise. + * libgnat/system-djgpp.ads: Likewise. + * libgnat/system-dragonfly-x86_64.ads: Likewise. + * libgnat/system-freebsd.ads: Likewise. + * libgnat/system-gnu.ads: Likewise. + * libgnat/system-hpux-ia64.ads: Likewise. + * libgnat/system-hpux.ads: Likewise. + * libgnat/system-linux-alpha.ads: Likewise. + * libgnat/system-linux-arm.ads: Likewise. + * libgnat/system-linux-hppa.ads: Likewise. + * libgnat/system-linux-ia64.ads: Likewise. + * libgnat/system-linux-loongarch.ads: Likewise. + * libgnat/system-linux-m68k.ads: Likewise. + * libgnat/system-linux-mips.ads: Likewise. + * libgnat/system-linux-ppc.ads: Likewise. + * libgnat/system-linux-riscv.ads: Likewise. + * libgnat/system-linux-s390.ads: Likewise. + * libgnat/system-linux-sh4.ads: Likewise. + * libgnat/system-linux-sparc.ads: Likewise. + * libgnat/system-linux-x86.ads: Likewise. + * libgnat/system-lynxos178-ppc.ads: Likewise. + * libgnat/system-lynxos178-x86.ads: Likewise. + * libgnat/system-mingw.ads: Likewise. + * libgnat/system-qnx-arm.ads: Likewise. + * libgnat/system-rtems.ads: Likewise. + * libgnat/system-solaris-sparc.ads: Likewise. + * libgnat/system-solaris-x86.ads: Likewise. + * libgnat/system-vxworks-ppc-kernel.ads: Likewise. + * libgnat/system-vxworks-ppc-rtp-smp.ads: Likewise. + * libgnat/system-vxworks-ppc-rtp.ads: Likewise. + * libgnat/system-vxworks7-aarch64-rtp-smp.ads: Likewise. + * libgnat/system-vxworks7-aarch64.ads: Likewise. + * libgnat/system-vxworks7-arm-rtp-smp.ads: Likewise. + * libgnat/system-vxworks7-arm.ads: Likewise. + * libgnat/system-vxworks7-ppc-kernel.ads: Likewise. + * libgnat/system-vxworks7-ppc-rtp-smp.ads: Likewise. + * libgnat/system-vxworks7-ppc64-kernel.ads: Likewise. + * libgnat/system-vxworks7-ppc64-rtp-smp.ads: Likewise. + * libgnat/system-vxworks7-x86-kernel.ads: Likewise. + * libgnat/system-vxworks7-x86-rtp-smp.ads: Likewise. + * libgnat/system-vxworks7-x86_64-kernel.ads: Likewise. + * libgnat/system-vxworks7-x86_64-rtp-smp.ads: Likewise. + +2025-09-09 Marc Poulhiès + + * s-pack.adb.tmpl: Typo fix in comment. + +2025-09-09 Viljar Indus + + * sem_prag.adb (Analyze_Pragma): Set Mark_Ghost_Code individually + based on the semantics of each pragma. + +2025-09-09 Viljar Indus + + * ghost.adb (Mark_Ghost_Declaration_Or_Body): Mark ghost + entity explicitly as ignored or checked. + +2025-09-09 Viljar Indus + + * ghost.adb (Check_Ghost_Policy): ignore ghost policy changes + within instantiation statements. + +2025-09-09 Viljar Indus + + * ghost.adb (Check_Ghost_Policy): Use the policy in affect for + the identifier at the current moment instead of the region + around it when checking a policy change for a procedure call. + +2025-09-09 Viljar Indus + + * ghost.adb (Mark_And_Set_Ghost_Declaration): apply the + ghost policy and level from the declaration only if the declaration + has an explicit ghost aspect/pragma. + +2025-09-09 Denis Mazzucato + + * sem_ch13.adb (Check_Nonoverridable_Aspect_Subprograms): Add the new + legality check in Check_Nonoverridable_Aspect_Subprograms for + nonoverridable aspects to check whether the denoted subprograms satisfy + MR 13.1.1(18.4/6), otherwise we emit an error. Fix spacing. + * sem_ch6.adb (New_Overloaded_Entity): Set Is_Primitive flag + for inherited primitives, and filter out homonym candidates without a + function specification as parents. + +2025-09-09 Piotr Trojanek + + * sem_prag.adb (Check_Interrupt_Or_Attach_Handler): Refine test for + protected procedures; fix typo in comment. + +2025-09-09 Viljar Indus + + * ghost.adb (Is_OK_Pragma): mark the context of ignored ghost + pragmas as OK. + +2025-09-09 Viljar Indus + + * ghost.adb (Assertion_Level_From_Arg): Ensure that assertion level + is stored as the entity for its reference. + (Enables_Ghostness): Derive the result from whether or not the + an argument indicated an assertion level. + * tbuild.adb (Make_Assertion_Level): ensure that assertion levels + have a standard scope. + +2025-09-09 Piotr Trojanek + + * checks.adb (Make_Bignum_Block): Check restriction No_Secondary_Stack. + +2025-09-09 Viljar Indus + + * sem_util.adb (Policy_In_Effect): Add special handling + for Runtime and Static values. + +2025-09-09 Denis Mazzucato + + * exp_ch3.adb (Init_Formals): Remove the check on Global_No_Tasking. + * sem.adb: Fix typo. + +2025-09-09 Gary Dismukes + + * exp_aggr.adb (Build_Container_Aggr_Code.To_Int): Replace existing + conditional expression with call to Expr_Value. + +2025-09-09 Viljar Indus + + * sem_ch13.adb (Analyze_Aspect_Specifications): add default + assertion level to assertion aspects. + * sem_prag.adb (Analyze_Pragma): Likewise. + +2025-09-09 Ghjuvan Lacambre + + * exp_ch6.adb (Check_BIP_Actuals, Process_Node): Disable checks. + +2025-09-09 Javier Miranda + + * aspects.ads (Aspect_Unsigned_Base_Range): New aspect. + * checks.adb (Determine_Range): Handle types with unsigned base range aspect. + (Enable_Overflow_Check): ditto + (Apply_Arithmetic_Overflow_Strict): ditto + * debug.adb (d_o): Document new usage. + * einfo.ads (Has_Unsigned_Base_Range_Aspect): New flag. + * exp_attr.adb (Expand_N_Attribute_Reference): No action since + it has been already handled at this stage. + * exp_ch4.adb (Expand_N_Op_Add): Generate aritmetic overflow check on + unsigned base range type operands. + (Expand_N_Op_Subtract): ditto + (Expand_N_Op_Multiply): ditto + (Expand_N_Op_Minus): ditto + * gen_il-fields.ads (Has_Unsigned_Base_Range_Aspect): New flag. + * gen_il-gen-gen_entities.adb (Has_Unsigned_Base_Range_Aspect): New flag. + * gen_il-internals.adb (Has_Unsigned_Base_Range_Aspect): New flag. + * gnat1drv.adb (Adjust_Global_Switches): Handle -gnatd_o + * par-prag.adb (Pragma_Unsigned_Base_Range): No action since it will + be entirely handled by the semantic analyzer. + * rtsfind.ads (RE_Id): Add RE_Uns_[Add|Subtract|Multiply]_With_ Ovflo_Check + * sem_attr.ads (Attribute_Unsigned_Base_Range): Added to the set of + implementation defined attributes. + * sem_attr.adb (Analyze_Attribute): Analyze attribute Unsigned_Base_Range. + (Eval_Attribute): Evaluate attribute Unsigned_Base_Range. + * sem_ch13.adb (Analyze_One_Aspect): Defer checks for this aspect to + the analysis of the corresponding pragma. + * sem_ch3.ads (Unsigned_Base_Range_Type_Declaration): New subprogram. + * sem_ch3.adb (Build_Derived_Numeric_Type): Inherit flag + Has_Unsigned_Base_Range_Aspect. + (Unsigned_Base_Range_Type_Declaration): New subprogram. + (Has_Pragma_Unsigned_Base_Range): New subprogram. + * sem_prag.adb (Analyze_Pragma): Handle Pragma_Unsigned_Base_Range. + * snames.adb-tmpl (Get_Pragma_Id): Handle Name_Unsigned_Base_Range. + (Is_Pragma_Name): ditto. + * snames.ads-tmpl (Name_Unsigned_Base_Range): New name. + (Attribute_Unsigned_Base_Range): New attribute. + (Pragma_Unsigned_Base_Range): New pragma. + * libgnat/s-aridou.ads (Add_With_Ovflo_Check): New routine for Double_Uns. + (Subtract_With_Ovflo_Check): ditto. + (Multiply_With_Ovflo_Check): ditto. + * libgnat/s-aridou.adb (Add_With_Ovflo_Check): ditto. + (Subtract_With_Ovflo_Check): ditto. + (Multiply_With_Ovflo_Check): ditto. + * libgnat/s-arit64.ads (Uns_Add_With_Ovflo_Check64): New subprogram. + (Uns_Subtract_With_Ovflo_Check64): ditto. + (Uns_Multiply_With_Ovflo_Check64): ditto. + * libgnat/s-arit64.adb (Uns_Add_With_Ovflo_Check64): New subprogram. + (Uns_Subtract_With_Ovflo_Check64): ditto. + (Uns_Multiply_With_Ovflo_Check64): ditto. + * libgnat/s-arit128.ads (Uns_Add_With_Ovflo_Check128): New subprogram. + (Uns_Subtract_With_Ovflo_Check128): ditto. + (Uns_Multiply_With_Ovflo_Check128): ditto. + * libgnat/s-arit128.adb (Uns_Add_With_Ovflo_Check128): New subprogram. + (Uns_Subtract_With_Ovflo_Check128): ditto. + (Uns_Multiply_With_Ovflo_Check128): ditto. + * doc/gnat_rm/gnat_language_extensions.rst: Document unsigned + base range. + * gnat_rm.texi: Regenerate. + * gnat_ugn.texi: Regenerate. + +2025-09-09 Viljar Indus + + * atree.adb (Mark_New_Ghost_Node): Store the assertion level on the + entity. + * contracts.adb (Analyze_Package_Contract): Add support for multiple + pragma Initial_Condition orginating from multiple assertion levels. + * cstand.adb (Make_Assertion_Level_Definition): New function that + creates a new Assertion_Level and adds it to the Assertion_Levels + table. + (Create_Standard): Add definitions for assertion levels defined in + Standard. + (Print_Standard): Add assertion level pragmas do the output. + * exp_ch6.adb (Check_Subprogram_Variant): Add support for multiple + Subprogram_Variant pragmas created by assertion levels. + * einfo.ads: add info for the new nodes and attributes. + * exp_prag.adb (Consequence_Error): Fix error message string + corruption caused by another call to the internal strings during + the call to Make_Procedure_Call_Statement. + (Expand_Pragma_Initial_Condition): Ensure all ghost related + attributes are copied to the new pragma. + (Expand_Pragma_Loop_Variant): Likewise. + (Expand_Pragma_Subprogram_Variant). Likewise. Additionally + create a new Subprogram_Variant function for each pragma associated + with an assertion level. + * exp_util.adb (Add_DIC_Check): Ensure all ghost related attributes + are copied to the new pragma. + (Build_DIC_Procedure_Body): Add support for mutliple DIC pragmas + created from assertion levels. + * gen_il-fields.ads: + (Aspect_Ghost_Assertion_Level): New field. + (Original_Aspect): New field. + (Original_Pragma): New field. + (Pragma_Ghost_Assertion_Level): New field. + (Child_Levels): New field. + (Ghost_Assertion_Level): New field. + (Parent_Levels): New field. + * gen_il-gen-gen_entities.adb: + Add Ghost_Assertion_Level field for all entities + Add new E_Assertion_Level entity for storing assertion levels. + * gen_il-gen-gen_nodes.adb: + Add Aspect_Ghost_Assertion_Level for N_Aspect to store the + assertion level associated with the aspect. + Add Original_Aspect to store the original aspect where the aspect + that was transformed from an aspect with an assertion level + origninated from. + Add Pragma_Ghost_Assertion_Level and Original_Pragma to store + the same information for N_Prama nodes. + * gen_il-types.ads: Add new entity kind E_Assertion_Level + * ghost.adb (Assertion_Level_Error_Msg): Create constant for + error messages using the same main error message. + (Ghost_Policy_Error_Msg): Likewise. + (Assertion_Level_To_Name): New subprogram. + (Check_Valid_Ghost_Declaration): New subprogram. + (Get_Ghost_Aspect): New subprogram. + (Get_Ghost_Assertion_Level): New subprogram. + (Ghost_Policy_In_Effect): New subprogram. + (Install_Ghost_Region): New subprogram. + (Mark_And_Set_Ghost_Region): New subprogram. + (Mark_Ghost_Declaration_Or_Body): Add new argument for assertion + levels. + (Check_Ghost_Completion): Update ghost policy calculation with + assertion levels. Refactor error message. + (Is_OK_Statement): Add new checks for valid assertion policies and + assertion levels. + (Is_OK_Pragma): Refactor the calculation of valid ghost pragmas. + (Check_Ghost_Policy): Make the checks ghost region based. + (Check_Ghost_Context): Refactor the order of checks. + (Check_Ghost_Formal_Procedure_Or_Package): Relax the checks for + overriding procedures. Now only ignored subprograms cannot be + overridden by checked or non-ghost subprograms. + (Check_Ghost_Primitive): Relax conditions for primitve operations. + Now only checked primitive subprograms are considered invalid for + ignored tagged types. Add assertion level compatibility checks. + (Check_Ghost_Refinement): Relax conditions for ghost refinements. + Add assertion level compatibility checks for refinements. + (Install_Ghost_Region): Store the current region and the assertion + for that region in the ghost config. + (Enables_Ghostness): Refactor implementation to support assertion + levels. + (Is_Subject_To_Ghost): Simplify implementation. + (Mark_And_Set_Ghost_Assignment): Refactor implementation. + (Mark_And_Set_Ghost_Body): Add support for assertion levels. + (Mark_And_Set_Ghost_Completion): Likewise. + (Mark_And_Set_Ghost_Declaration): Likwise. + (Mark_And_Set_Ghost_Instantiation): Likwise. + (Mark_And_Set_Ghost_Procedure_Call): Refactor implementation. + (Mark_Ghost_Declaration_Or_Body): Add support for assertion levels. + (Set_Ghost_Mode): Likwise. + * ghost.ads (Assertion_Level_From_Arg): New subprogram. + (Install_Ghost_Region): Add argument Level for assertrion levels. + (Is_Assertion_Level_Dependent): New subprogram. + * lib-xref.ads: Add new mapping for E_Assertion_Level entities. + * opt.ads (Ghost_Config_Type): Add new members Ghost_Assertion_Mode + and Current_Region to the structure. + * par-prag.adb (Prag): Add new pragma name Assertion_Level. + * rtsfind.adb (Load_RTU): Update the arguments for the call to + Install_Ghost_Region. + * sem.adb (Do_Analyze): Likewise. + * sem_ch13.adb (Convert_Aspect_With_Assertion_Levels): New + subprogram. + (Make_Aitem_Pragma): Copy ghost mode attributes from the aspect to + the pragma. + (Analyze_Aspect_Specifications): Convert aspects that have an + assertion level association in the aspects without the association + and the original supported syntax and with the assertion level + stored on the aspect node. + Updated duplicate detection to avoid duplicates being called on + aspects with assertion levels that orginated from the same aspect. + * sem_prag.adb (Apply_Check_Policy): New subprogram. + (Get_Applicable_Policy): New subprogram. + (Mark_Is_Checked): New subprogram. + (Mark_Is_Disabled): New subprogram. + (Mark_Is_Ignored): New subprgram. + (Check_Arg_Is_One_Of): Remove versions that had a specific number + of arguments and replace them with a list one. + (Create_Pragma_Without_Assertion_Level): New subprogram. + (Assertion_Level_Pragma_Comes_From_Source): New subprogram. + (Analyze_Pragma): Replace aspects that have an assertion level + with aspects without them where the level is stored on the pragma + node. + (Abstract_State): Add support for assertion levels in ghost + Abstract_State pragmas. + (Assert): Update argument handling for Assert like pragmas. + (Assertion_Level): Add a new section to support the analysis of + pragma Assertion_Level. + (Assertion_Policy): Add support for setting the policy for assertion + levels. + (Check): Update argument handling. Update the assertion policy + application process. + (Check_Policy): Add support for assertion levels. Add check_policy + pragmas for assertion_level dependencis also to the stack of + known Check_Policy pragmas. + (Default_Initial_Condition): Reject the use of DIC with assertion + levels. Update duplication checks. + (Ghost): Add support for assertion levels. Fix issue where + assertion levels with Ghost => False were treated as ghost. + (Predicate): Update the policy handling of Ghost_Predicate. + (Analyze_Refined_State_In_Decl_Part): Create a new ghost region + for analyzing Refined_State. + (Check_Applicable_Policy): Refactor the implementation. Break it + down to Get_Applicable_Policy and Apply_Check_Policy. + (Check_Kind): Removed. Replaced by Get_Applicable_Policy and + Apply_Check_Policy. + (Initialize): Initialize the table storing all know assertion + levels. + * sem_prag.ads (Find_Assertion_Level): New subprogram. + (Insert_Assertion_Level): New subprogram. + (Check_Applicable_Policy): Add new argument Level. + (Check_Kind): Removed. Merged with Get_Applicable_Policy. + (Get_Assertion_Level): New subprogram. + (Is_Valid_Assertion_Level): New subprogram. + * sem_util.adb (Copy_Assertion_Policy_Attributes): New function + for copying the ghost related attributes from one pragma to + another. + (Copy_Subprogram_Spec): Additionally copy the level from the spec. + (Depends_On_Level): New function for checking if one level depends + on another level. + (From_Same_Aspect): New function for checking whether the aspects + orignate from the same original aspect. + (From_Same_Pragma): New function for checking whether the pragmas + originate from the same original aspect or pragma. + (Get_Subprogram_Entity): Avoid crash when being called when the + entity has not been set for the subprogram. + (Has_Assertion_Level_Argument): New function for checking whether + the aspect or a pragma has an argument that is using an assertion + level association. + (Policy_In_Effect): add an additional argument for the level that + should be checked along with the assertion name. + * sem_util.ads (Copy_Assertion_Policy_Attributes): New function. + (Depends_On_Level): Likewise. + (From_Same_Aspect): Likewise. + (From_Same_Pragma): Likewise. + (Has_Assertion_Level_Argument): Likewise. + (Is_Same_Or_Depends_On_Level): Likewise. + (Policy_In_Effect): Add new argument Level. + * sinfo.ads: Add documentation for all the new attributes that + were added to the nodes and entities. + * snames.ads-tmpl: Add new entries for Name_Assertion_Level, + Name_uDefault_Assertion_Level and Pragma_Assertion_Level. + * stand.ads: Add new entities for the predefined assertion levels. + (Standard_Level_Static): Definition for the predefined Static + level that is always ignored. + (Standard_Level_Runtime): Defintion for the predefined Runtime + level that is always checked. + (Standard_Level_Default): Definition for the implicit Default + level that is given for ghost entities that were not associated + with an assertion level (e.g. Ghost => True). + * tbuild.adb (Make_Assertion_Level): New function for constructin + an assertion level. + * tbuild.ads (Make_Assertion_Level): Likewise. + 2025-08-04 Viljar Indus * contracts.adb: Use Is_Ignored_In_Codegen instead of just diff --git a/gcc/ada/Makefile.rtl b/gcc/ada/Makefile.rtl index 50e683aa80a7..0fa2c51ceb6c 100644 --- a/gcc/ada/Makefile.rtl +++ b/gcc/ada/Makefile.rtl @@ -415,6 +415,7 @@ GNATRTL_NONTASKING_OBJS= \ g-busorg$(objext) \ g-byorma$(objext) \ g-bytswa$(objext) \ + g-c_time$(objext) \ g-calend$(objext) \ g-casuti$(objext) \ g-catiio$(objext) \ @@ -535,6 +536,7 @@ GNATRTL_NONTASKING_OBJS= \ s-boarop$(objext) \ s-boustr$(objext) \ s-bytswa$(objext) \ + s-c_time$(objext) \ s-carsi8$(objext) \ s-carun8$(objext) \ s-casi16$(objext) \ @@ -1418,7 +1420,6 @@ ifeq ($(strip $(filter-out arm% aarch64 linux-android%,$(target_cpu) $(target_os s-inmaop.adb #include +#include #endif #ifdef IN_RTS @@ -3719,6 +3720,68 @@ void __gnat_killprocesstree (int pid, int sig_num) */ } +#if defined (__QNX__) + +static __thread sigset_t set; +static __thread sigset_t oset; +static __thread int signals_disabled = 0; + +int __gnat_disable_signals(void) +{ + sigemptyset(&set); + sigaddset(&set, SIGHUP); + sigaddset(&set, SIGINT); + sigaddset(&set, SIGQUIT); + sigaddset(&set, SIGILL); + sigaddset(&set, SIGTRAP); + sigaddset(&set, SIGIOT); + sigaddset(&set, SIGABRT); + sigaddset(&set, SIGEMT); + sigaddset(&set, SIGDEADLK); + sigaddset(&set, SIGFPE); + sigaddset(&set, SIGKILL); + sigaddset(&set, SIGBUS); + sigaddset(&set, SIGSEGV); + sigaddset(&set, SIGSYS); + sigaddset(&set, SIGPIPE); + sigaddset(&set, SIGALRM); + sigaddset(&set, SIGTERM); + sigaddset(&set, SIGUSR1); + sigaddset(&set, SIGUSR2); + sigaddset(&set, SIGCHLD); + sigaddset(&set, SIGCLD); + sigaddset(&set, SIGPWR); + sigaddset(&set, SIGWINCH); + sigaddset(&set, SIGURG); + sigaddset(&set, SIGPOLL); + sigaddset(&set, SIGIO); + sigaddset(&set, SIGSTOP); + sigaddset(&set, SIGTSTP); + sigaddset(&set, SIGCONT); + sigaddset(&set, SIGTTIN); + sigaddset(&set, SIGTTOU); + sigaddset(&set, SIGVTALRM); + sigaddset(&set, SIGPROF); + sigaddset(&set, SIGXCPU); + sigaddset(&set, SIGXFSZ); + sigaddset(&set, SIGDOOM); + + int ret = sigprocmask(SIG_BLOCK, &set, &oset); + signals_disabled = !ret; + return ret; +} + +int __gnat_enable_signals(void) +{ + if (!signals_disabled) { + return 0; + } + signals_disabled = 0; + return sigprocmask(SIG_SETMASK, &oset, 0); +} + +#endif + #ifdef __cplusplus } #endif diff --git a/gcc/ada/aspects.adb b/gcc/ada/aspects.adb index d1e27ce59833..44b7494b9247 100644 --- a/gcc/ada/aspects.adb +++ b/gcc/ada/aspects.adb @@ -280,6 +280,12 @@ package body Aspects is function Get_Aspect_Id (Name : Name_Id) return Aspect_Id is begin + -- Aspect Unsigned_Base_Range temporarily disabled + + if Name = Name_Unsigned_Base_Range then + return No_Aspect; + end if; + return Aspect_Id_Hash_Table.Get (Name); end Get_Aspect_Id; diff --git a/gcc/ada/aspects.ads b/gcc/ada/aspects.ads index 737f15136062..ab87f54f20a5 100644 --- a/gcc/ada/aspects.ads +++ b/gcc/ada/aspects.ads @@ -158,6 +158,7 @@ package Aspects is Aspect_Stream_Size, Aspect_String_Literal, Aspect_Subprogram_Variant, -- GNAT + Aspect_Super, -- GNAT Aspect_Suppress, Aspect_Synchronization, Aspect_Test_Case, -- GNAT @@ -240,6 +241,7 @@ package Aspects is Aspect_Unmodified, -- GNAT Aspect_Unreferenced, -- GNAT Aspect_Unreferenced_Objects, -- GNAT + Aspect_Unsigned_Base_Range, -- GNAT Aspect_Volatile, Aspect_Volatile_Components, Aspect_Volatile_Full_Access, -- GNAT @@ -358,6 +360,7 @@ package Aspects is Aspect_Unmodified => True, Aspect_Unreferenced => True, Aspect_Unreferenced_Objects => True, + Aspect_Unsigned_Base_Range => True, Aspect_User_Aspect => True, Aspect_Value_Size => True, Aspect_Volatile_Full_Access => True, @@ -366,9 +369,7 @@ package Aspects is others => False); -- The following array indicates aspects that specify operational - -- characteristics, and thus are view-specific. Representation - -- aspects break privacy, as they are needed during expansion and - -- code generation. + -- characteristics, and thus can be specified on partial views. -- List is currently incomplete ??? Operational_Aspect : constant array (Aspect_Id) of Boolean := @@ -516,6 +517,7 @@ package Aspects is Aspect_Stream_Size => Expression, Aspect_String_Literal => Name, Aspect_Subprogram_Variant => Expression, + Aspect_Super => Expression, Aspect_Suppress => Name, Aspect_Synchronization => Name, Aspect_Test_Case => Expression, @@ -624,11 +626,13 @@ package Aspects is Aspect_Stream_Size => True, Aspect_String_Literal => False, Aspect_Subprogram_Variant => False, + Aspect_Super => False, Aspect_Suppress => False, Aspect_Synchronization => False, Aspect_Test_Case => False, Aspect_Type_Invariant => False, Aspect_Unimplemented => False, + Aspect_Unsigned_Base_Range => True, Aspect_Unsuppress => False, Aspect_User_Aspect => False, Aspect_Value_Size => True, @@ -839,6 +843,7 @@ package Aspects is Aspect_Stream_Size => Name_Stream_Size, Aspect_String_Literal => Name_String_Literal, Aspect_Subprogram_Variant => Name_Subprogram_Variant, + Aspect_Super => Name_Super, Aspect_Suppress => Name_Suppress, Aspect_Suppress_Debug_Info => Name_Suppress_Debug_Info, Aspect_Suppress_Initialization => Name_Suppress_Initialization, @@ -852,6 +857,7 @@ package Aspects is Aspect_Unmodified => Name_Unmodified, Aspect_Unreferenced => Name_Unreferenced, Aspect_Unreferenced_Objects => Name_Unreferenced_Objects, + Aspect_Unsigned_Base_Range => Name_Unsigned_Base_Range, Aspect_Unsuppress => Name_Unsuppress, Aspect_User_Aspect => Name_User_Aspect, Aspect_Value_Size => Name_Value_Size, @@ -1120,6 +1126,7 @@ package Aspects is Aspect_SPARK_Mode => Never_Delay, Aspect_Static => Never_Delay, Aspect_Subprogram_Variant => Never_Delay, + Aspect_Super => Never_Delay, Aspect_Synchronization => Never_Delay, Aspect_Test_Case => Never_Delay, Aspect_Unimplemented => Never_Delay, @@ -1145,6 +1152,7 @@ package Aspects is Aspect_Size => Rep_Aspect, Aspect_Small => Rep_Aspect, Aspect_Storage_Size => Rep_Aspect, + Aspect_Unsigned_Base_Range => Rep_Aspect, Aspect_Value_Size => Rep_Aspect, Aspect_Volatile => Rep_Aspect, Aspect_Volatile_Components => Rep_Aspect, @@ -1188,10 +1196,12 @@ package Aspects is -- Sem_Prag. Aspect_On_Body_Or_Stub_OK : constant array (Aspect_Id) of Boolean := - (Aspect_Refined_Depends => True, + (Aspect_Initialize => True, + Aspect_Refined_Depends => True, Aspect_Refined_Global => True, Aspect_Refined_Post => True, Aspect_SPARK_Mode => True, + Aspect_Super => True, Aspect_Warnings => True, others => False); diff --git a/gcc/ada/atree.adb b/gcc/ada/atree.adb index 0ff3d6e34a8f..14d9ba4bb2fd 100644 --- a/gcc/ada/atree.adb +++ b/gcc/ada/atree.adb @@ -1805,11 +1805,17 @@ package body Atree is if Ghost_Config.Ghost_Mode = Check then if Nkind (N) in N_Entity then Set_Is_Checked_Ghost_Entity (N); + Set_Ghost_Assertion_Level + (N, Ghost_Config.Ghost_Mode_Assertion_Level); + Set_Is_Implicit_Ghost (N); end if; elsif Ghost_Config.Ghost_Mode = Ignore then if Nkind (N) in N_Entity then Set_Is_Ignored_Ghost_Entity (N); + Set_Ghost_Assertion_Level + (N, Ghost_Config.Ghost_Mode_Assertion_Level); + Set_Is_Implicit_Ghost (N); end if; Set_Is_Ignored_Ghost_Node (N); diff --git a/gcc/ada/atree.ads b/gcc/ada/atree.ads index 802db8709338..f14491c2d75b 100644 --- a/gcc/ada/atree.ads +++ b/gcc/ada/atree.ads @@ -651,6 +651,20 @@ package Atree is -- similarly for the other two cases. This can return something other -- than N only if N is an Entity. + function Node_To_Fetch_From_If_Set + (N : Node_Or_Entity_Id; Field : Node_Or_Entity_Field) + return Node_Or_Entity_Id is + (case Field_Descriptors (Field).Type_Only is + when No_Type_Only => N, + when Base_Type_Only => Base_Type_If_Set (N), + when Impl_Base_Type_Only => Implementation_Base_Type_If_Set (N), + when Root_Type_Only => Root_Type_If_Set (N)); + -- This is a more permissive version of Node_To_Fetch_From, which + -- returns the same value, except it returns Empty in cases where + -- Node_To_Fetch_From would crash because relevant fields are not yet + -- set. This is used in Treepr, to allow it to print half-baked nodes + -- without crashing. + ----------------------------- -- Private Part Subpackage -- ----------------------------- diff --git a/gcc/ada/bindgen.adb b/gcc/ada/bindgen.adb index cb39af67f9a5..24cc8dfb8990 100644 --- a/gcc/ada/bindgen.adb +++ b/gcc/ada/bindgen.adb @@ -476,7 +476,10 @@ package body Bindgen is -- but False for mains in other languages.) We do not want to do this if -- we're binding a library. - if not Bind_For_Library and not CodePeer_Mode then + if not Bind_For_Library + and not CodePeer_Mode + and not Suppress_Standard_Library_On_Target + then WBI (" procedure s_stalib_adafinal;"); Set_String (" pragma Import (Ada, s_stalib_adafinal, "); Set_String ("""system__standard_library__adafinal"");"); @@ -490,7 +493,9 @@ package body Bindgen is WBI (""); WBI (" begin"); - if not CodePeer_Mode then + if not CodePeer_Mode + and not Suppress_Standard_Library_On_Target + then WBI (" if not Is_Elaborated then"); WBI (" return;"); WBI (" end if;"); @@ -503,7 +508,9 @@ package body Bindgen is -- on whether this is the main program or a library. if not CodePeer_Mode then - if not Bind_For_Library then + if not Bind_For_Library + and not Suppress_Standard_Library_On_Target + then WBI (" s_stalib_adafinal;"); elsif Lib_Final_Built then WBI (" finalize_library;"); diff --git a/gcc/ada/cal.c b/gcc/ada/cal.c deleted file mode 100644 index 0a61e0f251ab..000000000000 --- a/gcc/ada/cal.c +++ /dev/null @@ -1,74 +0,0 @@ -/**************************************************************************** - * * - * GNAT COMPILER COMPONENTS * - * * - * C A L * - * * - * C Implementation File * - * * - * Copyright (C) 1992-2025, Free Software Foundation, Inc. * - * * - * GNAT is free software; you can redistribute it and/or modify it under * - * terms of the GNU General Public License as published by the Free Soft- * - * ware Foundation; either version 3, or (at your option) any later ver- * - * sion. GNAT is distributed in the hope that it will be useful, but WITH- * - * OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * - * or FITNESS FOR A PARTICULAR PURPOSE. * - * * - * As a special exception 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 * - * . * - * * - * GNAT was originally developed by the GNAT team at New York University. * - * Extensive contributions were provided by Ada Core Technologies Inc. * - * * - ****************************************************************************/ - -/* This file contains routines marked with pragmas Import in package */ -/* GNAT.Calendar. It is used to do Duration to timeval conversion. */ -/* These are simple wrapper functions to abstract the fact that the C */ -/* struct timeval fields are not normalized (they are generally */ -/* defined as int or long values). */ - -#if defined (__vxworks) -#ifdef __RTP__ -#include -#include -#if (_WRS_VXWORKS_MAJOR == 7) || (_WRS_VXWORKS_MINOR != 0) -#include -#endif -#else -#include -#endif -#elif defined (__nucleus__) -#include -#else -#include -#endif - -#ifdef __MINGW32__ -#include "mingw32.h" -#include -#endif - -void -__gnat_timeval_to_duration (struct timeval *t, long long *sec, long *usec) -{ - *sec = (long long) t->tv_sec; - *usec = (long) t->tv_usec; -} - -void -__gnat_duration_to_timeval (long long sec, long usec, struct timeval *t) -{ - /* here we are doing implicit conversion to the struct timeval - fields types. */ - - t->tv_sec = sec; - t->tv_usec = usec; -} diff --git a/gcc/ada/checks.adb b/gcc/ada/checks.adb index 0b3ae02259e3..c30e5f1bf199 100644 --- a/gcc/ada/checks.adb +++ b/gcc/ada/checks.adb @@ -970,15 +970,61 @@ package body Checks is -- we use a different approach, expanding to: -- typ (xxx_With_Ovflo_Check (Integer_NN (x), Integer_NN (y))) + -- or + -- typ (xxx_With_Ovflo_Check (Unsigned_NN (x), Unsigned_NN (y))) -- where xxx is Add, Multiply or Subtract as appropriate -- Find check type if one exists if Dsiz <= System_Max_Integer_Size then - Ctyp := Integer_Type_For (Dsiz, Uns => False); + Ctyp := Integer_Type_For (Dsiz, + Uns => Has_Unsigned_Base_Range_Aspect (Base_Type (Typ))); - -- No check type exists, use runtime call + -- No check type exists, and the type has the unsigned base range + -- aspect; use runtime call. + + elsif Has_Unsigned_Base_Range_Aspect (Base_Type (Typ)) then + if System_Max_Integer_Size = 64 then + Ctyp := RTE (RE_Unsigned_64); + else + Ctyp := RTE (RE_Unsigned_128); + end if; + + if Nkind (N) = N_Op_Add then + if System_Max_Integer_Size = 64 then + Cent := RE_Uns_Add_With_Ovflo_Check64; + else + Cent := RE_Uns_Add_With_Ovflo_Check128; + end if; + + elsif Nkind (N) = N_Op_Subtract then + if System_Max_Integer_Size = 64 then + Cent := RE_Uns_Subtract_With_Ovflo_Check64; + else + Cent := RE_Uns_Subtract_With_Ovflo_Check128; + end if; + + else pragma Assert (Nkind (N) = N_Op_Multiply); + if System_Max_Integer_Size = 64 then + Cent := RE_Uns_Multiply_With_Ovflo_Check64; + else + Cent := RE_Uns_Multiply_With_Ovflo_Check128; + end if; + end if; + + Rewrite (N, + OK_Convert_To (Typ, + Make_Function_Call (Loc, + Name => New_Occurrence_Of (RTE (Cent), Loc), + Parameter_Associations => New_List ( + OK_Convert_To (Ctyp, Left_Opnd (N)), + OK_Convert_To (Ctyp, Right_Opnd (N)))))); + + Analyze_And_Resolve (N, Typ); + return; + + -- No check type exists, use runtime call (common case) else if System_Max_Integer_Size = 64 then @@ -1539,21 +1585,18 @@ package body Checks is return; end if; - -- Suppress checks if the subtypes are the same. The check must be - -- preserved in an assignment to a formal, because the constraint is - -- given by the actual. + -- Suppress checks if the subtypes are the same and constrained. The + -- check must be preserved in an assignment to a formal, because the + -- constraint is given by the actual. if Nkind (Original_Node (N)) /= N_Allocator + and then (if Do_Access then Designated_Type (Typ) else Typ) = S_Typ + and then Is_Constrained (S_Typ) and then (No (Lhs) or else not Is_Entity_Name (Lhs) or else No (Param_Entity (Lhs))) then - if (Etype (N) = Typ - or else (Do_Access and then Designated_Type (Typ) = S_Typ)) - and then (No (Lhs) or else not Is_Aliased_View (Lhs)) - then - return; - end if; + return; -- We can also eliminate checks on allocators with a subtype mark that -- coincides with the context type. The context type may be a subtype @@ -5492,7 +5535,9 @@ package body Checks is -- bound, because that means the result could wrap. -- Same applies for the lower bound if it is negative. - if Is_Modular_Integer_Type (Typ) then + if Is_Modular_Integer_Type (Typ) + and then not Has_Unsigned_Base_Range_Aspect (Btyp) + then if Lor > Lo and then Hir <= Hbound then Lo := Lor; end if; @@ -6223,7 +6268,9 @@ package body Checks is -- Nothing to do for unsigned integer types, which do not overflow - elsif Is_Modular_Integer_Type (Typ) then + elsif Is_Modular_Integer_Type (Typ) + and then not Has_Unsigned_Base_Range_Aspect (Typ) + then return; end if; @@ -8114,7 +8161,9 @@ package body Checks is elsif Nkind (Expr) = N_Selected_Component and then Present (Component_Clause (Entity (Selector_Name (Expr)))) - and then Is_Modular_Integer_Type (Typ) + and then + (Is_Modular_Integer_Type (Typ) + and then not Has_Unsigned_Base_Range_Aspect (Base_Type (Typ))) and then Modulus (Typ) = 2 ** Esize (Entity (Selector_Name (Expr))) then return; @@ -8896,6 +8945,8 @@ package body Checks is function Make_Bignum_Block (Loc : Source_Ptr) return Node_Id is M : constant Entity_Id := Make_Defining_Identifier (Loc, Name_uM); begin + Check_Restriction (No_Secondary_Stack, M); + return Make_Block_Statement (Loc, Declarations => diff --git a/gcc/ada/contracts.adb b/gcc/ada/contracts.adb index 7e4e4a2077f6..d87199939837 100644 --- a/gcc/ada/contracts.adb +++ b/gcc/ada/contracts.adb @@ -1131,12 +1131,12 @@ package body Contracts is if Comes_From_Source (Obj_Id) and then Is_Ghost_Entity (Obj_Id) then -- A Ghost object cannot be of a type that yields a synchronized - -- object (SPARK RM 6.9(21)). + -- object (SPARK RM 6.9(22)). if Yields_Synchronized_Object (Obj_Typ) then Error_Msg_N ("ghost object & cannot be synchronized", Obj_Id); - -- A Ghost object cannot be imported or exported (SPARK RM 6.9(7)). + -- A Ghost object cannot be imported or exported (SPARK RM 6.9(9)). -- One exception to this is the object that represents the dispatch -- table of a Ghost tagged type, as the symbol needs to be exported. @@ -1278,7 +1278,12 @@ package body Contracts is while Present (Prag) loop Prag_Nam := Pragma_Name (Prag); - if Prag_Nam = Name_Initial_Condition then + -- When Assertion_Levels are used then the pacakage can have + -- multiple consecutive Initial_Condition pragmas. + -- Find the first one here and then iterate over all of them + -- later. + + if Prag_Nam = Name_Initial_Condition and then No (Init_Cond) then Init_Cond := Prag; elsif Prag_Nam = Name_Initializes then @@ -1295,9 +1300,12 @@ package body Contracts is Analyze_Initializes_In_Decl_Part (Init); end if; - if Present (Init_Cond) then + while Present (Init_Cond) + and then Pragma_Name (Init_Cond) = Name_Initial_Condition + loop Analyze_Initial_Condition_In_Decl_Part (Init_Cond); - end if; + Init_Cond := Next_Pragma (Init_Cond); + end loop; end if; -- Restore the SPARK_Mode of the enclosing context after all delayed @@ -3274,7 +3282,7 @@ package body Contracts is -- The contract of an ignored Ghost subprogram does not need expansion, -- because the subprogram and all calls to it will be removed. - elsif Is_Ignored_Ghost_Entity (Subp_Id) then + elsif Is_Ignored_Ghost_Entity_In_Codegen (Subp_Id) then return; -- No action needed for helpers and indirect-call wrapper built to diff --git a/gcc/ada/cstand.adb b/gcc/ada/cstand.adb index 79e7083f62bf..cdf2b5d6c306 100644 --- a/gcc/ada/cstand.adb +++ b/gcc/ada/cstand.adb @@ -41,6 +41,7 @@ with Targparm; use Targparm; with Tbuild; use Tbuild; with Ttypes; use Ttypes; with Sem_Mech; use Sem_Mech; +with Sem_Prag; use Sem_Prag; with Sem_Util; use Sem_Util; with Sinfo; use Sinfo; with Sinfo.Nodes; use Sinfo.Nodes; @@ -456,6 +457,11 @@ package body CStand is procedure Make_Dummy_Index (E : Entity_Id); -- Called to provide a dummy index field value for Any_Array/Any_String + function Make_Assertion_Level_Definition + (Nam : Name_Id) return Entity_Id; + -- Create an Assertion_Level definition with the given name in the' + -- Sandard package. + procedure Pack_String_Type (String_Type : Entity_Id); -- Generate proper tree for pragma Pack that applies to given type, and -- mark type as having the pragma. @@ -558,6 +564,18 @@ package body CStand is Set_First_Index (E, Index); end Make_Dummy_Index; + ------------------------------------- + -- Make_Assertion_Level_Definition -- + ------------------------------------- + + function Make_Assertion_Level_Definition (Nam : Name_Id) return Entity_Id + is + Level : constant Entity_Id := Make_Assertion_Level (Stloc, Nam); + begin + Insert_Assertion_Level (Level); + return Level; + end Make_Assertion_Level_Definition; + ---------------------- -- Pack_String_Type -- ---------------------- @@ -1494,6 +1512,11 @@ package body CStand is Set_Size_Known_At_Compile_Time (Standard_Duration); end Build_Duration; + Standard_Level_Static := Make_Assertion_Level_Definition (Name_Static); + Standard_Level_Runtime := Make_Assertion_Level_Definition (Name_Runtime); + Standard_Level_Default := + Make_Assertion_Level_Definition (Name_uDefault_Assertion_Level); + -- Build standard exception type. Note that the type name here is -- actually used in the generated code, so it must be set correctly. -- The type Standard_Exception_Type must be consistent with the type @@ -1935,6 +1958,10 @@ package body CStand is P ("-- characteristics of the Standard types for this compiler"); Write_Eol; + P ("pragma Assertion_Level (Runtime);"); + P ("pragma Assertion_Level (Static);"); + Write_Eol; + P ("package Standard is"); P ("pragma Pure (Standard);"); Write_Eol; diff --git a/gcc/ada/debug.adb b/gcc/ada/debug.adb index f250d7429a96..b7c54a000662 100644 --- a/gcc/ada/debug.adb +++ b/gcc/ada/debug.adb @@ -152,7 +152,7 @@ package body Debug is -- d_l Disable strict alignment of array types with aliased component -- d_m Run adareducer on crash -- d_n - -- d_o + -- d_o Disable Backend_Overflow_Checks_On_Target; used for testing. -- d_p Ignore assertion pragmas for elaboration -- d_q Do not enforce freezing for equality operator of boolean subtype -- d_r Disable the use of the return slot in functions @@ -995,6 +995,9 @@ package body Debug is -- d_l The compiler does not enforce the strict alignment of array types -- that are declared with an aliased component. + -- d_o The compiler disables Backend_Overflow_Checks_On_Target; used to + -- test the frontend support on targets without overflow checks. + -- d_p The compiler ignores calls to subprograms which verify the run-time -- semantics of invariants and postconditions in both the static and -- dynamic elaboration models. diff --git a/gcc/ada/doc/gnat_rm/gnat_language_extensions.rst b/gcc/ada/doc/gnat_rm/gnat_language_extensions.rst index ff111ddd3a12..f80ea52d1a16 100644 --- a/gcc/ada/doc/gnat_rm/gnat_language_extensions.rst +++ b/gcc/ada/doc/gnat_rm/gnat_language_extensions.rst @@ -581,6 +581,136 @@ Restricting the position of controlling parameter offers several advantages: * The result of a function is never a controlling result. +Generalized Finalization +------------------------ + +The ``Finalizable`` aspect can be applied to any record type, tagged or not, +to specify that it provides the same level of control on the operations of +initialization, finalization, and assignment of objects as the controlled +types (see RM 7.6(2) for a high-level overview). The only restriction is +that the record type must be a root type, in other words not a derived type. + +The aspect additionally makes it possible to specify relaxed semantics for +the finalization operations by means of the ``Relaxed_Finalization`` setting. +Here is the archetypal example: + +.. code-block:: ada + + type T is record + ... + end record + with Finalizable => (Initialize => Initialize, + Adjust => Adjust, + Finalize => Finalize, + Relaxed_Finalization => True); + + procedure Adjust (Obj : in out T); + procedure Finalize (Obj : in out T); + procedure Initialize (Obj : in out T); + +The three procedures have the same profile, with a single ``in out`` parameter, +and also have the same dynamic semantics as for controlled types: + + - ``Initialize`` is called when an object of type ``T`` is declared without + initialization expression. + + - ``Adjust`` is called after an object of type ``T`` is assigned a new value. + + - ``Finalize`` is called when an object of type ``T`` goes out of scope (for + stack-allocated objects) or is deallocated (for heap-allocated objects). + It is also called when the value is replaced by an assignment. + +However, when ``Relaxed_Finalization`` is either ``True`` or not explicitly +specified, the following differences are implemented relative to the semantics +of controlled types: + +* The compiler has permission to perform no automatic finalization of + heap-allocated objects: ``Finalize`` is only called when such an object + is explicitly deallocated, or when the designated object is assigned a new + value. As a consequence, no runtime support is needed for performing + implicit deallocation. In particular, no per-object header data is needed + for heap-allocated objects. + + Heap-allocated objects allocated through a nested access type will therefore + **not** be deallocated either. The result is simply that memory will be leaked + in this case. + +* The ``Adjust`` and ``Finalize`` procedures are automatically considered as + having the :ref:`No_Raise_Aspect` specified for them. In particular, the + compiler has permission to enforce none of the guarantees specified by the + RM 7.6.1 (14/1) and subsequent subclauses. + +Simple example of ref-counted type: + +.. code-block:: ada + + type T is record + Value : Integer; + Ref_Count : Natural := 0; + end record; + + procedure Inc_Ref (X : in out T); + procedure Dec_Ref (X : in out T); + + type T_Access is access all T; + + type T_Ref is record + Value : T_Access; + end record + with Finalizable => (Adjust => Adjust, + Finalize => Finalize); + + procedure Adjust (Ref : in out T_Ref) is + begin + Inc_Ref (Ref.Value); + end Adjust; + + procedure Finalize (Ref : in out T_Ref) is + begin + Def_Ref (Ref.Value); + end Finalize; + +Simple file handle that ensures resources are properly released: + +.. code-block:: ada + + package P is + type File (<>) is limited private; + + function Open (Path : String) return File; + + procedure Close (F : in out File); + + private + type File is limited record + Handle : ...; + end record + with Finalizable (Finalize => Close); + end P; + +Finalizable tagged types +^^^^^^^^^^^^^^^^^^^^^^^^ + +The aspect is inherited by derived types and the primitives may be overridden +by the derivation. The compiler-generated calls to these operations are then +dispatching whenever it makes sense, i.e. when the object in question is of a +class-wide type and the class includes at least one finalizable tagged type. + +Composite types +^^^^^^^^^^^^^^^ + +When a finalizable type is used as a component of a composite type, the latter +becomes finalizable as well. The three primitives are derived automatically +in order to call the primitives of their components. The dynamic semantics is +the same as for controlled components of composite types. + +Interoperability with controlled types +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Finalizable types are fully interoperable with controlled types, in particular +it is possible for a finalizable type to have a controlled component and vice +versa, but the stricter dynamic semantics, in other words that of controlled +types, is applied in this case. .. _Experimental_Language_Extensions: @@ -1495,137 +1625,6 @@ of the call is erroneous if the tag of the actual is changed while the formal parameter exists (that is, before leaving the corresponding callable construct). This is analogous to the RM 6.4.1(18) rule about discriminated parameters. -Generalized Finalization ------------------------- - -The ``Finalizable`` aspect can be applied to any record type, tagged or not, -to specify that it provides the same level of control on the operations of -initialization, finalization, and assignment of objects as the controlled -types (see RM 7.6(2) for a high-level overview). The only restriction is -that the record type must be a root type, in other words not a derived type. - -The aspect additionally makes it possible to specify relaxed semantics for -the finalization operations by means of the ``Relaxed_Finalization`` setting. -Here is the archetypal example: - -.. code-block:: ada - - type T is record - ... - end record - with Finalizable => (Initialize => Initialize, - Adjust => Adjust, - Finalize => Finalize, - Relaxed_Finalization => True); - - procedure Adjust (Obj : in out T); - procedure Finalize (Obj : in out T); - procedure Initialize (Obj : in out T); - -The three procedures have the same profile, with a single ``in out`` parameter, -and also have the same dynamic semantics as for controlled types: - - - ``Initialize`` is called when an object of type ``T`` is declared without - initialization expression. - - - ``Adjust`` is called after an object of type ``T`` is assigned a new value. - - - ``Finalize`` is called when an object of type ``T`` goes out of scope (for - stack-allocated objects) or is deallocated (for heap-allocated objects). - It is also called when the value is replaced by an assignment. - -However, when ``Relaxed_Finalization`` is either ``True`` or not explicitly -specified, the following differences are implemented relative to the semantics -of controlled types: - -* The compiler has permission to perform no automatic finalization of - heap-allocated objects: ``Finalize`` is only called when such an object - is explicitly deallocated, or when the designated object is assigned a new - value. As a consequence, no runtime support is needed for performing - implicit deallocation. In particular, no per-object header data is needed - for heap-allocated objects. - - Heap-allocated objects allocated through a nested access type will therefore - **not** be deallocated either. The result is simply that memory will be leaked - in this case. - -* The ``Adjust`` and ``Finalize`` procedures are automatically considered as - having the :ref:`No_Raise_Aspect` specified for them. In particular, the - compiler has permission to enforce none of the guarantees specified by the - RM 7.6.1 (14/1) and subsequent subclauses. - -Simple example of ref-counted type: - -.. code-block:: ada - - type T is record - Value : Integer; - Ref_Count : Natural := 0; - end record; - - procedure Inc_Ref (X : in out T); - procedure Dec_Ref (X : in out T); - - type T_Access is access all T; - - type T_Ref is record - Value : T_Access; - end record - with Finalizable => (Adjust => Adjust, - Finalize => Finalize); - - procedure Adjust (Ref : in out T_Ref) is - begin - Inc_Ref (Ref.Value); - end Adjust; - - procedure Finalize (Ref : in out T_Ref) is - begin - Def_Ref (Ref.Value); - end Finalize; - -Simple file handle that ensures resources are properly released: - -.. code-block:: ada - - package P is - type File (<>) is limited private; - - function Open (Path : String) return File; - - procedure Close (F : in out File); - - private - type File is limited record - Handle : ...; - end record - with Finalizable (Finalize => Close); - end P; - -Finalizable tagged types -^^^^^^^^^^^^^^^^^^^^^^^^ - -The aspect is inherited by derived types and the primitives may be overridden -by the derivation. The compiler-generated calls to these operations are then -dispatching whenever it makes sense, i.e. when the object in question is of a -class-wide type and the class includes at least one finalizable tagged type. - -Composite types -^^^^^^^^^^^^^^^ - -When a finalizable type is used as a component of a composite type, the latter -becomes finalizable as well. The three primitives are derived automatically -in order to call the primitives of their components. The dynamic semantics is -the same as for controlled components of composite types. - -Interoperability with controlled types -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Finalizable types are fully interoperable with controlled types, in particular -it is possible for a finalizable type to have a controlled component and vice -versa, but the stricter dynamic semantics, in other words that of controlled -types, is applied in this case. - .. _No_Raise_Aspect: No_Raise aspect @@ -1861,3 +1860,157 @@ be private to the enclosing package. This is necessary due to the previously mentioned legality rule, to prevent breaking the privacy of the type when imposing that rule on outside types that derive from the private view of the type. + +Structural Generic Instantiation +-------------------------------- + +The compiler implements a second kind of generic instantiation, called +"structural", alongside the traditional instantiation specified by the +language, which is defined as follows: the structural instantiation of +a generic unit on given actual parameters is the anonymous instantiation +of the generic unit on the actual parameters done in the outermost scope +where it would be legal to do an identical traditional instantiation. + +There is at most one structural instantiation of a generic unit on given +actual parameters done in a partition. + +Structural generic instances (the product of structural instantiation) +are implicitly created whenever a reference to them is made in a place +where a name is accepted by the language. + +Syntax +^^^^^^ + +.. code-block:: text + + name ::= { set of productions specified in the RM } + | structural_generic_instance_name + + structural_generic_instance_name ::= name generic_actual_part + +Legality Rules +^^^^^^^^^^^^^^ + +The ``name`` in a ``structural_generic_instance_name`` shall denote a generic +unit that is preelaborated. Note that, unlike in a traditional instantiation, +there are no square brackets around the ``generic_actual_part`` in the second +production, which means that it is mandatory and, therefore, that the generic +unit shall have at least one generic formal parameter. + +The generic unit shall not take a generic formal object of mode ``in out``. +If the generic unit takes a generic formal object of mode ``in``, then the +corresponding generic actual parameter shall be a static expression. + +A ``structural_generic_instance_name`` shall not be present in a library +unit if the structural instance is also a library unit and has a semantic +dependence on the former. + +Static Semantics +^^^^^^^^^^^^^^^^ + +A ``structural_generic_instance_name`` denotes the instance that is the +product of the structural instantiation of a generic unit on the specified +actual parameters. This instance is unique to a partition. + +Example: + +.. code-block:: ada + + with Ada.Containers.Vectors; + + procedure P is + V : Ada.Containers.Vectors(Positive,Integer).Vector; + + begin + V.Append (1); + V.Append (0); + Ada.Containers.Vectors(Positive,Integer).Generic_Sorting("<").Sort (V); + end; + +This procedure references two structural instantiations of two different generic +units: ``Ada.Containers.Vectors(Positive,Integer)`` is the structural instance +of the generic unit ``Ada.Containers.Vectors`` on ``Positive`` and ``Integer`` +and ``Ada.Containers.Vectors(Positive,Integer).Generic_Sorting("<")`` is the +structural instance of the nested generic unit +``Ada.Containers.Vectors(Positive,Integer).Generic_Sorting`` on ``"<"``. + +Note that the following example is illegal: + +.. code-block:: ada + + with Ada.Containers.Vectors; + + package Q is + type T is record + I : Integer; + end record; + + V : Ada.Containers.Vectors(Positive,T).Vector; + end Q; + +The reason is that ``Ada.Containers.Vectors``, ``Positive`` and ``Q.T`` being +library-level entities, the structural instance ``Ada.Containers.Vectors(Positive,T)`` is a library unit with a dependence +on ``Q`` and, therefore, cannot be referenced from within ``Q``. The simple +way out is to declare a traditional instantiation in this case: + +.. code-block:: ada + + with Ada.Containers.Vectors; + + package Q is + type T is record + I : Integer; + end record; + + package Vectors_Of_T is new Ada.Containers.Vectors(Positive,T); + + V : Vectors_Of_T.Vector; + end Q; + +But the following example is legal: + +.. code-block:: ada + + with Ada.Containers.Vectors; + + procedure P is + type T is record + I : Integer; + end record; + + V : Ada.Containers.Vectors(Positive,T).Vector; + end; + +because the structural instance ``Ada.Containers.Vectors(Positive,T)`` is +not a library unit. + +The first example can be rewritten in a less verbose manner: + +.. code-block:: ada + + with Ada.Containers.Vectors; use Ada.Containers.Vectors(Positive,Integer); + + procedure P is + V : Vector; + + begin + V.Append (1); + V.Append (0); + Generic_Sorting("<").Sort (V); + end; + +Another example, which additionally uses the inference of dependent types: + +.. code-block:: ada + + with Ada.Unchecked_Deallocation; + + procedure P is + + type Integer_Access is access all Integer; + + A : Integer_Access := new Integer'(1); + + begin + Ada.Unchecked_Deallocation(Name => Integer_Access) (A); + end; diff --git a/gcc/ada/doc/gnat_rm/implementation_advice.rst b/gcc/ada/doc/gnat_rm/implementation_advice.rst index d4fdd09fccde..7eccbbcebe03 100644 --- a/gcc/ada/doc/gnat_rm/implementation_advice.rst +++ b/gcc/ada/doc/gnat_rm/implementation_advice.rst @@ -1218,7 +1218,8 @@ RM E.5(28-29): Partition Communication Subsystem should allow them to block until the corresponding subprogram body returns." -A separately supplied PCS that can be used with GNAT when combined with the PolyORB product. +A separately supplied PCS that can be used with GNAT when combined with the PolyORB product (NB! See the note in :ref:`polyORB` regarding the lifetime +of this product). "The ``Write`` operation on a stream of type ``Params_Stream_Type`` should raise ``Storage_Error`` if it runs out of space trying to diff --git a/gcc/ada/doc/gnat_rm/implementation_defined_aspects.rst b/gcc/ada/doc/gnat_rm/implementation_defined_aspects.rst index a36956805125..69996b49d6d3 100644 --- a/gcc/ada/doc/gnat_rm/implementation_defined_aspects.rst +++ b/gcc/ada/doc/gnat_rm/implementation_defined_aspects.rst @@ -267,6 +267,89 @@ or propagate an exception). For the syntax and semantics of this aspect, see the SPARK 2014 Reference Manual, section 6.1.10. +Aspect Extended_Access +====================== + +This nonoverridable boolean-valued type-related representation aspect can be +specified as part of a full_type_declaration for a general access type +designating an unconstrained array subtype. + +The absence of an Extended_Access aspect specification for such a +full_type_declaration is equivalent to an explicit +"Extended_Access => False" specification. This implies +that the aspect is never unspecified for an eligible access type. +An access type for which this aspect is True is said to be an extended access +type; this includes the case of a type derived from an extended access type. +Similarly, a value of such a type is said to be an extended access value. + +The representation of an extended access value is different than that of +other access values. This representation makes it possible to designate +objects that cannot be designated using the usual "thin" or "fat" access +representations for an access type designating an unconstrained array +subtype (notably slices and array objects imported from other languages). + +In particular, two rules are modified in determining the legality of an Access +or Unchecked_Access attribute reference if the expected access type is +an extended access type: + +* A slice of an aliased array object of a non-bitpacked type (more precisely, + of an array type having independently addressable components) is considered + to be aliased (and the accessibility level of a slice of an array object is + defined to be that of the array object); this also applies to renamings + of such slices, slices of such renamings, etc. + +* The requirement that the nominal subtype of the prefix shall statically + match the designated subtype of the access type need not be met. + +The Size aspect (and other aspects including Stream_Size, Object_Size, +and Alignment) of an extended access type may depend on the properties of the +designated type. Further details of this dependence are not documented. + +An extended access value is not convertible to a non-extended access type, +although conversions in the opposite direction are allowed. We don't want +to allow + +.. code-block:: ada + + type Big_Ref is access all String with Extended_Access; + type Small_Ref is access all String; + Obj : aliased String := "abcde"; + Big_Ptr : Big_Ref := Obj (2 .. 4)'Access; -- OK + Small_Ptr : Small_Ref := Small_Ref (Big_Ptr); -- ERROR: illegal conversion + +because there is no way to represent the result of such a conversion. + +A dereference of an extended access value (or a reference to a renaming +thereof) shall not occur in any of the following contexts: + +* as an operative constituent of the prefix of an Access or + Unchecked_Access attribute reference whose expected type is not extended; or + +* as an operative constituent of an actual parameter in a call where + the corresponding formal parameter is explicitly aliased. + +For the same reasons that explicit conversions from an extended access type to a +non-extended access type are forbidden, we also need to disallow getting the +same effect via a Extended_Ptr.all'Access reference; this includes the case +of passing Extended_Ptr.all as an actual parameter in a call where the +corresponding formal parameter is explicitly aliased (because the callee +could evaluate Formal_Parameter'Access). This goal is accomplished by +adjusting the definition of the term "aliased". A dereference of an extended +value occurring in one of these contexts is defined to denote +a nonaliased view. This has the desired effect because these contexts require +an aliased view. Continuing the preceding example, this rule disallows + +.. code-block:: ada + + Sneaky_1 : Small_Ptr := Big_Ptr.all'Access; -- ERROR: illegal 'Access prefix + + function Make (Str : aliased in out String) return Small_Ptr + is (Str'Access); -- OK + + Sneaky_2 : Small_Ptr := Make (Str => Big_Ptr.all); -- ERROR: bad parameter + +for the same reason given above in the case of an explicit type conversion. + Aspect Extensions_Visible ========================= .. index:: Extensions_Visible diff --git a/gcc/ada/doc/gnat_rm/implementation_defined_characteristics.rst b/gcc/ada/doc/gnat_rm/implementation_defined_characteristics.rst index f7746c8e72fe..887cc110d668 100644 --- a/gcc/ada/doc/gnat_rm/implementation_defined_characteristics.rst +++ b/gcc/ada/doc/gnat_rm/implementation_defined_characteristics.rst @@ -377,7 +377,8 @@ may have been set by a call to ``Ada.Command_Line.Set_Exit_Status``). * "The mechanisms for building and running partitions. See 10.2(24)." -GNAT itself supports programs with only a single partition. The PolyORB product (which also includes an implementation of the PCS) provides a completely flexible method for building and running programs consisting of multiple partitions. See the separate PolyORB user guide for details. +GNAT itself supports programs with only a single partition. The PolyORB product (which also includes an implementation of the PCS) provides a completely flexible method for building and running programs consisting of multiple partitions. **NB!** See the note in :ref:`polyORB` regarding the lifetime +of this product. * "The details of program execution, including program @@ -390,8 +391,7 @@ See separate section on compilation model. implementation. See 10.2(28)." Passive partitions are supported on targets where shared memory is -provided by the operating system. See the PolyORB user guide for -further details. +provided by the operating system. **NB!** See the note in :ref:`polyORB` regarding the lifetime of this product. * "The information returned by ``Exception_Message``. See 11.4.1(10)." @@ -1185,27 +1185,29 @@ Unknown. programs. See E(5)." The PolyORB product provides means creating and executing -distributed programs. See the PolyORB user guide for further details. +distributed programs. **NB!** See the note in :ref:`polyORB` regarding the lifetime of this product. * "Any events that can result in a partition becoming inaccessible. See E.1(7)." See the PolyORB user guide for full details on such events. +**NB!** Consider the note in :ref:`polyORB` regarding the lifetime +of this product. * "The scheduling policies, treatment of priorities, and management of shared resources between partitions in certain cases. See E.1(11)." See the PolyORB user guide for full details on these aspects of -multi-partition execution. +multi-partition execution. **NB!** Consider the note in :ref:`polyORB` regarding the lifetime of this product. * "Whether the execution of the remote subprogram is immediately aborted as a result of cancellation. See E.4(13)." See the PolyORB user guide for details on the effect of abort in -a distributed application. +a distributed application. **NB!** Consider the note in :ref:`polyORB` regarding the lifetime of this product. * "The range of type System.RPC.Partition_Id. See E.5(14)." @@ -1216,7 +1218,7 @@ System.RPC.Partition_ID'Last is Integer'Last. See source file :file:`s-rpc.ads`. "Implementation-defined interfaces in the PCS. See E.5(26)." See the PolyORB user guide for a full description of all -implementation defined interfaces. +implementation defined interfaces. **NB!** See the note in :ref:`polyORB` regarding the lifetime of this product. * "The values of named numbers in the package diff --git a/gcc/ada/doc/gnat_rm/implementation_defined_pragmas.rst b/gcc/ada/doc/gnat_rm/implementation_defined_pragmas.rst index 3986298d11e9..183b2ff26cd5 100644 --- a/gcc/ada/doc/gnat_rm/implementation_defined_pragmas.rst +++ b/gcc/ada/doc/gnat_rm/implementation_defined_pragmas.rst @@ -398,9 +398,8 @@ The analyzed pragma is retained in the tree, but not otherwise processed by any part of the GNAT compiler, except to generate corresponding note lines in the generated ALI file. For the format of these note lines, see the compiler source file lib-writ.ads. This pragma is intended for use by -external tools, including ASIS. The use of pragma Annotate does not -affect the compilation process in any way. This pragma may be used as -a configuration pragma. +external tools. The use of pragma Annotate does not affect the compilation +process in any way. This pragma may be used as a configuration pragma. Pragma Assert ============= @@ -466,6 +465,10 @@ of Ada from 2005 on. In GNAT, it is implemented in all versions of Ada, and the DISABLE policy is an implementation-defined addition. +This is an assertion kind pragma that can associate a set of its arguments +with an assertion level. See SPARK 2014 Reference Manual, section +11.4.2. + Pragma Assert_And_Cut ===================== @@ -490,6 +493,25 @@ a subprogram into sections for the purposes of testing or formal verification. The pragma also serves as useful documentation. +This is an assertion kind pragma that can associate a set of its arguments +with an assertion level. See SPARK 2014 Reference Manual, section +11.4.2. + +Pragma Assertion_Level +======================= + +Syntax:: + + pragma Assertion_Level (LEVEL_IDENTIFIER + [, depends => DEPENDENCY_DESCRIPTOR]); + + DEPENDENCY_DESCRIPTOR ::= LEVEL_IDENTIFIER | LEVEL_IDENTIFIER_LIST + + LEVEL_IDENTIFIER_LIST ::= '[' LEVEL_IDENTIFIER {, LEVEL_IDENTIFIER} ']' + +For the semantics of this pragma, see the SPARK 2014 Reference Manual, +section 11.4.3. + Pragma Assertion_Policy ======================= @@ -501,7 +523,7 @@ Syntax:: ASSERTION_KIND => POLICY_IDENTIFIER {, ASSERTION_KIND => POLICY_IDENTIFIER}); - ASSERTION_KIND ::= RM_ASSERTION_KIND | ID_ASSERTION_KIND + ASSERTION_KIND ::= RM_ASSERTION_KIND | ID_ASSERTION_KIND | ASSERTION_LEVEL RM_ASSERTION_KIND ::= Assert | Static_Predicate | @@ -541,6 +563,10 @@ The assertion kinds ``RM_ASSERTION_KIND`` are those defined in the Ada standard. The assertion kinds ``ID_ASSERTION_KIND`` are implementation defined additions recognized by the GNAT compiler. +Additionally the pragma can apply to an assertion level defined by the +``Assertion_Level`` pragma. For more details see the SPARK 2014 Reference +Manual, section 11.4.2. + The pragma applies in both cases to pragmas and aspects with matching names, e.g. ``Pre`` applies to the Pre aspect, and ``Precondition`` applies to both the ``Precondition`` pragma @@ -608,6 +634,10 @@ but it acts as a useful run-time check that the assumption is met, and documents the need to ensure that it is met by reference to information outside the program. +This is an assertion kind pragma that can associate a set of its arguments +with an assertion level. See SPARK 2014 Reference Manual, section +11.4.2. + Pragma Assume_No_Invalid_Values =============================== .. index:: Invalid representations @@ -1297,6 +1327,10 @@ call, as determined by the corresponding case guard evaluating to True, and that the consequence for this case should hold when the subprogram returns. +This is an assertion kind pragma that can associate a set of its arguments +with an assertion level. See SPARK 2014 Reference Manual, section +11.4.2. + Pragma Convention_Identifier ============================ .. index:: Conventions, synonyms @@ -1505,6 +1539,10 @@ pragmas can be enabled either by use of the command line switch *-gnata* or by use of the pragma ``Check_Policy`` with a first argument of ``Debug``. +This is an assertion kind pragma that can associate a set of its arguments +with an assertion level. See SPARK 2014 Reference Manual, section +11.4.2. + Pragma Debug_Policy =================== @@ -1534,6 +1572,10 @@ Syntax: For the semantics of this pragma, see the entry for aspect ``Default_Initial_Condition`` in the SPARK 2014 Reference Manual, section 7.3.3. +This is an assertion kind pragma that can associate a set of its arguments +with an assertion level. See SPARK 2014 Reference Manual, section +11.4.2. + Pragma Default_Scalar_Storage_Order =================================== .. index:: Default_Scalar_Storage_Order @@ -2922,6 +2964,10 @@ Syntax: For the semantics of this pragma, see the entry for aspect ``Initial_Condition`` in the SPARK 2014 Reference Manual, section 7.1.6. +This is an assertion kind pragma that can associate a set of its arguments +with an assertion level. See SPARK 2014 Reference Manual, section +11.4.2. + Pragma Initialize_Scalars ========================= .. index:: debugging with Initialize_Scalars @@ -3274,6 +3320,10 @@ invariant pragma for the same entity. For further details on the use of this pragma, see the Ada 2012 documentation of the Type_Invariant aspect. +This is an assertion kind pragma that can associate a set of its arguments +with an assertion level. See SPARK 2014 Reference Manual, section +11.4.2. + Pragma Keep_Names ================= @@ -3651,6 +3701,10 @@ may be used to refer to the value of an expression on entry to the loop. This attribute can only be used within the expression of a ``Loop_Invariant`` pragma. For full details, see documentation of attribute ``Loop_Entry``. +This is an assertion kind pragma that can associate a set of its arguments +with an assertion level. See SPARK 2014 Reference Manual, section +11.4.2. + Pragma Loop_Optimize ==================== @@ -3753,6 +3807,10 @@ statements. The ``Loop_Entry`` attribute may be used within the expressions of the ``Loop_Variant`` pragma to refer to values on entry to the loop. +This is an assertion kind pragma that can associate a set of its arguments +with an assertion level. See SPARK 2014 Reference Manual, section +11.4.2. + Pragma Machine_Attribute ======================== @@ -4627,6 +4685,10 @@ if there is no separate subprogram declaration, then it can appear at the start of the declarations in a subprogram body (preceded only by other pragmas). +This is an assertion kind pragma that can associate a set of its arguments +with an assertion level. See SPARK 2014 Reference Manual, section +11.4.2. + Pragma Postcondition ==================== .. index:: Postcondition @@ -4799,6 +4861,10 @@ use of the pragma identifier ``Check``. Historically, pragma Ada 2012, and has been retained in its original form for compatibility purposes. +This is an assertion kind pragma that can associate a set of its arguments +with an assertion level. See SPARK 2014 Reference Manual, section +11.4.2. + Pragma Post_Class ================= .. index:: Post @@ -4833,6 +4899,10 @@ aspects, but is prepared to ignore the pragmas. The assertion policy that controls this pragma is ``Post'Class``, not ``Post_Class``. +This is an assertion kind pragma that can associate a set of its arguments +with an assertion level. See SPARK 2014 Reference Manual, section +11.4.2. + Pragma Pre ========== .. index:: Pre @@ -4857,6 +4927,10 @@ if there is no separate subprogram declaration, then it can appear at the start of the declarations in a subprogram body (preceded only by other pragmas). +This is an assertion kind pragma that can associate a set of its arguments +with an assertion level. See SPARK 2014 Reference Manual, section +11.4.2. + Pragma Precondition =================== .. index:: Preconditions @@ -4917,6 +4991,10 @@ use of the pragma identifier ``Check``. Historically, pragma Ada 2012, and has been retained in its original form for compatibility purposes. +This is an assertion kind pragma that can associate a set of its arguments +with an assertion level. See SPARK 2014 Reference Manual, section +11.4.2. + .. _Pragma-Predicate: Pragma Predicate @@ -4977,6 +5055,10 @@ fundamentally changed (for example a membership test defined for subtype B). When following this approach, the use of predicates should be avoided. +This is an assertion kind pragma that can associate a set of its arguments +with an assertion level. See SPARK 2014 Reference Manual, section +11.4.2. + Pragma Predicate_Failure ======================== @@ -5074,6 +5156,10 @@ aspects, but is prepared to ignore the pragmas. The assertion policy that controls this pragma is ``Pre'Class``, not ``Pre_Class``. +This is an assertion kind pragma that can associate a set of its arguments +with an assertion level. See SPARK 2014 Reference Manual, section +11.4.2. + Pragma Priority_Specific_Dispatching ==================================== @@ -5562,6 +5648,10 @@ Syntax: For the semantics of this pragma, see the entry for aspect ``Refined_Post`` in the SPARK 2014 Reference Manual, section 7.2.7. +This is an assertion kind pragma that can associate a set of its arguments +with an assertion level. See SPARK 2014 Reference Manual, section +11.4.2. + .. _Pragma-Refined_State: Pragma Refined_State @@ -6547,6 +6637,9 @@ The ``Subprogram_Variant`` pragma is intended to be an exact replacement for the implementation-defined ``Subprogram_Variant`` aspect, and shares its restrictions and semantics. +This is an assertion kind pragma that can associate a set of its arguments +with an assertion level. See SPARK 2014 Reference Manual, section +11.4.2. Pragma Subtitle =============== @@ -6975,6 +7068,10 @@ does not permit a string parameter, and it is controlled by the assertion identifier ``Type_Invariant`` rather than ``Invariant``. +This is an assertion kind pragma that can associate a set of its arguments +with an assertion level. See SPARK 2014 Reference Manual, section +11.4.2. + .. _Pragma-Type_Invariant_Class: Pragma Type_Invariant_Class @@ -7004,6 +7101,10 @@ aspects, but is prepared to ignore the pragmas. The assertion policy that controls this pragma is ``Type_Invariant'Class``, not ``Type_Invariant_Class``. +This is an assertion kind pragma that can associate a set of its arguments +with an assertion level. See SPARK 2014 Reference Manual, section +11.4.2. + Pragma Unchecked_Union ====================== .. index:: Unions in C diff --git a/gcc/ada/doc/gnat_rm/obsolescent_features.rst b/gcc/ada/doc/gnat_rm/obsolescent_features.rst index 3ba502188e03..d78d986f4051 100644 --- a/gcc/ada/doc/gnat_rm/obsolescent_features.rst +++ b/gcc/ada/doc/gnat_rm/obsolescent_features.rst @@ -5,9 +5,19 @@ Obsolescent Features ******************** This chapter describes features that are provided by GNAT, but are -considered obsolescent since there are preferred ways of achieving -the same effect. These features are provided solely for historical -compatibility purposes. +considered obsolescent since there are other, more appropriate, ways +of achieving the same effect. These features are provided solely for +historical compatibility purposes. + +.. _polyORB: + +PolyORB +======== + +AWS is a deprecated product. It will be baselined with the GNAT Pro +release 28. After this release, there will be no new versions of this +product. Contact your sales representative or send a message to +sales@adacore.com to get recommendations for replacements. .. _pragma_No_Run_Time: diff --git a/gcc/ada/doc/gnat_rm/security_hardening_features.rst b/gcc/ada/doc/gnat_rm/security_hardening_features.rst index 015b9ce35331..169d58b43ea1 100644 --- a/gcc/ada/doc/gnat_rm/security_hardening_features.rst +++ b/gcc/ada/doc/gnat_rm/security_hardening_features.rst @@ -10,6 +10,8 @@ are provided by GNAT. The features in this chapter are currently experimental and subject to change. +These features are supported only by the GCC back end, not by LLVM. + .. Register Scrubbing: Register Scrubbing diff --git a/gcc/ada/doc/gnat_rm/specialized_needs_annexes.rst b/gcc/ada/doc/gnat_rm/specialized_needs_annexes.rst index f34368c8c94d..666e0b30a71a 100644 --- a/gcc/ada/doc/gnat_rm/specialized_needs_annexes.rst +++ b/gcc/ada/doc/gnat_rm/specialized_needs_annexes.rst @@ -17,7 +17,7 @@ Ada 95, Ada 2005, Ada 2012, and Ada 2022 define a number of Specialized Needs An *Distributed Systems (Annex E)* Stub generation is fully implemented in the GNAT compiler. In addition, a complete compatible PCS is available as part of ``PolyORB``, - a separate product. Note, that PolyORB is a deprecated product and will be eventually replaced with other technologies such as ``RTI``. + a separate product. **NB!** See the note in :ref:`polyORB` regarding the lifetime of this product. *Information Systems (Annex F)* diff --git a/gcc/ada/doc/gnat_rm/the_gnat_library.rst b/gcc/ada/doc/gnat_rm/the_gnat_library.rst index d041090eab06..bd17490e5cf6 100644 --- a/gcc/ada/doc/gnat_rm/the_gnat_library.rst +++ b/gcc/ada/doc/gnat_rm/the_gnat_library.rst @@ -663,6 +663,18 @@ sequences for various UCS input formats. General routines for swapping the bytes in 2-, 4-, and 8-byte quantities. Machine-specific implementations are available in some cases. +.. _`GNAT.C_Time_(g-c_time.ads)`: + +``GNAT.C_Time`` (:file:`g-c_time.ads`) +====================================== + +.. index:: GNAT.C_Time (g-c_time.ads) + +.. index:: Time + +Provides the time_t, timeval and timespec types corresponding to the C +types defined by the OS, as well as various conversion functions. + .. _`GNAT.Calendar_(g-calend.ads)`: ``GNAT.Calendar`` (:file:`g-calend.ads`) @@ -674,8 +686,6 @@ Machine-specific implementations are available in some cases. Extends the facilities provided by ``Ada.Calendar`` to include handling of days of the week, an extended ``Split`` and ``Time_Of`` capability. -Also provides conversion of ``Ada.Calendar.Time`` values to and from the -C ``timeval`` format. .. _`GNAT.Calendar.Time_IO_(g-catiio.ads)`: @@ -2037,7 +2047,8 @@ technically an implementation-defined addition). This package provides facilities for partition interfacing. It is used primarily in a distribution context when using Annex E -with ``PolyORB``. +with ``PolyORB``. **NB!** See the note in :ref:`polyORB` regarding +the lifetime of this product. .. _`System.Pool_Global_(s-pooglo.ads)`: diff --git a/gcc/ada/doc/gnat_ugn/building_executable_programs_with_gnat.rst b/gcc/ada/doc/gnat_ugn/building_executable_programs_with_gnat.rst index fdf19481a6fc..9893c5b77276 100644 --- a/gcc/ada/doc/gnat_ugn/building_executable_programs_with_gnat.rst +++ b/gcc/ada/doc/gnat_ugn/building_executable_programs_with_gnat.rst @@ -1608,8 +1608,12 @@ Alphabetical List of All Switches .. index:: -gnateG (gcc) -:switch:`-gnateG` - Save result of preprocessing in a text file. +:switch:`-gnateG[bce]` + Save result of preprocessing in a text file. An optional character (b, c, + or e) can be appended to indicate that filtered lines are to be replaced by + blank lines, comment lines that include the filtered line, or empty comment + lines ("--!"), respectively. The default is to replace filtered lines with + blank lines. .. index:: -gnateH (gcc) @@ -1933,13 +1937,13 @@ Alphabetical List of All Switches Ignore representation clauses. When this switch is used, representation clauses are treated as comments. This is useful when initially porting code where you want to ignore rep clause - problems, and also for compiling foreign code (particularly - for use with ASIS). The representation clauses that are ignored - are: enumeration_representation_clause, record_representation_clause, - and attribute_definition_clause for the following attributes: - Address, Alignment, Bit_Order, Component_Size, Machine_Radix, - Object_Size, Scalar_Storage_Order, Size, Small, Stream_Size, - and Value_Size. Pragma Default_Scalar_Storage_Order is also ignored. + problems, and also for compiling foreign code. The representation + clauses that are ignored are: enumeration_representation_clause, + record_representation_clause, and attribute_definition_clause for the + following attributes: Address, Alignment, Bit_Order, Component_Size, + Machine_Radix, Object_Size, Scalar_Storage_Order, Size, Small, + Stream_Size, and Value_Size. + Pragma Default_Scalar_Storage_Order is also ignored. Note that this option should be used only for compiling -- the code is likely to malfunction at run time. @@ -3751,7 +3755,7 @@ of the pragma in the :title:`GNAT_Reference_manual`). * Assignment of an item to itself. - * Type conversion that converts an expression to its own type. + * Type conversion that converts an expression to its own subtype. * Use of the attribute ``Base`` where ``typ'Base`` is the same as ``typ``. @@ -8116,20 +8120,18 @@ We provide two options that you can use to build code with GNAT LLVM: * ``gprbuild`` can detect and use GNAT LLVM when it is installed. - ``gprbuild`` uses the first applicable compiler on the executable - search path, including GNAT LLVM. An easy way to build with GNAT - LLVM is to make it available on the operating system's search path - before any other Ada compiler (such as the GCC version of GNAT). To - avoid accidentally using a different compiler than the one you want - to use, we recommend generating an explicit toolchain configuration - file with ``gprconfig`` and using it with ``gprbuild``; see the - *GPRbuild and GPR Companion Tools User's Guide* for details. You - can determine from the first line of the :file:`.ali` file - which version of GNAT built that file because it contains either - :code:`GNAT` or :code:`GNAT-LLVM`. - - You can also explicitly select GNAT LLVM in your existing GPR project - file by adding :code:`for Toolchain_Name("Ada") use "GNAT_LLVM";` + ``gprbuild`` uses the first applicable compiler on the executable search + path, including GNAT LLVM. An easy way to build with GNAT LLVM is to make + it available on the operating system's search path before any other Ada + compiler (such as the GCC version of GNAT). To avoid accidentally using a + different compiler than the one you want to use, we recommend explicitly + selecting GNAT LLVM in your existing GPR project file by adding + :code:`for Toolchain_Name ("Ada") use "GNAT_LLVM";`. You can also + generate an explicit toolchain configuration file with ``gprconfig`` and + use it with ``gprbuild``; see the *GPRbuild and GPR Companion Tools + User's Guide* for details. You can determine from the first line of the + :file:`.ali` file which version of GNAT built that file because it + contains either :code:`GNAT` or :code:`GNAT-LLVM`. .. only:: PRO @@ -8145,5 +8147,4 @@ GNAT. .. only:: PRO - It provides the same runtimes with the exception that light runtimes - are not currently included with the native compilers. + It provides the same runtimes. diff --git a/gcc/ada/doc/gnat_ugn/the_gnat_compilation_model.rst b/gcc/ada/doc/gnat_ugn/the_gnat_compilation_model.rst index 891886b53601..94b41b52adf2 100644 --- a/gcc/ada/doc/gnat_ugn/the_gnat_compilation_model.rst +++ b/gcc/ada/doc/gnat_ugn/the_gnat_compilation_model.rst @@ -2931,6 +2931,18 @@ Switches for ``gnatprep`` don't specify a value, the symbol is defined to be ``True``. You can use this switch instead of providing a definition file. +.. index:: -e (gnatprep) + +:switch:`-e` + Causes both preprocessor lines and the lines deleted by + preprocessing to be replaced by empty comment lines marked + with ``"--!"`` (and no other text) in the output source file, + preserving line numbers in the output file. This option can + be useful as an alternative to :switch:`-b` and :switch:`-c` + when compilation style switches like :switch:`-gnatyu` or + :switch:`-gnatyM` are used (to avoid warnings about multiple + blank lines or lines too long). + .. index:: -r (gnatprep) :switch:`-r` @@ -3248,7 +3260,7 @@ that relate to integrated preprocessing. Causes both preprocessor lines and the lines deleted by preprocessing to be replaced by blank lines, preserving the line number. This switch is always implied; however, if specified after :switch:`-c` - it cancels the effect of :switch:`-c`. + or :switch:`-e` it cancels the effect of those switches. :switch:`-c` Causes both preprocessor lines and the lines deleted @@ -3266,6 +3278,12 @@ that relate to integrated preprocessing. name defined in a definition file. + :switch:`-e` + Causes both preprocessor lines and the lines deleted by + preprocessing to be replaced by empty comment lines marked + with '`--!`' (and no other text) in the output source file, + + :switch:`-s` Causes a sorted list of symbol names and values to be listed on the standard output file. @@ -3306,12 +3324,19 @@ that relate to integrated preprocessing. This switch is similar to switch :switch:`-D` of ``gnatprep``. -:switch:`-gnateG` +.. index:: -gnateG (gcc) + +:switch:`-gnateG[bce]` When integrated preprocessing is performed on source file :file:`filename.extension`, create or overwrite :file:`filename.extension.prep` to contain the result of the preprocessing. For example if the source file is :file:`foo.adb` then the output file is :file:`foo.adb.prep`. + An optional character (b, c, or e) can be appended to indicate that filtered + lines are to be replaced by blank lines, comments, or empty comments (see + documentation above about :switch:`-b`, :switch:`-c`, and :switch:`-e`). + If one of those switches is given in a preprocessor data file, then it + will override any option included with :switch:`-gnateG`. .. _Mixed_Language_Programming: diff --git a/gcc/ada/einfo-utils.adb b/gcc/ada/einfo-utils.adb index 417da6e828bc..290ae331d37a 100644 --- a/gcc/ada/einfo-utils.adb +++ b/gcc/ada/einfo-utils.adb @@ -669,6 +669,8 @@ package body Einfo.Utils is Result := Id; else pragma Assert (Is_Type (Id)); + -- ...because Is_Base_Type returns True for nontypes + Result := Etype (Id); if False then pragma Assert (Is_Base_Type (Result)); @@ -679,9 +681,29 @@ package body Einfo.Utils is -- expect. end if; end if; + + -- pragma Assert (Result = Base_Type_If_Set (Id)); + -- Disabled; too slow end return; end Base_Type; + ---------------------- + -- Base_Type_If_Set -- + ---------------------- + + function Base_Type_If_Set (Id : E) return Opt_N_Entity_Id is + begin + return Result : Opt_N_Entity_Id do + if Is_Base_Type (Id) then + Result := Id; + elsif Field_Is_Initial_Zero (Id, F_Etype) then + Result := Empty; + else + Result := Etype (Id); + end if; + end return; + end Base_Type_If_Set; + ---------------------- -- Declaration_Node -- ---------------------- @@ -1374,30 +1396,43 @@ package body Einfo.Utils is ------------------------------ function Implementation_Base_Type (Id : E) return E is - Bastyp : Entity_Id; Imptyp : Entity_Id; - begin - Bastyp := Base_Type (Id); - - if Is_Incomplete_Or_Private_Type (Bastyp) then - Imptyp := Underlying_Type (Bastyp); + return Result : E := Base_Type (Id) do + if Is_Incomplete_Or_Private_Type (Result) then + Imptyp := Underlying_Type (Result); - -- If we have an implementation type, then just return it, - -- otherwise we return the Base_Type anyway. This can only - -- happen in error situations and should avoid some error bombs. + -- If we have an implementation type, return its Base_Type. - if Present (Imptyp) then - return Base_Type (Imptyp); - else - return Bastyp; + if Present (Imptyp) then + Result := Base_Type (Imptyp); + end if; end if; - else - return Bastyp; - end if; + -- pragma Assert (Result = Implementation_Base_Type_If_Set (Id)); + -- Disabled; too slow + end return; end Implementation_Base_Type; + ------------------------------------- + -- Implementation_Base_Type_If_Set -- + ------------------------------------- + + function Implementation_Base_Type_If_Set (Id : E) return Opt_N_Entity_Id is + Imptyp : Entity_Id; + begin + return Result : Opt_N_Entity_Id := Base_Type_If_Set (Id) do + if Present (Result) and then Is_Incomplete_Or_Private_Type (Result) + then + Imptyp := Underlying_Type (Result); + + if Present (Imptyp) then + Result := Base_Type_If_Set (Imptyp); + end if; + end if; + end return; + end Implementation_Base_Type_If_Set; + ------------------------- -- Invariant_Procedure -- ------------------------- @@ -2540,51 +2575,74 @@ package body Einfo.Utils is --------------- function Root_Type (Id : E) return E is - T, Etyp : Entity_Id; + Etyp : Entity_Id; begin - pragma Assert (Nkind (Id) in N_Entity); + return T : E := Base_Type (Id) do + if Ekind (T) = E_Class_Wide_Type then + T := Etype (T); + else + loop + Etyp := Etype (T); - T := Base_Type (Id); + exit when T = Etyp + or else + (Is_Private_Type (T) and then Etyp = Full_View (T)) + or else + (Is_Private_Type (Etyp) and then Full_View (Etyp) = T); - if Ekind (T) = E_Class_Wide_Type then - return Etype (T); + T := Etyp; - -- Other cases + -- Quit if there is a circularity in the inheritance chain. + -- This happens in some error situations and we do not want + -- to get stuck in this loop. - else - loop - Etyp := Etype (T); + if T = Base_Type (Id) then + Check_Error_Detected; + exit; + end if; + end loop; + end if; - if T = Etyp then - return T; + -- pragma Assert (T = Root_Type_If_Set (Id)); + -- Disabled; too slow + end return; + end Root_Type; - -- Following test catches some error cases resulting from - -- previous errors. + ---------------------- + -- Root_Type_If_Set -- + ---------------------- - elsif No (Etyp) then - Check_Error_Detected; - return T; + function Root_Type_If_Set (Id : E) return Opt_N_Entity_Id is + Etyp : Entity_Id; - elsif Is_Private_Type (T) and then Etyp = Full_View (T) then - return T; + begin + return T : Opt_N_Entity_Id := Base_Type_If_Set (Id) do + if Ekind (T) = E_Class_Wide_Type then + T := Etype (T); + else + loop + Etyp := Etype (T); - elsif Is_Private_Type (Etyp) and then Full_View (Etyp) = T then - return T; - end if; + exit when No (Etyp) or else T = Etyp + or else + (Is_Private_Type (T) and then Etyp = Full_View (T)) + or else + (Is_Private_Type (Etyp) and then Full_View (Etyp) = T); - T := Etyp; + T := Etyp; - -- Return if there is a circularity in the inheritance chain. This - -- happens in some error situations and we do not want to get - -- stuck in this loop. + -- Quit if there is a circularity in the inheritance chain. + -- This happens in some error situations and we do not want + -- to get stuck in this loop. - if T = Base_Type (Id) then - return T; - end if; - end loop; - end if; - end Root_Type; + if T = Base_Type_If_Set (Id) then + exit; + end if; + end loop; + end if; + end return; + end Root_Type_If_Set; --------------------- -- Safe_Emax_Value -- @@ -3010,7 +3068,7 @@ package body Einfo.Utils is -- Underlying_Type -- --------------------- - function Underlying_Type (Id : E) return Entity_Id is + function Underlying_Type (Id : E) return Opt_N_Entity_Id is begin -- For record_with_private the underlying type is always the direct full -- view. Never try to take the full view of the parent it does not make diff --git a/gcc/ada/einfo-utils.ads b/gcc/ada/einfo-utils.ads index 78b49891f609..27cf9e670f0e 100644 --- a/gcc/ada/einfo-utils.ads +++ b/gcc/ada/einfo-utils.ads @@ -161,6 +161,15 @@ package Einfo.Utils is function First_Formal (Id : E) return Entity_Id; function First_Formal_With_Extras (Id : E) return Entity_Id; + function Base_Type_If_Set (Id : E) return Opt_N_Entity_Id; + function Implementation_Base_Type_If_Set (Id : E) return Opt_N_Entity_Id; + function Root_Type_If_Set (Id : E) return Opt_N_Entity_Id; + -- Base_Type_If_Set is a more permissive version of Base_Type, which + -- returns the same value, except it returns Empty in cases where Base_Type + -- would crash because relevant fields are not yet set. Likewise for the + -- other two. These are used in Treepr, to allow it to print half-baked + -- nodes without crashing. + function Float_Rep (N : Entity_Id) return F with Inline, Pre => N in E_Void_Id @@ -238,7 +247,7 @@ package Einfo.Utils is function Stream_Size_Clause (Id : E) return N with Inline; function Type_High_Bound (Id : E) return N with Inline; function Type_Low_Bound (Id : E) return N with Inline; - function Underlying_Type (Id : E) return Entity_Id; + function Underlying_Type (Id : E) return Opt_N_Entity_Id; function Scope_Depth (Id : Scope_Kind_Id) return U with Inline; function Scope_Depth_Set (Id : Scope_Kind_Id) return B with Inline; diff --git a/gcc/ada/einfo.ads b/gcc/ada/einfo.ads index 916d9c6f47c9..b5d9c1cde666 100644 --- a/gcc/ada/einfo.ads +++ b/gcc/ada/einfo.ads @@ -608,6 +608,10 @@ package Einfo is -- determine if there actually is an active Suppress or Unsuppress pragma -- that applies to the entity. +-- Child_Levels +-- Assrtion levels that depend on the given level are considered to be +-- the child levels of that level. + -- Class_Postconditions -- Defined on subprogram entities. Set if the subprogram has class-wide -- postconditions. Denotes the (and-then) expression built by merging @@ -1461,6 +1465,12 @@ package Einfo is -- associates generic parameters with the corresponding instances, in -- those cases where the instance is an entity. +-- Ghost_Assertion_Level +-- Assertion level associated with the declaration of the entity. Its +-- value is either Empty for non-ghost entities, Standard_Level_Default +-- for Ghost entities without an assertion level, or a user-defined +-- assertion level. + -- Has_Aliased_Components [implementation base type only] -- Defined in array type entities. Indicates that the component type -- of the array is aliased. Should this also be set for records to @@ -2164,6 +2174,11 @@ package Einfo is -- on the partial view, to ensure that discriminants are properly -- inherited in certain contexts. +-- Has_Unsigned_Base_Range_Aspect [base type only] +-- Defined in integer types. Set in the base type of an integer type for +-- which the type has an Unsigned_Base_Range of True (whether by an +-- aspect_specification, a pragma, or inheritance). + -- Has_Visible_Refinement -- Defined in E_Abstract_State entities. Set when a state has at least -- one refinement constituent and analysis is in the region between @@ -3009,6 +3024,13 @@ package Einfo is -- record is declared to be limited. Note that this flag is not set -- simply because some components of the record are limited. +-- Is_Link_Once +-- Defined in all entities. Set to indicate that an entity can be defined +-- in multiple compilation units without generating a linker error. The +-- compiler guarantees that the multiple definitions are equivalent and, +-- therefore, that the linker can freely pick one of them. If this flag +-- is set on an entity, then the Is_Public flag is also set on it. + -- Is_Local_Anonymous_Access -- Defined in access types. Set for an anonymous access type to indicate -- that the type is created for a record component with an access @@ -4008,6 +4030,10 @@ package Einfo is -- used when obtaining the formal kind of a formal parameter (the result -- is one of E_[In/Out/In_Out]_Parameter). +-- Parent_Levels +-- Assrtion levels that the given level depends on are considered to be +-- parent levels of that level. + -- Parent_Subtype [base type only] -- Defined in E_Record_Type. Set only for derived tagged types, in which -- case it points to the subtype of the parent type. This is the type @@ -4971,6 +4997,7 @@ package Einfo is -- Is_Known_Valid -- Is_Limited_Composite -- Is_Limited_Record + -- Is_Link_Once -- Is_Loop_Parameter -- Is_Obsolescent -- Is_Package_Body_Entity @@ -5243,6 +5270,10 @@ package Einfo is -- Number_Dimensions (synth) -- (plus type attributes) + -- E_Assertion_Level + -- Child_Levels + -- Parent_Levels + -- E_Block -- Renamed_Entity $$$ -- Renamed_Object $$$ @@ -6112,6 +6143,7 @@ package Einfo is -- Static_Discrete_Predicate -- Has_Biased_Representation -- Has_Shift_Operator (base type only) + -- Has_Unsigned_Base_Range_Aspect (base type only) -- No_Predicate_On_Actual -- No_Dynamic_Predicate_On_Actual -- Type_Low_Bound (synth) diff --git a/gcc/ada/env.c b/gcc/ada/env.c index 950c2696cf67..64e9aa01ef06 100644 --- a/gcc/ada/env.c +++ b/gcc/ada/env.c @@ -229,7 +229,8 @@ void __gnat_clearenv (void) || defined (__CYGWIN__) \ || defined (__NetBSD__) || defined (__OpenBSD__) || defined (__rtems__) \ || defined (__DragonFly__) || defined (__DJGPP__) - /* On Windows, FreeBSD and MacOS there is no function to clean all the + /* On several platforms (e.g. Windows, FreeBSD, MacOS...) + there is no function to clean all the environment but there is a "clean" way to unset a variable. So go through the environ table and call __gnat_unsetenv on all entries */ char **env = __gnat_environ (); diff --git a/gcc/ada/exp_aggr.adb b/gcc/ada/exp_aggr.adb index cd98369a9189..d62b7351e862 100644 --- a/gcc/ada/exp_aggr.adb +++ b/gcc/ada/exp_aggr.adb @@ -4283,7 +4283,7 @@ package body Exp_Aggr is -- Set the Expansion_Delayed flag in the cases where the transformation -- will be done top down from above. - Parent_Node := Unconditional_Parent (N); + Parent_Node := Unqualified_Unconditional_Parent (N); if -- Internal aggregates (transformed when expanding the parent), @@ -6254,7 +6254,7 @@ package body Exp_Aggr is -- Set the Expansion_Delayed flag in the cases where the transformation -- will be done top down from above. - Parent_Node := Unconditional_Parent (N); + Parent_Node := Unqualified_Unconditional_Parent (N); if -- Internal aggregates (transformed when expanding the parent), @@ -6984,7 +6984,9 @@ package body Exp_Aggr is -- Choice is a single discrete value elsif Is_Discrete_Type (Etype (Choice)) then - Update_Choices (Choice, Choice); + if Is_Static_Expression (Choice) then + Update_Choices (Choice, Choice); + end if; Temp_Siz_Exp := Make_Integer_Literal (Loc, 1); Set_Is_Static_Expression (Temp_Siz_Exp); @@ -7208,13 +7210,11 @@ package body Exp_Aggr is -- To_Int -- ------------ - -- The bounds of the discrete range are integers or enumeration literals + -- The bounds of the discrete range are static discrete values function To_Int (Expr : N_Subexpr_Id) return Int is begin - return UI_To_Int ((if Nkind (Expr) = N_Integer_Literal - then Intval (Expr) - else Enumeration_Pos (Entity (Expr)))); + return UI_To_Int (Expr_Value (Expr)); end To_Int; -- Local variables diff --git a/gcc/ada/exp_attr.adb b/gcc/ada/exp_attr.adb index 810248de1acd..a0a550ddbd71 100644 --- a/gcc/ada/exp_attr.adb +++ b/gcc/ada/exp_attr.adb @@ -24,7 +24,6 @@ ------------------------------------------------------------------------------ with Accessibility; use Accessibility; -with Aspects; use Aspects; with Atree; use Atree; with Checks; use Checks; with Debug; use Debug; @@ -266,6 +265,15 @@ package body Exp_Attr is -- the implementation base type of this type (Typ). If found, return the -- pragma node, otherwise return Empty if no pragma is found. + function Interunit_Ref_OK + (Subp_Unit, Attr_Ref_Unit : Node_Id) return Boolean; + -- Returns True if it is ok to refer to a cached subprogram declared in + -- Subp_Unit from the point of an attribute reference occurring in + -- Attr_Ref_Unit. Both arguments are usually N_Compilation_Nodes, + -- although there are cases where Subp_Unit might be a type declared in + -- package Standard (in which case the In_Same_Extended_Unit call will + -- return False). + function Is_Constrained_Packed_Array (Typ : Entity_Id) return Boolean; -- Utility for array attributes, returns true on packed constrained -- arrays, and on access to same. @@ -280,20 +288,6 @@ package body Exp_Attr is -- Returns True if Typ is a user-defined enumeration type, in the sense -- that its literals are declared in the source. - function Interunit_Ref_OK - (Subp_Unit, Attr_Ref_Unit : Node_Id) return Boolean is - (In_Same_Extended_Unit (Subp_Unit, Attr_Ref_Unit) - -- If subp declared in unit body, then we don't want to refer - -- to it from within unit spec so return False in that case. - and then not (not Is_Body (Unit (Attr_Ref_Unit)) - and Is_Body (Unit (Subp_Unit)))); - -- Returns True if it is ok to refer to a cached subprogram declared in - -- Subp_Unit from the point of an attribute reference occurring in - -- Attr_Ref_Unit. Both arguments are usually N_Compilation_Nodes, - -- although there are cases where Subp_Unit might be a type declared in - -- package Standard (in which case the In_Same_Extended_Unit call will - -- return False). - package body Cached_Attribute_Ops is ------------------------------- @@ -479,7 +473,8 @@ package body Exp_Attr is -- Local variables - Func_Id : constant Entity_Id := Make_Temporary (Loc, 'V'); + Func_Id : constant Entity_Id := Make_Temporary (Loc, 'V', + Related_Node => Attr); Indexes : constant List_Id := New_List; Obj_Id : constant Entity_Id := Make_Temporary (Loc, 'A'); Stmts : List_Id; @@ -836,7 +831,8 @@ package body Exp_Attr is -- Local variables - Func_Id : constant Entity_Id := Make_Temporary (Loc, 'V'); + Func_Id : constant Entity_Id := Make_Temporary (Loc, 'V', + Related_Node => Attr); Obj_Id : constant Entity_Id := Make_Temporary (Loc, 'R'); Comps : Node_Id; Stmts : List_Id; @@ -2019,7 +2015,12 @@ package body Exp_Attr is pragma Assert (Present (Insertion_Point)); end if; - Ancestor := Parent (Ancestor); + + if Nkind (Ancestor) = N_Subunit then + Ancestor := Corresponding_Stub (Ancestor); + else + Ancestor := Parent (Ancestor); + end if; end loop; if Present (Insertion_Point) then @@ -2171,7 +2172,7 @@ package body Exp_Attr is -- that it has the necessary extra formals. if not Is_Frozen (Pname) then - Create_Extra_Formals (Pname); + Create_Extra_Formals (Pname, Related_Nod => N); end if; -- And now rewrite the call @@ -2648,7 +2649,7 @@ package body Exp_Attr is Set_Extra_Formal (Extra, Empty); end if; - Create_Extra_Formals (Subp_Typ); + Create_Extra_Formals (Subp_Typ, Related_Nod => N); Set_Directly_Designated_Type (Typ, Subp_Typ); end; end if; @@ -2679,13 +2680,13 @@ package body Exp_Attr is if not Is_Frozen (Entity (Pref)) or else From_Limited_With (Etype (Entity (Pref))) then - Create_Extra_Formals (Entity (Pref)); + Create_Extra_Formals (Entity (Pref), Related_Nod => N); end if; if not Is_Frozen (Btyp_DDT) or else From_Limited_With (Etype (Btyp_DDT)) then - Create_Extra_Formals (Btyp_DDT); + Create_Extra_Formals (Btyp_DDT, Related_Nod => N); end if; pragma Assert @@ -5111,310 +5112,57 @@ package body Exp_Attr is when Attribute_Make => declare - Params : List_Id; - Param : Node_Id; - Par : Node_Id; - Construct : Entity_Id; - Obj : Node_Id := Empty; - Make_Expr : Node_Id := N; - - Formal : Entity_Id; - Replace_Expr : Node_Id; - Init_Param : Node_Id; - Construct_Call : Node_Id; - Curr_Nam : Node_Id := Empty; - - function Replace_Formal_Ref - (N : Node_Id) return Traverse_Result; - - function Replace_Formal_Ref - (N : Node_Id) return Traverse_Result is - begin - if Is_Entity_Name (N) - and then Chars (Formal) = Chars (N) - then - Rewrite (N, - New_Copy_Tree (Replace_Expr)); - end if; - - return OK; - end Replace_Formal_Ref; - - procedure Search_And_Replace_Formal is new - Traverse_Proc (Replace_Formal_Ref); - + Constructor_Params : List_Id := New_Copy_List (Expressions (N)); + Constructor_Call : Node_Id; + Constructor_EWA : Node_Id; + Result_Decl : Node_Id; + Result_Id : constant Entity_Id := + Make_Temporary (Loc, 'D', N); begin - -- Remove side effects for constructor call - - Param := First (Expressions (N)); - while Present (Param) loop - if Nkind (Param) = N_Parameter_Association then - Remove_Side_Effects (Explicit_Actual_Parameter (Param), - Check_Side_Effects => False); - else - Remove_Side_Effects (Param, Check_Side_Effects => False); - end if; - - Next (Param); - end loop; - - -- Construct the parameters list - - Params := New_Copy_List (Expressions (N)); - if Is_Empty_List (Params) then - Params := New_List; + if Is_Empty_List (Constructor_Params) then + Constructor_Params := New_List; end if; - -- Identify the enclosing parent for the non-copy cases - - Par := Parent (N); - if Nkind (Par) = N_Qualified_Expression then - Par := Parent (Par); - Make_Expr := Par; - end if; - if Nkind (Par) = N_Allocator then - Par := Parent (Par); - Curr_Nam := Make_Explicit_Dereference - (Loc, Prefix => Empty); - Obj := Curr_Nam; - end if; + Result_Decl := Make_Object_Declaration (Loc, + Defining_Identifier => Result_Id, + Object_Definition => + New_Occurrence_Of (Typ, Loc)); - declare - Base_Obj : Node_Id := Empty; - Typ_Comp : Entity_Id; - Agg_Comp : Entity_Id; - Comp_Nam : Node_Id := Empty; - begin - while Nkind (Par) not in N_Object_Declaration - | N_Assignment_Statement - loop - if Nkind (Par) = N_Aggregate then - Typ_Comp := First_Entity (Etype (Par)); - Agg_Comp := First (Expressions (Par)); - loop - if No (Agg_Comp) then - return; - end if; + -- Suppress default initialization for result object. + -- Default init (except for tag, if tagged) will instead be + -- performed in the constructor procedure. - if Agg_Comp = Make_Expr then - Comp_Nam := - Make_Selected_Component (Loc, - Prefix => Empty, - Selector_Name => - New_Occurrence_Of (Typ_Comp, Loc)); + Mutate_Ekind (Result_Id, E_Variable); + Set_Suppress_Initialization (Result_Id); - Make_Expr := Parent (Make_Expr); - Par := Parent (Par); - exit; - end if; - - Next_Entity (Typ_Comp); - Next (Agg_Comp); - end loop; - elsif Nkind (Par) = N_Component_Association then - Comp_Nam := - Make_Selected_Component (Loc, - Prefix => Empty, - Selector_Name => - Make_Identifier (Loc, - (Chars (First (Choices (Par)))))); - - Make_Expr := Parent (Parent (Make_Expr)); - Par := Parent (Parent (Par)); - else - declare - Temp : constant Entity_Id := - Make_Temporary (Loc, 'T', N); - begin - Rewrite (N, - Make_Expression_With_Actions (Loc, - Actions => New_List ( - Make_Object_Declaration (Loc, - Defining_Identifier => Temp, - Object_Definition => - New_Occurrence_Of (Typ, Loc), - Expression => - New_Copy_Tree (N))), - Expression => New_Occurrence_Of (Temp, Loc))); - Analyze_And_Resolve (N); - return; - end; - end if; - - if No (Curr_Nam) then - Curr_Nam := Comp_Nam; - Obj := Curr_Nam; - elsif Has_Prefix (Curr_Nam) then - Set_Prefix (Curr_Nam, Comp_Nam); - Curr_Nam := Comp_Nam; - end if; - end loop; - - Base_Obj := (case Nkind (Par) is - when N_Assignment_Statement => - New_Copy_Tree (Name (Par)), - when N_Object_Declaration => - New_Occurrence_Of - (Defining_Identifier (Par), Loc), - when others => (raise Program_Error)); - - if Present (Curr_Nam) then - Set_Prefix (Curr_Nam, Base_Obj); - else - Obj := Base_Obj; - end if; - end; - - Prepend_To (Params, Obj); - - -- Find the constructor we are interested in by doing a - -- pseudo-pass to resolve the constructor call. + -- Build a prefixed-notation call declare - Dummy_Params : List_Id := New_Copy_List (Expressions (N)); - Dummy_Self : Node_Id; - Dummy_Block : Node_Id; - Dummy_Call : Node_Id; - Dummy_Id : Entity_Id := Make_Temporary (Loc, 'D', N); + Proc_Name : constant Node_Id := + Make_Selected_Component (Loc, + Prefix => New_Occurrence_Of (Result_Id, Loc), + Selector_Name => Make_Identifier (Loc, + Chars (Constructor_Name (Typ)))); begin - if Is_Empty_List (Dummy_Params) then - Dummy_Params := New_List; - end if; + Set_Is_Prefixed_Call (Proc_Name); - Dummy_Self := Make_Object_Declaration (Loc, - Defining_Identifier => Dummy_Id, - Object_Definition => - New_Occurrence_Of (Typ, Loc)); - Prepend_To (Dummy_Params, New_Occurrence_Of (Dummy_Id, Loc)); - - Dummy_Call := Make_Procedure_Call_Statement (Loc, - Parameter_Associations => Dummy_Params, - Name => - (if not Has_Prefix (Pref) then - Make_Identifier (Loc, - Chars (Constructor_Name (Typ))) - else - Make_Expanded_Name (Loc, - Chars => - Chars (Constructor_Name (Typ)), - Prefix => - New_Copy_Tree (Prefix (Pref)), - Selector_Name => - Make_Identifier (Loc, - Chars (Constructor_Name (Typ)))))); - Set_Is_Expanded_Constructor_Call (Dummy_Call, True); - - Dummy_Block := Make_Block_Statement (Loc, - Declarations => New_List (Dummy_Self), - Handled_Statement_Sequence => - Make_Handled_Sequence_Of_Statements (Loc, - Statements => New_List (Dummy_Call))); - - Expander_Active := False; - - Insert_After_And_Analyze - (Enclosing_Declaration_Or_Statement (Par), Dummy_Block); - - Expander_Active := True; - - -- Finally, we can get the constructor based on our pseudo-pass - - Construct := Entity (Name (Dummy_Call)); - - -- Replace the Typ'Make attribute with an aggregate featuring - -- then relevant aggregate from the correct constructor's - -- Inializeaspect if it is present - otherwise, simply use a - -- box. - - if Has_Aspect (Construct, Aspect_Initialize) then - Rewrite (N, - New_Copy_Tree - (Find_Value_Of_Aspect (Construct, Aspect_Initialize))); - - Param := Next (First (Params)); - Formal := Next_Entity (First_Entity (Construct)); - while Present (Param) loop - if Nkind (Param) = N_Parameter_Association then - Formal := Selector_Name (Param); - Replace_Expr := Explicit_Actual_Parameter (Param); - else - Replace_Expr := Param; - end if; - - Init_Param := First (Component_Associations (N)); - while Present (Init_Param) loop - Search_And_Replace_Formal (Expression (Init_Param)); - - Next (Init_Param); - end loop; - - if Nkind (Param) /= N_Parameter_Association then - Next_Entity (Formal); - end if; - Next (Param); - end loop; - - Init_Param := First (Component_Associations (N)); - while Present (Init_Param) loop - if Nkind (Expression (Init_Param)) = N_Attribute_Reference - and then Attribute_Name - (Expression (Init_Param)) = Name_Make - then - Insert_After (Par, - Make_Assignment_Statement (Loc, - Name => - Make_Selected_Component (Loc, - Prefix => - New_Copy_Tree (First (Params)), - Selector_Name => - Make_Identifier (Loc, - Chars (First (Choices (Init_Param))))), - Expression => - New_Copy_Tree (Expression (Init_Param)))); - - Rewrite (Expression (Init_Param), - Make_Aggregate (Loc, - Expressions => New_List, - Component_Associations => New_List ( - Make_Component_Association (Loc, - Choices => - New_List (Make_Others_Choice (Loc)), - Expression => Empty, - Box_Present => True)))); - end if; - - Next (Init_Param); - end loop; - else - Rewrite (N, - Make_Aggregate (Loc, - Expressions => New_List, - Component_Associations => New_List ( - Make_Component_Association (Loc, - Choices => New_List (Make_Others_Choice (Loc)), - Expression => Empty, - Box_Present => True)))); - end if; - - -- Rewrite this block to be null and pretend it didn't happen - - Rewrite (Dummy_Block, Make_Null_Statement (Loc)); + Constructor_Call := Make_Procedure_Call_Statement (Loc, + Parameter_Associations => Constructor_Params, + Name => Proc_Name); end; - Analyze_And_Resolve (N, Typ); - - -- Finally, insert the constructor call + Set_Is_Expanded_Constructor_Call (Constructor_Call, True); - Construct_Call := - Make_Procedure_Call_Statement (Loc, - Name => - New_Occurrence_Of (Construct, Loc), - Parameter_Associations => Params); + Constructor_EWA := + Make_Expression_With_Actions (Loc, + Actions => New_List (Result_Decl, Constructor_Call), + Expression => New_Occurrence_Of (Result_Id, Loc)); - Set_Is_Expanded_Constructor_Call (Construct_Call); - Insert_After (Par, Construct_Call); + Rewrite (N, Constructor_EWA); end; + Analyze_And_Resolve (N, Typ); + -------------- -- Mantissa -- -------------- @@ -8883,6 +8631,7 @@ package body Exp_Attr is | Attribute_Type_Key | Attribute_Unconstrained_Array | Attribute_Universal_Literal_String + | Attribute_Unsigned_Base_Range | Attribute_Wchar_T_Size | Attribute_Word_Size => @@ -9851,6 +9600,31 @@ package body Exp_Attr is return Empty; end Get_Stream_Convert_Pragma; + ---------------------- + -- Interunit_Ref_OK -- + ---------------------- + + function Interunit_Ref_OK + (Subp_Unit, Attr_Ref_Unit : Node_Id) return Boolean is + + function Unit_Is_Body_Or_Subunit (U : Node_Id) return Boolean is + (Is_Body (Unit (U)) or else Nkind (Unit (U)) = N_Subunit); + begin + if not In_Same_Extended_Unit (Subp_Unit, Attr_Ref_Unit) then + return False; + + -- If subp declared in unit body, then we don't want to refer + -- to it from within unit spec so return False in that case. + + elsif Unit_Is_Body_Or_Subunit (Subp_Unit) + and then not Unit_Is_Body_Or_Subunit (Attr_Ref_Unit) + then + return False; + end if; + + return True; + end Interunit_Ref_OK; + --------------------------------- -- Is_Constrained_Packed_Array -- --------------------------------- diff --git a/gcc/ada/exp_ch3.adb b/gcc/ada/exp_ch3.adb index 00b3aae0bd9e..d5dfc5d20944 100644 --- a/gcc/ada/exp_ch3.adb +++ b/gcc/ada/exp_ch3.adb @@ -75,7 +75,6 @@ with Sinfo.Nodes; use Sinfo.Nodes; with Sinfo.Utils; use Sinfo.Utils; with Stand; use Stand; with Snames; use Snames; -with Tbuild; use Tbuild; with Ttypes; use Ttypes; with Validsw; use Validsw; with Warnsw; use Warnsw; @@ -211,32 +210,6 @@ package body Exp_Ch3 is -- component that requires late initialization; this includes -- components of ancestor types. - type Initialization_Mode is - (Full_Init, Full_Init_Except_Tag, Early_Init_Only, Late_Init_Only); - -- The initialization routine for a tagged type is passed in a - -- formal parameter of this type, indicating what initialization - -- is to be performed. This parameter defaults to Full_Init in all - -- cases except when the init proc of a type extension (let's call - -- that type T2) calls the init proc of its parent (let's call that - -- type T1). In that case, one of the other 3 values will - -- be passed in. In all three of those cases, the Tag component has - -- already been initialized before the call and is therefore not to be - -- modified. T2's init proc will either call T1's init proc - -- once (with Full_Init_Except_Tag as the parameter value) or twice - -- (first with Early_Init_Only, then later with Late_Init_Only), - -- depending on the result returned by Has_Late_Init_Component (T1). - -- In the latter case, the first call does not initialize any - -- components that require late initialization and the second call - -- then performs that deferred initialization. - -- Strictly speaking, the formal parameter subtype is actually Natural - -- but calls will only pass in values corresponding to literals - -- of this enumeration type. - - function Make_Mode_Literal - (Loc : Source_Ptr; Mode : Initialization_Mode) return Node_Id - is (Make_Integer_Literal (Loc, Initialization_Mode'Pos (Mode))); - -- Generate an integer literal for a given mode value. - function Tag_Init_Condition (Loc : Source_Ptr; Init_Control_Formal : Entity_Id) return Node_Id; @@ -2145,7 +2118,7 @@ package body Exp_Ch3 is end if; if Policy_In_Effect (Name_Assert) = Name_Check - and then not Predicates_Ignored (Etype (Discr)) + and then not Predicates_Ignored_In_Codegen (Etype (Discr)) then Prepend_To (Res, Make_Predicate_Check (Typ, Val)); end if; @@ -2481,14 +2454,10 @@ package body Exp_Ch3 is and then Nkind (Id_Ref) = N_Selected_Component and then Chars (Selector_Name (Id_Ref)) = Name_uParent then - declare - use Initialization_Control; - begin - Append_To (Args, - (if Present (Init_Control_Actual) - then Init_Control_Actual - else Make_Mode_Literal (Loc, Full_Init_Except_Tag))); - end; + Append_To (Args, + (if Present (Init_Control_Actual) + then Init_Control_Actual + else Make_Mode_Literal (Loc, Full_Init_Except_Tag))); elsif Present (Constructor_Ref) then Append_List_To (Args, New_Copy_List (Parameter_Associations (Constructor_Ref))); @@ -3216,6 +3185,40 @@ package body Exp_Ch3 is if Parent_Subtype_Renaming_Discrims then Append_List_To (Body_Stmts, Build_Init_Call_Thru (Parameters)); + elsif Present (Constructor_Name (Rec_Type)) then + if Present (Default_Constructor (Rec_Type)) then + -- The 'Make attribute reference (with no arguments) will + -- generate a call to the one-parameter constructor procedure. + + Append_To (Body_Stmts, + Make_Assignment_Statement (Loc, + Name => New_Occurrence_Of + (Defining_Identifier (First (Parameters)), Loc), + Expression => Make_Attribute_Reference (Loc, + Prefix => New_Occurrence_Of (Rec_Type, Loc), + Attribute_Name => Name_Make))); + else + -- No constructor procedure with an appropriate profile + -- is available, so raise Program_Error. + -- + -- We could instead do nothing here, since the absence of a + -- one-parameter constructor procedure should trigger other + -- legality checks which should statically ensure that + -- the init proc we are constructing here will never be + -- called. So a bit of "belt and suspenders" here. + -- If this raise statement is ever executed, that probably + -- means that some compile-time legality check is not + -- implemented, and that the program should have instead + -- failed to compile. + -- Because this raise statement should never be executed, it + -- seems ok to pass in a dubious Reason parameter instead of + -- declaring a new RT_Exception_Code value. + + Append_To (Body_Stmts, + Make_Raise_Program_Error (Loc, + Reason => PE_Explicit_Raise)); + end if; + elsif Nkind (Type_Definition (N)) = N_Record_Definition then Build_Discriminant_Assignments (Body_Stmts); @@ -3310,7 +3313,7 @@ package body Exp_Ch3 is end if; end if; - -- Add here the assignment to instantiate the Tag + -- Add here the assignment to initialize the Tag -- The assignment corresponds to the code: @@ -4170,7 +4173,6 @@ package body Exp_Ch3 is if Present (Parent_Id) then declare Parent_Loc : constant Source_Ptr := Sloc (Parent (Parent_Id)); - use Initialization_Control; begin -- We are building the init proc for a type extension. -- Call the parent type's init proc a second time, this @@ -4558,6 +4560,8 @@ package body Exp_Ch3 is -- since the call is generated, there had better be a routine -- at the other end of the call, even if it does nothing). + -- 10. The type has a specified Constructor aspect. + -- Note: the reason we exclude the CPP_Class case is because in this -- case the initialization is performed by the C++ constructors, and -- the IP is built by Set_CPP_Constructors. @@ -4573,6 +4577,7 @@ package body Exp_Ch3 is or else Is_Tagged_Type (Rec_Id) or else Is_Concurrent_Record_Type (Rec_Id) or else Has_Task (Rec_Id) + or else Present (Constructor_Name (Rec_Id)) then return True; end if; @@ -5878,7 +5883,7 @@ package body Exp_Ch3 is -- the subtype. if not No_Exception_Handlers_Set - and then not Predicates_Ignored (Typ) + and then not Predicates_Ignored_In_Codegen (Typ) then Append_To (Lst, Make_Case_Statement_Alternative (Loc, @@ -6592,7 +6597,7 @@ package body Exp_Ch3 is Elmt := First_Elmt (Primitive_Operations (Typ)); while Present (Elmt) loop - Create_Extra_Formals (Node (Elmt)); + Create_Extra_Formals (Node (Elmt), Related_Nod => N); Next_Elmt (Elmt); end loop; @@ -6609,7 +6614,7 @@ package body Exp_Ch3 is and then Find_Dispatching_Type (E) = Typ and then not Contains (Primitive_Operations (Typ), E) then - Create_Extra_Formals (E); + Create_Extra_Formals (E, Related_Nod => N); end if; Next_Entity (E); @@ -10786,11 +10791,9 @@ package body Exp_Ch3 is or else (Is_Record_Type (Typ) and then Is_Protected_Record_Type (Typ)); With_Task : constant Boolean := - not Global_No_Tasking - and then - (Has_Task (Typ) - or else (Is_Record_Type (Typ) - and then Is_Task_Record_Type (Typ))); + Has_Task (Typ) + or else (Is_Record_Type (Typ) + and then Is_Task_Record_Type (Typ)); Formals : List_Id; begin diff --git a/gcc/ada/exp_ch3.ads b/gcc/ada/exp_ch3.ads index 0b0a2b68642c..69e6cb4ba352 100644 --- a/gcc/ada/exp_ch3.ads +++ b/gcc/ada/exp_ch3.ads @@ -27,6 +27,7 @@ with Elists; use Elists; with Exp_Tss; use Exp_Tss; +with Tbuild; use Tbuild; with Types; use Types; with Uintp; use Uintp; @@ -194,6 +195,32 @@ package Exp_Ch3 is -- initialized; if Variable_Comps is True then tags components located at -- variable positions of Target are initialized. + type Initialization_Mode is + (Full_Init, Full_Init_Except_Tag, Early_Init_Only, Late_Init_Only); + -- The initialization routine for a tagged type is passed in a + -- formal parameter of this type, indicating what initialization + -- is to be performed. This parameter defaults to Full_Init in all + -- cases except when the init proc of a type extension (let's call + -- that type T2) calls the init proc of its parent (let's call that + -- type T1). In that case, one of the other 3 values will + -- be passed in. In all three of those cases, the Tag component has + -- already been initialized before the call and is therefore not to be + -- modified. T2's init proc will either call T1's init proc + -- once (with Full_Init_Except_Tag as the parameter value) or twice + -- (first with Early_Init_Only, then later with Late_Init_Only), + -- depending on the result returned by Has_Late_Init_Component (T1). + -- In the latter case, the first call does not initialize any + -- components that require late initialization and the second call + -- then performs that deferred initialization. + -- Strictly speaking, the formal parameter subtype is actually Natural + -- but calls will only pass in values corresponding to literals + -- of this enumeration type. + + function Make_Mode_Literal + (Loc : Source_Ptr; Mode : Initialization_Mode) return Node_Id + is (Make_Integer_Literal (Loc, Initialization_Mode'Pos (Mode))); + -- Generate an integer literal for a given mode value. + procedure Make_Controlling_Function_Wrappers (Tag_Typ : Entity_Id; Decl_List : out List_Id; diff --git a/gcc/ada/exp_ch4.adb b/gcc/ada/exp_ch4.adb index 43c94f37ba1a..8fba1c4e71fa 100644 --- a/gcc/ada/exp_ch4.adb +++ b/gcc/ada/exp_ch4.adb @@ -5198,7 +5198,8 @@ package body Exp_Ch4 is if not Expansion_Delayed (N) then declare - Uncond_Par : constant Node_Id := Unconditional_Parent (N); + Uncond_Par : constant Node_Id := + Unqualified_Unconditional_Parent (N); begin if Nkind (Uncond_Par) = N_Simple_Return_Statement or else Is_Optimizable_Declaration (Uncond_Par) @@ -5807,7 +5808,8 @@ package body Exp_Ch4 is if not Expansion_Delayed (N) then declare - Uncond_Par : constant Node_Id := Unconditional_Parent (N); + Uncond_Par : constant Node_Id := + Unqualified_Unconditional_Parent (N); begin if Nkind (Uncond_Par) = N_Simple_Return_Statement or else Is_Optimizable_Declaration (Uncond_Par) @@ -7870,9 +7872,15 @@ package body Exp_Ch4 is end if; end if; - -- Arithmetic overflow checks for signed integer/fixed point types + -- Arithmetic overflow checks for signed integer/fixed point types, + -- and signed integer types with unsigned base range aspect. - if Is_Signed_Integer_Type (Typ) or else Is_Fixed_Point_Type (Typ) then + if Is_Signed_Integer_Type (Typ) + or else Is_Fixed_Point_Type (Typ) + or else + (Is_Modular_Integer_Type (Typ) + and then Has_Unsigned_Base_Range_Aspect (Base_Type (Typ))) + then Apply_Arithmetic_Overflow_Check (N); return; end if; @@ -8179,6 +8187,11 @@ package body Exp_Ch4 is -- Determines whether a type has a subcomponent of an unconstrained -- Unchecked_Union subtype. Typ is a record type. + procedure Warn_On_Abstract_Equality_For_Component + (Comp_Type : Entity_Id); + -- If Comp_Type is a record type with a user-defined abstract primitive + -- equality, then issue a warning that Program_Error will be raised. + ------------------------- -- Build_Equality_Call -- ------------------------- @@ -8403,6 +8416,27 @@ package body Exp_Ch4 is Unconstrained_UU_In_Component_List (Optional_Component_List); end Has_Unconstrained_UU_Component; + --------------------------------------------- + -- Warn_On_Abstract_Equality_For_Component -- + --------------------------------------------- + + procedure Warn_On_Abstract_Equality_For_Component + (Comp_Type : Entity_Id) + is + Eq : Entity_Id; + begin + if Is_Record_Type (Underlying_Type (Comp_Type)) then + Eq := Get_User_Defined_Equality (Comp_Type); + + if Present (Eq) and then Is_Abstract_Subprogram (Eq) then + Error_Msg_Warn := SPARK_Mode /= On; + Error_Msg_NE ("call to abstract equality function of " + & "component type &<<", N, Comp_Type); + Error_Msg_N ("\Program_Error [<<", N); + end if; + end if; + end Warn_On_Abstract_Equality_For_Component; + -- Local variables Typl : Entity_Id; @@ -8471,6 +8505,16 @@ package body Exp_Ch4 is elsif Is_Array_Type (Typl) then + -- If the outer type doesn't have a user-defined equality operation, + -- check whether its component type has an abstract equality, and + -- warn if so. Such a component equality function will raise + -- Program_Error of objects of the outer type are compared using + -- predefined equality. + + if not Present (Get_User_Defined_Equality (Typl)) then + Warn_On_Abstract_Equality_For_Component (Component_Type (Typl)); + end if; + -- If we are doing full validity checking, and it is possible for the -- array elements to be invalid then expand out array comparisons to -- make sure that we check the array elements. @@ -8540,6 +8584,36 @@ package body Exp_Ch4 is elsif Is_Record_Type (Typl) then + -- When outer type doesn't have a user-defined equality operation, + -- check whether any of its components' types have an abstract + -- equality, and warn if so. Such component equality functions will + -- raise Program_Error when objects of the outer type are compared + -- using predefined equality. + + -- ??? Note that this warning is currently only issued in cases of + -- top-level components of the type and not for deeper subcomponents. + -- Those could be handled with more work, such as by adding a flag + -- on record type entities, but it's not clear that it would be + -- worth the effort. Another limitation is that the warning check + -- is not done for tagged types in some cases, because equality + -- comparisons for those can be changed to calls at an earlier point + -- during analysis and resolution, and do not reach this code (but in + -- many cases tagged equality comparisons do reach the code below). + + if not Present (Get_User_Defined_Equality (Typl)) then + declare + Comp : Entity_Id := First_Component (Typl); + begin + while Present (Comp) loop + if Chars (Comp) /= Name_uParent then + Warn_On_Abstract_Equality_For_Component (Etype (Comp)); + end if; + + Next_Component (Comp); + end loop; + end; + end if; + -- For tagged types, use the primitive "=" if Is_Tagged_Type (Typl) then @@ -9387,7 +9461,11 @@ package body Exp_Ch4 is end if; if not Backend_Overflow_Checks_On_Target - and then Is_Signed_Integer_Type (Typ) + and then + (Is_Signed_Integer_Type (Typ) + or else + (Is_Modular_Integer_Type (Typ) + and then Has_Unsigned_Base_Range_Aspect (Base_Type (Typ)))) and then Do_Overflow_Check (N) then -- Software overflow checking expands -expr into (0 - expr) @@ -9811,7 +9889,11 @@ package body Exp_Ch4 is -- Non-fixed point cases, check software overflow checking required - elsif Is_Signed_Integer_Type (Etype (N)) then + elsif Is_Signed_Integer_Type (Etype (N)) + or else + (Is_Modular_Integer_Type (Typ) + and then Has_Unsigned_Base_Range_Aspect (Base_Type (Typ))) + then Apply_Arithmetic_Overflow_Check (N); end if; @@ -10375,9 +10457,15 @@ package body Exp_Ch4 is return; end if; - -- Arithmetic overflow checks for signed integer/fixed point types + -- Arithmetic overflow checks for signed integer/fixed point types, + -- and signed integer types with unsigned base range aspect. - if Is_Signed_Integer_Type (Typ) or else Is_Fixed_Point_Type (Typ) then + if Is_Signed_Integer_Type (Typ) + or else Is_Fixed_Point_Type (Typ) + or else + (Is_Modular_Integer_Type (Typ) + and then Has_Unsigned_Base_Range_Aspect (Base_Type (Typ))) + then Apply_Arithmetic_Overflow_Check (N); end if; diff --git a/gcc/ada/exp_ch5.adb b/gcc/ada/exp_ch5.adb index 66a4fc0512b0..0949d5864bb5 100644 --- a/gcc/ada/exp_ch5.adb +++ b/gcc/ada/exp_ch5.adb @@ -2254,7 +2254,8 @@ package body Exp_Ch5 is function Replace_Target (N : Node_Id) return Traverse_Result; -- Replace occurrences of the target name by the proper entity: either -- the entity of the LHS in simple cases, or the formal of the - -- constructed procedure otherwise. + -- constructed procedure otherwise. Mark all nodes as Analyzed=False + -- so reanalysis will occur. -------------------- -- Replace_Target -- @@ -2264,20 +2265,6 @@ package body Exp_Ch5 is begin if Nkind (N) = N_Target_Name then Rewrite (N, New_Occurrence_Of (Ent, Sloc (N))); - - -- The expression will be reanalyzed when the enclosing assignment - -- is reanalyzed, so reset the entity, which may be a temporary - -- created during analysis, e.g. a loop variable for an iterated - -- component association. However, if entity is callable then - -- resolution has established its proper identity (including in - -- rewritten prefixed calls) so we must preserve it. - - elsif Is_Entity_Name (N) then - if Present (Entity (N)) - and then not Is_Overloadable (Entity (N)) - then - Set_Entity (N, Empty); - end if; end if; Set_Analyzed (N, False); @@ -4118,7 +4105,7 @@ package body Exp_Ch5 is if Compile_Time_Known_Value (Expr) and then Has_Predicates (Etype (Expr)) - and then not Predicates_Ignored (Etype (Expr)) + and then not Predicates_Ignored_In_Codegen (Etype (Expr)) and then not Is_OK_Static_Expression (Expr) then Rewrite (N, @@ -4203,7 +4190,7 @@ package body Exp_Ch5 is -- generated case statements). if Validity_Check_Default - and then not Predicates_Ignored (Etype (Expr)) + and then not Predicates_Ignored_In_Codegen (Etype (Expr)) then -- Recognize the simple case where Expr is an object reference -- and the case statement is directly preceded by an @@ -4378,7 +4365,7 @@ package body Exp_Ch5 is -- predicate, and there is no Others choice, Constraint_Error -- must be raised (RM 4.5.7 (21/3) and 5.4 (13)). - if Predicates_Ignored (Etype (Expr)) then + if Predicates_Ignored_In_Codegen (Etype (Expr)) then declare Except : constant Node_Id := Make_Raise_Constraint_Error (Loc, diff --git a/gcc/ada/exp_ch6.adb b/gcc/ada/exp_ch6.adb index e8774699a66a..d48b8f22ba1a 100644 --- a/gcc/ada/exp_ch6.adb +++ b/gcc/ada/exp_ch6.adb @@ -1423,13 +1423,6 @@ package body Exp_Ch6 is Formal : Entity_Id; begin - pragma Assert (Nkind (Subp_Call) in N_Entry_Call_Statement - | N_Function_Call - | N_Procedure_Call_Statement); - pragma Assert (Extra_Formals_Known (Subp_Id) - or else not Expander_Active - or else Is_Unsupported_Extra_Actuals_Call (Subp_Call, Subp_Id)); - -- In CodePeer_Mode, the tree for `'Elab_Spec` procedures will be -- malformed because GNAT does not perform the usual expansion that -- results in the importation of external elaboration procedure symbols. @@ -1447,6 +1440,13 @@ package body Exp_Ch6 is return True; end if; + pragma Assert (Nkind (Subp_Call) in N_Entry_Call_Statement + | N_Function_Call + | N_Procedure_Call_Statement); + pragma Assert (Extra_Formals_Known (Subp_Id) + or else not Expander_Active + or else Is_Unsupported_Extra_Actuals_Call (Subp_Call, Subp_Id)); + Formal := First_Formal_With_Extras (Subp_Id); Actual := First_Actual (Subp_Call); @@ -2946,7 +2946,11 @@ package body Exp_Ch6 is and then Predicate_Tests_On_Arguments (Subp) then - Append_To (Post_Call, + -- If Actual is a view conversion to a by-copy subtype + -- that is subject to a predicate, then the predicate + -- check must precede copy-back. So Prepend. + + Prepend_To (Post_Call, Make_Predicate_Check (Atyp, Actual)); end if; end By_Ref_Predicate_Check; @@ -4027,7 +4031,8 @@ package body Exp_Ch6 is procedure Check_Subprogram_Variant; -- Emit a call to the internally generated procedure with checks for - -- aspect Subprogram_Variant, if present and enabled. + -- aspect Subprogram_Variant, if present and enabled. Multiple calls are + -- added when the subprogram was using Assertion_Levels. function Inherited_From_Formal (S : Entity_Id) return Entity_Id; -- Within an instance, a type derived from an untagged formal derived @@ -4312,7 +4317,7 @@ package body Exp_Ch6 is -- Local variables - Variant_Prag : constant Node_Id := + Variant_Prag : Node_Id := Get_Pragma (Current_Scope, Pragma_Subprogram_Variant); New_Call : Node_Id; @@ -4320,8 +4325,10 @@ package body Exp_Ch6 is Variant_Proc : Entity_Id; begin - if Present (Variant_Prag) and then Is_Checked (Variant_Prag) then - + while Present (Variant_Prag) + and then Is_Checked (Variant_Prag) + and then Pragma_Name (Variant_Prag) = Name_Subprogram_Variant + loop Pragma_Arg1 := Expression (First (Pragma_Argument_Associations (Variant_Prag))); @@ -4330,12 +4337,13 @@ package body Exp_Ch6 is -- run-time execution. if Nkind (Pragma_Arg1) = N_Aggregate then - pragma Assert - (Chars - (First - (Choices - (First (Component_Associations (Pragma_Arg1))))) = - Name_Structural); + pragma + Assert + (Chars + (First + (Choices + (First (Component_Associations (Pragma_Arg1))))) + = Name_Structural); return; end if; @@ -4345,7 +4353,8 @@ package body Exp_Ch6 is Variant_Proc := Entity (Pragma_Arg1); New_Call := - Make_Procedure_Call_Statement (Loc, + Make_Procedure_Call_Statement + (Loc, Name => New_Occurrence_Of (Variant_Proc, Loc), Parameter_Associations => @@ -4353,9 +4362,13 @@ package body Exp_Ch6 is Insert_Action (Call_Node, New_Call); - pragma Assert (Etype (New_Call) /= Any_Type - or else Serious_Errors_Detected > 0); - end if; + pragma + Assert + (Etype (New_Call) /= Any_Type + or else Serious_Errors_Detected > 0); + + Variant_Prag := Next_Pragma (Variant_Prag); + end loop; end Check_Subprogram_Variant; --------------------------- @@ -4707,7 +4720,7 @@ package body Exp_Ch6 is -- of init procs were added when they were built. if not Extra_Formals_Known (Subp) then - Create_Extra_Formals (Subp); + Create_Extra_Formals (Subp, Related_Nod => Call_Node); -- If the previous call to Create_Extra_Formals could not add the -- extra formals, then we must defer adding the extra actuals of @@ -4776,7 +4789,7 @@ package body Exp_Ch6 is and then Extra_Formals_Known (Subp) and then Present (Extra_Formals (Subp)) then - Create_Extra_Actuals (N); + Create_Extra_Actuals (Call_Node); -- Mark the call as an expanded build-in-place call; required -- to avoid adding the extra formals twice. @@ -5219,10 +5232,10 @@ package body Exp_Ch6 is null; elsif not Defer_Extra_Actuals then - Create_Extra_Formals (Subp); + Create_Extra_Formals (Subp, Related_Nod => Call_Node); if Extra_Formals_Known (Subp) then - Create_Extra_Actuals (N); + Create_Extra_Actuals (Call_Node); end if; end if; @@ -5238,7 +5251,7 @@ package body Exp_Ch6 is -- the current subprogram is called. if Is_Subprogram (Subp) - and then not Is_Ignored_Ghost_Entity (Subp) + and then not Is_Ignored_Ghost_Entity_In_Codegen (Subp) and then Same_Or_Aliased_Subprograms (Subp, Current_Scope) then Check_Subprogram_Variant; @@ -5780,11 +5793,14 @@ package body Exp_Ch6 is is Par : constant Node_Id := Parent (N); Uncond_Par : constant Node_Id := Unconditional_Parent (N); + -- Beware that a qualified expression around a function call cannot be + -- considered as transparent (like around an aggregate) because it may + -- cause a temporary to be created. begin -- Optimization: if the returned value is returned again, then no need -- to copy/readjust/finalize, we can just pass the value through (see - -- Expand_N_Simple_Return_Statement), and thus no attachment is needed. + -- Expand_Simple_Function_Return), and thus no attachment is needed. -- Note that simple return statements are distributed into conditional -- expressions, but we may be invoked before this distribution is done. @@ -6231,6 +6247,14 @@ package body Exp_Ch6 is -- returns, since they get eliminated anyway later on. Spec_Id denotes -- the corresponding spec of the subprogram body. + procedure Prepend_Constructor_Procedure_Prologue + (Spec_Id : Entity_Id; Body_Id : Entity_Id; L : List_Id); + -- If N is the body of a constructor procedure (that is, a procedure + -- named in a Constructor aspect specification for the type of the + -- procedure's first parameter), then prepend and analyze the + -- associated initialization code for that parameter. + -- This has nothing to do with CPP constructors. + ---------------- -- Add_Return -- ---------------- @@ -6304,6 +6328,304 @@ package body Exp_Ch6 is end if; end Add_Return; + -------------------------------------------- + -- Prepend_Constructor_Procedure_Prologue -- + -------------------------------------------- + + procedure Prepend_Constructor_Procedure_Prologue + (Spec_Id : Entity_Id; Body_Id : Entity_Id; L : List_Id) + is + + function First_Param_Type return Entity_Id is + (Implementation_Base_Type (Etype (First_Formal (Spec_Id)))); + + Is_Constructor_Procedure : constant Boolean := + Nkind (Specification (N)) = N_Procedure_Specification + and then Present (First_Formal (Spec_Id)) + and then Present (Constructor_Name (First_Param_Type)) + and then Chars (Spec_Id) = Chars (Constructor_Name + (First_Param_Type)) + and then Ekind (First_Formal (Spec_Id)) = E_In_Out_Parameter + and then Scope (Spec_Id) = Scope (First_Param_Type); + begin + if not Is_Constructor_Procedure then + return; -- the usual case + end if; + + Push_Scope (Spec_Id); + + -- Initialize the first parameter. + -- First_Param_Type is a record type (tagged or untagged) or + -- a type extension. If it is a type extension, then we begin by + -- calling the appropriate constructor procedure for the _parent + -- part. In the absence of a Super aspect specification, the + -- "appropriate" constructor is the one that takes only a single + -- parameter (the object being initialized). Additional actual + -- parameters for the constructor call may be provided via a + -- Super aspect specification, in which case a different + -- constructor procedure will be invoked. + -- + -- For each remaining component we first check to see if it + -- is mentioned in the Initialize aspect specification (if any) for + -- Body_Id. If so, then evaluate the expression given for that + -- component in the aspect specification and assign it to the + -- given component of the first parameter. If not, and if an + -- explicit default initial value is provided for the given component + -- in the type declaration, then do the same thing with that + -- expression instead. Otherwise perform normal default + -- initialization for the component - invoke the init proc for the + -- component's type if one exists, and otherwise do nothing. + + -- We do not perform tag initialization here. That is dealt with + -- elsewhere. The init proc for a tagged type is + -- passed an extra parameter indicating whether to perform + -- tag initialization. + + -- In the case of a type (tagged or untagged) that is not + -- an extension, we could just generate a single assignment, + -- taking the RHS from the Initialize aspect value (which is an + -- N_Aggregate node). But that gets complicated in the case of + -- an extension, so we handle all cases one component at a time. + + declare + Initialize_Aspect : constant Node_Id := + Find_Aspect (Body_Id, Aspect_Initialize); + + First_Initialize_Comp_Assoc : constant Node_Id := + (if Present (Initialize_Aspect) + then First (Component_Associations + (Expression (Initialize_Aspect))) + else Empty); + + Component : Entity_Id := First_Entity (First_Param_Type); + Init_List : constant List_Id := New_List; + + function Init_Expression_If_Any (Component : Entity_Id) + return Node_Id; + -- If the given component is mentioned in the Initialize + -- aspect for the constructor procedure, then return the + -- initial value expression specified there. + -- Otherwise, if the component declaration includes an + -- initial value expression, then return that expression. + -- Otherwise, return Empty. + + function Make_Init_Proc_Call (Component : Entity_Id; + Component_Name : Node_Id) + return Node_Id; + -- Builds and returns a call to the init proc for the type of + -- the component in order to initialize the given component. + -- The init proc must exist. + + function Make_Parent_Constructor_Call (Parent_Type : Entity_Id) + return Node_Id; + -- Builds and returns a call to the appropriate constructor + -- procedure of the parent type. + -- This function is called only in the case of a + -- Constructor procedure for a type extension. + + ---------------------------- + -- Init_Expression_If_Any -- + ---------------------------- + + function Init_Expression_If_Any (Component : Entity_Id) + return Node_Id + is + Initialize_Comp_Assoc : Node_Id := First_Initialize_Comp_Assoc; + Choice : Node_Id; + + -- ??? Technically, this is quadratic (linear search called + -- a linear number of times). When/if we see performance + -- problems with hundreds of components mentioned in one + -- Initialize aspect specification, we can revisit this. + begin + while Present (Initialize_Comp_Assoc) loop + Choice := First (Choices (Initialize_Comp_Assoc)); + + while Present (Choice) loop + if Nkind (Choice) = N_Identifier + and then Chars (Choice) = Chars (Component) + then + return Expression (Initialize_Comp_Assoc); + end if; + Next (Choice); + end loop; + + Next (Initialize_Comp_Assoc); + end loop; + + if Present (Expression (Parent (Component))) then + return Expression (Parent (Component)); + end if; + + return Empty; + end Init_Expression_If_Any; + + ------------------------- + -- Make_Init_Proc_Call -- + ------------------------- + + function Make_Init_Proc_Call (Component : Entity_Id; + Component_Name : Node_Id) + return Node_Id + is + Params : constant List_Id := New_List (Component_Name); + Init_Proc : constant Entity_Id := + Base_Init_Proc (Etype (Component)); + begin + if Is_Tagged_Type (Etype (Component)) then + Append (Make_Mode_Literal (Loc, Full_Init), Params); + end if; + + return Init_Proc_Call : constant Node_Id := + Make_Procedure_Call_Statement (Loc, + Name => New_Occurrence_Of (Init_Proc, Loc), + Parameter_Associations => Params) + do + pragma Assert (Check_Number_Of_Actuals + (Subp_Call => Init_Proc_Call, + Subp_Id => Init_Proc)); + end return; + end Make_Init_Proc_Call; + + ---------------------------------- + -- Make_Parent_Constructor_Call -- + ---------------------------------- + + function Make_Parent_Constructor_Call (Parent_Type : Entity_Id) + return Node_Id + is + Actual_Parameters : List_Id := No_List; + Super_Aspect : constant Node_Id := + Find_Aspect (Body_Id, Aspect_Super); + + -- Do not confuse the Super aspect with the Super attribute. + -- Both are referenced here, but they are not related as + -- closely as some aspect/attribute homonym pairs are. + -- The attribute takes an object as a prefix. The aspect + -- can be specified for the body of a constructor procedure. + begin + if Present (Super_Aspect) then + declare + Super_Expr : constant Node_Id := + Expression (Super_Aspect); + Expr : Node_Id; + begin + if Nkind (Super_Expr) /= N_Aggregate then + Expr := New_Copy_Tree (Super_Expr); + Set_Paren_Count (Expr, 0); + Actual_Parameters := New_List (Expr); + else + -- Interpret this "aggregate" as a list of + -- actual parameter expressions. + + Actual_Parameters := New_List; + Expr := First (Expressions (Super_Expr)); + while Present (Expr) loop + Append (New_Copy_Tree (Expr), Actual_Parameters); + Next (Expr); + end loop; + end if; + end; + end if; + + -- Build a prefixed-notation call + declare + Proc_Name : constant Node_Id := + Make_Selected_Component (Loc, + Prefix => + Make_Attribute_Reference (Loc, + Prefix => New_Occurrence_Of + (First_Formal (Spec_Id), Loc), + Attribute_Name => Name_Super), + Selector_Name => + Make_Identifier (Loc, + Chars (Constructor_Name (Parent_Type)))); + begin + Set_Is_Prefixed_Call (Proc_Name); + + return Make_Procedure_Call_Statement (Loc, + Name => Proc_Name, + Parameter_Associations => Actual_Parameters); + end; + end Make_Parent_Constructor_Call; + + begin + while Present (Component) loop + pragma Assert (Ekind (Component) = E_Component); + + if Chars (Component) = Name_uTag then + null; + + elsif Chars (Component) = Name_uParent then + -- ??? Here is where we should be looking for a + -- Super aspect specification in order to call the + -- right constructor with the right parameters + -- (as opposed to unconditionally calling the + -- single-parameter constructor). + Append_To (Init_List, Make_Parent_Constructor_Call + (Parent_Type => Etype (Component))); + + else + declare + Maybe_Init_Exp : constant Node_Id := + Init_Expression_If_Any (Component); + + function Make_Component_Name return Node_Id is + (Make_Selected_Component (Loc, + Prefix => + New_Occurrence_Of (First_Formal (Spec_Id), Loc), + Selector_Name => + Make_Identifier (Loc, Chars (Component)))); + begin + -- Handle case where initial value for this component + -- is specified either in an Initialize aspect + -- specification or as part of the component declaration. + + if Present (Maybe_Init_Exp) then + -- ??? Should reorganize things so that + -- procedure Build_Assignment in exp_ch3.adb + -- (which is currently declared inside of + -- Build_Record_Init_Proc) can be called from here. + -- That procedure handles some corner cases + -- that are not properly handled here (e.g., + -- mapping current instance references to the + -- appropriate formal parameter). + + if Is_Tagged_Type (Etype (Component)) then + Append_To (Init_List, + Make_Tag_Assignment_From_Type (Loc, + Target => Make_Component_Name, + Typ => Etype (Component))); + end if; + + Append_To (Init_List, + Make_Assignment_Statement (Loc, + Name => Make_Component_Name, + Expression => New_Copy_Tree + (Maybe_Init_Exp, + New_Scope => Body_Id))); + + -- Handle case where component's type has an init proc + elsif Has_Non_Null_Base_Init_Proc (Etype (Component)) then + Append_To (Init_List, + Make_Init_Proc_Call ( + Component => Component, + Component_Name => Make_Component_Name)); + else + pragma Assert (not Is_Tagged_Type (Etype (Component))); + end if; + end; + end if; + + Next_Entity (Component); + end loop; + + Insert_List_Before_And_Analyze (First (L), Init_List); + end; + + Pop_Scope; + end Prepend_Constructor_Procedure_Prologue; + -- Local variables Except_H : Node_Id; @@ -6536,6 +6858,12 @@ package body Exp_Ch6 is Detect_Infinite_Recursion (N, Spec_Id); end if; + -- If the subprogram is a constructor procedure then prepend + -- and analyze initialization code. + + Prepend_Constructor_Procedure_Prologue + (Spec_Id => Spec_Id, Body_Id => Body_Id, L => L); + -- Set to encode entity names in package body before gigi is called Qualify_Entity_Names (N); @@ -7265,7 +7593,7 @@ package body Exp_Ch6 is elsif (not Needs_Secondary_Stack (R_Type) and then not Is_Secondary_Stack_Thunk (Scope_Id)) - or else Is_Ignored_Ghost_Entity (Scope_Id) + or else Is_Ignored_Ghost_Entity_In_Codegen (Scope_Id) then -- Mutable records with variable-length components are not returned -- on the sec-stack, so we need to make sure that the back end will @@ -10264,9 +10592,8 @@ package body Exp_Ch6 is begin pragma Assert (Check_BIP_Actuals (Call_Node, Subp)); - - -- Build-in-place function calls return their result by - -- reference. + -- Build-in-place function calls return their result by + -- reference. pragma Assert (not Is_Build_In_Place_Function (Subp) or else Returns_By_Ref (Subp)); @@ -10379,7 +10706,14 @@ package body Exp_Ch6 is pragma Assert (Serious_Errors_Detected = 0); - Check_Calls (N); + -- Do not attempt to verify the return type in CodePeer_Mode + -- as CodePeer_Mode is missing some expansion code that + -- results in trees that would be considered malformed for + -- GCC but aren't for GNAT2SCIL. + + if not CodePeer_Mode then + Check_Calls (N); + end if; end Validate_Subprogram_Calls; -------------- diff --git a/gcc/ada/exp_ch7.adb b/gcc/ada/exp_ch7.adb index dd864b7ffd36..62e9d2cbb73f 100644 --- a/gcc/ada/exp_ch7.adb +++ b/gcc/ada/exp_ch7.adb @@ -2429,7 +2429,7 @@ package body Exp_Ch7 is -- Do not inspect an ignored Ghost package body because all -- code found within will not appear in the final tree. - if Is_Ignored_Ghost_Entity (Defining_Entity (Decl)) then + if Is_Ignored_Ghost_Entity_In_Codegen (Defining_Entity (Decl)) then null; elsif Ekind (Corresponding_Spec (Decl)) /= E_Generic_Package then @@ -2507,7 +2507,7 @@ package body Exp_Ch7 is -- Ignored Ghost types do not need any cleanup actions because -- they will not appear in the final tree. - if Is_Ignored_Ghost_Entity (Typ) then + if Is_Ignored_Ghost_Entity_In_Codegen (Typ) then null; elsif Is_Tagged_Type (Typ) @@ -2553,7 +2553,7 @@ package body Exp_Ch7 is -- Ignored Ghost objects do not need any cleanup actions -- because they will not appear in the final tree. - elsif Is_Ignored_Ghost_Entity (Obj_Id) then + elsif Is_Ignored_Ghost_Entity_In_Codegen (Obj_Id) then null; -- Conversely, if one of the above cases created a Master_Node, @@ -2655,7 +2655,7 @@ package body Exp_Ch7 is -- Freeze nodes for ignored Ghost types do not need cleanup -- actions because they will never appear in the final tree. - if Is_Ignored_Ghost_Entity (Typ) then + if Is_Ignored_Ghost_Entity_In_Codegen (Typ) then null; elsif (Is_Access_Object_Type (Typ) @@ -2680,7 +2680,7 @@ package body Exp_Ch7 is -- Do not inspect an ignored Ghost package because all code -- found within will not appear in the final tree. - if Is_Ignored_Ghost_Entity (Pack_Id) then + if Is_Ignored_Ghost_Entity_In_Codegen (Pack_Id) then null; elsif Ekind (Pack_Id) /= E_Generic_Package then @@ -5281,7 +5281,7 @@ package body Exp_Ch7 is -- Ignored Ghost objects do not need any cleanup actions because -- they will not appear in the final tree. - if Is_Ignored_Ghost_Entity (Obj_Id) then + if Is_Ignored_Ghost_Entity_In_Codegen (Obj_Id) then return; end if; diff --git a/gcc/ada/exp_ch9.adb b/gcc/ada/exp_ch9.adb index c979cf6899b1..a9eac808af6f 100644 --- a/gcc/ada/exp_ch9.adb +++ b/gcc/ada/exp_ch9.adb @@ -4686,7 +4686,7 @@ package body Exp_Ch9 is -- by a missing activation chain entity; also skip generating it when -- it is a ghost entity. - if No (Chain) or else Is_Ignored_Ghost_Entity (Chain) then + if No (Chain) or else Is_Ignored_Ghost_Entity_In_Codegen (Chain) then return; -- The availability of the activation chain entity does not ensure diff --git a/gcc/ada/exp_disp.adb b/gcc/ada/exp_disp.adb index 1c09e204275e..f15d5244ba8e 100644 --- a/gcc/ada/exp_disp.adb +++ b/gcc/ada/exp_disp.adb @@ -971,7 +971,7 @@ package body Exp_Disp is pragma Assert (Is_Frozen (Typ)); if Extra_Formals_Known (Subp) then - Create_Extra_Formals (Subp_Typ); + Create_Extra_Formals (Subp_Typ, Related_Nod => Call_Node); -- Extra formals were previously deferred @@ -6056,7 +6056,7 @@ package body Exp_Disp is -- Skip ignored Ghost subprograms as those will be removed -- from the executable. - and then not Is_Ignored_Ghost_Entity (E) + and then not Is_Ignored_Ghost_Entity_In_Codegen (E) then pragma Assert (UI_To_Int (DT_Position (Prim)) <= Nb_Prim); diff --git a/gcc/ada/exp_prag.adb b/gcc/ada/exp_prag.adb index 7ec963a19508..f19b9f36287d 100644 --- a/gcc/ada/exp_prag.adb +++ b/gcc/ada/exp_prag.adb @@ -191,8 +191,7 @@ package body Exp_Prag is when Pragma_Suppress_Initialization => Expand_Pragma_Suppress_Initialization (N); - -- All other pragmas need no expander action (includes - -- Unknown_Pragma). + -- All other pragmas need no expander action when others => null; end case; @@ -1520,7 +1519,7 @@ package body Exp_Prag is is Cond : Node_Id; Error : Node_Id; - + Str : String_Id; begin -- Generate: -- Flag and then not Conseq @@ -1540,12 +1539,17 @@ package body Exp_Prag is Store_String_Chars ("failed contract case at "); Store_String_Chars (Build_Location_String (Sloc (Conseq))); + -- Store the string value as the call to RTE can cause a new unit to + -- be loaded which causes new strings to be created. + + Str := End_String; + Error := Make_Procedure_Call_Statement (Loc, Name => New_Occurrence_Of (RTE (RE_Raise_Assert_Failure), Loc), Parameter_Associations => New_List ( - Make_String_Literal (Loc, End_String))); + Make_String_Literal (Loc, Str))); if No (Checks) then Checks := @@ -2516,6 +2520,7 @@ package body Exp_Prag is Call : Node_Id; Call_List : List_Id; Call_Loc : Source_Ptr; + Check_Prag : Node_Id; Expr : Node_Id; Loc : Source_Ptr; Proc_Body : Node_Id; @@ -2604,6 +2609,20 @@ package body Exp_Prag is -- pragma Check (Initial_Condition, ); -- end Initial_Condition; + Check_Prag := + Make_Pragma + (Loc, + Chars => Name_Check, + Pragma_Argument_Associations => + New_List + (Make_Pragma_Argument_Association + (Loc, + Expression => + Make_Identifier (Loc, Name_Initial_Condition)), + Make_Pragma_Argument_Association + (Loc, Expression => New_Copy_Tree (Expr)))); + Copy_Assertion_Policy_Attributes (Check_Prag, IC_Prag); + Proc_Body := Make_Subprogram_Body (Loc, Specification => @@ -2611,15 +2630,7 @@ package body Exp_Prag is Declarations => Empty_List, Handled_Statement_Sequence => Make_Handled_Sequence_Of_Statements (Loc, - Statements => New_List ( - Make_Pragma (Loc, - Chars => Name_Check, - Pragma_Argument_Associations => New_List ( - Make_Pragma_Argument_Association (Loc, - Expression => - Make_Identifier (Loc, Name_Initial_Condition)), - Make_Pragma_Argument_Association (Loc, - Expression => New_Copy_Tree (Expr))))))); + Statements => New_List (Check_Prag))); Append_To (Body_List, Proc_Body); @@ -2943,6 +2954,7 @@ package body Exp_Prag is Typ => Expr_Typ, Curr_Val => New_Occurrence_Of (Curr_Id, Loc), Old_Val => New_Occurrence_Of (Old_Id, Loc))))); + Copy_Assertion_Policy_Attributes (Prag, N); -- Generate: -- if Curr /= Old then @@ -3221,6 +3233,11 @@ package body Exp_Prag is -- Prev_Decl and is stored in this parameter for a next call to this -- routine. Is_Last is True when there are no more variants to process. + function Variants_Function_Name (Prag : Node_Id) return Name_Id; + -- The name of the variants function is either + -- * _variants: if no assertion level was associated with the pragma. + -- * _variants_ otherwise. + ---------------------- -- Formal_Param_Map -- ---------------------- @@ -3264,11 +3281,11 @@ package body Exp_Prag is Expr_Typ : constant Entity_Id := Etype (Expr); Loc : constant Source_Ptr := Sloc (Expr); - Old_Id : Entity_Id; - Old_Decl : Node_Id; - Curr_Id : Entity_Id; - Curr_Decl : Node_Id; - Prag : Node_Id; + Old_Id : Entity_Id; + Old_Decl : Node_Id; + Curr_Id : Entity_Id; + Curr_Decl : Node_Id; + Check_Prag : Node_Id; begin -- Create temporaries that store the old values of the associated @@ -3308,7 +3325,7 @@ package body Exp_Prag is -- Generate: -- pragma Check (Variant, Curr <|> Old); - Prag := + Check_Prag := Make_Pragma (Loc, Chars => Name_Check, Pragma_Argument_Associations => New_List ( @@ -3323,6 +3340,7 @@ package body Exp_Prag is Typ => Expr_Typ, Curr_Val => New_Occurrence_Of (Curr_Id, Loc), Old_Val => New_Occurrence_Of (Old_Id, Loc))))); + Copy_Assertion_Policy_Attributes (Check_Prag, Prag); -- Generate: -- if Curr /= Old then @@ -3335,7 +3353,7 @@ package body Exp_Prag is -- pragma. if Is_Last then - If_Stmt := Prag; + If_Stmt := Check_Prag; else If_Stmt := Make_If_Statement (Loc, @@ -3343,7 +3361,7 @@ package body Exp_Prag is Make_Op_Ne (Loc, Left_Opnd => New_Occurrence_Of (Curr_Id, Loc), Right_Opnd => New_Occurrence_Of (Old_Id, Loc)), - Then_Statements => New_List (Prag)); + Then_Statements => New_List (Check_Prag)); end if; -- Generate: @@ -3352,7 +3370,7 @@ package body Exp_Prag is -- end if; elsif Is_Last then - Set_Else_Statements (If_Stmt, New_List (Prag)); + Set_Else_Statements (If_Stmt, New_List (Check_Prag)); -- Generate: -- elsif Curr /= Old then @@ -3369,10 +3387,30 @@ package body Exp_Prag is Make_Op_Ne (Loc, Left_Opnd => New_Occurrence_Of (Curr_Id, Loc), Right_Opnd => New_Occurrence_Of (Old_Id, Loc)), - Then_Statements => New_List (Prag))); + Then_Statements => New_List (Check_Prag))); end if; end Process_Variant; + ---------------------------- + -- Variants_Function_Name -- + ---------------------------- + + function Variants_Function_Name (Prag : Node_Id) return Name_Id is + begin + if Present (Pragma_Ghost_Assertion_Level (Prag)) + and then Pragma_Ghost_Assertion_Level (Prag) + /= Standard_Level_Default + then + Get_Name_String (Name_uVariants); + Add_Str_To_Name_Buffer ("_"); + Get_Name_String_And_Append + (Chars (Pragma_Ghost_Assertion_Level (Prag))); + return Name_Enter; + else + return Name_uVariants; + end if; + end Variants_Function_Name; + -- Local variables Loc : constant Source_Ptr := Sloc (Prag); @@ -3386,6 +3424,7 @@ package body Exp_Prag is Proc_Bod : Node_Id; Proc_Decl : Node_Id; Proc_Id : Entity_Id; + Proc_Nam : Name_Id; Proc_Spec : Node_Id; Variant : Node_Id; @@ -3411,7 +3450,9 @@ package body Exp_Prag is -- variant expressions captured at the start of subprogram with their -- values at the recursive call of the subprogram. - Proc_Id := Make_Defining_Identifier (Loc, Name_uVariants); + Proc_Nam := Variants_Function_Name (Prag); + + Proc_Id := Make_Defining_Identifier (Loc, Proc_Nam); Proc_Spec := Make_Procedure_Specification diff --git a/gcc/ada/exp_put_image.adb b/gcc/ada/exp_put_image.adb index ce3390b50384..c11bc43cfcab 100644 --- a/gcc/ada/exp_put_image.adb +++ b/gcc/ada/exp_put_image.adb @@ -363,6 +363,9 @@ package body Exp_Put_Image is Lib_RE := RE_Put_Image_Access_Prot_Subp; elsif Is_Access_Subprogram_Type (Base_Type (U_Type)) then Lib_RE := RE_Put_Image_Access_Subp; + elsif Is_Extended_Access_Type (Base_Type (U_Type)) then + pragma Assert (No (P_Size)); + Lib_RE := RE_Put_Image_Extended_Access_Pointer; elsif P_Size = System_Address_Size then Lib_RE := RE_Put_Image_Thin_Pointer; else diff --git a/gcc/ada/exp_strm.adb b/gcc/ada/exp_strm.adb index 5e1c9134fb57..3bb6966dc1c2 100644 --- a/gcc/ada/exp_strm.adb +++ b/gcc/ada/exp_strm.adb @@ -33,7 +33,6 @@ with Mutably_Tagged; use Mutably_Tagged; with Namet; use Namet; with Nlists; use Nlists; with Nmake; use Nmake; -with Rtsfind; use Rtsfind; with Sem_Aux; use Sem_Aux; with Sem_Util; use Sem_Util; with Sinfo; use Sinfo; @@ -43,7 +42,6 @@ with Snames; use Snames; with Stand; use Stand; with Tbuild; use Tbuild; with Ttypes; use Ttypes; -with Uintp; use Uintp; package body Exp_Strm is @@ -82,13 +80,13 @@ package body Exp_Strm is -- Decls and Stms are the declarations and statements for the body and -- The parameter Fnam is the name of the constructed function. - function Has_Stream_Standard_Rep (U_Type : Entity_Id) return Boolean; - -- This function is used to test the type U_Type, to determine if it has - -- a standard representation from a streaming point of view. Standard means - -- that it has a standard representation (e.g. no enumeration rep clause), - -- and the size of the root type is the same as the streaming size (which - -- is defined as value specified by a Stream_Size clause if present, or - -- the Esize of U_Type if not). + function Is_Stream_Standard_Rep + (U_Type : Entity_Id; S_Size : Uint) return Boolean; + -- This function is used to test the type U_Type, to determine whether it + -- would have a standard representation from a streaming point of view if + -- its Stream_Size attribute was set to S_Size. Standard means that it has + -- a standard representation (e.g. no enumeration rep clause), and the size + -- of the root type is the same as the stream size. function Make_Stream_Subprogram_Name (Loc : Source_Ptr; @@ -436,51 +434,39 @@ package body Exp_Strm is Build_Array_Read_Write_Procedure (Typ, Decl, Pnam, Name_Write); end Build_Array_Write_Procedure; - --------------------------------- - -- Build_Elementary_Input_Call -- - --------------------------------- - - function Build_Elementary_Input_Call (N : Node_Id) return Node_Id is - Loc : constant Source_Ptr := Sloc (N); - P_Type : constant Entity_Id := Entity (Prefix (N)); - U_Type : constant Entity_Id := Underlying_Type (P_Type); - Rt_Type : constant Entity_Id := Root_Type (U_Type); - FST : constant Entity_Id := First_Subtype (U_Type); - Strm : constant Node_Id := First (Expressions (N)); - Targ : constant Node_Id := Next (Strm); - P_Size : constant Uint := Get_Stream_Size (FST); - Res : Node_Id; - Lib_RE : RE_Id; + function Get_Primitives + (P_Type : Entity_Id; P_Size : Uint) return Primitive_Result + is - begin - -- Check first for Boolean and Character. These are enumeration types, - -- but we treat them specially, since they may require special handling - -- in the transfer protocol. However, this special handling only applies - -- if they have standard representation, otherwise they are treated like - -- any other enumeration type. - - if Rt_Type = Standard_Boolean - and then Has_Stream_Standard_Rep (U_Type) - then - Lib_RE := RE_I_B; + function Prims (Input, Write : RE_Id) return Primitive_Result; + function Prims (Input, Write : RE_Id) return Primitive_Result is + begin + return (Primitives, 0, Input, Write); + end Prims; - elsif Rt_Type = Standard_Character - and then Has_Stream_Standard_Rep (U_Type) - then - Lib_RE := RE_I_C; + function PSizes (L : Sizes) return Primitive_Result; + function PSizes (L : Sizes) return Primitive_Result is + begin + return (Possible_Sizes, L'Length, L); + end PSizes; - elsif Rt_Type = Standard_Wide_Character - and then Has_Stream_Standard_Rep (U_Type) - then - Lib_RE := RE_I_WC; + U_Type : constant Entity_Id := Underlying_Type (P_Type); + FST : constant Entity_Id := First_Subtype (U_Type); + Rt_Type : constant Entity_Id := Root_Type (U_Type); - elsif Rt_Type = Standard_Wide_Wide_Character - and then Has_Stream_Standard_Rep (U_Type) + Rep_Is_Standard : constant Boolean := + Known_RM_Size (U_Type) + and then Is_Stream_Standard_Rep (U_Type, P_Size); + begin + if Rt_Type = Standard_Boolean and then Rep_Is_Standard then + return Prims (RE_I_B, RE_W_B); + elsif Rt_Type = Standard_Character and then Rep_Is_Standard then + return Prims (RE_I_C, RE_W_C); + elsif Rt_Type = Standard_Wide_Character and then Rep_Is_Standard then + return Prims (RE_I_WC, RE_W_WC); + elsif Rt_Type = Standard_Wide_Wide_Character and then Rep_Is_Standard then - Lib_RE := RE_I_WWC; - - -- Floating point types - + return Prims (RE_I_WWC, RE_W_WWC); elsif Is_Floating_Point_Type (U_Type) then -- Question: should we use P_Size or Rt_Type to distinguish between @@ -500,23 +486,30 @@ package body Exp_Strm is -- To deal with these two requirements we add the special checks -- on equal sizes and use the root type to distinguish. - if P_Size <= Standard_Short_Float_Size + if P_Size = Standard_Short_Float_Size and then (Standard_Short_Float_Size /= Standard_Float_Size or else Rt_Type = Standard_Short_Float) then - Lib_RE := RE_I_SF; + return Prims (RE_I_SF, RE_W_SF); - elsif P_Size <= Standard_Float_Size then - Lib_RE := RE_I_F; + elsif P_Size = Standard_Float_Size then + return Prims (RE_I_F, RE_W_F); - elsif P_Size <= Standard_Long_Float_Size + elsif P_Size = Standard_Long_Float_Size and then (Standard_Long_Float_Size /= Standard_Long_Long_Float_Size - or else Rt_Type = Standard_Long_Float) + or else Rt_Type = Standard_Long_Float) then - Lib_RE := RE_I_LF; + return Prims (RE_I_LF, RE_W_LF); + elsif P_Size = Standard_Long_Long_Float_Size then + return Prims (RE_I_LLF, RE_W_LLF); else - Lib_RE := RE_I_LLF; + return + PSizes + ((Standard_Short_Float_Size, + Standard_Float_Size, + Standard_Long_Float_Size, + Standard_Long_Long_Float_Size)); end if; -- Signed integer types. Also includes signed fixed-point types and @@ -548,35 +541,42 @@ package body Exp_Strm is -- The following set of tests gets repeated many times, we should -- have an abstraction defined ??? - and then - (Is_Fixed_Point_Type (U_Type) - or else - Is_Enumeration_Type (U_Type) - or else - (Is_Signed_Integer_Type (U_Type) - and then not Has_Biased_Representation (FST))) + and then (Is_Fixed_Point_Type (U_Type) + or else Is_Enumeration_Type (U_Type) + or else (Is_Signed_Integer_Type (U_Type) + and then not Has_Biased_Representation (FST))) then - if P_Size <= Standard_Short_Short_Integer_Size then - Lib_RE := RE_I_SSI; + if P_Size = Standard_Short_Short_Integer_Size then + return Prims (RE_I_SSI, RE_W_SSI); - elsif P_Size <= Standard_Short_Integer_Size then - Lib_RE := RE_I_SI; + elsif P_Size = Standard_Short_Integer_Size then + return Prims (RE_I_SI, RE_W_SI); elsif P_Size = 24 then - Lib_RE := RE_I_I24; + return Prims (RE_I_I24, RE_W_I24); - elsif P_Size <= Standard_Integer_Size then - Lib_RE := RE_I_I; + elsif P_Size = Standard_Integer_Size then + return Prims (RE_I_I, RE_W_I); - elsif P_Size <= Standard_Long_Integer_Size then - Lib_RE := RE_I_LI; + elsif P_Size = Standard_Long_Integer_Size then + return Prims (RE_I_LI, RE_W_LI); - elsif P_Size <= Standard_Long_Long_Integer_Size then - Lib_RE := RE_I_LLI; + elsif P_Size = Standard_Long_Long_Integer_Size then + return Prims (RE_I_LLI, RE_W_LLI); + elsif P_Size = Standard_Long_Long_Long_Integer_Size then + return Prims (RE_I_LLLI, RE_W_LLLI); else - Lib_RE := RE_I_LLLI; + return + PSizes + ((Standard_Short_Short_Integer_Size, + Standard_Short_Integer_Size, + 24, + Standard_Integer_Size, + Standard_Long_Integer_Size, + Standard_Long_Long_Integer_Size, + Standard_Long_Long_Long_Integer_Size)); end if; -- Unsigned integer types, also includes unsigned fixed-point types @@ -586,41 +586,74 @@ package body Exp_Strm is -- Also includes signed integer types that are unsigned in the sense -- that they do not include negative numbers. See above for details. - elsif Is_Modular_Integer_Type (U_Type) - or else Is_Fixed_Point_Type (U_Type) - or else Is_Enumeration_Type (U_Type) + elsif Is_Modular_Integer_Type (U_Type) + or else Is_Fixed_Point_Type (U_Type) + or else Is_Enumeration_Type (U_Type) or else Is_Signed_Integer_Type (U_Type) then - if P_Size <= Standard_Short_Short_Integer_Size then - Lib_RE := RE_I_SSU; + if P_Size = Standard_Short_Short_Integer_Size then + return Prims (RE_I_SSU, RE_W_SSU); - elsif P_Size <= Standard_Short_Integer_Size then - Lib_RE := RE_I_SU; + elsif P_Size = Standard_Short_Integer_Size then + return Prims (RE_I_SU, RE_W_SU); elsif P_Size = 24 then - Lib_RE := RE_I_U24; + return Prims (RE_I_U24, RE_W_U24); + + elsif P_Size = Standard_Integer_Size then + return Prims (RE_I_U, RE_W_U); - elsif P_Size <= Standard_Integer_Size then - Lib_RE := RE_I_U; + elsif P_Size = Standard_Long_Integer_Size then + return Prims (RE_I_LU, RE_W_LU); - elsif P_Size <= Standard_Long_Integer_Size then - Lib_RE := RE_I_LU; + elsif P_Size = Standard_Long_Long_Integer_Size then + return Prims (RE_I_LLU, RE_W_LLU); - elsif P_Size <= Standard_Long_Long_Integer_Size then - Lib_RE := RE_I_LLU; + elsif P_Size = Standard_Long_Long_Long_Integer_Size then + return Prims (RE_I_LLLU, RE_W_LLLU); else - Lib_RE := RE_I_LLLU; + return + PSizes + ((Standard_Short_Short_Integer_Size, + Standard_Short_Integer_Size, + 24, + Standard_Integer_Size, + Standard_Long_Integer_Size, + Standard_Long_Long_Integer_Size, + Standard_Long_Long_Long_Integer_Size)); end if; else pragma Assert (Is_Access_Type (U_Type)); if Present (P_Size) and then P_Size > System_Address_Size then - Lib_RE := RE_I_AD; + return Prims (RE_I_AD, RE_W_AD); else - Lib_RE := RE_I_AS; + return Prims (RE_I_AS, RE_W_AS); end if; end if; + end Get_Primitives; + + --------------------------------- + -- Build_Elementary_Input_Call -- + --------------------------------- + + function Build_Elementary_Input_Call (N : Node_Id) return Node_Id is + Loc : constant Source_Ptr := Sloc (N); + P_Type : constant Entity_Id := Entity (Prefix (N)); + U_Type : constant Entity_Id := Underlying_Type (P_Type); + FST : constant Entity_Id := First_Subtype (U_Type); + Strm : constant Node_Id := First (Expressions (N)); + Targ : constant Node_Id := Next (Strm); + P_Size : constant Uint := Get_Stream_Size (FST); + Res : Node_Id; + Prims : constant Primitive_Result := Get_Primitives (P_Type, P_Size); + + Lib_RE : constant RE_Id := + (case Prims.S is + when Primitives => Prims.Input, + when others => raise Program_Error); + begin -- Call the function, and do an unchecked conversion of the result -- to the actual type of the prefix. If the target is a discriminant, -- and we are in the body of the default implementation of a 'Read @@ -679,191 +712,22 @@ package body Exp_Strm is function Build_Elementary_Write_Call (N : Node_Id) return Node_Id is Loc : constant Source_Ptr := Sloc (N); - P_Type : constant Entity_Id := Entity (Prefix (N)); - U_Type : constant Entity_Id := Underlying_Type (P_Type); - Rt_Type : constant Entity_Id := Root_Type (U_Type); - FST : constant Entity_Id := First_Subtype (U_Type); - Strm : constant Node_Id := First (Expressions (N)); - Item : constant Node_Id := Next (Strm); - P_Size : Uint; - Lib_RE : RE_Id; + P_Type : constant Entity_Id := Entity (Prefix (N)); + U_Type : constant Entity_Id := Underlying_Type (P_Type); + FST : constant Entity_Id := First_Subtype (U_Type); + Strm : constant Node_Id := First (Expressions (N)); + Item : constant Node_Id := Next (Strm); + P_Size : constant Uint := Get_Stream_Size (FST); Libent : Entity_Id; - begin - -- Compute the size of the stream element. This is either the size of - -- the first subtype or if given the size of the Stream_Size attribute. - - if Has_Stream_Size_Clause (FST) then - P_Size := Static_Integer (Expression (Stream_Size_Clause (FST))); - else - P_Size := Esize (FST); - end if; - - -- Find the routine to be called - - -- Check for First Boolean and Character. These are enumeration types, - -- but we treat them specially, since they may require special handling - -- in the transfer protocol. However, this special handling only applies - -- if they have standard representation, otherwise they are treated like - -- any other enumeration type. - - if Rt_Type = Standard_Boolean - and then Has_Stream_Standard_Rep (U_Type) - then - Lib_RE := RE_W_B; - - elsif Rt_Type = Standard_Character - and then Has_Stream_Standard_Rep (U_Type) - then - Lib_RE := RE_W_C; - - elsif Rt_Type = Standard_Wide_Character - and then Has_Stream_Standard_Rep (U_Type) - then - Lib_RE := RE_W_WC; - - elsif Rt_Type = Standard_Wide_Wide_Character - and then Has_Stream_Standard_Rep (U_Type) - then - Lib_RE := RE_W_WWC; - - -- Floating point types - - elsif Is_Floating_Point_Type (U_Type) then - - -- Question: should we use P_Size or Rt_Type to distinguish between - -- possible floating point types? If a non-standard size or a stream - -- size is specified, then we should certainly use the size. But if - -- we have two types the same (notably Short_Float_Size = Float_Size - -- which is close to universally true, and Long_Long_Float_Size = - -- Long_Float_Size, true on most targets except the x86), then we - -- would really rather use the root type, so that if people want to - -- fiddle with System.Stream_Attributes to get inter-target portable - -- streams, they get the size they expect. Consider in particular the - -- case of a stream written on an x86, with 96-bit Long_Long_Float - -- being read into a non-x86 target with 64 bit Long_Long_Float. A - -- special version of System.Stream_Attributes can deal with this - -- provided the proper type is always used. - - -- To deal with these two requirements we add the special checks - -- on equal sizes and use the root type to distinguish. - - if P_Size <= Standard_Short_Float_Size - and then (Standard_Short_Float_Size /= Standard_Float_Size - or else Rt_Type = Standard_Short_Float) - then - Lib_RE := RE_W_SF; - - elsif P_Size <= Standard_Float_Size then - Lib_RE := RE_W_F; - - elsif P_Size <= Standard_Long_Float_Size - and then (Standard_Long_Float_Size /= Standard_Long_Long_Float_Size - or else Rt_Type = Standard_Long_Float) - then - Lib_RE := RE_W_LF; - - else - Lib_RE := RE_W_LLF; - end if; - - -- Signed integer types. Also includes signed fixed-point types and - -- signed enumeration types share this circuitry. - - -- Note on signed integer types. We do not consider types as signed for - -- this purpose if they have no negative numbers, or if they have biased - -- representation. The reason is that the value in either case basically - -- represents an unsigned value. - - -- For example, consider: - - -- type W is range 0 .. 2**32 - 1; - -- for W'Size use 32; - - -- This is a signed type, but the representation is unsigned, and may - -- be outside the range of a 32-bit signed integer, so this must be - -- treated as 32-bit unsigned. - - -- Similarly, the representation is also unsigned if we have: - - -- type W is range -1 .. +254; - -- for W'Size use 8; - - -- forcing a biased and unsigned representation - - elsif not Is_Unsigned_Type (FST) - and then - (Is_Fixed_Point_Type (U_Type) - or else - Is_Enumeration_Type (U_Type) - or else - (Is_Signed_Integer_Type (U_Type) - and then not Has_Biased_Representation (FST))) - then - if P_Size <= Standard_Short_Short_Integer_Size then - Lib_RE := RE_W_SSI; - - elsif P_Size <= Standard_Short_Integer_Size then - Lib_RE := RE_W_SI; + Prims : constant Primitive_Result := Get_Primitives (P_Type, P_Size); - elsif P_Size = 24 then - Lib_RE := RE_W_I24; - - elsif P_Size <= Standard_Integer_Size then - Lib_RE := RE_W_I; - - elsif P_Size <= Standard_Long_Integer_Size then - Lib_RE := RE_W_LI; - - elsif P_Size <= Standard_Long_Long_Integer_Size then - Lib_RE := RE_W_LLI; - - else - Lib_RE := RE_W_LLLI; - end if; - - -- Unsigned integer types, also includes unsigned fixed-point types - -- and unsigned enumeration types (note we know they are unsigned - -- because we already tested for signed above). - - -- Also includes signed integer types that are unsigned in the sense - -- that they do not include negative numbers. See above for details. - - elsif Is_Modular_Integer_Type (U_Type) - or else Is_Fixed_Point_Type (U_Type) - or else Is_Enumeration_Type (U_Type) - or else Is_Signed_Integer_Type (U_Type) - then - if P_Size <= Standard_Short_Short_Integer_Size then - Lib_RE := RE_W_SSU; - - elsif P_Size <= Standard_Short_Integer_Size then - Lib_RE := RE_W_SU; - - elsif P_Size = 24 then - Lib_RE := RE_W_U24; - - elsif P_Size <= Standard_Integer_Size then - Lib_RE := RE_W_U; - - elsif P_Size <= Standard_Long_Integer_Size then - Lib_RE := RE_W_LU; - - elsif P_Size <= Standard_Long_Long_Integer_Size then - Lib_RE := RE_W_LLU; - - else - Lib_RE := RE_W_LLLU; - end if; - - else pragma Assert (Is_Access_Type (U_Type)); - - if Present (P_Size) and then P_Size > System_Address_Size then - Lib_RE := RE_W_AD; - else - Lib_RE := RE_W_AS; - end if; - end if; + Lib_RE : constant RE_Id := + (case Prims.S is + when Primitives => Prims.Write, + when others => raise Program_Error); + begin + pragma Assert (Prims.S = Primitives); -- Unchecked-convert parameter to the required type (i.e. the type of -- the corresponding parameter, and call the appropriate routine. @@ -871,12 +735,15 @@ package body Exp_Strm is Libent := RTE (Lib_RE); return - Make_Procedure_Call_Statement (Loc, - Name => New_Occurrence_Of (Libent, Loc), - Parameter_Associations => New_List ( - Relocate_Node (Strm), - Unchecked_Convert_To (Etype (Next_Formal (First_Formal (Libent))), - Relocate_Node (Item)))); + Make_Procedure_Call_Statement + (Loc, + Name => New_Occurrence_Of (Libent, Loc), + Parameter_Associations => + New_List + (Relocate_Node (Strm), + Unchecked_Convert_To + (Etype (Next_Formal (First_Formal (Libent))), + Relocate_Node (Item)))); end Build_Elementary_Write_Call; ----------------------------------------- @@ -1766,22 +1633,15 @@ package body Exp_Strm is -- Has_Stream_Standard_Rep -- ----------------------------- - function Has_Stream_Standard_Rep (U_Type : Entity_Id) return Boolean is - Siz : Uint; - + function Is_Stream_Standard_Rep + (U_Type : Entity_Id; S_Size : Uint) return Boolean is begin if Has_Non_Standard_Rep (U_Type) then return False; end if; - if Has_Stream_Size_Clause (U_Type) then - Siz := Static_Integer (Expression (Stream_Size_Clause (U_Type))); - else - Siz := Esize (First_Subtype (U_Type)); - end if; - - return Siz = Esize (Root_Type (U_Type)); - end Has_Stream_Standard_Rep; + return S_Size = Esize (Root_Type (U_Type)); + end Is_Stream_Standard_Rep; --------------------------------- -- Make_Stream_Subprogram_Name -- @@ -1827,5 +1687,4 @@ package body Exp_Strm is return Base_Type (E); end if; end Stream_Base_Type; - end Exp_Strm; diff --git a/gcc/ada/exp_strm.ads b/gcc/ada/exp_strm.ads index 733cf9c0dd19..54eded5d61df 100644 --- a/gcc/ada/exp_strm.ads +++ b/gcc/ada/exp_strm.ads @@ -26,7 +26,9 @@ -- Routines to build stream subprograms for composite types with Exp_Tss; use Exp_Tss; +with Rtsfind; use Rtsfind; with Types; use Types; +with Uintp; use Uintp; package Exp_Strm is @@ -138,4 +140,32 @@ package Exp_Strm is -- always null), and Pnam is the name of the constructed procedure. -- Used by Exp_Dist to generate stream-oriented attributes for RACWs. + type Status is (Primitives, Possible_Sizes); + + type Sizes is array (Positive range <>) of Nat; + + type Primitive_Result + (S : Status; + Len : Natural) + is record + case S is + when Primitives => + Input : RE_Id; + Write : RE_Id; + + when Possible_Sizes => + List : Sizes (1 .. Len); + end case; + end record; + + -------------------- + -- Get_Primitives -- + -------------------- + + function Get_Primitives + (P_Type : Entity_Id; P_Size : Uint) return Primitive_Result; + -- If P_Type supports a stream size of P_Size, returns the corresponding + -- input and write primitives. Otherwise, returns a list of the stream + -- sizes P_Type supports, in nondecreasing order and with possible + -- duplicates. end Exp_Strm; diff --git a/gcc/ada/exp_util.adb b/gcc/ada/exp_util.adb index e9ec7b73d877..30b2461c4af6 100644 --- a/gcc/ada/exp_util.adb +++ b/gcc/ada/exp_util.adb @@ -638,6 +638,23 @@ package body Exp_Util is end if; else + -- For GNAT objects with indefinite nominal subtypes will have + -- an itype constrained by their initialization expression + -- (except for class-wide type). For GNATprove, those objects + -- will keep their nominal subtype unconstrained, while + -- actually those objects are constrained; see call from + -- Analyze_Object_Declaration to Expand_Subtype_From_Expr. + + if Ekind (Ent) in E_Constant | E_Variable + and then not Is_Definite_Subtype (Etype (Ent)) + and then not Is_Class_Wide_Type (Etype (Ent)) + and then No (Renamed_Object (Ent)) + then + pragma Assert + (GNATprove_Mode + and then Present (Expression (Parent (Ent)))); + return True; + end if; -- If the prefix is not a variable or is aliased, then -- definitely true; if it's a formal parameter without an @@ -1893,12 +1910,11 @@ package body Exp_Util is ------------------- procedure Add_DIC_Check - (DIC_Prag : Node_Id; - DIC_Expr : Node_Id; - Stmts : in out List_Id) + (DIC_Prag : Node_Id; DIC_Expr : Node_Id; Stmts : in out List_Id) is - Loc : constant Source_Ptr := Sloc (DIC_Prag); - Nam : constant Name_Id := Original_Aspect_Pragma_Name (DIC_Prag); + Loc : constant Source_Ptr := Sloc (DIC_Prag); + Nam : constant Name_Id := Original_Aspect_Pragma_Name (DIC_Prag); + Prag : Node_Id; begin -- The DIC pragma is ignored, nothing left to do @@ -1908,21 +1924,25 @@ package body Exp_Util is -- Otherwise the DIC expression must be checked at run time. -- Generate: - + -- -- pragma Check (, ); else - Append_New_To (Stmts, - Make_Pragma (Loc, - Pragma_Identifier => - Make_Identifier (Loc, Name_Check), + Prag := + Make_Pragma + (Loc, + Pragma_Identifier => + Make_Identifier (Loc, Name_Check), + Pragma_Argument_Associations => + New_List + (Make_Pragma_Argument_Association + (Loc, Expression => Make_Identifier (Loc, Nam)), + Make_Pragma_Argument_Association + (Loc, Expression => DIC_Expr))); - Pragma_Argument_Associations => New_List ( - Make_Pragma_Argument_Association (Loc, - Expression => Make_Identifier (Loc, Nam)), + Copy_Assertion_Policy_Attributes (Prag, DIC_Prag); - Make_Pragma_Argument_Association (Loc, - Expression => DIC_Expr)))); + Append_New_To (Stmts, Prag); end if; -- Add the pragma to the list of processed pragmas @@ -2318,6 +2338,7 @@ package body Exp_Util is DIC_Typ : Entity_Id; Dummy_1 : Entity_Id; Dummy_2 : Entity_Id; + Prag : Node_Id; Proc_Body : Node_Id; Proc_Body_Id : Entity_Id; Proc_Decl : Node_Id; @@ -2464,12 +2485,23 @@ package body Exp_Util is if Partial_DIC then pragma Assert (Present (Priv_Typ)); - if Has_Own_DIC (Work_Typ) then -- If we're testing this then maybe - Add_Own_DIC -- we shouldn't be calling Find_DIC_Typ above??? - (DIC_Prag => DIC_Prag, - DIC_Typ => DIC_Typ, -- Should this just be Work_Typ??? - Obj_Id => Obj_Id, - Stmts => Stmts); + if Has_Own_DIC (Work_Typ) then + -- If we're testing this then maybe + + Prag := DIC_Prag; + while Present (Prag) + and then Nkind (Prag) = N_Pragma + and then Pragma_Name (Prag) = Name_Default_Initial_Condition + and then (Prag = DIC_Prag + or else From_Same_Pragma (Prag, DIC_Prag)) + loop + Add_Own_DIC -- we shouldn't be calling Find_DIC_Typ above??? + (DIC_Prag => Prag, + DIC_Typ => DIC_Typ, -- Should this just be Work_Typ??? + Obj_Id => Obj_Id, + Stmts => Stmts); + Next_Rep_Item (Prag); + end loop; end if; -- Otherwise, the "full" DIC procedure verifies the DICs inherited from @@ -3229,8 +3261,9 @@ package body Exp_Util is Ploc : constant Source_Ptr := Sloc (Prag); Str_Arg : constant Node_Id := Next (Next (First (Args))); - Assoc : List_Id; - Str : String_Id; + Assoc : List_Id; + Check_Prag : Node_Id; + Str : String_Id; begin -- The invariant is ignored, nothing left to do @@ -3273,10 +3306,14 @@ package body Exp_Util is -- Generate: -- pragma Check (, , ); - Append_New_To (Checks, + Check_Prag := Make_Pragma (Ploc, - Chars => Name_Check, - Pragma_Argument_Associations => Assoc)); + Chars => Name_Check, + Pragma_Argument_Associations => Assoc); + + Copy_Assertion_Policy_Attributes (Check_Prag, Prag); + + Append_New_To (Checks, Check_Prag); end if; -- Output an info message when inheriting an invariant and the @@ -6186,7 +6223,11 @@ package body Exp_Util is Utyp := Corresponding_Record_Type (Root_Type (Btyp)); elsif Is_Implicit_Full_View (Utyp) then - Utyp := Underlying_Type (Root_Type (Btyp)); + if Is_Derived_Type (Btyp) then + Utyp := Underlying_Type (Root_Type (Btyp)); + else + Utyp := Underlying_Type (Root_Type (Full_View (Btyp))); + end if; if Is_Protected_Type (Utyp) then Utyp := Corresponding_Record_Type (Utyp); @@ -10013,7 +10054,8 @@ package body Exp_Util is begin return (not Is_Tagged_Type (T) and then Is_Derived_Type (T)) or else - (Is_Private_Type (T) and then Present (Full_View (T)) + (Is_Private_Type (T) + and then Present (Full_View (T)) and then not Is_Tagged_Type (Full_View (T)) and then Is_Derived_Type (Full_View (T)) and then Etype (Full_View (T)) /= T); @@ -13478,7 +13520,7 @@ package body Exp_Util is -- Ignored Ghost types do not need any cleanup actions because -- they will not appear in the final tree. - if Is_Ignored_Ghost_Entity (Typ) then + if Is_Ignored_Ghost_Entity_In_Codegen (Typ) then null; elsif Is_Tagged_Type (Typ) @@ -13524,7 +13566,7 @@ package body Exp_Util is -- Ignored Ghost objects do not need any cleanup actions because -- they will not appear in the final tree. - elsif Is_Ignored_Ghost_Entity (Obj_Id) then + elsif Is_Ignored_Ghost_Entity_In_Codegen (Obj_Id) then null; -- Conversely, if one of the above cases created a Master_Node, @@ -13620,7 +13662,7 @@ package body Exp_Util is -- Freeze nodes for ignored Ghost types do not need cleanup -- actions because they will never appear in the final tree. - if Is_Ignored_Ghost_Entity (Typ) then + if Is_Ignored_Ghost_Entity_In_Codegen (Typ) then null; elsif ((Is_Access_Object_Type (Typ) @@ -13643,7 +13685,7 @@ package body Exp_Util is -- Do not inspect an ignored Ghost package because all code found -- within will not appear in the final tree. - if Is_Ignored_Ghost_Entity (Pack_Id) then + if Is_Ignored_Ghost_Entity_In_Codegen (Pack_Id) then null; elsif Ekind (Pack_Id) /= E_Generic_Package @@ -13660,7 +13702,7 @@ package body Exp_Util is -- Do not inspect an ignored Ghost package body because all code -- found within will not appear in the final tree. - if Is_Ignored_Ghost_Entity (Defining_Entity (Decl)) then + if Is_Ignored_Ghost_Entity_In_Codegen (Defining_Entity (Decl)) then null; elsif Ekind (Corresponding_Spec (Decl)) /= E_Generic_Package @@ -14883,6 +14925,37 @@ package body Exp_Util is Node : Node_Id := N; Parent_Node : Node_Id := Parent (Node); + begin + loop + case Nkind (Parent_Node) is + when N_Case_Expression_Alternative => + null; + + when N_Case_Expression => + exit when Node = Expression (Parent_Node); + + when N_If_Expression => + exit when Node = First (Expressions (Parent_Node)); + + when others => + exit; + end case; + + Node := Parent_Node; + Parent_Node := Parent (Node); + end loop; + + return Parent_Node; + end Unconditional_Parent; + + -------------------------------------- + -- Unqualified_Unconditional_Parent -- + -------------------------------------- + + function Unqualified_Unconditional_Parent (N : Node_Id) return Node_Id is + Node : Node_Id := N; + Parent_Node : Node_Id := Parent (Node); + begin loop case Nkind (Parent_Node) is @@ -14907,7 +14980,7 @@ package body Exp_Util is end loop; return Parent_Node; - end Unconditional_Parent; + end Unqualified_Unconditional_Parent; ------------------------------- -- Update_Primitives_Mapping -- diff --git a/gcc/ada/exp_util.ads b/gcc/ada/exp_util.ads index 4226fcc93777..b7d8a185f4bd 100644 --- a/gcc/ada/exp_util.ads +++ b/gcc/ada/exp_util.ads @@ -1344,6 +1344,10 @@ package Exp_Util is function Unconditional_Parent (N : Node_Id) return Node_Id; -- Return the first parent of arbitrary node N that is not a conditional + -- expression, one of whose dependent expressions is N, recursively. + + function Unqualified_Unconditional_Parent (N : Node_Id) return Node_Id; + -- Return the first parent of arbitrary node N that is not a conditional -- expression, one of whose dependent expressions is N, and that is not -- a qualified expression, whose expression is N, recursively. diff --git a/gcc/ada/fe.h b/gcc/ada/fe.h index 0b80a56cf195..5cc038a4e41a 100644 --- a/gcc/ada/fe.h +++ b/gcc/ada/fe.h @@ -315,6 +315,7 @@ extern Boolean Is_Null_Range (Node_Id, Node_Id); #define First_Actual sem_util__first_actual #define Has_Storage_Model_Type_Aspect sem_util__storage_model_support__has_storage_model_type_aspect #define Has_Designated_Storage_Model_Aspect sem_util__storage_model_support__has_designated_storage_model_aspect +#define Is_Extended_Access_Type sem_util__is_extended_access_type #define Is_Expression_Function sem_util__is_expression_function #define Is_Variable_Size_Record sem_util__is_variable_size_record #define Needs_Secondary_Stack sem_util__needs_secondary_stack @@ -327,6 +328,7 @@ extern Entity_Id Defining_Entity (Node_Id); extern Node_Id First_Actual (Node_Id); extern Boolean Has_Storage_Model_Type_Aspect (Entity_Id); extern Boolean Has_Designated_Storage_Model_Aspect (Entity_Id); +extern Boolean Is_Extended_Access_Type (Entity_Id); extern Boolean Is_Expression_Function (Entity_Id); extern Boolean Is_Variable_Size_Record (Entity_Id); extern Boolean Needs_Secondary_Stack (Entity_Id); diff --git a/gcc/ada/fmap.adb b/gcc/ada/fmap.adb index 4ca4f2330875..4f20231365dd 100644 --- a/gcc/ada/fmap.adb +++ b/gcc/ada/fmap.adb @@ -58,7 +58,7 @@ package body Fmap is package File_Mapping is new Table.Table ( Table_Component_Type => Mapping, Table_Index_Type => Int, - Table_Low_Bound => 0, + Table_Low_Bound => 1, Table_Initial => 1_000, Table_Increment => 1_000, Table_Name => "Fmap.File_Mapping"); @@ -67,7 +67,7 @@ package body Fmap is package Path_Mapping is new Table.Table ( Table_Component_Type => Mapping, Table_Index_Type => Int, - Table_Low_Bound => 0, + Table_Low_Bound => 1, Table_Initial => 1_000, Table_Increment => 1_000, Table_Name => "Fmap.Path_Mapping"); @@ -106,23 +106,6 @@ package body Fmap is Last_In_Table : Int := 0; - package Forbidden_Names is new GNAT.HTable.Simple_HTable ( - Header_Num => Header_Num, - Element => Boolean, - No_Element => False, - Key => File_Name_Type, - Hash => Hash, - Equal => "="); - - ----------------------------- - -- Add_Forbidden_File_Name -- - ----------------------------- - - procedure Add_Forbidden_File_Name (Name : File_Name_Type) is - begin - Forbidden_Names.Set (Name, True); - end Add_Forbidden_File_Name; - --------------------- -- Add_To_File_Map -- --------------------- @@ -138,19 +121,15 @@ package body Fmap is if Unit_Entry = No_Entry or else File_Mapping.Table (Unit_Entry).Fname /= File_Name then - File_Mapping.Increment_Last; + File_Mapping.Append ((Uname => Unit_Name, Fname => File_Name)); Unit_Hash_Table.Set (Unit_Name, File_Mapping.Last); - File_Mapping.Table (File_Mapping.Last) := - (Uname => Unit_Name, Fname => File_Name); end if; if File_Entry = No_Entry or else Path_Mapping.Table (File_Entry).Fname /= Path_Name then - Path_Mapping.Increment_Last; + Path_Mapping.Append ((Uname => Unit_Name, Fname => Path_Name)); File_Hash_Table.Set (File_Name, Path_Mapping.Last); - Path_Mapping.Table (Path_Mapping.Last) := - (Uname => Unit_Name, Fname => Path_Name); end if; end Add_To_File_Map; @@ -401,10 +380,6 @@ package body Fmap is Index : Int := No_Entry; begin - if Forbidden_Names.Get (File) then - return Error_File_Name; - end if; - Index := File_Hash_Table.Get (File); if Index = No_Entry then @@ -424,7 +399,6 @@ package body Fmap is Path_Mapping.Init; Unit_Hash_Table.Reset; File_Hash_Table.Reset; - Forbidden_Names.Reset; Last_In_Table := 0; end Reset_Tables; diff --git a/gcc/ada/fmap.ads b/gcc/ada/fmap.ads index 9fb77d8d5453..02f45882a037 100644 --- a/gcc/ada/fmap.ads +++ b/gcc/ada/fmap.ads @@ -70,9 +70,4 @@ package Fmap is procedure Reset_Tables; -- Initialize all the internal data structures - procedure Add_Forbidden_File_Name (Name : File_Name_Type); - -- Indicate that a source file name is forbidden. This is used when there - -- are excluded sources in projects (attributes Excluded_Source_Files or - -- Locally_Removed_Files). - end Fmap; diff --git a/gcc/ada/freeze.adb b/gcc/ada/freeze.adb index 2ebffff7a5fa..346789ff7573 100644 --- a/gcc/ada/freeze.adb +++ b/gcc/ada/freeze.adb @@ -4245,7 +4245,7 @@ package body Freeze is <> -- A Ghost type cannot have a component of protected or task type - -- (SPARK RM 6.9(21)). + -- (SPARK RM 6.9(22)). if Is_Ghost_Entity (Arr) and then Is_Concurrent_Type (Ctyp) then Error_Msg_N @@ -4685,7 +4685,9 @@ package body Freeze is -- Declaring too big an array in disabled ghost code is OK - if Is_Array_Type (Typ) and then not Is_Ignored_Ghost_Entity (E) then + if Is_Array_Type (Typ) + and then not Is_Ignored_Ghost_Entity_In_Codegen (E) + then Check_Large_Modular_Array (Typ); end if; end Freeze_Object_Declaration; @@ -5180,7 +5182,7 @@ package body Freeze is and then Convention (Desig) /= Convention_Protected then Set_Is_Frozen (Desig); - Create_Extra_Formals (Desig); + Create_Extra_Formals (Desig, Related_Nod => Rec); end if; end Check_Itype; @@ -6788,6 +6790,27 @@ package body Freeze is Set_Is_Frozen (E); + -- Freeze profile of anonymous access-to-subprogram type + + if Do_Freeze_Profile + and then Ekind (E) = E_Anonymous_Access_Subprogram_Type + then + declare + Skip_Because_In_Generic : constant Boolean := + In_Generic_Scope (E) or else + (Is_Itype (E) + and then Nkind (Parent (Associated_Node_For_Itype (E))) + = N_Generic_Subprogram_Declaration); + begin + if not Skip_Because_In_Generic then + if not Freeze_Profile (Designated_Type (E)) then + goto Leave; + end if; + Freeze_Subprogram (Designated_Type (E)); + end if; + end; + end if; + -- Case of entity being frozen is other than a type if not Is_Type (E) then @@ -7149,31 +7172,30 @@ package body Freeze is Next_Index (Indx); end loop; - -- What we are looking for here is the situation where - -- the RM_Size given would be exactly right if there was - -- a pragma Pack, resulting in the component size being - -- the RM_Size of the component type. + -- In Implicit_Packing mode, if the specified RM_Size + -- would be big enough if there were a pragma Pack, + -- then set the component size as if there were Pack, + -- and Freeze_Array_Type will do the rest. - if RM_Size (E) = Num_Elmts * Rsiz then - - -- For implicit packing mode, just set the component - -- size and Freeze_Array_Type will do the rest. - - if Implicit_Packing then - Set_Component_Size (Btyp, Rsiz); + if Implicit_Packing + and then RM_Size (E) >= Num_Elmts * Rsiz + then + Set_Component_Size (Btyp, Rsiz); - -- Otherwise give an error message, except that if the - -- specified Size is zero, there is no need for pragma - -- Pack. Note that size zero is not considered - -- Addressable. + -- Otherwise, if pragma Pack would result in exactly the + -- right size, give an error message suggesting packing, + -- except that if the specified Size is zero, there is no + -- need for pragma Pack. Note that size zero is not + -- considered Addressable. - elsif RM_Size (E) /= Uint_0 then - Error_Msg_NE - ("size given for& too small", SZ, E); - Error_Msg_N -- CODEFIX - ("\use explicit pragma Pack or use pragma " - & "Implicit_Packing", SZ); - end if; + elsif RM_Size (E) = Num_Elmts * Rsiz + and then RM_Size (E) /= Uint_0 + then + Error_Msg_NE + ("size given for& too small", SZ, E); + Error_Msg_N -- CODEFIX + ("\use explicit pragma Pack or use pragma " + & "Implicit_Packing", SZ); end if; end if; end; @@ -7749,7 +7771,14 @@ package body Freeze is -- Check restriction for standard storage pool - if No (Associated_Storage_Pool (E)) then + -- Skip this check when Etype (T) is unknown, since attribute + -- Associated_Storage_Pool is only available in the root type + -- of E, and in such case it cannot not be computed (thus + -- causing spurious errors). + + if Present (Etype (E)) + and then No (Associated_Storage_Pool (E)) + then Check_Restriction (No_Standard_Storage_Pools, E); end if; @@ -8786,7 +8815,7 @@ package body Freeze is and then Nkind (Parent (N)) = N_Function_Call and then not Has_Foreign_Convention (Nam) then - Create_Extra_Formals (Nam); + Create_Extra_Formals (Nam, Related_Nod => N); end if; when others => @@ -11024,7 +11053,10 @@ package body Freeze is E : Entity_Id; N : Node_Id) return Boolean is - Decl : constant Node_Id := Original_Node (Unit_Declaration_Node (E)); + Decl : constant Node_Id := + (if Ekind (E) = E_Subprogram_Type and then No (Parent (E)) + then Empty + else Original_Node (Unit_Declaration_Node (E))); function Is_Dispatching_Call_Or_Tagged_Result_Or_Aggregate (N : Node_Id) return Traverse_Result; diff --git a/gcc/ada/frontend.adb b/gcc/ada/frontend.adb index 92bc3c6029ce..bb700a9a422c 100644 --- a/gcc/ada/frontend.adb +++ b/gcc/ada/frontend.adb @@ -56,6 +56,7 @@ with Scn; use Scn; with Sem; use Sem; with Sem_Aux; with Sem_Ch8; +with Sem_Ch12; with Sem_SCIL; with Sem_Elab; use Sem_Elab; with Sem_Prag; use Sem_Prag; @@ -432,6 +433,18 @@ begin Analyze_Inlined_Bodies; end if; + -- Mark the structural instances spawned by the main unit as + -- Link Once because other units may spawn them too. + + Sem_Ch12.Mark_Link_Once + (Declarations (Aux_Decls_Node (Cunit (Main_Unit)))); + + if Nkind (Unit (Cunit (Main_Unit))) = N_Package_Body then + Sem_Ch12.Mark_Link_Once + (Declarations + (Aux_Decls_Node (Spec_Lib_Unit (Cunit (Main_Unit))))); + end if; + -- Remove entities from program that do not have any execution -- time references. diff --git a/gcc/ada/gcc-interface/Make-lang.in b/gcc/ada/gcc-interface/Make-lang.in index bbbd697eb6f4..e768ef60ddf7 100644 --- a/gcc/ada/gcc-interface/Make-lang.in +++ b/gcc/ada/gcc-interface/Make-lang.in @@ -532,7 +532,6 @@ GNAT_ADA_OBJS+= \ ada/libgnat/s-carun8.o \ ada/libgnat/s-casuti.o \ ada/libgnat/s-cautns.o \ - ada/libgnat/s-crtl.o \ ada/libgnat/s-conca2.o \ ada/libgnat/s-conca3.o \ ada/libgnat/s-conca4.o \ @@ -542,6 +541,7 @@ GNAT_ADA_OBJS+= \ ada/libgnat/s-conca8.o \ ada/libgnat/s-conca9.o \ ada/libgnat/s-crc32.o \ + ada/libgnat/s-crtl.o \ ada/libgnat/s-excdeb.o \ ada/libgnat/s-except.o \ ada/libgnat/s-excmac.o \ @@ -690,7 +690,7 @@ GNATBIND_OBJS += \ ada/libgnat/g-cstyin.o \ ada/libgnat/g-hesora.o \ ada/libgnat/g-htable.o \ - ada/libgnat/i-c.o \ + ada/libgnat/i-c.o \ ada/libgnat/i-cstrin.o \ ada/libgnat/interfac.o \ ada/libgnat/s-addope.o \ @@ -707,6 +707,7 @@ GNATBIND_OBJS += \ ada/libgnat/s-conca8.o \ ada/libgnat/s-conca9.o \ ada/libgnat/s-crc32.o \ + ada/libgnat/s-crtl.o \ ada/libgnat/s-excdeb.o \ ada/libgnat/s-except.o \ ada/libgnat/s-excmac.o \ diff --git a/gcc/ada/gcc-interface/ada-tree.h b/gcc/ada/gcc-interface/ada-tree.h index 205136bc8ef2..3e41667d19e4 100644 --- a/gcc/ada/gcc-interface/ada-tree.h +++ b/gcc/ada/gcc-interface/ada-tree.h @@ -73,6 +73,14 @@ do { \ #define TYPE_IS_FAT_POINTER_P(NODE) \ (TREE_CODE (NODE) == RECORD_TYPE && TYPE_FAT_POINTER_P (NODE)) +/* For RECORD_TYPE, UNION_TYPE, and QUAL_UNION_TYPE, nonzero if this is a + record being used as an extended access (only true for RECORD_TYPE). */ +#define TYPE_EXTENDED_POINTER_P(NODE) \ + TYPE_LANG_FLAG_7 (RECORD_OR_UNION_CHECK (NODE)) + +#define TYPE_IS_EXTENDED_POINTER_P(NODE) \ + (TREE_CODE (NODE) == RECORD_TYPE && TYPE_EXTENDED_POINTER_P (NODE)) + /* For integral types and array types, nonzero if this is an implementation type for a bit-packed array type. Such types should not be extended to a larger size or validated against a specified size. */ @@ -184,9 +192,6 @@ do { \ /* True for a dummy type if TYPE appears in a profile. */ #define TYPE_DUMMY_IN_PROFILE_P(NODE) TYPE_LANG_FLAG_6 (NODE) -/* True if objects of this type are guaranteed to be properly aligned. */ -#define TYPE_ALIGN_OK(NODE) TYPE_LANG_FLAG_7 (NODE) - /* True for types that implement a packed array and for original packed array types. */ #define TYPE_IMPL_PACKED_ARRAY_P(NODE) \ @@ -387,6 +392,25 @@ do { \ #define SET_TYPE_SCALE_FACTOR(NODE, X) \ SET_TYPE_LANG_SPECIFIC (INTEGER_TYPE_CHECK (NODE), X) +/* For an UNCONSTRAINED_ARRAY_TYPE, this is the twin UNCONSTRAINED_ARRAY_TYPE + built for extended access types. */ +#define TYPE_EXTENDED_UNCONSTRAINED_ARRAY(NODE) \ + GET_TYPE_LANG_SPECIFIC (TREE_CHECK2 ((NODE), UNCONSTRAINED_ARRAY_TYPE, \ + ENUMERAL_TYPE)) +#define SET_TYPE_EXTENDED_UNCONSTRAINED_ARRAY(NODE, X) \ + SET_TYPE_LANG_SPECIFIC (TREE_CHECK2 ((NODE), UNCONSTRAINED_ARRAY_TYPE, \ + ENUMERAL_TYPE), X) + +/* When the compiler only has a dummy type for an unconstrained array type, we + don't build a duplicate dummy only to store the record type for the extended + access. Instead, we store it in the original dummy type, using the same + lang_type field that will hold the tree for the duplicated array type built + later. */ +#define TYPE_DUMMY_EXT_POINTER_TO(NODE) \ + GET_TYPE_LANG_SPECIFIC (TREE_CHECK ((NODE), ENUMERAL_TYPE)) +#define SET_TYPE_DUMMY_EXT_POINTER_TO(NODE, X) \ + SET_TYPE_LANG_SPECIFIC (TREE_CHECK ((NODE), ENUMERAL_TYPE), X) + /* For types with TYPE_CAN_HAVE_DEBUG_TYPE_P, this is the type to use in debugging information. */ #define TYPE_DEBUG_TYPE(NODE) \ diff --git a/gcc/ada/gcc-interface/decl.cc b/gcc/ada/gcc-interface/decl.cc index 86cbf5ba4fb5..7ebd43211953 100644 --- a/gcc/ada/gcc-interface/decl.cc +++ b/gcc/ada/gcc-interface/decl.cc @@ -201,6 +201,7 @@ static tree gnat_to_gnu_component_type (Entity_Id, bool, bool); static tree gnat_to_gnu_subprog_type (Entity_Id, bool, bool, tree *); static int adjust_packed (tree, tree, int); static tree gnat_to_gnu_field (Entity_Id, tree, int, bool, bool); +static tree get_extended_unconstrained_array (Entity_Id, tree); static enum inline_status_t inline_status_for_subprog (Entity_Id); static Entity_Id Gigi_Cloned_Subtype (Entity_Id); static tree gnu_ext_name_for_subprog (Entity_Id, tree); @@ -279,6 +280,13 @@ is_artificial (Entity_Id gnat_entity) initial value (in GCC tree form). This is optional for a variable. For a renamed entity, GNU_EXPR gives the object being renamed. + If GNAT_ENTITY is an array type and GNU_EXPR is NULL_TREE, a GCC tree for a + regular fat pointer will be generated. However, if GNU_EXPR is not + NULL_TREE, it's an existing GCC tree for the fat pointer, and a GCC tree for + the extended pointer will be created instead. The caller must clear the + association between GNAT_ENTITY and GNU_EXPR before calling + gnat_to_gnu_entity with a non-NULL GNU_EXPR and restore it after the call. + DEFINITION is true if this call is intended for a definition. This is used for separate compilation where it is necessary to know whether an external declaration or a definition must be created if the GCC equivalent was not @@ -441,7 +449,8 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, bool definition) must be specified unless it was specified by the programmer. Exceptions are for access-to-protected-subprogram types and all access subtypes, as another GNAT type is used to lay out the GCC type for them, as well as - access-to-subprogram types if front-end unnesting is enabled. */ + access-to-subprogram types if front-end unnesting is enabled, and also + extended access types. */ gcc_assert (!is_type || Known_Esize (gnat_entity) || Has_Size_Clause (gnat_entity) @@ -454,6 +463,7 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, bool definition) || kind == E_Anonymous_Access_Subprogram_Type) && Unnest_Subprogram_Mode) || kind == E_Access_Subtype + || Is_Extended_Access_Type (gnat_entity) || type_annotate_only))); /* The RM size must be specified for all discrete and fixed-point types. */ @@ -638,7 +648,9 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, bool definition) /* Build a CONST_DECL for debugging purposes exclusively. */ gnu_decl = create_var_decl (gnu_entity_name, gnu_ext_name, gnu_type, - gnu_expr, true, Is_Public (gnat_entity), + gnu_expr, true, + Is_Public (gnat_entity), + Is_Link_Once (gnat_entity), false, false, false, artificial_p, debug_info_p, NULL, gnat_entity); } @@ -1186,6 +1198,7 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, bool definition) create_var_decl (gnu_entity_name, NULL_TREE, TREE_TYPE (gnu_expr), gnu_expr, const_flag, Is_Public (gnat_entity), + Is_Link_Once (gnat_entity), imported_p, static_flag, volatile_flag, artificial_p, debug_info_p, attr_list, gnat_entity, false); @@ -1254,7 +1267,9 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, bool definition) initialize it to NULL, unless the object is declared imported as per RM B.1(24). */ if (definition - && (POINTER_TYPE_P (gnu_type) || TYPE_IS_FAT_POINTER_P (gnu_type)) + && (POINTER_TYPE_P (gnu_type) + || TYPE_IS_FAT_POINTER_P (gnu_type) + || TYPE_IS_EXTENDED_POINTER_P (gnu_type)) && !gnu_expr && !Is_Imported (gnat_entity)) gnu_expr = null_pointer_node; @@ -1388,16 +1403,15 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, bool definition) } } - /* If we are at top level and this object is of variable size, - make the actual type a hidden pointer to the real type and - make the initializer be a memory allocation and initialization. - Likewise for objects we aren't defining (presumed to be - external references from other packages), but there we do - not set up an initialization. - - If the object's size overflows, make an allocator too, so that - Storage_Error gets raised. Note that we will never free - such memory, so we presume it never will get allocated. */ + /* If we are at top level and this object is of variable size, make + the actual type a reference to the real type and the initializer + be a memory allocation and initialization. Likewise for an object + that we aren't defining or is imported (presumed to be an external + reference from another package), but in this case we do not set up + an initialization. Likewise if the object's size is constant but + too large. In either case, this will also cause Storage_Error to + be raised if the size ends up overflowing. Note that we will never + free such memory, but it will be allocated only at top level. */ if (!allocatable_size_p (TYPE_SIZE_UNIT (gnu_type), global_bindings_p () || !definition @@ -1411,6 +1425,29 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, bool definition) || !definition || static_flag))) { + /* Give a warning if the size is constant. */ + if ((TREE_CODE (TYPE_SIZE_UNIT (gnu_type)) == INTEGER_CST + || (gnu_size && TREE_CODE (gnu_size) == INTEGER_CST)) + && definition) + { + if (imported_p) + { + post_error + ("??too large object cannot be imported directly", + gnat_entity); + post_error ("\\??indirect import will be used instead", + gnat_entity); + } + else if (global_bindings_p () || static_flag) + { + post_error + ("??too large object cannot be allocated statically", + gnat_entity); + post_error ("\\??dynamic allocation will be used instead", + gnat_entity); + } + } + if (volatile_flag && !TYPE_VOLATILE (gnu_type)) gnu_type = change_qualified_type (gnu_type, TYPE_QUAL_VOLATILE); gnu_type = build_reference_type (gnu_type); @@ -1453,21 +1490,10 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, bool definition) } /* Give a warning if the size is constant but too large. */ - if (TREE_CODE (TYPE_SIZE_UNIT (gnu_alloc_type)) == INTEGER_CST) - { - if (valid_constant_size_p (TYPE_SIZE_UNIT (gnu_alloc_type))) - { - post_error - ("??too large object cannot be allocated statically", - gnat_entity); - post_error ("\\??dynamic allocation will be used instead", - gnat_entity); - } - - else - post_error ("??Storage_Error will be raised at run time!", - gnat_entity); - } + if (TREE_CODE (TYPE_SIZE_UNIT (gnu_alloc_type)) == INTEGER_CST + && !valid_constant_size_p (TYPE_SIZE_UNIT (gnu_alloc_type))) + post_error ("??Storage_Error will be raised at run time!", + gnat_entity); gnu_expr = build_allocator (gnu_alloc_type, gnu_expr, gnu_type, @@ -1495,7 +1521,7 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, bool definition) tree gnu_new_var = create_var_decl (create_concat_name (gnat_entity, "ALIGN"), NULL_TREE, gnu_new_type, NULL_TREE, - false, false, false, false, false, + false, false, false, false, false, false, true, debug_info_p && definition, NULL, gnat_entity); @@ -1557,8 +1583,9 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, bool definition) = create_var_decl (concat_name (gnu_entity_name, "UNC"), NULL_TREE, gnu_type, gnu_expr, const_flag, Is_Public (gnat_entity), - imported_p || !definition, static_flag, - volatile_flag, true, + Is_Link_Once (gnat_entity), + imported_p || !definition, + static_flag, volatile_flag, true, debug_info_p && definition, NULL, gnat_entity); gnu_expr = build_unary_op (ADDR_EXPR, NULL_TREE, gnu_unc_var); @@ -1604,8 +1631,9 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, bool definition) gnu_decl = create_var_decl (gnu_entity_name, gnu_ext_name, gnu_type, gnu_expr, const_flag, Is_Public (gnat_entity), - imported_p || !definition, static_flag, - volatile_flag, artificial_p, + Is_Link_Once (gnat_entity), + imported_p || !definition, + static_flag, volatile_flag, artificial_p, debug_info_p && definition, attr_list, gnat_entity); DECL_BY_REF_P (gnu_decl) = used_by_ref; @@ -1652,6 +1680,7 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, bool definition) tree gnu_corr_var = create_var_decl (gnu_entity_name, gnu_ext_name, gnu_type, gnu_expr, true, Is_Public (gnat_entity), + Is_Link_Once (gnat_entity), !definition, static_flag, volatile_flag, artificial_p, debug_info_p && definition, attr_list, gnat_entity, false); @@ -1757,7 +1786,7 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, bool definition) tree gnu_literal = create_var_decl (get_entity_name (gnat_literal), NULL_TREE, gnu_type, gnu_value, true, false, false, - false, false, artificial_p, false, + false, false, false, artificial_p, false, NULL, gnat_literal); save_gnu_tree (gnat_literal, gnu_literal, false); gnu_list @@ -2154,21 +2183,28 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, bool definition) have are pointers to that type. In addition to the type node itself, 4 other types associated with it are built in the process: - 1. the array type (suffix XUA) containing the actual data, + 1. the array type (suffix XUA for fat pointer, XUAEA for extended + access) containing the actual data, - 2. the template type (suffix XUB) containing the bounds, + 2. the template type (suffix XUB for fat pointer, XUBEA for extended + access) containing the bounds, 3. the fat pointer type (suffix XUP) representing a pointer or a reference to the unconstrained array type: XUP = struct { XUA *, XUB * } - 4. the object record type (suffix XUT) containing bounds and data: - XUT = struct { XUB, XUA } + or the extended access type (suffix XUPEA) representing a pointer + or a reference to the unconstrained array type: + XUPEA = struct { XUAEA *, XUBEA } + + 4. the object record type (suffix XUT for fat pointer, XUTEA for + extended access) containing bounds and data: + XUT[EA] = struct { XUB[EA], XUA[EA] } The bounds of the array type XUA (de)reference the XUB * field of a PLACEHOLDER_EXPR for the fat pointer type XUP, so the array type XUA is to be interpreted in the context of the fat pointer type XUB for - debug info purposes. */ + debug info purposes. Likewise for the extended access case. */ case E_Array_Type: { @@ -2176,14 +2212,13 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, bool definition) const Entity_Id PAT = Packed_Array_Impl_Type (gnat_entity); const bool convention_fortran_p = (Convention (gnat_entity) == Convention_Fortran); + const bool extended_access_p = gnu_expr != NULL_TREE; const int ndim = Number_Dimensions (gnat_entity); tree gnu_fat_type, gnu_template_type, gnu_ptr_template; - tree gnu_template_reference, gnu_template_fields; + tree gnu_template_reference; tree *gnu_index_types = XALLOCAVEC (tree, ndim); - tree *gnu_temp_fields = XALLOCAVEC (tree, ndim); tree gnu_max_size = size_one_node; tree comp_type, fld, tem, obj; - Entity_Id gnat_index; alias_set_type ptr_set = -1; int index; @@ -2203,7 +2238,7 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, bool definition) better debugging information in DWARF by leveraging the support for incomplete declarations of "tagged" types in the DWARF back-end. */ gnu_type = get_dummy_type (gnat_entity); - if (gnu_type && TYPE_POINTER_TO (gnu_type)) + if (gnu_type && TYPE_POINTER_TO (gnu_type) && !extended_access_p) { gnu_fat_type = TYPE_MAIN_VARIANT (TYPE_POINTER_TO (gnu_type)); TYPE_NAME (gnu_fat_type) = NULL_TREE; @@ -2218,10 +2253,42 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, bool definition) DECL_CHAIN (TYPE_FIELDS (TYPE_POINTER_TO (gnu_type))) = copy_node (DECL_CHAIN (TYPE_FIELDS (gnu_fat_type))); } + + /* We complete an existing dummy for extended access, but we haven't + created a specific tree yet for the array type. The extended access + type is stored directly in the original unconstrained array type, + where we will store the new array type later. */ + else if (gnu_type + && TYPE_DUMMY_EXT_POINTER_TO (gnu_type) + && extended_access_p) + { + gnu_ptr_template = NULL_TREE; + tree gnu_ext_acc_type = TYPE_DUMMY_EXT_POINTER_TO (gnu_type); + gnu_fat_type = TYPE_MAIN_VARIANT (gnu_ext_acc_type); + TYPE_NAME (gnu_fat_type) = NULL_TREE; + + /* The dummy types has a XUBEA that was only used to get the size of + the extended pointer. We now drop this type and use the XUB type + from the regular fat pointer instead. */ + gnu_template_type + = TREE_TYPE (TREE_TYPE (DECL_CHAIN (TYPE_FIELDS (TREE_TYPE (gnu_expr))))); + + DECL_CHAIN (TYPE_FIELDS (gnu_fat_type)) + = create_field_decl (get_identifier ("BOUNDS"), + gnu_template_type, gnu_fat_type, + NULL_TREE, NULL_TREE, 0, 1); + } + else { gnu_fat_type = make_node (RECORD_TYPE); - gnu_template_type = make_node (RECORD_TYPE); + + if (extended_access_p) + gnu_template_type + = TREE_TYPE (TREE_TYPE (DECL_CHAIN (TYPE_FIELDS (TREE_TYPE (gnu_expr))))); + else + gnu_template_type = make_node (RECORD_TYPE); + gnu_ptr_template = build_pointer_type (gnu_template_type); } @@ -2253,7 +2320,7 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, bool definition) Var are also built later with the fields of the final type, the aliasing machinery may consider that the accesses are distinct if the FIELD_DECLs are distinct as objects. */ - if (COMPLETE_TYPE_P (gnu_fat_type)) + if (COMPLETE_TYPE_P (gnu_fat_type) && !extended_access_p) { fld = TYPE_FIELDS (gnu_fat_type); if (TYPE_ALIAS_SET_KNOWN_P (TYPE_CANONICAL (TREE_TYPE (fld)))) @@ -2264,6 +2331,39 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, bool definition) for (tree t = gnu_fat_type; t; t = TYPE_NEXT_VARIANT (t)) SET_TYPE_UNCONSTRAINED_ARRAY (t, gnu_type); } + + else if (COMPLETE_TYPE_P (gnu_fat_type) && extended_access_p) + { + fld = TYPE_FIELDS (gnu_fat_type); + if (TYPE_ALIAS_SET_KNOWN_P (TYPE_CANONICAL (TREE_TYPE (fld)))) + ptr_set = TYPE_ALIAS_SET (TYPE_CANONICAL (TREE_TYPE (fld))); + TREE_TYPE (fld) = ptr_type_node; + /* For extended access, we leave the BOUNDS field alone. */ + TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (gnu_fat_type)) = 0; + for (tree t = gnu_fat_type; t; t = TYPE_NEXT_VARIANT (t)) + SET_TYPE_UNCONSTRAINED_ARRAY (t, gnu_type); + } + + else if (extended_access_p) + { + /* We make the fields addressable for the sake of compatibility + with languages for which the regular fields are addressable. */ + fld + = create_field_decl (get_identifier ("P_ARRAY"), + ptr_type_node, gnu_fat_type, + NULL_TREE, NULL_TREE, 0, 1); + /* At this step, gnu_template_type is an empty RECORD to be + be populated later. */ + DECL_CHAIN (fld) + = create_field_decl (get_identifier ("BOUNDS"), + gnu_template_type, gnu_fat_type, + NULL_TREE, NULL_TREE, 0, 1); + /* Too early to finish the record, but set the fields so that + they are available through the type. */ + TYPE_FIELDS (gnu_fat_type) = fld; + SET_TYPE_UNCONSTRAINED_ARRAY (gnu_fat_type, gnu_type); + } + else { /* We make the fields addressable for the sake of compatibility @@ -2291,135 +2391,56 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, bool definition) : gnat_entity; tree xup_name = gnat_encodings == DWARF_GNAT_ENCODINGS_ALL - ? create_concat_name (gnat_name, "XUP") + ? create_concat_name (gnat_name, + extended_access_p ? "XUPEA" : "XUP") : gnu_entity_name; create_type_decl (xup_name, gnu_fat_type, true, debug_info_p, gnat_entity, false); /* Build a reference to the template from a PLACEHOLDER_EXPR that - is the fat pointer. This will be used to access the individual - fields once we build them. */ - tem = build3 (COMPONENT_REF, gnu_ptr_template, - build0 (PLACEHOLDER_EXPR, gnu_fat_type), - DECL_CHAIN (fld), NULL_TREE); - gnu_template_reference - = build_unary_op (INDIRECT_REF, gnu_template_type, tem); - TREE_READONLY (gnu_template_reference) = 1; - TREE_THIS_NOTRAP (gnu_template_reference) = 1; - - /* Now create the GCC type for each index and add the fields for that - index to the template. */ - for (index = (convention_fortran_p ? ndim - 1 : 0), - gnat_index = First_Index (gnat_entity); - IN_RANGE (index, 0, ndim - 1); - index += (convention_fortran_p ? - 1 : 1), - gnat_index = Next_Index (gnat_index)) + is the extended/fat pointer. This will be used to access the + individual fields once we build them. */ + if (extended_access_p) { - const Entity_Id gnat_index_type = Etype (gnat_index); - const bool is_flb - = Is_Fixed_Lower_Bound_Index_Subtype (gnat_index_type); - tree gnu_index_type = get_unpadded_type (gnat_index_type); - tree gnu_orig_min = TYPE_MIN_VALUE (gnu_index_type); - tree gnu_orig_max = TYPE_MAX_VALUE (gnu_index_type); - tree gnu_index_base_type = get_base_type (gnu_index_type); - tree gnu_lb_field, gnu_hb_field; - tree gnu_min, gnu_max, gnu_high; - char field_name[16]; - - /* Update the maximum size of the array in elements. */ - if (gnu_max_size) - gnu_max_size - = update_n_elem (gnu_max_size, gnu_orig_min, gnu_orig_max); - - /* Now build the self-referential bounds of the index type. */ - gnu_index_type = maybe_character_type (gnu_index_type); - gnu_index_base_type = maybe_character_type (gnu_index_base_type); - - /* Make the FIELD_DECLs for the low and high bounds of this - type and then make extractions of these fields from the - template. */ - sprintf (field_name, "LB%d", index); - gnu_lb_field = create_field_decl (get_identifier (field_name), - gnu_index_type, - gnu_template_type, NULL_TREE, - NULL_TREE, 0, 0); - /* Mark the field specifically for INSTANTIATE_LOAD_IN_EXPR. */ - DECL_DISCRIMINANT_NUMBER (gnu_lb_field) = integer_minus_one_node; - Sloc_to_locus (Sloc (gnat_entity), - &DECL_SOURCE_LOCATION (gnu_lb_field)); - - field_name[0] = 'U'; - gnu_hb_field = create_field_decl (get_identifier (field_name), - gnu_index_type, - gnu_template_type, NULL_TREE, - NULL_TREE, 0, 0); - /* Mark the field specifically for INSTANTIATE_LOAD_IN_EXPR. */ - DECL_DISCRIMINANT_NUMBER (gnu_hb_field) = integer_minus_one_node; - Sloc_to_locus (Sloc (gnat_entity), - &DECL_SOURCE_LOCATION (gnu_hb_field)); - - gnu_temp_fields[index] = chainon (gnu_lb_field, gnu_hb_field); - - /* We can't use build_component_ref here since the template type - isn't complete yet. */ - if (!is_flb) - { - gnu_orig_min = build3 (COMPONENT_REF, TREE_TYPE (gnu_lb_field), - gnu_template_reference, gnu_lb_field, - NULL_TREE); - TREE_READONLY (gnu_orig_min) = 1; - } + /* Extended pointers reference the template directly through the + BOUNDS field, which is the second field. */ + gnu_template_reference + = build3 (COMPONENT_REF, gnu_template_type, + build0 (PLACEHOLDER_EXPR, gnu_fat_type), + DECL_CHAIN (fld), NULL_TREE); + TREE_READONLY (gnu_template_reference) = 1; + } + else + { + /* Fat pointers reference the template indirectly through the + P_BOUNDS field, which is the second field. */ + tem = build3 (COMPONENT_REF, gnu_ptr_template, + build0 (PLACEHOLDER_EXPR, gnu_fat_type), + DECL_CHAIN (fld), NULL_TREE); + gnu_template_reference + = build_unary_op (INDIRECT_REF, gnu_template_type, tem); + TREE_READONLY (gnu_template_reference) = 1; + TREE_THIS_NOTRAP (gnu_template_reference) = 1; + } - gnu_orig_max = build3 (COMPONENT_REF, TREE_TYPE (gnu_hb_field), - gnu_template_reference, gnu_hb_field, - NULL_TREE); - TREE_READONLY (gnu_orig_max) = 1; + if (!extended_access_p) + { + /* Build the template type. */ + TYPE_NAME (gnu_template_type) + = create_concat_name (gnat_entity, "XUB"); + } - gnu_min = convert (sizetype, gnu_orig_min); - gnu_max = convert (sizetype, gnu_orig_max); + build_template_type (gnat_entity, gnu_template_type, + gnu_template_reference, gnu_index_types, + gnu_max_size, debug_info_p); - /* Compute the size of this dimension. See the E_Array_Subtype - case below for the rationale. */ - if (is_flb - && Nkind (gnat_index) == N_Subtype_Indication - && flb_cannot_be_superflat (gnat_index)) - gnu_high = gnu_max; + if (!extended_access_p) + TYPE_CONTEXT (gnu_template_type) = gnu_fat_type; - else - gnu_high - = build3 (COND_EXPR, sizetype, - build2 (GE_EXPR, boolean_type_node, - gnu_orig_max, gnu_orig_min), - gnu_max, - TREE_CODE (gnu_min) == INTEGER_CST - ? int_const_binop (MINUS_EXPR, gnu_min, size_one_node) - : size_binop (MINUS_EXPR, gnu_min, size_one_node)); - - /* Make a range type with the new range in the Ada base type. - Then make an index type with the size range in sizetype. */ - gnu_index_types[index] - = create_index_type (gnu_min, gnu_high, - create_range_type (gnu_index_base_type, - gnu_orig_min, - gnu_orig_max), - gnat_entity); - - TYPE_NAME (gnu_index_types[index]) - = create_concat_name (gnat_entity, field_name); - } - - /* Install all the fields into the template. */ - TYPE_NAME (gnu_template_type) - = create_concat_name (gnat_entity, "XUB"); - TYPE_NAMELESS (gnu_template_type) - = gnat_encodings != DWARF_GNAT_ENCODINGS_ALL; - gnu_template_fields = NULL_TREE; - for (index = 0; index < ndim; index++) - gnu_template_fields - = chainon (gnu_template_fields, gnu_temp_fields[index]); - finish_record_type (gnu_template_type, gnu_template_fields, 0, - debug_info_p); - TYPE_CONTEXT (gnu_template_type) = gnu_fat_type; + /* Now that the template type has been created, the record type for + extended access can be finished. */ + if (extended_access_p) + finish_extended_pointer_type (gnu_fat_type, fld); /* If Component_Size is not already specified, annotate it with the size of the component. */ @@ -2499,9 +2520,11 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, bool definition) TYPE_ARRAY_MAX_SIZE (tem) = gnu_max_size; /* See the above description for the rationale. */ + tree xua_name + = create_concat_name (gnat_entity, + extended_access_p ? "XUAEA" : "XUA"); tree gnu_tmp_decl - = create_type_decl (create_concat_name (gnat_entity, "XUA"), tem, - true, debug_info_p, gnat_entity); + = create_type_decl (xua_name, tem, true, debug_info_p, gnat_entity); TYPE_CONTEXT (tem) = gnu_fat_type; TYPE_CONTEXT (TYPE_POINTER_TO (tem)) = gnu_fat_type; @@ -2513,7 +2536,8 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, bool definition) If the GNAT encodings are used, give it a name. */ tree xut_name = (gnat_encodings == DWARF_GNAT_ENCODINGS_ALL) - ? create_concat_name (gnat_name, "XUT") + ? create_concat_name (gnat_name, + extended_access_p ? "XUTEA" : "XUT") : gnu_entity_name; obj = build_unc_object_type (gnu_template_type, tem, xut_name, artificial_p, debug_info_p); @@ -2531,7 +2555,7 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, bool definition) /* If this is a packed type implemented specially, then process the implementation type so it is elaborated in the proper scope. */ - if (Present (PAT)) + if (Present (PAT) && !extended_access_p) { /* Save the XUA type as our equivalent temporarily for the call to gnat_to_gnu_type on the OAT below. */ @@ -3731,7 +3755,7 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, bool definition) = create_var_decl (create_concat_name (gnat_entity, "XVZ"), NULL_TREE, sizetype, gnu_size_unit, - true, false, false, false, false, + true, false, false, false, false, false, true, true, NULL, gnat_entity, false); } @@ -3940,7 +3964,9 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, bool definition) } /* Access-to-unconstrained-array types need a special treatment. */ - if (Is_Array_Type (gnat_desig_rep) && !Is_Constrained (gnat_desig_rep)) + if (Is_Array_Type (gnat_desig_rep) + && !Is_Constrained (gnat_desig_rep) + && !Is_Extended_Access_Type (gnat_entity)) { /* If the processing above got something that has a pointer, then we are done. This could have happened either because the type @@ -3951,6 +3977,26 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, bool definition) gnu_type = TYPE_POINTER_TO (gnu_desig_type); } + else if (Is_Array_Type (gnat_desig_rep) + && !Is_Constrained (gnat_desig_rep) + && Is_Extended_Access_Type (gnat_entity)) + { + if (TYPE_IS_DUMMY_P (gnu_desig_type)) + gnu_type + = build_dummy_unc_pointer_types_ext (gnat_desig_rep, + gnu_desig_type); + else + { + tree gnu_extended_type + = get_extended_unconstrained_array (gnat_desig_rep, + gnu_desig_type); + + /* We should not get a dummy type. */ + gnu_type = TYPE_POINTER_TO (gnu_extended_type); + gcc_assert (gnu_type); + } + } + /* If we haven't done it yet, build the pointer type the usual way. */ else if (!gnu_type) { @@ -4255,8 +4301,9 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, bool definition) gnu_decl = create_var_decl (gnu_entity_name, gnu_ext_name, gnu_type, gnu_address, false, Is_Public (gnat_entity), - extern_flag, false, false, artificial_p, - debug_info_p, NULL, gnat_entity); + Is_Link_Once (gnat_entity), extern_flag, + false, false, artificial_p, debug_info_p, + NULL, gnat_entity); DECL_BY_REF_P (gnu_decl) = 1; } @@ -4285,6 +4332,7 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, bool definition) = create_subprog_decl (gnu_entity_name, gnu_ext_name, gnu_type, gnu_param_list, inline_status, Is_Public (gnat_entity) || imported_p, + Is_Link_Once (gnat_entity), extern_flag, artificial_p, debug_info_p, definition && imported_p, attr_list, gnat_entity); @@ -4549,7 +4597,8 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, bool definition) if (gnu_size) size = gnu_size; else if (RECORD_OR_UNION_TYPE_P (gnu_type) - && !TYPE_FAT_POINTER_P (gnu_type)) + && !TYPE_FAT_POINTER_P (gnu_type) + && !TYPE_EXTENDED_POINTER_P (gnu_type)) size = rm_size (gnu_type); else size = TYPE_SIZE (gnu_type); @@ -4821,14 +4870,6 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, bool definition) { bool align_clause; - /* Record the property that objects of tagged types are guaranteed to - be properly aligned. This is necessary because conversions to the - class-wide type are translated into conversions to the root type, - which can be less aligned than some of its derived types. */ - if (Is_Tagged_Type (gnat_entity) - || Is_Class_Wide_Equivalent_Type (gnat_entity)) - TYPE_ALIGN_OK (gnu_type) = 1; - /* Record whether the type is passed by reference. */ if (is_by_ref && !VOID_TYPE_P (gnu_type)) TYPE_BY_REFERENCE_P (gnu_type) = 1; @@ -5134,6 +5175,22 @@ get_unpadded_type (Entity_Id gnat_entity) return type; } +/* Similar, but GNAT_ENTITY is assumed to refer to a GNAT type. Return + the extended version of the GCC type corresponding to that entity. */ + +tree +get_unpadded_extended_type (Entity_Id gnat_entity) +{ + tree type = gnat_to_gnu_type (gnat_entity); + + tree extended_type = get_extended_unconstrained_array (gnat_entity, type); + + if (TYPE_IS_PADDING_P (extended_type)) + extended_type = TREE_TYPE (TYPE_FIELDS (extended_type)); + + return extended_type; +} + /* Return whether the E_Subprogram_Type/E_Function/E_Procedure GNAT_ENTITY is a C++ imported method or equivalent. @@ -5241,6 +5298,47 @@ is_cplusplus_method (Entity_Id gnat_entity) return false; } +/* Get the UNCONSTRAINED_ARRAY_TYPE tree used for extended access handling, + for the unconstrained array type GNAT_ENTITY. + + GNU_TYPE is the UNCONSTRAINED_ARRAY_TYPE tree used for the regular + fat/thin pointers. */ + +static tree +get_extended_unconstrained_array (Entity_Id gnat_entity, tree gnu_type) +{ + gcc_assert (Is_Array_Type (gnat_entity) + && TREE_CODE (gnu_type) == UNCONSTRAINED_ARRAY_TYPE); + + + if (Ekind (gnat_entity) == E_Array_Subtype) + return get_extended_unconstrained_array (Etype (gnat_entity), gnu_type); + + tree gnu_extended_type = TYPE_EXTENDED_UNCONSTRAINED_ARRAY (gnu_type); + + /* Building the extended type is achieved by translating the array type + a second time using a special processing. */ + if (!gnu_extended_type) + { + /* To have gnat_to_gnu_entity trigger the special processing for extended + access types, we pass GNU_TYPE as second parameter, we backup the + existing association for GNAT_ENTITY and clear it before the call. */ + tree gnu_decl = get_gnu_tree (gnat_entity); + save_gnu_tree (gnat_entity, NULL_TREE, false); + + gnu_extended_type + = TREE_TYPE (gnat_to_gnu_entity (gnat_entity, gnu_type, false)); + gcc_assert (gnu_extended_type); + SET_TYPE_EXTENDED_UNCONSTRAINED_ARRAY (gnu_type, gnu_extended_type); + + /* And finally, we restore the original association for GNAT_ENTITY. */ + save_gnu_tree (gnat_entity, NULL_TREE, false); + save_gnu_tree (gnat_entity, gnu_decl, false); + } + + return gnu_extended_type; +} + /* Return the inlining status of the GNAT subprogram SUBPROG. */ static enum inline_status_t @@ -5463,6 +5561,7 @@ gnat_to_gnu_component_type (Entity_Id gnat_array, bool definition, && !Strict_Alignment (gnat_type) && RECORD_OR_UNION_TYPE_P (gnu_type) && !TYPE_FAT_POINTER_P (gnu_type) + && !TYPE_EXTENDED_POINTER_P (gnu_type) && tree_fits_uhwi_p (TYPE_SIZE (gnu_type))) { tree gnu_packable_type = make_packable_type (gnu_type, false, max_align); @@ -7154,6 +7253,155 @@ elaborate_entity (Entity_Id gnat_entity) } } +/* Build the template type GNU_TEMPLATE_TYPE for the array type GNAT_ENTITY. + GNU_TEMPLATE_REFERENCE is an expression to access the template value from + the pointer type. If GNU_INDEX_TYPES is not null, it's an array where the + index types whose bounds are the values of the template are to be stored. + If GNU_MAX_SIZE is not NULL_TREE, it's a tree where the maximum size of + the array type is computed. DEBUG_INFO_P is true if debug info needs to + be output for this type. */ + +void +build_template_type (Entity_Id gnat_entity, tree gnu_template_type, + tree gnu_template_reference, + tree *gnu_index_types, tree &gnu_max_size, + bool debug_info_p) +{ + const bool convention_fortran_p + = (Convention (gnat_entity) == Convention_Fortran); + const int ndim = Number_Dimensions (gnat_entity); + tree *gnu_temp_fields = XALLOCAVEC (tree, ndim); + Entity_Id gnat_index; + int index; + + tree template_fields = TYPE_FIELDS (gnu_template_type); + const bool template_exists_p = template_fields != NULL_TREE; + + /* Now create the GCC type for each index and add the fields for that + index to the template. */ + for (index = (convention_fortran_p ? ndim - 1 : 0), + gnat_index = First_Index (gnat_entity); + IN_RANGE (index, 0, ndim - 1); + index += (convention_fortran_p ? - 1 : 1), + gnat_index = Next_Index (gnat_index)) + { + const Entity_Id gnat_index_type = Etype (gnat_index); + const bool is_flb = Is_Fixed_Lower_Bound_Index_Subtype (gnat_index_type); + tree gnu_index_type = get_unpadded_type (gnat_index_type); + tree gnu_orig_min = TYPE_MIN_VALUE (gnu_index_type); + tree gnu_orig_max = TYPE_MAX_VALUE (gnu_index_type); + tree gnu_index_base_type = get_base_type (gnu_index_type); + tree gnu_lb_field, gnu_hb_field; + tree gnu_min, gnu_max, gnu_high; + char field_name[16]; + + /* Update the maximum size of the array in elements. */ + if (gnu_max_size) + gnu_max_size + = update_n_elem (gnu_max_size, gnu_orig_min, gnu_orig_max); + + /* Now build the self-referential bounds of the index type. */ + gnu_index_type = maybe_character_type (gnu_index_type); + gnu_index_base_type = maybe_character_type (gnu_index_base_type); + + if (template_fields != NULL_TREE) + { + gnu_lb_field = template_fields; + template_fields = DECL_CHAIN (template_fields); + gnu_hb_field = template_fields; + template_fields = DECL_CHAIN (template_fields); + } + else + { + /* Make the FIELD_DECLs for the low and high bounds of this + type and then make extractions of these fields from the + template. */ + sprintf (field_name, "LB%d", index); + gnu_lb_field = create_field_decl (get_identifier (field_name), + gnu_index_type, + gnu_template_type, NULL_TREE, + NULL_TREE, 0, 0); + /* Mark the field specifically for INSTANTIATE_LOAD_IN_EXPR. */ + DECL_DISCRIMINANT_NUMBER (gnu_lb_field) = integer_minus_one_node; + Sloc_to_locus (Sloc (gnat_entity), &DECL_SOURCE_LOCATION (gnu_lb_field)); + + field_name[0] = 'U'; + gnu_hb_field = create_field_decl (get_identifier (field_name), + gnu_index_type, + gnu_template_type, NULL_TREE, + NULL_TREE, 0, 0); + /* Mark the field specifically for INSTANTIATE_LOAD_IN_EXPR. */ + DECL_DISCRIMINANT_NUMBER (gnu_hb_field) = integer_minus_one_node; + Sloc_to_locus (Sloc (gnat_entity), &DECL_SOURCE_LOCATION (gnu_hb_field)); + + gnu_temp_fields[index] = chainon (gnu_lb_field, gnu_hb_field); + } + + if (gnu_index_types) + { + /* We can't use build_component_ref here since the template type + isn't complete yet. */ + if (!is_flb) + { + gnu_orig_min + = build3 (COMPONENT_REF, TREE_TYPE (gnu_lb_field), + gnu_template_reference, gnu_lb_field, + NULL_TREE); + TREE_READONLY (gnu_orig_min) = 1; + } + + gnu_orig_max = build3 (COMPONENT_REF, TREE_TYPE (gnu_hb_field), + gnu_template_reference, gnu_hb_field, + NULL_TREE); + TREE_READONLY (gnu_orig_max) = 1; + + gnu_min = convert (sizetype, gnu_orig_min); + gnu_max = convert (sizetype, gnu_orig_max); + + /* Compute the size of this dimension. See the E_Array_Subtype + case of gnat_to_gnu_entity for the rationale. */ + if (is_flb + && Nkind (gnat_index) == N_Subtype_Indication + && flb_cannot_be_superflat (gnat_index)) + gnu_high = gnu_max; + + else + gnu_high + = build3 (COND_EXPR, sizetype, + build2 (GE_EXPR, boolean_type_node, + gnu_orig_max, gnu_orig_min), + gnu_max, + TREE_CODE (gnu_min) == INTEGER_CST + ? int_const_binop (MINUS_EXPR, gnu_min, size_one_node) + : size_binop (MINUS_EXPR, gnu_min, size_one_node)); + + /* Make a range type with the new range in the Ada base type. + Then make an index type with the size range in sizetype. */ + gnu_index_types[index] + = create_index_type (gnu_min, gnu_high, + create_range_type (gnu_index_base_type, + gnu_orig_min, + gnu_orig_max), + gnat_entity); + + TYPE_NAME (gnu_index_types[index]) + = create_concat_name (gnat_entity, field_name); + } + } + + if (!template_exists_p) + { + TYPE_NAMELESS (gnu_template_type) + = gnat_encodings != DWARF_GNAT_ENCODINGS_ALL; + + tree gnu_template_fields = NULL_TREE; + for (index = 0; index < ndim; index++) + gnu_template_fields + = chainon (gnu_template_fields, gnu_temp_fields[index]); + finish_record_type (gnu_template_type, gnu_template_fields, 0, debug_info_p); + } +} + /* Prepend to ATTR_LIST an entry for an attribute with provided TYPE, NAME, ARGS and ERROR_POINT. */ @@ -7321,8 +7569,7 @@ static tree elaborate_expression_1 (tree gnu_expr, Entity_Id gnat_entity, const char *s, bool definition, bool need_for_debug) { - const bool expr_public_p = Is_Public (gnat_entity); - const bool expr_global_p = expr_public_p || global_bindings_p (); + const bool expr_global_p = Is_Public (gnat_entity) || global_bindings_p (); bool expr_variable_p, use_variable; /* If GNU_EXPR contains a placeholder, just return it. We rely on the fact @@ -7372,7 +7619,7 @@ elaborate_expression_1 (tree gnu_expr, Entity_Id gnat_entity, const char *s, if (need_for_debug && gnat_encodings != DWARF_GNAT_ENCODINGS_ALL && (TREE_CONSTANT (gnu_expr) - || (!expr_public_p + || (!Is_Public (gnat_entity) && DECL_P (gnu_expr) && !DECL_IGNORED_P (gnu_expr)))) need_for_debug = false; @@ -7391,7 +7638,8 @@ elaborate_expression_1 (tree gnu_expr, Entity_Id gnat_entity, const char *s, tree gnu_decl = create_var_decl (create_concat_name (gnat_entity, s), NULL_TREE, TREE_TYPE (gnu_expr), gnu_expr, true, - expr_public_p, !definition && expr_global_p, + Is_Public (gnat_entity), Is_Link_Once (gnat_entity), + !definition && expr_global_p, expr_global_p, false, true, Needs_Debug_Info (gnat_entity), NULL, gnat_entity, false); @@ -7775,6 +8023,7 @@ gnat_to_gnu_field (Entity_Id gnat_field, tree gnu_record_type, int packed, if (!needs_strict_alignment && RECORD_OR_UNION_TYPE_P (gnu_field_type) && !TYPE_FAT_POINTER_P (gnu_field_type) + && !TYPE_EXTENDED_POINTER_P (gnu_field_type) && tree_fits_uhwi_p (TYPE_SIZE (gnu_field_type)) && (packed == 1 || is_bitfield @@ -7972,6 +8221,7 @@ gnat_to_gnu_field (Entity_Id gnat_field, tree gnu_record_type, int packed, if (!needs_strict_alignment && RECORD_OR_UNION_TYPE_P (gnu_field_type) && !TYPE_FAT_POINTER_P (gnu_field_type) + && !TYPE_EXTENDED_POINTER_P (gnu_field_type) && TYPE_MODE (gnu_field_type) == BLKmode && is_bitfield) gnu_field_type = make_packable_type (gnu_field_type, true, 1); @@ -9698,7 +9948,9 @@ validate_size (Uint uint_size, tree gnu_type, Entity_Id gnat_object, /* If this is an access type or a fat pointer, the minimum size is that given by the default pointer mode. */ - if (TREE_CODE (gnu_type) == POINTER_TYPE || TYPE_IS_FAT_POINTER_P (gnu_type)) + if (TREE_CODE (gnu_type) == POINTER_TYPE + || TYPE_IS_FAT_POINTER_P (gnu_type) + || TYPE_IS_EXTENDED_POINTER_P (gnu_type)) old_size = bitsize_int (GET_MODE_BITSIZE (ptr_mode)); /* Issue an error either if the default size of the object isn't a constant @@ -9814,7 +10066,8 @@ set_rm_size (Uint uint_size, tree gnu_type, Entity_Id gnat_entity) /* ...or the Ada size for record and union types. */ else if (RECORD_OR_UNION_TYPE_P (gnu_type) - && !TYPE_FAT_POINTER_P (gnu_type)) + && !TYPE_FAT_POINTER_P (gnu_type) + && !TYPE_EXTENDED_POINTER_P (gnu_type)) SET_TYPE_ADA_SIZE (gnu_type, size); } @@ -10618,6 +10871,7 @@ copy_and_substitute_in_layout (Entity_Id gnat_new_type, gnu_size = DECL_SIZE (gnu_old_field); if (RECORD_OR_UNION_TYPE_P (gnu_field_type) && !TYPE_FAT_POINTER_P (gnu_field_type) + && !TYPE_EXTENDED_POINTER_P (gnu_field_type) && tree_fits_uhwi_p (TYPE_SIZE (gnu_field_type))) gnu_field_type = make_packable_type (gnu_field_type, true, 0); } @@ -10990,6 +11244,7 @@ rm_size (tree gnu_type) /* For record or union types, we store the size explicitly. */ if (RECORD_OR_UNION_TYPE_P (gnu_type) && !TYPE_FAT_POINTER_P (gnu_type) + && !TYPE_EXTENDED_POINTER_P (gnu_type) && TYPE_ADA_SIZE (gnu_type)) return TYPE_ADA_SIZE (gnu_type); diff --git a/gcc/ada/gcc-interface/gigi.h b/gcc/ada/gcc-interface/gigi.h index 0345111fb85f..cb6a6a1a148b 100644 --- a/gcc/ada/gcc-interface/gigi.h +++ b/gcc/ada/gcc-interface/gigi.h @@ -49,6 +49,14 @@ extern tree gnat_to_gnu_field_decl (Entity_Id gnat_entity); the GCC type corresponding to that entity. */ extern tree gnat_to_gnu_type (Entity_Id gnat_entity); +/* Similar, but GNAT_ENTITY is assumed to refer to a GNAT type. Return + the unpadded version of the GCC type corresponding to that entity. */ +extern tree get_unpadded_type (Entity_Id gnat_entity); + +/* Similar, but GNAT_ENTITY is assumed to refer to a GNAT type. Return + the extended version of the GCC type corresponding to that entity. */ +extern tree get_unpadded_extended_type (Entity_Id gnat_entity); + /* Update the GCC tree previously built for the profiles involving GNU_TYPE, a dummy type which appears in profiles. */ extern void update_profiles_with (tree gnu_type); @@ -107,8 +115,17 @@ extern Entity_Id Gigi_Equivalent_Type (Entity_Id gnat_entity); be elaborated at the point of its definition, but do nothing else. */ extern void elaborate_entity (Entity_Id gnat_entity); -/* Get the unpadded version of a GNAT type. */ -extern tree get_unpadded_type (Entity_Id gnat_entity); +/* Build the template type GNU_TEMPLATE_TYPE for the array type GNAT_ENTITY. + GNU_TEMPLATE_REFERENCE is an expression to access the template value from + the pointer type. If GNU_INDEX_TYPES is not null, it's an array where the + index types whose bounds are the values of the template are to be stored. + If GNU_MAX_SIZE is not NULL_TREE, it's a tree where the maximum size of + the array type is computed. DEBUG_INFO_P is true if debug info needs to + be output for this type. */ +extern void build_template_type (Entity_Id gnat_entity, tree gnu_template_type, + tree gnu_template_reference, + tree *gnu_index_types, tree &gnu_max_size, + bool debug_info_p); /* Create a record type that contains a SIZE bytes long field of TYPE with a starting bit position so that it is aligned to ALIGN bits, and leaving at @@ -388,15 +405,20 @@ enum standard_datatypes /* Function declaration node for run-time reallocation function. */ ADT_realloc_decl, - /* Function decl node for 64-bit multiplication with overflow checking. */ + /* Function decl nodes for 64-bit multiplication with overflow checking. */ ADT_mulv64_decl, + ADT_uns_mulv64_decl, - /* Function decl node for 128-bit multiplication with overflow checking. */ + /* Function decl nodes for 128-bit multiplication with overflow checking. */ ADT_mulv128_decl, + ADT_uns_mulv128_decl, /* Identifier for the name of the _Parent field in tagged record types. */ ADT_parent_name_id, + /* Identifier for the name of the _Tag field in tagged record types. */ + ADT_tag_name_id, + /* Identifier for the name of the Not_Handled_By_Others field. */ ADT_not_handled_by_others_name_id, @@ -455,8 +477,11 @@ extern GTY(()) tree gnat_raise_decls_ext[(int) LAST_REASON_CODE + 1]; #define free_decl gnat_std_decls[(int) ADT_free_decl] #define realloc_decl gnat_std_decls[(int) ADT_realloc_decl] #define mulv64_decl gnat_std_decls[(int) ADT_mulv64_decl] +#define uns_mulv64_decl gnat_std_decls[(int) ADT_uns_mulv64_decl] #define mulv128_decl gnat_std_decls[(int) ADT_mulv128_decl] +#define uns_mulv128_decl gnat_std_decls[(int) ADT_uns_mulv128_decl] #define parent_name_id gnat_std_decls[(int) ADT_parent_name_id] +#define tag_name_id gnat_std_decls[(int) ADT_tag_name_id] #define not_handled_by_others_name_id \ gnat_std_decls[(int) ADT_not_handled_by_others_name_id] #define reraise_zcx_decl gnat_std_decls[(int) ADT_reraise_zcx_decl] @@ -570,6 +595,11 @@ extern tree get_dummy_type (Entity_Id gnat_type); extern void build_dummy_unc_pointer_types (Entity_Id gnat_desig_type, tree gnu_desig_type); +/* Build dummy extended access types whose designated type is specified by + GNAT_DESIG_TYPE/GNU_DESIG_TYPE and attach them to the latter. */ +extern tree build_dummy_unc_pointer_types_ext (Entity_Id gnat_desig_type, + tree gnu_desig_type); + /* Record TYPE as a builtin type for Ada. NAME is the name of the type. ARTIFICIAL_P is true if the type was generated by the compiler. */ extern void record_builtin_type (const char *name, tree type, @@ -582,6 +612,10 @@ extern void finish_character_type (tree char_type); finish constructing the record type as a fat pointer type. */ extern void finish_fat_pointer_type (tree record_type, tree field_list); +/* Given a record type RECORD_TYPE and a list of FIELD_DECL nodes FIELD_LIST, + finish constructing the record type as an extended access type. */ +extern void finish_extended_pointer_type (tree record_type, tree field_list); + /* Given a record type RECORD_TYPE and a list of FIELD_DECL nodes FIELD_LIST, finish constructing the record or union type. If REP_LEVEL is zero, this record has no representation clause and so will be entirely laid out here. @@ -645,6 +679,9 @@ extern tree create_type_decl (tree name, tree type, bool artificial_p, definition to be made visible outside of the current compilation unit, for instance variable definitions in a package specification. + LINKONCE_FLAG is true if the entity can be defined in multiple compilation + units without generating a linker error. + EXTERN_FLAG is true when processing an external variable declaration (as opposed to a definition: no storage is to be allocated for the variable). @@ -662,8 +699,8 @@ extern tree create_type_decl (tree name, tree type, bool artificial_p, GNAT_NODE is used for the position of the decl. */ extern tree create_var_decl (tree name, tree asm_name, tree type, tree init, bool const_flag, bool public_flag, - bool extern_flag, bool static_flag, - bool volatile_flag, + bool linkonce_flag, bool extern_flag, + bool static_flag, bool volatile_flag, bool artificial_p, bool debug_info_p, struct attrib *attr_list, Node_Id gnat_node, bool const_decl_allowed_p = true); @@ -696,6 +733,9 @@ extern tree create_label_decl (tree name, Node_Id gnat_node); PUBLIC_FLAG is true if this is for a reference to a public entity or for a definition to be made visible outside of the current compilation unit. + LINKONCE_FLAG is true if the entity can be defined in multiple compilation + units without generating a linker error. + EXTERN_FLAG is true when processing an external subprogram declaration. ARTIFICIAL_P is true if the subprogram was generated by the compiler. @@ -710,10 +750,11 @@ extern tree create_label_decl (tree name, Node_Id gnat_node); extern tree create_subprog_decl (tree name, tree asm_name, tree type, tree param_decl_list, enum inline_status_t inline_status, - bool public_flag, bool extern_flag, - bool artificial_p, bool debug_info_p, - bool definition, struct attrib *attr_list, - Node_Id gnat_node); + bool public_flag, bool linkonce_flag, + bool extern_flag, bool artificial_p, + bool debug_info_p, bool definition, + struct attrib *attr_list = NULL, + Node_Id gnat_node = Empty); /* Given a subprogram declaration DECL, its assembler name and its type, finish constructing the subprogram declaration from ASM_NAME and TYPE. */ @@ -753,11 +794,9 @@ extern tree build_unc_object_type (tree template_type, tree object_type, tree name, bool artificial_p, bool debug_info_p); -/* Same as build_unc_object_type, but taking a thin or fat pointer type - instead of the template type. */ -extern tree build_unc_object_type_from_ptr (tree thin_fat_ptr_type, - tree object_type, tree name, - bool debug_info_p); +/* Same, taking a pointer type instead of a template type. */ +extern tree build_unc_object_type_from_ptr (tree ptr_type, tree object_type, + tree name, bool debug_info_p); /* Update anything previously pointing to OLD_TYPE to point to NEW_TYPE. In the normal case this is just two adjustments, but we have more to do @@ -1120,6 +1159,28 @@ call_is_atomic_load (tree exp) return BUILT_IN_ATOMIC_LOAD_N <= code && code <= BUILT_IN_ATOMIC_LOAD_16; } +/* Return true if TYPE is a tagged type or a CW-equivalent type. */ + +static inline bool +type_is_tagged_or_cw_equivalent (tree type) +{ + if (!RECORD_OR_UNION_TYPE_P (type)) + return false; + + tree field = TYPE_FIELDS (type); + if (!field) + return false; + + /* The tag can be put into the REP part of a record type. */ + if (DECL_INTERNAL_P (field)) + return type_is_tagged_or_cw_equivalent (TREE_TYPE (field)); + + tree name = DECL_NAME (field); + + /* See Exp_Util.Make_CW_Equivalent_Type for the CW-equivalent case. */ + return name == tag_name_id || name == parent_name_id; +} + /* Return true if TYPE is padding a self-referential type. */ static inline bool diff --git a/gcc/ada/gcc-interface/misc.cc b/gcc/ada/gcc-interface/misc.cc index 7711f8b0f82a..e0890a2efc2e 100644 --- a/gcc/ada/gcc-interface/misc.cc +++ b/gcc/ada/gcc-interface/misc.cc @@ -531,7 +531,9 @@ gnat_print_type (FILE *file, tree node, int indent) break; case RECORD_TYPE: - if (TYPE_FAT_POINTER_P (node) || TYPE_CONTAINS_TEMPLATE_P (node)) + if (TYPE_EXTENDED_POINTER_P (node) + || TYPE_FAT_POINTER_P (node) + || TYPE_CONTAINS_TEMPLATE_P (node)) print_node (file, "unconstrained array", TYPE_UNCONSTRAINED_ARRAY (node), indent + 4); else @@ -837,6 +839,8 @@ gnat_get_array_descr_info (const_tree const_type, if (TYPE_IMPL_PACKED_ARRAY_P (array_type) && TYPE_ORIGINAL_PACKED_ARRAY (array_type)) array_type = TYPE_ORIGINAL_PACKED_ARRAY (array_type); + if (TREE_CODE (array_type) != ARRAY_TYPE) + return false; /* Shift back the address to get the address of the template. */ tree shift_amount diff --git a/gcc/ada/gcc-interface/trans.cc b/gcc/ada/gcc-interface/trans.cc index fd1d39cd0f55..cdbd4828c825 100644 --- a/gcc/ada/gcc-interface/trans.cc +++ b/gcc/ada/gcc-interface/trans.cc @@ -319,7 +319,7 @@ gigi (Node_Id gnat_root, { Node_Id gnat_iter; Entity_Id gnat_literal; - tree t, ftype, int64_type; + tree t, ftype; struct elab_info *info; int i; @@ -427,14 +427,14 @@ gigi (Node_Id gnat_root, gcc_assert (t == boolean_false_node); t = create_var_decl (get_entity_name (gnat_literal), NULL_TREE, boolean_type_node, t, true, false, false, false, false, - true, false, NULL, gnat_literal); + false, true, false, NULL, gnat_literal); save_gnu_tree (gnat_literal, t, false); gnat_literal = Next_Literal (gnat_literal); t = UI_To_gnu (Enumeration_Rep (gnat_literal), boolean_type_node); gcc_assert (t == boolean_true_node); t = create_var_decl (get_entity_name (gnat_literal), NULL_TREE, boolean_type_node, t, true, false, false, false, false, - true, false, NULL, gnat_literal); + false, true, false, NULL, gnat_literal); save_gnu_tree (gnat_literal, t, false); /* Declare the building blocks of function nodes. */ @@ -446,35 +446,44 @@ gigi (Node_Id gnat_root, = create_subprog_decl (get_identifier ("__gnat_malloc"), NULL_TREE, build_function_type_list (ptr_type_node, sizetype, NULL_TREE), - NULL_TREE, is_default, true, true, true, false, - false, NULL, Empty); + NULL_TREE, is_default, true, false, true, true, + false, false); DECL_IS_MALLOC (malloc_decl) = 1; free_decl = create_subprog_decl (get_identifier ("__gnat_free"), NULL_TREE, build_function_type_list (void_type_node, ptr_type_node, NULL_TREE), - NULL_TREE, is_default, true, true, true, false, - false, NULL, Empty); + NULL_TREE, is_default, true, false, true, true, + false, false); realloc_decl = create_subprog_decl (get_identifier ("__gnat_realloc"), NULL_TREE, build_function_type_list (ptr_type_node, ptr_type_node, sizetype, NULL_TREE), - NULL_TREE, is_default, true, true, true, false, - false, NULL, Empty); + NULL_TREE, is_default, true, false, true, true, + false, false); /* This is used for 64-bit multiplication with overflow checking. */ - int64_type = gnat_type_for_size (64, 0); + tree int64_type = gnat_type_for_size (64, 0); mulv64_decl = create_subprog_decl (get_identifier ("__gnat_mulv64"), NULL_TREE, build_function_type_list (int64_type, int64_type, int64_type, NULL_TREE), - NULL_TREE, is_default, true, true, true, false, - false, NULL, Empty); + NULL_TREE, is_default, true, false, true, true, + false, false); strub_make_callable (mulv64_decl); + tree uint64_type = gnat_type_for_size (64, 1); + uns_mulv64_decl + = create_subprog_decl (get_identifier ("__gnat_uns_mulv64"), NULL_TREE, + build_function_type_list (uint64_type, uint64_type, + uint64_type, NULL_TREE), + NULL_TREE, is_default, true, false, true, true, + false, false); + strub_make_callable (uns_mulv64_decl); + if (Enable_128bit_Types) { tree int128_type = gnat_type_for_size (128, 0); @@ -484,14 +493,28 @@ gigi (Node_Id gnat_root, int128_type, int128_type, NULL_TREE), - NULL_TREE, is_default, true, true, true, false, - false, NULL, Empty); + NULL_TREE, is_default, true, false, true, true, + false, false); strub_make_callable (mulv128_decl); + + tree uint128_type = gnat_type_for_size (128, 1); + uns_mulv128_decl + = create_subprog_decl (get_identifier ("__gnat_uns_mulv128"), NULL_TREE, + build_function_type_list (uint128_type, + uint128_type, + uint128_type, + NULL_TREE), + NULL_TREE, is_default, true, false, true, true, + false, false); + strub_make_callable (uns_mulv128_decl); } /* Name of the _Parent field in tagged record types. */ parent_name_id = get_identifier (Get_Name_String (Name_uParent)); + /* Name of the _Tag field in tagged record types. */ + tag_name_id = get_identifier (Get_Name_String (Name_uTag)); + /* Name of the Not_Handled_By_Others field in exception record types. */ not_handled_by_others_name_id = get_identifier ("not_handled_by_others"); @@ -503,7 +526,7 @@ gigi (Node_Id gnat_root, (get_identifier ("__gnat_set_exception_parameter"), NULL_TREE, build_function_type_list (void_type_node, ptr_type_node, ptr_type_node, NULL_TREE), - NULL_TREE, is_default, true, true, true, false, false, NULL, Empty); + NULL_TREE, is_default, true, false, true, true, false, false); /* Hooks to call when entering/leaving an exception handler. */ ftype = build_function_type_list (ptr_type_node, @@ -511,8 +534,7 @@ gigi (Node_Id gnat_root, begin_handler_decl = create_subprog_decl (get_identifier ("__gnat_begin_handler_v1"), NULL_TREE, ftype, NULL_TREE, - is_default, true, true, true, false, false, NULL, - Empty); + is_default, true, false, true, true, false, false); /* __gnat_begin_handler_v1 is not a dummy procedure, but we arrange for it not to throw. */ TREE_NOTHROW (begin_handler_decl) = 1; @@ -523,23 +545,20 @@ gigi (Node_Id gnat_root, end_handler_decl = create_subprog_decl (get_identifier ("__gnat_end_handler_v1"), NULL_TREE, ftype, NULL_TREE, - is_default, true, true, true, false, false, NULL, - Empty); + is_default, true, false, true, true, false, false); ftype = build_function_type_list (void_type_node, ptr_type_node, NULL_TREE); unhandled_except_decl = create_subprog_decl (get_identifier ("__gnat_unhandled_except_handler"), NULL_TREE, ftype, NULL_TREE, - is_default, true, true, true, false, false, NULL, - Empty); + is_default, true, false, true, true, false, false); /* Indicate that it never returns. */ ftype = build_qualified_type (ftype, TYPE_QUAL_VOLATILE); reraise_zcx_decl = create_subprog_decl (get_identifier ("__gnat_reraise_zcx"), NULL_TREE, ftype, NULL_TREE, - is_default, true, true, true, false, false, NULL, - Empty); + is_default, true, false, true, true, false, false); set_call_expr_flags (reraise_zcx_decl, ECF_NORETURN | ECF_XTHROW); /* Dummy objects to materialize "others" and "all others" in the exception @@ -549,21 +568,21 @@ gigi (Node_Id gnat_root, = create_var_decl (get_identifier ("OTHERS"), get_identifier ("__gnat_others_value"), char_type_node, NULL_TREE, - true, false, true, false, false, true, false, + true, false, false, true, false, false, true, false, NULL, Empty); all_others_decl = create_var_decl (get_identifier ("ALL_OTHERS"), get_identifier ("__gnat_all_others_value"), char_type_node, NULL_TREE, - true, false, true, false, false, true, false, + true, false, false, true, false, false, true, false, NULL, Empty); unhandled_others_decl = create_var_decl (get_identifier ("UNHANDLED_OTHERS"), get_identifier ("__gnat_unhandled_others_value"), char_type_node, NULL_TREE, - true, false, true, false, false, true, false, + true, false, false, true, false, false, true, false, NULL, Empty); /* If in no exception handlers mode, all raise statements are redirected to @@ -578,8 +597,7 @@ gigi (Node_Id gnat_root, tree decl = create_subprog_decl (get_identifier ("__gnat_last_chance_handler"), NULL_TREE, ftype, - NULL_TREE, is_default, true, true, true, false, false, NULL, - Empty); + NULL_TREE, is_default, true, false, true, true, false, false); for (i = 0; i < (int) ARRAY_SIZE (gnat_raise_decls); i++) gnat_raise_decls[i] = decl; } @@ -741,8 +759,8 @@ build_raise_check (int check, enum exception_info_kind kind) ftype = build_qualified_type (ftype, TYPE_QUAL_VOLATILE); result = create_subprog_decl (get_identifier (Name_Buffer), NULL_TREE, ftype, - NULL_TREE, is_default, true, true, true, false, - false, NULL, Empty); + NULL_TREE, is_default, true, false, true, true, + false, false); strub_make_callable (result); set_call_expr_flags (result, ECF_NORETURN | ECF_XTHROW); @@ -1227,6 +1245,10 @@ Identifier_to_gnu (Node_Id gnat_node, tree *gnu_result_type_p) no order-of-elaboration issue here. */ if (Is_Subprogram (gnat_entity)) gnu_result_type = NULL_TREE; + else if (Nkind (Original_Node (gnat_node)) == N_Explicit_Dereference + && Is_Extended_Access_Type + (Etype (Prefix (Original_Node (gnat_node))))) + gnu_result_type = get_unpadded_extended_type (gnat_result_type); else gnu_result_type = get_unpadded_type (gnat_result_type); @@ -1915,12 +1937,17 @@ Attribute_to_gnu (Node_Id gnat_node, tree *gnu_result_type_p, tree gnu_ptr = gnu_prefix; tree gnu_obj_type; - gnu_result_type = get_unpadded_type (Etype (gnat_node)); - - /* If this is fat pointer, the object must have been allocated with the - template in front of the array. So compute the template address; do - it by converting to a thin pointer. */ - if (TYPE_IS_FAT_POINTER_P (TREE_TYPE (gnu_ptr))) + if (Is_Extended_Access_Type (Etype (Prefix (gnat_node))) + && !Is_Constrained (Etype (gnat_node))) + gnu_result_type = get_unpadded_extended_type (Etype (gnat_node)); + else + gnu_result_type = get_unpadded_type (Etype (gnat_node)); + + /* If this is fat or extended pointer, the object must have been + allocated with the template in front of the array. So compute the + template address; do it by converting to a thin pointer. */ + if (TYPE_IS_FAT_POINTER_P (TREE_TYPE (gnu_ptr)) + || TYPE_IS_EXTENDED_POINTER_P (TREE_TYPE (gnu_ptr))) gnu_ptr = convert (build_pointer_type (TYPE_OBJECT_RECORD_TYPE @@ -2010,7 +2037,8 @@ Attribute_to_gnu (Node_Id gnat_node, tree *gnu_result_type_p, tree gnu_ptr_type = TREE_TYPE (gnat_to_gnu (Prefix (gnat_prefix))); - if (TYPE_IS_FAT_OR_THIN_POINTER_P (gnu_ptr_type)) + if (TYPE_IS_FAT_OR_THIN_POINTER_P (gnu_ptr_type) + || TYPE_IS_EXTENDED_POINTER_P (gnu_ptr_type)) gnu_type = build_unc_object_type_from_ptr (gnu_ptr_type, gnu_actual_obj_type, @@ -4026,7 +4054,7 @@ Subprogram_Body_to_gnu (Node_Id gnat_node) gnu_return_var = create_var_decl (get_identifier ("RETVAL"), NULL_TREE, gnu_return_type, NULL_TREE, - false, false, false, false, false, + false, false, false, false, false, false, true, false, NULL, gnat_subprog); TREE_VALUE (gnu_return_var_elmt) = gnu_return_var; } @@ -4562,7 +4590,7 @@ create_temporary (const char *prefix, tree type) tree gnu_temp = create_var_decl (create_tmp_var_name (prefix), NULL_TREE, type, NULL_TREE, - false, false, false, false, false, + false, false, false, false, false, false, true, false, NULL, Empty); return gnu_temp; } @@ -5845,7 +5873,7 @@ Exception_Handler_to_gnu (Node_Id gnat_node) tree exc_ptr = create_var_decl (get_identifier ("EXPTR"), NULL_TREE, ptr_type_node, gnu_current_exc_ptr, - true, false, false, false, false, true, true, + true, false, false, false, false, false, true, true, NULL, gnat_node); tree prev_gnu_incoming_exc_ptr = gnu_incoming_exc_ptr; @@ -5860,7 +5888,7 @@ Exception_Handler_to_gnu (Node_Id gnat_node) ptr_type_node, build_call_n_expr (begin_handler_decl, 1, exc_ptr), - true, false, false, false, false, + true, false, false, false, false, false, true, true, NULL, gnat_node); /* Declare and initialize the choice parameter, if present. */ @@ -5910,7 +5938,7 @@ Exception_Handler_to_gnu (Node_Id gnat_node) build_call_expr (builtin_decl_explicit (BUILT_IN_EH_POINTER), 1, integer_zero_node), - true, false, false, false, false, + true, false, false, false, false, false, true, true, NULL, gnat_node); /* CODE: __gnat_end_handler_v1 (EXPTR, EXCLN, EXPRP); */ @@ -5956,7 +5984,7 @@ Compilation_Unit_to_gnu (Node_Id gnat_node) = create_subprog_decl (create_concat_name (gnat_unit_entity, body_p ? "elabb" : "elabs"), NULL_TREE, void_ftype, NULL_TREE, - is_default, true, false, false, true, false, NULL, gnat_unit); + is_default, true, false, false, false, true, false, NULL, gnat_unit); struct elab_info *info; vec_safe_push (gnu_elab_proc_stack, gnu_elab_proc_decl); @@ -6870,9 +6898,22 @@ gnat_to_gnu (Node_Id gnat_node) && (Is_Array_Type (Etype (gnat_temp)) || Is_Record_Type (Etype (gnat_temp)) || Is_Concurrent_Type (Etype (gnat_temp))))) - gnat_to_gnu_entity (gnat_temp, - gnat_to_gnu (Renamed_Object (gnat_temp)), - true); + { + gnu_expr = gnat_to_gnu (Renamed_Object (gnat_temp)); + + /* The elaboration of object renamings present in the source code + never needs to be deferred. But regular objects may be turned + into renamings during expansion and their elaboration may need + to be deferred, in which case we expect the renamed references + to have been stabilized, so we do not do it again here. */ + if (Present (Freeze_Node (gnat_temp))) + { + gcc_assert (!Comes_From_Source (gnat_node)); + save_gnu_tree (gnat_node, gnu_expr, true); + } + else + gnat_to_gnu_entity (gnat_temp, gnu_expr, true); + } break; case N_Exception_Renaming_Declaration: @@ -6938,7 +6979,12 @@ gnat_to_gnu (Node_Id gnat_node) case N_Explicit_Dereference: /* Make sure the designated type is complete before dereferencing. */ - gnu_result_type = get_unpadded_type (Etype (gnat_node)); + if (Is_Extended_Access_Type (Etype (Prefix (gnat_node))) + && !Is_Constrained (Etype (gnat_node))) + gnu_result_type = get_unpadded_extended_type (Etype (gnat_node)); + else + gnu_result_type = get_unpadded_type (Etype (gnat_node)); + gnu_result = gnat_to_gnu (Prefix (gnat_node)); gnu_result = build_unary_op (INDIRECT_REF, NULL_TREE, gnu_result); @@ -7171,7 +7217,7 @@ gnat_to_gnu (Node_Id gnat_node) (Entity (Prefix (gnat_node)), attr == Attr_Elab_Body ? "elabb" : "elabs"), NULL_TREE, void_ftype, NULL_TREE, is_default, - true, true, true, true, false, NULL, + true, false, true, true, true, false, NULL, gnat_node); gnu_result = Attribute_to_gnu (gnat_node, &gnu_result_type, attr); @@ -7284,7 +7330,12 @@ gnat_to_gnu (Node_Id gnat_node) tree gnu_obj_type = TREE_TYPE (gnu_result_type); unsigned int oalign = TYPE_ALIGN (gnu_obj_type); - if (align != 0 && align < oalign && !TYPE_ALIGN_OK (gnu_obj_type)) + /* Skip tagged types because conversions to the class-wide type are + translated into conversions to the root type, which may be less + aligned than some of its derived types. */ + if (align != 0 + && align < oalign + && !type_is_tagged_or_cw_equivalent (gnu_obj_type)) post_error_ne_tree_2 ("??source alignment (^) '< alignment of & (^)", gnat_node, Designated_Type (Etype (gnat_node)), @@ -7504,12 +7555,11 @@ gnat_to_gnu (Node_Id gnat_node) gnu_max_shift = convert (gnu_type, gnu_max_shift); } - /* For signed integer addition, subtraction and multiplication, do an + /* For integer addition, subtraction and multiplication, perform an overflow check if required. */ - if (Do_Overflow_Check (gnat_node) - && (code == PLUS_EXPR || code == MINUS_EXPR || code == MULT_EXPR) - && !TYPE_UNSIGNED (gnu_type) - && !FLOAT_TYPE_P (gnu_type)) + if ((code == PLUS_EXPR || code == MINUS_EXPR || code == MULT_EXPR) + && !FLOAT_TYPE_P (gnu_type) + && Do_Overflow_Check (gnat_node)) gnu_result = build_binary_op_trapv (code, gnu_type, gnu_lhs, gnu_rhs, gnat_node); @@ -7590,11 +7640,11 @@ gnat_to_gnu (Node_Id gnat_node) gnu_expr = gnat_to_gnu (Right_Opnd (gnat_node)); gnu_result_type = get_unpadded_type (Etype (gnat_node)); - /* For signed integer negation and absolute value, do an overflow check + /* For integer negation and absolute value, perform an overflow check if required. */ - if (Do_Overflow_Check (gnat_node) - && !TYPE_UNSIGNED (gnu_result_type) - && !FLOAT_TYPE_P (gnu_result_type)) + if ((gnu_codes[kind] == NEGATE_EXPR || gnu_codes[kind] == ABS_EXPR) + && !FLOAT_TYPE_P (gnu_result_type) + && Do_Overflow_Check (gnat_node)) gnu_result = build_unary_op_trapv (gnu_codes[kind], gnu_result_type, gnu_expr, gnat_node); @@ -9791,10 +9841,15 @@ process_freeze_entity (Node_Id gnat_node) } else { + /* For an object whose elaboration is deferred, the GCC tree of the + declaration, if any, is the initialization expression. */ + const Node_Id gnat_decl = Declaration_Node (gnat_entity); tree gnu_init - = (Nkind (Declaration_Node (gnat_entity)) == N_Object_Declaration - && present_gnu_tree (Declaration_Node (gnat_entity))) - ? get_gnu_tree (Declaration_Node (gnat_entity)) : NULL_TREE; + = (Nkind (gnat_decl) == N_Object_Declaration + || Nkind (gnat_decl) == N_Object_Renaming_Declaration) + && Present (Freeze_Node (gnat_entity)) + && present_gnu_tree (gnat_decl) + ? get_gnu_tree (gnat_decl) : NULL_TREE; gnu_new = gnat_to_gnu_entity (gnat_entity, gnu_init, true); } @@ -9959,12 +10014,25 @@ build_unary_op_trapv (enum tree_code code, tree gnu_type, tree operand, { gcc_assert (code == NEGATE_EXPR || code == ABS_EXPR); + tree gnu_expr, check; + operand = gnat_protect_expr (operand); - return emit_check (build_binary_op (EQ_EXPR, boolean_type_node, - operand, TYPE_MIN_VALUE (gnu_type)), - build_unary_op (code, gnu_type, operand), - CE_Overflow_Check_Failed, gnat_node); + gnu_expr = build_unary_op (code, gnu_type, operand); + + if (TYPE_UNSIGNED (gnu_type)) + { + if (code == ABS_EXPR) + return gnu_expr; + else + check = build_binary_op (NE_EXPR, boolean_type_node, + operand, TYPE_MIN_VALUE (gnu_type)); + } + else + check = build_binary_op (EQ_EXPR, boolean_type_node, + operand, TYPE_MIN_VALUE (gnu_type)); + + return emit_check (check, gnu_expr, CE_Overflow_Check_Failed, gnat_node); } /* Make a binary operation of kind CODE using build_binary_op, but guard @@ -10017,21 +10085,29 @@ build_binary_op_trapv (enum tree_code code, tree gnu_type, tree left, /* Never inline a 64-bit mult for a 32-bit target, it's way too long. */ if (code == MULT_EXPR && precision == 64 && BITS_PER_WORD < 64) { - tree int64 = gnat_type_for_size (64, 0); + tree int64 = gnat_type_for_size (64, TYPE_UNSIGNED (gnu_type)); Check_Restriction_No_Dependence_On_System (Name_Arith_64, gnat_node); - return convert (gnu_type, build_call_n_expr (mulv64_decl, 2, - convert (int64, lhs), - convert (int64, rhs))); + return + convert (gnu_type, build_call_n_expr (TYPE_UNSIGNED (gnu_type) + ? uns_mulv64_decl + : mulv64_decl, + 2, + convert (int64, lhs), + convert (int64, rhs))); } /* Likewise for a 128-bit mult and a 64-bit target. */ else if (code == MULT_EXPR && precision == 128 && BITS_PER_WORD < 128) { - tree int128 = gnat_type_for_size (128, 0); + tree int128 = gnat_type_for_size (128, TYPE_UNSIGNED (gnu_type)); Check_Restriction_No_Dependence_On_System (Name_Arith_128, gnat_node); - return convert (gnu_type, build_call_n_expr (mulv128_decl, 2, - convert (int128, lhs), - convert (int128, rhs))); + return + convert (gnu_type, build_call_n_expr (TYPE_UNSIGNED (gnu_type) + ? uns_mulv128_decl + : mulv128_decl, + 2, + convert (int128, lhs), + convert (int128, rhs))); } enum internal_fn icode; @@ -10065,7 +10141,7 @@ build_binary_op_trapv (enum tree_code code, tree gnu_type, tree left, } /* If one operand is a constant, we expose the overflow condition to enable - a subsequent simplication or even elimination. */ + a subsequent simplification or even elimination. */ switch (code) { case PLUS_EXPR: @@ -10085,21 +10161,24 @@ build_binary_op_trapv (enum tree_code code, tree gnu_type, tree left, break; case MINUS_EXPR: - if (TREE_CODE (lhs) == INTEGER_CST) + if (TREE_CODE (lhs) == INTEGER_CST && TYPE_UNSIGNED (gnu_type)) + /* In the unsigned case, overflow when rhs > lhs - type_min. */ + check = build_binary_op (GT_EXPR, boolean_type_node, rhs, + build_binary_op (MINUS_EXPR, gnu_type, + lhs, type_min)); + else if (TREE_CODE (lhs) == INTEGER_CST) { sgn = tree_int_cst_sgn (lhs); - if (sgn > 0) - /* When lhs > 0, overflow when rhs < lhs - type_max. */ + if (sgn >= 0) + /* When lhs >= 0, overflow when rhs < lhs - type_max. */ check = build_binary_op (LT_EXPR, boolean_type_node, rhs, build_binary_op (MINUS_EXPR, gnu_type, lhs, type_max)); - else if (sgn < 0) + else /* When lhs < 0, overflow when rhs > lhs - type_min. */ check = build_binary_op (GT_EXPR, boolean_type_node, rhs, build_binary_op (MINUS_EXPR, gnu_type, lhs, type_min)); - else - return gnu_expr; } else { @@ -10569,8 +10648,8 @@ addressable_p (tree gnu_expr, tree gnu_type, bool compg) && (!STRICT_ALIGNMENT || TYPE_ALIGN (type) <= TYPE_ALIGN (inner_type) || TYPE_ALIGN (inner_type) >= BIGGEST_ALIGNMENT - || TYPE_ALIGN_OK (type) - || TYPE_ALIGN_OK (inner_type)))) + || type_is_tagged_or_cw_equivalent (type) + || type_is_tagged_or_cw_equivalent (inner_type)))) && addressable_p (TREE_OPERAND (gnu_expr, 0), NULL_TREE, compg)); } @@ -11253,7 +11332,7 @@ static bool use_alias_for_thunk_p (tree target) { /* We cannot generate a local call in this case. */ - if (DECL_EXTERNAL (target)) + if (DECL_EXTERNAL (target) || DECL_ONE_ONLY (target)) return false; /* The call is already local in this case. */ diff --git a/gcc/ada/gcc-interface/utils.cc b/gcc/ada/gcc-interface/utils.cc index f501915e82f5..f176ca9eb65f 100644 --- a/gcc/ada/gcc-interface/utils.cc +++ b/gcc/ada/gcc-interface/utils.cc @@ -392,7 +392,6 @@ static tree fold_bit_position (const_tree); static tree compute_related_constant (tree, tree); static tree split_plus (tree, tree *); static tree float_type_for_precision (int, machine_mode); -static tree convert_to_fat_pointer (tree, tree); static unsigned int scale_by_factor_of (tree, unsigned int); /* Linked list used as a queue to defer the initialization of the DECL_CONTEXT @@ -616,6 +615,59 @@ build_dummy_unc_pointer_types (Entity_Id gnat_desig_type, tree gnu_desig_type) TYPE_OBJECT_RECORD_TYPE (gnu_desig_type) = gnu_object_type; } +/* Build dummy extended access types whose designated type is specified by + GNAT_DESIG_TYPE/GNU_DESIG_TYPE and attach them to the latter. */ + +tree +build_dummy_unc_pointer_types_ext (Entity_Id gnat_desig_type, tree gnu_desig_type) +{ + tree gnu_template_type, gnu_array_type, gnu_ptr_array; + tree gnu_ext_acc_type = make_node (RECORD_TYPE); + tree fields, dummy = NULL_TREE; + + gnu_template_type = make_node (RECORD_TYPE); + TYPE_NAME (gnu_template_type) = create_concat_name (gnat_desig_type, "XUBEA"); + TYPE_DUMMY_P (gnu_template_type) = 1; + + /* This will also set TYPE_POINTER_TO field for the template type, even if + we don't need it here. */ + build_pointer_type (gnu_template_type); + + /* The following call only builds the template record, but other dependent + types or other more complex expressions for bounds are NOT created. + This allows the size of an extended access to be computed, but it must be + completed later. */ + build_template_type (gnat_desig_type, gnu_template_type, NULL_TREE, NULL, + dummy, false); + + TYPE_CONTEXT (gnu_template_type) = gnu_ext_acc_type; + + gnu_array_type = make_node (ENUMERAL_TYPE); + TYPE_NAME (gnu_array_type) = create_concat_name (gnat_desig_type, "XUAEA"); + TYPE_DUMMY_P (gnu_array_type) = 1; + gnu_ptr_array = build_pointer_type (gnu_array_type); + + /* Build a stub DECL to trigger the special processing for fat pointer types + in gnat_pushdecl. */ + TYPE_NAME (gnu_ext_acc_type) + = create_type_stub_decl (create_concat_name (gnat_desig_type, "XUPEA"), + gnu_ext_acc_type); + fields = create_field_decl (get_identifier ("P_ARRAY"), gnu_ptr_array, + gnu_ext_acc_type, NULL_TREE, NULL_TREE, 0, 1); + DECL_CHAIN (fields) + = create_field_decl (get_identifier ("BOUNDS"), gnu_template_type, + gnu_ext_acc_type, NULL_TREE, NULL_TREE, 0, 1); + finish_extended_pointer_type (gnu_ext_acc_type, fields); + SET_TYPE_UNCONSTRAINED_ARRAY (gnu_ext_acc_type, gnu_desig_type); + + /* Suppress debug info until after the type is completed. */ + TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (gnu_ext_acc_type)) = 1; + + SET_TYPE_DUMMY_EXT_POINTER_TO (gnu_desig_type, gnu_ext_acc_type); + + return gnu_ext_acc_type; +} + /* Return true if we are in the global binding level. */ bool @@ -937,11 +989,13 @@ gnat_pushdecl (tree decl, Node_Id gnat_node) } /* Pointer types aren't named types in the C sense so we need to generate a - typedef in DWARF for them. Also do that for fat pointer types because, - even though they are named types in the C sense, they are still the XUP - types created for the base array type at this point. */ -#define TYPE_IS_POINTER_P(NODE) \ - (TREE_CODE (NODE) == POINTER_TYPE || TYPE_IS_FAT_POINTER_P (NODE)) + typedef in DWARF for them. Also do that for fat and extended pointer types + because, even though they are named types in the C sense, they are still + the XUP[EA] types created for the base array type at this point. */ +#define TYPE_IS_POINTER_P(NODE) \ + (TREE_CODE (NODE) == POINTER_TYPE \ + || TYPE_IS_FAT_POINTER_P (NODE) \ + || TYPE_IS_EXTENDED_POINTER_P (NODE)) /* For the declaration of a type, set its name either if it isn't already set or if the previous type name was not derived from a source name. @@ -973,8 +1027,8 @@ gnat_pushdecl (tree decl, Node_Id gnat_node) DECL_ORIGINAL_TYPE (decl) = DECL_ORIGINAL_TYPE (TYPE_NAME (t)); else DECL_ORIGINAL_TYPE (decl) = t; - /* Remark the canonical fat pointer type as artificial. */ - if (TYPE_IS_FAT_POINTER_P (t)) + /* Remark the canonical fat or extended pointer type as artificial. */ + if (TYPE_IS_FAT_POINTER_P (t) || TYPE_IS_EXTENDED_POINTER_P (t)) TYPE_ARTIFICIAL (t) = 1; t = NULL_TREE; } @@ -1725,6 +1779,7 @@ maybe_pad_type (tree type, tree size, unsigned int align, if (align > 0 && RECORD_OR_UNION_TYPE_P (type) && !TYPE_IS_FAT_POINTER_P (type) + && !TYPE_IS_EXTENDED_POINTER_P (type) && TYPE_MODE (type) == BLKmode && !TYPE_BY_REFERENCE_P (type) && TREE_CODE (orig_size) == INTEGER_CST @@ -1795,7 +1850,7 @@ maybe_pad_type (tree type, tree size, unsigned int align, is a compilation artifact. */ size_unit = create_var_decl (concat_name (name, "XVZ"), NULL_TREE, sizetype, - size_unit, true, global_bindings_p (), + size_unit, true, global_bindings_p (), false, !definition && global_bindings_p (), false, false, true, true, NULL, gnat_entity, false); TYPE_SIZE_UNIT (record) = size_unit; @@ -2119,6 +2174,25 @@ finish_fat_pointer_type (tree record_type, tree field_list) TYPE_CONTAINS_PLACEHOLDER_INTERNAL (record_type) = 2; } +/* Given a record type RECORD_TYPE and a list of FIELD_DECL nodes FIELD_LIST, + finish constructing the record type as an extended access type. */ + +void +finish_extended_pointer_type (tree record_type, tree field_list) +{ + /* Show what it really is. */ + TYPE_EXTENDED_POINTER_P (record_type) = 1; + + /* Do not emit debug info for it since the types of its fields may still be + incomplete at this point. */ + finish_record_type (record_type, field_list, 0, false); + + /* Force type_contains_placeholder_p to return true on it. Although the + PLACEHOLDER_EXPRs are referenced only indirectly, this isn't a pointer + type but the representation of the unconstrained array. */ + TYPE_CONTAINS_PLACEHOLDER_INTERNAL (record_type) = 2; +} + /* Clear DECL_BIT_FIELD flag and associated markers on FIELD, which is a field of aggregate type TYPE. */ @@ -2219,6 +2293,7 @@ finish_record_type (tree record_type, tree field_list, int rep_level, if (RECORD_OR_UNION_TYPE_P (type) && !TYPE_FAT_POINTER_P (type) + && !TYPE_EXTENDED_POINTER_P (type) && !TYPE_CONTAINS_TEMPLATE_P (type) && TYPE_ADA_SIZE (type)) this_ada_size = TYPE_ADA_SIZE (type); @@ -2355,6 +2430,7 @@ finish_record_type (tree record_type, tree field_list, int rep_level, { /* Now set any of the values we've just computed that apply. */ if (!TYPE_FAT_POINTER_P (record_type) + && !TYPE_EXTENDED_POINTER_P (record_type) && !TYPE_CONTAINS_TEMPLATE_P (record_type)) SET_TYPE_ADA_SIZE (record_type, ada_size); } @@ -2919,6 +2995,9 @@ create_type_decl (tree name, tree type, bool artificial_p, bool debug_info_p, definition to be made visible outside of the current compilation unit, for instance variable definitions in a package specification. + LINKONCE_FLAG is true if the entity can be defined in multiple compilation + units without generating a linker error. + EXTERN_FLAG is true when processing an external variable declaration (as opposed to a definition: no storage is to be allocated for the variable). @@ -2937,10 +3016,11 @@ create_type_decl (tree name, tree type, bool artificial_p, bool debug_info_p, tree create_var_decl (tree name, tree asm_name, tree type, tree init, - bool const_flag, bool public_flag, bool extern_flag, - bool static_flag, bool volatile_flag, bool artificial_p, - bool debug_info_p, struct attrib *attr_list, - Node_Id gnat_node, bool const_decl_allowed_p) + bool const_flag, bool public_flag, bool linkonce_flag, + bool extern_flag, bool static_flag, bool volatile_flag, + bool artificial_p, bool debug_info_p, + struct attrib *attr_list, Node_Id gnat_node, + bool const_decl_allowed_p) { /* Whether the object has static storage duration, either explicitly or by virtue of being declared at the global level. */ @@ -2971,9 +3051,8 @@ create_var_decl (tree name, tree asm_name, tree type, tree init, and may be used for scalars in general but not for aggregates. */ tree var_decl = build_decl (input_location, - (constant_p - && const_decl_allowed_p - && !AGGREGATE_TYPE_P (type) ? CONST_DECL : VAR_DECL), + constant_p && const_decl_allowed_p && !AGGREGATE_TYPE_P (type) + ? CONST_DECL : VAR_DECL, name, type); /* Detect constants created by the front-end to hold 'reference to function @@ -3055,6 +3134,13 @@ create_var_decl (tree name, tree asm_name, tree type, tree init, != null_pointer_node)) DECL_IGNORED_P (var_decl) = 1; + /* Note that make_decl_one_only forces TREE_PUBLIC on the DECL. */ + if (linkonce_flag && VAR_P (var_decl)) + { + gcc_checking_assert (TREE_PUBLIC (var_decl)); + make_decl_one_only (var_decl, var_decl); + } + /* ??? Some attributes cannot be applied to CONST_DECLs. */ if (VAR_P (var_decl)) process_attributes (&var_decl, &attr_list, true, gnat_node); @@ -3591,6 +3677,9 @@ create_label_decl (tree name, Node_Id gnat_node) PUBLIC_FLAG is true if this is for a reference to a public entity or for a definition to be made visible outside of the current compilation unit. + LINKONCE_FLAG is true if the entity can be defined in multiple compilation + units without generating a linker error. + EXTERN_FLAG is true when processing an external subprogram declaration. ARTIFICIAL_P is true if the subprogram was generated by the compiler. @@ -3606,9 +3695,9 @@ create_label_decl (tree name, Node_Id gnat_node) tree create_subprog_decl (tree name, tree asm_name, tree type, tree param_decl_list, enum inline_status_t inline_status, bool public_flag, - bool extern_flag, bool artificial_p, bool debug_info_p, - bool definition, struct attrib *attr_list, - Node_Id gnat_node) + bool linkonce_flag, bool extern_flag, bool artificial_p, + bool debug_info_p, bool definition, + struct attrib *attr_list, Node_Id gnat_node) { tree subprog_decl = build_decl (input_location, FUNCTION_DECL, name, type); DECL_ARGUMENTS (subprog_decl) = param_decl_list; @@ -3661,6 +3750,13 @@ create_subprog_decl (tree name, tree asm_name, tree type, tree param_decl_list, gcc_unreachable (); } + /* Note that make_decl_one_only forces TREE_PUBLIC on the DECL. */ + if (linkonce_flag) + { + gcc_checking_assert (TREE_PUBLIC (subprog_decl)); + make_decl_one_only (subprog_decl, subprog_decl); + } + process_attributes (&subprog_decl, &attr_list, true, gnat_node); /* Once everything is processed, finish the subprogram declaration. */ @@ -4483,20 +4579,23 @@ build_unc_object_type (tree template_type, tree object_type, tree name, return type; } -/* Same, taking a thin or fat pointer type instead of a template type. */ +/* Same, taking a pointer type instead of a template type. */ tree -build_unc_object_type_from_ptr (tree thin_fat_ptr_type, tree object_type, - tree name, bool debug_info_p) +build_unc_object_type_from_ptr (tree ptr_type, tree object_type, tree name, + bool debug_info_p) { tree template_type; - gcc_assert (TYPE_IS_FAT_OR_THIN_POINTER_P (thin_fat_ptr_type)); - - template_type - = (TYPE_IS_FAT_POINTER_P (thin_fat_ptr_type) - ? TREE_TYPE (TREE_TYPE (DECL_CHAIN (TYPE_FIELDS (thin_fat_ptr_type)))) - : TREE_TYPE (TYPE_FIELDS (TREE_TYPE (thin_fat_ptr_type)))); + if (TYPE_IS_EXTENDED_POINTER_P (ptr_type)) + template_type = TREE_TYPE (DECL_CHAIN (TYPE_FIELDS (ptr_type))); + else if (TYPE_IS_FAT_POINTER_P (ptr_type)) + template_type + = TREE_TYPE (TREE_TYPE (DECL_CHAIN (TYPE_FIELDS (ptr_type)))); + else if (TYPE_IS_THIN_POINTER_P (ptr_type)) + template_type = TREE_TYPE (TYPE_FIELDS (TREE_TYPE (ptr_type))); + else + gcc_unreachable (); return build_unc_object_type (template_type, object_type, name, true, @@ -4652,6 +4751,9 @@ convert_to_fat_pointer (tree type, tree expr) vec *v; vec_alloc (v, 2); + /* We don't allow conversion from extended to fat pointers. */ + gcc_assert (!TYPE_IS_EXTENDED_POINTER_P (etype)); + /* If EXPR is null, make a fat pointer that contains a null pointer to the array (compare_fat_pointers ensures that this is the full discriminant) and a valid pointer to the bounds. This latter property is necessary @@ -4743,6 +4845,101 @@ convert_to_fat_pointer (tree type, tree expr) return gnat_build_constructor (type, v); } +/* Convert EXPR, a pointer to a constrained array, into a pointer to an + unconstrained one using an extended access. This involves making or + finding a template. */ + +static tree +convert_to_extended_pointer (tree type, tree expr) +{ + tree template_type = TREE_TYPE (DECL_CHAIN (TYPE_FIELDS (type))); + tree p_array_type = TREE_TYPE (TYPE_FIELDS (type)); + tree etype = TREE_TYPE (expr); + tree template_val; + vec *v; + vec_alloc (v, 2); + + /* If EXPR is null, make a fat pointer that contains a null pointer to the + array (compare_fat_pointers ensures that this is the full discriminant) + and a valid pointer to the bounds. This latter property is necessary + since the compiler can hoist the load of the bounds done through it. */ + if (integer_zerop (expr)) + { + tree template_type = TREE_TYPE (DECL_CHAIN (TYPE_FIELDS (type))); + tree null_bounds, t; + + null_bounds = build_constructor (template_type, NULL); + TREE_CONSTANT (null_bounds) = TREE_STATIC (null_bounds) = 1; + + CONSTRUCTOR_APPEND_ELT (v, TYPE_FIELDS (type), + fold_convert (p_array_type, null_pointer_node)); + CONSTRUCTOR_APPEND_ELT (v, DECL_CHAIN (TYPE_FIELDS (type)) , null_bounds); + t = build_constructor (type, v); + /* Do not set TREE_CONSTANT so as to force T to static memory. */ + TREE_CONSTANT (t) = 0; + TREE_STATIC (t) = 1; + + return t; + } + + /* If EXPR is a thin pointer, make template and data from the record. */ + if (TYPE_IS_THIN_POINTER_P (etype)) + { + tree field = TYPE_FIELDS (TREE_TYPE (etype)); + + expr = gnat_protect_expr (expr); + + /* If we have a TYPE_UNCONSTRAINED_ARRAY attached to the RECORD_TYPE, + the thin pointer value has been shifted so we shift it back to get + the template address. */ + if (TYPE_UNCONSTRAINED_ARRAY (TREE_TYPE (etype))) + { + tree template_addr + = fold_convert (TREE_TYPE (DECL_CHAIN (TYPE_FIELDS (type))), expr); + template_val = build_unary_op (INDIRECT_REF, NULL_TREE, template_addr); + } + + /* Otherwise we explicitly take the address of the fields. */ + else + { + expr = build_unary_op (INDIRECT_REF, NULL_TREE, expr); + + template_val = build_component_ref (expr, field, true); + + expr = build_unary_op (ADDR_EXPR, NULL_TREE, + build_component_ref (expr, DECL_CHAIN (field), + false)); + } + } + + else if (TYPE_IS_FAT_POINTER_P (etype)) + template_val + = build_unary_op (INDIRECT_REF, NULL_TREE, + build_component_ref (expr, + DECL_CHAIN (TYPE_FIELDS (etype)), + false)); + + /* Otherwise, build the constructor for the template. */ + else + template_val = build_template (template_type, TREE_TYPE (etype), expr); + + /* The final result is a constructor for the extended pointer. + + If EXPR is an argument of a foreign convention subprogram, the type it + points to is directly the component type. In this case, the expression + type may not match the corresponding FIELD_DECL type at this point, so we + call "convert" here to fix that up if necessary. This type consistency is + required, for instance because it ensures that possible later folding of + COMPONENT_REFs against this constructor always yields something of the + same type as the initial reference. + + Note that the call to "build_template" above is still fine because it + will only refer to the provided TEMPLATE_TYPE in this case. */ + CONSTRUCTOR_APPEND_ELT (v, TYPE_FIELDS (type), convert (p_array_type, expr)); + CONSTRUCTOR_APPEND_ELT (v, DECL_CHAIN (TYPE_FIELDS (type)), template_val); + return gnat_build_constructor (type, v); +} + /* Create an expression whose value is that of EXPR, converted to type TYPE. The TREE_TYPE of the value is always TYPE. This function implements all reasonable @@ -5122,6 +5319,8 @@ convert (tree type, tree expr) /* Check for converting to a pointer to an unconstrained array. */ if (TYPE_IS_FAT_POINTER_P (type) && !TYPE_IS_FAT_POINTER_P (etype)) return convert_to_fat_pointer (type, expr); + if (TYPE_IS_EXTENDED_POINTER_P (type) && !TYPE_IS_EXTENDED_POINTER_P (etype)) + return convert_to_extended_pointer (type, expr); /* If we are converting between two aggregate or vector types that are mere variants, just make a VIEW_CONVERT_EXPR. Likewise when we are converting @@ -5139,14 +5338,25 @@ convert (tree type, tree expr) But don't do it if we are just annotating types since tagged types aren't fully laid out in this mode. */ else if (ecode == RECORD_TYPE && code == RECORD_TYPE - && TYPE_ALIGN_OK (etype) && TYPE_ALIGN_OK (type) + && type_is_tagged_or_cw_equivalent (etype) + && type_is_tagged_or_cw_equivalent (type) && !type_annotate_only) { tree child_etype = etype; + /* Loop through the nested _Parent fields until we find one with either + directly the right type (simple record case), or only the right size + (discriminated record case), and extract it to be the new expression. + Note that build_component_ref will automatically build the chain of + COMPONENT_REFs in the case where it is not the immediate parent. */ do { tree field = TYPE_FIELDS (child_etype); - if (DECL_NAME (field) == parent_name_id && TREE_TYPE (field) == type) - return build_component_ref (expr, field, false); + if (DECL_NAME (field) == parent_name_id) + { + if (TREE_TYPE (field) == type) + return build_component_ref (expr, field, false); + if (operand_equal_p (DECL_SIZE (field), TYPE_SIZE (type), 0)) + return convert (type, build_component_ref (expr, field, false)); + } child_etype = TREE_TYPE (field); } while (TREE_CODE (child_etype) == RECORD_TYPE); } @@ -5263,7 +5473,7 @@ convert (tree type, tree expr) /* If converting fat pointer to normal or thin pointer, get the pointer to the array and then convert it. */ - if (TYPE_IS_FAT_POINTER_P (etype)) + if (TYPE_IS_FAT_POINTER_P (etype) || TYPE_IS_EXTENDED_POINTER_P (etype)) expr = build_component_ref (expr, TYPE_FIELDS (etype), false); return fold (convert_to_pointer (type, expr)); @@ -5327,20 +5537,30 @@ convert (tree type, tree expr) } /* If EXPR is a constrained array, take its address, convert it to a - fat pointer, and then dereference it. Likewise if EXPR is a - record containing both a template and a constrained array. - Note that a record representing a justified modular type - always represents a packed constrained array. */ + fat or extended pointer, and then dereference it. Likewise if + EXPR is a record containing both a template and a constrained + array. Note that a record representing a justified modular type + always represents a packed constrained array. */ if (ecode == ARRAY_TYPE || (ecode == INTEGER_TYPE && TYPE_HAS_ACTUAL_BOUNDS_P (etype)) || (ecode == RECORD_TYPE && TYPE_CONTAINS_TEMPLATE_P (etype)) || (ecode == RECORD_TYPE && TYPE_JUSTIFIED_MODULAR_P (etype))) - return - build_unary_op - (INDIRECT_REF, NULL_TREE, - convert_to_fat_pointer (TREE_TYPE (type), - build_unary_op (ADDR_EXPR, - NULL_TREE, expr))); + { + if (TYPE_IS_EXTENDED_POINTER_P (TREE_TYPE (type))) + return + build_unary_op + (INDIRECT_REF, NULL_TREE, + convert_to_extended_pointer (TREE_TYPE (type), + build_unary_op (ADDR_EXPR, + NULL_TREE, expr))); + else + return + build_unary_op + (INDIRECT_REF, NULL_TREE, + convert_to_fat_pointer (TREE_TYPE (type), + build_unary_op (ADDR_EXPR, + NULL_TREE, expr))); + } /* Do something very similar for converting one unconstrained array to another. */ diff --git a/gcc/ada/gcc-interface/utils2.cc b/gcc/ada/gcc-interface/utils2.cc index 58418ea7236b..8f2ad7b3b8ac 100644 --- a/gcc/ada/gcc-interface/utils2.cc +++ b/gcc/ada/gcc-interface/utils2.cc @@ -1041,9 +1041,7 @@ build_binary_op (enum tree_code op_code, tree result_type, } /* If a class-wide type may be involved, force use of the RHS type. */ - if ((TREE_CODE (right_type) == RECORD_TYPE - || TREE_CODE (right_type) == UNION_TYPE) - && TYPE_ALIGN_OK (right_type)) + if (type_is_tagged_or_cw_equivalent (right_type)) operation_type = right_type; /* If we are copying between padded objects with compatible types, use @@ -1118,7 +1116,7 @@ build_binary_op (enum tree_code op_code, tree result_type, == TREE_CODE (operand_type (result)) && TYPE_MODE (restype) == TYPE_MODE (operand_type (result)))) - || TYPE_ALIGN_OK (restype)))) + || type_is_tagged_or_cw_equivalent (restype)))) result = TREE_OPERAND (result, 0); else if (TREE_CODE (result) == VIEW_CONVERT_EXPR) @@ -1296,6 +1294,14 @@ build_binary_op (enum tree_code op_code, tree result_type, best_type = left_base_type; } + else if (TYPE_IS_EXTENDED_POINTER_P (left_base_type) + && TYPE_IS_EXTENDED_POINTER_P (right_base_type)) + { + gcc_assert (TYPE_MAIN_VARIANT (left_base_type) + == TYPE_MAIN_VARIANT (right_base_type)); + best_type = left_base_type; + } + else if (POINTER_TYPE_P (left_base_type) && POINTER_TYPE_P (right_base_type)) { @@ -1737,7 +1743,7 @@ build_unary_op (enum tree_code op_code, tree result_type, tree operand) /* If we want to refer to an unconstrained array, use the appropriate expression. But this will never survive down to the back-end. */ - if (TYPE_IS_FAT_POINTER_P (type)) + if (TYPE_IS_FAT_POINTER_P (type) || TYPE_IS_EXTENDED_POINTER_P (type)) { result = build1 (UNCONSTRAINED_ARRAY_REF, TYPE_UNCONSTRAINED_ARRAY (type), operand); @@ -1756,7 +1762,9 @@ build_unary_op (enum tree_code op_code, tree result_type, tree operand) TREE_READONLY (result) = TYPE_READONLY (TREE_TYPE (type)); } - if (!TYPE_IS_FAT_POINTER_P (type) && TYPE_VOLATILE (TREE_TYPE (type))) + if (!TYPE_IS_FAT_POINTER_P (type) + && !TYPE_IS_EXTENDED_POINTER_P (type) + && TYPE_VOLATILE (TREE_TYPE (type))) { TREE_SIDE_EFFECTS (result) = 1; if (INDIRECT_REF_P (result)) @@ -2609,7 +2617,8 @@ build_allocator (tree type, tree init, tree result_type, Entity_Id gnat_proc, /* If RESULT_TYPE is a fat or thin pointer, set SIZE to be the sum of the sizes of the object and its template. Allocate the whole thing and fill in the parts that are known. */ - else if (TYPE_IS_FAT_OR_THIN_POINTER_P (result_type)) + else if (TYPE_IS_FAT_OR_THIN_POINTER_P (result_type) + || TYPE_IS_EXTENDED_POINTER_P (result_type)) { tree storage_type = build_unc_object_type_from_ptr (result_type, type, @@ -3055,7 +3064,8 @@ gnat_save_expr (tree exp) This may be more efficient, but will also allow us to more easily find the match for the PLACEHOLDER_EXPR. */ if (code == COMPONENT_REF - && TYPE_IS_FAT_POINTER_P (TREE_TYPE (TREE_OPERAND (exp, 0)))) + && (TYPE_IS_FAT_POINTER_P (TREE_TYPE (TREE_OPERAND (exp, 0))) + || TYPE_IS_EXTENDED_POINTER_P (TREE_TYPE (TREE_OPERAND (exp, 0))))) return build3 (code, type, gnat_save_expr (TREE_OPERAND (exp, 0)), TREE_OPERAND (exp, 1), NULL_TREE); @@ -3124,7 +3134,8 @@ gnat_protect_expr (tree exp) This may be more efficient, but will also allow us to more easily find the match for the PLACEHOLDER_EXPR. */ if (code == COMPONENT_REF - && TYPE_IS_FAT_POINTER_P (TREE_TYPE (TREE_OPERAND (exp, 0)))) + && (TYPE_IS_FAT_POINTER_P (TREE_TYPE (TREE_OPERAND (exp, 0))) + || TYPE_IS_EXTENDED_POINTER_P (TREE_TYPE (TREE_OPERAND (exp, 0))))) return build3 (code, type, gnat_protect_expr (TREE_OPERAND (exp, 0)), TREE_OPERAND (exp, 1), NULL_TREE); @@ -3132,6 +3143,7 @@ gnat_protect_expr (tree exp) for a CALL_EXPR as large objects are returned via invisible reference in most ABIs so the temporary will directly be filled by the callee. */ if (TYPE_IS_FAT_POINTER_P (type) + || TYPE_IS_EXTENDED_POINTER_P (type) || !AGGREGATE_TYPE_P (type) || code == CALL_EXPR) return save_expr (exp); @@ -3168,7 +3180,8 @@ gnat_stabilize_reference_1 (tree e, void *data) fat pointer. This may be more efficient, but will also allow us to more easily find the match for the PLACEHOLDER_EXPR. */ if (code == COMPONENT_REF - && TYPE_IS_FAT_POINTER_P (TREE_TYPE (TREE_OPERAND (e, 0)))) + && (TYPE_IS_FAT_POINTER_P (TREE_TYPE (TREE_OPERAND (e, 0))) + || TYPE_IS_EXTENDED_POINTER_P (TREE_TYPE (TREE_OPERAND (e, 0))))) result = build3 (code, type, gnat_stabilize_reference_1 (TREE_OPERAND (e, 0), data), diff --git a/gcc/ada/gen_il-fields.ads b/gcc/ada/gen_il-fields.ads index a1e284f14e46..6cd1355d1192 100644 --- a/gcc/ada/gen_il-fields.ads +++ b/gcc/ada/gen_il-fields.ads @@ -72,6 +72,7 @@ package Gen_IL.Fields is Ancestor_Part, Atomic_Sync_Required, Array_Aggregate, + Aspect_Ghost_Assertion_Level, Aspect_On_Partial_View, Aspect_Rep_Item, Aspect_Specifications, @@ -281,6 +282,7 @@ package Gen_IL.Fields is Is_SPARK_Mode_On_Node, Is_Static_Coextension, Is_Static_Expression, + Is_Structural, Is_Subprogram_Descriptor, Is_Task_Allocation_Block, Is_Task_Body_Procedure, @@ -336,8 +338,10 @@ package Gen_IL.Fields is Null_Statement, Object_Definition, Of_Present, + Original_Aspect, Original_Discriminant, Original_Entity, + Original_Pragma, Others_Discrete_Choices, Out_Present, Parameter_Associations, @@ -347,6 +351,7 @@ package Gen_IL.Fields is Parent_With, Position, Pragma_Argument_Associations, + Pragma_Ghost_Assertion_Level, Pragma_Identifier, Pragmas_After, Pragmas_Before, @@ -463,6 +468,7 @@ package Gen_IL.Fields is Can_Never_Be_Null, Can_Use_Internal_Rep, Checks_May_Be_Suppressed, + Child_Levels, Class_Postconditions, Class_Preconditions, Class_Preconditions_Subprogram, @@ -557,6 +563,7 @@ package Gen_IL.Fields is Full_View, Generic_Homonym, Generic_Renamings, + Ghost_Assertion_Level, Has_Aliased_Components, Has_Alignment_Clause, Has_All_Calls_Remote, @@ -651,6 +658,7 @@ package Gen_IL.Fields is Has_Thunks, Has_Unchecked_Union, Has_Unknown_Discriminants, + Has_Unsigned_Base_Range_Aspect, Has_Visible_Refinement, Has_Volatile_Components, Has_Xref_Entry, @@ -736,6 +744,7 @@ package Gen_IL.Fields is Is_Immediately_Visible, Is_Implementation_Defined, Is_Implicit_Full_View, + Is_Implicit_Ghost, Is_Imported, Is_Independent, Is_Initial_Condition_Procedure, @@ -755,6 +764,7 @@ package Gen_IL.Fields is Is_Limited_Composite, Is_Limited_Interface, Is_Limited_Record, + Is_Link_Once, Is_Local_Anonymous_Access, Is_Loop_Parameter, Is_Machine_Code_Subprogram, @@ -860,6 +870,7 @@ package Gen_IL.Fields is Overridden_Operation, Package_Instantiation, Packed_Array_Impl_Type, + Parent_Levels, Parent_Subtype, Part_Of_Constituents, Part_Of_References, diff --git a/gcc/ada/gen_il-gen-gen_entities.adb b/gcc/ada/gen_il-gen-gen_entities.adb index 0fedfbc60992..bd091cbe823f 100644 --- a/gcc/ada/gen_il-gen-gen_entities.adb +++ b/gcc/ada/gen_il-gen-gen_entities.adb @@ -63,6 +63,7 @@ begin -- Gen_IL.Gen.Gen_Entities Sm (First_Rep_Item, Node_Id), Sm (Freeze_Node, Node_Id), Sm (From_Limited_With, Flag), + Sm (Ghost_Assertion_Level, Node_Id), Sm (Has_Aliased_Components, Flag, Impl_Base_Type_Only), Sm (Has_Alignment_Clause, Flag), Sm (Has_All_Calls_Remote, Flag), @@ -158,6 +159,7 @@ begin -- Gen_IL.Gen.Gen_Entities Sm (Is_Ignored_Ghost_Entity, Flag), Sm (Is_Immediately_Visible, Flag), Sm (Is_Implementation_Defined, Flag), + Sm (Is_Implicit_Ghost, Flag), Sm (Is_Imported, Flag), Sm (Is_Independent, Flag), Sm (Is_Inlined, Flag), @@ -173,6 +175,7 @@ begin -- Gen_IL.Gen.Gen_Entities Sm (Is_Limited_Composite, Flag), Sm (Is_Limited_Interface, Flag), Sm (Is_Limited_Record, Flag), + Sm (Is_Link_Once, Flag), Sm (Is_Loop_Parameter, Flag), Sm (Is_Obsolescent, Flag), Sm (Is_Package_Body_Entity, Flag), @@ -496,6 +499,8 @@ begin -- Gen_IL.Gen.Gen_Entities Sm (Has_Static_Predicate, Flag), Sm (Has_Static_Predicate_Aspect, Flag), Sm (Has_Unknown_Discriminants, Flag), + Sm (Has_Unsigned_Base_Range_Aspect, Flag, + Pre => "Is_Type (N)"), Sm (Interface_Name, Node_Id), Sm (Is_Abstract_Type, Flag), Sm (Is_Actual_Subtype, Flag), @@ -1344,6 +1349,17 @@ begin -- Gen_IL.Gen.Gen_Entities Sm (SPARK_Pragma, Node_Id), Sm (SPARK_Pragma_Inherited, Flag))); + Cc (E_Assertion_Level, Entity_Kind, + -- An assertion level. Used to associate a level indicator to an + -- assertion like construct. Constructs assigned with a certain level + -- can be disabled through pragma Assertion_Policy. Levels can form a + -- hierarchy. A declaration of a level can include a list of levels + -- this level depends on known as the Parent_Levels. An opposite list + -- is also kept to store all the levels that depend on it known as the + -- Child_Levels. + (Sm (Child_Levels, Elist_Id), + Sm (Parent_Levels, Elist_Id))); + -- Union types. These don't fit into the normal parent/child hierarchy -- above. diff --git a/gcc/ada/gen_il-gen-gen_nodes.adb b/gcc/ada/gen_il-gen-gen_nodes.adb index 412565f42a8b..9ce2511a5617 100644 --- a/gcc/ada/gen_il-gen-gen_nodes.adb +++ b/gcc/ada/gen_il-gen-gen_nodes.adb @@ -687,13 +687,14 @@ begin -- Gen_IL.Gen.Gen_Nodes (Sy (Defining_Unit_Name, Node_Id), Sy (Name, Node_Id, Default_Empty), Sy (Generic_Associations, List_Id, Default_No_List), + Sm (Parent_Spec, Node_Id), Sm (Instance_Spec, Node_Id), Sm (Is_Declaration_Level_Node, Flag), Sm (Is_Elaboration_Checks_OK_Node, Flag), Sm (Is_Elaboration_Warnings_OK_Node, Flag), Sm (Is_Known_Guaranteed_ABE, Flag), Sm (Is_SPARK_Mode_On_Node, Flag), - Sm (Parent_Spec, Node_Id))); + Sm (Is_Structural, Flag))); Ab (N_Subprogram_Instantiation, N_Generic_Instantiation, (Sy (Must_Override, Flag), @@ -1127,6 +1128,7 @@ begin -- Gen_IL.Gen.Gen_Nodes (Sy (Identifier, Node_Id, Default_Empty), Sy (Expression, Node_Id, Default_Empty), Sy (Class_Present, Flag), + Sm (Aspect_Ghost_Assertion_Level, Node_Id), Sm (Aspect_On_Partial_View, Flag), Sm (Aspect_Rep_Item, Node_Id), Sm (Aspect_Subprograms, Elist_Id), @@ -1137,7 +1139,8 @@ begin -- Gen_IL.Gen.Gen_Nodes Sm (Is_Delayed_Aspect, Flag), Sm (Is_Disabled, Flag), Sm (Is_Ignored, Flag), - Sm (Next_Rep_Item, Node_Id))); + Sm (Next_Rep_Item, Node_Id), + Sm (Original_Aspect, Node_Id))); Cc (N_Call_Marker, Node_Kind, (Sm (Is_Declaration_Level_Node, Flag), @@ -1444,6 +1447,8 @@ begin -- Gen_IL.Gen.Gen_Nodes Sm (Is_Ignored_Ghost_Pragma, Flag), Sm (Next_Pragma, Node_Id), Sm (Next_Rep_Item, Node_Id), + Sm (Original_Pragma, Node_Id), + Sm (Pragma_Ghost_Assertion_Level, Node_Id), Sm (Uneval_Old_Accept, Flag), Sm (Uneval_Old_Warn, Flag))); diff --git a/gcc/ada/gen_il-internals.adb b/gcc/ada/gen_il-internals.adb index 3fa8b9405427..77685f25c6a2 100644 --- a/gcc/ada/gen_il-internals.adb +++ b/gcc/ada/gen_il-internals.adb @@ -291,6 +291,8 @@ package body Gen_IL.Internals is return "Has_RACW"; when Has_SP_Choice => return "Has_SP_Choice"; + when Has_Unsigned_Base_Range_Aspect => + return "Has_Unsigned_Base_Range_Aspect"; when Ignore_SPARK_Mode_Pragmas => return "Ignore_SPARK_Mode_Pragmas"; when Is_CPP_Class => diff --git a/gcc/ada/gen_il-types.ads b/gcc/ada/gen_il-types.ads index c3a97558f702..66d912721fa6 100644 --- a/gcc/ada/gen_il-types.ads +++ b/gcc/ada/gen_il-types.ads @@ -445,6 +445,7 @@ package Gen_IL.Types is -- Concrete entity types: E_Void, + E_Assertion_Level, E_Component, E_Constant, E_Discriminant, diff --git a/gcc/ada/ghost.adb b/gcc/ada/ghost.adb index f9c285316cd5..e7a55efb4beb 100644 --- a/gcc/ada/ghost.adb +++ b/gcc/ada/ghost.adb @@ -38,12 +38,12 @@ with Sem_Aux; use Sem_Aux; with Sem_Disp; use Sem_Disp; with Sem_Eval; use Sem_Eval; with Sem_Prag; use Sem_Prag; -with Sem_Res; use Sem_Res; with Sem_Util; use Sem_Util; with Sinfo; use Sinfo; with Sinfo.Nodes; use Sinfo.Nodes; with Sinfo.Utils; use Sinfo.Utils; with Snames; use Snames; +with Stand; use Stand; with Table; package body Ghost is @@ -63,18 +63,64 @@ package body Ghost is Table_Increment => Alloc.Ignored_Ghost_Nodes_Increment, Table_Name => "Ignored_Ghost_Nodes"); + --------------------- + -- Local variables -- + --------------------- + + Assertion_Level_Error_Msg : constant String := + "incompatible assertion levels in effect"; + + Ghost_Policy_Error_Msg : constant String := + "incompatible ghost policies in effect"; + ----------------------- -- Local subprograms -- ----------------------- - procedure Install_Ghost_Mode (Mode : Ghost_Mode_Type); - pragma Inline (Install_Ghost_Mode); - -- Install Ghost mode Mode as the Ghost mode in effect - - procedure Install_Ghost_Region (Mode : Name_Id; N : Node_Id); + function Assertion_Level_To_Name (Level : Entity_Id) return Name_Id; + -- Returns No_Name if there is no Level or the name of the Level. + + procedure Check_Valid_Ghost_Declaration (N : Node_Id); + -- Check that the declaration for a Ghost node N has a valid + -- Assertion_Policy and a valid Assertion_Level. + + function Get_Ghost_Aspect (N : Node_Id) return Node_Id; + -- Returns the Ghost aspect for a given node if it has one. + + function Get_Ghost_Pragma (N : Node_Id) return Node_Id; + -- Return the Ghost pragma following this node. + + function Get_Ghost_Assertion_Level (N : Node_Id) return Entity_Id; + -- Returns the Assertion_Level entity if the node has a Ghost aspect and + -- the Ghost aspect is using an Assertion_Level. + + function Ghost_Assertion_Level_In_Effect (Id : Entity_Id) return Entity_Id; + -- Returns the ghost level applicable for the given entity Id in a similar + -- manner as Ghost_Policy_In_Effect. + + function Ghost_Policy_In_Effect (Id : Entity_Id) return Name_Id; + -- Returns the ghost policy applicable for the given entity Id. + -- + -- SPARK RM 6.9 (3): + -- + -- An object declaration which occurs inside an expression in a ghost + -- declaration, statement, assertion pragma or specification aspect + -- declaration is a ghost declaration. + -- + -- If this declaration does not have the Ghost aspect specified, the + -- assertion policy applicable to this declaration comes from the policy + -- applicable to the enclosing declaration, statement, assertion pragma + -- or specification aspect. + -- + -- Otherwise, the assertion policy applicable to an object declaration + -- comes either from its assertion level if any, or from the ghost + -- policy at the point of declaration. + + procedure Install_Ghost_Region + (Mode : Name_Id; N : Node_Id; Level : Entity_Id); pragma Inline (Install_Ghost_Region); -- Install a Ghost region comprised of mode Mode and ignored region start - -- node N. + -- node N and Level as the Assertion_Level that was associated with it. function Is_Subject_To_Ghost (N : Node_Id) return Boolean; -- Determine whether declaration or body N is subject to aspect or pragma @@ -82,17 +128,84 @@ package body Ghost is -- been analyzed yet, but the context needs to establish the "ghostness" -- of N. + procedure Mark_And_Set_Ghost_Region (N : Node_Id; Id : Entity_Id); + -- Install a new ghost region for N based on the active policy applied for + -- Id. Additionally if the policy is ignored mark and set the node as an + -- ignored ghost region. + procedure Mark_Ghost_Declaration_Or_Body - (N : Node_Id; - Mode : Name_Id); + (N : Node_Id; + Mode : Name_Id; + Level : Entity_Id); -- Mark the defining entity of declaration or body N as Ghost depending on -- mode Mode. Mark all formals parameters when N denotes a subprogram or a - -- body. + -- body. Additionally set level as the Ghost_Assertion_Level for all of + -- them. procedure Record_Ignored_Ghost_Node (N : Node_Or_Entity_Id); -- Save ignored Ghost node or entity N in table Ignored_Ghost_Nodes for -- later elimination. + ------------------------------ + -- Assertion_Level_From_Arg -- + ------------------------------ + + function Assertion_Level_From_Arg (Arg : Node_Id) return Entity_Id is + Expr : constant Node_Id := Get_Pragma_Arg (Arg); + Level : Entity_Id; + + begin + -- Aspect Ghost without an expression uses Standard_Level_Default + + if No (Expr) then + return Standard_Level_Default; + end if; + + -- Check if the expression matches a static boolean expression first + + Preanalyze_And_Resolve_Without_Errors (Expr); + if Is_OK_Static_Expression (Expr) then + if Is_True (Expr_Value (Expr)) then + return Standard_Level_Default; + else + -- Ghost => False is considered to be non-ghost + + return Empty; + end if; + end if; + + -- Alternatively the argument could be an Assertion_Level + + if Nkind (Expr) = N_Identifier then + Level := Get_Assertion_Level (Chars (Expr)); + if Present (Level) then + -- The identifier resolved to an assertion level. Override the + -- Any_Id from a failed resolution in pre-analysis. + + Set_Entity (Expr, Level); + return Level; + end if; + end if; + + -- We are dealing with a malformed ghost argument. + -- An error will be emitted when the pragma is analyzed. + + return Empty; + end Assertion_Level_From_Arg; + + ----------------------------- + -- Assertion_Level_To_Name -- + ----------------------------- + + function Assertion_Level_To_Name (Level : Entity_Id) return Name_Id is + begin + if No (Level) then + return No_Name; + end if; + + return Chars (Level); + end Assertion_Level_To_Name; + ---------------------------- -- Check_Ghost_Completion -- ---------------------------- @@ -101,33 +214,36 @@ package body Ghost is (Prev_Id : Entity_Id; Compl_Id : Entity_Id) is - Policy : constant Name_Id := Policy_In_Effect (Name_Ghost); + Policy : Name_Id; begin -- Nothing to do if one of the views is missing if No (Prev_Id) or else No (Compl_Id) then - null; + return; + end if; + + Policy := Ghost_Policy_In_Effect (Prev_Id); -- The Ghost policy in effect at the point of declaration and at the - -- point of completion must match (SPARK RM 6.9(16)). + -- point of completion must match (SPARK RM 6.9(19)). - elsif Is_Checked_Ghost_Entity (Prev_Id) + if Is_Checked_Ghost_Entity (Prev_Id) and then Policy = Name_Ignore then + Error_Msg_N (Ghost_Policy_Error_Msg, Prev_Id); + Error_Msg_Sloc := Sloc (Prev_Id); + Error_Msg_N ("\& declared # with ghost policy `Check`", Prev_Id); Error_Msg_Sloc := Sloc (Compl_Id); - - Error_Msg_N ("incompatible ghost policies in effect", Prev_Id); - Error_Msg_N ("\& declared with ghost policy `Check`", Prev_Id); Error_Msg_N ("\& completed # with ghost policy `Ignore`", Prev_Id); elsif Is_Ignored_Ghost_Entity (Prev_Id) and then Policy = Name_Check then + Error_Msg_N (Ghost_Policy_Error_Msg, Prev_Id); + Error_Msg_Sloc := Sloc (Prev_Id); + Error_Msg_N ("\& declared # with ghost policy `Ignore`", Prev_Id); Error_Msg_Sloc := Sloc (Compl_Id); - - Error_Msg_N ("incompatible ghost policies in effect", Prev_Id); - Error_Msg_N ("\& declared with ghost policy `Ignore`", Prev_Id); Error_Msg_N ("\& completed # with ghost policy `Check`", Prev_Id); end if; end Check_Ghost_Completion; @@ -144,7 +260,7 @@ package body Ghost is function Is_OK_Ghost_Context (Context : Node_Id) return Boolean; -- Determine whether node Context denotes a Ghost-friendly context where - -- a Ghost entity can safely reside (SPARK RM 6.9(10)). + -- a Ghost entity can safely reside (SPARK RM 6.9(13)). function In_Aspect_Or_Pragma_Predicate (N : Node_Id) return Boolean; -- Return True iff N is enclosed in an aspect or pragma Predicate @@ -162,9 +278,9 @@ package body Ghost is -- -- * Be subject to pragma Ghost - function Is_OK_Pragma (Prag : Node_Id; Id : Entity_Id) return Boolean; - -- Determine whether node Prag is a suitable context for a reference - -- to a Ghost entity Id. To qualify as such, Prag must either + function Is_OK_Pragma (Prag : Node_Id) return Boolean; + -- Determine whether node Prag is a suitable context for a ghost + -- reference. To qualify as such, Prag must either -- -- * Be an assertion expression pragma -- @@ -175,7 +291,8 @@ package body Ghost is -- -- * Contain a reference to a Ghost entity - function Is_OK_Statement (Stmt : Node_Id) return Boolean; + function Is_OK_Statement + (Stmt : Node_Id; Id : Entity_Id; Call_Arg : Node_Id) return Boolean; -- Determine whether node Stmt is a suitable context for a reference -- to a Ghost entity. To qualify as such, Stmt must either -- @@ -307,119 +424,224 @@ package body Ghost is -- Is_OK_Pragma -- ------------------ - function Is_OK_Pragma (Prag : Node_Id; Id : Entity_Id) return Boolean + function Is_OK_Pragma (Prag : Node_Id) return Boolean is - procedure Check_Policies (Prag_Nam : Name_Id); - -- Verify that the Ghost policy in effect at the point of the - -- declaration of Ghost entity Id (if present) is the same as the - -- assertion policy for pragma name Prag_Nam. Emit an error if - -- this is not the case. + Prag_Id : Pragma_Id; + Prag_Nam : Name_Id; - -------------------- - -- Check_Policies -- - -------------------- + begin + if Nkind (Prag) /= N_Pragma then + return False; + end if; - procedure Check_Policies (Prag_Nam : Name_Id) is - AP : constant Name_Id := Check_Kind (Prag_Nam); + -- if the entitiy associated with the pragma is ignored then we do + -- not need to analyze the pragma. - begin - -- If the Ghost policy in effect at the point of the - -- declaration of Ghost entity Id is Ignore, then the assertion - -- policy of the pragma must be Ignore (SPARK RM 6.9(20)). + if Is_Ignored_Ghost_Pragma (Prag) then + return True; + end if; - if Present (Id) - and then not Is_Checked_Ghost_Entity (Id) - and then AP /= Name_Ignore - then - Error_Msg_N - ("incompatible ghost policies in effect", - Ghost_Ref); - Error_Msg_NE - ("\ghost entity & has policy `Ignore`", - Ghost_Ref, Ghost_Id); + Prag_Id := Get_Pragma_Id (Prag); + Prag_Nam := Original_Aspect_Pragma_Name (Prag); - Error_Msg_Name_1 := AP; - Error_Msg_N - ("\assertion expression has policy %", Ghost_Ref); - end if; - end Check_Policies; + -- A pragma may not be analyzed, so that its Ghost status is + -- not determined yet, but it is guaranteed to be Ghost when + -- referencing a Ghost entity. - -- Local variables + if Suppressed_Ghost_Policy_Check_Pragma (Prag_Id) then + return True; - Prag_Id : Pragma_Id; - Prag_Nam : Name_Id; + -- An assertion expression pragma is Ghost when it contains a + -- reference to a Ghost entity (SPARK RM 6.9(13)), except for + -- predicate pragmas (SPARK RM 6.9(14)). + + elsif Is_Valid_Assertion_Kind (Prag_Nam) + and then Assertion_Expression_Pragma (Prag_Id) + and then Prag_Id /= Pragma_Predicate + then + return True; - -- Start of processing for Is_OK_Pragma + -- A pragma that applies to a Ghost construct or specifies an + -- aspect of a Ghost entity is a Ghost pragma (SPARK RM 6.9(4)) - begin - if Nkind (Prag) = N_Pragma then - Prag_Id := Get_Pragma_Id (Prag); - Prag_Nam := Original_Aspect_Pragma_Name (Prag); + elsif Is_Ghost_Pragma (Prag) then + return True; - -- A pragma that applies to a Ghost construct or specifies an - -- aspect of a Ghost entity is a Ghost pragma (SPARK RM 6.9(3)) + -- Several pragmas that may apply to a non-Ghost entity are + -- treated as Ghost when they contain a reference to a Ghost + -- entity (SPARK RM 6.9(18)). + + elsif Prag_Nam + in Name_Global + | Name_Depends + | Name_Initializes + | Name_Refined_Global + | Name_Refined_Depends + | Name_Refined_State + then + return True; + end if; - if Is_Ghost_Pragma (Prag) then - return True; + return False; + end Is_OK_Pragma; - -- A pragma may not be analyzed, so that its Ghost status is - -- not determined yet, but it is guaranteed to be Ghost when - -- referencing a Ghost entity. + --------------------- + -- Is_OK_Statement -- + --------------------- - elsif Prag_Nam in Name_Annotate - | Name_Compile_Time_Error - | Name_Compile_Time_Warning - | Name_Unreferenced + function Is_OK_Statement + (Stmt : Node_Id; Id : Entity_Id; Call_Arg : Node_Id) return Boolean + is + procedure Check_Assignment_Levels (Assignee : Entity_Id); + -- Check that a ghost entity on the RHS of the assignment is + -- assertion level dependent on the LHS. + + procedure Check_Procedure_Call_Policies (Callee : Entity_Id); + -- Check that + -- * the a checked call argument is not modified by an ignored + -- procedure call. + -- * the level of the modified call argument depends on the level + -- of the call. + + function Is_Modified_By_Call + (Call : Node_Id; Call_Arg : Node_Id; Callee : Entity_Id) + return Boolean; + -- Check that Call_Arg was used in the call and that the formal + -- for that argument was either out or in-out. + + ----------------------------- + -- Check_Assignment_Levels -- + ----------------------------- + + procedure Check_Assignment_Levels (Assignee : Entity_Id) is + Assignee_Level : constant Entity_Id := + Ghost_Assertion_Level (Assignee); + Id_Level : constant Entity_Id := + Ghost_Assertion_Level (Id); + begin + -- SPARK RM 6.9 (13) A ghost entity E shall only be referenced + -- within an assignment statement whose target is a ghost + -- variable that is assertion-level-dependent on E. + + if not Is_Assertion_Level_Dependent (Assignee_Level, Id_Level) then - return True; + Error_Msg_N (Assertion_Level_Error_Msg, Ghost_Ref); + Error_Msg_Name_1 := Chars (Id_Level); + Error_Msg_N ("\& has assertion level %", Ghost_Ref); + Error_Msg_Name_1 := Chars (Assignee_Level); + Error_Msg_Node_2 := Assignee; + Error_Msg_NE ("\& is modifying & with %", Ghost_Ref, Id); + Error_Msg_Name_1 := Chars (Id_Level); + Error_Msg_NE + ("\assertion level of & should depend on %", + Ghost_Ref, + Assignee); + end if; + end Check_Assignment_Levels; - -- An assertion expression pragma is Ghost when it contains a - -- reference to a Ghost entity (SPARK RM 6.9(10)), except for - -- predicate pragmas (SPARK RM 6.9(11)). + ----------------------------------- + -- Check_Procedure_Call_Policies -- + ----------------------------------- - elsif Assertion_Expression_Pragma (Prag_Id) - and then Prag_Id /= Pragma_Predicate - then - -- Ensure that the assertion policy and the Ghost policy are - -- compatible (SPARK RM 6.9(20)). + procedure Check_Procedure_Call_Policies (Callee : Entity_Id) is + Id_Level : constant Entity_Id := Ghost_Assertion_Level (Id); + Id_Policy : constant Name_Id := Ghost_Policy_In_Effect (Id); - Check_Policies (Prag_Nam); - return True; + Call_Level : Entity_Id; + Call_Policy : Name_Id; + begin + if No (Callee) then + return; + end if; - -- Several pragmas that may apply to a non-Ghost entity are - -- treated as Ghost when they contain a reference to a Ghost - -- entity (SPARK RM 6.9(11)). + -- Checks apply only if we are processing a call argument that + -- is modified by the call. - elsif Prag_Nam in Name_Global - | Name_Depends - | Name_Initializes - | Name_Refined_Global - | Name_Refined_Depends - | Name_Refined_State + if No (Call_Arg) + or else not Is_Modified_By_Call (Stmt, Call_Arg, Callee) then - return True; + return; end if; - end if; - return False; - end Is_OK_Pragma; + Call_Policy := Ghost_Policy_In_Effect (Callee); + Call_Level := Ghost_Assertion_Level (Callee); - --------------------- - -- Is_OK_Statement -- - --------------------- + if Id_Policy = Name_Check + and then Call_Policy = Name_Ignore + then + Error_Msg_Sloc := Sloc (Ghost_Ref); + Error_Msg_N (Ghost_Policy_Error_Msg, Ghost_Ref); + Error_Msg_NE ("\& has ghost policy `Check`", Ghost_Ref, Id); + Error_Msg_NE + ("\& is modified # by a procedure with `Ignore`", + Ghost_Ref, + Id); + end if; + + -- An out or in out mode actual parameter and the subprogram + -- shall have matching assertion levels SPARK RM 6.9 (15). + + if Id_Level /= Call_Level then + Error_Msg_N (Assertion_Level_Error_Msg, Ghost_Ref); + Error_Msg_Name_1 := Chars (Id_Level); + Error_Msg_N ("\& has assertion level %", Ghost_Ref); + Error_Msg_Name_1 := Chars (Call_Level); + Error_Msg_Node_2 := Callee; + Error_Msg_N + ("\& is modified by & with %", Ghost_Ref); + Error_Msg_N + ("\the levels of the call and call arguments must match", + Ghost_Ref); + end if; + end Check_Procedure_Call_Policies; + + ------------------------- + -- Is_Modified_By_Call -- + ------------------------- + + function Is_Modified_By_Call + (Call : Node_Id; Call_Arg : Node_Id; Callee : Entity_Id) + return Boolean + is + Form : Node_Id; + Act : Node_Id; + begin + Act := First_Actual (Call); + Form := First_Formal (Callee); + + while Present (Form) and then Present (Act) loop + if Act = Call_Arg then + return + Ekind (Form) in E_Out_Parameter | E_In_Out_Parameter; + end if; + + Next_Formal (Form); + Next_Actual (Act); + end loop; + + return False; + end Is_Modified_By_Call; + + -- Start of processing for Is_OK_Statement - function Is_OK_Statement (Stmt : Node_Id) return Boolean is begin -- An assignment statement is Ghost when the target is a Ghost -- entity. if Nkind (Stmt) = N_Assignment_Statement then - return Is_Ghost_Assignment (Stmt); + if Is_Ghost_Assignment (Stmt) then + Check_Assignment_Levels + (Get_Enclosing_Ghost_Entity (Name (Stmt))); + return True; + end if; -- A procedure call is Ghost when it calls a Ghost procedure elsif Nkind (Stmt) = N_Procedure_Call_Statement then - return Is_Ghost_Procedure_Call (Stmt); + if Is_Ghost_Procedure_Call (Stmt) then + Check_Procedure_Call_Policies (Get_Subprogram_Entity (Stmt)); + return True; + end if; -- Special cases @@ -439,23 +661,18 @@ package body Ghost is -- Local variables - Par : Node_Id; + Par : Node_Id; + Prev : Node_Id; -- Start of processing for Is_OK_Ghost_Context begin - -- The context is Ghost when it appears within a Ghost package or - -- subprogram. - - if Ghost_Config.Ghost_Mode > None then - return True; - -- Routine Expand_Record_Extension creates a parent subtype without -- inserting it into the tree. There is no good way of recognizing -- this special case as there is no parent. Try to approximate the -- context. - elsif No (Parent (Context)) and then Is_Tagged_Type (Ghost_Id) then + if No (Parent (Context)) and then Is_Tagged_Type (Ghost_Id) then return True; -- Otherwise climb the parent chain looking for a suitable Ghost @@ -463,23 +680,21 @@ package body Ghost is else Par := Context; + Prev := Empty; while Present (Par) loop - if Is_Ignored_Ghost_Node (Par) then - return True; - -- It is not possible to check correct use of Ghost entities -- in generic instantiations until after the generic has been -- resolved. Postpone that verification to after resolution. - elsif Nkind (Par) = N_Generic_Association then + if Nkind (Par) = N_Generic_Association then return True; -- A reference to a Ghost entity can appear within an aspect - -- specification (SPARK RM 6.9(10)). The precise checking will + -- specification (SPARK RM 6.9(13)). The precise checking will -- occur when analyzing the corresponding pragma. We make an -- exception for predicate aspects other than Ghost_Predicate -- that only allow referencing a Ghost entity when the - -- corresponding type declaration is Ghost (SPARK RM 6.9(11)). + -- corresponding type declaration is Ghost (SPARK RM 6.9(14)). elsif Nkind (Par) = N_Aspect_Specification and then @@ -490,7 +705,7 @@ package body Ghost is return True; -- A Ghost type may be referenced in a use or use_type clause - -- (SPARK RM 6.9(10)). + -- (SPARK RM 6.9(13)). elsif Present (Parent (Par)) and then Nkind (Parent (Par)) in N_Use_Package_Clause @@ -528,10 +743,10 @@ package body Ghost is elsif Is_OK_Declaration (Par) then return True; - elsif Is_OK_Pragma (Par, Ghost_Id) then + elsif Is_OK_Pragma (Par) then return True; - elsif Is_OK_Statement (Par) then + elsif Is_OK_Statement (Par, Ghost_Id, Prev) then return True; -- Prevent the search from going too far @@ -540,6 +755,7 @@ package body Ghost is exit; end if; + Prev := Par; Par := Parent (Par); end loop; @@ -565,28 +781,91 @@ package body Ghost is ------------------------ procedure Check_Ghost_Policy (Id : Entity_Id; Ref : Node_Id) is - Policy : constant Name_Id := Policy_In_Effect (Name_Ghost); + function Is_From_Aspect_Iterable (Ref : Node_Id) return Boolean; + -- Returns true when the node is contained within an Iterable aspect. + + function Is_From_Aspect_Iterable (Ref : Node_Id) return Boolean is + P : Node_Id := Parent (Ref); + begin + while Present (P) loop + if Nkind (P) = N_Aspect_Specification then + return Get_Aspect_Id (P) = Aspect_Iterable; + end if; + P := Parent (P); + end loop; + return False; + end Is_From_Aspect_Iterable; + + -- Local variables + + Applic_Policy : Ghost_Mode_Type := Ghost_Config.Ghost_Mode; + Ghost_Region : constant Node_Id := Ghost_Config.Current_Region; + + -- Start of processing for Check_Ghost_Policy begin + -- The policy is allowed to change within renaming and instantiation + -- statements. + + if No (Ghost_Region) + or else Nkind (Ghost_Region) + in N_Object_Renaming_Declaration + | N_Package_Instantiation + | N_Procedure_Instantiation + | N_Subprogram_Renaming_Declaration + then + return; + end if; + + -- The applied policy for procedure calls is the policy in effect at + -- the moment of the call. + + if Ekind (Id) in E_Procedure then + Applic_Policy := Name_To_Ghost_Mode (Ghost_Policy_In_Effect (Id)); + end if; + -- The Ghost policy in effect a the point of declaration and at the - -- point of use must match (SPARK RM 6.9(15)). + -- point of use must match (SPARK RM 6.9(18)). if Is_Checked_Ghost_Entity (Id) - and then Policy = Name_Ignore + and then Applic_Policy = Ignore and then Known_To_Be_Assigned (Ref) then + Error_Msg_N (Ghost_Policy_Error_Msg, Ref); + Error_Msg_Sloc := Sloc (Id); + Error_Msg_NE ("\& declared # with ghost policy `Check`", Ref, Id); Error_Msg_Sloc := Sloc (Ref); + Error_Msg_NE ("\& used # with ghost policy `Ignore`", Ref, Id); + end if; - Error_Msg_N ("incompatible ghost policies in effect", Ref); - Error_Msg_NE ("\& declared with ghost policy `Check`", Ref, Id); - Error_Msg_NE ("\& used # with ghost policy `Ignore`", Ref, Id); + -- A ghost entity E shall not be referenced within an aspect + -- specification [(including an aspect-specifying pragma)] which + -- specifies an aspect of an entity that is either non-ghost or not + -- assertion-level-dependent on E except in the following cases the + -- specified aspect is either Global, Depends, Refined_Global, + -- Refined_Depends, Initializes, Refined_State, or Iterable (SPARK RM + -- 6.9(14)). + + if No (Ghost_Region) + or else (Nkind (Ghost_Region) = N_Pragma + and then Get_Pragma_Id (Ghost_Region) + in Pragma_Global + | Pragma_Depends + | Pragma_Refined_Global + | Pragma_Refined_Depends + | Pragma_Initializes + | Pragma_Refined_State) + or else Is_From_Aspect_Iterable (Ref) + then + return; + end if; - elsif Is_Ignored_Ghost_Entity (Id) and then Policy = Name_Check then + if Is_Ignored_Ghost_Entity (Id) and then Applic_Policy = Check then + Error_Msg_N (Ghost_Policy_Error_Msg, Ref); + Error_Msg_Sloc := Sloc (Id); + Error_Msg_NE ("\& declared # with ghost policy `Ignore`", Ref, Id); Error_Msg_Sloc := Sloc (Ref); - - Error_Msg_N ("incompatible ghost policies in effect", Ref); - Error_Msg_NE ("\& declared with ghost policy `Ignore`", Ref, Id); - Error_Msg_NE ("\& used # with ghost policy `Check`", Ref, Id); + Error_Msg_NE ("\& used # with ghost policy `Check`", Ref, Id); end if; end Check_Ghost_Policy; @@ -627,6 +906,10 @@ package body Ghost is -- Start of processing for Check_Ghost_Context begin + if Ghost_Context_Checks_Disabled then + return; + end if; + -- Class-wide pre/postconditions of ignored pragmas are preanalyzed -- to report errors on wrong conditions; however, ignored pragmas may -- also have references to ghost entities and we must disable checking @@ -643,19 +926,10 @@ package body Ghost is return; end if; - -- Once it has been established that the reference to the Ghost entity - -- is within a suitable context, ensure that the policy at the point of - -- declaration and at the point of use match. - - if Is_OK_Ghost_Context (Ghost_Ref) then - if Present (Ghost_Id) then - Check_Ghost_Policy (Ghost_Id, Ghost_Ref); - end if; - - -- Otherwise the Ghost entity appears in a non-Ghost context and affects - -- its behavior or value (SPARK RM 6.9(10,11)). + -- If the Ghost entity appears in a non-Ghost context and affects + -- its behavior or value (SPARK RM 6.9(13,14)). - else + if not Is_OK_Ghost_Context (Ghost_Ref) then Error_Msg_N ("ghost entity cannot appear in this context", Ghost_Ref); -- When the Ghost entity appears in a pragma Predicate, explain the @@ -672,6 +946,14 @@ package body Ghost is & "or use a type invariant on a private type", Ghost_Ref); end if; end if; + + -- Once it has been established that the reference to the Ghost entity + -- is within a suitable context, ensure that the policy at the point of + -- declaration and at the point of use match. + + if Present (Ghost_Id) then + Check_Ghost_Policy (Ghost_Id, Ghost_Ref); + end if; end Check_Ghost_Context; ------------------------------------------------ @@ -732,6 +1014,80 @@ package body Ghost is end if; end Check_Ghost_Context_In_Generic_Association; + ----------------------------------- + -- Check_Valid_Ghost_Declaration -- + ----------------------------------- + + procedure Check_Valid_Ghost_Declaration (N : Node_Id) is + procedure Check_Valid_Assertion_Level (Id : Entity_Id; Ref : Node_Id); + -- Check that the the assertion level of the declared entity is + -- compatible with assertion level of the ghost region. + + procedure Check_Valid_Ghost_Policy (Id : Entity_Id; Ref : Node_Id); + -- Check that the declared identifier does not have a Checked assertion + -- policy while being declared inside an ignored ghost region. + + --------------------------------- + -- Check_Valid_Assertion_Level -- + --------------------------------- + + procedure Check_Valid_Assertion_Level (Id : Entity_Id; Ref : Node_Id) is + Id_Level : constant Entity_Id := Ghost_Assertion_Level (Id); + Region_Level : constant Entity_Id := + Ghost_Config.Ghost_Mode_Assertion_Level; + begin + -- This check is not applied for generic isntantiations + + if Is_Generic_Instance (Id) then + return; + end if; + + if not Is_Assertion_Level_Dependent (Id_Level, Region_Level) then + Error_Msg_Sloc := Sloc (Ref); + + Error_Msg_N (Assertion_Level_Error_Msg, Ref); + Error_Msg_Name_1 := Chars (Id_Level); + Error_Msg_NE ("\& has assertion level %", Ref, Id); + Error_Msg_Name_1 := Chars (Region_Level); + Error_Msg_NE ("\& is declared within a region with %", Ref, Id); + Error_Msg_Name_1 := Chars (Region_Level); + Error_Msg_NE ("\assertion level of & should depend on %", Ref, Id); + end if; + end Check_Valid_Assertion_Level; + + ------------------------------ + -- Check_Valid_Ghost_Policy -- + ------------------------------ + + procedure Check_Valid_Ghost_Policy (Id : Entity_Id; Ref : Node_Id) is + Policy : constant Name_Id := Ghost_Policy_In_Effect (Id); + begin + if Ghost_Config.Ghost_Mode = Ignore and then Policy = Name_Check + then + Error_Msg_Sloc := Sloc (Ref); + + Error_Msg_N (Ghost_Policy_Error_Msg, Ref); + Error_Msg_NE ("\& has ghost policy `Check`", Ref, Id); + Error_Msg_NE + ("\& is declared # within ghost policy `Ignore`", Ref, Id); + end if; + end Check_Valid_Ghost_Policy; + + -- Local variables + + Id : constant Entity_Id := Defining_Entity (N); + + -- Start of processing for Check_Valid_Ghost_Declaration + begin + if not Is_Ghost_Entity (Id) or else Ghost_Config.Ghost_Mode = None + then + return; + end if; + + Check_Valid_Ghost_Policy (Id, N); + Check_Valid_Assertion_Level (Id, N); + end Check_Valid_Ghost_Declaration; + --------------------------------------------- -- Check_Ghost_Formal_Procedure_Or_Package -- --------------------------------------------- @@ -808,129 +1164,127 @@ package body Ghost is Over_Subp : Entity_Id; begin - if Present (Subp) and then Present (Overridden_Subp) then - Over_Subp := Ultimate_Alias (Overridden_Subp); - Deriv_Typ := Find_Dispatching_Type (Subp); - - -- A Ghost primitive of a non-Ghost type extension cannot override an - -- inherited non-Ghost primitive (SPARK RM 6.9(8)). - - if Is_Ghost_Entity (Subp) - and then Present (Deriv_Typ) - and then not Is_Ghost_Entity (Deriv_Typ) - and then not Is_Ghost_Entity (Over_Subp) - and then not Is_Abstract_Subprogram (Over_Subp) - then - Error_Msg_N ("incompatible overriding in effect", Subp); + if No (Subp) or else No (Overridden_Subp) then + return; + end if; - Error_Msg_Sloc := Sloc (Over_Subp); - Error_Msg_N ("\& declared # as non-ghost subprogram", Subp); + Over_Subp := Ultimate_Alias (Overridden_Subp); + Deriv_Typ := Find_Dispatching_Type (Subp); - Error_Msg_Sloc := Sloc (Subp); - Error_Msg_N ("\overridden # with ghost subprogram", Subp); - end if; + -- A Ghost primitive of a non-Ghost type extension cannot override an + -- inherited non-Ghost primitive (SPARK RM 6.9(10)). - -- A non-Ghost primitive of a type extension cannot override an - -- inherited Ghost primitive (SPARK RM 6.9(8)). + if Is_Ghost_Entity (Subp) + and then Present (Deriv_Typ) + and then not Is_Ghost_Entity (Deriv_Typ) + and then not Is_Ghost_Entity (Over_Subp) + and then not Is_Abstract_Subprogram (Over_Subp) + then + Error_Msg_N ("incompatible overriding in effect", Subp); - if Is_Ghost_Entity (Over_Subp) - and then not Is_Ghost_Entity (Subp) - and then not Is_Abstract_Subprogram (Subp) - then - Error_Msg_N ("incompatible overriding in effect", Subp); + Error_Msg_Sloc := Sloc (Over_Subp); + Error_Msg_N ("\& declared # as non-ghost subprogram", Subp); - Error_Msg_Sloc := Sloc (Over_Subp); - Error_Msg_N ("\& declared # as ghost subprogram", Subp); + Error_Msg_Sloc := Sloc (Subp); + Error_Msg_N ("\overridden # with ghost subprogram", Subp); + end if; - Error_Msg_Sloc := Sloc (Subp); - Error_Msg_N ("\overridden # with non-ghost subprogram", Subp); - end if; + -- A non-Ghost primitive of a type extension cannot override an + -- inherited Ghost primitive (SPARK RM 6.9(10)). - if Present (Deriv_Typ) - and then not Is_Ignored_Ghost_Entity (Deriv_Typ) - then - -- When a tagged type is either non-Ghost or checked Ghost and - -- one of its primitives overrides an inherited operation, the - -- overridden operation of the ancestor type must be ignored Ghost - -- if the primitive is ignored Ghost (SPARK RM 6.9(19)). + if Is_Ghost_Entity (Over_Subp) + and then not Is_Ghost_Entity (Subp) + and then not Is_Abstract_Subprogram (Subp) + then + Error_Msg_N ("incompatible overriding in effect", Subp); - if Is_Ignored_Ghost_Entity (Subp) then + Error_Msg_Sloc := Sloc (Over_Subp); + Error_Msg_N ("\& declared # as ghost subprogram", Subp); - -- Both the parent subprogram and overriding subprogram are - -- ignored Ghost. + Error_Msg_Sloc := Sloc (Subp); + Error_Msg_N ("\overridden # with non-ghost subprogram", Subp); + end if; - if Is_Ignored_Ghost_Entity (Over_Subp) then - null; + if Present (Deriv_Typ) + and then not Is_Ignored_Ghost_Entity (Deriv_Typ) + then + -- When a tagged type is either non-Ghost or checked Ghost and + -- one of its primitives overrides an inherited operation, the + -- overridden operation of the ancestor type must be ignored Ghost + -- if the primitive is ignored Ghost (SPARK RM 6.9(21)). - -- The parent subprogram carries policy Check + if Is_Ignored_Ghost_Entity (Subp) then - elsif Is_Checked_Ghost_Entity (Over_Subp) then - Error_Msg_N - ("incompatible ghost policies in effect", Subp); + -- Both the parent subprogram and overriding subprogram are + -- ignored Ghost. - Error_Msg_Sloc := Sloc (Over_Subp); - Error_Msg_N - ("\& declared # with ghost policy `Check`", Subp); + if Is_Ignored_Ghost_Entity (Over_Subp) then + null; - Error_Msg_Sloc := Sloc (Subp); - Error_Msg_N - ("\overridden # with ghost policy `Ignore`", Subp); + -- The parent subprogram carries policy Check - -- The parent subprogram is non-Ghost + elsif Is_Checked_Ghost_Entity (Over_Subp) then + Error_Msg_N (Ghost_Policy_Error_Msg, Subp); - else - Error_Msg_N - ("incompatible ghost policies in effect", Subp); + Error_Msg_Sloc := Sloc (Over_Subp); + Error_Msg_N + ("\& declared # with ghost policy `Check`", Subp); - Error_Msg_Sloc := Sloc (Over_Subp); - Error_Msg_N ("\& declared # as non-ghost subprogram", Subp); + Error_Msg_Sloc := Sloc (Subp); + Error_Msg_N + ("\overridden # with ghost policy `Ignore`", Subp); - Error_Msg_Sloc := Sloc (Subp); - Error_Msg_N - ("\overridden # with ghost policy `Ignore`", Subp); - end if; + -- The parent subprogram is non-Ghost + + else + Error_Msg_N (Ghost_Policy_Error_Msg, Subp); - -- When a tagged type is either non-Ghost or checked Ghost and - -- one of its primitives overrides an inherited operation, the - -- the primitive of the tagged type must be ignored Ghost if the - -- overridden operation is ignored Ghost (SPARK RM 6.9(19)). + Error_Msg_Sloc := Sloc (Over_Subp); + Error_Msg_N ("\& declared # as non-ghost subprogram", Subp); - elsif Is_Ignored_Ghost_Entity (Over_Subp) then + Error_Msg_Sloc := Sloc (Subp); + Error_Msg_N + ("\overridden # with ghost policy `Ignore`", Subp); + end if; - -- Both the parent subprogram and the overriding subprogram are - -- ignored Ghost. + -- When a tagged type is either non-Ghost or checked Ghost and + -- one of its primitives overrides an inherited operation, the + -- the primitive of the tagged type must be ignored Ghost if the + -- overridden operation is ignored Ghost (SPARK RM 6.9(21)). - if Is_Ignored_Ghost_Entity (Subp) then - null; + elsif Is_Ignored_Ghost_Entity (Over_Subp) then - -- The overriding subprogram carries policy Check + -- Both the parent subprogram and the overriding subprogram are + -- ignored Ghost. - elsif Is_Checked_Ghost_Entity (Subp) then - Error_Msg_N - ("incompatible ghost policies in effect", Subp); + if Is_Ignored_Ghost_Entity (Subp) then + null; - Error_Msg_Sloc := Sloc (Over_Subp); - Error_Msg_N - ("\& declared # with ghost policy `Ignore`", Subp); + -- The overriding subprogram carries policy Check - Error_Msg_Sloc := Sloc (Subp); - Error_Msg_N - ("\overridden # with Ghost policy `Check`", Subp); + elsif Is_Checked_Ghost_Entity (Subp) then + Error_Msg_N (Ghost_Policy_Error_Msg, Subp); - -- The overriding subprogram is non-Ghost + Error_Msg_Sloc := Sloc (Over_Subp); + Error_Msg_N + ("\& declared # with ghost policy `Ignore`", Subp); - else - Error_Msg_N - ("incompatible ghost policies in effect", Subp); + Error_Msg_Sloc := Sloc (Subp); + Error_Msg_N + ("\overridden # with Ghost policy `Check`", Subp); - Error_Msg_Sloc := Sloc (Over_Subp); - Error_Msg_N - ("\& declared # with ghost policy `Ignore`", Subp); + -- The overriding subprogram is non-Ghost - Error_Msg_Sloc := Sloc (Subp); - Error_Msg_N - ("\overridden # with non-ghost subprogram", Subp); - end if; + else + Error_Msg_N (Ghost_Policy_Error_Msg, Subp); + + Error_Msg_Sloc := Sloc (Over_Subp); + Error_Msg_N + ("\& declared # with ghost policy `Ignore`", Subp); + + Error_Msg_Sloc := Sloc (Subp); + Error_Msg_N + ("\overridden # with non-ghost subprogram", Subp); end if; end if; end if; @@ -941,41 +1295,48 @@ package body Ghost is --------------------------- procedure Check_Ghost_Primitive (Prim : Entity_Id; Typ : Entity_Id) is + Prim_Level : Entity_Id; + Typ_Level : Entity_Id; begin - -- The Ghost policy in effect at the point of declaration of a primitive - -- operation and a tagged type must match (SPARK RM 6.9(18)). + if not Is_Tagged_Type (Typ) then + return; + end if; - if Is_Tagged_Type (Typ) then - if Is_Checked_Ghost_Entity (Prim) - and then Is_Ignored_Ghost_Entity (Typ) - then - Error_Msg_N ("incompatible ghost policies in effect", Prim); + -- The Ghost policy in effect at the point of declaration of a primitive + -- operation and a tagged type must match (SPARK RM 6.9(21)). - Error_Msg_Sloc := Sloc (Typ); - Error_Msg_NE - ("\tagged type & declared # with ghost policy `Ignore`", - Prim, Typ); + if Is_Checked_Ghost_Entity (Prim) + and then Is_Ignored_Ghost_Entity (Typ) + then + Error_Msg_N (Ghost_Policy_Error_Msg, Prim); - Error_Msg_Sloc := Sloc (Prim); - Error_Msg_N - ("\primitive subprogram & declared # with ghost policy `Check`", - Prim); + Error_Msg_Sloc := Sloc (Typ); + Error_Msg_NE + ("\tagged type & declared # with ghost policy `Ignore`", + Prim, Typ); - elsif Is_Ignored_Ghost_Entity (Prim) - and then Is_Checked_Ghost_Entity (Typ) - then - Error_Msg_N ("incompatible ghost policies in effect", Prim); + Error_Msg_Sloc := Sloc (Prim); + Error_Msg_N + ("\primitive subprogram & declared # with ghost policy `Check`", + Prim); + end if; - Error_Msg_Sloc := Sloc (Typ); - Error_Msg_NE - ("\tagged type & declared # with ghost policy `Check`", - Prim, Typ); + Prim_Level := Ghost_Assertion_Level (Prim); + Typ_Level := Ghost_Assertion_Level (Typ); + + if not Is_Assertion_Level_Dependent (Prim_Level, Typ_Level) then + Error_Msg_N (Assertion_Level_Error_Msg, Prim); + Error_Msg_Name_1 := Chars (Typ_Level); + Error_Msg_Sloc := Sloc (Typ); + Error_Msg_NE ("\tagged type & declared # with %", Prim, Typ); + Error_Msg_Name_1 := Chars (Prim_Level); + Error_Msg_Sloc := Sloc (Prim); + Error_Msg_NE + ("\primitive subprogram & declared # with %", Prim, Prim); + Error_Msg_Name_1 := Chars (Typ_Level); + Error_Msg_NE + ("\assertion level of & should depend on %", Prim, Prim); - Error_Msg_Sloc := Sloc (Prim); - Error_Msg_N - ("\primitive subprogram & declared # with ghost policy `Ignore`", - Prim); - end if; end if; end Check_Ghost_Primitive; @@ -989,48 +1350,56 @@ package body Ghost is Constit : Node_Id; Constit_Id : Entity_Id) is + State_Level : Entity_Id; + Constit_Level : Entity_Id; begin - if Is_Ghost_Entity (State_Id) then - if Is_Ghost_Entity (Constit_Id) then + -- Only check ghost states + + if not Is_Ghost_Entity (State_Id) then + return; + end if; - -- The Ghost policy in effect at the point of abstract state - -- declaration and constituent must match (SPARK RM 6.9(17)). + -- A constituent of a Ghost abstract state must be a Ghost entity + -- (SPARK RM 7.2.2(12)). - if Is_Checked_Ghost_Entity (State_Id) - and then Is_Ignored_Ghost_Entity (Constit_Id) - then - Error_Msg_Sloc := Sloc (Constit); - SPARK_Msg_N ("incompatible ghost policies in effect", State); - - SPARK_Msg_NE - ("\abstract state & declared with ghost policy `Check`", - State, State_Id); - SPARK_Msg_NE - ("\constituent & declared # with ghost policy `Ignore`", - State, Constit_Id); - - elsif Is_Ignored_Ghost_Entity (State_Id) - and then Is_Checked_Ghost_Entity (Constit_Id) - then - Error_Msg_Sloc := Sloc (Constit); - SPARK_Msg_N ("incompatible ghost policies in effect", State); - - SPARK_Msg_NE - ("\abstract state & declared with ghost policy `Ignore`", - State, State_Id); - SPARK_Msg_NE - ("\constituent & declared # with ghost policy `Check`", - State, Constit_Id); - end if; + if not Is_Ghost_Entity (Constit_Id) then + SPARK_Msg_NE + ("constituent of ghost state & must be ghost", + Constit, State_Id); + end if; - -- A constituent of a Ghost abstract state must be a Ghost entity - -- (SPARK RM 7.2.2(12)). + -- The Ghost policy in effect at the point of an ignored abstract state + -- cannot be check (SPARK RM 6.9(20)). + + if Is_Ignored_Ghost_Entity (State_Id) + and then Is_Checked_Ghost_Entity (Constit_Id) + then + SPARK_Msg_N (Ghost_Policy_Error_Msg, State); + Error_Msg_Sloc := Sloc (State_Id); + SPARK_Msg_NE + ("\abstract state & declared # with ghost policy `Ignore`", + State, State_Id); + Error_Msg_Sloc := Sloc (Constit_Id); + SPARK_Msg_NE + ("\constituent & declared # with ghost policy `Check`", + State, Constit_Id); + end if; + + State_Level := Ghost_Assertion_Level (State_Id); + Constit_Level := Ghost_Assertion_Level (Constit_Id); + + if not Is_Assertion_Level_Dependent (Constit_Level, State_Level) then + SPARK_Msg_N (Assertion_Level_Error_Msg, State); + Error_Msg_Name_1 := Chars (State_Level); + Error_Msg_Sloc := Sloc (State_Id); + SPARK_Msg_NE ("\abstract state & declared # with %", State, State_Id); + Error_Msg_Name_1 := Chars (Constit_Level); + Error_Msg_Sloc := Sloc (Constit_Id); + SPARK_Msg_NE ("\constituent & declared # with %", State, Constit_Id); + Error_Msg_Name_1 := Chars (State_Level); + SPARK_Msg_NE + ("\assertion level of & should depend on %", State, Constit_Id); - else - SPARK_Msg_NE - ("constituent of ghost state & must be ghost", - Constit, State_Id); - end if; end if; end Check_Ghost_Refinement; @@ -1059,14 +1428,14 @@ package body Ghost is Conc_Typ := Typ; end if; - -- A Ghost type cannot be concurrent (SPARK RM 6.9(21)). Verify this + -- A Ghost type cannot be concurrent (SPARK RM 6.9(22)). Verify this -- legality rule first to give a finer-grained diagnostic. if Present (Conc_Typ) then Error_Msg_N ("ghost type & cannot be concurrent", Conc_Typ); end if; - -- A Ghost type cannot be effectively volatile (SPARK RM 6.9(7)) + -- A Ghost type cannot be effectively volatile (SPARK RM 6.9(9)) if Is_Effectively_Volatile (Full_Typ) then Error_Msg_N ("ghost type & cannot be volatile", Full_Typ); @@ -1074,6 +1443,141 @@ package body Ghost is end if; end Check_Ghost_Type; + ---------------------- + -- Get_Ghost_Aspect -- + ---------------------- + + function Get_Ghost_Aspect (N : Node_Id) return Node_Id is + Asp : Node_Id; + begin + if not Permits_Aspect_Specifications (N) then + return Empty; + end if; + + Asp := First (Aspect_Specifications (N)); + while Present (Asp) loop + if Chars (Identifier (Asp)) = Name_Ghost then + return Asp; + end if; + + Next (Asp); + end loop; + + return Empty; + end Get_Ghost_Aspect; + + ---------------------- + -- Get_Ghost_Pragma -- + ---------------------- + + function Get_Ghost_Pragma (N : Node_Id) return Node_Id is + Decl : Node_Id := Empty; + begin + -- When the context is a [generic] package declaration, pragma Ghost + -- resides in the visible declarations. + + if Nkind (N) in N_Generic_Package_Declaration | N_Package_Declaration + then + Decl := First (Visible_Declarations (Specification (N))); + + -- When the context is a package or a subprogram body, pragma Ghost + -- resides in the declarative part. + + elsif Nkind (N) in N_Package_Body | N_Subprogram_Body then + Decl := First (Declarations (N)); + + -- Otherwise pragma Ghost appears in the declarations following N + + elsif Is_List_Member (N) then + Decl := Next (N); + end if; + + while Present (Decl) loop + if Nkind (Decl) = N_Pragma + and then Pragma_Name (Decl) = Name_Ghost + then + return Decl; + + -- A source construct ends the region where pragma Ghost may appear, + -- stop the traversal. Check the original node as source constructs + -- may be rewritten into something else by expansion. + + elsif Comes_From_Source (Original_Node (Decl)) then + exit; + end if; + + Next (Decl); + end loop; + + return Empty; + end Get_Ghost_Pragma; + + ------------------------------- + -- Get_Ghost_Assertion_Level -- + ------------------------------- + + function Get_Ghost_Assertion_Level (N : Node_Id) return Entity_Id is + Ghost_Asp : constant Node_Id := Get_Ghost_Aspect (N); + Ghost_Prag : Node_Id; + + begin + if Present (Ghost_Asp) then + return Assertion_Level_From_Arg (Expression (Ghost_Asp)); + end if; + + Ghost_Prag := Get_Ghost_Pragma (N); + if Present (Ghost_Prag) then + return + Assertion_Level_From_Arg + (First (Pragma_Argument_Associations (Ghost_Prag))); + end if; + + return Empty; + end Get_Ghost_Assertion_Level; + + ------------------------------------- + -- Ghost_Assertion_Level_In_Effect -- + ------------------------------------- + + function Ghost_Assertion_Level_In_Effect (Id : Entity_Id) return Entity_Id + is + begin + if Ghost_Config.Is_Inside_Statement_Or_Pragma + and then Is_Implicit_Ghost (Id) + then + return Ghost_Config.Ghost_Mode_Assertion_Level; + else + return Ghost_Assertion_Level (Id); + end if; + end Ghost_Assertion_Level_In_Effect; + + ---------------------------- + -- Ghost_Policy_In_Effect -- + ---------------------------- + + function Ghost_Policy_In_Effect (Id : Entity_Id) return Name_Id is + Level : constant Entity_Id := Ghost_Assertion_Level (Id); + Level_Nam : constant Name_Id := + (if No (Level) then No_Name else Chars (Level)); + begin + if Ghost_Config.Is_Inside_Statement_Or_Pragma + and then Is_Implicit_Ghost (Id) + then + case Ghost_Config.Ghost_Mode is + when Check => + return Name_Check; + + when Ignore => + return Name_Ignore; + + when None => + return No_Name; + end case; + else + return Policy_In_Effect (Name_Ghost, Level_Nam); + end if; + end Ghost_Policy_In_Effect; + -------------------------------- -- Implements_Ghost_Interface -- -------------------------------- @@ -1112,20 +1616,15 @@ package body Ghost is Set_Ignored_Ghost_Recording_Proc (Record_Ignored_Ghost_Node'Access); end Initialize; - ------------------------ - -- Install_Ghost_Mode -- - ------------------------ - - procedure Install_Ghost_Mode (Mode : Ghost_Mode_Type) is - begin - Install_Ghost_Region (Mode, Empty); - end Install_Ghost_Mode; - -------------------------- -- Install_Ghost_Region -- -------------------------- - procedure Install_Ghost_Region (Mode : Ghost_Mode_Type; N : Node_Id) is + procedure Install_Ghost_Region + (Mode : Ghost_Mode_Type; + N : Node_Id; + Level : Entity_Id) + is begin -- The context is already within an ignored Ghost region. Maintain the -- start of the outermost ignored Ghost region. @@ -1145,14 +1644,39 @@ package body Ghost is Ghost_Config.Ignored_Ghost_Region := Empty; end if; + Ghost_Config.Current_Region := N; Ghost_Config.Ghost_Mode := Mode; + Ghost_Config.Ghost_Mode_Assertion_Level := Level; + + if Nkind (Ghost_Config.Current_Region) + in N_Statement_Other_Than_Procedure_Call + | N_Procedure_Call_Statement + | N_Pragma + then + Ghost_Config.Is_Inside_Statement_Or_Pragma := True; + end if; end Install_Ghost_Region; - procedure Install_Ghost_Region (Mode : Name_Id; N : Node_Id) is + procedure Install_Ghost_Region + (Mode : Name_Id; N : Node_Id; Level : Entity_Id) is begin - Install_Ghost_Region (Name_To_Ghost_Mode (Mode), N); + Install_Ghost_Region (Name_To_Ghost_Mode (Mode), N, Level); end Install_Ghost_Region; + ------------------------- + -- Is_Compatible_Level -- + ------------------------- + + function Is_Assertion_Level_Dependent + (Self : Entity_Id; Other : Entity_Id) return Boolean is + begin + return + Self = Standard_Level_Default + or else Other = Standard_Level_Default + or else Is_Same_Or_Depends_On_Level (Self, Other) + or else Is_Same_Or_Depends_On_Level (Self, Standard_Level_Static); + end Is_Assertion_Level_Dependent; + ------------------------- -- Is_Ghost_Assignment -- ------------------------- @@ -1262,7 +1786,7 @@ package body Ghost is return Nkind (N) = N_Compilation_Unit - and then Is_Ignored_Ghost_Entity + and then Is_Ignored_Ghost_Entity_In_Codegen (Defining_Entity (Ultimate_Original_Node (Unit (N)))); end Is_Ignored_Ghost_Unit; @@ -1279,37 +1803,18 @@ package body Ghost is ----------------------- function Enables_Ghostness (Arg : Node_Id) return Boolean is - Expr : Node_Id; - begin - Expr := Arg; - - if Nkind (Expr) = N_Pragma_Argument_Association then - Expr := Get_Pragma_Arg (Expr); - end if; - - -- Determine whether the expression of the aspect or pragma is static - -- and denotes True. - - if Present (Expr) then - Preanalyze_And_Resolve (Expr); + -- Ghostness is enabled if the argument implies a default assertion + -- level or it is explicitly a reference to an assertion level. - return - Is_OK_Static_Expression (Expr) - and then Is_True (Expr_Value (Expr)); - - -- Otherwise Ghost defaults to True - - else - return True; - end if; + return Present (Assertion_Level_From_Arg (Arg)); end Enables_Ghostness; -- Local variables Id : constant Entity_Id := Defining_Entity (N); Asp : Node_Id; - Decl : Node_Id; + Prag : Node_Id; Prev_Id : Entity_Id; -- Start of processing for Is_Subject_To_Ghost @@ -1342,56 +1847,21 @@ package body Ghost is -- Examine the aspect specifications (if any) looking for aspect Ghost - if Permits_Aspect_Specifications (N) then - Asp := First (Aspect_Specifications (N)); - while Present (Asp) loop - if Chars (Identifier (Asp)) = Name_Ghost then - return Enables_Ghostness (Expression (Asp)); - end if; + Asp := Get_Ghost_Aspect (N); - Next (Asp); - end loop; + if Present (Asp) then + return Enables_Ghostness (Expression (Asp)); end if; - Decl := Empty; + -- Examine the following pragmas for an applicable Ghost pragma - -- When the context is a [generic] package declaration, pragma Ghost - -- resides in the visible declarations. - - if Nkind (N) in N_Generic_Package_Declaration | N_Package_Declaration - then - Decl := First (Visible_Declarations (Specification (N))); + Prag := Get_Ghost_Pragma (N); - -- When the context is a package or a subprogram body, pragma Ghost - -- resides in the declarative part. - - elsif Nkind (N) in N_Package_Body | N_Subprogram_Body then - Decl := First (Declarations (N)); - - -- Otherwise pragma Ghost appears in the declarations following N - - elsif Is_List_Member (N) then - Decl := Next (N); + if Present (Prag) then + return + Enables_Ghostness (First (Pragma_Argument_Associations (Prag))); end if; - while Present (Decl) loop - if Nkind (Decl) = N_Pragma - and then Pragma_Name (Decl) = Name_Ghost - then - return - Enables_Ghostness (First (Pragma_Argument_Associations (Decl))); - - -- A source construct ends the region where pragma Ghost may appear, - -- stop the traversal. Check the original node as source constructs - -- may be rewritten into something else by expansion. - - elsif Comes_From_Source (Original_Node (Decl)) then - exit; - end if; - - Next (Decl); - end loop; - return False; end Is_Subject_To_Ghost; @@ -1416,99 +1886,136 @@ package body Ghost is -- where P is a package, X is a record, and Comp is an array, we need -- to check the ghost flags of X. - Orig_Lhs : constant Node_Id := Name (N); - begin - -- Ghost assignments are irrelevant when the expander is inactive, and - -- processing them in that mode can lead to spurious errors. + procedure Check_Assignment_Policies (Assignee : Entity_Id); + -- Check that: + -- * A checked ghost assignment is not used in an ignored ghost + -- region. + -- * The level of the ghost region depends on the level of the + -- ghost assignment. - if Expander_Active then - -- Cases where full analysis is needed, involving array indexing - -- which would otherwise be missing array-bounds checks: + ------------------------------- + -- Check_Assignment_Policies -- + ------------------------------- - if not Analyzed (Orig_Lhs) - and then - ((Nkind (Orig_Lhs) = N_Indexed_Component - and then Nkind (Prefix (Orig_Lhs)) = N_Selected_Component - and then Nkind (Prefix (Prefix (Orig_Lhs))) = - N_Indexed_Component) - or else - (Nkind (Orig_Lhs) = N_Selected_Component - and then Nkind (Prefix (Orig_Lhs)) = N_Indexed_Component - and then Nkind (Prefix (Prefix (Orig_Lhs))) = - N_Selected_Component - and then Nkind (Parent (N)) /= N_Loop_Statement)) + procedure Check_Assignment_Policies (Assignee : Entity_Id) is + Assignee_Policy : constant Name_Id := + Ghost_Policy_In_Effect (Assignee); + Assignee_Level : constant Entity_Id := + Ghost_Assertion_Level (Assignee); + Region_Policy : constant Ghost_Mode_Type := Ghost_Config.Ghost_Mode; + Region_Level : constant Entity_Id := + Ghost_Config.Ghost_Mode_Assertion_Level; + begin + if Assignee_Policy = Name_Check and then Region_Policy = Ignore then + Error_Msg_N (Ghost_Policy_Error_Msg, N); + Error_Msg_NE ("\& has ghost policy `Check`", N, Assignee); + Error_Msg_NE + ("\& is modified in a region with `Ignore`", N, Assignee); + end if; + + -- If an assignment to a part of a ghost variable occurs in a ghost + -- entity, then the variable should be assertion-level-dependent on + -- this entity (SPARK RM 6.9(18)). + + if Present (Region_Level) + and then not Is_Assertion_Level_Dependent + (Assignee_Level, Region_Level) then - Analyze (Orig_Lhs); + Error_Msg_N (Assertion_Level_Error_Msg, N); + Error_Msg_Name_1 := Chars (Assignee_Level); + Error_Msg_NE ("\& has assertion level %", N, Assignee); + Error_Msg_Name_1 := Chars (Region_Level); + Error_Msg_NE + ("\& is modified within a region with %", N, Assignee); + Error_Msg_Name_1 := Chars (Region_Level); + Error_Msg_NE + ("\assertion level of & should depend on %", N, Assignee); end if; + end Check_Assignment_Policies; - -- Make sure Lhs is at least preanalyzed, so we can tell whether - -- it denotes a ghost variable. In some cases we need to do a full - -- analysis, or else the back end gets confused. Note that in the - -- preanalysis case, we are preanalyzing a copy of the left-hand - -- side name, temporarily attached to the tree. + -- Local variables - declare - Lhs : constant Node_Id := - (if Analyzed (Orig_Lhs) then Orig_Lhs - else New_Copy_Tree (Orig_Lhs)); - begin - if not Analyzed (Lhs) then - Set_Name (N, Lhs); - Set_Parent (Lhs, N); - Preanalyze_Without_Errors (Lhs); - Set_Name (N, Orig_Lhs); - end if; + Orig_Lhs : constant Node_Id := Name (N); + Id : Entity_Id; + Lhs : Node_Id; - declare - Id : constant Entity_Id := Get_Enclosing_Ghost_Entity (Lhs); - begin - if Present (Id) then - -- Left-hand side denotes a Checked ghost entity, so install - -- the region. + -- Start of processing for Mark_And_Set_Ghost_Assignment + + begin + -- Cases where full analysis is needed, involving array indexing + -- which would otherwise be missing array-bounds checks: - if Is_Checked_Ghost_Entity (Id) then - Install_Ghost_Region (Check, N); + if not Analyzed (Orig_Lhs) + and then + ((Nkind (Orig_Lhs) = N_Indexed_Component + and then Nkind (Prefix (Orig_Lhs)) = N_Selected_Component + and then Nkind (Prefix (Prefix (Orig_Lhs))) = + N_Indexed_Component) + or else + (Nkind (Orig_Lhs) = N_Selected_Component + and then Nkind (Prefix (Orig_Lhs)) = N_Indexed_Component + and then Nkind (Prefix (Prefix (Orig_Lhs))) = + N_Selected_Component + and then Nkind (Parent (N)) /= N_Loop_Statement)) + then + Analyze (Orig_Lhs); + end if; - -- Left-hand side denotes an Ignored ghost entity, so - -- install the region, and mark the assignment statement as - -- an ignored ghost assignment, so it will be removed later. + -- Make sure Lhs is at least preanalyzed, so we can tell whether + -- it denotes a ghost variable. In some cases we need to do a full + -- analysis, or else the back end gets confused. Note that in the + -- preanalysis case, we are preanalyzing a copy of the left-hand + -- side name, temporarily attached to the tree. + + Lhs := + (if Analyzed (Orig_Lhs) then Orig_Lhs else New_Copy_Tree (Orig_Lhs)); + if not Analyzed (Lhs) then + Set_Name (N, Lhs); + Set_Parent (Lhs, N); + Preanalyze_Without_Errors (Lhs); + Set_Name (N, Orig_Lhs); + end if; - elsif Is_Ignored_Ghost_Entity (Id) then - Install_Ghost_Region (Ignore, N); - Set_Is_Ignored_Ghost_Node (N); - Record_Ignored_Ghost_Node (N); - end if; - end if; - end; - end; + Id := Get_Enclosing_Ghost_Entity (Lhs); + + if Present (Id) and then Is_Ghost_Entity (Id) then + Check_Assignment_Policies (Id); end if; + + Mark_And_Set_Ghost_Region (N, Id); end Mark_And_Set_Ghost_Assignment; ----------------------------- -- Mark_And_Set_Ghost_Body -- ----------------------------- - procedure Mark_And_Set_Ghost_Body - (N : Node_Id; - Spec_Id : Entity_Id) - is + procedure Mark_And_Set_Ghost_Body (N : Node_Id; Spec_Id : Entity_Id) is Body_Id : constant Entity_Id := Defining_Entity (N); + Level : Entity_Id := Empty; Policy : Name_Id := No_Name; begin -- A body becomes Ghost when it is subject to aspect or pragma Ghost if Is_Subject_To_Ghost (N) then - Policy := Policy_In_Effect (Name_Ghost); + if Present (Spec_Id) then + Policy := Ghost_Policy_In_Effect (Spec_Id); + Level := Ghost_Assertion_Level_In_Effect (Spec_Id); + else + Policy := Ghost_Policy_In_Effect (Body_Id); + Level := Ghost_Assertion_Level_In_Effect (Body_Id); + end if; -- A body declared within a Ghost region is automatically Ghost -- (SPARK RM 6.9(2)). elsif Ghost_Config.Ghost_Mode = Check then Policy := Name_Check; + Level := Ghost_Config.Ghost_Mode_Assertion_Level; elsif Ghost_Config.Ghost_Mode = Ignore then Policy := Name_Ignore; + Level := Ghost_Config.Ghost_Mode_Assertion_Level; -- Inherit the "ghostness" of the previous declaration when the body -- acts as a completion. @@ -1520,22 +2027,22 @@ package body Ghost is elsif Is_Ignored_Ghost_Entity (Spec_Id) then Policy := Name_Ignore; end if; + + Level := Ghost_Assertion_Level (Spec_Id); end if; -- The Ghost policy in effect at the point of declaration and at the - -- point of completion must match (SPARK RM 6.9(16)). + -- point of completion must match (SPARK RM 6.9(18)). - Check_Ghost_Completion - (Prev_Id => Spec_Id, - Compl_Id => Body_Id); + Check_Ghost_Completion (Prev_Id => Spec_Id, Compl_Id => Body_Id); -- Mark the body as its formals as Ghost - Mark_Ghost_Declaration_Or_Body (N, Policy); + Mark_Ghost_Declaration_Or_Body (N, Policy, Level); -- Install the appropriate Ghost region - Install_Ghost_Region (Policy, N); + Install_Ghost_Region (Policy, N, Level); end Mark_And_Set_Ghost_Body; ----------------------------------- @@ -1547,6 +2054,7 @@ package body Ghost is Prev_Id : Entity_Id) is Compl_Id : constant Entity_Id := Defining_Entity (N); + Level : Entity_Id := Empty; Policy : Name_Id := No_Name; begin @@ -1555,22 +2063,26 @@ package body Ghost is if Ghost_Config.Ghost_Mode = Check then Policy := Name_Check; + Level := Ghost_Config.Ghost_Mode_Assertion_Level; elsif Ghost_Config.Ghost_Mode = Ignore then Policy := Name_Ignore; + Level := Ghost_Config.Ghost_Mode_Assertion_Level; -- The completion becomes Ghost when its initial declaration is also -- Ghost. elsif Is_Checked_Ghost_Entity (Prev_Id) then Policy := Name_Check; + Level := Ghost_Assertion_Level (Prev_Id); elsif Is_Ignored_Ghost_Entity (Prev_Id) then Policy := Name_Ignore; + Level := Ghost_Assertion_Level (Prev_Id); end if; -- The Ghost policy in effect at the point of declaration and at the - -- point of completion must match (SPARK RM 6.9(16)). + -- point of completion must match (SPARK RM 6.9(18)). Check_Ghost_Completion (Prev_Id => Prev_Id, @@ -1578,11 +2090,11 @@ package body Ghost is -- Mark the completion as Ghost - Mark_Ghost_Declaration_Or_Body (N, Policy); + Mark_Ghost_Declaration_Or_Body (N, Policy, Level); -- Install the appropriate Ghost region - Install_Ghost_Region (Policy, N); + Install_Ghost_Region (Policy, N, Level); end Mark_And_Set_Ghost_Completion; ------------------------------------ @@ -1590,6 +2102,7 @@ package body Ghost is ------------------------------------ procedure Mark_And_Set_Ghost_Declaration (N : Node_Id) is + Level : Entity_Id := Empty; Par_Id : Entity_Id; Policy : Name_Id := No_Name; @@ -1597,30 +2110,41 @@ package body Ghost is -- A declaration becomes Ghost when it is subject to aspect or pragma -- Ghost. - if Is_Subject_To_Ghost (N) then - Policy := Policy_In_Effect (Name_Ghost); + Level := Get_Ghost_Assertion_Level (N); + + -- A valid assertion level from an explicit pragma or aspect ghost + -- indicates the explicit ghostlyness of the declaration. Otherwise the + -- ghostliness of the declaration should be handled by other means like + -- the region. + + if Present (Level) then + Policy := + Policy_In_Effect (Name_Ghost, Assertion_Level_To_Name (Level)); -- A declaration elaborated in a Ghost region is automatically Ghost -- (SPARK RM 6.9(2)). elsif Ghost_Config.Ghost_Mode = Check then Policy := Name_Check; + Level := Ghost_Config.Ghost_Mode_Assertion_Level; elsif Ghost_Config.Ghost_Mode = Ignore then Policy := Name_Ignore; + Level := Ghost_Config.Ghost_Mode_Assertion_Level; -- A child package or subprogram declaration becomes Ghost when its -- parent is Ghost (SPARK RM 6.9(2)). - elsif Nkind (N) in N_Generic_Function_Renaming_Declaration - | N_Generic_Package_Declaration - | N_Generic_Package_Renaming_Declaration - | N_Generic_Procedure_Renaming_Declaration - | N_Generic_Subprogram_Declaration - | N_Package_Declaration - | N_Package_Renaming_Declaration - | N_Subprogram_Declaration - | N_Subprogram_Renaming_Declaration + elsif Nkind (N) + in N_Generic_Function_Renaming_Declaration + | N_Generic_Package_Declaration + | N_Generic_Package_Renaming_Declaration + | N_Generic_Procedure_Renaming_Declaration + | N_Generic_Subprogram_Declaration + | N_Package_Declaration + | N_Package_Renaming_Declaration + | N_Subprogram_Declaration + | N_Subprogram_Renaming_Declaration and then Present (Parent_Spec (N)) then Par_Id := Defining_Entity (Unit (Parent_Spec (N))); @@ -1631,15 +2155,19 @@ package body Ghost is elsif Is_Ignored_Ghost_Entity (Par_Id) then Policy := Name_Ignore; end if; + + Level := Ghost_Assertion_Level (Par_Id); end if; -- Mark the declaration and its formals as Ghost - Mark_Ghost_Declaration_Or_Body (N, Policy); + Mark_Ghost_Declaration_Or_Body (N, Policy, Level); + + Check_Valid_Ghost_Declaration (N); -- Install the appropriate Ghost region - Install_Ghost_Region (Policy, N); + Install_Ghost_Region (Policy, N, Level); end Mark_And_Set_Ghost_Declaration; -------------------------------------- @@ -1687,43 +2215,46 @@ package body Ghost is -- Local variables + Level : Entity_Id := Empty; Policy : Name_Id := No_Name; begin -- An instantiation becomes Ghost when it is subject to pragma Ghost if Is_Subject_To_Ghost (N) then - Policy := Policy_In_Effect (Name_Ghost); + Policy := Ghost_Policy_In_Effect (Gen_Id); -- An instantiation declaration within a Ghost region is automatically -- Ghost (SPARK RM 6.9(2)). elsif Ghost_Config.Ghost_Mode = Check then Policy := Name_Check; + Level := Ghost_Config.Ghost_Mode_Assertion_Level; elsif Ghost_Config.Ghost_Mode = Ignore then Policy := Name_Ignore; + Level := Ghost_Config.Ghost_Mode_Assertion_Level; -- Inherit the "ghostness" of the generic unit, but the current Ghost -- policy is the relevant one for the instantiation. - elsif Is_Checked_Ghost_Entity (Gen_Id) - or else Is_Ignored_Ghost_Entity (Gen_Id) - then - Policy := Policy_In_Effect (Name_Ghost); + elsif Is_Ghost_Entity (Gen_Id) then + Policy := Ghost_Policy_In_Effect (Gen_Id); if Policy = No_Name then Policy := Name_Ignore; end if; + + Level := Ghost_Assertion_Level (Gen_Id); end if; -- Mark the instantiation as Ghost - Mark_Ghost_Declaration_Or_Body (N, Policy); + Mark_Ghost_Declaration_Or_Body (N, Policy, Level); -- Install the appropriate Ghost region - Install_Ghost_Region (Policy, N); + Install_Ghost_Region (Policy, N, Level); -- Check Ghost actuals. Given that this routine is unconditionally -- invoked with subprogram and package instantiations, this check @@ -1739,25 +2270,39 @@ package body Ghost is procedure Mark_And_Set_Ghost_Procedure_Call (N : Node_Id) is Id : Entity_Id; - begin -- A procedure call becomes Ghost when the procedure being invoked is -- Ghost. Install the Ghost mode of the procedure. Id := Get_Enclosing_Ghost_Entity (Name (N)); - if Present (Id) then - if Is_Checked_Ghost_Entity (Id) then - Install_Ghost_Region (Check, N); + Mark_And_Set_Ghost_Region (N, Id); + end Mark_And_Set_Ghost_Procedure_Call; - elsif Is_Ignored_Ghost_Entity (Id) then - Install_Ghost_Region (Ignore, N); + ------------------------------- + -- Mark_And_Set_Ghost_Region -- + ------------------------------- - Set_Is_Ignored_Ghost_Node (N); - Record_Ignored_Ghost_Node (N); - end if; + procedure Mark_And_Set_Ghost_Region (N : Node_Id; Id : Entity_Id) is + Id_Policy : Name_Id; + begin + -- Nothing to do if we are not dealing with a ghost entity + + if No (Id) or else not Is_Ghost_Entity (Id) then + return; end if; - end Mark_And_Set_Ghost_Procedure_Call; + + Id_Policy := Ghost_Policy_In_Effect (Id); + + if Id_Policy = Name_Check then + Install_Ghost_Region (Check, N, Ghost_Assertion_Level (Id)); + + elsif Id_Policy = Name_Ignore then + Install_Ghost_Region (Ignore, N, Ghost_Assertion_Level (Id)); + Set_Is_Ignored_Ghost_Node (N); + Record_Ignored_Ghost_Node (N); + end if; + end Mark_And_Set_Ghost_Region; ----------------------- -- Mark_Ghost_Clause -- @@ -1780,7 +2325,7 @@ package body Ghost is if Present (Nam) and then Is_Entity_Name (Nam) and then Present (Entity (Nam)) - and then Is_Ignored_Ghost_Entity (Entity (Nam)) + and then Is_Ignored_Ghost_Entity_In_Codegen (Entity (Nam)) then Set_Is_Ignored_Ghost_Node (N); Record_Ignored_Ghost_Node (N); @@ -1792,8 +2337,9 @@ package body Ghost is ------------------------------------ procedure Mark_Ghost_Declaration_Or_Body - (N : Node_Id; - Mode : Name_Id) + (N : Node_Id; + Mode : Name_Id; + Level : Entity_Id) is Id : constant Entity_Id := Defining_Entity (N); @@ -1801,16 +2347,45 @@ package body Ghost is Param : Node_Id; Param_Id : Entity_Id; + procedure Mark_And_Set_Is_Checked_Ghost_Entity (E : Entity_Id); + -- Sets Is_Checked_Ghost_Entity, unsets Is_Ignored_Ghost_Entity + + procedure Mark_And_Set_Is_Ignored_Ghost_Entity (E : Entity_Id); + -- Sets Is_Ignored_Ghost_Entity, unsets Is_Checked_Ghost_Entity + + ------------------------------------------ + -- Mark_And_Set_Is_Checked_Ghost_Entity -- + ------------------------------------------ + + procedure Mark_And_Set_Is_Checked_Ghost_Entity (E : Entity_Id) is + begin + Set_Is_Checked_Ghost_Entity (E, True); + Set_Is_Ignored_Ghost_Entity (E, False); + end Mark_And_Set_Is_Checked_Ghost_Entity; + + ------------------------------------------ + -- Mark_And_Set_Is_Ignored_Ghost_Entity -- + ------------------------------------------ + + procedure Mark_And_Set_Is_Ignored_Ghost_Entity (E : Entity_Id) is + begin + Set_Is_Checked_Ghost_Entity (E, False); + Set_Is_Ignored_Ghost_Entity (E, True); + end Mark_And_Set_Is_Ignored_Ghost_Entity; + + -- Start of processing for Mark_Ghost_Declaration_Or_Body + begin - -- Mark the related node and its entity + Set_Ghost_Assertion_Level (Id, Level); if Mode = Name_Check then Mark_Formals := True; - Set_Is_Checked_Ghost_Entity (Id); + Mark_And_Set_Is_Checked_Ghost_Entity (Id); elsif Mode = Name_Ignore then Mark_Formals := True; - Set_Is_Ignored_Ghost_Entity (Id); + Mark_And_Set_Is_Ignored_Ghost_Entity (Id); + Set_Is_Ignored_Ghost_Node (N); Record_Ignored_Ghost_Node (N); end if; @@ -1835,11 +2410,13 @@ package body Ghost is while Present (Param) loop Param_Id := Defining_Entity (Param); + Set_Ghost_Assertion_Level (Param_Id, Level); + if Mode = Name_Check then - Set_Is_Checked_Ghost_Entity (Param_Id); + Mark_And_Set_Is_Checked_Ghost_Entity (Param_Id); elsif Mode = Name_Ignore then - Set_Is_Ignored_Ghost_Entity (Param_Id); + Mark_And_Set_Is_Ignored_Ghost_Entity (Param_Id); end if; Next (Param); @@ -1867,16 +2444,15 @@ package body Ghost is end if; end Mark_Ghost_Pragma; - procedure Mark_Ghost_Pragma - (N : Node_Id; - Mode : Ghost_Mode_Type) - is + procedure Mark_Ghost_Pragma (N : Node_Id; Mode : Ghost_Mode_Type) is begin if Mode = Check then - Set_Is_Checked_Ghost_Pragma (N); + Set_Is_Checked_Ghost_Pragma (N, True); + Set_Is_Ignored_Ghost_Pragma (N, False); else - Set_Is_Ignored_Ghost_Pragma (N); + Set_Is_Checked_Ghost_Pragma (N, False); + Set_Is_Ignored_Ghost_Pragma (N, True); Set_Is_Ignored_Ghost_Node (N); Record_Ignored_Ghost_Node (N); end if; @@ -1886,12 +2462,9 @@ package body Ghost is -- Mark_Ghost_Renaming -- ------------------------- - procedure Mark_Ghost_Renaming - (N : Node_Id; - Id : Entity_Id) - is + procedure Mark_Ghost_Renaming (N : Node_Id; Id : Entity_Id) is Policy : Name_Id := No_Name; - + Level : constant Entity_Id := Ghost_Assertion_Level (Id); begin -- A renaming becomes Ghost when it renames a Ghost entity @@ -1902,7 +2475,7 @@ package body Ghost is Policy := Name_Ignore; end if; - Mark_Ghost_Declaration_Or_Body (N, Policy); + Mark_Ghost_Declaration_Or_Body (N, Policy, Level); end Mark_Ghost_Renaming; ------------------------ @@ -2036,19 +2609,21 @@ package body Ghost is -------------------------------- procedure Set_Ghost_Mode_From_Entity (Id : Entity_Id) is + Level : constant Entity_Id := Ghost_Assertion_Level (Id); begin if Is_Checked_Ghost_Entity (Id) then - Install_Ghost_Mode (Check); + Install_Ghost_Region (Check, N, Level); elsif Is_Ignored_Ghost_Entity (Id) then - Install_Ghost_Mode (Ignore); + Install_Ghost_Region (Ignore, N, Level); else - Install_Ghost_Mode (None); + Install_Ghost_Region (None, N, Level); end if; end Set_Ghost_Mode_From_Entity; -- Local variables - Id : Entity_Id; + Id : Entity_Id; + Level : Entity_Id; -- Start of processing for Set_Ghost_Mode @@ -2084,12 +2659,27 @@ package body Ghost is -- property is encoded in the pragma itself. elsif Nkind (N) = N_Pragma then + Level := Pragma_Ghost_Assertion_Level (N); + if Is_Checked_Ghost_Pragma (N) then - Install_Ghost_Mode (Check); + + -- Still install an ignored ghost region if the pragma is attached + -- to a checked ghost entity, but the pragma itself is explicitly + -- ignored. + + if Is_Ignored (N) then + Install_Ghost_Region (Ignore, N, Level); + else + Install_Ghost_Region (Check, N, Level); + end if; elsif Is_Ignored_Ghost_Pragma (N) then - Install_Ghost_Mode (Ignore); + Install_Ghost_Region (Ignore, N, Level); else - Install_Ghost_Mode (None); + if Is_Checked (N) then + Install_Ghost_Region (Check, N, Level); + else + Install_Ghost_Region (None, N, Level); + end if; end if; -- The Ghost mode of a procedure call depends on the Ghost mode of the @@ -2109,7 +2699,7 @@ package body Ghost is ------------------------- procedure Set_Is_Ghost_Entity (Id : Entity_Id) is - Policy : constant Name_Id := Policy_In_Effect (Name_Ghost); + Policy : constant Name_Id := Ghost_Policy_In_Effect (Id); begin if Policy = Name_Check then Set_Is_Checked_Ghost_Entity (Id); diff --git a/gcc/ada/ghost.ads b/gcc/ada/ghost.ads index 62c809c8fd34..87401c16a66c 100644 --- a/gcc/ada/ghost.ads +++ b/gcc/ada/ghost.ads @@ -32,6 +32,16 @@ with Types; use Types; package Ghost is + function Assertion_Level_From_Arg (Arg : Node_Id) return Entity_Id; + -- Returns the assertion level for the given pragma or aspect based on + -- the argument Arg. Which is either + -- + -- * Standard_Level_Default if there was no argument or the argument + -- evaluated to True. + -- * Assertion_Level if the argument was referencing a user defined + -- Assertion_Level. + -- * Empty othrwise since we are not dealing with a ghost entity. + procedure Check_Ghost_Completion (Prev_Id : Entity_Id; Compl_Id : Entity_Id); @@ -49,7 +59,7 @@ package Ghost is (Actual : Node_Id; Formal : Entity_Id); -- Check that if Actual contains references to ghost entities, generic - -- formal parameter Formal is ghost (SPARK RM 6.9(10)). + -- formal parameter Formal is ghost (SPARK RM 6.9(13)). procedure Check_Ghost_Formal_Procedure_Or_Package (N : Node_Id; @@ -58,7 +68,7 @@ package Ghost is Is_Default : Boolean := False); -- Verify that if generic formal procedure (resp. package) Formal is ghost, -- then Actual is not Empty and also a ghost procedure (resp. package) - -- (SPARK RM 6.9(13-14)). The error if any is located on N. If + -- (SPARK RM 6.9(16-17)). The error if any is located on N. If -- Is_Default is False, N and Actual represent the actual parameter in an -- instantiation. Otherwise, they represent the default subprogram of a -- formal subprogram declaration. @@ -69,7 +79,7 @@ package Ghost is Is_Default : Boolean := False); -- Verify that if Formal (either an IN OUT generic formal parameter, or an -- IN generic formal parameter of access-to-variable type) is ghost, then - -- Actual is a ghost object (SPARK RM 6.9(13-14)). Is_Default is True when + -- Actual is a ghost object (SPARK RM 6.9(16-17)). Is_Default is True when -- Actual is the default expression of the formal object declaration. procedure Check_Ghost_Overriding @@ -90,7 +100,9 @@ package Ghost is Constit : Node_Id; Constit_Id : Entity_Id); -- Verify that the Ghost policy of constituent Constit_Id is compatible - -- with the Ghost policy of abstract state State_I. + -- with the Ghost policy of abstract state State_Id. + -- + -- Additionally verify that the Ghost_Assertion_Levels are compatible. procedure Check_Ghost_Type (Typ : Entity_Id); -- Verify that Ghost type Typ is neither concurrent, nor effectively @@ -102,11 +114,23 @@ package Ghost is procedure Initialize; -- Initialize internal tables - procedure Install_Ghost_Region (Mode : Ghost_Mode_Type; N : Node_Id); + procedure Install_Ghost_Region + (Mode : Ghost_Mode_Type; + N : Node_Id; + Level : Entity_Id); pragma Inline (Install_Ghost_Region); -- Install a Ghost region described by mode Mode and ignored region start -- node N. + function Is_Assertion_Level_Dependent + (Self : Entity_Id; Other : Entity_Id) return Boolean; + -- Check that assertion level Self is assertion-level-dependent with Other. + -- + -- According to SPARK RM 6.9(6) this means that + -- * Either Self or Other has the default assertion level. + -- * Self either is or depends on Other + -- * Self either is or depends on Static + function Is_Ghost_Assignment (N : Node_Id) return Boolean; -- Determine whether arbitrary node N denotes an assignment statement whose -- target is a Ghost entity. @@ -238,7 +262,7 @@ package Ghost is procedure Remove_Ignored_Ghost_Code; -- Remove all code marked as ignored Ghost from the trees of all qualifying - -- units (SPARK RM 6.9(4)). + -- units (SPARK RM 6.9(5)). -- -- WARNING: this is a separate front end pass, care should be taken to keep -- it optimized. diff --git a/gcc/ada/gnat1drv.adb b/gcc/ada/gnat1drv.adb index ee2c329aed7b..176f2e2a4a23 100644 --- a/gcc/ada/gnat1drv.adb +++ b/gcc/ada/gnat1drv.adb @@ -175,6 +175,12 @@ procedure Gnat1drv is Disable_ALI_File := True; end if; + -- -gnatd_o disables backend overflow checks on target; used for testing + + if Debug_Flag_Underscore_O then + Backend_Overflow_Checks_On_Target := False; + end if; + -- -gnatd.E sets Error_To_Warning mode, causing selected error messages -- to be treated as warnings instead of errors. diff --git a/gcc/ada/gnat_rm.texi b/gcc/ada/gnat_rm.texi index 5d7bedc67ee0..73515157f2f8 100644 --- a/gcc/ada/gnat_rm.texi +++ b/gcc/ada/gnat_rm.texi @@ -19,7 +19,7 @@ @copying @quotation -GNAT Reference Manual , Jul 24, 2025 +GNAT Reference Manual , Sep 29, 2025 AdaCore @@ -110,6 +110,7 @@ Implementation Defined Pragmas * Pragma Annotate:: * Pragma Assert:: * Pragma Assert_And_Cut:: +* Pragma Assertion_Level:: * Pragma Assertion_Policy:: * Pragma Assume:: * Pragma Assume_No_Invalid_Values:: @@ -323,6 +324,7 @@ Implementation Defined Aspects * Aspect Effective_Writes:: * Aspect Exceptional_Cases:: * Aspect Exit_Cases:: +* Aspect Extended_Access:: * Aspect Extensions_Visible:: * Aspect Favor_Top_Level:: * Aspect Ghost:: @@ -755,6 +757,7 @@ The GNAT Library * GNAT.Bubble_Sort_G (g-busorg.ads): GNAT Bubble_Sort_G g-busorg ads. * GNAT.Byte_Order_Mark (g-byorma.ads): GNAT Byte_Order_Mark g-byorma ads. * GNAT.Byte_Swapping (g-bytswa.ads): GNAT Byte_Swapping g-bytswa ads. +* GNAT.C_Time (g-c_time.ads): GNAT C_Time g-c_time ads. * GNAT.Calendar (g-calend.ads): GNAT Calendar g-calend ads. * GNAT.Calendar.Time_IO (g-catiio.ads): GNAT Calendar Time_IO g-catiio ads. * GNAT.CRC32 (g-crc32.ads): GNAT CRC32 g-crc32 ads. @@ -908,6 +911,7 @@ Curated Extensions * Constrained attribute for generic objects:: * Static aspect on intrinsic functions:: * First Controlling Parameter:: +* Generalized Finalization:: Deep delta Aggregates @@ -916,6 +920,12 @@ Deep delta Aggregates * Dynamic Semantics:: * Examples:: +Generalized Finalization + +* Finalizable tagged types:: +* Composite types:: +* Interoperability with controlled types:: + Experimental Language Extensions * Conditional when constructs:: @@ -925,13 +935,13 @@ Experimental Language Extensions * Simpler Accessibility Model:: * Case pattern matching:: * Mutably Tagged Types with Size’Class Aspect:: -* Generalized Finalization:: * No_Raise aspect:: * Inference of Dependent Types in Generic Instantiations:: * External_Initialization Aspect:: * Finally construct:: * Continue statement:: * Destructors:: +* Structural Generic Instantiation:: Storage Model @@ -945,18 +955,18 @@ Simpler Accessibility Model * Subprogram parameters:: * Function results:: -Generalized Finalization - -* Finalizable tagged types:: -* Composite types:: -* Interoperability with controlled types:: - Finally construct * Syntax: Syntax<2>. * Legality Rules: Legality Rules<2>. * Dynamic Semantics: Dynamic Semantics<2>. +Structural Generic Instantiation + +* Syntax: Syntax<3>. +* Legality Rules: Legality Rules<3>. +* Static Semantics:: + Security Hardening Features * Register Scrubbing:: @@ -967,6 +977,7 @@ Security Hardening Features Obsolescent Features +* PolyORB:: * pragma No_Run_Time:: * pragma Ravenscar:: * pragma Restricted_Run_Time:: @@ -1282,6 +1293,7 @@ consideration, the use of these pragmas should be minimized. * Pragma Annotate:: * Pragma Assert:: * Pragma Assert_And_Cut:: +* Pragma Assertion_Level:: * Pragma Assertion_Policy:: * Pragma Assume:: * Pragma Assume_No_Invalid_Values:: @@ -1865,9 +1877,8 @@ The analyzed pragma is retained in the tree, but not otherwise processed by any part of the GNAT compiler, except to generate corresponding note lines in the generated ALI file. For the format of these note lines, see the compiler source file lib-writ.ads. This pragma is intended for use by -external tools, including ASIS. The use of pragma Annotate does not -affect the compilation process in any way. This pragma may be used as -a configuration pragma. +external tools. The use of pragma Annotate does not affect the compilation +process in any way. This pragma may be used as a configuration pragma. @node Pragma Assert,Pragma Assert_And_Cut,Pragma Annotate,Implementation Defined Pragmas @anchor{gnat_rm/implementation_defined_pragmas pragma-assert}@anchor{2c} @@ -1935,7 +1946,11 @@ of Ada from 2005 on. In GNAT, it is implemented in all versions of Ada, and the DISABLE policy is an implementation-defined addition. -@node Pragma Assert_And_Cut,Pragma Assertion_Policy,Pragma Assert,Implementation Defined Pragmas +This is an assertion kind pragma that can associate a set of its arguments +with an assertion level. See SPARK 2014 Reference Manual, section +11.4.2. + +@node Pragma Assert_And_Cut,Pragma Assertion_Level,Pragma Assert,Implementation Defined Pragmas @anchor{gnat_rm/implementation_defined_pragmas pragma-assert-and-cut}@anchor{2d} @section Pragma Assert_And_Cut @@ -1962,8 +1977,31 @@ a subprogram into sections for the purposes of testing or formal verification. The pragma also serves as useful documentation. -@node Pragma Assertion_Policy,Pragma Assume,Pragma Assert_And_Cut,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-assertion-policy}@anchor{2e} +This is an assertion kind pragma that can associate a set of its arguments +with an assertion level. See SPARK 2014 Reference Manual, section +11.4.2. + +@node Pragma Assertion_Level,Pragma Assertion_Policy,Pragma Assert_And_Cut,Implementation Defined Pragmas +@anchor{gnat_rm/implementation_defined_pragmas pragma-assertion-level}@anchor{2e} +@section Pragma Assertion_Level + + +Syntax: + +@example +pragma Assertion_Level (LEVEL_IDENTIFIER + [, depends => DEPENDENCY_DESCRIPTOR]); + +DEPENDENCY_DESCRIPTOR ::= LEVEL_IDENTIFIER | LEVEL_IDENTIFIER_LIST + +LEVEL_IDENTIFIER_LIST ::= '[' LEVEL_IDENTIFIER @{, LEVEL_IDENTIFIER@} ']' +@end example + +For the semantics of this pragma, see the SPARK 2014 Reference Manual, +section 11.4.3. + +@node Pragma Assertion_Policy,Pragma Assume,Pragma Assertion_Level,Implementation Defined Pragmas +@anchor{gnat_rm/implementation_defined_pragmas pragma-assertion-policy}@anchor{2f} @section Pragma Assertion_Policy @@ -1976,7 +2014,7 @@ pragma Assertion_Policy ( ASSERTION_KIND => POLICY_IDENTIFIER @{, ASSERTION_KIND => POLICY_IDENTIFIER@}); -ASSERTION_KIND ::= RM_ASSERTION_KIND | ID_ASSERTION_KIND +ASSERTION_KIND ::= RM_ASSERTION_KIND | ID_ASSERTION_KIND | ASSERTION_LEVEL RM_ASSERTION_KIND ::= Assert | Static_Predicate | @@ -2016,6 +2054,10 @@ The assertion kinds @code{RM_ASSERTION_KIND} are those defined in the Ada standard. The assertion kinds @code{ID_ASSERTION_KIND} are implementation defined additions recognized by the GNAT compiler. +Additionally the pragma can apply to an assertion level defined by the +@code{Assertion_Level} pragma. For more details see the SPARK 2014 Reference +Manual, section 11.4.2. + The pragma applies in both cases to pragmas and aspects with matching names, e.g. @code{Pre} applies to the Pre aspect, and @code{Precondition} applies to both the @code{Precondition} pragma @@ -2050,7 +2092,7 @@ applies to @code{Assert}, @code{Assert_And_Cut}, @code{Assume}, @code{Loop_Invariant}, and @code{Loop_Variant}. @node Pragma Assume,Pragma Assume_No_Invalid_Values,Pragma Assertion_Policy,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-assume}@anchor{2f} +@anchor{gnat_rm/implementation_defined_pragmas pragma-assume}@anchor{30} @section Pragma Assume @@ -2083,8 +2125,12 @@ but it acts as a useful run-time check that the assumption is met, and documents the need to ensure that it is met by reference to information outside the program. +This is an assertion kind pragma that can associate a set of its arguments +with an assertion level. See SPARK 2014 Reference Manual, section +11.4.2. + @node Pragma Assume_No_Invalid_Values,Pragma Async_Readers,Pragma Assume,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-assume-no-invalid-values}@anchor{30} +@anchor{gnat_rm/implementation_defined_pragmas pragma-assume-no-invalid-values}@anchor{31} @section Pragma Assume_No_Invalid_Values @@ -2137,7 +2183,7 @@ is erroneous so there are no guarantees that this will always be the case, and it is recommended that these two options not be used together. @node Pragma Async_Readers,Pragma Async_Writers,Pragma Assume_No_Invalid_Values,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id5}@anchor{31}@anchor{gnat_rm/implementation_defined_pragmas pragma-async-readers}@anchor{32} +@anchor{gnat_rm/implementation_defined_pragmas id5}@anchor{32}@anchor{gnat_rm/implementation_defined_pragmas pragma-async-readers}@anchor{33} @section Pragma Async_Readers @@ -2151,7 +2197,7 @@ For the semantics of this pragma, see the entry for aspect @code{Async_Readers} the SPARK 2014 Reference Manual, section 7.1.2. @node Pragma Async_Writers,Pragma Attribute_Definition,Pragma Async_Readers,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id6}@anchor{33}@anchor{gnat_rm/implementation_defined_pragmas pragma-async-writers}@anchor{34} +@anchor{gnat_rm/implementation_defined_pragmas id6}@anchor{34}@anchor{gnat_rm/implementation_defined_pragmas pragma-async-writers}@anchor{35} @section Pragma Async_Writers @@ -2165,7 +2211,7 @@ For the semantics of this pragma, see the entry for aspect @code{Async_Writers} the SPARK 2014 Reference Manual, section 7.1.2. @node Pragma Attribute_Definition,Pragma C_Pass_By_Copy,Pragma Async_Writers,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-attribute-definition}@anchor{35} +@anchor{gnat_rm/implementation_defined_pragmas pragma-attribute-definition}@anchor{36} @section Pragma Attribute_Definition @@ -2191,7 +2237,7 @@ code to be written that takes advantage of some new attribute, while remaining compilable with earlier compilers. @node Pragma C_Pass_By_Copy,Pragma Check,Pragma Attribute_Definition,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-c-pass-by-copy}@anchor{36} +@anchor{gnat_rm/implementation_defined_pragmas pragma-c-pass-by-copy}@anchor{37} @section Pragma C_Pass_By_Copy @@ -2235,7 +2281,7 @@ You can also pass records by copy by specifying the convention passing mechanisms on a parameter by parameter basis. @node Pragma Check,Pragma Check_Float_Overflow,Pragma C_Pass_By_Copy,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-check}@anchor{37} +@anchor{gnat_rm/implementation_defined_pragmas pragma-check}@anchor{38} @section Pragma Check @@ -2274,7 +2320,7 @@ of these identifiers in @code{Assertion_Policy} and @code{Check_Policy} pragmas, where they are used to refer to sets of assertions. @node Pragma Check_Float_Overflow,Pragma Check_Name,Pragma Check,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-check-float-overflow}@anchor{38} +@anchor{gnat_rm/implementation_defined_pragmas pragma-check-float-overflow}@anchor{39} @section Pragma Check_Float_Overflow @@ -2330,7 +2376,7 @@ This mode can also be set by use of the compiler switch `-gnateF'. @node Pragma Check_Name,Pragma Check_Policy,Pragma Check_Float_Overflow,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-check-name}@anchor{39} +@anchor{gnat_rm/implementation_defined_pragmas pragma-check-name}@anchor{3a} @section Pragma Check_Name @@ -2366,7 +2412,7 @@ Check names introduced by this pragma are subject to control by compiler switches (in particular -gnatp) in the usual manner. @node Pragma Check_Policy,Pragma Comment,Pragma Check_Name,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-check-policy}@anchor{3a} +@anchor{gnat_rm/implementation_defined_pragmas pragma-check-policy}@anchor{3b} @section Pragma Check_Policy @@ -2446,7 +2492,7 @@ policy setting @code{DISABLE} causes the second argument of a corresponding @code{Check} pragma to be completely ignored and not analyzed. @node Pragma Comment,Pragma Common_Object,Pragma Check_Policy,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-comment}@anchor{3b} +@anchor{gnat_rm/implementation_defined_pragmas pragma-comment}@anchor{3c} @section Pragma Comment @@ -2465,7 +2511,7 @@ anywhere in the main source unit), and if more than one pragma is used, all comments are retained. @node Pragma Common_Object,Pragma Compile_Time_Error,Pragma Comment,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-common-object}@anchor{3c} +@anchor{gnat_rm/implementation_defined_pragmas pragma-common-object}@anchor{3d} @section Pragma Common_Object @@ -2497,7 +2543,7 @@ indicating that the necessary attribute for implementation of this pragma is not available. @node Pragma Compile_Time_Error,Pragma Compile_Time_Warning,Pragma Common_Object,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas compile-time-error}@anchor{3d}@anchor{gnat_rm/implementation_defined_pragmas pragma-compile-time-error}@anchor{3e} +@anchor{gnat_rm/implementation_defined_pragmas compile-time-error}@anchor{3e}@anchor{gnat_rm/implementation_defined_pragmas pragma-compile-time-error}@anchor{3f} @section Pragma Compile_Time_Error @@ -2524,7 +2570,7 @@ the value given as the second argument. This string value may contain embedded ASCII.LF characters to break the message into multiple lines. @node Pragma Compile_Time_Warning,Pragma Complete_Representation,Pragma Compile_Time_Error,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-compile-time-warning}@anchor{3f} +@anchor{gnat_rm/implementation_defined_pragmas pragma-compile-time-warning}@anchor{40} @section Pragma Compile_Time_Warning @@ -2551,11 +2597,11 @@ for example that it is not fully implemented. In previous versions of the compiler, combining `-gnatwe' with Compile_Time_Warning resulted in a fatal error. Now the compiler always emits -a warning. You can use @ref{3d,,Pragma Compile_Time_Error} to force the generation of +a warning. You can use @ref{3e,,Pragma Compile_Time_Error} to force the generation of an error. @node Pragma Complete_Representation,Pragma Complex_Representation,Pragma Compile_Time_Warning,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-complete-representation}@anchor{40} +@anchor{gnat_rm/implementation_defined_pragmas pragma-complete-representation}@anchor{41} @section Pragma Complete_Representation @@ -2574,7 +2620,7 @@ complete, and that this invariant is maintained if fields are added to the record in the future. @node Pragma Complex_Representation,Pragma Component_Alignment,Pragma Complete_Representation,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-complex-representation}@anchor{41} +@anchor{gnat_rm/implementation_defined_pragmas pragma-complex-representation}@anchor{42} @section Pragma Complex_Representation @@ -2596,7 +2642,7 @@ records by pointer, and the use of this pragma may result in passing this type in floating-point registers. @node Pragma Component_Alignment,Pragma Constant_After_Elaboration,Pragma Complex_Representation,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-component-alignment}@anchor{42} +@anchor{gnat_rm/implementation_defined_pragmas pragma-component-alignment}@anchor{43} @section Pragma Component_Alignment @@ -2687,7 +2733,7 @@ pragma @code{Pack}, pragma @code{Component_Alignment}, or a record rep clause), the GNAT uses the default alignment as described previously. @node Pragma Constant_After_Elaboration,Pragma Contract_Cases,Pragma Component_Alignment,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id7}@anchor{43}@anchor{gnat_rm/implementation_defined_pragmas pragma-constant-after-elaboration}@anchor{44} +@anchor{gnat_rm/implementation_defined_pragmas id7}@anchor{44}@anchor{gnat_rm/implementation_defined_pragmas pragma-constant-after-elaboration}@anchor{45} @section Pragma Constant_After_Elaboration @@ -2701,7 +2747,7 @@ For the semantics of this pragma, see the entry for aspect @code{Constant_After_Elaboration} in the SPARK 2014 Reference Manual, section 3.3.1. @node Pragma Contract_Cases,Pragma Convention_Identifier,Pragma Constant_After_Elaboration,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id8}@anchor{45}@anchor{gnat_rm/implementation_defined_pragmas pragma-contract-cases}@anchor{46} +@anchor{gnat_rm/implementation_defined_pragmas id8}@anchor{46}@anchor{gnat_rm/implementation_defined_pragmas pragma-contract-cases}@anchor{47} @section Pragma Contract_Cases @@ -2785,8 +2831,12 @@ call, as determined by the corresponding case guard evaluating to True, and that the consequence for this case should hold when the subprogram returns. +This is an assertion kind pragma that can associate a set of its arguments +with an assertion level. See SPARK 2014 Reference Manual, section +11.4.2. + @node Pragma Convention_Identifier,Pragma CPP_Class,Pragma Contract_Cases,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-convention-identifier}@anchor{47} +@anchor{gnat_rm/implementation_defined_pragmas pragma-convention-identifier}@anchor{48} @section Pragma Convention_Identifier @@ -2822,7 +2872,7 @@ define a convention identifier @code{Library} and use a single would be used system-wide. @node Pragma CPP_Class,Pragma CPP_Constructor,Pragma Convention_Identifier,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-cpp-class}@anchor{48} +@anchor{gnat_rm/implementation_defined_pragmas pragma-cpp-class}@anchor{49} @section Pragma CPP_Class @@ -2847,14 +2897,14 @@ functions (see pragma @code{CPP_Constructor}). Such types are implicitly limited if not explicitly declared as limited or derived from a limited type, and an error is issued in that case. -See @ref{49,,Interfacing to C++} for related information. +See @ref{4a,,Interfacing to C++} for related information. Note: Pragma @code{CPP_Class} is currently obsolete. It is supported for backward compatibility but its functionality is available using pragma @code{Import} with @code{Convention} = @code{CPP}. @node Pragma CPP_Constructor,Pragma CPP_Virtual,Pragma CPP_Class,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-cpp-constructor}@anchor{4a} +@anchor{gnat_rm/implementation_defined_pragmas pragma-cpp-constructor}@anchor{4b} @section Pragma CPP_Constructor @@ -2905,7 +2955,7 @@ on the Ada side and the type is implicitly declared abstract. Pragma @code{CPP_Constructor} is intended primarily for automatic generation using an automatic binding generator tool (such as the @code{-fdump-ada-spec} GCC switch). -See @ref{49,,Interfacing to C++} for more related information. +See @ref{4a,,Interfacing to C++} for more related information. Note: The use of functions returning class-wide types for constructors is currently obsolete. They are supported for backward compatibility. The @@ -2914,7 +2964,7 @@ because the imported C++ constructors always return an object of type T; that is, they never return an object whose type is a descendant of type T. @node Pragma CPP_Virtual,Pragma CPP_Vtable,Pragma CPP_Constructor,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-cpp-virtual}@anchor{4b} +@anchor{gnat_rm/implementation_defined_pragmas pragma-cpp-virtual}@anchor{4c} @section Pragma CPP_Virtual @@ -2927,10 +2977,10 @@ purposes. It used to be required to ensure compatibility with C++, but is no longer required for that purpose because GNAT generates the same object layout as the G++ compiler by default. -See @ref{49,,Interfacing to C++} for related information. +See @ref{4a,,Interfacing to C++} for related information. @node Pragma CPP_Vtable,Pragma CPU,Pragma CPP_Virtual,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-cpp-vtable}@anchor{4c} +@anchor{gnat_rm/implementation_defined_pragmas pragma-cpp-vtable}@anchor{4d} @section Pragma CPP_Vtable @@ -2942,10 +2992,10 @@ It used to be required to ensure compatibility with C++, but is no longer required for that purpose because GNAT generates the same object layout as the G++ compiler by default. -See @ref{49,,Interfacing to C++} for related information. +See @ref{4a,,Interfacing to C++} for related information. @node Pragma CPU,Pragma Deadline_Floor,Pragma CPP_Vtable,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-cpu}@anchor{4d} +@anchor{gnat_rm/implementation_defined_pragmas pragma-cpu}@anchor{4e} @section Pragma CPU @@ -2960,7 +3010,7 @@ versions of Ada as an implementation-defined pragma. See Ada 2012 Reference Manual for details. @node Pragma Deadline_Floor,Pragma Debug,Pragma CPU,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-deadline-floor}@anchor{4e} +@anchor{gnat_rm/implementation_defined_pragmas pragma-deadline-floor}@anchor{4f} @section Pragma Deadline_Floor @@ -2975,7 +3025,7 @@ deadline inherited by a task when the task enters a protected object. It is effective only when the EDF scheduling policy is used. @node Pragma Debug,Pragma Debug_Policy,Pragma Deadline_Floor,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-debug}@anchor{4f} +@anchor{gnat_rm/implementation_defined_pragmas pragma-debug}@anchor{50} @section Pragma Debug @@ -3002,8 +3052,12 @@ pragmas can be enabled either by use of the command line switch `-gnata' or by use of the pragma @code{Check_Policy} with a first argument of @code{Debug}. +This is an assertion kind pragma that can associate a set of its arguments +with an assertion level. See SPARK 2014 Reference Manual, section +11.4.2. + @node Pragma Debug_Policy,Pragma Default_Initial_Condition,Pragma Debug,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-debug-policy}@anchor{50} +@anchor{gnat_rm/implementation_defined_pragmas pragma-debug-policy}@anchor{51} @section Pragma Debug_Policy @@ -3018,7 +3072,7 @@ with a first argument of @code{Debug}. It is retained for historical compatibility reasons. @node Pragma Default_Initial_Condition,Pragma Default_Scalar_Storage_Order,Pragma Debug_Policy,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id9}@anchor{51}@anchor{gnat_rm/implementation_defined_pragmas pragma-default-initial-condition}@anchor{52} +@anchor{gnat_rm/implementation_defined_pragmas id9}@anchor{52}@anchor{gnat_rm/implementation_defined_pragmas pragma-default-initial-condition}@anchor{53} @section Pragma Default_Initial_Condition @@ -3031,8 +3085,12 @@ pragma Default_Initial_Condition [ (null | boolean_EXPRESSION) ]; For the semantics of this pragma, see the entry for aspect @code{Default_Initial_Condition} in the SPARK 2014 Reference Manual, section 7.3.3. +This is an assertion kind pragma that can associate a set of its arguments +with an assertion level. See SPARK 2014 Reference Manual, section +11.4.2. + @node Pragma Default_Scalar_Storage_Order,Pragma Default_Storage_Pool,Pragma Default_Initial_Condition,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-default-scalar-storage-order}@anchor{53} +@anchor{gnat_rm/implementation_defined_pragmas pragma-default-scalar-storage-order}@anchor{54} @section Pragma Default_Scalar_Storage_Order @@ -3105,7 +3163,7 @@ it may significantly degrade the run-time performance of the software, instead the default scalar storage order ought to be changed only on a local basis. @node Pragma Default_Storage_Pool,Pragma Depends,Pragma Default_Scalar_Storage_Order,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-default-storage-pool}@anchor{54} +@anchor{gnat_rm/implementation_defined_pragmas pragma-default-storage-pool}@anchor{55} @section Pragma Default_Storage_Pool @@ -3122,7 +3180,7 @@ versions of Ada as an implementation-defined pragma. See Ada 2012 Reference Manual for details. @node Pragma Depends,Pragma Detect_Blocking,Pragma Default_Storage_Pool,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id10}@anchor{55}@anchor{gnat_rm/implementation_defined_pragmas pragma-depends}@anchor{56} +@anchor{gnat_rm/implementation_defined_pragmas id10}@anchor{56}@anchor{gnat_rm/implementation_defined_pragmas pragma-depends}@anchor{57} @section Pragma Depends @@ -3155,7 +3213,7 @@ For the semantics of this pragma, see the entry for aspect @code{Depends} in the SPARK 2014 Reference Manual, section 6.1.5. @node Pragma Detect_Blocking,Pragma Disable_Atomic_Synchronization,Pragma Depends,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-detect-blocking}@anchor{57} +@anchor{gnat_rm/implementation_defined_pragmas pragma-detect-blocking}@anchor{58} @section Pragma Detect_Blocking @@ -3173,7 +3231,7 @@ blocking operations within a protected operation, and to raise Program_Error if that happens. @node Pragma Disable_Atomic_Synchronization,Pragma Dispatching_Domain,Pragma Detect_Blocking,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-disable-atomic-synchronization}@anchor{58} +@anchor{gnat_rm/implementation_defined_pragmas pragma-disable-atomic-synchronization}@anchor{59} @section Pragma Disable_Atomic_Synchronization @@ -3202,7 +3260,7 @@ until the end of the scope. If an @code{Entity} argument is present, the action applies only to that entity. @node Pragma Dispatching_Domain,Pragma Effective_Reads,Pragma Disable_Atomic_Synchronization,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-dispatching-domain}@anchor{59} +@anchor{gnat_rm/implementation_defined_pragmas pragma-dispatching-domain}@anchor{5a} @section Pragma Dispatching_Domain @@ -3217,7 +3275,7 @@ versions of Ada as an implementation-defined pragma. See Ada 2012 Reference Manual for details. @node Pragma Effective_Reads,Pragma Effective_Writes,Pragma Dispatching_Domain,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id11}@anchor{5a}@anchor{gnat_rm/implementation_defined_pragmas pragma-effective-reads}@anchor{5b} +@anchor{gnat_rm/implementation_defined_pragmas id11}@anchor{5b}@anchor{gnat_rm/implementation_defined_pragmas pragma-effective-reads}@anchor{5c} @section Pragma Effective_Reads @@ -3231,7 +3289,7 @@ For the semantics of this pragma, see the entry for aspect @code{Effective_Reads the SPARK 2014 Reference Manual, section 7.1.2. @node Pragma Effective_Writes,Pragma Elaboration_Checks,Pragma Effective_Reads,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id12}@anchor{5c}@anchor{gnat_rm/implementation_defined_pragmas pragma-effective-writes}@anchor{5d} +@anchor{gnat_rm/implementation_defined_pragmas id12}@anchor{5d}@anchor{gnat_rm/implementation_defined_pragmas pragma-effective-writes}@anchor{5e} @section Pragma Effective_Writes @@ -3245,7 +3303,7 @@ For the semantics of this pragma, see the entry for aspect @code{Effective_Write in the SPARK 2014 Reference Manual, section 7.1.2. @node Pragma Elaboration_Checks,Pragma Eliminate,Pragma Effective_Writes,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-elaboration-checks}@anchor{5e} +@anchor{gnat_rm/implementation_defined_pragmas pragma-elaboration-checks}@anchor{5f} @section Pragma Elaboration_Checks @@ -3282,7 +3340,7 @@ effect. If the pragma argument is @code{Static}, then the static elaboration mod is in effect. @node Pragma Eliminate,Pragma Enable_Atomic_Synchronization,Pragma Elaboration_Checks,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-eliminate}@anchor{5f} +@anchor{gnat_rm/implementation_defined_pragmas pragma-eliminate}@anchor{60} @section Pragma Eliminate @@ -3449,7 +3507,7 @@ pragma Eliminate (Q, Proc, @end quotation @node Pragma Enable_Atomic_Synchronization,Pragma Exceptional_Cases,Pragma Eliminate,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-enable-atomic-synchronization}@anchor{60} +@anchor{gnat_rm/implementation_defined_pragmas pragma-enable-atomic-synchronization}@anchor{61} @section Pragma Enable_Atomic_Synchronization @@ -3465,7 +3523,7 @@ Reenables atomic synchronization; see @code{pragma Disable_Atomic_Synchronizatio for details. @node Pragma Exceptional_Cases,Pragma Exit_Cases,Pragma Enable_Atomic_Synchronization,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-exceptional-cases}@anchor{61} +@anchor{gnat_rm/implementation_defined_pragmas pragma-exceptional-cases}@anchor{62} @section Pragma Exceptional_Cases @@ -3485,7 +3543,7 @@ For the semantics of this aspect, see the SPARK 2014 Reference Manual, section 6.1.9. @node Pragma Exit_Cases,Pragma Export_Function,Pragma Exceptional_Cases,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-exit-cases}@anchor{62} +@anchor{gnat_rm/implementation_defined_pragmas pragma-exit-cases}@anchor{63} @section Pragma Exit_Cases @@ -3509,7 +3567,7 @@ For the semantics of this aspect, see the SPARK 2014 Reference Manual, section 6.1.10. @node Pragma Export_Function,Pragma Export_Object,Pragma Exit_Cases,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-export-function}@anchor{63} +@anchor{gnat_rm/implementation_defined_pragmas pragma-export-function}@anchor{64} @section Pragma Export_Function @@ -3581,7 +3639,7 @@ string. In this case, no external name is generated. This form still allows the specification of parameter mechanisms. @node Pragma Export_Object,Pragma Export_Procedure,Pragma Export_Function,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-export-object}@anchor{64} +@anchor{gnat_rm/implementation_defined_pragmas pragma-export-object}@anchor{65} @section Pragma Export_Object @@ -3606,7 +3664,7 @@ of portability), but it is not required. @code{Size} is syntax checked, but otherwise ignored by GNAT. @node Pragma Export_Procedure,Pragma Export_Valued_Procedure,Pragma Export_Object,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-export-procedure}@anchor{65} +@anchor{gnat_rm/implementation_defined_pragmas pragma-export-procedure}@anchor{66} @section Pragma Export_Procedure @@ -3659,7 +3717,7 @@ string. In this case, no external name is generated. This form still allows the specification of parameter mechanisms. @node Pragma Export_Valued_Procedure,Pragma Extend_System,Pragma Export_Procedure,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-export-valued-procedure}@anchor{66} +@anchor{gnat_rm/implementation_defined_pragmas pragma-export-valued-procedure}@anchor{67} @section Pragma Export_Valued_Procedure @@ -3717,7 +3775,7 @@ string. In this case, no external name is generated. This form still allows the specification of parameter mechanisms. @node Pragma Extend_System,Pragma Extensions_Allowed,Pragma Export_Valued_Procedure,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-extend-system}@anchor{67} +@anchor{gnat_rm/implementation_defined_pragmas pragma-extend-system}@anchor{68} @section Pragma Extend_System @@ -3768,7 +3826,7 @@ for compiling System units, as explained in the GNAT User’s Guide. @node Pragma Extensions_Allowed,Pragma Extensions_Visible,Pragma Extend_System,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id13}@anchor{68}@anchor{gnat_rm/implementation_defined_pragmas pragma-extensions-allowed}@anchor{69} +@anchor{gnat_rm/implementation_defined_pragmas id13}@anchor{69}@anchor{gnat_rm/implementation_defined_pragmas pragma-extensions-allowed}@anchor{6a} @section Pragma Extensions_Allowed @@ -3789,14 +3847,14 @@ pragma takes precedence over the @code{-gnatX} and @code{-gnatX0} command switch If an argument of @code{"On"} is specified, the latest version of the Ada language is implemented (currently Ada 2022) and, in addition, a curated set of GNAT specific extensions are recognized. (See the list here -@ref{6a,,here}) +@ref{6b,,here}) An argument of @code{"All_Extensions"} has the same effect except that some extra experimental extensions are enabled (See the list here -@ref{6b,,here}) +@ref{6c,,here}) @node Pragma Extensions_Visible,Pragma External,Pragma Extensions_Allowed,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id14}@anchor{6c}@anchor{gnat_rm/implementation_defined_pragmas pragma-extensions-visible}@anchor{6d} +@anchor{gnat_rm/implementation_defined_pragmas id14}@anchor{6d}@anchor{gnat_rm/implementation_defined_pragmas pragma-extensions-visible}@anchor{6e} @section Pragma Extensions_Visible @@ -3810,7 +3868,7 @@ For the semantics of this pragma, see the entry for aspect @code{Extensions_Visi in the SPARK 2014 Reference Manual, section 6.1.7. @node Pragma External,Pragma External_Name_Casing,Pragma Extensions_Visible,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-external}@anchor{6e} +@anchor{gnat_rm/implementation_defined_pragmas pragma-external}@anchor{6f} @section Pragma External @@ -3831,7 +3889,7 @@ used this pragma for exactly the same purposes as pragma @code{Export} before the latter was standardized. @node Pragma External_Name_Casing,Pragma Fast_Math,Pragma External,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-external-name-casing}@anchor{6f} +@anchor{gnat_rm/implementation_defined_pragmas pragma-external-name-casing}@anchor{70} @section Pragma External_Name_Casing @@ -3920,7 +3978,7 @@ pragma External_Name_Casing (Uppercase, Uppercase); to enforce the upper casing of all external symbols. @node Pragma Fast_Math,Pragma Favor_Top_Level,Pragma External_Name_Casing,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-fast-math}@anchor{70} +@anchor{gnat_rm/implementation_defined_pragmas pragma-fast-math}@anchor{71} @section Pragma Fast_Math @@ -3949,7 +4007,7 @@ under control of the pragma, rather than use the preinstantiated versions. @end table @node Pragma Favor_Top_Level,Pragma Finalize_Storage_Only,Pragma Fast_Math,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id15}@anchor{71}@anchor{gnat_rm/implementation_defined_pragmas pragma-favor-top-level}@anchor{72} +@anchor{gnat_rm/implementation_defined_pragmas id15}@anchor{72}@anchor{gnat_rm/implementation_defined_pragmas pragma-favor-top-level}@anchor{73} @section Pragma Favor_Top_Level @@ -3968,7 +4026,7 @@ When this pragma is used, dynamically generated trampolines may be used on some targets for nested subprograms. See restriction @code{No_Implicit_Dynamic_Code}. @node Pragma Finalize_Storage_Only,Pragma Float_Representation,Pragma Favor_Top_Level,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-finalize-storage-only}@anchor{73} +@anchor{gnat_rm/implementation_defined_pragmas pragma-finalize-storage-only}@anchor{74} @section Pragma Finalize_Storage_Only @@ -3988,7 +4046,7 @@ name. Note that this pragma does not suppress Finalize calls for library-level heap-allocated objects (see pragma @code{No_Heap_Finalization}). @node Pragma Float_Representation,Pragma Ghost,Pragma Finalize_Storage_Only,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-float-representation}@anchor{74} +@anchor{gnat_rm/implementation_defined_pragmas pragma-float-representation}@anchor{75} @section Pragma Float_Representation @@ -4023,7 +4081,7 @@ No other value of digits is permitted. @end itemize @node Pragma Ghost,Pragma Global,Pragma Float_Representation,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id16}@anchor{75}@anchor{gnat_rm/implementation_defined_pragmas pragma-ghost}@anchor{76} +@anchor{gnat_rm/implementation_defined_pragmas id16}@anchor{76}@anchor{gnat_rm/implementation_defined_pragmas pragma-ghost}@anchor{77} @section Pragma Ghost @@ -4037,7 +4095,7 @@ For the semantics of this pragma, see the entry for aspect @code{Ghost} in the S 2014 Reference Manual, section 6.9. @node Pragma Global,Pragma Ident,Pragma Ghost,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id17}@anchor{77}@anchor{gnat_rm/implementation_defined_pragmas pragma-global}@anchor{78} +@anchor{gnat_rm/implementation_defined_pragmas id17}@anchor{78}@anchor{gnat_rm/implementation_defined_pragmas pragma-global}@anchor{79} @section Pragma Global @@ -4062,7 +4120,7 @@ For the semantics of this pragma, see the entry for aspect @code{Global} in the SPARK 2014 Reference Manual, section 6.1.4. @node Pragma Ident,Pragma Ignore_Pragma,Pragma Global,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-ident}@anchor{79} +@anchor{gnat_rm/implementation_defined_pragmas pragma-ident}@anchor{7a} @section Pragma Ident @@ -4076,7 +4134,7 @@ This pragma is identical in effect to pragma @code{Comment}. It is provided for compatibility with other Ada compilers providing this pragma. @node Pragma Ignore_Pragma,Pragma Implementation_Defined,Pragma Ident,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-ignore-pragma}@anchor{7a} +@anchor{gnat_rm/implementation_defined_pragmas pragma-ignore-pragma}@anchor{7b} @section Pragma Ignore_Pragma @@ -4098,7 +4156,7 @@ pragma allows such pragmas to be ignored, which may be useful in CodePeer mode, or during porting of legacy code. @node Pragma Implementation_Defined,Pragma Implemented,Pragma Ignore_Pragma,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-implementation-defined}@anchor{7b} +@anchor{gnat_rm/implementation_defined_pragmas pragma-implementation-defined}@anchor{7c} @section Pragma Implementation_Defined @@ -4125,7 +4183,7 @@ for the purpose of implementing the No_Implementation_Identifiers restriction. @node Pragma Implemented,Pragma Implicit_Packing,Pragma Implementation_Defined,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-implemented}@anchor{7c} +@anchor{gnat_rm/implementation_defined_pragmas pragma-implemented}@anchor{7d} @section Pragma Implemented @@ -4171,7 +4229,7 @@ By_Any shares the behavior of By_Entry and By_Protected_Procedure depending on the target’s overriding subprogram kind. @node Pragma Implicit_Packing,Pragma Import_Function,Pragma Implemented,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-implicit-packing}@anchor{7d} +@anchor{gnat_rm/implementation_defined_pragmas pragma-implicit-packing}@anchor{7e} @section Pragma Implicit_Packing @@ -4225,7 +4283,7 @@ sufficient. The use of pragma Implicit_Packing allows this record declaration to compile without an explicit pragma Pack. @node Pragma Import_Function,Pragma Import_Object,Pragma Implicit_Packing,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-import-function}@anchor{7e} +@anchor{gnat_rm/implementation_defined_pragmas pragma-import-function}@anchor{7f} @section Pragma Import_Function @@ -4290,7 +4348,7 @@ notation. If the mechanism is not specified, the default mechanism is used. @node Pragma Import_Object,Pragma Import_Procedure,Pragma Import_Function,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-import-object}@anchor{7f} +@anchor{gnat_rm/implementation_defined_pragmas pragma-import-object}@anchor{80} @section Pragma Import_Object @@ -4316,7 +4374,7 @@ point of view). @code{size} is syntax checked, but otherwise ignored by GNAT. @node Pragma Import_Procedure,Pragma Import_Valued_Procedure,Pragma Import_Object,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-import-procedure}@anchor{80} +@anchor{gnat_rm/implementation_defined_pragmas pragma-import-procedure}@anchor{81} @section Pragma Import_Procedure @@ -4356,7 +4414,7 @@ applies to a procedure rather than a function and the parameters @code{Result_Type} and @code{Result_Mechanism} are not permitted. @node Pragma Import_Valued_Procedure,Pragma Independent,Pragma Import_Procedure,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-import-valued-procedure}@anchor{81} +@anchor{gnat_rm/implementation_defined_pragmas pragma-import-valued-procedure}@anchor{82} @section Pragma Import_Valued_Procedure @@ -4409,7 +4467,7 @@ pragma Import that specifies the desired convention, since otherwise the default convention is Ada, which is almost certainly not what is required. @node Pragma Independent,Pragma Independent_Components,Pragma Import_Valued_Procedure,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-independent}@anchor{82} +@anchor{gnat_rm/implementation_defined_pragmas pragma-independent}@anchor{83} @section Pragma Independent @@ -4431,7 +4489,7 @@ constraints on the representation of the object (for instance prohibiting tight packing). @node Pragma Independent_Components,Pragma Initial_Condition,Pragma Independent,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-independent-components}@anchor{83} +@anchor{gnat_rm/implementation_defined_pragmas pragma-independent-components}@anchor{84} @section Pragma Independent_Components @@ -4452,7 +4510,7 @@ constraints on the representation of the object (for instance prohibiting tight packing). @node Pragma Initial_Condition,Pragma Initialize_Scalars,Pragma Independent_Components,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id18}@anchor{84}@anchor{gnat_rm/implementation_defined_pragmas pragma-initial-condition}@anchor{85} +@anchor{gnat_rm/implementation_defined_pragmas id18}@anchor{85}@anchor{gnat_rm/implementation_defined_pragmas pragma-initial-condition}@anchor{86} @section Pragma Initial_Condition @@ -4465,8 +4523,12 @@ pragma Initial_Condition (boolean_EXPRESSION); For the semantics of this pragma, see the entry for aspect @code{Initial_Condition} in the SPARK 2014 Reference Manual, section 7.1.6. +This is an assertion kind pragma that can associate a set of its arguments +with an assertion level. See SPARK 2014 Reference Manual, section +11.4.2. + @node Pragma Initialize_Scalars,Pragma Initializes,Pragma Initial_Condition,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-initialize-scalars}@anchor{86} +@anchor{gnat_rm/implementation_defined_pragmas pragma-initialize-scalars}@anchor{87} @section Pragma Initialize_Scalars @@ -4575,7 +4637,7 @@ good idea to turn on stack checking (see description of stack checking in the GNAT User’s Guide) when using this pragma. @node Pragma Initializes,Pragma Inline_Always,Pragma Initialize_Scalars,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id19}@anchor{87}@anchor{gnat_rm/implementation_defined_pragmas pragma-initializes}@anchor{88} +@anchor{gnat_rm/implementation_defined_pragmas id19}@anchor{88}@anchor{gnat_rm/implementation_defined_pragmas pragma-initializes}@anchor{89} @section Pragma Initializes @@ -4602,7 +4664,7 @@ For the semantics of this pragma, see the entry for aspect @code{Initializes} in SPARK 2014 Reference Manual, section 7.1.5. @node Pragma Inline_Always,Pragma Inline_Generic,Pragma Initializes,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id20}@anchor{89}@anchor{gnat_rm/implementation_defined_pragmas pragma-inline-always}@anchor{8a} +@anchor{gnat_rm/implementation_defined_pragmas id20}@anchor{8a}@anchor{gnat_rm/implementation_defined_pragmas pragma-inline-always}@anchor{8b} @section Pragma Inline_Always @@ -4621,7 +4683,7 @@ apply this pragma to a primitive operation of a tagged type. Thanks to such restrictions, the compiler is allowed to remove the out-of-line body of @code{NAME}. @node Pragma Inline_Generic,Pragma Interface,Pragma Inline_Always,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-inline-generic}@anchor{8b} +@anchor{gnat_rm/implementation_defined_pragmas pragma-inline-generic}@anchor{8c} @section Pragma Inline_Generic @@ -4639,7 +4701,7 @@ than to check that the given names are all names of generic units or generic instances. @node Pragma Interface,Pragma Interface_Name,Pragma Inline_Generic,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-interface}@anchor{8c} +@anchor{gnat_rm/implementation_defined_pragmas pragma-interface}@anchor{8d} @section Pragma Interface @@ -4666,7 +4728,7 @@ maintaining Ada 83/Ada 95 compatibility and is compatible with other Ada 83 compilers. @node Pragma Interface_Name,Pragma Interrupt_Handler,Pragma Interface,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-interface-name}@anchor{8d} +@anchor{gnat_rm/implementation_defined_pragmas pragma-interface-name}@anchor{8e} @section Pragma Interface_Name @@ -4685,7 +4747,7 @@ for an interfaced subprogram, and is provided for compatibility with Ada least one of @code{External_Name} or @code{Link_Name}. @node Pragma Interrupt_Handler,Pragma Interrupt_State,Pragma Interface_Name,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-interrupt-handler}@anchor{8e} +@anchor{gnat_rm/implementation_defined_pragmas pragma-interrupt-handler}@anchor{8f} @section Pragma Interrupt_Handler @@ -4699,7 +4761,7 @@ This program unit pragma is supported for parameterless protected procedures as described in Annex C of the Ada Reference Manual. @node Pragma Interrupt_State,Pragma Interrupts_System_By_Default,Pragma Interrupt_Handler,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-interrupt-state}@anchor{8f} +@anchor{gnat_rm/implementation_defined_pragmas pragma-interrupt-state}@anchor{90} @section Pragma Interrupt_State @@ -4785,7 +4847,7 @@ with an application’s runtime behavior in the cases of the synchronous signals and in the case of the signal used to implement the @code{abort} statement. @node Pragma Interrupts_System_By_Default,Pragma Invariant,Pragma Interrupt_State,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-interrupts-system-by-default}@anchor{90} +@anchor{gnat_rm/implementation_defined_pragmas pragma-interrupts-system-by-default}@anchor{91} @section Pragma Interrupts_System_By_Default @@ -4799,7 +4861,7 @@ Default all interrupts to the System state as defined above in pragma @code{Interrupt_State}. This is a configuration pragma. @node Pragma Invariant,Pragma Keep_Names,Pragma Interrupts_System_By_Default,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id21}@anchor{91}@anchor{gnat_rm/implementation_defined_pragmas pragma-invariant}@anchor{92} +@anchor{gnat_rm/implementation_defined_pragmas id21}@anchor{92}@anchor{gnat_rm/implementation_defined_pragmas pragma-invariant}@anchor{93} @section Pragma Invariant @@ -4837,8 +4899,12 @@ invariant pragma for the same entity. For further details on the use of this pragma, see the Ada 2012 documentation of the Type_Invariant aspect. +This is an assertion kind pragma that can associate a set of its arguments +with an assertion level. See SPARK 2014 Reference Manual, section +11.4.2. + @node Pragma Keep_Names,Pragma License,Pragma Invariant,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-keep-names}@anchor{93} +@anchor{gnat_rm/implementation_defined_pragmas pragma-keep-names}@anchor{94} @section Pragma Keep_Names @@ -4858,7 +4924,7 @@ use a @code{Discard_Names} pragma in the @code{gnat.adc} file, but you want to retain the names for specific enumeration types. @node Pragma License,Pragma Link_With,Pragma Keep_Names,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-license}@anchor{94} +@anchor{gnat_rm/implementation_defined_pragmas pragma-license}@anchor{95} @section Pragma License @@ -4953,7 +5019,7 @@ GPL, but no warning for @code{GNAT.Sockets} which is part of the GNAT run time, and is therefore licensed under the modified GPL. @node Pragma Link_With,Pragma Linker_Alias,Pragma License,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-link-with}@anchor{95} +@anchor{gnat_rm/implementation_defined_pragmas pragma-link-with}@anchor{96} @section Pragma Link_With @@ -4977,7 +5043,7 @@ separate arguments to the linker. In addition pragma Link_With allows multiple arguments, with the same effect as successive pragmas. @node Pragma Linker_Alias,Pragma Linker_Constructor,Pragma Link_With,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-linker-alias}@anchor{96} +@anchor{gnat_rm/implementation_defined_pragmas pragma-linker-alias}@anchor{97} @section Pragma Linker_Alias @@ -5018,7 +5084,7 @@ end p; @end example @node Pragma Linker_Constructor,Pragma Linker_Destructor,Pragma Linker_Alias,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-linker-constructor}@anchor{97} +@anchor{gnat_rm/implementation_defined_pragmas pragma-linker-constructor}@anchor{98} @section Pragma Linker_Constructor @@ -5048,7 +5114,7 @@ listed above. Where possible, the use of Stand Alone Libraries is preferable to the use of this pragma. @node Pragma Linker_Destructor,Pragma Linker_Section,Pragma Linker_Constructor,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-linker-destructor}@anchor{98} +@anchor{gnat_rm/implementation_defined_pragmas pragma-linker-destructor}@anchor{99} @section Pragma Linker_Destructor @@ -5071,7 +5137,7 @@ See @code{pragma Linker_Constructor} for the set of restrictions that apply because of these specific contexts. @node Pragma Linker_Section,Pragma Lock_Free,Pragma Linker_Destructor,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id22}@anchor{99}@anchor{gnat_rm/implementation_defined_pragmas pragma-linker-section}@anchor{9a} +@anchor{gnat_rm/implementation_defined_pragmas id22}@anchor{9a}@anchor{gnat_rm/implementation_defined_pragmas pragma-linker-section}@anchor{9b} @section Pragma Linker_Section @@ -5145,7 +5211,7 @@ end IO_Card; @end example @node Pragma Lock_Free,Pragma Loop_Invariant,Pragma Linker_Section,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id23}@anchor{9b}@anchor{gnat_rm/implementation_defined_pragmas pragma-lock-free}@anchor{9c} +@anchor{gnat_rm/implementation_defined_pragmas id23}@anchor{9c}@anchor{gnat_rm/implementation_defined_pragmas pragma-lock-free}@anchor{9d} @section Pragma Lock_Free @@ -5208,7 +5274,7 @@ Ada RM D.3) are not performed when a protected operation of the protected unit is executed. @node Pragma Loop_Invariant,Pragma Loop_Optimize,Pragma Lock_Free,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-loop-invariant}@anchor{9d} +@anchor{gnat_rm/implementation_defined_pragmas pragma-loop-invariant}@anchor{9e} @section Pragma Loop_Invariant @@ -5240,8 +5306,12 @@ may be used to refer to the value of an expression on entry to the loop. This attribute can only be used within the expression of a @code{Loop_Invariant} pragma. For full details, see documentation of attribute @code{Loop_Entry}. +This is an assertion kind pragma that can associate a set of its arguments +with an assertion level. See SPARK 2014 Reference Manual, section +11.4.2. + @node Pragma Loop_Optimize,Pragma Loop_Variant,Pragma Loop_Invariant,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-loop-optimize}@anchor{9e} +@anchor{gnat_rm/implementation_defined_pragmas pragma-loop-optimize}@anchor{9f} @section Pragma Loop_Optimize @@ -5303,7 +5373,7 @@ compiler in order to enable the relevant optimizations, that is to say vectorization. @node Pragma Loop_Variant,Pragma Machine_Attribute,Pragma Loop_Optimize,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-loop-variant}@anchor{9f} +@anchor{gnat_rm/implementation_defined_pragmas pragma-loop-variant}@anchor{a0} @section Pragma Loop_Variant @@ -5349,8 +5419,12 @@ statements. The @code{Loop_Entry} attribute may be used within the expressions of the @code{Loop_Variant} pragma to refer to values on entry to the loop. +This is an assertion kind pragma that can associate a set of its arguments +with an assertion level. See SPARK 2014 Reference Manual, section +11.4.2. + @node Pragma Machine_Attribute,Pragma Main,Pragma Loop_Variant,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-machine-attribute}@anchor{a0} +@anchor{gnat_rm/implementation_defined_pragmas pragma-machine-attribute}@anchor{a1} @section Pragma Machine_Attribute @@ -5376,7 +5450,7 @@ which may make this pragma unusable for some attributes. For further information see @cite{GNU Compiler Collection (GCC) Internals}. @node Pragma Main,Pragma Main_Storage,Pragma Machine_Attribute,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-main}@anchor{a1} +@anchor{gnat_rm/implementation_defined_pragmas pragma-main}@anchor{a2} @section Pragma Main @@ -5396,7 +5470,7 @@ This pragma is provided for compatibility with OpenVMS VAX Systems. It has no effect in GNAT, other than being syntax checked. @node Pragma Main_Storage,Pragma Max_Queue_Length,Pragma Main,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-main-storage}@anchor{a2} +@anchor{gnat_rm/implementation_defined_pragmas pragma-main-storage}@anchor{a3} @section Pragma Main_Storage @@ -5415,7 +5489,7 @@ This pragma is provided for compatibility with OpenVMS VAX Systems. It has no effect in GNAT, other than being syntax checked. @node Pragma Max_Queue_Length,Pragma No_Body,Pragma Main_Storage,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id24}@anchor{a3}@anchor{gnat_rm/implementation_defined_pragmas pragma-max-queue-length}@anchor{a4} +@anchor{gnat_rm/implementation_defined_pragmas id24}@anchor{a4}@anchor{gnat_rm/implementation_defined_pragmas pragma-max-queue-length}@anchor{a5} @section Pragma Max_Queue_Length @@ -5433,7 +5507,7 @@ entry. A value of -1 represents no additional restriction on queue length. @node Pragma No_Body,Pragma No_Caching,Pragma Max_Queue_Length,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-no-body}@anchor{a5} +@anchor{gnat_rm/implementation_defined_pragmas pragma-no-body}@anchor{a6} @section Pragma No_Body @@ -5456,7 +5530,7 @@ dummy body with a No_Body pragma ensures that there is no interference from earlier versions of the package body. @node Pragma No_Caching,Pragma No_Component_Reordering,Pragma No_Body,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id25}@anchor{a6}@anchor{gnat_rm/implementation_defined_pragmas pragma-no-caching}@anchor{a7} +@anchor{gnat_rm/implementation_defined_pragmas id25}@anchor{a7}@anchor{gnat_rm/implementation_defined_pragmas pragma-no-caching}@anchor{a8} @section Pragma No_Caching @@ -5470,7 +5544,7 @@ For the semantics of this pragma, see the entry for aspect @code{No_Caching} in the SPARK 2014 Reference Manual, section 7.1.2. @node Pragma No_Component_Reordering,Pragma No_Elaboration_Code_All,Pragma No_Caching,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-no-component-reordering}@anchor{a8} +@anchor{gnat_rm/implementation_defined_pragmas pragma-no-component-reordering}@anchor{a9} @section Pragma No_Component_Reordering @@ -5489,7 +5563,7 @@ declared in units to which the pragma applies and there is a requirement that this pragma be used consistently within a partition. @node Pragma No_Elaboration_Code_All,Pragma No_Heap_Finalization,Pragma No_Component_Reordering,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id26}@anchor{a9}@anchor{gnat_rm/implementation_defined_pragmas pragma-no-elaboration-code-all}@anchor{aa} +@anchor{gnat_rm/implementation_defined_pragmas id26}@anchor{aa}@anchor{gnat_rm/implementation_defined_pragmas pragma-no-elaboration-code-all}@anchor{ab} @section Pragma No_Elaboration_Code_All @@ -5508,7 +5582,7 @@ current unit, it must also have the @cite{No_Elaboration_Code_All} aspect set. It may be applied to package or subprogram specs or their generic versions. @node Pragma No_Heap_Finalization,Pragma No_Inline,Pragma No_Elaboration_Code_All,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-no-heap-finalization}@anchor{ab} +@anchor{gnat_rm/implementation_defined_pragmas pragma-no-heap-finalization}@anchor{ac} @section Pragma No_Heap_Finalization @@ -5540,7 +5614,7 @@ lose its @code{No_Heap_Finalization} pragma when the corresponding instance does appear at the library level. @node Pragma No_Inline,Pragma No_Raise,Pragma No_Heap_Finalization,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id27}@anchor{ac}@anchor{gnat_rm/implementation_defined_pragmas pragma-no-inline}@anchor{ad} +@anchor{gnat_rm/implementation_defined_pragmas id27}@anchor{ad}@anchor{gnat_rm/implementation_defined_pragmas pragma-no-inline}@anchor{ae} @section Pragma No_Inline @@ -5558,7 +5632,7 @@ in particular it is not subject to the use of option `-gnatn' or pragma @code{Inline_Always} for the same @code{NAME}. @node Pragma No_Raise,Pragma No_Return,Pragma No_Inline,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id28}@anchor{ae}@anchor{gnat_rm/implementation_defined_pragmas pragma-no-raise}@anchor{af} +@anchor{gnat_rm/implementation_defined_pragmas id28}@anchor{af}@anchor{gnat_rm/implementation_defined_pragmas pragma-no-raise}@anchor{b0} @section Pragma No_Raise @@ -5575,7 +5649,7 @@ An implementation-defined check named @cite{Raise_Check} is associated with the pragma, and @cite{Program_Error} is raised upon its failure (see RM 11.5(19/5)). @node Pragma No_Return,Pragma No_Strict_Aliasing,Pragma No_Raise,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-no-return}@anchor{b0} +@anchor{gnat_rm/implementation_defined_pragmas pragma-no-return}@anchor{b1} @section Pragma No_Return @@ -5602,7 +5676,7 @@ available in all earlier versions of Ada as an implementation-defined pragma. @node Pragma No_Strict_Aliasing,Pragma No_Tagged_Streams,Pragma No_Return,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-no-strict-aliasing}@anchor{b1} +@anchor{gnat_rm/implementation_defined_pragmas pragma-no-strict-aliasing}@anchor{b2} @section Pragma No_Strict_Aliasing @@ -5624,7 +5698,7 @@ in the @cite{GNAT User’s Guide}. This pragma currently has no effects on access to unconstrained array types. @node Pragma No_Tagged_Streams,Pragma Normalize_Scalars,Pragma No_Strict_Aliasing,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id29}@anchor{b2}@anchor{gnat_rm/implementation_defined_pragmas pragma-no-tagged-streams}@anchor{b3} +@anchor{gnat_rm/implementation_defined_pragmas id29}@anchor{b3}@anchor{gnat_rm/implementation_defined_pragmas pragma-no-tagged-streams}@anchor{b4} @section Pragma No_Tagged_Streams @@ -5663,7 +5737,7 @@ with empty strings. This is useful to avoid exposing entity names at binary level but has a negative impact on the debuggability of tagged types. @node Pragma Normalize_Scalars,Pragma Obsolescent,Pragma No_Tagged_Streams,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-normalize-scalars}@anchor{b4} +@anchor{gnat_rm/implementation_defined_pragmas pragma-normalize-scalars}@anchor{b5} @section Pragma Normalize_Scalars @@ -5745,7 +5819,7 @@ will always generate an invalid value if one exists. @end table @node Pragma Obsolescent,Pragma Optimize_Alignment,Pragma Normalize_Scalars,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id30}@anchor{b5}@anchor{gnat_rm/implementation_defined_pragmas pragma-obsolescent}@anchor{b6} +@anchor{gnat_rm/implementation_defined_pragmas id30}@anchor{b6}@anchor{gnat_rm/implementation_defined_pragmas pragma-obsolescent}@anchor{b7} @section Pragma Obsolescent @@ -5841,7 +5915,7 @@ So if you specify @code{Entity =>} for the @code{Entity} argument, and a @code{M argument is present, it must be preceded by @code{Message =>}. @node Pragma Optimize_Alignment,Pragma Ordered,Pragma Obsolescent,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-optimize-alignment}@anchor{b7} +@anchor{gnat_rm/implementation_defined_pragmas pragma-optimize-alignment}@anchor{b8} @section Pragma Optimize_Alignment @@ -5927,7 +6001,7 @@ latter are compiled by default in pragma Optimize_Alignment (Off) mode if no pragma appears at the start of the file. @node Pragma Ordered,Pragma Overflow_Mode,Pragma Optimize_Alignment,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-ordered}@anchor{b8} +@anchor{gnat_rm/implementation_defined_pragmas pragma-ordered}@anchor{b9} @section Pragma Ordered @@ -6019,7 +6093,7 @@ For additional information please refer to the description of the `-gnatw.u' switch in the GNAT User’s Guide. @node Pragma Overflow_Mode,Pragma Overriding_Renamings,Pragma Ordered,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-overflow-mode}@anchor{b9} +@anchor{gnat_rm/implementation_defined_pragmas pragma-overflow-mode}@anchor{ba} @section Pragma Overflow_Mode @@ -6058,7 +6132,7 @@ The pragma @code{Unsuppress (Overflow_Check)} unsuppresses (enables) overflow checking, but does not affect the overflow mode. @node Pragma Overriding_Renamings,Pragma Part_Of,Pragma Overflow_Mode,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-overriding-renamings}@anchor{ba} +@anchor{gnat_rm/implementation_defined_pragmas pragma-overriding-renamings}@anchor{bb} @section Pragma Overriding_Renamings @@ -6093,7 +6167,7 @@ RM 8.3 (15) stipulates that an overridden operation is not visible within the declaration of the overriding operation. @node Pragma Part_Of,Pragma Partition_Elaboration_Policy,Pragma Overriding_Renamings,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id31}@anchor{bb}@anchor{gnat_rm/implementation_defined_pragmas pragma-part-of}@anchor{bc} +@anchor{gnat_rm/implementation_defined_pragmas id31}@anchor{bc}@anchor{gnat_rm/implementation_defined_pragmas pragma-part-of}@anchor{bd} @section Pragma Part_Of @@ -6109,7 +6183,7 @@ For the semantics of this pragma, see the entry for aspect @code{Part_Of} in the SPARK 2014 Reference Manual, section 7.2.6. @node Pragma Partition_Elaboration_Policy,Pragma Passive,Pragma Part_Of,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-partition-elaboration-policy}@anchor{bd} +@anchor{gnat_rm/implementation_defined_pragmas pragma-partition-elaboration-policy}@anchor{be} @section Pragma Partition_Elaboration_Policy @@ -6126,7 +6200,7 @@ versions of Ada as an implementation-defined pragma. See Ada 2012 Reference Manual for details. @node Pragma Passive,Pragma Persistent_BSS,Pragma Partition_Elaboration_Policy,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-passive}@anchor{be} +@anchor{gnat_rm/implementation_defined_pragmas pragma-passive}@anchor{bf} @section Pragma Passive @@ -6150,7 +6224,7 @@ For more information on the subject of passive tasks, see the section ‘Passive Task Optimization’ in the GNAT Users Guide. @node Pragma Persistent_BSS,Pragma Post,Pragma Passive,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id32}@anchor{bf}@anchor{gnat_rm/implementation_defined_pragmas pragma-persistent-bss}@anchor{c0} +@anchor{gnat_rm/implementation_defined_pragmas id32}@anchor{c0}@anchor{gnat_rm/implementation_defined_pragmas pragma-persistent-bss}@anchor{c1} @section Pragma Persistent_BSS @@ -6181,7 +6255,7 @@ If this pragma is used on a target where this feature is not supported, then the pragma will be ignored. See also @code{pragma Linker_Section}. @node Pragma Post,Pragma Postcondition,Pragma Persistent_BSS,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-post}@anchor{c1} +@anchor{gnat_rm/implementation_defined_pragmas pragma-post}@anchor{c2} @section Pragma Post @@ -6205,8 +6279,12 @@ if there is no separate subprogram declaration, then it can appear at the start of the declarations in a subprogram body (preceded only by other pragmas). +This is an assertion kind pragma that can associate a set of its arguments +with an assertion level. See SPARK 2014 Reference Manual, section +11.4.2. + @node Pragma Postcondition,Pragma Post_Class,Pragma Post,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-postcondition}@anchor{c2} +@anchor{gnat_rm/implementation_defined_pragmas pragma-postcondition}@anchor{c3} @section Pragma Postcondition @@ -6370,8 +6448,12 @@ use of the pragma identifier @code{Check}. Historically, pragma Ada 2012, and has been retained in its original form for compatibility purposes. +This is an assertion kind pragma that can associate a set of its arguments +with an assertion level. See SPARK 2014 Reference Manual, section +11.4.2. + @node Pragma Post_Class,Pragma Pre,Pragma Postcondition,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-post-class}@anchor{c3} +@anchor{gnat_rm/implementation_defined_pragmas pragma-post-class}@anchor{c4} @section Pragma Post_Class @@ -6405,8 +6487,12 @@ aspects, but is prepared to ignore the pragmas. The assertion policy that controls this pragma is @code{Post'Class}, not @code{Post_Class}. +This is an assertion kind pragma that can associate a set of its arguments +with an assertion level. See SPARK 2014 Reference Manual, section +11.4.2. + @node Pragma Pre,Pragma Precondition,Pragma Post_Class,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-pre}@anchor{c4} +@anchor{gnat_rm/implementation_defined_pragmas pragma-pre}@anchor{c5} @section Pragma Pre @@ -6430,8 +6516,12 @@ if there is no separate subprogram declaration, then it can appear at the start of the declarations in a subprogram body (preceded only by other pragmas). +This is an assertion kind pragma that can associate a set of its arguments +with an assertion level. See SPARK 2014 Reference Manual, section +11.4.2. + @node Pragma Precondition,Pragma Predicate,Pragma Pre,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-precondition}@anchor{c5} +@anchor{gnat_rm/implementation_defined_pragmas pragma-precondition}@anchor{c6} @section Pragma Precondition @@ -6489,8 +6579,12 @@ use of the pragma identifier @code{Check}. Historically, pragma Ada 2012, and has been retained in its original form for compatibility purposes. +This is an assertion kind pragma that can associate a set of its arguments +with an assertion level. See SPARK 2014 Reference Manual, section +11.4.2. + @node Pragma Predicate,Pragma Predicate_Failure,Pragma Precondition,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id33}@anchor{c6}@anchor{gnat_rm/implementation_defined_pragmas pragma-predicate}@anchor{c7} +@anchor{gnat_rm/implementation_defined_pragmas id33}@anchor{c7}@anchor{gnat_rm/implementation_defined_pragmas pragma-predicate}@anchor{c8} @section Pragma Predicate @@ -6543,8 +6637,12 @@ fundamentally changed (for example a membership test defined for subtype B). When following this approach, the use of predicates should be avoided. +This is an assertion kind pragma that can associate a set of its arguments +with an assertion level. See SPARK 2014 Reference Manual, section +11.4.2. + @node Pragma Predicate_Failure,Pragma Preelaborable_Initialization,Pragma Predicate,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-predicate-failure}@anchor{c8} +@anchor{gnat_rm/implementation_defined_pragmas pragma-predicate-failure}@anchor{c9} @section Pragma Predicate_Failure @@ -6561,7 +6659,7 @@ the language-defined @code{Predicate_Failure} aspect, and shares its restrictions and semantics. @node Pragma Preelaborable_Initialization,Pragma Prefix_Exception_Messages,Pragma Predicate_Failure,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-preelaborable-initialization}@anchor{c9} +@anchor{gnat_rm/implementation_defined_pragmas pragma-preelaborable-initialization}@anchor{ca} @section Pragma Preelaborable_Initialization @@ -6576,7 +6674,7 @@ versions of Ada as an implementation-defined pragma. See Ada 2012 Reference Manual for details. @node Pragma Prefix_Exception_Messages,Pragma Pre_Class,Pragma Preelaborable_Initialization,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-prefix-exception-messages}@anchor{ca} +@anchor{gnat_rm/implementation_defined_pragmas pragma-prefix-exception-messages}@anchor{cb} @section Pragma Prefix_Exception_Messages @@ -6607,7 +6705,7 @@ prefixing in this case, you can always call @code{GNAT.Source_Info.Enclosing_Entity} and prepend the string manually. @node Pragma Pre_Class,Pragma Priority_Specific_Dispatching,Pragma Prefix_Exception_Messages,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-pre-class}@anchor{cb} +@anchor{gnat_rm/implementation_defined_pragmas pragma-pre-class}@anchor{cc} @section Pragma Pre_Class @@ -6641,8 +6739,12 @@ aspects, but is prepared to ignore the pragmas. The assertion policy that controls this pragma is @code{Pre'Class}, not @code{Pre_Class}. +This is an assertion kind pragma that can associate a set of its arguments +with an assertion level. See SPARK 2014 Reference Manual, section +11.4.2. + @node Pragma Priority_Specific_Dispatching,Pragma Profile,Pragma Pre_Class,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-priority-specific-dispatching}@anchor{cc} +@anchor{gnat_rm/implementation_defined_pragmas pragma-priority-specific-dispatching}@anchor{cd} @section Pragma Priority_Specific_Dispatching @@ -6666,7 +6768,7 @@ versions of Ada as an implementation-defined pragma. See Ada 2012 Reference Manual for details. @node Pragma Profile,Pragma Profile_Warnings,Pragma Priority_Specific_Dispatching,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-profile}@anchor{cd} +@anchor{gnat_rm/implementation_defined_pragmas pragma-profile}@anchor{ce} @section Pragma Profile @@ -6945,7 +7047,7 @@ conforming Ada constructs. The profile enables the following three pragmas: @end itemize @node Pragma Profile_Warnings,Pragma Program_Exit,Pragma Profile,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-profile-warnings}@anchor{ce} +@anchor{gnat_rm/implementation_defined_pragmas pragma-profile-warnings}@anchor{cf} @section Pragma Profile_Warnings @@ -6963,7 +7065,7 @@ violations of the profile generate warning messages instead of error messages. @node Pragma Program_Exit,Pragma Propagate_Exceptions,Pragma Profile_Warnings,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id34}@anchor{cf}@anchor{gnat_rm/implementation_defined_pragmas pragma-program-exit}@anchor{d0} +@anchor{gnat_rm/implementation_defined_pragmas id34}@anchor{d0}@anchor{gnat_rm/implementation_defined_pragmas pragma-program-exit}@anchor{d1} @section Pragma Program_Exit @@ -6977,7 +7079,7 @@ For the semantics of this pragma, see the entry for aspect @code{Program_Exit} in the SPARK 2014 Reference Manual, section 6.1.10. @node Pragma Propagate_Exceptions,Pragma Provide_Shift_Operators,Pragma Program_Exit,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-propagate-exceptions}@anchor{d1} +@anchor{gnat_rm/implementation_defined_pragmas pragma-propagate-exceptions}@anchor{d2} @section Pragma Propagate_Exceptions @@ -6996,7 +7098,7 @@ purposes. It used to be used in connection with optimization of a now-obsolete mechanism for implementation of exceptions. @node Pragma Provide_Shift_Operators,Pragma Psect_Object,Pragma Propagate_Exceptions,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-provide-shift-operators}@anchor{d2} +@anchor{gnat_rm/implementation_defined_pragmas pragma-provide-shift-operators}@anchor{d3} @section Pragma Provide_Shift_Operators @@ -7016,7 +7118,7 @@ including the function declarations for these five operators, together with the pragma Import (Intrinsic, …) statements. @node Pragma Psect_Object,Pragma Pure_Function,Pragma Provide_Shift_Operators,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-psect-object}@anchor{d3} +@anchor{gnat_rm/implementation_defined_pragmas pragma-psect-object}@anchor{d4} @section Pragma Psect_Object @@ -7036,7 +7138,7 @@ EXTERNAL_SYMBOL ::= This pragma is identical in effect to pragma @code{Common_Object}. @node Pragma Pure_Function,Pragma Rational,Pragma Psect_Object,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id35}@anchor{d4}@anchor{gnat_rm/implementation_defined_pragmas pragma-pure-function}@anchor{d5} +@anchor{gnat_rm/implementation_defined_pragmas id35}@anchor{d5}@anchor{gnat_rm/implementation_defined_pragmas pragma-pure-function}@anchor{d6} @section Pragma Pure_Function @@ -7098,7 +7200,7 @@ unit is not a Pure unit in the categorization sense. So for example, a function thus marked is free to @code{with} non-pure units. @node Pragma Rational,Pragma Ravenscar,Pragma Pure_Function,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-rational}@anchor{d6} +@anchor{gnat_rm/implementation_defined_pragmas pragma-rational}@anchor{d7} @section Pragma Rational @@ -7116,7 +7218,7 @@ pragma Profile (Rational); @end example @node Pragma Ravenscar,Pragma Refined_Depends,Pragma Rational,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-ravenscar}@anchor{d7} +@anchor{gnat_rm/implementation_defined_pragmas pragma-ravenscar}@anchor{d8} @section Pragma Ravenscar @@ -7136,7 +7238,7 @@ pragma Profile (Ravenscar); which is the preferred method of setting the @code{Ravenscar} profile. @node Pragma Refined_Depends,Pragma Refined_Global,Pragma Ravenscar,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id36}@anchor{d8}@anchor{gnat_rm/implementation_defined_pragmas pragma-refined-depends}@anchor{d9} +@anchor{gnat_rm/implementation_defined_pragmas id36}@anchor{d9}@anchor{gnat_rm/implementation_defined_pragmas pragma-refined-depends}@anchor{da} @section Pragma Refined_Depends @@ -7169,7 +7271,7 @@ For the semantics of this pragma, see the entry for aspect @code{Refined_Depends the SPARK 2014 Reference Manual, section 6.1.5. @node Pragma Refined_Global,Pragma Refined_Post,Pragma Refined_Depends,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id37}@anchor{da}@anchor{gnat_rm/implementation_defined_pragmas pragma-refined-global}@anchor{db} +@anchor{gnat_rm/implementation_defined_pragmas id37}@anchor{db}@anchor{gnat_rm/implementation_defined_pragmas pragma-refined-global}@anchor{dc} @section Pragma Refined_Global @@ -7194,7 +7296,7 @@ For the semantics of this pragma, see the entry for aspect @code{Refined_Global} the SPARK 2014 Reference Manual, section 6.1.4. @node Pragma Refined_Post,Pragma Refined_State,Pragma Refined_Global,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id38}@anchor{dc}@anchor{gnat_rm/implementation_defined_pragmas pragma-refined-post}@anchor{dd} +@anchor{gnat_rm/implementation_defined_pragmas id38}@anchor{dd}@anchor{gnat_rm/implementation_defined_pragmas pragma-refined-post}@anchor{de} @section Pragma Refined_Post @@ -7207,8 +7309,12 @@ pragma Refined_Post (boolean_EXPRESSION); For the semantics of this pragma, see the entry for aspect @code{Refined_Post} in the SPARK 2014 Reference Manual, section 7.2.7. +This is an assertion kind pragma that can associate a set of its arguments +with an assertion level. See SPARK 2014 Reference Manual, section +11.4.2. + @node Pragma Refined_State,Pragma Relative_Deadline,Pragma Refined_Post,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id39}@anchor{de}@anchor{gnat_rm/implementation_defined_pragmas pragma-refined-state}@anchor{df} +@anchor{gnat_rm/implementation_defined_pragmas id39}@anchor{df}@anchor{gnat_rm/implementation_defined_pragmas pragma-refined-state}@anchor{e0} @section Pragma Refined_State @@ -7234,7 +7340,7 @@ For the semantics of this pragma, see the entry for aspect @code{Refined_State} the SPARK 2014 Reference Manual, section 7.2.2. @node Pragma Relative_Deadline,Pragma Remote_Access_Type,Pragma Refined_State,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-relative-deadline}@anchor{e0} +@anchor{gnat_rm/implementation_defined_pragmas pragma-relative-deadline}@anchor{e1} @section Pragma Relative_Deadline @@ -7249,7 +7355,7 @@ versions of Ada as an implementation-defined pragma. See Ada 2012 Reference Manual for details. @node Pragma Remote_Access_Type,Pragma Rename_Pragma,Pragma Relative_Deadline,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id40}@anchor{e1}@anchor{gnat_rm/implementation_defined_pragmas pragma-remote-access-type}@anchor{e2} +@anchor{gnat_rm/implementation_defined_pragmas id40}@anchor{e2}@anchor{gnat_rm/implementation_defined_pragmas pragma-remote-access-type}@anchor{e3} @section Pragma Remote_Access_Type @@ -7275,7 +7381,7 @@ pertaining to remote access to class-wide types. At instantiation, the actual type must be a remote access to class-wide type. @node Pragma Rename_Pragma,Pragma Restricted_Run_Time,Pragma Remote_Access_Type,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-rename-pragma}@anchor{e3} +@anchor{gnat_rm/implementation_defined_pragmas pragma-rename-pragma}@anchor{e4} @section Pragma Rename_Pragma @@ -7314,7 +7420,7 @@ Pragma Inline_Only will not necessarily mean the same thing as the other Ada compiler; it’s up to you to make sure the semantics are close enough. @node Pragma Restricted_Run_Time,Pragma Restriction_Warnings,Pragma Rename_Pragma,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-restricted-run-time}@anchor{e4} +@anchor{gnat_rm/implementation_defined_pragmas pragma-restricted-run-time}@anchor{e5} @section Pragma Restricted_Run_Time @@ -7335,7 +7441,7 @@ which is the preferred method of setting the restricted run time profile. @node Pragma Restriction_Warnings,Pragma Reviewable,Pragma Restricted_Run_Time,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-restriction-warnings}@anchor{e5} +@anchor{gnat_rm/implementation_defined_pragmas pragma-restriction-warnings}@anchor{e6} @section Pragma Restriction_Warnings @@ -7373,7 +7479,7 @@ generating a warning, but any other use of implementation defined pragmas will cause a warning to be generated. @node Pragma Reviewable,Pragma Secondary_Stack_Size,Pragma Restriction_Warnings,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-reviewable}@anchor{e6} +@anchor{gnat_rm/implementation_defined_pragmas pragma-reviewable}@anchor{e7} @section Pragma Reviewable @@ -7477,7 +7583,7 @@ comprehensive messages identifying possible problems based on this information. @node Pragma Secondary_Stack_Size,Pragma Share_Generic,Pragma Reviewable,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id41}@anchor{e7}@anchor{gnat_rm/implementation_defined_pragmas pragma-secondary-stack-size}@anchor{e8} +@anchor{gnat_rm/implementation_defined_pragmas id41}@anchor{e8}@anchor{gnat_rm/implementation_defined_pragmas pragma-secondary-stack-size}@anchor{e9} @section Pragma Secondary_Stack_Size @@ -7513,7 +7619,7 @@ Note the pragma cannot appear when the restriction @code{No_Secondary_Stack} is in effect. @node Pragma Share_Generic,Pragma Shared,Pragma Secondary_Stack_Size,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-share-generic}@anchor{e9} +@anchor{gnat_rm/implementation_defined_pragmas pragma-share-generic}@anchor{ea} @section Pragma Share_Generic @@ -7531,7 +7637,7 @@ than to check that the given names are all names of generic units or generic instances. @node Pragma Shared,Pragma Short_Circuit_And_Or,Pragma Share_Generic,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id42}@anchor{ea}@anchor{gnat_rm/implementation_defined_pragmas pragma-shared}@anchor{eb} +@anchor{gnat_rm/implementation_defined_pragmas id42}@anchor{eb}@anchor{gnat_rm/implementation_defined_pragmas pragma-shared}@anchor{ec} @section Pragma Shared @@ -7539,7 +7645,7 @@ This pragma is provided for compatibility with Ada 83. The syntax and semantics are identical to pragma Atomic. @node Pragma Short_Circuit_And_Or,Pragma Short_Descriptors,Pragma Shared,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-short-circuit-and-or}@anchor{ec} +@anchor{gnat_rm/implementation_defined_pragmas pragma-short-circuit-and-or}@anchor{ed} @section Pragma Short_Circuit_And_Or @@ -7578,7 +7684,7 @@ See also the pragma @code{Unevaluated_Use_Of_Old} and the restriction with @code{Short_Circuit_And_Or}. @node Pragma Short_Descriptors,Pragma Side_Effects,Pragma Short_Circuit_And_Or,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-short-descriptors}@anchor{ed} +@anchor{gnat_rm/implementation_defined_pragmas pragma-short-descriptors}@anchor{ee} @section Pragma Short_Descriptors @@ -7592,7 +7698,7 @@ This pragma is provided for compatibility with other Ada implementations. It is recognized but ignored by all current versions of GNAT. @node Pragma Side_Effects,Pragma Simple_Storage_Pool_Type,Pragma Short_Descriptors,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id43}@anchor{ee}@anchor{gnat_rm/implementation_defined_pragmas pragma-side-effects}@anchor{ef} +@anchor{gnat_rm/implementation_defined_pragmas id43}@anchor{ef}@anchor{gnat_rm/implementation_defined_pragmas pragma-side-effects}@anchor{f0} @section Pragma Side_Effects @@ -7606,7 +7712,7 @@ For the semantics of this pragma, see the entry for aspect @code{Side_Effects} in the SPARK Reference Manual, section 6.1.12. @node Pragma Simple_Storage_Pool_Type,Pragma Source_File_Name,Pragma Side_Effects,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id44}@anchor{f0}@anchor{gnat_rm/implementation_defined_pragmas pragma-simple-storage-pool-type}@anchor{f1} +@anchor{gnat_rm/implementation_defined_pragmas id44}@anchor{f1}@anchor{gnat_rm/implementation_defined_pragmas pragma-simple-storage-pool-type}@anchor{f2} @section Pragma Simple_Storage_Pool_Type @@ -7660,7 +7766,7 @@ storage-management discipline). An object of a simple storage pool type can be associated with an access type by specifying the attribute -@ref{f2,,Simple_Storage_Pool}. For example: +@ref{f3,,Simple_Storage_Pool}. For example: @example My_Pool : My_Simple_Storage_Pool_Type; @@ -7670,11 +7776,11 @@ type Acc is access My_Data_Type; for Acc'Simple_Storage_Pool use My_Pool; @end example -See attribute @ref{f2,,Simple_Storage_Pool} +See attribute @ref{f3,,Simple_Storage_Pool} for further details. @node Pragma Source_File_Name,Pragma Source_File_Name_Project,Pragma Simple_Storage_Pool_Type,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id45}@anchor{f3}@anchor{gnat_rm/implementation_defined_pragmas pragma-source-file-name}@anchor{f4} +@anchor{gnat_rm/implementation_defined_pragmas id45}@anchor{f4}@anchor{gnat_rm/implementation_defined_pragmas pragma-source-file-name}@anchor{f5} @section Pragma Source_File_Name @@ -7766,20 +7872,20 @@ aware of these pragmas, and so other tools that use the project file would not be aware of the intended naming conventions. If you are using project files, file naming is controlled by Source_File_Name_Project pragmas, which are usually supplied automatically by the project manager. A pragma -Source_File_Name cannot appear after a @ref{f5,,Pragma Source_File_Name_Project}. +Source_File_Name cannot appear after a @ref{f6,,Pragma Source_File_Name_Project}. For more details on the use of the @code{Source_File_Name} pragma, see the sections on @cite{Using Other File Names} and @cite{Alternative File Naming Schemes} in the @cite{GNAT User’s Guide}. @node Pragma Source_File_Name_Project,Pragma Source_Reference,Pragma Source_File_Name,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id46}@anchor{f6}@anchor{gnat_rm/implementation_defined_pragmas pragma-source-file-name-project}@anchor{f5} +@anchor{gnat_rm/implementation_defined_pragmas id46}@anchor{f7}@anchor{gnat_rm/implementation_defined_pragmas pragma-source-file-name-project}@anchor{f6} @section Pragma Source_File_Name_Project This pragma has the same syntax and semantics as pragma Source_File_Name. It is only allowed as a stand-alone configuration pragma. -It cannot appear after a @ref{f4,,Pragma Source_File_Name}, and +It cannot appear after a @ref{f5,,Pragma Source_File_Name}, and most importantly, once pragma Source_File_Name_Project appears, no further Source_File_Name pragmas are allowed. @@ -7791,7 +7897,7 @@ Source_File_Name or Source_File_Name_Project pragmas (which would not be known to the project manager). @node Pragma Source_Reference,Pragma SPARK_Mode,Pragma Source_File_Name_Project,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-source-reference}@anchor{f7} +@anchor{gnat_rm/implementation_defined_pragmas pragma-source-reference}@anchor{f8} @section Pragma Source_Reference @@ -7815,7 +7921,7 @@ string expression other than a string literal. This is because its value is needed for error messages issued by all phases of the compiler. @node Pragma SPARK_Mode,Pragma Static_Elaboration_Desired,Pragma Source_Reference,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id47}@anchor{f8}@anchor{gnat_rm/implementation_defined_pragmas pragma-spark-mode}@anchor{f9} +@anchor{gnat_rm/implementation_defined_pragmas id47}@anchor{f9}@anchor{gnat_rm/implementation_defined_pragmas pragma-spark-mode}@anchor{fa} @section Pragma SPARK_Mode @@ -7897,7 +8003,7 @@ SPARK_Mode (@code{Off}), then that pragma will need to be repeated in the package body. @node Pragma Static_Elaboration_Desired,Pragma Stream_Convert,Pragma SPARK_Mode,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-static-elaboration-desired}@anchor{fa} +@anchor{gnat_rm/implementation_defined_pragmas pragma-static-elaboration-desired}@anchor{fb} @section Pragma Static_Elaboration_Desired @@ -7921,7 +8027,7 @@ construction of larger aggregates with static components that include an others choice.) @node Pragma Stream_Convert,Pragma Style_Checks,Pragma Static_Elaboration_Desired,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-stream-convert}@anchor{fb} +@anchor{gnat_rm/implementation_defined_pragmas pragma-stream-convert}@anchor{fc} @section Pragma Stream_Convert @@ -7998,7 +8104,7 @@ the pragma is silently ignored, and the default implementation of the stream attributes is used instead. @node Pragma Style_Checks,Pragma Subprogram_Variant,Pragma Stream_Convert,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-style-checks}@anchor{fc} +@anchor{gnat_rm/implementation_defined_pragmas pragma-style-checks}@anchor{fd} @section Pragma Style_Checks @@ -8144,7 +8250,7 @@ Rf2 : Integer := ARG; -- OK, no error @end example @node Pragma Subprogram_Variant,Pragma Subtitle,Pragma Style_Checks,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-subprogram-variant}@anchor{fd} +@anchor{gnat_rm/implementation_defined_pragmas pragma-subprogram-variant}@anchor{fe} @section Pragma Subprogram_Variant @@ -8175,8 +8281,12 @@ The @code{Subprogram_Variant} pragma is intended to be an exact replacement for the implementation-defined @code{Subprogram_Variant} aspect, and shares its restrictions and semantics. +This is an assertion kind pragma that can associate a set of its arguments +with an assertion level. See SPARK 2014 Reference Manual, section +11.4.2. + @node Pragma Subtitle,Pragma Suppress,Pragma Subprogram_Variant,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-subtitle}@anchor{fe} +@anchor{gnat_rm/implementation_defined_pragmas pragma-subtitle}@anchor{ff} @section Pragma Subtitle @@ -8190,7 +8300,7 @@ This pragma is recognized for compatibility with other Ada compilers but is ignored by GNAT. @node Pragma Suppress,Pragma Suppress_All,Pragma Subtitle,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-suppress}@anchor{ff} +@anchor{gnat_rm/implementation_defined_pragmas pragma-suppress}@anchor{100} @section Pragma Suppress @@ -8263,7 +8373,7 @@ Of course, run-time checks are omitted whenever the compiler can prove that they will not fail, whether or not checks are suppressed. @node Pragma Suppress_All,Pragma Suppress_Debug_Info,Pragma Suppress,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-suppress-all}@anchor{100} +@anchor{gnat_rm/implementation_defined_pragmas pragma-suppress-all}@anchor{101} @section Pragma Suppress_All @@ -8282,7 +8392,7 @@ The use of the standard Ada pragma @code{Suppress (All_Checks)} as a normal configuration pragma is the preferred usage in GNAT. @node Pragma Suppress_Debug_Info,Pragma Suppress_Exception_Locations,Pragma Suppress_All,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id48}@anchor{101}@anchor{gnat_rm/implementation_defined_pragmas pragma-suppress-debug-info}@anchor{102} +@anchor{gnat_rm/implementation_defined_pragmas id48}@anchor{102}@anchor{gnat_rm/implementation_defined_pragmas pragma-suppress-debug-info}@anchor{103} @section Pragma Suppress_Debug_Info @@ -8297,7 +8407,7 @@ for the specified entity. It is intended primarily for use in debugging the debugger, and navigating around debugger problems. @node Pragma Suppress_Exception_Locations,Pragma Suppress_Initialization,Pragma Suppress_Debug_Info,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-suppress-exception-locations}@anchor{103} +@anchor{gnat_rm/implementation_defined_pragmas pragma-suppress-exception-locations}@anchor{104} @section Pragma Suppress_Exception_Locations @@ -8320,7 +8430,7 @@ a partition, so it is fine to have some units within a partition compiled with this pragma and others compiled in normal mode without it. @node Pragma Suppress_Initialization,Pragma Task_Name,Pragma Suppress_Exception_Locations,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id49}@anchor{104}@anchor{gnat_rm/implementation_defined_pragmas pragma-suppress-initialization}@anchor{105} +@anchor{gnat_rm/implementation_defined_pragmas id49}@anchor{105}@anchor{gnat_rm/implementation_defined_pragmas pragma-suppress-initialization}@anchor{106} @section Pragma Suppress_Initialization @@ -8365,7 +8475,7 @@ is suppressed, just as though its subtype had been given in a pragma Suppress_Initialization, as described above. @node Pragma Task_Name,Pragma Task_Storage,Pragma Suppress_Initialization,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-task-name}@anchor{106} +@anchor{gnat_rm/implementation_defined_pragmas pragma-task-name}@anchor{107} @section Pragma Task_Name @@ -8421,7 +8531,7 @@ end; @end example @node Pragma Task_Storage,Pragma Test_Case,Pragma Task_Name,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-task-storage}@anchor{107} +@anchor{gnat_rm/implementation_defined_pragmas pragma-task-storage}@anchor{108} @section Pragma Task_Storage @@ -8441,7 +8551,7 @@ created, depending on the target. This pragma can appear anywhere a type. @node Pragma Test_Case,Pragma Thread_Local_Storage,Pragma Task_Storage,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id50}@anchor{108}@anchor{gnat_rm/implementation_defined_pragmas pragma-test-case}@anchor{109} +@anchor{gnat_rm/implementation_defined_pragmas id50}@anchor{109}@anchor{gnat_rm/implementation_defined_pragmas pragma-test-case}@anchor{10a} @section Pragma Test_Case @@ -8497,7 +8607,7 @@ postcondition. Mode @code{Robustness} indicates that the precondition and postcondition of the subprogram should be ignored for this test case. @node Pragma Thread_Local_Storage,Pragma Time_Slice,Pragma Test_Case,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id51}@anchor{10a}@anchor{gnat_rm/implementation_defined_pragmas pragma-thread-local-storage}@anchor{10b} +@anchor{gnat_rm/implementation_defined_pragmas id51}@anchor{10b}@anchor{gnat_rm/implementation_defined_pragmas pragma-thread-local-storage}@anchor{10c} @section Pragma Thread_Local_Storage @@ -8535,7 +8645,7 @@ If this pragma is used on a system where @code{TLS} is not supported, then an error message will be generated and the program will be rejected. @node Pragma Time_Slice,Pragma Title,Pragma Thread_Local_Storage,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-time-slice}@anchor{10c} +@anchor{gnat_rm/implementation_defined_pragmas pragma-time-slice}@anchor{10d} @section Pragma Time_Slice @@ -8551,7 +8661,7 @@ It is ignored if it is used in a system that does not allow this control, or if it appears in other than the main program unit. @node Pragma Title,Pragma Type_Invariant,Pragma Time_Slice,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-title}@anchor{10d} +@anchor{gnat_rm/implementation_defined_pragmas pragma-title}@anchor{10e} @section Pragma Title @@ -8576,7 +8686,7 @@ notation is used, and named and positional notation can be mixed following the normal rules for procedure calls in Ada. @node Pragma Type_Invariant,Pragma Type_Invariant_Class,Pragma Title,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-type-invariant}@anchor{10e} +@anchor{gnat_rm/implementation_defined_pragmas pragma-type-invariant}@anchor{10f} @section Pragma Type_Invariant @@ -8596,8 +8706,12 @@ does not permit a string parameter, and it is controlled by the assertion identifier @code{Type_Invariant} rather than @code{Invariant}. +This is an assertion kind pragma that can associate a set of its arguments +with an assertion level. See SPARK 2014 Reference Manual, section +11.4.2. + @node Pragma Type_Invariant_Class,Pragma Unchecked_Union,Pragma Type_Invariant,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id52}@anchor{10f}@anchor{gnat_rm/implementation_defined_pragmas pragma-type-invariant-class}@anchor{110} +@anchor{gnat_rm/implementation_defined_pragmas id52}@anchor{110}@anchor{gnat_rm/implementation_defined_pragmas pragma-type-invariant-class}@anchor{111} @section Pragma Type_Invariant_Class @@ -8623,8 +8737,12 @@ aspects, but is prepared to ignore the pragmas. The assertion policy that controls this pragma is @code{Type_Invariant'Class}, not @code{Type_Invariant_Class}. +This is an assertion kind pragma that can associate a set of its arguments +with an assertion level. See SPARK 2014 Reference Manual, section +11.4.2. + @node Pragma Unchecked_Union,Pragma Unevaluated_Use_Of_Old,Pragma Type_Invariant_Class,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-unchecked-union}@anchor{111} +@anchor{gnat_rm/implementation_defined_pragmas pragma-unchecked-union}@anchor{112} @section Pragma Unchecked_Union @@ -8644,7 +8762,7 @@ version in all language modes (Ada 83, Ada 95, and Ada 2005). For full details, consult the Ada 2012 Reference Manual, section B.3.3. @node Pragma Unevaluated_Use_Of_Old,Pragma User_Aspect_Definition,Pragma Unchecked_Union,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-unevaluated-use-of-old}@anchor{112} +@anchor{gnat_rm/implementation_defined_pragmas pragma-unevaluated-use-of-old}@anchor{113} @section Pragma Unevaluated_Use_Of_Old @@ -8699,7 +8817,7 @@ uses up to the end of the corresponding statement sequence or sequence of package declarations. @node Pragma User_Aspect_Definition,Pragma Unimplemented_Unit,Pragma Unevaluated_Use_Of_Old,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-user-aspect-definition}@anchor{113} +@anchor{gnat_rm/implementation_defined_pragmas pragma-user-aspect-definition}@anchor{114} @section Pragma User_Aspect_Definition @@ -8731,7 +8849,7 @@ pragma. If multiple definitions are visible for some aspect at some point, then the definitions must agree. A predefined aspect cannot be redefined. @node Pragma Unimplemented_Unit,Pragma Universal_Aliasing,Pragma User_Aspect_Definition,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-unimplemented-unit}@anchor{114} +@anchor{gnat_rm/implementation_defined_pragmas pragma-unimplemented-unit}@anchor{115} @section Pragma Unimplemented_Unit @@ -8751,7 +8869,7 @@ The abort only happens if code is being generated. Thus you can use specs of unimplemented packages in syntax or semantic checking mode. @node Pragma Universal_Aliasing,Pragma Unmodified,Pragma Unimplemented_Unit,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id53}@anchor{115}@anchor{gnat_rm/implementation_defined_pragmas pragma-universal-aliasing}@anchor{116} +@anchor{gnat_rm/implementation_defined_pragmas id53}@anchor{116}@anchor{gnat_rm/implementation_defined_pragmas pragma-universal-aliasing}@anchor{117} @section Pragma Universal_Aliasing @@ -8769,7 +8887,7 @@ they need to be suppressed, see the section on @code{Optimization and Strict Aliasing} in the @cite{GNAT User’s Guide}. @node Pragma Unmodified,Pragma Unreferenced,Pragma Universal_Aliasing,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id54}@anchor{117}@anchor{gnat_rm/implementation_defined_pragmas pragma-unmodified}@anchor{118} +@anchor{gnat_rm/implementation_defined_pragmas id54}@anchor{118}@anchor{gnat_rm/implementation_defined_pragmas pragma-unmodified}@anchor{119} @section Pragma Unmodified @@ -8803,7 +8921,7 @@ Thus it is never necessary to use @code{pragma Unmodified} for such variables, though it is harmless to do so. @node Pragma Unreferenced,Pragma Unreferenced_Objects,Pragma Unmodified,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id55}@anchor{119}@anchor{gnat_rm/implementation_defined_pragmas pragma-unreferenced}@anchor{11a} +@anchor{gnat_rm/implementation_defined_pragmas id55}@anchor{11a}@anchor{gnat_rm/implementation_defined_pragmas pragma-unreferenced}@anchor{11b} @section Pragma Unreferenced @@ -8849,7 +8967,7 @@ Note that if a warning is desired for all calls to a given subprogram, regardless of whether they occur in the same unit as the subprogram declaration, then this pragma should not be used (calls from another unit would not be flagged); pragma Obsolescent can be used instead -for this purpose, see @ref{b6,,Pragma Obsolescent}. +for this purpose, see @ref{b7,,Pragma Obsolescent}. The second form of pragma @code{Unreferenced} is used within a context clause. In this case the arguments must be unit names of units previously @@ -8865,7 +8983,7 @@ Thus it is never necessary to use @code{pragma Unreferenced} for such variables, though it is harmless to do so. @node Pragma Unreferenced_Objects,Pragma Unreserve_All_Interrupts,Pragma Unreferenced,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id56}@anchor{11b}@anchor{gnat_rm/implementation_defined_pragmas pragma-unreferenced-objects}@anchor{11c} +@anchor{gnat_rm/implementation_defined_pragmas id56}@anchor{11c}@anchor{gnat_rm/implementation_defined_pragmas pragma-unreferenced-objects}@anchor{11d} @section Pragma Unreferenced_Objects @@ -8890,7 +9008,7 @@ compiler will automatically suppress unwanted warnings about these variables not being referenced. @node Pragma Unreserve_All_Interrupts,Pragma Unsuppress,Pragma Unreferenced_Objects,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-unreserve-all-interrupts}@anchor{11d} +@anchor{gnat_rm/implementation_defined_pragmas pragma-unreserve-all-interrupts}@anchor{11e} @section Pragma Unreserve_All_Interrupts @@ -8926,7 +9044,7 @@ handled, see pragma @code{Interrupt_State}, which subsumes the functionality of the @code{Unreserve_All_Interrupts} pragma. @node Pragma Unsuppress,Pragma Unused,Pragma Unreserve_All_Interrupts,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-unsuppress}@anchor{11e} +@anchor{gnat_rm/implementation_defined_pragmas pragma-unsuppress}@anchor{11f} @section Pragma Unsuppress @@ -8962,7 +9080,7 @@ number of implementation-defined check names. See the description of pragma @code{Suppress} for full details. @node Pragma Unused,Pragma Use_VADS_Size,Pragma Unsuppress,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id57}@anchor{11f}@anchor{gnat_rm/implementation_defined_pragmas pragma-unused}@anchor{120} +@anchor{gnat_rm/implementation_defined_pragmas id57}@anchor{120}@anchor{gnat_rm/implementation_defined_pragmas pragma-unused}@anchor{121} @section Pragma Unused @@ -8996,7 +9114,7 @@ Thus it is never necessary to use @code{pragma Unused} for such variables, though it is harmless to do so. @node Pragma Use_VADS_Size,Pragma Validity_Checks,Pragma Unused,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-use-vads-size}@anchor{121} +@anchor{gnat_rm/implementation_defined_pragmas pragma-use-vads-size}@anchor{122} @section Pragma Use_VADS_Size @@ -9020,7 +9138,7 @@ as implemented in the VADS compiler. See description of the VADS_Size attribute for further details. @node Pragma Validity_Checks,Pragma Volatile,Pragma Use_VADS_Size,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-validity-checks}@anchor{122} +@anchor{gnat_rm/implementation_defined_pragmas pragma-validity-checks}@anchor{123} @section Pragma Validity_Checks @@ -9076,7 +9194,7 @@ A := C; -- C will be validity checked @end example @node Pragma Volatile,Pragma Volatile_Full_Access,Pragma Validity_Checks,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id58}@anchor{123}@anchor{gnat_rm/implementation_defined_pragmas pragma-volatile}@anchor{124} +@anchor{gnat_rm/implementation_defined_pragmas id58}@anchor{124}@anchor{gnat_rm/implementation_defined_pragmas pragma-volatile}@anchor{125} @section Pragma Volatile @@ -9094,7 +9212,7 @@ implementation of pragma Volatile is upwards compatible with the implementation in DEC Ada 83. @node Pragma Volatile_Full_Access,Pragma Volatile_Function,Pragma Volatile,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id59}@anchor{125}@anchor{gnat_rm/implementation_defined_pragmas pragma-volatile-full-access}@anchor{126} +@anchor{gnat_rm/implementation_defined_pragmas id59}@anchor{126}@anchor{gnat_rm/implementation_defined_pragmas pragma-volatile-full-access}@anchor{127} @section Pragma Volatile_Full_Access @@ -9120,7 +9238,7 @@ is not to the whole object; the compiler is allowed (and generally will) access only part of the object in this case. @node Pragma Volatile_Function,Pragma Warning_As_Error,Pragma Volatile_Full_Access,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id60}@anchor{127}@anchor{gnat_rm/implementation_defined_pragmas pragma-volatile-function}@anchor{128} +@anchor{gnat_rm/implementation_defined_pragmas id60}@anchor{128}@anchor{gnat_rm/implementation_defined_pragmas pragma-volatile-function}@anchor{129} @section Pragma Volatile_Function @@ -9134,7 +9252,7 @@ For the semantics of this pragma, see the entry for aspect @code{Volatile_Functi in the SPARK 2014 Reference Manual, section 7.1.2. @node Pragma Warning_As_Error,Pragma Warnings,Pragma Volatile_Function,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-warning-as-error}@anchor{129} +@anchor{gnat_rm/implementation_defined_pragmas pragma-warning-as-error}@anchor{12a} @section Pragma Warning_As_Error @@ -9174,7 +9292,7 @@ you can use multiple pragma Warning_As_Error. The above use of patterns to match the message applies only to warning messages generated by the front end. This pragma can also be applied to -warnings provided by the back end and mentioned in @ref{12a,,Pragma Warnings}. +warnings provided by the back end and mentioned in @ref{12b,,Pragma Warnings}. By using a single full `-Wxxx' switch in the pragma, such warnings can also be treated as errors. @@ -9224,7 +9342,7 @@ the tag is changed from “warning:” to “error:” and the string “[warning-as-error]” is appended to the end of the message. @node Pragma Warnings,Pragma Weak_External,Pragma Warning_As_Error,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas id61}@anchor{12b}@anchor{gnat_rm/implementation_defined_pragmas pragma-warnings}@anchor{12a} +@anchor{gnat_rm/implementation_defined_pragmas id61}@anchor{12c}@anchor{gnat_rm/implementation_defined_pragmas pragma-warnings}@anchor{12b} @section Pragma Warnings @@ -9380,7 +9498,7 @@ selectively for each tool, and as a consequence to detect useless pragma Warnings with switch @code{-gnatw.w}. @node Pragma Weak_External,Pragma Wide_Character_Encoding,Pragma Warnings,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-weak-external}@anchor{12c} +@anchor{gnat_rm/implementation_defined_pragmas pragma-weak-external}@anchor{12d} @section Pragma Weak_External @@ -9431,7 +9549,7 @@ end External_Module; @end example @node Pragma Wide_Character_Encoding,,Pragma Weak_External,Implementation Defined Pragmas -@anchor{gnat_rm/implementation_defined_pragmas pragma-wide-character-encoding}@anchor{12d} +@anchor{gnat_rm/implementation_defined_pragmas pragma-wide-character-encoding}@anchor{12e} @section Pragma Wide_Character_Encoding @@ -9462,7 +9580,7 @@ encoding within that file, and does not affect withed units, specs, or subunits. @node Implementation Defined Aspects,Implementation Defined Attributes,Implementation Defined Pragmas,Top -@anchor{gnat_rm/implementation_defined_aspects doc}@anchor{12e}@anchor{gnat_rm/implementation_defined_aspects id1}@anchor{12f}@anchor{gnat_rm/implementation_defined_aspects implementation-defined-aspects}@anchor{130} +@anchor{gnat_rm/implementation_defined_aspects doc}@anchor{12f}@anchor{gnat_rm/implementation_defined_aspects id1}@anchor{130}@anchor{gnat_rm/implementation_defined_aspects implementation-defined-aspects}@anchor{131} @chapter Implementation Defined Aspects @@ -9533,6 +9651,7 @@ or attribute definition clause. * Aspect Effective_Writes:: * Aspect Exceptional_Cases:: * Aspect Exit_Cases:: +* Aspect Extended_Access:: * Aspect Extensions_Visible:: * Aspect Favor_Top_Level:: * Aspect Ghost:: @@ -9593,7 +9712,7 @@ or attribute definition clause. @end menu @node Aspect Abstract_State,Aspect Always_Terminates,,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-abstract-state}@anchor{131} +@anchor{gnat_rm/implementation_defined_aspects aspect-abstract-state}@anchor{132} @section Aspect Abstract_State @@ -9602,7 +9721,7 @@ or attribute definition clause. This aspect is equivalent to @ref{1e,,pragma Abstract_State}. @node Aspect Always_Terminates,Aspect Annotate,Aspect Abstract_State,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-always-terminates}@anchor{132} +@anchor{gnat_rm/implementation_defined_aspects aspect-always-terminates}@anchor{133} @section Aspect Always_Terminates @@ -9611,7 +9730,7 @@ This aspect is equivalent to @ref{1e,,pragma Abstract_State}. This boolean aspect is equivalent to @ref{29,,pragma Always_Terminates}. @node Aspect Annotate,Aspect Async_Readers,Aspect Always_Terminates,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-annotate}@anchor{133} +@anchor{gnat_rm/implementation_defined_aspects aspect-annotate}@anchor{134} @section Aspect Annotate @@ -9638,63 +9757,63 @@ Equivalent to @code{pragma Annotate (ID, ID @{, ARG@}, Entity => Name);} @end table @node Aspect Async_Readers,Aspect Async_Writers,Aspect Annotate,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-async-readers}@anchor{134} +@anchor{gnat_rm/implementation_defined_aspects aspect-async-readers}@anchor{135} @section Aspect Async_Readers @geindex Async_Readers -This boolean aspect is equivalent to @ref{32,,pragma Async_Readers}. +This boolean aspect is equivalent to @ref{33,,pragma Async_Readers}. @node Aspect Async_Writers,Aspect Constant_After_Elaboration,Aspect Async_Readers,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-async-writers}@anchor{135} +@anchor{gnat_rm/implementation_defined_aspects aspect-async-writers}@anchor{136} @section Aspect Async_Writers @geindex Async_Writers -This boolean aspect is equivalent to @ref{34,,pragma Async_Writers}. +This boolean aspect is equivalent to @ref{35,,pragma Async_Writers}. @node Aspect Constant_After_Elaboration,Aspect Contract_Cases,Aspect Async_Writers,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-constant-after-elaboration}@anchor{136} +@anchor{gnat_rm/implementation_defined_aspects aspect-constant-after-elaboration}@anchor{137} @section Aspect Constant_After_Elaboration @geindex Constant_After_Elaboration -This aspect is equivalent to @ref{44,,pragma Constant_After_Elaboration}. +This aspect is equivalent to @ref{45,,pragma Constant_After_Elaboration}. @node Aspect Contract_Cases,Aspect Depends,Aspect Constant_After_Elaboration,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-contract-cases}@anchor{137} +@anchor{gnat_rm/implementation_defined_aspects aspect-contract-cases}@anchor{138} @section Aspect Contract_Cases @geindex Contract_Cases -This aspect is equivalent to @ref{46,,pragma Contract_Cases}, the sequence +This aspect is equivalent to @ref{47,,pragma Contract_Cases}, the sequence of clauses being enclosed in parentheses so that syntactically it is an aggregate. @node Aspect Depends,Aspect Default_Initial_Condition,Aspect Contract_Cases,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-depends}@anchor{138} +@anchor{gnat_rm/implementation_defined_aspects aspect-depends}@anchor{139} @section Aspect Depends @geindex Depends -This aspect is equivalent to @ref{56,,pragma Depends}. +This aspect is equivalent to @ref{57,,pragma Depends}. @node Aspect Default_Initial_Condition,Aspect Dimension,Aspect Depends,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-default-initial-condition}@anchor{139} +@anchor{gnat_rm/implementation_defined_aspects aspect-default-initial-condition}@anchor{13a} @section Aspect Default_Initial_Condition @geindex Default_Initial_Condition -This aspect is equivalent to @ref{52,,pragma Default_Initial_Condition}. +This aspect is equivalent to @ref{53,,pragma Default_Initial_Condition}. @node Aspect Dimension,Aspect Dimension_System,Aspect Default_Initial_Condition,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-dimension}@anchor{13a} +@anchor{gnat_rm/implementation_defined_aspects aspect-dimension}@anchor{13b} @section Aspect Dimension @@ -9730,7 +9849,7 @@ Note that when the dimensioned type is an integer type, then any dimension value must be an integer literal. @node Aspect Dimension_System,Aspect Disable_Controlled,Aspect Dimension,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-dimension-system}@anchor{13b} +@anchor{gnat_rm/implementation_defined_aspects aspect-dimension-system}@anchor{13c} @section Aspect Dimension_System @@ -9790,7 +9909,7 @@ See section ‘Performing Dimensionality Analysis in GNAT’ in the GNAT Users Guide for detailed examples of use of the dimension system. @node Aspect Disable_Controlled,Aspect Effective_Reads,Aspect Dimension_System,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-disable-controlled}@anchor{13c} +@anchor{gnat_rm/implementation_defined_aspects aspect-disable-controlled}@anchor{13d} @section Aspect Disable_Controlled @@ -9803,25 +9922,25 @@ where for example you might want a record to be controlled or not depending on whether some run-time check is enabled or suppressed. @node Aspect Effective_Reads,Aspect Effective_Writes,Aspect Disable_Controlled,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-effective-reads}@anchor{13d} +@anchor{gnat_rm/implementation_defined_aspects aspect-effective-reads}@anchor{13e} @section Aspect Effective_Reads @geindex Effective_Reads -This aspect is equivalent to @ref{5b,,pragma Effective_Reads}. +This aspect is equivalent to @ref{5c,,pragma Effective_Reads}. @node Aspect Effective_Writes,Aspect Exceptional_Cases,Aspect Effective_Reads,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-effective-writes}@anchor{13e} +@anchor{gnat_rm/implementation_defined_aspects aspect-effective-writes}@anchor{13f} @section Aspect Effective_Writes @geindex Effective_Writes -This aspect is equivalent to @ref{5d,,pragma Effective_Writes}. +This aspect is equivalent to @ref{5e,,pragma Effective_Writes}. @node Aspect Exceptional_Cases,Aspect Exit_Cases,Aspect Effective_Writes,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-exceptional-cases}@anchor{13f} +@anchor{gnat_rm/implementation_defined_aspects aspect-exceptional-cases}@anchor{140} @section Aspect Exceptional_Cases @@ -9835,8 +9954,8 @@ with a specific postcondition. For the syntax and semantics of this aspect, see the SPARK 2014 Reference Manual, section 6.1.9. -@node Aspect Exit_Cases,Aspect Extensions_Visible,Aspect Exceptional_Cases,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-exit-cases}@anchor{140} +@node Aspect Exit_Cases,Aspect Extended_Access,Aspect Exceptional_Cases,Implementation Defined Aspects +@anchor{gnat_rm/implementation_defined_aspects aspect-exit-cases}@anchor{141} @section Aspect Exit_Cases @@ -9850,35 +9969,132 @@ or propagate an exception). For the syntax and semantics of this aspect, see the SPARK 2014 Reference Manual, section 6.1.10. -@node Aspect Extensions_Visible,Aspect Favor_Top_Level,Aspect Exit_Cases,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-extensions-visible}@anchor{141} +@node Aspect Extended_Access,Aspect Extensions_Visible,Aspect Exit_Cases,Implementation Defined Aspects +@anchor{gnat_rm/implementation_defined_aspects aspect-extended-access}@anchor{142} +@section Aspect Extended_Access + + +This nonoverridable boolean-valued type-related representation aspect can be +specified as part of a full_type_declaration for a general access type +designating an unconstrained array subtype. + +The absence of an Extended_Access aspect specification for such a +full_type_declaration is equivalent to an explicit +“Extended_Access => False” specification. This implies +that the aspect is never unspecified for an eligible access type. +An access type for which this aspect is True is said to be an extended access +type; this includes the case of a type derived from an extended access type. +Similarly, a value of such a type is said to be an extended access value. + +The representation of an extended access value is different than that of +other access values. This representation makes it possible to designate +objects that cannot be designated using the usual “thin” or “fat” access +representations for an access type designating an unconstrained array +subtype (notably slices and array objects imported from other languages). + +In particular, two rules are modified in determining the legality of an Access +or Unchecked_Access attribute reference if the expected access type is +an extended access type: + + +@itemize * + +@item +A slice of an aliased array object of a non-bitpacked type (more precisely, +of an array type having independently addressable components) is considered +to be aliased (and the accessibility level of a slice of an array object is +defined to be that of the array object); this also applies to renamings +of such slices, slices of such renamings, etc. + +@item +The requirement that the nominal subtype of the prefix shall statically +match the designated subtype of the access type need not be met. +@end itemize + +The Size aspect (and other aspects including Stream_Size, Object_Size, +and Alignment) of an extended access type may depend on the properties of the +designated type. Further details of this dependence are not documented. + +An extended access value is not convertible to a non-extended access type, +although conversions in the opposite direction are allowed. We don’t want +to allow + +@example +type Big_Ref is access all String with Extended_Access; +type Small_Ref is access all String; +Obj : aliased String := "abcde"; +Big_Ptr : Big_Ref := Obj (2 .. 4)'Access; -- OK +Small_Ptr : Small_Ref := Small_Ref (Big_Ptr); -- ERROR: illegal conversion +@end example + +because there is no way to represent the result of such a conversion. + +A dereference of an extended access value (or a reference to a renaming +thereof) shall not occur in any of the following contexts: + + +@itemize * + +@item +as an operative constituent of the prefix of an Access or +Unchecked_Access attribute reference whose expected type is not extended; or + +@item +as an operative constituent of an actual parameter in a call where +the corresponding formal parameter is explicitly aliased. +@end itemize + +For the same reasons that explicit conversions from an extended access type to a +non-extended access type are forbidden, we also need to disallow getting the +same effect via a Extended_Ptr.all’Access reference; this includes the case +of passing Extended_Ptr.all as an actual parameter in a call where the +corresponding formal parameter is explicitly aliased (because the callee +could evaluate Formal_Parameter’Access). This goal is accomplished by +adjusting the definition of the term “aliased”. A dereference of an extended +value occurring in one of these contexts is defined to denote +a nonaliased view. This has the desired effect because these contexts require +an aliased view. Continuing the preceding example, this rule disallows + +@example +Sneaky_1 : Small_Ptr := Big_Ptr.all'Access; -- ERROR: illegal 'Access prefix + +function Make (Str : aliased in out String) return Small_Ptr + is (Str'Access); -- OK + +Sneaky_2 : Small_Ptr := Make (Str => Big_Ptr.all); -- ERROR: bad parameter +@end example + +for the same reason given above in the case of an explicit type conversion. + +@node Aspect Extensions_Visible,Aspect Favor_Top_Level,Aspect Extended_Access,Implementation Defined Aspects +@anchor{gnat_rm/implementation_defined_aspects aspect-extensions-visible}@anchor{143} @section Aspect Extensions_Visible @geindex Extensions_Visible -This aspect is equivalent to @ref{6d,,pragma Extensions_Visible}. +This aspect is equivalent to @ref{6e,,pragma Extensions_Visible}. @node Aspect Favor_Top_Level,Aspect Ghost,Aspect Extensions_Visible,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-favor-top-level}@anchor{142} +@anchor{gnat_rm/implementation_defined_aspects aspect-favor-top-level}@anchor{144} @section Aspect Favor_Top_Level @geindex Favor_Top_Level -This boolean aspect is equivalent to @ref{72,,pragma Favor_Top_Level}. +This boolean aspect is equivalent to @ref{73,,pragma Favor_Top_Level}. @node Aspect Ghost,Aspect Ghost_Predicate,Aspect Favor_Top_Level,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-ghost}@anchor{143} +@anchor{gnat_rm/implementation_defined_aspects aspect-ghost}@anchor{145} @section Aspect Ghost @geindex Ghost -This aspect is equivalent to @ref{76,,pragma Ghost}. +This aspect is equivalent to @ref{77,,pragma Ghost}. @node Aspect Ghost_Predicate,Aspect Global,Aspect Ghost,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-ghost-predicate}@anchor{144} +@anchor{gnat_rm/implementation_defined_aspects aspect-ghost-predicate}@anchor{146} @section Aspect Ghost_Predicate @@ -9891,65 +10107,65 @@ For the detailed semantics of this aspect, see the entry for subtype predicates in the SPARK Reference Manual, section 3.2.4. @node Aspect Global,Aspect Initial_Condition,Aspect Ghost_Predicate,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-global}@anchor{145} +@anchor{gnat_rm/implementation_defined_aspects aspect-global}@anchor{147} @section Aspect Global @geindex Global -This aspect is equivalent to @ref{78,,pragma Global}. +This aspect is equivalent to @ref{79,,pragma Global}. @node Aspect Initial_Condition,Aspect Initializes,Aspect Global,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-initial-condition}@anchor{146} +@anchor{gnat_rm/implementation_defined_aspects aspect-initial-condition}@anchor{148} @section Aspect Initial_Condition @geindex Initial_Condition -This aspect is equivalent to @ref{85,,pragma Initial_Condition}. +This aspect is equivalent to @ref{86,,pragma Initial_Condition}. @node Aspect Initializes,Aspect Inline_Always,Aspect Initial_Condition,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-initializes}@anchor{147} +@anchor{gnat_rm/implementation_defined_aspects aspect-initializes}@anchor{149} @section Aspect Initializes @geindex Initializes -This aspect is equivalent to @ref{88,,pragma Initializes}. +This aspect is equivalent to @ref{89,,pragma Initializes}. @node Aspect Inline_Always,Aspect Invariant,Aspect Initializes,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-inline-always}@anchor{148} +@anchor{gnat_rm/implementation_defined_aspects aspect-inline-always}@anchor{14a} @section Aspect Inline_Always @geindex Inline_Always -This boolean aspect is equivalent to @ref{8a,,pragma Inline_Always}. +This boolean aspect is equivalent to @ref{8b,,pragma Inline_Always}. @node Aspect Invariant,Aspect Invariant’Class,Aspect Inline_Always,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-invariant}@anchor{149} +@anchor{gnat_rm/implementation_defined_aspects aspect-invariant}@anchor{14b} @section Aspect Invariant @geindex Invariant -This aspect is equivalent to @ref{92,,pragma Invariant}. It is a +This aspect is equivalent to @ref{93,,pragma Invariant}. It is a synonym for the language defined aspect @code{Type_Invariant} except that it is separately controllable using pragma @code{Assertion_Policy}. @node Aspect Invariant’Class,Aspect Iterable,Aspect Invariant,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-invariant-class}@anchor{14a} +@anchor{gnat_rm/implementation_defined_aspects aspect-invariant-class}@anchor{14c} @section Aspect Invariant’Class @geindex Invariant'Class -This aspect is equivalent to @ref{110,,pragma Type_Invariant_Class}. It is a +This aspect is equivalent to @ref{111,,pragma Type_Invariant_Class}. It is a synonym for the language defined aspect @code{Type_Invariant'Class} except that it is separately controllable using pragma @code{Assertion_Policy}. @node Aspect Iterable,Aspect Linker_Section,Aspect Invariant’Class,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-iterable}@anchor{14b} +@anchor{gnat_rm/implementation_defined_aspects aspect-iterable}@anchor{14d} @section Aspect Iterable @@ -10033,16 +10249,16 @@ function Get_Element (Cont : Container; Position : Cursor) return Element_Type; This aspect is used in the GNAT-defined formal container packages. @node Aspect Linker_Section,Aspect Local_Restrictions,Aspect Iterable,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-linker-section}@anchor{14c} +@anchor{gnat_rm/implementation_defined_aspects aspect-linker-section}@anchor{14e} @section Aspect Linker_Section @geindex Linker_Section -This aspect is equivalent to @ref{9a,,pragma Linker_Section}. +This aspect is equivalent to @ref{9b,,pragma Linker_Section}. @node Aspect Local_Restrictions,Aspect Lock_Free,Aspect Linker_Section,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-local-restrictions}@anchor{14d} +@anchor{gnat_rm/implementation_defined_aspects aspect-local-restrictions}@anchor{14f} @section Aspect Local_Restrictions @@ -10096,73 +10312,73 @@ case of a declaration that occurs within nested packages that each have a Local_Restrictions specification). @node Aspect Lock_Free,Aspect Max_Queue_Length,Aspect Local_Restrictions,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-lock-free}@anchor{14e} +@anchor{gnat_rm/implementation_defined_aspects aspect-lock-free}@anchor{150} @section Aspect Lock_Free @geindex Lock_Free -This boolean aspect is equivalent to @ref{9c,,pragma Lock_Free}. +This boolean aspect is equivalent to @ref{9d,,pragma Lock_Free}. @node Aspect Max_Queue_Length,Aspect No_Caching,Aspect Lock_Free,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-max-queue-length}@anchor{14f} +@anchor{gnat_rm/implementation_defined_aspects aspect-max-queue-length}@anchor{151} @section Aspect Max_Queue_Length @geindex Max_Queue_Length -This aspect is equivalent to @ref{a4,,pragma Max_Queue_Length}. +This aspect is equivalent to @ref{a5,,pragma Max_Queue_Length}. @node Aspect No_Caching,Aspect No_Elaboration_Code_All,Aspect Max_Queue_Length,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-no-caching}@anchor{150} +@anchor{gnat_rm/implementation_defined_aspects aspect-no-caching}@anchor{152} @section Aspect No_Caching @geindex No_Caching -This boolean aspect is equivalent to @ref{a7,,pragma No_Caching}. +This boolean aspect is equivalent to @ref{a8,,pragma No_Caching}. @node Aspect No_Elaboration_Code_All,Aspect No_Inline,Aspect No_Caching,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-no-elaboration-code-all}@anchor{151} +@anchor{gnat_rm/implementation_defined_aspects aspect-no-elaboration-code-all}@anchor{153} @section Aspect No_Elaboration_Code_All @geindex No_Elaboration_Code_All -This aspect is equivalent to @ref{aa,,pragma No_Elaboration_Code_All} +This aspect is equivalent to @ref{ab,,pragma No_Elaboration_Code_All} for a program unit. @node Aspect No_Inline,Aspect No_Raise,Aspect No_Elaboration_Code_All,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-no-inline}@anchor{152} +@anchor{gnat_rm/implementation_defined_aspects aspect-no-inline}@anchor{154} @section Aspect No_Inline @geindex No_Inline -This boolean aspect is equivalent to @ref{ad,,pragma No_Inline}. +This boolean aspect is equivalent to @ref{ae,,pragma No_Inline}. @node Aspect No_Raise,Aspect No_Tagged_Streams,Aspect No_Inline,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-no-raise}@anchor{153} +@anchor{gnat_rm/implementation_defined_aspects aspect-no-raise}@anchor{155} @section Aspect No_Raise @geindex No_Raise -This boolean aspect is equivalent to @ref{af,,pragma No_Raise}. +This boolean aspect is equivalent to @ref{b0,,pragma No_Raise}. @node Aspect No_Tagged_Streams,Aspect No_Task_Parts,Aspect No_Raise,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-no-tagged-streams}@anchor{154} +@anchor{gnat_rm/implementation_defined_aspects aspect-no-tagged-streams}@anchor{156} @section Aspect No_Tagged_Streams @geindex No_Tagged_Streams -This aspect is equivalent to @ref{b3,,pragma No_Tagged_Streams} with an +This aspect is equivalent to @ref{b4,,pragma No_Tagged_Streams} with an argument specifying a root tagged type (thus this aspect can only be applied to such a type). @node Aspect No_Task_Parts,Aspect Object_Size,Aspect No_Tagged_Streams,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-no-task-parts}@anchor{155} +@anchor{gnat_rm/implementation_defined_aspects aspect-no-task-parts}@anchor{157} @section Aspect No_Task_Parts @@ -10178,45 +10394,45 @@ away certain tasking-related code that would otherwise be needed for T’Class, because descendants of T might contain tasks. @node Aspect Object_Size,Aspect Obsolescent,Aspect No_Task_Parts,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-object-size}@anchor{156} +@anchor{gnat_rm/implementation_defined_aspects aspect-object-size}@anchor{158} @section Aspect Object_Size @geindex Object_Size -This aspect is equivalent to @ref{157,,attribute Object_Size}. +This aspect is equivalent to @ref{159,,attribute Object_Size}. @node Aspect Obsolescent,Aspect Part_Of,Aspect Object_Size,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-obsolescent}@anchor{158} +@anchor{gnat_rm/implementation_defined_aspects aspect-obsolescent}@anchor{15a} @section Aspect Obsolescent @geindex Obsolescent -This aspect is equivalent to @ref{b6,,pragma Obsolescent}. Note that the +This aspect is equivalent to @ref{b7,,pragma Obsolescent}. Note that the evaluation of this aspect happens at the point of occurrence, it is not delayed until the freeze point. @node Aspect Part_Of,Aspect Persistent_BSS,Aspect Obsolescent,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-part-of}@anchor{159} +@anchor{gnat_rm/implementation_defined_aspects aspect-part-of}@anchor{15b} @section Aspect Part_Of @geindex Part_Of -This aspect is equivalent to @ref{bc,,pragma Part_Of}. +This aspect is equivalent to @ref{bd,,pragma Part_Of}. @node Aspect Persistent_BSS,Aspect Potentially_Invalid,Aspect Part_Of,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-persistent-bss}@anchor{15a} +@anchor{gnat_rm/implementation_defined_aspects aspect-persistent-bss}@anchor{15c} @section Aspect Persistent_BSS @geindex Persistent_BSS -This boolean aspect is equivalent to @ref{c0,,pragma Persistent_BSS}. +This boolean aspect is equivalent to @ref{c1,,pragma Persistent_BSS}. @node Aspect Potentially_Invalid,Aspect Predicate,Aspect Persistent_BSS,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-potentially-invalid}@anchor{15b} +@anchor{gnat_rm/implementation_defined_aspects aspect-potentially-invalid}@anchor{15d} @section Aspect Potentially_Invalid @@ -10226,13 +10442,13 @@ For the syntax and semantics of this aspect, see the SPARK 2014 Reference Manual, section 13.9.1. @node Aspect Predicate,Aspect Program_Exit,Aspect Potentially_Invalid,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-predicate}@anchor{15c} +@anchor{gnat_rm/implementation_defined_aspects aspect-predicate}@anchor{15e} @section Aspect Predicate @geindex Predicate -This aspect is equivalent to @ref{c7,,pragma Predicate}. It is thus +This aspect is equivalent to @ref{c8,,pragma Predicate}. It is thus similar to the language defined aspects @code{Dynamic_Predicate} and @code{Static_Predicate} except that whether the resulting predicate is static or dynamic is controlled by the form of the @@ -10240,61 +10456,61 @@ expression. It is also separately controllable using pragma @code{Assertion_Policy}. @node Aspect Program_Exit,Aspect Pure_Function,Aspect Predicate,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-program-exit}@anchor{15d} +@anchor{gnat_rm/implementation_defined_aspects aspect-program-exit}@anchor{15f} @section Aspect Program_Exit @geindex Program_Exit -This boolean aspect is equivalent to @ref{d0,,pragma Program_Exit}. +This boolean aspect is equivalent to @ref{d1,,pragma Program_Exit}. @node Aspect Pure_Function,Aspect Refined_Depends,Aspect Program_Exit,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-pure-function}@anchor{15e} +@anchor{gnat_rm/implementation_defined_aspects aspect-pure-function}@anchor{160} @section Aspect Pure_Function @geindex Pure_Function -This boolean aspect is equivalent to @ref{d5,,pragma Pure_Function}. +This boolean aspect is equivalent to @ref{d6,,pragma Pure_Function}. @node Aspect Refined_Depends,Aspect Refined_Global,Aspect Pure_Function,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-refined-depends}@anchor{15f} +@anchor{gnat_rm/implementation_defined_aspects aspect-refined-depends}@anchor{161} @section Aspect Refined_Depends @geindex Refined_Depends -This aspect is equivalent to @ref{d9,,pragma Refined_Depends}. +This aspect is equivalent to @ref{da,,pragma Refined_Depends}. @node Aspect Refined_Global,Aspect Refined_Post,Aspect Refined_Depends,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-refined-global}@anchor{160} +@anchor{gnat_rm/implementation_defined_aspects aspect-refined-global}@anchor{162} @section Aspect Refined_Global @geindex Refined_Global -This aspect is equivalent to @ref{db,,pragma Refined_Global}. +This aspect is equivalent to @ref{dc,,pragma Refined_Global}. @node Aspect Refined_Post,Aspect Refined_State,Aspect Refined_Global,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-refined-post}@anchor{161} +@anchor{gnat_rm/implementation_defined_aspects aspect-refined-post}@anchor{163} @section Aspect Refined_Post @geindex Refined_Post -This aspect is equivalent to @ref{dd,,pragma Refined_Post}. +This aspect is equivalent to @ref{de,,pragma Refined_Post}. @node Aspect Refined_State,Aspect Relaxed_Initialization,Aspect Refined_Post,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-refined-state}@anchor{162} +@anchor{gnat_rm/implementation_defined_aspects aspect-refined-state}@anchor{164} @section Aspect Refined_State @geindex Refined_State -This aspect is equivalent to @ref{df,,pragma Refined_State}. +This aspect is equivalent to @ref{e0,,pragma Refined_State}. @node Aspect Relaxed_Initialization,Aspect Remote_Access_Type,Aspect Refined_State,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-relaxed-initialization}@anchor{163} +@anchor{gnat_rm/implementation_defined_aspects aspect-relaxed-initialization}@anchor{165} @section Aspect Relaxed_Initialization @@ -10304,82 +10520,82 @@ For the syntax and semantics of this aspect, see the SPARK 2014 Reference Manual, section 6.10. @node Aspect Remote_Access_Type,Aspect Scalar_Storage_Order,Aspect Relaxed_Initialization,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-remote-access-type}@anchor{164} +@anchor{gnat_rm/implementation_defined_aspects aspect-remote-access-type}@anchor{166} @section Aspect Remote_Access_Type @geindex Remote_Access_Type -This aspect is equivalent to @ref{e2,,pragma Remote_Access_Type}. +This aspect is equivalent to @ref{e3,,pragma Remote_Access_Type}. @node Aspect Scalar_Storage_Order,Aspect Secondary_Stack_Size,Aspect Remote_Access_Type,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-scalar-storage-order}@anchor{165} +@anchor{gnat_rm/implementation_defined_aspects aspect-scalar-storage-order}@anchor{167} @section Aspect Scalar_Storage_Order @geindex Scalar_Storage_Order -This aspect is equivalent to a @ref{166,,attribute Scalar_Storage_Order}. +This aspect is equivalent to a @ref{168,,attribute Scalar_Storage_Order}. @node Aspect Secondary_Stack_Size,Aspect Shared,Aspect Scalar_Storage_Order,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-secondary-stack-size}@anchor{167} +@anchor{gnat_rm/implementation_defined_aspects aspect-secondary-stack-size}@anchor{169} @section Aspect Secondary_Stack_Size @geindex Secondary_Stack_Size -This aspect is equivalent to @ref{e8,,pragma Secondary_Stack_Size}. +This aspect is equivalent to @ref{e9,,pragma Secondary_Stack_Size}. @node Aspect Shared,Aspect Side_Effects,Aspect Secondary_Stack_Size,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-shared}@anchor{168} +@anchor{gnat_rm/implementation_defined_aspects aspect-shared}@anchor{16a} @section Aspect Shared @geindex Shared -This boolean aspect is equivalent to @ref{eb,,pragma Shared} +This boolean aspect is equivalent to @ref{ec,,pragma Shared} and is thus a synonym for aspect @code{Atomic}. @node Aspect Side_Effects,Aspect Simple_Storage_Pool,Aspect Shared,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-side-effects}@anchor{169} +@anchor{gnat_rm/implementation_defined_aspects aspect-side-effects}@anchor{16b} @section Aspect Side_Effects @geindex Side_Effects -This aspect is equivalent to @ref{ef,,pragma Side_Effects}. +This aspect is equivalent to @ref{f0,,pragma Side_Effects}. @node Aspect Simple_Storage_Pool,Aspect Simple_Storage_Pool_Type,Aspect Side_Effects,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-simple-storage-pool}@anchor{16a} +@anchor{gnat_rm/implementation_defined_aspects aspect-simple-storage-pool}@anchor{16c} @section Aspect Simple_Storage_Pool @geindex Simple_Storage_Pool -This aspect is equivalent to @ref{f2,,attribute Simple_Storage_Pool}. +This aspect is equivalent to @ref{f3,,attribute Simple_Storage_Pool}. @node Aspect Simple_Storage_Pool_Type,Aspect SPARK_Mode,Aspect Simple_Storage_Pool,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-simple-storage-pool-type}@anchor{16b} +@anchor{gnat_rm/implementation_defined_aspects aspect-simple-storage-pool-type}@anchor{16d} @section Aspect Simple_Storage_Pool_Type @geindex Simple_Storage_Pool_Type -This boolean aspect is equivalent to @ref{f1,,pragma Simple_Storage_Pool_Type}. +This boolean aspect is equivalent to @ref{f2,,pragma Simple_Storage_Pool_Type}. @node Aspect SPARK_Mode,Aspect Subprogram_Variant,Aspect Simple_Storage_Pool_Type,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-spark-mode}@anchor{16c} +@anchor{gnat_rm/implementation_defined_aspects aspect-spark-mode}@anchor{16e} @section Aspect SPARK_Mode @geindex SPARK_Mode -This aspect is equivalent to @ref{f9,,pragma SPARK_Mode} and +This aspect is equivalent to @ref{fa,,pragma SPARK_Mode} and may be specified for either or both of the specification and body of a subprogram or package. @node Aspect Subprogram_Variant,Aspect Suppress_Debug_Info,Aspect SPARK_Mode,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-subprogram-variant}@anchor{16d} +@anchor{gnat_rm/implementation_defined_aspects aspect-subprogram-variant}@anchor{16f} @section Aspect Subprogram_Variant @@ -10389,83 +10605,83 @@ For the syntax and semantics of this aspect, see the SPARK 2014 Reference Manual, section 6.1.8. @node Aspect Suppress_Debug_Info,Aspect Suppress_Initialization,Aspect Subprogram_Variant,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-suppress-debug-info}@anchor{16e} +@anchor{gnat_rm/implementation_defined_aspects aspect-suppress-debug-info}@anchor{170} @section Aspect Suppress_Debug_Info @geindex Suppress_Debug_Info -This boolean aspect is equivalent to @ref{102,,pragma Suppress_Debug_Info}. +This boolean aspect is equivalent to @ref{103,,pragma Suppress_Debug_Info}. @node Aspect Suppress_Initialization,Aspect Test_Case,Aspect Suppress_Debug_Info,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-suppress-initialization}@anchor{16f} +@anchor{gnat_rm/implementation_defined_aspects aspect-suppress-initialization}@anchor{171} @section Aspect Suppress_Initialization @geindex Suppress_Initialization -This boolean aspect is equivalent to @ref{105,,pragma Suppress_Initialization}. +This boolean aspect is equivalent to @ref{106,,pragma Suppress_Initialization}. @node Aspect Test_Case,Aspect Thread_Local_Storage,Aspect Suppress_Initialization,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-test-case}@anchor{170} +@anchor{gnat_rm/implementation_defined_aspects aspect-test-case}@anchor{172} @section Aspect Test_Case @geindex Test_Case -This aspect is equivalent to @ref{109,,pragma Test_Case}. +This aspect is equivalent to @ref{10a,,pragma Test_Case}. @node Aspect Thread_Local_Storage,Aspect Universal_Aliasing,Aspect Test_Case,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-thread-local-storage}@anchor{171} +@anchor{gnat_rm/implementation_defined_aspects aspect-thread-local-storage}@anchor{173} @section Aspect Thread_Local_Storage @geindex Thread_Local_Storage -This boolean aspect is equivalent to @ref{10b,,pragma Thread_Local_Storage}. +This boolean aspect is equivalent to @ref{10c,,pragma Thread_Local_Storage}. @node Aspect Universal_Aliasing,Aspect Unmodified,Aspect Thread_Local_Storage,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-universal-aliasing}@anchor{172} +@anchor{gnat_rm/implementation_defined_aspects aspect-universal-aliasing}@anchor{174} @section Aspect Universal_Aliasing @geindex Universal_Aliasing -This boolean aspect is equivalent to @ref{116,,pragma Universal_Aliasing}. +This boolean aspect is equivalent to @ref{117,,pragma Universal_Aliasing}. @node Aspect Unmodified,Aspect Unreferenced,Aspect Universal_Aliasing,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-unmodified}@anchor{173} +@anchor{gnat_rm/implementation_defined_aspects aspect-unmodified}@anchor{175} @section Aspect Unmodified @geindex Unmodified -This boolean aspect is equivalent to @ref{118,,pragma Unmodified}. +This boolean aspect is equivalent to @ref{119,,pragma Unmodified}. @node Aspect Unreferenced,Aspect Unreferenced_Objects,Aspect Unmodified,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-unreferenced}@anchor{174} +@anchor{gnat_rm/implementation_defined_aspects aspect-unreferenced}@anchor{176} @section Aspect Unreferenced @geindex Unreferenced -This boolean aspect is equivalent to @ref{11a,,pragma Unreferenced}. +This boolean aspect is equivalent to @ref{11b,,pragma Unreferenced}. When using the @code{-gnat2022} switch, this aspect is also supported on formal parameters, which is in particular the only form possible for expression functions. @node Aspect Unreferenced_Objects,Aspect User_Aspect,Aspect Unreferenced,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-unreferenced-objects}@anchor{175} +@anchor{gnat_rm/implementation_defined_aspects aspect-unreferenced-objects}@anchor{177} @section Aspect Unreferenced_Objects @geindex Unreferenced_Objects -This boolean aspect is equivalent to @ref{11c,,pragma Unreferenced_Objects}. +This boolean aspect is equivalent to @ref{11d,,pragma Unreferenced_Objects}. @node Aspect User_Aspect,Aspect Value_Size,Aspect Unreferenced_Objects,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-user-aspect}@anchor{176} +@anchor{gnat_rm/implementation_defined_aspects aspect-user-aspect}@anchor{178} @section Aspect User_Aspect @@ -10478,45 +10694,45 @@ replicating the set of aspect specifications associated with the named pragma-defined aspect. @node Aspect Value_Size,Aspect Volatile_Full_Access,Aspect User_Aspect,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-value-size}@anchor{177} +@anchor{gnat_rm/implementation_defined_aspects aspect-value-size}@anchor{179} @section Aspect Value_Size @geindex Value_Size -This aspect is equivalent to @ref{178,,attribute Value_Size}. +This aspect is equivalent to @ref{17a,,attribute Value_Size}. @node Aspect Volatile_Full_Access,Aspect Volatile_Function,Aspect Value_Size,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-volatile-full-access}@anchor{179} +@anchor{gnat_rm/implementation_defined_aspects aspect-volatile-full-access}@anchor{17b} @section Aspect Volatile_Full_Access @geindex Volatile_Full_Access -This boolean aspect is equivalent to @ref{126,,pragma Volatile_Full_Access}. +This boolean aspect is equivalent to @ref{127,,pragma Volatile_Full_Access}. @node Aspect Volatile_Function,Aspect Warnings,Aspect Volatile_Full_Access,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-volatile-function}@anchor{17a} +@anchor{gnat_rm/implementation_defined_aspects aspect-volatile-function}@anchor{17c} @section Aspect Volatile_Function @geindex Volatile_Function -This boolean aspect is equivalent to @ref{128,,pragma Volatile_Function}. +This boolean aspect is equivalent to @ref{129,,pragma Volatile_Function}. @node Aspect Warnings,,Aspect Volatile_Function,Implementation Defined Aspects -@anchor{gnat_rm/implementation_defined_aspects aspect-warnings}@anchor{17b} +@anchor{gnat_rm/implementation_defined_aspects aspect-warnings}@anchor{17d} @section Aspect Warnings @geindex Warnings -This aspect is equivalent to the two argument form of @ref{12a,,pragma Warnings}, +This aspect is equivalent to the two argument form of @ref{12b,,pragma Warnings}, where the first argument is @code{ON} or @code{OFF} and the second argument is the entity. @node Implementation Defined Attributes,Standard and Implementation Defined Restrictions,Implementation Defined Aspects,Top -@anchor{gnat_rm/implementation_defined_attributes doc}@anchor{17c}@anchor{gnat_rm/implementation_defined_attributes id1}@anchor{17d}@anchor{gnat_rm/implementation_defined_attributes implementation-defined-attributes}@anchor{8} +@anchor{gnat_rm/implementation_defined_attributes doc}@anchor{17e}@anchor{gnat_rm/implementation_defined_attributes id1}@anchor{17f}@anchor{gnat_rm/implementation_defined_attributes implementation-defined-attributes}@anchor{8} @chapter Implementation Defined Attributes @@ -10622,7 +10838,7 @@ consideration, you should minimize the use of these attributes. @end menu @node Attribute Abort_Signal,Attribute Address_Size,,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-abort-signal}@anchor{17e} +@anchor{gnat_rm/implementation_defined_attributes attribute-abort-signal}@anchor{180} @section Attribute Abort_Signal @@ -10636,7 +10852,7 @@ completely outside the normal semantics of Ada, for a user program to intercept the abort exception). @node Attribute Address_Size,Attribute Asm_Input,Attribute Abort_Signal,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-address-size}@anchor{17f} +@anchor{gnat_rm/implementation_defined_attributes attribute-address-size}@anchor{181} @section Attribute Address_Size @@ -10652,7 +10868,7 @@ reference to System.Address’Size is nonstatic because Address is a private type. @node Attribute Asm_Input,Attribute Asm_Output,Attribute Address_Size,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-asm-input}@anchor{180} +@anchor{gnat_rm/implementation_defined_attributes attribute-asm-input}@anchor{182} @section Attribute Asm_Input @@ -10666,10 +10882,10 @@ to be a static expression, and is the constraint for the parameter, value to be used as the input argument. The possible values for the constant are the same as those used in the RTL, and are dependent on the configuration file used to built the GCC back end. -@ref{181,,Machine Code Insertions} +@ref{183,,Machine Code Insertions} @node Attribute Asm_Output,Attribute Atomic_Always_Lock_Free,Attribute Asm_Input,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-asm-output}@anchor{182} +@anchor{gnat_rm/implementation_defined_attributes attribute-asm-output}@anchor{184} @section Attribute Asm_Output @@ -10685,10 +10901,10 @@ result. The possible values for constraint are the same as those used in the RTL, and are dependent on the configuration file used to build the GCC back end. If there are no output operands, then this argument may either be omitted, or explicitly given as @code{No_Output_Operands}. -@ref{181,,Machine Code Insertions} +@ref{183,,Machine Code Insertions} @node Attribute Atomic_Always_Lock_Free,Attribute Bit,Attribute Asm_Output,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-atomic-always-lock-free}@anchor{183} +@anchor{gnat_rm/implementation_defined_attributes attribute-atomic-always-lock-free}@anchor{185} @section Attribute Atomic_Always_Lock_Free @@ -10699,7 +10915,7 @@ result indicates whether atomic operations are supported by the target for the given type. @node Attribute Bit,Attribute Bit_Position,Attribute Atomic_Always_Lock_Free,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-bit}@anchor{184} +@anchor{gnat_rm/implementation_defined_attributes attribute-bit}@anchor{186} @section Attribute Bit @@ -10730,7 +10946,7 @@ This attribute is designed to be compatible with the DEC Ada 83 definition and implementation of the @code{Bit} attribute. @node Attribute Bit_Position,Attribute Code_Address,Attribute Bit,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-bit-position}@anchor{185} +@anchor{gnat_rm/implementation_defined_attributes attribute-bit-position}@anchor{187} @section Attribute Bit_Position @@ -10745,7 +10961,7 @@ type `universal_integer'. The value depends only on the field the containing record @code{R}. @node Attribute Code_Address,Attribute Compiler_Version,Attribute Bit_Position,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-code-address}@anchor{186} +@anchor{gnat_rm/implementation_defined_attributes attribute-code-address}@anchor{188} @section Attribute Code_Address @@ -10788,7 +11004,7 @@ the same value as is returned by the corresponding @code{'Address} attribute. @node Attribute Compiler_Version,Attribute Constrained,Attribute Code_Address,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-compiler-version}@anchor{187} +@anchor{gnat_rm/implementation_defined_attributes attribute-compiler-version}@anchor{189} @section Attribute Compiler_Version @@ -10799,7 +11015,7 @@ prefix) yields a static string identifying the version of the compiler being used to compile the unit containing the attribute reference. @node Attribute Constrained,Attribute Default_Bit_Order,Attribute Compiler_Version,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-constrained}@anchor{188} +@anchor{gnat_rm/implementation_defined_attributes attribute-constrained}@anchor{18a} @section Attribute Constrained @@ -10814,7 +11030,7 @@ record type without discriminants is always @code{True}. This usage is compatible with older Ada compilers, including notably DEC Ada. @node Attribute Default_Bit_Order,Attribute Default_Scalar_Storage_Order,Attribute Constrained,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-default-bit-order}@anchor{189} +@anchor{gnat_rm/implementation_defined_attributes attribute-default-bit-order}@anchor{18b} @section Attribute Default_Bit_Order @@ -10831,7 +11047,7 @@ as a @code{Pos} value (0 for @code{High_Order_First}, 1 for @code{Default_Bit_Order} in package @code{System}. @node Attribute Default_Scalar_Storage_Order,Attribute Deref,Attribute Default_Bit_Order,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-default-scalar-storage-order}@anchor{18a} +@anchor{gnat_rm/implementation_defined_attributes attribute-default-scalar-storage-order}@anchor{18c} @section Attribute Default_Scalar_Storage_Order @@ -10848,7 +11064,7 @@ equal to @code{Default_Bit_Order} if unspecified) as a @code{System.Bit_Order} value. This is a static attribute. @node Attribute Deref,Attribute Descriptor_Size,Attribute Default_Scalar_Storage_Order,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-deref}@anchor{18b} +@anchor{gnat_rm/implementation_defined_attributes attribute-deref}@anchor{18d} @section Attribute Deref @@ -10861,7 +11077,7 @@ a named access-to-@cite{typ} type, except that it yields a variable, so it can b used on the left side of an assignment. @node Attribute Descriptor_Size,Attribute Elaborated,Attribute Deref,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-descriptor-size}@anchor{18c} +@anchor{gnat_rm/implementation_defined_attributes attribute-descriptor-size}@anchor{18e} @section Attribute Descriptor_Size @@ -10890,7 +11106,7 @@ since @code{Positive} has an alignment of 4, the size of the descriptor is which yields a size of 32 bits, i.e. including 16 bits of padding. @node Attribute Elaborated,Attribute Elab_Body,Attribute Descriptor_Size,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-elaborated}@anchor{18d} +@anchor{gnat_rm/implementation_defined_attributes attribute-elaborated}@anchor{18f} @section Attribute Elaborated @@ -10905,7 +11121,7 @@ units has been completed. An exception is for units which need no elaboration, the value is always False for such units. @node Attribute Elab_Body,Attribute Elab_Spec,Attribute Elaborated,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-elab-body}@anchor{18e} +@anchor{gnat_rm/implementation_defined_attributes attribute-elab-body}@anchor{190} @section Attribute Elab_Body @@ -10921,7 +11137,7 @@ e.g., if it is necessary to do selective re-elaboration to fix some error. @node Attribute Elab_Spec,Attribute Elab_Subp_Body,Attribute Elab_Body,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-elab-spec}@anchor{18f} +@anchor{gnat_rm/implementation_defined_attributes attribute-elab-spec}@anchor{191} @section Attribute Elab_Spec @@ -10937,7 +11153,7 @@ Ada code, e.g., if it is necessary to do selective re-elaboration to fix some error. @node Attribute Elab_Subp_Body,Attribute Emax,Attribute Elab_Spec,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-elab-subp-body}@anchor{190} +@anchor{gnat_rm/implementation_defined_attributes attribute-elab-subp-body}@anchor{192} @section Attribute Elab_Subp_Body @@ -10951,7 +11167,7 @@ elaboration procedure by the binder in CodePeer mode only and is unrecognized otherwise. @node Attribute Emax,Attribute Enabled,Attribute Elab_Subp_Body,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-emax}@anchor{191} +@anchor{gnat_rm/implementation_defined_attributes attribute-emax}@anchor{193} @section Attribute Emax @@ -10964,7 +11180,7 @@ the Ada 83 reference manual for an exact description of the semantics of this attribute. @node Attribute Enabled,Attribute Enum_Rep,Attribute Emax,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-enabled}@anchor{192} +@anchor{gnat_rm/implementation_defined_attributes attribute-enabled}@anchor{194} @section Attribute Enabled @@ -10988,7 +11204,7 @@ a @code{pragma Suppress} or @code{pragma Unsuppress} before instantiating the package or subprogram, controlling whether the check will be present. @node Attribute Enum_Rep,Attribute Enum_Val,Attribute Enabled,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-enum-rep}@anchor{193} +@anchor{gnat_rm/implementation_defined_attributes attribute-enum-rep}@anchor{195} @section Attribute Enum_Rep @@ -11028,7 +11244,7 @@ integer calculation is done at run time, then the call to @code{Enum_Rep} may raise @code{Constraint_Error}. @node Attribute Enum_Val,Attribute Epsilon,Attribute Enum_Rep,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-enum-val}@anchor{194} +@anchor{gnat_rm/implementation_defined_attributes attribute-enum-val}@anchor{196} @section Attribute Enum_Val @@ -11054,7 +11270,7 @@ absence of an enumeration representation clause. This is a static attribute (i.e., the result is static if the argument is static). @node Attribute Epsilon,Attribute Fast_Math,Attribute Enum_Val,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-epsilon}@anchor{195} +@anchor{gnat_rm/implementation_defined_attributes attribute-epsilon}@anchor{197} @section Attribute Epsilon @@ -11067,7 +11283,7 @@ the Ada 83 reference manual for an exact description of the semantics of this attribute. @node Attribute Fast_Math,Attribute Finalization_Size,Attribute Epsilon,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-fast-math}@anchor{196} +@anchor{gnat_rm/implementation_defined_attributes attribute-fast-math}@anchor{198} @section Attribute Fast_Math @@ -11078,7 +11294,7 @@ prefix) yields a static Boolean value that is True if pragma @code{Fast_Math} is active, and False otherwise. @node Attribute Finalization_Size,Attribute Fixed_Value,Attribute Fast_Math,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-finalization-size}@anchor{197} +@anchor{gnat_rm/implementation_defined_attributes attribute-finalization-size}@anchor{199} @section Attribute Finalization_Size @@ -11096,7 +11312,7 @@ class-wide type whose tag denotes a type with no controlled parts. Note that only heap-allocated objects contain finalization data. @node Attribute Fixed_Value,Attribute From_Any,Attribute Finalization_Size,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-fixed-value}@anchor{198} +@anchor{gnat_rm/implementation_defined_attributes attribute-fixed-value}@anchor{19a} @section Attribute Fixed_Value @@ -11123,7 +11339,7 @@ This attribute is primarily intended for use in implementation of the input-output functions for fixed-point values. @node Attribute From_Any,Attribute Has_Access_Values,Attribute Fixed_Value,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-from-any}@anchor{199} +@anchor{gnat_rm/implementation_defined_attributes attribute-from-any}@anchor{19b} @section Attribute From_Any @@ -11133,7 +11349,7 @@ This internal attribute is used for the generation of remote subprogram stubs in the context of the Distributed Systems Annex. @node Attribute Has_Access_Values,Attribute Has_Discriminants,Attribute From_Any,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-has-access-values}@anchor{19a} +@anchor{gnat_rm/implementation_defined_attributes attribute-has-access-values}@anchor{19c} @section Attribute Has_Access_Values @@ -11151,7 +11367,7 @@ definitions. If the attribute is applied to a generic private type, it indicates whether or not the corresponding actual type has access values. @node Attribute Has_Discriminants,Attribute Has_Tagged_Values,Attribute Has_Access_Values,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-has-discriminants}@anchor{19b} +@anchor{gnat_rm/implementation_defined_attributes attribute-has-discriminants}@anchor{19d} @section Attribute Has_Discriminants @@ -11167,7 +11383,7 @@ definitions. If the attribute is applied to a generic private type, it indicates whether or not the corresponding actual type has discriminants. @node Attribute Has_Tagged_Values,Attribute Img,Attribute Has_Discriminants,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-has-tagged-values}@anchor{19c} +@anchor{gnat_rm/implementation_defined_attributes attribute-has-tagged-values}@anchor{19e} @section Attribute Has_Tagged_Values @@ -11184,7 +11400,7 @@ definitions. If the attribute is applied to a generic private type, it indicates whether or not the corresponding actual type has access values. @node Attribute Img,Attribute Initialized,Attribute Has_Tagged_Values,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-img}@anchor{19d} +@anchor{gnat_rm/implementation_defined_attributes attribute-img}@anchor{19f} @section Attribute Img @@ -11214,7 +11430,7 @@ that returns the appropriate string when called. This means that in an instantiation as a function parameter. @node Attribute Initialized,Attribute Integer_Value,Attribute Img,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-initialized}@anchor{19e} +@anchor{gnat_rm/implementation_defined_attributes attribute-initialized}@anchor{1a0} @section Attribute Initialized @@ -11224,7 +11440,7 @@ For the syntax and semantics of this attribute, see the SPARK 2014 Reference Manual, section 6.10. @node Attribute Integer_Value,Attribute Invalid_Value,Attribute Initialized,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-integer-value}@anchor{19f} +@anchor{gnat_rm/implementation_defined_attributes attribute-integer-value}@anchor{1a1} @section Attribute Integer_Value @@ -11252,7 +11468,7 @@ This attribute is primarily intended for use in implementation of the standard input-output functions for fixed-point values. @node Attribute Invalid_Value,Attribute Large,Attribute Integer_Value,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-invalid-value}@anchor{1a0} +@anchor{gnat_rm/implementation_defined_attributes attribute-invalid-value}@anchor{1a2} @section Attribute Invalid_Value @@ -11266,7 +11482,7 @@ including the ability to modify the value with the binder -Sxx flag and relevant environment variables at run time. @node Attribute Large,Attribute Library_Level,Attribute Invalid_Value,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-large}@anchor{1a1} +@anchor{gnat_rm/implementation_defined_attributes attribute-large}@anchor{1a3} @section Attribute Large @@ -11279,7 +11495,7 @@ the Ada 83 reference manual for an exact description of the semantics of this attribute. @node Attribute Library_Level,Attribute Loop_Entry,Attribute Large,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-library-level}@anchor{1a2} +@anchor{gnat_rm/implementation_defined_attributes attribute-library-level}@anchor{1a4} @section Attribute Library_Level @@ -11305,7 +11521,7 @@ end Gen; @end example @node Attribute Loop_Entry,Attribute Machine_Size,Attribute Library_Level,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-loop-entry}@anchor{1a3} +@anchor{gnat_rm/implementation_defined_attributes attribute-loop-entry}@anchor{1a5} @section Attribute Loop_Entry @@ -11338,7 +11554,7 @@ entry. This copy is not performed if the loop is not entered, or if the corresponding pragmas are ignored or disabled. @node Attribute Machine_Size,Attribute Mantissa,Attribute Loop_Entry,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-machine-size}@anchor{1a4} +@anchor{gnat_rm/implementation_defined_attributes attribute-machine-size}@anchor{1a6} @section Attribute Machine_Size @@ -11348,7 +11564,7 @@ This attribute is identical to the @code{Object_Size} attribute. It is provided for compatibility with the DEC Ada 83 attribute of this name. @node Attribute Mantissa,Attribute Maximum_Alignment,Attribute Machine_Size,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-mantissa}@anchor{1a5} +@anchor{gnat_rm/implementation_defined_attributes attribute-mantissa}@anchor{1a7} @section Attribute Mantissa @@ -11361,7 +11577,7 @@ the Ada 83 reference manual for an exact description of the semantics of this attribute. @node Attribute Maximum_Alignment,Attribute Max_Integer_Size,Attribute Mantissa,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-maximum-alignment}@anchor{1a6}@anchor{gnat_rm/implementation_defined_attributes id2}@anchor{1a7} +@anchor{gnat_rm/implementation_defined_attributes attribute-maximum-alignment}@anchor{1a8}@anchor{gnat_rm/implementation_defined_attributes id2}@anchor{1a9} @section Attribute Maximum_Alignment @@ -11377,7 +11593,7 @@ for an object, guaranteeing that it is properly aligned in all cases. @node Attribute Max_Integer_Size,Attribute Mechanism_Code,Attribute Maximum_Alignment,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-max-integer-size}@anchor{1a8} +@anchor{gnat_rm/implementation_defined_attributes attribute-max-integer-size}@anchor{1aa} @section Attribute Max_Integer_Size @@ -11388,7 +11604,7 @@ prefix) provides the size of the largest supported integer type for the target. The result is a static constant. @node Attribute Mechanism_Code,Attribute Null_Parameter,Attribute Max_Integer_Size,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-mechanism-code}@anchor{1a9} +@anchor{gnat_rm/implementation_defined_attributes attribute-mechanism-code}@anchor{1ab} @section Attribute Mechanism_Code @@ -11419,7 +11635,7 @@ by reference @end table @node Attribute Null_Parameter,Attribute Object_Size,Attribute Mechanism_Code,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-null-parameter}@anchor{1aa} +@anchor{gnat_rm/implementation_defined_attributes attribute-null-parameter}@anchor{1ac} @section Attribute Null_Parameter @@ -11444,7 +11660,7 @@ There is no way of indicating this without the @code{Null_Parameter} attribute. @node Attribute Object_Size,Attribute Old,Attribute Null_Parameter,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-object-size}@anchor{157}@anchor{gnat_rm/implementation_defined_attributes id3}@anchor{1ab} +@anchor{gnat_rm/implementation_defined_attributes attribute-object-size}@anchor{159}@anchor{gnat_rm/implementation_defined_attributes id3}@anchor{1ad} @section Attribute Object_Size @@ -11514,7 +11730,7 @@ Similar additional checks are performed in other contexts requiring statically matching subtypes. @node Attribute Old,Attribute Passed_By_Reference,Attribute Object_Size,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-old}@anchor{1ac} +@anchor{gnat_rm/implementation_defined_attributes attribute-old}@anchor{1ae} @section Attribute Old @@ -11529,7 +11745,7 @@ definition are allowed under control of implementation defined pragma @code{Unevaluated_Use_Of_Old}. @node Attribute Passed_By_Reference,Attribute Pool_Address,Attribute Old,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-passed-by-reference}@anchor{1ad} +@anchor{gnat_rm/implementation_defined_attributes attribute-passed-by-reference}@anchor{1af} @section Attribute Passed_By_Reference @@ -11545,7 +11761,7 @@ passed by copy in calls. For scalar types, the result is always @code{False} and is static. For non-scalar types, the result is nonstatic. @node Attribute Pool_Address,Attribute Range_Length,Attribute Passed_By_Reference,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-pool-address}@anchor{1ae} +@anchor{gnat_rm/implementation_defined_attributes attribute-pool-address}@anchor{1b0} @section Attribute Pool_Address @@ -11567,7 +11783,7 @@ For an object created by @code{new}, @code{Ptr.all'Pool_Address} is what is passed to @code{Allocate} and returned from @code{Deallocate}. @node Attribute Range_Length,Attribute Restriction_Set,Attribute Pool_Address,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-range-length}@anchor{1af} +@anchor{gnat_rm/implementation_defined_attributes attribute-range-length}@anchor{1b1} @section Attribute Range_Length @@ -11580,7 +11796,7 @@ applied to the index subtype of a one dimensional array always gives the same result as @code{Length} applied to the array itself. @node Attribute Restriction_Set,Attribute Result,Attribute Range_Length,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-restriction-set}@anchor{1b0} +@anchor{gnat_rm/implementation_defined_attributes attribute-restriction-set}@anchor{1b2} @section Attribute Restriction_Set @@ -11650,7 +11866,7 @@ Restrictions pragma, they are not analyzed semantically, so they do not have a type. @node Attribute Result,Attribute Round,Attribute Restriction_Set,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-result}@anchor{1b1} +@anchor{gnat_rm/implementation_defined_attributes attribute-result}@anchor{1b3} @section Attribute Result @@ -11663,7 +11879,7 @@ For a further discussion of the use of this attribute and examples of its use, see the description of pragma Postcondition. @node Attribute Round,Attribute Safe_Emax,Attribute Result,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-round}@anchor{1b2} +@anchor{gnat_rm/implementation_defined_attributes attribute-round}@anchor{1b4} @section Attribute Round @@ -11674,7 +11890,7 @@ also permits the use of the @code{'Round} attribute for ordinary fixed point types. @node Attribute Safe_Emax,Attribute Safe_Large,Attribute Round,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-safe-emax}@anchor{1b3} +@anchor{gnat_rm/implementation_defined_attributes attribute-safe-emax}@anchor{1b5} @section Attribute Safe_Emax @@ -11687,7 +11903,7 @@ the Ada 83 reference manual for an exact description of the semantics of this attribute. @node Attribute Safe_Large,Attribute Safe_Small,Attribute Safe_Emax,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-safe-large}@anchor{1b4} +@anchor{gnat_rm/implementation_defined_attributes attribute-safe-large}@anchor{1b6} @section Attribute Safe_Large @@ -11700,7 +11916,7 @@ the Ada 83 reference manual for an exact description of the semantics of this attribute. @node Attribute Safe_Small,Attribute Scalar_Storage_Order,Attribute Safe_Large,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-safe-small}@anchor{1b5} +@anchor{gnat_rm/implementation_defined_attributes attribute-safe-small}@anchor{1b7} @section Attribute Safe_Small @@ -11713,7 +11929,7 @@ the Ada 83 reference manual for an exact description of the semantics of this attribute. @node Attribute Scalar_Storage_Order,Attribute Simple_Storage_Pool,Attribute Safe_Small,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-scalar-storage-order}@anchor{166}@anchor{gnat_rm/implementation_defined_attributes id4}@anchor{1b6} +@anchor{gnat_rm/implementation_defined_attributes attribute-scalar-storage-order}@anchor{168}@anchor{gnat_rm/implementation_defined_attributes id4}@anchor{1b8} @section Attribute Scalar_Storage_Order @@ -11876,7 +12092,7 @@ Note that debuggers may be unable to display the correct value of scalar components of a type for which the opposite storage order is specified. @node Attribute Simple_Storage_Pool,Attribute Small,Attribute Scalar_Storage_Order,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-simple-storage-pool}@anchor{f2}@anchor{gnat_rm/implementation_defined_attributes id5}@anchor{1b7} +@anchor{gnat_rm/implementation_defined_attributes attribute-simple-storage-pool}@anchor{f3}@anchor{gnat_rm/implementation_defined_attributes id5}@anchor{1b9} @section Attribute Simple_Storage_Pool @@ -11939,7 +12155,7 @@ as defined in section 13.11.2 of the Ada Reference Manual, except that the term `simple storage pool' is substituted for `storage pool'. @node Attribute Small,Attribute Small_Denominator,Attribute Simple_Storage_Pool,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-small}@anchor{1b8} +@anchor{gnat_rm/implementation_defined_attributes attribute-small}@anchor{1ba} @section Attribute Small @@ -11955,7 +12171,7 @@ the Ada 83 reference manual for an exact description of the semantics of this attribute when applied to floating-point types. @node Attribute Small_Denominator,Attribute Small_Numerator,Attribute Small,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-small-denominator}@anchor{1b9} +@anchor{gnat_rm/implementation_defined_attributes attribute-small-denominator}@anchor{1bb} @section Attribute Small_Denominator @@ -11968,7 +12184,7 @@ denominator in the representation of @code{typ'Small} as a rational number with coprime factors (i.e. as an irreducible fraction). @node Attribute Small_Numerator,Attribute Storage_Unit,Attribute Small_Denominator,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-small-numerator}@anchor{1ba} +@anchor{gnat_rm/implementation_defined_attributes attribute-small-numerator}@anchor{1bc} @section Attribute Small_Numerator @@ -11981,7 +12197,7 @@ numerator in the representation of @code{typ'Small} as a rational number with coprime factors (i.e. as an irreducible fraction). @node Attribute Storage_Unit,Attribute Stub_Type,Attribute Small_Numerator,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-storage-unit}@anchor{1bb} +@anchor{gnat_rm/implementation_defined_attributes attribute-storage-unit}@anchor{1bd} @section Attribute Storage_Unit @@ -11991,7 +12207,7 @@ with coprime factors (i.e. as an irreducible fraction). prefix) provides the same value as @code{System.Storage_Unit}. @node Attribute Stub_Type,Attribute System_Allocator_Alignment,Attribute Storage_Unit,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-stub-type}@anchor{1bc} +@anchor{gnat_rm/implementation_defined_attributes attribute-stub-type}@anchor{1be} @section Attribute Stub_Type @@ -12015,7 +12231,7 @@ unit @code{System.Partition_Interface}. Use of this attribute will create an implicit dependency on this unit. @node Attribute System_Allocator_Alignment,Attribute Target_Name,Attribute Stub_Type,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-system-allocator-alignment}@anchor{1bd} +@anchor{gnat_rm/implementation_defined_attributes attribute-system-allocator-alignment}@anchor{1bf} @section Attribute System_Allocator_Alignment @@ -12032,7 +12248,7 @@ with alignment too large or to enable a realignment circuitry if the alignment request is larger than this value. @node Attribute Target_Name,Attribute To_Address,Attribute System_Allocator_Alignment,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-target-name}@anchor{1be} +@anchor{gnat_rm/implementation_defined_attributes attribute-target-name}@anchor{1c0} @section Attribute Target_Name @@ -12045,7 +12261,7 @@ standard gcc target name without the terminating slash (for example, GNAT 5.0 on windows yields “i586-pc-mingw32msv”). @node Attribute To_Address,Attribute To_Any,Attribute Target_Name,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-to-address}@anchor{1bf} +@anchor{gnat_rm/implementation_defined_attributes attribute-to-address}@anchor{1c1} @section Attribute To_Address @@ -12068,7 +12284,7 @@ modular manner (e.g., -1 means the same as 16#FFFF_FFFF# on a 32 bits machine). @node Attribute To_Any,Attribute Type_Class,Attribute To_Address,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-to-any}@anchor{1c0} +@anchor{gnat_rm/implementation_defined_attributes attribute-to-any}@anchor{1c2} @section Attribute To_Any @@ -12078,7 +12294,7 @@ This internal attribute is used for the generation of remote subprogram stubs in the context of the Distributed Systems Annex. @node Attribute Type_Class,Attribute Type_Key,Attribute To_Any,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-type-class}@anchor{1c1} +@anchor{gnat_rm/implementation_defined_attributes attribute-type-class}@anchor{1c3} @section Attribute Type_Class @@ -12108,7 +12324,7 @@ applies to all concurrent types. This attribute is designed to be compatible with the DEC Ada 83 attribute of the same name. @node Attribute Type_Key,Attribute TypeCode,Attribute Type_Class,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-type-key}@anchor{1c2} +@anchor{gnat_rm/implementation_defined_attributes attribute-type-key}@anchor{1c4} @section Attribute Type_Key @@ -12120,7 +12336,7 @@ about the type or subtype. This provides improved compatibility with other implementations that support this attribute. @node Attribute TypeCode,Attribute Unconstrained_Array,Attribute Type_Key,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-typecode}@anchor{1c3} +@anchor{gnat_rm/implementation_defined_attributes attribute-typecode}@anchor{1c5} @section Attribute TypeCode @@ -12130,7 +12346,7 @@ This internal attribute is used for the generation of remote subprogram stubs in the context of the Distributed Systems Annex. @node Attribute Unconstrained_Array,Attribute Universal_Literal_String,Attribute TypeCode,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-unconstrained-array}@anchor{1c4} +@anchor{gnat_rm/implementation_defined_attributes attribute-unconstrained-array}@anchor{1c6} @section Attribute Unconstrained_Array @@ -12144,7 +12360,7 @@ still static, and yields the result of applying this test to the generic actual. @node Attribute Universal_Literal_String,Attribute Unrestricted_Access,Attribute Unconstrained_Array,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-universal-literal-string}@anchor{1c5} +@anchor{gnat_rm/implementation_defined_attributes attribute-universal-literal-string}@anchor{1c7} @section Attribute Universal_Literal_String @@ -12172,7 +12388,7 @@ end; @end example @node Attribute Unrestricted_Access,Attribute Update,Attribute Universal_Literal_String,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-unrestricted-access}@anchor{1c6} +@anchor{gnat_rm/implementation_defined_attributes attribute-unrestricted-access}@anchor{1c8} @section Attribute Unrestricted_Access @@ -12359,7 +12575,7 @@ In general this is a risky approach. It may appear to “work” but such uses o of GNAT to another, so are best avoided if possible. @node Attribute Update,Attribute Valid_Value,Attribute Unrestricted_Access,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-update}@anchor{1c7} +@anchor{gnat_rm/implementation_defined_attributes attribute-update}@anchor{1c9} @section Attribute Update @@ -12440,7 +12656,7 @@ A := A'Update ((1, 2) => 20, (3, 4) => 30); which changes element (1,2) to 20 and (3,4) to 30. @node Attribute Valid_Value,Attribute Valid_Scalars,Attribute Update,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-valid-value}@anchor{1c8} +@anchor{gnat_rm/implementation_defined_attributes attribute-valid-value}@anchor{1ca} @section Attribute Valid_Value @@ -12452,7 +12668,7 @@ a function that takes a String, and returns Boolean. @code{T'Valid_Value (S)} returns True if and only if @code{T'Value (S)} would not raise Constraint_Error. @node Attribute Valid_Scalars,Attribute VADS_Size,Attribute Valid_Value,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-valid-scalars}@anchor{1c9} +@anchor{gnat_rm/implementation_defined_attributes attribute-valid-scalars}@anchor{1cb} @section Attribute Valid_Scalars @@ -12486,7 +12702,7 @@ write a function with a single use of the attribute, and then call that function from multiple places. @node Attribute VADS_Size,Attribute Value_Size,Attribute Valid_Scalars,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-vads-size}@anchor{1ca} +@anchor{gnat_rm/implementation_defined_attributes attribute-vads-size}@anchor{1cc} @section Attribute VADS_Size @@ -12506,7 +12722,7 @@ gives the result that would be obtained by applying the attribute to the corresponding type. @node Attribute Value_Size,Attribute Wchar_T_Size,Attribute VADS_Size,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-value-size}@anchor{178}@anchor{gnat_rm/implementation_defined_attributes id6}@anchor{1cb} +@anchor{gnat_rm/implementation_defined_attributes attribute-value-size}@anchor{17a}@anchor{gnat_rm/implementation_defined_attributes id6}@anchor{1cd} @section Attribute Value_Size @@ -12520,7 +12736,7 @@ a value of the given subtype. It is the same as @code{type'Size}, but, unlike @code{Size}, may be set for non-first subtypes. @node Attribute Wchar_T_Size,Attribute Word_Size,Attribute Value_Size,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-wchar-t-size}@anchor{1cc} +@anchor{gnat_rm/implementation_defined_attributes attribute-wchar-t-size}@anchor{1ce} @section Attribute Wchar_T_Size @@ -12532,7 +12748,7 @@ primarily for constructing the definition of this type in package @code{Interfaces.C}. The result is a static constant. @node Attribute Word_Size,,Attribute Wchar_T_Size,Implementation Defined Attributes -@anchor{gnat_rm/implementation_defined_attributes attribute-word-size}@anchor{1cd} +@anchor{gnat_rm/implementation_defined_attributes attribute-word-size}@anchor{1cf} @section Attribute Word_Size @@ -12543,7 +12759,7 @@ prefix) provides the value @code{System.Word_Size}. The result is a static constant. @node Standard and Implementation Defined Restrictions,Implementation Advice,Implementation Defined Attributes,Top -@anchor{gnat_rm/standard_and_implementation_defined_restrictions doc}@anchor{1ce}@anchor{gnat_rm/standard_and_implementation_defined_restrictions id1}@anchor{1cf}@anchor{gnat_rm/standard_and_implementation_defined_restrictions standard-and-implementation-defined-restrictions}@anchor{9} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions doc}@anchor{1d0}@anchor{gnat_rm/standard_and_implementation_defined_restrictions id1}@anchor{1d1}@anchor{gnat_rm/standard_and_implementation_defined_restrictions standard-and-implementation-defined-restrictions}@anchor{9} @chapter Standard and Implementation Defined Restrictions @@ -12572,7 +12788,7 @@ language defined or GNAT-specific, are listed in the following. @end menu @node Partition-Wide Restrictions,Program Unit Level Restrictions,,Standard and Implementation Defined Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions id2}@anchor{1d0}@anchor{gnat_rm/standard_and_implementation_defined_restrictions partition-wide-restrictions}@anchor{1d1} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions id2}@anchor{1d2}@anchor{gnat_rm/standard_and_implementation_defined_restrictions partition-wide-restrictions}@anchor{1d3} @section Partition-Wide Restrictions @@ -12665,7 +12881,7 @@ then all compilation units in the partition must obey the restriction). @end menu @node Immediate_Reclamation,Max_Asynchronous_Select_Nesting,,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions immediate-reclamation}@anchor{1d2} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions immediate-reclamation}@anchor{1d4} @subsection Immediate_Reclamation @@ -12677,7 +12893,7 @@ deallocation, any storage reserved at run time for an object is immediately reclaimed when the object no longer exists. @node Max_Asynchronous_Select_Nesting,Max_Entry_Queue_Length,Immediate_Reclamation,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions max-asynchronous-select-nesting}@anchor{1d3} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions max-asynchronous-select-nesting}@anchor{1d5} @subsection Max_Asynchronous_Select_Nesting @@ -12689,7 +12905,7 @@ detected at compile time. Violations of this restriction with values other than zero cause Storage_Error to be raised. @node Max_Entry_Queue_Length,Max_Protected_Entries,Max_Asynchronous_Select_Nesting,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions max-entry-queue-length}@anchor{1d4} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions max-entry-queue-length}@anchor{1d6} @subsection Max_Entry_Queue_Length @@ -12710,7 +12926,7 @@ compatibility purposes (and a warning will be generated for its use if warnings on obsolescent features are activated). @node Max_Protected_Entries,Max_Select_Alternatives,Max_Entry_Queue_Length,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions max-protected-entries}@anchor{1d5} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions max-protected-entries}@anchor{1d7} @subsection Max_Protected_Entries @@ -12721,7 +12937,7 @@ bounds of every entry family of a protected unit shall be static, or shall be defined by a discriminant of a subtype whose corresponding bound is static. @node Max_Select_Alternatives,Max_Storage_At_Blocking,Max_Protected_Entries,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions max-select-alternatives}@anchor{1d6} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions max-select-alternatives}@anchor{1d8} @subsection Max_Select_Alternatives @@ -12730,7 +12946,7 @@ defined by a discriminant of a subtype whose corresponding bound is static. [RM D.7] Specifies the maximum number of alternatives in a selective accept. @node Max_Storage_At_Blocking,Max_Task_Entries,Max_Select_Alternatives,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions max-storage-at-blocking}@anchor{1d7} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions max-storage-at-blocking}@anchor{1d9} @subsection Max_Storage_At_Blocking @@ -12741,7 +12957,7 @@ Storage_Size that can be retained by a blocked task. A violation of this restriction causes Storage_Error to be raised. @node Max_Task_Entries,Max_Tasks,Max_Storage_At_Blocking,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions max-task-entries}@anchor{1d8} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions max-task-entries}@anchor{1da} @subsection Max_Task_Entries @@ -12754,7 +12970,7 @@ defined by a discriminant of a subtype whose corresponding bound is static. @node Max_Tasks,No_Abort_Statements,Max_Task_Entries,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions max-tasks}@anchor{1d9} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions max-tasks}@anchor{1db} @subsection Max_Tasks @@ -12767,7 +12983,7 @@ time. Violations of this restriction with values other than zero cause Storage_Error to be raised. @node No_Abort_Statements,No_Access_Parameter_Allocators,Max_Tasks,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-abort-statements}@anchor{1da} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-abort-statements}@anchor{1dc} @subsection No_Abort_Statements @@ -12777,7 +12993,7 @@ Storage_Error to be raised. no calls to Task_Identification.Abort_Task. @node No_Access_Parameter_Allocators,No_Access_Subprograms,No_Abort_Statements,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-access-parameter-allocators}@anchor{1db} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-access-parameter-allocators}@anchor{1dd} @subsection No_Access_Parameter_Allocators @@ -12788,7 +13004,7 @@ occurrences of an allocator as the actual parameter to an access parameter. @node No_Access_Subprograms,No_Allocators,No_Access_Parameter_Allocators,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-access-subprograms}@anchor{1dc} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-access-subprograms}@anchor{1de} @subsection No_Access_Subprograms @@ -12798,7 +13014,7 @@ parameter. declarations of access-to-subprogram types. @node No_Allocators,No_Anonymous_Allocators,No_Access_Subprograms,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-allocators}@anchor{1dd} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-allocators}@anchor{1df} @subsection No_Allocators @@ -12808,7 +13024,7 @@ declarations of access-to-subprogram types. occurrences of an allocator. @node No_Anonymous_Allocators,No_Asynchronous_Control,No_Allocators,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-anonymous-allocators}@anchor{1de} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-anonymous-allocators}@anchor{1e0} @subsection No_Anonymous_Allocators @@ -12818,7 +13034,7 @@ occurrences of an allocator. occurrences of an allocator of anonymous access type. @node No_Asynchronous_Control,No_Calendar,No_Anonymous_Allocators,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-asynchronous-control}@anchor{1df} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-asynchronous-control}@anchor{1e1} @subsection No_Asynchronous_Control @@ -12828,7 +13044,7 @@ occurrences of an allocator of anonymous access type. dependences on the predefined package Asynchronous_Task_Control. @node No_Calendar,No_Coextensions,No_Asynchronous_Control,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-calendar}@anchor{1e0} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-calendar}@anchor{1e2} @subsection No_Calendar @@ -12838,7 +13054,7 @@ dependences on the predefined package Asynchronous_Task_Control. dependences on package Calendar. @node No_Coextensions,No_Default_Initialization,No_Calendar,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-coextensions}@anchor{1e1} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-coextensions}@anchor{1e3} @subsection No_Coextensions @@ -12848,7 +13064,7 @@ dependences on package Calendar. coextensions. See 3.10.2. @node No_Default_Initialization,No_Delay,No_Coextensions,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-default-initialization}@anchor{1e2} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-default-initialization}@anchor{1e4} @subsection No_Default_Initialization @@ -12865,7 +13081,7 @@ is to prohibit all cases of variables declared without a specific initializer (including the case of OUT scalar parameters). @node No_Delay,No_Dependence,No_Default_Initialization,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-delay}@anchor{1e3} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-delay}@anchor{1e5} @subsection No_Delay @@ -12875,7 +13091,7 @@ initializer (including the case of OUT scalar parameters). delay statements and no semantic dependences on package Calendar. @node No_Dependence,No_Direct_Boolean_Operators,No_Delay,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dependence}@anchor{1e4} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dependence}@anchor{1e6} @subsection No_Dependence @@ -12918,7 +13134,7 @@ to support specific constructs of the language. Here are some examples: @end itemize @node No_Direct_Boolean_Operators,No_Dispatch,No_Dependence,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-direct-boolean-operators}@anchor{1e5} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-direct-boolean-operators}@anchor{1e7} @subsection No_Direct_Boolean_Operators @@ -12931,7 +13147,7 @@ protocol requires the use of short-circuit (and then, or else) forms for all composite boolean operations. @node No_Dispatch,No_Dispatching_Calls,No_Direct_Boolean_Operators,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dispatch}@anchor{1e6} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dispatch}@anchor{1e8} @subsection No_Dispatch @@ -12941,7 +13157,7 @@ composite boolean operations. occurrences of @code{T'Class}, for any (tagged) subtype @code{T}. @node No_Dispatching_Calls,No_Dynamic_Attachment,No_Dispatch,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dispatching-calls}@anchor{1e7} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dispatching-calls}@anchor{1e9} @subsection No_Dispatching_Calls @@ -13002,7 +13218,7 @@ end Example; @end example @node No_Dynamic_Attachment,No_Dynamic_Priorities,No_Dispatching_Calls,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dynamic-attachment}@anchor{1e8} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dynamic-attachment}@anchor{1ea} @subsection No_Dynamic_Attachment @@ -13021,7 +13237,7 @@ compatibility purposes (and a warning will be generated for its use if warnings on obsolescent features are activated). @node No_Dynamic_Priorities,No_Entry_Calls_In_Elaboration_Code,No_Dynamic_Attachment,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dynamic-priorities}@anchor{1e9} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dynamic-priorities}@anchor{1eb} @subsection No_Dynamic_Priorities @@ -13030,7 +13246,7 @@ warnings on obsolescent features are activated). [RM D.7] There are no semantic dependencies on the package Dynamic_Priorities. @node No_Entry_Calls_In_Elaboration_Code,No_Enumeration_Maps,No_Dynamic_Priorities,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-entry-calls-in-elaboration-code}@anchor{1ea} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-entry-calls-in-elaboration-code}@anchor{1ec} @subsection No_Entry_Calls_In_Elaboration_Code @@ -13042,7 +13258,7 @@ restriction, the compiler can assume that no code past an accept statement in a task can be executed at elaboration time. @node No_Enumeration_Maps,No_Exception_Handlers,No_Entry_Calls_In_Elaboration_Code,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-enumeration-maps}@anchor{1eb} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-enumeration-maps}@anchor{1ed} @subsection No_Enumeration_Maps @@ -13053,7 +13269,7 @@ enumeration maps are used (that is Image and Value attributes applied to enumeration types). @node No_Exception_Handlers,No_Exception_Propagation,No_Enumeration_Maps,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-exception-handlers}@anchor{1ec} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-exception-handlers}@anchor{1ee} @subsection No_Exception_Handlers @@ -13078,7 +13294,7 @@ the raise statement generated by the compiler). The Line parameter when nonzero represents the line number in the source program where the raise occurs. @node No_Exception_Propagation,No_Exception_Registration,No_Exception_Handlers,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-exception-propagation}@anchor{1ed} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-exception-propagation}@anchor{1ef} @subsection No_Exception_Propagation @@ -13095,7 +13311,7 @@ the package GNAT.Current_Exception is not permitted, and reraise statements (raise with no operand) are not permitted. @node No_Exception_Registration,No_Exceptions,No_Exception_Propagation,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-exception-registration}@anchor{1ee} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-exception-registration}@anchor{1f0} @subsection No_Exception_Registration @@ -13109,7 +13325,7 @@ code is simplified by omitting the otherwise-required global registration of exceptions when they are declared. @node No_Exceptions,No_Finalization,No_Exception_Registration,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-exceptions}@anchor{1ef} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-exceptions}@anchor{1f1} @subsection No_Exceptions @@ -13120,7 +13336,7 @@ raise statements and no exception handlers and also suppresses the generation of language-defined run-time checks. @node No_Finalization,No_Fixed_Point,No_Exceptions,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-finalization}@anchor{1f0} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-finalization}@anchor{1f2} @subsection No_Finalization @@ -13161,7 +13377,7 @@ object or a nested component, either declared on the stack or on the heap. The deallocation of a controlled object no longer finalizes its contents. @node No_Fixed_Point,No_Floating_Point,No_Finalization,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-fixed-point}@anchor{1f1} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-fixed-point}@anchor{1f3} @subsection No_Fixed_Point @@ -13171,7 +13387,7 @@ deallocation of a controlled object no longer finalizes its contents. occurrences of fixed point types and operations. @node No_Floating_Point,No_Implicit_Conditionals,No_Fixed_Point,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-floating-point}@anchor{1f2} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-floating-point}@anchor{1f4} @subsection No_Floating_Point @@ -13181,7 +13397,7 @@ occurrences of fixed point types and operations. occurrences of floating point types and operations. @node No_Implicit_Conditionals,No_Implicit_Dynamic_Code,No_Floating_Point,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-conditionals}@anchor{1f3} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-conditionals}@anchor{1f5} @subsection No_Implicit_Conditionals @@ -13197,7 +13413,7 @@ normal manner. Constructs generating implicit conditionals include comparisons of composite objects and the Max/Min attributes. @node No_Implicit_Dynamic_Code,No_Implicit_Heap_Allocations,No_Implicit_Conditionals,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-dynamic-code}@anchor{1f4} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-dynamic-code}@anchor{1f6} @subsection No_Implicit_Dynamic_Code @@ -13227,7 +13443,7 @@ foreign-language convention; primitive operations of nested tagged types. @node No_Implicit_Heap_Allocations,No_Implicit_Protected_Object_Allocations,No_Implicit_Dynamic_Code,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-heap-allocations}@anchor{1f5} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-heap-allocations}@anchor{1f7} @subsection No_Implicit_Heap_Allocations @@ -13236,7 +13452,7 @@ types. [RM D.7] No constructs are allowed to cause implicit heap allocation. @node No_Implicit_Protected_Object_Allocations,No_Implicit_Task_Allocations,No_Implicit_Heap_Allocations,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-protected-object-allocations}@anchor{1f6} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-protected-object-allocations}@anchor{1f8} @subsection No_Implicit_Protected_Object_Allocations @@ -13246,7 +13462,7 @@ types. protected object. @node No_Implicit_Task_Allocations,No_Initialize_Scalars,No_Implicit_Protected_Object_Allocations,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-task-allocations}@anchor{1f7} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-task-allocations}@anchor{1f9} @subsection No_Implicit_Task_Allocations @@ -13255,7 +13471,7 @@ protected object. [GNAT] No constructs are allowed to cause implicit heap allocation of a task. @node No_Initialize_Scalars,No_IO,No_Implicit_Task_Allocations,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-initialize-scalars}@anchor{1f8} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-initialize-scalars}@anchor{1fa} @subsection No_Initialize_Scalars @@ -13267,7 +13483,7 @@ code, and in particular eliminates dummy null initialization routines that are otherwise generated for some record and array types. @node No_IO,No_Local_Allocators,No_Initialize_Scalars,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-io}@anchor{1f9} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-io}@anchor{1fb} @subsection No_IO @@ -13278,7 +13494,7 @@ dependences on any of the library units Sequential_IO, Direct_IO, Text_IO, Wide_Text_IO, Wide_Wide_Text_IO, or Stream_IO. @node No_Local_Allocators,No_Local_Protected_Objects,No_IO,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-local-allocators}@anchor{1fa} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-local-allocators}@anchor{1fc} @subsection No_Local_Allocators @@ -13289,7 +13505,7 @@ occurrences of an allocator in subprograms, generic subprograms, tasks, and entry bodies. @node No_Local_Protected_Objects,No_Local_Tagged_Types,No_Local_Allocators,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-local-protected-objects}@anchor{1fb} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-local-protected-objects}@anchor{1fd} @subsection No_Local_Protected_Objects @@ -13299,7 +13515,7 @@ and entry bodies. only declared at the library level. @node No_Local_Tagged_Types,No_Local_Timing_Events,No_Local_Protected_Objects,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-local-tagged-types}@anchor{1fc} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-local-tagged-types}@anchor{1fe} @subsection No_Local_Tagged_Types @@ -13309,7 +13525,7 @@ only declared at the library level. declared at the library level. @node No_Local_Timing_Events,No_Long_Long_Integers,No_Local_Tagged_Types,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-local-timing-events}@anchor{1fd} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-local-timing-events}@anchor{1ff} @subsection No_Local_Timing_Events @@ -13319,7 +13535,7 @@ declared at the library level. declared at the library level. @node No_Long_Long_Integers,No_Multiple_Elaboration,No_Local_Timing_Events,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-long-long-integers}@anchor{1fe} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-long-long-integers}@anchor{200} @subsection No_Long_Long_Integers @@ -13331,7 +13547,7 @@ implicit base type is Long_Long_Integer, and modular types whose size exceeds Long_Integer’Size. @node No_Multiple_Elaboration,No_Nested_Finalization,No_Long_Long_Integers,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-multiple-elaboration}@anchor{1ff} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-multiple-elaboration}@anchor{201} @subsection No_Multiple_Elaboration @@ -13347,7 +13563,7 @@ possible, including non-Ada main programs and Stand Alone libraries, are not permitted and will be diagnosed by the binder. @node No_Nested_Finalization,No_Protected_Type_Allocators,No_Multiple_Elaboration,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-nested-finalization}@anchor{200} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-nested-finalization}@anchor{202} @subsection No_Nested_Finalization @@ -13356,7 +13572,7 @@ permitted and will be diagnosed by the binder. [RM D.7] All objects requiring finalization are declared at the library level. @node No_Protected_Type_Allocators,No_Protected_Types,No_Nested_Finalization,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-protected-type-allocators}@anchor{201} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-protected-type-allocators}@anchor{203} @subsection No_Protected_Type_Allocators @@ -13366,7 +13582,7 @@ permitted and will be diagnosed by the binder. expressions that attempt to allocate protected objects. @node No_Protected_Types,No_Recursion,No_Protected_Type_Allocators,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-protected-types}@anchor{202} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-protected-types}@anchor{204} @subsection No_Protected_Types @@ -13376,7 +13592,7 @@ expressions that attempt to allocate protected objects. declarations of protected types or protected objects. @node No_Recursion,No_Reentrancy,No_Protected_Types,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-recursion}@anchor{203} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-recursion}@anchor{205} @subsection No_Recursion @@ -13386,7 +13602,7 @@ declarations of protected types or protected objects. part of its execution. @node No_Reentrancy,No_Relative_Delay,No_Recursion,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-reentrancy}@anchor{204} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-reentrancy}@anchor{206} @subsection No_Reentrancy @@ -13396,7 +13612,7 @@ part of its execution. two tasks at the same time. @node No_Relative_Delay,No_Requeue_Statements,No_Reentrancy,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-relative-delay}@anchor{205} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-relative-delay}@anchor{207} @subsection No_Relative_Delay @@ -13407,7 +13623,7 @@ relative statements and prevents expressions such as @code{delay 1.23;} from appearing in source code. @node No_Requeue_Statements,No_Secondary_Stack,No_Relative_Delay,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-requeue-statements}@anchor{206} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-requeue-statements}@anchor{208} @subsection No_Requeue_Statements @@ -13425,7 +13641,7 @@ compatibility purposes (and a warning will be generated for its use if warnings on oNobsolescent features are activated). @node No_Secondary_Stack,No_Select_Statements,No_Requeue_Statements,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-secondary-stack}@anchor{207} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-secondary-stack}@anchor{209} @subsection No_Secondary_Stack @@ -13438,7 +13654,7 @@ stack is used to implement functions returning unconstrained objects secondary stacks for tasks (excluding the environment task) at run time. @node No_Select_Statements,No_Specific_Termination_Handlers,No_Secondary_Stack,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-select-statements}@anchor{208} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-select-statements}@anchor{20a} @subsection No_Select_Statements @@ -13448,7 +13664,7 @@ secondary stacks for tasks (excluding the environment task) at run time. kind are permitted, that is the keyword @code{select} may not appear. @node No_Specific_Termination_Handlers,No_Specification_of_Aspect,No_Select_Statements,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-specific-termination-handlers}@anchor{209} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-specific-termination-handlers}@anchor{20b} @subsection No_Specific_Termination_Handlers @@ -13458,7 +13674,7 @@ kind are permitted, that is the keyword @code{select} may not appear. or to Ada.Task_Termination.Specific_Handler. @node No_Specification_of_Aspect,No_Standard_Allocators_After_Elaboration,No_Specific_Termination_Handlers,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-specification-of-aspect}@anchor{20a} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-specification-of-aspect}@anchor{20c} @subsection No_Specification_of_Aspect @@ -13469,7 +13685,7 @@ specification, attribute definition clause, or pragma is given for a given aspect. @node No_Standard_Allocators_After_Elaboration,No_Standard_Storage_Pools,No_Specification_of_Aspect,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-standard-allocators-after-elaboration}@anchor{20b} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-standard-allocators-after-elaboration}@anchor{20d} @subsection No_Standard_Allocators_After_Elaboration @@ -13481,7 +13697,7 @@ library items of the partition has completed. Otherwise, Storage_Error is raised. @node No_Standard_Storage_Pools,No_Stream_Optimizations,No_Standard_Allocators_After_Elaboration,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-standard-storage-pools}@anchor{20c} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-standard-storage-pools}@anchor{20e} @subsection No_Standard_Storage_Pools @@ -13493,7 +13709,7 @@ have an explicit Storage_Pool attribute defined specifying a user-defined storage pool. @node No_Stream_Optimizations,No_Streams,No_Standard_Storage_Pools,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-stream-optimizations}@anchor{20d} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-stream-optimizations}@anchor{20f} @subsection No_Stream_Optimizations @@ -13506,7 +13722,7 @@ due to their superior performance. When this restriction is in effect, the compiler performs all IO operations on a per-character basis. @node No_Streams,No_Tagged_Type_Registration,No_Stream_Optimizations,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-streams}@anchor{20e} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-streams}@anchor{210} @subsection No_Streams @@ -13533,7 +13749,7 @@ configuration pragmas to avoid exposing entity names at binary level for the entire partition. @node No_Tagged_Type_Registration,No_Task_Allocators,No_Streams,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-tagged-type-registration}@anchor{20f} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-tagged-type-registration}@anchor{211} @subsection No_Tagged_Type_Registration @@ -13548,7 +13764,7 @@ are declared. This restriction may be necessary in order to also apply the No_Elaboration_Code restriction. @node No_Task_Allocators,No_Task_At_Interrupt_Priority,No_Tagged_Type_Registration,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-task-allocators}@anchor{210} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-task-allocators}@anchor{212} @subsection No_Task_Allocators @@ -13558,7 +13774,7 @@ the No_Elaboration_Code restriction. or types containing task subcomponents. @node No_Task_At_Interrupt_Priority,No_Task_Attributes_Package,No_Task_Allocators,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-task-at-interrupt-priority}@anchor{211} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-task-at-interrupt-priority}@anchor{213} @subsection No_Task_At_Interrupt_Priority @@ -13570,7 +13786,7 @@ a consequence, the tasks are always created with a priority below that an interrupt priority. @node No_Task_Attributes_Package,No_Task_Hierarchy,No_Task_At_Interrupt_Priority,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-task-attributes-package}@anchor{212} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-task-attributes-package}@anchor{214} @subsection No_Task_Attributes_Package @@ -13587,7 +13803,7 @@ compatibility purposes (and a warning will be generated for its use if warnings on obsolescent features are activated). @node No_Task_Hierarchy,No_Task_Termination,No_Task_Attributes_Package,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-task-hierarchy}@anchor{213} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-task-hierarchy}@anchor{215} @subsection No_Task_Hierarchy @@ -13597,7 +13813,7 @@ warnings on obsolescent features are activated). directly on the environment task of the partition. @node No_Task_Termination,No_Tasking,No_Task_Hierarchy,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-task-termination}@anchor{214} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-task-termination}@anchor{216} @subsection No_Task_Termination @@ -13606,7 +13822,7 @@ directly on the environment task of the partition. [RM D.7] Tasks that terminate are erroneous. @node No_Tasking,No_Terminate_Alternatives,No_Task_Termination,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-tasking}@anchor{215} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-tasking}@anchor{217} @subsection No_Tasking @@ -13619,7 +13835,7 @@ and cause an error message to be output either by the compiler or binder. @node No_Terminate_Alternatives,No_Unchecked_Access,No_Tasking,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-terminate-alternatives}@anchor{216} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-terminate-alternatives}@anchor{218} @subsection No_Terminate_Alternatives @@ -13628,7 +13844,7 @@ binder. [RM D.7] There are no selective accepts with terminate alternatives. @node No_Unchecked_Access,No_Unchecked_Conversion,No_Terminate_Alternatives,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-unchecked-access}@anchor{217} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-unchecked-access}@anchor{219} @subsection No_Unchecked_Access @@ -13638,7 +13854,7 @@ binder. occurrences of the Unchecked_Access attribute. @node No_Unchecked_Conversion,No_Unchecked_Deallocation,No_Unchecked_Access,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-unchecked-conversion}@anchor{218} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-unchecked-conversion}@anchor{21a} @subsection No_Unchecked_Conversion @@ -13648,7 +13864,7 @@ occurrences of the Unchecked_Access attribute. dependences on the predefined generic function Unchecked_Conversion. @node No_Unchecked_Deallocation,No_Use_Of_Attribute,No_Unchecked_Conversion,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-unchecked-deallocation}@anchor{219} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-unchecked-deallocation}@anchor{21b} @subsection No_Unchecked_Deallocation @@ -13658,7 +13874,7 @@ dependences on the predefined generic function Unchecked_Conversion. dependences on the predefined generic procedure Unchecked_Deallocation. @node No_Use_Of_Attribute,No_Use_Of_Entity,No_Unchecked_Deallocation,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-use-of-attribute}@anchor{21a} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-use-of-attribute}@anchor{21c} @subsection No_Use_Of_Attribute @@ -13668,7 +13884,7 @@ dependences on the predefined generic procedure Unchecked_Deallocation. earlier versions of Ada. @node No_Use_Of_Entity,No_Use_Of_Pragma,No_Use_Of_Attribute,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-use-of-entity}@anchor{21b} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-use-of-entity}@anchor{21d} @subsection No_Use_Of_Entity @@ -13688,7 +13904,7 @@ No_Use_Of_Entity => Ada.Text_IO.Put_Line @end example @node No_Use_Of_Pragma,Pure_Barriers,No_Use_Of_Entity,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-use-of-pragma}@anchor{21c} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-use-of-pragma}@anchor{21e} @subsection No_Use_Of_Pragma @@ -13698,7 +13914,7 @@ No_Use_Of_Entity => Ada.Text_IO.Put_Line earlier versions of Ada. @node Pure_Barriers,Simple_Barriers,No_Use_Of_Pragma,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions pure-barriers}@anchor{21d} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions pure-barriers}@anchor{21f} @subsection Pure_Barriers @@ -13749,7 +13965,7 @@ but still ensures absence of side effects, exceptions, and recursion during the evaluation of the barriers. @node Simple_Barriers,Static_Priorities,Pure_Barriers,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions simple-barriers}@anchor{21e} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions simple-barriers}@anchor{220} @subsection Simple_Barriers @@ -13768,7 +13984,7 @@ compatibility purposes (and a warning will be generated for its use if warnings on obsolescent features are activated). @node Static_Priorities,Static_Storage_Size,Simple_Barriers,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions static-priorities}@anchor{21f} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions static-priorities}@anchor{221} @subsection Static_Priorities @@ -13779,7 +13995,7 @@ are static, and that there are no dependences on the package @code{Ada.Dynamic_Priorities}. @node Static_Storage_Size,,Static_Priorities,Partition-Wide Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions static-storage-size}@anchor{220} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions static-storage-size}@anchor{222} @subsection Static_Storage_Size @@ -13789,7 +14005,7 @@ are static, and that there are no dependences on the package in a Storage_Size pragma or attribute definition clause is static. @node Program Unit Level Restrictions,,Partition-Wide Restrictions,Standard and Implementation Defined Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions id3}@anchor{221}@anchor{gnat_rm/standard_and_implementation_defined_restrictions program-unit-level-restrictions}@anchor{222} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions id3}@anchor{223}@anchor{gnat_rm/standard_and_implementation_defined_restrictions program-unit-level-restrictions}@anchor{224} @section Program Unit Level Restrictions @@ -13820,7 +14036,7 @@ other compilation units in the partition. @end menu @node No_Elaboration_Code,No_Dynamic_Accessibility_Checks,,Program Unit Level Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-elaboration-code}@anchor{223} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-elaboration-code}@anchor{225} @subsection No_Elaboration_Code @@ -13876,7 +14092,7 @@ associated with the unit. This counter is typically used to check for access before elaboration and to control multiple elaboration attempts. @node No_Dynamic_Accessibility_Checks,No_Dynamic_Sized_Objects,No_Elaboration_Code,Program Unit Level Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dynamic-accessibility-checks}@anchor{224} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dynamic-accessibility-checks}@anchor{226} @subsection No_Dynamic_Accessibility_Checks @@ -13925,7 +14141,7 @@ In all other cases, the level of T is as defined by the existing rules of Ada. @end itemize @node No_Dynamic_Sized_Objects,No_Entry_Queue,No_Dynamic_Accessibility_Checks,Program Unit Level Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dynamic-sized-objects}@anchor{225} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-dynamic-sized-objects}@anchor{227} @subsection No_Dynamic_Sized_Objects @@ -13943,7 +14159,7 @@ access discriminants. It is often a good idea to combine this restriction with No_Secondary_Stack. @node No_Entry_Queue,No_Implementation_Aspect_Specifications,No_Dynamic_Sized_Objects,Program Unit Level Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-entry-queue}@anchor{226} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-entry-queue}@anchor{228} @subsection No_Entry_Queue @@ -13956,7 +14172,7 @@ checked at compile time. A program execution is erroneous if an attempt is made to queue a second task on such an entry. @node No_Implementation_Aspect_Specifications,No_Implementation_Attributes,No_Entry_Queue,Program Unit Level Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implementation-aspect-specifications}@anchor{227} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implementation-aspect-specifications}@anchor{229} @subsection No_Implementation_Aspect_Specifications @@ -13967,7 +14183,7 @@ GNAT-defined aspects are present. With this restriction, the only aspects that can be used are those defined in the Ada Reference Manual. @node No_Implementation_Attributes,No_Implementation_Identifiers,No_Implementation_Aspect_Specifications,Program Unit Level Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implementation-attributes}@anchor{228} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implementation-attributes}@anchor{22a} @subsection No_Implementation_Attributes @@ -13979,7 +14195,7 @@ attributes that can be used are those defined in the Ada Reference Manual. @node No_Implementation_Identifiers,No_Implementation_Pragmas,No_Implementation_Attributes,Program Unit Level Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implementation-identifiers}@anchor{229} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implementation-identifiers}@anchor{22b} @subsection No_Implementation_Identifiers @@ -13990,7 +14206,7 @@ implementation-defined identifiers (marked with pragma Implementation_Defined) occur within language-defined packages. @node No_Implementation_Pragmas,No_Implementation_Restrictions,No_Implementation_Identifiers,Program Unit Level Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implementation-pragmas}@anchor{22a} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implementation-pragmas}@anchor{22c} @subsection No_Implementation_Pragmas @@ -14001,7 +14217,7 @@ GNAT-defined pragmas are present. With this restriction, the only pragmas that can be used are those defined in the Ada Reference Manual. @node No_Implementation_Restrictions,No_Implementation_Units,No_Implementation_Pragmas,Program Unit Level Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implementation-restrictions}@anchor{22b} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implementation-restrictions}@anchor{22d} @subsection No_Implementation_Restrictions @@ -14013,7 +14229,7 @@ are present. With this restriction, the only other restriction identifiers that can be used are those defined in the Ada Reference Manual. @node No_Implementation_Units,No_Implicit_Aliasing,No_Implementation_Restrictions,Program Unit Level Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implementation-units}@anchor{22c} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implementation-units}@anchor{22e} @subsection No_Implementation_Units @@ -14024,7 +14240,7 @@ mention in the context clause of any implementation-defined descendants of packages Ada, Interfaces, or System. @node No_Implicit_Aliasing,No_Implicit_Loops,No_Implementation_Units,Program Unit Level Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-aliasing}@anchor{22d} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-aliasing}@anchor{22f} @subsection No_Implicit_Aliasing @@ -14039,7 +14255,7 @@ to be aliased, and in such cases, it can always be replaced by the standard attribute Unchecked_Access which is preferable. @node No_Implicit_Loops,No_Obsolescent_Features,No_Implicit_Aliasing,Program Unit Level Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-loops}@anchor{22e} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-implicit-loops}@anchor{230} @subsection No_Implicit_Loops @@ -14056,7 +14272,7 @@ arrays larger than about 5000 scalar components. Note that if this restriction is set in the spec of a package, it will not apply to its body. @node No_Obsolescent_Features,No_Wide_Characters,No_Implicit_Loops,Program Unit Level Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-obsolescent-features}@anchor{22f} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-obsolescent-features}@anchor{231} @subsection No_Obsolescent_Features @@ -14066,7 +14282,7 @@ is set in the spec of a package, it will not apply to its body. features are used, as defined in Annex J of the Ada Reference Manual. @node No_Wide_Characters,Static_Dispatch_Tables,No_Obsolescent_Features,Program Unit Level Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-wide-characters}@anchor{230} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions no-wide-characters}@anchor{232} @subsection No_Wide_Characters @@ -14080,7 +14296,7 @@ appear in the program (that is literals representing characters not in type @code{Character}). @node Static_Dispatch_Tables,SPARK_05,No_Wide_Characters,Program Unit Level Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions static-dispatch-tables}@anchor{231} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions static-dispatch-tables}@anchor{233} @subsection Static_Dispatch_Tables @@ -14090,7 +14306,7 @@ type @code{Character}). associated with dispatch tables can be placed in read-only memory. @node SPARK_05,,Static_Dispatch_Tables,Program Unit Level Restrictions -@anchor{gnat_rm/standard_and_implementation_defined_restrictions spark-05}@anchor{232} +@anchor{gnat_rm/standard_and_implementation_defined_restrictions spark-05}@anchor{234} @subsection SPARK_05 @@ -14113,7 +14329,7 @@ gnatprove -P project.gpr --mode=check_all @end example @node Implementation Advice,Implementation Defined Characteristics,Standard and Implementation Defined Restrictions,Top -@anchor{gnat_rm/implementation_advice doc}@anchor{233}@anchor{gnat_rm/implementation_advice id1}@anchor{234}@anchor{gnat_rm/implementation_advice implementation-advice}@anchor{a} +@anchor{gnat_rm/implementation_advice doc}@anchor{235}@anchor{gnat_rm/implementation_advice id1}@anchor{236}@anchor{gnat_rm/implementation_advice implementation-advice}@anchor{a} @chapter Implementation Advice @@ -14211,7 +14427,7 @@ case the text describes what GNAT does and why. @end menu @node RM 1 1 3 20 Error Detection,RM 1 1 3 31 Child Units,,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-1-1-3-20-error-detection}@anchor{235} +@anchor{gnat_rm/implementation_advice rm-1-1-3-20-error-detection}@anchor{237} @section RM 1.1.3(20): Error Detection @@ -14228,7 +14444,7 @@ or diagnosed at compile time. @geindex Child Units @node RM 1 1 3 31 Child Units,RM 1 1 5 12 Bounded Errors,RM 1 1 3 20 Error Detection,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-1-1-3-31-child-units}@anchor{236} +@anchor{gnat_rm/implementation_advice rm-1-1-3-31-child-units}@anchor{238} @section RM 1.1.3(31): Child Units @@ -14244,7 +14460,7 @@ Followed. @geindex Bounded errors @node RM 1 1 5 12 Bounded Errors,RM 2 8 16 Pragmas,RM 1 1 3 31 Child Units,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-1-1-5-12-bounded-errors}@anchor{237} +@anchor{gnat_rm/implementation_advice rm-1-1-5-12-bounded-errors}@anchor{239} @section RM 1.1.5(12): Bounded Errors @@ -14261,7 +14477,7 @@ runtime. @geindex Pragmas @node RM 2 8 16 Pragmas,RM 2 8 17-19 Pragmas,RM 1 1 5 12 Bounded Errors,Implementation Advice -@anchor{gnat_rm/implementation_advice id2}@anchor{238}@anchor{gnat_rm/implementation_advice rm-2-8-16-pragmas}@anchor{239} +@anchor{gnat_rm/implementation_advice id2}@anchor{23a}@anchor{gnat_rm/implementation_advice rm-2-8-16-pragmas}@anchor{23b} @section RM 2.8(16): Pragmas @@ -14374,7 +14590,7 @@ that this advice not be followed. For details see @ref{7,,Implementation Defined Pragmas}. @node RM 2 8 17-19 Pragmas,RM 3 5 2 5 Alternative Character Sets,RM 2 8 16 Pragmas,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-2-8-17-19-pragmas}@anchor{23a} +@anchor{gnat_rm/implementation_advice rm-2-8-17-19-pragmas}@anchor{23c} @section RM 2.8(17-19): Pragmas @@ -14395,14 +14611,14 @@ replacing @code{library_items}.” @end itemize @end quotation -See @ref{239,,RM 2.8(16); Pragmas}. +See @ref{23b,,RM 2.8(16); Pragmas}. @geindex Character Sets @geindex Alternative Character Sets @node RM 3 5 2 5 Alternative Character Sets,RM 3 5 4 28 Integer Types,RM 2 8 17-19 Pragmas,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-3-5-2-5-alternative-character-sets}@anchor{23b} +@anchor{gnat_rm/implementation_advice rm-3-5-2-5-alternative-character-sets}@anchor{23d} @section RM 3.5.2(5): Alternative Character Sets @@ -14430,7 +14646,7 @@ there is no such restriction. @geindex Integer types @node RM 3 5 4 28 Integer Types,RM 3 5 4 29 Integer Types,RM 3 5 2 5 Alternative Character Sets,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-3-5-4-28-integer-types}@anchor{23c} +@anchor{gnat_rm/implementation_advice rm-3-5-4-28-integer-types}@anchor{23e} @section RM 3.5.4(28): Integer Types @@ -14449,7 +14665,7 @@ are supported for convenient interface to C, and so that all hardware types of the machine are easily available. @node RM 3 5 4 29 Integer Types,RM 3 5 5 8 Enumeration Values,RM 3 5 4 28 Integer Types,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-3-5-4-29-integer-types}@anchor{23d} +@anchor{gnat_rm/implementation_advice rm-3-5-4-29-integer-types}@anchor{23f} @section RM 3.5.4(29): Integer Types @@ -14465,7 +14681,7 @@ Followed. @geindex Enumeration values @node RM 3 5 5 8 Enumeration Values,RM 3 5 7 17 Float Types,RM 3 5 4 29 Integer Types,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-3-5-5-8-enumeration-values}@anchor{23e} +@anchor{gnat_rm/implementation_advice rm-3-5-5-8-enumeration-values}@anchor{240} @section RM 3.5.5(8): Enumeration Values @@ -14485,7 +14701,7 @@ Followed. @geindex Float types @node RM 3 5 7 17 Float Types,RM 3 6 2 11 Multidimensional Arrays,RM 3 5 5 8 Enumeration Values,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-3-5-7-17-float-types}@anchor{23f} +@anchor{gnat_rm/implementation_advice rm-3-5-7-17-float-types}@anchor{241} @section RM 3.5.7(17): Float Types @@ -14515,7 +14731,7 @@ is a software rather than a hardware format. @geindex multidimensional @node RM 3 6 2 11 Multidimensional Arrays,RM 9 6 30-31 Duration’Small,RM 3 5 7 17 Float Types,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-3-6-2-11-multidimensional-arrays}@anchor{240} +@anchor{gnat_rm/implementation_advice rm-3-6-2-11-multidimensional-arrays}@anchor{242} @section RM 3.6.2(11): Multidimensional Arrays @@ -14533,7 +14749,7 @@ Followed. @geindex Duration'Small @node RM 9 6 30-31 Duration’Small,RM 10 2 1 12 Consistent Representation,RM 3 6 2 11 Multidimensional Arrays,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-9-6-30-31-duration-small}@anchor{241} +@anchor{gnat_rm/implementation_advice rm-9-6-30-31-duration-small}@anchor{243} @section RM 9.6(30-31): Duration’Small @@ -14554,7 +14770,7 @@ it need not be the same time base as used for @code{Calendar.Clock}.” Followed. @node RM 10 2 1 12 Consistent Representation,RM 11 4 1 19 Exception Information,RM 9 6 30-31 Duration’Small,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-10-2-1-12-consistent-representation}@anchor{242} +@anchor{gnat_rm/implementation_advice rm-10-2-1-12-consistent-representation}@anchor{244} @section RM 10.2.1(12): Consistent Representation @@ -14576,7 +14792,7 @@ advice without severely impacting efficiency of execution. @geindex Exception information @node RM 11 4 1 19 Exception Information,RM 11 5 28 Suppression of Checks,RM 10 2 1 12 Consistent Representation,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-11-4-1-19-exception-information}@anchor{243} +@anchor{gnat_rm/implementation_advice rm-11-4-1-19-exception-information}@anchor{245} @section RM 11.4.1(19): Exception Information @@ -14607,7 +14823,7 @@ Pragma @code{Discard_Names}. @geindex suppression of @node RM 11 5 28 Suppression of Checks,RM 13 1 21-24 Representation Clauses,RM 11 4 1 19 Exception Information,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-11-5-28-suppression-of-checks}@anchor{244} +@anchor{gnat_rm/implementation_advice rm-11-5-28-suppression-of-checks}@anchor{246} @section RM 11.5(28): Suppression of Checks @@ -14622,7 +14838,7 @@ Followed. @geindex Representation clauses @node RM 13 1 21-24 Representation Clauses,RM 13 2 6-8 Packed Types,RM 11 5 28 Suppression of Checks,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-13-1-21-24-representation-clauses}@anchor{245} +@anchor{gnat_rm/implementation_advice rm-13-1-21-24-representation-clauses}@anchor{247} @section RM 13.1 (21-24): Representation Clauses @@ -14674,7 +14890,7 @@ Followed. @geindex Packed types @node RM 13 2 6-8 Packed Types,RM 13 3 14-19 Address Clauses,RM 13 1 21-24 Representation Clauses,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-13-2-6-8-packed-types}@anchor{246} +@anchor{gnat_rm/implementation_advice rm-13-2-6-8-packed-types}@anchor{248} @section RM 13.2(6-8): Packed Types @@ -14705,7 +14921,7 @@ subcomponent of the packed type. @geindex Address clauses @node RM 13 3 14-19 Address Clauses,RM 13 3 29-35 Alignment Clauses,RM 13 2 6-8 Packed Types,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-13-3-14-19-address-clauses}@anchor{247} +@anchor{gnat_rm/implementation_advice rm-13-3-14-19-address-clauses}@anchor{249} @section RM 13.3(14-19): Address Clauses @@ -14758,7 +14974,7 @@ Followed. @geindex Alignment clauses @node RM 13 3 29-35 Alignment Clauses,RM 13 3 42-43 Size Clauses,RM 13 3 14-19 Address Clauses,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-13-3-29-35-alignment-clauses}@anchor{248} +@anchor{gnat_rm/implementation_advice rm-13-3-29-35-alignment-clauses}@anchor{24a} @section RM 13.3(29-35): Alignment Clauses @@ -14815,7 +15031,7 @@ Followed. @geindex Size clauses @node RM 13 3 42-43 Size Clauses,RM 13 3 50-56 Size Clauses,RM 13 3 29-35 Alignment Clauses,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-13-3-42-43-size-clauses}@anchor{249} +@anchor{gnat_rm/implementation_advice rm-13-3-42-43-size-clauses}@anchor{24b} @section RM 13.3(42-43): Size Clauses @@ -14833,7 +15049,7 @@ object’s @code{Alignment} (if the @code{Alignment} is nonzero).” Followed. @node RM 13 3 50-56 Size Clauses,RM 13 3 71-73 Component Size Clauses,RM 13 3 42-43 Size Clauses,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-13-3-50-56-size-clauses}@anchor{24a} +@anchor{gnat_rm/implementation_advice rm-13-3-50-56-size-clauses}@anchor{24c} @section RM 13.3(50-56): Size Clauses @@ -14884,7 +15100,7 @@ Followed. @geindex Component_Size clauses @node RM 13 3 71-73 Component Size Clauses,RM 13 4 9-10 Enumeration Representation Clauses,RM 13 3 50-56 Size Clauses,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-13-3-71-73-component-size-clauses}@anchor{24b} +@anchor{gnat_rm/implementation_advice rm-13-3-71-73-component-size-clauses}@anchor{24d} @section RM 13.3(71-73): Component Size Clauses @@ -14918,7 +15134,7 @@ Followed. @geindex enumeration @node RM 13 4 9-10 Enumeration Representation Clauses,RM 13 5 1 17-22 Record Representation Clauses,RM 13 3 71-73 Component Size Clauses,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-13-4-9-10-enumeration-representation-clauses}@anchor{24c} +@anchor{gnat_rm/implementation_advice rm-13-4-9-10-enumeration-representation-clauses}@anchor{24e} @section RM 13.4(9-10): Enumeration Representation Clauses @@ -14940,7 +15156,7 @@ Followed. @geindex records @node RM 13 5 1 17-22 Record Representation Clauses,RM 13 5 2 5 Storage Place Attributes,RM 13 4 9-10 Enumeration Representation Clauses,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-13-5-1-17-22-record-representation-clauses}@anchor{24d} +@anchor{gnat_rm/implementation_advice rm-13-5-1-17-22-record-representation-clauses}@anchor{24f} @section RM 13.5.1(17-22): Record Representation Clauses @@ -15000,7 +15216,7 @@ and all mentioned features are implemented. @geindex Storage place attributes @node RM 13 5 2 5 Storage Place Attributes,RM 13 5 3 7-8 Bit Ordering,RM 13 5 1 17-22 Record Representation Clauses,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-13-5-2-5-storage-place-attributes}@anchor{24e} +@anchor{gnat_rm/implementation_advice rm-13-5-2-5-storage-place-attributes}@anchor{250} @section RM 13.5.2(5): Storage Place Attributes @@ -15020,7 +15236,7 @@ Followed. There are no such components in GNAT. @geindex Bit ordering @node RM 13 5 3 7-8 Bit Ordering,RM 13 7 37 Address as Private,RM 13 5 2 5 Storage Place Attributes,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-13-5-3-7-8-bit-ordering}@anchor{24f} +@anchor{gnat_rm/implementation_advice rm-13-5-3-7-8-bit-ordering}@anchor{251} @section RM 13.5.3(7-8): Bit Ordering @@ -15038,7 +15254,7 @@ Followed. @geindex as private type @node RM 13 7 37 Address as Private,RM 13 7 1 16 Address Operations,RM 13 5 3 7-8 Bit Ordering,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-13-7-37-address-as-private}@anchor{250} +@anchor{gnat_rm/implementation_advice rm-13-7-37-address-as-private}@anchor{252} @section RM 13.7(37): Address as Private @@ -15056,7 +15272,7 @@ Followed. @geindex operations of @node RM 13 7 1 16 Address Operations,RM 13 9 14-17 Unchecked Conversion,RM 13 7 37 Address as Private,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-13-7-1-16-address-operations}@anchor{251} +@anchor{gnat_rm/implementation_advice rm-13-7-1-16-address-operations}@anchor{253} @section RM 13.7.1(16): Address Operations @@ -15074,7 +15290,7 @@ operation raises @code{Program_Error}, since all operations make sense. @geindex Unchecked conversion @node RM 13 9 14-17 Unchecked Conversion,RM 13 11 23-25 Implicit Heap Usage,RM 13 7 1 16 Address Operations,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-13-9-14-17-unchecked-conversion}@anchor{252} +@anchor{gnat_rm/implementation_advice rm-13-9-14-17-unchecked-conversion}@anchor{254} @section RM 13.9(14-17): Unchecked Conversion @@ -15118,7 +15334,7 @@ Followed. @geindex implicit @node RM 13 11 23-25 Implicit Heap Usage,RM 13 11 2 17 Unchecked Deallocation,RM 13 9 14-17 Unchecked Conversion,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-13-11-23-25-implicit-heap-usage}@anchor{253} +@anchor{gnat_rm/implementation_advice rm-13-11-23-25-implicit-heap-usage}@anchor{255} @section RM 13.11(23-25): Implicit Heap Usage @@ -15169,7 +15385,7 @@ Followed. @geindex Unchecked deallocation @node RM 13 11 2 17 Unchecked Deallocation,RM 13 13 2 1 6 Stream Oriented Attributes,RM 13 11 23-25 Implicit Heap Usage,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-13-11-2-17-unchecked-deallocation}@anchor{254} +@anchor{gnat_rm/implementation_advice rm-13-11-2-17-unchecked-deallocation}@anchor{256} @section RM 13.11.2(17): Unchecked Deallocation @@ -15184,7 +15400,7 @@ Followed. @geindex Stream oriented attributes @node RM 13 13 2 1 6 Stream Oriented Attributes,RM A 1 52 Names of Predefined Numeric Types,RM 13 11 2 17 Unchecked Deallocation,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-13-13-2-1-6-stream-oriented-attributes}@anchor{255} +@anchor{gnat_rm/implementation_advice rm-13-13-2-1-6-stream-oriented-attributes}@anchor{257} @section RM 13.13.2(1.6): Stream Oriented Attributes @@ -15215,7 +15431,7 @@ scalar types. This XDR alternative can be enabled via the binder switch -xdr. @geindex Stream oriented attributes @node RM A 1 52 Names of Predefined Numeric Types,RM A 3 2 49 Ada Characters Handling,RM 13 13 2 1 6 Stream Oriented Attributes,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-a-1-52-names-of-predefined-numeric-types}@anchor{256} +@anchor{gnat_rm/implementation_advice rm-a-1-52-names-of-predefined-numeric-types}@anchor{258} @section RM A.1(52): Names of Predefined Numeric Types @@ -15233,7 +15449,7 @@ Followed. @geindex Ada.Characters.Handling @node RM A 3 2 49 Ada Characters Handling,RM A 4 4 106 Bounded-Length String Handling,RM A 1 52 Names of Predefined Numeric Types,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-a-3-2-49-ada-characters-handling}@anchor{257} +@anchor{gnat_rm/implementation_advice rm-a-3-2-49-ada-characters-handling}@anchor{259} @section RM A.3.2(49): @code{Ada.Characters.Handling} @@ -15250,7 +15466,7 @@ Followed. GNAT provides no such localized definitions. @geindex Bounded-length strings @node RM A 4 4 106 Bounded-Length String Handling,RM A 5 2 46-47 Random Number Generation,RM A 3 2 49 Ada Characters Handling,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-a-4-4-106-bounded-length-string-handling}@anchor{258} +@anchor{gnat_rm/implementation_advice rm-a-4-4-106-bounded-length-string-handling}@anchor{25a} @section RM A.4.4(106): Bounded-Length String Handling @@ -15265,7 +15481,7 @@ Followed. No implicit pointers or dynamic allocation are used. @geindex Random number generation @node RM A 5 2 46-47 Random Number Generation,RM A 10 7 23 Get_Immediate,RM A 4 4 106 Bounded-Length String Handling,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-a-5-2-46-47-random-number-generation}@anchor{259} +@anchor{gnat_rm/implementation_advice rm-a-5-2-46-47-random-number-generation}@anchor{25b} @section RM A.5.2(46-47): Random Number Generation @@ -15294,7 +15510,7 @@ condition here to hold true. @geindex Get_Immediate @node RM A 10 7 23 Get_Immediate,RM A 18 Containers,RM A 5 2 46-47 Random Number Generation,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-a-10-7-23-get-immediate}@anchor{25a} +@anchor{gnat_rm/implementation_advice rm-a-10-7-23-get-immediate}@anchor{25c} @section RM A.10.7(23): @code{Get_Immediate} @@ -15318,7 +15534,7 @@ this functionality. @geindex Containers @node RM A 18 Containers,RM B 1 39-41 Pragma Export,RM A 10 7 23 Get_Immediate,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-a-18-containers}@anchor{25b} +@anchor{gnat_rm/implementation_advice rm-a-18-containers}@anchor{25d} @section RM A.18: @code{Containers} @@ -15339,7 +15555,7 @@ follow the implementation advice. @geindex Export @node RM B 1 39-41 Pragma Export,RM B 2 12-13 Package Interfaces,RM A 18 Containers,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-b-1-39-41-pragma-export}@anchor{25c} +@anchor{gnat_rm/implementation_advice rm-b-1-39-41-pragma-export}@anchor{25e} @section RM B.1(39-41): Pragma @code{Export} @@ -15387,7 +15603,7 @@ Followed. @geindex Interfaces @node RM B 2 12-13 Package Interfaces,RM B 3 63-71 Interfacing with C,RM B 1 39-41 Pragma Export,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-b-2-12-13-package-interfaces}@anchor{25d} +@anchor{gnat_rm/implementation_advice rm-b-2-12-13-package-interfaces}@anchor{25f} @section RM B.2(12-13): Package @code{Interfaces} @@ -15417,7 +15633,7 @@ Followed. GNAT provides all the packages described in this section. @geindex interfacing with @node RM B 3 63-71 Interfacing with C,RM B 4 95-98 Interfacing with COBOL,RM B 2 12-13 Package Interfaces,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-b-3-63-71-interfacing-with-c}@anchor{25e} +@anchor{gnat_rm/implementation_advice rm-b-3-63-71-interfacing-with-c}@anchor{260} @section RM B.3(63-71): Interfacing with C @@ -15505,7 +15721,7 @@ Followed. @geindex interfacing with @node RM B 4 95-98 Interfacing with COBOL,RM B 5 22-26 Interfacing with Fortran,RM B 3 63-71 Interfacing with C,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-b-4-95-98-interfacing-with-cobol}@anchor{25f} +@anchor{gnat_rm/implementation_advice rm-b-4-95-98-interfacing-with-cobol}@anchor{261} @section RM B.4(95-98): Interfacing with COBOL @@ -15546,7 +15762,7 @@ Followed. @geindex interfacing with @node RM B 5 22-26 Interfacing with Fortran,RM C 1 3-5 Access to Machine Operations,RM B 4 95-98 Interfacing with COBOL,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-b-5-22-26-interfacing-with-fortran}@anchor{260} +@anchor{gnat_rm/implementation_advice rm-b-5-22-26-interfacing-with-fortran}@anchor{262} @section RM B.5(22-26): Interfacing with Fortran @@ -15597,7 +15813,7 @@ Followed. @geindex Machine operations @node RM C 1 3-5 Access to Machine Operations,RM C 1 10-16 Access to Machine Operations,RM B 5 22-26 Interfacing with Fortran,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-c-1-3-5-access-to-machine-operations}@anchor{261} +@anchor{gnat_rm/implementation_advice rm-c-1-3-5-access-to-machine-operations}@anchor{263} @section RM C.1(3-5): Access to Machine Operations @@ -15632,7 +15848,7 @@ object that is specified as exported.” Followed. @node RM C 1 10-16 Access to Machine Operations,RM C 3 28 Interrupt Support,RM C 1 3-5 Access to Machine Operations,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-c-1-10-16-access-to-machine-operations}@anchor{262} +@anchor{gnat_rm/implementation_advice rm-c-1-10-16-access-to-machine-operations}@anchor{264} @section RM C.1(10-16): Access to Machine Operations @@ -15693,7 +15909,7 @@ Followed on any target supporting such operations. @geindex Interrupt support @node RM C 3 28 Interrupt Support,RM C 3 1 20-21 Protected Procedure Handlers,RM C 1 10-16 Access to Machine Operations,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-c-3-28-interrupt-support}@anchor{263} +@anchor{gnat_rm/implementation_advice rm-c-3-28-interrupt-support}@anchor{265} @section RM C.3(28): Interrupt Support @@ -15711,7 +15927,7 @@ of interrupt blocking. @geindex Protected procedure handlers @node RM C 3 1 20-21 Protected Procedure Handlers,RM C 3 2 25 Package Interrupts,RM C 3 28 Interrupt Support,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-c-3-1-20-21-protected-procedure-handlers}@anchor{264} +@anchor{gnat_rm/implementation_advice rm-c-3-1-20-21-protected-procedure-handlers}@anchor{266} @section RM C.3.1(20-21): Protected Procedure Handlers @@ -15737,7 +15953,7 @@ Followed. Compile time warnings are given when possible. @geindex Interrupts @node RM C 3 2 25 Package Interrupts,RM C 4 14 Pre-elaboration Requirements,RM C 3 1 20-21 Protected Procedure Handlers,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-c-3-2-25-package-interrupts}@anchor{265} +@anchor{gnat_rm/implementation_advice rm-c-3-2-25-package-interrupts}@anchor{267} @section RM C.3.2(25): Package @code{Interrupts} @@ -15755,7 +15971,7 @@ Followed. @geindex Pre-elaboration requirements @node RM C 4 14 Pre-elaboration Requirements,RM C 5 8 Pragma Discard_Names,RM C 3 2 25 Package Interrupts,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-c-4-14-pre-elaboration-requirements}@anchor{266} +@anchor{gnat_rm/implementation_advice rm-c-4-14-pre-elaboration-requirements}@anchor{268} @section RM C.4(14): Pre-elaboration Requirements @@ -15771,7 +15987,7 @@ Followed. Executable code is generated in some cases, e.g., loops to initialize large arrays. @node RM C 5 8 Pragma Discard_Names,RM C 7 2 30 The Package Task_Attributes,RM C 4 14 Pre-elaboration Requirements,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-c-5-8-pragma-discard-names}@anchor{267} +@anchor{gnat_rm/implementation_advice rm-c-5-8-pragma-discard-names}@anchor{269} @section RM C.5(8): Pragma @code{Discard_Names} @@ -15789,7 +16005,7 @@ Followed. @geindex Task_Attributes @node RM C 7 2 30 The Package Task_Attributes,RM D 3 17 Locking Policies,RM C 5 8 Pragma Discard_Names,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-c-7-2-30-the-package-task-attributes}@anchor{268} +@anchor{gnat_rm/implementation_advice rm-c-7-2-30-the-package-task-attributes}@anchor{26a} @section RM C.7.2(30): The Package Task_Attributes @@ -15810,7 +16026,7 @@ Not followed. This implementation is not targeted to such a domain. @geindex Locking Policies @node RM D 3 17 Locking Policies,RM D 4 16 Entry Queuing Policies,RM C 7 2 30 The Package Task_Attributes,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-d-3-17-locking-policies}@anchor{269} +@anchor{gnat_rm/implementation_advice rm-d-3-17-locking-policies}@anchor{26b} @section RM D.3(17): Locking Policies @@ -15827,7 +16043,7 @@ whose names (@code{Inheritance_Locking} and @geindex Entry queuing policies @node RM D 4 16 Entry Queuing Policies,RM D 6 9-10 Preemptive Abort,RM D 3 17 Locking Policies,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-d-4-16-entry-queuing-policies}@anchor{26a} +@anchor{gnat_rm/implementation_advice rm-d-4-16-entry-queuing-policies}@anchor{26c} @section RM D.4(16): Entry Queuing Policies @@ -15842,7 +16058,7 @@ Followed. No such implementation-defined queuing policies exist. @geindex Preemptive abort @node RM D 6 9-10 Preemptive Abort,RM D 7 21 Tasking Restrictions,RM D 4 16 Entry Queuing Policies,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-d-6-9-10-preemptive-abort}@anchor{26b} +@anchor{gnat_rm/implementation_advice rm-d-6-9-10-preemptive-abort}@anchor{26d} @section RM D.6(9-10): Preemptive Abort @@ -15868,7 +16084,7 @@ Followed. @geindex Tasking restrictions @node RM D 7 21 Tasking Restrictions,RM D 8 47-49 Monotonic Time,RM D 6 9-10 Preemptive Abort,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-d-7-21-tasking-restrictions}@anchor{26c} +@anchor{gnat_rm/implementation_advice rm-d-7-21-tasking-restrictions}@anchor{26e} @section RM D.7(21): Tasking Restrictions @@ -15887,7 +16103,7 @@ pragma @code{Profile (Restricted)} for more details. @geindex monotonic @node RM D 8 47-49 Monotonic Time,RM E 5 28-29 Partition Communication Subsystem,RM D 7 21 Tasking Restrictions,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-d-8-47-49-monotonic-time}@anchor{26d} +@anchor{gnat_rm/implementation_advice rm-d-8-47-49-monotonic-time}@anchor{26f} @section RM D.8(47-49): Monotonic Time @@ -15922,7 +16138,7 @@ Followed. @geindex PCS @node RM E 5 28-29 Partition Communication Subsystem,RM F 7 COBOL Support,RM D 8 47-49 Monotonic Time,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-e-5-28-29-partition-communication-subsystem}@anchor{26e} +@anchor{gnat_rm/implementation_advice rm-e-5-28-29-partition-communication-subsystem}@anchor{270} @section RM E.5(28-29): Partition Communication Subsystem @@ -15934,7 +16150,8 @@ should allow them to block until the corresponding subprogram body returns.” @end quotation -A separately supplied PCS that can be used with GNAT when combined with the PolyORB product. +A separately supplied PCS that can be used with GNAT when combined with the PolyORB product (NB! See the note in @ref{271,,PolyORB} regarding the lifetime +of this product). @quotation @@ -15946,7 +16163,7 @@ write the @code{Item} into the stream.” @geindex COBOL support @node RM F 7 COBOL Support,RM F 1 2 Decimal Radix Support,RM E 5 28-29 Partition Communication Subsystem,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-f-7-cobol-support}@anchor{26f} +@anchor{gnat_rm/implementation_advice rm-f-7-cobol-support}@anchor{272} @section RM F(7): COBOL Support @@ -15966,7 +16183,7 @@ Followed. @geindex Decimal radix support @node RM F 1 2 Decimal Radix Support,RM G Numerics,RM F 7 COBOL Support,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-f-1-2-decimal-radix-support}@anchor{270} +@anchor{gnat_rm/implementation_advice rm-f-1-2-decimal-radix-support}@anchor{273} @section RM F.1(2): Decimal Radix Support @@ -15982,7 +16199,7 @@ representations. @geindex Numerics @node RM G Numerics,RM G 1 1 56-58 Complex Types,RM F 1 2 Decimal Radix Support,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-g-numerics}@anchor{271} +@anchor{gnat_rm/implementation_advice rm-g-numerics}@anchor{274} @section RM G: Numerics @@ -16002,7 +16219,7 @@ Followed. @geindex Complex types @node RM G 1 1 56-58 Complex Types,RM G 1 2 49 Complex Elementary Functions,RM G Numerics,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-g-1-1-56-58-complex-types}@anchor{272} +@anchor{gnat_rm/implementation_advice rm-g-1-1-56-58-complex-types}@anchor{275} @section RM G.1.1(56-58): Complex Types @@ -16064,7 +16281,7 @@ Followed. @geindex Complex elementary functions @node RM G 1 2 49 Complex Elementary Functions,RM G 2 4 19 Accuracy Requirements,RM G 1 1 56-58 Complex Types,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-g-1-2-49-complex-elementary-functions}@anchor{273} +@anchor{gnat_rm/implementation_advice rm-g-1-2-49-complex-elementary-functions}@anchor{276} @section RM G.1.2(49): Complex Elementary Functions @@ -16086,7 +16303,7 @@ Followed. @geindex Accuracy requirements @node RM G 2 4 19 Accuracy Requirements,RM G 2 6 15 Complex Arithmetic Accuracy,RM G 1 2 49 Complex Elementary Functions,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-g-2-4-19-accuracy-requirements}@anchor{274} +@anchor{gnat_rm/implementation_advice rm-g-2-4-19-accuracy-requirements}@anchor{277} @section RM G.2.4(19): Accuracy Requirements @@ -16110,7 +16327,7 @@ Followed. @geindex complex arithmetic @node RM G 2 6 15 Complex Arithmetic Accuracy,RM H 6 15/2 Pragma Partition_Elaboration_Policy,RM G 2 4 19 Accuracy Requirements,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-g-2-6-15-complex-arithmetic-accuracy}@anchor{275} +@anchor{gnat_rm/implementation_advice rm-g-2-6-15-complex-arithmetic-accuracy}@anchor{278} @section RM G.2.6(15): Complex Arithmetic Accuracy @@ -16128,7 +16345,7 @@ Followed. @geindex Sequential elaboration policy @node RM H 6 15/2 Pragma Partition_Elaboration_Policy,,RM G 2 6 15 Complex Arithmetic Accuracy,Implementation Advice -@anchor{gnat_rm/implementation_advice rm-h-6-15-2-pragma-partition-elaboration-policy}@anchor{276} +@anchor{gnat_rm/implementation_advice rm-h-6-15-2-pragma-partition-elaboration-policy}@anchor{279} @section RM H.6(15/2): Pragma Partition_Elaboration_Policy @@ -16143,7 +16360,7 @@ immediately terminated.” Not followed. @node Implementation Defined Characteristics,Intrinsic Subprograms,Implementation Advice,Top -@anchor{gnat_rm/implementation_defined_characteristics doc}@anchor{277}@anchor{gnat_rm/implementation_defined_characteristics id1}@anchor{278}@anchor{gnat_rm/implementation_defined_characteristics implementation-defined-characteristics}@anchor{b} +@anchor{gnat_rm/implementation_defined_characteristics doc}@anchor{27a}@anchor{gnat_rm/implementation_defined_characteristics id1}@anchor{27b}@anchor{gnat_rm/implementation_defined_characteristics implementation-defined-characteristics}@anchor{b} @chapter Implementation Defined Characteristics @@ -16784,7 +17001,8 @@ may have been set by a call to @code{Ada.Command_Line.Set_Exit_Status}). “The mechanisms for building and running partitions. See 10.2(24).” @end itemize -GNAT itself supports programs with only a single partition. The PolyORB product (which also includes an implementation of the PCS) provides a completely flexible method for building and running programs consisting of multiple partitions. See the separate PolyORB user guide for details. +GNAT itself supports programs with only a single partition. The PolyORB product (which also includes an implementation of the PCS) provides a completely flexible method for building and running programs consisting of multiple partitions. `NB!' See the note in @ref{271,,PolyORB} regarding the lifetime +of this product. @itemize * @@ -16805,8 +17023,7 @@ implementation. See 10.2(28).” @end itemize Passive partitions are supported on targets where shared memory is -provided by the operating system. See the PolyORB user guide for -further details. +provided by the operating system. `NB!' See the note in @ref{271,,PolyORB} regarding the lifetime of this product. @itemize * @@ -16989,7 +17206,7 @@ See separate section on data representations. such aspects and the legality rules for such aspects. See 13.1.1(38).” @end itemize -See @ref{130,,Implementation Defined Aspects}. +See @ref{131,,Implementation Defined Aspects}. @itemize * @@ -17433,7 +17650,7 @@ When the @code{Pattern} parameter is not the null string, it is interpreted according to the syntax of regular expressions as defined in the @code{GNAT.Regexp} package. -See @ref{279,,GNAT.Regexp (g-regexp.ads)}. +See @ref{27c,,GNAT.Regexp (g-regexp.ads)}. @itemize * @@ -18192,7 +18409,7 @@ programs. See E(5).” @end itemize The PolyORB product provides means creating and executing -distributed programs. See the PolyORB user guide for further details. +distributed programs. `NB!' See the note in @ref{271,,PolyORB} regarding the lifetime of this product. @itemize * @@ -18203,6 +18420,8 @@ inaccessible. See E.1(7).” @end itemize See the PolyORB user guide for full details on such events. +`NB!' Consider the note in @ref{271,,PolyORB} regarding the lifetime +of this product. @itemize * @@ -18213,7 +18432,7 @@ shared resources between partitions in certain cases. See E.1(11).” @end itemize See the PolyORB user guide for full details on these aspects of -multi-partition execution. +multi-partition execution. `NB!' Consider the note in @ref{271,,PolyORB} regarding the lifetime of this product. @itemize * @@ -18224,7 +18443,7 @@ immediately aborted as a result of cancellation. See E.4(13).” @end itemize See the PolyORB user guide for details on the effect of abort in -a distributed application. +a distributed application. `NB!' Consider the note in @ref{271,,PolyORB} regarding the lifetime of this product. @itemize * @@ -18243,7 +18462,7 @@ System.RPC.Partition_ID’Last is Integer’Last. See source file @code{s-rpc.ad @end itemize See the PolyORB user guide for a full description of all -implementation defined interfaces. +implementation defined interfaces. `NB!' See the note in @ref{271,,PolyORB} regarding the lifetime of this product. @itemize * @@ -18531,7 +18750,7 @@ Information on those subjects is not yet available. Execution is erroneous in that case. @node Intrinsic Subprograms,Representation Clauses and Pragmas,Implementation Defined Characteristics,Top -@anchor{gnat_rm/intrinsic_subprograms doc}@anchor{27a}@anchor{gnat_rm/intrinsic_subprograms id1}@anchor{27b}@anchor{gnat_rm/intrinsic_subprograms intrinsic-subprograms}@anchor{c} +@anchor{gnat_rm/intrinsic_subprograms doc}@anchor{27d}@anchor{gnat_rm/intrinsic_subprograms id1}@anchor{27e}@anchor{gnat_rm/intrinsic_subprograms intrinsic-subprograms}@anchor{c} @chapter Intrinsic Subprograms @@ -18569,7 +18788,7 @@ Ada standard does not require Ada compilers to implement this feature. @end menu @node Intrinsic Operators,Compilation_ISO_Date,,Intrinsic Subprograms -@anchor{gnat_rm/intrinsic_subprograms id2}@anchor{27c}@anchor{gnat_rm/intrinsic_subprograms intrinsic-operators}@anchor{27d} +@anchor{gnat_rm/intrinsic_subprograms id2}@anchor{27f}@anchor{gnat_rm/intrinsic_subprograms intrinsic-operators}@anchor{280} @section Intrinsic Operators @@ -18600,7 +18819,7 @@ It is also possible to specify such operators for private types, if the full views are appropriate arithmetic types. @node Compilation_ISO_Date,Compilation_Date,Intrinsic Operators,Intrinsic Subprograms -@anchor{gnat_rm/intrinsic_subprograms compilation-iso-date}@anchor{27e}@anchor{gnat_rm/intrinsic_subprograms id3}@anchor{27f} +@anchor{gnat_rm/intrinsic_subprograms compilation-iso-date}@anchor{281}@anchor{gnat_rm/intrinsic_subprograms id3}@anchor{282} @section Compilation_ISO_Date @@ -18614,7 +18833,7 @@ application program should simply call the function the current compilation (in local time format YYYY-MM-DD). @node Compilation_Date,Compilation_Time,Compilation_ISO_Date,Intrinsic Subprograms -@anchor{gnat_rm/intrinsic_subprograms compilation-date}@anchor{280}@anchor{gnat_rm/intrinsic_subprograms id4}@anchor{281} +@anchor{gnat_rm/intrinsic_subprograms compilation-date}@anchor{283}@anchor{gnat_rm/intrinsic_subprograms id4}@anchor{284} @section Compilation_Date @@ -18624,7 +18843,7 @@ Same as Compilation_ISO_Date, except the string is in the form MMM DD YYYY. @node Compilation_Time,Enclosing_Entity,Compilation_Date,Intrinsic Subprograms -@anchor{gnat_rm/intrinsic_subprograms compilation-time}@anchor{282}@anchor{gnat_rm/intrinsic_subprograms id5}@anchor{283} +@anchor{gnat_rm/intrinsic_subprograms compilation-time}@anchor{285}@anchor{gnat_rm/intrinsic_subprograms id5}@anchor{286} @section Compilation_Time @@ -18638,7 +18857,7 @@ application program should simply call the function the current compilation (in local time format HH:MM:SS). @node Enclosing_Entity,Exception_Information,Compilation_Time,Intrinsic Subprograms -@anchor{gnat_rm/intrinsic_subprograms enclosing-entity}@anchor{284}@anchor{gnat_rm/intrinsic_subprograms id6}@anchor{285} +@anchor{gnat_rm/intrinsic_subprograms enclosing-entity}@anchor{287}@anchor{gnat_rm/intrinsic_subprograms id6}@anchor{288} @section Enclosing_Entity @@ -18652,7 +18871,7 @@ application program should simply call the function the current subprogram, package, task, entry, or protected subprogram. @node Exception_Information,Exception_Message,Enclosing_Entity,Intrinsic Subprograms -@anchor{gnat_rm/intrinsic_subprograms exception-information}@anchor{286}@anchor{gnat_rm/intrinsic_subprograms id7}@anchor{287} +@anchor{gnat_rm/intrinsic_subprograms exception-information}@anchor{289}@anchor{gnat_rm/intrinsic_subprograms id7}@anchor{28a} @section Exception_Information @@ -18666,7 +18885,7 @@ so an application program should simply call the function the exception information associated with the current exception. @node Exception_Message,Exception_Name,Exception_Information,Intrinsic Subprograms -@anchor{gnat_rm/intrinsic_subprograms exception-message}@anchor{288}@anchor{gnat_rm/intrinsic_subprograms id8}@anchor{289} +@anchor{gnat_rm/intrinsic_subprograms exception-message}@anchor{28b}@anchor{gnat_rm/intrinsic_subprograms id8}@anchor{28c} @section Exception_Message @@ -18680,7 +18899,7 @@ so an application program should simply call the function the message associated with the current exception. @node Exception_Name,File,Exception_Message,Intrinsic Subprograms -@anchor{gnat_rm/intrinsic_subprograms exception-name}@anchor{28a}@anchor{gnat_rm/intrinsic_subprograms id9}@anchor{28b} +@anchor{gnat_rm/intrinsic_subprograms exception-name}@anchor{28d}@anchor{gnat_rm/intrinsic_subprograms id9}@anchor{28e} @section Exception_Name @@ -18694,7 +18913,7 @@ so an application program should simply call the function the name of the current exception. @node File,Line,Exception_Name,Intrinsic Subprograms -@anchor{gnat_rm/intrinsic_subprograms file}@anchor{28c}@anchor{gnat_rm/intrinsic_subprograms id10}@anchor{28d} +@anchor{gnat_rm/intrinsic_subprograms file}@anchor{28f}@anchor{gnat_rm/intrinsic_subprograms id10}@anchor{290} @section File @@ -18708,7 +18927,7 @@ application program should simply call the function file. @node Line,Shifts and Rotates,File,Intrinsic Subprograms -@anchor{gnat_rm/intrinsic_subprograms id11}@anchor{28e}@anchor{gnat_rm/intrinsic_subprograms line}@anchor{28f} +@anchor{gnat_rm/intrinsic_subprograms id11}@anchor{291}@anchor{gnat_rm/intrinsic_subprograms line}@anchor{292} @section Line @@ -18722,7 +18941,7 @@ application program should simply call the function source line. @node Shifts and Rotates,Source_Location,Line,Intrinsic Subprograms -@anchor{gnat_rm/intrinsic_subprograms id12}@anchor{290}@anchor{gnat_rm/intrinsic_subprograms shifts-and-rotates}@anchor{291} +@anchor{gnat_rm/intrinsic_subprograms id12}@anchor{293}@anchor{gnat_rm/intrinsic_subprograms shifts-and-rotates}@anchor{294} @section Shifts and Rotates @@ -18765,7 +18984,7 @@ corresponding operator for modular type. In particular, shifting a negative number may change its sign bit to positive. @node Source_Location,,Shifts and Rotates,Intrinsic Subprograms -@anchor{gnat_rm/intrinsic_subprograms id13}@anchor{292}@anchor{gnat_rm/intrinsic_subprograms source-location}@anchor{293} +@anchor{gnat_rm/intrinsic_subprograms id13}@anchor{295}@anchor{gnat_rm/intrinsic_subprograms source-location}@anchor{296} @section Source_Location @@ -18779,7 +18998,7 @@ application program should simply call the function source file location. @node Representation Clauses and Pragmas,Standard Library Routines,Intrinsic Subprograms,Top -@anchor{gnat_rm/representation_clauses_and_pragmas doc}@anchor{294}@anchor{gnat_rm/representation_clauses_and_pragmas id1}@anchor{295}@anchor{gnat_rm/representation_clauses_and_pragmas representation-clauses-and-pragmas}@anchor{d} +@anchor{gnat_rm/representation_clauses_and_pragmas doc}@anchor{297}@anchor{gnat_rm/representation_clauses_and_pragmas id1}@anchor{298}@anchor{gnat_rm/representation_clauses_and_pragmas representation-clauses-and-pragmas}@anchor{d} @chapter Representation Clauses and Pragmas @@ -18825,7 +19044,7 @@ and this section describes the additional capabilities provided. @end menu @node Alignment Clauses,Size Clauses,,Representation Clauses and Pragmas -@anchor{gnat_rm/representation_clauses_and_pragmas alignment-clauses}@anchor{296}@anchor{gnat_rm/representation_clauses_and_pragmas id2}@anchor{297} +@anchor{gnat_rm/representation_clauses_and_pragmas alignment-clauses}@anchor{299}@anchor{gnat_rm/representation_clauses_and_pragmas id2}@anchor{29a} @section Alignment Clauses @@ -18847,7 +19066,7 @@ For elementary types, the alignment is the minimum of the actual size of objects of the type divided by @code{Storage_Unit}, and the maximum alignment supported by the target. (This maximum alignment is given by the GNAT-specific attribute -@code{Standard'Maximum_Alignment}; see @ref{1a6,,Attribute Maximum_Alignment}.) +@code{Standard'Maximum_Alignment}; see @ref{1a8,,Attribute Maximum_Alignment}.) @geindex Maximum_Alignment attribute @@ -18956,7 +19175,7 @@ assumption is non-portable, and other compilers may choose different alignments for the subtype @code{RS}. @node Size Clauses,Storage_Size Clauses,Alignment Clauses,Representation Clauses and Pragmas -@anchor{gnat_rm/representation_clauses_and_pragmas id3}@anchor{298}@anchor{gnat_rm/representation_clauses_and_pragmas size-clauses}@anchor{299} +@anchor{gnat_rm/representation_clauses_and_pragmas id3}@anchor{29b}@anchor{gnat_rm/representation_clauses_and_pragmas size-clauses}@anchor{29c} @section Size Clauses @@ -19033,7 +19252,7 @@ if it is known that a Size value can be accommodated in an object of type Integer. @node Storage_Size Clauses,Size of Variant Record Objects,Size Clauses,Representation Clauses and Pragmas -@anchor{gnat_rm/representation_clauses_and_pragmas id4}@anchor{29a}@anchor{gnat_rm/representation_clauses_and_pragmas storage-size-clauses}@anchor{29b} +@anchor{gnat_rm/representation_clauses_and_pragmas id4}@anchor{29d}@anchor{gnat_rm/representation_clauses_and_pragmas storage-size-clauses}@anchor{29e} @section Storage_Size Clauses @@ -19106,7 +19325,7 @@ Of course in practice, there will not be any explicit allocators in the case of such an access declaration. @node Size of Variant Record Objects,Biased Representation,Storage_Size Clauses,Representation Clauses and Pragmas -@anchor{gnat_rm/representation_clauses_and_pragmas id5}@anchor{29c}@anchor{gnat_rm/representation_clauses_and_pragmas size-of-variant-record-objects}@anchor{29d} +@anchor{gnat_rm/representation_clauses_and_pragmas id5}@anchor{29f}@anchor{gnat_rm/representation_clauses_and_pragmas size-of-variant-record-objects}@anchor{2a0} @section Size of Variant Record Objects @@ -19216,7 +19435,7 @@ the maximum size, regardless of the current variant value, the variant value. @node Biased Representation,Value_Size and Object_Size Clauses,Size of Variant Record Objects,Representation Clauses and Pragmas -@anchor{gnat_rm/representation_clauses_and_pragmas biased-representation}@anchor{29e}@anchor{gnat_rm/representation_clauses_and_pragmas id6}@anchor{29f} +@anchor{gnat_rm/representation_clauses_and_pragmas biased-representation}@anchor{2a1}@anchor{gnat_rm/representation_clauses_and_pragmas id6}@anchor{2a2} @section Biased Representation @@ -19254,7 +19473,7 @@ biased representation can be used for all discrete types except for enumeration types for which a representation clause is given. @node Value_Size and Object_Size Clauses,Component_Size Clauses,Biased Representation,Representation Clauses and Pragmas -@anchor{gnat_rm/representation_clauses_and_pragmas id7}@anchor{2a0}@anchor{gnat_rm/representation_clauses_and_pragmas value-size-and-object-size-clauses}@anchor{2a1} +@anchor{gnat_rm/representation_clauses_and_pragmas id7}@anchor{2a3}@anchor{gnat_rm/representation_clauses_and_pragmas value-size-and-object-size-clauses}@anchor{2a4} @section Value_Size and Object_Size Clauses @@ -19570,7 +19789,7 @@ definition clause forces biased representation. This warning can be turned off using @code{-gnatw.B}. @node Component_Size Clauses,Bit_Order Clauses,Value_Size and Object_Size Clauses,Representation Clauses and Pragmas -@anchor{gnat_rm/representation_clauses_and_pragmas component-size-clauses}@anchor{2a2}@anchor{gnat_rm/representation_clauses_and_pragmas id8}@anchor{2a3} +@anchor{gnat_rm/representation_clauses_and_pragmas component-size-clauses}@anchor{2a5}@anchor{gnat_rm/representation_clauses_and_pragmas id8}@anchor{2a6} @section Component_Size Clauses @@ -19618,7 +19837,7 @@ and a pragma Pack for the same array type. if such duplicate clauses are given, the pragma Pack will be ignored. @node Bit_Order Clauses,Effect of Bit_Order on Byte Ordering,Component_Size Clauses,Representation Clauses and Pragmas -@anchor{gnat_rm/representation_clauses_and_pragmas bit-order-clauses}@anchor{2a4}@anchor{gnat_rm/representation_clauses_and_pragmas id9}@anchor{2a5} +@anchor{gnat_rm/representation_clauses_and_pragmas bit-order-clauses}@anchor{2a7}@anchor{gnat_rm/representation_clauses_and_pragmas id9}@anchor{2a8} @section Bit_Order Clauses @@ -19724,7 +19943,7 @@ if desired. The following section contains additional details regarding the issue of byte ordering. @node Effect of Bit_Order on Byte Ordering,Pragma Pack for Arrays,Bit_Order Clauses,Representation Clauses and Pragmas -@anchor{gnat_rm/representation_clauses_and_pragmas effect-of-bit-order-on-byte-ordering}@anchor{2a6}@anchor{gnat_rm/representation_clauses_and_pragmas id10}@anchor{2a7} +@anchor{gnat_rm/representation_clauses_and_pragmas effect-of-bit-order-on-byte-ordering}@anchor{2a9}@anchor{gnat_rm/representation_clauses_and_pragmas id10}@anchor{2aa} @section Effect of Bit_Order on Byte Ordering @@ -19981,7 +20200,7 @@ to set the boolean constant @code{Master_Byte_First} in an appropriate manner. @node Pragma Pack for Arrays,Pragma Pack for Records,Effect of Bit_Order on Byte Ordering,Representation Clauses and Pragmas -@anchor{gnat_rm/representation_clauses_and_pragmas id11}@anchor{2a8}@anchor{gnat_rm/representation_clauses_and_pragmas pragma-pack-for-arrays}@anchor{2a9} +@anchor{gnat_rm/representation_clauses_and_pragmas id11}@anchor{2ab}@anchor{gnat_rm/representation_clauses_and_pragmas pragma-pack-for-arrays}@anchor{2ac} @section Pragma Pack for Arrays @@ -20101,7 +20320,7 @@ Here 31-bit packing is achieved as required, and no warning is generated, since in this case the programmer intention is clear. @node Pragma Pack for Records,Record Representation Clauses,Pragma Pack for Arrays,Representation Clauses and Pragmas -@anchor{gnat_rm/representation_clauses_and_pragmas id12}@anchor{2aa}@anchor{gnat_rm/representation_clauses_and_pragmas pragma-pack-for-records}@anchor{2ab} +@anchor{gnat_rm/representation_clauses_and_pragmas id12}@anchor{2ad}@anchor{gnat_rm/representation_clauses_and_pragmas pragma-pack-for-records}@anchor{2ae} @section Pragma Pack for Records @@ -20185,7 +20404,7 @@ array that is longer than 64 bits, so it is itself non-packable on boundary, and takes an integral number of bytes, i.e., 72 bits. @node Record Representation Clauses,Handling of Records with Holes,Pragma Pack for Records,Representation Clauses and Pragmas -@anchor{gnat_rm/representation_clauses_and_pragmas id13}@anchor{2ac}@anchor{gnat_rm/representation_clauses_and_pragmas record-representation-clauses}@anchor{2ad} +@anchor{gnat_rm/representation_clauses_and_pragmas id13}@anchor{2af}@anchor{gnat_rm/representation_clauses_and_pragmas record-representation-clauses}@anchor{2b0} @section Record Representation Clauses @@ -20264,7 +20483,7 @@ end record; @end example @node Handling of Records with Holes,Enumeration Clauses,Record Representation Clauses,Representation Clauses and Pragmas -@anchor{gnat_rm/representation_clauses_and_pragmas handling-of-records-with-holes}@anchor{2ae}@anchor{gnat_rm/representation_clauses_and_pragmas id14}@anchor{2af} +@anchor{gnat_rm/representation_clauses_and_pragmas handling-of-records-with-holes}@anchor{2b1}@anchor{gnat_rm/representation_clauses_and_pragmas id14}@anchor{2b2} @section Handling of Records with Holes @@ -20340,7 +20559,7 @@ for Hrec'Size use 64; @end example @node Enumeration Clauses,Address Clauses,Handling of Records with Holes,Representation Clauses and Pragmas -@anchor{gnat_rm/representation_clauses_and_pragmas enumeration-clauses}@anchor{2b0}@anchor{gnat_rm/representation_clauses_and_pragmas id15}@anchor{2b1} +@anchor{gnat_rm/representation_clauses_and_pragmas enumeration-clauses}@anchor{2b3}@anchor{gnat_rm/representation_clauses_and_pragmas id15}@anchor{2b4} @section Enumeration Clauses @@ -20383,7 +20602,7 @@ the overhead of converting representation values to the corresponding positional values, (i.e., the value delivered by the @code{Pos} attribute). @node Address Clauses,Use of Address Clauses for Memory-Mapped I/O,Enumeration Clauses,Representation Clauses and Pragmas -@anchor{gnat_rm/representation_clauses_and_pragmas address-clauses}@anchor{2b2}@anchor{gnat_rm/representation_clauses_and_pragmas id16}@anchor{2b3} +@anchor{gnat_rm/representation_clauses_and_pragmas address-clauses}@anchor{2b5}@anchor{gnat_rm/representation_clauses_and_pragmas id16}@anchor{2b6} @section Address Clauses @@ -20723,7 +20942,7 @@ then the program compiles without the warning and when run will generate the output @code{X was not clobbered}. @node Use of Address Clauses for Memory-Mapped I/O,Effect of Convention on Representation,Address Clauses,Representation Clauses and Pragmas -@anchor{gnat_rm/representation_clauses_and_pragmas id17}@anchor{2b4}@anchor{gnat_rm/representation_clauses_and_pragmas use-of-address-clauses-for-memory-mapped-i-o}@anchor{2b5} +@anchor{gnat_rm/representation_clauses_and_pragmas id17}@anchor{2b7}@anchor{gnat_rm/representation_clauses_and_pragmas use-of-address-clauses-for-memory-mapped-i-o}@anchor{2b8} @section Use of Address Clauses for Memory-Mapped I/O @@ -20781,7 +21000,7 @@ provides the pragma @code{Volatile_Full_Access} which can be used in lieu of pragma @code{Atomic} and will give the additional guarantee. @node Effect of Convention on Representation,Conventions and Anonymous Access Types,Use of Address Clauses for Memory-Mapped I/O,Representation Clauses and Pragmas -@anchor{gnat_rm/representation_clauses_and_pragmas effect-of-convention-on-representation}@anchor{2b6}@anchor{gnat_rm/representation_clauses_and_pragmas id18}@anchor{2b7} +@anchor{gnat_rm/representation_clauses_and_pragmas effect-of-convention-on-representation}@anchor{2b9}@anchor{gnat_rm/representation_clauses_and_pragmas id18}@anchor{2ba} @section Effect of Convention on Representation @@ -20859,7 +21078,7 @@ when one of these values is read, any nonzero value is treated as True. @end itemize @node Conventions and Anonymous Access Types,Determining the Representations chosen by GNAT,Effect of Convention on Representation,Representation Clauses and Pragmas -@anchor{gnat_rm/representation_clauses_and_pragmas conventions-and-anonymous-access-types}@anchor{2b8}@anchor{gnat_rm/representation_clauses_and_pragmas id19}@anchor{2b9} +@anchor{gnat_rm/representation_clauses_and_pragmas conventions-and-anonymous-access-types}@anchor{2bb}@anchor{gnat_rm/representation_clauses_and_pragmas id19}@anchor{2bc} @section Conventions and Anonymous Access Types @@ -20935,7 +21154,7 @@ package ConvComp is @end example @node Determining the Representations chosen by GNAT,,Conventions and Anonymous Access Types,Representation Clauses and Pragmas -@anchor{gnat_rm/representation_clauses_and_pragmas determining-the-representations-chosen-by-gnat}@anchor{2ba}@anchor{gnat_rm/representation_clauses_and_pragmas id20}@anchor{2bb} +@anchor{gnat_rm/representation_clauses_and_pragmas determining-the-representations-chosen-by-gnat}@anchor{2bd}@anchor{gnat_rm/representation_clauses_and_pragmas id20}@anchor{2be} @section Determining the Representations chosen by GNAT @@ -21087,7 +21306,7 @@ generated by the compiler into the original source to fix and guarantee the actual representation to be used. @node Standard Library Routines,The Implementation of Standard I/O,Representation Clauses and Pragmas,Top -@anchor{gnat_rm/standard_library_routines doc}@anchor{2bc}@anchor{gnat_rm/standard_library_routines id1}@anchor{2bd}@anchor{gnat_rm/standard_library_routines standard-library-routines}@anchor{e} +@anchor{gnat_rm/standard_library_routines doc}@anchor{2bf}@anchor{gnat_rm/standard_library_routines id1}@anchor{2c0}@anchor{gnat_rm/standard_library_routines standard-library-routines}@anchor{e} @chapter Standard Library Routines @@ -21914,7 +22133,7 @@ For packages in Interfaces and System, all the RM defined packages are available in GNAT, see the Ada 2012 RM for full details. @node The Implementation of Standard I/O,The GNAT Library,Standard Library Routines,Top -@anchor{gnat_rm/the_implementation_of_standard_i_o doc}@anchor{2be}@anchor{gnat_rm/the_implementation_of_standard_i_o id1}@anchor{2bf}@anchor{gnat_rm/the_implementation_of_standard_i_o the-implementation-of-standard-i-o}@anchor{f} +@anchor{gnat_rm/the_implementation_of_standard_i_o doc}@anchor{2c1}@anchor{gnat_rm/the_implementation_of_standard_i_o id1}@anchor{2c2}@anchor{gnat_rm/the_implementation_of_standard_i_o the-implementation-of-standard-i-o}@anchor{f} @chapter The Implementation of Standard I/O @@ -21966,7 +22185,7 @@ these additional facilities are also described in this chapter. @end menu @node Standard I/O Packages,FORM Strings,,The Implementation of Standard I/O -@anchor{gnat_rm/the_implementation_of_standard_i_o id2}@anchor{2c0}@anchor{gnat_rm/the_implementation_of_standard_i_o standard-i-o-packages}@anchor{2c1} +@anchor{gnat_rm/the_implementation_of_standard_i_o id2}@anchor{2c3}@anchor{gnat_rm/the_implementation_of_standard_i_o standard-i-o-packages}@anchor{2c4} @section Standard I/O Packages @@ -22037,7 +22256,7 @@ flush the common I/O streams and in particular Standard_Output before elaborating the Ada code. @node FORM Strings,Direct_IO,Standard I/O Packages,The Implementation of Standard I/O -@anchor{gnat_rm/the_implementation_of_standard_i_o form-strings}@anchor{2c2}@anchor{gnat_rm/the_implementation_of_standard_i_o id3}@anchor{2c3} +@anchor{gnat_rm/the_implementation_of_standard_i_o form-strings}@anchor{2c5}@anchor{gnat_rm/the_implementation_of_standard_i_o id3}@anchor{2c6} @section FORM Strings @@ -22063,7 +22282,7 @@ unrecognized keyword appears in a form string, it is silently ignored and not considered invalid. @node Direct_IO,Sequential_IO,FORM Strings,The Implementation of Standard I/O -@anchor{gnat_rm/the_implementation_of_standard_i_o direct-io}@anchor{2c4}@anchor{gnat_rm/the_implementation_of_standard_i_o id4}@anchor{2c5} +@anchor{gnat_rm/the_implementation_of_standard_i_o direct-io}@anchor{2c7}@anchor{gnat_rm/the_implementation_of_standard_i_o id4}@anchor{2c8} @section Direct_IO @@ -22082,7 +22301,7 @@ There is no limit on the size of Direct_IO files, they are expanded as necessary to accommodate whatever records are written to the file. @node Sequential_IO,Text_IO,Direct_IO,The Implementation of Standard I/O -@anchor{gnat_rm/the_implementation_of_standard_i_o id5}@anchor{2c6}@anchor{gnat_rm/the_implementation_of_standard_i_o sequential-io}@anchor{2c7} +@anchor{gnat_rm/the_implementation_of_standard_i_o id5}@anchor{2c9}@anchor{gnat_rm/the_implementation_of_standard_i_o sequential-io}@anchor{2ca} @section Sequential_IO @@ -22129,7 +22348,7 @@ using Stream_IO, and this is the preferred mechanism. In particular, the above program fragment rewritten to use Stream_IO will work correctly. @node Text_IO,Wide_Text_IO,Sequential_IO,The Implementation of Standard I/O -@anchor{gnat_rm/the_implementation_of_standard_i_o id6}@anchor{2c8}@anchor{gnat_rm/the_implementation_of_standard_i_o text-io}@anchor{2c9} +@anchor{gnat_rm/the_implementation_of_standard_i_o id6}@anchor{2cb}@anchor{gnat_rm/the_implementation_of_standard_i_o text-io}@anchor{2cc} @section Text_IO @@ -22212,7 +22431,7 @@ the file. @end menu @node Stream Pointer Positioning,Reading and Writing Non-Regular Files,,Text_IO -@anchor{gnat_rm/the_implementation_of_standard_i_o id7}@anchor{2ca}@anchor{gnat_rm/the_implementation_of_standard_i_o stream-pointer-positioning}@anchor{2cb} +@anchor{gnat_rm/the_implementation_of_standard_i_o id7}@anchor{2cd}@anchor{gnat_rm/the_implementation_of_standard_i_o stream-pointer-positioning}@anchor{2ce} @subsection Stream Pointer Positioning @@ -22248,7 +22467,7 @@ between two Ada files, then the difference may be observable in some situations. @node Reading and Writing Non-Regular Files,Get_Immediate,Stream Pointer Positioning,Text_IO -@anchor{gnat_rm/the_implementation_of_standard_i_o id8}@anchor{2cc}@anchor{gnat_rm/the_implementation_of_standard_i_o reading-and-writing-non-regular-files}@anchor{2cd} +@anchor{gnat_rm/the_implementation_of_standard_i_o id8}@anchor{2cf}@anchor{gnat_rm/the_implementation_of_standard_i_o reading-and-writing-non-regular-files}@anchor{2d0} @subsection Reading and Writing Non-Regular Files @@ -22299,7 +22518,7 @@ to read data past that end of file indication, until another end of file indication is entered. @node Get_Immediate,Treating Text_IO Files as Streams,Reading and Writing Non-Regular Files,Text_IO -@anchor{gnat_rm/the_implementation_of_standard_i_o get-immediate}@anchor{2ce}@anchor{gnat_rm/the_implementation_of_standard_i_o id9}@anchor{2cf} +@anchor{gnat_rm/the_implementation_of_standard_i_o get-immediate}@anchor{2d1}@anchor{gnat_rm/the_implementation_of_standard_i_o id9}@anchor{2d2} @subsection Get_Immediate @@ -22317,7 +22536,7 @@ possible), it is undefined whether the FF character will be treated as a page mark. @node Treating Text_IO Files as Streams,Text_IO Extensions,Get_Immediate,Text_IO -@anchor{gnat_rm/the_implementation_of_standard_i_o id10}@anchor{2d0}@anchor{gnat_rm/the_implementation_of_standard_i_o treating-text-io-files-as-streams}@anchor{2d1} +@anchor{gnat_rm/the_implementation_of_standard_i_o id10}@anchor{2d3}@anchor{gnat_rm/the_implementation_of_standard_i_o treating-text-io-files-as-streams}@anchor{2d4} @subsection Treating Text_IO Files as Streams @@ -22333,7 +22552,7 @@ skipped and the effect is similar to that described above for @code{Get_Immediate}. @node Text_IO Extensions,Text_IO Facilities for Unbounded Strings,Treating Text_IO Files as Streams,Text_IO -@anchor{gnat_rm/the_implementation_of_standard_i_o id11}@anchor{2d2}@anchor{gnat_rm/the_implementation_of_standard_i_o text-io-extensions}@anchor{2d3} +@anchor{gnat_rm/the_implementation_of_standard_i_o id11}@anchor{2d5}@anchor{gnat_rm/the_implementation_of_standard_i_o text-io-extensions}@anchor{2d6} @subsection Text_IO Extensions @@ -22361,7 +22580,7 @@ the string is to be read. @end itemize @node Text_IO Facilities for Unbounded Strings,,Text_IO Extensions,Text_IO -@anchor{gnat_rm/the_implementation_of_standard_i_o id12}@anchor{2d4}@anchor{gnat_rm/the_implementation_of_standard_i_o text-io-facilities-for-unbounded-strings}@anchor{2d5} +@anchor{gnat_rm/the_implementation_of_standard_i_o id12}@anchor{2d7}@anchor{gnat_rm/the_implementation_of_standard_i_o text-io-facilities-for-unbounded-strings}@anchor{2d8} @subsection Text_IO Facilities for Unbounded Strings @@ -22409,7 +22628,7 @@ files @code{a-szuzti.ads} and @code{a-szuzti.adb} provides similar extended @code{Wide_Wide_Text_IO} functionality for unbounded wide wide strings. @node Wide_Text_IO,Wide_Wide_Text_IO,Text_IO,The Implementation of Standard I/O -@anchor{gnat_rm/the_implementation_of_standard_i_o id13}@anchor{2d6}@anchor{gnat_rm/the_implementation_of_standard_i_o wide-text-io}@anchor{2d7} +@anchor{gnat_rm/the_implementation_of_standard_i_o id13}@anchor{2d9}@anchor{gnat_rm/the_implementation_of_standard_i_o wide-text-io}@anchor{2da} @section Wide_Text_IO @@ -22656,12 +22875,12 @@ input also causes Constraint_Error to be raised. @end menu @node Stream Pointer Positioning<2>,Reading and Writing Non-Regular Files<2>,,Wide_Text_IO -@anchor{gnat_rm/the_implementation_of_standard_i_o id14}@anchor{2d8}@anchor{gnat_rm/the_implementation_of_standard_i_o stream-pointer-positioning-1}@anchor{2d9} +@anchor{gnat_rm/the_implementation_of_standard_i_o id14}@anchor{2db}@anchor{gnat_rm/the_implementation_of_standard_i_o stream-pointer-positioning-1}@anchor{2dc} @subsection Stream Pointer Positioning @code{Ada.Wide_Text_IO} is similar to @code{Ada.Text_IO} in its handling -of stream pointer positioning (@ref{2c9,,Text_IO}). There is one additional +of stream pointer positioning (@ref{2cc,,Text_IO}). There is one additional case: If @code{Ada.Wide_Text_IO.Look_Ahead} reads a character outside the @@ -22680,7 +22899,7 @@ to a normal program using @code{Wide_Text_IO}. However, this discrepancy can be observed if the wide text file shares a stream with another file. @node Reading and Writing Non-Regular Files<2>,,Stream Pointer Positioning<2>,Wide_Text_IO -@anchor{gnat_rm/the_implementation_of_standard_i_o id15}@anchor{2da}@anchor{gnat_rm/the_implementation_of_standard_i_o reading-and-writing-non-regular-files-1}@anchor{2db} +@anchor{gnat_rm/the_implementation_of_standard_i_o id15}@anchor{2dd}@anchor{gnat_rm/the_implementation_of_standard_i_o reading-and-writing-non-regular-files-1}@anchor{2de} @subsection Reading and Writing Non-Regular Files @@ -22691,7 +22910,7 @@ treated as data characters), and @code{End_Of_Page} always returns it is possible to read beyond an end of file. @node Wide_Wide_Text_IO,Stream_IO,Wide_Text_IO,The Implementation of Standard I/O -@anchor{gnat_rm/the_implementation_of_standard_i_o id16}@anchor{2dc}@anchor{gnat_rm/the_implementation_of_standard_i_o wide-wide-text-io}@anchor{2dd} +@anchor{gnat_rm/the_implementation_of_standard_i_o id16}@anchor{2df}@anchor{gnat_rm/the_implementation_of_standard_i_o wide-wide-text-io}@anchor{2e0} @section Wide_Wide_Text_IO @@ -22860,12 +23079,12 @@ input also causes Constraint_Error to be raised. @end menu @node Stream Pointer Positioning<3>,Reading and Writing Non-Regular Files<3>,,Wide_Wide_Text_IO -@anchor{gnat_rm/the_implementation_of_standard_i_o id17}@anchor{2de}@anchor{gnat_rm/the_implementation_of_standard_i_o stream-pointer-positioning-2}@anchor{2df} +@anchor{gnat_rm/the_implementation_of_standard_i_o id17}@anchor{2e1}@anchor{gnat_rm/the_implementation_of_standard_i_o stream-pointer-positioning-2}@anchor{2e2} @subsection Stream Pointer Positioning @code{Ada.Wide_Wide_Text_IO} is similar to @code{Ada.Text_IO} in its handling -of stream pointer positioning (@ref{2c9,,Text_IO}). There is one additional +of stream pointer positioning (@ref{2cc,,Text_IO}). There is one additional case: If @code{Ada.Wide_Wide_Text_IO.Look_Ahead} reads a character outside the @@ -22884,7 +23103,7 @@ to a normal program using @code{Wide_Wide_Text_IO}. However, this discrepancy can be observed if the wide text file shares a stream with another file. @node Reading and Writing Non-Regular Files<3>,,Stream Pointer Positioning<3>,Wide_Wide_Text_IO -@anchor{gnat_rm/the_implementation_of_standard_i_o id18}@anchor{2e0}@anchor{gnat_rm/the_implementation_of_standard_i_o reading-and-writing-non-regular-files-2}@anchor{2e1} +@anchor{gnat_rm/the_implementation_of_standard_i_o id18}@anchor{2e3}@anchor{gnat_rm/the_implementation_of_standard_i_o reading-and-writing-non-regular-files-2}@anchor{2e4} @subsection Reading and Writing Non-Regular Files @@ -22895,7 +23114,7 @@ treated as data characters), and @code{End_Of_Page} always returns it is possible to read beyond an end of file. @node Stream_IO,Text Translation,Wide_Wide_Text_IO,The Implementation of Standard I/O -@anchor{gnat_rm/the_implementation_of_standard_i_o id19}@anchor{2e2}@anchor{gnat_rm/the_implementation_of_standard_i_o stream-io}@anchor{2e3} +@anchor{gnat_rm/the_implementation_of_standard_i_o id19}@anchor{2e5}@anchor{gnat_rm/the_implementation_of_standard_i_o stream-io}@anchor{2e6} @section Stream_IO @@ -22917,7 +23136,7 @@ manner described for stream attributes. @end itemize @node Text Translation,Shared Files,Stream_IO,The Implementation of Standard I/O -@anchor{gnat_rm/the_implementation_of_standard_i_o id20}@anchor{2e4}@anchor{gnat_rm/the_implementation_of_standard_i_o text-translation}@anchor{2e5} +@anchor{gnat_rm/the_implementation_of_standard_i_o id20}@anchor{2e7}@anchor{gnat_rm/the_implementation_of_standard_i_o text-translation}@anchor{2e8} @section Text Translation @@ -22951,7 +23170,7 @@ mode. (corresponds to_O_U16TEXT). @end itemize @node Shared Files,Filenames encoding,Text Translation,The Implementation of Standard I/O -@anchor{gnat_rm/the_implementation_of_standard_i_o id21}@anchor{2e6}@anchor{gnat_rm/the_implementation_of_standard_i_o shared-files}@anchor{2e7} +@anchor{gnat_rm/the_implementation_of_standard_i_o id21}@anchor{2e9}@anchor{gnat_rm/the_implementation_of_standard_i_o shared-files}@anchor{2ea} @section Shared Files @@ -23014,7 +23233,7 @@ heterogeneous input-output. Although this approach will work in GNAT if for this purpose (using the stream attributes). @node Filenames encoding,File content encoding,Shared Files,The Implementation of Standard I/O -@anchor{gnat_rm/the_implementation_of_standard_i_o filenames-encoding}@anchor{2e8}@anchor{gnat_rm/the_implementation_of_standard_i_o id22}@anchor{2e9} +@anchor{gnat_rm/the_implementation_of_standard_i_o filenames-encoding}@anchor{2eb}@anchor{gnat_rm/the_implementation_of_standard_i_o id22}@anchor{2ec} @section Filenames encoding @@ -23054,7 +23273,7 @@ platform. On the other Operating Systems the run-time is supporting UTF-8 natively. @node File content encoding,Open Modes,Filenames encoding,The Implementation of Standard I/O -@anchor{gnat_rm/the_implementation_of_standard_i_o file-content-encoding}@anchor{2ea}@anchor{gnat_rm/the_implementation_of_standard_i_o id23}@anchor{2eb} +@anchor{gnat_rm/the_implementation_of_standard_i_o file-content-encoding}@anchor{2ed}@anchor{gnat_rm/the_implementation_of_standard_i_o id23}@anchor{2ee} @section File content encoding @@ -23087,7 +23306,7 @@ Unicode 8-bit encoding This encoding is only supported on the Windows platform. @node Open Modes,Operations on C Streams,File content encoding,The Implementation of Standard I/O -@anchor{gnat_rm/the_implementation_of_standard_i_o id24}@anchor{2ec}@anchor{gnat_rm/the_implementation_of_standard_i_o open-modes}@anchor{2ed} +@anchor{gnat_rm/the_implementation_of_standard_i_o id24}@anchor{2ef}@anchor{gnat_rm/the_implementation_of_standard_i_o open-modes}@anchor{2f0} @section Open Modes @@ -23190,7 +23409,7 @@ subsequently requires switching from reading to writing or vice-versa, then the file is reopened in @code{r+} mode to permit the required operation. @node Operations on C Streams,Interfacing to C Streams,Open Modes,The Implementation of Standard I/O -@anchor{gnat_rm/the_implementation_of_standard_i_o id25}@anchor{2ee}@anchor{gnat_rm/the_implementation_of_standard_i_o operations-on-c-streams}@anchor{2ef} +@anchor{gnat_rm/the_implementation_of_standard_i_o id25}@anchor{2f1}@anchor{gnat_rm/the_implementation_of_standard_i_o operations-on-c-streams}@anchor{2f2} @section Operations on C Streams @@ -23350,7 +23569,7 @@ end Interfaces.C_Streams; @end example @node Interfacing to C Streams,,Operations on C Streams,The Implementation of Standard I/O -@anchor{gnat_rm/the_implementation_of_standard_i_o id26}@anchor{2f0}@anchor{gnat_rm/the_implementation_of_standard_i_o interfacing-to-c-streams}@anchor{2f1} +@anchor{gnat_rm/the_implementation_of_standard_i_o id26}@anchor{2f3}@anchor{gnat_rm/the_implementation_of_standard_i_o interfacing-to-c-streams}@anchor{2f4} @section Interfacing to C Streams @@ -23443,7 +23662,7 @@ imported from a C program, allowing an Ada file to operate on an existing C file. @node The GNAT Library,Interfacing to Other Languages,The Implementation of Standard I/O,Top -@anchor{gnat_rm/the_gnat_library doc}@anchor{2f2}@anchor{gnat_rm/the_gnat_library id1}@anchor{2f3}@anchor{gnat_rm/the_gnat_library the-gnat-library}@anchor{10} +@anchor{gnat_rm/the_gnat_library doc}@anchor{2f5}@anchor{gnat_rm/the_gnat_library id1}@anchor{2f6}@anchor{gnat_rm/the_gnat_library the-gnat-library}@anchor{10} @chapter The GNAT Library @@ -23521,6 +23740,7 @@ of GNAT, and will generate a warning message. * GNAT.Bubble_Sort_G (g-busorg.ads): GNAT Bubble_Sort_G g-busorg ads. * GNAT.Byte_Order_Mark (g-byorma.ads): GNAT Byte_Order_Mark g-byorma ads. * GNAT.Byte_Swapping (g-bytswa.ads): GNAT Byte_Swapping g-bytswa ads. +* GNAT.C_Time (g-c_time.ads): GNAT C_Time g-c_time ads. * GNAT.Calendar (g-calend.ads): GNAT Calendar g-calend ads. * GNAT.Calendar.Time_IO (g-catiio.ads): GNAT Calendar Time_IO g-catiio ads. * GNAT.CRC32 (g-crc32.ads): GNAT CRC32 g-crc32 ads. @@ -23628,7 +23848,7 @@ of GNAT, and will generate a warning message. @end menu @node Ada Characters Latin_9 a-chlat9 ads,Ada Characters Wide_Latin_1 a-cwila1 ads,,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-characters-latin-9-a-chlat9-ads}@anchor{2f4}@anchor{gnat_rm/the_gnat_library id2}@anchor{2f5} +@anchor{gnat_rm/the_gnat_library ada-characters-latin-9-a-chlat9-ads}@anchor{2f7}@anchor{gnat_rm/the_gnat_library id2}@anchor{2f8} @section @code{Ada.Characters.Latin_9} (@code{a-chlat9.ads}) @@ -23645,7 +23865,7 @@ is specifically authorized by the Ada Reference Manual (RM A.3.3(27)). @node Ada Characters Wide_Latin_1 a-cwila1 ads,Ada Characters Wide_Latin_9 a-cwila9 ads,Ada Characters Latin_9 a-chlat9 ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-characters-wide-latin-1-a-cwila1-ads}@anchor{2f6}@anchor{gnat_rm/the_gnat_library id3}@anchor{2f7} +@anchor{gnat_rm/the_gnat_library ada-characters-wide-latin-1-a-cwila1-ads}@anchor{2f9}@anchor{gnat_rm/the_gnat_library id3}@anchor{2fa} @section @code{Ada.Characters.Wide_Latin_1} (@code{a-cwila1.ads}) @@ -23662,7 +23882,7 @@ is specifically authorized by the Ada Reference Manual (RM A.3.3(27)). @node Ada Characters Wide_Latin_9 a-cwila9 ads,Ada Characters Wide_Wide_Latin_1 a-chzla1 ads,Ada Characters Wide_Latin_1 a-cwila1 ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-characters-wide-latin-9-a-cwila9-ads}@anchor{2f8}@anchor{gnat_rm/the_gnat_library id4}@anchor{2f9} +@anchor{gnat_rm/the_gnat_library ada-characters-wide-latin-9-a-cwila9-ads}@anchor{2fb}@anchor{gnat_rm/the_gnat_library id4}@anchor{2fc} @section @code{Ada.Characters.Wide_Latin_9} (@code{a-cwila9.ads}) @@ -23679,7 +23899,7 @@ is specifically authorized by the Ada Reference Manual (RM A.3.3(27)). @node Ada Characters Wide_Wide_Latin_1 a-chzla1 ads,Ada Characters Wide_Wide_Latin_9 a-chzla9 ads,Ada Characters Wide_Latin_9 a-cwila9 ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-characters-wide-wide-latin-1-a-chzla1-ads}@anchor{2fa}@anchor{gnat_rm/the_gnat_library id5}@anchor{2fb} +@anchor{gnat_rm/the_gnat_library ada-characters-wide-wide-latin-1-a-chzla1-ads}@anchor{2fd}@anchor{gnat_rm/the_gnat_library id5}@anchor{2fe} @section @code{Ada.Characters.Wide_Wide_Latin_1} (@code{a-chzla1.ads}) @@ -23696,7 +23916,7 @@ is specifically authorized by the Ada Reference Manual (RM A.3.3(27)). @node Ada Characters Wide_Wide_Latin_9 a-chzla9 ads,Ada Containers Bounded_Holders a-coboho ads,Ada Characters Wide_Wide_Latin_1 a-chzla1 ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-characters-wide-wide-latin-9-a-chzla9-ads}@anchor{2fc}@anchor{gnat_rm/the_gnat_library id6}@anchor{2fd} +@anchor{gnat_rm/the_gnat_library ada-characters-wide-wide-latin-9-a-chzla9-ads}@anchor{2ff}@anchor{gnat_rm/the_gnat_library id6}@anchor{300} @section @code{Ada.Characters.Wide_Wide_Latin_9} (@code{a-chzla9.ads}) @@ -23713,7 +23933,7 @@ is specifically authorized by the Ada Reference Manual (RM A.3.3(27)). @node Ada Containers Bounded_Holders a-coboho ads,Ada Command_Line Environment a-colien ads,Ada Characters Wide_Wide_Latin_9 a-chzla9 ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-containers-bounded-holders-a-coboho-ads}@anchor{2fe}@anchor{gnat_rm/the_gnat_library id7}@anchor{2ff} +@anchor{gnat_rm/the_gnat_library ada-containers-bounded-holders-a-coboho-ads}@anchor{301}@anchor{gnat_rm/the_gnat_library id7}@anchor{302} @section @code{Ada.Containers.Bounded_Holders} (@code{a-coboho.ads}) @@ -23725,7 +23945,7 @@ This child of @code{Ada.Containers} defines a modified version of Indefinite_Holders that avoids heap allocation. @node Ada Command_Line Environment a-colien ads,Ada Command_Line Remove a-colire ads,Ada Containers Bounded_Holders a-coboho ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-command-line-environment-a-colien-ads}@anchor{300}@anchor{gnat_rm/the_gnat_library id8}@anchor{301} +@anchor{gnat_rm/the_gnat_library ada-command-line-environment-a-colien-ads}@anchor{303}@anchor{gnat_rm/the_gnat_library id8}@anchor{304} @section @code{Ada.Command_Line.Environment} (@code{a-colien.ads}) @@ -23738,7 +23958,7 @@ provides a mechanism for obtaining environment values on systems where this concept makes sense. @node Ada Command_Line Remove a-colire ads,Ada Command_Line Response_File a-clrefi ads,Ada Command_Line Environment a-colien ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-command-line-remove-a-colire-ads}@anchor{302}@anchor{gnat_rm/the_gnat_library id9}@anchor{303} +@anchor{gnat_rm/the_gnat_library ada-command-line-remove-a-colire-ads}@anchor{305}@anchor{gnat_rm/the_gnat_library id9}@anchor{306} @section @code{Ada.Command_Line.Remove} (@code{a-colire.ads}) @@ -23756,7 +23976,7 @@ to further calls to the subprograms in @code{Ada.Command_Line}. These calls will not see the removed argument. @node Ada Command_Line Response_File a-clrefi ads,Ada Direct_IO C_Streams a-diocst ads,Ada Command_Line Remove a-colire ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-command-line-response-file-a-clrefi-ads}@anchor{304}@anchor{gnat_rm/the_gnat_library id10}@anchor{305} +@anchor{gnat_rm/the_gnat_library ada-command-line-response-file-a-clrefi-ads}@anchor{307}@anchor{gnat_rm/the_gnat_library id10}@anchor{308} @section @code{Ada.Command_Line.Response_File} (@code{a-clrefi.ads}) @@ -23776,7 +23996,7 @@ Using a response file allow passing a set of arguments to an executable longer than the maximum allowed by the system on the command line. @node Ada Direct_IO C_Streams a-diocst ads,Ada Exceptions Is_Null_Occurrence a-einuoc ads,Ada Command_Line Response_File a-clrefi ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-direct-io-c-streams-a-diocst-ads}@anchor{306}@anchor{gnat_rm/the_gnat_library id11}@anchor{307} +@anchor{gnat_rm/the_gnat_library ada-direct-io-c-streams-a-diocst-ads}@anchor{309}@anchor{gnat_rm/the_gnat_library id11}@anchor{30a} @section @code{Ada.Direct_IO.C_Streams} (@code{a-diocst.ads}) @@ -23791,7 +24011,7 @@ extracted from a file opened on the Ada side, and an Ada file can be constructed from a stream opened on the C side. @node Ada Exceptions Is_Null_Occurrence a-einuoc ads,Ada Exceptions Last_Chance_Handler a-elchha ads,Ada Direct_IO C_Streams a-diocst ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-exceptions-is-null-occurrence-a-einuoc-ads}@anchor{308}@anchor{gnat_rm/the_gnat_library id12}@anchor{309} +@anchor{gnat_rm/the_gnat_library ada-exceptions-is-null-occurrence-a-einuoc-ads}@anchor{30b}@anchor{gnat_rm/the_gnat_library id12}@anchor{30c} @section @code{Ada.Exceptions.Is_Null_Occurrence} (@code{a-einuoc.ads}) @@ -23805,7 +24025,7 @@ exception occurrence (@code{Null_Occurrence}) without raising an exception. @node Ada Exceptions Last_Chance_Handler a-elchha ads,Ada Exceptions Traceback a-exctra ads,Ada Exceptions Is_Null_Occurrence a-einuoc ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-exceptions-last-chance-handler-a-elchha-ads}@anchor{30a}@anchor{gnat_rm/the_gnat_library id13}@anchor{30b} +@anchor{gnat_rm/the_gnat_library ada-exceptions-last-chance-handler-a-elchha-ads}@anchor{30d}@anchor{gnat_rm/the_gnat_library id13}@anchor{30e} @section @code{Ada.Exceptions.Last_Chance_Handler} (@code{a-elchha.ads}) @@ -23819,7 +24039,7 @@ exceptions (hence the name last chance), and perform clean ups before terminating the program. Note that this subprogram never returns. @node Ada Exceptions Traceback a-exctra ads,Ada Sequential_IO C_Streams a-siocst ads,Ada Exceptions Last_Chance_Handler a-elchha ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-exceptions-traceback-a-exctra-ads}@anchor{30c}@anchor{gnat_rm/the_gnat_library id14}@anchor{30d} +@anchor{gnat_rm/the_gnat_library ada-exceptions-traceback-a-exctra-ads}@anchor{30f}@anchor{gnat_rm/the_gnat_library id14}@anchor{310} @section @code{Ada.Exceptions.Traceback} (@code{a-exctra.ads}) @@ -23832,7 +24052,7 @@ give a traceback array of addresses based on an exception occurrence. @node Ada Sequential_IO C_Streams a-siocst ads,Ada Streams Stream_IO C_Streams a-ssicst ads,Ada Exceptions Traceback a-exctra ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-sequential-io-c-streams-a-siocst-ads}@anchor{30e}@anchor{gnat_rm/the_gnat_library id15}@anchor{30f} +@anchor{gnat_rm/the_gnat_library ada-sequential-io-c-streams-a-siocst-ads}@anchor{311}@anchor{gnat_rm/the_gnat_library id15}@anchor{312} @section @code{Ada.Sequential_IO.C_Streams} (@code{a-siocst.ads}) @@ -23847,7 +24067,7 @@ extracted from a file opened on the Ada side, and an Ada file can be constructed from a stream opened on the C side. @node Ada Streams Stream_IO C_Streams a-ssicst ads,Ada Strings Unbounded Text_IO a-suteio ads,Ada Sequential_IO C_Streams a-siocst ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-streams-stream-io-c-streams-a-ssicst-ads}@anchor{310}@anchor{gnat_rm/the_gnat_library id16}@anchor{311} +@anchor{gnat_rm/the_gnat_library ada-streams-stream-io-c-streams-a-ssicst-ads}@anchor{313}@anchor{gnat_rm/the_gnat_library id16}@anchor{314} @section @code{Ada.Streams.Stream_IO.C_Streams} (@code{a-ssicst.ads}) @@ -23862,7 +24082,7 @@ extracted from a file opened on the Ada side, and an Ada file can be constructed from a stream opened on the C side. @node Ada Strings Unbounded Text_IO a-suteio ads,Ada Strings Wide_Unbounded Wide_Text_IO a-swuwti ads,Ada Streams Stream_IO C_Streams a-ssicst ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-strings-unbounded-text-io-a-suteio-ads}@anchor{312}@anchor{gnat_rm/the_gnat_library id17}@anchor{313} +@anchor{gnat_rm/the_gnat_library ada-strings-unbounded-text-io-a-suteio-ads}@anchor{315}@anchor{gnat_rm/the_gnat_library id17}@anchor{316} @section @code{Ada.Strings.Unbounded.Text_IO} (@code{a-suteio.ads}) @@ -23879,7 +24099,7 @@ strings, avoiding the necessity for an intermediate operation with ordinary strings. @node Ada Strings Wide_Unbounded Wide_Text_IO a-swuwti ads,Ada Strings Wide_Wide_Unbounded Wide_Wide_Text_IO a-szuzti ads,Ada Strings Unbounded Text_IO a-suteio ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-strings-wide-unbounded-wide-text-io-a-swuwti-ads}@anchor{314}@anchor{gnat_rm/the_gnat_library id18}@anchor{315} +@anchor{gnat_rm/the_gnat_library ada-strings-wide-unbounded-wide-text-io-a-swuwti-ads}@anchor{317}@anchor{gnat_rm/the_gnat_library id18}@anchor{318} @section @code{Ada.Strings.Wide_Unbounded.Wide_Text_IO} (@code{a-swuwti.ads}) @@ -23896,7 +24116,7 @@ wide strings, avoiding the necessity for an intermediate operation with ordinary wide strings. @node Ada Strings Wide_Wide_Unbounded Wide_Wide_Text_IO a-szuzti ads,Ada Task_Initialization a-tasini ads,Ada Strings Wide_Unbounded Wide_Text_IO a-swuwti ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-strings-wide-wide-unbounded-wide-wide-text-io-a-szuzti-ads}@anchor{316}@anchor{gnat_rm/the_gnat_library id19}@anchor{317} +@anchor{gnat_rm/the_gnat_library ada-strings-wide-wide-unbounded-wide-wide-text-io-a-szuzti-ads}@anchor{319}@anchor{gnat_rm/the_gnat_library id19}@anchor{31a} @section @code{Ada.Strings.Wide_Wide_Unbounded.Wide_Wide_Text_IO} (@code{a-szuzti.ads}) @@ -23913,7 +24133,7 @@ wide wide strings, avoiding the necessity for an intermediate operation with ordinary wide wide strings. @node Ada Task_Initialization a-tasini ads,Ada Text_IO C_Streams a-tiocst ads,Ada Strings Wide_Wide_Unbounded Wide_Wide_Text_IO a-szuzti ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-task-initialization-a-tasini-ads}@anchor{318}@anchor{gnat_rm/the_gnat_library id20}@anchor{319} +@anchor{gnat_rm/the_gnat_library ada-task-initialization-a-tasini-ads}@anchor{31b}@anchor{gnat_rm/the_gnat_library id20}@anchor{31c} @section @code{Ada.Task_Initialization} (@code{a-tasini.ads}) @@ -23925,7 +24145,7 @@ parameterless procedures. Note that such a handler is only invoked for those tasks activated after the handler is set. @node Ada Text_IO C_Streams a-tiocst ads,Ada Text_IO Reset_Standard_Files a-tirsfi ads,Ada Task_Initialization a-tasini ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-text-io-c-streams-a-tiocst-ads}@anchor{31a}@anchor{gnat_rm/the_gnat_library id21}@anchor{31b} +@anchor{gnat_rm/the_gnat_library ada-text-io-c-streams-a-tiocst-ads}@anchor{31d}@anchor{gnat_rm/the_gnat_library id21}@anchor{31e} @section @code{Ada.Text_IO.C_Streams} (@code{a-tiocst.ads}) @@ -23940,7 +24160,7 @@ extracted from a file opened on the Ada side, and an Ada file can be constructed from a stream opened on the C side. @node Ada Text_IO Reset_Standard_Files a-tirsfi ads,Ada Wide_Characters Unicode a-wichun ads,Ada Text_IO C_Streams a-tiocst ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-text-io-reset-standard-files-a-tirsfi-ads}@anchor{31c}@anchor{gnat_rm/the_gnat_library id22}@anchor{31d} +@anchor{gnat_rm/the_gnat_library ada-text-io-reset-standard-files-a-tirsfi-ads}@anchor{31f}@anchor{gnat_rm/the_gnat_library id22}@anchor{320} @section @code{Ada.Text_IO.Reset_Standard_Files} (@code{a-tirsfi.ads}) @@ -23955,7 +24175,7 @@ execution (for example a standard input file may be redefined to be interactive). @node Ada Wide_Characters Unicode a-wichun ads,Ada Wide_Text_IO C_Streams a-wtcstr ads,Ada Text_IO Reset_Standard_Files a-tirsfi ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-wide-characters-unicode-a-wichun-ads}@anchor{31e}@anchor{gnat_rm/the_gnat_library id23}@anchor{31f} +@anchor{gnat_rm/the_gnat_library ada-wide-characters-unicode-a-wichun-ads}@anchor{321}@anchor{gnat_rm/the_gnat_library id23}@anchor{322} @section @code{Ada.Wide_Characters.Unicode} (@code{a-wichun.ads}) @@ -23968,7 +24188,7 @@ This package provides subprograms that allow categorization of Wide_Character values according to Unicode categories. @node Ada Wide_Text_IO C_Streams a-wtcstr ads,Ada Wide_Text_IO Reset_Standard_Files a-wrstfi ads,Ada Wide_Characters Unicode a-wichun ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-wide-text-io-c-streams-a-wtcstr-ads}@anchor{320}@anchor{gnat_rm/the_gnat_library id24}@anchor{321} +@anchor{gnat_rm/the_gnat_library ada-wide-text-io-c-streams-a-wtcstr-ads}@anchor{323}@anchor{gnat_rm/the_gnat_library id24}@anchor{324} @section @code{Ada.Wide_Text_IO.C_Streams} (@code{a-wtcstr.ads}) @@ -23983,7 +24203,7 @@ extracted from a file opened on the Ada side, and an Ada file can be constructed from a stream opened on the C side. @node Ada Wide_Text_IO Reset_Standard_Files a-wrstfi ads,Ada Wide_Wide_Characters Unicode a-zchuni ads,Ada Wide_Text_IO C_Streams a-wtcstr ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-wide-text-io-reset-standard-files-a-wrstfi-ads}@anchor{322}@anchor{gnat_rm/the_gnat_library id25}@anchor{323} +@anchor{gnat_rm/the_gnat_library ada-wide-text-io-reset-standard-files-a-wrstfi-ads}@anchor{325}@anchor{gnat_rm/the_gnat_library id25}@anchor{326} @section @code{Ada.Wide_Text_IO.Reset_Standard_Files} (@code{a-wrstfi.ads}) @@ -23998,7 +24218,7 @@ execution (for example a standard input file may be redefined to be interactive). @node Ada Wide_Wide_Characters Unicode a-zchuni ads,Ada Wide_Wide_Text_IO C_Streams a-ztcstr ads,Ada Wide_Text_IO Reset_Standard_Files a-wrstfi ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-wide-wide-characters-unicode-a-zchuni-ads}@anchor{324}@anchor{gnat_rm/the_gnat_library id26}@anchor{325} +@anchor{gnat_rm/the_gnat_library ada-wide-wide-characters-unicode-a-zchuni-ads}@anchor{327}@anchor{gnat_rm/the_gnat_library id26}@anchor{328} @section @code{Ada.Wide_Wide_Characters.Unicode} (@code{a-zchuni.ads}) @@ -24011,7 +24231,7 @@ This package provides subprograms that allow categorization of Wide_Wide_Character values according to Unicode categories. @node Ada Wide_Wide_Text_IO C_Streams a-ztcstr ads,Ada Wide_Wide_Text_IO Reset_Standard_Files a-zrstfi ads,Ada Wide_Wide_Characters Unicode a-zchuni ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-wide-wide-text-io-c-streams-a-ztcstr-ads}@anchor{326}@anchor{gnat_rm/the_gnat_library id27}@anchor{327} +@anchor{gnat_rm/the_gnat_library ada-wide-wide-text-io-c-streams-a-ztcstr-ads}@anchor{329}@anchor{gnat_rm/the_gnat_library id27}@anchor{32a} @section @code{Ada.Wide_Wide_Text_IO.C_Streams} (@code{a-ztcstr.ads}) @@ -24026,7 +24246,7 @@ extracted from a file opened on the Ada side, and an Ada file can be constructed from a stream opened on the C side. @node Ada Wide_Wide_Text_IO Reset_Standard_Files a-zrstfi ads,GNAT Altivec g-altive ads,Ada Wide_Wide_Text_IO C_Streams a-ztcstr ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library ada-wide-wide-text-io-reset-standard-files-a-zrstfi-ads}@anchor{328}@anchor{gnat_rm/the_gnat_library id28}@anchor{329} +@anchor{gnat_rm/the_gnat_library ada-wide-wide-text-io-reset-standard-files-a-zrstfi-ads}@anchor{32b}@anchor{gnat_rm/the_gnat_library id28}@anchor{32c} @section @code{Ada.Wide_Wide_Text_IO.Reset_Standard_Files} (@code{a-zrstfi.ads}) @@ -24041,7 +24261,7 @@ change during execution (for example a standard input file may be redefined to be interactive). @node GNAT Altivec g-altive ads,GNAT Altivec Conversions g-altcon ads,Ada Wide_Wide_Text_IO Reset_Standard_Files a-zrstfi ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-altivec-g-altive-ads}@anchor{32a}@anchor{gnat_rm/the_gnat_library id29}@anchor{32b} +@anchor{gnat_rm/the_gnat_library gnat-altivec-g-altive-ads}@anchor{32d}@anchor{gnat_rm/the_gnat_library id29}@anchor{32e} @section @code{GNAT.Altivec} (@code{g-altive.ads}) @@ -24054,7 +24274,7 @@ definitions of constants and types common to all the versions of the binding. @node GNAT Altivec Conversions g-altcon ads,GNAT Altivec Vector_Operations g-alveop ads,GNAT Altivec g-altive ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-altivec-conversions-g-altcon-ads}@anchor{32c}@anchor{gnat_rm/the_gnat_library id30}@anchor{32d} +@anchor{gnat_rm/the_gnat_library gnat-altivec-conversions-g-altcon-ads}@anchor{32f}@anchor{gnat_rm/the_gnat_library id30}@anchor{330} @section @code{GNAT.Altivec.Conversions} (@code{g-altcon.ads}) @@ -24065,7 +24285,7 @@ binding. This package provides the Vector/View conversion routines. @node GNAT Altivec Vector_Operations g-alveop ads,GNAT Altivec Vector_Types g-alvety ads,GNAT Altivec Conversions g-altcon ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-altivec-vector-operations-g-alveop-ads}@anchor{32e}@anchor{gnat_rm/the_gnat_library id31}@anchor{32f} +@anchor{gnat_rm/the_gnat_library gnat-altivec-vector-operations-g-alveop-ads}@anchor{331}@anchor{gnat_rm/the_gnat_library id31}@anchor{332} @section @code{GNAT.Altivec.Vector_Operations} (@code{g-alveop.ads}) @@ -24079,7 +24299,7 @@ library. The hard binding is provided as a separate package. This unit is common to both bindings. @node GNAT Altivec Vector_Types g-alvety ads,GNAT Altivec Vector_Views g-alvevi ads,GNAT Altivec Vector_Operations g-alveop ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-altivec-vector-types-g-alvety-ads}@anchor{330}@anchor{gnat_rm/the_gnat_library id32}@anchor{331} +@anchor{gnat_rm/the_gnat_library gnat-altivec-vector-types-g-alvety-ads}@anchor{333}@anchor{gnat_rm/the_gnat_library id32}@anchor{334} @section @code{GNAT.Altivec.Vector_Types} (@code{g-alvety.ads}) @@ -24091,7 +24311,7 @@ This package exposes the various vector types part of the Ada binding to AltiVec facilities. @node GNAT Altivec Vector_Views g-alvevi ads,GNAT Array_Split g-arrspl ads,GNAT Altivec Vector_Types g-alvety ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-altivec-vector-views-g-alvevi-ads}@anchor{332}@anchor{gnat_rm/the_gnat_library id33}@anchor{333} +@anchor{gnat_rm/the_gnat_library gnat-altivec-vector-views-g-alvevi-ads}@anchor{335}@anchor{gnat_rm/the_gnat_library id33}@anchor{336} @section @code{GNAT.Altivec.Vector_Views} (@code{g-alvevi.ads}) @@ -24106,7 +24326,7 @@ vector elements and provides a simple way to initialize vector objects. @node GNAT Array_Split g-arrspl ads,GNAT AWK g-awk ads,GNAT Altivec Vector_Views g-alvevi ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-array-split-g-arrspl-ads}@anchor{334}@anchor{gnat_rm/the_gnat_library id34}@anchor{335} +@anchor{gnat_rm/the_gnat_library gnat-array-split-g-arrspl-ads}@anchor{337}@anchor{gnat_rm/the_gnat_library id34}@anchor{338} @section @code{GNAT.Array_Split} (@code{g-arrspl.ads}) @@ -24119,7 +24339,7 @@ an array wherever the separators appear, and provide direct access to the resulting slices. @node GNAT AWK g-awk ads,GNAT Binary_Search g-binsea ads,GNAT Array_Split g-arrspl ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-awk-g-awk-ads}@anchor{336}@anchor{gnat_rm/the_gnat_library id35}@anchor{337} +@anchor{gnat_rm/the_gnat_library gnat-awk-g-awk-ads}@anchor{339}@anchor{gnat_rm/the_gnat_library id35}@anchor{33a} @section @code{GNAT.AWK} (@code{g-awk.ads}) @@ -24134,7 +24354,7 @@ or more files containing formatted data. The file is viewed as a database where each record is a line and a field is a data element in this line. @node GNAT Binary_Search g-binsea ads,GNAT Bind_Environment g-binenv ads,GNAT AWK g-awk ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-binary-search-g-binsea-ads}@anchor{338}@anchor{gnat_rm/the_gnat_library id36}@anchor{339} +@anchor{gnat_rm/the_gnat_library gnat-binary-search-g-binsea-ads}@anchor{33b}@anchor{gnat_rm/the_gnat_library id36}@anchor{33c} @section @code{GNAT.Binary_Search} (@code{g-binsea.ads}) @@ -24146,7 +24366,7 @@ Allow binary search of a sorted array (or of an array-like container; the generic does not reference the array directly). @node GNAT Bind_Environment g-binenv ads,GNAT Branch_Prediction g-brapre ads,GNAT Binary_Search g-binsea ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-bind-environment-g-binenv-ads}@anchor{33a}@anchor{gnat_rm/the_gnat_library id37}@anchor{33b} +@anchor{gnat_rm/the_gnat_library gnat-bind-environment-g-binenv-ads}@anchor{33d}@anchor{gnat_rm/the_gnat_library id37}@anchor{33e} @section @code{GNAT.Bind_Environment} (@code{g-binenv.ads}) @@ -24159,7 +24379,7 @@ These associations can be specified using the @code{-V} binder command line switch. @node GNAT Branch_Prediction g-brapre ads,GNAT Bounded_Buffers g-boubuf ads,GNAT Bind_Environment g-binenv ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-branch-prediction-g-brapre-ads}@anchor{33c}@anchor{gnat_rm/the_gnat_library id38}@anchor{33d} +@anchor{gnat_rm/the_gnat_library gnat-branch-prediction-g-brapre-ads}@anchor{33f}@anchor{gnat_rm/the_gnat_library id38}@anchor{340} @section @code{GNAT.Branch_Prediction} (@code{g-brapre.ads}) @@ -24170,7 +24390,7 @@ line switch. Provides routines giving hints to the branch predictor of the code generator. @node GNAT Bounded_Buffers g-boubuf ads,GNAT Bounded_Mailboxes g-boumai ads,GNAT Branch_Prediction g-brapre ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-bounded-buffers-g-boubuf-ads}@anchor{33e}@anchor{gnat_rm/the_gnat_library id39}@anchor{33f} +@anchor{gnat_rm/the_gnat_library gnat-bounded-buffers-g-boubuf-ads}@anchor{341}@anchor{gnat_rm/the_gnat_library id39}@anchor{342} @section @code{GNAT.Bounded_Buffers} (@code{g-boubuf.ads}) @@ -24185,7 +24405,7 @@ useful directly or as parts of the implementations of other abstractions, such as mailboxes. @node GNAT Bounded_Mailboxes g-boumai ads,GNAT Bubble_Sort g-bubsor ads,GNAT Bounded_Buffers g-boubuf ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-bounded-mailboxes-g-boumai-ads}@anchor{340}@anchor{gnat_rm/the_gnat_library id40}@anchor{341} +@anchor{gnat_rm/the_gnat_library gnat-bounded-mailboxes-g-boumai-ads}@anchor{343}@anchor{gnat_rm/the_gnat_library id40}@anchor{344} @section @code{GNAT.Bounded_Mailboxes} (@code{g-boumai.ads}) @@ -24198,7 +24418,7 @@ such as mailboxes. Provides a thread-safe asynchronous intertask mailbox communication facility. @node GNAT Bubble_Sort g-bubsor ads,GNAT Bubble_Sort_A g-busora ads,GNAT Bounded_Mailboxes g-boumai ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-bubble-sort-g-bubsor-ads}@anchor{342}@anchor{gnat_rm/the_gnat_library id41}@anchor{343} +@anchor{gnat_rm/the_gnat_library gnat-bubble-sort-g-bubsor-ads}@anchor{345}@anchor{gnat_rm/the_gnat_library id41}@anchor{346} @section @code{GNAT.Bubble_Sort} (@code{g-bubsor.ads}) @@ -24213,7 +24433,7 @@ data items. Exchange and comparison procedures are provided by passing access-to-procedure values. @node GNAT Bubble_Sort_A g-busora ads,GNAT Bubble_Sort_G g-busorg ads,GNAT Bubble_Sort g-bubsor ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-bubble-sort-a-g-busora-ads}@anchor{344}@anchor{gnat_rm/the_gnat_library id42}@anchor{345} +@anchor{gnat_rm/the_gnat_library gnat-bubble-sort-a-g-busora-ads}@anchor{347}@anchor{gnat_rm/the_gnat_library id42}@anchor{348} @section @code{GNAT.Bubble_Sort_A} (@code{g-busora.ads}) @@ -24229,7 +24449,7 @@ access-to-procedure values. This is an older version, retained for compatibility. Usually @code{GNAT.Bubble_Sort} will be preferable. @node GNAT Bubble_Sort_G g-busorg ads,GNAT Byte_Order_Mark g-byorma ads,GNAT Bubble_Sort_A g-busora ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-bubble-sort-g-g-busorg-ads}@anchor{346}@anchor{gnat_rm/the_gnat_library id43}@anchor{347} +@anchor{gnat_rm/the_gnat_library gnat-bubble-sort-g-g-busorg-ads}@anchor{349}@anchor{gnat_rm/the_gnat_library id43}@anchor{34a} @section @code{GNAT.Bubble_Sort_G} (@code{g-busorg.ads}) @@ -24245,7 +24465,7 @@ if the procedures can be inlined, at the expense of duplicating code for multiple instantiations. @node GNAT Byte_Order_Mark g-byorma ads,GNAT Byte_Swapping g-bytswa ads,GNAT Bubble_Sort_G g-busorg ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-byte-order-mark-g-byorma-ads}@anchor{348}@anchor{gnat_rm/the_gnat_library id44}@anchor{349} +@anchor{gnat_rm/the_gnat_library gnat-byte-order-mark-g-byorma-ads}@anchor{34b}@anchor{gnat_rm/the_gnat_library id44}@anchor{34c} @section @code{GNAT.Byte_Order_Mark} (@code{g-byorma.ads}) @@ -24260,8 +24480,8 @@ see whether it is one of the standard byte order marks (BOM’s) which signal the encoding of the string. The routine includes detection of special XML sequences for various UCS input formats. -@node GNAT Byte_Swapping g-bytswa ads,GNAT Calendar g-calend ads,GNAT Byte_Order_Mark g-byorma ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-byte-swapping-g-bytswa-ads}@anchor{34a}@anchor{gnat_rm/the_gnat_library id45}@anchor{34b} +@node GNAT Byte_Swapping g-bytswa ads,GNAT C_Time g-c_time ads,GNAT Byte_Order_Mark g-byorma ads,The GNAT Library +@anchor{gnat_rm/the_gnat_library gnat-byte-swapping-g-bytswa-ads}@anchor{34d}@anchor{gnat_rm/the_gnat_library id45}@anchor{34e} @section @code{GNAT.Byte_Swapping} (@code{g-bytswa.ads}) @@ -24274,8 +24494,20 @@ sequences for various UCS input formats. General routines for swapping the bytes in 2-, 4-, and 8-byte quantities. Machine-specific implementations are available in some cases. -@node GNAT Calendar g-calend ads,GNAT Calendar Time_IO g-catiio ads,GNAT Byte_Swapping g-bytswa ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-calendar-g-calend-ads}@anchor{34c}@anchor{gnat_rm/the_gnat_library id46}@anchor{34d} +@node GNAT C_Time g-c_time ads,GNAT Calendar g-calend ads,GNAT Byte_Swapping g-bytswa ads,The GNAT Library +@anchor{gnat_rm/the_gnat_library gnat-c-time-g-c-time-ads}@anchor{34f}@anchor{gnat_rm/the_gnat_library id46}@anchor{350} +@section @code{GNAT.C_Time} (@code{g-c_time.ads}) + + +@geindex GNAT.C_Time (g-c_time.ads) + +@geindex Time + +Provides the time_t, timeval and timespec types corresponding to the C +types defined by the OS, as well as various conversion functions. + +@node GNAT Calendar g-calend ads,GNAT Calendar Time_IO g-catiio ads,GNAT C_Time g-c_time ads,The GNAT Library +@anchor{gnat_rm/the_gnat_library gnat-calendar-g-calend-ads}@anchor{351}@anchor{gnat_rm/the_gnat_library id47}@anchor{352} @section @code{GNAT.Calendar} (@code{g-calend.ads}) @@ -24285,11 +24517,9 @@ Machine-specific implementations are available in some cases. Extends the facilities provided by @code{Ada.Calendar} to include handling of days of the week, an extended @code{Split} and @code{Time_Of} capability. -Also provides conversion of @code{Ada.Calendar.Time} values to and from the -C @code{timeval} format. @node GNAT Calendar Time_IO g-catiio ads,GNAT CRC32 g-crc32 ads,GNAT Calendar g-calend ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-calendar-time-io-g-catiio-ads}@anchor{34e}@anchor{gnat_rm/the_gnat_library id47}@anchor{34f} +@anchor{gnat_rm/the_gnat_library gnat-calendar-time-io-g-catiio-ads}@anchor{353}@anchor{gnat_rm/the_gnat_library id48}@anchor{354} @section @code{GNAT.Calendar.Time_IO} (@code{g-catiio.ads}) @@ -24300,7 +24530,7 @@ C @code{timeval} format. @geindex GNAT.Calendar.Time_IO (g-catiio.ads) @node GNAT CRC32 g-crc32 ads,GNAT Case_Util g-casuti ads,GNAT Calendar Time_IO g-catiio ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-crc32-g-crc32-ads}@anchor{350}@anchor{gnat_rm/the_gnat_library id48}@anchor{351} +@anchor{gnat_rm/the_gnat_library gnat-crc32-g-crc32-ads}@anchor{355}@anchor{gnat_rm/the_gnat_library id49}@anchor{356} @section @code{GNAT.CRC32} (@code{g-crc32.ads}) @@ -24317,7 +24547,7 @@ of this algorithm see Aug. 1988. Sarwate, D.V. @node GNAT Case_Util g-casuti ads,GNAT CGI g-cgi ads,GNAT CRC32 g-crc32 ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-case-util-g-casuti-ads}@anchor{352}@anchor{gnat_rm/the_gnat_library id49}@anchor{353} +@anchor{gnat_rm/the_gnat_library gnat-case-util-g-casuti-ads}@anchor{357}@anchor{gnat_rm/the_gnat_library id50}@anchor{358} @section @code{GNAT.Case_Util} (@code{g-casuti.ads}) @@ -24332,7 +24562,7 @@ without the overhead of the full casing tables in @code{Ada.Characters.Handling}. @node GNAT CGI g-cgi ads,GNAT CGI Cookie g-cgicoo ads,GNAT Case_Util g-casuti ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-cgi-g-cgi-ads}@anchor{354}@anchor{gnat_rm/the_gnat_library id50}@anchor{355} +@anchor{gnat_rm/the_gnat_library gnat-cgi-g-cgi-ads}@anchor{359}@anchor{gnat_rm/the_gnat_library id51}@anchor{35a} @section @code{GNAT.CGI} (@code{g-cgi.ads}) @@ -24347,7 +24577,7 @@ builds a table whose index is the key and provides some services to deal with this table. @node GNAT CGI Cookie g-cgicoo ads,GNAT CGI Debug g-cgideb ads,GNAT CGI g-cgi ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-cgi-cookie-g-cgicoo-ads}@anchor{356}@anchor{gnat_rm/the_gnat_library id51}@anchor{357} +@anchor{gnat_rm/the_gnat_library gnat-cgi-cookie-g-cgicoo-ads}@anchor{35b}@anchor{gnat_rm/the_gnat_library id52}@anchor{35c} @section @code{GNAT.CGI.Cookie} (@code{g-cgicoo.ads}) @@ -24362,7 +24592,7 @@ Common Gateway Interface (CGI). It exports services to deal with Web cookies (piece of information kept in the Web client software). @node GNAT CGI Debug g-cgideb ads,GNAT Command_Line g-comlin ads,GNAT CGI Cookie g-cgicoo ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-cgi-debug-g-cgideb-ads}@anchor{358}@anchor{gnat_rm/the_gnat_library id52}@anchor{359} +@anchor{gnat_rm/the_gnat_library gnat-cgi-debug-g-cgideb-ads}@anchor{35d}@anchor{gnat_rm/the_gnat_library id53}@anchor{35e} @section @code{GNAT.CGI.Debug} (@code{g-cgideb.ads}) @@ -24374,7 +24604,7 @@ This is a package to help debugging CGI (Common Gateway Interface) programs written in Ada. @node GNAT Command_Line g-comlin ads,GNAT Compiler_Version g-comver ads,GNAT CGI Debug g-cgideb ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-command-line-g-comlin-ads}@anchor{35a}@anchor{gnat_rm/the_gnat_library id53}@anchor{35b} +@anchor{gnat_rm/the_gnat_library gnat-command-line-g-comlin-ads}@anchor{35f}@anchor{gnat_rm/the_gnat_library id54}@anchor{360} @section @code{GNAT.Command_Line} (@code{g-comlin.ads}) @@ -24387,7 +24617,7 @@ including the ability to scan for named switches with optional parameters and expand file names using wildcard notations. @node GNAT Compiler_Version g-comver ads,GNAT Ctrl_C g-ctrl_c ads,GNAT Command_Line g-comlin ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-compiler-version-g-comver-ads}@anchor{35c}@anchor{gnat_rm/the_gnat_library id54}@anchor{35d} +@anchor{gnat_rm/the_gnat_library gnat-compiler-version-g-comver-ads}@anchor{361}@anchor{gnat_rm/the_gnat_library id55}@anchor{362} @section @code{GNAT.Compiler_Version} (@code{g-comver.ads}) @@ -24405,7 +24635,7 @@ of the compiler if a consistent tool set is used to compile all units of a partition). @node GNAT Ctrl_C g-ctrl_c ads,GNAT Current_Exception g-curexc ads,GNAT Compiler_Version g-comver ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-ctrl-c-g-ctrl-c-ads}@anchor{35e}@anchor{gnat_rm/the_gnat_library id55}@anchor{35f} +@anchor{gnat_rm/the_gnat_library gnat-ctrl-c-g-ctrl-c-ads}@anchor{363}@anchor{gnat_rm/the_gnat_library id56}@anchor{364} @section @code{GNAT.Ctrl_C} (@code{g-ctrl_c.ads}) @@ -24416,7 +24646,7 @@ of a partition). Provides a simple interface to handle Ctrl-C keyboard events. @node GNAT Current_Exception g-curexc ads,GNAT Debug_Pools g-debpoo ads,GNAT Ctrl_C g-ctrl_c ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-current-exception-g-curexc-ads}@anchor{360}@anchor{gnat_rm/the_gnat_library id56}@anchor{361} +@anchor{gnat_rm/the_gnat_library gnat-current-exception-g-curexc-ads}@anchor{365}@anchor{gnat_rm/the_gnat_library id57}@anchor{366} @section @code{GNAT.Current_Exception} (@code{g-curexc.ads}) @@ -24433,7 +24663,7 @@ This is particularly useful in simulating typical facilities for obtaining information about exceptions provided by Ada 83 compilers. @node GNAT Debug_Pools g-debpoo ads,GNAT Debug_Utilities g-debuti ads,GNAT Current_Exception g-curexc ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-debug-pools-g-debpoo-ads}@anchor{362}@anchor{gnat_rm/the_gnat_library id57}@anchor{363} +@anchor{gnat_rm/the_gnat_library gnat-debug-pools-g-debpoo-ads}@anchor{367}@anchor{gnat_rm/the_gnat_library id58}@anchor{368} @section @code{GNAT.Debug_Pools} (@code{g-debpoo.ads}) @@ -24450,7 +24680,7 @@ problems. See @code{The GNAT Debug_Pool Facility} section in the @cite{GNAT User’s Guide}. @node GNAT Debug_Utilities g-debuti ads,GNAT Decode_String g-decstr ads,GNAT Debug_Pools g-debpoo ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-debug-utilities-g-debuti-ads}@anchor{364}@anchor{gnat_rm/the_gnat_library id58}@anchor{365} +@anchor{gnat_rm/the_gnat_library gnat-debug-utilities-g-debuti-ads}@anchor{369}@anchor{gnat_rm/the_gnat_library id59}@anchor{36a} @section @code{GNAT.Debug_Utilities} (@code{g-debuti.ads}) @@ -24463,7 +24693,7 @@ to and from string images of address values. Supports both C and Ada formats for hexadecimal literals. @node GNAT Decode_String g-decstr ads,GNAT Decode_UTF8_String g-deutst ads,GNAT Debug_Utilities g-debuti ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-decode-string-g-decstr-ads}@anchor{366}@anchor{gnat_rm/the_gnat_library id59}@anchor{367} +@anchor{gnat_rm/the_gnat_library gnat-decode-string-g-decstr-ads}@anchor{36b}@anchor{gnat_rm/the_gnat_library id60}@anchor{36c} @section @code{GNAT.Decode_String} (@code{g-decstr.ads}) @@ -24487,7 +24717,7 @@ Useful in conjunction with Unicode character coding. Note there is a preinstantiation for UTF-8. See next entry. @node GNAT Decode_UTF8_String g-deutst ads,GNAT Directory_Operations g-dirope ads,GNAT Decode_String g-decstr ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-decode-utf8-string-g-deutst-ads}@anchor{368}@anchor{gnat_rm/the_gnat_library id60}@anchor{369} +@anchor{gnat_rm/the_gnat_library gnat-decode-utf8-string-g-deutst-ads}@anchor{36d}@anchor{gnat_rm/the_gnat_library id61}@anchor{36e} @section @code{GNAT.Decode_UTF8_String} (@code{g-deutst.ads}) @@ -24508,7 +24738,7 @@ preinstantiation for UTF-8. See next entry. A preinstantiation of GNAT.Decode_Strings for UTF-8 encoding. @node GNAT Directory_Operations g-dirope ads,GNAT Directory_Operations Iteration g-diopit ads,GNAT Decode_UTF8_String g-deutst ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-directory-operations-g-dirope-ads}@anchor{36a}@anchor{gnat_rm/the_gnat_library id61}@anchor{36b} +@anchor{gnat_rm/the_gnat_library gnat-directory-operations-g-dirope-ads}@anchor{36f}@anchor{gnat_rm/the_gnat_library id62}@anchor{370} @section @code{GNAT.Directory_Operations} (@code{g-dirope.ads}) @@ -24521,7 +24751,7 @@ the current directory, making new directories, and scanning the files in a directory. @node GNAT Directory_Operations Iteration g-diopit ads,GNAT Dynamic_HTables g-dynhta ads,GNAT Directory_Operations g-dirope ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-directory-operations-iteration-g-diopit-ads}@anchor{36c}@anchor{gnat_rm/the_gnat_library id62}@anchor{36d} +@anchor{gnat_rm/the_gnat_library gnat-directory-operations-iteration-g-diopit-ads}@anchor{371}@anchor{gnat_rm/the_gnat_library id63}@anchor{372} @section @code{GNAT.Directory_Operations.Iteration} (@code{g-diopit.ads}) @@ -24533,7 +24763,7 @@ A child unit of GNAT.Directory_Operations providing additional operations for iterating through directories. @node GNAT Dynamic_HTables g-dynhta ads,GNAT Dynamic_Tables g-dyntab ads,GNAT Directory_Operations Iteration g-diopit ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-dynamic-htables-g-dynhta-ads}@anchor{36e}@anchor{gnat_rm/the_gnat_library id63}@anchor{36f} +@anchor{gnat_rm/the_gnat_library gnat-dynamic-htables-g-dynhta-ads}@anchor{373}@anchor{gnat_rm/the_gnat_library id64}@anchor{374} @section @code{GNAT.Dynamic_HTables} (@code{g-dynhta.ads}) @@ -24551,7 +24781,7 @@ dynamic instances of the hash table, while an instantiation of @code{GNAT.HTable} creates a single instance of the hash table. @node GNAT Dynamic_Tables g-dyntab ads,GNAT Encode_String g-encstr ads,GNAT Dynamic_HTables g-dynhta ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-dynamic-tables-g-dyntab-ads}@anchor{370}@anchor{gnat_rm/the_gnat_library id64}@anchor{371} +@anchor{gnat_rm/the_gnat_library gnat-dynamic-tables-g-dyntab-ads}@anchor{375}@anchor{gnat_rm/the_gnat_library id65}@anchor{376} @section @code{GNAT.Dynamic_Tables} (@code{g-dyntab.ads}) @@ -24571,7 +24801,7 @@ dynamic instances of the table, while an instantiation of @code{GNAT.Table} creates a single instance of the table type. @node GNAT Encode_String g-encstr ads,GNAT Encode_UTF8_String g-enutst ads,GNAT Dynamic_Tables g-dyntab ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-encode-string-g-encstr-ads}@anchor{372}@anchor{gnat_rm/the_gnat_library id65}@anchor{373} +@anchor{gnat_rm/the_gnat_library gnat-encode-string-g-encstr-ads}@anchor{377}@anchor{gnat_rm/the_gnat_library id66}@anchor{378} @section @code{GNAT.Encode_String} (@code{g-encstr.ads}) @@ -24593,7 +24823,7 @@ encoding method. Useful in conjunction with Unicode character coding. Note there is a preinstantiation for UTF-8. See next entry. @node GNAT Encode_UTF8_String g-enutst ads,GNAT Exception_Actions g-excact ads,GNAT Encode_String g-encstr ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-encode-utf8-string-g-enutst-ads}@anchor{374}@anchor{gnat_rm/the_gnat_library id66}@anchor{375} +@anchor{gnat_rm/the_gnat_library gnat-encode-utf8-string-g-enutst-ads}@anchor{379}@anchor{gnat_rm/the_gnat_library id67}@anchor{37a} @section @code{GNAT.Encode_UTF8_String} (@code{g-enutst.ads}) @@ -24614,7 +24844,7 @@ Note there is a preinstantiation for UTF-8. See next entry. A preinstantiation of GNAT.Encode_Strings for UTF-8 encoding. @node GNAT Exception_Actions g-excact ads,GNAT Exception_Traces g-exctra ads,GNAT Encode_UTF8_String g-enutst ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-exception-actions-g-excact-ads}@anchor{376}@anchor{gnat_rm/the_gnat_library id67}@anchor{377} +@anchor{gnat_rm/the_gnat_library gnat-exception-actions-g-excact-ads}@anchor{37b}@anchor{gnat_rm/the_gnat_library id68}@anchor{37c} @section @code{GNAT.Exception_Actions} (@code{g-excact.ads}) @@ -24627,7 +24857,7 @@ for specific exceptions, or when any exception is raised. This can be used for instance to force a core dump to ease debugging. @node GNAT Exception_Traces g-exctra ads,GNAT Exceptions g-except ads,GNAT Exception_Actions g-excact ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-exception-traces-g-exctra-ads}@anchor{378}@anchor{gnat_rm/the_gnat_library id68}@anchor{379} +@anchor{gnat_rm/the_gnat_library gnat-exception-traces-g-exctra-ads}@anchor{37d}@anchor{gnat_rm/the_gnat_library id69}@anchor{37e} @section @code{GNAT.Exception_Traces} (@code{g-exctra.ads}) @@ -24641,7 +24871,7 @@ Provides an interface allowing to control automatic output upon exception occurrences. @node GNAT Exceptions g-except ads,GNAT Expect g-expect ads,GNAT Exception_Traces g-exctra ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-exceptions-g-except-ads}@anchor{37a}@anchor{gnat_rm/the_gnat_library id69}@anchor{37b} +@anchor{gnat_rm/the_gnat_library gnat-exceptions-g-except-ads}@anchor{37f}@anchor{gnat_rm/the_gnat_library id70}@anchor{380} @section @code{GNAT.Exceptions} (@code{g-except.ads}) @@ -24662,7 +24892,7 @@ predefined exceptions, and for example allows raising @code{Constraint_Error} with a message from a pure subprogram. @node GNAT Expect g-expect ads,GNAT Expect TTY g-exptty ads,GNAT Exceptions g-except ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-expect-g-expect-ads}@anchor{37c}@anchor{gnat_rm/the_gnat_library id70}@anchor{37d} +@anchor{gnat_rm/the_gnat_library gnat-expect-g-expect-ads}@anchor{381}@anchor{gnat_rm/the_gnat_library id71}@anchor{382} @section @code{GNAT.Expect} (@code{g-expect.ads}) @@ -24678,7 +24908,7 @@ It is not implemented for cross ports, and in particular is not implemented for VxWorks or LynxOS. @node GNAT Expect TTY g-exptty ads,GNAT Float_Control g-flocon ads,GNAT Expect g-expect ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-expect-tty-g-exptty-ads}@anchor{37e}@anchor{gnat_rm/the_gnat_library id71}@anchor{37f} +@anchor{gnat_rm/the_gnat_library gnat-expect-tty-g-exptty-ads}@anchor{383}@anchor{gnat_rm/the_gnat_library id72}@anchor{384} @section @code{GNAT.Expect.TTY} (@code{g-exptty.ads}) @@ -24690,7 +24920,7 @@ ports. It is not implemented for cross ports, and in particular is not implemented for VxWorks or LynxOS. @node GNAT Float_Control g-flocon ads,GNAT Formatted_String g-forstr ads,GNAT Expect TTY g-exptty ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-float-control-g-flocon-ads}@anchor{380}@anchor{gnat_rm/the_gnat_library id72}@anchor{381} +@anchor{gnat_rm/the_gnat_library gnat-float-control-g-flocon-ads}@anchor{385}@anchor{gnat_rm/the_gnat_library id73}@anchor{386} @section @code{GNAT.Float_Control} (@code{g-flocon.ads}) @@ -24704,7 +24934,7 @@ library calls may cause this mode to be modified, and the Reset procedure in this package can be used to reestablish the required mode. @node GNAT Formatted_String g-forstr ads,GNAT Generic_Fast_Math_Functions g-gfmafu ads,GNAT Float_Control g-flocon ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-formatted-string-g-forstr-ads}@anchor{382}@anchor{gnat_rm/the_gnat_library id73}@anchor{383} +@anchor{gnat_rm/the_gnat_library gnat-formatted-string-g-forstr-ads}@anchor{387}@anchor{gnat_rm/the_gnat_library id74}@anchor{388} @section @code{GNAT.Formatted_String} (@code{g-forstr.ads}) @@ -24719,7 +24949,7 @@ derived from Integer, Float or enumerations as values for the formatted string. @node GNAT Generic_Fast_Math_Functions g-gfmafu ads,GNAT Heap_Sort g-heasor ads,GNAT Formatted_String g-forstr ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-generic-fast-math-functions-g-gfmafu-ads}@anchor{384}@anchor{gnat_rm/the_gnat_library id74}@anchor{385} +@anchor{gnat_rm/the_gnat_library gnat-generic-fast-math-functions-g-gfmafu-ads}@anchor{389}@anchor{gnat_rm/the_gnat_library id75}@anchor{38a} @section @code{GNAT.Generic_Fast_Math_Functions} (@code{g-gfmafu.ads}) @@ -24737,7 +24967,7 @@ have a vector implementation that can be automatically used by the compiler when auto-vectorization is enabled. @node GNAT Heap_Sort g-heasor ads,GNAT Heap_Sort_A g-hesora ads,GNAT Generic_Fast_Math_Functions g-gfmafu ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-heap-sort-g-heasor-ads}@anchor{386}@anchor{gnat_rm/the_gnat_library id75}@anchor{387} +@anchor{gnat_rm/the_gnat_library gnat-heap-sort-g-heasor-ads}@anchor{38b}@anchor{gnat_rm/the_gnat_library id76}@anchor{38c} @section @code{GNAT.Heap_Sort} (@code{g-heasor.ads}) @@ -24751,7 +24981,7 @@ access-to-procedure values. The algorithm used is a modified heap sort that performs approximately N*log(N) comparisons in the worst case. @node GNAT Heap_Sort_A g-hesora ads,GNAT Heap_Sort_G g-hesorg ads,GNAT Heap_Sort g-heasor ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-heap-sort-a-g-hesora-ads}@anchor{388}@anchor{gnat_rm/the_gnat_library id76}@anchor{389} +@anchor{gnat_rm/the_gnat_library gnat-heap-sort-a-g-hesora-ads}@anchor{38d}@anchor{gnat_rm/the_gnat_library id77}@anchor{38e} @section @code{GNAT.Heap_Sort_A} (@code{g-hesora.ads}) @@ -24767,7 +24997,7 @@ This differs from @code{GNAT.Heap_Sort} in having a less convenient interface, but may be slightly more efficient. @node GNAT Heap_Sort_G g-hesorg ads,GNAT HTable g-htable ads,GNAT Heap_Sort_A g-hesora ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-heap-sort-g-g-hesorg-ads}@anchor{38a}@anchor{gnat_rm/the_gnat_library id77}@anchor{38b} +@anchor{gnat_rm/the_gnat_library gnat-heap-sort-g-g-hesorg-ads}@anchor{38f}@anchor{gnat_rm/the_gnat_library id78}@anchor{390} @section @code{GNAT.Heap_Sort_G} (@code{g-hesorg.ads}) @@ -24781,7 +25011,7 @@ if the procedures can be inlined, at the expense of duplicating code for multiple instantiations. @node GNAT HTable g-htable ads,GNAT IO g-io ads,GNAT Heap_Sort_G g-hesorg ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-htable-g-htable-ads}@anchor{38c}@anchor{gnat_rm/the_gnat_library id78}@anchor{38d} +@anchor{gnat_rm/the_gnat_library gnat-htable-g-htable-ads}@anchor{391}@anchor{gnat_rm/the_gnat_library id79}@anchor{392} @section @code{GNAT.HTable} (@code{g-htable.ads}) @@ -24794,7 +25024,7 @@ data. Provides two approaches, one a simple static approach, and the other allowing arbitrary dynamic hash tables. @node GNAT IO g-io ads,GNAT IO_Aux g-io_aux ads,GNAT HTable g-htable ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-io-g-io-ads}@anchor{38e}@anchor{gnat_rm/the_gnat_library id79}@anchor{38f} +@anchor{gnat_rm/the_gnat_library gnat-io-g-io-ads}@anchor{393}@anchor{gnat_rm/the_gnat_library id80}@anchor{394} @section @code{GNAT.IO} (@code{g-io.ads}) @@ -24810,7 +25040,7 @@ Standard_Input, and writing characters, strings and integers to either Standard_Output or Standard_Error. @node GNAT IO_Aux g-io_aux ads,GNAT Lock_Files g-locfil ads,GNAT IO g-io ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-io-aux-g-io-aux-ads}@anchor{390}@anchor{gnat_rm/the_gnat_library id80}@anchor{391} +@anchor{gnat_rm/the_gnat_library gnat-io-aux-g-io-aux-ads}@anchor{395}@anchor{gnat_rm/the_gnat_library id81}@anchor{396} @section @code{GNAT.IO_Aux} (@code{g-io_aux.ads}) @@ -24824,7 +25054,7 @@ Provides some auxiliary functions for use with Text_IO, including a test for whether a file exists, and functions for reading a line of text. @node GNAT Lock_Files g-locfil ads,GNAT MBBS_Discrete_Random g-mbdira ads,GNAT IO_Aux g-io_aux ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-lock-files-g-locfil-ads}@anchor{392}@anchor{gnat_rm/the_gnat_library id81}@anchor{393} +@anchor{gnat_rm/the_gnat_library gnat-lock-files-g-locfil-ads}@anchor{397}@anchor{gnat_rm/the_gnat_library id82}@anchor{398} @section @code{GNAT.Lock_Files} (@code{g-locfil.ads}) @@ -24838,7 +25068,7 @@ Provides a general interface for using files as locks. Can be used for providing program level synchronization. @node GNAT MBBS_Discrete_Random g-mbdira ads,GNAT MBBS_Float_Random g-mbflra ads,GNAT Lock_Files g-locfil ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-mbbs-discrete-random-g-mbdira-ads}@anchor{394}@anchor{gnat_rm/the_gnat_library id82}@anchor{395} +@anchor{gnat_rm/the_gnat_library gnat-mbbs-discrete-random-g-mbdira-ads}@anchor{399}@anchor{gnat_rm/the_gnat_library id83}@anchor{39a} @section @code{GNAT.MBBS_Discrete_Random} (@code{g-mbdira.ads}) @@ -24850,7 +25080,7 @@ The original implementation of @code{Ada.Numerics.Discrete_Random}. Uses a modified version of the Blum-Blum-Shub generator. @node GNAT MBBS_Float_Random g-mbflra ads,GNAT MD5 g-md5 ads,GNAT MBBS_Discrete_Random g-mbdira ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-mbbs-float-random-g-mbflra-ads}@anchor{396}@anchor{gnat_rm/the_gnat_library id83}@anchor{397} +@anchor{gnat_rm/the_gnat_library gnat-mbbs-float-random-g-mbflra-ads}@anchor{39b}@anchor{gnat_rm/the_gnat_library id84}@anchor{39c} @section @code{GNAT.MBBS_Float_Random} (@code{g-mbflra.ads}) @@ -24862,7 +25092,7 @@ The original implementation of @code{Ada.Numerics.Float_Random}. Uses a modified version of the Blum-Blum-Shub generator. @node GNAT MD5 g-md5 ads,GNAT Memory_Dump g-memdum ads,GNAT MBBS_Float_Random g-mbflra ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-md5-g-md5-ads}@anchor{398}@anchor{gnat_rm/the_gnat_library id84}@anchor{399} +@anchor{gnat_rm/the_gnat_library gnat-md5-g-md5-ads}@anchor{39d}@anchor{gnat_rm/the_gnat_library id85}@anchor{39e} @section @code{GNAT.MD5} (@code{g-md5.ads}) @@ -24875,7 +25105,7 @@ the HMAC-MD5 message authentication function as described in RFC 2104 and FIPS PUB 198. @node GNAT Memory_Dump g-memdum ads,GNAT Most_Recent_Exception g-moreex ads,GNAT MD5 g-md5 ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-memory-dump-g-memdum-ads}@anchor{39a}@anchor{gnat_rm/the_gnat_library id85}@anchor{39b} +@anchor{gnat_rm/the_gnat_library gnat-memory-dump-g-memdum-ads}@anchor{39f}@anchor{gnat_rm/the_gnat_library id86}@anchor{3a0} @section @code{GNAT.Memory_Dump} (@code{g-memdum.ads}) @@ -24888,7 +25118,7 @@ standard output or standard error files. Uses GNAT.IO for actual output. @node GNAT Most_Recent_Exception g-moreex ads,GNAT OS_Lib g-os_lib ads,GNAT Memory_Dump g-memdum ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-most-recent-exception-g-moreex-ads}@anchor{39c}@anchor{gnat_rm/the_gnat_library id86}@anchor{39d} +@anchor{gnat_rm/the_gnat_library gnat-most-recent-exception-g-moreex-ads}@anchor{3a1}@anchor{gnat_rm/the_gnat_library id87}@anchor{3a2} @section @code{GNAT.Most_Recent_Exception} (@code{g-moreex.ads}) @@ -24902,7 +25132,7 @@ various logging purposes, including duplicating functionality of some Ada 83 implementation dependent extensions. @node GNAT OS_Lib g-os_lib ads,GNAT Perfect_Hash_Generators g-pehage ads,GNAT Most_Recent_Exception g-moreex ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-os-lib-g-os-lib-ads}@anchor{39e}@anchor{gnat_rm/the_gnat_library id87}@anchor{39f} +@anchor{gnat_rm/the_gnat_library gnat-os-lib-g-os-lib-ads}@anchor{3a3}@anchor{gnat_rm/the_gnat_library id88}@anchor{3a4} @section @code{GNAT.OS_Lib} (@code{g-os_lib.ads}) @@ -24918,7 +25148,7 @@ including a portable spawn procedure, and access to environment variables and error return codes. @node GNAT Perfect_Hash_Generators g-pehage ads,GNAT Random_Numbers g-rannum ads,GNAT OS_Lib g-os_lib ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-perfect-hash-generators-g-pehage-ads}@anchor{3a0}@anchor{gnat_rm/the_gnat_library id88}@anchor{3a1} +@anchor{gnat_rm/the_gnat_library gnat-perfect-hash-generators-g-pehage-ads}@anchor{3a5}@anchor{gnat_rm/the_gnat_library id89}@anchor{3a6} @section @code{GNAT.Perfect_Hash_Generators} (@code{g-pehage.ads}) @@ -24936,7 +25166,7 @@ hashcode are in the same order. These hashing functions are very convenient for use with realtime applications. @node GNAT Random_Numbers g-rannum ads,GNAT Regexp g-regexp ads,GNAT Perfect_Hash_Generators g-pehage ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-random-numbers-g-rannum-ads}@anchor{3a2}@anchor{gnat_rm/the_gnat_library id89}@anchor{3a3} +@anchor{gnat_rm/the_gnat_library gnat-random-numbers-g-rannum-ads}@anchor{3a7}@anchor{gnat_rm/the_gnat_library id90}@anchor{3a8} @section @code{GNAT.Random_Numbers} (@code{g-rannum.ads}) @@ -24950,7 +25180,7 @@ however NOT suitable for situations requiring cryptographically secure randomness. @node GNAT Regexp g-regexp ads,GNAT Registry g-regist ads,GNAT Random_Numbers g-rannum ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-regexp-g-regexp-ads}@anchor{279}@anchor{gnat_rm/the_gnat_library id90}@anchor{3a4} +@anchor{gnat_rm/the_gnat_library gnat-regexp-g-regexp-ads}@anchor{27c}@anchor{gnat_rm/the_gnat_library id91}@anchor{3a9} @section @code{GNAT.Regexp} (@code{g-regexp.ads}) @@ -24966,7 +25196,7 @@ simplest of the three pattern matching packages provided, and is particularly suitable for ‘file globbing’ applications. @node GNAT Registry g-regist ads,GNAT Regpat g-regpat ads,GNAT Regexp g-regexp ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-registry-g-regist-ads}@anchor{3a5}@anchor{gnat_rm/the_gnat_library id91}@anchor{3a6} +@anchor{gnat_rm/the_gnat_library gnat-registry-g-regist-ads}@anchor{3aa}@anchor{gnat_rm/the_gnat_library id92}@anchor{3ab} @section @code{GNAT.Registry} (@code{g-regist.ads}) @@ -24980,7 +25210,7 @@ registry API, but at a lower level of abstraction, refer to the Win32.Winreg package provided with the Win32Ada binding @node GNAT Regpat g-regpat ads,GNAT Rewrite_Data g-rewdat ads,GNAT Registry g-regist ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-regpat-g-regpat-ads}@anchor{3a7}@anchor{gnat_rm/the_gnat_library id92}@anchor{3a8} +@anchor{gnat_rm/the_gnat_library gnat-regpat-g-regpat-ads}@anchor{3ac}@anchor{gnat_rm/the_gnat_library id93}@anchor{3ad} @section @code{GNAT.Regpat} (@code{g-regpat.ads}) @@ -24995,7 +25225,7 @@ from the original V7 style regular expression library written in C by Henry Spencer (and binary compatible with this C library). @node GNAT Rewrite_Data g-rewdat ads,GNAT Secondary_Stack_Info g-sestin ads,GNAT Regpat g-regpat ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-rewrite-data-g-rewdat-ads}@anchor{3a9}@anchor{gnat_rm/the_gnat_library id93}@anchor{3aa} +@anchor{gnat_rm/the_gnat_library gnat-rewrite-data-g-rewdat-ads}@anchor{3ae}@anchor{gnat_rm/the_gnat_library id94}@anchor{3af} @section @code{GNAT.Rewrite_Data} (@code{g-rewdat.ads}) @@ -25009,7 +25239,7 @@ full content to be processed is not loaded into memory all at once. This makes this interface usable for large files or socket streams. @node GNAT Secondary_Stack_Info g-sestin ads,GNAT Semaphores g-semaph ads,GNAT Rewrite_Data g-rewdat ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-secondary-stack-info-g-sestin-ads}@anchor{3ab}@anchor{gnat_rm/the_gnat_library id94}@anchor{3ac} +@anchor{gnat_rm/the_gnat_library gnat-secondary-stack-info-g-sestin-ads}@anchor{3b0}@anchor{gnat_rm/the_gnat_library id95}@anchor{3b1} @section @code{GNAT.Secondary_Stack_Info} (@code{g-sestin.ads}) @@ -25021,7 +25251,7 @@ Provides the capability to query the high water mark of the current task’s secondary stack. @node GNAT Semaphores g-semaph ads,GNAT Serial_Communications g-sercom ads,GNAT Secondary_Stack_Info g-sestin ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-semaphores-g-semaph-ads}@anchor{3ad}@anchor{gnat_rm/the_gnat_library id95}@anchor{3ae} +@anchor{gnat_rm/the_gnat_library gnat-semaphores-g-semaph-ads}@anchor{3b2}@anchor{gnat_rm/the_gnat_library id96}@anchor{3b3} @section @code{GNAT.Semaphores} (@code{g-semaph.ads}) @@ -25032,7 +25262,7 @@ secondary stack. Provides classic counting and binary semaphores using protected types. @node GNAT Serial_Communications g-sercom ads,GNAT SHA1 g-sha1 ads,GNAT Semaphores g-semaph ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-serial-communications-g-sercom-ads}@anchor{3af}@anchor{gnat_rm/the_gnat_library id96}@anchor{3b0} +@anchor{gnat_rm/the_gnat_library gnat-serial-communications-g-sercom-ads}@anchor{3b4}@anchor{gnat_rm/the_gnat_library id97}@anchor{3b5} @section @code{GNAT.Serial_Communications} (@code{g-sercom.ads}) @@ -25044,7 +25274,7 @@ Provides a simple interface to send and receive data over a serial port. This is only supported on GNU/Linux and Windows. @node GNAT SHA1 g-sha1 ads,GNAT SHA224 g-sha224 ads,GNAT Serial_Communications g-sercom ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-sha1-g-sha1-ads}@anchor{3b1}@anchor{gnat_rm/the_gnat_library id97}@anchor{3b2} +@anchor{gnat_rm/the_gnat_library gnat-sha1-g-sha1-ads}@anchor{3b6}@anchor{gnat_rm/the_gnat_library id98}@anchor{3b7} @section @code{GNAT.SHA1} (@code{g-sha1.ads}) @@ -25057,7 +25287,7 @@ and RFC 3174, and the HMAC-SHA1 message authentication function as described in RFC 2104 and FIPS PUB 198. @node GNAT SHA224 g-sha224 ads,GNAT SHA256 g-sha256 ads,GNAT SHA1 g-sha1 ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-sha224-g-sha224-ads}@anchor{3b3}@anchor{gnat_rm/the_gnat_library id98}@anchor{3b4} +@anchor{gnat_rm/the_gnat_library gnat-sha224-g-sha224-ads}@anchor{3b8}@anchor{gnat_rm/the_gnat_library id99}@anchor{3b9} @section @code{GNAT.SHA224} (@code{g-sha224.ads}) @@ -25070,7 +25300,7 @@ and the HMAC-SHA224 message authentication function as described in RFC 2104 and FIPS PUB 198. @node GNAT SHA256 g-sha256 ads,GNAT SHA384 g-sha384 ads,GNAT SHA224 g-sha224 ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-sha256-g-sha256-ads}@anchor{3b5}@anchor{gnat_rm/the_gnat_library id99}@anchor{3b6} +@anchor{gnat_rm/the_gnat_library gnat-sha256-g-sha256-ads}@anchor{3ba}@anchor{gnat_rm/the_gnat_library id100}@anchor{3bb} @section @code{GNAT.SHA256} (@code{g-sha256.ads}) @@ -25083,7 +25313,7 @@ and the HMAC-SHA256 message authentication function as described in RFC 2104 and FIPS PUB 198. @node GNAT SHA384 g-sha384 ads,GNAT SHA512 g-sha512 ads,GNAT SHA256 g-sha256 ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-sha384-g-sha384-ads}@anchor{3b7}@anchor{gnat_rm/the_gnat_library id100}@anchor{3b8} +@anchor{gnat_rm/the_gnat_library gnat-sha384-g-sha384-ads}@anchor{3bc}@anchor{gnat_rm/the_gnat_library id101}@anchor{3bd} @section @code{GNAT.SHA384} (@code{g-sha384.ads}) @@ -25096,7 +25326,7 @@ and the HMAC-SHA384 message authentication function as described in RFC 2104 and FIPS PUB 198. @node GNAT SHA512 g-sha512 ads,GNAT Signals g-signal ads,GNAT SHA384 g-sha384 ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-sha512-g-sha512-ads}@anchor{3b9}@anchor{gnat_rm/the_gnat_library id101}@anchor{3ba} +@anchor{gnat_rm/the_gnat_library gnat-sha512-g-sha512-ads}@anchor{3be}@anchor{gnat_rm/the_gnat_library id102}@anchor{3bf} @section @code{GNAT.SHA512} (@code{g-sha512.ads}) @@ -25109,7 +25339,7 @@ and the HMAC-SHA512 message authentication function as described in RFC 2104 and FIPS PUB 198. @node GNAT Signals g-signal ads,GNAT Sockets g-socket ads,GNAT SHA512 g-sha512 ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-signals-g-signal-ads}@anchor{3bb}@anchor{gnat_rm/the_gnat_library id102}@anchor{3bc} +@anchor{gnat_rm/the_gnat_library gnat-signals-g-signal-ads}@anchor{3c0}@anchor{gnat_rm/the_gnat_library id103}@anchor{3c1} @section @code{GNAT.Signals} (@code{g-signal.ads}) @@ -25121,7 +25351,7 @@ Provides the ability to manipulate the blocked status of signals on supported targets. @node GNAT Sockets g-socket ads,GNAT Source_Info g-souinf ads,GNAT Signals g-signal ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-sockets-g-socket-ads}@anchor{3bd}@anchor{gnat_rm/the_gnat_library id103}@anchor{3be} +@anchor{gnat_rm/the_gnat_library gnat-sockets-g-socket-ads}@anchor{3c2}@anchor{gnat_rm/the_gnat_library id104}@anchor{3c3} @section @code{GNAT.Sockets} (@code{g-socket.ads}) @@ -25136,7 +25366,7 @@ on all native GNAT ports and on VxWorks cross ports. It is not implemented for the LynxOS cross port. @node GNAT Source_Info g-souinf ads,GNAT Spelling_Checker g-speche ads,GNAT Sockets g-socket ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-source-info-g-souinf-ads}@anchor{3bf}@anchor{gnat_rm/the_gnat_library id104}@anchor{3c0} +@anchor{gnat_rm/the_gnat_library gnat-source-info-g-souinf-ads}@anchor{3c4}@anchor{gnat_rm/the_gnat_library id105}@anchor{3c5} @section @code{GNAT.Source_Info} (@code{g-souinf.ads}) @@ -25150,7 +25380,7 @@ subprograms yielding the date and time of the current compilation (like the C macros @code{__DATE__} and @code{__TIME__}) @node GNAT Spelling_Checker g-speche ads,GNAT Spelling_Checker_Generic g-spchge ads,GNAT Source_Info g-souinf ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-spelling-checker-g-speche-ads}@anchor{3c1}@anchor{gnat_rm/the_gnat_library id105}@anchor{3c2} +@anchor{gnat_rm/the_gnat_library gnat-spelling-checker-g-speche-ads}@anchor{3c6}@anchor{gnat_rm/the_gnat_library id106}@anchor{3c7} @section @code{GNAT.Spelling_Checker} (@code{g-speche.ads}) @@ -25162,7 +25392,7 @@ Provides a function for determining whether one string is a plausible near misspelling of another string. @node GNAT Spelling_Checker_Generic g-spchge ads,GNAT Spitbol Patterns g-spipat ads,GNAT Spelling_Checker g-speche ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-spelling-checker-generic-g-spchge-ads}@anchor{3c3}@anchor{gnat_rm/the_gnat_library id106}@anchor{3c4} +@anchor{gnat_rm/the_gnat_library gnat-spelling-checker-generic-g-spchge-ads}@anchor{3c8}@anchor{gnat_rm/the_gnat_library id107}@anchor{3c9} @section @code{GNAT.Spelling_Checker_Generic} (@code{g-spchge.ads}) @@ -25175,7 +25405,7 @@ determining whether one string is a plausible near misspelling of another string. @node GNAT Spitbol Patterns g-spipat ads,GNAT Spitbol g-spitbo ads,GNAT Spelling_Checker_Generic g-spchge ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-spitbol-patterns-g-spipat-ads}@anchor{3c5}@anchor{gnat_rm/the_gnat_library id107}@anchor{3c6} +@anchor{gnat_rm/the_gnat_library gnat-spitbol-patterns-g-spipat-ads}@anchor{3ca}@anchor{gnat_rm/the_gnat_library id108}@anchor{3cb} @section @code{GNAT.Spitbol.Patterns} (@code{g-spipat.ads}) @@ -25191,7 +25421,7 @@ the SNOBOL4 dynamic pattern construction and matching capabilities, using the efficient algorithm developed by Robert Dewar for the SPITBOL system. @node GNAT Spitbol g-spitbo ads,GNAT Spitbol Table_Boolean g-sptabo ads,GNAT Spitbol Patterns g-spipat ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-spitbol-g-spitbo-ads}@anchor{3c7}@anchor{gnat_rm/the_gnat_library id108}@anchor{3c8} +@anchor{gnat_rm/the_gnat_library gnat-spitbol-g-spitbo-ads}@anchor{3cc}@anchor{gnat_rm/the_gnat_library id109}@anchor{3cd} @section @code{GNAT.Spitbol} (@code{g-spitbo.ads}) @@ -25206,7 +25436,7 @@ useful for constructing arbitrary mappings from strings in the style of the SNOBOL4 TABLE function. @node GNAT Spitbol Table_Boolean g-sptabo ads,GNAT Spitbol Table_Integer g-sptain ads,GNAT Spitbol g-spitbo ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-spitbol-table-boolean-g-sptabo-ads}@anchor{3c9}@anchor{gnat_rm/the_gnat_library id109}@anchor{3ca} +@anchor{gnat_rm/the_gnat_library gnat-spitbol-table-boolean-g-sptabo-ads}@anchor{3ce}@anchor{gnat_rm/the_gnat_library id110}@anchor{3cf} @section @code{GNAT.Spitbol.Table_Boolean} (@code{g-sptabo.ads}) @@ -25221,7 +25451,7 @@ for type @code{Standard.Boolean}, giving an implementation of sets of string values. @node GNAT Spitbol Table_Integer g-sptain ads,GNAT Spitbol Table_VString g-sptavs ads,GNAT Spitbol Table_Boolean g-sptabo ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-spitbol-table-integer-g-sptain-ads}@anchor{3cb}@anchor{gnat_rm/the_gnat_library id110}@anchor{3cc} +@anchor{gnat_rm/the_gnat_library gnat-spitbol-table-integer-g-sptain-ads}@anchor{3d0}@anchor{gnat_rm/the_gnat_library id111}@anchor{3d1} @section @code{GNAT.Spitbol.Table_Integer} (@code{g-sptain.ads}) @@ -25238,7 +25468,7 @@ for type @code{Standard.Integer}, giving an implementation of maps from string to integer values. @node GNAT Spitbol Table_VString g-sptavs ads,GNAT SSE g-sse ads,GNAT Spitbol Table_Integer g-sptain ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-spitbol-table-vstring-g-sptavs-ads}@anchor{3cd}@anchor{gnat_rm/the_gnat_library id111}@anchor{3ce} +@anchor{gnat_rm/the_gnat_library gnat-spitbol-table-vstring-g-sptavs-ads}@anchor{3d2}@anchor{gnat_rm/the_gnat_library id112}@anchor{3d3} @section @code{GNAT.Spitbol.Table_VString} (@code{g-sptavs.ads}) @@ -25255,7 +25485,7 @@ a variable length string type, giving an implementation of general maps from strings to strings. @node GNAT SSE g-sse ads,GNAT SSE Vector_Types g-ssvety ads,GNAT Spitbol Table_VString g-sptavs ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-sse-g-sse-ads}@anchor{3cf}@anchor{gnat_rm/the_gnat_library id112}@anchor{3d0} +@anchor{gnat_rm/the_gnat_library gnat-sse-g-sse-ads}@anchor{3d4}@anchor{gnat_rm/the_gnat_library id113}@anchor{3d5} @section @code{GNAT.SSE} (@code{g-sse.ads}) @@ -25267,7 +25497,7 @@ targets. It exposes vector component types together with a general introduction to the binding contents and use. @node GNAT SSE Vector_Types g-ssvety ads,GNAT String_Hash g-strhas ads,GNAT SSE g-sse ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-sse-vector-types-g-ssvety-ads}@anchor{3d1}@anchor{gnat_rm/the_gnat_library id113}@anchor{3d2} +@anchor{gnat_rm/the_gnat_library gnat-sse-vector-types-g-ssvety-ads}@anchor{3d6}@anchor{gnat_rm/the_gnat_library id114}@anchor{3d7} @section @code{GNAT.SSE.Vector_Types} (@code{g-ssvety.ads}) @@ -25276,7 +25506,7 @@ introduction to the binding contents and use. SSE vector types for use with SSE related intrinsics. @node GNAT String_Hash g-strhas ads,GNAT Strings g-string ads,GNAT SSE Vector_Types g-ssvety ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-string-hash-g-strhas-ads}@anchor{3d3}@anchor{gnat_rm/the_gnat_library id114}@anchor{3d4} +@anchor{gnat_rm/the_gnat_library gnat-string-hash-g-strhas-ads}@anchor{3d8}@anchor{gnat_rm/the_gnat_library id115}@anchor{3d9} @section @code{GNAT.String_Hash} (@code{g-strhas.ads}) @@ -25288,7 +25518,7 @@ Provides a generic hash function working on arrays of scalars. Both the scalar type and the hash result type are parameters. @node GNAT Strings g-string ads,GNAT String_Split g-strspl ads,GNAT String_Hash g-strhas ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-strings-g-string-ads}@anchor{3d5}@anchor{gnat_rm/the_gnat_library id115}@anchor{3d6} +@anchor{gnat_rm/the_gnat_library gnat-strings-g-string-ads}@anchor{3da}@anchor{gnat_rm/the_gnat_library id116}@anchor{3db} @section @code{GNAT.Strings} (@code{g-string.ads}) @@ -25298,7 +25528,7 @@ Common String access types and related subprograms. Basically it defines a string access and an array of string access types. @node GNAT String_Split g-strspl ads,GNAT Table g-table ads,GNAT Strings g-string ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-string-split-g-strspl-ads}@anchor{3d7}@anchor{gnat_rm/the_gnat_library id116}@anchor{3d8} +@anchor{gnat_rm/the_gnat_library gnat-string-split-g-strspl-ads}@anchor{3dc}@anchor{gnat_rm/the_gnat_library id117}@anchor{3dd} @section @code{GNAT.String_Split} (@code{g-strspl.ads}) @@ -25312,7 +25542,7 @@ to the resulting slices. This package is instantiated from @code{GNAT.Array_Split}. @node GNAT Table g-table ads,GNAT Task_Lock g-tasloc ads,GNAT String_Split g-strspl ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-table-g-table-ads}@anchor{3d9}@anchor{gnat_rm/the_gnat_library id117}@anchor{3da} +@anchor{gnat_rm/the_gnat_library gnat-table-g-table-ads}@anchor{3de}@anchor{gnat_rm/the_gnat_library id118}@anchor{3df} @section @code{GNAT.Table} (@code{g-table.ads}) @@ -25332,7 +25562,7 @@ while an instantiation of @code{GNAT.Dynamic_Tables} creates a type that can be used to define dynamic instances of the table. @node GNAT Task_Lock g-tasloc ads,GNAT Time_Stamp g-timsta ads,GNAT Table g-table ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-task-lock-g-tasloc-ads}@anchor{3db}@anchor{gnat_rm/the_gnat_library id118}@anchor{3dc} +@anchor{gnat_rm/the_gnat_library gnat-task-lock-g-tasloc-ads}@anchor{3e0}@anchor{gnat_rm/the_gnat_library id119}@anchor{3e1} @section @code{GNAT.Task_Lock} (@code{g-tasloc.ads}) @@ -25349,7 +25579,7 @@ single global task lock. Appropriate for use in situations where contention between tasks is very rarely expected. @node GNAT Time_Stamp g-timsta ads,GNAT Threads g-thread ads,GNAT Task_Lock g-tasloc ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-time-stamp-g-timsta-ads}@anchor{3dd}@anchor{gnat_rm/the_gnat_library id119}@anchor{3de} +@anchor{gnat_rm/the_gnat_library gnat-time-stamp-g-timsta-ads}@anchor{3e2}@anchor{gnat_rm/the_gnat_library id120}@anchor{3e3} @section @code{GNAT.Time_Stamp} (@code{g-timsta.ads}) @@ -25364,7 +25594,7 @@ represents the current date and time in ISO 8601 format. This is a very simple routine with minimal code and there are no dependencies on any other unit. @node GNAT Threads g-thread ads,GNAT Traceback g-traceb ads,GNAT Time_Stamp g-timsta ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-threads-g-thread-ads}@anchor{3df}@anchor{gnat_rm/the_gnat_library id120}@anchor{3e0} +@anchor{gnat_rm/the_gnat_library gnat-threads-g-thread-ads}@anchor{3e4}@anchor{gnat_rm/the_gnat_library id121}@anchor{3e5} @section @code{GNAT.Threads} (@code{g-thread.ads}) @@ -25381,7 +25611,7 @@ further details if your program has threads that are created by a non-Ada environment which then accesses Ada code. @node GNAT Traceback g-traceb ads,GNAT Traceback Symbolic g-trasym ads,GNAT Threads g-thread ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-traceback-g-traceb-ads}@anchor{3e1}@anchor{gnat_rm/the_gnat_library id121}@anchor{3e2} +@anchor{gnat_rm/the_gnat_library gnat-traceback-g-traceb-ads}@anchor{3e6}@anchor{gnat_rm/the_gnat_library id122}@anchor{3e7} @section @code{GNAT.Traceback} (@code{g-traceb.ads}) @@ -25393,7 +25623,7 @@ Provides a facility for obtaining non-symbolic traceback information, useful in various debugging situations. @node GNAT Traceback Symbolic g-trasym ads,GNAT UTF_32 g-utf_32 ads,GNAT Traceback g-traceb ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-traceback-symbolic-g-trasym-ads}@anchor{3e3}@anchor{gnat_rm/the_gnat_library id122}@anchor{3e4} +@anchor{gnat_rm/the_gnat_library gnat-traceback-symbolic-g-trasym-ads}@anchor{3e8}@anchor{gnat_rm/the_gnat_library id123}@anchor{3e9} @section @code{GNAT.Traceback.Symbolic} (@code{g-trasym.ads}) @@ -25402,7 +25632,7 @@ in various debugging situations. @geindex Trace back facilities @node GNAT UTF_32 g-utf_32 ads,GNAT UTF_32_Spelling_Checker g-u3spch ads,GNAT Traceback Symbolic g-trasym ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-utf-32-g-utf-32-ads}@anchor{3e5}@anchor{gnat_rm/the_gnat_library id123}@anchor{3e6} +@anchor{gnat_rm/the_gnat_library gnat-utf-32-g-utf-32-ads}@anchor{3ea}@anchor{gnat_rm/the_gnat_library id124}@anchor{3eb} @section @code{GNAT.UTF_32} (@code{g-utf_32.ads}) @@ -25421,7 +25651,7 @@ lower case to upper case fold routine corresponding to the Ada 2005 rules for identifier equivalence. @node GNAT UTF_32_Spelling_Checker g-u3spch ads,GNAT Wide_Spelling_Checker g-wispch ads,GNAT UTF_32 g-utf_32 ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-utf-32-spelling-checker-g-u3spch-ads}@anchor{3e7}@anchor{gnat_rm/the_gnat_library id124}@anchor{3e8} +@anchor{gnat_rm/the_gnat_library gnat-utf-32-spelling-checker-g-u3spch-ads}@anchor{3ec}@anchor{gnat_rm/the_gnat_library id125}@anchor{3ed} @section @code{GNAT.UTF_32_Spelling_Checker} (@code{g-u3spch.ads}) @@ -25434,7 +25664,7 @@ near misspelling of another wide wide string, where the strings are represented using the UTF_32_String type defined in System.Wch_Cnv. @node GNAT Wide_Spelling_Checker g-wispch ads,GNAT Wide_String_Split g-wistsp ads,GNAT UTF_32_Spelling_Checker g-u3spch ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-wide-spelling-checker-g-wispch-ads}@anchor{3e9}@anchor{gnat_rm/the_gnat_library id125}@anchor{3ea} +@anchor{gnat_rm/the_gnat_library gnat-wide-spelling-checker-g-wispch-ads}@anchor{3ee}@anchor{gnat_rm/the_gnat_library id126}@anchor{3ef} @section @code{GNAT.Wide_Spelling_Checker} (@code{g-wispch.ads}) @@ -25446,7 +25676,7 @@ Provides a function for determining whether one wide string is a plausible near misspelling of another wide string. @node GNAT Wide_String_Split g-wistsp ads,GNAT Wide_Wide_Spelling_Checker g-zspche ads,GNAT Wide_Spelling_Checker g-wispch ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-wide-string-split-g-wistsp-ads}@anchor{3eb}@anchor{gnat_rm/the_gnat_library id126}@anchor{3ec} +@anchor{gnat_rm/the_gnat_library gnat-wide-string-split-g-wistsp-ads}@anchor{3f0}@anchor{gnat_rm/the_gnat_library id127}@anchor{3f1} @section @code{GNAT.Wide_String_Split} (@code{g-wistsp.ads}) @@ -25460,7 +25690,7 @@ to the resulting slices. This package is instantiated from @code{GNAT.Array_Split}. @node GNAT Wide_Wide_Spelling_Checker g-zspche ads,GNAT Wide_Wide_String_Split g-zistsp ads,GNAT Wide_String_Split g-wistsp ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-wide-wide-spelling-checker-g-zspche-ads}@anchor{3ed}@anchor{gnat_rm/the_gnat_library id127}@anchor{3ee} +@anchor{gnat_rm/the_gnat_library gnat-wide-wide-spelling-checker-g-zspche-ads}@anchor{3f2}@anchor{gnat_rm/the_gnat_library id128}@anchor{3f3} @section @code{GNAT.Wide_Wide_Spelling_Checker} (@code{g-zspche.ads}) @@ -25472,7 +25702,7 @@ Provides a function for determining whether one wide wide string is a plausible near misspelling of another wide wide string. @node GNAT Wide_Wide_String_Split g-zistsp ads,Interfaces C Extensions i-cexten ads,GNAT Wide_Wide_Spelling_Checker g-zspche ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library gnat-wide-wide-string-split-g-zistsp-ads}@anchor{3ef}@anchor{gnat_rm/the_gnat_library id128}@anchor{3f0} +@anchor{gnat_rm/the_gnat_library gnat-wide-wide-string-split-g-zistsp-ads}@anchor{3f4}@anchor{gnat_rm/the_gnat_library id129}@anchor{3f5} @section @code{GNAT.Wide_Wide_String_Split} (@code{g-zistsp.ads}) @@ -25486,7 +25716,7 @@ to the resulting slices. This package is instantiated from @code{GNAT.Array_Split}. @node Interfaces C Extensions i-cexten ads,Interfaces C Streams i-cstrea ads,GNAT Wide_Wide_String_Split g-zistsp ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id129}@anchor{3f1}@anchor{gnat_rm/the_gnat_library interfaces-c-extensions-i-cexten-ads}@anchor{3f2} +@anchor{gnat_rm/the_gnat_library id130}@anchor{3f6}@anchor{gnat_rm/the_gnat_library interfaces-c-extensions-i-cexten-ads}@anchor{3f7} @section @code{Interfaces.C.Extensions} (@code{i-cexten.ads}) @@ -25497,7 +25727,7 @@ for use with either manually or automatically generated bindings to C libraries. @node Interfaces C Streams i-cstrea ads,Interfaces Packed_Decimal i-pacdec ads,Interfaces C Extensions i-cexten ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id130}@anchor{3f3}@anchor{gnat_rm/the_gnat_library interfaces-c-streams-i-cstrea-ads}@anchor{3f4} +@anchor{gnat_rm/the_gnat_library id131}@anchor{3f8}@anchor{gnat_rm/the_gnat_library interfaces-c-streams-i-cstrea-ads}@anchor{3f9} @section @code{Interfaces.C.Streams} (@code{i-cstrea.ads}) @@ -25510,7 +25740,7 @@ This package is a binding for the most commonly used operations on C streams. @node Interfaces Packed_Decimal i-pacdec ads,Interfaces VxWorks i-vxwork ads,Interfaces C Streams i-cstrea ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id131}@anchor{3f5}@anchor{gnat_rm/the_gnat_library interfaces-packed-decimal-i-pacdec-ads}@anchor{3f6} +@anchor{gnat_rm/the_gnat_library id132}@anchor{3fa}@anchor{gnat_rm/the_gnat_library interfaces-packed-decimal-i-pacdec-ads}@anchor{3fb} @section @code{Interfaces.Packed_Decimal} (@code{i-pacdec.ads}) @@ -25525,7 +25755,7 @@ from a packed decimal format compatible with that used on IBM mainframes. @node Interfaces VxWorks i-vxwork ads,Interfaces VxWorks IO i-vxwoio ads,Interfaces Packed_Decimal i-pacdec ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id132}@anchor{3f7}@anchor{gnat_rm/the_gnat_library interfaces-vxworks-i-vxwork-ads}@anchor{3f8} +@anchor{gnat_rm/the_gnat_library id133}@anchor{3fc}@anchor{gnat_rm/the_gnat_library interfaces-vxworks-i-vxwork-ads}@anchor{3fd} @section @code{Interfaces.VxWorks} (@code{i-vxwork.ads}) @@ -25539,7 +25769,7 @@ mainframes. This package provides a limited binding to the VxWorks API. @node Interfaces VxWorks IO i-vxwoio ads,System Address_Image s-addima ads,Interfaces VxWorks i-vxwork ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id133}@anchor{3f9}@anchor{gnat_rm/the_gnat_library interfaces-vxworks-io-i-vxwoio-ads}@anchor{3fa} +@anchor{gnat_rm/the_gnat_library id134}@anchor{3fe}@anchor{gnat_rm/the_gnat_library interfaces-vxworks-io-i-vxwoio-ads}@anchor{3ff} @section @code{Interfaces.VxWorks.IO} (@code{i-vxwoio.ads}) @@ -25562,7 +25792,7 @@ function codes. A particular use of this package is to enable the use of Get_Immediate under VxWorks. @node System Address_Image s-addima ads,System Assertions s-assert ads,Interfaces VxWorks IO i-vxwoio ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id134}@anchor{3fb}@anchor{gnat_rm/the_gnat_library system-address-image-s-addima-ads}@anchor{3fc} +@anchor{gnat_rm/the_gnat_library id135}@anchor{400}@anchor{gnat_rm/the_gnat_library system-address-image-s-addima-ads}@anchor{401} @section @code{System.Address_Image} (@code{s-addima.ads}) @@ -25578,7 +25808,7 @@ function that gives an (implementation dependent) string which identifies an address. @node System Assertions s-assert ads,System Atomic_Counters s-atocou ads,System Address_Image s-addima ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id135}@anchor{3fd}@anchor{gnat_rm/the_gnat_library system-assertions-s-assert-ads}@anchor{3fe} +@anchor{gnat_rm/the_gnat_library id136}@anchor{402}@anchor{gnat_rm/the_gnat_library system-assertions-s-assert-ads}@anchor{403} @section @code{System.Assertions} (@code{s-assert.ads}) @@ -25594,7 +25824,7 @@ by an run-time assertion failure, as well as the routine that is used internally to raise this assertion. @node System Atomic_Counters s-atocou ads,System Memory s-memory ads,System Assertions s-assert ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id136}@anchor{3ff}@anchor{gnat_rm/the_gnat_library system-atomic-counters-s-atocou-ads}@anchor{400} +@anchor{gnat_rm/the_gnat_library id137}@anchor{404}@anchor{gnat_rm/the_gnat_library system-atomic-counters-s-atocou-ads}@anchor{405} @section @code{System.Atomic_Counters} (@code{s-atocou.ads}) @@ -25608,7 +25838,7 @@ on most targets, including all Alpha, AARCH64, ARM, ia64, PowerPC, SPARC V9, x86, and x86_64 platforms. @node System Memory s-memory ads,System Multiprocessors s-multip ads,System Atomic_Counters s-atocou ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id137}@anchor{401}@anchor{gnat_rm/the_gnat_library system-memory-s-memory-ads}@anchor{402} +@anchor{gnat_rm/the_gnat_library id138}@anchor{406}@anchor{gnat_rm/the_gnat_library system-memory-s-memory-ads}@anchor{407} @section @code{System.Memory} (@code{s-memory.ads}) @@ -25626,7 +25856,7 @@ calls to this unit may be made for low level allocation uses (for example see the body of @code{GNAT.Tables}). @node System Multiprocessors s-multip ads,System Multiprocessors Dispatching_Domains s-mudido ads,System Memory s-memory ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id138}@anchor{403}@anchor{gnat_rm/the_gnat_library system-multiprocessors-s-multip-ads}@anchor{404} +@anchor{gnat_rm/the_gnat_library id139}@anchor{408}@anchor{gnat_rm/the_gnat_library system-multiprocessors-s-multip-ads}@anchor{409} @section @code{System.Multiprocessors} (@code{s-multip.ads}) @@ -25639,7 +25869,7 @@ in GNAT we also make it available in Ada 95 and Ada 2005 (where it is technically an implementation-defined addition). @node System Multiprocessors Dispatching_Domains s-mudido ads,System Partition_Interface s-parint ads,System Multiprocessors s-multip ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id139}@anchor{405}@anchor{gnat_rm/the_gnat_library system-multiprocessors-dispatching-domains-s-mudido-ads}@anchor{406} +@anchor{gnat_rm/the_gnat_library id140}@anchor{40a}@anchor{gnat_rm/the_gnat_library system-multiprocessors-dispatching-domains-s-mudido-ads}@anchor{40b} @section @code{System.Multiprocessors.Dispatching_Domains} (@code{s-mudido.ads}) @@ -25652,7 +25882,7 @@ in GNAT we also make it available in Ada 95 and Ada 2005 (where it is technically an implementation-defined addition). @node System Partition_Interface s-parint ads,System Pool_Global s-pooglo ads,System Multiprocessors Dispatching_Domains s-mudido ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id140}@anchor{407}@anchor{gnat_rm/the_gnat_library system-partition-interface-s-parint-ads}@anchor{408} +@anchor{gnat_rm/the_gnat_library id141}@anchor{40c}@anchor{gnat_rm/the_gnat_library system-partition-interface-s-parint-ads}@anchor{40d} @section @code{System.Partition_Interface} (@code{s-parint.ads}) @@ -25662,10 +25892,11 @@ technically an implementation-defined addition). This package provides facilities for partition interfacing. It is used primarily in a distribution context when using Annex E -with @code{PolyORB}. +with @code{PolyORB}. `NB!' See the note in @ref{271,,PolyORB} regarding +the lifetime of this product. @node System Pool_Global s-pooglo ads,System Pool_Local s-pooloc ads,System Partition_Interface s-parint ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id141}@anchor{409}@anchor{gnat_rm/the_gnat_library system-pool-global-s-pooglo-ads}@anchor{40a} +@anchor{gnat_rm/the_gnat_library id142}@anchor{40e}@anchor{gnat_rm/the_gnat_library system-pool-global-s-pooglo-ads}@anchor{40f} @section @code{System.Pool_Global} (@code{s-pooglo.ads}) @@ -25682,7 +25913,7 @@ declared. It uses malloc/free to allocate/free and does not attempt to do any automatic reclamation. @node System Pool_Local s-pooloc ads,System Restrictions s-restri ads,System Pool_Global s-pooglo ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id142}@anchor{40b}@anchor{gnat_rm/the_gnat_library system-pool-local-s-pooloc-ads}@anchor{40c} +@anchor{gnat_rm/the_gnat_library id143}@anchor{410}@anchor{gnat_rm/the_gnat_library system-pool-local-s-pooloc-ads}@anchor{411} @section @code{System.Pool_Local} (@code{s-pooloc.ads}) @@ -25699,7 +25930,7 @@ a list of allocated blocks, so that all storage allocated for the pool can be freed automatically when the pool is finalized. @node System Restrictions s-restri ads,System Rident s-rident ads,System Pool_Local s-pooloc ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id143}@anchor{40d}@anchor{gnat_rm/the_gnat_library system-restrictions-s-restri-ads}@anchor{40e} +@anchor{gnat_rm/the_gnat_library id144}@anchor{412}@anchor{gnat_rm/the_gnat_library system-restrictions-s-restri-ads}@anchor{413} @section @code{System.Restrictions} (@code{s-restri.ads}) @@ -25715,7 +25946,7 @@ compiler determined information on which restrictions are violated by one or more packages in the partition. @node System Rident s-rident ads,System Strings Stream_Ops s-ststop ads,System Restrictions s-restri ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id144}@anchor{40f}@anchor{gnat_rm/the_gnat_library system-rident-s-rident-ads}@anchor{410} +@anchor{gnat_rm/the_gnat_library id145}@anchor{414}@anchor{gnat_rm/the_gnat_library system-rident-s-rident-ads}@anchor{415} @section @code{System.Rident} (@code{s-rident.ads}) @@ -25731,7 +25962,7 @@ since the necessary instantiation is included in package System.Restrictions. @node System Strings Stream_Ops s-ststop ads,System Unsigned_Types s-unstyp ads,System Rident s-rident ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id145}@anchor{411}@anchor{gnat_rm/the_gnat_library system-strings-stream-ops-s-ststop-ads}@anchor{412} +@anchor{gnat_rm/the_gnat_library id146}@anchor{416}@anchor{gnat_rm/the_gnat_library system-strings-stream-ops-s-ststop-ads}@anchor{417} @section @code{System.Strings.Stream_Ops} (@code{s-ststop.ads}) @@ -25747,7 +25978,7 @@ stream attributes are applied to string types, but the subprograms in this package can be used directly by application programs. @node System Unsigned_Types s-unstyp ads,System Wch_Cnv s-wchcnv ads,System Strings Stream_Ops s-ststop ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id146}@anchor{413}@anchor{gnat_rm/the_gnat_library system-unsigned-types-s-unstyp-ads}@anchor{414} +@anchor{gnat_rm/the_gnat_library id147}@anchor{418}@anchor{gnat_rm/the_gnat_library system-unsigned-types-s-unstyp-ads}@anchor{419} @section @code{System.Unsigned_Types} (@code{s-unstyp.ads}) @@ -25760,7 +25991,7 @@ also contains some related definitions for other specialized types used by the compiler in connection with packed array types. @node System Wch_Cnv s-wchcnv ads,System Wch_Con s-wchcon ads,System Unsigned_Types s-unstyp ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id147}@anchor{415}@anchor{gnat_rm/the_gnat_library system-wch-cnv-s-wchcnv-ads}@anchor{416} +@anchor{gnat_rm/the_gnat_library id148}@anchor{41a}@anchor{gnat_rm/the_gnat_library system-wch-cnv-s-wchcnv-ads}@anchor{41b} @section @code{System.Wch_Cnv} (@code{s-wchcnv.ads}) @@ -25781,7 +26012,7 @@ encoding method. It uses definitions in package @code{System.Wch_Con}. @node System Wch_Con s-wchcon ads,,System Wch_Cnv s-wchcnv ads,The GNAT Library -@anchor{gnat_rm/the_gnat_library id148}@anchor{417}@anchor{gnat_rm/the_gnat_library system-wch-con-s-wchcon-ads}@anchor{418} +@anchor{gnat_rm/the_gnat_library id149}@anchor{41c}@anchor{gnat_rm/the_gnat_library system-wch-con-s-wchcon-ads}@anchor{41d} @section @code{System.Wch_Con} (@code{s-wchcon.ads}) @@ -25793,7 +26024,7 @@ in ordinary strings. These definitions are used by the package @code{System.Wch_Cnv}. @node Interfacing to Other Languages,Specialized Needs Annexes,The GNAT Library,Top -@anchor{gnat_rm/interfacing_to_other_languages doc}@anchor{419}@anchor{gnat_rm/interfacing_to_other_languages id1}@anchor{41a}@anchor{gnat_rm/interfacing_to_other_languages interfacing-to-other-languages}@anchor{11} +@anchor{gnat_rm/interfacing_to_other_languages doc}@anchor{41e}@anchor{gnat_rm/interfacing_to_other_languages id1}@anchor{41f}@anchor{gnat_rm/interfacing_to_other_languages interfacing-to-other-languages}@anchor{11} @chapter Interfacing to Other Languages @@ -25811,7 +26042,7 @@ provided. @end menu @node Interfacing to C,Interfacing to C++,,Interfacing to Other Languages -@anchor{gnat_rm/interfacing_to_other_languages id2}@anchor{41b}@anchor{gnat_rm/interfacing_to_other_languages interfacing-to-c}@anchor{41c} +@anchor{gnat_rm/interfacing_to_other_languages id2}@anchor{420}@anchor{gnat_rm/interfacing_to_other_languages interfacing-to-c}@anchor{421} @section Interfacing to C @@ -25951,7 +26182,7 @@ of the length corresponding to the @code{type'Size} value in Ada. @end itemize @node Interfacing to C++,Interfacing to COBOL,Interfacing to C,Interfacing to Other Languages -@anchor{gnat_rm/interfacing_to_other_languages id3}@anchor{49}@anchor{gnat_rm/interfacing_to_other_languages id4}@anchor{41d} +@anchor{gnat_rm/interfacing_to_other_languages id3}@anchor{4a}@anchor{gnat_rm/interfacing_to_other_languages id4}@anchor{422} @section Interfacing to C++ @@ -26168,7 +26399,7 @@ builds an opaque @code{Type_Info_Ptr} to reference a @code{std::type_info} object at a given @code{System.Address}. @node Interfacing to COBOL,Interfacing to Fortran,Interfacing to C++,Interfacing to Other Languages -@anchor{gnat_rm/interfacing_to_other_languages id5}@anchor{41e}@anchor{gnat_rm/interfacing_to_other_languages interfacing-to-cobol}@anchor{41f} +@anchor{gnat_rm/interfacing_to_other_languages id5}@anchor{423}@anchor{gnat_rm/interfacing_to_other_languages interfacing-to-cobol}@anchor{424} @section Interfacing to COBOL @@ -26176,7 +26407,7 @@ Interfacing to COBOL is achieved as described in section B.4 of the Ada Reference Manual. @node Interfacing to Fortran,Interfacing to non-GNAT Ada code,Interfacing to COBOL,Interfacing to Other Languages -@anchor{gnat_rm/interfacing_to_other_languages id6}@anchor{420}@anchor{gnat_rm/interfacing_to_other_languages interfacing-to-fortran}@anchor{421} +@anchor{gnat_rm/interfacing_to_other_languages id6}@anchor{425}@anchor{gnat_rm/interfacing_to_other_languages interfacing-to-fortran}@anchor{426} @section Interfacing to Fortran @@ -26186,7 +26417,7 @@ multi-dimensional array causes the array to be stored in column-major order as required for convenient interface to Fortran. @node Interfacing to non-GNAT Ada code,,Interfacing to Fortran,Interfacing to Other Languages -@anchor{gnat_rm/interfacing_to_other_languages id7}@anchor{422}@anchor{gnat_rm/interfacing_to_other_languages interfacing-to-non-gnat-ada-code}@anchor{423} +@anchor{gnat_rm/interfacing_to_other_languages id7}@anchor{427}@anchor{gnat_rm/interfacing_to_other_languages interfacing-to-non-gnat-ada-code}@anchor{428} @section Interfacing to non-GNAT Ada code @@ -26210,7 +26441,7 @@ values or simple record types without variants, or simple array types with fixed bounds. @node Specialized Needs Annexes,Implementation of Specific Ada Features,Interfacing to Other Languages,Top -@anchor{gnat_rm/specialized_needs_annexes doc}@anchor{424}@anchor{gnat_rm/specialized_needs_annexes id1}@anchor{425}@anchor{gnat_rm/specialized_needs_annexes specialized-needs-annexes}@anchor{12} +@anchor{gnat_rm/specialized_needs_annexes doc}@anchor{429}@anchor{gnat_rm/specialized_needs_annexes id1}@anchor{42a}@anchor{gnat_rm/specialized_needs_annexes specialized-needs-annexes}@anchor{12} @chapter Specialized Needs Annexes @@ -26231,7 +26462,7 @@ The Real-Time Systems Annex is fully implemented. Stub generation is fully implemented in the GNAT compiler. In addition, a complete compatible PCS is available as part of @code{PolyORB}, -a separate product. Note, that PolyORB is a deprecated product and will be eventually replaced with other technologies such as @code{RTI}. +a separate product. `NB!' See the note in @ref{271,,PolyORB} regarding the lifetime of this product. @item `Information Systems (Annex F)' @@ -26248,7 +26479,7 @@ in Ada 2005) is fully implemented. @end table @node Implementation of Specific Ada Features,Implementation of Ada 2022 Features,Specialized Needs Annexes,Top -@anchor{gnat_rm/implementation_of_specific_ada_features doc}@anchor{426}@anchor{gnat_rm/implementation_of_specific_ada_features id1}@anchor{427}@anchor{gnat_rm/implementation_of_specific_ada_features implementation-of-specific-ada-features}@anchor{13} +@anchor{gnat_rm/implementation_of_specific_ada_features doc}@anchor{42b}@anchor{gnat_rm/implementation_of_specific_ada_features id1}@anchor{42c}@anchor{gnat_rm/implementation_of_specific_ada_features implementation-of-specific-ada-features}@anchor{13} @chapter Implementation of Specific Ada Features @@ -26267,7 +26498,7 @@ facilities. @end menu @node Machine Code Insertions,GNAT Implementation of Tasking,,Implementation of Specific Ada Features -@anchor{gnat_rm/implementation_of_specific_ada_features id2}@anchor{428}@anchor{gnat_rm/implementation_of_specific_ada_features machine-code-insertions}@anchor{181} +@anchor{gnat_rm/implementation_of_specific_ada_features id2}@anchor{42d}@anchor{gnat_rm/implementation_of_specific_ada_features machine-code-insertions}@anchor{183} @section Machine Code Insertions @@ -26435,7 +26666,7 @@ according to normal visibility rules. In particular if there is no qualification is required. @node GNAT Implementation of Tasking,GNAT Implementation of Shared Passive Packages,Machine Code Insertions,Implementation of Specific Ada Features -@anchor{gnat_rm/implementation_of_specific_ada_features gnat-implementation-of-tasking}@anchor{429}@anchor{gnat_rm/implementation_of_specific_ada_features id3}@anchor{42a} +@anchor{gnat_rm/implementation_of_specific_ada_features gnat-implementation-of-tasking}@anchor{42e}@anchor{gnat_rm/implementation_of_specific_ada_features id3}@anchor{42f} @section GNAT Implementation of Tasking @@ -26451,7 +26682,7 @@ to compliance with the Real-Time Systems Annex. @end menu @node Mapping Ada Tasks onto the Underlying Kernel Threads,Ensuring Compliance with the Real-Time Annex,,GNAT Implementation of Tasking -@anchor{gnat_rm/implementation_of_specific_ada_features id4}@anchor{42b}@anchor{gnat_rm/implementation_of_specific_ada_features mapping-ada-tasks-onto-the-underlying-kernel-threads}@anchor{42c} +@anchor{gnat_rm/implementation_of_specific_ada_features id4}@anchor{430}@anchor{gnat_rm/implementation_of_specific_ada_features mapping-ada-tasks-onto-the-underlying-kernel-threads}@anchor{431} @subsection Mapping Ada Tasks onto the Underlying Kernel Threads @@ -26520,7 +26751,7 @@ support this functionality when the parent contains more than one task. @geindex Forking a new process @node Ensuring Compliance with the Real-Time Annex,Support for Locking Policies,Mapping Ada Tasks onto the Underlying Kernel Threads,GNAT Implementation of Tasking -@anchor{gnat_rm/implementation_of_specific_ada_features ensuring-compliance-with-the-real-time-annex}@anchor{42d}@anchor{gnat_rm/implementation_of_specific_ada_features id5}@anchor{42e} +@anchor{gnat_rm/implementation_of_specific_ada_features ensuring-compliance-with-the-real-time-annex}@anchor{432}@anchor{gnat_rm/implementation_of_specific_ada_features id5}@anchor{433} @subsection Ensuring Compliance with the Real-Time Annex @@ -26571,7 +26802,7 @@ placed at the end. @c Support_for_Locking_Policies @node Support for Locking Policies,,Ensuring Compliance with the Real-Time Annex,GNAT Implementation of Tasking -@anchor{gnat_rm/implementation_of_specific_ada_features support-for-locking-policies}@anchor{42f} +@anchor{gnat_rm/implementation_of_specific_ada_features support-for-locking-policies}@anchor{434} @subsection Support for Locking Policies @@ -26605,7 +26836,7 @@ then ceiling locking is used. Otherwise, the @code{Ceiling_Locking} policy is ignored. @node GNAT Implementation of Shared Passive Packages,Code Generation for Array Aggregates,GNAT Implementation of Tasking,Implementation of Specific Ada Features -@anchor{gnat_rm/implementation_of_specific_ada_features gnat-implementation-of-shared-passive-packages}@anchor{430}@anchor{gnat_rm/implementation_of_specific_ada_features id6}@anchor{431} +@anchor{gnat_rm/implementation_of_specific_ada_features gnat-implementation-of-shared-passive-packages}@anchor{435}@anchor{gnat_rm/implementation_of_specific_ada_features id6}@anchor{436} @section GNAT Implementation of Shared Passive Packages @@ -26703,7 +26934,7 @@ This is used to provide the required locking semantics for proper protected object synchronization. @node Code Generation for Array Aggregates,The Size of Discriminated Records with Default Discriminants,GNAT Implementation of Shared Passive Packages,Implementation of Specific Ada Features -@anchor{gnat_rm/implementation_of_specific_ada_features code-generation-for-array-aggregates}@anchor{432}@anchor{gnat_rm/implementation_of_specific_ada_features id7}@anchor{433} +@anchor{gnat_rm/implementation_of_specific_ada_features code-generation-for-array-aggregates}@anchor{437}@anchor{gnat_rm/implementation_of_specific_ada_features id7}@anchor{438} @section Code Generation for Array Aggregates @@ -26734,7 +26965,7 @@ component values and static subtypes also lead to simpler code. @end menu @node Static constant aggregates with static bounds,Constant aggregates with unconstrained nominal types,,Code Generation for Array Aggregates -@anchor{gnat_rm/implementation_of_specific_ada_features id8}@anchor{434}@anchor{gnat_rm/implementation_of_specific_ada_features static-constant-aggregates-with-static-bounds}@anchor{435} +@anchor{gnat_rm/implementation_of_specific_ada_features id8}@anchor{439}@anchor{gnat_rm/implementation_of_specific_ada_features static-constant-aggregates-with-static-bounds}@anchor{43a} @subsection Static constant aggregates with static bounds @@ -26781,7 +27012,7 @@ Zero2: constant two_dim := (others => (others => 0)); @end example @node Constant aggregates with unconstrained nominal types,Aggregates with static bounds,Static constant aggregates with static bounds,Code Generation for Array Aggregates -@anchor{gnat_rm/implementation_of_specific_ada_features constant-aggregates-with-unconstrained-nominal-types}@anchor{436}@anchor{gnat_rm/implementation_of_specific_ada_features id9}@anchor{437} +@anchor{gnat_rm/implementation_of_specific_ada_features constant-aggregates-with-unconstrained-nominal-types}@anchor{43b}@anchor{gnat_rm/implementation_of_specific_ada_features id9}@anchor{43c} @subsection Constant aggregates with unconstrained nominal types @@ -26796,7 +27027,7 @@ Cr_Unc : constant One_Unc := (12,24,36); @end example @node Aggregates with static bounds,Aggregates with nonstatic bounds,Constant aggregates with unconstrained nominal types,Code Generation for Array Aggregates -@anchor{gnat_rm/implementation_of_specific_ada_features aggregates-with-static-bounds}@anchor{438}@anchor{gnat_rm/implementation_of_specific_ada_features id10}@anchor{439} +@anchor{gnat_rm/implementation_of_specific_ada_features aggregates-with-static-bounds}@anchor{43d}@anchor{gnat_rm/implementation_of_specific_ada_features id10}@anchor{43e} @subsection Aggregates with static bounds @@ -26824,7 +27055,7 @@ end loop; @end example @node Aggregates with nonstatic bounds,Aggregates in assignment statements,Aggregates with static bounds,Code Generation for Array Aggregates -@anchor{gnat_rm/implementation_of_specific_ada_features aggregates-with-nonstatic-bounds}@anchor{43a}@anchor{gnat_rm/implementation_of_specific_ada_features id11}@anchor{43b} +@anchor{gnat_rm/implementation_of_specific_ada_features aggregates-with-nonstatic-bounds}@anchor{43f}@anchor{gnat_rm/implementation_of_specific_ada_features id11}@anchor{440} @subsection Aggregates with nonstatic bounds @@ -26835,7 +27066,7 @@ have to be applied to sub-arrays individually, if they do not have statically compatible subtypes. @node Aggregates in assignment statements,,Aggregates with nonstatic bounds,Code Generation for Array Aggregates -@anchor{gnat_rm/implementation_of_specific_ada_features aggregates-in-assignment-statements}@anchor{43c}@anchor{gnat_rm/implementation_of_specific_ada_features id12}@anchor{43d} +@anchor{gnat_rm/implementation_of_specific_ada_features aggregates-in-assignment-statements}@anchor{441}@anchor{gnat_rm/implementation_of_specific_ada_features id12}@anchor{442} @subsection Aggregates in assignment statements @@ -26877,7 +27108,7 @@ a temporary (created either by the front-end or the code generator) and then that temporary will be copied onto the target. @node The Size of Discriminated Records with Default Discriminants,Image Values For Nonscalar Types,Code Generation for Array Aggregates,Implementation of Specific Ada Features -@anchor{gnat_rm/implementation_of_specific_ada_features id13}@anchor{43e}@anchor{gnat_rm/implementation_of_specific_ada_features the-size-of-discriminated-records-with-default-discriminants}@anchor{43f} +@anchor{gnat_rm/implementation_of_specific_ada_features id13}@anchor{443}@anchor{gnat_rm/implementation_of_specific_ada_features the-size-of-discriminated-records-with-default-discriminants}@anchor{444} @section The Size of Discriminated Records with Default Discriminants @@ -26957,7 +27188,7 @@ say) must be consistent, so it is imperative that the object, once created, remain invariant. @node Image Values For Nonscalar Types,Strict Conformance to the Ada Reference Manual,The Size of Discriminated Records with Default Discriminants,Implementation of Specific Ada Features -@anchor{gnat_rm/implementation_of_specific_ada_features id14}@anchor{440}@anchor{gnat_rm/implementation_of_specific_ada_features image-values-for-nonscalar-types}@anchor{441} +@anchor{gnat_rm/implementation_of_specific_ada_features id14}@anchor{445}@anchor{gnat_rm/implementation_of_specific_ada_features image-values-for-nonscalar-types}@anchor{446} @section Image Values For Nonscalar Types @@ -26977,7 +27208,7 @@ control of image text is required for some type T, then T’Put_Image should be explicitly specified. @node Strict Conformance to the Ada Reference Manual,,Image Values For Nonscalar Types,Implementation of Specific Ada Features -@anchor{gnat_rm/implementation_of_specific_ada_features id15}@anchor{442}@anchor{gnat_rm/implementation_of_specific_ada_features strict-conformance-to-the-ada-reference-manual}@anchor{443} +@anchor{gnat_rm/implementation_of_specific_ada_features id15}@anchor{447}@anchor{gnat_rm/implementation_of_specific_ada_features strict-conformance-to-the-ada-reference-manual}@anchor{448} @section Strict Conformance to the Ada Reference Manual @@ -27004,7 +27235,7 @@ behavior (although at the cost of a significant performance penalty), so infinite and NaN values are properly generated. @node Implementation of Ada 2022 Features,GNAT language extensions,Implementation of Specific Ada Features,Top -@anchor{gnat_rm/implementation_of_ada_2022_features doc}@anchor{444}@anchor{gnat_rm/implementation_of_ada_2022_features id1}@anchor{445}@anchor{gnat_rm/implementation_of_ada_2022_features implementation-of-ada-2022-features}@anchor{14} +@anchor{gnat_rm/implementation_of_ada_2022_features doc}@anchor{449}@anchor{gnat_rm/implementation_of_ada_2022_features id1}@anchor{44a}@anchor{gnat_rm/implementation_of_ada_2022_features implementation-of-ada-2022-features}@anchor{14} @chapter Implementation of Ada 2022 Features @@ -30423,7 +30654,7 @@ RM references: 3.02.04 (31/5) 4.06 (51.1/5) @end itemize @node GNAT language extensions,Security Hardening Features,Implementation of Ada 2022 Features,Top -@anchor{gnat_rm/gnat_language_extensions doc}@anchor{446}@anchor{gnat_rm/gnat_language_extensions gnat-language-extensions}@anchor{447}@anchor{gnat_rm/gnat_language_extensions id1}@anchor{448} +@anchor{gnat_rm/gnat_language_extensions doc}@anchor{44b}@anchor{gnat_rm/gnat_language_extensions gnat-language-extensions}@anchor{44c}@anchor{gnat_rm/gnat_language_extensions id1}@anchor{44d} @chapter GNAT language extensions @@ -30455,7 +30686,7 @@ These features might be removed or heavily modified at any time. @end menu @node How to activate the extended GNAT Ada superset,Curated Extensions,,GNAT language extensions -@anchor{gnat_rm/gnat_language_extensions how-to-activate-the-extended-gnat-ada-superset}@anchor{449} +@anchor{gnat_rm/gnat_language_extensions how-to-activate-the-extended-gnat-ada-superset}@anchor{44e} @section How to activate the extended GNAT Ada superset @@ -30465,7 +30696,7 @@ There are two ways to activate the extended GNAT Ada superset: @itemize * @item -The @ref{69,,Pragma Extensions_Allowed}. To activate +The @ref{6a,,Pragma Extensions_Allowed}. To activate the curated set of extensions, you should use @end itemize @@ -30496,7 +30727,7 @@ for use in playground experiments. @end cartouche @node Curated Extensions,Experimental Language Extensions,How to activate the extended GNAT Ada superset,GNAT language extensions -@anchor{gnat_rm/gnat_language_extensions curated-extensions}@anchor{44a}@anchor{gnat_rm/gnat_language_extensions curated-language-extensions}@anchor{6a} +@anchor{gnat_rm/gnat_language_extensions curated-extensions}@anchor{44f}@anchor{gnat_rm/gnat_language_extensions curated-language-extensions}@anchor{6b} @section Curated Extensions @@ -30513,11 +30744,12 @@ Features activated via @code{-gnatX} or * Constrained attribute for generic objects:: * Static aspect on intrinsic functions:: * First Controlling Parameter:: +* Generalized Finalization:: @end menu @node Local Declarations Without Block,Deep delta Aggregates,,Curated Extensions -@anchor{gnat_rm/gnat_language_extensions local-declarations-without-block}@anchor{44b} +@anchor{gnat_rm/gnat_language_extensions local-declarations-without-block}@anchor{450} @subsection Local Declarations Without Block @@ -30610,7 +30842,7 @@ And as such the second `@w{`}A`@w{`} declaration is hiding the first one. @end cartouche @node Deep delta Aggregates,Fixed lower bounds for array types and subtypes,Local Declarations Without Block,Curated Extensions -@anchor{gnat_rm/gnat_language_extensions deep-delta-aggregates}@anchor{44c} +@anchor{gnat_rm/gnat_language_extensions deep-delta-aggregates}@anchor{451} @subsection Deep delta Aggregates @@ -30632,7 +30864,7 @@ The syntax of delta aggregates in the extended version is the following: @end menu @node Syntax,Legality Rules,,Deep delta Aggregates -@anchor{gnat_rm/gnat_language_extensions syntax}@anchor{44d} +@anchor{gnat_rm/gnat_language_extensions syntax}@anchor{452} @subsubsection Syntax @@ -30678,7 +30910,7 @@ array_subcomponent_choice ::= @end example @node Legality Rules,Dynamic Semantics,Syntax,Deep delta Aggregates -@anchor{gnat_rm/gnat_language_extensions legality-rules}@anchor{44e} +@anchor{gnat_rm/gnat_language_extensions legality-rules}@anchor{453} @subsubsection Legality Rules @@ -30715,7 +30947,7 @@ the object denoted by the base_expression, prior to any update.] @end enumerate @node Dynamic Semantics,Examples,Legality Rules,Deep delta Aggregates -@anchor{gnat_rm/gnat_language_extensions dynamic-semantics}@anchor{44f} +@anchor{gnat_rm/gnat_language_extensions dynamic-semantics}@anchor{454} @subsubsection Dynamic Semantics @@ -30772,7 +31004,7 @@ and assigned to the corresponding subcomponent of the anonymous object. @end itemize @node Examples,,Dynamic Semantics,Deep delta Aggregates -@anchor{gnat_rm/gnat_language_extensions examples}@anchor{450} +@anchor{gnat_rm/gnat_language_extensions examples}@anchor{455} @subsubsection Examples @@ -30800,7 +31032,7 @@ end; @end example @node Fixed lower bounds for array types and subtypes,Prefixed-view notation for calls to primitive subprograms of untagged types,Deep delta Aggregates,Curated Extensions -@anchor{gnat_rm/gnat_language_extensions fixed-lower-bounds-for-array-types-and-subtypes}@anchor{451} +@anchor{gnat_rm/gnat_language_extensions fixed-lower-bounds-for-array-types-and-subtypes}@anchor{456} @subsection Fixed lower bounds for array types and subtypes @@ -30851,7 +31083,7 @@ lower bound of unconstrained array formals when the formal’s subtype has index ranges with static fixed lower bounds. @node Prefixed-view notation for calls to primitive subprograms of untagged types,Expression defaults for generic formal functions,Fixed lower bounds for array types and subtypes,Curated Extensions -@anchor{gnat_rm/gnat_language_extensions prefixed-view-notation-for-calls-to-primitive-subprograms-of-untagged-types}@anchor{452} +@anchor{gnat_rm/gnat_language_extensions prefixed-view-notation-for-calls-to-primitive-subprograms-of-untagged-types}@anchor{457} @subsection Prefixed-view notation for calls to primitive subprograms of untagged types @@ -30901,7 +31133,7 @@ pragma Assert (V.Nth_Element(1) = 42); @end example @node Expression defaults for generic formal functions,String interpolation,Prefixed-view notation for calls to primitive subprograms of untagged types,Curated Extensions -@anchor{gnat_rm/gnat_language_extensions expression-defaults-for-generic-formal-functions}@anchor{453} +@anchor{gnat_rm/gnat_language_extensions expression-defaults-for-generic-formal-functions}@anchor{458} @subsection Expression defaults for generic formal functions @@ -30932,7 +31164,7 @@ If the default is used (i.e. there is no actual corresponding to Copy), then calls to Copy in the instance will simply return Item. @node String interpolation,Constrained attribute for generic objects,Expression defaults for generic formal functions,Curated Extensions -@anchor{gnat_rm/gnat_language_extensions string-interpolation}@anchor{454} +@anchor{gnat_rm/gnat_language_extensions string-interpolation}@anchor{459} @subsection String interpolation @@ -31099,7 +31331,7 @@ a double quote is " and an open brace is @{ @end example @node Constrained attribute for generic objects,Static aspect on intrinsic functions,String interpolation,Curated Extensions -@anchor{gnat_rm/gnat_language_extensions constrained-attribute-for-generic-objects}@anchor{455} +@anchor{gnat_rm/gnat_language_extensions constrained-attribute-for-generic-objects}@anchor{45a} @subsection Constrained attribute for generic objects @@ -31107,7 +31339,7 @@ The @code{Constrained} attribute is permitted for objects of generic types. The result indicates whether the corresponding actual is constrained. @node Static aspect on intrinsic functions,First Controlling Parameter,Constrained attribute for generic objects,Curated Extensions -@anchor{gnat_rm/gnat_language_extensions static-aspect-on-intrinsic-functions}@anchor{456} +@anchor{gnat_rm/gnat_language_extensions static-aspect-on-intrinsic-functions}@anchor{45b} @subsection @code{Static} aspect on intrinsic functions @@ -31115,8 +31347,8 @@ The Ada 202x @code{Static} aspect can be specified on Intrinsic imported functio and the compiler will evaluate some of these intrinsics statically, in particular the @code{Shift_Left} and @code{Shift_Right} intrinsics. -@node First Controlling Parameter,,Static aspect on intrinsic functions,Curated Extensions -@anchor{gnat_rm/gnat_language_extensions first-controlling-parameter}@anchor{457} +@node First Controlling Parameter,Generalized Finalization,Static aspect on intrinsic functions,Curated Extensions +@anchor{gnat_rm/gnat_language_extensions first-controlling-parameter}@anchor{45c} @subsection First Controlling Parameter @@ -31215,8 +31447,170 @@ overriding a primitive or creating new one. The result of a function is never a controlling result. @end itemize +@node Generalized Finalization,,First Controlling Parameter,Curated Extensions +@anchor{gnat_rm/gnat_language_extensions generalized-finalization}@anchor{45d} +@subsection Generalized Finalization + + +The @code{Finalizable} aspect can be applied to any record type, tagged or not, +to specify that it provides the same level of control on the operations of +initialization, finalization, and assignment of objects as the controlled +types (see RM 7.6(2) for a high-level overview). The only restriction is +that the record type must be a root type, in other words not a derived type. + +The aspect additionally makes it possible to specify relaxed semantics for +the finalization operations by means of the @code{Relaxed_Finalization} setting. +Here is the archetypal example: + +@example +type T is record + ... +end record + with Finalizable => (Initialize => Initialize, + Adjust => Adjust, + Finalize => Finalize, + Relaxed_Finalization => True); + +procedure Adjust (Obj : in out T); +procedure Finalize (Obj : in out T); +procedure Initialize (Obj : in out T); +@end example + +The three procedures have the same profile, with a single @code{in out} parameter, +and also have the same dynamic semantics as for controlled types: + +@quotation + + +@itemize - + +@item +@code{Initialize} is called when an object of type @code{T} is declared without +initialization expression. + +@item +@code{Adjust} is called after an object of type @code{T} is assigned a new value. + +@item +@code{Finalize} is called when an object of type @code{T} goes out of scope (for +stack-allocated objects) or is deallocated (for heap-allocated objects). +It is also called when the value is replaced by an assignment. +@end itemize +@end quotation + +However, when @code{Relaxed_Finalization} is either @code{True} or not explicitly +specified, the following differences are implemented relative to the semantics +of controlled types: + + +@itemize * + +@item +The compiler has permission to perform no automatic finalization of +heap-allocated objects: @code{Finalize} is only called when such an object +is explicitly deallocated, or when the designated object is assigned a new +value. As a consequence, no runtime support is needed for performing +implicit deallocation. In particular, no per-object header data is needed +for heap-allocated objects. + +Heap-allocated objects allocated through a nested access type will therefore +`not' be deallocated either. The result is simply that memory will be leaked +in this case. + +@item +The @code{Adjust} and @code{Finalize} procedures are automatically considered as +having the @ref{45e,,No_Raise aspect} specified for them. In particular, the +compiler has permission to enforce none of the guarantees specified by the +RM 7.6.1 (14/1) and subsequent subclauses. +@end itemize + +Simple example of ref-counted type: + +@example +type T is record + Value : Integer; + Ref_Count : Natural := 0; +end record; + +procedure Inc_Ref (X : in out T); +procedure Dec_Ref (X : in out T); + +type T_Access is access all T; + +type T_Ref is record + Value : T_Access; +end record + with Finalizable => (Adjust => Adjust, + Finalize => Finalize); + +procedure Adjust (Ref : in out T_Ref) is +begin + Inc_Ref (Ref.Value); +end Adjust; + +procedure Finalize (Ref : in out T_Ref) is +begin + Def_Ref (Ref.Value); +end Finalize; +@end example + +Simple file handle that ensures resources are properly released: + +@example +package P is + type File (<>) is limited private; + + function Open (Path : String) return File; + + procedure Close (F : in out File); + +private + type File is limited record + Handle : ...; + end record + with Finalizable (Finalize => Close); +end P; +@end example + +@menu +* Finalizable tagged types:: +* Composite types:: +* Interoperability with controlled types:: + +@end menu + +@node Finalizable tagged types,Composite types,,Generalized Finalization +@anchor{gnat_rm/gnat_language_extensions finalizable-tagged-types}@anchor{45f} +@subsubsection Finalizable tagged types + + +The aspect is inherited by derived types and the primitives may be overridden +by the derivation. The compiler-generated calls to these operations are then +dispatching whenever it makes sense, i.e. when the object in question is of a +class-wide type and the class includes at least one finalizable tagged type. + +@node Composite types,Interoperability with controlled types,Finalizable tagged types,Generalized Finalization +@anchor{gnat_rm/gnat_language_extensions composite-types}@anchor{460} +@subsubsection Composite types + + +When a finalizable type is used as a component of a composite type, the latter +becomes finalizable as well. The three primitives are derived automatically +in order to call the primitives of their components. The dynamic semantics is +the same as for controlled components of composite types. + +@node Interoperability with controlled types,,Composite types,Generalized Finalization +@anchor{gnat_rm/gnat_language_extensions interoperability-with-controlled-types}@anchor{461} +@subsubsection Interoperability with controlled types + + +Finalizable types are fully interoperable with controlled types, in particular +it is possible for a finalizable type to have a controlled component and vice +versa, but the stricter dynamic semantics, in other words that of controlled +types, is applied in this case. + @node Experimental Language Extensions,,Curated Extensions,GNAT language extensions -@anchor{gnat_rm/gnat_language_extensions experimental-language-extensions}@anchor{6b}@anchor{gnat_rm/gnat_language_extensions id2}@anchor{458} +@anchor{gnat_rm/gnat_language_extensions experimental-language-extensions}@anchor{6c}@anchor{gnat_rm/gnat_language_extensions id2}@anchor{462} @section Experimental Language Extensions @@ -31231,18 +31625,18 @@ Features activated via @code{-gnatX0} or * Simpler Accessibility Model:: * Case pattern matching:: * Mutably Tagged Types with Size’Class Aspect:: -* Generalized Finalization:: * No_Raise aspect:: * Inference of Dependent Types in Generic Instantiations:: * External_Initialization Aspect:: * Finally construct:: * Continue statement:: * Destructors:: +* Structural Generic Instantiation:: @end menu @node Conditional when constructs,Implicit With,,Experimental Language Extensions -@anchor{gnat_rm/gnat_language_extensions conditional-when-constructs}@anchor{459} +@anchor{gnat_rm/gnat_language_extensions conditional-when-constructs}@anchor{463} @subsection Conditional when constructs @@ -31311,7 +31705,7 @@ end; @end example @node Implicit With,Storage Model,Conditional when constructs,Experimental Language Extensions -@anchor{gnat_rm/gnat_language_extensions implicit-with}@anchor{45a} +@anchor{gnat_rm/gnat_language_extensions implicit-with}@anchor{464} @subsection Implicit With @@ -31328,7 +31722,7 @@ end; @end example @node Storage Model,Attribute Super,Implicit With,Experimental Language Extensions -@anchor{gnat_rm/gnat_language_extensions storage-model}@anchor{45b} +@anchor{gnat_rm/gnat_language_extensions storage-model}@anchor{465} @subsection Storage Model @@ -31345,7 +31739,7 @@ memory models, in particular to support interactions with GPU. @end menu @node Aspect Storage_Model_Type,Aspect Designated_Storage_Model,,Storage Model -@anchor{gnat_rm/gnat_language_extensions aspect-storage-model-type}@anchor{45c} +@anchor{gnat_rm/gnat_language_extensions aspect-storage-model-type}@anchor{466} @subsubsection Aspect Storage_Model_Type @@ -31479,7 +31873,7 @@ end CUDA_Memory; @end example @node Aspect Designated_Storage_Model,Legacy Storage Pools,Aspect Storage_Model_Type,Storage Model -@anchor{gnat_rm/gnat_language_extensions aspect-designated-storage-model}@anchor{45d} +@anchor{gnat_rm/gnat_language_extensions aspect-designated-storage-model}@anchor{467} @subsubsection Aspect Designated_Storage_Model @@ -31557,7 +31951,7 @@ begin @end example @node Legacy Storage Pools,,Aspect Designated_Storage_Model,Storage Model -@anchor{gnat_rm/gnat_language_extensions legacy-storage-pools}@anchor{45e} +@anchor{gnat_rm/gnat_language_extensions legacy-storage-pools}@anchor{468} @subsubsection Legacy Storage Pools @@ -31608,7 +32002,7 @@ type Acc is access Integer_Array with Storage_Pool => My_Pool; can still be accepted as a shortcut for the new syntax. @node Attribute Super,Simpler Accessibility Model,Storage Model,Experimental Language Extensions -@anchor{gnat_rm/gnat_language_extensions attribute-super}@anchor{45f} +@anchor{gnat_rm/gnat_language_extensions attribute-super}@anchor{469} @subsection Attribute Super @@ -31643,7 +32037,7 @@ end; @end example @node Simpler Accessibility Model,Case pattern matching,Attribute Super,Experimental Language Extensions -@anchor{gnat_rm/gnat_language_extensions simpler-accessibility-model}@anchor{460} +@anchor{gnat_rm/gnat_language_extensions simpler-accessibility-model}@anchor{46a} @subsection Simpler Accessibility Model @@ -31674,7 +32068,7 @@ All of the refined rules are compatible with the [use of anonymous access types @end menu @node Stand-alone objects,Subprogram parameters,,Simpler Accessibility Model -@anchor{gnat_rm/gnat_language_extensions stand-alone-objects}@anchor{461} +@anchor{gnat_rm/gnat_language_extensions stand-alone-objects}@anchor{46b} @subsubsection Stand-alone objects @@ -31722,7 +32116,7 @@ of the RM 4.6 rule “The accessibility level of the operand type shall not be statically deeper than that of the target type …”. @node Subprogram parameters,Function results,Stand-alone objects,Simpler Accessibility Model -@anchor{gnat_rm/gnat_language_extensions subprogram-parameters}@anchor{462} +@anchor{gnat_rm/gnat_language_extensions subprogram-parameters}@anchor{46c} @subsubsection Subprogram parameters @@ -31815,7 +32209,7 @@ end; @end example @node Function results,,Subprogram parameters,Simpler Accessibility Model -@anchor{gnat_rm/gnat_language_extensions function-results}@anchor{463} +@anchor{gnat_rm/gnat_language_extensions function-results}@anchor{46d} @subsubsection Function results @@ -31943,7 +32337,7 @@ end; @end example @node Case pattern matching,Mutably Tagged Types with Size’Class Aspect,Simpler Accessibility Model,Experimental Language Extensions -@anchor{gnat_rm/gnat_language_extensions case-pattern-matching}@anchor{464} +@anchor{gnat_rm/gnat_language_extensions case-pattern-matching}@anchor{46e} @subsection Case pattern matching @@ -32072,8 +32466,8 @@ compile-time capacity limits in some annoyingly common scenarios; the message generated in such cases is usually “Capacity exceeded in compiling case statement with composite selector type”. -@node Mutably Tagged Types with Size’Class Aspect,Generalized Finalization,Case pattern matching,Experimental Language Extensions -@anchor{gnat_rm/gnat_language_extensions mutably-tagged-types-with-size-class-aspect}@anchor{465} +@node Mutably Tagged Types with Size’Class Aspect,No_Raise aspect,Case pattern matching,Experimental Language Extensions +@anchor{gnat_rm/gnat_language_extensions mutably-tagged-types-with-size-class-aspect}@anchor{46f} @subsection Mutably Tagged Types with Size’Class Aspect @@ -32243,170 +32637,8 @@ of the call is erroneous if the tag of the actual is changed while the formal parameter exists (that is, before leaving the corresponding callable construct). This is analogous to the RM 6.4.1(18) rule about discriminated parameters. -@node Generalized Finalization,No_Raise aspect,Mutably Tagged Types with Size’Class Aspect,Experimental Language Extensions -@anchor{gnat_rm/gnat_language_extensions generalized-finalization}@anchor{466} -@subsection Generalized Finalization - - -The @code{Finalizable} aspect can be applied to any record type, tagged or not, -to specify that it provides the same level of control on the operations of -initialization, finalization, and assignment of objects as the controlled -types (see RM 7.6(2) for a high-level overview). The only restriction is -that the record type must be a root type, in other words not a derived type. - -The aspect additionally makes it possible to specify relaxed semantics for -the finalization operations by means of the @code{Relaxed_Finalization} setting. -Here is the archetypal example: - -@example -type T is record - ... -end record - with Finalizable => (Initialize => Initialize, - Adjust => Adjust, - Finalize => Finalize, - Relaxed_Finalization => True); - -procedure Adjust (Obj : in out T); -procedure Finalize (Obj : in out T); -procedure Initialize (Obj : in out T); -@end example - -The three procedures have the same profile, with a single @code{in out} parameter, -and also have the same dynamic semantics as for controlled types: - -@quotation - - -@itemize - - -@item -@code{Initialize} is called when an object of type @code{T} is declared without -initialization expression. - -@item -@code{Adjust} is called after an object of type @code{T} is assigned a new value. - -@item -@code{Finalize} is called when an object of type @code{T} goes out of scope (for -stack-allocated objects) or is deallocated (for heap-allocated objects). -It is also called when the value is replaced by an assignment. -@end itemize -@end quotation - -However, when @code{Relaxed_Finalization} is either @code{True} or not explicitly -specified, the following differences are implemented relative to the semantics -of controlled types: - - -@itemize * - -@item -The compiler has permission to perform no automatic finalization of -heap-allocated objects: @code{Finalize} is only called when such an object -is explicitly deallocated, or when the designated object is assigned a new -value. As a consequence, no runtime support is needed for performing -implicit deallocation. In particular, no per-object header data is needed -for heap-allocated objects. - -Heap-allocated objects allocated through a nested access type will therefore -`not' be deallocated either. The result is simply that memory will be leaked -in this case. - -@item -The @code{Adjust} and @code{Finalize} procedures are automatically considered as -having the @ref{467,,No_Raise aspect} specified for them. In particular, the -compiler has permission to enforce none of the guarantees specified by the -RM 7.6.1 (14/1) and subsequent subclauses. -@end itemize - -Simple example of ref-counted type: - -@example -type T is record - Value : Integer; - Ref_Count : Natural := 0; -end record; - -procedure Inc_Ref (X : in out T); -procedure Dec_Ref (X : in out T); - -type T_Access is access all T; - -type T_Ref is record - Value : T_Access; -end record - with Finalizable => (Adjust => Adjust, - Finalize => Finalize); - -procedure Adjust (Ref : in out T_Ref) is -begin - Inc_Ref (Ref.Value); -end Adjust; - -procedure Finalize (Ref : in out T_Ref) is -begin - Def_Ref (Ref.Value); -end Finalize; -@end example - -Simple file handle that ensures resources are properly released: - -@example -package P is - type File (<>) is limited private; - - function Open (Path : String) return File; - - procedure Close (F : in out File); - -private - type File is limited record - Handle : ...; - end record - with Finalizable (Finalize => Close); -end P; -@end example - -@menu -* Finalizable tagged types:: -* Composite types:: -* Interoperability with controlled types:: - -@end menu - -@node Finalizable tagged types,Composite types,,Generalized Finalization -@anchor{gnat_rm/gnat_language_extensions finalizable-tagged-types}@anchor{468} -@subsubsection Finalizable tagged types - - -The aspect is inherited by derived types and the primitives may be overridden -by the derivation. The compiler-generated calls to these operations are then -dispatching whenever it makes sense, i.e. when the object in question is of a -class-wide type and the class includes at least one finalizable tagged type. - -@node Composite types,Interoperability with controlled types,Finalizable tagged types,Generalized Finalization -@anchor{gnat_rm/gnat_language_extensions composite-types}@anchor{469} -@subsubsection Composite types - - -When a finalizable type is used as a component of a composite type, the latter -becomes finalizable as well. The three primitives are derived automatically -in order to call the primitives of their components. The dynamic semantics is -the same as for controlled components of composite types. - -@node Interoperability with controlled types,,Composite types,Generalized Finalization -@anchor{gnat_rm/gnat_language_extensions interoperability-with-controlled-types}@anchor{46a} -@subsubsection Interoperability with controlled types - - -Finalizable types are fully interoperable with controlled types, in particular -it is possible for a finalizable type to have a controlled component and vice -versa, but the stricter dynamic semantics, in other words that of controlled -types, is applied in this case. - -@node No_Raise aspect,Inference of Dependent Types in Generic Instantiations,Generalized Finalization,Experimental Language Extensions -@anchor{gnat_rm/gnat_language_extensions id3}@anchor{46b}@anchor{gnat_rm/gnat_language_extensions no-raise-aspect}@anchor{467} +@node No_Raise aspect,Inference of Dependent Types in Generic Instantiations,Mutably Tagged Types with Size’Class Aspect,Experimental Language Extensions +@anchor{gnat_rm/gnat_language_extensions id3}@anchor{470}@anchor{gnat_rm/gnat_language_extensions no-raise-aspect}@anchor{45e} @subsection No_Raise aspect @@ -32416,7 +32648,7 @@ be raised during the execution of the subprogram, it is caught at the end of this execution and @code{Program_Error} is propagated to the caller. @node Inference of Dependent Types in Generic Instantiations,External_Initialization Aspect,No_Raise aspect,Experimental Language Extensions -@anchor{gnat_rm/gnat_language_extensions inference-of-dependent-types-in-generic-instantiations}@anchor{46c} +@anchor{gnat_rm/gnat_language_extensions inference-of-dependent-types-in-generic-instantiations}@anchor{471} @subsection Inference of Dependent Types in Generic Instantiations @@ -32493,7 +32725,7 @@ package Int_Array_Operations is new Array_Operations @end example @node External_Initialization Aspect,Finally construct,Inference of Dependent Types in Generic Instantiations,Experimental Language Extensions -@anchor{gnat_rm/gnat_language_extensions external-initialization-aspect}@anchor{46d} +@anchor{gnat_rm/gnat_language_extensions external-initialization-aspect}@anchor{472} @subsection External_Initialization Aspect @@ -32534,7 +32766,7 @@ The maximum size of loaded files is limited to 2@w{^31} bytes. @end cartouche @node Finally construct,Continue statement,External_Initialization Aspect,Experimental Language Extensions -@anchor{gnat_rm/gnat_language_extensions finally-construct}@anchor{46e} +@anchor{gnat_rm/gnat_language_extensions finally-construct}@anchor{473} @subsection Finally construct @@ -32551,7 +32783,7 @@ This feature is similar to the one with the same name in other languages such as @end menu @node Syntax<2>,Legality Rules<2>,,Finally construct -@anchor{gnat_rm/gnat_language_extensions id4}@anchor{46f} +@anchor{gnat_rm/gnat_language_extensions id4}@anchor{474} @subsubsection Syntax @@ -32566,7 +32798,7 @@ handled_sequence_of_statements ::= @end example @node Legality Rules<2>,Dynamic Semantics<2>,Syntax<2>,Finally construct -@anchor{gnat_rm/gnat_language_extensions id5}@anchor{470} +@anchor{gnat_rm/gnat_language_extensions id5}@anchor{475} @subsubsection Legality Rules @@ -32576,7 +32808,7 @@ to be transferred outside the finally part are forbidden. Goto & exit where the target is outside of the finally’s @code{sequence_of_statements} are forbidden @node Dynamic Semantics<2>,,Legality Rules<2>,Finally construct -@anchor{gnat_rm/gnat_language_extensions id6}@anchor{471} +@anchor{gnat_rm/gnat_language_extensions id6}@anchor{476} @subsubsection Dynamic Semantics @@ -32591,7 +32823,7 @@ execution, that is the finally block must be executed in full even if the contai aborted, or if the control is transferred out of the block. @node Continue statement,Destructors,Finally construct,Experimental Language Extensions -@anchor{gnat_rm/gnat_language_extensions continue-statement}@anchor{472} +@anchor{gnat_rm/gnat_language_extensions continue-statement}@anchor{477} @subsection Continue statement @@ -32608,8 +32840,8 @@ statement in the sequence of statements of the specified loop_statement. Note that @code{continue} is a keyword but it is not a reserved word. This is a configuration that does not exist in standard Ada. -@node Destructors,,Continue statement,Experimental Language Extensions -@anchor{gnat_rm/gnat_language_extensions destructors}@anchor{473} +@node Destructors,Structural Generic Instantiation,Continue statement,Experimental Language Extensions +@anchor{gnat_rm/gnat_language_extensions destructors}@anchor{478} @subsection Destructors @@ -32678,8 +32910,177 @@ mentioned legality rule, to prevent breaking the privacy of the type when imposing that rule on outside types that derive from the private view of the type. +@node Structural Generic Instantiation,,Destructors,Experimental Language Extensions +@anchor{gnat_rm/gnat_language_extensions structural-generic-instantiation}@anchor{479} +@subsection Structural Generic Instantiation + + +The compiler implements a second kind of generic instantiation, called +“structural”, alongside the traditional instantiation specified by the +language, which is defined as follows: the structural instantiation of +a generic unit on given actual parameters is the anonymous instantiation +of the generic unit on the actual parameters done in the outermost scope +where it would be legal to do an identical traditional instantiation. + +There is at most one structural instantiation of a generic unit on given +actual parameters done in a partition. + +Structural generic instances (the product of structural instantiation) +are implicitly created whenever a reference to them is made in a place +where a name is accepted by the language. + +@menu +* Syntax: Syntax<3>. +* Legality Rules: Legality Rules<3>. +* Static Semantics:: + +@end menu + +@node Syntax<3>,Legality Rules<3>,,Structural Generic Instantiation +@anchor{gnat_rm/gnat_language_extensions id7}@anchor{47a} +@subsubsection Syntax + + +@example +name ::= @{ set of productions specified in the RM @} + | structural_generic_instance_name + +structural_generic_instance_name ::= name generic_actual_part +@end example + +@node Legality Rules<3>,Static Semantics,Syntax<3>,Structural Generic Instantiation +@anchor{gnat_rm/gnat_language_extensions id8}@anchor{47b} +@subsubsection Legality Rules + + +The @code{name} in a @code{structural_generic_instance_name} shall denote a generic +unit that is preelaborated. Note that, unlike in a traditional instantiation, +there are no square brackets around the @code{generic_actual_part} in the second +production, which means that it is mandatory and, therefore, that the generic +unit shall have at least one generic formal parameter. + +The generic unit shall not take a generic formal object of mode @code{in out}. +If the generic unit takes a generic formal object of mode @code{in}, then the +corresponding generic actual parameter shall be a static expression. + +A @code{structural_generic_instance_name} shall not be present in a library +unit if the structural instance is also a library unit and has a semantic +dependence on the former. + +@node Static Semantics,,Legality Rules<3>,Structural Generic Instantiation +@anchor{gnat_rm/gnat_language_extensions static-semantics}@anchor{47c} +@subsubsection Static Semantics + + +A @code{structural_generic_instance_name} denotes the instance that is the +product of the structural instantiation of a generic unit on the specified +actual parameters. This instance is unique to a partition. + +Example: + +@example +with Ada.Containers.Vectors; + +procedure P is + V : Ada.Containers.Vectors(Positive,Integer).Vector; + +begin + V.Append (1); + V.Append (0); + Ada.Containers.Vectors(Positive,Integer).Generic_Sorting("<").Sort (V); +end; +@end example + +This procedure references two structural instantiations of two different generic +units: @code{Ada.Containers.Vectors(Positive,Integer)} is the structural instance +of the generic unit @code{Ada.Containers.Vectors} on @code{Positive} and @code{Integer} +and @code{Ada.Containers.Vectors(Positive,Integer).Generic_Sorting("<")} is the +structural instance of the nested generic unit +@code{Ada.Containers.Vectors(Positive,Integer).Generic_Sorting} on @code{"<"}. + +Note that the following example is illegal: + +@example +with Ada.Containers.Vectors; + +package Q is + type T is record + I : Integer; + end record; + + V : Ada.Containers.Vectors(Positive,T).Vector; +end Q; +@end example + +The reason is that @code{Ada.Containers.Vectors}, @code{Positive} and @code{Q.T} being +library-level entities, the structural instance @code{Ada.Containers.Vectors(Positive,T)} is a library unit with a dependence +on @code{Q} and, therefore, cannot be referenced from within @code{Q}. The simple +way out is to declare a traditional instantiation in this case: + +@example +with Ada.Containers.Vectors; + +package Q is + type T is record + I : Integer; + end record; + + package Vectors_Of_T is new Ada.Containers.Vectors(Positive,T); + + V : Vectors_Of_T.Vector; +end Q; +@end example + +But the following example is legal: + +@example +with Ada.Containers.Vectors; + +procedure P is + type T is record + I : Integer; + end record; + + V : Ada.Containers.Vectors(Positive,T).Vector; +end; +@end example + +because the structural instance @code{Ada.Containers.Vectors(Positive,T)} is +not a library unit. + +The first example can be rewritten in a less verbose manner: + +@example +with Ada.Containers.Vectors; use Ada.Containers.Vectors(Positive,Integer); + +procedure P is + V : Vector; + +begin + V.Append (1); + V.Append (0); + Generic_Sorting("<").Sort (V); +end; +@end example + +Another example, which additionally uses the inference of dependent types: + +@example +with Ada.Unchecked_Deallocation; + +procedure P is + + type Integer_Access is access all Integer; + + A : Integer_Access := new Integer'(1); + +begin + Ada.Unchecked_Deallocation(Name => Integer_Access) (A); +end; +@end example + @node Security Hardening Features,Obsolescent Features,GNAT language extensions,Top -@anchor{gnat_rm/security_hardening_features doc}@anchor{474}@anchor{gnat_rm/security_hardening_features id1}@anchor{475}@anchor{gnat_rm/security_hardening_features security-hardening-features}@anchor{15} +@anchor{gnat_rm/security_hardening_features doc}@anchor{47d}@anchor{gnat_rm/security_hardening_features id1}@anchor{47e}@anchor{gnat_rm/security_hardening_features security-hardening-features}@anchor{15} @chapter Security Hardening Features @@ -32689,6 +33090,8 @@ are provided by GNAT. The features in this chapter are currently experimental and subject to change. +These features are supported only by the GCC back end, not by LLVM. + @c Register Scrubbing: @menu @@ -32701,7 +33104,7 @@ change. @end menu @node Register Scrubbing,Stack Scrubbing,,Security Hardening Features -@anchor{gnat_rm/security_hardening_features register-scrubbing}@anchor{476} +@anchor{gnat_rm/security_hardening_features register-scrubbing}@anchor{47f} @section Register Scrubbing @@ -32737,7 +33140,7 @@ programming languages, see @cite{Using the GNU Compiler Collection (GCC)}. @c Stack Scrubbing: @node Stack Scrubbing,Hardened Conditionals,Register Scrubbing,Security Hardening Features -@anchor{gnat_rm/security_hardening_features stack-scrubbing}@anchor{477} +@anchor{gnat_rm/security_hardening_features stack-scrubbing}@anchor{480} @section Stack Scrubbing @@ -32881,7 +33284,7 @@ Bar_Callable_Ptr. @c Hardened Conditionals: @node Hardened Conditionals,Hardened Booleans,Stack Scrubbing,Security Hardening Features -@anchor{gnat_rm/security_hardening_features hardened-conditionals}@anchor{478} +@anchor{gnat_rm/security_hardening_features hardened-conditionals}@anchor{481} @section Hardened Conditionals @@ -32971,7 +33374,7 @@ be used with other programming languages supported by GCC. @c Hardened Booleans: @node Hardened Booleans,Control Flow Redundancy,Hardened Conditionals,Security Hardening Features -@anchor{gnat_rm/security_hardening_features hardened-booleans}@anchor{479} +@anchor{gnat_rm/security_hardening_features hardened-booleans}@anchor{482} @section Hardened Booleans @@ -33032,7 +33435,7 @@ and more details on that attribute, see @cite{Using the GNU Compiler Collection @c Control Flow Redundancy: @node Control Flow Redundancy,,Hardened Booleans,Security Hardening Features -@anchor{gnat_rm/security_hardening_features control-flow-redundancy}@anchor{47a} +@anchor{gnat_rm/security_hardening_features control-flow-redundancy}@anchor{483} @section Control Flow Redundancy @@ -33200,16 +33603,17 @@ see @cite{Using the GNU Compiler Collection (GCC)}. These options can be used with other programming languages supported by GCC. @node Obsolescent Features,Compatibility and Porting Guide,Security Hardening Features,Top -@anchor{gnat_rm/obsolescent_features doc}@anchor{47b}@anchor{gnat_rm/obsolescent_features id1}@anchor{47c}@anchor{gnat_rm/obsolescent_features obsolescent-features}@anchor{16} +@anchor{gnat_rm/obsolescent_features doc}@anchor{484}@anchor{gnat_rm/obsolescent_features id1}@anchor{485}@anchor{gnat_rm/obsolescent_features obsolescent-features}@anchor{16} @chapter Obsolescent Features This chapter describes features that are provided by GNAT, but are -considered obsolescent since there are preferred ways of achieving -the same effect. These features are provided solely for historical -compatibility purposes. +considered obsolescent since there are other, more appropriate, ways +of achieving the same effect. These features are provided solely for +historical compatibility purposes. @menu +* PolyORB:: * pragma No_Run_Time:: * pragma Ravenscar:: * pragma Restricted_Run_Time:: @@ -33218,8 +33622,18 @@ compatibility purposes. @end menu -@node pragma No_Run_Time,pragma Ravenscar,,Obsolescent Features -@anchor{gnat_rm/obsolescent_features id2}@anchor{47d}@anchor{gnat_rm/obsolescent_features pragma-no-run-time}@anchor{47e} +@node PolyORB,pragma No_Run_Time,,Obsolescent Features +@anchor{gnat_rm/obsolescent_features id2}@anchor{486}@anchor{gnat_rm/obsolescent_features polyorb}@anchor{271} +@section PolyORB + + +AWS is a deprecated product. It will be baselined with the GNAT Pro +release 28. After this release, there will be no new versions of this +product. Contact your sales representative or send a message to +@email{sales@@adacore.com} to get recommendations for replacements. + +@node pragma No_Run_Time,pragma Ravenscar,PolyORB,Obsolescent Features +@anchor{gnat_rm/obsolescent_features id3}@anchor{487}@anchor{gnat_rm/obsolescent_features pragma-no-run-time}@anchor{488} @section pragma No_Run_Time @@ -33232,7 +33646,7 @@ preferred usage is to use an appropriately configured run-time that includes just those features that are to be made accessible. @node pragma Ravenscar,pragma Restricted_Run_Time,pragma No_Run_Time,Obsolescent Features -@anchor{gnat_rm/obsolescent_features id3}@anchor{47f}@anchor{gnat_rm/obsolescent_features pragma-ravenscar}@anchor{480} +@anchor{gnat_rm/obsolescent_features id4}@anchor{489}@anchor{gnat_rm/obsolescent_features pragma-ravenscar}@anchor{48a} @section pragma Ravenscar @@ -33241,7 +33655,7 @@ The pragma @code{Ravenscar} has exactly the same effect as pragma is part of the new Ada 2005 standard. @node pragma Restricted_Run_Time,pragma Task_Info,pragma Ravenscar,Obsolescent Features -@anchor{gnat_rm/obsolescent_features id4}@anchor{481}@anchor{gnat_rm/obsolescent_features pragma-restricted-run-time}@anchor{482} +@anchor{gnat_rm/obsolescent_features id5}@anchor{48b}@anchor{gnat_rm/obsolescent_features pragma-restricted-run-time}@anchor{48c} @section pragma Restricted_Run_Time @@ -33251,7 +33665,7 @@ preferred since the Ada 2005 pragma @code{Profile} is intended for this kind of implementation dependent addition. @node pragma Task_Info,package System Task_Info s-tasinf ads,pragma Restricted_Run_Time,Obsolescent Features -@anchor{gnat_rm/obsolescent_features id5}@anchor{483}@anchor{gnat_rm/obsolescent_features pragma-task-info}@anchor{484} +@anchor{gnat_rm/obsolescent_features id6}@anchor{48d}@anchor{gnat_rm/obsolescent_features pragma-task-info}@anchor{48e} @section pragma Task_Info @@ -33277,7 +33691,7 @@ in the spec of package System.Task_Info in the runtime library. @node package System Task_Info s-tasinf ads,,pragma Task_Info,Obsolescent Features -@anchor{gnat_rm/obsolescent_features package-system-task-info}@anchor{485}@anchor{gnat_rm/obsolescent_features package-system-task-info-s-tasinf-ads}@anchor{486} +@anchor{gnat_rm/obsolescent_features package-system-task-info}@anchor{48f}@anchor{gnat_rm/obsolescent_features package-system-task-info-s-tasinf-ads}@anchor{490} @section package System.Task_Info (@code{s-tasinf.ads}) @@ -33287,7 +33701,7 @@ to support the @code{Task_Info} pragma. The predefined Ada package standard replacement for GNAT’s @code{Task_Info} functionality. @node Compatibility and Porting Guide,GNU Free Documentation License,Obsolescent Features,Top -@anchor{gnat_rm/compatibility_and_porting_guide doc}@anchor{487}@anchor{gnat_rm/compatibility_and_porting_guide compatibility-and-porting-guide}@anchor{17}@anchor{gnat_rm/compatibility_and_porting_guide id1}@anchor{488} +@anchor{gnat_rm/compatibility_and_porting_guide doc}@anchor{491}@anchor{gnat_rm/compatibility_and_porting_guide compatibility-and-porting-guide}@anchor{17}@anchor{gnat_rm/compatibility_and_porting_guide id1}@anchor{492} @chapter Compatibility and Porting Guide @@ -33309,7 +33723,7 @@ applications developed in other Ada environments. @end menu @node Writing Portable Fixed-Point Declarations,Compatibility with Ada 83,,Compatibility and Porting Guide -@anchor{gnat_rm/compatibility_and_porting_guide id2}@anchor{489}@anchor{gnat_rm/compatibility_and_porting_guide writing-portable-fixed-point-declarations}@anchor{48a} +@anchor{gnat_rm/compatibility_and_porting_guide id2}@anchor{493}@anchor{gnat_rm/compatibility_and_porting_guide writing-portable-fixed-point-declarations}@anchor{494} @section Writing Portable Fixed-Point Declarations @@ -33431,7 +33845,7 @@ If you follow this scheme you will be guaranteed that your fixed-point types will be portable. @node Compatibility with Ada 83,Compatibility between Ada 95 and Ada 2005,Writing Portable Fixed-Point Declarations,Compatibility and Porting Guide -@anchor{gnat_rm/compatibility_and_porting_guide compatibility-with-ada-83}@anchor{48b}@anchor{gnat_rm/compatibility_and_porting_guide id3}@anchor{48c} +@anchor{gnat_rm/compatibility_and_porting_guide compatibility-with-ada-83}@anchor{495}@anchor{gnat_rm/compatibility_and_porting_guide id3}@anchor{496} @section Compatibility with Ada 83 @@ -33459,7 +33873,7 @@ following subsections treat the most likely issues to be encountered. @end menu @node Legal Ada 83 programs that are illegal in Ada 95,More deterministic semantics,,Compatibility with Ada 83 -@anchor{gnat_rm/compatibility_and_porting_guide id4}@anchor{48d}@anchor{gnat_rm/compatibility_and_porting_guide legal-ada-83-programs-that-are-illegal-in-ada-95}@anchor{48e} +@anchor{gnat_rm/compatibility_and_porting_guide id4}@anchor{497}@anchor{gnat_rm/compatibility_and_porting_guide legal-ada-83-programs-that-are-illegal-in-ada-95}@anchor{498} @subsection Legal Ada 83 programs that are illegal in Ada 95 @@ -33559,7 +33973,7 @@ the fix is usually simply to add the @code{(<>)} to the generic declaration. @end itemize @node More deterministic semantics,Changed semantics,Legal Ada 83 programs that are illegal in Ada 95,Compatibility with Ada 83 -@anchor{gnat_rm/compatibility_and_porting_guide id5}@anchor{48f}@anchor{gnat_rm/compatibility_and_porting_guide more-deterministic-semantics}@anchor{490} +@anchor{gnat_rm/compatibility_and_porting_guide id5}@anchor{499}@anchor{gnat_rm/compatibility_and_porting_guide more-deterministic-semantics}@anchor{49a} @subsection More deterministic semantics @@ -33587,7 +34001,7 @@ which open select branches are executed. @end itemize @node Changed semantics,Other language compatibility issues,More deterministic semantics,Compatibility with Ada 83 -@anchor{gnat_rm/compatibility_and_porting_guide changed-semantics}@anchor{491}@anchor{gnat_rm/compatibility_and_porting_guide id6}@anchor{492} +@anchor{gnat_rm/compatibility_and_porting_guide changed-semantics}@anchor{49b}@anchor{gnat_rm/compatibility_and_porting_guide id6}@anchor{49c} @subsection Changed semantics @@ -33629,7 +34043,7 @@ covers only the restricted range. @end itemize @node Other language compatibility issues,,Changed semantics,Compatibility with Ada 83 -@anchor{gnat_rm/compatibility_and_porting_guide id7}@anchor{493}@anchor{gnat_rm/compatibility_and_porting_guide other-language-compatibility-issues}@anchor{494} +@anchor{gnat_rm/compatibility_and_porting_guide id7}@anchor{49d}@anchor{gnat_rm/compatibility_and_porting_guide other-language-compatibility-issues}@anchor{49e} @subsection Other language compatibility issues @@ -33662,7 +34076,7 @@ include @code{pragma Interface} and the floating point type attributes @end itemize @node Compatibility between Ada 95 and Ada 2005,Implementation-dependent characteristics,Compatibility with Ada 83,Compatibility and Porting Guide -@anchor{gnat_rm/compatibility_and_porting_guide compatibility-between-ada-95-and-ada-2005}@anchor{495}@anchor{gnat_rm/compatibility_and_porting_guide id8}@anchor{496} +@anchor{gnat_rm/compatibility_and_porting_guide compatibility-between-ada-95-and-ada-2005}@anchor{49f}@anchor{gnat_rm/compatibility_and_porting_guide id8}@anchor{4a0} @section Compatibility between Ada 95 and Ada 2005 @@ -33734,7 +34148,7 @@ can declare a function returning a value from an anonymous access type. @end itemize @node Implementation-dependent characteristics,Compatibility with Other Ada Systems,Compatibility between Ada 95 and Ada 2005,Compatibility and Porting Guide -@anchor{gnat_rm/compatibility_and_porting_guide id9}@anchor{497}@anchor{gnat_rm/compatibility_and_porting_guide implementation-dependent-characteristics}@anchor{498} +@anchor{gnat_rm/compatibility_and_porting_guide id9}@anchor{4a1}@anchor{gnat_rm/compatibility_and_porting_guide implementation-dependent-characteristics}@anchor{4a2} @section Implementation-dependent characteristics @@ -33757,7 +34171,7 @@ transition from certain Ada 83 compilers. @end menu @node Implementation-defined pragmas,Implementation-defined attributes,,Implementation-dependent characteristics -@anchor{gnat_rm/compatibility_and_porting_guide id10}@anchor{499}@anchor{gnat_rm/compatibility_and_porting_guide implementation-defined-pragmas}@anchor{49a} +@anchor{gnat_rm/compatibility_and_porting_guide id10}@anchor{4a3}@anchor{gnat_rm/compatibility_and_porting_guide implementation-defined-pragmas}@anchor{4a4} @subsection Implementation-defined pragmas @@ -33779,7 +34193,7 @@ avoiding compiler rejection of units that contain such pragmas; they are not relevant in a GNAT context and hence are not otherwise implemented. @node Implementation-defined attributes,Libraries,Implementation-defined pragmas,Implementation-dependent characteristics -@anchor{gnat_rm/compatibility_and_porting_guide id11}@anchor{49b}@anchor{gnat_rm/compatibility_and_porting_guide implementation-defined-attributes}@anchor{49c} +@anchor{gnat_rm/compatibility_and_porting_guide id11}@anchor{4a5}@anchor{gnat_rm/compatibility_and_porting_guide implementation-defined-attributes}@anchor{4a6} @subsection Implementation-defined attributes @@ -33793,7 +34207,7 @@ Ada 83, GNAT supplies the attributes @code{Bit}, @code{Machine_Size} and @code{Type_Class}. @node Libraries,Elaboration order,Implementation-defined attributes,Implementation-dependent characteristics -@anchor{gnat_rm/compatibility_and_porting_guide id12}@anchor{49d}@anchor{gnat_rm/compatibility_and_porting_guide libraries}@anchor{49e} +@anchor{gnat_rm/compatibility_and_porting_guide id12}@anchor{4a7}@anchor{gnat_rm/compatibility_and_porting_guide libraries}@anchor{4a8} @subsection Libraries @@ -33822,7 +34236,7 @@ be preferable to retrofit the application using modular types. @end itemize @node Elaboration order,Target-specific aspects,Libraries,Implementation-dependent characteristics -@anchor{gnat_rm/compatibility_and_porting_guide elaboration-order}@anchor{49f}@anchor{gnat_rm/compatibility_and_porting_guide id13}@anchor{4a0} +@anchor{gnat_rm/compatibility_and_porting_guide elaboration-order}@anchor{4a9}@anchor{gnat_rm/compatibility_and_porting_guide id13}@anchor{4aa} @subsection Elaboration order @@ -33858,7 +34272,7 @@ pragmas either globally (as an effect of the `-gnatE' switch) or locally @end itemize @node Target-specific aspects,,Elaboration order,Implementation-dependent characteristics -@anchor{gnat_rm/compatibility_and_porting_guide id14}@anchor{4a1}@anchor{gnat_rm/compatibility_and_porting_guide target-specific-aspects}@anchor{4a2} +@anchor{gnat_rm/compatibility_and_porting_guide id14}@anchor{4ab}@anchor{gnat_rm/compatibility_and_porting_guide target-specific-aspects}@anchor{4ac} @subsection Target-specific aspects @@ -33871,10 +34285,10 @@ on the robustness of the original design. Moreover, Ada 95 (and thus Ada 2005, Ada 2012, and Ada 2022) are sometimes incompatible with typical Ada 83 compiler practices regarding implicit packing, the meaning of the Size attribute, and the size of access values. -GNAT’s approach to these issues is described in @ref{4a3,,Representation Clauses}. +GNAT’s approach to these issues is described in @ref{4ad,,Representation Clauses}. @node Compatibility with Other Ada Systems,Representation Clauses,Implementation-dependent characteristics,Compatibility and Porting Guide -@anchor{gnat_rm/compatibility_and_porting_guide compatibility-with-other-ada-systems}@anchor{4a4}@anchor{gnat_rm/compatibility_and_porting_guide id15}@anchor{4a5} +@anchor{gnat_rm/compatibility_and_porting_guide compatibility-with-other-ada-systems}@anchor{4ae}@anchor{gnat_rm/compatibility_and_porting_guide id15}@anchor{4af} @section Compatibility with Other Ada Systems @@ -33917,7 +34331,7 @@ far beyond this minimal set, as described in the next section. @end itemize @node Representation Clauses,Compatibility with HP Ada 83,Compatibility with Other Ada Systems,Compatibility and Porting Guide -@anchor{gnat_rm/compatibility_and_porting_guide id16}@anchor{4a6}@anchor{gnat_rm/compatibility_and_porting_guide representation-clauses}@anchor{4a3} +@anchor{gnat_rm/compatibility_and_porting_guide id16}@anchor{4b0}@anchor{gnat_rm/compatibility_and_porting_guide representation-clauses}@anchor{4ad} @section Representation Clauses @@ -34010,7 +34424,7 @@ with thin pointers. @end itemize @node Compatibility with HP Ada 83,,Representation Clauses,Compatibility and Porting Guide -@anchor{gnat_rm/compatibility_and_porting_guide compatibility-with-hp-ada-83}@anchor{4a7}@anchor{gnat_rm/compatibility_and_porting_guide id17}@anchor{4a8} +@anchor{gnat_rm/compatibility_and_porting_guide compatibility-with-hp-ada-83}@anchor{4b1}@anchor{gnat_rm/compatibility_and_porting_guide id17}@anchor{4b2} @section Compatibility with HP Ada 83 @@ -34040,7 +34454,7 @@ extension of package System. @end itemize @node GNU Free Documentation License,Index,Compatibility and Porting Guide,Top -@anchor{share/gnu_free_documentation_license doc}@anchor{4a9}@anchor{share/gnu_free_documentation_license gnu-fdl}@anchor{1}@anchor{share/gnu_free_documentation_license gnu-free-documentation-license}@anchor{4aa} +@anchor{share/gnu_free_documentation_license doc}@anchor{4b3}@anchor{share/gnu_free_documentation_license gnu-fdl}@anchor{1}@anchor{share/gnu_free_documentation_license gnu-free-documentation-license}@anchor{4b4} @chapter GNU Free Documentation License diff --git a/gcc/ada/gnat_ugn.texi b/gcc/ada/gnat_ugn.texi index 7b3175e3d279..86b2cbc5d3f7 100644 --- a/gcc/ada/gnat_ugn.texi +++ b/gcc/ada/gnat_ugn.texi @@ -19,7 +19,7 @@ @copying @quotation -GNAT User's Guide for Native Platforms , Jun 27, 2025 +GNAT User's Guide for Native Platforms , Oct 06, 2025 AdaCore @@ -4628,6 +4628,23 @@ don’t specify a value, the symbol is defined to be @code{True}. You can use this switch instead of providing a definition file. @end table +@geindex -e (gnatprep) + + +@table @asis + +@item @code{-e} + +Causes both preprocessor lines and the lines deleted by +preprocessing to be replaced by empty comment lines marked +with @code{"--!"} (and no other text) in the output source file, +preserving line numbers in the output file. This option can +be useful as an alternative to @code{-b} and @code{-c} +when compilation style switches like @code{-gnatyu} or +@code{-gnatyM} are used (to avoid warnings about multiple +blank lines or lines too long). +@end table + @geindex -r (gnatprep) @@ -5023,7 +5040,7 @@ Finally, switches similar to those of @code{gnatprep} may optionally appear: Causes both preprocessor lines and the lines deleted by preprocessing to be replaced by blank lines, preserving the line number. This switch is always implied; however, if specified after @code{-c} -it cancels the effect of @code{-c}. +or @code{-e} it cancels the effect of those switches. @item @code{-c} @@ -5041,6 +5058,12 @@ literal string, an Ada identifier or any Ada reserved word. A symbol declared with this switch replaces a symbol with the same name defined in a definition file. +@item @code{-e} + +Causes both preprocessor lines and the lines deleted by +preprocessing to be replaced by empty comment lines marked +with ‘@cite{–!}’ (and no other text) in the output source file, + @item @code{-s} Causes a sorted list of symbol names and values to be @@ -5088,14 +5111,25 @@ symbol with the same name either in a definition file or specified with a switch @code{-D} in the preprocessor data file. This switch is similar to switch @code{-D} of @code{gnatprep}. +@end table + +@geindex -gnateG (gcc) -@item @code{-gnateG} + +@table @asis + +@item @code{-gnateG[bce]} When integrated preprocessing is performed on source file @code{filename.extension}, create or overwrite @code{filename.extension.prep} to contain the result of the preprocessing. For example if the source file is @code{foo.adb} then the output file is @code{foo.adb.prep}. +An optional character (b, c, or e) can be appended to indicate that filtered +lines are to be replaced by blank lines, comments, or empty comments (see +documentation above about @code{-b}, @code{-c}, and @code{-e}). +If one of those switches is given in a preprocessor data file, then it +will override any option included with @code{-gnateG}. @end table @node Mixed Language Programming,GNAT and Other Compilation Models,Conditional Compilation,The GNAT Compilation Model @@ -9155,9 +9189,13 @@ information. @table @asis -@item @code{-gnateG} +@item @code{-gnateG[bce]} -Save result of preprocessing in a text file. +Save result of preprocessing in a text file. An optional character (b, c, +or e) can be appended to indicate that filtered lines are to be replaced by +blank lines, comment lines that include the filtered line, or empty comment +lines (”–!”), respectively. The default is to replace filtered lines with +blank lines. @end table @geindex -gnateH (gcc) @@ -9561,13 +9599,13 @@ see @ref{32,,Character Set Control}. Ignore representation clauses. When this switch is used, representation clauses are treated as comments. This is useful when initially porting code where you want to ignore rep clause -problems, and also for compiling foreign code (particularly -for use with ASIS). The representation clauses that are ignored -are: enumeration_representation_clause, record_representation_clause, -and attribute_definition_clause for the following attributes: -Address, Alignment, Bit_Order, Component_Size, Machine_Radix, -Object_Size, Scalar_Storage_Order, Size, Small, Stream_Size, -and Value_Size. Pragma Default_Scalar_Storage_Order is also ignored. +problems, and also for compiling foreign code. The representation +clauses that are ignored are: enumeration_representation_clause, +record_representation_clause, and attribute_definition_clause for the +following attributes: Address, Alignment, Bit_Order, Component_Size, +Machine_Radix, Object_Size, Scalar_Storage_Order, Size, Small, +Stream_Size, and Value_Size. +Pragma Default_Scalar_Storage_Order is also ignored. Note that this option should be used only for compiling – the code is likely to malfunction at run time. @end table @@ -12143,7 +12181,7 @@ is the current list of constructs regarded as redundant: Assignment of an item to itself. @item -Type conversion that converts an expression to its own type. +Type conversion that converts an expression to its own subtype. @item Use of the attribute @code{Base} where @code{typ'Base} is the same @@ -17653,20 +17691,18 @@ version of GNAT. @item @code{gprbuild} can detect and use GNAT LLVM when it is installed. -@code{gprbuild} uses the first applicable compiler on the executable -search path, including GNAT LLVM. An easy way to build with GNAT -LLVM is to make it available on the operating system’s search path -before any other Ada compiler (such as the GCC version of GNAT). To -avoid accidentally using a different compiler than the one you want -to use, we recommend generating an explicit toolchain configuration -file with @code{gprconfig} and using it with @code{gprbuild}; see the -`GPRbuild and GPR Companion Tools User’s Guide' for details. You -can determine from the first line of the @code{.ali} file -which version of GNAT built that file because it contains either -@code{GNAT} or @code{GNAT-LLVM}. - -You can also explicitly select GNAT LLVM in your existing GPR project -file by adding @code{for Toolchain_Name("Ada") use "GNAT_LLVM";} +@code{gprbuild} uses the first applicable compiler on the executable search +path, including GNAT LLVM. An easy way to build with GNAT LLVM is to make +it available on the operating system’s search path before any other Ada +compiler (such as the GCC version of GNAT). To avoid accidentally using a +different compiler than the one you want to use, we recommend explicitly +selecting GNAT LLVM in your existing GPR project file by adding +@code{for Toolchain_Name ("Ada") use "GNAT_LLVM";}. You can also +generate an explicit toolchain configuration file with @code{gprconfig} and +use it with @code{gprbuild}; see the `GPRbuild and GPR Companion Tools +User’s Guide' for details. You can determine from the first line of the +@code{.ali} file which version of GNAT built that file because it +contains either @code{GNAT} or @code{GNAT-LLVM}. @end itemize @@ -30297,8 +30333,8 @@ to permit their use in free software. @printindex ge -@anchor{d2}@w{ } @anchor{gnat_ugn/gnat_utility_programs switches-related-to-project-files}@w{ } +@anchor{d2}@w{ } @c %**end of body @bye diff --git a/gcc/ada/gprep.adb b/gcc/ada/gprep.adb index 98e0072401e2..f40c38d8b145 100644 --- a/gcc/ada/gprep.adb +++ b/gcc/ada/gprep.adb @@ -735,7 +735,7 @@ package body GPrep is loop begin - Switch := GNAT.Command_Line.Getopt ("D: a b c C r s T u v"); + Switch := GNAT.Command_Line.Getopt ("D: a b c C e r s T u v"); case Switch is when ASCII.NUL => @@ -755,6 +755,9 @@ package body GPrep is when 'c' => Opt.Comment_Deleted_Lines := True; + when 'e' => + Opt.Empty_Comment_Deleted_Lines := True; + when 'C' => Opt.Replace_In_Comments := True; @@ -831,6 +834,7 @@ package body GPrep is Write_Line (" -c Keep preprocessor lines as comments"); Write_Line (" -C Do symbol replacements within comments"); Write_Line (" -D Associate symbol with value"); + Write_Line (" -e Replace preprocessor lines by empty comment lines"); Write_Line (" -r Generate Source_Reference pragma"); Write_Line (" -s Print a sorted list of symbol names and values"); Write_Line (" -T Use LF as line terminators"); diff --git a/gcc/ada/impunit.adb b/gcc/ada/impunit.adb index edb04a20f418..712d46c54abb 100644 --- a/gcc/ada/impunit.adb +++ b/gcc/ada/impunit.adb @@ -250,6 +250,7 @@ package body Impunit is ("g-busorg", F), -- GNAT.Bubble_Sort_G ("g-byorma", F), -- GNAT.Byte_Order_Mark ("g-bytswa", F), -- GNAT.Byte_Swapping + ("g-c_time", F), -- GNAT.C_Time ("g-calend", F), -- GNAT.Calendar ("g-catiio", F), -- GNAT.Calendar.Time_IO ("g-casuti", F), -- GNAT.Case_Util diff --git a/gcc/ada/inline.adb b/gcc/ada/inline.adb index 5e2f033b913d..a592494500fd 100644 --- a/gcc/ada/inline.adb +++ b/gcc/ada/inline.adb @@ -1061,7 +1061,9 @@ package body Inline is E : constant Subprogram_Kind_Id := Inlined.Table (Index).Name; begin - if Is_Called (E) and then not Is_Ignored_Ghost_Entity (E) then + if Is_Called (E) + and then not Is_Ignored_Ghost_Entity_In_Codegen (E) + then Add_Inlined_Subprogram (E); end if; end; diff --git a/gcc/ada/layout.adb b/gcc/ada/layout.adb index 099ea49656d9..51facf6070da 100644 --- a/gcc/ada/layout.adb +++ b/gcc/ada/layout.adb @@ -248,13 +248,21 @@ package body Layout is end if; -- For access types, set size/alignment. This is system address size, - -- except for fat pointers (unconstrained array access types), where the - -- size is two times the address size, to accommodate the two pointers - -- that are required for a fat pointer (data and template). Note that - -- E_Access_Protected_Subprogram_Type is not an access type for this - -- purpose since it is not a pointer but is equivalent to a record. For - -- access subtypes, copy the size from the base type since Gigi - -- represents them the same way. + -- except for unconstrained array access types: + -- + -- - fat pointers where the size is two times the address size, to + -- accommodate the two pointers that are required for a fat pointer + -- (data and template). + -- + -- - extended access where the size is the size of an address (data + -- pointer) plus the size of the template. The template size can't be + -- computed yet (will be done in the code generator), leave it empty + -- for now. + -- + -- Note that E_Access_Protected_Subprogram_Type is not an access type + -- for this purpose since it is not a pointer but is equivalent to a + -- record. For access subtypes, copy the size from the base type since + -- the code generator represents them the same way. if Is_Access_Type (E) then Desig_Type := Underlying_Type (Designated_Type (E)); @@ -301,7 +309,9 @@ package body Layout is and then not Debug_Flag_6 then - Init_Size (E, 2 * System_Address_Size); + if not Is_Extended_Access_Type (E) then + Init_Size (E, 2 * System_Address_Size); + end if; -- Check for bad convention set @@ -326,7 +336,9 @@ package body Layout is N_Unconstrained_Array_Definition and then not Debug_Flag_6 then - Init_Size (E, 2 * System_Address_Size); + if not Is_Extended_Access_Type (E) then + Init_Size (E, 2 * System_Address_Size); + end if; -- If unnesting subprograms, subprogram access types contain the -- address of both the subprogram and an activation record. But if we diff --git a/gcc/ada/lib-xref.ads b/gcc/ada/lib-xref.ads index 6fc636794d38..b022b337c44e 100644 --- a/gcc/ada/lib-xref.ads +++ b/gcc/ada/lib-xref.ads @@ -445,6 +445,7 @@ package Lib.Xref is E_Anonymous_Access_Type => ' ', E_Array_Subtype => 'A', E_Array_Type => 'A', + E_Assertion_Level => 'z', E_Block => 'q', E_Class_Wide_Subtype => 'C', E_Class_Wide_Type => 'C', @@ -547,7 +548,7 @@ package Lib.Xref is -- w protected object protected type -- x abstract procedure exception -- y abstract function entry or entry family - -- z generic formal parameter (unused) + -- z generic formal parameter assertion level --------------------------------------------------- -- Handling of Imported and Exported Subprograms -- diff --git a/gcc/ada/libgnarl/a-exetim__posix.adb b/gcc/ada/libgnarl/a-exetim__posix.adb index ee27ff29f156..a57689e0847d 100644 --- a/gcc/ada/libgnarl/a-exetim__posix.adb +++ b/gcc/ada/libgnarl/a-exetim__posix.adb @@ -34,8 +34,9 @@ with Ada.Task_Identification; use Ada.Task_Identification; with Ada.Unchecked_Conversion; -with System.Tasking; +with System.C_Time; with System.OS_Interface; use System.OS_Interface; +with System.Tasking; with System.Task_Primitives.Operations; use System.Task_Primitives.Operations; with Interfaces.C; use Interfaces.C; @@ -98,7 +99,7 @@ package body Ada.Execution_Time is (T : Ada.Task_Identification.Task_Id := Ada.Task_Identification.Current_Task) return CPU_Time is - TS : aliased timespec; + TS : aliased System.C_Time.timespec; Clock_Id : aliased Interfaces.C.int; Result : Interfaces.C.int; @@ -112,7 +113,7 @@ package body Ada.Execution_Time is function clock_gettime (clock_id : Interfaces.C.int; - tp : access timespec) + tp : access System.C_Time.timespec) return Interfaces.C.int; pragma Import (C, clock_gettime, "clock_gettime"); -- Function from the POSIX.1b Realtime Extensions library @@ -139,7 +140,7 @@ package body Ada.Execution_Time is (clock_id => Clock_Id, tp => TS'Unchecked_Access); pragma Assert (Result = 0); - return To_CPU_Time (To_Duration (TS)); + return To_CPU_Time (System.C_Time.To_Duration (TS)); end Clock; -------------------------- diff --git a/gcc/ada/libgnarl/a-intnam__bsd.ads b/gcc/ada/libgnarl/a-intnam__bsd.ads index 767f54e64cc2..a9fbf0eec9e9 100644 --- a/gcc/ada/libgnarl/a-intnam__bsd.ads +++ b/gcc/ada/libgnarl/a-intnam__bsd.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1991-2024, Free Software Foundation, Inc. -- +-- Copyright (C) 1991-2025, Free Software Foundation, Inc. -- -- -- -- GNARL is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- diff --git a/gcc/ada/libgnarl/s-linux.ads b/gcc/ada/libgnarl/s-linux.ads index 62176f1bd968..f41a67bd8a3a 100644 --- a/gcc/ada/libgnarl/s-linux.ads +++ b/gcc/ada/libgnarl/s-linux.ads @@ -36,7 +36,6 @@ -- Preelaborate. This package is designed to be a bottom-level (leaf) package with Interfaces.C; -with System.Parameters; package System.Linux is pragma Preelaborate; @@ -45,24 +44,8 @@ package System.Linux is -- Time -- ---------- - subtype long is Interfaces.C.long; - subtype suseconds_t is Interfaces.C.long; - type time_t is range -2 ** (System.Parameters.time_t_bits - 1) - .. 2 ** (System.Parameters.time_t_bits - 1) - 1; subtype clockid_t is Interfaces.C.int; - type timespec is record - tv_sec : time_t; - tv_nsec : long; - end record; - pragma Convention (C, timespec); - - type timeval is record - tv_sec : time_t; - tv_usec : suseconds_t; - end record; - pragma Convention (C, timeval); - ----------- -- Errno -- ----------- diff --git a/gcc/ada/libgnarl/s-linux__alpha.ads b/gcc/ada/libgnarl/s-linux__alpha.ads index 855e6672e365..c05b90c04cb7 100644 --- a/gcc/ada/libgnarl/s-linux__alpha.ads +++ b/gcc/ada/libgnarl/s-linux__alpha.ads @@ -36,7 +36,6 @@ -- Preelaborate. This package is designed to be a bottom-level (leaf) package. with Interfaces.C; -with System.Parameters; package System.Linux is pragma Preelaborate; @@ -45,24 +44,8 @@ package System.Linux is -- Time -- ---------- - subtype long is Interfaces.C.long; - subtype suseconds_t is Interfaces.C.long; - type time_t is range -2 ** (System.Parameters.time_t_bits - 1) - .. 2 ** (System.Parameters.time_t_bits - 1) - 1; subtype clockid_t is Interfaces.C.int; - type timespec is record - tv_sec : time_t; - tv_nsec : long; - end record; - pragma Convention (C, timespec); - - type timeval is record - tv_sec : time_t; - tv_usec : suseconds_t; - end record; - pragma Convention (C, timeval); - ----------- -- Errno -- ----------- diff --git a/gcc/ada/libgnarl/s-linux__android-aarch64.ads b/gcc/ada/libgnarl/s-linux__android-aarch64.ads index 537c46b5d3cc..c7a69fa29c01 100644 --- a/gcc/ada/libgnarl/s-linux__android-aarch64.ads +++ b/gcc/ada/libgnarl/s-linux__android-aarch64.ads @@ -36,7 +36,6 @@ -- Preelaborate. This package is designed to be a bottom-level (leaf) package with Interfaces.C; -with System.Parameters; package System.Linux is pragma Preelaborate; @@ -45,24 +44,8 @@ package System.Linux is -- Time -- ---------- - subtype long is Interfaces.C.long; - subtype suseconds_t is Interfaces.C.long; - type time_t is range -2 ** (System.Parameters.time_t_bits - 1) - .. 2 ** (System.Parameters.time_t_bits - 1) - 1; subtype clockid_t is Interfaces.C.int; - type timespec is record - tv_sec : time_t; - tv_nsec : long; - end record; - pragma Convention (C, timespec); - - type timeval is record - tv_sec : time_t; - tv_usec : suseconds_t; - end record; - pragma Convention (C, timeval); - ----------- -- Errno -- ----------- diff --git a/gcc/ada/libgnarl/s-linux__android-arm.ads b/gcc/ada/libgnarl/s-linux__android-arm.ads index 07bca55f6c47..fdc14c387fb9 100644 --- a/gcc/ada/libgnarl/s-linux__android-arm.ads +++ b/gcc/ada/libgnarl/s-linux__android-arm.ads @@ -36,7 +36,6 @@ -- Preelaborate. This package is designed to be a bottom-level (leaf) package with Interfaces.C; -with System.Parameters; package System.Linux is pragma Preelaborate; @@ -45,24 +44,8 @@ package System.Linux is -- Time -- ---------- - subtype long is Interfaces.C.long; - subtype suseconds_t is Interfaces.C.long; - type time_t is range -2 ** (System.Parameters.time_t_bits - 1) - .. 2 ** (System.Parameters.time_t_bits - 1) - 1; subtype clockid_t is Interfaces.C.int; - type timespec is record - tv_sec : time_t; - tv_nsec : long; - end record; - pragma Convention (C, timespec); - - type timeval is record - tv_sec : time_t; - tv_usec : suseconds_t; - end record; - pragma Convention (C, timeval); - ----------- -- Errno -- ----------- diff --git a/gcc/ada/libgnarl/s-linux__hppa.ads b/gcc/ada/libgnarl/s-linux__hppa.ads index a3ce02bcb6e7..e249846cd302 100644 --- a/gcc/ada/libgnarl/s-linux__hppa.ads +++ b/gcc/ada/libgnarl/s-linux__hppa.ads @@ -36,7 +36,6 @@ -- Preelaborate. This package is designed to be a bottom-level (leaf) package. with Interfaces.C; -with System.Parameters; package System.Linux is pragma Preelaborate; @@ -45,24 +44,8 @@ package System.Linux is -- Time -- ---------- - subtype long is Interfaces.C.long; - subtype suseconds_t is Interfaces.C.long; - type time_t is range -2 ** (System.Parameters.time_t_bits - 1) - .. 2 ** (System.Parameters.time_t_bits - 1) - 1; subtype clockid_t is Interfaces.C.int; - type timespec is record - tv_sec : time_t; - tv_nsec : long; - end record; - pragma Convention (C, timespec); - - type timeval is record - tv_sec : time_t; - tv_usec : suseconds_t; - end record; - pragma Convention (C, timeval); - ----------- -- Errno -- ----------- diff --git a/gcc/ada/libgnarl/s-linux__loongarch.ads b/gcc/ada/libgnarl/s-linux__loongarch.ads index e0eaaa47e71d..20e3d909c0e0 100644 --- a/gcc/ada/libgnarl/s-linux__loongarch.ads +++ b/gcc/ada/libgnarl/s-linux__loongarch.ads @@ -35,7 +35,6 @@ -- Preelaborate. This package is designed to be a bottom-level (leaf) package with Interfaces.C; -with System.Parameters; package System.Linux is pragma Preelaborate; @@ -44,25 +43,8 @@ package System.Linux is -- Time -- ---------- - subtype int is Interfaces.C.int; - subtype long is Interfaces.C.long; - subtype suseconds_t is Interfaces.C.long; - type time_t is range -2 ** (System.Parameters.time_t_bits - 1) - .. 2 ** (System.Parameters.time_t_bits - 1) - 1; subtype clockid_t is Interfaces.C.int; - type timespec is record - tv_sec : time_t; - tv_nsec : long; - end record; - pragma Convention (C, timespec); - - type timeval is record - tv_sec : time_t; - tv_usec : suseconds_t; - end record; - pragma Convention (C, timeval); - ----------- -- Errno -- ----------- diff --git a/gcc/ada/libgnarl/s-linux__mips.ads b/gcc/ada/libgnarl/s-linux__mips.ads index 3ad7f45379eb..6a575c7a865e 100644 --- a/gcc/ada/libgnarl/s-linux__mips.ads +++ b/gcc/ada/libgnarl/s-linux__mips.ads @@ -35,7 +35,6 @@ -- Preelaborate. This package is designed to be a bottom-level (leaf) package with Interfaces.C; -with System.Parameters; package System.Linux is pragma Preelaborate; @@ -44,25 +43,8 @@ package System.Linux is -- Time -- ---------- - subtype int is Interfaces.C.int; - subtype long is Interfaces.C.long; - subtype suseconds_t is Interfaces.C.long; - type time_t is range -2 ** (System.Parameters.time_t_bits - 1) - .. 2 ** (System.Parameters.time_t_bits - 1) - 1; subtype clockid_t is Interfaces.C.int; - type timespec is record - tv_sec : time_t; - tv_nsec : long; - end record; - pragma Convention (C, timespec); - - type timeval is record - tv_sec : time_t; - tv_usec : suseconds_t; - end record; - pragma Convention (C, timeval); - ----------- -- Errno -- ----------- @@ -125,8 +107,8 @@ package System.Linux is -- struct_sigaction offsets - sa_handler_pos : constant := int'Size / 8; - sa_mask_pos : constant := int'Size / 8 + + sa_handler_pos : constant := Interfaces.C.int'Size / 8; + sa_mask_pos : constant := Interfaces.C.int'Size / 8 + Standard'Address_Size / 8; sa_flags_pos : constant := 0; diff --git a/gcc/ada/libgnarl/s-linux__riscv.ads b/gcc/ada/libgnarl/s-linux__riscv.ads index 867cb1fa8070..ad0a07b8c506 100644 --- a/gcc/ada/libgnarl/s-linux__riscv.ads +++ b/gcc/ada/libgnarl/s-linux__riscv.ads @@ -35,7 +35,6 @@ -- Preelaborate. This package is designed to be a bottom-level (leaf) package with Interfaces.C; -with System.Parameters; package System.Linux is pragma Preelaborate; @@ -44,25 +43,8 @@ package System.Linux is -- Time -- ---------- - subtype int is Interfaces.C.int; - subtype long is Interfaces.C.long; - subtype suseconds_t is Interfaces.C.long; - type time_t is range -2 ** (System.Parameters.time_t_bits - 1) - .. 2 ** (System.Parameters.time_t_bits - 1) - 1; subtype clockid_t is Interfaces.C.int; - type timespec is record - tv_sec : time_t; - tv_nsec : long; - end record; - pragma Convention (C, timespec); - - type timeval is record - tv_sec : time_t; - tv_usec : suseconds_t; - end record; - pragma Convention (C, timeval); - ----------- -- Errno -- ----------- @@ -125,8 +107,8 @@ package System.Linux is -- struct_sigaction offsets sa_handler_pos : constant := 0; - sa_mask_pos : constant := long'Size / 8; - sa_flags_pos : constant := long'Size / 8 + 128; + sa_mask_pos : constant := Interfaces.C.long'Size / 8; + sa_flags_pos : constant := Interfaces.C.long'Size / 8 + 128; SA_SIGINFO : constant := 16#04#; SA_ONSTACK : constant := 16#08000000#; diff --git a/gcc/ada/libgnarl/s-linux__sparc.ads b/gcc/ada/libgnarl/s-linux__sparc.ads index 5ff201cf832c..037834617d72 100644 --- a/gcc/ada/libgnarl/s-linux__sparc.ads +++ b/gcc/ada/libgnarl/s-linux__sparc.ads @@ -36,7 +36,6 @@ -- Preelaborate. This package is designed to be a bottom-level (leaf) package with Interfaces.C; -with System.Parameters; package System.Linux is pragma Preelaborate; @@ -45,24 +44,8 @@ package System.Linux is -- Time -- ---------- - subtype long is Interfaces.C.long; - subtype suseconds_t is Interfaces.C.long; - type time_t is range -2 ** (System.Parameters.time_t_bits - 1) - .. 2 ** (System.Parameters.time_t_bits - 1) - 1; subtype clockid_t is Interfaces.C.int; - type timespec is record - tv_sec : time_t; - tv_nsec : long; - end record; - pragma Convention (C, timespec); - - type timeval is record - tv_sec : time_t; - tv_usec : suseconds_t; - end record; - pragma Convention (C, timeval); - ----------- -- Errno -- ----------- diff --git a/gcc/ada/libgnarl/s-linux__x32.ads b/gcc/ada/libgnarl/s-linux__x32.ads deleted file mode 100644 index 6144b8b34ce1..000000000000 --- a/gcc/ada/libgnarl/s-linux__x32.ads +++ /dev/null @@ -1,133 +0,0 @@ ------------------------------------------------------------------------------- --- -- --- GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS -- --- -- --- S Y S T E M . L I N U X -- --- -- --- S p e c -- --- -- --- Copyright (C) 2013-2025, Free Software Foundation, Inc. -- --- --- -- --- GNARL is free software; you can redistribute it and/or modify it under -- --- terms of the GNU General Public License as published by the Free Soft- -- --- ware Foundation; either version 3, or (at your option) any later ver- -- --- sion. GNAT is distributed in the hope that it will be useful, but WITH- -- --- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -- --- or FITNESS FOR A PARTICULAR PURPOSE. -- --- -- --- As a special exception 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 -- --- . -- --- -- --- -- ------------------------------------------------------------------------------- - --- This is the x32 version of this package - --- This package encapsulates cpu specific differences between implementations --- of GNU/Linux, in order to share s-osinte-linux.ads. - --- PLEASE DO NOT add any with-clauses to this package or remove the pragma --- Preelaborate. This package is designed to be a bottom-level (leaf) package - -with Interfaces.C; - -with System.Parameters; - -package System.Linux is - pragma Preelaborate; - - ---------- - -- Time -- - ---------- - - subtype suseconds_t is Long_Long_Integer; - -- Note that suseconds_t is 64 bits. - type time_t is range -2 ** (System.Parameters.time_t_bits - 1) - .. 2 ** (System.Parameters.time_t_bits - 1) - 1; - subtype clockid_t is Interfaces.C.int; - - type timespec is record - tv_sec : time_t; - tv_nsec : Long_Long_Integer; - -- Note that tv_nsec is 64 bits. - end record; - pragma Convention (C, timespec); - - type timeval is record - tv_sec : time_t; - tv_usec : suseconds_t; - end record; - pragma Convention (C, timeval); - - ----------- - -- Errno -- - ----------- - - EAGAIN : constant := 11; - EINTR : constant := 4; - EINVAL : constant := 22; - ENOMEM : constant := 12; - EPERM : constant := 1; - ETIMEDOUT : constant := 110; - - ------------- - -- Signals -- - ------------- - - SIGHUP : constant := 1; -- hangup - SIGINT : constant := 2; -- interrupt (rubout) - SIGQUIT : constant := 3; -- quit (ASCD FS) - SIGILL : constant := 4; -- illegal instruction (not reset) - SIGTRAP : constant := 5; -- trace trap (not reset) - SIGIOT : constant := 6; -- IOT instruction - SIGABRT : constant := 6; -- used by abort, replace SIGIOT in the future - SIGFPE : constant := 8; -- floating point exception - SIGKILL : constant := 9; -- kill (cannot be caught or ignored) - SIGBUS : constant := 7; -- bus error - SIGUSR1 : constant := 10; -- user defined signal 1 - SIGSEGV : constant := 11; -- segmentation violation - SIGUSR2 : constant := 12; -- user defined signal 2 - SIGPIPE : constant := 13; -- write on a pipe with no one to read it - SIGALRM : constant := 14; -- alarm clock - SIGTERM : constant := 15; -- software termination signal from kill - SIGSTKFLT : constant := 16; -- coprocessor stack fault (Linux) - SIGCLD : constant := 17; -- alias for SIGCHLD - SIGCHLD : constant := 17; -- child status change - SIGSTOP : constant := 19; -- stop (cannot be caught or ignored) - SIGTSTP : constant := 20; -- user stop requested from tty - SIGCONT : constant := 18; -- stopped process has been continued - SIGTTIN : constant := 21; -- background tty read attempted - SIGTTOU : constant := 22; -- background tty write attempted - SIGURG : constant := 23; -- urgent condition on IO channel - SIGXCPU : constant := 24; -- CPU time limit exceeded - SIGXFSZ : constant := 25; -- filesize limit exceeded - SIGVTALRM : constant := 26; -- virtual timer expired - SIGPROF : constant := 27; -- profiling timer expired - SIGWINCH : constant := 28; -- window size change - SIGPOLL : constant := 29; -- pollable event occurred - SIGIO : constant := 29; -- I/O now possible (4.2 BSD) - SIGLOST : constant := 29; -- File lock lost - SIGPWR : constant := 30; -- power-fail restart - SIGSYS : constant := 31; -- bad system call - SIGUNUSED : constant := 31; -- unused signal (mapped to SIGSYS) - SIG32 : constant := 32; -- glibc internal signal - SIG33 : constant := 33; -- glibc internal signal - SIG34 : constant := 34; -- glibc internal signal - - -- struct_sigaction offsets - - sa_handler_pos : constant := 0; - sa_mask_pos : constant := Standard'Address_Size / 8; - sa_flags_pos : constant := 128 + sa_mask_pos; - - SA_SIGINFO : constant := 16#04#; - SA_ONSTACK : constant := 16#08000000#; - -end System.Linux; diff --git a/gcc/ada/libgnarl/s-osinte__aix.adb b/gcc/ada/libgnarl/s-osinte__aix.adb index da057d47cf5b..3a2df424d91b 100644 --- a/gcc/ada/libgnarl/s-osinte__aix.adb +++ b/gcc/ada/libgnarl/s-osinte__aix.adb @@ -35,15 +35,6 @@ package body System.OS_Interface is use Interfaces.C; - ----------------- - -- To_Duration -- - ----------------- - - function To_Duration (TS : timespec) return Duration is - begin - return Duration (TS.tv_sec) + Duration (TS.tv_nsec) / 10#1#E9; - end To_Duration; - ------------------------ -- To_Target_Priority -- ------------------------ @@ -72,29 +63,6 @@ package body System.OS_Interface is end if; end To_Target_Priority; - ----------------- - -- To_Timespec -- - ----------------- - - function To_Timespec (D : Duration) return timespec is - S : time_t; - F : Duration; - - begin - S := time_t (Long_Long_Integer (D)); - F := D - Duration (S); - - -- If F is negative due to a round-up, adjust for positive F value - - if F < 0.0 then - S := S - 1; - F := F + 1.0; - end if; - - return timespec'(tv_sec => S, - tv_nsec => long (Long_Long_Integer (F * 10#1#E9))); - end To_Timespec; - ----------------- -- sched_yield -- ----------------- diff --git a/gcc/ada/libgnarl/s-osinte__aix.ads b/gcc/ada/libgnarl/s-osinte__aix.ads index 1e115b80d6fb..eb417a2cc999 100644 --- a/gcc/ada/libgnarl/s-osinte__aix.ads +++ b/gcc/ada/libgnarl/s-osinte__aix.ads @@ -43,8 +43,8 @@ with Ada.Unchecked_Conversion; with Interfaces.C; with Interfaces.C.Extensions; +with System.C_Time; with System.OS_Locks; -with System.Parameters; package System.OS_Interface is pragma Preelaborate; @@ -200,26 +200,18 @@ package System.OS_Interface is Time_Slice_Supported : constant Boolean := True; -- Indicates whether time slicing is supported - type timespec is private; - type clockid_t is new long_long; function clock_gettime (clock_id : clockid_t; - tp : access timespec) return int; + tp : access C_Time.timespec) return int; pragma Import (C, clock_gettime, "clock_gettime"); function clock_getres (clock_id : clockid_t; - res : access timespec) return int; + res : access C_Time.timespec) return int; pragma Import (C, clock_getres, "clock_getres"); - function To_Duration (TS : timespec) return Duration; - pragma Inline (To_Duration); - - function To_Timespec (D : Duration) return timespec; - pragma Inline (To_Timespec); - type struct_timezone is record tz_minuteswest : int; tz_dsttime : int; @@ -420,7 +412,7 @@ package System.OS_Interface is function pthread_cond_timedwait (cond : access pthread_cond_t; mutex : access pthread_mutex_t; - abstime : access timespec) return int; + abstime : access C_Time.timespec) return int; pragma Import (C, pthread_cond_timedwait, "pthread_cond_timedwait"); -------------------------- @@ -543,15 +535,6 @@ private type pid_t is new int; - type time_t is range -2 ** (System.Parameters.time_t_bits - 1) - .. 2 ** (System.Parameters.time_t_bits - 1) - 1; - - type timespec is record - tv_sec : time_t; - tv_nsec : long; - end record; - pragma Convention (C, timespec); - type pthread_attr_t is new System.Address; pragma Convention (C, pthread_attr_t); -- typedef struct __pt_attr *pthread_attr_t; diff --git a/gcc/ada/libgnarl/s-osinte__android.ads b/gcc/ada/libgnarl/s-osinte__android.ads index 4383860ed2b1..bf774fc491af 100644 --- a/gcc/ada/libgnarl/s-osinte__android.ads +++ b/gcc/ada/libgnarl/s-osinte__android.ads @@ -42,10 +42,10 @@ with Ada.Unchecked_Conversion; with Interfaces.C; +with System.C_Time; with System.Linux; with System.OS_Constants; with System.OS_Locks; -with System.Parameters; package System.OS_Interface is pragma Preelaborate; @@ -213,25 +213,17 @@ package System.OS_Interface is Time_Slice_Supported : constant Boolean := True; -- Indicates whether time slicing is supported - type timespec is private; - type clockid_t is new int; function clock_gettime - (clock_id : clockid_t; tp : access timespec) return int; + (clock_id : clockid_t; tp : access C_Time.timespec) return int; pragma Import (C, clock_gettime, "clock_gettime"); function clock_getres (clock_id : clockid_t; - res : access timespec) return int; + res : access C_Time.timespec) return int; pragma Import (C, clock_getres, "clock_getres"); - function To_Duration (TS : timespec) return Duration; - pragma Inline (To_Duration); - - function To_Timespec (D : Duration) return timespec; - pragma Inline (To_Timespec); - function sysconf (name : int) return long; pragma Import (C, sysconf); @@ -463,7 +455,7 @@ package System.OS_Interface is function pthread_cond_timedwait (cond : access pthread_cond_t; mutex : access pthread_mutex_t; - abstime : access timespec) return int; + abstime : access C_Time.timespec) return int; pragma Import (C, pthread_cond_timedwait, "pthread_cond_timedwait"); -------------------------- @@ -630,15 +622,6 @@ private type pid_t is new int; - type time_t is range -2 ** (System.Parameters.time_t_bits - 1) - .. 2 ** (System.Parameters.time_t_bits - 1) - 1; - - type timespec is record - tv_sec : time_t; - tv_nsec : long; - end record; - pragma Convention (C, timespec); - type unsigned_long_long_t is mod 2 ** 64; -- Local type only used to get the alignment of this type below diff --git a/gcc/ada/libgnarl/s-osinte__cheribsd.ads b/gcc/ada/libgnarl/s-osinte__cheribsd.ads index d9dae354d41e..350fa1f15ad9 100644 --- a/gcc/ada/libgnarl/s-osinte__cheribsd.ads +++ b/gcc/ada/libgnarl/s-osinte__cheribsd.ads @@ -44,8 +44,8 @@ with Ada.Unchecked_Conversion; with Interfaces; with Interfaces.C; +with System.C_Time; with System.OS_Locks; -with System.Parameters; package System.OS_Interface is pragma Preelaborate; @@ -232,30 +232,22 @@ package System.OS_Interface is Time_Slice_Supported : constant Boolean := True; -- Indicates whether time slicing is supported (i.e SCHED_RR is supported) - type timespec is private; - - function nanosleep (rqtp, rmtp : access timespec) return int; + function nanosleep (rqtp, rmtp : access C_Time.timespec) return int; pragma Import (C, nanosleep, "nanosleep"); type clockid_t is new int; function clock_getres (clock_id : clockid_t; - res : access timespec) return int; + res : access C_Time.timespec) return int; pragma Import (C, clock_getres, "clock_getres"); function clock_gettime (clock_id : clockid_t; - tp : access timespec) + tp : access C_Time.timespec) return int; pragma Import (C, clock_gettime, "clock_gettime"); - function To_Duration (TS : timespec) return Duration; - pragma Inline (To_Duration); - - function To_Timespec (D : Duration) return timespec; - pragma Inline (To_Timespec); - type struct_timezone is record tz_minuteswest : int; tz_dsttime : int; @@ -463,7 +455,7 @@ package System.OS_Interface is function pthread_cond_timedwait (cond : access pthread_cond_t; mutex : access pthread_mutex_t; - abstime : access timespec) return int; + abstime : access C_Time.timespec) return int; pragma Import (C, pthread_cond_timedwait, "pthread_cond_timedwait"); -------------------------- @@ -664,15 +656,6 @@ private Self_PID : constant pid_t := 0; - type time_t is range -2 ** (System.Parameters.time_t_bits - 1) - .. 2 ** (System.Parameters.time_t_bits - 1) - 1; - - type timespec is record - ts_sec : time_t; - ts_nsec : long; - end record; - pragma Convention (C, timespec); - type pthread_t is new System.Address; type pthread_attr_t is new System.Address; type pthread_mutexattr_t is new System.Address; diff --git a/gcc/ada/libgnarl/s-osinte__darwin.adb b/gcc/ada/libgnarl/s-osinte__darwin.adb index f512210d3437..955db064b773 100644 --- a/gcc/ada/libgnarl/s-osinte__darwin.adb +++ b/gcc/ada/libgnarl/s-osinte__darwin.adb @@ -31,19 +31,9 @@ -- This is a Darwin Threads version of this package -with Interfaces.C.Extensions; +with Interfaces.C; use Interfaces.C; package body System.OS_Interface is - use Interfaces.C; - - ----------------- - -- To_Duration -- - ----------------- - - function To_Duration (TS : timespec) return Duration is - begin - return Duration (TS.tv_sec) + Duration (TS.tv_nsec) / 10#1#E9; - end To_Duration; ------------------------ -- To_Target_Priority -- @@ -56,37 +46,13 @@ package body System.OS_Interface is return Interfaces.C.int (Prio); end To_Target_Priority; - ----------------- - -- To_Timespec -- - ----------------- - - function To_Timespec (D : Duration) return timespec is - S : time_t; - F : Duration; - - begin - S := time_t (Long_Long_Integer (D)); - F := D - Duration (S); - - -- If F has negative value due to a round-up, adjust for positive F - -- value. - - if F < 0.0 then - S := S - 1; - F := F + 1.0; - end if; - - return timespec'(tv_sec => S, - tv_nsec => long (Long_Long_Integer (F * 10#1#E9))); - end To_Timespec; - ------------------- -- clock_gettime -- ------------------- function clock_gettime (clock_id : clockid_t; - tp : access timespec) return int + tp : access C_Time.timespec) return int is pragma Unreferenced (clock_id); @@ -94,33 +60,18 @@ package body System.OS_Interface is use Interfaces; - type timeval is array (1 .. 3) of C.long; - -- The timeval array is sized to contain long_long sec and long usec. - -- If long_long'Size = long'Size then it will be overly large but that - -- won't effect the implementation since it's not accessed directly. - - procedure timeval_to_duration - (T : not null access timeval; - sec : not null access C.Extensions.long_long; - usec : not null access C.long); - pragma Import (C, timeval_to_duration, "__gnat_timeval_to_duration"); - - Micro : constant := 10**6; - sec : aliased C.Extensions.long_long; - usec : aliased C.long; - TV : aliased timeval; + TV : aliased C_Time.timeval; Result : int; function gettimeofday - (Tv : access timeval; + (Tv : access C_Time.timeval; Tz : System.Address := System.Null_Address) return int; pragma Import (C, gettimeofday, "gettimeofday"); begin Result := gettimeofday (TV'Access, System.Null_Address); pragma Assert (Result = 0); - timeval_to_duration (TV'Access, sec'Access, usec'Access); - tp.all := To_Timespec (Duration (sec) + Duration (usec) / Micro); + tp.all := C_Time.To_Timespec (TV); return Result; end clock_gettime; @@ -130,13 +81,12 @@ package body System.OS_Interface is function clock_getres (clock_id : clockid_t; - res : access timespec) return int + res : access C_Time.timespec) return int is pragma Unreferenced (clock_id); -- Darwin Threads don't have clock_getres. - Nano : constant := 10**9; nsec : int := 0; Result : int := -1; @@ -145,7 +95,7 @@ package body System.OS_Interface is begin nsec := clock_get_res; - res.all := To_Timespec (Duration (0.0) + Duration (nsec) / Nano); + res.all := C_Time.Nanoseconds_To_Timespec (nsec); if nsec > 0 then Result := 0; diff --git a/gcc/ada/libgnarl/s-osinte__darwin.ads b/gcc/ada/libgnarl/s-osinte__darwin.ads index ea62f24cbc0d..1b2a40b3cbe8 100644 --- a/gcc/ada/libgnarl/s-osinte__darwin.ads +++ b/gcc/ada/libgnarl/s-osinte__darwin.ads @@ -40,9 +40,9 @@ with Interfaces.C; +with System.C_Time; with System.OS_Constants; with System.OS_Locks; -with System.Parameters; package System.OS_Interface is pragma Preelaborate; @@ -184,23 +184,15 @@ package System.OS_Interface is Time_Slice_Supported : constant Boolean := True; -- Indicates whether time slicing is supported - type timespec is private; - type clockid_t is new int; function clock_gettime (clock_id : clockid_t; - tp : access timespec) return int; + tp : access C_Time.timespec) return int; function clock_getres (clock_id : clockid_t; - res : access timespec) return int; - - function To_Duration (TS : timespec) return Duration; - pragma Inline (To_Duration); - - function To_Timespec (D : Duration) return timespec; - pragma Inline (To_Timespec); + res : access C_Time.timespec) return int; ------------------------- -- Priority Scheduling -- @@ -397,7 +389,7 @@ package System.OS_Interface is function pthread_cond_timedwait (cond : access pthread_cond_t; mutex : access pthread_mutex_t; - abstime : access timespec) return int; + abstime : access C_Time.timespec) return int; pragma Import (C, pthread_cond_timedwait, "pthread_cond_timedwait"); -------------------------- @@ -517,15 +509,6 @@ private type pid_t is new int32_t; - type time_t is range -2 ** (System.Parameters.time_t_bits - 1) - .. 2 ** (System.Parameters.time_t_bits - 1) - 1; - - type timespec is record - tv_sec : time_t; - tv_nsec : long; - end record; - pragma Convention (C, timespec); - -- -- Darwin specific signal implementation -- diff --git a/gcc/ada/libgnarl/s-osinte__dragonfly.adb b/gcc/ada/libgnarl/s-osinte__dragonfly.adb index 73061d9eeb0c..adfbaeb27fc7 100644 --- a/gcc/ada/libgnarl/s-osinte__dragonfly.adb +++ b/gcc/ada/libgnarl/s-osinte__dragonfly.adb @@ -69,15 +69,6 @@ package body System.OS_Interface is null; end pthread_init; - ----------------- - -- To_Duration -- - ----------------- - - function To_Duration (TS : timespec) return Duration is - begin - return Duration (TS.ts_sec) + Duration (TS.ts_nsec) / 10#1#E9; - end To_Duration; - ------------------------ -- To_Target_Priority -- ------------------------ @@ -89,28 +80,4 @@ package body System.OS_Interface is return Interfaces.C.int (Prio); end To_Target_Priority; - ----------------- - -- To_Timespec -- - ----------------- - - function To_Timespec (D : Duration) return timespec is - S : time_t; - F : Duration; - - begin - S := time_t (Long_Long_Integer (D)); - F := D - Duration (S); - - -- If F has negative value due to a round-up, adjust for positive F - -- value. - - if F < 0.0 then - S := S - 1; - F := F + 1.0; - end if; - - return timespec'(ts_sec => S, - ts_nsec => long (Long_Long_Integer (F * 10#1#E9))); - end To_Timespec; - end System.OS_Interface; diff --git a/gcc/ada/libgnarl/s-osinte__dragonfly.ads b/gcc/ada/libgnarl/s-osinte__dragonfly.ads index 00dc11de2745..9e7b88e3c6e9 100644 --- a/gcc/ada/libgnarl/s-osinte__dragonfly.ads +++ b/gcc/ada/libgnarl/s-osinte__dragonfly.ads @@ -43,8 +43,8 @@ with Ada.Unchecked_Conversion; with Interfaces.C; +with System.C_Time; with System.OS_Locks; -with System.Parameters; package System.OS_Interface is pragma Preelaborate; @@ -198,30 +198,22 @@ package System.OS_Interface is Time_Slice_Supported : constant Boolean := True; -- Indicates whether time slicing is supported (i.e SCHED_RR is supported) - type timespec is private; - - function nanosleep (rqtp, rmtp : access timespec) return int; + function nanosleep (rqtp, rmtp : access C_Time.timespec) return int; pragma Import (C, nanosleep, "nanosleep"); type clockid_t is new unsigned_long; function clock_getres (clock_id : clockid_t; - res : access timespec) return int; + res : access C_Time.timespec) return int; pragma Import (C, clock_getres, "clock_getres"); function clock_gettime (clock_id : clockid_t; - tp : access timespec) + tp : access C_Time.timespec) return int; pragma Import (C, clock_gettime, "clock_gettime"); - function To_Duration (TS : timespec) return Duration; - pragma Inline (To_Duration); - - function To_Timespec (D : Duration) return timespec; - pragma Inline (To_Timespec); - type struct_timezone is record tz_minuteswest : int; tz_dsttime : int; @@ -432,7 +424,7 @@ package System.OS_Interface is function pthread_cond_timedwait (cond : access pthread_cond_t; mutex : access pthread_mutex_t; - abstime : access timespec) return int; + abstime : access C_Time.timespec) return int; pragma Import (C, pthread_cond_timedwait, "pthread_cond_timedwait"); Relative_Timed_Wait : constant Boolean := False; @@ -636,15 +628,6 @@ private type pid_t is new int; - type time_t is range -2 ** (System.Parameters.time_t_bits - 1) - .. 2 ** (System.Parameters.time_t_bits - 1) - 1; - - type timespec is record - ts_sec : time_t; - ts_nsec : long; - end record; - pragma Convention (C, timespec); - type pthread_t is new System.Address; type pthread_attr_t is new System.Address; type pthread_mutexattr_t is new System.Address; diff --git a/gcc/ada/libgnarl/s-osinte__freebsd.adb b/gcc/ada/libgnarl/s-osinte__freebsd.adb index a3240bb38d18..4516935bbc8e 100644 --- a/gcc/ada/libgnarl/s-osinte__freebsd.adb +++ b/gcc/ada/libgnarl/s-osinte__freebsd.adb @@ -69,15 +69,6 @@ package body System.OS_Interface is null; end pthread_init; - ----------------- - -- To_Duration -- - ----------------- - - function To_Duration (TS : timespec) return Duration is - begin - return Duration (TS.ts_sec) + Duration (TS.ts_nsec) / 10#1#E9; - end To_Duration; - ------------------------ -- To_Target_Priority -- ------------------------ @@ -89,27 +80,4 @@ package body System.OS_Interface is return Interfaces.C.int (Prio); end To_Target_Priority; - ----------------- - -- To_Timespec -- - ----------------- - - function To_Timespec (D : Duration) return timespec is - S : time_t; - F : Duration; - - begin - S := time_t (Long_Long_Integer (D)); - F := D - Duration (S); - - -- If F has negative value due to a round-up, adjust for positive F - - if F < 0.0 then - S := S - 1; - F := F + 1.0; - end if; - - return timespec'(ts_sec => S, - ts_nsec => long (Long_Long_Integer (F * 10#1#E9))); - end To_Timespec; - end System.OS_Interface; diff --git a/gcc/ada/libgnarl/s-osinte__freebsd.ads b/gcc/ada/libgnarl/s-osinte__freebsd.ads index b10270a4cc49..027f81d060bf 100644 --- a/gcc/ada/libgnarl/s-osinte__freebsd.ads +++ b/gcc/ada/libgnarl/s-osinte__freebsd.ads @@ -43,8 +43,8 @@ with Ada.Unchecked_Conversion; with Interfaces.C; +with System.C_Time; with System.OS_Locks; -with System.Parameters; package System.OS_Interface is pragma Preelaborate; @@ -198,30 +198,22 @@ package System.OS_Interface is Time_Slice_Supported : constant Boolean := True; -- Indicates whether time slicing is supported (i.e SCHED_RR is supported) - type timespec is private; - - function nanosleep (rqtp, rmtp : access timespec) return int; + function nanosleep (rqtp, rmtp : access C_Time.timespec) return int; pragma Import (C, nanosleep, "nanosleep"); type clockid_t is new int; function clock_getres (clock_id : clockid_t; - res : access timespec) return int; + res : access C_Time.timespec) return int; pragma Import (C, clock_getres, "clock_getres"); function clock_gettime (clock_id : clockid_t; - tp : access timespec) + tp : access C_Time.timespec) return int; pragma Import (C, clock_gettime, "clock_gettime"); - function To_Duration (TS : timespec) return Duration; - pragma Inline (To_Duration); - - function To_Timespec (D : Duration) return timespec; - pragma Inline (To_Timespec); - type struct_timezone is record tz_minuteswest : int; tz_dsttime : int; @@ -431,7 +423,7 @@ package System.OS_Interface is function pthread_cond_timedwait (cond : access pthread_cond_t; mutex : access pthread_mutex_t; - abstime : access timespec) return int; + abstime : access C_Time.timespec) return int; pragma Import (C, pthread_cond_timedwait, "pthread_cond_timedwait"); -------------------------- @@ -633,15 +625,6 @@ private type pid_t is new int; Self_PID : constant pid_t := 0; - type time_t is range -2 ** (System.Parameters.time_t_bits - 1) - .. 2 ** (System.Parameters.time_t_bits - 1) - 1; - - type timespec is record - ts_sec : time_t; - ts_nsec : long; - end record; - pragma Convention (C, timespec); - type pthread_t is new System.Address; type pthread_attr_t is new System.Address; type pthread_mutexattr_t is new System.Address; diff --git a/gcc/ada/libgnarl/s-osinte__gnu.adb b/gcc/ada/libgnarl/s-osinte__gnu.adb index 675cd0d93990..2c70f0dea157 100644 --- a/gcc/ada/libgnarl/s-osinte__gnu.adb +++ b/gcc/ada/libgnarl/s-osinte__gnu.adb @@ -93,15 +93,6 @@ package body System.OS_Interface is return 0; end pthread_setschedparam; - ----------------- - -- To_Duration -- - ----------------- - - function To_Duration (TS : timespec) return Duration is - begin - return Duration (TS.tv_sec) + Duration (TS.tv_nsec) / 10#1#E9; - end To_Duration; - ------------------------ -- To_Target_Priority -- ------------------------ @@ -113,28 +104,4 @@ package body System.OS_Interface is return Interfaces.C.int (Prio); end To_Target_Priority; - ----------------- - -- To_Timespec -- - ----------------- - - function To_Timespec (D : Duration) return timespec is - S : time_t; - F : Duration; - - begin - S := time_t (Long_Long_Integer (D)); - F := D - Duration (S); - - -- If F has negative value due to a round-up, adjust for positive F - -- value. - - if F < 0.0 then - S := S - 1; - F := F + 1.0; - end if; - - return timespec'(tv_sec => S, - tv_nsec => long (Long_Long_Integer (F * 10#1#E9))); - end To_Timespec; - end System.OS_Interface; diff --git a/gcc/ada/libgnarl/s-osinte__gnu.ads b/gcc/ada/libgnarl/s-osinte__gnu.ads index 870059d09670..18410c60415e 100644 --- a/gcc/ada/libgnarl/s-osinte__gnu.ads +++ b/gcc/ada/libgnarl/s-osinte__gnu.ads @@ -42,8 +42,8 @@ with Ada.Unchecked_Conversion; with Interfaces.C; +with System.C_Time; with System.OS_Locks; -with System.Parameters; package System.OS_Interface is pragma Preelaborate; @@ -210,9 +210,7 @@ package System.OS_Interface is Time_Slice_Supported : constant Boolean := True; -- Indicates whether time slicing is supported (i.e SCHED_RR is supported) - type timespec is private; - - function nanosleep (rqtp, rmtp : access timespec) return int; + function nanosleep (rqtp, rmtp : access C_Time.timespec) return int; pragma Import (C, nanosleep, "nanosleep"); type clockid_t is new int; @@ -221,21 +219,15 @@ package System.OS_Interface is -- From: /usr/include/time.h function clock_gettime (clock_id : clockid_t; - tp : access timespec) + tp : access C_Time.timespec) return int; pragma Import (C, clock_gettime, "clock_gettime"); function clock_getres (clock_id : clockid_t; - res : access timespec) return int; + res : access C_Time.timespec) return int; pragma Import (C, clock_getres, "clock_getres"); - function To_Duration (TS : timespec) return Duration; - pragma Inline (To_Duration); - - function To_Timespec (D : Duration) return timespec; - pragma Inline (To_Timespec); - -- From: /usr/include/unistd.h function sysconf (name : int) return long; pragma Import (C, sysconf); @@ -487,7 +479,7 @@ package System.OS_Interface is function pthread_cond_timedwait (cond : access pthread_cond_t; mutex : access pthread_mutex_t; - abstime : access timespec) return int; + abstime : access C_Time.timespec) return int; pragma Import (C, pthread_cond_timedwait, "pthread_cond_timedwait"); Relative_Timed_Wait : constant Boolean := False; @@ -656,15 +648,6 @@ private type pid_t is new int; - type time_t is range -2 ** (System.Parameters.time_t_bits - 1) - .. 2 ** (System.Parameters.time_t_bits - 1) - 1; - - type timespec is record - tv_sec : time_t; - tv_nsec : long; - end record; - pragma Convention (C, timespec); - -- From: /usr/include/pthread/pthreadtypes.h: -- typedef struct __pthread_attr pthread_attr_t; -- /usr/include/i386-gnu/bits/thread-attr.h: struct __pthread_attr... diff --git a/gcc/ada/libgnarl/s-osinte__hpux.ads b/gcc/ada/libgnarl/s-osinte__hpux.ads index 9d0f26d50f70..60fab698113b 100644 --- a/gcc/ada/libgnarl/s-osinte__hpux.ads +++ b/gcc/ada/libgnarl/s-osinte__hpux.ads @@ -42,8 +42,8 @@ with Ada.Unchecked_Conversion; with Interfaces.C; +with System.C_Time; with System.OS_Locks; -with System.Parameters; package System.OS_Interface is pragma Preelaborate; @@ -181,26 +181,18 @@ package System.OS_Interface is Time_Slice_Supported : constant Boolean := True; -- Indicates whether time slicing is supported - type timespec is private; - type clockid_t is new int; function clock_gettime (clock_id : clockid_t; - tp : access timespec) return int; + tp : access C_Time.timespec) return int; pragma Import (C, clock_gettime, "clock_gettime"); function clock_getres (clock_id : clockid_t; - res : access timespec) return int; + res : access C_Time.timespec) return int; pragma Import (C, clock_getres, "clock_getres"); - function To_Duration (TS : timespec) return Duration; - pragma Inline (To_Duration); - - function To_Timespec (D : Duration) return timespec; - pragma Inline (To_Timespec); - type struct_timezone is record tz_minuteswest : int; tz_dsttime : int; @@ -400,7 +392,7 @@ package System.OS_Interface is function pthread_cond_timedwait (cond : access pthread_cond_t; mutex : access pthread_mutex_t; - abstime : access timespec) return int; + abstime : access C_Time.timespec) return int; pragma Import (C, pthread_cond_timedwait, "pthread_cond_timedwait"); -------------------------- @@ -517,15 +509,6 @@ private type pid_t is new int; - type time_t is range -2 ** (System.Parameters.time_t_bits - 1) - .. 2 ** (System.Parameters.time_t_bits - 1) - 1; - - type timespec is record - tv_sec : time_t; - tv_nsec : long; - end record; - pragma Convention (C, timespec); - type pthread_attr_t is new int; type pthread_condattr_t is new int; type pthread_mutexattr_t is new int; diff --git a/gcc/ada/libgnarl/s-osinte__kfreebsd-gnu.ads b/gcc/ada/libgnarl/s-osinte__kfreebsd-gnu.ads index 9924659cce5d..fc6d7a992f19 100644 --- a/gcc/ada/libgnarl/s-osinte__kfreebsd-gnu.ads +++ b/gcc/ada/libgnarl/s-osinte__kfreebsd-gnu.ads @@ -42,8 +42,8 @@ with Ada.Unchecked_Conversion; with Interfaces.C; +with System.C_Time; with System.OS_Locks; -with System.Parameters; package System.OS_Interface is pragma Preelaborate; @@ -205,9 +205,7 @@ package System.OS_Interface is Time_Slice_Supported : constant Boolean := True; -- Indicates whether time slicing is supported (i.e SCHED_RR is supported) - type timespec is private; - - function nanosleep (rqtp, rmtp : access timespec) return int; + function nanosleep (rqtp, rmtp : access C_Time.timespec) return int; pragma Import (C, nanosleep, "nanosleep"); type clockid_t is new int; @@ -215,21 +213,15 @@ package System.OS_Interface is function clock_gettime (clock_id : clockid_t; - tp : access timespec) + tp : access C_Time.timespec) return int; pragma Import (C, clock_gettime, "clock_gettime"); function clock_getres (clock_id : clockid_t; - res : access timespec) return int; + res : access C_Time.timespec) return int; pragma Import (C, clock_getres, "clock_getres"); - function To_Duration (TS : timespec) return Duration; - pragma Inline (To_Duration); - - function To_Timespec (D : Duration) return timespec; - pragma Inline (To_Timespec); - function sysconf (name : int) return long; pragma Import (C, sysconf); @@ -430,7 +422,7 @@ package System.OS_Interface is function pthread_cond_timedwait (cond : access pthread_cond_t; mutex : access pthread_mutex_t; - abstime : access timespec) return int; + abstime : access C_Time.timespec) return int; pragma Import (C, pthread_cond_timedwait, "pthread_cond_timedwait"); -------------------------- @@ -602,15 +594,6 @@ private type pid_t is new int; - type time_t is range -2 ** (System.Parameters.time_t_bits - 1) - .. 2 ** (System.Parameters.time_t_bits - 1) - 1; - - type timespec is record - tv_sec : time_t; - tv_nsec : long; - end record; - pragma Convention (C, timespec); - type pthread_attr_t is record detachstate : int; schedpolicy : int; diff --git a/gcc/ada/libgnarl/s-osinte__linux.ads b/gcc/ada/libgnarl/s-osinte__linux.ads index 7aeb15da523b..2c6b353a5e0f 100644 --- a/gcc/ada/libgnarl/s-osinte__linux.ads +++ b/gcc/ada/libgnarl/s-osinte__linux.ads @@ -42,6 +42,7 @@ with Ada.Unchecked_Conversion; with Interfaces.C; +with System.C_Time; with System.Linux; with System.OS_Constants; with System.OS_Locks; @@ -54,8 +55,6 @@ package System.OS_Interface is pragma Linker_Options ("-lpthread"); - use type System.Linux.time_t; - subtype int is Interfaces.C.int; subtype char is Interfaces.C.char; subtype short is Interfaces.C.short; @@ -229,26 +228,17 @@ package System.OS_Interface is -- Time -- ---------- - subtype time_t is System.Linux.time_t; - subtype timespec is System.Linux.timespec; - subtype timeval is System.Linux.timeval; subtype clockid_t is System.Linux.clockid_t; function clock_gettime - (clock_id : clockid_t; tp : access timespec) return int; + (clock_id : clockid_t; tp : access C_Time.timespec) return int; pragma Import (C, clock_gettime, "clock_gettime"); function clock_getres (clock_id : clockid_t; - res : access timespec) return int; + res : access C_Time.timespec) return int; pragma Import (C, clock_getres, "clock_getres"); - function To_Duration (TS : timespec) return Duration; - pragma Inline (To_Duration); - - function To_Timespec (D : Duration) return timespec; - pragma Inline (To_Timespec); - function sysconf (name : int) return long; pragma Import (C, sysconf); @@ -457,7 +447,7 @@ package System.OS_Interface is function pthread_cond_timedwait (cond : access pthread_cond_t; mutex : access pthread_mutex_t; - abstime : access timespec) return int; + abstime : access C_Time.timespec) return int; pragma Import (C, pthread_cond_timedwait, "pthread_cond_timedwait"); -------------------------- diff --git a/gcc/ada/libgnarl/s-osinte__lynxos178.adb b/gcc/ada/libgnarl/s-osinte__lynxos178.adb index 88758a954f8a..beeefb617fe9 100644 --- a/gcc/ada/libgnarl/s-osinte__lynxos178.adb +++ b/gcc/ada/libgnarl/s-osinte__lynxos178.adb @@ -85,15 +85,6 @@ package body System.OS_Interface is return int (sysconf (SC_PAGESIZE)); end Get_Page_Size; - ----------------- - -- To_Duration -- - ----------------- - - function To_Duration (TS : timespec) return Duration is - begin - return Duration (TS.tv_sec) + Duration (TS.tv_nsec) / 10#1#E9; - end To_Duration; - ------------------------ -- To_Target_Priority -- ------------------------ @@ -105,29 +96,6 @@ package body System.OS_Interface is return Interfaces.C.int (Prio); end To_Target_Priority; - ----------------- - -- To_Timespec -- - ----------------- - - function To_Timespec (D : Duration) return timespec is - S : time_t; - F : Duration; - - begin - S := time_t (Long_Long_Integer (D)); - F := D - Duration (S); - - -- If F is negative due to a round-up, adjust for positive F value - - if F < 0.0 then - S := S - 1; - F := F + 1.0; - end if; - - return timespec'(tv_sec => S, - tv_nsec => long (Long_Long_Integer (F * 10#1#E9))); - end To_Timespec; - ------------- -- sigwait -- ------------- diff --git a/gcc/ada/libgnarl/s-osinte__lynxos178e.ads b/gcc/ada/libgnarl/s-osinte__lynxos178e.ads index 8b31e204acb5..dcc36b251857 100644 --- a/gcc/ada/libgnarl/s-osinte__lynxos178e.ads +++ b/gcc/ada/libgnarl/s-osinte__lynxos178e.ads @@ -42,9 +42,9 @@ with Ada.Unchecked_Conversion; with Interfaces.C; +with System.C_Time; with System.Multiprocessors; with System.OS_Locks; -with System.Parameters; package System.OS_Interface is pragma Preelaborate; @@ -193,26 +193,18 @@ package System.OS_Interface is Time_Slice_Supported : constant Boolean := True; -- Indicates whether time slicing is supported - type timespec is private; - type clockid_t is new int; function clock_gettime (clock_id : clockid_t; - tp : access timespec) return int; + tp : access C_Time.timespec) return int; pragma Import (C, clock_gettime, "clock_gettime"); function clock_getres (clock_id : clockid_t; - res : access timespec) return int; + res : access C_Time.timespec) return int; pragma Import (C, clock_getres, "clock_getres"); - function To_Duration (TS : timespec) return Duration; - pragma Inline (To_Duration); - - function To_Timespec (D : Duration) return timespec; - pragma Inline (To_Timespec); - type struct_timezone is record tz_minuteswest : int; tz_dsttime : int; @@ -220,8 +212,6 @@ package System.OS_Interface is pragma Convention (C, struct_timezone); type struct_timezone_ptr is access all struct_timezone; - type struct_timeval is private; - ------------------------- -- Priority Scheduling -- ------------------------- @@ -415,7 +405,7 @@ package System.OS_Interface is function pthread_cond_timedwait (cond : access pthread_cond_t; mutex : access pthread_mutex_t; - abstime : access timespec) return int; + abstime : access C_Time.timespec) return int; pragma Import (C, pthread_cond_timedwait, "pthread_cond_timedwait"); -------------------------- @@ -541,23 +531,6 @@ private type pid_t is new long; - type time_t is range -2 ** (System.Parameters.time_t_bits - 1) - .. 2 ** (System.Parameters.time_t_bits - 1) - 1; - - type suseconds_t is new int; - - type timespec is record - tv_sec : time_t; - tv_nsec : long; - end record; - pragma Convention (C, timespec); - - type struct_timeval is record - tv_sec : time_t; - tv_usec : suseconds_t; - end record; - pragma Convention (C, struct_timeval); - type st_attr is record stksize : int; prio : int; diff --git a/gcc/ada/libgnarl/s-osinte__posix.adb b/gcc/ada/libgnarl/s-osinte__posix.adb index 1cb4f23aec6e..2d9baeb7f363 100644 --- a/gcc/ada/libgnarl/s-osinte__posix.adb +++ b/gcc/ada/libgnarl/s-osinte__posix.adb @@ -36,6 +36,7 @@ -- that are needed by children of System. with Interfaces.C; use Interfaces.C; + package body System.OS_Interface is -------------------- @@ -58,15 +59,6 @@ package body System.OS_Interface is null; end pthread_init; - ----------------- - -- To_Duration -- - ----------------- - - function To_Duration (TS : timespec) return Duration is - begin - return Duration (TS.tv_sec) + Duration (TS.tv_nsec) / 10#1#E9; - end To_Duration; - ------------------------ -- To_Target_Priority -- ------------------------ @@ -78,28 +70,4 @@ package body System.OS_Interface is return Interfaces.C.int (Prio); end To_Target_Priority; - ----------------- - -- To_Timespec -- - ----------------- - - function To_Timespec (D : Duration) return timespec is - S : time_t; - F : Duration; - - begin - S := time_t (Long_Long_Integer (D)); - F := D - Duration (S); - - -- If F has negative value due to a round-up, adjust for positive F - -- value. - - if F < 0.0 then - S := S - 1; - F := F + 1.0; - end if; - - return timespec'(tv_sec => S, - tv_nsec => long (Long_Long_Integer (F * 10#1#E9))); - end To_Timespec; - end System.OS_Interface; diff --git a/gcc/ada/libgnarl/s-osinte__qnx.adb b/gcc/ada/libgnarl/s-osinte__qnx.adb index 720022548df1..bf95b0eab34f 100644 --- a/gcc/ada/libgnarl/s-osinte__qnx.adb +++ b/gcc/ada/libgnarl/s-osinte__qnx.adb @@ -36,6 +36,7 @@ -- that are needed by children of System. with Interfaces.C; use Interfaces.C; + package body System.OS_Interface is ----------------- @@ -70,15 +71,6 @@ package body System.OS_Interface is null; end pthread_init; - ----------------- - -- To_Duration -- - ----------------- - - function To_Duration (TS : timespec) return Duration is - begin - return Duration (TS.tv_sec) + Duration (TS.tv_nsec) / 10#1#E9; - end To_Duration; - ------------------------ -- To_Target_Priority -- ------------------------ @@ -90,28 +82,4 @@ package body System.OS_Interface is return Interfaces.C.int (Prio); end To_Target_Priority; - ----------------- - -- To_Timespec -- - ----------------- - - function To_Timespec (D : Duration) return timespec is - S : time_t; - F : Duration; - - begin - S := time_t (Long_Long_Integer (D)); - F := D - Duration (S); - - -- If F has negative value due to a round-up, adjust for positive F - -- value. - - if F < 0.0 then - S := S - 1; - F := F + 1.0; - end if; - - return timespec'(tv_sec => S, - tv_nsec => long (Long_Long_Integer (F * 10#1#E9))); - end To_Timespec; - end System.OS_Interface; diff --git a/gcc/ada/libgnarl/s-osinte__qnx.ads b/gcc/ada/libgnarl/s-osinte__qnx.ads index ea940d86330d..ee13235d891b 100644 --- a/gcc/ada/libgnarl/s-osinte__qnx.ads +++ b/gcc/ada/libgnarl/s-osinte__qnx.ads @@ -41,9 +41,9 @@ with Ada.Unchecked_Conversion; with Interfaces.C; +with System.C_Time; with System.OS_Constants; with System.OS_Locks; -with System.Parameters; package System.OS_Interface is pragma Preelaborate; @@ -213,25 +213,17 @@ package System.OS_Interface is Time_Slice_Supported : constant Boolean := True; -- Indicates whether time slicing is supported - type timespec is private; - type clockid_t is new int; function clock_gettime - (clock_id : clockid_t; tp : access timespec) return int; + (clock_id : clockid_t; tp : access C_Time.timespec) return int; pragma Import (C, clock_gettime, "clock_gettime"); function clock_getres (clock_id : clockid_t; - res : access timespec) return int; + res : access C_Time.timespec) return int; pragma Import (C, clock_getres, "clock_getres"); - function To_Duration (TS : timespec) return Duration; - pragma Inline (To_Duration); - - function To_Timespec (D : Duration) return timespec; - pragma Inline (To_Timespec); - ------------------------- -- Priority Scheduling -- ------------------------- @@ -418,7 +410,7 @@ package System.OS_Interface is function pthread_cond_timedwait (cond : access pthread_cond_t; mutex : access pthread_mutex_t; - abstime : access timespec) return int; + abstime : access C_Time.timespec) return int; pragma Import (C, pthread_cond_timedwait, "pthread_cond_timedwait"); -------------------------- @@ -572,15 +564,6 @@ private type pid_t is new int; - type time_t is range -2 ** (System.Parameters.time_t_bits - 1) - .. 2 ** (System.Parameters.time_t_bits - 1) - 1; - - type timespec is record - tv_sec : time_t; - tv_nsec : long; - end record; - pragma Convention (C, timespec); - type unsigned_long_long_t is mod 2 ** 64; -- Local type only used to get the alignment of this type below diff --git a/gcc/ada/libgnarl/s-osinte__rtems.adb b/gcc/ada/libgnarl/s-osinte__rtems.adb index c0f6c265b509..efd602e73f82 100644 --- a/gcc/ada/libgnarl/s-osinte__rtems.adb +++ b/gcc/ada/libgnarl/s-osinte__rtems.adb @@ -92,15 +92,6 @@ package body System.OS_Interface is return int with Import, External_Name => "rtems_semaphore_release", Convention => C; - ----------------- - -- To_Duration -- - ----------------- - - function To_Duration (TS : timespec) return Duration is - begin - return Duration (TS.tv_sec) + Duration (TS.tv_nsec) / 10#1#E9; - end To_Duration; - ------------------------ -- To_Target_Priority -- ------------------------ @@ -112,27 +103,6 @@ package body System.OS_Interface is return Interfaces.C.int (Prio); end To_Target_Priority; - ----------------- - -- To_Timespec -- - ----------------- - - function To_Timespec (D : Duration) return timespec is - S : time_t; - F : Duration; - begin - S := time_t (Long_Long_Integer (D)); - F := D - Duration (S); - - -- If F has negative value due to round-up, adjust for positive F value - - if F < 0.0 then - S := S - 1; - F := F + 1.0; - end if; - return timespec'(tv_sec => S, - tv_nsec => long (Long_Long_Integer (F * 10#1#E9))); - end To_Timespec; - ----------------------------- -- Binary_Semaphore_Create -- ----------------------------- diff --git a/gcc/ada/libgnarl/s-osinte__rtems.ads b/gcc/ada/libgnarl/s-osinte__rtems.ads index 21b1be8a306a..184d48978364 100644 --- a/gcc/ada/libgnarl/s-osinte__rtems.ads +++ b/gcc/ada/libgnarl/s-osinte__rtems.ads @@ -52,9 +52,9 @@ with Interfaces.C; +with System.C_Time; with System.OS_Constants; with System.OS_Locks; -with System.Parameters; package System.OS_Interface is pragma Preelaborate; @@ -181,8 +181,6 @@ package System.OS_Interface is Time_Slice_Supported : constant Boolean := True; -- Indicates whether time slicing is supported (i.e SCHED_RR is supported) - type timespec is private; - type clockid_t is new int; CLOCK_REALTIME : constant clockid_t; @@ -190,20 +188,14 @@ package System.OS_Interface is function clock_gettime (clock_id : clockid_t; - tp : access timespec) return int; + tp : access C_Time.timespec) return int; pragma Import (C, clock_gettime, "clock_gettime"); function clock_getres (clock_id : clockid_t; - res : access timespec) return int; + res : access C_Time.timespec) return int; pragma Import (C, clock_getres, "clock_getres"); - function To_Duration (TS : timespec) return Duration; - pragma Inline (To_Duration); - - function To_Timespec (D : Duration) return timespec; - pragma Inline (To_Timespec); - ------------------------- -- Priority Scheduling -- ------------------------- @@ -428,7 +420,7 @@ package System.OS_Interface is function pthread_cond_timedwait (cond : access pthread_cond_t; mutex : access pthread_mutex_t; - abstime : access timespec) return int; + abstime : access C_Time.timespec) return int; pragma Import (C, pthread_cond_timedwait, "pthread_cond_timedwait"); -------------------------- @@ -454,8 +446,8 @@ package System.OS_Interface is type struct_sched_param is record sched_priority : int; ss_low_priority : int; - ss_replenish_period : timespec; - ss_initial_budget : timespec; + ss_replenish_period : C_Time.timespec; + ss_initial_budget : C_Time.timespec; sched_ss_max_repl : int; end record; pragma Convention (C, struct_sched_param); @@ -591,15 +583,6 @@ private type pid_t is new int; - type time_t is range -2 ** (System.Parameters.time_t_bits - 1) - .. 2 ** (System.Parameters.time_t_bits - 1) - 1; - - type timespec is record - tv_sec : time_t; - tv_nsec : long; - end record; - pragma Convention (C, timespec); - CLOCK_REALTIME : constant clockid_t := System.OS_Constants.CLOCK_REALTIME; CLOCK_MONOTONIC : constant clockid_t := System.OS_Constants.CLOCK_MONOTONIC; diff --git a/gcc/ada/libgnarl/s-osinte__solaris.adb b/gcc/ada/libgnarl/s-osinte__solaris.adb index e5626fc4f0d8..78144efdbcdb 100644 --- a/gcc/ada/libgnarl/s-osinte__solaris.adb +++ b/gcc/ada/libgnarl/s-osinte__solaris.adb @@ -35,42 +35,8 @@ -- This package encapsulates all direct interfaces to OS services -- that are needed by children of System. -with Interfaces.C; use Interfaces.C; - package body System.OS_Interface is - ----------------- - -- To_Duration -- - ----------------- - - function To_Duration (TS : timespec) return Duration is - begin - return Duration (TS.tv_sec) + Duration (TS.tv_nsec) / 10#1#E9; - end To_Duration; - - ----------------- - -- To_Timespec -- - ----------------- - - function To_Timespec (D : Duration) return timespec is - S : time_t; - F : Duration; - - begin - S := time_t (Long_Long_Integer (D)); - F := D - Duration (S); - - -- If F has negative value due to a round-up, adjust for positive F - - if F < 0.0 then - S := S - 1; - F := F + 1.0; - end if; - - return timespec'(tv_sec => S, - tv_nsec => long (Long_Long_Integer (F * 10#1#E9))); - end To_Timespec; - ------------------ -- pthread_init -- ------------------ diff --git a/gcc/ada/libgnarl/s-osinte__solaris.ads b/gcc/ada/libgnarl/s-osinte__solaris.ads index d62dd37110eb..e9b59fe1ca92 100644 --- a/gcc/ada/libgnarl/s-osinte__solaris.ads +++ b/gcc/ada/libgnarl/s-osinte__solaris.ads @@ -42,8 +42,8 @@ with Ada.Unchecked_Conversion; with Interfaces.C; +with System.C_Time; with System.OS_Locks; -with System.Parameters; package System.OS_Interface is pragma Preelaborate; @@ -241,24 +241,16 @@ package System.OS_Interface is -- Time -- ---------- - type timespec is private; - type clockid_t is new int; function clock_gettime - (clock_id : clockid_t; tp : access timespec) return int; + (clock_id : clockid_t; tp : access C_Time.timespec) return int; pragma Import (C, clock_gettime, "clock_gettime"); function clock_getres - (clock_id : clockid_t; res : access timespec) return int; + (clock_id : clockid_t; res : access C_Time.timespec) return int; pragma Import (C, clock_getres, "clock_getres"); - function To_Duration (TS : timespec) return Duration; - pragma Inline (To_Duration); - - function To_Timespec (D : Duration) return timespec; - pragma Inline (To_Timespec); - function sysconf (name : int) return long; pragma Import (C, sysconf); @@ -347,7 +339,7 @@ package System.OS_Interface is function cond_timedwait (cond : access cond_t; mutex : access mutex_t; - abstime : access timespec) return int; + abstime : access C_Time.timespec) return int; pragma Import (C, cond_timedwait, "cond_timedwait"); function cond_signal (cond : access cond_t) return int; @@ -526,15 +518,6 @@ private type pid_t is new long; - type time_t is range -2 ** (System.Parameters.time_t_bits - 1) - .. 2 ** (System.Parameters.time_t_bits - 1) - 1; - - type timespec is record - tv_sec : time_t; - tv_nsec : long; - end record; - pragma Convention (C, timespec); - type array_type_9 is array (0 .. 3) of unsigned_char; type record_type_3 is record flag : array_type_9; diff --git a/gcc/ada/libgnarl/s-osinte__vxworks.adb b/gcc/ada/libgnarl/s-osinte__vxworks.adb index 5c227a1e54c8..0b2b5d442698 100644 --- a/gcc/ada/libgnarl/s-osinte__vxworks.adb +++ b/gcc/ada/libgnarl/s-osinte__vxworks.adb @@ -41,38 +41,6 @@ package body System.OS_Interface is Low_Priority : constant := 255; -- VxWorks native (default) lowest scheduling priority - ----------------- - -- To_Duration -- - ----------------- - - function To_Duration (TS : timespec) return Duration is - begin - return Duration (TS.ts_sec) + Duration (TS.ts_nsec) / 10#1#E9; - end To_Duration; - - ----------------- - -- To_Timespec -- - ----------------- - - function To_Timespec (D : Duration) return timespec is - S : time_t; - F : Duration; - - begin - S := time_t (Long_Long_Integer (D)); - F := D - Duration (S); - - -- If F is negative due to a round-up, adjust for positive F value - - if F < 0.0 then - S := S - 1; - F := F + 1.0; - end if; - - return timespec'(ts_sec => S, - ts_nsec => long (Long_Long_Integer (F * 10#1#E9))); - end To_Timespec; - ------------------------- -- To_VxWorks_Priority -- ------------------------- diff --git a/gcc/ada/libgnarl/s-osinte__vxworks.ads b/gcc/ada/libgnarl/s-osinte__vxworks.ads index a4095735bd6d..ecb63440a5db 100644 --- a/gcc/ada/libgnarl/s-osinte__vxworks.ads +++ b/gcc/ada/libgnarl/s-osinte__vxworks.ads @@ -40,10 +40,10 @@ with Interfaces.C; +with System.C_Time; with System.VxWorks; with System.VxWorks.Ext; with System.Multiprocessors; -with System.Parameters; package System.OS_Interface is pragma Preelaborate; @@ -244,37 +244,13 @@ package System.OS_Interface is -- Time -- ---------- - type time_t is range -2 ** (System.Parameters.time_t_bits - 1) - .. 2 ** (System.Parameters.time_t_bits - 1) - 1; - -- Time_t here used to be unsigned to match the VxWorks header declaration. - -- The header declaration has changed in newer releases and is now signed - -- for applications. - - type timespec is record - ts_sec : time_t; - ts_nsec : long; - end record; - pragma Convention (C, timespec); - type clockid_t is new int; - function To_Duration (TS : timespec) return Duration; - pragma Inline (To_Duration); - - function To_Timespec (D : Duration) return timespec; - pragma Inline (To_Timespec); - -- Convert a Duration value to a timespec value. Note that in VxWorks, - -- timespec is always non-negative (since time_t is defined above as - -- unsigned long). This means that there is a potential problem if a - -- negative argument is passed for D. However, in actual usage, the - -- value of the input argument D is always non-negative, so no problem - -- arises in practice. - function To_Clock_Ticks (D : Duration) return int; -- Convert a duration value (in seconds) into clock ticks function clock_gettime - (clock_id : clockid_t; tp : access timespec) return int; + (clock_id : clockid_t; tp : access C_Time.timespec) return int; pragma Import (C, clock_gettime, "clock_gettime"); ---------------------- diff --git a/gcc/ada/libgnarl/s-osinte__x32.adb b/gcc/ada/libgnarl/s-osinte__x32.adb deleted file mode 100644 index 27313a4bcc07..000000000000 --- a/gcc/ada/libgnarl/s-osinte__x32.adb +++ /dev/null @@ -1,106 +0,0 @@ ------------------------------------------------------------------------------- --- -- --- GNAT RUN-TIME LIBRARY (GNARL) COMPONENTS -- --- -- --- S Y S T E M . O S _ I N T E R F A C E -- --- -- --- B o d y -- --- -- --- Copyright (C) 1991-2017, Florida State University -- --- Copyright (C) 1995-2025, AdaCore -- --- -- --- GNAT is free software; you can redistribute it and/or modify it under -- --- terms of the GNU General Public License as published by the Free Soft- -- --- ware Foundation; either version 3, or (at your option) any later ver- -- --- sion. GNAT is distributed in the hope that it will be useful, but WITH- -- --- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -- --- or FITNESS FOR A PARTICULAR PURPOSE. -- --- -- --- As a special exception 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 -- --- . -- --- -- --- GNARL was developed by the GNARL team at Florida State University. -- --- Extensive contributions were provided by Ada Core Technologies, Inc. -- --- -- ------------------------------------------------------------------------------- - --- This version is for Linux/x32 - --- This package encapsulates all direct interfaces to OS services --- that are needed by children of System. - -with Interfaces.C; use Interfaces.C; - -package body System.OS_Interface is - - -------------------- - -- Get_Stack_Base -- - -------------------- - - function Get_Stack_Base (thread : pthread_t) return Address is - pragma Warnings (Off, thread); - - begin - return Null_Address; - end Get_Stack_Base; - - ------------------ - -- pthread_init -- - ------------------ - - procedure pthread_init is - begin - null; - end pthread_init; - - ----------------- - -- To_Duration -- - ----------------- - - function To_Duration (TS : timespec) return Duration is - begin - return Duration (TS.tv_sec) + Duration (TS.tv_nsec) / 10#1#E9; - end To_Duration; - - ------------------------ - -- To_Target_Priority -- - ------------------------ - - function To_Target_Priority - (Prio : System.Any_Priority) return Interfaces.C.int - is - begin - return Interfaces.C.int (Prio); - end To_Target_Priority; - - ----------------- - -- To_Timespec -- - ----------------- - - function To_Timespec (D : Duration) return timespec is - S : time_t; - F : Duration; - - begin - S := time_t (Long_Long_Integer (D)); - F := D - Duration (S); - - -- If F has negative value due to a round-up, adjust for positive F - -- value. - - if F < 0.0 then - S := S - 1; - F := F + 1.0; - end if; - - return timespec'(tv_sec => S, - tv_nsec => Long_Long_Integer (F * 10#1#E9)); - end To_Timespec; - -end System.OS_Interface; diff --git a/gcc/ada/libgnarl/s-qnx.ads b/gcc/ada/libgnarl/s-qnx.ads index 1197be15ef6c..f342ad673056 100644 --- a/gcc/ada/libgnarl/s-qnx.ads +++ b/gcc/ada/libgnarl/s-qnx.ads @@ -37,8 +37,6 @@ with Interfaces.C; -with System.Parameters; - package System.QNX is pragma Preelaborate; @@ -46,24 +44,8 @@ package System.QNX is -- Time -- ---------- - subtype long is Interfaces.C.long; - subtype suseconds_t is Interfaces.C.long; - type time_t is range -2 ** (System.Parameters.time_t_bits - 1) - .. 2 ** (System.Parameters.time_t_bits - 1) - 1; subtype clockid_t is Interfaces.C.int; - type timespec is record - tv_sec : time_t; - tv_nsec : long; - end record; - pragma Convention (C, timespec); - - type timeval is record - tv_sec : time_t; - tv_usec : suseconds_t; - end record; - pragma Convention (C, timeval); - ----------- -- Errno -- ----------- diff --git a/gcc/ada/libgnarl/s-stusta.adb b/gcc/ada/libgnarl/s-stusta.adb index c9848a060c20..d0e8c36a102f 100644 --- a/gcc/ada/libgnarl/s-stusta.adb +++ b/gcc/ada/libgnarl/s-stusta.adb @@ -51,14 +51,18 @@ package body System.Stack_Usage.Tasking is -- Compute the stack usage for a given task and saves it in the precise -- slot in System.Stack_Usage.Result_Array; - procedure Report_Impl (All_Tasks : Boolean; Do_Print : Boolean); + procedure Report_Impl + (All_Tasks : Boolean; + Do_Print : Boolean; + Result_Data : out Stack_Usage_Result_Array); -- Report the stack usage of either all tasks (All_Tasks = True) or of the -- current task (All_Task = False). If Print is True, then results are - -- printed on stderr + -- printed on stderr. Otherwise, we fill the referred structure with the + -- stack information for later processing. We do this copy to avoid reading + -- System.Stack_Usage.Result_Array without locking the runtime. procedure Convert - (TS : System.Stack_Usage.Task_Result; - Res : out Stack_Usage_Result); + (TS : System.Stack_Usage.Task_Result; Res : out Stack_Usage_Result); -- Convert an object of type System.Stack_Usage in a Stack_Usage_Result ------------- @@ -66,8 +70,7 @@ package body System.Stack_Usage.Tasking is ------------- procedure Convert - (TS : System.Stack_Usage.Task_Result; - Res : out Stack_Usage_Result) is + (TS : System.Stack_Usage.Task_Result; Res : out Stack_Usage_Result) is begin Res := TS; end Convert; @@ -77,9 +80,38 @@ package body System.Stack_Usage.Tasking is --------------------- procedure Report_For_Task (Id : System.Tasking.Task_Id) is + use type System.Tasking.Task_Id; begin - System.Stack_Usage.Compute_Result (Id.Common.Analyzer); - System.Stack_Usage.Report_Result (Id.Common.Analyzer); + -- Special treatment of the environment task that uses a Stack_Analyzer + -- object that is not part of its ATCB. + if Id = System.Task_Primitives.Operations.Environment_Task then + + -- Check whether we are tracking stack usage for the environment task + if Compute_Environment_Task then + Compute_Result (Environment_Task_Analyzer); + Report_Result (Environment_Task_Analyzer); + + else + Put_Line + ("Stack usage for environment task needs GNAT_STACK_LIMIT"); + end if; + + -- Regular task + + else + declare + Name_Length : constant Natural := + Natural'Min (Id.Common.Task_Image_Len, Task_Name_Length); + begin + -- Skip the task if it hasn't initialized the stack pattern yet + if Id.Common.Task_Image (1 .. Name_Length) = + Id.Common.Analyzer.Task_Name (1 .. Name_Length) + then + System.Stack_Usage.Compute_Result (Id.Common.Analyzer); + System.Stack_Usage.Report_Result (Id.Common.Analyzer); + end if; + end; + end if; end Report_For_Task; ----------------------- @@ -104,6 +136,9 @@ package body System.Stack_Usage.Tasking is -- Calculate the task usage for a given task + -- Skip if the task is terminated because the ATCB can be already + -- destroyed. + if not System.Tasking.Stages.Terminated (Id) then Report_For_Task (Id); end if; @@ -133,10 +168,13 @@ package body System.Stack_Usage.Tasking is -- Report_Impl -- ----------------- - procedure Report_Impl (All_Tasks : Boolean; Do_Print : Boolean) is + procedure Report_Impl + (All_Tasks : Boolean; + Do_Print : Boolean; + Result_Data : out Stack_Usage_Result_Array) is begin - -- Lock the runtime + -- Lock the runtime to compute and display stack usage System.Task_Primitives.Operations.Lock_RTS; @@ -148,9 +186,22 @@ package body System.Stack_Usage.Tasking is Compute_Current_Task; end if; - -- Output results + -- Output results, either printing it or in the out parameter + if Do_Print then System.Stack_Usage.Output_Results; + + else + -- Extract data from the snapshot in System.Stack_Usage.Result_Array + + pragma Assert + (System.Stack_Usage.Result_Array = null or else + (System.Stack_Usage.Result_Array'First = Result_Data'First and then + System.Stack_Usage.Result_Array'Last = Result_Data'Last)); + + for J in Result_Data'Range loop + Convert (System.Stack_Usage.Result_Array (J), Result_Data (J)); + end loop; end if; -- Unlock the runtime @@ -164,8 +215,9 @@ package body System.Stack_Usage.Tasking is ---------------------- procedure Report_All_Tasks is + Empty_Result_Array : Stack_Usage_Result_Array (1 .. 0); begin - Report_Impl (True, True); + Report_Impl (True, True, Empty_Result_Array); end Report_All_Tasks; ------------------------- @@ -185,13 +237,11 @@ package body System.Stack_Usage.Tasking is function Get_All_Tasks_Usage return Stack_Usage_Result_Array is Res : Stack_Usage_Result_Array - (1 .. System.Stack_Usage.Result_Array'Length); + (1 .. + (if System.Stack_Usage.Result_Array = null then 0 + else System.Stack_Usage.Result_Array'Length)); begin - Report_Impl (True, False); - - for J in Res'Range loop - Convert (System.Stack_Usage.Result_Array (J), Res (J)); - end loop; + Report_Impl (True, False, Res); return Res; end Get_All_Tasks_Usage; @@ -201,31 +251,70 @@ package body System.Stack_Usage.Tasking is ---------------------------- function Get_Current_Task_Usage return Stack_Usage_Result is - Res : Stack_Usage_Result; - Original : System.Stack_Usage.Task_Result; - Found : Boolean := False; - begin + use type System.Tasking.Task_Id; - Report_Impl (False, False); + Self_ID : constant System.Tasking.Task_Id := System.Tasking.Self; + Is_Env_Task : constant Boolean := + Self_ID = System.Task_Primitives.Operations.Environment_Task; - -- Look for the task info in System.Stack_Usage.Result_Array; - -- the search is based on task name + Res_Array : Stack_Usage_Result_Array + (1 .. + (if System.Stack_Usage.Result_Array = null then 0 + else System.Stack_Usage.Result_Array'Length)); + Res : Stack_Usage_Result; + Found : Boolean := False; - for T in System.Stack_Usage.Result_Array'Range loop - if System.Stack_Usage.Result_Array (T).Task_Name = - System.Tasking.Self.Common.Analyzer.Task_Name + begin + Report_Impl (False, False, Res_Array); + + -- Look for the task info in the copy of System.Stack_Usage.Result_Array + -- (the search is based on task name). + + for Stack_Usage of Res_Array loop + if Stack_Usage.Task_Name = Self_ID.Common.Analyzer.Task_Name or else + (Is_Env_Task and then + Stack_Usage.Task_Name (1 .. 16) = "ENVIRONMENT TASK") then - Original := System.Stack_Usage.Result_Array (T); + Res := Stack_Usage; Found := True; exit; end if; end loop; - -- Be sure a task has been found + if not Found then + -- Not found because the task is not part of those for which we store + -- the results. Hence we need to compute now. + + -- Environment task + if Is_Env_Task then + Res.Task_Name := + "ENVIRONMENT TASK" & (1 .. Task_Name_Length - 16 => ASCII.NUL); + + if Compute_Environment_Task then + Res.Stack_Size := Environment_Task_Analyzer.Stack_Size; + Res.Value := + Stack_Size + (To_Stack_Address + (Environment_Task_Analyzer.Topmost_Touched_Mark), + To_Stack_Address (Environment_Task_Analyzer.Stack_Base)); + else + Res.Stack_Size := 0; + Res.Value := 0; + end if; + + -- Other tasks - pragma Assert (Found); + else + Res.Task_Name := Self_ID.Common.Analyzer.Task_Name; + Res.Stack_Size := Self_ID.Common.Analyzer.Stack_Size; + Res.Value := + Stack_Size + (To_Stack_Address + (Self_ID.Common.Analyzer.Topmost_Touched_Mark), + To_Stack_Address (Self_ID.Common.Analyzer.Stack_Base)); + end if; + end if; - Convert (Original, Res); return Res; end Get_Current_Task_Usage; @@ -248,11 +337,14 @@ package body System.Stack_Usage.Tasking is declare T_Name : constant String := - Obj.Task_Name (Obj.Task_Name'First .. Pos); + Obj.Task_Name (Obj.Task_Name'First .. Pos); begin + -- Notify when we don't know stack usage Put_Line - ("| " & T_Name & " | " & Natural'Image (Obj.Stack_Size) & - Natural'Image (Obj.Value)); + ("| " & T_Name & "|" & + (if Obj.Stack_Size = 0 then " NA | NA" + else Natural'Image (Obj.Stack_Size) & " |" & + Natural'Image (Obj.Value))); end; end Print; diff --git a/gcc/ada/libgnarl/s-taprop__qnx.adb b/gcc/ada/libgnarl/s-taprop__qnx.adb index e7d245fec7de..b51f2b527082 100644 --- a/gcc/ada/libgnarl/s-taprop__qnx.adb +++ b/gcc/ada/libgnarl/s-taprop__qnx.adb @@ -766,6 +766,16 @@ package body System.Task_Primitives.Operations is function Thread_Body_Access is new Ada.Unchecked_Conversion (System.Address, Thread_Body); + function Disable_Signals return Interfaces.C.int with + Import, + Convention => C, + External_Name => "__gnat_disable_signals"; + + function Enable_Signals return Interfaces.C.int with + Import, + Convention => C, + External_Name => "__gnat_enable_signals"; + begin Adjusted_Stack_Size := Interfaces.C.size_t (Stack_Size + Alternate_Stack_Size); @@ -840,10 +850,11 @@ package body System.Task_Primitives.Operations is pragma Assert (Result = 0); - -- Since the initial signal mask of a thread is inherited from the - -- creator, and the Environment task has all its signals masked, we - -- do not need to manipulate caller's signal mask at this point. - -- All tasks in RTS will have All_Tasks_Mask initially. + -- (QMS3263) lists PR 2894086. This defect causes a memory leak when + -- pthread_create is interrupted by a signal and later resumed. To avoid + -- avoid such a leak the document suggests to disable signals while + -- calling pthread_create. The signal mask of the calling thread is + -- restored after the call to pthread_create. -- The write to T.Common.LL.Thread is not racy with regard to the -- created thread because the created thread will not access it until @@ -851,6 +862,8 @@ package body System.Task_Primitives.Operations is -- Restricted.Stages is used). One can verify that by inspecting the -- Task_Wrapper procedures. + Result := Disable_Signals; + pragma Assert (Result = 0); Result := pthread_create (T.Common.LL.Thread'Access, Attributes'Access, @@ -860,6 +873,9 @@ package body System.Task_Primitives.Operations is Succeeded := Result = 0; + Result := Enable_Signals; + pragma Assert (Result = 0); + Result := pthread_attr_destroy (Attributes'Access); pragma Assert (Result = 0); end Create_Task; diff --git a/gcc/ada/libgnarl/s-taprop__solaris.adb b/gcc/ada/libgnarl/s-taprop__solaris.adb index 8edc58ea9d80..1b65100362c4 100644 --- a/gcc/ada/libgnarl/s-taprop__solaris.adb +++ b/gcc/ada/libgnarl/s-taprop__solaris.adb @@ -36,6 +36,7 @@ with Interfaces.C; +with System.C_Time; with System.Interrupt_Management; with System.Multiprocessors; with System.OS_Constants; @@ -762,12 +763,12 @@ package body System.Task_Primitives.Operations is --------------------- function Monotonic_Clock return Duration is - TS : aliased timespec; + TS : aliased C_Time.timespec; Result : Interfaces.C.int; begin Result := clock_gettime (OSC.CLOCK_RT_Ada, TS'Unchecked_Access); pragma Assert (Result = 0); - return To_Duration (TS); + return C_Time.To_Duration (TS); end Monotonic_Clock; ------------------- @@ -775,13 +776,13 @@ package body System.Task_Primitives.Operations is ------------------- function RT_Resolution return Duration is - TS : aliased timespec; + TS : aliased C_Time.timespec; Result : Interfaces.C.int; begin Result := clock_getres (OSC.CLOCK_REALTIME, TS'Unchecked_Access); pragma Assert (Result = 0); - return To_Duration (TS); + return C_Time.To_Duration (TS); end RT_Resolution; ----------- @@ -1175,7 +1176,7 @@ package body System.Task_Primitives.Operations is Base_Time : constant Duration := Monotonic_Clock; Check_Time : Duration := Base_Time; Abs_Time : Duration; - Request : aliased timespec; + Request : aliased C_Time.timespec; Result : Interfaces.C.int; begin @@ -1189,7 +1190,7 @@ package body System.Task_Primitives.Operations is else Duration'Min (Check_Time + Max_Sensible_Delay, Time)); if Abs_Time > Check_Time then - Request := To_Timespec (Abs_Time); + Request := C_Time.To_Timespec (Abs_Time); loop exit when Self_ID.Pending_ATC_Level < Self_ID.ATC_Nesting_Level; @@ -1230,7 +1231,7 @@ package body System.Task_Primitives.Operations is Base_Time : constant Duration := Monotonic_Clock; Check_Time : Duration := Base_Time; Abs_Time : Duration; - Request : aliased timespec; + Request : aliased C_Time.timespec; Result : Interfaces.C.int; Yielded : Boolean := False; @@ -1243,7 +1244,7 @@ package body System.Task_Primitives.Operations is else Duration'Min (Check_Time + Max_Sensible_Delay, Time)); if Abs_Time > Check_Time then - Request := To_Timespec (Abs_Time); + Request := C_Time.To_Timespec (Abs_Time); Self_ID.Common.State := Delay_Sleep; pragma Assert (Check_Sleep (Delay_Sleep)); diff --git a/gcc/ada/libgnarl/s-taprop__vxworks.adb b/gcc/ada/libgnarl/s-taprop__vxworks.adb index a0f1885a7e8d..a4dab5fa9d1e 100644 --- a/gcc/ada/libgnarl/s-taprop__vxworks.adb +++ b/gcc/ada/libgnarl/s-taprop__vxworks.adb @@ -38,6 +38,7 @@ with Ada.Unchecked_Conversion; with Interfaces.C; +with System.C_Time; with System.Float_Control; with System.Interrupt_Management; with System.Multiprocessors; @@ -681,12 +682,12 @@ package body System.Task_Primitives.Operations is --------------------- function Monotonic_Clock return Duration is - TS : aliased timespec; + TS : aliased C_Time.timespec; Result : int; begin Result := clock_gettime (OSC.CLOCK_RT_Ada, TS'Unchecked_Access); pragma Assert (Result = 0); - return To_Duration (TS); + return C_Time.To_Duration (TS); end Monotonic_Clock; ------------------- diff --git a/gcc/ada/libgnarl/s-tpopmo.adb b/gcc/ada/libgnarl/s-tpopmo.adb index 9ff1ecdc329f..547a5e44abcd 100644 --- a/gcc/ada/libgnarl/s-tpopmo.adb +++ b/gcc/ada/libgnarl/s-tpopmo.adb @@ -31,6 +31,8 @@ -- This is the Monotonic version of this package for Posix and Linux targets. +with System.C_Time; + separate (System.Task_Primitives.Operations) package body Monotonic is @@ -54,14 +56,14 @@ package body Monotonic is --------------------- function Monotonic_Clock return Duration is - TS : aliased timespec; + TS : aliased C_Time.timespec; Result : Interfaces.C.int; begin Result := clock_gettime (clock_id => OSC.CLOCK_RT_Ada, tp => TS'Unchecked_Access); pragma Assert (Result = 0); - return To_Duration (TS); + return C_Time.To_Duration (TS); end Monotonic_Clock; ------------------- @@ -69,14 +71,14 @@ package body Monotonic is ------------------- function RT_Resolution return Duration is - TS : aliased timespec; + TS : aliased C_Time.timespec; Result : Interfaces.C.int; begin Result := clock_getres (OSC.CLOCK_REALTIME, TS'Unchecked_Access); pragma Assert (Result = 0); - return To_Duration (TS); + return C_Time.To_Duration (TS); end RT_Resolution; ---------------------- @@ -150,7 +152,7 @@ package body Monotonic is Abs_Time : Duration; P_Abs_Time : Duration; - Request : aliased timespec; + Request : aliased C_Time.timespec; Result : Interfaces.C.int; Exit_Outer : Boolean := False; @@ -184,7 +186,7 @@ package body Monotonic is end if; pragma Warnings (On); - Request := To_Timespec (P_Abs_Time); + Request := C_Time.To_Timespec (P_Abs_Time); Inner : loop exit Outer @@ -236,7 +238,7 @@ package body Monotonic is Check_Time : Duration; Abs_Time : Duration; P_Abs_Time : Duration; - Request : aliased timespec; + Request : aliased C_Time.timespec; Result : Interfaces.C.int; Exit_Outer : Boolean := False; @@ -271,7 +273,7 @@ package body Monotonic is end if; pragma Warnings (On); - Request := To_Timespec (P_Abs_Time); + Request := C_Time.To_Timespec (P_Abs_Time); Inner : loop exit Outer diff --git a/gcc/ada/libgnat/a-cdlili.ads b/gcc/ada/libgnat/a-cdlili.ads index 93b63b31f7c8..323226cd5748 100644 --- a/gcc/ada/libgnat/a-cdlili.ads +++ b/gcc/ada/libgnat/a-cdlili.ads @@ -58,12 +58,12 @@ is Default_Iterator => Iterate, Iterator_Element => Element_Type, Aggregate => (Empty => Empty, - Add_Unnamed => Append); + Add_Unnamed => Append), + Preelaborable_Initialization; - pragma Preelaborable_Initialization (List); - - type Cursor is private; - pragma Preelaborable_Initialization (Cursor); + type Cursor is private + with + Preelaborable_Initialization; Empty_List : constant List; diff --git a/gcc/ada/libgnat/a-cidlli.ads b/gcc/ada/libgnat/a-cidlli.ads index de7167f3567d..87b582d707c1 100644 --- a/gcc/ada/libgnat/a-cidlli.ads +++ b/gcc/ada/libgnat/a-cidlli.ads @@ -57,12 +57,11 @@ is Default_Iterator => Iterate, Iterator_Element => Element_Type, Aggregate => (Empty => Empty, - Add_Unnamed => Append); + Add_Unnamed => Append), + Preelaborable_Initialization; - pragma Preelaborable_Initialization (List); - - type Cursor is private; - pragma Preelaborable_Initialization (Cursor); + type Cursor is private with + Preelaborable_Initialization; Empty_List : constant List; diff --git a/gcc/ada/libgnat/a-cihama.ads b/gcc/ada/libgnat/a-cihama.ads index fb6a65e4badd..8862bbbab9f2 100644 --- a/gcc/ada/libgnat/a-cihama.ads +++ b/gcc/ada/libgnat/a-cihama.ads @@ -59,12 +59,11 @@ is Default_Iterator => Iterate, Iterator_Element => Element_Type, Aggregate => (Empty => Empty, - Add_Named => Insert); + Add_Named => Insert), + Preelaborable_Initialization; - pragma Preelaborable_Initialization (Map); - - type Cursor is private; - pragma Preelaborable_Initialization (Cursor); + type Cursor is private with + Preelaborable_Initialization; Empty_Map : constant Map; -- Map objects declared without an initialization expression are diff --git a/gcc/ada/libgnat/a-cihase.ads b/gcc/ada/libgnat/a-cihase.ads index dbb42f1f8cf1..7efc9419bdc8 100644 --- a/gcc/ada/libgnat/a-cihase.ads +++ b/gcc/ada/libgnat/a-cihase.ads @@ -61,12 +61,11 @@ is Default_Iterator => Iterate, Iterator_Element => Element_Type, Aggregate => (Empty => Empty, - Add_Unnamed => Include); + Add_Unnamed => Include), + Preelaborable_Initialization; - pragma Preelaborable_Initialization (Set); - - type Cursor is private; - pragma Preelaborable_Initialization (Cursor); + type Cursor is private + with Preelaborable_Initialization; Empty_Set : constant Set; -- Set objects declared without an initialization expression are diff --git a/gcc/ada/libgnat/a-cimutr.ads b/gcc/ada/libgnat/a-cimutr.ads index b7e9b7cffb69..022ae5ed475c 100644 --- a/gcc/ada/libgnat/a-cimutr.ads +++ b/gcc/ada/libgnat/a-cimutr.ads @@ -54,12 +54,11 @@ is with Constant_Indexing => Constant_Reference, Variable_Indexing => Reference, Default_Iterator => Iterate, - Iterator_Element => Element_Type; + Iterator_Element => Element_Type, + Preelaborable_Initialization; - pragma Preelaborable_Initialization (Tree); - - type Cursor is private; - pragma Preelaborable_Initialization (Cursor); + type Cursor is private + with Preelaborable_Initialization; Empty_Tree : constant Tree; diff --git a/gcc/ada/libgnat/a-ciorma.ads b/gcc/ada/libgnat/a-ciorma.ads index 58e4f283435c..acf86b6c70b3 100644 --- a/gcc/ada/libgnat/a-ciorma.ads +++ b/gcc/ada/libgnat/a-ciorma.ads @@ -60,12 +60,11 @@ is Default_Iterator => Iterate, Iterator_Element => Element_Type, Aggregate => (Empty => Empty, - Add_Named => Insert); + Add_Named => Insert), + Preelaborable_Initialization; - pragma Preelaborable_Initialization (Map); - - type Cursor is private; - pragma Preelaborable_Initialization (Cursor); + type Cursor is private + with Preelaborable_Initialization; Empty_Map : constant Map; diff --git a/gcc/ada/libgnat/a-ciormu.ads b/gcc/ada/libgnat/a-ciormu.ads index ddc2722a6a2b..894a4934671d 100644 --- a/gcc/ada/libgnat/a-ciormu.ads +++ b/gcc/ada/libgnat/a-ciormu.ads @@ -58,12 +58,11 @@ is type Set is tagged private with Constant_Indexing => Constant_Reference, Default_Iterator => Iterate, - Iterator_Element => Element_Type; + Iterator_Element => Element_Type, + Preelaborable_Initialization; - pragma Preelaborable_Initialization (Set); - - type Cursor is private; - pragma Preelaborable_Initialization (Cursor); + type Cursor is private + with Preelaborable_Initialization; Empty_Set : constant Set; -- The default value for set objects declared without an explicit diff --git a/gcc/ada/libgnat/a-ciorse.ads b/gcc/ada/libgnat/a-ciorse.ads index c19e57e93d0c..fcc1aa12e4ff 100644 --- a/gcc/ada/libgnat/a-ciorse.ads +++ b/gcc/ada/libgnat/a-ciorse.ads @@ -59,12 +59,11 @@ is Default_Iterator => Iterate, Iterator_Element => Element_Type, Aggregate => (Empty => Empty, - Add_Unnamed => Include); + Add_Unnamed => Include), + Preelaborable_Initialization; - pragma Preelaborable_Initialization (Set); - - type Cursor is private; - pragma Preelaborable_Initialization (Cursor); + type Cursor is private with + Preelaborable_Initialization; Empty_Set : constant Set; function Empty return Set; diff --git a/gcc/ada/libgnat/a-cohama.ads b/gcc/ada/libgnat/a-cohama.ads index 2c2577c269ec..8f501e1c99f8 100644 --- a/gcc/ada/libgnat/a-cohama.ads +++ b/gcc/ada/libgnat/a-cohama.ads @@ -103,12 +103,12 @@ is Default_Iterator => Iterate, Iterator_Element => Element_Type, Aggregate => (Empty => Empty, - Add_Named => Insert); + Add_Named => Insert), + Preelaborable_Initialization; - pragma Preelaborable_Initialization (Map); - - type Cursor is private; - pragma Preelaborable_Initialization (Cursor); + type Cursor is private + with + Preelaborable_Initialization; function "=" (Left, Right : Cursor) return Boolean; -- The representation of cursors includes a component used to optimize diff --git a/gcc/ada/libgnat/a-cohase.ads b/gcc/ada/libgnat/a-cohase.ads index fb7c944f4ad4..6eb5b0c992a3 100644 --- a/gcc/ada/libgnat/a-cohase.ads +++ b/gcc/ada/libgnat/a-cohase.ads @@ -62,12 +62,12 @@ is Default_Iterator => Iterate, Iterator_Element => Element_Type, Aggregate => (Empty => Empty, - Add_Unnamed => Include); + Add_Unnamed => Include), + Preelaborable_Initialization; - pragma Preelaborable_Initialization (Set); - - type Cursor is private; - pragma Preelaborable_Initialization (Cursor); + type Cursor is private + with + Preelaborable_Initialization; function "=" (Left, Right : Cursor) return Boolean; -- The representation of cursors includes a component used to optimize diff --git a/gcc/ada/libgnat/a-coinho.ads b/gcc/ada/libgnat/a-coinho.ads index c9a6aa71226e..dcb5b0cddda3 100644 --- a/gcc/ada/libgnat/a-coinho.ads +++ b/gcc/ada/libgnat/a-coinho.ads @@ -42,8 +42,9 @@ package Ada.Containers.Indefinite_Holders is pragma Preelaborate (Indefinite_Holders); pragma Remote_Types (Indefinite_Holders); - type Holder is tagged private; - pragma Preelaborable_Initialization (Holder); + type Holder is tagged private + with + Preelaborable_Initialization; Empty_Holder : constant Holder; diff --git a/gcc/ada/libgnat/a-coinho__shared.ads b/gcc/ada/libgnat/a-coinho__shared.ads index 904ae01065f4..a8d0cff84ed4 100644 --- a/gcc/ada/libgnat/a-coinho__shared.ads +++ b/gcc/ada/libgnat/a-coinho__shared.ads @@ -47,8 +47,9 @@ package Ada.Containers.Indefinite_Holders is pragma Preelaborate (Indefinite_Holders); pragma Remote_Types (Indefinite_Holders); - type Holder is tagged private; - pragma Preelaborable_Initialization (Holder); + type Holder is tagged private + with + Preelaborable_Initialization; Empty_Holder : constant Holder; diff --git a/gcc/ada/libgnat/a-coinve.ads b/gcc/ada/libgnat/a-coinve.ads index 6d2df0cde679..65ff916c31cf 100644 --- a/gcc/ada/libgnat/a-coinve.ads +++ b/gcc/ada/libgnat/a-coinve.ads @@ -66,12 +66,12 @@ is Aggregate => (Empty => Empty, Add_Unnamed => Append, New_Indexed => New_Vector, - Assign_Indexed => Replace_Element); + Assign_Indexed => Replace_Element), + Preelaborable_Initialization; - pragma Preelaborable_Initialization (Vector); - - type Cursor is private; - pragma Preelaborable_Initialization (Cursor); + type Cursor is private + with + Preelaborable_Initialization; Empty_Vector : constant Vector; diff --git a/gcc/ada/libgnat/a-comutr.ads b/gcc/ada/libgnat/a-comutr.ads index adc2cad8e5e5..8291408a6130 100644 --- a/gcc/ada/libgnat/a-comutr.ads +++ b/gcc/ada/libgnat/a-comutr.ads @@ -54,11 +54,11 @@ is with Constant_Indexing => Constant_Reference, Variable_Indexing => Reference, Default_Iterator => Iterate, - Iterator_Element => Element_Type; - pragma Preelaborable_Initialization (Tree); + Iterator_Element => Element_Type, + Preelaborable_Initialization; - type Cursor is private; - pragma Preelaborable_Initialization (Cursor); + type Cursor is private + with Preelaborable_Initialization; Empty_Tree : constant Tree; diff --git a/gcc/ada/libgnat/a-convec.ads b/gcc/ada/libgnat/a-convec.ads index 5f443798b893..8fad465a1f34 100644 --- a/gcc/ada/libgnat/a-convec.ads +++ b/gcc/ada/libgnat/a-convec.ads @@ -97,15 +97,15 @@ is Aggregate => (Empty => Empty, Add_Unnamed => Append, New_Indexed => New_Vector, - Assign_Indexed => Replace_Element); - - pragma Preelaborable_Initialization (Vector); + Assign_Indexed => Replace_Element), + Preelaborable_Initialization; -- Vector type, to be instantiated by users of this package. If an object -- of type Vector is not otherwise initialized, it is initialized to -- Empty_Vector. - type Cursor is private; - pragma Preelaborable_Initialization (Cursor); + type Cursor is private + with + Preelaborable_Initialization; -- Cursor pointing into an instance of vector. If an object of type Cursor -- is not otherwise initialized, it is initialized to No_Element diff --git a/gcc/ada/libgnat/a-coorma.ads b/gcc/ada/libgnat/a-coorma.ads index 4ec4d1705fbb..644895c808e4 100644 --- a/gcc/ada/libgnat/a-coorma.ads +++ b/gcc/ada/libgnat/a-coorma.ads @@ -60,11 +60,12 @@ is Default_Iterator => Iterate, Iterator_Element => Element_Type, Aggregate => (Empty => Empty, - Add_Named => Insert); - pragma Preelaborable_Initialization (Map); + Add_Named => Insert), + Preelaborable_Initialization; - type Cursor is private; - pragma Preelaborable_Initialization (Cursor); + type Cursor is private + with + Preelaborable_Initialization; Empty_Map : constant Map; diff --git a/gcc/ada/libgnat/a-coormu.ads b/gcc/ada/libgnat/a-coormu.ads index 2dbaacbeee29..89e878dbfcff 100644 --- a/gcc/ada/libgnat/a-coormu.ads +++ b/gcc/ada/libgnat/a-coormu.ads @@ -57,12 +57,11 @@ is type Set is tagged private with Constant_Indexing => Constant_Reference, Default_Iterator => Iterate, - Iterator_Element => Element_Type; + Iterator_Element => Element_Type, + Preelaborable_Initialization; - pragma Preelaborable_Initialization (Set); - - type Cursor is private; - pragma Preelaborable_Initialization (Cursor); + type Cursor is private + with Preelaborable_Initialization; Empty_Set : constant Set; -- The default value for set objects declared without an explicit diff --git a/gcc/ada/libgnat/a-coorse.ads b/gcc/ada/libgnat/a-coorse.ads index aa76e7388f74..c8c8bf04d605 100644 --- a/gcc/ada/libgnat/a-coorse.ads +++ b/gcc/ada/libgnat/a-coorse.ads @@ -59,12 +59,11 @@ is Default_Iterator => Iterate, Iterator_Element => Element_Type, Aggregate => (Empty => Empty, - Add_Unnamed => Include); + Add_Unnamed => Include), + Preelaborable_Initialization; - pragma Preelaborable_Initialization (Set); - - type Cursor is private; - pragma Preelaborable_Initialization (Cursor); + type Cursor is private + with Preelaborable_Initialization; function Has_Element (Position : Cursor) return Boolean; diff --git a/gcc/ada/libgnat/a-crdlli.ads b/gcc/ada/libgnat/a-crdlli.ads index 858fecb08699..1f415f6f148d 100644 --- a/gcc/ada/libgnat/a-crdlli.ads +++ b/gcc/ada/libgnat/a-crdlli.ads @@ -46,11 +46,11 @@ generic package Ada.Containers.Restricted_Doubly_Linked_Lists is pragma Pure; - type List (Capacity : Count_Type) is tagged limited private; - pragma Preelaborable_Initialization (List); + type List (Capacity : Count_Type) is tagged limited private + with Preelaborable_Initialization; - type Cursor is private; - pragma Preelaborable_Initialization (Cursor); + type Cursor is private + with Preelaborable_Initialization; Empty_List : constant List; -- The default value for list objects declared without an explicit diff --git a/gcc/ada/libgnat/a-except.ads b/gcc/ada/libgnat/a-except.ads index b1f56d125782..603fb02cc5ed 100644 --- a/gcc/ada/libgnat/a-except.ads +++ b/gcc/ada/libgnat/a-except.ads @@ -45,13 +45,13 @@ package Ada.Exceptions is pragma Preelaborate; -- In accordance with Ada 2005 AI-362. - type Exception_Id is private; - pragma Preelaborable_Initialization (Exception_Id); + type Exception_Id is private + with Preelaborable_Initialization; Null_Id : constant Exception_Id; - type Exception_Occurrence is limited private; - pragma Preelaborable_Initialization (Exception_Occurrence); + type Exception_Occurrence is limited private + with Preelaborable_Initialization; type Exception_Occurrence_Access is access all Exception_Occurrence; diff --git a/gcc/ada/libgnat/a-finali.ads b/gcc/ada/libgnat/a-finali.ads index 6c7d0f4ab49a..5125af0a0d2e 100644 --- a/gcc/ada/libgnat/a-finali.ads +++ b/gcc/ada/libgnat/a-finali.ads @@ -40,15 +40,15 @@ pragma Warnings (On); package Ada.Finalization is pragma Pure; - type Controlled is abstract tagged private; - pragma Preelaborable_Initialization (Controlled); + type Controlled is abstract tagged private + with Preelaborable_Initialization; procedure Initialize (Object : in out Controlled) is null; procedure Adjust (Object : in out Controlled) is null; procedure Finalize (Object : in out Controlled) is null; - type Limited_Controlled is abstract tagged limited private; - pragma Preelaborable_Initialization (Limited_Controlled); + type Limited_Controlled is abstract tagged limited private + with Preelaborable_Initialization; procedure Initialize (Object : in out Limited_Controlled) is null; procedure Finalize (Object : in out Limited_Controlled) is null; diff --git a/gcc/ada/libgnat/a-ngcoty.ads b/gcc/ada/libgnat/a-ngcoty.ads index 9974037c7938..f5ff0aa90a69 100644 --- a/gcc/ada/libgnat/a-ngcoty.ads +++ b/gcc/ada/libgnat/a-ngcoty.ads @@ -45,8 +45,8 @@ package Ada.Numerics.Generic_Complex_Types is pragma Complex_Representation (Complex); - type Imaginary is private; - pragma Preelaborable_Initialization (Imaginary); + type Imaginary is private + with Preelaborable_Initialization; i : constant Imaginary; j : constant Imaginary; diff --git a/gcc/ada/libgnat/a-strbou.ads b/gcc/ada/libgnat/a-strbou.ads index c849dbea07ec..857a65fa9de5 100644 --- a/gcc/ada/libgnat/a-strbou.ads +++ b/gcc/ada/libgnat/a-strbou.ads @@ -75,8 +75,9 @@ is Max_Length : constant Positive := Max; - type Bounded_String is private; - pragma Preelaborable_Initialization (Bounded_String); + type Bounded_String is private + with + Preelaborable_Initialization; Null_Bounded_String : constant Bounded_String; -- Null_Bounded_String represents the null string. If an object of type diff --git a/gcc/ada/libgnat/a-stream.ads b/gcc/ada/libgnat/a-stream.ads index b9a7b99f437b..e32219931d22 100644 --- a/gcc/ada/libgnat/a-stream.ads +++ b/gcc/ada/libgnat/a-stream.ads @@ -36,8 +36,8 @@ package Ada.Streams is pragma Pure; - type Root_Stream_Type is abstract tagged limited private; - pragma Preelaborable_Initialization (Root_Stream_Type); + type Root_Stream_Type is abstract tagged limited private + with Preelaborable_Initialization; type Stream_Element is mod 2 ** Standard'Storage_Unit; diff --git a/gcc/ada/libgnat/a-strmap.ads b/gcc/ada/libgnat/a-strmap.ads index b963a63a82c1..0b5dff32e02c 100644 --- a/gcc/ada/libgnat/a-strmap.ads +++ b/gcc/ada/libgnat/a-strmap.ads @@ -59,8 +59,8 @@ is -- Character Set Declarations -- -------------------------------- - type Character_Set is private; - pragma Preelaborable_Initialization (Character_Set); + type Character_Set is private + with Preelaborable_Initialization; -- An object of type Character_Set represents a set of characters. Null_Set : constant Character_Set; @@ -256,8 +256,8 @@ is -- Character Mapping Declarations -- ------------------------------------ - type Character_Mapping is private; - pragma Preelaborable_Initialization (Character_Mapping); + type Character_Mapping is private + with Preelaborable_Initialization; -- An object of type Character_Mapping represents a Character-to-Character -- mapping. diff --git a/gcc/ada/libgnat/a-strunb.ads b/gcc/ada/libgnat/a-strunb.ads index 60d57954e5c9..3f13b7f61ef9 100644 --- a/gcc/ada/libgnat/a-strunb.ads +++ b/gcc/ada/libgnat/a-strunb.ads @@ -73,8 +73,8 @@ is subtype String_1 is String (1 .. <>) with Ghost; -- Type used in contracts type Unbounded_String is private with - Default_Initial_Condition => Length (Unbounded_String) = 0; - pragma Preelaborable_Initialization (Unbounded_String); + Default_Initial_Condition => Length (Unbounded_String) = 0, + Preelaborable_Initialization; Null_Unbounded_String : constant Unbounded_String; -- Represents the null String. If an object of type Unbounded_String is not diff --git a/gcc/ada/libgnat/a-strunb__shared.ads b/gcc/ada/libgnat/a-strunb__shared.ads index b731183df068..f4309083d5f1 100644 --- a/gcc/ada/libgnat/a-strunb__shared.ads +++ b/gcc/ada/libgnat/a-strunb__shared.ads @@ -103,8 +103,8 @@ is subtype String_1 is String (1 .. <>) with Ghost; -- Type used in contracts type Unbounded_String is private with - Default_Initial_Condition => Length (Unbounded_String) = 0; - pragma Preelaborable_Initialization (Unbounded_String); + Default_Initial_Condition => Length (Unbounded_String) = 0, + Preelaborable_Initialization; Null_Unbounded_String : constant Unbounded_String; diff --git a/gcc/ada/libgnat/a-ststio.ads b/gcc/ada/libgnat/a-ststio.ads index 8c43ecd6ec73..be66bea6f7a4 100644 --- a/gcc/ada/libgnat/a-ststio.ads +++ b/gcc/ada/libgnat/a-ststio.ads @@ -41,8 +41,9 @@ package Ada.Streams.Stream_IO is type Stream_Access is access all Root_Stream_Type'Class; - type File_Type is limited private with Default_Initial_Condition; - pragma Preelaborable_Initialization (File_Type); + type File_Type is limited private + with Default_Initial_Condition, + Preelaborable_Initialization; type File_Mode is (In_File, Out_File, Append_File); diff --git a/gcc/ada/libgnat/a-stwibo.ads b/gcc/ada/libgnat/a-stwibo.ads index 996dc33f0b38..c22722b3642b 100644 --- a/gcc/ada/libgnat/a-stwibo.ads +++ b/gcc/ada/libgnat/a-stwibo.ads @@ -47,8 +47,8 @@ package Ada.Strings.Wide_Bounded is Max_Length : constant Positive := Max; - type Bounded_Wide_String is private; - pragma Preelaborable_Initialization (Bounded_Wide_String); + type Bounded_Wide_String is private + with Preelaborable_Initialization; Null_Bounded_Wide_String : constant Bounded_Wide_String; diff --git a/gcc/ada/libgnat/a-stwima.ads b/gcc/ada/libgnat/a-stwima.ads index be5c7fb56846..1d4fc8acf594 100644 --- a/gcc/ada/libgnat/a-stwima.ads +++ b/gcc/ada/libgnat/a-stwima.ads @@ -42,8 +42,8 @@ package Ada.Strings.Wide_Maps is -- Wide Character Set Declarations -- ------------------------------------- - type Wide_Character_Set is private; - pragma Preelaborable_Initialization (Wide_Character_Set); + type Wide_Character_Set is private + with Preelaborable_Initialization; -- Representation for a set of Wide_Character values: Null_Set : constant Wide_Character_Set; @@ -120,8 +120,8 @@ package Ada.Strings.Wide_Maps is -- Wide Character Mapping Declarations -- ----------------------------------------- - type Wide_Character_Mapping is private; - pragma Preelaborable_Initialization (Wide_Character_Mapping); + type Wide_Character_Mapping is private + with Preelaborable_Initialization; -- Representation for a wide character to wide character mapping: function Value diff --git a/gcc/ada/libgnat/a-stwiun.ads b/gcc/ada/libgnat/a-stwiun.ads index a57739946e3c..285b5d35a3cd 100644 --- a/gcc/ada/libgnat/a-stwiun.ads +++ b/gcc/ada/libgnat/a-stwiun.ads @@ -39,8 +39,8 @@ with Ada.Finalization; package Ada.Strings.Wide_Unbounded is pragma Preelaborate; - type Unbounded_Wide_String is private; - pragma Preelaborable_Initialization (Unbounded_Wide_String); + type Unbounded_Wide_String is private + with Preelaborable_Initialization; Null_Unbounded_Wide_String : constant Unbounded_Wide_String; diff --git a/gcc/ada/libgnat/a-stwiun__shared.ads b/gcc/ada/libgnat/a-stwiun__shared.ads index 00cfbdb75cca..2f0927898262 100644 --- a/gcc/ada/libgnat/a-stwiun__shared.ads +++ b/gcc/ada/libgnat/a-stwiun__shared.ads @@ -48,8 +48,8 @@ private with System.Atomic_Counters; package Ada.Strings.Wide_Unbounded is pragma Preelaborate; - type Unbounded_Wide_String is private; - pragma Preelaborable_Initialization (Unbounded_Wide_String); + type Unbounded_Wide_String is private + with Preelaborable_Initialization; Null_Unbounded_Wide_String : constant Unbounded_Wide_String; diff --git a/gcc/ada/libgnat/a-stzbou.ads b/gcc/ada/libgnat/a-stzbou.ads index b0ca520d0c03..278875f68ff9 100644 --- a/gcc/ada/libgnat/a-stzbou.ads +++ b/gcc/ada/libgnat/a-stzbou.ads @@ -47,8 +47,8 @@ package Ada.Strings.Wide_Wide_Bounded is Max_Length : constant Positive := Max; - type Bounded_Wide_Wide_String is private; - pragma Preelaborable_Initialization (Bounded_Wide_Wide_String); + type Bounded_Wide_Wide_String is private + with Preelaborable_Initialization; Null_Bounded_Wide_Wide_String : constant Bounded_Wide_Wide_String; diff --git a/gcc/ada/libgnat/a-stzmap.ads b/gcc/ada/libgnat/a-stzmap.ads index 201ed713d825..c0ad1643122d 100644 --- a/gcc/ada/libgnat/a-stzmap.ads +++ b/gcc/ada/libgnat/a-stzmap.ads @@ -42,8 +42,8 @@ package Ada.Strings.Wide_Wide_Maps is -- Wide_Wide_Character Set Declarations -- ------------------------------------------ - type Wide_Wide_Character_Set is private; - pragma Preelaborable_Initialization (Wide_Wide_Character_Set); + type Wide_Wide_Character_Set is private + with Preelaborable_Initialization; -- Representation for a set of Wide_Wide_Character values: Null_Set : constant Wide_Wide_Character_Set; @@ -120,8 +120,8 @@ package Ada.Strings.Wide_Wide_Maps is -- Wide_Wide_Character Mapping Declarations -- ---------------------------------------------- - type Wide_Wide_Character_Mapping is private; - pragma Preelaborable_Initialization (Wide_Wide_Character_Mapping); + type Wide_Wide_Character_Mapping is private + with Preelaborable_Initialization; -- Representation for a wide character to wide character mapping: function Value diff --git a/gcc/ada/libgnat/a-stzunb.ads b/gcc/ada/libgnat/a-stzunb.ads index 8cecbcde1fba..34e41e15a961 100644 --- a/gcc/ada/libgnat/a-stzunb.ads +++ b/gcc/ada/libgnat/a-stzunb.ads @@ -39,8 +39,8 @@ with Ada.Finalization; package Ada.Strings.Wide_Wide_Unbounded is pragma Preelaborate; - type Unbounded_Wide_Wide_String is private; - pragma Preelaborable_Initialization (Unbounded_Wide_Wide_String); + type Unbounded_Wide_Wide_String is private + with Preelaborable_Initialization; Null_Unbounded_Wide_Wide_String : constant Unbounded_Wide_Wide_String; diff --git a/gcc/ada/libgnat/a-stzunb__shared.ads b/gcc/ada/libgnat/a-stzunb__shared.ads index 1d57510baf86..f56043b47a32 100644 --- a/gcc/ada/libgnat/a-stzunb__shared.ads +++ b/gcc/ada/libgnat/a-stzunb__shared.ads @@ -48,8 +48,8 @@ private with System.Atomic_Counters; package Ada.Strings.Wide_Wide_Unbounded is pragma Preelaborate; - type Unbounded_Wide_Wide_String is private; - pragma Preelaborable_Initialization (Unbounded_Wide_Wide_String); + type Unbounded_Wide_Wide_String is private + with Preelaborable_Initialization; Null_Unbounded_Wide_Wide_String : constant Unbounded_Wide_Wide_String; diff --git a/gcc/ada/libgnat/a-swunau.adb b/gcc/ada/libgnat/a-swunau.adb index acb9b6df4fe5..1ae8e19d0d6e 100644 --- a/gcc/ada/libgnat/a-swunau.adb +++ b/gcc/ada/libgnat/a-swunau.adb @@ -62,4 +62,17 @@ package body Ada.Strings.Wide_Unbounded.Aux is UP.Last := UP.Reference'Length; end Set_Wide_String; + procedure Set_Wide_String + (U : out Unbounded_Wide_String; + Length : Positive; + Set : not null access procedure (S : out Wide_String)) + is + Old : Wide_String_Access := U.Reference; + begin + U.Last := Length; + U.Reference := new Wide_String (1 .. Length); + Set (U.Reference.all); + Free (Old); + end Set_Wide_String; + end Ada.Strings.Wide_Unbounded.Aux; diff --git a/gcc/ada/libgnat/a-swunau.ads b/gcc/ada/libgnat/a-swunau.ads index ba4ccaa3af95..ea33db01a11e 100644 --- a/gcc/ada/libgnat/a-swunau.ads +++ b/gcc/ada/libgnat/a-swunau.ads @@ -73,4 +73,12 @@ package Ada.Strings.Wide_Unbounded.Aux is -- than string. The lower bound of the string value is required to be one, -- and this requirement is not checked. + procedure Set_Wide_String + (U : out Unbounded_Wide_String; + Length : Positive; + Set : not null access procedure (S : out Wide_String)); + pragma Inline (Set_Wide_String); + -- Create an unbounded string U with the given Length, using Set to fill + -- the contents of U. + end Ada.Strings.Wide_Unbounded.Aux; diff --git a/gcc/ada/libgnat/a-swunau__shared.adb b/gcc/ada/libgnat/a-swunau__shared.adb index fdaf8467e606..2d3366401f16 100644 --- a/gcc/ada/libgnat/a-swunau__shared.adb +++ b/gcc/ada/libgnat/a-swunau__shared.adb @@ -62,4 +62,30 @@ package body Ada.Strings.Wide_Unbounded.Aux is Free (X); end Set_Wide_String; + procedure Set_Wide_String + (U : out Unbounded_Wide_String; + Length : Positive; + Set : not null access procedure (S : out Wide_String)) + is + TR : constant Shared_Wide_String_Access := U.Reference; + DR : Shared_Wide_String_Access; + begin + -- Try to reuse existing shared string + + if Can_Be_Reused (TR, Length) then + Reference (TR); + DR := TR; + + -- Otherwise allocate new shared string + + else + DR := Allocate (Length); + U.Reference := DR; + end if; + + Set (DR.Data (1 .. Length)); + DR.Last := Length; + Unreference (TR); + end Set_Wide_String; + end Ada.Strings.Wide_Unbounded.Aux; diff --git a/gcc/ada/libgnat/a-szunau.adb b/gcc/ada/libgnat/a-szunau.adb index 5436e2f0d7ea..903b2c9e4df0 100644 --- a/gcc/ada/libgnat/a-szunau.adb +++ b/gcc/ada/libgnat/a-szunau.adb @@ -62,4 +62,17 @@ package body Ada.Strings.Wide_Wide_Unbounded.Aux is UP.Last := UP.Reference'Length; end Set_Wide_Wide_String; + procedure Set_Wide_Wide_String + (U : out Unbounded_Wide_Wide_String; + Length : Positive; + Set : not null access procedure (S : out Wide_Wide_String)) + is + Old : Wide_Wide_String_Access := U.Reference; + begin + U.Last := Length; + U.Reference := new Wide_Wide_String (1 .. Length); + Set (U.Reference.all); + Free (Old); + end Set_Wide_Wide_String; + end Ada.Strings.Wide_Wide_Unbounded.Aux; diff --git a/gcc/ada/libgnat/a-szunau.ads b/gcc/ada/libgnat/a-szunau.ads index 3f90d2802988..486ac137bfcd 100644 --- a/gcc/ada/libgnat/a-szunau.ads +++ b/gcc/ada/libgnat/a-szunau.ads @@ -75,4 +75,12 @@ package Ada.Strings.Wide_Wide_Unbounded.Aux is -- than string. The lower bound of the string value is required to be one, -- and this requirement is not checked. + procedure Set_Wide_Wide_String + (U : out Unbounded_Wide_Wide_String; + Length : Positive; + Set : not null access procedure (S : out Wide_Wide_String)); + pragma Inline (Set_Wide_Wide_String); + -- Create an unbounded string U with the given Length, using Set to fill + -- the contents of U. + end Ada.Strings.Wide_Wide_Unbounded.Aux; diff --git a/gcc/ada/libgnat/a-szunau__shared.adb b/gcc/ada/libgnat/a-szunau__shared.adb index dc9b2984883a..9fa937e74654 100644 --- a/gcc/ada/libgnat/a-szunau__shared.adb +++ b/gcc/ada/libgnat/a-szunau__shared.adb @@ -62,4 +62,30 @@ package body Ada.Strings.Wide_Wide_Unbounded.Aux is Free (X); end Set_Wide_Wide_String; + procedure Set_Wide_Wide_String + (U : out Unbounded_Wide_Wide_String; + Length : Positive; + Set : not null access procedure (S : out Wide_Wide_String)) + is + TR : constant Shared_Wide_Wide_String_Access := U.Reference; + DR : Shared_Wide_Wide_String_Access; + begin + -- Try to reuse existing shared string + + if Can_Be_Reused (TR, Length) then + Reference (TR); + DR := TR; + + -- Otherwise allocate new shared string + + else + DR := Allocate (Length); + U.Reference := DR; + end if; + + Set (DR.Data (1 .. Length)); + DR.Last := Length; + Unreference (TR); + end Set_Wide_Wide_String; + end Ada.Strings.Wide_Wide_Unbounded.Aux; diff --git a/gcc/ada/libgnat/a-tags.ads b/gcc/ada/libgnat/a-tags.ads index aec3a268c3bb..fecd2ba6077c 100644 --- a/gcc/ada/libgnat/a-tags.ads +++ b/gcc/ada/libgnat/a-tags.ads @@ -71,8 +71,8 @@ package Ada.Tags is pragma Preelaborate; -- In accordance with Ada 2005 AI-362 - type Tag is private; - pragma Preelaborable_Initialization (Tag); + type Tag is private + with Preelaborable_Initialization; No_Tag : constant Tag; diff --git a/gcc/ada/libgnat/g-c_time.ads b/gcc/ada/libgnat/g-c_time.ads new file mode 100644 index 000000000000..02461955b2f4 --- /dev/null +++ b/gcc/ada/libgnat/g-c_time.ads @@ -0,0 +1,38 @@ +------------------------------------------------------------------------------ +-- -- +-- GNAT RUN-TIME COMPONENTS -- +-- -- +-- G N A T . C _ T I M E -- +-- -- +-- S p e c -- +-- -- +-- Copyright (C) 2025, AdaCore -- +-- -- +-- GNAT is free software; you can redistribute it and/or modify it under -- +-- terms of the GNU General Public License as published by the Free Soft- -- +-- ware Foundation; either version 3, or (at your option) any later ver- -- +-- sion. GNAT is distributed in the hope that it will be useful, but WITH- -- +-- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -- +-- or FITNESS FOR A PARTICULAR PURPOSE. -- +-- -- +-- As a special exception 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 -- +-- . -- +-- -- +-- GNAT was originally developed by the GNAT team at New York University. -- +-- Extensive contributions were provided by Ada Core Technologies Inc. -- +-- -- +------------------------------------------------------------------------------ + +-- This package provides the time_t, timeval and timespec types corresponding +-- to the C types defined by the OS, as well as various conversion functions. + +-- See file s-c_time.ads for full documentation of the interface + +with System.C_Time; +package GNAT.C_Time renames System.C_Time; diff --git a/gcc/ada/libgnat/g-calend.adb b/gcc/ada/libgnat/g-calend.adb index a2bc77c1cc7b..80b62b7547f5 100644 --- a/gcc/ada/libgnat/g-calend.adb +++ b/gcc/ada/libgnat/g-calend.adb @@ -29,11 +29,8 @@ -- -- ------------------------------------------------------------------------------ -with Interfaces.C.Extensions; - package body GNAT.Calendar is use Ada.Calendar; - use Interfaces; ----------------- -- Day_In_Year -- @@ -333,25 +330,8 @@ package body GNAT.Calendar is ----------------- function To_Duration (T : not null access timeval) return Duration is - - procedure timeval_to_duration - (T : not null access timeval; - sec : not null access C.Extensions.long_long; - usec : not null access C.long); - pragma Import (C, timeval_to_duration, "__gnat_timeval_to_duration"); - - Micro : constant := 10**6; - sec : aliased C.Extensions.long_long; - usec : aliased C.long; - - pragma Unsuppress (Overflow_Check); - begin - timeval_to_duration (T, sec'Access, usec'Access); - pragma Annotate (CodePeer, Modified, sec); - pragma Annotate (CodePeer, Modified, usec); - - return Duration (sec) + Duration (usec) / Micro; + return System.C_Time.To_Duration (T.all); end To_Duration; ---------------- @@ -359,45 +339,8 @@ package body GNAT.Calendar is ---------------- function To_Timeval (D : Duration) return timeval is - - procedure duration_to_timeval - (Sec : C.Extensions.long_long; - Usec : C.long; - T : not null access timeval); - pragma Import (C, duration_to_timeval, "__gnat_duration_to_timeval"); - - Micro : constant := 10**6; - Result : aliased timeval; - sec : C.Extensions.long_long; - usec : C.long; - - pragma Unsuppress (Overflow_Check); - begin - if D = 0.0 then - sec := 0; - usec := 0; - - elsif D < 0.0 then - sec := C.Extensions.long_long (D + 0.5); - if D = Duration (sec) then - usec := 0; - else - usec := C.long ((D - Duration (sec)) * Micro + 0.5); - end if; - - else - sec := C.Extensions.long_long (D - 0.5); - if D = Duration (sec) then - usec := 0; - else - usec := C.long ((D - Duration (sec)) * Micro - 0.5); - end if; - end if; - - duration_to_timeval (sec, usec, Result'Access); - - return Result; + return System.C_Time.To_Timeval (D); end To_Timeval; ------------------ diff --git a/gcc/ada/libgnat/g-calend.ads b/gcc/ada/libgnat/g-calend.ads index a3294993aa6d..c57b7df7a220 100644 --- a/gcc/ada/libgnat/g-calend.ads +++ b/gcc/ada/libgnat/g-calend.ads @@ -40,7 +40,8 @@ -- Day_Of_Week, Day_In_Year and Week_In_Year. with Ada.Calendar.Formatting; -with Interfaces.C; + +with System.C_Time; package GNAT.Calendar is @@ -126,7 +127,7 @@ package GNAT.Calendar is -- locale (equivalent to Clock). Due to this simplified behavior, the -- implementation does not require expensive system calls on targets such -- as Windows. - -- WARNING: Split_At_Locale is no longer aware of historic events and may + -- WARNING: Time_At_Locale is no longer aware of historic events and may -- produce inaccurate results over DST changes which occurred in the past. function Week_In_Year (Date : Ada.Calendar.Time) return Week_In_Year_Number; @@ -145,24 +146,18 @@ package GNAT.Calendar is -- Return the week number as defined in ISO 8601 along with the year in -- which the week occurs. - -- C timeval conversion - - -- C timeval represent a duration (used in Select for example). This - -- structure is composed of a number of seconds and a number of micro - -- seconds. The timeval structure is not exposed here because its - -- definition is target dependent. Interface to C programs is done via a - -- pointer to timeval structure. - - type timeval is private; + subtype timeval is System.C_Time.timeval; + pragma Obsolescent (timeval, "use type from GNAT.C_Time instead"); function To_Duration (T : not null access timeval) return Duration; + pragma Inline (To_Duration); + pragma Obsolescent (To_Duration, "use function from GNAT.C_Time instead"); + function To_Timeval (D : Duration) return timeval; + pragma Inline (To_Timeval); + pragma Obsolescent (To_Timeval, "use function from GNAT.C_Time instead"); private - -- This is a dummy declaration that should be the largest possible timeval - -- structure of all supported targets. - - type timeval is array (1 .. 3) of Interfaces.C.long; function Julian_Day (Year : Ada.Calendar.Year_Number; diff --git a/gcc/ada/libgnat/g-socket.adb b/gcc/ada/libgnat/g-socket.adb index 0fed79177544..37232ec031c0 100644 --- a/gcc/ada/libgnat/g-socket.adb +++ b/gcc/ada/libgnat/g-socket.adb @@ -47,6 +47,7 @@ with GNAT.Sockets.Poll; with System; use System; with System.Communication; use System.Communication; with System.CRTL; use System.CRTL; +with System.C_Time; with System.Task_Lock; package body GNAT.Sockets is @@ -179,13 +180,6 @@ package body GNAT.Sockets is function Value (S : System.Address) return String; -- Same as Interfaces.C.Strings.Value but taking a System.Address - function To_Timeval (Val : Timeval_Duration) return Timeval; - -- Separate Val in seconds and microseconds - - function To_Duration (Val : Timeval) return Timeval_Duration; - -- Reconstruct a Duration value from a Timeval record (seconds and - -- microseconds). - function Dedot (Value : String) return String is (if Value /= "" and then Value (Value'Last) = '.' then Value (Value'First .. Value'Last - 1) @@ -528,7 +522,7 @@ package body GNAT.Sockets is Res : C.int; Last : C.int; RSig : Socket_Type := No_Socket; - TVal : aliased Timeval; + TVal : aliased System.C_Time.timeval; TPtr : Timeval_Access; begin @@ -543,7 +537,7 @@ package body GNAT.Sockets is if Timeout = Forever then TPtr := null; else - TVal := To_Timeval (Timeout); + TVal := System.C_Time.To_Timeval (Timeout); TPtr := TVal'Unchecked_Access; end if; @@ -1423,7 +1417,7 @@ package body GNAT.Sockets is U4 : aliased C.unsigned; V1 : aliased C.unsigned_char; VS : aliased C.char_array (1 .. NS); -- for devices name - VT : aliased Timeval; + VT : aliased System.C_Time.timeval; Len : aliased C.int; Add : System.Address; Res : C.int; @@ -1596,8 +1590,10 @@ package body GNAT.Sockets is Opt.Timeout := Duration (U4) / 1000; end if; + elsif System.C_Time.In_Timeval_Duration (VT) then + Opt.Timeout := System.C_Time.To_Duration (VT); else - Opt.Timeout := To_Duration (VT); + Opt.Timeout := Forever; end if; when Bind_To_Device => @@ -1958,7 +1954,7 @@ package body GNAT.Sockets is procedure Listen_Socket (Socket : Socket_Type; - Length : Natural := 15) + Length : Natural := SOSC.BACKLOG_MAX) is Res : constant C.int := C_Listen (C.int (Socket), C.int (Length)); begin @@ -2633,7 +2629,7 @@ package body GNAT.Sockets is (1 .. (if Option.Name = Bind_To_Device then C.size_t (ASU.Length (Option.Device) + 1) else 0)); - VT : aliased Timeval; + VT : aliased System.C_Time.timeval; Len : C.int; Add : System.Address := Null_Address; Res : C.int; @@ -2767,7 +2763,7 @@ package body GNAT.Sockets is end if; else - VT := To_Timeval (Option.Timeout); + VT := System.C_Time.To_Timeval (Option.Timeout); Len := VT'Size / 8; Add := VT'Address; end if; @@ -2865,33 +2861,6 @@ package body GNAT.Sockets is return Integer (Socket); end To_C; - ----------------- - -- To_Duration -- - ----------------- - - function To_Duration (Val : Timeval) return Timeval_Duration is - Max_D : constant Long_Long_Integer := Long_Long_Integer (Forever - 0.5); - Tv_sec_64 : constant Boolean := SOSC.SIZEOF_tv_sec = 8; - -- Need to separate this condition into the constant declaration to - -- avoid GNAT warning about "always true" or "always false". - begin - if Tv_sec_64 then - -- Check for possible Duration overflow when Tv_Sec field is 64 bit - -- integer. - - if Val.Tv_Sec > time_t (Max_D) - or else - (Val.Tv_Sec = time_t (Max_D) - and then - Val.Tv_Usec > suseconds_t ((Forever - Duration (Max_D)) * 1E6)) - then - return Forever; - end if; - end if; - - return Duration (Val.Tv_Sec) + Duration (Val.Tv_Usec) * 1.0E-6; - end To_Duration; - ------------------- -- To_Host_Entry -- ------------------- @@ -3041,35 +3010,6 @@ package body GNAT.Sockets is return HN.Name (1 .. HN.Length); end To_String; - ---------------- - -- To_Timeval -- - ---------------- - - function To_Timeval (Val : Timeval_Duration) return Timeval is - S : time_t; - uS : suseconds_t; - - begin - -- If zero, set result as zero (otherwise it gets rounded down to -1) - - if Val = 0.0 then - S := 0; - uS := 0; - - -- Normal case where we do round down - - else - S := time_t (Val - 0.5); - if Val = Timeval_Duration (S) then - uS := 0; - else - uS := suseconds_t ((Val - Timeval_Duration (S)) * 1_000_000 - 0.5); - end if; - end if; - - return (S, uS); - end To_Timeval; - ----------- -- Value -- ----------- diff --git a/gcc/ada/libgnat/g-socket.ads b/gcc/ada/libgnat/g-socket.ads index 1fe8a74ef11e..7c6534cd71c9 100644 --- a/gcc/ada/libgnat/g-socket.ads +++ b/gcc/ada/libgnat/g-socket.ads @@ -1219,7 +1219,7 @@ package GNAT.Sockets is procedure Listen_Socket (Socket : Socket_Type; - Length : Natural := 15); + Length : Natural := SOSC.BACKLOG_MAX); -- To accept connections, a socket is first created with Create_Socket, -- a willingness to accept incoming connections and a queue Length for -- incoming connections are specified. Raise Socket_Error on error. diff --git a/gcc/ada/libgnat/g-socthi.adb b/gcc/ada/libgnat/g-socthi.adb index 5540dce04aef..c79b8db868be 100644 --- a/gcc/ada/libgnat/g-socthi.adb +++ b/gcc/ada/libgnat/g-socthi.adb @@ -40,6 +40,8 @@ with GNAT.Task_Lock; with Interfaces.C; use Interfaces.C; +with System.C_Time; + package body GNAT.Sockets.Thin is Non_Blocking_Sockets : aliased Fd_Set; @@ -215,7 +217,7 @@ package body GNAT.Sockets.Thin is declare -- unreachable if Thread_Blocking_IO is statically True pragma Warnings (On, "unreachable code"); WSet : aliased Fd_Set; - Now : aliased Timeval; + Now : aliased System.C_Time.timeval; begin Reset_Socket_Set (WSet'Access); diff --git a/gcc/ada/libgnat/g-socthi__vxworks.adb b/gcc/ada/libgnat/g-socthi__vxworks.adb index a3f05b384025..6ae74eb5f6bf 100644 --- a/gcc/ada/libgnat/g-socthi__vxworks.adb +++ b/gcc/ada/libgnat/g-socthi__vxworks.adb @@ -40,6 +40,8 @@ with GNAT.Task_Lock; with Interfaces.C; use Interfaces.C; +with System.C_Time; + package body GNAT.Sockets.Thin is Non_Blocking_Sockets : aliased Fd_Set; @@ -194,7 +196,7 @@ package body GNAT.Sockets.Thin is declare -- unreachable if Thread_Blocking_IO is statically True pragma Warnings (On, "unreachable code"); WSet : aliased Fd_Set; - Now : aliased Timeval; + Now : aliased System.C_Time.timeval; begin Reset_Socket_Set (WSet'Access); loop diff --git a/gcc/ada/libgnat/g-sothco.ads b/gcc/ada/libgnat/g-sothco.ads index cdf0a16ef086..ec9b5746f0c6 100644 --- a/gcc/ada/libgnat/g-sothco.ads +++ b/gcc/ada/libgnat/g-sothco.ads @@ -33,8 +33,10 @@ -- This package should not be directly with'ed by an applications program. with Ada.Unchecked_Conversion; + with Interfaces.C.Strings; -with System.Parameters; + +with System.C_Time; package GNAT.Sockets.Thin_Common is @@ -44,31 +46,23 @@ package GNAT.Sockets.Thin_Common is Success : constant C.int := 0; Failure : constant C.int := -1; - type time_t is - range -2 ** (System.Parameters.time_t_bits - 1) - .. 2 ** (System.Parameters.time_t_bits - 1) - 1; - for time_t'Size use System.Parameters.time_t_bits; - pragma Convention (C, time_t); - - type suseconds_t is - range -2 ** (8 * SOSC.SIZEOF_tv_usec - 1) - .. 2 ** (8 * SOSC.SIZEOF_tv_usec - 1) - 1; - for suseconds_t'Size use 8 * SOSC.SIZEOF_tv_usec; - pragma Convention (C, suseconds_t); - - type Timeval is record - Tv_Sec : time_t; - Tv_Usec : suseconds_t; - end record; - pragma Convention (C, Timeval); + subtype time_t is System.C_Time.time_t; + pragma Obsolescent (time_t, "use type from GNAT.C_Time instead"); + + subtype suseconds_t is System.C_Time.usec_t; + pragma Obsolescent (suseconds_t, "use type from GNAT.C_Time instead"); + + subtype timeval is System.C_Time.timeval; + pragma Obsolescent (timeval, "use type from GNAT.C_Time instead"); - type Timeval_Access is access all Timeval; + type Timeval_Access is access all System.C_Time.timeval; pragma Convention (C, Timeval_Access); type socklen_t is mod 2 ** (8 * SOSC.SIZEOF_socklen_t); for socklen_t'Size use (8 * SOSC.SIZEOF_socklen_t); - Immediat : constant Timeval := (0, 0); + Immediat : constant System.C_Time.timeval + := System.C_Time.Milliseconds_To_Timeval (0); ------------------------------------------- -- Mapping tables to low level constants -- diff --git a/gcc/ada/libgnat/g-spogwa.adb b/gcc/ada/libgnat/g-spogwa.adb index a4bbf962a9f3..3752b2bf4422 100644 --- a/gcc/ada/libgnat/g-spogwa.adb +++ b/gcc/ada/libgnat/g-spogwa.adb @@ -29,7 +29,7 @@ -- -- ------------------------------------------------------------------------------ -with GNAT.Sockets.Thin_Common; +with System.C_Time; procedure GNAT.Sockets.Poll.G_Wait (Fds : in out Set; Timeout : Interfaces.C.int; Result : out Integer) @@ -41,11 +41,11 @@ is readfds : access FD_Set_Type; writefds : access FD_Set_Type; exceptfds : access FD_Set_Type; - timeout : access Thin_Common.Timeval) return Integer + timeout : access System.C_Time.timeval) return Integer with Import => True, Convention => Stdcall, External_Name => "select"; - Timeout_V : aliased Thin_Common.Timeval; - Timeout_A : access Thin_Common.Timeval; + Timeout_V : aliased System.C_Time.timeval; + Timeout_A : access System.C_Time.timeval; Rfds : aliased FD_Set_Type; Rcount : Natural := 0; @@ -63,8 +63,7 @@ begin if Timeout >= 0 then Timeout_A := Timeout_V'Access; - Timeout_V.Tv_Sec := Thin_Common.time_t (Timeout / 1000); - Timeout_V.Tv_Usec := Thin_Common.suseconds_t (Timeout rem 1000 * 1000); + Timeout_V := System.C_Time.Milliseconds_To_Timeval (Timeout); end if; Reset_Socket_Set (Rfds); diff --git a/gcc/ada/libgnat/i-cstrin.ads b/gcc/ada/libgnat/i-cstrin.ads index 5939fe041a47..4396690eed94 100644 --- a/gcc/ada/libgnat/i-cstrin.ads +++ b/gcc/ada/libgnat/i-cstrin.ads @@ -62,8 +62,9 @@ is -- coming from who knows where, it seems a good idea to turn off any -- strict aliasing assumptions for this type. - type chars_ptr is private; - pragma Preelaborable_Initialization (chars_ptr); + type chars_ptr is private + with + Preelaborable_Initialization; type chars_ptr_array is array (size_t range <>) of aliased chars_ptr; diff --git a/gcc/ada/libgnat/s-aridou.adb b/gcc/ada/libgnat/s-aridou.adb index dd2f150252a9..aa9c54636493 100644 --- a/gcc/ada/libgnat/s-aridou.adb +++ b/gcc/ada/libgnat/s-aridou.adb @@ -128,6 +128,20 @@ is Raise_Error; end Add_With_Ovflo_Check; + -------------------------- + -- Add_With_Ovflo_Check -- + -------------------------- + + function Add_With_Ovflo_Check (X, Y : Double_Uns) return Double_Uns is + R : constant Double_Uns := X + Y; + begin + if R < X then + Raise_Error; + end if; + + return R; + end Add_With_Ovflo_Check; + ------------------- -- Double_Divide -- ------------------- @@ -336,6 +350,49 @@ is end if; end Multiply_With_Ovflo_Check; + ------------------------------- + -- Multiply_With_Ovflo_Check -- + ------------------------------- + + function Multiply_With_Ovflo_Check (X, Y : Double_Uns) return Double_Uns is + Xhi : constant Single_Uns := Hi (X); + Xlo : constant Single_Uns := Lo (X); + + Yhi : constant Single_Uns := Hi (Y); + Ylo : constant Single_Uns := Lo (Y); + + T1, T2 : Double_Uns; + + begin + if Xhi /= 0 then + if Yhi /= 0 then + Raise_Error; + else + T2 := Xhi * Ylo; + end if; + + elsif Yhi /= 0 then + T2 := Xlo * Yhi; + + else -- Yhi = Xhi = 0 + T2 := 0; + end if; + + -- Here we have T2 set to the contribution to the upper half of the + -- result from the upper halves of the input values. + + T1 := Xlo * Ylo; + T2 := T2 + Hi (T1); + + if Hi (T2) /= 0 then + Raise_Error; + end if; + + T2 := Lo (T2) & Lo (T1); + + return T2; + end Multiply_With_Ovflo_Check; + ----------------- -- Raise_Error -- ----------------- @@ -655,6 +712,20 @@ is Raise_Error; end Subtract_With_Ovflo_Check; + ------------------------------- + -- Subtract_With_Ovflo_Check -- + ------------------------------- + + function Subtract_With_Ovflo_Check (X, Y : Double_Uns) return Double_Uns is + R : constant Double_Uns := X - Y; + begin + if R > X then + Raise_Error; + end if; + + return R; + end Subtract_With_Ovflo_Check; + ---------------- -- To_Neg_Int -- ---------------- diff --git a/gcc/ada/libgnat/s-aridou.ads b/gcc/ada/libgnat/s-aridou.ads index f7240ded4d83..61b94a9a34c3 100644 --- a/gcc/ada/libgnat/s-aridou.ads +++ b/gcc/ada/libgnat/s-aridou.ads @@ -53,6 +53,10 @@ generic package System.Arith_Double with Pure, SPARK_Mode is + ---------------- + -- Double_Int -- + ---------------- + function Add_With_Ovflo_Check (X, Y : Double_Int) return Double_Int; -- Raises Constraint_Error if sum of operands overflows Double_Int, -- otherwise returns this sum of operands as Double_Int. @@ -145,4 +149,36 @@ is -- Double_Uns division is then performed, the result is rounded, its sign -- is corrected, and then returned. + ---------------- + -- Double_Uns -- + ---------------- + + function Add_With_Ovflo_Check (X, Y : Double_Uns) return Double_Uns; + -- Raises Constraint_Error if sum of operands overflows Double_Uns, + -- otherwise returns this sum of operands as Double_Uns. + -- + -- The sum of ``X`` and ``Y`` is first computed. If the result is + -- lower than the first operand, then an overflow occurred and the + -- exception *Constraint_Error* is raised; otherwise the result is + -- correct. + + function Subtract_With_Ovflo_Check (X, Y : Double_Uns) return Double_Uns; + -- Raises Constraint_Error if difference of operands overflows Double_Uns, + -- otherwise returns this difference of operands as Double_Int. + -- + -- The subtraction of ``X`` and ``Y`` is first computed. If the result + -- is greater than the first operand, then an overflow occurred and the + -- exception *Constraint_Error* is raised; otherwise the result is + -- correct. + + function Multiply_With_Ovflo_Check (X, Y : Double_Uns) return Double_Uns + with Convention => C; + -- Raises Constraint_Error if product of operands overflows Double_Uns, + -- otherwise returns this product of operands as Double_Uns. The code + -- generator may also generate direct calls to this routine. + -- + -- The multiplication is done using pencil and paper algorithm applied to + -- Single_Uns, then the correct Double_Uns value is returned. Overflow + -- check is performed by looking at higher digits. + end System.Arith_Double; diff --git a/gcc/ada/libgnat/s-arit128.adb b/gcc/ada/libgnat/s-arit128.adb index c4ef40dcaf04..66c54f9bae65 100644 --- a/gcc/ada/libgnat/s-arit128.adb +++ b/gcc/ada/libgnat/s-arit128.adb @@ -34,7 +34,6 @@ with System.Arith_Double; package body System.Arith_128 with SPARK_Mode is - subtype Uns128 is Interfaces.Unsigned_128; subtype Uns64 is Interfaces.Unsigned_64; use Interfaces; @@ -62,4 +61,13 @@ is Round : Boolean) renames Impl.Double_Divide; + function Uns_Add_With_Ovflo_Check128 (X, Y : Uns128) return Uns128 + renames Impl.Add_With_Ovflo_Check; + + function Uns_Subtract_With_Ovflo_Check128 (X, Y : Uns128) return Uns128 + renames Impl.Subtract_With_Ovflo_Check; + + function Uns_Multiply_With_Ovflo_Check128 (X, Y : Uns128) return Uns128 + renames Impl.Multiply_With_Ovflo_Check; + end System.Arith_128; diff --git a/gcc/ada/libgnat/s-arit128.ads b/gcc/ada/libgnat/s-arit128.ads index ea4ef6b3fa9f..de1be0cc45c0 100644 --- a/gcc/ada/libgnat/s-arit128.ads +++ b/gcc/ada/libgnat/s-arit128.ads @@ -41,6 +41,10 @@ with Interfaces; package System.Arith_128 with Pure, SPARK_Mode is + ------------ + -- Int128 -- + ------------ + subtype Int128 is Interfaces.Integer_128; function Add_With_Ovflo_Check128 (X, Y : Int128) return Int128; @@ -81,4 +85,39 @@ is -- then Q is the rounded quotient. The remainder R is not affected by the -- setting of the Round flag. + ------------ + -- Uns128 -- + ------------ + + subtype Uns128 is Interfaces.Unsigned_128; + + function Uns_Add_With_Ovflo_Check128 (X, Y : Uns128) return Uns128; + -- Raises Constraint_Error if sum of operands overflows 128 bits, + -- otherwise returns the 128-bit unsigned integer sum. + -- + -- The sum of ``X`` and ``Y`` is first computed. If the result is + -- lower than the first operand, then an overflow occurred and the + -- exception *Constraint_Error* is raised; otherwise the result is + -- correct. + + function Uns_Subtract_With_Ovflo_Check128 (X, Y : Uns128) return Uns128; + -- Raises Constraint_Error if difference of operands overflows 128 bits, + -- otherwise returns the 128-bit unsigned integer difference. + -- + -- The subtraction of ``X`` and ``Y`` is first computed. If the result + -- is greater than the first operand, then an overflow occurred and the + -- exception *Constraint_Error* is raised; otherwise the result is + -- correct. + + function Uns_Multiply_With_Ovflo_Check128 (X, Y : Uns128) return Uns128; + pragma Export (C, Uns_Multiply_With_Ovflo_Check128, "__gnat_uns_mulv128"); + -- Raises Constraint_Error if product of operands overflows 128 bits, + -- otherwise returns the 128-bit signed integer product. The code + -- generator may also generate direct calls to this routine. + -- + -- The multiplication is done using pencil and paper algorithm using base + -- 2**32. The multiplication is done on unsigned values, then the correct + -- unsigned value is returned. Overflow check is performed by looking at + -- higher digits. + end System.Arith_128; diff --git a/gcc/ada/libgnat/s-arit64.adb b/gcc/ada/libgnat/s-arit64.adb index 4e0336f4f166..fdf4331fa84c 100644 --- a/gcc/ada/libgnat/s-arit64.adb +++ b/gcc/ada/libgnat/s-arit64.adb @@ -34,7 +34,6 @@ with System.Arith_Double; package body System.Arith_64 with SPARK_Mode is - subtype Uns64 is Interfaces.Unsigned_64; subtype Uns32 is Interfaces.Unsigned_32; use Interfaces; @@ -62,4 +61,13 @@ is Round : Boolean) renames Impl.Double_Divide; + function Uns_Add_With_Ovflo_Check64 (X, Y : Uns64) return Uns64 + renames Impl.Add_With_Ovflo_Check; + + function Uns_Subtract_With_Ovflo_Check64 (X, Y : Uns64) return Uns64 + renames Impl.Subtract_With_Ovflo_Check; + + function Uns_Multiply_With_Ovflo_Check64 (X, Y : Uns64) return Uns64 + renames Impl.Multiply_With_Ovflo_Check; + end System.Arith_64; diff --git a/gcc/ada/libgnat/s-arit64.ads b/gcc/ada/libgnat/s-arit64.ads index 6e1278988bcf..671f04cb81d9 100644 --- a/gcc/ada/libgnat/s-arit64.ads +++ b/gcc/ada/libgnat/s-arit64.ads @@ -41,6 +41,10 @@ with Interfaces; package System.Arith_64 with Pure, SPARK_Mode is + ----------- + -- Int64 -- + ----------- + subtype Int64 is Interfaces.Integer_64; function Add_With_Ovflo_Check64 (X, Y : Int64) return Int64; @@ -147,4 +151,41 @@ is Round : Boolean) renames Double_Divide64; -- Renamed procedure to preserve compatibility with earlier versions + ----------- + -- Uns64 -- + ----------- + + subtype Uns64 is Interfaces.Unsigned_64; + + function Uns_Add_With_Ovflo_Check64 (X, Y : Uns64) return Uns64; + -- Raises Constraint_Error if sum of operands overflows 64 bits, + -- otherwise returns the 64 bits unsigned integer sum. + -- + -- The sum of ``X`` and ``Y`` is first computed. If the result is + -- lower than the first operand, then an overflow occurred and the + -- exception *Constraint_Error* is raised; otherwise the result is + -- correct. + + function Uns_Subtract_With_Ovflo_Check64 (X, Y : Uns64) return Uns64; + -- Raises Constraint_Error if difference of operands overflows 64 bits, + -- otherwise returns the 64-bit unsigned integer difference. + -- + -- The subtraction of ``X`` and ``Y`` is first computed using wrap-around + -- semantics. + -- + -- If the sign of the result is negative, then an overflow occurred and + -- the exception *Constraint_Error* is raised; otherwise the result is + -- correct. + + function Uns_Multiply_With_Ovflo_Check64 (X, Y : Uns64) return Uns64; + pragma Export (C, Uns_Multiply_With_Ovflo_Check64, "__gnat_uns_mulv64"); + -- Raises Constraint_Error if product of operands overflows 64 bits, + -- otherwise returns the 64-bit signed integer product. The code + -- generator may also generate direct calls to this routine. + -- + -- The multiplication is done using pencil and paper algorithm using base + -- 2**32. The multiplication is done on unsigned values, then the correct + -- unsigned value is returned. Overflow check is performed by looking at + -- higher digits. + end System.Arith_64; diff --git a/gcc/ada/libgnat/s-c_time.adb b/gcc/ada/libgnat/s-c_time.adb new file mode 100644 index 000000000000..70f8a9cac08f --- /dev/null +++ b/gcc/ada/libgnat/s-c_time.adb @@ -0,0 +1,203 @@ +------------------------------------------------------------------------------ +-- -- +-- GNAT RUN-TIME COMPONENTS -- +-- -- +-- S Y S T E M . C _ T I M E -- +-- -- +-- B o d y -- +-- -- +-- Copyright (C) 2025, Free Software Foundation, Inc. -- +-- -- +-- GNAT is free software; you can redistribute it and/or modify it under -- +-- terms of the GNU General Public License as published by the Free Soft- -- +-- ware Foundation; either version 3, or (at your option) any later ver- -- +-- sion. GNAT is distributed in the hope that it will be useful, but WITH- -- +-- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -- +-- or FITNESS FOR A PARTICULAR PURPOSE. -- +-- -- +-- As a special exception 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 -- +-- . -- +-- -- +-- GNAT was originally developed by the GNAT team at New York University. -- +-- Extensive contributions were provided by Ada Core Technologies, Inc. -- +-- -- +------------------------------------------------------------------------------ + +package body System.C_Time is + + -- Two Duration representations are described in targparm.ads: + -- Size Small Last = (2**(Size - 1) - 1) * Small + -- 32 0.02 42_949_672.94 + -- 64 0.000_000_001 9_223_372_036.854_775_807 + + Recip : constant := (if Duration'Size = 32 then 50 else 1_000_000_000); + -- The reciprocal of the Small used to write "* Small" as "/ Recip" + + Milli : constant := 1_000; + Micro : constant := 1_000_000; + Nano : constant := 1_000_000_000; + -- The standard divisors + + pragma Unsuppress (Overflow_Check); + -- Overflow may occur during the various conversions + + ------------------------- + -- In_Timeval_Duration -- + ------------------------- + + -- Immediate : constant Duration := 0.0; + + -- Forever : constant Duration := + -- Duration'Min (Duration'Last, 1.0 * OS_Constants.MAX_tv_sec); + + -- subtype Timeval_Duration is Duration range Immediate .. Forever; + + function In_Timeval_Duration (T : timeval) return Boolean is + Max_Dur : constant := 2**(Duration'Size - 1) - 1; + Max_Sec : constant := Max_Dur / Recip; + Max_Usec : constant := (Max_Dur mod Recip) * Micro / Recip; + + -- When Duration'Size = 64 and time_t'Size = 32, the compiler + -- complains that Max_Sec does not fit in time_t, hence cannot + -- be compared with T.tv_sec. + Safe_Max_Sec : constant := + (if Max_Sec > time_t'Last then time_t'Last else Max_Sec); + Safe_Max_Usec : constant := + (if Max_Sec > time_t'Last then usec_t'Last else Max_Usec); + + begin + pragma Warnings (Off, "condition is always"); + return T.tv_sec >= 0 + and then (T.tv_sec > 0 or else T.tv_usec >= 0) + and then T.tv_sec <= Safe_Max_Sec + and then (T.tv_sec < Safe_Max_Sec or else T.tv_usec <= Safe_Max_Usec) + and then T.tv_sec <= OS_Constants.MAX_tv_sec + and then (T.tv_sec < OS_Constants.MAX_tv_sec or else T.tv_usec = 0); + pragma Warnings (On, "condition is always"); + end In_Timeval_Duration; + + ----------------------------- + -- Milliseconds_To_Timeval -- + ----------------------------- + + function Milliseconds_To_Timeval (M : Interfaces.C.int) return timeval is + use Interfaces.C; + Q : constant int := M / Milli; + R : constant int := M rem Milli; + + begin + return (tv_sec => time_t (Q), tv_usec => usec_t (R) * (Micro / Milli)); + end Milliseconds_To_Timeval; + + ----------------------------- + -- Nanoseconds_To_Timespec -- + ----------------------------- + + function Nanoseconds_To_Timespec (N : Interfaces.C.int) return timespec is + use Interfaces.C; + Q : constant int := N / Nano; + R : constant int := N rem Nano; + + begin + return (tv_sec => time_t (Q), tv_nsec => nsec_t (R)); + end Nanoseconds_To_Timespec; + + ----------------- + -- To_Duration -- + ----------------- + + -- Duration (tv_usec) is OK even when Duration'Size = 32, see above + + function To_Duration (T : timeval) return Duration is + begin + return Duration (T.tv_sec) + Duration (T.tv_usec) / Micro; + end To_Duration; + + -- Duration (tv_nsec) overflows when Duration'Size = 32, see above. + -- Scale down nanoseconds by the value of the Small in nanoseconds. + + function To_Duration (T : timespec) return Duration is + S : constant := Nano / Recip; + + begin + return Duration (T.tv_sec) + Duration (T.tv_nsec / S) / (Nano / S); + end To_Duration; + + ----------------- + -- To_Timespec -- + ----------------- + + function To_Timespec (T : timeval) return timespec is + begin + return (tv_sec => T.tv_sec, tv_nsec => nsec_t (T.tv_usec) * Milli); + end To_Timespec; + + function To_Timespec (D : Duration) return timespec is + tv_sec : time_t; + tv_nsec : nsec_t; + + begin + if D = 0.0 then + tv_sec := 0; + tv_nsec := 0; + + elsif D < 0.0 then + tv_sec := time_t (D + 0.5); + if D = Duration (tv_sec) then + tv_nsec := 0; + else + tv_nsec := nsec_t ((D - Duration (tv_sec)) * Nano + 0.5); + end if; + + else + tv_sec := time_t (D - 0.5); + if D = Duration (tv_sec) then + tv_nsec := 0; + else + tv_nsec := nsec_t ((D - Duration (tv_sec)) * Nano - 0.5); + end if; + end if; + + return (tv_sec, tv_nsec); + end To_Timespec; + + ----------------- + -- To_Timeval -- + ----------------- + + function To_Timeval (D : Duration) return timeval is + tv_sec : time_t; + tv_usec : usec_t; + + begin + if D = 0.0 then + tv_sec := 0; + tv_usec := 0; + + elsif D < 0.0 then + tv_sec := time_t (D + 0.5); + if D = Duration (tv_sec) then + tv_usec := 0; + else + tv_usec := usec_t ((D - Duration (tv_sec)) * Micro + 0.5); + end if; + + else + tv_sec := time_t (D - 0.5); + if D = Duration (tv_sec) then + tv_usec := 0; + else + tv_usec := usec_t ((D - Duration (tv_sec)) * Micro - 0.5); + end if; + end if; + + return (tv_sec, tv_usec); + end To_Timeval; + +end System.C_Time; diff --git a/gcc/ada/libgnat/s-c_time.ads b/gcc/ada/libgnat/s-c_time.ads new file mode 100644 index 000000000000..626a02df5be0 --- /dev/null +++ b/gcc/ada/libgnat/s-c_time.ads @@ -0,0 +1,93 @@ +------------------------------------------------------------------------------ +-- -- +-- GNAT RUN-TIME COMPONENTS -- +-- -- +-- S Y S T E M . C _ T I M E -- +-- -- +-- S p e c -- +-- -- +-- Copyright (C) 2025, Free Software Foundation, Inc. -- +-- -- +-- GNAT is free software; you can redistribute it and/or modify it under -- +-- terms of the GNU General Public License as published by the Free Soft- -- +-- ware Foundation; either version 3, or (at your option) any later ver- -- +-- sion. GNAT is distributed in the hope that it will be useful, but WITH- -- +-- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -- +-- or FITNESS FOR A PARTICULAR PURPOSE. -- +-- -- +-- As a special exception 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 -- +-- . -- +-- -- +-- GNAT was originally developed by the GNAT team at New York University. -- +-- Extensive contributions were provided by Ada Core Technologies, Inc. -- +-- -- +------------------------------------------------------------------------------ + +-- This package provides the time_t, timeval and timespec types corresponding +-- to the C types defined by the OS, as well as various conversion functions. + +with Interfaces.C; + +with System.OS_Constants; + +package System.C_Time + with Pure +is + -- These two C structs represent durations with different accuracies and + -- maximal values. + + type time_t is range -2 ** (OS_Constants.SIZEOF_tv_sec * 8 - 1) .. + 2 ** (OS_Constants.SIZEOF_tv_sec * 8 - 1) - 1 + with Convention => C, Size => OS_Constants.SIZEOF_tv_sec * 8; + + type usec_t is range -2 ** (OS_Constants.SIZEOF_tv_usec * 8 - 1) .. + 2 ** (OS_Constants.SIZEOF_tv_usec * 8 - 1) - 1 + with Convention => C, Size => OS_Constants.SIZEOF_tv_usec * 8; + -- Larger than the suseconds_t C type on ARM 32 bits with GNU libc + -- when __TIME_BITS=64. + + type timeval is record + tv_sec : time_t; -- seconds + tv_usec : usec_t; -- microseconds + end record + with Convention => C; + + type nsec_t is range -2 ** (OS_Constants.SIZEOF_tv_nsec * 8 - 1) .. + 2 ** (OS_Constants.SIZEOF_tv_nsec * 8 - 1) - 1 + with Convention => C, Size => OS_Constants.SIZEOF_tv_nsec * 8; + -- Larger than the signed long int C type on x32. + + type timespec is record + tv_sec : time_t; -- seconds + tv_nsec : nsec_t; -- nanoseconds + end record + with Convention => C; + + -- All conversion functions truncate the result if it is inexact + + function To_Duration (T : timespec) return Duration with Inline; + function To_Duration (T : timeval) return Duration with Inline; + + function To_Timespec (D : Duration) return timespec with Inline; + function To_Timeval (D : Duration) return timeval with Inline; + + function In_Timeval_Duration (T : timeval) return Boolean with Inline; + -- g-socket.adb if not Windows target + + function Milliseconds_To_Timeval (M : Interfaces.C.int) return timeval + with Inline; + -- g-sothco.ads + -- g-spogwa.adb + + function Nanoseconds_To_Timespec (N : Interfaces.C.int) return timespec + with Inline; + function To_Timespec (T : timeval) return timespec with Inline; + -- s-osinte__darwin.adb + +end System.C_Time; diff --git a/gcc/ada/libgnat/s-crtl.adb b/gcc/ada/libgnat/s-crtl.adb new file mode 100644 index 000000000000..89818487fd80 --- /dev/null +++ b/gcc/ada/libgnat/s-crtl.adb @@ -0,0 +1,60 @@ +------------------------------------------------------------------------------ +-- -- +-- GNAT RUN-TIME COMPONENTS -- +-- -- +-- S Y S T E M . C R T L -- +-- -- +-- S p e c -- +-- -- +-- Copyright (C) 2003-2025, Free Software Foundation, Inc. -- +-- -- +-- GNAT is free software; you can redistribute it and/or modify it under -- +-- terms of the GNU General Public License as published by the Free Soft- -- +-- ware Foundation; either version 3, or (at your option) any later ver- -- +-- sion. GNAT is distributed in the hope that it will be useful, but WITH- -- +-- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -- +-- or FITNESS FOR A PARTICULAR PURPOSE. -- +-- -- +-- As a special exception 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 -- +-- . -- +-- -- +-- GNAT was originally developed by the GNAT team at New York University. -- +-- Extensive contributions were provided by Ada Core Technologies Inc. -- +-- -- +------------------------------------------------------------------------------ + +package body System.CRTL is + + ---------- + -- read -- + ---------- + + function read (fd : int; buffer : chars; count : size_t) return ssize_t + is + function read_raw + (fd : int; buffer : chars; count : size_t) return ssize_t; + pragma Import (C, read_raw, "read"); + begin + return read_raw (fd, buffer, count); + end read; + + ----------- + -- write -- + ----------- + + function write (fd : int; buffer : chars; count : size_t) return ssize_t + is + function write_raw + (fd : int; buffer : chars; count : size_t) return ssize_t; + pragma Import (C, write_raw, "write"); + begin + return write_raw (fd, buffer, count); + end write; + +end System.CRTL; diff --git a/gcc/ada/libgnat/s-crtl.ads b/gcc/ada/libgnat/s-crtl.ads index 42b31440683d..5ca7fc468495 100644 --- a/gcc/ada/libgnat/s-crtl.ads +++ b/gcc/ada/libgnat/s-crtl.ads @@ -50,6 +50,9 @@ package System.CRTL is subtype int is Integer; + type unsigned is mod 2 ** 32; + for unsigned'Size use 32; + type long is range -(2 ** (System.Parameters.long_bits - 1)) .. +(2 ** (System.Parameters.long_bits - 1)) - 1; @@ -231,9 +234,11 @@ package System.CRTL is pragma Import (C, close, "close"); function read (fd : int; buffer : chars; count : size_t) return ssize_t; - pragma Import (C, read, "read"); + pragma Inline (read); + -- Different return types on Windows and Posix, requires body function write (fd : int; buffer : chars; count : size_t) return ssize_t; - pragma Import (C, write, "write"); + pragma Inline (write); + -- Different return types on Windows and Posix, requires body end System.CRTL; diff --git a/gcc/ada/libgnarl/s-osinte__android.adb b/gcc/ada/libgnat/s-crtl__mingw.adb similarity index 59% rename from gcc/ada/libgnarl/s-osinte__android.adb rename to gcc/ada/libgnat/s-crtl__mingw.adb index 3e36d284c918..8f10cb8c13f4 100644 --- a/gcc/ada/libgnarl/s-osinte__android.adb +++ b/gcc/ada/libgnat/s-crtl__mingw.adb @@ -1,12 +1,12 @@ ------------------------------------------------------------------------------ -- -- --- GNAT RUN-TIME LIBRARY (GNARL) COMPONENTS -- +-- GNAT RUN-TIME COMPONENTS -- -- -- --- S Y S T E M . O S _ I N T E R F A C E -- +-- S Y S T E M . C R T L -- -- -- --- B o d y -- +-- S p e c -- -- -- --- Copyright (C) 1995-2025, AdaCore -- +-- Copyright (C) 2003-2025, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -24,51 +24,39 @@ -- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see -- -- . -- -- -- --- GNARL was developed by the GNARL team at Florida State University. -- --- Extensive contributions were provided by Ada Core Technologies, Inc. -- +-- GNAT was originally developed by the GNAT team at New York University. -- +-- Extensive contributions were provided by Ada Core Technologies Inc. -- -- -- ------------------------------------------------------------------------------ --- This is an Android version of this package. +-- This is the Windows specific version of the System.CRTL --- This package encapsulates all direct interfaces to OS services --- that are needed by children of System. +package body System.CRTL is -with Interfaces.C; use Interfaces.C; + ---------- + -- read -- + ---------- -package body System.OS_Interface is - - ----------------- - -- To_Duration -- - ----------------- - - function To_Duration (TS : timespec) return Duration is + function read (fd : int; buffer : chars; count : size_t) return ssize_t + is + function read_raw + (fd : int; buffer : chars; count : unsigned) return int; + pragma Import (C, read_raw, "read"); begin - return Duration (TS.tv_sec) + Duration (TS.tv_nsec) / 10#1#E9; - end To_Duration; - - ----------------- - -- To_Timespec -- - ----------------- - - function To_Timespec (D : Duration) return timespec is - S : time_t; - F : Duration; - + return ssize_t (read_raw (fd, buffer, unsigned (count))); + end read; + + ----------- + -- write -- + ----------- + + function write (fd : int; buffer : chars; count : size_t) return ssize_t + is + function write_raw + (fd : int; buffer : chars; count : unsigned) return int; + pragma Import (C, write_raw, "write"); begin - S := time_t (Long_Long_Integer (D)); - F := D - Duration (S); - - -- If F has negative value due to a round-up, adjust for positive F - -- value. - - if F < 0.0 then - S := S - 1; - F := F + 1.0; - end if; - - return timespec'(tv_sec => S, - tv_nsec => long (Long_Long_Integer (F * 10#1#E9))); - end To_Timespec; + return ssize_t (write_raw (fd, buffer, unsigned (count))); + end write; -end System.OS_Interface; +end System.CRTL; diff --git a/gcc/ada/libgnat/s-optide.adb b/gcc/ada/libgnat/s-optide.adb index 6abe6d3a0e69..e39c7cbe2d20 100644 --- a/gcc/ada/libgnat/s-optide.adb +++ b/gcc/ada/libgnat/s-optide.adb @@ -36,8 +36,13 @@ procedure Timed_Delay (Time : Duration; Mode : Integer) is - Request : aliased timespec; - Remaind : aliased timespec; + + function nanosleep (rqtp, rmtp : not null access C_Time.timespec) + return Integer; + pragma Import (C, nanosleep, "nanosleep"); + + Request : aliased C_Time.timespec; + Remaind : aliased C_Time.timespec; Rel_Time : Duration; Abs_Time : Duration; Base_Time : constant Duration := Clock; @@ -71,7 +76,7 @@ begin end if; pragma Warnings (On); - Request := To_Timespec (Time_Chunk); + Request := C_Time.To_Timespec (Time_Chunk); Result := nanosleep (Request'Access, Remaind'Access); Check_Time := Clock; diff --git a/gcc/ada/libgnat/s-os_lib.adb b/gcc/ada/libgnat/s-os_lib.adb index b07bdeadd092..d0a0ad34859d 100644 --- a/gcc/ada/libgnat/s-os_lib.adb +++ b/gcc/ada/libgnat/s-os_lib.adb @@ -2985,7 +2985,7 @@ package body System.OS_Lib is -- To_Ada -- ------------ - function To_Ada (Time : time_t) return OS_Time is + function To_Ada (Time : Long_Long_Integer) return OS_Time is begin return OS_Time (Time); end To_Ada; @@ -3023,9 +3023,9 @@ package body System.OS_Lib is -- To_C -- ---------- - function To_C (Time : OS_Time) return time_t is + function To_C (Time : OS_Time) return Long_Long_Integer is begin - return time_t (Time); + return Long_Long_Integer (Time); end To_C; ------------------ diff --git a/gcc/ada/libgnat/s-os_lib.ads b/gcc/ada/libgnat/s-os_lib.ads index 38cfc88c4eaa..734f4fd50a5d 100644 --- a/gcc/ada/libgnat/s-os_lib.ads +++ b/gcc/ada/libgnat/s-os_lib.ads @@ -115,6 +115,12 @@ package System.OS_Lib is -- these have Intrinsic convention, so for example it is not permissible -- to create accesses to any of these functions. + function To_Ada (Time : Long_Long_Integer) return OS_Time; + -- Convert Long_Long_Integer to OS_Time + + function To_C (Time : OS_Time) return Long_Long_Integer; + -- Convert OS_Time to Long_Long_Integer + subtype Year_Type is Integer range 1900 .. 2099; subtype Month_Type is Integer range 1 .. 12; subtype Day_Type is Integer range 1 .. 31; @@ -161,27 +167,6 @@ package System.OS_Lib is -- component parts to be interpreted in the local time zone, and returns -- an OS_Time. Returns Invalid_Time if the creation fails. - ------------------ - -- Time_t Stuff -- - ------------------ - - -- Note: Do not use time_t in the compiler and host-based tools; instead - -- use OS_Time. - - subtype time_t is Long_Long_Integer; - -- C time_t can be either long or long long, so we choose the Ada - -- equivalent of the latter because eventually that will be the - -- type used out of necessity. This may affect some user code on 32-bit - -- targets that have not yet migrated to the Posix 2008 standard, - -- particularly pre version 5 32-bit Linux. Do not change this - -- declaration without coordinating it with conversions in Ada.Calendar. - - function To_C (Time : OS_Time) return time_t; - -- Convert OS_Time to C time_t type - - function To_Ada (Time : time_t) return OS_Time; - -- Convert C time_t type to OS_Time - ---------------- -- File Stuff -- ---------------- @@ -1126,8 +1111,8 @@ private pragma Import (Intrinsic, ">"); pragma Import (Intrinsic, "<="); pragma Import (Intrinsic, ">="); - pragma Inline (To_C); pragma Inline (To_Ada); + pragma Inline (To_C); type Process_Id is new Integer; Invalid_Pid : constant Process_Id := -1; diff --git a/gcc/ada/libgnat/s-osprim__darwin.adb b/gcc/ada/libgnat/s-osprim__darwin.adb index 28bfcb8c6831..7b978a3b486d 100644 --- a/gcc/ada/libgnat/s-osprim__darwin.adb +++ b/gcc/ada/libgnat/s-osprim__darwin.adb @@ -29,9 +29,10 @@ -- -- ------------------------------------------------------------------------------ --- This version is for darwin +-- This version is for Darwin + +with System.C_Time; -with System.Parameters; package body System.OS_Primitives is -- ??? These definitions are duplicated from System.OS_Interface @@ -46,27 +47,13 @@ package body System.OS_Primitives is pragma Convention (C, struct_timezone); type struct_timezone_ptr is access all struct_timezone; - type time_t is range -2 ** (System.Parameters.time_t_bits - 1) - .. 2 ** (System.Parameters.time_t_bits - 1) - 1; - - type struct_timeval is record - tv_sec : time_t; - tv_usec : Integer; - end record; - pragma Convention (C, struct_timeval); - function gettimeofday - (tv : not null access struct_timeval; + (tv : not null access C_Time.timeval; tz : struct_timezone_ptr) return Integer; pragma Import (C, gettimeofday, "gettimeofday"); - type timespec is record - tv_sec : time_t; - tv_nsec : Long_Integer; - end record; - pragma Convention (C, timespec); - - function nanosleep (rqtp, rmtp : not null access timespec) return Integer; + function nanosleep (rqtp, rmtp : not null access C_Time.timespec) + return Integer; pragma Import (C, nanosleep, "nanosleep"); ----------- @@ -74,7 +61,7 @@ package body System.OS_Primitives is ----------- function Clock return Duration is - TV : aliased struct_timeval; + TV : aliased C_Time.timeval; Result : Integer; pragma Unreferenced (Result); @@ -89,36 +76,9 @@ package body System.OS_Primitives is -- value is never checked. Result := gettimeofday (TV'Access, null); - return Duration (TV.tv_sec) + Duration (TV.tv_usec) / 10#1#E6; + return C_Time.To_Duration (TV); end Clock; - ----------------- - -- To_Timespec -- - ----------------- - - function To_Timespec (D : Duration) return timespec; - - function To_Timespec (D : Duration) return timespec is - S : time_t; - F : Duration; - - begin - S := time_t (Long_Long_Integer (D)); - F := D - Duration (S); - - -- If F has negative value due to a round-up, adjust for positive F - -- value. - - if F < 0.0 then - S := S - 1; - F := F + 1.0; - end if; - - return - timespec'(tv_sec => S, - tv_nsec => Long_Integer (Long_Long_Integer (F * 10#1#E9))); - end To_Timespec; - ----------------- -- Timed_Delay -- ----------------- @@ -127,8 +87,8 @@ package body System.OS_Primitives is (Time : Duration; Mode : Integer) is - Request : aliased timespec; - Remaind : aliased timespec; + Request : aliased C_Time.timespec; + Remaind : aliased C_Time.timespec; Rel_Time : Duration; Abs_Time : Duration; Base_Time : constant Duration := Clock; @@ -148,7 +108,7 @@ package body System.OS_Primitives is if Rel_Time > 0.0 then loop - Request := To_Timespec (Rel_Time); + Request := C_Time.To_Timespec (Rel_Time); Result := nanosleep (Request'Access, Remaind'Access); Check_Time := Clock; diff --git a/gcc/ada/libgnat/s-osprim__posix.adb b/gcc/ada/libgnat/s-osprim__posix.adb index 94d06c325bb2..45836ac806d3 100644 --- a/gcc/ada/libgnat/s-osprim__posix.adb +++ b/gcc/ada/libgnat/s-osprim__posix.adb @@ -30,26 +30,10 @@ ------------------------------------------------------------------------------ -- This version is for POSIX-like operating systems -with System.Parameters; -package body System.OS_Primitives is - - -- ??? These definitions are duplicated from System.OS_Interface - -- because we don't want to depend on any package. Consider removing - -- these declarations in System.OS_Interface and move these ones in - -- the spec. - - type time_t is range -2 ** (System.Parameters.time_t_bits - 1) - .. 2 ** (System.Parameters.time_t_bits - 1) - 1; +with System.C_Time; - type timespec is record - tv_sec : time_t; - tv_nsec : Long_Integer; - end record; - pragma Convention (C, timespec); - - function nanosleep (rqtp, rmtp : not null access timespec) return Integer; - pragma Import (C, nanosleep, "nanosleep"); +package body System.OS_Primitives is ----------- -- Clock -- @@ -57,27 +41,12 @@ package body System.OS_Primitives is function Clock return Duration is - type timeval is array (1 .. 3) of Long_Integer; - -- The timeval array is sized to contain Long_Long_Integer sec and - -- Long_Integer usec. If Long_Long_Integer'Size = Long_Integer'Size then - -- it will be overly large but that will not effect the implementation - -- since it is not accessed directly. - - procedure timeval_to_duration - (T : not null access timeval; - sec : not null access Long_Long_Integer; - usec : not null access Long_Integer); - pragma Import (C, timeval_to_duration, "__gnat_timeval_to_duration"); - - Micro : constant := 10**6; - sec : aliased Long_Long_Integer; - usec : aliased Long_Integer; - TV : aliased timeval; + TV : aliased C_Time.timeval; Result : Integer; pragma Unreferenced (Result); function gettimeofday - (Tv : access timeval; + (Tv : access C_Time.timeval; Tz : System.Address := System.Null_Address) return Integer; pragma Import (C, gettimeofday, "gettimeofday"); @@ -91,37 +60,9 @@ package body System.OS_Primitives is -- value is never checked. Result := gettimeofday (TV'Access, System.Null_Address); - timeval_to_duration (TV'Access, sec'Access, usec'Access); - return Duration (sec) + Duration (usec) / Micro; + return C_Time.To_Duration (TV); end Clock; - ----------------- - -- To_Timespec -- - ----------------- - - function To_Timespec (D : Duration) return timespec; - - function To_Timespec (D : Duration) return timespec is - S : time_t; - F : Duration; - - begin - S := time_t (Long_Long_Integer (D)); - F := D - Duration (S); - - -- If F has negative value due to a round-up, adjust for positive F - -- value. - - if F < 0.0 then - S := S - 1; - F := F + 1.0; - end if; - - return - timespec'(tv_sec => S, - tv_nsec => Long_Integer (Long_Long_Integer (F * 10#1#E9))); - end To_Timespec; - ----------------- -- Timed_Delay -- ----------------- diff --git a/gcc/ada/libgnat/s-osprim__posix2008.adb b/gcc/ada/libgnat/s-osprim__posix2008.adb index 78b21c6444d9..fceb37cdd011 100644 --- a/gcc/ada/libgnat/s-osprim__posix2008.adb +++ b/gcc/ada/libgnat/s-osprim__posix2008.adb @@ -32,34 +32,19 @@ -- This version is for POSIX.1-2008-like operating systems with System.CRTL; +with System.C_Time; with System.OS_Constants; -with System.Parameters; + package body System.OS_Primitives is subtype int is System.CRTL.int; - -- ??? These definitions are duplicated from System.OS_Interface because - -- we don't want to depend on any package. Consider removing these - -- declarations in System.OS_Interface and move these ones to the spec. - - type time_t is range -2 ** (System.Parameters.time_t_bits - 1) - .. 2 ** (System.Parameters.time_t_bits - 1) - 1; - - type timespec is record - tv_sec : time_t; - tv_nsec : Long_Integer; - end record; - pragma Convention (C, timespec); - - function nanosleep (rqtp, rmtp : not null access timespec) return Integer; - pragma Import (C, nanosleep, "nanosleep"); - ----------- -- Clock -- ----------- function Clock return Duration is - TS : aliased timespec; + TS : aliased C_Time.timespec; Result : int; type clockid_t is new int; @@ -68,42 +53,15 @@ package body System.OS_Primitives is function clock_gettime (clock_id : clockid_t; - tp : access timespec) return int; + tp : access C_Time.timespec) return int; pragma Import (C, clock_gettime, "clock_gettime"); begin Result := clock_gettime (CLOCK_REALTIME, TS'Unchecked_Access); pragma Assert (Result = 0); - return Duration (TS.tv_sec) + Duration (TS.tv_nsec) / 10#1#E9; + return C_Time.To_Duration (TS); end Clock; - ----------------- - -- To_Timespec -- - ----------------- - - function To_Timespec (D : Duration) return timespec; - - function To_Timespec (D : Duration) return timespec is - S : time_t; - F : Duration; - - begin - S := time_t (Long_Long_Integer (D)); - F := D - Duration (S); - - -- If F has negative value due to a round-up, adjust for positive F - -- value. - - if F < 0.0 then - S := S - 1; - F := F + 1.0; - end if; - - return - timespec'(tv_sec => S, - tv_nsec => Long_Integer (Long_Long_Integer (F * 10#1#E9))); - end To_Timespec; - ----------------- -- Timed_Delay -- ----------------- diff --git a/gcc/ada/libgnat/s-osprim__rtems.adb b/gcc/ada/libgnat/s-osprim__rtems.adb index c8fbc8270ca8..99644b39424a 100644 --- a/gcc/ada/libgnat/s-osprim__rtems.adb +++ b/gcc/ada/libgnat/s-osprim__rtems.adb @@ -31,7 +31,8 @@ -- This version is for POSIX-like operating systems -with System.Parameters; +with System.C_Time; + package body System.OS_Primitives is -- ??? These definitions are duplicated from System.OS_Interface @@ -39,16 +40,8 @@ package body System.OS_Primitives is -- these declarations in System.OS_Interface and move these ones in -- the spec. - type time_t is range -2 ** (System.Parameters.time_t_bits - 1) - .. 2 ** (System.Parameters.time_t_bits - 1) - 1; - - type timespec is record - tv_sec : time_t; - tv_nsec : Long_Integer; - end record; - pragma Convention (C, timespec); - - function nanosleep (rqtp, rmtp : not null access timespec) return Integer; + function nanosleep (rqtp, rmtp : not null access C_Time.timespec) + return Integer; pragma Import (C, nanosleep, "nanosleep"); ----------- @@ -56,28 +49,12 @@ package body System.OS_Primitives is ----------- function Clock return Duration is - - type timeval is record - tv_sec : time_t; - tv_usec : Long_Integer; - end record; - pragma Convention (C, timeval); - - procedure timeval_to_duration - (T : not null access timeval; - sec : not null access Long_Long_Integer; - usec : not null access Long_Integer); - pragma Import (C, timeval_to_duration, "__gnat_timeval_to_duration"); - - Micro : constant := 10**6; - sec : aliased Long_Long_Integer; - usec : aliased Long_Integer; - TV : aliased timeval; + TV : aliased C_Time.timeval; Result : Integer; pragma Unreferenced (Result); function gettimeofday - (Tv : access timeval; + (Tv : access C_Time.timeval; Tz : System.Address := System.Null_Address) return Integer; pragma Import (C, gettimeofday, "gettimeofday"); @@ -91,37 +68,9 @@ package body System.OS_Primitives is -- value is never checked. Result := gettimeofday (TV'Access, System.Null_Address); - timeval_to_duration (TV'Access, sec'Access, usec'Access); - return Duration (sec) + Duration (usec) / Micro; + return C_Time.To_Duration (TV); end Clock; - ----------------- - -- To_Timespec -- - ----------------- - - function To_Timespec (D : Duration) return timespec; - - function To_Timespec (D : Duration) return timespec is - S : time_t; - F : Duration; - - begin - S := time_t (Long_Long_Integer (D)); - F := D - Duration (S); - - -- If F has negative value due to a round-up, adjust for positive F - -- value. - - if F < 0.0 then - S := S - 1; - F := F + 1.0; - end if; - - return - timespec'(tv_sec => S, - tv_nsec => Long_Integer (Long_Long_Integer (F * 10#1#E9))); - end To_Timespec; - ----------------- -- Timed_Delay -- ----------------- @@ -130,8 +79,8 @@ package body System.OS_Primitives is (Time : Duration; Mode : Integer) is - Request : aliased timespec; - Remaind : aliased timespec; + Request : aliased C_Time.timespec; + Remaind : aliased C_Time.timespec; Rel_Time : Duration; Abs_Time : Duration; Base_Time : constant Duration := Clock; @@ -151,7 +100,7 @@ package body System.OS_Primitives is if Rel_Time > 0.0 then loop - Request := To_Timespec (Rel_Time); + Request := C_Time.To_Timespec (Rel_Time); Result := nanosleep (Request'Access, Remaind'Access); Check_Time := Clock; diff --git a/gcc/ada/libgnat/s-osprim__solaris.adb b/gcc/ada/libgnat/s-osprim__solaris.adb deleted file mode 100644 index a08feb5f666f..000000000000 --- a/gcc/ada/libgnat/s-osprim__solaris.adb +++ /dev/null @@ -1,126 +0,0 @@ ------------------------------------------------------------------------------- --- -- --- GNAT RUN-TIME LIBRARY (GNARL) COMPONENTS -- --- -- --- S Y S T E M . O S _ P R I M I T I V E S -- --- -- --- B o d y -- --- -- --- Copyright (C) 1998-2025, Free Software Foundation, Inc. -- --- -- --- GNARL is free software; you can redistribute it and/or modify it under -- --- terms of the GNU General Public License as published by the Free Soft- -- --- ware Foundation; either version 3, or (at your option) any later ver- -- --- sion. GNAT is distributed in the hope that it will be useful, but WITH- -- --- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -- --- or FITNESS FOR A PARTICULAR PURPOSE. -- --- -- --- As a special exception 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 -- --- . -- --- -- --- GNARL was developed by the GNARL team at Florida State University. -- --- Extensive contributions were provided by Ada Core Technologies, Inc. -- --- -- ------------------------------------------------------------------------------- - --- This version uses gettimeofday and select --- This file is suitable for Solaris (32 and 64 bits). - -package body System.OS_Primitives is - - -- ??? These definitions are duplicated from System.OS_Interface - -- because we don't want to depend on any package. Consider removing - -- these declarations in System.OS_Interface and move these ones in - -- the spec. - - type struct_timeval is record - tv_sec : Long_Integer; - tv_usec : Long_Integer; - end record; - pragma Convention (C, struct_timeval); - - procedure gettimeofday - (tv : not null access struct_timeval; - tz : Address := Null_Address); - pragma Import (C, gettimeofday, "gettimeofday"); - - procedure C_select - (n : Integer := 0; - readfds, - writefds, - exceptfds : Address := Null_Address; - timeout : not null access struct_timeval); - pragma Import (C, C_select, "select"); - - ----------- - -- Clock -- - ----------- - - function Clock return Duration is - TV : aliased struct_timeval; - - begin - gettimeofday (TV'Access); - return Duration (TV.tv_sec) + Duration (TV.tv_usec) / 10#1#E6; - end Clock; - - ----------------- - -- Timed_Delay -- - ----------------- - - procedure Timed_Delay - (Time : Duration; - Mode : Integer) - is - Rel_Time : Duration; - Abs_Time : Duration; - Base_Time : constant Duration := Clock; - Check_Time : Duration := Base_Time; - timeval : aliased struct_timeval; - - begin - if Mode = Relative then - Rel_Time := Time; - Abs_Time := Time + Check_Time; - else - Rel_Time := Time - Check_Time; - Abs_Time := Time; - end if; - - if Rel_Time > 0.0 then - loop - timeval.tv_sec := Long_Integer (Rel_Time); - - if Duration (timeval.tv_sec) > Rel_Time then - timeval.tv_sec := timeval.tv_sec - 1; - end if; - - timeval.tv_usec := - Long_Integer ((Rel_Time - Duration (timeval.tv_sec)) * 10#1#E6); - - C_select (timeout => timeval'Unchecked_Access); - Check_Time := Clock; - - exit when Abs_Time <= Check_Time or else Check_Time < Base_Time; - - Rel_Time := Abs_Time - Check_Time; - end loop; - end if; - end Timed_Delay; - - ---------------- - -- Initialize -- - ---------------- - - procedure Initialize is - begin - null; - end Initialize; - -end System.OS_Primitives; diff --git a/gcc/ada/libgnat/s-osprim__unix.adb b/gcc/ada/libgnat/s-osprim__unix.adb index 5848df6f63fc..c48fbe1001f0 100644 --- a/gcc/ada/libgnat/s-osprim__unix.adb +++ b/gcc/ada/libgnat/s-osprim__unix.adb @@ -30,7 +30,9 @@ ------------------------------------------------------------------------------ -- This version uses gettimeofday and select --- This file is suitable for OpenNT, Dec Unix and SCO UnixWare. +-- This file is suitable for Dec Unix, SCO UnixWare and Sun Solaris. + +with System.C_Time; package body System.OS_Primitives is @@ -39,14 +41,8 @@ package body System.OS_Primitives is -- these declarations in System.OS_Interface and move these ones in -- the spec. - type struct_timeval is record - tv_sec : Integer; - tv_usec : Integer; - end record; - pragma Convention (C, struct_timeval); - procedure gettimeofday - (tv : not null access struct_timeval; + (tv : not null access C_Time.timeval; tz : Address := Null_Address); pragma Import (C, gettimeofday, "gettimeofday"); @@ -55,7 +51,7 @@ package body System.OS_Primitives is readfds, writefds, exceptfds : Address := Null_Address; - timeout : not null access struct_timeval); + timeout : not null access C_Time.timeval); pragma Import (C, C_select, "select"); ----------- @@ -63,11 +59,11 @@ package body System.OS_Primitives is ----------- function Clock return Duration is - TV : aliased struct_timeval; + TV : aliased C_Time.timeval; begin gettimeofday (TV'Access); - return Duration (TV.tv_sec) + Duration (TV.tv_usec) / 10#1#E6; + return C_Time.To_Duration (TV); end Clock; ----------------- @@ -82,7 +78,7 @@ package body System.OS_Primitives is Abs_Time : Duration; Base_Time : constant Duration := Clock; Check_Time : Duration := Base_Time; - timeval : aliased struct_timeval; + timeval : aliased C_Time.timeval; begin if Mode = Relative then @@ -95,14 +91,7 @@ package body System.OS_Primitives is if Rel_Time > 0.0 then loop - timeval.tv_sec := Integer (Rel_Time); - - if Duration (timeval.tv_sec) > Rel_Time then - timeval.tv_sec := timeval.tv_sec - 1; - end if; - - timeval.tv_usec := - Integer ((Rel_Time - Duration (timeval.tv_sec)) * 10#1#E6); + timeval := C_Time.To_Timeval (Rel_Time); C_select (timeout => timeval'Unchecked_Access); Check_Time := Clock; diff --git a/gcc/ada/libgnat/s-osprim__x32.adb b/gcc/ada/libgnat/s-osprim__x32.adb deleted file mode 100644 index e127107aa57d..000000000000 --- a/gcc/ada/libgnat/s-osprim__x32.adb +++ /dev/null @@ -1,170 +0,0 @@ ------------------------------------------------------------------------------- --- -- --- GNAT RUN-TIME LIBRARY (GNARL) COMPONENTS -- --- -- --- S Y S T E M . O S _ P R I M I T I V E S -- --- -- --- B o d y -- --- -- --- Copyright (C) 2013-2025, Free Software Foundation, Inc. -- --- -- --- GNARL is free software; you can redistribute it and/or modify it under -- --- terms of the GNU General Public License as published by the Free Soft- -- --- ware Foundation; either version 3, or (at your option) any later ver- -- --- sion. GNAT is distributed in the hope that it will be useful, but WITH- -- --- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -- --- or FITNESS FOR A PARTICULAR PURPOSE. -- --- -- --- As a special exception 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 -- --- . -- --- -- --- GNARL was developed by the GNARL team at Florida State University. -- --- Extensive contributions were provided by Ada Core Technologies, Inc. -- --- -- ------------------------------------------------------------------------------- - --- This version is for Linux/x32 - -with System.Parameters; - -package body System.OS_Primitives is - - -- ??? These definitions are duplicated from System.OS_Interface - -- because we don't want to depend on any package. Consider removing - -- these declarations in System.OS_Interface and move these ones in - -- the spec. - - type time_t is range -2 ** (System.Parameters.time_t_bits - 1) - .. 2 ** (System.Parameters.time_t_bits - 1) - 1; - - type timespec is record - tv_sec : time_t; - tv_nsec : Long_Long_Integer; - end record; - pragma Convention (C, timespec); - - function nanosleep (rqtp, rmtp : not null access timespec) return Integer; - pragma Import (C, nanosleep, "nanosleep"); - - ----------- - -- Clock -- - ----------- - - function Clock return Duration is - type timeval is array (1 .. 2) of Long_Long_Integer; - - procedure timeval_to_duration - (T : not null access timeval; - sec : not null access Long_Integer; - usec : not null access Long_Integer); - pragma Import (C, timeval_to_duration, "__gnat_timeval_to_duration"); - - Micro : constant := 10**6; - sec : aliased Long_Integer; - usec : aliased Long_Integer; - TV : aliased timeval; - Result : Integer; - pragma Unreferenced (Result); - - function gettimeofday - (Tv : access timeval; - Tz : System.Address := System.Null_Address) return Integer; - pragma Import (C, gettimeofday, "gettimeofday"); - - begin - -- The return codes for gettimeofday are as follows (from man pages): - -- EPERM settimeofday is called by someone other than the superuser - -- EINVAL Timezone (or something else) is invalid - -- EFAULT One of tv or tz pointed outside accessible address space - - -- None of these codes signal a potential clock skew, hence the return - -- value is never checked. - - Result := gettimeofday (TV'Access, System.Null_Address); - timeval_to_duration (TV'Access, sec'Access, usec'Access); - return Duration (sec) + Duration (usec) / Micro; - end Clock; - - ----------------- - -- To_Timespec -- - ----------------- - - function To_Timespec (D : Duration) return timespec; - - function To_Timespec (D : Duration) return timespec is - S : time_t; - F : Duration; - - begin - S := time_t (Long_Long_Integer (D)); - F := D - Duration (S); - - -- If F has negative value due to a round-up, adjust for positive F - -- value. - - if F < 0.0 then - S := S - 1; - F := F + 1.0; - end if; - - return - timespec'(tv_sec => S, - tv_nsec => Long_Long_Integer (F * 10#1#E9)); - end To_Timespec; - - ----------------- - -- Timed_Delay -- - ----------------- - - procedure Timed_Delay - (Time : Duration; - Mode : Integer) - is - Request : aliased timespec; - Remaind : aliased timespec; - Rel_Time : Duration; - Abs_Time : Duration; - Base_Time : constant Duration := Clock; - Check_Time : Duration := Base_Time; - - Result : Integer; - pragma Unreferenced (Result); - - begin - if Mode = Relative then - Rel_Time := Time; - Abs_Time := Time + Check_Time; - else - Rel_Time := Time - Check_Time; - Abs_Time := Time; - end if; - - if Rel_Time > 0.0 then - loop - Request := To_Timespec (Rel_Time); - Result := nanosleep (Request'Access, Remaind'Access); - Check_Time := Clock; - - exit when Abs_Time <= Check_Time or else Check_Time < Base_Time; - - Rel_Time := Abs_Time - Check_Time; - end loop; - end if; - end Timed_Delay; - - ---------------- - -- Initialize -- - ---------------- - - procedure Initialize is - begin - null; - end Initialize; - -end System.OS_Primitives; diff --git a/gcc/ada/libgnat/s-parame.ads b/gcc/ada/libgnat/s-parame.ads index 98284a4d13ec..8587453c947e 100644 --- a/gcc/ada/libgnat/s-parame.ads +++ b/gcc/ada/libgnat/s-parame.ads @@ -97,13 +97,6 @@ package System.Parameters is -- Indicates if secondary stacks can grow and shrink at run-time. If False, -- the size of a secondary stack is fixed at the point of its creation. - ------------------------------------ - -- Characteristics of time_t type -- - ------------------------------------ - - time_t_bits : constant := Long_Integer'Size; - -- Number of bits in type time_t - ---------------------------------------------- -- Characteristics of types in Interfaces.C -- ---------------------------------------------- diff --git a/gcc/ada/libgnat/s-parame__hpux.ads b/gcc/ada/libgnat/s-parame__hpux.ads index a8a7b691802d..832f344a5927 100644 --- a/gcc/ada/libgnat/s-parame__hpux.ads +++ b/gcc/ada/libgnat/s-parame__hpux.ads @@ -96,13 +96,6 @@ package System.Parameters is -- Indicates if secondary stacks can grow and shrink at run-time. If False, -- the size of a secondary stack is fixed at the point of its creation. - ------------------------------------ - -- Characteristics of time_t type -- - ------------------------------------ - - time_t_bits : constant := Long_Integer'Size; - -- Number of bits in type time_t - ---------------------------------------------- -- Characteristics of Types in Interfaces.C -- ---------------------------------------------- diff --git a/gcc/ada/libgnat/s-parame__posix2008.ads b/gcc/ada/libgnat/s-parame__posix2008.ads deleted file mode 100644 index 1cf09c6e39f1..000000000000 --- a/gcc/ada/libgnat/s-parame__posix2008.ads +++ /dev/null @@ -1,189 +0,0 @@ ------------------------------------------------------------------------------- --- -- --- GNAT COMPILER COMPONENTS -- --- -- --- S Y S T E M . P A R A M E T E R S -- --- -- --- S p e c -- --- -- --- Copyright (C) 1992-2025, Free Software Foundation, Inc. -- --- -- --- GNAT is free software; you can redistribute it and/or modify it under -- --- terms of the GNU General Public License as published by the Free Soft- -- --- ware Foundation; either version 3, or (at your option) any later ver- -- --- sion. GNAT is distributed in the hope that it will be useful, but WITH- -- --- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -- --- or FITNESS FOR A PARTICULAR PURPOSE. -- --- -- --- As a special exception 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 -- --- . -- --- -- --- GNAT was originally developed by the GNAT team at New York University. -- --- Extensive contributions were provided by Ada Core Technologies Inc. -- --- -- ------------------------------------------------------------------------------- - --- This is the Posix 2008 version for 64 bit time_t. - --- This package defines some system dependent parameters for GNAT. These --- are values that are referenced by the runtime library and are therefore --- relevant to the target machine. - --- The parameters whose value is defined in the spec are not generally --- expected to be changed. If they are changed, it will be necessary to --- recompile the run-time library. - --- The parameters which are defined by functions can be changed by modifying --- the body of System.Parameters in file s-parame.adb. A change to this body --- requires only rebinding and relinking of the application. - --- Note: do not introduce any pragma Inline statements into this unit, since --- otherwise the relinking and rebinding capability would be deactivated. - -package System.Parameters is - pragma Pure; - - --------------------------------------- - -- Task And Stack Allocation Control -- - --------------------------------------- - - type Size_Type is range -Memory_Size / 2 .. Memory_Size / 2 - 1; - -- Type used to provide task stack sizes to the runtime. Sized to permit - -- stack sizes of up to half the total addressable memory space. This may - -- seem excessively large (even for 32-bit systems), however there are many - -- instances of users requiring large stack sizes (for example string - -- processing). - - Unspecified_Size : constant Size_Type := Size_Type'First; - -- Value used to indicate that no size type is set - - function Default_Stack_Size return Size_Type; - -- Default task stack size used if none is specified - - function Minimum_Stack_Size return Size_Type; - -- Minimum task stack size permitted - - function Adjust_Storage_Size (Size : Size_Type) return Size_Type; - -- Given the storage size stored in the TCB, return the Storage_Size - -- value required by the RM for the Storage_Size attribute. The - -- required adjustment is as follows: - -- - -- when Size = Unspecified_Size, return Default_Stack_Size - -- when Size < Minimum_Stack_Size, return Minimum_Stack_Size - -- otherwise return given Size - - Default_Env_Stack_Size : constant Size_Type := 8_192_000; - -- Assumed size of the environment task, if no other information is - -- available. This value is used when stack checking is enabled and - -- no GNAT_STACK_LIMIT environment variable is set. - - Stack_Grows_Down : constant Boolean := True; - -- This constant indicates whether the stack grows up (False) or - -- down (True) in memory as functions are called. It is used for - -- proper implementation of the stack overflow check. - - Runtime_Default_Sec_Stack_Size : constant Size_Type := 10 * 1024; - -- The run-time chosen default size for secondary stacks that may be - -- overridden by the user with the use of binder -D switch. - - Sec_Stack_Dynamic : constant Boolean := True; - -- Indicates if secondary stacks can grow and shrink at run-time. If False, - -- the size of a secondary stack is fixed at the point of its creation. - - ------------------------------------ - -- Characteristics of time_t type -- - ------------------------------------ - - time_t_bits : constant := Long_Long_Integer'Size; - -- Number of bits in type time_t. Use for targets that are Posix 2008 - -- compliant (fixes the year 2038 time_t overflow). - - ---------------------------------------------- - -- Characteristics of types in Interfaces.C -- - ---------------------------------------------- - - long_bits : constant := Long_Integer'Size; - -- Number of bits in type long and unsigned_long. The normal convention - -- is that this is the same as type Long_Integer, but this may not be true - -- of all targets. - - ptr_bits : constant := Standard'Address_Size; - subtype C_Address is System.Address; - -- Number of bits in Interfaces.C pointers, normally a standard address - - C_Malloc_Linkname : constant String := "__gnat_malloc"; - -- Name of runtime function used to allocate such a pointer - - ---------------------------------------------- - -- Behavior of Pragma Finalize_Storage_Only -- - ---------------------------------------------- - - -- Garbage_Collected is a Boolean constant whose value indicates the - -- effect of the pragma Finalize_Storage_Entry on a controlled type. - - -- Garbage_Collected = False - - -- The system releases all storage on program termination only, - -- but not other garbage collection occurs, so finalization calls - -- are omitted only for outer level objects can be omitted if - -- pragma Finalize_Storage_Only is used. - - -- Garbage_Collected = True - - -- The system provides full garbage collection, so it is never - -- necessary to release storage for controlled objects for which - -- a pragma Finalize_Storage_Only is used. - - Garbage_Collected : constant Boolean := False; - -- The storage mode for this system (release on program exit) - - --------------------- - -- Tasking Profile -- - --------------------- - - -- In the following sections, constant parameters are defined to - -- allow some optimizations and fine tuning within the tasking run time - -- based on restrictions on the tasking features. - - ------------------- - -- Task Abortion -- - ------------------- - - No_Abort : constant Boolean := False; - -- This constant indicates whether abort statements and asynchronous - -- transfer of control (ATC) are disallowed. If set to True, it is - -- assumed that neither construct is used, and the run time does not - -- need to defer/undefer abort and check for pending actions at - -- completion points. A value of True for No_Abort corresponds to: - -- pragma Restrictions (No_Abort_Statements); - -- pragma Restrictions (Max_Asynchronous_Select_Nesting => 0); - - --------------------- - -- Task Attributes -- - --------------------- - - Max_Attribute_Count : constant := 32; - -- Number of task attributes stored in the task control block - - ----------------------- - -- Task Image Length -- - ----------------------- - - Max_Task_Image_Length : constant := 256; - -- This constant specifies the maximum length of a task's image - - ------------------------------ - -- Exception Message Length -- - ------------------------------ - - Default_Exception_Msg_Max_Length : constant := 200; - -- This constant specifies the default number of characters to allow - -- in an exception message (200 is minimum required by RM 11.4.1(18)). - -end System.Parameters; diff --git a/gcc/ada/libgnat/s-parame__vxworks.ads b/gcc/ada/libgnat/s-parame__vxworks.ads index dbaadb404b75..de9afdbb0b2b 100644 --- a/gcc/ada/libgnat/s-parame__vxworks.ads +++ b/gcc/ada/libgnat/s-parame__vxworks.ads @@ -98,21 +98,6 @@ package System.Parameters is -- Indicates if secondary stacks can grow and shrink at run-time. If False, -- the size of a secondary stack is fixed at the point of its creation. - ------------------------------------ - -- Characteristics of time_t type -- - ------------------------------------ - - -- IMPORTANT NOTE: - -- Select the appropriate time_t_bits for the VSB in use, then rebuild - -- the runtime using instructions in adainclude/libada.gpr. - - -- time_t_bits : constant := Long_Integer'Size; - -- Number of bits in type time_t for SR0650 and before and SR0660 with - -- non-default configuration. - - time_t_bits : constant := Long_Long_Integer'Size; - -- Number of bits in type time_t for SR0660 with default configuration. - ---------------------------------------------- -- Characteristics of types in Interfaces.C -- ---------------------------------------------- diff --git a/gcc/ada/libgnat/s-putima.adb b/gcc/ada/libgnat/s-putima.adb index 25dd7c139147..ea26e02c3a96 100644 --- a/gcc/ada/libgnat/s-putima.adb +++ b/gcc/ada/libgnat/s-putima.adb @@ -159,6 +159,16 @@ package body System.Put_Images is Fat_Instance (S, X, "access"); end Put_Image_Fat_Pointer; + procedure Ext_Acc_Instance is new + Put_Image_Pointer (Byte_String, Ext_Access_Pointer); + + procedure Put_Image_Extended_Access_Pointer + (S : in out Sink'Class; X : Ext_Access_Pointer) + is + begin + Ext_Acc_Instance (S, X, "extended access"); + end Put_Image_Extended_Access_Pointer; + procedure Put_Image_Access_Subp (S : in out Sink'Class; X : Thin_Pointer) is begin Thin_Instance (S, X, "access subprogram"); diff --git a/gcc/ada/libgnat/s-putima.ads b/gcc/ada/libgnat/s-putima.ads index c2d392abfdb9..accdcf12bf79 100644 --- a/gcc/ada/libgnat/s-putima.ads +++ b/gcc/ada/libgnat/s-putima.ads @@ -72,10 +72,20 @@ package System.Put_Images with Pure is type Byte_String is array (Positive range <>) of Byte with Alignment => 1; type Thin_Pointer is access all Byte with Storage_Size => 0; type Fat_Pointer is access all Byte_String with Storage_Size => 0; + type Ext_Access_Pointer is access all Byte_String with Storage_Size => 0; + procedure Put_Image_Thin_Pointer (S : in out Sink'Class; X : Thin_Pointer); + -- Print "(access)" followed by "null", or the address of the designated + -- object as an unsigned hexadecimal integer. + procedure Put_Image_Fat_Pointer (S : in out Sink'Class; X : Fat_Pointer); - -- Print "null", or the address of the designated object as an unsigned - -- hexadecimal integer. + -- Print "(access)" followed by "null", or the address of the designated + -- object as an unsigned hexadecimal integer. + + procedure Put_Image_Extended_Access_Pointer + (S : in out Sink'Class; X : Ext_Access_Pointer); + -- Print "(extended access)" followed by "null", or the address of the + -- designated object as an unsigned hexadecimal integer. procedure Put_Image_Access_Subp (S : in out Sink'Class; X : Thin_Pointer); -- For access-to-subprogram types diff --git a/gcc/ada/libgnat/s-stausa.adb b/gcc/ada/libgnat/s-stausa.adb index cbecc0bb20ed..d2d9e01ce05a 100644 --- a/gcc/ada/libgnat/s-stausa.adb +++ b/gcc/ada/libgnat/s-stausa.adb @@ -99,10 +99,10 @@ package body System.Stack_Usage is -- Now the implementation of the services offered by this unit, on top of -- the Stack_Slots abstraction above. - Index_Str : constant String := "Index"; - Task_Name_Str : constant String := "Task Name"; - Stack_Size_Str : constant String := "Stack Size"; - Actual_Size_Str : constant String := "Stack usage"; + Index_Str : constant String := "Index"; + Task_Name_Str : constant String := "Task Name"; + Stack_Size_Str : constant String := "Stack Size"; + Actual_Size_Str : constant String := "Stack usage"; procedure Output_Result (Result_Id : Natural; @@ -128,9 +128,7 @@ package body System.Stack_Usage is Result_Array := new Result_Array_Type (1 .. Buffer_Size); Result_Array.all := [others => - (Task_Name => [others => ASCII.NUL], - Value => 0, - Stack_Size => 0)]; + (Task_Name => [others => ASCII.NUL], Value => 0, Stack_Size => 0)]; -- Set the Is_Enabled flag to true, so that the task wrapper knows that -- it has to handle dynamic stack analysis @@ -151,11 +149,13 @@ package body System.Stack_Usage is begin My_Stack_Size := System.CRTL.atoi (Stack_Size_Chars) * 1024; + -- Approximate Stack_Base with the topmost stack address that is + -- known here. Initialize_Analyzer (Environment_Task_Analyzer, "ENVIRONMENT TASK", My_Stack_Size, - 0, + Stack_Size_Chars'Address, My_Stack_Size); Fill_Stack (Environment_Task_Analyzer); @@ -207,8 +207,8 @@ package body System.Stack_Usage is -- Reduce pattern size to prevent local frame overwrite Analyzer.Pattern_Size := - Integer (To_Stack_Address (Current_Stack_Level'Address) - Guard - - To_Stack_Address (Analyzer.Pattern_Limit)); + Integer (To_Stack_Address (Current_Stack_Level'Address) - Guard - + To_Stack_Address (Analyzer.Pattern_Limit)); end if; Analyzer.Pattern_Overlay_Address := Analyzer.Pattern_Limit; @@ -267,22 +267,21 @@ package body System.Stack_Usage is ------------------------- procedure Initialize_Analyzer - (Analyzer : in out Stack_Analyzer; - Task_Name : String; - Stack_Size : Natural; - Stack_Base : System.Address; - Pattern_Size : Natural; - Pattern : Interfaces.Unsigned_32 := 16#DEAD_BEEF#) - is + (Analyzer : in out Stack_Analyzer; + Task_Name : String; + Stack_Size : Natural; + Stack_Base : System.Address; + Pattern_Size : Natural; + Pattern : Interfaces.Unsigned_32 := 16#DEAD_BEEF#) is begin -- Initialize the analyzer fields - Analyzer.Stack_Base := Stack_Base; - Analyzer.Stack_Size := Stack_Size; - Analyzer.Pattern_Size := Pattern_Size; - Analyzer.Pattern := Pattern; - Analyzer.Result_Id := Next_Id; - Analyzer.Task_Name := [others => ' ']; + Analyzer.Stack_Base := Stack_Base; + Analyzer.Stack_Size := Stack_Size; + Analyzer.Pattern_Size := Pattern_Size; + Analyzer.Pattern := Pattern; + Analyzer.Result_Id := Next_Id; + Analyzer.Task_Name := [others => ' ']; -- Compute the task name, and truncate if bigger than Task_Name_Length @@ -290,10 +289,12 @@ package body System.Stack_Usage is Analyzer.Task_Name (1 .. Task_Name'Length) := Task_Name; else Analyzer.Task_Name := - Task_Name (Task_Name'First .. - Task_Name'First + Task_Name_Length - 1); + Task_Name + (Task_Name'First .. Task_Name'First + Task_Name_Length - 1); end if; + -- Next_Id does not need any explicit protection against race conditions + -- because Initialize_Analyzer is called holding the runtime lock. Next_Id := Next_Id + 1; end Initialize_Analyzer; @@ -302,9 +303,7 @@ package body System.Stack_Usage is ---------------- function Stack_Size - (SP_Low : Stack_Address; - SP_High : Stack_Address) return Natural - is + (SP_Low : Stack_Address; SP_High : Stack_Address) return Natural is begin if SP_Low > SP_High then return Natural (SP_Low - SP_High); @@ -379,16 +378,16 @@ package body System.Stack_Usage is Stack_Size_Str : constant String := Natural'Image (Result.Stack_Size); Actual_Use_Str : constant String := Natural'Image (Result.Value); - Result_Id_Blanks : constant - String (1 .. Index_Str'Length - Result_Id_Str'Length) := + Result_Id_Blanks : + constant String (1 .. Index_Str'Length - Result_Id_Str'Length) := (others => ' '); - Stack_Size_Blanks : constant - String (1 .. Max_Stack_Size_Len - Stack_Size_Str'Length) := + Stack_Size_Blanks : + constant String (1 .. Max_Stack_Size_Len - Stack_Size_Str'Length) := (others => ' '); - Actual_Use_Blanks : constant - String (1 .. Max_Actual_Use_Len - Actual_Use_Str'Length) := + Actual_Use_Blanks : + constant String (1 .. Max_Actual_Use_Len - Actual_Use_Str'Length) := (others => ' '); begin @@ -412,10 +411,9 @@ package body System.Stack_Usage is Max_Stack_Usage : Natural := 0; Max_Stack_Size_Len, Max_Actual_Use_Len : Natural := 0; - Task_Name_Blanks : constant - String - (1 .. Task_Name_Length - Task_Name_Str'Length) := - (others => ' '); + Task_Name_Blanks : + constant String (1 .. Task_Name_Length - Task_Name_Str'Length) := + (others => ' '); begin Set_Output (Standard_Error); @@ -431,6 +429,7 @@ package body System.Stack_Usage is -- in order to do correct column alignment. for J in Result_Array'Range loop + -- Slots at Next_Id or higher haven't been allocated to tasks exit when J >= Next_Id; if Result_Array (J).Value > Max_Stack_Usage then @@ -450,15 +449,15 @@ package body System.Stack_Usage is -- labels if needed. declare - Stack_Size_Blanks : constant - String (1 .. Max_Stack_Size_Len - - Stack_Size_Str'Length) := - [others => ' ']; + Stack_Size_Blanks : + constant String + (1 .. Max_Stack_Size_Len - Stack_Size_Str'Length) := + [others => ' ']; - Stack_Usage_Blanks : constant - String (1 .. Max_Actual_Use_Len - - Actual_Size_Str'Length) := - [others => ' ']; + Stack_Usage_Blanks : + constant String + (1 .. Max_Actual_Use_Len - Actual_Size_Str'Length) := + [others => ' ']; begin if Stack_Size_Str'Length > Max_Stack_Size_Len then @@ -480,6 +479,7 @@ package body System.Stack_Usage is -- Now display the individual results for J in Result_Array'Range loop + -- Slots at Next_Id or higher haven't been allocated to tasks exit when J >= Next_Id; Output_Result (J, Result_Array (J), Max_Stack_Size_Len, Max_Actual_Use_Len); @@ -489,8 +489,14 @@ package body System.Stack_Usage is else Put - (Index_Str & " | " & Task_Name_Str & Task_Name_Blanks & " | " - & Stack_Size_Str & " | " & Actual_Size_Str); + (Index_Str + & " | " + & Task_Name_Str + & Task_Name_Blanks + & " | " + & Stack_Size_Str + & " | " + & Actual_Size_Str); New_Line; end if; end Output_Results; @@ -500,9 +506,10 @@ package body System.Stack_Usage is ------------------- procedure Report_Result (Analyzer : Stack_Analyzer) is - Result : Task_Result := (Task_Name => Analyzer.Task_Name, - Stack_Size => Analyzer.Stack_Size, - Value => 0); + Result : Task_Result := + (Task_Name => Analyzer.Task_Name, + Stack_Size => Analyzer.Stack_Size, + Value => 0); begin if Analyzer.Pattern_Size = 0 then @@ -513,8 +520,9 @@ package body System.Stack_Usage is else Result.Value := - Stack_Size (To_Stack_Address (Analyzer.Topmost_Touched_Mark), - To_Stack_Address (Analyzer.Stack_Base)); + Stack_Size + (To_Stack_Address (Analyzer.Topmost_Touched_Mark), + To_Stack_Address (Analyzer.Stack_Base)); end if; if Analyzer.Result_Id in Result_Array'Range then @@ -528,9 +536,9 @@ package body System.Stack_Usage is declare Result_Str_Len : constant Natural := - Natural'Image (Result.Value)'Length; + Natural'Image (Result.Value)'Length; Size_Str_Len : constant Natural := - Natural'Image (Analyzer.Stack_Size)'Length; + Natural'Image (Analyzer.Stack_Size)'Length; Max_Stack_Size_Len : Natural; Max_Actual_Use_Len : Natural; diff --git a/gcc/ada/libgnat/s-stausa.ads b/gcc/ada/libgnat/s-stausa.ads index 36cebd7cde07..5fbda041b690 100644 --- a/gcc/ada/libgnat/s-stausa.ads +++ b/gcc/ada/libgnat/s-stausa.ads @@ -41,9 +41,8 @@ package System.Stack_Usage is subtype Stack_Address is SSE.Integer_Address; -- Address on the stack - function To_Stack_Address - (Value : System.Address) return Stack_Address - renames System.Storage_Elements.To_Integer; + function To_Stack_Address (Value : System.Address) return Stack_Address + renames System.Storage_Elements.To_Integer; Task_Name_Length : constant := 32; -- The maximum length of task name displayed. @@ -85,7 +84,7 @@ package System.Stack_Usage is -- Bottom_Of_Stack : aliased Integer; -- -- Bottom_Of_Stack'Address will be used as an approximation of - -- -- the bottom of stack. A good practise is to avoid allocating + -- -- the bottom of stack. A good practice is to avoid allocating -- -- other local variables on this stack, as it would degrade -- -- the quality of this approximation. @@ -227,12 +226,12 @@ package System.Stack_Usage is -- procedure Initialize_Analyzer - (Analyzer : in out Stack_Analyzer; - Task_Name : String; - Stack_Size : Natural; - Stack_Base : System.Address; - Pattern_Size : Natural; - Pattern : Interfaces.Unsigned_32 := 16#DEAD_BEEF#); + (Analyzer : in out Stack_Analyzer; + Task_Name : String; + Stack_Size : Natural; + Stack_Base : System.Address; + Pattern_Size : Natural; + Pattern : Interfaces.Unsigned_32 := 16#DEAD_BEEF#); -- Should be called before any use of a Stack_Analyzer, to initialize it. -- Max_Pattern_Size is the size of the pattern zone, might be smaller than -- the full stack size Stack_Size in order to take into account e.g. the @@ -244,22 +243,16 @@ package System.Stack_Usage is -- When this flag is true, then stack analysis is enabled procedure Compute_Result (Analyzer : in out Stack_Analyzer); - -- Read the pattern zone and deduce the stack usage. It should be called - -- from the same frame as Fill_Stack. If Analyzer.Probe is not null, an - -- array of Unsigned_32 with Analyzer.Probe elements is allocated on - -- Compute_Result's stack frame. Probe can be used to detect the error: - -- "instrumentation threshold at reading". See above. After the call + -- Read the pattern zone and deduce the stack usage. After the call -- to this procedure, the memory will look like: -- -- Stack growing -- -----------------------------------------------------------------------> - -- |<---------------------->|<-------------->|<--------->|<--------->| - -- | Stack frames | Array of | used | Memory | - -- | to Compute_Result | Analyzer.Probe | during | filled | - -- | | elements | the | with | - -- | | | execution | pattern | - -- | | | - -- |<----------------------------------------------------> | + -- |<---------------------->|<-------------------->|<--------------->| + -- | Stack frame | Used during the | Memory filled | + -- | to Compute_Result | execution | with pattern | + -- | | | | + -- |<--------------------------------------------->| | -- Stack used ^ -- Pattern_Limit @@ -277,8 +270,8 @@ package System.Stack_Usage is private - package Unsigned_32_Addr is - new System.Address_To_Access_Conversions (Interfaces.Unsigned_32); + package Unsigned_32_Addr is new + System.Address_To_Access_Conversions (Interfaces.Unsigned_32); subtype Pattern_Type is Interfaces.Unsigned_32; Bytes_Per_Pattern : constant := Pattern_Type'Object_Size / Storage_Unit; @@ -320,7 +313,7 @@ private Environment_Task_Analyzer : Stack_Analyzer; - Compute_Environment_Task : Boolean; + Compute_Environment_Task : Boolean; type Result_Array_Ptr is access all Result_Array_Type; @@ -332,8 +325,7 @@ private -- Id of the next stack analyzer function Stack_Size - (SP_Low : Stack_Address; - SP_High : Stack_Address) return Natural; + (SP_Low : Stack_Address; SP_High : Stack_Address) return Natural; pragma Inline (Stack_Size); -- Return the size of a portion of stack delimited by SP_High and SP_Low -- (), i.e. the difference between SP_High and SP_Low. The storage element diff --git a/gcc/ada/libgnat/s-stopoo.ads b/gcc/ada/libgnat/s-stopoo.ads index e5153dc00b1d..015bd3ed0bd4 100644 --- a/gcc/ada/libgnat/s-stopoo.ads +++ b/gcc/ada/libgnat/s-stopoo.ads @@ -40,8 +40,9 @@ package System.Storage_Pools with Pure is type Root_Storage_Pool is abstract - new Ada.Finalization.Limited_Controlled with private; - pragma Preelaborable_Initialization (Root_Storage_Pool); + new Ada.Finalization.Limited_Controlled with private + with + Preelaborable_Initialization; procedure Allocate (Pool : in out Root_Storage_Pool; diff --git a/gcc/ada/libgnat/s-stposu.ads b/gcc/ada/libgnat/s-stposu.ads index fda350126d84..97aba7658580 100644 --- a/gcc/ada/libgnat/s-stposu.ads +++ b/gcc/ada/libgnat/s-stposu.ads @@ -41,15 +41,17 @@ package System.Storage_Pools.Subpools is pragma Preelaborate; type Root_Storage_Pool_With_Subpools is abstract - new Root_Storage_Pool with private; - pragma Preelaborable_Initialization (Root_Storage_Pool_With_Subpools); + new Root_Storage_Pool with private + with + Preelaborable_Initialization; -- The base for all implementations of Storage_Pool_With_Subpools. This -- type is Limited_Controlled by derivation. To use subpools, an access -- type must be associated with an implementation descending from type -- Root_Storage_Pool_With_Subpools. - type Root_Subpool is abstract tagged limited private; - pragma Preelaborable_Initialization (Root_Subpool); + type Root_Subpool is abstract tagged limited private + with + Preelaborable_Initialization; -- The base for all implementations of Subpool. Objects of this type are -- managed by the pool_with_subpools. diff --git a/gcc/ada/libgnat/system-aix.ads b/gcc/ada/libgnat/system-aix.ads index 5129fbda8d8c..b8e9adb07fb7 100644 --- a/gcc/ada/libgnat/system-aix.ads +++ b/gcc/ada/libgnat/system-aix.ads @@ -64,8 +64,8 @@ package System is -- Storage-related Declarations - type Address is private; - pragma Preelaborable_Initialization (Address); + type Address is private + with Preelaborable_Initialization; Null_Address : constant Address; Storage_Unit : constant := 8; diff --git a/gcc/ada/libgnat/system-darwin-arm.ads b/gcc/ada/libgnat/system-darwin-arm.ads index f4a14279a51e..a5e6a425758d 100644 --- a/gcc/ada/libgnat/system-darwin-arm.ads +++ b/gcc/ada/libgnat/system-darwin-arm.ads @@ -64,8 +64,8 @@ package System is -- Storage-related Declarations - type Address is private; - pragma Preelaborable_Initialization (Address); + type Address is private + with Preelaborable_Initialization; Null_Address : constant Address; Storage_Unit : constant := 8; diff --git a/gcc/ada/libgnat/system-darwin-ppc.ads b/gcc/ada/libgnat/system-darwin-ppc.ads index 9c2393b8d3a8..f1421c4e86f2 100644 --- a/gcc/ada/libgnat/system-darwin-ppc.ads +++ b/gcc/ada/libgnat/system-darwin-ppc.ads @@ -64,8 +64,8 @@ package System is -- Storage-related Declarations - type Address is private; - pragma Preelaborable_Initialization (Address); + type Address is private + with Preelaborable_Initialization; Null_Address : constant Address; Storage_Unit : constant := 8; diff --git a/gcc/ada/libgnat/system-darwin-x86.ads b/gcc/ada/libgnat/system-darwin-x86.ads index c6bcffc7b5a8..9c142760dba1 100644 --- a/gcc/ada/libgnat/system-darwin-x86.ads +++ b/gcc/ada/libgnat/system-darwin-x86.ads @@ -64,8 +64,8 @@ package System is -- Storage-related Declarations - type Address is private; - pragma Preelaborable_Initialization (Address); + type Address is private + with Preelaborable_Initialization; Null_Address : constant Address; Storage_Unit : constant := 8; diff --git a/gcc/ada/libgnat/system-djgpp.ads b/gcc/ada/libgnat/system-djgpp.ads index 9241e0c96fa0..18ed31bbd420 100644 --- a/gcc/ada/libgnat/system-djgpp.ads +++ b/gcc/ada/libgnat/system-djgpp.ads @@ -64,8 +64,8 @@ package System is -- Storage-related Declarations - type Address is private; - pragma Preelaborable_Initialization (Address); + type Address is private + with Preelaborable_Initialization; Null_Address : constant Address; Storage_Unit : constant := 8; diff --git a/gcc/ada/libgnat/system-dragonfly-x86_64.ads b/gcc/ada/libgnat/system-dragonfly-x86_64.ads index 0222746b2c63..5496518df87c 100644 --- a/gcc/ada/libgnat/system-dragonfly-x86_64.ads +++ b/gcc/ada/libgnat/system-dragonfly-x86_64.ads @@ -64,8 +64,8 @@ package System is -- Storage-related Declarations - type Address is private; - pragma Preelaborable_Initialization (Address); + type Address is private + with Preelaborable_Initialization; Null_Address : constant Address; Storage_Unit : constant := 8; diff --git a/gcc/ada/libgnat/system-freebsd.ads b/gcc/ada/libgnat/system-freebsd.ads index 6b20133d4e9e..3d3ad8a22382 100644 --- a/gcc/ada/libgnat/system-freebsd.ads +++ b/gcc/ada/libgnat/system-freebsd.ads @@ -64,8 +64,8 @@ package System is -- Storage-related Declarations - type Address is private; - pragma Preelaborable_Initialization (Address); + type Address is private + with Preelaborable_Initialization; Null_Address : constant Address; Storage_Unit : constant := 8; diff --git a/gcc/ada/libgnat/system-gnu.ads b/gcc/ada/libgnat/system-gnu.ads index 5049ab88856e..ff6afc64701d 100644 --- a/gcc/ada/libgnat/system-gnu.ads +++ b/gcc/ada/libgnat/system-gnu.ads @@ -64,8 +64,8 @@ package System is -- Storage-related Declarations - type Address is private; - pragma Preelaborable_Initialization (Address); + type Address is private + with Preelaborable_Initialization; Null_Address : constant Address; Storage_Unit : constant := 8; diff --git a/gcc/ada/libgnat/system-hpux-ia64.ads b/gcc/ada/libgnat/system-hpux-ia64.ads index 0279aba44bec..f7dfa0ddbf62 100644 --- a/gcc/ada/libgnat/system-hpux-ia64.ads +++ b/gcc/ada/libgnat/system-hpux-ia64.ads @@ -64,8 +64,8 @@ package System is -- Storage-related Declarations - type Address is private; - pragma Preelaborable_Initialization (Address); + type Address is private + with Preelaborable_Initialization; Null_Address : constant Address; Storage_Unit : constant := 8; diff --git a/gcc/ada/libgnat/system-hpux.ads b/gcc/ada/libgnat/system-hpux.ads index 02ba0dcf46ef..d33fa2faab85 100644 --- a/gcc/ada/libgnat/system-hpux.ads +++ b/gcc/ada/libgnat/system-hpux.ads @@ -64,8 +64,8 @@ package System is -- Storage-related Declarations - type Address is private; - pragma Preelaborable_Initialization (Address); + type Address is private + with Preelaborable_Initialization; Null_Address : constant Address; Storage_Unit : constant := 8; diff --git a/gcc/ada/libgnat/system-linux-alpha.ads b/gcc/ada/libgnat/system-linux-alpha.ads index 8bd0567b27c7..3b5f1c741d7d 100644 --- a/gcc/ada/libgnat/system-linux-alpha.ads +++ b/gcc/ada/libgnat/system-linux-alpha.ads @@ -64,8 +64,8 @@ package System is -- Storage-related Declarations - type Address is private; - pragma Preelaborable_Initialization (Address); + type Address is private + with Preelaborable_Initialization; Null_Address : constant Address; Storage_Unit : constant := 8; diff --git a/gcc/ada/libgnat/system-linux-arm.ads b/gcc/ada/libgnat/system-linux-arm.ads index 68d3bdebcb00..c8fadfbef8eb 100644 --- a/gcc/ada/libgnat/system-linux-arm.ads +++ b/gcc/ada/libgnat/system-linux-arm.ads @@ -64,8 +64,8 @@ package System is -- Storage-related Declarations - type Address is private; - pragma Preelaborable_Initialization (Address); + type Address is private + with Preelaborable_Initialization; Null_Address : constant Address; Storage_Unit : constant := 8; diff --git a/gcc/ada/libgnat/system-linux-hppa.ads b/gcc/ada/libgnat/system-linux-hppa.ads index 49bf98544a42..edabc481f418 100644 --- a/gcc/ada/libgnat/system-linux-hppa.ads +++ b/gcc/ada/libgnat/system-linux-hppa.ads @@ -64,8 +64,8 @@ package System is -- Storage-related Declarations - type Address is private; - pragma Preelaborable_Initialization (Address); + type Address is private + with Preelaborable_Initialization; Null_Address : constant Address; Storage_Unit : constant := 8; diff --git a/gcc/ada/libgnat/system-linux-ia64.ads b/gcc/ada/libgnat/system-linux-ia64.ads index 5fccde5d521a..eba85790784f 100644 --- a/gcc/ada/libgnat/system-linux-ia64.ads +++ b/gcc/ada/libgnat/system-linux-ia64.ads @@ -64,8 +64,8 @@ package System is -- Storage-related Declarations - type Address is private; - pragma Preelaborable_Initialization (Address); + type Address is private + with Preelaborable_Initialization; Null_Address : constant Address; Storage_Unit : constant := 8; diff --git a/gcc/ada/libgnat/system-linux-loongarch.ads b/gcc/ada/libgnat/system-linux-loongarch.ads index 683b7a441558..32d58e90b5ef 100644 --- a/gcc/ada/libgnat/system-linux-loongarch.ads +++ b/gcc/ada/libgnat/system-linux-loongarch.ads @@ -64,8 +64,8 @@ package System is -- Storage-related Declarations - type Address is private; - pragma Preelaborable_Initialization (Address); + type Address is private + with Preelaborable_Initialization; Null_Address : constant Address; Storage_Unit : constant := 8; diff --git a/gcc/ada/libgnat/system-linux-m68k.ads b/gcc/ada/libgnat/system-linux-m68k.ads index caa8359dea0f..82c1d0741e7a 100644 --- a/gcc/ada/libgnat/system-linux-m68k.ads +++ b/gcc/ada/libgnat/system-linux-m68k.ads @@ -64,8 +64,8 @@ package System is -- Storage-related Declarations - type Address is private; - pragma Preelaborable_Initialization (Address); + type Address is private + with Preelaborable_Initialization; Null_Address : constant Address; Storage_Unit : constant := 8; diff --git a/gcc/ada/libgnat/system-linux-mips.ads b/gcc/ada/libgnat/system-linux-mips.ads index 729ffdd4f9f3..abb76e370296 100644 --- a/gcc/ada/libgnat/system-linux-mips.ads +++ b/gcc/ada/libgnat/system-linux-mips.ads @@ -64,8 +64,8 @@ package System is -- Storage-related Declarations - type Address is private; - pragma Preelaborable_Initialization (Address); + type Address is private + with Preelaborable_Initialization; Null_Address : constant Address; Storage_Unit : constant := 8; diff --git a/gcc/ada/libgnat/system-linux-ppc.ads b/gcc/ada/libgnat/system-linux-ppc.ads index 5b0c2dcd39c3..9f3c57efb309 100644 --- a/gcc/ada/libgnat/system-linux-ppc.ads +++ b/gcc/ada/libgnat/system-linux-ppc.ads @@ -64,8 +64,8 @@ package System is -- Storage-related Declarations - type Address is private; - pragma Preelaborable_Initialization (Address); + type Address is private + with Preelaborable_Initialization; Null_Address : constant Address; Storage_Unit : constant := 8; diff --git a/gcc/ada/libgnat/system-linux-riscv.ads b/gcc/ada/libgnat/system-linux-riscv.ads index b7aeb6bd7bef..0b917cfbed16 100644 --- a/gcc/ada/libgnat/system-linux-riscv.ads +++ b/gcc/ada/libgnat/system-linux-riscv.ads @@ -64,8 +64,8 @@ package System is -- Storage-related Declarations - type Address is private; - pragma Preelaborable_Initialization (Address); + type Address is private + with Preelaborable_Initialization; Null_Address : constant Address; Storage_Unit : constant := 8; diff --git a/gcc/ada/libgnat/system-linux-s390.ads b/gcc/ada/libgnat/system-linux-s390.ads index 6d3cbc394dd5..bbba48f90c6b 100644 --- a/gcc/ada/libgnat/system-linux-s390.ads +++ b/gcc/ada/libgnat/system-linux-s390.ads @@ -64,8 +64,8 @@ package System is -- Storage-related Declarations - type Address is private; - pragma Preelaborable_Initialization (Address); + type Address is private + with Preelaborable_Initialization; Null_Address : constant Address; Storage_Unit : constant := 8; diff --git a/gcc/ada/libgnat/system-linux-sh4.ads b/gcc/ada/libgnat/system-linux-sh4.ads index ccbbc7490b4c..85aade09dfa6 100644 --- a/gcc/ada/libgnat/system-linux-sh4.ads +++ b/gcc/ada/libgnat/system-linux-sh4.ads @@ -64,8 +64,8 @@ package System is -- Storage-related Declarations - type Address is private; - pragma Preelaborable_Initialization (Address); + type Address is private + with Preelaborable_Initialization; Null_Address : constant Address; Storage_Unit : constant := 8; diff --git a/gcc/ada/libgnat/system-linux-sparc.ads b/gcc/ada/libgnat/system-linux-sparc.ads index 6f9f1a045064..159e0c891d01 100644 --- a/gcc/ada/libgnat/system-linux-sparc.ads +++ b/gcc/ada/libgnat/system-linux-sparc.ads @@ -64,8 +64,8 @@ package System is -- Storage-related Declarations - type Address is private; - pragma Preelaborable_Initialization (Address); + type Address is private + with Preelaborable_Initialization; Null_Address : constant Address; Storage_Unit : constant := 8; diff --git a/gcc/ada/libgnat/system-linux-x86.ads b/gcc/ada/libgnat/system-linux-x86.ads index 325783ceccc5..75bcc0854c84 100644 --- a/gcc/ada/libgnat/system-linux-x86.ads +++ b/gcc/ada/libgnat/system-linux-x86.ads @@ -64,8 +64,8 @@ package System is -- Storage-related Declarations - type Address is private; - pragma Preelaborable_Initialization (Address); + type Address is private + with Preelaborable_Initialization; Null_Address : constant Address; Storage_Unit : constant := 8; diff --git a/gcc/ada/libgnat/system-lynxos178-ppc.ads b/gcc/ada/libgnat/system-lynxos178-ppc.ads index ae1762173c8a..061a17f1f659 100644 --- a/gcc/ada/libgnat/system-lynxos178-ppc.ads +++ b/gcc/ada/libgnat/system-lynxos178-ppc.ads @@ -64,8 +64,8 @@ package System is -- Storage-related Declarations - type Address is private; - pragma Preelaborable_Initialization (Address); + type Address is private + with Preelaborable_Initialization; Null_Address : constant Address; Storage_Unit : constant := 8; diff --git a/gcc/ada/libgnat/system-lynxos178-x86.ads b/gcc/ada/libgnat/system-lynxos178-x86.ads index 8549120f75e4..13a310a71aa8 100644 --- a/gcc/ada/libgnat/system-lynxos178-x86.ads +++ b/gcc/ada/libgnat/system-lynxos178-x86.ads @@ -64,8 +64,8 @@ package System is -- Storage-related Declarations - type Address is private; - pragma Preelaborable_Initialization (Address); + type Address is private + with Preelaborable_Initialization; Null_Address : constant Address; Storage_Unit : constant := 8; diff --git a/gcc/ada/libgnat/system-mingw.ads b/gcc/ada/libgnat/system-mingw.ads index a0633b3f4d62..d0df352e4809 100644 --- a/gcc/ada/libgnat/system-mingw.ads +++ b/gcc/ada/libgnat/system-mingw.ads @@ -64,8 +64,8 @@ package System is -- Storage-related Declarations - type Address is private; - pragma Preelaborable_Initialization (Address); + type Address is private + with Preelaborable_Initialization; Null_Address : constant Address; Storage_Unit : constant := 8; diff --git a/gcc/ada/libgnat/system-qnx-arm.ads b/gcc/ada/libgnat/system-qnx-arm.ads index a271612b88bb..2513a1d1340a 100644 --- a/gcc/ada/libgnat/system-qnx-arm.ads +++ b/gcc/ada/libgnat/system-qnx-arm.ads @@ -64,8 +64,8 @@ package System is -- Storage-related Declarations - type Address is private; - pragma Preelaborable_Initialization (Address); + type Address is private + with Preelaborable_Initialization; Null_Address : constant Address; Storage_Unit : constant := 8; diff --git a/gcc/ada/libgnat/system-rtems.ads b/gcc/ada/libgnat/system-rtems.ads index 99e14febc5b0..48b7beb84f2f 100644 --- a/gcc/ada/libgnat/system-rtems.ads +++ b/gcc/ada/libgnat/system-rtems.ads @@ -68,8 +68,8 @@ package System is -- Storage-related Declarations - type Address is private; - pragma Preelaborable_Initialization (Address); + type Address is private + with Preelaborable_Initialization; Null_Address : constant Address; Storage_Unit : constant := Standard'Storage_Unit; diff --git a/gcc/ada/libgnat/system-solaris-sparc.ads b/gcc/ada/libgnat/system-solaris-sparc.ads index 9599bc009fd3..0d8ae8750601 100644 --- a/gcc/ada/libgnat/system-solaris-sparc.ads +++ b/gcc/ada/libgnat/system-solaris-sparc.ads @@ -64,8 +64,8 @@ package System is -- Storage-related Declarations - type Address is private; - pragma Preelaborable_Initialization (Address); + type Address is private + with Preelaborable_Initialization; Null_Address : constant Address; Storage_Unit : constant := 8; diff --git a/gcc/ada/libgnat/system-solaris-x86.ads b/gcc/ada/libgnat/system-solaris-x86.ads index 4b331c6f8164..c60939272b41 100644 --- a/gcc/ada/libgnat/system-solaris-x86.ads +++ b/gcc/ada/libgnat/system-solaris-x86.ads @@ -64,8 +64,8 @@ package System is -- Storage-related Declarations - type Address is private; - pragma Preelaborable_Initialization (Address); + type Address is private + with Preelaborable_Initialization; Null_Address : constant Address; Storage_Unit : constant := 8; diff --git a/gcc/ada/libgnat/system-vxworks-ppc-kernel.ads b/gcc/ada/libgnat/system-vxworks-ppc-kernel.ads index f95db4a41f88..2f9c0b48af87 100644 --- a/gcc/ada/libgnat/system-vxworks-ppc-kernel.ads +++ b/gcc/ada/libgnat/system-vxworks-ppc-kernel.ads @@ -64,8 +64,8 @@ package System is -- Storage-related Declarations - type Address is private; - pragma Preelaborable_Initialization (Address); + type Address is private + with Preelaborable_Initialization; Null_Address : constant Address; Storage_Unit : constant := 8; diff --git a/gcc/ada/libgnat/system-vxworks-ppc-rtp-smp.ads b/gcc/ada/libgnat/system-vxworks-ppc-rtp-smp.ads index 6890caeb9fea..e266b4b6fa9e 100644 --- a/gcc/ada/libgnat/system-vxworks-ppc-rtp-smp.ads +++ b/gcc/ada/libgnat/system-vxworks-ppc-rtp-smp.ads @@ -66,8 +66,8 @@ package System is -- Storage-related Declarations - type Address is private; - pragma Preelaborable_Initialization (Address); + type Address is private + with Preelaborable_Initialization; Null_Address : constant Address; Storage_Unit : constant := 8; diff --git a/gcc/ada/libgnat/system-vxworks-ppc-rtp.ads b/gcc/ada/libgnat/system-vxworks-ppc-rtp.ads index a4607df5b248..a205140bf11b 100644 --- a/gcc/ada/libgnat/system-vxworks-ppc-rtp.ads +++ b/gcc/ada/libgnat/system-vxworks-ppc-rtp.ads @@ -66,8 +66,8 @@ package System is -- Storage-related Declarations - type Address is private; - pragma Preelaborable_Initialization (Address); + type Address is private + with Preelaborable_Initialization; Null_Address : constant Address; Storage_Unit : constant := 8; diff --git a/gcc/ada/libgnat/system-vxworks7-aarch64-rtp-smp.ads b/gcc/ada/libgnat/system-vxworks7-aarch64-rtp-smp.ads index a2aabccf748c..7b01f8527ec9 100644 --- a/gcc/ada/libgnat/system-vxworks7-aarch64-rtp-smp.ads +++ b/gcc/ada/libgnat/system-vxworks7-aarch64-rtp-smp.ads @@ -66,8 +66,8 @@ package System is -- Storage-related Declarations - type Address is private; - pragma Preelaborable_Initialization (Address); + type Address is private + with Preelaborable_Initialization; Null_Address : constant Address; Storage_Unit : constant := 8; @@ -120,9 +120,6 @@ package System is private - pragma Linker_Options ("--specs=vxworks7-rtp-base-link.spec"); - -- Define the symbol wrs_rtp_base - type Address is mod Memory_Size; for Address'Size use Standard'Address_Size; diff --git a/gcc/ada/libgnat/system-vxworks7-aarch64.ads b/gcc/ada/libgnat/system-vxworks7-aarch64.ads index 7a94e40e02c7..12db85ff63a9 100644 --- a/gcc/ada/libgnat/system-vxworks7-aarch64.ads +++ b/gcc/ada/libgnat/system-vxworks7-aarch64.ads @@ -66,8 +66,8 @@ package System is -- Storage-related Declarations - type Address is private; - pragma Preelaborable_Initialization (Address); + type Address is private + with Preelaborable_Initialization; Null_Address : constant Address; Storage_Unit : constant := 8; diff --git a/gcc/ada/libgnat/system-vxworks7-arm-rtp-smp.ads b/gcc/ada/libgnat/system-vxworks7-arm-rtp-smp.ads index b7581c25d608..9b5c9b5712e2 100644 --- a/gcc/ada/libgnat/system-vxworks7-arm-rtp-smp.ads +++ b/gcc/ada/libgnat/system-vxworks7-arm-rtp-smp.ads @@ -66,8 +66,8 @@ package System is -- Storage-related Declarations - type Address is private; - pragma Preelaborable_Initialization (Address); + type Address is private + with Preelaborable_Initialization; Null_Address : constant Address; Storage_Unit : constant := 8; diff --git a/gcc/ada/libgnat/system-vxworks7-arm.ads b/gcc/ada/libgnat/system-vxworks7-arm.ads index 875f4be421b8..0b7b68c72f0b 100644 --- a/gcc/ada/libgnat/system-vxworks7-arm.ads +++ b/gcc/ada/libgnat/system-vxworks7-arm.ads @@ -64,8 +64,8 @@ package System is -- Storage-related Declarations - type Address is private; - pragma Preelaborable_Initialization (Address); + type Address is private + with Preelaborable_Initialization; Null_Address : constant Address; Storage_Unit : constant := 8; diff --git a/gcc/ada/libgnat/system-vxworks7-ppc-kernel.ads b/gcc/ada/libgnat/system-vxworks7-ppc-kernel.ads index 356c1c568220..a89e71cc54e3 100644 --- a/gcc/ada/libgnat/system-vxworks7-ppc-kernel.ads +++ b/gcc/ada/libgnat/system-vxworks7-ppc-kernel.ads @@ -64,8 +64,8 @@ package System is -- Storage-related Declarations - type Address is private; - pragma Preelaborable_Initialization (Address); + type Address is private + with Preelaborable_Initialization; Null_Address : constant Address; Storage_Unit : constant := 8; diff --git a/gcc/ada/libgnat/system-vxworks7-ppc-rtp-smp.ads b/gcc/ada/libgnat/system-vxworks7-ppc-rtp-smp.ads index 7a5cce0061ad..1958e1021f6e 100644 --- a/gcc/ada/libgnat/system-vxworks7-ppc-rtp-smp.ads +++ b/gcc/ada/libgnat/system-vxworks7-ppc-rtp-smp.ads @@ -66,8 +66,8 @@ package System is -- Storage-related Declarations - type Address is private; - pragma Preelaborable_Initialization (Address); + type Address is private + with Preelaborable_Initialization; Null_Address : constant Address; Storage_Unit : constant := 8; @@ -120,9 +120,6 @@ package System is private - pragma Linker_Options ("--specs=vxworks7-rtp-base-link.spec"); - -- Define the symbol wrs_rtp_base - type Address is mod Memory_Size; for Address'Size use Standard'Address_Size; diff --git a/gcc/ada/libgnat/system-vxworks7-ppc64-kernel.ads b/gcc/ada/libgnat/system-vxworks7-ppc64-kernel.ads index 6a12d2dac8ff..fb15358aedcc 100644 --- a/gcc/ada/libgnat/system-vxworks7-ppc64-kernel.ads +++ b/gcc/ada/libgnat/system-vxworks7-ppc64-kernel.ads @@ -66,8 +66,8 @@ package System is -- Storage-related Declarations - type Address is private; - pragma Preelaborable_Initialization (Address); + type Address is private + with Preelaborable_Initialization; Null_Address : constant Address; Storage_Unit : constant := 8; diff --git a/gcc/ada/libgnat/system-vxworks7-ppc64-rtp-smp.ads b/gcc/ada/libgnat/system-vxworks7-ppc64-rtp-smp.ads index 7670c1b79232..f8c69d6f8855 100644 --- a/gcc/ada/libgnat/system-vxworks7-ppc64-rtp-smp.ads +++ b/gcc/ada/libgnat/system-vxworks7-ppc64-rtp-smp.ads @@ -66,8 +66,8 @@ package System is -- Storage-related Declarations - type Address is private; - pragma Preelaborable_Initialization (Address); + type Address is private + with Preelaborable_Initialization; Null_Address : constant Address; Storage_Unit : constant := 8; @@ -120,9 +120,6 @@ package System is private - pragma Linker_Options ("--specs=vxworks7-ppc64-rtp-base-link.spec"); - -- Define the symbol wrs_rtp_base - type Address is mod Memory_Size; for Address'Size use Standard'Address_Size; diff --git a/gcc/ada/libgnat/system-vxworks7-x86-kernel.ads b/gcc/ada/libgnat/system-vxworks7-x86-kernel.ads index 9a11ed6b6a37..7a9baa920a2a 100644 --- a/gcc/ada/libgnat/system-vxworks7-x86-kernel.ads +++ b/gcc/ada/libgnat/system-vxworks7-x86-kernel.ads @@ -64,8 +64,8 @@ package System is -- Storage-related Declarations - type Address is private; - pragma Preelaborable_Initialization (Address); + type Address is private + with Preelaborable_Initialization; Null_Address : constant Address; Storage_Unit : constant := 8; diff --git a/gcc/ada/libgnat/system-vxworks7-x86-rtp-smp.ads b/gcc/ada/libgnat/system-vxworks7-x86-rtp-smp.ads index 771c2aed4e2c..de3f68d3ebe9 100644 --- a/gcc/ada/libgnat/system-vxworks7-x86-rtp-smp.ads +++ b/gcc/ada/libgnat/system-vxworks7-x86-rtp-smp.ads @@ -64,8 +64,8 @@ package System is -- Storage-related Declarations - type Address is private; - pragma Preelaborable_Initialization (Address); + type Address is private + with Preelaborable_Initialization; Null_Address : constant Address; Storage_Unit : constant := 8; @@ -118,9 +118,6 @@ package System is private - pragma Linker_Options ("--specs=vxworks7-x86-rtp-base-link.spec"); - -- Define the symbol wrs_rtp_base - type Address is mod Memory_Size; for Address'Size use Standard'Address_Size; diff --git a/gcc/ada/libgnat/system-vxworks7-x86_64-kernel.ads b/gcc/ada/libgnat/system-vxworks7-x86_64-kernel.ads index 6689f2dedf54..6567a26c8391 100644 --- a/gcc/ada/libgnat/system-vxworks7-x86_64-kernel.ads +++ b/gcc/ada/libgnat/system-vxworks7-x86_64-kernel.ads @@ -64,8 +64,8 @@ package System is -- Storage-related Declarations - type Address is private; - pragma Preelaborable_Initialization (Address); + type Address is private + with Preelaborable_Initialization; Null_Address : constant Address; Storage_Unit : constant := 8; diff --git a/gcc/ada/libgnat/system-vxworks7-x86_64-rtp-smp.ads b/gcc/ada/libgnat/system-vxworks7-x86_64-rtp-smp.ads index a34aba4974a2..539e6bdf3017 100644 --- a/gcc/ada/libgnat/system-vxworks7-x86_64-rtp-smp.ads +++ b/gcc/ada/libgnat/system-vxworks7-x86_64-rtp-smp.ads @@ -64,8 +64,8 @@ package System is -- Storage-related Declarations - type Address is private; - pragma Preelaborable_Initialization (Address); + type Address is private + with Preelaborable_Initialization; Null_Address : constant Address; Storage_Unit : constant := 8; @@ -118,9 +118,6 @@ package System is private - pragma Linker_Options ("--specs=vxworks7-x86_64-rtp-base-link.spec"); - -- Define the symbol wrs_rtp_base - type Address is mod Memory_Size; for Address'Size use Standard'Address_Size; diff --git a/gcc/ada/opt.ads b/gcc/ada/opt.ads index 73f9fe8e8f71..0fd5475e1279 100644 --- a/gcc/ada/opt.ads +++ b/gcc/ada/opt.ads @@ -338,7 +338,7 @@ package Opt is -- True if echoed commands to be written to stdout instead of stderr Comment_Deleted_Lines : Boolean := False; - -- GNATPREP + -- GNAT, GNATPREP -- True if source lines removed by the preprocessor should be commented -- in the output file. @@ -509,6 +509,11 @@ package Opt is -- GNATBIND -- Set to True to output chosen elaboration order + Empty_Comment_Deleted_Lines : Boolean := False; + -- GNAT, GNATPREP + -- True if source lines removed by the preprocessor are to be replaced + -- by empty comment lines ("--!" and no other text) in the output file. + Enable_128bit_Types : Boolean := False; -- GNAT -- Set to True to enable the support for 128-bit types in the compiler. @@ -755,6 +760,24 @@ package Opt is -- reflect the starting node of the outermost ignored Ghost region. If a -- nested ignored Ghost region is entered, the value must remain -- unchanged. + + Ghost_Mode_Assertion_Level : Entity_Id := Empty; + -- The Assertion_Level that is applied to the current ghost region. + -- It is either: + -- * Empty - when there is no ghost region + -- * Assertion_Level - if the ghost aspect/pragama had an + -- Assertion_Levle associated with it. + -- * Standard_Default_Level - if the ghost aspect/pragama did not have + -- an Assertion_Level associated to it. + + Current_Region : Node_Id := Empty; + -- Latest ghost region + + Is_Inside_Statement_Or_Pragma : Boolean := False; + -- A flag to tag whether we are currently in a region that originated + -- from a Statement or a pragma. Inside those regions the ghost policy + -- in effect for implicitly defined entities is not the policy for Ghost + -- but instead the policy for the region (SPARK RM 6.9 (3)). end record; Ghost_Config : Ghost_Config_Type; @@ -823,9 +846,9 @@ package Opt is Implicit_Packing : Boolean := False; -- GNAT - -- If set True, then a Size attribute clause on an array is allowed to - -- cause implicit packing instead of generating an error message. Set by - -- use of pragma Implicit_Packing. + -- If set True, then a Size attribute clause on an array or record is + -- allowed to cause implicit packing instead of generating an error + -- message. Set by use of pragma Implicit_Packing. Init_Or_Norm_Scalars : Boolean := False; -- GNAT, GNATBIND diff --git a/gcc/ada/par-ch10.adb b/gcc/ada/par-ch10.adb index 37121dd5028b..540339738130 100644 --- a/gcc/ada/par-ch10.adb +++ b/gcc/ada/par-ch10.adb @@ -925,7 +925,7 @@ package body Ch10 is -- then the compilation of the child unit itself is the -- place where such an "error" should be caught. - Set_Name (With_Node, P_Qualified_Simple_Name); + Set_Name (With_Node, P_Library_Unit_Name); if Name (With_Node) = Error then Remove (With_Node); end if; @@ -1038,7 +1038,7 @@ package body Ch10 is Scan; -- past SEPARATE; U_Left_Paren; - Set_Name (Subunit_Node, P_Qualified_Simple_Name); + Set_Name (Subunit_Node, P_Parent_Unit_Name); U_Right_Paren; Ignore (Tok_Semicolon); diff --git a/gcc/ada/par-ch12.adb b/gcc/ada/par-ch12.adb index 5fb6f8c98772..7bd449d0b72f 100644 --- a/gcc/ada/par-ch12.adb +++ b/gcc/ada/par-ch12.adb @@ -124,6 +124,8 @@ package body Ch12 is Check_Misspelling_Of (Tok_Renames); if Token = Tok_Renames then + Scan; -- past RENAMES + if Ren_Token = Tok_Package then Decl_Node := New_Node (N_Generic_Package_Renaming_Declaration, Gen_Sloc); @@ -137,10 +139,8 @@ package body Ch12 is (N_Generic_Function_Renaming_Declaration, Gen_Sloc); end if; - Scan; -- past RENAMES Set_Defining_Unit_Name (Decl_Node, Def_Unit); - Set_Name (Decl_Node, P_Name); - + Set_Name (Decl_Node, P_Generic_Unit_Name); P_Aspect_Specifications (Decl_Node, Semicolon => False); TF_Semicolon; return Decl_Node; @@ -944,7 +944,7 @@ package body Ch12 is Set_Interface_List (Def_Node, New_List); loop - Append (P_Qualified_Simple_Name, Interface_List (Def_Node)); + Append (P_Subtype_Name, Interface_List (Def_Node)); exit when Token /= Tok_And; Scan; -- past AND end loop; @@ -1285,7 +1285,7 @@ package body Ch12 is Set_Defining_Identifier (Def_Node, P_Defining_Identifier (C_Is)); T_Is; T_New; - Set_Name (Def_Node, P_Qualified_Simple_Name); + Set_Name (Def_Node, P_Generic_Unit_Name); if Token = Tok_Left_Paren then Save_Scan_State (Scan_State); -- at the left paren diff --git a/gcc/ada/par-ch3.adb b/gcc/ada/par-ch3.adb index a685812de604..56c1b894c0df 100644 --- a/gcc/ada/par-ch3.adb +++ b/gcc/ada/par-ch3.adb @@ -1092,7 +1092,7 @@ package body Ch3 is return Error; else - Type_Node := P_Qualified_Simple_Name_Resync; + Type_Node := P_Subtype_Name_Resync; -- Check for a subtype mark attribute. The only valid possibilities -- are 'CLASS and 'BASE. Anything else is a definite error. We may @@ -1704,7 +1704,7 @@ package body Ch3 is No_List; Decl_Node := New_Node (N_Exception_Renaming_Declaration, Ident_Sloc); - Set_Name (Decl_Node, P_Qualified_Simple_Name_Resync); + Set_Name (Decl_Node, P_Exception_Name); No_Constraint; else Decl_Node := New_Node (N_Exception_Declaration, Prev_Token_Ptr); @@ -2054,7 +2054,7 @@ package body Ch3 is Set_Interface_List (Typedef_Node, New_List); loop - Append (P_Qualified_Simple_Name, Interface_List (Typedef_Node)); + Append (P_Subtype_Name, Interface_List (Typedef_Node)); exit when Token /= Tok_And; Scan; -- past AND end loop; @@ -4177,7 +4177,7 @@ package body Ch3 is Set_Abstract_Present (Typedef_Node); Set_Interface_Present (Typedef_Node); - Set_Subtype_Indication (Typedef_Node, P_Qualified_Simple_Name); + Set_Subtype_Indication (Typedef_Node, P_Subtype_Name); Set_Record_Extension_Part (Typedef_Node, New_Node (N_Record_Definition, Token_Ptr)); @@ -4188,8 +4188,7 @@ package body Ch3 is Scan; -- past AND loop - Append (P_Qualified_Simple_Name, - Interface_List (Typedef_Node)); + Append (P_Subtype_Name, Interface_List (Typedef_Node)); exit when Token /= Tok_And; Scan; -- past AND end loop; diff --git a/gcc/ada/par-ch4.adb b/gcc/ada/par-ch4.adb index ebdc587f0e15..f8ae9970c88e 100644 --- a/gcc/ada/par-ch4.adb +++ b/gcc/ada/par-ch4.adb @@ -82,8 +82,6 @@ package body Ch4 is function P_Relation return Node_Id; function P_Term return Node_Id; function P_Declare_Expression return Node_Id; - function P_Reduction_Attribute_Reference (S : Node_Id) - return Node_Id; function P_Binary_Adding_Operator return Node_Kind; function P_Logical_Operator return Node_Kind; @@ -91,6 +89,9 @@ package body Ch4 is function P_Relational_Operator return Node_Kind; function P_Unary_Adding_Operator return Node_Kind; + function P_Simple_Name (Instance_OK : Boolean) return Node_Id; + function P_Simple_Name_Resync (Instance_OK : Boolean) return Node_Id; + procedure Bad_Range_Attribute (Loc : Source_Ptr); -- Called to place complaint about bad range attribute at the given -- source location. Terminates by raising Error_Resync. @@ -108,6 +109,10 @@ package body Ch4 is -- prefix. The current token is known to be an apostrophe and the -- following token is known to be RANGE. + function P_Reduction_Attribute_Reference (Pref : Node_Id) return Node_Id; + -- Scan a reduction attribute reference. The caller has scanned out the + -- prefix. The current token is known to be an identifier. + function P_Case_Expression return Node_Id; -- Scans out a case expression. Called with Token pointing to the CASE -- keyword, and returns pointing to the terminating right parent, @@ -152,9 +157,10 @@ package body Ch4 is -- NAME ::= -- DIRECT_NAME | EXPLICIT_DEREFERENCE -- | INDEXED_COMPONENT | SLICE - -- | SELECTED_COMPONENT | ATTRIBUTE + -- | SELECTED_COMPONENT | ATTRIBUTE_REFERENCE -- | TYPE_CONVERSION | FUNCTION_CALL -- | CHARACTER_LITERAL | TARGET_NAME + -- | STRUCTURAL_GENERIC_INSTANCE_NAME -- DIRECT_NAME ::= IDENTIFIER | OPERATOR_SYMBOL @@ -192,6 +198,8 @@ package body Ch4 is -- TARGET_NAME ::= @ (AI12-0125-3: abbreviation for LHS) + -- STRUCTURAL_GENERIC_INSTANCE_NAME ::= NAME GENERIC_ACTUAL_PART + -- Note: syntactically a procedure call looks just like a function call, -- so this routine is in practice used to scan out procedure calls as well. @@ -474,7 +482,11 @@ package body Ch4 is elsif Token = Tok_Identifier then Attr_Name := Token_Name; - if not Is_Attribute_Name (Attr_Name) then + -- Attribute Unsigned_Base_Range temporarily disabled + + if not Is_Attribute_Name (Attr_Name) + or else Attr_Name = Name_Unsigned_Base_Range + then if Apostrophe_Should_Be_Semicolon then Expr_Form := EF_Name; return Name_Node; @@ -683,6 +695,7 @@ package body Ch4 is -- If there is at least one occurrence of identifier => (but -- none of the other cases apply), then we have a call. + -- This case is handled by LP_State_Call. -- Test for Id => case @@ -902,8 +915,7 @@ package body Ch4 is -- have seen at least one named parameter already. Error_Msg_SC - ("positional parameter association " & - "not allowed after named one"); + ("positional parameter association not allowed after named one"); Error_Loc := Token_Ptr; @@ -929,79 +941,290 @@ package body Ch4 is end P_Name; + -- These functions parse a restricted form of Names which are either + -- designators or structural generic instance names, and are preceded, + -- or not, by a sequence of prefixes that are either direct names or + -- structural generic instance names. + + -- Error recovery: can raise Error_Resync + + function P_Exception_Name return Node_Id is + begin + return P_Simple_Name_Resync (Instance_OK => False); + end P_Exception_Name; + + function P_Label_Name return Node_Id is + begin + return P_Simple_Name_Resync (Instance_OK => False); + end P_Label_Name; + + function P_Loop_Name return Node_Id is + begin + return P_Simple_Name_Resync (Instance_OK => False); + end P_Loop_Name; + + function P_Subtype_Name_Resync return Node_Id is + begin + return P_Simple_Name_Resync (Instance_OK => False); + end P_Subtype_Name_Resync; + + -- Error recovery: cannot raise Error_Resync + + function P_Generic_Unit_Name return Node_Id is + begin + return P_Simple_Name (Instance_OK => False); + end P_Generic_Unit_Name; + + function P_Library_Unit_Name return Node_Id is + begin + return P_Simple_Name (Instance_OK => False); + end P_Library_Unit_Name; + + function P_Package_Name return Node_Id is + begin + return P_Simple_Name (Instance_OK => True); + end P_Package_Name; + + function P_Parent_Unit_Name return Node_Id is + begin + return P_Simple_Name (Instance_OK => False); + end P_Parent_Unit_Name; + + function P_Subtype_Name return Node_Id is + begin + return P_Simple_Name (Instance_OK => False); + end P_Subtype_Name; + -- This function parses a restricted form of Names which are either - -- designators, or designators preceded by a sequence of prefixes - -- that are direct names. + -- designators or structural generic instance names, and are preceded, + -- or not, by a sequence of prefixes that are either direct names or + -- structural generic instance names. + + -- If Instance_OK is False, the simple name cannot be a structural + -- generic instance name, preceded or not by prefixes (Instance_OK + -- has no effects on the accepted prefixes, if any). -- Error recovery: cannot raise Error_Resync - function P_Qualified_Simple_Name return Node_Id is + function P_Simple_Name (Instance_OK : Boolean) return Node_Id is begin - return P_Qualified_Simple_Name_Resync; + return P_Simple_Name_Resync (Instance_OK); exception when Error_Resync => return Error; - end P_Qualified_Simple_Name; + end P_Simple_Name; - -- This procedure differs from P_Qualified_Simple_Name only in that it - -- raises Error_Resync if any error is encountered. It only returns after - -- scanning a valid qualified simple name. + -- This procedure differs from P_Simple_Name only in that it raises + -- Error_Resync if any error is encountered. It only returns after + -- scanning a valid simple name. -- Error recovery: can raise Error_Resync - function P_Qualified_Simple_Name_Resync return Node_Id is - Designator_Node : Node_Id; - Prefix_Node : Node_Id; - Selector_Node : Node_Id; - Dot_Sloc : Source_Ptr := No_Location; + function P_Simple_Name_Resync (Instance_OK : Boolean) return Node_Id is + Arg_Node : Node_Id; + Ident_Node : Node_Id; + Name_Node : Node_Id; + Prefix_Node : Node_Id; + Scan_State_Id : Saved_Scan_State; + Scan_State_LP : Saved_Scan_State; + + Arg_List : List_Id := No_List; -- kill junk warning begin - -- Prefix_Node is set to the gathered prefix so far, Empty means that - -- no prefix has been scanned. This allows us to build up the result - -- in the required right recursive manner. + -- Case of not a designator - Prefix_Node := Empty; + if Token not in Token_Class_Desig then + Discard_Junk_Node (P_Identifier); -- to issue the error message + raise Error_Resync; + end if; - -- Loop through prefixes + Name_Node := Token_Node; - loop - Designator_Node := Token_Node; + Scan; -- past designator - if Token not in Token_Class_Desig then - Discard_Junk_Node (P_Identifier); -- to issue the error message - raise Error_Resync; + -- Loop scanning past name extensions. A label is used for control + -- transfer for this loop for ease of interfacing with the finite state + -- machine in the parenthesis scanning circuit, and also to allow for + -- passing in control to the appropriate point from the above code. - else - Scan; -- past designator - exit when Token /= Tok_Dot; - end if; + <> - -- Here at a dot, with token just before it in Designator_Node + case Token is + when Tok_Left_Paren => + Save_Scan_State (Scan_State_LP); -- at left paren + Scan; -- past left paren + Arg_List := New_List; + goto Scan_Name_Extension_Left_Paren; + + when Tok_Dot => + Scan; -- past dot + goto Scan_Name_Extension_Dot; + + when others => + return Name_Node; + end case; + + -- Case of name extended by dot (selection), dot is already skipped + -- and the scan state at the point of the dot is saved in Scan_State. + + <> + + if Token in Token_Class_Desig then + Prefix_Node := Name_Node; + Name_Node := New_Node (N_Selected_Component, Prev_Token_Ptr); + Set_Prefix (Name_Node, Prefix_Node); + Set_Selector_Name (Name_Node, Token_Node); + Scan; -- past selector + goto Scan_Name_Extension; + + -- Here if nothing legal after the dot + + else + Discard_Junk_Node (P_Identifier); -- to issue the error message + raise Error_Resync; + end if; + + -- Here for left parenthesis extending name (left paren skipped) + + <> + + -- We now have to scan through a list of items, terminated by a + -- right parenthesis. The scan is handled by a finite state + -- machine. The possibilities are: + + -- (expression, expression, ..) + + -- This is interpreted as an indexed component, i.e. as a + -- case of a name which can be extended in the normal manner. + -- This case is handled by LP_State_Expr. + + -- Note: if and case expressions (without an extra level of + -- parentheses) are permitted in this context). + + -- (..., identifier => expression , ...) + + -- If there is at least one occurrence of identifier => (but + -- none of the other cases apply), then we have a call. + -- This case is handled by LP_State_Call. + + -- Test for Id => case + + if Token in Tok_Identifier | Tok_Operator_Symbol | Tok_Others then + Save_Scan_State (Scan_State_Id); -- at Id + Scan; -- past Id + + -- Test for => (allow := as an error substitute) + + if Token in Tok_Arrow | Tok_Colon_Equal then + Restore_Scan_State (Scan_State_Id); -- to Id + goto LP_State_Call; - if No (Prefix_Node) then - Prefix_Node := Designator_Node; else - Selector_Node := New_Node (N_Selected_Component, Dot_Sloc); - Set_Prefix (Selector_Node, Prefix_Node); - Set_Selector_Name (Selector_Node, Designator_Node); - Prefix_Node := Selector_Node; + Restore_Scan_State (Scan_State_Id); -- to Id end if; + end if; - Dot_Sloc := Token_Ptr; - Scan; -- past dot - end loop; + -- Here we have an expression after all - -- Fall out of the loop having just scanned an identifier + <> + + if Token in Tok_Box | Tok_Right_Paren then + goto LP_State_Rewind; + end if; + + Append (P_Expression_Or_Range_Attribute_If_OK, Arg_List); + + if Token = Tok_Comma then + Scan; -- past comma + goto Scan_Name_Extension_Left_Paren; + + elsif Token = Tok_Right_Paren then + Scan; -- past right paren + + if not Instance_OK and then Token /= Tok_Dot then + goto LP_State_Rewind; + end if; + + Prefix_Node := Name_Node; + Name_Node := New_Node (N_Indexed_Component, Sloc (Prefix_Node)); + Set_Prefix (Name_Node, Prefix_Node); + Set_Expressions (Name_Node, Arg_List); + goto Scan_Name_Extension; - if No (Prefix_Node) then - return Designator_Node; else - Selector_Node := New_Node (N_Selected_Component, Dot_Sloc); - Set_Prefix (Selector_Node, Prefix_Node); - Set_Selector_Name (Selector_Node, Designator_Node); - return Selector_Node; + goto LP_State_Rewind; + end if; + + -- LP_State_Call corresponds to the situation in which at least one + -- instance of Id => Expression has been encountered, so we know that + -- we do not have a name, but rather a call. We enter it with the + -- scan pointer pointing to the next argument to scan, and Arg_List + -- containing the list of arguments scanned so far. + + <> + + -- Test for case of Id => Expression (named parameter) + + if Token in Tok_Identifier | Tok_Operator_Symbol | Tok_Others then + Save_Scan_State (Scan_State_Id); -- at Id + Ident_Node := Token_Node; + Scan; -- past Id + + -- Deal with => (allow := as incorrect substitute) + + if Token in Tok_Arrow | Tok_Colon_Equal then + Arg_Node := New_Node (N_Parameter_Association, Prev_Token_Ptr); + T_Arrow; + if Token in Tok_Box then + goto LP_State_Rewind; + end if; + Set_Selector_Name (Arg_Node, Ident_Node); + Set_Explicit_Actual_Parameter (Arg_Node, P_Expression); + Append (Arg_Node, Arg_List); + + -- If a comma follows, go back and scan next entry + + if Comma_Present then + goto LP_State_Call; + + -- Otherwise we have the end of a call + + else + T_Right_Paren; -- past right paren + + if not Instance_OK and then Token /= Tok_Dot then + goto LP_State_Rewind; + end if; + + Prefix_Node := Name_Node; + Name_Node := New_Node (N_Function_Call, Sloc (Prefix_Node)); + Set_Name (Name_Node, Prefix_Node); + Set_Parameter_Associations (Name_Node, Arg_List); + goto Scan_Name_Extension; + end if; + + -- Filter out tokens that may appear in constraints + + elsif Token in Tok_Vertical_Bar then + goto LP_State_Rewind; + + -- Not named parameter: Id started an expression after all + + else + Restore_Scan_State (Scan_State_Id); -- to Id + end if; end if; - end P_Qualified_Simple_Name_Resync; + + -- Here if entry did not start with Id => which means that it + -- is a positional parameter, which is not allowed, since we + -- have seen at least one named parameter already. + + goto LP_State_Expr; + + <> + Restore_Scan_State (Scan_State_LP); + return Name_Node; + end P_Simple_Name_Resync; ---------------------- -- 4.1 Direct_Name -- @@ -1117,7 +1340,7 @@ package body Ch4 is -- P_Reduction_Attribute_Reference -- ------------------------------------- - function P_Reduction_Attribute_Reference (S : Node_Id) + function P_Reduction_Attribute_Reference (Pref : Node_Id) return Node_Id is Attr_Node : Node_Id; @@ -1132,7 +1355,7 @@ package body Ch4 is Error_Msg ("Reduce attribute expected", Prev_Token_Ptr); end if; - Set_Prefix (Attr_Node, S); + Set_Prefix (Attr_Node, Pref); Set_Expressions (Attr_Node, New_List); T_Left_Paren; Append (P_Name, Expressions (Attr_Node)); @@ -3399,7 +3622,7 @@ package body Ch4 is and then Token = Tok_Identifier then Save_Scan_State (Scan_State); - Type_Node := P_Qualified_Simple_Name_Resync; + Type_Node := P_Subtype_Name_Resync; if Token = Tok_Apostrophe then Scan; if Token_Name = Name_Make then diff --git a/gcc/ada/par-ch5.adb b/gcc/ada/par-ch5.adb index cc0e6c167fc2..76a536b33d11 100644 --- a/gcc/ada/par-ch5.adb +++ b/gcc/ada/par-ch5.adb @@ -2042,7 +2042,7 @@ package body Ch5 is begin Goto_Node := New_Node (N_Goto_Statement, Token_Ptr); Scan; -- past GOTO (or TO) - Set_Name (Goto_Node, P_Qualified_Simple_Name_Resync); + Set_Name (Goto_Node, P_Label_Name); Append_Elmt (Goto_Node, Goto_List); if Token = Tok_When then @@ -2393,7 +2393,7 @@ package body Ch5 is Scan; -- past EXIT or CONTINUE if Token = Tok_Identifier then - Set_Name (N, P_Qualified_Simple_Name); + Set_Name (N, P_Loop_Name); elsif Style_Check and then Nkind (N) = N_Exit_Statement then -- This statement has no name, so check that -- the innermost loop is unnamed too. diff --git a/gcc/ada/par-ch6.adb b/gcc/ada/par-ch6.adb index 2465108f7abc..a6418a5dc9ea 100644 --- a/gcc/ada/par-ch6.adb +++ b/gcc/ada/par-ch6.adb @@ -366,8 +366,8 @@ package body Ch6 is Inst_Node := New_Node (N_Procedure_Instantiation, Fproc_Sloc); end if; - Set_Name (Inst_Node, P_Qualified_Simple_Name); Set_Defining_Unit_Name (Inst_Node, Name_Node); + Set_Name (Inst_Node, P_Generic_Unit_Name); Set_Generic_Associations (Inst_Node, P_Generic_Actual_Part_Opt); P_Aspect_Specifications (Inst_Node, Semicolon => True); Pop_Scope_Stack; -- Don't need scope stack entry in this case diff --git a/gcc/ada/par-ch7.adb b/gcc/ada/par-ch7.adb index da663685e4ee..ff55c87055f0 100644 --- a/gcc/ada/par-ch7.adb +++ b/gcc/ada/par-ch7.adb @@ -187,7 +187,7 @@ package body Ch7 is Package_Node := New_Node (N_Package_Renaming_Declaration, Package_Sloc); Set_Defining_Unit_Name (Package_Node, Name_Node); - Set_Name (Package_Node, P_Qualified_Simple_Name); + Set_Name (Package_Node, P_Package_Name); No_Constraint; P_Aspect_Specifications (Package_Node, Semicolon => False); @@ -224,7 +224,7 @@ package body Ch7 is Package_Node := New_Node (N_Package_Instantiation, Package_Sloc); Set_Defining_Unit_Name (Package_Node, Name_Node); - Set_Name (Package_Node, P_Qualified_Simple_Name); + Set_Name (Package_Node, P_Generic_Unit_Name); Set_Generic_Associations (Package_Node, P_Generic_Actual_Part_Opt); diff --git a/gcc/ada/par-ch8.adb b/gcc/ada/par-ch8.adb index 8be1ceb0e0ed..16f7f954c515 100644 --- a/gcc/ada/par-ch8.adb +++ b/gcc/ada/par-ch8.adb @@ -128,7 +128,7 @@ package body Ch8 is loop Use_Node := New_Node (N_Use_Package_Clause, Use_Sloc); - Set_Name (Use_Node, P_Qualified_Simple_Name); + Set_Name (Use_Node, P_Package_Name); -- Locally chain each name's use-package node diff --git a/gcc/ada/par-ch9.adb b/gcc/ada/par-ch9.adb index 5edce03a728b..3ba1e708a742 100644 --- a/gcc/ada/par-ch9.adb +++ b/gcc/ada/par-ch9.adb @@ -221,7 +221,7 @@ package body Ch9 is Set_Interface_List (Task_Node, New_List); loop - Append (P_Qualified_Simple_Name, Interface_List (Task_Node)); + Append (P_Subtype_Name, Interface_List (Task_Node)); exit when Token /= Tok_And; Scan; -- past AND end loop; @@ -557,8 +557,7 @@ package body Ch9 is Set_Interface_List (Protected_Node, New_List); loop - Append (P_Qualified_Simple_Name, - Interface_List (Protected_Node)); + Append (P_Subtype_Name, Interface_List (Protected_Node)); exit when Token /= Tok_And; Scan; -- past AND diff --git a/gcc/ada/par-load.adb b/gcc/ada/par-load.adb index 4a97f14ffb51..0206b56e174f 100644 --- a/gcc/ada/par-load.adb +++ b/gcc/ada/par-load.adb @@ -117,6 +117,29 @@ procedure Load is end Same_File_Name_Except_For_Case; + function Actual_Name_Collides_With_Predefined_Unit_Name + (Actual_File_Name : File_Name_Type) return Boolean; + -- Given an actual file name, determine if it is a child unit whose parent + -- unit is a single letter that is a, g, i, or s. Such a name could create + -- confusion with predefined units and thus is required to use a tilde + -- instead of the minus as the second character. + + ---------------------------------------------------- + -- Actual_Name_Collides_With_Predefined_Unit_Name -- + ---------------------------------------------------- + + function Actual_Name_Collides_With_Predefined_Unit_Name + (Actual_File_Name : File_Name_Type) return Boolean + is + N1 : Character; + begin + Get_Name_String (Actual_File_Name); + N1 := Name_Buffer (1); + return Name_Len > 1 + and then Name_Buffer (2) = '-' + and then (N1 = 'a' or else N1 = 'g' or else N1 = 'i' or else N1 = 's'); + end Actual_Name_Collides_With_Predefined_Unit_Name; + -- Start of processing for Load begin @@ -163,8 +186,18 @@ begin (File_Name, Unit_File_Name (Cur_Unum))) then Error_Msg_File_1 := File_Name; - Error_Msg - ("??file name does not match unit name, should be{", Sloc (Curunit)); + if Actual_Name_Collides_With_Predefined_Unit_Name + (Unit_File_Name (Cur_Unum)) + then + Error_Msg + ("??file name may conflict with predefined units, " + & "the expected file name for this unit is{", + Sloc (Curunit)); + else + Error_Msg + ("??file name does not match unit name, should be{", + Sloc (Curunit)); + end if; end if; -- For units other than the main unit, the expected unit name is set and diff --git a/gcc/ada/par-prag.adb b/gcc/ada/par-prag.adb index 4d0ffe625497..3723e644c244 100644 --- a/gcc/ada/par-prag.adb +++ b/gcc/ada/par-prag.adb @@ -305,7 +305,7 @@ begin -- it is a semantic error, not a syntactic one (we have already checked -- the syntax for the unrecognized pragma as required by (RM 2.8(11)). - if Prag_Id = Unknown_Pragma then + if Prag_Id = Pragma_Unknown then return Pragma_Node; end if; @@ -1394,6 +1394,7 @@ begin | Pragma_Annotate | Pragma_Assert | Pragma_Assert_And_Cut + | Pragma_Assertion_Level | Pragma_Assertion_Policy | Pragma_Assume | Pragma_Assume_No_Invalid_Values @@ -1607,6 +1608,7 @@ begin | Pragma_Unreferenced | Pragma_Unreferenced_Objects | Pragma_Unreserve_All_Interrupts + | Pragma_Unsigned_Base_Range | Pragma_Unsuppress | Pragma_Unused | Pragma_Use_VADS_Size @@ -1620,12 +1622,12 @@ begin null; -------------------- - -- Unknown_Pragma -- + -- Pragma_Unknown -- -------------------- -- Should be impossible, since we excluded this case earlier on - when Unknown_Pragma => + when Pragma_Unknown => raise Program_Error; end case; diff --git a/gcc/ada/par.adb b/gcc/ada/par.adb index 99bbed2cfb2c..8ced09dc0098 100644 --- a/gcc/ada/par.adb +++ b/gcc/ada/par.adb @@ -829,8 +829,15 @@ function Par (Configuration_Pragmas : Boolean) return List_Id is function P_Expression return Node_Id; function P_Expression_Or_Range_Attribute return Node_Id; function P_Name return Node_Id; - function P_Qualified_Simple_Name return Node_Id; - function P_Qualified_Simple_Name_Resync return Node_Id; + function P_Exception_Name return Node_Id; + function P_Label_Name return Node_Id; + function P_Loop_Name return Node_Id; + function P_Generic_Unit_Name return Node_Id; + function P_Library_Unit_Name return Node_Id; + function P_Package_Name return Node_Id; + function P_Parent_Unit_Name return Node_Id; + function P_Subtype_Name return Node_Id; + function P_Subtype_Name_Resync return Node_Id; function P_Simple_Expression return Node_Id; function P_Simple_Expression_Or_Range_Attribute return Node_Id; diff --git a/gcc/ada/prep.adb b/gcc/ada/prep.adb index 951719e2cdf8..7e58421b56f3 100644 --- a/gcc/ada/prep.adb +++ b/gcc/ada/prep.adb @@ -1210,6 +1210,13 @@ package body Prep is Output (From, To); end if; + New_EOL.all; + + elsif Empty_Comment_Deleted_Lines then + Put_Char ('-'); + Put_Char ('-'); + Put_Char ('!'); + New_EOL.all; end if; diff --git a/gcc/ada/prepcomp.adb b/gcc/ada/prepcomp.adb index 35dd4cbf53ae..f5ef40a0ff95 100644 --- a/gcc/ada/prepcomp.adb +++ b/gcc/ada/prepcomp.adb @@ -54,29 +54,31 @@ package body Prepcomp is pragma Warnings (On); type Preproc_Data is record - Mapping : Symbol_Table.Instance; - File_Name : File_Name_Type := No_File; - Deffile : String_Id := No_String; - Undef_False : Boolean := False; - Always_Blank : Boolean := False; - Comments : Boolean := False; - No_Deletion : Boolean := False; - List_Symbols : Boolean := False; - Processed : Boolean := False; + Mapping : Symbol_Table.Instance; + File_Name : File_Name_Type := No_File; + Deffile : String_Id := No_String; + Undef_False : Boolean := False; + Always_Blank : Boolean := False; + Comments : Boolean := False; + Empty_Comments : Boolean := False; + No_Deletion : Boolean := False; + List_Symbols : Boolean := False; + Processed : Boolean := False; end record; -- Structure to keep the preprocessing data for a file name or for the -- default (when Name_Id = No_Name). No_Preproc_Data : constant Preproc_Data := - (Mapping => No_Mapping, - File_Name => No_File, - Deffile => No_String, - Undef_False => False, - Always_Blank => False, - Comments => False, - No_Deletion => False, - List_Symbols => False, - Processed => False); + (Mapping => No_Mapping, + File_Name => No_File, + Deffile => No_String, + Undef_False => False, + Always_Blank => False, + Comments => False, + Empty_Comments => False, + No_Deletion => False, + List_Symbols => False, + Processed => False); Default_Data : Preproc_Data := No_Preproc_Data; -- The preprocessing data to be used when no specific preprocessing data @@ -170,6 +172,17 @@ package body Prepcomp is No_Preprocessing := False; Current_Data.Processed := True; + if Opt.Blank_Deleted_Lines then + Current_Data.Always_Blank := True; + + elsif Opt.Comment_Deleted_Lines then + Current_Data.Comments := True; + + elsif Opt.Empty_Comment_Deleted_Lines then + Current_Data.Empty_Comments := True; + + end if; + -- Start with an empty, initialized mapping table; use Prep.Mapping, -- because Prep.Index_Of uses Prep.Mapping. @@ -379,6 +392,15 @@ package body Prepcomp is OK := True; end if; + when 'e' => + + -- Replace removed lines with empty comment lines ("--!") + + if Name_Len = 1 then + Current_Data.Empty_Comments := True; + OK := True; + end if; + when 's' => -- List symbols @@ -601,12 +623,22 @@ package body Prepcomp is -- Set the preprocessing flags according to the preprocessing data - if Current_Data.Comments and not Current_Data.Always_Blank then - Comment_Deleted_Lines := True; - Blank_Deleted_Lines := False; + if Current_Data.Comments then + Comment_Deleted_Lines := True; + Empty_Comment_Deleted_Lines := False; + Blank_Deleted_Lines := False; + + elsif Current_Data.Always_Blank then + Comment_Deleted_Lines := False; + Empty_Comment_Deleted_Lines := False; + Blank_Deleted_Lines := True; + + -- By default, emit empty comment lines in place of deleted lines + else - Comment_Deleted_Lines := False; - Blank_Deleted_Lines := True; + Comment_Deleted_Lines := False; + Empty_Comment_Deleted_Lines := True; + Blank_Deleted_Lines := False; end if; No_Deletion := Current_Data.No_Deletion; diff --git a/gcc/ada/repinfo.adb b/gcc/ada/repinfo.adb index bbf92a778007..e236e4e54be1 100644 --- a/gcc/ada/repinfo.adb +++ b/gcc/ada/repinfo.adb @@ -455,7 +455,7 @@ package body Repinfo is if Present (Ent) and then Nkind (Declaration_Node (Ent)) not in N_Renaming_Declaration - and then not Is_Ignored_Ghost_Entity (Ent) + and then not Sem_Util.Is_Ignored_Ghost_Entity_In_Codegen (Ent) then -- If entity is a subprogram and we are listing mechanisms, -- then we need to list mechanisms for this entity. We skip this diff --git a/gcc/ada/rtsfind.adb b/gcc/ada/rtsfind.adb index f47aacc77487..e15e93f2fba4 100644 --- a/gcc/ada/rtsfind.adb +++ b/gcc/ada/rtsfind.adb @@ -1114,7 +1114,7 @@ package body Rtsfind is -- Provide a clean environment for the unit Ignore_SPARK_Mode_Pragmas_In_Instance := False; - Install_Ghost_Region (None, Empty); + Install_Ghost_Region (None, Empty, Empty); Install_SPARK_Mode (None, Empty); -- Otherwise we need to load the unit, First build unit name from the diff --git a/gcc/ada/rtsfind.ads b/gcc/ada/rtsfind.ads index 37ed22b1c87d..c82af1154fea 100644 --- a/gcc/ada/rtsfind.ads +++ b/gcc/ada/rtsfind.ads @@ -773,12 +773,20 @@ package Rtsfind is RE_Scaled_Divide64, -- System.Arith_64 RE_Subtract_With_Ovflo_Check64, -- System.Arith_64 + RE_Uns_Add_With_Ovflo_Check64, -- System.Arith_64 + RE_Uns_Multiply_With_Ovflo_Check64, -- System.Arith_64 + RE_Uns_Subtract_With_Ovflo_Check64, -- System.Arith_64 + RE_Add_With_Ovflo_Check128, -- System.Arith_128 RE_Double_Divide128, -- System.Arith_128 RE_Multiply_With_Ovflo_Check128, -- System.Arith_128 RE_Subtract_With_Ovflo_Check128, -- System.Arith_128 RE_Scaled_Divide128, -- System.Arith_128 + RE_Uns_Add_With_Ovflo_Check128, -- System.Arith_128 + RE_Uns_Multiply_With_Ovflo_Check128, -- System.Arith_128 + RE_Uns_Subtract_With_Ovflo_Check128, -- System.Arith_128 + RE_Assert_Failure, -- System.Assertions RE_Raise_Assert_Failure, -- System.Assertions @@ -1652,6 +1660,7 @@ package Rtsfind is RE_Put_Image_Long_Long_Long_Unsigned, -- System.Put_Images RE_Put_Image_Thin_Pointer, -- System.Put_Images RE_Put_Image_Fat_Pointer, -- System.Put_Images + RE_Put_Image_Extended_Access_Pointer, -- System.Put_Images RE_Put_Image_Access_Subp, -- System.Put_Images RE_Put_Image_Access_Prot_Subp, -- System.Put_Images RE_Put_Image_String, -- System.Put_Images @@ -2421,12 +2430,20 @@ package Rtsfind is RE_Scaled_Divide64 => System_Arith_64, RE_Subtract_With_Ovflo_Check64 => System_Arith_64, + RE_Uns_Add_With_Ovflo_Check64 => System_Arith_64, + RE_Uns_Multiply_With_Ovflo_Check64 => System_Arith_64, + RE_Uns_Subtract_With_Ovflo_Check64 => System_Arith_64, + RE_Add_With_Ovflo_Check128 => System_Arith_128, RE_Double_Divide128 => System_Arith_128, RE_Multiply_With_Ovflo_Check128 => System_Arith_128, RE_Subtract_With_Ovflo_Check128 => System_Arith_128, RE_Scaled_Divide128 => System_Arith_128, + RE_Uns_Add_With_Ovflo_Check128 => System_Arith_128, + RE_Uns_Multiply_With_Ovflo_Check128 => System_Arith_128, + RE_Uns_Subtract_With_Ovflo_Check128 => System_Arith_128, + RE_Assert_Failure => System_Assertions, RE_Raise_Assert_Failure => System_Assertions, @@ -3425,6 +3442,7 @@ package Rtsfind is RE_Put_Image_Long_Long_Long_Unsigned => System_Put_Images, RE_Put_Image_Thin_Pointer => System_Put_Images, RE_Put_Image_Fat_Pointer => System_Put_Images, + RE_Put_Image_Extended_Access_Pointer => System_Put_Images, RE_Put_Image_Access_Subp => System_Put_Images, RE_Put_Image_Access_Prot_Subp => System_Put_Images, RE_Put_Image_String => System_Put_Images, diff --git a/gcc/ada/s-oscons-tmplt.c b/gcc/ada/s-oscons-tmplt.c index 7a5e987cefc4..6b2190578071 100644 --- a/gcc/ada/s-oscons-tmplt.c +++ b/gcc/ada/s-oscons-tmplt.c @@ -1764,6 +1764,17 @@ CND(SIZEOF_tv_usec, "tv_usec") #endif CNS(MAX_tv_sec, "") } + +{ + struct timespec ts; +/* + -- Sizes (in bytes) of the components of struct timespec. + -- The tv_sec field is the same as in struct timeval. +*/ +#define SIZEOF_tv_nsec (sizeof (ts.tv_nsec)) +CND(SIZEOF_tv_nsec, "tv_nsec"); +} + /* -- Sizes of various data types @@ -1791,6 +1802,9 @@ struct sockaddr_un { #define SIZEOF_sockaddr_un (sizeof (struct sockaddr_un)) CND(SIZEOF_sockaddr_un, "struct sockaddr_un") +#define BACKLOG_MAX 15 +CND(BACKLOG_MAX, "number of outstanding connections in the socket's listen queue") + #define SIZEOF_fd_set (sizeof (fd_set)) CND(SIZEOF_fd_set, "fd_set") CND(FD_SETSIZE, "Max fd value") diff --git a/gcc/ada/s-pack.adb.tmpl b/gcc/ada/s-pack.adb.tmpl index e54f3befd4f1..b21d4129257c 100644 --- a/gcc/ada/s-pack.adb.tmpl +++ b/gcc/ada/s-pack.adb.tmpl @@ -37,7 +37,7 @@ package body System.Pack_@@ is -- The high-level idea of the implementation is to overlay a record -- containing components of the same size as that of the component - -- of the array, in order words @@ bits, and to access the indexed + -- of the array, in other words @@ bits, and to access the indexed -- component of the array through the appropriate selected component -- of the record. diff --git a/gcc/ada/sem.adb b/gcc/ada/sem.adb index 944ece119785..71e759e74c41 100644 --- a/gcc/ada/sem.adb +++ b/gcc/ada/sem.adb @@ -1460,7 +1460,7 @@ package body Sem is -- Set up a clean environment before analyzing - Install_Ghost_Region (None, Empty); + Install_Ghost_Region (None, Empty, Empty); Ignore_SPARK_Mode_Pragmas_In_Instance := False; Outer_Generic_Scope := Empty; @@ -1562,7 +1562,7 @@ package body Sem is -- Compile predefined units with GNAT_Mode set to True, to properly -- process the categorization stuff. However, do not set GNAT_Mode - -- to True for the renamings units (Text_IO, IO_Exceptions, Direct_IO, + -- to True for the renaming units (Text_IO, IO_Exceptions, Direct_IO, -- Sequential_IO) as this would prevent pragma Extend_System from being -- taken into account, for example when Text_IO is renaming DEC.Text_IO. diff --git a/gcc/ada/sem.ads b/gcc/ada/sem.ads index 611309775279..63cf1daad37d 100644 --- a/gcc/ada/sem.ads +++ b/gcc/ada/sem.ads @@ -307,6 +307,18 @@ package Sem is -- case. We could perhaps do a more accurate job and retain some of the -- warnings, but it is quite a tricky job. + Ghost_Context_Checks_Disabled : Boolean := False; + -- This flag controls whether ghost context related checks are enabled or + -- disabled. Typically they are enabled however they need to be disabled in + -- instances where the ghost region context has not been set. + -- + -- Typically this is done for pragmas where the ghostliness of the pragma + -- is determined by an entity specified as one of the arguments. In these + -- cases we need to analyze that argument before the pragma itself to + -- determine the ghostliness of the pragma. However at that point we have + -- not set the ghost region for the pragma in order to determine the ghost + -- context of the argument. + ----------------------------------- -- Handling of Check Suppression -- ----------------------------------- diff --git a/gcc/ada/sem_aggr.adb b/gcc/ada/sem_aggr.adb index 58460b8e3bb8..baca06800abe 100644 --- a/gcc/ada/sem_aggr.adb +++ b/gcc/ada/sem_aggr.adb @@ -1139,7 +1139,8 @@ package body Sem_Aggr is if Is_Modular_Integer_Type (Index_Typ) then Error_Msg_N ("null array aggregate indexed by a modular type<<", N); - else + + elsif Is_Enumeration_Type (Index_Typ) then Error_Msg_N ("null array aggregate indexed by an enumeration type<<", N); end if; @@ -3331,6 +3332,24 @@ package body Sem_Aggr is -- Not needed if others, since missing impossible. if No (Others_N) then + -- We are dealing with a gap in the indicies. However + -- we should also check for an out of bounds error. If + -- there exists an out of bounds error then we should + -- not be suggesting that the user should add the + -- missing indices but rather remove the ones that are + -- out of bounds. + + Aggr_Low := Table (1).Lo; + Aggr_High := Table (Nb_Discrete_Choices).Hi; + + Check_Bounds + (Index_Typ_Low, Index_Typ_High, Aggr_Low, Aggr_High); + Check_Bounds + (Index_Base_Low, + Index_Base_High, + Aggr_Low, + Aggr_High); + for J in 2 .. Nb_Discrete_Choices loop Lo_Val := Expr_Value (Table (J).Lo); Hi_Val := Table (J - 1).Highest; @@ -3358,11 +3377,13 @@ package body Sem_Aggr is if Hi_Val + 1 = Lo_Val - 1 then Error_Msg_N ("missing index value " - & "in array aggregate!", Error_Node); + & "in array aggregate!", + Error_Node); else Error_Msg_N ("missing index values " - & "in array aggregate!", Error_Node); + & "in array aggregate!", + Error_Node); end if; Output_Bad_Choices @@ -5443,8 +5464,13 @@ package body Sem_Aggr is Hi := New_Copy_Tree (Lo); - Report_Null_Array_Constraint_Error (N, Index_Typ); - Set_Raises_Constraint_Error (N); + -- On multidimiensional arrays, avoid reporting the same error + -- several times. + + if not Raises_Constraint_Error (N) then + Report_Null_Array_Constraint_Error (N, Index_Typ); + Set_Raises_Constraint_Error (N); + end if; else -- The upper bound is the predecessor of the lower bound @@ -5458,6 +5484,15 @@ package body Sem_Aggr is Append (Make_Range (Loc, New_Copy_Tree (Lo), Hi), Constr); Analyze_And_Resolve (Last (Constr), Etype (Index)); + if Known_Bounds + and then + (Nkind (High_Bound (Last (Constr))) = N_Raise_Constraint_Error + or else + Nkind (Low_Bound (Last (Constr))) = N_Raise_Constraint_Error) + then + Set_Raises_Constraint_Error (N); + end if; + Next_Index (Index); end loop; diff --git a/gcc/ada/sem_attr.adb b/gcc/ada/sem_attr.adb index 78b6318133a4..e9e245afb609 100644 --- a/gcc/ada/sem_attr.adb +++ b/gcc/ada/sem_attr.adb @@ -5179,10 +5179,8 @@ package body Sem_Attr is when Attribute_Make => declare Expr : Entity_Id; begin - -- Should this be assert? Parsing should fail if it hits 'Make - -- and all extensions aren't enabled ??? - if not All_Extensions_Allowed then + Error_Msg_GNAT_Extension ("Make attribute", Loc); return; end if; @@ -7190,6 +7188,27 @@ package body Sem_Attr is Analyze_Access_Attribute; + ------------------------- + -- Unsigned_Base_Range -- + ------------------------- + + -- GNAT core extension. The prefix of 'Unsigned_Base_Range must be a + -- signed integer type. The static result is a boolean that indicates + -- whether the base range is unsigned. + + when Attribute_Unsigned_Base_Range => + Check_E0; + Check_Integer_Type; + Check_Not_Incomplete_Type; + Set_Etype (N, Standard_Boolean); + Set_Is_Static_Expression (N, True); + + if not Core_Extensions_Allowed then + Error_Msg_GNAT_Extension + ("'Unsigned_'Base_'Range", Sloc (N), + Is_Core_Extension => True); + end if; + ------------ -- Update -- ------------ @@ -8174,13 +8193,6 @@ package body Sem_Attr is if Nkind (N) /= N_Attribute_Reference then return; - - -- No evaluation required under strict preanalysis because locating - -- static expressions is not needed; this also minimizes making tree - -- modifications during strict preanalysis. - - elsif In_Strict_Preanalysis then - return; end if; Aname := Attribute_Name (N); @@ -10481,10 +10493,10 @@ package body Sem_Attr is Fold_Uint (N, Expr_Value (Expression (S)), Static); -- If no size is specified, then we simply use the object - -- size in the VADS_Size case (e.g. Natural'Size is equal - -- to Integer'Size, not one less). + -- size (when known) in the VADS_Size case (for example, + -- Natural'Size is equal to Integer'Size, not one less). - else + elsif Known_Esize (P_TypeA) then Fold_Uint (N, Esize (P_TypeA), Static); end if; end; @@ -10685,6 +10697,26 @@ package body Sem_Attr is Set_Is_Static_Expression (N, True); end Unconstrained_Array; + ------------------------- + -- Unsigned_Base_Range -- + ------------------------- + + when Attribute_Unsigned_Base_Range => Unsigned_Base_Range : declare + begin + Rewrite (N, New_Occurrence_Of ( + Boolean_Literals ( + Is_Integer_Type (P_Type) + and then + Has_Unsigned_Base_Range_Aspect (P_Base_Type)), Loc)); + + -- Analyze and resolve as boolean, note that this attribute is + -- a static attribute in GNAT. + + Analyze_And_Resolve (N, Standard_Boolean); + Static := True; + Set_Is_Static_Expression (N, True); + end Unsigned_Base_Range; + -- Attribute Update is never static when Attribute_Update => @@ -12819,7 +12851,10 @@ package body Sem_Attr is end Proper_Op; begin - Resolve (Init_Value_Exp, Typ); + -- First try to resolve the reducer and then, if this succeeds, + -- resolve the initial value. This nicely deals with confused + -- programmers who swap the two items. + if Is_Overloaded (Reducer_Subp_Name) then Outer : for Retry in Boolean loop @@ -12841,14 +12876,18 @@ package body Sem_Attr is then Op := Reducer_Subp_Name; - elsif Proper_Op (Entity (Reducer_Subp_Name)) then + elsif Is_Entity_Name (Reducer_Subp_Name) + and then Proper_Op (Entity (Reducer_Subp_Name)) + then Op := Entity (Reducer_Subp_Name); Set_Etype (N, Typ); end if; if No (Op) then - Error_Msg_N ("No suitable reducer subprogram found", + Error_Msg_N ("no suitable reducer subprogram found", Reducer_Subp_Name); + else + Resolve (Init_Value_Exp, Typ); end if; end; diff --git a/gcc/ada/sem_attr.ads b/gcc/ada/sem_attr.ads index 1c54370316ef..4c8b60ca7f1c 100644 --- a/gcc/ada/sem_attr.ads +++ b/gcc/ada/sem_attr.ads @@ -539,6 +539,15 @@ package Sem_Attr is -- yields a value that can be called as long as the subprogram is in -- scope (normal Ada 95 accessibility rules restrict this usage). + ------------------------- + -- Unsigned_Base_Range -- + ------------------------- + + Attribute_Unsigned_Base_Range => True, + -- GNAT core extension. The prefix of 'Unsigned_Base_Range must be a + -- signed integer type. The static result is a boolean that indicates + -- whether the base range is unsigned. + --------------- -- VADS_Size -- --------------- diff --git a/gcc/ada/sem_aux.adb b/gcc/ada/sem_aux.adb index 0aa74e39050a..58a4beb221db 100644 --- a/gcc/ada/sem_aux.adb +++ b/gcc/ada/sem_aux.adb @@ -959,6 +959,7 @@ package body Sem_Aux is begin if Is_Type (Ent) + and then Present (Etype (Ent)) and then Base_Type (Ent) /= Root_Type (Ent) and then not Is_Class_Wide_Type (Ent) diff --git a/gcc/ada/sem_case.adb b/gcc/ada/sem_case.adb index c81b56337f6a..050e456d49c3 100644 --- a/gcc/ada/sem_case.adb +++ b/gcc/ada/sem_case.adb @@ -3890,6 +3890,7 @@ package body Sem_Case is return True; when N_Empty + | N_Allocator | N_Statement_Other_Than_Procedure_Call | N_Procedure_Call_Statement | N_Declaration diff --git a/gcc/ada/sem_ch10.adb b/gcc/ada/sem_ch10.adb index f58513d115fb..cff0d71c17ce 100644 --- a/gcc/ada/sem_ch10.adb +++ b/gcc/ada/sem_ch10.adb @@ -176,7 +176,7 @@ package body Sem_Ch10 is -- use-package clauses to avoid circularities when installing context. procedure Install_Siblings (U_Name : Entity_Id; N : Node_Id); - -- In the compilation of a child unit, a child of any of the ancestor + -- In the compilation of a child unit, a child of any of the ancestor -- units is directly visible if it is visible, because the parent is in -- an enclosing scope. Iterate over context to find child units of U_Name -- or of some ancestor of it. @@ -1494,7 +1494,7 @@ package body Sem_Ch10 is -- No checked needed for ignored ghost units - or else Is_Ignored_Ghost_Entity (Spec_Id) + or else Is_Ignored_Ghost_Entity_In_Codegen (Spec_Id) ) then -- This is a case where we only need the entity for checking to @@ -3169,13 +3169,12 @@ package body Sem_Ch10 is elsif Unit_Kind = N_Package_Instantiation and then Nkind (U) = N_Package_Instantiation - and then Present (Instance_Spec (U)) then -- If the instance has not been rewritten as a package declaration, -- then it appeared already in a previous with clause. Retrieve -- the entity from the previous instance. - E_Name := Defining_Entity (Specification (Instance_Spec (U))); + E_Name := Defining_Entity_Of_Instance (U); elsif Unit_Kind in N_Subprogram_Instantiation then @@ -3186,9 +3185,7 @@ package body Sem_Ch10 is -- been rewritten as the declaration of the wrapper itself. if Nkind (U) in N_Subprogram_Instantiation then - E_Name := - Related_Instance - (Defining_Entity (Specification (Instance_Spec (U)))); + E_Name := Defining_Entity_Of_Instance (U); else E_Name := Related_Instance (Defining_Entity (U)); end if; @@ -4806,9 +4803,8 @@ package body Sem_Ch10 is ---------------------- procedure Install_Siblings (U_Name : Entity_Id; N : Node_Id) is - Item : Node_Id; - Id : Entity_Id; - Prev : Entity_Id; + Item : Node_Id; + Item_E : Entity_Id; begin -- Iterate over explicit with clauses, and check whether the scope of @@ -4839,42 +4835,46 @@ package body Sem_Ch10 is or else Private_Present (N) or else Nkind (Unit (N)) = N_Package_Body then - Id := Entity (Name (Item)); + Item_E := Entity (Name (Item)); - if Is_Child_Unit (Id) - and then Is_Ancestor_Package (Scope (Id), U_Name) + if Is_Child_Unit (Item_E) + and then Is_Ancestor_Package (Scope (Item_E), U_Name) then - Set_Is_Immediately_Visible (Id); + Set_Is_Immediately_Visible (Item_E); -- Check for the presence of another unit in the context that -- may be inadvertently hidden by the child. - Prev := Current_Entity (Id); + declare + Clause : Node_Id; + Clause_E : Entity_Id; - if Present (Prev) - and then Is_Immediately_Visible (Prev) - and then not Is_Child_Unit (Prev) - then - declare - Clause : Node_Id; + begin + Clause := First (Context_Items (N)); + while Present (Clause) loop + if Clause /= Item + and then Nkind (Clause) = N_With_Clause + and then not Limited_Present (Clause) + then + Clause_E := Entity (Name (Clause)); - begin - Clause := First (Context_Items (N)); - while Present (Clause) loop - if Nkind (Clause) = N_With_Clause - and then Entity (Name (Clause)) = Prev + if not Is_Ancestor_Package (Clause_E, U_Name) + and then Chars (Clause_E) = Chars (Item_E) + and then not Has_Prefix (Name (Clause)) + and then not In_Use (Clause_E) then Error_Msg_NE - ("child unit& hides compilation unit " & - "with the same name??", - Name (Item), Id); + ("child unit& hides compilation unit " + & "with the same name??", + Name (Item), + Item_E); exit; end if; + end if; - Next (Clause); - end loop; - end; - end if; + Next (Clause); + end loop; + end; -- The With_Clause may be on a grandchild or one of its further -- descendants, which makes a child immediately visible. Examine @@ -4882,12 +4882,12 @@ package body Sem_Ch10 is -- if current unit is A.C, and with_clause is on A.X.Y.Z, then X -- is immediately visible. - elsif Is_Child_Unit (Id) then + elsif Is_Child_Unit (Item_E) then declare Par : Entity_Id; begin - Par := Scope (Id); + Par := Scope (Item_E); while Is_Child_Unit (Par) loop if Is_Ancestor_Package (Scope (Par), U_Name) then Set_Is_Immediately_Visible (Par); @@ -4905,9 +4905,9 @@ package body Sem_Ch10 is -- is already a regular with_clause for it in the current unit. elsif Private_Present (Item) then - Id := Entity (Name (Item)); + Item_E := Entity (Name (Item)); - if Is_Child_Unit (Id) then + if Is_Child_Unit (Item_E) then declare Clause : Node_Id; @@ -4931,12 +4931,13 @@ package body Sem_Ch10 is and then Is_Entity_Name (Name (Clause)) and then not Private_Present (Clause) then - if Entity (Name (Clause)) = Id + if Entity (Name (Clause)) = Item_E or else (Nkind (Name (Clause)) = N_Expanded_Name and then Is_Entity_Name (Prefix (Name (Clause))) - and then Entity (Prefix (Name (Clause))) = Id) + and then Entity (Prefix (Name (Clause))) + = Item_E) then return True; end if; @@ -4949,7 +4950,7 @@ package body Sem_Ch10 is end In_Context; begin - Set_Is_Visible_Lib_Unit (Id, In_Context); + Set_Is_Visible_Lib_Unit (Item_E, In_Context); end; end if; end if; diff --git a/gcc/ada/sem_ch12.adb b/gcc/ada/sem_ch12.adb index 1ba76dc74cee..de9cff14246e 100644 --- a/gcc/ada/sem_ch12.adb +++ b/gcc/ada/sem_ch12.adb @@ -33,6 +33,7 @@ with Einfo.Utils; use Einfo.Utils; with Elists; use Elists; with Errout; use Errout; with Expander; use Expander; +with Exp_Dbug; use Exp_Dbug; with Fname; use Fname; with Fname.UF; use Fname.UF; with Freeze; use Freeze; @@ -1290,6 +1291,11 @@ package body Sem_Ch12 is -- onto Default_Actuals, and actuals that require freezing are -- appended onto Actuals_To_Freeze. + procedure Analyze_Structural_Associations + (N : Node_Id; + Match : Associations.Match_Rec); + -- Analyze associations for structural instantiation N + procedure Check_Fixed_Point_Warning (Match : Associations.Match_Rec; Renamings : List_Id); @@ -2067,9 +2073,15 @@ package body Sem_Ch12 is is begin for Index in Match.Assocs'Range loop - if Defining_Entity (Match.Assocs (Index).An_Formal) = F then - return Index; - end if; + declare + An_F : constant Node_Id := Match.Assocs (Index).An_Formal; + begin + if Nkind (An_F) not in N_Use_Package_Clause | N_Use_Type_Clause + and then Defining_Entity (An_F) = F + then + return Index; + end if; + end; end loop; raise Program_Error; -- it must be present @@ -2365,6 +2377,16 @@ package body Sem_Ch12 is Match : constant Match_Rec := Match_Assocs (N, Formals, F_Copy); begin + if Nkind (N) in N_Generic_Instantiation and then Is_Structural (N) then + Analyze_Structural_Associations (N, Match); + + -- Bail out if the instantiation has been turned into something else + + if Nkind (N) not in N_Generic_Instantiation then + return Result_Renamings; + end if; + end if; + for Index in Match.Assocs'Range loop declare Assoc : Assoc_Rec renames Match.Assocs (Index); @@ -2946,7 +2968,7 @@ package body Sem_Ch12 is end case; -- Check for correct use of Ghost entities in generic - -- instantiations (SPARK RM 6.9(10)). + -- instantiations (SPARK RM 6.9(13)). Check_Ghost_Context_In_Generic_Association (Actual => Match, @@ -4099,7 +4121,7 @@ package body Sem_Ch12 is end if; -- The default for a ghost generic formal procedure should be a ghost - -- procedure (SPARK RM 6.9(13)). + -- procedure (SPARK RM 6.9(16)). if Ekind (Nam) = E_Procedure then declare @@ -4848,6 +4870,13 @@ package body Sem_Ch12 is function Needs_Body_Instantiated (Gen_Unit : Entity_Id) return Boolean is begin + -- If the instantiation is in the auxiliary declarations of the main + -- unit, then the body is needed, even if the main unit is generic. + + if Parent (N) = Aux_Decls_Node (Cunit (Main_Unit)) then + return True; + end if; + -- No need to instantiate bodies in generic units if Is_Generic_Unit (Cunit_Entity (Main_Unit)) then @@ -5134,6 +5163,17 @@ package body Sem_Ch12 is Formals => Generic_Formal_Declarations (Act_Tree), F_Copy => Generic_Formal_Declarations (Gen_Decl)); + -- Bail out if the instantiation has been turned into something else + + if Nkind (N) /= N_Package_Instantiation then + if Parent_Installed then + Remove_Parent; + end if; + + Restore_Env; + goto Leave; + end if; + Vis_Prims_List := Check_Hidden_Primitives (Renamings); -- Set minimal decoration on the original entity @@ -5141,6 +5181,18 @@ package body Sem_Ch12 is Mutate_Ekind (Defining_Entity (N), E_Package); Set_Scope (Defining_Entity (N), Current_Scope); + -- From now on only Act_Decl_Id matters. If was copied from the + -- original entity earlier but, if the instance is structural, + -- the latter has been changed, so adjust it accordingly. + + if Chars (Defining_Entity (N)) /= Chars (Act_Decl_Id) then + pragma Assert (Is_Structural (N)); + Set_Incomplete_Actuals + (Defining_Entity (N), Incomplete_Actuals (Act_Decl_Id)); + Act_Decl_Id := New_Copy (Defining_Entity (N)); + Set_Is_Not_Self_Hidden (Act_Decl_Id); + end if; + Set_Instance_Env (Gen_Unit, Act_Decl_Id); Set_Is_Generic_Instance (Act_Decl_Id); Generate_Definition (Act_Decl_Id); @@ -6011,6 +6063,454 @@ package body Sem_Ch12 is Analyze_Subprogram_Instantiation (N, E_Procedure); end Analyze_Procedure_Instantiation; + ------------------------------------- + -- Analyze_Structural_Associations -- + ------------------------------------- + + procedure Analyze_Structural_Associations + (N : Node_Id; + Match : Associations.Match_Rec) + is + use Associations; + + Loc : constant Source_Ptr := Sloc (N); + -- The source location of the instantiation + + type Accessibility_Depth is record + Global : Uint; + Local : Uint; + end record; + -- The accessibility depth of an entity is the depth of the outermost + -- scope from which the entity can be accessed at run time. It's zero + -- for library-level entities since they can be accessed from Standard. + + -- However it can be accessed at run time only after being elaborated; + -- for a library-level entity, this means that it can be accessed from + -- Standard only after its enclosing library unit is elaborated, which + -- means that it can be accessed from all the other library units (that + -- have a dependence on this enclosing library unit) as if it was itself + -- declared in Standard, but not from this enclosing library unit. + + -- Global contains the accessibility depth as computed from outside the + -- library or program unit where the entity is declared. + + -- Local contains the accessibility depth as computed from the current + -- scope, which may be different from Global if the scope is within the + -- library or program unit where the entity is declared. + + procedure Append_Entity_Name (B : in out Bounded_String; E : Entity_Id); + -- Append E's name to B + + procedure Append_Expression (B : in out Bounded_String; N : Node_Id); + -- Append an encoding of N, a compile-time known expression, to B + + function Get_Actual_Subtype (N : Node_Id) return Entity_Id; + -- Return the actual subtype of the formal object declared by N, which + -- is an N_Formal_Object_Declaration. It's the declared subtype of the + -- formal object if it is not a generic type, otherwise it's the actual + -- corresponding to this generic type in the instantiation. + + function Get_Entity_Depth (E : Entity_Id) return Accessibility_Depth; + -- Return the accessibility depth of E + + procedure Structural_Instantiation_Error (N : Node_Id); + -- Output an error for the specified structural instantiation + + function Max (L, R : Accessibility_Depth) return Accessibility_Depth is + (Global => UI_Max (L.Global, R.Global), + Local => UI_Max (L.Local, R.Local)); + -- Return a pair made up of the maximum value of each component + + function OK_For_Structural_Instantiation (E : Entity_Id) return Boolean; + -- Return True if the generic unit E is OK for structural instantiation + -- and False if it is not, giving an error in the latter case. + + procedure Rewrite_As_Renaming (N : Node_Id; E : Entity_Id); + -- Rewrite N as a renaming of E + + ------------------------ + -- Append_Entity_Name -- + ------------------------ + + procedure Append_Entity_Name (B : in out Bounded_String; E : Entity_Id) + is + begin + if Operating_Mode = Generate_Code then + Get_External_Name (E); + Append (B, Global_Name_Buffer); + else + Append (B, 'E'); + Append (B, Nat (E)); + end if; + end Append_Entity_Name; + + ----------------------- + -- Append_Expression -- + ----------------------- + + procedure Append_Expression (B : in out Bounded_String; N : Node_Id) is + Typ : constant Entity_Id := Etype (N); + + begin + if Is_Integer_Type (Typ) then + Append (B, 'I'); + Append (B, UI_Image (Expr_Value (N))); + + elsif Is_Real_Type (Typ) then + declare + Val : constant Ureal := Expr_Value_R (N); + begin + Append (B, 'R'); + Append (B, UI_Image (Norm_Num (Val))); + Append (B, '_'); + Append (B, UI_Image (Norm_Den (Val))); + end; + + elsif Is_Enumeration_Type (Typ) then + Append (B, 'E'); + Append_Entity_Name (B, Expr_Value_E (N)); + + elsif Is_String_Type (Typ) then + Append (B, 'S'); + Append (B, Strval (Expr_Value_S (N))); + + else + raise Program_Error; + end if; + end Append_Expression; + + ------------------------ + -- Get_Actual_Subtype -- + ------------------------ + + function Get_Actual_Subtype (N : Node_Id) return Entity_Id is + Subt : constant Entity_Id := Entity (Subtype_Mark (N)); + + begin + if not Is_Generic_Type (Subt) then + return Subt; + end if; + + for Index in Match.Assocs'Range loop + declare + Assoc : Assoc_Rec renames Match.Assocs (Index); + + begin + if Assoc.Actual.Kind = Name_Exp + and then Nkind (Assoc.An_Formal) = N_Formal_Type_Declaration + and then Defining_Identifier (Assoc.An_Formal) = Subt + then + return Entity (Assoc.Actual.Name_Exp); + end if; + end; + end loop; + + return Empty; + end Get_Actual_Subtype; + + ---------------------- + -- Get_Entity_Depth -- + ---------------------- + + function Get_Entity_Depth (E : Entity_Id) return Accessibility_Depth is + Global : constant Uint := Scope_Depth (Enclosing_Dynamic_Scope (E)); + CS : constant Entity_Id := Current_Scope; + + S : Entity_Id := Scope (E); + + begin + -- Generic formal types are treated as local entities + + if Is_Generic_Type (E) then + return (Global => Scope_Depth (S), Local => Scope_Depth (S)); + end if; + + -- Compute the accessibility depth from the current scope + + while Scope_Depth (S) > Global + and then (not Scope_Within_Or_Same (CS, S) + or else + (Ekind (S) = E_Package + and then Is_Generic_Instance (S) + and then Alias (Related_Instance (S)) = CS)) + loop + S := Scope (S); + end loop; + + return (Global => Global, Local => Scope_Depth (S)); + end Get_Entity_Depth; + + ------------------------------------ + -- Structural_Instantiation_Error -- + ------------------------------------ + + procedure Structural_Instantiation_Error (N : Node_Id) is + begin + Error_Msg_N ("generic unit cannot be instantiated structurally", N); + end Structural_Instantiation_Error; + + ------------------------------------- + -- OK_For_Structural_Instantiation -- + ------------------------------------- + + function OK_For_Structural_Instantiation (E : Entity_Id) return Boolean + is + Formals : constant List_Id := + Generic_Formal_Declarations (Unit_Declaration_Node (E)); + Unit_Entity : constant Entity_Id := + Cunit_Entity (Get_Source_Unit (E)); + + Formal : Node_Id; + + begin + -- Check that the generic unit is preelaborated + + if Ekind (Unit_Entity) in E_Package | E_Generic_Package + and then not Is_Preelaborated (Unit_Entity) + and then not Is_Pure (Unit_Entity) + then + Structural_Instantiation_Error (N); + Error_Msg_NE + ("\generic unit& is not preelaborated", N, Unit_Entity); + return False; + end if; + + -- Check that there is no generic formal object of mode In Out + + Formal := First (Formals); + while Present (Formal) loop + if Nkind (Formal) = N_Formal_Object_Declaration + and then Out_Present (Formal) + then + Structural_Instantiation_Error (N); + Error_Msg_NE + ("\in out formal parameter& not allowed", N, + Defining_Identifier (Formal)); + return False; + end if; + + Next (Formal); + end loop; + + return True; + end OK_For_Structural_Instantiation; + + ------------------------- + -- Rewrite_As_Renaming -- + ------------------------- + + procedure Rewrite_As_Renaming (N : Node_Id; E : Entity_Id) is + begin + case Nkind (N) is + when N_Function_Instantiation => + Rewrite (N, + Make_Subprogram_Renaming_Declaration (Loc, + Specification => + Make_Function_Specification (Loc, + Defining_Unit_Name => Defining_Unit_Name (N), + Parameter_Specifications => + New_Copy_List + (Parameter_Specifications + (Subprogram_Specification (E))), + Result_Definition => + New_Occurrence_Of (Etype (E), Loc)), + Name => New_Occurrence_Of (E, Loc))); + + when N_Procedure_Instantiation => + Rewrite (N, + Make_Subprogram_Renaming_Declaration (Loc, + Specification => + Make_Procedure_Specification (Loc, + Defining_Unit_Name => Defining_Unit_Name (N), + Parameter_Specifications => + New_Copy_List + (Parameter_Specifications + (Subprogram_Specification (E)))), + Name => New_Occurrence_Of (E, Loc))); + + when N_Package_Instantiation => + Rewrite (N, + Make_Package_Renaming_Declaration (Loc, + Defining_Unit_Name => Defining_Unit_Name (N), + Name => New_Occurrence_Of (E, Loc))); + + when others => + raise Program_Error; + end case; + end Rewrite_As_Renaming; + + -- Local variables + + Buf : Bounded_String; + Depth : Accessibility_Depth; + Ent : Entity_Id; + Nam : Name_Id; + R : Node_Id; + Scop : Entity_Id; + + -- Start of processing for Analyze_Structural_Associations + + begin + if not OK_For_Structural_Instantiation (Match.Gen_Unit) then + return; + end if; + + -- Compute the name and the scope depth of the structural instance + + Append_Entity_Name (Buf, Match.Gen_Unit); + Append (Buf, "SI"); + Depth := Get_Entity_Depth (Match.Gen_Unit); + + for Index in Match.Assocs'Range loop + declare + Assoc : Assoc_Rec renames Match.Assocs (Index); + + begin + Append (Buf, '_'); + + case Assoc.Actual.Kind is + when Name_Exp + | Exp_Func_Default + => + if Nkind (Assoc.An_Formal) = N_Formal_Object_Declaration then + -- Resolve the expression to compute whether it is static + + Resolve + (Assoc.Actual.Name_Exp, + Get_Actual_Subtype (Assoc.An_Formal)); + + if Is_OK_Static_Expression (Assoc.Actual.Name_Exp) then + -- We need the value of the expression to encode it + + pragma Assert + (Compile_Time_Known_Value (Assoc.Actual.Name_Exp)); + + Append_Expression (Buf, Assoc.Actual.Name_Exp); + + else + Structural_Instantiation_Error (N); + Error_Msg_N + ("\expression is not static", Assoc.Actual.Name_Exp); + end if; + + elsif Nkind (Assoc.Actual.Name_Exp) = N_Operator_Symbol then + Append (Buf, Chars (Assoc.Actual.Name_Exp)); + + else pragma Assert (Is_Entity_Name (Assoc.Actual.Name_Exp)); + Ent := Entity (Assoc.Actual.Name_Exp); + + -- If this is a type that is a renaming of another one, + -- as is the case for actuals in instances, retain the + -- latter. Beware of Natural and Positive, see Cstand. + + if Is_Type (Ent) + and then Nkind (Parent (Ent)) = N_Subtype_Declaration + and then + Is_Entity_Name (Subtype_Indication (Parent (Ent))) + and then not Comes_From_Source (Parent (Ent)) + and then Scope (Ent) /= Standard_Standard + then + Ent := Entity (Subtype_Indication (Parent (Ent))); + end if; + + -- ??? Need to implement handling of explicit renaming + + Append_Entity_Name (Buf, Ent); + Depth := Max (Depth, Get_Entity_Depth (Ent)); + end if; + + when Box_Subp_Default => + Append (Buf, 'F'); + + when Null_Default => + Append (Buf, 'N'); + + when others => + Structural_Instantiation_Error (N); + end case; + end; + end loop; + + Nam := Name_Find (Buf); + Ent := Get_Name_Entity_Id (Nam); + + -- If the structural instance has already been created, then rewrite + -- this occurrence as a renaming of it. + + if Present (Ent) then + Rewrite_As_Renaming (N, Ent); + Analyze (N); + + -- Otherwise, create it in the outermost possible scope + + else + -- Depth.Global is the accessibility depth of the structural instance + -- which is defined to be the depth of the outermost scope where the + -- instantiation is possible. If the depth cannot be reached from the + -- current scope, then the structural instance cannot be accessed out + -- of it and we would need to create a local instance instead. + + if Depth.Local > Depth.Global then + Structural_Instantiation_Error (N); + Error_Msg_N ("\local entity used in the instantiation", N); + return; + end if; + + Scop := Current_Scope; + + -- If the current scope is too nested, analyze the instantiation + -- relocated in the outermost possible scope, which will invoke + -- us recursively with a matching scope depth this time. + + if Scope_Depth (Scop) > Depth.Global then + while Scope_Depth (Scop) > Depth.Global loop + Scop := Scope (Scop); + end loop; + + R := Relocate_Node (N); + + -- If the scope is Standard, the instantiation is done outside the + -- current compilation unit and, therefore, needs a clean context. + + if Scop = Standard_Standard then + declare + S_Expander_Active : constant Boolean := Expander_Active; + S_Full_Analysis : constant Boolean := Full_Analysis; + S_In_Spec_Expr : constant Boolean := In_Spec_Expression; + S_Inside_A_Generic : constant Boolean := Inside_A_Generic; + + begin + Expander_Active := (Operating_Mode = Opt.Generate_Code); + Full_Analysis := True; + In_Spec_Expression := False; + Inside_A_Generic := False; + + Add_Local_Declaration (R, N, Scop => Scop); + + Expander_Active := S_Expander_Active; + Full_Analysis := S_Full_Analysis; + In_Spec_Expression := S_In_Spec_Expr; + Inside_A_Generic := S_Inside_A_Generic; + end; + + else + Add_Local_Declaration (R, N, Scop => Scop); + end if; + + Ent := Defining_Entity_Of_Instance (R); + Rewrite_As_Renaming (N, Ent); + Analyze (N); + + -- Otherwise we are in the right scope and only need to set the + -- name of the instance. + + else + Ent := Make_Defining_Identifier (Loc, Chars => Nam); + Set_Defining_Unit_Name (N, Ent); + end if; + end if; + end Analyze_Structural_Associations; + ----------------------------------- -- Need_Subprogram_Instance_Body -- ----------------------------------- @@ -6056,9 +6556,12 @@ package body Sem_Ch12 is if (Is_In_Main_Unit (N) or else Is_Inlined_Or_Child_Of_Inlined (Subp)) - -- No need to instantiate bodies in generic units + -- No need to instantiate bodies in generic units, except when the + -- instantiation is in the auxiliary declarations of the main unit; + -- in this case the body is needed, even if the main unit is generic. - and then not Is_Generic_Unit (Cunit_Entity (Main_Unit)) + and then (not Is_Generic_Unit (Cunit_Entity (Main_Unit)) + or else Parent (N) = Aux_Decls_Node (Cunit (Main_Unit))) -- Must be generating code or analyzing code in GNATprove mode @@ -6482,6 +6985,17 @@ package body Sem_Ch12 is Formals => Generic_Formal_Declarations (Act_Tree), F_Copy => Generic_Formal_Declarations (Gen_Decl)); + -- Bail out if the instantiation has been turned into something else + + if Nkind (N) not in N_Subprogram_Instantiation then + if Parent_Installed then + Remove_Parent; + end if; + + Restore_Env; + goto Leave; + end if; + Vis_Prims_List := Check_Hidden_Primitives (Renamings); -- The subprogram itself cannot contain a nested instance, so the @@ -6828,6 +7342,69 @@ package body Sem_Ch12 is end if; end Get_Associated_Node; + ------------------------------------ + -- Build_Structural_Instantiation -- + ------------------------------------ + + function Build_Structural_Instantiation + (N : Node_Id; + Gen_Unit : Entity_Id; + Actuals : List_Id) return Entity_Id + is + Loc : constant Source_Ptr := Sloc (N); + Inst_Id : constant Entity_Id := Make_Temporary (Loc, 'P'); + + Inst : Node_Id; + + begin + case Ekind (Gen_Unit) is + when E_Generic_Function => + Inst := + Make_Function_Instantiation (Loc, + Defining_Unit_Name => Inst_Id, + Name => New_Occurrence_Of (Gen_Unit, Loc), + Generic_Associations => Actuals); + + when E_Generic_Package => + Inst := + Make_Package_Instantiation (Loc, + Defining_Unit_Name => Inst_Id, + Name => New_Occurrence_Of (Gen_Unit, Loc), + Generic_Associations => Actuals); + + when E_Generic_Procedure => + Inst := + Make_Procedure_Instantiation (Loc, + Defining_Unit_Name => Inst_Id, + Name => New_Occurrence_Of (Gen_Unit, Loc), + Generic_Associations => Actuals); + + when others => + raise Program_Error; + end case; + + Set_Is_Internal (Inst_Id); + Set_Is_Structural (Inst); + + -- The instantiation must be added to a declarative part for technical + -- reasons pertaining to freezing (see the Freeze_Package_Instance and + -- Freeze_Subprogram_Instance procedures). + + Add_Local_Declaration (Inst, N, Scop => Empty); + if Error_Posted (Inst) then + return Empty; + end if; + + -- If the structural instance had already been created, this occurrence + -- has been turned into a renaming of it. + + if Nkind (Inst) in N_Renaming_Declaration then + return Defining_Entity (Inst); + else + return Defining_Entity_Of_Instance (Inst); + end if; + end Build_Structural_Instantiation; + ----------------------------------- -- Build_Subprogram_Decl_Wrapper -- ----------------------------------- @@ -11704,7 +12281,7 @@ package body Sem_Ch12 is Formal_Pack := Defining_Unit_Name (Specification (Analyzed_Formal)); -- The actual for a ghost generic formal package should be a ghost - -- package (SPARK RM 6.9(14)). + -- package (SPARK RM 6.9(16)). Check_Ghost_Formal_Procedure_Or_Package (N => Actual, @@ -12023,7 +12600,7 @@ package body Sem_Ch12 is end if; -- The actual for a ghost generic formal procedure should be a ghost - -- procedure (SPARK RM 6.9(14)). + -- procedure (SPARK RM 6.9(16)). if Present (Act_E) and then Ekind (Act_E) = E_Procedure @@ -12530,7 +13107,7 @@ package body Sem_Ch12 is end if; -- The actual for a ghost generic formal IN OUT parameter should be a - -- ghost object (SPARK RM 6.9(14)). + -- ghost object (SPARK RM 6.9(16)). Check_Ghost_Formal_Variable (Actual => Actual, @@ -15912,6 +16489,64 @@ package body Sem_Ch12 is end loop; end Map_Formal_Package_Entities; + -------------------- + -- Mark_Link_Once -- + -------------------- + + procedure Mark_Link_Once (Decls : List_Id) is + procedure Mark_Link_Once (Ent : Entity_Id); + + -------------------- + -- Mark_Link_Once -- + -------------------- + + procedure Mark_Link_Once (Ent : Entity_Id) is + begin + if Is_Public (Ent) then + Set_Is_Link_Once (Ent); + end if; + + if Ekind (Ent) in E_Package | E_Package_Body + and then No (Renamed_Entity (Ent)) + then + declare + Pack_Ent : Entity_Id; + + begin + Pack_Ent := First_Entity (Ent); + while Present (Pack_Ent) loop + Mark_Link_Once (Pack_Ent); + + Next_Entity (Pack_Ent); + end loop; + end; + end if; + end Mark_Link_Once; + + Decl : Node_Id; + Spec : Node_Id; + + begin + Decl := First (Decls); + while Present (Decl) loop + if Nkind (Decl) in N_Generic_Instantiation + and then Is_Structural (Decl) + then + Spec := Instance_Spec (Decl); + + Mark_Link_Once (Defining_Entity (Specification (Spec))); + + if Nkind (Decl) = N_Package_Instantiation + and then Present (Corresponding_Body (Spec)) + then + Mark_Link_Once (Corresponding_Body (Spec)); + end if; + end if; + + Next (Decl); + end loop; + end Mark_Link_Once; + ----------------------- -- Move_Freeze_Nodes -- ----------------------- diff --git a/gcc/ada/sem_ch12.ads b/gcc/ada/sem_ch12.ads index 3e703a5906ca..83c3114667b8 100644 --- a/gcc/ada/sem_ch12.ads +++ b/gcc/ada/sem_ch12.ads @@ -44,6 +44,14 @@ package Sem_Ch12 is -- Must be invoked just at the end of the end of the processing of a -- generic spec or body. + function Build_Structural_Instantiation + (N : Node_Id; + Gen_Unit : Entity_Id; + Actuals : List_Id) return Entity_Id; + -- Build a structural instantiation of Gen_Unit on Actuals at N and return + -- its defining entity, after either having inserted it at the appropriate + -- place in the tree or turned it into a renaming of a previous instance. + procedure Check_Generic_Child_Unit (Gen_Id : Node_Id; Parent_Installed : in out Boolean); @@ -114,6 +122,9 @@ package Sem_Ch12 is -- Return true if E is a package created for an abbreviated instantiation -- to check conformance between formal package and corresponding actual. + procedure Mark_Link_Once (Decls : List_Id); + -- Mark all the structural instances present in Decls as Link Once + function Need_Subprogram_Instance_Body (N : Node_Id; Subp : Entity_Id) return Boolean; diff --git a/gcc/ada/sem_ch13.adb b/gcc/ada/sem_ch13.adb index 31735e41a9c8..22fea0d02907 100644 --- a/gcc/ada/sem_ch13.adb +++ b/gcc/ada/sem_ch13.adb @@ -37,6 +37,7 @@ with Errid; use Errid; with Errout; use Errout; with Exp_Ch3; use Exp_Ch3; with Exp_Disp; use Exp_Disp; +with Exp_Strm; use Exp_Strm; with Exp_Tss; use Exp_Tss; with Exp_Util; use Exp_Util; with Expander; use Expander; @@ -1002,6 +1003,17 @@ package body Sem_Ch13 is -- aspect has the proper profile. If the name is overloaded, check that -- some interpretation is legal. + procedure Check_Nonoverridable_Aspect_Subprograms + (ASN : Node_Id; + E : Entity_Id; + Original : Entity_Id := Empty); + -- RM 13.1.1(18.4/6) requires checking that if any of the subprograms + -- denoted by a nonoverridable aspect ASN has a parameter or result of + -- either type E or access E, then all denoted subprograms are + -- primitive. If missing, Original is initialized with ASN and will not + -- change during the recursive exploration of aggregate aspects, it is + -- used to improve the error message. + procedure Make_Pragma_From_Boolean_Aspect (ASN : Node_Id); -- Given an aspect specification node ASN whose expression is an -- optional Boolean, this routines creates the corresponding pragma @@ -1205,6 +1217,200 @@ package body Sem_Ch13 is end if; end Check_Indexing_Functions; + --------------------------------------------- + -- Check_Nonoverridable_Aspect_Subprograms -- + --------------------------------------------- + + procedure Check_Nonoverridable_Aspect_Subprograms + (ASN : Node_Id; + E : Entity_Id; + Original : Node_Id := Empty) + is + Expr : constant Node_Id := Expression (ASN); + Kind : constant Node_Kind := Nkind (Expr); + + function Required_To_Be_Primitive (Subp : Entity_Id) return Boolean; + -- This function returns True if Subp, belonging to a nonoverridable + -- aspect of the entity E, is required to be a primitive operation. + -- Specifically, whenever either its return type or any of its + -- formals are of either type E or access E. + + function Required_To_Be_Primitive (Subp : Entity_Id) return Boolean is + Return_Typ : constant Entity_Id := Etype (Subp); + Last_Formal : constant Entity_Id := Last_Entity (Subp); + Cursor : Entity_Id := First_Entity (Subp); + begin + if Return_Typ = E + or else (Ekind (Return_Typ) in Access_Kind + and then Directly_Designated_Type (Return_Typ) = E) + then + return True; + + elsif Present (Cursor) then + loop + if Etype (Cursor) = E + or else (Ekind (Cursor) in Access_Kind + and then Directly_Designated_Type (Cursor) = E) + then + return True; + end if; + + exit when Cursor = Last_Formal; + + Cursor := Next_Entity (Cursor); + end loop; + end if; + + return False; + end Required_To_Be_Primitive; + + -- Local Variables + + Valid : Boolean := True; + Problem : Entity_Id := Empty; + + -- Start of processing for Check_Nonoverridable_Aspect_Subprograms + + begin + -- If the aspect specification was effectively inherited from the + -- parent type (so constructed anew by analysis), then no point + -- in validating. + + if not Comes_From_Source (ASN) then + return; + end if; + + -- If the expression is neither an aggregate nor a node denoting an + -- entity, then also no point in validating. + + if Kind not in N_Aggregate | N_Has_Entity then + return; + end if; + + -- Original should point to ASN if this is the first recursive call + + if No (Original) then + Check_Nonoverridable_Aspect_Subprograms + (ASN => ASN, + E => E, + Original => ASN); + return; + end if; + + if Kind = N_Aggregate then + declare + Aggregate_List : constant List_Id := + Component_Associations (Expr); + Current : Node_Id := First (Aggregate_List); + begin + -- Each component association must be checked separately + + while Present (Current) loop + + Check_Nonoverridable_Aspect_Subprograms + (ASN => Current, + E => E, + Original => Original); + + Next (Current); + end loop; + end; + + else + -- Some expressions may be unanalyzed, as some nonoverridable + -- aspects allow forward references. For instance, when the type E + -- is defined inside a package body. + + if No (Entity (Expr)) then + Analyze (Expr); + end if; + + declare + Subp : constant Entity_Id := Entity (Expr); + begin + + -- No point in validating a node that does not represent a + -- subprogram here. + + if not Is_Subprogram (Subp) then + return; + end if; + + if not Is_Overloaded (Expr) then + Valid := (if Required_To_Be_Primitive (Subp) + then Is_Primitive (Subp)); + + Problem := Subp; + + else + declare + Found : Boolean := False; + I : Interp_Index; + It : Interp; + begin + -- Check whether there is at least one interpretation + -- that is required to be primitive. We iterate over all + -- possible interpretations, as some may be removed. + + Get_First_Interp (Expr, I, It); + while Present (It.Nam) loop + + -- If the current interpretation is not declared + -- within the scope of E, then it should not be + -- considered, see RM 13.1.1(8/6). + + if not Within_Scope (It.Nam, Scope (E)) then + Remove_Interp (I); + + else + Found := Found + or else Required_To_Be_Primitive (It.Nam); + end if; + + Get_Next_Interp (I, It); + end loop; + + if Found then + + -- To satisfy the legality rule in RM 13.1.1(18.2/5), + -- if there's at least one interpretation that's + -- primitive, then all of them must be primitive; + -- otherwise we emit an error. + + Get_First_Interp (Expr, I, It); + pragma Warnings (Off, Valid); -- Valid not always True + while Valid and then Present (It.Nam) loop + + Valid := Valid and then Is_Primitive (It.Nam); + Problem := It.Nam; + + Get_Next_Interp (I, It); + end loop; + end if; + end; + end if; + end; + end if; + + if not Valid then + declare + Operation_Kind : constant String := + (if Comes_From_Source (Problem) + then "declared" + else "inherited"); + begin + Error_Msg_Name_1 := Chars (Identifier (Original)); + Error_Msg_Name_2 := Chars (E); + Error_Msg_Name_3 := Chars (Problem); + Error_Msg_Sloc := Sloc (Problem); + Error_Msg_N ("nonoverridable aspect % of type % requires % " + & Operation_Kind + & "# to be a primitive operation", + Original); + end; + end if; + end Check_Nonoverridable_Aspect_Subprograms; + ------------------------------------- -- Make_Pragma_From_Boolean_Aspect -- ------------------------------------- @@ -1548,6 +1754,14 @@ package body Sem_Ch13 is if Present (Ritem) then Analyze (Ritem); end if; + + -- All nonoverriding aspects need further legality checks + + if A_Id in Nonoverridable_Aspect_Id + and then Ada_Version >= Ada_2022 + then + Check_Nonoverridable_Aspect_Subprograms (ASN, E); + end if; end if; end if; @@ -1960,6 +2174,14 @@ package body Sem_Ch13 is -- expression is allowed. Includes checking that the expression -- does not raise Constraint_Error. + procedure Convert_Aspect_With_Assertion_Levels (Aspect : Node_Id); + -- If an Aspect is using an association with an Assertion_Level + -- analyze the aspect with the level and convert it into an aspect + -- without the Assertion_Level. In the case the aspect has + -- associations with Assertion_Levels then multiple aspects are + -- created and each one will point to the original aspect that + -- they were created from in the Original_Aspect field. + function Directly_Specified (Id : Entity_Id; A : Aspect_Id) return Boolean; -- Returns True if the given aspect is directly (as opposed to @@ -3114,6 +3336,73 @@ package body Sem_Ch13 is end case; end Check_Expr_Is_OK_Static_Expression; + ------------------------------------------ + -- Convert_Aspect_With_Assertion_Levels -- + ------------------------------------------ + + procedure Convert_Aspect_With_Assertion_Levels (Aspect : Node_Id) + is + Assoc : Node_Id; + Assocs : List_Id; + Choice : Node_Id; + Level : Entity_Id; + Sub_Expr : Node_Id; + New_Aspect : Node_Id; + begin + Assocs := Component_Associations (Expression (Aspect)); + Assoc := First (Assocs); + + if Present (Expressions (Expression (Aspect))) then + Error_Msg_N + ("wrong syntax for argument of %", Expression (Aspect)); + Error_Msg_N + ("\aspect with Assertion_Level can only contain " + & "contain Assertion_Level associations", + Expression (Aspect)); + end if; + + while Present (Assoc) loop + if List_Length (Choices (Assoc)) > 1 then + Error_Msg_Name_1 := Nam; + Error_Msg_N ("wrong syntax for argument of %", Assoc); + Error_Msg_N + ("\only one Assertion_Level can be associated " + & "with an expression", + Assoc); + end if; + + Choice := First (Choices (Assoc)); + + if Nkind (Choice) /= N_Identifier then + Error_Msg_N ("wrong syntax for argument of %", Assoc); + Error_Msg_N + ("\association must denote an Assertion_Level", Assoc); + end if; + + Level := Get_Assertion_Level (Chars (Choice)); + + Sub_Expr := Expression (Assoc); + New_Aspect := + Make_Aspect_Specification + (Sloc => Sloc (Assoc), + Identifier => New_Copy_Tree (Id), + Expression => Sub_Expr); + + Check_Applicable_Policy (New_Aspect, Level); + + Set_Aspect_Ghost_Assertion_Level (New_Aspect, Level); + + Insert_After (Aspect, New_Aspect); + + -- Store the Original_Aspect for the detection of + -- duplicates. + + Set_Original_Aspect (New_Aspect, Aspect); + + Next (Assoc); + end loop; + end Convert_Aspect_With_Assertion_Levels; + ------------------------ -- Directly_Specified -- ------------------------ @@ -3160,11 +3449,10 @@ package body Sem_Ch13 is -- Set additional semantic fields - if Is_Ignored (Aspect) then - Set_Is_Ignored (Aitem); - elsif Is_Checked (Aspect) then - Set_Is_Checked (Aitem); - end if; + Set_Is_Checked (Aitem, Is_Checked (Aspect)); + Set_Is_Ignored (Aitem, Is_Ignored (Aspect)); + Set_Pragma_Ghost_Assertion_Level + (Aitem, Aspect_Ghost_Assertion_Level (Aspect)); Set_Corresponding_Aspect (Aitem, Aspect); Set_From_Aspect_Specification (Aitem); @@ -3185,7 +3473,24 @@ package body Sem_Ch13 is -- as such for later reference in the tree. This also sets the -- Is_Ignored and Is_Checked flags appropriately. - Check_Applicable_Policy (Aspect); + if Is_Valid_Assertion_Kind (Nam) then + if Is_Checked (Aspect) or else Is_Ignored (Aspect) then + null; + + -- If the Aspect has at least one Assertion_Level argument + -- then split the original Aspect into multiple aspects each + -- with an associated Assertion_Level. + + elsif Has_Assertion_Level_Argument (Aspect) then + Convert_Aspect_With_Assertion_Levels (Aspect); + goto Continue; + else + Check_Applicable_Policy (Aspect); + Set_Aspect_Ghost_Assertion_Level + (Aspect, Standard_Level_Default); + end if; + + end if; if Is_Disabled (Aspect) then goto Continue; @@ -3249,8 +3554,11 @@ package body Sem_Ch13 is if No_Duplicates_Allowed (A_Id) then Anod := First (L); while Anod /= Aspect loop - if Comes_From_Source (Aspect) - and then Same_Aspect (A_Id, Get_Aspect_Id (Anod)) + + if (Comes_From_Source (Aspect) + or else (Original_Aspect (Aspect) /= Anod + and then not From_Same_Aspect (Aspect, Anod))) + and then Same_Aspect (A_Id, Get_Aspect_Id (Anod)) then Error_Msg_Name_1 := Nam; Error_Msg_Sloc := Sloc (Anod); @@ -3260,12 +3568,12 @@ package body Sem_Ch13 is if Class_Present (Anod) = Class_Present (Aspect) then if not Class_Present (Anod) then Error_Msg_NE - ("aspect% for & previously given#", - Id, E); + ("aspect% for & previously given#", Id, E); else Error_Msg_NE ("aspect `%''Class` for & previously given#", - Id, E); + Id, + E); end if; end if; end if; @@ -4157,11 +4465,16 @@ package body Sem_Ch13 is -- Error checking if not All_Extensions_Allowed then + Error_Msg_Name_1 := Nam; + Error_Msg_GNAT_Extension ("aspect %", Loc); goto Continue; end if; - if Ekind (E) /= E_Procedure then - Error_Msg_N ("Initialize must apply to a constructor", N); + if Ekind (E) /= E_Subprogram_Body + or else Nkind (Parent (E)) /= N_Procedure_Specification + then + Error_Msg_N + ("Initialize must apply to a constructor body", N); end if; if Present (Expressions (Expression (Aspect))) then @@ -4200,11 +4513,6 @@ package body Sem_Ch13 is Next_Entity (Type_Comp); end loop; - -- Push the scope and formals for analysis - - Push_Scope (E); - Install_Formals (Defining_Unit_Name (Specification (N))); - -- Analyze the components Aspect_Comp := @@ -4223,10 +4531,6 @@ package body Sem_Ch13 is Dummy_Aggr := New_Copy_Tree (Expression (Aspect)); Resolve_Aggregate (Dummy_Aggr, Typ); Expander_Active := True; - - -- Return the scope - - End_Scope; end Initialize; -- Initializes @@ -4724,6 +5028,12 @@ package body Sem_Ch13 is goto Continue; when Aspect_Constructor => + if not All_Extensions_Allowed then + Error_Msg_Name_1 := Nam; + Error_Msg_GNAT_Extension ("aspect %", Loc); + goto Continue; + end if; + Set_Constructor_Name (E, Expr); Set_Needs_Construction (E); @@ -4796,7 +5106,7 @@ package body Sem_Ch13 is if Class_Present (Aspect) and then A_Id in Aspect_Pre | Aspect_Post and then Is_Subprogram (E) - and then not Is_Ignored_Ghost_Entity (E) + and then not Is_Ignored_Ghost_Entity_In_Codegen (E) then if A_Id = Aspect_Pre then if Is_Ignored_In_Codegen (Aspect) then @@ -4988,6 +5298,80 @@ package body Sem_Ch13 is -- generated yet because the evaluation of the boolean needs -- to be delayed till the freeze point. + -- Super + + when Aspect_Super => Super : + declare + Analyze_Parameter_Expressions : constant Boolean := True; + -- ??? + -- We can analyze actual parameter expressions here (with + -- no context, like the operand of a type conversion), + -- or leave them unanalyzed for now and catch problems + -- when we analyze the generated constructor call + -- (where overload resolution may provide context that + -- resolves some ambiguities). + -- For now, we analyze them here to avoid depending + -- on legality checking performed during expansion. + -- To reverse this decision, set this flag to False. + + begin + -- Error checking + + if not All_Extensions_Allowed then + Error_Msg_Name_1 := Nam; + Error_Msg_GNAT_Extension ("aspect %", Loc); + goto Continue; + end if; + + if Ekind (E) /= E_Subprogram_Body + or else Nkind (Parent (E)) /= N_Procedure_Specification + then + Error_Msg_N ("Super must apply to a constructor body", N); + end if; + + -- handle missing parameter list (an error case) + + if No (Expr) then + Error_Msg_N ("constructor parameters required", N); + + -- Handle parameter list of length more than one + -- (such a list is parsed as an aggregate). + + elsif Nkind (Expr) = N_Aggregate then + if Present (Component_Associations (Expr)) + or else No (Expressions (Expr)) + then + Error_Msg_N + ("malformed constructor parameter list", N); + + elsif Analyze_Parameter_Expressions then + declare + Param_Expr : Node_Id := First (Expressions (Expr)); + begin + while Present (Param_Expr) loop + Analyze (Param_Expr); + Next (Param_Expr); + end loop; + + Set_Analyzed (Expr); + -- Someday Vast may complain that this so-called + -- aggregate has no Etype. For now, we mark it + -- as analyzed and hope that nobody trips over it. + end; + end if; + + -- handle parameter list of length one + + elsif Paren_Count (Expr) = 0 then + Error_Msg_N + ("parentheses missing for constructor parameter list ", + N); + + elsif Analyze_Parameter_Expressions then + Analyze (Expr); + end if; + end Super; + when Boolean_Aspects | Library_Unit_Aspects => @@ -5101,6 +5485,12 @@ package body Sem_Ch13 is Analyze_Aspect_Static; goto Continue; + -- GNAT Core Extension: Checks for this aspect are performed + -- when the corresponding pragma is analyzed. + + elsif A_Id = Aspect_Unsigned_Base_Range then + null; + -- Ada 2022 (AI12-0279) elsif A_Id = Aspect_Yield then @@ -5280,14 +5670,28 @@ package body Sem_Ch13 is goto Continue; end; - -- All other cases, generate attribute definition + -- Generate an attribute definition for access types - else + elsif Is_Access_Type (E) then Aitem := Make_Attribute_Definition_Clause (Loc, Name => Ent, Chars => Name_Storage_Size, Expression => Relocate_Node (Expr)); + + -- This is likely a misplaced aspect. Create a pragma to + -- emit the actual error. + + else + Aitem := + Make_Aitem_Pragma + (Pragma_Argument_Associations => + New_List + (Make_Pragma_Argument_Association + (Loc, Expression => Relocate_Node (Expr))), + Pragma_Name => Name_Storage_Size); + Insert_Pragma (Aitem); + goto Continue; end if; when Aspect_External_Initialization => @@ -5363,7 +5767,9 @@ package body Sem_Ch13 is Set_Declarations (N, New_List); end if; - Prepend (Aitem, Declarations (N)); + if Present (Aitem) then + Prepend (Aitem, Declarations (N)); + end if; elsif Nkind (N) = N_Generic_Package_Declaration then if No (Visible_Declarations (Specification (N))) then @@ -5434,7 +5840,9 @@ package body Sem_Ch13 is -- The pragma is added before source declarations - Prepend_To (Declarations (N), Aitem); + if Present (Aitem) then + Prepend_To (Declarations (N), Aitem); + end if; -- When delay is not required and the context is not a compilation -- unit, we simply insert the pragma/attribute definition clause @@ -7959,32 +8367,59 @@ package body Sem_Ch13 is if Duplicate_Clause then null; - + elsif No (Size) then + Error_Msg_N ("invalid argument for Stream_Size aspect", Nam); elsif Is_Elementary_Type (U_Ent) then - -- Size will be empty if we already detected an error - -- (e.g. Expr is of the wrong type); we might as well - -- give the useful hint below even in that case. - - if No (Size) or else - (Size /= System_Storage_Unit - and then Size /= System_Storage_Unit * 2 - and then Size /= System_Storage_Unit * 3 - and then Size /= System_Storage_Unit * 4 - and then Size /= System_Storage_Unit * 8) - then - Error_Msg_N - ("stream size for elementary type must be 8, 16, 24, " & - "32 or 64", N); + Set_Has_Stream_Size_Clause (U_Ent); - elsif Known_RM_Size (U_Ent) and then RM_Size (U_Ent) > Size then - Error_Msg_Uint_1 := RM_Size (U_Ent); - Error_Msg_N - ("stream size for elementary type must be 8, 16, 24, " & - "32 or 64 and at least ^", N); - end if; + declare + Minimum_Size : constant Uint := + (if Known_RM_Size (U_Ent) + then RM_Size (U_Ent) + else Uint_0); - Set_Has_Stream_Size_Clause (U_Ent); + Size_Or_Zero : constant Uint := + (if Size < Minimum_Size then Uint_0 else Size); + -- If the requested size is smaller than the RM size of the + -- type, we pass zero to Get_Primitives. That will always + -- give us the list of supported sizes we need to report an + -- error. + P : constant Primitive_Result := + Get_Primitives (U_Ent, Size_Or_Zero); + + Error_Text : Bounded_String; + + In_First_Iteration : Boolean := True; + Previous_Value : Nat := 0; + begin + case P.S is + when Possible_Sizes => + Error_Msg_N ("unsupported stream size", N); + + Append + (Error_Text, + "\supported stream sizes for this type: "); + for Sz of P.List loop + if Minimum_Size <= Sz and then Sz /= Previous_Value + then + if In_First_Iteration then + In_First_Iteration := False; + else + Append (Error_Text, ", "); + end if; + + Append (Error_Text, Sz); + + Previous_Value := Sz; + end if; + end loop; + Error_Msg_N (To_String (Error_Text), N); + + when others => + null; + end case; + end; else Error_Msg_N ("Stream_Size cannot be given for &", Nam); end if; @@ -11302,7 +11737,7 @@ package body Sem_Ch13 is -- Case of stream attributes and Put_Image, just have to compare -- entities. However, the expression is just a possibly-overloaded -- name, so we need to verify that one of these interpretations is - -- the one available at at the freeze point. + -- the one available at the freeze point. elsif A_Id in Aspect_Constructor | Aspect_Destructor @@ -11894,6 +12329,7 @@ package body Sem_Ch13 is | Aspect_Relaxed_Initialization | Aspect_SPARK_Mode | Aspect_Subprogram_Variant + | Aspect_Super | Aspect_Suppress | Aspect_Test_Case | Aspect_Unimplemented @@ -12513,8 +12949,8 @@ package body Sem_Ch13 is elsif No (Next_Formal (First_Formal (Subp))) then Error_Msg_Sloc := Sloc (Subp); Illegal_Indexing - ("at least two parameters required for indexing function " - & "defined #"); + ("at least two parameters required for indexing function " + & "defined #"); return; elsif not Subp_Is_Dispatching_Op_Of_Typ @@ -12525,7 +12961,7 @@ package body Sem_Ch13 is then Illegal_Indexing ("indexing aspect requires function with first formal " - & "applying to type& or its class-wide type"); + & "applying to type& or its class-wide type"); return; elsif Aspect = Aspect_Constant_Indexing @@ -12534,7 +12970,7 @@ package body Sem_Ch13 is then Illegal_Indexing ("Constant_Indexing must apply to function with " - & "access-to-constant formal"); + & "access-to-constant formal"); return; end if; @@ -12543,8 +12979,8 @@ package body Sem_Ch13 is if Aspect = Aspect_Variable_Indexing then if not Has_Implicit_Dereference (Ret_Type) then Illegal_Indexing - ("function for Variable_Indexing must return " - & "a reference type"); + ("function for Variable_Indexing must return " + & "a reference type"); return; elsif Is_Access_Constant diff --git a/gcc/ada/sem_ch3.adb b/gcc/ada/sem_ch3.adb index 9f69e4f6cb8d..9ca77089d1a3 100644 --- a/gcc/ada/sem_ch3.adb +++ b/gcc/ada/sem_ch3.adb @@ -1476,9 +1476,15 @@ package body Sem_Ch3 is -- This reset is performed in most cases except where the access type -- has been created for the purposes of allocating or deallocating a -- build-in-place object. Such access types have explicitly set pools - -- and finalization collections. - - if No (Associated_Storage_Pool (T)) then + -- and finalization collections. It is also skipped when Etype (T) is + -- unknown, since attribute Associated_Storage_Pool is only available + -- in the root type of T, and in such case it cannot not be computed + -- (thus causing spurious errors). Etype (T) is unknown when errors + -- have been previously reported on T. + + if Present (Etype (T)) + and then No (Associated_Storage_Pool (T)) + then Set_Finalization_Collection (T, Empty); end if; @@ -1536,7 +1542,6 @@ package body Sem_Ch3 is Analyze_Component_Declaration (Decl); Set_Analyzed (Decl); - Mutate_Ekind (Tag, E_Component); Set_Is_Tag (Tag); Set_Is_Aliased (Tag); Set_Is_Independent (Tag); @@ -1577,7 +1582,6 @@ package body Sem_Ch3 is Analyze_Component_Declaration (Decl); Set_Analyzed (Decl); - Mutate_Ekind (Offset, E_Component); Set_Is_Aliased (Offset); Set_Is_Independent (Offset); Set_Related_Type (Offset, Iface); @@ -2898,12 +2902,14 @@ package body Sem_Ch3 is -- private type from a library unit, otherwise premature freezing of -- the private type will occur. - elsif not Analyzed (Next_Decl) and then Is_Body (Next_Decl) + elsif not Analyzed (Next_Decl) + and then Is_Body (Next_Decl) and then ((Nkind (Next_Decl) /= N_Subprogram_Body - or else not Was_Expression_Function (Next_Decl)) - or else (not Is_Ignored_Ghost_Entity (Current_Scope) - and then not Contains_Lib_Incomplete_Type - (Current_Scope))) + or else not Was_Expression_Function (Next_Decl)) + or else (not Is_Ignored_Ghost_Entity_In_Codegen + (Current_Scope) + and then not Contains_Lib_Incomplete_Type + (Current_Scope))) then -- When a controlled type is frozen, the expander generates stream -- and controlled-type support routines. If the freeze is caused @@ -3034,8 +3040,10 @@ package body Sem_Ch3 is or else In_Package_Body (Current_Scope)); procedure Check_Nonoverridable_Aspects; - -- Apply the rule in RM 13.1.1(18.4/4) on iterator aspects that cannot - -- be overridden, and can only be confirmed on derivation. + -- Apply rules for nonoverridable aspects on types with partial views + -- described in RM 13.1.1 (18.6/6). This procedure must only be called + -- in the partial view completion case, i.e. when T points to the + -- full view and Def_Id points to the partial view. procedure Check_Ops_From_Incomplete_Type; -- If there is a tagged incomplete partial view of the type, traverse @@ -3081,24 +3089,14 @@ package body Sem_Ch3 is -- Local variables - Prev_Aspects : constant List_Id := - Aspect_Specifications (Parent (Def_Id)); - Par_Type : Entity_Id; - Prev_Aspect : Node_Id; + Prev_Aspects : constant List_Id := + Aspect_Specifications (Parent (Def_Id)); + Prev_Aspect : Node_Id; + Par_Type : constant Entity_Id := Etype (T); -- Start of processing for Check_Nonoverridable_Aspects begin - -- Get parent type of derived type. Note that Prev is the entity in - -- the partial declaration, but its contents are now those of full - -- view, while Def_Id reflects the partial view. - - if Is_Private_Type (Def_Id) then - Par_Type := Etype (Full_View (Def_Id)); - else - Par_Type := Etype (Def_Id); - end if; - -- If there is an inherited Implicit_Dereference, verify that it is -- made explicit in the partial view. @@ -3191,9 +3189,29 @@ package body Sem_Ch3 is end if; end Check_Ops_From_Incomplete_Type; + -- Local variables + + Is_Unsigned_Base_Range_Type_Decl : Boolean := False; + -- Start of processing for Analyze_Full_Type_Declaration begin + if Present (Aspect_Specifications (Parent (Def))) then + declare + Asp : Node_Id; + begin + Asp := First (Aspect_Specifications (Parent (Def))); + while Present (Asp) loop + if Chars (Identifier (Asp)) = Name_Unsigned_Base_Range then + Is_Unsigned_Base_Range_Type_Decl := True; + exit; + end if; + + Next (Asp); + end loop; + end; + end if; + Prev := Find_Type_Name (N); -- The full view, if present, now points to the current type. If there @@ -3329,7 +3347,11 @@ package body Sem_Ch3 is Ordinary_Fixed_Point_Type_Declaration (T, Def); when N_Signed_Integer_Type_Definition => - Signed_Integer_Type_Declaration (T, Def); + if Is_Unsigned_Base_Range_Type_Decl then + Unsigned_Base_Range_Type_Declaration (T, Def); + else + Signed_Integer_Type_Declaration (T, Def); + end if; when N_Modular_Type_Definition => Modular_Type_Declaration (T, Def); @@ -3590,11 +3612,7 @@ package body Sem_Ch3 is Generate_Definition (Defining_Identifier (N)); -- Process an incomplete declaration. The identifier must not have been - -- declared already in the scope. However, an incomplete declaration may - -- appear in the private part of a package, for a private type that has - -- already been declared. - - -- In this case, the discriminants (if any) must match + -- declared already in the scope. T := Find_Type_Name (N); @@ -4612,7 +4630,10 @@ package body Sem_Ch3 is Set_Has_Delayed_Freeze (T); elsif not Preanalysis_Active then - Freeze_Before (N, T); + -- Do_Freeze_Profile matters in the case of an object + -- of an anonymous access-to-subprogram type. + + Freeze_Before (N, T, Do_Freeze_Profile => False); end if; end if; @@ -8235,6 +8256,8 @@ package body Sem_Ch3 is if Is_Integer_Type (Parent_Type) then Set_Has_Shift_Operator (Implicit_Base, Has_Shift_Operator (Parent_Type)); + Set_Has_Unsigned_Base_Range_Aspect + (Implicit_Base, Has_Unsigned_Base_Range_Aspect (Parent_Base)); end if; -- The type of the bounds is that of the parent type, and they @@ -10195,7 +10218,7 @@ package body Sem_Ch3 is end if; -- A type extension is automatically Ghost when one of its - -- progenitors is Ghost (SPARK RM 6.9(9)). This property is + -- progenitors is Ghost (SPARK RM 6.9(10)). This property is -- also inherited when the parent type is Ghost, but this is -- done in Build_Derived_Type as the mechanism also handles -- untagged derivations. @@ -10519,7 +10542,7 @@ package body Sem_Ch3 is end if; -- A derived type becomes Ghost when its parent type is also Ghost - -- (SPARK RM 6.9(9)). Note that the Ghost-related attributes are not + -- (SPARK RM 6.9(10)). Note that the Ghost-related attributes are not -- directly inherited because the Ghost policy in effect may differ. if Is_Ghost_Entity (Parent_Type) then @@ -15626,11 +15649,11 @@ package body Sem_Ch3 is -- Initialize new full declaration entity by copying the pertinent -- fields of the corresponding private declaration entity. - -- We temporarily set Ekind to a value appropriate for a type to - -- avoid assert failures in Einfo from checking for setting type - -- attributes on something that is not a type. Ekind (Priv) is an - -- appropriate choice, since it allowed the attributes to be set - -- in the first place. This Ekind value will be modified later. + -- We temporarily set Ekind to a value appropriate for a type to avoid + -- assert failures in Einfo from checking for setting type fields on + -- something that is not a type. Ekind (Priv) is an appropriate choice, + -- since it allowed the fields to be set in the first place. This Ekind + -- value will be modified later. Mutate_Ekind (Full, Ekind (Priv)); @@ -15640,7 +15663,7 @@ package body Sem_Ch3 is Set_Etype (Full, Any_Type); - -- Now start copying attributes + -- Now start copying fields Set_Has_Discriminants (Full, Has_Discriminants (Priv)); @@ -15695,12 +15718,15 @@ package body Sem_Ch3 is Access_Types_To_Process (Freeze_Node (Priv))); end if; - -- Swap the two entities. Now Private is the full type entity and Full - -- is the private one. They will be swapped back at the end of the - -- private part. This swapping ensures that the entity that is visible - -- in the private part is the full declaration. + -- Swap the two entities Exchange_Entities (Priv, Full); + + -- Now the slot Priv points to contains the full type entity and the + -- slot Full points to contains the private one. They will be swapped + -- back at the end of the private part. This swapping ensures that the + -- entity that is visible in the private part is the full declaration. + Set_Is_Not_Self_Hidden (Priv); Append_Entity (Full, Scope (Full)); end Copy_And_Swap; @@ -18729,7 +18755,11 @@ package body Sem_Ch3 is Enter_Name (Id); New_Id := Id; - -- Check invalid completion of private or incomplete type + -- Check invalid completion of private or incomplete type. The + -- completion of an incomplete view must be a non-incomplete type + -- declaration (RM 3.10.1 (3/3)) and the completion of a partial view + -- must be a full type declaration (RM 7.3 (4)). Before Ada 2012, a + -- full type declaration is needed in the two cases. elsif Nkind (N) not in N_Full_Type_Declaration | N_Task_Type_Declaration @@ -18740,8 +18770,6 @@ package body Sem_Ch3 is or else Nkind (N) not in N_Private_Type_Declaration | N_Private_Extension_Declaration) then - -- Completion must be a full type declarations (RM 7.3(4)) - Error_Msg_Sloc := Sloc (Prev); Error_Msg_NE ("invalid completion of }", Id, Prev); @@ -21557,7 +21585,7 @@ package body Sem_Ch3 is Set_Stored_Constraint (Current_Scope, No_Elist); -- Default expressions must be provided either for all or for none - -- of the discriminants of a discriminant part. (RM 3.7.1) + -- of the discriminants of a discriminant part (RM 3.7 (9.1/3)). if Default_Present and then Default_Not_Present then Error_Msg_N @@ -21948,8 +21976,7 @@ package body Sem_Ch3 is else -- For untagged types, verify that a type without discriminants is - -- not completed with an unconstrained type. A separate error message - -- is produced if the full type has defaulted discriminants. + -- not completed with an indefinite type. if Is_Definite_Subtype (Priv_T) and then not Is_Definite_Subtype (Full_T) @@ -21966,7 +21993,7 @@ package body Sem_Ch3 is end if; end if; - -- AI-419: verify that the use of "limited" is consistent + -- RM 7.3 (10.1/3): verify that the use of "limited" is consistent declare Orig_Decl : constant Node_Id := Original_Node (N); @@ -21982,7 +22009,9 @@ package body Sem_Ch3 is and then Limited_Present (Type_Definition (Orig_Decl)) then Error_Msg_N - ("full view of non-limited extension cannot be limited", N); + ("full view of implicitly limited extension must be " + & "implicitly limited", + N); -- Conversely, if the partial view carries the limited keyword, -- the full view must as well, even if it may be redundant. @@ -21991,7 +22020,8 @@ package body Sem_Ch3 is and then not Limited_Present (Type_Definition (Orig_Decl)) then Error_Msg_N - ("full view of limited extension must be explicitly limited", + ("full view of explicitly limited extension must be " + & "explicitly limited", N); end if; end if; @@ -23688,6 +23718,9 @@ package body Sem_Ch3 is -- Check bound to make sure it is integral and static. If not, post -- appropriate error message and set Errs flag + function Has_Pragma_Unsigned_Base_Range return Boolean; + -- Determine if type T has pragma Unsigned_Base_Range + --------------------- -- Can_Derive_From -- --------------------- @@ -23732,6 +23765,39 @@ package body Sem_Ch3 is end if; end Check_Bound; + ------------------------------------ + -- Has_Pragma_Unsigned_Base_Range -- + ------------------------------------ + + function Has_Pragma_Unsigned_Base_Range return Boolean is + Type_Decl : constant Node_Id := Parent (Def); + Nod : Node_Id := Next (Type_Decl); + Pragma_Arg : Node_Id; + + begin + while Present (Nod) loop + if Nkind (Nod) = N_Pragma + and then Chars (Pragma_Identifier (Nod)) + = Name_Unsigned_Base_Range + then + Pragma_Arg := First (Pragma_Argument_Associations (Nod)); + + -- Given that we are processing the full type declaration + -- of T, we cannot analyze yet the reference to the type + -- given in the pragma because it would be reported as + -- premature usage. Hence we rely on the name of the type. + + if Chars (Expression (Pragma_Arg)) = Chars (T) then + return True; + end if; + end if; + + Next (Nod); + end loop; + + return False; + end Has_Pragma_Unsigned_Base_Range; + -- Start of processing for Signed_Integer_Type_Declaration begin @@ -23791,6 +23857,22 @@ package body Sem_Ch3 is Check_Restriction (No_Long_Long_Integers, Def); Base_Typ := Base_Type (Standard_Long_Long_Long_Integer); + -- For performance reasons, we defer checking pragma unsigned base + -- range until we have this case with bounds out of range (since + -- there is no need to perform this check for all signed integer + -- type declarations). + + -- When the bounds of the integer type declaration are smaller, + -- and Unsigned_Base_Range is specified by means of a pragma, the + -- frontend handles the declaration as a regular signed integer + -- type declaration, and the base type is later adjusted (when the + -- pragma is processed); however, when the bounds are out of range + -- for the largest integer type we must handle it explicitly now. + + elsif Has_Pragma_Unsigned_Base_Range then + Unsigned_Base_Range_Type_Declaration (T, Def); + return; + else Base_Typ := Base_Type (Standard_Long_Long_Long_Integer); Error_Msg_N ("integer type definition bounds out of range", Def); @@ -23830,6 +23912,170 @@ package body Sem_Ch3 is Set_Is_Constrained (T); end Signed_Integer_Type_Declaration; + ------------------------------------------ + -- Unsigned_Base_Range_Type_Declaration -- + ------------------------------------------ + + procedure Unsigned_Base_Range_Type_Declaration + (T : Entity_Id; + Def : Node_Id) + is + Implicit_Base : Entity_Id; + Base_Typ : Entity_Id; + Lo_Val : Uint; + Hi_Val : Uint; + Errs : Boolean := False; + Lo : Node_Id; + Hi : Node_Id; + + function Can_Derive_From (E : Entity_Id) return Boolean; + -- Determine whether given bounds allow derivation from specified type + + procedure Check_Bound (Expr : Node_Id); + -- Check bound to make sure it is integral and static. If not, post + -- appropriate error message and set Errs flag + + --------------------- + -- Can_Derive_From -- + --------------------- + + -- Note we check both bounds against both end values, to deal with + -- strange types like ones with a range of 0 .. -12341234. + + function Can_Derive_From (E : Entity_Id) return Boolean is + Lo : constant Uint := Expr_Value (Type_Low_Bound (E)); + Hi : constant Uint := Expr_Value (Type_High_Bound (E)); + begin + return Lo <= Lo_Val and then Lo_Val <= Hi + and then + Lo <= Hi_Val and then Hi_Val <= Hi; + end Can_Derive_From; + + ----------------- + -- Check_Bound -- + ----------------- + + procedure Check_Bound (Expr : Node_Id) is + begin + -- If a range constraint is used as an integer type definition, each + -- bound of the range must be defined by a static expression of some + -- integer type, but the two bounds need not have the same integer + -- type (Negative bounds are allowed.) (RM 3.5.4) + + if not Is_Integer_Type (Etype (Expr)) then + Error_Msg_N + ("integer type definition bounds must be of integer type", Expr); + Errs := True; + + elsif not Is_OK_Static_Expression (Expr) then + Flag_Non_Static_Expr + ("non-static expression used for integer type bound!", Expr); + Errs := True; + + -- Otherwise the bounds are folded into literals + + elsif Is_Entity_Name (Expr) then + Fold_Uint (Expr, Expr_Value (Expr), True); + end if; + end Check_Bound; + + -- Start of processing for Unsigned_Base_Range_Type_Declaration + + begin + -- Create an anonymous base type + + Implicit_Base := + Create_Itype (E_Modular_Integer_Type, Parent (Def), T, 'B'); + + -- Analyze and check the bounds, they can be of any integer type + + Lo := Low_Bound (Def); + Hi := High_Bound (Def); + + -- Arbitrarily use Integer as the type if either bound had an error + + if Hi = Error or else Lo = Error then + Base_Typ := Any_Integer; + Set_Error_Posted (T, True); + Errs := True; + + -- Here both bounds are OK expressions + + else + Analyze_And_Resolve (Lo, Any_Integer); + Analyze_And_Resolve (Hi, Any_Integer); + + Check_Bound (Lo); + Check_Bound (Hi); + + if Errs then + Hi := Type_High_Bound (Standard_Long_Long_Long_Integer); + Lo := Type_Low_Bound (Standard_Long_Long_Long_Integer); + end if; + + -- Find type to derive from + + Lo_Val := Expr_Value (Lo); + Hi_Val := Expr_Value (Hi); + + if Can_Derive_From (Standard_Short_Short_Unsigned) then + Base_Typ := Base_Type (Standard_Short_Short_Unsigned); + + elsif Can_Derive_From (Standard_Short_Unsigned) then + Base_Typ := Base_Type (Standard_Short_Unsigned); + + elsif Can_Derive_From (Standard_Unsigned) then + Base_Typ := Base_Type (Standard_Unsigned); + + elsif Can_Derive_From (Standard_Long_Unsigned) then + Base_Typ := Base_Type (Standard_Long_Unsigned); + + elsif Can_Derive_From (Standard_Long_Long_Unsigned) then + Base_Typ := Base_Type (Standard_Long_Long_Unsigned); + + elsif Can_Derive_From (Standard_Long_Long_Long_Unsigned) then + Base_Typ := Base_Type (Standard_Long_Long_Long_Unsigned); + + else + Base_Typ := Base_Type (Standard_Long_Long_Long_Unsigned); + Error_Msg_N ("unsigned type base range bounds out of range", Def); + Hi := Type_High_Bound (Standard_Long_Long_Long_Unsigned); + Lo := Type_Low_Bound (Standard_Long_Long_Long_Unsigned); + end if; + end if; + + -- Set the type of the bounds to the implicit base: we cannot set it to + -- the new type, because this would be a forward reference for the code + -- generator and, if the original type is user-defined, this could even + -- lead to spurious semantic errors. Furthermore we do not set it to be + -- universal, because this could make it much larger than needed here. + + if not Errs then + Set_Etype (Lo, Implicit_Base); + Set_Etype (Hi, Implicit_Base); + end if; + + -- Complete both implicit base and declared first subtype entities. The + -- inheritance of the rep item chain ensures that SPARK-related pragmas + -- are not clobbered when the signed integer type acts as a full view of + -- a private type. + + Set_Etype (Implicit_Base, Base_Typ); + Set_Size_Info (Implicit_Base, Base_Typ); + Set_RM_Size (Implicit_Base, RM_Size (Base_Typ)); + Set_First_Rep_Item (Implicit_Base, First_Rep_Item (Base_Typ)); + Set_Scalar_Range (Implicit_Base, Scalar_Range (Base_Typ)); + Set_Modulus (Implicit_Base, Modulus (Base_Typ)); + + Mutate_Ekind (T, E_Signed_Integer_Subtype); + Set_Etype (T, Implicit_Base); + Set_Size_Info (T, Implicit_Base); + Inherit_Rep_Item_Chain (T, Implicit_Base); + Set_Scalar_Range (T, Def); + Set_RM_Size (T, UI_From_Int (Minimum_Size (T))); + Set_Is_Constrained (T); + end Unsigned_Base_Range_Type_Declaration; + ------------------------------------- -- Warn_On_Inherently_Limited_Type -- ------------------------------------- diff --git a/gcc/ada/sem_ch3.ads b/gcc/ada/sem_ch3.ads index a97393d3cfe8..0c2e66f293b3 100644 --- a/gcc/ada/sem_ch3.ads +++ b/gcc/ada/sem_ch3.ads @@ -165,12 +165,25 @@ package Sem_Ch3 is -- node or a plain N_Identifier), find the type of the subtype mark. function Find_Type_Name (N : Node_Id) return Entity_Id; - -- Enter the identifier in a type definition, or find the entity already - -- declared, in the case of the full declaration of an incomplete or - -- private type. If the previous declaration is tagged then the class-wide - -- entity is propagated to the identifier to prevent multiple incompatible - -- class-wide types that may be created for self-referential anonymous - -- access components. + -- N must be a type declaration. The declared view can be incomplete, + -- partial, or full. The behavior of this function depends on what + -- declaration, if there is one, N completes: + -- + -- - If N is not a completion, the function enters the entity of N in the + -- name table and returns that entity. + -- - If N completes an incomplete view, the function sets the entity of N + -- as the full view of the incomplete view and returns the incomplete + -- view. + -- - If N completes a partial view, the function "swaps" the partial view + -- and the full view (see Copy_And_Swap) and returns the Entity_Id that, + -- on exit, points to the full view. The value that + -- Defining_Identifier (N) had on entry points to the partial view on + -- exit. + -- + -- If the previous declaration is tagged then the class-wide entity is + -- propagated to the identifier to prevent multiple incompatible class-wide + -- types that may be created for self-referential anonymous access + -- components. function Get_Discriminant_Value (Discriminant : Entity_Id; @@ -337,4 +350,10 @@ package Sem_Ch3 is -- as referenced. Warnings on unused entities, if needed, go on the -- partial view. + procedure Unsigned_Base_Range_Type_Declaration + (T : Entity_Id; + Def : Node_Id); + -- Create a new unsigned integer entity, and apply the constraint to obtain + -- the required first named subtype of this type. + end Sem_Ch3; diff --git a/gcc/ada/sem_ch4.adb b/gcc/ada/sem_ch4.adb index 018c8a079324..5704bf142c84 100644 --- a/gcc/ada/sem_ch4.adb +++ b/gcc/ada/sem_ch4.adb @@ -54,6 +54,7 @@ with Sem_Cat; use Sem_Cat; with Sem_Ch3; use Sem_Ch3; with Sem_Ch6; use Sem_Ch6; with Sem_Ch8; use Sem_Ch8; +with Sem_Ch12; use Sem_Ch12; with Sem_Dim; use Sem_Dim; with Sem_Disp; use Sem_Disp; with Sem_Dist; use Sem_Dist; @@ -629,7 +630,8 @@ package body Sem_Ch4 is begin while Present (Discr) loop - Append (Discriminant_Default_Value (Discr), Constr); + Append_To (Constr, + New_Copy_Tree (Discriminant_Default_Value (Discr))); Next_Discriminant (Discr); end loop; @@ -1263,6 +1265,55 @@ package body Sem_Ch4 is No_Interpretation; end if; + -- Or this may be a reference to a structural instantiation + -- with named associations if GNAT extensions are allowed. + + elsif (Is_Generic_Subprogram (Nam_Ent) + or else Ekind (Nam_Ent) = E_Generic_Package) + and then All_Extensions_Allowed + and then not Is_Empty_List (Parameter_Associations (N)) + then + declare + Act : Node_Id; + Act_List : List_Id; + Assoc : Node_Id; + Inst_Id : Entity_Id; + + begin + Act_List := New_List; + Assoc := First (Parameter_Associations (N)); + while Present (Assoc) loop + if Nkind (Assoc) = N_Parameter_Association then + Act := + Make_Generic_Association (Sloc (Assoc), + Selector_Name => + Relocate_Node (Selector_Name (Assoc)), + Explicit_Generic_Actual_Parameter => + Relocate_Node + (Explicit_Actual_Parameter (Assoc))); + else + Act := + Make_Generic_Association (Sloc (Assoc), + Explicit_Generic_Actual_Parameter => + Relocate_Node (Assoc)); + end if; + + Append_To (Act_List, Act); + Next (Assoc); + end loop; + + Inst_Id := + Build_Structural_Instantiation (N, Nam_Ent, Act_List); + if Present (Inst_Id) then + Rewrite (N, New_Occurrence_Of (Inst_Id, Loc)); + else + Rewrite (N, + Make_Raise_Program_Error (Loc, + Reason => PE_Explicit_Raise)); + end if; + Analyze (N); + end; + else No_Interpretation; end if; @@ -2734,6 +2785,10 @@ package body Sem_Ch4 is -- If the prefix of an indexed component is overloaded, the proper -- interpretation is selected by the index types and the context. + procedure Process_Generic_Instantiation; + -- The prefix in indexed component form is a generic unit. This + -- routine processes it and builds the implicit instantiation. + --------------------------- -- Process_Function_Call -- --------------------------- @@ -3046,6 +3101,37 @@ package body Sem_Ch4 is end if; end Process_Overloaded_Indexed_Component; + ----------------------------------- + -- Process_Generic_Instantiation -- + ----------------------------------- + + procedure Process_Generic_Instantiation is + Act_List : List_Id; + Expr : Node_Id; + Inst_Id : Entity_Id; + + begin + Act_List := New_List; + Expr := First (Expressions (N)); + while Present (Expr) loop + Append_To (Act_List, + Make_Generic_Association (Sloc (Expr), + Explicit_Generic_Actual_Parameter => + Relocate_Node (Expr))); + Next (Expr); + end loop; + + Inst_Id := Build_Structural_Instantiation (N, U_N, Act_List); + if Present (Inst_Id) then + Rewrite (N, New_Occurrence_Of (Inst_Id, Sloc (N))); + else + Rewrite (N, + Make_Raise_Program_Error (Sloc (N), + Reason => PE_Explicit_Raise)); + end if; + Analyze (N); + end Process_Generic_Instantiation; + -- Start of processing for Analyze_Indexed_Component_Form begin @@ -3119,9 +3205,21 @@ package body Sem_Ch4 is -- A common beginner's (or C++ templates fan) error - Error_Msg_N ("generic subprogram cannot be called", N); - Set_Etype (N, Any_Type); - return; + if All_Extensions_Allowed + and then not Is_Empty_List (Expressions (N)) + then + Process_Generic_Instantiation; + else + Error_Msg_N ("generic subprogram cannot be called", N); + Set_Etype (N, Any_Type); + return; + end if; + + elsif Ekind (U_N) = E_Generic_Package + and then All_Extensions_Allowed + and then not Is_Empty_List (Expressions (N)) + then + Process_Generic_Instantiation; else Process_Indexed_Component_Or_Slice; @@ -5352,6 +5450,10 @@ package body Sem_Ch4 is else Prefix_Type := Etype (Pref); + if Prefix_Type = Standard_Void_Type then + pragma Assert (Serious_Errors_Detected > 0); + return; + end if; end if; if Is_Access_Type (Prefix_Type) then @@ -6526,53 +6628,50 @@ package body Sem_Ch4 is procedure Analyze_User_Defined_Binary_Op (N : Node_Id; - Op_Id : Entity_Id) is + Op_Id : Entity_Id) + is + F1 : constant Entity_Id := First_Formal (Op_Id); + F2 : constant Entity_Id := Next_Formal (F1); begin - declare - F1 : constant Entity_Id := First_Formal (Op_Id); - F2 : constant Entity_Id := Next_Formal (F1); - - begin - -- Verify that Op_Id is a visible binary function. Note that since - -- we know Op_Id is overloaded, potentially use visible means use - -- visible for sure (RM 9.4(11)). Be prepared for previous errors. - - if Ekind (Op_Id) = E_Function - and then Present (F2) - and then (Is_Immediately_Visible (Op_Id) - or else Is_Potentially_Use_Visible (Op_Id)) - and then (Has_Compatible_Type (Left_Opnd (N), Etype (F1)) - or else Etype (F1) = Any_Type) - and then (Has_Compatible_Type (Right_Opnd (N), Etype (F2)) - or else Etype (F2) = Any_Type) - then - Add_One_Interp (N, Op_Id, Base_Type (Etype (Op_Id))); + -- Verify that Op_Id is a visible binary function. Note that since + -- we know Op_Id is overloaded, potentially use visible means use + -- visible for sure (RM 9.4(11)). Be prepared for previous errors. + + if Ekind (Op_Id) = E_Function + and then Present (F2) + and then (Is_Immediately_Visible (Op_Id) + or else Is_Potentially_Use_Visible (Op_Id)) + and then (Has_Compatible_Type (Left_Opnd (N), Etype (F1)) + or else Etype (F1) = Any_Type) + and then (Has_Compatible_Type (Right_Opnd (N), Etype (F2)) + or else Etype (F2) = Any_Type) + then + Add_One_Interp (N, Op_Id, Base_Type (Etype (Op_Id))); - -- If the operands are overloaded, indicate that the current - -- type is a viable candidate. This is redundant in most cases, - -- but for equality and comparison operators where the context - -- does not impose a type on the operands, setting the proper - -- type is necessary to avoid subsequent ambiguities during - -- resolution, when both user-defined and predefined operators - -- may be candidates. + -- If the operands are overloaded, indicate that the current + -- type is a viable candidate. This is redundant in most cases, + -- but for equality and comparison operators where the context + -- does not impose a type on the operands, setting the proper + -- type is necessary to avoid subsequent ambiguities during + -- resolution, when both user-defined and predefined operators + -- may be candidates. - if Is_Overloaded (Left_Opnd (N)) then - Set_Etype (Left_Opnd (N), Etype (F1)); - end if; + if Is_Overloaded (Left_Opnd (N)) then + Set_Etype (Left_Opnd (N), Etype (F1)); + end if; - if Is_Overloaded (Right_Opnd (N)) then - Set_Etype (Right_Opnd (N), Etype (F2)); - end if; + if Is_Overloaded (Right_Opnd (N)) then + Set_Etype (Right_Opnd (N), Etype (F2)); + end if; - if Debug_Flag_E then - Write_Str ("user defined operator "); - Write_Name (Chars (Op_Id)); - Write_Str (" on node "); - Write_Int (Int (N)); - Write_Eol; - end if; + if Debug_Flag_E then + Write_Str ("user defined operator "); + Write_Name (Chars (Op_Id)); + Write_Str (" on node "); + Write_Int (Int (N)); + Write_Eol; end if; - end; + end if; end Analyze_User_Defined_Binary_Op; ----------------------------------- diff --git a/gcc/ada/sem_ch5.adb b/gcc/ada/sem_ch5.adb index 9e4936bd6293..a767ee0b560f 100644 --- a/gcc/ada/sem_ch5.adb +++ b/gcc/ada/sem_ch5.adb @@ -1696,10 +1696,15 @@ package body Sem_Ch5 is -- interpretation of N. function Make_Call return N_Procedure_Call_Statement_Id is + Id : constant Node_Id := Make_Identifier (Loc, Name_Continue); + X : constant N_Procedure_Call_Statement_Id := + Make_Procedure_Call_Statement (Loc, Id); begin - return - Make_Procedure_Call_Statement - (Loc, Make_Identifier (Loc, Name_Continue)); + -- If we settle for the procedure call interpretation, we set + -- Comes_From_Source since the user did type out the call explicitly. + Set_Comes_From_Source (Id); + Set_Comes_From_Source (X); + return X; end Make_Call; function Make_Stmt return N_Continue_Statement_Id is @@ -2155,7 +2160,10 @@ package body Sem_Ch5 is Loc : constant Source_Ptr := Sloc (N); Subt : constant Node_Id := Subtype_Indication (N); + Assoc : Node_Id; Bas : Entity_Id := Empty; -- initialize to prevent warning + Iter_Asp : Node_Id; + Iter_Func : Node_Id; Typ : Entity_Id; procedure Check_Reverse_Iteration (Typ : Entity_Id); @@ -2865,12 +2873,9 @@ package body Sem_Ch5 is -- in the container package. We obtain it by name for a predefined -- container, or through the Iterable aspect for a formal one. - if Has_Aspect (Typ, Aspect_Iterable) then - Set_Etype (Def_Id, - Get_Cursor_Type - (Parent (Find_Value_Of_Aspect (Typ, Aspect_Iterable)), - Typ)); - + Iter_Asp := Find_Aspect (Typ, Aspect_Iterable); + if Present (Iter_Asp) then + Set_Etype (Def_Id, Get_Cursor_Type (Iter_Asp, Typ)); else Set_Etype (Def_Id, Get_Cursor_Type (Typ)); Check_Reverse_Iteration (Etype (Iter_Name)); @@ -2879,6 +2884,25 @@ package body Sem_Ch5 is end if; end if; + -- Validate the ghost context of he iterator function used for the + -- iterable aspect. + + Iter_Asp := Find_Aspect (Typ, Aspect_Iterable); + if Present (Iter_Asp) then + Assoc := First (Component_Associations (Expression (Iter_Asp))); + while Present (Assoc) loop + Iter_Func := Expression (Assoc); + if Nkind (Iter_Func) in N_Has_Entity + and then Present (Entity (Iter_Func)) + and then Is_Ghost_Entity (Entity (Iter_Func)) + then + Check_Ghost_Context (Entity (Iter_Func), Parent (N)); + end if; + + Next (Assoc); + end loop; + end if; + -- Preanalyze the filter. Expansion will take place when enclosing -- loop is expanded. diff --git a/gcc/ada/sem_ch6.adb b/gcc/ada/sem_ch6.adb index b7ddc4b7a6a6..5e84889e401d 100644 --- a/gcc/ada/sem_ch6.adb +++ b/gcc/ada/sem_ch6.adb @@ -436,11 +436,20 @@ package body Sem_Ch6 is Set_Parent (New_Body, Parent (N)); + -- Disable Ghost checks for this early analysis on the expression. + -- We have not analyzed the new body of the expression function + -- yet so the ghost region is not set up properly for the ghost + -- context checks yet. Avoid the checks for now as the expression + -- will be re-analyzed when the expression function is replaced + -- with the function body. + + Ghost_Context_Checks_Disabled := True; Freeze_Expr_Types (Def_Id => Def_Id, Typ => Typ, Expr => Expr, N => N); + Ghost_Context_Checks_Disabled := False; end if; -- For navigation purposes, indicate that the function is a body @@ -581,7 +590,8 @@ package body Sem_Ch6 is -- Ghost subprogram. if Inside_A_Generic then - Set_Has_Completion (Def_Id, not Is_Ignored_Ghost_Entity (Def_Id)); + Set_Has_Completion + (Def_Id, not Is_Ignored_Ghost_Entity_In_Codegen (Def_Id)); Push_Scope (Def_Id); Install_Formals (Def_Id); Preanalyze_And_Resolve_Spec_Expression (Expr, Typ); @@ -3864,7 +3874,7 @@ package body Sem_Ch6 is -- Separate spec is not present if No (Spec_Id) then - Create_Extra_Formals (Body_Id); + Create_Extra_Formals (Body_Id, Related_Nod => N); -- Separate spec is present; deal with freezing issues @@ -3883,7 +3893,7 @@ package body Sem_Ch6 is and then Is_Build_In_Place_Function (Spec_Id) and then not Has_BIP_Formals (Spec_Id) then - Create_Extra_Formals (Spec_Id); + Create_Extra_Formals (Spec_Id, Related_Nod => N); pragma Assert (not Expander_Active or else Extra_Formals_Known (Spec_Id)); Compute_Returns_By_Ref (Spec_Id); @@ -3907,7 +3917,7 @@ package body Sem_Ch6 is and then Serious_Errors_Detected = 0 and then (Expander_Active or else Operating_Mode = Check_Semantics - or else Is_Ignored_Ghost_Entity (Spec_Id)) + or else Is_Ignored_Ghost_Entity_In_Codegen (Spec_Id)) then -- The body generated for an expression function that is not a -- completion is a freeze point neither for the profile nor for @@ -3933,7 +3943,7 @@ package body Sem_Ch6 is and then Serious_Errors_Detected = 0 then Set_Has_Delayed_Freeze (Spec_Id); - Create_Extra_Formals (Spec_Id); + Create_Extra_Formals (Spec_Id, Related_Nod => N); Freeze_Before (N, Spec_Id); end if; end if; @@ -7752,6 +7762,7 @@ package body Sem_Ch6 is or else not Is_Dispatching_Operation (Subp) or else No (Find_Dispatching_Type (Subp)) or else not Is_Interface (Find_Dispatching_Type (Subp)) + or else Parent (Subp) not in N_Subprogram_Specification_Id then null; @@ -8549,7 +8560,10 @@ package body Sem_Ch6 is -- Create_Extra_Formals -- -------------------------- - procedure Create_Extra_Formals (E : Entity_Id) is + procedure Create_Extra_Formals + (E : Entity_Id; + Related_Nod : Node_Id := Empty) + is First_Extra : Entity_Id := Empty; Formal : Entity_Id; Last_Extra : Entity_Id := Empty; @@ -8823,7 +8837,8 @@ package body Sem_Ch6 is use Deferred_Extra_Formals_Support; Can_Be_Deferred : constant Boolean := - not Is_Unsupported_Extra_Formals_Entity (E); + not Is_Unsupported_Extra_Formals_Entity (E, + Related_Nod); Alias_Formal : Entity_Id := Empty; Alias_Subp : Entity_Id := Empty; Formal_Type : Entity_Id; @@ -8906,7 +8921,7 @@ package body Sem_Ch6 is pragma Assert (Is_Generic_Instance (E) = Is_Generic_Instance (Ultimate_Alias (E))); - Create_Extra_Formals (Ultimate_Alias (E)); + Create_Extra_Formals (Ultimate_Alias (E), Related_Nod); pragma Assert (not Expander_Active or else Extra_Formals_Known (Ultimate_Alias (E))); @@ -9079,7 +9094,7 @@ package body Sem_Ch6 is -- function Parent_Subprogram). if Ultimate_Alias (Parent_Subp) /= Ref_E then - Create_Extra_Formals (Parent_Subp); + Create_Extra_Formals (Parent_Subp, Related_Nod); end if; Parent_Formal := First_Formal (Parent_Subp); @@ -9114,7 +9129,7 @@ package body Sem_Ch6 is -- Ensure that the ultimate alias has all its extra formals elsif Present (Alias_Subp) then - Create_Extra_Formals (Alias_Subp); + Create_Extra_Formals (Alias_Subp, Related_Nod); Alias_Formal := First_Formal (Alias_Subp); end if; @@ -11772,16 +11787,18 @@ package body Sem_Ch6 is Is_Primitive := False; if not Comes_From_Source (S) then + if Present (Derived_Type) then - -- Add an inherited primitive for an untagged derived type to - -- Derived_Type's list of primitives. Tagged primitives are - -- dealt with in Check_Dispatching_Operation. Do this even when - -- Extensions_Allowed is False to issue better error messages. + -- Add an inherited primitive for an untagged derived type to + -- Derived_Type's list of primitives. Tagged primitives are + -- dealt with in Check_Dispatching_Operation. Do this even when + -- Extensions_Allowed is False to issue better error messages. - if Present (Derived_Type) - and then not Is_Tagged_Type (Derived_Type) - then - Append_Unique_Elmt (S, Primitive_Operations (Derived_Type)); + if not Is_Tagged_Type (Derived_Type) then + Append_Unique_Elmt (S, Primitive_Operations (Derived_Type)); + end if; + + Set_Is_Primitive (S); end if; -- If subprogram is at library level, it is not primitive operation @@ -11822,7 +11839,7 @@ package body Sem_Ch6 is Check_Private_Overriding (B_Typ); -- The Ghost policy in effect at the point of declaration -- or a tagged type and a primitive operation must match - -- (SPARK RM 6.9(18)). + -- (SPARK RM 6.9(21)). Check_Ghost_Primitive (S, B_Typ); end if; @@ -11863,7 +11880,7 @@ package body Sem_Ch6 is -- The Ghost policy in effect at the point of declaration -- of a tagged type and a primitive operation must match - -- (SPARK RM 6.9(18)). + -- (SPARK RM 6.9(21)). Check_Ghost_Primitive (S, B_Typ); end if; @@ -11896,7 +11913,7 @@ package body Sem_Ch6 is -- The Ghost policy in effect at the point of declaration of a -- tagged type and a primitive operation must match - -- (SPARK RM 6.9(18)). + -- (SPARK RM 6.9(21)). Check_Ghost_Primitive (S, B_Typ); end if; @@ -12367,7 +12384,7 @@ package body Sem_Ch6 is -- The Ghost policy in effect at the point of declaration of a -- parent subprogram and an overriding subprogram must match - -- (SPARK RM 6.9(19)). + -- (SPARK RM 6.9(21)). Check_Ghost_Overriding (S, Overridden_Subp); end if; @@ -12530,7 +12547,7 @@ package body Sem_Ch6 is -- The Ghost policy in effect at the point of declaration -- of a parent subprogram and an overriding subprogram - -- must match (SPARK RM 6.9(19)). + -- must match (SPARK RM 6.9(21)). Check_Ghost_Overriding (E, S); end if; @@ -12734,7 +12751,7 @@ package body Sem_Ch6 is -- The Ghost policy in effect at the point of declaration -- of a parent subprogram and an overriding subprogram - -- must match (SPARK RM 6.9(19)). + -- must match (SPARK RM 6.9(21)). Check_Ghost_Overriding (S, E); @@ -12900,7 +12917,7 @@ package body Sem_Ch6 is -- The Ghost policy in effect at the point of declaration of a parent -- subprogram and an overriding subprogram must match - -- (SPARK RM 6.9(19)). + -- (SPARK RM 6.9(21)). Check_Ghost_Overriding (S, Overridden_Subp); @@ -13111,8 +13128,8 @@ package body Sem_Ch6 is -- formals of the enclosing scope are available before -- adding the extra actuals of this call. - Create_Extra_Formals (Scop_Id); - Create_Extra_Formals (Call_Id); + Create_Extra_Formals (Scop_Id, Related_Nod => Call_Node); + Create_Extra_Formals (Call_Id, Related_Nod => Call_Node); pragma Assert (Extra_Formals_Known (Scop_Id)); pragma Assert (Extra_Formals_Known (Call_Id)); @@ -13285,8 +13302,11 @@ package body Sem_Ch6 is is Comp_Unit : constant Entity_Id := Cunit_Entity (Get_Source_Unit (Call_Node)); + begin - return not Underlying_Types_Available (Id) + return Expander_Active + and then not Extra_Formals_Known (Id) + and then not Underlying_Types_Available (Id) and then Is_Compilation_Unit (Comp_Unit) and then Ekind (Comp_Unit) in E_Package | E_Package_Body @@ -13305,12 +13325,18 @@ package body Sem_Ch6 is -- (AI05-0151-1/08). function Is_Unsupported_Extra_Formals_Entity - (Id : Entity_Id) return Boolean + (Id : Entity_Id; + Related_Nod : Node_Id := Empty) return Boolean is + Ref_Node : constant Node_Id := (if Present (Related_Nod) then + Related_Nod + else Id); Comp_Unit : constant Entity_Id := - Cunit_Entity (Get_Source_Unit (Id)); + Cunit_Entity (Get_Source_Unit (Ref_Node)); begin - return not Underlying_Types_Available (Id) + return Expander_Active + and then not Extra_Formals_Known (Id) + and then not Underlying_Types_Available (Id) and then Is_Compilation_Unit (Comp_Unit) and then Ekind (Comp_Unit) in E_Package_Body | E_Subprogram_Body; diff --git a/gcc/ada/sem_ch6.ads b/gcc/ada/sem_ch6.ads index 4ef5b654bb01..3c6de705097d 100644 --- a/gcc/ada/sem_ch6.ads +++ b/gcc/ada/sem_ch6.ads @@ -160,13 +160,23 @@ package Sem_Ch6 is -- True when this is a check against a formal access-to-subprogram type, -- indicating that mapping of types is needed. - procedure Create_Extra_Formals (E : Entity_Id); + procedure Create_Extra_Formals + (E : Entity_Id; + Related_Nod : Node_Id := Empty); -- For each parameter of a subprogram or entry that requires an additional -- formal (such as for access parameters and indefinite discriminated -- parameters), creates the appropriate formal and attach it to its -- associated parameter. Each extra formal will also be appended to -- the end of Subp's parameter list (with each subsequent extra formal -- being attached to the preceding extra formal). + -- + -- Related_Nod is the node motivating the frontend call to create the + -- extra formals; it is not passed when the node causing the call is E + -- (for example, as part of freezing E). Related_Nod provides the context + -- where the extra formals are created, and it is used to determine if + -- the creation of the extra formals can be deferred when the underlying + -- type of some formal (or its return type) is not available, and thus + -- improve the support for AI05-0151-1/08. function Extra_Formals_Match_OK (E : Entity_Id; @@ -432,12 +442,15 @@ package Sem_Ch6 is -- been registered to defer the addition of its extra formals. function Is_Unsupported_Extra_Formals_Entity - (Id : Entity_Id) return Boolean; + (Id : Entity_Id; + Related_Nod : Node_Id := Empty) return Boolean; -- Id is a subprogram, subprogram type, or entry. Return True if Id is -- unsupported for deferring the addition of its extra formals; that is, -- it is defined in a compilation unit that is a package body or a -- subprogram body, and the underlying type of some of its parameters - -- or result type is not available. + -- or result type is not available. Related_Nod is the node where this + -- check is performed (it is generally a subprogram call); if it is not + -- available then the location of entity Id is used as its related node. -- -- The context for this case is an unsupported case of AI05-0151-1/08 -- that allows incomplete tagged types as parameter and result types. diff --git a/gcc/ada/sem_ch7.adb b/gcc/ada/sem_ch7.adb index d28bafb3378c..1d838e24bf48 100644 --- a/gcc/ada/sem_ch7.adb +++ b/gcc/ada/sem_ch7.adb @@ -2521,11 +2521,13 @@ package body Sem_Ch7 is and then Scope (Full_View (Id)) = Scope (Id) and then Ekind (Full_View (Id)) /= E_Incomplete_Type then + Full := Full_View (Id); + -- If there is a use-type clause on the private type, set the full -- view accordingly. - Set_In_Use (Full_View (Id), In_Use (Id)); - Full := Full_View (Id); + Set_In_Use (Full, In_Use (Id)); + Set_Current_Use_Clause (Full, Current_Use_Clause (Id)); if Is_Private_Base_Type (Full) and then Has_Private_Declaration (Full) @@ -2758,9 +2760,6 @@ package body Sem_Ch7 is Set_Is_Tagged_Type (Id, Tagged_Present (Def)); - Set_Discriminant_Constraint (Id, No_Elist); - Set_Stored_Constraint (Id, No_Elist); - if Present (Discriminant_Specifications (N)) then Push_Scope (Id); Process_Discriminants (N); @@ -2896,7 +2895,12 @@ package body Sem_Ch7 is -- When compiling a child unit this needs to be done recursively. function Type_In_Use (T : Entity_Id) return Boolean; - -- Check whether type or base type appear in an active use_type clause + -- Check whether type T is declared in P and appears in an active + -- use_type clause. + + function Type_Of_Primitive_In_Use_All (Id : Entity_Id) return Boolean; + -- Check whether the profile of primitive subprogram Id mentions a type + -- declared in P that appears in an active use-all-type clause. ------------------------------ -- Preserve_Full_Attributes -- @@ -3061,11 +3065,86 @@ package body Sem_Ch7 is ----------------- function Type_In_Use (T : Entity_Id) return Boolean is + BT : constant Entity_Id := Base_Type (T); begin - return Scope (Base_Type (T)) = P - and then (In_Use (T) or else In_Use (Base_Type (T))); + return Scope (BT) = P and then (In_Use (T) or else In_Use (BT)); end Type_In_Use; + ---------------------------------- + -- Type_Of_Primitive_In_Use_All -- + ---------------------------------- + + function Type_Of_Primitive_In_Use_All (Id : Entity_Id) return Boolean is + function Type_In_Use_All (T : Entity_Id) return Boolean; + -- Check whether type T is declared in P and appears in an active + -- use-all-type clause. + + --------------------- + -- Type_In_Use_All -- + --------------------- + + function Type_In_Use_All (T : Entity_Id) return Boolean is + begin + return Type_In_Use (T) + and then Nkind (Current_Use_Clause (T)) = N_Use_Type_Clause + and then All_Present (Current_Use_Clause (T)); + end Type_In_Use_All; + + -- Local variables + + F : Node_Id; + + -- Start of processing for Type_Of_Primitive_In_Use_All + + begin + -- The use-all-type clauses were introduced in Ada 2005 + + if Ada_Version <= Ada_95 then + return False; + end if; + + -- For enumeration literals, check type + + if Ekind (Id) = E_Enumeration_Literal then + return Type_In_Use_All (Etype (Id)); + end if; + + -- For functions, check return type + + if Ekind (Id) = E_Function then + declare + Typ : constant Entity_Id := + (if Ekind (Etype (Id)) = E_Anonymous_Access_Type + then Designated_Type (Etype (Id)) + else Etype (Id)); + begin + if Type_In_Use_All (Typ) then + return True; + end if; + end; + end if; + + -- For all subprograms, check formals + + F := First_Formal (Id); + while Present (F) loop + declare + Typ : constant Entity_Id := + (if Ekind (Etype (F)) = E_Anonymous_Access_Type + then Designated_Type (Etype (F)) + else Etype (F)); + begin + if Type_In_Use_All (Typ) then + return True; + end if; + end; + + Next_Formal (F); + end loop; + + return False; + end Type_Of_Primitive_In_Use_All; + -- Start of processing for Uninstall_Declarations begin @@ -3123,13 +3202,13 @@ package body Sem_Ch7 is elsif No (Etype (Id)) and then Serious_Errors_Detected /= 0 then null; - -- We need to avoid incorrectly marking enumeration literals as - -- non-visible when a visible use-all-type clause is in effect. + -- RM 8.4(8.1/3): Each primitive subprogram of T, including each + -- enumeration literal (if any), is potentially use-visible if T + -- is named in an active use-all-type clause. - elsif Type_In_Use (Etype (Id)) - and then Nkind (Current_Use_Clause (Etype (Id))) = - N_Use_Type_Clause - and then All_Present (Current_Use_Clause (Etype (Id))) + elsif (Ekind (Id) = E_Enumeration_Literal + or else (Is_Subprogram (Id) and then Is_Primitive (Id))) + and then Type_Of_Primitive_In_Use_All (Id) then null; diff --git a/gcc/ada/sem_ch8.adb b/gcc/ada/sem_ch8.adb index e6ef65860d63..4814c0301edb 100644 --- a/gcc/ada/sem_ch8.adb +++ b/gcc/ada/sem_ch8.adb @@ -4340,7 +4340,12 @@ package body Sem_Ch8 is -- by inserting an extra with clause since redundant clauses don't -- really matter. - if All_Extensions_Allowed and then Is_In_Context_Clause (Clause) then + if All_Extensions_Allowed + and then Is_In_Context_Clause (Clause) + and then Nkind (Pack) in N_Expanded_Name + | N_Identifier + | N_Selected_Component + then declare Unum : Unit_Number_Type; With_Clause : constant Node_Id := @@ -4531,6 +4536,10 @@ package body Sem_Ch8 is Id := Subtype_Mark (N); Find_Type (Id); + if not Is_Entity_Name (Id) then + pragma Assert (Serious_Errors_Detected > 0); + return; + end if; E := Base_Type (Entity (Id)); -- There are many cases where a use_type_clause may be reanalyzed due to @@ -5031,10 +5040,37 @@ package body Sem_Ch8 is ----------------------------------- procedure Check_In_Previous_With_Clause (N, Nam : Node_Id) is - Pack : constant Entity_Id := Entity (Original_Node (Nam)); + + function Get_Name (N : Node_Id) return Node_Id; + -- Return the name of a package that may be present in a clause + + -------------- + -- Get_Name -- + -------------- + + function Get_Name (N : Node_Id) return Node_Id is + begin + case Nkind (N) is + when N_Indexed_Component => + return Prefix (N); + + when N_Function_Call => + return Name (N); + + when others => + return N; + end case; + end Get_Name; + + -- Local variables + + Pack : constant Entity_Id := Entity (Get_Name (Original_Node (Nam))); + Item : Node_Id; Par : Node_Id; + -- Start of processing for Check_In_Previous_With_Clause + begin Item := First (Context_Items (Parent (N))); while Present (Item) and then Item /= N loop @@ -5045,7 +5081,7 @@ package body Sem_Ch8 is and then Nkind (Name (Item)) /= N_Selected_Component and then Entity (Name (Item)) = Pack then - Par := Nam; + Par := Get_Name (Original_Node (Nam)); -- Find root library unit in with_clause @@ -5053,7 +5089,7 @@ package body Sem_Ch8 is Par := Prefix (Par); end loop; - if Is_Child_Unit (Entity (Original_Node (Par))) then + if Is_Child_Unit (Entity (Par)) then Error_Msg_NE ("& is not directly visible", Par, Entity (Par)); else return; @@ -5085,6 +5121,14 @@ package body Sem_Ch8 is if Nkind (Parent (N)) /= N_Compilation_Unit then return; + -- Structural instances can always be renamed + + elsif Is_Generic_Instance (Old_E) + and then Present (Get_Unit_Instantiation_Node (Old_E)) + and then Is_Structural (Get_Unit_Instantiation_Node (Old_E)) + then + return; + -- Check for library unit. Note that we used to check for the scope -- being Standard here, but that was wrong for Standard itself. @@ -5467,10 +5511,7 @@ package body Sem_Ch8 is end if; end if; - if Is_Empty_Elmt_List (Used_Operations (N)) then - return; - - else + if Present (Used_Operations (N)) then Elmt := First_Elmt (Used_Operations (N)); while Present (Elmt) loop Set_Is_Potentially_Use_Visible (Node (Elmt), False); diff --git a/gcc/ada/sem_dim.adb b/gcc/ada/sem_dim.adb index 139ed661f901..822c1284d539 100644 --- a/gcc/ada/sem_dim.adb +++ b/gcc/ada/sem_dim.adb @@ -1273,7 +1273,9 @@ package body Sem_Dim is -- Get the expression from the component - if Nkind (Comp) = N_Component_Association then + if Nkind (Comp) in N_Component_Association + | N_Iterated_Component_Association + then Expr := Expression (Comp); else Expr := Comp; diff --git a/gcc/ada/sem_elab.adb b/gcc/ada/sem_elab.adb index 77b1e120b800..0ce2b35305a1 100644 --- a/gcc/ada/sem_elab.adb +++ b/gcc/ada/sem_elab.adb @@ -11199,7 +11199,7 @@ package body Sem_Elab is (Id : Entity_Id) return Extended_Ghost_Mode is begin - return To_Ghost_Mode (Is_Ignored_Ghost_Entity (Id)); + return To_Ghost_Mode (Is_Ignored_Ghost_Entity_In_Codegen (Id)); end Ghost_Mode_Of_Entity; ------------------------ diff --git a/gcc/ada/sem_prag.adb b/gcc/ada/sem_prag.adb index 4fd5b658a78d..28c5f1776dbb 100644 --- a/gcc/ada/sem_prag.adb +++ b/gcc/ada/sem_prag.adb @@ -101,6 +101,121 @@ with System.Case_Util; package body Sem_Prag is + ---------------------------------- + -- Handling of Assertion Levels -- + ---------------------------------- + + -- Assertion levels are special entities declared using pragma + -- Assertion_Level. Assertion levels can be used in most Assertion_Kind + -- pragmas to associate a given level with a given list of existing + -- arguments. E.g. + -- + -- pragma Assert (Level1 => (Expr1, "Msg1"), + -- Level2 => (Expr2, "Msg2")); + -- + -- Assertion levels can also be used in pragma Assertion_Policy and + -- Check_Policy as a valid policy name. E.g. + -- + -- pragma Assertion_Policy (Level1 => Check); + + -------------------------------- + -- Declaring Assertion Levels -- + -------------------------------- + + -- Assertion levels are declared using configuration level pragma + -- Assertion_Level. We create a new E_Assertion_Level entity for each + -- pragma and add each unique level to the Assertion_Levels table. + -- + -- A pragma can be declared with dependencies. e.g. + -- + -- pragma Assertion_Level (L1); + -- pragma Assertion_Level (L2, Depends => L1); + -- pragma Assertion_Level (L3, Depends => L2); + -- + -- Levels that a level depends are called parent levels. Levels that depend + -- on a given level are called child levels. These dependencies are stored + -- in an E_Assertion_Level entity as attributes Parent_Levels and + -- Child_Levels. + -- + -- When a pragma with the same level name is declared, we check that the + -- assertion level is declared with the same dependencies as the existing + -- level. Otherwise an error is raised. + + package Assertion_Levels is new Table.Table ( + Table_Component_Type => Entity_Id, + Table_Index_Type => Nat, + Table_Low_Bound => 1, + Table_Initial => 30, + Table_Increment => 200, + Table_Name => "Assertion_Levels"); + + ------------------------------------------- + -- Applying Policies to Assertion Levels -- + ------------------------------------------- + + -- When a policy is applied to an assertion level, all assertions + -- associated with that level are subjected to the same policy. Depending + -- on the policy value, the same policy is applied to its dependencies. + -- + -- Consider the following assertion levels: + -- + -- pragma Assertion_Level (L1); + -- pragma Assertion_Level (L2, Depends => L1); + -- pragma Assertion_Level (L3, Depends => L2); + -- + -- When policy Check (or On) is applied to an assertion level, it is also + -- applied to all of its transitive parent levels. For example + -- + -- pragma Assertion_Policy (L3 => Check); + -- + -- applies policy Check to L2 and L1. + -- + -- When policy Ignore (or Off) is applied to an assertion level, it is also + -- applied to all of its transitive child levels. For example + -- + -- pragma Assertion_Policy (L1 => Ignore); + -- + -- applies the policy Ignore for L2 and L3. + -- + -- Note that assertion levels are not allowed to have the same name as any + -- other Assertion_Kind defined in the RM in order to avoid unintentional + -- name overloading. + + -------------------------------------------------- + -- Handling of Assertions with Assertion Levels -- + -------------------------------------------------- + + -- Each Assertion pragma (see Is_Valid_Assertion) supports a new syntax + -- where the existing arguments can be associated with an assertion level. + -- + -- Each association is converted into a new pragma with the same name but + -- without the level argument, and the old pragma is rewritten as N_Null. + -- An applicable policy for those pragmas is calculated by looking at the + -- first active Check_Policy that either matches the pragma name or the + -- name of the Assertion_Level. The following policy-based attributes are + -- set for the given pramga: + -- + -- * Is_Checked - Based on the policy + -- * Is_Ignored - Based on the policy + -- * Is_Disabled - Based on the policy + -- * Pragma_Ghost_Assertion_Level - level associated with the assertion. + -- * Original_Pragma - reference to the original pragma that had the + -- Assertion_Levels. + -- + -- For example, the following pragma: + -- + -- pragma Assert (L1 => (Expr1, "Msg1"), + -- L2 => (Expr2, "Msg2")); + -- + -- is rewritten as: + -- + -- null; -- The original pragma + -- pragma Assert (Expr1, "Msg1"); + -- pragma Assert (Expr2, "Msg2"); + -- + -- Each of the new pragmas is analyzed according to its existing semantic + -- rules. + ---------------------------------------------- -- Common Handling of Import-Export Pragmas -- ---------------------------------------------- @@ -212,6 +327,14 @@ package body Sem_Prag is -- Query whether a particular item appears in a mixed list of nodes and -- entities. It is assumed that all nodes in the list have entities. + procedure Apply_Check_Policy (N : Node_Id; Policy : Name_Id); + -- Set the Is_Checked, Is_Ignored, Is_Disabled attributes on node N + -- based on the Policy. e.g. + -- + -- * When Name_Ignore (or Name_Off) is used the node is marked as ignored. + -- * When Name_Check (or Name_On) is used the node is marked as checked. + -- * When Name_Disable is used the node is marked as disabled. + procedure Check_Postcondition_Use_In_Inlined_Subprogram (Prag : Node_Id; Spec_Id : Entity_Id); @@ -266,6 +389,11 @@ package body Sem_Prag is -- set, the routine reports duplicate pragmas. The routine returns Empty -- when reaching the start of the node chain. + function Get_Applicable_Policy + (Nam : Name_Id; Level : Entity_Id) return Name_Id; + -- Return the name of the Check_Policy applied to the name or the level + -- associated with the node. + function Get_Base_Subprogram (Def_Id : Entity_Id) return Entity_Id; -- If Def_Id refers to a renamed subprogram, then the base subprogram (the -- original one, following the renaming chain) is returned. Otherwise the @@ -281,6 +409,15 @@ package body Sem_Prag is -- Determine whether dependency clause Clause is surrounded by extra -- parentheses. If this is the case, issue an error message. + procedure Mark_Is_Checked (N : Node_Id); + -- Sets Is_Checked and unsets Is_Ignored + + procedure Mark_Is_Disabled (N : Node_Id); + -- Sets Is_Disabled and Is_Ignored and unsets Is_Checked + + procedure Mark_Is_Ignored (N : Node_Id); + -- Sets Is_Ignored and unsets Is_Checked + procedure Record_Possible_Body_Reference (State_Id : Entity_Id; Ref : Node_Id); @@ -4830,16 +4967,10 @@ package body Sem_Prag is (Arg : Node_Id; N1, N2 : Name_Id); procedure Check_Arg_Is_One_Of - (Arg : Node_Id; - N1, N2, N3 : Name_Id); - procedure Check_Arg_Is_One_Of - (Arg : Node_Id; - N1, N2, N3, N4 : Name_Id); - procedure Check_Arg_Is_One_Of - (Arg : Node_Id; - N1, N2, N3, N4, N5 : Name_Id); + (Arg : Node_Id; + Names : Name_List); -- Check the specified argument Arg to make sure that it is an - -- identifier whose name matches either N1 or N2 (or N3, N4, N5 if + -- identifier whose name matches either N1 or N2 (or a list of names is -- present). If not then give error and raise Pragma_Exit. procedure Check_Arg_Is_Queuing_Policy (Arg : Node_Id); @@ -4923,6 +5054,16 @@ package body Sem_Prag is -- Common checks for pragmas that appear within a main program -- (Priority, Main_Storage, Time_Slice, Relative_Deadline, CPU). + procedure Check_Inconsistent_Argument_Ghostliness + (Arg1 : Entity_Id; + Arg2 : Entity_Id; + Ghost_Error_Posted : in out Boolean); + -- Reports an error and sets Ghost_Error_Posted when: + -- * One argument is ghost and the other is not ghost + -- * One argument is checked ghost and the other is ignored ghost + -- + -- Checks are avoided when Ghost_Error_Posted is already set. + procedure Check_Interrupt_Or_Attach_Handler; -- Common processing for first argument of pragma Interrupt_Handler or -- pragma Attach_Handler. @@ -4995,6 +5136,11 @@ package body Sem_Prag is -- presence of at least one component. UU_Typ is the related Unchecked_ -- Union type. + function Create_Pragma_Without_Assertion_Level + (Expr : Node_Id) return Node_Id; + -- Creates a new pragma from an Assertion_Level association argument + -- with the same name as the orignal pragma. + procedure Ensure_Aggregate_Form (Arg : Node_Id); -- Subsidiary routine to the processing of pragmas Abstract_State, -- Contract_Cases, Depends, Exceptional_Cases, Global, Initializes, @@ -5450,6 +5596,19 @@ package body Sem_Prag is -- a class-wide precondition only if one of its ancestors has an -- explicit class-wide precondition. + function Assertion_Level_Pragma_Comes_From_Source + (N : Node_Id) return Boolean + is (Present (Original_Pragma (N)) + and then Present (Original_Node (Original_Pragma (N))) + and then Comes_From_Source (Original_Node (Original_Pragma (N)))); + -- Determine whether a pragma was originally from source and used an + -- assertion level. + -- + -- When the pragma was using an Assertion_Level it was replaced by + -- a new pragma where the Original_Pragma points to the original + -- pragma node which was removed from the tree and replaced by a + -- null node. + ----------------------------- -- Inherits_Class_Wide_Pre -- ----------------------------- @@ -5543,7 +5702,9 @@ package body Sem_Prag is -- rewriting the pragma identifier. This allows the retrieval of the -- original pragma name by routine Original_Aspect_Pragma_Name. - if Comes_From_Source (N) then + if Comes_From_Source (N) + or else Assertion_Level_Pragma_Comes_From_Source (N) + then if Pname in Name_Pre | Name_Pre_Class then Is_Pre_Post := True; Set_Class_Present (N, Pname = Name_Pre_Class); @@ -5687,9 +5848,12 @@ package body Sem_Prag is -- For Ada 2022, pre/postconditions can appear on formal subprograms elsif Nkind (Subp_Decl) = N_Formal_Concrete_Subprogram_Declaration - and then Ada_Version >= Ada_2022 then - null; + if Ada_Version < Ada_2022 then + Error_Msg_Ada_2022_Feature + ("pre/postcondition on formal subprogram", Loc); + raise Pragma_Exit; + end if; -- An access-to-subprogram type can have pre/postconditions, which -- are both analyzed when attached to the type and copied to the @@ -5882,9 +6046,10 @@ package body Sem_Prag is -- Flag set when an error concerning the illegal mix of Ghost and -- non-Ghost variables is emitted. - Ghost_Id : Entity_Id := Empty; - -- The entity of the first Ghost variable encountered while - -- processing the arguments of the pragma. + First_Arg_Id : Entity_Id := Empty; + -- The entity of the first variable encountered while processing the + -- arguments of the pragma. This is used as a reference for assessing + -- the ghostliness of other arguments. begin GNAT_Pragma; @@ -5922,41 +6087,22 @@ package body Sem_Prag is Set_Has_Pragma_Unused (Arg_Id); end if; - -- A pragma that applies to a Ghost entity becomes Ghost for - -- the purposes of legality checks and removal of ignored - -- Ghost code. - - Mark_Ghost_Pragma (N, Arg_Id); - - -- Capture the entity of the first Ghost variable being + -- Capture the entity of the first variable being -- processed for error detection purposes. - if Is_Ghost_Entity (Arg_Id) then - if No (Ghost_Id) then - Ghost_Id := Arg_Id; - end if; - - -- Otherwise the variable is non-Ghost. It is illegal to mix - -- references to Ghost and non-Ghost entities - -- (SPARK RM 6.9). - - elsif Present (Ghost_Id) - and then not Ghost_Error_Posted - then - Ghost_Error_Posted := True; - - Error_Msg_Name_1 := Pname; - Error_Msg_N - ("pragma % cannot mention ghost and non-ghost " - & "variables", N); + if No (First_Arg_Id) then + First_Arg_Id := Arg_Id; - Error_Msg_Sloc := Sloc (Ghost_Id); - Error_Msg_NE ("\& # declared as ghost", N, Ghost_Id); + -- A pragma that applies to a Ghost entity becomes Ghost + -- for the purposes of legality checks and removal of + -- ignored Ghost code. - Error_Msg_Sloc := Sloc (Arg_Id); - Error_Msg_NE ("\& # declared as non-ghost", N, Arg_Id); + Mark_Ghost_Pragma (N, Arg_Id); end if; + Check_Inconsistent_Argument_Ghostliness + (First_Arg_Id, Arg_Id, Ghost_Error_Posted); + -- Warn if already flagged as Unused or Unmodified elsif Has_Pragma_Unmodified (Arg_Id) then @@ -5998,9 +6144,10 @@ package body Sem_Prag is -- Flag set when an error concerning the illegal mix of Ghost and -- non-Ghost names is emitted. - Ghost_Id : Entity_Id := Empty; - -- The entity of the first Ghost name encountered while processing - -- the arguments of the pragma. + First_Arg_Id : Entity_Id := Empty; + -- The entity of the first variable encountered while processing the + -- arguments of the pragma. This is used as a reference for assessing + -- the ghostliness of other arguments. begin GNAT_Pragma; @@ -6063,6 +6210,19 @@ package body Sem_Prag is if Is_Entity_Name (Arg_Expr) then Arg_Id := Entity (Arg_Expr); + -- Capture the entity of the first variable being + -- processed for error detection purposes. + + if No (First_Arg_Id) then + First_Arg_Id := Arg_Id; + + -- A pragma that applies to a Ghost entity becomes Ghost + -- for the purposes of legality checks and removal of + -- ignored Ghost code. + + Mark_Ghost_Pragma (N, Arg_Id); + end if; + -- Warn if already flagged as Unused or Unreferenced and -- skip processing the argument. @@ -6102,36 +6262,8 @@ package body Sem_Prag is Mark_Ghost_Pragma (N, Arg_Id); - -- Capture the entity of the first Ghost name being - -- processed for error detection purposes. - - if Is_Ghost_Entity (Arg_Id) then - if No (Ghost_Id) then - Ghost_Id := Arg_Id; - end if; - - -- Otherwise the name is non-Ghost. It is illegal to mix - -- references to Ghost and non-Ghost entities - -- (SPARK RM 6.9). - - elsif Present (Ghost_Id) - and then not Ghost_Error_Posted - then - Ghost_Error_Posted := True; - - Error_Msg_Name_1 := Pname; - Error_Msg_N - ("pragma % cannot mention ghost and non-ghost " - & "names", N); - - Error_Msg_Sloc := Sloc (Ghost_Id); - Error_Msg_NE - ("\& # declared as ghost", N, Ghost_Id); - - Error_Msg_Sloc := Sloc (Arg_Id); - Error_Msg_NE - ("\& # declared as non-ghost", N, Arg_Id); - end if; + Check_Inconsistent_Argument_Ghostliness + (First_Arg_Id, Arg_Id, Ghost_Error_Posted); end if; end if; @@ -6288,7 +6420,14 @@ package body Sem_Prag is end if; end if; + -- We are going to check the entity that determines the ghost + -- region of that pragma. We need to disable the checks for ghost + -- context since the ghost region can only be set after analyzing + -- this entity. + + Ghost_Context_Checks_Disabled := True; Analyze (Argx); + Ghost_Context_Checks_Disabled := False; if Nkind (Argx) not in N_Direct_Name and then (Nkind (Argx) /= N_Attribute_Reference @@ -6445,45 +6584,18 @@ package body Sem_Prag is end Check_Arg_Is_One_Of; procedure Check_Arg_Is_One_Of - (Arg : Node_Id; - N1, N2, N3 : Name_Id) - is - Argx : constant Node_Id := Get_Pragma_Arg (Arg); - - begin - Check_Arg_Is_Identifier (Argx); - - if Chars (Argx) not in N1 | N2 | N3 then - Error_Pragma_Arg ("invalid argument for pragma%", Argx); - end if; - end Check_Arg_Is_One_Of; - - procedure Check_Arg_Is_One_Of - (Arg : Node_Id; - N1, N2, N3, N4 : Name_Id) + (Arg : Node_Id; + Names : Name_List) is Argx : constant Node_Id := Get_Pragma_Arg (Arg); - begin Check_Arg_Is_Identifier (Argx); - if Chars (Argx) not in N1 | N2 | N3 | N4 then - Error_Pragma_Arg ("invalid argument for pragma%", Argx); + if (for some Name of Names => Chars (Argx) = Name) then + return; end if; - end Check_Arg_Is_One_Of; - - procedure Check_Arg_Is_One_Of - (Arg : Node_Id; - N1, N2, N3, N4, N5 : Name_Id) - is - Argx : constant Node_Id := Get_Pragma_Arg (Arg); - - begin - Check_Arg_Is_Identifier (Argx); - if Chars (Argx) not in N1 | N2 | N3 | N4 | N5 then - Error_Pragma_Arg ("invalid argument for pragma%", Argx); - end if; + Error_Pragma_Arg ("invalid argument for pragma%", Argx); end Check_Arg_Is_One_Of; --------------------------------- @@ -6881,6 +6993,91 @@ package body Sem_Prag is end if; end Check_In_Main_Program; + --------------------------------------------- + -- Check_Inconsistent_Argument_Ghostliness -- + --------------------------------------------- + + procedure Check_Inconsistent_Argument_Ghostliness + (Arg1 : Entity_Id; + Arg2 : Entity_Id; + Ghost_Error_Posted : in out Boolean) + is + + procedure Report_Ghost_Argument_Mismatch + (Ghost_Arg : Entity_Id; Non_Ghost_Arg : Entity_Id); + -- Constructs an error message when both a ghost and a non-ghost + -- argument are used in the same pragma. + + procedure Report_Ghost_Policy_Mismatch + (Checked_Arg : Entity_Id; Ignored_Arg : Entity_Id); + -- Constructs an error message when both a checked ghost and an + -- ignored ghost argument are used in the same pragma. + + ------------------------------------ + -- Report_Ghost_Argument_Mismatch -- + ------------------------------------ + + procedure Report_Ghost_Argument_Mismatch + (Ghost_Arg : Entity_Id; Non_Ghost_Arg : Entity_Id) is + + begin + Error_Msg_Name_1 := Pname; + Error_Msg_N + ("pragma % cannot mention ghost and non-ghost " & "variables", + N); + + Error_Msg_Sloc := Sloc (Ghost_Arg); + Error_Msg_NE ("\& # declared as ghost", N, Ghost_Arg); + + Error_Msg_Sloc := Sloc (Non_Ghost_Arg); + Error_Msg_NE ("\& # declared as non-ghost", N, Non_Ghost_Arg); + end Report_Ghost_Argument_Mismatch; + + ---------------------------------- + -- Report_Ghost_Policy_Mismatch -- + ---------------------------------- + + procedure Report_Ghost_Policy_Mismatch + (Checked_Arg : Entity_Id; Ignored_Arg : Entity_Id) is + + begin + Error_Msg_Name_1 := Pname; + Error_Msg_N + ("pragma % cannot mention checked ghost and ignored ghost " + & "variables", + N); + + Error_Msg_Sloc := Sloc (Checked_Arg); + Error_Msg_NE + ("\& # declared with a checked policy", N, Checked_Arg); + + Error_Msg_Sloc := Sloc (Ignored_Arg); + Error_Msg_NE + ("\& # declared with an ignored policy", N, Ignored_Arg); + end Report_Ghost_Policy_Mismatch; + begin + if Ghost_Error_Posted then + null; + elsif Is_Ghost_Entity (Arg1) and then not Is_Ghost_Entity (Arg2) then + Report_Ghost_Argument_Mismatch (Arg1, Arg2); + Ghost_Error_Posted := True; + elsif not Is_Ghost_Entity (Arg1) and then Is_Ghost_Entity (Arg2) + then + Report_Ghost_Argument_Mismatch (Arg2, Arg1); + Ghost_Error_Posted := True; + elsif Is_Checked_Ghost_Entity (Arg1) + and then Is_Ignored_Ghost_Entity (Arg2) + then + Report_Ghost_Policy_Mismatch (Arg1, Arg2); + Ghost_Error_Posted := True; + elsif Is_Ignored_Ghost_Entity (Arg1) + and then Is_Checked_Ghost_Entity (Arg2) + then + Report_Ghost_Policy_Mismatch (Arg2, Arg1); + Ghost_Error_Posted := True; + end if; + end Check_Inconsistent_Argument_Ghostliness; + --------------------------------------- -- Check_Interrupt_Or_Attach_Handler -- --------------------------------------- @@ -6899,12 +7096,14 @@ package body Sem_Prag is Handler_Proc := Find_Unique_Parameterless_Procedure (Arg1_X, Arg1); Proc_Scope := Scope (Handler_Proc); - if Ekind (Proc_Scope) /= E_Protected_Type then + if Nkind (Parent (Subprogram_Spec (Handler_Proc))) /= + N_Protected_Definition + then Error_Pragma_Arg ("argument of pragma% must be protected procedure", Arg1); end if; - -- For pragma case (as opposed to access case), check placement. + -- For pragma case (as opposed to aspect case), check placement. -- We don't need to do that for aspects, because we have the -- check that they aspect applies an appropriate procedure. @@ -7602,6 +7801,114 @@ package body Sem_Prag is end loop; end Check_Variant; + ------------------------------------------- + -- Create_Pragma_Without_Assertion_Level -- + ------------------------------------------- + + function Create_Pragma_Without_Assertion_Level + (Expr : Node_Id) return Node_Id + is + function Aggregate_To_Associations (N : Node_Id) return List_Id; + -- Converts an Aggregate into a list of + -- Pragma_Argument_Associations. + + procedure Validate_Assertion_Level_Aggregate (N : Node_Id); + -- Handle invalid syntax scenarios for an Aggregate containing + -- Assertion_Levels. + + ------------------------------- + -- Aggregate_To_Associations -- + ------------------------------- + + function Aggregate_To_Associations (N : Node_Id) return List_Id is + Args : constant List_Id := New_List; + Comp_Assn : Node_Id; + Comp_Expr : Node_Id; + Comp_Expr_Repl : Node_Id; + Choice : Node_Id; + begin + pragma Assert (Nkind (N) = N_Aggregate); + Validate_Assertion_Level_Aggregate (N); + + Comp_Expr := First (Expressions (N)); + while Present (Comp_Expr) loop + -- Remove the expression from the list so that it can be + -- inserted into the new Pragma_Argument_Association. + + Comp_Expr_Repl := Comp_Expr; + Next (Comp_Expr); + Remove (Comp_Expr_Repl); + Append_To + (Args, + Make_Pragma_Argument_Association + (Sloc (Comp_Expr_Repl), + Expression => Comp_Expr_Repl)); + end loop; + + Comp_Assn := First (Component_Associations (N)); + while Present (Comp_Assn) loop + Choice := First (Choices (Comp_Assn)); + Append_To + (Args, + Make_Pragma_Argument_Association + (Sloc (Comp_Assn), + Chars => Chars (Choice), + Expression => Expression (Comp_Assn))); + Next (Comp_Assn); + end loop; + return Args; + end Aggregate_To_Associations; + + ---------------------------------------- + -- Validate_Assertion_Level_Aggregate -- + ---------------------------------------- + + procedure Validate_Assertion_Level_Aggregate (N : Node_Id) is + Comp_Assn : Node_Id; + Choice : Node_Id; + begin + Comp_Assn := First (Component_Associations (N)); + while Present (Comp_Assn) loop + if List_Length (Choices (Comp_Assn)) /= 1 then + Error_Pragma_Arg + ("only one Assertion_Level can be associated " + & "with an expression", + Comp_Assn); + end if; + + Choice := First (Choices (Comp_Assn)); + + if Nkind (Choice) /= N_Identifier then + Error_Pragma_Arg + ("\association must denote an Assertion_Level", Comp_Assn); + end if; + Next (Comp_Assn); + end loop; + end Validate_Assertion_Level_Aggregate; + + -- Local variables + + Args : List_Id; + + -- Start of proessing for Create_Pragma_Without_Assertion_Level + + begin + if Nkind (Expr) in N_Aggregate then + Validate_Assertion_Level_Aggregate (Expr); + Args := Aggregate_To_Associations (Expr); + else + Args := + New_List + (Make_Pragma_Argument_Association (Sloc (Expr), + Expression => Expr)); + end if; + + return + Make_Pragma (Sloc (N), + Chars => Pname, + Pragma_Argument_Associations => Args); + end Create_Pragma_Without_Assertion_Level; + --------------------------- -- Ensure_Aggregate_Form -- --------------------------- @@ -8531,6 +8838,8 @@ package body Sem_Prag is Check_Arg_Is_OK_Static_Expression (Arg2, Standard_String); Analyze_And_Resolve (Arg1x, Standard_Boolean); + Mark_Ghost_Pragma (N, Current_Scope); + if CodePeer_Mode then Rewrite (N, Make_Null_Statement (Loc)); return; @@ -8985,8 +9294,15 @@ package body Sem_Prag is Check_Optional_Identifier (Arg2, Name_Entity); Check_Arg_Is_Local_Name (Arg2); + -- We are going to check the entity that determines the ghost + -- region of that pragma. We need to disable the checks for ghost + -- context since the ghost region can only be set after analyzing + -- this entity. + + Ghost_Context_Checks_Disabled := True; Id := Get_Pragma_Arg (Arg2); Analyze (Id); + Ghost_Context_Checks_Disabled := False; if not Is_Entity_Name (Id) then Error_Pragma_Arg ("entity name required", Arg2); @@ -10438,9 +10754,10 @@ package body Sem_Prag is -- Flag set when an error concerning the illegal mix of Ghost and -- non-Ghost subprograms is emitted. - Ghost_Id : Entity_Id := Empty; - -- The entity of the first Ghost subprogram encountered while - -- processing the arguments of the pragma. + First_Arg_Id : Entity_Id := Empty; + -- The entity of the first variable encountered while processing the + -- arguments of the pragma. This is used as a reference for assessing + -- the ghostliness of other arguments. procedure Check_Inline_Always_Placement (Spec_Id : Entity_Id); -- Verify the placement of pragma Inline_Always with respect to the @@ -10928,36 +11245,21 @@ package body Sem_Prag is end if; end case; - -- A pragma that applies to a Ghost entity becomes Ghost for the - -- purposes of legality checks and removal of ignored Ghost code. - - Mark_Ghost_Pragma (N, Subp); - - -- Capture the entity of the first Ghost subprogram being + -- Capture the entity of the first variable being -- processed for error detection purposes. - if Is_Ghost_Entity (Subp) then - if No (Ghost_Id) then - Ghost_Id := Subp; - end if; - - -- Otherwise the subprogram is non-Ghost. It is illegal to mix - -- references to Ghost and non-Ghost entities (SPARK RM 6.9). - - elsif Present (Ghost_Id) and then not Ghost_Error_Posted then - Ghost_Error_Posted := True; - - Error_Msg_Name_1 := Pname; - Error_Msg_N - ("pragma % cannot mention ghost and non-ghost subprograms", - N); + if No (First_Arg_Id) then + First_Arg_Id := Subp; - Error_Msg_Sloc := Sloc (Ghost_Id); - Error_Msg_NE ("\& # declared as ghost", N, Ghost_Id); + -- A pragma that applies to a Ghost entity becomes Ghost + -- for the purposes of legality checks and removal of + -- ignored Ghost code. - Error_Msg_Sloc := Sloc (Subp); - Error_Msg_NE ("\& # declared as non-ghost", N, Subp); + Mark_Ghost_Pragma (N, Subp); end if; + + Check_Inconsistent_Argument_Ghostliness + (First_Arg_Id, Subp, Ghost_Error_Posted); end Set_Inline_Flags; -- Start of processing for Process_Inline @@ -11786,7 +12088,15 @@ package body Sem_Prag is Check_Optional_Identifier (Arg2, Name_On); E_Id := Get_Pragma_Arg (Arg2); + + -- We are going to check the entity that determines the ghost + -- region of that pragma. We need to disable the checks for ghost + -- context since the ghost region can only be set after analyzing + -- this entity. + + Ghost_Context_Checks_Disabled := True; Analyze (E_Id); + Ghost_Context_Checks_Disabled := False; if not Is_Entity_Name (E_Id) then Error_Pragma_Arg @@ -12336,6 +12646,13 @@ package body Sem_Prag is end Set_Ravenscar_Profile; + -- Local variables + + Assoc : Node_Id; + Last_Prag : Node_Id; + Level : Entity_Id; + Sub_Prag : Node_Id; + -- Start of processing for Analyze_Pragma begin @@ -12370,7 +12687,11 @@ package body Sem_Prag is -- Deal with unrecognized pragma - if not Is_Pragma_Name (Pname) then + -- Pragma Unsigned_Base_Range temporarily disabled + + if not Is_Pragma_Name (Pname) + or else Pname = Name_Unsigned_Base_Range + then declare Msg_Issued : Boolean := False; begin @@ -12429,8 +12750,7 @@ package body Sem_Prag is elsif Is_Rewrite_Substitution (N) and then Nkind (Original_Node (N)) = N_Pragma then - Set_Is_Ignored (N, Is_Ignored (Original_Node (N))); - Set_Is_Checked (N, Is_Checked (Original_Node (N))); + Set_Pragma_Ghost_Assertion_Level (N, Original_Node (N)); -- Skip querying the applicable policy at this point for dynamic -- predicate checks since they rely on the policy applicable in @@ -12446,22 +12766,67 @@ package body Sem_Prag is -- Otherwise query the applicable policy at this point - else - Check_Applicable_Policy (N); + elsif Is_Valid_Assertion_Kind (Pname) then + -- If the pragma is using Assertion_Level associations, analyze the + -- applicable policies for that pragma and then convert it into a + -- pragma without assertion levels. Analyze the new pragma with + -- policy-related attributes (Is_Checked/Is_Ignored/Is_Disabled) + -- already set. + + if Has_Assertion_Level_Argument (N) then + Assoc := First (Pragma_Argument_Associations (N)); + Last_Prag := N; + while Present (Assoc) loop + Level := Get_Assertion_Level (Chars (Assoc)); + Sub_Prag := + Create_Pragma_Without_Assertion_Level (Expression (Assoc)); + + -- Set policy based attributes based on the pragma name and the + -- assertion level. + + Check_Applicable_Policy (Sub_Prag, Level); + + -- Store the Level on the pragma node for easier access + + Set_Pragma_Ghost_Assertion_Level (Sub_Prag, Level); + + -- Store the Original_Pragma for the detection of + -- duplicates. + + Set_Original_Pragma (Sub_Prag, N); + + -- Insert the created pragmas in the same order after the + -- original pragma and analyze them later. + + Insert_After (Last_Prag, Sub_Prag); + Last_Prag := Sub_Prag; + + Next (Assoc); + end loop; - -- If pragma is disabled, rewrite as NULL and skip analysis + -- Remove the original pragma and continue processing all + -- of the new sub-pragmas. - if Is_Disabled (N) then Rewrite (N, Make_Null_Statement (Loc)); Analyze (N); raise Pragma_Exit; + + -- Otherwise apply the policy based attributes based on the pragma + -- name. + + else + Check_Applicable_Policy (N, Empty); + Set_Pragma_Ghost_Assertion_Level + (N, Standard_Level_Default); end if; end if; - -- Mark assertion pragmas as Ghost depending on their enclosing context + -- If the pragma is disabled, rewrite it as NULL and skip its analysis - if Assertion_Expression_Pragma (Prag_Id) then - Mark_Ghost_Pragma (N, Current_Scope); + if Is_Disabled (N) then + Rewrite (N, Make_Null_Statement (Loc)); + Analyze (N); + raise Pragma_Exit; end if; -- Preset arguments @@ -12929,7 +13294,7 @@ package body Sem_Prag is procedure Check_Ghost_Synchronous is begin -- A synchronized abstract state cannot be Ghost and vice - -- versa (SPARK RM 6.9(21)). + -- versa (SPARK RM 6.9(22)). if Ghost_Seen and Synchronous_Seen then SPARK_Msg_N ("synchronized state cannot be ghost", State); @@ -13090,6 +13455,12 @@ package body Sem_Prag is if Present (State_Id) then Set_Is_Ghost_Entity (State_Id); + + -- Amend the Assertion_Level coming from the + -- package. + + Set_Ghost_Assertion_Level + (State_Id, Standard_Level_Default); end if; -- Synchronous @@ -13170,7 +13541,26 @@ package body Sem_Prag is elsif Chars (Opt_Nam) = Name_Part_Of then Analyze_Part_Of_Option (Opt); + elsif Chars (Opt_Nam) = Name_Ghost then + Check_Duplicate_Option (Opt, Ghost_Seen); + Check_Ghost_Synchronous; + if Present (State_Id) then + Set_Is_Ghost_Entity (State_Id); + + -- Amend the Assertion_Level coming from the + -- package. + + if Nkind (Expression (Opt)) /= N_Identifier then + Error_Pragma_Arg + ("level name must be an identifier", N); + end if; + + Set_Ghost_Assertion_Level + (State_Id, + Get_Assertion_Level + (Chars (Expression (Opt)))); + end if; else SPARK_Msg_N ("invalid state option", Opt); end if; @@ -13837,6 +14227,9 @@ package body Sem_Prag is Expr : Node_Id; Nam_Arg : Node_Id; + Saved_Ghost_Config : constant Ghost_Config_Type := Ghost_Config; + -- Save the Ghost-related attributes to restore on exit + -------------------------- -- Inferred_String_Type -- -------------------------- @@ -13914,6 +14307,10 @@ package body Sem_Prag is end if; end if; + -- Set the ghost mode before analyzing all of the arguments + + Set_Ghost_Mode (N); + -- Continue the processing with last argument removed for now Check_Arg_Is_Identifier (Arg1); @@ -13959,6 +14356,8 @@ package body Sem_Prag is Next (Arg); end loop; end if; + + Restore_Ghost_Region (Saved_Ghost_Config); end Annotate; ------------------------------------------------- @@ -14022,8 +14421,13 @@ package body Sem_Prag is -- Local variables - Expr : Node_Id; - New_Args : List_Id; + Args : Args_List (1 .. 2); + Arg_Check : Node_Id renames Args (1); + Arg_Message : Node_Id renames Args (2); + Check_Prag : Node_Id; + New_Args : List_Id; + Names : constant Name_List (1 .. 2) := + (Name_Check, Name_Message); -- Start of processing for Assert @@ -14041,25 +14445,32 @@ package body Sem_Prag is Check_At_Least_N_Arguments (1); Check_At_Most_N_Arguments (2); - Check_Arg_Order ((Name_Check, Name_Message)); - Check_Optional_Identifier (Arg1, Name_Check); - Expr := Get_Pragma_Arg (Arg1); + Gather_Associations (Names, Args); + Check_Arg_Order (Names); + Mark_Ghost_Pragma (N, Current_Scope); -- Special processing for Loop_Invariant, Loop_Variant or for -- other cases where a Loop_Entry attribute is present. If the -- assertion pragma contains attribute Loop_Entry, ensure that -- the related pragma is within a loop. - if Prag_Id = Pragma_Loop_Invariant + if Prag_Id = Pragma_Loop_Invariant or else Prag_Id = Pragma_Loop_Variant - or else Contains_Loop_Entry (Expr) + or else Contains_Loop_Entry (Arg_Check) then Check_Loop_Pragma_Placement; -- Perform preanalysis to deal with embedded Loop_Entry -- attributes. + -- + -- But ignore the ghost context checks for now. The expression + -- will be reanalyzed with the correct ghost region once the + -- pragma has been converted to pragma check. - Preanalyze_And_Resolve_Assert_Expression (Expr, Any_Boolean); + Ghost_Context_Checks_Disabled := True; + Preanalyze_And_Resolve_Assert_Expression + (Arg_Check, Any_Boolean); + Ghost_Context_Checks_Disabled := False; end if; -- Implement Assert[_And_Cut]/Assume/Loop_Invariant by generating @@ -14079,30 +14490,186 @@ package body Sem_Prag is New_Args := New_List ( Make_Pragma_Argument_Association (Loc, Expression => Make_Identifier (Loc, Pname)), - Make_Pragma_Argument_Association (Sloc (Expr), - Expression => Expr)); + Make_Pragma_Argument_Association (Sloc (Arg_Check), + Expression => Arg_Check)); - if Arg_Count > 1 then - Check_Optional_Identifier (Arg2, Name_Message); + if Present (Arg_Message) then -- Provide semantic annotations for optional argument, for -- ASIS use, before rewriting. -- Is this still needed??? - Preanalyze_And_Resolve (Expression (Arg2), Standard_String); + Preanalyze_And_Resolve (Arg_Message, Standard_String); Append_To (New_Args, New_Copy_Tree (Arg2)); end if; -- Rewrite as Check pragma - Rewrite (N, - Make_Pragma (Loc, - Chars => Name_Check, - Pragma_Argument_Associations => New_Args)); + Check_Prag := + Make_Pragma + (Loc, + Chars => Name_Check, + Pragma_Argument_Associations => New_Args); + Copy_Assertion_Policy_Attributes (Check_Prag, N); + Rewrite (N, Check_Prag); Analyze (N); end Assert; + --------------------- + -- Assertion_Level -- + --------------------- + + -- pragma Assertion_Level (LEVEL_IDENTIFIER + -- [, depends => DEPENDENCY_DESCRIPTOR]); + -- + -- DEPENDENCY_DESCRIPTOR ::= LEVEL_IDENTIFIER | LEVEL_IDENTIFIER_LIST + -- + -- LEVEL_IDENTIFIER_LIST ::= '[' LEVEL_IDENTIFIER + -- {, LEVEL_IDENTIFIER} ']' + + when Pragma_Assertion_Level => Assertion_Level : declare + procedure Add_Dependencies + (Level : Entity_Id; Parent_Level : Entity_Id); + -- Adds the following dependencies: + -- * Adds Parent_Level to the Parent_Levels of Level + -- * Adds Level to the Child_Levels of Parent_Level + + procedure Check_Known_Level_Name + (Level : Entity_Id; Ref : Node_Id); + -- Raise an error if the level has not be declared before + + procedure Check_Valid_Level_Name (Nam : Name_Id); + -- Raise an error if the name matches a valid assertion kind. + -- + -- This is to avoid the ambigiouty in Assertion_Policy if either + -- the level or the assertion kind is affected by the policy. + + procedure Check_Valid_Level_Node (N : Node_Id); + -- Raise an error if the node is not a simple identifier + + ---------------------- + -- Add_Dependencies -- + ---------------------- + + procedure Add_Dependencies + (Level : Entity_Id; Parent_Level : Entity_Id) + is + Parent_Level_List : Elist_Id; + Child_Levels_List : Elist_Id; + begin + if No (Parent_Levels (Level)) then + Set_Parent_Levels (Level, New_Elmt_List); + end if; + Parent_Level_List := Parent_Levels (Level); + Append_Elmt (Parent_Level, Parent_Level_List); + + if No (Child_Levels (Parent_Level)) then + Set_Child_Levels (Parent_Level, New_Elmt_List); + end if; + Child_Levels_List := Child_Levels (Parent_Level); + Append_Elmt (Level, Child_Levels_List); + end Add_Dependencies; + + ---------------------------- + -- Check_Known_Level_Name -- + ---------------------------- + + procedure Check_Known_Level_Name + (Level : Entity_Id; Ref : Node_Id) is + begin + if No (Level) then + Error_Msg_Name_1 := Chars (Ref); + Error_Msg_N ("unknown assertion level &", Ref); + raise Pragma_Exit; + end if; + end Check_Known_Level_Name; + + ---------------------------- + -- Check_Valid_Level_Name -- + ---------------------------- + + procedure Check_Valid_Level_Name (Nam : Name_Id) is + begin + if Is_Valid_Assertion_Kind (Nam) then + Error_Pragma_Arg + ("level name cannot match an assertion kind", Arg1); + end if; + end Check_Valid_Level_Name; + + ---------------------------- + -- Check_Valid_Level_Node -- + ---------------------------- + + procedure Check_Valid_Level_Node (N : Node_Id) is + begin + if Nkind (N) /= N_Identifier then + Error_Pragma_Arg ("level name must be an identifier", N); + end if; + end Check_Valid_Level_Node; + + -- Local variables + + Dep : Node_Id; + Dep_Id : Entity_Id; + Dep_Arg : Node_Id; + Level_Arg : Node_Id; + Level_Id : Entity_Id; + Level_Nam : Name_Id; + + -- Start of processing for Pragma_Assertion_Level + + begin + GNAT_Pragma; + Check_Valid_Configuration_Pragma; + Check_At_Least_N_Arguments (1); + Check_At_Most_N_Arguments (2); + + Check_No_Identifier (Arg1); + + Level_Arg := Expression (Arg1); + Check_Valid_Level_Node (Level_Arg); + + Level_Nam := Chars (Level_Arg); + Check_Valid_Level_Name (Level_Nam); + + Level_Id := Make_Assertion_Level (Loc, Level_Nam); + + Set_Parent (Level_Id, Level_Arg); + Set_Entity (Level_Arg, Level_Id); + + if Arg_Count = 2 then + Check_Identifier (Arg2, Name_Depends); + + Dep_Arg := Expression (Arg2); + + if Nkind (Dep_Arg) = N_Identifier then + Dep_Id := Get_Assertion_Level (Chars (Dep_Arg)); + Check_Known_Level_Name (Dep_Id, Dep_Arg); + Add_Dependencies (Level_Id, Dep_Id); + elsif Nkind (Dep_Arg) = N_Aggregate then + Dep := First (Expressions (Dep_Arg)); + while Present (Dep) loop + Check_Valid_Level_Node (Dep); + Dep_Id := Get_Assertion_Level (Chars (Dep)); + Check_Known_Level_Name (Dep_Id, Dep); + Add_Dependencies (Level_Id, Dep_Id); + + Next (Dep); + end loop; + else + Error_Pragma_Arg + ("depends argument must be either " + & "an identifier or " + & "an aggregate of identifiers", Dep_Arg); + end if; + end if; + + -- Register the new Assertion_Level + + Insert_Assertion_Level (Level_Id); + end Assertion_Level; + ---------------------- -- Assertion_Policy -- ---------------------- @@ -14115,7 +14682,9 @@ package body Sem_Prag is -- ASSERTION_KIND => POLICY_IDENTIFIER -- {, ASSERTION_KIND => POLICY_IDENTIFIER}); - -- ASSERTION_KIND ::= RM_ASSERTION_KIND | ID_ASSERTION_KIND + -- ASSERTION_KIND ::= RM_ASSERTION_KIND | + -- ID_ASSERTION_KIND | + -- LEVEL_IDENTIFIER -- RM_ASSERTION_KIND ::= Assert | -- Static_Predicate | @@ -14194,8 +14763,13 @@ package body Sem_Prag is -- Local variables + Policy_Names : constant Name_List := + (Name_Check, Name_Disable, Name_Ignore, Name_Suppressible); + Arg : Node_Id; + Id : Node_Id; Kind : Name_Id; + Level : Entity_Id; LocP : Source_Ptr; Policy : Node_Id; @@ -14222,8 +14796,7 @@ package body Sem_Prag is and then (Nkind (Arg1) /= N_Pragma_Argument_Association or else Chars (Arg1) = No_Name) then - Check_Arg_Is_One_Of (Arg1, - Name_Check, Name_Disable, Name_Ignore, Name_Suppressible); + Check_Arg_Is_One_Of (Arg1, Policy_Names); Resolve_Suppressible (Arg1); @@ -14272,22 +14845,45 @@ package body Sem_Prag is -- Check Kind and Policy have allowed forms Kind := Chars (Arg); + Id := Make_Identifier (LocP, Kind); Policy := Get_Pragma_Arg (Arg); if not Is_Valid_Assertion_Kind (Kind) then - Error_Pragma_Arg - ("invalid assertion kind for pragma%", Arg); + Set_Entity (Id, Get_Assertion_Level (Kind)); + Level := Entity (Id); + if No (Level) + or else Ekind (Level) /= E_Assertion_Level + then + Error_Pragma_Arg + ("invalid assertion kind for pragma%", + Arg); + end if; + + -- An Assertion_Policy pragma specifying an + -- Assertion_Level policy shall not occur within a ghost + -- subprogram or package associated to an assertion level + -- which depends on this level (SPARK RM 6.9(19)). + + if Ghost_Config.Ghost_Mode > None + and then Is_Same_Or_Depends_On_Level + (Ghost_Config.Ghost_Mode_Assertion_Level, + Level) + then + Error_Msg_Name_2 := Chars (Level); + Error_Pragma + ("pragma % cannot appear within ghost subprogram or " + & "package that depends on %"); + end if; end if; - Check_Arg_Is_One_Of (Arg, - Name_Check, Name_Disable, Name_Ignore, Name_Suppressible); + Check_Arg_Is_One_Of (Arg, Policy_Names); Resolve_Suppressible (Arg); if Kind = Name_Ghost then -- The Ghost policy must be either Check or Ignore - -- (SPARK RM 6.9(6)). + -- (SPARK RM 6.9(8)). if Chars (Policy) not in Name_Check | Name_Ignore then Error_Pragma_Arg @@ -14297,7 +14893,7 @@ package body Sem_Prag is -- Pragma Assertion_Policy specifying a Ghost policy -- cannot occur within a Ghost subprogram or package - -- (SPARK RM 6.9(16)). + -- (SPARK RM 6.9(19)). if Ghost_Config.Ghost_Mode > None then Error_Pragma @@ -14321,7 +14917,7 @@ package body Sem_Prag is Chars => Name_Check_Policy, Pragma_Argument_Associations => New_List ( Make_Pragma_Argument_Association (LocP, - Expression => Make_Identifier (LocP, Kind)), + Expression => Id), Make_Pragma_Argument_Association (LocP, Expression => Policy)))); @@ -14545,6 +15141,7 @@ package body Sem_Prag is Check_Ada_83_Warning; Check_No_Identifiers; Check_Arg_Count (1); + Check_Arg_Is_Local_Name (Arg1); if Debug_Flag_U then @@ -14552,8 +15149,16 @@ package body Sem_Prag is end if; C_Ent := Cunit_Entity (Current_Sem_Unit); + + -- We are going to check the entity that determines the ghost + -- region of that pragma. We need to disable the checks for ghost + -- context since the ghost region can only be set after analyzing + -- this entity. + + Ghost_Context_Checks_Disabled := True; Analyze (Get_Pragma_Arg (Arg1)); Nm := Entity (Get_Pragma_Arg (Arg1)); + Ghost_Context_Checks_Disabled := False; -- A pragma that applies to a Ghost entity becomes Ghost for the -- purposes of legality checks and removal of ignored Ghost code. @@ -14864,12 +15469,10 @@ package body Sem_Prag is pragma Assert (Has_Dynamic_Predicate_Aspect (Typ)); if not Predicates_Ignored (Typ) then - Set_Is_Checked (N, True); - Set_Is_Ignored (N, False); + Mark_Is_Checked (N); else - Set_Is_Checked (N, False); - Set_Is_Ignored (N, True); + Mark_Is_Ignored (N); end if; end Handle_Dynamic_Predicate_Check; @@ -14879,11 +15482,16 @@ package body Sem_Prag is Saved_Ghost_Config : constant Ghost_Config_Type := Ghost_Config; -- Save the Ghost-related attributes to restore on exit + Names : constant Name_List (1 .. 3) := + (Name_Name, Name_Check, Name_Message); + + Args : Args_List (1 .. 3); + Arg_Name : Node_Id renames Args (1); + Arg_Check : Node_Id renames Args (2); + Arg_Message : Node_Id renames Args (3); + Cname : Name_Id; Eloc : Source_Ptr; - Expr : Node_Id; - Str : Node_Id; - pragma Warnings (Off, Str); -- Start of processing for Pragma_Check @@ -14892,22 +15500,19 @@ package body Sem_Prag is -- the mode now to ensure that any nodes generated during analysis -- and expansion are marked as Ghost. + Mark_Ghost_Pragma (N, Current_Scope); + Set_Ghost_Mode (N); GNAT_Pragma; Check_At_Least_N_Arguments (2); Check_At_Most_N_Arguments (3); - Check_Optional_Identifier (Arg1, Name_Name); - Check_Optional_Identifier (Arg2, Name_Check); - if Arg_Count = 3 then - Check_Optional_Identifier (Arg3, Name_Message); - Str := Get_Pragma_Arg (Arg3); - end if; + Gather_Associations (Names, Args); - Rewrite_Assertion_Kind (Get_Pragma_Arg (Arg1)); - Check_Arg_Is_Identifier (Arg1); - Cname := Chars (Get_Pragma_Arg (Arg1)); + Rewrite_Assertion_Kind (Arg_Name); + Check_Arg_Is_Identifier (Arg_Name); + Cname := Chars (Arg_Name); -- Check forbidden name Assertions or Statement_Assertions @@ -14915,12 +15520,12 @@ package body Sem_Prag is when Name_Assertions => Error_Pragma_Arg ("""Assertions"" is not allowed as a check kind for " - & "pragma%", Arg1); + & "pragma%", Arg_Name); when Name_Statement_Assertions => Error_Pragma_Arg ("""Statement_Assertions"" is not allowed as a check kind " - & "for pragma%", Arg1); + & "for pragma%", Arg_Name); when others => null; @@ -14938,8 +15543,7 @@ package body Sem_Prag is elsif Is_Rewrite_Substitution (N) and then Nkind (Original_Node (N)) = N_Pragma then - Set_Is_Ignored (N, Is_Ignored (Original_Node (N))); - Set_Is_Checked (N, Is_Checked (Original_Node (N))); + Copy_Assertion_Policy_Attributes (N, Original_Node (N)); -- Internally added dynamic predicate checks require checking the -- applicable policy at the point of the type declaration of their @@ -14954,34 +15558,18 @@ package body Sem_Prag is -- Otherwise query the applicable policy at this point else - case Check_Kind (Cname) is - when Name_Ignore => - Set_Is_Ignored (N, True); - Set_Is_Checked (N, False); - - when Name_Check => - Set_Is_Ignored (N, False); - Set_Is_Checked (N, True); - - -- For disable, rewrite pragma as null statement and skip - -- rest of the analysis of the pragma. - - when Name_Disable => - Rewrite (N, Make_Null_Statement (Loc)); - Analyze (N); - raise Pragma_Exit; + Apply_Check_Policy (N, Get_Applicable_Policy (Cname, Empty)); - -- No other possibilities + -- For disable, rewrite pragma as null statement and skip + -- rest of the analysis of the pragma. - when others => - raise Program_Error; - end case; + if Is_Disabled (N) then + Rewrite (N, Make_Null_Statement (Loc)); + Analyze (N); + raise Pragma_Exit; + end if; end if; - -- If check kind was not Disable, then continue pragma analysis - - Expr := Get_Pragma_Arg (Arg2); - -- Mark the pragma (or, if rewritten from an aspect, the original -- aspect) as enabled. Nothing to do for an internally generated -- check for a dynamic predicate. @@ -15005,8 +15593,8 @@ package body Sem_Prag is -- expression is only evaluated if the check fails and -- Assertion_Error is to be raised. - if Arg_Count = 3 then - Preanalyze_And_Resolve (Str, Standard_String); + if Present (Arg_Message) then + Preanalyze_And_Resolve (Arg_Message, Standard_String); end if; -- Now you might think we could just do the same with the Boolean @@ -15035,14 +15623,14 @@ package body Sem_Prag is -- warning when we delete the if statement. if Expander_Active and Is_Ignored_In_Codegen (N) then - Eloc := Sloc (Expr); + Eloc := Sloc (Arg_Check); Rewrite (N, Make_If_Statement (Eloc, Condition => Make_And_Then (Eloc, Left_Opnd => Make_Identifier (Eloc, Name_False), - Right_Opnd => Expr), + Right_Opnd => Arg_Check), Then_Statements => New_List ( Make_Null_Statement (Eloc)))); @@ -15083,7 +15671,7 @@ package body Sem_Prag is else In_Assertion_Expr := In_Assertion_Expr + 1; - Analyze_And_Resolve (Expr, Any_Boolean); + Analyze_And_Resolve (Arg_Check, Any_Boolean); In_Assertion_Expr := In_Assertion_Expr - 1; end if; @@ -15157,7 +15745,90 @@ package body Sem_Prag is -- new form syntax. when Pragma_Check_Policy => Check_Policy : declare - Kind : Node_Id; + procedure Get_All_Child_Levels + (Level : Entity_Id; + Deps : in out Elist_Id); + -- Add all of the transitive children of the given Level to the + -- Deps list. + + procedure Get_All_Parent_Levels + (Level : Entity_Id; + Deps : in out Elist_Id); + -- Add all of the transitive parents of the given Level to the + -- Deps list. + + -------------------------- + -- Get_All_Child_Levels -- + -------------------------- + + procedure Get_All_Child_Levels + (Level : Entity_Id; + Deps : in out Elist_Id) + is + It : Elmt_Id; + Child_Lvl : Entity_Id; + begin + if No (Child_Levels (Level)) then + return; + end if; + + It := First_Elmt (Child_Levels (Level)); + while Present (It) loop + Child_Lvl := Node (It); + if not Contains (Deps, Child_Lvl) then + Append_New_Elmt (Child_Lvl, Deps); + Get_All_Child_Levels (Child_Lvl, Deps); + end if; + + Next_Elmt (It); + end loop; + end Get_All_Child_Levels; + + --------------------------- + -- Get_All_Parent_Levels -- + --------------------------- + + procedure Get_All_Parent_Levels + (Level : Entity_Id; + Deps : in out Elist_Id) + is + It : Elmt_Id; + D : Entity_Id; + begin + if No (Parent_Levels (Level)) then + return; + end if; + + It := First_Elmt (Parent_Levels (Level)); + while Present (It) loop + D := Node (It); + + if not Contains (Deps, D) then + Append_New_Elmt (D, Deps); + Get_All_Parent_Levels (D, Deps); + end if; + + Next_Elmt (It); + end loop; + end Get_All_Parent_Levels; + + -- Local variables + + Policy_Names : constant Name_List := + (Name_On, Name_Off, Name_Check, Name_Disable, Name_Ignore); + + Affected_Levels : Elist_Id := New_Elmt_List; + Depends_On_Static : Boolean := False; + + Kind : Node_Id; + Level : Entity_Id; + L : Entity_Id; + L_It : Elmt_Id; + L_Id : Node_Id; + New_P : Node_Id; + Policy_Nam : Name_Id; + + -- Start of processing for Pragma Check_Policy begin GNAT_Pragma; @@ -15199,15 +15870,92 @@ package body Sem_Prag is -- Check policy Check_Optional_Identifier (Arg2, Name_Policy); - Check_Arg_Is_One_Of - (Arg2, - Name_On, Name_Off, Name_Check, Name_Disable, Name_Ignore); + Check_Arg_Is_One_Of (Arg2, Policy_Names); + + Policy_Nam := Chars (Get_Pragma_Arg (Arg2)); -- And chain pragma on the Check_Policy_List for search Set_Next_Pragma (N, Opt.Check_Policy_List); Opt.Check_Policy_List := N; + -- For Assertion_Levels create new policies for all of the + -- level dependencies. + + if Present (Entity (Kind)) + and then Ekind (Entity (Kind)) = E_Assertion_Level + then + Level := Entity (Kind); + + Depends_On_Static := + Depends_On_Level (Level, Standard_Level_Static); + + if Policy_Nam in Name_On | Name_Check then + if Level = Standard_Level_Static then + Error_Pragma_Arg + ("policy for `Static` cannot be changed to `Check`", + Arg1); + elsif Depends_On_Static then + Error_Pragma_Arg + ("Policy for a level that depends on `Static` " + & "cannot be changed to `Check`", + Arg1); + end if; + end if; + + if Policy_Nam in Name_Off | Name_Ignore + and then Level = Standard_Level_Runtime + then + Error_Pragma_Arg + ("policy for `Runtime` cannot be changed to `Ignore`", + Arg1); + end if; + + -- For Assertion_Levels create new policyies for all of the + -- level dependencies. + + if Policy_Nam in Name_On | Name_Check then + + -- Activating a level activates all levels that it + -- depends on (Parent_Levels). + + Get_All_Parent_Levels (Level, Affected_Levels); + elsif Policy_Nam in Name_Off | Name_Ignore then + + -- Deactivating a level deactivates all levels that + -- depend on it (Child_Levels) + + Get_All_Child_Levels (Level, Affected_Levels); + end if; + + L_It := First_Elmt (Affected_Levels); + while Present (L_It) loop + L := Node (L_It); + L_Id := Make_Identifier (Sloc (Arg1), Chars (L)); + Set_Entity (L_Id, L); + New_P := + Make_Pragma (Sloc (N), + Chars => Name_Check_Policy, + Pragma_Argument_Associations => New_List ( + Make_Pragma_Argument_Association (Sloc (Arg1), + Expression => L_Id), + Make_Pragma_Argument_Association (Sloc (Arg2), + Expression => + New_Copy_Tree (Get_Pragma_Arg (Arg2))))); + + -- We have collected the unique list of all transitive + -- Parent_Levels or Child_Levels. Avoid calculating + -- them again. + + Set_Analyzed (New_P); + + Set_Next_Pragma (New_P, Opt.Check_Policy_List); + Opt.Check_Policy_List := New_P; + + Next_Elmt (L_It); + end loop; + end if; + -- For the new syntax, what we do is to convert each argument to -- an old syntax equivalent. We do that because we want to chain -- old style Check_Policy pragmas for the search (we don't want @@ -15218,8 +15966,6 @@ package body Sem_Prag is Arg : Node_Id; Argx : Node_Id; LocP : Source_Ptr; - New_P : Node_Id; - begin Arg := Arg1; while Present (Arg) loop @@ -16362,6 +17108,21 @@ package body Sem_Prag is Check_No_Identifiers; Check_At_Most_N_Arguments (2); -- Accounts for implicit type arg + -- The value "null" cannot be associated with an assertion level + -- as it has no runtime semantics. + + if Present (Pragma_Ghost_Assertion_Level (N)) + and then Pragma_Ghost_Assertion_Level (N) + /= Standard_Level_Default + and then Present (Arg1) + and then Nkind (Get_Pragma_Arg (Arg1)) = N_Null + then + Error_Pragma_Arg + ("null argument cannot be used together " + & "with assertion levels", + Arg1); + end if; + Typ := Empty; Stmt := Prev (N); while Present (Stmt) loop @@ -16369,7 +17130,9 @@ package body Sem_Prag is -- Skip prior pragmas, but check for duplicates if Nkind (Stmt) = N_Pragma then - if Pragma_Name (Stmt) = Pname then + if Pragma_Name (Stmt) = Pname + and then not From_Same_Pragma (N, Stmt) + then Duplication_Error (Prag => N, Prev => Stmt); @@ -18020,7 +18783,8 @@ package body Sem_Prag is GNAT_Pragma; Check_Arg_Count (1); Check_No_Identifiers; - Check_Arg_Is_One_Of (Arg1, Name_On, Name_Off, Name_All_Extensions); + Check_Arg_Is_One_Of + (Arg1, (Name_On, Name_Off, Name_All_Extensions)); if Chars (Get_Pragma_Arg (Arg1)) = Name_On then Ada_Version := Ada_With_Core_Extensions; @@ -18225,7 +18989,7 @@ package body Sem_Prag is if Arg_Count = 2 then Check_Arg_Is_One_Of - (Arg2, Name_As_Is, Name_Uppercase, Name_Lowercase); + (Arg2, (Name_As_Is, Name_Uppercase, Name_Lowercase)); case Chars (Get_Pragma_Arg (Arg2)) is when Name_As_Is => @@ -18470,12 +19234,15 @@ package body Sem_Prag is -- Ghost -- ----------- - -- pragma Ghost [ (static_boolean_EXPRESSION) ]; + -- pragma Ghost [ (static_boolean_EXPRESSION + -- | Assertion_Level) ]; when Pragma_Ghost => Ghost : declare Context : Node_Id; Expr : Node_Id; Id : Entity_Id; + Is_Ghost : Boolean := True; + Level : Entity_Id; Orig_Stmt : Node_Id; Prev_Id : Entity_Id; Stmt : Node_Id; @@ -18500,7 +19267,7 @@ package body Sem_Prag is end if; -- Task unit declared without a definition cannot be subject to - -- pragma Ghost (SPARK RM 6.9(21)). + -- pragma Ghost (SPARK RM 6.9(22)). elsif Nkind (Stmt) in N_Single_Task_Declaration | N_Task_Type_Declaration @@ -18596,7 +19363,7 @@ package body Sem_Prag is end if; -- Protected and task types cannot be subject to pragma Ghost - -- (SPARK RM 6.9(21)). + -- (SPARK RM 6.9(22)). if Nkind (Context) in N_Protected_Body | N_Protected_Definition then @@ -18654,7 +19421,7 @@ package body Sem_Prag is -- The full declaration of a deferred constant cannot be -- subject to pragma Ghost unless the deferred declaration - -- is also Ghost (SPARK RM 6.9(9)). + -- is also Ghost (SPARK RM 6.9(11)). if Ekind (Prev_Id) = E_Constant then Error_Msg_Name_1 := Pname; @@ -18672,7 +19439,7 @@ package body Sem_Prag is -- The full declaration of a type cannot be subject to -- pragma Ghost unless the partial view is also Ghost - -- (SPARK RM 6.9(9)). + -- (SPARK RM 6.9(11)). else Error_Msg_NE (Fix_Error @@ -18683,7 +19450,7 @@ package body Sem_Prag is end if; -- A synchronized object cannot be subject to pragma Ghost - -- (SPARK RM 6.9(21)). + -- (SPARK RM 6.9(22)). elsif Ekind (Id) = E_Variable then if Is_Protected_Type (Etype (Id)) then @@ -18699,30 +19466,49 @@ package body Sem_Prag is if Present (Arg1) then Expr := Get_Pragma_Arg (Arg1); - Analyze_And_Resolve (Expr, Standard_Boolean); - - if Is_OK_Static_Expression (Expr) then - - -- "Ghostness" cannot be turned off once enabled within a - -- region (SPARK RM 6.9(6)). + if Nkind (Expr) /= N_Identifier + or else No (Get_Assertion_Level (Chars (Expr))) + then + Analyze_And_Resolve (Expr, Standard_Boolean); - if Is_False (Expr_Value (Expr)) - and then Ghost_Config.Ghost_Mode > None - then - Error_Pragma - ("pragma % with value False cannot appear in enabled " - & "ghost region"); + if not Is_OK_Static_Expression (Expr) then + Error_Pragma_Arg + ("expression of pragma % must be static", Expr); end if; - -- Otherwise the expression is not static + if Is_False (Expr_Value (Expr)) then + Is_Ghost := False; - else - Error_Pragma_Arg - ("expression of pragma % must be static", Expr); + -- "Ghostness" cannot be turned off once enabled within a + -- region (SPARK RM 6.9(8)). + + if Ghost_Config.Ghost_Mode > None then + Error_Pragma + ("pragma % with value False cannot appear in enabled" + & " ghost region"); + end if; + end if; end if; end if; - Set_Is_Ghost_Entity (Id); + Level := Assertion_Level_From_Arg (Arg1); + + -- Associate the assertion level before determing the kind of + -- ghost entity we should mark the entity as. + + Set_Ghost_Assertion_Level (Id, Level); + + -- Store it on the pragma node as well + + Set_Pragma_Ghost_Assertion_Level (N, Level); + + -- Mark it as a Ghost entity unless it was explicitly marked with + -- pragma Ghost (False). + + if Is_Ghost then + Set_Is_Implicit_Ghost (Id, False); + Set_Is_Ghost_Entity (Id); + end if; end Ghost; ------------ @@ -18943,17 +19729,17 @@ package body Sem_Prag is Proc_Id : Entity_Id; Typ : Entity_Id; + Impl_Names : constant Name_List := (Name_By_Any, + Name_By_Entry, + Name_By_Protected_Procedure, + Name_Optional); begin Ada_2012_Pragma; Check_Arg_Count (2); Check_No_Identifiers; Check_Arg_Is_Identifier (Arg1); Check_Arg_Is_Local_Name (Arg1); - Check_Arg_Is_One_Of (Arg2, - Name_By_Any, - Name_By_Entry, - Name_By_Protected_Procedure, - Name_Optional); + Check_Arg_Is_One_Of (Arg2, Impl_Names); -- Extract the name of the local procedure @@ -20875,6 +21661,11 @@ package body Sem_Prag is when Pragma_Loop_Optimize => Loop_Optimize : declare Hint : Node_Id; + Hint_Names : constant Name_List := (Name_Ivdep, + Name_No_Unroll, + Name_Unroll, + Name_No_Vector, + Name_Vector); begin GNAT_Pragma; Check_At_Least_N_Arguments (1); @@ -20882,11 +21673,7 @@ package body Sem_Prag is Hint := First (Pragma_Argument_Associations (N)); while Present (Hint) loop - Check_Arg_Is_One_Of (Hint, Name_Ivdep, - Name_No_Unroll, - Name_Unroll, - Name_No_Vector, - Name_Vector); + Check_Arg_Is_One_Of (Hint, Hint_Names); Next (Hint); end loop; @@ -20911,6 +21698,7 @@ package body Sem_Prag is GNAT_Pragma; Check_At_Least_N_Arguments (1); Check_Loop_Pragma_Placement; + Mark_Ghost_Pragma (N, Current_Scope); -- Process all increasing / decreasing expressions @@ -21667,9 +22455,10 @@ package body Sem_Prag is -- Flag set when an error concerning the illegal mix of Ghost and -- non-Ghost subprograms is emitted. - Ghost_Id : Entity_Id := Empty; - -- The entity of the first Ghost procedure encountered while - -- processing the arguments of the pragma. + First_Arg_Id : Entity_Id := Empty; + -- The entity of the first variable encountered while processing + -- the arguments of the pragma. This is used as a reference for + -- assessing the ghostliness of other arguments. begin Ada_2005_Pragma; @@ -21681,7 +22470,15 @@ package body Sem_Prag is while Present (Arg) loop Check_Arg_Is_Local_Name (Arg); Id := Get_Pragma_Arg (Arg); + + -- We are going to check the entity that determines the ghost + -- region of that pragma. We need to disable the checks for + -- ghost context since the ghost region can only be set after + -- analyzing this entity. + + Ghost_Context_Checks_Disabled := True; Analyze (Id); + Ghost_Context_Checks_Disabled := False; if not Is_Entity_Name (Id) then Error_Pragma_Arg ("entity name required", Arg); @@ -21758,42 +22555,22 @@ package body Sem_Prag is Set_No_Return (E); end if; - -- A pragma that applies to a Ghost entity becomes - -- Ghost for the purposes of legality checks and - -- removal of ignored Ghost code. + -- Capture the entity of the first variable being + -- processed for error detection purposes. - Mark_Ghost_Pragma (N, E); + if No (First_Arg_Id) then + First_Arg_Id := E; - -- Capture the entity of the first Ghost procedure - -- being processed for error detection purposes. - - if Is_Ghost_Entity (E) then - if No (Ghost_Id) then - Ghost_Id := E; - end if; - - -- Otherwise the subprogram is non-Ghost. It is - -- illegal to mix references to Ghost and non-Ghost - -- entities (SPARK RM 6.9). - - elsif Present (Ghost_Id) - and then not Ghost_Error_Posted - then - Ghost_Error_Posted := True; - - Error_Msg_Name_1 := Pname; - Error_Msg_N - ("pragma % cannot mention ghost and non-ghost " - & "procedures", N); - - Error_Msg_Sloc := Sloc (Ghost_Id); - Error_Msg_NE - ("\& # declared as ghost", N, Ghost_Id); + -- A pragma that applies to a Ghost entity becomes + -- Ghost for the purposes of legality checks and + -- removal of ignored Ghost code. - Error_Msg_Sloc := Sloc (E); - Error_Msg_NE ("\& # declared as non-ghost", N, E); + Mark_Ghost_Pragma (N, E); end if; + Check_Inconsistent_Argument_Ghostliness + (First_Arg_Id, E, Ghost_Error_Posted); + -- Set flag on any alias as well if Is_Overloadable (E) @@ -22238,7 +23015,7 @@ package body Sem_Prag is when Pragma_Optimize => Check_No_Identifiers; Check_Arg_Count (1); - Check_Arg_Is_One_Of (Arg1, Name_Time, Name_Space, Name_Off); + Check_Arg_Is_One_Of (Arg1, (Name_Time, Name_Space, Name_Off)); ------------------------ -- Optimize_Alignment -- @@ -23158,12 +23935,18 @@ package body Sem_Prag is -- removal of ignored Ghost code. if From_Aspect_Specification (N) - and then Get_Aspect_Id - (Chars (Identifier (Corresponding_Aspect (N)))) - = Aspect_Ghost_Predicate + and then Get_Aspect_Id (Corresponding_Aspect (N)) + = Aspect_Ghost_Predicate then - Mark_Ghost_Pragma - (N, Name_To_Ghost_Mode (Policy_In_Effect (Name_Ghost))); + -- For Ghost_Predicate we have already analyzed the applicable + -- ghost policy already and set the policy using Is_Checked and + -- Is_Ignored. + + if Is_Ignored (N) then + Mark_Ghost_Pragma (N, Opt.Ignore); + else + Mark_Ghost_Pragma (N, Opt.Check); + end if; else Mark_Ghost_Pragma (N, Typ); end if; @@ -25675,7 +26458,7 @@ package body Sem_Prag is -- Check the legality of the mode (no argument = ON) if Arg_Count = 1 then - Check_Arg_Is_One_Of (Arg1, Name_Auto, Name_On, Name_Off); + Check_Arg_Is_One_Of (Arg1, (Name_Auto, Name_On, Name_Off)); Mode := Chars (Get_Pragma_Arg (Arg1)); else Mode := Name_On; @@ -27145,7 +27928,7 @@ package body Sem_Prag is GNAT_Pragma; Check_Arg_Count (1); Check_No_Identifiers; - Check_Arg_Is_One_Of (Arg1, Name_Error, Name_Warn, Name_Allow); + Check_Arg_Is_One_Of (Arg1, (Name_Error, Name_Warn, Name_Allow)); -- Suppress/Unsuppress can appear as a configuration pragma, or in -- a declarative part or a package spec. @@ -27261,9 +28044,10 @@ package body Sem_Prag is -- Flag set when an error concerning the illegal mix of Ghost and -- non-Ghost types is emitted. - Ghost_Id : Entity_Id := Empty; - -- The entity of the first Ghost type encountered while processing - -- the arguments of the pragma. + First_Arg_Id : Entity_Id := Empty; + -- The entity of the first variable encountered while processing + -- the arguments of the pragma. This is used as a reference for + -- assessing the ghostliness of other arguments. begin GNAT_Pragma; @@ -27278,43 +28062,25 @@ package body Sem_Prag is if Is_Entity_Name (Arg_Expr) then Arg_Id := Entity (Arg_Expr); - if Is_Type (Arg_Id) then - Set_Has_Pragma_Unreferenced_Objects (Arg_Id); + -- Capture the entity of the first Ghost type being + -- processed for error detection purposes. + + if No (First_Arg_Id) then + First_Arg_Id := Arg_Id; -- A pragma that applies to a Ghost entity becomes Ghost -- for the purposes of legality checks and removal of -- ignored Ghost code. Mark_Ghost_Pragma (N, Arg_Id); + end if; - -- Capture the entity of the first Ghost type being - -- processed for error detection purposes. - - if Is_Ghost_Entity (Arg_Id) then - if No (Ghost_Id) then - Ghost_Id := Arg_Id; - end if; - - -- Otherwise the type is non-Ghost. It is illegal to mix - -- references to Ghost and non-Ghost entities - -- (SPARK RM 6.9). - - elsif Present (Ghost_Id) - and then not Ghost_Error_Posted - then - Ghost_Error_Posted := True; - - Error_Msg_Name_1 := Pname; - Error_Msg_N - ("pragma % cannot mention ghost and non-ghost types", - N); + if Is_Type (Arg_Id) then + Set_Has_Pragma_Unreferenced_Objects (Arg_Id); - Error_Msg_Sloc := Sloc (Ghost_Id); - Error_Msg_NE ("\& # declared as ghost", N, Ghost_Id); + Check_Inconsistent_Argument_Ghostliness + (First_Arg_Id, Arg_Id, Ghost_Error_Posted); - Error_Msg_Sloc := Sloc (Arg_Id); - Error_Msg_NE ("\& # declared as non-ghost", N, Arg_Id); - end if; else Error_Pragma_Arg ("argument for pragma% must be type or subtype", Arg); @@ -27342,6 +28108,69 @@ package body Sem_Prag is Unreserve_All_Interrupts := True; end if; + -------------------------------- + -- Pragma_Unsigned_Base_Range -- + -------------------------------- + + when Pragma_Unsigned_Base_Range => Unsigned_Base_Range : declare + Arg : Node_Id; + E : Entity_Id := Empty; + Expr : Node_Id := Empty; + + begin + GNAT_Pragma; + Check_At_Least_N_Arguments (1); + Check_At_Most_N_Arguments (2); + + Arg := Get_Pragma_Arg (Arg1); + Check_Arg_Is_Identifier (Arg); + + Analyze (Arg); + E := Entity (Arg); + + if Present (Arg2) then + Check_Arg_Is_OK_Static_Expression (Arg2, Standard_Boolean); + Expr := Get_Pragma_Arg (Arg2); + Analyze_And_Resolve (Expr, Standard_Boolean); + end if; + + if not Core_Extensions_Allowed then + Error_Msg_GNAT_Extension + ("'Unsigned_'Base_'Range", Sloc (N), + Is_Core_Extension => True); + return; + + elsif not Is_Integer_Type (E) + or else Is_Modular_Integer_Type (E) + then + Error_Pragma_Arg + ("cannot apply pragma %", + "\& is not a signed integer type", + Arg1); + + elsif Is_Derived_Type (E) then + Error_Pragma_Arg + ("pragma % cannot apply to derived type", Arg1); + end if; + + Check_First_Subtype (Arg1); + + -- Create the new unsigned integer base type entity, and apply + -- the constraint to create the first subtype of E. + + Unsigned_Base_Range_Type_Declaration (E, + Def => Type_Definition (Parent (E))); + + Set_Direct_Primitive_Operations (Base_Type (E), New_Elmt_List); + Set_Direct_Primitive_Operations (E, + Direct_Primitive_Operations (Base_Type (E))); + Ensure_Freeze_Node (Base_Type (E)); + Set_First_Subtype_Link (Freeze_Node (Base_Type (E)), E); + Set_Has_Delayed_Freeze (E); + + Set_Has_Unsigned_Base_Range_Aspect (Base_Type (E)); + end Unsigned_Base_Range; + ---------------- -- Unsuppress -- ---------------- @@ -28177,13 +29006,13 @@ package body Sem_Prag is null; -------------------- - -- Unknown_Pragma -- + -- Pragma_Unknown -- -------------------- -- Should be impossible, since the case of an unknown pragma is -- separately processed before the case statement is entered. - when Unknown_Pragma => + when Pragma_Unknown => raise Program_Error; end case; @@ -30875,6 +31704,9 @@ package body Sem_Prag is -- A list that contains all refined states processed so far. The list is -- used to detect duplicate refinements. + Saved_Ghost_Config : constant Ghost_Config_Type := Ghost_Config; + -- Ghost configuration before starting to process this pragma + procedure Analyze_Refinement_Clause (Clause : Node_Id); -- Perform full analysis of a single refinement clause @@ -31634,6 +32466,10 @@ package body Sem_Prag is return; end if; + -- Get the Ghost context from the pragma before analyzing its parts + + Set_Ghost_Mode (N); + -- Save the scenario for examination by the ABE Processing phase Record_Elaboration_Scenario (N); @@ -31677,6 +32513,8 @@ package body Sem_Prag is Report_Unrefined_States (Available_States); Set_Is_Analyzed_Pragma (N); + + Restore_Ghost_Region (Saved_Ghost_Config); end Analyze_Refined_State_In_Decl_Part; --------------------------------------------- @@ -32002,6 +32840,30 @@ package body Sem_Prag is return False; end Appears_In; + ------------------------ + -- Apply_Check_Policy -- + ------------------------ + + procedure Apply_Check_Policy (N : Node_Id; Policy : Name_Id) is + begin + case Policy is + when Name_Ignore | Name_Off => + Mark_Is_Ignored (N); + + when Name_Check | Name_On => + Mark_Is_Checked (N); + + when Name_Disable => + Mark_Is_Disabled (N); + + -- That should be exhaustive, the null here is a defence + -- against a malformed tree from previous errors. + + when others => + null; + end case; + end Apply_Check_Policy; + ----------------------------------- -- Build_Pragma_Check_Equivalent -- ----------------------------------- @@ -32142,84 +33004,18 @@ package body Sem_Prag is -- Check_Applicable_Policy -- ----------------------------- - procedure Check_Applicable_Policy (N : Node_Id) is - PP : Node_Id; - Policy : Name_Id; - - Ename : constant Name_Id := Original_Aspect_Pragma_Name (N); + procedure Check_Applicable_Policy (N : Node_Id; Level : Entity_Id := Empty) + is + Nam : constant Name_Id := Original_Aspect_Pragma_Name (N); begin -- No effect if not valid assertion kind name - if not Is_Valid_Assertion_Kind (Ename) then + if not Is_Valid_Assertion_Kind (Nam) then return; end if; - -- Loop through entries in check policy list - - PP := Opt.Check_Policy_List; - while Present (PP) loop - declare - PPA : constant List_Id := Pragma_Argument_Associations (PP); - Pnm : constant Name_Id := Chars (Get_Pragma_Arg (First (PPA))); - - begin - if Ename = Pnm - or else Pnm = Name_Assertion - or else (Pnm = Name_Statement_Assertions - and then Ename in Name_Assert - | Name_Assert_And_Cut - | Name_Assume - | Name_Loop_Invariant - | Name_Loop_Variant) - then - Policy := Chars (Get_Pragma_Arg (Last (PPA))); - - case Policy is - when Name_Ignore - | Name_Off - => - Set_Is_Checked (N, False); - Set_Is_Ignored (N, True); - - when Name_Check - | Name_On - => - Set_Is_Checked (N, True); - Set_Is_Ignored (N, False); - - when Name_Disable => - Set_Is_Ignored (N, True); - Set_Is_Checked (N, False); - Set_Is_Disabled (N, True); - - -- That should be exhaustive, the null here is a defence - -- against a malformed tree from previous errors. - - when others => - null; - end case; - - return; - end if; - - PP := Next_Pragma (PP); - end; - end loop; - - -- If there are no specific entries that matched, then we let the - -- setting of assertions govern. Note that this provides the needed - -- compatibility with the RM for the cases of assertion, invariant, - -- precondition, predicate, and postcondition. Note also that - -- Assertions_Enabled is forced in CodePeer mode and GNATprove mode. - - if Assertions_Enabled then - Set_Is_Checked (N, True); - Set_Is_Ignored (N, False); - else - Set_Is_Checked (N, False); - Set_Is_Ignored (N, True); - end if; + Apply_Check_Policy (N, Get_Applicable_Policy (Nam, Level)); end Check_Applicable_Policy; ------------------------------- @@ -32267,69 +33063,6 @@ package body Sem_Prag is Item); end Check_External_Properties; - ---------------- - -- Check_Kind -- - ---------------- - - function Check_Kind (Nam : Name_Id) return Name_Id is - PP : Node_Id; - - begin - -- Loop through entries in check policy list - - PP := Opt.Check_Policy_List; - while Present (PP) loop - declare - PPA : constant List_Id := Pragma_Argument_Associations (PP); - Pnm : constant Name_Id := Chars (Get_Pragma_Arg (First (PPA))); - - begin - if Nam = Pnm - or else (Pnm = Name_Assertion - and then Is_Valid_Assertion_Kind (Nam)) - or else (Pnm = Name_Statement_Assertions - and then Nam in Name_Assert - | Name_Assert_And_Cut - | Name_Assume - | Name_Loop_Invariant - | Name_Loop_Variant) - then - case Chars (Get_Pragma_Arg (Last (PPA))) is - when Name_Check - | Name_On - => - return Name_Check; - - when Name_Ignore - | Name_Off - => - return Name_Ignore; - - when Name_Disable => - return Name_Disable; - - when others => - raise Program_Error; - end case; - - else - PP := Next_Pragma (PP); - end if; - end; - end loop; - - -- If there are no specific entries that matched, then we let the - -- setting of assertions govern. Note that this provides the needed - -- compatibility with the RM for the cases of assertion, invariant, - -- precondition, predicate, and postcondition. - - if Assertions_Enabled then - return Name_Check; - else - return Name_Ignore; - end if; - end Check_Kind; - --------------------------- -- Check_Missing_Part_Of -- --------------------------- @@ -33047,6 +33780,21 @@ package body Sem_Prag is end if; end Duplication_Error; + -------------------------- + -- Find_Assertion_Level -- + -------------------------- + + function Find_Assertion_Level (Nam : Name_Id) return Entity_Id is + begin + for J in Assertion_Levels.First .. Assertion_Levels.Last loop + if Chars (Assertion_Levels.Table (J)) = Nam then + return Assertion_Levels.Table (J); + end if; + end loop; + + return Empty; + end Find_Assertion_Level; + ------------------------------ -- Find_Encapsulating_State -- ------------------------------ @@ -33195,10 +33943,9 @@ package body Sem_Prag is if Nkind (Stmt) = N_Pragma then if Do_Checks and then Original_Aspect_Pragma_Name (Stmt) = Prag_Nam + and then not From_Same_Pragma (Prag, Stmt) then - Duplication_Error - (Prag => Prag, - Prev => Stmt); + Duplication_Error (Prag => Prag, Prev => Stmt); end if; -- Emit an error when a refinement pragma appears on an expression @@ -33361,10 +34108,11 @@ package body Sem_Prag is -- Skip prior pragmas, but check for duplicates if Nkind (Stmt) = N_Pragma then - if Do_Checks and then Pragma_Name (Stmt) = Prag_Nam then - Duplication_Error - (Prag => Prag, - Prev => Stmt); + if Do_Checks + and then Pragma_Name (Stmt) = Prag_Nam + and then not From_Same_Pragma (Prag, Stmt) + then + Duplication_Error (Prag => Prag, Prev => Stmt); end if; -- Skip internally generated code @@ -33430,6 +34178,80 @@ package body Sem_Prag is end if; end Find_Related_Package_Or_Body; + --------------------------- + -- Get_Applicable_Policy -- + --------------------------- + + function Get_Applicable_Policy + (Nam : Name_Id; Level : Entity_Id) return Name_Id + is + function Is_Statement_Assertion (Nam : Name_Id) return Boolean + is (Nam + in Name_Assert + | Name_Assert_And_Cut + | Name_Assume + | Name_Loop_Invariant + | Name_Loop_Variant); + + -- Local variables + + Assocs : List_Id; + P_Arg : Node_Id; + P_Nam : Name_Id; + Policy_Prag : Node_Id; + + -- Start of processing for Get_Applicable_Policy + + begin + -- Runtime level should always be checked irregardless of other + -- policies that are applied. + + if Level = Standard_Level_Runtime then + return Name_Check; + + -- Static level or levels that depend on Static should never be + -- checked irregardless of other policies that are applied. + + elsif Level = Standard_Level_Static + or else Depends_On_Level (Level, Standard_Level_Static) + then + return Name_Ignore; + end if; + + -- Loop through entries in check policy list + + Policy_Prag := Opt.Check_Policy_List; + while Present (Policy_Prag) loop + Assocs := Pragma_Argument_Associations (Policy_Prag); + P_Arg := Get_Pragma_Arg (First (Assocs)); + P_Nam := Chars (P_Arg); + + if P_Nam = Nam + or else P_Nam = Name_Assertion + or else (P_Nam = Name_Statement_Assertions + and then Is_Statement_Assertion (Nam)) + or else (Present (Level) and then P_Nam = Chars (Level)) + then + return Chars (Get_Pragma_Arg (Last (Assocs))); + end if; + + Policy_Prag := Next_Pragma (Policy_Prag); + end loop; + + -- If there are no specific entries that matched, then we let the + -- setting of assertions govern. Note that this provides the + -- needed compatibility with the RM for the cases of assertion, + -- invariant, precondition, predicate, and postcondition. Note + -- also that Assertions_Enabled is forced in CodePeer mode and + -- GNATprove mode. + + if Assertions_Enabled then + return Name_Check; + else + return Name_Ignore; + end if; + end Get_Applicable_Policy; + ------------------ -- Get_Argument -- ------------------ @@ -33462,6 +34284,19 @@ package body Sem_Prag is end if; end Get_Argument; + ------------------------- + -- Get_Assertion_Level -- + ------------------------- + + function Get_Assertion_Level (Nam : Name_Id) return Entity_Id is + begin + if Nam = No_Name then + return Empty; + end if; + + return Find_Assertion_Level (Nam); + end Get_Assertion_Level; + ------------------------- -- Get_Base_Subprogram -- ------------------------- @@ -33602,6 +34437,7 @@ package body Sem_Prag is begin Externals.Init; Compile_Time_Warnings_Errors.Init; + Assertion_Levels.Init; end Initialize; -------- @@ -33613,6 +34449,79 @@ package body Sem_Prag is Dummy := Dummy + 1; end ip; + ---------------------------- + -- Insert_Assertion_Level -- + ---------------------------- + + procedure Insert_Assertion_Level (Level : Entity_Id) is + Nam : constant Name_Id := Chars (Level); + + Dupl : constant Entity_Id := Find_Assertion_Level (Nam); + + function Same_Dependencies (Self, Other : Entity_Id) return Boolean; + -- Check that both levels have the same number of dependencies and the + -- names of the dependencies match. + + ----------------------- + -- Same_Dependencies -- + ----------------------- + + function Same_Dependencies (Self, Other : Entity_Id) return Boolean is + Other_El : Elmt_Id; + Other_Level : Entity_Id; + Self_El : Elmt_Id; + Self_Level : Entity_Id; + + begin + pragma Assert (Ekind (Self) = E_Assertion_Level); + pragma Assert (Ekind (Other) = E_Assertion_Level); + + if List_Length (Parent_Levels (Self)) + /= List_Length (Parent_Levels (Other)) + then + return False; + end if; + + if No (Parent_Levels (Self)) then + return True; + end if; + + -- Check that dependencies match. + -- Note that we are checking for positional and element matching. + -- The positional part could be relaxed. + + Self_El := First_Elmt (Parent_Levels (Self)); + Other_El := First_Elmt (Parent_Levels (Other)); + while Present (Self_El) loop + Self_Level := Node (Self_El); + Other_Level := Node (Other_El); + + if Chars (Self_Level) /= Chars (Other_Level) then + return False; + end if; + + Next_Elmt (Self_El); + Next_Elmt (Other_El); + end loop; + + return True; + end Same_Dependencies; + + -- Start of processing for Insert_Assertion_Level + + begin + if No (Dupl) then + Assertion_Levels.Append (Level); + else + if not Same_Dependencies (Level, Dupl) then + Error_Msg_N + ("conflicting Assertion_Level definition for &", Level); + Error_Msg_Sloc := Sloc (Dupl); + Error_Msg_NE ("\differs from existing definition #", Level, Dupl); + end if; + end if; + end Insert_Assertion_Level; + ----------------------------- -- Is_Config_Static_String -- ----------------------------- @@ -33753,6 +34662,7 @@ package body Sem_Prag is Pragma_Annotate => 93, Pragma_Assert => -1, Pragma_Assert_And_Cut => -1, + Pragma_Assertion_Level => 0, Pragma_Assertion_Policy => 0, Pragma_Assume => -1, Pragma_Assume_No_Invalid_Values => 0, @@ -33978,6 +34888,7 @@ package body Sem_Prag is Pragma_Unreferenced => 0, Pragma_Unreferenced_Objects => 0, Pragma_Unreserve_All_Interrupts => 0, + Pragma_Unsigned_Base_Range => 0, Pragma_Unsuppress => 0, Pragma_Unused => 0, Pragma_Use_VADS_Size => 0, @@ -33991,7 +34902,7 @@ package body Sem_Prag is Pragma_Warnings => 0, Pragma_Weak_External => 0, Pragma_Wide_Character_Encoding => 0, - Unknown_Pragma => 0); + Pragma_Unknown => 0); function Is_Non_Significant_Pragma_Reference (N : Node_Id) return Boolean is Id : Pragma_Id; @@ -34207,6 +35118,15 @@ package body Sem_Prag is end case; end Is_Valid_Assertion_Kind; + ------------------------------ + -- Is_Valid_Assertion_Level -- + ------------------------------ + + function Is_Valid_Assertion_Level (Nam : Name_Id) return Boolean is + begin + return Present (Get_Assertion_Level (Nam)); + end Is_Valid_Assertion_Level; + -------------------------------------- -- Process_Compilation_Unit_Pragmas -- -------------------------------------- @@ -34375,6 +35295,37 @@ package body Sem_Prag is end if; end Validate_Compile_Time_Warning_Or_Error; + --------------------- + -- Mark_Is_Checked -- + --------------------- + + procedure Mark_Is_Checked (N : Node_Id) is + begin + Set_Is_Checked (N, True); + Set_Is_Ignored (N, False); + end Mark_Is_Checked; + + ---------------------- + -- Mark_Is_Disabled -- + ---------------------- + + procedure Mark_Is_Disabled (N : Node_Id) is + begin + Set_Is_Ignored (N, True); + Set_Is_Checked (N, False); + Set_Is_Disabled (N, True); + end Mark_Is_Disabled; + + --------------------- + -- Mark_Is_Ignored -- + --------------------- + + procedure Mark_Is_Ignored (N : Node_Id) is + begin + Set_Is_Checked (N, False); + Set_Is_Ignored (N, True); + end Mark_Is_Ignored; + ------------------------------------ -- Record_Possible_Body_Reference -- ------------------------------------ diff --git a/gcc/ada/sem_prag.ads b/gcc/ada/sem_prag.ads index 9228a8774a5e..1262ede04db8 100644 --- a/gcc/ada/sem_prag.ads +++ b/gcc/ada/sem_prag.ads @@ -253,6 +253,73 @@ package Sem_Prag is (Pragma_Extensions_Visible => True, others => False); + -- List of pragmas where the ghost policy checks have been disabled. + -- + -- There is an analysis circularity issue here. These pragmas are marked as + -- Ghost based on the ghostness of the entity in their argument. We need to + -- analyze the argument to determine the ghostness of the pragma. However + -- if we are analyzing a ghost argument we need to validate its context and + -- for that we need to mark the ghostness of the pragma beforehand. + -- + -- We suppress the checks for these pragmas in order to break that loop. We + -- do not need to emit an error since if the argument was ghost that means + -- that the pragma was ghost as well. + + Suppressed_Ghost_Policy_Check_Pragma : + constant array (Pragma_Id) of Boolean := + (Pragma_All_Calls_Remote => True, + Pragma_Annotate => True, + Pragma_Asynchronous => True, + Pragma_Atomic_Components => True, + Pragma_Compile_Time_Error => True, + Pragma_Compile_Time_Warning => True, + Pragma_Convention => True, + Pragma_Default_Storage_Pool => True, + Pragma_Discard_Names => True, + Pragma_Elaborate_Body => True, + Pragma_Export => True, + Pragma_Extended_Access => True, + Pragma_External => True, + Pragma_Favor_Top_Level => True, + Pragma_Import => True, + Pragma_Independent_Components => True, + Pragma_Inline => True, + Pragma_Interface => True, + Pragma_No_Return => True, + Pragma_Obsolescent => True, + Pragma_Pack => True, + Pragma_Persistent_BSS => True, + Pragma_Preelaborable_Initialization => True, + Pragma_Preelaborate => True, + Pragma_Pure => True, + Pragma_Pure_Function => True, + Pragma_Remote_Access_Type => True, + Pragma_Remote_Call_Interface => True, + Pragma_Remote_Types => True, + Pragma_Shared_Passive => True, + Pragma_Simple_Storage_Pool_Type => True, + Pragma_Suppress => True, + Pragma_Suppress_Debug_Info => True, + Pragma_Suppress_Initialization => True, + Pragma_Thread_Local_Storage => True, + Pragma_Unchecked_Union => True, + Pragma_Universal_Aliasing => True, + Pragma_Unreferenced => True, + Pragma_Unreferenced_Objects => True, + Pragma_Unsuppress => True, + Pragma_Unused => True, + Pragma_Volatile_Components => True, + others => False); + + function Find_Assertion_Level (Nam : Name_Id) return Entity_Id; + -- Find an existing definition with the given name that has been inserted + -- into the Assertion_Levels table. + + procedure Insert_Assertion_Level (Level : Entity_Id); + -- Insert a new level into the Assertion_Levels table. If there is already + -- an entry with the same name check that it has the same dependencies as + -- the level you are trying to insert. Raises an error otherwise. + ----------------- -- Subprograms -- ----------------- @@ -377,7 +444,7 @@ package Sem_Prag is -- in fact of the same kind as the source pragma Prag. This is used -- in GNATprove_Mode to generate the inherited pre- and postconditions. - procedure Check_Applicable_Policy (N : Node_Id); + procedure Check_Applicable_Policy (N : Node_Id; Level : Entity_Id := Empty); -- N is either an N_Aspect or an N_Pragma node. There are two cases. If -- the name of the aspect or pragma is not one of those recognized as -- an assertion kind by an Assertion_Policy pragma, then the call has @@ -410,25 +477,6 @@ package Sem_Prag is -- is the related variable or state. Ensure legality of the combination and -- issue an error for an illegal combination. - function Check_Kind (Nam : Name_Id) return Name_Id; - -- This function is used in connection with pragmas Assert, Check, - -- and assertion aspects and pragmas, to determine if Check pragmas - -- (or corresponding assertion aspects or pragmas) are currently active - -- as determined by the presence of -gnata on the command line (which - -- sets the default), and the appearance of pragmas Check_Policy and - -- Assertion_Policy as configuration pragmas either in a configuration - -- pragma file, or at the start of the current unit, or locally given - -- Check_Policy and Assertion_Policy pragmas that are currently active. - -- - -- The value returned is one of the names Check, Ignore, Disable (On - -- returns Check, and Off returns Ignore). - -- - -- Note: for assertion kinds Pre'Class, Post'Class, Invariant'Class, - -- and Type_Invariant'Class, the name passed is Name_uPre, Name_uPost, - -- Name_uInvariant, or Name_uType_Invariant, which corresponds to _Pre, - -- _Post, _Invariant, or _Type_Invariant, which are special names used - -- in identifiers to represent these attribute references. - procedure Check_Missing_Part_Of (Item_Id : Entity_Id); -- Determine whether the placement within the state space of an abstract -- state, variable or package instantiation denoted by Item_Id requires the @@ -533,6 +581,9 @@ package Sem_Prag is -- Context denotes the entity of the function, package or procedure where -- Prag resides. + function Get_Assertion_Level (Nam : Name_Id) return Entity_Id; + -- Returns the entity of a known Assertion_Level name + function Get_SPARK_Mode_From_Annotation (N : Node_Id) return SPARK_Mode_Type; -- Given an aspect or pragma SPARK_Mode node, return corresponding mode id @@ -599,6 +650,10 @@ package Sem_Prag is -- Name_uInvariant, and Name_uType_Invariant (_Pre, _Post, _Invariant, -- and _Type_Invariant). + function Is_Valid_Assertion_Level (Nam : Name_Id) return Boolean; + -- Return True if Nam is one of the Assertion_Levels declared in the + -- current context. + procedure Process_Compilation_Unit_Pragmas (N : Node_Id); -- Called at the start of processing compilation unit N to deal with any -- special issues regarding pragmas. In particular, we have to deal with diff --git a/gcc/ada/sem_res.adb b/gcc/ada/sem_res.adb index 29b776688023..4d467553373d 100644 --- a/gcc/ada/sem_res.adb +++ b/gcc/ada/sem_res.adb @@ -5273,7 +5273,7 @@ package body Sem_Res is end if; -- The actual parameter of a Ghost subprogram whose formal is of - -- mode IN OUT or OUT must be a Ghost variable (SPARK RM 6.9(12)). + -- mode IN OUT or OUT must be a Ghost variable (SPARK RM 6.9(15)). if Comes_From_Source (Nam) and then Is_Ghost_Entity (Nam) @@ -6954,7 +6954,7 @@ package body Sem_Res is -- checkable, the case of calling an immediately containing -- subprogram is easy to catch. - if not Is_Ignored_Ghost_Entity (Nam) then + if not Is_Ignored_Ghost_Entity_In_Codegen (Nam) then Check_Restriction (No_Recursion, N); end if; @@ -7092,7 +7092,7 @@ package body Sem_Res is and then Ekind (Nam) in E_Function | E_Subprogram_Type and then Requires_Transient_Scope (Etype (Nam)) and then not Is_Intrinsic_Subprogram (Nam) - and then not Is_Ignored_Ghost_Entity (Nam) + and then not Is_Ignored_Ghost_Entity_In_Codegen (Nam) and then not Is_Build_In_Place_Function (Nam) and then not Is_Inlinable_Expression_Function (Nam) and then not (Is_Inlined (Nam) diff --git a/gcc/ada/sem_util.adb b/gcc/ada/sem_util.adb index d19b3b956223..9e2083b8383d 100644 --- a/gcc/ada/sem_util.adb +++ b/gcc/ada/sem_util.adb @@ -347,6 +347,133 @@ package body Sem_Util is Analyze (Decl); end Add_Global_Declaration; + --------------------------- + -- Add_Local_Declaration -- + --------------------------- + + procedure Add_Local_Declaration + (Decl : Node_Id; + N : Node_Id; + Scop : Entity_Id) + is + function Find_Associated_Scope (N : Node_Id) return Scope_Kind_Id; + -- Return the scope associated with the declarative part of N + + --------------------------- + -- Find_Associated_Scope -- + --------------------------- + + function Find_Associated_Scope (N : Node_Id) return Scope_Kind_Id is + begin + case Nkind (N) is + when N_Block_Statement => + return Entity (Identifier (N)); + + when N_Compilation_Unit + | N_Compilation_Unit_Aux + => + return Standard_Standard; + + when N_Package_Specification + | N_Protected_Definition + | N_Task_Definition + => + return Defining_Entity (Parent (N)); + + when N_Entry_Body + | N_Package_Body + | N_Protected_Body + | N_Task_Body + => + return Corresponding_Spec (N); + + when N_Subprogram_Body => + if Acts_As_Spec (N) then + return Defining_Entity (N); + else + return Corresponding_Spec (N); + end if; + + when others => + raise Program_Error; + end case; + end Find_Associated_Scope; + + -- Local variables + + Nod : Node_Id; + Par : Node_Id; + + -- Start of processing for Add_Local_Declaration + + begin + Nod := N; + Par := Parent (Nod); + + -- Look for the innermost enclosing construct with a declarative part + + while Nkind (Par) not in N_Block_Statement + | N_Compilation_Unit + | N_Compilation_Unit_Aux + | N_Entry_Body + | N_Package_Body + | N_Package_Specification + | N_Protected_Body + | N_Protected_Definition + | N_Subprogram_Body + | N_Task_Body + | N_Task_Definition + or else (Present (Scop) and Find_Associated_Scope (Par) /= Scop) + loop + Nod := Par; + Par := Parent (Nod); + end loop; + + -- Compilation units do not directly have a declarative part + + if Nkind (Par) = N_Compilation_Unit then + Par := Aux_Decls_Node (Par); + end if; + + -- Insert Decl before N or at the end of the declarative part + + case Nkind (Par) is + when N_Block_Statement + | N_Compilation_Unit_Aux + | N_Entry_Body + | N_Package_Body + | N_Protected_Body + | N_Subprogram_Body + | N_Task_Body + => + if Is_List_Member (Nod) + and then List_Containing (Nod) = Declarations (Par) + then + Insert_Before (Nod, Decl); + + else + if No (Declarations (Par)) then + Set_Declarations (Par, New_List); + end if; + + Append_To (Declarations (Par), Decl); + end if; + + when N_Package_Specification + | N_Protected_Definition + | N_Task_Definition + => + Insert_Before (Nod, Decl); + + when others => + raise Program_Error; + end case; + + Push_Scope (Find_Associated_Scope (Par)); + Analyze (Decl); + Pop_Scope; + end Add_Local_Declaration; + -------------------------------- -- Address_Integer_Convert_OK -- -------------------------------- @@ -2016,7 +2143,7 @@ package body Sem_Util is -- Elaboration entity is never a ghost object, regardless of the context -- in which this routine is called. - Install_Ghost_Region (None, N); + Install_Ghost_Region (None, N, Empty); -- Here we need the elaboration entity @@ -6202,6 +6329,18 @@ package body Sem_Util is end if; end Conditional_Delay; + -------------------------------------- + -- Copy_Assertion_Policy_Attributes -- + -------------------------------------- + + procedure Copy_Assertion_Policy_Attributes (New_Prag, Old_Prag : Node_Id) is + begin + Set_Is_Checked (New_Prag, Is_Checked (Old_Prag)); + Set_Is_Ignored (New_Prag, Is_Ignored (Old_Prag)); + Set_Pragma_Ghost_Assertion_Level + (New_Prag, Pragma_Ghost_Assertion_Level (Old_Prag)); + end Copy_Assertion_Policy_Attributes; + ------------------------- -- Copy_Component_List -- ------------------------- @@ -6316,6 +6455,7 @@ package body Sem_Util is Def_Id : Node_Id; Formal_Spec : Node_Id; Result : Node_Id; + Level : Entity_Id; begin -- The structure of the original tree must be replicated without any @@ -6334,6 +6474,7 @@ package body Sem_Util is -- Create a new entity for the defining unit name Def_Id := Defining_Unit_Name (Result); + Level := Ghost_Assertion_Level (Def_Id); case Nkind (Def_Id) is when N_Defining_Identifier => @@ -6344,6 +6485,10 @@ package body Sem_Util is when others => raise Program_Error; end case; + -- Copy the relevant Ghost Assertion_Level + + Set_Ghost_Assertion_Level (Def_Id, Level); + Set_Defining_Unit_Name (Result, Def_Id); -- Create new entities for the formal parameters @@ -6725,6 +6870,28 @@ package body Sem_Util is end if; end Defining_Entity; + --------------------------------- + -- Defining_Entity_Of_Instance -- + --------------------------------- + + function Defining_Entity_Of_Instance (N : Node_Id) return Entity_Id is + pragma Assert (Nkind (N) in N_Generic_Instantiation); + Spec : constant Node_Id := Instance_Spec (N); + + begin + -- Fall back to Defining_Entity in case of previous errors + + if No (Spec) then + return Defining_Entity (N); + end if; + + if Nkind (N) = N_Package_Instantiation then + return Defining_Entity (Specification (Spec)); + else + return Related_Instance (Defining_Entity (Specification (Spec))); + end if; + end Defining_Entity_Of_Instance; + ------------------------------ -- Defining_Entity_Or_Empty -- ------------------------------ @@ -7199,6 +7366,42 @@ package body Sem_Util is return Is_Variable (N) and then Paren_Count (N) = 0; end Denotes_Variable; + ---------------------- + -- Depends_On_Level -- + ---------------------- + + function Depends_On_Level + (Self : Entity_Id; Other : Entity_Id) return Boolean + is + Elm : Elmt_Id; + Dep : Entity_Id; + begin + if No (Self) then + return False; + elsif No (Other) then + return False; + end if; + + pragma Assert (Ekind (Self) = E_Assertion_Level); + pragma Assert (Ekind (Other) = E_Assertion_Level); + + if No (Parent_Levels (Self)) then + return False; + end if; + + Elm := First_Elmt (Parent_Levels (Self)); + while Present (Elm) loop + Dep := Node (Elm); + if Dep = Other or else Depends_On_Level (Dep, Other) then + return True; + end if; + + Next_Elmt (Elm); + end loop; + + return False; + end Depends_On_Level; + ----------------------------- -- Depends_On_Discriminant -- ----------------------------- @@ -9642,6 +9845,35 @@ package body Sem_Util is and then In_Open_Scopes (Scope (Pack)); end From_Nested_Package; + ---------------------- + -- From_Same_Aspect -- + ---------------------- + + function From_Same_Aspect (Self, Other : Node_Id) return Boolean is + begin + return + Present (Original_Aspect (Self)) + and then Present (Original_Aspect (Other)) + and then Original_Aspect (Self) = Original_Aspect (Other); + end From_Same_Aspect; + + ---------------------- + -- From_Same_Pragma -- + ---------------------- + + function From_Same_Pragma (Self, Other : Node_Id) return Boolean is + begin + return + (Present (Original_Pragma (Self)) + and then Present (Original_Pragma (Other)) + and then Original_Pragma (Self) = Original_Pragma (Other)) + or else (From_Aspect_Specification (Self) + and then From_Aspect_Specification (Other) + and then From_Same_Aspect + (Corresponding_Aspect (Self), + Corresponding_Aspect (Other))); + end From_Same_Pragma; + ----------------------- -- Gather_Components -- ----------------------- @@ -11088,6 +11320,10 @@ package body Sem_Util is if Is_Entity_Name (Subp) then Subp_Id := Entity (Subp); + if No (Subp_Id) then + return Empty; + end if; + if Ekind (Subp_Id) = E_Access_Subprogram_Type then Subp_Id := Directly_Designated_Type (Subp_Id); end if; @@ -11216,6 +11452,46 @@ package body Sem_Util is end if; end Get_Views; + ---------------------------------- + -- Has_Assertion_Level_Argument -- + ---------------------------------- + + function Has_Assertion_Level_Argument (N : Node_Id) return Boolean is + Assocs : List_Id; + Assoc : Node_Id; + Choice : Node_Id; + begin + if Nkind (N) = N_Aspect_Specification then + if Nkind (Expression (N)) /= N_Aggregate then + return False; + end if; + + Assocs := Component_Associations (Expression (N)); + + if No (Assocs) then + return False; + end if; + + Assoc := First (Assocs); + Choice := First (Choices (Assoc)); + + if Nkind (Choice) = N_Identifier then + return Present (Get_Assertion_Level (Chars (Choice))); + end if; + + return False; + else + pragma Assert (Nkind (N) = N_Pragma); + Assocs := Pragma_Argument_Associations (N); + Assoc := First (Assocs); + if Present (Assoc) and then Chars (Assoc) /= No_Name then + return Present (Get_Assertion_Level (Chars (Assoc))); + end if; + + return False; + end if; + end Has_Assertion_Level_Argument; + ------------------------------ -- Has_Compatible_Alignment -- ------------------------------ @@ -15864,14 +16140,14 @@ package body Sem_Util is (E1 : Entity_Id; E2 : Entity_Id) return Boolean is - Par : Entity_Id := E2; + Cursor : Entity_Id := E2; begin - while Present (Par) and then Par /= Standard_Standard loop - if Par = E1 then + while Present (Cursor) and then Cursor /= Standard_Standard loop + if Cursor = E1 then return True; end if; - Par := Scope (Par); + Cursor := Scope (Cursor); end loop; return False; @@ -19964,7 +20240,12 @@ package body Sem_Util is elsif Is_Tagged_Type (Typ) then return True; - -- Case of nondiscriminated record + -- Case of record type with no components + + elsif No (First_Component (Typ)) then + return False; + + -- Case of record type with components else declare @@ -23027,7 +23308,8 @@ package body Sem_Util is begin -- Ada 2005 or later, and formals present. The first formal must be -- of a type that supports prefix notation: a controlling argument, - -- a class-wide type, or an access to such. + -- a class-wide type, an access to such, or an untagged record type + -- (when compiling with Core_Extensions allowed). if Ada_Version >= Ada_2005 and then Present (First_Formal (E)) @@ -23035,7 +23317,9 @@ package body Sem_Util is and then (Is_Controlling_Formal (First_Formal (E)) or else Is_Class_Wide_Type (Etype (First_Formal (E))) - or else Is_Anonymous_Access_Type (Etype (First_Formal (E)))) + or else Is_Anonymous_Access_Type (Etype (First_Formal (E))) + or else (Core_Extensions_Allowed + and then Is_Record_Type (Etype (First_Formal (E))))) then Formal := Next_Formal (First_Formal (E)); while Present (Formal) loop @@ -26405,7 +26689,10 @@ package body Sem_Util is -- Policy_In_Effect -- ---------------------- - function Policy_In_Effect (Policy : Name_Id) return Name_Id is + function Policy_In_Effect + (Policy : Name_Id; + Level : Name_Id := No_Name) return Name_Id + is function Policy_In_List (List : Node_Id) return Name_Id; -- Determine the mode of a policy in a N_Pragma list @@ -26430,7 +26717,7 @@ package body Sem_Util is -- The current Check_Policy pragma matches the requested policy or -- appears in the single argument form (Assertion, policy_id). - if Chars (Arg1) in Name_Assertion | Policy then + if Chars (Arg1) in Name_Assertion | Policy | Level then return Chars (Arg2); end if; @@ -26444,6 +26731,8 @@ package body Sem_Util is Kind : Name_Id; + Level_Id : Entity_Id; + -- Start of processing for Policy_In_Effect begin @@ -26451,6 +26740,21 @@ package body Sem_Util is raise Program_Error; end if; + if Present (Level) then + Level_Id := Get_Assertion_Level (Level); + if No (Level_Id) then + raise Program_Error; + end if; + + if Level_Id = Standard_Level_Runtime then + return Name_Check; + elsif Level_Id = Standard_Level_Static + or else Depends_On_Level (Level_Id, Standard_Level_Static) + then + return Name_Ignore; + end if; + end if; + -- Inspect all policy pragmas that appear within scopes (if any) Kind := Policy_In_List (Check_Policy_List); @@ -26508,9 +26812,8 @@ package body Sem_Util is begin return Present (Predicate_Function (Typ)) - and then (GNATprove_Mode - or else (not Predicates_Ignored (Typ) - and then not Predicate_Checks_Suppressed (Empty))); + and then not Predicates_Ignored_In_Codegen (Typ) + and then not Predicate_Checks_Suppressed (Empty); end Predicate_Enabled; ---------------------------------- @@ -26576,6 +26879,18 @@ package body Sem_Util is return Empty; end Predicate_Failure_Expression; + ----------------------------------- + -- Predicates_Ignored_In_Codegen -- + ----------------------------------- + + function Predicates_Ignored_In_Codegen (N : Node_Id) return Boolean is + begin + return + Predicates_Ignored (N) + and then not CodePeer_Mode + and then not GNATprove_Mode; + end Predicates_Ignored_In_Codegen; + ---------------------------------- -- Predicate_Tests_On_Arguments -- ---------------------------------- @@ -28013,7 +28328,7 @@ package body Sem_Util is -- Nothing to do for an ignored Ghost entity because the entity will be -- eliminated from the tree. - elsif Is_Ignored_Ghost_Entity (T) then + elsif Is_Ignored_Ghost_Entity_In_Codegen (T) then return; -- Nothing to do if entity comes from a predefined file. Library files @@ -29300,11 +29615,7 @@ package body Sem_Util is begin Pref := N; - while Nkind (Pref) in N_Explicit_Dereference - | N_Indexed_Component - | N_Selected_Component - | N_Slice - loop + while Has_Prefix (Pref) loop Pref := Prefix (Pref); end loop; diff --git a/gcc/ada/sem_util.ads b/gcc/ada/sem_util.ads index 47fcc7d14eb0..ee9ecd2abb49 100644 --- a/gcc/ada/sem_util.ads +++ b/gcc/ada/sem_util.ads @@ -62,6 +62,15 @@ package Sem_Util is -- for the current unit. The declared entity is added to current scope, -- so the caller should push a new scope as required before the call. + procedure Add_Local_Declaration + (Decl : Node_Id; + N : Node_Id; + Scop : Entity_Id); + -- This procedure adds a declaration Decl to the innermost declarative + -- part that covers N, whose associated scope is Scop if Scop is present, + -- and before N if N is in this declarative part. The declared entity is + -- added to the scope associated with the declarative part. + function Add_Suffix (E : Entity_Id; Suffix : Character) return Name_Id; -- Returns the name of E adding Suffix @@ -560,6 +569,10 @@ package Sem_Util is -- of Old_Ent is set and Old_Ent has not yet been Frozen (i.e. Is_Frozen is -- False). + procedure Copy_Assertion_Policy_Attributes (New_Prag, Old_Prag : Node_Id); + -- Copy Is_Checked, Is_Ignored and Ghost_Assertion_Level attributes from + -- Old_Node. + function Copy_Component_List (R_Typ : Entity_Id; Loc : Source_Ptr) return List_Id; @@ -683,6 +696,11 @@ package Sem_Util is -- This is equivalent to Defining_Entity but it returns Empty for nodes -- without an entity instead of raising Program_Error. + function Defining_Entity_Of_Instance (N : Node_Id) return Entity_Id; + -- Given an N_Generic_Instantiation node, returns the defining entity of + -- the instance, that is to say the entity that is declared at N (which + -- is not the same as Defining_Entity (N), see Sem_Ch12). + function Denotes_Discriminant (N : Node_Id; Check_Concurrent : Boolean := False) return Boolean; @@ -707,6 +725,11 @@ package Sem_Util is function Denotes_Variable (N : Node_Id) return Boolean; -- Returns True if node N denotes a single variable without parentheses + function Depends_On_Level + (Self : Entity_Id; Other : Entity_Id) return Boolean; + -- Check if Assertion_Level Self depends on the Assertion_Level Other + -- either directly or transitively. + function Depends_On_Discriminant (N : Node_Id) return Boolean; -- Returns True if N denotes a discriminant or if N is a range, a subtype -- indication or a scalar subtype where one of the bounds is a @@ -1055,6 +1078,13 @@ package Sem_Util is -- to entities local to the nested package. In that case the package must -- be installed on the scope stack to prevent spurious visibility errors. + function From_Same_Aspect (Self, Other : Node_Id) return Boolean; + -- True if aspects Self and Other have the same Orginal_Aspect. + + function From_Same_Pragma (Self, Other : Node_Id) return Boolean; + -- True if pragmas Self and Other have the same Original Pragma or + -- they are from the same aspect. + procedure Gather_Components (Typ : Entity_Id; Comp_List : Node_Id; @@ -1343,6 +1373,10 @@ package Sem_Util is -- Result of Has_Compatible_Alignment test, description found below. Note -- that the values are arranged in increasing order of problematicness. + function Has_Assertion_Level_Argument (N : Node_Id) return Boolean; + -- Returns true if the first argument of a pragma or an aspect is using + -- an Assertion_Level association. + function Has_Compatible_Alignment (Obj : Entity_Id; Expr : Node_Id; @@ -1486,6 +1520,8 @@ package Sem_Util is -- for which the Extended_Access aspect has been specified, either -- explicitly or by inheritance. + -- WARNING: There is a matching C declaration of this subprogram in fe.h + function Is_Function_With_Side_Effects (Subp : Entity_Id) return Boolean; -- Return True if Subp is a function with side effects, ie. it has a -- (direct or inherited) pragma Side_Effects with static value True. @@ -1829,7 +1865,7 @@ package Sem_Util is function Is_Ancestor_Package (E1 : Entity_Id; E2 : Entity_Id) return Boolean; - -- True if package E1 is an ancestor of E2 other than E2 itself + -- True if package E1 is an ancestor of E2 function Is_Atomic_Object (N : Node_Id) return Boolean; -- Determine whether arbitrary node N denotes a reference to an atomic @@ -2082,14 +2118,42 @@ package Sem_Util is function Is_Ignored_Ghost_Entity_In_Codegen (N : Node_Id) return Boolean; -- True if N Is_Ignored_Ghost_Entity and GNATProve_mode and Codepeer_Mode -- are not active. + -- + -- See Is_Ignored_In_Codegen for instructions on when this function should + -- be used. function Is_Ignored_Ghost_Pragma_In_Codegen (N : Node_Id) return Boolean; -- True if N Is_Ignored_Ghost_Pragma and GNATProve_mode and Codepeer_Mode -- are not active. + -- + -- See Is_Ignored_In_Codegen for instructions on when this function should + -- be used. function Is_Ignored_In_Codegen (N : Node_Id) return Boolean; -- True if N Is_Ignored and GNATProve_mode and Codepeer_Mode are not -- active. + -- + -- Tools like GNATProve and Codepeer that use the frontend to get the + -- representation of the source code along with all of the code generated + -- for assertions. This includes even the ones that are ignored. The + -- frontend normally avoids the generation of such assertions and ghost + -- code if marked as ignored. However we should still enable the generation + -- when working in one of those tool modes. In most cases this means that + -- we should ignore the fact the given node is marked as ignored and behave + -- as if it was not. This involves checking attributes such as Is_Ignored + -- along with these tool modes. + -- + -- This function (and similar _In_Codegen functions) behaves as a wrapper + -- for such conditions. We should use this functions in scenarios where we + -- would normally stop the code generation for such ignored nodes. For + -- example in the expander where we normally transform non-ignored nodes. + -- Not doing so may lead to a partially expanded tree for those tools. + -- + -- On the other hand we should use these attributes directly when + -- propagating the Is_Ignored or other similar property related values + -- between nodes. Additionally we should be using the original attributes + -- when checking for the compatibility of the checked/ignored properties + -- between nodes. function Is_EVF_Expression (N : Node_Id) return Boolean; -- Determine whether node N denotes a reference to a formal parameter of @@ -2259,6 +2323,11 @@ package Sem_Util is -- legal. They will need to be checked again after subprogram call has -- been resolved. + function Is_Same_Or_Depends_On_Level + (Self : Entity_Id; Other : Entity_Id) return Boolean + is (Self = Other or else Depends_On_Level (Self, Other)); + -- Check if Assertion_Level Self is or depends on the Assertion_Level Other + function Is_Package_Contract_Annotation (Item : Node_Id) return Boolean; -- Determine whether aspect specification or pragma Item is one of the -- following package contract annotations: @@ -2913,7 +2982,10 @@ package Sem_Util is -- of the corresponding formal entity, otherwise returns Empty. Also -- handles the case of references to renamings of formals. - function Policy_In_Effect (Policy : Name_Id) return Name_Id; + function Policy_In_Effect + (Policy : Name_Id; + Level : Name_Id := No_Name) + return Name_Id; -- Given a policy, return the policy identifier associated with it. If no -- such policy is in effect, the value returned is No_Name. @@ -2931,6 +3003,13 @@ package Sem_Util is -- returns the result of recursing on the ancestor subtype. -- Otherwise, returns Empty. + function Predicates_Ignored_In_Codegen (N : Node_Id) return Boolean; + -- True if N Predicates_Ignored is set and GNATProve_mode and Codepeer_Mode + -- are not active. + -- + -- See Is_Ignored_In_Codegen for instructions on when this function should + -- be used. + function Predicate_Function_Needs_Membership_Parameter (Typ : Entity_Id) return Boolean is (Present (Predicate_Failure_Expression (Typ, Inherited_OK => True))); diff --git a/gcc/ada/sinfo.ads b/gcc/ada/sinfo.ads index 3d11d5c5aa67..2c15b80d12ef 100644 --- a/gcc/ada/sinfo.ads +++ b/gcc/ada/sinfo.ads @@ -798,6 +798,12 @@ package Sinfo is -- ancestor of the type of the aggregate in a generic context, if any, -- when the type is a derived tagged type. Otherwise Empty. + -- Aspect_Ghost_Assertion_Level + -- Assertion_Level that was originally used in the assertion level + -- associations of its arguments. These aspects are transformed to new + -- aspects with the associated arguments and the original assertion + -- level is stored in this attribute. + -- Aspect_On_Partial_View -- Present on an N_Aspect_Specification node. For an aspect that applies -- to a type entity, indicates whether the specification appears on the @@ -1470,7 +1476,7 @@ package Sinfo is -- Has_Target_Names -- Present in assignment statements. Indicates that the RHS contains - -- target names (see AI12-0125-3) and must be expanded accordingly. + -- target names ("@" -- see AI12-0125-3). -- Has_Wide_Character -- Present in string literals, set if any wide character (i.e. character @@ -1872,6 +1878,12 @@ package Sinfo is -- Indicates that an expression is a static expression according to the -- rules in RM-4.9. See Sem_Eval for details. + -- Is_Structural + -- Present in N_Generic_Instantiation nodes. Set if the instantiation is + -- structural, that is to say, is the unique anonymous instantiation of + -- the generic unit on the actual parameters done in the outermost scope + -- where it would be legal to declare an identical named instantiation. + -- Is_Subprogram_Descriptor -- Present in N_Object_Declaration, and set only for the object -- declaration generated for a subprogram descriptor in fast exception @@ -2122,6 +2134,12 @@ package Sinfo is -- indication carries a null-exclusion indicator, which is distinct from -- the null-exclusion indicator that may precede the access keyword. + -- Original_Pragma + -- When aspects with assertion level associations are transformed in to + -- individual aspects without the assertion level we store the original + -- aspect in this attribute. This is used to avoid duplicate detection on + -- these aspects. + -- Original_Discriminant -- Present in identifiers. Used in references to discriminants that -- appear in generic units. Because the names of the discriminants may be @@ -2138,6 +2156,12 @@ package Sinfo is -- interferes with the Entity field, making it impossible to preserve the -- original entity at the point of instantiation. + -- Original_Pragma + -- When pragmas with assertion level associations are transformed in to + -- individual pragmas without the assertion level we store the original + -- prama in this attribute. This is used to avoid duplicate detection on + -- these pragmas. + -- Others_Discrete_Choices -- When a case statement or variant is analyzed, the semantic checks -- determine the actual list of choices that correspond to an others @@ -2166,6 +2190,12 @@ package Sinfo is -- type, a subsequently generated error message indicates the position -- of its full declaration. + -- Pragma_Ghost_Assertion_Level + -- Assertion_Level that was originally used in the assertion level + -- associations of its arguments. These pragmas are transformed to new + -- pragmas with the associated arguments and the original assertion + -- level is stored in this attribute. + -- Present_Expr -- Present in an N_Variant node. This has a meaningful value only after -- Gigi has back annotated the tree with representation information. At @@ -2705,6 +2735,8 @@ package Sinfo is -- Is_Delayed_Aspect -- Is_Disabled -- Import_Interface_Present + -- Original_Pragma + -- Pragma_Ghost_Assertion_Level -- Uneval_Old_Warn -- Note: we should have a section on what pragmas are passed on to @@ -7093,6 +7125,7 @@ package Sinfo is -- Is_Elaboration_Warnings_OK_Node -- Is_Declaration_Level_Node -- Is_Known_Guaranteed_ABE + -- Is_Structural -- N_Procedure_Instantiation -- Sloc points to PROCEDURE @@ -7109,6 +7142,7 @@ package Sinfo is -- Must_Override set if overriding indicator present -- Must_Not_Override set if not_overriding indicator present -- Is_Known_Guaranteed_ABE + -- Is_Structural -- N_Function_Instantiation -- Sloc points to FUNCTION @@ -7125,6 +7159,7 @@ package Sinfo is -- Must_Override set if overriding indicator present -- Must_Not_Override set if not_overriding indicator present -- Is_Known_Guaranteed_ABE + -- Is_Structural -- Note: overriding indicator is an Ada 2005 feature @@ -7627,7 +7662,9 @@ package Sinfo is -- Is_Delayed_Aspect -- Is_Disabled -- Is_Boolean_Aspect + -- Aspect_Ghost_Assertion_Level -- Aspect_On_Partial_View + -- Original_Aspect -- Note: Aspect_Specification is an Ada 2012 feature diff --git a/gcc/ada/snames.adb-tmpl b/gcc/ada/snames.adb-tmpl index 264b81e78caa..fcfd3901e17b 100644 --- a/gcc/ada/snames.adb-tmpl +++ b/gcc/ada/snames.adb-tmpl @@ -281,10 +281,12 @@ package body Snames is return Pragma_Storage_Size; when Name_Storage_Unit => return Pragma_Storage_Unit; + when Name_Unsigned_Base_Range => + return Pragma_Unsigned_Base_Range; when First_Pragma_Name .. Last_Pragma_Name => return Pragma_Id'Val (N - First_Pragma_Name); when others => - return Unknown_Pragma; + return Pragma_Unknown; end case; end Get_Pragma_Id; @@ -508,7 +510,8 @@ package body Snames is or else N = Name_Priority or else N = Name_Secondary_Stack_Size or else N = Name_Storage_Size - or else N = Name_Storage_Unit; + or else N = Name_Storage_Unit + or else N = Name_Unsigned_Base_Range; end Is_Pragma_Name; --------------------------------- diff --git a/gcc/ada/snames.ads-tmpl b/gcc/ada/snames.ads-tmpl index 272e10ba1d58..d6fe60ba89ac 100644 --- a/gcc/ada/snames.ads-tmpl +++ b/gcc/ada/snames.ads-tmpl @@ -424,6 +424,7 @@ package Snames is Name_Aggregate_Individually_Assign : constant Name_Id := N + $; -- GNAT Name_Allow_Integer_Address : constant Name_Id := N + $; -- GNAT Name_Annotate : constant Name_Id := N + $; -- GNAT + Name_Assertion_Level : constant Name_Id := N + $; -- GNAT Name_Assertion_Policy : constant Name_Id := N + $; -- Ada 05 Name_Assume_No_Invalid_Values : constant Name_Id := N + $; -- GNAT Name_C_Pass_By_Copy : constant Name_Id := N + $; -- GNAT @@ -573,7 +574,7 @@ package Snames is Name_Extensions_Visible : constant Name_Id := N + $; -- GNAT Name_External : constant Name_Id := N + $; -- GNAT Name_Finalize_Storage_Only : constant Name_Id := N + $; -- GNAT - Name_First_Controlling_Parameter : constant Name_Id := N + $; + Name_First_Controlling_Parameter : constant Name_Id := N + $; -- GNAT Name_Ghost : constant Name_Id := N + $; -- GNAT Name_Global : constant Name_Id := N + $; -- GNAT Name_Ident : constant Name_Id := N + $; -- GNAT @@ -721,6 +722,13 @@ package Snames is Name_Unreferenced : constant Name_Id := N + $; -- GNAT Name_Unreferenced_Objects : constant Name_Id := N + $; -- GNAT Name_Unreserve_All_Interrupts : constant Name_Id := N + $; -- GNAT + + -- Note: Unsigned_Base_Range is not in this list because its name matches + -- the name of the corresponding attribute. However, it is included in the + -- definition of the type Pragma_Id and the functions Get_Pragma_Id and + -- Is_Pragma_Name correctly recognize and process Unsigned_Base_Range. + -- Unsigned_Base_Range is a Core Extension pragma. + Name_Unused : constant Name_Id := N + $; -- GNAT Name_Volatile : constant Name_Id := N + $; Name_Volatile_Components : constant Name_Id := N + $; @@ -1056,6 +1064,7 @@ package Snames is Name_Unconstrained_Array : constant Name_Id := N + $; -- GNAT Name_Universal_Literal_String : constant Name_Id := N + $; -- GNAT Name_Unrestricted_Access : constant Name_Id := N + $; -- GNAT + Name_Unsigned_Base_Range : constant Name_Id := N + $; -- GNAT Name_Update : constant Name_Id := N + $; -- GNAT Name_VADS_Size : constant Name_Id := N + $; -- GNAT Name_Val : constant Name_Id := N + $; @@ -1409,6 +1418,10 @@ package Snames is Name_Reference_Control_Type : constant Name_Id := N + $; Name_Get_Element_Access : constant Name_Id := N + $; + -- Names used to implement Assertion_Levels + + Name_uDefault_Assertion_Level : constant Name_Id := N + $; + -- Names for Ada 202x Aggregate aspect. Name_Aggregate is already -- present for gprbuild. @@ -1595,6 +1608,7 @@ package Snames is Attribute_Unconstrained_Array, Attribute_Universal_Literal_String, Attribute_Unrestricted_Access, + Attribute_Unsigned_Base_Range, Attribute_Update, Attribute_VADS_Size, Attribute_Val, @@ -1773,6 +1787,7 @@ package Snames is Pragma_Aggregate_Individually_Assign, Pragma_Allow_Integer_Address, Pragma_Annotate, + Pragma_Assertion_Level, Pragma_Assertion_Policy, Pragma_Assume_No_Invalid_Values, Pragma_C_Pass_By_Copy, @@ -2027,10 +2042,11 @@ package Snames is Pragma_Secondary_Stack_Size, Pragma_Storage_Size, Pragma_Storage_Unit, + Pragma_Unsigned_Base_Range, -- The value to represent an unknown or unrecognized pragma - Unknown_Pragma); + Pragma_Unknown); ----------------------------------- -- Queuing Policy ID definitions -- @@ -2151,7 +2167,7 @@ package Snames is -- to call this function with a name that is not the name of a check. function Get_Pragma_Id (N : Name_Id) return Pragma_Id; - -- Returns Id of pragma corresponding to given name. Returns Unknown_Pragma + -- Returns Id of pragma corresponding to given name. Returns Pragma_Unknown -- if N is not a name of a known (Ada defined or GNAT-specific) pragma. -- Note that the function also works correctly for names of pragmas that -- are not included in the main list of pragma Names (e.g. Name_CPU returns diff --git a/gcc/ada/snames.h-tmpl b/gcc/ada/snames.h-tmpl index f01642ffbff8..a9370235438f 100644 --- a/gcc/ada/snames.h-tmpl +++ b/gcc/ada/snames.h-tmpl @@ -35,7 +35,7 @@ enum Name_Id : Int /* Define the numeric values for attributes. */ -enum Attribute_Id : unsigned char +enum Attribute_Id : Byte { Attr_ !! TEMPLATE INSERTION POINT }; @@ -46,7 +46,7 @@ enum Attribute_Id : unsigned char static inline Attribute_Id Get_Attribute_Id (int id) { - extern unsigned char snames__get_attribute_id (int); + extern Byte snames__get_attribute_id (int); return (Attribute_Id) snames__get_attribute_id (id); } @@ -64,7 +64,7 @@ extern Boolean Is_Pragma_Name (Name_Id); /* Define the numeric values for the pragmas. */ -enum Pragma_Id : Byte +enum Pragma_Id : Word { Pragma_ !! TEMPLATE_INSERTION_POINT }; @@ -75,7 +75,7 @@ enum Pragma_Id : Byte static inline Pragma_Id Get_Pragma_Id (int id) { - extern unsigned char snames__get_pragma_id (int); + extern Word snames__get_pragma_id (int); return (Pragma_Id) snames__get_pragma_id (id); } diff --git a/gcc/ada/sprint.adb b/gcc/ada/sprint.adb index 7a9749287af8..f5caa3d1b78d 100644 --- a/gcc/ada/sprint.adb +++ b/gcc/ada/sprint.adb @@ -2190,6 +2190,13 @@ package body Sprint is Indent_End; end if; + if Present (Finally_Statements (Node)) then + Write_Indent_Str ("finally"); + Indent_Begin; + Sprint_Node_List (Finally_Statements (Node)); + Indent_End; + end if; + Sprint_At_End_Proc (Node); when N_Identifier => diff --git a/gcc/ada/stand.ads b/gcc/ada/stand.ads index 9b511d584c86..770b7fa44c25 100644 --- a/gcc/ada/stand.ads +++ b/gcc/ada/stand.ads @@ -484,4 +484,16 @@ package Stand is Standard_Op_Shift_Right_Arithmetic : Entity_Id; -- These entities are used for shift operators generated by the expander + Standard_Level_Static : Entity_Id; + -- Assertion_Level that indicates that the associated entity is never + -- checked. + + Standard_Level_Runtime : Entity_Id; + -- Assertion_Level that indicates that the associated entity is always + -- checked. + + Standard_Level_Default : Entity_Id; + -- A special internally defined Assertion_Level that is applied to entities + -- that were not using Assertion_Levels syntactically. + end Stand; diff --git a/gcc/ada/switch-c.adb b/gcc/ada/switch-c.adb index efad12c9c408..3b4375700c01 100644 --- a/gcc/ada/switch-c.adb +++ b/gcc/ada/switch-c.adb @@ -636,6 +636,46 @@ package body Switch.C is Generate_Processed_File := True; Ptr := Ptr + 1; + if Ptr <= Max + and then Switch_Chars (Ptr) in 'b' | 'c' | 'e' + then + case Switch_Chars (Ptr) is + when 'b' => + Opt.Blank_Deleted_Lines := True; + Opt.Comment_Deleted_Lines := False; + Opt.Empty_Comment_Deleted_Lines := False; + + when 'c' => + Opt.Blank_Deleted_Lines := False; + Opt.Comment_Deleted_Lines := True; + Opt.Empty_Comment_Deleted_Lines := False; + + when 'e' => + Opt.Blank_Deleted_Lines := False; + Opt.Comment_Deleted_Lines := False; + Opt.Empty_Comment_Deleted_Lines := True; + + when others => + raise Program_Error; + end case; + + Ptr := Ptr + 1; + + -- Default to emitting blank lines for deleted lines + -- when generating a preprocessor output file. This is + -- despite the fact that when the file isn't being + -- generated, we emit empty comment lines for the + -- internally generated output (to avoid conflicts + -- with style switches -gnatyu and -gnatyM), but is + -- done for compatibility with the behavior of -gnateG + -- prior to adding support for empty comment lines. + + else + Opt.Blank_Deleted_Lines := True; + Opt.Comment_Deleted_Lines := False; + Opt.Empty_Comment_Deleted_Lines := False; + end if; + -- -gnateH (set reverse Bit_Order threshold to 64) when 'H' => diff --git a/gcc/ada/targparm.adb b/gcc/ada/targparm.adb index 9496d538b68a..d284e61a013f 100644 --- a/gcc/ada/targparm.adb +++ b/gcc/ada/targparm.adb @@ -307,7 +307,7 @@ package body Targparm is -- Test for type Address is private - elsif Looking_At_Skip (" type Address is private;") then + elsif Looking_At_Skip (" type Address is private") then Opt.Address_Is_Private := True; goto Line_Loop_Continue; diff --git a/gcc/ada/tbuild.adb b/gcc/ada/tbuild.adb index 52fdbfc2163f..2840707f2e93 100644 --- a/gcc/ada/tbuild.adb +++ b/gcc/ada/tbuild.adb @@ -151,6 +151,21 @@ package body Tbuild is null; end Discard_Node; + -------------------------- + -- Make_Assertion_Level -- + -------------------------- + + function Make_Assertion_Level + (Loc : Source_Ptr; Nam : Name_Id) return Entity_Id + is + Level : constant Entity_Id := Make_Defining_Identifier (Loc, Nam); + begin + Mutate_Ekind (Level, E_Assertion_Level); + Set_Etype (Level, Standard_Void_Type); + Set_Scope (Level, Standard_Standard); + return Level; + end Make_Assertion_Level; + ------------------------------------------- -- Make_Byte_Aligned_Attribute_Reference -- ------------------------------------------- diff --git a/gcc/ada/tbuild.ads b/gcc/ada/tbuild.ads index dc8b7f310c08..3a0adff97c7a 100644 --- a/gcc/ada/tbuild.ads +++ b/gcc/ada/tbuild.ads @@ -60,6 +60,10 @@ package Tbuild is -- effect (e.g. a call to the parser to parse a list of compilation -- units), but the List_Id value is not required. + function Make_Assertion_Level + (Loc : Source_Ptr; Nam : Name_Id) return Entity_Id; + -- Create a new Defining_Identifier node for an Assertion_Level + function Make_Byte_Aligned_Attribute_Reference (Sloc : Source_Ptr; Prefix : Node_Id; diff --git a/gcc/ada/treepr.adb b/gcc/ada/treepr.adb index 857b9263f012..fbad71a3765a 100644 --- a/gcc/ada/treepr.adb +++ b/gcc/ada/treepr.adb @@ -1047,9 +1047,11 @@ package body Treepr is FD : Field_Descriptor; Format : UI_Format := Auto) is - NN : constant Node_Id := Node_To_Fetch_From (N, Field); + NN : constant Node_Id := Node_To_Fetch_From_If_Set (N, Field); + -- If NN is Empty, it means that we cannot compute the + -- Node_To_Fetch_From, so we simply skip this field. begin - if not Field_Is_Initial_Zero (N, Field) then + if Present (NN) and then not Field_Is_Initial_Zero (N, Field) then Print_Field (Prefix, Image (Field), NN, FD, Format); end if; end Print_Entity_Field; diff --git a/gcc/ada/types.h b/gcc/ada/types.h index d0a1a04f979f..98ef06089fce 100644 --- a/gcc/ada/types.h +++ b/gcc/ada/types.h @@ -57,6 +57,9 @@ typedef Int Pos; /* 8-bit unsigned integer */ typedef unsigned char Byte; +/* 16-bit unsigned integer */ +typedef unsigned short Word; + /* 8-Bit Character and String Types: */ /* 8-bit character type */ diff --git a/gcc/ada/usage.adb b/gcc/ada/usage.adb index 5b87bb54dcaa..bf8417a92c85 100644 --- a/gcc/ada/usage.adb +++ b/gcc/ada/usage.adb @@ -196,8 +196,8 @@ begin -- Line for -gnateG switch - Write_Switch_Char ("eG"); - Write_Line ("Generate preprocessed source"); + Write_Switch_Char ("eG[?]"); + Write_Line ("Generate preprocessed source (?=b/c/e)"); -- Line for -gnateH switch @@ -674,7 +674,7 @@ begin Write_Line (" D check declared identifiers in mixed case"); Write_Line (" e check end/exit labels present"); Write_Line (" f check no form feeds/vertical tabs in source"); - Write_Line (" g check standard GNAT style rules, same as ydISux"); + Write_Line (" g check GNAT style rules, same as ydISuxz"); Write_Line (" h check no horizontal tabs in source"); Write_Line (" i check if-then layout"); Write_Line (" I check mode in"); diff --git a/gcc/analyzer/ChangeLog b/gcc/analyzer/ChangeLog index aca818632712..d435387a4ded 100644 --- a/gcc/analyzer/ChangeLog +++ b/gcc/analyzer/ChangeLog @@ -1,3 +1,28 @@ +2025-10-03 David Malcolm + + Revert: + 2025-10-03 David Malcolm + + * ana-state-to-diagnostic-state.cc: Reimplement throughout to use + json::property instances found within custom_sarif_properties + throughout, rather than types in diagnostics::state_graphs. + * ana-state-to-diagnostic-state.h: Likewise. + * checker-event.cc: Likewise. + * sm-malloc.cc: Likewise. + +2025-10-02 David Malcolm + + * ana-state-to-diagnostic-state.cc: Reimplement throughout to use + json::property instances found within custom_sarif_properties + throughout, rather than types in diagnostics::state_graphs. + * ana-state-to-diagnostic-state.h: Likewise. + * checker-event.cc: Likewise. + * sm-malloc.cc: Likewise. + +2025-09-15 Alexandre Oliva + + * kf.cc (register_known_functions): Add __get_errno_ptr. + 2025-08-29 David Malcolm * pending-diagnostic.cc: Include "diagnostics/logging.h". diff --git a/gcc/analyzer/kf.cc b/gcc/analyzer/kf.cc index 2a7c35703153..5c54b5564486 100644 --- a/gcc/analyzer/kf.cc +++ b/gcc/analyzer/kf.cc @@ -2373,6 +2373,7 @@ register_known_functions (known_function_manager &kfm, kfm.add ("___errno", std::make_unique ()); kfm.add ("__error", std::make_unique ()); kfm.add ("__errno", std::make_unique ()); + kfm.add ("__get_errno_ptr", std::make_unique ()); } /* Language-specific support functions. */ diff --git a/gcc/attribs.cc b/gcc/attribs.cc index 3fce9d625256..7d7f8f36a7fc 100644 --- a/gcc/attribs.cc +++ b/gcc/attribs.cc @@ -39,6 +39,7 @@ along with GCC; see the file COPYING3. If not see #include "tree-pretty-print.h" #include "intl.h" #include "gcc-urlifier.h" +#include "cgraph.h" /* Table of the tables of attributes (common, language, format, machine) searched. */ @@ -1085,7 +1086,27 @@ make_attribute (string_slice name, string_slice arg_name, tree chain) return attr; } -/* Common functions used for target clone support. */ +/* Default implementation of TARGET_OPTION_FUNCTIONS_B_RESOLVABLE_FROM_A. + Used to check very basically if DECL_B is callable from DECL_A. + For now this checks if the version strings are the same. */ + +bool +functions_b_resolvable_from_a (tree decl_a, tree decl_b, + tree base ATTRIBUTE_UNUSED) +{ + const char *attr_name = TARGET_HAS_FMV_TARGET_ATTRIBUTE + ? "target" + : "target_version"; + + tree attr_a = lookup_attribute (attr_name, DECL_ATTRIBUTES (decl_a)); + tree attr_b = lookup_attribute (attr_name, DECL_ATTRIBUTES (decl_b)); + + gcc_assert (attr_b); + if (!attr_a) + return false; + + return attribute_value_equal (attr_a, attr_b); +} /* Comparator function to be used in qsort routine to sort attribute specification strings to "target". */ @@ -1176,71 +1197,6 @@ sorted_attr_string (tree arglist) return ret_str; } - -/* This function returns true if FN1 and FN2 are versions of the same function, - that is, the target strings of the function decls are different. This assumes - that FN1 and FN2 have the same signature. */ - -bool -common_function_versions (tree fn1, tree fn2) -{ - tree attr1, attr2; - char *target1, *target2; - bool result; - - if (TREE_CODE (fn1) != FUNCTION_DECL - || TREE_CODE (fn2) != FUNCTION_DECL) - return false; - - attr1 = lookup_attribute ("target", DECL_ATTRIBUTES (fn1)); - attr2 = lookup_attribute ("target", DECL_ATTRIBUTES (fn2)); - - /* At least one function decl should have the target attribute specified. */ - if (attr1 == NULL_TREE && attr2 == NULL_TREE) - return false; - - /* Diagnose missing target attribute if one of the decls is already - multi-versioned. */ - if (attr1 == NULL_TREE || attr2 == NULL_TREE) - { - if (DECL_FUNCTION_VERSIONED (fn1) || DECL_FUNCTION_VERSIONED (fn2)) - { - if (attr2 != NULL_TREE) - { - std::swap (fn1, fn2); - attr1 = attr2; - } - auto_diagnostic_group d; - error_at (DECL_SOURCE_LOCATION (fn2), - "missing % attribute for multi-versioned %qD", - fn2); - inform (DECL_SOURCE_LOCATION (fn1), - "previous declaration of %qD", fn1); - /* Prevent diagnosing of the same error multiple times. */ - DECL_ATTRIBUTES (fn2) - = tree_cons (get_identifier ("target"), - copy_node (TREE_VALUE (attr1)), - DECL_ATTRIBUTES (fn2)); - } - return false; - } - - target1 = sorted_attr_string (TREE_VALUE (attr1)); - target2 = sorted_attr_string (TREE_VALUE (attr2)); - - /* The sorted target strings must be different for fn1 and fn2 - to be versions. */ - if (strcmp (target1, target2) == 0) - result = false; - else - result = true; - - XDELETEVEC (target1); - XDELETEVEC (target2); - - return result; -} - /* Make a dispatcher declaration for the multi-versioned function DECL. Calls to DECL function will be replaced with calls to the dispatcher by the front-end. Return the decl created. */ @@ -1248,18 +1204,12 @@ common_function_versions (tree fn1, tree fn2) tree make_dispatcher_decl (const tree decl) { - tree func_decl; - char *func_name; - tree fn_type, func_type; + tree fn_type = TREE_TYPE (decl); + tree func_type = build_function_type (TREE_TYPE (fn_type), + TYPE_ARG_TYPES (fn_type)); + tree func_decl = build_fn_decl (IDENTIFIER_POINTER (DECL_NAME (decl)), + func_type); - func_name = xstrdup (IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl))); - - fn_type = TREE_TYPE (decl); - func_type = build_function_type (TREE_TYPE (fn_type), - TYPE_ARG_TYPES (fn_type)); - - func_decl = build_fn_decl (func_name, func_type); - XDELETEVEC (func_name); TREE_USED (func_decl) = 1; DECL_CONTEXT (func_decl) = NULL_TREE; DECL_INITIAL (func_decl) = error_mark_node; @@ -1269,6 +1219,34 @@ make_dispatcher_decl (const tree decl) DECL_EXTERNAL (func_decl) = 1; /* This will be of type IFUNCs have to be externally visible. */ TREE_PUBLIC (func_decl) = 1; + TREE_NOTHROW (func_decl) = TREE_NOTHROW (decl); + + /* Set the decl name to avoid graph_node re-mangling it. */ + SET_DECL_ASSEMBLER_NAME (func_decl, DECL_ASSEMBLER_NAME (decl)); + + cgraph_node *node = cgraph_node::get (decl); + gcc_assert (node); + cgraph_function_version_info *node_v = node->function_version (); + gcc_assert (node_v); + + /* Set flags on the cgraph_node for the new decl. */ + cgraph_node *func_node = cgraph_node::get_create (func_decl); + func_node->dispatcher_function = true; + func_node->definition = true; + + cgraph_function_version_info *func_v + = func_node->insert_new_function_version (); + func_v->next = node_v; + func_v->assembler_name = node_v->assembler_name; + + /* If the default node is from a target_clone, mark the dispatcher as from + target_clone. */ + func_node->is_target_clone = node->is_target_clone; + + /* Get the assembler name by mangling with the base assembler name. */ + tree id = targetm.mangle_decl_assembler_name + (func_decl, func_v->assembler_name); + symtab->change_decl_assembler_name (func_decl, id); return func_decl; } @@ -1277,7 +1255,8 @@ make_dispatcher_decl (const tree decl) With the target attribute semantics, returns true if the function is marked as default with the target version. With the target_version attribute semantics, returns true if the function - is either not annotated, or annotated as default. */ + is either not annotated, annotated as default, or is a target_clone + containing the default declaration. */ bool is_function_default_version (const tree decl) @@ -1294,6 +1273,13 @@ is_function_default_version (const tree decl) } else { + if (lookup_attribute ("target_clones", DECL_ATTRIBUTES (decl))) + { + int num_defaults = 0; + get_clone_versions (decl, &num_defaults); + return num_defaults > 0; + } + attr = lookup_attribute ("target_version", DECL_ATTRIBUTES (decl)); if (!attr) return true; diff --git a/gcc/attribs.h b/gcc/attribs.h index b8b6838599cc..b6f3d5a0f9bb 100644 --- a/gcc/attribs.h +++ b/gcc/attribs.h @@ -54,9 +54,9 @@ extern struct scoped_attributes * register_scoped_attributes (const scoped_attribute_specs &, bool = false); extern char *sorted_attr_string (tree); -extern bool common_function_versions (tree, tree); extern tree make_dispatcher_decl (const tree); extern bool is_function_default_version (const tree); +extern bool functions_b_resolvable_from_a (tree, tree, tree); extern void handle_ignored_attributes_option (vec *); /* Return a type like TTYPE except that its TYPE_ATTRIBUTES diff --git a/gcc/auto-profile.cc b/gcc/auto-profile.cc index ce607a68d2ee..6971204ddf55 100644 --- a/gcc/auto-profile.cc +++ b/gcc/auto-profile.cc @@ -100,7 +100,7 @@ along with GCC; see the file COPYING3. If not see significantly form one inline instance to another and from the offline version. - This is controlled by -fauto-profile-inlinig and is independent + This is controlled by -fauto-profile-inlining and is independent of -fearly-inlining. Phase 4: In AFDO pass. @@ -128,7 +128,7 @@ along with GCC; see the file COPYING3. If not see considered cols. */ gcov_type afdo_hot_bb_threshod = -1; -/* Return ture if COUNT is possiby hot. */ +/* Return true if COUNT is possibly hot. */ bool maybe_hot_afdo_count_p (profile_count count) { @@ -136,6 +136,24 @@ maybe_hot_afdo_count_p (profile_count count) return count.ipa ().to_gcov_type () >= afdo_hot_bb_threshod; } +/* Return true if location of STMT may be expressed by debug info. */ + +static bool +stmt_loc_used_by_debug_info (gimple *stmt) +{ + /* Only inline_entry and gimple_bind's locations + are not output into debug output. */ + if (is_gimple_debug (stmt)) + return gimple_debug_begin_stmt_p (stmt); + if (gimple_code (stmt) == GIMPLE_LABEL + || gimple_code (stmt) == GIMPLE_NOP + || gimple_code (stmt) == GIMPLE_PREDICT) + return false; + if (gimple_clobber_p (stmt)) + return false; + return true; +} + namespace autofdo { @@ -354,7 +372,7 @@ class function_instance removed_icall_target_ = true; } - /* Reutrn true if function is removed from indir target list. */ + /* Return true if function is removed from indir target list. */ bool removed_icall_target () { @@ -488,7 +506,7 @@ class function_instance to it. */ bool realized_; - /* Ture if function is in worklist for merging/offlining. */ + /* True if function is in worklist for merging/offlining. */ bool in_worklist_; /* Pointer to outer function instance or NULL if this @@ -1072,7 +1090,7 @@ function_instance::merge (function_instance *other, } /* Make inline function FN offline. - If tolevel function of same name already exists, then merge profiles. + If toplevel function of same name already exists, then merge profiles. Otherwise turn FN toplevel. Return true if new toplevel function was introduced. If new toplevel functions are created and NEW_FUNCTIONS != NULL, @@ -1353,10 +1371,13 @@ function_instance::match (cgraph_node *node, gphi *phi = gpi.phi (); inline_stack stack; + /* We do not assign discriminators to PHI nodes. + In case we every start using them, we wil need to + update tree-cfg.cc::assign_discriminators. */ + gcc_assert (gimple_location (phi) == UNKNOWN_LOCATION); get_inline_stack_in_node (gimple_location (phi), &stack, node); count_info *info = lookup_count (gimple_location (phi), stack, node); - if (info) - counts.add (info); + gcc_assert (!info); dump_stmt (phi, info, NULL, stack); counts.add (info); for (edge e : bb->succs) @@ -1620,7 +1641,7 @@ function_instance::match (cgraph_node *node, unsigned int start_location = get_combined_location (DECL_STRUCT_FUNCTION (node->decl)->function_start_locus, node->decl); /* When outputting code to builtins location we use line number 0. - craeate_gcov is stupid and hapilly computes offsets across files. + create_gcov is stupid and happily computes offsets across files. Silently ignore it. */ unsigned int zero_location = ((unsigned)(1-DECL_SOURCE_LINE (node->decl))) << 16; @@ -2072,11 +2093,11 @@ autofdo_source_profile::offline_external_functions () seen.add (iter.first); } - /* Now process all tolevel (offline) function instances. + /* Now process all toplevel (offline) function instances. If instance has no definition in this translation unit, first offline all inlined functions which are defined here - (so we do not lose porfile due to cross-module inlining + (so we do not lose profile due to cross-module inlining done by link-time optimizers). If instance has a definition, look into all inlined functions @@ -2417,6 +2438,7 @@ bool autofdo_source_profile::get_count_info (gimple *stmt, count_info *info, cgraph_node *node) const { + gcc_checking_assert (stmt_loc_used_by_debug_info (stmt)); return get_count_info (gimple_location (stmt), info, node); } @@ -2627,7 +2649,7 @@ autofdo_source_profile::read () bigger than sum_max eventually. */ if (afdo_profile_info->sum_max) afdo_count_scale - = MAX (((gcov_type)1 << (profile_count::n_bits / 2)) + = MAX (((gcov_type)1 << (profile_count::n_bits - 10)) / afdo_profile_info->sum_max, 1); afdo_profile_info->cutoff *= afdo_count_scale; afdo_hot_bb_threshod @@ -2675,7 +2697,7 @@ autofdo_source_profile::get_function_instance_by_inline_stack ( if (s == NULL) { /* afdo inliner extends the stack by last entry with unknown - location while chekcing if function was inlined during train run. + location while checking if function was inlined during train run. We do not want to print diagnostics about every function which is not inlined. */ if (s && dump_enabled_p () && stack[i].location != UNKNOWN_LOCATION) @@ -2950,6 +2972,48 @@ update_count_by_afdo_count (profile_count *count, profile_count c) *count = c; } +/* Try to determine unscaled count of edge E. + Return -1 if nothing is known. */ + +static gcov_type +afdo_unscaled_edge_count (edge e) +{ + gcov_type max_count = -1; + basic_block bb_succ = e->dest; + count_info info; + if (afdo_source_profile->get_count_info (e->goto_locus, &info)) + { + if (info.count > max_count) + max_count = info.count; + if (dump_file && info.count) + { + fprintf (dump_file, + " goto location of edge %i->%i with count %" PRIu64"\n", + e->src->index, e->dest->index, (int64_t)info.count); + } + } + for (gphi_iterator gpi = gsi_start_phis (bb_succ); + !gsi_end_p (gpi); gsi_next (&gpi)) + { + gphi *phi = gpi.phi (); + location_t phi_loc + = gimple_phi_arg_location_from_edge (phi, e); + if (afdo_source_profile->get_count_info (phi_loc, &info)) + { + if (info.count > max_count) + max_count = info.count; + if (dump_file && info.count) + { + fprintf (dump_file, + " phi op of edge %i->%i with count %" PRIu64": ", + e->src->index, e->dest->index, (int64_t)info.count); + print_gimple_stmt (dump_file, phi, 0, TDF_SLIM); + } + } + } + return max_count; +} + /* For a given BB, set its execution count. Attach value profile if a stmt is not in PROMOTED, because we only want to promote an indirect call once. Return TRUE if BB is annotated. */ @@ -2958,8 +3022,7 @@ static bool afdo_set_bb_count (basic_block bb, hash_set &zero_bbs) { gimple_stmt_iterator gsi; - gcov_type max_count = 0; - bool has_annotated = false; + gcov_type max_count = -1; if (dump_file) fprintf (dump_file, " Looking up AFDO count of bb %i\n", bb->index); @@ -2967,7 +3030,7 @@ afdo_set_bb_count (basic_block bb, hash_set &zero_bbs) { count_info info; gimple *stmt = gsi_stmt (gsi); - if (gimple_clobber_p (stmt)) + if (!stmt_loc_used_by_debug_info (stmt)) continue; if (afdo_source_profile->get_count_info (stmt, &info)) { @@ -2979,7 +3042,6 @@ afdo_set_bb_count (basic_block bb, hash_set &zero_bbs) (int64_t)info.count); print_gimple_stmt (dump_file, stmt, 0, TDF_SLIM); } - has_annotated = true; gcall *call = dyn_cast (gsi_stmt (gsi)); /* TODO; if inlined early and indirect call was not optimized out, we will end up speculating again. Early inliner should remove @@ -2990,44 +3052,11 @@ afdo_set_bb_count (basic_block bb, hash_set &zero_bbs) } } - if (!has_annotated) - { - /* For an empty BB with all debug stmt which assigne a value with - constant, check successors PHIs corresponding to the block and - use those counts. */ - edge tmp_e; - edge_iterator tmp_ei; - FOR_EACH_EDGE (tmp_e, tmp_ei, bb->succs) - { - basic_block bb_succ = tmp_e->dest; - for (gphi_iterator gpi = gsi_start_phis (bb_succ); - !gsi_end_p (gpi); - gsi_next (&gpi)) - { - gphi *phi = gpi.phi (); - location_t phi_loc - = gimple_phi_arg_location_from_edge (phi, tmp_e); - count_info info; - if (afdo_source_profile->get_count_info (phi_loc, &info) - && info.count != 0) - { - if (info.count > max_count) - max_count = info.count; - if (dump_file && info.count) - { - fprintf (dump_file, - " phi op in BB %i with count %" PRIu64": ", - bb_succ->index, (int64_t)info.count); - print_gimple_stmt (dump_file, phi, 0, TDF_SLIM); - } - has_annotated = true; - } - } - } + if (max_count == -1 && single_succ_p (bb)) + max_count = afdo_unscaled_edge_count (single_succ_edge (bb)); - if (!has_annotated) - return false; - } + if (max_count == -1) + return false; if (max_count) { @@ -3181,6 +3210,8 @@ afdo_propagate_edge (bool is_succ, bb_set *annotated_bb) changed = true; } else if (is_bb_annotated (bb, *annotated_bb) + /* We do not want to consider 0 (afdo) > 0 (precise) */ + && total_known_count.nonzero_p () && bb->count < total_known_count) { if (dump_file) @@ -3417,7 +3448,7 @@ cmp (const void *a, const void *b) return 0; } -/* To scalle a connected component of graph we collect desired scales of +/* To scale a connected component of graph we collect desired scales of basic blocks on the boundary and then compute a robust average. */ struct scale @@ -3483,6 +3514,109 @@ scale_bbs (const vec &bbs, sreal scale) } } +/* Determine scaling factor by taking robust average of SCALES + and taking into account limits. + MAX_COUNT is maximal guessed count to be scaled while MAC_COUNT_IN_FN + is maximal count in function determined by auto-fdo. */ + +sreal +determine_scale (vec *scales, profile_count max_count, + profile_count max_count_in_fn) +{ + scales->qsort (cmp); + + uint64_t overall_weight = 0; + for (scale &e : *scales) + overall_weight += e.weight; + + uint64_t cummulated = 0, weight_sum = 0; + sreal scale_sum = 0; + for (scale &e : *scales) + { + uint64_t prev = cummulated; + cummulated += e.weight; + if (cummulated >= overall_weight / 4 + && prev <= 3 * overall_weight / 4) + { + scale_sum += e.scale * e.weight; + weight_sum += e.weight; + if (dump_file) + fprintf (dump_file, " accounting scale %.16f, weight %" PRId64 "\n", + e.scale.to_double (), e.weight); + } + else if (dump_file) + fprintf (dump_file, " ignoring scale %.16f, weight %" PRId64 "\n", + e.scale.to_double (), e.weight); + } + sreal scale = scale_sum / (sreal)weight_sum; + + /* Avoid scaled regions to have very large counts. + Otherwise they may dominate ipa-profile's histogram computing cutoff + of hot basic blocks. */ + if (max_count * scale > max_count_in_fn.guessed_local ().apply_scale (128, 1)) + { + if (dump_file) + { + fprintf (dump_file, "Scaling by %.16f produces max count ", + scale.to_double ()); + (max_count * scale).dump (dump_file); + fprintf (dump_file, " that exceeds max count in fn "); + max_count_in_fn.dump (dump_file); + fprintf (dump_file, "; capping\n"); + } + scale = max_count_in_fn.guessed_local ().to_sreal_scale (max_count); + } + return scale; +} + +/* Scale profile of the whole function to approximately match auto-profile. */ + +bool +scale_bb_profile () +{ + const function_instance *s + = afdo_source_profile->get_function_instance_by_decl + (current_function_decl); + + /* In the first pass only store non-zero counts. */ + gcov_type head_count = s->head_count () * autofdo::afdo_count_scale; + hash_set zero_bbs; + auto_vec bbs (n_basic_blocks_for_fn (cfun)); + auto_vec scales; + basic_block bb; + profile_count max_count = profile_count::zero (); + profile_count max_count_in_fn = profile_count::zero (); + bbs.quick_push (ENTRY_BLOCK_PTR_FOR_FN (cfun)); + bbs.quick_push (EXIT_BLOCK_PTR_FOR_FN (cfun)); + if (head_count > 0) + { + profile_count entry_count = ENTRY_BLOCK_PTR_FOR_FN (cfun)->count; + max_count = entry_count; + update_count_by_afdo_count (&entry_count, head_count); + max_count_in_fn = entry_count; + add_scale (&scales, entry_count, ENTRY_BLOCK_PTR_FOR_FN (cfun)->count); + } + FOR_EACH_BB_FN (bb, cfun) + { + profile_count cnt = bb->count; + bbs.safe_push (bb); + max_count = max_count.max (bb->count); + if (afdo_set_bb_count (bb, zero_bbs)) + { + std::swap (cnt, bb->count); + max_count_in_fn = max_count_in_fn.max (cnt); + add_scale (&scales, cnt, bb->count); + } + } + if (scales.length ()) + { + sreal scale = determine_scale (&scales, max_count, max_count_in_fn); + scale_bbs (bbs, scale); + return true; + } + return false; +} + /* In case given basic block was fully optimized out, AutoFDO will have no data about it. In this case try to preserve static profile. Identify connected components (in undirected form of CFG) which has @@ -3692,47 +3826,7 @@ afdo_adjust_guessed_profile (bb_set *annotated_bb) continue; } gcc_checking_assert (scales.length ()); - scales.qsort (cmp); - - uint64_t overall_weight = 0; - for (scale &e : scales) - overall_weight += e.weight; - - uint64_t cummulated = 0, weight_sum = 0; - sreal scale_sum = 0; - for (scale &e : scales) - { - uint64_t prev = cummulated; - cummulated += e.weight; - if (cummulated >= overall_weight / 4 - && prev <= 3 * overall_weight / 4) - { - scale_sum += e.scale * e.weight; - weight_sum += e.weight; - if (dump_file) - fprintf (dump_file, " accounting scale %.16f, weight %" PRId64 "\n", - e.scale.to_double (), e.weight); - } - else if (dump_file) - fprintf (dump_file, " ignoring scale %.16f, weight %" PRId64 "\n", - e.scale.to_double (), e.weight); - } - sreal scale = scale_sum / (sreal)weight_sum; - - /* Avoid scaled regions to have very large counts. - Otherwise they may dominate ipa-profile's histogram computing cutoff - of hot basic blocks. */ - if (max_count * scale > max_count_in_fn.guessed_local ()) - { - if (dump_file) - { - fprintf (dump_file, "Scaling by %.16f produces max count ", - scale.to_double ()); - (max_count * scale).dump (dump_file); - fprintf (dump_file, " that exceeds max count in fn; capping\n"); - } - scale = max_count_in_fn.guessed_local ().to_sreal_scale (max_count); - } + sreal scale = determine_scale (&scales, max_count, max_count_in_fn); scale_bbs (bbs, scale); } } @@ -3754,6 +3848,30 @@ afdo_calculate_branch_prob (bb_set *annotated_bb) { gcc_assert (e->aux == NULL); e->aux = new edge_info (); + gcov_type c = afdo_unscaled_edge_count (e); + if (c == 0 && e->count () == profile_count::zero ()) + { + AFDO_EINFO (e)->set_count (profile_count::zero ()); + if (dump_file) + fprintf (dump_file, + " Annotating edge %i->%i with count 0;" + " static profile aggress", + e->src->index, e->dest->index); + } + else if (c > 0) + { + AFDO_EINFO (e)->set_count + (profile_count::from_gcov_type + (c * autofdo::afdo_count_scale).afdo ()); + if (dump_file) + { + fprintf (dump_file, + " Annotating edge %i->%i with count ", + e->src->index, e->dest->index); + AFDO_EINFO (e)->get_count ().dump (dump_file); + fprintf (dump_file, "\n"); + } + } } } @@ -3784,24 +3902,41 @@ afdo_calculate_branch_prob (bb_set *annotated_bb) } if (!all_known || !total_count.nonzero_p ()) continue; + if (dump_file) + { + fprintf (dump_file, "Total count of bb %i is ", bb->index); + total_count.dump (dump_file); + fprintf (dump_file, "\n"); + } FOR_EACH_EDGE (e, ei, bb->succs) if (AFDO_EINFO (e)->is_annotated ()) { + profile_count cnt = AFDO_EINFO (e)->get_count (); /* If probability is 1, preserve reliable static prediction (This is, for example the case of single fallthru edge or single fallthru plus unlikely EH edge.) */ - if (AFDO_EINFO (e)->get_count () == total_count + if (cnt == total_count && e->probability == profile_probability::always ()) ; - else if (AFDO_EINFO (e)->get_count ().nonzero_p ()) + else if (cnt.nonzero_p ()) e->probability - = AFDO_EINFO (e)->get_count ().probability_in (total_count); + = cnt.probability_in (total_count); /* If probability is zero, preserve reliable static prediction. */ else if (e->probability.nonzero_p () || e->probability.quality () == GUESSED) e->probability = profile_probability::never ().afdo (); + if (dump_file) + { + fprintf (dump_file, " probability of edge %i->%i" + " with count ", + e->src->index, e->dest->index); + cnt.dump (dump_file); + fprintf (dump_file, " set to "); + e->probability.dump (dump_file); + fprintf (dump_file, "\n"); + } } } afdo_adjust_guessed_profile (annotated_bb); @@ -3858,21 +3993,30 @@ afdo_annotate_cfg (void) s->dump (dump_file); fprintf (dump_file, "\n"); } - - /* In the first pass only store non-zero counts. */ - gcov_type head_count = s->head_count () * autofdo::afdo_count_scale; - bool profile_found = head_count > 0; + bool profile_found = false; hash_set zero_bbs; - FOR_EACH_BB_FN (bb, cfun) + gcov_type head_count = s->head_count () * autofdo::afdo_count_scale; + + if (!param_auto_profile_bbs) { - if (afdo_set_bb_count (bb, zero_bbs)) + if (scale_bb_profile ()) + return; + } + else + { + /* In the first pass only store non-zero counts. */ + profile_found = head_count > 0; + FOR_EACH_BB_FN (bb, cfun) { - if (bb->count.quality () == AFDO) + if (afdo_set_bb_count (bb, zero_bbs)) { - gcc_assert (bb->count.nonzero_p ()); - profile_found = true; + if (bb->count.quality () == AFDO) + { + gcc_assert (bb->count.nonzero_p ()); + profile_found = true; + } + set_bb_annotated (bb, &annotated_bb); } - set_bb_annotated (bb, &annotated_bb); } } /* Exit without clobbering static profile if there was no @@ -4133,8 +4277,10 @@ afdo_vpt_for_early_inline (cgraph_node *node) for (gimple_stmt_iterator gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi)) { - autofdo::count_info info; gimple *stmt = gsi_stmt (gsi); + if (!stmt_loc_used_by_debug_info (stmt)) + continue; + autofdo::count_info info; if (autofdo::afdo_source_profile->get_count_info (stmt, &info, node)) bb_count = MAX (bb_count, info.count); } diff --git a/gcc/auto-profile.h b/gcc/auto-profile.h index 639e263ef7a9..3cce5f2152ca 100644 --- a/gcc/auto-profile.h +++ b/gcc/auto-profile.h @@ -39,7 +39,7 @@ extern void remove_afdo_speculative_target (cgraph_edge *); considered cols. */ extern gcov_type afdo_hot_bb_threshold; -/* Return ture if COUNT is possiby hot. */ +/* Return true if COUNT is possibly hot. */ extern bool maybe_hot_afdo_count_p (profile_count count); #endif /* AUTO_PROFILE_H */ diff --git a/gcc/basic-block.h b/gcc/basic-block.h index 049631de49b9..410a03c6a5af 100644 --- a/gcc/basic-block.h +++ b/gcc/basic-block.h @@ -293,11 +293,6 @@ enum cfg_bb_flags /* Return expected execution frequency of the edge E. */ #define EDGE_FREQUENCY(e) e->count ().to_frequency (cfun) -/* Compute a scale factor (or probability) suitable for scaling of - gcov_type values via apply_probability() and apply_scale(). */ -#define GCOV_COMPUTE_SCALE(num,den) \ - ((den) ? RDIV ((num) * REG_BR_PROB_BASE, (den)) : REG_BR_PROB_BASE) - /* Return nonzero if edge is critical. */ #define EDGE_CRITICAL_P(e) (EDGE_COUNT ((e)->src->succs) >= 2 \ && EDGE_COUNT ((e)->dest->preds) >= 2) diff --git a/gcc/builtins.cc b/gcc/builtins.cc index de3e389c5d4b..78b561529f53 100644 --- a/gcc/builtins.cc +++ b/gcc/builtins.cc @@ -156,7 +156,6 @@ static rtx expand_builtin_stack_address (); static tree stabilize_va_list_loc (location_t, tree, int); static rtx expand_builtin_expect (tree, rtx); static rtx expand_builtin_expect_with_probability (tree, rtx); -static tree fold_builtin_constant_p (tree); static tree fold_builtin_classify_type (tree); static tree fold_builtin_strlen (location_t, tree, tree, tree); static tree fold_builtin_inf (location_t, tree, int); @@ -9150,7 +9149,7 @@ builtin_mathfn_code (const_tree t) /* Fold a call to __builtin_constant_p, if we know its argument ARG will evaluate to a constant. */ -static tree +tree fold_builtin_constant_p (tree arg) { /* We return 1 for a numeric type that's known to be a constant diff --git a/gcc/builtins.h b/gcc/builtins.h index 5a553a9c8365..4f23afad9eed 100644 --- a/gcc/builtins.h +++ b/gcc/builtins.h @@ -139,6 +139,7 @@ extern rtx expand_builtin_crc_table_based (internal_fn, scalar_mode, extern rtx expand_builtin (tree, rtx, rtx, machine_mode, int); extern enum built_in_function builtin_mathfn_code (const_tree); extern tree fold_builtin_expect (location_t, tree, tree, tree, tree); +extern tree fold_builtin_constant_p (tree); extern bool avoid_folding_inline_builtin (tree); extern tree fold_call_expr (location_t, tree, bool); extern tree fold_builtin_call_array (location_t, tree, tree, int, tree *); diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog index 582a282c2ee3..1142d0640640 100644 --- a/gcc/c-family/ChangeLog +++ b/gcc/c-family/ChangeLog @@ -1,3 +1,68 @@ +2025-10-08 Jakub Jelinek + + PR c/122188 + * c-gimplify.cc (c_gimplify_expr): Gimplify CALL_EXPR_ARG (*expr_p, 0) + instead of calling save_expr on it. + +2025-10-04 Jakub Jelinek + + PR c++/114457 + * c-opts.cc (c_common_post_options): For C++26 set + flag_auto_var_init to AUTO_INIT_CXX26 if not specified explicitly. + For C++ disable warn_trivial_auto_var_init. + +2025-10-04 Nathaniel Shead + + PR c++/117658 + * c.opt: New flag '-Wexternal-tu-local'. + * c.opt.urls: Regenerate. + +2025-10-02 Alfie Richards + + * c-attribs.cc (attr_target_clones_exclusions): Add simd and omp + exclusions. + (attr_target_version_exclusions): New definition with simd and omp + exclusions. + (attr_omp_declare_simd_exclusions): New definition with target_version + and clones exclusions. + (attr_simd_exclusions): Ditto. + (c_common_gnu_attributes): Add new target_version, simd, and omp + declare simd variables. + +2025-10-01 Alejandro Colomar + + * c.opt.urls: Regenerate + +2025-09-26 Alejandro Colomar + + * c.opt: Add -Wmultiple-parameter-fwd-decl-lists + +2025-09-23 Alfie Richards + + * c-attribs.cc: Add support for target_version and target_clone mixing. + +2025-09-23 Alfie Richards + + * c-pretty-print.cc (pp_c_function_target_version): New function. + (pp_c_function_target_clones): New function. + (pp_c_maybe_whitespace): Move to c-pretty-print.h. + * c-pretty-print.h (pp_c_function_target_version): New function. + (pp_c_function_target_clones): New function. + (pp_c_maybe_whitespace): Moved here from c-pretty-print.cc. + +2025-09-23 Alfie Richards + + * c-attribs.cc (handle_target_clones_attribute): Update to use new hook. + +2025-09-08 Eric Botcazou + + PR ada/121544 + * c-ada-spec.cc (dump_ada_node) : Dump the name of + anonymous tagged pointed-to types specially. + (dump_nested_type) : Recurse on anonymous pointed-to + types declared in the same file. + Set TREE_VISITED on the underlying DECL of the field type, if any. + 2025-08-27 Jakub Jelinek PR target/121520 diff --git a/gcc/c-family/c-ada-spec.cc b/gcc/c-family/c-ada-spec.cc index c7ae032230a8..42d75b49c94e 100644 --- a/gcc/c-family/c-ada-spec.cc +++ b/gcc/c-family/c-ada-spec.cc @@ -2442,8 +2442,14 @@ dump_ada_node (pretty_printer *pp, tree node, tree type, int spc, break; } - dump_ada_node (pp, ref_type, ref_type, spc, is_access, - true); + /* Dump anonymous tagged types specially. */ + if (TYPE_NAME (ref_type) + || (!RECORD_OR_UNION_TYPE_P (ref_type) + && TREE_CODE (ref_type) != ENUMERAL_TYPE)) + dump_ada_node (pp, ref_type, ref_type, spc, is_access, + true); + else + dump_anonymous_type_name (pp, ref_type); } } } @@ -2699,7 +2705,16 @@ dump_nested_type (pretty_printer *pp, tree field, tree t, int spc) { case POINTER_TYPE: tmp = TREE_TYPE (field_type); - dump_forward_type (pp, tmp, t, spc); + decl = get_underlying_decl (tmp); + if (TYPE_NAME (tmp) || !decl || DECL_NAME (decl)) + dump_forward_type (pp, tmp, t, spc); + else if (DECL_SOURCE_FILE (decl) == DECL_SOURCE_FILE (t) + && !TREE_VISITED (decl)) + { + /* Generate full declaration. */ + dump_nested_type (pp, decl, t, spc); + TREE_VISITED (decl) = 1; + } break; case ARRAY_TYPE: @@ -2773,6 +2788,11 @@ dump_nested_type (pretty_printer *pp, tree field, tree t, int spc) default: break; } + + /* Make sure not to output the nested type twice in C++. */ + decl = get_underlying_decl (field_type); + if (decl) + TREE_VISITED (decl) = 1; } /* Hash table of overloaded names that we cannot support. It is needed even diff --git a/gcc/c-family/c-attribs.cc b/gcc/c-family/c-attribs.cc index 1e3a94ed9493..5bc5183f421d 100644 --- a/gcc/c-family/c-attribs.cc +++ b/gcc/c-family/c-attribs.cc @@ -249,12 +249,28 @@ static const struct attribute_spec::exclusions attr_target_clones_exclusions[] = ATTR_EXCL ("always_inline", true, true, true), ATTR_EXCL ("target", TARGET_HAS_FMV_TARGET_ATTRIBUTE, TARGET_HAS_FMV_TARGET_ATTRIBUTE, TARGET_HAS_FMV_TARGET_ATTRIBUTE), - ATTR_EXCL ("target_version", true, true, true), + ATTR_EXCL ("omp declare simd", true, true, true), + ATTR_EXCL ("simd", true, true, true), ATTR_EXCL (NULL, false, false, false), }; static const struct attribute_spec::exclusions attr_target_version_exclusions[] = { + ATTR_EXCL ("omp declare simd", true, true, true), + ATTR_EXCL ("simd", true, true, true), + ATTR_EXCL (NULL, false, false, false), +}; + +static const struct attribute_spec::exclusions attr_omp_declare_simd_exclusions[] = +{ + ATTR_EXCL ("target_version", true, true, true), + ATTR_EXCL ("target_clones", true, true, true), + ATTR_EXCL (NULL, false, false, false), +}; + +static const struct attribute_spec::exclusions attr_simd_exclusions[] = +{ + ATTR_EXCL ("target_version", true, true, true), ATTR_EXCL ("target_clones", true, true, true), ATTR_EXCL (NULL, false, false, false), }; @@ -543,7 +559,7 @@ const struct attribute_spec c_common_gnu_attributes[] = attr_target_exclusions }, { "target_version", 1, 1, true, false, false, false, handle_target_version_attribute, - attr_target_version_exclusions }, + attr_target_version_exclusions}, { "target_clones", 1, -1, true, false, false, false, handle_target_clones_attribute, attr_target_clones_exclusions }, @@ -570,7 +586,8 @@ const struct attribute_spec c_common_gnu_attributes[] = { "returns_nonnull", 0, 0, false, true, true, false, handle_returns_nonnull_attribute, NULL }, { "omp declare simd", 0, -1, true, false, false, false, - handle_omp_declare_simd_attribute, NULL }, + handle_omp_declare_simd_attribute, + attr_omp_declare_simd_exclusions }, { "omp declare variant base", 0, -1, true, false, false, false, handle_omp_declare_variant_attribute, NULL }, { "omp declare variant variant", 0, -1, true, false, false, false, @@ -579,7 +596,7 @@ const struct attribute_spec c_common_gnu_attributes[] = false, false, handle_omp_declare_variant_attribute, NULL }, { "simd", 0, 1, true, false, false, false, - handle_simd_attribute, NULL }, + handle_simd_attribute, attr_simd_exclusions }, { "omp declare target", 0, -1, true, false, false, false, handle_omp_declare_target_attribute, NULL }, { "omp declare target link", 0, 0, true, false, false, false, @@ -6282,12 +6299,25 @@ handle_target_clones_attribute (tree *node, tree name, tree ARG_UNUSED (args), } } - auto_vec versions = get_clone_attr_versions (args, NULL); - - if (versions.length () == 1) + int num_defaults = 0; + auto_vec versions = get_clone_attr_versions + (args, + &num_defaults, + false); + + for (auto v : versions) + targetm.check_target_clone_version + (v, &DECL_SOURCE_LOCATION (*node)); + + /* Lone target_clones version is always ignored for target attr semantics. + Only ignore under target_version semantics if it is a default + version. */ + if (versions.length () == 1 + && (TARGET_HAS_FMV_TARGET_ATTRIBUTE || num_defaults == 1)) { - warning (OPT_Wattributes, - "single % attribute is ignored"); + if (TARGET_HAS_FMV_TARGET_ATTRIBUTE) + warning (OPT_Wattributes, + "single % attribute is ignored"); *no_add_attrs = true; } else diff --git a/gcc/c-family/c-gimplify.cc b/gcc/c-family/c-gimplify.cc index 131eca8297f8..2249c101cf56 100644 --- a/gcc/c-family/c-gimplify.cc +++ b/gcc/c-family/c-gimplify.cc @@ -1036,7 +1036,14 @@ c_gimplify_expr (tree *expr_p, gimple_seq *pre_p ATTRIBUTE_UNUSED, && call_expr_nargs (*expr_p) == 2 && TREE_CODE (CALL_EXPR_ARG (*expr_p, 1)) != INTEGER_CST) { - tree a = save_expr (CALL_EXPR_ARG (*expr_p, 0)); + tree a = CALL_EXPR_ARG (*expr_p, 0); + if (gimplify_expr (&a, pre_p, post_p, is_gimple_val, fb_rvalue) + == GS_ERROR) + return GS_ERROR; + tree b = CALL_EXPR_ARG (*expr_p, 1); + if (gimplify_expr (&b, pre_p, post_p, is_gimple_val, fb_rvalue) + == GS_ERROR) + return GS_ERROR; tree c = build_call_expr_loc (EXPR_LOCATION (*expr_p), fndecl, 1, a); *expr_p = build3_loc (EXPR_LOCATION (*expr_p), COND_EXPR, @@ -1044,7 +1051,7 @@ c_gimplify_expr (tree *expr_p, gimple_seq *pre_p ATTRIBUTE_UNUSED, build2_loc (EXPR_LOCATION (*expr_p), NE_EXPR, boolean_type_node, a, build_zero_cst (TREE_TYPE (a))), - c, CALL_EXPR_ARG (*expr_p, 1)); + c, b); return GS_OK; } break; diff --git a/gcc/c-family/c-opts.cc b/gcc/c-family/c-opts.cc index 0ec30e852158..7bec3f105997 100644 --- a/gcc/c-family/c-opts.cc +++ b/gcc/c-family/c-opts.cc @@ -18,6 +18,7 @@ You should have received a copy of the GNU General Public License along with GCC; see the file COPYING3. If not see . */ +#define INCLUDE_VECTOR #include "config.h" #include "system.h" #include "coretypes.h" @@ -913,6 +914,16 @@ c_common_post_options (const char **pfilename) else flag_permitted_flt_eval_methods = PERMITTED_FLT_EVAL_METHODS_C11; + if (cxx_dialect >= cxx26) + SET_OPTION_IF_UNSET (&global_options, &global_options_set, + flag_auto_var_init, AUTO_INIT_CXX26); + + /* The -Wtrivial-auto-var-init warning is useless for C++, where we always + add .DEFERRED_INIT calls when some (vacuous) initializers are bypassed + through jumps from switch condition to case/default label. */ + if (c_dialect_cxx ()) + warn_trivial_auto_var_init = 0; + /* C23 Annex F does not permit certain built-in functions to raise "inexact". */ if (flag_isoc23) diff --git a/gcc/c-family/c-pretty-print.cc b/gcc/c-family/c-pretty-print.cc index fad6b5eb9b04..5adb13b9784d 100644 --- a/gcc/c-family/c-pretty-print.cc +++ b/gcc/c-family/c-pretty-print.cc @@ -36,6 +36,7 @@ along with GCC; see the file COPYING3. If not see #include "function.h" #include "basic-block.h" #include "gimple.h" +#include "tm.h" /* The pretty-printer code is primarily designed to closely follow (GNU) C and C++ grammars. That is to be contrasted with spaghetti @@ -45,12 +46,6 @@ along with GCC; see the file COPYING3. If not see takes expression or declaration contexts into account. */ -#define pp_c_maybe_whitespace(PP) \ - do { \ - if ((PP)->get_padding () == pp_before) \ - pp_c_whitespace (PP); \ - } while (0) - /* literal */ static void pp_c_char (c_pretty_printer *, int); @@ -3054,6 +3049,76 @@ pp_c_tree_decl_identifier (c_pretty_printer *pp, tree t) pp_c_identifier (pp, name); } +/* Prints "[version: VERSION]" for a versioned function decl. + This will only print for targets with target_version semantics. */ +void +pp_c_function_target_version (c_pretty_printer *pp, tree t) +{ + if (TARGET_HAS_FMV_TARGET_ATTRIBUTE) + return; + + string_slice version = get_target_version (t); + if (!version.is_valid ()) + return; + + pp_c_whitespace (pp); + + pp_c_left_bracket (pp); + pp_c_left_bracket (pp); + pp_string (pp, "target_version"); + pp_c_left_paren (pp); + pp_doublequote (pp); + pp_string_n (pp, version.begin (), version.size ()); + pp_doublequote (pp); + pp_c_right_paren (pp); + pp_c_right_bracket (pp); + pp_c_right_bracket (pp); + + pp->set_padding (pp_before); +} + +/* Prints "[clones: VERSION, +]" for a versioned function decl. + This only works for targets with target_version semantics. */ +void +pp_c_function_target_clones (c_pretty_printer *pp, tree t) +{ + /* Only print for target_version semantics. + This is because for target FMV semantics a target_clone always defines + the entire FMV set. target_version semantics can mix target_clone and + target_version decls in the definition of a FMV set and so the + target_clone becomes a part of the identity of the declaration. */ + if (TARGET_HAS_FMV_TARGET_ATTRIBUTE) + return; + + auto_vec versions = get_clone_versions (t, NULL, false); + if (versions.is_empty ()) + return; + + pp_c_whitespace (pp); + + string_slice final_version = versions.pop (); + pp_c_left_bracket (pp); + pp_c_left_bracket (pp); + pp_string (pp, "target_clones"); + pp_c_left_paren (pp); + for (string_slice version : versions) + { + pp_doublequote (pp); + pp_string_n (pp, version.begin (), version.size ()); + pp_doublequote (pp); + pp_string (pp, ","); + pp_c_whitespace (pp); + } + pp_doublequote (pp); + pp_string_n (pp, final_version.begin (), final_version.size ()); + pp_doublequote (pp); + pp_c_right_paren (pp); + pp_c_right_bracket (pp); + pp_c_right_bracket (pp); + + pp->set_padding (pp_before); +} + #if CHECKING_P namespace selftest { diff --git a/gcc/c-family/c-pretty-print.h b/gcc/c-family/c-pretty-print.h index c8fb67899915..5e00b952c814 100644 --- a/gcc/c-family/c-pretty-print.h +++ b/gcc/c-family/c-pretty-print.h @@ -102,6 +102,12 @@ class c_pretty_printer : public pretty_printer #define pp_ptr_operator(PP, D) (PP)->ptr_operator (PP, D) #define pp_parameter_list(PP, T) (PP)->parameter_list (PP, T) +#define pp_c_maybe_whitespace(PP) \ + do { \ + if ((PP)->get_padding () == pp_before) \ + pp_c_whitespace (PP); \ + } while (0) + void pp_c_whitespace (c_pretty_printer *); void pp_c_left_paren (c_pretty_printer *); void pp_c_right_paren (c_pretty_printer *); @@ -138,6 +144,8 @@ void pp_c_ws_string (c_pretty_printer *, const char *); void pp_c_identifier (c_pretty_printer *, const char *); void pp_c_string_literal (c_pretty_printer *, tree); void pp_c_integer_constant (c_pretty_printer *, tree); +void pp_c_function_target_version (c_pretty_printer *, tree); +void pp_c_function_target_clones (c_pretty_printer *, tree); void print_c_tree (FILE *file, tree t, dump_flags_t); diff --git a/gcc/c-family/c.opt b/gcc/c-family/c.opt index 3f5e2f0874d9..abe0aa6b397a 100644 --- a/gcc/c-family/c.opt +++ b/gcc/c-family/c.opt @@ -761,6 +761,10 @@ Wexpansion-to-defined C ObjC C++ ObjC++ CPP(warn_expansion_to_defined) CppReason(CPP_W_EXPANSION_TO_DEFINED) Var(cpp_warn_expansion_to_defined) Init(0) Warning EnabledBy(Wextra || Wpedantic) Warn if \"defined\" is used outside #if. +Wexternal-tu-local +C++ ObjC++ Var(warn_tu_local) Warning Init(1) +Warn about naming a TU-local entity declared in another translation unit. + Wextra C ObjC C++ ObjC++ Warning ; in common.opt @@ -1086,6 +1090,10 @@ Wmultiple-inheritance C++ ObjC++ Var(warn_multiple_inheritance) Warning Warn on direct multiple inheritance. +Wmultiple-parameter-fwd-decl-lists +C ObjC Var(warn_multiple_parameter_fwd_decl_lists) Warning EnabledBy(Wextra) +Warn for multiple lists of forward declarations of function parameters. + Wmultistatement-macros C ObjC C++ ObjC++ Var(warn_multistatement_macros) Warning LangEnabledBy(C ObjC C++ ObjC++,Wall) Warn about unsafe macros expanding to multiple statements used as a body of a clause such as if, else, while, switch, or for. diff --git a/gcc/c-family/c.opt.urls b/gcc/c-family/c.opt.urls index e09d51d8afb9..399f9f8a659e 100644 --- a/gcc/c-family/c.opt.urls +++ b/gcc/c-family/c.opt.urls @@ -376,6 +376,9 @@ UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wexceptions) Wexpansion-to-defined UrlSuffix(gcc/Warning-Options.html#index-Wexpansion-to-defined) +Wexternal-tu-local +UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wexternal-tu-local) + Wextra UrlSuffix(gcc/Warning-Options.html#index-Wextra) LangUrlSuffix_D(gdc/Warnings.html#index-Wextra) LangUrlSuffix_Fortran(gfortran/Error-and-Warning-Options.html#index-Wextra) @@ -595,6 +598,9 @@ UrlSuffix(gcc/Warning-Options.html#index-Wmultichar) Wmultiple-inheritance UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wmultiple-inheritance) +Wmultiple-parameter-fwd-decl-lists +UrlSuffix(gcc/Warning-Options.html#index-Wmultiple-parameter-fwd-decl-lists) + Wmultistatement-macros UrlSuffix(gcc/Warning-Options.html#index-Wmultistatement-macros) diff --git a/gcc/c/ChangeLog b/gcc/c/ChangeLog index d719cb8598ec..241e71bf25ce 100644 --- a/gcc/c/ChangeLog +++ b/gcc/c/ChangeLog @@ -1,3 +1,145 @@ +2025-10-08 Joseph Myers + + * c-typeck.cc (in_generic, save_maybe_used, restore_maybe_used): + New. + (mark_decl_used, record_maybe_used_decl, pop_maybe_used): Use + in_generic. + (struct maybe_used_decl): Move to c-tree.h. + * c-tree.h (struct maybe_used_decl): Move from c-typeck.cc. + (in_generic, save_maybe_used, restore_maybe_used): Declare. + * c-parser.cc (c_parser_generic_selection): Increment and + decrement in_generic. Use pop_maybe_used, save_maybe_used and + restore_maybe_used. + +2025-10-08 Martin Uecker + + * c-parser.cc (c_parser_generic_selection): Change + error_at to pedwarn_c23. + +2025-10-08 Alfie Richards + + PR target/122180 + * c-decl.cc (pushdecl): Add TARGET_HAS_FMV_TARGET_ATTRIBUTE check. + +2025-10-07 Joseph Myers + + PR c/26581 + * c-decl.cc (c_finish_incomplete_decl): Give error for tentative + definition of incomplete array for C2y with internal linkage. + (finish_decl): Do not set DO_DEFAULT based on -pedantic. Use + pedwarn_c23 for missing array sizes for internal linkage. + +2025-10-02 Alfie Richards + + * c-decl.cc (maybe_mark_function_versioned): Add diagnostic. + * c-parser.cc (c_finish_omp_declare_simd): Add diagnostic. + +2025-10-02 Alfie Richards + + * c-decl.cc (maybe_mark_function_versioned): New function. + (merge_decls): Preserve DECL_FUNCTION_VERSIONED in merging. + (duplicate_decls): Add check and diagnostic for unmergable version decls. + (pushdecl): Add FMV target_version logic. + (lookup_name): Don't resolve non-default versions. + (start_decl): Mark and mangle versioned functions. + (start_function): Mark and mangle versioned functions. + (c_parse_final_cleanups): Add call to process_same_body_aliases. + +2025-10-01 Jan Hubicka + + * Make-lang.in: Add c_FDAS + (create_fdas_for_cc1): Be sure that build fails if create_gcov fails. + +2025-09-30 Martin Uecker + + PR target/121933 + * c-typeck.cc (mark_decl_used): Set DECL_NONLOCAL + only for VAR_DECL, FUNC_DECL, PARM_DECL. + +2025-09-26 Alejandro Colomar + + * c-decl.cc (c_scope): Rename {warned > had}_forward_parm_decls. + (mark_forward_parm_decls): Add + -Wmultiple-parameter-fwd-decl-lists. + +2025-09-26 Joseph Myers + + PR c/88642 + * c-typeck.cc (constructor_braced_scalar): New variable. + (struct constructor_stack): Add braced_scalar field. + (really_start_incremental_init): Handle constructor_braced_scalar + and braced_scalar field. + (push_init_level): Handle constructor_braced_scalar and + braced_scalar field. Give permerror rather than warning for + nested braces around scalar initializer. + (pop_init_level): Handle constructor_braced_scalar and + braced_scalar field. + +2025-09-24 Joseph Myers + + * c-typeck.cc (really_atomic_lvalue): For a COMPOUND_LITERAL_EXPR, + check C_DECL_REGISTER on the COMPOUND_LITERAL_EXPR_DECL. + +2025-09-23 Alfie Richards + + * c-objc-common.cc (c_tree_printer): Add printing of target_clone and + target_version in decl diagnostics. + +2025-09-20 Joseph Myers + + * c-typeck.cc (really_atomic_lvalue): Return false for incomplete + types. + (convert_lvalue_to_rvalue): Call require_complete_type for + qualified void for C2y. + +2025-09-17 Richard Biener + + * gimple-parser.cc (c_parser_parse_gimple_body): Initialize + SSA operands for each stmt. + (c_parser_gimple_compound_statement): Append stmts without + updating SSA operands. + +2025-09-16 Andrew Pinski + + PR c/121421 + * c-parser.cc (c_parser_declaration_or_fndef): Error out for gimple + and rtl functions as nested functions. + +2025-09-13 Joseph Myers + + * c-typeck.cc (c_mark_addressable): New parameter + override_register. + (build_array_ref): Update calls to c_mark_addressable. Give error + in C2Y mode for negative array indices when array expression is an + array not a pointer. Use pedwarn_c23 for subscripting register + array; diagnose that also for register compound literal. + * c-tree.h (c_mark_addressable): Update prototype. + +2025-09-10 Martin Uecker + + * c-tree.h: Add new macro C_DECL_NONLOCAL_CONTEXT and prototype + for mark_decl_used. + * c-typeck.cc (mark_decl_used): New function. + (function_to_pointer_conversion): Mark exempt functions. + (record_maybe_used_decl): Add `address' parameter. + (build_external_ref): Change to mark_decl_used. + (pop_maybe_used): Call mark_decl_used. + (c_mark_addressable): Ditto. + (c_finish_goto_label): Ditto. + (c_finish_return): Add warning. + * c-decl.cc (declspecs_add_type): Ditto. + (grokdeclarator): Don't set C_DECL_REGISTER on function + declarators. + +2025-09-08 H.J. Lu + + PR c/107419 + * c-decl.cc (c_decl_attributes): Update TLS model with the + default TLS access model if the default TLS access model is + stronger. + (grokdeclarator): Set a tentative TLS model which will be + updated by c_decl_attributes later. + 2025-09-05 Jakub Jelinek * c-decl.cc (pushtag): Remove ()s around string literal diff --git a/gcc/c/Make-lang.in b/gcc/c/Make-lang.in index 2517b64439fe..f09fc99467b9 100644 --- a/gcc/c/Make-lang.in +++ b/gcc/c/Make-lang.in @@ -58,6 +58,7 @@ C_AND_OBJC_OBJS = attribs.o c/c-errors.o c/c-decl.o c/c-typeck.o \ # Language-specific object files for C. C_OBJS = c/c-lang.o c-family/stub-objc.o $(C_AND_OBJC_OBJS) c_OBJS = $(C_OBJS) cc1-checksum.o c/gccspec.o +c_FDAS = cc1.fda # Use strict warnings for this front end. c-warn = $(STRICT_WARN) @@ -101,7 +102,7 @@ create_fdas_for_cc1: ../stage1-gcc/cc1$(exeext) ../prev-gcc/$(PERF_DATA) echo $$perf_path; \ if [ -f $$perf_path ]; then \ profile_name=cc1_$$component_in_prev.fda; \ - $(CREATE_GCOV) -binary ../stage1-gcc/cc1$(exeext) -gcov $$profile_name -profile $$perf_path -gcov_version 2; \ + $(CREATE_GCOV) -binary ../stage1-gcc/cc1$(exeext) -gcov $$profile_name -profile $$perf_path -gcov_version 2 || exit 1; \ fi; \ done; @@ -111,7 +112,7 @@ create_fdas_for_cc1: ../stage1-gcc/cc1$(exeext) ../prev-gcc/$(PERF_DATA) echo $$perf_path; \ if [ -f $$perf_path ]; then \ profile_name=cc1_$$component_in_prev_target.fda; \ - $(CREATE_GCOV) -binary ../prev-gcc/cc1$(exeext) -gcov $$profile_name -profile $$perf_path -gcov_version 2; \ + $(CREATE_GCOV) -binary ../prev-gcc/cc1$(exeext) -gcov $$profile_name -profile $$perf_path -gcov_version 2 || exit 1; \ fi; \ done; diff --git a/gcc/c/c-decl.cc b/gcc/c/c-decl.cc index 589abf4e4e28..4a940d5eec33 100644 --- a/gcc/c/c-decl.cc +++ b/gcc/c/c-decl.cc @@ -504,10 +504,8 @@ struct GTY((chain_next ("%h.outer"))) c_scope { if these appears in a function definition. */ BOOL_BITFIELD had_vla_unspec : 1; - /* True if we already complained about forward parameter decls - in this scope. This prevents double warnings on - foo (int a; int b; ...) */ - BOOL_BITFIELD warned_forward_parm_decls : 1; + /* True if we parsed a list of forward parameter decls in this scope. */ + BOOL_BITFIELD had_forward_parm_decls : 1; /* True if this is the outermost block scope of a function body. This scope contains the parameters, the local variables declared @@ -910,8 +908,12 @@ c_finish_incomplete_decl (tree decl) && !DECL_EXTERNAL (decl) && TYPE_DOMAIN (type) == NULL_TREE) { - warning_at (DECL_SOURCE_LOCATION (decl), - 0, "array %q+D assumed to have one element", decl); + if (flag_isoc2y && !TREE_PUBLIC (decl)) + error_at (DECL_SOURCE_LOCATION (decl), + "array size missing in %q+D", decl); + else + warning_at (DECL_SOURCE_LOCATION (decl), + 0, "array %q+D assumed to have one element", decl); complete_array_type (&TREE_TYPE (decl), NULL_TREE, true); @@ -2088,6 +2090,35 @@ previous_tag (tree type) return NULL_TREE; } +/* Subroutine to mark functions as versioned when using the attribute + 'target_version'. */ + +static void +maybe_mark_function_versioned (tree decl) +{ + if (!DECL_FUNCTION_VERSIONED (decl)) + { + /* Check if the name of the function has been overridden. */ + if (DECL_ASSEMBLER_NAME_SET_P (decl) + && IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl))[0] == '*') + error_at (DECL_SOURCE_LOCATION (decl), + "cannot use function multiversioning on a renamed function"); + + /* We need to insert function version now to make sure the correct + pre-mangled assembler name is recorded. */ + cgraph_node *node = cgraph_node::get_create (decl); + + if (!node->function_version ()) + node->insert_new_function_version (); + + DECL_FUNCTION_VERSIONED (decl) = 1; + + tree mangled_name + = targetm.mangle_decl_assembler_name (decl, DECL_NAME (decl)); + SET_DECL_ASSEMBLER_NAME (decl, mangled_name); + } +} + /* Subroutine of duplicate_decls. Compare NEWDECL to OLDDECL. Returns true if the caller should proceed to merge the two, false if OLDDECL should simply be discarded. As a side effect, issues @@ -2507,6 +2538,10 @@ diagnose_mismatched_decls (tree newdecl, tree olddecl, "but not here"); } } + /* Check if these are unmergable overlapping FMV declarations. */ + if (!TARGET_HAS_FMV_TARGET_ATTRIBUTE + && diagnose_versioned_decls (olddecl, newdecl)) + return false; } else if (VAR_P (newdecl)) { @@ -2973,6 +3008,12 @@ merge_decls (tree newdecl, tree olddecl, tree newtype, tree oldtype) if (TREE_CODE (newdecl) == FUNCTION_DECL) { + if (DECL_FUNCTION_VERSIONED (olddecl) + || DECL_FUNCTION_VERSIONED (newdecl)) + { + maybe_mark_function_versioned (olddecl); + maybe_mark_function_versioned (newdecl); + } /* If we're redefining a function previously defined as extern inline, make sure we emit debug info for the inline before we throw it away, in case it was inlined into a function that @@ -3372,6 +3413,56 @@ pushdecl (tree x) TREE_TYPE (b_use->decl) = b_use->u.type; } } + + /* Check if x is part of a FMV set with b_use. + FMV is only supported in c for targets with target_version + attributes. */ + if (!TARGET_HAS_FMV_TARGET_ATTRIBUTE + && b_use && TREE_CODE (b_use->decl) == FUNCTION_DECL + && TREE_CODE (x) == FUNCTION_DECL && DECL_FILE_SCOPE_P (b_use->decl) + && DECL_FILE_SCOPE_P (x) + && disjoint_version_decls (x, b_use->decl) + && comptypes (vistype, type) != 0) + { + maybe_mark_function_versioned (b_use->decl); + maybe_mark_function_versioned (b->decl); + maybe_mark_function_versioned (x); + + cgraph_node *b_node = cgraph_node::get_create (b_use->decl); + cgraph_function_version_info *b_v = b_node->function_version (); + if (!b_v) + b_v = b_node->insert_new_function_version (); + + /* Check if this new node conflicts with any previous functions + in the set. */ + cgraph_function_version_info *version = b_v; + for (; version; version = version->next) + if (!disjoint_version_decls (version->this_node->decl, x)) + { + /* The decls define overlapping version, so attempt to merge + or diagnose the conflict. */ + if (duplicate_decls (x, version->this_node->decl)) + return version->this_node->decl; + else + return error_mark_node; + } + + /* This is a new version to be added to FMV structure. */ + cgraph_node::add_function_version (b_v, x); + + /* Get the first node from the structure. */ + cgraph_function_version_info *default_v = b_v; + while (default_v->prev) + default_v = default_v->prev; + /* Always use the default node for the bindings. */ + b_use->decl = default_v->this_node->decl; + b->decl = default_v->this_node->decl; + + /* Node is not a duplicate, so no need to do the rest of the + checks. */ + return x; + } + if (duplicate_decls (x, b_use->decl)) { if (b_use != b) @@ -4496,6 +4587,12 @@ tree lookup_name (tree name) { struct c_binding *b = I_SYMBOL_BINDING (name); + /* Do not resolve non-default function versions. */ + if (b + && TREE_CODE (b->decl) == FUNCTION_DECL + && DECL_FUNCTION_VERSIONED (b->decl) + && !is_function_default_version (b->decl)) + return NULL_TREE; if (b && !b->invisible) { maybe_record_typedef_use (b->decl); @@ -5582,7 +5679,16 @@ c_decl_attributes (tree *node, tree attributes, int flags) tree last_decl = lookup_last_decl (*node); if (last_decl == error_mark_node) last_decl = NULL_TREE; - return decl_attributes (node, attributes, flags, last_decl); + tree attr = decl_attributes (node, attributes, flags, last_decl); + if (VAR_P (*node) && DECL_THREAD_LOCAL_P (*node)) + { + // tls_model attribute can set a stronger TLS access model. + tls_model model = DECL_TLS_MODEL (*node); + tls_model default_model = decl_default_tls_model (*node); + if (default_model > model) + set_decl_tls_model (*node, default_model); + } + return attr; } @@ -5769,6 +5875,17 @@ start_decl (struct c_declarator *declarator, struct c_declspecs *declspecs, && VAR_OR_FUNCTION_DECL_P (decl)) objc_check_global_decl (decl); + /* To enable versions to be created across TU's we mark and mangle all + non-default versioned functions. */ + if (TREE_CODE (decl) == FUNCTION_DECL + && !TARGET_HAS_FMV_TARGET_ATTRIBUTE + && get_target_version (decl).is_valid ()) + { + maybe_mark_function_versioned (decl); + if (current_scope != file_scope) + error ("versioned declarations are only allowed at file scope"); + } + /* Add this decl to the current scope. TEM may equal DECL or it may be a previous decl of the same name. */ if (do_push) @@ -5874,11 +5991,7 @@ finish_decl (tree decl, location_t init_loc, tree init, && !(TREE_PUBLIC (decl) && current_scope != file_scope)) { bool do_default - = (TREE_STATIC (decl) - /* Even if pedantic, an external linkage array - may have incomplete type at first. */ - ? pedantic && !TREE_PUBLIC (decl) - : !DECL_EXTERNAL (decl)); + = !TREE_STATIC (decl) && !DECL_EXTERNAL (decl); int failure = complete_array_type (&TREE_TYPE (decl), DECL_INITIAL (decl), do_default); @@ -5895,6 +6008,9 @@ finish_decl (tree decl, location_t init_loc, tree init, case 2: if (do_default) error ("array size missing in %q+D", decl); + else if (!TREE_PUBLIC (decl)) + pedwarn_c23 (DECL_SOURCE_LOCATION (decl), OPT_Wpedantic, + "array size missing in %q+D", decl); break; case 3: @@ -6260,12 +6376,14 @@ mark_forward_parm_decls (void) { struct c_binding *b; - if (pedantic && !current_scope->warned_forward_parm_decls) - { - pedwarn (input_location, OPT_Wpedantic, - "ISO C forbids forward parameter declarations"); - current_scope->warned_forward_parm_decls = true; - } + if (current_scope->had_forward_parm_decls) + warning_at (input_location, OPT_Wmultiple_parameter_fwd_decl_lists, + "more than one list of forward declarations of parameters"); + if (pedantic && !current_scope->had_forward_parm_decls) + pedwarn (input_location, OPT_Wpedantic, + "ISO C forbids forward parameter declarations"); + + current_scope->had_forward_parm_decls = true; for (b = current_scope->bindings; b; b = b->prev) if (TREE_CODE (b->decl) == PARM_DECL) @@ -8181,8 +8299,11 @@ grokdeclarator (const struct c_declarator *declarator, TREE_PUBLIC (decl) = extern_ref; } + // NB: Set a tentative TLS model to avoid tls_model attribute + // warnings due to lack of thread storage duration. It will + // be updated by c_decl_attributes later. if (threadp) - set_decl_tls_model (decl, decl_default_tls_model (decl)); + set_decl_tls_model (decl, TLS_MODEL_REAL); } if ((storage_class == csc_extern @@ -8219,7 +8340,8 @@ grokdeclarator (const struct c_declarator *declarator, /* Record `register' declaration for warnings on & and in case doing stupid register allocation. */ - if (storage_class == csc_register) + if (storage_class == csc_register + && TREE_CODE (type) != FUNCTION_TYPE) { C_DECL_REGISTER (decl) = 1; DECL_REGISTER (decl) = 1; @@ -10741,6 +10863,17 @@ start_function (struct c_declspecs *declspecs, struct c_declarator *declarator, warn_parm_array_mismatch (origloc, old_decl, parms); } + /* To enable versions to be created across TU's we mark and mangle all + non-default versioned functions. */ + if (TREE_CODE (decl1) == FUNCTION_DECL + && !TARGET_HAS_FMV_TARGET_ATTRIBUTE + && get_target_version (decl1).is_valid ()) + { + maybe_mark_function_versioned (decl1); + if (current_scope != file_scope) + error ("versioned definitions are only allowed at file scope"); + } + /* Record the decl so that the function name is defined. If we already have a decl for this name, and it is a FUNCTION_DECL, use the old decl. */ @@ -12815,6 +12948,7 @@ declspecs_add_type (location_t loc, struct c_declspecs *specs, error_at (loc, "two or more data types in declaration specifiers"); else if (TREE_CODE (type) == TYPE_DECL) { + mark_decl_used (type, false); specs->type = TREE_TYPE (type); if (TREE_TYPE (type) != error_mark_node) { @@ -13571,6 +13705,10 @@ c_parse_final_cleanups (void) c_write_global_declarations_1 (BLOCK_VARS (DECL_INITIAL (t))); c_write_global_declarations_1 (BLOCK_VARS (ext_block)); + /* Call this to set cpp_implicit_aliases_done on all nodes. This is + important for function multiversioning aliases to get resolved. */ + symtab->process_same_body_aliases (); + if (!in_lto_p) free_attr_access_data (); diff --git a/gcc/c/c-objc-common.cc b/gcc/c/c-objc-common.cc index 5c50983544d7..109a8cb33ee8 100644 --- a/gcc/c/c-objc-common.cc +++ b/gcc/c/c-objc-common.cc @@ -23,6 +23,7 @@ along with GCC; see the file COPYING3. If not see #include "c-tree.h" #include "intl.h" #include "c-family/c-pretty-print.h" +#include "tree-core.h" #include "tree-pretty-print.h" #include "tree-pretty-print-markup.h" #include "gimple-pretty-print.h" @@ -359,6 +360,11 @@ c_tree_printer (pretty_printer *pp, text_info *text, const char *spec, if (DECL_NAME (t)) { pp_identifier (cpp, lang_hooks.decl_printable_name (t, 2)); + if (TREE_CODE (t) == FUNCTION_DECL) + { + pp_c_function_target_version (cpp, t); + pp_c_function_target_clones (cpp, t); + } return true; } break; diff --git a/gcc/c/c-parser.cc b/gcc/c/c-parser.cc index f1aaab12e6e8..ea0294f0738e 100644 --- a/gcc/c/c-parser.cc +++ b/gcc/c/c-parser.cc @@ -3222,7 +3222,7 @@ c_parser_declaration_or_fndef (c_parser *parser, bool fndef_ok, else fnbody = c_parser_compound_statement (parser, &endloc); tree fndecl = current_function_decl; - if (nested) + if (nested && specs->declspec_il == cdil_none) { tree decl = current_function_decl; /* Mark nested functions as needing static-chain initially. @@ -3235,6 +3235,15 @@ c_parser_declaration_or_fndef (c_parser *parser, bool fndef_ok, c_pop_function_context (); add_stmt (build_stmt (DECL_SOURCE_LOCATION (decl), DECL_EXPR, decl)); } + else if (nested) + { + if (specs->declspec_il == cdil_rtl) + error ("%<__RTL%> function cannot be a nested function"); + else + error ("%<__GIMPLE%> function cannot be a nested function"); + finish_function (endloc); + c_pop_function_context (); + } else { if (fnbody) @@ -11174,9 +11183,12 @@ c_parser_generic_selection (c_parser *parser) else { c_inhibit_evaluation_warnings++; + in_generic++; selector = c_parser_expr_no_commas (parser, NULL); selector = default_function_array_conversion (selector_loc, selector); c_inhibit_evaluation_warnings--; + in_generic--; + pop_maybe_used (!flag_isoc23); if (selector.value == error_mark_node) { @@ -11205,6 +11217,7 @@ c_parser_generic_selection (c_parser *parser) } auto_vec associations; + struct maybe_used_decl *maybe_used_default = NULL; while (1) { struct c_generic_association assoc, *iter; @@ -11244,9 +11257,9 @@ c_parser_generic_selection (c_parser *parser) "incomplete type before C2Y"); if (c_type_variably_modified_p (assoc.type)) - error_at (assoc.type_location, - "%<_Generic%> association has " - "variable length type"); + pedwarn_c23 (assoc.type_location, OPT_Wpedantic, + "ISO C does not support %<_Generic%> association with " + "variably-modified type before C2Y"); } if (!c_parser_require (parser, CPP_COLON, "expected %<:%>")) @@ -11260,11 +11273,19 @@ c_parser_generic_selection (c_parser *parser) if (!match) c_inhibit_evaluation_warnings++; + in_generic++; assoc.expression = c_parser_expr_no_commas (parser, NULL); if (!match) c_inhibit_evaluation_warnings--; + in_generic--; + if (!match) + pop_maybe_used (!flag_isoc23); + else if (assoc.type == NULL_TREE) + maybe_used_default = save_maybe_used (); + else + pop_maybe_used (true); if (assoc.expression.value == error_mark_node) { @@ -11325,6 +11346,20 @@ c_parser_generic_selection (c_parser *parser) c_parser_consume_token (parser); } + if (match_found >= 0 && matched_assoc.type == NULL_TREE) + { + /* Declarations referenced in the default association are used. */ + restore_maybe_used (maybe_used_default); + pop_maybe_used (true); + } + else if (maybe_used_default) + { + /* Declarations referenced in the default association are not used, but + are treated as used before C23. */ + restore_maybe_used (maybe_used_default); + pop_maybe_used (!flag_isoc23); + } + unsigned int ix; struct c_generic_association *iter; FOR_EACH_VEC_ELT (associations, ix, iter) @@ -27767,6 +27802,13 @@ c_finish_omp_declare_simd (c_parser *parser, tree fndecl, tree parms, clauses[0].type = CPP_EOF; return; } + if (DECL_FUNCTION_VERSIONED (fndecl)) + { + error_at (DECL_SOURCE_LOCATION (fndecl), + "%<#pragma omp declare %s%> cannot be used with function " + "multi-versioning", kind); + return; + } if (parms == NULL_TREE) parms = DECL_ARGUMENTS (fndecl); diff --git a/gcc/c/c-tree.h b/gcc/c/c-tree.h index afec03e25ebc..162add0522ac 100644 --- a/gcc/c/c-tree.h +++ b/gcc/c/c-tree.h @@ -80,6 +80,11 @@ along with GCC; see the file COPYING3. If not see /* For a PARM_DECL, nonzero if it was declared as an array. */ #define C_ARRAY_PARAMETER(NODE) DECL_LANG_FLAG_0 (NODE) +/* For FUNCTION_DECLs, evaluates true if the decl is a nested + function that requires a non-local context. */ +#define C_FUNC_NONLOCAL_CONTEXT(EXP) \ + DECL_LANG_FLAG_4 (FUNCTION_DECL_CHECK (EXP)) + /* For FUNCTION_DECLs, evaluates true if the decl is built-in but has been declared. */ #define C_DECL_DECLARED_BUILTIN(EXP) \ @@ -111,7 +116,8 @@ along with GCC; see the file COPYING3. If not see /* Record whether a decl was declared register. This is strictly a front-end flag, whereas DECL_REGISTER is used for code generation; they may differ for structures with volatile fields. */ -#define C_DECL_REGISTER(EXP) DECL_LANG_FLAG_4 (EXP) +#define C_DECL_REGISTER(EXP) \ + DECL_LANG_FLAG_4 (TREE_NOT_CHECK (EXP, FUNCTION_DECL)) /* Record whether a decl was used in an expression anywhere except an unevaluated operand of sizeof / typeof / alignof. This is only @@ -618,6 +624,19 @@ enum c_inline_static_type { csi_modifiable }; +/* Record details of decls possibly used inside sizeof or typeof. */ +struct maybe_used_decl +{ + /* The decl. */ + tree decl; + /* The level seen at (in_sizeof + in_typeof + in_countof + in_generic). */ + int level; + /* Seen in address-of. */ + bool address; + /* The next one at this level or above, or NULL. */ + struct maybe_used_decl *next; +}; + /* in c-parser.cc */ struct c_tree_token_vec; @@ -768,6 +787,7 @@ extern int in_alignof; extern int in_sizeof; extern int in_countof; extern int in_typeof; +extern int in_generic; extern bool c_in_omp_for; extern bool c_omp_array_section_p; @@ -807,7 +827,7 @@ extern bool comptypes_same_p (tree, tree); extern bool comptypes_equiv_p (tree, tree); extern int comptypes_check_different_types (tree, tree, bool *); extern int comptypes_check_enum_int (tree, tree, bool *); -extern bool c_mark_addressable (tree, bool = false); +extern bool c_mark_addressable (tree, bool = false, bool = false); extern void c_incomplete_type_error (location_t, const_tree, const_tree); extern tree c_type_promotes_to (tree); extern struct c_expr default_function_array_conversion (location_t, @@ -827,6 +847,9 @@ extern tree build_array_ref (location_t, tree, tree); extern tree build_omp_array_section (location_t, tree, tree, tree); extern tree build_external_ref (location_t, tree, bool, tree *); extern void pop_maybe_used (bool); +extern struct maybe_used_decl *save_maybe_used (); +extern void restore_maybe_used (struct maybe_used_decl *); +extern void mark_decl_used (tree, bool); extern struct c_expr c_expr_sizeof_expr (location_t, struct c_expr); extern struct c_expr c_expr_sizeof_type (location_t, struct c_type_name *); extern struct c_expr c_expr_countof_expr (location_t, struct c_expr); diff --git a/gcc/c/c-typeck.cc b/gcc/c/c-typeck.cc index 191ec7b4b822..371583bd64ed 100644 --- a/gcc/c/c-typeck.cc +++ b/gcc/c/c-typeck.cc @@ -78,6 +78,9 @@ int in_countof; /* The level of nesting inside "typeof". */ int in_typeof; +/* The level of nesting inside "_Generic". */ +int in_generic; + /* True when parsing OpenMP loop expressions. */ bool c_in_omp_for; @@ -133,7 +136,7 @@ static void set_nonincremental_init_from_string (tree, struct obstack *); static tree find_init_member (tree, struct obstack *); static void readonly_warning (tree, enum lvalue_use); static int lvalue_or_else (location_t, const_tree, enum lvalue_use); -static void record_maybe_used_decl (tree); +static void record_maybe_used_decl (tree, bool address); static bool comptypes_internal (const_tree, const_tree, struct comptypes_data *data); static bool comptypes_check_for_composite (tree t1, tree t2); @@ -2328,7 +2331,15 @@ function_to_pointer_conversion (location_t loc, tree exp) copy_warning (exp, orig_exp); - return build_unary_op (loc, ADDR_EXPR, exp, false); + tree exp2 = build_unary_op (loc, ADDR_EXPR, exp, false); + + /* If the function is defined and known to not to require a non-local + context, make sure no trampoline is generated. */ + if (TREE_CODE (exp) == FUNCTION_DECL + && DECL_INITIAL (exp) && !C_FUNC_NONLOCAL_CONTEXT (exp)) + TREE_NO_TRAMPOLINE (exp2) = 1; + + return exp2; } /* Mark EXP as read, not just set, for set but not used -Wunused @@ -2504,6 +2515,8 @@ really_atomic_lvalue (tree expr) return false; if (!TYPE_ATOMIC (TREE_TYPE (expr))) return false; + if (!COMPLETE_TYPE_P (TREE_TYPE (expr))) + return false; if (!lvalue_p (expr)) return false; @@ -2521,6 +2534,8 @@ really_atomic_lvalue (tree expr) return false; expr = TREE_OPERAND (expr, 0); } + if (TREE_CODE (expr) == COMPOUND_LITERAL_EXPR) + expr = COMPOUND_LITERAL_EXPR_DECL (expr); if (DECL_P (expr) && C_DECL_REGISTER (expr)) return false; return true; @@ -2599,7 +2614,9 @@ convert_lvalue_to_rvalue (location_t loc, struct c_expr exp, if (convert_p) exp = default_function_array_conversion (loc, exp); - if (!VOID_TYPE_P (TREE_TYPE (exp.value))) + if (!VOID_TYPE_P (TREE_TYPE (exp.value)) + || (flag_isoc2y + && TYPE_QUALS (TREE_TYPE (exp.value)) != TYPE_UNQUALIFIED)) exp.value = require_complete_type (loc, exp.value); if (for_init || !RECORD_OR_UNION_TYPE_P (TREE_TYPE (exp.value))) { @@ -3519,7 +3536,7 @@ build_array_ref (location_t loc, tree array, tree index) || (COMPLETE_TYPE_P (TREE_TYPE (TREE_TYPE (array))) && TREE_CODE (TYPE_SIZE (TREE_TYPE (TREE_TYPE (array)))) != INTEGER_CST)) { - if (!c_mark_addressable (array, true)) + if (!c_mark_addressable (array, true, true)) return error_mark_node; } /* An array that is indexed by a constant value which is not within @@ -3530,19 +3547,28 @@ build_array_ref (location_t loc, tree array, tree index) && TYPE_DOMAIN (TREE_TYPE (array)) && !int_fits_type_p (index, TYPE_DOMAIN (TREE_TYPE (array)))) { - if (!c_mark_addressable (array)) + if (!c_mark_addressable (array, false, true)) return error_mark_node; + /* ISO C2Y disallows a negative integer constant expression index + when array subscripting has an operand of array type. */ + if (flag_isoc2y + && !TREE_OVERFLOW (index) + && tree_int_cst_sgn (index) < 0) + error_at (loc, "array subscript is negative"); } - if ((pedantic || warn_c90_c99_compat) + if ((pedantic || warn_c90_c99_compat || warn_c23_c2y_compat) && ! was_vector) { tree foo = array; while (TREE_CODE (foo) == COMPONENT_REF) foo = TREE_OPERAND (foo, 0); - if (VAR_P (foo) && C_DECL_REGISTER (foo)) - pedwarn (loc, OPT_Wpedantic, - "ISO C forbids subscripting % array"); + if ((VAR_P (foo) && C_DECL_REGISTER (foo)) + || (TREE_CODE (foo) == COMPOUND_LITERAL_EXPR + && C_DECL_REGISTER (COMPOUND_LITERAL_EXPR_DECL (foo)))) + pedwarn_c23 (loc, OPT_Wpedantic, + "ISO C forbids subscripting % array " + "before C2Y"); else if (!lvalue_p (foo)) pedwarn_c90 (loc, OPT_Wpedantic, "ISO C90 forbids subscripting non-lvalue " @@ -3641,6 +3667,92 @@ build_omp_array_section (location_t loc, tree array, tree index, tree length) return build3_loc (loc, OMP_ARRAY_SECTION, sectype, array, index, length); } + +/* Record that REF is used. This is relevant for undeclared static + function and declarations referenced from a non-local context. + ADDRESS indicates whether the address is taken. */ + +void +mark_decl_used (tree ref, bool address) +{ + if (!ref || !DECL_P (ref) || in_alignof) + return; + + /* Non-file-scope and non-local reference in nested function. */ + bool nonloc_p = current_function_decl && DECL_CONTEXT (ref) + && DECL_CONTEXT (current_function_decl) + && DECL_CONTEXT (ref) != current_function_decl; + + /* An undeclared static function. */ + bool static_p = TREE_CODE (ref) == FUNCTION_DECL + && DECL_INITIAL (ref) == NULL_TREE + && DECL_EXTERNAL (ref) + && !TREE_PUBLIC (ref); + + if (!static_p && !nonloc_p) + return; + + /* If we may be in an unevaluated context, delay the decision. */ + if (in_sizeof || in_typeof || in_countof || in_generic) + return record_maybe_used_decl (ref, address); + + if (static_p) + C_DECL_USED (ref) = 1; + + if (nonloc_p && (VAR_OR_FUNCTION_DECL_P (ref) + || TREE_CODE (ref) == PARM_DECL)) + DECL_NONLOCAL (ref) = 1; + + /* Nothing to do anymore. */ + if (!nonloc_p || C_FUNC_NONLOCAL_CONTEXT (current_function_decl)) + return; + + /* Filter out the cases where referencing a non-local variable does not + require a non-local context passed via the static chain. */ + if (!C_TYPE_VARIABLY_MODIFIED (TREE_TYPE (ref))) + switch (TREE_CODE (ref)) + { + case FUNCTION_DECL: + /* Use of another local function that requires no context is ok. */ + if (!C_FUNC_NONLOCAL_CONTEXT (ref) && DECL_INITIAL (ref)) + return; + break; + case VAR_DECL: + /* Static variables and constexpr are ok, but for the later only + when the address is not taken. */ + if (TREE_STATIC (ref) || (C_DECL_DECLARED_CONSTEXPR (ref) && !address)) + return; + break; + case TYPE_DECL: + /* A typedef is ok when not for a variably-modified type. */ + return; + case CONST_DECL: + /* An enumeration constant is ok. */ + return; + case PARM_DECL: + break; + case LABEL_DECL: + break; + default: + gcc_unreachable (); + } + + /* Mark all parent functions up to the nesting level of the variable as + as needing the non-local context. */ + for (tree cont = current_function_decl; cont; cont = DECL_CONTEXT (cont)) + { + if (cont == DECL_CONTEXT (ref)) + break; + + /* There should not be any other type of context used for function + except TRANSLATION_UNIT_DECL which we should be able to reach. */ + gcc_checking_assert (TREE_CODE (cont) == FUNCTION_DECL); + + if (TREE_CODE (cont) == FUNCTION_DECL) + C_FUNC_NONLOCAL_CONTEXT (cont) = 1; + } +} + /* Build an external reference to identifier ID. FUN indicates whether this will be used for a function call. LOC is the source @@ -3698,15 +3810,7 @@ build_external_ref (location_t loc, tree id, bool fun, tree *type) TREE_USED (ref) = 1; } - if (TREE_CODE (ref) == FUNCTION_DECL && !in_alignof) - { - if (!in_sizeof && !in_typeof && !in_countof) - C_DECL_USED (ref) = 1; - else if (DECL_INITIAL (ref) == NULL_TREE - && DECL_EXTERNAL (ref) - && !TREE_PUBLIC (ref)) - record_maybe_used_decl (ref); - } + mark_decl_used (ref, false); if (TREE_CODE (ref) == CONST_DECL) { @@ -3725,16 +3829,6 @@ build_external_ref (location_t loc, tree id, bool fun, tree *type) ref = DECL_INITIAL (ref); TREE_CONSTANT (ref) = 1; } - else if (current_function_decl != NULL_TREE - && !DECL_FILE_SCOPE_P (current_function_decl) - && (VAR_OR_FUNCTION_DECL_P (ref) - || TREE_CODE (ref) == PARM_DECL)) - { - tree context = decl_function_context (ref); - - if (context != NULL_TREE && context != current_function_decl) - DECL_NONLOCAL (ref) = 1; - } /* C99 6.7.4p3: An inline definition of a function with external linkage ... shall not contain a reference to an identifier with internal linkage. */ @@ -3751,50 +3845,42 @@ build_external_ref (location_t loc, tree id, bool fun, tree *type) return ref; } -/* Record details of decls possibly used inside sizeof or typeof. */ -struct maybe_used_decl -{ - /* The decl. */ - tree decl; - /* The level seen at (in_sizeof + in_typeof + in_countof). */ - int level; - /* The next one at this level or above, or NULL. */ - struct maybe_used_decl *next; -}; - static struct maybe_used_decl *maybe_used_decls; -/* Record that DECL, an undefined static function reference seen - inside sizeof or typeof, might be used if the operand of sizeof is - a VLA type or the operand of typeof is a variably modified - type. */ +/* Record that DECL, a reference seen inside sizeof or typeof or _Countof or + _Generic, might be used if the operand of sizeof is a VLA type or the + operand of typeof is a variably modified type or the operand of _Countof has + a variable number of elements or the operand of _Generic is the one selected + as the result. */ static void -record_maybe_used_decl (tree decl) +record_maybe_used_decl (tree decl, bool address) { struct maybe_used_decl *t = XOBNEW (&parser_obstack, struct maybe_used_decl); t->decl = decl; - t->level = in_sizeof + in_typeof + in_countof; + t->level = in_sizeof + in_typeof + in_countof + in_generic; + t->address = address; t->next = maybe_used_decls; maybe_used_decls = t; } -/* Pop the stack of decls possibly used inside sizeof or typeof. If - USED is false, just discard them. If it is true, mark them used - (if no longer inside sizeof or typeof) or move them to the next - level up (if still inside sizeof or typeof). */ +/* Pop the stack of decls possibly used inside sizeof or typeof or _Countof or + _Generic. If USED is false, just discard them. If it is true, mark them + used (if no longer inside sizeof or typeof or _Countof or _Generic) or move + them to the next level up (if still inside sizeof or typeof or _Countof or + _Generic). */ void pop_maybe_used (bool used) { struct maybe_used_decl *p = maybe_used_decls; - int cur_level = in_sizeof + in_typeof + in_countof; + int cur_level = in_sizeof + in_typeof + in_countof + in_generic; while (p && p->level > cur_level) { if (used) { if (cur_level == 0) - C_DECL_USED (p->decl) = 1; + mark_decl_used (p->decl, p->address); else p->level = cur_level; } @@ -3804,6 +3890,35 @@ pop_maybe_used (bool used) maybe_used_decls = p; } +/* Pop the stack of decls possibly used inside sizeof or typeof or _Countof or + _Generic, without acting on them, and return the pointer to the previous top + of the stack. This for use at the end of a default generic association when + it is not yet known whether the expression is used. If it later turns out + the expression is used (or treated as used before C23), restore_maybe_used + should be called on the return value followed by pop_maybe_used (true); + otherwise, the return value can be discarded. */ + +struct maybe_used_decl * +save_maybe_used () +{ + struct maybe_used_decl *p = maybe_used_decls, *orig = p; + int cur_level = in_sizeof + in_typeof + in_countof + in_generic; + while (p && p->level > cur_level) + p = p->next; + maybe_used_decls = p; + return orig; +} + +/* Restore the stack of decls possibly used inside sizeof or typeof or _Countof + or _Generic returned by save_maybe_used. It is required that the stack is + at exactly the point where it was left by save_maybe_used. */ + +void +restore_maybe_used (struct maybe_used_decl *stack) +{ + maybe_used_decls = stack; +} + /* Return the result of sizeof applied to EXPR. */ struct c_expr @@ -6180,10 +6295,11 @@ lvalue_or_else (location_t loc, const_tree ref, enum lvalue_use use) is for ARRAY_REF construction - in that case we don't want to look through VIEW_CONVERT_EXPR from VECTOR_TYPE to ARRAY_TYPE, it is fine to use ARRAY_REFs for vector subscripts on vector - register variables. */ + register variables. If OVERRIDE_REGISTER, clear DECL_REGISTER rather + than producing an error for taking the address of a register. */ bool -c_mark_addressable (tree exp, bool array_ref_p) +c_mark_addressable (tree exp, bool array_ref_p, bool override_register) { tree x = exp; @@ -6216,8 +6332,13 @@ c_mark_addressable (tree exp, bool array_ref_p) case COMPOUND_LITERAL_EXPR: if (C_DECL_REGISTER (COMPOUND_LITERAL_EXPR_DECL (x))) { - error ("address of register compound literal requested"); - return false; + if (override_register) + DECL_REGISTER (COMPOUND_LITERAL_EXPR_DECL (x)) = 0; + else + { + error ("address of register compound literal requested"); + return false; + } } TREE_ADDRESSABLE (x) = 1; TREE_ADDRESSABLE (COMPOUND_LITERAL_EXPR_DECL (x)) = 1; @@ -6246,6 +6367,13 @@ c_mark_addressable (tree exp, bool array_ref_p) { if (TREE_PUBLIC (x) || is_global_var (x)) error ("address of global register variable %qD requested", x); + else if (override_register && !DECL_HARD_REGISTER (x)) + { + DECL_REGISTER (x) = 0; + TREE_ADDRESSABLE (x) = 1; + mark_decl_used (x, true); + return true; + } else error ("address of register variable %qD requested", x); return false; @@ -6254,6 +6382,7 @@ c_mark_addressable (tree exp, bool array_ref_p) /* FALLTHRU */ case FUNCTION_DECL: TREE_ADDRESSABLE (x) = 1; + mark_decl_used (x, true); /* FALLTHRU */ default: return true; @@ -10026,6 +10155,10 @@ static int constructor_zeroinit; /* 1 if this constructor should have padding bits zeroed (C23 {}. */ static bool constructor_zero_padding_bits; +/* 1 if this constructor is a braced scalar initializer (further nested levels + of braces are an error). */ +static bool constructor_braced_scalar; + /* Structure for managing pending initializer elements, organized as an AVL tree. */ @@ -10097,6 +10230,7 @@ struct constructor_stack char incremental; char designated; bool zero_padding_bits; + bool braced_scalar; int designator_depth; }; @@ -10273,6 +10407,7 @@ really_start_incremental_init (tree type) p->incremental = constructor_incremental; p->designated = constructor_designated; p->zero_padding_bits = constructor_zero_padding_bits; + p->braced_scalar = constructor_braced_scalar; p->designator_depth = designator_depth; p->next = 0; constructor_stack = p; @@ -10288,6 +10423,7 @@ really_start_incremental_init (tree type) constructor_designated = 0; constructor_zero_padding_bits = false; constructor_zeroinit = 1; + constructor_braced_scalar = false; designator_depth = 0; designator_erroneous = 0; @@ -10347,6 +10483,7 @@ really_start_incremental_init (tree type) /* Handle the case of int x = {5}; */ constructor_fields = constructor_type; constructor_unfilled_fields = constructor_type; + constructor_braced_scalar = true; } } @@ -10423,6 +10560,7 @@ push_init_level (location_t loc, int implicit, p->incremental = constructor_incremental; p->designated = constructor_designated; p->zero_padding_bits = constructor_zero_padding_bits; + p->braced_scalar = constructor_braced_scalar; p->designator_depth = designator_depth; p->next = constructor_stack; p->range_stack = 0; @@ -10440,6 +10578,7 @@ push_init_level (location_t loc, int implicit, /* If the upper initializer has padding bits zeroed, that includes all nested initializers as well. */ constructor_zero_padding_bits = p->zero_padding_bits; + constructor_braced_scalar = false; constructor_pending_elts = 0; if (!implicit) { @@ -10558,7 +10697,15 @@ push_init_level (location_t loc, int implicit, else { if (constructor_type != error_mark_node) - warning_init (input_location, 0, "braces around scalar initializer"); + { + if (p->braced_scalar) + permerror_init (input_location, 0, + "braces around scalar initializer"); + else + warning_init (input_location, 0, + "braces around scalar initializer"); + constructor_braced_scalar = true; + } constructor_fields = constructor_type; constructor_unfilled_fields = constructor_type; } @@ -10780,6 +10927,7 @@ pop_init_level (location_t loc, int implicit, constructor_incremental = p->incremental; constructor_designated = p->designated; constructor_zero_padding_bits = p->zero_padding_bits; + constructor_braced_scalar = p->braced_scalar; designator_depth = p->designator_depth; constructor_pending_elts = p->pending_elts; constructor_depth = p->depth; @@ -13015,6 +13163,7 @@ c_finish_goto_label (location_t loc, tree label) if (!decl) return NULL_TREE; TREE_USED (decl) = 1; + mark_decl_used (decl, false); { add_stmt (build_predict_expr (PRED_GOTO, NOT_TAKEN)); tree t = build1 (GOTO_EXPR, void_type_node, decl); @@ -13190,14 +13339,20 @@ c_finish_return (location_t loc, tree retval, tree origtype, bool musttail_p) if (DECL_P (inner) && !DECL_EXTERNAL (inner) - && !TREE_STATIC (inner) && DECL_CONTEXT (inner) == current_function_decl && POINTER_TYPE_P (TREE_TYPE (TREE_TYPE (current_function_decl)))) { if (TREE_CODE (inner) == LABEL_DECL) warning_at (loc, OPT_Wreturn_local_addr, "function returns address of label"); - else + else if (TREE_CODE (inner) == FUNCTION_DECL + && (C_FUNC_NONLOCAL_CONTEXT (inner) + || !DECL_INITIAL (inner))) + warning_at (loc, OPT_Wreturn_local_addr, + "function returns address of nested function " + "referencing local context"); + else if (TREE_CODE (inner) != FUNCTION_DECL + && !TREE_STATIC (inner)) { warning_at (loc, OPT_Wreturn_local_addr, "function returns address of local variable"); diff --git a/gcc/c/gimple-parser.cc b/gcc/c/gimple-parser.cc index 5fd1db874530..d4c5001623e8 100644 --- a/gcc/c/gimple-parser.cc +++ b/gcc/c/gimple-parser.cc @@ -356,28 +356,33 @@ c_parser_parse_gimple_body (c_parser *cparser, char *gimple_pass, update stmts. */ if (cdil == cdil_gimple_ssa) { - /* Create PHI nodes, they are parsed into __PHI internal calls. */ + /* Create PHI nodes, they are parsed into __PHI internal calls + and update SSA operands. */ FOR_EACH_BB_FN (bb, cfun) - for (gimple_stmt_iterator gsi = gsi_start_bb (bb); - !gsi_end_p (gsi);) - { - gimple *stmt = gsi_stmt (gsi); - if (!gimple_call_internal_p (stmt, IFN_PHI)) - break; + { + gimple_stmt_iterator gsi; + for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi);) + { + gimple *stmt = gsi_stmt (gsi); + if (!gimple_call_internal_p (stmt, IFN_PHI)) + break; - gphi *phi = create_phi_node (gimple_call_lhs (stmt), bb); - for (unsigned i = 0; i < gimple_call_num_args (stmt); i += 2) - { - int srcidx = TREE_INT_CST_LOW (gimple_call_arg (stmt, i)); - edge e = find_edge (BASIC_BLOCK_FOR_FN (cfun, srcidx), bb); - if (!e) - c_parser_error (parser, "edge not found"); - else - add_phi_arg (phi, gimple_call_arg (stmt, i + 1), e, - UNKNOWN_LOCATION); - } - gsi_remove (&gsi, true); - } + gphi *phi = create_phi_node (gimple_call_lhs (stmt), bb); + for (unsigned i = 0; i < gimple_call_num_args (stmt); i += 2) + { + int srcidx = TREE_INT_CST_LOW (gimple_call_arg (stmt, i)); + edge e = find_edge (BASIC_BLOCK_FOR_FN (cfun, srcidx), bb); + if (!e) + c_parser_error (parser, "edge not found"); + else + add_phi_arg (phi, gimple_call_arg (stmt, i + 1), e, + UNKNOWN_LOCATION); + } + gsi_remove (&gsi, true); + } + for (; !gsi_end_p (gsi); gsi_next (&gsi)) + update_stmt (gsi_stmt (gsi)); + } /* Fill SSA name gaps, putting them on the freelist and diagnose SSA names without definition. */ for (unsigned i = 1; i < num_ssa_names; ++i) @@ -639,7 +644,8 @@ c_parser_gimple_compound_statement (gimple_parser &parser, gimple_seq *seq) { gimple_stmt_iterator gsi = gsi_start_bb (parser.current_bb); - gsi_insert_seq_after (&gsi, *seq, GSI_CONTINUE_LINKING); + gsi_insert_seq_after_without_update (&gsi, *seq, + GSI_CONTINUE_LINKING); } *seq = NULL; } @@ -735,7 +741,8 @@ c_parser_gimple_compound_statement (gimple_parser &parser, gimple_seq *seq) else { gimple_stmt_iterator gsi = gsi_start_bb (parser.current_bb); - gsi_insert_seq_after (&gsi, *seq, GSI_CONTINUE_LINKING); + gsi_insert_seq_after_without_update (&gsi, *seq, + GSI_CONTINUE_LINKING); } *seq = NULL; } diff --git a/gcc/cfgexpand.cc b/gcc/cfgexpand.cc index 8950294abb60..5c3ba50862e9 100644 --- a/gcc/cfgexpand.cc +++ b/gcc/cfgexpand.cc @@ -90,7 +90,7 @@ along with GCC; see the file COPYING3. If not see struct ssaexpand SA; /* This variable holds the currently expanded gimple statement for purposes - of comminucating the profile info to the builtin expanders. */ + of communicating the profile info to the builtin expanders. */ gimple *currently_expanding_gimple_stmt; static rtx expand_debug_expr (tree); @@ -834,8 +834,8 @@ add_scope_conflicts_2 (vars_ssa_cache &cache, tree name, { gcc_assert (TREE_CODE (name) == SSA_NAME); - /* Querry the cache for the mapping of addresses that are referendd by - ssa name NAME. Querrying it will fill in it. */ + /* Query the cache for the mapping of addresses that are referenced by + ssa name NAME. Querying it will fill in it. */ bitmap_iterator bi; unsigned i; const_bitmap bmap = cache (name); diff --git a/gcc/cfghooks.cc b/gcc/cfghooks.cc index 5f7fc2723745..25bc5d4b2732 100644 --- a/gcc/cfghooks.cc +++ b/gcc/cfghooks.cc @@ -817,6 +817,15 @@ merge_blocks (basic_block a, basic_block b) if (!cfg_hooks->merge_blocks) internal_error ("%s does not support merge_blocks", cfg_hooks->name); + /* Pick the more reliable count. If both qualities agrees, pick the larger + one since turning mistakely hot code to cold is more harmful. */ + if (!a->count.initialized_p ()) + a->count = b->count; + else if (a->count.quality () < b->count.quality ()) + a->count = b->count; + else if (a->count.quality () == b->count.quality ()) + a->count = a->count.max (b->count); + cfg_hooks->merge_blocks (a, b); if (current_loops != NULL) diff --git a/gcc/cfgloopmanip.cc b/gcc/cfgloopmanip.cc index 2c28437b34d9..dda2fb661d8c 100644 --- a/gcc/cfgloopmanip.cc +++ b/gcc/cfgloopmanip.cc @@ -32,6 +32,8 @@ along with GCC; see the file COPYING3. If not see #include "tree-ssa-loop-manip.h" #include "dumpfile.h" #include "sreal.h" +#include "tree-cfg.h" +#include "tree-pass.h" static void copy_loops_to (class loop **, int, class loop *); @@ -1615,7 +1617,15 @@ create_preheader (class loop *loop, int flags) just a single successor and a normal edge. */ if ((flags & CP_SIMPLE_PREHEADERS) && ((single_entry->flags & EDGE_COMPLEX) - || !single_succ_p (single_entry->src))) + || !single_succ_p (single_entry->src) + /* We document LOOPS_HAVE_PREHEADERS as to forming a + natural place to move code outside of the loop, so it + should not end with a control instruction. */ + /* ??? This, and below JUMP_P check needs to be a new + CFG hook. */ + || (cfun->curr_properties & PROP_gimple + && !gsi_end_p (gsi_last_bb (single_entry->src)) + && stmt_ends_bb_p (*gsi_last_bb (single_entry->src))))) need_forwarder_block = true; /* If we want fallthru preheaders, also create forwarder block when preheader ends with a jump or has predecessors from loop. */ diff --git a/gcc/cgraph.cc b/gcc/cgraph.cc index 32071a84bacc..07966a63905a 100644 --- a/gcc/cgraph.cc +++ b/gcc/cgraph.cc @@ -322,6 +322,7 @@ cgraph_node::insert_new_function_version (void) version_info_node = NULL; version_info_node = ggc_cleared_alloc (); version_info_node->this_node = this; + version_info_node->assembler_name = DECL_ASSEMBLER_NAME (this->decl); if (cgraph_fnver_htab == NULL) cgraph_fnver_htab = hash_table::create_ggc (2); @@ -332,8 +333,8 @@ cgraph_node::insert_new_function_version (void) } /* Remove the cgraph_function_version_info node given by DECL_V. */ -static void -delete_function_version (cgraph_function_version_info *decl_v) +void +cgraph_node::delete_function_version (cgraph_function_version_info *decl_v) { if (decl_v == NULL) return; @@ -1466,13 +1467,11 @@ cgraph_edge::make_direct (cgraph_edge *edge, cgraph_node *callee) /* Compare ref not direct->callee. Direct edge is possibly inlined or redirected. */ if (!direct->speculative_call_target_ref () - ->referred->semantically_equivalent_p (callee)) + ->referred->semantically_equivalent_p (callee) + || found) edge = direct->resolve_speculation (direct, NULL); else - { - gcc_checking_assert (!found); - found = direct; - } + found = direct; } /* On successful speculation just remove the indirect edge and @@ -3159,9 +3158,17 @@ cgraph_edge::maybe_hot_p (sreal scale) /* If reliable IPA count is available, just use it. */ profile_count c = count.ipa (); - if (c.reliable_p ()) + if (c.reliable_p () + || (c.quality () == AFDO && c.nonzero_p ())) return maybe_hot_count_p (NULL, c * scale); + /* In auto-FDO, count 0 may lead to hot code in case the + call is simply not called often enough to receive some samples. */ + if ((c.quality () == AFDO + || count.quality () == GUESSED_GLOBAL0_ADJUSTED) + && callee && callee->count.quality () == AFDO) + return maybe_hot_count_p (NULL, c.force_nonzero () * scale); + /* See if we can determine hotness using caller frequency. */ if (caller->frequency == NODE_FREQUENCY_UNLIKELY_EXECUTED || (callee @@ -4422,6 +4429,25 @@ cgraph_edge::sreal_frequency () : caller->count); } +/* Expected frequency of executions within the function. + If edge is speculative, sum all its indirect targets. */ + +sreal +cgraph_edge::combined_sreal_frequency () +{ + if (!speculative) + return sreal_frequency (); + cgraph_edge *e = this; + if (e->callee) + e = e->speculative_call_indirect_edge (); + sreal sum = e->sreal_frequency (); + for (e = e->first_speculative_call_target (); + e; + e = e->next_speculative_call_target ()) + sum += e->sreal_frequency (); + return sum; +} + /* During LTO stream in this can be used to check whether call can possibly be internal to the current translation unit. */ diff --git a/gcc/cgraph.h b/gcc/cgraph.h index deca564a8e37..b68a8df87d55 100644 --- a/gcc/cgraph.h +++ b/gcc/cgraph.h @@ -856,6 +856,9 @@ struct GTY((for_user)) cgraph_function_version_info { dispatcher. The dispatcher decl is an alias to the resolver function decl. */ tree dispatcher_resolver; + + /* The assmbly name of the function set before version mangling. */ + tree assembler_name; }; #define DEFCIFCODE(code, type, string) CIF_ ## code, @@ -904,7 +907,9 @@ struct GTY((tag ("SYMTAB_FUNCTION"))) cgraph_node : public symtab_node used_as_abstract_origin (false), lowered (false), process (false), frequency (NODE_FREQUENCY_NORMAL), only_called_at_startup (false), only_called_at_exit (false), - tm_clone (false), dispatcher_function (false), calls_comdat_local (false), + tm_clone (false), dispatcher_function (false), + dispatcher_resolver_function (false), is_target_clone (false), + calls_comdat_local (false), icf_merged (false), nonfreeing_fn (false), merged_comdat (false), merged_extern_inline (false), parallelized_function (false), split_part (false), indirect_call_target (false), local (false), @@ -1347,6 +1352,8 @@ struct GTY((tag ("SYMTAB_FUNCTION"))) cgraph_node : public symtab_node DECL is a duplicate declaration. */ static void delete_function_version_by_decl (tree decl); + static void delete_function_version (cgraph_function_version_info *); + /* Add the function FNDECL to the call graph. Unlike finalize_function, this function is intended to be used by middle end and allows insertion of new function at arbitrary point @@ -1482,6 +1489,12 @@ struct GTY((tag ("SYMTAB_FUNCTION"))) cgraph_node : public symtab_node unsigned tm_clone : 1; /* True if this decl is a dispatcher for function versions. */ unsigned dispatcher_function : 1; + /* True if this decl is a resolver for function versions. */ + unsigned dispatcher_resolver_function : 1; + /* True this is part of a multiversioned set and this version comes from a + target_clone attribute. Or if this is a dispatched symbol or resolver + and the default version comes from a target_clones. */ + unsigned is_target_clone : 1; /* True if this decl calls a COMDAT-local function. This is set up in compute_fn_summary and inline_call. */ unsigned calls_comdat_local : 1; @@ -1991,6 +2004,10 @@ class GTY((chain_next ("%h.next_caller"), chain_prev ("%h.prev_caller"), /* Expected frequency of executions within the function. */ sreal sreal_frequency (); + + /* Expected frequency of executions within the function. + If edge is speculative, sum all its indirect targets. */ + sreal combined_sreal_frequency (); private: /* Unique id of the edge. */ int m_uid; @@ -2644,6 +2661,8 @@ tree clone_function_name (const char *name, const char *suffix, tree clone_function_name (tree decl, const char *suffix, unsigned long number); tree clone_function_name (tree decl, const char *suffix); +tree clone_identifier (tree decl, const char *suffix, + bool filter_suffix = false); void tree_function_versioning (tree, tree, vec *, ipa_param_adjustments *, @@ -3105,6 +3124,13 @@ symbol_table::next_function_with_gimple_body (cgraph_node *node) for ((node) = symtab->first_function (); (node); \ (node) = symtab->next_function ((node))) +/* Walk all functions but precompute so a node can be deleted if needed. */ +#define FOR_EACH_FUNCTION_REMOVABLE(node) \ + cgraph_node *next; \ + for ((node) = symtab->first_function (), \ + next = (node) ? symtab->next_function ((node)) : NULL; (node); \ + (node) = next, next = (node) ? symtab->next_function ((node)) : NULL) + /* Return true when callgraph node is a function with Gimple body defined in current unit. Functions can also be define externally or they can be thunks with no Gimple representation. diff --git a/gcc/cgraphclones.cc b/gcc/cgraphclones.cc index c160e8b6985b..cc7e78d8f61f 100644 --- a/gcc/cgraphclones.cc +++ b/gcc/cgraphclones.cc @@ -570,6 +570,32 @@ clone_function_name (tree decl, const char *suffix) /* For consistency this needs to behave the same way as ASM_FORMAT_PRIVATE_NAME does, but without the final number suffix. */ + return clone_identifier (identifier, suffix); +} + +/* Return true if symbol is valid in assembler name. */ + +static bool +is_valid_asm_symbol (char c) +{ + if ('a' <= c && c <= 'z') + return true; + if ('A' <= c && c <= 'Z') + return true; + if ('0' <= c && c <= '9') + return true; + if (c == '_') + return true; + return false; +} + +/* Return a new clone of ID ending with the string SUFFIX. + If FILTER_SUFFIX is true, any illegal asm characters in the SUFFIX are + replaced with _. */ + +tree +clone_identifier (tree id, const char *suffix, bool filter_suffix) +{ char *separator = XALLOCAVEC (char, 2); separator[0] = symbol_table::symbol_suffix_separator (); separator[1] = 0; @@ -578,14 +604,32 @@ clone_function_name (tree decl, const char *suffix) #else const char *prefix = ""; #endif - char *result = ACONCAT ((prefix, - IDENTIFIER_POINTER (identifier), - separator, - suffix, - (char*)0)); - return get_identifier (result); -} + if (!suffix) + suffix = ""; + if (!filter_suffix) + { + char *result = ACONCAT ( + (prefix, IDENTIFIER_POINTER (id), separator, suffix, (char *) 0)); + return get_identifier (result); + } + else + { + /* Replace any illegal chars with _. */ + int suffix_len = strlen (suffix); + char *converted_suffix = XALLOCAVEC (char, suffix_len + 1); + for (int i = 0; i < suffix_len; i++) + if (!is_valid_asm_symbol (suffix[i])) + converted_suffix[i] = '_'; + else + converted_suffix[i] = suffix[i]; + converted_suffix[suffix_len] = '\0'; + + char *result = ACONCAT ((prefix, IDENTIFIER_POINTER (id), separator, + converted_suffix, (char *) 0)); + return get_identifier (result); + } +} /* Create callgraph node clone with new declaration. The actual body will be copied later at compilation stage. The name of the new clone will be @@ -990,6 +1034,7 @@ cgraph_node::create_version_clone (tree new_decl, version. */ e->redirect_callee (new_version); } + new_version->calls_comdat_local = new_version->check_calls_comdat_local_p (); dump_callgraph_transformation (this, new_version, suffix); diff --git a/gcc/cgraphunit.cc b/gcc/cgraphunit.cc index 9f4af63b7dc0..a81f685654f8 100644 --- a/gcc/cgraphunit.cc +++ b/gcc/cgraphunit.cc @@ -1264,6 +1264,15 @@ analyze_functions (bool first_time) if (!cnode->analyzed) cnode->analyze (); + /* A reference to a default node in a function set implies a + reference to all versions in the set. */ + cgraph_function_version_info *node_v = cnode->function_version (); + if (node_v && is_function_default_version (node->decl)) + for (cgraph_function_version_info *fvi = node_v->next; + fvi; + fvi = fvi->next) + enqueue_node (fvi->this_node); + for (edge = cnode->callees; edge; edge = edge->next_callee) if (edge->callee->definition && (!DECL_EXTERNAL (edge->callee->decl) diff --git a/gcc/common.opt b/gcc/common.opt index f6d93dc05fbd..6c993a8a6d38 100644 --- a/gcc/common.opt +++ b/gcc/common.opt @@ -3439,6 +3439,10 @@ Use the Modern linker (MOLD) linker instead of the default linker. fuse-linker-plugin Common Undocumented Var(flag_use_linker_plugin) +flink-libatomic +Common Driver Var(flag_link_libatomic) Init(1) +Enable linking of libatomic. + ; Positive if we should track variables, negative if we should run ; the var-tracking pass only to discard debug annotations, zero if ; we're not to run it. diff --git a/gcc/common.opt.urls b/gcc/common.opt.urls index ddc5eaf9c6be..ab6b4316df9f 100644 --- a/gcc/common.opt.urls +++ b/gcc/common.opt.urls @@ -1634,6 +1634,9 @@ UrlSuffix(gcc/Link-Options.html#index-fuse-ld_003dmold) fuse-linker-plugin UrlSuffix(gcc/Optimize-Options.html#index-fuse-linker-plugin) +flink-libatomic +UrlSuffix(gcc/Link-Options.html#index-flink-libatomic) + fvar-tracking UrlSuffix(gcc/Debugging-Options.html#index-fvar-tracking) diff --git a/gcc/common/config/avr/avr-common.cc b/gcc/common/config/avr/avr-common.cc index d8b982c4fa6f..914b7417fdad 100644 --- a/gcc/common/config/avr/avr-common.cc +++ b/gcc/common/config/avr/avr-common.cc @@ -29,6 +29,13 @@ /* Implement TARGET_OPTION_OPTIMIZATION_TABLE. */ static const struct default_options avr_option_optimization_table[] = { + // The lookup table from tree-swicth-conversion.cc lives in .rodata + // and hence consumes RAM on almost all devices. As PR49857 has + // been rejected several times for non-technical reasons, just + // disable -ftree-switch-conversion by default. But even with PR49857 + // in place there remains PR81540, which cannot be filtered out since + // the pass has no way to hook in. + { OPT_LEVELS_ALL, OPT_ftree_switch_conversion, NULL, 0 }, // The only effect of -fcaller-saves might be that it triggers // a frame without need when it tries to be smart around calls. { OPT_LEVELS_ALL, OPT_fcaller_saves, NULL, 0 }, diff --git a/gcc/common/config/riscv/riscv-common.cc b/gcc/common/config/riscv/riscv-common.cc index a165506f410d..efa2a45a6404 100644 --- a/gcc/common/config/riscv/riscv-common.cc +++ b/gcc/common/config/riscv/riscv-common.cc @@ -262,67 +262,21 @@ struct riscv_ext_version int minor_version; }; -struct riscv_profiles -{ +/* Information about one Profile we know about. */ +struct riscv_profiles { + /* This Profile's name. */ const char *profile_name; + + /* This Profile's arch canonical string. */ const char *profile_string; }; -/* This table records the mapping form RISC-V Profiles into march string. */ static const riscv_profiles riscv_profiles_table[] = { - /* RVI20U only contains the base extension 'i' as mandatory extension. */ - {"rvi20u64", "rv64i"}, - {"rvi20u32", "rv32i"}, - - /* RVA20U contains the 'i,m,a,f,d,c,zicsr,zicntr,ziccif,ziccrse,ziccamoa, - zicclsm,za128rs' as mandatory extensions. */ - {"rva20u64", "rv64imafdc_zicsr_zicntr_ziccif_ziccrse_ziccamoa" - "_zicclsm_za128rs"}, - - /* RVA22U contains the 'i,m,a,f,d,c,zicsr,zihintpause,zba,zbb,zbs,zicntr, - zihpm,ziccif,ziccrse,ziccamoa, zicclsm,zic64b,za64rs,zicbom,zicbop,zicboz, - zfhmin,zkt' as mandatory extensions. */ - {"rva22u64", "rv64imafdc_zicsr_zicntr_ziccif_ziccrse_ziccamoa" - "_zicclsm_zic64b_za64rs_zihintpause_zba_zbb_zbs_zicbom_zicbop" - "_zicboz_zfhmin_zkt"}, - - /* RVA23 contains all mandatory base ISA for RVA22U64 and the new extension - 'v,zihintntl,zvfhmin,zvbb,zvkt,zicond,zimop,zcmop,zfa,zawrs' as mandatory - extensions. */ - {"rva23u64", "rv64imafdcbv_zicsr_zicntr_zihpm_ziccif_ziccrse_ziccamoa" - "_zicclsm_zic64b_za64rs_zihintpause_zba_zbb_zbs_zicbom_zicbop" - "_zicboz_zfhmin_zkt_zvfhmin_zvbb_zvkt_zihintntl_zicond_zimop_zcmop_zcb" - "_zfa_zawrs_supm"}, - - /* RVA23S contains all mandatory base ISA for RVA23U64 and the privileged - extensions as mandatory extensions. */ - {"rva23s64", "rv64imafdcbv_zicsr_zicntr_zihpm_ziccif_ziccrse_ziccamoa" - "_zicclsm_zic64b_za64rs_zihintpause_zba_zbb_zbs_zicbom_zicbop" - "_zicboz_zfhmin_zkt_zvfhmin_zvbb_zvkt_zihintntl_zicond_zimop_zcmop_zcb" - "_zfa_zawrs_svbare_svade_ssccptr_sstvecd_sstvala_sscounterenw_svpbmt" - "_svinval_svnapot_sstc_sscofpmf_ssnpm_ssu64xl_sha_supm" - }, - - /* RVB23 contains all mandatory base ISA for RVA22U64 and the new extension - 'zihintntl,zicond,zimop,zcmop,zfa,zawrs' as mandatory - extensions. */ - {"rvb23u64", "rv64imafdcb_zicsr_zicntr_zihpm_ziccif_ziccrse_ziccamoa" - "_zicclsm_zic64b_za64rs_zihintpause_zba_zbb_zbs_zicbom_zicbop" - "_zicboz_zfhmin_zkt_zihintntl_zicond_zimop_zcmop_zcb" - "_zfa_zawrs"}, - - /* RVB23S contains all mandatory base ISA for RVB23U64 and the privileged - extensions as mandatory extensions. */ - {"rvb23s64", "rv64imafdcb_zicsr_zicntr_zihpm_ziccif_ziccrse_ziccamoa" - "_zicclsm_zic64b_za64rs_zihintpause_zba_zbb_zbs_zicbom_zicbop" - "_zicboz_zfhmin_zkt_zvfhmin_zvbb_zvkt_zihintntl_zicond_zimop_zcmop_zcb" - "_zfa_zawrs_svbare_svade_ssccptr_sstvecd_sstvala_sscounterenw_svpbmt" - "_svinval_svnapot_sstc_sscofpmf_ssu64xl_supm" - }, - - /* Terminate the list. */ - {NULL, NULL} +#define RISCV_PROFILE(PROFILE_NAME, ARCH) \ + {PROFILE_NAME, ARCH}, +#include "../../../config/riscv/riscv-profiles.def" + {NULL, NULL} }; static const riscv_cpu_info riscv_cpu_tables[] = diff --git a/gcc/config.gcc b/gcc/config.gcc index 9da9ac51eccd..a73bf9578e91 100644 --- a/gcc/config.gcc +++ b/gcc/config.gcc @@ -149,6 +149,9 @@ # d_target_objs List of extra target-dependent objects that be # linked into the D compiler only. # +# jit_target_objs List of extra target-dependent objects that be +# linked into the jit compiler only. +# # fortran_target_objs List of extra target-dependent objects that be # linked into the fortran compiler only. # @@ -210,6 +213,9 @@ # # target_has_targetrustm Set to yes or no depending on whether the target # has its own definition of targetrustm. +# +# target_has_targetjitm Set to yes or no depending on whether the target +# has its own definition of targetjitm. out_file= common_out_file= @@ -226,12 +232,14 @@ extra_options= c_target_objs= cxx_target_objs= d_target_objs= +jit_target_objs= fortran_target_objs= rust_target_objs= target_has_targetcm=no target_has_targetm_common=yes target_has_targetdm=no target_has_targetrustm=no +target_has_targetjitm=no tm_defines= xm_defines= # Set this to force installation and use of collect2. @@ -351,7 +359,7 @@ aarch64*-*-*) c_target_objs="aarch64-c.o" cxx_target_objs="aarch64-c.o" d_target_objs="aarch64-d.o" - extra_objs="aarch64-builtins.o aarch-common.o aarch64-elf-metadata.o aarch64-sve-builtins.o aarch64-sve-builtins-shapes.o aarch64-sve-builtins-base.o aarch64-sve-builtins-sve2.o aarch64-sve-builtins-sme.o cortex-a57-fma-steering.o aarch64-speculation.o aarch-bti-insert.o aarch64-early-ra.o aarch64-ldp-fusion.o" + extra_objs="aarch64-builtins.o aarch-common.o aarch64-elf-metadata.o aarch64-sve-builtins.o aarch64-sve-builtins-shapes.o aarch64-sve-builtins-base.o aarch64-sve-builtins-sve2.o aarch64-sve-builtins-sme.o cortex-a57-fma-steering.o aarch64-speculation.o aarch-bti-insert.o aarch64-early-ra.o aarch64-ldp-fusion.o aarch64-sched-dispatch.o" target_gtfiles="\$(srcdir)/config/aarch64/aarch64-protos.h \$(srcdir)/config/aarch64/aarch64-builtins.h \$(srcdir)/config/aarch64/aarch64-builtins.cc \$(srcdir)/config/aarch64/aarch64-sve-builtins.h \$(srcdir)/config/aarch64/aarch64-sve-builtins.cc" target_has_targetm_common=yes ;; @@ -416,6 +424,7 @@ i[34567]86-*-* | x86_64-*-*) c_target_objs="i386-c.o" cxx_target_objs="i386-c.o" d_target_objs="i386-d.o" + jit_target_objs="i386-jit.o" extra_objs="x86-tune-sched.o x86-tune-sched-bd.o x86-tune-sched-atom.o x86-tune-sched-core.o i386-options.o i386-builtins.o i386-expand.o i386-features.o" target_gtfiles="\$(srcdir)/config/i386/i386-builtins.cc \$(srcdir)/config/i386/i386-expand.cc \$(srcdir)/config/i386/i386-options.cc" extra_options="${extra_options} fused-madd.opt" @@ -550,7 +559,7 @@ riscv*) extra_objs="riscv-builtins.o riscv-c.o riscv-sr.o riscv-shorten-memrefs.o riscv-selftests.o riscv-string.o" extra_objs="${extra_objs} riscv-v.o riscv-vsetvl.o riscv-vector-costs.o riscv-avlprop.o riscv-vect-permconst.o" extra_objs="${extra_objs} riscv-vector-builtins.o riscv-vector-builtins-shapes.o riscv-vector-builtins-bases.o sifive-vector-builtins-bases.o andes-vector-builtins-bases.o" - extra_objs="${extra_objs} thead.o riscv-target-attr.o riscv-zicfilp.o" + extra_objs="${extra_objs} thead.o riscv-target-attr.o riscv-zicfilp.o riscv-bclr-lowest-set-bit.o" d_target_objs="riscv-d.o" extra_headers="riscv_vector.h riscv_crypto.h riscv_bitmanip.h riscv_th_vector.h sifive_vector.h andes_vector.h" target_gtfiles="$target_gtfiles \$(srcdir)/config/riscv/riscv-vector-builtins.cc" @@ -620,6 +629,12 @@ then rust_target_objs="${rust_target_objs} ${cpu_type}-rust.o" fi +tm_jit_file= +if test -f ${srcdir}/config/${cpu_type}/${cpu_type}-jit.h +then + tm_jit_file="${tm_jit_file} ${cpu_type}/${cpu_type}-jit.h" +fi + extra_modes= if test -f ${srcdir}/config/${cpu_type}/${cpu_type}-modes.def then @@ -3714,6 +3729,10 @@ if [ "$target_has_targetrustm" = "no" ]; then rust_target_objs="$rust_target_objs default-rust.o" fi +if [ "$target_has_targetjitm" = "no" ]; then + jit_target_objs="$jit_target_objs default-jit.o" +fi + # Support for --with-cpu and related options (and a few unrelated options, # too). case ${with_cpu} in @@ -4775,7 +4794,8 @@ case "${target}" in # Infer arch from --with-arch, --target, and --with-abi. case "${with_arch}" in - rv32e* | rv32i* | rv32g* | rv64e* | rv64i* | rv64g*) + rv32e* | rv32i* | rv32g* | rv64e* | rv64i* | rv64g* \ + | rvi20* | rva20* | rva22* | rva23* | rvb23*) # OK. ;; "") @@ -4789,7 +4809,7 @@ case "${target}" in esac ;; *) - echo "--with-arch=${with_arch} is not supported. The argument must begin with rv32e, rv32i, rv32g, rv64e, rv64i, or rv64g." 1>&2 + echo "--with-arch=${with_arch} is not supported. The argument must begin with rv32e, rv32i, rv32g, rv64e, rv64i, rv64g, or a profile." 1>&2 exit 1 ;; esac @@ -4827,9 +4847,15 @@ case "${target}" in ilp32,rv32* | ilp32e,rv32e* \ | ilp32f,rv32*f* | ilp32f,rv32g* \ | ilp32d,rv32*d* | ilp32d,rv32g* \ + | ilp32,rvi20u32* | ilp32f,rvi20u32* \ + | ilp32d,rvi20u32* \ | lp64,rv64* | lp64e,rv64e* \ | lp64f,rv64*f* | lp64f,rv64g* \ - | lp64d,rv64*d* | lp64d,rv64g*) + | lp64d,rv64*d* | lp64d,rv64g* \ + | lp64,rvi20u64* | lp64f,rvi20u64* \ + | lp64d,rva20u64* | lp64d,rva22u64* \ + | lp64d,rva23u64* | lp64d,rva23s64* \ + | lp64d,rvb23u64* | lp64d,rvb23s64) ;; *) echo "--with-abi=${with_abi} is not supported for ISA ${with_arch}" 1>&2 @@ -6080,6 +6106,7 @@ case ${target} in c_target_objs="${c_target_objs} ${cpu_type}-c.o" cxx_target_objs="${cxx_target_objs} ${cpu_type}-c.o" d_target_objs="${d_target_objs} ${cpu_type}-d.o" + jit_target_objs="${jit_target_objs} ${cpu_type}-jit.o" tmake_file="${cpu_type}/t-${cpu_type} ${tmake_file}" ;; diff --git a/gcc/config.in b/gcc/config.in index 183d0dfcada4..0c634dfc538e 100644 --- a/gcc/config.in +++ b/gcc/config.in @@ -2626,6 +2626,12 @@ #endif +/* Define if libatomic is built for the target. */ +#ifndef USED_FOR_TARGET +#undef TARGET_PROVIDES_LIBATOMIC +#endif + + /* Define to 1 if you can safely include both and . */ #ifndef USED_FOR_TARGET #undef TIME_WITH_SYS_TIME diff --git a/gcc/config/aarch64/aarch64-c.cc b/gcc/config/aarch64/aarch64-c.cc index 98337b7f693b..a8ff58e49945 100644 --- a/gcc/config/aarch64/aarch64-c.cc +++ b/gcc/config/aarch64/aarch64-c.cc @@ -269,6 +269,7 @@ aarch64_update_cpp_builtins (cpp_reader *pfile) "__ARM_FEATURE_SVE_BF16", pfile); aarch64_def_or_undef (TARGET_LUT, "__ARM_FEATURE_LUT", pfile); + aarch64_def_or_undef (TARGET_SME_LUTv2, "__ARM_FEATURE_SME_LUTv2", pfile); aarch64_def_or_undef (TARGET_FP8, "__ARM_FEATURE_FP8", pfile); diff --git a/gcc/config/aarch64/aarch64-option-extensions.def b/gcc/config/aarch64/aarch64-option-extensions.def index db88df08a6af..a70375c053f2 100644 --- a/gcc/config/aarch64/aarch64-option-extensions.def +++ b/gcc/config/aarch64/aarch64-option-extensions.def @@ -277,6 +277,8 @@ AARCH64_OPT_EXTENSION("ssve-fp8dot2", SSVE_FP8DOT2, (SME2, FP8), (), (), "smesf8 AARCH64_OPT_EXTENSION("lut", LUT, (SIMD), (), (), "lut") +AARCH64_OPT_EXTENSION ("sme-lutv2", SME_LUTv2, (SME2), (), (), "sme-lutv2") + AARCH64_OPT_EXTENSION("cpa", CPA, (), (), (), "") #undef AARCH64_OPT_FMV_EXTENSION diff --git a/gcc/config/aarch64/aarch64-protos.h b/gcc/config/aarch64/aarch64-protos.h index 56efcf2c7f2c..a9e407ba340e 100644 --- a/gcc/config/aarch64/aarch64-protos.h +++ b/gcc/config/aarch64/aarch64-protos.h @@ -581,6 +581,9 @@ struct tune_params /* Define models for the aarch64_ldp_stp_policy. */ enum aarch64_ldp_stp_policy ldp_policy_model, stp_policy_model; + + /* Dispatch constraints for instruction scheduling. */ + const struct dispatch_constraint_info *dispatch_constraints; }; /* Classifies an address. @@ -654,6 +657,14 @@ enum aarch64_extra_tuning_flags_index AARCH64_EXTRA_TUNE_index_END }; +/* Dispatch constraints configuration for instruction scheduling. */ +struct dispatch_constraint_info +{ + const int *max_slots; + int num_constraints; + vec> (*callback) (rtx_insn *); +}; + #define AARCH64_EXTRA_TUNING_OPTION(x, name) \ AARCH64_EXTRA_TUNE_##name = (1u << AARCH64_EXTRA_TUNE_##name##_index), diff --git a/gcc/config/aarch64/aarch64-sched-dispatch.cc b/gcc/config/aarch64/aarch64-sched-dispatch.cc new file mode 100644 index 000000000000..1f8c651cc031 --- /dev/null +++ b/gcc/config/aarch64/aarch64-sched-dispatch.cc @@ -0,0 +1,229 @@ +/* Dispatch scheduling hooks for AArch64. + Copyright The GNU Toolchain Authors. + + 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 "config.h" +#include "system.h" +#include "coretypes.h" +#include "backend.h" +#include "rtl.h" +#include "insn-attr.h" +#include "insn-attr-common.h" +#include "aarch64-protos.h" +#include "aarch64-sched-dispatch.h" +#include "regset.h" +#include "sched-int.h" +#include "dumpfile.h" +#include "print-rtl.h" + +/* This file implements the target hooks for dispatch scheduling for AArch64. + Instructions are scheduled into the current dispatch window according to + dispatch constraints provided by the tuning model. + + To enable dispatch scheduling for a core (see Neoverse V2 for an example): + - in the tuning model, add the AARCH64_EXTRA_TUNE_DISPATCH_SCHED tune flag + - in the tuning model, add an array of max slot counts for each constraint + and add its reference and length to the tune_params struct + - in the tuning model, add a callback function to determine slot requirements + - optionally, create a new instruction attribute to classify instructions + into dispatch groups (e.g. neoversev2_dispatch) */ + +static dispatch_window *current_dispatch_window; + +/* Constructor for class dispatch_window. */ +dispatch_window::dispatch_window (const dispatch_constraint_info &constraint_info) + : m_max_slots (constraint_info.max_slots), + m_num_constraints (constraint_info.num_constraints), + m_callback (constraint_info.callback), + m_violation (false) +{ + m_free_slots = XNEWVEC (int, m_num_constraints); + reset_constraints (); +} + +/* Destructor for class dispatch_window. */ +dispatch_window::~dispatch_window () +{ + XDELETEVEC (m_free_slots); +} + +/* Return TRUE iff the given constraints fit into the dispatch window. */ +bool +dispatch_window::fits_window (rtx_insn *insn, + const vec> &constraints) const +{ + if (INSN_CODE (insn) < 0) + return true; + + if (dump_file) + { + fprintf (dump_file, "Checking if insn fits into dispatch window:\n"); + print_rtl_single (dump_file, insn); + } + + for (const auto &constraint : constraints) + { + if (constraint.second > m_free_slots[constraint.first]) + { + if (dump_file && (dump_flags & TDF_DETAILS)) + { + fprintf (dump_file, "Constraint %d needs %d slot(s), " + "only %d free.\n", + constraint.first, constraint.second, + m_free_slots[constraint.first]); + } + return false; + } + } + return true; +} + +/* Get the constraints for an instruction. */ +vec> +dispatch_window::get_constraints (rtx_insn *insn) const +{ + return m_callback (insn); +} + +/* Add INSN to the dispatch window and set the violation flag + if there is a constraint violation. */ +void +dispatch_window::add_insn_to_window (rtx_insn *insn) +{ + if (INSN_CODE (insn) < 0) + return; + + auto constraints = m_callback (insn); + + if (!fits_window (insn, constraints)) + { + if (dump_file) + fprintf (dump_file, "Window full. Starting new dispatch window.\n"); + reset_constraints (); + } + + for (const auto &constraint : constraints) + { + m_free_slots[constraint.first] -= constraint.second; + if (m_free_slots[constraint.first] < 0) + m_violation = true; + } + + if (dump_file) + { + fprintf (dump_file, "Insn added to dispatch window.\n"); + if (dump_flags & TDF_DETAILS) + print_window (dump_file); + } +} + +/* Return TRUE iff there is a dispatch violation, i.e. one of the dispatch + constraints has a negative number of free slots. */ +bool +dispatch_window::has_violation () const +{ + return m_violation; +} + +/* Print information about the dispatch window to the given FILE. */ +void +dispatch_window::print_window (FILE *file) const +{ + fprintf (file, "==== Current dispatch window ====\n"); + fprintf (file, "Violation: %s\n", m_violation ? "true" : "false"); + for (int i = 0; i < m_num_constraints; i++) + { + fprintf (file, "Constraint %d: %d of %d slots free\n", + i, m_free_slots[i], m_max_slots[i]); + } + fprintf (file, "\n"); +} + +/* For all dispatch constraints, reset the number of free slots to the + maximum number of slots. + This is called when the next dispatch window is started. */ +void +dispatch_window::reset_constraints () +{ + for (int i = 0; i < m_num_constraints; i++) + m_free_slots[i] = m_max_slots[i]; + m_violation = false; +} + +/* Initialize the dispatch window using the constraints from the tuning model. + This is called once at the beginning of scheduling. */ +void +init_dispatch_window (void) +{ + const struct dispatch_constraint_info *dispatch_constraints + = aarch64_tune_params.dispatch_constraints; + current_dispatch_window = new dispatch_window (*dispatch_constraints); + + if (dump_file) + { + fprintf (dump_file, "DISPATCH WINDOW INITIALIZED\n"); + if (dump_flags & TDF_DETAILS) + current_dispatch_window->print_window (dump_file); + } +} + +/* The next two functions implement the dispatch-scheduling target hooks + for aarch64 and are the drivers of the dispatch scheduler. */ +void +aarch64_sched_dispatch_do (rtx_insn *insn, int mode) +{ + if (mode == DISPATCH_INIT) + init_dispatch_window (); + else if (mode == ADD_TO_DISPATCH_WINDOW && current_dispatch_window) + current_dispatch_window->add_insn_to_window (insn); +} + +bool +aarch64_sched_dispatch (rtx_insn *insn, int action) +{ + /* We only want dispatch scheduling to be enabled during the last + scheduling pass, i.e. after reload and sched_fusion. */ + if ((aarch64_tune_params.extra_tuning_flags + & AARCH64_EXTRA_TUNE_DISPATCH_SCHED) + && reload_completed && !sched_fusion) + switch (action) + { + case IS_DISPATCH_ON: + return true; + + /* IS_CMP may be used to delay scheduling of flag setting instructions + to keep them close to their consumers, e.g. branches at the end of a BB. + However, we don't want to delay scheduling of flag setting instructions, + because many consumers are not branches. */ + case IS_CMP: + return false; + + case DISPATCH_VIOLATION: + return current_dispatch_window->has_violation (); + + case FITS_DISPATCH_WINDOW: + { + auto constraints = current_dispatch_window->get_constraints (insn); + return current_dispatch_window->fits_window (insn, constraints); + } + + default: + return false; + } + return false; +} \ No newline at end of file diff --git a/gcc/config/aarch64/aarch64-sched-dispatch.h b/gcc/config/aarch64/aarch64-sched-dispatch.h new file mode 100644 index 000000000000..4b588e850cc7 --- /dev/null +++ b/gcc/config/aarch64/aarch64-sched-dispatch.h @@ -0,0 +1,52 @@ +/* Dispatch scheduling hooks for AArch64. + Copyright The GNU Toolchain Authors. + + 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 + . */ + +#ifndef GCC_AARCH64_SCHED_DISPATCH_H +#define GCC_AARCH64_SCHED_DISPATCH_H + +void aarch64_sched_dispatch_do (rtx_insn *, int); +bool aarch64_sched_dispatch (rtx_insn *, int); + +/* Describes a dispatch window and keeps track of the dispatch constraints. + The constraints are represented as array of slot counts, where each + index corresponds to a dispatch constraint type. */ +class dispatch_window +{ +public: + dispatch_window (const dispatch_constraint_info &constraint_info); + ~dispatch_window (); + + bool fits_window (rtx_insn *insn, + const vec> &constraints) const; + vec> get_constraints (rtx_insn *) const; + void add_insn_to_window (rtx_insn *); + bool has_violation () const; + void print_window (FILE *) const; + +private: + void reset_constraints (); + + const int *m_max_slots; + int *m_free_slots; + const int m_num_constraints; + vec> (*const m_callback) (rtx_insn *); + bool m_violation; +}; + +#endif /* GCC_AARCH64_SCHED_DISPATCH_H */ diff --git a/gcc/config/aarch64/aarch64-simd.md b/gcc/config/aarch64/aarch64-simd.md index 14b9d5c78e3f..0d5b02a739fa 100644 --- a/gcc/config/aarch64/aarch64-simd.md +++ b/gcc/config/aarch64/aarch64-simd.md @@ -949,6 +949,17 @@ } ) +(define_expand "vec_trunc_add_high" + [(set (match_operand: 0 "register_operand") + (plus:VQN (match_operand:VQN 1 "register_operand") + (match_operand:VQN 2 "register_operand")))] + "TARGET_SIMD" + { + emit_insn (gen_aarch64_addhn (operands[0], operands[1], operands[2])); + DONE; + } +) + (define_insn "aarch64_abal" [(set (match_operand: 0 "register_operand" "=w") (plus: @@ -9263,35 +9274,6 @@ [(set_attr "type" "crypto_sha3")] ) -(define_insn_and_split "*bcaxqdi4" - [(set (match_operand:DI 0 "register_operand") - (xor:DI - (and:DI - (not:DI (match_operand:DI 3 "register_operand")) - (match_operand:DI 2 "register_operand")) - (match_operand:DI 1 "register_operand")))] - "TARGET_SHA3" - {@ [ cons: =0, 1, 2 , 3 ; attrs: type ] - [ w , w, w , w ; crypto_sha3 ] bcax\t%0.16b, %1.16b, %2.16b, %3.16b - [ &r , r, r0, r0 ; multiple ] # - } - "&& REG_P (operands[0]) && GP_REGNUM_P (REGNO (operands[0]))" - [(set (match_dup 4) - (and:DI (not:DI (match_dup 3)) - (match_dup 2))) - (set (match_dup 0) - (xor:DI (match_dup 4) - (match_dup 1)))] - { - if (reload_completed) - operands[4] = operands[0]; - else if (can_create_pseudo_p ()) - operands[4] = gen_reg_rtx (DImode); - else - FAIL; - } -) - ;; SM3 (define_insn "aarch64_sm3ss1qv4si" diff --git a/gcc/config/aarch64/aarch64-sme.md b/gcc/config/aarch64/aarch64-sme.md index 0123ea0e2349..632ef1e47744 100644 --- a/gcc/config/aarch64/aarch64-sme.md +++ b/gcc/config/aarch64/aarch64-sme.md @@ -1040,6 +1040,24 @@ "mova\tza.d[%w0, %1, vgx], %2" ) +;; MOVT (vector to table) +;; Variants are also available for: +;; [_s8], [_u16], [_s16], [_u32], [_s32], [_u64], [_s64] +;; [_bf16], [_f16], [_f32], [_f64] +;; void svwrite_zt[_u8](uint64_t zt0, svuint8_t zt) +;; __arm_streaming __arm_out ("zt0"); +;; void svwrite_lane_zt[_u8](uint64_t zt0, svuint8_t zt, uint64_t idx) +;; __arm_streaming __arm_out ("zt0"); +(define_insn "@aarch64_sme_write_zt" + [(set (reg:V8DI ZT0_REGNUM) + (unspec_volatile:V8DI + [(match_operand:SVE_FULL 0 "register_operand" "w") + (match_operand:DI 1 "const_int_operand")] + UNSPEC_SME_WRITE))] + "TARGET_SME_LUTv2" + "movt\tzt0 [%1, mul vl], %0" +) + ;; ------------------------------------------------------------------------- ;; ---- Zeroing ;; ------------------------------------------------------------------------- @@ -2165,6 +2183,7 @@ (define_c_enum "unspec" [ UNSPEC_SME_LUTI + UNSPEC_SME_LUTI_ZT ]) (define_insn "@aarch64_sme_lut" @@ -2193,3 +2212,18 @@ && !( == 4 && == 4 && == 8)" "luti\t%0, zt0, %1[%2]" ) + +;; LUTI4 (four registers, 8-bit) +;; Variants are also available for: _u8 +;; svint8x4_t svluti4_zt_s8_x4 (uint64_t zt0, svuint8x2_t zn) +;; __arm_streaming __arm_in ("zt0"); */ +(define_insn "aarch64_sme_lut_zt" + [(set (match_operand:VNx64QI 0 "aligned_register_operand" "=Uw4") + (unspec:VNx64QI + [(reg:V8DI ZT0_REGNUM) + (reg:DI SME_STATE_REGNUM) + (match_operand:VNx32QI 1 "register_operand" "w")] + UNSPEC_SME_LUTI_ZT))] + "TARGET_SME_LUTv2" + "luti4\t%0, zt0, {%Z1 - %T1}" +) diff --git a/gcc/config/aarch64/aarch64-sve-builtins-shapes.cc b/gcc/config/aarch64/aarch64-sve-builtins-shapes.cc index af23a154d0e8..74a3338e9556 100644 --- a/gcc/config/aarch64/aarch64-sve-builtins-shapes.cc +++ b/gcc/config/aarch64/aarch64-sve-builtins-shapes.cc @@ -182,6 +182,7 @@ parse_element_type (const function_instance &instance, const char *&format) e - an enum with the given name s - a scalar type with the given element suffix t - a vector or tuple type with given element suffix [*1] + T - a vector or tuple type with given element suffix [*2] v - a vector with the given element suffix D - a 64 bit neon vector Q - a 128 bit neon vector @@ -189,7 +190,9 @@ parse_element_type (const function_instance &instance, const char *&format) where has the format described above parse_element_type [*1] the vectors_per_tuple function indicates whether the type should - be a tuple, and if so, how many vectors it should contain. */ + be a tuple, and if so, how many vectors it should contain. + [*2] same as for [*1], but the tuple contains half as many vectors. +*/ static tree parse_type (const function_instance &instance, const char *&format) { @@ -261,6 +264,13 @@ parse_type (const function_instance &instance, const char *&format) unsigned int num_vectors = instance.vectors_per_tuple (); return acle_vector_types[num_vectors - 1][vector_type]; } + if (ch == 'T') + { + type_suffix_index suffix = parse_element_type (instance, format); + vector_type_index vector_type = type_suffixes[suffix].vector_type; + unsigned int num_vectors = instance.vectors_per_tuple () / 2; + return acle_vector_types[num_vectors - 1][vector_type]; + } if (ch == 'v') { @@ -973,6 +983,24 @@ struct luti_lane_zt_base : public nonoverloaded_base } }; +/* LUTI4 (four registers, 8-bit) + Variants are also available for: _u8 + svint8x4_t svluti4_zt_s8_x4 (uint64_t zt0, svuint8x2_t zn) + __arm_streaming __arm_in ("zt0"); */ +template struct luti_zt_base : public nonoverloaded_base +{ + void build (function_builder &b, + const function_group_info &group) const override + { + build_all (b, "t0,su64,Tu0", group, MODE_none); + } + + bool check (function_checker &c) const override + { + return c.require_immediate_range (0, 0, 0); + } +}; + /* sv_t svfoo[_t0](sv_t, sv_t, sv_t) (for integer t0) sv_t svmmla[_t0](sv_t, sv_t, sv_t) (for floating-point t0) @@ -3207,6 +3235,9 @@ SHAPE (luti2_lane_zt) using luti4_lane_zt_def = luti_lane_zt_base<4>; SHAPE (luti4_lane_zt) +using luti4_zt_def = luti_zt_base<4>; +SHAPE (luti4_zt) + /* svbool_t svfoo(enum svpattern). */ struct pattern_pred_def : public nonoverloaded_base { @@ -5269,4 +5300,75 @@ struct write_za_slice_def : public overloaded_base<1> }; SHAPE (write_za_slice) +/* MOVT (vector to table) + Variants are also available for: + [_s8], [_u16], [_s16], [_u32], [_s32], [_u64], [_s64] + [_bf16], [_f16], [_f32], [_f64] + void svwrite_zt[_u8] (uint64_t zt0, svuint8_t zt, uint64_t idx) + __arm_streaming __arm_out ("zt0"); */ +struct write_zt_def : public overloaded_base<0> +{ + void build (function_builder &b, + const function_group_info &group) const override + { + b.add_overloaded_functions (group, MODE_none); + build_all (b, "_,su64,v0", group, MODE_none); + } + + tree resolve (function_resolver &r) const override + { + sve_type type; + + if (!r.check_num_arguments (2) + || !r.require_scalar_type (0, "uint64_t") + || !r.require_integer_immediate (0) + || !(type = r.infer_vector_type (1))) + return error_mark_node; + + return r.resolve_to (r.mode_suffix_id, type); + } + + bool check (function_checker &c) const override + { + return c.require_immediate_range (0, 0, 0); + } +}; +SHAPE (write_zt); + +/* MOVT (vector to table) + Variants are also available for: + [_s8], [_u16], [_s16], [_u32], [_s32], [_u64], [_s64] + [_bf16], [_f16], [_f32], [_f64] + void svwrite_lane_zt[_u8] (uint64_t zt0, svuint8_t zt, uint64_t idx) + __arm_streaming __arm_out ("zt0"); */ +struct write_lane_zt_def : public overloaded_base<0> +{ + void build (function_builder &b, + const function_group_info &group) const override + { + b.add_overloaded_functions (group, MODE_none); + build_all (b, "_,su64,v0,su64", group, MODE_none); + } + + tree resolve (function_resolver &r) const override + { + sve_type type; + + if (!r.check_num_arguments (3) + || !r.require_scalar_type (0, "uint64_t") + || !r.require_integer_immediate (0) + || !(type = r.infer_vector_type (1)) + || !r.require_scalar_type (2, "uint64_t")) + return error_mark_node; + + return r.resolve_to (r.mode_suffix_id, type); + } + + bool check (function_checker &c) const override + { + return c.require_immediate_range (0, 0, 0) + && c.require_immediate_range (2, 0, 3); + } +}; +SHAPE (write_lane_zt); } diff --git a/gcc/config/aarch64/aarch64-sve-builtins-shapes.h b/gcc/config/aarch64/aarch64-sve-builtins-shapes.h index 349eae6e34ab..421cb1e8b854 100644 --- a/gcc/config/aarch64/aarch64-sve-builtins-shapes.h +++ b/gcc/config/aarch64/aarch64-sve-builtins-shapes.h @@ -168,6 +168,7 @@ namespace aarch64_sve extern const function_shape *const luti4; extern const function_shape *const luti2_lane_zt; extern const function_shape *const luti4_lane_zt; + extern const function_shape *const luti4_zt; extern const function_shape *const mmla; extern const function_shape *const pattern_pred; extern const function_shape *const pmov_from_vector; @@ -260,6 +261,8 @@ namespace aarch64_sve extern const function_shape *const write_za; extern const function_shape *const write_za_m; extern const function_shape *const write_za_slice; + extern const function_shape *const write_zt; + extern const function_shape *const write_lane_zt; } } diff --git a/gcc/config/aarch64/aarch64-sve-builtins-sme.cc b/gcc/config/aarch64/aarch64-sve-builtins-sme.cc index e0f0f660952b..4657e29ad64b 100644 --- a/gcc/config/aarch64/aarch64-sve-builtins-sme.cc +++ b/gcc/config/aarch64/aarch64-sve-builtins-sme.cc @@ -352,6 +352,30 @@ class svluti_lane_zt_impl : public read_zt0 unsigned int m_bits; }; +/* LUTI4 (four registers, 8-bit) + Variants are also available for: _u8 + svint8x4_t svluti4_zt_s8_x4 (uint64_t zt0, svuint8x2_t zn) + __arm_streaming __arm_in ("zt0"); */ +class svluti_zt_impl : public read_zt0 +{ +public: + CONSTEXPR svluti_zt_impl (unsigned int bits) : m_bits (bits) {} + + unsigned int call_properties (const function_instance &) const override + { + return CP_READ_ZT0; + } + + rtx expand (function_expander &e) const override + { + // Remove `zt0` argument, since it is ignored. + e.args.ordered_remove (0); + return e.use_exact_insn (CODE_FOR_aarch64_sme_lut_zt); + } + + unsigned int m_bits; +}; + template class svread_za_slice_base : public function_base { @@ -467,6 +491,51 @@ class svwrite_za_impl : public function_base } }; +/* MOVT (vector to table) + Variants are also available for: + [_s8], [_u16], [_s16], [_u32], [_s32], [_u64], [_s64] + [_bf16], [_f16], [_f32], [_f64] + void svwrite_lane_zt[_u8] (uint64_t zt0, svuint8_t zt, uint64_t idx) + __arm_streaming __arm_out ("zt0"); */ +class svwrite_lane_zt_impl : public function_base +{ +public: + unsigned int call_properties (const function_instance &) const override + { + return CP_WRITE_ZT0; + } + + rtx expand (function_expander &e) const override + { + // Remove `zt0` argument, since it is ignored. + e.args.ordered_remove (0); + auto mode = e.args[0]->mode; + return e.use_exact_insn (code_for_aarch64_sme_write_zt (mode)); + } +}; + +/* MOVT (vector to table) + Variants are also available for: + [_s8], [_u16], [_s16], [_u32], [_s32], [_u64], [_s64] + [_bf16], [_f16], [_f32], [_f64] + void svwrite_zt[_u8] (uint64_t zt0, svuint8_t zt) + __arm_streaming __arm_out ("zt0"); */ +class svwrite_zt_impl : public function_base +{ +public: + unsigned int call_properties (const function_instance &) const override + { + return CP_WRITE_ZT0; + } + + rtx expand (function_expander &e) const override + { + // svwrite_zt (zt0, zt) == svwrite_lane_zt (zt0, zt, 0) + e.args.safe_push (const0_rtx); + return svwrite_lane_zt_impl ().expand (e); + } +}; + using svwrite_za_tile_impl = add_call_properties; @@ -569,6 +638,7 @@ FUNCTION (svldr_za, svldr_za_impl, ) FUNCTION (svldr_zt, svldr_zt_impl, ) FUNCTION (svluti2_lane_zt, svluti_lane_zt_impl, (2)) FUNCTION (svluti4_lane_zt, svluti_lane_zt_impl, (4)) +FUNCTION (svluti4_zt, svluti_zt_impl, (4)) FUNCTION (svmla_za, sme_2mode_function, (UNSPEC_SME_SMLA, UNSPEC_SME_UMLA, UNSPEC_SME_FMLA)) FUNCTION (svmla_lane_za, sme_2mode_lane_function, (UNSPEC_SME_SMLA, @@ -616,6 +686,8 @@ FUNCTION (svvdot_lane_za, sme_2mode_lane_function, (UNSPEC_SME_SVDOT, FUNCTION (svwrite_za, svwrite_za_impl,) FUNCTION (svwrite_hor_za, svwrite_za_tile_impl, (UNSPEC_SME_WRITE_HOR)) FUNCTION (svwrite_ver_za, svwrite_za_tile_impl, (UNSPEC_SME_WRITE_VER)) +FUNCTION (svwrite_zt, svwrite_zt_impl,) +FUNCTION (svwrite_lane_zt, svwrite_lane_zt_impl,) FUNCTION (svzero_mask_za, svzero_mask_za_impl, ) FUNCTION (svzero_za, svzero_za_impl, ) FUNCTION (svzero_zt, svzero_zt_impl, ) diff --git a/gcc/config/aarch64/aarch64-sve-builtins-sme.def b/gcc/config/aarch64/aarch64-sve-builtins-sme.def index 117b70ede740..978a74f438de 100644 --- a/gcc/config/aarch64/aarch64-sve-builtins-sme.def +++ b/gcc/config/aarch64/aarch64-sve-builtins-sme.def @@ -253,6 +253,12 @@ DEF_SME_ZA_FUNCTION_GS (svzero, inherent_za_slice, d_za, vg2, none) DEF_SME_ZA_FUNCTION_GS (svzero, inherent_za_slice, d_za, vg4, none) #undef REQUIRED_EXTENSIONS +#define REQUIRED_EXTENSIONS streaming_only (AARCH64_FL_SME_LUTv2) +DEF_SME_FUNCTION_GS (svwrite_zt, write_zt, all_data, none, none) +DEF_SME_FUNCTION_GS (svwrite_lane_zt, write_lane_zt, all_data, none, none) +DEF_SME_FUNCTION_GS (svluti4_zt, luti4_zt, b_integer, x4, none) +#undef REQUIRED_EXTENSIONS + #undef DEF_SME_ZA_FUNCTION #undef DEF_SME_ZA_FUNCTION_GS #undef DEF_SME_FUNCTION diff --git a/gcc/config/aarch64/aarch64-sve-builtins-sme.h b/gcc/config/aarch64/aarch64-sve-builtins-sme.h index 9ed8101d2f94..4968f65442be 100644 --- a/gcc/config/aarch64/aarch64-sve-builtins-sme.h +++ b/gcc/config/aarch64/aarch64-sve-builtins-sme.h @@ -44,6 +44,7 @@ namespace aarch64_sve extern const function_base *const svldr_zt; extern const function_base *const svluti2_lane_zt; extern const function_base *const svluti4_lane_zt; + extern const function_base *const svluti4_zt; extern const function_base *const svmla_za; extern const function_base *const svmla_lane_za; extern const function_base *const svmls_za; @@ -75,6 +76,8 @@ namespace aarch64_sve extern const function_base *const svwrite_za; extern const function_base *const svwrite_hor_za; extern const function_base *const svwrite_ver_za; + extern const function_base *const svwrite_zt; + extern const function_base *const svwrite_lane_zt; extern const function_base *const svundef_za; extern const function_base *const svvdot_lane_za; extern const function_base *const svzero_mask_za; diff --git a/gcc/config/aarch64/aarch64-sve-builtins.cc b/gcc/config/aarch64/aarch64-sve-builtins.cc index 1764cf8f7e8f..4956e364929c 100644 --- a/gcc/config/aarch64/aarch64-sve-builtins.cc +++ b/gcc/config/aarch64/aarch64-sve-builtins.cc @@ -3802,6 +3802,7 @@ gimple_folder::fold_active_lanes_to (tree x) gimple_seq stmts = NULL; tree pred = convert_pred (stmts, vector_type (0), 0); + x = force_vector (stmts, TREE_TYPE (lhs), x); gsi_insert_seq_before (gsi, stmts, GSI_SAME_STMT); return gimple_build_assign (lhs, VEC_COND_EXPR, pred, x, vec_inactive); } @@ -4355,7 +4356,11 @@ function_expander::use_cond_insn (insn_code icode, unsigned int merge_argno) add_input_operand (icode, pred); for (unsigned int i = 0; i < nops; ++i) add_input_operand (icode, args[opno + i]); - add_input_operand (icode, fallback_arg); + if (fallback_arg == CONST0_RTX (mode) + && insn_operand_matches (icode, m_ops.length (), fallback_arg)) + add_fixed_operand (fallback_arg); + else + add_input_operand (icode, fallback_arg); return generate_insn (icode); } diff --git a/gcc/config/aarch64/aarch64-sve-builtins.h b/gcc/config/aarch64/aarch64-sve-builtins.h index c145b8065ae3..d6a58b450d6d 100644 --- a/gcc/config/aarch64/aarch64-sve-builtins.h +++ b/gcc/config/aarch64/aarch64-sve-builtins.h @@ -57,9 +57,10 @@ function_shape describes how that instruction has been presented at the language level. - The static list of functions uses function_group to describe a group - of related functions. The function_builder class is responsible for - expanding this static description into a list of individual functions + The static arrays of function_group_info (function_groups, + neon_sve_function_groups, sme_function_groups) use function_group to describe + a group of related functions. The function_builder class is responsible for + expanding these static description into a list of individual functions and registering the associated built-in functions. function_instance describes one of these individual functions in terms of the properties described above. diff --git a/gcc/config/aarch64/aarch64-sve.md b/gcc/config/aarch64/aarch64-sve.md index 1ebcffe88a32..8c47d441c3fd 100644 --- a/gcc/config/aarch64/aarch64-sve.md +++ b/gcc/config/aarch64/aarch64-sve.md @@ -696,11 +696,11 @@ && ((lra_in_progress || reload_completed) || (register_operand (operands[0], mode) && nonmemory_operand (operands[1], mode)))" - {@ [ cons: =0 , 1 ] - [ w , Utr ] ldr\t%0, %1 - [ Utr , w ] str\t%1, %0 - [ w , w ] mov\t%0.d, %1.d - [ w , Dn ] << aarch64_output_sve_mov_immediate (operands[1]); + {@ [ cons: =0 , 1 ; attrs: sve_type ] + [ w , Utr ; sve_load_1reg ] ldr\t%0, %1 + [ Utr , w ; sve_store_1reg ] str\t%1, %0 + [ w , w ; * ] mov\t%0.d, %1.d + [ w , Dn ; * ] << aarch64_output_sve_mov_immediate (operands[1]); } ) @@ -719,7 +719,10 @@ "#" "&& 1" [(set (match_dup 0) - (match_dup 2))]) + (match_dup 2))] + {} + [(set_attr "sve_type" "sve_load_1reg,sve_store_1reg")] +) ;; Unpredicated moves that cannot use LDR and STR, i.e. partial vectors ;; or vectors for which little-endian ordering isn't acceptable. Memory @@ -772,10 +775,10 @@ "TARGET_SVE && (register_operand (operands[0], mode) || register_operand (operands[2], mode))" - {@ [ cons: =0 , 1 , 2 ] - [ w , Upl , w ] # - [ w , Upl , m ] ld1\t%0., %1/z, %2 - [ m , Upl , w ] st1\t%2., %1, %0 + {@ [ cons: =0 , 1 , 2 ; attrs: sve_type ] + [ w , Upl , w ; * ] # + [ w , Upl , m ; sve_load_1reg ] ld1\t%0., %1/z, %2 + [ m , Upl , w ; sve_store_1reg ] st1\t%2., %1, %0 } "&& register_operand (operands[0], mode) && register_operand (operands[2], mode)" @@ -976,11 +979,11 @@ "TARGET_SVE && (register_operand (operands[0], mode) || register_operand (operands[1], mode))" - {@ [ cons: =0 , 1 ] - [ Upa , Upa ] mov\t%0.b, %1.b - [ m , Upa ] str\t%1, %0 - [ Upa , m ] ldr\t%0, %1 - [ Upa , Dn ] << aarch64_output_sve_mov_immediate (operands[1]); + {@ [ cons: =0 , 1 ; attrs: sve_type ] + [ Upa , Upa ; sve_pred_misc ] mov\t%0.b, %1.b + [ m , Upa ; sve_store_pred ] str\t%1, %0 + [ Upa , m ; sve_load_pred ] ldr\t%0, %1 + [ Upa , Dn ; sve_pred_misc ] << aarch64_output_sve_mov_immediate (operands[1]); } ) @@ -1007,6 +1010,7 @@ { operands[2] = operands[3] = CONSTM1_RTX (VNx16BImode); } + [(set_attr "sve_type" "sve_pred_misc")] ) ;; Match PTRUES Pn.[HSD] when both the predicate and flags are useful. @@ -1034,6 +1038,7 @@ operands[2] = CONSTM1_RTX (VNx16BImode); operands[3] = CONSTM1_RTX (mode); } + [(set_attr "sve_type" "sve_pred_misc")] ) ;; Match PTRUES Pn.B when only the flags result is useful (which is @@ -1059,6 +1064,7 @@ { operands[2] = operands[3] = CONSTM1_RTX (VNx16BImode); } + [(set_attr "sve_type" "sve_pred_misc")] ) ;; Match PTRUES Pn.[HWD] when only the flags result is useful (which is @@ -1086,6 +1092,7 @@ operands[2] = CONSTM1_RTX (VNx16BImode); operands[3] = CONSTM1_RTX (mode); } + [(set_attr "sve_type" "sve_pred_misc")] ) ;; ------------------------------------------------------------------------- @@ -1131,6 +1138,7 @@ [ Dm ] setffr [ Upa ] wrffr\t%0.b } + [(set_attr "sve_type" "sve_ffr")] ) ;; [L2 in the block comment above about FFR handling] @@ -1170,6 +1178,7 @@ (reg:VNx16BI FFRT_REGNUM))] "TARGET_SVE && TARGET_NON_STREAMING" "rdffr\t%0.b" + [(set_attr "sve_type" "sve_ffr")] ) ;; Likewise with zero predication. @@ -1184,6 +1193,7 @@ [ ?Upa , 0Upa; yes ] ^ [ Upa , Upa ; no ] ^ } + [(set_attr "sve_type" "sve_ffr")] ) ;; Read the FFR to test for a fault, without using the predicate result. @@ -1204,6 +1214,7 @@ [ ?Upa , 0Upa; yes ] ^ [ Upa , Upa ; no ] ^ } + [(set_attr "sve_type" "sve_ffr")] ) ;; Same for unpredicated RDFFR when tested with a known PTRUE. @@ -1222,6 +1233,7 @@ [ ?Upa , 0Upa; yes ] ^ [ Upa , Upa ; no ] ^ } + [(set_attr "sve_type" "sve_ffr")] ) ;; Read the FFR with zero predication and test the result. @@ -1245,6 +1257,7 @@ [ ?Upa , 0Upa; yes ] ^ [ Upa , Upa ; no ] ^ } + [(set_attr "sve_type" "sve_ffr")] ) ;; Same for unpredicated RDFFR when tested with a known PTRUE. @@ -1264,6 +1277,7 @@ [ ?Upa , 0Upa; yes ] ^ [ Upa , Upa ; no ] ^ } + [(set_attr "sve_type" "sve_ffr")] ) ;; [R3 in the block comment above about FFR handling] @@ -1331,6 +1345,7 @@ UNSPEC_LD1_SVE))] "TARGET_SVE" "ld1\t%0., %2/z, %1" + [(set_attr "sve_type" "sve_load_1reg")] ) ;; Unpredicated LD[234]. @@ -1358,6 +1373,7 @@ UNSPEC_LDN))] "TARGET_SVE" "ld\t%0, %2/z, %1" + [(set_attr "sve_type" "sve_load_reg")] ) ;; ------------------------------------------------------------------------- @@ -1390,6 +1406,7 @@ { operands[3] = CONSTM1_RTX (mode); } + [(set_attr "sve_type" "sve_load_1reg")] ) ;; Same as above without the maskload_else_operand to still allow combine to @@ -1410,6 +1427,7 @@ { operands[3] = CONSTM1_RTX (mode); } + [(set_attr "sve_type" "sve_load_1reg")] ) ;; ------------------------------------------------------------------------- @@ -1436,6 +1454,7 @@ SVE_LDFF1_LDNF1))] "TARGET_SVE && TARGET_NON_STREAMING" "ldf1\t%0., %2/z, %1" + [(set_attr "sve_type" "sve_load_1reg")] ) ;; ------------------------------------------------------------------------- @@ -1476,6 +1495,7 @@ { operands[3] = CONSTM1_RTX (mode); } + [(set_attr "sve_type" "sve_load_1reg")] ) ;; ------------------------------------------------------------------------- @@ -1498,6 +1518,7 @@ UNSPEC_LDNT1_SVE))] "TARGET_SVE" "ldnt1\t%0., %2/z, %1" + [(set_attr "sve_type" "sve_load_1reg")] ) ;; ------------------------------------------------------------------------- @@ -1555,6 +1576,7 @@ [&w, rk, w, Ui1, i, Upl] ld1\t%0.s, %5/z, [%1, %2.s, uxtw %p4] [?w, rk, 0, Ui1, i, Upl] ^ } + [(set_attr "sve_type" "sve_gatherload_32")] ) ;; Predicated gather loads for 64-bit elements. The value of operand 3 @@ -1581,6 +1603,7 @@ [&w, rk, w, i, i, Upl] ld1\t%0.d, %5/z, [%1, %2.d, lsl %p4] [?w, rk, 0, i, i, Upl] ^ } + [(set_attr "sve_type" "sve_gatherload_64")] ) ;; Likewise, but with the offset being extended from 32 bits. @@ -1610,6 +1633,7 @@ { operands[6] = CONSTM1_RTX (VNx2BImode); } + [(set_attr "sve_type" "sve_gatherload_64")] ) ;; Likewise, but with the offset being truncated to 32 bits and then @@ -1641,6 +1665,7 @@ { operands[6] = CONSTM1_RTX (VNx2BImode); } + [(set_attr "sve_type" "sve_gatherload_64")] ) ;; Likewise, but with the offset being truncated to 32 bits and then @@ -1665,6 +1690,7 @@ [&w, rk, w, i, i, Upl ] ld1\t%0.d, %5/z, [%1, %2.d, uxtw %p4] [?w, rk, 0, i, i, Upl ] ^ } + [(set_attr "sve_type" "sve_gatherload_64")] ) ;; ------------------------------------------------------------------------- @@ -1717,6 +1743,7 @@ { operands[6] = CONSTM1_RTX (VNx4BImode); } + [(set_attr "sve_type" "sve_gatherload_32")] ) ;; Predicated extending gather loads for 64-bit elements. The value of @@ -1753,6 +1780,7 @@ { operands[6] = CONSTM1_RTX (VNx2BImode); } + [(set_attr "sve_type" "sve_gatherload_64")] ) ;; Likewise, but with the offset being extended from 32 bits. @@ -1789,6 +1817,7 @@ operands[6] = CONSTM1_RTX (VNx2BImode); operands[7] = CONSTM1_RTX (VNx2BImode); } + [(set_attr "sve_type" "sve_gatherload_64")] ) ;; Likewise, but with the offset being truncated to 32 bits and then @@ -1827,6 +1856,7 @@ operands[6] = CONSTM1_RTX (VNx2BImode); operands[7] = CONSTM1_RTX (VNx2BImode); } + [(set_attr "sve_type" "sve_gatherload_64")] ) ;; Likewise, but with the offset being truncated to 32 bits and then @@ -1861,6 +1891,7 @@ { operands[7] = CONSTM1_RTX (VNx2BImode); } + [(set_attr "sve_type" "sve_gatherload_64")] ) ;; ------------------------------------------------------------------------- @@ -1899,6 +1930,7 @@ [&w, rk, w, Ui1, i, Upl] ldff1w\t%0.s, %5/z, [%1, %2.s, uxtw %p4] [?w, rk, 0, Ui1, i, Upl] ^ } + [(set_attr "sve_type" "sve_gatherload_32")] ) ;; Predicated first-faulting gather loads for 64-bit elements. The value @@ -1925,6 +1957,7 @@ [&w, rk, w, i, i, Upl ] ldff1d\t%0.d, %5/z, [%1, %2.d, lsl %p4] [?w, rk, 0, i, i, Upl ] ^ } + [(set_attr "sve_type" "sve_gatherload_64")] ) ;; Likewise, but with the offset being sign-extended from 32 bits. @@ -1955,6 +1988,7 @@ { operands[6] = CONSTM1_RTX (VNx2BImode); } + [(set_attr "sve_type" "sve_gatherload_64")] ) ;; Likewise, but with the offset being zero-extended from 32 bits. @@ -1978,6 +2012,7 @@ [&w, rk, w, i, i, Upl ] ldff1d\t%0.d, %5/z, [%1, %2.d, uxtw %p4] [?w, rk, 0, i, i, Upl ] ^ } + [(set_attr "sve_type" "sve_gatherload_64")] ) ;; ------------------------------------------------------------------------- @@ -2028,6 +2063,7 @@ { operands[6] = CONSTM1_RTX (VNx4BImode); } + [(set_attr "sve_type" "sve_gatherload_32")] ) ;; Predicated extending first-faulting gather loads for 64-bit elements. @@ -2062,6 +2098,7 @@ { operands[6] = CONSTM1_RTX (VNx2BImode); } + [(set_attr "sve_type" "sve_gatherload_64")] ) ;; Likewise, but with the offset being sign-extended from 32 bits. @@ -2097,6 +2134,7 @@ operands[6] = CONSTM1_RTX (VNx2BImode); operands[7] = CONSTM1_RTX (VNx2BImode); } + [(set_attr "sve_type" "sve_gatherload_64")] ) ;; Likewise, but with the offset being zero-extended from 32 bits. @@ -2128,6 +2166,7 @@ { operands[7] = CONSTM1_RTX (VNx2BImode); } + [(set_attr "sve_type" "sve_gatherload_64")] ) ;; ========================================================================= @@ -2349,6 +2388,7 @@ UNSPEC_ST1_SVE))] "TARGET_SVE" "st1\t%1., %2, %0" + [(set_attr "sve_type" "sve_store_1reg")] ) ;; Unpredicated ST[234]. This is always a full update, so the dependence @@ -2379,6 +2419,7 @@ UNSPEC_STN))] "TARGET_SVE" "st\t%1, %2, %0" + [(set_attr "sve_type" "sve_store_reg")] ) ;; ------------------------------------------------------------------------- @@ -2401,6 +2442,7 @@ UNSPEC_ST1_SVE))] "TARGET_SVE" "st1\t%1., %2, %0" + [(set_attr "sve_type" "sve_store_1reg")] ) ;; Predicated truncate and store, with 4 elements per 128-bit block. @@ -2414,6 +2456,7 @@ UNSPEC_ST1_SVE))] "TARGET_SVE" "st1\t%1., %2, %0" + [(set_attr "sve_type" "sve_store_1reg")] ) ;; Predicated truncate and store, with 2 elements per 128-bit block. @@ -2427,6 +2470,7 @@ UNSPEC_ST1_SVE))] "TARGET_SVE" "st1\t%1., %2, %0" + [(set_attr "sve_type" "sve_store_1reg")] ) ;; ------------------------------------------------------------------------- @@ -2448,6 +2492,7 @@ UNSPEC_STNT1_SVE))] "TARGET_SVE" "stnt1\t%1., %2, %0" + [(set_attr "sve_type" "sve_store_1reg")] ) ;; ------------------------------------------------------------------------- @@ -2496,6 +2541,7 @@ [ rk , w , Z , i , w , Upl ] st1\t%4.s, %5, [%0, %1.s, sxtw %p3] [ rk , w , Ui1 , i , w , Upl ] st1\t%4.s, %5, [%0, %1.s, uxtw %p3] } + [(set_attr "sve_type" "sve_scatterstore_32")] ) ;; Predicated scatter stores for 64-bit elements. The value of operand 2 @@ -2517,6 +2563,7 @@ [ rk , w , Ui1 , w , Upl ] st1\t%4.d, %5, [%0, %1.d] [ rk , w , i , w , Upl ] st1\t%4.d, %5, [%0, %1.d, lsl %p3] } + [(set_attr "sve_type" "sve_scatterstore_64")] ) ;; Likewise, but with the offset being extended from 32 bits. @@ -2543,6 +2590,7 @@ { operands[6] = CONSTM1_RTX (mode); } + [(set_attr "sve_type" "sve_scatterstore_64")] ) ;; Likewise, but with the offset being truncated to 32 bits and then @@ -2571,6 +2619,7 @@ { operands[6] = CONSTM1_RTX (mode); } + [(set_attr "sve_type" "sve_scatterstore_64")] ) ;; Likewise, but with the offset being truncated to 32 bits and then @@ -2592,6 +2641,7 @@ [ rk , w , Ui1 , w , Upl ] st1\t%4.d, %5, [%0, %1.d, uxtw] [ rk , w , i , w , Upl ] st1\t%4.d, %5, [%0, %1.d, uxtw %p3] } + [(set_attr "sve_type" "sve_scatterstore_64")] ) ;; ------------------------------------------------------------------------- @@ -2625,6 +2675,7 @@ [ w , Z , w , Upl ] st1\t%4.s, %5, [%0, %1.s, sxtw %p3] [ w , Ui1 , w , Upl ] st1\t%4.s, %5, [%0, %1.s, uxtw %p3] } + [(set_attr "sve_type" "sve_scatterstore_32")] ) ;; Predicated truncating scatter stores for 64-bit elements. The value of @@ -2647,6 +2698,7 @@ [ w , w , Upl ] st1\t%4.d, %5, [%0, %1.d] [ w , w , Upl ] st1\t%4.d, %5, [%0, %1.d, lsl %p3] } + [(set_attr "sve_type" "sve_scatterstore_64")] ) ;; Likewise, but with the offset being sign-extended from 32 bits. @@ -2675,6 +2727,7 @@ { operands[6] = copy_rtx (operands[5]); } + [(set_attr "sve_type" "sve_scatterstore_64")] ) ;; Likewise, but with the offset being zero-extended from 32 bits. @@ -2696,6 +2749,7 @@ [ rk , w , w , Upl ] st1\t%4.d, %5, [%0, %1.d, uxtw] [ rk , w , w , Upl ] st1\t%4.d, %5, [%0, %1.d, uxtw %p3] } + [(set_attr "sve_type" "sve_scatterstore_64")] ) ;; ========================================================================= @@ -2808,6 +2862,7 @@ emit_insn (gen_aarch64_sve_ld1rq (operands[0], operands[1], gp)); DONE; } + [(set_attr "sve_type" "sve_int_general")] ) ;; Duplicate an Advanced SIMD vector to fill an SVE vector (BE version). @@ -2829,6 +2884,7 @@ operands[1] = gen_rtx_REG (mode, REGNO (operands[1])); return "dup\t%0.q, %1.q[0]"; } + [(set_attr "sve_type" "sve_int_general")] ) ;; This is used for vec_duplicates from memory, but can also @@ -2844,6 +2900,7 @@ UNSPEC_SEL))] "TARGET_SVE" "ld1r\t%0., %1/z, %2" + [(set_attr "sve_type" "sve_load_1reg")] ) ;; Load 128 bits from memory under predicate control and duplicate to @@ -2859,6 +2916,7 @@ operands[1] = gen_rtx_MEM (mode, XEXP (operands[1], 0)); return "ld1rq\t%0., %2/z, %1"; } + [(set_attr "sve_type" "sve_load_1reg")] ) (define_insn "@aarch64_sve_ld1ro" @@ -2873,6 +2931,7 @@ operands[1] = gen_rtx_MEM (mode, XEXP (operands[1], 0)); return "ld1ro\t%0., %2/z, %1"; } + [(set_attr "sve_type" "sve_load_1reg")] ) ;; ------------------------------------------------------------------------- @@ -2939,6 +2998,7 @@ [ ??&w , w , rZ ; yes ] movprfx\t%0, %1\;insr\t%0., %2 [ ?&w , w , w ; yes ] movprfx\t%0, %1\;insr\t%0., %2 } + [(set_attr "sve_type" "sve_int_general")] ) ;; ------------------------------------------------------------------------- @@ -2954,10 +3014,10 @@ (match_operand: 1 "aarch64_sve_index_operand") (match_operand: 2 "aarch64_sve_index_operand")))] "TARGET_SVE" - {@ [ cons: =0 , 1 , 2 ] - [ w , Usi , r ] index\t%0., #%1, %2 - [ w , r , Usi ] index\t%0., %1, #%2 - [ w , r , r ] index\t%0., %1, %2 + {@ [ cons: =0 , 1 , 2 ; attrs: sve_type ] + [ w , Usi , r ; sve_int_index ] index\t%0., #%1, %2 + [ w , r , Usi ; sve_int_index ] index\t%0., %1, #%2 + [ w , r , r ; sve_int_index ] index\t%0., %1, %2 } ) @@ -2974,6 +3034,7 @@ operands[2] = aarch64_check_zero_based_sve_index_immediate (operands[2]); return "index\t%0., %1, #%2"; } + [(set_attr "sve_type" "sve_int_index")] ) ;; ------------------------------------------------------------------------- @@ -3124,6 +3185,7 @@ operands[0] = gen_rtx_REG (mode, REGNO (operands[0])); return "dup\t%0., %1.[%2]"; } + [(set_attr "sve_type" "sve_int_general")] ) ;; Extract an element outside the range of DUP. This pattern requires the @@ -3141,7 +3203,8 @@ ? "ext\t%0.b, %0.b, %0.b, #%2" : "movprfx\t%0, %1\;ext\t%0.b, %0.b, %1.b, #%2"); } - [(set_attr "movprfx" "*,yes")] + [(set_attr "movprfx" "*,yes") + (set_attr "sve_type" "sve_int_general")] ) ;; ------------------------------------------------------------------------- @@ -3161,9 +3224,9 @@ (match_operand:SVE_ALL 2 "register_operand")] LAST))] "TARGET_SVE" - {@ [ cons: =0 , 1 , 2 ] - [ ?r , Upl , w ] last\t%0, %1, %2. - [ w , Upl , w ] last\t%0, %1, %2. + {@ [ cons: =0 , 1 , 2 ; attrs: sve_type ] + [ ?r , Upl , w ; sve_int_extract ] last\t%0, %1, %2. + [ w , Upl , w ; sve_int_extract ] last\t%0, %1, %2. } ) @@ -3253,6 +3316,7 @@ [ w , Upl , 0 ; * ] \t%Z0., %1/m, %Z2. [ ?&w , Upl , w ; yes ] movprfx\t%Z0, %Z2\;\t%Z0., %1/m, %Z2. } + [(set_attr "sve_type" "sve_int_general")] ) ;; Predicated integer unary arithmetic with merging. @@ -3281,6 +3345,7 @@ [ w , Upl , 0 ; * ] \t%0., %1/m, %0. [ ?&w , Upl , w ; yes ] movprfx\t%0, %2\;\t%0., %1/m, %2. } + [(set_attr "sve_type" "sve_int_general")] ) ;; Predicated integer unary arithmetic, merging with an independent value. @@ -3304,6 +3369,7 @@ [ ?&w , Upl , w , Dz ; yes ] movprfx\t%0., %1/z, %2.\;\t%0., %1/m, %2. [ ?&w , Upl , w , w ; yes ] movprfx\t%0, %3\;\t%0., %1/m, %2. } + [(set_attr "sve_type" "sve_int_general")] ) @@ -3385,6 +3451,7 @@ [ w , Upl , 0 ; * ] \t%0., %1/m, %2. [ ?&w , Upl , w ; yes ] movprfx\t%0, %2\;\t%0., %1/m, %2. } + [(set_attr "sve_type" "sve_int_general")] ) ;; Another way of expressing the REVB, REVH and REVW patterns, with this @@ -3404,6 +3471,7 @@ [ w , Upl , 0 ; * ] rev\t%0., %1/m, %2. [ ?&w , Upl , w ; yes ] movprfx\t%0, %2\;rev\t%0., %1/m, %2. } + [(set_attr "sve_type" "sve_int_general")] ) ;; Predicated integer unary operations with merging. @@ -3422,6 +3490,7 @@ [ ?&w , Upl , w , Dz ; yes ] movprfx\t%0., %1/z, %2.\;\t%0., %1/m, %2. [ ?&w , Upl , w , w ; yes ] movprfx\t%0, %3\;\t%0., %1/m, %2. } + [(set_attr "sve_type" "sve_int_general")] ) ;; ------------------------------------------------------------------------- @@ -3463,6 +3532,7 @@ [ w , Upl , 0 ; * ] xt\t%0., %1/m, %2. [ ?&w , Upl , w ; yes ] movprfx\t%0, %2\;xt\t%0., %1/m, %2. } + [(set_attr "sve_type" "sve_int_extend")] ) ;; Predicated truncate-and-sign-extend operations. @@ -3480,6 +3550,7 @@ [ w , Upl , 0 ; * ] sxt\t%0., %1/m, %2. [ ?&w , Upl , w ; yes ] movprfx\t%0, %2\;sxt\t%0., %1/m, %2. } + [(set_attr "sve_type" "sve_int_extend")] ) ;; Predicated truncate-and-sign-extend operations with merging. @@ -3499,6 +3570,7 @@ [ ?&w , Upl , w , Dz ; yes ] movprfx\t%0., %1/z, %2.\;sxt\t%0., %1/m, %2. [ ?&w , Upl , w , w ; yes ] movprfx\t%0, %3\;sxt\t%0., %1/m, %2. } + [(set_attr "sve_type" "sve_int_extend")] ) ;; Predicated truncate-and-zero-extend operations, merging with the @@ -3520,6 +3592,7 @@ [ w , Upl , 0 ; * ] uxt%e3\t%0., %1/m, %0. [ ?&w , Upl , w ; yes ] movprfx\t%0, %2\;uxt%e3\t%0., %1/m, %2. } + [(set_attr "sve_type" "sve_int_extend")] ) ;; Predicated truncate-and-zero-extend operations, merging with an @@ -3545,6 +3618,7 @@ [ ?&w , Upl , w , Dz ; yes ] movprfx\t%0., %1/z, %2.\;uxt%e3\t%0., %1/m, %2. [ ?&w , Upl , w , w ; yes ] movprfx\t%0, %4\;uxt%e3\t%0., %1/m, %2. } + [(set_attr "sve_type" "sve_int_extend")] ) ;; ------------------------------------------------------------------------- @@ -3616,6 +3690,7 @@ [ w , Upl , 0 ; * ] cnot\t%0., %1/m, %2. [ ?&w , Upl , w ; yes ] movprfx\t%0, %2\;cnot\t%0., %1/m, %2. } + [(set_attr "sve_type" "sve_int_general")] ) ;; Predicated logical inverse with merging. @@ -3672,6 +3747,7 @@ { operands[5] = CONSTM1_RTX (mode); } + [(set_attr "sve_type" "sve_int_general")] ) ;; Predicated logical inverse, merging with an independent value. @@ -3709,6 +3785,7 @@ { operands[5] = CONSTM1_RTX (mode); } + [(set_attr "sve_type" "sve_int_general")] ) ;; ------------------------------------------------------------------------- @@ -3726,6 +3803,7 @@ SVE_FP_UNARY_INT))] "TARGET_SVE" "\t%0., %1." + [(set_attr "sve_type" "sve_fp_exp")] ) ;; ------------------------------------------------------------------------- @@ -3755,6 +3833,7 @@ SVE_FP_UNARY))] "TARGET_SVE" "\t%0., %1." + [(set_attr "sve_type" "sve_")] ) ;; Unpredicated floating-point unary operations. @@ -3800,6 +3879,7 @@ [ w , Upl , 0 ; * ] \t%0., %1/m, %2. [ ?&w , Upl , w ; yes ] movprfx\t%0, %2\;\t%0., %1/m, %2. } + [(set_attr "sve_type" "sve_")] ) ;; Predicated floating-point unary arithmetic with merging. @@ -3838,6 +3918,7 @@ { operands[3] = copy_rtx (operands[1]); } + [(set_attr "sve_type" "sve_")] ) (define_insn "*cond__2_strict" @@ -3856,6 +3937,7 @@ [ w , Upl , 0 ; * ] \t%0., %1/m, %0. [ ?&w , Upl , w ; yes ] movprfx\t%0, %2\;\t%0., %1/m, %2. } + [(set_attr "sve_type" "sve_")] ) ;; Predicated floating-point unary arithmetic, merging with an independent @@ -3887,6 +3969,7 @@ { operands[4] = copy_rtx (operands[1]); } + [(set_attr "sve_type" "sve_")] ) (define_insn "*cond__any_strict" @@ -3906,6 +3989,7 @@ [ ?&w , Upl , w , Dz ; yes ] movprfx\t%0., %1/z, %2.\;\t%0., %1/m, %2. [ ?&w , Upl , w , w ; yes ] movprfx\t%0, %3\;\t%0., %1/m, %2. } + [(set_attr "sve_type" "sve_")] ) ;; ------------------------------------------------------------------------- @@ -3986,6 +4070,7 @@ (match_operand:PRED_ALL 1 "register_operand" "Upa")))] "TARGET_SVE" "not\t%0.b, %1/z, %2.b" + [(set_attr "sve_type" "sve_pred_logical")] ) ;; Predicated predicate inverse in which the flags are set in the same @@ -4005,6 +4090,7 @@ (and:PRED_ALL (not:PRED_ALL (match_dup 2)) (match_dup 3)))] "TARGET_SVE" "nots\t%0.b, %1/z, %2.b" + [(set_attr "sve_type" "sve_pred_logical")] ) ;; Same, where only the flags result is interesting. @@ -4022,6 +4108,7 @@ (clobber (match_scratch:PRED_ALL 0 "=Upa"))] "TARGET_SVE" "nots\t%0.b, %1/z, %2.b" + [(set_attr "sve_type" "sve_pred_logical")] ) ;; ========================================================================= @@ -4121,6 +4208,7 @@ [(set (match_dup 0) (SVE_INT_BINARY_IMM:SVE_I_SIMD_DI (match_dup 2) (match_dup 3)))] "" + [(set_attr "sve_type" "sve_")] ) ;; Unpredicated binary operations with a constant (post-RA only). @@ -4135,7 +4223,8 @@ "@ \t%Z0., %Z0., #%2 movprfx\t%Z0, %Z1\;\t%Z0., %Z0., #%2" - [(set_attr "movprfx" "*,yes")] + [(set_attr "movprfx" "*,yes") + (set_attr "sve_type" "sve_")] ) ;; Predicated integer operations with merging. @@ -4166,6 +4255,7 @@ [ w , Upl , 0 , w ; * ] \t%0., %1/m, %0., %3. [ ?&w , Upl , w , w ; yes ] movprfx\t%0, %2\;\t%0., %1/m, %0., %3. } + [(set_attr "sve_type" "sve_")] ) ;; Predicated integer operations, merging with the second input. @@ -4183,6 +4273,7 @@ [ w , Upl , w , 0 ; * ] \t%0., %1/m, %0., %2. [ ?&w , Upl , w , w ; yes ] movprfx\t%0, %3\;\t%0., %1/m, %0., %2. } + [(set_attr "sve_type" "sve_")] ) ;; Predicated integer operations, merging with an independent value. @@ -4213,7 +4304,8 @@ operands[4], operands[1])); operands[4] = operands[2] = operands[0]; } - [(set_attr "movprfx" "yes")] + [(set_attr "movprfx" "yes") + (set_attr "sve_type" "sve_")] ) ;; ------------------------------------------------------------------------- @@ -4246,6 +4338,7 @@ [ ?w , w , vsn ; yes ] movprfx\t%0, %1\;sub\t%0., %0., #%N2 [ w , w , w ; * ] add\t%0., %1., %2. } + [(set_attr "sve_type" "sve_int_general")] ) ;; Merging forms are handled through SVE_INT_BINARY. @@ -4269,6 +4362,7 @@ [ w , vsa , 0 ; * ] subr\t%0., %0., #%D1 [ ?&w , vsa , w ; yes ] movprfx\t%0, %2\;subr\t%0., %0., #%D1 } + [(set_attr "sve_type" "sve_int_general")] ) ;; Merging forms are handled through SVE_INT_BINARY. @@ -4290,6 +4384,7 @@ UNSPEC_ADR))] "TARGET_SVE && TARGET_NON_STREAMING" "adr\t%0., [%1., %2.]" + [(set_attr "sve_type" "sve_int_general")] ) ;; Same, but with the offset being sign-extended from the low 32 bits. @@ -4310,6 +4405,7 @@ { operands[3] = CONSTM1_RTX (VNx2BImode); } + [(set_attr "sve_type" "sve_int_general")] ) ;; Same, but with the offset being zero-extended from the low 32 bits. @@ -4323,6 +4419,7 @@ UNSPEC_ADR))] "TARGET_SVE && TARGET_NON_STREAMING" "adr\t%0.d, [%1.d, %2.d, uxtw]" + [(set_attr "sve_type" "sve_int_general")] ) ;; Same, matching as a PLUS rather than unspec. @@ -4335,6 +4432,7 @@ (match_operand:VNx2DI 1 "register_operand" "w")))] "TARGET_SVE && TARGET_NON_STREAMING" "adr\t%0.d, [%1.d, %2.d, uxtw]" + [(set_attr "sve_type" "sve_int_general")] ) ;; ADR with a nonzero shift. @@ -4357,6 +4455,7 @@ (match_operand:SVE_24I 1 "register_operand" "w")))] "TARGET_SVE && TARGET_NON_STREAMING" "adr\t%0., [%1., %2., lsl %3]" + [(set_attr "sve_type" "sve_int_general")] ) ;; Same, but with the index being sign-extended from the low 32 bits. @@ -4378,6 +4477,7 @@ { operands[4] = CONSTM1_RTX (VNx2BImode); } + [(set_attr "sve_type" "sve_int_general")] ) ;; Same, but with the index being zero-extended from the low 32 bits. @@ -4392,6 +4492,7 @@ (match_operand:VNx2DI 1 "register_operand" "w")))] "TARGET_SVE && TARGET_NON_STREAMING" "adr\t%0.d, [%1.d, %2.d, uxtw %3]" + [(set_attr "sve_type" "sve_int_general")] ) ;; ------------------------------------------------------------------------- @@ -4438,6 +4539,7 @@ [ w , Upl , 0 , w ; * ] abd\t%0., %1/m, %0., %3. [ ?&w , Upl , w , w ; yes ] movprfx\t%0, %2\;abd\t%0., %1/m, %0., %3. } + [(set_attr "sve_type" "sve_int_general")] ) (define_expand "@aarch64_cond_abd" @@ -4494,6 +4596,7 @@ { operands[4] = operands[5] = CONSTM1_RTX (mode); } + [(set_attr "sve_type" "sve_int_general")] ) ;; Predicated integer absolute difference, merging with the second input. @@ -4525,6 +4628,7 @@ { operands[4] = operands[5] = CONSTM1_RTX (mode); } + [(set_attr "sve_type" "sve_int_general")] ) ;; Predicated integer absolute difference, merging with an independent value. @@ -4572,7 +4676,8 @@ else FAIL; } - [(set_attr "movprfx" "yes")] + [(set_attr "movprfx" "yes") + (set_attr "sve_type" "sve_int_general")] ) ;; ------------------------------------------------------------------------- @@ -4598,6 +4703,7 @@ [ ?&w , w , vsS ; yes ] movprfx\t%0, %1\;\t%0., %0., #%N2 [ w , w , w ; * ] \t%0., %1., %2. } + [(set_attr "sve_type" "sve_int_general")] ) ;; Unpredicated saturating unsigned addition and subtraction. @@ -4612,6 +4718,7 @@ [ ?&w , w , vsa ; yes ] movprfx\t%0, %1\;\t%0., %0., #%D2 [ w , w , w ; * ] \t%0., %1., %2. } + [(set_attr "sve_type" "sve_int_general")] ) ;; ------------------------------------------------------------------------- @@ -4653,6 +4760,7 @@ [ w , Upl , 0 , w ; * ] mulh\t%0., %1/m, %0., %3. [ ?&w , Upl , w , w ; yes ] movprfx\t%0, %2\;mulh\t%0., %1/m, %0., %3. } + [(set_attr "sve_type" "sve_int_mul")] ) ;; Predicated highpart multiplications with merging. @@ -4690,6 +4798,7 @@ [ w , Upl , 0 , w ; * ] \t%0., %1/m, %0., %3. [ ?&w , Upl , w , w ; yes ] movprfx\t%0, %2\;\t%0., %1/m, %0., %3. } + [(set_attr "sve_type" "sve_int_mul")] ) ;; Predicated highpart multiplications, merging with zero. @@ -4708,7 +4817,9 @@ [ &w , Upl , 0 , w ] movprfx\t%0., %1/z, %0.\;\t%0., %1/m, %0., %3. [ &w , Upl , w , w ] movprfx\t%0., %1/z, %2.\;\t%0., %1/m, %0., %3. } - [(set_attr "movprfx" "yes")]) + [(set_attr "movprfx" "yes") + (set_attr "sve_type" "sve_int_mul")] +) ;; ------------------------------------------------------------------------- ;; ---- [INT] Division @@ -4753,6 +4864,7 @@ [ w , Upl , w , 0 ; * ] r\t%Z0., %1/m, %Z0., %Z2. [ ?&w , Upl , w , w ; yes ] movprfx\t%Z0, %Z2\;\t%Z0., %1/m, %Z0., %Z3. } + [(set_attr "sve_type" "sve_int_div")] ) ;; Predicated integer division with merging. @@ -4783,6 +4895,7 @@ [ w , Upl , 0 , w ; * ] \t%0., %1/m, %0., %3. [ ?&w , Upl , w , w ; yes ] movprfx\t%0, %2\;\t%0., %1/m, %0., %3. } + [(set_attr "sve_type" "sve_int_div")] ) ;; Predicated integer division, merging with the second input. @@ -4800,6 +4913,7 @@ [ w , Upl , w , 0 ; * ] \t%0., %1/m, %0., %2. [ ?&w , Upl , w , w ; yes ] movprfx\t%0, %3\;\t%0., %1/m, %0., %2. } + [(set_attr "sve_type" "sve_int_div")] ) ;; Predicated integer division, merging with an independent value. @@ -4830,7 +4944,8 @@ operands[4], operands[1])); operands[4] = operands[2] = operands[0]; } - [(set_attr "movprfx" "yes")] + [(set_attr "movprfx" "yes") + (set_attr "sve_type" "sve_int_div")] ) ;; ------------------------------------------------------------------------- @@ -4854,6 +4969,7 @@ [ ?w , w , vsl ; yes ] movprfx\t%0, %1\;\t%0., %0., #%C2 [ w , w , w ; * ] \t%0.d, %1.d, %2.d } + [(set_attr "sve_type" "sve_int_general")] ) ;; Merging forms are handled through SVE_INT_BINARY. @@ -4896,6 +5012,7 @@ { operands[3] = CONSTM1_RTX (mode); } + [(set_attr "sve_type" "sve_int_general")] ) ;; Predicated BIC with merging. @@ -4927,6 +5044,7 @@ [ w , Upl , 0 , w ; * ] bic\t%0., %1/m, %0., %3. [ ?&w , Upl , w , w ; yes ] movprfx\t%0, %2\;bic\t%0., %1/m, %0., %3. } + [(set_attr "sve_type" "sve_int_general")] ) ;; Predicated integer BIC, merging with an independent value. @@ -4955,7 +5073,8 @@ operands[4], operands[1])); operands[4] = operands[2] = operands[0]; } - [(set_attr "movprfx" "yes")] + [(set_attr "movprfx" "yes") + (set_attr "sve_type" "sve_int_general")] ) ;; ------------------------------------------------------------------------- @@ -5058,6 +5177,7 @@ "&& !register_operand (operands[3], mode)" [(set (match_dup 0) (ASHIFT:SVE_I (match_dup 2) (match_dup 3)))] "" + [(set_attr "sve_type" "sve_int_shift")] ) ;; Unpredicated shift operations by a constant. @@ -5069,9 +5189,9 @@ (match_operand:SVE_I 1 "register_operand") (match_operand:SVE_I 2 "aarch64_simd_lshift_imm")))] "TARGET_SVE" - {@ [ cons: =0 , 1 , 2 ] - [ w , w , vs1 ] add\t%0., %1., %1. - [ w , w , Dl ] lsl\t%0., %1., #%2 + {@ [ cons: =0 , 1 , 2 ; attrs: sve_type ] + [ w , w , vs1 ; sve_int_general ] add\t%0., %1., %1. + [ w , w , Dl ; sve_int_shift ] lsl\t%0., %1., #%2 } ) @@ -5082,6 +5202,7 @@ (match_operand:SVE_I 2 "aarch64_simd_rshift_imm")))] "TARGET_SVE" "\t%0., %1., #%2" + [(set_attr "sve_type" "sve_int_shift")] ) ;; Predicated integer shift, merging with the first input. @@ -5099,6 +5220,7 @@ [ w , Upl , 0 ; * ] \t%0., %1/m, %0., #%3 [ ?&w , Upl , w ; yes ] movprfx\t%0, %2\;\t%0., %1/m, %0., #%3 } + [(set_attr "sve_type" "sve_int_shift")] ) ;; Predicated integer shift, merging with an independent value. @@ -5125,7 +5247,8 @@ operands[4], operands[1])); operands[4] = operands[2] = operands[0]; } - [(set_attr "movprfx" "yes")] + [(set_attr "movprfx" "yes") + (set_attr "sve_type" "sve_int_shift")] ) ;; Unpredicated shifts of narrow elements by 64-bit amounts. @@ -5137,6 +5260,7 @@ SVE_SHIFT_WIDE))] "TARGET_SVE" "\t%0., %1., %2.d" + [(set_attr "sve_type" "sve_int_shift")] ) ;; Merging predicated shifts of narrow elements by 64-bit amounts. @@ -5170,6 +5294,7 @@ [ w , Upl , 0 , w ; * ] \t%0., %1/m, %0., %3.d [ ?&w , Upl , w , w ; yes ] movprfx\t%0, %2\;\t%0., %1/m, %0., %3.d } + [(set_attr "sve_type" "sve_int_shift")] ) ;; Predicated shifts of narrow elements by 64-bit amounts, merging with zero. @@ -5188,7 +5313,8 @@ [ &w , Upl , 0 , w ] movprfx\t%0., %1/z, %0.\;\t%0., %1/m, %0., %3.d [ &w , Upl , w , w ] movprfx\t%0., %1/z, %2.\;\t%0., %1/m, %0., %3.d } - [(set_attr "movprfx" "yes")]) + [(set_attr "movprfx" "yes") + (set_attr "sve_type" "sve_int_shift")]) ;; ------------------------------------------------------------------------- ;; ---- [INT] Shifts (rounding towards 0) @@ -5231,6 +5357,7 @@ [ w , Upl , 0 ; * ] asrd\t%Z0., %1/m, %Z0., #%3 [ ?&w , Upl , w ; yes ] movprfx\t%Z0, %Z2\;asrd\t%Z0., %1/m, %Z0., #%3 } + [(set_attr "sve_type" "sve_int_shift")] ) ;; Predicated shift with merging. @@ -5276,6 +5403,7 @@ { operands[4] = CONSTM1_RTX (mode); } + [(set_attr "sve_type" "sve_int_shift")] ) ;; Predicated shift, merging with an independent value. @@ -5306,7 +5434,8 @@ operands[4], operands[1])); operands[4] = operands[2] = operands[0]; } - [(set_attr "movprfx" "yes")] + [(set_attr "movprfx" "yes") + (set_attr "sve_type" "sve_int_shift")] ) ;; ------------------------------------------------------------------------- @@ -5343,6 +5472,7 @@ SVE_FP_BINARY_INT))] "TARGET_SVE" "\t%0., %1., %2." + [(set_attr "sve_type" "sve_fp_mul")] ) ;; Predicated floating-point binary operations that take an integer @@ -5360,6 +5490,7 @@ [ w , Upl , 0 , w ; * ] \t%Z0., %1/m, %Z0., %Z3. [ ?&w , Upl , w , w ; yes ] movprfx\t%Z0, %Z2\;\t%Z0., %1/m, %Z0., %Z3. } + [(set_attr "sve_type" "sve_fp_mul")] ) ;; Predicated floating-point binary operations with merging, taking an @@ -5402,6 +5533,7 @@ { operands[4] = copy_rtx (operands[1]); } + [(set_attr "sve_type" "sve_fp_mul")] ) (define_insn "*cond__2_strict" @@ -5421,6 +5553,7 @@ [ w , Upl , 0 , w ; * ] \t%0., %1/m, %0., %3. [ ?&w , Upl , w , w ; yes ] movprfx\t%0, %2\;\t%0., %1/m, %0., %3. } + [(set_attr "sve_type" "sve_fp_mul")] ) ;; Predicated floating-point binary operations that take an integer as @@ -5460,7 +5593,8 @@ else FAIL; } - [(set_attr "movprfx" "yes")] + [(set_attr "movprfx" "yes") + (set_attr "sve_type" "sve_fp_mul")] ) (define_insn_and_rewrite "*cond__any_strict" @@ -5490,7 +5624,8 @@ operands[4], operands[1])); operands[4] = operands[2] = operands[0]; } - [(set_attr "movprfx" "yes")] + [(set_attr "movprfx" "yes") + (set_attr "sve_type" "sve_fp_mul")] ) ;; ------------------------------------------------------------------------- @@ -5528,7 +5663,9 @@ (match_operand:SVE_F_B16B16 1 "register_operand" "w") (match_operand:SVE_F_B16B16 2 "register_operand" "w")))] "TARGET_SVE && reload_completed" - "\t%0., %1., %2.") + "\t%0., %1., %2." + [(set_attr "sve_type" "sve_")] +) ;; ------------------------------------------------------------------------- ;; ---- [FP] General binary arithmetic corresponding to unspecs @@ -5565,6 +5702,7 @@ SVE_FP_BINARY))] "TARGET_SVE" "\t%0., %1., %2." + [(set_attr "sve_type" "sve_")] ) ;; Unpredicated floating-point binary operations that need to be predicated @@ -5598,6 +5736,7 @@ [ w , Upl , w , 0 ; * ] \t%0., %1/m, %0., %2. [ ?&w , Upl , w , w ; yes ] movprfx\t%0, %2\;\t%0., %1/m, %0., %3. } + [(set_attr "sve_type" "sve_")] ) ;; Predicated floating-point operations with merging. @@ -5641,6 +5780,7 @@ { operands[4] = copy_rtx (operands[1]); } + [(set_attr "sve_type" "sve_")] ) (define_insn "*cond__2_strict" @@ -5660,6 +5800,7 @@ [ w , Upl , 0 , w ; * ] \t%0., %1/m, %0., %3. [ ?&w , Upl , w , w ; yes ] movprfx\t%0, %2\;\t%0., %1/m, %0., %3. } + [(set_attr "sve_type" "sve_")] ) ;; Same for operations that take a 1-bit constant. @@ -5684,6 +5825,7 @@ { operands[4] = copy_rtx (operands[1]); } + [(set_attr "sve_type" "sve_")] ) (define_insn "*cond__2_const_strict" @@ -5703,6 +5845,7 @@ [ w , Upl , 0 ; * ] \t%0., %1/m, %0., #%3 [ ?w , Upl , w ; yes ] movprfx\t%0, %2\;\t%0., %1/m, %0., #%3 } + [(set_attr "sve_type" "sve_")] ) ;; Predicated floating-point operations, merging with the second input. @@ -5727,6 +5870,7 @@ { operands[4] = copy_rtx (operands[1]); } + [(set_attr "sve_type" "sve_")] ) (define_insn "*cond__3_strict" @@ -5746,6 +5890,7 @@ [ w , Upl , w , 0 ; * ] \t%0., %1/m, %0., %2. [ ?&w , Upl , w , w ; yes ] movprfx\t%0, %3\;\t%0., %1/m, %0., %2. } + [(set_attr "sve_type" "sve_")] ) ;; Predicated floating-point operations, merging with an independent value. @@ -5790,7 +5935,8 @@ } [(set_attr "movprfx" "yes") (set_attr "is_bf16" "") - (set_attr "supports_bf16_rev" "")] + (set_attr "supports_bf16_rev" "") + (set_attr "sve_type" "sve_")] ) (define_insn_and_rewrite "*cond__any_strict" @@ -5827,7 +5973,8 @@ } [(set_attr "movprfx" "yes") (set_attr "is_bf16" "") - (set_attr "supports_bf16_rev" "")] + (set_attr "supports_bf16_rev" "") + (set_attr "sve_type" "sve_")] ) ;; Same for operations that take a 1-bit constant. @@ -5864,7 +6011,8 @@ else FAIL; } - [(set_attr "movprfx" "yes")] + [(set_attr "movprfx" "yes") + (set_attr "sve_type" "sve_")] ) (define_insn_and_rewrite "*cond__any_const_strict" @@ -5893,7 +6041,8 @@ operands[4], operands[1])); operands[4] = operands[2] = operands[0]; } - [(set_attr "movprfx" "yes")] + [(set_attr "movprfx" "yes") + (set_attr "sve_type" "sve_")] ) ;; ------------------------------------------------------------------------- @@ -5923,6 +6072,7 @@ [ ?&w , Upl , w , vsN , i ; yes ] movprfx\t%0, %2\;fsub\t%0., %1/m, %0., #%N3 [ ?&w , Upl , w , w , Ui1 ; yes ] movprfx\t%0, %2\;fadd\t%0., %1/m, %0., %3. } + [(set_attr "sve_type" "sve_fp_arith")] ) ;; Predicated floating-point addition of a constant, merging with the @@ -5950,6 +6100,7 @@ { operands[4] = copy_rtx (operands[1]); } + [(set_attr "sve_type" "sve_fp_arith")] ) (define_insn "*cond_add_2_const_strict" @@ -5971,6 +6122,7 @@ [ ?w , Upl , w , vsA ; yes ] movprfx\t%0, %2\;fadd\t%0., %1/m, %0., #%3 [ ?w , Upl , w , vsN ; yes ] movprfx\t%0, %2\;fsub\t%0., %1/m, %0., #%N3 } + [(set_attr "sve_type" "sve_fp_arith")] ) ;; Predicated floating-point addition of a constant, merging with an @@ -6011,7 +6163,8 @@ else FAIL; } - [(set_attr "movprfx" "yes")] + [(set_attr "movprfx" "yes") + (set_attr "sve_type" "sve_fp_arith")] ) (define_insn_and_rewrite "*cond_add_any_const_strict" @@ -6043,7 +6196,8 @@ operands[4], operands[1])); operands[4] = operands[2] = operands[0]; } - [(set_attr "movprfx" "yes")] + [(set_attr "movprfx" "yes") + (set_attr "sve_type" "sve_fp_arith")] ) ;; Register merging forms are handled through SVE_COND_FP_BINARY. @@ -6069,6 +6223,7 @@ [ w , Upl , 0 , w ; * ] fcadd\t%0., %1/m, %0., %3., # [ ?&w , Upl , w , w ; yes ] movprfx\t%0, %2\;fcadd\t%0., %1/m, %0., %3., # } + [(set_attr "sve_type" "sve_fp_misc")] ) ;; Predicated FCADD with merging. @@ -6123,6 +6278,7 @@ { operands[4] = copy_rtx (operands[1]); } + [(set_attr "sve_type" "sve_fp_misc")] ) (define_insn "*cond__2_strict" @@ -6142,6 +6298,7 @@ [ w , Upl , 0 , w ; * ] fcadd\t%0., %1/m, %0., %3., # [ ?&w , Upl , w , w ; yes ] movprfx\t%0, %2\;fcadd\t%0., %1/m, %0., %3., # } + [(set_attr "sve_type" "sve_fp_misc")] ) ;; Predicated FCADD, merging with an independent value. @@ -6179,7 +6336,8 @@ else FAIL; } - [(set_attr "movprfx" "yes")] + [(set_attr "movprfx" "yes") + (set_attr "sve_type" "sve_fp_misc")] ) (define_insn_and_rewrite "*cond__any_strict" @@ -6209,7 +6367,8 @@ operands[4], operands[1])); operands[4] = operands[2] = operands[0]; } - [(set_attr "movprfx" "yes")] + [(set_attr "movprfx" "yes") + (set_attr "sve_type" "sve_fp_misc")] ) ;; ------------------------------------------------------------------------- @@ -6238,6 +6397,7 @@ [ ?&w , Upl , vsA , w , i ; yes ] movprfx\t%0, %3\;fsubr\t%0., %1/m, %0., #%2 [ ?&w , Upl , w , w , Ui1 ; yes ] movprfx\t%0, %2\;fsub\t%0., %1/m, %0., %3. } + [(set_attr "sve_type" "sve_fp_arith")] ) ;; Predicated floating-point subtraction from a constant, merging with the @@ -6263,6 +6423,7 @@ { operands[4] = copy_rtx (operands[1]); } + [(set_attr "sve_type" "sve_fp_arith")] ) (define_insn "*cond_sub_3_const_strict" @@ -6282,6 +6443,7 @@ [ w , Upl , 0 ; * ] fsubr\t%0., %1/m, %0., #%2 [ ?w , Upl , w ; yes ] movprfx\t%0, %3\;fsubr\t%0., %1/m, %0., #%2 } + [(set_attr "sve_type" "sve_fp_arith")] ) ;; Predicated floating-point subtraction from a constant, merging with an @@ -6319,7 +6481,8 @@ else FAIL; } - [(set_attr "movprfx" "yes")] + [(set_attr "movprfx" "yes") + (set_attr "sve_type" "sve_fp_arith")] ) (define_insn_and_rewrite "*cond_sub_const_strict" @@ -6348,7 +6511,8 @@ operands[4], operands[1])); operands[4] = operands[3] = operands[0]; } - [(set_attr "movprfx" "yes")] + [(set_attr "movprfx" "yes") + (set_attr "sve_type" "sve_fp_arith")] ) ;; Register merging forms are handled through SVE_COND_FP_BINARY. @@ -6397,6 +6561,7 @@ { operands[5] = copy_rtx (operands[1]); } + [(set_attr "sve_type" "sve_fp_arith")] ) (define_insn "*aarch64_pred_abd_strict" @@ -6416,6 +6581,7 @@ [ w , Upl , 0 , w ; * ] fabd\t%0., %1/m, %0., %3. [ ?&w , Upl , w , w ; yes ] movprfx\t%0, %2\;fabd\t%0., %1/m, %0., %3. } + [(set_attr "sve_type" "sve_fp_arith")] ) (define_expand "@aarch64_cond_abd" @@ -6469,6 +6635,7 @@ operands[4] = copy_rtx (operands[1]); operands[5] = copy_rtx (operands[1]); } + [(set_attr "sve_type" "sve_fp_arith")] ) (define_insn "*aarch64_cond_abd_2_strict" @@ -6492,6 +6659,7 @@ [ w , Upl , 0 , w ; * ] fabd\t%0., %1/m, %0., %3. [ ?&w , Upl , w , w ; yes ] movprfx\t%0, %2\;fabd\t%0., %1/m, %0., %3. } + [(set_attr "sve_type" "sve_fp_arith")] ) ;; Predicated floating-point absolute difference, merging with the second @@ -6523,6 +6691,7 @@ operands[4] = copy_rtx (operands[1]); operands[5] = copy_rtx (operands[1]); } + [(set_attr "sve_type" "sve_fp_arith")] ) (define_insn "*aarch64_cond_abd_3_strict" @@ -6546,6 +6715,7 @@ [ w , Upl , w , 0 ; * ] fabd\t%0., %1/m, %0., %2. [ ?&w , Upl , w , w ; yes ] movprfx\t%0, %3\;fabd\t%0., %1/m, %0., %2. } + [(set_attr "sve_type" "sve_fp_arith")] ) ;; Predicated floating-point absolute difference, merging with an @@ -6595,7 +6765,8 @@ else FAIL; } - [(set_attr "movprfx" "yes")] + [(set_attr "movprfx" "yes") + (set_attr "sve_type" "sve_fp_arith")] ) (define_insn_and_rewrite "*aarch64_cond_abd_any_strict" @@ -6632,7 +6803,8 @@ operands[4], operands[1])); operands[4] = operands[3] = operands[0]; } - [(set_attr "movprfx" "yes")] + [(set_attr "movprfx" "yes") + (set_attr "sve_type" "sve_fp_arith")] ) ;; ------------------------------------------------------------------------- @@ -6660,6 +6832,7 @@ [ ?&w , Upl , w , vsM , i ; yes ] movprfx\t%0, %2\;fmul\t%0., %1/m, %0., #%3 [ ?&w , Upl , w , w , Ui1 ; yes ] movprfx\t%0, %2\;fmul\t%0., %1/m, %0., %3. } + [(set_attr "sve_type" "sve_fp_mul")] ) ;; Merging forms are handled through SVE_COND_FP_BINARY and @@ -6676,6 +6849,7 @@ (match_operand:SVE_FULL_F_B16B16 1 "register_operand" "w")))] "TARGET_SVE" "fmul\t%0., %1., %2.[%3]" + [(set_attr "sve_type" "sve_fp_mul")] ) ;; ------------------------------------------------------------------------- @@ -6739,6 +6913,7 @@ LOGICALF))] "TARGET_SVE" "\t%0.d, %1.d, %2.d" + [(set_attr "sve_type" "sve_int_general")] ) ;; ------------------------------------------------------------------------- @@ -6893,6 +7068,7 @@ [ ?&w , Upl , w , vsB ; yes ] movprfx\t%0, %2\;\t%0., %1/m, %0., #%3 [ ?&w , Upl , w , w ; yes ] movprfx\t%0, %2\;\t%0., %1/m, %0., %3. } + [(set_attr "sve_type" "sve_fp_arith")] ) ;; Merging forms are handled through SVE_COND_FP_BINARY and @@ -6923,6 +7099,7 @@ [ ?Upa , 0Upa, 0Upa; yes ] ^ [ Upa , Upa , Upa ; no ] ^ } + [(set_attr "sve_type" "sve_pred_logical")] ) ;; Unpredicated predicate EOR and ORR. @@ -6953,6 +7130,7 @@ [ ?Upa , 0Upa, 0Upa, 0Upa; yes ] ^ [ Upa , Upa , Upa , Upa ; no ] ^ } + [(set_attr "sve_type" "sve_pred_logical")] ) ;; Perform a logical operation on operands 2 and 3, using operand 1 as @@ -6979,6 +7157,7 @@ [ ?Upa , 0Upa, 0Upa, 0Upa; yes ] ^ [ Upa , Upa , Upa , Upa ; no ] ^ } + [(set_attr "sve_type" "sve_pred_logical")] ) ;; Same with just the flags result. @@ -7001,6 +7180,7 @@ [ ?Upa , 0Upa, 0Upa, 0Upa; yes ] ^ [ Upa , Upa , Upa , Upa ; no ] ^ } + [(set_attr "sve_type" "sve_pred_logical")] ) ;; ------------------------------------------------------------------------- @@ -7025,6 +7205,7 @@ [ ?Upa , 0Upa, 0Upa, 0Upa; yes ] ^ [ Upa , Upa , Upa , Upa ; no ] ^ } + [(set_attr "sve_type" "sve_pred_logical")] ) ;; Same, but set the flags as a side-effect. @@ -7052,6 +7233,7 @@ [ ?Upa , 0Upa, 0Upa, 0Upa; yes ] ^ [ Upa , Upa , Upa , Upa ; no ] ^ } + [(set_attr "sve_type" "sve_pred_logical")] ) ;; Same with just the flags result. @@ -7075,6 +7257,7 @@ [ ?Upa , 0Upa, 0Upa, 0Upa; yes ] ^ [ Upa , Upa , Upa , Upa ; no ] ^ } + [(set_attr "sve_type" "sve_pred_logical")] ) ;; ------------------------------------------------------------------------- @@ -7099,6 +7282,7 @@ [ ?Upa , 0Upa, 0Upa, 0Upa; yes ] ^ [ Upa , Upa , Upa , Upa ; no ] ^ } + [(set_attr "sve_type" "sve_pred_logical")] ) ;; Same, but set the flags as a side-effect. @@ -7127,6 +7311,7 @@ [ ?Upa , 0Upa, 0Upa, 0Upa; yes ] ^ [ Upa , Upa , Upa , Upa ; no ] ^ } + [(set_attr "sve_type" "sve_pred_logical")] ) ;; Same with just the flags result. @@ -7151,6 +7336,7 @@ [ ?Upa , 0Upa, 0Upa, 0Upa; yes ] ^ [ Upa , Upa , Upa , Upa ; no ] ^ } + [(set_attr "sve_type" "sve_pred_logical")] ) ;; ========================================================================= @@ -7201,6 +7387,7 @@ [ w , Upl , w , w , 0 ; * ] mla\t%0., %1/m, %2., %3. [ ?&w , Upl , w , w , w ; yes ] movprfx\t%0, %4\;mla\t%0., %1/m, %2., %3. } + [(set_attr "sve_type" "sve_int_mul")] ) ;; Predicated integer addition of product with merging. @@ -7243,6 +7430,7 @@ [ w , Upl , 0 , w , w ; * ] mad\t%0., %1/m, %3., %4. [ ?&w , Upl , w , w , w ; yes ] movprfx\t%0, %2\;mad\t%0., %1/m, %3., %4. } + [(set_attr "sve_type" "sve_int_mul")] ) ;; Predicated integer addition of product, merging with the third input. @@ -7262,6 +7450,7 @@ [ w , Upl , w , w , 0 ; * ] mla\t%0., %1/m, %2., %3. [ ?&w , Upl , w , w , w ; yes ] movprfx\t%0, %4\;mla\t%0., %1/m, %2., %3. } + [(set_attr "sve_type" "sve_int_mul")] ) ;; Predicated integer addition of product, merging with an independent value. @@ -7296,7 +7485,8 @@ operands[5], operands[1])); operands[5] = operands[4] = operands[0]; } - [(set_attr "movprfx" "yes")] + [(set_attr "movprfx" "yes") + (set_attr "sve_type" "sve_int_mul")] ) ;; ------------------------------------------------------------------------- @@ -7343,6 +7533,7 @@ [ w , Upl , w , w , 0 ; * ] mls\t%0., %1/m, %2., %3. [ ?&w , Upl , w , w , w ; yes ] movprfx\t%0, %4\;mls\t%0., %1/m, %2., %3. } + [(set_attr "sve_type" "sve_int_mul")] ) ;; Predicated integer subtraction of product with merging. @@ -7385,6 +7576,7 @@ [ w , Upl , 0 , w , w ; * ] msb\t%0., %1/m, %3., %4. [ ?&w , Upl , w , w , w ; yes ] movprfx\t%0, %2\;msb\t%0., %1/m, %3., %4. } + [(set_attr "sve_type" "sve_int_mul")] ) ;; Predicated integer subtraction of product, merging with the third input. @@ -7404,6 +7596,7 @@ [ w , Upl , w , w , 0 ; * ] mls\t%0., %1/m, %2., %3. [ ?&w , Upl , w , w , w ; yes ] movprfx\t%0, %4\;mls\t%0., %1/m, %2., %3. } + [(set_attr "sve_type" "sve_int_mul")] ) ;; Predicated integer subtraction of product, merging with an @@ -7439,7 +7632,8 @@ operands[5], operands[1])); operands[5] = operands[4] = operands[0]; } - [(set_attr "movprfx" "yes")] + [(set_attr "movprfx" "yes") + (set_attr "sve_type" "sve_int_mul")] ) ;; ------------------------------------------------------------------------- @@ -7466,6 +7660,7 @@ [ w , w , w , 0 ; * ] dot\t%0., %1., %2. [ ?&w , w , w , w ; yes ] movprfx\t%0, %3\;dot\t%0., %1., %2. } + [(set_attr "sve_type" "sve_int_dot")] ) ;; Four-element integer dot-product by selected lanes with accumulation. @@ -7489,6 +7684,7 @@ [ w , w , , 0 ; * ] dot\t%0., %1., %2.[%3] [ ?&w , w , , w ; yes ] movprfx\t%0, %4\;dot\t%0., %1., %2.[%3] } + [(set_attr "sve_type" "sve_int_dot")] ) (define_insn "@dot_prod" @@ -7504,6 +7700,7 @@ [ w , w , w , 0 ; * ] dot\t%0.s, %1.b, %2.b [ ?&w , w , w , w ; yes ] movprfx\t%0, %3\;dot\t%0.s, %1.b, %2.b } + [(set_attr "sve_type" "sve_int_dot")] ) (define_insn "@aarch64_dot_prod_lane" @@ -7522,6 +7719,7 @@ [ w , w , y , 0 ; * ] dot\t%0.s, %1.b, %2.b[%3] [ ?&w , w , y , w ; yes ] movprfx\t%0, %4\;dot\t%0.s, %1.b, %2.b[%3] } + [(set_attr "sve_type" "sve_int_dot")] ) ;; ------------------------------------------------------------------------- @@ -7577,6 +7775,7 @@ [ w , 0 , w , w ; * ] mmla\t%0.s, %2.b, %3.b [ ?&w , w , w , w ; yes ] movprfx\t%0, %1\;mmla\t%0.s, %2.b, %3.b } + [(set_attr "sve_type" "sve_int_dot")] ) ;; ------------------------------------------------------------------------- @@ -7626,7 +7825,8 @@ [ ?&w , Upl , w , w , w ; yes , * ] movprfx\t%0, %4\;\t%0., %1/m, %2., %3. } [(set_attr "is_bf16" "") - (set_attr "supports_bf16_rev" "false")] + (set_attr "supports_bf16_rev" "false") + (set_attr "sve_type" "sve_fp_mul")] ) ;; Predicated floating-point ternary operations with merging. @@ -7677,6 +7877,7 @@ { operands[5] = copy_rtx (operands[1]); } + [(set_attr "sve_type" "sve_fp_mul")] ) (define_insn "*cond__2_strict" @@ -7697,6 +7898,7 @@ [ w , Upl , 0 , w , w ; * ] \t%0., %1/m, %3., %4. [ ?&w , Upl , w , w , w ; yes ] movprfx\t%0, %2\;\t%0., %1/m, %3., %4. } + [(set_attr "sve_type" "sve_fp_mul")] ) ;; Predicated floating-point ternary operations, merging with the @@ -7723,6 +7925,7 @@ { operands[5] = copy_rtx (operands[1]); } + [(set_attr "sve_type" "sve_fp_mul")] ) (define_insn "*cond__4_strict" @@ -7743,6 +7946,7 @@ [ w , Upl , w , w , 0 ; * ] \t%0., %1/m, %2., %3. [ ?&w , Upl , w , w , w ; yes ] movprfx\t%0, %4\;\t%0., %1/m, %2., %3. } + [(set_attr "sve_type" "sve_fp_mul")] ) ;; Predicated floating-point ternary operations, merging with an @@ -7790,7 +7994,8 @@ } [(set_attr "movprfx" "yes") (set_attr "is_bf16" "") - (set_attr "supports_bf16_rev" "false")] + (set_attr "supports_bf16_rev" "false") + (set_attr "sve_type" "sve_fp_mul")] ) (define_insn_and_rewrite "*cond__any_strict" @@ -7829,7 +8034,8 @@ } [(set_attr "movprfx" "yes") (set_attr "is_bf16" "") - (set_attr "supports_bf16_rev" "false")] + (set_attr "supports_bf16_rev" "false") + (set_attr "sve_type" "sve_fp_mul")] ) ;; Unpredicated FMLA and FMLS by selected lanes. It doesn't seem worth using @@ -7849,6 +8055,7 @@ [ w , w , , 0 ; * ] \t%0., %1., %2.[%3] [ ?&w , w , , w ; yes ] movprfx\t%0, %4\;\t%0., %1., %2.[%3] } + [(set_attr "sve_type" "sve_fp_mul")] ) ;; ------------------------------------------------------------------------- @@ -7873,6 +8080,7 @@ [ w , Upl , w , w , 0 ; * ] fcmla\t%0., %1/m, %2., %3., # [ ?&w , Upl , w , w , w ; yes ] movprfx\t%0, %4\;fcmla\t%0., %1/m, %2., %3., # } + [(set_attr "sve_type" "sve_fp_mul")] ) ;; unpredicated optab pattern for auto-vectorizer @@ -7971,6 +8179,7 @@ { operands[5] = copy_rtx (operands[1]); } + [(set_attr "sve_type" "sve_fp_mul")] ) (define_insn "*cond__4_strict" @@ -7991,6 +8200,7 @@ [ w , Upl , w , w , 0 ; * ] fcmla\t%0., %1/m, %2., %3., # [ ?&w , Upl , w , w , w ; yes ] movprfx\t%0, %4\;fcmla\t%0., %1/m, %2., %3., # } + [(set_attr "sve_type" "sve_fp_mul")] ) ;; Predicated FCMLA, merging with an independent value. @@ -8029,7 +8239,8 @@ else FAIL; } - [(set_attr "movprfx" "yes")] + [(set_attr "movprfx" "yes") + (set_attr "sve_type" "sve_fp_mul")] ) (define_insn_and_rewrite "*cond__any_strict" @@ -8060,7 +8271,8 @@ operands[5], operands[1])); operands[5] = operands[4] = operands[0]; } - [(set_attr "movprfx" "yes")] + [(set_attr "movprfx" "yes") + (set_attr "sve_type" "sve_fp_mul")] ) ;; Unpredicated FCMLA with indexing. @@ -8079,6 +8291,7 @@ [ w , w , , 0 ; * ] fcmla\t%0., %1., %2.[%3], # [ ?&w , w , , w ; yes ] movprfx\t%0, %4\;fcmla\t%0., %1., %2.[%3], # } + [(set_attr "sve_type" "sve_fp_mul")] ) ;; ------------------------------------------------------------------------- @@ -8100,6 +8313,7 @@ [ w , 0 , w ; * ] ftmad\t%0., %0., %2., #%3 [ ?&w , w , w ; yes ] movprfx\t%0, %1\;ftmad\t%0., %0., %2., #%3 } + [(set_attr "sve_type" "sve_fp_mul")] ) ;; ------------------------------------------------------------------------- @@ -8126,6 +8340,7 @@ [ w , 0 , w , w ; * ] \t%0.s, %2.h, %3.h [ ?&w , w , w , w ; yes ] movprfx\t%0, %1\;\t%0.s, %2.h, %3.h } + [(set_attr "sve_type" "sve_fp_mul")] ) ;; The immediate range is enforced before generating the instruction. @@ -8142,6 +8357,7 @@ [ w , 0 , w , y ; * ] \t%0.s, %2.h, %3.h[%4] [ ?&w , w , w , y ; yes ] movprfx\t%0, %1\;\t%0.s, %2.h, %3.h[%4] } + [(set_attr "sve_type" "sve_fp_mul")] ) ;; ------------------------------------------------------------------------- @@ -8164,6 +8380,7 @@ [ w , 0 , w , w ; * ] \t%0., %2., %3. [ ?&w , w , w , w ; yes ] movprfx\t%0, %1\;\t%0., %2., %3. } + [(set_attr "sve_type" "sve_fp_mul")] ) ;; ========================================================================= @@ -8356,6 +8573,7 @@ [ ?Upl , 0 , w , w ; yes ] ^ [ Upa , Upl, w , w ; no ] ^ } + [(set_attr "sve_type" "sve_int_cmp_set")] ) ;; Likewise, but yield a VNx16BI result regardless of the element width. @@ -8462,6 +8680,7 @@ operands[6] = copy_rtx (operands[4]); operands[7] = operands[5]; } + [(set_attr "sve_type" "sve_int_cmp_set")] ) (define_insn_and_rewrite "*cmp_acle_cc" @@ -8539,6 +8758,7 @@ operands[6] = copy_rtx (operands[4]); operands[7] = operands[5]; } + [(set_attr "sve_type" "sve_int_cmp_set")] ) ;; Predicated integer comparisons, formed by combining a PTRUE-predicated @@ -8570,6 +8790,8 @@ (match_dup 3))] UNSPEC_PRED_Z)) (clobber (reg:CC_NZC CC_REGNUM))])] + {} + [(set_attr "sve_type" "sve_int_cmp_set")] ) (define_insn_and_split "*cmp_acle_and" @@ -8628,6 +8850,7 @@ [ ?Upl , 0 , , w, w; yes ] ^ [ Upa , Upl, , w, w; no ] ^ } + [(set_attr "sve_type" "sve_int_cmp_set")] ) (define_expand "@aarch64_pred_cmp_wide" @@ -8713,6 +8936,7 @@ operands[6] = copy_rtx (operands[4]); operands[7] = operands[5]; } + [(set_attr "sve_type" "sve_int_cmp_set")] ) (define_insn_and_rewrite "*aarch64_pred_cmp_wide_cc" @@ -8755,6 +8979,7 @@ operands[6] = copy_rtx (operands[4]); operands[7] = operands[5]; } + [(set_attr "sve_type" "sve_int_cmp_set")] ) ;; Predicated integer wide comparisons in which only the flags result @@ -8787,6 +9012,7 @@ operands[6] = copy_rtx (operands[4]); operands[7] = operands[5]; } + [(set_attr "sve_type" "sve_int_cmp_set")] ) ;; ------------------------------------------------------------------------- @@ -8822,6 +9048,7 @@ (clobber (reg:CC_NZC CC_REGNUM))] "TARGET_SVE" "while\t%0., %1, %2" + [(set_attr "sve_type" "sve_pred_cnt_ctrl")] ) ;; Likewise, but yield a VNx16BI result regardless of the element width. @@ -8905,6 +9132,7 @@ operands[3] = CONSTM1_RTX (VNx16BImode); operands[4] = CONSTM1_RTX (mode); } + [(set_attr "sve_type" "sve_pred_cnt_ctrl")] ) (define_insn_and_rewrite "*while__acle_cc" @@ -8962,6 +9190,7 @@ operands[3] = CONSTM1_RTX (VNx16BImode); operands[4] = CONSTM1_RTX (mode); } + [(set_attr "sve_type" "sve_pred_cnt_ctrl")] ) ;; ------------------------------------------------------------------------- @@ -9007,6 +9236,7 @@ [ Upa , Upl , w , Dz ] fcm\t%0., %1/z, %3., #0.0 [ Upa , Upl , w , w ] fcm\t%0., %1/z, %3., %4. } + [(set_attr "sve_type" "sve_fp_cmp")] ) (define_expand "@aarch64_pred_fcm_acle" @@ -9057,6 +9287,7 @@ UNSPEC_COND_FCMUO))] "TARGET_SVE" "fcmuo\t%0., %1/z, %3., %4." + [(set_attr "sve_type" "sve_fp_cmp")] ) (define_expand "@aarch64_pred_fcmuo_acle" @@ -9121,6 +9352,8 @@ (match_dup 2) (match_dup 3)] SVE_COND_FP_CMP_I0))] + {} + [(set_attr "sve_type" "sve_fp_cmp")] ) ;; Same for unordered comparisons. @@ -9144,6 +9377,8 @@ (match_dup 2) (match_dup 3)] UNSPEC_COND_FCMUO))] + {} + [(set_attr "sve_type" "sve_fp_cmp")] ) ;; Similar to *fcm_and_combine, but for BIC rather than AND. @@ -9182,6 +9417,7 @@ if (can_create_pseudo_p ()) operands[5] = gen_reg_rtx (mode); } + [(set_attr "sve_type" "sve_fp_cmp")] ) ;; Make sure that we expand to a nor when the operand 4 of @@ -9223,6 +9459,7 @@ if (can_create_pseudo_p ()) operands[5] = gen_reg_rtx (mode); } + [(set_attr "sve_type" "sve_fp_cmp")] ) ;; Same for unordered comparisons. @@ -9259,6 +9496,7 @@ if (can_create_pseudo_p ()) operands[5] = gen_reg_rtx (mode); } + [(set_attr "sve_type" "sve_fp_cmp")] ) (define_insn_and_split "*fcmuo_nor_combine" @@ -9298,6 +9536,7 @@ if (can_create_pseudo_p ()) operands[5] = gen_reg_rtx (mode); } + [(set_attr "sve_type" "sve_fp_cmp")] ) ;; ------------------------------------------------------------------------- @@ -9361,6 +9600,7 @@ operands[5] = copy_rtx (operands[1]); operands[6] = copy_rtx (operands[1]); } + [(set_attr "sve_type" "sve_fp_cmp")] ) (define_insn "*aarch64_pred_fac_strict" @@ -9381,6 +9621,7 @@ SVE_COND_FP_ABS_CMP))] "TARGET_SVE" "fac\t%0., %1/z, %2., %3." + [(set_attr "sve_type" "sve_fp_cmp")] ) (define_insn "*aarch64_pred_fac_strict_acle" @@ -9425,6 +9666,7 @@ (match_operand:PRED_ALL 2 "register_operand" "Upa"))))] "TARGET_SVE" "sel\t%0.b, %3, %1.b, %2.b" + [(set_attr "sve_type" "sve_pred_logical")] ) ;; ------------------------------------------------------------------------- @@ -9473,6 +9715,7 @@ UNSPEC_PTEST))] "TARGET_SVE" "ptest\t%0, %3.b" + [(set_attr "sve_type" "sve_pred_logical")] ) ;; ========================================================================= @@ -9497,10 +9740,11 @@ (match_operand:SVE_ALL 3 "register_operand")] CLAST))] "TARGET_SVE" - {@ [ cons: =0 , 1 , 2 , 3 ] - [ ?r , 0 , Upl , w ] clast\t%0, %2, %0, %3. - [ w , 0 , Upl , w ] clast\t%0, %2, %0, %3. + {@ [ cons: =0 , 1 , 2 , 3 ] + [ ?r , 0 , Upl , w ] clast\t%0, %2, %0, %3. + [ w , 0 , Upl , w ] clast\t%0, %2, %0, %3. } + [(set_attr "sve_type" "sve_int_extract")] ) (define_insn "@aarch64_fold_extract_vector__" @@ -9515,6 +9759,7 @@ [ w , 0 , Upl , w ] clast\t%0., %2, %0., %3. [ ?&w , w , Upl , w ] movprfx\t%0, %1\;clast\t%0., %2, %0., %3. } + [(set_attr "sve_type" "sve_int_extract")] ) ;; ------------------------------------------------------------------------- @@ -9555,6 +9800,7 @@ SVE_INT_ADDV))] "TARGET_SVE && >= " "addv\t%d0, %1, %2." + [(set_attr "sve_type" "sve_int_reduc")] ) ;; Unpredicated integer reductions. @@ -9577,6 +9823,7 @@ SVE_INT_REDUCTION))] "TARGET_SVE" "\t%0, %1, %2." + [(set_attr "sve_type" "sve_int_reduc")] ) ;; ------------------------------------------------------------------------- @@ -9621,6 +9868,7 @@ SVE_FP_REDUCTION))] "TARGET_SVE" "\t%0, %1, %2." + [(set_attr "sve_type" "sve_fp_reduc")] ) ;; ------------------------------------------------------------------------- @@ -9652,6 +9900,7 @@ UNSPEC_FADDA))] "TARGET_SVE && TARGET_NON_STREAMING" "fadda\t%0, %3, %0, %2." + [(set_attr "sve_type" "sve_fp_assoc_add")] ) ;; ========================================================================= @@ -9687,6 +9936,7 @@ SVE_TBL))] "TARGET_SVE" "\t%0., {%1.}, %2." + [(set_attr "sve_type" "sve_int_general")] ) ;; ------------------------------------------------------------------------- @@ -9707,6 +9957,7 @@ UNSPEC_SVE_COMPACT))] "TARGET_SVE && TARGET_NON_STREAMING" "compact\t%0., %1, %2." + [(set_attr "sve_type" "sve_int_extract")] ) ;; Duplicate one element of a vector. @@ -9719,6 +9970,7 @@ "TARGET_SVE && IN_RANGE (INTVAL (operands[2]) * / 8, 0, 63)" "dup\t%0., %1.[%2]" + [(set_attr "sve_type" "sve_int_general")] ) ;; Use DUP.Q to duplicate a 128-bit segment of a register. @@ -9755,6 +10007,7 @@ operands[2] = gen_int_mode (byte / 16, DImode); return "dup\t%0.q, %1.q[%2]"; } + [(set_attr "sve_type" "sve_int_general")] ) ;; Reverse the order of elements within a full vector. @@ -9764,7 +10017,9 @@ [(match_operand:SVE_ALL 1 "register_operand" "w")] UNSPEC_REV))] "TARGET_SVE" - "rev\t%0., %1.") + "rev\t%0., %1." + [(set_attr "sve_type" "sve_int_general")] +) ;; ------------------------------------------------------------------------- ;; ---- [INT,FP] Special-purpose binary permutes @@ -9797,6 +10052,7 @@ [ w , Upl , 0 , w ; * ] splice\t%0., %1, %0., %3. [ ?&w , Upl , w , w ; yes ] movprfx\t%0, %2\;splice\t%0., %1, %0., %3. } + [(set_attr "sve_type" "sve_int_extract")] ) ;; Permutes that take half the elements from one vector and half the @@ -9809,6 +10065,7 @@ SVE_PERMUTE))] "TARGET_SVE" "\t%0., %1., %2." + [(set_attr "sve_type" "sve_int_general")] ) ;; Apply PERMUTE to 128-bit sequences. The behavior of these patterns @@ -9821,6 +10078,7 @@ PERMUTEQ))] "TARGET_SVE_F64MM" "\t%0.q, %1.q, %2.q" + [(set_attr "sve_type" "sve_int_general")] ) ;; Concatenate two vectors and extract a subvector. Note that the @@ -9840,7 +10098,8 @@ ? "ext\\t%0.b, %0.b, %2.b, #%3" : "movprfx\t%0, %1\;ext\\t%0.b, %0.b, %2.b, #%3"); } - [(set_attr "movprfx" "*,yes")] + [(set_attr "movprfx" "*,yes") + (set_attr "sve_type" "sve_int_general")] ) ;; ------------------------------------------------------------------------- @@ -9856,6 +10115,7 @@ UNSPEC_REV))] "TARGET_SVE" "rev\t%0., %1." + [(set_attr "sve_type" "sve_pred_misc")] ) (define_expand "@aarch64_sve_rev_acle" @@ -9878,6 +10138,7 @@ UNSPEC_REV_PRED))] "TARGET_SVE" "rev\t%0., %1." + [(set_attr "sve_type" "sve_pred_misc")] ) ;; ------------------------------------------------------------------------- @@ -9901,6 +10162,7 @@ PERMUTE))] "TARGET_SVE" "\t%0., %1., %2." + [(set_attr "sve_type" "sve_pred_misc")] ) ;; Special-purpose permutes used by the ACLE intrinsics and predicate @@ -9936,6 +10198,7 @@ UNSPEC_PERMUTE_PRED))] "TARGET_SVE" "\t%0., %1., %2." + [(set_attr "sve_type" "sve_pred_misc")] ) ;; ========================================================================= @@ -9959,6 +10222,7 @@ UNSPEC_PACK))] "TARGET_SVE" "uzp1\t%0., %1., %2." + [(set_attr "sve_type" "sve_int_general")] ) ;; Integer partial pack packing two partial SVE types into a single full SVE @@ -9972,6 +10236,7 @@ (match_operand: 2 "register_operand" "w")))] "TARGET_SVE" "uzp1\t%0., %1., %2." + [(set_attr "sve_type" "sve_int_general")] ) ;; ------------------------------------------------------------------------- @@ -10008,6 +10273,7 @@ UNPACK))] "TARGET_SVE" "unpk\t%0., %1." + [(set_attr "sve_type" "sve_int_general")] ) ;; ------------------------------------------------------------------------- @@ -10065,6 +10331,7 @@ [ w , Upl , 0 ; * ] fcvtz\t%0., %1/m, %2. [ ?&w , Upl , w ; yes ] movprfx\t%0, %2\;fcvtz\t%0., %1/m, %2. } + [(set_attr "sve_type" "sve_fp_cvt")] ) ;; As above, for pairs used by the auto-vectorizer only. @@ -10081,6 +10348,7 @@ [ w , Upl , 0 ; * ] fcvtz\t%0., %1/m, %2. [ ?&w , Upl , w ; yes ] movprfx\t%0, %2\;fcvtz\t%0., %1/m, %2. } + [(set_attr "sve_type" "sve_fp_cvt")] ) ;; Predicated narrowing float-to-integer conversion. The VNx2DF->VNx4SI @@ -10099,6 +10367,7 @@ [ w , Upl , 0 ; * ] fcvtz\t%0., %1/m, %2. [ ?&w , Upl , w ; yes ] movprfx\t%0, %2\;fcvtz\t%0., %1/m, %2. } + [(set_attr "sve_type" "sve_fp_cvt")] ) ;; Predicated float-to-integer conversion with merging, either to the same @@ -10143,6 +10412,7 @@ { operands[4] = copy_rtx (operands[1]); } + [(set_attr "sve_type" "sve_fp_cvt")] ) ;; As above, for pairs that are used by the auto-vectorizer only. @@ -10187,6 +10457,7 @@ [ &w , Upl , w , Dz ; yes ] movprfx\t%0., %1/z, %2.\;fcvtz\t%0., %1/m, %2. [ ?&w , Upl , w , w ; yes ] movprfx\t%0, %3\;fcvtz\t%0., %1/m, %2. } + [(set_attr "sve_type" "sve_fp_cvt")] ) ;; Predicated narrowing float-to-integer conversion with merging. @@ -10221,6 +10492,7 @@ [ &w , Upl , w , Dz ; yes ] movprfx\t%0., %1/z, %2.\;fcvtz\t%0., %1/m, %2. [ ?&w , Upl , w , w ; yes ] movprfx\t%0, %3\;fcvtz\t%0., %1/m, %2. } + [(set_attr "sve_type" "sve_fp_cvt")] ) (define_insn_and_rewrite "*cond__trunc_relaxed" @@ -10320,6 +10592,7 @@ [ w , Upl , 0 ; * ] cvtf\t%0., %1/m, %2. [ ?&w , Upl , w ; yes ] movprfx\t%0, %2\;cvtf\t%0., %1/m, %2. } + [(set_attr "sve_type" "sve_int_cvt")] ) ;; As above, for pairs that are used by the auto-vectorizer only. @@ -10336,6 +10609,7 @@ [ w , Upl , 0 ; * ] cvtf\t%0., %1/m, %2. [ ?&w , Upl , w ; yes ] movprfx\t%0, %2\;cvtf\t%0., %1/m, %2. } + [(set_attr "sve_type" "sve_int_cvt")] ) ;; Predicated widening integer-to-float conversion. @@ -10351,6 +10625,7 @@ [ w , Upl , 0 ; * ] cvtf\t%0., %1/m, %2. [ ?&w , Upl , w ; yes ] movprfx\t%0, %2\;cvtf\t%0., %1/m, %2. } + [(set_attr "sve_type" "sve_int_cvt")] ) ;; Predicated integer-to-float conversion with merging, either to the same @@ -10395,6 +10670,7 @@ { operands[4] = copy_rtx (operands[1]); } + [(set_attr "sve_type" "sve_int_cvt")] ) ;; As above, for pairs that are used by the auto-vectorizer only. @@ -10439,6 +10715,7 @@ [ &w , Upl , w , Dz ; yes ] movprfx\t%0., %1/z, %2.\;cvtf\t%0., %1/m, %2. [ ?&w , Upl , w , w ; yes ] movprfx\t%0, %3\;cvtf\t%0., %1/m, %2. } + [(set_attr "sve_type" "sve_int_cvt")] ) ;; Predicated widening integer-to-float conversion with merging. @@ -10473,6 +10750,7 @@ [ ?&w , Upl , w , Dz ; yes ] movprfx\t%0., %1/z, %2.\;cvtf\t%0., %1/m, %2. [ ?&w , Upl , w , w ; yes ] movprfx\t%0, %3\;cvtf\t%0., %1/m, %2. } + [(set_attr "sve_type" "sve_int_cvt")] ) ;; ------------------------------------------------------------------------- @@ -10580,6 +10858,7 @@ [ w , Upl , 0 ; * ] fcvt\t%0., %1/m, %2. [ ?&w , Upl , w ; yes ] movprfx\t%0, %2\;fcvt\t%0., %1/m, %2. } + [(set_attr "sve_type" "sve_fp_cvt")] ) ;; As above, for pairs that are used by the auto-vectorizer only. @@ -10595,6 +10874,7 @@ [ w , Upl , 0 ; * ] fcvt\t%0., %1/m, %2. [ ?&w , Upl , w ; yes ] movprfx\t%0, %2\;fcvt\t%0., %1/m, %2. } + [(set_attr "sve_type" "sve_fp_cvt")] ) ;; Predicated float-to-float truncation with merging. @@ -10629,6 +10909,7 @@ [ ?&w , Upl , w , Dz ; yes ] movprfx\t%0., %1/z, %2.\;fcvt\t%0., %1/m, %2. [ ?&w , Upl , w , w ; yes ] movprfx\t%0, %3\;fcvt\t%0., %1/m, %2. } + [(set_attr "sve_type" "sve_fp_cvt")] ) ;; As above, for pairs that are used by the auto-vectorizer only. @@ -10676,6 +10957,7 @@ [ w , Upl , 0 ; * ] bfcvt\t%0.h, %1/m, %2.s [ ?&w , Upl , w ; yes ] movprfx\t%0, %2\;bfcvt\t%0.h, %1/m, %2.s } + [(set_attr "sve_type" "sve_fp_cvt")] ) ;; Predicated BFCVT with merging. @@ -10710,6 +10992,7 @@ [ ?&w , Upl , w , Dz ; yes ] movprfx\t%0.s, %1/z, %2.s\;bfcvt\t%0.h, %1/m, %2.s [ ?&w , Upl , w , w ; yes ] movprfx\t%0, %3\;bfcvt\t%0.h, %1/m, %2.s } + [(set_attr "sve_type" "sve_fp_cvt")] ) ;; Predicated BFCVTNT. This doesn't give a natural aarch64_pred_*/cond_* @@ -10727,6 +11010,7 @@ UNSPEC_COND_FCVTNT))] "TARGET_SVE_BF16" "bfcvtnt\t%0.h, %2/m, %3.s" + [(set_attr "sve_type" "sve_fp_cvt")] ) ;; ------------------------------------------------------------------------- @@ -10797,6 +11081,7 @@ [ w , Upl , 0 ; * ] fcvt\t%0., %1/m, %2. [ ?&w , Upl , w ; yes ] movprfx\t%0, %2\;fcvt\t%0., %1/m, %2. } + [(set_attr "sve_type" "sve_fp_cvt")] ) ;; As above, for pairs that are used by the auto-vectorizer only. @@ -10812,6 +11097,7 @@ [ w , Upl , 0 ; * ] fcvt\t%0., %1/m, %2. [ ?&w , Upl , w ; yes ] movprfx\t%0, %2\;fcvt\t%0., %1/m, %2. } + [(set_attr "sve_type" "sve_fp_cvt")] ) ;; Predicated float-to-float extension with merging. @@ -10846,6 +11132,7 @@ [ ?&w , Upl , w , Dz ; yes ] movprfx\t%0., %1/z, %2.\;fcvt\t%0., %1/m, %2. [ ?&w , Upl , w , w ; yes ] movprfx\t%0, %3\;fcvt\t%0., %1/m, %2. } + [(set_attr "sve_type" "sve_fp_cvt")] ) ;; As above, for pairs that are used by the auto-vectorizer only. @@ -10889,6 +11176,7 @@ UNSPEC_PACK))] "TARGET_SVE" "uzp1\t%0., %1., %2." + [(set_attr "sve_type" "sve_pred_misc")] ) ;; ------------------------------------------------------------------------- @@ -10922,6 +11210,7 @@ UNPACK_UNSIGNED))] "TARGET_SVE" "punpk\t%0.h, %1.b" + [(set_attr "sve_type" "sve_pred_misc")] ) (define_expand "@aarch64_sve_punpk_acle" @@ -10985,6 +11274,7 @@ [ ?Upa , 0Upa, 0Upa, 0 ; yes ] ^ [ Upa , Upa , Upa , 0 ; no ] ^ } + [(set_attr "sve_type" "sve_pred_cnt_ctrl")] ) ;; Same, but also producing a flags result. @@ -11012,6 +11302,7 @@ [ ?Upa , 0Upa, 0Upa; yes ] ^ [ Upa , Upa , Upa ; no ] ^ } + [(set_attr "sve_type" "sve_pred_cnt_ctrl")] ) ;; Same, but with only the flags result being interesting. @@ -11034,6 +11325,7 @@ [ ?Upa , 0Upa, 0Upa; yes ] ^ [ Upa , Upa , Upa ; no ] ^ } + [(set_attr "sve_type" "sve_pred_cnt_ctrl")] ) ;; ------------------------------------------------------------------------- @@ -11062,6 +11354,7 @@ [ ?Upa , 0Upa, 0Upa, 0; yes ] ^ [ Upa , Upa , Upa , ; no ] ^ } + [(set_attr "sve_type" "sve_pred_cnt_ctrl")] ) ;; BRKN, producing both a predicate and a flags result. Unlike other @@ -11092,6 +11385,7 @@ operands[4] = CONST0_RTX (VNx16BImode); operands[5] = CONST0_RTX (VNx16BImode); } + [(set_attr "sve_type" "sve_pred_cnt_ctrl")] ) ;; Same, but with only the flags result being interesting. @@ -11116,6 +11410,7 @@ operands[4] = CONST0_RTX (VNx16BImode); operands[5] = CONST0_RTX (VNx16BImode); } + [(set_attr "sve_type" "sve_pred_cnt_ctrl")] ) ;; BRKPA and BRKPB, producing both a predicate and a flags result. @@ -11143,6 +11438,7 @@ [ ?Upa , 0Upa, 0Upa, 0Upa, ; yes ] ^ [ Upa , Upa , Upa , Upa , ; no ] ^ } + [(set_attr "sve_type" "sve_pred_cnt_ctrl")] ) ;; Same, but with only the flags result being interesting. @@ -11165,6 +11461,7 @@ [ ?Upa , 0Upa, 0Upa, 0Upa; yes ] ^ [ Upa , Upa , Upa , Upa ; no ] ^ } + [(set_attr "sve_type" "sve_pred_cnt_ctrl")] ) ;; ------------------------------------------------------------------------- @@ -11220,6 +11517,7 @@ (clobber (reg:CC_NZC CC_REGNUM))] "TARGET_SVE" "\t%0., %1, %0." + [(set_attr "sve_type" "sve_pred_cnt_ctrl")] ) ;; Same, but also producing a flags result. @@ -11250,6 +11548,7 @@ operands[4] = operands[2]; operands[5] = operands[3]; } + [(set_attr "sve_type" "sve_pred_cnt_ctrl")] ) (define_insn_and_rewrite "*aarch64_sve__cc" @@ -11307,6 +11606,7 @@ operands[4] = operands[2]; operands[5] = operands[3]; } + [(set_attr "sve_type" "sve_pred_cnt_ctrl")] ) ;; ========================================================================= @@ -11339,6 +11639,7 @@ { return aarch64_output_sve_cnt_pat_immediate ("cnt", "%x0", operands + 1); } + [(set_attr "sve_type" "sve_pred_cnt_scalar")] ) ;; ------------------------------------------------------------------------- @@ -11365,6 +11666,7 @@ return aarch64_output_sve_cnt_pat_immediate ("", "%x0", operands + 2); } + [(set_attr "sve_type" "sve_pred_cnt_scalar")] ) ;; Increment an SImode register by the number of elements in an svpattern @@ -11381,6 +11683,7 @@ { return aarch64_output_sve_cnt_pat_immediate ("inc", "%x0", operands + 2); } + [(set_attr "sve_type" "sve_pred_cnt_scalar")] ) ;; Increment an SImode register by the number of elements in an svpattern @@ -11402,6 +11705,7 @@ return aarch64_output_sve_cnt_pat_immediate ("", registers, operands + 2); } + [(set_attr "sve_type" "sve_pred_cnt_scalar")] ) ;; ------------------------------------------------------------------------- @@ -11432,7 +11736,8 @@ return aarch64_output_sve_cnt_pat_immediate ("", "%0.", operands + 2); } - [(set_attr "movprfx" "*,yes")] + [(set_attr "movprfx" "*,yes") + (set_attr "sve_type" "sve_pred_vec")] ) ;; Increment a vector of SIs by the number of elements in an svpattern. @@ -11453,7 +11758,8 @@ return aarch64_output_sve_cnt_pat_immediate ("", "%0.", operands + 2); } - [(set_attr "movprfx" "*,yes")] + [(set_attr "movprfx" "*,yes") + (set_attr "sve_type" "sve_pred_vec")] ) ;; Increment a vector of HIs by the number of elements in an svpattern. @@ -11488,7 +11794,8 @@ return aarch64_output_sve_cnt_pat_immediate ("", "%0.", operands + 2); } - [(set_attr "movprfx" "*,yes")] + [(set_attr "movprfx" "*,yes") + (set_attr "sve_type" "sve_pred_vec")] ) ;; ------------------------------------------------------------------------- @@ -11515,6 +11822,7 @@ return aarch64_output_sve_cnt_pat_immediate ("", "%x0", operands + 2); } + [(set_attr "sve_type" "sve_pred_cnt_scalar")] ) ;; Decrement an SImode register by the number of elements in an svpattern @@ -11531,6 +11839,7 @@ { return aarch64_output_sve_cnt_pat_immediate ("dec", "%x0", operands + 2); } + [(set_attr "sve_type" "sve_pred_cnt_scalar")] ) ;; Decrement an SImode register by the number of elements in an svpattern @@ -11552,6 +11861,7 @@ return aarch64_output_sve_cnt_pat_immediate ("", registers, operands + 2); } + [(set_attr "sve_type" "sve_pred_cnt_scalar")] ) ;; ------------------------------------------------------------------------- @@ -11582,7 +11892,8 @@ return aarch64_output_sve_cnt_pat_immediate ("", "%0.", operands + 2); } - [(set_attr "movprfx" "*,yes")] + [(set_attr "movprfx" "*,yes") + (set_attr "sve_type" "sve_pred_vec")] ) ;; Decrement a vector of SIs by the number of elements in an svpattern. @@ -11603,7 +11914,8 @@ return aarch64_output_sve_cnt_pat_immediate ("", "%0.", operands + 2); } - [(set_attr "movprfx" "*,yes")] + [(set_attr "movprfx" "*,yes") + (set_attr "sve_type" "sve_pred_vec")] ) ;; Decrement a vector of HIs by the number of elements in an svpattern. @@ -11638,7 +11950,8 @@ return aarch64_output_sve_cnt_pat_immediate ("", "%0.", operands + 2); } - [(set_attr "movprfx" "*,yes")] + [(set_attr "movprfx" "*,yes") + (set_attr "sve_type" "sve_pred_vec")] ) ;; ------------------------------------------------------------------------- @@ -11658,7 +11971,9 @@ (match_operand:PRED_ALL 3 "register_operand" "Upa")] UNSPEC_CNTP)))] "TARGET_SVE" - "cntp\t%x0, %1, %3.") + "cntp\t%x0, %1, %3." + [(set_attr "sve_type" "sve_pred_cnt_scalar")] +) ;; ------------------------------------------------------------------------- ;; ---- [INT] Increment by the number of elements in a predicate (scalar) @@ -11701,6 +12016,7 @@ { operands[3] = CONSTM1_RTX (mode); } + [(set_attr "sve_type" "sve_pred_cnt_scalar")] ) ;; Increment an SImode register by the number of set bits in a predicate @@ -11720,6 +12036,7 @@ { operands[3] = CONSTM1_RTX (mode); } + [(set_attr "sve_type" "sve_pred_cnt_scalar")] ) ;; Increment an SImode register by the number of set bits in a predicate @@ -11761,6 +12078,7 @@ { operands[3] = CONSTM1_RTX (mode); } + [(set_attr "sve_type" "sve_pred_cnt_scalar")] ) ;; ------------------------------------------------------------------------- @@ -11811,6 +12129,7 @@ { operands[3] = CONSTM1_RTX (mode); } + [(set_attr "sve_type" "sve_pred_vec")] ) ;; Increment a vector of SIs by the number of set bits in a predicate. @@ -11850,6 +12169,7 @@ { operands[3] = CONSTM1_RTX (mode); } + [(set_attr "sve_type" "sve_pred_vec")] ) ;; Increment a vector of HIs by the number of set bits in a predicate. @@ -11891,6 +12211,7 @@ { operands[4] = CONSTM1_RTX (mode); } + [(set_attr "sve_type" "sve_pred_vec")] ) ;; ------------------------------------------------------------------------- @@ -11934,6 +12255,7 @@ { operands[3] = CONSTM1_RTX (mode); } + [(set_attr "sve_type" "sve_pred_cnt_scalar")] ) ;; Decrement an SImode register by the number of set bits in a predicate @@ -11953,6 +12275,7 @@ { operands[3] = CONSTM1_RTX (mode); } + [(set_attr "sve_type" "sve_pred_cnt_scalar")] ) ;; Decrement an SImode register by the number of set bits in a predicate @@ -11994,6 +12317,7 @@ { operands[3] = CONSTM1_RTX (mode); } + [(set_attr "sve_type" "sve_pred_cnt_scalar")] ) ;; ------------------------------------------------------------------------- @@ -12044,6 +12368,7 @@ { operands[3] = CONSTM1_RTX (mode); } + [(set_attr "sve_type" "sve_pred_vec")] ) ;; Decrement a vector of SIs by the number of set bits in a predicate. @@ -12083,6 +12408,7 @@ { operands[3] = CONSTM1_RTX (mode); } + [(set_attr "sve_type" "sve_pred_vec")] ) ;; Decrement a vector of HIs by the number of set bits in a predicate. @@ -12124,6 +12450,7 @@ { operands[4] = CONSTM1_RTX (mode); } + [(set_attr "sve_type" "sve_pred_vec")] ) (define_insn_and_split "@aarch64_sve_get_neonq_" @@ -12153,4 +12480,5 @@ "TARGET_SVE && BYTES_BIG_ENDIAN" "sel\t%0., %3, %Z2., %1." + [(set_attr "sve_type" "sve_int_general")] ) diff --git a/gcc/config/aarch64/aarch64-sve2.md b/gcc/config/aarch64/aarch64-sve2.md index a3cbbce8b311..69a376706fac 100644 --- a/gcc/config/aarch64/aarch64-sve2.md +++ b/gcc/config/aarch64/aarch64-sve2.md @@ -153,6 +153,7 @@ UNSPEC_PMOV_UNPACK))] "TARGET_SVE2p1 && TARGET_NON_STREAMING" "pmov\t%0, %1." + [(set_attr "sve_type" "sve_pred_vec")] ) (define_insn "@aarch64_pmov_lane_to_" @@ -164,6 +165,7 @@ UNSPEC_PMOV_UNPACK_LANE))] "TARGET_SVE2p1 && TARGET_NON_STREAMING" "pmov\t%0[%3], %2." + [(set_attr "sve_type" "sve_pred_vec")] ) ;; ------------------------------------------------------------------------- @@ -180,6 +182,7 @@ UNSPEC_PMOV_PACK))] "TARGET_SVE2p1 && TARGET_NON_STREAMING" "pmov\t%0., %1" + [(set_attr "sve_type" "sve_pred_vec")] ) (define_insn "@aarch64_pmov_lane_from_" @@ -190,6 +193,7 @@ UNSPEC_PMOV_PACK_LANE))] "TARGET_SVE2p1 && TARGET_NON_STREAMING" "pmov\t%0., %1[%2]" + [(set_attr "sve_type" "sve_pred_vec")] ) ;; ========================================================================= @@ -228,6 +232,7 @@ UNSPEC_LD1_EXTENDQ))] "TARGET_SVE2p1 && TARGET_NON_STREAMING" "ld1\t{%0.q}, %2/z, %1" + [(set_attr "sve_type" "sve_load_1reg")] ) ;; ------------------------------------------------------------------------- @@ -248,6 +253,7 @@ UNSPEC_LDNQ))] "TARGET_SVE2p1 && TARGET_NON_STREAMING" "ldq\t{%S0.q - %0.q}, %2/z, %1" + [(set_attr "sve_type" "sve_load_reg")] ) ;; ------------------------------------------------------------------------- @@ -274,7 +280,8 @@ LD1_COUNT))] "TARGET_SVE2p1_OR_SME2" "\t%0, %K2/z, %1" - [(set_attr "stride_type" "ld1_consecutive")] + [(set_attr "stride_type" "ld1_consecutive") + (set_attr "sve_type" "sve_load_reg")] ) (define_insn "@aarch64__strided2" @@ -293,7 +300,8 @@ "TARGET_STREAMING_SME2 && aarch64_strided_registers_p (operands, 2, 8)" "\t{%0., %1.}, %K3/z, %2" - [(set_attr "stride_type" "ld1_strided")] + [(set_attr "stride_type" "ld1_strided") + (set_attr "sve_type" "sve_load_2reg")] ) (define_insn "@aarch64__strided4" @@ -324,7 +332,8 @@ "TARGET_STREAMING_SME2 && aarch64_strided_registers_p (operands, 4, 4)" "\t{%0., %1., %2., %3.}, %K5/z, %4" - [(set_attr "stride_type" "ld1_strided")] + [(set_attr "stride_type" "ld1_strided") + (set_attr "sve_type" "sve_load_4reg")] ) ;; ------------------------------------------------------------------------- @@ -361,6 +370,7 @@ [&w, Upl, r, w] ld1q\t{%0.q}, %1/z, [%3.d, %2] [?w, Upl, r, 0] ^ } + [(set_attr "sve_type" "sve_gatherload_64")] ) ;; ------------------------------------------------------------------------- @@ -389,6 +399,7 @@ [&w, Upl, r, w ] ldnt1\t%0., %1/z, [%3., %2] [?w, Upl, r, 0 ] ^ } + [(set_attr "sve_type" "sve_gatherload_64")] ) ;; Extending loads. @@ -417,6 +428,7 @@ { operands[4] = CONSTM1_RTX (mode); } + [(set_attr "sve_type" "sve_gatherload_64")] ) ;; ========================================================================= @@ -442,6 +454,7 @@ UNSPEC_ST1_TRUNCQ))] "TARGET_SVE2p1 && TARGET_NON_STREAMING" "st1\t{%1.q}, %2, %0" + [(set_attr "sve_type" "sve_store_1reg")] ) ;; ------------------------------------------------------------------------- @@ -463,6 +476,7 @@ UNSPEC_STNQ))] "TARGET_SVE2p1 && TARGET_NON_STREAMING" "stq\t{%S1.q - %1.q}, %2, %0" + [(set_attr "sve_type" "sve_store_reg")] ) ;; ------------------------------------------------------------------------- @@ -488,7 +502,8 @@ ST1_COUNT))] "TARGET_SVE2p1_OR_SME2" "\t%1, %K2, %0" - [(set_attr "stride_type" "st1_consecutive")] + [(set_attr "stride_type" "st1_consecutive") + (set_attr "sve_type" "sve_store_1reg")] ) (define_insn "@aarch64__strided2" @@ -502,7 +517,8 @@ "TARGET_STREAMING_SME2 && aarch64_strided_registers_p (operands + 2, 2, 8)" "\t{%2., %3.}, %K1, %0" - [(set_attr "stride_type" "st1_strided")] + [(set_attr "stride_type" "st1_strided") + (set_attr "sve_type" "sve_store_1reg")] ) (define_insn "@aarch64__strided4" @@ -518,7 +534,8 @@ "TARGET_STREAMING_SME2 && aarch64_strided_registers_p (operands + 2, 4, 4)" "\t{%2., %3., %4., %5.}, %K1, %0" - [(set_attr "stride_type" "st1_strided")] + [(set_attr "stride_type" "st1_strided") + (set_attr "sve_type" "sve_store_1reg")] ) ;; ------------------------------------------------------------------------- @@ -541,6 +558,7 @@ [ Upl , Z , w , w ] st1q\t{%3.q}, %0, [%2.d] [ Upl , r , w , w ] st1q\t{%3.q}, %0, [%2.d, %1] } + [(set_attr "sve_type" "sve_scatterstore_64")] ) ;; ------------------------------------------------------------------------- @@ -568,6 +586,7 @@ [ Upl , Z , w , w ] stnt1\t%3., %0, [%2.] [ Upl , r , w , w ] stnt1\t%3., %0, [%2., %1] } + [(set_attr "sve_type" "sve_scatterstore_64")] ) ;; Truncating stores. @@ -587,6 +606,7 @@ [ Upl , Z , w , w ] stnt1\t%3., %0, [%2.] [ Upl , r , w , w ] stnt1\t%3., %0, [%2., %1] } + [(set_attr "sve_type" "sve_scatterstore_64")] ) ;; ========================================================================= @@ -604,6 +624,7 @@ (unspec:VNx16BI [(const_int BHSD_BITS)] UNSPEC_PTRUE_C))] "TARGET_SVE2p1_OR_SME2" "ptrue\t%K0." + [(set_attr "sve_type" "sve_pred_misc")] ) ;; ------------------------------------------------------------------------- @@ -622,6 +643,7 @@ UNSPEC_PEXT))] "TARGET_SVE2p1_OR_SME2" "pext\t%0., %K1[%2]" + [(set_attr "sve_type" "sve_pred_misc")] ) (define_insn "@aarch64_sve_pextx2" @@ -633,6 +655,7 @@ UNSPEC_PEXTx2))] "TARGET_SVE2p1_OR_SME2" "pext\t{%S0., %T0.}, %K1[%2]" + [(set_attr "sve_type" "sve_pred_misc")] ) ;; ------------------------------------------------------------------------- @@ -652,6 +675,7 @@ UNSPEC_PSEL))] "TARGET_SVE2p1_OR_SME" "psel\t%0, %1, %2.[%w3, 0]" + [(set_attr "sve_type" "sve_pred_misc")] ) (define_insn "*aarch64_sve_psel_plus" @@ -667,6 +691,7 @@ "TARGET_SVE2p1_OR_SME && UINTVAL (operands[4]) < 128 / " "psel\t%0, %1, %2.[%w3, %4]" + [(set_attr "sve_type" "sve_pred_misc")] ) ;; ------------------------------------------------------------------------- @@ -685,6 +710,7 @@ UNSPEC_CNTP_C))] "TARGET_SVE2p1_OR_SME2" "cntp\t%x0, %K1., vlx%2" + [(set_attr "sve_type" "sve_pred_cnt_scalar")] ) ;; ========================================================================= @@ -708,6 +734,7 @@ SVE2_SFx24_UNARY))] "TARGET_STREAMING_SME2" "frint\t%0, %1" + [(set_attr "sve_type" "sve_fp_cvt")] ) ;; ========================================================================= @@ -743,6 +770,7 @@ (match_operand:SVE_Ix24 2 "aligned_register_operand" "Uw")))] "TARGET_STREAMING_SME2" "\t%0, %0, %2" + [(set_attr "sve_type" "sve_")] ) (define_insn "@aarch64_sve_single_" @@ -753,6 +781,7 @@ (match_operand: 2 "register_operand" "x"))))] "TARGET_STREAMING_SME2" "\t%0, %0, %2." + [(set_attr "sve_type" "sve_")] ) (define_insn "@aarch64_sve_" @@ -763,6 +792,7 @@ SVE_INT_BINARY_MULTI))] "TARGET_STREAMING_SME2" "\t%0, %0, %2" + [(set_attr "sve_type" "sve_")] ) (define_insn "@aarch64_sve_single_" @@ -774,6 +804,7 @@ SVE_INT_BINARY_MULTI))] "TARGET_STREAMING_SME2" "\t%0, %0, %2." + [(set_attr "sve_type" "sve_")] ) ;; ------------------------------------------------------------------------- @@ -797,6 +828,7 @@ [ w, 0, w, w; * ] clamp\t%0., %2., %3. [ ?&w, w, w, w; yes ] movprfx\t%0, %1\;clamp\t%0., %2., %3. } + [(set_attr "sve_type" "sve_int_general")] ) (define_insn_and_split "*aarch64_sve_clamp_x" @@ -837,6 +869,7 @@ (match_operand: 3 "register_operand" "w"))))] "TARGET_STREAMING_SME2" "clamp\t%0, %2., %3." + [(set_attr "sve_type" "sve_int_general")] ) ;; ------------------------------------------------------------------------- @@ -856,6 +889,7 @@ (match_operand:SVE_FULL_HSDI_SIMD_DI 1 "register_operand" "w")))] "TARGET_SVE2" "mul\t%Z0., %Z1., %Z2.[%3]" + [(set_attr "sve_type" "sve_int_mul")] ) ;; The 2nd and 3rd alternatives are valid for just TARGET_SVE as well but @@ -871,6 +905,7 @@ [ w , 0 , vsm ; * ] mul\t%Z0., %Z0., #%2 [ ?&w , w , vsm ; yes ] movprfx\t%Z0, %Z1\;mul\t%Z0., %Z0., #%2 } + [(set_attr "sve_type" "sve_int_mul")] ) ;; ------------------------------------------------------------------------- @@ -990,7 +1025,8 @@ "@ sqadd\t%0., %0., #%D2 movprfx\t%0, %1\;sqadd\t%0., %0., #%D2" - [(set_attr "movprfx" "*,yes")] + [(set_attr "movprfx" "*,yes") + (set_attr "sve_type" "sve_int_general")] ) ;; General predicated binary arithmetic. All operations handled here @@ -1010,6 +1046,7 @@ [ w , Upl , w , 0 ; * ] \t%0., %1/m, %0., %2. [ ?&w , Upl , w , w ; yes ] movprfx\t%0, %2\;\t%0., %1/m, %0., %3. } + [(set_attr "sve_type" "sve_int_general")] ) ;; Predicated binary arithmetic with merging. @@ -1055,6 +1092,7 @@ { operands[4] = CONSTM1_RTX (mode); } + [(set_attr "sve_type" "sve_int_general")] ) ;; Predicated binary arithmetic, merging with the second input. @@ -1080,6 +1118,7 @@ { operands[4] = CONSTM1_RTX (mode); } + [(set_attr "sve_type" "sve_int_general")] ) ;; Predicated binary operations, merging with an independent value. @@ -1121,7 +1160,8 @@ else FAIL; } - [(set_attr "movprfx" "yes")] + [(set_attr "movprfx" "yes") + (set_attr "sve_type" "sve_int_general")] ) ;; Predicated binary operations with no reverse form, merging with zero. @@ -1150,7 +1190,8 @@ { operands[5] = CONSTM1_RTX (mode); } - [(set_attr "movprfx" "yes")] + [(set_attr "movprfx" "yes") + (set_attr "sve_type" "sve_int_general")] ) ;; ------------------------------------------------------------------------- @@ -1182,6 +1223,7 @@ SVE2_INT_BINARY_LANE))] "TARGET_SVE2" "\t%0., %1., %2.[%3]" + [(set_attr "sve_type" "sve_int_mul")] ) ;; ------------------------------------------------------------------------- @@ -1212,6 +1254,7 @@ [ ?&w , Upl , w , D ; yes ] movprfx\t%0, %2\;\t%0., %1/m, %0., #%3 [ ?&w , Upl , w , w ; yes ] movprfx\t%0, %2\;\t%0., %1/m, %0., %3. } + [(set_attr "sve_type" "sve_int_shift")] ) ;; Predicated left shifts with merging. @@ -1259,6 +1302,7 @@ { operands[4] = CONSTM1_RTX (mode); } + [(set_attr "sve_type" "sve_int_shift")] ) ;; Predicated left shifts, merging with the second input. @@ -1284,6 +1328,7 @@ { operands[4] = CONSTM1_RTX (mode); } + [(set_attr "sve_type" "sve_int_shift")] ) ;; Predicated left shifts, merging with an independent value. @@ -1329,7 +1374,8 @@ else FAIL; } - [(set_attr "movprfx" "yes")] + [(set_attr "movprfx" "yes") + (set_attr "sve_type" "sve_int_shift")] ) ;; ------------------------------------------------------------------------- @@ -1360,7 +1406,8 @@ [ ?&w , Upl , w , w ; yes , * ] movprfx\t%0, %2\;\t%0., %1/m, %0., %3. } [(set_attr "is_bf16" "") - (set_attr "supports_bf16_rev" "")] + (set_attr "supports_bf16_rev" "") + (set_attr "sve_type" "sve_")] ) ;; ------------------------------------------------------------------------- @@ -1386,6 +1433,7 @@ [ w, 0, w, w; * ] fclamp\t%0., %2., %3. [ ?&w, w, w, w; yes ] movprfx\t%0, %1\;fclamp\t%0., %2., %3. } + [(set_attr "sve_type" "sve_fp_arith")] ) (define_insn_and_split "*aarch64_sve_fclamp_x" @@ -1430,6 +1478,7 @@ UNSPEC_FMINNM))] "TARGET_STREAMING_SME2" "fclamp\t%0, %2., %3." + [(set_attr "sve_type" "sve_fp_arith")] ) ;; ========================================================================= @@ -1462,6 +1511,7 @@ [ w , 0 , w , w ; * ] \t%0., %2., %3. [ ?&w , w , w , w ; yes ] movprfx\t%0, %1\;\t%0., %2., %3. } + [(set_attr "sve_type" "sve_")] ) (define_insn "@aarch64_sve__lane_" @@ -1479,6 +1529,7 @@ [ w , 0 , w , ; * ] \t%0., %2., %3.[%4] [ ?&w , w , w , ; yes ] movprfx\t%0, %1\;\t%0., %2., %3.[%4] } + [(set_attr "sve_type" "sve_")] ) ;; ------------------------------------------------------------------------- @@ -1504,6 +1555,7 @@ [ w , 0 , w , ; * ] mla\t%0., %2., %3.[%4] [ ?&w , w , w , ; yes ] movprfx\t%0, %1\;mla\t%0., %2., %3.[%4] } + [(set_attr "sve_type" "sve_int_mul")] ) (define_insn "@aarch64_sve_sub_mul_lane_" @@ -1521,6 +1573,7 @@ [ w , 0 , w , ; * ] mls\t%0., %2., %3.[%4] [ ?&w , w , w , ; yes ] movprfx\t%0, %1\;mls\t%0., %2., %3.[%4] } + [(set_attr "sve_type" "sve_int_mul")] ) ;; ------------------------------------------------------------------------- @@ -1551,7 +1604,8 @@ return "xar\t%Z0., %Z0., %Z2., #%3"; return "movprfx\t%Z0, %Z1\;xar\t%Z0., %Z0., %Z2., #%3"; } - [(set_attr "movprfx" "*,yes")] + [(set_attr "movprfx" "*,yes") + (set_attr "sve_type" "sve_crypto_sha3")] ) ;; ------------------------------------------------------------------------- @@ -1604,6 +1658,7 @@ { operands[4] = CONSTM1_RTX (mode); } + [(set_attr "sve_type" "sve_crypto_sha3")] ) ;; Unpredicated 3-way exclusive OR. @@ -1621,6 +1676,7 @@ [ w , w , w , 0 ; * ] eor3\t%0.d, %0.d, %1.d, %2.d [ ?&w , w , w , w ; yes ] movprfx\t%0, %1\;eor3\t%0.d, %0.d, %2.d, %3.d } + [(set_attr "sve_type" "sve_crypto_sha3")] ) ;; Use NBSL for vector NOR. @@ -1643,6 +1699,7 @@ { operands[3] = CONSTM1_RTX (mode); } + [(set_attr "sve_type" "sve_int_general")] ) (define_insn "*aarch64_sve2_unpred_nor" @@ -1657,6 +1714,7 @@ [ w , 0 , w ; * ] nbsl\t%Z0.d, %Z0.d, %Z2.d, %Z0.d [ ?&w , w , w ; yes ] movprfx\t%Z0, %Z1\;nbsl\t%Z0.d, %Z0.d, %Z2.d, %Z1.d } + [(set_attr "sve_type" "sve_int_general")] ) ;; Use NBSL for vector NAND. @@ -1679,6 +1737,7 @@ { operands[3] = CONSTM1_RTX (mode); } + [(set_attr "sve_type" "sve_int_general")] ) ;; Same as above but unpredicated and including Advanced SIMD modes. @@ -1694,6 +1753,7 @@ [ w , 0 , w ; * ] nbsl\t%Z0.d, %Z0.d, %Z2.d, %Z2.d [ ?&w , w , w ; yes ] movprfx\t%Z0, %Z1\;nbsl\t%Z0.d, %Z0.d, %Z2.d, %Z2.d } + [(set_attr "sve_type" "sve_int_general")] ) ;; Unpredicated bitwise select. @@ -1724,6 +1784,7 @@ [ w , , , w ; * ] bsl\t%0.d, %0.d, %.d, %3.d [ ?&w , w , w , w ; yes ] movprfx\t%0, %\;bsl\t%0.d, %0.d, %.d, %3.d } + [(set_attr "sve_type" "sve_int_general")] ) ;; Unpredicated bitwise inverted select. @@ -1769,6 +1830,7 @@ { operands[4] = CONSTM1_RTX (mode); } + [(set_attr "sve_type" "sve_int_general")] ) (define_insn "*aarch64_sve2_nbsl_unpred" @@ -1786,6 +1848,7 @@ [ w , , , w ; * ] nbsl\t%Z0.d, %Z0.d, %Z.d, %Z3.d [ ?&w , w , w , w ; yes ] movprfx\t%Z0, %Z\;nbsl\t%Z0.d, %Z0.d, %Z.d, %Z3.d } + [(set_attr "sve_type" "sve_int_general")] ) ;; Unpredicated bitwise select with inverted first operand. @@ -1831,6 +1894,7 @@ { operands[4] = CONSTM1_RTX (mode); } + [(set_attr "sve_type" "sve_int_general")] ) (define_insn "*aarch64_sve2_bsl1n_unpred" @@ -1848,6 +1912,7 @@ [ w , , , w ; * ] bsl1n\t%Z0.d, %Z0.d, %Z.d, %Z3.d [ ?&w , w , w , w ; yes ] movprfx\t%Z0, %Z\;bsl1n\t%Z0.d, %Z0.d, %Z.d, %Z3.d } + [(set_attr "sve_type" "sve_int_general")] ) ;; Unpredicated bitwise select with inverted second operand. @@ -1895,6 +1960,7 @@ { operands[4] = CONSTM1_RTX (mode); } + [(set_attr "sve_type" "sve_int_general")] ) ;; Unpredicated bitwise select with inverted second operand, alternative form. @@ -1922,6 +1988,7 @@ { operands[4] = CONSTM1_RTX (mode); } + [(set_attr "sve_type" "sve_int_general")] ) (define_insn "*aarch64_sve2_bsl2n_unpred" @@ -1938,6 +2005,7 @@ [ w , , , w ; * ] bsl2n\t%Z0.d, %Z0.d, %Z3.d, %Z.d [ ?&w , w , w , w ; yes ] movprfx\t%Z0, %Z\;bsl2n\t%Z0.d, %Z0.d, %Z3.d, %Z.d } + [(set_attr "sve_type" "sve_int_general")] ) (define_insn "*aarch64_sve2_bsl2n_unpred" @@ -1954,6 +2022,7 @@ [ w , , , w ; * ] bsl2n\t%Z0.d, %Z0.d, %Z3.d, %Z.d [ ?&w , w , w , w ; yes ] movprfx\t%Z0, %Z\;bsl2n\t%Z0.d, %Z0.d, %Z3.d, %Z.d } + [(set_attr "sve_type" "sve_int_general")] ) ;; Vector EON (~(x, y)) using BSL2N. @@ -1975,6 +2044,7 @@ { operands[3] = CONSTM1_RTX (mode); } + [(set_attr "sve_type" "sve_int_general")] ) (define_insn "*aarch64_sve2_eon_bsl2n_unpred" @@ -1988,6 +2058,7 @@ [ w , 0, w ; * ] bsl2n\t%Z0.d, %Z0.d, %Z0.d, %Z2.d [ ?&w, w, w ; yes ] movprfx\t%Z0, %Z1\;bsl2n\t%Z0.d, %Z0.d, %Z1.d, %Z2.d } + [(set_attr "sve_type" "sve_int_general")] ) ;; ------------------------------------------------------------------------- @@ -2025,6 +2096,7 @@ [ w , 0 , w ; * ] sra\t%0., %2., #%3 [ ?&w , w , w ; yes ] movprfx\t%0, %1\;sra\t%0., %2., #%3 } + [(set_attr "sve_type" "sve_int_shift")] ) ;; SRSRA and URSRA. @@ -2041,6 +2113,7 @@ [ w , 0 , w ; * ] sra\t%0., %2., #%3 [ ?&w , w , w ; yes ] movprfx\t%0, %1\;sra\t%0., %2., #%3 } + [(set_attr "sve_type" "sve_int_shift")] ) ;; ------------------------------------------------------------------------- @@ -2061,6 +2134,7 @@ SVE2_INT_SHIFT_INSERT))] "TARGET_SVE2" "\t%0., %2., #%3" + [(set_attr "sve_type" "sve_int_shift")] ) ;; ------------------------------------------------------------------------- @@ -2119,6 +2193,7 @@ [ w , 0 , w , w ; * ] aba\t%0., %2., %3. [ ?&w , w , w , w ; yes ] movprfx\t%0, %1\;aba\t%0., %2., %3. } + [(set_attr "sve_type" "sve_int_accum")] ) ;; ------------------------------------------------------------------------- @@ -2152,6 +2227,7 @@ [ w , 0 , w , w ; * ] \t%0.h, %2.b, %3.b [ ?&w , w , w , w ; yes ] movprfx\t%0, %1\;\t%0.h, %2.b, %3.b } + [(set_attr "sve_type" "sve_fp_mul")] ) (define_insn "@aarch64_sve_add_" @@ -2167,6 +2243,7 @@ [ w , 0 , w , w ; * ] \t%0.s, %2.b, %3.b [ ?&w , w , w , w ; yes ] movprfx\t%0, %1\;\t%0.s, %2.b, %3.b } + [(set_attr "sve_type" "sve_fp_mul")] ) (define_insn "@aarch64_sve_add_lane_" @@ -2183,6 +2260,7 @@ [ w , 0 , w , y ; * ] \t%0.h, %2.b, %3.b[%4] [ ?&w , w , w , y ; yes ] movprfx\t%0, %1\;\t%0.h, %2.b, %3.b[%4] } + [(set_attr "sve_type" "sve_fp_mul")] ) (define_insn "@aarch64_sve_add_lane_" @@ -2199,6 +2277,7 @@ [ w , 0 , w , y ; * ] \t%0.s, %2.b, %3.b[%4] [ ?&w , w , w , y ; yes ] movprfx\t%0, %1\;\t%0.s, %2.b, %3.b[%4] } + [(set_attr "sve_type" "sve_fp_mul")] ) ;; ------------------------------------------------------------------------- @@ -2223,6 +2302,7 @@ [ w , 0 , w , w ; * ] fdot\t%0., %2.b, %3.b [ ?&w , w , w , w ; yes ] movprfx\t%0, %1\;fdot\t%0., %2.b, %3.b } + [(set_attr "sve_type" "sve_fp_mul")] ) (define_insn "@aarch64_sve_dot_lane" @@ -2239,6 +2319,7 @@ [ w , 0 , w , y ; * ] fdot\t%0., %2.b, %3.b[%4] [ ?&w , w , w , y ; yes ] movprfx\t%0, %1\;fdot\t%0., %2.b, %3.b[%4] } + [(set_attr "sve_type" "sve_fp_mul")] ) ;; ========================================================================= @@ -2259,6 +2340,7 @@ (match_operand:SVE_FULL_BHSI 1 "register_operand" "w")))] "TARGET_STREAMING_SME2" "unpk\t%0, %1." + [(set_attr "sve_type" "sve_int_general")] ) (define_insn "2" @@ -2267,6 +2349,7 @@ (match_operand:SVE_FULL_BHSIx2 1 "aligned_register_operand" "Uw2")))] "TARGET_STREAMING_SME2" "unpk\t%0, %1" + [(set_attr "sve_type" "sve_int_general")] ) ;; ------------------------------------------------------------------------- @@ -2291,6 +2374,7 @@ SVE2_INT_BINARY_WIDE))] "TARGET_SVE2" "\t%0., %1., %2." + [(set_attr "sve_type" "sve_int_general")] ) ;; ------------------------------------------------------------------------- @@ -2328,6 +2412,7 @@ SVE2_INT_BINARY_LONG))] "TARGET_SVE2" "\t%0., %1., %2." + [(set_attr "sve_type" "sve_")] ) (define_insn "@aarch64_sve__lane_" @@ -2341,6 +2426,7 @@ SVE2_INT_BINARY_LONG_LANE))] "TARGET_SVE2" "\t%0., %1., %2.[%3]" + [(set_attr "sve_type" "sve_")] ) ;; ------------------------------------------------------------------------- @@ -2362,6 +2448,7 @@ SVE2_INT_SHIFT_IMM_LONG))] "TARGET_SVE2" "\t%0., %1., #%2" + [(set_attr "sve_type" "sve_int_shift")] ) ;; ------------------------------------------------------------------------- @@ -2404,6 +2491,7 @@ [ w , 0 , w , w ; * ] \t%0., %2., %3. [ ?&w , w , w , w ; yes ] movprfx\t%0, %1\;\t%0., %2., %3. } + [(set_attr "sve_type" "sve_")] ) ;; Non-saturating MLA operations with lane select. @@ -2423,6 +2511,7 @@ [ w , 0 , w , ; * ] \t%0., %2., %3.[%4] [ ?&w , w , w , ; yes ] movprfx\t%0, %1\;\t%0., %2., %3.[%4] } + [(set_attr "sve_type" "sve_")] ) ;; Saturating MLA operations. @@ -2439,6 +2528,7 @@ [ w , 0 , w , w ; * ] \t%0., %2., %3. [ ?&w , w , w , w ; yes ] movprfx\t%0, %1\;\t%0., %2., %3. } + [(set_attr "sve_type" "sve_")] ) ;; Saturating MLA operations with lane select. @@ -2458,6 +2548,7 @@ [ w , 0 , w , ; * ] \t%0., %2., %3.[%4] [ ?&w , w , w , ; yes ] movprfx\t%0, %1\;\t%0., %2., %3.[%4] } + [(set_attr "sve_type" "sve_")] ) ;; Non-saturating MLS operations. @@ -2474,6 +2565,7 @@ [ w , 0 , w , w ; * ] \t%0., %2., %3. [ ?&w , w , w , w ; yes ] movprfx\t%0, %1\;\t%0., %2., %3. } + [(set_attr "sve_type" "sve_")] ) ;; Non-saturating MLS operations with lane select. @@ -2493,6 +2585,7 @@ [ w , 0 , w , ; * ] \t%0., %2., %3.[%4] [ ?&w , w , w , ; yes ] movprfx\t%0, %1\;\t%0., %2., %3.[%4] } + [(set_attr "sve_type" "sve_")] ) ;; Saturating MLS operations. @@ -2509,6 +2602,7 @@ [ w , 0 , w , w ; * ] \t%0., %2., %3. [ ?&w , w , w , w ; yes ] movprfx\t%0, %1\;\t%0., %2., %3. } + [(set_attr "sve_type" "sve_")] ) ;; Saturating MLS operations with lane select. @@ -2528,6 +2622,7 @@ [ w , 0 , w , ; * ] \t%0., %2., %3.[%4] [ ?&w , w , w , ; yes ] movprfx\t%0, %1\;\t%0., %2., %3.[%4] } + [(set_attr "sve_type" "sve_")] ) ;; Two-way dot-product. @@ -2544,6 +2639,7 @@ [ w , w , w , 0 ; * ] dot\t%0.s, %1.h, %2.h [ ?&w , w , w , w ; yes ] movprfx\t%0, %3\;dot\t%0.s, %1.h, %2.h } + [(set_attr "sve_type" "sve_int_dot")] ) ;; ------------------------------------------------------------------------- @@ -2573,6 +2669,7 @@ SVE_FP_BINARY_MULTI))] "TARGET_STREAMING_SME2" "\t%0, %0, %2" + [(set_attr "sve_type" "sve_")] ) (define_insn "@aarch64_sve_single_" @@ -2584,6 +2681,7 @@ SVE_FP_BINARY_MULTI))] "TARGET_STREAMING_SME2" "\t%0, %0, %2." + [(set_attr "sve_type" "sve_")] ) ;; ------------------------------------------------------------------------- @@ -2609,6 +2707,7 @@ [ w , w , w , 0 ; * ] \t%0., %1., %2. [ ?&w , w , w , w ; yes ] movprfx\t%0, %3\;\t%0., %1., %2. } + [(set_attr "sve_type" "sve_")] ) (define_insn "@aarch64__lane_" @@ -2626,6 +2725,7 @@ [ w , w , , 0 ; * ] \t%0., %1., %2.[%3] [ ?&w , w , , w ; yes ] movprfx\t%0, %4\;\t%0., %1., %2.[%3] } + [(set_attr "sve_type" "sve_")] ) ;; Two-way dot-product. @@ -2642,6 +2742,7 @@ [ w , w , w , 0 ; * ] fdot\t%0.s, %1.h, %2.h [ ?&w , w , w , w ; yes ] movprfx\t%0, %3\;fdot\t%0.s, %1.h, %2.h } + [(set_attr "sve_type" "sve_fp_mul")] ) (define_insn "aarch64_fdot_prod_lanevnx4sfvnx8hf" @@ -2660,6 +2761,7 @@ [ w , w , y , 0 ; * ] fdot\t%0.s, %1.h, %2.h[%3] [ ?&w , w , y , w ; yes ] movprfx\t%0, %4\;fdot\t%0.s, %1.h, %2.h[%3] } + [(set_attr "sve_type" "sve_fp_mul")] ) ;; ========================================================================= @@ -2685,6 +2787,7 @@ SVE2_INT_UNARY_NARROWB))] "TARGET_SVE2" "\t%0., %1." + [(set_attr "sve_type" "sve_int_extract")] ) ;; These instructions do not take MOVPRFX. @@ -2696,6 +2799,7 @@ SVE2_INT_UNARY_NARROWT))] "TARGET_SVE2" "\t%0., %2." + [(set_attr "sve_type" "sve_int_extract")] ) ;; ------------------------------------------------------------------------- @@ -2715,6 +2819,7 @@ SVE_QCVTxN))] "TARGET_STREAMING_SME2" "\t%0.b, %1" + [(set_attr "sve_type" "sve_int_extract")] ) (define_insn "@aarch64_sve_" @@ -2724,6 +2829,7 @@ SVE_QCVTxN))] "" "\t%0.h, %1" + [(set_attr "sve_type" "sve_int_extract")] ) (define_insn "@aarch64_sve_" @@ -2733,6 +2839,7 @@ SVE_QCVTxN))] "TARGET_STREAMING_SME2" "\t%0.h, %1" + [(set_attr "sve_type" "sve_int_extract")] ) ;; ------------------------------------------------------------------------- @@ -2757,6 +2864,7 @@ SVE2_INT_BINARY_NARROWB))] "TARGET_SVE2" "\t%0., %1., %2." + [(set_attr "sve_type" "sve_int_general")] ) ;; These instructions do not take MOVPRFX. @@ -2769,6 +2877,7 @@ SVE2_INT_BINARY_NARROWT))] "TARGET_SVE2" "\t%0., %2., %3." + [(set_attr "sve_type" "sve_int_general")] ) ;; Optimize ((a + b) >> n) where n is half the bitsize of the vector @@ -2782,6 +2891,7 @@ "aarch64_simd_shift_imm_vec_exact_top" "")))] "TARGET_SVE2" "addhnb\t%0., %1., %2." + [(set_attr "sve_type" "sve_int_general")] ) ;; ------------------------------------------------------------------------- @@ -2815,6 +2925,7 @@ SVE2_INT_SHIFT_IMM_NARROWB))] "TARGET_SVE2" "\t%0., %1., #%2" + [(set_attr "sve_type" "sve_int_shift")] ) ;; The immediate range is enforced before generating the instruction. @@ -2828,6 +2939,7 @@ SVE2_INT_SHIFT_IMM_NARROWT))] "TARGET_SVE2" "\t%0., %2., #%3" + [(set_attr "sve_type" "sve_int_shift")] ) ;; ------------------------------------------------------------------------- @@ -2850,6 +2962,7 @@ SVE2_INT_SHIFT_IMM_NARROWxN))] "(mode == VNx8SImode || TARGET_STREAMING_SME2)" "\t%0., %1, #%2" + [(set_attr "sve_type" "sve_int_shift")] ) ;; ========================================================================= @@ -2879,6 +2992,7 @@ [ w , Upl , 0 , w ; * ] \t%0., %1/m, %0., %3. [ ?&w , Upl , w , w ; yes ] movprfx\t%0, %2\;\t%0., %1/m, %0., %3. } + [(set_attr "sve_type" "sve_int_general")] ) ;; ------------------------------------------------------------------------- @@ -2904,6 +3018,7 @@ [ w , Upl , 0 , w ; * ] \t%0., %1/m, %0., %3. [ ?&w , Upl , w , w ; yes ] movprfx\t%0, %2\;\t%0., %1/m, %0., %3. } + [(set_attr "sve_type" "sve_fp_arith")] ) ;; ------------------------------------------------------------------------- @@ -2956,6 +3071,7 @@ { operands[4] = CONSTM1_RTX (mode); } + [(set_attr "sve_type" "sve_int_accum")] ) ;; Predicated pairwise absolute difference and accumulate, merging with zero. @@ -2979,7 +3095,8 @@ { operands[5] = CONSTM1_RTX (mode); } - [(set_attr "movprfx" "yes")] + [(set_attr "movprfx" "yes") + (set_attr "sve_type" "sve_int_accum")] ) ;; ------------------------------------------------------------------------- @@ -3017,6 +3134,7 @@ operands[5] = copy_rtx (operands[1]); operands[6] = copy_rtx (operands[1]); } + [(set_attr "sve_type" "sve_fp_arith")] ) ;; ========================================================================= @@ -3042,6 +3160,7 @@ [ w , 0 , w ; * ] \t%0., %0., %2., # [ ?&w , w , w ; yes ] movprfx\t%0, %1\;\t%0., %0., %2., # } + [(set_attr "sve_type" "sve_int_general")] ) ;; unpredicated optab pattern for auto-vectorizer @@ -3074,6 +3193,7 @@ [ w , 0 , w , w ; * ] \t%0., %2., %3., # [ ?&w , w , w , w ; yes ] movprfx\t%0, %1\;\t%0., %2., %3., # } + [(set_attr "sve_type" "sve_int_mul")] ) (define_insn "@aarch64__lane_" @@ -3091,6 +3211,7 @@ [ w , 0 , w , ; * ] \t%0., %2., %3.[%4], # [ ?&w , w , w , ; yes ] movprfx\t%0, %1\;\t%0., %2., %3.[%4], # } + [(set_attr "sve_type" "sve_int_mul")] ) ;; unpredicated optab pattern for auto-vectorizer @@ -3154,6 +3275,7 @@ [ w , 0 , w , w ; * ] \t%0., %2., %3., # [ ?&w , w , w , w ; yes ] movprfx\t%0, %1\;\t%0., %2., %3., # } + [(set_attr "sve_type" "sve_int_dot")] ) (define_insn "@aarch64__lane_" @@ -3171,6 +3293,7 @@ [ w , 0 , w , ; * ] \t%0., %2., %3.[%4], # [ ?&w , w , w , ; yes ] movprfx\t%0, %1\;\t%0., %2., %3.[%4], # } + [(set_attr "sve_type" "sve_int_dot")] ) ;; ========================================================================= @@ -3202,6 +3325,7 @@ SVE2_COND_FP_UNARY_LONG))] "TARGET_SVE2" "\t%0., %1/m, %0." + [(set_attr "sve_type" "sve_fp_cvt")] ) ;; Predicated convert long top with merging. @@ -3237,6 +3361,7 @@ { operands[4] = copy_rtx (operands[1]); } + [(set_attr "sve_type" "sve_fp_cvt")] ) (define_insn "*cond__strict" @@ -3252,6 +3377,7 @@ UNSPEC_SEL))] "TARGET_SVE2" "\t%0., %1/m, %2." + [(set_attr "sve_type" "sve_fp_cvt")] ) (define_insn "@aarch64_sve2_fp8_cvt_" @@ -3262,6 +3388,7 @@ FP8CVT_UNS))] "TARGET_SSVE_FP8" "\t%0.h, %1.b" + [(set_attr "sve_type" "sve_fp_cvt")] ) ;; ------------------------------------------------------------------------- @@ -3288,6 +3415,7 @@ UNSPEC_COND_FCVTNT))] "TARGET_SVE2" "fcvtnt\t%0., %2/m, %3." + [(set_attr "sve_type" "sve_fp_cvt")] ) ;; Predicated FCVTX (equivalent to what would be FCVTXNB, except that @@ -3304,6 +3432,7 @@ [ w , Upl , 0 ; * ] \t%0., %1/m, %2. [ ?&w , Upl , w ; yes ] movprfx\t%0, %2\;\t%0., %1/m, %2. } + [(set_attr "sve_type" "sve_fp_cvt")] ) ;; Predicated FCVTX with merging. @@ -3342,6 +3471,7 @@ { operands[4] = copy_rtx (operands[1]); } + [(set_attr "sve_type" "sve_fp_cvt")] ) (define_insn "*cond__any_strict" @@ -3361,6 +3491,7 @@ [ &w , Upl , w , Dz ; yes ] movprfx\t%0., %1/z, %2.\;\t%0., %1/m, %2. [ &w , Upl , w , w ; yes ] movprfx\t%0, %3\;\t%0., %1/m, %2. } + [(set_attr "sve_type" "sve_fp_cvt")] ) ;; Predicated FCVTXNT. This doesn't give a natural aarch64_pred_*/cond_* @@ -3378,6 +3509,7 @@ UNSPEC_COND_FCVTXNT))] "TARGET_SVE2" "fcvtxnt\t%0., %2/m, %3." + [(set_attr "sve_type" "sve_fp_cvt")] ) ;; ------------------------------------------------------------------------- @@ -3394,6 +3526,7 @@ (match_operand:VNx8HF 1 "register_operand" "w")))] "TARGET_STREAMING_SME_F16F16" "fcvt\t%0, %1.h" + [(set_attr "sve_type" "sve_fp_cvt")] ) (define_insn "@aarch64_sve_cvtl" @@ -3403,6 +3536,7 @@ UNSPEC_FCVTL))] "TARGET_STREAMING_SME_F16F16" "fcvtl\t%0, %1.h" + [(set_attr "sve_type" "sve_fp_cvt")] ) ;; ------------------------------------------------------------------------- @@ -3423,6 +3557,7 @@ (match_operand:VNx8SF 1 "aligned_register_operand" "Uw2")))] "TARGET_STREAMING_SME2" "fcvt\t%0.h, %1" + [(set_attr "sve_type" "sve_fp_cvt")] ) (define_insn "@aarch64_sve_cvtn" @@ -3432,6 +3567,7 @@ UNSPEC_FCVTN))] "TARGET_STREAMING_SME2" "fcvtn\t%0.h, %1" + [(set_attr "sve_type" "sve_fp_cvt")] ) (define_insn "@aarch64_sve2_fp8_cvtn" @@ -3442,6 +3578,7 @@ UNSPEC_FP8FCVTN))] "TARGET_SSVE_FP8" "fcvtn\t%0.b, %1" + [(set_attr "sve_type" "sve_fp_cvt")] ) (define_insn "@aarch64_sve2_fp8_cvtnb" @@ -3452,6 +3589,7 @@ UNSPEC_FCVTNB))] "TARGET_SSVE_FP8" "fcvtnb\t%0.b, %1" + [(set_attr "sve_type" "sve_fp_cvt")] ) (define_insn "@aarch64_sve_cvtnt" @@ -3463,6 +3601,7 @@ UNSPEC_FCVTNT))] "TARGET_SSVE_FP8" "fcvtnt\t%0.b, %2" + [(set_attr "sve_type" "sve_fp_cvt")] ) ;; ------------------------------------------------------------------------- @@ -3479,6 +3618,7 @@ (match_operand: 1 "aligned_register_operand" "Uw")))] "TARGET_STREAMING_SME2" "cvtf\t%0, %1" + [(set_attr "sve_type" "sve_int_cvt")] ) ;; ------------------------------------------------------------------------- @@ -3495,6 +3635,7 @@ (match_operand:SVE_SFx24 1 "aligned_register_operand" "Uw")))] "TARGET_STREAMING_SME2" "fcvtz\t%0, %1" + [(set_attr "sve_type" "sve_fp_cvt")] ) ;; ========================================================================= @@ -3523,6 +3664,7 @@ [ w , Upl , 0 ; * ] \t%0., %1/m, %2. [ ?&w , Upl , w ; yes ] movprfx\t%0, %2\;\t%0., %1/m, %2. } + [(set_attr "sve_type" "sve_int_recip_est")] ) ;; Predicated integer unary operations with merging. @@ -3566,6 +3708,7 @@ { operands[4] = CONSTM1_RTX (mode); } + [(set_attr "sve_type" "sve_int_recip_est")] ) ;; ------------------------------------------------------------------------- @@ -3588,6 +3731,7 @@ [ w , Upl , 0 ; * ] \t%0., %1/m, %2. [ ?&w , Upl , w ; yes ] movprfx\t%0, %2\;\t%0., %1/m, %2. } + [(set_attr "sve_type" "sve_fp_log")] ) ;; Predicated FLOGB with merging. @@ -3626,6 +3770,7 @@ { operands[4] = copy_rtx (operands[1]); } + [(set_attr "sve_type" "sve_fp_log")] ) (define_insn "*cond__strict" @@ -3645,6 +3790,7 @@ [ ?&w , Upl , w , Dz ; yes ] movprfx\t%0., %1/z, %2.\;\t%0., %1/m, %2. [ ?&w , Upl , w , w ; yes ] movprfx\t%0, %3\;\t%0., %1/m, %2. } + [(set_attr "sve_type" "sve_fp_log")] ) ;; ------------------------------------------------------------------------- @@ -3665,6 +3811,7 @@ UNSPEC_PMUL))] "TARGET_SVE2" "pmul\t%0., %1., %2." + [(set_attr "sve_type" "sve_int_pmul")] ) ;; Extending PMUL, with the results modeled as wider vectors. @@ -3677,6 +3824,7 @@ SVE2_PMULL))] "TARGET_SVE2" "\t%0., %1., %2." + [(set_attr "sve_type" "sve_int_pmul")] ) ;; Extending PMUL, with the results modeled as pairs of values. @@ -3690,6 +3838,7 @@ SVE2_PMULL_PAIR))] "TARGET_SVE2" "\t%0., %1., %2." + [(set_attr "sve_type" "sve_int_pmul")] ) ;; ========================================================================= @@ -3709,6 +3858,7 @@ UNSPEC_SEL))] "TARGET_STREAMING_SME2" "sel\t%0, %K3, %1, %2" + [(set_attr "sve_type" "sve_int_general")] ) ;; ------------------------------------------------------------------------- @@ -3736,6 +3886,7 @@ (clobber (reg:CC_NZC CC_REGNUM))] "TARGET_SVE2p1_OR_SME2" "while\t{%S0., %T0.}, %x1, %x2" + [(set_attr "sve_type" "sve_pred_cnt_ctrl")] ) (define_insn "@aarch64_sve_while_c" @@ -3750,6 +3901,7 @@ (clobber (reg:CC_NZC CC_REGNUM))] "TARGET_SVE2p1_OR_SME2" "while\t%K0., %x1, %x2, vlx%3" + [(set_attr "sve_type" "sve_pred_cnt_ctrl")] ) ;; ========================================================================= @@ -3778,6 +3930,7 @@ SVE_INT_REDUCTION_128))] "TARGET_SVE2p1 && TARGET_NON_STREAMING" "\t%0., %1, %2." + [(set_attr "sve_type" "sve_int_reduc")] ) ;; ------------------------------------------------------------------------- @@ -3799,6 +3952,7 @@ SVE_FP_REDUCTION_128))] "TARGET_SVE2p1 && TARGET_NON_STREAMING" "\t%0., %1, %2." + [(set_attr "sve_type" "sve_fp_reduc")] ) ;; ========================================================================= @@ -3825,6 +3979,7 @@ [ w , Upl , 0 ; * ] revd\t%0.q, %1/m, %2.q [ ?&w , Upl , w ; yes ] movprfx\t%0, %2\;revd\t%0.q, %1/m, %2.q } + [(set_attr "sve_type" "sve_int_general")] ) (define_insn "@cond_" @@ -3841,6 +3996,7 @@ [ w , Upl , w , 0 ; * ] revd\t%0.q, %1/m, %2.q [ ?&w , Upl , w , w ; yes ] movprfx\t%0, %3\;revd\t%0.q, %1/m, %2.q } + [(set_attr "sve_type" "sve_int_general")] ) ;; ------------------------------------------------------------------------- @@ -3861,6 +4017,7 @@ && TARGET_NON_STREAMING && IN_RANGE (INTVAL (operands[2]) * ( / 8), 0, 15)" "dupq\t%0., %1.[%2]" + [(set_attr "sve_type" "sve_int_general")] ) (define_insn "@aarch64_sve_extq" @@ -3879,7 +4036,8 @@ ? "extq\\t%0.b, %0.b, %2.b, #%3" : "movprfx\t%0, %1\;extq\\t%0.b, %0.b, %2.b, #%3"); } - [(set_attr "movprfx" "*,yes")] + [(set_attr "movprfx" "*,yes") + (set_attr "sve_type" "sve_int_general")] ) ;; ------------------------------------------------------------------------- @@ -3900,6 +4058,7 @@ UNSPEC_TBL2))] "TARGET_SVE2" "tbl\t%0., %1, %2." + [(set_attr "sve_type" "sve_int_general")] ) ;; TBX(Q). These instructions do not take MOVPRFX. @@ -3912,6 +4071,7 @@ SVE_TBX))] "TARGET_SVE2" "\t%0., %2., %3." + [(set_attr "sve_type" "sve_int_general")] ) ;; ------------------------------------------------------------------------- @@ -3930,6 +4090,7 @@ SVE2_x24_PERMUTE))] "TARGET_STREAMING_SME2" "\t%0, %1., %2." + [(set_attr "sve_type" "sve_int_general")] ) (define_insn "@aarch64_sve_" @@ -3940,6 +4101,7 @@ SVE2_x24_PERMUTEQ))] "TARGET_STREAMING_SME2" "\t{%S0.q - %T0.q}, %1.q, %2.q" + [(set_attr "sve_type" "sve_int_general")] ) (define_insn "@aarch64_sve_" @@ -3949,6 +4111,7 @@ SVE2_x24_PERMUTE))] "TARGET_STREAMING_SME2" "\t%0, %1" + [(set_attr "sve_type" "sve_int_general")] ) (define_insn "@aarch64_sve_" @@ -3958,6 +4121,7 @@ SVE2_x24_PERMUTEQ))] "TARGET_STREAMING_SME2" "\t{%S0.q - %V0.q}, {%S1.q - %V1.q}" + [(set_attr "sve_type" "sve_int_general")] ) ;; ------------------------------------------------------------------------- @@ -3977,6 +4141,7 @@ SVE2_INT_BITPERM))] "TARGET_SVE2_BITPERM" "\t%0., %1., %2." + [(set_attr "sve_type" "sve_int_bit_perm")] ) ;; ========================================================================= @@ -4041,6 +4206,7 @@ UNSPEC_HISTCNT))] "TARGET_SVE2 && TARGET_NON_STREAMING" "histcnt\t%0., %1/z, %2., %3." + [(set_attr "sve_type" "sve_int_general")] ) (define_insn "@aarch64_sve2_histseg" @@ -4051,6 +4217,7 @@ UNSPEC_HISTSEG))] "TARGET_SVE2 && TARGET_NON_STREAMING" "histseg\t%0., %1., %2." + [(set_attr "sve_type" "sve_int_general")] ) ;; ------------------------------------------------------------------------- @@ -4079,6 +4246,7 @@ [ ?Upl , 0 , w, w; yes ] ^ [ Upa , Upl, w, w; no ] ^ } + [(set_attr "sve_type" "sve_int_match")] ) (define_expand "@aarch64_pred_" @@ -4161,6 +4329,7 @@ operands[6] = copy_rtx (operands[4]); operands[7] = operands[5]; } + [(set_attr "sve_type" "sve_int_match")] ) (define_insn_and_rewrite "*aarch64_pred__cc" @@ -4228,6 +4397,7 @@ operands[6] = copy_rtx (operands[4]); operands[7] = operands[5]; } + [(set_attr "sve_type" "sve_int_match")] ) ;; ------------------------------------------------------------------------- @@ -4248,6 +4418,7 @@ UNSPEC_SVE_LUTI))] "TARGET_LUT && TARGET_SVE2_OR_SME2" "luti\t%0., { %1. }, %2[%3]" + [(set_attr "sve_type" "sve_int_general")] ) (define_insn "@aarch64_sve_luti" @@ -4260,6 +4431,7 @@ UNSPEC_SVE_LUTI))] "TARGET_LUT && TARGET_SVE2_OR_SME2" "luti\t%0., %1, %2[%3]" + [(set_attr "sve_type" "sve_int_general")] ) ;; ========================================================================= diff --git a/gcc/config/aarch64/aarch64-tuning-flags.def b/gcc/config/aarch64/aarch64-tuning-flags.def index dd91324e9c80..9c9af451b8e3 100644 --- a/gcc/config/aarch64/aarch64-tuning-flags.def +++ b/gcc/config/aarch64/aarch64-tuning-flags.def @@ -69,4 +69,7 @@ AARCH64_EXTRA_TUNING_OPTION ("cheap_fpmr_write", CHEAP_FPMR_WRITE) #define AARCH64_EXTRA_TUNE_BASE (AARCH64_EXTRA_TUNE_CHEAP_SHIFT_EXTEND \ | AARCH64_EXTRA_TUNE_FULLY_PIPELINED_FMA) +/* Enables dispatch scheduling. */ +AARCH64_EXTRA_TUNING_OPTION ("dispatch_sched", DISPATCH_SCHED) + #undef AARCH64_EXTRA_TUNING_OPTION diff --git a/gcc/config/aarch64/aarch64.cc b/gcc/config/aarch64/aarch64.cc index ef9c16598c09..9d2c3431ad36 100644 --- a/gcc/config/aarch64/aarch64.cc +++ b/gcc/config/aarch64/aarch64.cc @@ -98,6 +98,7 @@ #include "ipa-prop.h" #include "ipa-fnsummary.h" #include "hash-map.h" +#include "aarch64-sched-dispatch.h" /* This file should be included last. */ #include "target-def.h" @@ -354,7 +355,6 @@ static void aarch64_override_options_after_change (void); static bool aarch64_vector_mode_supported_p (machine_mode); static int aarch64_address_cost (rtx, machine_mode, addr_space_t, bool); static bool aarch64_builtin_support_vector_misalignment (machine_mode mode, - const_tree type, int misalignment, bool is_packed, bool is_gather_scatter); @@ -19251,6 +19251,12 @@ aarch64_override_options_internal (struct gcc_options *opts) SET_OPTION_IF_UNSET (opts, &global_options_set, param_fully_pipelined_fma, 1); + /* If dispatch scheduling is enabled, the dispatch_constraints in the + tune_params struct must be defined. */ + if (aarch64_tune_params.extra_tuning_flags + & AARCH64_EXTRA_TUNE_DISPATCH_SCHED) + gcc_assert (aarch64_tune_params.dispatch_constraints != NULL); + /* TODO: SME codegen without SVE2 is not supported, once this support is added remove this 'sorry' and the implicit enablement of SVE2 in the checks for streaming mode above in this function. */ @@ -20382,7 +20388,7 @@ static aarch64_fmv_feature_datum aarch64_fmv_feature_data[] = { #include "config/aarch64/aarch64-option-extensions.def" }; -/* Parse a function multiversioning feature string STR, as found in a +/* Parse a function multiversioning feature string_slice STR, as found in a target_version or target_clones attribute. If ISA_FLAGS is nonnull, then update it with the specified architecture @@ -20394,37 +20400,34 @@ static aarch64_fmv_feature_datum aarch64_fmv_feature_data[] = { the extension string is created and stored to INVALID_EXTENSION. */ static enum aarch_parse_opt_result -aarch64_parse_fmv_features (const char *str, aarch64_feature_flags *isa_flags, +aarch64_parse_fmv_features (string_slice str, aarch64_feature_flags *isa_flags, aarch64_fmv_feature_mask *feature_mask, std::string *invalid_extension) { if (feature_mask) *feature_mask = 0ULL; - if (strcmp (str, "default") == 0) + if (str == "default") return AARCH_PARSE_OK; - while (str != NULL && *str != 0) + gcc_assert (str.is_valid ()); + + while (str.is_valid ()) { - const char *ext; - size_t len; + string_slice ext; - ext = strchr (str, '+'); + ext = string_slice::tokenize (&str, "+"); - if (ext != NULL) - len = ext - str; - else - len = strlen (str); + gcc_assert (ext.is_valid ()); - if (len == 0) + if (!ext.is_valid () || ext.empty ()) return AARCH_PARSE_MISSING_ARG; int num_features = ARRAY_SIZE (aarch64_fmv_feature_data); int i; for (i = 0; i < num_features; i++) { - if (strlen (aarch64_fmv_feature_data[i].name) == len - && strncmp (aarch64_fmv_feature_data[i].name, str, len) == 0) + if (aarch64_fmv_feature_data[i].name == ext) { if (isa_flags) *isa_flags |= aarch64_fmv_feature_data[i].opt_flags; @@ -20436,7 +20439,8 @@ aarch64_parse_fmv_features (const char *str, aarch64_feature_flags *isa_flags, { /* Duplicate feature. */ if (invalid_extension) - *invalid_extension = std::string (str, len); + *invalid_extension + = std::string (ext.begin (), ext.size ()); return AARCH_PARSE_DUPLICATE_FEATURE; } } @@ -20448,14 +20452,9 @@ aarch64_parse_fmv_features (const char *str, aarch64_feature_flags *isa_flags, { /* Feature not found in list. */ if (invalid_extension) - *invalid_extension = std::string (str, len); + *invalid_extension = std::string (ext.begin (), ext.size ()); return AARCH_PARSE_INVALID_FEATURE; } - - str = ext; - if (str) - /* Skip over the next '+'. */ - str++; } return AARCH_PARSE_OK; @@ -20467,15 +20466,6 @@ aarch64_parse_fmv_features (const char *str, aarch64_feature_flags *isa_flags, static bool aarch64_process_target_version_attr (tree args) { - static bool issued_warning = false; - if (!issued_warning) - { - warning (OPT_Wexperimental_fmv_target, - "Function Multi Versioning support is experimental, and the " - "behavior is likely to change"); - issued_warning = true; - } - if (TREE_CODE (args) == TREE_LIST) { if (TREE_CHAIN (args)) @@ -20492,7 +20482,7 @@ aarch64_process_target_version_attr (tree args) return false; } - const char *str = TREE_STRING_POINTER (args); + string_slice str = TREE_STRING_POINTER (args); enum aarch_parse_opt_result parse_res; auto isa_flags = aarch64_asm_isa_flags; @@ -20516,13 +20506,13 @@ aarch64_process_target_version_attr (tree args) case AARCH_PARSE_INVALID_FEATURE: error ("invalid feature modifier %qs of value %qs in " "% attribute", invalid_extension.c_str (), - str); + TREE_STRING_POINTER (args)); break; case AARCH_PARSE_DUPLICATE_FEATURE: error ("duplicate feature modifier %qs of value %qs in " "% attribute", invalid_extension.c_str (), - str); + TREE_STRING_POINTER (args)); break; default: @@ -20594,13 +20584,14 @@ get_feature_mask_for_version (tree decl) if (version_attr == NULL) return 0; - const char *version_string = TREE_STRING_POINTER (TREE_VALUE (TREE_VALUE - (version_attr))); + string_slice version_string + = TREE_STRING_POINTER (TREE_VALUE (TREE_VALUE (version_attr))); + enum aarch_parse_opt_result parse_res; aarch64_fmv_feature_mask feature_mask; - parse_res = aarch64_parse_fmv_features (version_string, NULL, &feature_mask, - NULL); + parse_res = aarch64_parse_fmv_features (version_string, NULL, + &feature_mask, NULL); /* We should have detected any errors before getting here. */ gcc_assert (parse_res == AARCH_PARSE_OK); @@ -20648,6 +20639,30 @@ aarch64_compare_version_priority (tree decl1, tree decl2) return compare_feature_masks (mask1, mask2); } +/* Implement TARGET_OPTION_FUNCTIONS_B_RESOLVABLE_FROM_A. */ + +bool +aarch64_functions_b_resolvable_from_a (tree decl_a, tree decl_b, tree baseline) +{ + auto baseline_isa = aarch64_get_isa_flags + (TREE_TARGET_OPTION (aarch64_fndecl_options (baseline))); + auto isa_a = baseline_isa; + auto isa_b = baseline_isa; + + auto a_version = get_target_version (decl_a); + auto b_version = get_target_version (decl_b); + if (a_version.is_valid ()) + aarch64_parse_fmv_features (a_version, &isa_a, NULL, NULL); + if (b_version.is_valid ()) + aarch64_parse_fmv_features (b_version, &isa_b, NULL, NULL); + + /* Are there any bits of b that arent in a. */ + if (isa_b & (~isa_a)) + return false; + + return true; +} + /* Build the struct __ifunc_arg_t type: struct __ifunc_arg_t @@ -20707,56 +20722,37 @@ tree aarch64_mangle_decl_assembler_name (tree decl, tree id) { /* For function version, add the target suffix to the assembler name. */ - if (TREE_CODE (decl) == FUNCTION_DECL - && DECL_FUNCTION_VERSIONED (decl)) + if (TREE_CODE (decl) == FUNCTION_DECL) { - aarch64_fmv_feature_mask feature_mask = get_feature_mask_for_version (decl); - - std::string name = IDENTIFIER_POINTER (id); - - /* For the default version, append ".default". */ - if (feature_mask == 0ULL) + cgraph_node *node = cgraph_node::get (decl); + if (node && node->dispatcher_function) + return id; + else if (node && node->dispatcher_resolver_function) + return clone_identifier (id, "resolver"); + else if (DECL_FUNCTION_VERSIONED (decl)) { - name += ".default"; - return get_identifier (name.c_str()); - } + aarch64_fmv_feature_mask feature_mask + = get_feature_mask_for_version (decl); - name += "._"; + if (feature_mask == 0ULL) + return clone_identifier (id, "default"); - int num_features = ARRAY_SIZE (aarch64_fmv_feature_data); - for (int i = 0; i < num_features; i++) - { - if (feature_mask & aarch64_fmv_feature_data[i].feature_mask) - { - name += "M"; - name += aarch64_fmv_feature_data[i].name; - } - } + std::string suffix = "_"; - if (DECL_ASSEMBLER_NAME_SET_P (decl)) - SET_DECL_RTL (decl, NULL); + int num_features = ARRAY_SIZE (aarch64_fmv_feature_data); + for (int i = 0; i < num_features; i++) + if (feature_mask & aarch64_fmv_feature_data[i].feature_mask) + { + suffix += "M"; + suffix += aarch64_fmv_feature_data[i].name; + } - id = get_identifier (name.c_str()); + id = clone_identifier (id, suffix.c_str (), true); + } } return id; } -/* Return an identifier for the base assembler name of a versioned function. - This is computed by taking the default version's assembler name, and - stripping off the ".default" suffix if it's already been appended. */ - -static tree -get_suffixed_assembler_name (tree default_decl, const char *suffix) -{ - std::string name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (default_decl)); - - auto size = name.size (); - if (size >= 8 && name.compare (size - 8, 8, ".default") == 0) - name.resize (size - 8); - name += suffix; - return get_identifier (name.c_str()); -} - /* Make the resolver function decl to dispatch the versions of a multi-versioned function, DEFAULT_DECL. IFUNC_ALIAS_DECL is ifunc alias that will point to the created resolver. Create an @@ -20770,11 +20766,6 @@ make_resolver_func (const tree default_decl, { tree decl, type, t; - /* Create resolver function name based on default_decl. We need to remove an - existing ".default" suffix if this has already been appended. */ - tree decl_name = get_suffixed_assembler_name (default_decl, ".resolver"); - const char *resolver_name = IDENTIFIER_POINTER (decl_name); - /* The resolver function should have signature (void *) resolver (uint64_t, const __ifunc_arg_t *) */ type = build_function_type_list (ptr_type_node, @@ -20782,10 +20773,21 @@ make_resolver_func (const tree default_decl, build_ifunc_arg_type (), NULL_TREE); - decl = build_fn_decl (resolver_name, type); - SET_DECL_ASSEMBLER_NAME (decl, decl_name); + cgraph_node *node = cgraph_node::get (default_decl); + gcc_assert (node && node->function_version ()); + + decl = build_fn_decl (IDENTIFIER_POINTER (DECL_NAME (default_decl)), type); + + /* Set the assembler name to prevent cgraph_node attempting to mangle. */ + SET_DECL_ASSEMBLER_NAME (decl, DECL_ASSEMBLER_NAME (default_decl)); + + cgraph_node *resolver_node = cgraph_node::get_create (decl); + resolver_node->dispatcher_resolver_function = true; + + tree id = aarch64_mangle_decl_assembler_name + (decl, node->function_version ()->assembler_name); + symtab->change_decl_assembler_name (decl, id); - DECL_NAME (decl) = decl_name; TREE_USED (decl) = 1; DECL_ARTIFICIAL (decl) = 1; DECL_IGNORED_P (decl) = 1; @@ -20850,7 +20852,7 @@ make_resolver_func (const tree default_decl, gcc_assert (ifunc_alias_decl != NULL); /* Mark ifunc_alias_decl as "ifunc" with resolver as resolver_name. */ DECL_ATTRIBUTES (ifunc_alias_decl) - = make_attribute ("ifunc", resolver_name, + = make_attribute ("ifunc", IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)), DECL_ATTRIBUTES (ifunc_alias_decl)); /* Create the alias for dispatch to resolver here. */ @@ -21127,87 +21129,42 @@ aarch64_generate_version_dispatcher_body (void *node_p) cgraph_edge::rebuild_edges (); pop_cfun (); - /* Fix up symbol names. First we need to obtain the base name, which may - have already been mangled. */ - tree base_name = get_suffixed_assembler_name (default_ver_decl, ""); - - /* We need to redo the version mangling on the non-default versions for the - target_clones case. Redoing the mangling for the target_version case is - redundant but does no harm. We need to skip the default version, because - expand_clones will append ".default" later; fortunately that suffix is the - one we want anyway. */ - for (versn_info = node_version_info->next->next; versn_info; - versn_info = versn_info->next) - { - tree version_decl = versn_info->this_node->decl; - tree name = aarch64_mangle_decl_assembler_name (version_decl, - base_name); - symtab->change_decl_assembler_name (version_decl, name); - } - - /* We also need to use the base name for the ifunc declaration. */ - symtab->change_decl_assembler_name (node->decl, base_name); - return resolver_decl; } -/* Make a dispatcher declaration for the multi-versioned function DECL. - Calls to DECL function will be replaced with calls to the dispatcher - by the front-end. Returns the decl of the dispatcher function. */ +/* Make a dispatcher declaration for the multi-versioned default function DECL. + Calls to DECL function will be replaced with calls to the dispatcher by + the target_clones pass. Returns the decl of the dispatcher function. */ tree aarch64_get_function_versions_dispatcher (void *decl) { - tree fn = (tree) decl; - struct cgraph_node *node = NULL; - struct cgraph_node *default_node = NULL; - struct cgraph_function_version_info *node_v = NULL; - + tree default_decl = (tree) decl; tree dispatch_decl = NULL; - struct cgraph_function_version_info *default_version_info = NULL; + gcc_assert (decl != NULL + && DECL_FUNCTION_VERSIONED (default_decl) + && is_function_default_version (default_decl)); - gcc_assert (fn != NULL && DECL_FUNCTION_VERSIONED (fn)); + struct cgraph_node *default_node = cgraph_node::get (default_decl); + gcc_assert (default_node != NULL); - node = cgraph_node::get (fn); - gcc_assert (node != NULL); + struct cgraph_function_version_info *default_node_v + = default_node->function_version (); + gcc_assert (default_node_v != NULL && !default_node_v->prev); - node_v = node->function_version (); - gcc_assert (node_v != NULL); - - if (node_v->dispatcher_resolver != NULL) - return node_v->dispatcher_resolver; - - /* The default node is always the beginning of the chain. */ - default_version_info = node_v; - while (default_version_info->prev) - default_version_info = default_version_info->prev; - default_node = default_version_info->this_node; - - /* If there is no default node, just return NULL. */ - if (!is_function_default_version (default_node->decl)) - return NULL; + if (default_node_v->dispatcher_resolver != NULL) + return default_node_v->dispatcher_resolver; if (targetm.has_ifunc_p ()) { struct cgraph_function_version_info *it_v = NULL; - struct cgraph_node *dispatcher_node = NULL; - struct cgraph_function_version_info *dispatcher_version_info = NULL; /* Right now, the dispatching is done via ifunc. */ dispatch_decl = make_dispatcher_decl (default_node->decl); - TREE_NOTHROW (dispatch_decl) = TREE_NOTHROW (fn); - - dispatcher_node = cgraph_node::get_create (dispatch_decl); - gcc_assert (dispatcher_node != NULL); - dispatcher_node->dispatcher_function = 1; - dispatcher_version_info - = dispatcher_node->insert_new_function_version (); - dispatcher_version_info->next = default_version_info; - dispatcher_node->definition = 1; /* Set the dispatcher for all the versions. */ - it_v = default_version_info; + it_v = default_node_v; while (it_v != NULL) { it_v->dispatcher_resolver = dispatch_decl; @@ -21224,18 +21181,23 @@ aarch64_get_function_versions_dispatcher (void *decl) return dispatch_decl; } -/* This function returns true if FN1 and FN2 are versions of the same function, - that is, the target_version attributes of the function decls are different. - This assumes that FN1 and FN2 have the same signature. */ +/* This function returns true if STR1 and STR2 are version strings for the same + function. */ bool -aarch64_common_function_versions (tree fn1, tree fn2) +aarch64_same_function_versions (string_slice str1, string_slice str2) { - if (TREE_CODE (fn1) != FUNCTION_DECL - || TREE_CODE (fn2) != FUNCTION_DECL) - return false; + enum aarch_parse_opt_result parse_res; + aarch64_fmv_feature_mask feature_mask1; + aarch64_fmv_feature_mask feature_mask2; + parse_res = aarch64_parse_fmv_features (str1, NULL, + &feature_mask1, NULL); + gcc_assert (parse_res == AARCH_PARSE_OK); + parse_res = aarch64_parse_fmv_features (str2, NULL, + &feature_mask2, NULL); + gcc_assert (parse_res == AARCH_PARSE_OK); - return (aarch64_compare_version_priority (fn1, fn2) != 0); + return feature_mask1 == feature_mask2; } /* Implement TARGET_FUNCTION_ATTRIBUTE_INLINABLE_P. Use an opt-out @@ -24601,7 +24563,7 @@ aarch64_simd_vector_alignment_reachable (const_tree type, bool is_packed) target. */ static bool aarch64_builtin_support_vector_misalignment (machine_mode mode, - const_tree type, int misalignment, + int misalignment, bool is_packed, bool is_gather_scatter) { @@ -24618,7 +24580,7 @@ aarch64_builtin_support_vector_misalignment (machine_mode mode, if (misalignment == -1) return false; } - return default_builtin_support_vector_misalignment (mode, type, misalignment, + return default_builtin_support_vector_misalignment (mode, misalignment, is_packed, is_gather_scatter); } @@ -31996,6 +31958,56 @@ aarch64_expand_fp_spaceship (rtx dest, rtx op0, rtx op1, rtx hint) } } +/* Implement TARGET_CHECK_TARGET_CLONE_VERSION. */ + +bool +aarch64_check_target_clone_version (string_slice str, location_t *loc) +{ + str = str.strip (); + + if (str == "default") + return true; + + enum aarch_parse_opt_result parse_res; + auto isa_flags = aarch64_asm_isa_flags; + std::string invalid_extension; + + parse_res + = aarch64_parse_fmv_features (str, &isa_flags, NULL, &invalid_extension); + + if (loc == NULL) + return parse_res == AARCH_PARSE_OK; + + switch (parse_res) + { + case AARCH_PARSE_OK: + return true; + case AARCH_PARSE_MISSING_ARG: + warning_at (*loc, OPT_Wattributes, + "empty string not valid for a % version"); + return false; + case AARCH_PARSE_INVALID_FEATURE: + warning_at (*loc, OPT_Wattributes, + "invalid feature modifier %qs in version %qB for " + "% attribute", + invalid_extension.c_str (), &str); + return false; + case AARCH_PARSE_DUPLICATE_FEATURE: + warning_at (*loc, OPT_Wattributes, + "duplicate feature modifier %qs in version %qB for " + "% attribute", + invalid_extension.c_str (), &str); + return false; + case AARCH_PARSE_INVALID_ARG: + warning_at (*loc, OPT_Wattributes, + "invalid feature %qs in version %qB for " + "% attribute", + invalid_extension.c_str (), &str); + return false; + } + gcc_unreachable (); +} + /* Target-specific selftests. */ #if CHECKING_P @@ -32484,6 +32496,12 @@ aarch64_libgcc_floating_mode_supported_p #undef TARGET_SCHED_REASSOCIATION_WIDTH #define TARGET_SCHED_REASSOCIATION_WIDTH aarch64_reassociation_width +#undef TARGET_SCHED_DISPATCH +#define TARGET_SCHED_DISPATCH aarch64_sched_dispatch + +#undef TARGET_SCHED_DISPATCH_DO +#define TARGET_SCHED_DISPATCH_DO aarch64_sched_dispatch_do + #undef TARGET_DWARF_FRAME_REG_MODE #define TARGET_DWARF_FRAME_REG_MODE aarch64_dwarf_frame_reg_mode @@ -32850,12 +32868,19 @@ aarch64_libgcc_floating_mode_supported_p #undef TARGET_EMIT_EPILOGUE_FOR_SIBCALL #define TARGET_EMIT_EPILOGUE_FOR_SIBCALL aarch64_expand_epilogue -#undef TARGET_OPTION_FUNCTION_VERSIONS -#define TARGET_OPTION_FUNCTION_VERSIONS aarch64_common_function_versions +#undef TARGET_OPTION_SAME_FUNCTION_VERSIONS +#define TARGET_OPTION_SAME_FUNCTION_VERSIONS aarch64_same_function_versions + +#undef TARGET_CHECK_TARGET_CLONE_VERSION +#define TARGET_CHECK_TARGET_CLONE_VERSION aarch64_check_target_clone_version #undef TARGET_COMPARE_VERSION_PRIORITY #define TARGET_COMPARE_VERSION_PRIORITY aarch64_compare_version_priority +#undef TARGET_OPTION_FUNCTIONS_B_RESOLVABLE_FROM_A +#define TARGET_OPTION_FUNCTIONS_B_RESOLVABLE_FROM_A \ + aarch64_functions_b_resolvable_from_a + #undef TARGET_GENERATE_VERSION_DISPATCHER_BODY #define TARGET_GENERATE_VERSION_DISPATCHER_BODY \ aarch64_generate_version_dispatcher_body diff --git a/gcc/config/aarch64/aarch64.h b/gcc/config/aarch64/aarch64.h index 2b3610c86ed5..2b6075d38240 100644 --- a/gcc/config/aarch64/aarch64.h +++ b/gcc/config/aarch64/aarch64.h @@ -477,9 +477,14 @@ constexpr auto AARCH64_FL_DEFAULT_ISA_MODE ATTRIBUTE_UNUSED enabled through +faminmax. */ #define TARGET_FAMINMAX AARCH64_HAVE_ISA (FAMINMAX) -/* Lookup table (LUTI) extension instructions are enabled through +lut. */ +/* Lookup table (LUTI) extension instructions with 2-bit and 4-bit indices are + enabled through +lut. */ #define TARGET_LUT AARCH64_HAVE_ISA (LUT) +/* Lookup table (LUTI) extension instructions with 4-bit indices and 8-bit + elements are enabled through +sme-lutv2. */ +#define TARGET_SME_LUTv2 AARCH64_HAVE_ISA (SME_LUTv2) + /* Prefer different predicate registers for the output of a predicated operation over re-using an existing input predicate. */ #define TARGET_SVE_PRED_CLOBBER (TARGET_SVE \ diff --git a/gcc/config/aarch64/aarch64.md b/gcc/config/aarch64/aarch64.md index 6e215c4b85a5..98c65a74c8ed 100644 --- a/gcc/config/aarch64/aarch64.md +++ b/gcc/config/aarch64/aarch64.md @@ -647,6 +647,26 @@ ;; patterns. (define_attr "ldpstp" "ldp,stp,none" (const_string "none")) +;; Attribute that classifies SVE instructions by their functional type. +;; This attribute is currently only used for dispatch scheduling. +(define_attr "sve_type" + "none,\ + sve_pred_logical,sve_pred_cnt_ctrl,sve_pred_cnt_scalar,sve_pred_misc,\ + sve_pred_vec,\ + sve_fp_arith,sve_fp_mul,sve_fp_assoc_add,sve_fp_cmp,sve_fp_cvt,sve_fp_log,\ + sve_fp_exp,sve_fp_div,sve_fp_sqrt,sve_fp_reduc,sve_fp_misc,\ + sve_int_general,sve_int_shift,sve_int_mul,sve_int_dot,sve_int_cmp_set,\ + sve_int_extend,sve_int_extract,sve_int_cvt,sve_int_div,sve_int_index,\ + sve_int_match,sve_int_recip_est,sve_int_reduc,sve_int_accum,\ + sve_int_pmul,sve_int_bit_perm,\ + sve_load_pred,sve_load_1reg,sve_load_2reg,sve_load_3reg,sve_load_4reg,\ + sve_gatherload_32,sve_gatherload_64,\ + sve_store_pred,sve_store_1reg,sve_store_2reg,sve_store_3reg,sve_store_4reg,\ + sve_scatterstore_32,sve_scatterstore_64,\ + sve_ffr,\ + sve_crypto_sha3" + (const_string "none")) + ;; ------------------------------------------------------------------- ;; Pipeline descriptions and scheduling ;; ------------------------------------------------------------------- @@ -664,6 +684,9 @@ (include "tsv110.md") (include "thunderx3t110.md") +;; Dispatch scheduling +(include "neoversev2.md") + ;; ------------------------------------------------------------------- ;; Jumps and other miscellaneous insns ;; ------------------------------------------------------------------- @@ -7706,6 +7729,38 @@ } ) +(define_expand "isfinite2" + [(match_operand:SI 0 "register_operand") + (match_operand:GPF 1 "register_operand")] + "TARGET_FLOAT" +{ + rtx op = force_lowpart_subreg (mode, operands[1], mode); + rtx tmp = gen_reg_rtx (mode); + emit_move_insn (tmp, GEN_INT (HOST_WIDE_INT_M1U << ( + 1))); + rtx cc_reg = gen_rtx_REG (CC_SWPmode, CC_REGNUM); + emit_insn (gen_cmp_swp_lsl_reg (op, GEN_INT (1), tmp)); + rtx cmp = gen_rtx_fmt_ee (LTU, SImode, cc_reg, const0_rtx); + emit_insn (gen_aarch64_cstoresi (operands[0], cmp, cc_reg)); + DONE; +} +) + +(define_expand "isnan2" + [(match_operand:SI 0 "register_operand") + (match_operand:GPF 1 "register_operand")] + "TARGET_FLOAT && flag_signaling_nans" +{ + rtx op = force_lowpart_subreg (mode, operands[1], mode); + rtx tmp = gen_reg_rtx (mode); + emit_move_insn (tmp, GEN_INT (HOST_WIDE_INT_M1U << ( + 1))); + rtx cc_reg = gen_rtx_REG (CC_SWPmode, CC_REGNUM); + emit_insn (gen_cmp_swp_lsl_reg (op, GEN_INT (1), tmp)); + rtx cmp = gen_rtx_fmt_ee (GTU, SImode, cc_reg, const0_rtx); + emit_insn (gen_aarch64_cstoresi (operands[0], cmp, cc_reg)); + DONE; +} +) + ;; ------------------------------------------------------------------- ;; Reload support ;; ------------------------------------------------------------------- diff --git a/gcc/config/aarch64/aarch64.opt b/gcc/config/aarch64/aarch64.opt index 9ca753e6a886..8aae953e60d1 100644 --- a/gcc/config/aarch64/aarch64.opt +++ b/gcc/config/aarch64/aarch64.opt @@ -445,4 +445,4 @@ trailing destructive updates of the base register used by a pair. Wexperimental-fmv-target Target Var(warn_experimental_fmv) Warning Init(1) -Warn about usage of experimental Function Multi Versioning. +This option is deprecated. diff --git a/gcc/config/aarch64/iterators.md b/gcc/config/aarch64/iterators.md index 451b00f55af5..332e7ffd2eaf 100644 --- a/gcc/config/aarch64/iterators.md +++ b/gcc/config/aarch64/iterators.md @@ -4681,6 +4681,102 @@ (UNSPEC_SQDMULLBT "sqdmlslbt") (UNSPEC_SQDMULLT "sqdmlslt")]) +;; The value of the attribute "sve_type" associated with an unspec. +(define_int_attr sve_type_unspec [(UNSPEC_COND_FABS "fp_arith") + (UNSPEC_COND_FNEG "fp_arith") + (UNSPEC_FRECPE "fp_log") + (UNSPEC_COND_FRECPX "fp_log") + (UNSPEC_COND_FRINTA "fp_cvt") + (UNSPEC_COND_FRINTI "fp_cvt") + (UNSPEC_COND_FRINTM "fp_cvt") + (UNSPEC_COND_FRINTN "fp_cvt") + (UNSPEC_COND_FRINTP "fp_cvt") + (UNSPEC_COND_FRINTX "fp_cvt") + (UNSPEC_COND_FRINTZ "fp_cvt") + (UNSPEC_RSQRTE "fp_log") + (UNSPEC_COND_FSQRT "fp_sqrt") + (UNSPEC_FRECPS "fp_mul") + (UNSPEC_RSQRTS "fp_mul") + (UNSPEC_COND_FDIV "fp_div") + (UNSPEC_COND_FMULX "fp_mul") + (UNSPEC_COND_FAMAX "fp_arith") + (UNSPEC_COND_FAMIN "fp_arith") + (UNSPEC_COND_FADD "fp_arith") + (UNSPEC_COND_FMAX "fp_arith") + (UNSPEC_COND_FMAXNM "fp_arith") + (UNSPEC_COND_FMIN "fp_arith") + (UNSPEC_COND_FMINNM "fp_arith") + (UNSPEC_COND_FMUL "fp_mul") + (UNSPEC_COND_FSUB "fp_arith") + (UNSPEC_FMLALB "fp_mul") + (UNSPEC_FMLALT "fp_mul") + (UNSPEC_FMLSLB "fp_mul") + (UNSPEC_FMLSLT "fp_mul") + (UNSPEC_FMAX "fp_arith") + (UNSPEC_FMAXNM "fp_arith") + (UNSPEC_FMIN "fp_arith") + (UNSPEC_FMINNM "fp_arith") + (UNSPEC_FDOT "fp_mul") + (UNSPEC_COND_SMAX "fp_arith") + (UNSPEC_COND_SMIN "fp_arith") + (UNSPEC_ADCLB "int_general") + (UNSPEC_ADCLT "int_general") + (UNSPEC_EORBT "int_general") + (UNSPEC_EORTB "int_general") + (UNSPEC_SBCLB "int_general") + (UNSPEC_SBCLT "int_general") + (UNSPEC_SQRDMLAH "int_mul") + (UNSPEC_SQRDMLSH "int_mul") + (UNSPEC_SABDLB "int_general") + (UNSPEC_SABDLT "int_general") + (UNSPEC_SADDLB "int_general") + (UNSPEC_SADDLBT "int_general") + (UNSPEC_SADDLT "int_general") + (UNSPEC_SMULLB "int_mul") + (UNSPEC_SMULLT "int_mul") + (UNSPEC_SQDMULLB "int_mul") + (UNSPEC_SQDMULLBT "int_mul") + (UNSPEC_SQDMULLT "int_mul") + (UNSPEC_SSUBLB "int_general") + (UNSPEC_SSUBLBT "int_general") + (UNSPEC_SSUBLT "int_general") + (UNSPEC_SSUBLTB "int_general") + (UNSPEC_UABDLB "int_general") + (UNSPEC_UABDLT "int_general") + (UNSPEC_UADDLB "int_general") + (UNSPEC_UADDLT "int_general") + (UNSPEC_UMULLB "int_mul") + (UNSPEC_UMULLT "int_mul") + (UNSPEC_USUBLB "int_general") + (UNSPEC_USUBLT "int_general") + (UNSPEC_SQDMULH "int_mul") + (UNSPEC_URSHL "int_shift") + (UNSPEC_SRSHL "int_shift")]) + +;; The value of the attribute "sve_type" associated with an int code. +(define_code_attr sve_type_int [(mult "int_mul") + (smax "int_general") + (smin "int_general") + (umax "int_general") + (umin "int_general") + (plus "int_general") + (minus "int_general") + (ashift "int_shift") + (ashiftrt "int_shift") + (lshiftrt "int_shift") + (and "int_general") + (ior "int_general") + (xor "int_general") + (ss_plus "int_general") + (us_plus "int_general") + (ss_minus "int_general") + (us_minus "int_general")]) + +;; The value of the attribute "sve_type" associated with an fp code. +(define_code_attr sve_type_fp [(mult "fp_mul") + (plus "fp_arith") + (minus "fp_arith")]) + (define_int_attr sve_fp_op [(UNSPEC_BFDOT "bfdot") (UNSPEC_BFMLALB "bfmlalb") (UNSPEC_BFMLALT "bfmlalt") diff --git a/gcc/config/aarch64/neoversev2.md b/gcc/config/aarch64/neoversev2.md new file mode 100644 index 000000000000..8dc9b098d093 --- /dev/null +++ b/gcc/config/aarch64/neoversev2.md @@ -0,0 +1,192 @@ +;; Instruction attribute for dispatch scheduling for Neoverse V2. +;; Copyright The GNU Toolchain Authors. +;; +;; 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 +;; . + +;; Attribute that groups other instruction attributes into dispatch groups +;; for Neoverse V2 cores. Dispatch groups are groups of pipelines for which +;; the SWOG specifies a dispatch constraint. For example: Because the SWOG +;; contains a dispatch constraint for the V02 pipelines, there is an attribute +;; value "v02" that groups instructions that are processed by the V0 and V2 +;; pipelines. +;; Values that contain a "_" represent combinations of dispatch groups. +;; For example, there are dispatch constraints for the M0 and V pipelines. +;; The value "m0_v" groups instructions that utilize the M0 as well as the +;; V pipelines, such that both dispatch constraints apply. + +(define_attr "neoversev2_dispatch" + "none,bs01,bsm,m,m0,v02,v13,v,l01,l,bsm_l,m_l,m0_v,v_v13,v_l,\ + l01_d,l01_v" + (cond [(eq_attr "type" "branch,call") + (const_string "bs01") + (ior + (eq_attr "type" "adc_reg,alu_ext,alu_imm,alu_sreg,alus_ext,\ + alus_imm,alus_sreg,clz,csel,logic_imm,logic_reg,logics_imm,\ + logics_reg,mov_imm,rbit,rev,shift_reg") + (eq_attr "sve_type" "sve_pred_cnt_scalar")) + (const_string "bsm") + (ior + (eq_attr "type" "alu_ext,alus_ext,bfm,bfx,mul,rotate_imm,\ + smull,umull") + (eq_attr "autodetect_type" "alu_shift_asr_op2,alu_shift_lsl_op2,\ + alu_shift_lsr_op2") + (eq_attr "sve_type" "sve_pred_cnt_ctrl,sve_pred_misc")) + (const_string "m") + (ior + (eq_attr "type" "crc,f_cvti2f,mla,neon_from_gp,neon_from_gp_q,\ + sdiv,smlal,udiv,umlal") + (eq_attr "sve_type" "sve_ffr,sve_pred_logical")) + (const_string "m0") + (ior + (eq_attr "type" + "crypto_sha256_slow,crypto_sha3,crypto_sha512,crypto_sm3,\ + crypto_sm4,f_rintd,f_rints,fccmpd,fccmps,fcmpd,fcmps,fdivd,\ + fdivs,fsqrtd,fsqrts,neon_fp_cvt_narrow_d_q,\ + neon_fp_cvt_narrow_s_q,neon_fp_cvt_widen_h,neon_fp_cvt_widen_s,\ + neon_fp_div_d,neon_fp_div_d_q,neon_fp_div_s,neon_fp_div_s_q,\ + neon_fp_recpe_d,neon_fp_recpe_d_q,neon_fp_recpe_s,\ + neon_fp_recpe_s_q,neon_fp_recps_d,neon_fp_recps_d_q,\ + neon_fp_recps_s,neon_fp_recps_s_q,neon_fp_recpx_d,\ + neon_fp_recpx_d_q,neon_fp_recpx_s,neon_fp_recpx_s_q,\ + neon_fp_round_d,neon_fp_round_d_q,neon_fp_round_s,\ + neon_fp_round_s_q,neon_fp_rsqrte_d,neon_fp_rsqrte_d_q,\ + neon_fp_rsqrte_s,neon_fp_rsqrte_s_q,neon_fp_rsqrts_d,\ + neon_fp_rsqrts_d_q,neon_fp_rsqrts_s,neon_fp_rsqrts_s_q,\ + neon_fp_sqrt_d,neon_fp_sqrt_d_q,neon_fp_sqrt_s,\ + neon_fp_sqrt_s_q,neon_fp_to_int_d,neon_fp_to_int_d_q,\ + neon_fp_to_int_s,neon_fp_to_int_s_q,neon_int_to_fp_d,\ + neon_int_to_fp_d_q,neon_int_to_fp_s,neon_int_to_fp_s_q,\ + neon_mla_b,neon_mla_b_q,neon_mla_h,neon_mla_h_q,\ + neon_mla_s,neon_mla_s_q,neon_mla_b_long,neon_mla_h_long,\ + neon_mla_h_scalar,neon_mla_h_scalar_q,neon_mla_s_long,\ + neon_mla_s_scalar,neon_mla_s_scalar_q,neon_mla_h_scalar_long,\ + neon_mla_s_scalar_long,neon_mul_b,neon_mul_b_q,\ + neon_mul_d_long,neon_mul_h,neon_mul_h_q,neon_mul_h_long,\ + neon_mul_h_scalar,neon_mul_h_scalar_q,neon_mul_h_scalar_long,\ + neon_mul_s,neon_mul_s_q,neon_mul_s_long,neon_mul_s_scalar,\ + neon_mul_s_scalar_q,neon_mul_s_scalar_long,neon_sat_mla_b_long,\ + neon_sat_mla_h_long,neon_sat_mla_h_scalar_long,\ + neon_sat_mla_s_long,neon_sat_mla_s_scalar_long,\ + neon_sat_mul_b,neon_sat_mul_b_q,neon_sat_mul_b_long,\ + neon_sat_mul_h,neon_sat_mul_h_q,neon_sat_mul_h_long,\ + neon_sat_mul_h_scalar,neon_sat_mul_h_scalar_q,\ + neon_sat_mul_h_scalar_long,neon_sat_mul_s,neon_sat_mul_s_q,\ + neon_sat_mul_s_long,neon_sat_mul_s_scalar,\ + neon_sat_mul_s_scalar_q,neon_sat_mul_s_scalar_long") + (eq_attr "sve_type" + "sve_crypto_sha3,sve_fp_cmp,sve_fp_cvt,sve_fp_div,sve_fp_log,\ + sve_fp_sqrt,sve_int_cvt,sve_int_div,sve_int_dot,sve_int_index,\ + sve_int_mul,sve_int_recip_est")) + (const_string "v02") + (ior + (eq_attr "type" + "neon_arith_acc,neon_arith_acc_q,neon_reduc_add,\ + neon_reduc_add_long,neon_reduc_add_q,neon_reduc_minmax,\ + neon_reduc_minmax_q,neon_sat_shift_imm,\ + neon_sat_shift_imm_narrow_q,neon_sat_shift_imm_q,\ + neon_sat_shift_reg,neon_sat_shift_reg_q,neon_shift_acc,\ + neon_shift_acc_q,neon_shift_imm,neon_shift_imm_long,\ + neon_shift_imm_narrow_q,neon_shift_imm_q,neon_shift_reg,\ + neon_shift_reg_q") + (eq_attr "sve_type" + "sve_fp_assoc_add,sve_fp_exp,sve_int_accum,sve_int_bit_perm,\ + sve_int_extend,sve_int_extract,sve_int_shift")) + (const_string "v13") + (ior + (eq_attr "type" "crypto_pmull,f_cvt,f_cvtf2i,f_minmaxd,f_minmaxs,\ + faddd,fadds,fconstd,fconsts,fcsel,ffarithd,ffariths,fmacd,fmacs,\ + fmov,fmuld,fmuls,f_mcr,f_mrc,neon_abd,\ + neon_abd_long,neon_abd_q,neon_abs,neon_abs_q,neon_add,\ + neon_add_halve,neon_add_halve_narrow_q,neon_add_halve_q,\ + neon_add_long,neon_add_q,neon_add_widen,neon_bsl,neon_bsl_q,\ + neon_cls,neon_cls_q,neon_cnt,neon_cnt_q,neon_compare,\ + neon_compare_q,neon_compare_zero,neon_compare_zero_q,\ + neon_dup,neon_dup_q,neon_ext,neon_ext_q,neon_fcadd,neon_fcmla,\ + neon_fp_abd_d,neon_fp_abd_d_q,neon_fp_abd_s,neon_fp_abd_s_q,\ + neon_fp_abs_d,neon_fp_abs_d_q,neon_fp_abs_s,neon_fp_abs_s_q,\ + neon_fp_addsub_d,neon_fp_addsub_d_q,neon_fp_addsub_s,\ + neon_fp_addsub_s_q,neon_fp_compare_d,neon_fp_compare_d_q,\ + neon_fp_compare_s,neon_fp_compare_s_q,neon_fp_minmax_d,\ + neon_fp_minmax_d_q,neon_fp_minmax_s,neon_fp_minmax_s_q,\ + neon_fp_mla_d,neon_fp_mla_d_q,neon_fp_mla_d_scalar_q,\ + neon_fp_mla_s,neon_fp_mla_s_q,neon_fp_mla_s_scalar,\ + neon_fp_mla_s_scalar_q,neon_fp_mul_d,neon_fp_mul_d_q,\ + neon_fp_mul_d_scalar_q,neon_fp_mul_s,neon_fp_mul_s_q,\ + neon_fp_mul_s_scalar,neon_fp_mul_s_scalar_q,neon_fp_neg_d,\ + neon_fp_neg_d_q,neon_fp_neg_s,neon_fp_neg_s_q,neon_fp_reduc_add_d,\ + neon_fp_reduc_add_d_q,neon_fp_reduc_add_s,neon_fp_reduc_add_s_q,\ + neon_fp_reduc_minmax_d,neon_fp_reduc_minmax_d_q,\ + neon_fp_reduc_minmax_s,neon_fp_reduc_minmax_s_q,neon_logic,\ + neon_logic_q,neon_minmax,neon_minmax_q,neon_move,\ + neon_move_narrow_q,neon_move_q,neon_neg,neon_neg_q,neon_permute,\ + neon_permute_q,neon_qabs,neon_qabs_q,neon_qadd,neon_qadd_q,\ + neon_qneg,neon_qneg_q,neon_qsub,neon_qsub_q,neon_rbit,\ + neon_rbit_q,neon_rev,neon_rev_q,neon_sub,neon_sub_halve,\ + neon_sub_halve_narrow_q,neon_sub_halve_q,neon_sub_long,\ + neon_sub_q,neon_sub_widen,neon_tbl1,neon_tbl1_q,neon_tbl2,\ + neon_tbl2_q,neon_tbl3,neon_tbl3_q,neon_tbl4,neon_tbl4_q,\ + neon_to_gp,neon_to_gp_q,neon_tst,neon_tst_q,neon_zip,\ + neon_zip_q") + (eq_attr "sve_type" "sve_fp_arith,sve_fp_misc,sve_fp_mul,\ + sve_fp_reduc,sve_int_general,sve_int_pmul")) + (const_string "v") + (eq_attr "sve_type" "sve_store_pred") + (const_string "l01") + (ior + (eq_attr "type" "neon_ldp,neon_ldp_q,neon_load1_1reg,\ + neon_load1_1reg_q,neon_load1_2reg,neon_load1_2reg_q,\ + neon_load1_3reg,neon_load1_3reg_q,neon_load1_4reg,\ + neon_load1_4reg_q") + (eq_attr "sve_type" "sve_load_1reg")) + (const_string "l") + (eq_attr "type" "f_loadd,f_loads") + (const_string "bsm_l") + (eq_attr "sve_type" "sve_load_pred") + (const_string "m_l") + (ior + (eq_attr "type" "neon_ins,neon_ins_q") + (eq_attr "sve_type" "sve_int_cmp_set,sve_int_match,sve_pred_vec")) + (const_string "m0_v") + (eq_attr "sve_type" "sve_int_reduc") + (const_string "v_v13") + (ior + (eq_attr "type" "neon_load1_all_lanes,neon_load1_one_lane,\ + neon_load1_one_lane_q,neon_load2_2reg,neon_load2_2reg_q,\ + neon_load2_all_lanes,neon_load2_all_lanes_q,neon_load2_one_lane,\ + neon_load3_3reg,neon_load3_3reg_q,neon_load3_all_lanes,\ + neon_load3_all_lanes_q,neon_load3_one_lane,neon_load4_4reg,\ + neon_load4_4reg_q,neon_load4_all_lanes,neon_load4_all_lanes_q,\ + neon_load4_one_lane") + (eq_attr "sve_type" "sve_gatherload_32,sve_gatherload_64,\ + sve_load_2reg,sve_load_3reg,sve_load_4reg")) + (const_string "v_l") + (eq_attr "type" "load_16,load_4,load_8,store_16,store_4,store_8") + (const_string "l01_d") + (ior + (eq_attr "type" "f_stored,f_stores,neon_stp,neon_stp_q,\ + neon_store1_1reg,neon_store1_1reg_q,neon_store1_2reg,\ + neon_store1_2reg_q,neon_store1_3reg,neon_store1_3reg_q,\ + neon_store1_4reg,neon_store1_4reg_q,neon_store1_one_lane,\ + neon_store1_one_lane_q,neon_store2_2reg,neon_store2_2reg_q,\ + neon_store2_one_lane,neon_store2_one_lane_q,neon_store3_3reg,\ + neon_store3_3reg_q,neon_store3_one_lane,neon_store3_one_lane_q,\ + neon_store4_4reg,neon_store4_4reg_q,neon_store4_one_lane,\ + neon_store4_one_lane_q") + (eq_attr "sve_type" "sve_scatterstore_32,sve_scatterstore_64,\ + sve_store_1reg,sve_store_2reg,sve_store_3reg,sve_store_4reg")) + (const_string "l01_v")] + (const_string "none"))) \ No newline at end of file diff --git a/gcc/config/aarch64/t-aarch64 b/gcc/config/aarch64/t-aarch64 index 63ca8e90c9d1..71242f05b091 100644 --- a/gcc/config/aarch64/t-aarch64 +++ b/gcc/config/aarch64/t-aarch64 @@ -202,6 +202,14 @@ aarch64-ldp-fusion.o: $(srcdir)/config/aarch64/aarch64-ldp-fusion.cc \ $(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \ $(srcdir)/config/aarch64/aarch64-ldp-fusion.cc +aarch64-sched-dispatch.o: $(srcdir)/config/aarch64/aarch64-sched-dispatch.cc \ + $(CONFIG_H) $(SYSTEM_H) $(CORETYPES_H) $(BACKEND_H) $(RTL_H) \ + $(INSN_ATTR_H) $(REGSET_H) sched-int.h $(DUMPFILE_H) \ + $(srcdir)/config/aarch64/aarch64-protos.h \ + $(srcdir)/config/aarch64/aarch64-sched-dispatch.h + $(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \ + $(srcdir)/config/aarch64/aarch64-sched-dispatch.cc + comma=, MULTILIB_OPTIONS = $(subst $(comma),/, $(patsubst %, mabi=%, $(subst $(comma),$(comma)mabi=,$(TM_MULTILIB_CONFIG)))) MULTILIB_DIRNAMES = $(subst $(comma), ,$(TM_MULTILIB_CONFIG)) diff --git a/gcc/config/aarch64/tuning_models/a64fx.h b/gcc/config/aarch64/tuning_models/a64fx.h index 2622cd80346f..3aa578126055 100644 --- a/gcc/config/aarch64/tuning_models/a64fx.h +++ b/gcc/config/aarch64/tuning_models/a64fx.h @@ -165,7 +165,8 @@ static const struct tune_params a64fx_tunings = (AARCH64_EXTRA_TUNE_NONE), /* tune_flags. */ &a64fx_prefetch_tune, AARCH64_LDP_STP_POLICY_ALWAYS, /* ldp_policy_model. */ - AARCH64_LDP_STP_POLICY_ALWAYS /* stp_policy_model. */ + AARCH64_LDP_STP_POLICY_ALWAYS, /* stp_policy_model. */ + nullptr /* dispatch_constraints. */ }; #endif /* GCC_AARCH64_H_A64FX. */ diff --git a/gcc/config/aarch64/tuning_models/ampere1.h b/gcc/config/aarch64/tuning_models/ampere1.h index f033016d010f..52503d5e16ac 100644 --- a/gcc/config/aarch64/tuning_models/ampere1.h +++ b/gcc/config/aarch64/tuning_models/ampere1.h @@ -105,7 +105,8 @@ static const struct tune_params ampere1_tunings = | AARCH64_EXTRA_TUNE_FULLY_PIPELINED_FMA), /* tune_flags. */ &ere1_prefetch_tune, AARCH64_LDP_STP_POLICY_ALIGNED, /* ldp_policy_model. */ - AARCH64_LDP_STP_POLICY_ALIGNED /* stp_policy_model. */ + AARCH64_LDP_STP_POLICY_ALIGNED, /* stp_policy_model. */ + nullptr /* dispatch_constraints. */ }; #endif /* GCC_AARCH64_H_AMPERE1. */ diff --git a/gcc/config/aarch64/tuning_models/ampere1a.h b/gcc/config/aarch64/tuning_models/ampere1a.h index 41481a7f077d..ebce521aba1b 100644 --- a/gcc/config/aarch64/tuning_models/ampere1a.h +++ b/gcc/config/aarch64/tuning_models/ampere1a.h @@ -57,7 +57,8 @@ static const struct tune_params ampere1a_tunings = | AARCH64_EXTRA_TUNE_FULLY_PIPELINED_FMA), /* tune_flags. */ &ere1_prefetch_tune, AARCH64_LDP_STP_POLICY_ALIGNED, /* ldp_policy_model. */ - AARCH64_LDP_STP_POLICY_ALIGNED /* stp_policy_model. */ + AARCH64_LDP_STP_POLICY_ALIGNED, /* stp_policy_model. */ + nullptr /* dispatch_constraints. */ }; #endif /* GCC_AARCH64_H_AMPERE1A. */ diff --git a/gcc/config/aarch64/tuning_models/ampere1b.h b/gcc/config/aarch64/tuning_models/ampere1b.h index 2ad6003d65c1..baca72139ecd 100644 --- a/gcc/config/aarch64/tuning_models/ampere1b.h +++ b/gcc/config/aarch64/tuning_models/ampere1b.h @@ -106,7 +106,8 @@ static const struct tune_params ampere1b_tunings = | AARCH64_EXTRA_TUNE_AVOID_CROSS_LOOP_FMA), /* tune_flags. */ &ere1b_prefetch_tune, AARCH64_LDP_STP_POLICY_ALIGNED, /* ldp_policy_model. */ - AARCH64_LDP_STP_POLICY_ALIGNED /* stp_policy_model. */ + AARCH64_LDP_STP_POLICY_ALIGNED, /* stp_policy_model. */ + nullptr /* dispatch_constraints. */ }; #endif /* GCC_AARCH64_H_AMPERE1B */ diff --git a/gcc/config/aarch64/tuning_models/cortexa35.h b/gcc/config/aarch64/tuning_models/cortexa35.h index 56168c8ebc65..7dc1006b4e7f 100644 --- a/gcc/config/aarch64/tuning_models/cortexa35.h +++ b/gcc/config/aarch64/tuning_models/cortexa35.h @@ -56,7 +56,8 @@ static const struct tune_params cortexa35_tunings = (AARCH64_EXTRA_TUNE_NONE), /* tune_flags. */ &generic_prefetch_tune, AARCH64_LDP_STP_POLICY_ALWAYS, /* ldp_policy_model. */ - AARCH64_LDP_STP_POLICY_ALWAYS /* stp_policy_model. */ + AARCH64_LDP_STP_POLICY_ALWAYS, /* stp_policy_model. */ + nullptr /* dispatch_constraints. */ }; #endif /* GCC_AARCH64_H_CORTEXA35. */ diff --git a/gcc/config/aarch64/tuning_models/cortexa53.h b/gcc/config/aarch64/tuning_models/cortexa53.h index 83daae4d38cc..fad352a39c91 100644 --- a/gcc/config/aarch64/tuning_models/cortexa53.h +++ b/gcc/config/aarch64/tuning_models/cortexa53.h @@ -65,7 +65,8 @@ static const struct tune_params cortexa53_tunings = (AARCH64_EXTRA_TUNE_NONE), /* tune_flags. */ &generic_prefetch_tune, AARCH64_LDP_STP_POLICY_ALWAYS, /* ldp_policy_model. */ - AARCH64_LDP_STP_POLICY_ALWAYS /* stp_policy_model. */ + AARCH64_LDP_STP_POLICY_ALWAYS, /* stp_policy_model. */ + nullptr /* dispatch_constraints. */ }; #endif /* GCC_AARCH64_H_CORTEXA53. */ diff --git a/gcc/config/aarch64/tuning_models/cortexa57.h b/gcc/config/aarch64/tuning_models/cortexa57.h index 8da7fa9d80df..dcfa70bb8a2a 100644 --- a/gcc/config/aarch64/tuning_models/cortexa57.h +++ b/gcc/config/aarch64/tuning_models/cortexa57.h @@ -102,7 +102,8 @@ static const struct tune_params cortexa57_tunings = (AARCH64_EXTRA_TUNE_RENAME_FMA_REGS), /* tune_flags. */ &generic_prefetch_tune, AARCH64_LDP_STP_POLICY_ALWAYS, /* ldp_policy_model. */ - AARCH64_LDP_STP_POLICY_ALWAYS /* stp_policy_model. */ + AARCH64_LDP_STP_POLICY_ALWAYS, /* stp_policy_model. */ + nullptr /* dispatch_constraints. */ }; #endif /* GCC_AARCH64_H_CORTEXA57. */ diff --git a/gcc/config/aarch64/tuning_models/cortexa72.h b/gcc/config/aarch64/tuning_models/cortexa72.h index f9a330f4a184..a9cb20a6e8be 100644 --- a/gcc/config/aarch64/tuning_models/cortexa72.h +++ b/gcc/config/aarch64/tuning_models/cortexa72.h @@ -54,7 +54,8 @@ static const struct tune_params cortexa72_tunings = (AARCH64_EXTRA_TUNE_NONE), /* tune_flags. */ &generic_prefetch_tune, AARCH64_LDP_STP_POLICY_ALWAYS, /* ldp_policy_model. */ - AARCH64_LDP_STP_POLICY_ALWAYS /* stp_policy_model. */ + AARCH64_LDP_STP_POLICY_ALWAYS, /* stp_policy_model. */ + nullptr /* dispatch_constraints. */ }; #endif /* GCC_AARCH64_H_CORTEXA72. */ diff --git a/gcc/config/aarch64/tuning_models/cortexa73.h b/gcc/config/aarch64/tuning_models/cortexa73.h index 038fd0896b92..d77a501221ec 100644 --- a/gcc/config/aarch64/tuning_models/cortexa73.h +++ b/gcc/config/aarch64/tuning_models/cortexa73.h @@ -55,7 +55,8 @@ static const struct tune_params cortexa73_tunings = (AARCH64_EXTRA_TUNE_NONE), /* tune_flags. */ &generic_prefetch_tune, AARCH64_LDP_STP_POLICY_ALWAYS, /* ldp_policy_model. */ - AARCH64_LDP_STP_POLICY_ALWAYS /* stp_policy_model. */ + AARCH64_LDP_STP_POLICY_ALWAYS, /* stp_policy_model. */ + nullptr /* dispatch_constraints. */ }; diff --git a/gcc/config/aarch64/tuning_models/cortexx925.h b/gcc/config/aarch64/tuning_models/cortexx925.h index f448493b1bc5..71cc8f0190b1 100644 --- a/gcc/config/aarch64/tuning_models/cortexx925.h +++ b/gcc/config/aarch64/tuning_models/cortexx925.h @@ -226,7 +226,8 @@ static const struct tune_params cortexx925_tunings = | AARCH64_EXTRA_TUNE_AVOID_LDAPUR), /* tune_flags. */ &generic_armv9a_prefetch_tune, AARCH64_LDP_STP_POLICY_ALWAYS, /* ldp_policy_model. */ - AARCH64_LDP_STP_POLICY_ALWAYS /* stp_policy_model. */ + AARCH64_LDP_STP_POLICY_ALWAYS, /* stp_policy_model. */ + nullptr /* dispatch_constraints. */ }; #endif /* GCC_AARCH64_H_CORTEXX925. */ diff --git a/gcc/config/aarch64/tuning_models/emag.h b/gcc/config/aarch64/tuning_models/emag.h index 264a28102998..dbd84e9805b8 100644 --- a/gcc/config/aarch64/tuning_models/emag.h +++ b/gcc/config/aarch64/tuning_models/emag.h @@ -54,7 +54,8 @@ static const struct tune_params emag_tunings = (AARCH64_EXTRA_TUNE_NONE), /* tune_flags. */ &xgene1_prefetch_tune, AARCH64_LDP_STP_POLICY_ALWAYS, /* ldp_policy_model. */ - AARCH64_LDP_STP_POLICY_ALWAYS /* stp_policy_model. */ + AARCH64_LDP_STP_POLICY_ALWAYS, /* stp_policy_model. */ + nullptr /* dispatch_constraints. */ }; #endif /* GCC_AARCH64_H_EMAG. */ diff --git a/gcc/config/aarch64/tuning_models/exynosm1.h b/gcc/config/aarch64/tuning_models/exynosm1.h index 71876df7785e..0a88f51c08ce 100644 --- a/gcc/config/aarch64/tuning_models/exynosm1.h +++ b/gcc/config/aarch64/tuning_models/exynosm1.h @@ -138,7 +138,8 @@ static const struct tune_params exynosm1_tunings = (AARCH64_EXTRA_TUNE_NONE), /* tune_flags. */ &exynosm1_prefetch_tune, AARCH64_LDP_STP_POLICY_ALWAYS, /* ldp_policy_model. */ - AARCH64_LDP_STP_POLICY_ALWAYS /* stp_policy_model. */ + AARCH64_LDP_STP_POLICY_ALWAYS, /* stp_policy_model. */ + nullptr /* dispatch_constraints. */ }; #endif /* GCC_AARCH64_H_EXYNOSM1. */ diff --git a/gcc/config/aarch64/tuning_models/fujitsu_monaka.h b/gcc/config/aarch64/tuning_models/fujitsu_monaka.h index 5dc40243fe38..0643b852dc5e 100644 --- a/gcc/config/aarch64/tuning_models/fujitsu_monaka.h +++ b/gcc/config/aarch64/tuning_models/fujitsu_monaka.h @@ -58,7 +58,8 @@ static const struct tune_params fujitsu_monaka_tunings = | AARCH64_EXTRA_TUNE_MATCHED_VECTOR_THROUGHPUT), /* tune_flags. */ &generic_prefetch_tune, AARCH64_LDP_STP_POLICY_ALWAYS, /* ldp_policy_model. */ - AARCH64_LDP_STP_POLICY_ALWAYS /* stp_policy_model. */ + AARCH64_LDP_STP_POLICY_ALWAYS, /* stp_policy_model. */ + nullptr /* dispatch_constraints. */ }; #endif /* GCC_AARCH64_H_FUJITSU_MONAKA. */ diff --git a/gcc/config/aarch64/tuning_models/generic.h b/gcc/config/aarch64/tuning_models/generic.h index a822c055fe99..4a880b99673c 100644 --- a/gcc/config/aarch64/tuning_models/generic.h +++ b/gcc/config/aarch64/tuning_models/generic.h @@ -186,7 +186,8 @@ static const struct tune_params generic_tunings = (AARCH64_EXTRA_TUNE_CSE_SVE_VL_CONSTANTS), /* tune_flags. */ &generic_prefetch_tune, AARCH64_LDP_STP_POLICY_ALWAYS, /* ldp_policy_model. */ - AARCH64_LDP_STP_POLICY_ALWAYS /* stp_policy_model. */ + AARCH64_LDP_STP_POLICY_ALWAYS, /* stp_policy_model. */ + nullptr /* dispatch_constraints. */ }; #endif /* GCC_AARCH64_H_GENERIC. */ diff --git a/gcc/config/aarch64/tuning_models/generic_armv8_a.h b/gcc/config/aarch64/tuning_models/generic_armv8_a.h index 01080cade464..a448d046db7a 100644 --- a/gcc/config/aarch64/tuning_models/generic_armv8_a.h +++ b/gcc/config/aarch64/tuning_models/generic_armv8_a.h @@ -186,7 +186,8 @@ static const struct tune_params generic_armv8_a_tunings = | AARCH64_EXTRA_TUNE_MATCHED_VECTOR_THROUGHPUT), /* tune_flags. */ &generic_armv8_a_prefetch_tune, AARCH64_LDP_STP_POLICY_ALWAYS, /* ldp_policy_model. */ - AARCH64_LDP_STP_POLICY_ALWAYS /* stp_policy_model. */ + AARCH64_LDP_STP_POLICY_ALWAYS, /* stp_policy_model. */ + nullptr /* dispatch_constraints. */ }; #endif /* GCC_AARCH64_H_GENERIC_ARMV8_A. */ diff --git a/gcc/config/aarch64/tuning_models/generic_armv9_a.h b/gcc/config/aarch64/tuning_models/generic_armv9_a.h index 9eb1a20d3c4e..3bbffb4ae583 100644 --- a/gcc/config/aarch64/tuning_models/generic_armv9_a.h +++ b/gcc/config/aarch64/tuning_models/generic_armv9_a.h @@ -254,7 +254,8 @@ static const struct tune_params generic_armv9_a_tunings = | AARCH64_EXTRA_TUNE_MATCHED_VECTOR_THROUGHPUT), /* tune_flags. */ &generic_armv9a_prefetch_tune, AARCH64_LDP_STP_POLICY_ALWAYS, /* ldp_policy_model. */ - AARCH64_LDP_STP_POLICY_ALWAYS /* stp_policy_model. */ + AARCH64_LDP_STP_POLICY_ALWAYS, /* stp_policy_model. */ + nullptr /* dispatch_constraints. */ }; #endif /* GCC_AARCH64_H_GENERIC_ARMV9_A. */ diff --git a/gcc/config/aarch64/tuning_models/neoverse512tvb.h b/gcc/config/aarch64/tuning_models/neoverse512tvb.h index 964b4ac284a8..58297d013c61 100644 --- a/gcc/config/aarch64/tuning_models/neoverse512tvb.h +++ b/gcc/config/aarch64/tuning_models/neoverse512tvb.h @@ -161,7 +161,8 @@ static const struct tune_params neoverse512tvb_tunings = | AARCH64_EXTRA_TUNE_AVOID_PRED_RMW), /* tune_flags. */ &generic_armv9a_prefetch_tune, AARCH64_LDP_STP_POLICY_ALWAYS, /* ldp_policy_model. */ - AARCH64_LDP_STP_POLICY_ALWAYS /* stp_policy_model. */ + AARCH64_LDP_STP_POLICY_ALWAYS, /* stp_policy_model. */ + nullptr /* dispatch_constraints. */ }; #endif /* GCC_AARCH64_H_NEOVERSE512TVB. */ diff --git a/gcc/config/aarch64/tuning_models/neoversen1.h b/gcc/config/aarch64/tuning_models/neoversen1.h index 9dc37bd7fd6d..bce5677940ab 100644 --- a/gcc/config/aarch64/tuning_models/neoversen1.h +++ b/gcc/config/aarch64/tuning_models/neoversen1.h @@ -54,7 +54,8 @@ static const struct tune_params neoversen1_tunings = (AARCH64_EXTRA_TUNE_BASE), /* tune_flags. */ &generic_armv9a_prefetch_tune, AARCH64_LDP_STP_POLICY_ALWAYS, /* ldp_policy_model. */ - AARCH64_LDP_STP_POLICY_ALWAYS /* stp_policy_model. */ + AARCH64_LDP_STP_POLICY_ALWAYS, /* stp_policy_model. */ + nullptr /* dispatch_constraints. */ }; #endif /* GCC_AARCH64_H_NEOVERSEN1. */ diff --git a/gcc/config/aarch64/tuning_models/neoversen2.h b/gcc/config/aarch64/tuning_models/neoversen2.h index 9fbc059ea12c..29ec4040cb3b 100644 --- a/gcc/config/aarch64/tuning_models/neoversen2.h +++ b/gcc/config/aarch64/tuning_models/neoversen2.h @@ -223,7 +223,8 @@ static const struct tune_params neoversen2_tunings = | AARCH64_EXTRA_TUNE_AVOID_PRED_RMW), /* tune_flags. */ &generic_armv9a_prefetch_tune, AARCH64_LDP_STP_POLICY_ALWAYS, /* ldp_policy_model. */ - AARCH64_LDP_STP_POLICY_ALWAYS /* stp_policy_model. */ + AARCH64_LDP_STP_POLICY_ALWAYS, /* stp_policy_model. */ + nullptr /* dispatch_constraints. */ }; #endif /* GCC_AARCH64_H_NEOVERSEN2. */ diff --git a/gcc/config/aarch64/tuning_models/neoversen3.h b/gcc/config/aarch64/tuning_models/neoversen3.h index 78177e78e070..bade1a440a28 100644 --- a/gcc/config/aarch64/tuning_models/neoversen3.h +++ b/gcc/config/aarch64/tuning_models/neoversen3.h @@ -222,7 +222,8 @@ static const struct tune_params neoversen3_tunings = | AARCH64_EXTRA_TUNE_MATCHED_VECTOR_THROUGHPUT), /* tune_flags. */ &generic_armv9a_prefetch_tune, AARCH64_LDP_STP_POLICY_ALWAYS, /* ldp_policy_model. */ - AARCH64_LDP_STP_POLICY_ALWAYS /* stp_policy_model. */ + AARCH64_LDP_STP_POLICY_ALWAYS, /* stp_policy_model. */ + nullptr /* dispatch_constraints. */ }; #endif /* GCC_AARCH64_H_NEOVERSEN3. */ diff --git a/gcc/config/aarch64/tuning_models/neoversev1.h b/gcc/config/aarch64/tuning_models/neoversev1.h index f1ec7dcdda7b..4e9f66b1f1b3 100644 --- a/gcc/config/aarch64/tuning_models/neoversev1.h +++ b/gcc/config/aarch64/tuning_models/neoversev1.h @@ -232,7 +232,8 @@ static const struct tune_params neoversev1_tunings = | AARCH64_EXTRA_TUNE_AVOID_PRED_RMW), /* tune_flags. */ &generic_armv9a_prefetch_tune, AARCH64_LDP_STP_POLICY_ALWAYS, /* ldp_policy_model. */ - AARCH64_LDP_STP_POLICY_ALWAYS /* stp_policy_model. */ + AARCH64_LDP_STP_POLICY_ALWAYS, /* stp_policy_model. */ + nullptr /* dispatch_constraints. */ }; diff --git a/gcc/config/aarch64/tuning_models/neoversev2.h b/gcc/config/aarch64/tuning_models/neoversev2.h index 266d8f190a25..c6649f4cc082 100644 --- a/gcc/config/aarch64/tuning_models/neoversev2.h +++ b/gcc/config/aarch64/tuning_models/neoversev2.h @@ -21,6 +21,8 @@ #define GCC_AARCH64_H_NEOVERSEV2 #include "generic.h" +#include "vec.h" +#include "../aarch64-sched-dispatch.h" static const struct cpu_regmove_cost neoversev2_regmove_cost = { @@ -188,6 +190,142 @@ static const struct cpu_vector_cost neoversev2_vector_cost = &neoversev2_vec_issue_info /* issue_info */ }; +/* Neoverse V2 dispatch constraint types. */ +enum neoversev2_dispatch_constraint_type +{ + TOTAL_SLOTS, /* total slots */ + BS01_PIPE, /* b, s0, s1 pipelines */ + M0_PIPE, /* m0 pipeline */ + M_PIPE, /* m pipelines */ + BSM_PIPE, /* b, s, m pipelines */ + V02_PIPE, /* v0, v2 pipelines */ + V13_PIPE, /* v1, v3 pipelines */ + V_PIPE, /* v pipelines */ + L_PIPE /* l pipelines */ +}; + +/* Neoverse V2 dispatch constraints for instruction scheduling. */ +static const int neoversev2_dispatch_max_slots[] = { + 16, /* total slots */ + 4, /* b, s0, s1 pipelines */ + 2, /* m0 pipeline */ + 4, /* m pipelines */ + 8, /* b, s, m pipelines */ + 2, /* v0, v2 pipelines */ + 2, /* v1, v3 pipelines */ + 4, /* v pipelines */ + 6 /* l pipelines */ +}; + +/* Neoverse V2 dispatch constraint callback function. + Determines which constraints apply to an instruction and how many slots + it requires. Returns a vec of (constraint_index, slots_required) pairs. */ +static vec> +neoversev2_dispatch_constraint_callback (rtx_insn *insn) +{ + auto dispatch_group = get_attr_neoversev2_dispatch (insn); + vec> constraints = vNULL; + int total_slots = 1; + + switch (dispatch_group) + { + case NEOVERSEV2_DISPATCH_NONE: + break; + + case NEOVERSEV2_DISPATCH_BS01: + constraints.safe_push ({BS01_PIPE, 1}); + constraints.safe_push ({BSM_PIPE, 1}); + break; + + case NEOVERSEV2_DISPATCH_BSM: + constraints.safe_push ({BSM_PIPE, 1}); + break; + + case NEOVERSEV2_DISPATCH_M: + constraints.safe_push ({M_PIPE, 1}); + constraints.safe_push ({BSM_PIPE, 1}); + break; + + case NEOVERSEV2_DISPATCH_M0: + constraints.safe_push ({M0_PIPE, 1}); + constraints.safe_push ({M_PIPE, 1}); + constraints.safe_push ({BSM_PIPE, 1}); + break; + + case NEOVERSEV2_DISPATCH_V02: + constraints.safe_push ({V02_PIPE, 1}); + constraints.safe_push ({V_PIPE, 1}); + break; + + case NEOVERSEV2_DISPATCH_V13: + constraints.safe_push ({V13_PIPE, 1}); + constraints.safe_push ({V_PIPE, 1}); + break; + + case NEOVERSEV2_DISPATCH_V: + constraints.safe_push ({V_PIPE, 1}); + break; + + case NEOVERSEV2_DISPATCH_L01: + constraints.safe_push ({L_PIPE, 1}); + break; + + case NEOVERSEV2_DISPATCH_L: + constraints.safe_push ({L_PIPE, 1}); + break; + + case NEOVERSEV2_DISPATCH_BSM_L: + constraints.safe_push ({BSM_PIPE, 1}); + constraints.safe_push ({L_PIPE, 1}); + break; + + case NEOVERSEV2_DISPATCH_M_L: + constraints.safe_push ({M_PIPE, 1}); + constraints.safe_push ({BSM_PIPE, 1}); + constraints.safe_push ({L_PIPE, 1}); + break; + + case NEOVERSEV2_DISPATCH_M0_V: + constraints.safe_push ({M0_PIPE, 1}); + constraints.safe_push ({M_PIPE, 1}); + constraints.safe_push ({BSM_PIPE, 1}); + constraints.safe_push ({V_PIPE, 1}); + break; + + case NEOVERSEV2_DISPATCH_V_V13: + constraints.safe_push ({V_PIPE, 2}); + total_slots = 2; + break; + + case NEOVERSEV2_DISPATCH_V_L: + constraints.safe_push ({V_PIPE, 1}); + constraints.safe_push ({L_PIPE, 1}); + break; + + case NEOVERSEV2_DISPATCH_L01_D: + constraints.safe_push ({L_PIPE, 2}); + total_slots = 2; + break; + + case NEOVERSEV2_DISPATCH_L01_V: + constraints.safe_push ({V_PIPE, 1}); + constraints.safe_push ({L_PIPE, 1}); + break; + } + + /* Add total slots constraint */ + constraints.safe_push ({TOTAL_SLOTS, total_slots}); + + return constraints; +}; + +/* Neoverse V2 dispatch constraints configuration. */ +static const struct dispatch_constraint_info neoversev2_dispatch_constraint_info = { + neoversev2_dispatch_max_slots, /* max_slots */ + ARRAY_SIZE (neoversev2_dispatch_max_slots), /* num_constraints */ + neoversev2_dispatch_constraint_callback /* callback */ +}; + static const struct tune_params neoversev2_tunings = { &cortexa76_extra_costs, @@ -221,10 +359,12 @@ static const struct tune_params neoversev2_tunings = | AARCH64_EXTRA_TUNE_CSE_SVE_VL_CONSTANTS | AARCH64_EXTRA_TUNE_MATCHED_VECTOR_THROUGHPUT | AARCH64_EXTRA_TUNE_AVOID_PRED_RMW - | AARCH64_EXTRA_TUNE_AVOID_LDAPUR), /* tune_flags. */ + | AARCH64_EXTRA_TUNE_AVOID_LDAPUR + | AARCH64_EXTRA_TUNE_DISPATCH_SCHED), /* tune_flags. */ &generic_armv9a_prefetch_tune, AARCH64_LDP_STP_POLICY_ALWAYS, /* ldp_policy_model. */ - AARCH64_LDP_STP_POLICY_ALWAYS /* stp_policy_model. */ + AARCH64_LDP_STP_POLICY_ALWAYS, /* stp_policy_model. */ + &neoversev2_dispatch_constraint_info /* dispatch_constraints. */ }; #endif /* GCC_AARCH64_H_NEOVERSEV2. */ diff --git a/gcc/config/aarch64/tuning_models/neoversev3.h b/gcc/config/aarch64/tuning_models/neoversev3.h index f5566d270dac..296d033fbe48 100644 --- a/gcc/config/aarch64/tuning_models/neoversev3.h +++ b/gcc/config/aarch64/tuning_models/neoversev3.h @@ -224,7 +224,8 @@ static const struct tune_params neoversev3_tunings = | AARCH64_EXTRA_TUNE_AVOID_LDAPUR), /* tune_flags. */ &generic_armv9a_prefetch_tune, AARCH64_LDP_STP_POLICY_ALWAYS, /* ldp_policy_model. */ - AARCH64_LDP_STP_POLICY_ALWAYS /* stp_policy_model. */ + AARCH64_LDP_STP_POLICY_ALWAYS, /* stp_policy_model. */ + nullptr /* dispatch_constraints. */ }; #endif /* GCC_AARCH64_H_NEOVERSEV3. */ diff --git a/gcc/config/aarch64/tuning_models/neoversev3ae.h b/gcc/config/aarch64/tuning_models/neoversev3ae.h index 5796e52a2667..f0fc21c293f4 100644 --- a/gcc/config/aarch64/tuning_models/neoversev3ae.h +++ b/gcc/config/aarch64/tuning_models/neoversev3ae.h @@ -224,7 +224,8 @@ static const struct tune_params neoversev3ae_tunings = | AARCH64_EXTRA_TUNE_AVOID_LDAPUR), /* tune_flags. */ &generic_armv9a_prefetch_tune, AARCH64_LDP_STP_POLICY_ALWAYS, /* ldp_policy_model. */ - AARCH64_LDP_STP_POLICY_ALWAYS /* stp_policy_model. */ + AARCH64_LDP_STP_POLICY_ALWAYS, /* stp_policy_model. */ + nullptr /* dispatch_constraints. */ }; #endif /* GCC_AARCH64_H_NEOVERSEV3AE. */ diff --git a/gcc/config/aarch64/tuning_models/olympus.h b/gcc/config/aarch64/tuning_models/olympus.h index 268789db019a..d19aca8c323d 100644 --- a/gcc/config/aarch64/tuning_models/olympus.h +++ b/gcc/config/aarch64/tuning_models/olympus.h @@ -204,7 +204,8 @@ static struct tune_params olympus_tunings = | AARCH64_EXTRA_TUNE_AVOID_PRED_RMW), /* tune_flags. */ &olympus_prefetch_tune, AARCH64_LDP_STP_POLICY_ALWAYS, /* ldp_policy_model. */ - AARCH64_LDP_STP_POLICY_ALWAYS /* stp_policy_model. */ + AARCH64_LDP_STP_POLICY_ALWAYS, /* stp_policy_model. */ + nullptr /* dispatch_constraints. */ }; #endif /* GCC_AARCH64_H_OLYMPUS. */ diff --git a/gcc/config/aarch64/tuning_models/qdf24xx.h b/gcc/config/aarch64/tuning_models/qdf24xx.h index 583d30a4d17e..328d8d455592 100644 --- a/gcc/config/aarch64/tuning_models/qdf24xx.h +++ b/gcc/config/aarch64/tuning_models/qdf24xx.h @@ -130,7 +130,8 @@ static const struct tune_params qdf24xx_tunings = (AARCH64_EXTRA_TUNE_NONE), /* tune_flags. */ &qdf24xx_prefetch_tune, AARCH64_LDP_STP_POLICY_ALWAYS, /* ldp_policy_model. */ - AARCH64_LDP_STP_POLICY_ALWAYS /* stp_policy_model. */ + AARCH64_LDP_STP_POLICY_ALWAYS, /* stp_policy_model. */ + nullptr /* dispatch_constraints. */ }; #endif /* GCC_AARCH64_H_QDF24XX. */ diff --git a/gcc/config/aarch64/tuning_models/saphira.h b/gcc/config/aarch64/tuning_models/saphira.h index 684f3951a603..03cfcb0107b4 100644 --- a/gcc/config/aarch64/tuning_models/saphira.h +++ b/gcc/config/aarch64/tuning_models/saphira.h @@ -56,7 +56,8 @@ static const struct tune_params saphira_tunings = (AARCH64_EXTRA_TUNE_NONE), /* tune_flags. */ &generic_prefetch_tune, AARCH64_LDP_STP_POLICY_ALWAYS, /* ldp_policy_model. */ - AARCH64_LDP_STP_POLICY_ALWAYS /* stp_policy_model. */ + AARCH64_LDP_STP_POLICY_ALWAYS, /* stp_policy_model. */ + nullptr /* dispatch_constraints. */ }; #endif /* GCC_AARCH64_H_SAPHIRA. */ diff --git a/gcc/config/aarch64/tuning_models/thunderx.h b/gcc/config/aarch64/tuning_models/thunderx.h index d79c1391b8c4..1386d6ad28cd 100644 --- a/gcc/config/aarch64/tuning_models/thunderx.h +++ b/gcc/config/aarch64/tuning_models/thunderx.h @@ -111,7 +111,8 @@ static const struct tune_params thunderx_tunings = (AARCH64_EXTRA_TUNE_CHEAP_SHIFT_EXTEND), /* tune_flags. */ &thunderx_prefetch_tune, AARCH64_LDP_STP_POLICY_ALIGNED, /* ldp_policy_model. */ - AARCH64_LDP_STP_POLICY_ALIGNED /* stp_policy_model. */ + AARCH64_LDP_STP_POLICY_ALIGNED, /* stp_policy_model. */ + nullptr /* dispatch_constraints. */ }; #endif /* GCC_AARCH64_H_THUNDERX. */ diff --git a/gcc/config/aarch64/tuning_models/thunderx2t99.h b/gcc/config/aarch64/tuning_models/thunderx2t99.h index 513c61580841..495cf86b162d 100644 --- a/gcc/config/aarch64/tuning_models/thunderx2t99.h +++ b/gcc/config/aarch64/tuning_models/thunderx2t99.h @@ -131,7 +131,8 @@ static const struct tune_params thunderx2t99_tunings = (AARCH64_EXTRA_TUNE_NONE), /* tune_flags. */ &thunderx2t99_prefetch_tune, AARCH64_LDP_STP_POLICY_ALWAYS, /* ldp_policy_model. */ - AARCH64_LDP_STP_POLICY_ALWAYS /* stp_policy_model. */ + AARCH64_LDP_STP_POLICY_ALWAYS, /* stp_policy_model. */ + nullptr /* dispatch_constraints. */ }; #endif /* GCC_AARCH64_H_THUNDERX2T99. */ diff --git a/gcc/config/aarch64/tuning_models/thunderx3t110.h b/gcc/config/aarch64/tuning_models/thunderx3t110.h index a2547b8e54de..2bb6b39eb662 100644 --- a/gcc/config/aarch64/tuning_models/thunderx3t110.h +++ b/gcc/config/aarch64/tuning_models/thunderx3t110.h @@ -130,7 +130,8 @@ static const struct tune_params thunderx3t110_tunings = (AARCH64_EXTRA_TUNE_NONE), /* tune_flags. */ &thunderx3t110_prefetch_tune, AARCH64_LDP_STP_POLICY_ALWAYS, /* ldp_policy_model. */ - AARCH64_LDP_STP_POLICY_ALWAYS /* stp_policy_model. */ + AARCH64_LDP_STP_POLICY_ALWAYS, /* stp_policy_model. */ + nullptr /* dispatch_constraints. */ }; #endif /* GCC_AARCH64_H_THUNDERX3T110. */ diff --git a/gcc/config/aarch64/tuning_models/thunderxt88.h b/gcc/config/aarch64/tuning_models/thunderxt88.h index 6be5c526fc12..881712bd3f10 100644 --- a/gcc/config/aarch64/tuning_models/thunderxt88.h +++ b/gcc/config/aarch64/tuning_models/thunderxt88.h @@ -66,7 +66,8 @@ static const struct tune_params thunderxt88_tunings = (AARCH64_EXTRA_TUNE_NONE), /* tune_flags. */ &thunderxt88_prefetch_tune, AARCH64_LDP_STP_POLICY_ALIGNED, /* ldp_policy_model. */ - AARCH64_LDP_STP_POLICY_ALIGNED /* stp_policy_model. */ + AARCH64_LDP_STP_POLICY_ALIGNED, /* stp_policy_model. */ + nullptr /* dispatch_constraints. */ }; #endif /* GCC_AARCH64_H_THUNDERXT88. */ diff --git a/gcc/config/aarch64/tuning_models/tsv110.h b/gcc/config/aarch64/tuning_models/tsv110.h index 458286e0e80d..c24204edf244 100644 --- a/gcc/config/aarch64/tuning_models/tsv110.h +++ b/gcc/config/aarch64/tuning_models/tsv110.h @@ -131,7 +131,8 @@ static const struct tune_params tsv110_tunings = (AARCH64_EXTRA_TUNE_NONE), /* tune_flags. */ &tsv110_prefetch_tune, AARCH64_LDP_STP_POLICY_ALWAYS, /* ldp_policy_model. */ - AARCH64_LDP_STP_POLICY_ALWAYS /* stp_policy_model. */ + AARCH64_LDP_STP_POLICY_ALWAYS, /* stp_policy_model. */ + nullptr /* dispatch_constraints. */ }; #endif /* GCC_AARCH64_H_TSV110. */ diff --git a/gcc/config/aarch64/tuning_models/xgene1.h b/gcc/config/aarch64/tuning_models/xgene1.h index b4f01ee92f54..5c7954a16e7e 100644 --- a/gcc/config/aarch64/tuning_models/xgene1.h +++ b/gcc/config/aarch64/tuning_models/xgene1.h @@ -139,7 +139,8 @@ static const struct tune_params xgene1_tunings = (AARCH64_EXTRA_TUNE_NONE), /* tune_flags. */ &xgene1_prefetch_tune, AARCH64_LDP_STP_POLICY_ALWAYS, /* ldp_policy_model. */ - AARCH64_LDP_STP_POLICY_ALWAYS /* stp_policy_model. */ + AARCH64_LDP_STP_POLICY_ALWAYS, /* stp_policy_model. */ + nullptr /* dispatch_constraints. */ }; #endif /* GCC_AARCH64_H_XGENE1. */ diff --git a/gcc/config/alpha/linux.h b/gcc/config/alpha/linux.h index c4e843ff6f5b..758817a1c661 100644 --- a/gcc/config/alpha/linux.h +++ b/gcc/config/alpha/linux.h @@ -110,7 +110,7 @@ along with GCC; see the file COPYING3. If not see %{shared|pie:crtendS.o%s;:crtend.o%s} crtn.o%s" #define LINK_GCC_C_SEQUENCE_SPEC \ - "%{static|static-pie:--start-group} %G %{!nolibc:%L} \ + "%{static|static-pie:--start-group} %G %{!nolibc:" LINK_LIBATOMIC_SPEC "%L} \ %{static|static-pie:--end-group}%{!static:%{!static-pie:%G}}" /* Use --as-needed -lgcc_s for eh support. */ diff --git a/gcc/config/arm/arm.cc b/gcc/config/arm/arm.cc index 8b951f3d4a67..f074a429200b 100644 --- a/gcc/config/arm/arm.cc +++ b/gcc/config/arm/arm.cc @@ -287,7 +287,6 @@ static bool arm_class_likely_spilled_p (reg_class_t); static HOST_WIDE_INT arm_vector_alignment (const_tree type); static bool arm_vector_alignment_reachable (const_tree type, bool is_packed); static bool arm_builtin_support_vector_misalignment (machine_mode mode, - const_tree type, int misalignment, bool is_packed, bool is_gather_scatter); @@ -30662,7 +30661,7 @@ arm_vector_alignment_reachable (const_tree type, bool is_packed) static bool arm_builtin_support_vector_misalignment (machine_mode mode, - const_tree type, int misalignment, + int misalignment, bool is_packed, bool is_gather_scatter) { @@ -30688,7 +30687,7 @@ arm_builtin_support_vector_misalignment (machine_mode mode, return ((misalignment % align) == 0); } - return default_builtin_support_vector_misalignment (mode, type, misalignment, + return default_builtin_support_vector_misalignment (mode, misalignment, is_packed, is_gather_scatter); } diff --git a/gcc/config/arm/mve.md b/gcc/config/arm/mve.md index 8527bd753e30..96faa05908f0 100644 --- a/gcc/config/arm/mve.md +++ b/gcc/config/arm/mve.md @@ -18,8 +18,8 @@ ;; . (define_insn "mve_mov" - [(set (match_operand:MVE_types 0 "nonimmediate_operand" "=w,w,r,w , w, r,Ux,w") - (match_operand:MVE_types 1 "general_operand" " w,r,w,DnDm,UxUi,r,w, Ul"))] + [(set (match_operand:MVE_types 0 "nonimmediate_operand" "=w,w,r,w ,w, r,Ux,w") + (match_operand:MVE_types 1 "general_operand" " w,r,w,DnDm,Ux,r,w, UlUi"))] "TARGET_HAVE_MVE || TARGET_HAVE_MVE_FLOAT" { switch (which_alternative) @@ -56,7 +56,7 @@ } } - case 4: /* [w,UxUi]. */ + case 4: /* [w,Ux]. */ if (mode == V2DFmode || mode == V2DImode || mode == TImode) return "vldrw.u32\t%q0, %E1"; @@ -73,7 +73,7 @@ else return "vstr.\t%q1, %E0"; - case 7: /* [w,Ul]. */ + case 7: /* [w,UlUi]. */ return output_move_neon (operands); default: @@ -91,8 +91,8 @@ (symbol_ref "CODE_FOR_nothing")]) (set_attr "type" "mve_move,mve_move,mve_move,mve_move,mve_load,multiple,mve_store,mve_load") (set_attr "length" "4,8,8,4,4,8,4,8") - (set_attr "thumb2_pool_range" "*,*,*,*,1018,*,*,*") - (set_attr "neg_pool_range" "*,*,*,*,996,*,*,*")]) + (set_attr "thumb2_pool_range" "*,*,*,*,*,*,*,1016") + (set_attr "thumb2_neg_pool_range" "*,*,*,*,*,*,*,996")]) ;; ;; [vdupq_n_u, vdupq_n_s, vdupq_n_f] diff --git a/gcc/config/arm/uclinux-elf.h b/gcc/config/arm/uclinux-elf.h index 1e953d65281e..d7b99f5ff9af 100644 --- a/gcc/config/arm/uclinux-elf.h +++ b/gcc/config/arm/uclinux-elf.h @@ -67,8 +67,9 @@ #undef LINK_GCC_C_SEQUENCE_SPEC #define LINK_GCC_C_SEQUENCE_SPEC \ - "%{static|static-pie:--start-group} %G %{!nolibc:%L} \ - %{static|static-pie:--end-group}%{!static:%{!static-pie:%G %{!nolibc:%L}}}" + "%{static|static-pie:--start-group} %G %{!nolibc:" LINK_LIBATOMIC_SPEC "%L} \ + %{static|static-pie:--end-group}%{!static:%{!static-pie:%G %{!nolibc:" \ + LINK_LIBATOMIC_SPEC "%L}}}" /* Use --as-needed -lgcc_s for eh support. */ #ifdef HAVE_LD_AS_NEEDED diff --git a/gcc/config/arm/unknown-elf.h b/gcc/config/arm/unknown-elf.h index ab3918283d8c..a796d8702bd0 100644 --- a/gcc/config/arm/unknown-elf.h +++ b/gcc/config/arm/unknown-elf.h @@ -93,4 +93,4 @@ udivmoddi4, which will depend on the exception unwind routines, which will depend on abort, which is defined in libc. */ #undef LINK_GCC_C_SEQUENCE_SPEC -#define LINK_GCC_C_SEQUENCE_SPEC "--start-group %G %{!nolibc:%L} --end-group" +#define LINK_GCC_C_SEQUENCE_SPEC "--start-group %G %{!nolibc:" LINK_LIBATOMIC_SPEC "%L} --end-group" diff --git a/gcc/config/avr/avr-mcus.def b/gcc/config/avr/avr-mcus.def index 2e7c8ac736e8..896623d039e3 100644 --- a/gcc/config/avr/avr-mcus.def +++ b/gcc/config/avr/avr-mcus.def @@ -411,6 +411,10 @@ AVR_MCU ("avr16eb14", ARCH_AVRXMEGA3, AVR_CVT, "__AVR_AVR AVR_MCU ("avr16eb20", ARCH_AVRXMEGA3, AVR_CVT, "__AVR_AVR16EB20__", 0x7800, 0x0, 0x4000, 0x8000) AVR_MCU ("avr16eb28", ARCH_AVRXMEGA3, AVR_CVT, "__AVR_AVR16EB28__", 0x7800, 0x0, 0x4000, 0x8000) AVR_MCU ("avr16eb32", ARCH_AVRXMEGA3, AVR_CVT, "__AVR_AVR16EB32__", 0x7800, 0x0, 0x4000, 0x8000) +AVR_MCU ("avr32eb14", ARCH_AVRXMEGA3, AVR_CVT, "__AVR_AVR32EB14__", 0x7400, 0x0, 0x8000, 0x8000) +AVR_MCU ("avr32eb20", ARCH_AVRXMEGA3, AVR_CVT, "__AVR_AVR32EB20__", 0x7400, 0x0, 0x8000, 0x8000) +AVR_MCU ("avr32eb28", ARCH_AVRXMEGA3, AVR_CVT, "__AVR_AVR32EB28__", 0x7400, 0x0, 0x8000, 0x8000) +AVR_MCU ("avr32eb32", ARCH_AVRXMEGA3, AVR_CVT, "__AVR_AVR32EB32__", 0x7400, 0x0, 0x8000, 0x8000) AVR_MCU ("avr16ea28", ARCH_AVRXMEGA3, AVR_CVT, "__AVR_AVR16EA28__", 0x7800, 0x0, 0x4000, 0x8000) AVR_MCU ("avr16ea32", ARCH_AVRXMEGA3, AVR_CVT, "__AVR_AVR16EA32__", 0x7800, 0x0, 0x4000, 0x8000) AVR_MCU ("avr16ea48", ARCH_AVRXMEGA3, AVR_CVT, "__AVR_AVR16EA48__", 0x7800, 0x0, 0x4000, 0x8000) diff --git a/gcc/config/avr/avr.cc b/gcc/config/avr/avr.cc index 6c7ad4fec8ee..033bd09e7bfc 100644 --- a/gcc/config/avr/avr.cc +++ b/gcc/config/avr/avr.cc @@ -10142,16 +10142,17 @@ avr_out_insv (rtx_insn *insn, rtx xop[], int *plen) } -/* Output instructions to extract a bit to 8-bit register XOP[0]. - The input XOP[1] is a register or an 8-bit MEM in the lower I/O range. - XOP[2] is the const_int bit position. Return "". +/* Output instructions to extract a bit to 8-bit register OP[0]. + The input OP[1] is a register or an 8-bit MEM in the lower I/O range. + OP[2] is the const_int bit position. Return "". PLEN != 0: Set *PLEN to the code length in words. Don't output anything. PLEN == 0: Output instructions. */ const char * -avr_out_extr (rtx_insn *insn, rtx xop[], int *plen) +avr_out_extr (rtx_insn *insn, rtx op[], int *plen) { + rtx xop[] = { op[0], op[1], op[2] }; rtx dest = xop[0]; rtx src = xop[1]; int bit = INTVAL (xop[2]); @@ -10209,16 +10210,17 @@ avr_out_extr (rtx_insn *insn, rtx xop[], int *plen) } -/* Output instructions to extract a negated bit to 8-bit register XOP[0]. - The input XOP[1] is an 8-bit register or MEM in the lower I/O range. - XOP[2] is the const_int bit position. Return "". +/* Output instructions to extract a negated bit to 8-bit register OP[0]. + The input OP[1] is an 8-bit register or MEM in the lower I/O range. + OP[2] is the const_int bit position. Return "". PLEN != 0: Set *PLEN to the code length in words. Don't output anything. PLEN == 0: Output instructions. */ const char * -avr_out_extr_not (rtx_insn * /* insn */, rtx xop[], int *plen) +avr_out_extr_not (rtx_insn * /* insn */, rtx op[], int *plen) { + rtx xop[] = { op[0], op[1], op[2] }; rtx dest = xop[0]; rtx src = xop[1]; int bit = INTVAL (xop[2]); diff --git a/gcc/config/avr/avrlibc.h b/gcc/config/avr/avrlibc.h index 409a69451621..0e87fc4b8c55 100644 --- a/gcc/config/avr/avrlibc.h +++ b/gcc/config/avr/avrlibc.h @@ -36,4 +36,4 @@ along with GCC; see the file COPYING3. If not see #undef LINK_GCC_C_SEQUENCE_SPEC #define LINK_GCC_C_SEQUENCE_SPEC \ - "--start-group %G %{!nolibc:%L} --end-group" + "--start-group %G %{!nolibc:" LINK_LIBATOMIC_SPEC "%L} --end-group" diff --git a/gcc/config/bfin/linux.h b/gcc/config/bfin/linux.h index c3cecf776df6..b7599798742c 100644 --- a/gcc/config/bfin/linux.h +++ b/gcc/config/bfin/linux.h @@ -35,7 +35,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see #undef LINK_GCC_C_SEQUENCE_SPEC #define LINK_GCC_C_SEQUENCE_SPEC \ - "%{static|static-pie:--start-group} %{mfast-fp:-lbffastfp} %G %{!nolibc:%L} \ + "%{static|static-pie:--start-group} %{mfast-fp:-lbffastfp} %G %{!nolibc:" LINK_LIBATOMIC_SPEC "%L} \ %{static|static-pie:--end-group} \ %{!static:%{!static-pie:%{mfast-fp:-lbffastfp} %G}}" diff --git a/gcc/config/darwin.h b/gcc/config/darwin.h index c3e28e2fa81c..e23414c00b6d 100644 --- a/gcc/config/darwin.h +++ b/gcc/config/darwin.h @@ -487,7 +487,7 @@ extern GTY(()) int darwin_ms_struct; depend on libgcc. */ #undef LINK_GCC_C_SEQUENCE_SPEC #define LINK_GCC_C_SEQUENCE_SPEC \ - "%G %{!nolibc:%L} " + "%G %{!nolibc:" LINK_LIBATOMIC_SPEC "%L} " /* ld64 supports a sysroot, it just has a different name and there's no easy way to check for it at config time. */ diff --git a/gcc/config/default-jit.cc b/gcc/config/default-jit.cc new file mode 100644 index 000000000000..a03308ef6dab --- /dev/null +++ b/gcc/config/default-jit.cc @@ -0,0 +1,30 @@ +/* Default JIT language target hooks initializer. + Copyright (C) 2023 Free Software Foundation, Inc. + +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 +. */ + +#define INCLUDE_STRING +#include "config.h" +#include "system.h" +#include "coretypes.h" +#include "tm_jit.h" +#include "jit/jit-target.h" +#include "jit/jit-target-def.h" + +/* Do not include tm.h or tm_p.h here; definitions needed by the target + architecture to initialize targetjitm should instead be added to tm_jit.h. + */ + +struct gcc_targetjitm targetjitm = TARGETJITM_INITIALIZER; diff --git a/gcc/config/epiphany/epiphany.cc b/gcc/config/epiphany/epiphany.cc index f53a643575b1..2446b02389aa 100644 --- a/gcc/config/epiphany/epiphany.cc +++ b/gcc/config/epiphany/epiphany.cc @@ -2815,15 +2815,15 @@ epiphany_vector_alignment_reachable (const_tree type, bool is_packed) } static bool -epiphany_support_vector_misalignment (machine_mode mode, const_tree type, - int misalignment, bool is_packed, +epiphany_support_vector_misalignment (machine_mode mode, int misalignment, + bool is_packed, bool is_gather_scatter) { if (is_gather_scatter) return true; if (GET_MODE_SIZE (mode) == 8 && misalignment % 4 == 0) return true; - return default_builtin_support_vector_misalignment (mode, type, misalignment, + return default_builtin_support_vector_misalignment (mode, misalignment, is_packed, is_gather_scatter); } diff --git a/gcc/config/gcn/gcn-devices.def b/gcc/config/gcn/gcn-devices.def index 426acf0cb7a5..b27385bc565e 100644 --- a/gcc/config/gcn/gcn-devices.def +++ b/gcc/config/gcn/gcn-devices.def @@ -222,7 +222,7 @@ GCN_DEVICE(gfx1030, GFX1030, 0x36, ISA_RDNA2, /* SRAM_ECC default */ HSACO_ATTR_UNSUPPORTED, /* WAVE64 mode */ HSACO_ATTR_ON, /* CU mode */ HSACO_ATTR_ON, - /* Max ISA VGPRs */ 512, /* 512 SIMD32 = 256 wavefrontsize64. */ + /* Max ISA VGPRs */ 512, /* Generic code obj version */ 0, /* non-generic */ /* Architecture Family */ GFX10, /* Generic Name */ GFX10_3_GENERIC @@ -233,7 +233,7 @@ GCN_DEVICE(gfx1031, GFX1031, 0x37, ISA_RDNA2, /* SRAM_ECC default */ HSACO_ATTR_UNSUPPORTED, /* WAVE64 mode */ HSACO_ATTR_ON, /* CU mode */ HSACO_ATTR_ON, - /* Max ISA VGPRs */ 512, /* 512 SIMD32 = 256 wavefrontsize64. */ + /* Max ISA VGPRs */ 512, /* Generic code obj version */ 0, /* non-generic */ /* Architecture Family */ GFX10, /* Generic Name */ GFX10_3_GENERIC @@ -244,7 +244,7 @@ GCN_DEVICE(gfx1032, GFX1032, 0x38, ISA_RDNA2, /* SRAM_ECC default */ HSACO_ATTR_UNSUPPORTED, /* WAVE64 mode */ HSACO_ATTR_ON, /* CU mode */ HSACO_ATTR_ON, - /* Max ISA VGPRs */ 512, /* 512 SIMD32 = 256 wavefrontsize64. */ + /* Max ISA VGPRs */ 512, /* Generic code obj version */ 0, /* non-generic */ /* Architecture Family */ GFX10, /* Generic Name */ GFX10_3_GENERIC @@ -255,7 +255,7 @@ GCN_DEVICE(gfx1033, GFX1033, 0x39, ISA_RDNA2, /* SRAM_ECC default */ HSACO_ATTR_UNSUPPORTED, /* WAVE64 mode */ HSACO_ATTR_ON, /* CU mode */ HSACO_ATTR_ON, - /* Max ISA VGPRs */ 512, /* 512 SIMD32 = 256 wavefrontsize64. */ + /* Max ISA VGPRs */ 512, /* Generic code obj version */ 0, /* non-generic */ /* Architecture Family */ GFX10, /* Generic Name */ GFX10_3_GENERIC @@ -266,7 +266,7 @@ GCN_DEVICE(gfx1034, GFX1034, 0x3e, ISA_RDNA2, /* SRAM_ECC default */ HSACO_ATTR_UNSUPPORTED, /* WAVE64 mode */ HSACO_ATTR_ON, /* CU mode */ HSACO_ATTR_ON, - /* Max ISA VGPRs */ 512, /* 512 SIMD32 = 256 wavefrontsize64. */ + /* Max ISA VGPRs */ 512, /* Generic code obj version */ 0, /* non-generic */ /* Architecture Family */ GFX10, /* Generic Name */ GFX10_3_GENERIC @@ -277,7 +277,7 @@ GCN_DEVICE(gfx1035, GFX1035, 0x3d, ISA_RDNA2, /* SRAM_ECC default */ HSACO_ATTR_UNSUPPORTED, /* WAVE64 mode */ HSACO_ATTR_ON, /* CU mode */ HSACO_ATTR_ON, - /* Max ISA VGPRs */ 512, /* 512 SIMD32 = 256 wavefrontsize64. */ + /* Max ISA VGPRs */ 512, /* Generic code obj version */ 0, /* non-generic */ /* Architecture Family */ GFX10, /* Generic Name */ GFX10_3_GENERIC @@ -288,7 +288,7 @@ GCN_DEVICE(gfx1036, GFX1036, 0x45, ISA_RDNA2, /* SRAM_ECC default */ HSACO_ATTR_UNSUPPORTED, /* WAVE64 mode */ HSACO_ATTR_ON, /* CU mode */ HSACO_ATTR_ON, - /* Max ISA VGPRs */ 512, /* 512 SIMD32 = 256 wavefrontsize64. */ + /* Max ISA VGPRs */ 512, /* Generic code obj version */ 0, /* non-generic */ /* Architecture Family */ GFX10, /* Generic Name */ GFX10_3_GENERIC @@ -299,7 +299,7 @@ GCN_DEVICE(gfx10-3-generic, GFX10_3_GENERIC, 0x053, ISA_RDNA2, /* SRAM_ECC default */ HSACO_ATTR_UNSUPPORTED, /* WAVE64 mode */ HSACO_ATTR_ON, /* CU mode */ HSACO_ATTR_ON, - /* Max ISA VGPRs */ 512, /* 512 SIMD32 = 256 wavefrontsize64. */ + /* Max ISA VGPRs */ 512, /* Generic code obj version */ 1, /* Architecture Family */ GFX10, /* Generic Name */ NONE @@ -312,7 +312,7 @@ GCN_DEVICE(gfx1100, GFX1100, 0x41, ISA_RDNA3, /* SRAM_ECC default */ HSACO_ATTR_UNSUPPORTED, /* WAVE64 mode */ HSACO_ATTR_ON, /* CU mode */ HSACO_ATTR_ON, - /* Max ISA VGPRs */ 1536, /* 1536 SIMD32 = 768 wavefrontsize64. */ + /* Max ISA VGPRs */ 768, /* Generic code obj version */ 0, /* non-generic */ /* Architecture Family */ GFX11, /* Generic Name */ GFX11_GENERIC @@ -323,7 +323,7 @@ GCN_DEVICE(gfx1101, GFX1101, 0x46, ISA_RDNA3, /* SRAM_ECC default */ HSACO_ATTR_UNSUPPORTED, /* WAVE64 mode */ HSACO_ATTR_ON, /* CU mode */ HSACO_ATTR_ON, - /* Max ISA VGPRs */ 1536, + /* Max ISA VGPRs */ 768, /* Generic code obj version */ 0, /* non-generic */ /* Architecture Family */ GFX11, /* Generic Name */ GFX11_GENERIC @@ -334,7 +334,7 @@ GCN_DEVICE(gfx1102, GFX1102, 0x47, ISA_RDNA3, /* SRAM_ECC default */ HSACO_ATTR_UNSUPPORTED, /* WAVE64 mode */ HSACO_ATTR_ON, /* CU mode */ HSACO_ATTR_ON, - /* Max ISA VGPRs */ 1536, + /* Max ISA VGPRs */ 512, /* Generic code obj version */ 0, /* non-generic */ /* Architecture Family */ GFX11, /* Generic Name */ GFX11_GENERIC @@ -345,7 +345,7 @@ GCN_DEVICE(gfx1103, GFX1103, 0x44, ISA_RDNA3, /* SRAM_ECC default */ HSACO_ATTR_UNSUPPORTED, /* WAVE64 mode */ HSACO_ATTR_ON, /* CU mode */ HSACO_ATTR_ON, - /* Max ISA VGPRs */ 1536, + /* Max ISA VGPRs */ 512, /* Generic code obj version */ 0, /* non-generic */ /* Architecture Family */ GFX11, /* Generic Name */ GFX11_GENERIC @@ -356,7 +356,7 @@ GCN_DEVICE(gfx1150, GFX1150, 0x43, ISA_RDNA3, /* SRAM_ECC default */ HSACO_ATTR_UNSUPPORTED, /* WAVE64 mode */ HSACO_ATTR_ON, /* CU mode */ HSACO_ATTR_ON, - /* Max ISA VGPRs */ 1536, + /* Max ISA VGPRs */ 512, /* Generic code obj version */ 0, /* non-generic */ /* Architecture Family */ GFX11, /* Generic Name */ GFX11_GENERIC @@ -367,7 +367,7 @@ GCN_DEVICE(gfx1151, GFX1151, 0x4a, ISA_RDNA3, /* SRAM_ECC default */ HSACO_ATTR_UNSUPPORTED, /* WAVE64 mode */ HSACO_ATTR_ON, /* CU mode */ HSACO_ATTR_ON, - /* Max ISA VGPRs */ 1536, + /* Max ISA VGPRs */ 768, /* Generic code obj version */ 0, /* non-generic */ /* Architecture Family */ GFX11, /* Generic Name */ GFX11_GENERIC @@ -378,7 +378,7 @@ GCN_DEVICE(gfx1152, GFX1152, 0x55, ISA_RDNA3, /* SRAM_ECC default */ HSACO_ATTR_UNSUPPORTED, /* WAVE64 mode */ HSACO_ATTR_ON, /* CU mode */ HSACO_ATTR_ON, - /* Max ISA VGPRs */ 1536, + /* Max ISA VGPRs */ 512, /* Generic code obj version */ 0, /* non-generic */ /* Architecture Family */ GFX11, /* Generic Name */ GFX11_GENERIC @@ -389,7 +389,7 @@ GCN_DEVICE(gfx1153, GFX1153, 0x58, ISA_RDNA3, /* SRAM_ECC default */ HSACO_ATTR_UNSUPPORTED, /* WAVE64 mode */ HSACO_ATTR_ON, /* CU mode */ HSACO_ATTR_ON, - /* Max ISA VGPRs */ 1536, + /* Max ISA VGPRs */ 512, /* Generic code obj version */ 0, /* non-generic */ /* Architecture Family */ GFX11, /* Generic Name */ GFX11_GENERIC @@ -400,7 +400,7 @@ GCN_DEVICE(gfx11-generic, GFX11_GENERIC, 0x054, ISA_RDNA3, /* SRAM_ECC default */ HSACO_ATTR_UNSUPPORTED, /* WAVE64 mode */ HSACO_ATTR_ON, /* CU mode */ HSACO_ATTR_ON, - /* Max ISA VGPRs */ 1536, + /* Max ISA VGPRs */ 512, /* Generic code obj version */ 1, /* Architecture Family */ GFX11, /* Generic Name */ NONE diff --git a/gcc/config/gcn/gcn.cc b/gcc/config/gcn/gcn.cc index 5ffeb23dbaa6..1e04074d78b7 100644 --- a/gcc/config/gcn/gcn.cc +++ b/gcc/config/gcn/gcn.cc @@ -4528,7 +4528,7 @@ gcn_expand_cmp_swap (tree exp, rtx target) static rtx gcn_expand_builtin_1 (tree exp, rtx target, rtx /*subtarget */ , - machine_mode /*mode */ , int ignore, + machine_mode mode, int ignore, struct gcn_builtin_description *) { tree fndecl = TREE_OPERAND (CALL_EXPR_FN (exp), 0); @@ -4620,6 +4620,8 @@ gcn_expand_builtin_1 (tree exp, rtx target, rtx /*subtarget */ , { if (ignore) return target; + if (!REG_P (target)) + target = gen_reg_rtx (mode); rtx arg = force_reg (V64SFmode, expand_expr (CALL_EXPR_ARG (exp, 0), NULL_RTX, V64SFmode, @@ -4631,6 +4633,8 @@ gcn_expand_builtin_1 (tree exp, rtx target, rtx /*subtarget */ , { if (ignore) return target; + if (!REG_P (target)) + target = gen_reg_rtx (mode); rtx arg = force_reg (SFmode, expand_expr (CALL_EXPR_ARG (exp, 0), NULL_RTX, SFmode, @@ -4642,6 +4646,8 @@ gcn_expand_builtin_1 (tree exp, rtx target, rtx /*subtarget */ , { if (ignore) return target; + if (!REG_P (target)) + target = gen_reg_rtx (mode); rtx arg = force_reg (V64SFmode, expand_expr (CALL_EXPR_ARG (exp, 0), NULL_RTX, V64SFmode, @@ -4653,6 +4659,8 @@ gcn_expand_builtin_1 (tree exp, rtx target, rtx /*subtarget */ , { if (ignore) return target; + if (!REG_P (target)) + target = gen_reg_rtx (mode); rtx arg = force_reg (V64DFmode, expand_expr (CALL_EXPR_ARG (exp, 0), NULL_RTX, V64DFmode, @@ -4664,6 +4672,8 @@ gcn_expand_builtin_1 (tree exp, rtx target, rtx /*subtarget */ , { if (ignore) return target; + if (!REG_P (target)) + target = gen_reg_rtx (mode); rtx arg = force_reg (V64SFmode, expand_expr (CALL_EXPR_ARG (exp, 0), NULL_RTX, V64SFmode, @@ -4675,6 +4685,8 @@ gcn_expand_builtin_1 (tree exp, rtx target, rtx /*subtarget */ , { if (ignore) return target; + if (!REG_P (target)) + target = gen_reg_rtx (mode); rtx arg = force_reg (V64DFmode, expand_expr (CALL_EXPR_ARG (exp, 0), NULL_RTX, V64DFmode, @@ -4686,6 +4698,8 @@ gcn_expand_builtin_1 (tree exp, rtx target, rtx /*subtarget */ , { if (ignore) return target; + if (!REG_P (target)) + target = gen_reg_rtx (mode); rtx arg1 = force_reg (V64SFmode, expand_expr (CALL_EXPR_ARG (exp, 0), NULL_RTX, V64SFmode, @@ -4701,6 +4715,8 @@ gcn_expand_builtin_1 (tree exp, rtx target, rtx /*subtarget */ , { if (ignore) return target; + if (!REG_P (target)) + target = gen_reg_rtx (mode); rtx arg1 = force_reg (V64DFmode, expand_expr (CALL_EXPR_ARG (exp, 0), NULL_RTX, V64DFmode, @@ -4716,6 +4732,8 @@ gcn_expand_builtin_1 (tree exp, rtx target, rtx /*subtarget */ , { if (ignore) return target; + if (!REG_P (target)) + target = gen_reg_rtx (mode); rtx arg = force_reg (V64SFmode, expand_expr (CALL_EXPR_ARG (exp, 0), NULL_RTX, V64SFmode, @@ -4727,6 +4745,8 @@ gcn_expand_builtin_1 (tree exp, rtx target, rtx /*subtarget */ , { if (ignore) return target; + if (!REG_P (target)) + target = gen_reg_rtx (mode); rtx arg = force_reg (V64SFmode, expand_expr (CALL_EXPR_ARG (exp, 0), NULL_RTX, V64SFmode, @@ -4738,6 +4758,8 @@ gcn_expand_builtin_1 (tree exp, rtx target, rtx /*subtarget */ , { if (ignore) return target; + if (!REG_P (target)) + target = gen_reg_rtx (mode); rtx arg = force_reg (V64DFmode, expand_expr (CALL_EXPR_ARG (exp, 0), NULL_RTX, V64DFmode, @@ -4749,6 +4771,8 @@ gcn_expand_builtin_1 (tree exp, rtx target, rtx /*subtarget */ , { if (ignore) return target; + if (!REG_P (target)) + target = gen_reg_rtx (mode); rtx arg = force_reg (V64DFmode, expand_expr (CALL_EXPR_ARG (exp, 0), NULL_RTX, V64DFmode, @@ -5344,26 +5368,17 @@ gcn_preferred_vector_alignment (const_tree type) static bool gcn_vectorize_support_vector_misalignment (machine_mode ARG_UNUSED (mode), - const_tree type, int misalignment, + int ARG_UNUSED (misalignment), bool is_packed, - bool is_gather_scatter) + bool ARG_UNUSED (is_gather_scatter)) { - if (is_gather_scatter) - return true; - - if (is_packed) - return false; - - /* If the misalignment is unknown, we should be able to handle the access - so long as it is not to a member of a packed data structure. */ - if (misalignment == -1) - return true; + /* All Flat and Global load instructions support arbitrary alignment, so + the types and such are irrelevant (Buffer instructions are not used). */ - /* Return true if the misalignment is a multiple of the natural alignment - of the vector's element type. This is probably always going to be - true in practice, since we've already established that this isn't a - packed access. */ - return misalignment % TYPE_ALIGN_UNIT (type) == 0; + /* Disallow packed accesses because expand attempts to take scalar subregs of + vector registers, which is nonsense. + Testcase: gfortran.dg/recursive_alloc_comp_4.f08 */ + return !is_packed; } /* Implement TARGET_VECTORIZE_VECTOR_ALIGNMENT_REACHABLE. @@ -6763,10 +6778,6 @@ gcn_hsa_declare_function_name (FILE *file, const char *name, avgpr = MAX_NORMAL_AVGPR_COUNT; } - /* SIMD32 devices count double in wavefront64 mode. */ - if (TARGET_WAVE64_COMPAT) - vgpr *= 2; - /* Round up to the allocation block size. */ int vgpr_block_size = TARGET_VGPR_GRANULARITY; if (vgpr % vgpr_block_size) diff --git a/gcc/config/gnu-user.h b/gcc/config/gnu-user.h index 4c4e31efa393..151871540e7b 100644 --- a/gcc/config/gnu-user.h +++ b/gcc/config/gnu-user.h @@ -109,8 +109,9 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see #define LINK_EH_SPEC "%{!static|static-pie:--eh-frame-hdr} " #endif + #define GNU_USER_TARGET_LINK_GCC_C_SEQUENCE_SPEC \ - "%{static|static-pie:--start-group} %G %{!nolibc:%L} \ + "%{static|static-pie:--start-group} %G %{!nolibc:" LINK_LIBATOMIC_SPEC "%L} \ %{static|static-pie:--end-group}%{!static:%{!static-pie:%G}}" #undef LINK_GCC_C_SEQUENCE_SPEC diff --git a/gcc/config/i386/i386-expand.cc b/gcc/config/i386/i386-expand.cc index 3278f1fea251..0115af4d359e 100644 --- a/gcc/config/i386/i386-expand.cc +++ b/gcc/config/i386/i386-expand.cc @@ -8443,9 +8443,28 @@ setmem_epilogue_gen_val (void *op_p, void *prev_p, HOST_WIDE_INT, unsigned int op_size = GET_MODE_SIZE (op_mode); unsigned int size = GET_MODE_SIZE (mode); - unsigned int nunits = op_size / GET_MODE_SIZE (QImode); - machine_mode vec_mode - = mode_for_vector (QImode, nunits).require (); + unsigned int nunits; + machine_mode vec_mode; + if (op_size < size) + { + /* If OP size is smaller than MODE size, duplicate it. */ + nunits = size / GET_MODE_SIZE (QImode); + vec_mode = mode_for_vector (QImode, nunits).require (); + nunits = size / op_size; + gcc_assert (SCALAR_INT_MODE_P (op_mode)); + machine_mode dup_mode + = mode_for_vector (as_a (op_mode), + nunits).require (); + target = gen_reg_rtx (vec_mode); + op = gen_vec_duplicate (dup_mode, op); + rtx dup_op = gen_reg_rtx (dup_mode); + emit_move_insn (dup_op, op); + op = gen_rtx_SUBREG (vec_mode, dup_op, 0); + emit_move_insn (target, op); + return target; + } + nunits = op_size / GET_MODE_SIZE (QImode); + vec_mode = mode_for_vector (QImode, nunits).require (); target = gen_reg_rtx (vec_mode); op = gen_rtx_SUBREG (vec_mode, op, 0); emit_move_insn (target, op); @@ -9552,9 +9571,20 @@ ix86_expand_set_or_cpymem (rtx dst, rtx src, rtx count_exp, rtx val_exp, if (!issetmem) srcreg = ix86_copy_addr_to_reg (XEXP (src, 0)); + bool aligned_dstmem = false; + unsigned int nunits = issetmem ? STORE_MAX_PIECES : MOVE_MAX; + bool single_insn_p = count && count <= nunits; + if (single_insn_p) + { + /* If it can be done with a single instruction, use vector + instruction and don't align destination. */ + alg = vector_loop; + noalign = true; + dynamic_check = -1; + } + unroll_factor = 1; move_mode = word_mode; - int nunits; switch (alg) { case libcall: @@ -9576,7 +9606,6 @@ ix86_expand_set_or_cpymem (rtx dst, rtx src, rtx count_exp, rtx val_exp, need_zero_guard = true; unroll_factor = 4; /* Get the vector mode to move STORE_MAX_PIECES/MOVE_MAX bytes. */ - nunits = issetmem ? STORE_MAX_PIECES : MOVE_MAX; nunits /= GET_MODE_SIZE (word_mode); if (nunits > 1) { @@ -9629,28 +9658,32 @@ ix86_expand_set_or_cpymem (rtx dst, rtx src, rtx count_exp, rtx val_exp, } gcc_assert (desired_align >= 1 && align >= 1); - /* Misaligned move sequences handle both prologue and epilogue at once. - Default code generation results in a smaller code for large alignments - and also avoids redundant job when sizes are known precisely. */ - misaligned_prologue_used - = (TARGET_MISALIGNED_MOVE_STRING_PRO_EPILOGUES - && MAX (desired_align, epilogue_size_needed) <= 32 - && desired_align <= epilogue_size_needed - && ((desired_align > align && !align_bytes) - || (!count && epilogue_size_needed > 1))); + if (!single_insn_p) + { + /* Misaligned move sequences handle both prologue and epilogue + at once. Default code generation results in a smaller code + for large alignments and also avoids redundant job when sizes + are known precisely. */ + misaligned_prologue_used + = (TARGET_MISALIGNED_MOVE_STRING_PRO_EPILOGUES + && MAX (desired_align, epilogue_size_needed) <= 32 + && desired_align <= epilogue_size_needed + && ((desired_align > align && !align_bytes) + || (!count && epilogue_size_needed > 1))); - /* Destination is aligned after the misaligned prologue. */ - bool aligned_dstmem = misaligned_prologue_used; + /* Destination is aligned after the misaligned prologue. */ + aligned_dstmem = misaligned_prologue_used; - if (noalign && !misaligned_prologue_used) - { - /* Also use misaligned prologue if alignment isn't needed and - destination isn't aligned. Since alignment isn't needed, - the destination after prologue won't be aligned. */ - aligned_dstmem = (GET_MODE_ALIGNMENT (move_mode) - <= MEM_ALIGN (dst)); - if (!aligned_dstmem) - misaligned_prologue_used = true; + if (noalign && !misaligned_prologue_used) + { + /* Also use misaligned prologue if alignment isn't needed and + destination isn't aligned. Since alignment isn't needed, + the destination after prologue won't be aligned. */ + aligned_dstmem = (GET_MODE_ALIGNMENT (move_mode) + <= MEM_ALIGN (dst)); + if (!aligned_dstmem) + misaligned_prologue_used = true; + } } /* Do the cheap promotion to allow better CSE across the @@ -13901,8 +13934,7 @@ ix86_expand_builtin (tree exp, rtx target, rtx subtarget, char *opts = ix86_target_string (bisa, bisa2, 0, 0, NULL, NULL, (enum fpmath_unit) 0, (enum prefer_vector_width) 0, - PVW_NONE, PVW_NONE, - false, add_abi_p); + PVW_NONE, false, add_abi_p); if (!opts) error ("%qE needs unknown isa option", fndecl); else @@ -20826,7 +20858,8 @@ expand_vec_perm_vpermil (struct expand_vec_perm_d *d) rtx rperm[8], vperm; unsigned i; - if (!TARGET_AVX || d->vmode != V8SFmode || !d->one_operand_p) + if (!TARGET_AVX || !d->one_operand_p + || (d->vmode != V8SImode && d->vmode != V8SFmode)) return false; /* We can only permute within the 128-bit lane. */ @@ -20856,7 +20889,15 @@ expand_vec_perm_vpermil (struct expand_vec_perm_d *d) vperm = gen_rtx_CONST_VECTOR (V8SImode, gen_rtvec_v (8, rperm)); vperm = force_reg (V8SImode, vperm); - emit_insn (gen_avx_vpermilvarv8sf3 (d->target, d->op0, vperm)); + rtx target = d->target; + rtx op0 = d->op0; + if (d->vmode == V8SImode) + { + target = lowpart_subreg (V8SFmode, target, V8SImode); + op0 = lowpart_subreg (V8SFmode, op0, V8SImode); + } + + emit_insn (gen_avx_vpermilvarv8sf3 (target, op0, vperm)); return true; } diff --git a/gcc/config/i386/i386-features.cc b/gcc/config/i386/i386-features.cc index 0608dd2f9acf..9348f55c2cd1 100644 --- a/gcc/config/i386/i386-features.cc +++ b/gcc/config/i386/i386-features.cc @@ -545,7 +545,7 @@ scalar_chain::build (bitmap candidates, unsigned insn_uid, bitmap disallowed) return true; } -/* Return a cost of building a vector costant +/* Return a cost of building a vector constant instead of using a scalar one. */ int @@ -5299,8 +5299,7 @@ static tree ix86_mangle_function_version_assembler_name (tree decl, tree id) { tree version_attr; - const char *orig_name, *version_string; - char *attr_str, *assembler_name; + char *attr_str; if (DECL_DECLARED_INLINE_P (decl) && lookup_attribute ("gnu_inline", @@ -5318,25 +5317,16 @@ ix86_mangle_function_version_assembler_name (tree decl, tree id) /* target attribute string cannot be NULL. */ gcc_assert (version_attr != NULL_TREE); - orig_name = IDENTIFIER_POINTER (id); - version_string - = TREE_STRING_POINTER (TREE_VALUE (TREE_VALUE (version_attr))); - - if (strcmp (version_string, "default") == 0) - return id; - attr_str = sorted_attr_string (TREE_VALUE (version_attr)); - assembler_name = XNEWVEC (char, strlen (orig_name) + strlen (attr_str) + 2); - - sprintf (assembler_name, "%s.%s", orig_name, attr_str); /* Allow assembler name to be modified if already set. */ if (DECL_ASSEMBLER_NAME_SET_P (decl)) SET_DECL_RTL (decl, NULL); - tree ret = get_identifier (assembler_name); + tree ret = clone_identifier (id, attr_str, true); + XDELETEVEC (attr_str); - XDELETEVEC (assembler_name); + return ret; } @@ -5344,9 +5334,21 @@ tree ix86_mangle_decl_assembler_name (tree decl, tree id) { /* For function version, add the target suffix to the assembler name. */ - if (TREE_CODE (decl) == FUNCTION_DECL - && DECL_FUNCTION_VERSIONED (decl)) - id = ix86_mangle_function_version_assembler_name (decl, id); + if (TREE_CODE (decl) == FUNCTION_DECL) + { + cgraph_node *node = cgraph_node::get (decl); + /* Mangle all versions when annotated with target_clones, but only + non-default versions when annotated with target attributes. */ + if (DECL_FUNCTION_VERSIONED (decl) + && (node->is_target_clone + || !is_function_default_version (node->decl))) + id = ix86_mangle_function_version_assembler_name (decl, id); + /* Mangle the dispatched symbol but only in the case of target clones. */ + else if (node && node->dispatcher_function && !node->is_target_clone) + id = clone_identifier (id, "ifunc"); + else if (node && node->dispatcher_resolver_function) + id = clone_identifier (id, "resolver"); + } #ifdef SUBTARGET_MANGLE_DECL_ASSEMBLER_NAME id = SUBTARGET_MANGLE_DECL_ASSEMBLER_NAME (decl, id); #endif @@ -5395,20 +5397,9 @@ ix86_get_function_versions_dispatcher (void *decl) if (targetm.has_ifunc_p ()) { struct cgraph_function_version_info *it_v = NULL; - struct cgraph_node *dispatcher_node = NULL; - struct cgraph_function_version_info *dispatcher_version_info = NULL; /* Right now, the dispatching is done via ifunc. */ dispatch_decl = make_dispatcher_decl (default_node->decl); - TREE_NOTHROW (dispatch_decl) = TREE_NOTHROW (fn); - - dispatcher_node = cgraph_node::get_create (dispatch_decl); - gcc_assert (dispatcher_node != NULL); - dispatcher_node->dispatcher_function = 1; - dispatcher_version_info - = dispatcher_node->insert_new_function_version (); - dispatcher_version_info->next = default_version_info; - dispatcher_node->definition = 1; /* Set the dispatcher for all the versions. */ it_v = default_version_info; @@ -5442,17 +5433,28 @@ make_resolver_func (const tree default_decl, { tree decl, type, t; - /* Create resolver function name based on default_decl. */ - tree decl_name = clone_function_name (default_decl, "resolver"); - const char *resolver_name = IDENTIFIER_POINTER (decl_name); - /* The resolver function should return a (void *). */ type = build_function_type_list (ptr_type_node, NULL_TREE); - decl = build_fn_decl (resolver_name, type); - SET_DECL_ASSEMBLER_NAME (decl, decl_name); + cgraph_node *node = cgraph_node::get (default_decl); + gcc_assert (node && node->function_version ()); + + decl = build_fn_decl (IDENTIFIER_POINTER (DECL_NAME (default_decl)), type); + + /* Set the assembler name to prevent cgraph_node attempting to mangle. */ + SET_DECL_ASSEMBLER_NAME (decl, DECL_ASSEMBLER_NAME (default_decl)); + + cgraph_node *resolver_node = cgraph_node::get_create (decl); + resolver_node->dispatcher_resolver_function = true; + + if (node->is_target_clone) + resolver_node->is_target_clone = true; + + tree id = ix86_mangle_decl_assembler_name + (decl, node->function_version ()->assembler_name); + SET_DECL_ASSEMBLER_NAME (decl, id); - DECL_NAME (decl) = decl_name; + DECL_NAME (decl) = DECL_NAME (default_decl); TREE_USED (decl) = 1; DECL_ARTIFICIAL (decl) = 1; DECL_IGNORED_P (decl) = 1; @@ -5499,7 +5501,7 @@ make_resolver_func (const tree default_decl, gcc_assert (ifunc_alias_decl != NULL); /* Mark ifunc_alias_decl as "ifunc" with resolver as resolver_name. */ DECL_ATTRIBUTES (ifunc_alias_decl) - = make_attribute ("ifunc", resolver_name, + = make_attribute ("ifunc", IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)), DECL_ATTRIBUTES (ifunc_alias_decl)); /* Create the alias for dispatch to resolver here. */ diff --git a/gcc/config/i386/i386-jit.cc b/gcc/config/i386/i386-jit.cc new file mode 100644 index 000000000000..c1e2929a4735 --- /dev/null +++ b/gcc/config/i386/i386-jit.cc @@ -0,0 +1,71 @@ +/* Subroutines for the JIT front end on the x86 architecture. + Copyright (C) 2023 Free Software Foundation, Inc. + +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 +. */ + +#define IN_TARGET_CODE 1 + +#define INCLUDE_STRING +#include "config.h" +#include "system.h" +#include "coretypes.h" +#include "target.h" +#include "tm.h" +#include "tm_jit.h" +#include "jit/jit-target.h" +#include "jit/jit-target-def.h" + +/* Implement TARGET_JIT_REGISTER_CPU_TARGET_INFO. */ + +#ifndef CROSS_DIRECTORY_STRUCTURE +extern const char *host_detect_local_cpu (int argc, const char **argv); +#endif + +#if TARGET_64BIT_DEFAULT +const char* x86_bits = "64"; +#else +const char* x86_bits = "32"; +#endif + +void +ix86_jit_register_target_info (void) +{ +#ifndef CROSS_DIRECTORY_STRUCTURE + const char *params[] = {"arch", x86_bits}; + const char* local_cpu = host_detect_local_cpu (2, params); + if (local_cpu) + { + std::string arch = local_cpu; + free (const_cast (local_cpu)); + + const char* arg = "-march="; + size_t arg_pos = arch.find (arg) + strlen (arg); + size_t end_pos = arch.find (" ", arg_pos); + + std::string cpu = arch.substr (arg_pos, end_pos - arg_pos); + jit_target_set_arch (cpu); + } +#endif + + if (targetm.scalar_mode_supported_p (TImode)) + { + jit_target_add_supported_target_dependent_type (GCC_JIT_TYPE_UINT128_T); + jit_target_add_supported_target_dependent_type (GCC_JIT_TYPE_INT128_T); + } + +#define ADD_TARGET_INFO jit_add_target_info +#include "i386-rust-and-jit.inc" +#undef ADD_TARGET_INFO +} diff --git a/gcc/config/i386/i386-jit.h b/gcc/config/i386/i386-jit.h new file mode 100644 index 000000000000..1d65001476ee --- /dev/null +++ b/gcc/config/i386/i386-jit.h @@ -0,0 +1,22 @@ +/* Definitions for the jit front end on the x86 architecture. + Copyright (C) 2023 Free Software Foundation, Inc. + +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 +. */ + +/* In i386-jit.cc. */ +extern void ix86_jit_register_target_info (void); + +/* Target hooks for jit language. */ +#define TARGET_JIT_REGISTER_CPU_TARGET_INFO ix86_jit_register_target_info diff --git a/gcc/config/i386/i386-options.cc b/gcc/config/i386/i386-options.cc index abb5dd7700e7..cad40194f177 100644 --- a/gcc/config/i386/i386-options.cc +++ b/gcc/config/i386/i386-options.cc @@ -401,7 +401,6 @@ ix86_target_string (HOST_WIDE_INT isa, HOST_WIDE_INT isa2, enum fpmath_unit fpmath, enum prefer_vector_width pvw, enum prefer_vector_width move_max, - enum prefer_vector_width store_max, bool add_nl_p, bool add_abi_p) { /* Flag options. */ @@ -611,10 +610,6 @@ ix86_target_string (HOST_WIDE_INT isa, HOST_WIDE_INT isa2, if (move_max) add_vector_width (move_max, "-mmove-max="); - /* Add -mstore-max= option. */ - if (store_max) - add_vector_width (store_max, "-mstore-max="); - /* Any options? */ if (num == 0) return NULL; @@ -680,8 +675,7 @@ ix86_debug_options (void) target_flags, ix86_target_flags, ix86_arch_string, ix86_tune_string, ix86_fpmath, prefer_vector_width_type, - ix86_move_max, ix86_store_max, - true, true); + ix86_move_max, true, true); if (opts) { @@ -956,8 +950,7 @@ ix86_function_specific_print (FILE *file, int indent, ptr->x_target_flags, ptr->x_ix86_target_flags, NULL, NULL, ptr->x_ix86_fpmath, ptr->x_prefer_vector_width_type, - ptr->x_ix86_move_max, ptr->x_ix86_store_max, - false, true); + ptr->x_ix86_move_max, false, true); gcc_assert (ptr->arch < PROCESSOR_max); fprintf (file, "%*sarch = %d (%s)\n", @@ -1410,8 +1403,6 @@ ix86_valid_target_attribute_tree (tree fndecl, tree args, enum prefer_vector_width orig_pvw_set = opts_set->x_prefer_vector_width_type; enum prefer_vector_width orig_ix86_move_max_set = opts_set->x_ix86_move_max; - enum prefer_vector_width orig_ix86_store_max_set - = opts_set->x_ix86_store_max; int orig_tune_defaulted = ix86_tune_defaulted; int orig_arch_specified = ix86_arch_specified; char *option_strings[IX86_FUNCTION_SPECIFIC_MAX] = { NULL, NULL }; @@ -1492,7 +1483,6 @@ ix86_valid_target_attribute_tree (tree fndecl, tree args, opts_set->x_ix86_fpmath = orig_fpmath_set; opts_set->x_prefer_vector_width_type = orig_pvw_set; opts_set->x_ix86_move_max = orig_ix86_move_max_set; - opts_set->x_ix86_store_max = orig_ix86_store_max_set; opts->x_ix86_excess_precision = orig_ix86_excess_precision; opts->x_ix86_unsafe_math_optimizations = orig_ix86_unsafe_math_optimizations; @@ -2940,32 +2930,6 @@ ix86_option_override_internal (bool main_args_p, } } - if (opts_set->x_ix86_store_max == PVW_NONE) - { - /* Set the maximum number of bits can be stored to memory - efficiently. */ - if (opts_set->x_prefer_vector_width_type != PVW_NONE) - opts->x_ix86_store_max = opts->x_prefer_vector_width_type; - else if (ix86_tune_features[X86_TUNE_AVX512_STORE_BY_PIECES]) - opts->x_ix86_store_max = PVW_AVX512; - else if (ix86_tune_features[X86_TUNE_AVX256_STORE_BY_PIECES]) - opts->x_ix86_store_max = PVW_AVX256; - else - { - opts->x_ix86_store_max = opts->x_prefer_vector_width_type; - if (opts_set->x_ix86_store_max == PVW_NONE) - { - if (TARGET_AVX512F_P (opts->x_ix86_isa_flags)) - opts->x_ix86_store_max = PVW_AVX512; - /* Align with vectorizer to avoid potential STLF issue. */ - else if (TARGET_AVX_P (opts->x_ix86_isa_flags)) - opts->x_ix86_store_max = PVW_AVX256; - else - opts->x_ix86_store_max = PVW_AVX128; - } - } - } - if (opts->x_ix86_recip_name) { char *p = ASTRDUP (opts->x_ix86_recip_name); diff --git a/gcc/config/i386/i386-options.h b/gcc/config/i386/i386-options.h index 0499c0894ff9..56868998e0bb 100644 --- a/gcc/config/i386/i386-options.h +++ b/gcc/config/i386/i386-options.h @@ -28,7 +28,6 @@ char *ix86_target_string (HOST_WIDE_INT isa, HOST_WIDE_INT isa2, enum fpmath_unit fpmath, enum prefer_vector_width pvw, enum prefer_vector_width move_max, - enum prefer_vector_width store_max, bool add_nl_p, bool add_abi_p); extern enum attr_cpu ix86_schedule; diff --git a/gcc/config/i386/i386.cc b/gcc/config/i386/i386.cc index 471be3e86158..587b2bd0c1d2 100644 --- a/gcc/config/i386/i386.cc +++ b/gcc/config/i386/i386.cc @@ -3493,8 +3493,10 @@ function_arg_ms_64 (const CUMULATIVE_ARGS *cum, machine_mode mode, regno = x86_64_ms_abi_int_parameter_registers[cum->regno]; - /* Only floating point modes are passed in anything but integer regs. */ - if (TARGET_SSE && (mode == SFmode || mode == DFmode)) + /* Only floating point modes less than 64 bits are passed in anything but + integer regs. Larger floating point types are excluded as the Windows + ABI requires vreg args can be shadowed in GPRs (for red zone / varargs). */ + if (TARGET_SSE && (mode == HFmode || mode == SFmode || mode == DFmode)) { if (named) { @@ -4316,7 +4318,6 @@ function_value_ms_64 (machine_mode orig_mode, machine_mode mode, { case 16: if (valtype != NULL_TREE - && !VECTOR_INTEGER_TYPE_P (valtype) && !VECTOR_INTEGER_TYPE_P (valtype) && !INTEGRAL_TYPE_P (valtype) && !VECTOR_FLOAT_TYPE_P (valtype)) @@ -4327,9 +4328,10 @@ function_value_ms_64 (machine_mode orig_mode, machine_mode mode, break; case 8: case 4: + case 2: if (valtype != NULL_TREE && AGGREGATE_TYPE_P (valtype)) break; - if (mode == SFmode || mode == DFmode) + if (mode == HFmode || mode == SFmode || mode == DFmode) regno = FIRST_SSE_REG; break; default: @@ -20603,6 +20605,7 @@ avx_vpermilp_parallel (rtx par, machine_mode mode) switch (mode) { case E_V8DFmode: + case E_V8DImode: /* In the 512-bit DFmode case, we can only move elements within a 128-bit lane. First fill the second part of the mask, then fallthru. */ @@ -20621,6 +20624,7 @@ avx_vpermilp_parallel (rtx par, machine_mode mode) /* FALLTHRU */ case E_V4DFmode: + case E_V4DImode: /* In the 256-bit DFmode case, we can only move elements within a 128-bit lane. */ for (i = 0; i < 2; ++i) @@ -20638,6 +20642,7 @@ avx_vpermilp_parallel (rtx par, machine_mode mode) break; case E_V16SFmode: + case E_V16SImode: /* In 512 bit SFmode case, permutation in the upper 256 bits must mirror the permutation in the lower 256-bits. */ for (i = 0; i < 8; ++i) @@ -20646,6 +20651,7 @@ avx_vpermilp_parallel (rtx par, machine_mode mode) /* FALLTHRU */ case E_V8SFmode: + case E_V8SImode: /* In 256 bit SFmode case, we have full freedom of movement within the low 128-bit lane, but the high 128-bit lane must mirror the exact same pattern. */ @@ -20656,7 +20662,9 @@ avx_vpermilp_parallel (rtx par, machine_mode mode) /* FALLTHRU */ case E_V2DFmode: + case E_V2DImode: case E_V4SFmode: + case E_V4SImode: /* In the 128-bit case, we've full freedom in the placement of the elements from the source operand. */ for (i = 0; i < nelt; ++i) @@ -26138,6 +26146,14 @@ ix86_vector_costs::add_stmt_cost (int count, vect_cost_for_stmt kind, /* Record number of load/store/gather/scatter in vectorized body. */ if (where == vect_body && !m_costing_for_scalar) { + int scale = 1; + if (vectype + && ((GET_MODE_SIZE (TYPE_MODE (vectype)) == 64 + && TARGET_AVX512_SPLIT_REGS) + || (GET_MODE_SIZE (TYPE_MODE (vectype)) == 32 + && TARGET_AVX256_SPLIT_REGS))) + scale = 2; + switch (kind) { /* Emulated gather/scatter or any scalarization. */ @@ -26160,7 +26176,7 @@ ix86_vector_costs::add_stmt_cost (int count, vect_cost_for_stmt kind, /* Handle __builtin_fma. */ if (gimple_call_combined_fn (stmt_info->stmt) == CFN_FMA) { - m_num_reduc[X86_REDUC_FMA] += count; + m_num_reduc[X86_REDUC_FMA] += count * scale; break; } @@ -26197,12 +26213,12 @@ ix86_vector_costs::add_stmt_cost (int count, vect_cost_for_stmt kind, && (def = SSA_NAME_DEF_STMT (rhs1), true) && is_gimple_assign (def) && gimple_assign_rhs_code (def) == MULT_EXPR) - m_num_reduc[X86_REDUC_FMA] += count; + m_num_reduc[X86_REDUC_FMA] += count * scale; else if (TREE_CODE (rhs2) == SSA_NAME && (def = SSA_NAME_DEF_STMT (rhs2), true) && is_gimple_assign (def) && gimple_assign_rhs_code (def) == MULT_EXPR) - m_num_reduc[X86_REDUC_FMA] += count; + m_num_reduc[X86_REDUC_FMA] += count * scale; break; /* Vectorizer lane_reducing_op_p supports DOT_PROX_EXPR, @@ -26231,7 +26247,7 @@ ix86_vector_costs::add_stmt_cost (int count, vect_cost_for_stmt kind, ? TARGET_AVX10_2 : (TARGET_AVXVNNIINT8 || TARGET_AVX10_2)); } - m_num_reduc[X86_REDUC_DOT_PROD] += count; + m_num_reduc[X86_REDUC_DOT_PROD] += count * scale; /* Dislike to do unroll and partial sum for emulated DOT_PROD_EXPR. */ @@ -26240,7 +26256,7 @@ ix86_vector_costs::add_stmt_cost (int count, vect_cost_for_stmt kind, break; case SAD_EXPR: - m_num_reduc[X86_REDUC_SAD] += count; + m_num_reduc[X86_REDUC_SAD] += count * scale; break; default: @@ -26392,8 +26408,63 @@ ix86_vector_costs::add_stmt_cost (int count, vect_cost_for_stmt kind, stmt_cost = ix86_default_vector_cost (kind, mode); if (kind == vec_perm && vectype - && GET_MODE_SIZE (TYPE_MODE (vectype)) == 32) - m_num_avx256_vec_perm[where]++; + && GET_MODE_SIZE (TYPE_MODE (vectype)) == 32 + /* BIT_FIELD_REF 0 times vec_perm costs 0 in body. */ + && count != 0) + { + bool real_perm = true; + unsigned nunits = TYPE_VECTOR_SUBPARTS (vectype); + + if (node + && SLP_TREE_LOAD_PERMUTATION (node).exists () + /* Loop vectorization will have 4 times vec_perm + with index as {0, 0, 0, 0}. + But it actually generates + vec_perm_expr + vec_perm_expr + vec_perm_expr + Need to be handled separately. */ + && is_a (m_vinfo)) + { + unsigned half = nunits / 2; + unsigned i = 0; + bool allsame = true; + unsigned first = SLP_TREE_LOAD_PERMUTATION (node)[0]; + bool cross_lane_p = false; + for (i = 0 ; i != SLP_TREE_LANES (node); i++) + { + unsigned tmp = SLP_TREE_LOAD_PERMUTATION (node)[i]; + /* allsame is just a broadcast. */ + if (tmp != first) + allsame = false; + + /* 4 times vec_perm with number of lanes multiple of nunits. */ + tmp = tmp & (nunits - 1); + unsigned index = i & (nunits - 1); + if ((index < half && tmp >= half) + || (index >= half && tmp < half)) + cross_lane_p = true; + + if (!allsame && cross_lane_p) + break; + } + + if (i == SLP_TREE_LANES (node)) + real_perm = false; + } + + if (real_perm) + { + m_num_avx256_vec_perm[where] += count; + if (dump_file && (dump_flags & TDF_DETAILS)) + { + fprintf (dump_file, "Detected avx256 cross-lane permutation: "); + if (stmt_info) + print_gimple_expr (dump_file, stmt_info->stmt, 0, TDF_SLIM); + fprintf (dump_file, " \n"); + } + } + } /* Penalize DFmode vector operations for Bonnell. */ if (TARGET_CPU_P (BONNELL) && kind == vector_stmt @@ -27189,11 +27260,10 @@ ix86_optab_supported_p (int op, machine_mode mode1, machine_mode, case floor_optab: case ceil_optab: case btrunc_optab: - if (((SSE_FLOAT_MODE_P (mode1) - && TARGET_SSE_MATH - && TARGET_SSE4_1) - || mode1 == HFmode) - && !flag_trapping_math) + if ((SSE_FLOAT_MODE_P (mode1) + && TARGET_SSE_MATH + && TARGET_SSE4_1) + || mode1 == HFmode) return true; return opt_type == OPTIMIZE_FOR_SPEED; @@ -28184,9 +28254,6 @@ ix86_libgcc_floating_mode_supported_p #undef TARGET_OPTION_PRINT #define TARGET_OPTION_PRINT ix86_function_specific_print -#undef TARGET_OPTION_FUNCTION_VERSIONS -#define TARGET_OPTION_FUNCTION_VERSIONS common_function_versions - #undef TARGET_CAN_INLINE_P #define TARGET_CAN_INLINE_P ix86_can_inline_p diff --git a/gcc/config/i386/i386.h b/gcc/config/i386/i386.h index ac0ce687f36e..f4c89f012ddd 100644 --- a/gcc/config/i386/i386.h +++ b/gcc/config/i386/i386.h @@ -1916,13 +1916,9 @@ typedef struct ix86_args { MOVE_MAX_PIECES defaults to MOVE_MAX. */ #define MOVE_MAX \ - ((TARGET_AVX512F \ - && (ix86_move_max == PVW_AVX512 \ - || ix86_store_max == PVW_AVX512)) \ + ((TARGET_AVX512F && ix86_move_max == PVW_AVX512) \ ? 64 \ - : ((TARGET_AVX \ - && (ix86_move_max >= PVW_AVX256 \ - || ix86_store_max >= PVW_AVX256)) \ + : ((TARGET_AVX && ix86_move_max >= PVW_AVX256) \ ? 32 \ : ((TARGET_SSE2 \ && TARGET_SSE_UNALIGNED_LOAD_OPTIMAL \ @@ -1935,15 +1931,14 @@ typedef struct ix86_args { store_by_pieces of 16/32/64 bytes. */ #define STORE_MAX_PIECES \ (TARGET_INTER_UNIT_MOVES_TO_VEC \ - ? ((TARGET_AVX512F && ix86_store_max == PVW_AVX512) \ + ? ((TARGET_AVX512F && ix86_move_max == PVW_AVX512) \ ? 64 \ - : ((TARGET_AVX \ - && ix86_store_max >= PVW_AVX256) \ + : ((TARGET_AVX && ix86_move_max >= PVW_AVX256) \ ? 32 \ : ((TARGET_SSE2 \ && TARGET_SSE_UNALIGNED_STORE_OPTIMAL) \ - ? 16 : UNITS_PER_WORD))) \ - : UNITS_PER_WORD) + ? 16 : UNITS_PER_WORD))) \ + : UNITS_PER_WORD) /* If a memory-to-memory move would take MOVE_RATIO or more simple move-instruction pairs, we will do a cpymem or libcall instead. diff --git a/gcc/config/i386/i386.opt b/gcc/config/i386/i386.opt index 6bda22f48437..11921765b2d2 100644 --- a/gcc/config/i386/i386.opt +++ b/gcc/config/i386/i386.opt @@ -644,8 +644,7 @@ Target RejectNegative Joined Var(ix86_move_max) Enum(prefer_vector_width) Init(P Maximum number of bits that can be moved from memory to memory efficiently. mstore-max= -Target RejectNegative Joined Var(ix86_store_max) Enum(prefer_vector_width) Init(PVW_NONE) Save -Maximum number of bits that can be stored to memory efficiently. +Target RejectNegative Joined Uncoumented Var(ix86_move_max) Enum(prefer_vector_width) Init(PVW_NONE) Warn(%<-mstore-max=%> is deprecated; use %<-mmove-max=%> instead) mnoreturn-no-callee-saved-registers Target Var(ix86_noreturn_no_callee_saved_registers) diff --git a/gcc/config/i386/predicates.md b/gcc/config/i386/predicates.md index 5dbe444847fd..57950d318782 100644 --- a/gcc/config/i386/predicates.md +++ b/gcc/config/i386/predicates.md @@ -2077,6 +2077,25 @@ return true; }) +;; Return true if OP is a parallel for a vbroadcastf128 permute. +(define_predicate "avx_vbroadcast128_operand" + (and (match_code "parallel") + (match_code "const_int" "a")) +{ + int i, nelt = XVECLEN (op, 0); + int half = nelt / 2; + + for (i = 0; i < nelt; ++i) + { + int index = INTVAL (XVECEXP (op, 0, i)); + if ((i < half && index != i) + || (i >= half && index != (i - half))) + return false; + } + + return true; +}) + ;; Return true if OP is a parallel for a palignr permute. (define_predicate "palignr_operand" (and (match_code "parallel") diff --git a/gcc/config/i386/sse.md b/gcc/config/i386/sse.md index 73906b85d899..8b28c8edb19b 100644 --- a/gcc/config/i386/sse.md +++ b/gcc/config/i386/sse.md @@ -302,6 +302,12 @@ V16SF (V8SF "TARGET_AVX512VL") V8DF (V4DF "TARGET_AVX512VL")]) +(define_mode_iterator V48_AVX + [(V16SI "TARGET_AVX512F") (V8SI "TARGET_AVX") V4SI + (V8DI "TARGET_AVX512F") (V4DI "TARGET_AVX") (V2DI "TARGET_SSE2") + (V16SF "TARGET_AVX512F") (V8SF "TARGET_AVX") V4SF + (V8DF "TARGET_AVX512F") (V4DF "TARGET_AVX") (V2DF "TARGET_SSE2")]) + ;; All AVX-512{F,VL} vector modes. Supposed TARGET_AVX512F baseline. (define_mode_iterator V48H_AVX512VL [V16SI (V8SI "TARGET_AVX512VL") (V4SI "TARGET_AVX512VL") @@ -1428,6 +1434,10 @@ (define_mode_attr DOUBLEMASKMODE [(HI "SI") (SI "DI")]) +;; Float mode suffix used for instructions like vpermilpd with integer modes. +(define_mode_attr ssefltmodesuffix + [(V2DI "pd") (V4DI "pd") (V8DI "pd") (V4SI "ps") (V8SI "ps") (V16SI "ps") + (V2DF "pd") (V4DF "pd") (V8DF "pd") (V4SF "ps") (V8SF "ps") (V16SF "ps")]) ;; Include define_subst patterns for instructions with mask (include "subst.md") @@ -23655,10 +23665,6 @@ (set_attr "btver2_decode" "vector,vector,vector") (set_attr "mode" "")]) -(define_mode_attr ssefltmodesuffix - [(V2DI "pd") (V4DI "pd") (V4SI "ps") (V8SI "ps") - (V2DF "pd") (V4DF "pd") (V4SF "ps") (V8SF "ps")]) - (define_mode_attr ssefltvecmode [(V2DI "V2DF") (V4DI "V4DF") (V4SI "V4SF") (V8SI "V8SF")]) @@ -27615,9 +27621,9 @@ ;; being a subset of what vpermp* can do), but vpermilp* has shorter ;; latency as it never crosses lanes. (define_insn "*_vpermilp" - [(set (match_operand:VF 0 "register_operand" "=v") - (vec_select:VF - (match_operand:VF 1 "nonimmediate_operand" "vm") + [(set (match_operand:V48_AVX 0 "register_operand" "=v") + (vec_select:V48_AVX + (match_operand:V48_AVX 1 "nonimmediate_operand" "vm") (match_parallel 2 "" [(match_operand 3 "const_int_operand")])))] "TARGET_AVX && @@ -27625,7 +27631,7 @@ { int mask = avx_vpermilp_parallel (operands[2], mode) - 1; operands[2] = GEN_INT (mask); - return "vpermil\t{%2, %1, %0|%0, %1, %2}"; + return "vpermil\t{%2, %1, %0|%0, %1, %2}"; } [(set_attr "type" "sselog") (set_attr "prefix_extra" "1") @@ -28142,6 +28148,21 @@ (set_attr "prefix" "vex,vex,vex,evex,evex,evex,evex") (set_attr "mode" "")]) + +(define_insn_and_split "*avx_vbroadcastf128__perm" + [(set (match_operand:V_256 0 "register_operand") + (vec_select:V_256 + (vec_concat:V_256 + (match_operand: 1 "memory_operand") + (match_operand: 2 "general_operand")) + (match_parallel 3 "avx_vbroadcast128_operand" + [(match_operand 4 "const_int_operand")])))] + "TARGET_AVX && ix86_pre_reload_split ()" + "#" + "&& 1" + [(set (match_dup 0) + (vec_concat: V_256 (match_dup 1) (match_dup 1)))]) + ;; For broadcast[i|f]32x2. Yes there is no v4sf version, only v4si. (define_mode_iterator VI4F_BRCST32x2 [V16SI (V8SI "TARGET_AVX512VL") (V4SI "TARGET_AVX512VL") diff --git a/gcc/config/i386/t-i386 b/gcc/config/i386/t-i386 index 2508f89cd06a..e5fc929c1fec 100644 --- a/gcc/config/i386/t-i386 +++ b/gcc/config/i386/t-i386 @@ -50,6 +50,10 @@ i386-rust.o: $(srcdir)/config/i386/i386-rust.cc $(COMPILE) $< $(POSTCOMPILE) +i386-jit.o: $(srcdir)/config/i386/i386-jit.cc + $(COMPILE) $< + $(POSTCOMPILE) + i386-options.o: $(srcdir)/config/i386/i386-options.cc $(COMPILE) $< $(POSTCOMPILE) diff --git a/gcc/config/i386/x86-tune-costs.h b/gcc/config/i386/x86-tune-costs.h index 1649ea2fe3e5..c7a0f6805ca1 100644 --- a/gcc/config/i386/x86-tune-costs.h +++ b/gcc/config/i386/x86-tune-costs.h @@ -1744,7 +1744,7 @@ struct processor_costs znver1_cost = { FMA/DOT_PROD_EXPR/SAD_EXPR, it's used to determine unroll factor in the vectorizer. */ - 4, /* Limit how much the autovectorizer + 1, /* Limit how much the autovectorizer may unroll a loop. */ znver1_memcpy, znver1_memset, @@ -1918,7 +1918,7 @@ struct processor_costs znver2_cost = { FMA/DOT_PROD_EXPR/SAD_EXPR, it's used to determine unroll factor in the vectorizer. */ - 4, /* Limit how much the autovectorizer + 1, /* Limit how much the autovectorizer may unroll a loop. */ znver2_memcpy, znver2_memset, diff --git a/gcc/config/i386/x86-tune.def b/gcc/config/i386/x86-tune.def index a86cbad281c1..3627312bf09e 100644 --- a/gcc/config/i386/x86-tune.def +++ b/gcc/config/i386/x86-tune.def @@ -612,27 +612,17 @@ DEF_TUNE (X86_TUNE_AVX256_AVOID_VEC_PERM, /* X86_TUNE_AVX256_SPLIT_REGS: if true, AVX512 ops are split into two AVX256 ops. */ DEF_TUNE (X86_TUNE_AVX512_SPLIT_REGS, "avx512_split_regs", m_ZNVER4) +/* It's better to align MOVE_MAX with prefer_vector_width to reduce + risk of STLF stalls(small store followed by big load.) */ /* X86_TUNE_AVX256_MOVE_BY_PIECES: Optimize move_by_pieces with 256-bit AVX instructions. */ DEF_TUNE (X86_TUNE_AVX256_MOVE_BY_PIECES, "avx256_move_by_pieces", m_CORE_HYBRID | m_CORE_AVX2 | m_ZNVER1 | m_ZNVER2 | m_ZNVER3) -/* X86_TUNE_AVX256_STORE_BY_PIECES: Optimize store_by_pieces with 256-bit - AVX instructions. */ -DEF_TUNE (X86_TUNE_AVX256_STORE_BY_PIECES, "avx256_store_by_pieces", - m_CORE_HYBRID | m_CORE_AVX2 | m_ZNVER1 | m_ZNVER2 | m_ZNVER3) - /* X86_TUNE_AVX512_MOVE_BY_PIECES: Optimize move_by_pieces with 512-bit AVX instructions. */ DEF_TUNE (X86_TUNE_AVX512_MOVE_BY_PIECES, "avx512_move_by_pieces", - m_SAPPHIRERAPIDS | m_GRANITERAPIDS | m_GRANITERAPIDS_D - | m_DIAMONDRAPIDS | m_ZNVER4 | m_ZNVER5) - -/* X86_TUNE_AVX512_STORE_BY_PIECES: Optimize store_by_pieces with 512-bit - AVX instructions. */ -DEF_TUNE (X86_TUNE_AVX512_STORE_BY_PIECES, "avx512_store_by_pieces", - m_SAPPHIRERAPIDS | m_GRANITERAPIDS | m_GRANITERAPIDS_D - | m_DIAMONDRAPIDS | m_ZNVER4 | m_ZNVER5) + m_ZNVER4 | m_ZNVER5) /* X86_TUNE_AVX512_TWO_EPILOGUES: Use two vector epilogues for 512-bit vectorized loops. */ diff --git a/gcc/config/lm32/uclinux-elf.h b/gcc/config/lm32/uclinux-elf.h index e3f51b39d029..1926e26ae014 100644 --- a/gcc/config/lm32/uclinux-elf.h +++ b/gcc/config/lm32/uclinux-elf.h @@ -69,7 +69,7 @@ #undef LINK_GCC_C_SEQUENCE_SPEC #define LINK_GCC_C_SEQUENCE_SPEC \ - "%{static|static-pie:--start-group} %G %{!nolibc:%L} \ + "%{static|static-pie:--start-group} %G %{!nolibc:" LINK_LIBATOMIC_SPEC "%L} \ %{static|static-pie:--end-group}%{!static:%{!static-pie:%G}}" #undef CC1_SPEC diff --git a/gcc/config/loongarch/loongarch.cc b/gcc/config/loongarch/loongarch.cc index 0935d7ba0925..3fe8c766cc77 100644 --- a/gcc/config/loongarch/loongarch.cc +++ b/gcc/config/loongarch/loongarch.cc @@ -6495,8 +6495,7 @@ loongarch_print_operand (FILE *file, rtx op, int letter) break; case 't': - if (GET_MODE (op) != TImode - || (op != CONST0_RTX (TImode) && code != REG)) + if (!reg_or_0_operand (op, TImode)) { output_operand_lossage ("invalid use of '%%%c'", letter); break; @@ -11059,7 +11058,6 @@ void loongarch_emit_swdivsf (rtx res, rtx a, rtx b, machine_mode mode) static bool loongarch_builtin_support_vector_misalignment (machine_mode mode, - const_tree type, int misalignment, bool is_packed, bool is_gather_scatter) @@ -11073,7 +11071,7 @@ loongarch_builtin_support_vector_misalignment (machine_mode mode, if (misalignment == -1) return false; } - return default_builtin_support_vector_misalignment (mode, type, misalignment, + return default_builtin_support_vector_misalignment (mode, misalignment, is_packed, is_gather_scatter); } @@ -11203,6 +11201,69 @@ loongarch_compute_pressure_classes (reg_class *classes) return i; } +/* Implement TARGET_CAN_INLINE_P. Determine whether inlining the function + CALLER into the function CALLEE is safe. Inlining should be rejected if + there is no always_inline attribute and the target options differ except + for differences in ISA extensions or performance tuning options like the + code model, TLS dialect, etc. */ + +static bool +loongarch_can_inline_p (tree caller, tree callee) +{ + tree callee_tree = DECL_FUNCTION_SPECIFIC_TARGET (callee); + tree caller_tree = DECL_FUNCTION_SPECIFIC_TARGET (caller); + + if (!callee_tree) + callee_tree = target_option_default_node; + + if (!caller_tree) + caller_tree = target_option_default_node; + + /* If both caller and callee have attributes, assume that if the + pointer is different, the two functions have different target + options since build_target_option_node uses a hash table for the + options. */ + if (callee_tree == caller_tree) + return true; + + struct cl_target_option *callee_opts = TREE_TARGET_OPTION (callee_tree); + struct cl_target_option *caller_opts = TREE_TARGET_OPTION (caller_tree); + + /* Callee and caller should have the same target options. */ + int callee_target_flags = callee_opts->x_target_flags; + int caller_target_flags = caller_opts->x_target_flags; + + if (callee_target_flags != caller_target_flags) + return false; + + /* If callee enables the isa extension that the caller does not enable, + inlining is disabled. */ + if (~caller_opts->x_la_isa_evolution + & callee_opts->x_la_isa_evolution) + return false; + + /* If simd extensions are enabled for the callee but not for the caller, + inlining is disabled. */ + if ((caller_opts->x_la_opt_simd == ISA_EXT_NONE + && callee_opts->x_la_opt_simd != ISA_EXT_NONE) + || (caller_opts->x_la_opt_simd == ISA_EXT_SIMD_LSX + && callee_opts->x_la_opt_simd == ISA_EXT_SIMD_LASX)) + return false; + + bool always_inline + = lookup_attribute ("always_inline", DECL_ATTRIBUTES (callee)); + + /* If the architectural features match up and the callee is always_inline + then the other attributes don't matter. */ + if (always_inline) + return true; + + if (caller_opts->x_la_opt_cmodel != callee_opts->x_la_opt_cmodel) + return false; + + return true; +} + /* Initialize the GCC target structure. */ #undef TARGET_ASM_ALIGNED_HI_OP #define TARGET_ASM_ALIGNED_HI_OP "\t.half\t" @@ -11483,6 +11544,9 @@ loongarch_compute_pressure_classes (reg_class *classes) #undef TARGET_COMPUTE_PRESSURE_CLASSES #define TARGET_COMPUTE_PRESSURE_CLASSES loongarch_compute_pressure_classes +#undef TARGET_CAN_INLINE_P +#define TARGET_CAN_INLINE_P loongarch_can_inline_p + struct gcc_target targetm = TARGET_INITIALIZER; #include "gt-loongarch.h" diff --git a/gcc/config/loongarch/loongarch.md b/gcc/config/loongarch/loongarch.md index 32ef9809b108..a275a2d0158e 100644 --- a/gcc/config/loongarch/loongarch.md +++ b/gcc/config/loongarch/loongarch.md @@ -1619,13 +1619,13 @@ operands[2] = GEN_INT (len); operands[4] = GEN_INT (lo); - if (lo) - { - rtx tmp = gen_reg_rtx (mode); - emit_move_insn (tmp, gen_rtx_ASHIFTRT(mode, operands[3], - GEN_INT (lo))); - operands[3] = tmp; - } + /* Use a new pseudo register even if lo == 0 or we'll wreck havoc + when operands[0] is same as operands[3]. See PR 121906. */ + rtx tmp = gen_reg_rtx (mode); + rtx val = lo ? gen_rtx_ASHIFTRT (mode, operands[3], GEN_INT (lo)) + : operands[3]; + emit_move_insn (tmp, val); + operands[3] = tmp; }) ;; We always avoid the shift operation in bstrins__for_ior_mask @@ -4193,17 +4193,18 @@ [(set_attr "type" "unknown") (set_attr "mode" "")]) -(define_int_iterator FCLASS_MASK [68 136 952]) +(define_int_iterator FCLASS_MASK [68 136 952 3]) (define_int_attr fclass_optab [(68 "isinf") (136 "isnormal") - (952 "isfinite")]) + (952 "isfinite") + (3 "isnan")]) (define_expand "2" [(match_operand:SI 0 "register_operand" "=r") (match_operand:ANYF 1 "register_operand" " f") (const_int FCLASS_MASK)] - "TARGET_HARD_FLOAT" + "TARGET_HARD_FLOAT && ( != 3 || flag_signaling_nans)" { rtx ft0 = gen_reg_rtx (SImode); rtx t0 = gen_reg_rtx (word_mode); diff --git a/gcc/config/loongarch/sync.md b/gcc/config/loongarch/sync.md index 2ee400e23815..2ef8e88d8d75 100644 --- a/gcc/config/loongarch/sync.md +++ b/gcc/config/loongarch/sync.md @@ -682,21 +682,25 @@ }) (define_insn "atomic_compare_and_swapti_scq" - [(set (match_operand:TI 0 "register_operand" "=&r") - (match_operand:TI 1 "memory_operand" "+ZB")) + [(set (match_operand:V2DI 0 "register_operand" "=&f") + (match_operand:V2DI 1 "memory_operand" "+m")) (set (match_dup 1) - (unspec_volatile:TI [(match_operand:TI 2 "reg_or_0_operand" "rJ") - (match_operand:TI 3 "reg_or_0_operand" "rJ") - (match_operand:SI 4 "const_int_operand")] ;; mod_f - UNSPEC_COMPARE_AND_SWAP)) - (clobber (match_scratch:DI 5 "=&r"))] - "TARGET_64BIT && ISA_HAS_SCQ" + (unspec_volatile:V2DI + [(match_operand:V2DI 2 "reg_or_0_operand" "fJ") + (match_operand:TI 3 "reg_or_0_operand" "rJ") + (match_operand:SI 4 "const_int_operand")] + UNSPEC_COMPARE_AND_SWAP)) + (set (match_operand:FCC 5 "register_operand" "=z") + (ne:FCC (match_dup 1) (match_dup 2))) + (clobber (match_scratch:V2DI 6 "=&f")) + (clobber (match_scratch:DI 7 "=&r"))] + "TARGET_64BIT && ISA_HAS_SCQ && ISA_HAS_LSX" { output_asm_insn ("1:", operands); - output_asm_insn ("ll.d\t%0,%1", operands); - /* Compare the low word */ - output_asm_insn ("bne\t%0,%z2,2f", operands); + /* The loaded value in %7 will just be discarded, this instruction is + only intended to raise the LL bit. Should we use %. instead?? */ + output_asm_insn ("ll.d\t%7,%1", operands); /* Don't reorder the load of high word before ll.d. As the TImode must be aligned in the memory, the high and low words must be in @@ -704,23 +708,31 @@ if (!ISA_HAS_LD_SEQ_SA) output_asm_insn ("dbar\t0x700", operands); - /* Now load the high word. As the high and low words are in the same - cacheline, in case another core has clobbered the high word before the - sc.q instruction is executed, the LL bit for the low word will be - cleared. Thus a normal load is sufficient. */ - output_asm_insn ("ld.d\t%t0,%b1,8", operands); - - /* Compare the high word. */ - output_asm_insn ("bne\t%t0,%t2,2f", operands); + /* Load the word pair altogether. We cannot just load the high word + alone: doing so will need to rely on sc.q to ensure no other threads + have updated the memory between two loads, but issuing an sc.q when + original != expected will cause a page fault with a "valid" (well, at + least the standard implies it's valid) use of + atomic_compare_and_exchange on a const _Atomic object. See + https://gcc.gnu.org/PR80878#c1. */ + output_asm_insn ("vld\t%w0,%1", operands); + + /* Compare the word pair. */ + if (const_0_operand (operands[2], V1TImode)) + operands[7] = operands[0]; + else + output_asm_insn ("vxor.v\t%w6,%w0,%w2", operands); + output_asm_insn ("vseteqz.v\t%5,%w6", operands); + output_asm_insn ("bceqz\t%5,2f", operands); /* Copy the low word of the new value as it'll be clobbered by sc.q. */ - output_asm_insn ("move\t%5,%z3", operands); + output_asm_insn ("move\t%7,%z3", operands); /* Store both words if LL bit is still set. */ - output_asm_insn ("sc.q\t%5,%t3,%1", operands); + output_asm_insn ("sc.q\t%7,%t3,%1", operands); /* Check if sc.q has done the store. */ - output_asm_insn ("beqz\t%5,1b", operands); + output_asm_insn ("beqz\t%7,1b", operands); /* Jump over the mod_f barrier if sc.q has succeeded. */ output_asm_insn ("%T4b\t3f", operands); @@ -732,7 +744,7 @@ output_asm_insn ("3:", operands); return ""; } - [(set_attr "length" "40")]) + [(set_attr "length" "44")]) (define_expand "atomic_compare_and_swapti" [(match_operand:SI 0 "register_operand" "") ;; bool output @@ -743,30 +755,40 @@ (match_operand:SI 5 "const_int_operand" "") ;; is_weak (match_operand:SI 6 "const_int_operand" "") ;; mod_s (match_operand:SI 7 "const_int_operand" "")] ;; mod_f - "TARGET_64BIT && ISA_HAS_SCQ" + "TARGET_64BIT && ISA_HAS_SCQ && ISA_HAS_LSX" { - emit_insn (gen_atomic_compare_and_swapti_scq (operands[1], operands[2], - operands[3], operands[4], - operands[7])); - - rtx t[2]; + rtx fcc = gen_reg_rtx (FCCmode); + rtx gpr = gen_reg_rtx (DImode); + rtx vr = gen_reg_rtx (V2DImode); + rtx mem = gen_rtx_MEM (V2DImode, XEXP (operands[2], 0)); - for (int i = 0; i < 2; i++) + if (const_0_operand (operands[3], TImode)) + operands[3] = CONST0_RTX (V2DImode); + else { - rtx compare = loongarch_subword (operands[1], i); - rtx expect = loongarch_subword (operands[3], i); + rtvec v = rtvec_alloc (2); + for (int i = 0; i < 2; i++) + RTVEC_ELT (v, i) = loongarch_subword (operands[3], i); - t[i] = gen_reg_rtx (DImode); - - if (expect != const0_rtx) - emit_insn (gen_xordi3 (t[i], compare, expect)); - else - emit_move_insn (t[i], compare); + operands[3] = gen_reg_rtx (V2DImode); + emit_insn (gen_vec_initv2didi (operands[3], + gen_rtx_PARALLEL (V2DImode, v))); } - emit_insn (gen_iordi3 (t[0], t[0], t[1])); - emit_insn (gen_rtx_SET (operands[0], - gen_rtx_EQ (SImode, t[0], const0_rtx))); + emit_insn (gen_atomic_compare_and_swapti_scq (vr, mem, operands[3], + operands[4], operands[7], + fcc)); + + for (int i = 0; i < 2; i++) + emit_insn ( + gen_lsx_vpickve2gr_d (loongarch_subword (operands[1], i), vr, + GEN_INT (i))); + + emit_insn (gen_fcc_to_di (gpr, fcc)); + gpr = gen_lowpart (SImode, gpr); + SUBREG_PROMOTED_VAR_P (gpr) = 1; + SUBREG_PROMOTED_SET (gpr, SRP_SIGNED); + emit_move_insn (operands[0], gpr); DONE; }) diff --git a/gcc/config/m68k/m68k.md b/gcc/config/m68k/m68k.md index c96937f0b2ca..7f345bfa123b 100644 --- a/gcc/config/m68k/m68k.md +++ b/gcc/config/m68k/m68k.md @@ -2442,14 +2442,15 @@ gcc_assert (GET_CODE (operands[0]) == MEM); if (GET_CODE (XEXP (operands[0], 0)) == POST_INC) { - operands[1] = gen_rtx_MEM (SImode, - plus_constant (Pmode, - XEXP(operands[0], 0), -8)); + operands[1] + = gen_rtx_MEM (SImode, + plus_constant (Pmode, + XEXP (XEXP (operands[0], 0), 0), -8)); return "move%.l %0,%3\;add%.l %R2,%0\;addx%.l %2,%3\;move%.l %3,%1"; } else if (GET_CODE (XEXP (operands[0], 0)) == PRE_DEC) { - operands[1] = XEXP(operands[0], 0); + operands[1] = XEXP (XEXP (operands[0], 0), 0); return "add%.l %R2,%0\;move%.l %0,%3\;addx%.l %2,%3\;move%.l %3,%1"; } else @@ -2949,13 +2950,14 @@ if (GET_CODE (XEXP (operands[0], 0)) == POST_INC) { operands[1] - = gen_rtx_MEM (SImode, plus_constant (Pmode, - XEXP (operands[0], 0), -8)); + = gen_rtx_MEM (SImode, + plus_constant (Pmode, + XEXP (XEXP (operands[0], 0), 0), -8)); return "move%.l %0,%3\;sub%.l %R2,%0\;subx%.l %2,%3\;move%.l %3,%1"; } else if (GET_CODE (XEXP (operands[0], 0)) == PRE_DEC) { - operands[1] = XEXP(operands[0], 0); + operands[1] = XEXP (XEXP (operands[0], 0), 0); return "sub%.l %R2,%0\;move%.l %0,%3\;subx%.l %2,%3\;move%.l %3,%1"; } else diff --git a/gcc/config/microblaze/iterators.md b/gcc/config/microblaze/iterators.md new file mode 100644 index 000000000000..2ffc2422a0a2 --- /dev/null +++ b/gcc/config/microblaze/iterators.md @@ -0,0 +1,25 @@ +;; Iterator definitions for GCC MicroBlaze machine description files. +;; Copyright (C) 2012-2024 Free Software Foundation, Inc. +;; +;; 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 +;; . + +; atomics code iterator +(define_code_iterator any_atomic [plus ior xor and]) + +; atomics code attribute +(define_code_attr atomic_optab + [(plus "add") (ior "or") (xor "xor") (and "and")]) diff --git a/gcc/config/microblaze/microblaze-protos.h b/gcc/config/microblaze/microblaze-protos.h index 90b79cfe7166..1cee0b3096cb 100644 --- a/gcc/config/microblaze/microblaze-protos.h +++ b/gcc/config/microblaze/microblaze-protos.h @@ -62,6 +62,7 @@ extern int symbol_mentioned_p (rtx); extern int label_mentioned_p (rtx); extern bool microblaze_cannot_force_const_mem (machine_mode, rtx); extern void microblaze_eh_return (rtx op0); +extern void microblaze_subword_address (rtx, rtx *, rtx *); #endif /* RTX_CODE */ /* Declare functions in microblaze-c.cc. */ diff --git a/gcc/config/microblaze/microblaze.cc b/gcc/config/microblaze/microblaze.cc index 2ab5ada4ec9e..80d10ab60e05 100644 --- a/gcc/config/microblaze/microblaze.cc +++ b/gcc/config/microblaze/microblaze.cc @@ -1299,6 +1299,34 @@ microblaze_expand_block_move (rtx dest, rtx src, rtx length, rtx align_rtx) return false; } +/* Compute memory address *aligned_mem and corresponding shift value (*shift) + from a QImode memory reference MEM */ +void +microblaze_subword_address (rtx mem, rtx *aligned_mem, rtx *shift) +{ + /* Align the memory address to a word. */ + rtx addr = force_reg (Pmode, XEXP (mem, 0)); + + rtx addr_mask = gen_int_mode (-4, Pmode); + + rtx aligned_addr = gen_reg_rtx (Pmode); + + emit_move_insn (aligned_addr, gen_rtx_AND (Pmode, addr, addr_mask)); + + *aligned_mem = change_address (mem, SImode, aligned_addr); + + /* Calculate the shift amount. */ + emit_move_insn (*shift, gen_rtx_AND (SImode, addr, gen_int_mode (3, SImode))); + + if (TARGET_LITTLE_ENDIAN == 0) { + emit_move_insn (*shift, + gen_rtx_MINUS (SImode, gen_int_mode (3, SImode), *shift)); + } + + emit_move_insn (*shift, gen_rtx_ASHIFT (SImode, *shift, + gen_int_mode (3, SImode))); +} + static bool microblaze_rtx_costs (rtx x, machine_mode mode, int outer_code ATTRIBUTE_UNUSED, int opno ATTRIBUTE_UNUSED, int *total, diff --git a/gcc/config/microblaze/microblaze.md b/gcc/config/microblaze/microblaze.md index 45c48a71e8df..270df8da0c50 100644 --- a/gcc/config/microblaze/microblaze.md +++ b/gcc/config/microblaze/microblaze.md @@ -21,6 +21,7 @@ (include "constraints.md") (include "predicates.md") +(include "iterators.md") ;;---------------------------------------------------- ;; Constants @@ -43,6 +44,10 @@ (UNSPEC_TLS 106) ;; jump table (UNSPEC_SET_TEXT 107) ;; set text start (UNSPEC_TEXT 108) ;; data text relative + (UNSPECV_CAS_BOOL 201) ;; compare and swap (bool) + (UNSPECV_CAS_VAL 202) ;; compare and swap (val) + (UNSPECV_CAS_MEM 203) ;; compare and swap (mem) + (UNSPECV_ATOMIC_FETCH_OP 204) ;; atomic fetch op ]) (define_c_enum "unspec" [ @@ -79,7 +84,7 @@ ;; bshift Shift operations (define_attr "type" - "unknown,branch,jump,call,load,store,move,arith,darith,imul,idiv,icmp,multi,nop,no_delay_arith,no_delay_load,no_delay_store,no_delay_imul,no_delay_move,bshift,fadd,frsub,fmul,fdiv,fcmp,fsl,fsqrt,fcvt,trap" + "unknown,branch,jump,call,load,store,move,arith,darith,imul,idiv,icmp,multi,nop,no_delay_arith,no_delay_load,no_delay_store,no_delay_imul,no_delay_move,bshift,fadd,frsub,fmul,fdiv,fcmp,fsl,fsqrt,fcvt,trap,atomic" (const_string "unknown")) ;; Main data type used by the insn diff --git a/gcc/config/microblaze/sync.md b/gcc/config/microblaze/sync.md index db7b11e53799..e431f510372c 100644 --- a/gcc/config/microblaze/sync.md +++ b/gcc/config/microblaze/sync.md @@ -18,26 +18,97 @@ ;; . (define_insn "atomic_compare_and_swapsi" - [(match_operand:SI 0 "register_operand" "=&d") ;; bool output - (match_operand:SI 1 "register_operand" "=&d") ;; val output - (match_operand:SI 2 "nonimmediate_operand" "+Q") ;; memory - (match_operand:SI 3 "register_operand" "d") ;; expected value - (match_operand:SI 4 "register_operand" "d") ;; desired value - (match_operand:SI 5 "const_int_operand" "") ;; is_weak - (match_operand:SI 6 "const_int_operand" "") ;; mod_s - (match_operand:SI 7 "const_int_operand" "") ;; mod_f + [(set (match_operand:SI 0 "register_operand" "=&d") ;; bool output + (unspec_volatile:SI + [(match_operand:SI 2 "nonimmediate_operand" "+Q") ;; memory + (match_operand:SI 3 "register_operand" "d") ;; expected value + (match_operand:SI 4 "register_operand" "d")] ;; desired value + UNSPECV_CAS_BOOL)) + (set (match_operand:SI 1 "register_operand" "=&d") ;; val output + (unspec_volatile:SI [(const_int 0)] UNSPECV_CAS_VAL)) + (set (match_dup 2) + (unspec_volatile:SI [(const_int 0)] UNSPECV_CAS_MEM)) + (match_operand:SI 5 "const_int_operand" "") ;; is_weak + (match_operand:SI 6 "const_int_operand" "") ;; mod_s + (match_operand:SI 7 "const_int_operand" "") ;; mod_f (clobber (match_scratch:SI 8 "=&d"))] "" { - output_asm_insn ("addc \tr0,r0,r0", operands); - output_asm_insn ("lwx \t%1,%y2,r0", operands); - output_asm_insn ("addic\t%8,r0,0", operands); - output_asm_insn ("bnei \t%8,.-8", operands); - output_asm_insn ("cmp \t%0,%1,%3", operands); - output_asm_insn ("bnei \t%0,.+16", operands); - output_asm_insn ("swx \t%4,%y2,r0", operands); - output_asm_insn ("addic\t%8,r0,0", operands); - output_asm_insn ("bnei \t%8,.-28", operands); - return ""; + return "add \t%0,r0,r0\n\t" + "lwx \t%1,%y2,r0\n\t" + "addic\t%8,r0,0\n\t" + "bnei \t%8,.-8\n\t" + "cmp \t%8,%1,%3\n\t" + "bnei \t%8,.+20\n\t" + "swx \t%4,%y2,r0\n\t" + "addic\t%8,r0,0\n\t" + "bnei \t%8,.-28\n\t" + "addi \t%0,r0,1"; } + [(set_attr "type" "atomic") + (set_attr "mode" "SI") + (set_attr "length" "40")] ) + +;; +;; +;; +;; +(define_insn "atomic_fetch_si" + [(set (match_operand:SI 0 "register_operand" "=&d") + (match_operand:SI 1 "memory_operand" "+Q")) + (set (match_dup 1) + (unspec_volatile:SI + [(any_atomic:SI (match_dup 1) + (match_operand:SI 2 "register_operand" "d")) + (match_operand:SI 3 "const_int_operand")] ;; model + UNSPECV_ATOMIC_FETCH_OP)) + (clobber (match_scratch:SI 4 "=&d"))] ;; tmp_1 + "" + { + return + "lwx \t%0,%y1,r0\n\t" + "addic\t%4,r0,0\n\t" + "bnei \t%4,.-8\n\t" + "\t%4,%0,%2\n\t" + "swx \t%4,%y1,r0\n\t" + "addic\t%4,r0,0\n\t" + "bnei \t%4,.-24"; + } + [(set_attr "type" "atomic") + (set_attr "mode" "SI") + (set_attr "length" "28")]) + +;; +;; MicroBlaze only supports lx/sx instructions for word mode only +;; +;; Use shift|mask magic to implement atomic_test_and_set using lwx/swx +;; +(define_expand "atomic_test_and_set" + [(match_operand:QI 0 "register_operand" "") ;; bool output + (match_operand:QI 1 "memory_operand" "m") ;; memory + (match_operand:SI 2 "const_int_operand" "")] ;; model + "" +{ + rtx old = gen_reg_rtx (SImode); + rtx mem = operands[1]; + rtx model = operands[2]; + rtx set = gen_reg_rtx (SImode); + rtx aligned_mem = gen_reg_rtx (SImode); + rtx shift = gen_reg_rtx (SImode); + + microblaze_subword_address (mem, &aligned_mem, &shift); + + emit_move_insn (set, GEN_INT (1)); + rtx shifted_set = gen_reg_rtx (SImode); + + emit_move_insn (shifted_set, gen_rtx_ASHIFT (SImode, set, shift)); + + emit_insn (gen_atomic_fetch_orsi (old, aligned_mem, shifted_set, model)); + + emit_move_insn (old, gen_rtx_ASHIFTRT (SImode, old, shift)); + + emit_move_insn (operands[0], gen_lowpart (QImode, old)); + + DONE; +}) diff --git a/gcc/config/mips/mips.cc b/gcc/config/mips/mips.cc index 81eaa3cfb2ad..1fa7ba8451c5 100644 --- a/gcc/config/mips/mips.cc +++ b/gcc/config/mips/mips.cc @@ -7476,6 +7476,9 @@ static void mips_start_function_definition (const char *name, bool mips16_p, tree decl ATTRIBUTE_UNUSED) { + unsigned HOST_WIDE_INT patch_area_size = crtl->patch_area_size; + unsigned HOST_WIDE_INT patch_area_entry = crtl->patch_area_entry; + if (mips16_p) fprintf (asm_out_file, "\t.set\tmips16\n"); else @@ -7488,6 +7491,10 @@ mips_start_function_definition (const char *name, bool mips16_p, fprintf (asm_out_file, "\t.set\tnomicromips\n"); #endif + /* Emit the patching area before the entry label, if any. */ + if (patch_area_entry > 0) + default_print_patchable_function_entry (asm_out_file, + patch_area_entry, true); if (!flag_inhibit_size_directive) { fputs ("\t.ent\t", asm_out_file); @@ -7499,6 +7506,13 @@ mips_start_function_definition (const char *name, bool mips16_p, /* Start the definition proper. */ ASM_OUTPUT_FUNCTION_LABEL (asm_out_file, name, decl); + + /* And the area after the label. Record it if we haven't done so yet. */ + if (patch_area_size > patch_area_entry) + default_print_patchable_function_entry (asm_out_file, + patch_area_size + - patch_area_entry, + patch_area_entry == 0); } /* End a function definition started by mips_start_function_definition. */ @@ -20419,6 +20433,16 @@ mips_option_override (void) if (TARGET_MICROMIPS && TARGET_MIPS16) error ("unsupported combination: %s", "-mips16 -mmicromips"); + /* Make -mmips16e2 imply -mips16 and forbid its coexistence with + -mmicromips as the ASE requires. */ + if (TARGET_MIPS16E2) + { + if (TARGET_MICROMIPS) + error ("unsupported combination: %s", "-mmips16e2 -mmicromips"); + + target_flags |= MASK_MIPS16; + } + /* Prohibit Paired-Single and MSA combination. This is software restriction rather than architectural. */ if (ISA_HAS_MSA && TARGET_PAIRED_SINGLE_FLOAT) @@ -20671,6 +20695,15 @@ mips_option_override (void) "-mcompact-branches=never"); } + /* MIPS16* ASE is forbidden in Release 6, so -mips16 is not available + for MIPS R6 onwards. */ + if ((mips_base_compression_flags & MASK_MIPS16) && mips_isa_rev >= 6) + error ("MIPS16* ASE is forbidden in Release 6"); + + /* Make sure that the user use Release[2,5] when using -mmips16e2. */ + if (TARGET_MIPS16E2 && mips_isa_rev < 2) + error ("%<-mmips16e2%> requires Release[2,5]"); + /* Require explicit relocs for MIPS R6 onwards. This enables simplification of the compact branch and jump support through the backend. */ if (!TARGET_EXPLICIT_RELOCS && mips_isa_rev >= 6) @@ -23331,6 +23364,21 @@ mips_bit_clear_p (enum machine_mode mode, unsigned HOST_WIDE_INT m) return false; } +/* define TARGET_ASM_PRINT_PATCHABLE_FUNCTION_ENTRY */ + +/* The MIPS function start is implemented in the prologue function. + TARGET_ASM_PRINT_PATCHABLE_FUNCTION_ENTRY needs to be inserted + before or after the function name, so this function does not + use a public implementation. This function is implemented in + mips_start_function_definition. */ + +void +mips_print_patchable_function_entry (FILE *file ATTRIBUTE_UNUSED, + unsigned HOST_WIDE_INT + patch_area_size ATTRIBUTE_UNUSED, + bool record_p ATTRIBUTE_UNUSED) +{} + /* Initialize the GCC target structure. */ #undef TARGET_ASM_ALIGNED_HI_OP #define TARGET_ASM_ALIGNED_HI_OP "\t.half\t" @@ -23644,6 +23692,10 @@ mips_bit_clear_p (enum machine_mode mode, unsigned HOST_WIDE_INT m) #undef TARGET_DOCUMENTATION_NAME #define TARGET_DOCUMENTATION_NAME "MIPS" +#undef TARGET_ASM_PRINT_PATCHABLE_FUNCTION_ENTRY +#define TARGET_ASM_PRINT_PATCHABLE_FUNCTION_ENTRY \ +mips_print_patchable_function_entry + struct gcc_target targetm = TARGET_INITIALIZER; #include "gt-mips.h" diff --git a/gcc/config/mips/mips.md b/gcc/config/mips/mips.md index aadf4dd676e2..99654cc8fde0 100644 --- a/gcc/config/mips/mips.md +++ b/gcc/config/mips/mips.md @@ -2617,7 +2617,8 @@ (fma:ANYF (match_operand:ANYF 1 "register_operand") (match_operand:ANYF 2 "register_operand") (neg:ANYF (match_operand:ANYF 3 "register_operand"))))] - "(ISA_HAS_FUSED_MADD3 || ISA_HAS_FUSED_MADD4)") + "(ISA_HAS_FUSED_MADD3 || ISA_HAS_FUSED_MADD4) + || ISA_HAS_FUSED_MADDF") (define_insn "*fms4_msub3" [(set (match_operand:ANYF 0 "register_operand" "=f") @@ -2639,6 +2640,16 @@ [(set_attr "type" "fmadd") (set_attr "mode" "")]) +(define_insn "*fms4_msubf" + [(set (match_operand:ANYF 0 "register_operand" "=f") + (fma:ANYF (match_operand:ANYF 1 "register_operand" "f") + (match_operand:ANYF 2 "register_operand" "f") + (neg:ANYF (match_operand:ANYF 3 "register_operand" "0"))))] + "ISA_HAS_FUSED_MADDF" + "msubf.\t%0,%1,%2" + [(set_attr "type" "fmadd") + (set_attr "mode" "")]) + ;; fnma is defined in GCC as (fma (neg op1) op2 op3) ;; (-op1 * op2) + op3 ==> -(op1 * op2) + op3 ==> -((op1 * op2) - op3) ;; The mips nmsub instructions implement -((op1 * op2) - op3) @@ -2650,8 +2661,9 @@ (fma:ANYF (neg:ANYF (match_operand:ANYF 1 "register_operand")) (match_operand:ANYF 2 "register_operand") (match_operand:ANYF 3 "register_operand")))] - "(ISA_HAS_FUSED_MADD3 || ISA_HAS_FUSED_MADD4) - && !HONOR_SIGNED_ZEROS (mode)") + "((ISA_HAS_FUSED_MADD3 || ISA_HAS_FUSED_MADD4) + && !HONOR_SIGNED_ZEROS (mode)) + || ISA_HAS_FUSED_MADDF") (define_insn "*fnma4_nmsub3" [(set (match_operand:ANYF 0 "register_operand" "=f") @@ -2673,6 +2685,16 @@ [(set_attr "type" "fmadd") (set_attr "mode" "")]) +(define_insn "*fnma4_msubf" + [(set (match_operand:ANYF 0 "register_operand" "=f") + (fma:ANYF (neg:ANYF (match_operand:ANYF 1 "register_operand" "f")) + (match_operand:ANYF 2 "register_operand" "f") + (match_operand:ANYF 3 "register_operand" "0")))] + "ISA_HAS_FUSED_MADDF" + "msubf.\t%0,%1,%2" + [(set_attr "type" "fmadd") + (set_attr "mode" "")]) + ;; fnms is defined as: (fma (neg op1) op2 (neg op3)) ;; ((-op1) * op2) - op3 ==> -(op1 * op2) - op3 ==> -((op1 * op2) + op3) ;; The mips nmadd instructions implement -((op1 * op2) + op3) diff --git a/gcc/config/pa/pa.h b/gcc/config/pa/pa.h index be845c83690b..6972faae8ec4 100644 --- a/gcc/config/pa/pa.h +++ b/gcc/config/pa/pa.h @@ -292,7 +292,7 @@ typedef struct GTY(()) machine_function #define PREFERRED_STACK_BOUNDARY (TARGET_64BIT ? 128 : 512) /* Allocation boundary (in *bits*) for the code of a function. */ -#define FUNCTION_BOUNDARY BITS_PER_WORD +#define FUNCTION_BOUNDARY 32 /* Alignment of field after `int : 0' in a structure. */ #define EMPTY_FIELD_BOUNDARY 32 diff --git a/gcc/config/pru/pru-passes.cc b/gcc/config/pru/pru-passes.cc index a763e1ee65ed..ba95bc414412 100644 --- a/gcc/config/pru/pru-passes.cc +++ b/gcc/config/pru/pru-passes.cc @@ -35,6 +35,7 @@ #include "gimple-iterator.h" #include "gimple-walk.h" #include "gimple-expr.h" +#include "cgraph.h" #include "tree-pass.h" #include "pru-protos.h" @@ -46,11 +47,11 @@ namespace { output a conforming code, raise an error. */ const pass_data pass_data_pru_tiabi_check = { - GIMPLE_PASS, /* type */ + SIMPLE_IPA_PASS, /* type */ "*pru_tiabi_check", /* name */ OPTGROUP_NONE, /* optinfo_flags */ TV_NONE, /* tv_id */ - PROP_gimple_any, /* properties_required */ + 0, /* properties_required */ 0, /* properties_provided */ 0, /* properties_destroyed */ 0, /* todo_flags_start */ @@ -58,11 +59,11 @@ const pass_data pass_data_pru_tiabi_check = }; /* Implementation class for the TI ABI compliance-check pass. */ -class pass_pru_tiabi_check : public gimple_opt_pass +class pass_pru_tiabi_check : public simple_ipa_opt_pass { public: pass_pru_tiabi_check (gcc::context *ctxt) - : gimple_opt_pass (pass_data_pru_tiabi_check, ctxt) + : simple_ipa_opt_pass (pass_data_pru_tiabi_check, ctxt) {} /* opt_pass methods: */ @@ -75,54 +76,79 @@ class pass_pru_tiabi_check : public gimple_opt_pass }; // class pass_pru_tiabi_check -/* Return 1 if type TYPE is a pointer to function type or a - structure having a pointer to function type as one of its fields. - Otherwise return 0. */ -static bool -chkp_type_has_function_pointer (const_tree type) +/* Issue an error diagnostic if the given TYPE is not compatible with + TI's ABI. */ +static void +check_type_tiabi_compatibility (tree type, location_t loc, + hash_set *visited_nodes) { - bool res = false; + /* Do not visit the same type twice. */ + if (visited_nodes->add (type)) + return; - if (POINTER_TYPE_P (type) && FUNC_OR_METHOD_TYPE_P (TREE_TYPE (type))) - res = true; + if (POINTER_TYPE_P (type)) + { + /* TODO: All declarations and statements share the same object for a + function pointer tree type. So if there are several variables + with the same type (function pointer with same function signature), + only the first declaration would get a diagnostic. */ + if (FUNC_OR_METHOD_TYPE_P (TREE_TYPE (type))) + { + location_t ptrloc = DECL_P (type) ? DECL_SOURCE_LOCATION (type) : loc; + error_at (ptrloc, + "function pointers not supported with %<-mabi=ti%> option"); + } + else + check_type_tiabi_compatibility (TREE_TYPE (type), loc, visited_nodes); + } else if (RECORD_OR_UNION_TYPE_P (type)) { - tree field; - - for (field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field)) + for (tree field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field)) if (TREE_CODE (field) == FIELD_DECL) - res = res || chkp_type_has_function_pointer (TREE_TYPE (field)); + { + if (DECL_BIT_FIELD (field)) + error_at (DECL_SOURCE_LOCATION (field), + "bit-fields not supported with %<-mabi=ti%> option"); + + check_type_tiabi_compatibility (TREE_TYPE (field), + DECL_SOURCE_LOCATION (field), + visited_nodes); + } } else if (TREE_CODE (type) == ARRAY_TYPE) - res = chkp_type_has_function_pointer (TREE_TYPE (type)); - - return res; + check_type_tiabi_compatibility (TREE_TYPE (type), loc, visited_nodes); } -/* Check the function declaration FNTYPE for TI ABI compatibility. */ +/* Check the GCC function declaration FNTYPE for TI ABI compatibility. */ static void -chk_function_decl (const_tree fntype, location_t call_location) +check_function_decl (tree fntype, location_t loc, + hash_set *visited_nodes) { + /* Do not visit the same type twice. */ + if (visited_nodes->add (fntype)) + return; + /* GCC does not check if the RETURN VALUE pointer is NULL, so do not allow GCC functions with large return values. */ if (!VOID_TYPE_P (TREE_TYPE (fntype)) && pru_return_in_memory (TREE_TYPE (fntype), fntype)) - error_at (call_location, + error_at (loc, "large return values not supported with %<-mabi=ti%> option"); + /* Rest of checks for the returned type. */ + check_type_tiabi_compatibility (TREE_TYPE (fntype), loc, visited_nodes); + /* Check this function's arguments. */ for (tree p = TYPE_ARG_TYPES (fntype); p; p = TREE_CHAIN (p)) - { - tree arg_type = TREE_VALUE (p); - if (chkp_type_has_function_pointer (arg_type)) - error_at (call_location, - "function pointers not supported with %<-mabi=ti%> option"); - } + check_type_tiabi_compatibility (TREE_VALUE (p), loc, visited_nodes); } -/* Callback for walk_gimple_seq that checks TP tree for TI ABI compliance. */ +/* Callback for walk_gimple_seq that checks TP tree for TI ABI compliance. + Note that TP would have been marked as visited before calling + this function. But the underlying type of TP may or may not have + been visited before. */ static tree -check_op_callback (tree *tp, int *walk_subtrees, void *data) +check_op_callback (tree *tp, int *, void *data) { struct walk_stmt_info *wi = (struct walk_stmt_info *) data; @@ -150,66 +176,91 @@ check_op_callback (tree *tp, int *walk_subtrees, void *data) { case FUNCTION_TYPE: case METHOD_TYPE: - { - /* Note: Do not enforce a small return value. It is safe to - call any TI ABI function from GCC, since GCC will - never pass NULL. */ - - /* Check arguments for function pointers. */ - for (tree p = TYPE_ARG_TYPES (type); p; p = TREE_CHAIN (p)) - { - tree arg_type = TREE_VALUE (p); - if (chkp_type_has_function_pointer (arg_type)) - error_at (gimple_location (wi->stmt), "function pointers " - "not supported with %<-mabi=ti%> option"); - } - break; - } + { + /* Has this function already been inspected? */ + if (wi->pset->add (type)) + return NULL; + + /* Note: Do not enforce a small return value. It is safe to + call any TI ABI function from GCC, since GCC will + never pass NULL. */ + + /* Check arguments for function pointers. */ + for (tree p = TYPE_ARG_TYPES (type); p; p = TREE_CHAIN (p)) + check_type_tiabi_compatibility (TREE_VALUE (p), + gimple_location (wi->stmt), + wi->pset); + break; + } case RECORD_TYPE: case UNION_TYPE: case QUAL_UNION_TYPE: - case POINTER_TYPE: - { - if (chkp_type_has_function_pointer (type)) - { - error_at (gimple_location (wi->stmt), - "function pointers not supported with " - "%<-mabi=ti%> option"); - *walk_subtrees = false; - } - break; - } + { + /* walk_tree would not descend and visit field declarations. + So do it here. */ + check_type_tiabi_compatibility (type, + gimple_location (wi->stmt), + wi->pset); + break; + } default: - break; + break; } return NULL; } /* Pass implementation. */ unsigned -pass_pru_tiabi_check::execute (function *fun) +pass_pru_tiabi_check::execute (function *) { - struct walk_stmt_info wi; - const_tree fntype = TREE_TYPE (fun->decl); + struct cgraph_node *node; + hash_set visited_nodes; + symtab_node *snode; - gimple_seq body = gimple_body (current_function_decl); + FOR_EACH_SYMBOL (snode) + { + tree decl = snode->decl; + if (decl) + { + if (FUNC_OR_METHOD_TYPE_P (TREE_TYPE (decl))) + check_function_decl (TREE_TYPE (decl), + DECL_SOURCE_LOCATION (decl), + &visited_nodes); + else + check_type_tiabi_compatibility (TREE_TYPE (decl), + DECL_SOURCE_LOCATION (decl), + &visited_nodes); + } + } - memset (&wi, 0, sizeof (wi)); - wi.info = NULL; - wi.want_locations = true; + FOR_EACH_FUNCTION_WITH_GIMPLE_BODY (node) + { + function *fn = node->get_fun (); + gimple_stmt_iterator gsi; + basic_block bb; - /* Check the function body. */ - walk_gimple_seq (body, NULL, check_op_callback, &wi); + FOR_EACH_BB_FN (bb, fn) + { + for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi)) + { + struct walk_stmt_info wi; + memset (&wi, 0, sizeof (wi)); + wi.info = NULL; + wi.want_locations = true; - /* Check the function declaration. */ - chk_function_decl (fntype, fun->function_start_locus); + wi.pset = &visited_nodes; + /* Check the function body. */ + walk_gimple_stmt (&gsi, NULL, check_op_callback, &wi); + } + } + } return 0; } } // anon namespace -gimple_opt_pass * +simple_ipa_opt_pass * make_pru_tiabi_check (gcc::context *ctxt) { return new pass_pru_tiabi_check (ctxt); diff --git a/gcc/config/pru/pru-passes.def b/gcc/config/pru/pru-passes.def index da48a2c20989..c0d3528c734f 100644 --- a/gcc/config/pru/pru-passes.def +++ b/gcc/config/pru/pru-passes.def @@ -21,7 +21,7 @@ that the compiled code by GCC conforms to the TI ABI specification. If GCC cannot output a conforming code, then an error is raised. */ -INSERT_PASS_AFTER (pass_warn_unused_result, 1, pru_tiabi_check); +INSERT_PASS_AFTER (pass_ipa_auto_profile_offline, 1, pru_tiabi_check); /* If -minrt option is used, then this pass would validate that the compiled code by GCC is compatible with the minimal diff --git a/gcc/config/pru/pru-protos.h b/gcc/config/pru/pru-protos.h index 4750f0e10077..d2e51ea44d2f 100644 --- a/gcc/config/pru/pru-protos.h +++ b/gcc/config/pru/pru-protos.h @@ -72,8 +72,12 @@ extern int pru_get_ctable_base_offset (HOST_WIDE_INT caddr); extern int pru_symref2ioregno (rtx op); -extern rtl_opt_pass *make_pru_tiabi_check (gcc::context *); -extern rtl_opt_pass *make_pru_minrt_check (gcc::context *); +/* Forward declarations to avoid unnecessarily including headers. */ +class simple_ipa_opt_pass; +class gimple_opt_pass; + +extern simple_ipa_opt_pass *make_pru_tiabi_check (gcc::context *); +extern gimple_opt_pass *make_pru_minrt_check (gcc::context *); #endif /* RTX_CODE */ diff --git a/gcc/config/riscv/arch-canonicalize b/gcc/config/riscv/arch-canonicalize index 15a398502b38..78c8b25d17e5 100755 --- a/gcc/config/riscv/arch-canonicalize +++ b/gcc/config/riscv/arch-canonicalize @@ -341,6 +341,24 @@ def get_all_extensions(): # IMPLIED_EXT = parse_def_files() +def load_profiles(): + profiles = set() + def_path = os.path.join(os.path.dirname(__file__), "riscv-profiles.def") + with open(def_path) as f: + for line in f: + line = line.strip() + if line.startswith("RISCV_PROFILE"): + # Format: RISCV_PROFILE("rva20u64", "rv64imafd...") + parts = line.split('"') + if len(parts) >= 2: + profiles.add(parts[1]) # Compare PROFILE_NAME + return profiles + +SUPPORTED_PROFILES = load_profiles() + +def is_profile_arch(arch): + return arch in SUPPORTED_PROFILES + def arch_canonicalize(arch, isa_spec): # TODO: Support extension version. is_isa_spec_2p2 = isa_spec == '2.2' @@ -608,7 +626,10 @@ if __name__ == "__main__": sys.exit(run_unit_tests()) elif args.arch_strs: for arch in args.arch_strs: - print (arch_canonicalize(arch, args.misa_spec)) + if is_profile_arch(arch): + print(arch) + else: + print(arch_canonicalize(arch, args.misa_spec)) else: parser.print_help() sys.exit(1) diff --git a/gcc/config/riscv/autovec-opt.md b/gcc/config/riscv/autovec-opt.md index dbbade34dce3..d5950ebe3b6b 100644 --- a/gcc/config/riscv/autovec-opt.md +++ b/gcc/config/riscv/autovec-opt.md @@ -1868,6 +1868,68 @@ } [(set_attr "type" "vimuladd")]) +(define_insn_and_split "*widen_first__vx_" + [(set (match_operand:VWEXTI_D 0 "register_operand") + (vec_duplicate:VWEXTI_D + (any_extend: + (match_operand: 1 "register_operand"))))] + "TARGET_VECTOR && TARGET_64BIT && can_create_pseudo_p ()" + "#" + "&& 1" + [(const_int 0)] + { + rtx extend_scalar = gen_reg_rtx (mode); + emit_insn (gen_2 (extend_scalar, + operands[1])); + + insn_code icode = code_for_pred_broadcast (mode); + rtx vec_dup_ops[] = {operands[0], extend_scalar}; + riscv_vector::emit_vlmax_insn (icode, riscv_vector::UNARY_OP, vec_dup_ops); + + DONE; + }) + +(define_insn_and_split "*widen___vx_" + [(set (match_operand:VWEXTI_D 0 "register_operand") + (any_widen_binop:VWEXTI_D + (any_extend:VWEXTI_D + (match_operand: 1 "register_operand")) + (vec_duplicate:VWEXTI_D + (any_extend: + (match_operand: 2 "register_operand")))))] + "TARGET_VECTOR && TARGET_64BIT && can_create_pseudo_p ()" + "#" + "&& 1" + [(const_int 0)] + { + insn_code icode = code_for_pred_dual_widen_scalar (, + , + mode); + riscv_vector::emit_vlmax_insn (icode, riscv_vector::BINARY_OP, operands); + + DONE; + } + [(set_attr "type" "viwalu")]) + +(define_insn_and_split "*widen_waddu_wx_" + [(set (match_operand:VWEXTI_D 0 "register_operand") + (any_widen_binop:VWEXTI_D + (vec_duplicate:VWEXTI_D + (any_extend: + (match_operand: 2 "register_operand"))) + (match_operand:VWEXTI_D 1 "register_operand")))] + "TARGET_VECTOR && TARGET_64BIT && can_create_pseudo_p ()" + "#" + "&& 1" + [(const_int 0)] + { + insn_code icode = code_for_pred_single_widen_scalar (PLUS, ZERO_EXTEND, + mode); + riscv_vector::emit_vlmax_insn (icode, riscv_vector::BINARY_OP, operands); + + DONE; + } + [(set_attr "type" "viwalu")]) ;; ============================================================================= ;; Combine vec_duplicate + op.vv to op.vf @@ -2193,6 +2255,73 @@ [(set_attr "type" "vfwalu")] ) +;; vfwadd.wf +(define_insn_and_split "*vfwadd_wf_" + [(set (match_operand:VWEXTF 0 "register_operand") + (plus:VWEXTF + (vec_duplicate:VWEXTF + (float_extend: + (match_operand: 2 "register_operand"))) + (match_operand:VWEXTF 1 "register_operand")))] + "TARGET_VECTOR && can_create_pseudo_p ()" + "#" + "&& 1" + [(const_int 0)] + { + riscv_vector::emit_vlmax_insn (code_for_pred_single_widen_scalar (PLUS, + mode), + riscv_vector::BINARY_OP_FRM_DYN, operands); + + DONE; + } + [(set_attr "type" "vfwalu")] +) + +;; vfwsub.vf +(define_insn_and_split "*vfwsub_vf_" + [(set (match_operand:VWEXTF 0 "register_operand") + (minus:VWEXTF + (float_extend:VWEXTF + (match_operand: 1 "register_operand")) + (vec_duplicate:VWEXTF + (float_extend: + (match_operand: 2 "register_operand")))))] + "TARGET_VECTOR && can_create_pseudo_p ()" + "#" + "&& 1" + [(const_int 0)] + { + riscv_vector::emit_vlmax_insn (code_for_pred_dual_widen_scalar (MINUS, + mode), + riscv_vector::BINARY_OP_FRM_DYN, operands); + + DONE; + } + [(set_attr "type" "vfwalu")] +) + +;; vfwsub.wf +(define_insn_and_split "*vfwsub_wf_" + [(set (match_operand:VWEXTF 0 "register_operand") + (minus:VWEXTF + (match_operand:VWEXTF 1 "register_operand") + (vec_duplicate:VWEXTF + (float_extend: + (match_operand: 2 "register_operand")))))] + "TARGET_VECTOR && can_create_pseudo_p ()" + "#" + "&& 1" + [(const_int 0)] + { + riscv_vector::emit_vlmax_insn (code_for_pred_single_widen_scalar (MINUS, + mode), + riscv_vector::BINARY_OP_FRM_DYN, operands); + + DONE; + } + [(set_attr "type" "vfwalu")] +) + ;; vfadd.vf (define_insn_and_split "*vfadd_vf_" [(set (match_operand:V_VLSF 0 "register_operand") diff --git a/gcc/config/riscv/bitmanip.md b/gcc/config/riscv/bitmanip.md index 21426f496798..59b71ed263b0 100644 --- a/gcc/config/riscv/bitmanip.md +++ b/gcc/config/riscv/bitmanip.md @@ -553,6 +553,19 @@ "\t%0,%1,%z2" [(set_attr "type" "")]) +;; Provide a minmax pattern for ifcvt to match. +(define_insn "*_cmp_3" + [(set (match_operand:X 0 "register_operand" "=r") + (if_then_else:X + (bitmanip_minmax_cmp_op + (match_operand:X 1 "register_operand" "r") + (match_operand:X 2 "register_operand" "r")) + (match_dup 1) + (match_dup 2)))] + "TARGET_ZBB" + "\t%0,%1,%z2" + [(set_attr "type" "")]) + ;; Optimize the common case of a SImode min/max against a constant ;; that is safe both for sign- and zero-extension. (define_split @@ -1205,13 +1218,13 @@ ;; Reversed CRC 8, 16, 32 for TARGET_64 (define_expand "crc_rev4" ;; return value (calculated CRC) - [(set (match_operand:ANYI 0 "register_operand" "=r") + [(set (match_operand:ANYI 0 "register_operand") ;; initial CRC - (unspec:ANYI [(match_operand:ANYI 1 "register_operand" "r") + (unspec:ANYI [(match_operand:ANYI 1 "register_operand") ;; data - (match_operand:ANYI1 2 "register_operand" "r") + (match_operand:ANYI1 2 "register_operand") ;; polynomial without leading 1 - (match_operand:ANYI 3)] + (match_operand:ANYI 3 "const_int_operand")] UNSPEC_CRC_REV))] /* We don't support the case when data's size is bigger than CRC's size. */ "mode >= mode" @@ -1245,13 +1258,13 @@ ;; CRC 8, 16, (32 for TARGET_64) (define_expand "crc4" ;; return value (calculated CRC) - [(set (match_operand:SUBX 0 "register_operand" "=r") + [(set (match_operand:SUBX 0 "register_operand") ;; initial CRC - (unspec:SUBX [(match_operand:SUBX 1 "register_operand" "r") + (unspec:SUBX [(match_operand:SUBX 1 "register_operand") ;; data - (match_operand:SUBX1 2 "register_operand" "r") + (match_operand:SUBX1 2 "register_operand") ;; polynomial without leading 1 - (match_operand:SUBX 3)] + (match_operand:SUBX 3 "const_int_operand")] UNSPEC_CRC))] /* We don't support the case when data's size is bigger than CRC's size. */ "(TARGET_ZBKC || TARGET_ZBC || TARGET_ZVBC) diff --git a/gcc/config/riscv/iterators.md b/gcc/config/riscv/iterators.md index d30022415099..35de17f76cd9 100644 --- a/gcc/config/riscv/iterators.md +++ b/gcc/config/riscv/iterators.md @@ -207,6 +207,9 @@ ;; This code iterator allows signed and unsigned widening multiplications ;; to use the same template. (define_code_iterator any_extend [sign_extend zero_extend]) +(define_code_attr extend_name [ + (sign_extend "extend") (zero_extend "zero_extend") +]) ;; These code iterators allow unsigned and signed extraction to be generated ;; from the same template. @@ -264,6 +267,14 @@ (define_code_iterator bitmanip_minmax [smin umin smax umax]) +(define_code_iterator bitmanip_minmax_cmp_op [lt ltu le leu ge geu gt gtu]) + +; Map a comparison operator to a min or max. +(define_code_attr bitmanip_minmax_cmp_insn [(lt "min") (ltu "minu") + (le "min") (leu "minu") + (ge "max") (geu "maxu") + (gt "max") (gtu "maxu")]) + (define_code_iterator clz_ctz_pcnt [clz ctz popcount]) (define_code_iterator bitmanip_rotate [rotate rotatert]) diff --git a/gcc/config/riscv/predicates.md b/gcc/config/riscv/predicates.md index 777e71b14e38..f811a4e40ca7 100644 --- a/gcc/config/riscv/predicates.md +++ b/gcc/config/riscv/predicates.md @@ -334,6 +334,13 @@ && riscv_split_symbol_type (symbol_type) && symbol_type != SYMBOL_PCREL; + /* Be tight about the SUBREGs we accept. In particular, + (subreg (mem)) has been discouraged for decades. Just + allow (subreg (reg)) until such time as we see a strong + need to be more permissive. */ + case SUBREG: + return REG_P (SUBREG_REG (op)); + default: return true; } @@ -607,13 +614,12 @@ (define_predicate "ge_operator" (match_code "ge,geu")) -;; pmode_reg_or_uimm5_operand can be used by vsll.vx/vsrl.vx/vsra.vx instructions. -;; Since it has the same predicate with vector_length_operand which allows register -;; or immediate (0 ~ 31), we define this predicate same as vector_length_operand here. -;; We don't use vector_length_operand directly to predicate vsll.vx/vsrl.vx/vsra.vx -;; since it may be confusing. +;; pmode_reg_or_uimm5_operand can be used by vsll.vx/vsrl.vx/vsra.vx instructions +;; It is *not* equivalent to vector_length_operand due to the vector_length_operand +;; needing to conditionalize some behavior on XTHEADVECTOR. (define_special_predicate "pmode_reg_or_uimm5_operand" - (match_operand 0 "vector_length_operand")) + (ior (match_operand 0 "pmode_register_operand") + (match_operand 0 "const_csr_operand"))) (define_special_predicate "pmode_reg_or_0_operand" (ior (match_operand 0 "const_0_operand") diff --git a/gcc/config/riscv/riscv-bclr-lowest-set-bit.cc b/gcc/config/riscv/riscv-bclr-lowest-set-bit.cc new file mode 100644 index 000000000000..6bc4ea562415 --- /dev/null +++ b/gcc/config/riscv/riscv-bclr-lowest-set-bit.cc @@ -0,0 +1,306 @@ +/* Convert clear lowest bit set idiom into a more efficient + bclr sequence when possible. + + Copyright (C) 2018-2025 Free Software Foundation, Inc. + +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 +. */ + +#define IN_TARGET_CODE 1 + +#include "config.h" +#include "system.h" +#include "coretypes.h" +#include "tm.h" +#include "rtl.h" +#include "backend.h" +#include "df.h" +#include "tree-pass.h" + +/* x & (x - 1) clears the lowest set bit in x. If we have a ctz (x) nearby, + then we can use a bclr with the bit position defined by the output of + the ctz. */ + +namespace { + +const pass_data pass_data_bclr_lowest_set_bit = +{ + RTL_PASS, /* type */ + "bclr_lowest_set_bit", /* name */ + OPTGROUP_NONE, /* optinfo_flags */ + TV_NONE, /* tv_id */ + 0, /* properties_required */ + 0, /* properties_provided */ + 0, /* properties_destroyed */ + 0, /* todo_flags_start */ + 0, /* todo_flags_finish */ +}; + +class pass_bclr_lowest_set_bit : public rtl_opt_pass +{ +public: + pass_bclr_lowest_set_bit (gcc::context *ctxt) + : rtl_opt_pass (pass_data_bclr_lowest_set_bit, ctxt) + {} + + /* opt_pass methods: */ + virtual bool gate (function *) + { + /* This uses ctz and bclr, so we need ZBB and ZBS + instructions. */ + return TARGET_ZBB && TARGET_ZBS && optimize > 0; + } + virtual unsigned int execute (function *); + +private: +}; // class pass_bclr_lowest_set_bit + +/* Look at real insns before START to see if any of them compute ctz (src). + If so, return the insn that is a ctz, otherwise return NULL. Look no + further than LIMIT real statements and do not leave this basic block. */ + +rtx_insn * +find_prior_ctz (rtx_insn *start, rtx src, int limit) +{ + rtx_insn *prev = start; + while (prev && limit > 0) + { + prev = prev_nonnote_nondebug_insn_bb (prev); + limit--; + + if (prev) + { + rtx set = single_set (prev); + if (!set) + continue; + + /* A ctz of a SI object on rv64 will have an + SUBREG argument. */ + if (GET_CODE (SET_SRC (set)) == CTZ + && (XEXP (SET_SRC (set), 0) == src + || (SUBREG_P (XEXP (SET_SRC (set), 0)) + && SUBREG_REG (XEXP (SET_SRC (set), 0)) == src))) + { + /* We've found a CTZ, make sure neither the input nor + the output change between the CTZ and START. */ + if (reg_set_between_p (src, prev, start) + || reg_set_between_p (SET_DEST (set), prev, start)) + return NULL; + + /* Everything looks good. */ + return prev; + } + } + } + return NULL; +} + +/* Look at real insns after START to see if any of them compute ctz (src). + If so, return the insn that is a ctz, otherwise return NULL. Look no + further than LIMIT real statements and do not leave this basic block. */ + +rtx_insn * +find_later_ctz (rtx_insn *start, rtx src, int limit) +{ + rtx_insn *next = start; + while (next && limit > 0) + { + next = next_nonnote_nondebug_insn_bb (next); + limit--; + + if (next) + { + rtx set = single_set (next); + if (!set) + continue; + + /* A ctz of a SI object on rv64 will have an + SUBREG argument. */ + if (GET_CODE (SET_SRC (set)) == CTZ + && (XEXP (SET_SRC (set), 0) == src + || (SUBREG_P (XEXP (SET_SRC (set), 0)) + && SUBREG_REG (XEXP (SET_SRC (set), 0)) == src))) + { + /* We've found a CTZ. The CTZ is going to be moved, so + we need to verify its input doesn't change between + START and NEXT. We also have to verify that its + destination is unused between those points. */ + if (reg_set_between_p (XEXP (SET_SRC (set), 0), start, next) + || reg_used_between_p (SET_DEST (set), start, next)) + return NULL; + + return next; + } + } + } + return NULL; +} + +/* So the basic idea here is to find x & (x - 1) idioms which clear the + lowest set bit. If there is a nearby ctz (x), then we can profitably + use a ctz+bclr sequence instead, essentially replacing the addi+and + with bclr. This should often be more efficient and save space. + + We don't do this in gimple because the cost model would reject as the + optimized for appear more expensive from its costing model. + + Combine won't work as there's no data dependency between the + ctz and the x & (x - 1) idiom. + + Peepholing doesn't work consistently because we're constantly + inserting unrelated instructions between the two components of + the x & (x - 1) idiom. We'd have to match the ctz in various + positions as well as deal with random insns the scheduler puts + in the middle of the key instrutions. + + So, this mini pass to optimize this scenario. */ + +unsigned int +pass_bclr_lowest_set_bit::execute (function *fn) +{ + basic_block bb; + + /* Scan all the blocks, once. */ + FOR_ALL_BB_FN (bb, fn) + { + rtx_insn *insn; + /* Scan all the insns once. */ + FOR_BB_INSNS (bb, insn) + { + /* Ignore as much as we can. */ + if (!NONDEBUG_INSN_P (insn) + || JUMP_P (insn) + || CALL_P (insn)) + continue; + + rtx dec_set = single_set (insn); + if (!dec_set) + continue; + + rtx dec_src = SET_SRC (dec_set); + rtx dec_dest = SET_DEST (dec_set); + + /* For a 32 bit object on rv64, the decrement will + be wrapped by a SIGN_EXTEND. Strip it. */ + if (GET_CODE (dec_src) == SIGN_EXTEND) + dec_src = XEXP (dec_src, 0); + + /* Verify it's res = x - 1, if not proceed to the next insn. */ + if (!dec_set + || !REG_P (dec_dest) + || GET_CODE (dec_src) != PLUS + || (XEXP (dec_src, 1) != CONSTM1_RTX (GET_MODE (dec_src)))) + continue; + + /* Get the value being decremented. Note it might be + wrapped by a SUBREG which we strip. */ + dec_src = XEXP (dec_src, 0); + if (SUBREG_P (dec_src)) + dec_src = SUBREG_REG (dec_src); + + /* So we've found dest = src - 1; Now look at the next + real insn and see if it's dest2 = (dest & src). */ + rtx_insn *next = next_nonnote_nondebug_insn_bb (insn); + if (!next) + continue; + + rtx and_set = single_set (next); + + if (!and_set) + continue; + + rtx and_src = SET_SRC (and_set); + rtx and_dest = SET_DEST (and_set); + if (!and_set + || !REG_P (and_dest) + || GET_CODE (and_src) != AND) + continue; + + rtx and_op0 = XEXP (and_src, 0); + rtx and_op1 = XEXP (and_src, 1); + + if (dec_dest != and_op0 && dec_dest != and_op1) + continue; + + if (dec_src != and_op0 && dec_src != and_op1) + continue; + + /* We've found x & (x - 1). Now look for a suitable ctz nearby. */ + + rtx_insn *prior_ctz = find_prior_ctz (insn, dec_src, 10); + if (prior_ctz) + { + rtx prior_ctz_output = SET_DEST (single_set (prior_ctz)); + + /* Create a pattern for the variable bit clear idiom. */ + rtx pat = gen_rtx_ROTATE (GET_MODE (dec_dest), + GEN_INT (-2), + gen_lowpart (QImode, prior_ctz_output)); + pat = gen_rtx_AND (GET_MODE (dec_dest), pat, dec_src); + + /* Slam that pattern in as the SET_SRC of the original AND. */ + SET_SRC (and_set) = pat; + INSN_CODE (next) = -1; + df_insn_rescan (next); + + /* Start next loop iteration. */ + continue; + } + + /* Typically in cases where we can optimize, we'll find a REG->REG + copy into DEC_SRC immediately before INSN. Look for it. */ + rtx_insn *prev = prev_nonnote_nondebug_insn_bb (insn); + rtx copy = NULL_RTX; + if (prev + && (copy = single_set (prev)) != NULL_RTX + && SET_SRC (copy) == dec_src) + dec_src = SET_DEST (copy); + + /* We didn't find a CTZ before INSN. So look after NEXT. + This case is more complex as we have to move insns around. */ + rtx_insn *later_ctz = find_later_ctz (next, dec_src, 10); + if (later_ctz) + { + /* Remove the CTZ from the stream and reemit it immediately + after NEXT. XXX FIXME. Need to prove this is safe. */ + df_insn_delete (later_ctz); + remove_insn (later_ctz); + SET_PREV_INSN (later_ctz) = NULL; + SET_NEXT_INSN (later_ctz) = NULL; + df_insn_rescan (emit_insn_after (PATTERN (later_ctz), next)); + + /* Now construct the bclr insn and add it to the stream. */ + rtx later_ctz_output = SET_DEST (single_set (later_ctz)); + rtx pat = gen_rtx_ROTATE (GET_MODE (dec_dest), + GEN_INT (-2), + gen_lowpart (QImode, later_ctz_output)); + pat = gen_rtx_AND (GET_MODE (dec_dest), pat, dec_src); + pat = gen_rtx_SET (and_dest, pat); + df_insn_rescan (emit_insn_after (pat, NEXT_INSN (next))); + } + } + } + + return 0; +} + +} // anon namespace + +rtl_opt_pass * +make_pass_bclr_lowest_set_bit (gcc::context *ctxt) +{ + return new pass_bclr_lowest_set_bit (ctxt); +} diff --git a/gcc/config/riscv/riscv-ext.def b/gcc/config/riscv/riscv-ext.def index d162fa47efd9..80f534c64614 100644 --- a/gcc/config/riscv/riscv-ext.def +++ b/gcc/config/riscv/riscv-ext.def @@ -1564,7 +1564,7 @@ DEFINE_RISCV_EXT( /* FULL_NAME */ "sdtrig extension", /* DESC */ "", /* URL */ , - /* DEP_EXTS */ ({}), + /* DEP_EXTS */ ({"zicsr"}), /* SUPPORTED_VERSIONS */ ({{1, 0}}), /* FLAG_GROUP */ sd, /* BITMASK_GROUP_ID */ BITMASK_NOT_YET_ALLOCATED, @@ -1941,7 +1941,7 @@ DEFINE_RISCV_EXT( /* FULL_NAME */ "ssstrict extension", /* DESC */ "", /* URL */ , - /* DEP_EXTS */ ({}), + /* DEP_EXTS */ ({"zicsr"}), /* SUPPORTED_VERSIONS */ ({{1, 0}}), /* FLAG_GROUP */ ss, /* BITMASK_GROUP_ID */ BITMASK_NOT_YET_ALLOCATED, diff --git a/gcc/config/riscv/riscv-passes.def b/gcc/config/riscv/riscv-passes.def index bc803c4678ed..5aa41228e1fe 100644 --- a/gcc/config/riscv/riscv-passes.def +++ b/gcc/config/riscv/riscv-passes.def @@ -17,6 +17,7 @@ along with GCC; see the file COPYING3. If not see . */ +INSERT_PASS_AFTER (pass_combine, 1, pass_bclr_lowest_set_bit); INSERT_PASS_AFTER (pass_rtl_store_motion, 1, pass_shorten_memrefs); INSERT_PASS_AFTER (pass_split_all_insns, 1, pass_avlprop); INSERT_PASS_BEFORE (pass_fast_rtl_dce, 1, pass_vsetvl); diff --git a/gcc/config/riscv/riscv-profiles.def b/gcc/config/riscv/riscv-profiles.def new file mode 100644 index 000000000000..741c4719b37d --- /dev/null +++ b/gcc/config/riscv/riscv-profiles.def @@ -0,0 +1,82 @@ +/* List of supported core and tune info for RISC-V. + Copyright (C) 2025 Free Software Foundation, Inc. + + 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 + . */ + +/* This is a list of RISC-V Profiles defination. + + Before using #include to read this file, define a macro: + + RISCV_PROFILE(PROFILE_NAME, ARCH) + + The PROFILE_NAME is the name of the profile, represented as a string. + The ARCH is the default arch of the core, represented as a string. */ + +#ifndef RISCV_PROFILE +#define RISCV_PROFILE(PROFILE_NAME, ARCH) +#endif + +/* RVI20U only contains the base extension 'i' as mandatory extension. */ +RISCV_PROFILE("rvi20u64", "rv64i") +RISCV_PROFILE("rvi20u32", "rv32i") + +/* RVA20U contains the 'i,m,a,f,d,c,zicsr,zicntr,ziccif,ziccrse,ziccamoa, + zicclsm,za128rs' as mandatory extensions. */ +RISCV_PROFILE("rva20u64", "rv64imafdc_zicsr_zicntr_ziccif_ziccrse_ziccamoa" + "_zicclsm_za128rs") + +/* RVA22U contains the 'i,m,a,f,d,c,zicsr,zihintpause,zba,zbb,zbs,zicntr, + zihpm,ziccif,ziccrse,ziccamoa, zicclsm,zic64b,za64rs,zicbom,zicbop,zicboz, + zfhmin,zkt' as mandatory extensions. */ +RISCV_PROFILE("rva22u64", "rv64imafdc_zicsr_zicntr_ziccif_ziccrse_ziccamoa" + "_zicclsm_zic64b_za64rs_zihintpause_zba_zbb_zbs_zicbom_zicbop" + "_zicboz_zfhmin_zkt") + +/* RVA23 contains all mandatory base ISA for RVA22U64 and the new extension + 'v,zihintntl,zvfhmin,zvbb,zvkt,zicond,zimop,zcmop,zfa,zawrs' as mandatory + extensions. */ +RISCV_PROFILE("rva23u64", "rv64imafdcbv_zicsr_zicntr_zihpm_ziccif_ziccrse" + "_ziccamoa_zicclsm_zic64b_za64rs_zihintpause_zba_zbb_zbs" + "_zicbom_zicbop_zicboz_zfhmin_zkt_zvfhmin_zvbb_zvkt_zihintntl" + "_zicond_zimop_zcmop_zcb_zfa_zawrs_supm") + +/* RVA23S contains all mandatory base ISA for RVA23U64 and the privileged + extensions as mandatory extensions. */ +RISCV_PROFILE("rva23s64", "rv64imafdcbv_zicsr_zicntr_zihpm_ziccif_ziccrse" + "_ziccamoa_zicclsm_zic64b_za64rs_zihintpause_zba_zbb_zbs" + "_zicbom_zicbop_zicboz_zfhmin_zkt_zvfhmin_zvbb_zvkt_zihintntl" + "_zicond_zimop_zcmop_zcb_zfa_zawrs_svbare_svade_ssccptr" + "_sstvecd_sstvala_sscounterenw_svpbmt_svinval_svnapot_sstc" + "_sscofpmf_ssnpm_ssu64xl_sha_supm") + +/* RVB23 contains all mandatory base ISA for RVA22U64 and the new extension + 'zihintntl,zicond,zimop,zcmop,zfa,zawrs' as mandatory extensions. */ +RISCV_PROFILE("rvb23u64", "rv64imafdcb_zicsr_zicntr_zihpm_ziccif_ziccrse" + "_ziccamoa_zicclsm_zic64b_za64rs_zihintpause_zba_zbb_zbs" + "_zicbom_zicbop_zicboz_zfhmin_zkt_zihintntl_zicond_zimop" + "_zcmop_zcb") + +/* RVB23S contains all mandatory base ISA for RVB23U64 and the privileged + extensions as mandatory extensions. */ +RISCV_PROFILE("rvb23s64", "rv64imafdcb_zicsr_zicntr_zihpm_ziccif_ziccrse" + "_ziccamoa_zicclsm_zic64b_za64rs_zihintpause_zba_zbb_zbs" + "_zicbom_zicbop_zicboz_zfhmin_zkt_zvfhmin_zvbb_zvkt" + "_zihintntl_zicond_zimop_zcmop_zcb_zfa_zawrs_svbare_svade" + "_ssccptr_sstvecd_sstvala_sscounterenw_svpbmt_svinval_svnapot" + "_sstc_sscofpmf_ssu64xl_supm") + +#undef RISCV_PROFILE diff --git a/gcc/config/riscv/riscv-protos.h b/gcc/config/riscv/riscv-protos.h index 46b256d63539..013b1ddff691 100644 --- a/gcc/config/riscv/riscv-protos.h +++ b/gcc/config/riscv/riscv-protos.h @@ -207,6 +207,7 @@ rtl_opt_pass * make_pass_avlprop (gcc::context *ctxt); rtl_opt_pass * make_pass_vsetvl (gcc::context *ctxt); rtl_opt_pass * make_pass_insert_landing_pad (gcc::context *ctxt); rtl_opt_pass * make_pass_vector_permconst (gcc::context *ctxt); +rtl_opt_pass * make_pass_bclr_lowest_set_bit (gcc::context *ctxt); /* Routines implemented in riscv-string.c. */ @@ -765,7 +766,7 @@ opt_machine_mode vectorize_related_mode (machine_mode, scalar_mode, unsigned int autovectorize_vector_modes (vec *, bool); bool cmp_lmul_le_one (machine_mode); bool cmp_lmul_gt_one (machine_mode); -bool vls_mode_valid_p (machine_mode); +bool vls_mode_valid_p (machine_mode, bool allow_up_to_lmul_8 = true); bool vlmax_avl_type_p (rtx_insn *); bool has_vl_op (rtx_insn *); bool tail_agnostic_p (rtx_insn *); @@ -831,6 +832,7 @@ extern bool th_print_operand_address (FILE *, machine_mode, rtx); #endif extern bool strided_load_broadcast_p (void); +extern bool riscv_prefer_agnostic_p (void); extern bool riscv_use_divmod_expander (void); void riscv_init_cumulative_args (CUMULATIVE_ARGS *, const_tree, rtx, tree, int); extern bool @@ -839,6 +841,8 @@ extern bool riscv_option_valid_version_attribute_p (tree, tree, tree, int); extern bool riscv_process_target_version_attr (tree, location_t *); +extern bool +riscv_process_target_version_str (string_slice, location_t *); extern void riscv_override_options_internal (struct gcc_options *); extern void riscv_option_override (void); diff --git a/gcc/config/riscv/riscv-selftests.cc b/gcc/config/riscv/riscv-selftests.cc index 9ca1ffee394f..d8cc2858541a 100644 --- a/gcc/config/riscv/riscv-selftests.cc +++ b/gcc/config/riscv/riscv-selftests.cc @@ -367,6 +367,162 @@ run_broadcast_selftests (void) BROADCAST_TEST (MODE_VECTOR_FLOAT) } +static void +test_vectorize_related_mode (machine_mode vec_mode, scalar_mode ele_mode, + machine_mode expected) +{ + opt_machine_mode result = riscv_vector::vectorize_related_mode (vec_mode, + ele_mode, 0); + machine_mode result_mode = result.else_void (); + ASSERT_TRUE (result_mode == expected); +} + +static void +run_vectorize_related_mode_vla_selftests (void) +{ + riscv_selftest_arch_abi_setter rv ("rv64imafdcv", ABI_LP64D); + enum rvv_max_lmul_enum backup_rvv_max_lmul = rvv_max_lmul; + rvv_max_lmul = RVV_M1; + + test_vectorize_related_mode (RVVM1QImode, SImode, RVVM1SImode); + test_vectorize_related_mode (RVVM2QImode, SImode, RVVM1SImode); + test_vectorize_related_mode (RVVM4QImode, SImode, RVVM1SImode); + test_vectorize_related_mode (RVVM8QImode, SImode, RVVM1SImode); + test_vectorize_related_mode (RVVM8QImode, DImode, RVVM1DImode); + test_vectorize_related_mode (RVVM8QImode, QImode, RVVM1QImode); + test_vectorize_related_mode (RVVM8QImode, HImode, RVVM1HImode); + + rvv_max_lmul = RVV_M2; + + test_vectorize_related_mode (RVVM1QImode, SImode, RVVM2SImode); + test_vectorize_related_mode (RVVM2QImode, SImode, RVVM2SImode); + test_vectorize_related_mode (RVVM4QImode, SImode, RVVM2SImode); + test_vectorize_related_mode (RVVM8QImode, SImode, RVVM2SImode); + test_vectorize_related_mode (RVVM8QImode, DImode, RVVM2DImode); + test_vectorize_related_mode (RVVM8QImode, QImode, RVVM2QImode); + test_vectorize_related_mode (RVVM8QImode, HImode, RVVM2HImode); + + rvv_max_lmul = RVV_M4; + + test_vectorize_related_mode (RVVM1QImode, SImode, RVVM4SImode); + test_vectorize_related_mode (RVVM2QImode, SImode, RVVM4SImode); + test_vectorize_related_mode (RVVM4QImode, SImode, RVVM4SImode); + test_vectorize_related_mode (RVVM8QImode, SImode, RVVM4SImode); + test_vectorize_related_mode (RVVM8QImode, DImode, RVVM4DImode); + test_vectorize_related_mode (RVVM8QImode, QImode, RVVM4QImode); + test_vectorize_related_mode (RVVM8QImode, HImode, RVVM4HImode); + + rvv_max_lmul = RVV_M8; + + test_vectorize_related_mode (RVVM1QImode, SImode, RVVM4SImode); + test_vectorize_related_mode (RVVM2QImode, SImode, RVVM8SImode); + test_vectorize_related_mode (RVVM4QImode, SImode, RVVM8SImode); + test_vectorize_related_mode (RVVM8QImode, SImode, RVVM8SImode); + test_vectorize_related_mode (RVVM8QImode, DImode, RVVM8DImode); + test_vectorize_related_mode (RVVM8QImode, QImode, RVVM8QImode); + test_vectorize_related_mode (RVVM8QImode, HImode, RVVM8HImode); + + rvv_max_lmul = backup_rvv_max_lmul; +} + +static void +run_vectorize_related_mode_vls_rv64gcv_selftests () +{ + enum rvv_vector_bits_enum backup_rvv_vector_bits = rvv_vector_bits; + rvv_vector_bits = RVV_VECTOR_BITS_SCALABLE; + riscv_selftest_arch_abi_setter rv ("rv64imafdcv", ABI_LP64D); + enum rvv_max_lmul_enum backup_rvv_max_lmul = rvv_max_lmul; + rvv_max_lmul = RVV_M1; + + test_vectorize_related_mode ( V16QImode, QImode, V16QImode); + test_vectorize_related_mode ( V16QImode, HImode, V8HImode); + test_vectorize_related_mode ( V16QImode, SImode, V4SImode); + test_vectorize_related_mode ( V16QImode, DImode, V2DImode); + + rvv_max_lmul = RVV_M2; + + test_vectorize_related_mode ( V32QImode, QImode, V32QImode); + test_vectorize_related_mode ( V32QImode, HImode, V16HImode); + test_vectorize_related_mode ( V32QImode, SImode, V8SImode); + test_vectorize_related_mode ( V32QImode, DImode, V4DImode); + + rvv_max_lmul = RVV_M4; + + test_vectorize_related_mode ( V64QImode, QImode, V64QImode); + test_vectorize_related_mode ( V64QImode, HImode, V32HImode); + test_vectorize_related_mode ( V64QImode, SImode, V16SImode); + test_vectorize_related_mode ( V64QImode, DImode, V8DImode); + + rvv_max_lmul = RVV_M8; + + test_vectorize_related_mode ( V128QImode, QImode, V128QImode); + test_vectorize_related_mode ( V128QImode, HImode, V64HImode); + test_vectorize_related_mode ( V128QImode, SImode, V32SImode); + test_vectorize_related_mode ( V128QImode, DImode, V16DImode); + + rvv_vector_bits = backup_rvv_vector_bits; + rvv_max_lmul = backup_rvv_max_lmul; +} + +static void +run_vectorize_related_mode_vls_rv32gc_zve32x_zvl256b_selftests () +{ + enum rvv_vector_bits_enum backup_rvv_vector_bits = rvv_vector_bits; + rvv_vector_bits = RVV_VECTOR_BITS_SCALABLE; + riscv_selftest_arch_abi_setter rv ("rv32gc_zve32x_zvl256b", ABI_ILP32D); + enum rvv_max_lmul_enum backup_rvv_max_lmul = rvv_max_lmul; + rvv_max_lmul = RVV_M1; + + test_vectorize_related_mode ( V32QImode, QImode, V32QImode); + test_vectorize_related_mode ( V32QImode, HImode, V16HImode); + test_vectorize_related_mode ( V32QImode, SImode, V8SImode); + test_vectorize_related_mode ( V32QImode, DImode, VOIDmode); + + test_vectorize_related_mode ( V16QImode, QImode, V16QImode); + test_vectorize_related_mode ( V16QImode, HImode, V16HImode); + test_vectorize_related_mode ( V16QImode, SImode, V8SImode); + test_vectorize_related_mode ( V16QImode, DImode, VOIDmode); + + rvv_max_lmul = RVV_M2; + + test_vectorize_related_mode ( V32QImode, QImode, V32QImode); + test_vectorize_related_mode ( V32QImode, HImode, V32HImode); + test_vectorize_related_mode ( V32QImode, SImode, V16SImode); + test_vectorize_related_mode ( V32QImode, DImode, VOIDmode); + + rvv_max_lmul = RVV_M4; + + test_vectorize_related_mode ( V128QImode, QImode, V128QImode); + test_vectorize_related_mode ( V128QImode, HImode, V64HImode); + test_vectorize_related_mode ( V128QImode, SImode, V32SImode); + test_vectorize_related_mode ( V128QImode, DImode, VOIDmode); + + rvv_max_lmul = RVV_M8; + + test_vectorize_related_mode ( V128QImode, QImode, V128QImode); + test_vectorize_related_mode ( V128QImode, HImode, V128HImode); + test_vectorize_related_mode ( V128QImode, SImode, V64SImode); + test_vectorize_related_mode ( V128QImode, DImode, VOIDmode); + + rvv_vector_bits = backup_rvv_vector_bits; + rvv_max_lmul = backup_rvv_max_lmul; + +} + +static void +run_vectorize_related_mode_vls_selftests (void) +{ + run_vectorize_related_mode_vls_rv64gcv_selftests (); + run_vectorize_related_mode_vls_rv32gc_zve32x_zvl256b_selftests (); +} + +static void +run_vectorize_related_mode_selftests (void) +{ + run_vectorize_related_mode_vla_selftests (); + run_vectorize_related_mode_vls_selftests (); +} + namespace selftest { /* Run all target-specific selftests. */ void @@ -387,6 +543,7 @@ riscv_run_selftests (void) run_poly_int_selftests (); run_const_vector_selftests (); run_broadcast_selftests (); + run_vectorize_related_mode_selftests (); } } // namespace selftest #endif /* #if CHECKING_P */ diff --git a/gcc/config/riscv/riscv-target-attr.cc b/gcc/config/riscv/riscv-target-attr.cc index 5e01c9214548..54edeebf93c0 100644 --- a/gcc/config/riscv/riscv-target-attr.cc +++ b/gcc/config/riscv/riscv-target-attr.cc @@ -356,11 +356,11 @@ num_occurrences_in_str (char c, char *str) diagnostics against location *LOC, otherwise remain silent. */ bool -riscv_process_target_attr (const char *args, - location_t *loc, - const struct riscv_attribute_info *attrs) +riscv_process_target_str (string_slice args, + location_t *loc, + const struct riscv_attribute_info *attrs) { - size_t len = strlen (args); + size_t len = args.size (); /* No need to emit warning or error on empty string here, generic code already handle this case. */ @@ -371,7 +371,7 @@ riscv_process_target_attr (const char *args, std::unique_ptr buf (new char[len+1]); char *str_to_check = buf.get (); - strcpy (str_to_check, args); + strncpy (str_to_check, args.begin (), args.size ()); /* Used to catch empty spaces between semi-colons i.e. attribute ((target ("attr1;;attr2"))). */ @@ -394,7 +394,7 @@ riscv_process_target_attr (const char *args, if (num_attrs != num_semicolons + 1) { if (loc) - error_at (*loc, "malformed % attribute", args); + error_at (*loc, "malformed % attribute", &args); return false; } @@ -436,7 +436,7 @@ riscv_process_target_attr (tree args, return false; } - return riscv_process_target_attr (TREE_STRING_POINTER (args), loc, attrs); + return riscv_process_target_str (TREE_STRING_POINTER (args), loc, attrs); } /* Implement TARGET_OPTION_VALID_ATTRIBUTE_P. @@ -518,9 +518,18 @@ riscv_process_target_version_attr (tree args, location_t *loc) if (strcmp (str, "default") == 0) return true; - return riscv_process_target_attr (str, loc, riscv_target_version_attrs); + return riscv_process_target_str (str, loc, riscv_target_version_attrs); } +/* Parse the version string in STR and update the global target options space. + If LOC is nonnull, report diagnostics against location *LOC, otherwise + remain silent. */ + +bool +riscv_process_target_version_str (string_slice str, location_t *loc) +{ + return riscv_process_target_str (str, loc, riscv_target_version_attrs); +} /* Implement TARGET_OPTION_VALID_VERSION_ATTRIBUTE_P. This is used to process attribute ((target_version ("..."))). */ diff --git a/gcc/config/riscv/riscv-v.cc b/gcc/config/riscv/riscv-v.cc index b30a95d0e3f1..707924db6a37 100644 --- a/gcc/config/riscv/riscv-v.cc +++ b/gcc/config/riscv/riscv-v.cc @@ -2140,10 +2140,8 @@ get_ma (rtx ma) enum tail_policy get_prefer_tail_policy () { - /* TODO: By default, we choose to use TAIL_ANY which allows - compiler pick up either agnostic or undisturbed. Maybe we - will have a compile option like -mprefer=agnostic to set - this value???. */ + if (riscv_prefer_agnostic_p ()) + return TAIL_AGNOSTIC; return TAIL_ANY; } @@ -2151,10 +2149,8 @@ get_prefer_tail_policy () enum mask_policy get_prefer_mask_policy () { - /* TODO: By default, we choose to use MASK_ANY which allows - compiler pick up either agnostic or undisturbed. Maybe we - will have a compile option like -mprefer=agnostic to set - this value???. */ + if (riscv_prefer_agnostic_p ()) + return MASK_AGNOSTIC; return MASK_ANY; } @@ -3020,7 +3016,7 @@ autovectorize_vector_modes (vector_modes *modes, bool) machine_mode mode; while (size > 0 && get_vector_mode (QImode, size).exists (&mode)) { - if (vls_mode_valid_p (mode)) + if (vls_mode_valid_p (mode, /* allow_up_to_lmul_8 */ false)) modes->safe_push (mode); i++; @@ -3064,7 +3060,7 @@ can_find_related_mode_p (machine_mode vector_mode, scalar_mode element_mode, GET_MODE_SIZE (element_mode), nunits)) return true; if (riscv_v_ext_vls_mode_p (vector_mode) - && multiple_p (TARGET_MIN_VLEN * TARGET_MAX_LMUL, + && multiple_p ((TARGET_MIN_VLEN * TARGET_MAX_LMUL) / BITS_PER_UNIT, GET_MODE_SIZE (element_mode), nunits)) return true; return false; @@ -3742,8 +3738,8 @@ shuffle_compress_patterns (struct expand_vec_perm_d *d) return true; } -/* Recognize patterns like [4 5 6 7 12 13 14 15] where either the lower - or the higher parts of both vectors are combined into one. */ +/* Recognize patterns like [4 5 6 7 12 13 14 15] where a consecutive part of a + vector is combined into another. */ static bool shuffle_slide_patterns (struct expand_vec_perm_d *d) @@ -3755,6 +3751,7 @@ shuffle_slide_patterns (struct expand_vec_perm_d *d) return false; int vlen = vec_len.to_constant (); + int len = 0; if (vlen < 4) return false; @@ -3763,8 +3760,7 @@ shuffle_slide_patterns (struct expand_vec_perm_d *d) /* For a slideup OP0 can stay, for a slidedown OP1 can. The former requires that the first element of the permutation - is the first element of OP0, the latter that the last permutation - element is the last element of OP1. */ + is the first element of OP0. */ bool slideup = false; bool slidedown = false; @@ -3776,35 +3772,49 @@ shuffle_slide_patterns (struct expand_vec_perm_d *d) if (known_eq (d->perm[vlen - 1], 2 * vlen - 1)) slidedown = true; - if (slideup && slidedown) - return false; - if (!slideup && !slidedown) return false; - /* Check for a monotonic sequence with one pivot. */ + /* Check for a monotonic sequence with one or two pivots. */ int pivot = -1; for (int i = 0; i < vlen; i++) { + /* The first pivot is in OP1. */ if (pivot == -1 && known_ge (d->perm[i], vec_len)) pivot = i; if (i > 0 && i != pivot && maybe_ne (d->perm[i], d->perm[i - 1] + 1)) - return false; + { + /* A second pivot would indicate the vector length and is in OP0. */ + if (known_ge (d->perm[i], vec_len) || pivot == -1 || len != 0) + return false; + len = i; + } } if (pivot == -1) return false; + /* In case we have both the permutation starting at OP0's first element and + ending at OP1's last element we may have a slidedown from the + beginning. */ + if (slideup && slidedown) + { + /* The first pivot must be OP1's element in the PIVOT position. */ + if (maybe_ne (d->perm[pivot], vlen + pivot)) + return false; + + slideup = false; + } + /* For a slideup OP1's part (to be slid up) must be a low part, i.e. starting with its first element. */ if (slideup && maybe_ne (d->perm[pivot], vlen)) return false; - /* For a slidedown OP0's part (to be slid down) must be a high part, - i.e. ending with its last element. */ - if (slidedown && maybe_ne (d->perm[pivot - 1], vlen - 1)) - return false; + /* The second pivot in a slideup must be following OP0's position. */ + if (slideup && len && maybe_ne (d->perm[len], len)) + return false; /* Success! */ if (d->testing_p) @@ -3813,22 +3823,23 @@ shuffle_slide_patterns (struct expand_vec_perm_d *d) /* PIVOT is the start of the lower/higher part of OP1 or OP2. For a slideup it indicates how many elements of OP1 to skip/slide over. For a slidedown it indicates how long - OP1's high part is, while VLEN - PIVOT is the amount to slide. */ - int slide_cnt = slideup ? pivot : vlen - pivot; + OP1's high part is, while the first element is the amount to slide. */ insn_code icode; + int slide_cnt = slideup ? pivot : d->perm[0].to_constant(); if (slideup) { - /* No need for a vector length because we slide up until the - end of OP1 anyway. */ rtx ops[] = {d->target, d->op0, d->op1, gen_int_mode (slide_cnt, Pmode)}; icode = code_for_pred_slide (UNSPEC_VSLIDEUP, vmode); - emit_vlmax_insn (icode, SLIDEUP_OP_MERGE, ops); + /* If we didn't set a vector length we slide up until the end of OP1. */ + if (len) + emit_nonvlmax_insn (icode, BINARY_OP_TUMA, ops, + gen_int_mode (len, Pmode)); + else + emit_vlmax_insn (icode, SLIDEUP_OP_MERGE, ops); } else { - /* Here we need a length because we slide to the beginning of OP1 - leaving the remaining elements undisturbed. */ - int len = pivot; + len = pivot; rtx ops[] = {d->target, d->op1, d->op0, gen_int_mode (slide_cnt, Pmode)}; icode = code_for_pred_slide (UNSPEC_VSLIDEDOWN, vmode); @@ -4219,6 +4230,9 @@ shuffle_series_patterns (struct expand_vec_perm_d *d) bool need_insert = false; bool have_series = false; + poly_int64 len = d->perm.length (); + bool need_modulo = !len.is_constant (); + /* Check for a full series. */ if (known_ne (step1, 0) && d->perm.series_p (0, 1, el1, step1)) have_series = true; @@ -4230,7 +4244,33 @@ shuffle_series_patterns (struct expand_vec_perm_d *d) need_insert = true; } - if (!have_series) + /* A permute like {0, 3, 2, 1} is recognized as series because series_p also + allows wrapping/modulo of the permute index. The step would be 3 and the + indices are correct modulo 4. As noted in expand_vec_perm vrgather does + not handle wrapping but rather zeros out-of-bounds indices. + This means we would need to emit an explicit modulo operation here which + does not seem worth it. We rather defer to the generic handling instead. + Even in the non-wrapping case it is doubtful whether + vid + vmul + vrgather + is preferable over + vle + vrgather. + If the permute mask can be reused there shouldn't be any difference and + otherwise it becomes a question of load bandwidth. */ + if (have_series && len.is_constant ()) + { + int64_t step = need_insert ? step2.to_constant () : step1.to_constant (); + int prec = GET_MODE_PRECISION (GET_MODE_INNER (d->vmode)); + wide_int wlen = wide_int::from (len.to_constant (), prec * 2, SIGNED); + wide_int wstep = wide_int::from (step, prec * 2, SIGNED); + wide_int result = wi::mul (wlen, wstep); + if (wi::gt_p (result, wlen, SIGNED)) + need_modulo = true; + } + + if (!have_series || (len.is_constant () && need_modulo)) return false; /* Disable shuffle if we can't find an appropriate integer index mode for @@ -4249,6 +4289,13 @@ shuffle_series_patterns (struct expand_vec_perm_d *d) expand_vec_series (series, gen_int_mode (need_insert ? el2 : el1, eltmode), gen_int_mode (need_insert ? step2 : step1, eltmode)); + if (need_modulo) + { + rtx mod = gen_const_vector_dup (sel_mode, len - 1); + series = expand_simple_binop (sel_mode, AND, series, mod, NULL, + 0, OPTAB_DIRECT); + } + /* Insert the remaining element if necessary. */ if (need_insert) { @@ -5134,26 +5181,27 @@ cmp_lmul_gt_one (machine_mode mode) Then we can have the condition for VLS mode in fixed-vlmax, aka: PRECISION (VLSmode) < VLEN / (64 / PRECISION(VLS_inner_mode)). */ bool -vls_mode_valid_p (machine_mode vls_mode) +vls_mode_valid_p (machine_mode vls_mode, bool allow_up_to_lmul_8) { if (!TARGET_VECTOR || TARGET_XTHEADVECTOR) return false; if (rvv_vector_bits == RVV_VECTOR_BITS_SCALABLE) { - if (GET_MODE_CLASS (vls_mode) != MODE_VECTOR_BOOL - && !ordered_p (TARGET_MAX_LMUL * BITS_PER_RISCV_VECTOR, - GET_MODE_PRECISION (vls_mode))) - /* We enable VLS modes which are aligned with TARGET_MAX_LMUL and - BITS_PER_RISCV_VECTOR. - - e.g. When TARGET_MAX_LMUL = 1 and BITS_PER_RISCV_VECTOR = (128,128). - We enable VLS modes have fixed size <= 128bit. Since ordered_p is - false between VLA modes with size = (128, 128) bits and VLS mode - with size = 128 bits, we will end up with multiple ICEs in - middle-end generic codes. */ - return false; - return true; + if (GET_MODE_CLASS (vls_mode) != MODE_VECTOR_BOOL) + return true; + if (allow_up_to_lmul_8) + return true; + /* We enable VLS modes which are aligned with TARGET_MAX_LMUL and + BITS_PER_RISCV_VECTOR. + + e.g. When TARGET_MAX_LMUL = 1 and BITS_PER_RISCV_VECTOR = (128,128). + We enable VLS modes have fixed size <= 128bit. Since ordered_p is + false between VLA modes with size = (128, 128) bits and VLS mode + with size = 128 bits, we will end up with multiple ICEs in + middle-end generic codes. */ + return !ordered_p (TARGET_MAX_LMUL * BITS_PER_RISCV_VECTOR, + GET_MODE_PRECISION (vls_mode)); } if (rvv_vector_bits == RVV_VECTOR_BITS_ZVL) diff --git a/gcc/config/riscv/riscv-vector-costs.cc b/gcc/config/riscv/riscv-vector-costs.cc index 5e6cb671490c..27ced61e815d 100644 --- a/gcc/config/riscv/riscv-vector-costs.cc +++ b/gcc/config/riscv/riscv-vector-costs.cc @@ -632,7 +632,7 @@ compute_estimated_lmul (loop_vec_info loop_vinfo, machine_mode mode) int estimated_lmul = estimated_vf * GET_MODE_BITSIZE (mode).to_constant () / TARGET_MIN_VLEN; if (estimated_lmul > RVV_M8) - return regno_alignment; + return RVV_M8; else return estimated_lmul; } diff --git a/gcc/config/riscv/riscv-vsetvl.cc b/gcc/config/riscv/riscv-vsetvl.cc index 4fe0ae6d97b7..3586d0cdcc24 100644 --- a/gcc/config/riscv/riscv-vsetvl.cc +++ b/gcc/config/riscv/riscv-vsetvl.cc @@ -1144,9 +1144,10 @@ class vsetvl_info dflags |= demand_flags::DEMAND_LMUL_P; } - if (!m_ta) + /* Demand policy for agnostic if the uarch has a preference. */ + if (!m_ta || riscv_prefer_agnostic_p ()) dflags |= demand_flags::DEMAND_TAIL_POLICY_P; - if (!m_ma) + if (!m_ma || riscv_prefer_agnostic_p ()) dflags |= demand_flags::DEMAND_MASK_POLICY_P; } diff --git a/gcc/config/riscv/riscv.cc b/gcc/config/riscv/riscv.cc index bfd43fba1013..a30c9f1dd146 100644 --- a/gcc/config/riscv/riscv.cc +++ b/gcc/config/riscv/riscv.cc @@ -317,6 +317,7 @@ struct riscv_tune_param const char *function_align; const char *jump_align; const char *loop_align; + bool prefer_agnostic; }; @@ -481,6 +482,7 @@ static const struct riscv_tune_param generic_tune_info = { NULL, /* function_align */ NULL, /* jump_align */ NULL, /* loop_align */ + false, /* prefer-agnostic. */ }; /* Costs to use when optimizing for rocket. */ @@ -505,6 +507,7 @@ static const struct riscv_tune_param rocket_tune_info = { NULL, /* function_align */ NULL, /* jump_align */ NULL, /* loop_align */ + false, /* prefer-agnostic. */ }; /* Costs to use when optimizing for Sifive 7 Series. */ @@ -529,6 +532,7 @@ static const struct riscv_tune_param sifive_7_tune_info = { NULL, /* function_align */ NULL, /* jump_align */ NULL, /* loop_align */ + false, /* prefer-agnostic. */ }; /* Costs to use when optimizing for Sifive p400 Series. */ @@ -553,6 +557,7 @@ static const struct riscv_tune_param sifive_p400_tune_info = { NULL, /* function_align */ NULL, /* jump_align */ NULL, /* loop_align */ + true, /* prefer-agnostic. */ }; /* Costs to use when optimizing for Sifive p600 Series. */ @@ -577,6 +582,7 @@ static const struct riscv_tune_param sifive_p600_tune_info = { NULL, /* function_align */ NULL, /* jump_align */ NULL, /* loop_align */ + true, /* prefer-agnostic. */ }; /* Costs to use when optimizing for T-HEAD c906. */ @@ -601,6 +607,7 @@ static const struct riscv_tune_param thead_c906_tune_info = { NULL, /* function_align */ NULL, /* jump_align */ NULL, /* loop_align */ + false, /* prefer-agnostic. */ }; /* Costs to use when optimizing for xiangshan nanhu. */ @@ -625,6 +632,7 @@ static const struct riscv_tune_param xiangshan_nanhu_tune_info = { NULL, /* function_align */ NULL, /* jump_align */ NULL, /* loop_align */ + true, /* prefer-agnostic. */ }; /* Costs to use when optimizing for a generic ooo profile. */ @@ -649,6 +657,7 @@ static const struct riscv_tune_param generic_ooo_tune_info = { NULL, /* function_align */ NULL, /* jump_align */ NULL, /* loop_align */ + true, /* prefer-agnostic. */ }; /* Costs to use when optimizing for Tenstorrent Ascalon 8 wide. */ @@ -673,6 +682,7 @@ static const struct riscv_tune_param tt_ascalon_d8_tune_info = { NULL, /* function_align */ NULL, /* jump_align */ NULL, /* loop_align */ + true, /* prefer-agnostic. */ }; /* Costs to use when optimizing for size. */ @@ -697,6 +707,7 @@ static const struct riscv_tune_param optimize_size_tune_info = { NULL, /* function_align */ NULL, /* jump_align */ NULL, /* loop_align */ + false, /* prefer-agnostic. */ }; /* Costs to use when optimizing for MIPS P8700 */ @@ -720,7 +731,8 @@ static const struct riscv_tune_param mips_p8700_tune_info = { NULL, /* vector cost */ NULL, /* function_align */ NULL, /* jump_align */ - NULL, /* loop_align */ + NULL, /* loop_align. */ + true, /* prefer-agnostic. */ }; static bool riscv_avoid_shrink_wrapping_separate (); @@ -4641,9 +4653,6 @@ riscv_noce_conversion_profitable_p (rtx_insn *seq, { struct noce_if_info riscv_if_info = *if_info; - riscv_if_info.original_cost -= COSTS_N_INSNS (2); - riscv_if_info.original_cost += insn_cost (if_info->jump, if_info->speed_p); - /* Hack alert! When `noce_try_store_flag_mask' uses `cstore4' to emit a conditional set operation on DImode output it comes up with a sequence such as: @@ -8112,14 +8121,7 @@ riscv_compute_frame_info (void) /* Only use save/restore routines if they don't alter the stack size. */ if (riscv_stack_align (num_save_restore * UNITS_PER_WORD) == x_save_size && !riscv_avoid_save_libcall ()) - { - /* Libcall saves/restores 3 registers at once, so we need to - allocate 12 bytes for callee-saved register. */ - if (TARGET_RVE) - x_save_size = 3 * UNITS_PER_WORD; - - frame->save_libcall_adjustment = x_save_size; - } + frame->save_libcall_adjustment = x_save_size; if (!riscv_avoid_multi_push (frame)) { @@ -9037,8 +9039,7 @@ riscv_allocate_and_probe_stack_space (rtx temp1, HOST_WIDE_INT size) from the top of the frame, as it might be lowered before. To consider the correct SP addresses for the CFA notes, it is needed to correct them with the initial offset value. */ - HOST_WIDE_INT initial_cfa_offset - = cfun->machine->frame.total_size.to_constant () - size; + poly_int64 initial_cfa_offset = cfun->machine->frame.total_size - size; if (!frame_pointer_needed) { @@ -10379,6 +10380,7 @@ riscv_macro_fusion_pair_p (rtx_insn *prev, rtx_insn *curr) && GET_CODE (SET_SRC (curr_set)) == LSHIFTRT && REG_P (SET_DEST (prev_set)) && REG_P (SET_DEST (curr_set)) + && REG_P (XEXP (SET_SRC (curr_set), 0)) && REGNO (XEXP (SET_SRC (curr_set), 0)) == curr_dest_regno && CONST_INT_P (XEXP (SET_SRC (prev_set), 1)) && CONST_INT_P (XEXP (SET_SRC (curr_set), 1)) @@ -10407,6 +10409,7 @@ riscv_macro_fusion_pair_p (rtx_insn *prev, rtx_insn *curr) && GET_CODE (SET_SRC (curr_set)) == LSHIFTRT && REG_P (SET_DEST (prev_set)) && REG_P (SET_DEST (curr_set)) + && REG_P (XEXP (SET_SRC (curr_set), 0)) && REGNO (XEXP (SET_SRC (curr_set), 0)) == curr_dest_regno && CONST_INT_P (XEXP (SET_SRC (prev_set), 1)) && CONST_INT_P (XEXP (SET_SRC (curr_set), 1)) @@ -10431,6 +10434,7 @@ riscv_macro_fusion_pair_p (rtx_insn *prev, rtx_insn *curr) if (MEM_P (SET_SRC (curr_set)) && SCALAR_INT_MODE_P (GET_MODE (SET_DEST (curr_set))) && REG_P (XEXP (SET_SRC (curr_set), 0)) + && REG_P (XEXP (SET_SRC (curr_set), 0)) && REGNO (XEXP (SET_SRC (curr_set), 0)) == prev_dest_regno && GET_CODE (SET_SRC (prev_set)) == PLUS && REG_P (XEXP (SET_SRC (prev_set), 0)) @@ -10491,6 +10495,7 @@ riscv_macro_fusion_pair_p (rtx_insn *prev, rtx_insn *curr) if (MEM_P (SET_SRC (curr_set)) && SCALAR_INT_MODE_P (GET_MODE (SET_DEST (curr_set))) && GET_CODE (XEXP (SET_SRC (curr_set), 0)) == PLUS + && REG_P (XEXP (XEXP (SET_SRC (curr_set), 0), 0)) && REGNO (XEXP (XEXP (SET_SRC (curr_set), 0), 0)) == prev_dest_regno) { if (riscv_set_is_add (prev_set)) @@ -10549,8 +10554,8 @@ riscv_macro_fusion_pair_p (rtx_insn *prev, rtx_insn *curr) && MEM_P (XEXP (SET_SRC (curr_set), 0)) && SCALAR_INT_MODE_P (GET_MODE (SET_DEST (curr_set))) && GET_CODE (XEXP (XEXP (SET_SRC (curr_set), 0), 0)) == PLUS - && REG_P (XEXP (XEXP (XEXP (SET_SRC (curr_set), 0), 0),0)) - && (REGNO (XEXP (XEXP (XEXP (SET_SRC (curr_set), 0), 0),0)) + && REG_P (XEXP (XEXP (XEXP (SET_SRC (curr_set), 0), 0), 0)) + && (REGNO (XEXP (XEXP (XEXP (SET_SRC (curr_set), 0), 0), 0)) == prev_dest_regno)) { if (riscv_set_is_adduw (prev_set)) @@ -10682,6 +10687,7 @@ riscv_macro_fusion_pair_p (rtx_insn *prev, rtx_insn *curr) && MEM_P (SET_SRC (curr_set)) && SCALAR_INT_MODE_P (GET_MODE (SET_DEST (curr_set))) && GET_CODE (XEXP (SET_SRC (curr_set), 0)) == PLUS + && REG_P (XEXP (XEXP (SET_SRC (curr_set), 0), 0)) && REGNO (XEXP (XEXP (SET_SRC (curr_set), 0), 0)) == prev_dest_regno) { if (dump_file) @@ -10693,6 +10699,7 @@ riscv_macro_fusion_pair_p (rtx_insn *prev, rtx_insn *curr) && MEM_P (SET_SRC (curr_set)) && SCALAR_INT_MODE_P (GET_MODE (SET_DEST (curr_set))) && GET_CODE (XEXP (SET_SRC (curr_set), 0)) == LO_SUM + && REG_P (XEXP (XEXP (SET_SRC (curr_set), 0), 0)) && REGNO (XEXP (XEXP (SET_SRC (curr_set), 0), 0)) == prev_dest_regno) { if (dump_file) @@ -10706,6 +10713,7 @@ riscv_macro_fusion_pair_p (rtx_insn *prev, rtx_insn *curr) && MEM_P (XEXP (SET_SRC (curr_set), 0)) && SCALAR_INT_MODE_P (GET_MODE (SET_DEST (curr_set))) && (GET_CODE (XEXP (XEXP (SET_SRC (curr_set), 0), 0)) == LO_SUM + && REG_P (XEXP (XEXP (XEXP (SET_SRC (curr_set), 0), 0), 0)) && (REGNO (XEXP (XEXP (XEXP (SET_SRC (curr_set), 0), 0), 0)) == prev_dest_regno))) { @@ -11997,6 +12005,12 @@ riscv_function_ok_for_sibcall (tree decl ATTRIBUTE_UNUSED, if (cfun->machine->interrupt_handler_p) return false; + /* Don't use sibcall if a non-vector CC function is being called + from a vector CC function. */ + if ((riscv_cc) crtl->abi->id () == RISCV_CC_V + && (riscv_cc) expr_callee_abi (exp).id () != RISCV_CC_V) + return false; + /* Don't use sibcalls in the large model, because a sibcall instruction expanding and a epilogue expanding both use RISCV_PROLOGUE_TEMP register. */ @@ -12645,12 +12659,11 @@ riscv_estimated_poly_value (poly_int64 val, /* Return true if the vector misalignment factor is supported by the target. */ bool -riscv_support_vector_misalignment (machine_mode mode, const_tree type, - int misalignment, bool is_packed, - bool is_gather_scatter) +riscv_support_vector_misalignment (machine_mode mode, int misalignment, + bool is_packed, bool is_gather_scatter) { /* IS_PACKED is true if the corresponding scalar element is not naturally - aligned. If the misalignment is unknown and the the access is packed + aligned. If the misalignment is unknown and the access is packed we defer to the default hook which will check if movmisalign is present. Movmisalign, in turn, depends on TARGET_VECTOR_MISALIGN_SUPPORTED. */ if (misalignment == DR_MISALIGNMENT_UNKNOWN) @@ -12662,12 +12675,12 @@ riscv_support_vector_misalignment (machine_mode mode, const_tree type, { /* If we know that misalignment is a multiple of the element size, we're good. */ - if (misalignment % TYPE_ALIGN_UNIT (type) == 0) + if (misalignment % (GET_MODE_UNIT_SIZE (mode)) == 0) return true; } /* Otherwise fall back to movmisalign again. */ - return default_builtin_support_vector_misalignment (mode, type, misalignment, + return default_builtin_support_vector_misalignment (mode, misalignment, is_packed, is_gather_scatter); } @@ -12839,6 +12852,15 @@ strided_load_broadcast_p () return tune_param->use_zero_stride_load; } +/* Return TRUE if we should use the tail agnostic and mask agnostic policies for + vector code, false otherwise. */ + +bool +riscv_prefer_agnostic_p () +{ + return tune_param->prefer_agnostic; +} + /* Return TRUE if we should use the divmod expander, FALSE otherwise. This allows the behavior to be tuned for specific implementations as well as when optimizing for size. */ @@ -13998,34 +14020,24 @@ riscv_c_mode_for_floating_type (enum tree_index ti) return default_mode_for_floating_type (ti); } -/* Parse the attribute arguments to target_version in DECL and modify - the feature mask and priority required to select those targets. +/* This parses the version string STR and modifies the feature mask and + priority required to select those targets. If LOC is nonnull, report diagnostics against *LOC, otherwise remain silent. */ static void -parse_features_for_version (tree decl, +parse_features_for_version (string_slice version_str, location_t *loc, struct riscv_feature_bits &res, int &priority) { - tree version_attr = lookup_attribute ("target_version", - DECL_ATTRIBUTES (decl)); - if (version_attr == NULL_TREE) + gcc_assert (version_str.is_valid ()); + if (version_str == "default") { res.length = 0; priority = 0; return; } - const char *version_string = TREE_STRING_POINTER (TREE_VALUE (TREE_VALUE - (version_attr))); - gcc_assert (version_string != NULL); - if (strcmp (version_string, "default") == 0) - { - res.length = 0; - priority = 0; - return; - } struct cl_target_option cur_target; cl_target_option_save (&cur_target, &global_options, &global_options_set); @@ -14035,7 +14047,7 @@ parse_features_for_version (tree decl, cl_target_option_restore (&global_options, &global_options_set, default_opts); - riscv_process_target_version_attr (TREE_VALUE (version_attr), loc); + riscv_process_target_version_str (version_str, loc); priority = global_options.x_riscv_fmv_priority; const char *arch_string = global_options.x_riscv_arch_string; @@ -14087,6 +14099,23 @@ compare_fmv_features (const struct riscv_feature_bits &mask1, return 0; } +/* This function returns true if V1 and V2 specify the same function + version. */ + +bool +riscv_same_function_versions (string_slice v1, string_slice v2) +{ + struct riscv_feature_bits mask1, mask2; + int prio1, prio2; + + /* Invalid features should have already been rejected by this point so + providing no location should be okay. */ + parse_features_for_version (v1, UNKNOWN_LOCATION, mask1, prio1); + parse_features_for_version (v2, UNKNOWN_LOCATION, mask2, prio2); + + return compare_fmv_features (mask1, mask2, prio1, prio2) == 0; +} + /* Compare priorities of two version decls. Return: 1: mask1 is higher priority -1: mask2 is higher priority @@ -14097,24 +14126,37 @@ riscv_compare_version_priority (tree decl1, tree decl2) struct riscv_feature_bits mask1, mask2; int prio1, prio2; - parse_features_for_version (decl1, nullptr, mask1, prio1); - parse_features_for_version (decl2, nullptr, mask2, prio2); + string_slice v1 = get_target_version (decl1); + string_slice v2 = get_target_version (decl2); + + if (!v1.is_valid ()) + v1 = "default"; + if (!v2.is_valid ()) + v2 = "default"; + + parse_features_for_version (v1, nullptr, mask1, prio1); + parse_features_for_version (v2, nullptr, mask2, prio2); return compare_fmv_features (mask1, mask2, prio1, prio2); } -/* This function returns true if FN1 and FN2 are versions of the same function, - that is, the target_version attributes of the function decls are different. - This assumes that FN1 and FN2 have the same signature. */ +/* Checks if the function version specifying string STR parses correctly. + If it is an invalid string, currently emits a diagnostic at LOC. + Always returns true. */ bool -riscv_common_function_versions (tree fn1, tree fn2) +riscv_check_target_clone_version (string_slice str, location_t *loc_p) { - if (TREE_CODE (fn1) != FUNCTION_DECL - || TREE_CODE (fn2) != FUNCTION_DECL) - return false; + struct riscv_feature_bits mask; + int prio; - return riscv_compare_version_priority (fn1, fn2) != 0; + /* Currently it is not possible to parse without emitting errors on failure + so do not reject on a failed parse, as this would then emit two + diagnostics. Instead let errors be emitted which will halt + compilation. */ + parse_features_for_version (str, loc_p, mask, prio); + + return true; } /* Implement TARGET_MANGLE_DECL_ASSEMBLER_NAME, to add function multiversioning @@ -14124,32 +14166,31 @@ tree riscv_mangle_decl_assembler_name (tree decl, tree id) { /* For function version, add the target suffix to the assembler name. */ - if (TREE_CODE (decl) == FUNCTION_DECL - && DECL_FUNCTION_VERSIONED (decl)) + if (TREE_CODE (decl) == FUNCTION_DECL) { - std::string name = IDENTIFIER_POINTER (id) + std::string ("."); - tree target_attr = lookup_attribute ("target_version", - DECL_ATTRIBUTES (decl)); - - if (target_attr == NULL_TREE) + cgraph_node *node = cgraph_node::get (decl); + if (node && node->dispatcher_resolver_function) + return clone_identifier (id, "resolver"); + else if (DECL_FUNCTION_VERSIONED (decl)) { - name += "default"; - return get_identifier (name.c_str ()); - } + tree target_attr + = lookup_attribute ("target_version", DECL_ATTRIBUTES (decl)); - const char *version_string = TREE_STRING_POINTER (TREE_VALUE (TREE_VALUE - (target_attr))); + if (target_attr == NULL_TREE) + return clone_identifier (id, "default"); - /* Replace non-alphanumeric characters with underscores as the suffix. */ - for (const char *c = version_string; *c; c++) - name += ISALNUM (*c) == 0 ? '_' : *c; + const char *version_string + = TREE_STRING_POINTER (TREE_VALUE (TREE_VALUE (target_attr))); - if (DECL_ASSEMBLER_NAME_SET_P (decl)) - SET_DECL_RTL (decl, NULL); + /* Replace non-alphanumeric characters with underscores as the suffix. + */ + std::string suffix = ""; + for (const char *c = version_string; *c; c++) + suffix += ISALNUM (*c) == 0 ? '_' : *c; - id = get_identifier (name.c_str ()); + id = clone_identifier (id, suffix.c_str ()); + } } - return id; } @@ -14400,7 +14441,10 @@ dispatch_function_versions (tree dispatch_decl, struct function_version_info version_info; version_info.version_decl = version_decl; // Get attribute string, parse it and find the right features. - parse_features_for_version (version_decl, + string_slice v = get_target_version (version_decl); + if (!v.is_valid ()) + v = "default"; + parse_features_for_version (v, &DECL_SOURCE_LOCATION (version_decl), version_info.features, version_info.prio); @@ -14431,22 +14475,6 @@ dispatch_function_versions (tree dispatch_decl, return 0; } -/* Return an identifier for the base assembler name of a versioned function. - This is computed by taking the default version's assembler name, and - stripping off the ".default" suffix if it's already been appended. */ - -static tree -get_suffixed_assembler_name (tree default_decl, const char *suffix) -{ - std::string name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (default_decl)); - - auto size = name.size (); - if (size >= 8 && name.compare (size - 8, 8, ".default") == 0) - name.resize (size - 8); - name += suffix; - return get_identifier (name.c_str ()); -} - /* Make the resolver function decl to dispatch the versions of a multi-versioned function, DEFAULT_DECL. IFUNC_ALIAS_DECL is ifunc alias that will point to the created resolver. Create an @@ -14460,10 +14488,8 @@ make_resolver_func (const tree default_decl, { tree decl, type, t; - /* Create resolver function name based on default_decl. We need to remove an - existing ".default" suffix if this has already been appended. */ - tree decl_name = get_suffixed_assembler_name (default_decl, ".resolver"); - const char *resolver_name = IDENTIFIER_POINTER (decl_name); + cgraph_node *node = cgraph_node::get (default_decl); + gcc_assert (node && node->function_version ()); /* The resolver function should have signature (void *) resolver (uint64_t, void *) */ @@ -14472,10 +14498,21 @@ make_resolver_func (const tree default_decl, ptr_type_node, NULL_TREE); - decl = build_fn_decl (resolver_name, type); - SET_DECL_ASSEMBLER_NAME (decl, decl_name); + decl = build_fn_decl (IDENTIFIER_POINTER (DECL_NAME (default_decl)), type); + + /* Set the assembler name to prevent cgraph_node attempting to mangle. */ + SET_DECL_ASSEMBLER_NAME (decl, DECL_ASSEMBLER_NAME (default_decl)); + + cgraph_node *resolver_node = cgraph_node::get_create (decl); + resolver_node->dispatcher_resolver_function = true; + + if (node->is_target_clone) + resolver_node->is_target_clone = true; + + tree id = riscv_mangle_decl_assembler_name + (decl, node->function_version ()->assembler_name); + symtab->change_decl_assembler_name (decl, id); - DECL_NAME (decl) = decl_name; TREE_USED (decl) = 1; DECL_ARTIFICIAL (decl) = 1; DECL_IGNORED_P (decl) = 1; @@ -14540,7 +14577,7 @@ make_resolver_func (const tree default_decl, gcc_assert (ifunc_alias_decl != NULL); /* Mark ifunc_alias_decl as "ifunc" with resolver as resolver_name. */ DECL_ATTRIBUTES (ifunc_alias_decl) - = make_attribute ("ifunc", resolver_name, + = make_attribute ("ifunc", IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)), DECL_ATTRIBUTES (ifunc_alias_decl)); /* Create the alias for dispatch to resolver here. */ @@ -14605,87 +14642,42 @@ riscv_generate_version_dispatcher_body (void *node_p) cgraph_edge::rebuild_edges (); pop_cfun (); - /* Fix up symbol names. First we need to obtain the base name, which may - have already been mangled. */ - tree base_name = get_suffixed_assembler_name (default_ver_decl, ""); - - /* We need to redo the version mangling on the non-default versions for the - target_clones case. Redoing the mangling for the target_version case is - redundant but does no harm. We need to skip the default version, because - expand_clones will append ".default" later; fortunately that suffix is the - one we want anyway. */ - for (versn_info = node_version_info->next->next; versn_info; - versn_info = versn_info->next) - { - tree version_decl = versn_info->this_node->decl; - tree name = riscv_mangle_decl_assembler_name (version_decl, - base_name); - symtab->change_decl_assembler_name (version_decl, name); - } - - /* We also need to use the base name for the ifunc declaration. */ - symtab->change_decl_assembler_name (node->decl, base_name); - return resolver_decl; } -/* Make a dispatcher declaration for the multi-versioned function DECL. - Calls to DECL function will be replaced with calls to the dispatcher - by the front-end. Returns the decl of the dispatcher function. */ +/* Make a dispatcher declaration for the multi-versioned default function DECL. + Calls to DECL function will be replaced with calls to the dispatcher by + the target_clones pass. Returns the decl of the dispatcher function. */ tree riscv_get_function_versions_dispatcher (void *decl) { - tree fn = (tree) decl; - struct cgraph_node *node = NULL; - struct cgraph_node *default_node = NULL; - struct cgraph_function_version_info *node_v = NULL; - + tree default_decl = (tree) decl; tree dispatch_decl = NULL; - struct cgraph_function_version_info *default_version_info = NULL; - - gcc_assert (fn != NULL && DECL_FUNCTION_VERSIONED (fn)); - - node = cgraph_node::get (fn); - gcc_assert (node != NULL); + gcc_assert (decl != NULL + && DECL_FUNCTION_VERSIONED (default_decl) + && is_function_default_version (default_decl)); - node_v = node->function_version (); - gcc_assert (node_v != NULL); + struct cgraph_node *default_node = cgraph_node::get (default_decl); + gcc_assert (default_node != NULL); - if (node_v->dispatcher_resolver != NULL) - return node_v->dispatcher_resolver; + struct cgraph_function_version_info *default_node_v + = default_node->function_version (); + gcc_assert (default_node_v != NULL && !default_node_v->prev); - /* The default node is always the beginning of the chain. */ - default_version_info = node_v; - while (default_version_info->prev) - default_version_info = default_version_info->prev; - default_node = default_version_info->this_node; - - /* If there is no default node, just return NULL. */ - if (!is_function_default_version (default_node->decl)) - return NULL; + if (default_node_v->dispatcher_resolver != NULL) + return default_node_v->dispatcher_resolver; if (targetm.has_ifunc_p ()) { struct cgraph_function_version_info *it_v = NULL; - struct cgraph_node *dispatcher_node = NULL; - struct cgraph_function_version_info *dispatcher_version_info = NULL; /* Right now, the dispatching is done via ifunc. */ dispatch_decl = make_dispatcher_decl (default_node->decl); - TREE_NOTHROW (dispatch_decl) = TREE_NOTHROW (fn); - - dispatcher_node = cgraph_node::get_create (dispatch_decl); - gcc_assert (dispatcher_node != NULL); - dispatcher_node->dispatcher_function = 1; - dispatcher_version_info - = dispatcher_node->insert_new_function_version (); - dispatcher_version_info->next = default_version_info; - dispatcher_node->definition = 1; /* Set the dispatcher for all the versions. */ - it_v = default_version_info; + it_v = default_node_v; while (it_v != NULL) { it_v->dispatcher_resolver = dispatch_decl; @@ -16003,8 +15995,11 @@ riscv_prefetch_offset_address_p (rtx x, machine_mode mode) #undef TARGET_COMPARE_VERSION_PRIORITY #define TARGET_COMPARE_VERSION_PRIORITY riscv_compare_version_priority -#undef TARGET_OPTION_FUNCTION_VERSIONS -#define TARGET_OPTION_FUNCTION_VERSIONS riscv_common_function_versions +#undef TARGET_CHECK_TARGET_CLONE_VERSION +#define TARGET_CHECK_TARGET_CLONE_VERSION riscv_check_target_clone_version + +#undef TARGET_OPTION_SAME_FUNCTION_VERSIONS +#define TARGET_OPTION_SAME_FUNCTION_VERSIONS riscv_same_function_versions #undef TARGET_MANGLE_DECL_ASSEMBLER_NAME #define TARGET_MANGLE_DECL_ASSEMBLER_NAME riscv_mangle_decl_assembler_name diff --git a/gcc/config/riscv/riscv.md b/gcc/config/riscv/riscv.md index 2a3a20e122a5..78a01ef30c75 100644 --- a/gcc/config/riscv/riscv.md +++ b/gcc/config/riscv/riscv.md @@ -2322,27 +2322,38 @@ else { rtx reg; - rtx label = gen_label_rtx (); + rtx label1 = gen_label_rtx (); + rtx label2 = gen_label_rtx (); + rtx label3 = gen_label_rtx (); rtx end_label = gen_label_rtx (); rtx abs_reg = gen_reg_rtx (mode); rtx coeff_reg = gen_reg_rtx (mode); rtx tmp_reg = gen_reg_rtx (mode); - rtx fflags = gen_reg_rtx (SImode); riscv_emit_move (tmp_reg, operands[1]); + + if (flag_trapping_math) + { + /* Check if the input is a NaN. */ + riscv_expand_conditional_branch (label1, EQ, + operands[1], operands[1]); + + emit_jump_insn (gen_jump (label3)); + emit_barrier (); + + emit_label (label1); + } + riscv_emit_move (coeff_reg, riscv_vector::get_fp_rounding_coefficient (mode)); emit_insn (gen_abs2 (abs_reg, operands[1])); - /* fp compare can set invalid flag for NaN, so backup fflags. */ - if (flag_trapping_math) - emit_insn (gen_riscv_frflags (fflags)); - riscv_expand_conditional_branch (label, LT, abs_reg, coeff_reg); + riscv_expand_conditional_branch (label2, LT, abs_reg, coeff_reg); emit_jump_insn (gen_jump (end_label)); emit_barrier (); - emit_label (label); + emit_label (label2); switch (mode) { case SFmode: @@ -2361,15 +2372,17 @@ emit_insn (gen_copysign3 (tmp_reg, abs_reg, operands[1])); - emit_label (end_label); + emit_jump_insn (gen_jump (end_label)); + emit_barrier (); - /* Restore fflags, but after label. This is slightly different - than glibc implementation which only needs to restore under - the label, since it checks for NaN first, meaning following fp - compare can't raise fp exceptons and thus not clobber fflags. */ if (flag_trapping_math) - emit_insn (gen_riscv_fsflags (fflags)); + { + emit_label (label3); + /* Generate a qNaN from an sNaN if needed. */ + emit_insn (gen_add3 (tmp_reg, operands[1], operands[1])); + } + emit_label (end_label); riscv_emit_move (operands[0], tmp_reg); } @@ -4614,6 +4627,26 @@ FAIL; }) +; Split (A<<1) | (A>=0) into a rotate + xor. Using two’s-complement identities: +; (A>=0) == ((A >> (W-1)) ^ 1) and (A<<1) | (A>>(W-1)) == ROL1 (A), so the whole +; expression equals ROL1 (A) ^ 1. +(define_split + [(set (match_operand:X 0 "register_operand") + (ior:X + (ashift:X (match_operand:X 1 "register_operand") + (const_int 1)) + (ge:X (match_dup 1) (const_int 0))))] + "TARGET_ZBB" + [(set (match_dup 0) + (rotatert:X (match_dup 1) (match_operand 2 "const_int_operand"))) + (set (match_dup 0) + (xor:X (match_dup 0) (const_int 1)))] + { + HOST_WIDE_INT rotval; + rotval = GET_MODE_BITSIZE (GET_MODE (operands[1])).to_constant () - 1; + operands[2] = GEN_INT (rotval); + }) + (define_insn "*large_load_address" [(set (match_operand:DI 0 "register_operand" "=r") (mem:DI (match_operand 1 "pcrel_symbol_operand" "")))] diff --git a/gcc/config/riscv/t-riscv b/gcc/config/riscv/t-riscv index d86dc7443658..b53a2dff2cf7 100644 --- a/gcc/config/riscv/t-riscv +++ b/gcc/config/riscv/t-riscv @@ -131,6 +131,11 @@ riscv-d.o: $(srcdir)/config/riscv/riscv-d.cc \ $(COMPILE) $< $(POSTCOMPILE) +riscv-bclr-lowest-set-bit.o: $(srcdir)/config/riscv/riscv-bclr-lowest-set-bit.cc \ + $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TARGET_H) + $(COMPILE) $< + $(POSTCOMPILE) + riscv-shorten-memrefs.o: $(srcdir)/config/riscv/riscv-shorten-memrefs.cc \ $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TARGET_H) $(COMPILE) $< diff --git a/gcc/config/riscv/tt-ascalon-d8.md b/gcc/config/riscv/tt-ascalon-d8.md index a57c0b31a816..e72012e2b5ba 100644 --- a/gcc/config/riscv/tt-ascalon-d8.md +++ b/gcc/config/riscv/tt-ascalon-d8.md @@ -282,41 +282,47 @@ "tt_ascalon_d8_decode,(tt_ascalon_d8_vec0*3 | tt_ascalon_d8_vec1*3)") ;; Vector integer division +(define_insn_reservation "tt_ascalon_d8_vec_idiv_byte" 16 + (and (eq_attr "tune" "tt_ascalon_d8") + (eq_attr "type" "vidiv") + (eq_attr "sew" "8")) + "tt_ascalon_d8_decode,(tt_ascalon_d8_vec0*3 | tt_ascalon_d8_vec1*3)") + (define_insn_reservation "tt_ascalon_d8_vec_idiv_half" 16 (and (eq_attr "tune" "tt_ascalon_d8") (eq_attr "type" "vidiv") - (eq_attr "mode" "HF")) + (eq_attr "sew" "16")) "tt_ascalon_d8_decode,(tt_ascalon_d8_vec0*3 | tt_ascalon_d8_vec1*3)") (define_insn_reservation "tt_ascalon_d8_vec_idiv_single" 13 (and (eq_attr "tune" "tt_ascalon_d8") (eq_attr "type" "vidiv") - (eq_attr "mode" "SF")) + (eq_attr "sew" "32")) "tt_ascalon_d8_decode,(tt_ascalon_d8_vec0*3 | tt_ascalon_d8_vec1*3)") (define_insn_reservation "tt_ascalon_d8_vec_idiv_double" 20 (and (eq_attr "tune" "tt_ascalon_d8") (eq_attr "type" "vidiv") - (eq_attr "mode" "DF")) + (eq_attr "sew" "64")) "tt_ascalon_d8_decode,(tt_ascalon_d8_vec0*3 | tt_ascalon_d8_vec1*3)") ;; Vector float divisions and sqrt (define_insn_reservation "tt_ascalon_d8_vec_float_divsqrt_half" 11 (and (eq_attr "tune" "tt_ascalon_d8") (eq_attr "type" "vfdiv,vfsqrt") - (eq_attr "mode" "HF")) + (eq_attr "sew" "16")) "tt_ascalon_d8_decode,(tt_ascalon_d8_vec0*3 | tt_ascalon_d8_vec1*3)") (define_insn_reservation "tt_ascalon_d8_vec_float_divsqrt_single" 10 (and (eq_attr "tune" "tt_ascalon_d8") (eq_attr "type" "vfdiv,vfsqrt") - (eq_attr "mode" "SF")) + (eq_attr "sew" "32")) "tt_ascalon_d8_decode,(tt_ascalon_d8_vec0*3 | tt_ascalon_d8_vec1*3)") (define_insn_reservation "tt_ascalon_d8_vec_float_divsqrt_double" 17 (and (eq_attr "tune" "tt_ascalon_d8") (eq_attr "type" "vfdiv,vfsqrt") - (eq_attr "mode" "DF")) + (eq_attr "sew" "64")) "tt_ascalon_d8_decode,(tt_ascalon_d8_vec0*3 | tt_ascalon_d8_vec1*3)") ;; Vector mask operations. diff --git a/gcc/config/riscv/vector-iterators.md b/gcc/config/riscv/vector-iterators.md index ed7e9c3a9516..45af65642cd9 100644 --- a/gcc/config/riscv/vector-iterators.md +++ b/gcc/config/riscv/vector-iterators.md @@ -943,6 +943,22 @@ (RVVMF2SF "TARGET_VECTOR_ELEN_FP_32 && TARGET_VECTOR_ELEN_64") ]) +(define_mode_iterator VWEXTI_D [ + (RVVM8DI "TARGET_VECTOR_ELEN_64") (RVVM4DI "TARGET_VECTOR_ELEN_64") + (RVVM2DI "TARGET_VECTOR_ELEN_64") (RVVM1DI "TARGET_VECTOR_ELEN_64") + + (V1DI "riscv_vector::vls_mode_valid_p (V1DImode) && TARGET_VECTOR_ELEN_64") + (V2DI "riscv_vector::vls_mode_valid_p (V2DImode) && TARGET_VECTOR_ELEN_64") + (V4DI "riscv_vector::vls_mode_valid_p (V4DImode) && TARGET_VECTOR_ELEN_64") + (V8DI "riscv_vector::vls_mode_valid_p (V8DImode) && TARGET_VECTOR_ELEN_64 && TARGET_MIN_VLEN >= 64") + (V16DI "riscv_vector::vls_mode_valid_p (V16DImode) && TARGET_VECTOR_ELEN_64 && TARGET_MIN_VLEN >= 128") + (V32DI "riscv_vector::vls_mode_valid_p (V32DImode) && TARGET_VECTOR_ELEN_64 && TARGET_MIN_VLEN >= 256") + (V64DI "riscv_vector::vls_mode_valid_p (V64DImode) && TARGET_VECTOR_ELEN_64 && TARGET_MIN_VLEN >= 512") + (V128DI "riscv_vector::vls_mode_valid_p (V128DImode) && TARGET_VECTOR_ELEN_64 && TARGET_MIN_VLEN >= 1024") + (V256DI "riscv_vector::vls_mode_valid_p (V256DImode) && TARGET_VECTOR_ELEN_64 && TARGET_MIN_VLEN >= 2048") + (V512DI "riscv_vector::vls_mode_valid_p (V512DImode) && TARGET_VECTOR_ELEN_64 && TARGET_MIN_VLEN >= 4096") +]) + (define_mode_iterator VWEXTI [ RVVM8HI RVVM4HI RVVM2HI RVVM1HI RVVMF2HI (RVVMF4HI "TARGET_VECTOR_ELEN_64") diff --git a/gcc/config/riscv/vector.md b/gcc/config/riscv/vector.md index c6c37dff9945..3cb87bf4eae9 100644 --- a/gcc/config/riscv/vector.md +++ b/gcc/config/riscv/vector.md @@ -7325,10 +7325,10 @@ (reg:SI VTYPE_REGNUM) (reg:SI FRM_REGNUM)] UNSPEC_VPREDICATE) (plus_minus:VWEXTF - (match_operand:VWEXTF 3 "register_operand" " vr, vr, vr, vr") - (float_extend:VWEXTF - (vec_duplicate: - (match_operand: 4 "register_operand" " f, f, f, f")))) + (vec_duplicate:VWEXTF + (float_extend: + (match_operand: 4 "register_operand" " f, f, f, f"))) + (match_operand:VWEXTF 3 "register_operand" " vr, vr, vr, vr")) (match_operand:VWEXTF 2 "vector_merge_operand" " vu, 0, vu, 0")))] "TARGET_VECTOR" "vfw.wf\t%0,%3,%4%p1" diff --git a/gcc/config/rs6000/linux64.h b/gcc/config/rs6000/linux64.h index 0316d8cb65da..dd4d3f1f2095 100644 --- a/gcc/config/rs6000/linux64.h +++ b/gcc/config/rs6000/linux64.h @@ -393,9 +393,9 @@ extern int dot_symbols; /* Use gnu-user.h LINK_GCC_SEQUENCE_SPEC for linux. */ #undef LINK_GCC_C_SEQUENCE_SPEC #define LINK_GCC_C_SEQUENCE_SPEC \ - "%{mads|myellowknife|mmvme|msim:%G %L %G;" \ + "%{mads|myellowknife|mmvme|msim:%G" LINK_LIBATOMIC_SPEC "%L %G;" \ "!mcall-*|mcall-linux:" GNU_USER_TARGET_LINK_GCC_C_SEQUENCE_SPEC ";" \ - ":%G %L %G}" + ":%G" LINK_LIBATOMIC_SPEC "%L %G}" #undef TOC_SECTION_ASM_OP #define TOC_SECTION_ASM_OP \ diff --git a/gcc/config/rs6000/rs6000.cc b/gcc/config/rs6000/rs6000.cc index 8dd23f8619cd..1d5cd25c0f08 100644 --- a/gcc/config/rs6000/rs6000.cc +++ b/gcc/config/rs6000/rs6000.cc @@ -87,6 +87,7 @@ extern tree rs6000_builtin_mask_for_load (void); extern tree rs6000_builtin_md_vectorized_function (tree, tree, tree); extern tree rs6000_builtin_reciprocal (tree); +static tree rs6000_mangle_decl_assembler_name (tree, tree); /* Set -mabi=ieeelongdouble on some old targets. In the future, power server systems will also set long double to be IEEE 128-bit. AIX and Darwin @@ -1729,9 +1730,6 @@ static const scoped_attribute_specs *const rs6000_attribute_table[] = #define TARGET_GET_FUNCTION_VERSIONS_DISPATCHER \ rs6000_get_function_versions_dispatcher -#undef TARGET_OPTION_FUNCTION_VERSIONS -#define TARGET_OPTION_FUNCTION_VERSIONS common_function_versions - #undef TARGET_HARD_REGNO_NREGS #define TARGET_HARD_REGNO_NREGS rs6000_hard_regno_nregs_hook #undef TARGET_HARD_REGNO_MODE_OK @@ -4949,7 +4947,6 @@ rs6000_vector_alignment_reachable (const_tree type ATTRIBUTE_UNUSED, bool is_pac target. */ static bool rs6000_builtin_support_vector_misalignment (machine_mode mode, - const_tree type, int misalignment, bool is_packed, bool is_gather_scatter) @@ -4975,13 +4972,13 @@ rs6000_builtin_support_vector_misalignment (machine_mode mode, { /* Misalignment factor is unknown at compile time but we know it's word aligned. */ - if (rs6000_vector_alignment_reachable (type, is_packed)) - { - int element_size = TREE_INT_CST_LOW (TYPE_SIZE (type)); + if (rs6000_vector_alignment_reachable (NULL_TREE, is_packed)) + { + int element_size = GET_MODE_UNIT_BITSIZE (mode); - if (element_size == 64 || element_size == 32) - return true; - } + if (element_size == 64 || element_size == 32) + return true; + } return false; } @@ -25366,20 +25363,9 @@ rs6000_get_function_versions_dispatcher (void *decl) if (targetm.has_ifunc_p ()) { struct cgraph_function_version_info *it_v = NULL; - struct cgraph_node *dispatcher_node = NULL; - struct cgraph_function_version_info *dispatcher_version_info = NULL; /* Right now, the dispatching is done via ifunc. */ dispatch_decl = make_dispatcher_decl (default_node->decl); - TREE_NOTHROW (dispatch_decl) = TREE_NOTHROW (fn); - - dispatcher_node = cgraph_node::get_create (dispatch_decl); - gcc_assert (dispatcher_node != NULL); - dispatcher_node->dispatcher_function = 1; - dispatcher_version_info - = dispatcher_node->insert_new_function_version (); - dispatcher_version_info->next = default_version_info; - dispatcher_node->definition = 1; /* Set the dispatcher for all the versions. */ it_v = default_version_info; @@ -25412,13 +25398,24 @@ make_resolver_func (const tree default_decl, { /* Make the resolver function static. The resolver function returns void *. */ - tree decl_name = clone_function_name (default_decl, "resolver"); - const char *resolver_name = IDENTIFIER_POINTER (decl_name); tree type = build_function_type_list (ptr_type_node, NULL_TREE); - tree decl = build_fn_decl (resolver_name, type); - SET_DECL_ASSEMBLER_NAME (decl, decl_name); + tree decl = build_fn_decl (IDENTIFIER_POINTER (DECL_NAME (default_decl)), + type); + + cgraph_node *node = cgraph_node::get (default_decl); + gcc_assert (node && node->function_version ()); - DECL_NAME (decl) = decl_name; + /* Set the assembler name to prevent cgraph_node attempting to mangle. */ + SET_DECL_ASSEMBLER_NAME (decl, DECL_ASSEMBLER_NAME (default_decl)); + + cgraph_node *resolver_node = cgraph_node::get_create (decl); + resolver_node->dispatcher_resolver_function = true; + + tree id = rs6000_mangle_decl_assembler_name + (decl, node->function_version ()->assembler_name); + symtab->change_decl_assembler_name (decl, id); + + DECL_NAME (decl) = DECL_NAME (default_decl); TREE_USED (decl) = 1; DECL_ARTIFICIAL (decl) = 1; DECL_IGNORED_P (decl) = 0; @@ -25464,7 +25461,8 @@ make_resolver_func (const tree default_decl, /* Mark dispatch_decl as "ifunc" with resolver as resolver_name. */ DECL_ATTRIBUTES (dispatch_decl) - = make_attribute ("ifunc", resolver_name, DECL_ATTRIBUTES (dispatch_decl)); + = make_attribute ("ifunc", IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)), + DECL_ATTRIBUTES (dispatch_decl)); cgraph_node::create_same_body_alias (dispatch_decl, decl); @@ -28507,6 +28505,44 @@ complex_divide_builtin_code (machine_mode mode) return (built_in_function) func; } +/* This function changes the assembler name for functions that are + versions. If DECL is a function version and has a "target" + attribute, it appends the attribute string to its assembler name. */ + +static tree +rs6000_mangle_function_version_assembler_name (tree decl, tree id) +{ + tree version_attr; + const char *version_string; + char *attr_str; + + if (DECL_DECLARED_INLINE_P (decl) + && lookup_attribute ("gnu_inline", DECL_ATTRIBUTES (decl))) + error_at (DECL_SOURCE_LOCATION (decl), + "function versions cannot be marked as %," + " bodies have to be generated"); + + if (DECL_VIRTUAL_P (decl) || DECL_VINDEX (decl)) + sorry ("virtual function multiversioning not supported"); + + version_attr = lookup_attribute ("target", DECL_ATTRIBUTES (decl)); + + /* target attribute string cannot be NULL. */ + gcc_assert (version_attr != NULL_TREE); + + version_string = TREE_STRING_POINTER (TREE_VALUE (TREE_VALUE (version_attr))); + + if (strcmp (version_string, "default") == 0) + return clone_identifier (id, "default"); + + attr_str = sorted_attr_string (TREE_VALUE (version_attr)); + + tree ret = clone_identifier (id, attr_str, true); + + XDELETEVEC (attr_str); + return ret; +} + /* On 64-bit Linux and Freebsd systems, possibly switch the long double library function names from l to f128 if the default long double type is IEEE 128-bit. Typically, with the C and C++ languages, the standard math.h @@ -28692,6 +28728,14 @@ rs6000_mangle_decl_assembler_name (tree decl, tree id) } } + if (TREE_CODE (decl) == FUNCTION_DECL) + { + cgraph_node *node = cgraph_node::get (decl); + if (node && node->dispatcher_resolver_function) + id = clone_identifier (id, "resolver"); + else if (DECL_FUNCTION_VERSIONED (decl)) + id = rs6000_mangle_function_version_assembler_name (decl, id); + } return id; } diff --git a/gcc/config/rs6000/rtems.h b/gcc/config/rs6000/rtems.h index 95b59f60a1b0..a7b8f0f3cc30 100644 --- a/gcc/config/rs6000/rtems.h +++ b/gcc/config/rs6000/rtems.h @@ -297,9 +297,9 @@ /* Use gnu-user.h LINK_GCC_SEQUENCE_SPEC for rtems. */ #undef LINK_GCC_C_SEQUENCE_SPEC #define LINK_GCC_C_SEQUENCE_SPEC \ - "%{mads|myellowknife|mmvme|msim:%G %L %G;" \ + "%{mads|myellowknife|mmvme|msim:%G" LINK_LIBATOMIC_SPEC "%L %G;" \ "!mcall-*|mcall-linux:" GNU_USER_TARGET_LINK_GCC_C_SEQUENCE_SPEC ";" \ - ":%G %L %G}" + ":%G" LINK_LIBATOMIC_SPEC "%L %G}" #define RTEMS_STARTFILE_SPEC "ecrti%O%s rtems_crti%O%s crtbegin%O%s" #define RTEMS_ENDFILE_SPEC "crtend%O%s rtems_crtn%O%s ecrtn%O%s" diff --git a/gcc/config/rs6000/vxworks.h b/gcc/config/rs6000/vxworks.h index e77247b726ea..9eb074be31a8 100644 --- a/gcc/config/rs6000/vxworks.h +++ b/gcc/config/rs6000/vxworks.h @@ -267,6 +267,11 @@ along with GCC; see the file COPYING3. If not see #undef DOT_SYMBOLS #define DOT_SYMBOLS 0 +/* Allow code model to be selected. */ +#undef TARGET_CMODEL +#define TARGET_CMODEL rs6000_current_cmodel +#define SET_CMODEL(opt) rs6000_current_cmodel = opt + /* For link specs, we leverage the linux configuration bits through LINK_OS_EXTRA_SPEC32/64 and need to cancel the default %(link_os) expansion in VXWORKS_LINK_SPEC. */ diff --git a/gcc/config/s390/s390.cc b/gcc/config/s390/s390.cc index 1a47f477dd3c..d65109026f2a 100644 --- a/gcc/config/s390/s390.cc +++ b/gcc/config/s390/s390.cc @@ -17503,7 +17503,6 @@ s390_preferred_simd_mode (scalar_mode mode) /* Our hardware does not require vectors to be strictly aligned. */ static bool s390_support_vector_misalignment (machine_mode mode ATTRIBUTE_UNUSED, - const_tree type ATTRIBUTE_UNUSED, int misalignment ATTRIBUTE_UNUSED, bool is_packed ATTRIBUTE_UNUSED, bool is_gather_scatter ATTRIBUTE_UNUSED) @@ -17511,7 +17510,7 @@ s390_support_vector_misalignment (machine_mode mode ATTRIBUTE_UNUSED, if (TARGET_VX) return true; - return default_builtin_support_vector_misalignment (mode, type, misalignment, + return default_builtin_support_vector_misalignment (mode, misalignment, is_packed, is_gather_scatter); } diff --git a/gcc/config/s390/s390.h b/gcc/config/s390/s390.h index 8b04bc9a7557..6478be8c7acd 100644 --- a/gcc/config/s390/s390.h +++ b/gcc/config/s390/s390.h @@ -1001,10 +1001,10 @@ do { \ #define FUNCTION_MODE QImode /* Specify the value which is used when clz operand is zero. */ -#define CLZ_DEFINED_VALUE_AT_ZERO(MODE, VALUE) ((VALUE) = 64, 1) +#define CLZ_DEFINED_VALUE_AT_ZERO(MODE, VALUE) ((VALUE) = GET_MODE_PRECISION (MODE), 2) /* Specify the value which is used when ctz operand is zero. */ -#define CTZ_DEFINED_VALUE_AT_ZERO(MODE, VALUE) ((VALUE) = 64, 1) +#define CTZ_DEFINED_VALUE_AT_ZERO(MODE, VALUE) ((VALUE) = 64, 2) /* Machine-specific symbol_ref flags. */ #define SYMBOL_FLAG_ALIGN_SHIFT SYMBOL_FLAG_MACH_DEP_SHIFT diff --git a/gcc/config/s390/s390.md b/gcc/config/s390/s390.md index 858387cd85c5..06876a5563a9 100644 --- a/gcc/config/s390/s390.md +++ b/gcc/config/s390/s390.md @@ -9738,6 +9738,19 @@ "flogr\t%0,%1" [(set_attr "op_type" "RRE")]) +(define_expand "clzsi2" + [(match_operand:SI 0 "register_operand" "") + (match_operand:SI 1 "register_operand" "")] + "TARGET_EXTIMM && TARGET_ZARCH" +{ + rtx extreg = gen_reg_rtx (DImode); + rtx clzreg = gen_reg_rtx (DImode); + emit_insn (gen_zero_extendsidi2 (extreg, operands[1])); + emit_insn (gen_clzdi2 (clzreg, extreg)); + rtx truncreg = gen_lowpart (SImode, clzreg); + emit_insn (gen_addsi3 (operands[0], truncreg, GEN_INT (-32))); + DONE; +}) ;; ;; Count Trailing Zeros. @@ -9750,6 +9763,16 @@ "ctzg\t%0,%1" [(set_attr "op_type" "RRE")]) +(define_expand "ctzsi2" + [(set (match_dup 2) + (zero_extend:DI (match_operand:SI 1 "register_operand" ""))) + (set (match_dup 3) (ctz:DI (match_dup 2))) + (set (match_operand:SI 0 "register_operand" "") (subreg:SI (match_dup 3) 4))] + "TARGET_Z17 && TARGET_64BIT" +{ + operands[2] = gen_reg_rtx (DImode); + operands[3] = gen_reg_rtx (DImode); +}) ;; ;;- Rotate instructions. diff --git a/gcc/config/s390/vector.md b/gcc/config/s390/vector.md index 745634edf57b..205ead2ca9d8 100644 --- a/gcc/config/s390/vector.md +++ b/gcc/config/s390/vector.md @@ -697,13 +697,15 @@ ; vlgvb, vlgvh, vlgvf, vlgvg (define_insn "*vec_extract_plus" - [(set (match_operand: 0 "nonimmediate_operand" "=d") + [(set (match_operand: 0 "register_operand" "=d") (vec_select: - (match_operand:V 1 "register_operand" "v") - (plus:SI (match_operand:SI 2 "nonmemory_operand" "a") - (parallel [(match_operand:SI 3 "const_int_operand" "n")]))))] - "TARGET_VX" - "vlgv\t%0,%v1,%Y3(%2)" + (match_operand:V 1 "register_operand" "v") + (parallel + [(plus:SI + (match_operand:SI 2 "register_operand" "a") + (match_operand:SI 3 "const_int_operand" "J"))])))] + "TARGET_VX && UINTVAL (operands[3]) < 4096" + "vlgv\t%0,%v1,%3(%2)" [(set_attr "op_type" "VRS")]) (define_expand "vec_init" @@ -751,6 +753,19 @@ [(set_attr "op_type" "VRS") (set_attr "mnemonic" "vlgv")]) +(define_insn "*vec_extract_plus_zero_extend" + [(set (match_operand:DI 0 "register_operand" "=d") + (zero_extend:DI + (vec_select: + (match_operand:VLGV_DI 1 "register_operand" "v") + (parallel + [(plus:SI + (match_operand:SI 2 "register_operand" "a") + (match_operand:SI 3 "const_int_operand" "J"))]))))] + "TARGET_VX && UINTVAL (operands[3]) < 4096" + "vlgv\t%0,%v1,%3(%2)" + [(set_attr "op_type" "VRS")]) + (define_insn "*vec_vllezlf" [(set (match_operand:V_HW_4 0 "register_operand" "=v") (vec_concat:V_HW_4 diff --git a/gcc/config/sparc/sparc.h b/gcc/config/sparc/sparc.h index 68aba07881d9..48ddb3d96c21 100644 --- a/gcc/config/sparc/sparc.h +++ b/gcc/config/sparc/sparc.h @@ -409,7 +409,9 @@ along with GCC; see the file COPYING3. If not see /* Because libgcc can generate references back to libc (via .umul etc.) we have to list libc again after the second libgcc. */ -#define LINK_GCC_C_SEQUENCE_SPEC "%G %{!nolibc:%L} %G %{!nolibc:%L}" +#define LINK_GCC_C_SEQUENCE_SPEC \ + "%G %{!nolibc:" LINK_LIBATOMIC_SPEC "%L} \ + %G %{!nolibc:" LINK_LIBATOMIC_SPEC "%L}" #define PTRDIFF_TYPE (TARGET_ARCH64 ? "long int" : "int") diff --git a/gcc/config/xtensa/constraints.md b/gcc/config/xtensa/constraints.md index 727ec1e2c202..08fdab1c2e7f 100644 --- a/gcc/config/xtensa/constraints.md +++ b/gcc/config/xtensa/constraints.md @@ -121,7 +121,8 @@ (ior (and (match_code "const_int,const_double,const,symbol_ref,label_ref") (match_test "TARGET_AUTO_LITPOOLS")) (and (match_code "const_int") - (match_test "! xtensa_split1_finished_p ()")))) + (match_test "!TARGET_CONST16 + && ! xtensa_postreload_completed_p ()")))) ;; Memory constraints. diff --git a/gcc/config/xtensa/predicates.md b/gcc/config/xtensa/predicates.md index 20160a4c4e5f..62c0f8aca208 100644 --- a/gcc/config/xtensa/predicates.md +++ b/gcc/config/xtensa/predicates.md @@ -147,7 +147,7 @@ (ior (and (match_code "const_int") (match_test "(GET_MODE_CLASS (mode) == MODE_INT && xtensa_simm12b (INTVAL (op))) - || ! xtensa_split1_finished_p ()")) + || ! xtensa_postreload_completed_p ()")) (and (match_code "const_int,const_double,const,symbol_ref,label_ref") (match_test "(TARGET_CONST16 || TARGET_AUTO_LITPOOLS) && CONSTANT_P (op)"))))) diff --git a/gcc/config/xtensa/t-xtensa b/gcc/config/xtensa/t-xtensa index 98f98e0d7361..d09d41ab37d4 100644 --- a/gcc/config/xtensa/t-xtensa +++ b/gcc/config/xtensa/t-xtensa @@ -23,3 +23,5 @@ $(out_object_file): gt-xtensa.h xtensa-dynconfig.o: $(srcdir)/config/xtensa/xtensa-dynconfig.cc $(COMPILE) $< $(POSTCOMPILE) + +PASSES_EXTRA += $(srcdir)/config/xtensa/xtensa-passes.def diff --git a/gcc/config/xtensa/xtensa-passes.def b/gcc/config/xtensa/xtensa-passes.def new file mode 100644 index 000000000000..3958957ff7fa --- /dev/null +++ b/gcc/config/xtensa/xtensa-passes.def @@ -0,0 +1,20 @@ +/* Description of target passes for Tensilica's Xtensa architecture. + Copyright (C) 2025 Free Software Foundation, Inc. + +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 +. */ + +INSERT_PASS_AFTER (pass_postreload_cse, 1, pass_xtensa_largeconst); diff --git a/gcc/config/xtensa/xtensa-protos.h b/gcc/config/xtensa/xtensa-protos.h index 98e75c6a5356..404180723e4d 100644 --- a/gcc/config/xtensa/xtensa-protos.h +++ b/gcc/config/xtensa/xtensa-protos.h @@ -44,7 +44,6 @@ extern int xtensa_expand_scc (rtx *, machine_mode); extern int xtensa_expand_block_move (rtx *); extern int xtensa_expand_block_set (rtx *); extern void xtensa_split_operand_pair (rtx *, machine_mode); -extern int xtensa_constantsynth (rtx, rtx); extern int xtensa_emit_move_sequence (rtx *, machine_mode); extern rtx xtensa_copy_incoming_a7 (rtx); extern void xtensa_expand_nonlocal_goto (rtx *); @@ -58,8 +57,7 @@ extern char *xtensa_emit_call (int, rtx *); extern char *xtensa_emit_sibcall (int, rtx *); extern bool xtensa_tls_referenced_p (rtx); extern enum rtx_code xtensa_shlrd_which_direction (rtx, rtx); -extern bool xtensa_split1_finished_p (void); -extern void xtensa_split_DI_reg_imm (rtx *); +extern bool xtensa_postreload_completed_p (void); extern char *xtensa_bswapsi2_output (rtx_insn *, const char *); #ifdef TREE_CODE @@ -82,5 +80,6 @@ extern void xtensa_adjust_reg_alloc_order (void); extern enum reg_class xtensa_regno_to_class (int regno); extern HOST_WIDE_INT xtensa_initial_elimination_offset (int from, int to); extern const char **xtensa_get_config_strings (void); +extern rtl_opt_pass *make_pass_xtensa_largeconst (gcc::context *); #endif /* !__XTENSA_PROTOS_H__ */ diff --git a/gcc/config/xtensa/xtensa.cc b/gcc/config/xtensa/xtensa.cc index f3b89de36939..33e52a285b1e 100644 --- a/gcc/config/xtensa/xtensa.cc +++ b/gcc/config/xtensa/xtensa.cc @@ -41,6 +41,7 @@ along with GCC; see the file COPYING3. If not see #include "diagnostic-core.h" #include "cfgrtl.h" #include "output.h" +#include "addresses.h" #include "fold-const.h" #include "stor-layout.h" #include "calls.h" @@ -57,8 +58,6 @@ along with GCC; see the file COPYING3. If not see #include "insn-attr.h" #include "tree-pass.h" #include "print-rtl.h" -#include "context.h" -#include "pass_manager.h" #include #include "opts.h" @@ -109,7 +108,7 @@ struct GTY(()) machine_function bool inhibit_logues_a1_adjusts; rtx last_logues_a9_content; HARD_REG_SET eliminated_callee_saved; - hash_map *litpool_usage; + bool postreload_completed; }; static void xtensa_option_override (void); @@ -203,6 +202,10 @@ static rtx xtensa_delegitimize_address (rtx); static reg_class_t xtensa_ira_change_pseudo_allocno_class (int, reg_class_t, reg_class_t); static HARD_REG_SET xtensa_zero_call_used_regs (HARD_REG_SET); +static rtx_insn *xtensa_md_asm_adjust (vec &, vec &, + vec &, vec &, + vec &, vec &, HARD_REG_SET &, + location_t); @@ -376,6 +379,9 @@ static HARD_REG_SET xtensa_zero_call_used_regs (HARD_REG_SET); #undef TARGET_ZERO_CALL_USED_REGS #define TARGET_ZERO_CALL_USED_REGS xtensa_zero_call_used_regs +#undef TARGET_MD_ASM_ADJUST +#define TARGET_MD_ASM_ADJUST xtensa_md_asm_adjust + struct gcc_target targetm = TARGET_INITIALIZER; @@ -1110,219 +1116,6 @@ xtensa_split_operand_pair (rtx operands[4], machine_mode mode) } -/* Try to emit insns to load src (either naked or pooled SI/SF constant) - into dst with synthesizing a such constant value from a sequence of - load-immediate / arithmetic ones, instead of a L32R instruction - (plus a constant in litpool). */ - -static int -xtensa_constantsynth_2insn (rtx dst, HOST_WIDE_INT srcval, - rtx (*gen_op)(rtx, HOST_WIDE_INT), - HOST_WIDE_INT op_imm) -{ - HOST_WIDE_INT imm = INT_MAX; - rtx x = NULL_RTX; - int shift, sqr; - - gcc_assert (REG_P (dst)); - - shift = exact_log2 (srcval + 1); - if (IN_RANGE (shift, 1, 31)) - { - imm = -1; - x = gen_lshrsi3 (dst, dst, GEN_INT (32 - shift)); - } - - shift = ctz_hwi (srcval); - if ((!x || (TARGET_DENSITY && ! IN_RANGE (imm, -32, 95))) - && xtensa_simm12b (srcval >> shift)) - { - imm = srcval >> shift; - x = gen_ashlsi3 (dst, dst, GEN_INT (shift)); - } - - if ((!x || (TARGET_DENSITY && ! IN_RANGE (imm, -32, 95))) - && IN_RANGE (srcval, (-2048 - 32768), (2047 + 32512))) - { - HOST_WIDE_INT imm0, imm1; - - if (srcval < -32768) - imm1 = -32768; - else if (srcval > 32512) - imm1 = 32512; - else - imm1 = srcval & ~255; - imm0 = srcval - imm1; - if (TARGET_DENSITY && imm1 < 32512 && IN_RANGE (imm0, 224, 255)) - imm0 -= 256, imm1 += 256; - imm = imm0; - x = gen_addsi3 (dst, dst, GEN_INT (imm1)); - } - - sqr = (int) floorf (sqrtf (srcval)); - if (TARGET_MUL32 && optimize_size - && !x && IN_RANGE (srcval, 0, (2047 * 2047)) && sqr * sqr == srcval) - { - imm = sqr; - x = gen_mulsi3 (dst, dst, dst); - } - - if (!x) - return 0; - - emit_move_insn (dst, GEN_INT (imm)); - emit_insn (x); - if (gen_op) - emit_move_insn (dst, gen_op (dst, op_imm)); - - return 1; -} - -static rtx -xtensa_constantsynth_rtx_SLLI (rtx reg, HOST_WIDE_INT imm) -{ - return gen_rtx_ASHIFT (SImode, reg, GEN_INT (imm)); -} - -static rtx -xtensa_constantsynth_rtx_ADDSUBX (rtx reg, HOST_WIDE_INT imm) -{ - return imm == 7 - ? gen_rtx_MINUS (SImode, gen_rtx_ASHIFT (SImode, reg, GEN_INT (3)), - reg) - : gen_rtx_PLUS (SImode, gen_rtx_ASHIFT (SImode, reg, - GEN_INT (floor_log2 (imm - 1))), - reg); -} - -int -xtensa_constantsynth (rtx dst, rtx src) -{ - HOST_WIDE_INT srcval; - static opt_pass *pass_rtl_split2; - int *pv; - - /* Derefer if src is litpool entry, and get integer constant value. */ - src = avoid_constant_pool_reference (src); - if (CONST_INT_P (src)) - srcval = INTVAL (src); - else if (CONST_DOUBLE_P (src) && GET_MODE (src) == SFmode) - { - long l; - - REAL_VALUE_TO_TARGET_SINGLE (*CONST_DOUBLE_REAL_VALUE (src), l); - srcval = (int32_t)l, src = GEN_INT (srcval); - } - else - return 0; - - /* Force dst as SImode. */ - gcc_assert (REG_P (dst)); - if (GET_MODE (dst) != SImode) - dst = gen_rtx_REG (SImode, REGNO (dst)); - - if (optimize_size) - { - /* During the first split pass after register allocation (rtl-split2), - record the occurrence of integer src value and do nothing. */ - if (!pass_rtl_split2) - pass_rtl_split2 = g->get_passes ()->get_pass_by_name ("rtl-split2"); - if (current_pass == pass_rtl_split2) - { - if (!cfun->machine->litpool_usage) - cfun->machine->litpool_usage = hash_map::create_ggc (); - if ((pv = cfun->machine->litpool_usage->get (src))) - ++*pv; - else - cfun->machine->litpool_usage->put (src, 1); - return 0; - } - - /* If two or more identical integer constants appear in the function, - the code size can be reduced by re-emitting a "move" (load from an - either litpool entry or relaxed immediate) instruction in SImode - to increase the chances that the litpool entry will be shared. */ - if (cfun->machine->litpool_usage - && (pv = cfun->machine->litpool_usage->get (src)) - && *pv > 1) - { - emit_move_insn (dst, src); - return 1; - } - } - - /* No need for synthesizing for what fits into MOVI instruction. */ - if (xtensa_simm12b (srcval)) - { - emit_move_insn (dst, src); - return 1; - } - - /* 2-insns substitution. */ - if ((optimize_size || (optimize && xtensa_extra_l32r_costs >= 1)) - && xtensa_constantsynth_2insn (dst, srcval, NULL, 0)) - return 1; - - /* 3-insns substitution. */ - if (optimize > 1 && !optimize_size && xtensa_extra_l32r_costs >= 2) - { - int shift, divisor; - - /* 2-insns substitution followed by SLLI. */ - shift = ctz_hwi (srcval); - if (IN_RANGE (shift, 1, 31) && - xtensa_constantsynth_2insn (dst, srcval >> shift, - xtensa_constantsynth_rtx_SLLI, - shift)) - return 1; - - /* 2-insns substitution followed by ADDX[248] or SUBX8. */ - if (TARGET_ADDX) - for (divisor = 3; divisor <= 9; divisor += 2) - if (srcval % divisor == 0 && - xtensa_constantsynth_2insn (dst, srcval / divisor, - xtensa_constantsynth_rtx_ADDSUBX, - divisor)) - return 1; - - /* loading simm12 followed by left/right bitwise rotation: - MOVI + SSAI + SRC. */ - if ((srcval & 0x001FF800) == 0 - || (srcval & 0x001FF800) == 0x001FF800) - { - int32_t v; - - for (shift = 1; shift < 12; ++shift) - { - v = (int32_t)(((uint32_t)srcval >> shift) - | ((uint32_t)srcval << (32 - shift))); - if (xtensa_simm12b(v)) - { - emit_move_insn (dst, GEN_INT (v)); - emit_insn (gen_rotlsi3 (dst, dst, GEN_INT (shift))); - return 1; - } - v = (int32_t)(((uint32_t)srcval << shift) - | ((uint32_t)srcval >> (32 - shift))); - if (xtensa_simm12b(v)) - { - emit_move_insn (dst, GEN_INT (v)); - emit_insn (gen_rotrsi3 (dst, dst, GEN_INT (shift))); - return 1; - } - } - } - } - - /* If cannot synthesize the value and also cannot fit into MOVI instruc- - tion, re-emit a "move" (load from an either litpool entry or relaxed - immediate) instruction in SImode in order to increase the chances that - the litpool entry will be shared. */ - emit_move_insn (dst, src); - return 1; -} - - /* Emit insns to move operands[1] into operands[0]. Return 1 if we have written out everything that needs to be done to do the move. Otherwise, return 0 and the caller will emit the move @@ -1334,7 +1127,7 @@ xtensa_emit_move_sequence (rtx *operands, machine_mode mode) rtx src = operands[1]; if (CONSTANT_P (src) - && (! CONST_INT_P (src) || ! xtensa_simm12b (INTVAL (src)))) + && ! (CONST_INT_P (src) && xtensa_simm12b (INTVAL (src)))) { rtx dst = operands[0]; @@ -1358,8 +1151,8 @@ xtensa_emit_move_sequence (rtx *operands, machine_mode mode) return 1; } - if (! TARGET_AUTO_LITPOOLS && ! TARGET_CONST16 - && ! (CONST_INT_P (src) && can_create_pseudo_p ())) + if (!TARGET_CONST16 && !TARGET_AUTO_LITPOOLS + && (! CONST_INT_P (src) || xtensa_postreload_completed_p ())) { src = force_const_mem (SImode, src); operands[1] = src; @@ -2615,33 +2408,12 @@ xtensa_shlrd_which_direction (rtx op0, rtx op1) } -/* Return true after "split1" pass has been finished. */ +/* Return true after "postreload" pass has been completed. */ bool -xtensa_split1_finished_p (void) +xtensa_postreload_completed_p (void) { - return cfun && (cfun->curr_properties & PROP_rtl_split_insns); -} - - -/* Split a DImode pair of reg (operand[0]) and const_int (operand[1]) into - two SImode pairs, the low-part (operands[0] and [1]) and the high-part - (operands[2] and [3]). */ - -void -xtensa_split_DI_reg_imm (rtx *operands) -{ - rtx lowpart, highpart; - - if (WORDS_BIG_ENDIAN) - split_double (operands[1], &highpart, &lowpart); - else - split_double (operands[1], &lowpart, &highpart); - - operands[3] = highpart; - operands[2] = gen_highpart (SImode, operands[0]); - operands[1] = lowpart; - operands[0] = gen_lowpart (SImode, operands[0]); + return cfun && cfun->machine->postreload_completed; } @@ -5135,7 +4907,8 @@ static bool xtensa_legitimate_constant_p (machine_mode mode ATTRIBUTE_UNUSED, rtx x) { if (CONST_INT_P (x)) - return TARGET_AUTO_LITPOOLS || TARGET_CONST16 + return TARGET_CONST16 || TARGET_AUTO_LITPOOLS + || ! xtensa_postreload_completed_p () || xtensa_simm12b (INTVAL (x)); return !xtensa_tls_referenced_p (x); @@ -5647,4 +5420,952 @@ xtensa_zero_call_used_regs (HARD_REG_SET selected_regs) return selected_regs; } +/* Implement TARGET_MD_ASM_ADJUST. + + If either TARGET_CONST16 or TARGET_AUTO_LITPOOLS is enabled, the 'g'- + constraint (based on general_operand()) accepts any integer constant, + but if neither it limits within signed 12 bit by + TARGET_LEGITIMATE_CONSTANT_P(). + This behavior is not reasonable and can be addressed by prepending an + 'n'-constraint to the 'g' during the RTL generation, if necessary. */ + +static rtx_insn * +xtensa_md_asm_adjust (vec &outputs ATTRIBUTE_UNUSED, + vec &inputs ATTRIBUTE_UNUSED, + vec &input_modes ATTRIBUTE_UNUSED, + vec &constraints, + vec &uses ATTRIBUTE_UNUSED, + vec &clobbers ATTRIBUTE_UNUSED, + HARD_REG_SET &clobbered_regs ATTRIBUTE_UNUSED, + location_t loc ATTRIBUTE_UNUSED) +{ + size_t n, l; + const char *p; + int c; + char *modified, *q; + + if (!TARGET_CONST16 && !TARGET_AUTO_LITPOOLS) + for (auto &constraint : constraints) + { + /* Count the number of 'g'-constraints in each constraint string. */ + for (n = 0, p = constraint; (c = *p); p += CONSTRAINT_LEN (c, p)) + if (c == 'g') + ++n; + if (n == 0) + continue; + + /* If the constraint string contains 'g'-constraints, then each + 'g' is prefixed with an 'n'-constraint to form a new constraint + string. */ + n += strlen (constraint); + modified = (char *)ggc_alloc_atomic (n + 1); + for (p = constraint, q = modified; (c = *p); ) + if (c == 'g') + q[0] = 'n', q[1] = 'g', ++p, q += 2; + else + if ((l = CONSTRAINT_LEN (c, p)) > 1) + memcpy (q, p, l), p += l, q += l; + else + *q++ = *p++; + *q = '\0'; + if (dump_file) + fprintf (dump_file, + "xtensa_md_asm_adjust: " + "The constraint \"%s\" contains 'g's, so modify it to " + "\"%s\".\n", constraint, modified); + constraint = modified; + } + + return NULL; +} + +/* Machine-specific pass in order to replace all assignments of large + integer constants (i.e., that do not fit into the immediate field which + can hold signed 12 bits) with other legitimate forms, specifically, + references to literal pool entries, when neither TARGET_CONST16 nor + TARGET_AUTO_LITPOOLS is enabled. + + This pass also serves as a place to provide other optimizations, for + example, converting constants that are too large to fit into their + immediate fields into other representations that are more efficient + from a particular point of view. */ + +namespace +{ + +/* Cheap full_rtx_costs derivative for concise handling of insn sequence + costs. */ + +struct xt_full_rtx_costs : public full_rtx_costs +{ + inline xt_full_rtx_costs () + { + init_costs_to_zero (this); + } + + /* "Less-than" cost comparison. */ + inline bool operator< (xt_full_rtx_costs &rhs) + { + return costs_lt_p (this, &rhs, !optimize_size); + } + + /* Accumulate the costs of a specified insn. */ + xt_full_rtx_costs &operator+= (rtx_insn *insn) + { + speed += xtensa_insn_cost (insn, true); + size += xtensa_insn_cost (insn, false); + return *this; + } + + /* Create a new instance from the specified insn sequence. */ + explicit xt_full_rtx_costs (rtx_insn *seq) + : xt_full_rtx_costs () + { + for (; seq; seq = NEXT_INSN (seq)) + *this += seq; + } + + /* superior/inferior parts of the costs. */ + inline int major () + { + return optimize_size ? size : speed; + } + inline int minor () + { + return optimize_size ? speed : size; + } +}; + +/* Optimize assignment of negatively-scaled (up to the minus 15th power + of two) signed 12-bit integer immediate values to hardware floating- + point registers. For example, 0.12005615234375f is exactly equal to + (1967.f / (1 << 14)), so we can emit such as: + movi a9, 1967 + float.s f0, a9, 14 + if such conversion reduces costs. */ + +static bool +FPreg_neg_scaled_simm12b_1 (const REAL_VALUE_TYPE *rval, + HOST_WIDE_INT &v, int &scale) +{ + REAL_VALUE_TYPE r; + int shift; + + /* Non-zero finite values can only be accepted. */ + if (! real_isfinite (rval) || rval->cl == rvc_zero) + return false; + + /* Check whether the value multiplied by 32768 is an exact integer and + the result after truncating the trailing '0' bits fits into a signed + 12-bit. */ + real_ldexp (&r, rval, 15); + if (! real_isinteger (&r, &v) + || ! xtensa_simm12b (v >>= (shift = MIN (ctz_hwi (v), 15)))) + return false; + + scale = shift - 15; + return true; +} + +static bool +FPreg_neg_scaled_simm12b (rtx_insn *insn) +{ + rtx pat, dest, src, pat_1, dest_1, note, dest_2, pat_2; + HOST_WIDE_INT v; + int scale; + rtx_insn *next, *last, *seq; + REAL_VALUE_TYPE r; + + /* It matches RTL expressions of the following format: + (set (reg:SF gpr) (const_double:SF cst)) + (set (reg:SF fpr) (reg:SF gpr)) + REG_DEAD (reg:SF gpr) + where cst is a negatively-scaled signed 12-bit integer immediate + value. */ + if (TARGET_HARD_FLOAT && !TARGET_CONST16 + && GET_CODE (pat = PATTERN (insn)) == SET + && REG_P (dest = SET_DEST (pat)) && GP_REG_P (REGNO (dest)) + && GET_MODE (dest) == SFmode + && CONST_DOUBLE_P (src = avoid_constant_pool_reference (SET_SRC (pat))) + && GET_MODE (src) == SFmode + && FPreg_neg_scaled_simm12b_1 (CONST_DOUBLE_REAL_VALUE (src), + v, scale) + && (next = next_nonnote_nondebug_insn (insn)) + && NONJUMP_INSN_P (next) + && GET_CODE (pat_1 = PATTERN (next)) == SET + && REG_P (dest_1 = SET_DEST (pat_1)) && FP_REG_P (REGNO (dest_1)) + && GET_MODE (dest_1) == SFmode + && rtx_equal_p (SET_SRC (pat_1), dest) + && (note = find_reg_note (next, REG_DEAD, dest))) + { + /* Estimate the costs of two matching insns. */ + xt_full_rtx_costs costs; + costs += insn, costs += next; + + /* Prepare alternative insns and estimate their costs. */ + start_sequence (); + emit_insn (gen_rtx_SET (dest_2 = gen_rtx_REG (SImode, REGNO (dest)), + GEN_INT (v))); + pat_2 = gen_rtx_FLOAT (SFmode, dest_2); + if (scale < 0) + { + real_ldexp (&r, &dconst1, scale); + pat_2 = gen_rtx_MULT (SFmode, pat_2, + const_double_from_real_value (r, SFmode)); + } + last = emit_insn (gen_rtx_SET (dest_1, pat_2)); + xt_full_rtx_costs costs_1 (seq = end_sequence ()); + + /* If the alternative is more cost effective, it replaces the original + insns. */ + if (costs_1 < costs) + { + if (dump_file) + { + fputs ("FPreg_neg_scaled_simm12b: ", dump_file); + dump_value_slim (dump_file, src, 0); + fprintf (dump_file, + "f = (" HOST_WIDE_INT_PRINT_DEC ".f/(1<<%d))\n", + v, -scale); + dump_insn_slim (dump_file, insn); + dump_insn_slim (dump_file, next); + } + remove_reg_equal_equiv_notes (insn); + validate_change (insn, &PATTERN (insn), + PATTERN (seq), 0); + remove_reg_equal_equiv_notes (next); + remove_note (next, note); + validate_change (next, &PATTERN (next), + PATTERN (last), 0); + add_reg_note (next, REG_EQUIV, src); + add_reg_note (next, REG_DEAD, dest_2); + if (dump_file) + { + fprintf (dump_file, + "FPreg_neg_scaled_simm12b: costs (%d,%d) -> (%d,%d)\n", + costs.major (), costs.minor (), + costs_1.major (), costs_1.minor ()); + dump_insn_slim (dump_file, insn); + dump_insn_slim (dump_file, next); + } + return true; + } + } + + return false; +} + +/* Split DI/SF/DFmode constant assignments into pairs of SImode ones. This + is also the pre-processing for constantsynth optimization that follows + immediately after. + + Note that all constant values and assignments are treated as SImode + because: + + - Synthesis methods rely on SImode operations + - SImode assignments may be shorter + - More opportunity for sharing literal pool entries + + This behavior would be acceptable if TARGET_CAN_CHANGE_MODE_CLASS always + returned true (the current and default configuration). */ + +static bool +split_DI_SF_DF_const (rtx_insn *insn) +{ + rtx pat, dest, src, dest0, dest1, src0, src1, src0c, src1c; + int regno; + + if (GET_CODE (pat = PATTERN (insn)) != SET + || ! REG_P (dest = SET_DEST (pat)) || ! GP_REG_P (regno = REGNO (dest))) + return false; + + /* It is more efficient to assign SFmode literal constants using their + bit-equivalent SImode ones, thus we convert them so. */ + src = avoid_constant_pool_reference (SET_SRC (pat)); + if (GET_MODE (dest) == SFmode + && CONST_DOUBLE_P (src) && GET_MODE (src) == SFmode) + { + long l; + REAL_VALUE_TO_TARGET_SINGLE (*CONST_DOUBLE_REAL_VALUE (src), l); + src0 = GEN_INT ((int32_t)l), dest0 = gen_rtx_REG (SImode, regno); + if (dump_file) + { + fputs ("split_DI_SF_DF_const: ", dump_file); + dump_value_slim (dump_file, src, 0); + fprintf (dump_file, + "f -> " HOST_WIDE_INT_PRINT_DEC " (" + HOST_WIDE_INT_PRINT_HEX ")\n", + INTVAL (src0), INTVAL (src0)); + } + src0c = NULL_RTX; + if (!TARGET_CONST16 && !TARGET_AUTO_LITPOOLS + && ! xtensa_simm12b (INTVAL (src0))) + src0c = src0, src0 = force_const_mem (SImode, src0); + remove_reg_equal_equiv_notes (insn); + validate_change (insn, &PATTERN (insn), gen_rtx_SET (dest0, src0), 0); + if (src0c) + add_reg_note (insn, REG_EQUIV, copy_rtx (src0c)); + return true; + } + + /* Splitting a D[IF]mode literal constant into two with split_double() + results in a pair of CONST_INTs, so they are assigned in SImode + regardless of the original source mode. */ + if ((GET_MODE (dest) == DImode && CONST_INT_P (src)) + || (GET_MODE (dest) == DFmode + && CONST_DOUBLE_P (src) && GET_MODE (src) == DFmode)) + { + dest0 = gen_rtx_REG (SImode, regno); + dest1 = gen_rtx_REG (SImode, regno + 1); + split_double (src, &src0, &src1); + if (dump_file) + { + fputs ("split_DI_SF_DF_const: ", dump_file); + dump_value_slim (dump_file, src, 0); + fprintf (dump_file, + " -> " HOST_WIDE_INT_PRINT_DEC " (" + HOST_WIDE_INT_PRINT_HEX "), " + HOST_WIDE_INT_PRINT_DEC " (" + HOST_WIDE_INT_PRINT_HEX ")\n", + INTVAL (src0), INTVAL (src0), + INTVAL (src1), INTVAL (src1)); + } + src1c = src0c = NULL_RTX; + if (!TARGET_CONST16 && !TARGET_AUTO_LITPOOLS) + { + if (! xtensa_simm12b (INTVAL (src0))) + src0c = src0, src0 = force_const_mem (SImode, src0); + if (! xtensa_simm12b (INTVAL (src1))) + src1c = src1, src1 = force_const_mem (SImode, src1); + } + remove_reg_equal_equiv_notes (insn); + validate_change (insn, &PATTERN (insn), gen_rtx_SET (dest0, src0), 0); + if (src0c) + add_reg_note (insn, REG_EQUIV, copy_rtx (src0c)); + insn = emit_insn_after (gen_rtx_SET (dest1, src1), insn); + if (src1c) + add_reg_note (insn, REG_EQUIV, copy_rtx (src1c)); + return true; + } + + return false; +} + +/* The constant-synthesis optimization (constantsynth for short). + + This is an optimization that attempts to replace the assignment of a + large integer (and some single-precision floating-point) constant value + that won't fit in the immediate field of a single machine instruction + with a smaller integer value that does fit, and a group of subsequent + instructions that derive the equivalent value through some arithmetic/ + bitwise operations. + + In Xtensa ISA, when TARGET_CONST16 is not enabled, such large immediate + assignments are typically treated as references to literal pool entries + using the L32R machine instruction, which has a one-clock delay to load + from memory, plus possible further implementation-dependent exclusive + clock penalties (aka. pipeline stall). + + To mitigate this, when optimization is enabled, we use several synthesis + methods to find alternative instruction sequences that do not exceed + the expected insn cost of single L32R instruction, based on either + clock cycle or # of bytes depending on whether optimizing for speed or + size. + + However, using L32R instructions has the advantage of sharing literal + pool entries when two or more identical immediate values are needed + within a function, this also needs to be considered especially when + optimizing for size. + + Below these are the definitions of each synthesis method. Each method + takes a destination register ('dest', which can be assumed to be SImode + address register) and an integer value, and returns an insn sequence + that sets the register to that value, if applicable. The framework + takes care of the rest of the heavy lifting, making it easy to test + and add new methods. + + The insn sequence returned by the methods must follow all of the rules + below: + + - The first insn assigns a signed 12-bit integer constant to 'dest' + - Each subsequent insn assigns to 'dest' the result of a unary or + binary operation between 'dest' and an integer constant or 'dest' + itself + - After the last insn is finished, the value of 'dest' will be equal + to the specified integer + + The sequence is verified to conform to the above rules by formally + evaluating its RTL expressions before substituting constant assignments. */ + +/* A method that generates two machine instructions to logically right- + shift minus one by a certain number of bits to synthesize a power of + two minus one (eg., 65535). */ + +static rtx_insn * +constantsynth_method_lshr_m1 (rtx dest, HOST_WIDE_INT v) +{ + int i; + + if (! IN_RANGE (i = exact_log2 (v + 1), 1, 31)) + return NULL; + + start_sequence (); + emit_insn (gen_rtx_SET (dest, constm1_rtx)); + emit_insn (gen_lshrsi3 (dest, dest, GEN_INT (32 - i))); + return end_sequence (); +} + +/* Split the specified value between -34816 and 34559 into the two + immediates for the MOVI and ADDMI instruction. */ + +static bool +split_hwi_to_MOVI_ADDMI (HOST_WIDE_INT v, + HOST_WIDE_INT &v_movi, HOST_WIDE_INT &v_addmi) +{ + HOST_WIDE_INT v0, v1; + + if (xtensa_simm12b (v)) + { + v_movi = v, v_addmi = 0; + return true; + } + + if (v < -32768) + v1 = -32768; + else if (v > 32512) + v1 = 32512; + else + v1 = v & ~255; + if (! xtensa_simm12b (v0 = v - v1)) + return false; + if (TARGET_DENSITY && v0 >= 224 && v1 < 32512) + v0 -= 256, v1 += 256; + + v_movi = v0, v_addmi = v1; + return true; +} + +/* A method that generates two machine instructions to add a signed 12-bit + value to 256 times a signed 8-bit value to synthesize values between + -34816 and 34559. Also, if the result of dividing the specified value + by a power of 2, or 9, 7, 5 or 3 with a remainder of 0 is within the + above range, the same processing is performed to append one instruction. */ + +static rtx_insn * +constantsynth_method_16bits (rtx dest, HOST_WIDE_INT v) +{ + HOST_WIDE_INT v_movi, v_addmi; + rtx postfix; + int i; + + if (split_hwi_to_MOVI_ADDMI (v, v_movi, v_addmi)) + postfix = NULL_RTX; + else if (i = ctz_hwi (v), + split_hwi_to_MOVI_ADDMI (v >> i, v_movi, v_addmi)) + postfix = gen_ashlsi3 (dest, dest, GEN_INT (i)); + else if (!TARGET_ADDX) + return NULL; + else for (i = 9; ; i -= 2) + if (i < 3) + return NULL; + else if (v % i == 0 + && split_hwi_to_MOVI_ADDMI (v / i, v_movi, v_addmi)) + { + postfix = (i == 7) + ? gen_subsi3 (dest, + gen_rtx_ASHIFT (SImode, dest, GEN_INT (3)), + dest) + : gen_addsi3 (dest, + gen_rtx_ASHIFT (SImode, dest, + GEN_INT (floor_log2 (i))), + dest); + break; + } + + start_sequence (); + emit_insn (gen_rtx_SET (dest, GEN_INT (v_movi))); + if (v_addmi) + emit_insn (gen_addsi3 (dest, dest, GEN_INT (v_addmi))); + emit_insn (postfix); + return end_sequence (); +} + +/* A method of generating up to five machine instructions; a signed 12-bit + immediate assignment, a signed 8-bit immediate addition multiplied by + 256, a logical left bit shift, a signed 8-bit immediate addition multi- + plied by 256, and a signed 8-bit immediate addition to synthesize a value + that can effectively be specified as 32 bits (adding zero is of course + omitted in the process). */ + +static rtx_insn * +constantsynth_method_32bits (rtx dest, HOST_WIDE_INT v) +{ + HOST_WIDE_INT v0, v1, v_movi, v_addmi; + int i; + + v1 = 0; + v0 = ((v += 128) & 255) - 128, v >>= 8; + if (v == 0) + i = 0, v_movi = 0, v_addmi = 0; + else if (i = ctz_hwi (v), + split_hwi_to_MOVI_ADDMI (v >> i, v_movi, v_addmi)) + i += 8; + else + { + v1 = ((v += 128) & 255) - 128, v >>= 8; + if (v == 0) + i = 0, v_movi = 0, v_addmi = 0; + else if (i = ctz_hwi (v), + split_hwi_to_MOVI_ADDMI (v >> i, v_movi, v_addmi)) + i += 16; + else + return NULL; + } + + start_sequence (); + emit_insn (gen_rtx_SET (dest, GEN_INT (v_movi))); + if (v_addmi) + emit_insn (gen_addsi3 (dest, dest, GEN_INT (v_addmi))); + if (i) + emit_insn (gen_ashlsi3 (dest, dest, GEN_INT (i))); + if (v1) + emit_insn (gen_addsi3 (dest, dest, GEN_INT (v1 * 256))); + if (v0) + emit_insn (gen_addsi3 (dest, dest, GEN_INT (v0))); + return end_sequence (); +} + +/* A method that generates two machine instructions to synthesize a + positive square number (up to 2047*2047) by assigning its square root + and multiplying it by itself. This method only works when TARGET_MUL32 + is enabled. */ + +static rtx_insn * +constantsynth_method_square (rtx dest, HOST_WIDE_INT v) +{ + int v0; + + if (!TARGET_MUL32 || ! IN_RANGE (v, 0, 2047 * 2047) + || (v0 = (int)sqrtf (v), v0 * v0 != v)) + return NULL; + + start_sequence (); + emit_insn (gen_rtx_SET (dest, GEN_INT (v0))); + emit_insn (gen_mulsi3 (dest, dest, dest)); + return end_sequence (); +} + +/* List of all available synthesis methods. */ + +struct constantsynth_method_info +{ + rtx_insn *(* const func) (rtx, HOST_WIDE_INT); + const char *name; +}; + +static const struct constantsynth_method_info constantsynth_methods[] = +{ + { constantsynth_method_lshr_m1, "lshr_m1" }, + { constantsynth_method_16bits, "16bits" }, + { constantsynth_method_32bits, "32bits" }, + { constantsynth_method_square, "square" }, +}; + +/* Information that mediates between synthesis pass 1 and 2. */ + +struct constantsynth_info +{ + xt_full_rtx_costs costs; + hash_map insns; + hash_map usage; + constantsynth_info () + { + /* To avoid wasting literal pool entries, we use fake references to + estimate the costs of an L32R instruction. */ + rtx x = gen_rtx_SYMBOL_REF (Pmode, "*.LC-1"); + SYMBOL_REF_FLAGS (x) |= SYMBOL_FLAG_LOCAL; + CONSTANT_POOL_ADDRESS_P (x) = 1; + x = gen_const_mem (SImode, x); + gcc_assert (constantpool_mem_p (x)); + costs += make_insn_raw (gen_rtx_SET (gen_rtx_REG (SImode, A9_REG), + x)); + } +}; + +/* constantsynth pass 1. + Detect and record large constant assignments within the function. */ + +static bool +constantsynth_pass1 (rtx_insn *insn, constantsynth_info &info) +{ + rtx pat, dest, src; + int *pcount; + + /* Check whether the insn is an assignment to a constant that is eligible + for constantsynth. If a large constant, record the insn and also the + number of occurrences of the constant if optimizing for size. If the + constant fits in the immediate field, update the insn to re-assign the + constant. */ + if (TARGET_CONST16 + || GET_CODE (pat = PATTERN (insn)) != SET + || ! REG_P (dest = SET_DEST (pat)) || ! GP_REG_P (REGNO (dest)) + || GET_MODE (dest) != SImode + || ! CONST_INT_P (src = avoid_constant_pool_reference (SET_SRC (pat)))) + return false; + + if (xtensa_simm12b (INTVAL (src))) + { + if (src != SET_SRC (pat)) + { + remove_reg_equal_equiv_notes (insn); + validate_change (insn, &PATTERN (insn), + gen_rtx_SET (dest, src), 0); + } + if (dump_file) + fprintf (dump_file, + "constantsynth_pass1: immediate, " HOST_WIDE_INT_PRINT_DEC + " (" HOST_WIDE_INT_PRINT_HEX ")\n", + INTVAL (src), INTVAL (src)); + } + else + { + info.insns.put (insn, src); + if (optimize_size) + { + if ((pcount = info.usage.get (src))) + ++*pcount; + else + info.usage.put (src, 1); + } + } + + return true; +} + +/* If an insn sequence returned by one of the constantsynth methods conforms + to the rules and formal evaluation of the sequence from beginning to end + reduces to a single CONST_INT, return it. */ + +static rtx +verify_synth_seq (rtx_insn *seq, const_rtx dest) +{ + rtx pat, cst; + + if (! NONJUMP_INSN_P (seq) + || GET_CODE (pat = PATTERN (seq)) != SET + || ! rtx_equal_p (SET_DEST (pat), dest) + || ! CONST_INT_P (cst = SET_SRC (pat)) + || ! xtensa_simm12b (INTVAL (cst))) + return NULL_RTX; + + for (seq = NEXT_INSN (seq); seq; seq = NEXT_INSN (seq)) + if (! NONJUMP_INSN_P (seq) + || GET_CODE (pat = PATTERN (seq)) != SET + || ! rtx_equal_p (SET_DEST (pat), dest) + || ! CONST_INT_P (cst = simplify_replace_rtx (SET_SRC (pat), + dest, cst))) + return NULL_RTX; + + return cst; +} + +/* constantsynth pass 2. + For each large constant value assignment collected in pass 1, try to + find a more efficient way to derive the value than referencing a literal + pool entry, and if found, replace the assignment with it. */ + +static void +constantsynth_pass2 (constantsynth_info &info) +{ + rtx_insn *insn, *min_seq, *seq, *last; + rtx pat, dest, src, cst; + enum machine_mode mode; + int *pcount, processed = 0; + HOST_WIDE_INT v; + const char *name; + + /* For each insn recorded in pass 1... */ + for (const auto &iter : info.insns) + { + dest = SET_DEST (pat = PATTERN (insn = iter.first)); + if ((mode = GET_MODE (dest)) != SImode) + dest = gen_rtx_REG (SImode, REGNO (dest)); + v = INTVAL (src = iter.second); + + /* Only attempt to synthesize large constants if they occur at most + once in a function, since it is more space-efficient to reference + a shared literal pool entry multiple times. */ + if (! (pcount = info.usage.get (src)) + || *pcount == 1) + { + /* Try multiple synthesis methods and choose the least expensive + one. */ + xt_full_rtx_costs min_costs = info.costs; + + v = INTVAL (src), min_seq = NULL, name = NULL; + for (const auto &method : constantsynth_methods) + if ((seq = method.func (dest, v))) + { + xt_full_rtx_costs costs (seq); + + if (costs < min_costs) + min_costs = costs, min_seq = seq, name = method.name; + } + + /* If there is a most efficient synthesis method, replace the + insn with the result. */ + if (min_seq) + { + if (flag_checking) + { + if (! (cst = verify_synth_seq (min_seq, dest))) + internal_error ("constantsynth: method %qs " + "invalid insn sequence, " + "expected %wd (%wx)", name, + v, v); + if (INTVAL (cst) != v) + internal_error ("constantsynth: method %qs " + "value mismatch, " + "expected %wd (%wx) " + "synthesized %wd (%wx)", name, + v, v,INTVAL (cst), INTVAL (cst)); + } + + for (last = min_seq; NEXT_INSN (last); + last = NEXT_INSN (last)) + ; + add_reg_note (last, REG_EQUIV, copy_rtx (src)); + if (dump_file) + { + fprintf (dump_file, + "constantsynth_pass2: method \"%s\", " + HOST_WIDE_INT_PRINT_DEC " (", + name, v); + dump_value_slim (dump_file, src, 0); + fprintf (dump_file, ")\n"); + dump_insn_slim (dump_file, insn); + fprintf (dump_file, + "constantsynth_pass2: costs (%d,%d) -> (%d,%d)\n", + info.costs.major (), info.costs.minor (), + min_costs.major (), min_costs.minor ()); + dump_rtl_slim (dump_file, min_seq, NULL, -1, 0); + } + emit_insn_before (min_seq, insn); + set_insn_deleted (insn); + ++processed; + continue; + } + } + + /* Large constants that are not subject to synthesize are left in + the literal pool. */ + if (dump_file) + fprintf (dump_file, + "constantsynth_pass2: litpool, " HOST_WIDE_INT_PRINT_DEC + " (" HOST_WIDE_INT_PRINT_HEX ")\n", + v, v); + } + + if (dump_file) + { + fprintf (dump_file, "constantsynth_pass2: %u insns", + (unsigned)info.insns.elements ()); + if (optimize_size) + fprintf (dump_file, ", %u large CONST_INTs", + (unsigned int)info.usage.elements ()); + fprintf (dump_file, ", %d processed\n", processed); + } +} + +/* Replace the source of [SH]Imode allocation whose value does not fit + into signed 12 bits with a reference to litpool entry. */ + +static bool +litpool_set_src_1 (rtx_insn *insn, rtx set, bool in_group) +{ + rtx dest, src; + enum machine_mode mode; + + if (REG_P (dest = SET_DEST (set)) + && ((mode = GET_MODE (dest)) == SImode || mode == HImode) + && CONST_INT_P (src = SET_SRC (set)) + && ! xtensa_simm12b (INTVAL (src))) + { + remove_reg_equal_equiv_notes (insn); + validate_change (insn, &SET_SRC (set), + force_const_mem (mode, src), in_group); + add_reg_note (insn, REG_EQUIV, copy_rtx (src)); + return true; + } + + return false; +} + +static bool +litpool_set_src (rtx_insn *insn) +{ + rtx pat = PATTERN (insn); + int i; + bool changed; + + switch (GET_CODE (pat)) + { + case SET: + return litpool_set_src_1 (insn, pat, 0); + + /* There should be no assignments within PARALLEL in this target, + but just to be sure. */ + case PARALLEL: + changed = false; + for (i = 0; i < XVECLEN (pat, 0); ++i) + if (GET_CODE (XVECEXP (pat, 0, i)) == SET + && litpool_set_src_1 (insn, XVECEXP (pat, 0, i), 1)) + changed = true; + if (changed) + apply_change_group (); + return changed; + + default: + return false; + } +} + +/* Replace all occurrences of large immediate values in assignment sources + that were permitted for convenience with their legitimate forms, or + more efficient representations if possible. */ + +static void +do_largeconst (void) +{ + bool replacing_required = !TARGET_CONST16 && !TARGET_AUTO_LITPOOLS; + bool optimize_enabled = optimize && !optimize_debug; + rtx_insn *insn; + constantsynth_info cs_info; + + /* Verify the legitimacy of replacing constant assignments in + DI/SF/DFmode with those in SImode. */ + gcc_assert (targetm.can_change_mode_class + == hook_bool_mode_mode_reg_class_t_true); + + for (insn = get_insns (); insn; insn = NEXT_INSN (insn)) + if (NONJUMP_INSN_P (insn)) + { + /* Optimize assignment of negatively scaled (up to the minus + 15th power of two) signed 12-bit immediate values to hardware + floating-point registers. */ + if (optimize_enabled + && FPreg_neg_scaled_simm12b (insn)) + continue; + + /* Replace the source of [SH]Imode allocation whose value does not + fit into signed 12 bits with a reference to litpool entry. */ + if (replacing_required) + litpool_set_src (insn); + + /* Split DI/SF/DFmode constant assignments into pairs of SImode + ones. This is also the pre-processing for constantsynth opti- + mization that follows immediately after. */ + if (replacing_required) + split_DI_SF_DF_const (insn); + + /* constantsynth pass 1. + Detect and record large constant assignments within a function. */ + if (optimize_enabled) + constantsynth_pass1 (insn, cs_info); + } + + /* constantsynth pass 2. + For each large constant value assignment collected in pass 1, try to + find a more efficient way to derive the value than referencing a literal + pool entry, and if found, replace the assignment with it. */ + if (optimize_enabled) + constantsynth_pass2 (cs_info); +} + +/* Convert assignments for large constants. */ + +static unsigned int +rest_of_handle_largeconst (void) +{ + /* Until this flag becomes true, all RTL expressions that assign integer + (not symbol nor floating-point) constants to [SH]Imode registers are + allowed regardless of the values' bit width or configurations of + TARGET_CONST16 and TARGET_AUTO_LITPOOLS. This trick avoids some of + the problems that can arise from blindly following the result of + TARGET_LEGITIMATE_CONSTANT_P() either directly or via general/ + immediate_operands(). + + For example, the "cbranchsi4" MD expansion pattern in this target has + "nonmemory_operand" predicate specified for operand 2, which is + reasonable for most RISC machines where only registers or small set of + constants can be compared. Incidentally, the Xtensa ISA has branch + instructions that perform GEU/LTU comparisons with 32768 or 65536, but + such constants are previously not accepted by "nonmemory_operand" + because the predicate is internally constrained to "immediate_operand" + which is essentially TARGET_LEGITIMATE_CONSTANT_P(). It would not be + impossible to describe a peculiar predicate or condition in the pattern + to get around this, but it would be "elephant" (inelegant). + Fortunately, this issue will be salvaged at higher optimization levels + in subsequent RTL instruction combination pass, but these instructions + are suppose to be emitted properly without any optimization. + + Also, there are not a few cases where optimizers only accept bare + CONST_INTs and do not consider that references to pooled constants + are semantically equivalent to bare ones. A good example of this is + a certain constant anchoring optimization performed in the postreload + pass, which requires anchoring constants to be bare, not pooled. + + In any case, once postreload is complete, the trick described above + is no longer needed, so such assignments must now be all converted + back to references to literal pool entries (the original legitimate + form) if neither TARGET_CONST16 nor TARGET_AUTO_LITPOOLS is enabled. + See the function do_largeconst() called below. */ + cfun->machine->postreload_completed = true; + + df_set_flags (DF_DEFER_INSN_RESCAN); + df_note_add_problem (); + df_analyze (); + + /* Do the process. */ + do_largeconst (); + + return 0; +} + +const pass_data pass_data_xtensa_largeconst = +{ + RTL_PASS, /* type */ + "xt_largeconst", /* name */ + OPTGROUP_NONE, /* optinfo_flags */ + TV_MACH_DEP, /* tv_id */ + 0, /* properties_required */ + 0, /* properties_provided */ + 0, /* properties_destroyed */ + 0, /* todo_flags_start */ + TODO_df_finish, /* todo_flags_finish */ +}; + +class pass_xtensa_largeconst : public rtl_opt_pass +{ +public: + pass_xtensa_largeconst (gcc::context *ctxt) + : rtl_opt_pass (pass_data_xtensa_largeconst, ctxt) + {} + + /* opt_pass methods: */ + unsigned int execute (function *) final override + { + return rest_of_handle_largeconst (); + } + +}; // class pass_xtensa_largeconst + +} // anon namespace + +rtl_opt_pass * +make_pass_xtensa_largeconst (gcc::context *ctxt) +{ + return new pass_xtensa_largeconst (ctxt); +} + #include "gt-xtensa.h" diff --git a/gcc/config/xtensa/xtensa.h b/gcc/config/xtensa/xtensa.h index a8a0565c81e7..ea56f9fe9937 100644 --- a/gcc/config/xtensa/xtensa.h +++ b/gcc/config/xtensa/xtensa.h @@ -401,7 +401,7 @@ enum reg_class #define INDEX_REG_CLASS NO_REGS /* The small_register_classes_for_mode_p hook must always return true for - Xtrnase, because all of the 16 AR registers may be explicitly used in + Xtensa, because all of the 16 AR registers may be explicitly used in the RTL, as either incoming or outgoing arguments. */ #define TARGET_SMALL_REGISTER_CLASSES_FOR_MODE_P hook_bool_mode_true @@ -583,15 +583,15 @@ typedef struct xtensa_args for use as a base or index register in operand addresses. */ #define REGNO_OK_FOR_INDEX_P(NUM) 0 -#define REGNO_OK_FOR_BASE_P(NUM) \ - (GP_REG_P (NUM) || GP_REG_P ((unsigned) reg_renumber[NUM])) +#define REGNO_OK_FOR_BASE_P(NUM) GP_REG_P (NUM) /* C expressions that are nonzero if X (assumed to be a `reg' RTX) is valid for use as a base or index register. */ #define BASE_REG_P(X, STRICT) \ ((!(STRICT) && ! HARD_REGISTER_P (X)) \ - || REGNO_OK_FOR_BASE_P (REGNO (X))) + || regno_ok_for_base_p (REGNO (X), VOIDmode, ADDR_SPACE_GENERIC, \ + UNKNOWN, UNKNOWN)) /* Maximum number of registers that can appear in a valid memory address. */ #define MAX_REGS_PER_ADDRESS 1 diff --git a/gcc/config/xtensa/xtensa.md b/gcc/config/xtensa/xtensa.md index 52ffb161c0f5..cb047b0f6557 100644 --- a/gcc/config/xtensa/xtensa.md +++ b/gcc/config/xtensa/xtensa.md @@ -90,10 +90,6 @@ (define_mode_iterator HQI [HI QI]) (define_mode_attr mode_bits [(HI "16") (QI "8")]) -;; This mode iterator allows the SI and HI patterns to be defined from -;; the same template. -(define_mode_iterator SHI [SI HI]) - ;; This iterator and attribute allow signed/unsigned FP truncations to be ;; generated from one template. (define_code_iterator any_fix [fix unsigned_fix]) @@ -1219,22 +1215,8 @@ (match_operand:DI 1 "general_operand" ""))] "" { - if (CONSTANT_P (operands[1])) - { - /* Split in halves if 64-bit Const-to-Reg moves - because of offering further optimization opportunities. */ - if (register_operand (operands[0], DImode)) - { - rtx ops[4] = { operands[0], operands[1] }; - xtensa_split_DI_reg_imm (ops); - emit_move_insn (ops[0], ops[1]); - emit_move_insn (ops[2], ops[3]); - DONE; - } - - if (!TARGET_CONST16) - operands[1] = force_const_mem (DImode, operands[1]); - } + if (!TARGET_CONST16 && CONSTANT_P (operands[1])) + operands[1] = force_const_mem (DImode, operands[1]); if (!register_operand (operands[0], DImode) && !register_operand (operands[1], DImode)) @@ -1244,8 +1226,8 @@ }) (define_insn_and_split "movdi_internal" - [(set (match_operand:DI 0 "nonimmed_operand" "=a,W,a,a,U") - (match_operand:DI 1 "move_operand" "r,i,T,U,r"))] + [(set (match_operand:DI 0 "nonimmed_operand" "=a,a,W,a,a,U") + (match_operand:DI 1 "move_operand" "r,Y,i,T,U,r"))] "register_operand (operands[0], DImode) || register_operand (operands[1], DImode)" "#" @@ -1260,22 +1242,9 @@ std::swap (operands[2], operands[3]); } } - [(set_attr "type" "move,move,load,load,store") + [(set_attr "type" "move,load,move,load,load,store") (set_attr "mode" "DI") - (set_attr "length" "6,12,6,6,6")]) - -(define_split - [(set (match_operand:DI 0 "register_operand") - (match_operand:DI 1 "const_int_operand"))] - "!TARGET_CONST16 - && ! xtensa_split1_finished_p ()" - [(set (match_dup 0) - (match_dup 1)) - (set (match_dup 2) - (match_dup 3))] -{ - xtensa_split_DI_reg_imm (operands); -}) + (set_attr "length" "6,6,12,6,6,6")]) ;; 32-bit Integer moves @@ -1312,42 +1281,6 @@ } [(set_attr "mode" "SI")]) -(define_split - [(set (match_operand:SHI 0 "register_operand") - (match_operand:SHI 1 "const_int_operand"))] - "!TARGET_CONST16 && !TARGET_AUTO_LITPOOLS - && ! xtensa_split1_finished_p () - && ! xtensa_simm12b (INTVAL (operands[1]))" - [(set (match_dup 0) - (match_dup 1))] -{ - operands[1] = force_const_mem (mode, operands[1]); -}) - -(define_split - [(set (match_operand:SHI 0 "register_operand") - (match_operand:SHI 1 "constantpool_operand"))] - "!optimize_debug && reload_completed" - [(const_int 0)] -{ - if (xtensa_constantsynth (operands[0], operands[1])) - DONE; - FAIL; -}) - -(define_split - [(set (match_operand:SHI 0 "register_operand") - (match_operand:SHI 1 "const_int_operand"))] - "!optimize_debug && reload_completed - && !TARGET_CONST16 && TARGET_AUTO_LITPOOLS - && ! xtensa_simm12b (INTVAL (operands[1]))" - [(const_int 0)] -{ - if (xtensa_constantsynth (operands[0], operands[1])) - DONE; - FAIL; -}) - ;; 16-bit Integer moves (define_expand "movhi" @@ -1548,29 +1481,6 @@ (set_attr "mode" "SF") (set_attr "length" "3")]) -(define_split - [(set (match_operand:SF 0 "register_operand") - (match_operand 1 "constantpool_operand"))] - "!optimize_debug && reload_completed" - [(const_int 0)] -{ - if (xtensa_constantsynth (operands[0], operands[1])) - DONE; - FAIL; -}) - -(define_split - [(set (match_operand:SF 0 "register_operand") - (match_operand 1 "const_double_operand"))] - "!optimize_debug && reload_completed - && !TARGET_CONST16 && TARGET_AUTO_LITPOOLS" - [(const_int 0)] -{ - if (xtensa_constantsynth (operands[0], operands[1])) - DONE; - FAIL; -}) - ;; 64-bit floating point moves (define_expand "movdf" diff --git a/gcc/configure b/gcc/configure index 5a779db0a29f..485219bb80b2 100755 --- a/gcc/configure +++ b/gcc/configure @@ -649,6 +649,7 @@ ISLLIBS GMPINC GMPLIBS target_cpu_default +jit_target_objs rust_target_objs d_target_objs fortran_target_objs @@ -658,6 +659,8 @@ use_gcc_stdint xm_defines xm_include_list xm_file_list +tm_jit_include_list +tm_jit_file_list tm_rust_include_list tm_rust_file_list tm_d_include_list @@ -758,6 +761,7 @@ LIPO NMEDIT DSYMUTIL STRIP +LLVM_CONFIG OBJDUMP ac_ct_DUMPBIN DUMPBIN @@ -15113,6 +15117,17 @@ for f in $tm_rust_file; do esac done +tm_jit_file_list= +tm_jit_include_list= +for f in $tm_jit_file; do + case $f in + * ) + tm_jit_file_list="${tm_jit_file_list} \$(srcdir)/config/$f" + tm_jit_include_list="${tm_jit_include_list} config/$f" + ;; + esac +done + xm_file_list= xm_include_list= for f in $xm_file; do @@ -16455,8 +16470,266 @@ test -z "$deplibs_check_method" && deplibs_check_method=unknown -plugin_option= + +# Try CLANG_PLUGIN_FILE first since GCC_PLUGIN_OPTION may return the +# wrong plugin_option with clang. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang" >&5 +$as_echo_n "checking for clang... " >&6; } +if ${clang_cv_is_clang+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifdef __clang__ + yes +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "yes" >/dev/null 2>&1; then : + clang_cv_is_clang=yes +else + clang_cv_is_clang=no +fi +rm -f conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $clang_cv_is_clang" >&5 +$as_echo "$clang_cv_is_clang" >&6; } + plugin_file= + if test $clang_cv_is_clang = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang plugin file" >&5 +$as_echo_n "checking for clang plugin file... " >&6; } + plugin_names="LLVMgold.so" + for plugin in $plugin_names; do + plugin_file=`${CC} ${CFLAGS} --print-file-name $plugin` + if test x$plugin_file = x$plugin; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}llvm-config", so it can be a program name with args. +set dummy ${ac_tool_prefix}llvm-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_LLVM_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$LLVM_CONFIG"; then + ac_cv_prog_LLVM_CONFIG="$LLVM_CONFIG" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_LLVM_CONFIG="${ac_tool_prefix}llvm-config" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +LLVM_CONFIG=$ac_cv_prog_LLVM_CONFIG +if test -n "$LLVM_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LLVM_CONFIG" >&5 +$as_echo "$LLVM_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_LLVM_CONFIG"; then + ac_ct_LLVM_CONFIG=$LLVM_CONFIG + # Extract the first word of "llvm-config", so it can be a program name with args. +set dummy llvm-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_LLVM_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_LLVM_CONFIG"; then + ac_cv_prog_ac_ct_LLVM_CONFIG="$ac_ct_LLVM_CONFIG" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_LLVM_CONFIG="llvm-config" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_LLVM_CONFIG=$ac_cv_prog_ac_ct_LLVM_CONFIG +if test -n "$ac_ct_LLVM_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LLVM_CONFIG" >&5 +$as_echo "$ac_ct_LLVM_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_LLVM_CONFIG" = x; then + LLVM_CONFIG="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + LLVM_CONFIG=$ac_ct_LLVM_CONFIG + fi +else + LLVM_CONFIG="$ac_cv_prog_LLVM_CONFIG" +fi + + if test "$?" != 0; then + as_fn_error $? "Required tool 'llvm-config' not found on PATH." "$LINENO" 5 + fi + clang_lib_dir=`$LLVM_CONFIG --libdir` + if test -f $clang_lib_dir/$plugin; then + plugin_file=$clang_lib_dir/$plugin + fi + if test x$plugin_file != x$plugin; then + break; + fi + fi + done + if test -z $plugin_file; then + as_fn_error $? "Couldn't find clang plugin file for $CC." "$LINENO" 5 + fi + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + + if test "${AR}" = "" ; then + as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5 + fi + plugin_option="--plugin $plugin_file" + touch conftest.c + ${AR} $plugin_option rc conftest.a conftest.c + if test "$?" != 0; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 +$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} + plugin_file= + fi + rm -f conftest.* + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_file" >&5 +$as_echo "$plugin_file" >&6; } + fi + plugin_file="$plugin_file" + +if test -n "$plugin_file"; then + plugin_option="--plugin $plugin_file" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -plugin option" >&5 +$as_echo_n "checking for -plugin option... " >&6; } + plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll" +plugin_option= for plugin in $plugin_names; do plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin` if test x$plugin_so = x$plugin; then @@ -16467,7 +16740,119 @@ for plugin in $plugin_names; do break fi done +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + +if test "${AR}" = "" ; then + as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5 +fi +touch conftest.c +${AR} $plugin_option rc conftest.a conftest.c +if test "$?" != 0; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 +$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} + plugin_option= +fi +rm -f conftest.* +if test -n "$plugin_option"; then + plugin_option="$plugin_option" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_option" >&5 +$as_echo "$plugin_option" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + +fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. set dummy ${ac_tool_prefix}ar; ac_word=$2 @@ -16562,17 +16947,15 @@ fi test -z "$AR" && AR=ar if test -n "$plugin_option"; then - if $AR --help 2>&1 | grep -q "\--plugin"; then - touch conftest.c - $AR $plugin_option rc conftest.a conftest.c - if test "$?" != 0; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 -$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} - else + case "$AR" in + *"$plugin_option"*) + ;; + *) + if $AR --help 2>&1 | grep -q "\--plugin"; then AR="$AR $plugin_option" fi - rm -f conftest.* - fi + ;; + esac fi test -z "$AR_FLAGS" && AR_FLAGS=cru @@ -16779,9 +17162,15 @@ fi test -z "$RANLIB" && RANLIB=: if test -n "$plugin_option" && test "$RANLIB" != ":"; then - if $RANLIB --help 2>&1 | grep -q "\--plugin"; then - RANLIB="$RANLIB $plugin_option" - fi + case "$RANLIB" in + *"$plugin_option"*) + ;; + *) + if $RANLIB --help 2>&1 | grep -q "\--plugin"; then + RANLIB="$RANLIB $plugin_option" + fi + ;; + esac fi @@ -21484,7 +21873,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 21487 "configure" +#line 21876 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -21590,7 +21979,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 21593 "configure" +#line 21982 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -33209,7 +33598,7 @@ ie0: .space 8 .global _start .text _start: - addis 9,13,ie0@got@tprel@ha + addis 9,2,ie0@got@tprel@ha ld 9,ie0@got@tprel@l(9) EOF if $gcc_cv_as -a64 -o conftest.o conftest.s > /dev/null 2>&1 \ @@ -33545,6 +33934,12 @@ $as_echo "#define ENABLE_DEFAULT_SSP 1" >>confdefs.h fi +if echo " ${TARGET_CONFIGDIRS} " | grep " libatomic " > /dev/null 2>&1 ; then + +$as_echo "#define TARGET_PROVIDES_LIBATOMIC 1" >>confdefs.h + +fi + # Test for on the target. { $as_echo "$as_me:${as_lineno-$LINENO}: checking sys/sdt.h in the target C library" >&5 @@ -34159,6 +34554,9 @@ fi + + + diff --git a/gcc/configure.ac b/gcc/configure.ac index 7e57d527ecdd..04f86b52ef84 100644 --- a/gcc/configure.ac +++ b/gcc/configure.ac @@ -2443,6 +2443,17 @@ for f in $tm_rust_file; do esac done +tm_jit_file_list= +tm_jit_include_list= +for f in $tm_jit_file; do + case $f in + * ) + tm_jit_file_list="${tm_jit_file_list} \$(srcdir)/config/$f" + tm_jit_include_list="${tm_jit_include_list} config/$f" + ;; + esac +done + xm_file_list= xm_include_list= for f in $xm_file; do @@ -6789,7 +6800,7 @@ ie0: .space 8 .global _start .text _start: - addis 9,13,ie0@got@tprel@ha + addis 9,2,ie0@got@tprel@ha ld 9,ie0@got@tprel@l(9) EOF if $gcc_cv_as -a64 -o conftest.o conftest.s > /dev/null 2>&1 \ @@ -7049,6 +7060,11 @@ if test x$enable_default_ssp = xyes ; then fi AC_SUBST([enable_default_ssp]) +if echo " ${TARGET_CONFIGDIRS} " | grep " libatomic " > /dev/null 2>&1 ; then + AC_DEFINE(TARGET_PROVIDES_LIBATOMIC, 1, + [Define if libatomic is built for the target.]) +fi + # Test for on the target. GCC_TARGET_TEMPLATE([HAVE_SYS_SDT_H]) AC_CACHE_CHECK([sys/sdt.h in the target C library], [gcc_cv_sys_sdt_h], [ @@ -7596,6 +7612,8 @@ AC_SUBST(tm_d_file_list) AC_SUBST(tm_d_include_list) AC_SUBST(tm_rust_file_list) AC_SUBST(tm_rust_include_list) +AC_SUBST(tm_jit_file_list) +AC_SUBST(tm_jit_include_list) AC_SUBST(xm_file_list) AC_SUBST(xm_include_list) AC_SUBST(xm_defines) @@ -7605,6 +7623,7 @@ AC_SUBST(cxx_target_objs) AC_SUBST(fortran_target_objs) AC_SUBST(d_target_objs) AC_SUBST(rust_target_objs) +AC_SUBST(jit_target_objs) AC_SUBST(target_cpu_default) AC_SUBST_FILE(language_hooks) diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 28a80d0edc22..5099caab06d1 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,368 @@ +2025-10-08 Jason Merrill + + * init.cc (build_new_1): Also clobber for non-placement new. + Only loop clobber in constexpr. + * expr.cc (wrap_with_if_consteval): New. + * cp-tree.h (wrap_with_if_consteval): Declare. + +2025-10-07 Jason Merrill + + * init.cc (build_new_1): Clobber a constant-bound array as a whole. + +2025-10-07 Jonathan Wakely + + * module.cc (trees_out::lang_vals): Fix spelling in comment. + +2025-10-05 Nathaniel Shead + + PR c++/122053 + * name-lookup.cc (pushtag): Load any imported definition of type + before calling pushdecl. + +2025-10-05 Nathaniel Shead + + * name-lookup.cc (check_module_override): Remove check for + TREE_PUBLIC when checking mergeable entities. + +2025-10-04 Jakub Jelinek + + PR c++/114457 + * cp-tree.h: Implement C++26 P2795R5 - Erroneous behavior for + uninitialized reads. + (IF_STMT_VACUOUS_INIT_P): Define. + (check_goto): Change argument type from tree to tree *. + * call.cc (build_over_call): Add indeterminate attribute to + TARGET_EXPR slots for indeterminate parameters. + * constexpr.cc (cxx_eval_internal_function): Handle IFN_DEFERRED_INIT. + (cxx_eval_store_expression): Temporarily work around PR121965 bug. + * cp-gimplify.cc (genericize_if_stmt): Handle IF_STMT_VACUOUS_INIT_P. + (maybe_emit_clobber_object_begin): New function. + (cp_gimplify_expr): Call it for DECL_EXPRs and TARGET_EXPRs with + void type non-NULL TARGET_EXPR_INITIAL. + * decl.cc (struct named_label_fwd_direct_goto, + struct named_label_bck_direct_goto): New types. + (struct named_label_use_entry): Add direct_goto member. Formatting + fix. + (struct named_label_entry): Add direct_goto member. Turn bool members + into bool : 1. Add has_bad_decls bitfield. + (adjust_backward_gotos): New function. + (pop_labels): For flag_auto_var_init > AUTO_INIT_UNINITIALIZED + call adjust_backward_gotos if needed. + (poplevel_named_label_1): For decl_jump_unsafe also set + ent->has_bad_decls, and for decl_instrument_init_bypass_p decls + push them into ent->bad_decls vector too. + (duplicate_decls): Complain if indeterminate attribute on function + parameter isn't present on the first function declaration. + (decl_instrument_init_bypass_p): New function. + (build_deferred_init_call): Likewise. + (maybe_add_deferred_init_calls): Likewise. + (adjust_backward_goto): Likewise. + (check_previous_goto_1): Add direct_goto and case_label arguments. + For decl_instrument_init_bypass_p decls seen if + direct_goto || case_label move case label if needed, call + maybe_add_deferred_init_calls and adjust GOTO_EXPR operands remembered + in direct_goto. Change return type from bool to int, return 0 on + error, 1 for success with no need to adjust vacuous inits and 2 for + success with need to adjust those. + (check_previous_goto): Adjust check_previous_goto_1 call, vec_free + direct_goto vector. + (check_switch_goto): Add case_label argument, adjust + check_previous_goto_1 call. Change return type from bool to int. + (check_goto_1): Remove computed argument, add declp argument. Don't + reuse previous ent->uses if + ent->binding_level != current_binding_level. Push declp into + direct_goto vectors if needed. + (check_goto): Remove decl argument, add declp argument. Adjust + check_goto_1 calls. + (finish_case_label): Call check_switch_goto up to twice, first time + to detect errors and find out if second call will be needed, and + after c_add_case_label second time if needed. In the first case + pass NULL_TREE as new argument to it, in the second case r. + (start_preparsed_function): Don't emit CLOBBER_OBJECT_BEGIN here + for -flifetime-dse=2, instead add "clobber *this" attribute to + current_class_ptr. + * parser.cc (cp_parser_asm_label_list): Call check_goto only + after the TREE_LIST is created and pass address of its TREE_VALUE to + it instead of the label. + * semantics.cc (finish_goto_stmt): Call check_goto only after + build_stmt has been called and pass it address of its first operand + rather than destination. + * tree.cc (handle_indeterminate_attribute): New function. + (cxx_gnu_attributes): Add entry for indeterminate attribute. + +2025-10-04 Jason Merrill + + PR c++/122127 + PR c++/112632 + * pt.cc (convert_template_argument): Don't add redundant + IMPLICIT_CONV_EXPR. + +2025-10-04 Nathaniel Shead + + PR c++/117658 + * cp-tree.h (TU_LOCAL_ENTITY_NAME): Clarify meaning. + * module.cc (depset::entity_kind): New enumerator, assert that + we have enough bits reserved. + (depset::disc_bits): Assert the discriminator has enough bits. + (depset::entity_kind_name): Add 'tu-local' case, assert we + have an entry for all relevant entry_kinds. + (name_for_tu_local_decl): New function. + (trees_out::tree_node): Use it. + (depset::hash::make_dependency): Validate EK_TU_LOCAL. + (depset::hash::add_binding_entity): Generate bindings for + internal purview functions. + (enum ct_bind_flags): New enum for TU-local decls. + (depset::hash::find_dependencies): Handle EK_TU_LOCAL entities. + (binding_cmp): Likewise. + (sort_cluster): Likewise. + (module_state::write_cluster): Likewise. + (module_state::read_cluster): Likewise. + * name-lookup.cc (append_imported_binding_slot): Propagate + internal decl list when growing binding vector. + (name_lookup::adl_namespace_fns): Diagnose if naming a TU-local + entity from a different TU. + (set_module_binding): Include any internal decls in binding. + * name-lookup.h (struct module_tree_map_traits): New type. + (struct tree_binding_vec): Add member 'internal_decls'. + (BINDING_VECTOR_INTERNAL_DECLS): New getter. + (MODULE_BINDING_INTERNAL_DECLS_P): New flag. + (set_module_binding): Add parameter. + +2025-10-03 Egas Ribeiro + + PR c++/122112 + * parser.cc (cp_parser_parameter_declaration_clause): Don't + enable auto_is_implicit_function_template_parm_p when entering + class scope. + +2025-10-01 Iain Sandoe + + * constexpr.cc (cxx_eval_constant_expression): Use revised + interfaces to determine if contracts are ignored and, if not, + whether they are evaluated. + * contracts.h (contract_ignored_p, contract_evaluated_p): New. + +2025-10-01 Jan Hubicka + + * Make-lang.in: Add c++_FDAS + (create_fdas_for_cc1plus): Be sure that build fails if create_gcov fails. + +2025-09-27 Jason Merrill + + PR c++/112632 + * pt.cc (convert_template_argument): Also force IMPLICIT_CONV_EXPR + if the argument is value-dependent. + +2025-09-27 Jason Merrill + + PR c++/122048 + * pt.cc (tsubst_expr): Don't use a lambda current_class_ptr. + +2025-09-25 Nathaniel Shead + + PR c++/122015 + PR c++/122019 + * module.cc (trees_in::install_entity): Remove incorrect + assertion. + +2025-09-24 Nathaniel Shead + + PR c++/122019 + * module.cc (trees_in::install_entity): Don't be affected by + global language linkage state. + (trees_in::is_matching_decl): Check mismatching language linkage + for variables too. + (module_may_redeclare): Report the correct module name for + partitions and implementation units. + +2025-09-23 Alfie Richards + + * class.cc (resolve_address_of_overloaded_function): Updated to use + dijoint_versions_decls instead of common_function_version hook. + * decl.cc (decls_match): Refacture to use disjoint_version_decls and + to pass through conflicting_version argument. + (maybe_version_functions): Updated to use + disjoint_version_decls instead of common_function_version hook. + (duplicate_decls): Add logic to handle conflicting unmergable decls + and improve diagnostics for conflicting versions. + * decl2.cc (check_classfn): Updated to use + disjoint_version_decls instead of common_function_version hook. + +2025-09-23 Alfie Richards + + * cxx-pretty-print.h (pp_cxx_function_target_version): New macro. + (pp_cxx_function_target_clones): Ditto. + (pp_cxx_maybe_whitespace): Ditto. + * error.cc (dump_function_decl): Add printing of target_clone and + target_version in decl diagnostics. + +2025-09-23 Alfie Richards + + PR target/118313 + * call.cc (add_candidates): Change to not resolve non-default versions + in target_version semantics. + * class.cc (resolve_address_of_overloaded_function): Ditto. + * cp-gimplify.cc (cp_genericize_r): Change logic to not apply for + target_version semantics. + * decl.cc (maybe_mark_function_versioned): Remove static. + * cp-tree.h (maybe_mark_function_versioned): New function. + * decl2.cc (cplus_decl_attributes ): Change to mark and therefore + mangle all target_version decls in target_version semantics. + * typeck.cc (cp_build_function_call_vec): Add error for calling + unresolvable non-default node in target_version semantics. + +2025-09-23 Alfie Richards + + * decl.cc (maybe_mark_function_versioned): Change to insert function version + and therefore record assembler name. + +2025-09-22 Nathaniel Shead + + PR c++/122015 + * cp-tree.h (make_auto_pack): Declare. + * lambda.cc (lambda_capture_field_type): Use make_auto_pack to + ensure TYPE_CANONICAL is set correctly. + * pt.cc (make_auto_pack): New function. + +2025-09-20 Patrick Palka + + PR c++/121981 + * pt.cc (any_template_parm_r) : + Don't walk TREE_TYPE. + +2025-09-20 Eczbek + + PR c++/119048 + * lambda.cc (compare_lambda_sig): Only skip first parameter for + object members. + +2025-09-18 Jason Merrill + + * constexpr.cc (cxx_eval_component_reference): Clarify diagnostic. + +2025-09-18 Jason Merrill + + * init.cc (build_new_1): Clobber classes. + +2025-09-18 Jason Merrill + + * constexpr.cc (get_or_insert_ctor_field): -2 means don't insert. + (cxx_eval_component_reference): Handle finding void_node. + (cxx_eval_store_expression): Don't represent initial clobber + unless we need to activate a union member. + (cxx_eval_statement_list): Don't ask for a void prvalue. + (cxx_eval_loop_expr): The expr is discarded-value. + (cxx_eval_constant_expression): A loose clobber is non-constant. + Handle getting void_node instead of a real result. + (potential_constant_expression_1): A local temp is + potentially-constant. + * init.cc (build_new_1): Don't clobber empty types or + in a template. + (build_vec_init): Fix clobber handling. + +2025-09-18 Jason Merrill + + * init.cc (build_new_1): Append alloc_node to checking COND_EXPR. + +2025-09-17 David Malcolm + + PR c++/121966 + * call.cc (print_z_candidate): Consolidate instances of + auto_diagnostic_nesting_level into one, above the "inherited here" + message so that any such message is nested within the note, + and any messages emitted due to the switch on rejection_reason are + similarly nested within the note. + +2025-09-17 David Malcolm + + PR c++/121966 + * call.cc (print_z_candidates): Copy the filtering logic on viable + candidates from the printing loop to the counting loop, so that + num_candidates matches the number of iterations of the latter + loop. + +2025-09-15 Matthias Kretz + + * mangle.cc (write_real_cst): Replace 8 spaces with Tab. + +2025-09-12 Patrick Palka + + PR c++/121795 + * pt.cc (unify) : New non-deduced context + case. + +2025-09-12 Nathaniel Shead + + PR c++/121893 + * name-lookup.cc (name_lookup::adl_namespace_fns): Unwrap the + STAT_HACK also when on_inst_path. + +2025-09-11 H.J. Lu + + PR c++/121889 + * decl2.cc (cplus_decl_attributes): Don't upgrade TLS model if + TLS model isn't set yet. + +2025-09-10 Nathaniel Shead + + PR c++/121859 + * constraint.cc (maybe_diagnose_standard_trait): Check if expr + is non-null. + +2025-09-10 Jakub Jelinek + + * mangle.cc (write_real_cst): Mangle Intel/Motorola extended + 80-bit formats using 20 hex digits instead of 24 or 32. + +2025-09-09 Nathaniel Shead + + PR c++/99682 + PR c++/121808 + * module.cc (class module_state): Add comment to 'parent'. + (module_state::check_not_purview): Rename to... + (module_state::check_circular_import): ...this. Only handle + interface dependencies, adjust diagnostic message. + (module_state::read_imports): Use new function. Pass location + of import as from_loc instead of the module location. + (module_state::do_import): Set module_p when importing the + primary interface for the current module. + (import_module): Split out check for imports in own unit. + Remove incorrect assertion. + (preprocess_module): Don't overwrite module-decl location with + later import. + +2025-09-09 Nathaniel Shead + + * module.cc (this_module): New function. + (import_entity_module): Use it. + (trees_out::decl_node): Likewise. + (get_module): Likewise. + (module_state::check_not_purview): Likewise. + (module_state::read_imports): Likewise. + (module_state::read_using_directives): Likewise. + (module_state::read_initial): Likewise. + (get_import_bitmap): Likewise. + (module_may_redeclare): Likewise. + (direct_import): Likewise. + (declare_module): Likewise. + (name_pending_imports): Likewise. + (preprocess_module): Likewise. + (finish_module_processing): Likewise. + (late_finish_module): Likewise. + +2025-09-09 Patrick Palka + + PR c++/121779 + * tree.cc (build_min_non_dep_op_overload): Handle comparison + operator expressions rewritten from a <=> that returns a + non-class type. + +2025-09-09 Matthias Kretz + + PR c++/121801 + * mangle.cc (write_real_cst): Handle 16-bit real and assert + that reals have 16 bits or a multiple of 32 bits. + 2025-09-07 H.J. Lu PR c++/107393 diff --git a/gcc/cp/Make-lang.in b/gcc/cp/Make-lang.in index dae3c6846e04..70cfe2b16636 100644 --- a/gcc/cp/Make-lang.in +++ b/gcc/cp/Make-lang.in @@ -123,6 +123,8 @@ CXX_OBJS = cp/cp-lang.o c-family/stub-objc.o $(CXX_AND_OBJCXX_OBJS) c++_OBJS = $(CXX_OBJS) cc1plus-checksum.o cp/g++spec.o +c++_FDAS = cc1plus.fda + # Use strict warnings for this front end. cp-warn = $(STRICT_WARN) @@ -199,7 +201,7 @@ create_fdas_for_cc1plus: ../stage1-gcc/cc1plus$(exeext) ../prev-gcc/$(PERF_DATA) echo $$perf_path; \ if [ -f $$perf_path ]; then \ profile_name=cc1plus_$$component_in_prev.fda; \ - $(CREATE_GCOV) -binary ../stage1-gcc/cc1plus$(exeext) -gcov $$profile_name -profile $$perf_path -gcov_version 2; \ + $(CREATE_GCOV) -binary ../stage1-gcc/cc1plus$(exeext) -gcov $$profile_name -profile $$perf_path -gcov_version 2 || exit 1; \ fi; \ done; @@ -209,7 +211,7 @@ create_fdas_for_cc1plus: ../stage1-gcc/cc1plus$(exeext) ../prev-gcc/$(PERF_DATA) echo $$perf_path; \ if [ -f $$perf_path ]; then \ profile_name=cc1plus_$$component_in_prev_target.fda; \ - $(CREATE_GCOV) -binary ../prev-gcc/cc1plus$(exeext) -gcov $$profile_name -profile $$perf_path -gcov_version 2; \ + $(CREATE_GCOV) -binary ../prev-gcc/cc1plus$(exeext) -gcov $$profile_name -profile $$perf_path -gcov_version 2 || exit 1; \ fi; \ done; diff --git a/gcc/cp/call.cc b/gcc/cp/call.cc index 02cef63a4538..77dfa7d2982b 100644 --- a/gcc/cp/call.cc +++ b/gcc/cp/call.cc @@ -4104,15 +4104,18 @@ print_z_candidate (location_t loc, const char *msgstr, inform (cloc, "%s%#qD (rewritten)", msg, fn); else inform (cloc, "%s%#qD", msg, fn); + + auto_diagnostic_nesting_level sentinel; + if (fn != candidate->fn) { cloc = location_of (candidate->fn); inform (cloc, "inherited here"); } + /* Give the user some information about why this candidate failed. */ if (candidate->reason != NULL) { - auto_diagnostic_nesting_level sentinel; struct rejection_reason *r = candidate->reason; switch (r->code) @@ -4172,10 +4175,7 @@ print_z_candidate (location_t loc, const char *msgstr, "class type is invalid"); break; case rr_constraint_failure: - { - auto_diagnostic_nesting_level sentinel; - diagnose_constraints (cloc, fn, NULL_TREE); - } + diagnose_constraints (cloc, fn, NULL_TREE); break; case rr_inherited_ctor: inform (cloc, "an inherited constructor is not a candidate for " @@ -4255,7 +4255,11 @@ print_z_candidates (location_t loc, struct z_candidate *candidates, int num_candidates = 0; for (auto iter = candidates; iter; iter = iter->next) - ++num_candidates; + { + if (only_viable_p.is_true () && iter->viable != 1) + break; + ++num_candidates; + } inform_n (loc, num_candidates, "there is %i candidate", "there are %i candidates", @@ -6927,6 +6931,16 @@ add_candidates (tree fns, tree first_arg, const vec *args, continue; } + /* Do not resolve any non-default function. Only the default version + is resolvable (for the target_version attribute semantics.) */ + if (!TARGET_HAS_FMV_TARGET_ATTRIBUTE + && TREE_CODE (fn) == FUNCTION_DECL + && !is_function_default_version (fn)) + { + add_ignored_candidate (candidates, fn); + continue; + } + if (TREE_CODE (fn) == TEMPLATE_DECL) add_template_candidate (candidates, fn, @@ -10474,6 +10488,7 @@ build_over_call (struct z_candidate *cand, int flags, tsubst_flags_t complain) unsigned int arg_index = 0; int conv_index = 0; int param_index = 0; + tree parmd = DECL_ARGUMENTS (fn); auto consume_object_arg = [&arg_index, &first_arg, args]() { @@ -10491,6 +10506,8 @@ build_over_call (struct z_candidate *cand, int flags, tsubst_flags_t complain) tree object_arg = consume_object_arg (); argarray[argarray_size++] = build_this (object_arg); parm = TREE_CHAIN (parm); + if (parmd) + parmd = DECL_CHAIN (parmd); /* We should never try to call the abstract constructor. */ gcc_assert (!DECL_HAS_IN_CHARGE_PARM_P (fn)); @@ -10499,6 +10516,8 @@ build_over_call (struct z_candidate *cand, int flags, tsubst_flags_t complain) argarray[argarray_size++] = (*args)[arg_index]; ++arg_index; parm = TREE_CHAIN (parm); + if (parmd) + parmd = DECL_CHAIN (parmd); } } /* Bypass access control for 'this' parameter. */ @@ -10586,6 +10605,8 @@ build_over_call (struct z_candidate *cand, int flags, tsubst_flags_t complain) argarray[argarray_size++] = converted_arg; parm = TREE_CHAIN (parm); + if (parmd) + parmd = DECL_CHAIN (parmd); } auto handle_arg = [fn, flags](tree type, @@ -10609,6 +10630,27 @@ build_over_call (struct z_candidate *cand, int flags, tsubst_flags_t complain) return val; }; + auto handle_indeterminate_arg = [](tree parmd, tree val) + { + if (parmd + && lookup_attribute (NULL, "indeterminate", DECL_ATTRIBUTES (parmd))) + { + STRIP_NOPS (val); + if (TREE_CODE (val) == ADDR_EXPR + && TREE_CODE (TREE_OPERAND (val, 0)) == TARGET_EXPR) + { + val = TARGET_EXPR_SLOT (TREE_OPERAND (val, 0)); + if (auto_var_p (val) && DECL_ARTIFICIAL (val)) + { + tree id = get_identifier ("indeterminate"); + DECL_ATTRIBUTES (val) + = tree_cons (build_tree_list (NULL_TREE, id), NULL_TREE, + DECL_ATTRIBUTES (val)); + } + } + } + }; + if (DECL_XOBJ_MEMBER_FUNCTION_P (fn)) { gcc_assert (cand->num_convs > 0); @@ -10622,8 +10664,13 @@ build_over_call (struct z_candidate *cand, int flags, tsubst_flags_t complain) if (val == error_mark_node) return error_mark_node; else - argarray[argarray_size++] = val; + { + argarray[argarray_size++] = val; + handle_indeterminate_arg (parmd, val); + } parm = TREE_CHAIN (parm); + if (parmd) + parmd = DECL_CHAIN (parmd); } gcc_assert (first_arg == NULL_TREE); @@ -10669,7 +10716,12 @@ build_over_call (struct z_candidate *cand, int flags, tsubst_flags_t complain) if (val == error_mark_node) return error_mark_node; else - argarray[argarray_size++] = val; + { + argarray[argarray_size++] = val; + handle_indeterminate_arg (parmd, val); + } + if (parmd) + parmd = DECL_CHAIN (parmd); } /* Default arguments */ @@ -10685,6 +10737,9 @@ build_over_call (struct z_candidate *cand, int flags, tsubst_flags_t complain) if (val == error_mark_node) return error_mark_node; argarray[argarray_size++] = val; + handle_indeterminate_arg (parmd, val); + if (parmd) + parmd = DECL_CHAIN (parmd); } /* Ellipsis */ diff --git a/gcc/cp/class.cc b/gcc/cp/class.cc index cf58f652fc1d..b56cc518a117 100644 --- a/gcc/cp/class.cc +++ b/gcc/cp/class.cc @@ -8974,6 +8974,13 @@ resolve_address_of_overloaded_function (tree target_type, if (!constraints_satisfied_p (fn)) continue; + /* For target_version semantics, never resolve a non-default + version. */ + if (!TARGET_HAS_FMV_TARGET_ATTRIBUTE + && TREE_CODE (fn) == FUNCTION_DECL + && !is_function_default_version (fn)) + continue; + if (undeduced_auto_decl (fn)) { /* Force instantiation to do return type deduction. */ @@ -9120,8 +9127,7 @@ resolve_address_of_overloaded_function (tree target_type, decls_match will return false as they are different. */ for (match = TREE_CHAIN (matches); match; match = TREE_CHAIN (match)) if (!decls_match (fn, TREE_PURPOSE (match)) - && !targetm.target_option.function_versions - (fn, TREE_PURPOSE (match))) + && !disjoint_version_decls (fn, TREE_PURPOSE (match))) break; if (match) @@ -9199,8 +9205,10 @@ resolve_address_of_overloaded_function (tree target_type, /* If a pointer to a function that is multi-versioned is requested, the pointer to the dispatcher function is returned instead. This works well because indirectly calling the function will dispatch the right - function version at run-time. */ - if (DECL_FUNCTION_VERSIONED (fn)) + function version at run-time. + This is done at multiple_target.cc for target_version semantics. */ + + if (DECL_FUNCTION_VERSIONED (fn) && TARGET_HAS_FMV_TARGET_ATTRIBUTE) { fn = get_function_version_dispatcher (fn); if (fn == NULL) diff --git a/gcc/cp/constexpr.cc b/gcc/cp/constexpr.cc index db363dc27607..016e3db927c9 100644 --- a/gcc/cp/constexpr.cc +++ b/gcc/cp/constexpr.cc @@ -3009,6 +3009,9 @@ cxx_eval_internal_function (const constexpr_ctx *ctx, tree t, vc_prvalue, non_constant_p, overflow_p, jump_target); + case IFN_DEFERRED_INIT: + return build_clobber (TREE_TYPE (t), CLOBBER_OBJECT_BEGIN); + case IFN_VEC_CONVERT: { tree arg = cxx_eval_constant_expression (ctx, CALL_EXPR_ARG (t, 0), @@ -5293,7 +5296,9 @@ find_array_ctor_elt (tree ary, tree dindex, bool insert) matching constructor_elt exists, then add one to CTOR. As an optimization, if POS_HINT is non-negative then it is used as a guess - for the (integer) index of the matching constructor_elt within CTOR. */ + for the (integer) index of the matching constructor_elt within CTOR. + + If POS_HINT is -2, it means do not insert. */ static constructor_elt * get_or_insert_ctor_field (tree ctor, tree index, int pos_hint = -1) @@ -5303,9 +5308,11 @@ get_or_insert_ctor_field (tree ctor, tree index, int pos_hint = -1) && CONSTRUCTOR_ELT (ctor, pos_hint)->index == index) return CONSTRUCTOR_ELT (ctor, pos_hint); + bool insertp = (pos_hint != -2); tree type = TREE_TYPE (ctor); if (TREE_CODE (type) == VECTOR_TYPE && index == NULL_TREE) { + gcc_assert (insertp); CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (ctor), index, NULL_TREE); return &CONSTRUCTOR_ELTS (ctor)->last(); } @@ -5323,13 +5330,26 @@ get_or_insert_ctor_field (tree ctor, tree index, int pos_hint = -1) tree lo = TREE_OPERAND (index, 0); gcc_assert (array_index_cmp (elts->last().index, lo) < 0); } + gcc_assert (insertp); CONSTRUCTOR_APPEND_ELT (elts, index, NULL_TREE); return &elts->last(); } - HOST_WIDE_INT i = find_array_ctor_elt (ctor, index, /*insert*/true); - gcc_assert (i >= 0); + HOST_WIDE_INT i = find_array_ctor_elt (ctor, index, insertp); + if (i < 0) + { + gcc_assert (!insertp); + return nullptr; + } constructor_elt *cep = CONSTRUCTOR_ELT (ctor, i); + if (!insertp && cep->index && TREE_CODE (cep->index) == RANGE_EXPR) + { + /* Split a range even if we aren't inserting new entries. */ + gcc_assert (!insertp); + i = find_array_ctor_elt (ctor, index, /*insert*/true); + gcc_assert (i >= 0); + cep = CONSTRUCTOR_ELT (ctor, i); + } gcc_assert (cep->index == NULL_TREE || TREE_CODE (cep->index) != RANGE_EXPR); return cep; @@ -5384,6 +5404,9 @@ get_or_insert_ctor_field (tree ctor, tree index, int pos_hint = -1) entry at the end. */ insert: + if (!insertp) + return nullptr; + { constructor_elt ce = { index, NULL_TREE }; @@ -5745,6 +5768,8 @@ cxx_eval_component_reference (const constexpr_ctx *ctx, tree t, if (pmf ? DECL_NAME (field) == DECL_NAME (part) : field == part) { + if (value == void_node) + goto uninit; if (value) { STRIP_ANY_LOCATION_WRAPPER (value); @@ -5766,7 +5791,7 @@ cxx_eval_component_reference (const constexpr_ctx *ctx, tree t, if (cep->value == NULL_TREE) error ("accessing uninitialized member %qD", part); else - error ("accessing %qD member instead of initialized %qD member " + error ("accessing %qD member instead of active %qD member " "in constant expression", part, cep->index); } *non_constant_p = true; @@ -5796,6 +5821,7 @@ cxx_eval_component_reference (const constexpr_ctx *ctx, tree t, if (CONSTRUCTOR_NO_CLEARING (whole)) { + uninit: /* 'whole' is part of the aggregate initializer we're currently building; if there's no initializer for this member yet, that's an error. */ @@ -7475,6 +7501,13 @@ cxx_eval_store_expression (const constexpr_ctx *ctx, tree t, bool preeval = SCALAR_TYPE_P (type) || TREE_CODE (t) == MODIFY_EXPR; if (preeval && !TREE_CLOBBER_P (init)) { + /* Ignore var = .DEFERRED_INIT (); for now, until PR121965 is fixed. */ + if (flag_auto_var_init > AUTO_INIT_UNINITIALIZED + && TREE_CODE (init) == CALL_EXPR + && CALL_EXPR_FN (init) == NULL_TREE + && CALL_EXPR_IFN (init) == IFN_DEFERRED_INIT) + return void_node; + /* Evaluate the value to be stored without knowing what object it will be stored in, so that any side-effects happen first. */ if (!SCALAR_TYPE_P (type)) @@ -7510,6 +7543,8 @@ cxx_eval_store_expression (const constexpr_ctx *ctx, tree t, /* If we're modifying a const object, save it. */ tree const_object_being_modified = NULL_TREE; bool mutable_p = false; + /* If we see a union, we can't ignore clobbers. */ + int seen_union = 0; for (tree probe = target; object == NULL_TREE; ) { switch (TREE_CODE (probe)) @@ -7552,6 +7587,8 @@ cxx_eval_store_expression (const constexpr_ctx *ctx, tree t, vec_safe_push (refs, elt); vec_safe_push (refs, TREE_TYPE (probe)); probe = ob; + if (TREE_CODE (TREE_TYPE (ob)) == UNION_TYPE) + ++seen_union; } break; @@ -7652,15 +7689,19 @@ cxx_eval_store_expression (const constexpr_ctx *ctx, tree t, } /* Handle explicit end-of-lifetime. */ - if (TREE_CLOBBER_P (init) - && CLOBBER_KIND (init) >= CLOBBER_OBJECT_END) + if (TREE_CLOBBER_P (init)) { - if (refs->is_empty ()) + if (CLOBBER_KIND (init) >= CLOBBER_OBJECT_END + && refs->is_empty ()) { ctx->global->destroy_value (object); return void_node; } + if (!seen_union && !*valp + && CLOBBER_KIND (init) < CLOBBER_OBJECT_END) + return void_node; + /* Ending the lifetime of a const object is OK. */ const_object_being_modified = NULL_TREE; } @@ -7853,12 +7894,22 @@ cxx_eval_store_expression (const constexpr_ctx *ctx, tree t, ctors.safe_push (valp); vec_safe_push (indexes, index); + /* Avoid adding an _elt for a clobber when the whole CONSTRUCTOR is + uninitialized. */ + int pos = (!seen_union && TREE_CLOBBER_P (init) + && CONSTRUCTOR_NO_CLEARING (*valp) + && CLOBBER_KIND (init) < CLOBBER_OBJECT_END) ? -2 : -1; constructor_elt *cep - = get_or_insert_ctor_field (*valp, index); + = get_or_insert_ctor_field (*valp, index, pos); + if (cep == nullptr) + return void_node; index_pos_hints.safe_push (cep - CONSTRUCTOR_ELTS (*valp)->begin()); if (code == UNION_TYPE) - activated_union_member_p = true; + { + activated_union_member_p = true; + --seen_union; + } valp = &cep->value; type = reftype; @@ -8279,7 +8330,8 @@ cxx_eval_statement_list (const constexpr_ctx *ctx, tree t, value_cat lval = vc_discard; /* The result of a statement-expression is not wrapped in EXPR_STMT. */ - if (tsi_one_before_end_p (i) && TREE_CODE (stmt) != EXPR_STMT) + if (tsi_one_before_end_p (i) + && !VOID_TYPE_P (TREE_TYPE (stmt))) lval = vc_prvalue; r = cxx_eval_constant_expression (ctx, stmt, lval, @@ -8383,7 +8435,7 @@ cxx_eval_loop_expr (const constexpr_ctx *ctx, tree t, *jump_target = NULL_TREE; if (expr) - cxx_eval_constant_expression (ctx, expr, vc_prvalue, + cxx_eval_constant_expression (ctx, expr, vc_discard, non_constant_p, overflow_p, jump_target); cleanup_cond (); @@ -9664,6 +9716,14 @@ cxx_eval_constant_expression (const constexpr_ctx *ctx, tree t, if (TREE_CONSTANT (t)) return t; } + if (TREE_CLOBBER_P (t)) + { + /* Assignment from a clobber is handled in cxx_eval_store_expression; + a clobber by itself isn't a constant-expression. */ + gcc_assert (ctx->quiet); + *non_constant_p = true; + break; + } r = cxx_eval_bare_aggregate (ctx, t, lval, non_constant_p, overflow_p, jump_target); break; @@ -10112,14 +10172,13 @@ cxx_eval_constant_expression (const constexpr_ctx *ctx, tree t, case PRECONDITION_STMT: case POSTCONDITION_STMT: { - contract_semantic semantic = get_contract_semantic (t); - if (semantic == CCS_IGNORE) + if (contract_ignored_p (t)) break; if (!cxx_eval_assert (ctx, CONTRACT_CONDITION (t), G_("contract predicate is false in " "constant expression"), - EXPR_LOCATION (t), checked_contract_p (semantic), + EXPR_LOCATION (t), contract_evaluated_p (t), non_constant_p, overflow_p)) *non_constant_p = true; r = void_node; @@ -10226,6 +10285,19 @@ cxx_eval_constant_expression (const constexpr_ctx *ctx, tree t, if (r == error_mark_node) *non_constant_p = true; + if (r == void_node && lval != vc_discard && !*jump_target + && !VOID_TYPE_P (TREE_TYPE (t))) + { + /* For diagnostic quality we should have handled this sooner, where we + can be more specific about the out-of-lifetime object. But here we + can still be correct. */ + gcc_checking_assert (false); + if (!ctx->quiet) + error_at (EXPR_LOCATION (t), + "%qE accesses an object outside its lifetime", t); + *non_constant_p = true; + } + if (*non_constant_p) return t; else @@ -11632,6 +11704,7 @@ potential_constant_expression_1 (tree t, bool want_rval, bool strict, bool now, && (now || !var_in_maybe_constexpr_fn (t)) && !type_dependent_expression_p (t) && !decl_maybe_constant_var_p (t) + && !is_local_temp (t) && (strict || !CP_TYPE_CONST_NON_VOLATILE_P (TREE_TYPE (t)) || (DECL_INITIAL (t) diff --git a/gcc/cp/constraint.cc b/gcc/cp/constraint.cc index 4b20b791e5d1..309ebc813243 100644 --- a/gcc/cp/constraint.cc +++ b/gcc/cp/constraint.cc @@ -3360,7 +3360,7 @@ maybe_diagnose_standard_trait (location_t loc, tree expr) } } - if (TREE_CODE (expr) == TRAIT_EXPR) + if (expr && TREE_CODE (expr) == TRAIT_EXPR) { diagnose_trait_expr (loc, expr, args); return true; diff --git a/gcc/cp/contracts.h b/gcc/cp/contracts.h index ead07d19fb7b..54eacd9a4c5a 100644 --- a/gcc/cp/contracts.h +++ b/gcc/cp/contracts.h @@ -334,4 +334,19 @@ set_contract_semantic (tree t, contract_semantic semantic) } +/* Will this contract be ignored. */ + +inline bool +contract_ignored_p (const_tree contract) +{ + return (get_contract_semantic (contract) <= CCS_IGNORE); +} + +/* Will this contract be evaluated? */ + +inline bool +contract_evaluated_p (const_tree contract) +{ + return (get_contract_semantic (contract) >= CCS_NEVER); +} #endif /* ! GCC_CP_CONTRACT_H */ diff --git a/gcc/cp/cp-gimplify.cc b/gcc/cp/cp-gimplify.cc index 39da4ff236ab..1662336e165c 100644 --- a/gcc/cp/cp-gimplify.cc +++ b/gcc/cp/cp-gimplify.cc @@ -200,6 +200,33 @@ genericize_if_stmt (tree *stmt_p) } } + if (IF_STMT_VACUOUS_INIT_P (stmt)) + { + gcc_checking_assert (integer_zerop (cond)); + gcc_checking_assert (!else_ || !TREE_SIDE_EFFECTS (else_)); + tree lab = create_artificial_label (UNKNOWN_LOCATION); + VACUOUS_INIT_LABEL_P (lab) = 1; + tree goto_expr = build_stmt (UNKNOWN_LOCATION, GOTO_EXPR, lab); + tree label_expr = build_stmt (UNKNOWN_LOCATION, LABEL_EXPR, lab); + if (TREE_CODE (then_) == STATEMENT_LIST) + { + tree_stmt_iterator i = tsi_start (then_); + tsi_link_before (&i, goto_expr, TSI_CONTINUE_LINKING); + i = tsi_last (then_); + tsi_link_after (&i, label_expr, TSI_CONTINUE_LINKING); + stmt = then_; + } + else + { + stmt = NULL_TREE; + append_to_statement_list (goto_expr, &stmt); + append_to_statement_list (then_, &stmt); + append_to_statement_list (label_expr, &stmt); + } + *stmt_p = stmt; + return; + } + if (!then_) then_ = build_empty_stmt (locus); if (!else_) @@ -603,6 +630,38 @@ cp_gimplify_arg (tree *arg_p, gimple_seq *pre_p, location_t call_location, } +/* Emit a decl = {CLOBBER(bob)}; stmt before DECL_EXPR or first + TARGET_EXPR gimplification for -flifetime-dse=2. */ + +static void +maybe_emit_clobber_object_begin (tree decl, gimple_seq *pre_p) +{ + if (VAR_P (decl) + && auto_var_p (decl) + && TREE_TYPE (decl) != error_mark_node + && DECL_NONTRIVIALLY_INITIALIZED_P (decl) + /* Don't do it if it is fully initialized. */ + && DECL_INITIAL (decl) == NULL_TREE + && !DECL_HAS_VALUE_EXPR_P (decl) + && !OPAQUE_TYPE_P (TREE_TYPE (decl)) + /* Nor going to have decl = .DEFERRED_INIT (...); added. */ + && (flag_auto_var_init == AUTO_INIT_UNINITIALIZED + || lookup_attribute ("uninitialized", DECL_ATTRIBUTES (decl)) + || lookup_attribute ("indeterminate", DECL_ATTRIBUTES (decl)))) + { + tree eltype = strip_array_types (TREE_TYPE (decl)); + if (RECORD_OR_UNION_TYPE_P (eltype) + && !is_empty_class (eltype)) + { + tree clobber + = build_clobber (TREE_TYPE (decl), CLOBBER_OBJECT_BEGIN); + gimple *g = gimple_build_assign (decl, clobber); + gimple_set_location (g, DECL_SOURCE_LOCATION (decl)); + gimple_seq_add_stmt_without_update (pre_p, g); + } + } +} + /* Do C++-specific gimplification. Args are as for gimplify_expr. */ int @@ -918,6 +977,10 @@ cp_gimplify_expr (tree *expr_p, gimple_seq *pre_p, gimple_seq *post_p) on the rhs of an assignment, as in constexpr-aggr1.C. */ gcc_checking_assert (!TARGET_EXPR_ELIDING_P (*expr_p) || !TREE_ADDRESSABLE (TREE_TYPE (*expr_p))); + if (flag_lifetime_dse > 1 + && TARGET_EXPR_INITIAL (*expr_p) + && VOID_TYPE_P (TREE_TYPE (TARGET_EXPR_INITIAL (*expr_p)))) + maybe_emit_clobber_object_begin (TARGET_EXPR_SLOT (*expr_p), pre_p); ret = GS_UNHANDLED; break; @@ -929,6 +992,12 @@ cp_gimplify_expr (tree *expr_p, gimple_seq *pre_p, gimple_seq *post_p) ret = GS_OK; break; + case DECL_EXPR: + if (flag_lifetime_dse > 1) + maybe_emit_clobber_object_begin (DECL_EXPR_DECL (*expr_p), pre_p); + ret = GS_UNHANDLED; + break; + case RETURN_EXPR: if (TREE_OPERAND (*expr_p, 0) && (TREE_CODE (TREE_OPERAND (*expr_p, 0)) == INIT_EXPR @@ -2166,13 +2235,16 @@ cp_genericize_r (tree *stmt_p, int *walk_subtrees, void *data) returns the function with the highest target priority, that is, the version that will checked for dispatching first. If this version is inlinable, a direct call to this version can be made - otherwise the call should go through the dispatcher. */ + otherwise the call should go through the dispatcher. + This is done at multiple_target.cc for target_version semantics. */ { tree fn = cp_get_callee_fndecl_nofold (stmt); - if (fn && DECL_FUNCTION_VERSIONED (fn) + if (TARGET_HAS_FMV_TARGET_ATTRIBUTE + && fn + && DECL_FUNCTION_VERSIONED (fn) && (current_function_decl == NULL - || !targetm.target_option.can_inline_p (current_function_decl, - fn))) + || !targetm.target_option.can_inline_p + (current_function_decl, fn))) if (tree dis = get_function_version_dispatcher (fn)) { mark_versions_used (dis); diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h index d531bcd833b3..7298d3b81bd7 100644 --- a/gcc/cp/cp-tree.h +++ b/gcc/cp/cp-tree.h @@ -510,6 +510,7 @@ extern GTY(()) tree cp_global_trees[CPTI_MAX]; PACK_EXPANSION_FORCE_EXTRA_ARGS_P (in *_PACK_EXPANSION) LAMBDA_EXPR_STATIC_P (in LAMBDA_EXPR) TARGET_EXPR_ELIDING_P (in TARGET_EXPR) + IF_STMT_VACUOUS_INIT_P (IF_STMT) contract_semantic (in ASSERTION_, PRECONDITION_, POSTCONDITION_STMT) TYPENAME_IS_UNION_P (in TYPENAME_TYPE) 4: IDENTIFIER_MARKED (IDENTIFIER_NODEs) @@ -1856,7 +1857,8 @@ struct GTY(()) tree_tu_local_entity { location_t loc; }; -/* The name of a translation-unit-local entity. */ +/* The human-readable name of a translation-unit-local entity as + an IDENTIFIER_NODE. */ #define TU_LOCAL_ENTITY_NAME(NODE) \ (((struct tree_tu_local_entity *)TU_LOCAL_ENTITY_CHECK (NODE))->name) @@ -5686,6 +5688,9 @@ decl_template_parm_check (const_tree t, const char *f, int l, const char *fn) #define IF_SCOPE(NODE) TREE_OPERAND (IF_STMT_CHECK (NODE), 3) #define IF_STMT_CONSTEXPR_P(NODE) TREE_LANG_FLAG_0 (IF_STMT_CHECK (NODE)) #define IF_STMT_CONSTEVAL_P(NODE) TREE_LANG_FLAG_2 (IF_STMT_CHECK (NODE)) +/* True on artificial if (0) around .DEFERRED_INIT calls added for + !!flag_auto_var_init. */ +#define IF_STMT_VACUOUS_INIT_P(NODE) TREE_LANG_FLAG_3 (IF_STMT_CHECK (NODE)) /* Like PACK_EXPANSION_EXTRA_ARGS, for constexpr if. IF_SCOPE is used while building an IF_STMT; IF_STMT_EXTRA_ARGS is used after it is complete. */ @@ -7279,7 +7284,7 @@ extern tree duplicate_decls (tree, tree, extern void mark_label_addressed (tree); extern tree declare_local_label (tree); extern tree define_label (location_t, tree); -extern void check_goto (tree); +extern void check_goto (tree *); extern bool check_omp_return (void); extern tree make_typename_type (tree, tree, enum tag_types, tsubst_flags_t); extern tree build_typename_type (tree, tree, tree, tag_types); @@ -7381,6 +7386,7 @@ extern tree build_explicit_specifier (tree, tsubst_flags_t); extern bool use_eh_spec_block (tree); extern void do_push_parm_decls (tree, tree, tree *); extern tree do_aggregate_paren_init (tree, tree); +extern void maybe_mark_function_versioned (tree); /* in decl2.cc */ extern void record_mangling (tree, bool); @@ -7555,6 +7561,7 @@ extern tree mark_lvalue_use_nonread (tree); extern tree mark_type_use (tree); extern tree mark_discarded_use (tree); extern void mark_exp_read (tree); +extern tree wrap_with_if_consteval (tree); /* friend.cc */ extern int is_friend (tree, tree); @@ -7835,6 +7842,7 @@ extern tree make_constrained_auto (tree, tree); extern tree make_constrained_decltype_auto (tree, tree); extern tree make_template_placeholder (tree); extern tree make_cast_auto (void); +extern tree make_auto_pack (void); extern bool template_placeholder_p (tree); extern bool ctad_template_p (tree); extern bool unparenthesized_id_or_class_member_access_p (tree); diff --git a/gcc/cp/cxx-pretty-print.h b/gcc/cp/cxx-pretty-print.h index 86e0ce7d85f2..356fd6e4d237 100644 --- a/gcc/cp/cxx-pretty-print.h +++ b/gcc/cp/cxx-pretty-print.h @@ -81,8 +81,13 @@ class cxx_pretty_printer : public c_pretty_printer #define pp_cxx_ws_string(PP, I) pp_c_ws_string (PP, I) #define pp_cxx_identifier(PP, I) pp_c_identifier (PP, I) +#define pp_cxx_maybe_whitespace(PP) pp_c_maybe_whitespace (PP) #define pp_cxx_tree_identifier(PP, T) \ pp_c_tree_identifier (PP, T) +#define pp_cxx_function_target_version(PP, T) \ + pp_c_function_target_version (PP, T) +#define pp_cxx_function_target_clones(PP, T) \ + pp_c_function_target_clones (PP, T) void pp_cxx_begin_template_argument_list (cxx_pretty_printer *); void pp_cxx_end_template_argument_list (cxx_pretty_printer *); diff --git a/gcc/cp/decl.cc b/gcc/cp/decl.cc index a6a98426ed9c..885be3b2cecf 100644 --- a/gcc/cp/decl.cc +++ b/gcc/cp/decl.cc @@ -76,6 +76,7 @@ enum bad_spec_place { static const char *redeclaration_error_message (tree, tree); static bool decl_jump_unsafe (tree); +static bool decl_instrument_init_bypass_p (tree); static void require_complete_types_for_parms (tree); static tree grok_reference_init (tree, tree, tree, int); static tree grokvardecl (tree, tree, tree, const cp_decl_specifier_seq *, @@ -173,6 +174,25 @@ vec *static_decls; /* vector of keyed classes. */ vec *keyed_classes; +/* Used in the direct_goto vector of named_label_use_entry for + addresses of the LABEL_DECLs within GOTO_EXPR or asm goto + for forward jumps. */ + +struct GTY(()) named_label_fwd_direct_goto { + tree *GTY((skip)) direct_goto; +}; + +/* Used in the direct_goto vector of named_label_use_entry for + addresses of the LABEL_DECLs within GOTO_EXPR or asm goto + for backward jumps. */ + +struct GTY(()) named_label_bck_direct_goto { + tree *GTY((skip)) direct_goto; + /* Number of the decl_instrument_init_bypass_p decls in bad_decls vector + at the time this backward goto has been seen. */ + unsigned n_bad_decls; +}; + /* Used only for jumps to as-yet undefined labels, since jumps to defined labels can have their validity checked immediately. */ @@ -188,7 +208,11 @@ struct GTY((chain_next ("%h.next"))) named_label_use_entry { tree names_in_scope; /* If the use is a possible destination of a computed goto, a vec of decls that aren't destroyed, filled in by poplevel_named_label_1. */ - vec *computed_goto; + vec *computed_goto; + /* If the use is a destination of normal goto, a vec of addresses of + LABEL_DECLs that might need changing for !!flag_auto_var_init + forward jumps across vacuous initializers. */ + vec *direct_goto; /* The location of the goto, for error reporting. */ location_t o_goto_locus; /* True if an OpenMP structured block scope has been closed since @@ -226,20 +250,29 @@ struct GTY((for_user)) named_label_entry { /* A list of uses of the label, before the label is defined. */ named_label_use_entry *uses; - /* True if we've seen &&label. Appalently we can't use TREE_ADDRESSABLE for + /* If the use is a destination of normal goto, a vec of addresses of + LABEL_DECLs that might need changing for !!flag_auto_var_init + backward jumps across vacuous initializers. */ + vec *direct_goto; + + /* True if we've seen &&label. Apparently we can't use TREE_ADDRESSABLE for this, it has a more specific meaning for LABEL_DECL. */ - bool addressed; + bool addressed : 1; /* The following bits are set after the label is defined, and are updated as scopes are popped. They indicate that a jump to the label will illegally enter a scope of the given flavor. */ - bool in_try_scope; - bool in_catch_scope; - bool in_omp_scope; - bool in_transaction_scope; - bool in_constexpr_if; - bool in_consteval_if; - bool in_stmt_expr; + bool in_try_scope : 1; + bool in_catch_scope : 1; + bool in_omp_scope : 1; + bool in_transaction_scope : 1; + bool in_constexpr_if : 1; + bool in_consteval_if : 1; + bool in_stmt_expr : 1; + + /* True if bad_decls chain contains any decl_jump_unsafe decls + (rather than just decl_instrument_init_bypass_p). */ + bool has_bad_decls : 1; }; #define named_labels cp_function_chain->x_named_labels @@ -403,6 +436,69 @@ sort_labels (const void *a, const void *b) return DECL_UID (label1) > DECL_UID (label2) ? -1 : +1; } +static void adjust_backward_goto (named_label_entry *, tree_stmt_iterator); +static named_label_entry *lookup_label_1 (tree, bool); + +/* Helper of pop_labels, called through cp_walk_tree. Adjust + LABEL_EXPRs of named labels, if they are targets of backwards + gotos jumping across vacuous initialization for + !!flag_auto_var_init. */ + +static tree +adjust_backward_gotos (tree *tp, int *walk_subtrees, void *data) +{ + tree t = *tp; + switch (TREE_CODE (t)) + { + case LABEL_EXPR: + /* In rare cases LABEL_EXPR can appear as the only substatement + of some other statement, e.g. if body etc. In that case, we know + there can't be an older if (0) wrapper with artificial initializers + before it. Replace the LABEL_EXPR statement with a STATEMENT_LIST + and insert the LABEL_EXPR into it, later on if (0) will be added + before that. */ + if (DECL_NAME (LABEL_EXPR_LABEL (t))) + { + named_label_entry *ent + = lookup_label_1 (DECL_NAME (LABEL_EXPR_LABEL (t)), false); + if (ent->direct_goto) + { + *tp = alloc_stmt_list (); + append_to_statement_list_force (t, tp); + adjust_backward_goto (ent, tsi_last (*tp)); + } + } + *walk_subtrees = 0; + break; + case STATEMENT_LIST: + { + tree_stmt_iterator i; + *walk_subtrees = 0; + /* In the common case, LABEL_EXPRs appear inside of a STATEMENT_LIST. + In that case pass the stmt iterator to adjust_backward_goto, so + that it can insert if (0) wrapper artificial initializers before + it or reuse the existing ones. */ + for (i = tsi_start (t); !tsi_end_p (i); tsi_next (&i)) + if (TREE_CODE (tsi_stmt (i)) != LABEL_EXPR) + cp_walk_tree (tsi_stmt_ptr (i), adjust_backward_gotos, + data, (hash_set *) data); + else if (DECL_NAME (LABEL_EXPR_LABEL (tsi_stmt (i)))) + { + named_label_entry *ent + = lookup_label_1 (DECL_NAME (LABEL_EXPR_LABEL (tsi_stmt (i))), + false); + if (ent->direct_goto) + adjust_backward_goto (ent, i); + } + break; + } + default: + if (TYPE_P (t)) + *walk_subtrees = 0; + } + return NULL_TREE; +} + /* At the end of a function, all labels declared within the function go out of scope. BLOCK is the top-level block for the function. */ @@ -420,8 +516,23 @@ pop_labels (tree block) table implementation changes. */ auto_vec labels (named_labels->elements ()); hash_table::iterator end (named_labels->end ()); - for (hash_table::iterator iter - (named_labels->begin ()); iter != end; ++iter) + + if (flag_auto_var_init > AUTO_INIT_UNINITIALIZED) + { + for (decltype (end) iter (named_labels->begin ()); iter != end; ++iter) + { + named_label_entry *ent = *iter; + if (ent->direct_goto) + { + hash_set pset; + cp_walk_tree (&DECL_SAVED_TREE (current_function_decl), + adjust_backward_gotos, &pset, &pset); + break; + } + } + } + + for (decltype (end) iter (named_labels->begin ()); iter != end; ++iter) { named_label_entry *ent = *iter; @@ -551,6 +662,11 @@ poplevel_named_label_1 (named_label_entry **slot, cp_binding_level *bl) ? DECL_CHAIN (decl) : TREE_CHAIN (decl))) if (decl_jump_unsafe (decl)) + { + vec_safe_push (ent->bad_decls, decl); + ent->has_bad_decls = true; + } + else if (decl_instrument_init_bypass_p (decl)) vec_safe_push (ent->bad_decls, decl); ent->binding_level = obl; @@ -1212,7 +1328,7 @@ decls_match (tree newdecl, tree olddecl, bool record_versions /* = true */) if (types_match && !DECL_EXTERN_C_P (newdecl) && !DECL_EXTERN_C_P (olddecl) - && targetm.target_option.function_versions (newdecl, olddecl)) + && disjoint_version_decls (newdecl, olddecl)) { if (record_versions) maybe_version_functions (newdecl, olddecl); @@ -1268,11 +1384,18 @@ decls_match (tree newdecl, tree olddecl, bool record_versions /* = true */) /* Mark DECL as versioned if it isn't already. */ -static void +void maybe_mark_function_versioned (tree decl) { if (!DECL_FUNCTION_VERSIONED (decl)) { + /* We need to insert function version now to make sure the correct + pre-mangled assembler name is recorded. */ + cgraph_node *node = cgraph_node::get_create (decl); + + if (!node->function_version ()) + node->insert_new_function_version (); + DECL_FUNCTION_VERSIONED (decl) = 1; /* If DECL_ASSEMBLER_NAME has already been set, re-mangle to include the version marker. */ @@ -1288,7 +1411,7 @@ maybe_mark_function_versioned (tree decl) bool maybe_version_functions (tree newdecl, tree olddecl) { - if (!targetm.target_option.function_versions (newdecl, olddecl)) + if (!disjoint_version_decls (newdecl, olddecl)) return false; maybe_mark_function_versioned (olddecl); @@ -2100,6 +2223,10 @@ duplicate_decls (tree newdecl, tree olddecl, bool hiding, bool was_hidden) /* Leave it to update_binding to merge or report error. */ return NULL_TREE; } + /* Check if the two decls are non-mergeable versioned decls. */ + else if (!TARGET_HAS_FMV_TARGET_ATTRIBUTE + && diagnose_versioned_decls (olddecl, newdecl)) + return error_mark_node; else { const char *errmsg = redeclaration_error_message (newdecl, olddecl); @@ -2930,6 +3057,19 @@ duplicate_decls (tree newdecl, tree olddecl, bool hiding, bool was_hidden) { DECL_ATTRIBUTES (newarg) = (*targetm.merge_decl_attributes) (oldarg, newarg); + if (lookup_attribute (NULL, "indeterminate", + DECL_ATTRIBUTES (newarg)) + && !lookup_attribute (NULL, "indeterminate", + DECL_ATTRIBUTES (oldarg))) + { + auto_diagnostic_group d; + error_at (DECL_SOURCE_LOCATION (newarg), + "% attribute not specified " + "for parameter %qD on the first declaration of " + "its function", newarg); + inform (DECL_SOURCE_LOCATION (oldarg), + "earlier declaration"); + } DECL_ATTRIBUTES (oldarg) = DECL_ATTRIBUTES (newarg); } @@ -3733,6 +3873,259 @@ decl_jump_unsafe (tree decl) || variably_modified_type_p (type, NULL_TREE))); } +/* Returns true if decl is an automatic variable with vacuous initialization + except when it is [[indeterminate]] or [[gnu::uninitialized]]. + Jumps across such initialization need to be instrumented for + !!flag_auto_var_init. */ + +static bool +decl_instrument_init_bypass_p (tree decl) +{ + tree type = TREE_TYPE (decl); + + return (flag_auto_var_init > AUTO_INIT_UNINITIALIZED + && type != error_mark_node + && VAR_P (decl) + && !TREE_STATIC (decl) + && !DECL_EXTERNAL (decl) + && !(DECL_NONTRIVIALLY_INITIALIZED_P (decl) + || variably_modified_type_p (type, NULL_TREE)) + && !lookup_attribute (NULL, "indeterminate", DECL_ATTRIBUTES (decl)) + && !lookup_attribute ("uninitialized", DECL_ATTRIBUTES (decl)) + && !DECL_HAS_VALUE_EXPR_P (decl)); +} + +/* Build .DEFERRED_INIT call for DECL. */ + +static tree +build_deferred_init_call (tree decl) +{ + tree decl_size_arg = TYPE_SIZE_UNIT (TREE_TYPE (decl)); + tree init_type_arg = build_int_cst (integer_type_node, + (int) flag_auto_var_init); + location_t loc = DECL_SOURCE_LOCATION (decl); + tree decl_name; + + if (DECL_NAME (decl)) + decl_name = build_string_literal (DECL_NAME (decl)); + else + { + char decl_name_anonymous[3 + (HOST_BITS_PER_INT + 2) / 3]; + sprintf (decl_name_anonymous, "D.%u", DECL_UID (decl)); + decl_name = build_string_literal (decl_name_anonymous); + } + + tree call = build_call_expr_internal_loc (loc, IFN_DEFERRED_INIT, + TREE_TYPE (decl), 3, + decl_size_arg, init_type_arg, + decl_name); + tree ret = build2_loc (loc, MODIFY_EXPR, void_type_node, decl, call); + return build_stmt (loc, EXPR_STMT, ret); +} + +/* Emit before ITER (and any labels/case labels before it) code like + if (0) + { + l1: + v4 = .DEFERRED_INIT (sizeof (v4), ?, "v4"); + v3 = .DEFERRED_INIT (sizeof (v3), ?, "v3"); + v2 = .DEFERRED_INIT (sizeof (v2), ?, "v2"); + v1 = .DEFERRED_INIT (sizeof (v1), ?, "v1"); + } + and return l1 label, or if it already exists, assert it has the + .DEFERRED_INIT calls for the right decls in the right order and + amend it, either by adding extra labels in between or further + ,DEFERRED_INIT calls before the first label and extra label before + that. If CASE_LABEL is non-NULL, emit that CASE_LABEL_EXPR instead + of adding a label. DECLS points to an array of NDECLS VAR_DECLs + which should be initialized. */ + +static tree +maybe_add_deferred_init_calls (tree_stmt_iterator iter, tree case_label, + tree *decls, unsigned ndecls) +{ + tree lab = NULL_TREE; + for (; !tsi_end_p (iter); tsi_prev (&iter)) + { + switch (TREE_CODE (tsi_stmt (iter))) + { + case LABEL_EXPR: + case CASE_LABEL_EXPR: + case DEBUG_BEGIN_STMT: + continue; + default: + break; + } + break; + } + if (!tsi_end_p (iter) + && TREE_CODE (tsi_stmt (iter)) == IF_STMT + && IF_STMT_VACUOUS_INIT_P (tsi_stmt (iter))) + { + /* Found IF_STMT added for this or some adjacent + LABEL_EXPR/CASE_LABEL_EXPR by an earlier call to this function. + The decls are ordered so that we can always reuse it. Sometimes + by no modifications at all and just returning the right label + which was added already before, sometimes by adding a label in + between two previously added .DEFERRED_INIT calls and sometimes + by adding extra statements (.DEFERRED_INIT calls and LABEL_EXPR + before that) before the statements in IF_STMT body. */ + tree then_clause = THEN_CLAUSE (tsi_stmt (iter)); + iter = tsi_last (then_clause); + bool add = false; + for (unsigned int i = 0; i < ndecls; ++i) + { + tree decl = decls[i]; + if (!add) + { + /* Skip over labels/case labels after .DEFERRED_INIT for the + DECL we are looking for. */ + while (!tsi_end_p (iter) + && (TREE_CODE (tsi_stmt (iter)) == LABEL_EXPR + || (TREE_CODE (tsi_stmt (iter)) == CASE_LABEL_EXPR + && !case_label))) + tsi_prev (&iter); + if (tsi_end_p (iter)) + { + /* Reached the start, we'll need to prepend further + statements. */ + add = true; + iter = tsi_start (then_clause); + } + else + { + /* Found something, assert it is .DEFERRED_INIT for + DECL. */ + tree t = tsi_stmt (iter); + gcc_checking_assert (TREE_CODE (t) == EXPR_STMT); + t = EXPR_STMT_EXPR (t); + gcc_checking_assert (TREE_CODE (t) == MODIFY_EXPR + && TREE_OPERAND (t, 0) == decl + && (TREE_CODE (TREE_OPERAND (t, 1)) + == CALL_EXPR)); + t = TREE_OPERAND (t, 1); + gcc_checking_assert (CALL_EXPR_FN (t) == NULL_TREE + && (CALL_EXPR_IFN (t) + == IFN_DEFERRED_INIT)); + tsi_prev (&iter); + } + } + if (add) + { + /* If reached the start in this or some earlier iteration, + prepend .DEFERRED_INIT call for DECL. */ + tree t = build_deferred_init_call (decl); + STMT_IS_FULL_EXPR_P (t) = 1; + tsi_link_before (&iter, t, TSI_CONTINUE_LINKING); + } + } + if (!add) + { + /* If .DEFERRED_INIT calls for all the decls were already there, + skip over case labels and if we find a LABEL_EXPR, return + its label. */ + while (!tsi_end_p (iter) + && !case_label + && TREE_CODE (tsi_stmt (iter)) == CASE_LABEL_EXPR) + tsi_prev (&iter); + if (tsi_end_p (iter)) + { + /* Only case labels were found and we are looking for normal + label, we'll need to add it. */ + add = true; + iter = tsi_start (then_clause); + } + else if (!case_label + && TREE_CODE (tsi_stmt (iter)) == LABEL_EXPR) + /* Return existing label. */ + lab = LABEL_EXPR_LABEL (tsi_stmt (iter)); + else + { + /* We'll need to add a LABEL_EXPR or move CASE_LABEL_EXPR. */ + gcc_checking_assert (case_label + || (TREE_CODE (tsi_stmt (iter)) + == EXPR_STMT)); + add = true; + tsi_next (&iter); + gcc_checking_assert (!tsi_end_p (iter)); + } + } + if (add) + { + tree t; + if (case_label) + t = case_label; + else + { + lab = create_artificial_label (UNKNOWN_LOCATION); + t = build_stmt (UNKNOWN_LOCATION, LABEL_EXPR, lab); + } + tsi_link_before (&iter, t, TSI_CONTINUE_LINKING); + } + } + else + { + /* No IF_STMT created by this function found. Create it all + from scratch, so a LABEL_EXPR (or moved CASE_LABEL_EXPR) + followed by .DEFERRED_INIT calls inside of a new if (0). */ + tree new_then = push_stmt_list (); + if (!case_label) + { + lab = create_artificial_label (UNKNOWN_LOCATION); + add_stmt (build_stmt (UNKNOWN_LOCATION, LABEL_EXPR, lab)); + } + else + add_stmt (case_label); + for (unsigned int i = ndecls; i; --i) + add_stmt (build_deferred_init_call (decls[i - 1])); + new_then = pop_stmt_list (new_then); + tree stmt = build4 (IF_STMT, void_type_node, boolean_false_node, + new_then, void_node, NULL_TREE); + IF_STMT_VACUOUS_INIT_P (stmt) = 1; + if (tsi_end_p (iter)) + { + iter = tsi_start (iter.container); + tsi_link_before (&iter, stmt, TSI_SAME_STMT); + } + else + tsi_link_after (&iter, stmt, TSI_CONTINUE_LINKING); + } + return lab; +} + +/* Adjust backward gotos to named label ENT if they jump over vacuous + initializers if !!flag_auto_var_init. ITER is the location of + LABEL_EXPR for that named label. */ + +static void +adjust_backward_goto (named_label_entry *ent, tree_stmt_iterator iter) +{ + auto_vec decls; + unsigned int i, max_cnt = ent->direct_goto->last ().n_bad_decls; + tree decl; + FOR_EACH_VEC_SAFE_ELT (ent->bad_decls, i, decl) + if (!decl_jump_unsafe (decl)) + { + gcc_checking_assert (decl_instrument_init_bypass_p (decl)); + decls.safe_push (decl); + if (decls.length () == max_cnt) + break; + } + named_label_bck_direct_goto *dgoto; + unsigned last = 0; + tree lab = NULL_TREE; + FOR_EACH_VEC_SAFE_ELT_REVERSE (ent->direct_goto, i, dgoto) + { + if (dgoto->n_bad_decls != last) + { + last = dgoto->n_bad_decls; + lab = maybe_add_deferred_init_calls (iter, NULL_TREE, + decls.address (), last); + } + *dgoto->direct_goto = lab; + } +} + /* A subroutine of check_previous_goto_1 and check_goto to identify a branch to the user. */ @@ -3760,13 +4153,19 @@ identify_goto (tree decl, location_t loc, const location_t *locus, is OK. DECL is the LABEL_DECL or 0; LEVEL is the binding_level for the jump context; NAMES are the names in scope in LEVEL at the jump context; LOCUS is the source position of the jump or 0. COMPUTED - is a vec of decls if the jump is a computed goto. Returns - true if all is well. */ + is a vec of decls if the jump is a computed goto. DIRECT_GOTO is a + vec of pointers to LABEL_DECLs that might need adjusting if vacuous + initializations are crossed for !!flag_auto_var_init. CASE_LABEL is + CASE_LABEL_EXPR to be moved if needed for the check_switch_goto case. + Returns non-zero if all is well, 2 if any vacuous initializers were + crossed. */ -static bool -check_previous_goto_1 (tree decl, cp_binding_level* level, tree names, +static int +check_previous_goto_1 (tree decl, cp_binding_level *level, tree names, bool exited_omp, const location_t *locus, - vec *computed) + vec *computed, + vec *direct_goto, + tree case_label) { auto_diagnostic_group d; cp_binding_level *b; @@ -3774,6 +4173,8 @@ check_previous_goto_1 (tree decl, cp_binding_level* level, tree names, int identified = 0; bool saw_eh = false, saw_omp = false, saw_tm = false, saw_cxif = false; bool saw_ceif = false, saw_se = false; + auto_vec vacuous_decls; + bool vacuous_inits = false; if (exited_omp) { @@ -3796,7 +4197,15 @@ check_previous_goto_1 (tree decl, cp_binding_level* level, tree names, { bool problem = decl_jump_unsafe (new_decls); if (! problem) - continue; + { + if (decl_instrument_init_bypass_p (new_decls)) + { + if (direct_goto || case_label) + vacuous_decls.safe_push (new_decls); + vacuous_inits = true; + } + continue; + } if (!identified) { @@ -3895,7 +4304,30 @@ check_previous_goto_1 (tree decl, cp_binding_level* level, tree names, } } - return !identified; + if (!vacuous_decls.is_empty () && !seen_error ()) + { + tree_stmt_iterator iter = tsi_last (cur_stmt_list); + if (case_label) + { + gcc_checking_assert (tsi_stmt (iter) == case_label); + tsi_delink (&iter); + iter = tsi_last (cur_stmt_list); + } + tree lab = maybe_add_deferred_init_calls (iter, case_label, + vacuous_decls.address (), + vacuous_decls.length ()); + if (lab) + { + unsigned int i; + named_label_fwd_direct_goto *dgoto; + FOR_EACH_VEC_SAFE_ELT (direct_goto, i, dgoto) + *dgoto->direct_goto = lab; + } + } + + if (identified) + return 0; + return vacuous_inits ? 2 : 1; } static void @@ -3903,24 +4335,27 @@ check_previous_goto (tree decl, struct named_label_use_entry *use) { check_previous_goto_1 (decl, use->binding_level, use->names_in_scope, use->in_omp_scope, - &use->o_goto_locus, use->computed_goto); + &use->o_goto_locus, use->computed_goto, + use->direct_goto, NULL_TREE); + vec_free (use->direct_goto); } -static bool -check_switch_goto (cp_binding_level* level) +static int +check_switch_goto (cp_binding_level *level, tree case_label) { return check_previous_goto_1 (NULL_TREE, level, level->names, - false, NULL, nullptr); + false, NULL, nullptr, nullptr, case_label); } -/* Check that a new jump to a label ENT is OK. COMPUTED is true - if this is a possible target of a computed goto. */ +/* Check that a new jump to a label ENT is OK. DECLP is a pointer + to a LABEL_DECL for direct gotos and NULL for computed gotos. */ void -check_goto_1 (named_label_entry *ent, bool computed) +check_goto_1 (named_label_entry *ent, tree *declp) { auto_diagnostic_group d; tree decl = ent->label_decl; + bool computed = declp == NULL; /* If the label hasn't been defined yet, defer checking. */ if (! DECL_INITIAL (decl)) @@ -3928,8 +4363,14 @@ check_goto_1 (named_label_entry *ent, bool computed) /* Don't bother creating another use if the last goto had the same data, and will therefore create the same set of errors. */ if (ent->uses + && ent->uses->binding_level == current_binding_level && ent->uses->names_in_scope == current_binding_level->names) - return; + { + if (declp && flag_auto_var_init > AUTO_INIT_UNINITIALIZED) + vec_safe_push (ent->uses->direct_goto, + named_label_fwd_direct_goto { declp }); + return; + } named_label_use_entry *new_use = ggc_alloc (); @@ -3938,6 +4379,10 @@ check_goto_1 (named_label_entry *ent, bool computed) new_use->o_goto_locus = input_location; new_use->in_omp_scope = false; new_use->computed_goto = computed ? make_tree_vector () : nullptr; + new_use->direct_goto = nullptr; + if (declp && flag_auto_var_init > AUTO_INIT_UNINITIALIZED) + vec_safe_push (new_use->direct_goto, + named_label_fwd_direct_goto { declp }); new_use->next = ent->uses; ent->uses = new_use; @@ -3948,11 +4393,12 @@ check_goto_1 (named_label_entry *ent, bool computed) int identified = 0; tree bad; unsigned ix; + unsigned n_bad_decls = 0; if (ent->in_try_scope || ent->in_catch_scope || ent->in_transaction_scope || ent->in_constexpr_if || ent->in_consteval_if || ent->in_omp_scope || ent->in_stmt_expr - || !vec_safe_is_empty (ent->bad_decls)) + || ent->has_bad_decls) { enum diagnostics::kind diag_kind = diagnostics::kind::permerror; if (ent->in_try_scope || ent->in_catch_scope || ent->in_constexpr_if @@ -3967,8 +4413,14 @@ check_goto_1 (named_label_entry *ent, bool computed) FOR_EACH_VEC_SAFE_ELT (ent->bad_decls, ix, bad) { bool problem = decl_jump_unsafe (bad); + if (!problem) + { + gcc_checking_assert (decl_instrument_init_bypass_p (bad)); + n_bad_decls++; + continue; + } - if (problem && DECL_ARTIFICIAL (bad)) + if (DECL_ARTIFICIAL (bad)) { /* Can't skip init of __exception_info. */ if (identified == 1) @@ -4075,16 +4527,21 @@ check_goto_1 (named_label_entry *ent, bool computed) break; } } + + if (n_bad_decls && declp) + vec_safe_push (ent->direct_goto, + named_label_bck_direct_goto { declp, n_bad_decls }); } -/* Check that a new jump to a label DECL is OK. Called by +/* Check that a new jump to a label *DECLP is OK. Called by finish_goto_stmt. */ void -check_goto (tree decl) +check_goto (tree *declp) { if (!named_labels) return; + tree decl = *declp; if (TREE_CODE (decl) != LABEL_DECL) { /* We don't know where a computed goto is jumping, @@ -4095,7 +4552,7 @@ check_goto (tree decl) { auto ent = *iter; if (ent->addressed) - check_goto_1 (ent, true); + check_goto_1 (ent, NULL); } } else @@ -4104,7 +4561,7 @@ check_goto (tree decl) named_label_entry **slot = named_labels->find_slot_with_hash (DECL_NAME (decl), hash, NO_INSERT); named_label_entry *ent = *slot; - check_goto_1 (ent, false); + check_goto_1 (ent, declp); } } @@ -4359,7 +4816,8 @@ finish_case_label (location_t loc, tree low_value, tree high_value) if (cond && TREE_CODE (cond) == TREE_LIST) cond = TREE_VALUE (cond); - if (!check_switch_goto (switch_stack->level)) + int chk_switch_goto = check_switch_goto (switch_stack->level, NULL_TREE); + if (!chk_switch_goto) return error_mark_node; type = SWITCH_STMT_TYPE (switch_stack->switch_stmt); @@ -4371,6 +4829,9 @@ finish_case_label (location_t loc, tree low_value, tree high_value) r = c_add_case_label (loc, switch_stack->cases, cond, low_value, high_value); + if (r != error_mark_node && chk_switch_goto == 2) + check_switch_goto (switch_stack->level, r); + /* After labels, make any new cleanups in the function go into their own new (temporary) binding contour. */ for (p = current_binding_level; @@ -19316,16 +19777,19 @@ start_preparsed_function (tree decl1, tree attrs, int flags) start_function_contracts (decl1); if (!processing_template_decl - && (flag_lifetime_dse > 1) + && flag_lifetime_dse > 1 && DECL_CONSTRUCTOR_P (decl1) - && !DECL_CLONED_FUNCTION_P (decl1) /* Clobbering an empty base is harmful if it overlays real data. */ && !is_empty_class (current_class_type) /* We can't clobber safely for an implicitly-defined default constructor because part of the initialization might happen before we enter the constructor, via AGGR_INIT_ZERO_FIRST (c++/68006). */ - && !implicit_default_ctor_p (decl1)) - finish_expr_stmt (build_clobber_this (CLOBBER_OBJECT_BEGIN)); + && !implicit_default_ctor_p (decl1) + && !lookup_attribute ("clobber *this", + DECL_ATTRIBUTES (current_class_ptr))) + DECL_ATTRIBUTES (current_class_ptr) + = tree_cons (get_identifier ("clobber *this"), NULL_TREE, + DECL_ATTRIBUTES (current_class_ptr)); if (!processing_template_decl && DECL_CONSTRUCTOR_P (decl1) diff --git a/gcc/cp/decl2.cc b/gcc/cp/decl2.cc index c9cca7b0270b..dfaef30dbfc0 100644 --- a/gcc/cp/decl2.cc +++ b/gcc/cp/decl2.cc @@ -877,7 +877,7 @@ check_classfn (tree ctype, tree function, tree template_parms) if (same_type_p (TREE_TYPE (TREE_TYPE (function)), TREE_TYPE (TREE_TYPE (fndecl))) && compparms (p1, p2) - && !targetm.target_option.function_versions (function, fndecl) + && !disjoint_version_decls (function, fndecl) && (!is_template || comp_template_parms (template_parms, DECL_TEMPLATE_PARMS (fndecl))) @@ -2018,10 +2018,21 @@ cplus_decl_attributes (tree *decl, tree attributes, int flags) { // tls_model attribute can set a stronger TLS access model. tls_model model = DECL_TLS_MODEL (*decl); - tls_model default_model = decl_default_tls_model (*decl); - if (default_model > model) - set_decl_tls_model (*decl, default_model); + // Don't upgrade TLS model if TLS model isn't set yet. + if (model != TLS_MODEL_NONE) + { + tls_model default_model = decl_default_tls_model (*decl); + if (default_model > model) + set_decl_tls_model (*decl, default_model); + } } + + /* For target_version semantics, mark any annotated function as versioned + so that it gets mangled even when on its own in a TU. */ + if (!TARGET_HAS_FMV_TARGET_ATTRIBUTE + && TREE_CODE (*decl) == FUNCTION_DECL + && get_target_version (*decl).is_valid ()) + maybe_mark_function_versioned (*decl); } /* Walks through the namespace- or function-scope anonymous union diff --git a/gcc/cp/error.cc b/gcc/cp/error.cc index 8ef9f9ee458a..ae899ec9f770 100644 --- a/gcc/cp/error.cc +++ b/gcc/cp/error.cc @@ -17,6 +17,7 @@ You should have received a copy of the GNU General Public License along with GCC; see the file COPYING3. If not see . */ +#define INCLUDE_VECTOR #include "config.h" /* For use with name_hint. */ #include "system.h" @@ -2008,6 +2009,14 @@ dump_function_decl (cxx_pretty_printer *pp, tree t, int flags) dump_function_name (pp, t, dump_function_name_flags); + /* By default we need no padding here, but if we emit target_version or + target_clones then we need some. */ + pp->set_padding (pp_none); + pp_cxx_function_target_version (pp, t); + pp_cxx_maybe_whitespace (pp); + pp_cxx_function_target_clones (pp, t); + pp_cxx_maybe_whitespace (pp); + if (!(flags & TFF_NO_FUNCTION_ARGUMENTS)) { int const parm_flags diff --git a/gcc/cp/expr.cc b/gcc/cp/expr.cc index 32dc3eee78f9..f2e99397acac 100644 --- a/gcc/cp/expr.cc +++ b/gcc/cp/expr.cc @@ -430,3 +430,19 @@ fold_for_warn (tree x) return c_fully_fold (x, /*for_init*/false, /*maybe_constp*/NULL); } + +/* Make EXPR only execute during constant evaluation by wrapping it in a + statement-expression containing 'if consteval'. */ + +tree +wrap_with_if_consteval (tree expr) +{ + tree stmtex = begin_stmt_expr (); + tree ifcev = begin_if_stmt (); + IF_STMT_CONSTEVAL_P (ifcev) = true; + finish_if_stmt_cond (boolean_false_node, ifcev); + finish_expr_stmt (expr); + finish_then_clause (ifcev); + finish_if_stmt (ifcev); + return finish_stmt_expr (stmtex, /*no scope*/true); +} diff --git a/gcc/cp/init.cc b/gcc/cp/init.cc index f19794caadcb..1b7f3e6b41c9 100644 --- a/gcc/cp/init.cc +++ b/gcc/cp/init.cc @@ -3557,15 +3557,18 @@ build_new_1 (vec **placement, tree type, tree nelts, alloc_expr = maybe_wrap_new_for_constexpr (alloc_expr, type, cookie_size); - bool std_placement = std_placement_new_fn_p (alloc_fn); + const bool std_placement = std_placement_new_fn_p (alloc_fn); - /* For std placement new, clobber the object if the constructor won't do it - in start_preparsed_function. This is most important for activating an - array in a union (c++/121068), but should also help the optimizers. */ + /* Clobber the object now that the constructor won't do it in + start_preparsed_function. This is most important for activating an array + in a union (c++/121068), but should also help the optimizers. */ const bool do_clobber - = (std_placement && !*init && flag_lifetime_dse > 1 - && (!CLASS_TYPE_P (elt_type) - || type_has_non_user_provided_default_constructor (elt_type))); + = (flag_lifetime_dse > 1 + && !processing_template_decl + && !is_empty_type (elt_type) + && !integer_zerop (TYPE_SIZE (type)) + && (!outer_nelts || !integer_zerop (cst_outer_nelts)) + && (!*init || CLASS_TYPE_P (elt_type))); /* In the simple case, we can stop now. */ pointer_type = build_pointer_type (type); @@ -3661,22 +3664,49 @@ build_new_1 (vec **placement, tree type, tree nelts, tree clobber_expr = NULL_TREE; if (do_clobber) { - tree clobber = build_clobber (elt_type, CLOBBER_OBJECT_BEGIN); - CONSTRUCTOR_IS_DIRECT_INIT (clobber) = true; - if (array_p) + if (array_p && TREE_CODE (cst_outer_nelts) != INTEGER_CST) { /* Clobber each element rather than the array at once. */ - tree maxindex = cp_build_binary_op (input_location, - MINUS_EXPR, outer_nelts, - integer_one_node, - complain); - clobber_expr = build_vec_init (data_addr, maxindex, clobber, - /*valinit*/false, /*from_arr*/0, - complain, nullptr); + /* But for now, limit a clobber loop to placement new during + constant-evaluation, as cddce1 thinks it might be infinite, leading + to bogus warnings on Wstringop-overflow-4.C (2025-09-30). We + need it in constexpr for constexpr-new4a.C. */ + if (std_placement && current_function_decl + && maybe_constexpr_fn (current_function_decl)) + { + tree clobber = build_clobber (elt_type, CLOBBER_OBJECT_BEGIN); + CONSTRUCTOR_IS_DIRECT_INIT (clobber) = true; + tree maxindex = cp_build_binary_op (input_location, + MINUS_EXPR, outer_nelts, + integer_one_node, + complain); + clobber_expr = build_vec_init (data_addr, maxindex, clobber, + /*valinit*/false, /*from_arr*/0, + complain, nullptr); + clobber_expr = wrap_with_if_consteval (clobber_expr); + } } else { - tree targ = cp_build_fold_indirect_ref (data_addr); + tree targ = data_addr; + tree ttype = type; + /* Clobber the array as a whole, except that for a one-element array + just clobber the element type, to avoid problems with code like + construct_at that uses new T[1] for array T to get a pointer to + the array. */ + if (array_p && !integer_onep (cst_outer_nelts)) + { + tree dom + = compute_array_index_type (NULL_TREE, + CONST_CAST_TREE (cst_outer_nelts), + complain); + ttype = build_cplus_array_type (type, dom); + tree ptype = build_pointer_type (ttype); + targ = fold_convert (ptype, targ); + } + targ = cp_build_fold_indirect_ref (targ); + tree clobber = build_clobber (ttype, CLOBBER_OBJECT_BEGIN); + CONSTRUCTOR_IS_DIRECT_INIT (clobber) = true; clobber_expr = cp_build_init_expr (targ, clobber); } } @@ -3930,6 +3960,11 @@ build_new_1 (vec **placement, tree type, tree nelts, complain); rval = build_conditional_expr (input_location, ifexp, rval, alloc_node, complain); + /* If there's no offset between data_addr and alloc_node, append it + to help -Wmismatched-new-delete at -O0. */ + if (!cookie_size) + rval = build2 (COMPOUND_EXPR, TREE_TYPE (alloc_node), + rval, alloc_node); } /* Perform the allocation before anything else, so that ALLOC_NODE @@ -4918,7 +4953,8 @@ build_vec_init (tree base, tree maxindex, tree init, } /* Any elements without explicit initializers get T{}. */ - empty_list = true; + if (!TREE_CLOBBER_P (init)) + empty_list = true; } else if (init && TREE_CODE (init) == STRING_CST) { @@ -5057,7 +5093,8 @@ build_vec_init (tree base, tree maxindex, tree init, } else if (TREE_CODE (type) == ARRAY_TYPE) { - if (init && !BRACE_ENCLOSED_INITIALIZER_P (init)) + if (init && !BRACE_ENCLOSED_INITIALIZER_P (init) + && !TREE_CLOBBER_P (init)) { if ((complain & tf_error)) error_at (loc, "array must be initialized " diff --git a/gcc/cp/lambda.cc b/gcc/cp/lambda.cc index 711e3b7a18e4..575daaa9d711 100644 --- a/gcc/cp/lambda.cc +++ b/gcc/cp/lambda.cc @@ -220,18 +220,23 @@ lambda_capture_field_type (tree expr, bool explicit_init_p, if (explicit_init_p) { - tree auto_node = make_auto (); - - type = auto_node; - if (by_reference_p) - /* Add the reference now, so deduction doesn't lose - outermost CV qualifiers of EXPR. */ - type = build_reference_type (type); if (uses_parameter_packs (expr)) - /* Stick with 'auto' even if the type could be deduced. */ - TEMPLATE_TYPE_PARAMETER_PACK (auto_node) = true; + { + /* Stick with 'auto...' even if the type could be deduced. */ + type = make_auto_pack (); + if (by_reference_p) + type = build_reference_type (type); + } else - type = do_auto_deduction (type, expr, auto_node); + { + tree auto_node = make_auto (); + type = auto_node; + if (by_reference_p) + /* Add the reference now, so deduction doesn't lose + outermost CV qualifiers of EXPR. */ + type = build_reference_type (type); + type = do_auto_deduction (type, expr, auto_node); + } } else if (!type_deducible_expression_p (expr)) { @@ -1742,8 +1747,8 @@ compare_lambda_sig (tree fn_a, tree fn_b) || fn_b == error_mark_node) return false; - for (tree args_a = TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (fn_a))), - args_b = TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (fn_b))); + for (tree args_a = FUNCTION_FIRST_USER_PARMTYPE (fn_a), + args_b = FUNCTION_FIRST_USER_PARMTYPE (fn_b); args_a || args_b; args_a = TREE_CHAIN (args_a), args_b = TREE_CHAIN (args_b)) { diff --git a/gcc/cp/mangle.cc b/gcc/cp/mangle.cc index 80be40d2dce3..761aae484c80 100644 --- a/gcc/cp/mangle.cc +++ b/gcc/cp/mangle.cc @@ -2176,11 +2176,24 @@ write_real_cst (const tree value) int i, limit, dir; tree type = TREE_TYPE (value); - int words = GET_MODE_BITSIZE (SCALAR_FLOAT_TYPE_MODE (type)) / 32; + int bits = GET_MODE_BITSIZE (SCALAR_FLOAT_TYPE_MODE (type)); + int words = bits / 32; real_to_target (target_real, &TREE_REAL_CST (value), TYPE_MODE (type)); + if (words == 0) + { + /* _Float16 and std::bfloat16_t are the only supported types smaller than + 32 bits. */ + gcc_assert (bits == 16); + sprintf (buffer, "%04lx", (unsigned long) target_real[0]); + write_chars (buffer, 4); + return; + } + + gcc_assert (bits % 32 == 0); + /* The value in target_real is in the target word order, so we must write it out backward if that happens to be little-endian. write_number cannot be used, it will @@ -2190,6 +2203,29 @@ write_real_cst (const tree value) else i = words - 1, limit = -1, dir = -1; + if (GET_MODE_PRECISION (SCALAR_FLOAT_TYPE_MODE (type)) == 80 + && abi_check (21)) + { + /* For -fabi-version=21 and above mangle + Intel/Motorola extended format 1.0L as + 3fff8000000000000000 + rather than the previous + 0000000000003fff8000000000000000 (x86_64) + 00003fff8000000000000000 (ia32) + 3fff00008000000000000000 (m68k -mc68020) + i.e. without any embedded padding bits. */ + if (words == 4) + i += dir; + else + gcc_assert (words == 3); + unsigned long val = (unsigned long) target_real[i]; + if (REAL_MODE_FORMAT (SCALAR_FLOAT_TYPE_MODE (type))->signbit_ro == 95) + val >>= 16; + sprintf (buffer, "%04lx", val); + write_chars (buffer, 4); + i += dir; + } + for (; i != limit; i += dir) { sprintf (buffer, "%08lx", (unsigned long) target_real[i]); diff --git a/gcc/cp/module.cc b/gcc/cp/module.cc index 5ab340afe365..103d7506da2d 100644 --- a/gcc/cp/module.cc +++ b/gcc/cp/module.cc @@ -2341,6 +2341,7 @@ class depset { EK_PARTIAL, /* A partial specialization. */ EK_USING, /* A using declaration (at namespace scope). */ EK_NAMESPACE, /* A namespace. */ + EK_TU_LOCAL, /* A TU-local decl for ADL. */ EK_REDIRECT, /* Redirect to a template_decl. */ EK_EXPLICIT_HWM, EK_BINDING = EK_EXPLICIT_HWM, /* Implicitly encoded. */ @@ -2351,6 +2352,8 @@ class depset { EK_BITS = 3 /* Only need to encode below EK_EXPLICIT_HWM. */ }; + static_assert (EK_EXPLICIT_HWM < (1u << EK_BITS), + "not enough bits reserved for entity_kind"); private: /* Placement of bit fields in discriminator. */ @@ -2375,7 +2378,10 @@ class depset { awkward. */ DB_TYPE_SPEC_BIT, /* Specialization in the type table. */ DB_FRIEND_SPEC_BIT, /* An instantiated template friend. */ + DB_HWM, }; + static_assert (DB_HWM <= sizeof(discriminator) * CHAR_BIT, + "not enough bits in discriminator"); public: /* The first slot is special for EK_SPECIALIZATIONS it is a @@ -2700,7 +2706,9 @@ depset::entity_kind_name () const /* Same order as entity_kind. */ static const char *const names[] = {"decl", "specialization", "partial", "using", - "namespace", "redirect", "binding"}; + "namespace", "tu-local", "redirect", "binding"}; + static_assert (ARRAY_SIZE (names) == EK_EXPLICIT_HWM + 1, + "names must have an entry for every explicit entity_kind"); entity_kind kind = get_entity_kind (); gcc_checking_assert (kind < ARRAY_SIZE (names)); return names[kind]; @@ -3667,8 +3675,12 @@ class GTY((chain_next ("%h.parent"), for_user)) module_state { bitmap imports; /* Transitive modules we're importing. */ bitmap exports; /* Subset of that, that we're exporting. */ + /* For a named module interface A.B, parent is A and name is B. + For a partition M:P, parent is M and name is P. + For an implementation unit I, parent is I's interface and name is NULL. + Otherwise parent is NULL and name will be the flatname. */ module_state *parent; - tree name; /* Name of the module. */ + tree name; slurping *slurp; /* Data for loading. */ @@ -3782,7 +3794,7 @@ class GTY((chain_next ("%h.parent"), for_user)) module_state { } public: - bool check_not_purview (location_t loc); + bool check_circular_import (location_t loc); public: void mangle (bool include_partition); @@ -4097,6 +4109,13 @@ static unsigned lazy_hard_limit; /* Hard limit on open modules. */ current TU; imports start at 1. */ static GTY(()) vec *modules; +/* Get the module state for the current TU's module. */ + +static module_state * +this_module() { + return (*modules)[0]; +} + /* Hash of module state, findable by {name, parent}. */ static GTY(()) hash_table *modules_hash; @@ -4247,7 +4266,7 @@ import_entity_module (unsigned index) { if (index > ~(~0u >> 1)) /* This is an index for an exported entity. */ - return (*modules)[0]; + return this_module (); /* Do not include the current TU (not an off-by-one error). */ unsigned pos = 1; @@ -7672,7 +7691,7 @@ trees_in::tree_node_bools (tree t) } -/* Write out the lang-specifc vals of node T. */ +/* Write out the lang-specific vals of node T. */ void trees_out::lang_vals (tree t) @@ -8133,7 +8152,13 @@ trees_in::install_entity (tree decl) if (!DECL_LANG_SPECIFIC (not_tmpl) || !DECL_MODULE_ENTITY_P (not_tmpl)) { - retrofit_lang_decl (not_tmpl); + /* We don't want to use retrofit_lang_decl directly so that we aren't + affected by the language state when we load in. */ + if (!DECL_LANG_SPECIFIC (not_tmpl)) + { + maybe_add_lang_decl_raw (not_tmpl, false); + SET_DECL_LANGUAGE (not_tmpl, lang_cplusplus); + } DECL_MODULE_ENTITY_P (not_tmpl) = true; /* Insert into the entity hash (it cannot already be there). */ @@ -9394,7 +9419,7 @@ trees_out::decl_node (tree decl, walk_kind ref) if (streaming_p () && dump (dumper::TREE)) { char const *kind = "import"; - module_state *from = (*modules)[0]; + module_state *from = this_module (); if (dep->is_import ()) /* Rediscover the unremapped index. */ from = import_entity_module (import_entity_index (decl)); @@ -9969,6 +9994,16 @@ trees_out::find_tu_local_decl (tree t) return cp_walk_tree_without_duplicates (&t, walker, this); } +/* Get the name for TU-local decl T to be used in diagnostics. */ + +static tree +name_for_tu_local_decl (tree t) +{ + int flags = (TFF_SCOPE | TFF_DECL_SPECIFIERS); + const char *str = decl_as_string (t, flags); + return get_identifier (str); +} + /* Stream out tree node T. We automatically create local back references, which is essentially a single pass lisp self-referential structure pretty-printer. */ @@ -10013,8 +10048,7 @@ trees_out::tree_node (tree t) && dump ("Writing TU-local entity:%d %C:%N", tag, TREE_CODE (t), t); } - /* TODO: Get a more descriptive name? */ - tree_node (DECL_NAME (local_decl)); + tree_node (name_for_tu_local_decl (local_decl)); if (state) state->write_location (*this, DECL_SOURCE_LOCATION (local_decl)); goto done; @@ -12309,7 +12343,15 @@ trees_in::is_matching_decl (tree existing, tree decl, bool is_typedef) // FIXME: do more precise errors at point of mismatch const char *mismatch_msg = nullptr; - if (TREE_CODE (d_inner) == FUNCTION_DECL) + + if (VAR_OR_FUNCTION_DECL_P (d_inner) + && DECL_EXTERN_C_P (d_inner) != DECL_EXTERN_C_P (e_inner)) + { + mismatch_msg = G_("conflicting language linkage for imported " + "declaration %#qD"); + goto mismatch; + } + else if (TREE_CODE (d_inner) == FUNCTION_DECL) { tree e_ret = fndecl_declared_return_type (existing); tree d_ret = fndecl_declared_return_type (decl); @@ -12326,13 +12368,6 @@ trees_in::is_matching_decl (tree existing, tree decl, bool is_typedef) tree e_type = TREE_TYPE (e_inner); tree d_type = TREE_TYPE (d_inner); - if (DECL_EXTERN_C_P (d_inner) != DECL_EXTERN_C_P (e_inner)) - { - mismatch_msg = G_("conflicting language linkage for imported " - "declaration %#qD"); - goto mismatch; - } - for (tree e_args = TYPE_ARG_TYPES (e_type), d_args = TYPE_ARG_TYPES (d_type); e_args != d_args && (e_args || d_args); @@ -14176,6 +14211,8 @@ depset::hash::make_dependency (tree decl, entity_kind ek) gcc_checking_assert (!is_key_order ()); if (ek == EK_USING) gcc_checking_assert (TREE_CODE (decl) == OVERLOAD); + if (ek == EK_TU_LOCAL) + gcc_checking_assert (DECL_DECLARES_FUNCTION_P (decl)); if (TREE_CODE (decl) == TEMPLATE_DECL) /* The template should have copied these from its result decl. */ @@ -14376,7 +14413,8 @@ depset::hash::make_dependency (tree decl, entity_kind ek) dump (dumper::DEPEND) && dump ("%s on %s %C:%N found", ek == EK_REDIRECT ? "Redirect" - : for_binding ? "Binding" : "Dependency", + : (for_binding || ek == EK_TU_LOCAL) ? "Binding" + : "Dependency", dep->entity_kind_name (), TREE_CODE (decl), decl); return dep; @@ -14547,9 +14585,21 @@ depset::hash::add_binding_entity (tree decl, WMB_Flags flags, void *data_) than trying to clear out bindings after the fact. */ return false; + bool internal_decl = false; if (!header_module_p () && data->hash->is_tu_local_entity (decl)) - /* Ignore TU-local entitites. */ - return false; + { + /* A TU-local entity. For ADL we still need to create bindings + for internal-linkage functions attached to a named module. */ + if (DECL_DECLARES_FUNCTION_P (inner) + && DECL_LANG_SPECIFIC (inner) + && DECL_MODULE_ATTACH_P (inner)) + { + gcc_checking_assert (!DECL_MODULE_EXPORT_P (inner)); + internal_decl = true; + } + else + return false; + } if ((TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == TYPE_DECL) @@ -14644,8 +14694,13 @@ depset::hash::add_binding_entity (tree decl, WMB_Flags flags, void *data_) OVL_EXPORT_P (decl) = true; } - depset *dep = data->hash->make_dependency - (decl, flags & WMB_Using ? EK_USING : EK_FOR_BINDING); + entity_kind ek = EK_FOR_BINDING; + if (internal_decl) + ek = EK_TU_LOCAL; + else if (flags & WMB_Using) + ek = EK_USING; + + depset *dep = data->hash->make_dependency (decl, ek); if (flags & WMB_Hidden) dep->set_hidden_binding (); data->binding->deps.safe_push (dep); @@ -15096,9 +15151,12 @@ depset::hash::find_dependencies (module_state *module) walker.begin (); if (current->get_entity_kind () == EK_USING) walker.tree_node (OVL_FUNCTION (decl)); + else if (current->get_entity_kind () == EK_TU_LOCAL) + /* We only stream its name and location. */ + module->note_location (DECL_SOURCE_LOCATION (decl)); else if (TREE_VISITED (decl)) /* A global tree. */; - else if (item->get_entity_kind () == EK_NAMESPACE) + else if (current->get_entity_kind () == EK_NAMESPACE) { module->note_location (DECL_SOURCE_LOCATION (decl)); add_namespace_context (current, CP_DECL_CONTEXT (decl)); @@ -15213,6 +15271,12 @@ binding_cmp (const void *a_, const void *b_) return a_implicit ? -1 : +1; /* Implicit first. */ } + /* TU-local before non-TU-local. */ + bool a_internal = a->get_entity_kind () == depset::EK_TU_LOCAL; + bool b_internal = b->get_entity_kind () == depset::EK_TU_LOCAL; + if (a_internal != b_internal) + return a_internal ? -1 : +1; /* Internal first. */ + /* Hidden before non-hidden. */ bool a_hidden = a->is_hidden (); bool b_hidden = b->is_hidden (); @@ -15547,12 +15611,15 @@ sort_cluster (depset::hash *original, depset *scc[], unsigned size) use_lwm--; break; } - /* We must have copied a using, so move it too. */ + /* We must have copied a using or TU-local, so move it too. */ dep = scc[ix]; - gcc_checking_assert (dep->get_entity_kind () == depset::EK_USING); + gcc_checking_assert + (dep->get_entity_kind () == depset::EK_USING + || dep->get_entity_kind () == depset::EK_TU_LOCAL); /* FALLTHROUGH */ case depset::EK_USING: + case depset::EK_TU_LOCAL: if (--use_lwm != ix) { scc[ix] = scc[use_lwm]; @@ -15890,7 +15957,7 @@ get_module (tree name, module_state *parent, bool partition) if (partition) { if (!parent) - parent = get_primary ((*modules)[0]); + parent = get_primary (this_module ()); if (!parent->is_partition () && !parent->flatname) parent->set_flatname (); @@ -15989,20 +16056,19 @@ recursive_lazy (unsigned snum = ~0u) return false; } -/* If THIS is the current purview, issue an import error and return false. */ +/* If THIS has an interface dependency on itself, report an error and + return false. */ bool -module_state::check_not_purview (location_t from) +module_state::check_circular_import (location_t from) { - module_state *imp = (*modules)[0]; - if (imp && !imp->name) - imp = imp->parent; - if (imp == this) + if (this == this_module ()) { /* Cannot import the current module. */ auto_diagnostic_group d; - error_at (from, "cannot import module in its own purview"); - inform (loc, "module %qs declared here", get_flatname ()); + error_at (from, "module %qs depends on itself", get_flatname ()); + if (!header_module_p ()) + inform (loc, "module %qs declared here", get_flatname ()); return false; } return true; @@ -16295,7 +16361,7 @@ module_state::read_imports (bytes_in &sec, cpp_reader *reader, line_maps *lmaps) module as this TU. */ if (imp && imp->is_partition () && (!named_module_p () - || (get_primary ((*modules)[0]) != get_primary (imp)))) + || (get_primary (this_module ()) != get_primary (imp)))) imp = NULL; if (!imp) @@ -16313,7 +16379,7 @@ module_state::read_imports (bytes_in &sec, cpp_reader *reader, line_maps *lmaps) if (sec.get_overrun ()) break; - if (!imp->check_not_purview (loc)) + if (!imp->check_circular_import (floc)) continue; if (imp->loadedness == ML_NONE) @@ -16553,6 +16619,7 @@ enum ct_bind_flags cbf_export = 0x1, /* An exported decl. */ cbf_hidden = 0x2, /* A hidden (friend) decl. */ cbf_using = 0x4, /* A using decl. */ + cbf_internal = 0x8, /* A TU-local decl. */ }; /* DEP belongs to a different cluster, seed it to prevent @@ -16624,7 +16691,9 @@ module_state::write_cluster (elf_out *to, depset *scc[], unsigned size, gcc_checking_assert (dep->is_import () || TREE_VISITED (dep->get_entity ()) || (dep->get_entity_kind () - == depset::EK_USING)); + == depset::EK_USING) + || (dep->get_entity_kind () + == depset::EK_TU_LOCAL)); } } break; @@ -16637,6 +16706,7 @@ module_state::write_cluster (elf_out *to, depset *scc[], unsigned size, /* FALLTHROUGH */ case depset::EK_USING: + case depset::EK_TU_LOCAL: gcc_checking_assert (!b->is_import () && !b->is_unreached ()); dump (dumper::CLUSTER) @@ -16709,7 +16779,9 @@ module_state::write_cluster (elf_out *to, depset *scc[], unsigned size, depset *dep = b->deps[jx]; tree bound = dep->get_entity (); unsigned flags = 0; - if (dep->get_entity_kind () == depset::EK_USING) + if (dep->get_entity_kind () == depset::EK_TU_LOCAL) + flags |= cbf_internal; + else if (dep->get_entity_kind () == depset::EK_USING) { tree ovl = bound; bound = OVL_FUNCTION (bound); @@ -16735,7 +16807,13 @@ module_state::write_cluster (elf_out *to, depset *scc[], unsigned size, gcc_checking_assert (DECL_P (bound)); sec.i (flags); - sec.tree_node (bound); + if (flags & cbf_internal) + { + sec.tree_node (name_for_tu_local_decl (bound)); + write_location (sec, DECL_SOURCE_LOCATION (bound)); + } + else + sec.tree_node (bound); } /* Terminate the list. */ @@ -16744,6 +16822,7 @@ module_state::write_cluster (elf_out *to, depset *scc[], unsigned size, break; case depset::EK_USING: + case depset::EK_TU_LOCAL: dump () && dump ("Depset:%u %s %C:%N", ix, b->entity_kind_name (), TREE_CODE (decl), decl); break; @@ -16861,6 +16940,7 @@ module_state::read_cluster (unsigned snum) tree name = sec.tree_node (); tree decls = NULL_TREE; tree visible = NULL_TREE; + tree internal = NULL_TREE; tree type = NULL_TREE; bool dedup = false; bool global_p = is_header (); @@ -16876,6 +16956,23 @@ module_state::read_cluster (unsigned snum) if ((flags & cbf_hidden) && (flags & (cbf_using | cbf_export))) sec.set_overrun (); + if ((flags & cbf_internal) + && flags != cbf_internal) + sec.set_overrun (); + + if (flags & cbf_internal) + { + tree name = sec.tree_node (); + location_t loc = read_location (sec); + if (sec.get_overrun ()) + break; + + tree decl = make_node (TU_LOCAL_ENTITY); + TU_LOCAL_ENTITY_NAME (decl) = name; + TU_LOCAL_ENTITY_LOCATION (decl) = loc; + internal = tree_cons (NULL_TREE, decl, internal); + continue; + } tree decl = sec.tree_node (); if (sec.get_overrun ()) @@ -16970,7 +17067,7 @@ module_state::read_cluster (unsigned snum) } } - if (!decls) + if (!decls && !internal) sec.set_overrun (); if (sec.get_overrun ()) @@ -16979,7 +17076,7 @@ module_state::read_cluster (unsigned snum) dump () && dump ("Binding of %P", ns, name); if (!set_module_binding (ns, name, mod, global_p, is_module () || is_partition (), - decls, type, visible)) + decls, type, visible, internal)) sec.set_overrun (); } break; @@ -17327,7 +17424,7 @@ module_state::write_using_directives (elf_out *to, depset::hash &table, bool module_state::read_using_directives (unsigned num) { - if (!bitmap_bit_p ((*modules)[0]->imports, mod)) + if (!bitmap_bit_p (this_module ()->imports, mod)) { dump () && dump ("Ignoring using-directives because module %M " "is not visible in this TU", this); @@ -20550,7 +20647,7 @@ module_state::read_initial (cpp_reader *reader) /* Determine the module's number. */ gcc_checking_assert (mod == MODULE_UNKNOWN); - gcc_checking_assert (this != (*modules)[0]); + gcc_checking_assert (this != this_module ()); { /* Allocate space in the entities array now -- that array must be @@ -20901,7 +20998,7 @@ module_name (unsigned ix, bool header_ok) bitmap get_import_bitmap () { - return (*modules)[0]->imports; + return this_module ()->imports; } /* Return the visible imports and path of instantiation for an @@ -21141,7 +21238,7 @@ module_may_redeclare (tree olddecl, tree newdecl) // FIXME: Should we be checking this in more places on the scope chain? return true; - module_state *old_mod = (*modules)[0]; + module_state *old_mod = get_primary (this_module ()); module_state *new_mod = old_mod; tree old_origin = get_originating_module_decl (decl); @@ -21151,7 +21248,7 @@ module_may_redeclare (tree olddecl, tree newdecl) if (DECL_LANG_SPECIFIC (old_inner) && DECL_MODULE_IMPORT_P (old_inner)) { unsigned index = import_entity_index (old_origin); - old_mod = import_entity_module (index); + old_mod = get_primary (import_entity_module (index)); } bool newdecl_attached_p = module_attach_p (); @@ -21164,7 +21261,7 @@ module_may_redeclare (tree olddecl, tree newdecl) if (DECL_LANG_SPECIFIC (new_inner) && DECL_MODULE_IMPORT_P (new_inner)) { unsigned index = import_entity_index (new_origin); - new_mod = import_entity_module (index); + new_mod = get_primary (import_entity_module (index)); } } @@ -21175,8 +21272,7 @@ module_may_redeclare (tree olddecl, tree newdecl) /* Both are GM entities, OK. */ return true; - if (new_mod == old_mod - || (new_mod && get_primary (new_mod) == get_primary (old_mod))) + if (new_mod == old_mod) /* Both attached to same named module, OK. */ return true; } @@ -21528,6 +21624,12 @@ module_state::do_import (cpp_reader *reader, bool outermost) { gcc_assert (global_namespace == current_scope () && loadedness == ML_NONE); + /* If this TU is a partition of the module we're importing, + that module is the primary module interface. */ + if (this_module ()->is_partition () + && this == get_primary (this_module ())) + module_p = true; + loc = linemap_module_loc (line_table, loc, get_flatname ()); if (lazy_open >= lazy_limit) @@ -21781,7 +21883,7 @@ direct_import (module_state *import, cpp_reader *reader) if (!import->do_import (reader, true)) gcc_unreachable (); - (*modules)[0]->set_import (import, import->exported_p); + this_module ()->set_import (import, import->exported_p); if (import->loadedness < ML_LANGUAGE) { @@ -21800,7 +21902,17 @@ void import_module (module_state *import, location_t from_loc, bool exporting_p, tree, cpp_reader *reader) { - if (!import->check_not_purview (from_loc)) + /* A non-partition implementation unit has no name. */ + if (!this_module ()->name && this_module ()->parent == import) + { + auto_diagnostic_group d; + error_at (from_loc, "import of %qs within its own implementation unit", + import->get_flatname()); + inform (import->loc, "module declared here"); + return; + } + + if (!import->check_circular_import (from_loc)) return; if (!import->is_header () && current_lang_depth ()) @@ -21822,7 +21934,7 @@ import_module (module_state *import, location_t from_loc, bool exporting_p, from_loc = ordinary_loc_of (line_table, from_loc); linemap_module_reparent (line_table, import->loc, from_loc); } - gcc_checking_assert (!import->module_p); + gcc_checking_assert (import->is_direct () && import->has_location ()); direct_import (import, reader); @@ -21837,7 +21949,7 @@ declare_module (module_state *module, location_t from_loc, bool exporting_p, { gcc_assert (global_namespace == current_scope ()); - module_state *current = (*modules)[0]; + module_state *current = this_module (); if (module_purview_p () || module->loadedness > ML_CONFIG) { auto_diagnostic_group d; @@ -21853,7 +21965,7 @@ declare_module (module_state *module, location_t from_loc, bool exporting_p, return; } - gcc_checking_assert (module->module_p); + gcc_checking_assert (module->is_module ()); gcc_checking_assert (module->is_direct () && module->has_location ()); /* Yer a module, 'arry. */ @@ -22225,8 +22337,9 @@ name_pending_imports (cpp_reader *reader) gcc_checking_assert (module->is_direct ()); if (!module->filename && !module->visited_p) { - bool export_p = (module->module_p - && (module->is_partition () || module->exported_p)); + bool export_p = (module->is_module () + && (module->is_partition () + || module->is_exported ())); Cody::Flags flags = Cody::Flags::None; if (flag_preprocess_only @@ -22314,7 +22427,10 @@ preprocess_module (module_state *module, location_t from_loc, linemap_module_reparent (line_table, module->loc, from_loc); else { - module->loc = from_loc; + /* Don't overwrite the location if we're importing ourselves + after already having seen a module-declaration. */ + if (!(is_import && module->is_module ())) + module->loc = from_loc; if (!module->flatname) module->set_flatname (); } @@ -22357,8 +22473,8 @@ preprocess_module (module_state *module, location_t from_loc, for (unsigned ix = 0; ix != pending_imports->length (); ix++) { auto *import = (*pending_imports)[ix]; - if (!(import->module_p - && (import->is_partition () || import->exported_p)) + if (!(import->is_module () + && (import->is_partition () || import->is_exported ())) && import->loadedness == ML_NONE && (import->is_header () || !flag_preprocess_only)) { @@ -22757,7 +22873,7 @@ finish_module_processing (cpp_reader *reader) if (header_module_p ()) module_kind &= ~MK_EXPORTING; - if (!modules || !(*modules)[0]->name) + if (!modules || !this_module ()->name) { if (flag_module_only) warning (0, "%<-fmodule-only%> used for non-interface"); @@ -22776,7 +22892,7 @@ finish_module_processing (cpp_reader *reader) /* We write to a tmpname, and then atomically rename. */ char *cmi_name = NULL; char *tmp_name = NULL; - module_state *state = (*modules)[0]; + module_state *state = this_module (); unsigned n = dump.push (state); state->announce ("creating"); @@ -22860,7 +22976,7 @@ late_finish_module (cpp_reader *reader, module_processing_cookie *cookie, { timevar_start (TV_MODULE_EXPORT); - module_state *state = (*modules)[0]; + module_state *state = this_module (); unsigned n = dump.push (state); state->announce ("finishing"); diff --git a/gcc/cp/name-lookup.cc b/gcc/cp/name-lookup.cc index 43b95bffecfa..09d16db2ead8 100644 --- a/gcc/cp/name-lookup.cc +++ b/gcc/cp/name-lookup.cc @@ -353,6 +353,8 @@ append_imported_binding_slot (tree *slot, tree name, unsigned ix) tree new_vec = make_binding_vec (name, want); BINDING_VECTOR_NUM_CLUSTERS (new_vec) = have + 1; + BINDING_VECTOR_INTERNAL_DECLS (new_vec) + = BINDING_VECTOR_INTERNAL_DECLS (*slot); BINDING_VECTOR_GLOBAL_DUPS_P (new_vec) = BINDING_VECTOR_GLOBAL_DUPS_P (*slot); BINDING_VECTOR_PARTITION_DUPS_P (new_vec) @@ -1304,9 +1306,35 @@ name_lookup::adl_namespace_fns (tree scope, bitmap imports, } /* For lookups on the instantiation path we can see any - module-linkage declaration; otherwise we should only - see exported decls. */ - if (!on_inst_path) + declarations visible at any point on the path; + otherwise we should only see exported decls. */ + if (on_inst_path) + { + /* If there are any internal functions visible, naming + them outside that module is ill-formed. */ + auto_diagnostic_group d; + if (MODULE_BINDING_INTERNAL_DECLS_P (bind) + && pedwarn (input_location, OPT_Wexternal_tu_local, + "overload set for argument-dependent " + "lookup of %<%D::%D%> in module %qs " + "contains TU-local entities", + scope, name, module_name (mod, false))) + { + tree *tu_locals + = BINDING_VECTOR_INTERNAL_DECLS (val)->get (mod); + gcc_checking_assert (tu_locals && *tu_locals); + for (tree t = *tu_locals; t; t = TREE_CHAIN (t)) + { + tree decl = TREE_VALUE (t); + inform (TU_LOCAL_ENTITY_LOCATION (decl), + "ignoring %qD declared here " + "with internal linkage", + TU_LOCAL_ENTITY_NAME (decl)); + } + } + bind = STAT_DECL (bind); + } + else bind = STAT_VISIBLE (bind); } @@ -3854,7 +3882,7 @@ check_module_override (tree decl, tree mvec, bool hiding, } } - if (TREE_PUBLIC (scope) && TREE_PUBLIC (STRIP_TEMPLATE (decl)) + if (TREE_PUBLIC (scope) /* Namespaces are dealt with specially in make_namespace_finish. */ && !(TREE_CODE (decl) == NAMESPACE_DECL && !DECL_NAMESPACE_ALIAS (decl))) @@ -4425,18 +4453,21 @@ import_module_binding (tree ns, tree name, unsigned mod, unsigned snum) /* An import of MODULE is binding NS::NAME. There should be no existing binding for >= MODULE. GLOBAL_P indicates whether the bindings include global module entities. PARTITION_P is true if - it is part of the current module. VALUE and TYPE are the value - and type bindings. VISIBLE are the value bindings being exported. */ + it is part of the current module. VALUE and TYPE are the value + and type bindings. VISIBLE are the value bindings being exported. + INTERNAL is a TREE_LIST of any TU-local names visible for ADL. */ bool set_module_binding (tree ns, tree name, unsigned mod, bool global_p, - bool partition_p, tree value, tree type, tree visible) + bool partition_p, tree value, tree type, tree visible, + tree internal) { - if (!value) + if (!value && !internal) /* Bogus BMIs could give rise to nothing to bind. */ return false; - gcc_assert (TREE_CODE (value) != NAMESPACE_DECL + gcc_assert (!value + || TREE_CODE (value) != NAMESPACE_DECL || DECL_NAMESPACE_ALIAS (value)); gcc_checking_assert (mod); @@ -4448,7 +4479,7 @@ set_module_binding (tree ns, tree name, unsigned mod, bool global_p, return false; tree bind = value; - if (type || visible != bind || partition_p || global_p) + if (type || visible != bind || internal || partition_p || global_p) { bind = stat_hack (bind, type); STAT_VISIBLE (bind) = visible; @@ -4457,6 +4488,17 @@ set_module_binding (tree ns, tree name, unsigned mod, bool global_p, STAT_TYPE_VISIBLE_P (bind) = true; } + /* If this has internal declarations, track them for diagnostics. */ + if (internal) + { + if (!BINDING_VECTOR_INTERNAL_DECLS (*slot)) + BINDING_VECTOR_INTERNAL_DECLS (*slot) + = module_tree_map_t::create_ggc (); + bool existed = BINDING_VECTOR_INTERNAL_DECLS (*slot)->put (mod, internal); + gcc_checking_assert (!existed); + MODULE_BINDING_INTERNAL_DECLS_P (bind) = true; + } + /* Note if this is this-module and/or global binding. */ if (partition_p) MODULE_BINDING_PARTITION_P (bind) = true; @@ -8555,6 +8597,12 @@ pushtag (tree name, tree type, TAG_how how) } else { + /* If an import is going to provide a definition for this tag, + load it now so that we don't get confused later when processing + this tag's definition. */ + if (modules_p ()) + lazy_load_pendings (decl); + decl = do_pushdecl_with_scope (decl, b, /*hiding=*/(how == TAG_how::HIDDEN_FRIEND)); if (decl == error_mark_node) diff --git a/gcc/cp/name-lookup.h b/gcc/cp/name-lookup.h index 5b142e748999..3815b8c1c968 100644 --- a/gcc/cp/name-lookup.h +++ b/gcc/cp/name-lookup.h @@ -142,15 +142,23 @@ struct GTY(()) binding_cluster #define BINDING_VECTOR_CLUSTER(NODE,IX) \ (((tree_binding_vec *)BINDING_VECTOR_CHECK (NODE))->vec[IX]) +struct module_tree_map_traits + : simple_hashmap_traits, tree> {}; +typedef hash_map module_tree_map_t; + struct GTY(()) tree_binding_vec { struct tree_base base; tree name; + module_tree_map_t *internal_decls; binding_cluster GTY((length ("%h.base.u.dependence_info.base"))) vec[1]; }; /* The name of a module vector. */ #define BINDING_VECTOR_NAME(NODE) \ (((tree_binding_vec *)BINDING_VECTOR_CHECK (NODE))->name) +/* A collection of internal functions for ADL in this binding. */ +#define BINDING_VECTOR_INTERNAL_DECLS(NODE) \ + (((tree_binding_vec *)BINDING_VECTOR_CHECK (NODE))->internal_decls) /* tree_binding_vec does uses base.u.dependence_info.base field for length. It does not have lang_flag etc available! */ @@ -166,6 +174,11 @@ struct GTY(()) tree_binding_vec { #define BINDING_VECTOR_PARTITION_DUPS_P(NODE) \ (BINDING_VECTOR_CHECK (NODE)->base.volatile_flag) +/* True if the binding slot has internal-linkage functions that should + cause ADL to error. */ +#define MODULE_BINDING_INTERNAL_DECLS_P(NODE) \ + (OVERLOAD_CHECK (NODE)->base.private_flag) + /* These two flags indicate the provenence of the bindings on this particular vector slot. We can of course determine this from slot number, but that's a relatively expensive lookup. This avoids @@ -491,7 +504,8 @@ extern bool import_module_binding (tree ctx, tree name, unsigned mod, unsigned snum); extern bool set_module_binding (tree ctx, tree name, unsigned mod, bool global_p, bool partition_p, - tree value, tree type, tree visible); + tree value, tree type, tree visible, + tree internal); extern void add_module_namespace_decl (tree ns, tree decl); enum WMB_Flags diff --git a/gcc/cp/parser.cc b/gcc/cp/parser.cc index 8d1187f8cdae..362cddbaf692 100644 --- a/gcc/cp/parser.cc +++ b/gcc/cp/parser.cc @@ -28124,6 +28124,7 @@ cp_parser_class_specifier (cp_parser* parser) bool in_switch_statement_p; bool saved_in_unbraced_linkage_specification_p; bool saved_in_unbraced_export_declaration_p; + bool saved_auto_is_implicit_function_template_parm_p; tree old_scope = NULL_TREE; tree scope = NULL_TREE; cp_token *closing_brace; @@ -28181,6 +28182,10 @@ cp_parser_class_specifier (cp_parser* parser) saved_in_unbraced_export_declaration_p = parser->in_unbraced_export_declaration_p; parser->in_unbraced_export_declaration_p = false; + saved_auto_is_implicit_function_template_parm_p + = parser->auto_is_implicit_function_template_parm_p; + parser->auto_is_implicit_function_template_parm_p = false; + /* 'this' from an enclosing non-static member function is unavailable. */ tree saved_ccp = current_class_ptr; tree saved_ccr = current_class_ref; @@ -28571,6 +28576,8 @@ cp_parser_class_specifier (cp_parser* parser) = saved_in_unbraced_linkage_specification_p; parser->in_unbraced_export_declaration_p = saved_in_unbraced_export_declaration_p; + parser->auto_is_implicit_function_template_parm_p + = saved_auto_is_implicit_function_template_parm_p; current_class_ptr = saved_ccp; current_class_ref = saved_ccr; @@ -31179,10 +31186,10 @@ cp_parser_asm_label_list (cp_parser* parser) if (TREE_CODE (label) == LABEL_DECL) { TREE_USED (label) = 1; - check_goto (label); name = build_string (IDENTIFIER_LENGTH (identifier), IDENTIFIER_POINTER (identifier)); labels = tree_cons (name, label, labels); + check_goto (&TREE_VALUE (labels)); } } /* If the next token is not a `,', then the list is diff --git a/gcc/cp/pt.cc b/gcc/cp/pt.cc index 7f0d16f217e7..9b32049e71be 100644 --- a/gcc/cp/pt.cc +++ b/gcc/cp/pt.cc @@ -8927,8 +8927,12 @@ convert_template_argument (tree parm, && same_type_p (TREE_TYPE (orig_arg), t)) orig_arg = TREE_OPERAND (orig_arg, 0); - if (!type_dependent_expression_p (orig_arg) - && !uses_template_parms (t)) + if (!uses_template_parms (t) + && !type_dependent_expression_p (orig_arg) + && !(force_conv + && !(same_type_ignoring_top_level_qualifiers_p + (TREE_TYPE (orig_arg), t)) + && value_dependent_expression_p (orig_arg))) /* We used to call digest_init here. However, digest_init will report errors, which we don't want when complain is zero. More importantly, digest_init will try too @@ -11125,7 +11129,10 @@ any_template_parm_r (tree t, void *data) break; case TEMPLATE_PARM_INDEX: - WALK_SUBTREE (TREE_TYPE (t)); + /* No need to consider template parameters within the type of an NTTP: + substitution into an NTTP is done directly with the corresponding + template argument, and its type only comes into play earlier during + coercion. */ break; case TEMPLATE_DECL: @@ -22327,7 +22334,8 @@ tsubst_expr (tree t, tree args, tsubst_flags_t complain, tree in_decl) if (r == NULL_TREE && TREE_CODE (t) == PARM_DECL) { /* We get here for a use of 'this' in an NSDMI. */ - if (DECL_NAME (t) == this_identifier && current_class_ptr) + if (DECL_NAME (t) == this_identifier && current_class_ptr + && !LAMBDA_TYPE_P (TREE_TYPE (TREE_TYPE (current_class_ptr)))) RETURN (current_class_ptr); /* Parameters of non-templates map to themselves (e.g. in @@ -26301,8 +26309,8 @@ unify (tree tparms, tree targs, tree parm, tree arg, int strict, case TYPEOF_TYPE: case DECLTYPE_TYPE: case TRAIT_TYPE: - /* Cannot deduce anything from TYPEOF_TYPE, DECLTYPE_TYPE, - or TRAIT_TYPE nodes. */ + case PACK_INDEX_TYPE: + /* These are non-deduced contexts. */ return unify_success (explain_p); case ERROR_MARK: @@ -30490,6 +30498,18 @@ make_constrained_decltype_auto (tree con, tree args) return make_constrained_placeholder_type (type, con, args); } +/* Create an "auto..." type-specifier. */ + +tree +make_auto_pack () +{ + tree type = make_auto_1 (auto_identifier, false); + TEMPLATE_TYPE_PARAMETER_PACK (type) = true; + /* Our canonical type depends on being a pack. */ + TYPE_CANONICAL (type) = canonical_type_parameter (type); + return type; +} + /* Returns true if the placeholder type constraint T has any dependent (explicit) template arguments. */ diff --git a/gcc/cp/semantics.cc b/gcc/cp/semantics.cc index 1937ace70b36..8d0210ef3b63 100644 --- a/gcc/cp/semantics.cc +++ b/gcc/cp/semantics.cc @@ -919,10 +919,12 @@ finish_goto_stmt (tree destination) } } - check_goto (destination); - add_stmt (build_predict_expr (PRED_GOTO, NOT_TAKEN)); - return add_stmt (build_stmt (input_location, GOTO_EXPR, destination)); + + tree stmt = build_stmt (input_location, GOTO_EXPR, destination); + check_goto (&TREE_OPERAND (stmt, 0)); + + return add_stmt (stmt); } /* Returns true if T corresponds to an assignment operator expression. */ diff --git a/gcc/cp/tree.cc b/gcc/cp/tree.cc index e354da0f0185..c6ce7e988cee 100644 --- a/gcc/cp/tree.cc +++ b/gcc/cp/tree.cc @@ -3730,7 +3730,9 @@ build_min_non_dep_op_overload (enum tree_code op, rebuild the <=>. Note that both OVERLOAD and the provided arguments in this case already correspond to the selected operator<=>. */ - tree spaceship_non_dep = CALL_EXPR_ARG (non_dep, reversed ? 1 : 0); + tree spaceship_non_dep = (TREE_CODE (non_dep) == CALL_EXPR + ? CALL_EXPR_ARG (non_dep, reversed ? 1 : 0) + : TREE_OPERAND (non_dep, reversed ? 1 : 0)); gcc_checking_assert (TREE_CODE (spaceship_non_dep) == CALL_EXPR); tree spaceship_op0 = va_arg (p, tree); tree spaceship_op1 = va_arg (p, tree); @@ -3744,8 +3746,19 @@ build_min_non_dep_op_overload (enum tree_code op, TREE_VALUE (overload), spaceship_op0, spaceship_op1); - tree op1 = CALL_EXPR_ARG (non_dep, reversed ? 0 : 1); + tree op1 = (TREE_CODE (non_dep) == CALL_EXPR + ? CALL_EXPR_ARG (non_dep, reversed ? 0 : 1) + : TREE_OPERAND (non_dep, reversed ? 0 : 1)); gcc_checking_assert (integer_zerop (op1)); + + if (TREE_CODE (non_dep) != CALL_EXPR) + { + gcc_checking_assert (COMPARISON_CLASS_P (non_dep)); + if (reversed) + std::swap (op0, op1); + return build_min_non_dep (TREE_CODE (non_dep), non_dep, op0, op1); + } + vec_safe_push (args, op0); vec_safe_push (args, op1); overload = CALL_EXPR_FN (non_dep); @@ -5578,6 +5591,23 @@ handle_maybe_unused_attribute (tree *node, tree name, tree args, int flags, return ret; } +/* The C++26 [[indeterminate]] attribute. */ + +static tree +handle_indeterminate_attribute (tree *node, tree name, tree, int, + bool *no_add_attrs) +{ + if (TREE_CODE (*node) != PARM_DECL + && (!VAR_P (*node) || is_global_var (*node))) + { + pedwarn (input_location, OPT_Wattributes, + "%qE on declaration other than parameter or automatic variable", + name); + *no_add_attrs = true; + } + return NULL_TREE; +} + /* Table of valid C++ attributes. */ static const attribute_spec cxx_gnu_attributes[] = { @@ -5617,6 +5647,8 @@ static const attribute_spec std_attributes[] = handle_noreturn_attribute, attr_noreturn_exclusions }, { "carries_dependency", 0, 0, true, false, false, false, handle_carries_dependency_attribute, NULL }, + { "indeterminate", 0, 0, true, false, false, false, + handle_indeterminate_attribute, NULL }, { "pre", 0, -1, false, false, false, false, handle_contract_attribute, NULL }, { "post", 0, -1, false, false, false, false, diff --git a/gcc/cp/typeck.cc b/gcc/cp/typeck.cc index ccfe50d3c370..b876409d8474 100644 --- a/gcc/cp/typeck.cc +++ b/gcc/cp/typeck.cc @@ -4495,6 +4495,16 @@ cp_build_function_call_vec (tree function, vec **params, return error_mark_node; fndecl = function; + /* For target_version semantics, the function set cannot be called + if there is no default version in scope. */ + if (!TARGET_HAS_FMV_TARGET_ATTRIBUTE + && !is_function_default_version (fndecl)) + { + if (complain & tf_error) + error ("no default version in scope"); + return error_mark_node; + } + /* Convert anything with function type to a pointer-to-function. */ if (DECL_MAIN_P (function)) { diff --git a/gcc/ctfc.cc b/gcc/ctfc.cc index 51511d69baa0..221e62e8f45d 100644 --- a/gcc/ctfc.cc +++ b/gcc/ctfc.cc @@ -798,7 +798,7 @@ ctf_add_function (ctf_container_ref ctfc, uint32_t flag, const char * name, ctf_dtdef_ref ctf_add_sou (ctf_container_ref ctfc, uint32_t flag, const char * name, - uint32_t kind, size_t size, dw_die_ref die) + uint32_t kind, unsigned HOST_WIDE_INT size, dw_die_ref die) { ctf_dtdef_ref dtd; diff --git a/gcc/ctfc.h b/gcc/ctfc.h index 32c73be6a412..26f35f0ac6f9 100644 --- a/gcc/ctfc.h +++ b/gcc/ctfc.h @@ -439,7 +439,7 @@ extern ctf_dtdef_ref ctf_add_function (ctf_container_ref, uint32_t, const char *, const ctf_funcinfo_t *, dw_die_ref, bool, int); extern ctf_dtdef_ref ctf_add_sou (ctf_container_ref, uint32_t, const char *, - uint32_t, size_t, dw_die_ref); + uint32_t, unsigned HOST_WIDE_INT, dw_die_ref); extern int ctf_add_enumerator (ctf_container_ref, ctf_dtdef_ref, const char *, HOST_WIDE_INT, dw_die_ref); diff --git a/gcc/diagnostic-global-context.cc b/gcc/diagnostic-global-context.cc index 30fc1906790c..94be0fed81e3 100644 --- a/gcc/diagnostic-global-context.cc +++ b/gcc/diagnostic-global-context.cc @@ -22,6 +22,7 @@ along with GCC; see the file COPYING3. If not see /* This file implements the parts of the language independent aspect of diagnostic messages that implicitly use global_dc. */ +#define INCLUDE_VECTOR #include "config.h" #include "system.h" #include "coretypes.h" diff --git a/gcc/diagnostics/buffering.cc b/gcc/diagnostics/buffering.cc index a7747b5a8f04..420a9cfbeea3 100644 --- a/gcc/diagnostics/buffering.cc +++ b/gcc/diagnostics/buffering.cc @@ -18,10 +18,10 @@ You should have received a copy of the GNU General Public License along with GCC; see the file COPYING3. If not see . */ +#define INCLUDE_VECTOR #include "config.h" #include "system.h" #include "coretypes.h" -#include "diagnostic.h" #include "diagnostics/buffering.h" #include "diagnostics/sink.h" #include "diagnostics/dumping.h" @@ -39,6 +39,11 @@ namespace diagnostics { void context::set_diagnostic_buffer (buffer *buffer_) { + /* Early reject of no-op (to avoid recursively crashing when handling an + ICE when inside a nested diagnostics; see PR diagnostics/121876). */ + if (buffer_ == m_diagnostic_buffer) + return; + /* We don't allow changing buffering within a diagnostic group (to simplify handling of buffered diagnostics within the diagnostic_format implementations). */ diff --git a/gcc/diagnostics/buffering.h b/gcc/diagnostics/buffering.h index 9b86fee90fe8..24a57e4a5f9a 100644 --- a/gcc/diagnostics/buffering.h +++ b/gcc/diagnostics/buffering.h @@ -21,7 +21,7 @@ along with GCC; see the file COPYING3. If not see #ifndef GCC_DIAGNOSTICS_BUFFERING_H #define GCC_DIAGNOSTICS_BUFFERING_H -#include "diagnostic.h" +#include "diagnostics/counters.h" namespace diagnostics { diff --git a/gcc/diagnostics/client-data-hooks.h b/gcc/diagnostics/client-data-hooks.h index 94c51b28190a..2926e94de05f 100644 --- a/gcc/diagnostics/client-data-hooks.h +++ b/gcc/diagnostics/client-data-hooks.h @@ -36,6 +36,9 @@ class client_data_hooks public: virtual ~client_data_hooks () {} + void dump (FILE *out, int indent) const; + void DEBUG_FUNCTION dump () const { dump (stderr, 0); } + /* Get version info for this client, or NULL. */ virtual const client_version_info *get_any_version_info () const = 0; diff --git a/gcc/diagnostics/context.cc b/gcc/diagnostics/context.cc index 0f8670ba806e..dd6bbdb29cd7 100644 --- a/gcc/diagnostics/context.cc +++ b/gcc/diagnostics/context.cc @@ -361,6 +361,9 @@ context::finish () dump (m_logger->get_stream (), m_logger->get_indent ()); } + for (auto iter : m_sinks) + iter->finalize_extensions (); + /* We might be handling a fatal error. Close any active diagnostic groups, which may trigger flushing sinks. */ @@ -455,6 +458,11 @@ context::dump (FILE *outfile, int indent) const m_file_cache->dump (outfile, indent + 4); else dumping::emit_none (outfile, indent + 4); + dumping::emit_heading (outfile, indent + 2, "client data hooks"); + if (m_client_data_hooks) + m_client_data_hooks->dump (outfile, indent + 4); + else + dumping::emit_none (outfile, indent + 4); } /* Return true if sufficiently severe diagnostics have been seen that @@ -463,9 +471,8 @@ context::dump (FILE *outfile, int indent) const bool context::execution_failed_p () const { - /* Equivalent to (seen_error () || werrorcount), but on - this context, rather than global_dc. */ - return (diagnostic_count (kind::error) + return (diagnostic_count (kind::fatal) + || diagnostic_count (kind::error) || diagnostic_count (kind::sorry) || diagnostic_count (kind::werror)); } @@ -655,6 +662,18 @@ context::initialize_fixits_change_set () m_fixits_change_set = new changes::change_set (*m_file_cache); } +// class client_data_hooks + +void +client_data_hooks::dump (FILE *outfile, int indent) const +{ + dumping::emit_heading (outfile, indent, "logical location manager"); + if (auto mgr = get_logical_location_manager ()) + mgr->dump (outfile, indent + 2); + else + dumping::emit_none (outfile, indent + 2); +} + } // namespace diagnostics /* Initialize DIAGNOSTIC, where the message MSG has already been @@ -1844,6 +1863,20 @@ sink::dump (FILE *out, int indent) const { dumping::emit_heading (out, indent, "printer"); m_printer->dump (out, indent + 2); + + dumping::emit_heading (out, indent, "extensions"); + if (m_extensions.empty ()) + dumping::emit_none (out, indent + 2); + else + for (auto &ext : m_extensions) + ext->dump (out, indent + 2); +} + +void +sink::finalize_extensions () +{ + for (auto &ext : m_extensions) + ext->finalize (); } void diff --git a/gcc/diagnostics/context.h b/gcc/diagnostics/context.h index 9464f6adb6c9..7d7c87250be2 100644 --- a/gcc/diagnostics/context.h +++ b/gcc/diagnostics/context.h @@ -47,6 +47,7 @@ namespace diagnostics { class diagram; class sink; class text_sink; + class metadata; class source_effect_info; diff --git a/gcc/diagnostics/html-sink.cc b/gcc/diagnostics/html-sink.cc index 64dcefeedaad..d3fb107e6145 100644 --- a/gcc/diagnostics/html-sink.cc +++ b/gcc/diagnostics/html-sink.cc @@ -24,7 +24,6 @@ along with GCC; see the file COPYING3. If not see #define INCLUDE_VECTOR #include "system.h" #include "coretypes.h" -#include "diagnostic.h" #include "diagnostics/metadata.h" #include "diagnostics/sink.h" #include "diagnostics/html-sink.h" diff --git a/gcc/diagnostics/lazy-paths.cc b/gcc/diagnostics/lazy-paths.cc index f246eea94205..d25f8fb37814 100644 --- a/gcc/diagnostics/lazy-paths.cc +++ b/gcc/diagnostics/lazy-paths.cc @@ -23,7 +23,6 @@ along with GCC; see the file COPYING3. If not see #define INCLUDE_VECTOR #include "system.h" #include "coretypes.h" -#include "diagnostic.h" #include "diagnostics/lazy-paths.h" #include "selftest.h" #include "diagnostics/selftest-context.h" diff --git a/gcc/diagnostics/logical-locations.h b/gcc/diagnostics/logical-locations.h index b52a9b4f3b98..ba787bd3e3e1 100644 --- a/gcc/diagnostics/logical-locations.h +++ b/gcc/diagnostics/logical-locations.h @@ -148,6 +148,9 @@ class manager public: virtual ~manager () {} + virtual void dump (FILE *out, int indent) const = 0; + void DEBUG_FUNCTION dump () const { dump (stderr, 0); } + /* vfuncs for interpreting keys. */ /* Get a string (or NULL) for K suitable for use by the SARIF logicalLocation diff --git a/gcc/diagnostics/macro-unwinding.cc b/gcc/diagnostics/macro-unwinding.cc index 66bad1c32a75..4d7133963ad9 100644 --- a/gcc/diagnostics/macro-unwinding.cc +++ b/gcc/diagnostics/macro-unwinding.cc @@ -17,11 +17,11 @@ You should have received a copy of the GNU General Public License along with GCC; see the file COPYING3. If not see . */ +#define INCLUDE_VECTOR #include "config.h" #include "system.h" #include "coretypes.h" #include "tree.h" -#include "diagnostic.h" #include "diagnostics/macro-unwinding.h" #include "diagnostics/text-sink.h" #include "intl.h" diff --git a/gcc/diagnostics/macro-unwinding.h b/gcc/diagnostics/macro-unwinding.h index 1f28d584c258..1df8715e2bd9 100644 --- a/gcc/diagnostics/macro-unwinding.h +++ b/gcc/diagnostics/macro-unwinding.h @@ -22,6 +22,8 @@ along with GCC; see the file COPYING3. If not see namespace diagnostics { +struct diagnostic_info; + extern void virt_loc_aware_text_finalizer (text_sink &, const diagnostic_info *); diff --git a/gcc/diagnostics/option-classifier.h b/gcc/diagnostics/option-classifier.h index 3b16c740b7ea..9457fe8d1335 100644 --- a/gcc/diagnostics/option-classifier.h +++ b/gcc/diagnostics/option-classifier.h @@ -20,10 +20,14 @@ along with GCC; see the file COPYING3. If not see #ifndef GCC_DIAGNOSTICS_OPTION_CLASSIFIER_H #define GCC_DIAGNOSTICS_OPTION_CLASSIFIER_H +#include "diagnostics/option-id.h" +#include "diagnostics/kinds.h" + namespace diagnostics { /* Forward declarations. */ class context; +struct diagnostic_info; /* A stack of sets of classifications: each entry in the stack is a mapping from option index to diagnostic severity that can be changed diff --git a/gcc/diagnostics/output-spec.cc b/gcc/diagnostics/output-spec.cc index e25d25a9a9a4..dfde7f0bdf30 100644 --- a/gcc/diagnostics/output-spec.cc +++ b/gcc/diagnostics/output-spec.cc @@ -31,7 +31,6 @@ along with GCC; see the file COPYING3. If not see #include "coretypes.h" #include "version.h" #include "intl.h" -#include "diagnostic.h" #include "diagnostics/color.h" #include "diagnostics/sink.h" #include "diagnostics/html-sink.h" @@ -43,13 +42,24 @@ along with GCC; see the file COPYING3. If not see #include "diagnostics/output-spec.h" /* A namespace for handling the DSL of the arguments of - -fdiagnostics-add-output= and -fdiagnostics-set-output=. */ + -fdiagnostics-add-output= and -fdiagnostics-set-output= + which look like: + SCHEME[:KEY=VALUE(,KEY=VALUE)*] + We call this an output spec. */ namespace diagnostics { namespace output_spec { +class scheme_handler; + /* Decls. */ +/* A class for the result of the first stage of parsing an output spec, + where values are represented as untyped strings. + The scheme might not exist. + The keys have not been validated against the scheme. + The values have not been validated against their keys. */ + struct scheme_name_and_params { std::string m_scheme_name; @@ -63,139 +73,160 @@ struct scheme_name_and_params class output_factory { public: - class scheme_handler - { - public: - scheme_handler (std::string scheme_name) - : m_scheme_name (std::move (scheme_name)) - {} - virtual ~scheme_handler () {} - - const std::string &get_scheme_name () const { return m_scheme_name; } - - virtual std::unique_ptr - make_sink (const context &ctxt, - diagnostics::context &dc, - const char *unparsed_arg, - const scheme_name_and_params &parsed_arg) const = 0; - - protected: - bool - parse_bool_value (const context &ctxt, - const char *unparsed_arg, - const std::string &key, - const std::string &value, - bool &out) const - { - if (value == "yes") - { - out = true; - return true; - } - else if (value == "no") - { - out = false; - return true; - } - else - { - ctxt.report_error - ("%<%s%s%>:" - " unexpected value %qs for key %qs; expected %qs or %qs", - ctxt.get_option_name (), unparsed_arg, - value.c_str (), - key.c_str (), - "yes", "no"); + output_factory (diagnostics::context &dc); - return false; - } + std::unique_ptr + make_sink (const context &ctxt, + diagnostics::context &dc, + const scheme_name_and_params &scheme_and_kvs); + + scheme_handler *get_scheme_handler (const std::string &scheme_name); + +private: + std::vector> m_scheme_handlers; +}; + +enum key_handler::result +key_handler::parse_bool_value (const context &ctxt, + const std::string &key, + const std::string &value, + bool &out) const +{ + if (value == "yes") + { + out = true; + return result::ok; } - template - bool - parse_enum_value (const context &ctxt, - const char *unparsed_arg, - const std::string &key, - const std::string &value, - const std::array, NumValues> &value_names, - EnumType &out) const + else if (value == "no") + { + out = false; + return result::ok; + } + else { - for (auto &iter : value_names) - if (value == iter.first) - { - out = iter.second; - return true; - } - - auto_vec known_values; - for (auto iter : value_names) - known_values.safe_push (iter.first); - pp_markup::comma_separated_quoted_strings e (known_values); ctxt.report_error ("%<%s%s%>:" - " unexpected value %qs for key %qs; known values: %e", - ctxt.get_option_name (), unparsed_arg, + " unexpected value %qs for key %qs; expected %qs or %qs", + ctxt.get_option_name (), ctxt.get_unparsed_spec (), value.c_str (), key.c_str (), - &e); - return false; + "yes", "no"); + return result::malformed_value; } +} - private: - const std::string m_scheme_name; - }; +template +key_handler::result +key_handler::parse_enum_value (const context &ctxt, + const std::string &key, + const std::string &value, + const std::array, + NumValues> &value_names, + EnumType &out) const +{ + for (auto &iter : value_names) + if (value == iter.first) + { + out = iter.second; + return result::ok; + } + + auto_vec known_values; + for (auto iter : value_names) + known_values.safe_push (iter.first); + pp_markup::comma_separated_quoted_strings e (known_values); + ctxt.report_error + ("%<%s%s%>:" + " unexpected value %qs for key %qs; known values: %e", + ctxt.get_option_name (), ctxt.get_unparsed_spec (), + value.c_str (), + key.c_str (), + &e); + return result::malformed_value; +} - output_factory (); +class text_scheme_handler : public scheme_handler +{ +public: + text_scheme_handler (diagnostics::context &dc) + : scheme_handler ("text"), + m_show_color (pp_show_color (dc.get_reference_printer ())), + m_show_nesting (true), + m_show_locations_in_nesting (true), + m_show_levels (false) + { + } std::unique_ptr make_sink (const context &ctxt, - diagnostics::context &dc, - const char *unparsed_arg, - const scheme_name_and_params &parsed_arg); + diagnostics::context &dc) final override; + + enum result + maybe_handle_kv (const context &ctxt, + const std::string &key, + const std::string &value) final override; - const scheme_handler *get_scheme_handler (const std::string &scheme_name); + void + get_keys (auto_vec &out) const final override; private: - std::vector> m_scheme_handlers; + bool m_show_color; + bool m_show_nesting; + bool m_show_locations_in_nesting; + bool m_show_levels; }; -class text_scheme_handler : public output_factory::scheme_handler +class sarif_scheme_handler : public scheme_handler { public: - text_scheme_handler () : scheme_handler ("text") {} + sarif_scheme_handler () + : scheme_handler ("sarif"), + m_serialization_kind (sarif_serialization_kind::json) + { + } std::unique_ptr make_sink (const context &ctxt, - diagnostics::context &dc, - const char *unparsed_arg, - const scheme_name_and_params &parsed_arg) const final override; -}; + diagnostics::context &dc) final override; -class sarif_scheme_handler : public output_factory::scheme_handler -{ -public: - sarif_scheme_handler () : scheme_handler ("sarif") {} + enum result + maybe_handle_kv (const context &ctxt, + const std::string &key, + const std::string &value) final override; - std::unique_ptr - make_sink (const context &ctxt, - diagnostics::context &dc, - const char *unparsed_arg, - const scheme_name_and_params &parsed_arg) const final override; + void + get_keys (auto_vec &out) const final override; private: static std::unique_ptr make_sarif_serialization_object (enum sarif_serialization_kind); + + label_text m_filename; + enum sarif_serialization_kind m_serialization_kind; + sarif_generation_options m_generation_opts; }; -class html_scheme_handler : public output_factory::scheme_handler +class html_scheme_handler : public scheme_handler { public: html_scheme_handler () : scheme_handler ("experimental-html") {} std::unique_ptr make_sink (const context &ctxt, - diagnostics::context &dc, - const char *unparsed_arg, - const scheme_name_and_params &parsed_arg) const final override; + diagnostics::context &dc) final override; + + enum result + maybe_handle_kv (const context &ctxt, + const std::string &key, + const std::string &value) final override; + + void + get_keys (auto_vec &out) const final override; + +private: + label_text m_filename; + html_generation_options m_html_gen_opts; }; /* struct context. */ @@ -210,22 +241,43 @@ context::report_error (const char *gmsgid, ...) const } void -context::report_unknown_key (const char *unparsed_arg, - const std::string &key, - const std::string &scheme_name, - auto_vec &known_keys) const +context::report_unknown_key (const std::string &key, + const scheme_handler &scheme) const { - pp_markup::comma_separated_quoted_strings e (known_keys); + auto_vec scheme_key_vec; + scheme.get_keys (scheme_key_vec); + + pp_markup::comma_separated_quoted_strings e_scheme_keys (scheme_key_vec); + + const char *scheme_name = scheme.get_scheme_name ().c_str (); + + if (m_client_keys) + { + auto_vec client_key_vec; + m_client_keys->get_keys (client_key_vec); + if (!client_key_vec.is_empty ()) + { + pp_markup::comma_separated_quoted_strings e_client_keys + (client_key_vec); + report_error + ("%<%s%s%>:" + " unknown key %qs for output scheme %qs;" + " scheme keys: %e; client keys: %e", + get_option_name (), get_unparsed_spec (), + key.c_str (), scheme_name, + &e_scheme_keys, &e_client_keys); + } + } + report_error ("%<%s%s%>:" - " unknown key %qs for format %qs; known keys: %e", - get_option_name (), unparsed_arg, - key.c_str (), scheme_name.c_str (), &e); + " unknown key %qs for output scheme %qs; scheme keys: %e", + get_option_name (), get_unparsed_spec (), + key.c_str (), scheme_name, &e_scheme_keys); } void -context::report_missing_key (const char *unparsed_arg, - const std::string &key, +context::report_missing_key (const std::string &key, const std::string &scheme_name, const char *metavar) const { @@ -233,7 +285,7 @@ context::report_missing_key (const char *unparsed_arg, ("%<%s%s%>:" " missing required key %qs for format %qs;" " try %<%s%s:%s=%s%>", - get_option_name (), unparsed_arg, + get_option_name (), get_unparsed_spec (), key.c_str (), scheme_name.c_str (), get_option_name (), scheme_name.c_str (), key.c_str (), metavar); } @@ -251,12 +303,13 @@ context::open_output_file (label_text &&filename) const } static std::unique_ptr -parse (const context &ctxt, const char *unparsed_arg) +parse (const context &ctxt) { scheme_name_and_params result; - if (const char *const colon = strchr (unparsed_arg, ':')) + const char *const unparsed_spec = ctxt.get_unparsed_spec (); + if (const char *const colon = strchr (unparsed_spec, ':')) { - result.m_scheme_name = std::string (unparsed_arg, colon - unparsed_arg); + result.m_scheme_name = std::string (unparsed_spec, colon - unparsed_spec); /* Expect zero of more of KEY=VALUE,KEY=VALUE, etc .*/ const char *iter = colon + 1; const char *last_separator = ":"; @@ -272,7 +325,7 @@ parse (const context &ctxt, const char *unparsed_arg) " expected KEY=VALUE-style parameter for format %qs" " after %qs;" " got %qs", - ctxt.get_option_name (), unparsed_arg, + ctxt.get_option_name (), ctxt.get_unparsed_spec (), result.m_scheme_name.c_str (), last_separator, iter); @@ -296,34 +349,33 @@ parse (const context &ctxt, const char *unparsed_arg) } } else - result.m_scheme_name = unparsed_arg; + result.m_scheme_name = unparsed_spec; return std::make_unique (std::move (result)); } std::unique_ptr -context::parse_and_make_sink (const char *unparsed_arg, - diagnostics::context &dc) +context::parse_and_make_sink (diagnostics::context &dc) { - auto parsed_arg = parse (*this, unparsed_arg); + auto parsed_arg = parse (*this); if (!parsed_arg) return nullptr; - output_factory factory; - return factory.make_sink (*this, dc, unparsed_arg, *parsed_arg); + output_factory factory (dc); + return factory.make_sink (*this, dc, *parsed_arg); } -/* class output_factory::scheme_handler. */ +/* class scheme_handler. */ /* class output_factory. */ -output_factory::output_factory () +output_factory::output_factory (diagnostics::context &dc) { - m_scheme_handlers.push_back (std::make_unique ()); + m_scheme_handlers.push_back (std::make_unique (dc)); m_scheme_handlers.push_back (std::make_unique ()); m_scheme_handlers.push_back (std::make_unique ()); } -const output_factory::scheme_handler * +scheme_handler * output_factory::get_scheme_handler (const std::string &scheme_name) { for (auto &iter : m_scheme_handlers) @@ -335,10 +387,9 @@ output_factory::get_scheme_handler (const std::string &scheme_name) std::unique_ptr output_factory::make_sink (const context &ctxt, diagnostics::context &dc, - const char *unparsed_arg, - const scheme_name_and_params &parsed_arg) + const scheme_name_and_params &scheme_and_kvs) { - auto scheme_handler = get_scheme_handler (parsed_arg.m_scheme_name); + auto scheme_handler = get_scheme_handler (scheme_and_kvs.m_scheme_name); if (!scheme_handler) { auto_vec strings; @@ -347,155 +398,115 @@ output_factory::make_sink (const context &ctxt, pp_markup::comma_separated_quoted_strings e (strings); ctxt.report_error ("%<%s%s%>:" " unrecognized format %qs; known formats: %e", - ctxt.get_option_name (), unparsed_arg, - parsed_arg.m_scheme_name.c_str (), &e); + ctxt.get_option_name (), ctxt.get_unparsed_spec (), + scheme_and_kvs.m_scheme_name.c_str (), &e); return nullptr; } - return scheme_handler->make_sink (ctxt, dc, unparsed_arg, parsed_arg); -} - -/* class text_scheme_handler : public output_factory::scheme_handler. */ - -std::unique_ptr -text_scheme_handler::make_sink (const context &ctxt, - diagnostics::context &dc, - const char *unparsed_arg, - const scheme_name_and_params &parsed_arg) const -{ - bool show_color = pp_show_color (dc.get_reference_printer ()); - bool show_nesting = true; - bool show_locations_in_nesting = true; - bool show_levels = false; - for (auto& iter : parsed_arg.m_kvs) + /* Parse key/value pairs. */ + for (auto& iter : scheme_and_kvs.m_kvs) { const std::string &key = iter.first; const std::string &value = iter.second; - if (key == "color") - { - if (!parse_bool_value (ctxt, unparsed_arg, key, value, show_color)) - return nullptr; - continue; - } - if (key == "show-nesting") - { - if (!parse_bool_value (ctxt, unparsed_arg, key, value, - show_nesting)) - return nullptr; - continue; - } - if (key == "show-nesting-locations") - { - if (!parse_bool_value (ctxt, unparsed_arg, key, value, - show_locations_in_nesting)) - return nullptr; - continue; - } - if (key == "show-nesting-levels") + if (!ctxt.handle_kv (key, value, *scheme_handler)) + return nullptr; + } + + return scheme_handler->make_sink (ctxt, dc); +} + +bool +context::handle_kv (const std::string &key, + const std::string &value, + scheme_handler &scheme) const +{ + auto result = scheme.maybe_handle_kv (*this, key, value); + switch (result) + { + default: gcc_unreachable (); + case key_handler::result::ok: + return true; + case key_handler::result::malformed_value: + return false; + case key_handler::result::unrecognized: + /* Key recognized by the scheme; try the client keys. */ + if (m_client_keys) { - if (!parse_bool_value (ctxt, unparsed_arg, key, value, show_levels)) - return nullptr; - continue; + result = m_client_keys->maybe_handle_kv (*this, key, value); + switch (result) + { + default: gcc_unreachable (); + case key_handler::result::ok: + return true; + case key_handler::result::malformed_value: + return false; + case key_handler::result::unrecognized: + break; + } } - - /* Key not found. */ - auto_vec known_keys; - known_keys.safe_push ("color"); - known_keys.safe_push ("show-nesting"); - known_keys.safe_push ("show-nesting-locations"); - known_keys.safe_push ("show-nesting-levels"); - ctxt.report_unknown_key (unparsed_arg, key, get_scheme_name (), - known_keys); - return nullptr; + report_unknown_key (key, scheme); + return false; } +} + +/* class text_scheme_handler : public scheme_handler. */ +std::unique_ptr +text_scheme_handler::make_sink (const context &, + diagnostics::context &dc) +{ auto sink = std::make_unique (dc); - sink->set_show_nesting (show_nesting); - sink->set_show_locations_in_nesting (show_locations_in_nesting); - sink->set_show_nesting_levels (show_levels); + sink->set_show_nesting (m_show_nesting); + sink->set_show_locations_in_nesting (m_show_locations_in_nesting); + sink->set_show_nesting_levels (m_show_levels); + pp_show_color (sink->get_printer ()) = m_show_color; return sink; } -/* class sarif_scheme_handler : public output_factory::scheme_handler. */ +enum key_handler::result +text_scheme_handler::maybe_handle_kv (const context &ctxt, + const std::string &key, + const std::string &value) +{ + if (key == "color") + return parse_bool_value (ctxt, key, value, m_show_color); + if (key == "show-nesting") + return parse_bool_value (ctxt, key, value, m_show_nesting); + if (key == "show-nesting-locations") + return parse_bool_value (ctxt, key, value, + m_show_locations_in_nesting); + if (key == "show-nesting-levels") + return parse_bool_value (ctxt, key, value, m_show_levels); + + return result::unrecognized; +} -std::unique_ptr -sarif_scheme_handler::make_sink (const context &ctxt, - diagnostics::context &dc, - const char *unparsed_arg, - const scheme_name_and_params &parsed_arg) const -{ - label_text filename; - enum sarif_serialization_kind serialization_kind - = sarif_serialization_kind::json; - sarif_generation_options sarif_gen_opts; - for (auto& iter : parsed_arg.m_kvs) - { - const std::string &key = iter.first; - const std::string &value = iter.second; - if (key == "file") - { - filename = label_text::take (xstrdup (value.c_str ())); - continue; - } - if (key == "serialization") - { - static const std::array, - (size_t)sarif_serialization_kind::num_values> value_names - {{{"json", sarif_serialization_kind::json}}}; - - if (!parse_enum_value - (ctxt, unparsed_arg, - key, value, - value_names, - serialization_kind)) - return nullptr; - continue; - } - if (key == "version") - { - static const std::array, - (size_t)sarif_version::num_versions> value_names - {{{"2.1", sarif_version::v2_1_0}, - {"2.2-prerelease", sarif_version::v2_2_prerelease_2024_08_08}}}; - - if (!parse_enum_value - (ctxt, unparsed_arg, - key, value, - value_names, - sarif_gen_opts.m_version)) - return nullptr; - continue; - } - if (key == "state-graphs") - { - if (!parse_bool_value (ctxt, unparsed_arg, key, value, - sarif_gen_opts.m_state_graph)) - return nullptr; - continue; - } +void +text_scheme_handler::get_keys (auto_vec &out) const +{ + out.safe_push ("color"); + out.safe_push ("show-nesting"); + out.safe_push ("show-nesting-locations"); + out.safe_push ("show-nesting-levels"); +} - /* Key not found. */ - auto_vec known_keys; - known_keys.safe_push ("file"); - known_keys.safe_push ("serialization"); - known_keys.safe_push ("state-graphs"); - known_keys.safe_push ("version"); - ctxt.report_unknown_key (unparsed_arg, key, get_scheme_name (), - known_keys); - return nullptr; - } +/* class sarif_scheme_handler : public scheme_handler. */ +std::unique_ptr +sarif_scheme_handler:: +make_sink (const context &ctxt, + diagnostics::context &dc) +{ output_file output_file_; - if (filename.get ()) - output_file_ = ctxt.open_output_file (std::move (filename)); + if (m_filename.get ()) + output_file_ = ctxt.open_output_file (std::move (m_filename)); else // Default filename { const char *basename = ctxt.get_base_filename (); if (!basename) { - ctxt.report_missing_key (unparsed_arg, - "file", + ctxt.report_missing_key ("file", get_scheme_name (), "FILENAME"); return nullptr; @@ -504,21 +515,72 @@ sarif_scheme_handler::make_sink (const context &ctxt, = open_sarif_output_file (dc, ctxt.get_affected_location_mgr (), basename, - serialization_kind); + m_serialization_kind); } if (!output_file_) return nullptr; - auto serialization_obj = make_sarif_serialization_object (serialization_kind); + auto serialization_obj + = make_sarif_serialization_object (m_serialization_kind); auto sink = make_sarif_sink (dc, *ctxt.get_affected_location_mgr (), std::move (serialization_obj), - sarif_gen_opts, + m_generation_opts, std::move (output_file_)); + return sink; } +enum key_handler::result +sarif_scheme_handler::maybe_handle_kv (const context &ctxt, + const std::string &key, + const std::string &value) +{ + if (key == "file") + { + m_filename = label_text::take (xstrdup (value.c_str ())); + return result::ok; + } + if (key == "serialization") + { + static const std::array, + (size_t)sarif_serialization_kind::num_values> value_names + {{{"json", sarif_serialization_kind::json}}}; + return parse_enum_value + (ctxt, + key, value, + value_names, + m_serialization_kind); + } + if (key == "version") + { + static const std::array, + (size_t)sarif_version::num_versions> value_names + {{{"2.1", sarif_version::v2_1_0}, + {"2.2-prerelease", sarif_version::v2_2_prerelease_2024_08_08}}}; + return parse_enum_value + (ctxt, + key, value, + value_names, + m_generation_opts.m_version); + } + if (key == "state-graphs") + return parse_bool_value (ctxt, key, value, + m_generation_opts.m_state_graph); + + return result::unrecognized; +} + +void +sarif_scheme_handler::get_keys (auto_vec &out) const +{ + out.safe_push ("file"); + out.safe_push ("serialization"); + out.safe_push ("state-graphs"); + out.safe_push ("version"); +} + std::unique_ptr sarif_scheme_handler:: make_sarif_serialization_object (enum sarif_serialization_kind kind) @@ -533,85 +595,23 @@ make_sarif_serialization_object (enum sarif_serialization_kind kind) } } -/* class html_scheme_handler : public output_factory::scheme_handler. */ +/* class html_scheme_handler : public scheme_handler. */ std::unique_ptr -html_scheme_handler::make_sink (const context &ctxt, - diagnostics::context &dc, - const char *unparsed_arg, - const scheme_name_and_params &parsed_arg) const -{ - label_text filename; - html_generation_options html_gen_opts; - for (auto& iter : parsed_arg.m_kvs) - { - const std::string &key = iter.first; - const std::string &value = iter.second; - if (key == "css") - { - if (!parse_bool_value (ctxt, unparsed_arg, key, value, - html_gen_opts.m_css)) - return nullptr; - continue; - } - if (key == "file") - { - filename = label_text::take (xstrdup (value.c_str ())); - continue; - } - if (key == "javascript") - { - if (!parse_bool_value (ctxt, unparsed_arg, key, value, - html_gen_opts.m_javascript)) - return nullptr; - continue; - } - if (key == "show-state-diagrams") - { - if (!parse_bool_value (ctxt, unparsed_arg, key, value, - html_gen_opts.m_show_state_diagrams)) - return nullptr; - continue; - } - if (key == "show-state-diagrams-dot-src") - { - if (!parse_bool_value (ctxt, unparsed_arg, key, value, - html_gen_opts.m_show_state_diagrams_dot_src)) - return nullptr; - continue; - } - if (key == "show-state-diagrams-sarif") - { - if (!parse_bool_value (ctxt, unparsed_arg, key, value, - html_gen_opts.m_show_state_diagrams_sarif)) - return nullptr; - continue; - } - - /* Key not found. */ - auto_vec known_keys; - known_keys.safe_push ("css"); - known_keys.safe_push ("file"); - known_keys.safe_push ("javascript"); - known_keys.safe_push ("show-state-diagrams"); - known_keys.safe_push ("show-state-diagram-dot-src"); - known_keys.safe_push ("show-state-diagram-sarif"); - ctxt.report_unknown_key (unparsed_arg, key, get_scheme_name (), - known_keys); - return nullptr; - } - +html_scheme_handler:: +make_sink (const context &ctxt, + diagnostics::context &dc) +{ output_file output_file_; - if (filename.get ()) - output_file_ = ctxt.open_output_file (std::move (filename)); + if (m_filename.get ()) + output_file_ = ctxt.open_output_file (std::move (m_filename)); else // Default filename { const char *basename = ctxt.get_base_filename (); if (!basename) { - ctxt.report_missing_key (unparsed_arg, - "file", + ctxt.report_missing_key ("file", get_scheme_name (), "FILENAME"); return nullptr; @@ -627,11 +627,49 @@ html_scheme_handler::make_sink (const context &ctxt, auto sink = make_html_sink (dc, *ctxt.get_affected_location_mgr (), - html_gen_opts, + m_html_gen_opts, std::move (output_file_)); return sink; } +enum key_handler::result +html_scheme_handler::maybe_handle_kv (const context &ctxt, + const std::string &key, + const std::string &value) +{ + if (key == "css") + return parse_bool_value (ctxt, key, value, m_html_gen_opts.m_css); + if (key == "file") + { + m_filename = label_text::take (xstrdup (value.c_str ())); + return result::ok; + } + if (key == "javascript") + return parse_bool_value (ctxt, key, value, + m_html_gen_opts.m_javascript); + if (key == "show-state-diagrams") + return parse_bool_value (ctxt, key, value, + m_html_gen_opts.m_show_state_diagrams); + if (key == "show-state-diagrams-dot-src") + return parse_bool_value (ctxt, key, value, + m_html_gen_opts.m_show_state_diagrams_dot_src); + if (key == "show-state-diagrams-sarif") + return parse_bool_value (ctxt, key, value, + m_html_gen_opts.m_show_state_diagrams_sarif); + return result::unrecognized; +} + +void +html_scheme_handler::get_keys (auto_vec &out) const +{ + out.safe_push ("css"); + out.safe_push ("file"); + out.safe_push ("javascript"); + out.safe_push ("show-state-diagrams"); + out.safe_push ("show-state-diagrams-dot-src"); + out.safe_push ("show-state-diagrams-sarif"); +} + } // namespace output_spec #if CHECKING_P @@ -666,15 +704,19 @@ struct parser_test class test_spec_context : public diagnostics::output_spec::dc_spec_context { public: - test_spec_context (diagnostics::context &dc, + test_spec_context (const char *option_name, + const char *unparsed_spec, + diagnostics::output_spec::key_handler *client_keys, line_maps *location_mgr, - location_t loc, - const char *option_name) - : dc_spec_context (dc, + diagnostics::context &dc, + location_t loc) + : dc_spec_context (option_name, + unparsed_spec, + client_keys, location_mgr, + dc, location_mgr, - loc, - option_name) + loc) { } @@ -685,18 +727,30 @@ struct parser_test } }; - parser_test () + parser_test (const char *unparsed_spec, + diagnostics::output_spec::key_handler *client_keys = nullptr) : m_dc (), - m_ctxt (m_dc, line_table, UNKNOWN_LOCATION, "-fOPTION="), + m_ctxt ("-fOPTION=", + unparsed_spec, + client_keys, + line_table, + m_dc, + UNKNOWN_LOCATION), m_fmt (m_dc.get_sink (0)) { pp_buffer (m_fmt.get_printer ())->m_flush_p = false; } std::unique_ptr - parse (const char *unparsed_arg) + parse () { - return diagnostics::output_spec::parse (m_ctxt, unparsed_arg); + return diagnostics::output_spec::parse (m_ctxt); + } + + std::unique_ptr + parse_and_make_sink () + { + return m_ctxt.parse_and_make_sink (m_dc); } bool execution_failed_p () const @@ -721,13 +775,10 @@ struct parser_test static void test_output_arg_parsing () { - auto_fix_quotes fix_quotes; - auto_fix_progname fix_progname; - /* Minimal correct example. */ { - parser_test pt; - auto result = pt.parse ("foo"); + parser_test pt ("foo"); + auto result = pt.parse (); ASSERT_EQ (result->m_scheme_name, "foo"); ASSERT_EQ (result->m_kvs.size (), 0); ASSERT_FALSE (pt.execution_failed_p ()); @@ -735,8 +786,8 @@ test_output_arg_parsing () /* Stray trailing colon with no key/value pairs. */ { - parser_test pt; - auto result = pt.parse ("foo:"); + parser_test pt ("foo:"); + auto result = pt.parse (); ASSERT_EQ (result, nullptr); ASSERT_TRUE (pt.execution_failed_p ()); ASSERT_STREQ (pt.get_diagnostic_text (), @@ -748,8 +799,8 @@ test_output_arg_parsing () /* No key before '='. */ { - parser_test pt; - auto result = pt.parse ("foo:="); + parser_test pt ("foo:="); + auto result = pt.parse (); ASSERT_EQ (result, nullptr); ASSERT_TRUE (pt.execution_failed_p ()); ASSERT_STREQ (pt.get_diagnostic_text (), @@ -761,8 +812,8 @@ test_output_arg_parsing () /* No value for key. */ { - parser_test pt; - auto result = pt.parse ("foo:key,"); + parser_test pt ("foo:key,"); + auto result = pt.parse (); ASSERT_EQ (result, nullptr); ASSERT_TRUE (pt.execution_failed_p ()); ASSERT_STREQ (pt.get_diagnostic_text (), @@ -774,8 +825,8 @@ test_output_arg_parsing () /* Correct example, with one key/value pair. */ { - parser_test pt; - auto result = pt.parse ("foo:key=value"); + parser_test pt ("foo:key=value"); + auto result = pt.parse (); ASSERT_EQ (result->m_scheme_name, "foo"); ASSERT_EQ (result->m_kvs.size (), 1); ASSERT_EQ (result->m_kvs[0].first, "key"); @@ -785,8 +836,8 @@ test_output_arg_parsing () /* Stray trailing comma. */ { - parser_test pt; - auto result = pt.parse ("foo:key=value,"); + parser_test pt ("foo:key=value,"); + auto result = pt.parse (); ASSERT_EQ (result, nullptr); ASSERT_TRUE (pt.execution_failed_p ()); ASSERT_STREQ (pt.get_diagnostic_text (), @@ -798,8 +849,8 @@ test_output_arg_parsing () /* Correct example, with two key/value pairs. */ { - parser_test pt; - auto result = pt.parse ("foo:color=red,shape=circle"); + parser_test pt ("foo:color=red,shape=circle"); + auto result = pt.parse (); ASSERT_EQ (result->m_scheme_name, "foo"); ASSERT_EQ (result->m_kvs.size (), 2); ASSERT_EQ (result->m_kvs[0].first, "color"); @@ -810,12 +861,59 @@ test_output_arg_parsing () } } +class test_key_handler : public diagnostics::output_spec::key_handler +{ +public: + test_key_handler () + : m_verbose (false), + m_strict (false) + { + } + + enum result + maybe_handle_kv (const diagnostics::output_spec::context &ctxt, + const std::string &key, + const std::string &value) final override + { + if (key == "verbose") + return parse_bool_value (ctxt, key, value, m_verbose); + if (key == "strict") + return parse_bool_value (ctxt, key, value, m_strict); + return result::unrecognized; + } + + void + get_keys (auto_vec &out_known_keys) const final override + { + out_known_keys.safe_push ("verbose"); + out_known_keys.safe_push ("strict"); + } + + bool m_verbose; + bool m_strict; +}; + +static void +test_client_arg_parsing () +{ + test_key_handler client_keys; + parser_test pt ("text:verbose=yes,strict=no", &client_keys); + auto result = pt.parse_and_make_sink (); + ASSERT_TRUE (result.get ()); + ASSERT_TRUE (client_keys.m_verbose); + ASSERT_FALSE (client_keys.m_strict); +} + /* Run all of the selftests within this file. */ void output_spec_cc_tests () { + auto_fix_quotes fix_quotes; + auto_fix_progname fix_progname; + test_output_arg_parsing (); + test_client_arg_parsing (); } } // namespace diagnostics::selftest diff --git a/gcc/diagnostics/output-spec.h b/gcc/diagnostics/output-spec.h index c84d237de499..bfc42c0c2de7 100644 --- a/gcc/diagnostics/output-spec.h +++ b/gcc/diagnostics/output-spec.h @@ -27,29 +27,84 @@ along with GCC; see the file COPYING3. If not see namespace diagnostics { namespace output_spec { +class context; + +/* An abstract base class for schemes, and for client-specific keys. */ + +class key_handler +{ +public: + enum class result + { + ok, + unrecognized, + malformed_value + }; + + /* Attempt to decode KEY and VALUE, storing the decoded value. */ + virtual enum result + maybe_handle_kv (const context &ctxt, + const std::string &key, + const std::string &value) = 0; + + virtual void + get_keys (auto_vec &out) const = 0; + + enum result + parse_bool_value (const context &ctxt, + const std::string &key, + const std::string &value, + bool &out) const; + + template + enum result + parse_enum_value (const context &ctxt, + const std::string &key, + const std::string &value, + const std::array, + NumValues> &value_names, + EnumType &out) const; +}; + +/* Abstract subclass for handling particular schemes and their keys. */ + +class scheme_handler : public key_handler +{ +public: + scheme_handler (std::string scheme_name) + : m_scheme_name (std::move (scheme_name)) + {} + virtual ~scheme_handler () {} + + const std::string &get_scheme_name () const { return m_scheme_name; } + + virtual std::unique_ptr + make_sink (const context &ctxt, + diagnostics::context &dc) = 0; + +private: + const std::string m_scheme_name; +}; + /* An abstract base class for handling the DSL of -fdiagnostics-add-output= and -fdiagnostics-set-output=. */ class context { - public: +public: std::unique_ptr - parse_and_make_sink (const char *, - diagnostics::context &dc); + parse_and_make_sink (diagnostics::context &dc); void report_error (const char *gmsgid, ...) const ATTRIBUTE_GCC_DIAG(2,3); void - report_unknown_key (const char *unparsed_arg, - const std::string &key, - const std::string &scheme_name, - auto_vec &known_keys) const; + report_unknown_key (const std::string &key, + const scheme_handler &scheme) const; void - report_missing_key (const char *unparsed_arg, - const std::string &key, + report_missing_key (const std::string &key, const std::string &scheme_name, const char *metavar) const; @@ -59,6 +114,9 @@ class context const char * get_option_name () const { return m_option_name; } + const char * + get_unparsed_spec () const { return m_unparsed_spec; } + line_maps * get_affected_location_mgr () const { return m_affected_location_mgr; } @@ -70,15 +128,32 @@ class context virtual const char * get_base_filename () const = 0; + bool + handle_kv (const std::string &key, + const std::string &value, + scheme_handler &scheme) const; + protected: context (const char *option_name, + const char *unparsed_spec, + key_handler *client_keys, line_maps *affected_location_mgr) : m_option_name (option_name), + m_unparsed_spec (unparsed_spec), + m_client_keys (client_keys), m_affected_location_mgr (affected_location_mgr) { } + // e.g. "-fdiagnostics-add-output=" const char *m_option_name; + + // e.g. "scheme:foo=bar,key=value" + const char *m_unparsed_spec; + + // Optional borrowed ptr to client-specific keys + key_handler *m_client_keys; + line_maps *m_affected_location_mgr; }; @@ -87,12 +162,17 @@ class context struct dc_spec_context : public output_spec::context { public: - dc_spec_context (diagnostics::context &dc, + dc_spec_context (const char *option_name, + const char *unparsed_spec, + key_handler *client_keys, line_maps *affected_location_mgr, + diagnostics::context &dc, line_maps *control_location_mgr, - location_t loc, - const char *option_name) - : context (option_name, affected_location_mgr), + location_t loc) + : context (option_name, + unparsed_spec, + client_keys, + affected_location_mgr), m_dc (dc), m_control_location_mgr (control_location_mgr), m_loc (loc) diff --git a/gcc/diagnostics/paths-output.cc b/gcc/diagnostics/paths-output.cc index a3ac9a0519ac..e39bfcbf10b2 100644 --- a/gcc/diagnostics/paths-output.cc +++ b/gcc/diagnostics/paths-output.cc @@ -25,7 +25,6 @@ along with GCC; see the file COPYING3. If not see #define INCLUDE_VECTOR #include "system.h" #include "coretypes.h" -#include "diagnostic.h" #include "diagnostics/macro-unwinding.h" #include "intl.h" #include "diagnostics/paths.h" @@ -456,7 +455,7 @@ struct event_range const location_t prev_loc = prev_event->get_location (); expanded_location prev_exploc = linemap_client_expand_location_to_spelling_point - (line_table, prev_loc, LOCATION_ASPECT_CARET); + (line_table, prev_loc, location_aspect::caret); /* The destination in-edge's line number has to be <= the source out-edge's line number (if any). */ if (prev_exploc.line >= m_line) @@ -515,7 +514,8 @@ struct event_range { expanded_location exploc = linemap_client_expand_location_to_spelling_point - (line_table, initial_event.get_location (), LOCATION_ASPECT_CARET); + (line_table, initial_event.get_location (), + location_aspect::caret); per_source_line_info &source_line_info = get_per_source_line_info (exploc.line); @@ -557,7 +557,7 @@ struct event_range with respect to the link-printing code. */ expanded_location exploc = linemap_client_expand_location_to_spelling_point - (line_table, new_ev.get_location (), LOCATION_ASPECT_CARET); + (line_table, new_ev.get_location (), location_aspect::caret); per_source_line_info &source_line_info = get_per_source_line_info (exploc.line); const event *prev_event = nullptr; @@ -608,7 +608,7 @@ struct event_range { expanded_location exploc = linemap_client_expand_location_to_spelling_point - (line_table, initial_loc, LOCATION_ASPECT_CARET); + (line_table, initial_loc, location_aspect::caret); if (exploc.file != LOCATION_FILE (dc.m_last_location)) { diagnostics::location_print_policy loc_policy (text_output); @@ -666,7 +666,7 @@ struct event_range { expanded_location exploc = linemap_client_expand_location_to_spelling_point - (line_table, initial_loc, LOCATION_ASPECT_CARET); + (line_table, initial_loc, location_aspect::caret); if (exploc.file != LOCATION_FILE (dc.m_last_location)) { diagnostics::location_print_policy loc_policy (dc); diff --git a/gcc/diagnostics/paths.cc b/gcc/diagnostics/paths.cc index bc769c45766e..824b810cb3bf 100644 --- a/gcc/diagnostics/paths.cc +++ b/gcc/diagnostics/paths.cc @@ -25,7 +25,6 @@ along with GCC; see the file COPYING3. If not see #define INCLUDE_VECTOR #include "system.h" #include "coretypes.h" -#include "diagnostic.h" #include "diagnostics/paths.h" #include "diagnostics/state-graphs.h" diff --git a/gcc/diagnostics/sarif-sink.cc b/gcc/diagnostics/sarif-sink.cc index c85a35e4f631..8bd026901c6b 100644 --- a/gcc/diagnostics/sarif-sink.cc +++ b/gcc/diagnostics/sarif-sink.cc @@ -26,7 +26,6 @@ along with GCC; see the file COPYING3. If not see #define INCLUDE_VECTOR #include "system.h" #include "coretypes.h" -#include "diagnostic.h" #include "diagnostics/metadata.h" #include "diagnostics/digraphs.h" #include "diagnostics/state-graphs.h" @@ -55,6 +54,7 @@ along with GCC; see the file COPYING3. If not see #include "demangle.h" #include "backtrace.h" #include "xml.h" +#include "intl.h" namespace diagnostics { @@ -949,6 +949,8 @@ class sarif_builder int start_line, int end_line, const content_renderer *r) const; + std::unique_ptr + make_message_describing_fix_it_hint (const fixit_hint &hint) const; std::unique_ptr make_fix_object (const rich_location &rich_loc); std::unique_ptr @@ -1980,6 +1982,7 @@ maybe_get_sarif_level (enum kind diag_kind) { case kind::warning: return "warning"; + case kind::fatal: case kind::error: return "error"; case kind::note: @@ -3747,6 +3750,65 @@ maybe_make_artifact_content_object (const char *filename, return artifact_content_obj; } +/* Attempt to generate a "message" object describing a fix-it hint, + or null if there was a problem. */ + +std::unique_ptr +sarif_builder:: +make_message_describing_fix_it_hint (const fixit_hint &hint) const +{ + pretty_printer pp; + if (hint.insertion_p ()) + pp_printf (&pp, G_("Insert %qs"), hint.get_string ()); + else + { + /* Try to get prior content. */ + expanded_location start = expand_location (hint.get_start_loc ()); + expanded_location next_loc = expand_location (hint.get_next_loc ()); + if (start.file != next_loc.file) + return nullptr; + if (start.line != next_loc.line) + return nullptr; + if (start.column == 0) + return nullptr; + if (next_loc.column == 0) + return nullptr; + + const int start_offset = start.column - 1; + const int next_offset = next_loc.column - 1; + if (next_offset <= start_offset) + return nullptr; + + size_t victim_len = next_offset - start_offset; + + char_span existing_line = get_context () + .get_file_cache () + .get_source_line (start.file, start.line); + if (!existing_line) + return nullptr; + + label_text existing_text + = label_text::take (existing_line.subspan (start_offset, + victim_len).xstrdup ()); + + if (hint.deletion_p ()) + { + // Removal + pp_printf (&pp, G_("Delete %qs"), + existing_text.get ()); + } + else + { + // Replacement + gcc_assert (hint.replacement_p ()); + pp_printf (&pp, G_("Replace %qs with %qs"), + existing_text.get (), + hint.get_string ()); + } + } + return make_message_object (pp_formatted_text (&pp)); +} + /* Make a "fix" object (SARIF v2.1.0 section 3.55) for RICHLOC. */ std::unique_ptr @@ -3762,6 +3824,18 @@ sarif_builder::make_fix_object (const rich_location &richloc) fix_obj->set ("artifactChanges", std::move (artifact_change_arr)); + // 3.55.2 "description" property + /* Attempt to generate a description. We can only do this + if there was a single hint. */ + if (richloc.get_num_fixit_hints () == 1) + { + const fixit_hint *hint = richloc.get_fixit_hint (0); + gcc_assert (hint); + if (auto desc_msg = make_message_describing_fix_it_hint (*hint)) + fix_obj->set ("description", + std::move (desc_msg)); + } + return fix_obj; } diff --git a/gcc/diagnostics/selftest-context.cc b/gcc/diagnostics/selftest-context.cc index 2b6dd0b331fb..aafa90ac457d 100644 --- a/gcc/diagnostics/selftest-context.cc +++ b/gcc/diagnostics/selftest-context.cc @@ -17,10 +17,10 @@ You should have received a copy of the GNU General Public License along with GCC; see the file COPYING3. If not see . */ +#define INCLUDE_VECTOR #include "config.h" #include "system.h" #include "coretypes.h" -#include "diagnostic.h" #include "diagnostics/sink.h" #include "selftest.h" #include "diagnostics/selftest-context.h" diff --git a/gcc/diagnostics/selftest-logical-locations.cc b/gcc/diagnostics/selftest-logical-locations.cc index 8ba423389f20..f8d5b75f7478 100644 --- a/gcc/diagnostics/selftest-logical-locations.cc +++ b/gcc/diagnostics/selftest-logical-locations.cc @@ -23,6 +23,7 @@ along with GCC; see the file COPYING3. If not see #include "coretypes.h" #include "selftest.h" #include "diagnostics/selftest-logical-locations.h" +#include "diagnostics/dumping.h" #if CHECKING_P @@ -38,6 +39,12 @@ test_manager::~test_manager () delete iter.second; } +void +test_manager::dump (FILE *outfile, int indent) const +{ + dumping::emit_heading (outfile, indent, "test_manager"); +} + const char * test_manager::get_short_name (key k) const { diff --git a/gcc/diagnostics/selftest-logical-locations.h b/gcc/diagnostics/selftest-logical-locations.h index c14a28282dab..e630382d38ef 100644 --- a/gcc/diagnostics/selftest-logical-locations.h +++ b/gcc/diagnostics/selftest-logical-locations.h @@ -39,6 +39,8 @@ class test_manager : public manager public: ~test_manager (); + void dump (FILE *out, int indent) const final override; + const char *get_short_name (key) const final override; const char *get_name_with_scope (key) const final override; const char *get_internal_name (key) const final override; diff --git a/gcc/diagnostics/selftest-paths.cc b/gcc/diagnostics/selftest-paths.cc index 56ce7ffcae14..e28d18a6370f 100644 --- a/gcc/diagnostics/selftest-paths.cc +++ b/gcc/diagnostics/selftest-paths.cc @@ -24,7 +24,6 @@ along with GCC; see the file COPYING3. If not see #include "system.h" #include "coretypes.h" #include "version.h" -#include "diagnostic.h" #include "diagnostics/selftest-paths.h" #if CHECKING_P diff --git a/gcc/diagnostics/sink.h b/gcc/diagnostics/sink.h index aaa6c50ab214..a2094e9f5a56 100644 --- a/gcc/diagnostics/sink.h +++ b/gcc/diagnostics/sink.h @@ -34,6 +34,27 @@ class per_sink_buffer; class sink { public: + /* Abstract base class for adding additional functionality to a sink + (e.g. via a plugin). */ + class extension + { + public: + virtual ~extension () {} + virtual void dump (FILE *out, int indent) const = 0; + virtual void finalize () {} + + sink &get_sink () const { return m_sink; } + + protected: + extension (sink &sink_) + : m_sink (sink_) + { + } + + private: + sink &m_sink; + }; + virtual ~sink () {} virtual text_sink *dyn_cast_text_sink () { return nullptr; } @@ -92,6 +113,15 @@ class sink logging::logger *get_logger () { return m_context.get_logger (); } + void + add_extension (std::unique_ptr sink_ext) + { + m_extensions.push_back (std::move (sink_ext)); + } + + void + finalize_extensions (); + protected: sink (context &dc) : m_context (dc), @@ -101,6 +131,9 @@ class sink protected: context &m_context; std::unique_ptr m_printer; + +private: + std::vector> m_extensions; }; extern void diff --git a/gcc/diagnostics/source-printing-options.h b/gcc/diagnostics/source-printing-options.h index 362b691c90c6..842a3e77d20c 100644 --- a/gcc/diagnostics/source-printing-options.h +++ b/gcc/diagnostics/source-printing-options.h @@ -20,6 +20,8 @@ along with GCC; see the file COPYING3. If not see #ifndef GCC_DIAGNOSTICS_SOURCE_PRINTING_OPTIONS_H #define GCC_DIAGNOSTICS_SOURCE_PRINTING_OPTIONS_H +#include "rich-location.h" + namespace diagnostics { /* A bundle of options relating to printing the user's source code diff --git a/gcc/diagnostics/source-printing.cc b/gcc/diagnostics/source-printing.cc index aeda9ad54e53..e98df9ad6fb3 100644 --- a/gcc/diagnostics/source-printing.cc +++ b/gcc/diagnostics/source-printing.cc @@ -213,7 +213,7 @@ class exploc_with_display_col : public expanded_location { /* m_display_col is now the final column of the byte. If escaping has happened, we may want the first column instead. */ - if (aspect != LOCATION_ASPECT_FINISH) + if (aspect != location_aspect::finish) { expanded_location prev_exploc (exploc); prev_exploc.column--; @@ -1260,14 +1260,14 @@ make_range (diagnostics::file_cache &fc, = {"", end_line, end_col, nullptr, false}; return layout_range (exploc_with_display_col (fc, start_exploc, def_policy (), - LOCATION_ASPECT_START), + location_aspect::start), exploc_with_display_col (fc, finish_exploc, def_policy (), - LOCATION_ASPECT_FINISH), + location_aspect::finish), SHOW_RANGE_WITHOUT_CARET, exploc_with_display_col (fc, start_exploc, def_policy (), - LOCATION_ASPECT_CARET), + location_aspect::caret), 0, nullptr); } @@ -1758,7 +1758,7 @@ layout::layout (const diagnostics::source_print_policy &source_policy, m_primary_loc (richloc.get_range (0)->m_loc), m_exploc (m_file_cache, richloc.get_expanded_location (0), m_char_policy, - LOCATION_ASPECT_CARET), + location_aspect::caret), m_layout_ranges (richloc.get_num_locations ()), m_fixit_hints (richloc.get_num_fixit_hints ()), m_line_spans (1 + richloc.get_num_locations ()), @@ -1819,13 +1819,13 @@ layout::maybe_add_location_range (const location_range *loc_range, /* Expand the various locations. */ expanded_location start = linemap_client_expand_location_to_spelling_point - (m_line_table, src_range.m_start, LOCATION_ASPECT_START); + (m_line_table, src_range.m_start, location_aspect::start); expanded_location finish = linemap_client_expand_location_to_spelling_point - (m_line_table, src_range.m_finish, LOCATION_ASPECT_FINISH); + (m_line_table, src_range.m_finish, location_aspect::finish); expanded_location caret = linemap_client_expand_location_to_spelling_point - (m_line_table, loc_range->m_loc, LOCATION_ASPECT_CARET); + (m_line_table, loc_range->m_loc, location_aspect::caret); /* If any part of the range isn't in the same file as the primary location of this diagnostic, ignore the range. */ @@ -1858,14 +1858,14 @@ layout::maybe_add_location_range (const location_range *loc_range, but it may require further sanitization. */ layout_range ri (exploc_with_display_col (m_file_cache, start, m_char_policy, - LOCATION_ASPECT_START), + location_aspect::start), exploc_with_display_col (m_file_cache, finish, m_char_policy, - LOCATION_ASPECT_FINISH), + location_aspect::finish), range_display_kind, exploc_with_display_col (m_file_cache, caret, m_char_policy, - LOCATION_ASPECT_CARET), + location_aspect::caret), original_idx, loc_range->m_label); /* If we have a range that finishes before it starts (perhaps diff --git a/gcc/diagnostics/text-sink.cc b/gcc/diagnostics/text-sink.cc index d4cfb89347f4..f9a2bffb2630 100644 --- a/gcc/diagnostics/text-sink.cc +++ b/gcc/diagnostics/text-sink.cc @@ -24,7 +24,6 @@ along with GCC; see the file COPYING3. If not see #include "coretypes.h" #include "version.h" #include "intl.h" -#include "diagnostic.h" #include "diagnostics/color.h" #include "diagnostics/url.h" #include "diagnostics/metadata.h" diff --git a/gcc/doc/avr-mmcu.texi b/gcc/doc/avr-mmcu.texi index 5efcc8198808..1938994d74f9 100644 --- a/gcc/doc/avr-mmcu.texi +++ b/gcc/doc/avr-mmcu.texi @@ -54,7 +54,7 @@ @item @anchor{avrxmega3}avrxmega3 ``XMEGA'' devices with up to 64@tie{}KiB of combined program memory and RAM, and with program memory visible in the RAM address space. -@*@var{mcu}@tie{}= @code{attiny202}, @code{attiny204}, @code{attiny212}, @code{attiny214}, @code{attiny402}, @code{attiny404}, @code{attiny406}, @code{attiny412}, @code{attiny414}, @code{attiny416}, @code{attiny416auto}, @code{attiny417}, @code{attiny424}, @code{attiny426}, @code{attiny427}, @code{attiny804}, @code{attiny806}, @code{attiny807}, @code{attiny814}, @code{attiny816}, @code{attiny817}, @code{attiny824}, @code{attiny826}, @code{attiny827}, @code{attiny1604}, @code{attiny1606}, @code{attiny1607}, @code{attiny1614}, @code{attiny1616}, @code{attiny1617}, @code{attiny1624}, @code{attiny1626}, @code{attiny1627}, @code{attiny3214}, @code{attiny3216}, @code{attiny3217}, @code{attiny3224}, @code{attiny3226}, @code{attiny3227}, @code{atmega808}, @code{atmega809}, @code{atmega1608}, @code{atmega1609}, @code{atmega3208}, @code{atmega3209}, @code{atmega4808}, @code{atmega4809}, @code{avr16dd14}, @code{avr16dd20}, @code{avr16dd28}, @code{avr16dd32}, @code{avr16du14}, @code{avr16du20}, @code{avr16du28}, @code{avr16du32}, @code{avr16ea28}, @code{avr16ea32}, @code{avr16ea48}, @code{avr16eb14}, @code{avr16eb20}, @code{avr16eb28}, @code{avr16eb32}, @code{avr32da28}, @code{avr32da28s}, @code{avr32da32}, @code{avr32da32s}, @code{avr32da48}, @code{avr32da48s}, @code{avr32db28}, @code{avr32db32}, @code{avr32db48}, @code{avr32dd14}, @code{avr32dd20}, @code{avr32dd28}, @code{avr32dd32}, @code{avr32du14}, @code{avr32du20}, @code{avr32du28}, @code{avr32du32}, @code{avr32ea28}, @code{avr32ea32}, @code{avr32ea48}, @code{avr32sd20}, @code{avr32sd28}, @code{avr32sd32}. +@*@var{mcu}@tie{}= @code{attiny202}, @code{attiny204}, @code{attiny212}, @code{attiny214}, @code{attiny402}, @code{attiny404}, @code{attiny406}, @code{attiny412}, @code{attiny414}, @code{attiny416}, @code{attiny416auto}, @code{attiny417}, @code{attiny424}, @code{attiny426}, @code{attiny427}, @code{attiny804}, @code{attiny806}, @code{attiny807}, @code{attiny814}, @code{attiny816}, @code{attiny817}, @code{attiny824}, @code{attiny826}, @code{attiny827}, @code{attiny1604}, @code{attiny1606}, @code{attiny1607}, @code{attiny1614}, @code{attiny1616}, @code{attiny1617}, @code{attiny1624}, @code{attiny1626}, @code{attiny1627}, @code{attiny3214}, @code{attiny3216}, @code{attiny3217}, @code{attiny3224}, @code{attiny3226}, @code{attiny3227}, @code{atmega808}, @code{atmega809}, @code{atmega1608}, @code{atmega1609}, @code{atmega3208}, @code{atmega3209}, @code{atmega4808}, @code{atmega4809}, @code{avr16dd14}, @code{avr16dd20}, @code{avr16dd28}, @code{avr16dd32}, @code{avr16du14}, @code{avr16du20}, @code{avr16du28}, @code{avr16du32}, @code{avr16ea28}, @code{avr16ea32}, @code{avr16ea48}, @code{avr16eb14}, @code{avr16eb20}, @code{avr16eb28}, @code{avr16eb32}, @code{avr32da28}, @code{avr32da28s}, @code{avr32da32}, @code{avr32da32s}, @code{avr32da48}, @code{avr32da48s}, @code{avr32db28}, @code{avr32db32}, @code{avr32db48}, @code{avr32dd14}, @code{avr32dd20}, @code{avr32dd28}, @code{avr32dd32}, @code{avr32du14}, @code{avr32du20}, @code{avr32du28}, @code{avr32du32}, @code{avr32ea28}, @code{avr32ea32}, @code{avr32ea48}, @code{avr32eb14}, @code{avr32eb20}, @code{avr32eb28}, @code{avr32eb32}, @code{avr32sd20}, @code{avr32sd28}, @code{avr32sd32}. @item @anchor{avrxmega4}avrxmega4 ``XMEGA'' devices with more than 64@tie{}KiB and up to 128@tie{}KiB of program memory. diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi index 2922d9e9839f..384211f8b6dc 100644 --- a/gcc/doc/extend.texi +++ b/gcc/doc/extend.texi @@ -670,16 +670,21 @@ tester (int len; char data[len][len], int len) @end smallexample @cindex parameter forward declaration -The @samp{int len} before the semicolon is a @dfn{parameter forward -declaration}, and it serves the purpose of making the name @code{len} -known when the declaration of @code{data} is parsed. - -You can write any number of such parameter forward declarations in the -parameter list. They can be separated by commas or semicolons, but the -last one must end with a semicolon, which is followed by the ``real'' -parameter declarations. Each forward declaration must match a ``real'' -declaration in parameter name and data type. ISO C99 does not support -parameter forward declarations. +The @samp{int len} before the semicolon +is a @dfn{parameter forward declaration}, +and it serves the purpose of making the name @code{len} known +when the declaration of @code{data} is parsed. + +Lists of parameter forward declarations are terminated by semicolons, +and parameter forward declarations are separated within such lists by commas, +just like in the regular list of parameter declarations. + +You can write any number of lists of parameter forward declaration, +but using more than one is unnecessary. +The last semicolon is followed by the list of parameter declarations. +Each parameter forward declaration must match +a parameter declaration in parameter name and data type. +ISO C99 does not support parameter forward declarations. @node Zero Length @subsection Arrays of Length Zero @@ -10447,10 +10452,11 @@ loop or a @code{#pragma GCC ivdep}, and applies only to the loop that follows. @var{n} is an integer constant expression specifying the unrolling factor. The values of @math{0} and @math{1} block any unrolling of the loop. -If the loop was vectorized the unroll factor specified will be used to seed the -vectorizer unroll factor. Whether the loop is unrolled or not will be -determined by target costing. The resulting vectorized loop may still be -unrolled more in later passes depending on the target costing. +If the loop is vectorized the vectorizer considers extra unrolling to honor the +unroll factor. After vectorizing a loop the pragma is dropped. Whether the +loop is unrolled or not will be determined by target costing. The resulting +vectorized loop may still be unrolled more in later passes depending on the +target costing. @end table @@ -16528,9 +16534,9 @@ result of the comparison is a vector of the same width and number of elements as the comparison operands with a signed integral element type. -Vectors are compared element-wise producing 0 when comparison is false -and -1 (constant of the appropriate type where all bits are set) -otherwise. Consider the following example. +Vectors are compared elementwise producing 0 when the comparison is false +and -1 (a constant of the appropriate type where all bits are set) +otherwise. Consider the following example: @smallexample typedef int v4si __attribute__ ((vector_size (16))); diff --git a/gcc/doc/generic.texi b/gcc/doc/generic.texi index 55083b278da4..0ea4860703e6 100644 --- a/gcc/doc/generic.texi +++ b/gcc/doc/generic.texi @@ -1833,6 +1833,7 @@ a value from @code{enum annot_expr_kind}, the third is an @code{INTEGER_CST}. @tindex IFN_VEC_WIDEN_MINUS_LO @tindex IFN_VEC_WIDEN_MINUS_EVEN @tindex IFN_VEC_WIDEN_MINUS_ODD +@tindex IFN_VEC_TRUNC_ADD_HIGH @tindex VEC_UNPACK_HI_EXPR @tindex VEC_UNPACK_LO_EXPR @tindex VEC_UNPACK_FLOAT_HI_EXPR @@ -1955,6 +1956,24 @@ vector of @code{N/2} subtractions. In the case of vector are subtracted from the odd @code{N/2} of the first to produce the vector of @code{N/2} subtractions. +@item IFN_VEC_TRUNC_ADD_HIGH +This internal function performs an addition of two input vectors, +then extracts the most significant half of each result element and +narrows it to elements of half the original width. + +Concretely, it computes: +@code{(bits(a)/2)((a + b) >> bits(a)/2)} + +where @code{bits(a)} is the width in bits of each input element. + +Its operands are vectors containing the same number of elements (@code{N}) +of the same integral type. The result is a vector of length @code{N}, with +elements of an integral type whose size is half that of the input element +type. + +This operation currently only used for early break result compression when the +result of a vector boolean can be represented as 0 or -1. + @item VEC_UNPACK_HI_EXPR @itemx VEC_UNPACK_LO_EXPR These nodes represent unpacking of the high and low parts of the input vector, diff --git a/gcc/doc/gm2.texi b/gcc/doc/gm2.texi index d908aeaaa058..1aa647d58786 100644 --- a/gcc/doc/gm2.texi +++ b/gcc/doc/gm2.texi @@ -723,6 +723,12 @@ The option @samp{-Wall} will turn on this flag with @samp{-Wuninit-variable-checking=known}. The @samp{-Wuninit-variable-checking=all} will increase compile time. +@item -fwideset +turn on access to the runtime support library module @samp{M2WIDESET}. +By default this option is on. +Wideset provision can be disabled by @samp{-fno-wideset} +and no reference will be made to the run time @samp{M2WIDESET} library. + @c the following warning options are complete but need to be @c regression tested against all other front ends @c to ensure the options do not conflict. diff --git a/gcc/doc/install.texi b/gcc/doc/install.texi index fc771448274a..576b7eead5ec 100644 --- a/gcc/doc/install.texi +++ b/gcc/doc/install.texi @@ -3125,6 +3125,13 @@ Again, if the native compiler miscompiles the stage1 compiler, you may need to work around this by avoiding non-working parts of the stage1 compiler. Use @code{STAGE1_TFLAGS} to this end. +You can use @code{STAGE1_CFLAGS} to set the flags passed to the host compiler +when building the stage1 compiler. The default is to pass @option{-g}, but when +the host compiler is GCC, this results in a non-optimized build of the stage1 +compiler. You can speed up the bootstrap by using @samp{STAGE1_CFLAGS='-O2'} +at the increased risk of miscompiling the stage1 compiler when the host +compiler is buggy. + If you used the flag @option{--enable-languages=@dots{}} to restrict the compilers to be built, only those you've actually enabled will be built. This will of course only build those runtime libraries, for diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index 85beda11c5c9..faa49afad818 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -272,7 +272,7 @@ in the following sections. -Woverloaded-virtual -Wno-pmf-conversions -Wself-move -Wsign-promo -Wsized-deallocation -Wsuggest-final-methods -Wsuggest-final-types -Wsuggest-override -Wno-template-body --Wno-template-id-cdtor -Wtemplate-names-tu-local +-Wno-template-id-cdtor -Wtemplate-names-tu-local -Wno-external-tu-local -Wno-terminate -Wno-vexing-parse -Wvirtual-inheritance -Wno-virtual-move-assign -Wvolatile} @@ -540,7 +540,9 @@ Objective-C and Objective-C++ Dialects}. @gccoptlist{-Wbad-function-cast -Wdeprecated-non-prototype -Wfree-labels -Wmissing-declarations -Wmissing-parameter-name -Wmissing-parameter-type -Wdeclaration-missing-parameter-type -Wmissing-prototypes --Wmissing-variable-declarations -Wnested-externs -Wold-style-declaration +-Wmissing-variable-declarations +-Wmultiple-parameter-fwd-decl-lists +-Wnested-externs -Wold-style-declaration -Wold-style-definition -Wstrict-prototypes -Wtraditional -Wtraditional-conversion -Wdeclaration-after-statement -Wpointer-sign} @@ -592,7 +594,8 @@ Objective-C and Objective-C++ Dialects}. -fearly-inlining -fipa-sra -fexpensive-optimizations -ffat-lto-objects -ffast-math -ffinite-math-only -ffloat-store -fexcess-precision=@var{style} -ffinite-loops --fforward-propagate -ffp-contract=@var{style} -ffunction-sections +-fforward-propagate -ffp-contract=@var{style} -ffp-int-builtin-inexact +-ffunction-sections -fgcse -fgcse-after-reload -fgcse-las -fgcse-lm -fgraphite-identity -fgcse-sm -fhoist-adjacent-loads -fif-conversion -fif-conversion2 -findirect-inlining @@ -616,7 +619,7 @@ Objective-C and Objective-C++ Dialects}. -flto-incremental-cache-size=@var{n} -fmalloc-dce -fmerge-all-constants -fmerge-constants -fmodulo-sched -fmodulo-sched-allow-regmoves -fmove-loop-invariants -fmove-loop-stores -fno-branch-count-reg --fno-defer-pop -fno-fp-int-builtin-inexact -fno-function-cse +-fno-defer-pop -fno-function-cse -fno-guess-branch-probability -fno-inline -fno-math-errno -fno-peephole -fno-peephole2 -fno-printf-return-value -fno-sched-interblock -fno-sched-spec -fno-signed-zeros @@ -728,7 +731,7 @@ Objective-C and Objective-C++ Dialects}. @item Linker Options @xref{Link Options,,Options for Linking}. -@gccoptlist{@var{object-file-name} -fuse-ld=@var{linker} -l@var{library} +@gccoptlist{@var{object-file-name} -flink-libatomic -fuse-ld=@var{linker} -l@var{library} -nostartfiles -nodefaultlibs -nolibc -nostdlib -nostdlib++ -e @var{entry} --entry=@var{entry} -pie -pthread -r -rdynamic @@ -4756,6 +4759,32 @@ The presence of an explicit instantiation silences the warning. This flag is enabled by @option{-Wextra}. +@opindex Wexternal-tu-local +@opindex Wno-external-tu-local +@item -Wno-external-tu-local +Warn when naming a TU-local entity outside of the translation unit it +was declared in. Such declarations will be ignored during name lookup. +This can occur when performing ADL from a template declared in the same +TU as the internal function: + +@smallexample +export module M; +template void foo(T t) @{ + bar(t); +@} +struct S @{@} s; +static void bar(S) @{@} // internal linkage + +// instantiating foo(s) from outside this TU can see ::bar, +// but naming it there is ill-formed. +@end smallexample + +This can be worked around by making @code{bar} attached to the global +module, using @code{extern "C++"}. + +This warning is enabled by default, and is upgraded to an error by +@option{-pedantic-errors}. + @opindex Wterminate @opindex Wno-terminate @item -Wno-terminate @r{(C++ and Objective-C++ only)} @@ -6682,6 +6711,7 @@ name is still supported, but the newer name is more descriptive.) -Wmissing-parameter-name @r{(C/ObjC only)} -Wmissing-parameter-type @r{(C/ObjC only)} -Wold-style-declaration @r{(C/ObjC only)} +-Wmultiple-parameter-fwd-decl-lists @r{(C/ObjC only)} -Woverride-init @r{(C/ObjC only)} -Wredundant-move @r{(C++ and Objective-C++ only)} -Wshift-negative-value @r{(in C++11 to C++17 and in C99 and newer)} @@ -6690,7 +6720,7 @@ name is still supported, but the newer name is more descriptive.) -Wstring-compare -Wtype-limits -Wuninitialized --Wunterminated-string-initialization +-Wunterminated-string-initialization @r{(C/ObjC only)} -Wunused-parameter @r{(only with} @option{-Wunused} @r{or} @option{-Wall}@r{)} -Wunused-but-set-parameter @r{(only with} @option{-Wunused} @r{or} @option{-Wall}@r{)}} @@ -7410,7 +7440,7 @@ switch (cond) @end group @end smallexample -C++17 provides a standard way to suppress the @option{-Wimplicit-fallthrough} +C++17 and C23 provide a standard way to suppress the @option{-Wimplicit-fallthrough} warning using @code{[[fallthrough]];} instead of the GNU attribute. In C++11 or C++14 users can use @code{[[gnu::fallthrough]];}, which is a GNU extension. Instead of these attributes, it is also possible to add a fallthrough comment @@ -8345,7 +8375,10 @@ known to read the object.) Annotating the function with attribute the object and avoids the warning (@pxref{Common Function Attributes}). These warnings are only possible in optimizing compilation, because otherwise -GCC does not keep track of the state of variables. +GCC does not keep track of the state of variables. On the other hand, +@option{-Wmaybe-uninitialized} is known not to warn in many situations +(false negatives) due to optimizations taking advantage of undefinedness +of uninitialized uses like constant propagation. These warnings are made optional because GCC may not be able to determine when the code is correct in spite of appearing to have an error. Here is one @@ -8431,7 +8464,7 @@ It warns about code that might break the strict aliasing rules that the compiler is using for optimization. The warning does not catch all cases, but does attempt to catch the more common pitfalls. It is included in @option{-Wall}. -It is equivalent to @option{-Wstrict-aliasing=3} +It is equivalent to @option{-Wstrict-aliasing=3}. @opindex Wstrict-aliasing=n @item -Wstrict-aliasing=n @@ -10135,7 +10168,7 @@ void h (char *s) @opindex Wno-date-time @item -Wdate-time Warn when macros @code{__TIME__}, @code{__DATE__} or @code{__TIMESTAMP__} -are encountered as they might prevent bit-wise-identical reproducible +are encountered as they might prevent bitwise-identical reproducible compilations. @opindex Wempty-body @@ -10375,7 +10408,7 @@ enabled by default. @item -Wlogical-op Warn about suspicious uses of logical operators in expressions. This includes using logical operators in contexts where a -bit-wise operator is likely to be expected. Also warns when +bitwise operator is likely to be expected. Also warns when the operands of a logical operator are the same: @smallexample extern int a; @@ -10535,6 +10568,13 @@ is not considered an old-style definition in C23 mode, because it is equivalent to @samp{(void)} in that case, but is considered an old-style definition for older standards. +@opindex Wmultiple-parameter-fwd-decl-lists +@opindex Wno-multiple-parameter-fwd-decl-lists +@item -Wmultiple-parameter-fwd-decl-lists @r{(C and Objective-C only)} +Warn if more than one list of forward declarations of parameters +appears in a function prototype. +This warning is also enabled by @option{-Wextra}. + @opindex Wdeprecated-non-prototype @opindex Wno-deprecated-non-prototype @item -Wdeprecated-non-prototype @r{(C and Objective-C only)} @@ -13289,6 +13329,24 @@ different statements. The default is @option{-ffp-contract=off} for C in a standards compliant mode (@option{-std=c11} or similar), @option{-ffp-contract=fast} otherwise. +@opindex ffp-int-builtin-inexact +@item -ffp-int-builtin-inexact +Allow the built-in functions @code{ceil}, @code{floor}, +@code{round} and @code{trunc}, and their @code{float} and @code{long +double} variants, to generate code that raises the ``inexact'' +floating-point exception for noninteger arguments. ISO C99 and C11 +allow these functions to raise the ``inexact'' exception, but ISO/IEC +TS 18661-1:2014, the C bindings to IEEE 754-2008, as integrated into +ISO C23, does not allow these functions to do so. + +The default is @option{-fno-fp-int-builtin-inexact}, disallowing the +exception to be raised, unless C17 or an earlier C standard is selected. +This option does nothing unless @option{-ftrapping-math} is in effect. + +Even if @option{-fno-fp-int-builtin-inexact} is used, if the functions +generate a call to a library function then the ``inexact'' exception +may be raised if the library implementation does not follow TS 18661. + @opindex fomit-frame-pointer @item -fomit-frame-pointer Omit the frame pointer in functions that don't need one. This avoids the @@ -14359,10 +14417,10 @@ Note that @option{-flive-patching} is not supported with link-time optimization @opindex fisolate-erroneous-paths-dereference @item -fisolate-erroneous-paths-dereference Detect paths that trigger erroneous or undefined behavior due to -dereferencing a null pointer. Isolate those paths from the main control -flow and turn the statement with erroneous or undefined behavior into a trap. -This flag is enabled by default at @option{-O2} and higher and depends on -@option{-fdelete-null-pointer-checks} also being enabled. +dereferencing a null pointer (with @option{-fdelete-null-pointer-checks} +enabled) or a division by zero. Isolate those paths from the main control +flow and turn the statement with erroneous or undefined behavior into a +trap. This flag is enabled by default at @option{-O2} and higher. @opindex fisolate-erroneous-paths-attribute @item -fisolate-erroneous-paths-attribute @@ -14696,27 +14754,25 @@ and @option{-fauto-profile}. @opindex ftrivial-auto-var-init @item -ftrivial-auto-var-init=@var{choice} -Initialize automatic variables with either a pattern or with zeroes to increase -the security and predictability of a program by preventing uninitialized memory -disclosure and use. +Initialize automatic variables or temporary objects with either a pattern or with +zeroes to increase the security and predictability of a program by preventing +uninitialized memory disclosure and use. GCC still considers an automatic variable that doesn't have an explicit initializer as uninitialized, @option{-Wuninitialized} and @option{-Wanalyzer-use-of-uninitialized-value} will still report -warning messages on such automatic variables and the compiler will -perform optimization as if the variable were uninitialized. +warning messages on such automatic variables or temporary objects and the +compiler will perform optimization as if the variable were uninitialized. With this option, GCC will also initialize any padding of automatic variables -that have structure or union types to zeroes. -However, the current implementation cannot initialize automatic variables that -are declared between the controlling expression and the first case of a -@code{switch} statement. Using @option{-Wtrivial-auto-var-init} to report all -such cases. +or temporary objects that have structure or union types to zeroes. +However, the current implementation cannot initialize automatic variables +whose initialization is bypassed through @code{switch} or @code{goto} +statement. Using @option{-Wtrivial-auto-var-init} to report all such cases. The three values of @var{choice} are: @itemize @bullet @item @samp{uninitialized} doesn't initialize any automatic variables. -This is C and C++'s default. @item @samp{pattern} Initialize automatic variables with values which will likely @@ -14730,7 +14786,10 @@ The values used for pattern initialization might be changed in the future. @samp{zero} Initialize automatic variables with zeroes. @end itemize -The default is @samp{uninitialized}. +The default is @samp{uninitialized} except for C++26, in which case +if @option{-ftrivial-auto-var-init=} is not specified at all automatic +variables or temporary objects are zero initialized, but zero initialization +of padding bits does not happen. Note that the initializer values, whether @samp{zero} or @samp{pattern}, refer to data representation (in memory or machine registers), rather @@ -14743,7 +14802,7 @@ with the bit patterns @code{0x00} or @code{0xFE}, depending on @var{choice}, whether or not these representations stand for values in that range, and even if they do, the interpretation of the value held by the variable will depend on the bias. A @samp{hardbool} variable that -uses say @code{0X5A} and @code{0xA5} for @code{false} and @code{true}, +uses say @code{0x5A} and @code{0xA5} for @code{false} and @code{true}, respectively, will trap with either @samp{choice} of trivial initializer, i.e., @samp{zero} initialization will not convert to the representation for @code{false}, even if it would for a @code{static} @@ -14754,7 +14813,8 @@ are initialized with @code{false} (zero), even when @samp{pattern} is requested. You can control this behavior for a specific variable by using the variable -attribute @code{uninitialized} (@pxref{Variable Attributes}). +attribute @code{uninitialized} standard attribute (@pxref{Variable Attributes}) +or the C++26 @code{[[indeterminate]]}. @opindex fvect-cost-model @item -fvect-cost-model=@var{model} @@ -14989,10 +15049,11 @@ int f() @{ @end smallexample The practice of reading from a different union member than the one most recently written to (called ``type-punning'') is common. Even with -@option{-fstrict-aliasing}, type-punning is allowed, provided the memory -is accessed through the union type. So, the code above works as -expected. @xref{Structures unions enumerations and bit-fields -implementation}. However, this code might not: +@option{-fstrict-aliasing}, type-punning is allowed in C, provided the memory +is accessed through the union type. In ISO C++, type-punning through a union +type is undefined behavior, but GCC supports it as an extension. So, the code +above works as expected. @xref{Structures unions enumerations and +bit-fields implementation}. However, this code might not: @smallexample int f() @{ union a_union t; @@ -15592,16 +15653,16 @@ This option is enabled by @option{-fauto-profile}. @opindex fprofile-partial-training @item -fprofile-partial-training -With @code{-fprofile-use} all portions of programs not executed during train -run are optimized aggressively for size rather than speed. In some cases it is -not practical to train all possible hot paths in the program. (For -example, program may contain functions specific for a given hardware and -training may not cover all hardware configurations program is run on.) With -@code{-fprofile-partial-training} profile feedback is ignored for all -functions not executed during the train run, leading them to be optimized as if -they were compiled without profile feedback. This leads to better performance -when train run is not representative but also leads to significantly bigger -code. +With @code{-fprofile-use} all portions of programs not executed during +training runs are optimized aggressively for size rather than speed. +In some cases it is not practical to train all possible hot paths in +the program. (For example, it may contain functions specific to a +given hardware and training may not cover all hardware configurations +the program later runs on.) With @code{-fprofile-partial-training} +profile feedback is ignored for all functions not executed during the +training runs, causing them to be optimized as if they were compiled +without profile feedback. This leads to better performance when the +training is not representative at the cost of significantly bigger code. @opindex fprofile-use @item -fprofile-use @@ -15895,25 +15956,6 @@ The default is @option{-fno-signaling-nans}. This option is experimental and does not currently guarantee to disable all GCC optimizations that affect signaling NaN behavior. -@opindex fno-fp-int-builtin-inexact -@opindex ffp-int-builtin-inexact -@item -fno-fp-int-builtin-inexact -Do not allow the built-in functions @code{ceil}, @code{floor}, -@code{round} and @code{trunc}, and their @code{float} and @code{long -double} variants, to generate code that raises the ``inexact'' -floating-point exception for noninteger arguments. ISO C99 and C11 -allow these functions to raise the ``inexact'' exception, but ISO/IEC -TS 18661-1:2014, the C bindings to IEEE 754-2008, as integrated into -ISO C23, does not allow these functions to do so. - -The default is @option{-ffp-int-builtin-inexact}, allowing the -exception to be raised, unless C23 or a later C standard is selected. -This option does nothing unless @option{-ftrapping-math} is in effect. - -Even if @option{-fno-fp-int-builtin-inexact} is used, if the functions -generate a call to a library function then the ``inexact'' exception -may be raised if the library implementation does not follow TS 18661. - @opindex fsingle-precision-constant @item -fsingle-precision-constant Treat floating-point constants as single precision instead of @@ -16235,6 +16277,11 @@ In each case, the @var{value} is an integer. The following choices of @var{name} are recognized for all targets: @table @gcctabopt +@item auto-profile-bbs +If non-zero and used together with @option{-fauto-profile}, the auto-profile +will be used to determine basic block profile. If zero, then only function +level profile will be read. + @item phiopt-factor-max-stmts-live When factoring statements out of if/then/else, this is the max # of statements after the defining statement to be allow to extend the lifetime of a name @@ -16312,6 +16359,10 @@ aggressive optimization, increasing the compilation time. This parameter should be removed when the delay slot code is rewritten to maintain the control-flow graph. +@item max-devirt-targets +This limits number of function a virtual call may be speculatively +devirtualized to using static analysis (without profile feedback). + @item max-gcse-memory The approximate maximum amount of memory in @code{kB} that can be allocated in order to perform the global common subexpression elimination @@ -19419,6 +19470,12 @@ If any of these options is used, then the linker is not run, and object file names should not be used as arguments. @xref{Overall Options}. +@opindex flink-libatomic +@item -flink-libatomic +Enable linking of libatomic if it's supported by target, and is enabled by +default. The negative form @option{-fno-link-libatomic} can be used to +explicitly disable linking of libatomic. + @opindex flinker-output @item -flinker-output=@var{type} This option controls code generation of the link-time optimizer. By @@ -22529,10 +22586,7 @@ vector-length agnostic code. @opindex Wexperimental-fmv-target @opindex Wno-experimental-fmv-target @item -Wexperimental-fmv-target -Warn about use of experimental Function Multi Versioning. -The Arm C Language Extension specification for Function Multi Versioning -is beta and subject to change. Any usage of FMV is caveated that future -behavior change and incompatibility is likely. +This option is deprecated. @end table @subsubsection @option{-march} and @option{-mcpu} Feature Modifiers @@ -22728,6 +22782,8 @@ extension in streaming mode. Enable the Floating Point Absolute Maximum/Minimum extension. @item lut Enable the Lookup Table extension. +@item sme-lutv2 +Enable the SME Lookup Table v2 (LUTv2) extension. @item cpa Enable the Checked Pointer Arithmetic instructions. @item sve-b16b16 @@ -31361,6 +31417,29 @@ pointer as the first argument of the function. TI ABI, though, mandates that the pointer can be NULL in case the caller is not using the returned value. GNU always passes and expects a valid return value pointer. +@item Size Of Struct Containing Bit-fields +TI ABI mandates that struct size is determined by the bit-field type, if it +contains any. Whereas GNU allocates the smallest amount of bytes which would +fit the bit-field. + +For example, TI ABI reserves 4 bytes for this struct, whereas GNU reserves +a single byte: + +@smallexample +struct S @{ int i:1; @}; +@end smallexample + +@item Access Size For Volatile Bit-fields +TI ABI mandates that volatile bit-fields are accessed using their type. +In contrast, GNU ABI uses the smallest integer type fitting the bit-field. + +For example, TI ABI requires a single load of 4 bytes for the +following bit-field. Whereas GNU generates a load of 1 byte: + +@smallexample +struct S @{ volatile int i:1; @}; +@end smallexample + @end table The current @option{-mabi=ti} implementation simply raises a compile error diff --git a/gcc/doc/libgcc.texi b/gcc/doc/libgcc.texi index 3587ffb1fb98..50643f74dba0 100644 --- a/gcc/doc/libgcc.texi +++ b/gcc/doc/libgcc.texi @@ -454,9 +454,9 @@ otherwise from signed bit-precise integer. There are two sets of basic comparison functions. -@deftypefn {Runtime Function} int __cmpsf2 (float @var{a}, float @var{b}) -@deftypefnx {Runtime Function} int __cmpdf2 (double @var{a}, double @var{b}) -@deftypefnx {Runtime Function} int __cmptf2 (long double @var{a}, long double @var{b}) +@deftypefn {Runtime Function} CMPtype __cmpsf2 (float @var{a}, float @var{b}) +@deftypefnx {Runtime Function} CMPtype __cmpdf2 (double @var{a}, double @var{b}) +@deftypefnx {Runtime Function} CMPtype __cmptf2 (long double @var{a}, long double @var{b}) These functions calculate @math{a <=> b}. That is, if @var{a} is less than @var{b}, they return @minus{}1; if @var{a} is greater than @var{b}, they return 1; and if @var{a} and @var{b} are equal they return 0. If @@ -465,9 +465,9 @@ if NaN is a possibility, use one of the higher-level comparison functions. @end deftypefn -@deftypefn {Runtime Function} int __unordsf2 (float @var{a}, float @var{b}) -@deftypefnx {Runtime Function} int __unorddf2 (double @var{a}, double @var{b}) -@deftypefnx {Runtime Function} int __unordtf2 (long double @var{a}, long double @var{b}) +@deftypefn {Runtime Function} CMPtype __unordsf2 (float @var{a}, float @var{b}) +@deftypefnx {Runtime Function} CMPtype __unorddf2 (double @var{a}, double @var{b}) +@deftypefnx {Runtime Function} CMPtype __unordtf2 (long double @var{a}, long double @var{b}) These functions return a nonzero value if either argument is NaN, otherwise 0. @end deftypefn @@ -489,49 +489,55 @@ NaN@. Thus, the meaning of the return value is different for each set. Do not rely on this implementation; only the semantics documented below are guaranteed. -@deftypefn {Runtime Function} int __eqsf2 (float @var{a}, float @var{b}) -@deftypefnx {Runtime Function} int __eqdf2 (double @var{a}, double @var{b}) -@deftypefnx {Runtime Function} int __eqtf2 (long double @var{a}, long double @var{b}) +@deftypefn {Runtime Function} CMPtype __eqsf2 (float @var{a}, float @var{b}) +@deftypefnx {Runtime Function} CMPtype __eqdf2 (double @var{a}, double @var{b}) +@deftypefnx {Runtime Function} CMPtype __eqtf2 (long double @var{a}, long double @var{b}) These functions return zero if neither argument is NaN, and @var{a} and @var{b} are equal. @end deftypefn -@deftypefn {Runtime Function} int __nesf2 (float @var{a}, float @var{b}) -@deftypefnx {Runtime Function} int __nedf2 (double @var{a}, double @var{b}) -@deftypefnx {Runtime Function} int __netf2 (long double @var{a}, long double @var{b}) +@deftypefn {Runtime Function} CMPtype __nesf2 (float @var{a}, float @var{b}) +@deftypefnx {Runtime Function} CMPtype __nedf2 (double @var{a}, double @var{b}) +@deftypefnx {Runtime Function} CMPtype __netf2 (long double @var{a}, long double @var{b}) These functions return a nonzero value if either argument is NaN, or if @var{a} and @var{b} are unequal. @end deftypefn -@deftypefn {Runtime Function} int __gesf2 (float @var{a}, float @var{b}) -@deftypefnx {Runtime Function} int __gedf2 (double @var{a}, double @var{b}) -@deftypefnx {Runtime Function} int __getf2 (long double @var{a}, long double @var{b}) +@deftypefn {Runtime Function} CMPtype __gesf2 (float @var{a}, float @var{b}) +@deftypefnx {Runtime Function} CMPtype __gedf2 (double @var{a}, double @var{b}) +@deftypefnx {Runtime Function} CMPtype __getf2 (long double @var{a}, long double @var{b}) These functions return a value greater than or equal to zero if neither argument is NaN, and @var{a} is greater than or equal to @var{b}. @end deftypefn -@deftypefn {Runtime Function} int __ltsf2 (float @var{a}, float @var{b}) -@deftypefnx {Runtime Function} int __ltdf2 (double @var{a}, double @var{b}) -@deftypefnx {Runtime Function} int __lttf2 (long double @var{a}, long double @var{b}) +@deftypefn {Runtime Function} CMPtype __ltsf2 (float @var{a}, float @var{b}) +@deftypefnx {Runtime Function} CMPtype __ltdf2 (double @var{a}, double @var{b}) +@deftypefnx {Runtime Function} CMPtype __lttf2 (long double @var{a}, long double @var{b}) These functions return a value less than zero if neither argument is NaN, and @var{a} is strictly less than @var{b}. @end deftypefn -@deftypefn {Runtime Function} int __lesf2 (float @var{a}, float @var{b}) -@deftypefnx {Runtime Function} int __ledf2 (double @var{a}, double @var{b}) -@deftypefnx {Runtime Function} int __letf2 (long double @var{a}, long double @var{b}) +@deftypefn {Runtime Function} CMPtype __lesf2 (float @var{a}, float @var{b}) +@deftypefnx {Runtime Function} CMPtype __ledf2 (double @var{a}, double @var{b}) +@deftypefnx {Runtime Function} CMPtype __letf2 (long double @var{a}, long double @var{b}) These functions return a value less than or equal to zero if neither argument is NaN, and @var{a} is less than or equal to @var{b}. @end deftypefn -@deftypefn {Runtime Function} int __gtsf2 (float @var{a}, float @var{b}) -@deftypefnx {Runtime Function} int __gtdf2 (double @var{a}, double @var{b}) -@deftypefnx {Runtime Function} int __gttf2 (long double @var{a}, long double @var{b}) +@deftypefn {Runtime Function} CMPtype __gtsf2 (float @var{a}, float @var{b}) +@deftypefnx {Runtime Function} CMPtype __gtdf2 (double @var{a}, double @var{b}) +@deftypefnx {Runtime Function} CMPtype __gttf2 (long double @var{a}, long double @var{b}) These functions return a value greater than zero if neither argument is NaN, and @var{a} is strictly greater than @var{b}. @end deftypefn +Comparison functions return a @code{CMPtype} which is a signed integer of +target-dependent size. Typically @code{CMPtype} will be word-sized, but +other backends may override this with the @code{TARGET_LIBGCC_CMP_RETURN_MODE} +hook. Of note, AArch64 uses an single-int as the return type, and AVR uses +a quarter-int. + @subsection Other floating-point functions @deftypefn {Runtime Function} float __powisf2 (float @var{a}, int @var{b}) diff --git a/gcc/doc/libgdiagnostics/index.rst b/gcc/doc/libgdiagnostics/index.rst index 3ae48af3d791..1e73f08aa84a 100644 --- a/gcc/doc/libgdiagnostics/index.rst +++ b/gcc/doc/libgdiagnostics/index.rst @@ -109,5 +109,4 @@ Indices and tables ****************** * :ref:`genindex` -* :ref:`modindex` * :ref:`search` diff --git a/gcc/doc/md.texi b/gcc/doc/md.texi index 973c0dd30296..44e1149bea89 100644 --- a/gcc/doc/md.texi +++ b/gcc/doc/md.texi @@ -5330,7 +5330,7 @@ The split is possible in this case if: @item @samp{vec_cmp@var{m}@var{n}} Output a vector comparison. Operand 0 of mode @var{n} is the destination for predicate in operand 1 which is a signed vector comparison with operands of -mode @var{m} in operands 2 and 3. Predicate is computed by element-wise +mode @var{m} in operands 2 and 3. Predicate is computed by elementwise evaluation of the vector comparison with a truth value of all-ones and a false value of all-zeros. @@ -6087,6 +6087,25 @@ vectors with N signed/unsigned elements of size S@. Find the absolute difference between operands 1 and 2 and widen the resulting elements. Put the N/2 results of size 2*S in the output vector (operand 0). +@cindex @code{vec_trunc_add_high@var{m}} instruction pattern +@item @samp{vec_trunc_add_high@var{m}} +Signed or unsigned addition of two input integer vectors of mode @var{m}, then +extracts the most significant half of each result element and narrows it to +elements of half the original width. + +Concretely, it computes: +@code{(bits(a)/2)((a + b) >> bits(a)/2)} + +where @code{bits(a)} is the width in bits of each input element. + +Operand 1 and 2 are of integer vector mode @var{m} containing the same number +of signed or unsigned integral elements. The result (operand @code{0}) is of an +integer vector mode with the same number of elements but elements of half of the +width of those of mode @var{m}. + +This operation currently only used for early break result compression when the +result of a vector boolean can be represented as 0 or -1. + @cindex @code{vec_addsub@var{m}3} instruction pattern @item @samp{vec_addsub@var{m}3} Alternating subtract, add with even lanes doing subtract and odd diff --git a/gcc/doc/passes.texi b/gcc/doc/passes.texi index 282fc1a6a12b..f6db15d5a5fc 100644 --- a/gcc/doc/passes.texi +++ b/gcc/doc/passes.texi @@ -735,12 +735,6 @@ cannot be used for branch prediction (though adapting it would not be difficult). The pass is located in @file{tree-vrp.cc} and is described by @code{pass_vrp}. -@item Folding built-in functions - -This pass simplifies built-in functions, as applicable, with constant -arguments or with inferable string lengths. It is located in -@file{tree-ssa-ccp.cc} and is described by @code{pass_fold_builtins}. - @item Split critical edges This pass identifies critical edges and inserts empty basic blocks diff --git a/gcc/doc/tm.texi b/gcc/doc/tm.texi index 37642680f423..930003725378 100644 --- a/gcc/doc/tm.texi +++ b/gcc/doc/tm.texi @@ -56,6 +56,7 @@ through the macros defined in the @file{.h} file. * C++ ABI:: Controlling C++ ABI changes. * D Language and ABI:: Controlling D ABI changes. * Rust Language and ABI:: Controlling Rust ABI changes. +* JIT Language and ABI:: JIT ABI parameters * Named Address Spaces:: Adding support for named address spaces * Misc:: Everything else. @end menu @@ -126,6 +127,14 @@ If targets initialize @code{targetrustm} themselves, they should set @code{target_has_targetrustm=yes} in @file{config.gcc}; otherwise a default definition is used. +Similarly, there is a @code{targetjitm} variable for hooks that are +specific to the jit front end, documented as ``JIT Target Hook''. +This is declared in @file{jit/jit-target.h}, the initializer +@code{TARGETJITM_INITIALIZER} in @file{jit/jit-target-def.h}. If targets +initialize @code{targetjitm} themselves, they should set +@code{target_has_targetjitm=yes} in @file{config.gcc}; otherwise a default +definition is used. + @node Driver @section Controlling the Compilation Driver, @file{gcc} @cindex driver @@ -6388,14 +6397,14 @@ return type of the vectorized function shall be of vector type @var{vec_type_out} and the argument types should be @var{vec_type_in}. @end deftypefn -@deftypefn {Target Hook} bool TARGET_VECTORIZE_SUPPORT_VECTOR_MISALIGNMENT (machine_mode @var{mode}, const_tree @var{type}, int @var{misalignment}, bool @var{is_packed}, bool @var{is_gather_scatter}) +@deftypefn {Target Hook} bool TARGET_VECTORIZE_SUPPORT_VECTOR_MISALIGNMENT (machine_mode @var{mode}, int @var{misalignment}, bool @var{is_packed}, bool @var{is_gather_scatter}) This hook should return true if the target supports misaligned vector store/load of a specific factor denoted in the @var{misalignment} -parameter. The vector store/load should be of machine mode @var{mode} and -the elements in the vectors should be of type @var{type}. The -@var{is_packed} parameter is true if the misalignment is unknown and the -memory access is defined in a packed struct. @var{is_gather_scatter} is true -if the load/store is a gather or scatter. +parameter. The vector store/load should be of machine mode @var{mode}. +The @var{is_packed} parameter is true if the original memory access is +not naturally aligned. @var{is_gather_scatter} is true if the +load/store is a gather or scatter. In that case misalignment +denotes the misalignment of @var{mode}'s element mode. @end deftypefn @deftypefn {Target Hook} machine_mode TARGET_VECTORIZE_PREFERRED_SIMD_MODE (scalar_mode @var{mode}) @@ -9579,9 +9588,10 @@ It is false if we must use @command{collect2}. @deftypevr {Target Hook} bool TARGET_DTORS_FROM_CXA_ATEXIT This value is true if the target wants destructors to be queued to be -run from __cxa_atexit. If this is the case then, for each priority level, -a new constructor will be entered that registers the destructors for that -level with __cxa_atexit (and there will be no destructors emitted). +run from @code{__cxa_atexit}. If this is the case then, for each +priority level, a new constructor will be entered that registers the +destructors for that level with @code{__cxa_atexit} (and there will be +no destructors emitted). It is false the method implied by @code{have_ctors_dtors} is used. @end deftypevr @@ -10924,6 +10934,16 @@ the function declaration to hold a pointer to a target-specific @code{struct cl_target_option} structure. @end deftypefn +@defmac TARGET_HAS_FMV_TARGET_ATTRIBUTE +Define this macro to zero to use @code{target_version} attributes for function +multiversioning (FMV) rather than @code{target} attributes. + +Targets using @code{target_version} attributes will also have +"target_version" FMV semantics, which allow for FMV sets defined across TU's +and using a combination of @code{target_version} and @code{target_clones} +attributed declarations in the definition of a FMV function set. +@end defmac + @defmac TARGET_CLONES_ATTR_SEPARATOR Define this char-typed macro to select a character that separates each target specific attributes from the @code{attribute(target_clones("..."))} @@ -10977,12 +10997,28 @@ changed via the optimize attribute or pragma, see @code{TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE} @end deftypefn -@deftypefn {Target Hook} bool TARGET_OPTION_FUNCTION_VERSIONS (tree @var{decl1}, tree @var{decl2}) -This target hook returns @code{true} if @var{DECL1} and @var{DECL2} are -versions of the same function. @var{DECL1} and @var{DECL2} are function -versions if and only if they have the same function signature and -different target specific attributes, that is, they are compiled for -different target machines. +@deftypefn {Target Hook} bool TARGET_OPTION_SAME_FUNCTION_VERSIONS (string_slice @var{fn1}, string_slice @var{fn2}) +This target hook returns @code{true} if the target/target-version strings +@var{fn1} and @var{fn2} imply the same function version. +@end deftypefn + +@deftypefn {Target Hook} bool TARGET_OPTION_FUNCTIONS_B_RESOLVABLE_FROM_A (tree @var{decl_a}, tree @var{decl_v}, tree @var{base}) +@var{decl_b} is a function declaration with a function multi-versioning +(FMV) attribute; this attribute is either @code{target} or +@code{target_version}, depending on @code{TARGET_HAS_FMV_TARGET_ATTRIBUTE}. +@var{decl_a} is a function declaration that may or may not have an FMV +attribute. + +Return true if we have enough information to determine that the +requirements of @var{decl_b}'s FMV attribute are met whenever @var{decl_a} +is executed, given that the target supports all features required by +function declaration @var{base}. + +The default implementation just checks whether @var{decl_a} has the same +FMV attribute as @var{decl_b}. This is conservatively correct, +but ports can do better by taking the relationships between architecture +features into account. For example, on AArch64, @code{sve} is present +whenever @code{sve2} is present. @end deftypefn @deftypefn {Target Hook} bool TARGET_CAN_INLINE_P (tree @var{caller}, tree @var{callee}) @@ -11369,6 +11405,17 @@ Similar to @code{TARGET_RUST_CPU_INFO}, but is used for configuration info relating to the target operating system. @end deftypefn +@node JIT Language and ABI +@section JIT ABI parameters +@cindex parameters, jit abi + +@deftypefn {JIT Target Hook} void TARGET_JIT_REGISTER_CPU_TARGET_INFO (void) +Register all target information keys relating to the target CPU using the +function @code{jit_add_target_info}, which takes a key and a value. The +keys added by this hook are made available at compile time by calling +get_target_info. +@end deftypefn + @node Named Address Spaces @section Adding support for named address spaces @cindex named address spaces @@ -12289,6 +12336,15 @@ function version at run-time for a given set of function versions. body must be generated. @end deftypefn +@deftypefn {Target Hook} bool TARGET_CHECK_TARGET_CLONE_VERSION (string_slice @var{str}, location_t *@var{loc}) +This hook is used to check if a version specified in a @code{target_clones} +annotation is valid. @var{str} is the version to be considered. +If @var{loc} is not @code{NULL} then emit warnings for invalid versions at +that location. Otherwise emit no diagnostics. +Returns @code{true} if @var{str} is a valid version string, and @code{false} +otherwise +@end deftypefn + @deftypefn {Target Hook} bool TARGET_PREDICT_DOLOOP_P (class loop *@var{loop}) Return true if we can predict it is possible to use a low-overhead loop for a particular loop. The parameter @var{loop} is a pointer to the loop. diff --git a/gcc/doc/tm.texi.in b/gcc/doc/tm.texi.in index c3ed9a9fd7c2..4838af8c0da9 100644 --- a/gcc/doc/tm.texi.in +++ b/gcc/doc/tm.texi.in @@ -56,6 +56,7 @@ through the macros defined in the @file{.h} file. * C++ ABI:: Controlling C++ ABI changes. * D Language and ABI:: Controlling D ABI changes. * Rust Language and ABI:: Controlling Rust ABI changes. +* JIT Language and ABI:: JIT ABI parameters * Named Address Spaces:: Adding support for named address spaces * Misc:: Everything else. @end menu @@ -126,6 +127,14 @@ If targets initialize @code{targetrustm} themselves, they should set @code{target_has_targetrustm=yes} in @file{config.gcc}; otherwise a default definition is used. +Similarly, there is a @code{targetjitm} variable for hooks that are +specific to the jit front end, documented as ``JIT Target Hook''. +This is declared in @file{jit/jit-target.h}, the initializer +@code{TARGETJITM_INITIALIZER} in @file{jit/jit-target-def.h}. If targets +initialize @code{targetjitm} themselves, they should set +@code{target_has_targetjitm=yes} in @file{config.gcc}; otherwise a default +definition is used. + @node Driver @section Controlling the Compilation Driver, @file{gcc} @cindex driver @@ -7121,6 +7130,16 @@ on this implementation detail. @hook TARGET_OPTION_VALID_VERSION_ATTRIBUTE_P +@defmac TARGET_HAS_FMV_TARGET_ATTRIBUTE +Define this macro to zero to use @code{target_version} attributes for function +multiversioning (FMV) rather than @code{target} attributes. + +Targets using @code{target_version} attributes will also have +"target_version" FMV semantics, which allow for FMV sets defined across TU's +and using a combination of @code{target_version} and @code{target_clones} +attributed declarations in the definition of a FMV function set. +@end defmac + @defmac TARGET_CLONES_ATTR_SEPARATOR Define this char-typed macro to select a character that separates each target specific attributes from the @code{attribute(target_clones("..."))} @@ -7140,7 +7159,9 @@ with the target specific attributes. The default value is @code{','}. @hook TARGET_OPTION_OVERRIDE -@hook TARGET_OPTION_FUNCTION_VERSIONS +@hook TARGET_OPTION_SAME_FUNCTION_VERSIONS + +@hook TARGET_OPTION_FUNCTIONS_B_RESOLVABLE_FROM_A @hook TARGET_CAN_INLINE_P @@ -7290,6 +7311,12 @@ floating-point support; they are not included in this mechanism. @hook TARGET_RUST_OS_INFO +@node JIT Language and ABI +@section JIT ABI parameters +@cindex parameters, jit abi + +@hook TARGET_JIT_REGISTER_CPU_TARGET_INFO + @node Named Address Spaces @section Adding support for named address spaces @cindex named address spaces @@ -7897,6 +7924,8 @@ to by @var{ce_info}. @hook TARGET_GENERATE_VERSION_DISPATCHER_BODY +@hook TARGET_CHECK_TARGET_CLONE_VERSION + @hook TARGET_PREDICT_DOLOOP_P @hook TARGET_HAVE_COUNT_REG_DECR_P diff --git a/gcc/dwarf2ctf.cc b/gcc/dwarf2ctf.cc index f8b305b6c4a8..4b49b23f0780 100644 --- a/gcc/dwarf2ctf.cc +++ b/gcc/dwarf2ctf.cc @@ -87,8 +87,8 @@ ctf_get_AT_data_member_location (dw_die_ref die) /* The field location (in bits) can be determined from either a DW_AT_data_member_location attribute or a DW_AT_data_bit_offset attribute. */ - if (get_AT (die, DW_AT_data_bit_offset)) - field_location = get_AT_unsigned (die, DW_AT_data_bit_offset); + if ((attr = get_AT (die, DW_AT_data_bit_offset))) + field_location = AT_unsigned (attr); else { attr = get_AT (die, DW_AT_data_member_location); @@ -102,16 +102,12 @@ ctf_get_AT_data_member_location (dw_die_ref die) == dw_val_class_unsigned_const); field_location = descr->dw_loc_oprnd1.v.val_unsigned * 8; } - else - { - attr = get_AT (die, DW_AT_data_member_location); - if (attr && AT_class (attr) == dw_val_class_const) - field_location = AT_int (attr) * 8; - else - field_location = (get_AT_unsigned (die, - DW_AT_data_member_location) - * 8); - } + else if (attr && AT_class (attr) == dw_val_class_const) + field_location = AT_int (attr) * 8; + else if (attr) + field_location = AT_unsigned (attr) * 8; + + /* Otherwise the location is non-existant, e.g. for union members. */ } return field_location; @@ -199,7 +195,7 @@ gen_ctf_unknown_type (ctf_container_ref ctfc) If no DW_AT_byte_size nor DW_AT_bit_size are defined, this function returns 0. */ -static uint32_t +static unsigned HOST_WIDE_INT ctf_die_bitsize (dw_die_ref die) { dw_attr_node *attr_byte_size = get_AT (die, DW_AT_byte_size); @@ -225,7 +221,9 @@ gen_ctf_base_type (ctf_container_ref ctfc, dw_die_ref type) ctf_encoding_t ctf_encoding = {0, 0, 0}; unsigned int encoding = get_AT_unsigned (type, DW_AT_encoding); - unsigned int bit_size = ctf_die_bitsize (type); + /* Bit size for the base types handled here should never be extremely large + (BITSIZE_MAXWIDTH at the upper end for _BitInt). */ + unsigned int bit_size = (unsigned int) ctf_die_bitsize (type); const char * name_string = get_AT_string (type, DW_AT_name); switch (encoding) @@ -514,7 +512,7 @@ gen_ctf_modifier_type (ctf_container_ref ctfc, dw_die_ref modifier) static ctf_dtdef_ref gen_ctf_sou_type (ctf_container_ref ctfc, dw_die_ref sou, uint32_t kind) { - uint32_t bit_size = ctf_die_bitsize (sou); + unsigned HOST_WIDE_INT bit_size = ctf_die_bitsize (sou); int declaration_p = get_AT_flag (sou, DW_AT_declaration); const char *sou_name = get_AT_string (sou, DW_AT_name); @@ -564,7 +562,7 @@ gen_ctf_sou_type (ctf_container_ref ctfc, dw_die_ref sou, uint32_t kind) { dw_attr_node *attr; HOST_WIDE_INT bitpos = 0; - HOST_WIDE_INT bitsize = ctf_die_bitsize (c); + unsigned HOST_WIDE_INT bitsize = ctf_die_bitsize (c); HOST_WIDE_INT bit_offset; /* The bit offset is given in bits and it may be @@ -581,7 +579,7 @@ gen_ctf_sou_type (ctf_container_ref ctfc, dw_die_ref sou, uint32_t kind) bitpos = field_location + bit_offset; else { - HOST_WIDE_INT bit_size; + unsigned HOST_WIDE_INT bit_size; attr = get_AT (c, DW_AT_byte_size); if (attr) @@ -730,7 +728,7 @@ static ctf_dtdef_ref gen_ctf_enumeration_type (ctf_container_ref ctfc, dw_die_ref enumeration) { const char *enum_name = get_AT_string (enumeration, DW_AT_name); - unsigned int bit_size = ctf_die_bitsize (enumeration); + unsigned HOST_WIDE_INT bit_size = ctf_die_bitsize (enumeration); unsigned int signedness = get_AT_unsigned (enumeration, DW_AT_encoding); int declaration_p = get_AT_flag (enumeration, DW_AT_declaration); diff --git a/gcc/expr.cc b/gcc/expr.cc index 3d2b25351585..4a699101bb5a 100644 --- a/gcc/expr.cc +++ b/gcc/expr.cc @@ -6533,6 +6533,31 @@ string_cst_read_str (void *data, void *, HOST_WIDE_INT offset, return c_readstr (TREE_STRING_POINTER (str) + offset, mode, false); } +/* Helper function for store_expr storing of RAW_DATA_CST. */ + +static rtx +raw_data_cst_read_str (void *data, void *, HOST_WIDE_INT offset, + fixed_size_mode mode) +{ + tree cst = (tree) data; + + gcc_assert (offset >= 0); + if (offset >= RAW_DATA_LENGTH (cst)) + return const0_rtx; + + if ((unsigned HOST_WIDE_INT) offset + GET_MODE_SIZE (mode) + > (unsigned HOST_WIDE_INT) RAW_DATA_LENGTH (cst)) + { + char *p = XALLOCAVEC (char, GET_MODE_SIZE (mode)); + size_t l = RAW_DATA_LENGTH (cst) - offset; + memcpy (p, RAW_DATA_POINTER (cst) + offset, l); + memset (p + l, '\0', GET_MODE_SIZE (mode) - l); + return c_readstr (p, mode, false); + } + + return c_readstr (RAW_DATA_POINTER (cst) + offset, mode, false); +} + /* Generate code for computing expression EXP, and storing the value into TARGET. @@ -7630,7 +7655,7 @@ store_constructor (tree exp, rtx target, int cleared, poly_int64 size, case ARRAY_TYPE: { tree value, index; - unsigned HOST_WIDE_INT i; + unsigned HOST_WIDE_INT i, j = 0; bool need_to_clear; tree domain; tree elttype = TREE_TYPE (type); @@ -7692,6 +7717,8 @@ store_constructor (tree exp, rtx target, int cleared, poly_int64 size, this_node_count = (tree_to_uhwi (hi_index) - tree_to_uhwi (lo_index) + 1); } + else if (TREE_CODE (value) == RAW_DATA_CST) + this_node_count = RAW_DATA_LENGTH (value); else this_node_count = 1; @@ -7734,7 +7761,11 @@ store_constructor (tree exp, rtx target, int cleared, poly_int64 size, rtx xtarget = target; if (cleared && initializer_zerop (value)) - continue; + { + if (TREE_CODE (value) == RAW_DATA_CST) + j += RAW_DATA_LENGTH (value) - 1; + continue; + } mode = TYPE_MODE (elttype); if (mode != BLKmode) @@ -7750,6 +7781,8 @@ store_constructor (tree exp, rtx target, int cleared, poly_int64 size, unsigned HOST_WIDE_INT lo, hi, count; tree offset; + gcc_assert (TREE_CODE (value) != RAW_DATA_CST); + /* If the range is constant and "small", unroll the loop. */ if (const_bounds_p && tree_fits_uhwi_p (lo_index) @@ -7846,13 +7879,14 @@ store_constructor (tree exp, rtx target, int cleared, poly_int64 size, { tree offset; + gcc_assert (TREE_CODE (value) != RAW_DATA_CST); if (index) offset = fold_build2 (MINUS_EXPR, TREE_TYPE (index), index, TYPE_MIN_VALUE (domain)); else - offset = size_int (i); + offset = size_int (i + j); offset = size_binop (MULT_EXPR, fold_convert (sizetype, offset), @@ -7869,7 +7903,7 @@ store_constructor (tree exp, rtx target, int cleared, poly_int64 size, bitpos = ((tree_to_uhwi (index) - minelt) * tree_to_uhwi (TYPE_SIZE (elttype))); else - bitpos = (i * tree_to_uhwi (TYPE_SIZE (elttype))); + bitpos = ((i + j) * tree_to_uhwi (TYPE_SIZE (elttype))); if (MEM_P (target) && !MEM_KEEP_ALIAS_SET_P (target) && TREE_CODE (type) == ARRAY_TYPE @@ -7878,10 +7912,50 @@ store_constructor (tree exp, rtx target, int cleared, poly_int64 size, target = copy_rtx (target); MEM_KEEP_ALIAS_SET_P (target) = 1; } - store_constructor_field (target, bitsize, bitpos, 0, - bitregion_end, mode, value, - cleared, get_alias_set (elttype), - reverse); + if (TREE_CODE (value) != RAW_DATA_CST) + store_constructor_field (target, bitsize, bitpos, 0, + bitregion_end, mode, value, + cleared, get_alias_set (elttype), + reverse); + else + { + j += RAW_DATA_LENGTH (value) - 1; + gcc_assert (known_eq (bitsize, BITS_PER_UNIT)); + rtx to_rtx = adjust_address (target, mode, + bitpos / BITS_PER_UNIT); + + if (to_rtx == target) + to_rtx = copy_rtx (to_rtx); + + if (!MEM_KEEP_ALIAS_SET_P (to_rtx) + && MEM_ALIAS_SET (to_rtx) != 0) + set_mem_alias_set (to_rtx, get_alias_set (elttype)); + + if (can_store_by_pieces (RAW_DATA_LENGTH (value), + raw_data_cst_read_str, + (void *) value, + MEM_ALIGN (target), false)) + { + store_by_pieces (target, RAW_DATA_LENGTH (value), + raw_data_cst_read_str, (void *) value, + MEM_ALIGN (target), false, + RETURN_BEGIN); + continue; + } + + elttype + = build_array_type_nelts (TREE_TYPE (value), + RAW_DATA_LENGTH (value)); + tree ctor = build_constructor_single (elttype, NULL_TREE, + value); + ctor = tree_output_constant_def (ctor); + mode = TYPE_MODE (type); + store_constructor_field (target, + bitsize * RAW_DATA_LENGTH (value), + bitpos, 0, bitregion_end, mode, + ctor, cleared, + get_alias_set (elttype), reverse); + } } } break; @@ -9886,6 +9960,7 @@ expand_expr_real_2 (const_sepops ops, rtx target, machine_mode tmode, else if (SCALAR_INT_MODE_P (GET_MODE (op0)) && optimize >= 2 && SCALAR_INT_MODE_P (mode) + && INTEGRAL_TYPE_P (TREE_TYPE (treeop0)) && (GET_MODE_SIZE (as_a (mode)) > GET_MODE_SIZE (as_a (GET_MODE (op0)))) && get_range_pos_neg (treeop0, diff --git a/gcc/flag-types.h b/gcc/flag-types.h index bf681c3e8153..44a90becb27a 100644 --- a/gcc/flag-types.h +++ b/gcc/flag-types.h @@ -288,7 +288,8 @@ enum vect_cost_model { enum auto_init_type { AUTO_INIT_UNINITIALIZED = 0, AUTO_INIT_PATTERN = 1, - AUTO_INIT_ZERO = 2 + AUTO_INIT_ZERO = 2, + AUTO_INIT_CXX26 = 3 }; /* Initialization of padding bits with zeros. */ diff --git a/gcc/fold-const.cc b/gcc/fold-const.cc index fe7a5fee5e25..e8cfee81553e 100644 --- a/gcc/fold-const.cc +++ b/gcc/fold-const.cc @@ -25,7 +25,7 @@ along with GCC; see the file COPYING3. If not see @@ This would also make life easier when this technology is used @@ for cross-compilers. */ -/* The entry points in this file are fold, size_int_wide and size_binop. +/* The entry points in this file are fold, size_int and size_binop. fold takes a tree as argument and returns a simplified tree. diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index d4ea58f5d194..08bc1b3d8bf0 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,264 @@ +2025-10-08 Harald Anlauf + + PR fortran/49111 + * decl.cc (verify_bind_c_sym): Modify condition for generation of + accessibility warning, and adjust warning message. + +2025-10-08 Paul Thomas + + PR fortran/93175 + PR fortran/102240 + PR fortran/102686 + * array.cc (match_array_element_spec): For pdt templates, call + gfc_correct_parm_expr to elimante extraneous symbols from the + bound expressions. + * decl.cc (correct_parm_expr, gfc_correct_parm_expr): New fcns + that remove symbols that are not PDT parameters from the type + specification expressions. + (insert_parameter_exprs): Process function symbols as if they + are variables in the substitution with parameter expressions. + (gfc_get_pdt_instance): Make sure that the parameter list of + PDT components is updated as the instance is built. Move the + construction of pdt_strings down a bit in the function and + remove the tie up with pdt_arrays. + * gfortran.h: Add prototype for gfc_correct_parm_expr. + * resolve.cc (resolve_component): Skip testing for constant + specification expressions in pdt_template component string + lengths and pdt_strings. + * trans-array.cc (structure_alloc_comps): Remove testing for + deferred parameters and instead make sure that components of + PDT type have parameters substituted with the parameter exprs + of the enclosing PDT. + +2025-10-07 Paul Thomas + + PR fortran/102901 + * trans-array.cc (structure_alloc_comps): Do not use + gfc_check_pdt_dummy with pointer or allocatable components. + +2025-10-04 Harald Anlauf + + PR fortran/107968 + * trans-io.cc (gfc_trans_transfer): Also scalarize I/O of section + of an array pointer. + +2025-10-03 Paul Thomas + + PR fortran/122089 + * decl.cc (gfc_get_pdt_instance): If gfc_extract_int is true an + error has occurred because the kind expr was not provided. Use + the template in this case and return MATCH_YES. + +2025-10-01 Harald Anlauf + + PR fortran/122080 + * trans-array.cc (gfc_conv_array_parameter): Wrap the derivation of + bounds and strides for the descriptor of an optional dummy array + argument by a test on argument presence when it is supposed to be + passed to an optional argument. + +2025-10-01 Paul Thomas + + PR fortran/122089 + * decl.cc (gfc_get_pdt_instance): If the pdt_template is use + associated, 'module' field should be copied to this instance. + +2025-09-30 Paul Thomas + + PR fortran/102241 + * gfortran.h: Add symbol attribute 'pdt_comp'. + * module.cc : Add 'pdt_comp' to 'ab_attribute' and 'attr_bits'. + (mio_symbol_attribute): Set 'pdt_comp'. + * resolve.cc (resolve_component): If a PDT component is found + in a non-PDT type, generate the PDT instance, if necessary, and + set the 'pdt_comp' attribute. Fix some whitespace issues. + * trans-decl.cc (gfc_get_symbol_decl, gfc_trans_deferred_vars): + If 'pdt_comp' set, initialize the PDT components. + * trans-stmt.cc (gfc_trans_deallocate): Verify that a typespec + parameter list is available for PDT components of ordinary + derived types. + +2025-09-27 Paul Thomas + + PR fortran/87908 + * interface.cc (check_interface0): Revert changes. + +2025-09-26 Harald Anlauf + + PR fortran/122002 + * decl.cc (gfc_get_pdt_instance): Initialize 'instance' to NULL + and set 'kind_value' to zero before calling gfc_extract_int. + * primary.cc (gfc_match_rvalue): Intitialize 'ctr_arglist' to + NULL and test for default values if gfc_get_pdt_instance + returns NULL. + +2025-09-25 Harald Anlauf + + PR fortran/121939 + * trans-types.cc (gfc_init_types): Set string flag for all + character types. + +2025-09-24 Mikael Morin + + PR fortran/122046 + * symbol.cc (gfc_get_procedure_ns): Try to find the namespace + among the list of contained namespaces before returning the + value from the formal_ns field. + +2025-09-24 Paul Thomas + + PR fortran/87908 + * interface.cc (check_interface0): If a vtable is found in the + interface list, check that it is either a subroutine or a + function. Let resolve.cc do any further checking. + +2025-09-22 Steve Kargl + + PR fortran/103508 + * decl.cc (gfc_match_end): Remove only the current partial + rather than removing the entire sibling chain. + +2025-09-21 Harald Anlauf + + PR fortran/109010 + * st.cc (gfc_free_statement): Also free components expr3 and expr4. + +2025-09-21 Thomas Koenig + + PR fortran/121161 + * invoke.texi: Mention that -ffrontend-optimize is required + for -fexternal-blas64. + * options.cc (gfc_post_options): Fatal error if -fexternal-blas64 + is specified without -ffrontend-optimize. + * trans-types.cc (gfc_init_kinds): Fatal error if -fexternal-blas64 + is specified on a system which does not have 64-bit ptrdiff_t. + +2025-09-21 Harald Anlauf + + PR fortran/108581 + * trans-array.cc (gfc_conv_expr_descriptor): Take the dynamic + string length into account when deriving the dataptr offset for + a deferred-length character array. + +2025-09-20 Paul Thomas + + PR fortran/83746 + * trans-decl.cc (gfc_trans_deferred_vars): If a procedure with + an non-allocatable, non-pointer explicit PDT result has no + default initializer, the parameterized components should be + allocated. + +2025-09-19 Paul Thomas + + PR fortran/83746 + * trans-array.cc (structure_alloc_comps): Add the pre and post + blocks to 'fnblock' for all the evaluations of parameterized + expressions in PDT component allocatation. + +2025-09-18 Paul Thomas + + PR fortran/121948 + * decl.cc (gfc_get_pdt_instance): Copy the contents of 'tb' and + not the pointer. + * primary.cc (gfc_match_rvalue): If there is only one actual + argument list, use if for the type spec parameter values. If + this fails try the default type specification values and use + the actual arguments for the component values. + * resolve.cc (build_init_assign): Don't initialize implicit PDT + function results. + +2025-09-17 Thomas Koenig + + * frontend-passes.cc (optimize_namespace): Handle + flag_external_blas64. + (call_external_blas): If flag_external_blas is set, use + gfc_integer_4_kind as the argument kind, gfc_integer_8_kind otherwise. + * gfortran.h (gfc_integer_8_kind): Define. + * invoke.texi: Document -fexternal-blas64. + * lang.opt: Add -fexternal-blas64. + * lang.opt.urls: Regenerated. + * options.cc (gfc_post_options): -fexternal-blas is incompatible + with -fexternal-blas64. + +2025-09-15 Paul Thomas + + PR fortran/83763 + * trans-decl.cc (gfc_trans_deferred_vars): Ensure that the + parameterized components of PDTs that do not have allocatable + components are deallocated on leaving scope. + * trans-expr.cc (gfc_trans_assignment_1): Do a dependency check + on PDT assignments. If there is a dependency between lhs and + rhs, deallocate the lhs parameterized components after the rhs + has been evaluated. + +2025-09-14 Yuao Ma + + * dump-parse-tree.cc (show_expr): Add support for EXPR_CONDITIONAL. + * expr.cc (gfc_get_conditional_expr): Add cond-expr constructor. + (gfc_copy_expr, free_expr0, gfc_is_constant_expr, + simplify_conditional, gfc_simplify_expr, gfc_check_init_expr, + check_restricted, gfc_traverse_expr): Add support for EXPR_CONDITIONAL. + * frontend-passes.cc (gfc_expr_walker): Ditto. + * gfortran.h (enum expr_t): Add EXPR_CONDITIONAL. + (gfc_get_operator_expr): Format fix. + (gfc_get_conditional_expr): New decl. + * matchexp.cc + (match_conditional, match_primary): Parsing for EXPR_CONDITIONAL. + * module.cc (mio_expr): Add support for EXPR_CONDITIONAL. + * resolve.cc (resolve_conditional, gfc_resolve_expr): Ditto. + * trans-array.cc (gfc_walk_conditional_expr, gfc_walk_subexpr): Ditto. + * trans-expr.cc + (gfc_conv_conditional_expr): Codegen for EXPR_CONDITIONAL. + (gfc_apply_interface_mapping_to_expr, gfc_conv_expr, + gfc_conv_expr_reference): Add support for EXPR_CONDITIONAL. + +2025-09-11 Harald Anlauf + + PR fortran/121616 + * primary.cc (gfc_variable_attr): Properly set dimension attribute + from a component ref. + +2025-09-09 Harald Anlauf + + * trans-intrinsic.cc (conv_intrinsic_fstat_lstat_stat_sub): Init + some variables. + +2025-09-09 Harald Anlauf + + PR fortran/82480 + * check.cc (error_unsupported_kind): Helper function to report an + unsupported kind of an argument. + (check_minrange4): Helper function to report if an integer variable + does not have a decimal range of at least four. + (gfc_check_fstat): Adjust checks for generalization of instrinsic + function FSTAT. + (gfc_check_fstat_sub): Likewise for subroutine FSTAT. + (gfc_check_stat): Likewise for functio STAT. + (gfc_check_stat_sub): Likewise for subroutine STAT. + * intrinsic.texi: Document generalized versions of intrinsics + STAT/LSTAT/FSTAT. + * iresolve.cc (gfc_resolve_stat): STAT function result shall have + the same kind as the VALUES argument. + (gfc_resolve_lstat): Likewise for LSTAT. + (gfc_resolve_fstat): Likewise for FSTAT. + (gfc_resolve_stat_sub): Resolve proper library subroutine for STAT. + (gfc_resolve_lstat_sub): Likewise for LSTAT. + * trans-decl.cc (gfc_build_intrinsic_function_decls): Declare + fndecls for required subroutines in runtine library. + * trans-intrinsic.cc (conv_intrinsic_fstat_lstat_stat_sub): Emit + runtime wrapper code for the library functions, taking care of + possible kind conversion of the optional STATUS argument of the + subroutine versions of the intrinsics. + (gfc_conv_intrinsic_subroutine): Use it. + * trans.h (GTY): Declare prototypes. + +2025-09-08 Paul Thomas + + PR fortran/84008 + * decl.cc (insert_parameter_exprs): Correct the typespec of new + variable declarations, where the type is set to BT_PROCEDURE as + a precaution for resolution of the whole program unit. + 2025-09-06 Paul Thomas PR fortran/84119 diff --git a/gcc/fortran/array.cc b/gcc/fortran/array.cc index fa177fa91f7e..8f0004992e81 100644 --- a/gcc/fortran/array.cc +++ b/gcc/fortran/array.cc @@ -566,6 +566,7 @@ match_array_element_spec (gfc_array_spec *as) gfc_expr **upper, **lower; match m; int rank; + bool is_pdt_template; rank = as->rank == -1 ? 0 : as->rank; lower = &as->lower[rank + as->corank - 1]; @@ -613,6 +614,13 @@ match_array_element_spec (gfc_array_spec *as) return AS_UNKNOWN; } + is_pdt_template = gfc_current_block () + && gfc_current_block ()->attr.pdt_template + && gfc_current_block ()->f2k_derived; + + if ((*upper)->expr_type != EXPR_CONSTANT && is_pdt_template) + gfc_correct_parm_expr (gfc_current_block (), upper); + if (gfc_match_char (':') == MATCH_NO) { *lower = gfc_get_int_expr (gfc_default_integer_kind, NULL, 1); @@ -645,6 +653,9 @@ match_array_element_spec (gfc_array_spec *as) return AS_UNKNOWN; } + if ((*upper)->expr_type != EXPR_CONSTANT && is_pdt_template) + gfc_correct_parm_expr (gfc_current_block (), upper); + return AS_EXPLICIT; } diff --git a/gcc/fortran/check.cc b/gcc/fortran/check.cc index 80aac89c3334..1f170131ae14 100644 --- a/gcc/fortran/check.cc +++ b/gcc/fortran/check.cc @@ -1107,6 +1107,36 @@ kind_value_check (gfc_expr *e, int n, int k) } +/* Error message for an actual argument with an unsupported kind value. */ + +static void +error_unsupported_kind (gfc_expr *e, int n) +{ + gfc_error ("Not supported: %qs argument of %qs intrinsic at %L with kind %d", + gfc_current_intrinsic_arg[n]->name, + gfc_current_intrinsic, &e->where, e->ts.kind); + return; +} + + +/* Check if the decimal exponent range of an integer variable is at least four + so that it is large enough to e.g. hold errno values and the values of + LIBERROR_* from libgfortran.h. */ + +static bool +check_minrange4 (gfc_expr *e, int n) +{ + if (e->ts.kind >= 2) + return true; + + gfc_error ("%qs argument of %qs intrinsic at %L must have " + "a decimal exponent range of at least four", + gfc_current_intrinsic_arg[n]->name, + gfc_current_intrinsic, &e->where); + return false; +} + + /* Make sure an expression is a variable. */ static bool @@ -6574,10 +6604,15 @@ gfc_check_fstat (gfc_expr *unit, gfc_expr *values) if (!scalar_check (unit, 0)) return false; - if (!type_check (values, 1, BT_INTEGER) - || !kind_value_check (unit, 0, gfc_default_integer_kind)) + if (!type_check (values, 1, BT_INTEGER)) return false; + if (values->ts.kind != 4 && values->ts.kind != 8) + { + error_unsupported_kind (values, 1); + return false; + } + if (!array_check (values, 1)) return false; @@ -6601,7 +6636,7 @@ gfc_check_fstat_sub (gfc_expr *unit, gfc_expr *values, gfc_expr *status) return true; if (!type_check (status, 2, BT_INTEGER) - || !kind_value_check (status, 2, gfc_default_integer_kind)) + || !check_minrange4 (status, 2)) return false; if (!scalar_check (status, 2)) @@ -6654,10 +6689,15 @@ gfc_check_stat (gfc_expr *name, gfc_expr *values) if (!kind_value_check (name, 0, gfc_default_character_kind)) return false; - if (!type_check (values, 1, BT_INTEGER) - || !kind_value_check (values, 1, gfc_default_integer_kind)) + if (!type_check (values, 1, BT_INTEGER)) return false; + if (values->ts.kind != 4 && values->ts.kind != 8) + { + error_unsupported_kind (values, 1); + return false; + } + if (!array_check (values, 1)) return false; @@ -6681,7 +6721,7 @@ gfc_check_stat_sub (gfc_expr *name, gfc_expr *values, gfc_expr *status) return true; if (!type_check (status, 2, BT_INTEGER) - || !kind_value_check (status, 2, gfc_default_integer_kind)) + || !check_minrange4 (status, 2)) return false; if (!scalar_check (status, 2)) diff --git a/gcc/fortran/decl.cc b/gcc/fortran/decl.cc index 9fe697cd5498..3fba8b1af396 100644 --- a/gcc/fortran/decl.cc +++ b/gcc/fortran/decl.cc @@ -3790,6 +3790,48 @@ match_record_decl (char *name) } + /* In parsing a PDT, it is possible that one of the type parameters has the + same name as a previously declared symbol that is not a type parameter. + Intercept this now by looking for the symtree in f2k_derived. */ + +static bool +correct_parm_expr (gfc_expr* e, gfc_symbol* pdt, int* f ATTRIBUTE_UNUSED) +{ + if (!e || (e->expr_type != EXPR_VARIABLE && e->expr_type != EXPR_FUNCTION)) + return false; + + if (!(e->symtree->n.sym->attr.pdt_len + || e->symtree->n.sym->attr.pdt_kind)) + { + gfc_symtree *st; + st = gfc_find_symtree (pdt->f2k_derived->sym_root, + e->symtree->n.sym->name); + if (st && st->n.sym + && (st->n.sym->attr.pdt_len || st->n.sym->attr.pdt_kind)) + { + gfc_expr *new_expr; + gfc_set_sym_referenced (st->n.sym); + new_expr = gfc_get_expr (); + new_expr->ts = st->n.sym->ts; + new_expr->expr_type = EXPR_VARIABLE; + new_expr->symtree = st; + new_expr->where = e->where; + gfc_replace_expr (e, new_expr); + } + } + + return false; +} + + +void +gfc_correct_parm_expr (gfc_symbol *pdt, gfc_expr **bound) +{ + if (!*bound || (*bound)->expr_type == EXPR_CONSTANT) + return; + gfc_traverse_expr (*bound, pdt, &correct_parm_expr, 0); +} + /* This function uses the gfc_actual_arglist 'type_param_spec_list' as a source of expressions to substitute into the possibly parameterized expression 'e'. Using a list is inefficient but should not be too bad since the @@ -3801,12 +3843,13 @@ insert_parameter_exprs (gfc_expr* e, gfc_symbol* sym ATTRIBUTE_UNUSED, gfc_actual_arglist *param; gfc_expr *copy; - if (e->expr_type != EXPR_VARIABLE) + if (e->expr_type != EXPR_VARIABLE && e->expr_type != EXPR_FUNCTION) return false; gcc_assert (e->symtree); if (e->symtree->n.sym->attr.pdt_kind - || (*f != 0 && e->symtree->n.sym->attr.pdt_len)) + || (*f != 0 && e->symtree->n.sym->attr.pdt_len) + || (e->expr_type == EXPR_FUNCTION && e->symtree->n.sym)) { for (param = type_param_spec_list; param; param = param->next) if (strcmp (e->symtree->n.sym->name, param->name) == 0) @@ -3857,7 +3900,7 @@ gfc_get_pdt_instance (gfc_actual_arglist *param_list, gfc_symbol **sym, /* The symbol for the parameter in the template f2k_namespace. */ gfc_symbol *param; /* The hoped for instance of the PDT. */ - gfc_symbol *instance; + gfc_symbol *instance = NULL; /* The list of parameters appearing in the PDT declaration. */ gfc_formal_arglist *type_param_name_list; /* Used to store the parameter specification list during recursive calls. */ @@ -4037,7 +4080,16 @@ gfc_get_pdt_instance (gfc_actual_arglist *param_list, gfc_symbol **sym, goto error_return; } - gfc_extract_int (kind_expr, &kind_value); + kind_value = 0; + /* This can come about during the parsing of nested pdt_templates. An + error arises because the KIND parameter expression has not been + provided. Use the template instead of an incorrect instance. */ + if (gfc_extract_int (kind_expr, &kind_value)) + { + gfc_free_actual_arglist (type_param_spec_list); + return MATCH_YES; + } + sprintf (name + strlen (name), "_%d", kind_value); if (!name_seen && actual_param) @@ -4075,6 +4127,8 @@ gfc_get_pdt_instance (gfc_actual_arglist *param_list, gfc_symbol **sym, /* Start building the new instance of the parameterized type. */ gfc_copy_attr (&instance->attr, &pdt->attr, &pdt->declared_at); + if (pdt->attr.use_assoc) + instance->module = pdt->module; instance->attr.pdt_template = 0; instance->attr.pdt_type = 1; instance->declared_at = gfc_current_locus; @@ -4092,7 +4146,7 @@ gfc_get_pdt_instance (gfc_actual_arglist *param_list, gfc_symbol **sym, if (c1->tb) { c2->tb = gfc_get_tbp (); - c2->tb = c1->tb; + *c2->tb = *c1->tb; } /* The order of declaration of the type_specs might not be the @@ -4130,7 +4184,7 @@ gfc_get_pdt_instance (gfc_actual_arglist *param_list, gfc_symbol **sym, /* Now obtain the PDT instance for the extended type. */ c2->param_list = type_param_spec_list; m = gfc_get_pdt_instance (type_param_spec_list, &c2->ts.u.derived, - NULL); + &c2->param_list); type_param_spec_list = old_param_spec_list; c2->ts.u.derived->refs++; @@ -4194,20 +4248,6 @@ gfc_get_pdt_instance (gfc_actual_arglist *param_list, gfc_symbol **sym, } } - /* Similarly, set the string length if parameterized. */ - if (c1->ts.type == BT_CHARACTER - && c1->ts.u.cl->length - && gfc_derived_parameter_expr (c1->ts.u.cl->length)) - { - gfc_expr *e; - e = gfc_copy_expr (c1->ts.u.cl->length); - gfc_insert_kind_parameter_exprs (e); - gfc_simplify_expr (e, 1); - c2->ts.u.cl = gfc_new_charlen (gfc_current_ns, NULL); - c2->ts.u.cl->length = e; - c2->attr.pdt_string = 1; - } - /* Set up either the KIND/LEN initializer, if constant, or the parameterized expression. Use the template initializer if one is not already set in this instance. */ @@ -4272,7 +4312,8 @@ gfc_get_pdt_instance (gfc_actual_arglist *param_list, gfc_symbol **sym, gfc_free_expr (c2->as->upper[i]); c2->as->upper[i] = e; } - c2->attr.pdt_array = pdt_array ? 1 : c2->attr.pdt_string; + + c2->attr.pdt_array = 1; if (c1->initializer) { c2->initializer = gfc_copy_expr (c1->initializer); @@ -4281,6 +4322,20 @@ gfc_get_pdt_instance (gfc_actual_arglist *param_list, gfc_symbol **sym, } } + /* Similarly, set the string length if parameterized. */ + if (c1->ts.type == BT_CHARACTER + && c1->ts.u.cl->length + && gfc_derived_parameter_expr (c1->ts.u.cl->length)) + { + gfc_expr *e; + e = gfc_copy_expr (c1->ts.u.cl->length); + gfc_insert_kind_parameter_exprs (e); + gfc_simplify_expr (e, 1); + gfc_free_expr (c2->ts.u.cl->length); + c2->ts.u.cl->length = e; + c2->attr.pdt_string = 1; + } + /* Recurse into this function for PDT components. */ if ((c1->ts.type == BT_DERIVED || c1->ts.type == BT_CLASS) && c1->ts.u.derived && c1->ts.u.derived->attr.pdt_template) @@ -4293,15 +4348,18 @@ gfc_get_pdt_instance (gfc_actual_arglist *param_list, gfc_symbol **sym, /* Substitute the template parameters with the expressions from the specification list. */ for (;actual_param; actual_param = actual_param->next) - gfc_insert_parameter_exprs (actual_param->expr, - type_param_spec_list); + { + gfc_correct_parm_expr (pdt, &actual_param->expr); + gfc_insert_parameter_exprs (actual_param->expr, + type_param_spec_list); + } /* Now obtain the PDT instance for the component. */ old_param_spec_list = type_param_spec_list; - m = gfc_get_pdt_instance (params, &c2->ts.u.derived, NULL); + m = gfc_get_pdt_instance (params, &c2->ts.u.derived, + &c2->param_list); type_param_spec_list = old_param_spec_list; - c2->param_list = params; if (!(c2->attr.pointer || c2->attr.allocatable)) c2->initializer = gfc_default_initializer (&c2->ts); @@ -6362,15 +6420,17 @@ verify_bind_c_sym (gfc_symbol *tmp_sym, gfc_typespec *ts, &(tmp_sym->declared_at)); } - /* See if the symbol has been marked as private. If it has, make sure - there is no binding label and warn the user if there is one. */ + /* See if the symbol has been marked as private. If it has, warn if + there is a binding label with default binding name. */ if (tmp_sym->attr.access == ACCESS_PRIVATE - && tmp_sym->binding_label) - /* Use gfc_warning_now because we won't say that the symbol fails - just because of this. */ - gfc_warning_now (0, "Symbol %qs at %L is marked PRIVATE but has been " - "given the binding label %qs", tmp_sym->name, - &(tmp_sym->declared_at), tmp_sym->binding_label); + && tmp_sym->binding_label + && strcmp (tmp_sym->name, tmp_sym->binding_label) == 0 + && (tmp_sym->attr.flavor == FL_VARIABLE + || tmp_sym->attr.if_source == IFSRC_DECL)) + gfc_warning (OPT_Wsurprising, + "Symbol %qs at %L is marked PRIVATE but is accessible " + "via its default binding name %qs", tmp_sym->name, + &(tmp_sym->declared_at), tmp_sym->binding_label); return retval; } @@ -8986,7 +9046,7 @@ gfc_match_end (gfc_statement *st) /* If we are missing an END BLOCK, we created a half-ready namespace. Remove it from the parent namespace's sibling list. */ - while (state == COMP_BLOCK && !got_matching_end) + if (state == COMP_BLOCK && !got_matching_end) { parent_ns = gfc_current_ns->parent; diff --git a/gcc/fortran/dump-parse-tree.cc b/gcc/fortran/dump-parse-tree.cc index 3cd2eeef11a6..eda0659d6e23 100644 --- a/gcc/fortran/dump-parse-tree.cc +++ b/gcc/fortran/dump-parse-tree.cc @@ -767,6 +767,16 @@ show_expr (gfc_expr *p) break; + case EXPR_CONDITIONAL: + fputc ('(', dumpfile); + show_expr (p->value.conditional.condition); + fputs (" ? ", dumpfile); + show_expr (p->value.conditional.true_expr); + fputs (" : ", dumpfile); + show_expr (p->value.conditional.false_expr); + fputc (')', dumpfile); + break; + case EXPR_COMPCALL: show_compcall (p); break; diff --git a/gcc/fortran/error.cc b/gcc/fortran/error.cc index ebf9e6197d22..8fde46ed6afc 100644 --- a/gcc/fortran/error.cc +++ b/gcc/fortran/error.cc @@ -24,6 +24,7 @@ along with GCC; see the file COPYING3. If not see for possible use later. If a line does not match a legal construction, then the saved error message is reported. */ +#define INCLUDE_VECTOR #include "config.h" #include "system.h" #include "coretypes.h" diff --git a/gcc/fortran/expr.cc b/gcc/fortran/expr.cc index 3dbf8cb287aa..a11ff79ab6be 100644 --- a/gcc/fortran/expr.cc +++ b/gcc/fortran/expr.cc @@ -116,6 +116,25 @@ gfc_get_operator_expr (locus *where, gfc_intrinsic_op op, return e; } +/* Get a new expression node that is an conditional expression node. */ + +gfc_expr * +gfc_get_conditional_expr (locus *where, gfc_expr *condition, + gfc_expr *true_expr, gfc_expr *false_expr) +{ + gfc_expr *e; + + e = gfc_get_expr (); + e->expr_type = EXPR_CONDITIONAL; + e->value.conditional.condition = condition; + e->value.conditional.true_expr = true_expr; + e->value.conditional.false_expr = false_expr; + + if (where) + e->where = *where; + + return e; +} /* Get a new expression node that is an structure constructor of given type and kind. */ @@ -393,6 +412,15 @@ gfc_copy_expr (gfc_expr *p) break; + case EXPR_CONDITIONAL: + q->value.conditional.condition + = gfc_copy_expr (p->value.conditional.condition); + q->value.conditional.true_expr + = gfc_copy_expr (p->value.conditional.true_expr); + q->value.conditional.false_expr + = gfc_copy_expr (p->value.conditional.false_expr); + break; + case EXPR_FUNCTION: q->value.function.actual = gfc_copy_actual_arglist (p->value.function.actual); @@ -502,6 +530,12 @@ free_expr0 (gfc_expr *e) gfc_free_expr (e->value.op.op2); break; + case EXPR_CONDITIONAL: + gfc_free_expr (e->value.conditional.condition); + gfc_free_expr (e->value.conditional.true_expr); + gfc_free_expr (e->value.conditional.false_expr); + break; + case EXPR_FUNCTION: gfc_free_actual_arglist (e->value.function.actual); break; @@ -1083,6 +1117,11 @@ gfc_is_constant_expr (gfc_expr *e) && (e->value.op.op2 == NULL || gfc_is_constant_expr (e->value.op.op2))); + case EXPR_CONDITIONAL: + return gfc_is_constant_expr (e->value.conditional.condition) + && gfc_is_constant_expr (e->value.conditional.true_expr) + && gfc_is_constant_expr (e->value.conditional.false_expr); + case EXPR_VARIABLE: /* The only context in which this can occur is in a parameterized derived type declaration, so returning true is OK. */ @@ -1354,6 +1393,43 @@ simplify_intrinsic_op (gfc_expr *p, int type) return true; } +/* Try to collapse conditional expressions. */ + +static bool +simplify_conditional (gfc_expr *p, int type) +{ + gfc_expr *condition, *true_expr, *false_expr; + + condition = p->value.conditional.condition; + true_expr = p->value.conditional.true_expr; + false_expr = p->value.conditional.false_expr; + + if (!gfc_simplify_expr (condition, type) + || !gfc_simplify_expr (true_expr, type) + || !gfc_simplify_expr (false_expr, type)) + return false; + + if (!gfc_is_constant_expr (condition)) + return true; + + p->value.conditional.condition = NULL; + p->value.conditional.true_expr = NULL; + p->value.conditional.false_expr = NULL; + + if (condition->value.logical) + { + gfc_replace_expr (p, true_expr); + gfc_free_expr (false_expr); + } + else + { + gfc_replace_expr (p, false_expr); + gfc_free_expr (true_expr); + } + gfc_free_expr (condition); + + return true; +} /* Subroutine to simplify constructor expressions. Mutually recursive with gfc_simplify_expr(). */ @@ -2459,6 +2535,11 @@ gfc_simplify_expr (gfc_expr *p, int type) return false; break; + case EXPR_CONDITIONAL: + if (!simplify_conditional (p, type)) + return false; + break; + case EXPR_VARIABLE: /* Only substitute array parameter variables if we are in an initialization expression, or we want a subsection. */ @@ -3133,6 +3214,20 @@ gfc_check_init_expr (gfc_expr *e) break; + case EXPR_CONDITIONAL: + t = gfc_check_init_expr (e->value.conditional.condition); + if (!t) + break; + t = gfc_check_init_expr (e->value.conditional.true_expr); + if (!t) + break; + t = gfc_check_init_expr (e->value.conditional.false_expr); + if (t) + t = gfc_simplify_expr (e, 0); + else + t = false; + break; + case EXPR_FUNCTION: t = false; @@ -3609,6 +3704,20 @@ check_restricted (gfc_expr *e) break; + case EXPR_CONDITIONAL: + t = check_restricted (e->value.conditional.condition); + if (!t) + break; + t = check_restricted (e->value.conditional.true_expr); + if (!t) + break; + t = check_restricted (e->value.conditional.false_expr); + if (t) + t = gfc_simplify_expr (e, 0); + else + t = false; + break; + case EXPR_FUNCTION: if (e->value.function.esym) { @@ -5700,6 +5809,15 @@ gfc_traverse_expr (gfc_expr *expr, gfc_symbol *sym, return true; break; + case EXPR_CONDITIONAL: + if (gfc_traverse_expr (expr->value.conditional.condition, sym, func, f)) + return true; + if (gfc_traverse_expr (expr->value.conditional.true_expr, sym, func, f)) + return true; + if (gfc_traverse_expr (expr->value.conditional.false_expr, sym, func, f)) + return true; + break; + default: gcc_unreachable (); break; diff --git a/gcc/fortran/frontend-passes.cc b/gcc/fortran/frontend-passes.cc index 02a0a2326a66..595c5095eaf9 100644 --- a/gcc/fortran/frontend-passes.cc +++ b/gcc/fortran/frontend-passes.cc @@ -1481,7 +1481,8 @@ optimize_namespace (gfc_namespace *ns) gfc_code_walker (&ns->code, convert_elseif, dummy_expr_callback, NULL); gfc_code_walker (&ns->code, cfe_code, cfe_expr_0, NULL); gfc_code_walker (&ns->code, optimize_code, optimize_expr, NULL); - if (flag_inline_matmul_limit != 0 || flag_external_blas) + if (flag_inline_matmul_limit != 0 || flag_external_blas + || flag_external_blas64) { bool found; do @@ -1496,7 +1497,7 @@ optimize_namespace (gfc_namespace *ns) NULL); } - if (flag_external_blas) + if (flag_external_blas || flag_external_blas64) gfc_code_walker (&ns->code, call_external_blas, dummy_expr_callback, NULL); @@ -4644,6 +4645,7 @@ call_external_blas (gfc_code **c, int *walk_subtrees ATTRIBUTE_UNUSED, enum matrix_case m_case; bool realloc_c; gfc_code **next_code_point; + int arg_kind; /* Many of the tests for inline matmul also apply here. */ @@ -4929,13 +4931,20 @@ call_external_blas (gfc_code **c, int *walk_subtrees ATTRIBUTE_UNUSED, transb, 1); actual->next = next; + if (flag_external_blas) + arg_kind = gfc_integer_4_kind; + else + { + gcc_assert (flag_external_blas64); + arg_kind = gfc_integer_8_kind; + } + c1 = get_array_inq_function (GFC_ISYM_SIZE, gfc_copy_expr (a->expr), 1, - gfc_integer_4_kind); + arg_kind); c2 = get_array_inq_function (GFC_ISYM_SIZE, gfc_copy_expr (b->expr), 2, - gfc_integer_4_kind); - + arg_kind); b1 = get_array_inq_function (GFC_ISYM_SIZE, gfc_copy_expr (b->expr), 1, - gfc_integer_4_kind); + arg_kind); /* Argument M. */ actual = next; @@ -4975,7 +4984,7 @@ call_external_blas (gfc_code **c, int *walk_subtrees ATTRIBUTE_UNUSED, actual = next; next = gfc_get_actual_arglist (); next->expr = get_array_inq_function (GFC_ISYM_SIZE, gfc_copy_expr (matrix_a), - 1, gfc_integer_4_kind); + 1, arg_kind); actual->next = next; /* Argument B. */ @@ -4988,7 +4997,7 @@ call_external_blas (gfc_code **c, int *walk_subtrees ATTRIBUTE_UNUSED, actual = next; next = gfc_get_actual_arglist (); next->expr = get_array_inq_function (GFC_ISYM_SIZE, gfc_copy_expr (matrix_b), - 1, gfc_integer_4_kind); + 1, arg_kind); actual->next = next; /* Argument BETA - set to zero. */ @@ -5012,7 +5021,7 @@ call_external_blas (gfc_code **c, int *walk_subtrees ATTRIBUTE_UNUSED, actual = next; next = gfc_get_actual_arglist (); next->expr = get_array_inq_function (GFC_ISYM_SIZE, gfc_copy_expr (expr1), - 1, gfc_integer_4_kind); + 1, arg_kind); actual->next = next; return 0; @@ -5218,6 +5227,11 @@ gfc_expr_walker (gfc_expr **e, walk_expr_fn_t exprfn, void *data) for (a = (*e)->value.function.actual; a; a = a->next) WALK_SUBEXPR (a->expr); break; + case EXPR_CONDITIONAL: + WALK_SUBEXPR ((*e)->value.conditional.condition); + WALK_SUBEXPR ((*e)->value.conditional.true_expr); + WALK_SUBEXPR ((*e)->value.conditional.false_expr); + break; case EXPR_COMPCALL: case EXPR_PPC: WALK_SUBEXPR ((*e)->value.compcall.base_object); diff --git a/gcc/fortran/gfortran.h b/gcc/fortran/gfortran.h index 482031d26005..a14202fda8fd 100644 --- a/gcc/fortran/gfortran.h +++ b/gcc/fortran/gfortran.h @@ -176,8 +176,19 @@ enum gfc_source_form /* Expression node types. */ enum expr_t - { EXPR_UNKNOWN = 0, EXPR_OP = 1, EXPR_FUNCTION, EXPR_CONSTANT, EXPR_VARIABLE, - EXPR_SUBSTRING, EXPR_STRUCTURE, EXPR_ARRAY, EXPR_NULL, EXPR_COMPCALL, EXPR_PPC +{ + EXPR_UNKNOWN = 0, + EXPR_OP = 1, + EXPR_FUNCTION, + EXPR_CONSTANT, + EXPR_VARIABLE, + EXPR_SUBSTRING, + EXPR_STRUCTURE, + EXPR_ARRAY, + EXPR_NULL, + EXPR_COMPCALL, + EXPR_PPC, + EXPR_CONDITIONAL, }; /* Array types. */ @@ -1022,7 +1033,7 @@ typedef struct /* These are the attributes required for parameterized derived types. */ unsigned pdt_kind:1, pdt_len:1, pdt_type:1, pdt_template:1, - pdt_array:1, pdt_string:1; + pdt_array:1, pdt_string:1, pdt_comp:1; /* This is omp_{out,in,priv,orig} artificial variable in !$OMP DECLARE REDUCTION. */ @@ -2809,8 +2820,14 @@ typedef struct gfc_expr character; gfc_constructor_base constructor; - } - value; + + struct + { + struct gfc_expr *condition; + struct gfc_expr *true_expr; + struct gfc_expr *false_expr; + } conditional; + } value; /* Used to store PDT expression lists associated with expressions. */ gfc_actual_arglist *param_list; @@ -3445,6 +3462,7 @@ extern hash_map *gfc_vectorized_builtins; /* Handling Parameterized Derived Types */ bool gfc_insert_parameter_exprs (gfc_expr *, gfc_actual_arglist *); +void gfc_correct_parm_expr (gfc_symbol *, gfc_expr **); match gfc_get_pdt_instance (gfc_actual_arglist *, gfc_symbol **, gfc_actual_arglist **); @@ -3655,6 +3673,8 @@ extern int gfc_character_storage_size; #define gfc_integer_4_kind 4 #define gfc_real_4_kind 4 +#define gfc_integer_8_kind 8 + /* symbol.cc */ void gfc_clear_new_implicit (void); bool gfc_add_new_implicit_range (int, int); @@ -3925,7 +3945,10 @@ bool gfc_is_ptr_fcn (gfc_expr *); gfc_expr *gfc_get_expr (void); gfc_expr *gfc_get_array_expr (bt type, int kind, locus *); gfc_expr *gfc_get_null_expr (locus *); -gfc_expr *gfc_get_operator_expr (locus *, gfc_intrinsic_op,gfc_expr *, gfc_expr *); +gfc_expr *gfc_get_operator_expr (locus *, gfc_intrinsic_op, gfc_expr *, + gfc_expr *); +gfc_expr *gfc_get_conditional_expr (locus *, gfc_expr *, gfc_expr *, + gfc_expr *); gfc_expr *gfc_get_structure_constructor_expr (bt, int, locus *); gfc_expr *gfc_get_constant_expr (bt, int, locus *); gfc_expr *gfc_get_character_expr (int, locus *, const char *, gfc_charlen_t len); diff --git a/gcc/fortran/intrinsic.texi b/gcc/fortran/intrinsic.texi index 6b9f4cd809aa..9012c2a5746d 100644 --- a/gcc/fortran/intrinsic.texi +++ b/gcc/fortran/intrinsic.texi @@ -6992,7 +6992,7 @@ GNU extension @end multitable @item @emph{Description}: -@code{FSTAT} is identical to @ref{STAT}, except that information about an +@code{FSTAT} is identical to @ref{STAT}, except that information about an already opened file is obtained. The elements in @code{VALUES} are the same as described by @ref{STAT}. @@ -7007,9 +7007,9 @@ Subroutine, function @multitable @columnfractions .15 .70 @item @var{UNIT} @tab An open I/O unit number of type @code{INTEGER}. @item @var{VALUES} @tab The type shall be @code{INTEGER, DIMENSION(13)} -of the default kind. +of either kind 4 or kind 8. @item @var{STATUS} @tab (Optional) status flag of type @code{INTEGER} -of the default kind. +of kind 2 or larger. Returns 0 on success and a system specific error code otherwise. @end multitable @@ -10314,9 +10314,9 @@ Subroutine, function @item @var{NAME} @tab The type shall be @code{CHARACTER} of the default kind, a valid path within the file system. @item @var{VALUES} @tab The type shall be @code{INTEGER, DIMENSION(13)} -of the default kind. +of either kind 4 or kind 8. @item @var{STATUS} @tab (Optional) status flag of type @code{INTEGER} -of the default kind. +of kind 2 or larger. Returns 0 on success and a system specific error code otherwise. @end multitable @@ -14440,28 +14440,28 @@ GNU extension @end multitable @item @emph{Description}: -This function returns information about a file. No permissions are required on -the file itself, but execute (search) permission is required on all of the +This function returns information about a file. No permissions are required on +the file itself, but execute (search) permission is required on all of the directories in path that lead to the file. The elements that are obtained and stored in the array @code{VALUES}: @multitable @columnfractions .15 .70 -@item @code{VALUES(1)} @tab Device ID -@item @code{VALUES(2)} @tab Inode number -@item @code{VALUES(3)} @tab File mode -@item @code{VALUES(4)} @tab Number of links -@item @code{VALUES(5)} @tab Owner's uid -@item @code{VALUES(6)} @tab Owner's gid -@item @code{VALUES(7)} @tab ID of device containing directory entry for file (0 if not available) -@item @code{VALUES(8)} @tab File size (bytes) -@item @code{VALUES(9)} @tab Last access time -@item @code{VALUES(10)} @tab Last modification time -@item @code{VALUES(11)} @tab Last file status change time -@item @code{VALUES(12)} @tab Preferred I/O block size (-1 if not available) +@item @code{VALUES(1)} @tab Device ID +@item @code{VALUES(2)} @tab Inode number +@item @code{VALUES(3)} @tab File mode +@item @code{VALUES(4)} @tab Number of links +@item @code{VALUES(5)} @tab Owner's uid +@item @code{VALUES(6)} @tab Owner's gid +@item @code{VALUES(7)} @tab ID of device containing directory entry for file (0 if not available) +@item @code{VALUES(8)} @tab File size (bytes) +@item @code{VALUES(9)} @tab Last access time +@item @code{VALUES(10)} @tab Last modification time +@item @code{VALUES(11)} @tab Last file status change time +@item @code{VALUES(12)} @tab Preferred I/O block size (-1 if not available) @item @code{VALUES(13)} @tab Number of blocks allocated (-1 if not available) @end multitable -Not all these elements are relevant on all systems. +Not all these elements are relevant on all systems. If an element is not relevant, it is returned as 0. If the value of an element would overflow the range of default integer, a -1 is returned instead. @@ -14477,9 +14477,9 @@ Subroutine, function @item @var{NAME} @tab The type shall be @code{CHARACTER}, of the default kind and a valid path within the file system. @item @var{VALUES} @tab The type shall be @code{INTEGER, DIMENSION(13)} -of the default kind. +of either kind 4 or kind 8. @item @var{STATUS} @tab (Optional) status flag of type @code{INTEGER} -of the default kind. +of kind 2 or larger. Returns 0 on success and a system specific error code otherwise. @end multitable diff --git a/gcc/fortran/invoke.texi b/gcc/fortran/invoke.texi index 0b893e876a5d..a65f2d1cc34f 100644 --- a/gcc/fortran/invoke.texi +++ b/gcc/fortran/invoke.texi @@ -189,7 +189,7 @@ and warnings}. -fbounds-check -ftail-call-workaround -ftail-call-workaround=@var{n} -fcheck-array-temporaries -fcheck= --fcoarray= -fexternal-blas -ff2c +-fcoarray= -fexternal-blas -fexternal-blas64 -ff2c -ffrontend-loop-interchange -ffrontend-optimize -finit-character=@var{n} -finit-integer=@var{n} -finit-local-zero -finit-derived -finit-logical= @@ -2014,13 +2014,27 @@ for some matrix operations like @code{MATMUL}, instead of using our own algorithms, if the size of the matrices involved is larger than a given limit (see @option{-fblas-matmul-limit}). This may be profitable if an optimized vendor BLAS library is available. The BLAS library has -to be specified at link time. +to be specified at link time. This option specifies a BLAS library +with integer arguments of default kind (32 bits). It cannot be used +together with @option{-fexternal-blas64}. + +@opindex fexternal-blas64 +@item -fexternal-blas64 +makes @command{gfortran} generate calls to BLAS functions +for some matrix operations like @code{MATMUL}, instead of using our own +algorithms, if the size of the matrices involved is larger than a given +limit (see @option{-fblas-matmul-limit}). This may be profitable if an +optimized vendor BLAS library is available. The BLAS library has +to be specified at link time. This option specifies a BLAS library +with integer arguments of @code{KIND=8} (64 bits). It cannot be used +together with @option{-fexternal-blas}, and requires a 64-bit system. +This option also requires @option{-ffrontend-optimize}. @opindex fblas-matmul-limit @item -fblas-matmul-limit=@var{n} -Only significant when @option{-fexternal-blas} is in effect. -Matrix multiplication of matrices with size larger than (or equal to) @var{n} -is performed by calls to BLAS functions, while others are +Only significant when @option{-fexternal-blas} or @option{-fexternal-blas64} +are in effect. Matrix multiplication of matrices with size larger than or equal +to @var{n} is performed by calls to BLAS functions, while others are handled by @command{gfortran} internal algorithms. If the matrices involved are not square, the size comparison is performed using the geometric mean of the dimensions of the argument and result matrices. diff --git a/gcc/fortran/iresolve.cc b/gcc/fortran/iresolve.cc index da354ab5056e..a821332ecb2e 100644 --- a/gcc/fortran/iresolve.cc +++ b/gcc/fortran/iresolve.cc @@ -3000,30 +3000,28 @@ gfc_resolve_sqrt (gfc_expr *f, gfc_expr *x) /* Resolve the g77 compatibility function STAT AND FSTAT. */ void -gfc_resolve_stat (gfc_expr *f, gfc_expr *n ATTRIBUTE_UNUSED, - gfc_expr *a ATTRIBUTE_UNUSED) +gfc_resolve_stat (gfc_expr *f, gfc_expr *n ATTRIBUTE_UNUSED, gfc_expr *a) { f->ts.type = BT_INTEGER; - f->ts.kind = gfc_default_integer_kind; + f->ts.kind = a->ts.kind; f->value.function.name = gfc_get_string (PREFIX ("stat_i%d"), f->ts.kind); } void -gfc_resolve_lstat (gfc_expr *f, gfc_expr *n ATTRIBUTE_UNUSED, - gfc_expr *a ATTRIBUTE_UNUSED) +gfc_resolve_lstat (gfc_expr *f, gfc_expr *n ATTRIBUTE_UNUSED, gfc_expr *a) { f->ts.type = BT_INTEGER; - f->ts.kind = gfc_default_integer_kind; + f->ts.kind = a->ts.kind; f->value.function.name = gfc_get_string (PREFIX ("lstat_i%d"), f->ts.kind); } void -gfc_resolve_fstat (gfc_expr *f, gfc_expr *n, gfc_expr *a ATTRIBUTE_UNUSED) +gfc_resolve_fstat (gfc_expr *f, gfc_expr *n, gfc_expr *a) { f->ts.type = BT_INTEGER; - f->ts.kind = gfc_default_integer_kind; + f->ts.kind = a->ts.kind; if (n->ts.kind != f->ts.kind) gfc_convert_type (n, &f->ts, 2); @@ -4159,7 +4157,9 @@ void gfc_resolve_stat_sub (gfc_code *c) { const char *name; - name = gfc_get_string (PREFIX ("stat_i%d_sub"), gfc_default_integer_kind); + gfc_typespec *ts; + ts = &c->ext.actual->next->expr->ts; + name = gfc_get_string (PREFIX ("stat_i%d_sub"), ts->kind); c->resolved_sym = gfc_get_intrinsic_sub_symbol (name); } @@ -4168,7 +4168,9 @@ void gfc_resolve_lstat_sub (gfc_code *c) { const char *name; - name = gfc_get_string (PREFIX ("lstat_i%d_sub"), gfc_default_integer_kind); + gfc_typespec *ts; + ts = &c->ext.actual->next->expr->ts; + name = gfc_get_string (PREFIX ("lstat_i%d_sub"), ts->kind); c->resolved_sym = gfc_get_intrinsic_sub_symbol (name); } diff --git a/gcc/fortran/lang.opt b/gcc/fortran/lang.opt index 7826a1ab5fae..33710d0d920c 100644 --- a/gcc/fortran/lang.opt +++ b/gcc/fortran/lang.opt @@ -566,6 +566,10 @@ fexternal-blas Fortran Var(flag_external_blas) Specify that an external BLAS library should be used for matmul calls on large-size arrays. +fexternal-blas64 +Fortran Var(flag_external_blas64) +Use an external BLAS library with 64-bit indexing for matmul on large-size arrays. + ff2c Fortran Var(flag_f2c) Use f2c calling convention. diff --git a/gcc/fortran/lang.opt.urls b/gcc/fortran/lang.opt.urls index 4972ff8b7b9b..4a51f5a1be28 100644 --- a/gcc/fortran/lang.opt.urls +++ b/gcc/fortran/lang.opt.urls @@ -295,6 +295,9 @@ LangUrlSuffix_Fortran(gfortran/Developer-Options.html#index-fdump-parse-tree) fexternal-blas LangUrlSuffix_Fortran(gfortran/Code-Gen-Options.html#index-fexternal-blas) +fexternal-blas64 +LangUrlSuffix_Fortran(gfortran/Code-Gen-Options.html#index-fexternal-blas64) + ff2c LangUrlSuffix_Fortran(gfortran/Code-Gen-Options.html#index-ff2c) diff --git a/gcc/fortran/matchexp.cc b/gcc/fortran/matchexp.cc index 9b66243b4fa1..e3a992538413 100644 --- a/gcc/fortran/matchexp.cc +++ b/gcc/fortran/matchexp.cc @@ -138,6 +138,65 @@ gfc_get_parentheses (gfc_expr *e) return e2; } +/* Match a conditional expression. */ + +static match +match_conditional (gfc_expr **result) +{ + gfc_expr *condition, *true_expr, *false_expr; + locus where; + match m; + + where = gfc_current_locus; + + m = gfc_match_expr (&condition); + if (m != MATCH_YES) + { + gfc_error (expression_syntax); + return MATCH_ERROR; + } + + m = gfc_match_char ('?'); + if (m != MATCH_YES) + { + *result = condition; + return MATCH_YES; + } + else if (!gfc_notify_std (GFC_STD_F2023, "Conditional expression at %L", + &where)) + { + gfc_free_expr (condition); + return MATCH_ERROR; + } + + gfc_gobble_whitespace (); + m = gfc_match_expr (&true_expr); + if (m != MATCH_YES) + { + gfc_free_expr (condition); + return m; + } + + m = gfc_match_char (':'); + if (m != MATCH_YES) + { + gfc_error ("Expected ':' in conditional expression at %C"); + gfc_free_expr (condition); + gfc_free_expr (true_expr); + return MATCH_ERROR; + } + + m = match_conditional (&false_expr); + if (m != MATCH_YES) + { + gfc_free_expr (condition); + gfc_free_expr (true_expr); + return m; + } + + *result = gfc_get_conditional_expr (&where, condition, true_expr, false_expr); + return MATCH_YES; +} /* Match a primary expression. */ @@ -163,20 +222,20 @@ match_primary (gfc_expr **result) if (gfc_match_char ('(') != MATCH_YES) return MATCH_NO; - m = gfc_match_expr (&e); - if (m == MATCH_NO) - goto syntax; - if (m == MATCH_ERROR) + m = match_conditional (&e); + if (m != MATCH_YES) return m; m = gfc_match_char (')'); if (m == MATCH_NO) gfc_error ("Expected a right parenthesis in expression at %C"); - /* Now we have the expression inside the parentheses, build the - expression pointing to it. By 7.1.7.2, any expression in - parentheses shall be treated as a data entity. */ - *result = gfc_get_parentheses (e); + /* Now we have the expression inside the parentheses, build the expression + pointing to it. By 7.1.7.2, any expression in parentheses shall be treated + as a data entity. + Note that if the expression is a conditional expression, we will omit the + extra parentheses. */ + *result = e->expr_type == EXPR_CONDITIONAL ? e : gfc_get_parentheses (e); if (m != MATCH_YES) { @@ -185,10 +244,6 @@ match_primary (gfc_expr **result) } return MATCH_YES; - -syntax: - gfc_error (expression_syntax); - return MATCH_ERROR; } diff --git a/gcc/fortran/module.cc b/gcc/fortran/module.cc index e05b08bd14ed..c489decec8dc 100644 --- a/gcc/fortran/module.cc +++ b/gcc/fortran/module.cc @@ -2093,7 +2093,7 @@ enum ab_attribute AB_OACC_DECLARE_COPYIN, AB_OACC_DECLARE_DEVICEPTR, AB_OACC_DECLARE_DEVICE_RESIDENT, AB_OACC_DECLARE_LINK, AB_OMP_DECLARE_TARGET_LINK, AB_PDT_KIND, AB_PDT_LEN, AB_PDT_TYPE, - AB_PDT_TEMPLATE, AB_PDT_ARRAY, AB_PDT_STRING, + AB_PDT_COMP, AB_PDT_TEMPLATE, AB_PDT_ARRAY, AB_PDT_STRING, AB_OACC_ROUTINE_LOP_GANG, AB_OACC_ROUTINE_LOP_WORKER, AB_OACC_ROUTINE_LOP_VECTOR, AB_OACC_ROUTINE_LOP_SEQ, AB_OACC_ROUTINE_NOHOST, @@ -2172,6 +2172,7 @@ static const mstring attr_bits[] = minit ("PDT_TEMPLATE", AB_PDT_TEMPLATE), minit ("PDT_ARRAY", AB_PDT_ARRAY), minit ("PDT_STRING", AB_PDT_STRING), + minit ("PDT_COMP", AB_PDT_COMP), minit ("OACC_ROUTINE_LOP_GANG", AB_OACC_ROUTINE_LOP_GANG), minit ("OACC_ROUTINE_LOP_WORKER", AB_OACC_ROUTINE_LOP_WORKER), minit ("OACC_ROUTINE_LOP_VECTOR", AB_OACC_ROUTINE_LOP_VECTOR), @@ -2404,6 +2405,8 @@ mio_symbol_attribute (symbol_attribute *attr) MIO_NAME (ab_attribute) (AB_PDT_LEN, attr_bits); if (attr->pdt_type) MIO_NAME (ab_attribute) (AB_PDT_TYPE, attr_bits); + if (attr->pdt_comp) + MIO_NAME (ab_attribute) (AB_PDT_COMP , attr_bits); if (attr->pdt_template) MIO_NAME (ab_attribute) (AB_PDT_TEMPLATE, attr_bits); if (attr->pdt_array) @@ -2681,6 +2684,9 @@ mio_symbol_attribute (symbol_attribute *attr) case AB_PDT_TYPE: attr->pdt_type = 1; break; + case AB_PDT_COMP: + attr->pdt_comp = 1; + break; case AB_PDT_TEMPLATE: attr->pdt_template = 1; break; @@ -3622,7 +3628,9 @@ static const mstring expr_types[] = { minit ("ARRAY", EXPR_ARRAY), minit ("NULL", EXPR_NULL), minit ("COMPCALL", EXPR_COMPCALL), - minit (NULL, -1) + minit ("PPC", EXPR_PPC), + minit ("CONDITIONAL", EXPR_CONDITIONAL), + minit (NULL, -1), }; /* INTRINSIC_ASSIGN is missing because it is used as an index for @@ -3843,6 +3851,12 @@ mio_expr (gfc_expr **ep) break; + case EXPR_CONDITIONAL: + mio_expr (&e->value.conditional.condition); + mio_expr (&e->value.conditional.true_expr); + mio_expr (&e->value.conditional.false_expr); + break; + case EXPR_FUNCTION: mio_symtree_ref (&e->symtree); mio_actual_arglist (&e->value.function.actual, false); diff --git a/gcc/fortran/options.cc b/gcc/fortran/options.cc index 821a8c88bbbb..21839ef4a4f9 100644 --- a/gcc/fortran/options.cc +++ b/gcc/fortran/options.cc @@ -504,12 +504,20 @@ gfc_post_options (const char **pfilename) flag_inline_matmul_limit = 30; } - /* Optimization implies front end optimization, unless the user + /* We can only have a 32-bit or a 64-bit version of BLAS, not both. */ + + if (flag_external_blas && flag_external_blas64) + gfc_fatal_error ("32- and 64-bit version of BLAS cannot both be specified"); + + /* Optimizationx implies front end optimization, unless the user specified it directly. */ if (flag_frontend_optimize == -1) flag_frontend_optimize = optimize && !optimize_debug; + if (flag_external_blas64 && !flag_frontend_optimize) + gfc_fatal_error ("-ffrontend-optimize required for -fexternal-blas64"); + /* Same for front end loop interchange. */ if (flag_frontend_loop_interchange == -1) diff --git a/gcc/fortran/primary.cc b/gcc/fortran/primary.cc index 6df95558bb15..fd03ceace51f 100644 --- a/gcc/fortran/primary.cc +++ b/gcc/fortran/primary.cc @@ -3057,12 +3057,14 @@ gfc_variable_attr (gfc_expr *expr, gfc_typespec *ts) if (comp->ts.type == BT_CLASS) { + dimension = CLASS_DATA (comp)->attr.dimension; codimension = CLASS_DATA (comp)->attr.codimension; pointer = CLASS_DATA (comp)->attr.class_pointer; allocatable = CLASS_DATA (comp)->attr.allocatable; } else { + dimension = comp->attr.dimension; codimension = comp->attr.codimension; if (expr->ts.type == BT_CLASS && strcmp (comp->name, "_data") == 0) pointer = comp->attr.class_pointer; @@ -4057,7 +4059,7 @@ gfc_match_rvalue (gfc_expr **result) /* Check to see if this is a PDT constructor. The format of these constructors is rather unusual: - name (type_params)(component_values) + name [(type_params)](component_values) where, component_values excludes the type_params. With the present gfortran representation this is rather awkward because the two are not distinguished, other than by their attributes. */ @@ -4065,30 +4067,50 @@ gfc_match_rvalue (gfc_expr **result) { gfc_symtree *pdt_st; gfc_symbol *pdt_sym; - gfc_actual_arglist *ctr_arglist, *tmp; + gfc_actual_arglist *ctr_arglist = NULL, *tmp; gfc_component *c; /* Obtain the template. */ gfc_find_sym_tree (gfc_dt_upper_string (name), NULL, 1, &pdt_st); if (pdt_st && pdt_st->n.sym && pdt_st->n.sym->attr.pdt_template) { + bool type_spec_list = false; pdt_sym = pdt_st->n.sym; + gfc_gobble_whitespace (); + /* Look for a second actual arglist. If present, try the first + for the type parameters. Otherwise, or if there is no match, + depend on default values by setting the type parameters to + NULL. */ + if (gfc_peek_ascii_char() == '(') + type_spec_list = true; /* Generate this instance using the type parameters from the first argument list and return the parameter list in ctr_arglist. */ m = gfc_get_pdt_instance (actual_arglist, &pdt_sym, &ctr_arglist); - if (m != MATCH_YES) + if (m != MATCH_YES || !ctr_arglist) { - m = MATCH_ERROR; - break; + if (ctr_arglist) + gfc_free_actual_arglist (ctr_arglist); + /* See if all the type parameters have default values. */ + m = gfc_get_pdt_instance (NULL, &pdt_sym, &ctr_arglist); + if (m != MATCH_YES) + { + m = MATCH_NO; + break; + } } - /* Now match the component_values. */ - m = gfc_match_actual_arglist (0, &actual_arglist); - if (m != MATCH_YES) + + /* Now match the component_values if the type parameters were + present. */ + if (type_spec_list) { - m = MATCH_ERROR; - break; + m = gfc_match_actual_arglist (0, &actual_arglist); + if (m != MATCH_YES) + { + m = MATCH_ERROR; + break; + } } /* Make sure that the component names are in place so that this @@ -4102,13 +4124,18 @@ gfc_match_rvalue (gfc_expr **result) tmp = tmp->next; } - gfc_get_ha_sym_tree (gfc_dt_lower_string (pdt_sym->name) , - &symtree); - symtree->n.sym = pdt_sym; - symtree->n.sym->ts.u.derived = pdt_sym; - symtree->n.sym->ts.type = BT_DERIVED; + gfc_find_sym_tree (gfc_dt_lower_string (pdt_sym->name), + NULL, 1, &symtree); + if (!symtree) + { + gfc_get_ha_sym_tree (gfc_dt_lower_string (pdt_sym->name) , + &symtree); + symtree->n.sym = pdt_sym; + symtree->n.sym->ts.u.derived = pdt_sym; + symtree->n.sym->ts.type = BT_DERIVED; + } - /* Do the appending. */ + /* Append the type_params and the component_values. */ for (tmp = ctr_arglist; tmp && tmp->next;) tmp = tmp->next; tmp->next = actual_arglist; diff --git a/gcc/fortran/resolve.cc b/gcc/fortran/resolve.cc index 1a7c9dddb15b..75270064ed43 100644 --- a/gcc/fortran/resolve.cc +++ b/gcc/fortran/resolve.cc @@ -4989,6 +4989,73 @@ resolve_operator (gfc_expr *e) return t; } +static bool +resolve_conditional (gfc_expr *expr) +{ + gfc_expr *condition, *true_expr, *false_expr; + + condition = expr->value.conditional.condition; + true_expr = expr->value.conditional.true_expr; + false_expr = expr->value.conditional.false_expr; + + if (!gfc_resolve_expr (condition) || !gfc_resolve_expr (true_expr) + || !gfc_resolve_expr (false_expr)) + return false; + + if (condition->ts.type != BT_LOGICAL || condition->rank != 0) + { + gfc_error ( + "Condition in conditional expression must be a scalar logical at %L", + &condition->where); + return false; + } + + if (true_expr->ts.type != false_expr->ts.type) + { + gfc_error ("expr at %L and expr at %L in conditional expression " + "must have the same declared type", + &true_expr->where, &false_expr->where); + return false; + } + + if (true_expr->ts.kind != false_expr->ts.kind) + { + gfc_error ("expr at %L and expr at %L in conditional expression " + "must have the same kind parameter", + &true_expr->where, &false_expr->where); + return false; + } + + if (true_expr->rank != false_expr->rank) + { + gfc_error ("expr at %L and expr at %L in conditional expression " + "must have the same rank", + &true_expr->where, &false_expr->where); + return false; + } + + /* TODO: support more data types for conditional expressions */ + if (true_expr->ts.type != BT_INTEGER && true_expr->ts.type != BT_LOGICAL + && true_expr->ts.type != BT_REAL && true_expr->ts.type != BT_COMPLEX) + { + gfc_error ("Sorry, only integer, logical, real and complex types " + "are currently supported for conditional expressions at %L", + &expr->where); + return false; + } + + if (true_expr->rank > 0) + { + gfc_error ("Sorry, array is currently unsupported for conditional " + "expressions at %L", + &expr->where); + return false; + } + + expr->ts = true_expr->ts; + expr->rank = true_expr->rank; + return true; +} /************** Array resolution subroutines **************/ @@ -8040,6 +8107,10 @@ gfc_resolve_expr (gfc_expr *e) t = resolve_operator (e); break; + case EXPR_CONDITIONAL: + t = resolve_conditional (e); + break; + case EXPR_FUNCTION: case EXPR_VARIABLE: @@ -14542,6 +14613,13 @@ build_init_assign (gfc_symbol *sym, gfc_expr *init) gfc_code *init_st; gfc_namespace *ns = sym->ns; + if (sym->attr.function && sym->result == sym + && sym->ts.type == BT_DERIVED && sym->ts.u.derived->attr.pdt_type) + { + gfc_free_expr (init); + return; + } + /* Search for the function namespace if this is a contained function without an explicit result. */ if (sym->attr.function && sym == sym->result @@ -16585,6 +16663,26 @@ resolve_component (gfc_component *c, gfc_symbol *sym) return false; } + if (c->ts.type == BT_DERIVED && c->ts.u.derived->attr.pdt_template + && !sym->attr.pdt_type && !sym->attr.pdt_template + && !(gfc_get_derived_super_type (sym) + && (gfc_get_derived_super_type (sym)->attr.pdt_type + || gfc_get_derived_super_type (sym)->attr.pdt_template))) + { + gfc_actual_arglist *type_spec_list; + if (gfc_get_pdt_instance (c->param_list, &c->ts.u.derived, + &type_spec_list) + != MATCH_YES) + return false; + gfc_free_actual_arglist (c->param_list); + c->param_list = type_spec_list; + if (!sym->attr.pdt_type) + sym->attr.pdt_comp = 1; + } + else if (c->ts.type == BT_DERIVED && c->ts.u.derived->attr.pdt_type + && !sym->attr.pdt_type) + sym->attr.pdt_comp = 1; + if (c->attr.proc_pointer && c->ts.interface) { gfc_symbol *ifc = c->ts.interface; @@ -16779,27 +16877,30 @@ resolve_component (gfc_component *c, gfc_symbol *sym) && gfc_find_typebound_proc (super_type, NULL, c->name, true, NULL)) { gfc_error ("Component %qs of %qs at %L has the same name as an" - " inherited type-bound procedure", - c->name, sym->name, &c->loc); + " inherited type-bound procedure", + c->name, sym->name, &c->loc); return false; } if (c->ts.type == BT_CHARACTER && !c->attr.proc_pointer - && !c->ts.deferred) - { - if (c->ts.u.cl->length == NULL - || (!resolve_charlen(c->ts.u.cl)) - || !gfc_is_constant_expr (c->ts.u.cl->length)) - { - gfc_error ("Character length of component %qs needs to " - "be a constant specification expression at %L", - c->name, - c->ts.u.cl->length ? &c->ts.u.cl->length->where : &c->loc); - return false; - } + && !c->ts.deferred) + { + if (sym->attr.pdt_template || c->attr.pdt_string) + gfc_correct_parm_expr (sym, &c->ts.u.cl->length); + + if (c->ts.u.cl->length == NULL + || !resolve_charlen(c->ts.u.cl) + || !gfc_is_constant_expr (c->ts.u.cl->length)) + { + gfc_error ("Character length of component %qs needs to " + "be a constant specification expression at %L", + c->name, + c->ts.u.cl->length ? &c->ts.u.cl->length->where : &c->loc); + return false; + } if (c->ts.u.cl->length && c->ts.u.cl->length->ts.type != BT_INTEGER) - { + { if (!c->ts.u.cl->length->error) { gfc_error ("Character length expression of component %qs at %L " @@ -16816,8 +16917,8 @@ resolve_component (gfc_component *c, gfc_symbol *sym) && !c->attr.pointer && !c->attr.allocatable) { gfc_error ("Character component %qs of %qs at %L with deferred " - "length must be a POINTER or ALLOCATABLE", - c->name, sym->name, &c->loc); + "length must be a POINTER or ALLOCATABLE", + c->name, sym->name, &c->loc); return false; } @@ -16832,14 +16933,14 @@ resolve_component (gfc_component *c, gfc_symbol *sym) sprintf (name, "_%s_length", c->name); strlen = gfc_find_component (sym, name, true, true, NULL); if (strlen == NULL) - { - if (!gfc_add_component (sym, name, &strlen)) - return false; - strlen->ts.type = BT_INTEGER; - strlen->ts.kind = gfc_charlen_int_kind; - strlen->attr.access = ACCESS_PRIVATE; - strlen->attr.artificial = 1; - } + { + if (!gfc_add_component (sym, name, &strlen)) + return false; + strlen->ts.type = BT_INTEGER; + strlen->ts.kind = gfc_charlen_int_kind; + strlen->attr.access = ACCESS_PRIVATE; + strlen->attr.artificial = 1; + } } if (c->ts.type == BT_DERIVED @@ -16849,27 +16950,27 @@ resolve_component (gfc_component *c, gfc_symbol *sym) && !c->ts.u.derived->attr.use_assoc && !gfc_check_symbol_access (c->ts.u.derived) && !gfc_notify_std (GFC_STD_F2003, "the component %qs is a " - "PRIVATE type and cannot be a component of " - "%qs, which is PUBLIC at %L", c->name, - sym->name, &sym->declared_at)) + "PRIVATE type and cannot be a component of " + "%qs, which is PUBLIC at %L", c->name, + sym->name, &sym->declared_at)) return false; if ((sym->attr.sequence || sym->attr.is_bind_c) && c->ts.type == BT_CLASS) { gfc_error ("Polymorphic component %s at %L in SEQUENCE or BIND(C) " - "type %s", c->name, &c->loc, sym->name); + "type %s", c->name, &c->loc, sym->name); return false; } if (sym->attr.sequence) { if (c->ts.type == BT_DERIVED && c->ts.u.derived->attr.sequence == 0) - { + { gfc_error ("Component %s of SEQUENCE type declared at %L does " - "not have the SEQUENCE attribute", - c->ts.u.derived->name, &sym->declared_at); - return false; - } + "not have the SEQUENCE attribute", + c->ts.u.derived->name, &sym->declared_at); + return false; + } } if (c->ts.type == BT_DERIVED && c->ts.u.derived->attr.generic) @@ -16877,7 +16978,7 @@ resolve_component (gfc_component *c, gfc_symbol *sym) else if (c->ts.type == BT_CLASS && c->attr.class_ok && CLASS_DATA (c)->ts.u.derived->attr.generic) CLASS_DATA (c)->ts.u.derived - = gfc_find_dt_in_generic (CLASS_DATA (c)->ts.u.derived); + = gfc_find_dt_in_generic (CLASS_DATA (c)->ts.u.derived); /* If an allocatable component derived type is of the same type as the enclosing derived type, we need a vtable generating so that @@ -16890,10 +16991,10 @@ resolve_component (gfc_component *c, gfc_symbol *sym) derived type list; even in formal namespaces, where derived type pointer components might not have been declared. */ if (c->ts.type == BT_DERIVED - && c->ts.u.derived - && c->ts.u.derived->components - && c->attr.pointer - && sym != c->ts.u.derived) + && c->ts.u.derived + && c->ts.u.derived->components + && c->attr.pointer + && sym != c->ts.u.derived) add_dt_to_dt_list (c->ts.u.derived); if (c->as && c->as->type != AS_DEFERRED @@ -16901,8 +17002,8 @@ resolve_component (gfc_component *c, gfc_symbol *sym) return false; if (!gfc_resolve_array_spec (c->as, - !(c->attr.pointer || c->attr.proc_pointer - || c->attr.allocatable))) + !(c->attr.pointer || c->attr.proc_pointer + || c->attr.allocatable))) return false; if (c->initializer && !sym->attr.vtype diff --git a/gcc/fortran/st.cc b/gcc/fortran/st.cc index f7f67b18b671..2281bf6e03b5 100644 --- a/gcc/fortran/st.cc +++ b/gcc/fortran/st.cc @@ -86,6 +86,10 @@ gfc_free_statement (gfc_code *p) gfc_free_expr (p->expr1); if (p->expr2) gfc_free_expr (p->expr2); + if (p->expr3) + gfc_free_expr (p->expr3); + if (p->expr4) + gfc_free_expr (p->expr4); switch (p->op) { diff --git a/gcc/fortran/symbol.cc b/gcc/fortran/symbol.cc index 81aa81df2eec..8211d926cf63 100644 --- a/gcc/fortran/symbol.cc +++ b/gcc/fortran/symbol.cc @@ -5500,7 +5500,16 @@ gfc_namespace * gfc_get_procedure_ns (gfc_symbol *sym) { if (sym->formal_ns - && sym->formal_ns->proc_name == sym) + && sym->formal_ns->proc_name == sym + /* For module procedures used in submodules, there are two namespaces. + The one generated by the host association of the module is directly + accessible through SYM->FORMAL_NS but doesn't have any parent set. + The one generated by the parser is only accessible by walking the + contained namespace but has its parent set. Prefer the one generated + by the parser below. */ + && !(sym->attr.used_in_submodule + && sym->attr.contained + && sym->formal_ns->parent == nullptr)) return sym->formal_ns; /* The above should have worked in most cases. If it hasn't, try some other @@ -5515,6 +5524,10 @@ gfc_get_procedure_ns (gfc_symbol *sym) if (ns->proc_name == sym) return ns; + if (sym->formal_ns + && sym->formal_ns->proc_name == sym) + return sym->formal_ns; + if (sym->formal) for (gfc_formal_arglist *f = sym->formal; f != nullptr; f = f->next) if (f->sym) diff --git a/gcc/fortran/trans-array.cc b/gcc/fortran/trans-array.cc index 0449c26ce6d5..b11ef57f9814 100644 --- a/gcc/fortran/trans-array.cc +++ b/gcc/fortran/trans-array.cc @@ -8912,6 +8912,19 @@ gfc_conv_expr_descriptor (gfc_se *se, gfc_expr *expr) gfc_rank_cst[dim], stride); } + /* For deferred-length character we need to take the dynamic length + into account for the dataptr offset. */ + if (expr->ts.type == BT_CHARACTER + && expr->ts.deferred + && expr->ts.u.cl->backend_decl + && VAR_P (expr->ts.u.cl->backend_decl)) + { + tree base_type = TREE_TYPE (base); + base = fold_build2_loc (input_location, MULT_EXPR, base_type, base, + fold_convert (base_type, + expr->ts.u.cl->backend_decl)); + } + for (n = loop.dimen; n < loop.dimen + codim; n++) { from = loop.from[n]; @@ -9433,6 +9446,15 @@ gfc_conv_array_parameter (gfc_se *se, gfc_expr *expr, bool g77, gfc_add_expr_to_block (&se->pre, tmp); } + else if (pass_optional && full_array_var && sym->as && sym->as->rank != 0) + { + /* Perform calculation of bounds and strides of optional array dummy + only if the argument is present. */ + tmp = build3_v (COND_EXPR, gfc_conv_expr_present (sym), + gfc_finish_block (&se->pre), + build_empty_stmt (input_location)); + gfc_add_expr_to_block (&se->pre, tmp); + } } /* Deallocate the allocatable components of structures that are @@ -10903,7 +10925,9 @@ structure_alloc_comps (gfc_symbol * der_type, tree decl, tree dest, if (c_expr) { gfc_conv_expr_type (&tse, c_expr, TREE_TYPE (comp)); + gfc_add_block_to_block (&fnblock, &tse.pre); gfc_add_modify (&fnblock, comp, tse.expr); + gfc_add_block_to_block (&fnblock, &tse.post); } } else if (c->initializer && !c->attr.pdt_string && !c->attr.pdt_array @@ -10914,7 +10938,9 @@ structure_alloc_comps (gfc_symbol * der_type, tree decl, tree dest, gfc_expr *c_expr; c_expr = c->initializer; gfc_conv_expr_type (&tse, c_expr, TREE_TYPE (comp)); + gfc_add_block_to_block (&fnblock, &tse.pre); gfc_add_modify (&fnblock, comp, tse.expr); + gfc_add_block_to_block (&fnblock, &tse.post); } if (c->attr.pdt_string) @@ -10934,7 +10960,9 @@ structure_alloc_comps (gfc_symbol * der_type, tree decl, tree dest, strlen = fold_build3_loc (input_location, COMPONENT_REF, TREE_TYPE (strlen), decl, strlen, NULL_TREE); + gfc_add_block_to_block (&fnblock, &tse.pre); gfc_add_modify (&fnblock, strlen, tse.expr); + gfc_add_block_to_block (&fnblock, &tse.post); c->ts.u.cl->backend_decl = strlen; } gfc_free_expr (e); @@ -10981,17 +11009,21 @@ structure_alloc_comps (gfc_symbol * der_type, tree decl, tree dest, gfc_conv_expr_type (&tse, e, gfc_array_index_type); gfc_free_expr (e); lower = tse.expr; + gfc_add_block_to_block (&fnblock, &tse.pre); gfc_conv_descriptor_lbound_set (&fnblock, comp, gfc_rank_cst[i], lower); + gfc_add_block_to_block (&fnblock, &tse.post); e = gfc_copy_expr (c->as->upper[i]); gfc_insert_parameter_exprs (e, pdt_param_list); gfc_conv_expr_type (&tse, e, gfc_array_index_type); gfc_free_expr (e); upper = tse.expr; + gfc_add_block_to_block (&fnblock, &tse.pre); gfc_conv_descriptor_ubound_set (&fnblock, comp, gfc_rank_cst[i], upper); + gfc_add_block_to_block (&fnblock, &tse.post); gfc_conv_descriptor_stride_set (&fnblock, comp, gfc_rank_cst[i], size); @@ -11052,17 +11084,15 @@ structure_alloc_comps (gfc_symbol * der_type, tree decl, tree dest, && c->ts.u.derived && c->ts.u.derived->attr.pdt_type && !(c->attr.pointer || c->attr.allocatable)) { - bool is_deferred = false; gfc_actual_arglist *tail = c->param_list; for (; tail; tail = tail->next) - if (!tail->expr) - is_deferred = true; + if (tail->expr) + gfc_insert_parameter_exprs (tail->expr, pdt_param_list); - tail = is_deferred ? pdt_param_list : c->param_list; tmp = gfc_allocate_pdt_comp (c->ts.u.derived, comp, c->as ? c->as->rank : 0, - tail); + c->param_list); gfc_add_expr_to_block (&fnblock, tmp); } @@ -11148,7 +11178,11 @@ structure_alloc_comps (gfc_symbol * der_type, tree decl, tree dest, comp = gfc_class_data_get (comp); /* Recurse in to PDT components. */ - if ((c->ts.type == BT_DERIVED || c->ts.type == BT_CLASS) + if (((c->ts.type == BT_DERIVED + && !c->attr.allocatable && !c->attr.pointer) + || (c->ts.type == BT_CLASS + && !CLASS_DATA (c)->attr.allocatable + && !CLASS_DATA (c)->attr.pointer)) && c->ts.u.derived && c->ts.u.derived->attr.pdt_type) { tmp = gfc_check_pdt_dummy (c->ts.u.derived, comp, @@ -12713,6 +12747,15 @@ gfc_walk_op_expr (gfc_ss * ss, gfc_expr * expr) return head2; } +static gfc_ss * +gfc_walk_conditional_expr (gfc_ss *ss, gfc_expr *expr) +{ + gfc_ss *head; + + head = gfc_walk_subexpr (ss, expr->value.conditional.true_expr); + head = gfc_walk_subexpr (head, expr->value.conditional.false_expr); + return head; +} /* Reverse a SS chain. */ @@ -12985,6 +13028,10 @@ gfc_walk_subexpr (gfc_ss * ss, gfc_expr * expr) head = gfc_walk_op_expr (ss, expr); return head; + case EXPR_CONDITIONAL: + head = gfc_walk_conditional_expr (ss, expr); + return head; + case EXPR_FUNCTION: head = gfc_walk_function_expr (ss, expr); return head; diff --git a/gcc/fortran/trans-decl.cc b/gcc/fortran/trans-decl.cc index b077cee86a38..c31c75698828 100644 --- a/gcc/fortran/trans-decl.cc +++ b/gcc/fortran/trans-decl.cc @@ -225,6 +225,12 @@ tree gfor_fndecl_iargc; tree gfor_fndecl_kill; tree gfor_fndecl_kill_sub; tree gfor_fndecl_is_contiguous0; +tree gfor_fndecl_fstat_i4_sub; +tree gfor_fndecl_fstat_i8_sub; +tree gfor_fndecl_lstat_i4_sub; +tree gfor_fndecl_lstat_i8_sub; +tree gfor_fndecl_stat_i4_sub; +tree gfor_fndecl_stat_i8_sub; /* Intrinsic functions implemented in Fortran. */ @@ -1682,6 +1688,11 @@ gfc_get_symbol_decl (gfc_symbol * sym) && !(sym->attr.use_assoc || sym->attr.dummy)) gfc_defer_symbol_init (sym); + if ((sym->ts.type == BT_DERIVED && sym->ts.u.derived->attr.pdt_comp) + && gfc_current_ns == sym->ns + && !(sym->attr.use_assoc || sym->attr.dummy)) + gfc_defer_symbol_init (sym); + /* Dummy PDT 'len' parameters should be checked when they are explicit. */ if ((sym->ts.type == BT_DERIVED || sym->ts.type == BT_CLASS) && (gfc_option.rtcheck & GFC_RTCHECK_BOUNDS) @@ -3910,6 +3921,34 @@ gfc_build_intrinsic_function_decls (void) gfc_int4_type_node, 1, pvoid_type_node); DECL_PURE_P (gfor_fndecl_is_contiguous0) = 1; TREE_NOTHROW (gfor_fndecl_is_contiguous0) = 1; + + gfor_fndecl_fstat_i4_sub = gfc_build_library_function_decl ( + get_identifier (PREFIX ("fstat_i4_sub")), void_type_node, + 3, gfc_pint4_type_node, gfc_pint4_type_node, gfc_pint4_type_node); + + gfor_fndecl_fstat_i8_sub = gfc_build_library_function_decl ( + get_identifier (PREFIX ("fstat_i8_sub")), void_type_node, + 3, gfc_pint8_type_node, gfc_pint8_type_node, gfc_pint8_type_node); + + gfor_fndecl_lstat_i4_sub = gfc_build_library_function_decl ( + get_identifier (PREFIX ("lstat_i4_sub")), void_type_node, + 4, pchar_type_node, gfc_pint4_type_node, gfc_pint4_type_node, + gfc_charlen_type_node); + + gfor_fndecl_lstat_i8_sub = gfc_build_library_function_decl ( + get_identifier (PREFIX ("lstat_i8_sub")), void_type_node, + 4, pchar_type_node, gfc_pint8_type_node, gfc_pint8_type_node, + gfc_charlen_type_node); + + gfor_fndecl_stat_i4_sub = gfc_build_library_function_decl ( + get_identifier (PREFIX ("stat_i4_sub")), void_type_node, + 4, pchar_type_node, gfc_pint4_type_node, gfc_pint4_type_node, + gfc_charlen_type_node); + + gfor_fndecl_stat_i8_sub = gfc_build_library_function_decl ( + get_identifier (PREFIX ("stat_i8_sub")), void_type_node, + 4, pchar_type_node, gfc_pint8_type_node, gfc_pint8_type_node, + gfc_charlen_type_node); } @@ -4797,6 +4836,23 @@ gfc_trans_deferred_vars (gfc_symbol * proc_sym, gfc_wrapped_block * block) } } + sym = (proc_sym->attr.function + && proc_sym != proc_sym->result) ? proc_sym->result : NULL; + + if (sym && !sym->attr.allocatable && !sym->attr.pointer + && sym->ts.type == BT_DERIVED + && sym->ts.u.derived + && !gfc_has_default_initializer (sym->ts.u.derived) + && sym->ts.u.derived->attr.pdt_type) + { + gfc_init_block (&tmpblock); + tmp = gfc_allocate_pdt_comp (sym->ts.u.derived, + sym->backend_decl, + sym->as ? sym->as->rank : 0, + sym->param_list); + gfc_add_expr_to_block (&tmpblock, tmp); + gfc_add_init_cleanup (block, gfc_finish_block (&tmpblock), NULL); + } /* Initialize the INTENT(OUT) derived type dummy arguments. This should be done here so that the offsets and lbounds of arrays @@ -4870,25 +4926,28 @@ gfc_trans_deferred_vars (gfc_symbol * proc_sym, gfc_wrapped_block * block) if (sym->ts.type == BT_DERIVED && sym->ts.u.derived - && sym->ts.u.derived->attr.pdt_type) + && (sym->ts.u.derived->attr.pdt_type || sym->ts.u.derived->attr.pdt_comp)) { is_pdt_type = true; gfc_init_block (&tmpblock); - if (!(sym->attr.dummy - || sym->attr.pointer - || sym->attr.allocatable)) + if (!sym->attr.dummy && !sym->attr.pointer) { - tmp = gfc_allocate_pdt_comp (sym->ts.u.derived, - sym->backend_decl, - sym->as ? sym->as->rank : 0, - sym->param_list); - gfc_add_expr_to_block (&tmpblock, tmp); - if (!sym->attr.result) + if (!sym->attr.allocatable) + { + tmp = gfc_allocate_pdt_comp (sym->ts.u.derived, + sym->backend_decl, + sym->as ? sym->as->rank : 0, + sym->param_list); + gfc_add_expr_to_block (&tmpblock, tmp); + } + + if (!sym->attr.result && !sym->ts.u.derived->attr.alloc_comp) tmp = gfc_deallocate_pdt_comp (sym->ts.u.derived, sym->backend_decl, sym->as ? sym->as->rank : 0); else tmp = NULL_TREE; + gfc_add_init_cleanup (block, gfc_finish_block (&tmpblock), tmp); } else if (sym->attr.dummy) diff --git a/gcc/fortran/trans-expr.cc b/gcc/fortran/trans-expr.cc index a9ea29f760fe..271d2633dfba 100644 --- a/gcc/fortran/trans-expr.cc +++ b/gcc/fortran/trans-expr.cc @@ -4368,6 +4368,58 @@ gfc_conv_expr_op (gfc_se * se, gfc_expr * expr) gfc_add_block_to_block (&se->post, &lse.post); } +static void +gfc_conv_conditional_expr (gfc_se *se, gfc_expr *expr) +{ + gfc_se cond_se, true_se, false_se; + tree condition, true_val, false_val; + tree type; + + gfc_init_se (&cond_se, se); + gfc_init_se (&true_se, se); + gfc_init_se (&false_se, se); + + gfc_conv_expr (&cond_se, expr->value.conditional.condition); + gfc_add_block_to_block (&se->pre, &cond_se.pre); + condition = gfc_evaluate_now (cond_se.expr, &se->pre); + + true_se.want_pointer = se->want_pointer; + gfc_conv_expr (&true_se, expr->value.conditional.true_expr); + true_val = true_se.expr; + false_se.want_pointer = se->want_pointer; + gfc_conv_expr (&false_se, expr->value.conditional.false_expr); + false_val = false_se.expr; + + if (true_se.pre.head != NULL_TREE || false_se.pre.head != NULL_TREE) + gfc_add_expr_to_block ( + &se->pre, + fold_build3_loc (input_location, COND_EXPR, void_type_node, condition, + true_se.pre.head != NULL_TREE + ? gfc_finish_block (&true_se.pre) + : build_empty_stmt (input_location), + false_se.pre.head != NULL_TREE + ? gfc_finish_block (&false_se.pre) + : build_empty_stmt (input_location))); + + if (true_se.post.head != NULL_TREE || false_se.post.head != NULL_TREE) + gfc_add_expr_to_block ( + &se->post, + fold_build3_loc (input_location, COND_EXPR, void_type_node, condition, + true_se.post.head != NULL_TREE + ? gfc_finish_block (&true_se.post) + : build_empty_stmt (input_location), + false_se.post.head != NULL_TREE + ? gfc_finish_block (&false_se.post) + : build_empty_stmt (input_location))); + + type = gfc_typenode_for_spec (&expr->ts); + if (se->want_pointer) + type = build_pointer_type (type); + + se->expr = fold_build3_loc (input_location, COND_EXPR, type, condition, + true_val, false_val); +} + /* If a string's length is one, we convert it to a single character. */ tree @@ -5317,6 +5369,13 @@ gfc_apply_interface_mapping_to_expr (gfc_interface_mapping * mapping, gfc_apply_interface_mapping_to_expr (mapping, expr->value.op.op2); break; + case EXPR_CONDITIONAL: + gfc_apply_interface_mapping_to_expr (mapping, + expr->value.conditional.true_expr); + gfc_apply_interface_mapping_to_expr (mapping, + expr->value.conditional.false_expr); + break; + case EXPR_FUNCTION: for (actual = expr->value.function.actual; actual; actual = actual->next) gfc_apply_interface_mapping_to_expr (mapping, actual->expr); @@ -10464,6 +10523,10 @@ gfc_conv_expr (gfc_se * se, gfc_expr * expr) gfc_conv_expr_op (se, expr); break; + case EXPR_CONDITIONAL: + gfc_conv_conditional_expr (se, expr); + break; + case EXPR_FUNCTION: gfc_conv_function_expr (se, expr); break; @@ -10607,6 +10670,13 @@ gfc_conv_expr_reference (gfc_se * se, gfc_expr * expr) return; } + if (expr->expr_type == EXPR_CONDITIONAL) + { + se->want_pointer = 1; + gfc_conv_expr (se, expr); + return; + } + if (expr->expr_type == EXPR_FUNCTION && ((expr->value.function.esym && expr->value.function.esym->result @@ -13143,26 +13213,39 @@ gfc_trans_assignment_1 (gfc_expr * expr1, gfc_expr * expr2, bool init_flag, } /* Deallocate the lhs parameterized components if required. */ - if (dealloc && expr2->expr_type == EXPR_FUNCTION - && !expr1->symtree->n.sym->attr.associate_var) + if (dealloc + && !expr1->symtree->n.sym->attr.associate_var + && ((expr1->ts.type == BT_DERIVED + && expr1->ts.u.derived + && expr1->ts.u.derived->attr.pdt_type) + || (expr1->ts.type == BT_CLASS + && CLASS_DATA (expr1)->ts.u.derived + && CLASS_DATA (expr1)->ts.u.derived->attr.pdt_type))) { - if (expr1->ts.type == BT_DERIVED - && expr1->ts.u.derived - && expr1->ts.u.derived->attr.pdt_type) + bool pdt_dep = gfc_check_dependency (expr1, expr2, true); + + tmp = lse.expr; + if (pdt_dep) { - tmp = gfc_deallocate_pdt_comp (expr1->ts.u.derived, lse.expr, - expr1->rank); - gfc_add_expr_to_block (&lse.pre, tmp); + /* Create a temporary for deallocation after assignment. */ + tmp = gfc_create_var (TREE_TYPE (lse.expr), "pdt_tmp"); + gfc_add_modify (&lse.pre, tmp, lse.expr); } - else if (expr1->ts.type == BT_CLASS - && CLASS_DATA (expr1)->ts.u.derived - && CLASS_DATA (expr1)->ts.u.derived->attr.pdt_type) + + if (expr1->ts.type == BT_DERIVED) + tmp = gfc_deallocate_pdt_comp (expr1->ts.u.derived, tmp, + expr1->rank); + else if (expr1->ts.type == BT_CLASS) { - tmp = gfc_class_data_get (lse.expr); + tmp = gfc_class_data_get (tmp); tmp = gfc_deallocate_pdt_comp (CLASS_DATA (expr1)->ts.u.derived, tmp, expr1->rank); - gfc_add_expr_to_block (&lse.pre, tmp); } + + if (tmp && pdt_dep) + gfc_add_expr_to_block (&rse.post, tmp); + else if (tmp) + gfc_add_expr_to_block (&lse.pre, tmp); } } diff --git a/gcc/fortran/trans-intrinsic.cc b/gcc/fortran/trans-intrinsic.cc index e720b42355f4..d1c2a80b2775 100644 --- a/gcc/fortran/trans-intrinsic.cc +++ b/gcc/fortran/trans-intrinsic.cc @@ -5871,6 +5871,126 @@ gfc_conv_intrinsic_findloc (gfc_se *se, gfc_expr *expr) } +/* Emit code for fstat, lstat and stat intrinsic subroutines. */ + +static tree +conv_intrinsic_fstat_lstat_stat_sub (gfc_code *code) +{ + stmtblock_t block; + gfc_se se, se_stat; + tree unit = NULL_TREE; + tree name = NULL_TREE; + tree slen = NULL_TREE; + tree vals; + tree arg3 = NULL_TREE; + tree stat = NULL_TREE ; + tree present = NULL_TREE; + tree tmp; + int kind; + + gfc_init_block (&block); + gfc_init_se (&se, NULL); + + switch (code->resolved_isym->id) + { + case GFC_ISYM_FSTAT: + /* Deal with the UNIT argument. */ + gfc_conv_expr (&se, code->ext.actual->expr); + gfc_add_block_to_block (&block, &se.pre); + unit = gfc_evaluate_now (se.expr, &block); + unit = gfc_build_addr_expr (NULL_TREE, unit); + gfc_add_block_to_block (&block, &se.post); + break; + + case GFC_ISYM_LSTAT: + case GFC_ISYM_STAT: + /* Deal with the NAME argument. */ + gfc_conv_expr (&se, code->ext.actual->expr); + gfc_conv_string_parameter (&se); + gfc_add_block_to_block (&block, &se.pre); + name = se.expr; + slen = se.string_length; + gfc_add_block_to_block (&block, &se.post); + break; + + default: + gcc_unreachable (); + } + + /* Deal with the VALUES argument. */ + gfc_init_se (&se, NULL); + gfc_conv_expr_descriptor (&se, code->ext.actual->next->expr); + vals = gfc_build_addr_expr (NULL_TREE, se.expr); + gfc_add_block_to_block (&block, &se.pre); + gfc_add_block_to_block (&block, &se.post); + kind = code->ext.actual->next->expr->ts.kind; + + /* Deal with an optional STATUS. */ + if (code->ext.actual->next->next->expr) + { + gfc_init_se (&se_stat, NULL); + gfc_conv_expr (&se_stat, code->ext.actual->next->next->expr); + stat = gfc_create_var (gfc_get_int_type (kind), "_stat"); + arg3 = gfc_build_addr_expr (NULL_TREE, stat); + + /* Handle case of status being an optional dummy. */ + gfc_symbol *sym = code->ext.actual->next->next->expr->symtree->n.sym; + if (sym->attr.dummy && sym->attr.optional) + { + present = gfc_conv_expr_present (sym); + arg3 = fold_build3_loc (input_location, COND_EXPR, + TREE_TYPE (arg3), present, arg3, + fold_convert (TREE_TYPE (arg3), + null_pointer_node)); + } + } + + /* Call library function depending on KIND of VALUES argument. */ + switch (code->resolved_isym->id) + { + case GFC_ISYM_FSTAT: + tmp = (kind == 4 ? gfor_fndecl_fstat_i4_sub : gfor_fndecl_fstat_i8_sub); + break; + case GFC_ISYM_LSTAT: + tmp = (kind == 4 ? gfor_fndecl_lstat_i4_sub : gfor_fndecl_lstat_i8_sub); + break; + case GFC_ISYM_STAT: + tmp = (kind == 4 ? gfor_fndecl_stat_i4_sub : gfor_fndecl_stat_i8_sub); + break; + default: + gcc_unreachable (); + } + + if (code->resolved_isym->id == GFC_ISYM_FSTAT) + tmp = build_call_expr_loc (input_location, tmp, 3, unit, vals, + stat ? arg3 : null_pointer_node); + else + tmp = build_call_expr_loc (input_location, tmp, 4, name, vals, + stat ? arg3 : null_pointer_node, slen); + gfc_add_expr_to_block (&block, tmp); + + /* Handle kind conversion of status. */ + if (stat && stat != se_stat.expr) + { + stmtblock_t block2; + + gfc_init_block (&block2); + gfc_add_modify (&block2, se_stat.expr, + fold_convert (TREE_TYPE (se_stat.expr), stat)); + + if (present) + { + tmp = build3_v (COND_EXPR, present, gfc_finish_block (&block2), + build_empty_stmt (input_location)); + gfc_add_expr_to_block (&block, tmp); + } + else + gfc_add_block_to_block (&block, &block2); + } + + return gfc_finish_block (&block); +} + /* Emit code for minval or maxval intrinsic. There are many different cases we need to handle. For performance reasons we sometimes create two loops instead of one, where the second one is much simpler. @@ -13352,6 +13472,12 @@ gfc_conv_intrinsic_subroutine (gfc_code *code) res = conv_intrinsic_free (code); break; + case GFC_ISYM_FSTAT: + case GFC_ISYM_LSTAT: + case GFC_ISYM_STAT: + res = conv_intrinsic_fstat_lstat_stat_sub (code); + break; + case GFC_ISYM_RANDOM_INIT: res = conv_intrinsic_random_init (code); break; diff --git a/gcc/fortran/trans-io.cc b/gcc/fortran/trans-io.cc index df2fef70172a..9360bddb30a7 100644 --- a/gcc/fortran/trans-io.cc +++ b/gcc/fortran/trans-io.cc @@ -2646,7 +2646,9 @@ gfc_trans_transfer (gfc_code * code) && ((expr->symtree->n.sym->ts.type == BT_DERIVED && expr->ts.deferred) || (expr->symtree->n.sym->assoc && expr->symtree->n.sym->assoc->variable) - || gfc_expr_attr (expr).pointer)) + || gfc_expr_attr (expr).pointer + || (expr->symtree->n.sym->attr.pointer + && gfc_expr_attr (expr).target))) goto scalarize; /* With array-bounds checking enabled, force scalarization in some diff --git a/gcc/fortran/trans-stmt.cc b/gcc/fortran/trans-stmt.cc index f4e6c57114ee..f25335d6bdbd 100644 --- a/gcc/fortran/trans-stmt.cc +++ b/gcc/fortran/trans-stmt.cc @@ -7922,6 +7922,8 @@ gfc_trans_deallocate (gfc_code *code) gfc_expr *expr = gfc_copy_expr (al->expr); bool is_coarray = false, is_coarray_array = false; int caf_mode = 0; + gfc_ref * ref; + gfc_actual_arglist * param_list; gcc_assert (expr->expr_type == EXPR_VARIABLE); @@ -7937,9 +7939,18 @@ gfc_trans_deallocate (gfc_code *code) /* Deallocate PDT components that are parameterized. */ tmp = NULL; + param_list = expr->param_list; + if (!param_list && expr->symtree->n.sym->param_list) + param_list = expr->symtree->n.sym->param_list; + for (ref = expr->ref; ref; ref = ref->next) + if (ref->type == REF_COMPONENT + && ref->u.c.component->ts.type == BT_DERIVED + && ref->u.c.component->ts.u.derived->attr.pdt_type + && ref->u.c.component->param_list) + param_list = ref->u.c.component->param_list; if (expr->ts.type == BT_DERIVED - && expr->ts.u.derived->attr.pdt_type - && expr->symtree->n.sym->param_list) + && ((expr->ts.u.derived->attr.pdt_type && param_list) + || expr->ts.u.derived->attr.pdt_comp)) tmp = gfc_deallocate_pdt_comp (expr->ts.u.derived, se.expr, expr->rank); else if (expr->ts.type == BT_CLASS && CLASS_DATA (expr)->ts.u.derived->attr.pdt_type diff --git a/gcc/fortran/trans-types.cc b/gcc/fortran/trans-types.cc index 1754d9821532..dfdac600c24d 100644 --- a/gcc/fortran/trans-types.cc +++ b/gcc/fortran/trans-types.cc @@ -800,6 +800,9 @@ gfc_init_kinds (void) gfc_index_integer_kind = get_int_kind_from_name (PTRDIFF_TYPE); + if (flag_external_blas64 && gfc_index_integer_kind != gfc_integer_8_kind) + gfc_fatal_error ("-fexternal-blas64 requires a 64-bit system"); + /* Pick a kind the same size as the C "int" type. */ gfc_c_int_kind = INT_TYPE_SIZE / 8; @@ -1132,6 +1135,7 @@ gfc_init_types (void) { type = gfc_build_uint_type (gfc_character_kinds[index].bit_size); type = build_qualified_type (type, TYPE_UNQUALIFIED); + TYPE_STRING_FLAG (type) = 1; snprintf (name_buf, sizeof(name_buf), "character(kind=%d)", gfc_character_kinds[index].kind); PUSH_TYPE (name_buf, type); @@ -3437,6 +3441,7 @@ gfc_get_function_type (gfc_symbol * sym, gfc_actual_arglist *actual_args, } } if (sym->backend_decl == error_mark_node && actual_args != NULL + && sym->ts.interface == NULL && sym->formal == NULL && (sym->attr.proc == PROC_EXTERNAL || sym->attr.proc == PROC_UNKNOWN)) gfc_get_formal_from_actual_arglist (sym, actual_args); diff --git a/gcc/fortran/trans.h b/gcc/fortran/trans.h index 55541845a6d6..1d04b22abc8d 100644 --- a/gcc/fortran/trans.h +++ b/gcc/fortran/trans.h @@ -983,6 +983,12 @@ extern GTY(()) tree gfor_fndecl_iargc; extern GTY(()) tree gfor_fndecl_kill; extern GTY(()) tree gfor_fndecl_kill_sub; extern GTY(()) tree gfor_fndecl_is_contiguous0; +extern GTY(()) tree gfor_fndecl_fstat_i4_sub; +extern GTY(()) tree gfor_fndecl_fstat_i8_sub; +extern GTY(()) tree gfor_fndecl_lstat_i4_sub; +extern GTY(()) tree gfor_fndecl_lstat_i8_sub; +extern GTY(()) tree gfor_fndecl_stat_i4_sub; +extern GTY(()) tree gfor_fndecl_stat_i8_sub; /* Implemented in Fortran. */ extern GTY(()) tree gfor_fndecl_sc_kind; diff --git a/gcc/gcc.cc b/gcc/gcc.cc index 8da821e92ac4..eae7f07d9626 100644 --- a/gcc/gcc.cc +++ b/gcc/gcc.cc @@ -28,6 +28,7 @@ Once it knows which kind of compilation to perform, the procedure for compilation is specified by a string called a "spec". */ #define INCLUDE_STRING +#define INCLUDE_VECTOR #include "config.h" #include "system.h" #ifdef HOST_HAS_PERSONALITY_ADDR_NO_RANDOMIZE @@ -984,6 +985,13 @@ proper position among the other output files. */ /* Here is the spec for running the linker, after compiling all files. */ +#if defined(TARGET_PROVIDES_LIBATOMIC) && defined(USE_LD_AS_NEEDED) +#define LINK_LIBATOMIC_SPEC "%{!fno-link-libatomic:" LD_AS_NEEDED_OPTION \ + " -latomic " LD_NO_AS_NEEDED_OPTION "} " +#else +#define LINK_LIBATOMIC_SPEC "" +#endif + /* This is overridable by the target in case they need to specify the -lgcc and -lc order specially, yet not require them to override all of LINK_COMMAND_SPEC. */ diff --git a/gcc/generic-match-head.cc b/gcc/generic-match-head.cc index aa1f9b6d2c87..ea4a958686db 100644 --- a/gcc/generic-match-head.cc +++ b/gcc/generic-match-head.cc @@ -45,6 +45,8 @@ along with GCC; see the file COPYING3. If not see #include "tree-pass.h" #include "attribs.h" #include "asan.h" +#include "gimple-iterator.h" +#include "gimple-fold.h" /* Routine to determine if the types T1 and T2 are effectively the same for GENERIC. If T1 or T2 is not a type, the test diff --git a/gcc/genhooks.cc b/gcc/genhooks.cc index b984bee69ea8..529417b50f22 100644 --- a/gcc/genhooks.cc +++ b/gcc/genhooks.cc @@ -36,6 +36,7 @@ static struct hook_desc hook_array[] = { #include "common/common-target.def" #include "d/d-target.def" #include "rust/rust-target.def" +#include "jit/jit-target.def" #undef DEFHOOK }; diff --git a/gcc/gimple-fold.cc b/gcc/gimple-fold.cc index 7d130ea38329..edcc04adc08c 100644 --- a/gcc/gimple-fold.cc +++ b/gcc/gimple-fold.cc @@ -38,6 +38,7 @@ along with GCC; see the file COPYING3. If not see #include "stor-layout.h" #include "dumpfile.h" #include "gimple-iterator.h" +#include "tree-pass.h" #include "gimple-fold.h" #include "gimplify.h" #include "tree-into-ssa.h" @@ -5206,6 +5207,171 @@ gimple_fold_builtin_clear_padding (gimple_stmt_iterator *gsi) return true; } +/* Fold __builtin_constant_p builtin. */ + +static bool +gimple_fold_builtin_constant_p (gimple_stmt_iterator *gsi) +{ + gcall *call = as_a(gsi_stmt (*gsi)); + + if (gimple_call_num_args (call) != 1) + return false; + + tree arg = gimple_call_arg (call, 0); + tree result = fold_builtin_constant_p (arg); + + /* Resolve __builtin_constant_p. If it hasn't been + folded to integer_one_node by now, it's fairly + certain that the value simply isn't constant. */ + if (!result && fold_before_rtl_expansion_p ()) + result = integer_zero_node; + + if (!result) + return false; + + gimplify_and_update_call_from_tree (gsi, result); + return true; +} + +/* Fold __builtin_assume_aligned builtin. */ + +static bool +gimple_fold_builtin_assume_aligned (gimple_stmt_iterator *gsi) +{ + if (!fold_before_rtl_expansion_p ()) + return false; + + gcall *call = as_a(gsi_stmt (*gsi)); + + if (gimple_call_num_args (call) < 2) + return false; + + gimplify_and_update_call_from_tree (gsi, gimple_call_arg (call, 0)); + + return true; +} + +/* If va_list type is a simple pointer and nothing special is needed, + optimize __builtin_va_start (&ap, 0) into ap = __builtin_next_arg (0), + __builtin_va_end (&ap) out as NOP and __builtin_va_copy into a simple + pointer assignment. Returns true if a change happened. */ + +static bool +gimple_fold_builtin_stdarg (gimple_stmt_iterator *gsi, gcall *call) +{ + /* These shouldn't be folded before pass_stdarg. */ + if (!fold_before_rtl_expansion_p ()) + return false; + + tree callee, lhs, rhs, cfun_va_list; + bool va_list_simple_ptr; + location_t loc = gimple_location (call); + gimple *nstmt0, *nstmt; + tree tlhs, oldvdef, newvdef; + + callee = gimple_call_fndecl (call); + + cfun_va_list = targetm.fn_abi_va_list (callee); + va_list_simple_ptr = POINTER_TYPE_P (cfun_va_list) + && (TREE_TYPE (cfun_va_list) == void_type_node + || TREE_TYPE (cfun_va_list) == char_type_node); + + switch (DECL_FUNCTION_CODE (callee)) + { + case BUILT_IN_VA_START: + if (!va_list_simple_ptr + || targetm.expand_builtin_va_start != NULL + || !builtin_decl_explicit_p (BUILT_IN_NEXT_ARG)) + return false; + + if (gimple_call_num_args (call) != 2) + return false; + + lhs = gimple_call_arg (call, 0); + if (!POINTER_TYPE_P (TREE_TYPE (lhs)) + || TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (lhs))) + != TYPE_MAIN_VARIANT (cfun_va_list)) + return false; + /* Create `tlhs = __builtin_next_arg(0);`. */ + tlhs = make_ssa_name (cfun_va_list); + nstmt0 = gimple_build_call (builtin_decl_explicit (BUILT_IN_NEXT_ARG), 1, integer_zero_node); + lhs = fold_build2 (MEM_REF, cfun_va_list, lhs, build_zero_cst (TREE_TYPE (lhs))); + gimple_call_set_lhs (nstmt0, tlhs); + gimple_set_location (nstmt0, loc); + gimple_move_vops (nstmt0, call); + gsi_replace (gsi, nstmt0, false); + oldvdef = gimple_vdef (nstmt0); + newvdef = make_ssa_name (gimple_vop (cfun), nstmt0); + gimple_set_vdef (nstmt0, newvdef); + + /* Create `*lhs = tlhs;`. */ + nstmt = gimple_build_assign (lhs, tlhs); + gimple_set_location (nstmt, loc); + gimple_set_vuse (nstmt, newvdef); + gimple_set_vdef (nstmt, oldvdef); + SSA_NAME_DEF_STMT (oldvdef) = nstmt; + gsi_insert_after (gsi, nstmt, GSI_NEW_STMT); + + if (dump_file && (dump_flags & TDF_DETAILS)) + { + fprintf (dump_file, "Simplified\n "); + print_gimple_stmt (dump_file, call, 0, dump_flags); + fprintf (dump_file, "into\n "); + print_gimple_stmt (dump_file, nstmt0, 0, dump_flags); + fprintf (dump_file, " "); + print_gimple_stmt (dump_file, nstmt, 0, dump_flags); + } + return true; + + case BUILT_IN_VA_COPY: + if (!va_list_simple_ptr) + return false; + + if (gimple_call_num_args (call) != 2) + return false; + + lhs = gimple_call_arg (call, 0); + if (!POINTER_TYPE_P (TREE_TYPE (lhs)) + || TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (lhs))) + != TYPE_MAIN_VARIANT (cfun_va_list)) + return false; + rhs = gimple_call_arg (call, 1); + if (TYPE_MAIN_VARIANT (TREE_TYPE (rhs)) + != TYPE_MAIN_VARIANT (cfun_va_list)) + return false; + + lhs = fold_build2 (MEM_REF, cfun_va_list, lhs, build_zero_cst (TREE_TYPE (lhs))); + nstmt = gimple_build_assign (lhs, rhs); + gimple_set_location (nstmt, loc); + gimple_move_vops (nstmt, call); + gsi_replace (gsi, nstmt, false); + + if (dump_file && (dump_flags & TDF_DETAILS)) + { + fprintf (dump_file, "Simplified\n "); + print_gimple_stmt (dump_file, call, 0, dump_flags); + fprintf (dump_file, "into\n "); + print_gimple_stmt (dump_file, nstmt, 0, dump_flags); + } + return true; + + case BUILT_IN_VA_END: + /* No effect, so the statement will be deleted. */ + if (dump_file && (dump_flags & TDF_DETAILS)) + { + fprintf (dump_file, "Removed\n "); + print_gimple_stmt (dump_file, call, 0, dump_flags); + } + unlink_stmt_vdef (call); + release_defs (call); + gsi_replace (gsi, gimple_build_nop (), true); + return true; + + default: + gcc_unreachable (); + } +} + /* Fold the non-target builtin at *GSI and return whether any simplification was made. */ @@ -5224,6 +5390,10 @@ gimple_fold_builtin (gimple_stmt_iterator *gsi) enum built_in_function fcode = DECL_FUNCTION_CODE (callee); switch (fcode) { + case BUILT_IN_VA_START: + case BUILT_IN_VA_END: + case BUILT_IN_VA_COPY: + return gimple_fold_builtin_stdarg (gsi, stmt); case BUILT_IN_BCMP: return gimple_fold_builtin_bcmp (gsi); case BUILT_IN_BCOPY: @@ -5375,6 +5545,12 @@ gimple_fold_builtin (gimple_stmt_iterator *gsi) case BUILT_IN_CLEAR_PADDING: return gimple_fold_builtin_clear_padding (gsi); + case BUILT_IN_CONSTANT_P: + return gimple_fold_builtin_constant_p (gsi); + + case BUILT_IN_ASSUME_ALIGNED: + return gimple_fold_builtin_assume_aligned (gsi); + default:; } @@ -5834,6 +6010,12 @@ gimple_fold_call (gimple_stmt_iterator *gsi, bool inplace) tree overflow = NULL_TREE; switch (gimple_call_internal_fn (stmt)) { + case IFN_ASSUME: + /* Remove .ASSUME calls during the last fold since it is no + longer needed. */ + if (fold_before_rtl_expansion_p ()) + replace_call_with_value (gsi, NULL_TREE); + break; case IFN_BUILTIN_EXPECT: result = fold_builtin_expect (gimple_location (stmt), gimple_call_arg (stmt, 0), diff --git a/gcc/gimple-fold.h b/gcc/gimple-fold.h index 3f617d1c4cd7..7244941722d8 100644 --- a/gcc/gimple-fold.h +++ b/gcc/gimple-fold.h @@ -22,6 +22,8 @@ along with GCC; see the file COPYING3. If not see #ifndef GCC_GIMPLE_FOLD_H #define GCC_GIMPLE_FOLD_H +#include "tree-pass.h" + extern tree canonicalize_constructor_val (tree, tree); extern tree get_symbol_constant_value (tree); struct c_strlen_data; @@ -280,4 +282,13 @@ extern tree gimple_simplify (combined_fn, tree, tree, tree, extern tree gimple_simplify (combined_fn, tree, tree, tree, tree, gimple_seq *, tree (*)(tree)); +/* Returns true if we are doing the fold before expansion to rtl. */ +inline bool +fold_before_rtl_expansion_p () +{ + if (!cfun) + return false; + return (cfun->curr_properties & PROP_last_full_fold) != 0; +} + #endif /* GCC_GIMPLE_FOLD_H */ diff --git a/gcc/gimple-isel.cc b/gcc/gimple-isel.cc index 0d2efcba547d..b5dc579ff467 100644 --- a/gcc/gimple-isel.cc +++ b/gcc/gimple-isel.cc @@ -39,6 +39,7 @@ along with GCC; see the file COPYING3. If not see #include "optabs.h" #include "gimple-fold.h" #include "internal-fn.h" +#include "fold-const.h" /* Expand all ARRAY_REF(VIEW_CONVERT_EXPR) gimple assignments into calls to internal function based on vector type of selected expansion. @@ -349,6 +350,15 @@ maybe_duplicate_comparison (gassign *stmt, basic_block bb) } } +/* match.pd function to match atomic_bit_test_and pattern which + has nop_convert: + _1 = __atomic_fetch_or_4 (&v, 1, 0); + _2 = (int) _1; + _5 = _2 & 1; + */ +extern bool gimple_nop_atomic_bit_test_and_p (tree, tree *, + tree (*) (tree)); +extern bool gimple_nop_convert (tree, tree*, tree (*) (tree)); namespace { @@ -382,6 +392,947 @@ class pass_gimple_isel : public gimple_opt_pass }; // class pass_gimple_isel + +/* Convert + _1 = __atomic_fetch_or_* (ptr_6, 1, _3); + _7 = ~_1; + _5 = (_Bool) _7; + to + _1 = __atomic_fetch_or_* (ptr_6, 1, _3); + _8 = _1 & 1; + _5 = _8 == 0; + and convert + _1 = __atomic_fetch_and_* (ptr_6, ~1, _3); + _7 = ~_1; + _4 = (_Bool) _7; + to + _1 = __atomic_fetch_and_* (ptr_6, ~1, _3); + _8 = _1 & 1; + _4 = (_Bool) _8; + + USE_STMT is the gimplt statement which uses the return value of + __atomic_fetch_or_*. LHS is the return value of __atomic_fetch_or_*. + MASK is the mask passed to __atomic_fetch_or_*. + */ + +static gimple * +convert_atomic_bit_not (enum internal_fn fn, gimple *use_stmt, + tree lhs, tree mask) +{ + tree and_mask; + if (fn == IFN_ATOMIC_BIT_TEST_AND_RESET) + { + /* MASK must be ~1. */ + if (!operand_equal_p (build_int_cst (TREE_TYPE (lhs), + ~HOST_WIDE_INT_1), mask, 0)) + return nullptr; + and_mask = build_int_cst (TREE_TYPE (lhs), 1); + } + else + { + /* MASK must be 1. */ + if (!operand_equal_p (build_int_cst (TREE_TYPE (lhs), 1), mask, 0)) + return nullptr; + and_mask = mask; + } + + tree use_lhs = gimple_assign_lhs (use_stmt); + + use_operand_p use_p; + gimple *use_not_stmt; + + if (!single_imm_use (use_lhs, &use_p, &use_not_stmt) + || !is_gimple_assign (use_not_stmt)) + return nullptr; + + if (!CONVERT_EXPR_CODE_P (gimple_assign_rhs_code (use_not_stmt))) + return nullptr; + + tree use_not_lhs = gimple_assign_lhs (use_not_stmt); + if (TREE_CODE (TREE_TYPE (use_not_lhs)) != BOOLEAN_TYPE) + return nullptr; + + gimple_stmt_iterator gsi; + tree var = make_ssa_name (TREE_TYPE (lhs)); + /* use_stmt need to be removed after use_nop_stmt, + so use_lhs can be released. */ + gimple *use_stmt_removal = use_stmt; + use_stmt = gimple_build_assign (var, BIT_AND_EXPR, lhs, and_mask); + gsi = gsi_for_stmt (use_not_stmt); + gsi_insert_before (&gsi, use_stmt, GSI_NEW_STMT); + lhs = gimple_assign_lhs (use_not_stmt); + gimple *g = gimple_build_assign (lhs, EQ_EXPR, var, + build_zero_cst (TREE_TYPE (mask))); + gsi_insert_after (&gsi, g, GSI_NEW_STMT); + gsi = gsi_for_stmt (use_not_stmt); + gsi_remove (&gsi, true); + gsi = gsi_for_stmt (use_stmt_removal); + gsi_remove (&gsi, true); + return use_stmt; +} + +/* Optimize + mask_2 = 1 << cnt_1; + _4 = __atomic_fetch_or_* (ptr_6, mask_2, _3); + _5 = _4 & mask_2; + to + _4 = .ATOMIC_BIT_TEST_AND_SET (ptr_6, cnt_1, 0, _3); + _5 = _4; + If _5 is only used in _5 != 0 or _5 == 0 comparisons, 1 + is passed instead of 0, and the builtin just returns a zero + or 1 value instead of the actual bit. + Similarly for __sync_fetch_and_or_* (without the ", _3" part + in there), and/or if mask_2 is a power of 2 constant. + Similarly for xor instead of or, use ATOMIC_BIT_TEST_AND_COMPLEMENT + in that case. And similarly for and instead of or, except that + the second argument to the builtin needs to be one's complement + of the mask instead of mask. */ + +static bool +optimize_atomic_bit_test_and (gimple_stmt_iterator *gsip, + enum internal_fn fn, bool has_model_arg, + bool after) +{ + gimple *call = gsi_stmt (*gsip); + tree lhs = gimple_call_lhs (call); + use_operand_p use_p; + gimple *use_stmt; + tree mask; + optab optab; + + if (!flag_inline_atomics + || optimize_debug + || !gimple_call_builtin_p (call, BUILT_IN_NORMAL) + || !lhs + || SSA_NAME_OCCURS_IN_ABNORMAL_PHI (lhs) + || !single_imm_use (lhs, &use_p, &use_stmt) + || !is_gimple_assign (use_stmt) + || !gimple_vdef (call)) + return false; + + switch (fn) + { + case IFN_ATOMIC_BIT_TEST_AND_SET: + optab = atomic_bit_test_and_set_optab; + break; + case IFN_ATOMIC_BIT_TEST_AND_COMPLEMENT: + optab = atomic_bit_test_and_complement_optab; + break; + case IFN_ATOMIC_BIT_TEST_AND_RESET: + optab = atomic_bit_test_and_reset_optab; + break; + default: + return false; + } + + tree bit = nullptr; + + mask = gimple_call_arg (call, 1); + tree_code rhs_code = gimple_assign_rhs_code (use_stmt); + if (rhs_code != BIT_AND_EXPR) + { + if (rhs_code != NOP_EXPR && rhs_code != BIT_NOT_EXPR) + return false; + + tree use_lhs = gimple_assign_lhs (use_stmt); + if (TREE_CODE (use_lhs) == SSA_NAME + && SSA_NAME_OCCURS_IN_ABNORMAL_PHI (use_lhs)) + return false; + + tree use_rhs = gimple_assign_rhs1 (use_stmt); + if (lhs != use_rhs) + return false; + + if (optab_handler (optab, TYPE_MODE (TREE_TYPE (lhs))) + == CODE_FOR_nothing) + return false; + + gimple *g; + gimple_stmt_iterator gsi; + tree var; + int ibit = -1; + + if (rhs_code == BIT_NOT_EXPR) + { + g = convert_atomic_bit_not (fn, use_stmt, lhs, mask); + if (!g) + return false; + use_stmt = g; + ibit = 0; + } + else if (TREE_CODE (TREE_TYPE (use_lhs)) == BOOLEAN_TYPE) + { + tree and_mask; + if (fn == IFN_ATOMIC_BIT_TEST_AND_RESET) + { + /* MASK must be ~1. */ + if (!operand_equal_p (build_int_cst (TREE_TYPE (lhs), + ~HOST_WIDE_INT_1), + mask, 0)) + return false; + + /* Convert + _1 = __atomic_fetch_and_* (ptr_6, ~1, _3); + _4 = (_Bool) _1; + to + _1 = __atomic_fetch_and_* (ptr_6, ~1, _3); + _5 = _1 & 1; + _4 = (_Bool) _5; + */ + and_mask = build_int_cst (TREE_TYPE (lhs), 1); + } + else + { + and_mask = build_int_cst (TREE_TYPE (lhs), 1); + if (!operand_equal_p (and_mask, mask, 0)) + return false; + + /* Convert + _1 = __atomic_fetch_or_* (ptr_6, 1, _3); + _4 = (_Bool) _1; + to + _1 = __atomic_fetch_or_* (ptr_6, 1, _3); + _5 = _1 & 1; + _4 = (_Bool) _5; + */ + } + var = make_ssa_name (TREE_TYPE (use_rhs)); + replace_uses_by (use_rhs, var); + g = gimple_build_assign (var, BIT_AND_EXPR, use_rhs, + and_mask); + gsi = gsi_for_stmt (use_stmt); + gsi_insert_before (&gsi, g, GSI_NEW_STMT); + use_stmt = g; + ibit = 0; + } + else if (TYPE_PRECISION (TREE_TYPE (use_lhs)) + <= TYPE_PRECISION (TREE_TYPE (use_rhs))) + { + gimple *use_nop_stmt; + if (!single_imm_use (use_lhs, &use_p, &use_nop_stmt) + || (!is_gimple_assign (use_nop_stmt) + && gimple_code (use_nop_stmt) != GIMPLE_COND)) + return false; + /* Handle both + _4 = _5 < 0; + and + if (_5 < 0) + */ + tree use_nop_lhs = nullptr; + rhs_code = ERROR_MARK; + if (is_gimple_assign (use_nop_stmt)) + { + use_nop_lhs = gimple_assign_lhs (use_nop_stmt); + rhs_code = gimple_assign_rhs_code (use_nop_stmt); + } + if (!use_nop_lhs || rhs_code != BIT_AND_EXPR) + { + /* Also handle + if (_5 < 0) + */ + if (use_nop_lhs + && TREE_CODE (use_nop_lhs) == SSA_NAME + && SSA_NAME_OCCURS_IN_ABNORMAL_PHI (use_nop_lhs)) + return false; + if (use_nop_lhs && rhs_code == BIT_NOT_EXPR) + { + /* Handle + _7 = ~_2; + */ + g = convert_atomic_bit_not (fn, use_nop_stmt, lhs, + mask); + if (!g) + return false; + /* Convert + _1 = __atomic_fetch_or_4 (ptr_6, 1, _3); + _2 = (int) _1; + _7 = ~_2; + _5 = (_Bool) _7; + to + _1 = __atomic_fetch_or_4 (ptr_6, ~1, _3); + _8 = _1 & 1; + _5 = _8 == 0; + and convert + _1 = __atomic_fetch_and_4 (ptr_6, ~1, _3); + _2 = (int) _1; + _7 = ~_2; + _5 = (_Bool) _7; + to + _1 = __atomic_fetch_and_4 (ptr_6, 1, _3); + _8 = _1 & 1; + _5 = _8 == 0; + */ + gsi = gsi_for_stmt (use_stmt); + gsi_remove (&gsi, true); + use_stmt = g; + ibit = 0; + } + else + { + tree cmp_rhs1, cmp_rhs2; + if (use_nop_lhs) + { + /* Handle + _4 = _5 < 0; + */ + if (TREE_CODE (TREE_TYPE (use_nop_lhs)) + != BOOLEAN_TYPE) + return false; + cmp_rhs1 = gimple_assign_rhs1 (use_nop_stmt); + cmp_rhs2 = gimple_assign_rhs2 (use_nop_stmt); + } + else + { + /* Handle + if (_5 < 0) + */ + rhs_code = gimple_cond_code (use_nop_stmt); + cmp_rhs1 = gimple_cond_lhs (use_nop_stmt); + cmp_rhs2 = gimple_cond_rhs (use_nop_stmt); + } + if (rhs_code != GE_EXPR && rhs_code != LT_EXPR) + return false; + if (use_lhs != cmp_rhs1) + return false; + if (!integer_zerop (cmp_rhs2)) + return false; + + tree and_mask; + + unsigned HOST_WIDE_INT bytes + = tree_to_uhwi (TYPE_SIZE_UNIT (TREE_TYPE (use_rhs))); + ibit = bytes * BITS_PER_UNIT - 1; + unsigned HOST_WIDE_INT highest + = HOST_WIDE_INT_1U << ibit; + + if (fn == IFN_ATOMIC_BIT_TEST_AND_RESET) + { + /* Get the signed maximum of the USE_RHS type. */ + and_mask = build_int_cst (TREE_TYPE (use_rhs), + highest - 1); + if (!operand_equal_p (and_mask, mask, 0)) + return false; + + /* Convert + _1 = __atomic_fetch_and_4 (ptr_6, 0x7fffffff, _3); + _5 = (signed int) _1; + _4 = _5 < 0 or _5 >= 0; + to + _1 = __atomic_fetch_and_4 (ptr_6, 0x7fffffff, _3); + _6 = _1 & 0x80000000; + _4 = _6 != 0 or _6 == 0; + and convert + _1 = __atomic_fetch_and_4 (ptr_6, 0x7fffffff, _3); + _5 = (signed int) _1; + if (_5 < 0 or _5 >= 0) + to + _1 = __atomic_fetch_and_4 (ptr_6, 0x7fffffff, _3); + _6 = _1 & 0x80000000; + if (_6 != 0 or _6 == 0) + */ + and_mask = build_int_cst (TREE_TYPE (use_rhs), + highest); + } + else + { + /* Get the signed minimum of the USE_RHS type. */ + and_mask = build_int_cst (TREE_TYPE (use_rhs), + highest); + if (!operand_equal_p (and_mask, mask, 0)) + return false; + + /* Convert + _1 = __atomic_fetch_or_4 (ptr_6, 0x80000000, _3); + _5 = (signed int) _1; + _4 = _5 < 0 or _5 >= 0; + to + _1 = __atomic_fetch_or_4 (ptr_6, 0x80000000, _3); + _6 = _1 & 0x80000000; + _4 = _6 != 0 or _6 == 0; + and convert + _1 = __atomic_fetch_or_4 (ptr_6, 0x80000000, _3); + _5 = (signed int) _1; + if (_5 < 0 or _5 >= 0) + to + _1 = __atomic_fetch_or_4 (ptr_6, 0x80000000, _3); + _6 = _1 & 0x80000000; + if (_6 != 0 or _6 == 0) + */ + } + var = make_ssa_name (TREE_TYPE (use_rhs)); + gimple* use_stmt_removal = use_stmt; + g = gimple_build_assign (var, BIT_AND_EXPR, use_rhs, + and_mask); + gsi = gsi_for_stmt (use_nop_stmt); + gsi_insert_before (&gsi, g, GSI_NEW_STMT); + use_stmt = g; + rhs_code = rhs_code == GE_EXPR ? EQ_EXPR : NE_EXPR; + tree const_zero = build_zero_cst (TREE_TYPE (use_rhs)); + if (use_nop_lhs) + g = gimple_build_assign (use_nop_lhs, rhs_code, + var, const_zero); + else + g = gimple_build_cond (rhs_code, var, const_zero, + nullptr, nullptr); + gsi_insert_after (&gsi, g, GSI_NEW_STMT); + gsi = gsi_for_stmt (use_nop_stmt); + gsi_remove (&gsi, true); + gsi = gsi_for_stmt (use_stmt_removal); + gsi_remove (&gsi, true); + } + } + else + { + tree match_op[3]; + gimple *g; + if (!gimple_nop_atomic_bit_test_and_p (use_nop_lhs, + &match_op[0], NULL) + || SSA_NAME_OCCURS_IN_ABNORMAL_PHI (match_op[2]) + || !single_imm_use (match_op[2], &use_p, &g) + || !is_gimple_assign (g)) + return false; + mask = match_op[0]; + if (TREE_CODE (match_op[1]) == INTEGER_CST) + { + ibit = tree_log2 (match_op[1]); + gcc_assert (ibit >= 0); + } + else + { + g = SSA_NAME_DEF_STMT (match_op[1]); + gcc_assert (is_gimple_assign (g)); + bit = gimple_assign_rhs2 (g); + } + /* Convert + _1 = __atomic_fetch_or_4 (ptr_6, mask, _3); + _2 = (int) _1; + _5 = _2 & mask; + to + _1 = __atomic_fetch_or_4 (ptr_6, mask, _3); + _6 = _1 & mask; + _5 = (int) _6; + and convert + _1 = ~mask_7; + _2 = (unsigned int) _1; + _3 = __atomic_fetch_and_4 (ptr_6, _2, 0); + _4 = (int) _3; + _5 = _4 & mask_7; + to + _1 = __atomic_fetch_and_* (ptr_6, ~mask_7, _3); + _12 = _3 & mask_7; + _5 = (int) _12; + + and Convert + _1 = __atomic_fetch_and_4 (ptr_6, ~mask, _3); + _2 = (short int) _1; + _5 = _2 & mask; + to + _1 = __atomic_fetch_and_4 (ptr_6, ~mask, _3); + _8 = _1 & mask; + _5 = (short int) _8; + */ + gimple_seq stmts = NULL; + match_op[1] = gimple_convert (&stmts, + TREE_TYPE (use_rhs), + match_op[1]); + var = gimple_build (&stmts, BIT_AND_EXPR, + TREE_TYPE (use_rhs), use_rhs, match_op[1]); + gsi = gsi_for_stmt (use_stmt); + gsi_remove (&gsi, true); + release_defs (use_stmt); + use_stmt = gimple_seq_last_stmt (stmts); + gsi = gsi_for_stmt (use_nop_stmt); + gsi_insert_seq_before (&gsi, stmts, GSI_SAME_STMT); + gimple_assign_set_rhs_with_ops (&gsi, CONVERT_EXPR, var); + update_stmt (use_nop_stmt); + } + } + else + return false; + + if (!bit) + { + if (ibit < 0) + gcc_unreachable (); + bit = build_int_cst (TREE_TYPE (lhs), ibit); + } + } + else if (optab_handler (optab, TYPE_MODE (TREE_TYPE (lhs))) + == CODE_FOR_nothing) + return false; + + tree use_lhs = gimple_assign_lhs (use_stmt); + if (!use_lhs) + return false; + + if (!bit) + { + if (TREE_CODE (mask) == INTEGER_CST) + { + if (fn == IFN_ATOMIC_BIT_TEST_AND_RESET) + mask = const_unop (BIT_NOT_EXPR, TREE_TYPE (mask), mask); + mask = fold_convert (TREE_TYPE (lhs), mask); + int ibit = tree_log2 (mask); + if (ibit < 0) + return false; + bit = build_int_cst (TREE_TYPE (lhs), ibit); + } + else if (TREE_CODE (mask) == SSA_NAME) + { + gimple *g = SSA_NAME_DEF_STMT (mask); + tree match_op; + if (gimple_nop_convert (mask, &match_op, NULL)) + { + mask = match_op; + if (TREE_CODE (mask) != SSA_NAME) + return false; + g = SSA_NAME_DEF_STMT (mask); + } + if (!is_gimple_assign (g)) + return false; + + if (fn == IFN_ATOMIC_BIT_TEST_AND_RESET) + { + if (gimple_assign_rhs_code (g) != BIT_NOT_EXPR) + return false; + mask = gimple_assign_rhs1 (g); + if (TREE_CODE (mask) != SSA_NAME) + return false; + g = SSA_NAME_DEF_STMT (mask); + } + + if (!is_gimple_assign (g) + || gimple_assign_rhs_code (g) != LSHIFT_EXPR + || !integer_onep (gimple_assign_rhs1 (g))) + return false; + bit = gimple_assign_rhs2 (g); + } + else + return false; + + tree cmp_mask; + if (gimple_assign_rhs1 (use_stmt) == lhs) + cmp_mask = gimple_assign_rhs2 (use_stmt); + else + cmp_mask = gimple_assign_rhs1 (use_stmt); + + tree match_op; + if (gimple_nop_convert (cmp_mask, &match_op, NULL)) + cmp_mask = match_op; + + if (!operand_equal_p (cmp_mask, mask, 0)) + return false; + } + + bool use_bool = true; + bool has_debug_uses = false; + imm_use_iterator iter; + gimple *g; + + if (SSA_NAME_OCCURS_IN_ABNORMAL_PHI (use_lhs)) + use_bool = false; + FOR_EACH_IMM_USE_STMT (g, iter, use_lhs) + { + enum tree_code code = ERROR_MARK; + tree op0 = NULL_TREE, op1 = NULL_TREE; + if (is_gimple_debug (g)) + { + has_debug_uses = true; + continue; + } + else if (is_gimple_assign (g)) + switch (gimple_assign_rhs_code (g)) + { + case COND_EXPR: + op1 = gimple_assign_rhs1 (g); + code = TREE_CODE (op1); + if (TREE_CODE_CLASS (code) != tcc_comparison) + break; + op0 = TREE_OPERAND (op1, 0); + op1 = TREE_OPERAND (op1, 1); + break; + case EQ_EXPR: + case NE_EXPR: + code = gimple_assign_rhs_code (g); + op0 = gimple_assign_rhs1 (g); + op1 = gimple_assign_rhs2 (g); + break; + default: + break; + } + else if (gimple_code (g) == GIMPLE_COND) + { + code = gimple_cond_code (g); + op0 = gimple_cond_lhs (g); + op1 = gimple_cond_rhs (g); + } + + if ((code == EQ_EXPR || code == NE_EXPR) + && op0 == use_lhs + && integer_zerop (op1)) + { + use_operand_p use_p; + int n = 0; + FOR_EACH_IMM_USE_ON_STMT (use_p, iter) + n++; + if (n == 1) + continue; + } + + use_bool = false; + break; + } + + tree new_lhs = make_ssa_name (TREE_TYPE (lhs)); + tree flag = build_int_cst (TREE_TYPE (lhs), use_bool); + if (has_model_arg) + g = gimple_build_call_internal (fn, 5, gimple_call_arg (call, 0), + bit, flag, gimple_call_arg (call, 2), + gimple_call_fn (call)); + else + g = gimple_build_call_internal (fn, 4, gimple_call_arg (call, 0), + bit, flag, gimple_call_fn (call)); + gimple_call_set_lhs (g, new_lhs); + gimple_set_location (g, gimple_location (call)); + gimple_move_vops (g, call); + bool throws = stmt_can_throw_internal (cfun, call); + gimple_call_set_nothrow (as_a (g), + gimple_call_nothrow_p (as_a (call))); + gimple_stmt_iterator gsi = *gsip; + gsi_insert_after (&gsi, g, GSI_NEW_STMT); + edge e = NULL; + if (throws) + { + maybe_clean_or_replace_eh_stmt (call, g); + if (after || (use_bool && has_debug_uses)) + e = find_fallthru_edge (gsi_bb (gsi)->succs); + } + if (after) + { + /* The internal function returns the value of the specified bit + before the atomic operation. If we are interested in the value + of the specified bit after the atomic operation (makes only sense + for xor, otherwise the bit content is compile time known), + we need to invert the bit. */ + tree mask_convert = mask; + gimple_seq stmts = NULL; + if (!use_bool) + mask_convert = gimple_convert (&stmts, TREE_TYPE (lhs), mask); + new_lhs = gimple_build (&stmts, BIT_XOR_EXPR, TREE_TYPE (lhs), new_lhs, + use_bool ? build_int_cst (TREE_TYPE (lhs), 1) + : mask_convert); + if (throws) + { + gsi_insert_seq_on_edge_immediate (e, stmts); + gsi = gsi_for_stmt (gimple_seq_last (stmts)); + } + else + gsi_insert_seq_after (&gsi, stmts, GSI_NEW_STMT); + } + if (use_bool && has_debug_uses) + { + tree temp = NULL_TREE; + if (!throws || after || single_pred_p (e->dest)) + { + temp = build_debug_expr_decl (TREE_TYPE (lhs)); + tree t = build2 (LSHIFT_EXPR, TREE_TYPE (lhs), new_lhs, bit); + g = gimple_build_debug_bind (temp, t, g); + if (throws && !after) + { + gsi = gsi_after_labels (e->dest); + gsi_insert_before (&gsi, g, GSI_SAME_STMT); + } + else + gsi_insert_after (&gsi, g, GSI_NEW_STMT); + } + FOR_EACH_IMM_USE_STMT (g, iter, use_lhs) + if (is_gimple_debug (g)) + { + use_operand_p use_p; + if (temp == NULL_TREE) + gimple_debug_bind_reset_value (g); + else + FOR_EACH_IMM_USE_ON_STMT (use_p, iter) + SET_USE (use_p, temp); + update_stmt (g); + } + } + SSA_NAME_OCCURS_IN_ABNORMAL_PHI (new_lhs) + = SSA_NAME_OCCURS_IN_ABNORMAL_PHI (use_lhs); + replace_uses_by (use_lhs, new_lhs); + gsi = gsi_for_stmt (use_stmt); + gsi_remove (&gsi, true); + release_defs (use_stmt); + gsi_remove (gsip, true); + release_ssa_name (lhs); + return true; +} + +/* Optimize + _4 = __atomic_add_fetch_* (ptr_6, arg_2, _3); + _5 = _4 == 0; + to + _4 = .ATOMIC_ADD_FETCH_CMP_0 (EQ_EXPR, ptr_6, arg_2, _3); + _5 = _4; + Similarly for __sync_add_and_fetch_* (without the ", _3" part + in there). */ + +static bool +optimize_atomic_op_fetch_cmp_0 (gimple_stmt_iterator *gsip, + enum internal_fn fn, bool has_model_arg) +{ + gimple *call = gsi_stmt (*gsip); + tree lhs = gimple_call_lhs (call); + use_operand_p use_p; + gimple *use_stmt; + + if (!flag_inline_atomics + || !gimple_call_builtin_p (call, BUILT_IN_NORMAL) + || !lhs + || SSA_NAME_OCCURS_IN_ABNORMAL_PHI (lhs) + || !single_imm_use (lhs, &use_p, &use_stmt) + || !gimple_vdef (call)) + return false; + + optab optab; + switch (fn) + { + case IFN_ATOMIC_ADD_FETCH_CMP_0: + optab = atomic_add_fetch_cmp_0_optab; + break; + case IFN_ATOMIC_SUB_FETCH_CMP_0: + optab = atomic_sub_fetch_cmp_0_optab; + break; + case IFN_ATOMIC_AND_FETCH_CMP_0: + optab = atomic_and_fetch_cmp_0_optab; + break; + case IFN_ATOMIC_OR_FETCH_CMP_0: + optab = atomic_or_fetch_cmp_0_optab; + break; + case IFN_ATOMIC_XOR_FETCH_CMP_0: + optab = atomic_xor_fetch_cmp_0_optab; + break; + default: + return false; + } + + if (optab_handler (optab, TYPE_MODE (TREE_TYPE (lhs))) + == CODE_FOR_nothing) + return false; + + tree use_lhs = lhs; + if (gimple_assign_cast_p (use_stmt)) + { + use_lhs = gimple_assign_lhs (use_stmt); + if (!tree_nop_conversion_p (TREE_TYPE (use_lhs), TREE_TYPE (lhs)) + || (!INTEGRAL_TYPE_P (TREE_TYPE (use_lhs)) + && !POINTER_TYPE_P (TREE_TYPE (use_lhs))) + || SSA_NAME_OCCURS_IN_ABNORMAL_PHI (use_lhs) + || !single_imm_use (use_lhs, &use_p, &use_stmt)) + return false; + } + enum tree_code code = ERROR_MARK; + tree op0 = NULL_TREE, op1 = NULL_TREE; + if (is_gimple_assign (use_stmt)) + switch (gimple_assign_rhs_code (use_stmt)) + { + case COND_EXPR: + op1 = gimple_assign_rhs1 (use_stmt); + code = TREE_CODE (op1); + if (TREE_CODE_CLASS (code) == tcc_comparison) + { + op0 = TREE_OPERAND (op1, 0); + op1 = TREE_OPERAND (op1, 1); + } + break; + default: + code = gimple_assign_rhs_code (use_stmt); + if (TREE_CODE_CLASS (code) == tcc_comparison) + { + op0 = gimple_assign_rhs1 (use_stmt); + op1 = gimple_assign_rhs2 (use_stmt); + } + break; + } + else if (gimple_code (use_stmt) == GIMPLE_COND) + { + code = gimple_cond_code (use_stmt); + op0 = gimple_cond_lhs (use_stmt); + op1 = gimple_cond_rhs (use_stmt); + } + + switch (code) + { + case LT_EXPR: + case LE_EXPR: + case GT_EXPR: + case GE_EXPR: + if (!INTEGRAL_TYPE_P (TREE_TYPE (use_lhs)) + || TREE_CODE (TREE_TYPE (use_lhs)) == BOOLEAN_TYPE + || TYPE_UNSIGNED (TREE_TYPE (use_lhs))) + return false; + /* FALLTHRU */ + case EQ_EXPR: + case NE_EXPR: + if (op0 == use_lhs && integer_zerop (op1)) + break; + return false; + default: + return false; + } + + int encoded; + switch (code) + { + /* Use special encoding of the operation. We want to also + encode the mode in the first argument and for neither EQ_EXPR + etc. nor EQ etc. we can rely it will fit into QImode. */ + case EQ_EXPR: encoded = ATOMIC_OP_FETCH_CMP_0_EQ; break; + case NE_EXPR: encoded = ATOMIC_OP_FETCH_CMP_0_NE; break; + case LT_EXPR: encoded = ATOMIC_OP_FETCH_CMP_0_LT; break; + case LE_EXPR: encoded = ATOMIC_OP_FETCH_CMP_0_LE; break; + case GT_EXPR: encoded = ATOMIC_OP_FETCH_CMP_0_GT; break; + case GE_EXPR: encoded = ATOMIC_OP_FETCH_CMP_0_GE; break; + default: gcc_unreachable (); + } + + tree new_lhs = make_ssa_name (boolean_type_node); + gimple *g; + tree flag = build_int_cst (TREE_TYPE (lhs), encoded); + if (has_model_arg) + g = gimple_build_call_internal (fn, 5, flag, + gimple_call_arg (call, 0), + gimple_call_arg (call, 1), + gimple_call_arg (call, 2), + gimple_call_fn (call)); + else + g = gimple_build_call_internal (fn, 4, flag, + gimple_call_arg (call, 0), + gimple_call_arg (call, 1), + gimple_call_fn (call)); + gimple_call_set_lhs (g, new_lhs); + gimple_set_location (g, gimple_location (call)); + gimple_move_vops (g, call); + bool throws = stmt_can_throw_internal (cfun, call); + gimple_call_set_nothrow (as_a (g), + gimple_call_nothrow_p (as_a (call))); + gimple_stmt_iterator gsi = *gsip; + gsi_insert_after (&gsi, g, GSI_SAME_STMT); + if (throws) + maybe_clean_or_replace_eh_stmt (call, g); + if (is_gimple_assign (use_stmt)) + switch (gimple_assign_rhs_code (use_stmt)) + { + case COND_EXPR: + gimple_assign_set_rhs1 (use_stmt, new_lhs); + break; + default: + gsi = gsi_for_stmt (use_stmt); + if (tree ulhs = gimple_assign_lhs (use_stmt)) + if (useless_type_conversion_p (TREE_TYPE (ulhs), + boolean_type_node)) + { + gimple_assign_set_rhs_with_ops (&gsi, SSA_NAME, new_lhs); + break; + } + gimple_assign_set_rhs_with_ops (&gsi, NOP_EXPR, new_lhs); + break; + } + else if (gimple_code (use_stmt) == GIMPLE_COND) + { + gcond *use_cond = as_a (use_stmt); + gimple_cond_set_code (use_cond, NE_EXPR); + gimple_cond_set_lhs (use_cond, new_lhs); + gimple_cond_set_rhs (use_cond, boolean_false_node); + } + + update_stmt (use_stmt); + if (use_lhs != lhs) + { + gsi = gsi_for_stmt (SSA_NAME_DEF_STMT (use_lhs)); + gsi_remove (&gsi, true); + release_ssa_name (use_lhs); + } + gsi_remove (gsip, true); + release_ssa_name (lhs); + return true; +} + +/* Process builtin CALL located at GSI. + Currently it is only fgr atomic functions optimizations from above. */ +static void +gimple_isel_builtin_call (gcall *call, gimple_stmt_iterator *gsi) +{ + /* Don't handle these in non optimization mode or optimize debug mode. */ + if (!optimize || optimize_debug) + return; + + if (!gimple_call_builtin_p (call, BUILT_IN_NORMAL)) + return; + + tree callee = gimple_call_fndecl (call); + + switch (DECL_FUNCTION_CODE (callee)) + { +#define CASE_ATOMIC(NAME) \ + case BUILT_IN_##NAME##_1: \ + case BUILT_IN_##NAME##_2: \ + case BUILT_IN_##NAME##_4: \ + case BUILT_IN_##NAME##_8: \ + case BUILT_IN_##NAME##_16 +#define CASE_ATOMIC_CMP0(ATOMIC, SYNC) \ + CASE_ATOMIC(ATOMIC_##ATOMIC): \ + optimize_atomic_op_fetch_cmp_0 (gsi, \ + IFN_ATOMIC_##ATOMIC##_CMP_0, \ + true); \ + break; \ + CASE_ATOMIC(SYNC_##SYNC): \ + optimize_atomic_op_fetch_cmp_0 (gsi, \ + IFN_ATOMIC_##ATOMIC##_CMP_0, \ + false); \ + break; + + + CASE_ATOMIC_CMP0(ADD_FETCH, ADD_AND_FETCH) + CASE_ATOMIC_CMP0(SUB_FETCH, SUB_AND_FETCH) + CASE_ATOMIC_CMP0(AND_FETCH, AND_AND_FETCH) + CASE_ATOMIC_CMP0(OR_FETCH, OR_AND_FETCH) +#define CASE_ATOMIC_BIT_TEST_AND(ATOMIC, SYNC, FN, AFTER) \ + CASE_ATOMIC(ATOMIC_##ATOMIC): \ + optimize_atomic_bit_test_and (gsi, \ + IFN_ATOMIC_BIT_TEST_AND_##FN, \ + true, AFTER); \ + break; \ + CASE_ATOMIC(SYNC_##SYNC): \ + optimize_atomic_bit_test_and (gsi, \ + IFN_ATOMIC_BIT_TEST_AND_##FN, \ + false, AFTER); \ + break; + CASE_ATOMIC_BIT_TEST_AND(FETCH_OR, FETCH_AND_OR, SET, false) + CASE_ATOMIC_BIT_TEST_AND(FETCH_XOR, FETCH_AND_XOR, COMPLEMENT, false) + CASE_ATOMIC_BIT_TEST_AND(FETCH_AND, FETCH_AND_AND, RESET, false) + + CASE_ATOMIC(ATOMIC_XOR_FETCH): + if (optimize_atomic_bit_test_and + (gsi, IFN_ATOMIC_BIT_TEST_AND_COMPLEMENT, true, true)) + break; + optimize_atomic_op_fetch_cmp_0 (gsi, + IFN_ATOMIC_XOR_FETCH_CMP_0, + true); + break; + CASE_ATOMIC(SYNC_XOR_AND_FETCH): + if (optimize_atomic_bit_test_and + (gsi, IFN_ATOMIC_BIT_TEST_AND_COMPLEMENT, false, true)) + break; + optimize_atomic_op_fetch_cmp_0 (gsi, + IFN_ATOMIC_XOR_FETCH_CMP_0, + false); + break; + + default:; + } +} + /* Iterate all gimple statements and perform pre RTL expansion GIMPLE massaging to improve instruction selection. */ @@ -411,6 +1362,11 @@ pass_gimple_isel::execute (struct function *fun) if (gsi_end_p (gsi)) break; + if (gcall *call = dyn_cast (*gsi)) + { + gimple_isel_builtin_call (call, &gsi); + continue; + } gassign *stmt = dyn_cast (*gsi); if (!stmt) continue; diff --git a/gcc/gimple-lower-bitint.cc b/gcc/gimple-lower-bitint.cc index 9b4d49395ae3..28802e3b4aaa 100644 --- a/gcc/gimple-lower-bitint.cc +++ b/gcc/gimple-lower-bitint.cc @@ -105,7 +105,7 @@ bitint_precision_kind (int prec) bitint_big_endian = info.big_endian; bitint_extended = info.extended; if (!large_min_prec - && GET_MODE_PRECISION (limb_mode) < MAX_FIXED_MODE_SIZE) + && GET_MODE_PRECISION (limb_mode) <= MAX_FIXED_MODE_SIZE) large_min_prec = MAX_FIXED_MODE_SIZE + 1; if (!limb_prec) limb_prec = GET_MODE_PRECISION (limb_mode); @@ -125,9 +125,9 @@ bitint_precision_kind (int prec) mid_min_prec = prec; return bitint_prec_middle; } - if (large_min_prec && prec <= large_min_prec) - return bitint_prec_large; - return bitint_prec_huge; + if (huge_min_prec && prec >= huge_min_prec) + return bitint_prec_huge; + return bitint_prec_large; } /* Same for a TYPE. */ @@ -7232,15 +7232,62 @@ gimple_lower_bitint (void) if (is_gimple_assign (SSA_NAME_DEF_STMT (s))) switch (gimple_assign_rhs_code (SSA_NAME_DEF_STMT (s))) { + case REALPART_EXPR: case IMAGPART_EXPR: { - tree rhs1 = gimple_assign_rhs1 (SSA_NAME_DEF_STMT (s)); + gimple *ds = SSA_NAME_DEF_STMT (s); + tree rhs1 = gimple_assign_rhs1 (ds); rhs1 = TREE_OPERAND (rhs1, 0); if (TREE_CODE (rhs1) == SSA_NAME) { gimple *g = SSA_NAME_DEF_STMT (rhs1); if (optimizable_arith_overflow (g)) - continue; + { + if (gimple_assign_rhs_code (ds) == IMAGPART_EXPR) + continue; + if (gimple_store_p (use_stmt)) + { + /* Punt if the cast use of IMAGPART_EXPR stmt + appears before the store use_stmt, because + optimizable arith overflow can't be + lowered at the store location in that case. + See PR121828. */ + gimple_stmt_iterator gsi + = gsi_for_stmt (use_stmt); + unsigned int cnt = 0; + do + { + gsi_prev_nondebug (&gsi); + if (gsi_end_p (gsi)) + break; + gimple *g2 = gsi_stmt (gsi); + if (g2 == ds) + break; + if (++cnt == 64) + break; + if (!gimple_assign_cast_p (g2)) + continue; + tree rhs2 = gimple_assign_rhs1 (g2); + if (TREE_CODE (rhs2) != SSA_NAME) + continue; + gimple *g3 = SSA_NAME_DEF_STMT (rhs2); + if (!is_gimple_assign (g3)) + continue; + if (gimple_assign_rhs_code (g3) + != IMAGPART_EXPR) + continue; + rhs2 = gimple_assign_rhs1 (g3); + rhs2 = TREE_OPERAND (rhs2, 0); + if (rhs2 != rhs1) + continue; + cnt = 64; + break; + } + while (1); + if (cnt == 64) + break; + } + } } } /* FALLTHRU */ @@ -7251,7 +7298,6 @@ gimple_lower_bitint (void) case EXACT_DIV_EXPR: case TRUNC_MOD_EXPR: case FIX_TRUNC_EXPR: - case REALPART_EXPR: if (gimple_store_p (use_stmt) && is_gimple_assign (use_stmt) && !gimple_has_volatile_ops (use_stmt) diff --git a/gcc/gimple-ssa-pta-constraints.cc b/gcc/gimple-ssa-pta-constraints.cc new file mode 100644 index 000000000000..7212707858e5 --- /dev/null +++ b/gcc/gimple-ssa-pta-constraints.cc @@ -0,0 +1,4184 @@ +/* Constraint builder for tree based points-to analysis + Copyright (C) 2005-2025 Free Software Foundation, Inc. + Contributed by Daniel Berlin + + This file is part of GCC. + + GCC is free software; you can redistribute it and/or modify + 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. + + 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 "config.h" +#include "system.h" +#include "coretypes.h" +#include "backend.h" +#include "rtl.h" +#include "tree.h" +#include "gimple.h" +#include "alloc-pool.h" +#include "tree-pass.h" +#include "ssa.h" +#include "cgraph.h" +#include "tree-pretty-print.h" +#include "diagnostic-core.h" +#include "fold-const.h" +#include "stor-layout.h" +#include "stmt.h" +#include "gimple-iterator.h" +#include "tree-into-ssa.h" +#include "tree-dfa.h" +#include "gimple-walk.h" +#include "varasm.h" +#include "stringpool.h" +#include "attribs.h" +#include "tree-ssa.h" +#include "tree-cfg.h" +#include "gimple-range.h" +#include "ipa-modref-tree.h" +#include "ipa-modref.h" +#include "attr-fnspec.h" + +#include "tree-ssa-structalias.h" +#include "gimple-ssa-pta-constraints.h" + +using namespace pointer_analysis; + +/* Map from trees to variable infos. */ +static hash_map *vi_for_tree; + +/* A map mapping call statements to per-stmt variables for uses + and clobbers specific to the call. */ +static hash_map *call_stmt_vars; + +static unsigned int create_variable_info_for (tree, const char *, bool); +static inline bool type_can_have_subvars (const_tree); +static void make_param_constraints (varinfo_t); + +/* Lookup or create the variable for the call statement CALL. */ + +static varinfo_t +get_call_vi (gcall *call) +{ + varinfo_t vi, vi2; + + bool existed; + varinfo_t *slot_p = &call_stmt_vars->get_or_insert (call, &existed); + if (existed) + return *slot_p; + + vi = new_var_info (NULL_TREE, "CALLUSED", true); + vi->offset = 0; + vi->size = 1; + vi->fullsize = 2; + vi->is_full_var = true; + vi->is_reg_var = true; + + vi2 = new_var_info (NULL_TREE, "CALLCLOBBERED", true); + vi2->offset = 1; + vi2->size = 1; + vi2->fullsize = 2; + vi2->is_full_var = true; + vi2->is_reg_var = true; + + vi->next = vi2->id; + + *slot_p = vi; + return vi; +} + +/* Lookup or create the variable for the call statement CALL representing + the uses. */ + +static varinfo_t +get_call_use_vi (gcall *call) +{ + return get_call_vi (call); +} + +/* Lookup or create the variable for the call statement CALL representing + the clobbers. */ + +static varinfo_t ATTRIBUTE_UNUSED +get_call_clobber_vi (gcall *call) +{ + return vi_next (get_call_vi (call)); +} + + +static void get_constraint_for_1 (tree, vec *, bool, bool); +static void get_constraint_for (tree, vec *); +static void get_constraint_for_rhs (tree, vec *); +static void do_deref (vec *); + +/* Allocator for 'constraints' vector. */ + +static object_allocator constraint_pool ("Constraint pool"); + +/* Create a new constraint consisting of LHS and RHS expressions. */ + +static constraint_t +new_constraint (const struct constraint_expr lhs, + const struct constraint_expr rhs) +{ + constraint_t ret = constraint_pool.allocate (); + ret->lhs = lhs; + ret->rhs = rhs; + return ret; +} + +/* Insert ID as the variable id for tree T in the vi_for_tree map. */ + +static void +insert_vi_for_tree (tree t, varinfo_t vi) +{ + gcc_assert (vi); + bool existed = vi_for_tree->put (t, vi); + gcc_assert (!existed); +} + +/* Return a printable name for DECL. */ + +static const char * +alias_get_name (tree decl) +{ + const char *res = "NULL"; + if (dump_file) + { + char *temp = NULL; + if (TREE_CODE (decl) == SSA_NAME) + { + res = get_name (decl); + temp = xasprintf ("%s_%u", res ? res : "", SSA_NAME_VERSION (decl)); + } + else if (HAS_DECL_ASSEMBLER_NAME_P (decl) + && DECL_ASSEMBLER_NAME_SET_P (decl)) + res = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME_RAW (decl)); + else if (DECL_P (decl)) + { + res = get_name (decl); + if (!res) + temp = xasprintf ("D.%u", DECL_UID (decl)); + } + + if (temp) + { + res = ggc_strdup (temp); + free (temp); + } + } + + return res; +} + +/* Find the variable id for tree T in the map. + If T doesn't exist in the map, create an entry for it and return it. */ + +static varinfo_t +get_vi_for_tree (tree t) +{ + varinfo_t *slot = vi_for_tree->get (t); + if (slot == NULL) + { + unsigned int id = create_variable_info_for (t, alias_get_name (t), false); + return get_varinfo (id); + } + + return *slot; +} + +/* Get a scalar constraint expression for a new temporary variable. */ + +static struct constraint_expr +new_scalar_tmp_constraint_exp (const char *name, bool add_id) +{ + struct constraint_expr tmp; + varinfo_t vi; + + vi = new_var_info (NULL_TREE, name, add_id); + vi->offset = 0; + vi->size = -1; + vi->fullsize = -1; + vi->is_full_var = 1; + vi->is_reg_var = 1; + + tmp.var = vi->id; + tmp.type = SCALAR; + tmp.offset = 0; + + return tmp; +} + +/* Get a constraint expression vector from an SSA_VAR_P node. + If address_p is true, the result will be taken its address of. */ + +static void +get_constraint_for_ssa_var (tree t, vec *results, bool address_p) +{ + struct constraint_expr cexpr; + varinfo_t vi; + + /* We allow FUNCTION_DECLs here even though it doesn't make much sense. */ + gcc_assert (TREE_CODE (t) == SSA_NAME || DECL_P (t)); + + if (TREE_CODE (t) == SSA_NAME + && SSA_NAME_IS_DEFAULT_DEF (t)) + { + /* For parameters, get at the points-to set for the actual parm + decl. */ + if (TREE_CODE (SSA_NAME_VAR (t)) == PARM_DECL + || TREE_CODE (SSA_NAME_VAR (t)) == RESULT_DECL) + { + get_constraint_for_ssa_var (SSA_NAME_VAR (t), results, address_p); + return; + } + /* For undefined SSA names return nothing. */ + else if (!ssa_defined_default_def_p (t)) + { + cexpr.var = nothing_id; + cexpr.type = SCALAR; + cexpr.offset = 0; + results->safe_push (cexpr); + return; + } + } + + /* For global variables resort to the alias target. */ + if (VAR_P (t) && (TREE_STATIC (t) || DECL_EXTERNAL (t))) + { + varpool_node *node = varpool_node::get (t); + if (node && node->alias && node->analyzed) + { + node = node->ultimate_alias_target (); + /* Canonicalize the PT uid of all aliases to the ultimate target. + ??? Hopefully the set of aliases can't change in a way that + changes the ultimate alias target. */ + gcc_assert ((! DECL_PT_UID_SET_P (node->decl) + || DECL_PT_UID (node->decl) == DECL_UID (node->decl)) + && (! DECL_PT_UID_SET_P (t) + || DECL_PT_UID (t) == DECL_UID (node->decl))); + DECL_PT_UID (t) = DECL_UID (node->decl); + t = node->decl; + } + + /* If this is decl may bind to NULL note that. */ + if (address_p + && (! node || ! node->nonzero_address ())) + { + cexpr.var = nothing_id; + cexpr.type = SCALAR; + cexpr.offset = 0; + results->safe_push (cexpr); + } + } + + vi = get_vi_for_tree (t); + cexpr.var = vi->id; + cexpr.type = SCALAR; + cexpr.offset = 0; + + /* If we are not taking the address of the constraint expr, add all + sub-fiels of the variable as well. */ + if (!address_p + && !vi->is_full_var) + { + for (; vi; vi = vi_next (vi)) + { + cexpr.var = vi->id; + results->safe_push (cexpr); + } + return; + } + + results->safe_push (cexpr); +} + +/* Process constraint T, performing various simplifications and then + adding it to our list of overall constraints. */ + +static void +process_constraint (constraint_t t) +{ + struct constraint_expr rhs = t->rhs; + struct constraint_expr lhs = t->lhs; + + gcc_assert (rhs.var < varmap.length ()); + gcc_assert (lhs.var < varmap.length ()); + + /* If we didn't get any useful constraint from the lhs we get + &ANYTHING as fallback from get_constraint_for. Deal with + it here by turning it into *ANYTHING. */ + if (lhs.type == ADDRESSOF + && lhs.var == anything_id) + t->lhs.type = lhs.type = DEREF; + + /* ADDRESSOF on the lhs is invalid. */ + gcc_assert (lhs.type != ADDRESSOF); + + /* We shouldn't add constraints from things that cannot have pointers. + It's not completely trivial to avoid in the callers, so do it here. */ + if (rhs.type != ADDRESSOF + && !get_varinfo (rhs.var)->may_have_pointers) + return; + + /* Likewise adding to the solution of a non-pointer var isn't useful. */ + if (!get_varinfo (lhs.var)->may_have_pointers) + return; + + /* This can happen in our IR with things like n->a = *p. */ + if (rhs.type == DEREF && lhs.type == DEREF && rhs.var != anything_id) + { + /* Split into tmp = *rhs, *lhs = tmp. */ + struct constraint_expr tmplhs; + tmplhs = new_scalar_tmp_constraint_exp ("doubledereftmp", true); + process_constraint (new_constraint (tmplhs, rhs)); + process_constraint (new_constraint (lhs, tmplhs)); + } + else if ((rhs.type != SCALAR || rhs.offset != 0) && lhs.type == DEREF) + { + /* Split into tmp = &rhs, *lhs = tmp. */ + struct constraint_expr tmplhs; + tmplhs = new_scalar_tmp_constraint_exp ("derefaddrtmp", true); + process_constraint (new_constraint (tmplhs, rhs)); + process_constraint (new_constraint (lhs, tmplhs)); + } + else + { + gcc_assert (rhs.type != ADDRESSOF || rhs.offset == 0); + if (rhs.type == ADDRESSOF) + get_varinfo (get_varinfo (rhs.var)->head)->address_taken = true; + constraints.safe_push (t); + } +} + + +/* Return the position, in bits, of FIELD_DECL from the beginning of its + structure. */ + +static unsigned HOST_WIDE_INT +bitpos_of_field (const tree fdecl) +{ + if (!tree_fits_uhwi_p (DECL_FIELD_OFFSET (fdecl)) + || !tree_fits_uhwi_p (DECL_FIELD_BIT_OFFSET (fdecl))) + return -1; + + return (tree_to_uhwi (DECL_FIELD_OFFSET (fdecl)) * BITS_PER_UNIT + + tree_to_uhwi (DECL_FIELD_BIT_OFFSET (fdecl))); +} + + +/* Get constraint expressions for offsetting PTR by OFFSET. Stores the + resulting constraint expressions in *RESULTS. */ + +static void +get_constraint_for_ptr_offset (tree ptr, tree offset, + vec *results) +{ + struct constraint_expr c; + unsigned int j, n; + HOST_WIDE_INT rhsoffset; + + /* If we do not do field-sensitive PTA adding offsets to pointers + does not change the points-to solution. */ + if (!use_field_sensitive) + { + get_constraint_for_rhs (ptr, results); + return; + } + + /* If the offset is not a non-negative integer constant that fits + in a HOST_WIDE_INT, we have to fall back to a conservative + solution which includes all sub-fields of all pointed-to + variables of ptr. */ + if (offset == NULL_TREE + || TREE_CODE (offset) != INTEGER_CST) + rhsoffset = UNKNOWN_OFFSET; + else + { + /* Sign-extend the offset. */ + offset_int soffset = offset_int::from (wi::to_wide (offset), SIGNED); + if (!wi::fits_shwi_p (soffset)) + rhsoffset = UNKNOWN_OFFSET; + else + { + /* Make sure the bit-offset also fits. */ + HOST_WIDE_INT rhsunitoffset = soffset.to_shwi (); + rhsoffset = rhsunitoffset * (unsigned HOST_WIDE_INT) BITS_PER_UNIT; + if (rhsunitoffset != rhsoffset / BITS_PER_UNIT) + rhsoffset = UNKNOWN_OFFSET; + } + } + + get_constraint_for_rhs (ptr, results); + if (rhsoffset == 0) + return; + + /* As we are eventually appending to the solution do not use + vec::iterate here. */ + n = results->length (); + for (j = 0; j < n; j++) + { + varinfo_t curr; + c = (*results)[j]; + curr = get_varinfo (c.var); + + if (c.type == ADDRESSOF + /* If this varinfo represents a full variable just use it. */ + && curr->is_full_var) + ; + else if (c.type == ADDRESSOF + /* If we do not know the offset add all subfields. */ + && rhsoffset == UNKNOWN_OFFSET) + { + varinfo_t temp = get_varinfo (curr->head); + do + { + struct constraint_expr c2; + c2.var = temp->id; + c2.type = ADDRESSOF; + c2.offset = 0; + if (c2.var != c.var) + results->safe_push (c2); + temp = vi_next (temp); + } + while (temp); + } + else if (c.type == ADDRESSOF) + { + varinfo_t temp; + unsigned HOST_WIDE_INT offset = curr->offset + rhsoffset; + + /* If curr->offset + rhsoffset is less than zero adjust it. */ + if (rhsoffset < 0 + && curr->offset < offset) + offset = 0; + + /* We have to include all fields that overlap the current + field shifted by rhsoffset. And we include at least + the last or the first field of the variable to represent + reachability of off-bound addresses, in particular &object + 1, + conservatively correct. */ + temp = first_or_preceding_vi_for_offset (curr, offset); + c.var = temp->id; + c.offset = 0; + temp = vi_next (temp); + while (temp + && temp->offset < offset + curr->size) + { + struct constraint_expr c2; + c2.var = temp->id; + c2.type = ADDRESSOF; + c2.offset = 0; + results->safe_push (c2); + temp = vi_next (temp); + } + } + else if (c.type == SCALAR) + { + gcc_assert (c.offset == 0); + c.offset = rhsoffset; + } + else + /* We shouldn't get any DEREFs here. */ + gcc_unreachable (); + + (*results)[j] = c; + } +} + + +/* Given a COMPONENT_REF T, return the constraint_expr vector for it. + If address_p is true the result will be taken its address of. + If lhs_p is true then the constraint expression is assumed to be used + as the lhs. */ + +static void +get_constraint_for_component_ref (tree t, vec *results, + bool address_p, bool lhs_p) +{ + tree orig_t = t; + poly_int64 bitsize = -1; + poly_int64 bitmaxsize = -1; + poly_int64 bitpos; + bool reverse; + tree forzero; + + /* Some people like to do cute things like take the address of + &0->a.b. */ + forzero = t; + while (handled_component_p (forzero) + || INDIRECT_REF_P (forzero) + || TREE_CODE (forzero) == MEM_REF) + forzero = TREE_OPERAND (forzero, 0); + + if (CONSTANT_CLASS_P (forzero) && integer_zerop (forzero)) + { + struct constraint_expr temp; + + temp.offset = 0; + temp.var = integer_id; + temp.type = SCALAR; + results->safe_push (temp); + return; + } + + t = get_ref_base_and_extent (t, &bitpos, &bitsize, &bitmaxsize, &reverse); + + /* We can end up here for component references on a + VIEW_CONVERT_EXPR <>(&foobar) or things like a + BIT_FIELD_REF <&MEM[(void *)&b + 4B], ...>. So for + symbolic constants simply give up. */ + if (TREE_CODE (t) == ADDR_EXPR) + { + constraint_expr result; + result.type = SCALAR; + result.var = anything_id; + result.offset = 0; + results->safe_push (result); + return; + } + + /* Avoid creating pointer-offset constraints, so handle MEM_REF + offsets directly. Pretend to take the address of the base, + we'll take care of adding the required subset of sub-fields below. */ + if (TREE_CODE (t) == MEM_REF + && !integer_zerop (TREE_OPERAND (t, 0))) + { + poly_offset_int off = mem_ref_offset (t); + off <<= LOG2_BITS_PER_UNIT; + off += bitpos; + poly_int64 off_hwi; + if (off.to_shwi (&off_hwi)) + bitpos = off_hwi; + else + { + bitpos = 0; + bitmaxsize = -1; + } + get_constraint_for_1 (TREE_OPERAND (t, 0), results, false, lhs_p); + do_deref (results); + } + else + get_constraint_for_1 (t, results, true, lhs_p); + + /* Strip off nothing_id. */ + if (results->length () == 2) + { + gcc_assert ((*results)[0].var == nothing_id); + results->unordered_remove (0); + } + gcc_assert (results->length () == 1); + struct constraint_expr &result = results->last (); + + if (result.type == SCALAR + && get_varinfo (result.var)->is_full_var) + /* For single-field vars do not bother about the offset. */ + result.offset = 0; + else if (result.type == SCALAR) + { + /* In languages like C, you can access one past the end of an + array. You aren't allowed to dereference it, so we can + ignore this constraint. When we handle pointer subtraction, + we may have to do something cute here. */ + + if (maybe_lt (poly_uint64 (bitpos), get_varinfo (result.var)->fullsize) + && maybe_ne (bitmaxsize, 0)) + { + /* It's also not true that the constraint will actually start at the + right offset, it may start in some padding. We only care about + setting the constraint to the first actual field it touches, so + walk to find it. */ + struct constraint_expr cexpr = result; + varinfo_t curr; + results->pop (); + cexpr.offset = 0; + for (curr = get_varinfo (cexpr.var); curr; curr = vi_next (curr)) + { + if (ranges_maybe_overlap_p (poly_int64 (curr->offset), + curr->size, bitpos, bitmaxsize)) + { + cexpr.var = curr->id; + results->safe_push (cexpr); + if (address_p) + break; + } + } + /* If we are going to take the address of this field then + to be able to compute reachability correctly add at least + the last field of the variable. */ + if (address_p && results->length () == 0) + { + curr = get_varinfo (cexpr.var); + while (curr->next != 0) + curr = vi_next (curr); + cexpr.var = curr->id; + results->safe_push (cexpr); + } + else if (results->length () == 0) + /* Assert that we found *some* field there. The user couldn't be + accessing *only* padding. */ + /* Still the user could access one past the end of an array + embedded in a struct resulting in accessing *only* padding. */ + /* Or accessing only padding via type-punning to a type + that has a filed just in padding space. */ + { + cexpr.type = SCALAR; + cexpr.var = anything_id; + cexpr.offset = 0; + results->safe_push (cexpr); + } + } + else if (known_eq (bitmaxsize, 0)) + { + if (dump_file && (dump_flags & TDF_DETAILS)) + fprintf (dump_file, "Access to zero-sized part of variable, " + "ignoring\n"); + } + else + if (dump_file && (dump_flags & TDF_DETAILS)) + fprintf (dump_file, "Access to past the end of variable, ignoring\n"); + } + else if (result.type == DEREF) + { + /* If we do not know exactly where the access goes say so. Note + that only for non-structure accesses we know that we access + at most one subfiled of any variable. */ + HOST_WIDE_INT const_bitpos; + if (!bitpos.is_constant (&const_bitpos) + || const_bitpos == -1 + || maybe_ne (bitsize, bitmaxsize) + || AGGREGATE_TYPE_P (TREE_TYPE (orig_t)) + || result.offset == UNKNOWN_OFFSET) + result.offset = UNKNOWN_OFFSET; + else + result.offset += const_bitpos; + } + else if (result.type == ADDRESSOF) + { + /* We can end up here for component references on constants like + VIEW_CONVERT_EXPR <>({ 0, 1, 2, 3 })[i]. */ + result.type = SCALAR; + result.var = anything_id; + result.offset = 0; + } + else + gcc_unreachable (); +} + + +/* Dereference the constraint expression CONS, and return the result. + DEREF (ADDRESSOF) = SCALAR + DEREF (SCALAR) = DEREF + DEREF (DEREF) = (temp = DEREF1; result = DEREF (temp)) + This is needed so that we can handle dereferencing DEREF constraints. */ + +static void +do_deref (vec *constraints) +{ + struct constraint_expr *c; + unsigned int i = 0; + + FOR_EACH_VEC_ELT (*constraints, i, c) + { + if (c->type == SCALAR) + c->type = DEREF; + else if (c->type == ADDRESSOF) + c->type = SCALAR; + else if (c->type == DEREF) + { + struct constraint_expr tmplhs; + tmplhs = new_scalar_tmp_constraint_exp ("dereftmp", true); + process_constraint (new_constraint (tmplhs, *c)); + c->var = tmplhs.var; + } + else + gcc_unreachable (); + } +} + +/* Given a tree T, return the constraint expression for taking the + address of it. */ + +static void +get_constraint_for_address_of (tree t, vec *results) +{ + struct constraint_expr *c; + unsigned int i; + + get_constraint_for_1 (t, results, true, true); + + FOR_EACH_VEC_ELT (*results, i, c) + { + if (c->type == DEREF) + c->type = SCALAR; + else + c->type = ADDRESSOF; + } +} + +/* Given a tree T, return the constraint expression for it. */ + +static void +get_constraint_for_1 (tree t, vec *results, bool address_p, + bool lhs_p) +{ + struct constraint_expr temp; + + /* x = integer is all glommed to a single variable, which doesn't + point to anything by itself. That is, of course, unless it is an + integer constant being treated as a pointer, in which case, we + will return that this is really the addressof anything. This + happens below, since it will fall into the default case. The only + case we know something about an integer treated like a pointer is + when it is the NULL pointer, and then we just say it points to + NULL. + + Do not do that if -fno-delete-null-pointer-checks though, because + in that case *NULL does not fail, so it _should_ alias *anything. + It is not worth adding a new option or renaming the existing one, + since this case is relatively obscure. */ + if ((TREE_CODE (t) == INTEGER_CST + && integer_zerop (t)) + /* The only valid CONSTRUCTORs in gimple with pointer typed + elements are zero-initializer. But in IPA mode we also + process global initializers, so verify at least. */ + || (TREE_CODE (t) == CONSTRUCTOR + && CONSTRUCTOR_NELTS (t) == 0)) + { + if (flag_delete_null_pointer_checks) + temp.var = nothing_id; + else + temp.var = nonlocal_id; + temp.type = ADDRESSOF; + temp.offset = 0; + results->safe_push (temp); + return; + } + + /* String constants are read-only, ideally we'd have a CONST_DECL + for those. */ + if (TREE_CODE (t) == STRING_CST) + { + temp.var = string_id; + temp.type = SCALAR; + temp.offset = 0; + results->safe_push (temp); + return; + } + + switch (TREE_CODE_CLASS (TREE_CODE (t))) + { + case tcc_expression: + { + switch (TREE_CODE (t)) + { + case ADDR_EXPR: + get_constraint_for_address_of (TREE_OPERAND (t, 0), results); + return; + default:; + } + break; + } + case tcc_reference: + { + if (!lhs_p && TREE_THIS_VOLATILE (t)) + /* Fall back to anything. */ + break; + + switch (TREE_CODE (t)) + { + case MEM_REF: + { + struct constraint_expr cs; + varinfo_t vi, curr; + get_constraint_for_ptr_offset (TREE_OPERAND (t, 0), + TREE_OPERAND (t, 1), results); + do_deref (results); + + /* If we are not taking the address then make sure to process + all subvariables we might access. */ + if (address_p) + return; + + cs = results->last (); + if (cs.type == DEREF + && type_can_have_subvars (TREE_TYPE (t))) + { + /* For dereferences this means we have to defer it + to solving time. */ + results->last ().offset = UNKNOWN_OFFSET; + return; + } + if (cs.type != SCALAR) + return; + + vi = get_varinfo (cs.var); + curr = vi_next (vi); + if (!vi->is_full_var + && curr) + { + unsigned HOST_WIDE_INT size; + if (tree_fits_uhwi_p (TYPE_SIZE (TREE_TYPE (t)))) + size = tree_to_uhwi (TYPE_SIZE (TREE_TYPE (t))); + else + size = -1; + for (; curr; curr = vi_next (curr)) + { + /* The start of the access might happen anywhere + within vi, so conservatively assume it was + at its end. */ + if (curr->offset - (vi->offset + vi->size - 1) < size) + { + cs.var = curr->id; + results->safe_push (cs); + } + else + break; + } + } + return; + } + case ARRAY_REF: + case ARRAY_RANGE_REF: + case COMPONENT_REF: + case IMAGPART_EXPR: + case REALPART_EXPR: + case BIT_FIELD_REF: + get_constraint_for_component_ref (t, results, address_p, lhs_p); + return; + case VIEW_CONVERT_EXPR: + get_constraint_for_1 (TREE_OPERAND (t, 0), results, address_p, + lhs_p); + return; + /* We are missing handling for TARGET_MEM_REF here. */ + default:; + } + break; + } + case tcc_exceptional: + { + switch (TREE_CODE (t)) + { + case SSA_NAME: + { + get_constraint_for_ssa_var (t, results, address_p); + return; + } + case CONSTRUCTOR: + { + unsigned int i; + tree val; + auto_vec tmp; + FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (t), i, val) + { + struct constraint_expr *rhsp; + unsigned j; + get_constraint_for_1 (val, &tmp, address_p, lhs_p); + FOR_EACH_VEC_ELT (tmp, j, rhsp) + results->safe_push (*rhsp); + tmp.truncate (0); + } + /* We do not know whether the constructor was complete, + so technically we have to add &NOTHING or &ANYTHING + like we do for an empty constructor as well. */ + return; + } + default:; + } + break; + } + case tcc_declaration: + { + if (!lhs_p && VAR_P (t) && TREE_THIS_VOLATILE (t)) + /* Fall back to anything. */ + break; + get_constraint_for_ssa_var (t, results, address_p); + return; + } + case tcc_constant: + { + /* We cannot refer to automatic variables through constants. */ + temp.type = ADDRESSOF; + temp.var = nonlocal_id; + temp.offset = 0; + results->safe_push (temp); + return; + } + default:; + } + + /* The default fallback is a constraint from anything. */ + temp.type = ADDRESSOF; + temp.var = anything_id; + temp.offset = 0; + results->safe_push (temp); +} + +/* Given a gimple tree T, return the constraint expression vector for it. */ + +static void +get_constraint_for (tree t, vec *results) +{ + gcc_assert (results->length () == 0); + + get_constraint_for_1 (t, results, false, true); +} + +/* Given a gimple tree T, return the constraint expression vector for it + to be used as the rhs of a constraint. */ + +static void +get_constraint_for_rhs (tree t, vec *results) +{ + gcc_assert (results->length () == 0); + + get_constraint_for_1 (t, results, false, false); +} + + +/* Efficiently generates constraints from all entries in *RHSC to all + entries in *LHSC. */ + +static void +process_all_all_constraints (const vec &lhsc, + const vec &rhsc) +{ + struct constraint_expr *lhsp, *rhsp; + unsigned i, j; + + if (lhsc.length () <= 1 || rhsc.length () <= 1) + { + FOR_EACH_VEC_ELT (lhsc, i, lhsp) + FOR_EACH_VEC_ELT (rhsc, j, rhsp) + process_constraint (new_constraint (*lhsp, *rhsp)); + } + else + { + struct constraint_expr tmp; + tmp = new_scalar_tmp_constraint_exp ("allalltmp", true); + FOR_EACH_VEC_ELT (rhsc, i, rhsp) + process_constraint (new_constraint (tmp, *rhsp)); + FOR_EACH_VEC_ELT (lhsc, i, lhsp) + process_constraint (new_constraint (*lhsp, tmp)); + } +} + +/* Handle aggregate copies by expanding into copies of the respective + fields of the structures. */ + +static void +do_structure_copy (tree lhsop, tree rhsop) +{ + struct constraint_expr *lhsp, *rhsp; + auto_vec lhsc; + auto_vec rhsc; + unsigned j; + + get_constraint_for (lhsop, &lhsc); + get_constraint_for_rhs (rhsop, &rhsc); + lhsp = &lhsc[0]; + rhsp = &rhsc[0]; + if (lhsp->type == DEREF + || (lhsp->type == ADDRESSOF && lhsp->var == anything_id) + || rhsp->type == DEREF) + { + if (lhsp->type == DEREF) + { + gcc_assert (lhsc.length () == 1); + lhsp->offset = UNKNOWN_OFFSET; + } + if (rhsp->type == DEREF) + { + gcc_assert (rhsc.length () == 1); + rhsp->offset = UNKNOWN_OFFSET; + } + process_all_all_constraints (lhsc, rhsc); + } + else if (lhsp->type == SCALAR + && (rhsp->type == SCALAR + || rhsp->type == ADDRESSOF)) + { + HOST_WIDE_INT lhssize, lhsoffset; + HOST_WIDE_INT rhssize, rhsoffset; + bool reverse; + unsigned k = 0; + if (!get_ref_base_and_extent_hwi (lhsop, &lhsoffset, &lhssize, &reverse) + || !get_ref_base_and_extent_hwi (rhsop, &rhsoffset, &rhssize, + &reverse)) + { + process_all_all_constraints (lhsc, rhsc); + return; + } + for (j = 0; lhsc.iterate (j, &lhsp);) + { + varinfo_t lhsv, rhsv; + rhsp = &rhsc[k]; + lhsv = get_varinfo (lhsp->var); + rhsv = get_varinfo (rhsp->var); + if (lhsv->may_have_pointers + && (lhsv->is_full_var + || rhsv->is_full_var + || ranges_overlap_p (lhsv->offset + rhsoffset, lhsv->size, + rhsv->offset + lhsoffset, rhsv->size))) + process_constraint (new_constraint (*lhsp, *rhsp)); + if (!rhsv->is_full_var + && (lhsv->is_full_var + || (lhsv->offset + rhsoffset + lhsv->size + > rhsv->offset + lhsoffset + rhsv->size))) + { + ++k; + if (k >= rhsc.length ()) + break; + } + else + ++j; + } + } + else + gcc_unreachable (); +} + +/* Create constraints ID = { rhsc }. */ + +static void +make_constraints_to (unsigned id, const vec &rhsc) +{ + struct constraint_expr *c; + struct constraint_expr includes; + unsigned int j; + + includes.var = id; + includes.offset = 0; + includes.type = SCALAR; + + FOR_EACH_VEC_ELT (rhsc, j, c) + process_constraint (new_constraint (includes, *c)); +} + +/* Create a constraint ID = OP. */ + +static void +make_constraint_to (unsigned id, tree op) +{ + auto_vec rhsc; + get_constraint_for_rhs (op, &rhsc); + make_constraints_to (id, rhsc); +} + +/* Create a constraint ID = &FROM. */ + +static void +make_constraint_from (varinfo_t vi, int from) +{ + struct constraint_expr lhs, rhs; + + lhs.var = vi->id; + lhs.offset = 0; + lhs.type = SCALAR; + + rhs.var = from; + rhs.offset = 0; + rhs.type = ADDRESSOF; + process_constraint (new_constraint (lhs, rhs)); +} + +/* Create a constraint ID = FROM. */ + +static void +make_copy_constraint (varinfo_t vi, int from) +{ + struct constraint_expr lhs, rhs; + + lhs.var = vi->id; + lhs.offset = 0; + lhs.type = SCALAR; + + rhs.var = from; + rhs.offset = 0; + rhs.type = SCALAR; + process_constraint (new_constraint (lhs, rhs)); +} + +/* Make constraints necessary to make OP escape. */ + +static void +make_escape_constraint (tree op) +{ + make_constraint_to (escaped_id, op); +} + +/* Make constraint necessary to make all indirect references + from VI escape. */ + +static void +make_indirect_escape_constraint (varinfo_t vi) +{ + struct constraint_expr lhs, rhs; + /* escaped = *(VAR + UNKNOWN); */ + lhs.type = SCALAR; + lhs.var = escaped_id; + lhs.offset = 0; + rhs.type = DEREF; + rhs.var = vi->id; + rhs.offset = UNKNOWN_OFFSET; + process_constraint (new_constraint (lhs, rhs)); +} + +/* Add constraints to that the solution of VI is transitively closed. */ + +static void +make_transitive_closure_constraints (varinfo_t vi) +{ + struct constraint_expr lhs, rhs; + + /* VAR = *(VAR + UNKNOWN); */ + lhs.type = SCALAR; + lhs.var = vi->id; + lhs.offset = 0; + rhs.type = DEREF; + rhs.var = vi->id; + rhs.offset = UNKNOWN_OFFSET; + process_constraint (new_constraint (lhs, rhs)); +} + +/* Add constraints to that the solution of VI has all subvariables added. */ + +static void +make_any_offset_constraints (varinfo_t vi) +{ + struct constraint_expr lhs, rhs; + + /* VAR = VAR + UNKNOWN; */ + lhs.type = SCALAR; + lhs.var = vi->id; + lhs.offset = 0; + rhs.type = SCALAR; + rhs.var = vi->id; + rhs.offset = UNKNOWN_OFFSET; + process_constraint (new_constraint (lhs, rhs)); +} + +/* Temporary storage for fake var decls. */ +struct obstack fake_var_decl_obstack; + +/* Build a fake VAR_DECL acting as referrer to a DECL_UID. */ + +static tree +build_fake_var_decl (tree type) +{ + tree decl = (tree) XOBNEW (&fake_var_decl_obstack, struct tree_var_decl); + memset (decl, 0, sizeof (struct tree_var_decl)); + TREE_SET_CODE (decl, VAR_DECL); + TREE_TYPE (decl) = type; + DECL_UID (decl) = allocate_decl_uid (); + SET_DECL_PT_UID (decl, -1); + layout_decl (decl, 0); + return decl; +} + +/* Create a new artificial heap variable with NAME. + Return the created variable. */ + +static varinfo_t +make_heapvar (const char *name, bool add_id) +{ + varinfo_t vi; + tree heapvar; + + heapvar = build_fake_var_decl (ptr_type_node); + DECL_EXTERNAL (heapvar) = 1; + + vi = new_var_info (heapvar, name, add_id); + vi->is_heap_var = true; + vi->is_unknown_size_var = true; + vi->offset = 0; + vi->fullsize = ~0; + vi->size = ~0; + vi->is_full_var = true; + insert_vi_for_tree (heapvar, vi); + + return vi; +} + +/* Create a new artificial heap variable with NAME and make a + constraint from it to LHS. Set flags according to a tag used + for tracking restrict pointers. */ + +static varinfo_t +make_constraint_from_restrict (varinfo_t lhs, const char *name, bool add_id) +{ + varinfo_t vi = make_heapvar (name, add_id); + vi->is_restrict_var = 1; + vi->is_global_var = 1; + vi->may_have_pointers = 1; + make_constraint_from (lhs, vi->id); + return vi; +} + +/* Create a new artificial heap variable with NAME and make a + constraint from it to LHS. Set flags according to a tag used + for tracking restrict pointers and make the artificial heap + point to global memory. */ + +static varinfo_t +make_constraint_from_global_restrict (varinfo_t lhs, const char *name, + bool add_id) +{ + varinfo_t vi = make_constraint_from_restrict (lhs, name, add_id); + make_copy_constraint (vi, nonlocal_id); + return vi; +} + +/* Get a constraint for the requested part of a function designator FI + when operating in IPA mode. */ + +static struct constraint_expr +get_function_part_constraint (varinfo_t fi, unsigned part) +{ + struct constraint_expr c; + + gcc_assert (in_ipa_mode); + + if (fi->id == anything_id) + { + /* ??? We probably should have a ANYFN special variable. */ + c.var = anything_id; + c.offset = 0; + c.type = SCALAR; + } + else if (fi->decl && TREE_CODE (fi->decl) == FUNCTION_DECL) + { + varinfo_t ai = first_vi_for_offset (fi, part); + if (ai) + c.var = ai->id; + else + c.var = anything_id; + c.offset = 0; + c.type = SCALAR; + } + else + { + c.var = fi->id; + c.offset = part; + c.type = DEREF; + } + + return c; +} + +/* Produce constraints for argument ARG of call STMT with eaf flags + FLAGS. RESULTS is array holding constraints for return value. + CALLESCAPE_ID is variable where call loocal escapes are added. + WRITES_GLOVEL_MEMORY is true if callee may write global memory. */ + +static void +handle_call_arg (gcall *stmt, tree arg, vec *results, int flags, + int callescape_id, bool writes_global_memory) +{ + int relevant_indirect_flags = EAF_NO_INDIRECT_CLOBBER | EAF_NO_INDIRECT_READ + | EAF_NO_INDIRECT_ESCAPE; + int relevant_flags = relevant_indirect_flags + | EAF_NO_DIRECT_CLOBBER + | EAF_NO_DIRECT_READ + | EAF_NO_DIRECT_ESCAPE; + if (gimple_call_lhs (stmt)) + { + relevant_flags |= EAF_NOT_RETURNED_DIRECTLY | EAF_NOT_RETURNED_INDIRECTLY; + relevant_indirect_flags |= EAF_NOT_RETURNED_INDIRECTLY; + + /* If value is never read from it can not be returned indirectly + (except through the escape solution). + For all flags we get these implications right except for + not_returned because we miss return functions in ipa-prop. */ + + if (flags & EAF_NO_DIRECT_READ) + flags |= EAF_NOT_RETURNED_INDIRECTLY; + } + + /* If the argument is not used we can ignore it. + Similarly argument is invisile for us if it not clobbered, does not + escape, is not read and can not be returned. */ + if ((flags & EAF_UNUSED) || ((flags & relevant_flags) == relevant_flags)) + return; + + /* Produce varinfo for direct accesses to ARG. */ + varinfo_t tem = new_var_info (NULL_TREE, "callarg", true); + tem->is_reg_var = true; + make_constraint_to (tem->id, arg); + make_any_offset_constraints (tem); + + bool callarg_transitive = false; + + /* As an compile time optimization if we make no difference between + direct and indirect accesses make arg transitively closed. + This avoids the need to build indir arg and do everything twice. */ + if (((flags & EAF_NO_INDIRECT_CLOBBER) != 0) + == ((flags & EAF_NO_DIRECT_CLOBBER) != 0) + && (((flags & EAF_NO_INDIRECT_READ) != 0) + == ((flags & EAF_NO_DIRECT_READ) != 0)) + && (((flags & EAF_NO_INDIRECT_ESCAPE) != 0) + == ((flags & EAF_NO_DIRECT_ESCAPE) != 0)) + && (((flags & EAF_NOT_RETURNED_INDIRECTLY) != 0) + == ((flags & EAF_NOT_RETURNED_DIRECTLY) != 0))) + { + make_transitive_closure_constraints (tem); + callarg_transitive = true; + } + + /* If necessary, produce varinfo for indirect accesses to ARG. */ + varinfo_t indir_tem = NULL; + if (!callarg_transitive + && (flags & relevant_indirect_flags) != relevant_indirect_flags) + { + struct constraint_expr lhs, rhs; + indir_tem = new_var_info (NULL_TREE, "indircallarg", true); + indir_tem->is_reg_var = true; + + /* indir_term = *tem. */ + lhs.type = SCALAR; + lhs.var = indir_tem->id; + lhs.offset = 0; + + rhs.type = DEREF; + rhs.var = tem->id; + rhs.offset = UNKNOWN_OFFSET; + process_constraint (new_constraint (lhs, rhs)); + + make_any_offset_constraints (indir_tem); + + /* If we do not read indirectly there is no need for transitive closure. + We know there is only one level of indirection. */ + if (!(flags & EAF_NO_INDIRECT_READ)) + make_transitive_closure_constraints (indir_tem); + gcc_checking_assert (!(flags & EAF_NO_DIRECT_READ)); + } + + if (gimple_call_lhs (stmt)) + { + if (!(flags & EAF_NOT_RETURNED_DIRECTLY)) + { + struct constraint_expr cexpr; + cexpr.var = tem->id; + cexpr.type = SCALAR; + cexpr.offset = 0; + results->safe_push (cexpr); + } + if (!callarg_transitive & !(flags & EAF_NOT_RETURNED_INDIRECTLY)) + { + struct constraint_expr cexpr; + cexpr.var = indir_tem->id; + cexpr.type = SCALAR; + cexpr.offset = 0; + results->safe_push (cexpr); + } + } + + if (!(flags & EAF_NO_DIRECT_READ)) + { + varinfo_t uses = get_call_use_vi (stmt); + make_copy_constraint (uses, tem->id); + if (!callarg_transitive & !(flags & EAF_NO_INDIRECT_READ)) + make_copy_constraint (uses, indir_tem->id); + } + else + /* To read indirectly we need to read directly. */ + gcc_checking_assert (flags & EAF_NO_INDIRECT_READ); + + if (!(flags & EAF_NO_DIRECT_CLOBBER)) + { + struct constraint_expr lhs, rhs; + + /* *arg = callescape. */ + lhs.type = DEREF; + lhs.var = tem->id; + lhs.offset = 0; + + rhs.type = SCALAR; + rhs.var = callescape_id; + rhs.offset = 0; + process_constraint (new_constraint (lhs, rhs)); + + /* callclobbered = arg. */ + make_copy_constraint (get_call_clobber_vi (stmt), tem->id); + } + if (!callarg_transitive & !(flags & EAF_NO_INDIRECT_CLOBBER)) + { + struct constraint_expr lhs, rhs; + + /* *indir_arg = callescape. */ + lhs.type = DEREF; + lhs.var = indir_tem->id; + lhs.offset = 0; + + rhs.type = SCALAR; + rhs.var = callescape_id; + rhs.offset = 0; + process_constraint (new_constraint (lhs, rhs)); + + /* callclobbered = indir_arg. */ + make_copy_constraint (get_call_clobber_vi (stmt), indir_tem->id); + } + + if (!(flags & (EAF_NO_DIRECT_ESCAPE | EAF_NO_INDIRECT_ESCAPE))) + { + struct constraint_expr lhs, rhs; + + /* callescape = arg; */ + lhs.var = callescape_id; + lhs.offset = 0; + lhs.type = SCALAR; + + rhs.var = tem->id; + rhs.offset = 0; + rhs.type = SCALAR; + process_constraint (new_constraint (lhs, rhs)); + + if (writes_global_memory) + make_escape_constraint (arg); + } + else if (!callarg_transitive & !(flags & EAF_NO_INDIRECT_ESCAPE)) + { + struct constraint_expr lhs, rhs; + + /* callescape = *(indir_arg + UNKNOWN); */ + lhs.var = callescape_id; + lhs.offset = 0; + lhs.type = SCALAR; + + rhs.var = indir_tem->id; + rhs.offset = 0; + rhs.type = SCALAR; + process_constraint (new_constraint (lhs, rhs)); + + if (writes_global_memory) + make_indirect_escape_constraint (tem); + } +} + +/* For non-IPA mode, generate constraints necessary for a call on the + RHS and collect return value constraint to RESULTS to be used later in + handle_lhs_call. + + IMPLICIT_EAF_FLAGS are added to each function argument. If + WRITES_GLOBAL_MEMORY is true function is assumed to possibly write to global + memory. Similar for READS_GLOBAL_MEMORY. */ + +static void +handle_rhs_call (gcall *stmt, vec *results, + int implicit_eaf_flags, + bool writes_global_memory, + bool reads_global_memory) +{ + determine_global_memory_access (stmt, &writes_global_memory, + &reads_global_memory, + NULL); + + varinfo_t callescape = new_var_info (NULL_TREE, "callescape", true); + + /* If function can use global memory, add it to callescape + and to possible return values. If not we can still use/return addresses + of global symbols. */ + struct constraint_expr lhs, rhs; + + lhs.type = SCALAR; + lhs.var = callescape->id; + lhs.offset = 0; + + rhs.type = reads_global_memory ? SCALAR : ADDRESSOF; + rhs.var = nonlocal_id; + rhs.offset = 0; + + process_constraint (new_constraint (lhs, rhs)); + results->safe_push (rhs); + + varinfo_t uses = get_call_use_vi (stmt); + make_copy_constraint (uses, callescape->id); + + for (unsigned i = 0; i < gimple_call_num_args (stmt); ++i) + { + tree arg = gimple_call_arg (stmt, i); + int flags = gimple_call_arg_flags (stmt, i); + handle_call_arg (stmt, arg, results, + flags | implicit_eaf_flags, + callescape->id, writes_global_memory); + } + + /* The static chain escapes as well. */ + if (gimple_call_chain (stmt)) + handle_call_arg (stmt, gimple_call_chain (stmt), results, + implicit_eaf_flags + | gimple_call_static_chain_flags (stmt), + callescape->id, writes_global_memory); + + /* And if we applied NRV the address of the return slot escapes as well. */ + if (gimple_call_return_slot_opt_p (stmt) + && gimple_call_lhs (stmt) != NULL_TREE + && TREE_ADDRESSABLE (TREE_TYPE (gimple_call_lhs (stmt)))) + { + int flags = gimple_call_retslot_flags (stmt); + const int relevant_flags = EAF_NO_DIRECT_ESCAPE + | EAF_NOT_RETURNED_DIRECTLY; + + if (!(flags & EAF_UNUSED) && (flags & relevant_flags) != relevant_flags) + { + auto_vec tmpc; + + get_constraint_for_address_of (gimple_call_lhs (stmt), &tmpc); + + if (!(flags & EAF_NO_DIRECT_ESCAPE)) + { + make_constraints_to (callescape->id, tmpc); + if (writes_global_memory) + make_constraints_to (escaped_id, tmpc); + } + if (!(flags & EAF_NOT_RETURNED_DIRECTLY)) + { + struct constraint_expr *c; + unsigned i; + FOR_EACH_VEC_ELT (tmpc, i, c) + results->safe_push (*c); + } + } + } +} + +/* For non-IPA mode, generate constraints necessary for a call + that returns a pointer and assigns it to LHS. This simply makes + the LHS point to global and escaped variables. */ + +static void +handle_lhs_call (gcall *stmt, tree lhs, int flags, vec &rhsc, + tree fndecl) +{ + auto_vec lhsc; + + get_constraint_for (lhs, &lhsc); + /* If the store is to a global decl make sure to + add proper escape constraints. */ + lhs = get_base_address (lhs); + if (lhs + && DECL_P (lhs) + && is_global_var (lhs)) + { + struct constraint_expr tmpc; + tmpc.var = escaped_id; + tmpc.offset = 0; + tmpc.type = SCALAR; + lhsc.safe_push (tmpc); + } + + /* If the call returns an argument unmodified override the rhs + constraints. */ + if (flags & ERF_RETURNS_ARG + && (flags & ERF_RETURN_ARG_MASK) < gimple_call_num_args (stmt)) + { + tree arg; + rhsc.truncate (0); + arg = gimple_call_arg (stmt, flags & ERF_RETURN_ARG_MASK); + get_constraint_for (arg, &rhsc); + process_all_all_constraints (lhsc, rhsc); + rhsc.truncate (0); + } + else if (flags & ERF_NOALIAS) + { + varinfo_t vi; + struct constraint_expr tmpc; + rhsc.truncate (0); + vi = make_heapvar ("HEAP", true); + /* We are marking allocated storage local, we deal with it becoming + global by escaping and setting of vars_contains_escaped_heap. */ + DECL_EXTERNAL (vi->decl) = 0; + vi->is_global_var = 0; + /* If this is not a real malloc call assume the memory was + initialized and thus may point to global memory. All + builtin functions with the malloc attribute behave in a sane way. */ + if (!fndecl + || !fndecl_built_in_p (fndecl, BUILT_IN_NORMAL)) + make_constraint_from (vi, nonlocal_id); + tmpc.var = vi->id; + tmpc.offset = 0; + tmpc.type = ADDRESSOF; + rhsc.safe_push (tmpc); + process_all_all_constraints (lhsc, rhsc); + rhsc.truncate (0); + } + else + process_all_all_constraints (lhsc, rhsc); +} + + +/* Create constraints for assigning call argument ARG to the incoming parameter + INDEX of function FI. */ + +static void +find_func_aliases_for_call_arg (varinfo_t fi, unsigned index, tree arg) +{ + struct constraint_expr lhs; + lhs = get_function_part_constraint (fi, fi_parm_base + index); + + auto_vec rhsc; + get_constraint_for_rhs (arg, &rhsc); + + unsigned j; + struct constraint_expr *rhsp; + FOR_EACH_VEC_ELT (rhsc, j, rhsp) + process_constraint (new_constraint (lhs, *rhsp)); +} + +/* Create constraints for the builtin call T. Return true if the call + was handled, otherwise false. */ + +static bool +find_func_aliases_for_builtin_call (struct function *fn, gcall *t) +{ + tree fndecl = gimple_call_fndecl (t); + auto_vec lhsc; + auto_vec rhsc; + varinfo_t fi; + + if (gimple_call_builtin_p (t, BUILT_IN_NORMAL)) + /* ??? All builtins that are handled here need to be handled + in the alias-oracle query functions explicitly! */ + switch (DECL_FUNCTION_CODE (fndecl)) + { + /* All the following functions return a pointer to the same object + as their first argument points to. The functions do not add + to the ESCAPED solution. The functions make the first argument + pointed to memory point to what the second argument pointed to + memory points to. */ + case BUILT_IN_STRCPY: + case BUILT_IN_STRNCPY: + case BUILT_IN_BCOPY: + case BUILT_IN_MEMCPY: + case BUILT_IN_MEMMOVE: + case BUILT_IN_MEMPCPY: + case BUILT_IN_STPCPY: + case BUILT_IN_STPNCPY: + case BUILT_IN_STRCAT: + case BUILT_IN_STRNCAT: + case BUILT_IN_STRCPY_CHK: + case BUILT_IN_STRNCPY_CHK: + case BUILT_IN_MEMCPY_CHK: + case BUILT_IN_MEMMOVE_CHK: + case BUILT_IN_MEMPCPY_CHK: + case BUILT_IN_STPCPY_CHK: + case BUILT_IN_STPNCPY_CHK: + case BUILT_IN_STRCAT_CHK: + case BUILT_IN_STRNCAT_CHK: + case BUILT_IN_TM_MEMCPY: + case BUILT_IN_TM_MEMMOVE: + { + tree res = gimple_call_lhs (t); + tree dest = gimple_call_arg (t, (DECL_FUNCTION_CODE (fndecl) + == BUILT_IN_BCOPY ? 1 : 0)); + tree src = gimple_call_arg (t, (DECL_FUNCTION_CODE (fndecl) + == BUILT_IN_BCOPY ? 0 : 1)); + if (res != NULL_TREE) + { + get_constraint_for (res, &lhsc); + if (DECL_FUNCTION_CODE (fndecl) == BUILT_IN_MEMPCPY + || DECL_FUNCTION_CODE (fndecl) == BUILT_IN_STPCPY + || DECL_FUNCTION_CODE (fndecl) == BUILT_IN_STPNCPY + || DECL_FUNCTION_CODE (fndecl) == BUILT_IN_MEMPCPY_CHK + || DECL_FUNCTION_CODE (fndecl) == BUILT_IN_STPCPY_CHK + || DECL_FUNCTION_CODE (fndecl) == BUILT_IN_STPNCPY_CHK) + get_constraint_for_ptr_offset (dest, NULL_TREE, &rhsc); + else + get_constraint_for (dest, &rhsc); + process_all_all_constraints (lhsc, rhsc); + lhsc.truncate (0); + rhsc.truncate (0); + } + get_constraint_for_ptr_offset (dest, NULL_TREE, &lhsc); + get_constraint_for_ptr_offset (src, NULL_TREE, &rhsc); + do_deref (&lhsc); + do_deref (&rhsc); + process_all_all_constraints (lhsc, rhsc); + return true; + } + case BUILT_IN_MEMSET: + case BUILT_IN_MEMSET_CHK: + case BUILT_IN_TM_MEMSET: + { + tree res = gimple_call_lhs (t); + tree dest = gimple_call_arg (t, 0); + unsigned i; + ce_s *lhsp; + struct constraint_expr ac; + if (res != NULL_TREE) + { + get_constraint_for (res, &lhsc); + get_constraint_for (dest, &rhsc); + process_all_all_constraints (lhsc, rhsc); + lhsc.truncate (0); + } + get_constraint_for_ptr_offset (dest, NULL_TREE, &lhsc); + do_deref (&lhsc); + if (flag_delete_null_pointer_checks + && integer_zerop (gimple_call_arg (t, 1))) + { + ac.type = ADDRESSOF; + ac.var = nothing_id; + } + else + { + ac.type = SCALAR; + ac.var = integer_id; + } + ac.offset = 0; + FOR_EACH_VEC_ELT (lhsc, i, lhsp) + process_constraint (new_constraint (*lhsp, ac)); + return true; + } + case BUILT_IN_STACK_SAVE: + case BUILT_IN_STACK_RESTORE: + /* Nothing interesting happens. */ + return true; + case BUILT_IN_ALLOCA: + case BUILT_IN_ALLOCA_WITH_ALIGN: + case BUILT_IN_ALLOCA_WITH_ALIGN_AND_MAX: + { + tree ptr = gimple_call_lhs (t); + if (ptr == NULL_TREE) + return true; + get_constraint_for (ptr, &lhsc); + varinfo_t vi = make_heapvar ("HEAP", true); + /* Alloca storage is never global. To exempt it from escaped + handling make it a non-heap var. */ + DECL_EXTERNAL (vi->decl) = 0; + vi->is_global_var = 0; + vi->is_heap_var = 0; + struct constraint_expr tmpc; + tmpc.var = vi->id; + tmpc.offset = 0; + tmpc.type = ADDRESSOF; + rhsc.safe_push (tmpc); + process_all_all_constraints (lhsc, rhsc); + return true; + } + case BUILT_IN_POSIX_MEMALIGN: + { + tree ptrptr = gimple_call_arg (t, 0); + get_constraint_for (ptrptr, &lhsc); + do_deref (&lhsc); + varinfo_t vi = make_heapvar ("HEAP", true); + /* We are marking allocated storage local, we deal with it becoming + global by escaping and setting of vars_contains_escaped_heap. */ + DECL_EXTERNAL (vi->decl) = 0; + vi->is_global_var = 0; + struct constraint_expr tmpc; + tmpc.var = vi->id; + tmpc.offset = 0; + tmpc.type = ADDRESSOF; + rhsc.safe_push (tmpc); + process_all_all_constraints (lhsc, rhsc); + return true; + } + case BUILT_IN_ASSUME_ALIGNED: + { + tree res = gimple_call_lhs (t); + tree dest = gimple_call_arg (t, 0); + if (res != NULL_TREE) + { + get_constraint_for (res, &lhsc); + get_constraint_for (dest, &rhsc); + process_all_all_constraints (lhsc, rhsc); + } + return true; + } + /* All the following functions do not return pointers, do not + modify the points-to sets of memory reachable from their + arguments and do not add to the ESCAPED solution. */ + case BUILT_IN_SINCOS: + case BUILT_IN_SINCOSF: + case BUILT_IN_SINCOSL: + case BUILT_IN_FREXP: + case BUILT_IN_FREXPF: + case BUILT_IN_FREXPL: + case BUILT_IN_GAMMA_R: + case BUILT_IN_GAMMAF_R: + case BUILT_IN_GAMMAL_R: + case BUILT_IN_LGAMMA_R: + case BUILT_IN_LGAMMAF_R: + case BUILT_IN_LGAMMAL_R: + case BUILT_IN_MODF: + case BUILT_IN_MODFF: + case BUILT_IN_MODFL: + case BUILT_IN_REMQUO: + case BUILT_IN_REMQUOF: + case BUILT_IN_REMQUOL: + case BUILT_IN_FREE: + return true; + case BUILT_IN_STRDUP: + case BUILT_IN_STRNDUP: + case BUILT_IN_REALLOC: + if (gimple_call_lhs (t)) + { + auto_vec rhsc; + handle_lhs_call (t, gimple_call_lhs (t), + gimple_call_return_flags (t) | ERF_NOALIAS, + rhsc, fndecl); + get_constraint_for_ptr_offset (gimple_call_lhs (t), + NULL_TREE, &lhsc); + get_constraint_for_ptr_offset (gimple_call_arg (t, 0), + NULL_TREE, &rhsc); + do_deref (&lhsc); + do_deref (&rhsc); + process_all_all_constraints (lhsc, rhsc); + lhsc.truncate (0); + rhsc.truncate (0); + /* For realloc the resulting pointer can be equal to the + argument as well. But only doing this wouldn't be + correct because with ptr == 0 realloc behaves like malloc. */ + if (DECL_FUNCTION_CODE (fndecl) == BUILT_IN_REALLOC) + { + get_constraint_for (gimple_call_lhs (t), &lhsc); + get_constraint_for (gimple_call_arg (t, 0), &rhsc); + process_all_all_constraints (lhsc, rhsc); + } + return true; + } + break; + /* String / character search functions return a pointer into the + source string or NULL. */ + case BUILT_IN_INDEX: + case BUILT_IN_STRCHR: + case BUILT_IN_STRRCHR: + case BUILT_IN_MEMCHR: + case BUILT_IN_STRSTR: + case BUILT_IN_STRPBRK: + if (gimple_call_lhs (t)) + { + tree src = gimple_call_arg (t, 0); + get_constraint_for_ptr_offset (src, NULL_TREE, &rhsc); + constraint_expr nul; + nul.var = nothing_id; + nul.offset = 0; + nul.type = ADDRESSOF; + rhsc.safe_push (nul); + get_constraint_for (gimple_call_lhs (t), &lhsc); + process_all_all_constraints (lhsc, rhsc); + } + return true; + /* Pure functions that return something not based on any object and + that use the memory pointed to by their arguments (but not + transitively). */ + case BUILT_IN_STRCMP: + case BUILT_IN_STRCMP_EQ: + case BUILT_IN_STRNCMP: + case BUILT_IN_STRNCMP_EQ: + case BUILT_IN_STRCASECMP: + case BUILT_IN_STRNCASECMP: + case BUILT_IN_MEMCMP: + case BUILT_IN_BCMP: + case BUILT_IN_STRSPN: + case BUILT_IN_STRCSPN: + { + varinfo_t uses = get_call_use_vi (t); + make_any_offset_constraints (uses); + make_constraint_to (uses->id, gimple_call_arg (t, 0)); + make_constraint_to (uses->id, gimple_call_arg (t, 1)); + /* No constraints are necessary for the return value. */ + return true; + } + case BUILT_IN_STRLEN: + { + varinfo_t uses = get_call_use_vi (t); + make_any_offset_constraints (uses); + make_constraint_to (uses->id, gimple_call_arg (t, 0)); + /* No constraints are necessary for the return value. */ + return true; + } + case BUILT_IN_OBJECT_SIZE: + case BUILT_IN_CONSTANT_P: + { + /* No constraints are necessary for the return value or the + arguments. */ + return true; + } + /* Trampolines are special - they set up passing the static + frame. */ + case BUILT_IN_INIT_TRAMPOLINE: + { + tree tramp = gimple_call_arg (t, 0); + tree nfunc = gimple_call_arg (t, 1); + tree frame = gimple_call_arg (t, 2); + unsigned i; + struct constraint_expr lhs, *rhsp; + if (in_ipa_mode) + { + varinfo_t nfi = NULL; + gcc_assert (TREE_CODE (nfunc) == ADDR_EXPR); + nfi = lookup_vi_for_tree (TREE_OPERAND (nfunc, 0)); + if (nfi) + { + lhs = get_function_part_constraint (nfi, fi_static_chain); + get_constraint_for (frame, &rhsc); + FOR_EACH_VEC_ELT (rhsc, i, rhsp) + process_constraint (new_constraint (lhs, *rhsp)); + rhsc.truncate (0); + + /* Make the frame point to the function for + the trampoline adjustment call. */ + get_constraint_for (tramp, &lhsc); + do_deref (&lhsc); + get_constraint_for (nfunc, &rhsc); + process_all_all_constraints (lhsc, rhsc); + + return true; + } + } + /* Else fallthru to generic handling which will let + the frame escape. */ + break; + } + case BUILT_IN_ADJUST_TRAMPOLINE: + { + tree tramp = gimple_call_arg (t, 0); + tree res = gimple_call_lhs (t); + if (in_ipa_mode && res) + { + get_constraint_for (res, &lhsc); + get_constraint_for (tramp, &rhsc); + do_deref (&rhsc); + process_all_all_constraints (lhsc, rhsc); + } + return true; + } + CASE_BUILT_IN_TM_STORE (1): + CASE_BUILT_IN_TM_STORE (2): + CASE_BUILT_IN_TM_STORE (4): + CASE_BUILT_IN_TM_STORE (8): + CASE_BUILT_IN_TM_STORE (FLOAT): + CASE_BUILT_IN_TM_STORE (DOUBLE): + CASE_BUILT_IN_TM_STORE (LDOUBLE): + CASE_BUILT_IN_TM_STORE (M64): + CASE_BUILT_IN_TM_STORE (M128): + CASE_BUILT_IN_TM_STORE (M256): + { + tree addr = gimple_call_arg (t, 0); + tree src = gimple_call_arg (t, 1); + + get_constraint_for (addr, &lhsc); + do_deref (&lhsc); + get_constraint_for (src, &rhsc); + process_all_all_constraints (lhsc, rhsc); + return true; + } + CASE_BUILT_IN_TM_LOAD (1): + CASE_BUILT_IN_TM_LOAD (2): + CASE_BUILT_IN_TM_LOAD (4): + CASE_BUILT_IN_TM_LOAD (8): + CASE_BUILT_IN_TM_LOAD (FLOAT): + CASE_BUILT_IN_TM_LOAD (DOUBLE): + CASE_BUILT_IN_TM_LOAD (LDOUBLE): + CASE_BUILT_IN_TM_LOAD (M64): + CASE_BUILT_IN_TM_LOAD (M128): + CASE_BUILT_IN_TM_LOAD (M256): + { + tree dest = gimple_call_lhs (t); + tree addr = gimple_call_arg (t, 0); + + get_constraint_for (dest, &lhsc); + get_constraint_for (addr, &rhsc); + do_deref (&rhsc); + process_all_all_constraints (lhsc, rhsc); + return true; + } + /* Variadic argument handling needs to be handled in IPA + mode as well. */ + case BUILT_IN_VA_START: + { + tree valist = gimple_call_arg (t, 0); + struct constraint_expr rhs, *lhsp; + unsigned i; + get_constraint_for_ptr_offset (valist, NULL_TREE, &lhsc); + do_deref (&lhsc); + /* The va_list gets access to pointers in variadic + arguments. Which we know in the case of IPA analysis + and otherwise are just all nonlocal variables. */ + if (in_ipa_mode) + { + fi = lookup_vi_for_tree (fn->decl); + rhs = get_function_part_constraint (fi, ~0); + rhs.type = ADDRESSOF; + } + else + { + rhs.var = nonlocal_id; + rhs.type = ADDRESSOF; + rhs.offset = 0; + } + FOR_EACH_VEC_ELT (lhsc, i, lhsp) + process_constraint (new_constraint (*lhsp, rhs)); + /* va_list is clobbered. */ + make_constraint_to (get_call_clobber_vi (t)->id, valist); + return true; + } + /* va_end doesn't have any effect that matters. */ + case BUILT_IN_VA_END: + return true; + /* Alternate return. Simply give up for now. */ + case BUILT_IN_RETURN: + { + fi = NULL; + if (!in_ipa_mode + || !(fi = get_vi_for_tree (fn->decl))) + make_constraint_from (get_varinfo (escaped_id), anything_id); + else if (in_ipa_mode + && fi != NULL) + { + struct constraint_expr lhs, rhs; + lhs = get_function_part_constraint (fi, fi_result); + rhs.var = anything_id; + rhs.offset = 0; + rhs.type = SCALAR; + process_constraint (new_constraint (lhs, rhs)); + } + return true; + } + case BUILT_IN_GOMP_PARALLEL: + case BUILT_IN_GOACC_PARALLEL: + { + if (in_ipa_mode) + { + unsigned int fnpos, argpos; + switch (DECL_FUNCTION_CODE (fndecl)) + { + case BUILT_IN_GOMP_PARALLEL: + /* __builtin_GOMP_parallel (fn, data, num_threads, flags). */ + fnpos = 0; + argpos = 1; + break; + case BUILT_IN_GOACC_PARALLEL: + /* __builtin_GOACC_parallel (flags_m, fn, mapnum, hostaddrs, + sizes, kinds, ...). */ + fnpos = 1; + argpos = 3; + break; + default: + gcc_unreachable (); + } + + tree fnarg = gimple_call_arg (t, fnpos); + gcc_assert (TREE_CODE (fnarg) == ADDR_EXPR); + tree fndecl = TREE_OPERAND (fnarg, 0); + if (fndecl_maybe_in_other_partition (fndecl)) + /* Fallthru to general call handling. */ + break; + + tree arg = gimple_call_arg (t, argpos); + + varinfo_t fi = get_vi_for_tree (fndecl); + find_func_aliases_for_call_arg (fi, 0, arg); + return true; + } + /* Else fallthru to generic call handling. */ + break; + } + /* printf-style functions may have hooks to set pointers to + point to somewhere into the generated string. Leave them + for a later exercise... */ + default: + /* Fallthru to general call handling. */; + } + + return false; +} + +/* Create constraints for the call T. */ + +static void +find_func_aliases_for_call (struct function *fn, gcall *t) +{ + tree fndecl = gimple_call_fndecl (t); + varinfo_t fi; + + if (fndecl != NULL_TREE + && fndecl_built_in_p (fndecl) + && find_func_aliases_for_builtin_call (fn, t)) + return; + + if (gimple_call_internal_p (t, IFN_DEFERRED_INIT)) + return; + + fi = get_fi_for_callee (t); + if (!in_ipa_mode + || (fi->decl && fndecl && !fi->is_fn_info)) + { + auto_vec rhsc; + int flags = gimple_call_flags (t); + + /* Const functions can return their arguments and addresses + of global memory but not of escaped memory. */ + if (flags & (ECF_CONST|ECF_NOVOPS)) + { + if (gimple_call_lhs (t)) + handle_rhs_call (t, &rhsc, implicit_const_eaf_flags, false, false); + } + /* Pure functions can return addresses in and of memory + reachable from their arguments, but they are not an escape + point for reachable memory of their arguments. */ + else if (flags & (ECF_PURE|ECF_LOOPING_CONST_OR_PURE)) + handle_rhs_call (t, &rhsc, implicit_pure_eaf_flags, false, true); + /* If the call is to a replaceable operator delete and results + from a delete expression as opposed to a direct call to + such operator, then the effects for PTA (in particular + the escaping of the pointer) can be ignored. */ + else if (fndecl + && DECL_IS_OPERATOR_DELETE_P (fndecl) + && gimple_call_from_new_or_delete (t)) + ; + else + handle_rhs_call (t, &rhsc, 0, true, true); + if (gimple_call_lhs (t)) + handle_lhs_call (t, gimple_call_lhs (t), + gimple_call_return_flags (t), rhsc, fndecl); + } + else + { + auto_vec rhsc; + tree lhsop; + unsigned j; + + /* Assign all the passed arguments to the appropriate incoming + parameters of the function. */ + for (j = 0; j < gimple_call_num_args (t); j++) + { + tree arg = gimple_call_arg (t, j); + find_func_aliases_for_call_arg (fi, j, arg); + } + + /* If we are returning a value, assign it to the result. */ + lhsop = gimple_call_lhs (t); + if (lhsop) + { + auto_vec lhsc; + struct constraint_expr rhs; + struct constraint_expr *lhsp; + bool aggr_p = aggregate_value_p (lhsop, gimple_call_fntype (t)); + + get_constraint_for (lhsop, &lhsc); + rhs = get_function_part_constraint (fi, fi_result); + if (aggr_p) + { + auto_vec tem; + tem.quick_push (rhs); + do_deref (&tem); + gcc_checking_assert (tem.length () == 1); + rhs = tem[0]; + } + FOR_EACH_VEC_ELT (lhsc, j, lhsp) + process_constraint (new_constraint (*lhsp, rhs)); + + /* If we pass the result decl by reference, honor that. */ + if (aggr_p) + { + struct constraint_expr lhs; + struct constraint_expr *rhsp; + + get_constraint_for_address_of (lhsop, &rhsc); + lhs = get_function_part_constraint (fi, fi_result); + FOR_EACH_VEC_ELT (rhsc, j, rhsp) + process_constraint (new_constraint (lhs, *rhsp)); + rhsc.truncate (0); + } + } + + /* If we use a static chain, pass it along. */ + if (gimple_call_chain (t)) + { + struct constraint_expr lhs; + struct constraint_expr *rhsp; + + get_constraint_for (gimple_call_chain (t), &rhsc); + lhs = get_function_part_constraint (fi, fi_static_chain); + FOR_EACH_VEC_ELT (rhsc, j, rhsp) + process_constraint (new_constraint (lhs, *rhsp)); + } + } +} + +/* Walk statement T setting up aliasing constraints according to the + references found in T. This function is the main part of the + constraint builder. AI points to auxiliary alias information used + when building alias sets and computing alias grouping heuristics. */ + +static void +find_func_aliases (struct function *fn, gimple *origt) +{ + gimple *t = origt; + auto_vec lhsc; + auto_vec rhsc; + varinfo_t fi; + + /* Now build constraints expressions. */ + if (gimple_code (t) == GIMPLE_PHI) + { + /* For a phi node, assign all the arguments to + the result. */ + get_constraint_for (gimple_phi_result (t), &lhsc); + for (unsigned i = 0; i < gimple_phi_num_args (t); i++) + { + get_constraint_for_rhs (gimple_phi_arg_def (t, i), &rhsc); + process_all_all_constraints (lhsc, rhsc); + rhsc.truncate (0); + } + } + /* In IPA mode, we need to generate constraints to pass call + arguments through their calls. There are two cases, + either a GIMPLE_CALL returning a value, or just a plain + GIMPLE_CALL when we are not. + + In non-ipa mode, we need to generate constraints for each + pointer passed by address. */ + else if (is_gimple_call (t)) + find_func_aliases_for_call (fn, as_a (t)); + + /* Otherwise, just a regular assignment statement. Only care about + operations with pointer result, others are dealt with as escape + points if they have pointer operands. */ + else if (is_gimple_assign (t)) + { + /* Otherwise, just a regular assignment statement. */ + tree lhsop = gimple_assign_lhs (t); + tree rhsop = (gimple_num_ops (t) == 2) ? gimple_assign_rhs1 (t) : NULL; + + if (rhsop && TREE_CLOBBER_P (rhsop)) + /* Ignore clobbers, they don't actually store anything into + the LHS. */ + ; + else if (rhsop && AGGREGATE_TYPE_P (TREE_TYPE (lhsop))) + do_structure_copy (lhsop, rhsop); + else + { + enum tree_code code = gimple_assign_rhs_code (t); + + get_constraint_for (lhsop, &lhsc); + + if (code == POINTER_PLUS_EXPR) + get_constraint_for_ptr_offset (gimple_assign_rhs1 (t), + gimple_assign_rhs2 (t), &rhsc); + else if (code == POINTER_DIFF_EXPR) + /* The result is not a pointer (part). */ + ; + else if (code == BIT_AND_EXPR + && TREE_CODE (gimple_assign_rhs2 (t)) == INTEGER_CST) + { + /* Aligning a pointer via a BIT_AND_EXPR is offsetting + the pointer. Handle it by offsetting it by UNKNOWN. */ + get_constraint_for_ptr_offset (gimple_assign_rhs1 (t), + NULL_TREE, &rhsc); + } + else if (code == TRUNC_DIV_EXPR + || code == CEIL_DIV_EXPR + || code == FLOOR_DIV_EXPR + || code == ROUND_DIV_EXPR + || code == EXACT_DIV_EXPR + || code == TRUNC_MOD_EXPR + || code == CEIL_MOD_EXPR + || code == FLOOR_MOD_EXPR + || code == ROUND_MOD_EXPR) + /* Division and modulo transfer the pointer from the LHS. */ + get_constraint_for_ptr_offset (gimple_assign_rhs1 (t), + NULL_TREE, &rhsc); + else if (CONVERT_EXPR_CODE_P (code) + || gimple_assign_single_p (t)) + /* See through conversions, single RHS are handled by + get_constraint_for_rhs. */ + get_constraint_for_rhs (rhsop, &rhsc); + else if (code == COND_EXPR) + { + /* The result is a merge of both COND_EXPR arms. */ + auto_vec tmp; + struct constraint_expr *rhsp; + unsigned i; + get_constraint_for_rhs (gimple_assign_rhs2 (t), &rhsc); + get_constraint_for_rhs (gimple_assign_rhs3 (t), &tmp); + FOR_EACH_VEC_ELT (tmp, i, rhsp) + rhsc.safe_push (*rhsp); + } + else if (truth_value_p (code)) + /* Truth value results are not pointer (parts). Or at least + very unreasonable obfuscation of a part. */ + ; + else + { + /* All other operations are possibly offsetting merges. */ + auto_vec tmp; + struct constraint_expr *rhsp; + unsigned i, j; + get_constraint_for_ptr_offset (gimple_assign_rhs1 (t), + NULL_TREE, &rhsc); + for (i = 2; i < gimple_num_ops (t); ++i) + { + get_constraint_for_ptr_offset (gimple_op (t, i), + NULL_TREE, &tmp); + FOR_EACH_VEC_ELT (tmp, j, rhsp) + rhsc.safe_push (*rhsp); + tmp.truncate (0); + } + } + process_all_all_constraints (lhsc, rhsc); + } + /* If there is a store to a global variable the rhs escapes. */ + if ((lhsop = get_base_address (lhsop)) != NULL_TREE + && DECL_P (lhsop)) + { + varinfo_t vi = get_vi_for_tree (lhsop); + if ((! in_ipa_mode && vi->is_global_var) + || vi->is_ipa_escape_point) + make_escape_constraint (rhsop); + } + } + /* Handle escapes through return. */ + else if (gimple_code (t) == GIMPLE_RETURN + && gimple_return_retval (as_a (t)) != NULL_TREE) + { + greturn *return_stmt = as_a (t); + tree retval = gimple_return_retval (return_stmt); + if (!in_ipa_mode) + make_constraint_to (escaped_return_id, retval); + else + { + struct constraint_expr lhs ; + struct constraint_expr *rhsp; + unsigned i; + + fi = lookup_vi_for_tree (fn->decl); + lhs = get_function_part_constraint (fi, fi_result); + get_constraint_for_rhs (retval, &rhsc); + FOR_EACH_VEC_ELT (rhsc, i, rhsp) + process_constraint (new_constraint (lhs, *rhsp)); + } + } + /* Handle asms conservatively by adding escape constraints to everything. */ + else if (gasm *asm_stmt = dyn_cast (t)) + { + unsigned i, noutputs; + const char **oconstraints; + const char *constraint; + bool allows_mem, allows_reg, is_inout; + + noutputs = gimple_asm_noutputs (asm_stmt); + oconstraints = XALLOCAVEC (const char *, noutputs); + + for (i = 0; i < noutputs; ++i) + { + tree link = gimple_asm_output_op (asm_stmt, i); + tree op = TREE_VALUE (link); + + constraint = TREE_STRING_POINTER (TREE_VALUE (TREE_PURPOSE (link))); + oconstraints[i] = constraint; + parse_output_constraint (&constraint, i, 0, 0, &allows_mem, + &allows_reg, &is_inout, nullptr); + + /* A memory constraint makes the address of the operand escape. */ + if (!allows_reg && allows_mem) + { + auto_vec tmpc; + get_constraint_for_address_of (op, &tmpc); + make_constraints_to (escaped_id, tmpc); + } + + /* The asm may read global memory, so outputs may point to + any global memory. */ + if (op) + { + auto_vec lhsc; + struct constraint_expr rhsc, *lhsp; + unsigned j; + get_constraint_for (op, &lhsc); + rhsc.var = nonlocal_id; + rhsc.offset = 0; + rhsc.type = SCALAR; + FOR_EACH_VEC_ELT (lhsc, j, lhsp) + process_constraint (new_constraint (*lhsp, rhsc)); + } + } + for (i = 0; i < gimple_asm_ninputs (asm_stmt); ++i) + { + tree link = gimple_asm_input_op (asm_stmt, i); + tree op = TREE_VALUE (link); + + constraint = TREE_STRING_POINTER (TREE_VALUE (TREE_PURPOSE (link))); + + parse_input_constraint (&constraint, 0, 0, noutputs, 0, oconstraints, + &allows_mem, &allows_reg, nullptr); + + /* A memory constraint makes the address of the operand escape. */ + if (!allows_reg && allows_mem) + { + auto_vec tmpc; + get_constraint_for_address_of (op, &tmpc); + make_constraints_to (escaped_id, tmpc); + } + /* Strictly we'd only need the constraint to ESCAPED if + the asm clobbers memory, otherwise using something + along the lines of per-call clobbers/uses would be enough. */ + else if (op) + make_escape_constraint (op); + } + } +} + + +/* Create a constraint adding to the clobber set of FI the memory + pointed to by PTR. */ + +static void +process_ipa_clobber (varinfo_t fi, tree ptr) +{ + vec ptrc = vNULL; + struct constraint_expr *c, lhs; + unsigned i; + get_constraint_for_rhs (ptr, &ptrc); + lhs = get_function_part_constraint (fi, fi_clobbers); + FOR_EACH_VEC_ELT (ptrc, i, c) + process_constraint (new_constraint (lhs, *c)); + ptrc.release (); +} + +/* Walk statement T setting up clobber and use constraints according to the + references found in T. This function is a main part of the + IPA constraint builder. */ + +static void +find_func_clobbers (struct function *fn, gimple *origt) +{ + gimple *t = origt; + auto_vec lhsc; + auto_vec rhsc; + varinfo_t fi; + + /* Add constraints for clobbered/used in IPA mode. + We are not interested in what automatic variables are clobbered + or used as we only use the information in the caller to which + they do not escape. */ + gcc_assert (in_ipa_mode); + + /* If the stmt refers to memory in any way it better had a VUSE. */ + if (gimple_vuse (t) == NULL_TREE) + return; + + /* We'd better have function information for the current function. */ + fi = lookup_vi_for_tree (fn->decl); + gcc_assert (fi != NULL); + + /* Account for stores in assignments and calls. */ + if (gimple_vdef (t) != NULL_TREE + && gimple_has_lhs (t)) + { + tree lhs = gimple_get_lhs (t); + tree tem = lhs; + while (handled_component_p (tem)) + tem = TREE_OPERAND (tem, 0); + if ((DECL_P (tem) + && !auto_var_in_fn_p (tem, fn->decl)) + || INDIRECT_REF_P (tem) + || (TREE_CODE (tem) == MEM_REF + && !(TREE_CODE (TREE_OPERAND (tem, 0)) == ADDR_EXPR + && auto_var_in_fn_p + (TREE_OPERAND (TREE_OPERAND (tem, 0), 0), fn->decl)))) + { + struct constraint_expr lhsc, *rhsp; + unsigned i; + lhsc = get_function_part_constraint (fi, fi_clobbers); + get_constraint_for_address_of (lhs, &rhsc); + FOR_EACH_VEC_ELT (rhsc, i, rhsp) + process_constraint (new_constraint (lhsc, *rhsp)); + rhsc.truncate (0); + } + } + + /* Account for uses in assigments and returns. */ + if (gimple_assign_single_p (t) + || (gimple_code (t) == GIMPLE_RETURN + && gimple_return_retval (as_a (t)) != NULL_TREE)) + { + tree rhs = (gimple_assign_single_p (t) + ? gimple_assign_rhs1 (t) + : gimple_return_retval (as_a (t))); + tree tem = rhs; + while (handled_component_p (tem)) + tem = TREE_OPERAND (tem, 0); + if ((DECL_P (tem) + && !auto_var_in_fn_p (tem, fn->decl)) + || INDIRECT_REF_P (tem) + || (TREE_CODE (tem) == MEM_REF + && !(TREE_CODE (TREE_OPERAND (tem, 0)) == ADDR_EXPR + && auto_var_in_fn_p + (TREE_OPERAND (TREE_OPERAND (tem, 0), 0), fn->decl)))) + { + struct constraint_expr lhs, *rhsp; + unsigned i; + lhs = get_function_part_constraint (fi, fi_uses); + get_constraint_for_address_of (rhs, &rhsc); + FOR_EACH_VEC_ELT (rhsc, i, rhsp) + process_constraint (new_constraint (lhs, *rhsp)); + rhsc.truncate (0); + } + } + + if (gcall *call_stmt = dyn_cast (t)) + { + varinfo_t cfi = NULL; + tree decl = gimple_call_fndecl (t); + struct constraint_expr lhs, rhs; + unsigned i, j; + + /* For builtins we do not have separate function info. For those + we do not generate escapes for we have to generate clobbers/uses. */ + if (gimple_call_builtin_p (t, BUILT_IN_NORMAL)) + switch (DECL_FUNCTION_CODE (decl)) + { + /* The following functions use and clobber memory pointed to + by their arguments. */ + case BUILT_IN_STRCPY: + case BUILT_IN_STRNCPY: + case BUILT_IN_BCOPY: + case BUILT_IN_MEMCPY: + case BUILT_IN_MEMMOVE: + case BUILT_IN_MEMPCPY: + case BUILT_IN_STPCPY: + case BUILT_IN_STPNCPY: + case BUILT_IN_STRCAT: + case BUILT_IN_STRNCAT: + case BUILT_IN_STRCPY_CHK: + case BUILT_IN_STRNCPY_CHK: + case BUILT_IN_MEMCPY_CHK: + case BUILT_IN_MEMMOVE_CHK: + case BUILT_IN_MEMPCPY_CHK: + case BUILT_IN_STPCPY_CHK: + case BUILT_IN_STPNCPY_CHK: + case BUILT_IN_STRCAT_CHK: + case BUILT_IN_STRNCAT_CHK: + { + tree dest = gimple_call_arg (t, (DECL_FUNCTION_CODE (decl) + == BUILT_IN_BCOPY ? 1 : 0)); + tree src = gimple_call_arg (t, (DECL_FUNCTION_CODE (decl) + == BUILT_IN_BCOPY ? 0 : 1)); + unsigned i; + struct constraint_expr *rhsp, *lhsp; + get_constraint_for_ptr_offset (dest, NULL_TREE, &lhsc); + lhs = get_function_part_constraint (fi, fi_clobbers); + FOR_EACH_VEC_ELT (lhsc, i, lhsp) + process_constraint (new_constraint (lhs, *lhsp)); + get_constraint_for_ptr_offset (src, NULL_TREE, &rhsc); + lhs = get_function_part_constraint (fi, fi_uses); + FOR_EACH_VEC_ELT (rhsc, i, rhsp) + process_constraint (new_constraint (lhs, *rhsp)); + return; + } + /* The following function clobbers memory pointed to by + its argument. */ + case BUILT_IN_MEMSET: + case BUILT_IN_MEMSET_CHK: + case BUILT_IN_POSIX_MEMALIGN: + { + tree dest = gimple_call_arg (t, 0); + unsigned i; + ce_s *lhsp; + get_constraint_for_ptr_offset (dest, NULL_TREE, &lhsc); + lhs = get_function_part_constraint (fi, fi_clobbers); + FOR_EACH_VEC_ELT (lhsc, i, lhsp) + process_constraint (new_constraint (lhs, *lhsp)); + return; + } + /* The following functions clobber their second and third + arguments. */ + case BUILT_IN_SINCOS: + case BUILT_IN_SINCOSF: + case BUILT_IN_SINCOSL: + { + process_ipa_clobber (fi, gimple_call_arg (t, 1)); + process_ipa_clobber (fi, gimple_call_arg (t, 2)); + return; + } + /* The following functions clobber their second argument. */ + case BUILT_IN_FREXP: + case BUILT_IN_FREXPF: + case BUILT_IN_FREXPL: + case BUILT_IN_LGAMMA_R: + case BUILT_IN_LGAMMAF_R: + case BUILT_IN_LGAMMAL_R: + case BUILT_IN_GAMMA_R: + case BUILT_IN_GAMMAF_R: + case BUILT_IN_GAMMAL_R: + case BUILT_IN_MODF: + case BUILT_IN_MODFF: + case BUILT_IN_MODFL: + { + process_ipa_clobber (fi, gimple_call_arg (t, 1)); + return; + } + /* The following functions clobber their third argument. */ + case BUILT_IN_REMQUO: + case BUILT_IN_REMQUOF: + case BUILT_IN_REMQUOL: + { + process_ipa_clobber (fi, gimple_call_arg (t, 2)); + return; + } + /* The following functions use what their first argument + points to. */ + case BUILT_IN_STRDUP: + case BUILT_IN_STRNDUP: + case BUILT_IN_REALLOC: + case BUILT_IN_INDEX: + case BUILT_IN_STRCHR: + case BUILT_IN_STRRCHR: + case BUILT_IN_MEMCHR: + { + tree src = gimple_call_arg (t, 0); + get_constraint_for_ptr_offset (src, NULL_TREE, &rhsc); + lhs = get_function_part_constraint (fi, fi_uses); + struct constraint_expr *rhsp; + FOR_EACH_VEC_ELT (rhsc, i, rhsp) + process_constraint (new_constraint (lhs, *rhsp)); + return; + } + /* The following functions use what their first and second argument + point to. */ + case BUILT_IN_STRSTR: + case BUILT_IN_STRPBRK: + { + tree src = gimple_call_arg (t, 0); + get_constraint_for_ptr_offset (src, NULL_TREE, &rhsc); + lhs = get_function_part_constraint (fi, fi_uses); + struct constraint_expr *rhsp; + FOR_EACH_VEC_ELT (rhsc, i, rhsp) + process_constraint (new_constraint (lhs, *rhsp)); + rhsc.truncate (0); + src = gimple_call_arg (t, 1); + get_constraint_for_ptr_offset (src, NULL_TREE, &rhsc); + FOR_EACH_VEC_ELT (rhsc, i, rhsp) + process_constraint (new_constraint (lhs, *rhsp)); + return; + } + /* The following functions neither read nor clobber memory. */ + case BUILT_IN_ASSUME_ALIGNED: + case BUILT_IN_FREE: + return; + /* Trampolines are of no interest to us. */ + case BUILT_IN_INIT_TRAMPOLINE: + case BUILT_IN_ADJUST_TRAMPOLINE: + return; + case BUILT_IN_VA_START: + case BUILT_IN_VA_END: + return; + case BUILT_IN_GOMP_PARALLEL: + case BUILT_IN_GOACC_PARALLEL: + { + unsigned int fnpos, argpos; + unsigned int implicit_use_args[2]; + unsigned int num_implicit_use_args = 0; + switch (DECL_FUNCTION_CODE (decl)) + { + case BUILT_IN_GOMP_PARALLEL: + /* __builtin_GOMP_parallel (fn, data, num_threads, flags). */ + fnpos = 0; + argpos = 1; + break; + case BUILT_IN_GOACC_PARALLEL: + /* __builtin_GOACC_parallel (flags_m, fn, mapnum, hostaddrs, + sizes, kinds, ...). */ + fnpos = 1; + argpos = 3; + implicit_use_args[num_implicit_use_args++] = 4; + implicit_use_args[num_implicit_use_args++] = 5; + break; + default: + gcc_unreachable (); + } + + tree fnarg = gimple_call_arg (t, fnpos); + gcc_assert (TREE_CODE (fnarg) == ADDR_EXPR); + tree fndecl = TREE_OPERAND (fnarg, 0); + if (fndecl_maybe_in_other_partition (fndecl)) + /* Fallthru to general call handling. */ + break; + + varinfo_t cfi = get_vi_for_tree (fndecl); + + tree arg = gimple_call_arg (t, argpos); + + /* Parameter passed by value is used. */ + lhs = get_function_part_constraint (fi, fi_uses); + struct constraint_expr *rhsp; + get_constraint_for (arg, &rhsc); + FOR_EACH_VEC_ELT (rhsc, j, rhsp) + process_constraint (new_constraint (lhs, *rhsp)); + rhsc.truncate (0); + + /* Handle parameters used by the call, but not used in cfi, as + implicitly used by cfi. */ + lhs = get_function_part_constraint (cfi, fi_uses); + for (unsigned i = 0; i < num_implicit_use_args; ++i) + { + tree arg = gimple_call_arg (t, implicit_use_args[i]); + get_constraint_for (arg, &rhsc); + FOR_EACH_VEC_ELT (rhsc, j, rhsp) + process_constraint (new_constraint (lhs, *rhsp)); + rhsc.truncate (0); + } + + /* The caller clobbers what the callee does. */ + lhs = get_function_part_constraint (fi, fi_clobbers); + rhs = get_function_part_constraint (cfi, fi_clobbers); + process_constraint (new_constraint (lhs, rhs)); + + /* The caller uses what the callee does. */ + lhs = get_function_part_constraint (fi, fi_uses); + rhs = get_function_part_constraint (cfi, fi_uses); + process_constraint (new_constraint (lhs, rhs)); + + return; + } + /* printf-style functions may have hooks to set pointers to + point to somewhere into the generated string. Leave them + for a later exercise... */ + default: + /* Fallthru to general call handling. */; + } + + /* Parameters passed by value are used. */ + lhs = get_function_part_constraint (fi, fi_uses); + for (i = 0; i < gimple_call_num_args (t); i++) + { + struct constraint_expr *rhsp; + tree arg = gimple_call_arg (t, i); + + if (TREE_CODE (arg) == SSA_NAME + || is_gimple_min_invariant (arg)) + continue; + + get_constraint_for_address_of (arg, &rhsc); + FOR_EACH_VEC_ELT (rhsc, j, rhsp) + process_constraint (new_constraint (lhs, *rhsp)); + rhsc.truncate (0); + } + + /* Build constraints for propagating clobbers/uses along the + callgraph edges. */ + cfi = get_fi_for_callee (call_stmt); + if (cfi->id == anything_id) + { + if (gimple_vdef (t)) + make_constraint_from (first_vi_for_offset (fi, fi_clobbers), + anything_id); + make_constraint_from (first_vi_for_offset (fi, fi_uses), + anything_id); + return; + } + + /* For callees without function info (that's external functions), + ESCAPED is clobbered and used. */ + if (cfi->decl + && TREE_CODE (cfi->decl) == FUNCTION_DECL + && !cfi->is_fn_info) + { + varinfo_t vi; + + if (gimple_vdef (t)) + make_copy_constraint (first_vi_for_offset (fi, fi_clobbers), + escaped_id); + make_copy_constraint (first_vi_for_offset (fi, fi_uses), escaped_id); + + /* Also honor the call statement use/clobber info. */ + if ((vi = lookup_call_clobber_vi (call_stmt)) != NULL) + make_copy_constraint (first_vi_for_offset (fi, fi_clobbers), + vi->id); + if ((vi = lookup_call_use_vi (call_stmt)) != NULL) + make_copy_constraint (first_vi_for_offset (fi, fi_uses), + vi->id); + return; + } + + /* Otherwise the caller clobbers and uses what the callee does. + ??? This should use a new complex constraint that filters + local variables of the callee. */ + if (gimple_vdef (t)) + { + lhs = get_function_part_constraint (fi, fi_clobbers); + rhs = get_function_part_constraint (cfi, fi_clobbers); + process_constraint (new_constraint (lhs, rhs)); + } + lhs = get_function_part_constraint (fi, fi_uses); + rhs = get_function_part_constraint (cfi, fi_uses); + process_constraint (new_constraint (lhs, rhs)); + } + else if (gimple_code (t) == GIMPLE_ASM) + { + /* ??? Ick. We can do better. */ + if (gimple_vdef (t)) + make_constraint_from (first_vi_for_offset (fi, fi_clobbers), + anything_id); + make_constraint_from (first_vi_for_offset (fi, fi_uses), + anything_id); + } +} + + +/* This structure is used during pushing fields onto the fieldstack + to track the offset of the field, since bitpos_of_field gives it + relative to its immediate containing type, and we want it relative + to the ultimate containing object. */ + +struct fieldoff +{ + /* Offset from the base of the base containing object to this field. */ + HOST_WIDE_INT offset; + + /* Size, in bits, of the field. */ + unsigned HOST_WIDE_INT size; + + unsigned has_unknown_size : 1; + + unsigned must_have_pointers : 1; + + unsigned may_have_pointers : 1; + + unsigned only_restrict_pointers : 1; + + tree restrict_pointed_type; +}; +typedef struct fieldoff fieldoff_s; + + +/* qsort comparison function for two fieldoff's PA and PB. */ + +static int +fieldoff_compare (const void *pa, const void *pb) +{ + const fieldoff_s *foa = (const fieldoff_s *)pa; + const fieldoff_s *fob = (const fieldoff_s *)pb; + unsigned HOST_WIDE_INT foasize, fobsize; + + if (foa->offset < fob->offset) + return -1; + else if (foa->offset > fob->offset) + return 1; + + foasize = foa->size; + fobsize = fob->size; + if (foasize < fobsize) + return -1; + else if (foasize > fobsize) + return 1; + return 0; +} + +/* Sort a fieldstack according to the field offset and sizes. */ +static void +sort_fieldstack (vec &fieldstack) +{ + fieldstack.qsort (fieldoff_compare); +} + +/* Return true if T is a type that can have subvars. */ + +static inline bool +type_can_have_subvars (const_tree t) +{ + /* Aggregates without overlapping fields can have subvars. */ + return TREE_CODE (t) == RECORD_TYPE; +} + +/* Return true if V is a tree that we can have subvars for. + Normally, this is any aggregate type. Also complex + types which are not gimple registers can have subvars. */ + +static inline bool +var_can_have_subvars (const_tree v) +{ + /* Volatile variables should never have subvars. */ + if (TREE_THIS_VOLATILE (v)) + return false; + + /* Non decls or memory tags can never have subvars. */ + if (!DECL_P (v)) + return false; + + return type_can_have_subvars (TREE_TYPE (v)); +} + +/* Return true if T is a type that does contain pointers. */ + +static bool +type_must_have_pointers (tree type) +{ + if (POINTER_TYPE_P (type)) + return true; + + if (TREE_CODE (type) == ARRAY_TYPE) + return type_must_have_pointers (TREE_TYPE (type)); + + /* A function or method can have pointers as arguments, so track + those separately. */ + if (FUNC_OR_METHOD_TYPE_P (type)) + return true; + + return false; +} + +static bool +field_must_have_pointers (tree t) +{ + return type_must_have_pointers (TREE_TYPE (t)); +} + +/* Given a TYPE, and a vector of field offsets FIELDSTACK, push all + the fields of TYPE onto fieldstack, recording their offsets along + the way. + + OFFSET is used to keep track of the offset in this entire + structure, rather than just the immediately containing structure. + Returns false if the caller is supposed to handle the field we + recursed for. */ + +static bool +push_fields_onto_fieldstack (tree type, vec *fieldstack, + unsigned HOST_WIDE_INT offset) +{ + tree field; + bool empty_p = true; + + if (TREE_CODE (type) != RECORD_TYPE) + return false; + + /* If the vector of fields is growing too big, bail out early. + Callers check for vec::length <= param_max_fields_for_field_sensitive, make + sure this fails. */ + if (fieldstack->length () > (unsigned)param_max_fields_for_field_sensitive) + return false; + + for (field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field)) + if (TREE_CODE (field) == FIELD_DECL) + { + bool push = false; + unsigned HOST_WIDE_INT foff = bitpos_of_field (field); + tree field_type = TREE_TYPE (field); + + if (!var_can_have_subvars (field) + || TREE_CODE (field_type) == QUAL_UNION_TYPE + || TREE_CODE (field_type) == UNION_TYPE) + push = true; + else if (!push_fields_onto_fieldstack + (field_type, fieldstack, offset + foff) + && (DECL_SIZE (field) + && !integer_zerop (DECL_SIZE (field)))) + /* Empty structures may have actual size, like in C++. So + see if we didn't push any subfields and the size is + nonzero, push the field onto the stack. */ + push = true; + + if (push) + { + fieldoff_s *pair = NULL; + bool has_unknown_size = false; + bool must_have_pointers_p; + + if (!fieldstack->is_empty ()) + pair = &fieldstack->last (); + + /* If there isn't anything at offset zero, create sth. */ + if (!pair + && offset + foff != 0) + { + fieldoff_s e + = {0, offset + foff, false, false, true, false, NULL_TREE}; + pair = fieldstack->safe_push (e); + } + + if (!DECL_SIZE (field) + || !tree_fits_uhwi_p (DECL_SIZE (field))) + has_unknown_size = true; + + /* If adjacent fields do not contain pointers merge them. */ + must_have_pointers_p = field_must_have_pointers (field); + if (pair + && !has_unknown_size + && !must_have_pointers_p + && !pair->must_have_pointers + && !pair->has_unknown_size + && pair->offset + pair->size == offset + foff) + { + pair->size += tree_to_uhwi (DECL_SIZE (field)); + } + else + { + fieldoff_s e; + e.offset = offset + foff; + e.has_unknown_size = has_unknown_size; + if (!has_unknown_size) + e.size = tree_to_uhwi (DECL_SIZE (field)); + else + e.size = -1; + e.must_have_pointers = must_have_pointers_p; + e.may_have_pointers = true; + e.only_restrict_pointers + = (!has_unknown_size + && POINTER_TYPE_P (field_type) + && TYPE_RESTRICT (field_type)); + if (e.only_restrict_pointers) + e.restrict_pointed_type = TREE_TYPE (field_type); + fieldstack->safe_push (e); + } + } + + empty_p = false; + } + + return !empty_p; +} + +/* Count the number of arguments DECL has, and set IS_VARARGS to true + if it is a varargs function. */ + +static unsigned int +count_num_arguments (tree decl, bool *is_varargs) +{ + unsigned int num = 0; + tree t; + + /* Capture named arguments for K&R functions. They do not + have a prototype and thus no TYPE_ARG_TYPES. */ + for (t = DECL_ARGUMENTS (decl); t; t = DECL_CHAIN (t)) + ++num; + + /* Check if the function has variadic arguments. */ + for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t)) + if (TREE_VALUE (t) == void_type_node) + break; + if (!t) + *is_varargs = true; + + return num; +} + +/* Creation function node for DECL, using NAME, and return the index + of the variable we've created for the function. If NONLOCAL_p, create + initial constraints. */ + +static varinfo_t +create_function_info_for (tree decl, const char *name, bool add_id, + bool nonlocal_p) +{ + struct function *fn = DECL_STRUCT_FUNCTION (decl); + varinfo_t vi, prev_vi; + tree arg; + unsigned int i; + bool is_varargs = false; + unsigned int num_args = count_num_arguments (decl, &is_varargs); + + /* Create the variable info. */ + + vi = new_var_info (decl, name, add_id); + vi->offset = 0; + vi->size = 1; + vi->fullsize = fi_parm_base + num_args; + vi->is_fn_info = 1; + vi->may_have_pointers = false; + if (is_varargs) + vi->fullsize = ~0; + insert_vi_for_tree (vi->decl, vi); + + prev_vi = vi; + + /* Create a variable for things the function clobbers and one for + things the function uses. */ + { + varinfo_t clobbervi, usevi; + const char *newname; + char *tempname; + + tempname = xasprintf ("%s.clobber", name); + newname = ggc_strdup (tempname); + free (tempname); + + clobbervi = new_var_info (NULL, newname, false); + clobbervi->offset = fi_clobbers; + clobbervi->size = 1; + clobbervi->fullsize = vi->fullsize; + clobbervi->is_full_var = true; + clobbervi->is_global_var = false; + clobbervi->is_reg_var = true; + + gcc_assert (prev_vi->offset < clobbervi->offset); + prev_vi->next = clobbervi->id; + prev_vi = clobbervi; + + tempname = xasprintf ("%s.use", name); + newname = ggc_strdup (tempname); + free (tempname); + + usevi = new_var_info (NULL, newname, false); + usevi->offset = fi_uses; + usevi->size = 1; + usevi->fullsize = vi->fullsize; + usevi->is_full_var = true; + usevi->is_global_var = false; + usevi->is_reg_var = true; + + gcc_assert (prev_vi->offset < usevi->offset); + prev_vi->next = usevi->id; + prev_vi = usevi; + } + + /* And one for the static chain. */ + if (fn->static_chain_decl != NULL_TREE) + { + varinfo_t chainvi; + const char *newname; + char *tempname; + + tempname = xasprintf ("%s.chain", name); + newname = ggc_strdup (tempname); + free (tempname); + + chainvi = new_var_info (fn->static_chain_decl, newname, false); + chainvi->offset = fi_static_chain; + chainvi->size = 1; + chainvi->fullsize = vi->fullsize; + chainvi->is_full_var = true; + chainvi->is_global_var = false; + + insert_vi_for_tree (fn->static_chain_decl, chainvi); + + if (nonlocal_p + && chainvi->may_have_pointers) + make_constraint_from (chainvi, nonlocal_id); + + gcc_assert (prev_vi->offset < chainvi->offset); + prev_vi->next = chainvi->id; + prev_vi = chainvi; + } + + /* Create a variable for the return var. */ + if (DECL_RESULT (decl) != NULL + || !VOID_TYPE_P (TREE_TYPE (TREE_TYPE (decl)))) + { + varinfo_t resultvi; + const char *newname; + char *tempname; + tree resultdecl = decl; + + if (DECL_RESULT (decl)) + resultdecl = DECL_RESULT (decl); + + tempname = xasprintf ("%s.result", name); + newname = ggc_strdup (tempname); + free (tempname); + + resultvi = new_var_info (resultdecl, newname, false); + resultvi->offset = fi_result; + resultvi->size = 1; + resultvi->fullsize = vi->fullsize; + resultvi->is_full_var = true; + if (DECL_RESULT (decl)) + resultvi->may_have_pointers = true; + + if (DECL_RESULT (decl)) + insert_vi_for_tree (DECL_RESULT (decl), resultvi); + + if (nonlocal_p + && DECL_RESULT (decl) + && DECL_BY_REFERENCE (DECL_RESULT (decl))) + make_constraint_from (resultvi, nonlocal_id); + + gcc_assert (prev_vi->offset < resultvi->offset); + prev_vi->next = resultvi->id; + prev_vi = resultvi; + } + + /* We also need to make function return values escape. Nothing + escapes by returning from main though. */ + if (nonlocal_p + && !MAIN_NAME_P (DECL_NAME (decl))) + { + varinfo_t fi, rvi; + fi = lookup_vi_for_tree (decl); + rvi = first_vi_for_offset (fi, fi_result); + if (rvi && rvi->offset == fi_result) + make_copy_constraint (get_varinfo (escaped_id), rvi->id); + } + + /* Set up variables for each argument. */ + arg = DECL_ARGUMENTS (decl); + for (i = 0; i < num_args; i++) + { + varinfo_t argvi; + const char *newname; + char *tempname; + tree argdecl = decl; + + if (arg) + argdecl = arg; + + tempname = xasprintf ("%s.arg%d", name, i); + newname = ggc_strdup (tempname); + free (tempname); + + argvi = new_var_info (argdecl, newname, false); + argvi->offset = fi_parm_base + i; + argvi->size = 1; + argvi->is_full_var = true; + argvi->fullsize = vi->fullsize; + if (arg) + argvi->may_have_pointers = true; + + if (arg) + insert_vi_for_tree (arg, argvi); + + if (nonlocal_p + && argvi->may_have_pointers) + make_constraint_from (argvi, nonlocal_id); + + gcc_assert (prev_vi->offset < argvi->offset); + prev_vi->next = argvi->id; + prev_vi = argvi; + if (arg) + arg = DECL_CHAIN (arg); + } + + /* Add one representative for all further args. */ + if (is_varargs) + { + varinfo_t argvi; + const char *newname; + char *tempname; + tree decl; + + tempname = xasprintf ("%s.varargs", name); + newname = ggc_strdup (tempname); + free (tempname); + + /* We need sth that can be pointed to for va_start. */ + decl = build_fake_var_decl (ptr_type_node); + + argvi = new_var_info (decl, newname, false); + argvi->offset = fi_parm_base + num_args; + argvi->size = ~0; + argvi->is_full_var = true; + argvi->is_heap_var = true; + argvi->fullsize = vi->fullsize; + + if (nonlocal_p + && argvi->may_have_pointers) + make_constraint_from (argvi, nonlocal_id); + + gcc_assert (prev_vi->offset < argvi->offset); + prev_vi->next = argvi->id; + } + + return vi; +} + + +/* Return true if FIELDSTACK contains fields that overlap. + FIELDSTACK is assumed to be sorted by offset. */ + +static bool +check_for_overlaps (const vec &fieldstack) +{ + fieldoff_s *fo = NULL; + unsigned int i; + HOST_WIDE_INT lastoffset = -1; + + FOR_EACH_VEC_ELT (fieldstack, i, fo) + { + if (fo->offset == lastoffset) + return true; + lastoffset = fo->offset; + } + return false; +} + +/* Create a varinfo structure for NAME and DECL, and add it to VARMAP. + This will also create any varinfo structures necessary for fields + of DECL. DECL is a function parameter if HANDLE_PARAM is set. + HANDLED_STRUCT_TYPE is used to register struct types reached by following + restrict pointers. This is needed to prevent infinite recursion. + If ADD_RESTRICT, pretend that the pointer NAME is restrict even if DECL + does not advertise it. */ + +static varinfo_t +create_variable_info_for_1 (tree decl, const char *name, bool add_id, + bool handle_param, bitmap handled_struct_type, + bool add_restrict = false) +{ + varinfo_t vi, newvi; + tree decl_type = TREE_TYPE (decl); + tree declsize = DECL_P (decl) ? DECL_SIZE (decl) : TYPE_SIZE (decl_type); + auto_vec fieldstack; + fieldoff_s *fo; + unsigned int i; + + if (!declsize + || !tree_fits_uhwi_p (declsize)) + { + vi = new_var_info (decl, name, add_id); + vi->offset = 0; + vi->size = ~0; + vi->fullsize = ~0; + vi->is_unknown_size_var = true; + vi->is_full_var = true; + vi->may_have_pointers = true; + return vi; + } + + /* Collect field information. */ + if (use_field_sensitive + && var_can_have_subvars (decl) + /* ??? Force us to not use subfields for globals in IPA mode. + Else we'd have to parse arbitrary initializers. */ + && !(in_ipa_mode + && is_global_var (decl))) + { + fieldoff_s *fo = NULL; + bool notokay = false; + unsigned int i; + + push_fields_onto_fieldstack (decl_type, &fieldstack, 0); + + for (i = 0; !notokay && fieldstack.iterate (i, &fo); i++) + if (fo->has_unknown_size + || fo->offset < 0) + { + notokay = true; + break; + } + + /* We can't sort them if we have a field with a variable sized type, + which will make notokay = true. In that case, we are going to return + without creating varinfos for the fields anyway, so sorting them is a + waste to boot. */ + if (!notokay) + { + sort_fieldstack (fieldstack); + /* Due to some C++ FE issues, like PR 22488, we might end up + what appear to be overlapping fields even though they, + in reality, do not overlap. Until the C++ FE is fixed, + we will simply disable field-sensitivity for these cases. */ + notokay = check_for_overlaps (fieldstack); + } + + if (notokay) + fieldstack.release (); + } + + /* If we didn't end up collecting sub-variables create a full + variable for the decl. */ + if (fieldstack.length () == 0 + || fieldstack.length () > (unsigned)param_max_fields_for_field_sensitive) + { + vi = new_var_info (decl, name, add_id); + vi->offset = 0; + vi->may_have_pointers = true; + vi->fullsize = tree_to_uhwi (declsize); + vi->size = vi->fullsize; + vi->is_full_var = true; + if (POINTER_TYPE_P (decl_type) + && (TYPE_RESTRICT (decl_type) || add_restrict)) + vi->only_restrict_pointers = 1; + if (vi->only_restrict_pointers + && !type_contains_placeholder_p (TREE_TYPE (decl_type)) + && handle_param + && !bitmap_bit_p (handled_struct_type, + TYPE_UID (TREE_TYPE (decl_type)))) + { + varinfo_t rvi; + tree heapvar = build_fake_var_decl (TREE_TYPE (decl_type)); + DECL_EXTERNAL (heapvar) = 1; + if (var_can_have_subvars (heapvar)) + bitmap_set_bit (handled_struct_type, + TYPE_UID (TREE_TYPE (decl_type))); + rvi = create_variable_info_for_1 (heapvar, "PARM_NOALIAS", true, + true, handled_struct_type); + if (var_can_have_subvars (heapvar)) + bitmap_clear_bit (handled_struct_type, + TYPE_UID (TREE_TYPE (decl_type))); + rvi->is_restrict_var = 1; + insert_vi_for_tree (heapvar, rvi); + make_constraint_from (vi, rvi->id); + make_param_constraints (rvi); + } + fieldstack.release (); + return vi; + } + + vi = new_var_info (decl, name, add_id); + vi->fullsize = tree_to_uhwi (declsize); + if (fieldstack.length () == 1) + vi->is_full_var = true; + for (i = 0, newvi = vi; + fieldstack.iterate (i, &fo); + ++i, newvi = vi_next (newvi)) + { + const char *newname = NULL; + char *tempname; + + if (dump_file) + { + if (fieldstack.length () != 1) + { + tempname + = xasprintf ("%s." HOST_WIDE_INT_PRINT_DEC + "+" HOST_WIDE_INT_PRINT_DEC, name, + fo->offset, fo->size); + newname = ggc_strdup (tempname); + free (tempname); + } + } + else + newname = "NULL"; + + if (newname) + newvi->name = newname; + newvi->offset = fo->offset; + newvi->size = fo->size; + newvi->fullsize = vi->fullsize; + newvi->may_have_pointers = fo->may_have_pointers; + newvi->only_restrict_pointers = fo->only_restrict_pointers; + if (handle_param + && newvi->only_restrict_pointers + && !type_contains_placeholder_p (fo->restrict_pointed_type) + && !bitmap_bit_p (handled_struct_type, + TYPE_UID (fo->restrict_pointed_type))) + { + varinfo_t rvi; + tree heapvar = build_fake_var_decl (fo->restrict_pointed_type); + DECL_EXTERNAL (heapvar) = 1; + if (var_can_have_subvars (heapvar)) + bitmap_set_bit (handled_struct_type, + TYPE_UID (fo->restrict_pointed_type)); + rvi = create_variable_info_for_1 (heapvar, "PARM_NOALIAS", true, + true, handled_struct_type); + if (var_can_have_subvars (heapvar)) + bitmap_clear_bit (handled_struct_type, + TYPE_UID (fo->restrict_pointed_type)); + rvi->is_restrict_var = 1; + insert_vi_for_tree (heapvar, rvi); + make_constraint_from (newvi, rvi->id); + make_param_constraints (rvi); + } + if (i + 1 < fieldstack.length ()) + { + varinfo_t tem = new_var_info (decl, name, false); + newvi->next = tem->id; + tem->head = vi->id; + } + } + + return vi; +} + +static unsigned int +create_variable_info_for (tree decl, const char *name, bool add_id) +{ + /* First see if we are dealing with an ifunc resolver call and + assiociate that with a call to the resolver function result. */ + cgraph_node *node; + if (in_ipa_mode + && TREE_CODE (decl) == FUNCTION_DECL + && (node = cgraph_node::get (decl)) + && node->ifunc_resolver) + { + varinfo_t fi = get_vi_for_tree (node->get_alias_target ()->decl); + constraint_expr rhs + = get_function_part_constraint (fi, fi_result); + fi = new_var_info (NULL_TREE, "ifuncres", true); + fi->is_reg_var = true; + constraint_expr lhs; + lhs.type = SCALAR; + lhs.var = fi->id; + lhs.offset = 0; + process_constraint (new_constraint (lhs, rhs)); + insert_vi_for_tree (decl, fi); + return fi->id; + } + + varinfo_t vi = create_variable_info_for_1 (decl, name, add_id, false, NULL); + unsigned int id = vi->id; + + insert_vi_for_tree (decl, vi); + + if (!VAR_P (decl)) + return id; + + /* Create initial constraints for globals. */ + for (; vi; vi = vi_next (vi)) + { + if (!vi->may_have_pointers + || !vi->is_global_var) + continue; + + /* Mark global restrict qualified pointers. */ + if ((POINTER_TYPE_P (TREE_TYPE (decl)) + && TYPE_RESTRICT (TREE_TYPE (decl))) + || vi->only_restrict_pointers) + { + varinfo_t rvi + = make_constraint_from_global_restrict (vi, "GLOBAL_RESTRICT", + true); + /* ??? For now exclude reads from globals as restrict sources + if those are not (indirectly) from incoming parameters. */ + rvi->is_restrict_var = false; + continue; + } + + /* In non-IPA mode the initializer from nonlocal is all we need. */ + if (!in_ipa_mode + || DECL_HARD_REGISTER (decl)) + make_copy_constraint (vi, nonlocal_id); + + /* In IPA mode parse the initializer and generate proper constraints + for it. */ + else + { + varpool_node *vnode = varpool_node::get (decl); + + /* For escaped variables initialize them from nonlocal. */ + if (!vnode || !vnode->all_refs_explicit_p ()) + make_copy_constraint (vi, nonlocal_id); + + /* While we can in theory walk references for the varpool + node that does not cover zero-initialization or references + to the constant pool. */ + if (DECL_INITIAL (decl)) + { + auto_vec rhsc; + struct constraint_expr lhs, *rhsp; + unsigned i; + lhs.var = vi->id; + lhs.offset = 0; + lhs.type = SCALAR; + get_constraint_for (DECL_INITIAL (decl), &rhsc); + FOR_EACH_VEC_ELT (rhsc, i, rhsp) + process_constraint (new_constraint (lhs, *rhsp)); + /* If this is a variable that escapes from the unit + the initializer escapes as well. */ + if (!vnode || !vnode->all_refs_explicit_p ()) + { + lhs.var = escaped_id; + lhs.offset = 0; + lhs.type = SCALAR; + FOR_EACH_VEC_ELT (rhsc, i, rhsp) + process_constraint (new_constraint (lhs, *rhsp)); + } + } + } + } + + return id; +} + +/* Register the constraints for function parameter related VI. */ + +static void +make_param_constraints (varinfo_t vi) +{ + for (; vi; vi = vi_next (vi)) + { + if (vi->only_restrict_pointers) + ; + else if (vi->may_have_pointers) + make_constraint_from (vi, nonlocal_id); + + if (vi->is_full_var) + break; + } +} + +/* Create varinfo structures for all of the variables in the + function for intraprocedural mode. */ + +static void +intra_create_variable_infos (struct function *fn) +{ + tree t; + bitmap handled_struct_type = NULL; + bool this_parm_in_ctor = DECL_CXX_CONSTRUCTOR_P (fn->decl); + + /* For each incoming pointer argument arg, create the constraint ARG + = NONLOCAL or a dummy variable if it is a restrict qualified + passed-by-reference argument. */ + for (t = DECL_ARGUMENTS (fn->decl); t; t = DECL_CHAIN (t)) + { + if (handled_struct_type == NULL) + handled_struct_type = BITMAP_ALLOC (NULL); + + varinfo_t p + = create_variable_info_for_1 (t, alias_get_name (t), false, true, + handled_struct_type, this_parm_in_ctor); + insert_vi_for_tree (t, p); + + make_param_constraints (p); + + this_parm_in_ctor = false; + } + + if (handled_struct_type != NULL) + BITMAP_FREE (handled_struct_type); + + /* Add a constraint for a result decl that is passed by reference. */ + if (DECL_RESULT (fn->decl) + && DECL_BY_REFERENCE (DECL_RESULT (fn->decl))) + { + varinfo_t p, result_vi = get_vi_for_tree (DECL_RESULT (fn->decl)); + + for (p = result_vi; p; p = vi_next (p)) + make_constraint_from (p, nonlocal_id); + } + + /* Add a constraint for the incoming static chain parameter. */ + if (fn->static_chain_decl != NULL_TREE) + { + varinfo_t p, chain_vi = get_vi_for_tree (fn->static_chain_decl); + + for (p = chain_vi; p; p = vi_next (p)) + make_constraint_from (p, nonlocal_id); + } +} + +/* Initialize the always-existing constraint variables for NULL + ANYTHING, READONLY, and INTEGER. */ + +static void +init_base_vars (void) +{ + struct constraint_expr lhs, rhs; + varinfo_t var_anything; + varinfo_t var_nothing; + varinfo_t var_string; + varinfo_t var_escaped; + varinfo_t var_nonlocal; + varinfo_t var_escaped_return; + varinfo_t var_storedanything; + varinfo_t var_integer; + + /* Variable ID zero is reserved and should be NULL. */ + varmap.safe_push (NULL); + + /* Create the NULL variable, used to represent that a variable points + to NULL. */ + var_nothing = new_var_info (NULL_TREE, "NULL", false); + gcc_assert (var_nothing->id == nothing_id); + var_nothing->is_artificial_var = 1; + var_nothing->offset = 0; + var_nothing->size = ~0; + var_nothing->fullsize = ~0; + var_nothing->is_special_var = 1; + var_nothing->may_have_pointers = 0; + var_nothing->is_global_var = 0; + + /* Create the ANYTHING variable, used to represent that a variable + points to some unknown piece of memory. */ + var_anything = new_var_info (NULL_TREE, "ANYTHING", false); + gcc_assert (var_anything->id == anything_id); + var_anything->is_artificial_var = 1; + var_anything->size = ~0; + var_anything->offset = 0; + var_anything->fullsize = ~0; + var_anything->is_special_var = 1; + + /* Anything points to anything. This makes deref constraints just + work in the presence of linked list and other p = *p type loops, + by saying that *ANYTHING = ANYTHING. */ + lhs.type = SCALAR; + lhs.var = anything_id; + lhs.offset = 0; + rhs.type = ADDRESSOF; + rhs.var = anything_id; + rhs.offset = 0; + + /* This specifically does not use process_constraint because + process_constraint ignores all anything = anything constraints, since all + but this one are redundant. */ + constraints.safe_push (new_constraint (lhs, rhs)); + + /* Create the STRING variable, used to represent that a variable + points to a string literal. String literals don't contain + pointers so STRING doesn't point to anything. */ + var_string = new_var_info (NULL_TREE, "STRING", false); + gcc_assert (var_string->id == string_id); + var_string->is_artificial_var = 1; + var_string->offset = 0; + var_string->size = ~0; + var_string->fullsize = ~0; + var_string->is_special_var = 1; + var_string->may_have_pointers = 0; + + /* Create the ESCAPED variable, used to represent the set of escaped + memory. */ + var_escaped = new_var_info (NULL_TREE, "ESCAPED", false); + gcc_assert (var_escaped->id == escaped_id); + var_escaped->is_artificial_var = 1; + var_escaped->offset = 0; + var_escaped->size = ~0; + var_escaped->fullsize = ~0; + var_escaped->is_special_var = 0; + + /* Create the NONLOCAL variable, used to represent the set of nonlocal + memory. */ + var_nonlocal = new_var_info (NULL_TREE, "NONLOCAL", false); + gcc_assert (var_nonlocal->id == nonlocal_id); + var_nonlocal->is_artificial_var = 1; + var_nonlocal->offset = 0; + var_nonlocal->size = ~0; + var_nonlocal->fullsize = ~0; + var_nonlocal->is_special_var = 1; + + /* Create the ESCAPED_RETURN variable, used to represent the set of escaped + memory via a regular return stmt. */ + var_escaped_return = new_var_info (NULL_TREE, "ESCAPED_RETURN", false); + gcc_assert (var_escaped_return->id == escaped_return_id); + var_escaped_return->is_artificial_var = 1; + var_escaped_return->offset = 0; + var_escaped_return->size = ~0; + var_escaped_return->fullsize = ~0; + var_escaped_return->is_special_var = 0; + + /* ESCAPED = *ESCAPED, because escaped is may-deref'd at calls, etc. */ + lhs.type = SCALAR; + lhs.var = escaped_id; + lhs.offset = 0; + rhs.type = DEREF; + rhs.var = escaped_id; + rhs.offset = 0; + process_constraint (new_constraint (lhs, rhs)); + + /* ESCAPED = ESCAPED + UNKNOWN_OFFSET, because if a sub-field escapes the + whole variable escapes. */ + lhs.type = SCALAR; + lhs.var = escaped_id; + lhs.offset = 0; + rhs.type = SCALAR; + rhs.var = escaped_id; + rhs.offset = UNKNOWN_OFFSET; + process_constraint (new_constraint (lhs, rhs)); + + /* *ESCAPED = NONLOCAL. This is true because we have to assume + everything pointed to by escaped points to what global memory can + point to. */ + lhs.type = DEREF; + lhs.var = escaped_id; + lhs.offset = 0; + rhs.type = SCALAR; + rhs.var = nonlocal_id; + rhs.offset = 0; + process_constraint (new_constraint (lhs, rhs)); + + /* NONLOCAL = &NONLOCAL, NONLOCAL = &ESCAPED. This is true because + global memory may point to global memory and escaped memory. */ + lhs.type = SCALAR; + lhs.var = nonlocal_id; + lhs.offset = 0; + rhs.type = ADDRESSOF; + rhs.var = nonlocal_id; + rhs.offset = 0; + process_constraint (new_constraint (lhs, rhs)); + rhs.type = ADDRESSOF; + rhs.var = escaped_id; + rhs.offset = 0; + process_constraint (new_constraint (lhs, rhs)); + + /* Transitively close ESCAPED_RETURN. + ESCAPED_RETURN = ESCAPED_RETURN + UNKNOWN_OFFSET + ESCAPED_RETURN = *ESCAPED_RETURN. */ + lhs.type = SCALAR; + lhs.var = escaped_return_id; + lhs.offset = 0; + rhs.type = SCALAR; + rhs.var = escaped_return_id; + rhs.offset = UNKNOWN_OFFSET; + process_constraint (new_constraint (lhs, rhs)); + lhs.type = SCALAR; + lhs.var = escaped_return_id; + lhs.offset = 0; + rhs.type = DEREF; + rhs.var = escaped_return_id; + rhs.offset = 0; + process_constraint (new_constraint (lhs, rhs)); + + /* Create the STOREDANYTHING variable, used to represent the set of + variables stored to *ANYTHING. */ + var_storedanything = new_var_info (NULL_TREE, "STOREDANYTHING", false); + gcc_assert (var_storedanything->id == storedanything_id); + var_storedanything->is_artificial_var = 1; + var_storedanything->offset = 0; + var_storedanything->size = ~0; + var_storedanything->fullsize = ~0; + var_storedanything->is_special_var = 0; + + /* Create the INTEGER variable, used to represent that a variable points + to what an INTEGER "points to". */ + var_integer = new_var_info (NULL_TREE, "INTEGER", false); + gcc_assert (var_integer->id == integer_id); + var_integer->is_artificial_var = 1; + var_integer->size = ~0; + var_integer->fullsize = ~0; + var_integer->offset = 0; + var_integer->is_special_var = 1; + + /* INTEGER = ANYTHING, because we don't know where a dereference of + a random integer will point to. */ + lhs.type = SCALAR; + lhs.var = integer_id; + lhs.offset = 0; + rhs.type = ADDRESSOF; + rhs.var = anything_id; + rhs.offset = 0; + process_constraint (new_constraint (lhs, rhs)); +} + +/* Associate node with varinfo DATA. Worker for + cgraph_for_symbol_thunks_and_aliases. */ +static bool +associate_varinfo_to_alias (struct cgraph_node *node, void *data) +{ + if ((node->alias + || (node->thunk + && ! node->inlined_to)) + && node->analyzed + && !node->ifunc_resolver) + insert_vi_for_tree (node->decl, (varinfo_t)data); + return false; +} + +/* Compute whether node is refered to non-locally. Worker for + cgraph_for_symbol_thunks_and_aliases. */ +static bool +refered_from_nonlocal_fn (struct cgraph_node *node, void *data) +{ + bool *nonlocal_p = (bool *)data; + *nonlocal_p |= (node->used_from_other_partition + || DECL_EXTERNAL (node->decl) + || TREE_PUBLIC (node->decl) + || node->force_output + || lookup_attribute ("noipa", DECL_ATTRIBUTES (node->decl))); + return false; +} + +/* Same for varpool nodes. */ +static bool +refered_from_nonlocal_var (struct varpool_node *node, void *data) +{ + bool *nonlocal_p = (bool *)data; + *nonlocal_p |= (node->used_from_other_partition + || DECL_EXTERNAL (node->decl) + || TREE_PUBLIC (node->decl) + || node->force_output); + return false; +} + +/* Create function infos. */ + +static void +ipa_create_function_infos (void) +{ + struct cgraph_node *node; + unsigned int constr_count = constraints.length (); + + FOR_EACH_DEFINED_FUNCTION (node) + { + varinfo_t vi; + /* Nodes without a body in this partition are not interesting. + Especially do not visit clones at this point for now - we + get duplicate decls there for inline clones at least. */ + if (!node->has_gimple_body_p () + || node->in_other_partition + || node->inlined_to) + continue; + node->get_body (); + + gcc_assert (!node->clone_of); + + /* For externally visible or attribute used annotated functions use + local constraints for their arguments. + For local functions we see all callers and thus do not need initial + constraints for parameters. */ + bool nonlocal_p = (node->used_from_other_partition + || DECL_EXTERNAL (node->decl) + || TREE_PUBLIC (node->decl) + || node->force_output + || lookup_attribute ("noipa", + DECL_ATTRIBUTES (node->decl))); + node->call_for_symbol_thunks_and_aliases (refered_from_nonlocal_fn, + &nonlocal_p, true); + + vi = create_function_info_for (node->decl, + alias_get_name (node->decl), false, + nonlocal_p); + if (dump_file && (dump_flags & TDF_DETAILS) + && constr_count != constraints.length ()) + { + fprintf (dump_file, + "Generating initial constraints for %s", + node->dump_name ()); + if (DECL_ASSEMBLER_NAME_SET_P (node->decl)) + fprintf (dump_file, " (%s)", + IDENTIFIER_POINTER + (DECL_ASSEMBLER_NAME (node->decl))); + fprintf (dump_file, "\n\n"); + dump_constraints (dump_file, constr_count); + fprintf (dump_file, "\n"); + + constr_count = constraints.length (); + } + + node->call_for_symbol_thunks_and_aliases + (associate_varinfo_to_alias, vi, true); + } +} + +/* Create constraints for global variables and their initializers. */ + +static void +ipa_create_global_variable_infos (void) +{ + varpool_node *var; + unsigned int constr_count = constraints.length (); + + FOR_EACH_VARIABLE (var) + { + if (var->alias && var->analyzed) + continue; + + varinfo_t vi = get_vi_for_tree (var->decl); + + /* For the purpose of IPA PTA unit-local globals are not + escape points. */ + bool nonlocal_p = (DECL_EXTERNAL (var->decl) + || TREE_PUBLIC (var->decl) + || var->used_from_other_partition + || var->force_output); + var->call_for_symbol_and_aliases (refered_from_nonlocal_var, + &nonlocal_p, true); + if (nonlocal_p) + vi->is_ipa_escape_point = true; + } + + if (dump_file && (dump_flags & TDF_DETAILS) + && constr_count != constraints.length ()) + { + fprintf (dump_file, + "Generating constraints for global initializers\n\n"); + dump_constraints (dump_file, constr_count); + fprintf (dump_file, "\n"); + constr_count = constraints.length (); + } +} + + +namespace pointer_analysis { + +/* Find the variable info for tree T in VI_FOR_TREE. If T does not + exist in the map, return NULL, otherwise, return the varinfo we found. */ + +varinfo_t +lookup_vi_for_tree (tree t) +{ + varinfo_t *slot = vi_for_tree->get (t); + if (slot == NULL) + return NULL; + + return *slot; +} + +/* Lookup the variable for the call statement CALL representing + the uses. Returns NULL if there is nothing special about this call. */ + +varinfo_t +lookup_call_use_vi (gcall *call) +{ + varinfo_t *slot_p = call_stmt_vars->get (call); + if (slot_p) + return *slot_p; + + return NULL; +} + +/* Lookup the variable for the call statement CALL representing + the clobbers. Returns NULL if there is nothing special about this call. */ + +varinfo_t +lookup_call_clobber_vi (gcall *call) +{ + varinfo_t uses = lookup_call_use_vi (call); + if (!uses) + return NULL; + + return vi_next (uses); +} + +/* Return the varinfo for the callee of CALL. */ + +varinfo_t +get_fi_for_callee (gcall *call) +{ + tree decl, fn = gimple_call_fn (call); + + if (fn && TREE_CODE (fn) == OBJ_TYPE_REF) + fn = OBJ_TYPE_REF_EXPR (fn); + + /* If we can directly resolve the function being called, do so. + Otherwise, it must be some sort of indirect expression that + we should still be able to handle. */ + decl = gimple_call_addr_fndecl (fn); + if (decl) + return get_vi_for_tree (decl); + + /* If the function is anything other than a SSA name pointer we have no + clue and should be getting ANYFN (well, ANYTHING for now). */ + if (!fn || TREE_CODE (fn) != SSA_NAME) + return get_varinfo (anything_id); + + if (SSA_NAME_IS_DEFAULT_DEF (fn) + && (TREE_CODE (SSA_NAME_VAR (fn)) == PARM_DECL + || TREE_CODE (SSA_NAME_VAR (fn)) == RESULT_DECL)) + fn = SSA_NAME_VAR (fn); + + return get_vi_for_tree (fn); +} + +/* Initialize constraint builder. */ + +void +init_constraint_builder (void) +{ + vi_for_tree = new hash_map; + call_stmt_vars = new hash_map; + gcc_obstack_init (&fake_var_decl_obstack); + + init_base_vars (); +} + +/* Deallocate constraint builder globals. */ + +void +delete_constraint_builder (void) +{ + delete vi_for_tree; + delete call_stmt_vars; + constraint_pool.release (); + obstack_free (&fake_var_decl_obstack, NULL); +} + +/* Build constraints for intraprocedural mode. */ + +void +intra_build_constraints (void) +{ + basic_block bb; + + intra_create_variable_infos (cfun); + + /* Now walk all statements and build the constraint set. */ + FOR_EACH_BB_FN (bb, cfun) + { + for (gphi_iterator gsi = gsi_start_phis (bb); !gsi_end_p (gsi); + gsi_next (&gsi)) + { + gphi *phi = gsi.phi (); + + if (! virtual_operand_p (gimple_phi_result (phi))) + find_func_aliases (cfun, phi); + } + + for (gimple_stmt_iterator gsi = gsi_start_bb (bb); !gsi_end_p (gsi); + gsi_next (&gsi)) + { + gimple *stmt = gsi_stmt (gsi); + + find_func_aliases (cfun, stmt); + } + } + + if (dump_file && (dump_flags & TDF_DETAILS)) + { + fprintf (dump_file, "Points-to analysis\n\nConstraints:\n\n"); + dump_constraints (dump_file, 0); + } +} + +/* Build constraints for ipa mode. */ + +void +ipa_build_constraints (void) +{ + struct cgraph_node *node; + + ipa_create_function_infos (); + ipa_create_global_variable_infos (); + + unsigned int constr_count = constraints.length (); + + FOR_EACH_DEFINED_FUNCTION (node) + { + struct function *func; + basic_block bb; + + /* Nodes without a body in this partition are not interesting. */ + if (!node->has_gimple_body_p () + || node->in_other_partition + || node->clone_of) + continue; + + if (dump_file && (dump_flags & TDF_DETAILS)) + { + fprintf (dump_file, + "Generating constraints for %s", node->dump_name ()); + if (DECL_ASSEMBLER_NAME_SET_P (node->decl)) + fprintf (dump_file, " (%s)", + IDENTIFIER_POINTER + (DECL_ASSEMBLER_NAME (node->decl))); + fprintf (dump_file, "\n"); + } + + func = DECL_STRUCT_FUNCTION (node->decl); + gcc_assert (cfun == NULL); + + /* Build constraints for the function body. */ + FOR_EACH_BB_FN (bb, func) + { + for (gphi_iterator gsi = gsi_start_phis (bb); !gsi_end_p (gsi); + gsi_next (&gsi)) + { + gphi *phi = gsi.phi (); + + if (! virtual_operand_p (gimple_phi_result (phi))) + find_func_aliases (func, phi); + } + + for (gimple_stmt_iterator gsi = gsi_start_bb (bb); !gsi_end_p (gsi); + gsi_next (&gsi)) + { + gimple *stmt = gsi_stmt (gsi); + + find_func_aliases (func, stmt); + find_func_clobbers (func, stmt); + } + } + + if (dump_file && (dump_flags & TDF_DETAILS)) + { + fprintf (dump_file, "\n"); + dump_constraints (dump_file, constr_count); + fprintf (dump_file, "\n"); + constr_count = constraints.length (); + } + } +} + +} // namespace pointer_analysis diff --git a/gcc/gimple-ssa-pta-constraints.h b/gcc/gimple-ssa-pta-constraints.h new file mode 100644 index 000000000000..3b469f7f7162 --- /dev/null +++ b/gcc/gimple-ssa-pta-constraints.h @@ -0,0 +1,38 @@ +/* Constraint builder for tree based points-to analysis + Copyright (C) 2005-2025 Free Software Foundation, Inc. + Contributed by Daniel Berlin + + This file is part of GCC. + + GCC is free software; you can redistribute it and/or modify + 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. + + 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 + . */ + +#ifndef GIMPLE_SSA_PTA_CONSTRAINTS_H +#define GIMPLE_SSA_PTA_CONSTRAINTS_H + +namespace pointer_analysis { + +varinfo_t lookup_vi_for_tree (tree); +varinfo_t lookup_call_use_vi (gcall *); +varinfo_t lookup_call_clobber_vi (gcall *); +varinfo_t get_fi_for_callee (gcall *); + +void init_constraint_builder (void); +void delete_constraint_builder (void); +void intra_build_constraints (void); +void ipa_build_constraints (void); + +} // namespace pointer_analysis + +#endif /* GIMPLE_SSA_PTA_CONSTRAINTS_H */ diff --git a/gcc/gimple.h b/gcc/gimple.h index da32651ea017..0356bc52a5ba 100644 --- a/gcc/gimple.h +++ b/gcc/gimple.h @@ -1545,7 +1545,7 @@ extern size_t const gimple_ops_offset_[]; extern enum gimple_statement_structure_enum const gss_for_code_[]; /* This variable holds the currently expanded gimple statement for purposes - of comminucating the profile info to the builtin expanders. */ + of communicating the profile info to the builtin expanders. */ extern gimple *currently_expanding_gimple_stmt; size_t gimple_size (enum gimple_code code, unsigned num_ops = 0); diff --git a/gcc/gimplify.cc b/gcc/gimplify.cc index ca1fa2189cb9..d8725e4c5e20 100644 --- a/gcc/gimplify.cc +++ b/gcc/gimplify.cc @@ -1280,7 +1280,8 @@ build_stack_save_restore (gcall **save, gcall **restore) 1, tmp_var); } -/* Generate IFN_ASAN_MARK call that poisons shadow of a for DECL variable. */ +/* Generate IFN_ASAN_MARK call that poisons shadow memory of the DECL + variable. */ static tree build_asan_poison_call_expr (tree decl) @@ -2102,13 +2103,13 @@ gimple_add_padding_init_for_auto_var (tree decl, bool is_vla, /* Return true if the DECL need to be automaticly initialized by the compiler. */ static bool -is_var_need_auto_init (tree decl) +var_needs_auto_init_p (tree decl) { if (auto_var_p (decl) - && (TREE_CODE (decl) != VAR_DECL - || !DECL_HARD_REGISTER (decl)) - && (flag_auto_var_init > AUTO_INIT_UNINITIALIZED) - && (!lookup_attribute ("uninitialized", DECL_ATTRIBUTES (decl))) + && (TREE_CODE (decl) != VAR_DECL || !DECL_HARD_REGISTER (decl)) + && flag_auto_var_init > AUTO_INIT_UNINITIALIZED + && !lookup_attribute ("uninitialized", DECL_ATTRIBUTES (decl)) + && !lookup_attribute ("indeterminate", DECL_ATTRIBUTES (decl)) && !OPAQUE_TYPE_P (TREE_TYPE (decl)) && !is_empty_type (TREE_TYPE (decl))) return true; @@ -2221,7 +2222,7 @@ gimplify_decl_expr (tree *stmt_p, gimple_seq *seq_p) /* When there is no explicit initializer, if the user requested, We should insert an artifical initializer for this automatic variable. */ - else if (is_var_need_auto_init (decl) + else if (var_needs_auto_init_p (decl) && !decl_had_value_expr_p) { gimple_add_init_for_auto_var (decl, @@ -2315,27 +2316,6 @@ emit_warn_switch_unreachable (gimple *stmt) /* Don't warn for compiler-generated gotos. These occur in Duff's devices, for example. */ return NULL; - else if ((flag_auto_var_init > AUTO_INIT_UNINITIALIZED) - && ((gimple_call_internal_p (stmt, IFN_DEFERRED_INIT)) - || (gimple_call_builtin_p (stmt, BUILT_IN_CLEAR_PADDING) - && (bool) TREE_INT_CST_LOW (gimple_call_arg (stmt, 1))) - || (is_gimple_assign (stmt) - && gimple_assign_single_p (stmt) - && (TREE_CODE (gimple_assign_rhs1 (stmt)) == SSA_NAME) - && gimple_call_internal_p ( - SSA_NAME_DEF_STMT (gimple_assign_rhs1 (stmt)), - IFN_DEFERRED_INIT)))) - /* Don't warn for compiler-generated initializations for - -ftrivial-auto-var-init. - There are 3 cases: - case 1: a call to .DEFERRED_INIT; - case 2: a call to __builtin_clear_padding with the 2nd argument is - present and non-zero; - case 3: a gimple assign store right after the call to .DEFERRED_INIT - that has the LHS of .DEFERRED_INIT as the RHS as following: - _1 = .DEFERRED_INIT (4, 2, &"i1"[0]); - i1 = _1. */ - return NULL; else warning_at (gimple_location (stmt), OPT_Wswitch_unreachable, "statement will never be executed"); @@ -2383,6 +2363,18 @@ warn_switch_unreachable_and_auto_init_r (gimple_stmt_iterator *gsi_p, there will be non-debug stmts too, and we'll catch those. */ break; + case GIMPLE_ASSIGN: + /* See comment below in the GIMPLE_CALL case. */ + if (flag_auto_var_init > AUTO_INIT_UNINITIALIZED + && gimple_assign_single_p (stmt) + && TREE_CODE (gimple_assign_rhs1 (stmt)) == SSA_NAME) + { + gimple *g = SSA_NAME_DEF_STMT (gimple_assign_rhs1 (stmt)); + if (gimple_call_internal_p (g, IFN_DEFERRED_INIT)) + break; + } + goto do_default; + case GIMPLE_LABEL: /* Stop till the first Label. */ return integer_zero_node; @@ -2392,24 +2384,41 @@ warn_switch_unreachable_and_auto_init_r (gimple_stmt_iterator *gsi_p, *handled_ops_p = false; break; } - if (warn_trivial_auto_var_init - && flag_auto_var_init > AUTO_INIT_UNINITIALIZED + /* Don't warn for compiler-generated initializations for + -ftrivial-auto-var-init for -Wswitch-unreachable. Though + do warn for -Wtrivial-auto-var-init. + There are 3 cases: + case 1: a call to .DEFERRED_INIT; + case 2: a call to __builtin_clear_padding with the 2nd argument is + present and non-zero; + case 3: a gimple assign store right after the call to .DEFERRED_INIT + that has the LHS of .DEFERRED_INIT as the RHS as following: + _1 = .DEFERRED_INIT (4, 2, &"i1"[0]); + i1 = _1. + case 3 is handled above in the GIMPLE_ASSIGN case. */ + if (flag_auto_var_init > AUTO_INIT_UNINITIALIZED && gimple_call_internal_p (stmt, IFN_DEFERRED_INIT)) { - /* Get the variable name from the 3rd argument of call. */ - tree var_name = gimple_call_arg (stmt, 2); - var_name = TREE_OPERAND (TREE_OPERAND (var_name, 0), 0); - const char *var_name_str = TREE_STRING_POINTER (var_name); - - warning_at (gimple_location (stmt), OPT_Wtrivial_auto_var_init, - "%qs cannot be initialized with " - "%<-ftrivial-auto-var_init%>", - var_name_str); + if (warn_trivial_auto_var_init) + { + /* Get the variable name from the 3rd argument of call. */ + tree var_name = gimple_call_arg (stmt, 2); + var_name = TREE_OPERAND (TREE_OPERAND (var_name, 0), 0); + const char *var_name_str = TREE_STRING_POINTER (var_name); + + warning_at (gimple_location (stmt), OPT_Wtrivial_auto_var_init, + "%qs cannot be initialized with " + "%<-ftrivial-auto-var_init%>", var_name_str); + } break; } - + if (flag_auto_var_init > AUTO_INIT_UNINITIALIZED + && gimple_call_builtin_p (stmt, BUILT_IN_CLEAR_PADDING) + && (bool) TREE_INT_CST_LOW (gimple_call_arg (stmt, 1))) + break; /* Fall through. */ default: + do_default: /* check the first "real" statement (not a decl/lexical scope/...), issue warning if needed. */ if (warn_switch_unreachable && !unreachable_issued) @@ -2489,26 +2498,39 @@ last_stmt_in_scope (gimple *stmt) if (!stmt) return NULL; + auto last_stmt_in_seq = [] (gimple_seq s) + { + gimple_seq_node n; + for (n = gimple_seq_last (s); + n && (is_gimple_debug (n) + || (flag_auto_var_init > AUTO_INIT_UNINITIALIZED + && gimple_call_internal_p (n, IFN_DEFERRED_INIT))); + n = n->prev) + if (n == s) + return (gimple *) NULL; + return (gimple *) n; + }; + switch (gimple_code (stmt)) { case GIMPLE_BIND: { gbind *bind = as_a (stmt); - stmt = gimple_seq_last_nondebug_stmt (gimple_bind_body (bind)); + stmt = last_stmt_in_seq (gimple_bind_body (bind)); return last_stmt_in_scope (stmt); } case GIMPLE_TRY: { gtry *try_stmt = as_a (stmt); - stmt = gimple_seq_last_nondebug_stmt (gimple_try_eval (try_stmt)); + stmt = last_stmt_in_seq (gimple_try_eval (try_stmt)); gimple *last_eval = last_stmt_in_scope (stmt); if (gimple_stmt_may_fallthru (last_eval) && (last_eval == NULL || !gimple_call_internal_p (last_eval, IFN_FALLTHROUGH)) && gimple_try_kind (try_stmt) == GIMPLE_TRY_FINALLY) { - stmt = gimple_seq_last_nondebug_stmt (gimple_try_cleanup (try_stmt)); + stmt = last_stmt_in_seq (gimple_try_cleanup (try_stmt)); return last_stmt_in_scope (stmt); } else @@ -2661,8 +2683,16 @@ collect_fallthrough_labels (gimple_stmt_iterator *gsi_p, } else if (gimple_call_internal_p (gsi_stmt (*gsi_p), IFN_ASAN_MARK)) ; + else if (flag_auto_var_init > AUTO_INIT_UNINITIALIZED + && gimple_call_internal_p (gsi_stmt (*gsi_p), + IFN_DEFERRED_INIT)) + ; else if (gimple_code (gsi_stmt (*gsi_p)) == GIMPLE_PREDICT) ; + else if (flag_auto_var_init > AUTO_INIT_UNINITIALIZED + && gimple_code (gsi_stmt (*gsi_p)) == GIMPLE_GOTO + && VACUOUS_INIT_LABEL_P (gimple_goto_dest (gsi_stmt (*gsi_p)))) + ; else if (!is_gimple_debug (gsi_stmt (*gsi_p))) prev = gsi_stmt (*gsi_p); gsi_next (gsi_p); @@ -2699,9 +2729,13 @@ should_warn_for_implicit_fallthrough (gimple_stmt_iterator *gsi_p, tree label) { tree l; while (!gsi_end_p (gsi) - && gimple_code (gsi_stmt (gsi)) == GIMPLE_LABEL - && (l = gimple_label_label (as_a (gsi_stmt (gsi)))) - && !case_label_p (&gimplify_ctxp->case_labels, l)) + && ((gimple_code (gsi_stmt (gsi)) == GIMPLE_LABEL + && (l + = gimple_label_label (as_a (gsi_stmt (gsi)))) + && !case_label_p (&gimplify_ctxp->case_labels, l)) + || (flag_auto_var_init > AUTO_INIT_UNINITIALIZED + && gimple_call_internal_p (gsi_stmt (gsi), + IFN_DEFERRED_INIT)))) gsi_next_nondebug (&gsi); if (gsi_end_p (gsi) || gimple_code (gsi_stmt (gsi)) != GIMPLE_LABEL) return false; @@ -2714,7 +2748,10 @@ should_warn_for_implicit_fallthrough (gimple_stmt_iterator *gsi_p, tree label) /* Skip all immediately following labels. */ while (!gsi_end_p (gsi) && (gimple_code (gsi_stmt (gsi)) == GIMPLE_LABEL - || gimple_code (gsi_stmt (gsi)) == GIMPLE_PREDICT)) + || gimple_code (gsi_stmt (gsi)) == GIMPLE_PREDICT + || (flag_auto_var_init > AUTO_INIT_UNINITIALIZED + && gimple_call_internal_p (gsi_stmt (gsi), + IFN_DEFERRED_INIT)))) gsi_next_nondebug (&gsi); /* { ... something; default:; } */ @@ -2891,7 +2928,33 @@ expand_FALLTHROUGH_r (gimple_stmt_iterator *gsi_p, bool *handled_ops_p, gimple_stmt_iterator gsi2 = *gsi_p; stmt = gsi_stmt (gsi2); - if (gimple_code (stmt) == GIMPLE_GOTO && !gimple_has_location (stmt)) + if (flag_auto_var_init > AUTO_INIT_UNINITIALIZED + && gimple_code (stmt) == GIMPLE_GOTO + && VACUOUS_INIT_LABEL_P (gimple_goto_dest (stmt))) + { + /* Handle for C++ artificial -ftrivial-auto-var-init= + sequences. Those look like: + goto lab1; + lab2:; + v1 = .DEFERRED_INIT (...); + v2 = .DEFERRED_INIT (...); + lab3:; + v3 = .DEFERRED_INIT (...); + lab1:; + In this case, a case/default label can be either in between + the GIMPLE_GOTO and the corresponding GIMPLE_LABEL, if jumps + from the switch condition to the case/default label cross + vacuous initialization of some variables, or after the + corresponding GIMPLE_LABEL, if those jumps don't cross + any such initialization but there is an adjacent named label + which crosses such initialization. So, for the purpose of + this function, just ignore the goto but until reaching the + corresponding GIMPLE_LABEL allow also .DEFERRED_INIT + calls. */ + gsi_next (&gsi2); + } + else if (gimple_code (stmt) == GIMPLE_GOTO + && !gimple_has_location (stmt)) { /* Go on until the artificial label. */ tree goto_dest = gimple_goto_dest (stmt); @@ -2926,6 +2989,9 @@ expand_FALLTHROUGH_r (gimple_stmt_iterator *gsi_p, bool *handled_ops_p, } else if (gimple_call_internal_p (stmt, IFN_ASAN_MARK)) ; + else if (flag_auto_var_init > AUTO_INIT_UNINITIALIZED + && gimple_call_internal_p (stmt, IFN_DEFERRED_INIT)) + ; else if (!is_gimple_debug (stmt)) /* Anything else is not expected. */ break; @@ -6753,7 +6819,8 @@ gimplify_init_constructor (tree *expr_p, gimple_seq *pre_p, gimple_seq *post_p, && clear_padding_type_may_have_padding_p (type) && ((AGGREGATE_TYPE_P (type) && !cleared && !is_empty_ctor) || !AGGREGATE_TYPE_P (type)) - && is_var_need_auto_init (object)) + && var_needs_auto_init_p (object) + && flag_auto_var_init != AUTO_INIT_CXX26) gimple_add_padding_init_for_auto_var (object, false, pre_p); return ret; @@ -7930,6 +7997,8 @@ gimplify_asm_expr (tree *expr_p, gimple_seq *pre_p, gimple_seq *post_p) bool ok; size_t constraint_len; + if (error_operand_p (TREE_VALUE (link))) + return GS_ERROR; link_next = TREE_CHAIN (link); oconstraints[i] @@ -7951,10 +8020,9 @@ gimplify_asm_expr (tree *expr_p, gimple_seq *pre_p, gimple_seq *post_p) /* If we can't make copies, we can only accept memory. Similarly for VLAs. */ tree outtype = TREE_TYPE (TREE_VALUE (link)); - if (outtype != error_mark_node - && (TREE_ADDRESSABLE (outtype) - || !COMPLETE_TYPE_P (outtype) - || !tree_fits_poly_uint64_p (TYPE_SIZE_UNIT (outtype)))) + if (TREE_ADDRESSABLE (outtype) + || !COMPLETE_TYPE_P (outtype) + || !tree_fits_poly_uint64_p (TYPE_SIZE_UNIT (outtype))) { if (allows_mem) allows_reg = 0; @@ -8155,6 +8223,8 @@ gimplify_asm_expr (tree *expr_p, gimple_seq *pre_p, gimple_seq *post_p) int input_num = 0; for (link = ASM_INPUTS (expr); link; ++input_num, ++i, link = link_next) { + if (error_operand_p (TREE_VALUE (link))) + return GS_ERROR; link_next = TREE_CHAIN (link); constraint = TREE_STRING_POINTER (TREE_VALUE (TREE_PURPOSE (link))); reg_info.operand = TREE_VALUE (link); @@ -8169,10 +8239,9 @@ gimplify_asm_expr (tree *expr_p, gimple_seq *pre_p, gimple_seq *post_p) /* If we can't make copies, we can only accept memory. */ tree intype = TREE_TYPE (TREE_VALUE (link)); - if (intype != error_mark_node - && (TREE_ADDRESSABLE (intype) - || !COMPLETE_TYPE_P (intype) - || !tree_fits_poly_uint64_p (TYPE_SIZE_UNIT (intype)))) + if (TREE_ADDRESSABLE (intype) + || !COMPLETE_TYPE_P (intype) + || !tree_fits_poly_uint64_p (TYPE_SIZE_UNIT (intype))) { if (allows_mem) allows_reg = 0; @@ -8458,6 +8527,7 @@ gimplify_target_expr (tree *expr_p, gimple_seq *pre_p, gimple_seq *post_p) if (init) { gimple_seq init_pre_p = NULL; + bool is_vla = false; /* TARGET_EXPR temps aren't part of the enclosing block, so add it to the temps list. Handle also variable length TARGET_EXPRs. */ @@ -8468,6 +8538,7 @@ gimplify_target_expr (tree *expr_p, gimple_seq *pre_p, gimple_seq *post_p) /* FIXME: this is correct only when the size of the type does not depend on expressions evaluated in init. */ gimplify_vla_decl (temp, &init_pre_p); + is_vla = true; } else { @@ -8479,6 +8550,15 @@ gimplify_target_expr (tree *expr_p, gimple_seq *pre_p, gimple_seq *post_p) gimple_add_tmp_var (temp); } + if (var_needs_auto_init_p (temp) && VOID_TYPE_P (TREE_TYPE (init))) + { + gimple_add_init_for_auto_var (temp, flag_auto_var_init, &init_pre_p); + if (flag_auto_var_init == AUTO_INIT_PATTERN + && !is_gimple_reg (temp) + && clear_padding_type_may_have_padding_p (TREE_TYPE (temp))) + gimple_add_padding_init_for_auto_var (temp, is_vla, &init_pre_p); + } + /* If TARGET_EXPR_INITIAL is void, then the mere evaluation of the expression is supposed to initialize the slot. */ if (VOID_TYPE_P (TREE_TYPE (init))) diff --git a/gcc/hooks.cc b/gcc/hooks.cc index 76cb593103dd..5321142495bb 100644 --- a/gcc/hooks.cc +++ b/gcc/hooks.cc @@ -585,3 +585,17 @@ hook_optmode_mode_uhwi_none (machine_mode, unsigned HOST_WIDE_INT) { return opt_machine_mode (); } + +/* Generic hook that takes a string_slice and a locations and returns false. */ + +bool +hook_stringslice_locationtptr_true (string_slice, location_t *) +{ + return true; +} + +bool +hook_stringslice_stringslice_unreachable (string_slice, string_slice) +{ + gcc_unreachable (); +} diff --git a/gcc/hooks.h b/gcc/hooks.h index e95bd11aca86..a7021f532a50 100644 --- a/gcc/hooks.h +++ b/gcc/hooks.h @@ -137,4 +137,8 @@ extern const char *hook_constcharptr_int_const_tree_const_tree_null (int, const_ extern opt_machine_mode hook_optmode_mode_uhwi_none (machine_mode, unsigned HOST_WIDE_INT); + +extern bool hook_stringslice_locationtptr_true (string_slice, location_t *); +extern bool hook_stringslice_stringslice_unreachable (string_slice, string_slice); + #endif diff --git a/gcc/ifcvt.cc b/gcc/ifcvt.cc index 4579148750d4..3dcb1be48692 100644 --- a/gcc/ifcvt.cc +++ b/gcc/ifcvt.cc @@ -101,7 +101,7 @@ static rtx_insn *block_has_only_trap (basic_block); static void init_noce_multiple_sets_info (basic_block, auto_delete_vec &); static bool noce_convert_multiple_sets_1 (struct noce_if_info *, - auto_delete_vec &, int *); + auto_delete_vec &, int *, bool *); /* Count the number of non-jump active insns in BB. */ @@ -3697,28 +3697,27 @@ noce_convert_multiple_sets (struct noce_if_info *if_info) int last_needs_comparison = -1; + bool use_cond_earliest = false; + bool ok = noce_convert_multiple_sets_1 - (if_info, insn_info, &last_needs_comparison); + (if_info, insn_info, &last_needs_comparison, &use_cond_earliest); if (!ok) return false; - /* If there are insns that overwrite part of the initial - comparison, we can still omit creating temporaries for - the last of them. - As the second try will always create a less expensive, - valid sequence, we do not need to compare and can discard - the first one. */ - if (last_needs_comparison != -1) - { - end_sequence (); - start_sequence (); - ok = noce_convert_multiple_sets_1 - (if_info, insn_info, &last_needs_comparison); - /* Actually we should not fail anymore if we reached here, - but better still check. */ - if (!ok) - return false; - } + /* Always perform a second attempt that uses information gathered in the + first. At least we can omit creating temporaries until we definitely + need them. The sequence created in the second attempt is never worse + than the first. */ + + end_sequence (); + start_sequence (); + ok = noce_convert_multiple_sets_1 + (if_info, insn_info, &last_needs_comparison, &use_cond_earliest); + + /* Actually we should not fail anymore if we reached here, + but better still check. */ + if (!ok) + return false; /* We must have seen some sort of insn to insert, otherwise we were given an empty BB to convert, and we can't handle that. */ @@ -3746,12 +3745,22 @@ noce_convert_multiple_sets (struct noce_if_info *if_info) /* Actually emit the sequence if it isn't too expensive. */ rtx_insn *seq = get_insns (); + /* If the created sequence does not use cond_earliest (but the jump + does) add its cost to the original_cost before comparing costs. */ + unsigned int original_cost = if_info->original_cost; + if (if_info->jump != if_info->cond_earliest && !use_cond_earliest) + if_info->original_cost += insn_cost (if_info->cond_earliest, + if_info->speed_p); + if (!targetm.noce_conversion_profitable_p (seq, if_info)) { end_sequence (); return false; } + /* Restore the original cost in case we do not succeed below. */ + if_info->original_cost = original_cost; + for (insn = seq; insn; insn = NEXT_INSN (insn)) set_used_flags (insn); @@ -3805,7 +3814,8 @@ noce_convert_multiple_sets (struct noce_if_info *if_info) static bool noce_convert_multiple_sets_1 (struct noce_if_info *if_info, auto_delete_vec &insn_info, - int *last_needs_comparison) + int *last_needs_comparison, + bool *use_cond_earliest) { basic_block then_bb = if_info->then_bb; rtx_insn *jump = if_info->jump; @@ -3824,6 +3834,7 @@ noce_convert_multiple_sets_1 (struct noce_if_info *if_info, rtx_insn *insn; int count = 0; bool second_try = *last_needs_comparison != -1; + *use_cond_earliest = false; FOR_BB_INSNS (then_bb, insn) { @@ -4000,6 +4011,7 @@ noce_convert_multiple_sets_1 (struct noce_if_info *if_info, temp_dest = temp_dest2; if (!second_try && read_comparison) *last_needs_comparison = count; + *use_cond_earliest = true; } else { @@ -4229,16 +4241,13 @@ noce_process_if_block (struct noce_if_info *if_info) to calculate a value for x. ??? For future expansion, further expand the "multiple X" rules. */ - /* First look for multiple SETS. The original costs already include - a base cost of COSTS_N_INSNS (2): one instruction for the compare - (which we will be needing either way) and one instruction for the - branch. When comparing costs we want to use the branch instruction - cost and the sets vs. the cmovs generated here. Therefore subtract - the costs of the compare before checking. - ??? Actually, instead of the branch instruction costs we might want - to use COSTS_N_INSNS (BRANCH_COST ()) as in other places. */ + /* First look for multiple SETS. + The original costs already include costs for the jump insn as well + as for a CC comparison if there is any. + If a target re-uses the existing CC comparison we keep track of that + and add the costs before default noce_conversion_profitable_p. */ - unsigned potential_cost = if_info->original_cost - COSTS_N_INSNS (1); + unsigned potential_cost = if_info->original_cost; unsigned old_cost = if_info->original_cost; if (!else_bb && HAVE_conditional_move @@ -4920,11 +4929,10 @@ noce_find_if_block (basic_block test_bb, edge then_edge, edge else_edge, = targetm.max_noce_ifcvt_seq_cost (then_edge); /* We'll add in the cost of THEN_BB and ELSE_BB later, when we check that they are valid to transform. We can't easily get back to the insn - for COND (and it may not exist if we had to canonicalize to get COND), - and jump_insns are always given a cost of 1 by seq_cost, so treat - both instructions as having cost COSTS_N_INSNS (1). */ - if_info.original_cost = COSTS_N_INSNS (2); - + for COND (and it may not exist if we had to canonicalize to get COND). + It is assumed that the costs of a jump insn are dependent on the + branch costs. */ + if_info.original_cost += insn_cost (if_info.jump, if_info.speed_p); /* Do the real work. */ diff --git a/gcc/input.cc b/gcc/input.cc index b9a553954401..aad983947114 100644 --- a/gcc/input.cc +++ b/gcc/input.cc @@ -112,16 +112,16 @@ expand_location_1 (const line_maps *set, default: gcc_unreachable (); /* Fall through. */ - case LOCATION_ASPECT_CARET: + case location_aspect::caret: break; - case LOCATION_ASPECT_START: + case location_aspect::start: { location_t start = get_start (loc); if (start != loc) return expand_location_1 (set, start, expansion_point_p, aspect); } break; - case LOCATION_ASPECT_FINISH: + case location_aspect::finish: { location_t finish = get_finish (loc); if (finish != loc) @@ -148,9 +148,9 @@ get_source_text_between (diagnostics::file_cache &fc, location_t start, location_t end) { expanded_location expstart - = expand_location_to_spelling_point (start, LOCATION_ASPECT_START); + = expand_location_to_spelling_point (start, location_aspect::start); expanded_location expend - = expand_location_to_spelling_point (end, LOCATION_ASPECT_FINISH); + = expand_location_to_spelling_point (end, location_aspect::finish); /* If the locations are in different files or the end comes before the start, give up and return nothing. */ @@ -258,7 +258,7 @@ expanded_location expand_location (location_t loc) { return expand_location_1 (line_table, loc, /*expansion_point_p=*/true, - LOCATION_ASPECT_CARET); + location_aspect::caret); } /* Expand the source location LOC into a human readable location. If @@ -911,10 +911,10 @@ get_substring_ranges_for_loc (cpp_reader *pfile, expanded_location start = expand_location_to_spelling_point (src_range.m_start, - LOCATION_ASPECT_START); + location_aspect::start); expanded_location finish = expand_location_to_spelling_point (src_range.m_finish, - LOCATION_ASPECT_FINISH); + location_aspect::finish); if (start.file != finish.file) return "range endpoints are in different files"; if (start.line != finish.line) diff --git a/gcc/input.h b/gcc/input.h index eeef290c1db8..4d2d77415922 100644 --- a/gcc/input.h +++ b/gcc/input.h @@ -79,7 +79,7 @@ get_source_text_between (diagnostics::file_cache &, location_t, location_t); extern expanded_location expand_location_to_spelling_point (location_t, enum location_aspect aspect - = LOCATION_ASPECT_CARET); + = location_aspect::caret); extern location_t expansion_point_location_if_in_system_header (location_t); extern location_t expansion_point_location (location_t); diff --git a/gcc/internal-fn.def b/gcc/internal-fn.def index d2480a1bf792..8434a805e289 100644 --- a/gcc/internal-fn.def +++ b/gcc/internal-fn.def @@ -422,6 +422,8 @@ DEF_INTERNAL_OPTAB_FN (COMPLEX_ADD_ROT270, ECF_CONST, cadd270, binary) DEF_INTERNAL_OPTAB_FN (COMPLEX_MUL, ECF_CONST, cmul, binary) DEF_INTERNAL_OPTAB_FN (COMPLEX_MUL_CONJ, ECF_CONST, cmul_conj, binary) DEF_INTERNAL_OPTAB_FN (VEC_ADDSUB, ECF_CONST, vec_addsub, binary) +DEF_INTERNAL_OPTAB_FN (VEC_TRUNC_ADD_HIGH, ECF_CONST | ECF_NOTHROW, + vec_trunc_add_high, binary) DEF_INTERNAL_WIDENING_OPTAB_FN (VEC_WIDEN_PLUS, ECF_CONST | ECF_NOTHROW, first, diff --git a/gcc/ipa-cp.cc b/gcc/ipa-cp.cc index 4f2030a8d8cb..f1623c147f47 100644 --- a/gcc/ipa-cp.cc +++ b/gcc/ipa-cp.cc @@ -3289,14 +3289,17 @@ ipa_get_indirect_edge_target (struct cgraph_edge *ie, } /* Calculate devirtualization time bonus for NODE, assuming we know information - about arguments stored in AVALS. */ + about arguments stored in AVALS. -static int + FIXME: This function will also consider devirtualization of calls that are + known to be dead in the clone. */ + +static sreal devirtualization_time_bonus (struct cgraph_node *node, ipa_auto_call_arg_values *avals) { struct cgraph_edge *ie; - int res = 0; + sreal res = 0; for (ie = node->indirect_calls; ie; ie = ie->next_callee) { @@ -3314,7 +3317,7 @@ devirtualization_time_bonus (struct cgraph_node *node, continue; /* Only bare minimum benefit for clearly un-inlineable targets. */ - res += 1; + int savings = 1; callee = cgraph_node::get (target); if (!callee || !callee->definition) continue; @@ -3331,12 +3334,13 @@ devirtualization_time_bonus (struct cgraph_node *node, int max_inline_insns_auto = opt_for_fn (callee->decl, param_max_inline_insns_auto); if (size <= max_inline_insns_auto / 4) - res += 31 / ((int)speculative + 1); + savings += 31 / ((int)speculative + 1); else if (size <= max_inline_insns_auto / 2) - res += 15 / ((int)speculative + 1); + savings += 15 / ((int)speculative + 1); else if (size <= max_inline_insns_auto || DECL_DECLARED_INLINE_P (callee->decl)) - res += 7 / ((int)speculative + 1); + savings += 7 / ((int)speculative + 1); + res = res + ie->combined_sreal_frequency () * (sreal) savings; } return res; @@ -3624,8 +3628,8 @@ estimate_local_effects (struct cgraph_node *node) ipa_auto_call_arg_values avals; always_const = gather_context_independent_values (info, &avals, true, &removable_params_cost); - int devirt_bonus = devirtualization_time_bonus (node, &avals); - if (always_const || devirt_bonus + sreal devirt_bonus = devirtualization_time_bonus (node, &avals); + if (always_const || devirt_bonus > 0 || (removable_params_cost && clone_for_param_removal_p (node))) { struct caller_statistics stats; @@ -4697,7 +4701,14 @@ update_counts_for_self_gen_clones (cgraph_node *orig_node, if (den > 0) for (cgraph_edge *e = cs; e; e = get_next_cgraph_edge_clone (e)) if (e->callee->ultimate_alias_target () == orig_node - && processed_edges.contains (e)) + && processed_edges.contains (e) + /* If count is not IPA, this adjustment makes verifier + unhappy, since we expect bb->count to match e->count. + We may add a flag to mark edge conts that has been + modified by IPA code, but so far it does not seem + to be worth the effort. With local counts the profile + will not propagate at IPA level. */ + && e->count.ipa_p ()) e->count /= den; } } diff --git a/gcc/ipa-devirt.cc b/gcc/ipa-devirt.cc index 18cb5a821953..c10d67f1e674 100644 --- a/gcc/ipa-devirt.cc +++ b/gcc/ipa-devirt.cc @@ -1801,7 +1801,7 @@ add_type_duplicate (odr_type val, tree type) before we can pass them to odr_types_equivalent_p (PR lto/83121). */ if (lto_location_cache::current_cache) lto_location_cache::current_cache->apply_location_cache (); - /* As a special case we stream mangles names of integer types so we can see + /* As a special case we stream mangled names of integer types so we can see if they are believed to be same even though they have different representation. Avoid bogus warning on mismatches in these. */ if (TREE_CODE (type) != INTEGER_TYPE @@ -3694,7 +3694,6 @@ ipa_devirt (void) for (e = n->indirect_calls; e; e = e->next_callee) if (e->indirect_info->polymorphic) { - struct cgraph_node *likely_target = NULL; void *cache_token; bool final; @@ -3765,20 +3764,22 @@ ipa_devirt (void) nmultiple++; continue; } + auto_vec likely_targets; for (i = 0; i < targets.length (); i++) if (likely_target_p (targets[i])) { - if (likely_target) + if ((int)likely_targets.length () >= param_max_devirt_targets) { - likely_target = NULL; + likely_targets.truncate (0); if (dump_file) - fprintf (dump_file, "More than one likely target\n\n"); + fprintf (dump_file, "More than %i likely targets\n\n", + param_max_devirt_targets); nmultiple++; break; } - likely_target = targets[i]; + likely_targets.safe_push (targets[i]); } - if (!likely_target) + if (!likely_targets.length ()) { bad_call_targets.add (cache_token); continue; @@ -3787,7 +3788,13 @@ ipa_devirt (void) with the speculation. */ if (e->speculative) { - bool found = e->speculative_call_for_target (likely_target); + bool found = false; + for (cgraph_node * likely_target: likely_targets) + if (e->speculative_call_for_target (likely_target)) + { + found = true; + break; + } if (found) { fprintf (dump_file, "We agree with speculation\n\n"); @@ -3800,63 +3807,79 @@ ipa_devirt (void) } continue; } - if (!likely_target->definition) + bool first = true; + unsigned speculative_id = 0; + for (cgraph_node * likely_target: likely_targets) { - if (dump_file) - fprintf (dump_file, "Target is not a definition\n\n"); - nnotdefined++; - continue; - } - /* Do not introduce new references to external symbols. While we - can handle these just well, it is common for programs to - incorrectly with headers defining methods they are linked - with. */ - if (DECL_EXTERNAL (likely_target->decl)) - { - if (dump_file) - fprintf (dump_file, "Target is external\n\n"); - nexternal++; - continue; - } - /* Don't use an implicitly-declared destructor (c++/58678). */ - struct cgraph_node *non_thunk_target - = likely_target->function_symbol (); - if (DECL_ARTIFICIAL (non_thunk_target->decl)) - { - if (dump_file) - fprintf (dump_file, "Target is artificial\n\n"); - nartificial++; - continue; - } - if (likely_target->get_availability () <= AVAIL_INTERPOSABLE - && likely_target->can_be_discarded_p ()) - { - if (dump_file) - fprintf (dump_file, "Target is overwritable\n\n"); - noverwritable++; - continue; - } - else if (dbg_cnt (devirt)) - { - if (dump_enabled_p ()) - { - dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, e->call_stmt, - "speculatively devirtualizing call " - "in %s to %s\n", - n->dump_name (), - likely_target->dump_name ()); - } - if (!likely_target->can_be_discarded_p ()) + if (!likely_target->definition) + { + if (dump_file) + fprintf (dump_file, "Target is not a definition\n\n"); + nnotdefined++; + continue; + } + /* Do not introduce new references to external symbols. While we + can handle these just well, it is common for programs to + incorrectly with headers defining methods they are linked + with. */ + if (DECL_EXTERNAL (likely_target->decl)) + { + if (dump_file) + fprintf (dump_file, "Target is external\n\n"); + nexternal++; + continue; + } + /* Don't use an implicitly-declared destructor (c++/58678). */ + struct cgraph_node *non_thunk_target + = likely_target->function_symbol (); + if (DECL_ARTIFICIAL (non_thunk_target->decl)) + { + if (dump_file) + fprintf (dump_file, "Target is artificial\n\n"); + nartificial++; + continue; + } + if (likely_target->get_availability () <= AVAIL_INTERPOSABLE + && likely_target->can_be_discarded_p ()) { - cgraph_node *alias; - alias = dyn_cast (likely_target->noninterposable_alias ()); - if (alias) - likely_target = alias; + if (dump_file) + fprintf (dump_file, "Target is overwritable\n\n"); + noverwritable++; + continue; } - nconverted++; - update = true; - e->make_speculative - (likely_target, e->count.apply_scale (8, 10)); + else if (dbg_cnt (devirt)) + { + if (dump_enabled_p ()) + { + dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, e->call_stmt, + "speculatively devirtualizing call " + "in %s to %s\n", + n->dump_name (), + likely_target->dump_name ()); + } + if (!likely_target->can_be_discarded_p ()) + { + cgraph_node *alias; + alias = dyn_cast (likely_target->noninterposable_alias ()); + if (alias) + likely_target = alias; + } + if (first) + nconverted++; + first = false; + update = true; + e->make_speculative + (likely_target, + e->count.apply_scale (8, 10 * likely_targets.length ()), + speculative_id++); + } + } + if (speculative_id > 1 && dump_enabled_p ()) + { + dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, e->call_stmt, + "devirtualized call in %s to %i targets\n", + n->dump_name (), + speculative_id); } } if (update) diff --git a/gcc/ipa-fnsummary.cc b/gcc/ipa-fnsummary.cc index 924a54b498b7..dd41de98ff1a 100644 --- a/gcc/ipa-fnsummary.cc +++ b/gcc/ipa-fnsummary.cc @@ -3543,13 +3543,26 @@ estimate_edge_devirt_benefit (struct cgraph_edge *ie, if (!opt_for_fn (ie->caller->decl, flag_indirect_inlining)) return false; - target = ipa_get_indirect_edge_target (ie, avals, &speculative); + target = ipa_get_indirect_edge_target + (ie->callee ? ie->speculative_call_indirect_edge () : ie, + avals, &speculative); if (!target || speculative) return false; - /* Account for difference in cost between indirect and direct calls. */ - *size -= (eni_size_weights.indirect_call_cost - eni_size_weights.call_cost); - *time -= (eni_time_weights.indirect_call_cost - eni_time_weights.call_cost); + /* If this is speculative call, turn its cost into 0; we will account + the call when processing the indirect call. */ + if (ie->callee) + { + gcc_checking_assert (ie->speculative && *size > 0); + *size = 0; + *time = 0; + } + else + { + /* Account for difference in cost between indirect and direct calls. */ + *size -= (eni_size_weights.indirect_call_cost - eni_size_weights.call_cost); + *time -= (eni_time_weights.indirect_call_cost - eni_time_weights.call_cost); + } gcc_checking_assert (*time >= 0); gcc_checking_assert (*size >= 0); @@ -3581,9 +3594,12 @@ estimate_edge_size_and_time (struct cgraph_edge *e, int *size, int *min_size, int call_time = es->call_stmt_time; int cur_size; - if (!e->callee && hints && e->maybe_hot_p () + if ((!e->callee || e->speculative) && estimate_edge_devirt_benefit (e, &call_size, &call_time, avals)) - *hints |= INLINE_HINT_indirect_call; + { + if (hints && e->maybe_hot_p ()) + *hints |= INLINE_HINT_indirect_call; + } cur_size = call_size * ipa_fn_summary::size_scale; *size += cur_size; if (min_size) @@ -3712,12 +3728,12 @@ estimate_calls_size_and_time (struct cgraph_node *node, int *size, use_table = false; /* Do not calculate summaries for simple wrappers; it is waste of memory. */ - else if (node->callees && node->indirect_calls + else if (node->callees && !node->indirect_calls && node->callees->inline_failed && !node->callees->next_callee) use_table = false; /* If there is an indirect edge that may be optimized, we need to go the slow way. */ - else if (avals && hints + else if (avals && (avals->m_known_vals.length () || avals->m_known_contexts.length () || avals->m_known_aggs.length ())) diff --git a/gcc/ipa-free-lang-data.cc b/gcc/ipa-free-lang-data.cc index 8c4fb3c6b643..8196cab60793 100644 --- a/gcc/ipa-free-lang-data.cc +++ b/gcc/ipa-free-lang-data.cc @@ -735,7 +735,8 @@ find_decls_types_r (tree *tp, int *ws, void *data) if (TREE_CODE (t) == FUNCTION_DECL) { - fld_worklist_push (DECL_ARGUMENTS (t), fld); + for (tree arg = DECL_ARGUMENTS (t); arg; arg = DECL_CHAIN (arg)) + fld_worklist_push (arg, fld); fld_worklist_push (DECL_RESULT (t), fld); } else if (TREE_CODE (t) == FIELD_DECL) @@ -750,9 +751,6 @@ find_decls_types_r (tree *tp, int *ws, void *data) && DECL_HAS_VALUE_EXPR_P (t)) fld_worklist_push (DECL_VALUE_EXPR (t), fld); - if (TREE_CODE (t) != FIELD_DECL - && TREE_CODE (t) != TYPE_DECL) - fld_worklist_push (TREE_CHAIN (t), fld); *ws = 0; } else if (TYPE_P (t)) diff --git a/gcc/ipa-inline-transform.cc b/gcc/ipa-inline-transform.cc index da9c9076e5f3..a20485496654 100644 --- a/gcc/ipa-inline-transform.cc +++ b/gcc/ipa-inline-transform.cc @@ -142,12 +142,14 @@ master_clone_with_noninline_clones_p (struct cgraph_node *node) DUPLICATE is used for bookkeeping on whether we are actually creating new clones or re-using node originally representing out-of-line function call. By default the offline copy is removed, when it appears dead after inlining. - UPDATE_ORIGINAL prevents this transformation. + KEEP_OFFLINE_COPY prevents this transformation. + If UPDATE_ORIGINAL is set, clones profile is subtracted from the offline version. If OVERALL_SIZE is non-NULL, the size is updated to reflect the transformation. */ void clone_inlined_nodes (struct cgraph_edge *e, bool duplicate, + bool keep_offline_copy, bool update_original, int *overall_size) { struct cgraph_node *inlining_into; @@ -167,7 +169,7 @@ clone_inlined_nodes (struct cgraph_edge *e, bool duplicate, if (!e->callee->callers->next_caller /* Recursive inlining never wants the master clone to be overwritten. */ - && update_original + && !keep_offline_copy && can_remove_node_now_p (e->callee, e) /* We cannot overwrite a master clone with non-inline clones until after these clones are materialized. */ @@ -228,7 +230,8 @@ clone_inlined_nodes (struct cgraph_edge *e, bool duplicate, { next = e->next_callee; if (!e->inline_failed) - clone_inlined_nodes (e, duplicate, update_original, overall_size); + clone_inlined_nodes (e, duplicate, keep_offline_copy, + update_original, overall_size); } } @@ -306,7 +309,8 @@ mark_all_inlined_calls_cdtor (cgraph_node *node) /* Mark edge E as inlined and update callgraph accordingly. UPDATE_ORIGINAL - specify whether profile of original function should be updated. If any new + specify whether profile of original function should be updated and whether + offline copy should be removed if unnecesary. If any new indirect edges are discovered in the process, add them to NEW_EDGES, unless it is NULL. If UPDATE_OVERALL_SUMMARY is false, do not bother to recompute overall size of caller after inlining. Caller is required to eventually do it via @@ -328,6 +332,7 @@ inline_call (struct cgraph_edge *e, bool update_original, bool comdat_local = e->callee->comdat_local_p (); struct cgraph_node *callee = e->callee->ultimate_alias_target (); bool new_edges_found = false; + bool keep_offline_copy = !update_original; int estimated_growth = 0; if (! update_overall_summary) @@ -379,6 +384,29 @@ inline_call (struct cgraph_edge *e, bool update_original, fprintf (dump_file, "\n"); } } + /* Do sanity checking of the profile and in case of inconsistencies do not + update profile of original. This reduces the chances that inlining + turns callee cold while in reality it is still hot. */ + if (!(callee->count.ipa ().force_nonzero () == callee->count.ipa ())) + { + if (dump_file) + fprintf (dump_file, "Callee count is 0; not updating callee profile\n"); + update_original = false; + } + else if (e->count.ipa ().quality () == AFDO + && !(e->count.ipa ().force_nonzero () == e->count.ipa ())) + { + if (dump_file) + fprintf (dump_file, "Edge count is AFDO 0; not updating callee profile\n"); + update_original = false; + } + if (e->count.ipa () > callee->count.ipa ().apply_scale (9, 8)) + { + if (dump_file) + fprintf (dump_file, "Calee count is too small (profile is inconsistent);" + " not updating callee profile\n"); + update_original = false; + } if (to->thunk) { struct cgraph_node *target = to->callees->callee; @@ -530,7 +558,8 @@ inline_call (struct cgraph_edge *e, bool update_original, } } - clone_inlined_nodes (e, true, update_original, overall_size); + clone_inlined_nodes (e, true, keep_offline_copy, + update_original, overall_size); gcc_assert (curr->callee->inlined_to == to); diff --git a/gcc/ipa-inline.cc b/gcc/ipa-inline.cc index 0cf97a80687e..b71ebbe60fd4 100644 --- a/gcc/ipa-inline.cc +++ b/gcc/ipa-inline.cc @@ -1860,7 +1860,7 @@ recursive_inlining (struct cgraph_edge *edge, false, vNULL, true, NULL, NULL, NULL); for (e = master_clone->callees; e; e = e->next_callee) if (!e->inline_failed) - clone_inlined_nodes (e, true, false, NULL); + clone_inlined_nodes (e, true, true, false, NULL); curr->redirect_callee (master_clone); if (edge_growth_cache != NULL) edge_growth_cache->remove (curr); diff --git a/gcc/ipa-inline.h b/gcc/ipa-inline.h index 8940cb901023..7d2f881e0ff1 100644 --- a/gcc/ipa-inline.h +++ b/gcc/ipa-inline.h @@ -61,7 +61,7 @@ bool inline_account_function_p (struct cgraph_node *node); bool inline_call (struct cgraph_edge *, bool, vec *, int *, bool, bool *callee_removed = NULL); unsigned int inline_transform (struct cgraph_node *); -void clone_inlined_nodes (struct cgraph_edge *e, bool, bool, int *); +void clone_inlined_nodes (struct cgraph_edge *e, bool, bool, bool, int *); extern int ncalls_inlined; extern int nfunctions_inlined; diff --git a/gcc/ipa-param-manipulation.cc b/gcc/ipa-param-manipulation.cc index 9b74fe24cc4d..487886719039 100644 --- a/gcc/ipa-param-manipulation.cc +++ b/gcc/ipa-param-manipulation.cc @@ -1672,7 +1672,7 @@ ::ipa_param_body_adjustments (ipa_param_adjustments *adjustments, in ADJUSTMENTS. FNDECL designates the new function clone which is being modified. OLD_FNDECL is the function of which FNDECL is a clone (and which at the time of invocation still share DECL_ARGUMENTS). ID is the - copy_body_data structure driving the wholy body copying process. VARS is a + copy_body_data structure driving the whole body copying process. VARS is a pointer to the head of the list of new local variables, TREE_MAP is the map that drives tree substitution in the cloning process. */ diff --git a/gcc/ipa-profile.cc b/gcc/ipa-profile.cc index d4725ce62626..e4c0ff5fe310 100644 --- a/gcc/ipa-profile.cc +++ b/gcc/ipa-profile.cc @@ -316,7 +316,11 @@ ipa_profile_generate_summary (void) count = all; } speculative_call_target item ( - val, GCOV_COMPUTE_SCALE (count, all)); + val, + profile_count::from_gcov_type (count) + .probability_in + (profile_count::from_gcov_type (all)) + .to_reg_br_prob_base ()); csum->speculative_call_targets.safe_push (item); } @@ -621,7 +625,7 @@ ipa_propagate_frequency_1 (struct cgraph_node *node, void *data) return edge != NULL; } -/* Return ture if NODE contains hot calls. */ +/* Return true if NODE contains hot calls. */ bool contains_hot_call_p (struct cgraph_node *node) diff --git a/gcc/ipa-prop.cc b/gcc/ipa-prop.cc index 84d4fb5db674..bf52ffe17381 100644 --- a/gcc/ipa-prop.cc +++ b/gcc/ipa-prop.cc @@ -130,7 +130,7 @@ struct ipa_cst_ref_desc /* Linked list of duplicates created when call graph edges are cloned. */ struct ipa_cst_ref_desc *next_duplicate; /* Number of references in IPA structures, IPA_UNDESCRIBED_USE if the value - if out of control. */ + is out of control. */ int refcount; }; diff --git a/gcc/ipa-prop.h b/gcc/ipa-prop.h index 74c9a6378370..046e83a521f6 100644 --- a/gcc/ipa-prop.h +++ b/gcc/ipa-prop.h @@ -72,7 +72,7 @@ along with GCC; see the file COPYING3. If not see enum jump_func_type { IPA_JF_UNKNOWN = 0, /* newly allocated and zeroed jump functions default */ - IPA_JF_CONST, /* represented by field costant */ + IPA_JF_CONST, /* represented by field constant */ IPA_JF_PASS_THROUGH, /* represented by field pass_through */ IPA_JF_LOAD_AGG, /* represented by field load_agg */ IPA_JF_ANCESTOR /* represented by field ancestor */ diff --git a/gcc/ipa-pure-const.cc b/gcc/ipa-pure-const.cc index 2519fb8a03bd..1af9da16781b 100644 --- a/gcc/ipa-pure-const.cc +++ b/gcc/ipa-pure-const.cc @@ -771,8 +771,7 @@ check_stmt (gimple_stmt_iterator *gsip, funct_state local, bool ipa) print_gimple_stmt (dump_file, stmt, 0); } - if (gimple_has_volatile_ops (stmt) - && !gimple_clobber_p (stmt)) + if (gimple_has_volatile_ops (stmt) && !gimple_clobber_p (stmt)) { local->pure_const_state = IPA_NEITHER; if (dump_file) @@ -781,11 +780,10 @@ check_stmt (gimple_stmt_iterator *gsip, funct_state local, bool ipa) /* Look for loads and stores. */ walk_stmt_load_store_ops (stmt, local, - ipa ? check_ipa_load : check_load, - ipa ? check_ipa_store : check_store); + ipa ? check_ipa_load : check_load, + ipa ? check_ipa_store : check_store); - if (gimple_code (stmt) != GIMPLE_CALL - && stmt_could_throw_p (cfun, stmt)) + if (gimple_code (stmt) != GIMPLE_CALL && stmt_could_throw_p (cfun, stmt)) { if (cfun->can_throw_non_call_exceptions) { @@ -2310,7 +2308,7 @@ make_pass_warn_function_noreturn (gcc::context *ctxt) return new pass_warn_function_noreturn (ctxt); } -/* Simple local pass for pure const discovery reusing the analysis from +/* Simple local pass for nothrow discovery reusing the analysis from ipa_pure_const. This pass is effective when executed together with other optimization passes in early optimization pass queue. */ diff --git a/gcc/ipa-split.cc b/gcc/ipa-split.cc index 933ca16c9469..48f6a725ae8c 100644 --- a/gcc/ipa-split.cc +++ b/gcc/ipa-split.cc @@ -1400,6 +1400,15 @@ split_function (basic_block return_bb, class split_point *split_point, if (fndecl_built_in_p (node->decl)) set_decl_built_in_function (node->decl, NOT_BUILT_IN, 0); + /* Drop "clobber *this" attribute from first argument of the split + function if any. Code before that might be initializing the + members. */ + if (tree arg = DECL_ARGUMENTS (node->decl)) + if (lookup_attribute ("clobber *this", DECL_ATTRIBUTES (arg))) + DECL_ATTRIBUTES (arg) + = remove_attribute ("clobber *this", + copy_list (DECL_ATTRIBUTES (arg))); + /* If return_bb contains any clobbers that refer to SSA_NAMEs set in the split part, remove them. Also reset debug stmts that refer to SSA_NAMEs set in the split part. */ diff --git a/gcc/ipa.cc b/gcc/ipa.cc index 8a7b067a526a..dea22ea0b491 100644 --- a/gcc/ipa.cc +++ b/gcc/ipa.cc @@ -433,6 +433,17 @@ symbol_table::remove_unreachable_nodes (FILE *file) e, &first, &reachable); } } + + /* A reference to the default node implies use of all the other + versions (they get used in the function resolver made later + in multiple_target.cc) */ + cgraph_function_version_info *node_v = cnode->function_version (); + if (node_v && is_function_default_version (node->decl)) + for (cgraph_function_version_info *fvi = node_v->next; + fvi; + fvi = fvi->next) + enqueue_node (fvi->this_node, &first, &reachable); + for (e = cnode->callees; e; e = e->next_callee) { symtab_node *body = e->callee->function_symbol (); diff --git a/gcc/ira.cc b/gcc/ira.cc index 4eebc9c4c50f..3e15966558ed 100644 --- a/gcc/ira.cc +++ b/gcc/ira.cc @@ -4233,12 +4233,14 @@ setup_reg_equiv (void) && REGNO (SET_SRC (set)) == (unsigned int) i); x = SET_DEST (set); } - if (! function_invariant_p (x) + /* If PIC is enabled and the equiv is not a LEGITIMATE_PIC_OPERAND, + we can't use it. */ + if (! CONSTANT_P (x) || ! flag_pic /* A function invariant is often CONSTANT_P but may include a register. We promise to only pass CONSTANT_P objects to LEGITIMATE_PIC_OPERAND_P. */ - || (CONSTANT_P (x) && LEGITIMATE_PIC_OPERAND_P (x))) + || LEGITIMATE_PIC_OPERAND_P (x)) { /* It can happen that a REG_EQUIV note contains a MEM that is not a legitimate memory operand. As later diff --git a/gcc/jit/ChangeLog b/gcc/jit/ChangeLog index fc42e5af841a..1577ea06aac5 100644 --- a/gcc/jit/ChangeLog +++ b/gcc/jit/ChangeLog @@ -1,3 +1,41 @@ +2025-10-08 Antoni Boucher + + PR jit/112466 + * Make-lang.in (JIT_OBJS): New variable. + * jit-playback.cc (replay): Include jit-target.h and initialize + target. + * jit-playback.h (class populate_target_info): New class. + * jit-recording.cc (recording::context::populate_target_info): New + method. + * jit-recording.h (recording::context::populate_target_info): New + method. + (recording::context::m_populated_target_info): New field. + * libgccjit.cc: Include jit-target.h. + (struct gcc_jit_target_info): New struct. + (gcc_jit_context_get_target_info, gcc_jit_target_info_release, + gcc_jit_target_info_cpu_supports, gcc_jit_target_info_arch, + gcc_jit_target_info_supports_target_dependent_type): New functions. + * libgccjit.h (gcc_jit_context_get_target_info, + gcc_jit_target_info_release, gcc_jit_target_info_cpu_supports, + gcc_jit_target_info_arch, + gcc_jit_target_info_supports_target_dependent_type): + New functions. + * libgccjit.map (LIBGCCJIT_ABI_35): New ABI tag. + * docs/topics/compilation.rst: Add documentation for the + functions gcc_jit_context_get_target_info, gcc_jit_target_info_release, + gcc_jit_target_info_cpu_supports, gcc_jit_target_info_arch, + gcc_jit_target_info_supports_target_dependent_type. + * docs/topics/compatibility.rst (LIBGCCJIT_ABI_35): New ABI tag. + * jit-target-def.h: New file. + * jit-target.cc: New file. + * jit-target.def: New file. + * jit-target.h: New file. + +2025-10-07 Jonathan Wakely + + * docs/_build/texinfo/libgccjit.texi: Fix spelling. + * docs/internals/index.rst: Likewise. + 2025-08-13 David Malcolm PR jit/121516 diff --git a/gcc/jit/Make-lang.in b/gcc/jit/Make-lang.in index 59afe264a856..0429137d694d 100644 --- a/gcc/jit/Make-lang.in +++ b/gcc/jit/Make-lang.in @@ -130,7 +130,7 @@ jit.serial = $(LIBGCCJIT_FILENAME) # Tell GNU make to ignore these if they exist. .PHONY: jit -jit_OBJS = attribs.o \ +JIT_OBJS = attribs.o \ jit/dummy-frontend.o \ jit/libgccjit.o \ jit/jit-logging.o \ @@ -139,13 +139,17 @@ jit_OBJS = attribs.o \ jit/jit-result.o \ jit/jit-tempdir.o \ jit/jit-builtins.o \ + jit/jit-target.o \ jit/jit-spec.o \ gcc.o ifneq (,$(findstring mingw,$(target))) -jit_OBJS += jit/jit-w32.o +JIT_OBJS += jit/jit-w32.o endif +# All language-specific object files for jit. +jit_OBJS = $(JIT_OBJS) $(JIT_TARGET_OBJS) + # Use strict warnings for this front end. jit-warn = $(STRICT_WARN) diff --git a/gcc/jit/docs/_build/texinfo/libgccjit.texi b/gcc/jit/docs/_build/texinfo/libgccjit.texi index 487c57118148..5852070153a5 100644 --- a/gcc/jit/docs/_build/texinfo/libgccjit.texi +++ b/gcc/jit/docs/_build/texinfo/libgccjit.texi @@ -15740,7 +15740,7 @@ The jit testsuite detects if @code{RUN_UNDER_VALGRIND} is present in the environment (with any value). If it is present, it runs the test client code under valgrind@footnote{https://valgrind.org}, -specifcally, the default +specifically, the default memcheck@footnote{https://valgrind.org/docs/manual/mc-manual.html} tool with --leak-check=full@footnote{https://valgrind.org/docs/manual/mc-manual.html#opt.leak-check}. diff --git a/gcc/jit/docs/internals/index.rst b/gcc/jit/docs/internals/index.rst index 36dd5391ca6a..50efebda13b4 100644 --- a/gcc/jit/docs/internals/index.rst +++ b/gcc/jit/docs/internals/index.rst @@ -137,7 +137,7 @@ Running under valgrind The jit testsuite detects if :envvar:`RUN_UNDER_VALGRIND` is present in the environment (with any value). If it is present, it runs the test client code under `valgrind `_, -specifcally, the default +specifically, the default `memcheck `_ tool with `--leak-check=full diff --git a/gcc/jit/docs/topics/compatibility.rst b/gcc/jit/docs/topics/compatibility.rst index 1c4b81bfff1a..19be33eb4b50 100644 --- a/gcc/jit/docs/topics/compatibility.rst +++ b/gcc/jit/docs/topics/compatibility.rst @@ -453,3 +453,16 @@ temporary variable: ``LIBGCCJIT_ABI_34`` covers the addition of * :func:`gcc_jit_context_set_output_ident` + +.. _LIBGCCJIT_ABI_35: + +``LIBGCCJIT_ABI_35`` +-------------------- +``LIBGCCJIT_ABI_35`` covers the addition of functions to query the target +information: + + * :func:`gcc_jit_context_get_target_info` + * :func:`gcc_jit_target_info_release` + * :func:`gcc_jit_target_info_cpu_supports` + * :func:`gcc_jit_target_info_arch` + * :func:`gcc_jit_target_info_supports_target_dependent_type` diff --git a/gcc/jit/docs/topics/compilation.rst b/gcc/jit/docs/topics/compilation.rst index 3d3a9ab4db33..80c80af510d2 100644 --- a/gcc/jit/docs/topics/compilation.rst +++ b/gcc/jit/docs/topics/compilation.rst @@ -199,3 +199,59 @@ The available kinds of output are: .. c:macro:: GCC_JIT_OUTPUT_KIND_EXECUTABLE Compile the context to an executable. + +Getting information about a target +********************************** + +You can query the target information by using the following API: + +.. function:: gcc_jit_target_info * \ + gcc_jit_context_get_target_info (gcc_jit_context *ctxt) + + Compute the information about a target. + + If the result is non-NULL, the caller becomes responsible for + calling :func:`gcc_jit_target_info_release` on it once they're done + with it. + +.. function:: void \ + gcc_jit_target_info_release (gcc_jit_target_info *info) + + This function releases all resources associated with the given target info. + +.. function:: int \ + gcc_jit_target_info_cpu_supports (gcc_jit_target_info *info, + const char *feature) + + Check if the specified target INFO supports the cpu FEATURE. + +.. function:: const char * \ + gcc_jit_target_info_arch (gcc_jit_target_info *info) + + Get the architecture of the currently running CPU, e.g. the value of -march + equivalent to -march=native. Ex.: znver3 + + The underlying buffer is only valid until the gcc_jit_target_info is + released. + +.. function:: int \ + gcc_jit_target_info_supports_target_dependent_type (gcc_jit_target_info *info, + enum gcc_jit_types type) + + Check if the specified target INFO supports target-dependent types like + 128-bit integers. + + The API entrypoints relating to the target info: + + * :c:func:`gcc_jit_context_get_target_info` + * :c:func:`gcc_jit_target_info_release` + * :c:func:`gcc_jit_target_info_cpu_supports` + * :c:func:`gcc_jit_target_info_arch` + * :c:func:`gcc_jit_target_info_supports_target_dependent_type` + + were added in :ref:`LIBGCCJIT_ABI_35`; you can test for their presence + using + + .. code-block:: c + + #ifdef LIBGCCJIT_HAVE_TARGET_INFO_API diff --git a/gcc/jit/jit-playback.cc b/gcc/jit/jit-playback.cc index 4473d8b55521..291ddeb2cca2 100644 --- a/gcc/jit/jit-playback.cc +++ b/gcc/jit/jit-playback.cc @@ -50,6 +50,7 @@ along with GCC; see the file COPYING3. If not see #include "jit-result.h" #include "jit-builtins.h" #include "jit-tempdir.h" +#include "jit-target.h" #ifdef _WIN32 #include "jit-w32.h" @@ -3605,6 +3606,7 @@ replay () JIT_LOG_SCOPE (get_logger ()); init_types (); + jit_target_init (); /* Replay the recorded events: */ timevar_push (TV_JIT_REPLAY); diff --git a/gcc/jit/jit-playback.h b/gcc/jit/jit-playback.h index b0625dca71f1..07dab6fa3895 100644 --- a/gcc/jit/jit-playback.h +++ b/gcc/jit/jit-playback.h @@ -29,6 +29,7 @@ along with GCC; see the file COPYING3. If not see #include "varasm.h" #include "jit-recording.h" +#include "jit-target.h" namespace diagnostics { @@ -57,9 +58,10 @@ set_variable_string_attribute ( /* playback::context is an abstract base class. - The two concrete subclasses are: + The three concrete subclasses are: - playback::compile_to_memory - - playback::compile_to_file. */ + - playback::compile_to_file. + - playback::populate_target_info */ class context : public log_user { @@ -326,6 +328,18 @@ class context : public log_user void add_top_level_asm (const char *asm_stmts); + target_info *get_target_info () + { + return &m_target_info; + } + + target_info *move_target_info () + { + target_info *info = new target_info {std::move (m_target_info)}; + m_target_info = target_info{}; + return info; + } + private: void dump_generated_code (); @@ -429,6 +443,8 @@ class context : public log_user auto_vec m_source_files; auto_vec > m_cached_locations; + + target_info m_target_info; }; class compile_to_memory : public context @@ -461,6 +477,18 @@ class compile_to_file : public context const char *m_output_path; }; +class populate_target_info : public context +{ + public: + populate_target_info (recording::context *ctxt) : context (ctxt) + { + } + + void postprocess (const char *) final override + { + } +}; + /* A temporary wrapper object. These objects are (mostly) only valid during replay. diff --git a/gcc/jit/jit-recording.cc b/gcc/jit/jit-recording.cc index 8da3cb059156..2f4ecc318251 100644 --- a/gcc/jit/jit-recording.cc +++ b/gcc/jit/jit-recording.cc @@ -1629,6 +1629,13 @@ recording::context::enable_dump (const char *dumpname, result * recording::context::compile () { + if (m_populated_target_info) + { + add_error (NULL, + "cannot compile after calling gcc_jit_context_get_target_info"); + return NULL; + } + JIT_LOG_SCOPE (get_logger ()); log_all_options (); @@ -1659,6 +1666,13 @@ void recording::context::compile_to_file (enum gcc_jit_output_kind output_kind, const char *output_path) { + if (m_populated_target_info) + { + add_error (NULL, + "cannot compile after calling gcc_jit_context_get_target_info"); + return; + } + JIT_LOG_SCOPE (get_logger ()); log_all_options (); @@ -1677,6 +1691,28 @@ recording::context::compile_to_file (enum gcc_jit_output_kind output_kind, replayer.compile (); } +void +recording::context::populate_target_info () +{ + JIT_LOG_SCOPE (get_logger ()); + + log_all_options (); + + if (errors_occurred ()) + return; + + add_driver_option ("-fsyntax-only"); + m_populated_target_info = true; + + /* Set up a populate_target_info playback context. */ + ::gcc::jit::playback::populate_target_info replayer (this); + + /* Use it. */ + replayer.compile (); + + m_target_info = replayer.move_target_info (); +} + /* Format the given error using printf's conventions, print it to stderr, and add it to the context. */ diff --git a/gcc/jit/jit-recording.h b/gcc/jit/jit-recording.h index 0ac9245c2df5..4d41faa0446a 100644 --- a/gcc/jit/jit-recording.h +++ b/gcc/jit/jit-recording.h @@ -23,6 +23,7 @@ along with GCC; see the file COPYING3. If not see #include "jit-common.h" #include "jit-logging.h" +#include "jit-target.h" #include "libgccjit.h" #include @@ -328,6 +329,16 @@ class context : public log_user compile_to_file (enum gcc_jit_output_kind output_kind, const char *output_path); + void + populate_target_info (); + + target_info *move_target_info () + { + target_info *info = m_target_info; + m_target_info = nullptr; + return info; + } + void add_error (location *loc, const char *fmt, ...) GNU_PRINTF(3, 4); @@ -412,7 +423,11 @@ class context : public log_user type *m_basic_types[NUM_GCC_JIT_TYPES]; type *m_FILE_type; + bool m_populated_target_info = false; + builtins_manager *m_builtins_manager; // lazily created + + target_info *m_target_info; }; diff --git a/gcc/jit/jit-target-def.h b/gcc/jit/jit-target-def.h new file mode 100644 index 000000000000..dcb342fafe7d --- /dev/null +++ b/gcc/jit/jit-target-def.h @@ -0,0 +1,20 @@ +/* jit-target-def.h -- Default initializers for jit target hooks. + 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, 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; see the file COPYING3. If not see + . */ + +#include "jit/jit-target-hooks-def.h" +#include "tree.h" +#include "hooks.h" diff --git a/gcc/jit/jit-target.cc b/gcc/jit/jit-target.cc new file mode 100644 index 000000000000..40b47971c44c --- /dev/null +++ b/gcc/jit/jit-target.cc @@ -0,0 +1,96 @@ +/* jit-target.cc -- Target interface for the jit front end. + Copyright (C) 2023 Free Software Foundation, Inc. + +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 +. */ + +#define INCLUDE_STRING +#define INCLUDE_ALGORITHM +#include "config.h" +#include "system.h" +#include "coretypes.h" + +#include "tree.h" +#include "memmodel.h" +#include "fold-const.h" +#include "diagnostic.h" +#include "stor-layout.h" +#include "tm.h" +#include "tm_p.h" +#include "target.h" +#include "calls.h" + +#include "jit-playback.h" +#include "jit-target.h" + +/* Initialize all variables of the Target structure. */ + +void +jit_target_init () +{ + /* Initialize target info tables, the keys required by the language are added + last, so that the CPU handler can override. */ + targetjitm.jit_register_cpu_target_info (); +} + +/* Add a target info key:value to JIT_TARGET_INFO for use by + target_info::has_target_value (). */ + +void +jit_add_target_info (const char *key, const char *value) +{ + gcc_assert (gcc::jit::active_playback_ctxt != NULL); + target_info* jit_target_info + = gcc::jit::active_playback_ctxt->get_target_info (); + if (jit_target_info->m_info.find (key) == jit_target_info->m_info.end ()) + jit_target_info->m_info.insert ({key, {value}}); + else + jit_target_info->m_info[key].insert (value); +} + +void +jit_target_set_arch (std::string const& arch) +{ + gcc_assert (gcc::jit::active_playback_ctxt != NULL); + target_info* jit_target_info + = gcc::jit::active_playback_ctxt->get_target_info (); + jit_target_info->m_arch = arch; +} + +void +jit_target_add_supported_target_dependent_type (enum gcc_jit_types type_) +{ + gcc_assert (gcc::jit::active_playback_ctxt != NULL); + target_info* jit_target_info + = gcc::jit::active_playback_ctxt->get_target_info (); + jit_target_info->m_supported_target_dependent_types.insert (type_); +} + +target_info * +jit_get_target_info () +{ + gcc_assert (gcc::jit::active_playback_ctxt != NULL); + target_info* info = gcc::jit::active_playback_ctxt->move_target_info (); + return info; +} + +bool +target_info::has_target_value (const char *key, const char *value) +{ + if (m_info.find (key) == m_info.end ()) + return false; + + auto& set = m_info[key]; + return set.find (value) != set.end (); +} diff --git a/gcc/jit/jit-target.def b/gcc/jit/jit-target.def new file mode 100644 index 000000000000..5e657eb4e137 --- /dev/null +++ b/gcc/jit/jit-target.def @@ -0,0 +1,42 @@ +/* jit-target.def -- Target hook definitions for the jit front end. + 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, 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; see the file COPYING3. If not see + . */ + +/* See target-hooks-macros.h for details of macros that should be + provided by the including file, and how to use them here. */ + +#include "target-hooks-macros.h" + +#undef HOOK_TYPE +#define HOOK_TYPE "JIT Target Hook" + +HOOK_VECTOR (TARGETJITM_INITIALIZER, gcc_targetjitm) + +#undef HOOK_PREFIX +#define HOOK_PREFIX "TARGET_" + +/* getTargetInfo keys relating to the target CPU. */ +DEFHOOK +(jit_register_cpu_target_info, + "Register all target information keys relating to the target CPU using the\n\ +function @code{jit_add_target_info}, which takes a key and a value. The\n\ +keys added by this hook are made available at compile time by calling\n\ +get_target_info.", + void, (void), + hook_void_void) + +/* Close the 'struct gcc_targetdm' definition. */ +HOOK_VECTOR_END (C90_EMPTY_HACK) diff --git a/gcc/jit/jit-target.h b/gcc/jit/jit-target.h new file mode 100644 index 000000000000..626ae8179ff1 --- /dev/null +++ b/gcc/jit/jit-target.h @@ -0,0 +1,75 @@ +/* jit-target.h -- Data structure definitions for target-specific jit behavior. + 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, 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; see the file COPYING3. If not see + . */ + +#ifndef GCC_JIT_TARGET_H +#define GCC_JIT_TARGET_H + +#define DEFHOOKPOD(NAME, DOC, TYPE, INIT) TYPE NAME; +#define DEFHOOK(NAME, DOC, TYPE, PARAMS, INIT) TYPE (* NAME) PARAMS; +#define DEFHOOK_UNDOC DEFHOOK +#define HOOKSTRUCT(FRAGMENT) FRAGMENT + +#include "jit-target.def" +#include "libgccjit.h" + +#include +#include + +static size_t hash_cstr (const char *s) +{ + const size_t seed = 0; + return std::_Hash_bytes (s, std::strlen (s), seed); +} + +struct CStringHash { + size_t operator () (const char* const &string) const { + auto res = hash_cstr (string); + return res; + } +}; + +struct CStringEqual { + bool + operator () (const char *const &string1, const char *const &string2) const + { + return strcmp (string1, string2) == 0; + } +}; + +struct target_info { + public: + bool has_target_value (const char *key, const char *value); + + std::unordered_map, + CStringHash, CStringEqual> + m_info; + std::string m_arch; + std::unordered_set m_supported_target_dependent_types; +}; + +/* Each target can provide their own. */ +extern struct gcc_targetjitm targetjitm; + +extern void jit_target_init (); +extern void jit_target_set_arch (std::string const& arch); +extern void +jit_target_add_supported_target_dependent_type (enum gcc_jit_types type_); +extern void jit_add_target_info (const char *key, const char *value); +extern target_info * jit_get_target_info (); + +#endif /* GCC_JIT_TARGET_H */ diff --git a/gcc/jit/libgccjit.cc b/gcc/jit/libgccjit.cc index 725a5d53d06f..33369447074b 100644 --- a/gcc/jit/libgccjit.cc +++ b/gcc/jit/libgccjit.cc @@ -20,6 +20,7 @@ along with GCC; see the file COPYING3. If not see #include "config.h" #define INCLUDE_MUTEX +#define INCLUDE_STRING #include "system.h" #include "coretypes.h" #include "timevar.h" @@ -29,6 +30,7 @@ along with GCC; see the file COPYING3. If not see #include "libgccjit.h" #include "jit-recording.h" #include "jit-result.h" +#include "jit-target.h" /* The opaque types used by the public API are actually subclasses of the gcc::jit::recording classes. */ @@ -44,6 +46,10 @@ struct gcc_jit_result : public gcc::jit::result { }; +struct gcc_jit_target_info : public target_info +{ +}; + struct gcc_jit_object : public gcc::jit::recording::memento { }; @@ -3900,6 +3906,51 @@ gcc_jit_context_set_output_ident (gcc_jit_context *ctxt, ctxt->set_output_ident (output_ident); } +gcc_jit_target_info * +gcc_jit_context_get_target_info (gcc_jit_context *ctxt) +{ + RETURN_NULL_IF_FAIL (ctxt, NULL, NULL, "NULL context"); + JIT_LOG_FUNC (ctxt->get_logger ()); + + ctxt->log ("populate_target_info of ctxt: %p", (void *)ctxt); + + ctxt->populate_target_info (); + + return (gcc_jit_target_info*) ctxt->move_target_info (); +} + +void +gcc_jit_target_info_release (gcc_jit_target_info *info) +{ + RETURN_IF_FAIL (info, NULL, NULL, "NULL info"); + delete info; +} + +int +gcc_jit_target_info_cpu_supports (gcc_jit_target_info *info, + const char *feature) +{ + RETURN_VAL_IF_FAIL (info, 0, NULL, NULL, "NULL info"); + RETURN_VAL_IF_FAIL (feature, 0, NULL, NULL, "NULL feature"); + return info->has_target_value ("target_feature", feature); +} + +const char * +gcc_jit_target_info_arch (gcc_jit_target_info *info) +{ + RETURN_NULL_IF_FAIL (info, NULL, NULL, "NULL info"); + return info->m_arch.c_str (); +} + +int +gcc_jit_target_info_supports_target_dependent_type (gcc_jit_target_info *info, + enum gcc_jit_types type) +{ + RETURN_VAL_IF_FAIL (info, 0, NULL, NULL, "NULL info"); + return info->m_supported_target_dependent_types.find (type) + != info->m_supported_target_dependent_types.end (); +} + /* Public entrypoint. See description in libgccjit.h. After error-checking, the real work is done by the diff --git a/gcc/jit/libgccjit.h b/gcc/jit/libgccjit.h index bc9fcaee2453..a58551007931 100644 --- a/gcc/jit/libgccjit.h +++ b/gcc/jit/libgccjit.h @@ -57,6 +57,9 @@ typedef struct gcc_jit_context gcc_jit_context; /* A gcc_jit_result encapsulates the result of an in-memory compilation. */ typedef struct gcc_jit_result gcc_jit_result; +/* A gcc_jit_target_info encapsulates the target info. */ +typedef struct gcc_jit_target_info gcc_jit_target_info; + /* An object created within a context. Such objects are automatically cleaned up when the context is released. @@ -2131,6 +2134,60 @@ gcc_jit_function_add_string_attribute (gcc_jit_function *func, enum gcc_jit_fn_attribute attribute, const char* value); +/* Create a gcc_jit_target_info instance. + + This API entrypoint was added in LIBGCCJIT_ABI_35; you can test for its + presence using + #ifdef LIBGCCJIT_HAVE_TARGET_INFO_API +*/ +extern gcc_jit_target_info * +gcc_jit_context_get_target_info (gcc_jit_context *ctxt); + +/* Release a gcc_jit_target_info instance. + + This API entrypoint was added in LIBGCCJIT_ABI_35; you can test for its + presence using + #ifdef LIBGCCJIT_HAVE_TARGET_INFO_API +*/ +extern void +gcc_jit_target_info_release (gcc_jit_target_info *info); + +/* Returns non-zero if FEATURE is supported by the specified target. + + This API entrypoint was added in LIBGCCJIT_ABI_35; you can test for its + presence using + #ifdef LIBGCCJIT_HAVE_TARGET_INFO_API +*/ +extern int +gcc_jit_target_info_cpu_supports (gcc_jit_target_info *info, + const char *feature); + +/* Returns the ARCH of the currently running CPU. + + This API entrypoint was added in LIBGCCJIT_ABI_35; you can test for its + presence using + #ifdef LIBGCCJIT_HAVE_TARGET_INFO_API +*/ +extern const char * +gcc_jit_target_info_arch (gcc_jit_target_info *info); + +/* Returns non-zero if the target natively supports the target-dependent type + TYPE. + + This API entrypoint was added in LIBGCCJIT_ABI_35; you can test for its + presence using + #ifdef LIBGCCJIT_HAVE_TARGET_INFO_API +*/ +extern int +gcc_jit_target_info_supports_target_dependent_type (gcc_jit_target_info *info, + enum gcc_jit_types type); + +/* The target info API was added in LIBGCCJIT_ABI_35; you can test for its + presence using + #ifdef LIBGCCJIT_HAVE_TARGET_INFO_API +*/ +#define LIBGCCJIT_HAVE_TARGET_INFO_API + extern void gcc_jit_function_add_integer_array_attribute ( gcc_jit_function *func, diff --git a/gcc/jit/libgccjit.map b/gcc/jit/libgccjit.map index fcb6e6f2a55d..4662ca4b3c02 100644 --- a/gcc/jit/libgccjit.map +++ b/gcc/jit/libgccjit.map @@ -325,3 +325,12 @@ LIBGCCJIT_ABI_34 { global: gcc_jit_context_set_output_ident; } LIBGCCJIT_ABI_33; + +LIBGCCJIT_ABI_35 { + global: + gcc_jit_context_get_target_info; + gcc_jit_target_info_release; + gcc_jit_target_info_cpu_supports; + gcc_jit_target_info_arch; + gcc_jit_target_info_supports_target_dependent_type; +} LIBGCCJIT_ABI_34; diff --git a/gcc/langhooks.cc b/gcc/langhooks.cc index 20d27a6d7fd0..6431d40af048 100644 --- a/gcc/langhooks.cc +++ b/gcc/langhooks.cc @@ -18,6 +18,7 @@ You should have received a copy of the GNU General Public License along with GCC; see the file COPYING3. If not see . */ +#define INCLUDE_VECTOR #include "config.h" #include "system.h" #include "coretypes.h" diff --git a/gcc/libgdiagnostics.cc b/gcc/libgdiagnostics.cc index d87dd46cb5c1..46714ff2aa5e 100644 --- a/gcc/libgdiagnostics.cc +++ b/gcc/libgdiagnostics.cc @@ -37,6 +37,7 @@ along with GCC; see the file COPYING3. If not see #include "diagnostics/digraphs.h" #include "diagnostics/state-graphs.h" #include "diagnostics/logical-locations.h" +#include "diagnostics/dumping.h" #include "diagnostics/changes.h" #include "libgdiagnostics.h" #include "libgdiagnostics-private.h" @@ -478,6 +479,12 @@ class impl_logical_location_manager return key::from_ptr (ptr); } + void dump (FILE *outfile, int indent) const final override + { + diagnostics::dumping::emit_heading + (outfile, indent, "impl_logical_location_manager"); + } + const char *get_short_name (key k) const final override { if (auto loc = ptr_from_key (k)) @@ -2474,9 +2481,11 @@ struct spec_context : public diagnostics::output_spec::context { public: spec_context (const char *option_name, + const char *unparsed_spec, diagnostic_manager &affected_mgr, diagnostic_manager &control_mgr) - : context (option_name, affected_mgr.get_line_table ()), + : context (option_name, unparsed_spec, nullptr, + affected_mgr.get_line_table ()), m_control_mgr (control_mgr) {} @@ -2512,8 +2521,8 @@ diagnostic_manager_add_sink_from_spec (diagnostic_manager *affected_mgr, FAIL_IF_NULL (spec); FAIL_IF_NULL (control_mgr); - spec_context ctxt (option_name, *affected_mgr, *control_mgr); - auto inner_sink = ctxt.parse_and_make_sink (spec, affected_mgr->get_dc ()); + spec_context ctxt (option_name, spec, *affected_mgr, *control_mgr); + auto inner_sink = ctxt.parse_and_make_sink (affected_mgr->get_dc ()); if (!inner_sink) return -1; affected_mgr->get_dc ().add_sink (std::move (inner_sink)); diff --git a/gcc/lra-constraints.cc b/gcc/lra-constraints.cc index 83f8fda3b525..b15299791745 100644 --- a/gcc/lra-constraints.cc +++ b/gcc/lra-constraints.cc @@ -542,6 +542,7 @@ get_equiv (rtx x) rtx res; if (! REG_P (x) || (regno = REGNO (x)) < FIRST_PSEUDO_REGISTER + || regno >= ira_reg_equiv_len || ! ira_reg_equiv[regno].defined_p || ! ira_reg_equiv[regno].profitable_p || lra_get_regno_hard_regno (regno) >= 0) @@ -4929,7 +4930,10 @@ curr_insn_transform (bool check_only_p) if (asm_noperands (PATTERN (curr_insn)) >= 0 && ++curr_id->asm_reloads_num >= FIRST_PSEUDO_REGISTER) /* Most probably there are no enough registers to satisfy asm insn: */ - lra_asm_insn_error (curr_insn); + { + lra_asm_insn_error (curr_insn); + return change_p; + } } if (goal_alt_out_sp_reload_p) { diff --git a/gcc/lto/ChangeLog b/gcc/lto/ChangeLog index 4da9ca313532..55e08838fb4f 100644 --- a/gcc/lto/ChangeLog +++ b/gcc/lto/ChangeLog @@ -1,3 +1,8 @@ +2025-10-01 Jan Hubicka + + * Make-lang.in: Add lto_FDAS; enable FDA collection + (create_fdas_for_lto1): Be sure that build fails if create_gcov fails. + 2025-04-15 Kyrylo Tkachov * lto-partition.cc (add_node_references_to_partition): Define. diff --git a/gcc/lto/Make-lang.in b/gcc/lto/Make-lang.in index 553e6ddd0d2b..2af8bba44ca9 100644 --- a/gcc/lto/Make-lang.in +++ b/gcc/lto/Make-lang.in @@ -26,18 +26,15 @@ LTO_DUMP_INSTALL_NAME := $(shell echo lto-dump|sed '$(program_transform_name)') # The LTO-specific object files inclued in $(LTO_EXE). LTO_OBJS = lto/lto-lang.o lto/lto.o lto/lto-object.o attribs.o lto/lto-partition.o lto/lto-symtab.o lto/lto-common.o lto_OBJS = $(LTO_OBJS) +lto_FDAS = lto1.fda LTO_DUMP_OBJS = lto/lto-lang.o lto/lto-object.o attribs.o lto/lto-partition.o lto/lto-symtab.o lto/lto-dump.o lto/lto-common.o lto_dump_OBJS = $(LTO_DUMP_OBJS) -# this is only useful in a LTO bootstrap, but this does not work right -# now. Should reenable after this is fixed, but only when LTO bootstrap -# is enabled. - -#ifeq ($(if $(wildcard ../stage_current),$(shell cat \ -# ../stage_current)),stageautofeedback) -#$(LTO_OBJS): CFLAGS += -fauto-profile=lto1.fda -#$(LTO_OBJS): lto1.fda -#endif +ifeq ($(if $(wildcard ../stage_current),$(shell cat \ + ../stage_current)),stageautofeedback) +$(LTO_OBJS): CFLAGS += -fauto-profile=lto1.fda +$(LTO_OBJS): lto1.fda +endif # Rules @@ -118,7 +115,7 @@ create_fdas_for_lto1: ../stage1-gcc/lto1$(exeext) ../prev-gcc/$(PERF_DATA) echo $$perf_path; \ if [ -f $$perf_path ]; then \ profile_name=lto1_$$component_in_prev.fda; \ - $(CREATE_GCOV) -binary ../stage1-gcc/lto1$(exeext) -gcov $$profile_name -profile $$perf_path -gcov_version 2; \ + $(CREATE_GCOV) -binary ../stage1-gcc/lto1$(exeext) -gcov $$profile_name -profile $$perf_path -gcov_version 2 || exit 1; \ fi; \ done; @@ -128,7 +125,7 @@ create_fdas_for_lto1: ../stage1-gcc/lto1$(exeext) ../prev-gcc/$(PERF_DATA) echo $$perf_path; \ if [ -f $$perf_path ]; then \ profile_name=lto1_$$component_in_prev_target.fda; \ - $(CREATE_GCOV) -binary ../prev-gcc/lto1$(exeext) -gcov $$profile_name -profile $$perf_path -gcov_version 2; \ + $(CREATE_GCOV) -binary ../prev-gcc/lto1$(exeext) -gcov $$profile_name -profile $$perf_path -gcov_version 2 || exit 1; \ fi; \ done; diff --git a/gcc/m2/ChangeLog b/gcc/m2/ChangeLog index f63381dd620b..60c19b663cf2 100644 --- a/gcc/m2/ChangeLog +++ b/gcc/m2/ChangeLog @@ -1,3 +1,383 @@ +2025-10-02 Gaius Mulley + + PR modula2/122009 + * gm2-compiler/M2GCCDeclare.mod (PrintKnown): Remove. + * gm2-gcc/m2type.cc (m2type_BuildEnumerator): Add const modifier. + * gm2-gcc/m2type.def (BuildEnumerator): Use ConstCharStar type. + * gm2-gcc/m2type.h (m2type_BuildEnumerator): Add const modifier. + * gm2-libs/M2WIDESET.mod (ShiftLeftByteBit): Rename variable to + as toIdx. + Rename variable from as fromIdx. + (ShiftRightByteBit): Rename variable to as toIdx. + Rename variable from as fromIdx. + (RotateLeft): Rename variable to as toIdx. + Rename variable from as fromIdx. + (ArithShiftLeftBit): Rename set to setb. + (ArithShiftRightBit): Rename set to setb. + +2025-10-01 Gaius Mulley + + PR modula2/122009 + * pge-boot/Gldtoa.cc (ldtoa_ldtoa): Change int to bool for + parameter sign. + +2025-09-21 Mark Wielaard + + * lang.opt.urls: Regenerate. + +2025-09-20 Gaius Mulley + + PR modula2/122009 + * gm2-compiler/M2GenGCC.mod (FromM2WIDESETImport): Assign + sym to NulSym. + (CodeMakeAdr): Remove fourth parameter to BuildLogicalOrAddress. + (FoldMakeAdr): Ditto. + * gm2-compiler/M2Quads.mod (BuildAssignmentBoolean): Remove + unused parameter checkTypes. + (doBuildAssignment): Remove checkTypes parameter when calling + BuildAssignmentBoolean. + * gm2-gcc/m2expr.def (BuildLogicalOrAddress): Remove + needconvert parameter. + * gm2-gcc/m2statement.def (IfExprJump): Change label type + to CharStar. + * gm2-gcc/m2type.cc (m2type_BuildEnumerator): Remove const. + * gm2-gcc/m2type.h (m2type_BuildEnumerator): Ditto. + +2025-09-19 Gaius Mulley + + PR modula2/121856 + * Make-lang.in (GM2-LIBS-BOOT-DEFS): Add M2Diagnostic.def. + Add Selective.def. + (GM2-LIBS-BOOT-MODS): Add M2Diagnostic.mod. + (GM2-LIBS-BOOT-C): Add Selective.c. + (GM2-LIBS-DEFS): Add Selective.def. + (GM2-LIBS-MODS): Add M2Diagnostic.mod. + (MC-LIB-MODS): Add M2Diagnostic.mod. + (m2/gm2-libs-boot/Selective.o): New rule. + (BUILD-PGE-O): Add m2/pge-boot/GM2Diagnostic.o. + Add m2/pge-boot/GM2Diagnostic.o. + Add m2/pge-boot/GStringConvert.o. + Add m2/pge-boot/Gdtoa.o. + Add m2/pge-boot/Gldtoa.o. + * Make-maintainer.in (PPG-LIB-DEFS): Add M2Diagnostic.def. + Add StringConvert.def. + (PPG-LIB-MODS): Add M2Diagnostic.mod. + Add StringConvert.mod. + (PGE-DEF): Add M2Diagnostic.def. + (PGE-DEPS): Add GM2Diagnostic.cc. + Add GM2Diagnostic.h. + * gm2-compiler/FifoQueue.def (PutSetIntoFifoQueue): New + procedure. + (GetSetFromFifoQueue): New procedure function. + * gm2-compiler/FifoQueue.mod (PutSetIntoFifoQueue): New + procedure. + (GetSetFromFifoQueue): New procedure function. + * gm2-compiler/M2ALU.def (KillValue): New procedure. + (PushSetTree): Rename parameter t to value. + (ConstructSetConstant): Rewrite comment. + * gm2-compiler/M2ALU.mod: Rewrite to use the new set type + and introduce memory diagnostics. + * gm2-compiler/M2Base.mod (InitBaseProcedures): Lookup M2WIDESET. + * gm2-compiler/M2CaseList.mod (CheckCaseBoundsResolved): Change + format specifier to allow the preceeding indefinite article to + have a n concatenated providing the following string substitute + begins with a vowel. + (checkTypes): Ditto. + * gm2-compiler/M2Check.mod (checkGenericUnboundedTyped): New + procedure function. + * gm2-compiler/M2Code.mod (OptimizationAnalysis): Replace with ... + (ResourceAnalysis): ... this. + * gm2-compiler/M2Comp.mod (PopulateResource): New procedure. + (compile): Call PopulateResource. + Call M2Diagnostic.Generate. + * gm2-compiler/M2GCCDeclare.mod: Rewrite for new set type. + * gm2-compiler/M2GenGCC.mod: Rewrite implementation for + becomes, incl, excl, and, or, not, xor for the new set type. + * gm2-compiler/M2MetaError.def: Extend comment documenting + the v format specifier. + * gm2-compiler/M2MetaError.mod (errorBlock): New field vowel. + (initErrorBlock): Initialize field vowel. + Reformat comments. + (pop): Call checkVowel. + (checkVowel): New procedure. + (isVowel): New procedure function. + (symDesc): Remove indefinite article. + (op): Set vowel field in case clause. + * gm2-compiler/M2Options.def (OptimizeSets): New global. + (TimeReport): Ditto. + (MemReport): Ditto. + (SetMemReport): New procedure. + (SetTimeReport): Ditto. + (SetWideset): Ditto. + (GetWideset): New procedure function. + * gm2-compiler/M2Options.mod (SetOptimizing): Assign + OptimizeSets depending upon the optimization level. + (SetMemReport): New procedure. + (SetTimeReport): Ditto. + (SetWideset): Ditto. + (GetWideset): New procedure function. + (OptimizeSets): Initialize to FALSE. + (TimeReport): Ditto. + (MemReport): Ditto. + * gm2-compiler/M2Quads.mod (M2Diagnostic): Import. + (QuadsMemDiag): New global variable. + (NewQuad): Bump QuadsMemDiag whenever a quad is allocated. + (BuildAssignmentBoolean): New procedure. + (doBuildAssignment): Ditto. + Add v to the format specifier. + (CheckCompatibleWithBecomes): Add v to the format specifier. + (CheckProcTypeAndProcedure): Ditto. + (BuildAddAdrFunction): Ditto. + (BuildSubAdrFunction): Ditto. + (BuildDifAdrFunction): Ditto. + (BuildDesignatorArrayStaticDynamic): Ditto. + (BuildDesignatorPointer): Ditto. + (CheckVariableOrConstantOrProcedure): Ditto. + (Init): Initialize QuadsMemDiag. + * gm2-compiler/M2Range.mod (CodeTypeAssign): Add v to the + format specifier. + * gm2-compiler/M2Scaffold.mod (DeclareScaffoldFunctions): + Generate more precise warning note. + * gm2-compiler/M2SymInit.mod (PrintSymInit): Add record + field warning. + * gm2-compiler/M2System.mod + (IsPseudoSystemFunctionConstExpression): Add TBitSize. + * gm2-compiler/NameKey.mod: Add MemDiagnostic code + commented out. + * gm2-compiler/P1SymBuild.mod (StartBuildProcedure): + Add v format specifier. + * gm2-compiler/P2SymBuild.mod (BuildFieldRecord): Ditto. + * gm2-compiler/P3Build.bnf (SetType): Reformat. + * gm2-compiler/PathName.def (Copyright): Added. + * gm2-compiler/PathName.mod: Remove blank line. + * gm2-compiler/SymbolConversion.mod (gdbhook): New procedure. + (BreakWhenSymBooked): Ditto. + (CheckBook): Ditto. + (Init): Rewrite. + * gm2-compiler/SymbolTable.def (GetSetArray): New procedure. + (PutSetArray): Ditto. + (MakeSetArray): New procedure function. + (PutSetInWord): New procedure. + (GetSetInWord): New procedure function. + (IsConstVar): Ditto. + * gm2-compiler/SymbolTable.mod (SymSet): SetInWord new field. + SetArray new field. + Align new field. + (SymMemDiag): New global variable. + (Init): Initialize SymMemDiag. + (IsConstVar): New procedure function. + (IsVariableSSA): Replace InternalError with Return FALSE. + (GetNthParamOrdered): Reimplement. + (GetNthParamAnyClosest): Ditto. + (GetOuterModuleScope): Ditto. + (MakeSet): Ditto. + (PutSetArray): New procedure. + (GetSetArray): New procedure function. + (MakeSetArray): Ditto. + (PutSetInWord): New procedure. + (GetSetInWord): New procedure function. + * gm2-gcc/init.cc (_M2_M2Diagnostic_init): Define + prototype. + (init_FrontEndInit):Call _M2_M2Diagnostic_init. + * gm2-gcc/m2block.cc (m2block_GetTotalConstants): New function. + (m2block_GetGlobalTypes): Ditto. + * gm2-gcc/m2block.def (GetTotalConstants): New procedure function. + (GetGlobalTypes): New procedure function. + * gm2-gcc/m2block.h (m2block_GetTotalConstants): New function + prototype. + (m2block_GetGlobalTypes): Ditto. + * gm2-gcc/m2convert.cc (converting_ISO_generic): Reimplement. + (m2convert_ToPIMByte): New function. + * gm2-gcc/m2convert.def (ToLoc): New procedure function. + (ToPIMByte): Ditto. + * gm2-gcc/m2convert.h (m2convert_ToPIMByte): Ditto. + * gm2-gcc/m2decl.h (m2decl_RememberVariables): Ditto. + * gm2-gcc/m2expr.cc (m2expr_BuildLogicalShift): Reimplement. + (m2expr_BuildLRotate): Ditto. + (m2expr_BuildLRLn): Ditto. + (m2expr_BuildLRRn): Ditto. + (m2expr_BuildLogicalRotate): Ditto. + (buildUnboundedArrayOf): Ditto. + (BuildIfBitInSetLower): New function. + (m2expr_BuildBinarySetDo): Reimplement. + (m2expr_BuildIfInSet): Ditto. + (m2expr_BuildIfNotInSet): New function. + (m2expr_Build4LogicalOr): Reimplement. + (m2expr_BuildSetNegate): Ditto. + (m2expr_BuildLogicalOrAddress): Ditto. + (m2expr_BuildLogicalOr): Ditto. + (m2expr_BuildLogicalAnd): Ditto. + (m2expr_BuildSymmetricDifference): Ditto. + (m2expr_BuildLogicalDifference): Ditto. + (boolean_enum_to_unsigned): Ditto. + (m2expr_BuildIsSuperset): Ditto. + (m2expr_BuildIsNotSuperset): Ditto. + (m2expr_BuildIsSubset): Ditto. + (m2expr_BuildIfBitInSetJump): Ditto. + (m2expr_BuildIfNotConstInVar): Ditto. + (m2expr_BuildIfVarInVar): Ditto. + (m2expr_BuildIfNotVarInVar): Remove. + (m2expr_BuildIfConstInVar): Remove. + (m2expr_BuildForeachWordInSetDoIfExpr): Ditto. + (m2expr_BuildBinaryForeachWordDo): Ditto. + (m2expr_BuildIfInRangeGoto): Reimplement. + (m2expr_BuildIfNotInRangeGoto): Ditto. + (m2expr_SetAndNarrow): Ditto. + (m2expr_GetBitsetZero): New function. + (m2expr_GetRValue): Ditto. + * gm2-gcc/m2expr.def (GetBitsetZero): New function. + (BuildSetNegate): Ditto. + (BuildLogicalOr): Reimplement. + (BuildLogicalAnd): Ditto. + (BuildSymmetricDifference): Ditto. + (BuildLogicalDifference): Ditto. + (BuildIfInSet): New procedure function. + (BuildIfNotInSet): Ditto. + (BuildEqualTo): Reimplement. + (BuildNotEqualTo): Ditto. + (BuildBinaryForeachWordDo): Remove. + (BuildBinarySetDo): Ditto. + (GetRValue): New procedure function. + * gm2-gcc/m2expr.h (m2expr_BuildBinaryForeachWordDo): Remove. + (m2expr_BuildForeachWordInSetDoIfExpr): Ditto. + (m2expr_BuildIfNotVarInVar): Ditto. + (m2expr_BuildIfVarInVar): Ditto. + (m2expr_BuildIfNotConstInVar): Ditto. + (m2expr_BuildIfConstInVar): Ditto. + (m2expr_BuildLogicalDifference): Reimplement. + (m2expr_BuildSymmetricDifference): Ditto. + (m2expr_BuildLogicalAnd): Ditto. + (m2expr_BuildLogicalOr): Ditto. + (m2expr_BuildLogicalOrAddress): Ditto. + (m2expr_BuildSetNegate): Ditto. + (m2expr_GetBitsetZero): New function. + (m2expr_GetRValue): Ditto. + (m2expr_BuildIfInSet): Ditto. + (m2expr_BuildIfNotInSet): Ditto. + * gm2-gcc/m2options.h (M2Options_SetTimeReport): New function. + (M2Options_SetMemReport): Ditto. + (M2Options_SetWideset): Ditto. + (M2Options_GetWideset): Ditto. + * gm2-gcc/m2pp.cc (m2pp_shiftrotate_expr): New function. + (m2pp_simple_expression): Ditto. + * gm2-gcc/m2statement.cc (m2statement_BuildStartFunctionCode): + Tidyup comments. + (m2statement_BuildEndFunctionCode): Ditto. + (m2statement_BuildPushFunctionContext): Ditto. + (copy_array): Ditto. + (CopyByField_Lower): Ditto. + (m2statement_BuildGoto): Ditto. + (m2statement_DeclareLabel): Ditto. + (m2statement_BuildParam): Ditto. + (nCount): Ditto. + (m2statement_BuildProcedureCallTree): Ditto. + (m2statement_BuildBuiltinCallTree): Ditto. + (m2statement_BuildFunctValue): Ditto. + (m2statement_BuildCall2): Ditto. + (m2statement_BuildCall3): Ditto. + (m2statement_BuildFunctionCallTree): Ditto. + (m2statement_SetLastFunction): Ditto. + (m2statement_SetParamList): Ditto. + (m2statement_GetLastFunction): Ditto. + (m2statement_GetParamList): Ditto. + (m2statement_GetCurrentFunction): Ditto. + (m2statement_GetParamTree): Ditto. + (m2statement_BuildTryFinally): Ditto. + (m2statement_BuildCleanUp): Ditto. + (m2statement_BuildUnaryForeachWordDo): Remove. + (m2statement_BuildExcludeVarConst): Ditto. + (m2statement_BuildExcludeVarVar): Ditto. + (m2statement_BuildIncludeVarConst): Ditto. + (m2statement_BuildIncludeVarVar): Ditto. + (m2statement_DoJump): Remove. + (m2statement_IfExprJump): New function. + (m2statement_IfBitInSetJump): Ditto. + * gm2-gcc/m2statement.def (DoJump): Remove. + (IfExprJump): New procedure function. + (BuildUnaryForeachWordDo): Remove. + (IfBitInSetJump): New procedure function. + * gm2-gcc/m2statement.h (m2statement_BuildForeachWordDo): Remove. + (m2statement_DoJump): Ditto. + (m2statement_IfExprJump): New function. + (m2statement_IfBitInSetJump): Ditto. + * gm2-gcc/m2treelib.cc (m2treelib_do_jump_if_bit): Reimplement. + (nCount): Replace with ... + (m2treelib_nCount): ... this. + (m2treelib_DoCall): Reimplement. + (m2treelib_get_rvalue): Remove. + * gm2-gcc/m2treelib.def (get_rvalue): Remove. + (nCount): New procedure function. + * gm2-gcc/m2treelib.h (m2treelib_get_rvalue): Remove. + (m2treelib_nCount): New function. + * gm2-gcc/m2type.cc (constructor_elements): Change type to vec. + (m2type_BuildEndArrayType): Reformat. + (build_m2_type_node_by_array): Ditto. + (m2type_GetBooleanEnumList): New procedure function. + (m2type_BuildEnumerator): Add const to char *. + (m2type_BuildSetConstructorElement): Reimplement. + (m2type_BuildEndSetConstructor): Ditto. + (build_record_constructor): New function. + (m2type_BuildEndRecordConstructor): Reimplement. + (m2type_BuildRecordConstructorElement): Ditto. + (m2type_BuildStartArrayConstructor): Reimplement. + (m2type_BuildEndArrayConstructor): Remove blank lines. + * gm2-gcc/m2type.def (BuildSetConstructorElement): Reimplement. + (BuildEndArrayType): Reformat. + (GetBooleanEnumList): New function. + * gm2-gcc/m2type.h (m2type_BuildEnumerator): Add const to char *. + (m2type_BuildSetConstructorElement): Reimplement. + (m2type_GetBooleanEnumList): New procedure function. + * gm2-lang.cc (OPT_fmem_report): New option. + (OPT_ftime_report): Ditto. + (OPT_fwideset): Ditto. + * gm2-libs-coroutines/SYSTEM.def (ShiftVal): Remove. + (ShiftLeft): Ditto. + (ShiftRight): Ditto. + (RotateVal): Ditto. + (RotateLeft): Ditto. + (RotateRight): Ditto. + * gm2-libs-coroutines/SYSTEM.mod: Reimplement. + * gm2-libs-iso/SYSTEM.def (ShiftVal): Remove. + (ShiftLeft): Ditto. + (ShiftRight): Ditto. + (RotateVal): Ditto. + (RotateLeft): Ditto. + (RotateRight): Ditto. + * gm2-libs-iso/SYSTEM.mod: Reimplement. + * gm2-libs/SYSTEM.def (ShiftVal): Remove. + (ShiftLeft): Ditto. + (ShiftRight): Ditto. + (RotateVal): Ditto. + (RotateLeft): Ditto. + (RotateRight): Ditto. + * gm2-libs/SYSTEM.mod: Reimplement. + * gm2-libs/SysStorage.def (DEALLOCATE): Improve comment. + * gm2-libs/SysStorage.mod: Improve comment. + * init/ppginit (M2Diagnostic): Add. + (StringConvert): Add. + * lang.opt (fmem-report): Add access to c.opt. + (ftime-report): Ditto. + (fwideset): New option. + * pge-boot/main.cc (_M2_M2Diagnostic_init): New function. + (_M2_M2Diagnostic_fini): Ditto. + (_M2_StringConvert_init): Ditto. + (_M2_StringConvert_fini): Ditto. + (main): Call _M2_M2Diagnostic_init. + Call _M2_StringConvert_init. + Call _M2_M2Diagnostic_fini. + Call _M2_StringConvert_fini. + * tools-src/makeSystem: Add -gdb option. + * gm2-libs/M2Diagnostic.def: New file. + * gm2-libs/M2Diagnostic.mod: New file. + * gm2-libs/M2WIDESET.def: New file. + * gm2-libs/M2WIDESET.mod: New file. + * mc-boot/GM2Diagnostic.cc: New file. + * mc-boot/GM2Diagnostic.h: New file. + * pge-boot/GM2Diagnostic.cc: New file. + * pge-boot/GM2Diagnostic.h: New file. + * pge-boot/GSelective.h: New file. + * pge-boot/GStringConvert.cc: New file. + 2025-08-29 Gaius Mulley PR modula2/121709 diff --git a/gcc/m2/Make-lang.in b/gcc/m2/Make-lang.in index 470825ca2ccf..fd5193fea1da 100644 --- a/gcc/m2/Make-lang.in +++ b/gcc/m2/Make-lang.in @@ -681,6 +681,7 @@ GM2-LIBS-BOOT-DEFS = \ IO.def \ Indexing.def \ M2Dependent.def \ + M2Diagnostic.def \ M2EXCEPTION.def \ M2RTS.def \ NumberIO.def \ @@ -690,6 +691,7 @@ GM2-LIBS-BOOT-DEFS = \ SEnvironment.def \ SFIO.def \ SYSTEM.def \ + Selective.def \ Scan.def \ StdIO.def \ Storage.def \ @@ -726,6 +728,7 @@ GM2-LIBS-BOOT-MODS = \ IO.mod \ Indexing.mod \ M2Dependent.mod \ + M2Diagnostic.mod \ M2EXCEPTION.mod \ M2RTS.mod \ NumberIO.mod \ @@ -747,6 +750,7 @@ GM2-LIBS-BOOT-MODS = \ # found in gm2-libs-ch. GM2-LIBS-BOOT-C = \ + Selective.c \ StdIO.c \ SysExceptions.c \ choosetemp.c \ @@ -954,6 +958,7 @@ GM2-LIBS-DEFS = \ LMathLib0.def \ LegacyReal.def \ M2Dependent.def \ + M2Diagnostic.def \ M2EXCEPTION.def \ M2RTS.def \ MathLib0.def \ @@ -968,6 +973,7 @@ GM2-LIBS-DEFS = \ SMathLib0.def \ SYSTEM.def \ Scan.def \ + Selective.def \ StdIO.def \ Storage.def \ StrCase.def \ @@ -1006,6 +1012,7 @@ GM2-LIBS-MODS = \ LMathLib0.mod \ LegacyReal.mod \ M2Dependent.mod \ + M2Diagnostic.mod \ M2EXCEPTION.mod \ M2RTS.mod \ MathLib0.mod \ @@ -1246,6 +1253,7 @@ MC-LIB-DEFS = \ FpuIO.def \ IO.def \ M2Dependent.def \ + M2Diagnostic.def \ M2EXCEPTION.def \ M2RTS.def \ MemUtils.def \ @@ -1293,6 +1301,7 @@ MC-LIB-MODS = \ FpuIO.mod \ IO.mod \ M2Dependent.mod \ + M2Diagnostic.mod \ M2EXCEPTION.mod \ M2RTS.mod \ MemUtils.mod \ @@ -1558,6 +1567,12 @@ m2/gm2-libs-boot/SysStorage.o: $(srcdir)/m2/gm2-libs/SysStorage.mod $(MCDEPS) $( m2/gm2-libs-boot/SysStorage.c -o m2/gm2-libs-boot/SysStorage.o $(POSTCOMPILE) +m2/gm2-libs-boot/Selective.o: $(srcdir)/m2/gm2-libs-ch/Selective.c \ + m2/gm2-libs-boot/$(SRC_PREFIX)Selective.h m2/gm2-libs/gm2-libs-host.h + -test -d $(@D)/$(DEPDIR) || $(mkinstalldirs) $(@D)/$(DEPDIR) + $(CXX) $(CM2DEP) -c $(CFLAGS) $(GM2_PICFLAGS) -Im2/gm2-libs -I$(srcdir)/m2 -Im2 -I. -Im2/gm2-libs-boot $(INCLUDES) $< -o $@ + $(POSTCOMPILE) + m2/gm2-compiler-boot/M2GCCDeclare.o: $(srcdir)/m2/gm2-compiler/M2GCCDeclare.mod $(MCDEPS) $(BUILD-BOOT-H) -test -d $(@D)/$(DEPDIR) || $(mkinstalldirs) $(@D)/$(DEPDIR) $(MC) $(MC_EXTENDED_OPAQUE) -o=m2/gm2-compiler-boot/M2GCCDeclare.c $< @@ -1873,6 +1888,7 @@ BUILD-PGE-O = \ m2/pge-boot/GIO.o \ m2/pge-boot/GLists.o \ m2/pge-boot/GM2Dependent.o \ + m2/pge-boot/GM2Diagnostic.o \ m2/pge-boot/GM2EXCEPTION.o \ m2/pge-boot/GM2RTS.o \ m2/pge-boot/GNameKey.o \ @@ -1882,9 +1898,11 @@ BUILD-PGE-O = \ m2/pge-boot/GPushBackInput.o \ m2/pge-boot/GRTExceptions.o \ m2/pge-boot/GSFIO.o \ + m2/pge-boot/GSelective.o \ m2/pge-boot/GStdIO.o \ m2/pge-boot/GStorage.o \ m2/pge-boot/GStrCase.o \ + m2/pge-boot/GStringConvert.o \ m2/pge-boot/GStrIO.o \ m2/pge-boot/GStrLib.o \ m2/pge-boot/GSymbolKey.o \ @@ -1896,6 +1914,8 @@ BUILD-PGE-O = \ m2/pge-boot/Gtermios.o \ m2/pge-boot/GSysExceptions.o \ m2/pge-boot/Gabort.o \ + m2/pge-boot/Gdtoa.o \ + m2/pge-boot/Gldtoa.o \ m2/pge-boot/Gmcrts.o \ m2/pge-boot/main.o diff --git a/gcc/m2/Make-maintainer.in b/gcc/m2/Make-maintainer.in index ad89474f3754..cf05e0f3d71a 100644 --- a/gcc/m2/Make-maintainer.in +++ b/gcc/m2/Make-maintainer.in @@ -41,10 +41,11 @@ PPG-DEFS = SymbolKey.def NameKey.def Lists.def bnflex.def Output.de PPG-LIB-DEFS = Args.def Assertion.def ASCII.def Debug.def \ DynamicStrings.def FIO.def Indexing.def IO.def \ NumberIO.def PushBackInput.def \ - M2Dependent.def \ + M2Dependent.def M2Diagnostic.def \ M2EXCEPTION.def M2RTS.def \ RTExceptions.def \ StdIO.def SFIO.def StrIO.def StrLib.def \ + StringConvert.def \ Storage.def StrCase.def SysStorage.def # Core library implementation modules used by ppg found in the gm2-libs directory. @@ -58,6 +59,7 @@ PPG-LIB-MODS = ASCII.mod \ IO.mod \ Indexing.mod \ M2Dependent.mod \ + M2Diagnostic.mod \ M2EXCEPTION.mod \ M2RTS.mod \ NumberIO.mod \ @@ -69,6 +71,7 @@ PPG-LIB-MODS = ASCII.mod \ StrCase.mod \ StrIO.mod \ StrLib.mod \ + StringConvert.mod \ SysStorage.mod # Program module ppg.mod from which pge.mod is created. ppg.mod is @@ -96,6 +99,7 @@ PGE-DEF = ASCII.def \ FpuIO.def \ IO.def \ M2Dependent.def \ + M2Diagnostic.def \ M2EXCEPTION.def \ M2RTS.def \ MemUtils.def \ @@ -169,6 +173,8 @@ PGE-DEPS = Gabort.cc \ GLists.h \ GM2Dependent.cc \ GM2Dependent.h \ + GM2Diagnostic.cc \ + GM2Diagnostic.h \ GM2EXCEPTION.cc \ GM2EXCEPTION.h \ GM2RTS.cc \ diff --git a/gcc/m2/gm2-compiler/FifoQueue.def b/gcc/m2/gm2-compiler/FifoQueue.def index a6a454a9da62..26e985c478c5 100644 --- a/gcc/m2/gm2-compiler/FifoQueue.def +++ b/gcc/m2/gm2-compiler/FifoQueue.def @@ -25,15 +25,25 @@ DEFINITION MODULE FifoQueue ; Author : Gaius Mulley Title : FifoQueue Date : Tue Dec 12 16:23:22 GMT 1989 - Description: FifoQueue provides a mechanism to and from which CARDINAL - numbers can be stored and retrieved from a FIFO queue. - Last update: Tue Dec 12 16:24:24 GMT 1989 + Description: FifoQueue provides a fifo mechanism to allow symbols to be + stored and retrieved between passes in the same order. *) -EXPORT QUALIFIED PutEnumerationIntoFifoQueue, GetEnumerationFromFifoQueue, - PutSubrangeIntoFifoQueue, GetSubrangeFromFifoQueue, - PutConstIntoFifoQueue, GetConstFromFifoQueue, - PutConstructorIntoFifoQueue, GetConstructorFromFifoQueue ; + +(* + PutSetIntoFifoQueue - places a set symbol + into a fifo queue. +*) + +PROCEDURE PutSetIntoFifoQueue (c: CARDINAL) ; + + +(* + GetSetFromFifoQueue - retrieves a set symbol + from a fifo queue. +*) + +PROCEDURE GetSetFromFifoQueue (VAR c: CARDINAL) ; (* diff --git a/gcc/m2/gm2-compiler/FifoQueue.mod b/gcc/m2/gm2-compiler/FifoQueue.mod index 9d309557286b..8d9accf0d9c7 100644 --- a/gcc/m2/gm2-compiler/FifoQueue.mod +++ b/gcc/m2/gm2-compiler/FifoQueue.mod @@ -31,6 +31,7 @@ TYPE VAR const, + set, subrange, enumeration, constructor: Fifo ; @@ -149,6 +150,28 @@ BEGIN END GetConstFromFifoQueue ; +(* + PutSetIntoFifoQueue - places a set symbol + into a fifo queue. +*) + +PROCEDURE PutSetIntoFifoQueue (c: CARDINAL) ; +BEGIN + PutInto (set, c) +END PutSetIntoFifoQueue ; + + +(* + GetSetFromFifoQueue - retrieves a set symbol + from a fifo queue. +*) + +PROCEDURE GetSetFromFifoQueue (VAR c: CARDINAL) ; +BEGIN + GetFrom (set, c) +END GetSetFromFifoQueue ; + + (* Init - initialize the fifo queue. *) @@ -164,6 +187,7 @@ END Init ; BEGIN Init(const) ; + Init(set) ; Init(enumeration) ; Init(subrange) ; Init(constructor) diff --git a/gcc/m2/gm2-compiler/M2ALU.def b/gcc/m2/gm2-compiler/M2ALU.def index 1e4fdb8e8930..fbf3245ef912 100644 --- a/gcc/m2/gm2-compiler/M2ALU.def +++ b/gcc/m2/gm2-compiler/M2ALU.def @@ -35,52 +35,6 @@ FROM NameKey IMPORT Name ; FROM M2GCCDeclare IMPORT WalkAction, IsAction ; FROM gcctypes IMPORT tree ; -EXPORT QUALIFIED PtrToValue, - InitValue, - IsValueTypeNone, - IsValueTypeInteger, - IsValueTypeReal, - IsValueTypeComplex, - IsValueTypeSet, - IsValueTypeConstructor, - IsValueTypeArray, - IsValueTypeRecord, - PopInto, PushFrom, - PushIntegerTree, PopIntegerTree, - PushSetTree, PopSetTree, - PushRealTree, PopRealTree, - PushComplexTree, PopComplexTree, - PopConstructorTree, - PopChar, - PushCard, - PushInt, - PushChar, - PushString, - PushTypeOfTree, - CoerseLongRealToCard, - ConvertRealToInt, - ConvertToInt, - ConvertToType, - GetSetValueType, - IsSolved, IsValueConst, - PutConstructorSolved, EvaluateValue, TryEvaluateValue, - - IsNulSet, IsGenericNulSet, PushNulSet, AddBitRange, AddBit, SubBit, - SetOr, SetAnd, SetIn, - SetDifference, SetSymmetricDifference, - SetNegate, SetShift, SetRotate, - - Addn, Multn, Sub, - DivFloor, ModFloor, DivTrunc, ModTrunc, - Equ, NotEqu, Less, Gre, LessEqu, GreEqu, - GetValue, GetRange, ConstructSetConstant, BuildRange, - IsConstructorDependants, WalkConstructorDependants, - AddField, AddElements, - - PushEmptyConstructor, PushEmptyArray, PushEmptyRecord, - ChangeToConstructor, - - IsValueAndTreeKnown, CheckOrResetOverflow ; TYPE PtrToValue ; @@ -93,6 +47,13 @@ TYPE PROCEDURE InitValue () : PtrToValue ; +(* + KillValue - deconstructor for value. value is set to NIL upon return. +*) + +PROCEDURE KillValue (VAR value: PtrToValue) ; + + (* IsValueTypeNone - returns TRUE if the value on the top stack has no value. *) @@ -208,8 +169,7 @@ PROCEDURE PopComplexTree () : tree ; type (sym). Bit 0 maps onto MIN(sym). *) -PROCEDURE PushSetTree (tokenno: CARDINAL; - t: tree; sym: CARDINAL) ; +PROCEDURE PushSetTree (tokenno: CARDINAL; value: tree; sym: CARDINAL) ; (* @@ -828,8 +788,8 @@ PROCEDURE GetRange (v: PtrToValue; n: CARDINAL; VAR low, high: CARDINAL) : BOOLE (* - ConstructSetConstant - builds a struct of integers which represents the - set const, sym. + ConstructSetConstant - builds an array of BYTE which represents the + set const symbol. *) PROCEDURE ConstructSetConstant (tokenno: CARDINAL; v: PtrToValue) : tree ; diff --git a/gcc/m2/gm2-compiler/M2ALU.mod b/gcc/m2/gm2-compiler/M2ALU.mod index e53f2edf478d..6809bcb2fb88 100644 --- a/gcc/m2/gm2-compiler/M2ALU.mod +++ b/gcc/m2/gm2-compiler/M2ALU.mod @@ -52,7 +52,7 @@ FROM M2MetaError IMPORT MetaError0, MetaError1, MetaError2, MetaErrorStringT0, FROM SymbolTable IMPORT NulSym, IsEnumeration, IsSubrange, IsValueSolved, PushValue, ForeachFieldEnumerationDo, MakeTemporary, PutVar, PopValue, GetType, - MakeConstLit, GetArraySubscript, + MakeConstLit, GetArraySubscript, GetSetInWord, IsSet, SkipType, IsRecord, IsArray, IsConst, IsConstructor, IsConstString, SkipTypeAndSubrange, GetDeclaredMod, GetSubrange, GetSymName, GetNth, GetString, GetStringLength, @@ -70,7 +70,7 @@ FROM m2expr IMPORT BuildAdd, BuildSub, BuildMult, GetWordOne, GetCardinalZero, TreeOverflow, RemoveOverflow, GetCstInteger ; -FROM m2decl IMPORT GetBitsPerBitset, BuildIntegerConstant, BuildConstLiteralNumber ; +FROM m2decl IMPORT GetBitsPerUnit, GetBitsPerBitset, BuildIntegerConstant, BuildConstLiteralNumber ; FROM m2misc IMPORT DebugTree ; FROM m2type IMPORT RealToTree, Constructor, GetIntegerType, GetLongRealType, @@ -80,12 +80,17 @@ FROM m2type IMPORT RealToTree, Constructor, GetIntegerType, GetLongRealType, BuildArrayConstructorElement, BuildStartArrayConstructor, BuildEndArrayConstructor, GetM2CharType ; -FROM m2convert IMPORT ConvertConstantAndCheck, ToWord, ToInteger, ToCardinal, ToBitset ; +FROM m2convert IMPORT ConvertConstantAndCheck, ToWord, ToInteger, ToCardinal, + ToBitset, ToLoc, ToPIMByte, BuildConvert ; + FROM m2block IMPORT RememberConstant ; FROM m2expr IMPORT GetPointerZero, GetIntegerZero, GetIntegerOne, CompareTrees, FoldAndStrip, AreRealOrComplexConstantsEqual, AreConstantsEqual ; +FROM M2Diagnostic IMPORT Diagnostic, InitMemDiagnostic, MemIncr, MemSet ; + + TYPE cellType = (none, integer, real, complex, set, constructor, array, record) ; @@ -150,6 +155,9 @@ VAR EnumerationField: CARDINAL ; CurrentTokenNo : CARDINAL ; (* WatchedValue : PtrToValue ; *) + StackMemDiag : Diagnostic ; (* Contains memory related statistics *) + RangeMemDiag : Diagnostic ; (* Contains memory related statistics *) + (* @@ -162,7 +170,9 @@ VAR BEGIN IF FreeList=NIL THEN - NEW (v) + NEW (v) ; + MemIncr (StackMemDiag, 1, 1) ; + MemIncr (StackMemDiag, 2, SIZE (v^)) ELSE v := FreeList ; FreeList := FreeList^.next @@ -203,7 +213,9 @@ BEGIN IF v=NIL THEN InternalError ('out of memory error') - END + END ; + MemIncr (RangeMemDiag, 1, 1) ; + MemIncr (RangeMemDiag, 2, SIZE (v^)) ELSE v := RangeFreeList ; RangeFreeList := RangeFreeList^.next @@ -490,6 +502,17 @@ BEGIN END InitValue ; +(* + KillValue - deconstructor for value. value is set to NIL upon return. +*) + +PROCEDURE KillValue (VAR value: PtrToValue) ; +BEGIN + Dispose (value) ; + value := NIL +END KillValue ; + + (* IsValueTypeNone - returns TRUE if the value on the top stack has no value. *) @@ -818,49 +841,48 @@ END PopComplexTree ; (* PushSetTree - pushes a gcc tree onto the ALU stack. - The tree, t, is expected to contain a - word value. It is converted into a set - type (sym). Bit 0 maps onto MIN(sym). + The tree value is expected to contain a + word sized or less value. It is converted into a set + type (sym). Bit 0 maps onto MIN (sym). *) PROCEDURE PushSetTree (tokenno: CARDINAL; - t: tree; sym: CARDINAL) ; + value: tree; sym: CARDINAL) ; VAR - v: PtrToValue ; - c, - i: INTEGER ; - r: listOfRange ; - l: location_t ; + newVal: PtrToValue ; + c, i : INTEGER ; + range : listOfRange ; + loc : location_t ; BEGIN - l := TokenToLocation(tokenno) ; - r := NIL ; + loc := TokenToLocation (tokenno) ; + range := NIL ; i := 0 ; - WHILE (i0 DO (* note we dont use GetNthParamAny as we want the parameter that is seen by the procedure block remember that this is treated exactly the same as a variable, just its position on the activation record is special (ie a parameter) *) - Variable := GetNth(Sym, i) ; - location := TokenToLocation(GetDeclaredMod(Variable)) ; - IF IsUnboundedParamAny (Sym, i) + Variable := GetNth (ProcedureSym, i) ; + location := TokenToLocation (GetDeclaredMod (Variable)) ; + IF IsUnboundedParamAny (ProcedureSym, i) THEN GccParam := BuildParameterDeclaration(location, KeyToCharStar(GetSymName(Variable)), @@ -2527,34 +2682,34 @@ BEGIN GccParam := BuildParameterDeclaration(location, KeyToCharStar(GetSymName(Variable)), Mod2Gcc(GetLType(Variable)), - IsVarParamAny (Sym, i)) + IsVarParamAny (ProcedureSym, i)) END ; PreAddModGcc(Variable, GccParam) ; WatchRemoveList(Variable, todolist) ; WatchIncludeList(Variable, fullydeclared) ; DEC(i) END ; - GetProcedureBeginEnd(Sym, b, e) ; + GetProcedureBeginEnd(ProcedureSym, b, e) ; begin := TokenToLocation(b) ; end := TokenToLocation(e) ; - scope := GetScope(Sym) ; + scope := GetScope(ProcedureSym) ; PushBinding(scope) ; - IF GetSType(Sym)=NulSym + IF GetSType(ProcedureSym)=NulSym THEN returnType := NIL ELSE - returnType := Mod2Gcc(GetSType(Sym)) + returnType := Mod2Gcc(GetSType(ProcedureSym)) END ; - PreAddModGcc(Sym, BuildEndFunctionDeclaration(begin, end, - KeyToCharStar(GetFullSymName(Sym)), - returnType, - IsExternalToWholeProgram(Sym), - IsProcedureGccNested(Sym), - IsExported(GetModuleWhereDeclared(Sym), Sym), - IsProcedureAnyNoReturn(Sym))) ; + PreAddModGcc(ProcedureSym, BuildEndFunctionDeclaration(begin, end, + KeyToCharStar(GetFullSymName(ProcedureSym)), + returnType, + IsExternalToWholeProgram(ProcedureSym), + IsProcedureGccNested(ProcedureSym), + IsExported(GetModuleWhereDeclared(ProcedureSym), ProcedureSym), + IsProcedureAnyNoReturn(ProcedureSym))) ; PopBinding(scope) ; - WatchRemoveList(Sym, todolist) ; - WatchIncludeList(Sym, fullydeclared) + WatchRemoveList(ProcedureSym, todolist) ; + WatchIncludeList(ProcedureSym, fullydeclared) END END DeclareProcedureToGccWholeProgram ; @@ -2563,7 +2718,7 @@ END DeclareProcedureToGccWholeProgram ; DeclareProcedureToGccSeparateProgram - *) -PROCEDURE DeclareProcedureToGccSeparateProgram (Sym: CARDINAL) ; +PROCEDURE DeclareProcedureToGccSeparateProgram (ProcedureSym: CARDINAL) ; VAR returnType, GccParam : tree ; @@ -2575,64 +2730,76 @@ VAR location : location_t ; tok : CARDINAL ; BEGIN - tok := GetDeclaredMod(Sym) ; - IF (NOT GccKnowsAbout(Sym)) AND (NOT IsPseudoProcFunc(Sym)) AND - (IsEffectivelyImported(GetMainModule(), Sym) OR - (GetModuleWhereDeclared (Sym) = GetMainModule()) OR - IsNeededAtRunTime (tok, Sym) OR - IsImported (GetBaseModule (), Sym) OR - IsExported(GetModuleWhereDeclared (Sym), Sym) OR - IsExtern (Sym)) - THEN - BuildStartFunctionDeclaration(UsesVarArgs(Sym)) ; - p := NoOfParamAny (Sym) ; + Assert (IsProcedure (ProcedureSym)) ; + tok := GetDeclaredMod (ProcedureSym) ; + IF (NOT GccKnowsAbout (ProcedureSym)) AND (NOT IsPseudoProcFunc (ProcedureSym)) AND + (IsEffectivelyImported (GetMainModule (), ProcedureSym) OR + (GetModuleWhereDeclared (ProcedureSym) = GetMainModule ()) OR + IsNeededAtRunTime (tok, ProcedureSym) OR + IsImported (GetBaseModule (), ProcedureSym) OR + IsExported(GetModuleWhereDeclared (ProcedureSym), ProcedureSym) OR + IsExtern (ProcedureSym)) + THEN + BuildStartFunctionDeclaration (UsesVarArgs (ProcedureSym)) ; + p := NoOfParamAny (ProcedureSym) ; i := p ; - WHILE i>0 DO + WHILE i > 0 DO (* Note we dont use GetNthParamAny as we want the parameter that is seen by the procedure block remember that this is treated exactly the same as a variable, just its position on the activation record is special (ie a parameter). *) - Variable := GetNth(Sym, i) ; - location := TokenToLocation(GetDeclaredMod(Variable)) ; - IF IsUnboundedParamAny (Sym, i) + Variable := GetNth (ProcedureSym, i) ; + location := TokenToLocation (GetDeclaredMod (Variable)) ; + IF GetSType (Variable) = NulSym THEN - GccParam := BuildParameterDeclaration(location, - KeyToCharStar(GetSymName(Variable)), - Mod2Gcc(GetLType(Variable)), - FALSE) + MetaError1 ('internal error: the type of parameter {%1Ead} is nulsym', Variable) ; + FlushErrors + END ; + IF Mod2Gcc (GetSType (Variable)) = NIL + THEN + MetaError2 ('internal error: the type of parameter {%1Ead} in procedure {%2ad} has not been declared to GCC', Variable, ProcedureSym) ; + FlushErrors ; + Assert (AllDependantsFullyDeclared (ProcedureSym)) + END ; + IF IsUnboundedParamAny (ProcedureSym, i) + THEN + GccParam := BuildParameterDeclaration (location, + KeyToCharStar (GetSymName (Variable)), + Mod2Gcc (GetLType (Variable)), + FALSE) ELSE - GccParam := BuildParameterDeclaration(location, - KeyToCharStar(GetSymName(Variable)), - Mod2Gcc(GetLType(Variable)), - IsVarParamAny (Sym, i)) + GccParam := BuildParameterDeclaration (location, + KeyToCharStar (GetSymName (Variable)), + Mod2Gcc (GetLType (Variable)), + IsVarParamAny (ProcedureSym, i)) END ; - PreAddModGcc(Variable, GccParam) ; - WatchRemoveList(Variable, todolist) ; - WatchIncludeList(Variable, fullydeclared) ; - DEC(i) + PreAddModGcc (Variable, GccParam) ; + WatchRemoveList (Variable, todolist) ; + WatchIncludeList (Variable, fullydeclared) ; + DEC (i) END ; - GetProcedureBeginEnd(Sym, b, e) ; - begin := TokenToLocation(b) ; - end := TokenToLocation(e) ; - scope := GetScope(Sym) ; - PushBinding(scope) ; - IF GetSType(Sym)=NulSym + GetProcedureBeginEnd (ProcedureSym, b, e) ; + begin := TokenToLocation (b) ; + end := TokenToLocation (e) ; + scope := GetScope (ProcedureSym) ; + PushBinding (scope) ; + IF GetSType (ProcedureSym) = NulSym THEN returnType := NIL ELSE - returnType := Mod2Gcc(GetSType(Sym)) + returnType := Mod2Gcc (GetSType (ProcedureSym)) END ; - PreAddModGcc (Sym, BuildEndFunctionDeclaration (begin, end, - KeyToCharStar (GetFullSymName (Sym)), - returnType, - IsExternal (Sym), (* Extern relative to the main module. *) - IsProcedureGccNested (Sym), - (* Exported from the module where it was declared. *) - IsExported (GetModuleWhereDeclared (Sym), Sym) OR IsExtern (Sym), - IsProcedureAnyNoReturn(Sym))) ; - PopBinding(scope) ; - WatchRemoveList(Sym, todolist) ; - WatchIncludeList(Sym, fullydeclared) + PreAddModGcc (ProcedureSym, BuildEndFunctionDeclaration (begin, end, + KeyToCharStar (GetFullSymName (ProcedureSym)), + returnType, + IsExternal (ProcedureSym), (* Extern relative to the main module. *) + IsProcedureGccNested (ProcedureSym), + (* Exported from the module where it was declared. *) + IsExported (GetModuleWhereDeclared (ProcedureSym), ProcedureSym) OR IsExtern (ProcedureSym), + IsProcedureAnyNoReturn (ProcedureSym))) ; + PopBinding (scope) ; + WatchRemoveList (ProcedureSym, todolist) ; + WatchIncludeList (ProcedureSym, fullydeclared) END END DeclareProcedureToGccSeparateProgram ; @@ -2741,6 +2908,7 @@ BEGIN THEN DisplayQuadRange (scope, start, end) END ; + EnterDiagnostic (DeclareTypesConstantsProceduresInRangeDiag) ; loop := 0 ; copy := NIL ; sb := InitScopeBlock (scope) ; @@ -2772,7 +2940,8 @@ BEGIN KillGroup (copy) ; bb := InitBasicBlocks (sb) ; KillBasicBlocks (bb) ; - KillScopeBlock (sb) + KillScopeBlock (sb) ; + ExitDiagnostic (DeclareTypesConstantsProceduresInRangeDiag) END DeclareTypesConstantsProceduresInRange ; @@ -2839,6 +3008,7 @@ BEGIN THEN printf0 ("declaring types constants in: ") ; PrintTerse (scope) END ; + EnterDiagnostic (DeclareTypesConstantsProceduresDiag) ; copy := NIL ; sb := InitScopeBlock (scope) ; PushBinding (scope) ; @@ -2848,7 +3018,8 @@ BEGIN UNTIL EqualGroup (copy, GlobalGroup) ; KillGroup (copy) ; PopBinding (scope) ; - KillScopeBlock (sb) + KillScopeBlock (sb) ; + ExitDiagnostic (DeclareTypesConstantsProceduresDiag) END DeclareTypesConstantsProcedures ; @@ -2902,16 +3073,16 @@ END DeclareModuleInit ; PROCEDURE StartDeclareProcedureScope (scope: CARDINAL) ; BEGIN - WalkTypesInProcedure(scope) ; - DeclareProcedure(scope) ; - ForeachInnerModuleDo(scope, WalkTypesInModule) ; + WalkTypesInProcedure (scope) ; + DeclareProcedure (scope) ; + ForeachInnerModuleDo (scope, WalkTypesInModule) ; DeclareTypesConstantsProcedures (scope) ; - ForeachInnerModuleDo(scope, DeclareTypesConstantsProcedures) ; - DeclareLocalVariables(scope) ; - ForeachInnerModuleDo(scope, DeclareModuleVariables) ; - AssertAllTypesDeclared(scope) ; - ForeachProcedureDo(scope, DeclareProcedure) ; - ForeachInnerModuleDo(scope, StartDeclareScope) + ForeachInnerModuleDo (scope, DeclareTypesConstantsProcedures) ; + DeclareLocalVariables (scope) ; + ForeachInnerModuleDo (scope, DeclareModuleVariables) ; + AssertAllTypesDeclared (scope) ; + ForeachProcedureDo (scope, DeclareProcedure) ; + ForeachInnerModuleDo (scope, StartDeclareScope) END StartDeclareProcedureScope ; @@ -3122,20 +3293,20 @@ END PreAddModGcc ; PROCEDURE DeclareDefaultType (sym: CARDINAL; name: ARRAY OF CHAR; gcctype: tree) ; VAR t : tree ; + array, high, low: CARDINAL ; location : location_t ; BEGIN - (* DeclareDefaultType will declare a new identifier as a type of, gcctype, if it has not already been - declared by gccgm2.c *) + (* DeclareDefaultType will declare a new identifier as a type of gcctype + if it has not already been declared. *) location := BuiltinsLocation () ; t := GetDefaultType(location, KeyToCharStar(MakeKey(name)), gcctype) ; - AddModGcc(sym, t) ; - IncludeElementIntoSet(GlobalGroup^.FullyDeclared, sym) ; - WalkAssociatedUnbounded(sym, TraverseDependants) ; - (* - this is very simplistic and assumes that the caller only uses Subranges, Sets and GCC types. - We need to declare any constants with the types so that AllDependantsFullyDeclared works. - *) + AddModGcc (sym, t) ; + IncludeElementIntoSet (GlobalGroup^.FullyDeclared, sym) ; + WalkAssociatedUnbounded (sym, TraverseDependants) ; + (* This is very simplistic and assumes that the caller only uses Subranges, + Sets and GCC types. We need to declare any constants with the types so + that AllDependantsFullyDeclared works. *) IF IsSubrange(sym) THEN GetSubrange(sym, high, low) ; @@ -3147,17 +3318,20 @@ BEGIN THEN IF NOT GccKnowsAbout(GetSType(sym)) THEN - (* only true for internal types of course *) + (* Only true for internal types of course. *) InternalError ('subrange type within the set type must be declared before the set type') END ; GetSubrange(GetSType(sym), high, low) ; DeclareConstant(GetDeclaredMod(sym), high) ; - DeclareConstant(GetDeclaredMod(sym), low) + DeclareConstant(GetDeclaredMod(sym), low) ; + array := DeclareSetArray (sym, low, high) ; + (* IncludeElementIntoSet (FullyDeclared, array) ; *) + PutSetArray (sym, array) ELSIF IsEnumeration(GetSType(sym)) THEN IF NOT GccKnowsAbout(GetSType(sym)) THEN - (* only true for internal types of course *) + (* Only true for internal types of course. *) InternalError ('enumeration type within the set type must be declared before the set type') END END @@ -3473,7 +3647,7 @@ BEGIN We do not add an extra pointer if this is the case. *) varType := SkipType (GetVarBackEndType (var)) ; - IF varType=NulSym + IF varType = NulSym THEN (* We have not explicity told back end the type, so build it. *) varType := GetSType (var) ; @@ -3590,7 +3764,7 @@ BEGIN INC (n) ; Variable := GetNth (ModSym, n) END ; - ForeachInnerModuleDo(ModSym, DeclareGlobalVariablesWholeProgram) + ForeachInnerModuleDo (ModSym, DeclareGlobalVariablesWholeProgram) END DeclareGlobalVariablesWholeProgram ; @@ -4002,7 +4176,8 @@ PROCEDURE PrintAlignment (sym: CARDINAL) ; VAR align: CARDINAL ; BEGIN - IF IsRecord(sym) OR IsType(sym) OR IsRecordField(sym) OR IsPointer(sym) OR IsArray(sym) + IF IsRecord(sym) OR IsType(sym) OR IsRecordField(sym) OR + IsPointer(sym) OR IsArray(sym) THEN align := GetAlignment(sym) ; IF align#NulSym @@ -4164,7 +4339,7 @@ BEGIN PrintDeclared (sym) ; fprintf0 (GetDumpFile (), '\n') ; FOR kind := MIN (ProcedureKind) TO MAX (ProcedureKind) DO - fprintf0 (GetDumpFile (), 'parameters ') ; + fprintf0 (GetDumpFile (), ' parameters ') ; PrintKind (kind) ; IF GetProcedureParametersDefined (sym, kind) THEN @@ -4870,9 +5045,9 @@ VAR BEGIN location := TokenToLocation(GetDeclaredMod(sym)) ; Assert(IsSet(sym)) ; - type := GetDType(sym) ; - low := GetTypeMin(type) ; - high := GetTypeMax(type) ; + type := GetDType(sym) ; (* Was GetSType. *) + low := GetTypeMin (type) ; + high := GetTypeMax (type) ; highLimit := BuildSub(location, Mod2Gcc(high), Mod2Gcc(low), FALSE) ; (* --fixme-- we need to check that low <= WORDLENGTH. *) highLimit := BuildLSL(location, GetIntegerOne(location), highLimit, FALSE) ; @@ -4918,7 +5093,7 @@ BEGIN location := TokenToLocation(GetDeclaredMod(sym)) ; gccenum := BuildStartEnumeration(location, KeyToCharStar(GetFullSymName(sym)), TRUE) ; ForeachLocalSymDo(sym, DeclarePackedFieldEnumeration) ; - enumlist := GetEnumList(equiv) ; + enumlist := GetEnumList (equiv) ; gccenum := BuildEndEnumeration(location, gccenum, enumlist) ; AddModGcc(equiv, gccenum) END DeclarePackedEnumeration ; @@ -5247,11 +5422,12 @@ END DeclareUnbounded ; BuildIndex - *) -PROCEDURE BuildIndex (tokenno: CARDINAL; array: CARDINAL) : tree ; +PROCEDURE BuildIndex (tokenno: CARDINAL; array: CARDINAL; isset: BOOLEAN) : tree ; VAR Subscript: CARDINAL ; Type, High, Low: CARDINAL ; + indexType, n, low, high: tree ; location : location_t ; @@ -5272,18 +5448,25 @@ BEGIN n := BuildConvert (location, GetIntegerType (), BuildSub (location, high, low, FALSE), FALSE) ; IF TreeOverflow(n) OR ValueOutOfTypeRange (GetIntegerType (), n) THEN - MetaError3('implementation restriction, array is too large {%1EDM}, the range {%2ad}..{%3ad} exceeds the integer range', - array, Low, High) ; - RETURN BuildArrayIndexType (GetIntegerZero (location), GetIntegerZero (location)) + IF isset + THEN + MetaError3('implementation restriction, set is too large {%1EDM}, the range {%2ad}..{%3ad} exceeds the integer range', + array, Low, High) + ELSE + MetaError3('implementation restriction, array is too large {%1EDM}, the range {%2ad}..{%3ad} exceeds the integer range', + array, Low, High) + END ; + indexType := BuildArrayIndexType (GetIntegerZero (location), GetIntegerZero (location)) ELSE PutArrayLarge (array) ; - RETURN BuildArrayIndexType (GetIntegerZero (location), n) + indexType := BuildArrayIndexType (GetIntegerZero (location), n) END ELSE low := BuildConvert (location, GetIntegerType (), low, FALSE) ; high := BuildConvert (location, GetIntegerType (), high, FALSE) ; - RETURN BuildArrayIndexType (low, high) - END + indexType := BuildArrayIndexType (low, high) + END ; + RETURN indexType END BuildIndex ; @@ -5307,24 +5490,24 @@ BEGIN location := TokenToLocation(tokenno) ; Subscript := GetArraySubscript(Sym) ; - typeOfArray := GetDType(Sym) ; + typeOfArray := GetDType (Sym) ; GccArray := Mod2Gcc(typeOfArray) ; - GccIndex := BuildIndex(tokenno, Sym) ; + GccIndex := BuildIndex (tokenno, Sym, FALSE) ; - IF GccKnowsAbout(Sym) + IF GccKnowsAbout (Sym) THEN - ArrayType := Mod2Gcc(Sym) + ArrayType := Mod2Gcc (Sym) ELSE - ArrayType := BuildStartArrayType(GccIndex, GccArray, typeOfArray) ; - PreAddModGcc(Sym, ArrayType) + ArrayType := BuildStartArrayType (GccIndex, GccArray, typeOfArray) ; + PreAddModGcc (Sym, ArrayType) END ; - PreAddModGcc(Subscript, GccArray) ; (* we save the type of this array as the subscript *) - PushIntegerTree(BuildSize(location, GccArray, FALSE)) ; (* and the size of this array so far *) - PopSize(Subscript) ; + PreAddModGcc (Subscript, GccArray) ; (* we save the type of this array as the subscript *) + PushIntegerTree (BuildSize (location, GccArray, FALSE)) ; (* and the size of this array so far *) + PopSize (Subscript) ; - GccArray := BuildEndArrayType(ArrayType, GccArray, GccIndex, typeOfArray) ; - Assert(GccArray=ArrayType) ; + GccArray := BuildEndArrayType (ArrayType, GccArray, GccIndex, typeOfArray) ; + Assert (GccArray = ArrayType) ; RETURN( GccArray ) END DeclareArray ; @@ -5408,13 +5591,13 @@ PROCEDURE GetTypeMin (type: CARDINAL) : CARDINAL ; VAR min, max: CARDINAL ; BEGIN - IF IsSubrange(type) + IF IsSubrange (type) THEN - GetSubrange(type, max, min) ; + GetSubrange (type, max, min) ; RETURN( min ) ELSIF IsSet(type) THEN - RETURN( GetTypeMin(GetSType(type)) ) + RETURN( GetTypeMin (GetSType (type)) ) ELSIF IsEnumeration(type) THEN MinEnumerationField := NulSym ; @@ -5423,18 +5606,18 @@ BEGIN RETURN( MinEnumerationField ) ELSIF IsBaseType(type) THEN - GetBaseTypeMinMax(type, min, max) ; + GetBaseTypeMinMax (type, min, max) ; RETURN( min ) - ELSIF IsSystemType(type) + ELSIF IsSystemType (type) THEN - GetSystemTypeMinMax(type, min, max) ; + GetSystemTypeMinMax (type, min, max) ; RETURN( min ) - ELSIF GetSType(type)=NulSym + ELSIF GetSType (type) = NulSym THEN - MetaError1('unable to obtain the MIN value for type {%1as}', type) ; + MetaError1 ('unable to obtain the MIN value for type {%1as}', type) ; RETURN NulSym ELSE - RETURN( GetTypeMin(GetSType(type)) ) + RETURN( GetTypeMin (GetSType (type)) ) END END GetTypeMin ; @@ -5447,33 +5630,33 @@ PROCEDURE GetTypeMax (type: CARDINAL) : CARDINAL ; VAR min, max: CARDINAL ; BEGIN - IF IsSubrange(type) + IF IsSubrange (type) THEN - GetSubrange(type, max, min) ; + GetSubrange (type, max, min) ; RETURN( max ) - ELSIF IsSet(type) + ELSIF IsSet (type) THEN - RETURN( GetTypeMax(GetSType(type)) ) - ELSIF IsEnumeration(type) + RETURN( GetTypeMax (GetSType (type)) ) + ELSIF IsEnumeration (type) THEN MinEnumerationField := NulSym ; MaxEnumerationField := NulSym ; ForeachLocalSymDo (type, FindMinMaxEnum) ; RETURN( MaxEnumerationField ) - ELSIF IsBaseType(type) + ELSIF IsBaseType (type) THEN - GetBaseTypeMinMax(type, min, max) ; + GetBaseTypeMinMax (type, min, max) ; RETURN( max ) - ELSIF IsSystemType(type) + ELSIF IsSystemType (type) THEN - GetSystemTypeMinMax(type, min, max) ; + GetSystemTypeMinMax (type, min, max) ; RETURN( max ) - ELSIF GetSType(type)=NulSym + ELSIF GetSType (type) = NulSym THEN - MetaError1('unable to obtain the MAX value for type {%1as}', type) ; + MetaError1 ('unable to obtain the MAX value for type {%1as}', type) ; RETURN NulSym ELSE - RETURN( GetTypeMax(GetSType(type)) ) + RETURN( GetTypeMax (GetSType (type)) ) END END GetTypeMax ; @@ -5495,101 +5678,33 @@ END PushNoOfBits ; (* - DeclareLargeSet - n is the name of the set. - type is the subrange type (or simple type) - low and high are the limits of the subrange. -*) + DeclareSetArrayOrBitSet - works out whether the set will exceed SIZE (BITSET). + If it does we manufacture a set using: -PROCEDURE DeclareLargeSet (n: Name; type: CARDINAL; low, high: CARDINAL) : tree ; -VAR - lowtree, - hightree, - BitsInSet, - RecordType, - GccField, - FieldList : tree ; - bpw : CARDINAL ; - location : location_t ; -BEGIN - location := TokenToLocation(GetDeclaredMod(type)) ; - bpw := GetBitsPerBitset() ; - PushValue(low) ; - lowtree := PopIntegerTree() ; - PushValue(high) ; - hightree := PopIntegerTree() ; - FieldList := tree(NIL) ; - RecordType := BuildStartRecord(location, KeyToCharStar(n)) ; (* no problem with recursive types here *) - PushNoOfBits(type, low, high) ; - PushCard(1) ; - Addn ; - BitsInSet := PopIntegerTree() ; - PushIntegerTree(BitsInSet) ; - PushCard(0) ; - WHILE Gre(GetDeclaredMod(type)) DO - PushIntegerTree(BitsInSet) ; - PushCard(bpw-1) ; - IF GreEqu(GetDeclaredMod(type)) - THEN - PushIntegerTree(lowtree) ; - PushCard(bpw-1) ; - Addn ; - GccField := BuildFieldRecord(location, NIL, BuildSetType(location, NIL, Mod2Gcc(type), lowtree, PopIntegerTree(), FALSE)) ; - PushIntegerTree(lowtree) ; - PushCard(bpw) ; - Addn ; - lowtree := PopIntegerTree() ; - PushIntegerTree(BitsInSet) ; - PushCard(bpw) ; - Sub ; - BitsInSet := PopIntegerTree() - ELSE - (* printf2('range is %a..%a\n', GetSymName(low), GetSymName(high)) ; *) - GccField := BuildFieldRecord(location, NIL, BuildSetType(location, NIL, Mod2Gcc(type), lowtree, hightree, FALSE)) ; - PushCard(0) ; - BitsInSet := PopIntegerTree() - END ; - FieldList := ChainOn(FieldList, GccField) ; - PushIntegerTree(BitsInSet) ; - PushCard(0) - END ; - RETURN( BuildEndRecord(location, RecordType, FieldList, FALSE) ) -END DeclareLargeSet ; + settype = ARRAY [0..totalBits DIV SIZE (BITSET)] OF BITSET ; - -(* - DeclareLargeOrSmallSet - works out whether the set will exceed TSIZE(WORD). If it does - we manufacture a set using: - - settype = RECORD - w1: SET OF [...] - w2: SET OF [...] - END - - We do this as GCC and GDB (stabs) only knows about WORD sized sets. - If the set will fit into a WORD then we call gccgm2 directly. + When GCC supports dwarf5 set types this code should be revised. + If the set will fit into a WORD then we call gccgm2 directly. *) -PROCEDURE DeclareLargeOrSmallSet (sym: CARDINAL; - n: Name; type: CARDINAL; low, high: CARDINAL) : tree ; +PROCEDURE DeclareSetArrayOrBitSet (sym: CARDINAL; + n: Name; type: CARDINAL; low, high: CARDINAL) : tree ; VAR location: location_t ; - packed : BOOLEAN ; -BEGIN - PushNoOfBits(type, low, high) ; - PushCard(GetBitsPerBitset()) ; - packed := IsSetPacked (sym) ; - IF Less(GetDeclaredMod(type)) - THEN - location := TokenToLocation(GetDeclaredMod(sym)) ; - (* small set *) - (* PutSetSmall(sym) ; *) - RETURN BuildSetType (location, KeyToCharStar(n), - Mod2Gcc(type), Mod2Gcc(low), Mod2Gcc(high), packed) +BEGIN + PushNoOfBits (type, low, high) ; + PushCard (GetBitsPerBitset()) ; + location := TokenToLocation (GetDeclaredMod (sym)) ; + IF Less (GetDeclaredMod (type)) + THEN + PutSetInWord (sym, TRUE) ; + RETURN BuildSetType (location, KeyToCharStar (n), + Mod2Gcc (type), Mod2Gcc (low), Mod2Gcc (high), TRUE) ELSE - (* PutSetLarge(sym) ; *) - RETURN DeclareLargeSet (n, type, low, high) (* --fixme-- finish packed here as well. *) + PutSetInWord (sym, FALSE) ; + RETURN DeclareArray (GetSetArray (sym)) END -END DeclareLargeOrSmallSet ; +END DeclareSetArrayOrBitSet ; (* @@ -5602,15 +5717,17 @@ VAR type, high, low: CARDINAL ; BEGIN - type := GetDType(sym) ; - IF IsSubrange(type) + type := GetSType (sym) ; + IF IsSubrange (type) THEN - GetSubrange(type, high, low) ; - gccsym := DeclareLargeOrSmallSet(sym, GetFullSymName(sym), GetSType(type), low, high) + GetSubrange (type, high, low) ; + gccsym := DeclareSetArrayOrBitSet (sym, GetFullSymName (sym), + GetSType (type), low, high) ELSE - gccsym := DeclareLargeOrSmallSet(sym, GetFullSymName(sym), type, GetTypeMin(type), GetTypeMax(type)) + gccsym := DeclareSetArrayOrBitSet (sym, GetFullSymName (sym), + type, GetTypeMin (type), GetTypeMax (type)) END ; - RETURN( gccsym ) + RETURN gccsym END DeclareSet ; @@ -5696,19 +5813,19 @@ BEGIN t := DeclareVarient(sym) ELSIF IsPointer(sym) THEN - t := CheckAlignment(DeclarePointer(sym), sym) + t := CheckAlignment (DeclarePointer (sym), sym) ELSIF IsUnbounded(sym) THEN t := DeclareUnbounded(sym) ELSIF IsArray(sym) THEN - t := CheckAlignment(DeclareArray(sym), sym) + t := CheckAlignment (DeclareArray (sym), sym) ELSIF IsProcType(sym) THEN t := DeclareProcType(sym) ELSIF IsSet(sym) THEN - t := DeclareSet(sym) + t := CheckAlignment (DeclareSet (sym), sym) ELSIF IsConst(sym) THEN IF IsConstructor(sym) @@ -5981,11 +6098,17 @@ PROCEDURE WalkPointerDependants (sym: CARDINAL; p: WalkAction) ; VAR align: CARDINAL ; BEGIN - p(GetSType(sym)) ; - align := GetAlignment(sym) ; - IF align#NulSym + IF GetSType (sym) = NulSym THEN - p(align) + MetaError1 ('pointer type {%1Ua} is unresolved', sym) ; + InternalError ('pointer type should have been declared') + ELSE + p (GetSType (sym)) ; + align := GetAlignment (sym) ; + IF align # NulSym + THEN + p (align) + END END END WalkPointerDependants ; @@ -6321,7 +6444,7 @@ END WalkVarientFieldDependants ; PROCEDURE IsArrayDependants (sym: CARDINAL; q: IsAction) : BOOLEAN ; VAR result : BOOLEAN ; - align : CARDINAL ; + align, subscript: CARDINAL ; high, low: CARDINAL ; type : CARDINAL ; @@ -6329,7 +6452,6 @@ BEGIN result := TRUE ; Assert(IsArray(sym)) ; type := GetSType(sym) ; - IF NOT q(type) THEN result := FALSE @@ -6339,11 +6461,11 @@ BEGIN THEN Assert(IsSubscript(subscript)) ; type := GetSType(subscript) ; - IF NOT q(type) + IF NOT q (type) THEN result := FALSE END ; - type := SkipType(type) ; + type := SkipType (type) ; (* the array might be declared as ARRAY type OF foo *) low := GetTypeMin(type) ; high := GetTypeMax(type) ; @@ -6355,8 +6477,8 @@ BEGIN THEN result := FALSE END ; - align := GetAlignment(sym) ; - IF (align#NulSym) AND (NOT q(align)) + align := GetAlignment (sym) ; + IF (align#NulSym) AND (NOT q (align)) THEN result := FALSE END @@ -6371,7 +6493,7 @@ END IsArrayDependants ; PROCEDURE WalkArrayDependants (sym: CARDINAL; p: WalkAction) ; VAR - align : CARDINAL ; + align, subscript: CARDINAL ; high, low: CARDINAL ; type : CARDINAL ; @@ -6385,21 +6507,62 @@ BEGIN Assert(IsSubscript(subscript)) ; type := GetSType(subscript) ; p(type) ; + align := GetAlignment (sym) ; + IF align#NulSym + THEN + p(align) + END ; type := SkipType(type) ; (* the array might be declared as ARRAY type OF foo *) low := GetTypeMin(type) ; high := GetTypeMax(type) ; p(low) ; - p(high) ; - align := GetAlignment (sym) ; - IF align#NulSym - THEN - p(align) - END + p(high) END END WalkArrayDependants ; +(* + DeclareSetArray - +*) + +PROCEDURE DeclareSetArray (sym, low, high: CARDINAL) : CARDINAL ; +VAR + tok : CARDINAL ; + subrange, + highbyte: CARDINAL ; + bytes : tree ; + name : Name ; +BEGIN + tok := GetDeclaredMod (sym) ; + PushValue (high) ; + ConvertToInt ; + PushValue (low) ; + ConvertToInt ; + Sub ; + PushCard (8) ; + DivTrunc ; + bytes := PopIntegerTree () ; + subrange := MakeSubrange (tok, NulName) ; + INC (tempset) ; + name := makekey (string (Sprintf1 (Mark (InitString('_Tset%d')), tempset))) ; + highbyte := MakeConstVar (tok, name) ; + PutConst (highbyte, Cardinal) ; + AddModGcc (highbyte, bytes) ; + PushValue (high) ; + ConvertToInt ; + PushValue (low) ; + ConvertToInt ; + Sub ; + PushCard (GetBitsPerBitset ()) ; + PutSetInWord (sym, Less (tok)) ; + DeclareConstFully (highbyte) ; + PutSubrange (subrange, + MakeConstLit (tok, MakeKey ('0'), Cardinal), highbyte, Cardinal) ; + RETURN MakeSetArray (tok, subrange) +END DeclareSetArray ; + + (* IsSetDependants - returns TRUE if the symbol, sym, q(dependants) all return TRUE. @@ -6407,27 +6570,32 @@ END WalkArrayDependants ; PROCEDURE IsSetDependants (sym: CARDINAL; q: IsAction) : BOOLEAN ; VAR - result : BOOLEAN ; - type, low, high: CARDINAL ; + result : BOOLEAN ; + type, low, high, array: CARDINAL ; BEGIN result := TRUE ; - Assert(IsSet(sym)) ; + Assert (IsSet (sym)) ; - type := GetDType(sym) ; - IF NOT q(type) + type := GetDType (sym) ; + IF NOT q (type) THEN result := FALSE END ; - low := GetTypeMin(type) ; - high := GetTypeMax(type) ; - IF NOT q(low) + low := GetTypeMin (type) ; + high := GetTypeMax (type) ; + IF NOT q (low) THEN result := FALSE END ; - IF NOT q(high) + IF NOT q (high) THEN result := FALSE END ; + array := GetSetArray (sym) ; + IF array = NulSym + THEN + result := FALSE ; + END ; RETURN( result ) END IsSetDependants ; @@ -6438,7 +6606,7 @@ END IsSetDependants ; PROCEDURE WalkSetDependants (sym: CARDINAL; p: WalkAction) ; VAR - type, low, high: CARDINAL ; + type, low, high, array: CARDINAL ; BEGIN Assert(IsSet(sym)) ; @@ -6447,7 +6615,12 @@ BEGIN low := GetTypeMin(type) ; p(low) ; high := GetTypeMax(type) ; - p(high) + p(high) ; + array := GetSetArray (sym) ; + IF array # NulSym + THEN + p (array) + END END WalkSetDependants ; @@ -6524,19 +6697,19 @@ VAR result : BOOLEAN ; BEGIN result := TRUE ; - Assert(IsProcedure(sym)) ; + Assert (IsProcedure (sym)) ; i := 1 ; - ReturnType := GetSType(sym) ; - WHILE GetNth(sym, i)#NulSym DO - son := GetNth(sym, i) ; - type := GetSType(son) ; - IF NOT q(type) + ReturnType := GetSType (sym) ; + WHILE GetNth (sym, i) # NulSym DO + son := GetNth (sym, i) ; + type := GetSType (son) ; + IF NOT q (type) THEN result := FALSE END ; - INC(i) + INC (i) END ; - IF (ReturnType=NulSym) OR q(ReturnType) + IF (ReturnType = NulSym) OR q (ReturnType) THEN RETURN( result ) ELSE @@ -6555,25 +6728,25 @@ VAR type, ReturnType: CARDINAL ; BEGIN - Assert(IsProcedure(sym)) ; + Assert (IsProcedure (sym)) ; i := 1 ; - ReturnType := GetSType(sym) ; - WHILE GetNth(sym, i)#NulSym DO - son := GetNth(sym, i) ; - type := GetSType(son) ; - p(type) ; - INC(i) + ReturnType := GetSType (sym) ; + WHILE GetNth (sym, i) # NulSym DO + son := GetNth (sym, i) ; + type := GetSType (son) ; + p (type) ; + INC (i) END ; - IF ReturnType#NulSym + IF ReturnType # NulSym THEN - p(ReturnType) + p (ReturnType) END END WalkProcedureDependants ; (* IsUnboundedDependants - returns TRUE if the symbol, sym, - q(dependants) all return TRUE. + q (dependants) all return TRUE. *) PROCEDURE IsUnboundedDependants (sym: CARDINAL; q: IsAction) : BOOLEAN ; @@ -6581,15 +6754,15 @@ VAR result: BOOLEAN ; BEGIN result := TRUE ; - IF NOT q(GetUnboundedRecordType(sym)) + IF NOT q (GetUnboundedRecordType (sym)) THEN result := FALSE END ; - IF NOT q(Cardinal) + IF NOT q (Cardinal) THEN result := FALSE END ; - IF NOT q(GetSType(sym)) + IF NOT q (GetSType (sym)) THEN result := FALSE END ; @@ -6603,9 +6776,9 @@ END IsUnboundedDependants ; PROCEDURE WalkUnboundedDependants (sym: CARDINAL; p: WalkAction) ; BEGIN - p(GetUnboundedRecordType(sym)) ; - p(Cardinal) ; - p(GetSType(sym)) + p (GetUnboundedRecordType (sym)) ; + p (Cardinal) ; + p (GetSType (sym)) END WalkUnboundedDependants ; @@ -6644,15 +6817,15 @@ VAR align: CARDINAL ; type : CARDINAL ; BEGIN - type := GetSType(sym) ; - IF type#NulSym + type := GetSType (sym) ; + IF type # NulSym THEN - p(type) + p (type) END ; - align := GetAlignment(sym) ; - IF align#NulSym + align := GetAlignment (sym) ; + IF align # NulSym THEN - p(align) + p (align) END END WalkTypeDependants ; @@ -6664,9 +6837,9 @@ END WalkTypeDependants ; PROCEDURE PoisonSymbols (sym: CARDINAL) ; BEGIN - IF IsProcedure(sym) + IF IsProcedure (sym) THEN - ForeachLocalSymDo(sym, Poison) + ForeachLocalSymDo (sym, Poison) END END PoisonSymbols ; @@ -6677,7 +6850,7 @@ END PoisonSymbols ; PROCEDURE ConstantKnownAndUsed (sym: CARDINAL; t: tree) ; BEGIN - DeclareConstantFromTree(sym, RememberConstant(t)) + DeclareConstantFromTree (sym, RememberConstant (t)) END ConstantKnownAndUsed ; @@ -6692,14 +6865,31 @@ BEGIN END InitDeclarations ; +VAR + DeclaredOutstandingTypesDiag, + DeclareTypesConstantsProceduresDiag, + DeclareTypesConstantsProceduresInRangeDiag: Diagnostic ; BEGIN + DeclaredOutstandingTypesDiag + := InitTimeDiagnostic + ('M2GCCDeclare:DeclaredOutstandingTypes', + '{1N} called {1C} times consuming {1T} ({1P})') ; + DeclareTypesConstantsProceduresInRangeDiag + := InitTimeDiagnostic + ('M2GCCDeclare:DeclareTypesConstantsProceduresInRangeDiag', + '{1N} called {1C} times consuming {1T} ({1P})') ; + DeclareTypesConstantsProceduresDiag + := InitTimeDiagnostic + ('M2GCCDeclare:DeclareTypesConstantsProceduresDiag', + '{1N} called {1C} times consuming {1T} ({1P})') ; FreeGroup := NIL ; GlobalGroup := InitGroup () ; + ChainedList := InitSet (1) ; ErrorDepList := InitSet (1) ; - ChainedList := InitSet(1) ; - WatchList := InitSet(1) ; + WatchList := InitSet (1) ; VisitedList := NIL ; - EnumerationIndex := InitIndex(1) ; + EnumerationIndex := InitIndex (1) ; HaveInitDefaultTypes := FALSE ; - recursionCaught := FALSE + recursionCaught := FALSE ; + tempset := 0 END M2GCCDeclare. diff --git a/gcc/m2/gm2-compiler/M2GenGCC.mod b/gcc/m2/gm2-compiler/M2GenGCC.mod index 2440b2acf66a..ca1c60316be8 100644 --- a/gcc/m2/gm2-compiler/M2GenGCC.mod +++ b/gcc/m2/gm2-compiler/M2GenGCC.mod @@ -35,6 +35,9 @@ FROM SymbolTable IMPORT PushSize, PopSize, PushValue, PopValue, GetLowestType, GetLocalSym, GetVarWritten, GetVarient, GetVarBackEndType, GetModuleCtors, + GetSetInWord, GetDType, + GetNthParamAnyClosest, + GetMainModule, IsUnknown, NoOfVariables, NoOfParamAny, GetParent, GetDimension, IsAModula2Type, IsModule, IsDefImp, IsType, IsModuleWithinProcedure, @@ -74,16 +77,20 @@ FROM SymbolTable IMPORT PushSize, PopSize, PushValue, PopValue, GetProcedureBuiltin, GetPriority, GetNeedSavePriority, PutConstStringKnown, + GetSetArray, PutConst, PutConstSet, PutConstructor, GetSType, GetTypeMode, HasVarParameters, CopyConstString, GetVarDeclFullTok, NulSym ; -FROM M2Batch IMPORT MakeDefinitionSource ; +FROM m2tree IMPORT debug_tree, skip_const_decl ; +FROM gcctypes IMPORT location_t, tree ; + +FROM M2Batch IMPORT MakeDefinitionSource, LookupModule ; FROM M2LexBuf IMPORT FindFileNameFromToken, TokenToLineNo, TokenToLocation, - MakeVirtualTok, UnknownTokenNo, BuiltinTokenNo ; + MakeVirtualTok, MakeVirtual2Tok, UnknownTokenNo, BuiltinTokenNo ; FROM M2Code IMPORT CodeBlock ; FROM M2Debug IMPORT Assert ; @@ -96,7 +103,8 @@ FROM M2MetaError IMPORT MetaErrorT0, MetaErrorT1, MetaErrorT2, MetaErrorT3, FROM M2Options IMPORT UnboundedByReference, PedanticCast, VerboseUnbounded, Iso, Pim, DebugBuiltins, WholeProgram, StrictTypeChecking, AutoInit, cflag, ScaffoldMain, - ScaffoldDynamic, ScaffoldStatic, GetDebugTraceQuad ; + ScaffoldDynamic, ScaffoldStatic, GetDebugTraceQuad, + OptimizeSets, GetWideset ; FROM M2Printf IMPORT printf0, printf1, printf2, printf4 ; FROM M2Quiet IMPORT qprintf0 ; @@ -131,6 +139,7 @@ FROM Lists IMPORT List, InitList, KillList, NoOfItemsInList, GetItemFromList ; FROM M2ALU IMPORT PtrToValue, + KillValue, PopInto, IsValueTypeReal, IsValueTypeSet, IsValueTypeConstructor, IsValueTypeArray, IsValueTypeRecord, IsValueTypeComplex, @@ -154,7 +163,7 @@ FROM M2GCCDeclare IMPORT WalkAction, PromoteToString, PromoteToCString, DeclareLocalVariable, CompletelyResolved, PoisonSymbols, GetTypeMin, GetTypeMax, - IsProcedureGccNested, DeclareParameters, + IsProcedureGccNested, DeclareParameters, DeclareProcedure, ConstantKnownAndUsed, PrintSym ; FROM M2Range IMPORT CodeRangeCheck, FoldRangeCheck, CodeErrorCheck, GetMinMax ; @@ -164,10 +173,11 @@ FROM m2builtins IMPORT BuiltInAlloca, GetBuiltinConst, GetBuiltinTypeInfo, BuiltinExists, BuildBuiltinTree ; -FROM m2expr IMPORT GetIntegerZero, GetIntegerOne, +FROM m2expr IMPORT GetIntegerZero, GetIntegerOne, GetWordOne, GetCardinalOne, GetPointerZero, GetCardinalZero, + GetBitsetZero, GetSizeOfInBits, TreeOverflow, FoldAndStrip, @@ -175,6 +185,7 @@ FROM m2expr IMPORT GetIntegerZero, GetIntegerOne, StringLength, AreConstantsEqual, GetCstInteger, + GetRValue, BuildForeachWordInSetDoIfExpr, BuildIfConstInVar, BuildIfVarInVar, @@ -182,10 +193,10 @@ FROM m2expr IMPORT GetIntegerZero, GetIntegerOne, BuildIfNotVarInVar, BuildBinCheckProcedure, BuildUnaryCheckProcedure, BuildBinProcedure, BuildUnaryProcedure, - BuildSetProcedure, BuildUnarySetFunction, + BuildSetProcedure, BuildAddCheck, BuildSubCheck, BuildMultCheck, BuildDivTruncCheck, BuildDivM2Check, BuildModM2Check, - BuildAdd, BuildSub, BuildMult, BuildLSL, + BuildAdd, BuildSub, BuildMult, BuildLSL, BuildMask, BuildDivCeil, BuildModCeil, BuildDivTrunc, BuildModTrunc, BuildDivFloor, BuildModFloor, BuildDivM2, BuildModM2, @@ -202,10 +213,9 @@ FROM m2expr IMPORT GetIntegerZero, GetIntegerOne, BuildEqualTo, BuildNotEqualTo, BuildIsSuperset, BuildIsNotSuperset, BuildIsSubset, BuildIsNotSubset, + BuildIfInSet, BuildIfNotInSet, BuildIndirect, BuildArray, BuildTrunc, BuildCoerce, - BuildBinaryForeachWordDo, - BuildBinarySetDo, BuildSetNegate, BuildComponentRef, BuildCap, BuildAbs, BuildIm, BuildRe, BuildCmplx, @@ -218,10 +228,12 @@ FROM gcctypes IMPORT location_t, tree ; FROM m2decl IMPORT BuildStringConstant, BuildCStringConstant, DeclareKnownConstant, GetBitsPerBitset, BuildIntegerConstant, - BuildModuleCtor, DeclareModuleCtor ; + BuildModuleCtor, DeclareModuleCtor, + DeclareKnownVariable ; FROM m2statement IMPORT BuildAsm, BuildProcedureCallTree, BuildParam, BuildFunctValue, - DoJump, BuildUnaryForeachWordDo, BuildGoto, BuildCall2, BuildCall3, + IfBitInSetJump, IfExprJump, + BuildGoto, BuildCall2, BuildCall3, BuildStart, BuildEnd, BuildCallInner, BuildStartFunctionCode, BuildEndFunctionCode, BuildAssignmentTree, DeclareLabel, @@ -240,6 +252,7 @@ FROM m2statement IMPORT BuildAsm, BuildProcedureCallTree, BuildParam, BuildFunct FROM m2type IMPORT ChainOnParamValue, GetPointerType, GetIntegerType, AddStatement, GetCardinalType, GetWordType, GetM2ZType, GetM2RType, GetM2CType, + GetBooleanFalse, BuildCharConstant, AddStringToTreeList, BuildArrayStringConstructor, GetArrayNoOfElements, GetTreeType, IsGccStrictTypeEquivalent ; @@ -250,7 +263,8 @@ FROM m2block IMPORT RememberConstant, pushGlobalScope, popGlobalScope, finishFun FROM m2misc IMPORT DebugTree ; -FROM m2convert IMPORT BuildConvert, ConvertConstantAndCheck, ToCardinal, ConvertString ; +FROM m2convert IMPORT BuildConvert, ConvertConstantAndCheck, ToCardinal, + ToBitset, ToWord, ConvertString ; FROM m2except IMPORT BuildThrow, BuildTryBegin, BuildTryEnd, BuildCatchBegin, BuildCatchEnd ; @@ -278,19 +292,24 @@ CONST CascadedDebugging = FALSE ; TYPE - DoProcedure = PROCEDURE (CARDINAL) ; - DoUnaryProcedure = PROCEDURE (CARDINAL) ; + UnaryProcedure = PROCEDURE (CARDINAL) ; + ProcedureCardinal = PROCEDURE (CARDINAL) ; + BinaryFunction = PROCEDURE (location_t, tree, tree) : tree ; + UnaryFunction = PROCEDURE (location_t, tree) : tree ; VAR Memset, Memcpy : CARDINAL ; CurrentQuadToken : CARDINAL ; UnboundedLabelNo : CARDINAL ; - LastLine : CARDINAL ;(* The Last Line number emitted with the *) - (* generated code. *) + LastLine : CARDINAL ; (* The Last Line number emitted with *) + (* the generated code. *) LastOperator : QuadOperator ; (* The last operator processed. *) - ScopeStack : StackOfWord ; (* keeps track of the current scope *) - (* under translation. *) - NoChange : BOOLEAN ; (* has any constant been resolved? *) + ScopeStack : StackOfWord ; (* keeps track of the current scope *) + (* under translation. *) + NoChange : BOOLEAN ; (* has any constant been resolved? *) + SetTemporaryNo : CARDINAL ; (* A unique number for creating set *) + (* oarecord parameter names. *) + BreakQuad : CARDINAL ; (* Allows interactive debugging. *) (* @@ -613,6 +632,7 @@ VAR BEGIN InitBuiltinSyms (BuiltinTokenNo) ; GetQuad(q, op, op1, op2, op3) ; + CheckBreak (q) ; IF op=StatementNoteOp THEN FoldStatementNote (op3) (* Will change CurrentQuadToken using op3. *) @@ -663,12 +683,12 @@ BEGIN DivFloorOp : CodeDivFloor (q, op2, op3) | ModFloorOp : CodeModFloor (q, op2, op3) | GotoOp : CodeGoto (op3) | - InclOp : CodeIncl (op1, op3) | - ExclOp : CodeExcl (op1, op3) | - NegateOp : CodeNegateChecked (q, op1, op3) | + InclOp : CodeIncl (q) | + ExclOp : CodeExcl (q) | + NegateOp : CodeNegateChecked (q) | LastForIteratorOp : CodeLastForIterator (q) | - LogicalShiftOp : CodeSetShift (q, op1, op2, op3) | - LogicalRotateOp : CodeSetRotate (q, op1, op2, op3) | + LogicalShiftOp : CodeSetShift (q) | + LogicalRotateOp : CodeSetRotate (q) | LogicalOrOp : CodeSetOr (q) | LogicalAndOp : CodeSetAnd (q) | LogicalXorOp : CodeSetSymmetricDifference (q) | @@ -923,7 +943,7 @@ BEGIN END ELSE MetaErrorT1 (tok, - 'a constraint to the GNU ASM statement must be a constant string and not a {%1Ed}', + 'a constraint to the GNU ASM statement must be a constant string and not a {%1Edv}', str) END END ; @@ -966,7 +986,7 @@ BEGIN END ELSE MetaErrorT1 (tok, - 'a constraint to the GNU ASM statement must be a constant string and not a {%1Ed}', + 'a constraint to the GNU ASM statement must be a constant string and not a {%1Edv}', str) END END ; @@ -1114,6 +1134,20 @@ BEGIN END PopScope ; +(* + GetActiveScope - +*) + +PROCEDURE GetActiveScope () : CARDINAL ; +BEGIN + IF IsEmptyWord (ScopeStack) + THEN + InternalError ('not expecting scope stack to be empty') + END ; + RETURN PeepWord (ScopeStack, 1) +END GetActiveScope ; + + (* GetCurrentScopeDescription - returns a description of the current scope. *) @@ -1671,9 +1705,9 @@ BEGIN goto tLabel fi *) - DoJump(location, BuildGreaterThan(location, ta, td), NIL, string(fLabel)) ; - DoJump(location, BuildLessThan(location, tb, tc), NIL, string(fLabel)) ; - BuildGoto(location, string(tLabel)) ; + IfExprJump (location, BuildGreaterThan (location, ta, td), string (fLabel)) ; + IfExprJump (location, BuildLessThan (location, tb, tc), string (fLabel)) ; + BuildGoto (location, string (tLabel)) ; IF CascadedDebugging THEN printf1('label used %s\n', tLabel) ; @@ -1752,15 +1786,7 @@ BEGIN END ; DeclareLabel(location, string(fLabel)) ; INC(j) - END ; -(* - nLabel := CreateLabelProcedureN(proc, "fin", UnboundedLabelNo, n+1) ; - IF CascadedDebugging - THEN - printf1('label declared %s\n', nLabel) - END ; - DeclareLabel(location, string(nLabel)) -*) + END END END BuildCascadedIfThenElsif ; @@ -2429,7 +2455,7 @@ BEGIN tmp := BuildLSL (location, tmp, bits, FALSE) END ; bits := BuildAdd (location, bits, GetSizeOfInBits (Mod2Gcc (type)), FALSE) ; - val := BuildLogicalOrAddress (location, val, tmp, FALSE) + val := BuildLogicalOrAddress (location, val, tmp) END END ; SubQuad (n) ; @@ -2522,7 +2548,7 @@ BEGIN tmp := BuildLSL (location, tmp, bits, FALSE) END ; bits := BuildAdd (location, bits, GetSizeOfInBits (Mod2Gcc (type)), FALSE) ; - val := BuildLogicalOrAddress (location, val, tmp, FALSE) + val := BuildLogicalOrAddress (location, val, tmp) END END ; SubQuad (n) ; @@ -2548,7 +2574,7 @@ END FoldMakeAdr ; procedure, op2. The number of the parameter is op1. *) -PROCEDURE doParam (quad: CARDINAL; paramtok: CARDINAL; op1, op2, op3: CARDINAL) ; +PROCEDURE doParam (paramtok: CARDINAL; quad: CARDINAL; op1, op2, op3: CARDINAL) ; VAR location: location_t ; BEGIN @@ -2706,7 +2732,7 @@ BEGIN parameter, procedure) ELSIF compatible THEN - doParam (quad, parampos, nth, procedure, parameter) + doParam (parampos, quad, nth, procedure, parameter) END END END CodeParam ; @@ -2884,17 +2910,6 @@ BEGIN END CodeAddr ; -PROCEDURE stop ; BEGIN END stop ; - -PROCEDURE CheckStop (q: CARDINAL) ; -BEGIN - IF q=3827 - THEN - stop - END -END CheckStop ; - - (* ------------------------------------------------------------------------------ := Operator @@ -2906,6 +2921,7 @@ PROCEDURE FoldBecomes (p: WalkAction; bb: BasicBlock; quad: CARDINAL) ; BEGIN IF DeclaredOperandsBecomes (p, quad) THEN + CheckBreak (quad) ; IF (NOT IsConditionalBooleanQuad (quad)) OR IsBasicBlockFirst (bb) THEN IF TypeCheckBecomes (p, quad) @@ -3484,9 +3500,15 @@ END checkBecomes ; PROCEDURE checkDeclare (sym: CARDINAL) ; BEGIN - IF IsTemporary (sym) AND IsVariableSSA (sym) AND (NOT GccKnowsAbout (sym)) + IF (sym # NulSym) AND (NOT GccKnowsAbout (sym)) THEN - DeclareLocalVariable (sym) + IF IsTemporary (sym) AND IsVariableSSA (sym) + THEN + DeclareLocalVariable (sym) + ELSIF IsProcedure (sym) + THEN + DeclareProcedure (sym) + END END END checkDeclare ; @@ -3602,6 +3624,17 @@ BEGIN END CodeBecomes ; +(* + getrvalue - +*) + +PROCEDURE getrvalue (location: location_t; + expr, type: CARDINAL; islvalue: BOOLEAN) : tree ; +BEGIN + RETURN GetRValue (location, Mod2Gcc (expr), Mod2Gcc (type), islvalue) +END getrvalue ; + + (* LValueToGenericPtr - returns a Tree representing symbol, sym. It coerces a lvalue into an internal pointer type @@ -3989,7 +4022,7 @@ BEGIN IF (righttype = NulSym) OR (NOT IsSet (SkipType (righttype))) THEN MetaErrorT1 (rightpos, - 'an {%kIN} expression is expecting {%1Etad} to be a {%kSET} type', + 'the right hand side of an {%kIN} expression is expecting {%1Ead} to be a {%kSET} type and not a {%1Etadv}', right) ; NoChange := FALSE ; SubQuad (quad) ; @@ -4000,72 +4033,259 @@ END CheckElementSetTypes ; (* - CodeBinarySet - encode a binary set arithmetic operation. + CodeBinarySet - encode a binary set AND arithmetic operation. Set operands may be longer than a word. *) -PROCEDURE CodeBinarySet (binop: BuildBinProcedure; doOp: DoProcedure; +PROCEDURE CodeBinarySet (constp: ProcedureCardinal; + binfunc: BinaryFunction; + wideprocname: Name; quad: CARDINAL) ; VAR - location : location_t ; - constExpr, - overflowChecking: BOOLEAN ; op : QuadOperator ; - virttoken, - virtexpr, - des, - left, - right, + operatorpos, + combinedpos, despos, leftpos, - rightpos, - operatorpos : CARDINAL ; + rightpos : CARDINAL ; + des, left, right: CARDINAL ; + overflowChecking, + typeChecking, + constExpr : BOOLEAN ; + location : location_t ; + settype : CARDINAL ; BEGIN - GetQuadOtok (quad, operatorpos, op, des, left, right, - overflowChecking, constExpr, - despos, leftpos, rightpos) ; - + GetQuadOTypetok (quad, operatorpos, op, + des, left, right, + overflowChecking, typeChecking, constExpr, + despos, leftpos, rightpos) ; (* Firstly ensure that constant literals are declared. *) DeclareConstant (rightpos, right) ; DeclareConstant (leftpos, left) ; DeclareConstructor (rightpos, quad, right) ; DeclareConstructor (leftpos, quad, left) ; - - virttoken := MakeVirtualTok (operatorpos, despos, rightpos) ; - location := TokenToLocation (virttoken) ; - IF CheckBinaryExpressionTypes (quad, NoWalkProcedure) + IF IsConst (des) THEN - IF IsConst (des) + combinedpos := MakeVirtual2Tok (leftpos, rightpos) ; + IF IsValueSolved (left) AND IsValueSolved (right) THEN - virtexpr := MakeVirtualTok (operatorpos, leftpos, rightpos) ; - IF IsValueSolved (left) AND IsValueSolved (right) - THEN - Assert (MixTypes (FindType (right), FindType (left), virtexpr) # NulSym) ; - PutConst (des, FindType (right)) ; - PushValue (left) ; - PushValue (right) ; - doOp (virttoken) ; - PopValue (des) ; - PutConstSet (des) - ELSE - MetaErrorT0 (virtexpr, '{%E}constant expression cannot be evaluated') - END + Assert (MixTypes (FindType (left), FindType (right), combinedpos) # NulSym) ; + PutConst (des, FindType (right)) ; + PushValue (left) ; + PushValue (right) ; + constp (combinedpos) ; + PopValue (des) ; + PutConstSet (des) ELSE - checkDeclare (des) ; - BuildBinaryForeachWordDo (location, - Mod2Gcc (SkipType (GetType (des))), - Mod2Gcc (des), Mod2Gcc (left), Mod2Gcc (right), binop, - GetMode (des) = LeftValue, - GetMode (left) = LeftValue, - GetMode (right) = LeftValue, - IsConst (des), - IsConst (left), - IsConst (right)) + MetaErrorT0 (combinedpos, '{%E}constant expression cannot be evaluated') + END + ELSE + checkDeclare (des) ; + settype := GetLType (des) ; + Assert (IsSet (settype)) ; + combinedpos := MakeVirtualTok (despos, leftpos, rightpos) ; + IF GetSetInWord (settype) + THEN + location := TokenToLocation (combinedpos) ; + SetNarrowBinary (location, binfunc, settype, des, left, right) + ELSE + SetWideBinary (combinedpos, wideprocname, settype, des, left, right) END END END CodeBinarySet ; +(* + MakeTemporarySetName - returns a Name using the template _Tset%d. +*) + +PROCEDURE MakeTemporarySetName () : Name ; +VAR + name: Name ; + s : String ; +BEGIN + INC (SetTemporaryNo) ; + s := Sprintf1 (Mark (InitString ('_Tset%d')), SetTemporaryNo) ; + name := makekey (string (s)) ; + s := KillString (s) ; + RETURN name +END MakeTemporarySetName ; + + +(* + SetWideBinary - +*) + +PROCEDURE SetWideBinary (tokenno: CARDINAL; + wideprocname: Name; + settype, des, left, right: CARDINAL) ; +BEGIN + IF OptimizeSets + THEN + IF wideprocname = MakeKey ('And') + THEN + SetWideBinaryBuiltin (tokenno, BuildLogicalAnd, des, left, right) ; + RETURN + ELSIF wideprocname = MakeKey ('Or') + THEN + SetWideBinaryBuiltin (tokenno, BuildLogicalOr, des, left, right) ; + RETURN + END + END ; + SetWideBinaryLibrary (tokenno, wideprocname, settype, des, left, right) +END SetWideBinary ; + + +(* + SetWideBinaryLibrary - call wideprocname (des, left, right) passing des, left, right + as an array of byte. +*) + +PROCEDURE SetWideBinaryLibrary (tokenno: CARDINAL; + wideprocname: Name; + settype, des, left, right: CARDINAL) ; +VAR + location : location_t ; + procedure, + param1, + param2, + param3 : CARDINAL ; + highbit, + array1, + array2, + array3, + call : tree ; +BEGIN + procedure := FromM2WIDESETImport (tokenno, wideprocname) ; + checkDeclare (procedure) ; + location := TokenToLocation (tokenno) ; + param1 := GetNthParamAnyClosest (procedure, 1, GetMainModule ()) ; + param2 := GetNthParamAnyClosest (procedure, 2, GetMainModule ()) ; + param3 := GetNthParamAnyClosest (procedure, 3, GetMainModule ()) ; + array1 := CreateSetArrayParam (location, tokenno, des, param1) ; + array2 := CreateSetArrayParam (location, tokenno, left, param2) ; + array3 := CreateSetArrayParam (location, tokenno, right, param3) ; + highbit := ToCardinal (location, CalcHighSetBit (location, settype)) ; + BuildParam (location, highbit) ; (* Parameter 4. *) + BuildParam (location, array3) ; (* Parameter 3. *) + BuildParam (location, array2) ; (* Parameter 2. *) + BuildParam (location, array1) ; (* Parameter 1. *) + call := BuildProcedureCallTree (location, Mod2Gcc (procedure), NIL) ; + SetLastFunction (NIL) ; + AddStatement (location, call) +END SetWideBinaryLibrary ; + + +(* + SetWideBinaryBuiltin - build an builtin wideset NOT operation. +*) + +PROCEDURE SetWideBinaryBuiltin (tokenno: CARDINAL; + binfunc: BinaryFunction; + des, left, right: CARDINAL) ; +VAR + location : location_t ; + byte, + lhs, rhs, + dest, + index, + high : tree ; +BEGIN + location := TokenToLocation (tokenno) ; + high := ResolveHigh (tokenno, 1, des) ; + index := GetIntegerZero (location) ; + byte := Mod2Gcc (Byte) ; + REPEAT + rhs := BuildArray (location, byte, + getrvalue (location, right, GetType (right), + GetMode (right) = LeftValue), + index, GetIntegerZero (location)) ; + lhs := BuildArray (location, byte, + getrvalue (location, left, GetType (left), + GetMode (left) = LeftValue), + index, GetIntegerZero (location)) ; + rhs := binfunc (location, lhs, rhs) ; + rhs := BuildConvert (location, byte, rhs, FALSE) ; + dest := BuildArray (location, byte, + getrvalue (location, des, GetType (des), + GetMode (des) = LeftValue), + index, GetIntegerZero (location)) ; + BuildAssignmentStatement (location, dest, rhs) ; + PushIntegerTree (index) ; + PushCard (1) ; + Addn ; + index := PopIntegerTree () + UNTIL CompareTrees (index, high) > 0 +END SetWideBinaryBuiltin ; + + +(* + SetNarrowBinary - create tree consisting of: + result := binfunc (left, right) + result, left and right can be lvalues. +*) + +PROCEDURE SetNarrowBinary (location: location_t; binfunc: BinaryFunction; + settype, result, left, right: CARDINAL) ; +VAR + isResultL, + isLeftL, + isRightL : BOOLEAN ; +BEGIN + isResultL := GetMode (result) = LeftValue ; + isLeftL := GetMode (left) = LeftValue ; + isRightL := GetMode (right) = LeftValue ; + BuildAssignmentStatement (location, + getrvalue (location, result, settype, isResultL), + binfunc (location, + getrvalue (location, left, settype, isLeftL), + getrvalue (location, right, settype, isRightL))) +END SetNarrowBinary ; + + +(* + CreateSetArrayParam - return a gcc tree containing value contained in an unbounded + array parameter. +*) + +PROCEDURE CreateSetArrayParam (location: location_t; tokenno: CARDINAL; + value, param: CARDINAL) : tree ; +VAR + dataAddress, + designator, + oarecord : tree ; + unbounded, + HighField, + scope : CARDINAL ; +BEGIN + unbounded := GetType (param) ; + Assert (IsUnbounded (unbounded)) ; + scope := GetActiveScope () ; + (* Declare oarecord which has a pointer and high field. This will be passed as + a parameter into the runtime set procedure and appear as an ARRAY OF BYTE. *) + oarecord := DeclareKnownVariable (location, KeyToCharStar (MakeTemporarySetName ()), + Mod2Gcc (unbounded), + FALSE, FALSE, TRUE, IsProcedure (scope), + Mod2Gcc (scope), NIL) ; + (* Designator is oarecord.address. *) + designator := BuildComponentRef (location, oarecord, + Mod2Gcc (GetUnboundedAddressOffset (unbounded))) ; + IF GetMode (value) = LeftValue + THEN + (* Already pointing to the data. *) + dataAddress := Mod2Gcc (value) + ELSE + dataAddress := BuildAddr (location, Mod2Gcc (value), FALSE) + END ; + BuildAssignmentStatement (location, designator, dataAddress) ; + HighField := GetUnboundedHighOffset (unbounded, 1) ; + designator := BuildComponentRef (location, oarecord, Mod2Gcc (HighField)) ; + BuildAssignmentStatement (location, designator, + ResolveHigh (tokenno, 1, value)) ; + RETURN oarecord +END CreateSetArrayParam ; + + (* CheckUnaryOperand - checks to see whether operand is using a generic type. *) @@ -4367,7 +4587,7 @@ PROCEDURE FoldMult (tokenno: CARDINAL; p: WalkAction; BEGIN IF BinaryOperands (quad, op2, op3) THEN - FoldBinary(tokenno, p, BuildMult, quad, op1, op2, op3) + FoldBinary (tokenno, p, BuildMult, quad, op1, op2, op3) END END FoldMult ; @@ -4478,11 +4698,11 @@ END CodeModM2Check ; PROCEDURE BinaryOperandRealFamily (op: CARDINAL) : BOOLEAN ; VAR - t: CARDINAL ; + type: CARDINAL ; BEGIN - t := SkipType(GetType(op)) ; - RETURN( IsComplexType(t) OR IsComplexN(t) OR - IsRealType(t) OR IsRealN(t) ) + type := GetDType (op) ; + RETURN( IsComplexType (type) OR IsComplexN (type) OR + IsRealType (type) OR IsRealN (type) ) END BinaryOperandRealFamily ; @@ -4596,7 +4816,7 @@ PROCEDURE FoldModTrunc (tokenno: CARDINAL; p: WalkAction; BEGIN IF BinaryOperands (quad, op2, op3) THEN - FoldBinary(tokenno, p, BuildModTrunc, quad, op1, op2, op3) + FoldBinary (tokenno, p, BuildModTrunc, quad, op1, op2, op3) END END FoldModTrunc ; @@ -4802,15 +5022,27 @@ PROCEDURE FoldTBitsize (tokenno: CARDINAL; p: WalkAction; VAR location: location_t ; BEGIN - location := TokenToLocation(tokenno) ; - TryDeclareType (type) ; - type := GetDType (type) ; - IF CompletelyResolved (type) + location := TokenToLocation (tokenno) ; + IF IsType (type) OR IsVar (type) OR IsConst (type) THEN - AddModGcc (res, BuildSystemTBitSize (location, Mod2Gcc (type))) ; - p (res) ; - NoChange := FALSE ; - SubQuad (quad) + IF GetDType (type) = NulSym + THEN + MetaErrorT1 (tokenno, 'unknown type in TBITSIZE parameter {%1Ead}', type) ; + NoChange := FALSE ; + SubQuad (quad) + END ; + type := GetDType (type) + END ; + IF type # NulSym + THEN + TryDeclareType (type) ; + IF CompletelyResolved (type) + THEN + AddModGcc (res, BuildSystemTBitSize (location, Mod2Gcc (type))) ; + p (res) ; + NoChange := FALSE ; + SubQuad (quad) + END END END FoldTBitsize ; @@ -5130,41 +5362,41 @@ END CodeRestorePriority ; FoldBinarySet - attempts to fold set arithmetic it removes the quad if successful. *) -PROCEDURE FoldBinarySet (tokenno: CARDINAL; p: WalkAction; op: DoProcedure; +PROCEDURE FoldBinarySet (tokenno: CARDINAL; p: WalkAction; op: ProcedureCardinal; quad: CARDINAL; op1, op2, op3: CARDINAL) ; VAR location: location_t ; BEGIN (* firstly try and ensure that constants are declared *) - TryDeclareConstant(tokenno, op2) ; - TryDeclareConstant(tokenno, op3) ; - location := TokenToLocation(tokenno) ; + TryDeclareConstant (tokenno, op2) ; + TryDeclareConstant (tokenno, op3) ; + location := TokenToLocation (tokenno) ; - IF GccKnowsAbout(op2) AND GccKnowsAbout(op3) + IF GccKnowsAbout (op2) AND GccKnowsAbout (op3) THEN IF CheckBinaryExpressionTypes (quad, p) THEN - IF IsConst(op2) AND IsConstSet(op2) AND - IsConst(op3) AND IsConstSet(op3) AND - IsConst(op1) + IF IsConst (op2) AND IsConstSet (op2) AND + IsConst (op3) AND IsConstSet (op3) AND + IsConst (op1) THEN - IF IsValueSolved(op2) AND IsValueSolved(op3) + IF IsValueSolved (op2) AND IsValueSolved (op3) THEN - Assert(MixTypes(FindType(op3), FindType(op2), tokenno)#NulSym) ; - PutConst(op1, MixTypes(FindType(op3), FindType(op2), tokenno)) ; - PushValue(op2) ; - PushValue(op3) ; - op(tokenno) ; - PopValue(op1) ; - PushValue(op1) ; - PutConstSet(op1) ; - AddModGcc(op1, - DeclareKnownConstant(location, - Mod2Gcc(GetType(op3)), - PopSetTree(tokenno))) ; - p(op1) ; + Assert (MixTypes (FindType (op3), FindType (op2), tokenno) # NulSym) ; + PutConst (op1, MixTypes (FindType (op3), FindType (op2), tokenno)) ; + PushValue (op2) ; + PushValue (op3) ; + op (tokenno) ; + PopValue (op1) ; + PushValue (op1) ; + PutConstSet (op1) ; + AddModGcc (op1, + DeclareKnownConstant (location, + Mod2Gcc (GetType (op3)), + PopSetTree (tokenno))) ; + p (op1) ; NoChange := FALSE ; - SubQuad(quad) + SubQuad (quad) END END END @@ -5189,7 +5421,7 @@ END FoldSetOr ; PROCEDURE CodeSetOr (quad: CARDINAL) ; BEGIN - CodeBinarySet (BuildLogicalOr, SetOr, quad) + CodeBinarySet (SetOr, BuildLogicalOr, MakeKey ("Or"), quad) END CodeSetOr ; @@ -5200,7 +5432,7 @@ END CodeSetOr ; PROCEDURE FoldSetAnd (tokenno: CARDINAL; p: WalkAction; quad: CARDINAL; op1, op2, op3: CARDINAL) ; BEGIN - FoldBinarySet(tokenno, p, SetAnd, quad, op1, op2, op3) + FoldBinarySet (tokenno, p, SetAnd, quad, op1, op2, op3) END FoldSetAnd ; @@ -5210,85 +5442,175 @@ END FoldSetAnd ; PROCEDURE CodeSetAnd (quad: CARDINAL) ; BEGIN - CodeBinarySet (BuildLogicalAnd, SetAnd, quad) + CodeBinarySet (SetAnd, BuildLogicalAnd, MakeKey ("And"), quad) END CodeSetAnd ; (* - CodeBinarySetShift - encode a binary set arithmetic operation. - The set maybe larger than a machine word - and the value of one word may effect the - values of another - ie shift and rotate. - Set sizes of a word or less are evaluated - with binop, whereas multiword sets are - evaluated by M2RTS. + CalcHighSetBit - calculate the most significant bit used in a set starting from bit zero. +*) + +PROCEDURE CalcHighSetBit (location: location_t; settype: CARDINAL) : tree ; +BEGIN + PushValue (GetTypeMax (SkipType (GetType (settype)))) ; + PushIntegerTree (BuildConvert (location, GetM2ZType (), PopIntegerTree (), FALSE)) ; + PushValue (GetTypeMin (SkipType (GetType (settype)))) ; + PushIntegerTree (BuildConvert (location, GetM2ZType (), PopIntegerTree (), FALSE)) ; + Sub ; + RETURN PopIntegerTree () +END CalcHighSetBit ; + + +(* + CalcBitsInSet - returns the number of minimum number of bits used to represent a set. +*) + +PROCEDURE CalcBitsInSet (location: location_t; settype: CARDINAL) : tree ; +BEGIN + PushIntegerTree (BuildConvert (location, GetM2ZType (), + CalcHighSetBit (location, settype), FALSE)) ; + PushCard (1) ; + PushIntegerTree (BuildConvert (location, GetM2ZType (), PopIntegerTree (), FALSE)) ; + Addn ; + RETURN PopIntegerTree () +END CalcBitsInSet ; + + +(* + SetWideSetShiftRotate - generate a call: + M2WIDESET.name (dest, src, HIGHBIT (settype), count). *) -PROCEDURE CodeBinarySetShift (binop: BuildSetProcedure; - doOp : DoProcedure; - var, left, right: Name; - quad: CARDINAL; - op1, op2, op3: CARDINAL) ; +PROCEDURE SetWideSetShiftRotate (tokenno: CARDINAL; name: Name; + settype, dest, src, count: CARDINAL) ; VAR - nBits, - unbounded, - leftproc, - rightproc, - varproc : tree ; + procedure, + param1, + param2 : CARDINAL ; + array1, + array2, + call, + highbit : tree ; location : location_t ; BEGIN - (* firstly ensure that constant literals are declared *) - DeclareConstant(CurrentQuadToken, op3) ; - DeclareConstant(CurrentQuadToken, op2) ; - DeclareConstructor(CurrentQuadToken, quad, op3) ; - DeclareConstructor(CurrentQuadToken, quad, op2) ; - location := TokenToLocation(CurrentQuadToken) ; + procedure := FromM2WIDESETImport (tokenno, name) ; + location := TokenToLocation (tokenno) ; + param1 := GetNthParamAnyClosest (procedure, 1, GetMainModule ()) ; + param2 := GetNthParamAnyClosest (procedure, 2, GetMainModule ()) ; + array1 := CreateSetArrayParam (location, tokenno, dest, param1) ; + array2 := CreateSetArrayParam (location, tokenno, src, param2) ; + highbit := CalcHighSetBit (location, settype) ; + BuildParam (location, ToCardinal (location, Mod2Gcc (count))) ; (* Parameter 4. *) + BuildParam (location, ToCardinal (location, highbit)) ; (* Parameter 3. *) + BuildParam (location, array2) ; (* Parameter 2. *) + BuildParam (location, array1) ; (* Parameter 1. *) + call := BuildProcedureCallTree (location, Mod2Gcc (procedure), NIL) ; + SetLastFunction (NIL) ; + AddStatement (location, call) +END SetWideSetShiftRotate ; - IF IsConst(op1) - THEN - IF IsValueSolved(op2) AND IsValueSolved(op3) - THEN - Assert(MixTypes(FindType(op3), - FindType(op2), CurrentQuadToken)#NulSym) ; - PutConst(op1, FindType(op3)) ; - PushValue(op2) ; - PushValue(op3) ; - doOp(CurrentQuadToken) ; - PopValue(op1) ; - PutConstSet(op1) + +(* + CodeNarrowSetShift - +*) + +PROCEDURE CodeNarrowSetShift (tokenno: CARDINAL; settype: CARDINAL; + dest, src, count: CARDINAL) ; +VAR + location: location_t ; + nbits : tree ; +BEGIN + location := TokenToLocation (tokenno) ; + nbits := CalcBitsInSet (location, settype) ; + BuildLogicalShift (location, Mod2Gcc (dest), Mod2Gcc (src), Mod2Gcc (count), nbits, FALSE) +END CodeNarrowSetShift ; + + +(* + CodeNarrowSetRotate - +*) + +PROCEDURE CodeNarrowSetRotate (tokenno: CARDINAL; settype: CARDINAL; + dest, src, count: CARDINAL) ; +VAR + location: location_t ; + nbits : tree ; +BEGIN + location := TokenToLocation (tokenno) ; + nbits := CalcBitsInSet (location, settype) ; + BuildLogicalRotate (location, Mod2Gcc (dest), Mod2Gcc (src), Mod2Gcc (count), nbits, FALSE) +END CodeNarrowSetRotate ; + + +(* + CodeBinarySetShiftRotate - encode a binary set arithmetic operation. +*) + +PROCEDURE CodeBinarySetShiftRotate (quad: CARDINAL; isshift: BOOLEAN) ; +VAR + op : QuadOperator ; + combined, + lastpos, destpos, + srcpos, countpos: CARDINAL ; + dest, src, count: CARDINAL ; + overflowChecking, + constExpr : BOOLEAN ; + settype : CARDINAL ; +BEGIN + GetQuadOtok (quad, lastpos, op, dest, src, count, + overflowChecking, constExpr, + destpos, srcpos, countpos) ; + + (* Firstly ensure that constant literals are declared. *) + DeclareConstant (countpos, count) ; + DeclareConstant (srcpos, src) ; + DeclareConstructor (countpos, quad, count) ; + DeclareConstructor (srcpos, quad, src) ; + + IF IsConst (dest) + THEN + combined := MakeVirtual2Tok (srcpos, countpos) ; + IF IsValueSolved (src) AND IsValueSolved (count) + THEN + Assert (MixTypes (FindType (count), + FindType (src), combined) # NulSym) ; + PutConst (dest, FindType (count)) ; + PushValue (src) ; + PushValue (count) ; + IF isshift + THEN + SetShift (combined) + ELSE + SetRotate (combined) + END ; + PopValue (dest) ; + PutConstSet (dest) ELSE - MetaErrorT0 (CurrentQuadToken, '{%E}constant expression cannot be evaluated') + MetaErrorT0 (combined, '{%E}constant expression cannot be evaluated') END ELSE - varproc := Mod2Gcc(FromModuleGetSym(CurrentQuadToken, var, System)) ; - leftproc := Mod2Gcc(FromModuleGetSym(CurrentQuadToken, left, System)) ; - rightproc := Mod2Gcc(FromModuleGetSym(CurrentQuadToken, right, System)) ; - unbounded := Mod2Gcc(GetType(GetNthParamAny (FromModuleGetSym(CurrentQuadToken, - var, System), 1))) ; - PushValue(GetTypeMax(SkipType(GetType(op1)))) ; - PushIntegerTree(BuildConvert(location, GetM2ZType(), PopIntegerTree(), FALSE)) ; - - PushValue(GetTypeMin(SkipType(GetType(op1)))) ; - PushIntegerTree(BuildConvert(location, GetM2ZType(), PopIntegerTree(), FALSE)) ; - Sub ; - PushCard(1) ; - PushIntegerTree(BuildConvert(location, GetM2ZType(), PopIntegerTree(), FALSE)) ; - Addn ; - nBits := PopIntegerTree() ; - BuildBinarySetDo(location, - Mod2Gcc(SkipType(GetType(op1))), - Mod2Gcc(op1), - Mod2Gcc(op2), - Mod2Gcc(op3), - binop, - GetMode(op1)=LeftValue, - GetMode(op2)=LeftValue, - GetMode(op3)=LeftValue, - nBits, - unbounded, - varproc, leftproc, rightproc) + combined := MakeVirtualTok (destpos, srcpos, countpos) ; + settype := GetDType (dest) ; + Assert (IsSet (settype)) ; + (* Check for narrow and wide sets and call M2WIDESET if appropriate. *) + IF GetSetInWord (settype) + THEN + IF isshift + THEN + CodeNarrowSetShift (combined, settype, dest, src, count) + ELSE + CodeNarrowSetRotate (combined, settype, dest, src, count) + END + ELSE + IF isshift + THEN + SetWideSetShiftRotate (combined, MakeKey ('Shift'), settype, dest, src, count) + ELSE + SetWideSetShiftRotate (combined, MakeKey ('Rotate'), settype, dest, src, count) + END + END END -END CodeBinarySetShift ; +END CodeBinarySetShiftRotate ; (* @@ -5296,9 +5618,9 @@ END CodeBinarySetShift ; *) PROCEDURE FoldSetShift (tokenno: CARDINAL; p: WalkAction; - quad: CARDINAL; op1, op2, op3: CARDINAL) ; + quad: CARDINAL; Dest, Src, ShiftCount: CARDINAL) ; BEGIN - FoldBinarySet(tokenno, p, SetShift, quad, op1, op2, op3) + FoldBinarySet (tokenno, p, SetShift, quad, Dest, Src, ShiftCount) END FoldSetShift ; @@ -5306,14 +5628,9 @@ END FoldSetShift ; CodeSetShift - encode set arithmetic shift. *) -PROCEDURE CodeSetShift (quad: CARDINAL; op1, op2, op3: CARDINAL) ; +PROCEDURE CodeSetShift (quad: CARDINAL) ; BEGIN - CodeBinarySetShift (BuildLogicalShift, - SetShift, - MakeKey('ShiftVal'), - MakeKey('ShiftLeft'), - MakeKey('ShiftRight'), - quad, op1, op2, op3) + CodeBinarySetShiftRotate (quad, TRUE) END CodeSetShift ; @@ -5322,9 +5639,9 @@ END CodeSetShift ; *) PROCEDURE FoldSetRotate (tokenno: CARDINAL; p: WalkAction; - quad: CARDINAL; op1, op2, op3: CARDINAL) ; + quad: CARDINAL; Dest, Src, RotateCount: CARDINAL) ; BEGIN - FoldBinarySet(tokenno, p, SetRotate, quad, op1, op2, op3) + FoldBinarySet (tokenno, p, SetRotate, quad, Dest, Src, RotateCount) END FoldSetRotate ; @@ -5332,14 +5649,9 @@ END FoldSetRotate ; CodeSetRotate - encode set arithmetic rotate. *) -PROCEDURE CodeSetRotate (quad: CARDINAL; op1, op2, op3: CARDINAL) ; +PROCEDURE CodeSetRotate (quad: CARDINAL) ; BEGIN - CodeBinarySetShift (BuildLogicalRotate, - SetRotate, - MakeKey ('RotateVal'), - MakeKey ('RotateLeft'), - MakeKey ('RotateRight'), - quad, op1, op2, op3) + CodeBinarySetShiftRotate (quad, FALSE) END CodeSetRotate ; @@ -5362,7 +5674,8 @@ END FoldSetLogicalDifference ; PROCEDURE CodeSetLogicalDifference (quad: CARDINAL) ; BEGIN - CodeBinarySet (BuildLogicalDifference, SetDifference, quad) + CodeBinarySet (SetAnd, BuildLogicalDifference, + MakeKey ("LogicalDifference"), quad) END CodeSetLogicalDifference ; @@ -5379,11 +5692,13 @@ END FoldSymmetricDifference ; (* CodeSetSymmetricDifference - code set difference. + A logical xor expression. *) PROCEDURE CodeSetSymmetricDifference (quad: CARDINAL) ; BEGIN - CodeBinarySet (BuildSymmetricDifference, SetSymmetricDifference, quad) + CodeBinarySet (SetSymmetricDifference, BuildSymmetricDifference, + MakeKey ("SymmetricDifference"), quad) END CodeSetSymmetricDifference ; @@ -5392,15 +5707,19 @@ END CodeSetSymmetricDifference ; Set operands may be longer than a word. *) -PROCEDURE CodeUnarySet (unop: BuildUnarySetFunction; constop: DoUnaryProcedure; +PROCEDURE CodeUnarySet (constop: ProcedureCardinal; + unfunc: UnaryFunction; + tokenno: CARDINAL; + wideprocname: Name; quad: CARDINAL; result, expr: CARDINAL) ; VAR location: location_t ; + settype : CARDINAL ; BEGIN - (* firstly ensure that constant literals are declared *) - DeclareConstant (CurrentQuadToken, expr) ; - DeclareConstructor (CurrentQuadToken, quad, expr) ; - location := TokenToLocation (CurrentQuadToken) ; + (* Firstly ensure that constant literals are declared. *) + DeclareConstant (tokenno, expr) ; + DeclareConstructor (tokenno, quad, expr) ; + location := TokenToLocation (tokenno) ; IF IsConst (result) THEN @@ -5409,68 +5728,202 @@ BEGIN Assert (FindType (expr) # NulSym) ; PutConst (result, FindType (expr)) ; PushValue (expr) ; - constop (CurrentQuadToken) ; + constop (tokenno) ; PopValue (result) ; PushValue (result) ; PutConstSet (result) ; ConstantKnownAndUsed (result, - DeclareKnownConstant(location, - Mod2Gcc (GetType (expr)), - PopSetTree (CurrentQuadToken))) + DeclareKnownConstant (location, + Mod2Gcc (GetType (expr)), + PopSetTree (tokenno))) ELSE - MetaErrorT0 (CurrentQuadToken, + MetaErrorT0 (tokenno, '{%E}constant expression cannot be evaluated') END ELSE checkDeclare (result) ; - BuildUnaryForeachWordDo (location, - Mod2Gcc (GetType (result)), Mod2Gcc (result), Mod2Gcc (expr), unop, - GetMode(result) = LeftValue, GetMode(expr) = LeftValue, - IsConst (result), IsConst (expr)) + settype := GetLType (result) ; + Assert (IsSet (settype)) ; + IF GetSetInWord (settype) + THEN + SetNarrowUnary (location, unfunc, settype, result, expr) + ELSE + SetWideUnary (tokenno, wideprocname, settype, result, expr) + END END END CodeUnarySet ; (* - FoldIncl - check whether we can fold the InclOp. - result := result + (1 << expr) + FromM2WIDESETImport - returns M2WIDESET.name. *) -PROCEDURE FoldIncl (tokenno: CARDINAL; p: WalkAction; - quad: CARDINAL; result, expr: CARDINAL) ; +PROCEDURE FromM2WIDESETImport (tokenno: CARDINAL; name: Name) : CARDINAL ; +VAR + sym, module: CARDINAL ; BEGIN - (* firstly ensure that constant literals are declared *) - TryDeclareConstant (tokenno, expr) ; - IF IsConst (result) AND IsConst (expr) + sym := NulSym ; + IF GetWideset () THEN - IF GccKnowsAbout (expr) AND IsValueSolved (result) + module := MakeDefinitionSource (tokenno, MakeKey ("M2WIDESET")) ; + sym := FromModuleGetSym (tokenno, name, module) ; + IF IsUnknown (sym) THEN - (* fine, we can take advantage of this and fold constants *) - PushValue (result) ; - AddBit (tokenno, expr) ; - AddModGcc (result, PopSetTree(tokenno)) ; - p (result) ; - NoChange := FALSE ; - SubQuad (quad) + MetaErrorT2 (tokenno, 'procedure function {%1Aad} is not available from {%2ad}', + sym, module) END - END -END FoldIncl ; + ELSE + MetaErrorT0 (tokenno, '{%0A}wideset is not available due to -fno-wideset') + END ; + RETURN sym +END FromM2WIDESETImport ; (* - FoldIfLess - check to see if it is possible to evaluate - if op1 < op2 then goto op3. + SetWideUnaryLibrary - call wideprocname (result, expr) passing result and expr + as an array of byte. *) -PROCEDURE FoldIfLess (tokenno: CARDINAL; - quad: CARDINAL; left, right, destQuad: CARDINAL) ; -BEGIN - (* Firstly ensure that constant literals are declared. *) - TryDeclareConstant(tokenno, left) ; - TryDeclareConstant(tokenno, right) ; - IF IsConst (left) AND IsConst (right) - THEN - IF IsValueSolved (left) AND IsValueSolved (right) +PROCEDURE SetWideUnaryLibrary (tokenno: CARDINAL; + wideprocname: Name; + settype, result, expr: CARDINAL) ; +VAR + location : location_t ; + procedure, + param1, + param2 : CARDINAL ; + highbit, + array1, + array2, + call : tree ; +BEGIN + procedure := FromM2WIDESETImport (tokenno, wideprocname) ; + checkDeclare (procedure) ; + location := TokenToLocation (tokenno) ; + highbit := ToCardinal (location, CalcBitsInSet (location, settype)) ; + param1 := GetNthParamAnyClosest (procedure, 1, GetMainModule ()) ; + param2 := GetNthParamAnyClosest (procedure, 2, GetMainModule ()) ; + array1 := CreateSetArrayParam (location, tokenno, result, param1) ; + array2 := CreateSetArrayParam (location, tokenno, expr, param2) ; + BuildParam (location, highbit) ; (* 3rd Parameter. *) + BuildParam (location, array2) ; (* 2nd Parameter. *) + BuildParam (location, array1) ; (* 1st Parameter. *) + call := BuildProcedureCallTree (location, Mod2Gcc (procedure), NIL) ; + SetLastFunction (NIL) ; + AddStatement (location, call) +END SetWideUnaryLibrary ; + + +(* + SetWideUnaryBuiltinNot - build an builtin wideset NOT operation. +*) + +PROCEDURE SetWideUnaryBuiltinNot (tokenno: CARDINAL; result, expr: CARDINAL) ; +VAR + location : location_t ; + byte, + lhs, rhs, + index, + high : tree ; +BEGIN + location := TokenToLocation (tokenno) ; + high := ResolveHigh (tokenno, 1, result) ; + index := GetIntegerZero (location) ; + byte := Mod2Gcc (Byte) ; + REPEAT + rhs := BuildArray (location, byte, Mod2Gcc (expr), + index, GetIntegerZero (location)) ; + rhs := BuildSetNegate (location, rhs) ; + rhs := BuildConvert (location, byte, rhs, FALSE) ; + lhs := BuildArray (location, byte, Mod2Gcc (result), + index, GetIntegerZero (location)) ; + BuildAssignmentStatement (location, lhs, rhs) ; + PushIntegerTree (index) ; + PushCard (1) ; + Addn ; + index := PopIntegerTree () + UNTIL CompareTrees (index, high) > 0 +END SetWideUnaryBuiltinNot ; + + +(* + SetWideUnary - either call the library wideprocname or the builtin + version depending upon the optimization setting. +*) + +PROCEDURE SetWideUnary (tokenno: CARDINAL; + wideprocname: Name; + settype, result, expr: CARDINAL) ; +BEGIN + IF OptimizeSets AND (wideprocname = MakeKey ('Not')) + THEN + SetWideUnaryBuiltinNot (tokenno, result, expr) + ELSE + SetWideUnaryLibrary (tokenno, wideprocname, settype, result, expr) + END +END SetWideUnary ; + + +(* + SetNarrowUnary - create tree consisting of: + result := unfunc (expr) + result and expr can be lvalues. +*) + +PROCEDURE SetNarrowUnary (location: location_t; unfunc: UnaryFunction; + settype, result, expr: CARDINAL) ; +VAR + isResultL, + isExprL : BOOLEAN ; +BEGIN + isResultL := GetMode (result) = LeftValue ; + isExprL := GetMode (expr) = LeftValue ; + BuildAssignmentStatement (location, getrvalue (location, result, settype, isResultL), + unfunc (location, + getrvalue (location, expr, settype, isExprL))) +END SetNarrowUnary ; + + +(* + FoldIncl - check whether we can fold the InclOp. + result := result + (1 << expr) +*) + +PROCEDURE FoldIncl (tokenno: CARDINAL; p: WalkAction; + quad: CARDINAL; result, expr: CARDINAL) ; +BEGIN + (* firstly ensure that constant literals are declared *) + TryDeclareConstant (tokenno, expr) ; + IF IsConst (result) AND IsConst (expr) + THEN + IF GccKnowsAbout (expr) AND IsValueSolved (result) + THEN + (* fine, we can take advantage of this and fold constants *) + PushValue (result) ; + AddBit (tokenno, expr) ; + AddModGcc (result, PopSetTree (tokenno)) ; + p (result) ; + NoChange := FALSE ; + SubQuad (quad) + END + END +END FoldIncl ; + + +(* + FoldIfLess - check to see if it is possible to evaluate + if op1 < op2 then goto op3. +*) + +PROCEDURE FoldIfLess (tokenno: CARDINAL; + quad: CARDINAL; left, right, destQuad: CARDINAL) ; +BEGIN + (* Firstly ensure that constant literals are declared. *) + TryDeclareConstant(tokenno, left) ; + TryDeclareConstant(tokenno, right) ; + IF IsConst (left) AND IsConst (right) + THEN + IF IsValueSolved (left) AND IsValueSolved (right) THEN (* We can take advantage of the known values and evaluate the condition. *) PushValue (left) ; @@ -5661,8 +6114,8 @@ PROCEDURE FoldIfEqu (tokenno: CARDINAL; left, right, destQuad: CARDINAL) ; BEGIN (* Firstly ensure that constant literals are declared. *) - TryDeclareConstant(tokenno, left) ; - TryDeclareConstant(tokenno, right) ; + TryDeclareConstant (tokenno, left) ; + TryDeclareConstant (tokenno, right) ; IF IsConst (left) AND IsConst (right) THEN IF IsValueSolved (left) AND IsValueSolved (right) @@ -5693,8 +6146,8 @@ PROCEDURE FoldIfNotEqu (tokenno: CARDINAL; left, right, destQuad: CARDINAL) ; BEGIN (* Firstly ensure that constant literals are declared. *) - TryDeclareConstant(tokenno, left) ; - TryDeclareConstant(tokenno, right) ; + TryDeclareConstant (tokenno, left) ; + TryDeclareConstant (tokenno, right) ; IF IsConst (left) AND IsConst (right) THEN IF IsValueSolved (left) AND IsValueSolved (right) @@ -5723,93 +6176,256 @@ PROCEDURE GetSetLimits (set: CARDINAL; VAR low, high: CARDINAL) ; VAR type: CARDINAL ; BEGIN - type := GetType(set) ; - IF IsSubrange(type) + type := GetType (set) ; + IF IsSubrange (type) THEN - GetSubrange(type, high, low) ; + GetSubrange (type, high, low) ; ELSE - low := GetTypeMin(type) ; - high := GetTypeMax(type) + low := GetTypeMin (type) ; + high := GetTypeMax (type) END END GetSetLimits ; (* - GetFieldNo - returns the field number in the, set, which contains, element. + IsElementInRange - returns TRUE if expr references a bit in setvar + which is in the range [low..high]. If expr is a + variable it returns TRUE. FALSE is returned if we + know expr to be out of bounds. *) -PROCEDURE GetFieldNo (tokenno: CARDINAL; element: CARDINAL; set: CARDINAL; VAR offset: tree) : INTEGER ; +PROCEDURE IsElementInRange (tokenno: CARDINAL; settype, setvar, expr: CARDINAL) : BOOLEAN ; VAR - low, high, bpw, c: CARDINAL ; - location : location_t ; + low, + high: CARDINAL ; BEGIN - location := TokenToLocation(tokenno) ; - bpw := GetBitsPerBitset() ; - GetSetLimits(set, low, high) ; + IF IsConst (expr) + THEN + GetSetLimits (settype, low, high) ; + PushValue (expr) ; + PushValue (high) ; + IF Gre (tokenno) + THEN + MetaErrorT1 (tokenno, 'bit exceeds the range of set {%1Eatd}', setvar) ; + RETURN FALSE + END ; + PushValue (expr) ; + PushValue (low) ; + IF Less (tokenno) + THEN + MetaErrorT1 (tokenno, 'bit underflows the range of set {%1Eatd}', setvar) ; + RETURN FALSE + END + END ; + RETURN TRUE +END IsElementInRange ; - (* check element is legal *) - PushValue(element) ; - PushValue(low) ; - IF Less(tokenno) - THEN - (* out of range *) - RETURN( -1 ) +(* + SetElementToBit - +*) + +PROCEDURE SetElementToBit (location: location_t; settype, expr: CARDINAL) : tree ; +VAR + lowelement, highelement: CARDINAL ; + low : tree ; +BEGIN + GetSetLimits (settype, lowelement, highelement) ; + PushValue (lowelement) ; + low := PopIntegerTree () ; + RETURN BuildSub (location, ToCardinal (location, Mod2Gcc (expr)), + ToCardinal (location, low), FALSE) +END SetElementToBit ; + + +(* + CodeNarrowIncl - result |= (1 << expr). +*) + +PROCEDURE CodeNarrowIncl (location: location_t; settype, result, expr: CARDINAL) ; +VAR + bit : tree ; + isLvalue: BOOLEAN ; +BEGIN + bit := SetElementToBit (location, settype, expr) ; + isLvalue := GetMode (result) = LeftValue ; + BuildAssignmentStatement (location, getrvalue (location, result, settype, isLvalue), + ToBitset (location, BuildLogicalOr (location, + getrvalue (location, result, settype, isLvalue), + BuildLSL (location, GetWordOne (location), + bit, FALSE)))) +END CodeNarrowIncl ; + + +(* + CodeNarrowExcl - result &= (~ (1 << expr)). +*) + +PROCEDURE CodeNarrowExcl (location: location_t; settype, result, expr: CARDINAL) ; +VAR + bit, mask: tree ; + isLvalue : BOOLEAN ; +BEGIN + bit := SetElementToBit (location, settype, expr) ; + mask := BuildSetNegate (location, + BuildLSL (location, GetWordOne (location), + ToWord (location, bit), FALSE)) ; + isLvalue := GetMode (result) = LeftValue ; + BuildAssignmentStatement (location, getrvalue (location, result, settype, isLvalue), + ToBitset (location, BuildLogicalAnd (location, + getrvalue (location, result, settype, isLvalue), + mask))) +END CodeNarrowExcl ; + + +(* + SetWideUnaryBuiltinIncl - +*) + +PROCEDURE SetWideUnaryBuiltinIncl (location: location_t; dest, bitno: tree) ; +BEGIN + BuildAssignmentStatement (location, dest, + BuildConvert (location, Mod2Gcc (Byte), + BuildLogicalOr (location, + dest, + BuildLSL (location, GetWordOne (location), + bitno, FALSE)), + FALSE)) +END SetWideUnaryBuiltinIncl ; + + +(* + SetWideUnaryBuiltinExcl - +*) + +PROCEDURE SetWideUnaryBuiltinExcl (location: location_t; dest, bitno: tree) ; +VAR + mask: tree ; +BEGIN + mask := BuildSetNegate (location, + BuildLSL (location, GetWordOne (location), + ToWord (location, bitno), FALSE)) ; + BuildAssignmentStatement (location, dest, + BuildConvert (location, Mod2Gcc (Byte), + BuildLogicalAnd (location, dest, mask), + FALSE)) +END SetWideUnaryBuiltinExcl ; + + +(* + SetWideUnaryBuiltinIncl - +*) + +PROCEDURE SetWideUnaryBuiltinInclExcl (tokenno: CARDINAL; + settype, des, expr: CARDINAL; + incl: BOOLEAN) ; +VAR + bitsperbyte, + byteno, + bitno, + dest, + bit : tree ; + location: location_t ; +BEGIN + location := TokenToLocation (tokenno) ; + bit := ToCardinal (location, SetElementToBit (location, settype, expr)) ; + bitsperbyte := ToCardinal (location, GetSizeOfInBits (Mod2Gcc (Byte))) ; + byteno := BuildDivFloor (location, bit, bitsperbyte, FALSE) ; + bitno := BuildModFloor (location, bit, bitsperbyte, FALSE) ; + dest := BuildArray (location, Mod2Gcc (Byte), + getrvalue (location, des, GetType (des), + GetMode (des) = LeftValue), + byteno, GetIntegerZero (location)) ; + IF incl + THEN + SetWideUnaryBuiltinIncl (location, dest, bitno) ELSE - PushValue(element) ; - PushValue(high) ; - IF Gre(tokenno) + SetWideUnaryBuiltinExcl (location, dest, bitno) + END +END SetWideUnaryBuiltinInclExcl ; + + +(* + SetWideInclExcl - generates M2WIDESET.procedurename (result, expr). +*) + +PROCEDURE SetWideInclExcl (tokenno: CARDINAL; settype, result, expr: CARDINAL; + procedurename: Name) ; +BEGIN + IF OptimizeSets + THEN + IF procedurename = MakeKey ('Incl') + THEN + SetWideUnaryBuiltinInclExcl (tokenno, settype, result, expr, TRUE) + ELSIF procedurename = MakeKey ('Excl') THEN - RETURN( -1 ) + SetWideUnaryBuiltinInclExcl (tokenno, settype, result, expr, FALSE) + ELSE + InternalError ('expecting Incl or Excl procedure') END - END ; + ELSE + SetWideInclExclLibrary (tokenno, settype, result, expr, procedurename) + END +END SetWideInclExcl ; - (* all legal *) - PushValue(low) ; - offset := PopIntegerTree() ; - c := 0 ; - PushValue(element) ; - PushValue(low) ; - PushIntegerTree(ToCardinal(location, PopIntegerTree())) ; - PushCard(bpw) ; - PushIntegerTree(ToCardinal(location, PopIntegerTree())) ; - Addn ; - WHILE GreEqu(tokenno) DO - INC(c) ; (* move onto next field *) - PushValue(element) ; - PushIntegerTree(ToCardinal(location, PopIntegerTree())) ; - PushCard((c+1)*bpw) ; - PushValue(low) ; - PushIntegerTree(ToCardinal(location, PopIntegerTree())) ; - Addn ; - PushIntegerTree(offset) ; - PushIntegerTree(ToCardinal(location, PopIntegerTree())) ; - PushCard(bpw) ; - PushIntegerTree(ToCardinal(location, PopIntegerTree())) ; - Addn ; - offset := PopIntegerTree() - END ; - RETURN( VAL(INTEGER, c) ) -END GetFieldNo ; +(* + SetWideInclExclLibrary - +*) + +PROCEDURE SetWideInclExclLibrary (tokenno: CARDINAL; settype, result, expr: CARDINAL; + procedurename: Name) ; +VAR + location : location_t ; + procedure, + setparam : CARDINAL ; + highbit, + bit, + setarray, + call : tree ; +BEGIN + procedure := FromM2WIDESETImport (tokenno, procedurename) ; + location := TokenToLocation (tokenno) ; + bit := SetElementToBit (location, settype, expr) ; + highbit := ToCardinal (location, CalcBitsInSet (location, settype)) ; + setparam := GetNthParamAnyClosest (procedure, 1, GetMainModule ()) ; + setarray := CreateSetArrayParam (location, tokenno, result, setparam) ; + BuildParam (location, highbit) ; (* 3rd Parameter. *) + BuildParam (location, ToCardinal (location, bit)) ; (* 2nd Parameter. *) + BuildParam (location, setarray) ; (* 1st Parameter. *) + call := BuildProcedureCallTree (location, Mod2Gcc (procedure), NIL) ; + SetLastFunction (NIL) ; + AddStatement (location, call) +END SetWideInclExclLibrary ; (* CodeIncl - encode an InclOp: - result := result + (1 << expr) + result |= (1 << expr). *) -PROCEDURE CodeIncl (result, expr: CARDINAL) ; +PROCEDURE CodeIncl (quad: CARDINAL) ; VAR - low, - high : CARDINAL ; - offset : tree ; - fieldno : INTEGER ; - location: location_t ; + overflow, + constExpr : BOOLEAN ; + op : QuadOperator ; + tokenno : CARDINAL; + result, expr: CARDINAL; + settype : CARDINAL ; + nooperand : CARDINAL ; + nopos : CARDINAL ; + location : location_t ; BEGIN - (* firstly ensure that constant literals are declared *) - DeclareConstant (CurrentQuadToken, expr) ; - location := TokenToLocation (CurrentQuadToken) ; + GetQuadOtok (quad, tokenno, op, + result, nooperand, expr, + overflow, constExpr, + nopos, nopos, nopos) ; + (* Firstly ensure that constant literals are declared *) + DeclareConstant (tokenno, expr) ; + location := TokenToLocation (tokenno) ; + checkDeclare (result) ; + settype := GetLType (result) ; + Assert (IsSet (settype)) ; IF IsConst (result) THEN @@ -5820,27 +6436,14 @@ BEGIN InternalError ('should not get to here (why are we generating ?)') END ELSE - IF IsConst (expr) + IF IsElementInRange (tokenno, settype, result, expr) THEN - fieldno := GetFieldNo (CurrentQuadToken, expr, GetType (result), offset) ; - IF fieldno >= 0 + IF GetSetInWord (settype) THEN - PushValue (expr) ; - PushIntegerTree (offset) ; - Sub ; - BuildIncludeVarConst (location, - Mod2Gcc (GetType (result)), - Mod2Gcc (result), - PopIntegerTree (), - GetMode (result) = LeftValue, fieldno) + CodeNarrowIncl (location, settype, result, expr) ELSE - MetaErrorT1 (CurrentQuadToken, 'bit exceeded the range of set {%1Eatd}', result) + SetWideInclExcl (tokenno, settype, result, expr, MakeKey ("Incl")) END - ELSE - GetSetLimits (GetType (result), low, high) ; - BuildIncludeVarVar (location, - Mod2Gcc (GetType(result)), - Mod2Gcc (result), Mod2Gcc(expr), GetMode(result) = LeftValue, Mod2Gcc (low)) END END END CodeIncl ; @@ -5848,13 +6451,13 @@ END CodeIncl ; (* FoldExcl - check whether we can fold the InclOp. - op1 := op1 - (1 << op3) + result &= ~ (1 << expr). *) PROCEDURE FoldExcl (tokenno: CARDINAL; p: WalkAction; quad: CARDINAL; result, expr: CARDINAL) ; BEGIN - (* firstly ensure that constant literals are declared *) + (* Firstly ensure that constant literals are declared *) TryDeclareConstant (tokenno, expr) ; IF IsConst (result) AND IsConst (expr) THEN @@ -5873,45 +6476,49 @@ END FoldExcl ; (* CodeExcl - encode an ExclOp: - result := result - (1 << expr) + result &= (~ (1 << expr)). *) -PROCEDURE CodeExcl (result, expr: CARDINAL) ; +PROCEDURE CodeExcl (quad: CARDINAL) ; VAR - low, - high : CARDINAL ; - offset : tree ; - fieldno : INTEGER ; - location: location_t ; + overflow, + constExpr : BOOLEAN ; + op : QuadOperator ; + tokenno : CARDINAL; + result, expr: CARDINAL; + settype : CARDINAL ; + nooperand : CARDINAL ; + nopos : CARDINAL ; + location : location_t ; BEGIN - (* firstly ensure that constant literals are declared *) - DeclareConstant (CurrentQuadToken, expr) ; - location := TokenToLocation(CurrentQuadToken) ; + GetQuadOtok (quad, tokenno, op, + result, nooperand, expr, + overflow, constExpr, + nopos, nopos, nopos) ; + (* Firstly ensure that constant literals are declared *) + DeclareConstant (tokenno, expr) ; + location := TokenToLocation (tokenno) ; + checkDeclare (result) ; + settype := GetLType (result) ; + Assert (IsSet (settype)) ; IF IsConst (result) THEN - InternalError ('should not get to here (if we do we should consider calling FoldInclOp)') - ELSE IF IsConst (expr) THEN - fieldno := GetFieldNo (CurrentQuadToken, expr, GetType (result), offset) ; - IF fieldno >= 0 + InternalError ('this quadruple should have been removed by FoldExcl') + ELSE + InternalError ('should not get to here (why are we generating ?)') + END + ELSE + IF IsElementInRange (tokenno, settype, result, expr) + THEN + IF GetSetInWord (settype) THEN - PushValue (expr) ; - PushIntegerTree (offset) ; - Sub ; - BuildExcludeVarConst (location, - Mod2Gcc (GetType (result)), - Mod2Gcc (result), PopIntegerTree (), - GetMode (result)=LeftValue, fieldno) + CodeNarrowExcl (location, settype, result, expr) ELSE - MetaErrorT1 (CurrentQuadToken, 'bit exceeded the range of set {%1Eatd}', result) + SetWideInclExcl (tokenno, settype, result, expr, MakeKey ("Excl")) END - ELSE - GetSetLimits (GetType (result), low, high) ; - BuildExcludeVarVar (location, - Mod2Gcc (GetType(result)), - Mod2Gcc (result), Mod2Gcc(expr), GetMode(result) = LeftValue, Mod2Gcc (low)) END END END CodeExcl ; @@ -5978,7 +6585,7 @@ END FoldUnary ; FoldUnarySet - check whether we can fold the doOp operation. *) -PROCEDURE FoldUnarySet (tokenno: CARDINAL; p: WalkAction; doOp: DoUnaryProcedure; +PROCEDURE FoldUnarySet (tokenno: CARDINAL; p: WalkAction; doOp: ProcedureCardinal; quad: CARDINAL; result, expr: CARDINAL) ; VAR location: location_t ; @@ -6120,18 +6727,32 @@ END FoldNegate ; is required. *) -PROCEDURE CodeNegateChecked (quad: CARDINAL; op1, op3: CARDINAL) ; +PROCEDURE CodeNegateChecked (quad: CARDINAL) ; +VAR + operatorpos, + resultpos, + nopos, exprpos, + result, noop, + expr : CARDINAL ; + typeChecking, + constExpr, + overflowChecking: BOOLEAN ; + op : QuadOperator ; BEGIN - IF IsConstSet (op3) OR IsSet (GetType (op3)) + GetQuadOTypetok (quad, operatorpos, op, + result, noop, expr, + overflowChecking, typeChecking, constExpr, + resultpos, nopos, exprpos) ; + IF IsConstSet (expr) OR IsSet (GetType (expr)) THEN - CodeUnarySet (BuildSetNegate, SetNegate, quad, op1, op3) - ELSIF UnaryOperand (quad, op3) + CodeUnarySet (SetNegate, BuildSetNegate, operatorpos, MakeKey ('Not'), quad, result, expr) + ELSIF UnaryOperand (quad, expr) THEN IF MustCheckOverflow (quad) THEN - CodeUnaryCheck (BuildNegateCheck, NIL, quad, op1, op3) + CodeUnaryCheck (BuildNegateCheck, NIL, quad, result, expr) ELSE - CodeUnary (BuildNegate, NIL, quad, op1, op3) + CodeUnary (BuildNegate, NIL, quad, result, expr) END END END CodeNegateChecked ; @@ -6345,6 +6966,19 @@ BEGIN END BuildHighFromArray ; +(* + BuildHighFromSetArray - +*) + +PROCEDURE BuildHighFromSetArray (tokenno: CARDINAL; settype: CARDINAL) : tree ; +VAR + location: location_t ; +BEGIN + location := TokenToLocation (tokenno) ; + RETURN BuildHighFromStaticArray (location, GetSetArray (settype)) +END BuildHighFromSetArray ; + + (* BuildHighFromStaticArray - *) @@ -6414,26 +7048,29 @@ VAR Type : CARDINAL ; location: location_t ; BEGIN - Type := SkipType(GetType(operand)) ; - location := TokenToLocation(tokenno) ; + Type := SkipType (GetType (operand)) ; + location := TokenToLocation (tokenno) ; IF (Type=Char) AND (dim=1) THEN - RETURN( BuildHighFromChar(operand) ) + RETURN( BuildHighFromChar (operand) ) ELSIF IsConstString(operand) AND (dim=1) THEN - RETURN( BuildHighFromString(operand) ) + RETURN( BuildHighFromString (operand) ) ELSIF IsArray(Type) THEN - RETURN( BuildHighFromArray(tokenno, dim, operand) ) - ELSIF IsUnbounded(Type) + RETURN( BuildHighFromArray (tokenno, dim, operand) ) + ELSIF IsSet (Type) + THEN + RETURN( BuildHighFromSetArray (tokenno, Type) ) + ELSIF IsUnbounded (Type) THEN - RETURN( GetHighFromUnbounded(location, dim, operand) ) + RETURN( GetHighFromUnbounded (location, dim, operand) ) ELSE MetaErrorT1 (tokenno, 'base procedure HIGH expects a variable of type array or a constant string or CHAR as its parameter, rather than {%1Etad}', operand) ; - RETURN( GetIntegerZero(location) ) + RETURN( GetIntegerZero (location) ) END END ResolveHigh ; @@ -6500,11 +7137,11 @@ VAR BEGIN location := TokenToLocation (CurrentQuadToken) ; - (* firstly ensure that any constant literal is declared *) + (* Firstly ensure that any constant literal is declared. *) DeclareConstant (CurrentQuadToken, array) ; IF IsConst (result) THEN - (* still have a constant which was not resolved, pass it to gcc *) + (* Still have a constant which was not resolved, pass it to gcc. *) ConstantKnownAndUsed (result, DeclareKnownConstant(location, GetM2ZType (), @@ -6522,7 +7159,7 @@ END CodeHigh ; (* CodeUnbounded - codes the creation of an unbounded parameter variable. - places the address of op3 into *op1 + result = &array. array can be an lvalue or rvalue. *) PROCEDURE CodeUnbounded (result, array: CARDINAL) ; @@ -6535,23 +7172,31 @@ BEGIN DeclareConstant (CurrentQuadToken, array) ; IF IsConstString (array) OR (IsConst (array) AND (GetSType (array) = Char)) THEN - BuildAssignmentStatement (location, Mod2Gcc (result), BuildAddr (location, PromoteToString (CurrentQuadToken, array), FALSE)) + BuildAssignmentStatement (location, Mod2Gcc (result), + BuildAddr (location, PromoteToString (CurrentQuadToken, array), FALSE)) ELSIF IsConstructor (array) THEN - BuildAssignmentStatement (location, Mod2Gcc (result), BuildAddr (location, Mod2Gcc (array), TRUE)) + BuildAssignmentStatement (location, Mod2Gcc (result), + BuildAddr (location, Mod2Gcc (array), TRUE)) ELSIF IsUnbounded (GetType (array)) THEN IF GetMode(array) = LeftValue THEN + (* We already have the address of the array, convert it to type of result. *) Addr := BuildConvert (location, Mod2Gcc (GetType (result)), Mod2Gcc (array), FALSE) ELSE + (* Access the address field from the unbounded record. *) Addr := BuildComponentRef (location, Mod2Gcc (array), Mod2Gcc (GetUnboundedAddressOffset (GetType (array)))) END ; + (* Store address in result. *) BuildAssignmentStatement (location, Mod2Gcc (result), Addr) - ELSIF GetMode(array) = RightValue + ELSIF GetMode (array) = RightValue THEN - BuildAssignmentStatement (location, Mod2Gcc (result), BuildAddr (location, Mod2Gcc (array), FALSE)) + (* Static array, get the address and store into result. *) + BuildAssignmentStatement (location, Mod2Gcc (result), + BuildAddr (location, Mod2Gcc (array), FALSE)) ELSE + (* Static array which is a left value, just copy the address into result. *) BuildAssignmentStatement (location, Mod2Gcc (result), Mod2Gcc (array)) END END CodeUnbounded ; @@ -6866,9 +7511,7 @@ VAR tl, tr : tree ; location: location_t ; BEGIN - CheckStop(quad) ; - - (* firstly ensure that constant literals are declared *) + (* Firstly ensure that constant literals are declared. *) DeclareConstant(CurrentQuadToken, rhs) ; DeclareConstructor(CurrentQuadToken, quad, rhs) ; location := TokenToLocation(CurrentQuadToken) ; @@ -6876,20 +7519,20 @@ BEGIN tl := LValueToGenericPtr(location, type) ; IF IsProcedure(rhs) THEN - tr := BuildAddr(location, Mod2Gcc(rhs), FALSE) + tr := BuildAddr (location, Mod2Gcc (rhs), FALSE) ELSE tr := LValueToGenericPtr(location, rhs) ; tr := ConvertRHS(tr, type, rhs) END ; IF IsConst(lhs) THEN - (* fine, we can take advantage of this and fold constant *) + (* Fine, we can take advantage of this and fold constant. *) PutConst(lhs, type) ; tl := Mod2Gcc(SkipType(type)) ; ConstantKnownAndUsed (lhs, BuildConvert (location, tl, Mod2Gcc (rhs), TRUE)) ELSE - BuildAssignmentStatement (location, Mod2Gcc (lhs), BuildConvert (location, tl, tr, TRUE)) ; + BuildAssignmentStatement (location, Mod2Gcc (lhs), BuildConvert (location, tl, tr, TRUE)) END END CodeConvert ; @@ -7115,7 +7758,7 @@ END CreateLabelProcedureN ; PROCEDURE CreateLabelName (q: CARDINAL) : String ; BEGIN - (* prefixed by . to ensure that no Modula-2 identifiers clash *) + (* Prefixed by . to ensure that no Modula-2 identifiers clash *) RETURN( Sprintf1(Mark(InitString('.L%d')), q) ) END CreateLabelName ; @@ -7142,86 +7785,120 @@ VAR location: location_t ; BEGIN location := TokenToLocation(CurrentQuadToken) ; - - (* we do not create labels for procedure entries *) - IF (op#ProcedureScopeOp) AND (op#NewLocalVarOp) AND IsReferenced(quad) + (* We do not create labels for procedure entries. *) + IF (op # ProcedureScopeOp) AND (op # NewLocalVarOp) AND IsReferenced (quad) THEN - DeclareLabel(location, string(CreateLabelName(quad))) + DeclareLabel (location, string (CreateLabelName (quad))) END END CheckReferenced ; (* - CodeIfSetLess - + CodeIfSetCondition - code IF left cond right then destquad for set types. *) -PROCEDURE CodeIfSetLess (quad: CARDINAL; op1, op2, op3: CARDINAL) ; +PROCEDURE CodeIfSetCondition (tokenno: CARDINAL; + left, right, destquad: CARDINAL; + cond: BinaryFunction; procedurename: Name) ; VAR - settype : CARDINAL ; - falselabel: ADDRESS ; - location : location_t ; + settype : CARDINAL ; + location: location_t ; + expr : tree ; BEGIN - location := TokenToLocation(CurrentQuadToken) ; - - IF IsConst(op1) AND IsConst(op2) + location := TokenToLocation (tokenno) ; + IF IsConst (left) AND IsConst (right) THEN InternalError ('this should have been folded in the calling procedure') - ELSIF IsConst(op1) + ELSIF IsConst(left) THEN - settype := SkipType(GetType(op2)) + settype := SkipType (GetType (right)) ELSE - settype := SkipType(GetType(op1)) + settype := SkipType (GetType (left)) END ; - IF CompareTrees(FindSize(CurrentQuadToken, settype), FindSize(CurrentQuadToken, Word)) <= 0 - THEN - (* word size sets *) - DoJump(location, - BuildIsNotSuperset(location, - BuildConvert(location, GetWordType(), Mod2Gcc(op1), FALSE), - BuildConvert(location, GetWordType(), Mod2Gcc(op2), FALSE)), - NIL, string(CreateLabelName(op3))) + IF GetSetInWord (settype) + THEN + (* WORD size sets. *) + expr := cond (location, + BuildConvert (location, GetWordType (), + Mod2Gcc (left), FALSE), + BuildConvert (location, GetWordType (), + Mod2Gcc (right), FALSE)) ELSE - falselabel := string(Sprintf1(Mark(InitString('.Lset%dcomp')), quad)) ; + expr := CallSetWideBoolFunction (location, tokenno, + procedurename, settype, left, right) + END ; + IfExprJump (location, expr, string (CreateLabelName (destquad))) +END CodeIfSetCondition ; - BuildForeachWordInSetDoIfExpr(location, - Mod2Gcc(settype), - Mod2Gcc(op1), Mod2Gcc(op2), - GetMode(op1)=LeftValue, - GetMode(op2)=LeftValue, - IsConst(op1), IsConst(op2), - BuildIsSuperset, - falselabel) ; - BuildGoto(location, string(CreateLabelName(op3))) ; - DeclareLabel(location, falselabel) - END +(* + CodeIfSetLess - code IF left < right then destquad for set types. +*) + +PROCEDURE CodeIfSetLess (tokenno: CARDINAL; left, right, destquad: CARDINAL) ; +BEGIN + CodeIfSetCondition (tokenno, left, right, destquad, + BuildIsSubset, MakeKey ("Less")) END CodeIfSetLess ; (* - PerformCodeIfLess - codes the quadruple if op1 < op2 then goto op3 + CodeIfSetLessEqu - code IF left <= right then destquad for set types. *) -PROCEDURE PerformCodeIfLess (quad: CARDINAL) ; -VAR - tl, tr : tree ; - location : location_t ; - left, right, dest, combined, - leftpos, rightpos, destpos : CARDINAL ; - constExpr, overflow : BOOLEAN ; - op : QuadOperator ; +PROCEDURE CodeIfSetLessEqu (tokenno: CARDINAL; left, right, destquad: CARDINAL) ; BEGIN - GetQuadOtok (quad, combined, op, - left, right, dest, overflow, - constExpr, - leftpos, rightpos, destpos) ; - location := TokenToLocation (combined) ; + CodeIfSetCondition (tokenno, left, right, destquad, + BuildIsSubset, MakeKey ("LessEqu")) +END CodeIfSetLessEqu ; - IF IsConst(left) AND IsConst(right) - THEN - PushValue(left) ; - PushValue(right) ; - IF Less(CurrentQuadToken) + +(* + CodeIfSetGre - code IF left > right then destquad for set types. +*) + +PROCEDURE CodeIfSetGre (tokenno: CARDINAL; left, right, destquad: CARDINAL) ; +BEGIN + CodeIfSetCondition (tokenno, left, right, destquad, + BuildIsNotSubset, MakeKey ("Gre")) +END CodeIfSetGre ; + + +(* + CodeIfSetGreEqu - code IF left >= right then destquad for set types. +*) + +PROCEDURE CodeIfSetGreEqu (tokenno: CARDINAL; left, right, destquad: CARDINAL) ; +BEGIN + CodeIfSetCondition (tokenno, left, right, destquad, + BuildIsNotSubset, MakeKey ("GreEqu")) +END CodeIfSetGreEqu ; + + +(* + PerformCodeIfLess - codes the quadruple if op1 < op2 then goto op3 +*) + +PROCEDURE PerformCodeIfLess (quad: CARDINAL) ; +VAR + tl, tr : tree ; + location : location_t ; + left, right, dest, combined, + leftpos, rightpos, destpos : CARDINAL ; + constExpr, overflow : BOOLEAN ; + op : QuadOperator ; +BEGIN + GetQuadOtok (quad, combined, op, + left, right, dest, overflow, + constExpr, + leftpos, rightpos, destpos) ; + location := TokenToLocation (combined) ; + + IF IsConst(left) AND IsConst(right) + THEN + PushValue(left) ; + PushValue(right) ; + IF Less(CurrentQuadToken) THEN BuildGoto(location, string(CreateLabelName(dest))) ELSE @@ -7230,7 +7907,7 @@ BEGIN ELSIF IsConstSet(left) OR (IsVar(left) AND IsSet(SkipType(GetType(left)))) OR IsConstSet(right) OR (IsVar(right) AND IsSet(SkipType(GetType(right)))) THEN - CodeIfSetLess(quad, left, right, dest) + CodeIfSetLess (combined, left, right, dest) ELSE IF IsComposite(GetType(left)) OR IsComposite(GetType(right)) THEN @@ -7245,8 +7922,8 @@ BEGIN SkipType (GetType (right)), combined), left, right) ; - DoJump (location, - BuildLessThan (location, tl, tr), NIL, string (CreateLabelName (dest))) + IfExprJump (location, + BuildLessThan(location, tl, tr), string(CreateLabelName (dest))) END END END PerformCodeIfLess ; @@ -7266,50 +7943,151 @@ END CodeIfLess ; (* - CodeIfSetGre - + CodeIfSetEquNarrow - *) -PROCEDURE CodeIfSetGre (quad: CARDINAL; op1, op2, op3: CARDINAL) ; +PROCEDURE CodeIfSetEquNarrow (location: location_t; invertCondition: BOOLEAN; + settype: CARDINAL; left, right: tree; + destQuad: CARDINAL) ; VAR - settype : CARDINAL ; - falselabel: ADDRESS ; - location : location_t ; + condition, + mask : tree ; BEGIN - location := TokenToLocation(CurrentQuadToken) ; + (* The set type fits inside a word, so mask off any unused bits. *) + mask := BuildMask (location, CalcBitsInSet (location, settype), FALSE) ; + left := BuildLogicalAnd (location, left, mask) ; + right := BuildLogicalAnd (location, right, mask) ; + IF invertCondition + THEN + condition := BuildNotEqualTo (location, left, right) + ELSE + condition := BuildEqualTo (location, left, right) + END ; + IfExprJump (location, condition, + string (CreateLabelName (destQuad))) +END CodeIfSetEquNarrow ; - IF IsConst(op1) AND IsConst(op2) + +(* + CallSetWideBoolFunction - return a tree containing a call to + M2WIDESET.widefuncname (left, right, HIGHBIT (settype)). +*) + +PROCEDURE CallSetWideBoolFunction (location: location_t; tokenno: CARDINAL; + widefuncname: Name; + settype, left, right: CARDINAL) : tree ; +VAR + function, + param1, + param2 : CARDINAL ; + highbit, + array1, + array2, + call : tree ; +BEGIN + function := FromM2WIDESETImport (tokenno, widefuncname) ; + checkDeclare (function) ; + location := TokenToLocation (tokenno) ; + param1 := GetNthParamAnyClosest (function, 1, GetMainModule ()) ; + param2 := GetNthParamAnyClosest (function, 2, GetMainModule ()) ; + array1 := CreateSetArrayParam (location, tokenno, left, param1) ; + array2 := CreateSetArrayParam (location, tokenno, right, param2) ; + highbit := ToCardinal (location, CalcHighSetBit (location, settype)) ; + BuildParam (location, highbit) ; (* Parameter 3. *) + BuildParam (location, array2) ; (* Parameter 2. *) + BuildParam (location, array1) ; (* Parameter 1. *) + call := BuildProcedureCallTree (location, Mod2Gcc (function), + Mod2Gcc (GetType (function))) ; + SetLastFunction (NIL) ; + RETURN call +END CallSetWideBoolFunction ; + + +(* + CodeIfSetEquWide - creates a statement tree: + if left = right then goto destQuad. The boolean + invertCondition will check left # right. +*) + +PROCEDURE CodeIfSetEquWide (location: location_t; tokenno: CARDINAL; + invertCondition: BOOLEAN; + settype, left, right: CARDINAL; destQuad: CARDINAL) ; +VAR + call, expr, label: tree ; +BEGIN + call := CallSetWideBoolFunction (location, tokenno, MakeKey ("Equal"), + settype, left, right) ; + label := CreateLabelName (destQuad) ; + IF invertCondition THEN - InternalError ('this should have been folded in the calling procedure') - ELSIF IsConst(op1) + expr := BuildEqualTo (location, call, GetBooleanFalse ()) + ELSE + expr := BuildNotEqualTo (location, call, GetBooleanFalse ()) + END ; + IfExprJump (location, expr, string (label)) +END CodeIfSetEquWide ; + + +(* + CodeIfSetEquLower code a comparison between left and right and if true + jump to destQuad. The invertCondition allows for the inverse test. + Note that if op1 and op2 are not both constants as this will have been + evaluated in CodeIfNotEqu. +*) + +PROCEDURE CodeIfSetEquLower (tokenno: CARDINAL; invertCondition: BOOLEAN; + left, right, destQuad: CARDINAL) ; +VAR + settype : CARDINAL ; + location: location_t ; +BEGIN + location := TokenToLocation (tokenno) ; + IF IsConst (left) AND IsConst (right) THEN - settype := SkipType(GetType(op2)) + InternalError ('this should have been folded by CodeIfEqu or CodeIfNotEqu') + ELSIF IsConst (left) + THEN + settype := GetLType (right) ELSE - settype := SkipType(GetType(op1)) + settype := GetLType (left) END ; - IF CompareTrees(FindSize(CurrentQuadToken, settype), FindSize(CurrentQuadToken, Word)) <= 0 - THEN - (* word size sets *) - DoJump(location, - BuildIsNotSubset(location, - BuildConvert(location, GetWordType(), Mod2Gcc(op1), FALSE), - BuildConvert(location, GetWordType(), Mod2Gcc(op2), FALSE)), - NIL, string(CreateLabelName(op3))) + IF GetLType (left) # GetLType (right) + THEN + (* This test used to occur after the GetSetInWord (settype) condition. *) + MetaErrorT2 (tokenno, + 'set comparison is only allowed between the same set type, the set types used by {%1Eatd} and {%2atd} are different', + left, right) + END ; + IF GetSetInWord (settype) + THEN + (* Allow sets to be compared against { } for bitset. *) + CodeIfSetEquNarrow (location, invertCondition, settype, + Mod2Gcc (left), Mod2Gcc (right), destQuad) ELSE - falselabel := string(Sprintf1(Mark(InitString('.Lset%dcomp')), quad)) ; + CodeIfSetEquWide (location, tokenno, invertCondition, settype, + left, right, destQuad) + END +END CodeIfSetEquLower ; - BuildForeachWordInSetDoIfExpr(location, - Mod2Gcc(settype), - Mod2Gcc(op1), Mod2Gcc(op2), - GetMode(op1)=LeftValue, - GetMode(op2)=LeftValue, - IsConst(op1), IsConst(op2), - BuildIsSubset, - falselabel) ; - BuildGoto(location, string(CreateLabelName(op3))) ; - DeclareLabel(location, falselabel) - END -END CodeIfSetGre ; +(* + CodeIfSetNotEqu - codes if op1 # op2 then goto op3 +*) + +PROCEDURE CodeIfSetNotEqu (tokenno: CARDINAL; left, right, destQuad: CARDINAL) ; +BEGIN + CodeIfSetEquLower (tokenno, TRUE, left, right, destQuad) +END CodeIfSetNotEqu ; + + +(* + CodeIfSetEqu - codes if op1 = op2 then goto op3 +*) + +PROCEDURE CodeIfSetEqu (tokenno: CARDINAL; left, right, destQuad: CARDINAL) ; +BEGIN + CodeIfSetEquLower (tokenno, FALSE, left, right, destQuad) +END CodeIfSetEqu ; (* @@ -7318,7 +8096,7 @@ END CodeIfSetGre ; PROCEDURE PerformCodeIfGre (quad: CARDINAL) ; VAR - tl, tr : tree ; + tl, tr, condition : tree ; location : location_t ; left, right, dest, combined, leftpos, rightpos, destpos : CARDINAL ; @@ -7342,22 +8120,23 @@ BEGIN ELSIF IsConstSet(left) OR (IsVar(left) AND IsSet(SkipType(GetType(left)))) OR IsConstSet(right) OR (IsVar(right) AND IsSet(SkipType(GetType(right)))) THEN - CodeIfSetGre(quad, left, right, dest) + CodeIfSetGre (combined, left, right, dest) ELSE - IF IsComposite(GetType(left)) OR IsComposite(GetType(right)) + IF IsComposite (GetType (left)) OR IsComposite (GetType (right)) THEN MetaErrorT2 (combined, 'comparison tests between composite types not allowed {%1Eatd} and {%2atd}', left, right) ELSE - ConvertBinaryOperands(location, - tl, tr, - ComparisonMixTypes (left, right, - SkipType (GetType (left)), - SkipType (GetType (right)), - combined), - left, right) ; - DoJump(location, BuildGreaterThan(location, tl, tr), NIL, string(CreateLabelName(dest))) + ConvertBinaryOperands (location, + tl, tr, + ComparisonMixTypes (left, right, + SkipType (GetType (left)), + SkipType (GetType (right)), + combined), + left, right) ; + condition := BuildGreaterThan (location, tl, tr) ; + IfExprJump (location, condition, string (CreateLabelName (dest))) END END END PerformCodeIfGre ; @@ -7376,60 +8155,13 @@ BEGIN END CodeIfGre ; -(* - CodeIfSetLessEqu - -*) - -PROCEDURE CodeIfSetLessEqu (quad: CARDINAL; op1, op2, op3: CARDINAL) ; -VAR - settype : CARDINAL ; - falselabel: ADDRESS ; - location : location_t ; -BEGIN - location := TokenToLocation(CurrentQuadToken) ; - - IF IsConst(op1) AND IsConst(op2) - THEN - InternalError ('this should have been folded in the calling procedure') - ELSIF IsConst(op1) - THEN - settype := SkipType(GetType(op2)) - ELSE - settype := SkipType(GetType(op1)) - END ; - IF CompareTrees(FindSize(CurrentQuadToken, settype), FindSize(CurrentQuadToken, Word)) <= 0 - THEN - (* word size sets *) - DoJump(location, - BuildIsSubset(location, - BuildConvert(location, GetWordType(), Mod2Gcc(op1), FALSE), - BuildConvert(location, GetWordType(), Mod2Gcc(op2), FALSE)), - NIL, string(CreateLabelName(op3))) - ELSE - falselabel := string(Sprintf1(Mark(InitString('.Lset%dcomp')), quad)) ; - - BuildForeachWordInSetDoIfExpr(location, - Mod2Gcc(settype), - Mod2Gcc(op1), Mod2Gcc(op2), - GetMode(op1)=LeftValue, - GetMode(op2)=LeftValue, - IsConst(op1), IsConst(op2), - BuildIsNotSubset, - falselabel) ; - - BuildGoto(location, string(CreateLabelName(op3))) ; - DeclareLabel(location, falselabel) - END -END CodeIfSetLessEqu ; - - (* PerformCodeIfLessEqu - codes the quadruple if op1 <= op2 then goto op3 *) PROCEDURE PerformCodeIfLessEqu (quad: CARDINAL) ; VAR - tl, tr : tree ; + tl, tr, condition : tree ; location : location_t ; left, right, dest, combined, leftpos, rightpos, destpos : CARDINAL ; @@ -7454,7 +8186,7 @@ BEGIN ELSIF IsConstSet (left) OR (IsVar (left) AND IsSet (SkipType (GetType (left)))) OR IsConstSet (right) OR (IsVar (right) AND IsSet (SkipType (GetType (right)))) THEN - CodeIfSetLessEqu (quad, left, right, dest) + CodeIfSetLessEqu (combined, left, right, dest) ELSE IF IsComposite (GetType (left)) OR IsComposite (GetType (right)) THEN @@ -7469,8 +8201,8 @@ BEGIN SkipType (GetType (right)), combined), left, right) ; - DoJump (location, BuildLessThanOrEqual (location, tl, tr), - NIL, string (CreateLabelName (dest))) + condition := BuildLessThanOrEqual (location, tl, tr) ; + IfExprJump (location, condition, string (CreateLabelName (dest))) END END END PerformCodeIfLessEqu ; @@ -7489,60 +8221,13 @@ BEGIN END CodeIfLessEqu ; -(* - CodeIfSetGreEqu - -*) - -PROCEDURE CodeIfSetGreEqu (quad: CARDINAL; op1, op2, op3: CARDINAL) ; -VAR - settype : CARDINAL ; - falselabel: ADDRESS ; - location: location_t ; -BEGIN - location := TokenToLocation(CurrentQuadToken) ; - - IF IsConst(op1) AND IsConst(op2) - THEN - InternalError ('this should have been folded in the calling procedure') - ELSIF IsConst(op1) - THEN - settype := SkipType(GetType(op2)) - ELSE - settype := SkipType(GetType(op1)) - END ; - IF CompareTrees(FindSize(CurrentQuadToken, settype), FindSize(CurrentQuadToken, Word)) <= 0 - THEN - (* word size sets *) - DoJump(location, - BuildIsSuperset(location, - BuildConvert(location, GetWordType(), Mod2Gcc(op1), FALSE), - BuildConvert(location, GetWordType(), Mod2Gcc(op2), FALSE)), - NIL, string(CreateLabelName(op3))) - ELSE - falselabel := string(Sprintf1(Mark(InitString('.Lset%dcomp')), quad)) ; - - BuildForeachWordInSetDoIfExpr(location, - Mod2Gcc(settype), - Mod2Gcc(op1), Mod2Gcc(op2), - GetMode(op1)=LeftValue, - GetMode(op2)=LeftValue, - IsConst(op1), IsConst(op2), - BuildIsNotSuperset, - falselabel) ; - - BuildGoto(location, string(CreateLabelName(op3))) ; - DeclareLabel(location, falselabel) - END -END CodeIfSetGreEqu ; - - (* PerformCodeIfGreEqu - codes the quadruple if op1 >= op2 then goto op3 *) PROCEDURE PerformCodeIfGreEqu (quad: CARDINAL) ; VAR - tl, tr: tree ; + tl, tr, condition : tree ; location : location_t ; left, right, dest, combined, leftpos, rightpos, destpos : CARDINAL ; @@ -7567,7 +8252,7 @@ BEGIN ELSIF IsConstSet(left) OR (IsVar(left) AND IsSet(SkipType(GetType(left)))) OR IsConstSet(right) OR (IsVar(right) AND IsSet(SkipType(GetType(right)))) THEN - CodeIfSetGreEqu(quad, left, right, dest) + CodeIfSetGreEqu (combined, left, right, dest) ELSE IF IsComposite(GetType(left)) OR IsComposite(GetType(right)) THEN @@ -7582,7 +8267,8 @@ BEGIN SkipType (GetType (right)), combined), left, right) ; - DoJump(location, BuildGreaterThanOrEqual(location, tl, tr), NIL, string(CreateLabelName(dest))) + condition := BuildGreaterThanOrEqual(location, tl, tr) ; + IfExprJump (location, condition, string (CreateLabelName (dest))) END END END PerformCodeIfGreEqu ; @@ -7601,111 +8287,6 @@ BEGIN END CodeIfGreEqu ; -(* - CodeIfSetEqu - codes if op1 = op2 then goto op3 - Note that if op1 and op2 are not both constants - since this will have been evaluated in CodeIfEqu. -*) - -PROCEDURE CodeIfSetEqu (quad: CARDINAL; op1, op2, op3: CARDINAL) ; -VAR - settype : CARDINAL ; - falselabel: ADDRESS ; - location : location_t ; -BEGIN - location := TokenToLocation(CurrentQuadToken) ; - - IF IsConst(op1) AND IsConst(op2) - THEN - InternalError ('this should have been folded in the calling procedure') - ELSIF IsConst(op1) - THEN - settype := SkipType(GetType(op2)) - ELSE - settype := SkipType(GetType(op1)) - END ; - IF CompareTrees(FindSize(CurrentQuadToken, settype), FindSize(CurrentQuadToken, Word)) <= 0 - THEN - (* word size sets *) - DoJump(location, - BuildEqualTo(location, - BuildConvert(location, GetWordType(), Mod2Gcc(op1), FALSE), - BuildConvert(location, GetWordType(), Mod2Gcc(op2), FALSE)), - NIL, string(CreateLabelName(op3))) - ELSIF GetSType(op1)=GetSType(op2) - THEN - falselabel := string(Sprintf1(Mark(InitString('.Lset%dcomp')), quad)) ; - - BuildForeachWordInSetDoIfExpr(location, - Mod2Gcc(settype), - Mod2Gcc(op1), Mod2Gcc(op2), - GetMode(op1)=LeftValue, - GetMode(op2)=LeftValue, - IsConst(op1), IsConst(op2), - BuildNotEqualTo, - falselabel) ; - - BuildGoto(location, string(CreateLabelName(op3))) ; - DeclareLabel(location, falselabel) - ELSE - MetaErrorT2 (CurrentQuadToken, - 'set comparison is only allowed between the same set type, the set types used by {%1Eatd} and {%2atd} are different', - op1, op2) - END -END CodeIfSetEqu ; - - -(* - CodeIfSetNotEqu - codes if op1 # op2 then goto op3 - Note that if op1 and op2 are not both constants - since this will have been evaluated in CodeIfNotEqu. -*) - -PROCEDURE CodeIfSetNotEqu (left, right, destQuad: CARDINAL) ; -VAR - settype : CARDINAL ; - truelabel: ADDRESS ; - location : location_t ; -BEGIN - location := TokenToLocation(CurrentQuadToken) ; - - IF IsConst (left) AND IsConst (right) - THEN - InternalError ('this should have been folded in the calling procedure') - ELSIF IsConst (left) - THEN - settype := SkipType (GetType (right)) - ELSE - settype := SkipType (GetType (left)) - END ; - IF CompareTrees (FindSize (CurrentQuadToken, settype), FindSize (CurrentQuadToken, Word)) <= 0 - THEN - (* word size sets *) - DoJump (location, - BuildNotEqualTo(location, - BuildConvert (location, GetWordType (), Mod2Gcc (left), FALSE), - BuildConvert (location, GetWordType (), Mod2Gcc (right), FALSE)), - NIL, string (CreateLabelName (destQuad))) - ELSIF GetSType (left) = GetSType (right) - THEN - truelabel := string (CreateLabelName (destQuad)) ; - - BuildForeachWordInSetDoIfExpr (location, - Mod2Gcc (settype), - Mod2Gcc (left), Mod2Gcc (right), - GetMode (left) = LeftValue, - GetMode (right) = LeftValue, - IsConst (left), IsConst (right), - BuildNotEqualTo, - truelabel) - ELSE - MetaErrorT2 (CurrentQuadToken, - 'set comparison is only allowed between the same set type, the set types used by {%1Eatd} and {%2atd} are different', - left, right) - END -END CodeIfSetNotEqu ; - - (* ComparisonMixTypes - *) @@ -7730,7 +8311,7 @@ END ComparisonMixTypes ; PROCEDURE PerformCodeIfEqu (quad: CARDINAL) ; VAR - tl, tr : tree ; + tl, tr, condition : tree ; location : location_t ; left, right, dest, combined, leftpos, rightpos, destpos : CARDINAL ; @@ -7770,8 +8351,8 @@ BEGIN SkipType (GetType (right)), combined), left, right) ; - DoJump (location, BuildEqualTo (location, tl, tr), NIL, - string (CreateLabelName (dest))) + condition := BuildEqualTo (location, tl, tr) ; + IfExprJump (location, condition, string (CreateLabelName (dest))) END END END PerformCodeIfEqu ; @@ -7783,7 +8364,7 @@ END PerformCodeIfEqu ; PROCEDURE PerformCodeIfNotEqu (quad: CARDINAL) ; VAR - tl, tr : tree ; + tl, tr, condition : tree ; location : location_t ; left, right, dest, combined, leftpos, rightpos, destpos : CARDINAL ; @@ -7809,7 +8390,7 @@ BEGIN ELSIF IsConstSet (left) OR (IsVar (left) AND IsSet (SkipType (GetType (left)))) OR IsConstSet (right) OR (IsVar (right) AND IsSet (SkipType (GetType (right)))) THEN - CodeIfSetNotEqu (left, right, dest) + CodeIfSetNotEqu (combined, left, right, dest) ELSE IF IsComposite (GetType (left)) OR IsComposite (GetType (right)) THEN @@ -7824,8 +8405,8 @@ BEGIN SkipType (GetType (right)), combined), left, right) ; - DoJump (location, BuildNotEqualTo (location, tl, tr), NIL, - string (CreateLabelName (dest))) + condition := BuildNotEqualTo (location, tl, tr) ; + IfExprJump (location, condition, string (CreateLabelName (dest))) END END END PerformCodeIfNotEqu ; @@ -7938,207 +8519,205 @@ END BuildIfVarInConstValue ; BuildIfNotVarInConstValue - if not (var in constsetvalue) then goto trueexit *) -PROCEDURE BuildIfNotVarInConstValue (quad: CARDINAL; constsetvalue: PtrToValue; var, trueexit: CARDINAL) ; +PROCEDURE BuildIfNotVarInConstValue (location: location_t; tokenno: CARDINAL; + quad: CARDINAL; + constsetvalue: PtrToValue; + var, trueexit: CARDINAL) ; VAR - vt, lt, ht : tree ; + vt, lt, ht : tree ; type, - low, high, n: CARDINAL ; + low, high, n : CARDINAL ; falselabel, - truelabel : String ; - location : location_t ; + truelabel : String ; BEGIN - location := TokenToLocation(CurrentQuadToken) ; - - truelabel := string(CreateLabelName(trueexit)) ; + truelabel := string (CreateLabelName (trueexit)) ; n := 1 ; - WHILE GetRange(constsetvalue, n, low, high) DO - INC(n) + WHILE GetRange (constsetvalue, n, low, high) DO + INC (n) END ; IF n=2 THEN - (* actually only one set range, so we invert it *) - type := MixTypes3(low, high, var, CurrentQuadToken) ; - ConvertBinaryOperands(location, vt, lt, type, var, low) ; - ConvertBinaryOperands(location, ht, lt, type, high, low) ; - BuildIfNotInRangeGoto(location, vt, lt, ht, truelabel) + (* Only one set range, so we invert it *) + type := MixTypes3 (low, high, var, tokenno) ; + ConvertBinaryOperands (location, vt, lt, type, var, low) ; + ConvertBinaryOperands (location, ht, lt, type, high, low) ; + BuildIfNotInRangeGoto (location, vt, lt, ht, truelabel) ELSE n := 1 ; - falselabel := string(Sprintf1(Mark(InitString('.Lset%d')), quad)) ; - WHILE GetRange(constsetvalue, n, low, high) DO - type := MixTypes3(low, high, var, CurrentQuadToken) ; - ConvertBinaryOperands(location, vt, lt, type, var, low) ; - ConvertBinaryOperands(location, ht, lt, type, high, low) ; - BuildIfInRangeGoto(location, vt, lt, ht, falselabel) ; - INC(n) + falselabel := string (Sprintf1 (Mark (InitString ('.Lset%d')), quad)) ; + WHILE GetRange (constsetvalue, n, low, high) DO + type := MixTypes3 (low, high, var, tokenno) ; + ConvertBinaryOperands (location, vt, lt, type, var, low) ; + ConvertBinaryOperands (location, ht, lt, type, high, low) ; + BuildIfInRangeGoto (location, vt, lt, ht, falselabel) ; + INC (n) END ; - BuildGoto(location, truelabel) ; - DeclareLabel(location, falselabel) + BuildGoto (location, truelabel) ; + DeclareLabel (location, falselabel) END END BuildIfNotVarInConstValue ; (* - PerformCodeIfIn - code the quadruple: if op1 in op2 then goto op3 + SetWideIfIn - if M2WIDESET.In (set, element) then goto branch end. *) -PROCEDURE PerformCodeIfIn (quad: CARDINAL) ; +PROCEDURE SetWideIfIn (location: location_t; tokenno: CARDINAL; + invertCondition: BOOLEAN; + settype, element, set: CARDINAL; branch: CARDINAL) ; VAR - low, - high : CARDINAL ; - lowtree, - hightree, - offset : tree ; - fieldno : INTEGER ; - location : location_t ; - left, right, dest, combined, - leftpos, rightpos, destpos : CARDINAL ; - constExpr, overflow : BOOLEAN ; - op : QuadOperator ; + label : String ; + bit, call, + expr, + setarray : tree ; + setparam, + procedure: CARDINAL ; BEGIN - (* Ensure that any remaining undeclared constant literal is declared. *) - GetQuadOtok (quad, combined, op, - left, right, dest, - constExpr, overflow, - leftpos, rightpos, destpos) ; - location := TokenToLocation (combined) ; - IF IsConst(left) AND IsConst(right) + procedure := FromM2WIDESETImport (tokenno, MakeKey ("In")) ; + setparam := GetNthParamAnyClosest (procedure, 1, GetMainModule ()) ; + setarray := CreateSetArrayParam (location, tokenno, set, setparam) ; + bit := SetElementToBit (location, settype, element) ; + BuildParam (location, ToCardinal (location, bit)) ; + BuildParam (location, setarray) ; + call := BuildProcedureCallTree (location, + Mod2Gcc (procedure), + Mod2Gcc (GetType (procedure))) ; + SetLastFunction (NIL) ; + label := CreateLabelName (branch) ; + IF invertCondition THEN - InternalError ('should not get to here (if we do we should consider calling FoldIfIn)') - ELSIF CheckElementSetTypes (quad) + expr := BuildEqualTo (location, call, GetBooleanFalse ()) + ELSE + expr := BuildNotEqualTo (location, call, GetBooleanFalse ()) + END ; + IfExprJump (location, expr, string (label)) +END SetWideIfIn ; + + +(* + CodeNarrowIfIn - +*) + +PROCEDURE CodeNarrowIfIn (location: location_t; + settype: CARDINAL; invertCondition: BOOLEAN; + element, set: CARDINAL; branch: CARDINAL) ; +VAR + label, cond, + bit, mask, bitset: tree ; +BEGIN + bit := ToBitset (location, SetElementToBit (location, settype, element)) ; + mask := BuildMask (location, CalcBitsInSet (location, settype), FALSE) ; + (* Mask off only the bits we need. *) + bitset := ToBitset (location, BuildLogicalAnd (location, Mod2Gcc (set), mask)) ; + IF invertCondition THEN - IF IsConst(left) - THEN - fieldno := GetFieldNo(combined, left, GetType(right), offset) ; - IF fieldno>=0 - THEN - PushValue(left) ; - PushIntegerTree(offset) ; - ConvertToType(GetType(left)) ; - Sub ; - BuildIfConstInVar(location, - Mod2Gcc(SkipType(GetType(right))), - Mod2Gcc(right), PopIntegerTree(), - GetMode(right)=LeftValue, fieldno, - string(CreateLabelName(dest))) - ELSE - MetaErrorT1 (combined, 'bit exceeded the range of set {%1Eatd}', left) - END - ELSIF IsConst(right) - THEN - (* builds a cascaded list of if statements *) - PushValue(right) ; - BuildIfVarInConstValue(location, combined, GetValue(combined), left, dest) - ELSE - GetSetLimits(SkipType(GetType(right)), low, high) ; - - PushValue(low) ; - lowtree := PopIntegerTree() ; - PushValue(high) ; - hightree := PopIntegerTree() ; - - BuildIfVarInVar(location, - Mod2Gcc(SkipType(GetType(right))), - Mod2Gcc(right), Mod2Gcc(left), - GetMode(right)=LeftValue, - lowtree, hightree, - string(CreateLabelName(dest))) - END - END -END PerformCodeIfIn ; + cond := BuildIfNotInSet (location, bitset, bit) + ELSE + cond := BuildIfInSet (location, bitset, bit) + END ; + label := CreateLabelName (branch) ; + IfExprJump (location, cond, string (label)) +END CodeNarrowIfIn ; (* - PerformCodeIfNotIn - code the quadruple: if not (op1 in op2) then goto op3 + CodeIfInLower - code the quadruple: if element in set then goto branch. + The invertCondition can be set to TRUE to handle CodeIfNotIn. *) -PROCEDURE PerformCodeIfNotIn (quad: CARDINAL) ; +PROCEDURE CodeIfInLower (tokenno: CARDINAL; quad: CARDINAL; + invertCondition: BOOLEAN; + element, set, branch: CARDINAL) ; VAR - low, - high : CARDINAL ; - lowtree, - hightree, - offset : tree ; - fieldno : INTEGER ; - location : location_t ; - left, right, dest, combined, - leftpos, rightpos, destpos : CARDINAL ; - constExpr, overflow : BOOLEAN ; - op : QuadOperator ; + settype : CARDINAL ; + location : location_t ; + constsetvalue: PtrToValue ; BEGIN - (* Ensure that any remaining undeclared constant literal is declared. *) - GetQuadOtok (quad, combined, op, - left, right, dest, - overflow, constExpr, - leftpos, rightpos, destpos) ; - location := TokenToLocation (combined) ; - IF IsConst(left) AND IsConst(right) + location := TokenToLocation (tokenno) ; + (* Firstly ensure that any constant literal is declared. *) + DeclareConstant (tokenno, set) ; + DeclareConstant (tokenno, element) ; + DeclareConstructor (tokenno, quad, set) ; + DeclareConstructor (tokenno, quad, element) ; + checkDeclare (set) ; + checkDeclare (element) ; + settype := GetLType (set) ; + + IF IsConst (element) AND IsConst (set) THEN InternalError ('should not get to here (if we do we should consider calling FoldIfIn)') ELSIF CheckElementSetTypes (quad) THEN - IF IsConst(left) + IF IsConst (set) THEN - fieldno := GetFieldNo(combined, left, SkipType(GetType(right)), offset) ; - IF fieldno>=0 + PushValue (set) ; + constsetvalue := GetValue (tokenno) ; + IF invertCondition THEN - PushValue(left) ; - PushIntegerTree(offset) ; - ConvertToType(GetType(left)) ; - Sub ; - BuildIfNotConstInVar(location, - Mod2Gcc(SkipType(GetType(right))), - Mod2Gcc(right), PopIntegerTree(), - GetMode(right)=LeftValue, fieldno, - string(CreateLabelName(dest))) + (* Builds a cascaded list of if statements. *) + BuildIfNotVarInConstValue (location, tokenno, quad, constsetvalue, element, branch) ELSE - MetaErrorT1 (combined, 'bit exceeded the range of set {%1Eatd}', right) + (* Builds a very different cascaded list of if statements. *) + BuildIfVarInConstValue (location, tokenno, constsetvalue, element, branch) END - ELSIF IsConst(right) - THEN - (* builds a cascaded list of if statements *) - PushValue(right) ; - BuildIfNotVarInConstValue(quad, GetValue(combined), left, dest) ELSE - GetSetLimits(SkipType(GetType(right)), low, high) ; - - PushValue(low) ; - lowtree := PopIntegerTree() ; - PushValue(high) ; - hightree := PopIntegerTree() ; - - BuildIfNotVarInVar(location, - Mod2Gcc(SkipType(GetType(right))), - Mod2Gcc(right), Mod2Gcc(left), - GetMode(right)=LeftValue, - lowtree, hightree, - string(CreateLabelName(dest))) + Assert (IsVar (set)) ; + IF IsElementInRange (tokenno, settype, set, element) + THEN + (* Check for narrow and wide sets and call M2WIDESET if appropriate. *) + IF GetSetInWord (settype) + THEN + CodeNarrowIfIn (location, settype, invertCondition, element, set, branch) + ELSE + SetWideIfIn (location, tokenno, invertCondition, settype, element, set, branch) + END + END END END -END PerformCodeIfNotIn ; +END CodeIfInLower ; + + +(* + PerformCodeIfIn - +*) + +PROCEDURE PerformCodeIfIn (quad: CARDINAL; invert: BOOLEAN) ; +VAR + op : QuadOperator ; + element, set, branch, combined, + elementpos, setpos, destpos : CARDINAL ; + constExpr, overflow : BOOLEAN ; +BEGIN + GetQuadOtok (quad, combined, op, + element, set, branch, + overflow, constExpr, + elementpos, setpos, destpos) ; + CodeIfInLower (combined, quad, invert, element, set, branch) +END PerformCodeIfIn ; (* - CodeIfIn - code the quadruple: if op1 in op2 then goto op3 + CodeIfIn - code the quadruple: if element in set then goto branch. *) PROCEDURE CodeIfIn (quad: CARDINAL) ; BEGIN IF IsValidExpressionRelOp (quad, TRUE) THEN - PerformCodeIfIn (quad) + PerformCodeIfIn (quad, FALSE) END END CodeIfIn ; (* - CodeIfNotIn - code the quadruple: if not (op1 in op2) then goto op3 + CodeIfNotIn - code the quadruple: if not (element in set) then goto branch. *) PROCEDURE CodeIfNotIn (quad: CARDINAL) ; BEGIN IF IsValidExpressionRelOp (quad, TRUE) THEN - PerformCodeIfNotIn (quad) + PerformCodeIfIn (quad, TRUE) END END CodeIfNotIn ; @@ -8293,10 +8872,66 @@ BEGIN END InitBuiltinSyms ; +(* + gdbhook - a debugger convenience hook. +*) + +PROCEDURE gdbhook ; +END gdbhook ; + + +(* + BreakWhenQuadTranslated - to be called interactively by gdb. +*) + +PROCEDURE BreakWhenQuadTranslated (quad: CARDINAL) ; +BEGIN + BreakQuad := quad +END BreakWhenQuadTranslated ; + + +(* + CheckBreak - if quad = BreakQuad then call gdbhook. +*) + +PROCEDURE CheckBreak (quad: CARDINAL) ; BEGIN + IF quad = BreakQuad + THEN + gdbhook + END +END CheckBreak ; + + +(* + Init - +*) + +PROCEDURE Init ; +BEGIN + (* You might want to add the option -fm2-debug-trace=quad to cc1gm2 if + contenplating interactively debugging cc1gm2 using the scheme below. *) + BreakWhenQuadTranslated (0) ; (* Disable the interactive quad watch. *) + (* To examine when a quad is about to be converted into a gimple tree + run cc1gm2 from gdb and set a break point on gdbhook. + (gdb) break gdbhook + (gdb) run + Now below interactively call BreakWhenQuadTranslated with the quad + under investigation. *) + gdbhook ; + (* Now is the time to interactively call gdb, for example: + (gdb) print BreakWhenQuadTranslated (1234) + (gdb) cont + and you will arrive at gdbhook when this quad is about to be translated. *) Memset := NulSym ; Memcpy := NulSym ; UnboundedLabelNo := 0 ; CurrentQuadToken := 0 ; + SetTemporaryNo := 0 ; ScopeStack := InitStackWord () +END Init ; + + +BEGIN + Init END M2GenGCC. diff --git a/gcc/m2/gm2-compiler/M2MetaError.def b/gcc/m2/gm2-compiler/M2MetaError.def index 3dfe9fa01b42..8c660ad7cea9 100644 --- a/gcc/m2/gm2-compiler/M2MetaError.def +++ b/gcc/m2/gm2-compiler/M2MetaError.def @@ -43,7 +43,8 @@ FROM NameKey IMPORT Name ; {%1Td} get the type of the first symbol and describe it. {%1Sd} skip the type pseudonyms of the first symbol and describe it. {%1ua} force no quotes after substituting the text. - + {%1av} check name for starting with a vowel and if so append n to the + previous word. {%1D} sets the error message to where symbol 1 was declared. The declaration will choose the definition module, then implementation (or program) module. diff --git a/gcc/m2/gm2-compiler/M2MetaError.mod b/gcc/m2/gm2-compiler/M2MetaError.mod index 3aa7543231d7..5b8aafec4aa0 100644 --- a/gcc/m2/gm2-compiler/M2MetaError.mod +++ b/gcc/m2/gm2-compiler/M2MetaError.mod @@ -44,7 +44,8 @@ FROM Indexing IMPORT Index, InitIndex, KillIndex, GetIndice, PutIndice, FROM DynamicStrings IMPORT String, InitString, InitStringCharStar, ConCat, ConCatChar, Mark, string, KillString, - Dup, char, Length, Mult, EqualArray, Equal ; + Dup, char, Length, Mult, EqualArray, Equal, + RemoveWhitePostfix ; FROM SymbolTable IMPORT NulSym, IsDefImp, IsModule, IsInnerModule, @@ -88,6 +89,7 @@ TYPE highplus1 : CARDINAL ; len, ini : INTEGER ; + vowel, glyph, chain, root, @@ -507,13 +509,14 @@ BEGIN WITH eb DO useError := TRUE ; e := NIL ; - type := error ; (* default to the error color. *) + type := error ; (* Default to the error color. *) out := InitString ('') ; in := input ; highplus1 := HIGH (sym) + 1 ; len := Length (input) ; ini := 0 ; - glyph := FALSE ; (* nothing to output yet. *) + glyph := FALSE ; (* Nothing to output yet. *) + vowel := FALSE ; (* Check for a vowel when outputing string? *) quotes := TRUE ; positive := TRUE ; root := FALSE ; @@ -542,7 +545,7 @@ END push ; (* - pop - copies contents of oldblock into newblock. It only copies the error + pop - copies contents of fromblock into toblock. It only copies the error handle if the toblock.e is NIL. *) @@ -550,6 +553,7 @@ PROCEDURE pop (VAR toblock, fromblock: errorBlock) ; VAR c: colorType ; BEGIN + checkVowel (toblock, fromblock) ; IF empty (fromblock) THEN toblock.stackPtr := fromblock.stackPtr ; @@ -708,7 +712,7 @@ END killErrorBlock ; ) =: - op := {'a'|'q'|'t'|'d'|'n'|'s'|'B'|'D'|'F'|'G'|'H'|'M'|'U'|'E'|'V'|'W'|'A'} then =: + op := {'a'|'q'|'t'|'d'|'n'|'s'|'v'|'B'|'D'|'F'|'G'|'H'|'M'|'U'|'E'|'V'|'W'|'A'} then =: then := [ ':' ebnf ] =: *) @@ -972,6 +976,38 @@ BEGIN END empty ; +(* + checkVowel - checks to see if the from block word starts with + a vowel and if so adds an n to the to block output. +*) + +PROCEDURE checkVowel (VAR to: errorBlock; from: errorBlock) ; +BEGIN + IF from.vowel AND (NOT empty (from)) + THEN + IF isVowel (char (from.out, 0)) + THEN + IF Length (to.out) > 0 + THEN + to.out := RemoveWhitePostfix (Mark (to.out)) ; + to.out := ConCat (to.out, Mark (InitString ('n '))) ; + from.vowel := FALSE + END + END + END +END checkVowel ; + + +(* + isVowel - returns TRUE if ch is a, e, i, o or u. +*) + +PROCEDURE isVowel (ch: CHAR) : BOOLEAN ; +BEGIN + RETURN (ch = 'a') OR (ch = 'e') OR (ch = 'i') OR (ch = 'o') OR (ch = 'u') +END isVowel ; + + (* clear - remove the output string. *) @@ -1624,7 +1660,7 @@ BEGIN RETURN InitString('set') ELSIF IsUnknown(sym) THEN - RETURN InitString('an unknown') + RETURN InitString('unknown') ELSIF IsSubrange(sym) THEN RETURN InitString('subrange') @@ -1676,7 +1712,7 @@ END copySym ; (* - op := {'!'|'a'|'c'|'d'|'k'|'n'|'p'|'q'|'s'|'t'|'u'| + op := {'!'|'a'|'c'|'d'|'k'|'n'|'p'|'q'|'s'|'t'|'u'|'v'| 'A'|'B'|'C'|'D'|'E'|'F'|'G'|'H'|'K'|'M'|'N'| 'O'|'P'|'Q'|'R'|'S'|'T'|'U'|'V'|'W'|'X'|'Y'|'Z'} then =: *) @@ -1705,6 +1741,7 @@ BEGIN 's': doSkipType (eb, sym, bol) | 't': doType (eb, sym, bol) | 'u': eb.quotes := FALSE | + 'v': eb.vowel := TRUE | 'A': eb.type := aborta ; seenAbort := TRUE | 'B': declaredType (eb, sym, bol) | diff --git a/gcc/m2/gm2-compiler/M2Options.def b/gcc/m2/gm2-compiler/M2Options.def index 4cb7f8f483eb..59b59244363a 100644 --- a/gcc/m2/gm2-compiler/M2Options.def +++ b/gcc/m2/gm2-compiler/M2Options.def @@ -55,9 +55,10 @@ VAR StyleChecking, (* -Wstudents checks for common student errs*) UnboundedByReference, (* -funbounded-by-reference *) VerboseUnbounded, (* -Wverbose-unbounded *) - OptimizeUncalledProcedures, (* -Ouncalled removes uncalled procedures *) - OptimizeBasicBlock, (* -Obb create basic blocks and optimize. *) - OptimizeCommonSubExpressions, (* -Ocse optimize common subexpressions *) + OptimizeUncalledProcedures, (* Removes uncalled procedures? *) + OptimizeBasicBlock, (* Create basic blocks and optimize? *) + OptimizeCommonSubExpressions, (* Optimize common subexpressions? *) + OptimizeSets, (* TRUE if -On when n>0. False for -Os. *) WholeProgram, (* -fwhole-program optimization. *) NilChecking, (* -fnil makes compiler test for pointer *) (* NIL. *) @@ -115,6 +116,7 @@ VAR SharedFlag, (* -fshared indicating this module needs *) (* the shared library version of the *) (* scaffold. *) + TimeReport, MemReport, (* -ftime-report and -fmem-report values. *) ForcedLocation, GenerateStatementNote, Optimizing, @@ -1165,6 +1167,34 @@ PROCEDURE SetFileOffsetBits (value: BOOLEAN; bits: CARDINAL) : BOOLEAN ; PROCEDURE GetFileOffsetBits () : CARDINAL ; +(* + SetMemReport - set MemReport to value. +*) + +PROCEDURE SetMemReport (value: BOOLEAN) ; + + +(* + SetTimeReport - set TimeReport to value. +*) + +PROCEDURE SetTimeReport (value: BOOLEAN) ; + + +(* + SetWideset - set the Wideset flag to value. +*) + +PROCEDURE SetWideset (value: BOOLEAN) ; + + +(* + GetWideset - return the Wideset flag value. +*) + +PROCEDURE GetWideset () : BOOLEAN ; + + (* FinaliseOptions - once all options have been parsed we set any inferred values. diff --git a/gcc/m2/gm2-compiler/M2Options.mod b/gcc/m2/gm2-compiler/M2Options.mod index 542b87b12d2c..cde3c36b035b 100644 --- a/gcc/m2/gm2-compiler/M2Options.mod +++ b/gcc/m2/gm2-compiler/M2Options.mod @@ -85,6 +85,7 @@ VAR DumpDecl, (* -fm2-dump=decl. *) DumpGimple, (* -fm2-dump=gimple. *) DumpQuad, (* -fq, -fm2-dump=quad dump quadruples. *) + WidesetFlag, (* -fwideset. *) MFlag, MMFlag, MPFlag, @@ -1326,12 +1327,14 @@ BEGIN Optimizing := TRUE ; OptimizeBasicBlock := TRUE ; OptimizeUncalledProcedures := TRUE ; - OptimizeCommonSubExpressions := TRUE + OptimizeCommonSubExpressions := TRUE ; + OptimizeSets := TRUE ELSE Optimizing := FALSE ; OptimizeBasicBlock := FALSE ; OptimizeUncalledProcedures := FALSE ; - OptimizeCommonSubExpressions := FALSE + OptimizeCommonSubExpressions := FALSE ; + OptimizeSets := FALSE END END SetOptimizing ; @@ -2074,6 +2077,46 @@ BEGIN END GetFileOffsetBits ; +(* + SetMemReport - set MemReport to value. +*) + +PROCEDURE SetMemReport (value: BOOLEAN) ; +BEGIN + MemReport := value +END SetMemReport ; + + +(* + SetTimeReport - set TimeReport to value. +*) + +PROCEDURE SetTimeReport (value: BOOLEAN) ; +BEGIN + TimeReport := value +END SetTimeReport ; + + +(* + SetWideset - set the Wideset flag to value. +*) + +PROCEDURE SetWideset (value: BOOLEAN) ; +BEGIN + WidesetFlag := value +END SetWideset ; + + +(* + GetWideset - return the Wideset flag value. +*) + +PROCEDURE GetWideset () : BOOLEAN ; +BEGIN + RETURN WidesetFlag +END GetWideset ; + + BEGIN cflag := FALSE ; (* -c. *) RuntimeModuleOverride := InitString (DefaultRuntimeModuleOverride) ; @@ -2099,6 +2142,7 @@ BEGIN OptimizeBasicBlock := FALSE ; OptimizeUncalledProcedures := FALSE ; OptimizeCommonSubExpressions := FALSE ; + OptimizeSets := FALSE ; NilChecking := FALSE ; WholeDivChecking := FALSE ; WholeValueChecking := FALSE ; @@ -2168,6 +2212,9 @@ BEGIN DumpGimple := FALSE ; M2Dump := NIL ; M2DumpFilter := NIL ; + TimeReport := FALSE ; + MemReport := FALSE ; EnableForward := TRUE ; OffTBits := 0 ; (* Default to CSSIZE_T. *) + WidesetFlag := TRUE ; END M2Options. diff --git a/gcc/m2/gm2-compiler/M2Quads.mod b/gcc/m2/gm2-compiler/M2Quads.mod index 748ce2498dbb..ae7dde0f9b23 100644 --- a/gcc/m2/gm2-compiler/M2Quads.mod +++ b/gcc/m2/gm2-compiler/M2Quads.mod @@ -57,6 +57,8 @@ FROM SymbolTable IMPORT ModeOfAddr, GetMode, PutMode, GetSymName, IsUnknown, MakeConstString, MakeConstant, MakeConstVar, MakeConstStringM2nul, MakeConstStringCnul, Make2Tuple, IsTuple, + MakeSubrange, PutSubrange, + PutSetArray, MakeSetArray, RequestSym, MakePointer, PutPointer, SkipType, GetDType, GetSType, GetLType, @@ -109,6 +111,7 @@ FROM SymbolTable IMPORT ModeOfAddr, GetMode, PutMode, GetSymName, IsUnknown, IsFieldEnumeration, IsVar, IsProcType, IsType, IsSubrange, IsExported, IsConst, IsConstString, IsModule, IsDefImp, + IsConstVar, IsArray, IsUnbounded, IsProcedureNested, IsParameterUnbounded, IsPartialUnbounded, IsProcedureBuiltin, @@ -150,7 +153,8 @@ FROM M2Batch IMPORT MakeDefinitionSource ; FROM M2GCCDeclare IMPORT PutToBeSolvedByQuads ; FROM FifoQueue IMPORT GetConstFromFifoQueue, - PutConstructorIntoFifoQueue, GetConstructorFromFifoQueue ; + PutConstructorIntoFifoQueue, GetConstructorFromFifoQueue, + GetSetFromFifoQueue ; FROM M2Comp IMPORT CompilingImplementationModule, CompilingProgramModule ; @@ -280,6 +284,8 @@ FROM M2CaseList IMPORT PushCase, PopCase, AddRange, BeginCaseList, EndCaseList, FROM PCSymBuild IMPORT SkipConst ; FROM m2builtins IMPORT GetBuiltinTypeInfoType ; FROM M2LangDump IMPORT IsDumpRequired ; +FROM SymbolConversion IMPORT GccKnowsAbout ; +FROM M2Diagnostic IMPORT Diagnostic, InitMemDiagnostic, MemIncr, MemSet ; IMPORT M2Error, FIO, SFIO, DynamicStrings, StdIO ; @@ -399,6 +405,7 @@ VAR (* in order. *) NoOfQuads : CARDINAL ; (* Number of used quadruples. *) Head : CARDINAL ; (* Head of the list of quadruples. *) + QuadMemDiag : Diagnostic ; (* Contains memory related statistics. *) BreakQuad : CARDINAL ; (* Stop when BreakQuad is created. *) @@ -2063,7 +2070,9 @@ BEGIN ELSE INC (NoOfQuads) ; PutIndice (QuadArray, QuadNo, f) ; - f^.NoOfTimesReferenced := 0 + f^.NoOfTimesReferenced := 0 ; + MemSet (QuadMemDiag, 1, NoOfQuads) ; + MemIncr (QuadMemDiag, 2, SIZE (f^)) END END ; WITH f^ DO @@ -3404,7 +3413,7 @@ BEGIN IF IsPseudoBaseProcedure (expr) OR IsPseudoBaseFunction (expr) THEN MetaErrorT1 (exprtok, - 'an assignment cannot assign a {%1d} {%1a}', expr) + 'an assignment cannot assign a {%1dv} {%1a}', expr) END END CheckCompatibleWithBecomes ; @@ -3812,25 +3821,24 @@ END BuildAssignConstant ; (* - doBuildAssignment - subsiduary procedure of BuildAssignment. - It builds the assignment and optionally - checks the types are compatible. + BuildAssignmentBoolean - build the quadruples for a boolean variable or constant + which will be assigned to the result of a boolean expression. + For example: + + foo := a = b ; + foo := a IN b ; + + The boolean result is contained in the control flow + the true value will emerge from the quad path t. + The false value will emerge from the quad path f. + This procedure terminates both paths by backpatching + and assigns TRUE or FALSE to the variable/constant. + A variable maybe an L value so it will require dereferencing. *) -PROCEDURE doBuildAssignment (becomesTokNo: CARDINAL; checkTypes, checkOverflow: BOOLEAN) ; -VAR - r, w, - t, f, - Array, - Des, Exp : CARDINAL ; - combinedtok, - destok, exptok: CARDINAL ; +PROCEDURE BuildAssignmentBoolean (becomesTokNo: CARDINAL; checkOverflow: BOOLEAN; + t, f: CARDINAL; Des: CARDINAL; destok: CARDINAL) ; BEGIN - DisplayStack ; - IF IsBoolean (1) - THEN - PopBool (t, f) ; - PopTtok (Des, destok) ; PutVarConditional (Des, TRUE) ; (* Des will contain the result of a boolean relop. *) (* Conditional Boolean Assignment. *) BackPatch (t, NextQuad) ; @@ -3852,6 +3860,36 @@ BEGIN ELSE GenQuadO (becomesTokNo, BecomesOp, Des, NulSym, False, checkOverflow) END +END BuildAssignmentBoolean ; + + +(* + doBuildAssignment - subsiduary procedure of BuildAssignment. + It builds the assignment and optionally + checks the types are compatible. +*) + +PROCEDURE doBuildAssignment (becomesTokNo: CARDINAL; checkTypes, checkOverflow: BOOLEAN) ; +VAR + r, w, + t, f, + Array, + Des, Exp : CARDINAL ; + combinedtok, + destok, exptok: CARDINAL ; +BEGIN + DisplayStack ; + IF IsBoolean (1) + THEN + PopBool (t, f) ; + PopTtok (Des, destok) ; + IF IsVar (Des) OR IsConstVar (Des) + THEN + BuildAssignmentBoolean (becomesTokNo, checkOverflow, + t, f, Des, destok) + ELSE + MetaErrorT1 (destok, 'expecting the designator {%1Ead} to be a constant or a variable and not a {%1dv}', Des) + END ELSE PopTrwtok (Exp, r, exptok) ; MarkAsRead (r) ; @@ -5795,8 +5833,8 @@ BEGIN WHILE i<=n DO IF IsVarParamAny (ProcType, i) # IsVarParamAny (CheckedProcedure, i) THEN - MetaError3 ('parameter {%3n} in {%1dD} causes a mismatch it was declared as a {%2d}', ProcType, GetNth (ProcType, i), i) ; - MetaError3 ('parameter {%3n} in {%1dD} causes a mismatch it was declared as a {%2d}', call, GetNth (call, i), i) + MetaError3 ('parameter {%3n} in {%1dD} causes a mismatch it was declared as a {%2dv}', ProcType, GetNth (ProcType, i), i) ; + MetaError3 ('parameter {%3n} in {%1dD} causes a mismatch it was declared as a {%2dv}', call, GetNth (call, i), i) END ; BuildRange (InitTypesParameterCheck (tokno, CheckedProcedure, i, GetNthParamAnyClosest (CheckedProcedure, i, GetCurrentModule ()), @@ -7863,9 +7901,9 @@ BEGIN (* Error issue message and fake return stack. *) IF Iso THEN - MetaErrorT0 (functok, 'the only functions permissible in a constant expression are: {%kCAP}, {%kCHR}, {%kCMPLX}, {%kFLOAT}, {%kHIGH}, {%kIM}, {%kLENGTH}, {%kMAX}, {%kMIN}, {%kODD}, {%kORD}, {%kRE}, {%kSIZE}, {%kTSIZE}, {%kTRUNC}, {%kVAL} and gcc builtins') + MetaErrorT0 (functok, 'the only functions permissible in a constant expression are: {%kCAP}, {%kCHR}, {%kCMPLX}, {%kFLOAT}, {%kHIGH}, {%kIM}, {%kLENGTH}, {%kMAX}, {%kMIN}, {%kODD}, {%kORD}, {%kRE}, {%kSIZE}, {%kTSIZE}, {%kTBITSIZE}, {%kTRUNC}, {%kVAL} and gcc builtins') ELSE - MetaErrorT0 (functok, 'the only functions permissible in a constant expression are: {%kCAP}, {%kCHR}, {%kFLOAT}, {%kHIGH}, {%kMAX}, {%kMIN}, {%kODD}, {%kORD}, {%kSIZE}, {%kTSIZE}, {%kTRUNC}, {%kVAL} and gcc builtins') + MetaErrorT0 (functok, 'the only functions permissible in a constant expression are: {%kCAP}, {%kCHR}, {%kFLOAT}, {%kHIGH}, {%kMAX}, {%kMIN}, {%kODD}, {%kORD}, {%kSIZE}, {%kTSIZE}, {%kTRUNC}, {%kTBITSIZE}, {%kVAL} and gcc builtins') END ; IF NoOfParam > 0 THEN @@ -8212,7 +8250,7 @@ BEGIN PushTFtok (ReturnVar, Address, combinedtok) ELSE MetaErrorT1 (functok, - 'the first parameter to ADDADR {%1Ea} must be a variable of type ADDRESS or a {%EkPOINTER}, rather than a {%1Etsd}', + 'the first parameter to ADDADR {%1Ea} must be a variable of type ADDRESS or a {%EkPOINTER}, rather than a {%1Etsdv}', VarSym) ; PushTFtok (MakeConstLit (combinedtok, MakeKey('0'), Address), Address, combinedtok) END @@ -8295,7 +8333,7 @@ BEGIN PushTFtok (ReturnVar, Address, combinedtok) ELSE MetaErrorT1 (functok, - 'the first parameter to {%EkSUBADR} {%1Ea} must be a variable of type ADDRESS or a {%EkPOINTER}, rather than a {%1Etsd}', + 'the first parameter to {%EkSUBADR} {%1Ea} must be a variable of type ADDRESS or a {%EkPOINTER}, rather than a {%1Etsdv}', VarSym) ; PushTFtok (MakeConstLit (vartok, MakeKey('0'), Address), Address, vartok) END @@ -8394,13 +8432,13 @@ BEGIN PushT (2) ; (* Two parameters *) BuildConvertFunction (Convert, ConstExpr) ELSE - MetaError1 ('the second parameter to {%EkDIFADR} {%1Ea} must be a variable of type ADDRESS or a {%EkPOINTER}, rather than a {%1Etsd}', + MetaError1 ('the second parameter to {%EkDIFADR} {%1Ea} must be a variable of type ADDRESS or a {%EkPOINTER}, rather than a {%1Etsdv}', OperandSym) ; PushTFtok (MakeConstLit (combinedtok, MakeKey ('0'), Integer), Integer, combinedtok) END ELSE MetaErrorT1 (vartok, - 'the first parameter to {%EkDIFADR} {%1Ea} must be a variable of type ADDRESS or a {%EkPOINTER}, rather than a {%1Etsd}', + 'the first parameter to {%EkDIFADR} {%1Ea} must be a variable of type ADDRESS or a {%EkPOINTER}, rather than a {%1Etsdv}', VarSym) ; PushTFtok (MakeConstLit (combinedtok, MakeKey ('0'), Integer), Integer, combinedtok) END @@ -8615,7 +8653,7 @@ BEGIN IF ConstExpr AND IsVar (Var) THEN MetaErrorT2 (optok, - 'the procedure function {%1Ea} is being called from within a constant expression and therefore the parameter {%2a} must be a constant, seen a {%2da}', + 'the procedure function {%1Ea} is being called from within a constant expression and therefore the parameter {%2a} must be a constant, seen a {%2dav}', Func, Var) ; RETURN TRUE ELSE @@ -9352,7 +9390,8 @@ BEGIN PopTtok (varSet, vartok) ; PopT (procSym) ; combinedtok := MakeVirtualTok (functok, functok, exptok) ; - IF (GetSType (varSet) # NulSym) AND IsSet (GetDType (varSet)) + IF (GetSType (varSet) # NulSym) + AND (IsSet (GetDType (varSet)) OR IsGenericSystemType (GetDType (varSet))) THEN derefExp := DereferenceLValue (exptok, Exp) ; BuildRange (InitShiftCheck (varSet, derefExp)) ; @@ -9427,7 +9466,8 @@ BEGIN MarkAsRead (r) ; PopTtok (varSet, vartok) ; PopT (procSym) ; - IF (GetSType (varSet) # NulSym) AND IsSet (GetDType (varSet)) + IF (GetSType (varSet) # NulSym) + AND (IsSet (GetDType (varSet)) OR IsGenericSystemType (GetDType (varSet))) THEN combinedtok := MakeVirtualTok (functok, functok, exptok) ; derefExp := DereferenceLValue (exptok, Exp) ; @@ -11609,7 +11649,7 @@ BEGIN BuildStaticArray ELSE MetaErrorT1 (arrayTok, - 'can only index static or dynamic arrays, {%1Ead} is not an array but a {%tad}', + 'can only index static or dynamic arrays, {%1Ead} is not an array but a {%tadv}', Sym) ; BuildDesignatorError ('bad array access') END @@ -11971,7 +12011,7 @@ BEGIN MarkAsRead (rw) ; BuildDesignatorPointerError (Type1, rw, combinedtok, 'bad opaque pointer dereference') ELSE - MetaError2 ('{%1Ead} is not a pointer type but a {%2d}', Sym1, Type1) ; + MetaError2 ('{%1Ead} is not a pointer type but a {%2dv}', Sym1, Type1) ; MarkAsRead (rw) ; BuildDesignatorPointerError (Type1, rw, combinedtok, 'bad pointer dereference') END @@ -13065,7 +13105,7 @@ BEGIN WarnStringAt (s, OldPos) ; s := InitString ('combined') ; WarnStringAt (s, OperatorPos) ; - (* MetaErrorT1 (GetDeclaredMod (t), 'in binary with a {%1a}', t) *) + (* MetaErrorT1 (GetDeclaredMod (t), 'in binary with a {%1av}', t) *) END ; GenQuadOtok (OperatorPos, MakeOp (NewOp), value, left, right, checkOverflow, OperatorPos, leftpos, rightpos) @@ -13384,12 +13424,12 @@ BEGIN THEN MetaErrorsT1 (tokpos, '{%1Ead} expected a variable, procedure, constant or expression', - 'and it was declared as a {%1Dd}', sym) ; + 'and it was declared as a {%1Ddv}', sym) ; ELSIF (type#NulSym) AND IsArray(type) THEN MetaErrorsT1 (tokpos, '{%1EU} not expecting an array variable as an operand for either comparison or binary operation', - 'it was declared as a {%1Dd}', sym) + 'it was declared as a {%1Ddv}', sym) ELSIF IsConstString (sym) AND IsConstStringKnown (sym) AND (GetStringLength (tokpos, sym) > 1) THEN MetaErrorT1 (tokpos, @@ -14014,9 +14054,12 @@ END ds ; PROCEDURE DisplayQuad (QuadNo: CARDINAL) ; BEGIN + IF QuadNo # 0 + THEN DSdbEnter ; fprintf1 (GetDumpFile (), '%4d ', QuadNo) ; WriteQuad(QuadNo) ; fprintf0 (GetDumpFile (), '\n') ; DSdbExit + END END DisplayQuad ; @@ -14337,7 +14380,11 @@ BEGIN THEN fprintf0 (GetDumpFile (), '[') ; WriteMode (GetMode (Sym)) ; fprintf0 (GetDumpFile (), ']') END ; - fprintf1 (GetDumpFile (), '(%d)', Sym) + fprintf1 (GetDumpFile (), '(%d)', Sym) ; + IF GccKnowsAbout (Sym) + THEN + fprintf0 (GetDumpFile (), '[gcc]') + END END END WriteOperand ; @@ -16173,6 +16220,10 @@ BEGIN InitList(VarientFields) ; VarientFieldNo := 0 ; NoOfQuads := 0 ; + QuadMemDiag + := InitMemDiagnostic + ('M2Quad:Quadruples', + '{0N} total quadruples {1d} consuming {2M} ram {0M} ({2P})') END Init ; diff --git a/gcc/m2/gm2-compiler/M2Range.mod b/gcc/m2/gm2-compiler/M2Range.mod index f1516d3a5e50..a51f224727a0 100644 --- a/gcc/m2/gm2-compiler/M2Range.mod +++ b/gcc/m2/gm2-compiler/M2Range.mod @@ -1978,7 +1978,7 @@ BEGIN IF NOT reportedError (r) THEN MetaErrorT2 (tokenNo, - 'assignment designator {%1Ea} {%1ta:of type {%1ta}} {%1d:is a {%1d}} and expression {%2a} {%2tad:of type {%2tad}} are incompatible', + 'assignment designator {%1Ea} {%1ta:of type {%1ta}} {%1d:is a {%1dv}} and expression {%2a} {%2tad:of type {%2tad}} are incompatible', des, expr) END ; setReported (r) @@ -2047,7 +2047,7 @@ BEGIN ELSE MetaErrorT2 (tokenNo, 'assignment designator {%1Ea} {%1ta:of type {%1ta}}' + - ' {%1d:is a {%1d}} and expression {%2a}' + + ' {%1d:is a {%1dv}} and expression {%2a}' + ' {%2tad:of type {%2tad}} are incompatible', des, expr) END ; diff --git a/gcc/m2/gm2-compiler/M2Scaffold.mod b/gcc/m2/gm2-compiler/M2Scaffold.mod index ff8e20f65a36..e337534fcc36 100644 --- a/gcc/m2/gm2-compiler/M2Scaffold.mod +++ b/gcc/m2/gm2-compiler/M2Scaffold.mod @@ -580,7 +580,7 @@ BEGIN ELSIF ScaffoldDynamic AND (NOT cflag) THEN MetaErrorT0 (tokenno, - '{%O}dynamic linking enabled but no module ctor list has been created, hint use -fuse-list=filename or -fgen-module-list=-') + '{%O}dynamic module registration enabled but no module ctor list has been created, hint use -fuse-list=filename or -fgen-module-list=-') END ; initFunction := MakeProcedure (tokenno, MakeKey ("_M2_init")) ; diff --git a/gcc/m2/gm2-compiler/M2SymInit.mod b/gcc/m2/gm2-compiler/M2SymInit.mod index 6c8912f2c4c0..2740395cf86d 100644 --- a/gcc/m2/gm2-compiler/M2SymInit.mod +++ b/gcc/m2/gm2-compiler/M2SymInit.mod @@ -155,11 +155,16 @@ BEGIN printf (" initialized\n") ; IF (desc^.type # NulSym) AND IsRecord (desc^.type) THEN - i := 1 ; - n := Indexing.HighIndice (desc^.rec.fieldDesc) ; - WHILE i <= n DO - PrintSymInit (Indexing.GetIndice (desc^.rec.fieldDesc, i)) ; - INC (i) + IF desc^.rec.fieldDesc = NIL + THEN + printf (" record field descriptor has not been initialized yet\n") ; + ELSE + i := 1 ; + n := Indexing.HighIndice (desc^.rec.fieldDesc) ; + WHILE i <= n DO + PrintSymInit (Indexing.GetIndice (desc^.rec.fieldDesc, i)) ; + INC (i) + END END END END PrintSymInit ; diff --git a/gcc/m2/gm2-compiler/M2System.mod b/gcc/m2/gm2-compiler/M2System.mod index 68ed9dc52ed5..d267df9af5cb 100644 --- a/gcc/m2/gm2-compiler/M2System.mod +++ b/gcc/m2/gm2-compiler/M2System.mod @@ -509,8 +509,8 @@ END IsPseudoSystemFunction ; PROCEDURE IsPseudoSystemFunctionConstExpression (sym: CARDINAL) : BOOLEAN ; BEGIN RETURN( - (sym=Size) OR (sym=TSize) OR (sym=Rotate) OR (sym=Shift) OR - (Iso AND ((sym=Cast) OR (sym=MakeAdr))) + (sym=Size) OR (sym=TSize) OR (sym=TBitSize) OR (sym=Rotate) OR (sym=Shift) OR + (Iso AND ((sym=Cast) OR (sym=MakeAdr) OR (sym=TBitSize))) ) END IsPseudoSystemFunctionConstExpression ; diff --git a/gcc/m2/gm2-compiler/NameKey.mod b/gcc/m2/gm2-compiler/NameKey.mod index 5d68940dc0ee..47c8efbd7204 100644 --- a/gcc/m2/gm2-compiler/NameKey.mod +++ b/gcc/m2/gm2-compiler/NameKey.mod @@ -31,6 +31,7 @@ FROM NumberIO IMPORT WriteCard ; FROM StrLib IMPORT StrLen ; FROM libc IMPORT strlen ; FROM ASCII IMPORT nul ; +(* FROM M2Diagnostic IMPORT Diagnostic, InitMemDiagnostic, MemIncr, MemDecr, MemSet ; *) TYPE @@ -50,6 +51,10 @@ VAR BinaryTree: NameNode ; KeyIndex : Index ; LastIndice: CARDINAL ; +(* + NameKeyTreeMemDiag, + NameKeyWordMemDiag: Diagnostic ; +*) (* @@ -144,11 +149,19 @@ BEGIN IF result=less THEN NEW(child) ; - father^.Left := child + father^.Left := child ; + (* + MemIncr (NameKeyTreeMemDiag, 1, 1) ; + MemIncr (NameKeyTreeMemDiag, 2, SIZE (child^)) + *) ELSIF result=greater THEN NEW(child) ; - father^.Right := child + father^.Right := child ; + (* + MemIncr (NameKeyTreeMemDiag, 1, 1) ; + MemIncr (NameKeyTreeMemDiag, 2, SIZE (child^)) + *) END ; WITH child^ DO Right := NIL ; @@ -161,7 +174,11 @@ BEGIN k := LastIndice ELSE DEALLOCATE(n, higha+1) ; - k := child^.Key + k := child^.Key ; + (* + MemDecr (NameKeyWordMemDiag, 1, 1) ; + MemDecr (NameKeyWordMemDiag, 2, higha + 1) + *) END ; RETURN( k ) END DoMakeKey ; @@ -182,9 +199,13 @@ VAR BEGIN higha := StrLen(a) ; ALLOCATE(p, higha+1) ; + (* + MemIncr (NameKeyWordMemDiag, 1, 1) ; + MemIncr (NameKeyWordMemDiag, 2, higha + 1) ; + *) IF p=NIL THEN - HALT (* out of memory error *) + HALT (* Out of memory error. *) ELSE n := p ; i := 0 ; @@ -194,7 +215,6 @@ BEGIN INC(p) END ; p^ := nul ; - RETURN( DoMakeKey(n, higha) ) END END MakeKey ; @@ -223,7 +243,7 @@ BEGIN ALLOCATE(p, higha+1) ; IF p=NIL THEN - HALT (* out of memory error *) + HALT (* Out of memory error. *) ELSE n := p ; pa := a ; @@ -413,8 +433,18 @@ END CharKey ; BEGIN +(* + NameKeyWordMemDiag + := InitMemDiagnostic + ('NameKey:Words', + '{0N} total words {1d} consuming {2M} ({2P})') ; + NameKeyTreeMemDiag + := InitMemDiagnostic + ('NameKey:Tree', + '{0N} total tree nodes {1d} consuming {2M} ({2P})') ; +*) LastIndice := 0 ; KeyIndex := InitIndex(1) ; NEW(BinaryTree) ; - BinaryTree^.Left := NIL + BinaryTree^.Left := NIL ; END NameKey. diff --git a/gcc/m2/gm2-compiler/P1SymBuild.mod b/gcc/m2/gm2-compiler/P1SymBuild.mod index 08a0fc3f9eb0..d6c0f2fcdcf5 100644 --- a/gcc/m2/gm2-compiler/P1SymBuild.mod +++ b/gcc/m2/gm2-compiler/P1SymBuild.mod @@ -914,7 +914,7 @@ BEGIN EndBuildForward. *) PutDeclared (tokno, ProcSym) ELSE - MetaError1 ('expecting a procedure name and symbol {%1Ea} has been declared as a {%1d}', ProcSym) ; + MetaError1 ('expecting a procedure name and symbol {%1Ea} has been declared as a {%1dv}', ProcSym) ; PushT (ProcSym) ; RETURN END ; diff --git a/gcc/m2/gm2-compiler/P2SymBuild.mod b/gcc/m2/gm2-compiler/P2SymBuild.mod index 54e624f64929..8efed994df0b 100644 --- a/gcc/m2/gm2-compiler/P2SymBuild.mod +++ b/gcc/m2/gm2-compiler/P2SymBuild.mod @@ -2589,7 +2589,7 @@ BEGIN Field := PutFieldRecord(Record, OperandT(NoOfPragmas*2+NoOfFields+3-i), Type, Varient) ; HandleRecordFieldPragmas(Record, Field, NoOfPragmas) ELSE - MetaErrors2('record field {%1ad} has already been declared inside a {%2Dd} {%2a}', + MetaErrors2('record field {%1ad} has already been declared inside a {%2Ddv} {%2a}', 'attempting to declare a duplicate record field', fsym, Parent) END ; (* adjust the location of declaration to the one on the stack (rather than GetTokenNo). *) diff --git a/gcc/m2/gm2-compiler/P3Build.bnf b/gcc/m2/gm2-compiler/P3Build.bnf index 0033d33e446a..89a122b9c13b 100644 --- a/gcc/m2/gm2-compiler/P3Build.bnf +++ b/gcc/m2/gm2-compiler/P3Build.bnf @@ -1041,7 +1041,8 @@ SilentExpList := SilentConstExpression { "," SilentConstExpression } =: -- end of the Silent constant rules -SetType := ( "SET" | "PACKEDSET" ) "OF" SimpleType =: +SetType := ( "SET" | "PACKEDSET" ) "OF" SimpleType + =: PointerType := "POINTER" "TO" Type diff --git a/gcc/m2/gm2-compiler/PathName.def b/gcc/m2/gm2-compiler/PathName.def index 39d9b15bb3a1..efd21c694d9d 100644 --- a/gcc/m2/gm2-compiler/PathName.def +++ b/gcc/m2/gm2-compiler/PathName.def @@ -1,13 +1,25 @@ -DEFINITION MODULE PathName ; +(* PathName.def maintains a dictionary of named paths. -(* - Title : PathName - Author : Gaius Mulley - System : GNU Modula-2 - Date : Wed Feb 8 09:59:46 2023 - Revision : $Version$ - Description: maintains a dictionary of named paths. -*) +Copyright (C) 2001-2023 Free Software Foundation, Inc. +Contributed by Gaius Mulley . + +This file is part of GNU Modula-2. + +GNU Modula-2 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. + +GNU Modula-2 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 GNU Modula-2; see the file COPYING3. If not see +. *) + +DEFINITION MODULE PathName ; FROM DynamicStrings IMPORT String ; FROM DynamicPath IMPORT PathList ; diff --git a/gcc/m2/gm2-compiler/PathName.mod b/gcc/m2/gm2-compiler/PathName.mod index 0ba902408204..e641a4fea428 100644 --- a/gcc/m2/gm2-compiler/PathName.mod +++ b/gcc/m2/gm2-compiler/PathName.mod @@ -1,5 +1,4 @@ (* M2PathName.mod maintain a dictionary of named paths. - Copyright (C) 2023-2025 Free Software Foundation, Inc. Contributed by Gaius Mulley . diff --git a/gcc/m2/gm2-compiler/SymbolConversion.mod b/gcc/m2/gm2-compiler/SymbolConversion.mod index c25fe5735d5a..dd83b4fa5958 100644 --- a/gcc/m2/gm2-compiler/SymbolConversion.mod +++ b/gcc/m2/gm2-compiler/SymbolConversion.mod @@ -39,7 +39,7 @@ FROM SYSTEM IMPORT ADDRESS ; CONST USEPOISON = TRUE ; - GGCPOISON = 0A5A5A5A5H ; (* poisoned memory contains this code *) + GGCPOISON = 0A5A5A5A5H ; (* Poisoned memory contains this code. *) TYPE PtrToCardinal = POINTER TO CARDINAL ; @@ -47,6 +47,38 @@ TYPE VAR mod2gcc : Index ; PoisonedSymbol: ADDRESS ; + BookSym : CARDINAL ; (* Allows interactive debugging. *) + + +(* + gdbhook - a debugger convenience hook. +*) + +PROCEDURE gdbhook ; +END gdbhook ; + + +(* + BreakWhenSymBooked - to be called interactively by gdb. +*) + +PROCEDURE BreakWhenSymBooked (sym: CARDINAL) ; +BEGIN + BookSym := sym +END BreakWhenSymBooked ; + + +(* + CheckBook - if sym = BookSym then call gdbhook. +*) + +PROCEDURE CheckBook (sym: CARDINAL) ; +BEGIN + IF sym = BookSym + THEN + gdbhook + END +END CheckBook ; (* @@ -117,6 +149,7 @@ VAR old: tree ; t : PtrToCardinal ; BEGIN + CheckBook (sym) ; IF gcc=GetErrorNode() THEN InternalError ('error node generated during symbol conversion') @@ -258,6 +291,18 @@ END Poison ; PROCEDURE Init ; BEGIN + BreakWhenSymBooked (NulSym) ; (* Disable the intereactive sym watch. *) + (* To examine when a symbol is double booked run cc1gm2 from gdb + and set a break point on gdbhook. + (gdb) break gdbhook + (gdb) run + Now below interactively call BreakWhenSymBooked with the symbol + under investigation. *) + gdbhook ; + (* Now is the time to interactively call gdb, for example: + (gdb) print BreakWhenSymBooked (1234) + (gdb) cont + and you will arrive at gdbhook when this symbol is booked. *) mod2gcc := InitIndexTuned (1, 1024*1024 DIV 16, 16) ; ALLOCATE (PoisonedSymbol, 1) END Init ; diff --git a/gcc/m2/gm2-compiler/SymbolTable.def b/gcc/m2/gm2-compiler/SymbolTable.def index 5b93f2923811..12a3b3ad97d8 100644 --- a/gcc/m2/gm2-compiler/SymbolTable.def +++ b/gcc/m2/gm2-compiler/SymbolTable.def @@ -580,6 +580,41 @@ PROCEDURE MakeSubrange (tok: CARDINAL; SubrangeName: Name) : CARDINAL ; PROCEDURE MakeSet (tok: CARDINAL; SetName: Name) : CARDINAL ; +(* + GetSetArray - return the set array for a large set. +*) + +PROCEDURE GetSetArray (sym: CARDINAL) : CARDINAL ; + + +(* + PutSetArray - places array into the setarray field. +*) + +PROCEDURE PutSetArray (Sym: CARDINAL; array: CARDINAL) ; + + +(* + MakeSetArray - create an ARRAY simpletype OF BOOLEAN. +*) + +PROCEDURE MakeSetArray (token: CARDINAL; subrangetype: CARDINAL) : CARDINAL ; + + +(* + PutSetInWord - set the SetInWord boolean to value. +*) + +PROCEDURE PutSetInWord (sym: CARDINAL; value: BOOLEAN) ; + + +(* + GetSetInWord - return SetInWord. +*) + +PROCEDURE GetSetInWord (sym: CARDINAL) : BOOLEAN ; + + (* MakeArray - makes an Array symbol with name ArrayName. *) @@ -3496,4 +3531,20 @@ PROCEDURE GetNthParamAnyClosest (sym: CARDINAL; ParamNo: CARDINAL; currentmodule: CARDINAL) : CARDINAL ; +(* + IsConstVar - returns TRUE if sym is a const var. This is a + constant which might be assigned to TRUE or FALSE + depending upon the result of the quad stack control flow. + Typically used in CONST foo = (a AND b) or similar. + This symbol will only be assigned once with a value, but + will appear more than once as a designator to an assignment + in the quad table. However as the quad table is reduced + only one assignment will remain. If after reducing quads + two or more assignments remain, then there is an error + as sym should not have been declared a constant. +*) + +PROCEDURE IsConstVar (sym: CARDINAL) : BOOLEAN ; + + END SymbolTable. diff --git a/gcc/m2/gm2-compiler/SymbolTable.mod b/gcc/m2/gm2-compiler/SymbolTable.mod index 00946e52b2ed..d610e78821e3 100644 --- a/gcc/m2/gm2-compiler/SymbolTable.mod +++ b/gcc/m2/gm2-compiler/SymbolTable.mod @@ -80,9 +80,9 @@ FROM SymbolKey IMPORT NulKey, SymbolTree, IsSymbol, NoOfNodes ; FROM M2Base IMPORT MixTypes, MixTypesDecl, InitBase, Char, Integer, LongReal, - Cardinal, LongInt, LongCard, ZType, RType ; + Cardinal, LongInt, LongCard, Boolean, ZType, RType ; -FROM M2System IMPORT Address ; +FROM M2System IMPORT Address, Byte ; FROM m2expr IMPORT OverflowZType ; FROM gcctypes IMPORT tree ; FROM m2linemap IMPORT BuiltinsLocation ; @@ -94,6 +94,7 @@ FROM M2Comp IMPORT CompilingDefinitionModule, FROM FormatStrings IMPORT HandleEscape ; FROM M2Scaffold IMPORT DeclareArgEnvParams ; +FROM M2Diagnostic IMPORT Diagnostic, InitMemDiagnostic, MemIncr, MemSet ; FROM M2SymInit IMPORT InitDesc, InitSymInit, GetInitialized, ConfigSymInit, SetInitialized, SetFieldInitialized, GetFieldInitialized, @@ -107,6 +108,7 @@ CONST DebugUnknownToken = FALSE ; (* If enabled it will generate a warning every time a symbol is created with an unknown location. *) + BreakNew = 97 ; (* -1 disables the break. *) (* The Unbounded is a pseudo type used within the compiler @@ -653,6 +655,9 @@ TYPE (* (subrange or enumeration). *) packedInfo: PackedInfo ; (* the equivalent packed type *) ispacked : BOOLEAN ; + SetInWord: BOOLEAN ; (* Is the set stored in a word? *) + SetArray : CARDINAL ; (* Array used for large sets. *) + Align : CARDINAL ; (* The alignment of this type *) Size : PtrToValue ; (* Runtime size of symbol. *) oafamily : CARDINAL ; (* The oafamily for this sym *) Scope : CARDINAL ; (* Scope of declaration. *) @@ -933,6 +938,7 @@ VAR (* errors. *) ConstLitArray : Indexing.Index ; BreakSym : CARDINAL ; (* Allows interactive debugging. *) + SymMemDiag : Diagnostic ; (* Contains memory related statistics *) (* @@ -1080,7 +1086,9 @@ BEGIN END ; PutIndice(Symbols, sym, pSym) ; CheckBreak (sym) ; - INC(FreeSymbol) + INC (FreeSymbol) ; + MemSet (SymMemDiag, 1, FreeSymbol-1) ; + MemIncr (SymMemDiag, 2, SIZE (pSym^)) END NewSym ; @@ -1683,6 +1691,10 @@ PROCEDURE Init ; VAR pCall: PtrToCallFrame ; BEGIN + SymMemDiag + := InitMemDiagnostic + ('SymbolTable:Symbols', + '{0N} total symbols {1d} consuming {2M} ram {0M} ({2P})') ; BreakWhenSymCreated (NulSym) ; (* Disable the intereactive sym watch. *) (* To examine the symbol table when a symbol is created run cc1gm2 from gdb and set a break point on gdbhook. @@ -5403,6 +5415,28 @@ BEGIN END MakeConstVar ; +(* + IsConstVar - returns TRUE if sym is a const var. This is a + constant which might be assigned to TRUE or FALSE + depending upon the result of the quad stack control flow. + Typically used in CONST foo = (a AND b) or similar. + This symbol will only be assigned once with a value, but + will appear more than once as a designator to an assignment + in the quad table. However as the quad table is reduced + only one assignment will remain. If after reducing quads + two or more assignments remain, then there is an error + as sym should not have been declared a constant. +*) + +PROCEDURE IsConstVar (sym: CARDINAL) : BOOLEAN ; +VAR + pSym: PtrToSymbol ; +BEGIN + pSym := GetPsym (sym) ; + RETURN( pSym^.SymbolType=ConstVarSym ) +END IsConstVar ; + + (* InitConstString - initialize the constant string. *) @@ -5827,7 +5861,7 @@ BEGIN VarSym: RETURN Var.IsSSA ELSE - InternalError ('expecting a variable symbol') + RETURN FALSE END END END IsVariableSSA ; @@ -6391,8 +6425,8 @@ BEGIN Size := InitValue() ; (* Size of array. *) Offset := InitValue() ; (* Offset of array. *) Type := NulSym ; (* The Array Type. ARRAY OF Type. *) + Align := NulSym ; (* Alignment of this type. *) Large := FALSE ; (* is this array large? *) - Align := NulSym ; (* The alignment of this type. *) oafamily := oaf ; (* The unbounded for this array *) Scope := GetCurrentScope() ; (* Which scope created it *) InitWhereDeclaredTok(tok, At) (* Declared here *) @@ -6992,19 +7026,19 @@ END GetNthParamChoice ; PROCEDURE GetNthParamOrdered (sym: CARDINAL; ParamNo: CARDINAL; a, b, c: ProcedureKind) : CARDINAL ; -VAR - param: CARDINAL ; BEGIN - param := GetNthParamChoice (sym, ParamNo, a) ; - IF param = NulSym + IF GetProcedureParametersDefined (sym, a) THEN - param := GetNthParamChoice (sym, ParamNo, b) ; - IF param = NulSym + RETURN GetNthParamChoice (sym, ParamNo, a) + ELSIF GetProcedureParametersDefined (sym, b) + THEN + RETURN GetNthParamChoice (sym, ParamNo, b) + ELSIF GetProcedureParametersDefined (sym, c) THEN - param := GetNthParamChoice (sym, ParamNo, c) + RETURN GetNthParamChoice (sym, ParamNo, c) + ELSE + RETURN NulSym END - END ; - RETURN param END GetNthParamOrdered ; @@ -7023,6 +7057,10 @@ END GetNthParamOrdered ; PROCEDURE GetNthParamAnyClosest (sym: CARDINAL; ParamNo: CARDINAL; currentmodule: CARDINAL) : CARDINAL ; BEGIN + IF IsUnknown (sym) + THEN + InternalError (__FILE__ + ":" + __FUNCTION__ + ":not expecting an unknown symbol") + END ; IF GetOuterModuleScope (currentmodule) = GetOuterModuleScope (sym) THEN (* Same module. *) @@ -7042,11 +7080,22 @@ END GetNthParamAnyClosest ; PROCEDURE GetOuterModuleScope (sym: CARDINAL) : CARDINAL ; BEGIN - WHILE NOT (IsDefImp (sym) OR - (IsModule (sym) AND (GetScope (sym) = NulSym))) DO - sym := GetScope (sym) - END ; + REPEAT + IF IsDefImp (sym) + THEN + (* Definition/implementation module. *) RETURN sym + ELSIF IsModule (sym) + THEN + IF GetScope (sym) = NulSym + THEN + (* Outer module. *) + RETURN sym + END + END ; + sym := GetScope (sym) + UNTIL sym = NulSym ; + InternalError ('not expecting to reach an outer scope') END GetOuterModuleScope ; @@ -11857,10 +11906,6 @@ BEGIN CASE SymbolType OF ErrorSym : n := 0 | -(* - ArraySym , - UnboundedSym : n := 1 | (* Standard language limitation *) -*) EnumerationSym: n := pSym^.Enumeration.NoOfElements | InterfaceSym : n := HighIndice(Interface.Parameters) @@ -11995,6 +12040,10 @@ BEGIN InitPacked(packedInfo) ; (* not packed and no *) (* equivalent (yet). *) ispacked := FALSE ; (* Not yet known to be packed. *) + SetInWord := TRUE ; (* Can the set be stored in a *) + (* single word? *) + SetArray := NulSym ; (* Set used for large sets. *) + Align := NulSym ; oafamily := oaf ; (* The unbounded sym for this *) Scope := GetCurrentScope() ; (* Which scope created it *) InitWhereDeclaredTok(tok, At) (* Declared here *) @@ -12031,6 +12080,46 @@ BEGIN END PutSet ; +(* + PutSetArray - places array into the setarray field. +*) + +PROCEDURE PutSetArray (Sym: CARDINAL; array: CARDINAL) ; +VAR + pSym: PtrToSymbol ; +BEGIN + pSym := GetPsym(Sym) ; + WITH pSym^ DO + CASE SymbolType OF + + ErrorSym: | + SetSym: WITH Set DO + SetArray := array + END + ELSE + InternalError ('expecting a Set symbol') + END + END +END PutSetArray ; + + +(* + MakeSetArray - create an ARRAY simpletype OF BOOLEAN. +*) + +PROCEDURE MakeSetArray (token: CARDINAL; subrangetype: CARDINAL) : CARDINAL ; +VAR + array, subscript: CARDINAL ; +BEGIN + array := MakeArray (token, NulSym) ; + PutArray (array, Byte) ; + subscript := MakeSubscript () ; + PutSubscript (subscript, subrangetype) ; + PutArraySubscript (array, subscript) ; + RETURN array +END MakeSetArray ; + + (* IsSet - returns TRUE if Sym is a set symbol. *) @@ -12059,6 +12148,77 @@ BEGIN END IsSetPacked ; +(* + GetSetArray - return the set array for a large set. +*) + +PROCEDURE GetSetArray (sym: CARDINAL) : CARDINAL ; +VAR + pSym: PtrToSymbol ; +BEGIN + AssertInRange (sym) ; + pSym := GetPsym (sym) ; + WITH pSym^ DO + CASE SymbolType OF + + SetSym: RETURN Set.SetArray + + ELSE + RETURN NulSym + END + END +END GetSetArray ; + + +(* + PutSetInWord - set the SetInWord boolean to value. +*) + +PROCEDURE PutSetInWord (sym: CARDINAL; value: BOOLEAN) ; +VAR + pSym: PtrToSymbol ; +BEGIN + AssertInRange (sym) ; + pSym := GetPsym (sym) ; + WITH pSym^ DO + CASE SymbolType OF + + SetSym: Set.SetInWord := value ; + IF value + THEN + Set.Align := MakeConstant (GetDeclaredMod (sym), 0) ; + Set.ispacked := TRUE + END + + ELSE + InternalError ('expecting a set symbol') + END + END +END PutSetInWord ; + + +(* + GetSetInWord - return SetInWord. +*) + +PROCEDURE GetSetInWord (sym: CARDINAL) : BOOLEAN ; +VAR + pSym: PtrToSymbol ; +BEGIN + AssertInRange (sym) ; + pSym := GetPsym (sym) ; + WITH pSym^ DO + CASE SymbolType OF + + SetSym: RETURN Set.SetInWord + + ELSE + InternalError ('expecting a Set symbol') + END + END +END GetSetInWord ; + + (* ForeachParameterDo - *) @@ -12742,9 +12902,9 @@ BEGIN type := SkipType(GetType(subscript)) ; IF IsAModula2Type(type) THEN - (* ok all is good *) + (* Ok all is good. *) ELSE - MetaError2('the array {%1Dad} must be declared with a simpletype in the [..] component rather than a {%2d}', + MetaError2('the array {%1Dad} must be declared with a simpletype in the [..] component rather than a {%2dv}', sym, type) END END @@ -15166,9 +15326,10 @@ BEGIN RecordSym : Record.Align := align | RecordFieldSym: RecordField.Align := align | TypeSym : Type.Align := align | - ArraySym : Array.Align := align | PointerSym : Pointer.Align := align | - SubrangeSym : Subrange.Align := align + SubrangeSym : Subrange.Align := align | + SetSym : Set.Align := align | + ArraySym : Array.Align := align ELSE InternalError ('expecting record, field, pointer, type, subrange or an array symbol') @@ -15193,11 +15354,12 @@ BEGIN RecordSym : RETURN( Record.Align ) | RecordFieldSym : RETURN( RecordField.Align ) | TypeSym : RETURN( Type.Align ) | - ArraySym : RETURN( Array.Align ) | PointerSym : RETURN( Pointer.Align ) | VarientFieldSym: RETURN( GetAlignment(VarientField.Parent) ) | VarientSym : RETURN( GetAlignment(Varient.Parent) ) | - SubrangeSym : RETURN( Subrange.Align ) + SubrangeSym : RETURN( Subrange.Align ) | + SetSym : RETURN( Set.Align ) | + ArraySym : RETURN( Array.Align ) ELSE InternalError ('expecting record, field, pointer, type, subrange or an array symbol') diff --git a/gcc/m2/gm2-gcc/init.cc b/gcc/m2/gm2-gcc/init.cc index 3156c3f2d6c6..fefcfd4cfa32 100644 --- a/gcc/m2/gm2-gcc/init.cc +++ b/gcc/m2/gm2-gcc/init.cc @@ -107,6 +107,7 @@ EXTERN void _M2_M2SSA_init (int argc, char *argv[], char *envp[]); EXTERN void _M2_M2SymInit_init (int argc, char *argv[], char *envp[]); EXTERN void _M2_M2StateCheck_init (int argc, char *argv[], char *envp[]); EXTERN void _M2_P3Build_init (int argc, char *argv[], char *envp[]); +EXTERN void _M2_M2Diagnostic_init (int argc, char *argv[], char *envp[]); EXTERN void exit (int); EXTERN void M2Comp_compile (const char *filename); EXTERN void RTExceptions_DefaultErrorCatch (void); @@ -126,6 +127,7 @@ init_FrontEndInit (void) _M2_M2Dependent_init (0, NULL, NULL); _M2_M2RTS_init (0, NULL, NULL); _M2_SysExceptions_init (0, NULL, NULL); + _M2_M2Diagnostic_init (0, NULL, NULL); _M2_DynamicStrings_init (0, NULL, NULL); _M2_Assertion_init (0, NULL, NULL); _M2_FormatStrings_init (0, NULL, NULL); diff --git a/gcc/m2/gm2-gcc/m2block.cc b/gcc/m2/gm2-gcc/m2block.cc index c4877d1b0416..32e3bd10f60a 100644 --- a/gcc/m2/gm2-gcc/m2block.cc +++ b/gcc/m2/gm2-gcc/m2block.cc @@ -115,6 +115,22 @@ typedef struct stmt_tree_s *stmt_tree_t; static location_t pending_location; static int pending_statement = false; +/* GetTotalConstants returns the number of global constants. */ + +int +m2block_GetTotalConstants (void) +{ + return m2treelib_nCount (global_binding_level->constants); +} + +/* GetGlobalTypes returns the number of global types. */ + +int +m2block_GetGlobalTypes (void) +{ + return m2treelib_nCount (global_binding_level->types); +} + /* assert_global_names asserts that the global_binding_level->names can be chained. */ diff --git a/gcc/m2/gm2-gcc/m2block.def b/gcc/m2/gm2-gcc/m2block.def index 1860379ef239..1986e57a5fa6 100644 --- a/gcc/m2/gm2-gcc/m2block.def +++ b/gcc/m2/gm2-gcc/m2block.def @@ -220,4 +220,18 @@ PROCEDURE addStmtNote (location: location_t) ; PROCEDURE removeStmtNote ; +(* + GetTotalConstants - returns the number of global constants. +*) + +PROCEDURE GetTotalConstants () : CARDINAL ; + + +(* + GetGlobalTypes - returns the number of global types. +*) + +PROCEDURE GetGlobalTypes () : CARDINAL ; + + END m2block. diff --git a/gcc/m2/gm2-gcc/m2block.h b/gcc/m2/gm2-gcc/m2block.h index 0a58940c1747..04b6aaadeaab 100644 --- a/gcc/m2/gm2-gcc/m2block.h +++ b/gcc/m2/gm2-gcc/m2block.h @@ -72,6 +72,8 @@ EXTERN void m2block_includeDecl (tree); EXTERN tree m2block_add_stmt (location_t location, tree t); EXTERN void m2block_addStmtNote (location_t location); EXTERN void m2block_removeStmtNote (void); +EXTERN int m2block_GetTotalConstants (void); +EXTERN int m2block_GetGlobalTypes (void); EXTERN void m2block_init (void); diff --git a/gcc/m2/gm2-gcc/m2convert.cc b/gcc/m2/gm2-gcc/m2convert.cc index 8a497e50f6b2..785326cac2f1 100644 --- a/gcc/m2/gm2-gcc/m2convert.cc +++ b/gcc/m2/gm2-gcc/m2convert.cc @@ -344,6 +344,17 @@ same_size_types (location_t location, tree t1, tree t2) return m2expr_CompareTrees (n1, n2) == 0; } +/* converting_ISO_generic attempts to convert value to type and returns true + if successful. This is a helper function to BuildConvert which will try + each generic data type in turn. + + generic_type will be set to any of ISO BYTE, PIM BYTE WORD, etc. + If type == generic_type then specific conversion procedures + are applied. A constant will be converted via const_to_ISO_type + whereas non constants are converted by *(type *) &value. + + Remember that in ISO M2 BYTE is an ARRAY [0..0] OF LOC. */ + static int converting_ISO_generic (location_t location, tree type, tree value, tree generic_type, tree *result) @@ -354,11 +365,17 @@ converting_ISO_generic (location_t location, tree type, tree value, /* We let the caller deal with this. */ return false; - if ((TREE_CODE (value) == INTEGER_CST) && (type == generic_type)) + if (TREE_CODE (value) == INTEGER_CST) + { + if (type == generic_type) { *result = const_to_ISO_type (location, value, generic_type); return true; } + /* We must not attempt to convert a constant by taking its + address below, so we bail out here. */ + return false; + } if (same_size_types (location, type, value_type)) { @@ -382,8 +399,8 @@ converting_ISO_generic (location_t location, tree type, tree value, return false; } -/* convert_char_to_array - convert a single char, value, into an - type. The type will be array [..] of char. The array type +/* convert_char_to_array convert a single char value into a type. + The type will be array [..] of char. The array type returned will have nuls appended to pad the single char to the correct array length. */ @@ -638,6 +655,15 @@ m2convert_ToLoc (location_t location, tree expr) false); } +/* ToPIMByte - convert an expression expr to a PIM BYTE. */ + +tree +m2convert_ToPIMByte (location_t location, tree expr) +{ + return m2convert_BuildConvert (location, m2type_GetByteType (), expr, + false); +} + /* GenericToType - converts, expr, into, type, providing that expr is a generic system type (byte, word etc). Otherwise expr is returned unaltered. */ diff --git a/gcc/m2/gm2-gcc/m2convert.def b/gcc/m2/gm2-gcc/m2convert.def index 83005ec8cd00..2385c3f61270 100644 --- a/gcc/m2/gm2-gcc/m2convert.def +++ b/gcc/m2/gm2-gcc/m2convert.def @@ -53,6 +53,20 @@ PROCEDURE ToInteger (location: location_t; expr: tree) : tree ; PROCEDURE ToBitset (location: location_t; expr: tree) : tree ; +(* + ToLoc - convert an expression, expr, to a LOC. +*) + +PROCEDURE ToLoc (location: location_t; expr: tree) : tree ; + + +(* + ToPIMByte - convert an expression expr to a PIM BYTE. +*) + +PROCEDURE ToPIMByte (location: location_t; expr: tree) : tree ; + + (* ConvertToPtr - convert an expression to a void *. *) diff --git a/gcc/m2/gm2-gcc/m2convert.h b/gcc/m2/gm2-gcc/m2convert.h index 984faf19e4bb..37c8f9cff83c 100644 --- a/gcc/m2/gm2-gcc/m2convert.h +++ b/gcc/m2/gm2-gcc/m2convert.h @@ -47,6 +47,8 @@ EXTERN tree m2convert_ToInteger (location_t location, tree expr); EXTERN tree m2convert_ToWord (location_t location, tree expr); EXTERN tree m2convert_ToBitset (location_t location, tree expr); EXTERN tree m2convert_ToLoc (location_t location, tree expr); +EXTERN tree m2convert_ToPIMByte (location_t location, tree expr); + EXTERN tree m2convert_GenericToType (location_t location, tree type, tree expr); diff --git a/gcc/m2/gm2-gcc/m2decl.h b/gcc/m2/gm2-gcc/m2decl.h index 127c9abafca6..eb6569face6b 100644 --- a/gcc/m2/gm2-gcc/m2decl.h +++ b/gcc/m2/gm2-gcc/m2decl.h @@ -51,7 +51,6 @@ EXTERN tree m2decl_BuildConstLiteralNumber (location_t location, const char *str, unsigned int base, bool issueError); -EXTERN void m2decl_RememberVariables (tree l); EXTERN tree m2decl_BuildEndFunctionDeclaration ( location_t location_begin, location_t location_end, const char *name, diff --git a/gcc/m2/gm2-gcc/m2expr.cc b/gcc/m2/gm2-gcc/m2expr.cc index 42ea4fa9f5bd..8478e783c202 100644 --- a/gcc/m2/gm2-gcc/m2expr.cc +++ b/gcc/m2/gm2-gcc/m2expr.cc @@ -598,7 +598,7 @@ m2expr_BuildLogicalShift (location_t location, tree op1, tree op2, tree op3, m2convert_ToInteger (location, op3), m2expr_GetIntegerZero (location)); - m2statement_DoJump (location, is_less, NULL, labelElseName); + m2statement_IfExprJump (location, is_less, labelElseName); op2 = m2convert_ToWord (location, op2); op3 = m2convert_ToWord (location, op3); res = m2expr_BuildLSL (location, op2, op3, needconvert); @@ -673,7 +673,7 @@ m2expr_BuildLRotate (location_t location, tree op1, tree nBits, op1 = m2expr_FoldAndStrip (op1); nBits = m2expr_FoldAndStrip (nBits); - nBits = m2convert_BuildConvert (location, TREE_TYPE (op1), nBits, needconvert); + nBits = m2convert_BuildConvert (location, TREE_TYPE (op1), nBits, needconvert); t = m2expr_build_binary_op (location, LROTATE_EXPR, op1, nBits, needconvert); return m2expr_FoldAndStrip (t); } @@ -724,15 +724,15 @@ m2expr_BuildLRLn (location_t location, tree op1, tree op2, tree nBits, /* Make absolutely sure there are no high order bits lying around. */ - op1 = m2expr_BuildLogicalAnd (location, op1, mask, needconvert); + op1 = m2expr_BuildLogicalAnd (location, op1, mask); left = m2expr_BuildLSL (location, op1, op2min, needconvert); - left = m2expr_BuildLogicalAnd (location, left, mask, needconvert); + left = m2expr_BuildLogicalAnd (location, left, mask); right = m2expr_BuildLSR ( location, op1, m2expr_BuildSub (location, m2convert_ToCardinal (location, nBits), op2min, needconvert), needconvert); - return m2expr_BuildLogicalOr (location, left, right, needconvert); + return m2expr_BuildLogicalOr (location, left, right); } } @@ -765,15 +765,15 @@ m2expr_BuildLRRn (location_t location, tree op1, tree op2, tree nBits, /* Make absolutely sure there are no high order bits lying around. */ - op1 = m2expr_BuildLogicalAnd (location, op1, mask, needconvert); + op1 = m2expr_BuildLogicalAnd (location, op1, mask); right = m2expr_BuildLSR (location, op1, op2min, needconvert); left = m2expr_BuildLSL ( location, op1, m2expr_BuildSub (location, m2convert_ToCardinal (location, nBits), op2min, needconvert), needconvert); - left = m2expr_BuildLogicalAnd (location, left, mask, needconvert); - return m2expr_BuildLogicalOr (location, left, right, needconvert); + left = m2expr_BuildLogicalAnd (location, left, mask); + return m2expr_BuildLogicalOr (location, left, right); } } @@ -807,7 +807,7 @@ m2expr_BuildLogicalRotate (location_t location, tree op1, tree op2, tree op3, tree is_less = m2expr_BuildLessThan (location, rotateCount, m2expr_GetIntegerZero (location)); - m2statement_DoJump (location, is_less, NULL, labelElseName); + m2statement_IfExprJump (location, is_less, labelElseName); res = m2expr_BuildLRLn (location, op2, rotateCount, nBits, needconvert); m2statement_BuildAssignmentTree (location, op1, res); m2statement_BuildGoto (location, labelEndName); @@ -819,139 +819,43 @@ m2expr_BuildLogicalRotate (location_t location, tree op1, tree op2, tree op3, } } -/* buildUnboundedArrayOf construct an unbounded struct and returns - the gcc tree. The two fields of the structure are initialized to - contentsPtr and high. */ +/* BuildIfBitInSetLower returns tree ((set >> bit) & 1). It converts set and bit to + type word prior to the bit test. */ static tree -buildUnboundedArrayOf (tree unbounded, tree contentsPtr, tree high) +BuildIfBitInSetLower (location_t location, enum tree_code code, tree set, tree bit) { - tree fields = TYPE_FIELDS (unbounded); - tree field_list = NULL_TREE; - tree constructor; - - field_list = tree_cons (fields, contentsPtr, field_list); - fields = TREE_CHAIN (fields); - - field_list = tree_cons (fields, high, field_list); - - constructor = build_constructor_from_list (unbounded, nreverse (field_list)); - TREE_CONSTANT (constructor) = 0; - TREE_STATIC (constructor) = 0; - - return constructor; + set = m2convert_ToWord (location, set); + bit = m2convert_ToWord (location, bit); + set = m2expr_BuildLSR (location, set, bit, false); + return m2expr_build_binary_op (location, code, + m2expr_build_binary_op (location, + BIT_AND_EXPR, set, + m2expr_GetWordOne (location), false), + m2expr_GetWordZero (location), FALSE); } -/* BuildBinarySetDo if the size of the set is <= TSIZE(WORD) then op1 - := binop(op2, op3) else call m2rtsprocedure(op1, op2, op3). */ +/* BuildIfInSet returns tree (bit IN set). */ -void -m2expr_BuildBinarySetDo (location_t location, tree settype, tree op1, tree op2, - tree op3, void (*binop) (location_t, tree, tree, tree, - tree, bool), - bool is_op1lvalue, bool is_op2lvalue, bool is_op3lvalue, - tree nBits, tree unbounded, tree varproc, - tree leftproc, tree rightproc) +tree +m2expr_BuildIfInSet (location_t location, tree set, tree bit) { - tree size = m2expr_GetSizeOf (location, settype); - bool is_const = false; - bool is_left = false; - m2assert_AssertLocation (location); - ASSERT_BOOL (is_op1lvalue); - ASSERT_BOOL (is_op2lvalue); - ASSERT_BOOL (is_op3lvalue); - - if (m2expr_CompareTrees ( - size, m2decl_BuildIntegerConstant (SET_WORD_SIZE / BITS_PER_UNIT)) - <= 0) - /* Small set size <= TSIZE(WORD). */ - (*binop) (location, - m2treelib_get_rvalue (location, op1, settype, is_op1lvalue), - m2treelib_get_rvalue (location, op2, settype, is_op2lvalue), - m2treelib_get_rvalue (location, op3, settype, is_op3lvalue), - nBits, false); - else - { - tree result; - tree high = m2expr_BuildSub ( - location, - m2convert_ToCardinal ( - location, - m2expr_BuildDivTrunc ( - location, size, - m2expr_GetSizeOf (location, m2type_GetBitsetType ()), - false)), - m2expr_GetCardinalOne (location), false); - - /* If op3 is constant then make op3 positive and remember which - direction we are shifting. */ - - op3 = m2tree_skip_const_decl (op3); - if (TREE_CODE (op3) == INTEGER_CST) - { - is_const = true; - if (tree_int_cst_sgn (op3) < 0) - op3 = m2expr_BuildNegate (location, op3, false); - else - is_left = true; - op3 = m2convert_BuildConvert (location, m2type_GetM2CardinalType (), - op3, false); - } - - /* These parameters must match the prototypes of the procedures: - ShiftLeft, ShiftRight, ShiftVal, RotateLeft, RotateRight, RotateVal - inside gm2-iso/SYSTEM.mod. */ + return BuildIfBitInSetLower (location, NE_EXPR, set, bit); +} - /* Remember we must build the parameters in reverse. */ +/* BuildIfInSet returns tree (NOT (bit IN set)). */ - /* Parameter 4 amount. */ - m2statement_BuildParam ( - location, - m2convert_BuildConvert ( - location, m2type_GetM2IntegerType (), - m2treelib_get_rvalue (location, op3, - m2tree_skip_type_decl (TREE_TYPE (op3)), - is_op3lvalue), - false)); +tree +m2expr_BuildIfNotInSet (location_t location, tree set, tree bit) +{ + m2assert_AssertLocation (location); - /* Parameter 3 nBits. */ - m2statement_BuildParam ( - location, - m2convert_BuildConvert (location, m2type_GetM2CardinalType (), - m2expr_FoldAndStrip (nBits), false)); - - /* Parameter 2 destination set. */ - m2statement_BuildParam ( - location, - buildUnboundedArrayOf ( - unbounded, - m2treelib_get_set_address (location, op1, is_op1lvalue), high)); - - /* Parameter 1 source set. */ - m2statement_BuildParam ( - location, - buildUnboundedArrayOf ( - unbounded, - m2treelib_get_set_address (location, op2, is_op2lvalue), high)); - - /* Now call the appropriate procedure inside SYSTEM.mod. */ - if (is_const) - if (is_left) - result = m2statement_BuildProcedureCallTree (location, leftproc, - NULL_TREE); - else - result = m2statement_BuildProcedureCallTree (location, rightproc, - NULL_TREE); - else - result = m2statement_BuildProcedureCallTree (location, varproc, - NULL_TREE); - add_stmt (location, result); - } + return BuildIfBitInSetLower (location, EQ_EXPR, set, bit); } -/* Print a warning if a constant expression had overflow in folding. +/* Print a warning if a constant expression caused overflow in folding. Invoke this function on every expression that the language requires to be a constant expression. */ @@ -1463,11 +1367,11 @@ m2expr_Build4LogicalOr (location_t location, tree op1, tree op2, tree op3, tree op4) { tree t1 = m2expr_FoldAndStrip ( - m2expr_BuildLogicalOr (location, op1, op2, false)); + m2expr_BuildLogicalOr (location, op1, op2)); tree t2 - = m2expr_FoldAndStrip (m2expr_BuildLogicalOr (location, t1, op3, false)); + = m2expr_FoldAndStrip (m2expr_BuildLogicalOr (location, t1, op3)); return m2expr_FoldAndStrip ( - m2expr_BuildLogicalOr (location, t2, op4, false)); + m2expr_BuildLogicalOr (location, t2, op4)); } /* checkWholeMultOverflow - check to see whether i * j will overflow @@ -2697,15 +2601,15 @@ m2expr_BuildNegate (location_t location, tree op1, bool needconvert) /* BuildSetNegate build a set negate expression and returns the tree. */ tree -m2expr_BuildSetNegate (location_t location, tree op1, bool needconvert) +m2expr_BuildSetNegate (location_t location, tree value) { m2assert_AssertLocation (location); return m2expr_build_binary_op ( location, BIT_XOR_EXPR, m2convert_BuildConvert (location, m2type_GetWordType (), - m2expr_FoldAndStrip (op1), false), - set_full_complement, needconvert); + m2expr_FoldAndStrip (value), false), + set_full_complement, false); } /* BuildMult build a multiplication tree. */ @@ -2984,73 +2888,67 @@ m2expr_BuildOffset (location_t location, tree record, tree field, /* BuildLogicalOrAddress build a logical or expressions and return the tree. */ tree -m2expr_BuildLogicalOrAddress (location_t location, tree op1, tree op2, - bool needconvert) +m2expr_BuildLogicalOrAddress (location_t location, tree op1, tree op2) { m2assert_AssertLocation (location); - return m2expr_build_binary_op (location, BIT_IOR_EXPR, op1, op2, - needconvert); + return m2expr_build_binary_op (location, BIT_IOR_EXPR, op1, op2, false); } /* BuildLogicalOr build a logical or expressions and return the tree. */ tree -m2expr_BuildLogicalOr (location_t location, tree op1, tree op2, - bool needconvert) +m2expr_BuildLogicalOr (location_t location, tree op1, tree op2) { m2assert_AssertLocation (location); return m2expr_build_binary_op ( location, BIT_IOR_EXPR, m2convert_BuildConvert (location, m2type_GetWordType (), op1, false), m2convert_BuildConvert (location, m2type_GetWordType (), op2, false), - needconvert); + false); } /* BuildLogicalAnd build a logical and expression and return the tree. */ tree -m2expr_BuildLogicalAnd (location_t location, tree op1, tree op2, - bool needconvert) +m2expr_BuildLogicalAnd (location_t location, tree op1, tree op2) { m2assert_AssertLocation (location); return m2expr_build_binary_op ( location, BIT_AND_EXPR, m2convert_BuildConvert (location, m2type_GetWordType (), op1, false), m2convert_BuildConvert (location, m2type_GetWordType (), op2, false), - needconvert); + false); } /* BuildSymmetricalDifference build a logical xor expression and return the - * tree. */ + tree. */ tree -m2expr_BuildSymmetricDifference (location_t location, tree op1, tree op2, - bool needconvert) +m2expr_BuildSymmetricDifference (location_t location, tree left, tree right) { m2assert_AssertLocation (location); return m2expr_build_binary_op ( location, BIT_XOR_EXPR, - m2convert_BuildConvert (location, m2type_GetWordType (), op1, false), - m2convert_BuildConvert (location, m2type_GetWordType (), op2, false), - needconvert); + m2convert_BuildConvert (location, m2type_GetWordType (), left, false), + m2convert_BuildConvert (location, m2type_GetWordType (), right, false), + false); } -/* BuildLogicalDifference build a logical difference expression and -return the tree. (op1 and (not op2)). */ +/* BuildLogicalDifference build a logical difference expression tree. + Return (left and (not right)). */ tree -m2expr_BuildLogicalDifference (location_t location, tree op1, tree op2, - bool needconvert) +m2expr_BuildLogicalDifference (location_t location, tree left, tree right) { m2assert_AssertLocation (location); return m2expr_build_binary_op ( location, BIT_AND_EXPR, - m2convert_BuildConvert (location, m2type_GetWordType (), op1, false), - m2expr_BuildSetNegate (location, op2, needconvert), needconvert); + m2convert_BuildConvert (location, m2type_GetWordType (), left, false), + m2expr_BuildSetNegate (location, right), false); } /* base_type returns the base type of an ordinal subrange, or the -type itself if it is not a subrange. */ + type itself if it is not a subrange. */ static tree base_type (tree type) @@ -3064,20 +2962,20 @@ base_type (tree type) return TYPE_MAIN_VARIANT (type); } -/* boolean_enum_to_unsigned convert a BOOLEAN_TYPE, t, or +/* boolean_enum_to_unsigned convert a BOOLEAN_TYPE value or ENUMERAL_TYPE to an unsigned type. */ static tree -boolean_enum_to_unsigned (location_t location, tree t) +boolean_enum_to_unsigned (location_t location, tree value) { - tree type = TREE_TYPE (t); + tree type = TREE_TYPE (value); if (TREE_CODE (base_type (type)) == BOOLEAN_TYPE) - return m2convert_BuildConvert (location, unsigned_type_node, t, false); + return m2convert_BuildConvert (location, unsigned_type_node, value, false); else if (TREE_CODE (base_type (type)) == ENUMERAL_TYPE) - return m2convert_BuildConvert (location, unsigned_type_node, t, false); + return m2convert_BuildConvert (location, unsigned_type_node, value, false); else - return t; + return value; } /* check_for_comparison check to see if, op, is of type, badType. If @@ -3190,7 +3088,7 @@ m2expr_BuildIsSuperset (location_t location, tree op1, tree op2) { m2assert_AssertLocation (location); return m2expr_BuildEqualTo ( - location, op2, m2expr_BuildLogicalAnd (location, op1, op2, false)); + location, op2, m2expr_BuildLogicalAnd (location, op1, op2)); } /* BuildIsNotSuperset return a tree which computes: op1 & op2 != op2. */ @@ -3200,7 +3098,7 @@ m2expr_BuildIsNotSuperset (location_t location, tree op1, tree op2) { m2assert_AssertLocation (location); return m2expr_BuildNotEqualTo ( - location, op2, m2expr_BuildLogicalAnd (location, op1, op2, false)); + location, op2, m2expr_BuildLogicalAnd (location, op1, op2)); } /* BuildIsSubset return a tree which computes: op1 & op2 == op1. */ @@ -3210,7 +3108,7 @@ m2expr_BuildIsSubset (location_t location, tree op1, tree op2) { m2assert_AssertLocation (location); return m2expr_BuildEqualTo ( - location, op1, m2expr_BuildLogicalAnd (location, op1, op2, false)); + location, op1, m2expr_BuildLogicalAnd (location, op1, op2)); } /* BuildIsNotSubset return a tree which computes: op1 & op2 != op1. */ @@ -3220,224 +3118,22 @@ m2expr_BuildIsNotSubset (location_t location, tree op1, tree op2) { m2assert_AssertLocation (location); return m2expr_BuildNotEqualTo ( - location, op1, m2expr_BuildLogicalAnd (location, op1, op2, false)); + location, op1, m2expr_BuildLogicalAnd (location, op1, op2)); } -/* BuildIfConstInVar generates: if constel in varset then goto label. */ +/* BuildIfBitInSetJump build and add a statement tree containing: + if (bit in setvalue) goto label. If invertCondition is true then + the tree created will take the form: + if not (bit in setvalue) goto label. */ void -m2expr_BuildIfConstInVar (location_t location, tree type, tree varset, - tree constel, bool is_lvalue, int fieldno, - char *label) +m2expr_BuildIfBitInSetJump (location_t location, bool invertCondition, + tree setvalue, tree bit, char *label) { - tree size = m2expr_GetSizeOf (location, type); - m2assert_AssertLocation (location); - - ASSERT_BOOL (is_lvalue); - if (m2expr_CompareTrees ( - size, m2decl_BuildIntegerConstant (SET_WORD_SIZE / BITS_PER_UNIT)) - <= 0) - /* Small set size <= TSIZE(WORD). */ - m2treelib_do_jump_if_bit ( - location, NE_EXPR, - m2treelib_get_rvalue (location, varset, type, is_lvalue), constel, - label); - else - { - tree fieldlist = TYPE_FIELDS (type); - tree field; - - for (field = fieldlist; (field != NULL) && (fieldno > 0); - field = TREE_CHAIN (field)) - fieldno--; - - m2treelib_do_jump_if_bit ( - location, NE_EXPR, - m2treelib_get_set_field_rhs (location, varset, field), constel, - label); - } -} - -/* BuildIfConstInVar generates: if not (constel in varset) then goto label. */ - -void -m2expr_BuildIfNotConstInVar (location_t location, tree type, tree varset, - tree constel, bool is_lvalue, int fieldno, - char *label) -{ - tree size = m2expr_GetSizeOf (location, type); - - m2assert_AssertLocation (location); - - ASSERT_BOOL (is_lvalue); - if (m2expr_CompareTrees ( - size, m2decl_BuildIntegerConstant (SET_WORD_SIZE / BITS_PER_UNIT)) - <= 0) - /* Small set size <= TSIZE(WORD). */ - m2treelib_do_jump_if_bit ( - location, EQ_EXPR, - m2treelib_get_rvalue (location, varset, type, is_lvalue), constel, - label); + if (invertCondition) + m2treelib_do_jump_if_bit (location, NE_EXPR, setvalue, bit, label); else - { - tree fieldlist = TYPE_FIELDS (type); - tree field; - - for (field = fieldlist; (field != NULL) && (fieldno > 0); - field = TREE_CHAIN (field)) - fieldno--; - - m2treelib_do_jump_if_bit ( - location, EQ_EXPR, - m2treelib_get_set_field_rhs (location, varset, field), constel, - label); - } -} - -/* BuildIfVarInVar generates: if varel in varset then goto label. */ - -void -m2expr_BuildIfVarInVar (location_t location, tree type, tree varset, - tree varel, bool is_lvalue, tree low, - tree high ATTRIBUTE_UNUSED, char *label) -{ - tree size = m2expr_GetSizeOf (location, type); - /* Calculate the index from the first bit, ie bit 0 represents low value. */ - tree index = m2expr_BuildSub ( - location, m2convert_BuildConvert (location, m2type_GetIntegerType (), - varel, false), - m2convert_BuildConvert (location, m2type_GetIntegerType (), low, false), - false); - - m2assert_AssertLocation (location); - - if (m2expr_CompareTrees ( - size, m2decl_BuildIntegerConstant (SET_WORD_SIZE / BITS_PER_UNIT)) - <= 0) - /* Small set size <= TSIZE(WORD). */ - m2treelib_do_jump_if_bit ( - location, NE_EXPR, - m2treelib_get_rvalue (location, varset, type, is_lvalue), index, - label); - else - { - tree p1 = m2treelib_get_set_address (location, varset, is_lvalue); - /* Which word do we need to fetch? */ - tree word_index = m2expr_FoldAndStrip (m2expr_BuildDivTrunc ( - location, index, m2decl_BuildIntegerConstant (SET_WORD_SIZE), - false)); - /* Calculate the bit in this word. */ - tree offset_into_word = m2expr_FoldAndStrip (m2expr_BuildModTrunc ( - location, index, m2decl_BuildIntegerConstant (SET_WORD_SIZE), - false)); - tree p2 = m2expr_FoldAndStrip (m2expr_BuildMult ( - location, word_index, - m2decl_BuildIntegerConstant (SET_WORD_SIZE / BITS_PER_UNIT), false)); - - /* Calculate the address of the word we are interested in. */ - p1 = m2expr_BuildAddAddress (location, - m2convert_convertToPtr (location, p1), p2); - - /* Fetch the word, extract the bit and test for != 0. */ - m2treelib_do_jump_if_bit ( - location, NE_EXPR, - m2expr_BuildIndirect (location, p1, m2type_GetBitsetType ()), - offset_into_word, label); - } -} - -/* BuildIfNotVarInVar generates: if not (varel in varset) then goto label. */ - -void -m2expr_BuildIfNotVarInVar (location_t location, tree type, tree varset, - tree varel, bool is_lvalue, tree low, - tree high ATTRIBUTE_UNUSED, char *label) -{ - tree size = m2expr_GetSizeOf (location, type); - /* Calculate the index from the first bit, ie bit 0 represents low value. */ - tree index = m2expr_BuildSub ( - location, m2convert_BuildConvert (location, m2type_GetIntegerType (), - m2expr_FoldAndStrip (varel), false), - m2convert_BuildConvert (location, m2type_GetIntegerType (), - m2expr_FoldAndStrip (low), false), - false); - - index = m2expr_FoldAndStrip (index); - m2assert_AssertLocation (location); - - if (m2expr_CompareTrees ( - size, m2decl_BuildIntegerConstant (SET_WORD_SIZE / BITS_PER_UNIT)) - <= 0) - /* Small set size <= TSIZE(WORD). */ - m2treelib_do_jump_if_bit ( - location, EQ_EXPR, - m2treelib_get_rvalue (location, varset, type, is_lvalue), index, - label); - else - { - tree p1 = m2treelib_get_set_address (location, varset, is_lvalue); - /* Calculate the index from the first bit. */ - - /* Which word do we need to fetch? */ - tree word_index = m2expr_FoldAndStrip (m2expr_BuildDivTrunc ( - location, index, m2decl_BuildIntegerConstant (SET_WORD_SIZE), - false)); - /* Calculate the bit in this word. */ - tree offset_into_word = m2expr_FoldAndStrip (m2expr_BuildModTrunc ( - location, index, m2decl_BuildIntegerConstant (SET_WORD_SIZE), - false)); - tree p2 = m2expr_FoldAndStrip (m2expr_BuildMult ( - location, word_index, - m2decl_BuildIntegerConstant (SET_WORD_SIZE / BITS_PER_UNIT), false)); - - /* Calculate the address of the word we are interested in. */ - p1 = m2expr_BuildAddAddress (location, p1, p2); - - /* Fetch the word, extract the bit and test for == 0. */ - m2treelib_do_jump_if_bit ( - location, EQ_EXPR, - m2expr_BuildIndirect (location, p1, m2type_GetBitsetType ()), - offset_into_word, label); - } -} - -/* BuildForeachWordInSetDoIfExpr foreach word in set, type, compute - the expression, expr, and if true goto label. */ - -void -m2expr_BuildForeachWordInSetDoIfExpr (location_t location, tree type, tree op1, - tree op2, bool is_op1lvalue, - bool is_op2lvalue, bool is_op1const, - bool is_op2const, - tree (*expr) (location_t, tree, tree), - char *label) -{ - tree p1 = m2treelib_get_set_address_if_var (location, op1, is_op1lvalue, - is_op1const); - tree p2 = m2treelib_get_set_address_if_var (location, op2, is_op2lvalue, - is_op2const); - unsigned int fieldNo = 0; - tree field1 = m2treelib_get_field_no (type, op1, is_op1const, fieldNo); - tree field2 = m2treelib_get_field_no (type, op2, is_op2const, fieldNo); - - m2assert_AssertLocation (location); - ASSERT_CONDITION (TREE_CODE (TREE_TYPE (op1)) == RECORD_TYPE); - ASSERT_CONDITION (TREE_CODE (TREE_TYPE (op2)) == RECORD_TYPE); - - while (field1 != NULL && field2 != NULL) - { - m2statement_DoJump ( - location, - (*expr) (location, - m2treelib_get_set_value (location, p1, field1, is_op1const, - is_op1lvalue, op1, fieldNo), - m2treelib_get_set_value (location, p2, field2, is_op2const, - is_op2lvalue, op2, fieldNo)), - NULL, label); - fieldNo++; - field1 = m2treelib_get_field_no (type, op1, is_op1const, fieldNo); - field2 = m2treelib_get_field_no (type, op2, is_op2const, fieldNo); - } + m2treelib_do_jump_if_bit (location, EQ_EXPR, setvalue, bit, label); } /* BuildIfInRangeGoto returns a tree containing if var is in the @@ -3450,16 +3146,16 @@ m2expr_BuildIfInRangeGoto (location_t location, tree var, tree low, tree high, m2assert_AssertLocation (location); if (m2expr_CompareTrees (low, high) == 0) - m2statement_DoJump (location, m2expr_BuildEqualTo (location, var, low), - NULL, label); + m2statement_IfExprJump (location, m2expr_BuildEqualTo (location, var, low), + label); else - m2statement_DoJump ( + m2statement_IfExprJump ( location, m2expr_build_binary_op ( location, TRUTH_ANDIF_EXPR, m2expr_BuildGreaterThanOrEqual (location, var, low), m2expr_BuildLessThanOrEqual (location, var, high), false), - NULL, label); + label); } /* BuildIfNotInRangeGoto returns a tree containing if var is not in @@ -3472,15 +3168,15 @@ m2expr_BuildIfNotInRangeGoto (location_t location, tree var, tree low, m2assert_AssertLocation (location); if (m2expr_CompareTrees (low, high) == 0) - m2statement_DoJump (location, m2expr_BuildNotEqualTo (location, var, low), - NULL, label); + m2statement_IfExprJump (location, m2expr_BuildNotEqualTo (location, var, low), + label); else - m2statement_DoJump ( + m2statement_IfExprJump ( location, m2expr_build_binary_op ( location, TRUTH_ORIF_EXPR, m2expr_BuildLessThan (location, var, low), m2expr_BuildGreaterThan (location, var, high), false), - NULL, label); + label); } /* BuildArray - returns a tree which accesses array[index] given, @@ -3829,75 +3525,18 @@ m2expr_BuildCmplx (location_t location, tree type, tree real, tree imag) return build2 (COMPLEX_EXPR, type, real, imag); } -/* BuildBinaryForeachWordDo implements the large set operators. Each - word of the set can be calculated by binop. This function runs along - each word of the large set invoking the binop. */ - void -m2expr_BuildBinaryForeachWordDo (location_t location, tree type, tree op1, - tree op2, tree op3, - tree (*binop) (location_t, tree, tree, bool), - bool is_op1lvalue, bool is_op2lvalue, - bool is_op3lvalue, bool is_op1const, - bool is_op2const, bool is_op3const) +m2expr_SetAndNarrow (location_t location, tree settype, + tree op1, tree op2, tree op3, + bool is_op1lvalue, bool is_op2lvalue, bool is_op3lvalue) { - tree size = m2expr_GetSizeOf (location, type); - - m2assert_AssertLocation (location); - - ASSERT_BOOL (is_op1lvalue); - ASSERT_BOOL (is_op2lvalue); - ASSERT_BOOL (is_op3lvalue); - ASSERT_BOOL (is_op1const); - ASSERT_BOOL (is_op2const); - ASSERT_BOOL (is_op3const); - if (m2expr_CompareTrees ( - size, m2decl_BuildIntegerConstant (SET_WORD_SIZE / BITS_PER_UNIT)) - <= 0) - /* Small set size <= TSIZE(WORD). */ - m2statement_BuildAssignmentTree ( - location, m2treelib_get_rvalue (location, op1, type, is_op1lvalue), - (*binop) ( - location, m2treelib_get_rvalue (location, op2, type, is_op2lvalue), - m2treelib_get_rvalue (location, op3, type, is_op3lvalue), false)); - else - { - /* Large set size > TSIZE(WORD). */ - - tree p2 = m2treelib_get_set_address_if_var (location, op2, is_op2lvalue, - is_op2const); - tree p3 = m2treelib_get_set_address_if_var (location, op3, is_op3lvalue, - is_op3const); - unsigned int fieldNo = 0; - tree field1 = m2treelib_get_field_no (type, op1, is_op1const, fieldNo); - tree field2 = m2treelib_get_field_no (type, op2, is_op2const, fieldNo); - tree field3 = m2treelib_get_field_no (type, op3, is_op3const, fieldNo); - - if (is_op1const) - m2linemap_internal_error_at ( - location, - "not expecting operand1 to be a constant set"); - - while (field1 != NULL && field2 != NULL && field3 != NULL) - { - m2statement_BuildAssignmentTree ( - location, m2treelib_get_set_field_des (location, op1, field1), - (*binop) ( - location, - m2treelib_get_set_value (location, p2, field2, is_op2const, - is_op2lvalue, op2, fieldNo), - m2treelib_get_set_value (location, p3, field3, is_op3const, - is_op3lvalue, op3, fieldNo), - false)); - fieldNo++; - field1 = m2treelib_get_field_no (type, op1, is_op1const, fieldNo); - field2 = m2treelib_get_field_no (type, op2, is_op2const, fieldNo); - field3 = m2treelib_get_field_no (type, op3, is_op3const, fieldNo); - } - } + m2statement_BuildAssignmentTree ( + location, m2expr_GetRValue (location, op1, settype, is_op1lvalue), + m2expr_BuildLogicalAnd ( + location, m2expr_GetRValue (location, op2, settype, is_op2lvalue), + m2expr_GetRValue (location, op3, settype, is_op3lvalue))); } - /* OverflowZType returns true if the ZTYPE str will exceed the internal representation. This routine is much faster (at least 2 orders of magnitude faster) than the char at a time overflow @@ -4205,6 +3844,12 @@ m2expr_GetPointerOne (location_t location) return m2convert_convertToPtr (location, integer_one_node); } +tree +m2expr_GetBitsetZero (location_t location) +{ + return m2convert_ToBitset (location, integer_zero_node); +} + /* build_set_full_complement return a word size value with all bits set to one. */ @@ -4224,12 +3869,23 @@ build_set_full_complement (location_t location) location, m2expr_GetWordOne (location), m2convert_BuildConvert (location, m2type_GetWordType (), m2decl_BuildIntegerConstant (i), false), - false), - false); + false)); } return value; } +/* GetRValue returns the rvalue of expr. The type is the object + type to be copied upon indirection. */ + +tree +m2expr_GetRValue (location_t location, tree expr, tree type, bool islvalue) +{ + if (islvalue) + return m2expr_BuildIndirect (location, expr, type); + else + return expr; +} + /* GetCstInteger return the integer value of the cst tree. */ diff --git a/gcc/m2/gm2-gcc/m2expr.def b/gcc/m2/gm2-gcc/m2expr.def index a9f5f37280c2..722a3c9ef7e4 100644 --- a/gcc/m2/gm2-gcc/m2expr.def +++ b/gcc/m2/gm2-gcc/m2expr.def @@ -19,7 +19,7 @@ You should have received a copy of the GNU General Public License along with GNU Modula-2; see the file COPYING3. If not see . *) -DEFINITION MODULE FOR "C" m2expr ; +DEFINITION MODULE m2expr ; FROM gcctypes IMPORT location_t, tree ; FROM CDataTypes IMPORT CharStar, ConstCharStar ; @@ -92,6 +92,9 @@ PROCEDURE GetCardinalOne (location: location_t) : tree ; PROCEDURE GetCardinalZero (location: location_t) : tree ; +PROCEDURE GetBitsetZero (location: location_t) : tree ; + + PROCEDURE GetSizeOfInBits (type: tree) : tree ; @@ -365,7 +368,7 @@ PROCEDURE BuildNegateCheck (location: location_t; arg, lowest, min, max: tree) : BuildSetNegate - builds a set negate expression and returns the tree. *) -PROCEDURE BuildSetNegate (location: location_t; op1: tree; needconvert: BOOLEAN) : tree ; +PROCEDURE BuildSetNegate (location: location_t; op1: tree) : tree ; (* @@ -414,34 +417,39 @@ PROCEDURE BuildOffset (location: location_t; record: tree; field: tree; needconv BuildLogicalOrAddress - build a logical or expressions and return the tree. *) -PROCEDURE BuildLogicalOrAddress (location: location_t; op1: tree; op2: tree; needconvert: BOOLEAN) : tree ; +PROCEDURE BuildLogicalOrAddress (location: location_t; op1: tree; op2: tree) : tree ; (* BuildLogicalOr - build a logical or expressions and return the tree. *) -PROCEDURE BuildLogicalOr (location: location_t; op1: tree; op2: tree; needconvert: BOOLEAN) : tree ; +PROCEDURE BuildLogicalOr (location: location_t; op1: tree; op2: tree) : tree ; (* BuildLogicalAnd - build a logical and expression and return the tree. *) -PROCEDURE BuildLogicalAnd (location: location_t; op1: tree; op2: tree; needconvert: BOOLEAN) : tree ; - +PROCEDURE BuildLogicalAnd (location: location_t; op1: tree; op2: tree) : tree ; -PROCEDURE BuildSymmetricDifference (location: location_t; op1: tree; op2: tree; needconvert: BOOLEAN) : tree ; +PROCEDURE BuildSymmetricDifference (location: location_t; op1: tree; op2: tree) : tree ; (* - BuildLogicalDifference - build a logical difference expression and - return the tree. - (op1 and (not op2)) + BuildLogicalDifference - build a logical difference expression tree. + Return (left and (not right)). *) -PROCEDURE BuildLogicalDifference (location: location_t; op1: tree; op2: tree; needconvert: BOOLEAN) : tree ; +PROCEDURE BuildLogicalDifference (location: location_t; + left, right: tree) : tree ; + + +PROCEDURE BuildIfInSet (location: location_t; set, bit: tree) : tree ; + + +PROCEDURE BuildIfNotInSet (location: location_t; set, bit: tree) : tree ; (* @@ -473,14 +481,17 @@ PROCEDURE BuildGreaterThanOrEqual (location: location_t; op1: tree; op2: tree) : (* - BuildEqualTo - return a tree which computes = + BuildEqualTo - return a tree which computes (left = right). *) -PROCEDURE BuildEqualTo (location: location_t; op1: tree; op2: tree) : tree ; +PROCEDURE BuildEqualTo (location: location_t; left, right: tree) : tree ; +(* + BuildNotEqualTo - return a tree which computes (left # right). +*) -PROCEDURE BuildNotEqualTo (location: location_t; op1: tree; op2: tree) : tree ; +PROCEDURE BuildNotEqualTo (location: location_t; left, right: tree) : tree ; (* @@ -675,37 +686,6 @@ PROCEDURE BuildIm (op1: tree) : tree ; PROCEDURE BuildCmplx (location: location_t; type: tree; real: tree; imag: tree) : tree ; -(* - BuildBinaryForeachWordDo - provides the large set operators. Each word - (or less) of the set can be calculated by binop. - This procedure runs along each word of the - large set invoking the binop. -*) - -PROCEDURE BuildBinaryForeachWordDo (location: location_t; - type, op1, op2, op3: tree; - binop: BuildBinProcedure; - is_op1lvalue, - is_op2lvalue, - is_op3lvalue, - is_op1_const, - is_op2_const, - is_op3_const: BOOLEAN) ; - -(* - BuildBinarySetDo - if the size of the set is <= TSIZE(WORD) then - op1 := binop(op2, op3) - else - call m2rtsprocedure(op1, op2, op3) -*) - -PROCEDURE BuildBinarySetDo (location: location_t; - settype, op1, op2, op3: tree; - binop: BuildSetProcedure; - is_op1lvalue, is_op2lvalue, is_op3lvalue: BOOLEAN; - nBits, unbounded: tree; - varproc, leftproc, rightproc: tree) ; - (* ConstantExpressionWarning - issue a warning if the constant has overflowed. *) @@ -744,6 +724,14 @@ PROCEDURE OverflowZType (location: location_t; PROCEDURE BuildCondIfExpression (condition, type, left, right: tree) : tree ; +(* + GetRValue - returns the rvalue of expr. The type is the object + type to be copied upon indirection. +*) + +PROCEDURE GetRValue (location: location_t; expr, type: tree; + islvalue: BOOLEAN) : tree ; + (* BuildSystemTBitSize - return the minimum number of bits to represent type. diff --git a/gcc/m2/gm2-gcc/m2expr.h b/gcc/m2/gm2-gcc/m2expr.h index d4771e3266fd..20bfcea94553 100644 --- a/gcc/m2/gm2-gcc/m2expr.h +++ b/gcc/m2/gm2-gcc/m2expr.h @@ -40,11 +40,6 @@ EXTERN char m2expr_CSTIntToChar (tree t); EXTERN char *m2expr_CSTIntToString (tree t); EXTERN bool m2expr_StrToWideInt (location_t location, const char *str, unsigned int base, widest_int &wval, bool issueError); -EXTERN void m2expr_BuildBinaryForeachWordDo ( - location_t location, tree type, tree op1, tree op2, tree op3, - tree (*binop) (location_t, tree, tree, bool), bool is_op1lvalue, - bool is_op2lvalue, bool is_op3lvalue, bool is_op1const, bool is_op2const, - bool is_op3const); EXTERN tree m2expr_BuildCmplx (location_t location, tree type, tree real, tree imag); EXTERN tree m2expr_BuildIm (tree op1); @@ -65,25 +60,6 @@ EXTERN void m2expr_BuildIfNotInRangeGoto (location_t location, tree var, tree low, tree high, char *label); EXTERN void m2expr_BuildIfInRangeGoto (location_t location, tree var, tree low, tree high, char *label); -EXTERN void m2expr_BuildForeachWordInSetDoIfExpr ( - location_t location, tree type, tree op1, tree op2, bool is_op1lvalue, - bool is_op2lvalue, bool is_op1const, bool is_op2const, - tree (*expr) (location_t, tree, tree), char *label); -EXTERN void m2expr_BuildIfNotVarInVar (location_t location, tree type, - tree varset, tree varel, bool is_lvalue, - tree low, tree high ATTRIBUTE_UNUSED, - char *label); -EXTERN void m2expr_BuildIfVarInVar (location_t location, tree type, - tree varset, tree varel, bool is_lvalue, - tree low, tree high ATTRIBUTE_UNUSED, - char *label); -EXTERN void m2expr_BuildIfNotConstInVar (location_t location, tree type, - tree varset, tree constel, - bool is_lvalue, int fieldno, - char *label); -EXTERN void m2expr_BuildIfConstInVar (location_t location, tree type, - tree varset, tree constel, bool is_lvalue, - int fieldno, char *label); EXTERN tree m2expr_BuildIsNotSubset (location_t location, tree op1, tree op2); EXTERN tree m2expr_BuildIsSubset (location_t location, tree op1, tree op2); EXTERN tree m2expr_BuildIsNotSuperset (location_t location, tree op1, @@ -97,16 +73,11 @@ EXTERN tree m2expr_BuildLessThanOrEqual (location_t location, tree op1, tree op2); EXTERN tree m2expr_BuildGreaterThan (location_t location, tree op1, tree op2); EXTERN tree m2expr_BuildLessThan (location_t location, tree op1, tree op2); -EXTERN tree m2expr_BuildLogicalDifference (location_t location, tree op1, - tree op2, bool needconvert); -EXTERN tree m2expr_BuildSymmetricDifference (location_t location, tree op1, - tree op2, bool needconvert); -EXTERN tree m2expr_BuildLogicalAnd (location_t location, tree op1, tree op2, - bool needconvert); -EXTERN tree m2expr_BuildLogicalOr (location_t location, tree op1, tree op2, - bool needconvert); -EXTERN tree m2expr_BuildLogicalOrAddress (location_t location, tree op1, - tree op2, bool needconvert); +EXTERN tree m2expr_BuildLogicalDifference (location_t location, tree op1, tree op2); +EXTERN tree m2expr_BuildSymmetricDifference (location_t location, tree op1, tree op2); +EXTERN tree m2expr_BuildLogicalAnd (location_t location, tree op1, tree op2); +EXTERN tree m2expr_BuildLogicalOr (location_t location, tree op1, tree op2); +EXTERN tree m2expr_BuildLogicalOrAddress (location_t location, tree op1, tree op2); EXTERN tree m2expr_BuildOffset (location_t location, tree record, tree field, bool needconvert ATTRIBUTE_UNUSED); EXTERN tree m2expr_BuildOffset1 (location_t location, tree field, @@ -115,8 +86,7 @@ EXTERN tree m2expr_BuildAddr (location_t location, tree op1, bool needconvert); EXTERN tree m2expr_BuildSize (location_t location, tree op1, bool needconvert ATTRIBUTE_UNUSED); EXTERN tree m2expr_BuildTBitSize (location_t location, tree type); -EXTERN tree m2expr_BuildSetNegate (location_t location, tree op1, - bool needconvert); +EXTERN tree m2expr_BuildSetNegate (location_t location, tree value); EXTERN tree m2expr_BuildNegate (location_t location, tree op1, bool needconvert); EXTERN tree m2expr_BuildNegateCheck (location_t location, tree arg, @@ -224,6 +194,7 @@ EXTERN tree m2expr_GetWordZero (location_t location); EXTERN tree m2expr_GetWordOne (location_t location); EXTERN tree m2expr_GetPointerZero (location_t location); EXTERN tree m2expr_GetPointerOne (location_t location); +EXTERN tree m2expr_GetBitsetZero (location_t location); EXTERN int m2expr_CompareTrees (tree e1, tree e2); EXTERN tree m2expr_build_unary_op (location_t location ATTRIBUTE_UNUSED, @@ -246,6 +217,10 @@ EXTERN tree m2expr_calcNbits (location_t location, tree min, tree max); EXTERN bool m2expr_OverflowZType (location_t location, const char *str, unsigned int base, bool issueError); EXTERN tree m2expr_BuildSystemTBitSize (location_t location, tree type); +EXTERN tree m2expr_GetRValue (location_t location, tree expr, tree type, bool islvalue); +EXTERN tree m2expr_BuildIfInSet (location_t location, tree set, tree bit); +EXTERN tree m2expr_BuildIfNotInSet (location_t location, tree set, tree bit); + EXTERN void m2expr_init (location_t location); #undef EXTERN diff --git a/gcc/m2/gm2-gcc/m2options.h b/gcc/m2/gm2-gcc/m2options.h index 041de26cf8dd..273906baba66 100644 --- a/gcc/m2/gm2-gcc/m2options.h +++ b/gcc/m2/gm2-gcc/m2options.h @@ -168,6 +168,10 @@ EXTERN char *M2Options_GetM2DumpFilter (void); EXTERN void M2Options_SetM2DebugTraceFilter (bool value, const char *arg); EXTERN bool M2Options_SetM2Dump (bool value, const char *arg); EXTERN bool M2Options_GetDumpGimple (void); +EXTERN void M2Options_SetTimeReport (bool value); +EXTERN void M2Options_SetMemReport (bool value); +EXTERN void M2Options_SetWideset (bool value); +EXTERN bool M2Options_GetWideset (void); EXTERN void M2Options_SetStrictTypeAssignment (bool value); EXTERN void M2Options_SetStrictTypeReason (bool value); diff --git a/gcc/m2/gm2-gcc/m2pp.cc b/gcc/m2/gm2-gcc/m2pp.cc index 7d4adb8ff71f..e23ad529ab31 100644 --- a/gcc/m2/gm2-gcc/m2pp.cc +++ b/gcc/m2/gm2-gcc/m2pp.cc @@ -1961,6 +1961,22 @@ m2pp_binary_function (pretty *s, tree t, const char *funcname) m2pp_print (s, ")"); } +static void +m2pp_shiftrotate_expr (pretty *s, tree t, const char *op) +{ + tree left = TREE_OPERAND (t, 0); + tree right = TREE_OPERAND (t, 1); + m2pp_print (s, "("); + m2pp_expression (s, left); + m2pp_print (s, ")"); + m2pp_needspace (s); + m2pp_print (s, op); + m2pp_needspace (s); + m2pp_print (s, "("); + m2pp_expression (s, right); + m2pp_print (s, ")"); +} + /* m2pp_simple_expression handle GCC expression tree. */ static void @@ -2117,6 +2133,12 @@ m2pp_simple_expression (pretty *s, tree t) case TRUTH_ORIF_EXPR: m2pp_truth_expr (s, t, "OR"); break; + case LSHIFT_EXPR: + m2pp_shiftrotate_expr (s, t, "<<"); + break; + case RSHIFT_EXPR: + m2pp_shiftrotate_expr (s, t, ">>"); + break; case LROTATE_EXPR: m2pp_binary_function (s, t, "LROTATE"); break; diff --git a/gcc/m2/gm2-gcc/m2statement.cc b/gcc/m2/gm2-gcc/m2statement.cc index 795298435e72..8696bf80616b 100644 --- a/gcc/m2/gm2-gcc/m2statement.cc +++ b/gcc/m2/gm2-gcc/m2statement.cc @@ -44,7 +44,7 @@ static GTY (()) tree param_list = NULL_TREE; /* Ready for the next time we static GTY (()) tree last_function = NULL_TREE; -/* BuildStartFunctionCode - generate function entry code. */ +/* BuildStartFunctionCode generate function entry code. */ void m2statement_BuildStartFunctionCode (location_t location, tree fndecl, @@ -86,7 +86,7 @@ m2statement_BuildStartFunctionCode (location_t location, tree fndecl, DECL_DECLARED_INLINE_P (fndecl) = 0; /* isinline; */ } -/* BuildEndFunctionCode - generates the function epilogue. */ +/* BuildEndFunctionCode generates the function epilogue. */ void m2statement_BuildEndFunctionCode (location_t location, tree fndecl, bool nested) @@ -123,7 +123,7 @@ m2statement_BuildEndFunctionCode (location_t location, tree fndecl, bool nested) current_function_decl = NULL; } -/* BuildPushFunctionContext - pushes the current function context. +/* BuildPushFunctionContext pushes the current function context. Maps onto push_function_context in ../function.cc. */ void @@ -132,7 +132,7 @@ m2statement_BuildPushFunctionContext (void) push_function_context (); } -/* BuildPopFunctionContext - pops the current function context. Maps +/* BuildPopFunctionContext pops the current function context. Maps onto pop_function_context in ../function.cc. */ void @@ -194,7 +194,7 @@ copy_array (location_t location, tree left, tree right) idx = m2convert_BuildConvert (location, index_type, idx, false); tree array_ref = build4_loc (location, ARRAY_REF, elt_type, left, idx, low_indice, NULL_TREE); - m2statement_CopyByField (location, array_ref, value); + m2statement_CopyByField (location, array_ref, value); } } @@ -253,7 +253,7 @@ CopyByField_Lower (location_t location, else if (right_code == STRING_CST) copy_strncpy (location, left, right); else - m2statement_BuildAssignmentStatement (location, left, right); + m2statement_BuildAssignmentStatement (location, left, right); } /* CopyByField recursively checks each field to ensure GCC @@ -321,7 +321,7 @@ m2statement_BuildGoto (location_t location, char *name) add_stmt (location, build1 (GOTO_EXPR, void_type_node, label)); } -/* DeclareLabel - create a label, name. */ +/* DeclareLabel create a label, name. */ void m2statement_DeclareLabel (location_t location, char *name) @@ -332,7 +332,7 @@ m2statement_DeclareLabel (location_t location, char *name) add_stmt (location, build1 (LABEL_EXPR, void_type_node, label)); } -/* BuildParam - build a list of parameters, ready for a subsequent +/* BuildParam build a list of parameters, ready for a subsequent procedure call. */ void @@ -347,7 +347,7 @@ m2statement_BuildParam (location_t location, tree param) param_list = chainon (build_tree_list (NULL_TREE, param), param_list); } -/* nCount - return the number of chained tree nodes in list, t. */ +/* nCount return the number of chained tree nodes in list, t. */ static int nCount (tree t) @@ -362,7 +362,7 @@ nCount (tree t) return i; } -/* BuildProcedureCallTree - creates a procedure call from a procedure +/* BuildProcedureCallTree creates a procedure call from a procedure and parameter list and the return type, rettype. */ tree @@ -419,7 +419,7 @@ m2statement_BuildProcedureCallTree (location_t location, tree procedure, } } -/* BuildIndirectProcedureCallTree - creates a procedure call from a +/* BuildIndirectProcedureCallTree creates a procedure call from a procedure and parameter list and the return type, rettype. */ tree @@ -486,8 +486,8 @@ m2statement_BuildBuiltinCallTree (tree func) } -/* BuildFunctValue - generates code for value := - last_function(foobar); */ +/* BuildFunctValue generates code for + value := last_function (foobar). */ tree m2statement_BuildFunctValue (location_t location, tree value) @@ -505,10 +505,9 @@ m2statement_BuildFunctValue (location_t location, tree value) TREE_USED (value) = true; last_function = NULL_TREE; return assign; - // return m2statement_BuildAssignmentTree (location, value, assign); } -/* BuildCall2 - builds a tree representing: function (arg1, arg2). */ +/* BuildCall2 builds a tree representing: function (arg1, arg2). */ tree m2statement_BuildCall2 (location_t location, tree function, tree rettype, @@ -522,8 +521,7 @@ m2statement_BuildCall2 (location_t location, tree function, tree rettype, return m2statement_BuildProcedureCallTree (location, function, rettype); } -/* BuildCall3 - builds a tree representing: function (arg1, arg2, - arg3). */ +/* BuildCall3 builds a tree representing: function (arg1, arg2, arg3). */ tree m2statement_BuildCall3 (location_t location, tree function, tree rettype, @@ -538,7 +536,7 @@ m2statement_BuildCall3 (location_t location, tree function, tree rettype, return m2statement_BuildProcedureCallTree (location, function, rettype); } -/* BuildFunctionCallTree - creates a procedure function call from +/* BuildFunctionCallTree creates a procedure function call from a procedure and parameter list and the return type, rettype. No tree is returned as the tree is held in the last_function global variable. It is expected the BuildFunctValue is to be called after @@ -551,7 +549,7 @@ m2statement_BuildFunctionCallTree (location_t location, tree procedure, m2statement_BuildProcedureCallTree (location, procedure, rettype); } -/* SetLastFunction - assigns last_function to, t. */ +/* SetLastFunction assigns last_function to, t. */ void m2statement_SetLastFunction (tree t) @@ -559,7 +557,7 @@ m2statement_SetLastFunction (tree t) last_function = t; } -/* SetParamList - assigns param_list to, t. */ +/* SetParamList assigns param_list to, t. */ void m2statement_SetParamList (tree t) @@ -567,7 +565,7 @@ m2statement_SetParamList (tree t) param_list = t; } -/* GetLastFunction - returns, last_function. */ +/* GetLastFunction returns, last_function. */ tree m2statement_GetLastFunction (void) @@ -575,7 +573,7 @@ m2statement_GetLastFunction (void) return last_function; } -/* GetParamList - returns, param_list. */ +/* GetParamList returns, param_list. */ tree m2statement_GetParamList (void) @@ -583,7 +581,7 @@ m2statement_GetParamList (void) return param_list; } -/* GetCurrentFunction - returns the current_function. */ +/* GetCurrentFunction returns the current_function. */ tree m2statement_GetCurrentFunction (void) @@ -591,7 +589,7 @@ m2statement_GetCurrentFunction (void) return current_function_decl; } -/* GetParamTree - return parameter, i. */ +/* GetParamTree return parameter, i. */ tree m2statement_GetParamTree (tree call, unsigned int i) @@ -599,7 +597,7 @@ m2statement_GetParamTree (tree call, unsigned int i) return CALL_EXPR_ARG (call, i); } -/* BuildTryFinally - returns a TRY_FINALL_EXPR with the call and +/* BuildTryFinally returns a TRY_FINALL_EXPR with the call and cleanups attached. */ tree @@ -608,7 +606,7 @@ m2statement_BuildTryFinally (location_t location, tree call, tree cleanups) return build_stmt (location, TRY_FINALLY_EXPR, call, cleanups); } -/* BuildCleanUp - return a CLEANUP_POINT_EXPR which will clobber, +/* BuildCleanUp return a CLEANUP_POINT_EXPR which will clobber, param. */ tree @@ -619,7 +617,7 @@ m2statement_BuildCleanUp (tree param) return build2 (MODIFY_EXPR, TREE_TYPE (param), param, clobber); } -/* BuildAsm - generates an inline assembler instruction. */ +/* BuildAsm generates an inline assembler instruction. */ void m2statement_BuildAsm (location_t location, tree instr, bool isVolatile, @@ -640,298 +638,7 @@ m2statement_BuildAsm (location_t location, tree instr, bool isVolatile, add_stmt (location, args); } -/* BuildUnaryForeachWordDo - provides the large set operators. Each - word (or less) of the set can be calculated by unop. This - procedure runs along each word of the large set invoking the unop. */ - -void -m2statement_BuildUnaryForeachWordDo (location_t location, tree type, tree op1, - tree op2, - tree (*unop) (location_t, tree, bool), - bool is_op1lvalue, bool is_op2lvalue, - bool is_op1const, bool is_op2const) -{ - tree size = m2expr_GetSizeOf (location, type); - - m2assert_AssertLocation (location); - ASSERT_BOOL (is_op1lvalue); - ASSERT_BOOL (is_op2lvalue); - ASSERT_BOOL (is_op1const); - ASSERT_BOOL (is_op2const); - if (m2expr_CompareTrees ( - size, m2decl_BuildIntegerConstant (SET_WORD_SIZE / BITS_PER_UNIT)) - <= 0) - /* Small set size <= TSIZE(WORD). */ - m2statement_BuildAssignmentTree ( - location, m2treelib_get_rvalue (location, op1, type, is_op1lvalue), - (*unop) (location, - m2treelib_get_rvalue (location, op2, type, is_op2lvalue), - false)); - else - { - /* Large set size > TSIZE(WORD). */ - unsigned int fieldNo = 0; - tree field1 = m2treelib_get_field_no (type, op1, is_op1const, fieldNo); - tree field2 = m2treelib_get_field_no (type, op2, is_op2const, fieldNo); - - if (is_op1const) - error ("internal error: not expecting operand1 to be a constant set"); - - while (field1 != NULL && field2 != NULL) - { - m2statement_BuildAssignmentTree ( - location, m2treelib_get_set_field_des (location, op1, field1), - (*unop) (location, - m2treelib_get_set_field_rhs (location, op2, field2), - false)); - fieldNo++; - field1 = m2treelib_get_field_no (type, op1, is_op1const, fieldNo); - field2 = m2treelib_get_field_no (type, op2, is_op2const, fieldNo); - } - } -} - -/* BuildExcludeVarConst - builds the EXCL(op1, 1< 0); - field = TREE_CHAIN (field)) - fieldno--; - - m2statement_BuildAssignmentTree ( - location, m2treelib_get_set_field_des (location, op1, field), - m2expr_BuildLogicalAnd ( - location, m2treelib_get_set_field_rhs (location, op1, field), - m2expr_BuildSetNegate ( - location, - m2expr_BuildLSL (location, m2expr_GetWordOne (location), op2, - false), - false), - false)); - } -} - -/* BuildExcludeVarVar - builds the EXCL(varset, 1< 0); - field = TREE_CHAIN (field)) - fieldno--; - - m2statement_BuildAssignmentTree ( - location, - /* Would like to use: m2expr_BuildComponentRef (location, p, field) - but strangely we have to take the address of the field and - dereference it to satify the gimplifier. See - testsuite/gm2/pim/pass/timeio?.mod for testcases. */ - m2treelib_get_set_field_des (location, op1, field), - m2expr_BuildLogicalOr ( - location, m2treelib_get_set_field_rhs (location, op1, field), - m2expr_BuildLSL (location, m2expr_GetWordOne (location), - m2convert_ToWord (location, op2), false), - false)); - } -} - -/* BuildIncludeVarVar - builds the INCL(varset, 1< *constructor_elements; + /* The next byte_index to be used when adding set bytes to an array. */ + int byte_index; /* Level, the next level down in the constructor stack. */ struct struct_constructor *level; }; @@ -243,8 +242,9 @@ m2type_BuildEndArrayType (tree arraytype, tree elementtype, tree indextype, return gm2_finish_build_array_type (arraytype, ptr_type_node, indextype, type); else - return gm2_finish_build_array_type ( - arraytype, m2tree_skip_type_decl (elementtype), indextype, type); + return gm2_finish_build_array_type (arraytype, + m2tree_skip_type_decl (elementtype), + indextype, type); } /* gm2_build_array_type returns a type which is an array indexed by @@ -330,7 +330,8 @@ static tree build_m2_type_node_by_array (tree arrayType, tree low, tree high, int fetype) { return gm2_build_array_type (arrayType, - m2type_BuildArrayIndexType (low, high), fetype); + m2type_BuildArrayIndexType (low, high), + fetype); } /* build_m2_word16_type_node build an ISO 16 bit word as an ARRAY @@ -893,6 +894,17 @@ m2type_GetBooleanType (void) #endif /* !USE_BOOLEAN */ } +/* GetBooleanEnumList return a list containing boolean fields true and false. */ + +tree +m2type_GetBooleanEnumList (location_t location) +{ + tree list = NULL; + m2type_BuildEnumerator (location, "TRUE", m2type_GetBooleanTrue (), &list); + m2type_BuildEnumerator (location, "FALSE", m2type_GetBooleanTrue (), &list); + return list; +} + /* GetCardinalAddressType returns the internal data type for computing binary arithmetic upon the ADDRESS datatype. */ @@ -1892,7 +1904,7 @@ m2type_GetDefaultType (location_t location, char *name, tree type) } /* IsGccRealType return true if type is a GCC realtype. */ - + static bool IsGccRealType (tree type) @@ -1935,7 +1947,7 @@ m2type_GetMinFrom (location_t location, tree type) return TYPE_MIN_VALUE (m2tree_skip_type_decl (type)); } -static +static tree do_max_real (tree type) { @@ -2201,7 +2213,7 @@ gm2_build_enumerator (location_t location, tree name, tree value) enumvalues, list. It returns a copy of the value. */ tree -m2type_BuildEnumerator (location_t location, char *name, tree value, +m2type_BuildEnumerator (location_t location, const char *name, tree value, tree *enumvalues) { tree id = get_identifier (name); @@ -2274,8 +2286,8 @@ pop_constructor (struct struct_constructor *p) top_constructor = top_constructor->level; } -/* BuildStartSetConstructor starts to create a set constant. - Remember that type is really a record type. */ +/* BuildStartSetConstructor starts to create a wide set constant. + A wide set type will be implemented as an array type (array [0..max] OF BYTE). */ void * m2type_BuildStartSetConstructor (tree type) @@ -2285,36 +2297,32 @@ m2type_BuildStartSetConstructor (tree type) type = m2tree_skip_type_decl (type); layout_type (type); p->constructor_type = type; - p->constructor_fields = TYPE_FIELDS (type); - p->constructor_element_list = NULL_TREE; + p->constructor_fields = TREE_TYPE (type); + p->byte_index = 0; vec_alloc (p->constructor_elements, 1); return (void *)p; } -/* BuildSetConstructorElement adds, value, to the - constructor_element_list. */ +/* BuildSetConstructorElement adds value to the constructor_elements. */ void -m2type_BuildSetConstructorElement (void *p, tree value) +m2type_BuildSetConstructorElement (location_t location, void *p, tree value) { struct struct_constructor *c = (struct struct_constructor *)p; + constructor_elt celt; - if (value == NULL_TREE) - { - internal_error ("set type cannot be initialized with a %qs", - "NULL_TREE"); - return; - } - - if (c->constructor_fields == NULL) + if (c->constructor_fields == NULL_TREE) { - internal_error ("set type does not take another integer value"); + internal_error ("set type must be initialized"); return; } - c->constructor_element_list - = tree_cons (c->constructor_fields, value, c->constructor_element_list); - c->constructor_fields = TREE_CHAIN (c->constructor_fields); + value = m2convert_BuildConvert (location, c->constructor_fields, + value, FALSE); + celt.index = m2decl_BuildIntegerConstant (c->byte_index); + celt.value = value; + c->byte_index++; + vec_safe_push (c->constructor_elements, celt); } /* BuildEndSetConstructor finishes building a set constant. */ @@ -2322,24 +2330,13 @@ m2type_BuildSetConstructorElement (void *p, tree value) tree m2type_BuildEndSetConstructor (void *p) { - tree constructor; - tree link; struct struct_constructor *c = (struct struct_constructor *)p; + tree constructor = + build_constructor (c->constructor_type, c->constructor_elements); - for (link = c->constructor_element_list; link; link = TREE_CHAIN (link)) - { - tree field = TREE_PURPOSE (link); - DECL_SIZE (field) = bitsize_int (SET_WORD_SIZE); - DECL_BIT_FIELD (field) = 1; - } - - constructor = build_constructor_from_list ( - c->constructor_type, nreverse (c->constructor_element_list)); - TREE_CONSTANT (constructor) = 1; - TREE_STATIC (constructor) = 1; - + TREE_CONSTANT (constructor) = true; + TREE_STATIC (constructor) = true; pop_constructor (c); - return constructor; } @@ -2355,11 +2352,30 @@ m2type_BuildStartRecordConstructor (tree type) layout_type (type); p->constructor_type = type; p->constructor_fields = TYPE_FIELDS (type); - p->constructor_element_list = NULL_TREE; vec_alloc (p->constructor_elements, 1); return (void *)p; } +/* build_record_constructor build and return a record constructor of type + record_type from the ordered values in vals. */ + +static +tree +build_record_constructor (tree record_type, vec *vals) +{ + tree field_init; + unsigned int i; + vec *v = NULL; + tree field_type = first_field (record_type); + FOR_EACH_CONSTRUCTOR_VALUE (vals, i, field_init) + { + CONSTRUCTOR_APPEND_ELT (v, field_type, field_init); + field_type = DECL_CHAIN (field_type); + } + return build_constructor (record_type, v); +} + + /* BuildEndRecordConstructor returns a tree containing the record compound literal. */ @@ -2367,23 +2383,32 @@ tree m2type_BuildEndRecordConstructor (void *p) { struct struct_constructor *c = (struct struct_constructor *)p; - tree constructor = build_constructor_from_list ( - c->constructor_type, nreverse (c->constructor_element_list)); - TREE_CONSTANT (constructor) = 1; - TREE_STATIC (constructor) = 1; - + tree constructor = build_record_constructor (c->constructor_type, + c->constructor_elements); + TREE_CONSTANT (constructor) = true; + TREE_STATIC (constructor) = true; pop_constructor (c); - return constructor; } /* BuildRecordConstructorElement adds, value, to the - constructor_element_list. */ + constructor_elements. */ void m2type_BuildRecordConstructorElement (void *p, tree value) { - m2type_BuildSetConstructorElement (p, value); + struct struct_constructor *c = (struct struct_constructor *)p; + constructor_elt celt; + + if (c->constructor_fields == NULL_TREE) + { + internal_error ("record type must be initialized"); + return; + } + celt.index = m2decl_BuildIntegerConstant (c->byte_index); + celt.value = value; + c->byte_index++; + vec_safe_push (c->constructor_elements, celt); } /* BuildStartArrayConstructor initializes an array compound @@ -2398,7 +2423,6 @@ m2type_BuildStartArrayConstructor (tree type) layout_type (type); p->constructor_type = type; p->constructor_fields = TREE_TYPE (type); - p->constructor_element_list = NULL_TREE; vec_alloc (p->constructor_elements, 1); return (void *)p; } @@ -2416,14 +2440,12 @@ m2type_BuildEndArrayConstructor (void *p) = build_constructor (c->constructor_type, c->constructor_elements); TREE_CONSTANT (constructor) = true; TREE_STATIC (constructor) = true; - pop_constructor (c); - return constructor; } /* BuildArrayConstructorElement adds, value, to the - constructor_element_list. */ + constructor_elements. */ void m2type_BuildArrayConstructorElement (void *p, tree value, tree indice) diff --git a/gcc/m2/gm2-gcc/m2type.def b/gcc/m2/gm2-gcc/m2type.def index f74888e315ef..6f64c98c1b78 100644 --- a/gcc/m2/gm2-gcc/m2type.def +++ b/gcc/m2/gm2-gcc/m2type.def @@ -136,7 +136,7 @@ PROCEDURE BuildEndSetConstructor (p: Constructor) : tree ; BuildSetConstructorElement - adds, value, to the constructor_element_list. *) -PROCEDURE BuildSetConstructorElement (p: Constructor; value: tree) ; +PROCEDURE BuildSetConstructorElement (location: location_t; p: Constructor; value: tree) ; (* @@ -173,7 +173,7 @@ PROCEDURE BuildPointerType (totype: tree) : tree ; It returns a copy of the value. --fixme-- why do this? *) -PROCEDURE BuildEnumerator (location: location_t; name: CharStar; value: tree; +PROCEDURE BuildEnumerator (location: location_t; name: ConstCharStar; value: tree; VAR enumvalues: tree) : tree ; @@ -796,7 +796,7 @@ PROCEDURE BuildArrayStringConstructor (location: location_t; arrayType: tree; st (* - RealToTree - convert a real number into a Tree. + RealToTree - convert a real number into a tree. *) PROCEDURE RealToTree (name: CharStar) : tree ; @@ -962,7 +962,8 @@ PROCEDURE GetArrayNoOfElements (location: location_t; arraytype: tree) : tree ; and which has ElementType elements. *) -PROCEDURE BuildEndArrayType (arraytype: tree; elementtype: tree; indextype: tree; type: INTEGER) : tree ; +PROCEDURE BuildEndArrayType (arraytype: tree; elementtype: tree; + indextype: tree; type: INTEGER) : tree ; (* @@ -1004,4 +1005,11 @@ PROCEDURE SameRealType (a, b: tree) : BOOLEAN ; PROCEDURE IsGccStrictTypeEquivalent (left, right: tree) : BOOLEAN ; +(* + GetBooleanEnumList - return a list containing boolean fields true and false. +*) + +PROCEDURE GetBooleanEnumList (location: location_t) : tree ; + + END m2type. diff --git a/gcc/m2/gm2-gcc/m2type.h b/gcc/m2/gm2-gcc/m2type.h index 663af3ce7eb8..68015a01e145 100644 --- a/gcc/m2/gm2-gcc/m2type.h +++ b/gcc/m2/gm2-gcc/m2type.h @@ -183,14 +183,14 @@ EXTERN tree m2type_BuildStartEnumeration (location_t location, char *name, bool ispacked); EXTERN tree m2type_BuildEndEnumeration (location_t location, tree enumtype, tree enumvalues); -EXTERN tree m2type_BuildEnumerator (location_t location, char *name, +EXTERN tree m2type_BuildEnumerator (location_t location, const char *name, tree value, tree *enumvalues); EXTERN tree m2type_BuildPointerType (tree totype); EXTERN tree m2type_BuildConstPointerType (tree totype); EXTERN tree m2type_BuildSetType (location_t location, char *name, tree type, tree lowval, tree highval, bool ispacked); EXTERN void *m2type_BuildStartSetConstructor (tree type); -EXTERN void m2type_BuildSetConstructorElement (void *p, tree value); +EXTERN void m2type_BuildSetConstructorElement (location_t location, void *p, tree value); EXTERN tree m2type_BuildEndSetConstructor (void *p); EXTERN void *m2type_BuildStartRecordConstructor (tree type); EXTERN tree m2type_BuildEndRecordConstructor (void *p); @@ -214,6 +214,7 @@ EXTERN bool m2type_IsAddress (tree type); EXTERN tree m2type_GetCardinalAddressType (void); EXTERN bool m2type_SameRealType (tree a, tree b); EXTERN bool m2type_IsGccStrictTypeEquivalent (tree left, tree right); +EXTERN tree m2type_GetBooleanEnumList (location_t location); #undef EXTERN #endif /* m2type_h */ diff --git a/gcc/m2/gm2-lang.cc b/gcc/m2/gm2-lang.cc index cc074d550fc6..c90c71380991 100644 --- a/gcc/m2/gm2-lang.cc +++ b/gcc/m2/gm2-lang.cc @@ -692,6 +692,12 @@ gm2_langhook_handle_option ( case OPT_fgen_module_list_: M2Options_SetGenModuleList (value, arg); return 1; + case OPT_fmem_report: + M2Options_SetMemReport (value); + return 1; + case OPT_ftime_report: + M2Options_SetTimeReport (value); + return 1; case OPT_fnil: M2Options_SetNilCheck (value); return 1; @@ -915,6 +921,11 @@ gm2_langhook_handle_option ( case OPT_fm2_whole_program: M2Options_SetWholeProgram (value); return 1; + break; + case OPT_fwideset: + M2Options_SetWideset (value); + return 1; + break; #ifdef OPT_mabi_ibmlongdouble case OPT_mabi_ibmlongdouble: M2Options_SetIBMLongDouble (value); diff --git a/gcc/m2/gm2-libs-coroutines/SYSTEM.def b/gcc/m2/gm2-libs-coroutines/SYSTEM.def index ea982e8ffa71..ea3ee93d7d77 100644 --- a/gcc/m2/gm2-libs-coroutines/SYSTEM.def +++ b/gcc/m2/gm2-libs-coroutines/SYSTEM.def @@ -41,10 +41,7 @@ EXPORT QUALIFIED (* the following are built into the compiler: *) (* The rest are implemented in SYSTEM.mod. *) PROCESS, TRANSFER, NEWPROCESS, IOTRANSFER, LISTEN, - ListenLoop, TurnInterrupts, - (* Internal GM2 compiler functions. *) - ShiftVal, ShiftLeft, ShiftRight, - RotateVal, RotateLeft, RotateRight ; + ListenLoop, TurnInterrupts ; TYPE @@ -192,87 +189,4 @@ PROCEDURE TBITSIZE () : CARDINAL ; *) *) -(* The following procedures are invoked by GNU Modula-2 to - shift non word sized set types. They are not strictly part - of the core PIM Modula-2, however they are used - to implement the SHIFT procedure defined above, - which are in turn used by the Logitech compatible libraries. - - Users will access these procedures by using the procedure - SHIFT above and GNU Modula-2 will map SHIFT onto one of - the following procedures. -*) - -(* - ShiftVal - is a runtime procedure whose job is to implement - the SHIFT procedure of ISO SYSTEM. GNU Modula-2 will - inline a SHIFT of a single WORD sized set and will - only call this routine for larger sets. -*) - -PROCEDURE ShiftVal (VAR s, d: ARRAY OF BITSET; - SetSizeInBits: CARDINAL; - ShiftCount: INTEGER) ; - - -(* - ShiftLeft - performs the shift left for a multi word set. - This procedure might be called by the back end of - GNU Modula-2 depending whether amount is known at - compile time. -*) - -PROCEDURE ShiftLeft (VAR s, d: ARRAY OF BITSET; - SetSizeInBits: CARDINAL; - ShiftCount: CARDINAL) ; - -(* - ShiftRight - performs the shift left for a multi word set. - This procedure might be called by the back end of - GNU Modula-2 depending whether amount is known at - compile time. -*) - -PROCEDURE ShiftRight (VAR s, d: ARRAY OF BITSET; - SetSizeInBits: CARDINAL; - ShiftCount: CARDINAL) ; - - -(* - RotateVal - is a runtime procedure whose job is to implement - the ROTATE procedure of ISO SYSTEM. GNU Modula-2 will - inline a ROTATE of a single WORD (or less) - sized set and will only call this routine for - larger sets. -*) - -PROCEDURE RotateVal (VAR s, d: ARRAY OF BITSET; - SetSizeInBits: CARDINAL; - RotateCount: INTEGER) ; - - -(* - RotateLeft - performs the rotate left for a multi word set. - This procedure might be called by the back end of - GNU Modula-2 depending whether amount is known - at compile time. -*) - -PROCEDURE RotateLeft (VAR s, d: ARRAY OF BITSET; - SetSizeInBits: CARDINAL; - RotateCount: CARDINAL) ; - - -(* - RotateRight - performs the rotate right for a multi word set. - This procedure might be called by the back end of - GNU Modula-2 depending whether amount is known at - compile time. -*) - -PROCEDURE RotateRight (VAR s, d: ARRAY OF BITSET; - SetSizeInBits: CARDINAL; - RotateCount: CARDINAL) ; - - END SYSTEM. diff --git a/gcc/m2/gm2-libs-coroutines/SYSTEM.mod b/gcc/m2/gm2-libs-coroutines/SYSTEM.mod index 63b4ecb3b488..6a71083dbd4d 100644 --- a/gcc/m2/gm2-libs-coroutines/SYSTEM.mod +++ b/gcc/m2/gm2-libs-coroutines/SYSTEM.mod @@ -27,9 +27,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see IMPLEMENTATION MODULE SYSTEM ; FROM RTco IMPORT init, initThread, transfer, currentThread, turnInterrupts ; - -FROM RTint IMPORT Listen, AttachVector, - IncludeVector, ExcludeVector ; +FROM RTint IMPORT Listen, AttachVector, IncludeVector, ExcludeVector ; IMPORT RTint ; @@ -60,8 +58,6 @@ VAR *) PROCEDURE TRANSFER (VAR p1: PROCESS; p2: PROCESS) ; -VAR - r: INTEGER ; BEGIN localMain (p1) ; IF p1.context=p2.context @@ -104,14 +100,13 @@ END NEWPROCESS ; PROCEDURE IOTRANSFER (VAR First, Second: PROCESS; InterruptNo: CARDINAL) ; VAR - p: IOTransferState ; - l: POINTER TO IOTransferState ; + iots: IOTransferState ; BEGIN localMain (First) ; - WITH p DO + WITH iots DO ptrToFirst := ADR (First) ; ptrToSecond := ADR (Second) ; - next := AttachVector (InterruptNo, ADR (p)) + next := AttachVector (InterruptNo, ADR (iots)) END ; IncludeVector (InterruptNo) ; TRANSFER (First, Second) @@ -124,18 +119,18 @@ END IOTRANSFER ; PROCEDURE IOTransferHandler (InterruptNo: CARDINAL; Priority: CARDINAL ; - l: PtrToIOTransferState) ; + piots: PtrToIOTransferState) ; VAR old: PtrToIOTransferState ; BEGIN - IF l=NIL + IF piots = NIL THEN Halt ('no processes attached to this interrupt vector which is associated with IOTRANSFER', __FILE__, __FUNCTION__, __LINE__) ELSE - WITH l^ DO + WITH piots^ DO old := AttachVector (InterruptNo, next) ; - IF old#l + IF old # piots THEN Halt ('inconsistancy of return result', __FILE__, __FUNCTION__, __LINE__) @@ -250,236 +245,6 @@ BEGIN END localMain ; -(* - Max - returns the maximum of a and b. -*) - -PROCEDURE Max (a, b: CARDINAL) : CARDINAL ; -BEGIN - IF a > b - THEN - RETURN a - ELSE - RETURN b - END -END Max ; - - -(* - Min - returns the minimum of a and b. -*) - -PROCEDURE Min (a, b: CARDINAL) : CARDINAL ; -BEGIN - IF a < b - THEN - RETURN a - ELSE - RETURN b - END -END Min ; - - -(* - ShiftVal - is a runtime procedure whose job is to implement - the SHIFT procedure of ISO SYSTEM. GNU Modula-2 will - inline a SHIFT of a single WORD sized set and will only - call this routine for larger sets. -*) - -PROCEDURE ShiftVal (VAR s, d: ARRAY OF BITSET; - SetSizeInBits: CARDINAL; - ShiftCount: INTEGER) ; -VAR - a: ADDRESS ; -BEGIN - IF ShiftCount>0 - THEN - ShiftCount := ShiftCount MOD VAL(INTEGER, SetSizeInBits) ; - ShiftLeft (s, d, SetSizeInBits, ShiftCount) - ELSIF ShiftCount<0 - THEN - ShiftCount := (-ShiftCount) MOD VAL(INTEGER, SetSizeInBits) ; - ShiftRight (s, d, SetSizeInBits, ShiftCount) - ELSE - a := memcpy (ADR (d), ADR (s), (HIGH (d) + 1) * SIZE (BITSET)) - END -END ShiftVal ; - - -(* - ShiftLeft - performs the shift left for a multi word set. - This procedure might be called by the back end of - GNU Modula-2 depending whether amount is known at compile - time. -*) - -PROCEDURE ShiftLeft (VAR s, d: ARRAY OF BITSET; - SetSizeInBits: CARDINAL; - ShiftCount: CARDINAL) ; -VAR - lo, hi : BITSET ; - i, j, h: CARDINAL ; - a : ADDRESS ; -BEGIN - h := HIGH(s)+1 ; - IF ShiftCount MOD BitsPerBitset=0 - THEN - i := ShiftCount DIV BitsPerBitset ; - a := ADR (d[i]) ; - a := memcpy (a, ADR (s), (h-i) * SIZE (BITSET)) ; - a := memset (ADR (d), 0, i * SIZE (BITSET)) - ELSE - i := h ; - WHILE i>0 DO - DEC (i) ; - lo := SHIFT (s[i], ShiftCount MOD BitsPerBitset) ; - hi := SHIFT (s[i], -(BitsPerBitset - (ShiftCount MOD BitsPerBitset))) ; - d[i] := BITSET{} ; - j := i + ShiftCount DIV BitsPerBitset ; - IF j=0 - THEN - d[j] := d[j] + hi ; - DEC(j) ; - IF j>=0 - THEN - d[j] := d[j] + lo - END - END ; - INC(i) - END - END -END ShiftRight ; - - -(* - RotateVal - is a runtime procedure whose job is to implement - the ROTATE procedure of ISO SYSTEM. GNU Modula-2 will - inline a ROTATE of a single WORD (or less) - sized set and will only call this routine for larger sets. -*) - -PROCEDURE RotateVal (VAR s, d: ARRAY OF BITSET; - SetSizeInBits: CARDINAL; - RotateCount: INTEGER) ; -VAR - a: ADDRESS ; -BEGIN - IF RotateCount>0 - THEN - RotateLeft(s, d, SetSizeInBits, RotateCount) - ELSIF RotateCount<0 - THEN - RotateRight(s, d, SetSizeInBits, -RotateCount) - ELSE - a := memcpy(ADR(d), ADR(s), (HIGH(d)+1)*SIZE(BITSET)) - END -END RotateVal ; - - -(* - RotateLeft - performs the rotate left for a multi word set. - This procedure might be called by the back end of - GNU Modula-2 depending whether amount is known at compile - time. -*) - -PROCEDURE RotateLeft (VAR s, d: ARRAY OF BITSET; - SetSizeInBits: CARDINAL; - RotateCount: CARDINAL) ; -VAR - lo, hi : BITSET ; - b, i, j, h: CARDINAL ; -BEGIN - h := HIGH(s) ; - (* firstly we set d := {} *) - i := 0 ; - WHILE i<=h DO - d[i] := BITSET{} ; - INC(i) - END ; - i := h+1 ; - RotateCount := RotateCount MOD SetSizeInBits ; - b := SetSizeInBits MOD BitsPerBitset ; - IF b=0 - THEN - b := BitsPerBitset - END ; - WHILE i>0 DO - DEC(i) ; - lo := SHIFT(s[i], RotateCount MOD BitsPerBitset) ; - hi := SHIFT(s[i], -(b - (RotateCount MOD BitsPerBitset))) ; - j := ((i*BitsPerBitset + RotateCount) MOD - SetSizeInBits) DIV BitsPerBitset ; - d[j] := d[j] + lo ; - j := (((i+1)*BitsPerBitset + RotateCount) MOD - SetSizeInBits) DIV BitsPerBitset ; - d[j] := d[j] + hi ; - b := BitsPerBitset - END -END RotateLeft ; - - -(* - RotateRight - performs the rotate right for a multi word set. - This procedure might be called by the back end of - GNU Modula-2 depending whether amount is known at compile - time. -*) - -PROCEDURE RotateRight (VAR s, d: ARRAY OF BITSET; - SetSizeInBits: CARDINAL; - RotateCount: CARDINAL) ; -BEGIN - RotateLeft(s, d, SetSizeInBits, SetSizeInBits-RotateCount) -END RotateRight ; - - BEGIN initGTh := FALSE ; initMain := FALSE diff --git a/gcc/m2/gm2-libs-iso/SYSTEM.def b/gcc/m2/gm2-libs-iso/SYSTEM.def index b99b2afdccce..75d19ea2e620 100644 --- a/gcc/m2/gm2-libs-iso/SYSTEM.def +++ b/gcc/m2/gm2-libs-iso/SYSTEM.def @@ -20,10 +20,7 @@ EXPORT QUALIFIED BITSPERLOC, LOCSPERWORD, LOC, BYTE, WORD, ADDRESS, CSIZE_T, CSSIZE_T, COFF_T, (* @SYSTEM_DATATYPES@ *) ADDADR, SUBADR, DIFADR, MAKEADR, ADR, ROTATE, SHIFT, CAST, TSIZE, - (* Internal GM2 compiler functions *) - ShiftVal, ShiftLeft, ShiftRight, - RotateVal, RotateLeft, RotateRight, THROW, TBITSIZE ; CONST @@ -155,81 +152,4 @@ PROCEDURE TBITSIZE () : CARDINAL ; *) *) - -(* The following procedures are invoked by GNU Modula-2 to - shift non word set types. They are not part of ISO Modula-2 - but are used to implement the SHIFT procedure defined above. *) - -(* - ShiftVal - is a runtime procedure whose job is to implement - the SHIFT procedure of ISO SYSTEM. GNU Modula-2 will - inline a SHIFT of a single WORD sized set and will only - call this routine for larger sets. -*) - -PROCEDURE ShiftVal (VAR s, d: ARRAY OF BITSET; - SetSizeInBits: CARDINAL; - ShiftCount: INTEGER) ; - - -(* - ShiftLeft - performs the shift left for a multi word set. - This procedure might be called by the back end of - GNU Modula-2 depending whether amount is known at - compile time. -*) - -PROCEDURE ShiftLeft (VAR s, d: ARRAY OF BITSET; - SetSizeInBits: CARDINAL; - ShiftCount: CARDINAL) ; - -(* - ShiftRight - performs the shift left for a multi word set. - This procedure might be called by the back end of - GNU Modula-2 depending whether amount is known at - compile time. -*) - -PROCEDURE ShiftRight (VAR s, d: ARRAY OF BITSET; - SetSizeInBits: CARDINAL; - ShiftCount: CARDINAL) ; - - -(* - RotateVal - is a runtime procedure whose job is to implement - the ROTATE procedure of ISO SYSTEM. GNU Modula-2 will - inline a ROTATE of a single WORD (or less) - sized set and will only call this routine for larger - sets. -*) - -PROCEDURE RotateVal (VAR s, d: ARRAY OF BITSET; - SetSizeInBits: CARDINAL; - RotateCount: INTEGER) ; - - -(* - RotateLeft - performs the rotate left for a multi word set. - This procedure might be called by the back end of - GNU Modula-2 depending whether amount is known at - compile time. -*) - -PROCEDURE RotateLeft (VAR s, d: ARRAY OF BITSET; - SetSizeInBits: CARDINAL; - RotateCount: CARDINAL) ; - - -(* - RotateRight - performs the rotate right for a multi word set. - This procedure might be called by the back end of - GNU Modula-2 depending whether amount is known at - compile time. -*) - -PROCEDURE RotateRight (VAR s, d: ARRAY OF BITSET; - SetSizeInBits: CARDINAL; - RotateCount: CARDINAL) ; - - END SYSTEM. diff --git a/gcc/m2/gm2-libs-iso/SYSTEM.mod b/gcc/m2/gm2-libs-iso/SYSTEM.mod index cd28b1d7b082..5e146f59abbb 100644 --- a/gcc/m2/gm2-libs-iso/SYSTEM.mod +++ b/gcc/m2/gm2-libs-iso/SYSTEM.mod @@ -26,248 +26,4 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see IMPLEMENTATION MODULE SYSTEM ; -FROM libc IMPORT memcpy, memset ; - -CONST - BitsPerBitset = MAX(BITSET)+1 ; - - -(* - Max - returns the maximum of a and b. -*) - -PROCEDURE Max (a, b: CARDINAL) : CARDINAL ; -BEGIN - IF a>b - THEN - RETURN a - ELSE - RETURN b - END -END Max ; - - -(* - Min - returns the minimum of a and b. -*) - -PROCEDURE Min (a, b: CARDINAL) : CARDINAL ; -BEGIN - IF a0 - THEN - ShiftCount := ShiftCount MOD VAL(INTEGER, SetSizeInBits) ; - ShiftLeft(s, d, SetSizeInBits, ShiftCount) - ELSIF ShiftCount<0 - THEN - ShiftCount := (-ShiftCount) MOD VAL(INTEGER, SetSizeInBits) ; - ShiftRight(s, d, SetSizeInBits, ShiftCount) - ELSE - a := memcpy(ADR(d), ADR(s), (HIGH(d)+1)*SIZE(BITSET)) - END -END ShiftVal ; - - -(* - ShiftLeft - performs the shift left for a multi word set. - This procedure might be called by the back end of - GNU Modula-2 depending whether amount is known at compile - time. -*) - -PROCEDURE ShiftLeft (VAR s, d: ARRAY OF BITSET; - SetSizeInBits: CARDINAL; - ShiftCount: CARDINAL) ; -VAR - lo, hi : BITSET ; - i, j, h: CARDINAL ; - a : ADDRESS ; -BEGIN - h := HIGH(s)+1 ; - IF ShiftCount MOD BitsPerBitset=0 - THEN - i := ShiftCount DIV BitsPerBitset ; - a := ADR(d[i]) ; - a := memcpy(a, ADR(s), (h-i)*SIZE(BITSET)) ; - a := memset(ADR(d), 0, i*SIZE(BITSET)) - ELSE - i := h ; - WHILE i>0 DO - DEC(i) ; - lo := SHIFT(s[i], ShiftCount MOD BitsPerBitset) ; - hi := SHIFT(s[i], -(BitsPerBitset - (ShiftCount MOD BitsPerBitset))) ; - d[i] := BITSET{} ; - j := i + ShiftCount DIV BitsPerBitset ; - IF j=0 - THEN - d[j] := d[j] + hi ; - DEC(j) ; - IF j>=0 - THEN - d[j] := d[j] + lo - END - END ; - INC(i) - END - END -END ShiftRight ; - - -(* - RotateVal - is a runtime procedure whose job is to implement - the ROTATE procedure of ISO SYSTEM. GNU Modula-2 will - inline a ROTATE of a single WORD (or less) - sized set and will only call this routine for larger sets. -*) - -PROCEDURE RotateVal (VAR s, d: ARRAY OF BITSET; - SetSizeInBits: CARDINAL; - RotateCount: INTEGER) ; -VAR - a: ADDRESS ; -BEGIN - IF RotateCount>0 - THEN - RotateCount := RotateCount MOD VAL(INTEGER, SetSizeInBits) - ELSIF RotateCount<0 - THEN - RotateCount := -VAL(INTEGER, VAL(CARDINAL, -RotateCount) MOD SetSizeInBits) - END ; - IF RotateCount>0 - THEN - RotateLeft(s, d, SetSizeInBits, RotateCount) - ELSIF RotateCount<0 - THEN - RotateRight(s, d, SetSizeInBits, -RotateCount) - ELSE - (* no rotate required, but we must copy source to dest. *) - a := memcpy(ADR(d), ADR(s), (HIGH(d)+1)*SIZE(BITSET)) - END -END RotateVal ; - - -(* - RotateLeft - performs the rotate left for a multi word set. - This procedure might be called by the back end of - GNU Modula-2 depending whether amount is known at compile - time. -*) - -PROCEDURE RotateLeft (VAR s, d: ARRAY OF BITSET; - SetSizeInBits: CARDINAL; - RotateCount: CARDINAL) ; -VAR - lo, hi : BITSET ; - b, i, j, h: CARDINAL ; -BEGIN - h := HIGH(s) ; - (* firstly we set d := {} *) - i := 0 ; - WHILE i<=h DO - d[i] := BITSET{} ; - INC(i) - END ; - i := h+1 ; - RotateCount := RotateCount MOD SetSizeInBits ; - b := SetSizeInBits MOD BitsPerBitset ; - IF b=0 - THEN - b := BitsPerBitset - END ; - WHILE i>0 DO - DEC(i) ; - lo := SHIFT(s[i], RotateCount MOD BitsPerBitset) ; - hi := SHIFT(s[i], -(b - (RotateCount MOD BitsPerBitset))) ; - j := ((i*BitsPerBitset + RotateCount) MOD - SetSizeInBits) DIV BitsPerBitset ; - d[j] := d[j] + lo ; - j := (((i+1)*BitsPerBitset + RotateCount) MOD - SetSizeInBits) DIV BitsPerBitset ; - d[j] := d[j] + hi ; - b := BitsPerBitset - END -END RotateLeft ; - - -(* - RotateRight - performs the rotate right for a multi word set. - This procedure might be called by the back end of - GNU Modula-2 depending whether amount is known at compile - time. -*) - -PROCEDURE RotateRight (VAR s, d: ARRAY OF BITSET; - SetSizeInBits: CARDINAL; - RotateCount: CARDINAL) ; -BEGIN - RotateLeft(s, d, SetSizeInBits, SetSizeInBits-RotateCount) -END RotateRight ; - - END SYSTEM. diff --git a/gcc/m2/gm2-libs/M2Diagnostic.def b/gcc/m2/gm2-libs/M2Diagnostic.def new file mode 100644 index 000000000000..77a2d62364a9 --- /dev/null +++ b/gcc/m2/gm2-libs/M2Diagnostic.def @@ -0,0 +1,182 @@ +(* M2Diagnotic provides memory and time diagnosics to the user. + +Copyright (C) 2024 Free Software Foundation, Inc. +Contributed by Gaius Mulley . + +This file is part of GNU Modula-2. + +GNU Modula-2 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. + +GNU Modula-2 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 GNU Modula-2; see the file COPYING3. If not see +. *) + +DEFINITION MODULE M2Diagnostic ; (*!m2iso+gm2*) + +(* + Title : M2Diagnotic + Author : Gaius Mulley + System : GNU Modula-2 + Date : Thu Jan 4 10:38:53 2024 + Revision : $Version$ + Description: provides memory and time diagnosics to the user. +*) + +FROM DynamicStrings IMPORT String ; + +TYPE + Diagnostic ; + DiagProc = PROCEDURE (Diagnostic) ; + + +(* + InitTimeDiagnostic - create and return a time diagnostic. + The format string can be free form and may + contain {1T}, {1C} or {1P}. + {1T} will contain the time and + {1C} the count of the number of times the + code enters the time diagnostic code region. + {1P} generates the time as a percentage. + {0T} is the total time for the application. + {{ is rendered as a single {. +*) + +PROCEDURE InitTimeDiagnostic (name, format: ARRAY OF CHAR) : Diagnostic ; + + +(* + EnterDiagnostic - attribute all execution time from now to TimeDiag. +*) + +PROCEDURE EnterDiagnostic (TimeDiag: Diagnostic) ; + + +(* + ExitDiagnostic - stop attributing execution time to TimeDiag. +*) + +PROCEDURE ExitDiagnostic (TimeDiag: Diagnostic) ; + + +(* + InitMemDiagnostic - create and return a memory diagnostic. + The format string can be free form and may + contain {1M} {1d} {1x} {1P}. + {1M} is replaced by the value of the first parameter + with memory size units. + {1d} unsigned decimal. {1x} unsigned hexadecimal. + {0M} is the global allocation (Storage.mod:ALLOCATE). + {1P} is the percentage of param 1 relative + to global memory. +*) + +PROCEDURE InitMemDiagnostic (name, format: ARRAY OF CHAR) : Diagnostic ; + + +(* + MemIncr - allow the appropriate parameter to be incremented. + All parameters are initially set to zero and are stored + as LONGCARD. +*) + +PROCEDURE MemIncr (MemDiag: Diagnostic; paramno: CARDINAL; incr: CARDINAL) ; + + +(* + MemDecr - allow the appropriate parameter to be decremented. + All parameters are initially set to zero and are stored + as LONGCARD. +*) + +PROCEDURE MemDecr (MemDiag: Diagnostic; paramno: CARDINAL; decr: CARDINAL) ; + + +(* + MemSet - allow the appropriate parameter to be set to value. + All parameters are initially set to zero. +*) + +PROCEDURE MemSet (MemDiag: Diagnostic; paramno: CARDINAL; value: CARDINAL) ; + + +(* + TotalHeapIncr - increments the total heap used. +*) + +PROCEDURE TotalHeapIncr (incr: CARDINAL) ; + + +(* + TotalHeapDecr - decrements the total heap used. +*) + +PROCEDURE TotalHeapDecr (incr: CARDINAL) ; + + +(* + SetEnable - set the enable flag in Diag to value. +*) + +PROCEDURE SetEnable (Diag: Diagnostic; value: BOOLEAN) ; + + +(* + Lookup - returns the Diagnostic containing name or NIL + if it does not exist. +*) + +PROCEDURE Lookup (name: ARRAY OF CHAR) : Diagnostic ; + + +(* + GetName - returns the name of Diag. +*) + +PROCEDURE GetName (Diag: Diagnostic) : String ; + + +(* + ForeachDiagDo - for diag in global diag list do + dp (diag); + end +*) + +PROCEDURE ForeachDiagDo (dp: DiagProc) ; + + +(* + SetDefaultConfig - force the Diag enable flag to the + time or mem global default. +*) + +PROCEDURE SetDefaultConfig (Diag: Diagnostic) ; + + +(* + Configure - will turn on or off all the memory or time + instrumentation diagnostics and set the defaults + time and mem values. +*) + +PROCEDURE Configure (time, mem: BOOLEAN) ; + + +(* + Generate - return a string containing the output from + all the diagnostics enabled. If hierarchical is TRUE + then the output is displayed in a hierarchical format + using the name and ':' separators to signify grouping. +*) + +PROCEDURE Generate (hierarchical: BOOLEAN) : String ; + + +END M2Diagnostic. diff --git a/gcc/m2/gm2-libs/M2Diagnostic.mod b/gcc/m2/gm2-libs/M2Diagnostic.mod new file mode 100644 index 000000000000..25988602d3e5 --- /dev/null +++ b/gcc/m2/gm2-libs/M2Diagnostic.mod @@ -0,0 +1,1049 @@ +(* M2Diagnotic provides memory and time diagnosics to the user. + +Copyright (C) 2024 Free Software Foundation, Inc. +Contributed by Gaius Mulley . + +This file is part of GNU Modula-2. + +GNU Modula-2 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. + +GNU Modula-2 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 GNU Modula-2; see the file COPYING3. If not see +. *) + +IMPLEMENTATION MODULE M2Diagnostic ; (*!m2iso+gm2*) + +FROM ASCII IMPORT nl ; +FROM Selective IMPORT Timeval, GetTimeOfDay, InitTime, GetTime, SetTime ; +FROM StringConvert IMPORT LongCardinalToString, ctos ; +FROM Storage IMPORT ALLOCATE ; +FROM Indexing IMPORT Index ; + +FROM DynamicStrings IMPORT InitString, ConCat, KillString, ConCatChar, + Equal, Mark, Length, char, RIndex ; + +IMPORT DynamicStrings, Indexing ; + + +CONST + EnableDiagnostics = TRUE ; (* If set to FALSE then it will ensure + this module has minimal impact upon + the rest of the application. *) + DefaultTimeEnableValue = FALSE ; (* Should the diagnostics be + enabled by default. *) + DefaultMemEnableValue = FALSE ; (* Should the diagnostics be + enabled by default. *) + + MaxParam = 4 ; (* The maximum number of parameters for a mem + diag. *) + MICROSEC = 1000 * 1000 ; (* The number of microseconds in a second. *) + +TYPE + Diagnostic = POINTER TO RECORD + name, format: String ; + enable : BOOLEAN ; + next : Diagnostic ; + CASE type: DiagType OF + + timediag: tdiag: timeDiag | + memdiag : mdiag: memDiag + + END + END ; + + DiagType = (timediag, memdiag) ; + + timeDiag = RECORD + count: CARDINAL ; + total, + enter, + exit : Timeval ; + END ; + + memDiag = RECORD + param: ARRAY [1..MaxParam] OF LONGCARD ; + END ; + +VAR + Output : String ; + TotalHeap : LONGCARD ; + Head : Diagnostic ; + EnableHierarchical, + DefaultTimeEnable, + DefaultMemEnable : BOOLEAN ; + StartTime, + TotalTime : Timeval ; + + +(* + Assert - halt if b is false. +*) + +PROCEDURE Assert (b: BOOLEAN) ; +BEGIN + IF NOT b + THEN + HALT + END +END Assert ; + + +(* + Error - generate a error simple message with indicating the + format specifier ch is incorrect. +*) + +PROCEDURE Error (msg: ARRAY OF CHAR; ch: CHAR) ; +BEGIN + HALT +END Error ; + + +(* + InitTimeDiagnostic - create and return a time diagnostic. + The format string can be free form and may + contain {1T}, {1C} or {1P}. + {1T} will contain the time and + {1C} the count of the number of times the + code enters the time diagnostic code region. + {1P} generates the time as a percentage. + {0T} is the total time for the application. + {{ is rendered as a single {. +*) + +PROCEDURE InitTimeDiagnostic (name, format: ARRAY OF CHAR) : Diagnostic ; +VAR + d: Diagnostic ; +BEGIN + IF EnableDiagnostics + THEN + NEW (d) ; + d^.name := InitString (name) ; + d^.format := InitString (format) ; + WITH d^ DO + enable := DefaultTimeEnable ; + next := Head ; + type := timediag ; + CASE type OF + + timediag: tdiag.count := 0 ; + tdiag.total := InitTime (0, 0) ; + tdiag.enter := InitTime (0, 0) ; + tdiag.exit := InitTime (0, 0) + + ELSE + HALT + END + END ; + Head := d ; + RETURN d + ELSE + RETURN NIL + END +END InitTimeDiagnostic ; + + +(* + EnterDiagnostic - attribute all execution time from now to TimeDiag. +*) + +PROCEDURE EnterDiagnostic (TimeDiag: Diagnostic) ; +BEGIN + IF EnableDiagnostics AND (TimeDiag # NIL) + THEN + Assert (TimeDiag^.type = timediag) ; + Assert (GetTimeOfDay (TimeDiag^.tdiag.enter) = 0) ; + INC (TimeDiag^.tdiag.count) + END +END EnterDiagnostic ; + + +(* + ExitDiagnostic - stop attributing execution time to TimeDiag. +*) + +PROCEDURE ExitDiagnostic (TimeDiag: Diagnostic) ; +BEGIN + IF EnableDiagnostics AND (TimeDiag # NIL) + THEN + Assert (TimeDiag^.tdiag.enter # NIL) ; + Assert (TimeDiag^.tdiag.exit # NIL) ; + Assert (TimeDiag^.tdiag.total # NIL) ; + Assert (TimeDiag^.type = timediag) ; + Assert (GetTimeOfDay (TimeDiag^.tdiag.exit) = 0) ; + Accumulate (TimeDiag^.tdiag.total, TimeDiag^.tdiag.enter, TimeDiag^.tdiag.exit) + END +END ExitDiagnostic ; + + +(* + Accumulate - total := total + exit - enter +*) + +PROCEDURE Accumulate (total, enter, exit: Timeval) ; +BEGIN + IncTime (total, exit) ; + DecTime (total, enter) +END Accumulate ; + + +(* + IncTime - left := left + right. +*) + +PROCEDURE IncTime (left, right: Timeval) ; +VAR + lsec, lusec, + rsec, rusec: CARDINAL ; +BEGIN + GetTime (left, lsec, lusec) ; + GetTime (right, rsec, rusec) ; + IF lusec + rusec < MICROSEC + THEN + (* No carry *) + INC (lusec, rusec) ; + INC (lsec, rsec) + ELSE + INC (lusec, rusec) ; + DEC (lusec, MICROSEC) ; + INC (lsec, rsec + 1) + END ; + SetTime (left, lsec, lusec) +END IncTime ; + + +(* + DecTime - left := left - right. +*) + +PROCEDURE DecTime (left, right: Timeval) ; +VAR + lsec, lusec, + rsec, rusec: CARDINAL ; +BEGIN + GetTime (left, lsec, lusec) ; + GetTime (right, rsec, rusec) ; + IF lusec >= rusec + THEN + (* No borrow. *) + DEC (lusec, rusec) ; + IF lsec >= rsec + THEN + DEC (lsec, rsec) + ELSE + lsec := 0 + END + ELSE + IF lsec > 0 + THEN + INC (lusec, MICROSEC) ; + DEC (lusec, rusec) ; + DEC (lsec) ; + IF lsec >= rsec + THEN + DEC (lsec, rsec) + ELSE + lsec := 0 + END + ELSE + lsec := 0 ; + lusec := 0 + END + END ; + SetTime (left, lsec, lusec) +END DecTime ; + + +(* + InitMemDiagnostic - create and return a memory diagnostic. + The format string can be free form and may + contain {1M} {1d} {1x} {1P}. + {1M} is replaced by the value of the first parameter + with memory size units. + {1d} unsigned decimal. {1x} unsigned hexadecimal. + {0M} is the global allocation (Storage.mod:ALLOCATE). + {1P} is the percentage of param 1 relative + to global memory. +*) + +PROCEDURE InitMemDiagnostic (name, format: ARRAY OF CHAR) : Diagnostic ; +VAR + i: CARDINAL ; + d: Diagnostic ; +BEGIN + IF EnableDiagnostics + THEN + NEW (d) ; + d^.name := InitString (name) ; + d^.format := InitString (format) ; + WITH d^ DO + enable := DefaultMemEnable ; + next := Head ; + type := memdiag ; + CASE type OF + + memdiag: FOR i := 1 TO MaxParam DO + mdiag.param[i] := 0 + END + + ELSE + HALT + END + END ; + Head := d ; + RETURN d + ELSE + RETURN NIL + END +END InitMemDiagnostic ; + + +(* + CheckParam - +*) + +PROCEDURE CheckParam (paramno: CARDINAL) ; +BEGIN + IF (paramno < 1) OR (paramno > MaxParam) + THEN + HALT + END +END CheckParam ; + + +(* + MemIncr - allow the appropriate parameter to be incremented. + All parameters are initially set to zero and are stored + as LONGCARD. +*) + +PROCEDURE MemIncr (MemDiag: Diagnostic; paramno: CARDINAL; incr: CARDINAL) ; +BEGIN + IF EnableDiagnostics AND (MemDiag # NIL) + THEN + CheckParam (paramno) ; + CASE MemDiag^.type OF + + memdiag: INC (MemDiag^.mdiag.param[paramno], VAL (LONGCARD, incr)) + + ELSE + HALT + END + END +END MemIncr ; + + +(* + MemDecr - allow the appropriate parameter to be decremented. + All parameters are initially set to zero and are stored + as LONGCARD. +*) + +PROCEDURE MemDecr (MemDiag: Diagnostic; paramno: CARDINAL; decr: CARDINAL) ; +BEGIN + IF EnableDiagnostics AND (MemDiag # NIL) + THEN + CheckParam (paramno) ; + CASE MemDiag^.type OF + + memdiag: DEC (MemDiag^.mdiag.param[paramno], VAL (LONGCARD, decr)) + + ELSE + HALT + END + END +END MemDecr ; + + +(* + MemSet - allow the appropriate parameter to be set to value. + All parameters are initially set to zero. +*) + +PROCEDURE MemSet (MemDiag: Diagnostic; paramno: CARDINAL; value: CARDINAL) ; +BEGIN + IF EnableDiagnostics AND (MemDiag # NIL) + THEN + CheckParam (paramno) ; + CASE MemDiag^.type OF + + memdiag: MemDiag^.mdiag.param[paramno] := VAL (LONGCARD, value) + + ELSE + HALT + END + END +END MemSet ; + + +(* + TotalHeapIncr - increments the total heap used. +*) + +PROCEDURE TotalHeapIncr (incr: CARDINAL) ; +BEGIN + IF EnableDiagnostics + THEN + TotalHeap := TotalHeap + VAL (LONGCARD, incr) + END +END TotalHeapIncr ; + + +(* + TotalHeapDecr - decrements the total heap used. +*) + +PROCEDURE TotalHeapDecr (incr: CARDINAL) ; +BEGIN + IF EnableDiagnostics + THEN + TotalHeap := TotalHeap - VAL (LONGCARD, incr) + END +END TotalHeapDecr ; + + +(* + SetEnable - set the enable flag in Diag to value. +*) + +PROCEDURE SetEnable (Diag: Diagnostic; value: BOOLEAN) ; +BEGIN + IF EnableDiagnostics AND (Diag # NIL) + THEN + Diag^.enable := value + END +END SetEnable ; + + +(* + Lookup - returns the Diagnostic containing name or NIL + if it does not exist. +*) + +PROCEDURE Lookup (name: ARRAY OF CHAR) : Diagnostic ; +VAR + ptr: Diagnostic ; + s : String ; +BEGIN + IF EnableDiagnostics + THEN + s := InitString (name) ; + ptr := Head ; + WHILE ptr # NIL DO + IF Equal (ptr^.name, s) + THEN + s := KillString (s) ; + RETURN ptr + END ; + ptr := ptr^.next + END ; + s := KillString (s) ; + RETURN NIL + ELSE + RETURN NIL + END +END Lookup ; + + +(* + ForeachDiagDo - for diag in global diag list do + dp (diag); + end +*) + +PROCEDURE ForeachDiagDo (dp: DiagProc) ; +VAR + ptr: Diagnostic ; +BEGIN + ptr := Head ; + WHILE ptr # NIL DO + dp (ptr) ; + ptr := ptr^.next + END +END ForeachDiagDo ; + + +(* + SetDefaultConfig - force the Diag enable flag to the + time or mem global default. +*) + +PROCEDURE SetDefaultConfig (Diag: Diagnostic) ; +BEGIN + IF Diag^.type = timediag + THEN + Diag^.enable := DefaultTimeEnable + ELSE + Diag^.enable := DefaultMemEnable + END +END SetDefaultConfig ; + + +(* + Configure - will turn on or off all the memory or time + instrumentation diagnostics and set the defaults + time and mem values. +*) + +PROCEDURE Configure (time, mem: BOOLEAN) ; +BEGIN + IF EnableDiagnostics + THEN + DefaultTimeEnable := time ; + DefaultMemEnable := mem ; + ForeachDiagDo (SetDefaultConfig) + END +END Configure ; + + +(* + CreateStartTime - +*) + +PROCEDURE CreateStartTime ; +BEGIN + IF EnableDiagnostics + THEN + IF StartTime = NIL + THEN + StartTime := InitTime (0, 0) ; + IF GetTimeOfDay (StartTime) = 0 + THEN + END + END ; + IF TotalTime = NIL + THEN + TotalTime := InitTime (0, 0) + END + ELSE + StartTime := NIL ; + TotalTime := NIL + END +END CreateStartTime ; + + +(* + UpdateTotalTime - +*) + +PROCEDURE UpdateTotalTime ; +BEGIN + IF GetTimeOfDay (TotalTime) = 0 + THEN + END ; + DecTime (TotalTime, StartTime) +END UpdateTotalTime ; + + +(* + GetTimeParam - a paramno of 0 will return the total time so far + whereas a paramno > 0 will return the time associated + with Diag. +*) + +PROCEDURE GetTimeParam (Diag: Diagnostic; paramno: CARDINAL) : Timeval ; +VAR + sec, usec: CARDINAL ; +BEGIN + IF paramno = 0 + THEN + UpdateTotalTime ; + RETURN TotalTime + ELSE + RETURN Diag^.tdiag.total + END +END GetTimeParam ; + + +(* + GetMemParam - return the mem paramno from within Diag. A paramno of 0 + will return the total heap. +*) + +PROCEDURE GetMemParam (Diag: Diagnostic; paramno: CARDINAL) : LONGCARD ; +BEGIN + IF paramno = 0 + THEN + RETURN TotalHeap + ELSE + RETURN Diag^.mdiag.param[paramno] + END +END GetMemParam ; + + +(* + CreateDecimalMem - converts c to a decimal string. +*) + +PROCEDURE CreateDecimalMem (c: LONGCARD) : String ; +BEGIN + RETURN LongCardinalToString (c, 0, ' ', 10, TRUE) +END CreateDecimalMem ; + + +(* + CreateHexadecimalMem - converts c to a hexadecimal string. +*) + +PROCEDURE CreateHexadecimalMem (c: LONGCARD) : String ; +BEGIN + RETURN ConCat (InitString ('0x'), + Mark (LongCardinalToString (c, 0, ' ', 16, TRUE))) +END CreateHexadecimalMem ; + + +(* + CreateDecimalTime - return timeval as a decimal seconds.usecs string. +*) + +PROCEDURE CreateDecimalTime (timeval: Timeval) : String ; +VAR + sec, usec: CARDINAL ; +BEGIN + GetTime (timeval, sec, usec) ; + RETURN ConCat (ConCat (LongCardinalToString (sec, 0, ' ', 10, TRUE), + Mark (InitString ('.'))), + LongCardinalToString (usec, 6, '0', 10, TRUE)) +END CreateDecimalTime ; + + +(* + CreateHexadecimalTime - return timeval as a hexadecimal seconds.usecs string. +*) + +PROCEDURE CreateHexadecimalTime (timeval: Timeval) : String ; +VAR + sec, usec: CARDINAL ; +BEGIN + GetTime (timeval, sec, usec) ; + RETURN ConCat (ConCat (LongCardinalToString (sec, 0, ' ', 16, TRUE), + Mark (InitString ('.'))), + LongCardinalToString (usec, 5, '0', 16, TRUE)) +END CreateHexadecimalTime ; + + +(* + Decimal - convert paramno in Diag to a string. +*) + +PROCEDURE Decimal (Diag: Diagnostic; paramno: CARDINAL) : String ; +BEGIN + CASE Diag^.type OF + + memdiag : RETURN CreateDecimalMem (GetMemParam (Diag, paramno)) | + timediag: RETURN CreateDecimalTime (GetTimeParam (Diag, paramno)) + + END ; + RETURN NIL +END Decimal ; + + +(* + Hexadecimal - convert paramno in Diag to a hex string. +*) + +PROCEDURE Hexadecimal (Diag: Diagnostic; paramno: CARDINAL) : String ; +BEGIN + CASE Diag^.type OF + + memdiag : RETURN CreateHexadecimalMem (GetMemParam (Diag, paramno)) | + timediag: RETURN CreateHexadecimalTime (GetTimeParam (Diag, paramno)) + + END ; + RETURN NIL +END Hexadecimal ; + + +(* + Count - return the count field for a time diag or return the decimal + value for a paramno in a mem diag. +*) + +PROCEDURE Count (Diag: Diagnostic; paramno: CARDINAL) : String ; +BEGIN + CASE Diag^.type OF + + memdiag : RETURN CreateDecimalMem (GetMemParam (Diag, paramno)) | + timediag: RETURN ctos (Diag^.tdiag.count, 0, ' ') + + END ; + RETURN NIL +END Count ; + + +(* + Microsec - convert timeval into microseconds and return the value as + a longcard. +*) + +PROCEDURE Microsec (timeval: Timeval) : LONGCARD ; +VAR + sec, usec: CARDINAL ; + microsec : LONGCARD ; +BEGIN + GetTime (timeval, sec, usec) ; + microsec := VAL (LONGCARD, sec) * MICROSEC + VAL (LONGCARD, usec) ; + RETURN microsec +END Microsec ; + + +(* + CreateTimePercent - return timeval as a percentage of the TotalTime. +*) + +PROCEDURE CreateTimePercent (timeval: Timeval) : String ; +VAR + total, param: LONGCARD ; +BEGIN + IF timeval = TotalTime + THEN + param := 100 + ELSE + UpdateTotalTime ; + param := Microsec (timeval) * 100 ; + total := Microsec (TotalTime) ; + IF total = 0 + THEN + param := 0 + ELSE + param := param DIV total + END + END ; + RETURN ConCatChar (ctos (VAL (CARDINAL, param), 3, ' '), '%') +END CreateTimePercent ; + + +(* + CreateMemPercent - return memval as a percentage of TotalHeap. +*) + +PROCEDURE CreateMemPercent (memval: LONGCARD) : String ; +VAR + param: LONGCARD ; +BEGIN + IF memval = TotalHeap + THEN + param := 100 + ELSE + param := memval * 100 ; + IF TotalHeap = 0 + THEN + param := 0 + ELSE + param := param DIV TotalHeap + END + END ; + RETURN ConCatChar (ctos (VAL (CARDINAL, param), 3, ' '), '%') +END CreateMemPercent ; + + +(* + DescribePercent - call the appropriate mem or time percentage procedure. +*) + +PROCEDURE DescribePercent (Diag: Diagnostic; paramno: CARDINAL) : String ; +BEGIN + CASE Diag^.type OF + + memdiag : RETURN CreateMemPercent (GetMemParam (Diag, paramno)) | + timediag: RETURN CreateTimePercent (GetTimeParam (Diag, paramno)) + + END ; + RETURN NIL +END DescribePercent ; + + +(* + DescribeMemory - return the memory diagnostic +*) + +PROCEDURE DescribeMemory (Diag: Diagnostic; paramno: CARDINAL) : String ; +CONST + kilo = 1024 ; + mega = kilo * kilo ; + giga = mega * kilo ; +VAR + param: LONGCARD ; + s : String ; +BEGIN + param := GetMemParam (Diag, paramno) ; + IF param < kilo + THEN + s := ConCat (LongCardinalToString (param, 0, ' ', 10, FALSE), + Mark (InitString (' Bytes'))) + ELSIF param < mega + THEN + param := param DIV kilo ; + s := ConCat (LongCardinalToString (param, 0, ' ', 10, FALSE), + Mark (InitString ('KB'))) + ELSIF param < giga + THEN + param := param DIV mega ; + s := ConCat (LongCardinalToString (param, 0, ' ', 10, FALSE), + Mark (InitString ('MB'))) + ELSE + param := param DIV giga ; + s := ConCat (LongCardinalToString (param, 0, ' ', 10, FALSE), + Mark (InitString ('GB'))) + END ; + RETURN s +END DescribeMemory ; + + +(* + DescribeTime - returns the time diagnostic in seconds. +*) + +PROCEDURE DescribeTime (Diag: Diagnostic; paramno: CARDINAL) : String ; +VAR + sec, usec: CARDINAL ; +BEGIN + CASE Diag^.type OF + + memdiag : HALT | + timediag: GetTime (GetTimeParam (Diag, paramno), sec, usec) ; + RETURN ConCat (ConCat (LongCardinalToString (sec, 0, ' ', 10, TRUE), + Mark (InitString ('.'))), + ConCat (LongCardinalToString (usec, 6, '0', 10, TRUE), + Mark (InitString (' sec')))) + + END ; + RETURN NIL +END DescribeTime ; + + +(* + ParamSpec - ebnf: + + ( '{' | '0' | '1' | '2' | '3' | '4' ) + ( 'd' | 'x' | 'C' | 'H' | 'T' | 'M' | 'N' | 'P' ) + '}' +*) + +PROCEDURE ParamSpec (Diag: Diagnostic; i: CARDINAL) : CARDINAL ; +VAR + paramno, + length : CARDINAL ; + ch : CHAR ; +BEGIN + length := Length (Diag^.format) ; + paramno := 0 ; + IF i < length + THEN + ch := char (Diag^.format, i) ; + CASE ch OF + + '{': Output := ConCatChar (Output, '{') ; + RETURN i + 1 | + '0': paramno := 0 | + '1': paramno := 1 | + '2': paramno := 2 | + '3': paramno := 3 | + '4': paramno := 4 + + ELSE + Error ('unexpected character: ', ch) + END ; + INC (i) ; + IF i < length + THEN + ch := char (Diag^.format, i) ; + CASE ch OF + + 'd': Output := ConCat (Output, Decimal (Diag, paramno)) | + 'x': Output := ConCat (Output, Hexadecimal (Diag, paramno)) | + 'C': Output := ConCat (Output, Count (Diag, paramno)) | + 'H': Output := ConCat (Output, HierarchicalName (Diag, i)) | + 'M': Output := ConCat (Output, DescribeMemory (Diag, paramno)) | + 'N': Output := ConCat (Output, Diag^.name) | + 'P': Output := ConCat (Output, DescribePercent (Diag, paramno)) | + 'T': Output := ConCat (Output, DescribeTime (Diag, paramno)) + + ELSE + Error ('unexpected character: ', ch) + END ; + INC (i) ; + IF i < length + THEN + ch := char (Diag^.format, i) ; + IF ch # '}' + THEN + Error ('expected } character, seen ', ch) + END + END + END + END ; + RETURN i + 1 +END ParamSpec ; + + +(* + HierarchicalName - if the hierarchical formatting of output + has been enabled use the last component + of the name separated by ':' else + output full name. +*) + +PROCEDURE HierarchicalName (Diag: Diagnostic; pos: CARDINAL) : String ; +VAR + i, j: INTEGER ; +BEGIN + IF EnableHierarchical + THEN + i := DynamicStrings.Index (Diag^.name, '}', pos) ; + IF i > 0 + THEN + j := i - 1 ; + i := RIndex (Diag^.name, ':', j) ; + IF (i >= 0) AND (i < j) + THEN + RETURN DynamicStrings.Slice (Diag^.name, i, j) + END + END + END ; + RETURN Diag^.name +END HierarchicalName ; + + +(* + FormatDiag - ebnf: + + { ( '{' ParamSpec ) | any } +*) + +PROCEDURE FormatDiag (Diag: Diagnostic) ; +VAR + i, length: CARDINAL ; + ch : CHAR ; +BEGIN + i := 0 ; + length := Length (Diag^.format) ; + WHILE i < length DO + ch := char (Diag^.format, i) ; + IF ch = '{' + THEN + INC (i) ; + i := ParamSpec (Diag, i) + ELSE + Output := ConCatChar (Output, ch) ; + INC (i) + END + END ; + Output := ConCatChar (Output, nl) +END FormatDiag ; + + +(* + GetName - returns the name of Diag. +*) + +PROCEDURE GetName (Diag: Diagnostic) : String ; +BEGIN + IF EnableDiagnostics AND (Diag # NIL) + THEN + RETURN Diag^.name + ELSE + RETURN NIL + END +END GetName ; + + +(* + Match - +*) + +PROCEDURE Match (stem, name: String) : BOOLEAN ; +BEGIN + RETURN TRUE +END Match ; + + +(* + HierarchicalDiag - iterate over every diagnostic using a depth first search + for each component of the diagnostic name. +*) + +PROCEDURE HierarchicalDiag (stem: String; visited: Index) : String ; +VAR + diag: Diagnostic ; +BEGIN + diag := Head ; + WHILE diag # NIL DO + IF NOT Indexing.IsIndiceInIndex (visited, diag) + THEN + IF Match (stem, diag^.name) + THEN + Indexing.IncludeIndiceIntoIndex (visited, diag) + END + END ; + diag := diag^.next + END ; + RETURN Output +END HierarchicalDiag ; + + +(* + GenerateRaw - return the output string after calling FormatDiag on + every diagnostic rule. +*) + +PROCEDURE GenerateRaw () : String ; +BEGIN + ForeachDiagDo (FormatDiag) ; + RETURN Output +END GenerateRaw ; + + +(* + GenerateHierarchical - +*) + +PROCEDURE GenerateHierarchical () : String ; +BEGIN + RETURN HierarchicalDiag (InitString (''), Indexing.InitIndex (1)) +END GenerateHierarchical ; + + +(* + Generate - return a string containing the output from + all the diagnostics enabled. +*) + +PROCEDURE Generate (hierarchical: BOOLEAN) : String ; +BEGIN + EnableHierarchical := hierarchical ; + IF EnableDiagnostics + THEN + Output := KillString (Output) ; + Output := InitString ('') ; + IF hierarchical + THEN + RETURN GenerateHierarchical () + ELSE + RETURN GenerateRaw () + END + ELSE + RETURN NIL + END +END Generate ; + + +BEGIN + TotalHeap := 0 ; + StartTime := NIL ; + TotalTime := NIL ; + CreateStartTime ; + Head := NIL ; + Output := NIL ; + EnableHierarchical := FALSE ; + DefaultTimeEnable := DefaultTimeEnableValue ; + DefaultMemEnable := DefaultMemEnableValue ; +END M2Diagnostic. diff --git a/gcc/m2/gm2-libs/M2WIDESET.def b/gcc/m2/gm2-libs/M2WIDESET.def new file mode 100644 index 000000000000..5369d7baddd8 --- /dev/null +++ b/gcc/m2/gm2-libs/M2WIDESET.def @@ -0,0 +1,210 @@ +(* M2WIDESET.def runtime support procedures for wide sets. + +Copyright (C) 2025 Free Software Foundation, Inc. +Contributed by Gaius Mulley . + +This file is part of GNU Modula-2. + +GNU Modula-2 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. + +GNU Modula-2 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 +. *) + +DEFINITION MODULE M2WIDESET ; + +(* + Title : M2WIDESET + Author : Gaius Mulley + System : GNU Modula-2 + Date : Thu Nov 16 19:57:31 2023 + Description: provides runtime capability for wide sets. +*) + +FROM SYSTEM IMPORT BYTE ; + + +(* + Or - dest = left | right + implement OR for a wide set type. +*) + +PROCEDURE Or (VAR dest: ARRAY OF BYTE; left, right: ARRAY OF BYTE; + highbit: CARDINAL) ; + + +(* + And - dest = left & right + implement AND for a wide set type. +*) + +PROCEDURE And (VAR dest: ARRAY OF BYTE; left, right: ARRAY OF BYTE; + highbit: CARDINAL) ; + + +(* + Not - dest = ~ operand + implement AND for a wide set type. +*) + +PROCEDURE Not (VAR dest: ARRAY OF BYTE; expr: ARRAY OF BYTE; + highbit: CARDINAL) ; + + +(* + Incl - dest |= bit + implement INCL for a wide set type. +*) + +PROCEDURE Incl (VAR dest: ARRAY OF BYTE; bit: CARDINAL) ; + + +(* + Excl - dest &= (~ bit) + implement EXCL for a wide set type. +*) + +PROCEDURE Excl (VAR dest: ARRAY OF BYTE; bit: CARDINAL) ; + + +(* + In - return bit IN expr. +*) + +PROCEDURE In (VAR expr: ARRAY OF BYTE; bit: CARDINAL) : BOOLEAN ; + + +(* + Equal - return left = right. +*) + +PROCEDURE Equal (VAR left, right: ARRAY OF BYTE; highbit: CARDINAL) : BOOLEAN ; + + +(* + Clear - dest = {}. +*) + +PROCEDURE Clear (VAR dest: ARRAY OF BYTE; highbit: CARDINAL) ; + + +(* + Shift - dest := SHIFT (src, ShiftCount). This is a logical shift + all the new bit values will be zero. +*) + +PROCEDURE Shift (VAR dest: ARRAY OF BYTE; src: ARRAY OF BYTE; + highbit: CARDINAL; ShiftCount: INTEGER) ; + + +(* + ArithShift - dest := ArithShift (dest, ShiftCount, carry). This is an + arithmetic shift all the new bit values will + be set to carry. +*) + +PROCEDURE ArithShift (VAR dest: ARRAY OF BYTE; + highbit: CARDINAL; ShiftCount: INTEGER; + carry: BOOLEAN) ; + + +(* + Rotate - is a runtime procedure whose job is to implement + the ROTATE procedure of ISO SYSTEM. +*) + +PROCEDURE Rotate (VAR dest: ARRAY OF BYTE; src: ARRAY OF BYTE; + highbit: CARDINAL; RotateCount: INTEGER) ; + +(* + Less - performs the set comparison for a wide set. + Less returns ProperSubset (left, right, highbit). +*) + +PROCEDURE Less (VAR left, right: ARRAY OF BYTE; + highbit: CARDINAL) : BOOLEAN ; + + +(* + LessEqu - performs the set comparison for a wide set. + LessEqu returns Equal (left, right, highbit) OR + ProperSubset (left, right, highbit). +*) + +PROCEDURE LessEqu (VAR left, right: ARRAY OF BYTE; + highbit: CARDINAL) : BOOLEAN ; + + +(* + Gre - performs the set comparison for a wide set. + Gre returns the result of + ProperSuperet (left, right, highbit). +*) + +PROCEDURE Gre (VAR left, right: ARRAY OF BYTE; + highbit: CARDINAL) : BOOLEAN ; + + +(* + GreEqu - performs the set comparison for a wide set. + GreEqu returns Equal (left, right, highbit) OR + ProperSuperet (left, right, highbit). +*) + +PROCEDURE GreEqu (VAR left, right: ARRAY OF BYTE; + highbit: CARDINAL) : BOOLEAN ; + +(* + ProperSubset - return TRUE if left is a proper subset of right. + If true the left set will have at least one element + less than set right. +*) + +PROCEDURE ProperSubset (VAR left, right: ARRAY OF BYTE; + highbit: CARDINAL) : BOOLEAN ; + + +(* + ProperSuperset - return TRUE if left is a proper superset of right. + If true the left set will have at least one element + more than set right. +*) + +PROCEDURE ProperSuperset (VAR left, right: ARRAY OF BYTE; + highbit: CARDINAL) : BOOLEAN ; + + +(* + LogicalDifference - build a logical difference expression tree. + dest := left and (not right). +*) + +PROCEDURE LogicalDifference (VAR dest: ARRAY OF BYTE; + left, right: ARRAY OF BYTE; + highbit: CARDINAL) ; + + +(* + SymmetricDifference - build a logical difference expression tree. + dest := left xor right. +*) + +PROCEDURE SymmetricDifference (VAR dest: ARRAY OF BYTE; + left, right: ARRAY OF BYTE; + highbit: CARDINAL) ; + + +END M2WIDESET. diff --git a/gcc/m2/gm2-libs/M2WIDESET.mod b/gcc/m2/gm2-libs/M2WIDESET.mod new file mode 100644 index 000000000000..93df428cb2ff --- /dev/null +++ b/gcc/m2/gm2-libs/M2WIDESET.mod @@ -0,0 +1,1259 @@ +(* M2WIDESET.mod runtime support procedures for wide sets. + +Copyright (C) 2023 Free Software Foundation, Inc. +Contributed by Gaius Mulley . + +This file is part of GNU Modula-2. + +GNU Modula-2 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. + +GNU Modula-2 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 +. *) + +IMPLEMENTATION MODULE M2WIDESET ; + +FROM SYSTEM IMPORT TBITSIZE, ADDRESS, ADR, SHIFT ; +FROM Builtins IMPORT memcpy, memset ; +FROM libc IMPORT printf ; + +TYPE + BYTESET = PACKEDSET OF [0..7] ; + PtrToByteset = POINTER TO BYTESET ; + PtrToBitset = POINTER TO BITSET ; + + +CONST + EnableOptimizeBitset = TRUE ; + EnableDebugging = FALSE ; + + +(* + BitsPerByteset = TSIZE (BYTESET) * 8 ; +*) + + +(* + DumpSet - +*) + +PROCEDURE DumpSet (set: ARRAY OF BYTE; highbit: CARDINAL) ; +VAR + count, + i, high: CARDINAL ; + last : BYTE ; +BEGIN + high := HIGH (set) ; + printf ("set highbit = %d, high indice = %d\n", highbit, high) ; + printf ("{ ") ; + last := set[0] ; + i := 1 ; + count := 1 ; + printf (" 0: 0x%02x", VAL (CARDINAL, last)) ; + WHILE i <= high DO + IF last = set[i] + THEN + INC (count) + ELSE + IF count > 1 + THEN + printf (" x %d, %d: 0x%02x", count, i, VAL (CARDINAL, set[i])) + ELSE + IF i > 0 + THEN + printf (",") + END ; + printf (" %d: 0x%02x", i, VAL (CARDINAL, set[i])) + END ; + last := set[i] ; + count := 1 + END ; + INC (i) + END ; + IF count > 1 + THEN + printf (" x %d ", count) + END ; + printf (" }\n") +END DumpSet ; + + +(* + Or - dest = left | right + implement OR for a wide set type. +*) + +PROCEDURE Or (VAR dest: ARRAY OF BYTE; left, right: ARRAY OF BYTE; + highbit: CARDINAL) ; +VAR + i, + bit, + high, + lastbit: CARDINAL ; + byteset: BYTESET ; +BEGIN + IF EnableDebugging + THEN + printf ("left\n"); + DumpSet (left, highbit) ; + printf ("right\n"); + DumpSet (right, highbit) + END ; + high := HIGH (dest) ; + i := 0 ; + WHILE i < high DO + IF EnableDebugging + THEN + printf ("%02x or %02x", left[i], right[i]) + END ; + dest[i] := BYTESET (left[i]) + BYTESET (right[i]) ; + IF EnableDebugging + THEN + printf (" -> %02x\n", dest[i]) + END ; + INC (i) + END ; + IF i = high + THEN + lastbit := highbit MOD TBITSIZE (BYTE) ; + IF lastbit = 0 + THEN + dest[i] := BYTESET (left[i]) + BYTESET (right[i]) + ELSE + byteset := dest[i] ; + FOR bit := 0 TO lastbit DO + IF (bit IN BYTESET (left[i])) OR (bit IN BYTESET (right[i])) + THEN + INCL (byteset, bit) + ELSE + EXCL (byteset, bit) + END + END ; + dest[i] := byteset + END + ELSE + HALT + END +END Or ; + + +(* + And - dest = left & right + implement AND for a wide set type. +*) + +PROCEDURE And (VAR dest: ARRAY OF BYTE; left, right: ARRAY OF BYTE; + highbit: CARDINAL) ; +VAR + i, + bit, + high, + lastbit: CARDINAL ; + byteset: BYTESET ; +BEGIN + high := HIGH (dest) ; + i := 0 ; + WHILE i < high DO + dest[i] := BYTESET (left[i]) * BYTESET (right[i]) ; + INC (i) + END ; + IF i = high + THEN + lastbit := highbit MOD TBITSIZE (BYTE) ; + IF lastbit = 0 + THEN + dest[i] := BYTESET (left[i]) * BYTESET (right[i]) + ELSE + byteset := dest[i] ; + FOR bit := 0 TO lastbit DO + IF (bit IN BYTESET (left[i])) AND (bit IN BYTESET (right[i])) + THEN + INCL (byteset, bit) + ELSE + EXCL (byteset, bit) + END + END ; + dest[i] := byteset + END + ELSE + HALT + END +END And ; + + +(* + Not - dest = ~ expr + implement NOT for a wide set type. +*) + +PROCEDURE Not (VAR dest: ARRAY OF BYTE; expr: ARRAY OF BYTE; + highbit: CARDINAL) ; +VAR + i, + bit, + high, + lastbit: CARDINAL ; + byteset: BYTESET ; +BEGIN + high := HIGH (dest) ; + i := 0 ; + WHILE i < high DO + dest[i] := - BYTESET (expr[i]) ; + INC (i) + END ; + IF i = high + THEN + lastbit := highbit MOD TBITSIZE (BYTE) ; + IF lastbit = 0 + THEN + dest[i] := - BYTESET (expr[i]) + ELSE + byteset := dest[i] ; + FOR bit := 0 TO lastbit DO + IF bit IN BYTESET (expr[i]) + THEN + EXCL (byteset, bit) + ELSE + INCL (byteset, bit) + END + END ; + dest[i] := byteset + END + ELSE + HALT + END +END Not ; + + +(* + Incl - dest |= bit + implement INCL for a wide set type. +*) + +PROCEDURE Incl (VAR dest: ARRAY OF BYTE; bit: CARDINAL) ; +VAR + byteset: BYTESET ; + byteno, + bitno, + high : CARDINAL ; +BEGIN + high := HIGH (dest) ; + byteno := bit DIV TBITSIZE (BYTE) ; + bitno := bit MOD TBITSIZE (BYTE) ; + IF byteno <= high + THEN + byteset := BYTESET (dest[byteno]) ; + INCL (byteset, bitno) ; + dest[byteno] := byteset + ELSE + HALT + END +END Incl ; + + +(* + Excl - dest &= (~ bit) + implement EXCL for a wide set type. +*) + +PROCEDURE Excl (VAR dest: ARRAY OF BYTE; bit: CARDINAL) ; +VAR + byteset: BYTESET ; + byteno, + bitno, + high : CARDINAL ; +BEGIN + high := HIGH (dest) ; + byteno := bit DIV TBITSIZE (BYTE) ; + bitno := bit MOD TBITSIZE (BYTE) ; + IF byteno <= high + THEN + byteset := BYTESET (dest[byteno]) ; + EXCL (byteset, bitno) ; + dest[byteno] := byteset + ELSE + HALT + END +END Excl ; + + +(* + In - return bit IN expr. +*) + +PROCEDURE In (VAR expr: ARRAY OF BYTE; bit: CARDINAL) : BOOLEAN ; +VAR + byteno, + bitno, + high : CARDINAL ; +BEGIN + high := HIGH (expr) ; + byteno := bit DIV TBITSIZE (BYTE) ; + bitno := bit MOD TBITSIZE (BYTE) ; + IF byteno <= high + THEN + RETURN bitno IN BYTESET (expr[byteno]) + ELSE + HALT + END +END In ; + + +(* + Empty - return TRUE if expr = {}. +*) + +PROCEDURE Empty (expr: ARRAY OF BYTE; highbit: CARDINAL) : BOOLEAN ; +VAR + i, + bit, + high, + lastbit: CARDINAL ; +BEGIN + high := HIGH (expr) ; + i := 0 ; + WHILE i < high DO + IF expr[i] # BYTE (0) + THEN + RETURN FALSE + END ; + INC (i) + END ; + IF i = high + THEN + lastbit := highbit MOD TBITSIZE (BYTE) ; + IF lastbit = 0 + THEN + RETURN expr[i] = BYTE (0) + ELSE + FOR bit := 0 TO lastbit DO + IF bit IN BYTESET (expr[i]) + THEN + RETURN FALSE + END + END + END + ELSE + HALT + END ; + RETURN TRUE +END Empty ; + + +(* + Clear - set dest := {}. +*) + +PROCEDURE Clear (VAR dest: ARRAY OF BYTE; highbit: CARDINAL) ; +VAR + i, + bit, + high, + lastbit: CARDINAL ; + byteset: BYTESET ; +BEGIN + high := HIGH (dest) ; + IF EnableOptimizeBitset + THEN + IF memset (ADR (dest), 0, high) = NIL + THEN + END ; + i := high + ELSE + i := 0 ; + WHILE i < high DO + dest[i] := BYTE (0) ; + INC (i) + END + END ; + IF i = high + THEN + lastbit := highbit MOD TBITSIZE (BYTE) ; + IF lastbit = 0 + THEN + dest[i] := BYTE (0) + ELSE + byteset := dest[i] ; + FOR bit := 0 TO lastbit DO + EXCL (byteset, bit) + END ; + dest[i] := byteset + END + ELSE + HALT + END +END Clear ; + + +(* + Equal - return left = right. +*) + +PROCEDURE Equal (VAR left, right: ARRAY OF BYTE; highbit: CARDINAL) : BOOLEAN ; +VAR + i, + bit, + high, + lastbit : CARDINAL ; + rptr, lptr: PtrToByteset ; + lb, rb : BOOLEAN ; +BEGIN + IF EnableDebugging + THEN + printf ("Equal left : "); + DumpSet (left, highbit) ; + printf (" right: "); + DumpSet (right, highbit) ; + END ; + + high := HIGH (left) ; + IF high = HIGH (right) + THEN + i := 0 ; + WHILE i < high DO + IF left[i] # right[i] + THEN + RETURN FALSE + END ; + INC (i) + END ; + IF i = high + THEN + lastbit := highbit MOD TBITSIZE (BYTE) ; + IF lastbit = 7 + THEN + (* All bits 0..7 inclusive can be tested. *) + RETURN left[i] = right[i] + END ; + rptr := ADR (right[i]) ; + lptr := ADR (left[i]) ; + (* Only check the bits in the set which are used in the last byte. *) + FOR bit := 0 TO lastbit DO + (* + IF (bit IN rptr^) # (bit IN lptr^) + THEN + RETURN FALSE + END + *) + lb := bit IN lptr^ ; (* Replace with the above - when the bug is fixed. *) + rb := bit IN rptr^ ; + IF lb # rb + THEN + RETURN FALSE + END + END + END + ELSE + HALT + END ; + RETURN TRUE +END Equal ; + + +(* + ShiftLeft - performs the shift left for a multi word set. +*) + +PROCEDURE ShiftLeft (VAR dest: ARRAY OF BYTE; src: ARRAY OF BYTE; + highbit: CARDINAL; + ShiftCount: CARDINAL) ; +VAR + byteshift, + bitshift : CARDINAL ; +BEGIN + byteshift := ShiftCount DIV TBITSIZE (BYTESET) ; + bitshift := ShiftCount MOD TBITSIZE (BYTESET) ; + ShiftLeftByteBit (dest, src, highbit, byteshift, bitshift) +END ShiftLeft ; + + +(* + ShiftLeftByteBit - shifts src left by byteshift and bitshift. It + moves the bottom bitshift bits from lo into the + first byte. +*) + +PROCEDURE ShiftLeftByteBit (VAR dest: ARRAY OF BYTE; src: ARRAY OF BYTE; + highbit: CARDINAL; + byteshift, bitshift: CARDINAL) ; +VAR + top, bot, mid : BYTESET ; + i, h, fromIdx, toIdx: CARDINAL ; +BEGIN + (* Copy the bytes into dest at the mostly correct position + (modulo byte position). *) + toIdx := 0 ; + fromIdx := 0 ; + WHILE toIdx < byteshift DO + dest[toIdx] := BYTE (0) ; + INC (toIdx) + END ; + WHILE toIdx <= HIGH (dest) DO + dest[toIdx] := src[fromIdx] ; + INC (toIdx) ; + INC (fromIdx) + END ; + (* And adjust by bit shifting. *) + IF bitshift > 0 + THEN + bot := BYTE (0) ; + h := HIGH (dest) ; + i := 0 ; + WHILE i < h DO + mid := dest[i] ; + (* Shift right by TBITSIZE (BYTE) - bitshift. *) + top := SHIFT (mid, - INTEGER ((TBITSIZE (BYTE) - bitshift))) ; (* Right must be negative. *) + mid := SHIFT (mid, bitshift) ; (* Shift left. *) + dest[i] := mid + bot ; + bot := top ; + INC (i) + END ; + mid := dest[h] ; + mid := SHIFT (mid, bitshift) ; (* Shift left. *) + dest[h] := mid + bot + END +END ShiftLeftByteBit ; + + +(* + ShiftRight - performs the shift rightt for a multi word set. +*) + +PROCEDURE ShiftRight (VAR dest: ARRAY OF BYTE; src: ARRAY OF BYTE; + highbit: CARDINAL; + ShiftCount: CARDINAL) ; +VAR + byteshift, + bitshift : CARDINAL ; +BEGIN + IF EnableDebugging + THEN + printf ("highbit = %d, ShiftCount = %d\n", + highbit, ShiftCount) + END ; + byteshift := ShiftCount DIV TBITSIZE (BYTESET) ; + bitshift := ShiftCount MOD TBITSIZE (BYTESET) ; + IF EnableDebugging + THEN + printf ("SIZE (byteset) = %d, TBITSIZE (byteset) = %d\n", + SIZE (BYTESET), TBITSIZE (BYTESET)); + printf (" byteshift = %d, bitshift = %d\n", + byteshift, bitshift) + END ; + ShiftRightByteBit (dest, src, highbit, byteshift, bitshift) +END ShiftRight ; + + +(* + ShiftRightByteBit - shifts src left by byteshift and bitshift. It + moves the bottom bitshift bits from lo into the + first byte. +*) + +PROCEDURE ShiftRightByteBit (VAR dest: ARRAY OF BYTE; src: ARRAY OF BYTE; + highbit: CARDINAL; + byteshift, bitshift: CARDINAL) ; +VAR + top, bot, mid : BYTESET ; + i, h, toIdx, fromIdx: CARDINAL ; +BEGIN + (* Copy the bytes. *) + toIdx := 0 ; + fromIdx := byteshift ; + IF EnableDebugging + THEN + printf ("HIGH (dest) = %d\n", HIGH (dest)) + END ; + IF byteshift <= HIGH (dest) + THEN + h := HIGH (dest) - byteshift ; + WHILE toIdx <= h DO + dest[toIdx] := src[fromIdx] ; + INC (toIdx) ; + INC (fromIdx) + END + END ; + WHILE toIdx <= HIGH (dest) DO + dest[toIdx] := BYTE (0) ; + INC (toIdx) + END ; + (* And bit shift the remainder. *) + IF EnableDebugging + THEN + printf ("bitshift = %d\n", bitshift) + END ; + IF bitshift > 0 + THEN + top := BYTE (0) ; + i := HIGH (dest) ; + WHILE i > 0 DO + mid := dest[i] ; + bot := SHIFT (mid, TBITSIZE (BYTE) - bitshift) ; (* Shift left. *) + mid := SHIFT (mid, - INTEGER (bitshift)) ; (* Shift right by bitshift. *) + dest[i] := top + mid ; + top := bot ; + DEC (i) + END ; + mid := dest[0] ; + mid := SHIFT (mid, - INTEGER (bitshift)) ; (* Shift right by bitshift. *) + dest[0] := top + mid + END +END ShiftRightByteBit ; + + +(* + Shift - dest := SHIFT (src, ShiftCount). +*) + +PROCEDURE Shift (VAR dest: ARRAY OF BYTE; src: ARRAY OF BYTE; + highbit: CARDINAL; ShiftCount: INTEGER) ; +BEGIN + IF ShiftCount > 0 + THEN + IF EnableDebugging + THEN + printf ("Shift Left: ") ; + DumpSet (src, highbit) + END ; + ShiftCount := ShiftCount MOD VAL (INTEGER, (highbit + 1)) ; + ShiftLeft (dest, src, highbit, ShiftCount) ; + IF EnableDebugging + THEN + printf (" Result of shift Left: ") ; + DumpSet (dest, highbit) + END + ELSIF ShiftCount < 0 + THEN + IF EnableDebugging + THEN + printf ("Shift Right: ") ; + DumpSet (src, highbit) + END ; + ShiftCount := (-ShiftCount) MOD VAL (INTEGER, (highbit + 1)) ; + ShiftRight (dest, src, highbit, ShiftCount) ; + IF EnableDebugging + THEN + printf (" Result of shift right: ") ; + DumpSet (dest, highbit) + END + ELSE + IF memcpy (ADR (dest), ADR (src), (HIGH (dest) + 1) * SIZE (BYTE)) = NIL + THEN + END + END +END Shift ; + + +(* + ArithShift - dest := ArithShift (dest, ShiftCount, carry). This is an + arithmetic shift all the new bit values will + be set to carry. +*) + +PROCEDURE ArithShiftLeft (VAR dest: ARRAY OF BYTE; + highbit: CARDINAL; ShiftCount: CARDINAL; + carry: BOOLEAN) ; +BEGIN + WHILE ShiftCount > 0 DO + ArithShiftLeftBit (dest, highbit, carry) ; + DEC (ShiftCount) + END +END ArithShiftLeft ; + + +(* + ArithShiftLeftBit - shift set left by one bit. Carry will appear at + bit position 0. Any unused bits on the high byte + are unaffected. +*) + +PROCEDURE ArithShiftLeftBit (VAR dest: ARRAY OF BYTE; highbit: CARDINAL; + carry: BOOLEAN) ; +CONST + MSB = TBITSIZE (BYTE) - 1 ; +VAR + topbit, + i, + high : CARDINAL ; + next : BOOLEAN ; + mask, + unused, + setb : BYTESET ; +BEGIN + IF EnableDebugging + THEN + printf ("ArithShiftLeft enter\n"); + DumpSet (dest, highbit) + END ; + + high := HIGH (dest) ; + (* We ripple through the bytes 0..high-1, propagating local carry between + bytes. *) + i := 0 ; + WHILE i < high DO + setb := dest[i] ; + next := MSB IN setb ; + setb := SHIFT (setb, 1) ; (* Shift left. *) + IF carry + THEN + INCL (setb, 0) (* Set bit 0. *) + END ; + dest[i] := setb ; + carry := next ; + IF EnableDebugging + THEN + printf ("ArithShiftLeft shifted byte dest[%d]\n", i); + DumpSet (dest, highbit) + END ; + INC (i) + END ; + (* Last byte special case as there may be some unused bits which must be + preserved. *) + setb := dest[high] ; + unused := BYTESET {} ; (* Will contain all top unused bits of dest[high]. *) + mask := - BYTESET {} ; + topbit := (highbit+1) MOD TBITSIZE (BYTE) ; + WHILE topbit # 0 DO + EXCL (mask, topbit) ; + IF topbit IN setb + THEN + EXCL (setb, topbit) ; + INCL (unused, topbit) + END ; + topbit := (topbit+1) MOD TBITSIZE (BYTE) + END ; + setb := SHIFT (setb, 1) ; (* Left shift. *) + IF carry + THEN + INCL (setb, 0) (* Set bit 0. *) + END ; + setb := setb * mask ; (* Remove all unused bits. *) + setb := setb + unused ; (* Restore original unused bits. *) + dest[high] := setb ; + IF EnableDebugging + THEN + printf ("ArithShiftLeft shifted byte dest[%d]\n", high); + DumpSet (dest, highbit) + END +END ArithShiftLeftBit ; + + +(* + ArithShiftRight - dest := ArithShiftRight (dest, ShiftCount, carry). + This is an arithmetic shift all the new bit values + will be set to carry. +*) + +PROCEDURE ArithShiftRight (VAR dest: ARRAY OF BYTE; + highbit: CARDINAL; ShiftCount: CARDINAL; + carry: BOOLEAN) ; +BEGIN + WHILE ShiftCount > 0 DO + ArithShiftRightBit (dest, highbit, carry) ; + DEC (ShiftCount) + END +END ArithShiftRight ; + + +(* + ArithShiftRightBit - shift set right by one bit and place carry in the + top most bit. +*) + +PROCEDURE ArithShiftRightBit (VAR dest: ARRAY OF BYTE; highbit: CARDINAL; + carry: BOOLEAN) ; +CONST + MSB = TBITSIZE (BYTE) - 1 ; +VAR + topbit, + i, + high : CARDINAL ; + prev, + next : BOOLEAN ; + mask, + unused, + setb : BYTESET ; +BEGIN + high := HIGH (dest) ; + (* Clear any unused bits in the highest byte, but save them into unused. *) + setb := dest[high] ; + unused := BYTESET {} ; + topbit := (highbit+1) MOD TBITSIZE (BYTE) ; + mask := - BYTESET {} ; + WHILE topbit # 0 DO + EXCL (mask, topbit) ; + IF topbit IN setb + THEN + EXCL (setb, topbit) ; + INCL (unused, topbit) + END ; + topbit := (topbit+1) MOD TBITSIZE (BYTE) + END ; + (* Start at the top and work down to byte 0. *) + setb := setb * mask ; (* Ignore unused bits. *) + next := 0 IN setb ; (* Next carry. *) + setb := SHIFT (setb, -1) ; (* Shift right by 1 bit. *) + IF carry + THEN + INCL (setb, highbit MOD TBITSIZE (BYTE)) + END ; + dest[high] := setb + unused ; (* First byte is a special case as we + have to preserve the unused bits. *) + (* Now we ripple through the remaining bytes, propagating local + carry between bytes. *) + i := high ; + WHILE i > 0 DO + prev := next ; + DEC (i) ; + setb := dest[i] ; + next := 0 IN setb ; + setb := SHIFT (setb, -1) ; + IF prev + THEN + INCL (setb, MSB) + END ; + dest[i] := setb + END +END ArithShiftRightBit ; + + +(* + ArithShift - dest := ArithShift (dest, ShiftCount, carry). This is an + arithmetic shift all the new bit values will + be set to carry. +*) + +PROCEDURE ArithShift (VAR dest: ARRAY OF BYTE; + highbit: CARDINAL; ShiftCount: INTEGER; + carry: BOOLEAN) ; +BEGIN + IF EnableDebugging + THEN + printf ("Arith enter\n"); + DumpSet (dest, highbit) + END ; + IF ShiftCount > 0 + THEN + ShiftCount := ShiftCount MOD VAL (INTEGER, (highbit + 1)) ; + ArithShiftLeft (dest, highbit, ShiftCount, carry) + ELSIF ShiftCount < 0 + THEN + ShiftCount := (-ShiftCount) MOD VAL (INTEGER, (highbit + 1)) ; + ArithShiftRight (dest, highbit, ShiftCount, carry) + END ; + IF EnableDebugging + THEN + printf ("Arith exit\n"); + DumpSet (dest, highbit) + END +END ArithShift ; + + +(* + Rotate - is a runtime procedure whose job is to implement + the ROTATE procedure of ISO SYSTEM. +*) + +PROCEDURE Rotate (VAR dest: ARRAY OF BYTE; src: ARRAY OF BYTE; + highbit: CARDINAL; RotateCount: INTEGER) ; +BEGIN + IF EnableDebugging + THEN + printf ("Rotate enter\n"); + DumpSet (src, highbit) + END ; + IF RotateCount > 0 + THEN + RotateCount := RotateCount MOD VAL (INTEGER, highbit + 1) + ELSIF RotateCount < 0 + THEN + RotateCount := -VAL (INTEGER, VAL (CARDINAL, -RotateCount) MOD (highbit + 1)) + END ; + IF RotateCount > 0 + THEN + RotateLeft (dest, src, highbit, RotateCount) + ELSIF RotateCount < 0 + THEN + RotateRight (dest, src, highbit, -RotateCount) + ELSE + (* No rotate required, but we must copy source to dest. *) + IF memcpy (ADR (dest), ADR (src), (HIGH (dest) + 1) * SIZE (BYTE)) = NIL + THEN + END + END ; + IF EnableDebugging + THEN + printf ("Rotate exit\n"); + DumpSet (dest, highbit) + END +END Rotate ; + + +(* + RotateLeft - performs the rotate left for a multi word set. +*) + +PROCEDURE RotateLeft (VAR dest: ARRAY OF BYTE; src: ARRAY OF BYTE; + highbit: CARDINAL; RotateCount: CARDINAL) ; +VAR + bit, carry : BOOLEAN ; + count, + high, + highplus1, + highbitplus1, + fromIdx, toIdx: CARDINAL ; +BEGIN + IF EnableDebugging + THEN + printf ("RotateLeft enter\n"); + DumpSet (src, highbit) + END ; + + (* Copy the contents rotating on byte granularity, then + arithmetically shift the remaining number of bits. *) + high := HIGH (dest) ; + fromIdx := 0 ; + highplus1 := high + 1 ; + highbitplus1 := highbit + 1 ; + toIdx := RotateCount DIV TBITSIZE (BYTE) ; (* Byte level granularity. *) + REPEAT + dest[toIdx] := src[fromIdx] ; + IF EnableDebugging + THEN + printf ("RotateLeft after partial byte movement: dest[%d] := src[%d]\n", + toIdx, fromIdx); + DumpSet (dest, highbit) + END ; + fromIdx := (fromIdx + 1) MOD highplus1 ; + toIdx := (toIdx + 1) MOD highplus1 ; + UNTIL fromIdx = 0 ; + + IF EnableDebugging + THEN + printf ("RotateLeft after byte placement\n"); + DumpSet (dest, highbit) + END ; + + (* Now ArithShiftLeft the remainder number of bits. *) + count := RotateCount MOD (TBITSIZE (BYTE)) ; + WHILE count > 0 DO + (* Get last bit. *) + bit := (highbit MOD TBITSIZE (BYTE)) IN BYTESET (dest[high]) ; + (* Shift everything left wards and the last bit goes to bit + position 0. *) + ArithShiftLeft (dest, highbit, 1, bit) ; + DEC (count) + END ; + IF EnableDebugging + THEN + printf ("RotateLeft after bit shifting final placement\n"); + DumpSet (dest, highbit) + END +END RotateLeft ; + + +(* + RotateRight - performs the rotate right for a multi word set. +*) + +PROCEDURE RotateRight (VAR dest: ARRAY OF BYTE; src: ARRAY OF BYTE; + highbit: CARDINAL; RotateCount: CARDINAL) ; +BEGIN + RotateLeft (dest, src, highbit, (highbit + 1) - RotateCount) +END RotateRight ; + + +(* + Less - performs the set comparison for a wide set. + Less returns ProperSubset (left, right, highbit). +*) + +PROCEDURE Less (VAR left, right: ARRAY OF BYTE; + highbit: CARDINAL) : BOOLEAN ; + +BEGIN + RETURN ProperSubset (left, right, highbit) +END Less ; + + +(* + LessEqu - performs the set comparison for a wide set. + LessEqu returns Equal (left, right, highbit) OR + ProperSubset (left, right, highbit). +*) + +PROCEDURE LessEqu (VAR left, right: ARRAY OF BYTE; + highbit: CARDINAL) : BOOLEAN ; +BEGIN + RETURN Equal (left, right, highbit) OR + ProperSubset (left, right, highbit) +END LessEqu ; + + +(* + Gre - performs the set comparison for a wide set. + Gre returns the result of + ProperSuperet (left, right, highbit). +*) + +PROCEDURE Gre (VAR left, right: ARRAY OF BYTE; + highbit: CARDINAL) : BOOLEAN ; +BEGIN + RETURN ProperSuperset (left, right, highbit) +END Gre ; + + +(* + GreEqu - performs the set comparison for a wide set. + GreEqu returns Equal (left, right, highbit) OR + ProperSuperet (left, right, highbit). +*) + +PROCEDURE GreEqu (VAR left, right: ARRAY OF BYTE; + highbit: CARDINAL) : BOOLEAN ; +BEGIN + RETURN Equal (left, right, highbit) OR + ProperSuperset (left, right, highbit) +END GreEqu ; + + +(* + ProperSubset - return TRUE if left is a proper subset of right. + If true the left set will have at least one element + less than set right. +*) + +PROCEDURE ProperSubset (VAR left, right: ARRAY OF BYTE; + highbit: CARDINAL) : BOOLEAN ; +VAR + diffbits, + diffright, + diffleft : BYTESET ; + rightmore: BOOLEAN ; + i, + bit, + high, + lastbit: CARDINAL ; + lptr, + rptr : PtrToByteset ; +BEGIN + high := HIGH (left) ; + lptr := ADR (left) ; + rptr := ADR (right) ; + i := 0 ; + rightmore := FALSE ; + WHILE i < high DO + diffbits := lptr^ / rptr^ ; (* / in M2 is xor. *) + diffright := diffbits * rptr^ ; (* * in M2 is and. *) + IF diffright # BYTESET {} + THEN + rightmore := TRUE + END ; + diffleft := diffbits * lptr^ ; + IF diffleft # BYTESET {} + THEN + (* Not a subset, so we early return. *) + RETURN FALSE + END ; + INC (rptr) ; + INC (lptr) ; + INC (i) + END ; + lastbit := highbit MOD TBITSIZE (BYTE) ; + IF lastbit > 0 + THEN + FOR bit := 0 TO lastbit DO + IF (NOT (bit IN lptr^)) AND (bit IN rptr^) + THEN + rightmore := TRUE + ELSIF (bit IN lptr^) AND (NOT (bit IN rptr^)) + THEN + (* Not a subset, so we early return. *) + RETURN FALSE + END + END + END ; + RETURN rightmore +END ProperSubset ; + + +(* + ProperSuperset - return TRUE if left is a proper superset of right. + If true the left set will have at least one element + more than set right. +*) + +PROCEDURE ProperSuperset (VAR left, right: ARRAY OF BYTE; + highbit: CARDINAL) : BOOLEAN ; +VAR + diffbits, + diffleft, + diffright: BYTESET ; + leftmore : BOOLEAN ; + i, + bit, + high, + lastbit : CARDINAL ; + lptr, + rptr : PtrToByteset ; +BEGIN + high := HIGH (left) ; + lptr := ADR (left) ; + rptr := ADR (right) ; + i := 0 ; + leftmore := FALSE ; + WHILE i < high DO + diffbits := lptr^ / rptr^ ; (* / in M2 is xor. *) + diffleft := diffbits * lptr^ ; (* * in M2 is and. *) + IF diffleft # BYTESET {} + THEN + leftmore := TRUE + END ; + diffright := diffbits * rptr^ ; + IF diffright # BYTESET {} + THEN + (* Not a superset, so we early return. *) + RETURN FALSE + END ; + INC (rptr) ; + INC (lptr) ; + INC (i) + END ; + lastbit := highbit MOD TBITSIZE (BYTE) ; + IF lastbit > 0 + THEN + FOR bit := 0 TO lastbit DO + IF (bit IN lptr^) AND (NOT (bit IN rptr^)) + THEN + leftmore := TRUE + ELSIF (NOT (bit IN lptr^)) AND (bit IN rptr^) + THEN + (* Not a superset, so we early return. *) + RETURN FALSE + END + END + END ; + RETURN leftmore +END ProperSuperset ; + + +(* + LogicalDifference - build a logical difference expression tree. + dest := left and (not right). +*) + +PROCEDURE LogicalDifference (VAR dest: ARRAY OF BYTE; + left, right: ARRAY OF BYTE; + highbit: CARDINAL) ; +BEGIN + Not (right, right, highbit) ; + And (dest, left, right, highbit) +END LogicalDifference ; + + +(* + SymmetricDifference - build a logical difference expression tree. + dest := left xor right. +*) + +PROCEDURE SymmetricDifference (VAR dest: ARRAY OF BYTE; + left, right: ARRAY OF BYTE; + highbit: CARDINAL) ; +VAR + i, + bit, + high, + lastbit: CARDINAL ; + byteset: BYTESET ; +BEGIN + high := HIGH (dest) ; + i := 0 ; + WHILE i < high DO + dest[i] := BYTESET (left[i]) / BYTESET (right[i]) ; + INC (i) + END ; + IF i = high + THEN + lastbit := highbit MOD TBITSIZE (BYTE) ; + IF lastbit = 0 + THEN + dest[i] := BYTESET (left[i]) / BYTESET (right[i]) + ELSE + byteset := dest[i] ; + FOR bit := 0 TO lastbit DO + IF (bit IN BYTESET (left[i])) = (bit IN BYTESET (right[i])) + THEN + EXCL (byteset, bit) + ELSE + INCL (byteset, bit) + END + END ; + dest[i] := byteset + END + ELSE + HALT + END +END SymmetricDifference ; + + +(* + AssignBits - copy bits [0..highbit] from src to dest. +*) + +PROCEDURE AssignBits (VAR dest: BYTESET; src: BYTESET; highbit: CARDINAL) ; +VAR + bit, + lastbit: CARDINAL ; +BEGIN + (* Last byte. *) + lastbit := highbit MOD TBITSIZE (BYTE) ; + IF lastbit = 0 + THEN + (* Copy all bits. *) + dest := src + ELSE + (* Copy only required bits. *) + FOR bit := 0 TO lastbit DO + IF bit IN src + THEN + INCL (dest, bit) + ELSE + EXCL (dest, bit) + END + END + END +END AssignBits ; + + +(* + Assign - +*) + +PROCEDURE Assign (VAR dest: ARRAY OF BYTE; src: ARRAY OF BYTE; highbit: CARDINAL) ; +VAR + i, high: CARDINAL ; +BEGIN + high := HIGH (dest) ; + i := 0 ; + WHILE i < high DO + dest[i] := src[i] ; + INC (i) + END ; + AssignBits (dest[i], src[i], highbit) +END Assign ; + + +END M2WIDESET. diff --git a/gcc/m2/gm2-libs/SYSTEM.def b/gcc/m2/gm2-libs/SYSTEM.def index 1b2949eebb0b..9d043999cfe4 100644 --- a/gcc/m2/gm2-libs/SYSTEM.def +++ b/gcc/m2/gm2-libs/SYSTEM.def @@ -111,87 +111,4 @@ PROCEDURE TBITSIZE () : CARDINAL ; *) *) -(* The following procedures are invoked by GNU Modula-2 to - shift non word sized set types. They are not strictly part - of the core PIM Modula-2, however they are used - to implement the SHIFT procedure defined above, - which are in turn used by the Logitech compatible libraries. - - Users will access these procedures by using the procedure - SHIFT above and GNU Modula-2 will map SHIFT onto one of - the following procedures. -*) - -(* - ShiftVal - is a runtime procedure whose job is to implement - the SHIFT procedure of ISO SYSTEM. GNU Modula-2 will - inline a SHIFT of a single WORD sized set and will only - call this routine for larger sets. -*) - -PROCEDURE ShiftVal (VAR s, d: ARRAY OF BITSET; - SetSizeInBits: CARDINAL; - ShiftCount: INTEGER) ; - - -(* - ShiftLeft - performs the shift left for a multi word set. - This procedure might be called by the back end of - GNU Modula-2 depending whether amount is known at - compile time. -*) - -PROCEDURE ShiftLeft (VAR s, d: ARRAY OF BITSET; - SetSizeInBits: CARDINAL; - ShiftCount: CARDINAL) ; - -(* - ShiftRight - performs the shift left for a multi word set. - This procedure might be called by the back end of - GNU Modula-2 depending whether amount is known at - compile time. -*) - -PROCEDURE ShiftRight (VAR s, d: ARRAY OF BITSET; - SetSizeInBits: CARDINAL; - ShiftCount: CARDINAL) ; - - -(* - RotateVal - is a runtime procedure whose job is to implement - the ROTATE procedure of ISO SYSTEM. GNU Modula-2 will - inline a ROTATE of a single WORD (or less) - sized set and will only call this routine for larger - sets. -*) - -PROCEDURE RotateVal (VAR s, d: ARRAY OF BITSET; - SetSizeInBits: CARDINAL; - RotateCount: INTEGER) ; - - -(* - RotateLeft - performs the rotate left for a multi word set. - This procedure might be called by the back end of - GNU Modula-2 depending whether amount is known at - compile time. -*) - -PROCEDURE RotateLeft (VAR s, d: ARRAY OF BITSET; - SetSizeInBits: CARDINAL; - RotateCount: CARDINAL) ; - - -(* - RotateRight - performs the rotate right for a multi word set. - This procedure might be called by the back end of - GNU Modula-2 depending whether amount is known at - compile time. -*) - -PROCEDURE RotateRight (VAR s, d: ARRAY OF BITSET; - SetSizeInBits: CARDINAL; - RotateCount: CARDINAL) ; - - END SYSTEM. diff --git a/gcc/m2/gm2-libs/SYSTEM.mod b/gcc/m2/gm2-libs/SYSTEM.mod index 72b22cdf06db..7ee5a043dc2d 100644 --- a/gcc/m2/gm2-libs/SYSTEM.mod +++ b/gcc/m2/gm2-libs/SYSTEM.mod @@ -26,248 +26,4 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see IMPLEMENTATION MODULE SYSTEM ; -FROM libc IMPORT memcpy, memset ; - -CONST - BitsPerBitset = MAX(BITSET)+1 ; - - -(* - Max - returns the maximum of a and b. -*) - -PROCEDURE Max (a, b: CARDINAL) : CARDINAL ; -BEGIN - IF a>b - THEN - RETURN( a ) - ELSE - RETURN( b ) - END -END Max ; - - -(* - Min - returns the minimum of a and b. -*) - -PROCEDURE Min (a, b: CARDINAL) : CARDINAL ; -BEGIN - IF a0 - THEN - ShiftCount := ShiftCount MOD VAL(INTEGER, SetSizeInBits) ; - ShiftLeft(s, d, SetSizeInBits, ShiftCount) - ELSIF ShiftCount<0 - THEN - ShiftCount := (-ShiftCount) MOD VAL(INTEGER, SetSizeInBits) ; - ShiftRight(s, d, SetSizeInBits, ShiftCount) - ELSE - a := memcpy(ADR(d), ADR(s), (HIGH(d)+1)*SIZE(BITSET)) - END -END ShiftVal ; - - -(* - ShiftLeft - performs the shift left for a multi word set. - This procedure might be called by the back end of - GNU Modula-2 depending whether amount is known at compile - time. -*) - -PROCEDURE ShiftLeft (VAR s, d: ARRAY OF BITSET; - SetSizeInBits: CARDINAL; - ShiftCount: CARDINAL) ; -VAR - lo, hi : BITSET ; - i, j, h: CARDINAL ; - a : ADDRESS ; -BEGIN - h := HIGH(s)+1 ; - IF ShiftCount MOD BitsPerBitset=0 - THEN - i := ShiftCount DIV BitsPerBitset ; - a := ADR(d[i]) ; - a := memcpy(a, ADR(s), (h-i)*SIZE(BITSET)) ; - a := memset(ADR(d), 0, i*SIZE(BITSET)) - ELSE - i := h ; - WHILE i>0 DO - DEC(i) ; - lo := SHIFT(s[i], ShiftCount MOD BitsPerBitset) ; - hi := SHIFT(s[i], -(BitsPerBitset - (ShiftCount MOD BitsPerBitset))) ; - d[i] := BITSET{} ; - j := i + ShiftCount DIV BitsPerBitset ; - IF j=0 - THEN - d[j] := d[j] + hi ; - DEC(j) ; - IF j>=0 - THEN - d[j] := d[j] + lo - END - END ; - INC(i) - END - END -END ShiftRight ; - - -(* - RotateVal - is a runtime procedure whose job is to implement - the ROTATE procedure of ISO SYSTEM. GNU Modula-2 will - inline a ROTATE of a single WORD (or less) - sized set and will only call this routine for larger sets. -*) - -PROCEDURE RotateVal (VAR s, d: ARRAY OF BITSET; - SetSizeInBits: CARDINAL; - RotateCount: INTEGER) ; -VAR - a: ADDRESS ; -BEGIN - IF RotateCount>0 - THEN - RotateCount := RotateCount MOD VAL(INTEGER, SetSizeInBits) - ELSIF RotateCount<0 - THEN - RotateCount := -VAL(INTEGER, VAL(CARDINAL, -RotateCount) MOD SetSizeInBits) - END ; - IF RotateCount>0 - THEN - RotateLeft(s, d, SetSizeInBits, RotateCount) - ELSIF RotateCount<0 - THEN - RotateRight(s, d, SetSizeInBits, -RotateCount) - ELSE - (* no rotate required, but we must copy source to dest. *) - a := memcpy(ADR(d), ADR(s), (HIGH(d)+1)*SIZE(BITSET)) - END -END RotateVal ; - - -(* - RotateLeft - performs the rotate left for a multi word set. - This procedure might be called by the back end of - GNU Modula-2 depending whether amount is known at compile - time. -*) - -PROCEDURE RotateLeft (VAR s, d: ARRAY OF BITSET; - SetSizeInBits: CARDINAL; - RotateCount: CARDINAL) ; -VAR - lo, hi : BITSET ; - b, i, j, h: CARDINAL ; -BEGIN - h := HIGH(s) ; - (* firstly we set d := {} *) - i := 0 ; - WHILE i<=h DO - d[i] := BITSET{} ; - INC(i) - END ; - i := h+1 ; - RotateCount := RotateCount MOD SetSizeInBits ; - b := SetSizeInBits MOD BitsPerBitset ; - IF b=0 - THEN - b := BitsPerBitset - END ; - WHILE i>0 DO - DEC(i) ; - lo := SHIFT(s[i], RotateCount MOD BitsPerBitset) ; - hi := SHIFT(s[i], -(b - (RotateCount MOD BitsPerBitset))) ; - j := ((i*BitsPerBitset + RotateCount) MOD - SetSizeInBits) DIV BitsPerBitset ; - d[j] := d[j] + lo ; - j := (((i+1)*BitsPerBitset + RotateCount) MOD - SetSizeInBits) DIV BitsPerBitset ; - d[j] := d[j] + hi ; - b := BitsPerBitset - END -END RotateLeft ; - - -(* - RotateRight - performs the rotate right for a multi word set. - This procedure might be called by the back end of - GNU Modula-2 depending whether amount is known at compile - time. -*) - -PROCEDURE RotateRight (VAR s, d: ARRAY OF BITSET; - SetSizeInBits: CARDINAL; - RotateCount: CARDINAL) ; -BEGIN - RotateLeft(s, d, SetSizeInBits, SetSizeInBits-RotateCount) -END RotateRight ; - - END SYSTEM. diff --git a/gcc/m2/gm2-libs/SysStorage.def b/gcc/m2/gm2-libs/SysStorage.def index 1d2baacec965..4a27495c6c0b 100644 --- a/gcc/m2/gm2-libs/SysStorage.def +++ b/gcc/m2/gm2-libs/SysStorage.def @@ -28,7 +28,9 @@ DEFINITION MODULE SysStorage ; (* Provides dynamic allocation for the system components. This allows the application to use the traditional Storage module - which can be handled differently. *) + which can be handled differently. + ALLOCATE and DEALLOCATE will call M2Diagnostic to adjust the + global tracking of the application heap. *) FROM SYSTEM IMPORT ADDRESS ; EXPORT QUALIFIED ALLOCATE, DEALLOCATE, REALLOCATE, Available, Init ; @@ -56,6 +58,11 @@ PROCEDURE DEALLOCATE (VAR a: ADDRESS ; size: CARDINAL) ; is called, or alternatively it should have already been initialized by ALLOCATE. The allocated storage is resized accordingly. + Note that this procedure does not adjust the + M2Diagnostic.TotalHeap it is expected that the caller + must track the reallocation differences and call + M2Diagnostic.TotalHeapIncr or M2Diagnostic.TotalHeapDecr + as appropriate. *) PROCEDURE REALLOCATE (VAR a: ADDRESS; size: CARDINAL) ; diff --git a/gcc/m2/gm2-libs/SysStorage.mod b/gcc/m2/gm2-libs/SysStorage.mod index 4558b579fabc..3f9fab6d6978 100644 --- a/gcc/m2/gm2-libs/SysStorage.mod +++ b/gcc/m2/gm2-libs/SysStorage.mod @@ -30,6 +30,8 @@ FROM libc IMPORT malloc, free, realloc, memset, getenv, printf ; FROM Debug IMPORT Halt ; FROM SYSTEM IMPORT ADR ; +IMPORT M2Diagnostic ; + CONST enableDeallocation = TRUE ; @@ -55,7 +57,8 @@ BEGIN printf (" %d SysStorage.ALLOCATE (0x%x, %d bytes)\n", callno, a, size) ; printf (" %ld %d\n", a, size); INC (callno) - END + END ; + M2Diagnostic.TotalHeapIncr (size) END ALLOCATE ; @@ -87,6 +90,7 @@ BEGIN END ; free (a) END ; + M2Diagnostic.TotalHeapDecr (size) ; a := NIL END DEALLOCATE ; @@ -97,6 +101,11 @@ END DEALLOCATE ; is called, or alternatively it should have already been initialized by ALLOCATE. The allocated storage is resized accordingly. + Note that this procedure does not adjust the + M2Diagnostic.TotalHeap it is expected that the caller + must track the reallocation differences and call + M2Diagnostic.TotalHeapIncr or M2Diagnostic.TotalHeapDecr + as appropriate. *) PROCEDURE REALLOCATE (VAR a: ADDRESS; size: CARDINAL) ; diff --git a/gcc/m2/init/ppginit b/gcc/m2/init/ppginit index 5094c4e2364b..33014b33018c 100644 --- a/gcc/m2/init/ppginit +++ b/gcc/m2/init/ppginit @@ -25,6 +25,7 @@ RTExceptions M2EXCEPTION M2RTS SysExceptions +M2Diagnostic StrLib errno termios @@ -45,6 +46,7 @@ UnixArgs FIO SFIO StrCase +StringConvert bnflex Lists Args diff --git a/gcc/m2/lang.opt b/gcc/m2/lang.opt index 2aea4ccb77eb..dc6abb1b6778 100644 --- a/gcc/m2/lang.opt +++ b/gcc/m2/lang.opt @@ -206,6 +206,10 @@ fm2-whole-program Modula-2 compile all implementation modules and program module at once +fmem-report +Modula-2 +; Documented in c.opt + fmod= Modula-2 Joined recognize the specified suffix as implementation and module filenames @@ -290,6 +294,10 @@ fswig Modula-2 create a swig interface file for the module +ftime-report +Modula-2 +; Documented in c.opt + funbounded-by-reference Modula-2 optimize non var unbounded parameters by passing it by reference, providing it is not written to within the callee procedure. @@ -302,6 +310,10 @@ fversion Modula-2 ; Documented in common.opt +fwideset +Modula-2 +link against the module M2WIDESET to perform the wideset operator, the negative version of this option will generate a warning if this module is required + fwholediv Modula-2 turns on all division and modulus by zero checking for ordinal values diff --git a/gcc/m2/lang.opt.urls b/gcc/m2/lang.opt.urls index dc1dbf06371a..1abc1685ea32 100644 --- a/gcc/m2/lang.opt.urls +++ b/gcc/m2/lang.opt.urls @@ -1,5 +1,11 @@ ; Autogenerated by regenerate-opt-urls.py from gcc/m2/lang.opt and generated HTML +fmem-report +UrlSuffix(gcc/Developer-Options.html#index-fmem-report) + +ftime-report +UrlSuffix(gcc/Developer-Options.html#index-ftime-report) + fversion LangUrlSuffix_D(gdc/Runtime-Options.html#index-fversion) diff --git a/gcc/m2/mc-boot/GM2Diagnostic.cc b/gcc/m2/mc-boot/GM2Diagnostic.cc new file mode 100644 index 000000000000..ee26359eee79 --- /dev/null +++ b/gcc/m2/mc-boot/GM2Diagnostic.cc @@ -0,0 +1,1484 @@ +/* do not edit automatically generated by mc from M2Diagnostic. */ +/* M2Diagnotic provides memory and time diagnosics to the user. + +Copyright (C) 2024 Free Software Foundation, Inc. +Contributed by Gaius Mulley . + +This file is part of GNU Modula-2. + +GNU Modula-2 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. + +GNU Modula-2 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 GNU Modula-2; see the file COPYING3. If not see +. */ + +#include "config.h" +#include "system.h" +#include +# if !defined (PROC_D) +# define PROC_D + typedef void (*PROC_t) (void); + typedef struct { PROC_t proc; } PROC; +# endif + +# if !defined (TRUE) +# define TRUE (1==1) +# endif + +# if !defined (FALSE) +# define FALSE (1==0) +# endif + +# include "GStorage.h" +# include "Gmcrts.h" +#if defined(__cplusplus) +# undef NULL +# define NULL 0 +#endif +#define _M2Diagnostic_H +#define _M2Diagnostic_C + +# include "GASCII.h" +# include "GSelective.h" +# include "GStringConvert.h" +# include "GStorage.h" +# include "GDynamicStrings.h" +# include "GM2RTS.h" + +typedef struct M2Diagnostic_DiagProc_p M2Diagnostic_DiagProc; + +# define EnableDiagnostics true +# define DefaultTimeEnableValue false +# define DefaultMemEnableValue false +# define MaxParam 4 +# define MICROSEC 100000 +typedef struct M2Diagnostic_timeDiag_r M2Diagnostic_timeDiag; + +typedef struct M2Diagnostic_memDiag_r M2Diagnostic_memDiag; + +typedef struct M2Diagnostic__T1_r M2Diagnostic__T1; + +typedef struct M2Diagnostic__T2_a M2Diagnostic__T2; + +typedef enum {M2Diagnostic_timediag, M2Diagnostic_memdiag} M2Diagnostic_DiagType; + +# define kilo 1024 +# define mega (kilo*kilo) +# define giga (mega*kilo) +typedef M2Diagnostic__T1 *M2Diagnostic_Diagnostic; + +typedef void (*M2Diagnostic_DiagProc_t) (M2Diagnostic_Diagnostic); +struct M2Diagnostic_DiagProc_p { M2Diagnostic_DiagProc_t proc; }; + +struct M2Diagnostic_timeDiag_r { + unsigned int count; + Selective_Timeval total; + Selective_Timeval enter; + Selective_Timeval exit_; + }; + +struct M2Diagnostic__T2_a { long unsigned int array[MaxParam-1+1]; }; +struct M2Diagnostic_memDiag_r { + M2Diagnostic__T2 param; + }; + +struct M2Diagnostic__T1_r { + DynamicStrings_String name; + DynamicStrings_String format; + bool enable; + M2Diagnostic_Diagnostic next; + M2Diagnostic_DiagType type; /* case tag */ + union { + M2Diagnostic_timeDiag tdiag; + M2Diagnostic_memDiag mdiag; + }; + }; + +static DynamicStrings_String Output; +static long unsigned int TotalHeap; +static M2Diagnostic_Diagnostic Head; +static bool DefaultTimeEnable; +static bool DefaultMemEnable; +static Selective_Timeval StartTime; +static Selective_Timeval TotalTime; + +/* + InitTimeDiagnostic - create and return a time diagnostic. + The format string can be free form and may + contain {1T}, {1C} or {1P}. + {1T} will contain the time and + {1C} the count of the number of times the + code enters the time diagnostic code region. + {1P} generates the time as a percentage. + {0T} is the total time for the application. + {{ is rendered as a single {. +*/ + +extern "C" M2Diagnostic_Diagnostic M2Diagnostic_InitTimeDiagnostic (const char *name_, unsigned int _name_high, const char *format_, unsigned int _format_high); + +/* + EnterDiagnostic - attribute all execution time from now to TimeDiag. +*/ + +extern "C" void M2Diagnostic_EnterDiagnostic (M2Diagnostic_Diagnostic TimeDiag); + +/* + ExitDiagnostic - stop attributing execution time to TimeDiag. +*/ + +extern "C" void M2Diagnostic_ExitDiagnostic (M2Diagnostic_Diagnostic TimeDiag); + +/* + InitMemDiagnostic - create and return a memory diagnostic. + The format string can be free form and may + contain {1M} {1d} {1x} {1P}. + {1M} is replaced by the value of the first parameter + with memory size units. + {1d} unsigned decimal. {1x} unsigned hexadecimal. + {0M} is the global allocation (Storage.mod:ALLOCATE). + {1P} is the percentage of param 1 relative + to global memory. +*/ + +extern "C" M2Diagnostic_Diagnostic M2Diagnostic_InitMemDiagnostic (const char *name_, unsigned int _name_high, const char *format_, unsigned int _format_high); + +/* + MemIncr - allow the appropriate parameter to be incremented. + All parameters are initially set to zero and are stored + as LONGCARD. +*/ + +extern "C" void M2Diagnostic_MemIncr (M2Diagnostic_Diagnostic MemDiag, unsigned int paramno, unsigned int incr); + +/* + MemDecr - allow the appropriate parameter to be decremented. + All parameters are initially set to zero and are stored + as LONGCARD. +*/ + +extern "C" void M2Diagnostic_MemDecr (M2Diagnostic_Diagnostic MemDiag, unsigned int paramno, unsigned int decr); + +/* + MemSet - allow the appropriate parameter to be set to value. + All parameters are initially set to zero. +*/ + +extern "C" void M2Diagnostic_MemSet (M2Diagnostic_Diagnostic MemDiag, unsigned int paramno, unsigned int value); + +/* + TotalHeapIncr - increments the total heap used. +*/ + +extern "C" void M2Diagnostic_TotalHeapIncr (unsigned int incr); + +/* + TotalHeapDecr - decrements the total heap used. +*/ + +extern "C" void M2Diagnostic_TotalHeapDecr (unsigned int incr); + +/* + SetEnable - set the enable flag in Diag to value. +*/ + +extern "C" void M2Diagnostic_SetEnable (M2Diagnostic_Diagnostic Diag, bool value); + +/* + Lookup - returns the Diagnostic containing name or NIL + if it does not exist. +*/ + +extern "C" M2Diagnostic_Diagnostic M2Diagnostic_Lookup (const char *name_, unsigned int _name_high); + +/* + GetName - returns the name of Diag. +*/ + +extern "C" DynamicStrings_String M2Diagnostic_GetName (M2Diagnostic_Diagnostic Diag); + +/* + ForeachDiagDo - for diag in global diag list do + dp (diag); + end +*/ + +extern "C" void M2Diagnostic_ForeachDiagDo (M2Diagnostic_DiagProc dp); + +/* + SetDefaultConfig - force the Diag enable flag to the + time or mem global default. +*/ + +extern "C" void M2Diagnostic_SetDefaultConfig (M2Diagnostic_Diagnostic Diag); + +/* + Configure - will turn on or off all the memory or time + instrumentation diagnostics and set the defaults + time and mem values. +*/ + +extern "C" void M2Diagnostic_Configure (bool time_, bool mem); + +/* + Generate - return a string containing the output from + all the diagnostics enabled. +*/ + +extern "C" DynamicStrings_String M2Diagnostic_Generate (void); + +/* + Assert - halt if b is false. +*/ + +static void Assert (bool b); + +/* + Error - generate a error simple message with indicating the + format specifier ch is incorrect. +*/ + +static void Error (const char *msg_, unsigned int _msg_high, char ch); + +/* + Accumulate - total := total + exit - enter +*/ + +static void Accumulate (Selective_Timeval total, Selective_Timeval enter, Selective_Timeval exit_); + +/* + IncTime - left := left + right. +*/ + +static void IncTime (Selective_Timeval left, Selective_Timeval right); + +/* + DecTime - left := left - right. +*/ + +static void DecTime (Selective_Timeval left, Selective_Timeval right); + +/* + CheckParam - +*/ + +static void CheckParam (unsigned int paramno); + +/* + CreateStartTime - +*/ + +static void CreateStartTime (void); + +/* + UpdateTotalTime - +*/ + +static void UpdateTotalTime (void); + +/* + GetTimeParam - a paramno of 0 will return the total time so far + whereas a paramno > 0 will return the time associated + with Diag. +*/ + +static Selective_Timeval GetTimeParam (M2Diagnostic_Diagnostic Diag, unsigned int paramno); + +/* + GetMemParam - return the mem paramno from within Diag. A paramno of 0 + will return the total heap. +*/ + +static long unsigned int GetMemParam (M2Diagnostic_Diagnostic Diag, unsigned int paramno); + +/* + CreateDecimalMem - converts c to a decimal string. +*/ + +static DynamicStrings_String CreateDecimalMem (long unsigned int c); + +/* + CreateHexadecimalMem - converts c to a hexadecimal string. +*/ + +static DynamicStrings_String CreateHexadecimalMem (long unsigned int c); + +/* + CreateDecimalTime - return timeval as a decimal seconds.usecs string. +*/ + +static DynamicStrings_String CreateDecimalTime (Selective_Timeval timeval); + +/* + CreateHexadecimalTime - return timeval as a hexadecimal seconds.usecs string. +*/ + +static DynamicStrings_String CreateHexadecimalTime (Selective_Timeval timeval); + +/* + Decimal - convert paramno in Diag to a string. +*/ + +static DynamicStrings_String Decimal (M2Diagnostic_Diagnostic Diag, unsigned int paramno); + +/* + Hexadecimal - convert paramno in Diag to a hex string. +*/ + +static DynamicStrings_String Hexadecimal (M2Diagnostic_Diagnostic Diag, unsigned int paramno); + +/* + Count - return the count field for a time diag or return the decimal + value for a paramno in a mem diag. +*/ + +static DynamicStrings_String Count (M2Diagnostic_Diagnostic Diag, unsigned int paramno); + +/* + Microsec - convert timeval into microseconds and return the value as + a longcard. +*/ + +static long unsigned int Microsec (Selective_Timeval timeval); + +/* + CreateTimePercent - return timeval as a percentage of the TotalTime. +*/ + +static DynamicStrings_String CreateTimePercent (Selective_Timeval timeval); + +/* + CreateMemPercent - return memval as a percentage of TotalHeap. +*/ + +static DynamicStrings_String CreateMemPercent (long unsigned int memval); + +/* + DescribePercent - call the appropriate mem or time percentage procedure. +*/ + +static DynamicStrings_String DescribePercent (M2Diagnostic_Diagnostic Diag, unsigned int paramno); + +/* + DescribeMemory - return the memory diagnostic +*/ + +static DynamicStrings_String DescribeMemory (M2Diagnostic_Diagnostic Diag, unsigned int paramno); + +/* + DescribeTime - returns the time diagnostic in seconds. +*/ + +static DynamicStrings_String DescribeTime (M2Diagnostic_Diagnostic Diag, unsigned int paramno); + +/* + ParamSpec - ebnf: + + ( '{' | '0' | '1' | '2' | '3' | '4' ) + ( 'd' | 'x' | 'C' | 'T' | 'M' | 'N' | 'P' ) + '}' +*/ + +static unsigned int ParamSpec (M2Diagnostic_Diagnostic Diag, unsigned int i); + +/* + FormatDiag - ebnf: + + { ( '{' ParamSpec ) | any } +*/ + +static void FormatDiag (M2Diagnostic_Diagnostic Diag); + + +/* + Assert - halt if b is false. +*/ + +static void Assert (bool b) +{ + if (! b) + { + M2RTS_HALT (-1); + __builtin_unreachable (); + } +} + + +/* + Error - generate a error simple message with indicating the + format specifier ch is incorrect. +*/ + +static void Error (const char *msg_, unsigned int _msg_high, char ch) +{ + char msg[_msg_high+1]; + + /* make a local copy of each unbounded array. */ + memcpy (msg, msg_, _msg_high+1); + + M2RTS_HALT (-1); + __builtin_unreachable (); +} + + +/* + Accumulate - total := total + exit - enter +*/ + +static void Accumulate (Selective_Timeval total, Selective_Timeval enter, Selective_Timeval exit_) +{ + IncTime (total, exit_); + DecTime (total, enter); +} + + +/* + IncTime - left := left + right. +*/ + +static void IncTime (Selective_Timeval left, Selective_Timeval right) +{ + unsigned int lsec; + unsigned int lusec; + unsigned int rsec; + unsigned int rusec; + + Selective_GetTime (left, &lsec, &lusec); + Selective_GetTime (right, &rsec, &rusec); + if ((lusec+rusec) < MICROSEC) + { + /* No carry */ + lusec += rusec; + lsec += rsec; + } + else + { + lusec += rusec; + lusec -= MICROSEC; + lsec += rsec+1; + } + Selective_SetTime (left, lsec, lusec); +} + + +/* + DecTime - left := left - right. +*/ + +static void DecTime (Selective_Timeval left, Selective_Timeval right) +{ + unsigned int lsec; + unsigned int lusec; + unsigned int rsec; + unsigned int rusec; + + Selective_GetTime (left, &lsec, &lusec); + Selective_GetTime (right, &rsec, &rusec); + if (lusec >= rusec) + { + /* No borrow. */ + lusec -= rusec; + if (lsec >= rsec) + { + lsec -= rsec; + } + else + { + lsec = 0; + } + } + else + { + if (lsec > 0) + { + lusec += MICROSEC; + lusec -= rusec; + lsec -= 1; + if (lsec >= rsec) + { + lsec -= rsec; + } + else + { + lsec = 0; + } + } + else + { + lsec = 0; + lusec = 0; + } + } + Selective_SetTime (left, lsec, lusec); +} + + +/* + CheckParam - +*/ + +static void CheckParam (unsigned int paramno) +{ + if ((paramno < 1) || (paramno > MaxParam)) + { + M2RTS_HALT (-1); + __builtin_unreachable (); + } +} + + +/* + CreateStartTime - +*/ + +static void CreateStartTime (void) +{ + if (EnableDiagnostics) + { + /* avoid dangling else. */ + if (StartTime == NULL) + { + StartTime = Selective_InitTime (0, 0); + if ((Selective_GetTimeOfDay (StartTime)) == 0) + {} /* empty. */ + } + if (TotalTime == NULL) + { + TotalTime = Selective_InitTime (0, 0); + } + } + else + { + StartTime = NULL; + TotalTime = NULL; + } +} + + +/* + UpdateTotalTime - +*/ + +static void UpdateTotalTime (void) +{ + if ((Selective_GetTimeOfDay (TotalTime)) == 0) + {} /* empty. */ + DecTime (TotalTime, StartTime); +} + + +/* + GetTimeParam - a paramno of 0 will return the total time so far + whereas a paramno > 0 will return the time associated + with Diag. +*/ + +static Selective_Timeval GetTimeParam (M2Diagnostic_Diagnostic Diag, unsigned int paramno) +{ + unsigned int sec; + unsigned int usec; + + if (paramno == 0) + { + UpdateTotalTime (); + return TotalTime; + } + else + { + return Diag->tdiag.total; + } + /* static analysis guarentees a RETURN statement will be used before here. */ + __builtin_unreachable (); +} + + +/* + GetMemParam - return the mem paramno from within Diag. A paramno of 0 + will return the total heap. +*/ + +static long unsigned int GetMemParam (M2Diagnostic_Diagnostic Diag, unsigned int paramno) +{ + if (paramno == 0) + { + return TotalHeap; + } + else + { + return Diag->mdiag.param.array[paramno-1]; + } + /* static analysis guarentees a RETURN statement will be used before here. */ + __builtin_unreachable (); +} + + +/* + CreateDecimalMem - converts c to a decimal string. +*/ + +static DynamicStrings_String CreateDecimalMem (long unsigned int c) +{ + return StringConvert_LongCardinalToString (c, 0, ' ', 10, true); + /* static analysis guarentees a RETURN statement will be used before here. */ + __builtin_unreachable (); +} + + +/* + CreateHexadecimalMem - converts c to a hexadecimal string. +*/ + +static DynamicStrings_String CreateHexadecimalMem (long unsigned int c) +{ + return DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "0x", 2), DynamicStrings_Mark (StringConvert_LongCardinalToString (c, 0, ' ', 16, true))); + /* static analysis guarentees a RETURN statement will be used before here. */ + __builtin_unreachable (); +} + + +/* + CreateDecimalTime - return timeval as a decimal seconds.usecs string. +*/ + +static DynamicStrings_String CreateDecimalTime (Selective_Timeval timeval) +{ + unsigned int sec; + unsigned int usec; + + Selective_GetTime (timeval, &sec, &usec); + return DynamicStrings_ConCat (DynamicStrings_ConCat (StringConvert_LongCardinalToString (static_cast (sec), 0, ' ', 10, true), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) ".", 1))), StringConvert_LongCardinalToString (static_cast (usec), 6, '0', 10, true)); + /* static analysis guarentees a RETURN statement will be used before here. */ + __builtin_unreachable (); +} + + +/* + CreateHexadecimalTime - return timeval as a hexadecimal seconds.usecs string. +*/ + +static DynamicStrings_String CreateHexadecimalTime (Selective_Timeval timeval) +{ + unsigned int sec; + unsigned int usec; + + Selective_GetTime (timeval, &sec, &usec); + return DynamicStrings_ConCat (DynamicStrings_ConCat (StringConvert_LongCardinalToString (static_cast (sec), 0, ' ', 16, true), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) ".", 1))), StringConvert_LongCardinalToString (static_cast (usec), 5, '0', 16, true)); + /* static analysis guarentees a RETURN statement will be used before here. */ + __builtin_unreachable (); +} + + +/* + Decimal - convert paramno in Diag to a string. +*/ + +static DynamicStrings_String Decimal (M2Diagnostic_Diagnostic Diag, unsigned int paramno) +{ + switch (Diag->type) + { + case M2Diagnostic_memdiag: + return CreateDecimalMem (GetMemParam (Diag, paramno)); + break; + + case M2Diagnostic_timediag: + return CreateDecimalTime (GetTimeParam (Diag, paramno)); + break; + + + default: + CaseException ("../../gcc/m2/gm2-libs/M2Diagnostic.def", 20, 1); + __builtin_unreachable (); + } + return static_cast (NULL); + /* static analysis guarentees a RETURN statement will be used before here. */ + __builtin_unreachable (); +} + + +/* + Hexadecimal - convert paramno in Diag to a hex string. +*/ + +static DynamicStrings_String Hexadecimal (M2Diagnostic_Diagnostic Diag, unsigned int paramno) +{ + switch (Diag->type) + { + case M2Diagnostic_memdiag: + return CreateHexadecimalMem (GetMemParam (Diag, paramno)); + break; + + case M2Diagnostic_timediag: + return CreateHexadecimalTime (GetTimeParam (Diag, paramno)); + break; + + + default: + CaseException ("../../gcc/m2/gm2-libs/M2Diagnostic.def", 20, 1); + __builtin_unreachable (); + } + return static_cast (NULL); + /* static analysis guarentees a RETURN statement will be used before here. */ + __builtin_unreachable (); +} + + +/* + Count - return the count field for a time diag or return the decimal + value for a paramno in a mem diag. +*/ + +static DynamicStrings_String Count (M2Diagnostic_Diagnostic Diag, unsigned int paramno) +{ + switch (Diag->type) + { + case M2Diagnostic_memdiag: + return CreateDecimalMem (GetMemParam (Diag, paramno)); + break; + + case M2Diagnostic_timediag: + return StringConvert_ctos (Diag->tdiag.count, 0, ' '); + break; + + + default: + CaseException ("../../gcc/m2/gm2-libs/M2Diagnostic.def", 20, 1); + __builtin_unreachable (); + } + return static_cast (NULL); + /* static analysis guarentees a RETURN statement will be used before here. */ + __builtin_unreachable (); +} + + +/* + Microsec - convert timeval into microseconds and return the value as + a longcard. +*/ + +static long unsigned int Microsec (Selective_Timeval timeval) +{ + unsigned int sec; + unsigned int usec; + long unsigned int microsec; + + Selective_GetTime (timeval, &sec, &usec); + microsec = (((long unsigned int ) (sec))*MICROSEC)+((long unsigned int ) (usec)); + return microsec; + /* static analysis guarentees a RETURN statement will be used before here. */ + __builtin_unreachable (); +} + + +/* + CreateTimePercent - return timeval as a percentage of the TotalTime. +*/ + +static DynamicStrings_String CreateTimePercent (Selective_Timeval timeval) +{ + long unsigned int total; + long unsigned int param; + + if (timeval == TotalTime) + { + param = 100; + } + else + { + UpdateTotalTime (); + param = (Microsec (timeval))*100; + total = Microsec (TotalTime); + if (total == 0) + { + param = 0; + } + else + { + param = param / total; + } + } + return DynamicStrings_ConCatChar (StringConvert_ctos ((unsigned int ) (param), 3, ' '), '%'); + /* static analysis guarentees a RETURN statement will be used before here. */ + __builtin_unreachable (); +} + + +/* + CreateMemPercent - return memval as a percentage of TotalHeap. +*/ + +static DynamicStrings_String CreateMemPercent (long unsigned int memval) +{ + long unsigned int param; + + if (memval == TotalHeap) + { + param = 100; + } + else + { + param = memval*100; + if (TotalHeap == 0) + { + param = 0; + } + else + { + param = param / TotalHeap; + } + } + return DynamicStrings_ConCatChar (StringConvert_ctos ((unsigned int ) (param), 3, ' '), '%'); + /* static analysis guarentees a RETURN statement will be used before here. */ + __builtin_unreachable (); +} + + +/* + DescribePercent - call the appropriate mem or time percentage procedure. +*/ + +static DynamicStrings_String DescribePercent (M2Diagnostic_Diagnostic Diag, unsigned int paramno) +{ + switch (Diag->type) + { + case M2Diagnostic_memdiag: + return CreateMemPercent (GetMemParam (Diag, paramno)); + break; + + case M2Diagnostic_timediag: + return CreateTimePercent (GetTimeParam (Diag, paramno)); + break; + + + default: + CaseException ("../../gcc/m2/gm2-libs/M2Diagnostic.def", 20, 1); + __builtin_unreachable (); + } + return static_cast (NULL); + /* static analysis guarentees a RETURN statement will be used before here. */ + __builtin_unreachable (); +} + + +/* + DescribeMemory - return the memory diagnostic +*/ + +static DynamicStrings_String DescribeMemory (M2Diagnostic_Diagnostic Diag, unsigned int paramno) +{ + long unsigned int param; + DynamicStrings_String s; + + param = GetMemParam (Diag, paramno); + if (param < kilo) + { + s = DynamicStrings_ConCat (StringConvert_LongCardinalToString (param, 0, ' ', 10, false), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) " Bytes", 6))); + } + else if (param < mega) + { + /* avoid dangling else. */ + param = param / kilo; + s = DynamicStrings_ConCat (StringConvert_LongCardinalToString (param, 0, ' ', 10, false), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "KB", 2))); + } + else + { + /* avoid dangling else. */ + param = param / mega; + s = DynamicStrings_ConCat (StringConvert_LongCardinalToString (param, 0, ' ', 10, false), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "MB", 2))); + } + return s; + /* static analysis guarentees a RETURN statement will be used before here. */ + __builtin_unreachable (); +} + + +/* + DescribeTime - returns the time diagnostic in seconds. +*/ + +static DynamicStrings_String DescribeTime (M2Diagnostic_Diagnostic Diag, unsigned int paramno) +{ + unsigned int sec; + unsigned int usec; + + switch (Diag->type) + { + case M2Diagnostic_memdiag: + M2RTS_HALT (-1); + __builtin_unreachable (); + break; + + case M2Diagnostic_timediag: + Selective_GetTime (GetTimeParam (Diag, paramno), &sec, &usec); + return DynamicStrings_ConCat (DynamicStrings_ConCat (StringConvert_LongCardinalToString (static_cast (sec), 0, ' ', 10, true), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) ".", 1))), DynamicStrings_ConCat (StringConvert_LongCardinalToString (static_cast (usec), 6, '0', 10, true), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) " sec", 4)))); + break; + + + default: + CaseException ("../../gcc/m2/gm2-libs/M2Diagnostic.def", 20, 1); + __builtin_unreachable (); + } + return static_cast (NULL); + /* static analysis guarentees a RETURN statement will be used before here. */ + __builtin_unreachable (); +} + + +/* + ParamSpec - ebnf: + + ( '{' | '0' | '1' | '2' | '3' | '4' ) + ( 'd' | 'x' | 'C' | 'T' | 'M' | 'N' | 'P' ) + '}' +*/ + +static unsigned int ParamSpec (M2Diagnostic_Diagnostic Diag, unsigned int i) +{ + unsigned int paramno; + unsigned int length; + char ch; + + length = DynamicStrings_Length (Diag->format); + paramno = 0; + if (i < length) + { + ch = DynamicStrings_char (Diag->format, static_cast (i)); + switch (ch) + { + case '{': + Output = DynamicStrings_ConCatChar (Output, '{'); + return i+1; + break; + + case '0': + paramno = 0; + break; + + case '1': + paramno = 1; + break; + + case '2': + paramno = 2; + break; + + case '3': + paramno = 3; + break; + + case '4': + paramno = 4; + break; + + + default: + Error ((const char *) "unexpected character: ", 22, ch); + break; + } + i += 1; + if (i < length) + { + ch = DynamicStrings_char (Diag->format, static_cast (i)); + switch (ch) + { + case 'd': + Output = DynamicStrings_ConCat (Output, Decimal (Diag, paramno)); + break; + + case 'x': + Output = DynamicStrings_ConCat (Output, Hexadecimal (Diag, paramno)); + break; + + case 'C': + Output = DynamicStrings_ConCat (Output, Count (Diag, paramno)); + break; + + case 'M': + Output = DynamicStrings_ConCat (Output, DescribeMemory (Diag, paramno)); + break; + + case 'N': + Output = DynamicStrings_ConCat (Output, Diag->name); + break; + + case 'P': + Output = DynamicStrings_ConCat (Output, DescribePercent (Diag, paramno)); + break; + + case 'T': + Output = DynamicStrings_ConCat (Output, DescribeTime (Diag, paramno)); + break; + + + default: + Error ((const char *) "unexpected character: ", 22, ch); + break; + } + i += 1; + if (i < length) + { + ch = DynamicStrings_char (Diag->format, static_cast (i)); + if (ch != '}') + { + Error ((const char *) "expected } character, seen ", 27, ch); + } + } + } + } + return i+1; + /* static analysis guarentees a RETURN statement will be used before here. */ + __builtin_unreachable (); +} + + +/* + FormatDiag - ebnf: + + { ( '{' ParamSpec ) | any } +*/ + +static void FormatDiag (M2Diagnostic_Diagnostic Diag) +{ + unsigned int i; + unsigned int length; + char ch; + + i = 0; + length = DynamicStrings_Length (Diag->format); + while (i < length) + { + ch = DynamicStrings_char (Diag->format, static_cast (i)); + if (ch == '{') + { + i += 1; + i = ParamSpec (Diag, i); + } + else + { + Output = DynamicStrings_ConCatChar (Output, ch); + i += 1; + } + } + Output = DynamicStrings_ConCatChar (Output, ASCII_nl); +} + + +/* + InitTimeDiagnostic - create and return a time diagnostic. + The format string can be free form and may + contain {1T}, {1C} or {1P}. + {1T} will contain the time and + {1C} the count of the number of times the + code enters the time diagnostic code region. + {1P} generates the time as a percentage. + {0T} is the total time for the application. + {{ is rendered as a single {. +*/ + +extern "C" M2Diagnostic_Diagnostic M2Diagnostic_InitTimeDiagnostic (const char *name_, unsigned int _name_high, const char *format_, unsigned int _format_high) +{ + M2Diagnostic_Diagnostic d; + char name[_name_high+1]; + char format[_format_high+1]; + + /* make a local copy of each unbounded array. */ + memcpy (name, name_, _name_high+1); + memcpy (format, format_, _format_high+1); + + if (EnableDiagnostics) + { + Storage_ALLOCATE ((void **) &d, sizeof (M2Diagnostic__T1)); + d->name = DynamicStrings_InitString ((const char *) name, _name_high); + d->format = DynamicStrings_InitString ((const char *) format, _format_high); + d->enable = DefaultTimeEnable; + d->next = Head; + d->type = M2Diagnostic_timediag; + switch (d->type) + { + case M2Diagnostic_timediag: + d->tdiag.count = 0; + d->tdiag.total = Selective_InitTime (0, 0); + d->tdiag.enter = Selective_InitTime (0, 0); + d->tdiag.exit_ = Selective_InitTime (0, 0); + break; + + + default: + M2RTS_HALT (-1); + __builtin_unreachable (); + break; + } + Head = d; + return d; + } + else + { + return NULL; + } + /* static analysis guarentees a RETURN statement will be used before here. */ + __builtin_unreachable (); +} + + +/* + EnterDiagnostic - attribute all execution time from now to TimeDiag. +*/ + +extern "C" void M2Diagnostic_EnterDiagnostic (M2Diagnostic_Diagnostic TimeDiag) +{ + if (EnableDiagnostics && (TimeDiag != NULL)) + { + Assert (TimeDiag->type == M2Diagnostic_timediag); + Assert ((Selective_GetTimeOfDay (TimeDiag->tdiag.enter)) == 0); + TimeDiag->tdiag.count += 1; + } +} + + +/* + ExitDiagnostic - stop attributing execution time to TimeDiag. +*/ + +extern "C" void M2Diagnostic_ExitDiagnostic (M2Diagnostic_Diagnostic TimeDiag) +{ + if (EnableDiagnostics && (TimeDiag != NULL)) + { + Assert (TimeDiag->type == M2Diagnostic_timediag); + Assert ((Selective_GetTimeOfDay (TimeDiag->tdiag.exit_)) == 0); + Accumulate (TimeDiag->tdiag.total, TimeDiag->tdiag.enter, TimeDiag->tdiag.exit_); + } +} + + +/* + InitMemDiagnostic - create and return a memory diagnostic. + The format string can be free form and may + contain {1M} {1d} {1x} {1P}. + {1M} is replaced by the value of the first parameter + with memory size units. + {1d} unsigned decimal. {1x} unsigned hexadecimal. + {0M} is the global allocation (Storage.mod:ALLOCATE). + {1P} is the percentage of param 1 relative + to global memory. +*/ + +extern "C" M2Diagnostic_Diagnostic M2Diagnostic_InitMemDiagnostic (const char *name_, unsigned int _name_high, const char *format_, unsigned int _format_high) +{ + unsigned int i; + M2Diagnostic_Diagnostic d; + char name[_name_high+1]; + char format[_format_high+1]; + + /* make a local copy of each unbounded array. */ + memcpy (name, name_, _name_high+1); + memcpy (format, format_, _format_high+1); + + if (EnableDiagnostics) + { + Storage_ALLOCATE ((void **) &d, sizeof (M2Diagnostic__T1)); + d->name = DynamicStrings_InitString ((const char *) name, _name_high); + d->format = DynamicStrings_InitString ((const char *) format, _format_high); + d->enable = DefaultMemEnable; + d->next = Head; + d->type = M2Diagnostic_memdiag; + switch (d->type) + { + case M2Diagnostic_memdiag: + for (i=1; i<=MaxParam; i++) + { + d->mdiag.param.array[i-1] = 0; + } + break; + + + default: + M2RTS_HALT (-1); + __builtin_unreachable (); + break; + } + Head = d; + return d; + } + else + { + return NULL; + } + /* static analysis guarentees a RETURN statement will be used before here. */ + __builtin_unreachable (); +} + + +/* + MemIncr - allow the appropriate parameter to be incremented. + All parameters are initially set to zero and are stored + as LONGCARD. +*/ + +extern "C" void M2Diagnostic_MemIncr (M2Diagnostic_Diagnostic MemDiag, unsigned int paramno, unsigned int incr) +{ + if (EnableDiagnostics && (MemDiag != NULL)) + { + CheckParam (paramno); + switch (MemDiag->type) + { + case M2Diagnostic_memdiag: + MemDiag->mdiag.param.array[paramno-1] += (long unsigned int ) (incr); + break; + + + default: + M2RTS_HALT (-1); + __builtin_unreachable (); + break; + } + } +} + + +/* + MemDecr - allow the appropriate parameter to be decremented. + All parameters are initially set to zero and are stored + as LONGCARD. +*/ + +extern "C" void M2Diagnostic_MemDecr (M2Diagnostic_Diagnostic MemDiag, unsigned int paramno, unsigned int decr) +{ + if (EnableDiagnostics && (MemDiag != NULL)) + { + CheckParam (paramno); + switch (MemDiag->type) + { + case M2Diagnostic_memdiag: + MemDiag->mdiag.param.array[paramno-1] -= (long unsigned int ) (decr); + break; + + + default: + M2RTS_HALT (-1); + __builtin_unreachable (); + break; + } + } +} + + +/* + MemSet - allow the appropriate parameter to be set to value. + All parameters are initially set to zero. +*/ + +extern "C" void M2Diagnostic_MemSet (M2Diagnostic_Diagnostic MemDiag, unsigned int paramno, unsigned int value) +{ + if (EnableDiagnostics && (MemDiag != NULL)) + { + CheckParam (paramno); + switch (MemDiag->type) + { + case M2Diagnostic_memdiag: + MemDiag->mdiag.param.array[paramno-1] = (long unsigned int ) (value); + break; + + + default: + M2RTS_HALT (-1); + __builtin_unreachable (); + break; + } + } +} + + +/* + TotalHeapIncr - increments the total heap used. +*/ + +extern "C" void M2Diagnostic_TotalHeapIncr (unsigned int incr) +{ + if (EnableDiagnostics) + { + TotalHeap = TotalHeap+((long unsigned int ) (incr)); + } +} + + +/* + TotalHeapDecr - decrements the total heap used. +*/ + +extern "C" void M2Diagnostic_TotalHeapDecr (unsigned int incr) +{ + if (EnableDiagnostics) + { + TotalHeap = TotalHeap-((long unsigned int ) (incr)); + } +} + + +/* + SetEnable - set the enable flag in Diag to value. +*/ + +extern "C" void M2Diagnostic_SetEnable (M2Diagnostic_Diagnostic Diag, bool value) +{ + if (EnableDiagnostics && (Diag != NULL)) + { + Diag->enable = value; + } +} + + +/* + Lookup - returns the Diagnostic containing name or NIL + if it does not exist. +*/ + +extern "C" M2Diagnostic_Diagnostic M2Diagnostic_Lookup (const char *name_, unsigned int _name_high) +{ + M2Diagnostic_Diagnostic ptr; + DynamicStrings_String s; + char name[_name_high+1]; + + /* make a local copy of each unbounded array. */ + memcpy (name, name_, _name_high+1); + + if (EnableDiagnostics) + { + s = DynamicStrings_InitString ((const char *) name, _name_high); + ptr = Head; + while (ptr != NULL) + { + if (DynamicStrings_Equal (ptr->name, s)) + { + s = DynamicStrings_KillString (s); + return ptr; + } + ptr = ptr->next; + } + s = DynamicStrings_KillString (s); + return NULL; + } + else + { + return NULL; + } + /* static analysis guarentees a RETURN statement will be used before here. */ + __builtin_unreachable (); +} + + +/* + GetName - returns the name of Diag. +*/ + +extern "C" DynamicStrings_String M2Diagnostic_GetName (M2Diagnostic_Diagnostic Diag) +{ + if (EnableDiagnostics && (Diag != NULL)) + { + return Diag->name; + } + else + { + return static_cast (NULL); + } + /* static analysis guarentees a RETURN statement will be used before here. */ + __builtin_unreachable (); +} + + +/* + ForeachDiagDo - for diag in global diag list do + dp (diag); + end +*/ + +extern "C" void M2Diagnostic_ForeachDiagDo (M2Diagnostic_DiagProc dp) +{ + M2Diagnostic_Diagnostic ptr; + + ptr = Head; + while (ptr != NULL) + { + (*dp.proc) (ptr); + ptr = ptr->next; + } +} + + +/* + SetDefaultConfig - force the Diag enable flag to the + time or mem global default. +*/ + +extern "C" void M2Diagnostic_SetDefaultConfig (M2Diagnostic_Diagnostic Diag) +{ + if (Diag->type == M2Diagnostic_timediag) + { + Diag->enable = DefaultTimeEnable; + } + else + { + Diag->enable = DefaultMemEnable; + } +} + + +/* + Configure - will turn on or off all the memory or time + instrumentation diagnostics and set the defaults + time and mem values. +*/ + +extern "C" void M2Diagnostic_Configure (bool time_, bool mem) +{ + if (EnableDiagnostics) + { + DefaultTimeEnable = time_; + DefaultMemEnable = mem; + M2Diagnostic_ForeachDiagDo ((M2Diagnostic_DiagProc) {(M2Diagnostic_DiagProc_t) M2Diagnostic_SetDefaultConfig}); + } +} + + +/* + Generate - return a string containing the output from + all the diagnostics enabled. +*/ + +extern "C" DynamicStrings_String M2Diagnostic_Generate (void) +{ + if (EnableDiagnostics) + { + Output = DynamicStrings_KillString (Output); + Output = DynamicStrings_InitString ((const char *) "", 0); + M2Diagnostic_ForeachDiagDo ((M2Diagnostic_DiagProc) {(M2Diagnostic_DiagProc_t) FormatDiag}); + return Output; + } + else + { + return static_cast (NULL); + } + /* static analysis guarentees a RETURN statement will be used before here. */ + __builtin_unreachable (); +} + +extern "C" void _M2_M2Diagnostic_init (__attribute__((unused)) int argc,__attribute__((unused)) char *argv[],__attribute__((unused)) char *envp[]) +{ + TotalHeap = 0; + StartTime = NULL; + TotalTime = NULL; + CreateStartTime (); + Head = NULL; + Output = static_cast (NULL); + DefaultTimeEnable = DefaultTimeEnableValue; + DefaultMemEnable = DefaultMemEnableValue; +} + +extern "C" void _M2_M2Diagnostic_fini (__attribute__((unused)) int argc,__attribute__((unused)) char *argv[],__attribute__((unused)) char *envp[]) +{ +} diff --git a/gcc/m2/mc-boot/GM2Diagnostic.h b/gcc/m2/mc-boot/GM2Diagnostic.h new file mode 100644 index 000000000000..51f592daf3bc --- /dev/null +++ b/gcc/m2/mc-boot/GM2Diagnostic.h @@ -0,0 +1,186 @@ +/* do not edit automatically generated by mc from M2Diagnostic. */ +/* M2Diagnotic provides memory and time diagnosics to the user. + +Copyright (C) 2024 Free Software Foundation, Inc. +Contributed by Gaius Mulley . + +This file is part of GNU Modula-2. + +GNU Modula-2 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. + +GNU Modula-2 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 GNU Modula-2; see the file COPYING3. If not see +. */ + + +#if !defined (_M2Diagnostic_H) +# define _M2Diagnostic_H + +#include "config.h" +#include "system.h" +# ifdef __cplusplus +extern "C" { +# endif +#include +# if !defined (PROC_D) +# define PROC_D + typedef void (*PROC_t) (void); + typedef struct { PROC_t proc; } PROC; +# endif + +# include "GDynamicStrings.h" + +# if defined (_M2Diagnostic_C) +# define EXTERN +# else +# define EXTERN extern +# endif + +#if !defined (M2Diagnostic_Diagnostic_D) +# define M2Diagnostic_Diagnostic_D + typedef void *M2Diagnostic_Diagnostic; +#endif + +typedef struct M2Diagnostic_DiagProc_p M2Diagnostic_DiagProc; + +typedef void (*M2Diagnostic_DiagProc_t) (M2Diagnostic_Diagnostic); +struct M2Diagnostic_DiagProc_p { M2Diagnostic_DiagProc_t proc; }; + + +/* + InitTimeDiagnostic - create and return a time diagnostic. + The format string can be free form and may + contain {1T}, {1C} or {1P}. + {1T} will contain the time and + {1C} the count of the number of times the + code enters the time diagnostic code region. + {1P} generates the time as a percentage. + {0T} is the total time for the application. + {{ is rendered as a single {. +*/ + +EXTERN M2Diagnostic_Diagnostic M2Diagnostic_InitTimeDiagnostic (const char *name_, unsigned int _name_high, const char *format_, unsigned int _format_high); + +/* + EnterDiagnostic - attribute all execution time from now to TimeDiag. +*/ + +EXTERN void M2Diagnostic_EnterDiagnostic (M2Diagnostic_Diagnostic TimeDiag); + +/* + ExitDiagnostic - stop attributing execution time to TimeDiag. +*/ + +EXTERN void M2Diagnostic_ExitDiagnostic (M2Diagnostic_Diagnostic TimeDiag); + +/* + InitMemDiagnostic - create and return a memory diagnostic. + The format string can be free form and may + contain {1M} {1d} {1x} {1P}. + {1M} is replaced by the value of the first parameter + with memory size units. + {1d} unsigned decimal. {1x} unsigned hexadecimal. + {0M} is the global allocation (Storage.mod:ALLOCATE). + {1P} is the percentage of param 1 relative + to global memory. +*/ + +EXTERN M2Diagnostic_Diagnostic M2Diagnostic_InitMemDiagnostic (const char *name_, unsigned int _name_high, const char *format_, unsigned int _format_high); + +/* + MemIncr - allow the appropriate parameter to be incremented. + All parameters are initially set to zero and are stored + as LONGCARD. +*/ + +EXTERN void M2Diagnostic_MemIncr (M2Diagnostic_Diagnostic MemDiag, unsigned int paramno, unsigned int incr); + +/* + MemDecr - allow the appropriate parameter to be decremented. + All parameters are initially set to zero and are stored + as LONGCARD. +*/ + +EXTERN void M2Diagnostic_MemDecr (M2Diagnostic_Diagnostic MemDiag, unsigned int paramno, unsigned int decr); + +/* + MemSet - allow the appropriate parameter to be set to value. + All parameters are initially set to zero. +*/ + +EXTERN void M2Diagnostic_MemSet (M2Diagnostic_Diagnostic MemDiag, unsigned int paramno, unsigned int value); + +/* + TotalHeapIncr - increments the total heap used. +*/ + +EXTERN void M2Diagnostic_TotalHeapIncr (unsigned int incr); + +/* + TotalHeapDecr - decrements the total heap used. +*/ + +EXTERN void M2Diagnostic_TotalHeapDecr (unsigned int incr); + +/* + SetEnable - set the enable flag in Diag to value. +*/ + +EXTERN void M2Diagnostic_SetEnable (M2Diagnostic_Diagnostic Diag, bool value); + +/* + Lookup - returns the Diagnostic containing name or NIL + if it does not exist. +*/ + +EXTERN M2Diagnostic_Diagnostic M2Diagnostic_Lookup (const char *name_, unsigned int _name_high); + +/* + GetName - returns the name of Diag. +*/ + +EXTERN DynamicStrings_String M2Diagnostic_GetName (M2Diagnostic_Diagnostic Diag); + +/* + ForeachDiagDo - for diag in global diag list do + dp (diag); + end +*/ + +EXTERN void M2Diagnostic_ForeachDiagDo (M2Diagnostic_DiagProc dp); + +/* + SetDefaultConfig - force the Diag enable flag to the + time or mem global default. +*/ + +EXTERN void M2Diagnostic_SetDefaultConfig (M2Diagnostic_Diagnostic Diag); + +/* + Configure - will turn on or off all the memory or time + instrumentation diagnostics and set the defaults + time and mem values. +*/ + +EXTERN void M2Diagnostic_Configure (bool time_, bool mem); + +/* + Generate - return a string containing the output from + all the diagnostics enabled. +*/ + +EXTERN DynamicStrings_String M2Diagnostic_Generate (void); +# ifdef __cplusplus +} +# endif + +# undef EXTERN +#endif diff --git a/gcc/m2/pge-boot/GM2Diagnostic.cc b/gcc/m2/pge-boot/GM2Diagnostic.cc new file mode 100644 index 000000000000..8f901d14d5ed --- /dev/null +++ b/gcc/m2/pge-boot/GM2Diagnostic.cc @@ -0,0 +1,1485 @@ +/* do not edit automatically generated by mc from M2Diagnostic. */ +/* M2Diagnotic provides memory and time diagnosics to the user. + +Copyright (C) 2024 Free Software Foundation, Inc. +Contributed by Gaius Mulley . + +This file is part of GNU Modula-2. + +GNU Modula-2 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. + +GNU Modula-2 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 GNU Modula-2; see the file COPYING3. If not see +. */ + +#include +# if !defined (PROC_D) +# define PROC_D + typedef void (*PROC_t) (void); + typedef struct { PROC_t proc; } PROC; +# endif + +# if !defined (TRUE) +# define TRUE (1==1) +# endif + +# if !defined (FALSE) +# define FALSE (1==0) +# endif + +#include +#include +#include +# include "GStorage.h" +# include "Gmcrts.h" +#if defined(__cplusplus) +# undef NULL +# define NULL 0 +#endif +#define _M2Diagnostic_H +#define _M2Diagnostic_C + +# include "GASCII.h" +# include "GSelective.h" +# include "GStringConvert.h" +# include "GStorage.h" +# include "GDynamicStrings.h" +# include "GM2RTS.h" + +typedef struct M2Diagnostic_DiagProc_p M2Diagnostic_DiagProc; + +# define EnableDiagnostics true +# define DefaultTimeEnableValue false +# define DefaultMemEnableValue false +# define MaxParam 4 +# define MICROSEC 100000 +typedef struct M2Diagnostic_timeDiag_r M2Diagnostic_timeDiag; + +typedef struct M2Diagnostic_memDiag_r M2Diagnostic_memDiag; + +typedef struct M2Diagnostic__T1_r M2Diagnostic__T1; + +typedef struct M2Diagnostic__T2_a M2Diagnostic__T2; + +typedef enum {M2Diagnostic_timediag, M2Diagnostic_memdiag} M2Diagnostic_DiagType; + +# define kilo 1024 +# define mega (kilo*kilo) +# define giga (mega*kilo) +typedef M2Diagnostic__T1 *M2Diagnostic_Diagnostic; + +typedef void (*M2Diagnostic_DiagProc_t) (M2Diagnostic_Diagnostic); +struct M2Diagnostic_DiagProc_p { M2Diagnostic_DiagProc_t proc; }; + +struct M2Diagnostic_timeDiag_r { + unsigned int count; + Selective_Timeval total; + Selective_Timeval enter; + Selective_Timeval exit_; + }; + +struct M2Diagnostic__T2_a { long unsigned int array[MaxParam-1+1]; }; +struct M2Diagnostic_memDiag_r { + M2Diagnostic__T2 param; + }; + +struct M2Diagnostic__T1_r { + DynamicStrings_String name; + DynamicStrings_String format; + bool enable; + M2Diagnostic_Diagnostic next; + M2Diagnostic_DiagType type; /* case tag */ + union { + M2Diagnostic_timeDiag tdiag; + M2Diagnostic_memDiag mdiag; + }; + }; + +static DynamicStrings_String Output; +static long unsigned int TotalHeap; +static M2Diagnostic_Diagnostic Head; +static bool DefaultTimeEnable; +static bool DefaultMemEnable; +static Selective_Timeval StartTime; +static Selective_Timeval TotalTime; + +/* + InitTimeDiagnostic - create and return a time diagnostic. + The format string can be free form and may + contain {1T}, {1C} or {1P}. + {1T} will contain the time and + {1C} the count of the number of times the + code enters the time diagnostic code region. + {1P} generates the time as a percentage. + {0T} is the total time for the application. + {{ is rendered as a single {. +*/ + +extern "C" M2Diagnostic_Diagnostic M2Diagnostic_InitTimeDiagnostic (const char *name_, unsigned int _name_high, const char *format_, unsigned int _format_high); + +/* + EnterDiagnostic - attribute all execution time from now to TimeDiag. +*/ + +extern "C" void M2Diagnostic_EnterDiagnostic (M2Diagnostic_Diagnostic TimeDiag); + +/* + ExitDiagnostic - stop attributing execution time to TimeDiag. +*/ + +extern "C" void M2Diagnostic_ExitDiagnostic (M2Diagnostic_Diagnostic TimeDiag); + +/* + InitMemDiagnostic - create and return a memory diagnostic. + The format string can be free form and may + contain {1M} {1d} {1x} {1P}. + {1M} is replaced by the value of the first parameter + with memory size units. + {1d} unsigned decimal. {1x} unsigned hexadecimal. + {0M} is the global allocation (Storage.mod:ALLOCATE). + {1P} is the percentage of param 1 relative + to global memory. +*/ + +extern "C" M2Diagnostic_Diagnostic M2Diagnostic_InitMemDiagnostic (const char *name_, unsigned int _name_high, const char *format_, unsigned int _format_high); + +/* + MemIncr - allow the appropriate parameter to be incremented. + All parameters are initially set to zero and are stored + as LONGCARD. +*/ + +extern "C" void M2Diagnostic_MemIncr (M2Diagnostic_Diagnostic MemDiag, unsigned int paramno, unsigned int incr); + +/* + MemDecr - allow the appropriate parameter to be decremented. + All parameters are initially set to zero and are stored + as LONGCARD. +*/ + +extern "C" void M2Diagnostic_MemDecr (M2Diagnostic_Diagnostic MemDiag, unsigned int paramno, unsigned int decr); + +/* + MemSet - allow the appropriate parameter to be set to value. + All parameters are initially set to zero. +*/ + +extern "C" void M2Diagnostic_MemSet (M2Diagnostic_Diagnostic MemDiag, unsigned int paramno, unsigned int value); + +/* + TotalHeapIncr - increments the total heap used. +*/ + +extern "C" void M2Diagnostic_TotalHeapIncr (unsigned int incr); + +/* + TotalHeapDecr - decrements the total heap used. +*/ + +extern "C" void M2Diagnostic_TotalHeapDecr (unsigned int incr); + +/* + SetEnable - set the enable flag in Diag to value. +*/ + +extern "C" void M2Diagnostic_SetEnable (M2Diagnostic_Diagnostic Diag, bool value); + +/* + Lookup - returns the Diagnostic containing name or NIL + if it does not exist. +*/ + +extern "C" M2Diagnostic_Diagnostic M2Diagnostic_Lookup (const char *name_, unsigned int _name_high); + +/* + GetName - returns the name of Diag. +*/ + +extern "C" DynamicStrings_String M2Diagnostic_GetName (M2Diagnostic_Diagnostic Diag); + +/* + ForeachDiagDo - for diag in global diag list do + dp (diag); + end +*/ + +extern "C" void M2Diagnostic_ForeachDiagDo (M2Diagnostic_DiagProc dp); + +/* + SetDefaultConfig - force the Diag enable flag to the + time or mem global default. +*/ + +extern "C" void M2Diagnostic_SetDefaultConfig (M2Diagnostic_Diagnostic Diag); + +/* + Configure - will turn on or off all the memory or time + instrumentation diagnostics and set the defaults + time and mem values. +*/ + +extern "C" void M2Diagnostic_Configure (bool time_, bool mem); + +/* + Generate - return a string containing the output from + all the diagnostics enabled. +*/ + +extern "C" DynamicStrings_String M2Diagnostic_Generate (void); + +/* + Assert - halt if b is false. +*/ + +static void Assert (bool b); + +/* + Error - generate a error simple message with indicating the + format specifier ch is incorrect. +*/ + +static void Error (const char *msg_, unsigned int _msg_high, char ch); + +/* + Accumulate - total := total + exit - enter +*/ + +static void Accumulate (Selective_Timeval total, Selective_Timeval enter, Selective_Timeval exit_); + +/* + IncTime - left := left + right. +*/ + +static void IncTime (Selective_Timeval left, Selective_Timeval right); + +/* + DecTime - left := left - right. +*/ + +static void DecTime (Selective_Timeval left, Selective_Timeval right); + +/* + CheckParam - +*/ + +static void CheckParam (unsigned int paramno); + +/* + CreateStartTime - +*/ + +static void CreateStartTime (void); + +/* + UpdateTotalTime - +*/ + +static void UpdateTotalTime (void); + +/* + GetTimeParam - a paramno of 0 will return the total time so far + whereas a paramno > 0 will return the time associated + with Diag. +*/ + +static Selective_Timeval GetTimeParam (M2Diagnostic_Diagnostic Diag, unsigned int paramno); + +/* + GetMemParam - return the mem paramno from within Diag. A paramno of 0 + will return the total heap. +*/ + +static long unsigned int GetMemParam (M2Diagnostic_Diagnostic Diag, unsigned int paramno); + +/* + CreateDecimalMem - converts c to a decimal string. +*/ + +static DynamicStrings_String CreateDecimalMem (long unsigned int c); + +/* + CreateHexadecimalMem - converts c to a hexadecimal string. +*/ + +static DynamicStrings_String CreateHexadecimalMem (long unsigned int c); + +/* + CreateDecimalTime - return timeval as a decimal seconds.usecs string. +*/ + +static DynamicStrings_String CreateDecimalTime (Selective_Timeval timeval); + +/* + CreateHexadecimalTime - return timeval as a hexadecimal seconds.usecs string. +*/ + +static DynamicStrings_String CreateHexadecimalTime (Selective_Timeval timeval); + +/* + Decimal - convert paramno in Diag to a string. +*/ + +static DynamicStrings_String Decimal (M2Diagnostic_Diagnostic Diag, unsigned int paramno); + +/* + Hexadecimal - convert paramno in Diag to a hex string. +*/ + +static DynamicStrings_String Hexadecimal (M2Diagnostic_Diagnostic Diag, unsigned int paramno); + +/* + Count - return the count field for a time diag or return the decimal + value for a paramno in a mem diag. +*/ + +static DynamicStrings_String Count (M2Diagnostic_Diagnostic Diag, unsigned int paramno); + +/* + Microsec - convert timeval into microseconds and return the value as + a longcard. +*/ + +static long unsigned int Microsec (Selective_Timeval timeval); + +/* + CreateTimePercent - return timeval as a percentage of the TotalTime. +*/ + +static DynamicStrings_String CreateTimePercent (Selective_Timeval timeval); + +/* + CreateMemPercent - return memval as a percentage of TotalHeap. +*/ + +static DynamicStrings_String CreateMemPercent (long unsigned int memval); + +/* + DescribePercent - call the appropriate mem or time percentage procedure. +*/ + +static DynamicStrings_String DescribePercent (M2Diagnostic_Diagnostic Diag, unsigned int paramno); + +/* + DescribeMemory - return the memory diagnostic +*/ + +static DynamicStrings_String DescribeMemory (M2Diagnostic_Diagnostic Diag, unsigned int paramno); + +/* + DescribeTime - returns the time diagnostic in seconds. +*/ + +static DynamicStrings_String DescribeTime (M2Diagnostic_Diagnostic Diag, unsigned int paramno); + +/* + ParamSpec - ebnf: + + ( '{' | '0' | '1' | '2' | '3' | '4' ) + ( 'd' | 'x' | 'C' | 'T' | 'M' | 'N' | 'P' ) + '}' +*/ + +static unsigned int ParamSpec (M2Diagnostic_Diagnostic Diag, unsigned int i); + +/* + FormatDiag - ebnf: + + { ( '{' ParamSpec ) | any } +*/ + +static void FormatDiag (M2Diagnostic_Diagnostic Diag); + + +/* + Assert - halt if b is false. +*/ + +static void Assert (bool b) +{ + if (! b) + { + M2RTS_HALT (-1); + __builtin_unreachable (); + } +} + + +/* + Error - generate a error simple message with indicating the + format specifier ch is incorrect. +*/ + +static void Error (const char *msg_, unsigned int _msg_high, char ch) +{ + char msg[_msg_high+1]; + + /* make a local copy of each unbounded array. */ + memcpy (msg, msg_, _msg_high+1); + + M2RTS_HALT (-1); + __builtin_unreachable (); +} + + +/* + Accumulate - total := total + exit - enter +*/ + +static void Accumulate (Selective_Timeval total, Selective_Timeval enter, Selective_Timeval exit_) +{ + IncTime (total, exit_); + DecTime (total, enter); +} + + +/* + IncTime - left := left + right. +*/ + +static void IncTime (Selective_Timeval left, Selective_Timeval right) +{ + unsigned int lsec; + unsigned int lusec; + unsigned int rsec; + unsigned int rusec; + + Selective_GetTime (left, &lsec, &lusec); + Selective_GetTime (right, &rsec, &rusec); + if ((lusec+rusec) < MICROSEC) + { + /* No carry */ + lusec += rusec; + lsec += rsec; + } + else + { + lusec += rusec; + lusec -= MICROSEC; + lsec += rsec+1; + } + Selective_SetTime (left, lsec, lusec); +} + + +/* + DecTime - left := left - right. +*/ + +static void DecTime (Selective_Timeval left, Selective_Timeval right) +{ + unsigned int lsec; + unsigned int lusec; + unsigned int rsec; + unsigned int rusec; + + Selective_GetTime (left, &lsec, &lusec); + Selective_GetTime (right, &rsec, &rusec); + if (lusec >= rusec) + { + /* No borrow. */ + lusec -= rusec; + if (lsec >= rsec) + { + lsec -= rsec; + } + else + { + lsec = 0; + } + } + else + { + if (lsec > 0) + { + lusec += MICROSEC; + lusec -= rusec; + lsec -= 1; + if (lsec >= rsec) + { + lsec -= rsec; + } + else + { + lsec = 0; + } + } + else + { + lsec = 0; + lusec = 0; + } + } + Selective_SetTime (left, lsec, lusec); +} + + +/* + CheckParam - +*/ + +static void CheckParam (unsigned int paramno) +{ + if ((paramno < 1) || (paramno > MaxParam)) + { + M2RTS_HALT (-1); + __builtin_unreachable (); + } +} + + +/* + CreateStartTime - +*/ + +static void CreateStartTime (void) +{ + if (EnableDiagnostics) + { + /* avoid dangling else. */ + if (StartTime == NULL) + { + StartTime = Selective_InitTime (0, 0); + if ((Selective_GetTimeOfDay (StartTime)) == 0) + {} /* empty. */ + } + if (TotalTime == NULL) + { + TotalTime = Selective_InitTime (0, 0); + } + } + else + { + StartTime = NULL; + TotalTime = NULL; + } +} + + +/* + UpdateTotalTime - +*/ + +static void UpdateTotalTime (void) +{ + if ((Selective_GetTimeOfDay (TotalTime)) == 0) + {} /* empty. */ + DecTime (TotalTime, StartTime); +} + + +/* + GetTimeParam - a paramno of 0 will return the total time so far + whereas a paramno > 0 will return the time associated + with Diag. +*/ + +static Selective_Timeval GetTimeParam (M2Diagnostic_Diagnostic Diag, unsigned int paramno) +{ + unsigned int sec; + unsigned int usec; + + if (paramno == 0) + { + UpdateTotalTime (); + return TotalTime; + } + else + { + return Diag->tdiag.total; + } + /* static analysis guarentees a RETURN statement will be used before here. */ + __builtin_unreachable (); +} + + +/* + GetMemParam - return the mem paramno from within Diag. A paramno of 0 + will return the total heap. +*/ + +static long unsigned int GetMemParam (M2Diagnostic_Diagnostic Diag, unsigned int paramno) +{ + if (paramno == 0) + { + return TotalHeap; + } + else + { + return Diag->mdiag.param.array[paramno-1]; + } + /* static analysis guarentees a RETURN statement will be used before here. */ + __builtin_unreachable (); +} + + +/* + CreateDecimalMem - converts c to a decimal string. +*/ + +static DynamicStrings_String CreateDecimalMem (long unsigned int c) +{ + return StringConvert_LongCardinalToString (c, 0, ' ', 10, true); + /* static analysis guarentees a RETURN statement will be used before here. */ + __builtin_unreachable (); +} + + +/* + CreateHexadecimalMem - converts c to a hexadecimal string. +*/ + +static DynamicStrings_String CreateHexadecimalMem (long unsigned int c) +{ + return DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "0x", 2), DynamicStrings_Mark (StringConvert_LongCardinalToString (c, 0, ' ', 16, true))); + /* static analysis guarentees a RETURN statement will be used before here. */ + __builtin_unreachable (); +} + + +/* + CreateDecimalTime - return timeval as a decimal seconds.usecs string. +*/ + +static DynamicStrings_String CreateDecimalTime (Selective_Timeval timeval) +{ + unsigned int sec; + unsigned int usec; + + Selective_GetTime (timeval, &sec, &usec); + return DynamicStrings_ConCat (DynamicStrings_ConCat (StringConvert_LongCardinalToString (static_cast (sec), 0, ' ', 10, true), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) ".", 1))), StringConvert_LongCardinalToString (static_cast (usec), 6, '0', 10, true)); + /* static analysis guarentees a RETURN statement will be used before here. */ + __builtin_unreachable (); +} + + +/* + CreateHexadecimalTime - return timeval as a hexadecimal seconds.usecs string. +*/ + +static DynamicStrings_String CreateHexadecimalTime (Selective_Timeval timeval) +{ + unsigned int sec; + unsigned int usec; + + Selective_GetTime (timeval, &sec, &usec); + return DynamicStrings_ConCat (DynamicStrings_ConCat (StringConvert_LongCardinalToString (static_cast (sec), 0, ' ', 16, true), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) ".", 1))), StringConvert_LongCardinalToString (static_cast (usec), 5, '0', 16, true)); + /* static analysis guarentees a RETURN statement will be used before here. */ + __builtin_unreachable (); +} + + +/* + Decimal - convert paramno in Diag to a string. +*/ + +static DynamicStrings_String Decimal (M2Diagnostic_Diagnostic Diag, unsigned int paramno) +{ + switch (Diag->type) + { + case M2Diagnostic_memdiag: + return CreateDecimalMem (GetMemParam (Diag, paramno)); + break; + + case M2Diagnostic_timediag: + return CreateDecimalTime (GetTimeParam (Diag, paramno)); + break; + + + default: + CaseException ("../../gcc/m2/gm2-libs/M2Diagnostic.def", 20, 1); + __builtin_unreachable (); + } + return static_cast (NULL); + /* static analysis guarentees a RETURN statement will be used before here. */ + __builtin_unreachable (); +} + + +/* + Hexadecimal - convert paramno in Diag to a hex string. +*/ + +static DynamicStrings_String Hexadecimal (M2Diagnostic_Diagnostic Diag, unsigned int paramno) +{ + switch (Diag->type) + { + case M2Diagnostic_memdiag: + return CreateHexadecimalMem (GetMemParam (Diag, paramno)); + break; + + case M2Diagnostic_timediag: + return CreateHexadecimalTime (GetTimeParam (Diag, paramno)); + break; + + + default: + CaseException ("../../gcc/m2/gm2-libs/M2Diagnostic.def", 20, 1); + __builtin_unreachable (); + } + return static_cast (NULL); + /* static analysis guarentees a RETURN statement will be used before here. */ + __builtin_unreachable (); +} + + +/* + Count - return the count field for a time diag or return the decimal + value for a paramno in a mem diag. +*/ + +static DynamicStrings_String Count (M2Diagnostic_Diagnostic Diag, unsigned int paramno) +{ + switch (Diag->type) + { + case M2Diagnostic_memdiag: + return CreateDecimalMem (GetMemParam (Diag, paramno)); + break; + + case M2Diagnostic_timediag: + return StringConvert_ctos (Diag->tdiag.count, 0, ' '); + break; + + + default: + CaseException ("../../gcc/m2/gm2-libs/M2Diagnostic.def", 20, 1); + __builtin_unreachable (); + } + return static_cast (NULL); + /* static analysis guarentees a RETURN statement will be used before here. */ + __builtin_unreachable (); +} + + +/* + Microsec - convert timeval into microseconds and return the value as + a longcard. +*/ + +static long unsigned int Microsec (Selective_Timeval timeval) +{ + unsigned int sec; + unsigned int usec; + long unsigned int microsec; + + Selective_GetTime (timeval, &sec, &usec); + microsec = (((long unsigned int ) (sec))*MICROSEC)+((long unsigned int ) (usec)); + return microsec; + /* static analysis guarentees a RETURN statement will be used before here. */ + __builtin_unreachable (); +} + + +/* + CreateTimePercent - return timeval as a percentage of the TotalTime. +*/ + +static DynamicStrings_String CreateTimePercent (Selective_Timeval timeval) +{ + long unsigned int total; + long unsigned int param; + + if (timeval == TotalTime) + { + param = 100; + } + else + { + UpdateTotalTime (); + param = (Microsec (timeval))*100; + total = Microsec (TotalTime); + if (total == 0) + { + param = 0; + } + else + { + param = param / total; + } + } + return DynamicStrings_ConCatChar (StringConvert_ctos ((unsigned int ) (param), 3, ' '), '%'); + /* static analysis guarentees a RETURN statement will be used before here. */ + __builtin_unreachable (); +} + + +/* + CreateMemPercent - return memval as a percentage of TotalHeap. +*/ + +static DynamicStrings_String CreateMemPercent (long unsigned int memval) +{ + long unsigned int param; + + if (memval == TotalHeap) + { + param = 100; + } + else + { + param = memval*100; + if (TotalHeap == 0) + { + param = 0; + } + else + { + param = param / TotalHeap; + } + } + return DynamicStrings_ConCatChar (StringConvert_ctos ((unsigned int ) (param), 3, ' '), '%'); + /* static analysis guarentees a RETURN statement will be used before here. */ + __builtin_unreachable (); +} + + +/* + DescribePercent - call the appropriate mem or time percentage procedure. +*/ + +static DynamicStrings_String DescribePercent (M2Diagnostic_Diagnostic Diag, unsigned int paramno) +{ + switch (Diag->type) + { + case M2Diagnostic_memdiag: + return CreateMemPercent (GetMemParam (Diag, paramno)); + break; + + case M2Diagnostic_timediag: + return CreateTimePercent (GetTimeParam (Diag, paramno)); + break; + + + default: + CaseException ("../../gcc/m2/gm2-libs/M2Diagnostic.def", 20, 1); + __builtin_unreachable (); + } + return static_cast (NULL); + /* static analysis guarentees a RETURN statement will be used before here. */ + __builtin_unreachable (); +} + + +/* + DescribeMemory - return the memory diagnostic +*/ + +static DynamicStrings_String DescribeMemory (M2Diagnostic_Diagnostic Diag, unsigned int paramno) +{ + long unsigned int param; + DynamicStrings_String s; + + param = GetMemParam (Diag, paramno); + if (param < kilo) + { + s = DynamicStrings_ConCat (StringConvert_LongCardinalToString (param, 0, ' ', 10, false), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) " Bytes", 6))); + } + else if (param < mega) + { + /* avoid dangling else. */ + param = param / kilo; + s = DynamicStrings_ConCat (StringConvert_LongCardinalToString (param, 0, ' ', 10, false), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "KB", 2))); + } + else + { + /* avoid dangling else. */ + param = param / mega; + s = DynamicStrings_ConCat (StringConvert_LongCardinalToString (param, 0, ' ', 10, false), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "MB", 2))); + } + return s; + /* static analysis guarentees a RETURN statement will be used before here. */ + __builtin_unreachable (); +} + + +/* + DescribeTime - returns the time diagnostic in seconds. +*/ + +static DynamicStrings_String DescribeTime (M2Diagnostic_Diagnostic Diag, unsigned int paramno) +{ + unsigned int sec; + unsigned int usec; + + switch (Diag->type) + { + case M2Diagnostic_memdiag: + M2RTS_HALT (-1); + __builtin_unreachable (); + break; + + case M2Diagnostic_timediag: + Selective_GetTime (GetTimeParam (Diag, paramno), &sec, &usec); + return DynamicStrings_ConCat (DynamicStrings_ConCat (StringConvert_LongCardinalToString (static_cast (sec), 0, ' ', 10, true), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) ".", 1))), DynamicStrings_ConCat (StringConvert_LongCardinalToString (static_cast (usec), 6, '0', 10, true), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) " sec", 4)))); + break; + + + default: + CaseException ("../../gcc/m2/gm2-libs/M2Diagnostic.def", 20, 1); + __builtin_unreachable (); + } + return static_cast (NULL); + /* static analysis guarentees a RETURN statement will be used before here. */ + __builtin_unreachable (); +} + + +/* + ParamSpec - ebnf: + + ( '{' | '0' | '1' | '2' | '3' | '4' ) + ( 'd' | 'x' | 'C' | 'T' | 'M' | 'N' | 'P' ) + '}' +*/ + +static unsigned int ParamSpec (M2Diagnostic_Diagnostic Diag, unsigned int i) +{ + unsigned int paramno; + unsigned int length; + char ch; + + length = DynamicStrings_Length (Diag->format); + paramno = 0; + if (i < length) + { + ch = DynamicStrings_char (Diag->format, static_cast (i)); + switch (ch) + { + case '{': + Output = DynamicStrings_ConCatChar (Output, '{'); + return i+1; + break; + + case '0': + paramno = 0; + break; + + case '1': + paramno = 1; + break; + + case '2': + paramno = 2; + break; + + case '3': + paramno = 3; + break; + + case '4': + paramno = 4; + break; + + + default: + Error ((const char *) "unexpected character: ", 22, ch); + break; + } + i += 1; + if (i < length) + { + ch = DynamicStrings_char (Diag->format, static_cast (i)); + switch (ch) + { + case 'd': + Output = DynamicStrings_ConCat (Output, Decimal (Diag, paramno)); + break; + + case 'x': + Output = DynamicStrings_ConCat (Output, Hexadecimal (Diag, paramno)); + break; + + case 'C': + Output = DynamicStrings_ConCat (Output, Count (Diag, paramno)); + break; + + case 'M': + Output = DynamicStrings_ConCat (Output, DescribeMemory (Diag, paramno)); + break; + + case 'N': + Output = DynamicStrings_ConCat (Output, Diag->name); + break; + + case 'P': + Output = DynamicStrings_ConCat (Output, DescribePercent (Diag, paramno)); + break; + + case 'T': + Output = DynamicStrings_ConCat (Output, DescribeTime (Diag, paramno)); + break; + + + default: + Error ((const char *) "unexpected character: ", 22, ch); + break; + } + i += 1; + if (i < length) + { + ch = DynamicStrings_char (Diag->format, static_cast (i)); + if (ch != '}') + { + Error ((const char *) "expected } character, seen ", 27, ch); + } + } + } + } + return i+1; + /* static analysis guarentees a RETURN statement will be used before here. */ + __builtin_unreachable (); +} + + +/* + FormatDiag - ebnf: + + { ( '{' ParamSpec ) | any } +*/ + +static void FormatDiag (M2Diagnostic_Diagnostic Diag) +{ + unsigned int i; + unsigned int length; + char ch; + + i = 0; + length = DynamicStrings_Length (Diag->format); + while (i < length) + { + ch = DynamicStrings_char (Diag->format, static_cast (i)); + if (ch == '{') + { + i += 1; + i = ParamSpec (Diag, i); + } + else + { + Output = DynamicStrings_ConCatChar (Output, ch); + i += 1; + } + } + Output = DynamicStrings_ConCatChar (Output, ASCII_nl); +} + + +/* + InitTimeDiagnostic - create and return a time diagnostic. + The format string can be free form and may + contain {1T}, {1C} or {1P}. + {1T} will contain the time and + {1C} the count of the number of times the + code enters the time diagnostic code region. + {1P} generates the time as a percentage. + {0T} is the total time for the application. + {{ is rendered as a single {. +*/ + +extern "C" M2Diagnostic_Diagnostic M2Diagnostic_InitTimeDiagnostic (const char *name_, unsigned int _name_high, const char *format_, unsigned int _format_high) +{ + M2Diagnostic_Diagnostic d; + char name[_name_high+1]; + char format[_format_high+1]; + + /* make a local copy of each unbounded array. */ + memcpy (name, name_, _name_high+1); + memcpy (format, format_, _format_high+1); + + if (EnableDiagnostics) + { + Storage_ALLOCATE ((void **) &d, sizeof (M2Diagnostic__T1)); + d->name = DynamicStrings_InitString ((const char *) name, _name_high); + d->format = DynamicStrings_InitString ((const char *) format, _format_high); + d->enable = DefaultTimeEnable; + d->next = Head; + d->type = M2Diagnostic_timediag; + switch (d->type) + { + case M2Diagnostic_timediag: + d->tdiag.count = 0; + d->tdiag.total = Selective_InitTime (0, 0); + d->tdiag.enter = Selective_InitTime (0, 0); + d->tdiag.exit_ = Selective_InitTime (0, 0); + break; + + + default: + M2RTS_HALT (-1); + __builtin_unreachable (); + break; + } + Head = d; + return d; + } + else + { + return NULL; + } + /* static analysis guarentees a RETURN statement will be used before here. */ + __builtin_unreachable (); +} + + +/* + EnterDiagnostic - attribute all execution time from now to TimeDiag. +*/ + +extern "C" void M2Diagnostic_EnterDiagnostic (M2Diagnostic_Diagnostic TimeDiag) +{ + if (EnableDiagnostics && (TimeDiag != NULL)) + { + Assert (TimeDiag->type == M2Diagnostic_timediag); + Assert ((Selective_GetTimeOfDay (TimeDiag->tdiag.enter)) == 0); + TimeDiag->tdiag.count += 1; + } +} + + +/* + ExitDiagnostic - stop attributing execution time to TimeDiag. +*/ + +extern "C" void M2Diagnostic_ExitDiagnostic (M2Diagnostic_Diagnostic TimeDiag) +{ + if (EnableDiagnostics && (TimeDiag != NULL)) + { + Assert (TimeDiag->type == M2Diagnostic_timediag); + Assert ((Selective_GetTimeOfDay (TimeDiag->tdiag.exit_)) == 0); + Accumulate (TimeDiag->tdiag.total, TimeDiag->tdiag.enter, TimeDiag->tdiag.exit_); + } +} + + +/* + InitMemDiagnostic - create and return a memory diagnostic. + The format string can be free form and may + contain {1M} {1d} {1x} {1P}. + {1M} is replaced by the value of the first parameter + with memory size units. + {1d} unsigned decimal. {1x} unsigned hexadecimal. + {0M} is the global allocation (Storage.mod:ALLOCATE). + {1P} is the percentage of param 1 relative + to global memory. +*/ + +extern "C" M2Diagnostic_Diagnostic M2Diagnostic_InitMemDiagnostic (const char *name_, unsigned int _name_high, const char *format_, unsigned int _format_high) +{ + unsigned int i; + M2Diagnostic_Diagnostic d; + char name[_name_high+1]; + char format[_format_high+1]; + + /* make a local copy of each unbounded array. */ + memcpy (name, name_, _name_high+1); + memcpy (format, format_, _format_high+1); + + if (EnableDiagnostics) + { + Storage_ALLOCATE ((void **) &d, sizeof (M2Diagnostic__T1)); + d->name = DynamicStrings_InitString ((const char *) name, _name_high); + d->format = DynamicStrings_InitString ((const char *) format, _format_high); + d->enable = DefaultMemEnable; + d->next = Head; + d->type = M2Diagnostic_memdiag; + switch (d->type) + { + case M2Diagnostic_memdiag: + for (i=1; i<=MaxParam; i++) + { + d->mdiag.param.array[i-1] = 0; + } + break; + + + default: + M2RTS_HALT (-1); + __builtin_unreachable (); + break; + } + Head = d; + return d; + } + else + { + return NULL; + } + /* static analysis guarentees a RETURN statement will be used before here. */ + __builtin_unreachable (); +} + + +/* + MemIncr - allow the appropriate parameter to be incremented. + All parameters are initially set to zero and are stored + as LONGCARD. +*/ + +extern "C" void M2Diagnostic_MemIncr (M2Diagnostic_Diagnostic MemDiag, unsigned int paramno, unsigned int incr) +{ + if (EnableDiagnostics && (MemDiag != NULL)) + { + CheckParam (paramno); + switch (MemDiag->type) + { + case M2Diagnostic_memdiag: + MemDiag->mdiag.param.array[paramno-1] += (long unsigned int ) (incr); + break; + + + default: + M2RTS_HALT (-1); + __builtin_unreachable (); + break; + } + } +} + + +/* + MemDecr - allow the appropriate parameter to be decremented. + All parameters are initially set to zero and are stored + as LONGCARD. +*/ + +extern "C" void M2Diagnostic_MemDecr (M2Diagnostic_Diagnostic MemDiag, unsigned int paramno, unsigned int decr) +{ + if (EnableDiagnostics && (MemDiag != NULL)) + { + CheckParam (paramno); + switch (MemDiag->type) + { + case M2Diagnostic_memdiag: + MemDiag->mdiag.param.array[paramno-1] -= (long unsigned int ) (decr); + break; + + + default: + M2RTS_HALT (-1); + __builtin_unreachable (); + break; + } + } +} + + +/* + MemSet - allow the appropriate parameter to be set to value. + All parameters are initially set to zero. +*/ + +extern "C" void M2Diagnostic_MemSet (M2Diagnostic_Diagnostic MemDiag, unsigned int paramno, unsigned int value) +{ + if (EnableDiagnostics && (MemDiag != NULL)) + { + CheckParam (paramno); + switch (MemDiag->type) + { + case M2Diagnostic_memdiag: + MemDiag->mdiag.param.array[paramno-1] = (long unsigned int ) (value); + break; + + + default: + M2RTS_HALT (-1); + __builtin_unreachable (); + break; + } + } +} + + +/* + TotalHeapIncr - increments the total heap used. +*/ + +extern "C" void M2Diagnostic_TotalHeapIncr (unsigned int incr) +{ + if (EnableDiagnostics) + { + TotalHeap = TotalHeap+((long unsigned int ) (incr)); + } +} + + +/* + TotalHeapDecr - decrements the total heap used. +*/ + +extern "C" void M2Diagnostic_TotalHeapDecr (unsigned int incr) +{ + if (EnableDiagnostics) + { + TotalHeap = TotalHeap-((long unsigned int ) (incr)); + } +} + + +/* + SetEnable - set the enable flag in Diag to value. +*/ + +extern "C" void M2Diagnostic_SetEnable (M2Diagnostic_Diagnostic Diag, bool value) +{ + if (EnableDiagnostics && (Diag != NULL)) + { + Diag->enable = value; + } +} + + +/* + Lookup - returns the Diagnostic containing name or NIL + if it does not exist. +*/ + +extern "C" M2Diagnostic_Diagnostic M2Diagnostic_Lookup (const char *name_, unsigned int _name_high) +{ + M2Diagnostic_Diagnostic ptr; + DynamicStrings_String s; + char name[_name_high+1]; + + /* make a local copy of each unbounded array. */ + memcpy (name, name_, _name_high+1); + + if (EnableDiagnostics) + { + s = DynamicStrings_InitString ((const char *) name, _name_high); + ptr = Head; + while (ptr != NULL) + { + if (DynamicStrings_Equal (ptr->name, s)) + { + s = DynamicStrings_KillString (s); + return ptr; + } + ptr = ptr->next; + } + s = DynamicStrings_KillString (s); + return NULL; + } + else + { + return NULL; + } + /* static analysis guarentees a RETURN statement will be used before here. */ + __builtin_unreachable (); +} + + +/* + GetName - returns the name of Diag. +*/ + +extern "C" DynamicStrings_String M2Diagnostic_GetName (M2Diagnostic_Diagnostic Diag) +{ + if (EnableDiagnostics && (Diag != NULL)) + { + return Diag->name; + } + else + { + return static_cast (NULL); + } + /* static analysis guarentees a RETURN statement will be used before here. */ + __builtin_unreachable (); +} + + +/* + ForeachDiagDo - for diag in global diag list do + dp (diag); + end +*/ + +extern "C" void M2Diagnostic_ForeachDiagDo (M2Diagnostic_DiagProc dp) +{ + M2Diagnostic_Diagnostic ptr; + + ptr = Head; + while (ptr != NULL) + { + (*dp.proc) (ptr); + ptr = ptr->next; + } +} + + +/* + SetDefaultConfig - force the Diag enable flag to the + time or mem global default. +*/ + +extern "C" void M2Diagnostic_SetDefaultConfig (M2Diagnostic_Diagnostic Diag) +{ + if (Diag->type == M2Diagnostic_timediag) + { + Diag->enable = DefaultTimeEnable; + } + else + { + Diag->enable = DefaultMemEnable; + } +} + + +/* + Configure - will turn on or off all the memory or time + instrumentation diagnostics and set the defaults + time and mem values. +*/ + +extern "C" void M2Diagnostic_Configure (bool time_, bool mem) +{ + if (EnableDiagnostics) + { + DefaultTimeEnable = time_; + DefaultMemEnable = mem; + M2Diagnostic_ForeachDiagDo ((M2Diagnostic_DiagProc) {(M2Diagnostic_DiagProc_t) M2Diagnostic_SetDefaultConfig}); + } +} + + +/* + Generate - return a string containing the output from + all the diagnostics enabled. +*/ + +extern "C" DynamicStrings_String M2Diagnostic_Generate (void) +{ + if (EnableDiagnostics) + { + Output = DynamicStrings_KillString (Output); + Output = DynamicStrings_InitString ((const char *) "", 0); + M2Diagnostic_ForeachDiagDo ((M2Diagnostic_DiagProc) {(M2Diagnostic_DiagProc_t) FormatDiag}); + return Output; + } + else + { + return static_cast (NULL); + } + /* static analysis guarentees a RETURN statement will be used before here. */ + __builtin_unreachable (); +} + +extern "C" void _M2_M2Diagnostic_init (__attribute__((unused)) int argc,__attribute__((unused)) char *argv[],__attribute__((unused)) char *envp[]) +{ + TotalHeap = 0; + StartTime = NULL; + TotalTime = NULL; + CreateStartTime (); + Head = NULL; + Output = static_cast (NULL); + DefaultTimeEnable = DefaultTimeEnableValue; + DefaultMemEnable = DefaultMemEnableValue; +} + +extern "C" void _M2_M2Diagnostic_fini (__attribute__((unused)) int argc,__attribute__((unused)) char *argv[],__attribute__((unused)) char *envp[]) +{ +} diff --git a/gcc/m2/pge-boot/GM2Diagnostic.h b/gcc/m2/pge-boot/GM2Diagnostic.h new file mode 100644 index 000000000000..51f592daf3bc --- /dev/null +++ b/gcc/m2/pge-boot/GM2Diagnostic.h @@ -0,0 +1,186 @@ +/* do not edit automatically generated by mc from M2Diagnostic. */ +/* M2Diagnotic provides memory and time diagnosics to the user. + +Copyright (C) 2024 Free Software Foundation, Inc. +Contributed by Gaius Mulley . + +This file is part of GNU Modula-2. + +GNU Modula-2 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. + +GNU Modula-2 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 GNU Modula-2; see the file COPYING3. If not see +. */ + + +#if !defined (_M2Diagnostic_H) +# define _M2Diagnostic_H + +#include "config.h" +#include "system.h" +# ifdef __cplusplus +extern "C" { +# endif +#include +# if !defined (PROC_D) +# define PROC_D + typedef void (*PROC_t) (void); + typedef struct { PROC_t proc; } PROC; +# endif + +# include "GDynamicStrings.h" + +# if defined (_M2Diagnostic_C) +# define EXTERN +# else +# define EXTERN extern +# endif + +#if !defined (M2Diagnostic_Diagnostic_D) +# define M2Diagnostic_Diagnostic_D + typedef void *M2Diagnostic_Diagnostic; +#endif + +typedef struct M2Diagnostic_DiagProc_p M2Diagnostic_DiagProc; + +typedef void (*M2Diagnostic_DiagProc_t) (M2Diagnostic_Diagnostic); +struct M2Diagnostic_DiagProc_p { M2Diagnostic_DiagProc_t proc; }; + + +/* + InitTimeDiagnostic - create and return a time diagnostic. + The format string can be free form and may + contain {1T}, {1C} or {1P}. + {1T} will contain the time and + {1C} the count of the number of times the + code enters the time diagnostic code region. + {1P} generates the time as a percentage. + {0T} is the total time for the application. + {{ is rendered as a single {. +*/ + +EXTERN M2Diagnostic_Diagnostic M2Diagnostic_InitTimeDiagnostic (const char *name_, unsigned int _name_high, const char *format_, unsigned int _format_high); + +/* + EnterDiagnostic - attribute all execution time from now to TimeDiag. +*/ + +EXTERN void M2Diagnostic_EnterDiagnostic (M2Diagnostic_Diagnostic TimeDiag); + +/* + ExitDiagnostic - stop attributing execution time to TimeDiag. +*/ + +EXTERN void M2Diagnostic_ExitDiagnostic (M2Diagnostic_Diagnostic TimeDiag); + +/* + InitMemDiagnostic - create and return a memory diagnostic. + The format string can be free form and may + contain {1M} {1d} {1x} {1P}. + {1M} is replaced by the value of the first parameter + with memory size units. + {1d} unsigned decimal. {1x} unsigned hexadecimal. + {0M} is the global allocation (Storage.mod:ALLOCATE). + {1P} is the percentage of param 1 relative + to global memory. +*/ + +EXTERN M2Diagnostic_Diagnostic M2Diagnostic_InitMemDiagnostic (const char *name_, unsigned int _name_high, const char *format_, unsigned int _format_high); + +/* + MemIncr - allow the appropriate parameter to be incremented. + All parameters are initially set to zero and are stored + as LONGCARD. +*/ + +EXTERN void M2Diagnostic_MemIncr (M2Diagnostic_Diagnostic MemDiag, unsigned int paramno, unsigned int incr); + +/* + MemDecr - allow the appropriate parameter to be decremented. + All parameters are initially set to zero and are stored + as LONGCARD. +*/ + +EXTERN void M2Diagnostic_MemDecr (M2Diagnostic_Diagnostic MemDiag, unsigned int paramno, unsigned int decr); + +/* + MemSet - allow the appropriate parameter to be set to value. + All parameters are initially set to zero. +*/ + +EXTERN void M2Diagnostic_MemSet (M2Diagnostic_Diagnostic MemDiag, unsigned int paramno, unsigned int value); + +/* + TotalHeapIncr - increments the total heap used. +*/ + +EXTERN void M2Diagnostic_TotalHeapIncr (unsigned int incr); + +/* + TotalHeapDecr - decrements the total heap used. +*/ + +EXTERN void M2Diagnostic_TotalHeapDecr (unsigned int incr); + +/* + SetEnable - set the enable flag in Diag to value. +*/ + +EXTERN void M2Diagnostic_SetEnable (M2Diagnostic_Diagnostic Diag, bool value); + +/* + Lookup - returns the Diagnostic containing name or NIL + if it does not exist. +*/ + +EXTERN M2Diagnostic_Diagnostic M2Diagnostic_Lookup (const char *name_, unsigned int _name_high); + +/* + GetName - returns the name of Diag. +*/ + +EXTERN DynamicStrings_String M2Diagnostic_GetName (M2Diagnostic_Diagnostic Diag); + +/* + ForeachDiagDo - for diag in global diag list do + dp (diag); + end +*/ + +EXTERN void M2Diagnostic_ForeachDiagDo (M2Diagnostic_DiagProc dp); + +/* + SetDefaultConfig - force the Diag enable flag to the + time or mem global default. +*/ + +EXTERN void M2Diagnostic_SetDefaultConfig (M2Diagnostic_Diagnostic Diag); + +/* + Configure - will turn on or off all the memory or time + instrumentation diagnostics and set the defaults + time and mem values. +*/ + +EXTERN void M2Diagnostic_Configure (bool time_, bool mem); + +/* + Generate - return a string containing the output from + all the diagnostics enabled. +*/ + +EXTERN DynamicStrings_String M2Diagnostic_Generate (void); +# ifdef __cplusplus +} +# endif + +# undef EXTERN +#endif diff --git a/gcc/m2/pge-boot/GSelective.h b/gcc/m2/pge-boot/GSelective.h new file mode 100644 index 000000000000..67b7f0643f05 --- /dev/null +++ b/gcc/m2/pge-boot/GSelective.h @@ -0,0 +1,83 @@ +/* do not edit automatically generated by mc from Selective. */ +/* Selective.def provides Modula-2 with access to the select(2) primitive. + +Copyright (C) 2001-2024 Free Software Foundation, Inc. +Contributed by Gaius Mulley . + +This file is part of GNU Modula-2. + +GNU Modula-2 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. + +GNU Modula-2 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 +. */ + + +#if !defined (_Selective_H) +# define _Selective_H + +#include "config.h" +#include "system.h" +# ifdef __cplusplus +extern "C" { +# endif +#include +# if !defined (PROC_D) +# define PROC_D + typedef void (*PROC_t) (void); + typedef struct { PROC_t proc; } PROC; +# endif + +# include "GSYSTEM.h" + +# if defined (_Selective_C) +# define EXTERN +# else +# define EXTERN extern +# endif + +typedef void *Selective_SetOfFd; + +typedef void *Selective_Timeval; + +EXTERN int Selective_Select (unsigned int nooffds, Selective_SetOfFd readfds, Selective_SetOfFd writefds, Selective_SetOfFd exceptfds, Selective_Timeval timeout); +EXTERN Selective_Timeval Selective_InitTime (unsigned int sec, unsigned int usec); +EXTERN Selective_Timeval Selective_KillTime (Selective_Timeval t); +EXTERN void Selective_GetTime (Selective_Timeval t, unsigned int *sec, unsigned int *usec); +EXTERN void Selective_SetTime (Selective_Timeval t, unsigned int sec, unsigned int usec); +EXTERN Selective_SetOfFd Selective_InitSet (void); +EXTERN Selective_SetOfFd Selective_KillSet (Selective_SetOfFd s); +EXTERN void Selective_FdZero (Selective_SetOfFd s); +EXTERN void Selective_FdSet (int fd, Selective_SetOfFd s); +EXTERN void Selective_FdClr (int fd, Selective_SetOfFd s); +EXTERN bool Selective_FdIsSet (int fd, Selective_SetOfFd s); +EXTERN int Selective_MaxFdsPlusOne (int a, int b); +EXTERN void Selective_WriteCharRaw (int fd, char ch); +EXTERN char Selective_ReadCharRaw (int fd); + +/* + GetTimeOfDay - fills in a record, Timeval, filled in with the + current system time in seconds and microseconds. + It returns zero (see man 3p gettimeofday) +*/ + +EXTERN int Selective_GetTimeOfDay (Selective_Timeval tv); +# ifdef __cplusplus +} +# endif + +# undef EXTERN +#endif diff --git a/gcc/m2/pge-boot/GStringConvert.cc b/gcc/m2/pge-boot/GStringConvert.cc new file mode 100644 index 000000000000..b0dc826b6478 --- /dev/null +++ b/gcc/m2/pge-boot/GStringConvert.cc @@ -0,0 +1,2006 @@ +/* do not edit automatically generated by mc from StringConvert. */ +/* StringConvert.mod provides functions to convert numbers to and from strings. + +Copyright (C) 2001-2023 Free Software Foundation, Inc. +Contributed by Gaius Mulley . + +This file is part of GNU Modula-2. + +GNU Modula-2 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. + +GNU Modula-2 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 +# if !defined (PROC_D) +# define PROC_D + typedef void (*PROC_t) (void); + typedef struct { PROC_t proc; } PROC; +# endif + +# if !defined (TRUE) +# define TRUE (1==1) +# endif + +# if !defined (FALSE) +# define FALSE (1==0) +# endif + +#include +#include +#include +#include +#if defined(__cplusplus) +# undef NULL +# define NULL 0 +#endif +#define _StringConvert_H +#define _StringConvert_C + +# include "GSYSTEM.h" +# include "Glibc.h" +# include "Glibm.h" +# include "GM2RTS.h" +# include "GDynamicStrings.h" +# include "Gldtoa.h" +# include "Gdtoa.h" + + +/* + IntegerToString - converts INTEGER, i, into a String. The field with can be specified + if non zero. Leading characters are defined by padding and this + function will prepend a + if sign is set to TRUE. + The base allows the caller to generate binary, octal, decimal, hexidecimal + numbers. The value of lower is only used when hexidecimal numbers are + generated and if TRUE then digits abcdef are used, and if FALSE then ABCDEF + are used. +*/ + +extern "C" DynamicStrings_String StringConvert_IntegerToString (int i, unsigned int width, char padding, bool sign, unsigned int base, bool lower); + +/* + CardinalToString - converts CARDINAL, c, into a String. The field with can be specified + if non zero. Leading characters are defined by padding. + The base allows the caller to generate binary, octal, decimal, hexidecimal + numbers. The value of lower is only used when hexidecimal numbers are + generated and if TRUE then digits abcdef are used, and if FALSE then ABCDEF + are used. +*/ + +extern "C" DynamicStrings_String StringConvert_CardinalToString (unsigned int c, unsigned int width, char padding, unsigned int base, bool lower); + +/* + StringToInteger - converts a string, s, of, base, into an INTEGER. + Leading white space is ignored. It stops converting + when either the string is exhausted or if an illegal + numeral is found. + The parameter found is set TRUE if a number was found. +*/ + +extern "C" int StringConvert_StringToInteger (DynamicStrings_String s, unsigned int base, bool *found); + +/* + StringToCardinal - converts a string, s, of, base, into a CARDINAL. + Leading white space is ignored. It stops converting + when either the string is exhausted or if an illegal + numeral is found. + The parameter found is set TRUE if a number was found. +*/ + +extern "C" unsigned int StringConvert_StringToCardinal (DynamicStrings_String s, unsigned int base, bool *found); + +/* + LongIntegerToString - converts LONGINT, i, into a String. The field with + can be specified if non zero. Leading characters + are defined by padding and this function will + prepend a + if sign is set to TRUE. + The base allows the caller to generate binary, + octal, decimal, hexidecimal numbers. + The value of lower is only used when hexidecimal + numbers are generated and if TRUE then digits + abcdef are used, and if FALSE then ABCDEF are used. +*/ + +extern "C" DynamicStrings_String StringConvert_LongIntegerToString (long int i, unsigned int width, char padding, bool sign, unsigned int base, bool lower); + +/* + StringToLongInteger - converts a string, s, of, base, into an LONGINT. + Leading white space is ignored. It stops converting + when either the string is exhausted or if an illegal + numeral is found. + The parameter found is set TRUE if a number was found. +*/ + +extern "C" long int StringConvert_StringToLongInteger (DynamicStrings_String s, unsigned int base, bool *found); + +/* + LongCardinalToString - converts LONGCARD, c, into a String. The field + width can be specified if non zero. Leading + characters are defined by padding. + The base allows the caller to generate binary, + octal, decimal, hexidecimal numbers. + The value of lower is only used when hexidecimal + numbers are generated and if TRUE then digits + abcdef are used, and if FALSE then ABCDEF are used. +*/ + +extern "C" DynamicStrings_String StringConvert_LongCardinalToString (long unsigned int c, unsigned int width, char padding, unsigned int base, bool lower); + +/* + StringToLongCardinal - converts a string, s, of, base, into a LONGCARD. + Leading white space is ignored. It stops converting + when either the string is exhausted or if an illegal + numeral is found. + The parameter found is set TRUE if a number was found. +*/ + +extern "C" long unsigned int StringConvert_StringToLongCardinal (DynamicStrings_String s, unsigned int base, bool *found); + +/* + ShortCardinalToString - converts SHORTCARD, c, into a String. The field + width can be specified if non zero. Leading + characters are defined by padding. + The base allows the caller to generate binary, + octal, decimal, hexidecimal numbers. + The value of lower is only used when hexidecimal + numbers are generated and if TRUE then digits + abcdef are used, and if FALSE then ABCDEF are used. +*/ + +extern "C" DynamicStrings_String StringConvert_ShortCardinalToString (short unsigned int c, unsigned int width, char padding, unsigned int base, bool lower); + +/* + StringToShortCardinal - converts a string, s, of, base, into a SHORTCARD. + Leading white space is ignored. It stops converting + when either the string is exhausted or if an illegal + numeral is found. + The parameter found is set TRUE if a number was found. +*/ + +extern "C" short unsigned int StringConvert_StringToShortCardinal (DynamicStrings_String s, unsigned int base, bool *found); + +/* + stoi - decimal string to INTEGER +*/ + +extern "C" int StringConvert_stoi (DynamicStrings_String s); + +/* + itos - integer to decimal string. +*/ + +extern "C" DynamicStrings_String StringConvert_itos (int i, unsigned int width, char padding, bool sign); + +/* + ctos - cardinal to decimal string. +*/ + +extern "C" DynamicStrings_String StringConvert_ctos (unsigned int c, unsigned int width, char padding); + +/* + stoc - decimal string to CARDINAL +*/ + +extern "C" unsigned int StringConvert_stoc (DynamicStrings_String s); + +/* + hstoi - hexidecimal string to INTEGER +*/ + +extern "C" int StringConvert_hstoi (DynamicStrings_String s); + +/* + ostoi - octal string to INTEGER +*/ + +extern "C" int StringConvert_ostoi (DynamicStrings_String s); + +/* + bstoi - binary string to INTEGER +*/ + +extern "C" int StringConvert_bstoi (DynamicStrings_String s); + +/* + hstoc - hexidecimal string to CARDINAL +*/ + +extern "C" unsigned int StringConvert_hstoc (DynamicStrings_String s); + +/* + ostoc - octal string to CARDINAL +*/ + +extern "C" unsigned int StringConvert_ostoc (DynamicStrings_String s); + +/* + bstoc - binary string to CARDINAL +*/ + +extern "C" unsigned int StringConvert_bstoc (DynamicStrings_String s); + +/* + StringToLongreal - returns a LONGREAL and sets found to TRUE if a legal number is seen. +*/ + +extern "C" long double StringConvert_StringToLongreal (DynamicStrings_String s, bool *found); + +/* + LongrealToString - converts a LONGREAL number, Real, which has, + TotalWidth, and FractionWidth into a string. + It uses decimal notation. + + So for example: + + LongrealToString(1.0, 4, 2) -> '1.00' + LongrealToString(12.3, 5, 2) -> '12.30' + LongrealToString(12.3, 6, 2) -> ' 12.30' + LongrealToString(12.3, 6, 3) -> '12.300' + + if total width is too small then the fraction + becomes truncated. + + LongrealToString(12.3, 5, 3) -> '12.30' + + Positive numbers do not have a '+' prepended. + Negative numbers will have a '-' prepended and + the TotalWidth will need to be large enough + to contain the sign, whole number, '.' and + fractional components. +*/ + +extern "C" DynamicStrings_String StringConvert_LongrealToString (long double x, unsigned int TotalWidth, unsigned int FractionWidth); + +/* + stor - returns a REAL given a string. +*/ + +extern "C" double StringConvert_stor (DynamicStrings_String s); + +/* + stolr - returns a LONGREAL given a string. +*/ + +extern "C" long double StringConvert_stolr (DynamicStrings_String s); + +/* + ToSigFig - returns a floating point or base 10 integer + string which is accurate to, n, significant + figures. It will return a new String + and, s, will be destroyed. + + + So: 12.345 + + rounded to the following significant figures yields + + 5 12.345 + 4 12.34 + 3 12.3 + 2 12 + 1 10 +*/ + +extern "C" DynamicStrings_String StringConvert_ToSigFig (DynamicStrings_String s, unsigned int n); + +/* + ToDecimalPlaces - returns a floating point or base 10 integer + string which is accurate to, n, decimal + places. It will return a new String + and, s, will be destroyed. + Decimal places yields, n, digits after + the . + + So: 12.345 + + rounded to the following decimal places yields + + 5 12.34500 + 4 12.3450 + 3 12.345 + 2 12.34 + 1 12.3 +*/ + +extern "C" DynamicStrings_String StringConvert_ToDecimalPlaces (DynamicStrings_String s, unsigned int n); + +/* + Assert - implement a simple assert. +*/ + +static void Assert (bool b, const char *file_, unsigned int _file_high, unsigned int line, const char *func_, unsigned int _func_high); + +/* + Max - +*/ + +static unsigned int Max (unsigned int a, unsigned int b); + +/* + Min - +*/ + +static unsigned int Min (unsigned int a, unsigned int b); + +/* + LongMin - returns the smallest LONGCARD +*/ + +static long unsigned int LongMin (long unsigned int a, long unsigned int b); + +/* + IsDigit - returns TRUE if, ch, lies between '0'..'9'. +*/ + +static bool IsDigit (char ch); + +/* + IsDecimalDigitValid - returns the TRUE if, ch, is a base legal decimal digit. + If legal then the value is appended numerically onto, c. +*/ + +static bool IsDecimalDigitValid (char ch, unsigned int base, unsigned int *c); + +/* + IsHexidecimalDigitValid - returns the TRUE if, ch, is a base legal hexidecimal digit. + If legal then the value is appended numerically onto, c. +*/ + +static bool IsHexidecimalDigitValid (char ch, unsigned int base, unsigned int *c); + +/* + IsDecimalDigitValidLong - returns the TRUE if, ch, is a base legal decimal digit. + If legal then the value is appended numerically onto, c. +*/ + +static bool IsDecimalDigitValidLong (char ch, unsigned int base, long unsigned int *c); + +/* + IsHexidecimalDigitValidLong - returns the TRUE if, ch, is a base legal hexidecimal digit. + If legal then the value is appended numerically onto, c. +*/ + +static bool IsHexidecimalDigitValidLong (char ch, unsigned int base, long unsigned int *c); + +/* + IsDecimalDigitValidShort - returns the TRUE if, ch, is a base legal decimal digit. + If legal then the value is appended numerically onto, c. +*/ + +static bool IsDecimalDigitValidShort (char ch, unsigned int base, short unsigned int *c); + +/* + IsHexidecimalDigitValidShort - returns the TRUE if, ch, is a base legal hexidecimal digit. + If legal then the value is appended numerically onto, c. +*/ + +static bool IsHexidecimalDigitValidShort (char ch, unsigned int base, short unsigned int *c); + +/* + ToThePower10 - returns a LONGREAL containing the value of v * 10^power. +*/ + +static long double ToThePower10 (long double v, int power); + +/* + DetermineSafeTruncation - we wish to use TRUNC when converting REAL/LONGREAL + into a string for the non fractional component. + However we need a simple method to + determine the maximum safe truncation value. +*/ + +static unsigned int DetermineSafeTruncation (void); + +/* + rtos - +*/ + +static DynamicStrings_String rtos (double r, unsigned int TotalWidth, unsigned int FractionWidth); + +/* + lrtos - +*/ + +static DynamicStrings_String lrtos (long double r, unsigned int TotalWidth, unsigned int FractionWidth); + +/* + doDecimalPlaces - returns a string which is accurate to + n decimal places. It returns a new String + and, s, will be destroyed. +*/ + +static DynamicStrings_String doDecimalPlaces (DynamicStrings_String s, unsigned int n); + +/* + doSigFig - returns a string which is accurate to + n decimal places. It returns a new String + and, s, will be destroyed. +*/ + +static DynamicStrings_String doSigFig (DynamicStrings_String s, unsigned int n); + +/* + carryOne - add a carry at position, i. +*/ + +static DynamicStrings_String carryOne (DynamicStrings_String s, unsigned int i); + + +/* + Assert - implement a simple assert. +*/ + +static void Assert (bool b, const char *file_, unsigned int _file_high, unsigned int line, const char *func_, unsigned int _func_high) +{ + char file[_file_high+1]; + char func[_func_high+1]; + + /* make a local copy of each unbounded array. */ + memcpy (file, file_, _file_high+1); + memcpy (func, func_, _func_high+1); + + if (! b) + { + M2RTS_ErrorMessage ((const char *) "assert failed", 13, (const char *) file, _file_high, line, (const char *) func, _func_high); + } +} + + +/* + Max - +*/ + +static unsigned int Max (unsigned int a, unsigned int b) +{ + if (a > b) + { + return a; + } + else + { + return b; + } + /* static analysis guarentees a RETURN statement will be used before here. */ + __builtin_unreachable (); +} + + +/* + Min - +*/ + +static unsigned int Min (unsigned int a, unsigned int b) +{ + if (a < b) + { + return a; + } + else + { + return b; + } + /* static analysis guarentees a RETURN statement will be used before here. */ + __builtin_unreachable (); +} + + +/* + LongMin - returns the smallest LONGCARD +*/ + +static long unsigned int LongMin (long unsigned int a, long unsigned int b) +{ + if (a < b) + { + return a; + } + else + { + return b; + } + /* static analysis guarentees a RETURN statement will be used before here. */ + __builtin_unreachable (); +} + + +/* + IsDigit - returns TRUE if, ch, lies between '0'..'9'. +*/ + +static bool IsDigit (char ch) +{ + return (ch >= '0') && (ch <= '9'); + /* static analysis guarentees a RETURN statement will be used before here. */ + __builtin_unreachable (); +} + + +/* + IsDecimalDigitValid - returns the TRUE if, ch, is a base legal decimal digit. + If legal then the value is appended numerically onto, c. +*/ + +static bool IsDecimalDigitValid (char ch, unsigned int base, unsigned int *c) +{ + if ((IsDigit (ch)) && (( ((unsigned int) (ch))- ((unsigned int) ('0'))) < base)) + { + (*c) = ((*c)*base)+( ((unsigned int) (ch))- ((unsigned int) ('0'))); + return true; + } + else + { + return false; + } + /* static analysis guarentees a RETURN statement will be used before here. */ + __builtin_unreachable (); +} + + +/* + IsHexidecimalDigitValid - returns the TRUE if, ch, is a base legal hexidecimal digit. + If legal then the value is appended numerically onto, c. +*/ + +static bool IsHexidecimalDigitValid (char ch, unsigned int base, unsigned int *c) +{ + if (((ch >= 'a') && (ch <= 'f')) && ((( ((unsigned int) (ch))- ((unsigned int) ('a')))+10) < base)) + { + (*c) = ((*c)*base)+(( ((unsigned int) (ch))- ((unsigned int) ('a')))+10); + return true; + } + else if (((ch >= 'A') && (ch <= 'F')) && ((( ((unsigned int) (ch))- ((unsigned int) ('F')))+10) < base)) + { + /* avoid dangling else. */ + (*c) = ((*c)*base)+(( ((unsigned int) (ch))- ((unsigned int) ('A')))+10); + return true; + } + else + { + /* avoid dangling else. */ + return false; + } + /* static analysis guarentees a RETURN statement will be used before here. */ + __builtin_unreachable (); +} + + +/* + IsDecimalDigitValidLong - returns the TRUE if, ch, is a base legal decimal digit. + If legal then the value is appended numerically onto, c. +*/ + +static bool IsDecimalDigitValidLong (char ch, unsigned int base, long unsigned int *c) +{ + if ((IsDigit (ch)) && (( ((unsigned int) (ch))- ((unsigned int) ('0'))) < base)) + { + (*c) = (*c)*((long unsigned int ) (base+( ((unsigned int) (ch))- ((unsigned int) ('0'))))); + return true; + } + else + { + return false; + } + /* static analysis guarentees a RETURN statement will be used before here. */ + __builtin_unreachable (); +} + + +/* + IsHexidecimalDigitValidLong - returns the TRUE if, ch, is a base legal hexidecimal digit. + If legal then the value is appended numerically onto, c. +*/ + +static bool IsHexidecimalDigitValidLong (char ch, unsigned int base, long unsigned int *c) +{ + if (((ch >= 'a') && (ch <= 'f')) && ((( ((unsigned int) (ch))- ((unsigned int) ('a')))+10) < base)) + { + (*c) = (*c)*((long unsigned int ) (base+(( ((unsigned int) (ch))- ((unsigned int) ('a')))+10))); + return true; + } + else if (((ch >= 'A') && (ch <= 'F')) && ((( ((unsigned int) (ch))- ((unsigned int) ('F')))+10) < base)) + { + /* avoid dangling else. */ + (*c) = (*c)*((long unsigned int ) (base+(( ((unsigned int) (ch))- ((unsigned int) ('A')))+10))); + return true; + } + else + { + /* avoid dangling else. */ + return false; + } + /* static analysis guarentees a RETURN statement will be used before here. */ + __builtin_unreachable (); +} + + +/* + IsDecimalDigitValidShort - returns the TRUE if, ch, is a base legal decimal digit. + If legal then the value is appended numerically onto, c. +*/ + +static bool IsDecimalDigitValidShort (char ch, unsigned int base, short unsigned int *c) +{ + if ((IsDigit (ch)) && (( ((unsigned int) (ch))- ((unsigned int) ('0'))) < base)) + { + (*c) = (*c)*((short unsigned int ) (base+( ((unsigned int) (ch))- ((unsigned int) ('0'))))); + return true; + } + else + { + return false; + } + /* static analysis guarentees a RETURN statement will be used before here. */ + __builtin_unreachable (); +} + + +/* + IsHexidecimalDigitValidShort - returns the TRUE if, ch, is a base legal hexidecimal digit. + If legal then the value is appended numerically onto, c. +*/ + +static bool IsHexidecimalDigitValidShort (char ch, unsigned int base, short unsigned int *c) +{ + if (((ch >= 'a') && (ch <= 'f')) && ((( ((unsigned int) (ch))- ((unsigned int) ('a')))+10) < base)) + { + (*c) = (*c)*((short unsigned int ) (base+(( ((unsigned int) (ch))- ((unsigned int) ('a')))+10))); + return true; + } + else if (((ch >= 'A') && (ch <= 'F')) && ((( ((unsigned int) (ch))- ((unsigned int) ('F')))+10) < base)) + { + /* avoid dangling else. */ + (*c) = (*c)*((short unsigned int ) (base+(( ((unsigned int) (ch))- ((unsigned int) ('A')))+10))); + return true; + } + else + { + /* avoid dangling else. */ + return false; + } + /* static analysis guarentees a RETURN statement will be used before here. */ + __builtin_unreachable (); +} + + +/* + ToThePower10 - returns a LONGREAL containing the value of v * 10^power. +*/ + +static long double ToThePower10 (long double v, int power) +{ + int i; + + i = 0; + if (power > 0) + { + while (i < power) + { + v = v*10.0; + i += 1; + } + } + else + { + while (i > power) + { + v = v/10.0; + i -= 1; + } + } + return v; + /* static analysis guarentees a RETURN statement will be used before here. */ + __builtin_unreachable (); +} + + +/* + DetermineSafeTruncation - we wish to use TRUNC when converting REAL/LONGREAL + into a string for the non fractional component. + However we need a simple method to + determine the maximum safe truncation value. +*/ + +static unsigned int DetermineSafeTruncation (void) +{ + double MaxPowerOfTen; + unsigned int LogPower; + + MaxPowerOfTen = static_cast (1.0); + LogPower = 0; + while ((MaxPowerOfTen*10.0) < ((double) ((INT_MAX) / 10))) + { + MaxPowerOfTen = MaxPowerOfTen*10.0; + LogPower += 1; + } + return LogPower; + /* static analysis guarentees a RETURN statement will be used before here. */ + __builtin_unreachable (); +} + + +/* + rtos - +*/ + +static DynamicStrings_String rtos (double r, unsigned int TotalWidth, unsigned int FractionWidth) +{ + M2RTS_HALT (-1); + __builtin_unreachable (); + return static_cast (NULL); + /* static analysis guarentees a RETURN statement will be used before here. */ + __builtin_unreachable (); +} + + +/* + lrtos - +*/ + +static DynamicStrings_String lrtos (long double r, unsigned int TotalWidth, unsigned int FractionWidth) +{ + M2RTS_HALT (-1); + __builtin_unreachable (); + return static_cast (NULL); + /* static analysis guarentees a RETURN statement will be used before here. */ + __builtin_unreachable (); +} + + +/* + doDecimalPlaces - returns a string which is accurate to + n decimal places. It returns a new String + and, s, will be destroyed. +*/ + +static DynamicStrings_String doDecimalPlaces (DynamicStrings_String s, unsigned int n) +{ + int i; + int l; + int point; + DynamicStrings_String t; + DynamicStrings_String tenths; + DynamicStrings_String hundreths; + + l = DynamicStrings_Length (s); + i = 0; + /* remove '.' */ + point = DynamicStrings_Index (s, '.', 0); + if (point == 0) + { + s = DynamicStrings_Slice (DynamicStrings_Mark (s), 1, 0); + } + else if (point < l) + { + /* avoid dangling else. */ + s = DynamicStrings_ConCat (DynamicStrings_Slice (DynamicStrings_Mark (s), 0, point), DynamicStrings_Mark (DynamicStrings_Slice (DynamicStrings_Mark (s), point+1, 0))); + } + else + { + /* avoid dangling else. */ + s = DynamicStrings_Slice (DynamicStrings_Mark (s), 0, point); + } + l = DynamicStrings_Length (s); + i = 0; + if (l > 0) + { + /* skip over leading zeros */ + while ((i < l) && ((DynamicStrings_char (s, i)) == '0')) + { + i += 1; + } + /* was the string full of zeros? */ + if ((i == l) && ((DynamicStrings_char (s, i-1)) == '0')) + { + s = DynamicStrings_KillString (s); + s = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "0.", 2), DynamicStrings_Mark (DynamicStrings_Mult (DynamicStrings_Mark (DynamicStrings_InitStringChar ('0')), n))); + return s; + } + } + /* insert leading zero */ + s = DynamicStrings_ConCat (DynamicStrings_InitStringChar ('0'), DynamicStrings_Mark (s)); + point += 1; /* and move point position to correct place */ + l = DynamicStrings_Length (s); /* update new length */ + i = point; /* update new length */ + while ((n > 1) && (i < l)) + { + n -= 1; + i += 1; + } + if ((i+3) <= l) + { + t = DynamicStrings_Dup (s); + hundreths = DynamicStrings_Slice (DynamicStrings_Mark (s), i+1, i+3); + s = t; + if ((StringConvert_stoc (hundreths)) >= 50) + { + s = carryOne (DynamicStrings_Mark (s), static_cast (i)); + } + hundreths = DynamicStrings_KillString (hundreths); + } + else if ((i+2) <= l) + { + /* avoid dangling else. */ + t = DynamicStrings_Dup (s); + tenths = DynamicStrings_Slice (DynamicStrings_Mark (s), i+1, i+2); + s = t; + if ((StringConvert_stoc (tenths)) >= 5) + { + s = carryOne (DynamicStrings_Mark (s), static_cast (i)); + } + tenths = DynamicStrings_KillString (tenths); + } + /* check whether we need to remove the leading zero */ + if ((DynamicStrings_char (s, 0)) == '0') + { + s = DynamicStrings_Slice (DynamicStrings_Mark (s), 1, 0); + l -= 1; + point -= 1; + } + if (i < l) + { + s = DynamicStrings_Slice (DynamicStrings_Mark (s), 0, i); + l = DynamicStrings_Length (s); + if (l < point) + { + s = DynamicStrings_ConCat (s, DynamicStrings_Mult (DynamicStrings_Mark (DynamicStrings_InitStringChar ('0')), static_cast (point-l))); + } + } + /* re-insert the point */ + if (point >= 0) + { + /* avoid gcc warning by using compound statement even if not strictly necessary. */ + if (point == 0) + { + s = DynamicStrings_ConCat (DynamicStrings_InitStringChar ('.'), DynamicStrings_Mark (s)); + } + else + { + s = DynamicStrings_ConCat (DynamicStrings_ConCatChar (DynamicStrings_Slice (DynamicStrings_Mark (s), 0, point), '.'), DynamicStrings_Mark (DynamicStrings_Slice (DynamicStrings_Mark (s), point, 0))); + } + } + return s; + /* static analysis guarentees a RETURN statement will be used before here. */ + __builtin_unreachable (); +} + + +/* + doSigFig - returns a string which is accurate to + n decimal places. It returns a new String + and, s, will be destroyed. +*/ + +static DynamicStrings_String doSigFig (DynamicStrings_String s, unsigned int n) +{ + int i; + int l; + int z; + int point; + DynamicStrings_String t; + DynamicStrings_String tenths; + DynamicStrings_String hundreths; + + l = DynamicStrings_Length (s); + i = 0; + /* remove '.' */ + point = DynamicStrings_Index (s, '.', 0); + if (point >= 0) + { + if (point == 0) + { + s = DynamicStrings_Slice (DynamicStrings_Mark (s), 1, 0); + } + else if (point < l) + { + /* avoid dangling else. */ + s = DynamicStrings_ConCat (DynamicStrings_Slice (DynamicStrings_Mark (s), 0, point), DynamicStrings_Mark (DynamicStrings_Slice (DynamicStrings_Mark (s), point+1, 0))); + } + else + { + /* avoid dangling else. */ + s = DynamicStrings_Slice (DynamicStrings_Mark (s), 0, point); + } + } + else + { + s = DynamicStrings_Dup (DynamicStrings_Mark (s)); + } + l = DynamicStrings_Length (s); + i = 0; + if (l > 0) + { + /* skip over leading zeros */ + while ((i < l) && ((DynamicStrings_char (s, i)) == '0')) + { + i += 1; + } + /* was the string full of zeros? */ + if ((i == l) && ((DynamicStrings_char (s, i-1)) == '0')) + { + /* truncate string */ + s = DynamicStrings_Slice (DynamicStrings_Mark (s), 0, static_cast (n)); + i = n; + } + } + /* add a leading zero in case we need to overflow the carry */ + z = i; /* remember where we inserted zero */ + if (z == 0) /* remember where we inserted zero */ + { + s = DynamicStrings_ConCat (DynamicStrings_InitStringChar ('0'), DynamicStrings_Mark (s)); + } + else + { + s = DynamicStrings_ConCat (DynamicStrings_ConCatChar (DynamicStrings_Slice (DynamicStrings_Mark (s), 0, i), '0'), DynamicStrings_Mark (DynamicStrings_Slice (DynamicStrings_Mark (s), i, 0))); + } + n += 1; /* and increase the number of sig figs needed */ + l = DynamicStrings_Length (s); /* and increase the number of sig figs needed */ + while ((n > 1) && (i < l)) + { + n -= 1; + i += 1; + } + if ((i+3) <= l) + { + t = DynamicStrings_Dup (s); + hundreths = DynamicStrings_Slice (DynamicStrings_Mark (s), i+1, i+3); + s = t; + if ((StringConvert_stoc (hundreths)) >= 50) + { + s = carryOne (DynamicStrings_Mark (s), static_cast (i)); + } + hundreths = DynamicStrings_KillString (hundreths); + } + else if ((i+2) <= l) + { + /* avoid dangling else. */ + t = DynamicStrings_Dup (s); + tenths = DynamicStrings_Slice (DynamicStrings_Mark (s), i+1, i+2); + s = t; + if ((StringConvert_stoc (tenths)) >= 5) + { + s = carryOne (DynamicStrings_Mark (s), static_cast (i)); + } + tenths = DynamicStrings_KillString (tenths); + } + /* check whether we need to remove the leading zero */ + if ((DynamicStrings_char (s, z)) == '0') + { + if (z == 0) + { + s = DynamicStrings_Slice (DynamicStrings_Mark (s), z+1, 0); + } + else + { + s = DynamicStrings_ConCat (DynamicStrings_Slice (DynamicStrings_Mark (s), 0, z), DynamicStrings_Mark (DynamicStrings_Slice (DynamicStrings_Mark (s), z+1, 0))); + } + l = DynamicStrings_Length (s); + } + else + { + point += 1; + } + if (i < l) + { + s = DynamicStrings_Slice (DynamicStrings_Mark (s), 0, i); + l = DynamicStrings_Length (s); + if (l < point) + { + s = DynamicStrings_ConCat (s, DynamicStrings_Mult (DynamicStrings_Mark (DynamicStrings_InitStringChar ('0')), static_cast (point-l))); + } + } + /* re-insert the point */ + if (point >= 0) + { + /* avoid gcc warning by using compound statement even if not strictly necessary. */ + if (point == 0) + { + s = DynamicStrings_ConCat (DynamicStrings_InitStringChar ('.'), DynamicStrings_Mark (s)); + } + else + { + s = DynamicStrings_ConCat (DynamicStrings_ConCatChar (DynamicStrings_Slice (DynamicStrings_Mark (s), 0, point), '.'), DynamicStrings_Mark (DynamicStrings_Slice (DynamicStrings_Mark (s), point, 0))); + } + } + return s; + /* static analysis guarentees a RETURN statement will be used before here. */ + __builtin_unreachable (); +} + + +/* + carryOne - add a carry at position, i. +*/ + +static DynamicStrings_String carryOne (DynamicStrings_String s, unsigned int i) +{ + if (i >= 0) + { + if (IsDigit (DynamicStrings_char (s, static_cast (i)))) + { + /* avoid gcc warning by using compound statement even if not strictly necessary. */ + if ((DynamicStrings_char (s, static_cast (i))) == '9') + { + if (i == 0) + { + s = DynamicStrings_ConCat (DynamicStrings_InitStringChar ('1'), DynamicStrings_Mark (s)); + return s; + } + else + { + s = DynamicStrings_ConCat (DynamicStrings_ConCatChar (DynamicStrings_Slice (DynamicStrings_Mark (s), 0, static_cast (i)), '0'), DynamicStrings_Mark (DynamicStrings_Slice (DynamicStrings_Mark (s), static_cast (i+1), 0))); + return carryOne (s, i-1); + } + } + else + { + if (i == 0) + { + s = DynamicStrings_ConCat (DynamicStrings_InitStringChar ( ((char) ( ((unsigned int) (DynamicStrings_char (s, static_cast (i))))+1))), DynamicStrings_Mark (DynamicStrings_Slice (DynamicStrings_Mark (s), static_cast (i+1), 0))); + } + else + { + s = DynamicStrings_ConCat (DynamicStrings_ConCatChar (DynamicStrings_Slice (DynamicStrings_Mark (s), 0, static_cast (i)), ((char) ( ((unsigned int) (DynamicStrings_char (s, static_cast (i))))+1))), DynamicStrings_Mark (DynamicStrings_Slice (DynamicStrings_Mark (s), static_cast (i+1), 0))); + } + } + } + } + return s; + /* static analysis guarentees a RETURN statement will be used before here. */ + __builtin_unreachable (); +} + + +/* + IntegerToString - converts INTEGER, i, into a String. The field with can be specified + if non zero. Leading characters are defined by padding and this + function will prepend a + if sign is set to TRUE. + The base allows the caller to generate binary, octal, decimal, hexidecimal + numbers. The value of lower is only used when hexidecimal numbers are + generated and if TRUE then digits abcdef are used, and if FALSE then ABCDEF + are used. +*/ + +extern "C" DynamicStrings_String StringConvert_IntegerToString (int i, unsigned int width, char padding, bool sign, unsigned int base, bool lower) +{ + DynamicStrings_String s; + unsigned int c; + + if (i < 0) + { + if (i == (INT_MIN)) + { + /* remember that -15 MOD 4 = 1 in Modula-2 */ + c = ((unsigned int ) (abs (i+1)))+1; + if (width > 0) + { + return DynamicStrings_ConCat (StringConvert_IntegerToString (-((int ) (c / base)), width-1, padding, sign, base, lower), DynamicStrings_Mark (StringConvert_IntegerToString (static_cast (c % base), 0, ' ', false, base, lower))); + } + else + { + return DynamicStrings_ConCat (StringConvert_IntegerToString (-((int ) (c / base)), 0, padding, sign, base, lower), DynamicStrings_Mark (StringConvert_IntegerToString (static_cast (c % base), 0, ' ', false, base, lower))); + } + } + else + { + s = DynamicStrings_InitString ((const char *) "-", 1); + } + i = -i; + } + else + { + if (sign) + { + s = DynamicStrings_InitString ((const char *) "+", 1); + } + else + { + s = DynamicStrings_InitString ((const char *) "", 0); + } + } + if (i > (((int ) (base))-1)) + { + s = DynamicStrings_ConCat (DynamicStrings_ConCat (s, DynamicStrings_Mark (StringConvert_IntegerToString (static_cast (((unsigned int ) (i)) / base), 0, ' ', false, base, lower))), DynamicStrings_Mark (StringConvert_IntegerToString (static_cast (((unsigned int ) (i)) % base), 0, ' ', false, base, lower))); + } + else + { + if (i <= 9) + { + s = DynamicStrings_ConCat (s, DynamicStrings_Mark (DynamicStrings_InitStringChar ( ((char) (((unsigned int ) (i))+ ((unsigned int) ('0'))))))); + } + else + { + if (lower) + { + s = DynamicStrings_ConCat (s, DynamicStrings_Mark (DynamicStrings_InitStringChar ( ((char) ((((unsigned int ) (i))+ ((unsigned int) ('a')))-10))))); + } + else + { + s = DynamicStrings_ConCat (s, DynamicStrings_Mark (DynamicStrings_InitStringChar ( ((char) ((((unsigned int ) (i))+ ((unsigned int) ('A')))-10))))); + } + } + } + if (width > (DynamicStrings_Length (s))) + { + return DynamicStrings_ConCat (DynamicStrings_Mult (DynamicStrings_Mark (DynamicStrings_InitStringChar (padding)), width-(DynamicStrings_Length (s))), DynamicStrings_Mark (s)); + } + return s; + /* static analysis guarentees a RETURN statement will be used before here. */ + __builtin_unreachable (); +} + + +/* + CardinalToString - converts CARDINAL, c, into a String. The field with can be specified + if non zero. Leading characters are defined by padding. + The base allows the caller to generate binary, octal, decimal, hexidecimal + numbers. The value of lower is only used when hexidecimal numbers are + generated and if TRUE then digits abcdef are used, and if FALSE then ABCDEF + are used. +*/ + +extern "C" DynamicStrings_String StringConvert_CardinalToString (unsigned int c, unsigned int width, char padding, unsigned int base, bool lower) +{ + DynamicStrings_String s; + + s = DynamicStrings_InitString ((const char *) "", 0); + if (c > (base-1)) + { + s = DynamicStrings_ConCat (DynamicStrings_ConCat (s, DynamicStrings_Mark (StringConvert_CardinalToString (c / base, 0, ' ', base, lower))), DynamicStrings_Mark (StringConvert_CardinalToString (c % base, 0, ' ', base, lower))); + } + else + { + if (c <= 9) + { + s = DynamicStrings_ConCat (s, DynamicStrings_Mark (DynamicStrings_InitStringChar ( ((char) (c+ ((unsigned int) ('0'))))))); + } + else + { + if (lower) + { + s = DynamicStrings_ConCat (s, DynamicStrings_Mark (DynamicStrings_InitStringChar ( ((char) ((c+ ((unsigned int) ('a')))-10))))); + } + else + { + s = DynamicStrings_ConCat (s, DynamicStrings_Mark (DynamicStrings_InitStringChar ( ((char) ((c+ ((unsigned int) ('A')))-10))))); + } + } + } + if (width > (DynamicStrings_Length (s))) + { + return DynamicStrings_ConCat (DynamicStrings_Mult (DynamicStrings_Mark (DynamicStrings_InitStringChar (padding)), width-(DynamicStrings_Length (s))), s); + } + return s; + /* static analysis guarentees a RETURN statement will be used before here. */ + __builtin_unreachable (); +} + + +/* + StringToInteger - converts a string, s, of, base, into an INTEGER. + Leading white space is ignored. It stops converting + when either the string is exhausted or if an illegal + numeral is found. + The parameter found is set TRUE if a number was found. +*/ + +extern "C" int StringConvert_StringToInteger (DynamicStrings_String s, unsigned int base, bool *found) +{ + unsigned int n; + unsigned int l; + unsigned int c; + bool negative; + + s = DynamicStrings_RemoveWhitePrefix (s); /* returns a new string, s */ + l = DynamicStrings_Length (s); /* returns a new string, s */ + c = 0; + n = 0; + negative = false; + if (n < l) + { + /* parse leading + and - */ + while (((DynamicStrings_char (s, static_cast (n))) == '-') || ((DynamicStrings_char (s, static_cast (n))) == '+')) + { + if ((DynamicStrings_char (s, static_cast (n))) == '-') + { + negative = ! negative; + } + n += 1; + } + while ((n < l) && ((IsDecimalDigitValid (DynamicStrings_char (s, static_cast (n)), base, &c)) || (IsHexidecimalDigitValid (DynamicStrings_char (s, static_cast (n)), base, &c)))) + { + (*found) = true; + n += 1; + } + } + s = DynamicStrings_KillString (s); + if (negative) + { + return -((int ) (Min (((unsigned int ) (INT_MAX))+1, c))); + } + else + { + return (int ) (Min (static_cast (INT_MAX), c)); + } + /* static analysis guarentees a RETURN statement will be used before here. */ + __builtin_unreachable (); +} + + +/* + StringToCardinal - converts a string, s, of, base, into a CARDINAL. + Leading white space is ignored. It stops converting + when either the string is exhausted or if an illegal + numeral is found. + The parameter found is set TRUE if a number was found. +*/ + +extern "C" unsigned int StringConvert_StringToCardinal (DynamicStrings_String s, unsigned int base, bool *found) +{ + unsigned int n; + unsigned int l; + unsigned int c; + + s = DynamicStrings_RemoveWhitePrefix (s); /* returns a new string, s */ + l = DynamicStrings_Length (s); /* returns a new string, s */ + c = 0; + n = 0; + if (n < l) + { + /* parse leading + */ + while ((DynamicStrings_char (s, static_cast (n))) == '+') + { + n += 1; + } + while ((n < l) && ((IsDecimalDigitValid (DynamicStrings_char (s, static_cast (n)), base, &c)) || (IsHexidecimalDigitValid (DynamicStrings_char (s, static_cast (n)), base, &c)))) + { + (*found) = true; + n += 1; + } + } + s = DynamicStrings_KillString (s); + return c; + /* static analysis guarentees a RETURN statement will be used before here. */ + __builtin_unreachable (); +} + + +/* + LongIntegerToString - converts LONGINT, i, into a String. The field with + can be specified if non zero. Leading characters + are defined by padding and this function will + prepend a + if sign is set to TRUE. + The base allows the caller to generate binary, + octal, decimal, hexidecimal numbers. + The value of lower is only used when hexidecimal + numbers are generated and if TRUE then digits + abcdef are used, and if FALSE then ABCDEF are used. +*/ + +extern "C" DynamicStrings_String StringConvert_LongIntegerToString (long int i, unsigned int width, char padding, bool sign, unsigned int base, bool lower) +{ + DynamicStrings_String s; + long unsigned int c; + + if (i < 0) + { + if (i == (LONG_MIN)) + { + /* remember that -15 MOD 4 is 1 in Modula-2, and although ABS(MIN(LONGINT)+1) + is very likely MAX(LONGINT), it is safer not to assume this is the case */ + c = ((long unsigned int ) (labs (i+1)))+1; + if (width > 0) + { + return DynamicStrings_ConCat (StringConvert_LongIntegerToString (-((long int ) (c / ((long unsigned int ) (base)))), width-1, padding, sign, base, lower), DynamicStrings_Mark (StringConvert_LongIntegerToString (static_cast (c % ((long unsigned int ) (base))), 0, ' ', false, base, lower))); + } + else + { + return DynamicStrings_ConCat (StringConvert_LongIntegerToString (-((long int ) (c / ((long unsigned int ) (base)))), 0, padding, sign, base, lower), DynamicStrings_Mark (StringConvert_LongIntegerToString (static_cast (c % ((long unsigned int ) (base))), 0, ' ', false, base, lower))); + } + } + else + { + s = DynamicStrings_InitString ((const char *) "-", 1); + } + i = -i; + } + else + { + if (sign) + { + s = DynamicStrings_InitString ((const char *) "+", 1); + } + else + { + s = DynamicStrings_InitString ((const char *) "", 0); + } + } + if (i > ((long int ) (base-1))) + { + s = DynamicStrings_ConCat (DynamicStrings_ConCat (s, DynamicStrings_Mark (StringConvert_LongIntegerToString (i / ((long int ) (base)), 0, ' ', false, base, lower))), DynamicStrings_Mark (StringConvert_LongIntegerToString (i % ((long int ) (base)), 0, ' ', false, base, lower))); + } + else + { + if (i <= 9) + { + s = DynamicStrings_ConCat (s, DynamicStrings_Mark (DynamicStrings_InitStringChar ( ((char) (((unsigned int ) (i))+ ((unsigned int) ('0'))))))); + } + else + { + if (lower) + { + s = DynamicStrings_ConCat (s, DynamicStrings_Mark (DynamicStrings_InitStringChar ( ((char) ((((unsigned int ) (i))+ ((unsigned int) ('a')))-10))))); + } + else + { + s = DynamicStrings_ConCat (s, DynamicStrings_Mark (DynamicStrings_InitStringChar ( ((char) ((((unsigned int ) (i))+ ((unsigned int) ('A')))-10))))); + } + } + } + if (width > (DynamicStrings_Length (s))) + { + return DynamicStrings_ConCat (DynamicStrings_Mult (DynamicStrings_Mark (DynamicStrings_InitStringChar (padding)), width-(DynamicStrings_Length (s))), s); + } + return s; + /* static analysis guarentees a RETURN statement will be used before here. */ + __builtin_unreachable (); +} + + +/* + StringToLongInteger - converts a string, s, of, base, into an LONGINT. + Leading white space is ignored. It stops converting + when either the string is exhausted or if an illegal + numeral is found. + The parameter found is set TRUE if a number was found. +*/ + +extern "C" long int StringConvert_StringToLongInteger (DynamicStrings_String s, unsigned int base, bool *found) +{ + unsigned int n; + unsigned int l; + long unsigned int c; + bool negative; + + s = DynamicStrings_RemoveWhitePrefix (s); /* returns a new string, s */ + l = DynamicStrings_Length (s); /* returns a new string, s */ + c = 0; + n = 0; + negative = false; + if (n < l) + { + /* parse leading + and - */ + while (((DynamicStrings_char (s, static_cast (n))) == '-') || ((DynamicStrings_char (s, static_cast (n))) == '+')) + { + if ((DynamicStrings_char (s, static_cast (n))) == '-') + { + negative = ! negative; + } + n += 1; + } + while ((n < l) && ((IsDecimalDigitValidLong (DynamicStrings_char (s, static_cast (n)), base, &c)) || (IsHexidecimalDigitValidLong (DynamicStrings_char (s, static_cast (n)), base, &c)))) + { + (*found) = true; + n += 1; + } + } + s = DynamicStrings_KillString (s); + if (negative) + { + return -((long int ) (LongMin (((long unsigned int ) (LONG_MAX))+1, c))); + } + else + { + return (long int ) (LongMin (static_cast (LONG_MAX), c)); + } + /* static analysis guarentees a RETURN statement will be used before here. */ + __builtin_unreachable (); +} + + +/* + LongCardinalToString - converts LONGCARD, c, into a String. The field + width can be specified if non zero. Leading + characters are defined by padding. + The base allows the caller to generate binary, + octal, decimal, hexidecimal numbers. + The value of lower is only used when hexidecimal + numbers are generated and if TRUE then digits + abcdef are used, and if FALSE then ABCDEF are used. +*/ + +extern "C" DynamicStrings_String StringConvert_LongCardinalToString (long unsigned int c, unsigned int width, char padding, unsigned int base, bool lower) +{ + DynamicStrings_String s; + + s = DynamicStrings_InitString ((const char *) "", 0); + if (c > ((long unsigned int ) (base-1))) + { + s = DynamicStrings_ConCat (DynamicStrings_ConCat (s, StringConvert_LongCardinalToString (c / ((long unsigned int ) (base)), 0, ' ', base, lower)), StringConvert_LongCardinalToString (c % ((long unsigned int ) (base)), 0, ' ', base, lower)); + } + else + { + if (c <= 9) + { + s = DynamicStrings_ConCat (s, DynamicStrings_InitStringChar ( ((char) (((unsigned int ) (c))+ ((unsigned int) ('0')))))); + } + else + { + if (lower) + { + s = DynamicStrings_ConCat (s, DynamicStrings_InitStringChar ( ((char) ((((unsigned int ) (c))+ ((unsigned int) ('a')))-10)))); + } + else + { + s = DynamicStrings_ConCat (s, DynamicStrings_InitStringChar ( ((char) ((((unsigned int ) (c))+ ((unsigned int) ('A')))-10)))); + } + } + } + if (width > (DynamicStrings_Length (s))) + { + return DynamicStrings_ConCat (DynamicStrings_Mult (DynamicStrings_Mark (DynamicStrings_InitStringChar (padding)), width-(DynamicStrings_Length (s))), s); + } + return s; + /* static analysis guarentees a RETURN statement will be used before here. */ + __builtin_unreachable (); +} + + +/* + StringToLongCardinal - converts a string, s, of, base, into a LONGCARD. + Leading white space is ignored. It stops converting + when either the string is exhausted or if an illegal + numeral is found. + The parameter found is set TRUE if a number was found. +*/ + +extern "C" long unsigned int StringConvert_StringToLongCardinal (DynamicStrings_String s, unsigned int base, bool *found) +{ + unsigned int n; + unsigned int l; + long unsigned int c; + + s = DynamicStrings_RemoveWhitePrefix (s); /* returns a new string, s */ + l = DynamicStrings_Length (s); /* returns a new string, s */ + c = 0; + n = 0; + if (n < l) + { + /* parse leading + */ + while ((DynamicStrings_char (s, static_cast (n))) == '+') + { + n += 1; + } + while ((n < l) && ((IsDecimalDigitValidLong (DynamicStrings_char (s, static_cast (n)), base, &c)) || (IsHexidecimalDigitValidLong (DynamicStrings_char (s, static_cast (n)), base, &c)))) + { + (*found) = true; + n += 1; + } + } + s = DynamicStrings_KillString (s); + return c; + /* static analysis guarentees a RETURN statement will be used before here. */ + __builtin_unreachable (); +} + + +/* + ShortCardinalToString - converts SHORTCARD, c, into a String. The field + width can be specified if non zero. Leading + characters are defined by padding. + The base allows the caller to generate binary, + octal, decimal, hexidecimal numbers. + The value of lower is only used when hexidecimal + numbers are generated and if TRUE then digits + abcdef are used, and if FALSE then ABCDEF are used. +*/ + +extern "C" DynamicStrings_String StringConvert_ShortCardinalToString (short unsigned int c, unsigned int width, char padding, unsigned int base, bool lower) +{ + DynamicStrings_String s; + + s = DynamicStrings_InitString ((const char *) "", 0); + if (((unsigned int ) (c)) > (base-1)) + { + s = DynamicStrings_ConCat (DynamicStrings_ConCat (s, StringConvert_ShortCardinalToString (c / ((short unsigned int ) (base)), 0, ' ', base, lower)), StringConvert_ShortCardinalToString (c % ((short unsigned int ) (base)), 0, ' ', base, lower)); + } + else + { + if (c <= 9) + { + s = DynamicStrings_ConCat (s, DynamicStrings_InitStringChar ( ((char) (((unsigned int ) (c))+ ((unsigned int) ('0')))))); + } + else + { + if (lower) + { + s = DynamicStrings_ConCat (s, DynamicStrings_InitStringChar ( ((char) ((((unsigned int ) (c))+ ((unsigned int) ('a')))-10)))); + } + else + { + s = DynamicStrings_ConCat (s, DynamicStrings_InitStringChar ( ((char) ((((unsigned int ) (c))+ ((unsigned int) ('A')))-10)))); + } + } + } + if (width > (DynamicStrings_Length (s))) + { + return DynamicStrings_ConCat (DynamicStrings_Mult (DynamicStrings_Mark (DynamicStrings_InitStringChar (padding)), width-(DynamicStrings_Length (s))), s); + } + return s; + /* static analysis guarentees a RETURN statement will be used before here. */ + __builtin_unreachable (); +} + + +/* + StringToShortCardinal - converts a string, s, of, base, into a SHORTCARD. + Leading white space is ignored. It stops converting + when either the string is exhausted or if an illegal + numeral is found. + The parameter found is set TRUE if a number was found. +*/ + +extern "C" short unsigned int StringConvert_StringToShortCardinal (DynamicStrings_String s, unsigned int base, bool *found) +{ + unsigned int n; + unsigned int l; + short unsigned int c; + + s = DynamicStrings_RemoveWhitePrefix (s); /* returns a new string, s */ + l = DynamicStrings_Length (s); /* returns a new string, s */ + c = 0; + n = 0; + if (n < l) + { + /* parse leading + */ + while ((DynamicStrings_char (s, static_cast (n))) == '+') + { + n += 1; + } + while ((n < l) && ((IsDecimalDigitValidShort (DynamicStrings_char (s, static_cast (n)), base, &c)) || (IsHexidecimalDigitValidShort (DynamicStrings_char (s, static_cast (n)), base, &c)))) + { + (*found) = true; + n += 1; + } + } + s = DynamicStrings_KillString (s); + return c; + /* static analysis guarentees a RETURN statement will be used before here. */ + __builtin_unreachable (); +} + + +/* + stoi - decimal string to INTEGER +*/ + +extern "C" int StringConvert_stoi (DynamicStrings_String s) +{ + bool found; + + return StringConvert_StringToInteger (s, 10, &found); + /* static analysis guarentees a RETURN statement will be used before here. */ + __builtin_unreachable (); +} + + +/* + itos - integer to decimal string. +*/ + +extern "C" DynamicStrings_String StringConvert_itos (int i, unsigned int width, char padding, bool sign) +{ + return StringConvert_IntegerToString (i, width, padding, sign, 10, false); + /* static analysis guarentees a RETURN statement will be used before here. */ + __builtin_unreachable (); +} + + +/* + ctos - cardinal to decimal string. +*/ + +extern "C" DynamicStrings_String StringConvert_ctos (unsigned int c, unsigned int width, char padding) +{ + return StringConvert_CardinalToString (c, width, padding, 10, false); + /* static analysis guarentees a RETURN statement will be used before here. */ + __builtin_unreachable (); +} + + +/* + stoc - decimal string to CARDINAL +*/ + +extern "C" unsigned int StringConvert_stoc (DynamicStrings_String s) +{ + bool found; + + return StringConvert_StringToCardinal (s, 10, &found); + /* static analysis guarentees a RETURN statement will be used before here. */ + __builtin_unreachable (); +} + + +/* + hstoi - hexidecimal string to INTEGER +*/ + +extern "C" int StringConvert_hstoi (DynamicStrings_String s) +{ + bool found; + + return StringConvert_StringToInteger (s, 16, &found); + /* static analysis guarentees a RETURN statement will be used before here. */ + __builtin_unreachable (); +} + + +/* + ostoi - octal string to INTEGER +*/ + +extern "C" int StringConvert_ostoi (DynamicStrings_String s) +{ + bool found; + + return StringConvert_StringToInteger (s, 8, &found); + /* static analysis guarentees a RETURN statement will be used before here. */ + __builtin_unreachable (); +} + + +/* + bstoi - binary string to INTEGER +*/ + +extern "C" int StringConvert_bstoi (DynamicStrings_String s) +{ + bool found; + + return StringConvert_StringToInteger (s, 2, &found); + /* static analysis guarentees a RETURN statement will be used before here. */ + __builtin_unreachable (); +} + + +/* + hstoc - hexidecimal string to CARDINAL +*/ + +extern "C" unsigned int StringConvert_hstoc (DynamicStrings_String s) +{ + bool found; + + return StringConvert_StringToCardinal (s, 16, &found); + /* static analysis guarentees a RETURN statement will be used before here. */ + __builtin_unreachable (); +} + + +/* + ostoc - octal string to CARDINAL +*/ + +extern "C" unsigned int StringConvert_ostoc (DynamicStrings_String s) +{ + bool found; + + return StringConvert_StringToCardinal (s, 8, &found); + /* static analysis guarentees a RETURN statement will be used before here. */ + __builtin_unreachable (); +} + + +/* + bstoc - binary string to CARDINAL +*/ + +extern "C" unsigned int StringConvert_bstoc (DynamicStrings_String s) +{ + bool found; + + return StringConvert_StringToCardinal (s, 2, &found); + /* static analysis guarentees a RETURN statement will be used before here. */ + __builtin_unreachable (); +} + + +/* + StringToLongreal - returns a LONGREAL and sets found to TRUE if a legal number is seen. +*/ + +extern "C" long double StringConvert_StringToLongreal (DynamicStrings_String s, bool *found) +{ + bool error; + long double value; + + s = DynamicStrings_RemoveWhitePrefix (s); /* new string is created */ + value = ldtoa_strtold (DynamicStrings_string (s), &error); /* new string is created */ + s = DynamicStrings_KillString (s); + (*found) = ! error; + return value; + /* static analysis guarentees a RETURN statement will be used before here. */ + __builtin_unreachable (); +} + + +/* + LongrealToString - converts a LONGREAL number, Real, which has, + TotalWidth, and FractionWidth into a string. + It uses decimal notation. + + So for example: + + LongrealToString(1.0, 4, 2) -> '1.00' + LongrealToString(12.3, 5, 2) -> '12.30' + LongrealToString(12.3, 6, 2) -> ' 12.30' + LongrealToString(12.3, 6, 3) -> '12.300' + + if total width is too small then the fraction + becomes truncated. + + LongrealToString(12.3, 5, 3) -> '12.30' + + Positive numbers do not have a '+' prepended. + Negative numbers will have a '-' prepended and + the TotalWidth will need to be large enough + to contain the sign, whole number, '.' and + fractional components. +*/ + +extern "C" DynamicStrings_String StringConvert_LongrealToString (long double x, unsigned int TotalWidth, unsigned int FractionWidth) +{ + bool maxprecision; + DynamicStrings_String s; + void * r; + int point; + bool sign; + int l; + + if (TotalWidth == 0) + { + maxprecision = true; + r = ldtoa_ldtoa (x, ldtoa_decimaldigits, 100, &point, &sign); + } + else + { + r = ldtoa_ldtoa (x, ldtoa_decimaldigits, 100, &point, &sign); + } + s = DynamicStrings_InitStringCharStar (r); + libc_free (r); + l = DynamicStrings_Length (s); + if (point > l) + { + /* avoid dangling else. */ + s = DynamicStrings_ConCat (s, DynamicStrings_Mark (DynamicStrings_Mult (DynamicStrings_Mark (DynamicStrings_InitStringChar ('0')), static_cast (point-l)))); + s = DynamicStrings_ConCat (s, DynamicStrings_Mark (DynamicStrings_InitString ((const char *) ".0", 2))); + if (! maxprecision && (FractionWidth > 0)) + { + FractionWidth -= 1; + if (((int ) (FractionWidth)) > (point-l)) + { + s = DynamicStrings_ConCat (s, DynamicStrings_Mark (DynamicStrings_Mult (DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "0", 1)), FractionWidth))); + } + } + } + else if (point < 0) + { + /* avoid dangling else. */ + s = DynamicStrings_ConCat (DynamicStrings_Mult (DynamicStrings_Mark (DynamicStrings_InitStringChar ('0')), static_cast (-point)), DynamicStrings_Mark (s)); + l = DynamicStrings_Length (s); + s = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "0.", 2), DynamicStrings_Mark (s)); + if (! maxprecision && (l < ((int ) (FractionWidth)))) + { + s = DynamicStrings_ConCat (s, DynamicStrings_Mark (DynamicStrings_Mult (DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "0", 1)), static_cast (((int ) (FractionWidth))-l)))); + } + } + else + { + /* avoid dangling else. */ + if (point == 0) + { + s = DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "0.", 2), DynamicStrings_Mark (DynamicStrings_Slice (DynamicStrings_Mark (s), point, 0))); + } + else + { + s = DynamicStrings_ConCat (DynamicStrings_ConCatChar (DynamicStrings_Slice (DynamicStrings_Mark (s), 0, point), '.'), DynamicStrings_Mark (DynamicStrings_Slice (DynamicStrings_Mark (s), point, 0))); + } + if (! maxprecision && ((l-point) < ((int ) (FractionWidth)))) + { + s = DynamicStrings_ConCat (s, DynamicStrings_Mark (DynamicStrings_Mult (DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "0", 1)), static_cast (((int ) (FractionWidth))-(l-point))))); + } + } + if ((DynamicStrings_Length (s)) > TotalWidth) + { + /* avoid gcc warning by using compound statement even if not strictly necessary. */ + if (TotalWidth > 0) + { + if (sign) + { + s = DynamicStrings_Slice (DynamicStrings_Mark (StringConvert_ToDecimalPlaces (s, FractionWidth)), 0, static_cast (TotalWidth-1)); + s = DynamicStrings_ConCat (DynamicStrings_InitStringChar ('-'), DynamicStrings_Mark (s)); + sign = false; + } + else + { + /* minus 1 because all results will include a '.' */ + s = DynamicStrings_Slice (DynamicStrings_Mark (StringConvert_ToDecimalPlaces (s, FractionWidth)), 0, static_cast (TotalWidth)); + } + } + else + { + if (sign) + { + s = StringConvert_ToDecimalPlaces (s, FractionWidth); + s = DynamicStrings_ConCat (DynamicStrings_InitStringChar ('-'), DynamicStrings_Mark (s)); + sign = false; + } + else + { + /* minus 1 because all results will include a '.' */ + s = StringConvert_ToDecimalPlaces (s, FractionWidth); + } + } + } + if ((DynamicStrings_Length (s)) < TotalWidth) + { + s = DynamicStrings_ConCat (DynamicStrings_Mult (DynamicStrings_Mark (DynamicStrings_InitStringChar (' ')), TotalWidth-(DynamicStrings_Length (s))), DynamicStrings_Mark (s)); + } + return s; + /* static analysis guarentees a RETURN statement will be used before here. */ + __builtin_unreachable (); +} + + +/* + stor - returns a REAL given a string. +*/ + +extern "C" double StringConvert_stor (DynamicStrings_String s) +{ + bool found; + + return (double ) (StringConvert_StringToLongreal (s, &found)); + /* static analysis guarentees a RETURN statement will be used before here. */ + __builtin_unreachable (); +} + + +/* + stolr - returns a LONGREAL given a string. +*/ + +extern "C" long double StringConvert_stolr (DynamicStrings_String s) +{ + bool found; + + return StringConvert_StringToLongreal (s, &found); + /* static analysis guarentees a RETURN statement will be used before here. */ + __builtin_unreachable (); +} + + +/* + ToSigFig - returns a floating point or base 10 integer + string which is accurate to, n, significant + figures. It will return a new String + and, s, will be destroyed. + + + So: 12.345 + + rounded to the following significant figures yields + + 5 12.345 + 4 12.34 + 3 12.3 + 2 12 + 1 10 +*/ + +extern "C" DynamicStrings_String StringConvert_ToSigFig (DynamicStrings_String s, unsigned int n) +{ + int point; + unsigned int poTen; + + Assert ((IsDigit (DynamicStrings_char (s, 0))) || ((DynamicStrings_char (s, 0)) == '.'), (const char *) "../../gcc/m2/gm2-libs/StringConvert.mod", 39, 1220, (const char *) "ToSigFig", 8); + point = DynamicStrings_Index (s, '.', 0); + if (point < 0) + { + poTen = DynamicStrings_Length (s); + } + else + { + poTen = point; + } + s = doSigFig (s, n); + /* if the last character is '.' remove it */ + if (((DynamicStrings_Length (s)) > 0) && ((DynamicStrings_char (s, -1)) == '.')) + { + return DynamicStrings_Slice (DynamicStrings_Mark (s), 0, -1); + } + else + { + if (poTen > (DynamicStrings_Length (s))) + { + s = DynamicStrings_ConCat (s, DynamicStrings_Mark (DynamicStrings_Mult (DynamicStrings_Mark (DynamicStrings_InitStringChar ('0')), poTen-(DynamicStrings_Length (s))))); + } + return s; + } + /* static analysis guarentees a RETURN statement will be used before here. */ + __builtin_unreachable (); +} + + +/* + ToDecimalPlaces - returns a floating point or base 10 integer + string which is accurate to, n, decimal + places. It will return a new String + and, s, will be destroyed. + Decimal places yields, n, digits after + the . + + So: 12.345 + + rounded to the following decimal places yields + + 5 12.34500 + 4 12.3450 + 3 12.345 + 2 12.34 + 1 12.3 +*/ + +extern "C" DynamicStrings_String StringConvert_ToDecimalPlaces (DynamicStrings_String s, unsigned int n) +{ + int point; + + Assert ((IsDigit (DynamicStrings_char (s, 0))) || ((DynamicStrings_char (s, 0)) == '.'), (const char *) "../../gcc/m2/gm2-libs/StringConvert.mod", 39, 1069, (const char *) "ToDecimalPlaces", 15); + point = DynamicStrings_Index (s, '.', 0); + if (point < 0) + { + /* avoid gcc warning by using compound statement even if not strictly necessary. */ + if (n > 0) + { + return DynamicStrings_ConCat (DynamicStrings_ConCat (s, DynamicStrings_Mark (DynamicStrings_InitStringChar ('.'))), DynamicStrings_Mult (DynamicStrings_Mark (DynamicStrings_InitStringChar ('0')), n)); + } + else + { + return s; + } + } + s = doDecimalPlaces (s, n); + /* if the last character is '.' remove it */ + if (((DynamicStrings_Length (s)) > 0) && ((DynamicStrings_char (s, -1)) == '.')) + { + return DynamicStrings_Slice (DynamicStrings_Mark (s), 0, -1); + } + else + { + return s; + } + /* static analysis guarentees a RETURN statement will be used before here. */ + __builtin_unreachable (); +} + +extern "C" void _M2_StringConvert_init (__attribute__((unused)) int argc,__attribute__((unused)) char *argv[],__attribute__((unused)) char *envp[]) +{ +} + +extern "C" void _M2_StringConvert_fini (__attribute__((unused)) int argc,__attribute__((unused)) char *argv[],__attribute__((unused)) char *envp[]) +{ +} diff --git a/gcc/m2/pge-boot/Gldtoa.cc b/gcc/m2/pge-boot/Gldtoa.cc index 0a43de0fa1ae..9fa2fd2745db 100644 --- a/gcc/m2/pge-boot/Gldtoa.cc +++ b/gcc/m2/pge-boot/Gldtoa.cc @@ -63,7 +63,7 @@ ldtoa_strtold (void *s, bool *error) } char * -ldtoa_ldtoa (long double d, int mode, int ndigits, int *decpt, int *sign) +ldtoa_ldtoa (long double d, int mode, int ndigits, int *decpt, bool *sign) { char format[50]; char *p; diff --git a/gcc/m2/pge-boot/main.cc b/gcc/m2/pge-boot/main.cc index b6f29f628f74..645304c19218 100644 --- a/gcc/m2/pge-boot/main.cc +++ b/gcc/m2/pge-boot/main.cc @@ -6,6 +6,8 @@ extern "C" void _M2_M2RTS_init (int argc, char *argv[], char *envp[]); extern "C" void _M2_M2RTS_fini (int argc, char *argv[], char *envp[]); extern "C" void _M2_SysExceptions_init (int argc, char *argv[], char *envp[]); extern "C" void _M2_SysExceptions_fini (int argc, char *argv[], char *envp[]); +extern "C" void _M2_M2Diagnostic_init (int argc, char *argv[], char *envp[]); +extern "C" void _M2_M2Diagnostic_fini (int argc, char *argv[], char *envp[]); extern "C" void _M2_StrLib_init (int argc, char *argv[], char *envp[]); extern "C" void _M2_StrLib_fini (int argc, char *argv[], char *envp[]); extern "C" void _M2_errno_init (int argc, char *argv[], char *envp[]); @@ -46,6 +48,8 @@ extern "C" void _M2_SFIO_init (int argc, char *argv[], char *envp[]); extern "C" void _M2_SFIO_fini (int argc, char *argv[], char *envp[]); extern "C" void _M2_StrCase_init (int argc, char *argv[], char *envp[]); extern "C" void _M2_StrCase_fini (int argc, char *argv[], char *envp[]); +extern "C" void _M2_StringConvert_init (int argc, char *argv[], char *envp[]); +extern "C" void _M2_StringConvert_fini (int argc, char *argv[], char *envp[]); extern "C" void _M2_bnflex_init (int argc, char *argv[], char *envp[]); extern "C" void _M2_bnflex_fini (int argc, char *argv[], char *envp[]); extern "C" void _M2_Lists_init (int argc, char *argv[], char *envp[]); @@ -65,6 +69,7 @@ int main(int argc, char *argv[], char *envp[]) _M2_M2EXCEPTION_init (argc, argv, envp); _M2_M2RTS_init (argc, argv, envp); _M2_SysExceptions_init (argc, argv, envp); + _M2_M2Diagnostic_init (argc, argv, envp); _M2_StrLib_init (argc, argv, envp); _M2_errno_init (argc, argv, envp); _M2_termios_init (argc, argv, envp); @@ -85,6 +90,7 @@ int main(int argc, char *argv[], char *envp[]) _M2_FIO_init (argc, argv, envp); _M2_SFIO_init (argc, argv, envp); _M2_StrCase_init (argc, argv, envp); + _M2_StringConvert_init (argc, argv, envp); _M2_bnflex_init (argc, argv, envp); _M2_Lists_init (argc, argv, envp); _M2_Args_init (argc, argv, envp); @@ -95,6 +101,7 @@ int main(int argc, char *argv[], char *envp[]) _M2_Args_fini (argc, argv, envp); _M2_Lists_fini (argc, argv, envp); _M2_bnflex_fini (argc, argv, envp); + _M2_StringConvert_fini (argc, argv, envp); _M2_StrCase_fini (argc, argv, envp); _M2_SFIO_fini (argc, argv, envp); _M2_FIO_fini (argc, argv, envp); @@ -115,6 +122,7 @@ int main(int argc, char *argv[], char *envp[]) _M2_termios_fini (argc, argv, envp); _M2_errno_fini (argc, argv, envp); _M2_StrLib_fini (argc, argv, envp); + _M2_M2Diagnostic_fini (argc, argv, envp); _M2_SysExceptions_fini (argc, argv, envp); _M2_M2RTS_fini (argc, argv, envp); _M2_M2EXCEPTION_fini (argc, argv, envp); diff --git a/gcc/m2/tools-src/makeSystem b/gcc/m2/tools-src/makeSystem index 407af8e1dd47..b7fea6ac5d1c 100644 --- a/gcc/m2/tools-src/makeSystem +++ b/gcc/m2/tools-src/makeSystem @@ -23,7 +23,7 @@ Usage () { - echo "Usage: makesystem dialectflag SYSTEM.def SYSTEM.mod { librarypath } compiler" + echo "Usage: makesystem [-gdb] dialectflag SYSTEM.def SYSTEM.mod { librarypath } compiler" } if [ $# -lt 6 ] ; then @@ -31,6 +31,12 @@ if [ $# -lt 6 ] ; then exit 1 fi +if [ "$1" = "-gdb" ] ; then + DEBUG=$1 + shift +else + DEBUG="" +fi DIALECT=$1 SYSTEMDEF=$2 SYSTEMMOD=$3 @@ -101,6 +107,14 @@ displayEnd () { MINIMAL="-fno-scaffold-main -fno-scaffold-dynamic -fno-scaffold-static -fno-m2-plugin" rm -f ${OUTPUTFILE} + +if [ "$DEBUG" != "" ] ; then + echo "entering gdb to debug cc1gm2 when using -fdump-system-exports" + ${COMPILER} ${DIALECT} ${LIBRARY} ${MINIMAL} \ + -c -fdump-system-exports ${SYSTEMMOD} -wrapper gdb,--args + exit $? +fi + ${COMPILER} ${DIALECT} ${LIBRARY} ${MINIMAL} \ -S -fdump-system-exports ${SYSTEMMOD} -o /dev/null 2>&1 > /dev/null res=$? diff --git a/gcc/match.pd b/gcc/match.pd index b1d7a3a1b73f..4d0a803eaef0 100644 --- a/gcc/match.pd +++ b/gcc/match.pd @@ -2045,6 +2045,15 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) (abs (negate @0)) (abs @0)) +/* fabs(x + 0.0) -> fabs(x), safe even with signed zeros when -fno-trapping-math. + With non-default exception handling denormal + 0.0 might trap. + Otherwise !HONOR_SNANS would be sufficient here. */ +(for op (plus minus) + (simplify + (abs (op @0 real_zerop@1)) + (if (!flag_trapping_math) + (abs @0)))) + (simplify (absu (negate @0)) (absu @0)) @@ -2124,9 +2133,10 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) && !HONOR_SIGNED_ZEROS (type))) (minus @1 @0))) (simplify - (negate (pointer_diff @0 @1)) - (if (TYPE_OVERFLOW_UNDEFINED (type)) - (pointer_diff @1 @0))) + (negate (nop_convert? (pointer_diff@2 @0 @1))) + (if (ANY_INTEGRAL_TYPE_P (type) && !TYPE_OVERFLOW_SANITIZED (type)) + (with { tree ptrdifftype = TREE_TYPE (@2); } + (convert (pointer_diff:ptrdifftype @1 @0))))) /* A - B -> A + (-B) if B is easily negatable. */ (simplify @@ -3360,6 +3370,32 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) } (if (wi::eq_p (sum, wi::uhwi (0, precision)))))))) +(if (INTEGRAL_TYPE_P (type) && TYPE_UNSIGNED (type)) + (match (unsigned_integer_narrow_clip @0) + /* SAT_U_TRUNC(MAX (0, X)) = + (UT)X & ~(NT)(-1) ? (-X) >> TYPE_PRECISION(X) - 1 : X + + The gimple representation uses X > ~(NT)(-1) instead of + using & so match on gt instead of bit_and. */ + (convert (cond^ (gt (nop_convert? @0) INTEGER_CST@1) + (rshift:s (nop_convert? (negate (nop_convert? @0))) INTEGER_CST@2) + @0)) + (if (! TYPE_UNSIGNED (TREE_TYPE (@0))) + (with + { + unsigned itype_precision = TYPE_PRECISION (TREE_TYPE (@0)); + unsigned otype_precision = TYPE_PRECISION (type); + wide_int trunc_max = wi::mask (otype_precision, false, itype_precision); + wide_int int_cst_1 = wi::to_wide (@1, itype_precision); + wide_int int_cst_2 = wi::to_wide (@2, itype_precision); + wide_int shift_amount = wi::uhwi (itype_precision - 1, + itype_precision); // AKA itype_bits - 1 + int cmp = 0; + cmp = wi::cmp (int_cst_2, shift_amount, TYPE_SIGN (TREE_TYPE (@0))); + } + (if (otype_precision < itype_precision && wi::eq_p (trunc_max, + int_cst_1) && (cmp >= 0))))))) + /* Saturation truncate for unsigned integer. */ (if (INTEGRAL_TYPE_P (type) && TYPE_UNSIGNED (type)) (match (unsigned_integer_sat_trunc @0) @@ -3585,6 +3621,7 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) /* Saturation mult for unsigned integer. */ (if (INTEGRAL_TYPE_P (type) && TYPE_UNSIGNED (type)) + (for mult_op (mult widen_mult) (match (unsigned_integer_sat_mul @0 @1) /* SAT_U_MUL (X, Y) = { WT x = (WT)a * (WT)b; @@ -3595,9 +3632,7 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) return (T)x; } while WT is uint128_t, T is uint8_t, uint16_t, uint32_t or uint64_t. */ - (convert (min (widen_mult:c@3 (convert@4 (convert @0)) - (convert@5 (convert @1))) - INTEGER_CST@2)) + (convert (min (mult_op:c@3 (convert@4 @0) (convert@5 @1)) INTEGER_CST@2)) (if (types_match (type, @0, @1)) (with { @@ -3605,24 +3640,16 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) unsigned widen_prec = TYPE_PRECISION (TREE_TYPE (@3)); unsigned cvt4_prec = TYPE_PRECISION (TREE_TYPE (@4)); unsigned cvt5_prec = TYPE_PRECISION (TREE_TYPE (@5)); - wide_int c2 = wi::to_wide (@2); - wide_int max = wi::mask (prec, false, widen_prec); - bool c2_is_max_p = wi::eq_p (c2, max); - bool widen_mult_p = cvt4_prec == cvt5_prec && widen_prec == cvt5_prec * 2; - } - (if (widen_prec > prec && c2_is_max_p && widen_mult_p))))) - (match (unsigned_integer_sat_mul @0 @1) - (convert (min (mult:c@3 (convert @0) (convert @1)) INTEGER_CST@2)) - (if (types_match (type, @0, @1)) - (with - { - unsigned prec = TYPE_PRECISION (type); - unsigned widen_prec = TYPE_PRECISION (TREE_TYPE (@3)); - wide_int c2 = wi::to_wide (@2); + wide_int max = wi::mask (prec, false, widen_prec); - bool c2_is_max_p = wi::eq_p (c2, max); + bool c2_is_max_p = wi::eq_p (wi::to_wide (@2), max); + + bool widen_mult_p = mult_op == WIDEN_MULT_EXPR && cvt4_prec == cvt5_prec + && widen_prec == cvt5_prec * 2 && widen_prec > prec; + bool mult_p = mult_op == MULT_EXPR && cvt4_prec == cvt5_prec + && cvt4_prec == widen_prec && widen_prec > prec; } - (if (widen_prec > prec && c2_is_max_p))))) + (if (c2_is_max_p && (widen_mult_p || mult_p))))))) (match (unsigned_integer_sat_mul @0 @1) /* SAT_U_MUL (X, Y) = { T result; @@ -3660,6 +3687,36 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) bool c2_is_type_precision_p = c2 == prec; } (if (widen_prec > prec && c2_is_type_precision_p && c4_is_max_p))))) + (for mult_op (mult widen_mult) + (match (unsigned_integer_sat_mul @0 @1) + /* SAT_U_MUL (X, Y) = { + WT x = (WT)a * (WT)b; + NT hi = x >> (sizeof(NT) * 8); + NT lo = (NT)x; + return lo | -!!hi; + } while WT is uint128_t, uint64_t, uint32_t, uint16_t, + and T is uint64_t, uint32_t, uint16_t, uint8_t. */ + (convert1? + (bit_ior + (convert? + (negate + (convert (ne (convert2? (rshift @3 INTEGER_CST@2)) integer_zerop)))) + (convert (mult_op:c@3 (convert@4 @0) (convert@5 @1))))) + (if (types_match (type, @0, @1)) + (with + { + unsigned prec = TYPE_PRECISION (type); + unsigned widen_prec = TYPE_PRECISION (TREE_TYPE (@3)); + unsigned cvt4_prec = TYPE_PRECISION (TREE_TYPE (@4)); + unsigned cvt5_prec = TYPE_PRECISION (TREE_TYPE (@5)); + + bool widen_mult_p = mult_op == WIDEN_MULT_EXPR && cvt4_prec == cvt5_prec + && widen_prec == cvt5_prec * 2; + bool mult_p = mult_op == MULT_EXPR && cvt4_prec == cvt5_prec + && cvt4_prec == widen_prec && widen_prec > prec; + bool c2_is_type_precision_p = tree_to_uhwi (@2) == prec; + } + (if (c2_is_type_precision_p && (mult_p || widen_mult_p))))))) ) /* The boundary condition for case 10: IMM = 1: @@ -5203,7 +5260,7 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) expr_not_equal_to had a chance to match. Otherwise we'd do pretty much always just the second case. */ && cfun - && ((cfun->curr_properties & PROP_last_full_fold) != 0 + && (fold_before_rtl_expansion_p () || !flag_tree_vrp || optimize_debug)) (orotate @0 @@ -6743,6 +6800,34 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) @2)) ) +#if GIMPLE +/* Given two integers a and b: + (a != b) & ((a|b) != 0) -> (a != b) + (a != b) | ((a|b) != 0) -> ((a|b) != 0) + (a == b) & ((a|b) == 0) -> ((a|b) == 0) + (a == b) | ((a|b) == 0) -> (a == b) + (a != b) & ((a|b) == 0) -> false + (a == b) | ((a|b) != 0) -> true */ +(simplify + (bit_and:c (ne:c @0 @1) (ne (bit_ior @0 @1) integer_zerop)) + (ne @0 @1)) +(simplify + (bit_ior:c (ne:c @0 @1) (ne (bit_ior @0 @1) integer_zerop)) + (ne (bit_ior @0 @1) { integer_zero_node; })) +(simplify + (bit_and:c (eq:c @0 @1) (eq (bit_ior @0 @1) integer_zerop)) + (eq (bit_ior @0 @1) { integer_zero_node; })) +(simplify + (bit_ior:c (eq:c @0 @1) (eq (bit_ior @0 @1) integer_zerop)) + (eq @0 @1)) +(simplify + (bit_and:c (ne:c @0 @1) (eq (bit_ior @0 @1) integer_zerop)) + { build_zero_cst (type); }) +(simplify + (bit_ior:c (eq:c @0 @1) (ne (bit_ior @0 @1) integer_zerop)) + { build_one_cst (type); }) +#endif + /* These was part of minmax phiopt. */ /* Optimize (a CMP b) ? minmax : minmax to minmax, c> */ @@ -11050,6 +11135,7 @@ and, ? gimple_assign_rhs1 (SSA_NAME_DEF_STMT (@0)) : @0); tree elt = ctor_single_nonzero_element (ctor); } (if (elt + && types_match (type, TREE_TYPE (elt)) && !HONOR_SNANS (type) && !HONOR_SIGNED_ZEROS (type)) { elt; })))) @@ -11745,7 +11831,7 @@ and, (plus:c (plus (rshift @0 integer_onep@1) (rshift @2 @1)) (bit_and (bit_ior @0 @2) integer_onep@3)) - (if (cfun && (cfun->curr_properties & PROP_last_full_fold) != 0 + (if (fold_before_rtl_expansion_p () && VECTOR_TYPE_P (type) && direct_internal_fn_supported_p (IFN_AVG_CEIL, type, OPTIMIZE_FOR_BOTH)) (IFN_AVG_CEIL @0 @2))) @@ -11754,7 +11840,7 @@ and, (minus (bit_ior @0 @2) (rshift (bit_xor @0 @2) integer_onep@1)) - (if (cfun && (cfun->curr_properties & PROP_last_full_fold) != 0 + (if (fold_before_rtl_expansion_p () && VECTOR_TYPE_P (type) && direct_internal_fn_supported_p (IFN_AVG_CEIL, type, OPTIMIZE_FOR_BOTH)) (IFN_AVG_CEIL @0 @2))) diff --git a/gcc/multiple_target.cc b/gcc/multiple_target.cc index d25277c0a930..02353d9dca62 100644 --- a/gcc/multiple_target.cc +++ b/gcc/multiple_target.cc @@ -58,8 +58,15 @@ replace_function_decl (tree *op, int *walk_subtrees, void *data) return NULL; } -/* If the call in NODE has multiple target attribute with multiple fields, - replace it with dispatcher call and create dispatcher (once). */ +/* In target FMV attributes, if the call in NODE has multiple target attribute + with multiple fields, replace it with calls to the dispatched symbol and + create the dispatcher body (once). + + In target_version semantics, if it is a lone annotated default, then + the dispatched symbol is changed to be an alias and no resolver is + required. Otherwise, redirect all calls and references to the dispatched + symbol, but only create the resolver body if the default version is + implemented. */ static void create_dispatcher_calls (struct cgraph_node *node) @@ -90,13 +97,48 @@ create_dispatcher_calls (struct cgraph_node *node) cgraph_node *inode = cgraph_node::get (idecl); gcc_assert (inode); - tree resolver_decl = targetm.generate_version_dispatcher_body (inode); - - /* Update aliases. */ - inode->alias = true; - inode->alias_target = resolver_decl; - if (!inode->analyzed) - inode->resolve_alias (cgraph_node::get (resolver_decl)); + cgraph_function_version_info *inode_info = inode->function_version (); + gcc_assert (inode_info); + + tree resolver_decl = NULL; + + /* For target_version semantics, if there is a lone default declaration + it needs to be mangled, with an alias from the dispatched symbol to the + default version. */ + if (!TARGET_HAS_FMV_TARGET_ATTRIBUTE + && TREE_STATIC (node->decl) + && inode_info->next + && !inode_info->next->next) + { + inode->alias = true; + inode->alias_target = inode_info->next->this_node->decl; + inode->externally_visible = true; + if (!inode->analyzed) + inode->resolve_alias + (cgraph_node::get (inode_info->next->this_node->decl)); + + DECL_ATTRIBUTES (idecl) + = make_attribute ("alias", + IDENTIFIER_POINTER + (DECL_ASSEMBLER_NAME + (inode_info->next->this_node->decl)), + DECL_ATTRIBUTES (node->decl)); + TREE_USED (idecl) = true; + DECL_EXTERNAL (idecl) = false; + TREE_STATIC (idecl) = true; + return; + } + /* In target_version semantics, only create the resolver if the + default node is implemented. */ + else if (TARGET_HAS_FMV_TARGET_ATTRIBUTE || TREE_STATIC (node->decl)) + { + resolver_decl = targetm.generate_version_dispatcher_body (inode); + /* Update aliases. */ + inode->alias = true; + inode->alias_target = resolver_decl; + if (!inode->analyzed) + inode->resolve_alias (cgraph_node::get (resolver_decl)); + } auto_vec edges_to_redirect; /* We need to capture the references by value rather than just pointers to them @@ -166,9 +208,6 @@ create_dispatcher_calls (struct cgraph_node *node) } } - tree fname = clone_function_name (node->decl, "default"); - symtab->change_decl_assembler_name (node->decl, fname); - if (node->definition) { /* FIXME: copy of cgraph_node::make_local that should be cleaned up @@ -184,100 +223,6 @@ create_dispatcher_calls (struct cgraph_node *node) } } -/* Create string with attributes separated by TARGET_CLONES_ATTR_SEPARATOR. - Return number of attributes. */ - -static int -get_attr_str (tree arglist, char *attr_str) -{ - tree arg; - size_t str_len_sum = 0; - int argnum = 0; - - for (arg = arglist; arg; arg = TREE_CHAIN (arg)) - { - const char *str = TREE_STRING_POINTER (TREE_VALUE (arg)); - size_t len = strlen (str); - for (const char *p = strchr (str, TARGET_CLONES_ATTR_SEPARATOR); - p; - p = strchr (p + 1, TARGET_CLONES_ATTR_SEPARATOR)) - argnum++; - memcpy (attr_str + str_len_sum, str, len); - attr_str[str_len_sum + len] - = TREE_CHAIN (arg) ? TARGET_CLONES_ATTR_SEPARATOR : '\0'; - str_len_sum += len + 1; - argnum++; - } - return argnum; -} - -/* Return number of attributes separated by TARGET_CLONES_ATTR_SEPARATOR - and put them into ARGS. - If there is no DEFAULT attribute return -1. - If there is an empty string in attribute return -2. - If there are multiple DEFAULT attributes return -3. - */ - -static int -separate_attrs (char *attr_str, char **attrs, int attrnum) -{ - int i = 0; - int default_count = 0; - static const char separator_str[] = { TARGET_CLONES_ATTR_SEPARATOR, 0 }; - - for (char *attr = strtok (attr_str, separator_str); - attr != NULL; attr = strtok (NULL, separator_str)) - { - if (strcmp (attr, "default") == 0) - { - default_count++; - continue; - } - attrs[i++] = attr; - } - if (default_count == 0) - return -1; - else if (default_count > 1) - return -3; - else if (i + default_count < attrnum) - return -2; - - return i; -} - -/* Return true if symbol is valid in assembler name. */ - -static bool -is_valid_asm_symbol (char c) -{ - if ('a' <= c && c <= 'z') - return true; - if ('A' <= c && c <= 'Z') - return true; - if ('0' <= c && c <= '9') - return true; - if (c == '_') - return true; - return false; -} - -/* Replace all not valid assembler symbols with '_'. */ - -static void -create_new_asm_name (char *old_asm_name, char *new_asm_name) -{ - int i; - int old_name_len = strlen (old_asm_name); - - /* Replace all not valid assembler symbols with '_'. */ - for (i = 0; i < old_name_len; i++) - if (!is_valid_asm_symbol (old_asm_name[i])) - new_asm_name[i] = '_'; - else - new_asm_name[i] = old_asm_name[i]; - new_asm_name[old_name_len] = '\0'; -} - /* Creates target clone of NODE. */ static cgraph_node * @@ -313,7 +258,6 @@ create_target_clone (cgraph_node *node, bool definition, char *name, static bool expand_target_clones (struct cgraph_node *node, bool definition) { - int i; /* Parsing target attributes separated by TARGET_CLONES_ATTR_SEPARATOR. */ tree attr_target = lookup_attribute ("target_clones", DECL_ATTRIBUTES (node->decl)); @@ -321,17 +265,32 @@ expand_target_clones (struct cgraph_node *node, bool definition) if (!attr_target) return false; - tree arglist = TREE_VALUE (attr_target); - int attr_len = get_target_clone_attr_len (arglist); + int num_defaults = 0; + auto_vec attr_list = get_clone_versions (node->decl, + &num_defaults); + + /* If the target clones list is empty after filtering, remove this node. */ + if (!TARGET_HAS_FMV_TARGET_ATTRIBUTE && attr_list.is_empty ()) + { + node->remove (); + return false; + } /* No need to clone for 1 target attribute. */ - if (attr_len == -1) + if (attr_list.length () == 1 && TARGET_HAS_FMV_TARGET_ATTRIBUTE) { warning_at (DECL_SOURCE_LOCATION (node->decl), 0, "single % attribute is ignored"); return false; } + /* For target_version semantics, a target clone with just a default version + is the same as an unannotated decl, so can ignore. */ + if (!TARGET_HAS_FMV_TARGET_ATTRIBUTE + && attr_list.length () == 1 + && num_defaults == 1) + return false; + if (node->definition && (node->alias || !tree_versionable_function_p (node->decl))) { @@ -352,172 +311,302 @@ expand_target_clones (struct cgraph_node *node, bool definition) return false; } - char *attr_str = XNEWVEC (char, attr_len); - int attrnum = get_attr_str (arglist, attr_str); - char **attrs = XNEWVEC (char *, attrnum); - - attrnum = separate_attrs (attr_str, attrs, attrnum); - switch (attrnum) + /* Disallow multiple defaults. */ + if (num_defaults > 1) { - case -1: - error_at (DECL_SOURCE_LOCATION (node->decl), - "% target was not set"); - break; - case -2: - error_at (DECL_SOURCE_LOCATION (node->decl), - "an empty string cannot be in % attribute"); - break; - case -3: error_at (DECL_SOURCE_LOCATION (node->decl), "multiple % targets were set"); - break; - default: - break; + return false; } - if (attrnum < 0) + /* For target FMV semantics, where target and target_clone mixing + is not supported, disallow target clones with no defaults. */ + if (TARGET_HAS_FMV_TARGET_ATTRIBUTE && num_defaults == 0) { - XDELETEVEC (attrs); - XDELETEVEC (attr_str); + error_at (DECL_SOURCE_LOCATION (node->decl), + "% target was not set"); return false; } - const char *new_attr_name = (TARGET_HAS_FMV_TARGET_ATTRIBUTE - ? "target" : "target_version"); - cgraph_function_version_info *decl1_v = NULL; - cgraph_function_version_info *decl2_v = NULL; - cgraph_function_version_info *before = NULL; - cgraph_function_version_info *after = NULL; - decl1_v = node->function_version (); - if (decl1_v == NULL) - decl1_v = node->insert_new_function_version (); - before = decl1_v; - DECL_FUNCTION_VERSIONED (node->decl) = 1; - - for (i = 0; i < attrnum; i++) + /* Disallow any empty values in the clone attr. */ + for (string_slice attr : attr_list) + if (attr.empty () || !attr.is_valid ()) + { + error_at (DECL_SOURCE_LOCATION (node->decl), + "an empty string cannot be in % attribute"); + return false; + } + + string_slice new_attr_name = TARGET_HAS_FMV_TARGET_ATTRIBUTE + ? "target" + : "target_version"; + + cgraph_function_version_info *node_v = node->function_version (); + + if (!node_v) + node_v = node->insert_new_function_version (); + + /* If this target_clones contains a default, then convert this node to the + default. If this node does not contain default (this is only possible + in target_version semantics) then remove the node. This is safe at this + point as only target_clones declarations containing default version is + resolvable so this decl will have no calls/references. */ + + tree attrs = remove_attribute ("target_clones", + DECL_ATTRIBUTES (node->decl)); + tree assembler_name = node_v->assembler_name; + + /* Change the current node into the default node. */ + if (num_defaults == 1) + { + /* Setting new attribute to initial function. */ + tree attributes = make_attribute (new_attr_name, "default", attrs); + DECL_ATTRIBUTES (node->decl) = attributes; + DECL_FUNCTION_VERSIONED (node->decl) = true; + + node->is_target_clone = true; + node->local = false; + + /* Remangle base node after new target version string set. */ + tree id = targetm.mangle_decl_assembler_name (node->decl, assembler_name); + symtab->change_decl_assembler_name (node->decl, id); + } + else + { + /* Target clones without a default are only allowed for target_version + semantics where we can have target_clones/target_version mixing. */ + gcc_assert (!TARGET_HAS_FMV_TARGET_ATTRIBUTE); + + /* If there isn't a default version, can safely remove this version. + The node itself gets removed after the other versions are created. */ + cgraph_function_version_info *temp = node_v; + node_v = node_v->next ? node_v->next : node_v->prev; + cgraph_node::delete_function_version (temp); + } + + for (string_slice attr : attr_list) { - char *attr = attrs[i]; + /* Skip default nodes. */ + if (attr == "default") + continue; /* Create new target clone. */ - tree attributes = make_attribute (new_attr_name, attr, - DECL_ATTRIBUTES (node->decl)); - - char *suffix = XNEWVEC (char, strlen (attr) + 1); - create_new_asm_name (attr, suffix); - cgraph_node *new_node = create_target_clone (node, definition, suffix, - attributes); - XDELETEVEC (suffix); + tree attributes = make_attribute (new_attr_name, attr, attrs); + + cgraph_node *new_node + = create_target_clone (node, definition, NULL, attributes); if (new_node == NULL) - { - XDELETEVEC (attrs); - XDELETEVEC (attr_str); - return false; - } + return false; new_node->local = false; - decl2_v = new_node->function_version (); - if (decl2_v != NULL) - continue; - decl2_v = new_node->insert_new_function_version (); - - /* Chain decl2_v and decl1_v. All semantically identical versions - will be chained together. */ - after = decl2_v; - while (before->next != NULL) - before = before->next; - while (after->prev != NULL) - after = after->prev; - - before->next = after; - after->prev = before; - DECL_FUNCTION_VERSIONED (new_node->decl) = 1; + DECL_FUNCTION_VERSIONED (new_node->decl) = true; + if (!node_v) + node_v = new_node->insert_new_function_version (); + else + cgraph_node::add_function_version (node_v, new_node->decl); + + /* Use the base node's assembler name for all created nodes. */ + new_node->function_version ()->assembler_name = assembler_name; + new_node->is_target_clone = true; + + /* Mangle all new nodes. */ + tree id = targetm.mangle_decl_assembler_name + (new_node->decl, new_node->function_version ()->assembler_name); + symtab->change_decl_assembler_name (new_node->decl, id); } - XDELETEVEC (attrs); - XDELETEVEC (attr_str); + /* If there are no default versions in the target_clones, this node is not + reused, so can delete this node. */ + if (num_defaults == 0) + node->remove (); - /* Setting new attribute to initial function. */ - tree attributes = make_attribute (new_attr_name, "default", - DECL_ATTRIBUTES (node->decl)); - DECL_ATTRIBUTES (node->decl) = attributes; - node->local = false; return true; } -/* When NODE is a target clone, consider all callees and redirect - to a clone with equal target attributes. That prevents multiple - multi-versioning dispatches and a call-chain can be optimized. - - This optimisation might pick the wrong version in some cases, since knowing - that we meet the target requirements for a matching callee version does not - tell us that we won't also meet the target requirements for a higher - priority callee version at runtime. Since this is longstanding behaviour - for x86 and powerpc, we preserve it for those targets, but skip the optimisation - for targets that use the "target_version" attribute for multi-versioning. */ +/* When NODE is part of an FMV function set, consider all callees and check if + any can provably always resolve a certain version and then call that version + directly. */ static void redirect_to_specific_clone (cgraph_node *node) { - cgraph_function_version_info *fv = node->function_version (); - if (fv == NULL) - return; - - gcc_assert (TARGET_HAS_FMV_TARGET_ATTRIBUTE); - tree attr_target = lookup_attribute ("target", DECL_ATTRIBUTES (node->decl)); - if (attr_target == NULL_TREE) + if (!targetm.compare_version_priority || !optimize) return; /* We need to remember NEXT_CALLER as it could be modified in the loop. */ for (cgraph_edge *e = node->callees; e ; e = e->next_callee) { - cgraph_function_version_info *fv2 = e->callee->function_version (); - if (!fv2) + /* Only if this is a call to a dispatched symbol. */ + if (!e->callee->dispatcher_function) continue; - tree attr_target2 = lookup_attribute ("target", - DECL_ATTRIBUTES (e->callee->decl)); + cgraph_function_version_info *callee_v + = e->callee->function_version (); + cgraph_function_version_info *caller_v + = e->caller->function_version (); + + gcc_assert (callee_v); - /* Function is not calling proper target clone. */ - if (attr_target2 == NULL_TREE - || !attribute_value_equal (attr_target, attr_target2)) + /* Find the default nodes for both callee and caller (if present). */ + cgraph_function_version_info *callee_default_v = callee_v->next; + cgraph_function_version_info *caller_default_v = caller_v; + if (caller_v) { - while (fv2->prev != NULL) - fv2 = fv2->prev; + while (caller_default_v->prev) + caller_default_v = caller_default_v->prev; + if (!is_function_default_version (caller_default_v->this_node->decl)) + caller_default_v = NULL; + } + + /* If this is not the TU that contains the definition of the default + version we are not guaranteed to have visibility of all versions + so cannot reason about them. */ + if (!callee_default_v + || !callee_default_v->this_node->binds_to_current_def_p ()) + continue; + + cgraph_function_version_info *highest_callable_fn = NULL; + for (cgraph_function_version_info *ver = callee_v->next; + ver; + ver = ver->next) + if (targetm.target_option.functions_b_resolvable_from_a + (node->decl, ver->this_node->decl, node->decl)) + highest_callable_fn = ver; + + if (!highest_callable_fn) + continue; - /* Try to find a clone with equal target attribute. */ - for (; fv2 != NULL; fv2 = fv2->next) + bool inlinable = true; + + /* If there are higher priority versions of callee and caller has no + more version information, then not callable. */ + if (highest_callable_fn->next) + { + /* If this is not the TU where the callee default is defined then + cannot reason about the caller versions. */ + if (!caller_default_v + || !caller_default_v->this_node->binds_to_current_def_p ()) + continue; + + /* If every higher priority version would imply a higher priority + version of caller would have been selected, then this is + callable. */ + for (cgraph_function_version_info *callee_ver + = highest_callable_fn->next; + callee_ver; callee_ver = callee_ver->next) { - cgraph_node *callee = fv2->this_node; - attr_target2 = lookup_attribute ("target", - DECL_ATTRIBUTES (callee->decl)); - if (attr_target2 != NULL_TREE - && attribute_value_equal (attr_target, attr_target2)) + bool is_possible = true; + for (cgraph_function_version_info *caller_ver = caller_v->next; + caller_ver; caller_ver = caller_ver->next) + if (targetm.target_option.functions_b_resolvable_from_a + (callee_ver->this_node->decl, caller_ver->this_node->decl, + node->decl)) + { + is_possible = false; + break; + } + if (is_possible) { - e->redirect_callee (callee); - cgraph_edge::redirect_call_stmt_to_callee (e); + inlinable = false; break; } } } + if (inlinable) + { + e->redirect_callee (highest_callable_fn->this_node); + cgraph_edge::redirect_call_stmt_to_callee (e); + } } } +/* Checks if NODE is in the 'simple' target_clones case, which is where NODE + is a declaration annotated with target_clones containing the default, and it + is the sole function declaration in the FMV function set. */ + +static bool +is_simple_target_clones_case (cgraph_node *node) +{ + /* target attribute semantics doesnt support the complex case, + so this is always true. */ + if (TARGET_HAS_FMV_TARGET_ATTRIBUTE) + return true; + + int num_defaults = 0; + auto versions = get_clone_versions (node->decl, &num_defaults); + if (versions.is_empty () || num_defaults != 1) + return false; + + cgraph_function_version_info *fv = node->function_version (); + + if (fv && (fv->next || fv->prev)) + return false; + + return true; +} + static unsigned int -ipa_target_clone (void) +ipa_target_clone (bool early) { struct cgraph_node *node; auto_vec to_dispatch; - FOR_EACH_FUNCTION (node) - if (expand_target_clones (node, node->definition)) - to_dispatch.safe_push (node); + /* Don't need to do anything early for target attribute semantics. */ + if (early && TARGET_HAS_FMV_TARGET_ATTRIBUTE) + return 0; + + /* For target attribute semantics, this pass skips the early phase, and in + the later stage is only responsible for expanding and dispatching + target_clone declarations, as target annotated functions are dispatched + in the front end. + + The expanding and dispatching can be done at the late stage as the + target_clone functions aren't allowed to be part of a larger FMV set, so + all versions will all have the same body, so early optimisations are safe + to treat a call to a target_clones set as a call to one function. + + For target_version semantics, this pass is responsible for expanding + target_clones and dispatching all FMV function sets, including ones only + made up of target_version declarations. + + Cases where there is more than one declaration must be expanded and + dispatched at the early stage, as the declarations may have different + bodies, and so the early optimisation passes would not be valid. + + The late stage is only used for the expansion and dispatching of the simple + case where the FMV set is defined by a single target_clone attribute. */ + + FOR_EACH_FUNCTION_REMOVABLE (node) + { + /* In the early stage, we need to expand any target clone that is not + the simple case. Simple cases are dispatched in the later stage. */ + + if (early == !is_simple_target_clones_case (node)) + if (expand_target_clones (node, node->definition) + && TARGET_HAS_FMV_TARGET_ATTRIBUTE) + /* In non target_version semantics, dispatch all target clones. */ + to_dispatch.safe_push (node); + } + + /* In target_version semantics dispatch all FMV function sets with a default + implementation in the early stage. + Also dispatch any default versions generated by expanding target_clones + in the late stage. */ + + if (!TARGET_HAS_FMV_TARGET_ATTRIBUTE) + FOR_EACH_FUNCTION (node) + if (is_function_default_version (node->decl) + && DECL_FUNCTION_VERSIONED (node->decl) + /* Don't dispatch target clones, as they haven't been expanded so + are simple. */ + && !lookup_attribute ("target_clones", DECL_ATTRIBUTES (node->decl))) + to_dispatch.safe_push (node); for (unsigned i = 0; i < to_dispatch.length (); i++) create_dispatcher_calls (to_dispatch[i]); - if (TARGET_HAS_FMV_TARGET_ATTRIBUTE) - FOR_EACH_FUNCTION (node) - redirect_to_specific_clone (node); + FOR_EACH_FUNCTION (node) + redirect_to_specific_clone (node); return 0; } @@ -541,14 +630,21 @@ class pass_target_clone : public simple_ipa_opt_pass { public: pass_target_clone (gcc::context *ctxt) - : simple_ipa_opt_pass (pass_data_target_clone, ctxt) + : simple_ipa_opt_pass (pass_data_target_clone, ctxt), early_p (false) {} + bool early_p; + void set_pass_param (unsigned int n, bool param) final override + { + gcc_assert (n == 0); + early_p = param; + } /* opt_pass methods: */ bool gate (function *) final override; + opt_pass * clone () final override { return new pass_target_clone (m_ctxt); } unsigned int execute (function *) final override { - return ipa_target_clone (); + return ipa_target_clone (early_p); } }; diff --git a/gcc/omp-general.cc b/gcc/omp-general.cc index c799b8936f99..973b246cfdb8 100644 --- a/gcc/omp-general.cc +++ b/gcc/omp-general.cc @@ -2733,7 +2733,7 @@ omp_dynamic_cond (tree ctx, tree supercontext) /* The user condition is not dynamic if it is constant. */ if (!tree_fits_shwi_p (expr)) - user_cond = expr; + user_cond = unshare_expr (expr); } /* Build the "target_device" part of the dynamic selector. In the diff --git a/gcc/omp-low.cc b/gcc/omp-low.cc index 9d80a3573dce..6b0135ecdd97 100644 --- a/gcc/omp-low.cc +++ b/gcc/omp-low.cc @@ -14780,6 +14780,8 @@ lower_omp_regimplify_operands_p (tree *tp, int *walk_subtrees, lower_omp_regimplify_operands_data *ldata = (lower_omp_regimplify_operands_data *) wi->info; tree o = maybe_lookup_decl (t, ldata->ctx); + if (o == NULL_TREE) + o = maybe_lookup_decl_in_outer_ctx (t, ldata->ctx); if (o != t) { ldata->decls->safe_push (DECL_VALUE_EXPR (*tp)); diff --git a/gcc/optabs.def b/gcc/optabs.def index b59d02bce14c..790e43f08f47 100644 --- a/gcc/optabs.def +++ b/gcc/optabs.def @@ -493,6 +493,7 @@ OPTAB_D (vec_widen_uabd_hi_optab, "vec_widen_uabd_hi_$a") OPTAB_D (vec_widen_uabd_lo_optab, "vec_widen_uabd_lo_$a") OPTAB_D (vec_widen_uabd_odd_optab, "vec_widen_uabd_odd_$a") OPTAB_D (vec_widen_uabd_even_optab, "vec_widen_uabd_even_$a") +OPTAB_D (vec_trunc_add_high_optab, "vec_trunc_add_high$a") OPTAB_D (vec_addsub_optab, "vec_addsub$a3") OPTAB_D (vec_fmaddsub_optab, "vec_fmaddsub$a4") OPTAB_D (vec_fmsubadd_optab, "vec_fmsubadd$a4") diff --git a/gcc/opts-diagnostic.cc b/gcc/opts-diagnostic.cc index 0e0296ab5aa7..a230c2119a9f 100644 --- a/gcc/opts-diagnostic.cc +++ b/gcc/opts-diagnostic.cc @@ -47,12 +47,15 @@ struct opt_spec_context : public diagnostics::output_spec::dc_spec_context diagnostics::context &dc, line_maps *location_mgr, location_t loc, - const char *option_name) - : dc_spec_context (dc, + const char *option_name, + const char *option_value) + : dc_spec_context (option_name, + option_value, + nullptr, location_mgr, + dc, location_mgr, - loc, - option_name), + loc), m_opts (opts) {} @@ -72,17 +75,17 @@ struct opt_spec_context : public diagnostics::output_spec::dc_spec_context void handle_OPT_fdiagnostics_add_output_ (const gcc_options &opts, diagnostics::context &dc, - const char *arg, + const char *unparsed_spec, location_t loc) { - gcc_assert (arg); + gcc_assert (unparsed_spec); gcc_assert (line_table); const char *const option_name = "-fdiagnostics-add-output="; DIAGNOSTICS_LOG_SCOPE_PRINTF2 (dc.get_logger (), - "handling: %s%s", option_name, arg); - opt_spec_context ctxt (opts, dc, line_table, loc, option_name); - auto sink = ctxt.parse_and_make_sink (arg, dc); + "handling: %s%s", option_name, unparsed_spec); + opt_spec_context ctxt (opts, dc, line_table, loc, option_name, unparsed_spec); + auto sink = ctxt.parse_and_make_sink (dc); if (!sink) return; @@ -93,17 +96,17 @@ handle_OPT_fdiagnostics_add_output_ (const gcc_options &opts, void handle_OPT_fdiagnostics_set_output_ (const gcc_options &opts, diagnostics::context &dc, - const char *arg, + const char *unparsed_spec, location_t loc) { - gcc_assert (arg); + gcc_assert (unparsed_spec); gcc_assert (line_table); const char *const option_name = "-fdiagnostics-set-output="; DIAGNOSTICS_LOG_SCOPE_PRINTF2 (dc.get_logger (), - "handling: %s%s", option_name, arg); - opt_spec_context ctxt (opts, dc, line_table, loc, option_name); - auto sink = ctxt.parse_and_make_sink (arg, dc); + "handling: %s%s", option_name, unparsed_spec); + opt_spec_context ctxt (opts, dc, line_table, loc, option_name, unparsed_spec); + auto sink = ctxt.parse_and_make_sink (dc); if (!sink) return; diff --git a/gcc/opts.cc b/gcc/opts.cc index 10ce2c3de336..21ac6b566e0b 100644 --- a/gcc/opts.cc +++ b/gcc/opts.cc @@ -18,6 +18,7 @@ You should have received a copy of the GNU General Public License along with GCC; see the file COPYING3. If not see . */ +#define INCLUDE_VECTOR #include "config.h" #include "system.h" #include "intl.h" diff --git a/gcc/params.opt b/gcc/params.opt index dd53d830895f..f8884e976e7f 100644 --- a/gcc/params.opt +++ b/gcc/params.opt @@ -66,6 +66,10 @@ Enable asan stack protection. Common Joined UInteger Var(param_asan_use_after_return) Init(1) IntegerRange(0, 1) Param Optimization Enable asan detection of use-after-return bugs. +-param=auto-profile-bbs= +Common Joined UInteger Var(param_auto_profile_bbs) Init(1) IntegerRange(0, 1) Param Optimization +Build basic block profile using auto profile. + -param=cycle-accurate-model= Common Joined UInteger Var(param_cycle_accurate_model) Init(1) IntegerRange(0, 1) Param Optimization Whether the scheduling description is mostly a cycle-accurate model of the target processor and is likely to be spill aggressively to fill any pipeline bubbles. @@ -548,6 +552,10 @@ The maximum number of instructions to consider to find accurate live register in Common Joined UInteger Var(param_max_dse_active_local_stores) Init(5000) Param Optimization Maximum number of active local stores in RTL dead store elimination. +-param=max-devirt-targets= +Common Joined UInteger Var(param_max_devirt_targets) Init(3) Param Optimization +Maximum number of targets to devirutalize. + -param=max-early-inliner-iterations= Common Joined UInteger Var(param_early_inliner_max_iterations) Init(1) Param Optimization The maximum number of nested indirect inlining performed by early inliner. diff --git a/gcc/passes.def b/gcc/passes.def index e9610de9e2f9..fac04cd86c7d 100644 --- a/gcc/passes.def +++ b/gcc/passes.def @@ -66,6 +66,7 @@ along with GCC; see the file COPYING3. If not see NEXT_PASS (pass_nothrow); NEXT_PASS (pass_rebuild_cgraph_edges); POP_INSERT_PASSES () + NEXT_PASS (pass_target_clone, true); NEXT_PASS (pass_local_optimization_passes); PUSH_INSERT_PASSES_WITHIN (pass_local_optimization_passes) @@ -143,7 +144,7 @@ along with GCC; see the file COPYING3. If not see POP_INSERT_PASSES () POP_INSERT_PASSES () - NEXT_PASS (pass_target_clone); + NEXT_PASS (pass_target_clone, false); NEXT_PASS (pass_ipa_auto_profile); PUSH_INSERT_PASSES_WITHIN (pass_ipa_auto_profile) NEXT_PASS (pass_feedback_split_functions); @@ -368,7 +369,6 @@ along with GCC; see the file COPYING3. If not see NEXT_PASS (pass_forwprop, /*full_walk=*/false, /*last=*/true); NEXT_PASS (pass_sink_code, true /* unsplit edges */); NEXT_PASS (pass_phiopt, false /* early_p */); - NEXT_PASS (pass_fold_builtins); NEXT_PASS (pass_optimize_widening_mul); NEXT_PASS (pass_store_merging); /* If DCE is not run before checking for uninitialized uses, @@ -404,12 +404,9 @@ along with GCC; see the file COPYING3. If not see NEXT_PASS (pass_ccp, true /* nonzero_p */); NEXT_PASS (pass_post_ipa_warn); NEXT_PASS (pass_object_sizes); - /* Fold remaining builtins. */ - NEXT_PASS (pass_fold_builtins); NEXT_PASS (pass_strlen); - /* Copy propagation also copy-propagates constants, this is necessary - to forward object-size and builtin folding results properly. */ - NEXT_PASS (pass_copy_prop); + /* Fold remaining builtins. */ + NEXT_PASS (pass_forwprop, /*full_walk=*/false, /*last=*/true); NEXT_PASS (pass_dce); /* Profile count may overflow as a result of inlinining very large loop nests. This pass should run before any late pass that makes diff --git a/gcc/predict.cc b/gcc/predict.cc index 5639d81d2770..895c5f959d02 100644 --- a/gcc/predict.cc +++ b/gcc/predict.cc @@ -852,7 +852,7 @@ unlikely_executed_stmt_p (gimple *stmt) heuristics. */ if (gimple_bb (stmt)->count.reliable_p () && gimple_bb (stmt)->count.nonzero_p ()) - return gimple_bb (stmt)->count == profile_count::zero (); + return false; /* NORETURN attribute alone is not strong enough: exit() may be quite likely executed once during program run. */ if (gimple_call_fntype (stmt) @@ -4521,6 +4521,9 @@ rebuild_frequencies (void) && (!uninitialized_count_found || uninitialized_probablity_found) && !cfun->cfg->count_max.very_large_p ()) { + /* Propagating zero counts should be safe and may + help hot/cold splitting. */ + determine_unlikely_bbs (); if (dump_file) fprintf (dump_file, "Profile is consistent\n"); return; @@ -4545,6 +4548,9 @@ rebuild_frequencies (void) for a given run, we would only propagate the error further. */ if (feedback_found && !uninitialized_count_found) { + /* Propagating zero counts should be safe and may + help hot/cold splitting. */ + determine_unlikely_bbs (); if (dump_file) fprintf (dump_file, "Profile is inconsistent but read from profile feedback;" diff --git a/gcc/pretty-print.cc b/gcc/pretty-print.cc index d79a8282cfbb..b4d69101ceb6 100644 --- a/gcc/pretty-print.cc +++ b/gcc/pretty-print.cc @@ -38,11 +38,18 @@ along with GCC; see the file COPYING3. If not see #include #endif +static int +decode_utf8_char (const unsigned char *, size_t len, unsigned int *); + #ifdef __MINGW32__ /* Replacement for fputs() that handles ANSI escape codes on Windows NT. Contributed by: Liu Hao (lh_mouse at 126 dot com) + Extended by: Peter Damianov + Converts UTF-8 to UTF-16 if outputting to a console, so that emojis and + various other unicode characters don't get mojibak'd. + XXX: This file is compiled into libcommon.a that will be self-contained. It looks like that these functions can be put nowhere else. */ @@ -50,11 +57,132 @@ along with GCC; see the file COPYING3. If not see #define WIN32_LEAN_AND_MEAN 1 #include +/* Convert UTF-8 string to UTF-16. + Returns true if conversion was performed, false if string is pure ASCII. + + If the string contains only ASCII characters, returns false + without allocating any memory. Otherwise, a buffer that the caller + must free is allocated and the string is converted into it. */ +static bool +mingw_utf8_str_to_utf16_str (const char *utf8_str, size_t utf8_len, wchar_t **utf16_str, + size_t *utf16_len) +{ + if (utf8_len == 0) + { + *utf16_str = NULL; + *utf16_len = 0; + return false; /* No conversion needed for empty string. */ + } + + /* First pass: scan for non-ASCII and count UTF-16 code units needed. */ + size_t utf16_count = 0; + const unsigned char *p = (const unsigned char *) utf8_str; + const unsigned char *end = p + utf8_len; + bool found_non_ascii = false; + + while (p < end) + { + if (*p <= 127) + { + /* ASCII character - count as 1 UTF-16 unit and advance. */ + utf16_count++; + p++; + } + else + { + /* Non-ASCII character - decode UTF-8 sequence. */ + found_non_ascii = true; + unsigned int codepoint; + int utf8_char_len = decode_utf8_char (p, end - p, &codepoint); + + if (utf8_char_len == 0) + return false; /* Invalid UTF-8. */ + + if (codepoint <= 0xFFFF) + utf16_count += 1; /* Single UTF-16 unit. */ + else + utf16_count += 2; /* Surrogate pair. */ + + p += utf8_char_len; + } + } + + /* If string is pure ASCII, no conversion needed. */ + if (!found_non_ascii) + return false; + + *utf16_str = (wchar_t *) xmalloc (utf16_count * sizeof (wchar_t)); + *utf16_len = utf16_count; + + /* Second pass: convert UTF-8 to UTF-16. */ + wchar_t *out = *utf16_str; + p = (const unsigned char *) utf8_str; + + while (p < end) + { + if (*p <= 127) + { + /* ASCII character. */ + *out++ = (wchar_t) *p++; + } + else + { + /* Non-ASCII character - decode and convert. */ + unsigned int codepoint; + int utf8_char_len = decode_utf8_char (p, end - p, &codepoint); + + if (codepoint <= 0xFFFF) + { + *out++ = (wchar_t) codepoint; + } + else + { + /* Convert to UTF-16 surrogate pair. */ + codepoint -= 0x10000; + *out++ = (wchar_t) (0xD800 + (codepoint >> 10)); + *out++ = (wchar_t) (0xDC00 + (codepoint & 0x3FF)); + } + + p += utf8_char_len; + } + } + + return true; +} + +/* Check if the handle is a console. */ +static bool +is_console_handle (HANDLE h) +{ + DWORD mode; + return GetConsoleMode (h, &mode); +} + /* Write all bytes in [s,s+n) into the specified stream. - Errors are ignored. */ + If outputting to a Windows console, convert UTF-8 to UTF-16 if needed. + Errors are ignored. */ static void write_all (HANDLE h, const char *s, size_t n) { + /* If writing to console, try to convert from UTF-8 to UTF-16 and use + WriteConsoleW. utf8_to_utf16 will return false if the string is pure + ASCII, in which case we fall back to the regular WriteFile path. */ + if (is_console_handle (h)) + { + wchar_t *utf16_str; + size_t utf16_len; + + if (mingw_utf8_str_to_utf16_str (s, n, &utf16_str, &utf16_len)) + { + DWORD written; + WriteConsoleW (h, utf16_str, utf16_len, &written, NULL); + free (utf16_str); + return; + } + /* If UTF-8 conversion returned false, fall back to WriteFile. */ + } + + /* WriteFile for regular files or when UTF-16 conversion is not needed. */ size_t rem = n; DWORD step; @@ -712,8 +840,6 @@ mingw_ansi_fputs (const char *str, FILE *fp) #endif /* __MINGW32__ */ -static int -decode_utf8_char (const unsigned char *, size_t len, unsigned int *); static void pp_quoted_string (pretty_printer *, const char *, size_t = -1); extern void diff --git a/gcc/profile-count.h b/gcc/profile-count.h index 65c4596a2b0f..89746c6749fd 100644 --- a/gcc/profile-count.h +++ b/gcc/profile-count.h @@ -450,9 +450,7 @@ class GTY((user)) profile_probability else { gcc_checking_assert (other.m_val); - ret.m_val = MIN (RDIV ((uint64_t)m_val * max_probability, - other.m_val), - max_probability); + ret.m_val = RDIV ((uint64_t)m_val * max_probability, other.m_val); } ret.set_quality (MIN (MIN (quality (), other.quality ()), ADJUSTED)); return ret; @@ -480,9 +478,7 @@ class GTY((user)) profile_probability else { gcc_checking_assert (other.m_val); - m_val = MIN (RDIV ((uint64_t)m_val * max_probability, - other.m_val), - max_probability); + m_val = RDIV ((uint64_t)m_val * max_probability, other.m_val); } set_quality (MIN (MIN (quality (), other.quality ()), ADJUSTED)); } @@ -576,9 +572,8 @@ class GTY((user)) profile_probability gcc_checking_assert (den.m_val); profile_probability ret; - uint64_t val; - safe_scale_64bit (m_val, num.m_val, den.m_val, &val); - ret.m_val = MIN (val, max_probability); + ret.m_val = MIN (RDIV ((uint64_t)m_val * num.m_val, den.m_val), + max_probability); ret.set_quality (MIN (MIN (MIN (quality (), ADJUSTED), num.quality ()), den.quality ())); return ret; @@ -1331,8 +1326,14 @@ struct GTY(()) profile_count return ret; } else - ret.m_val = RDIV (m_val * profile_probability::max_probability, - overall.m_val); + { + gcc_checking_assert (overall.m_val); + uint64_t tmp; + safe_scale_64bit (m_val, profile_probability::max_probability, + overall.m_val, &tmp); + gcc_checking_assert (tmp <= profile_probability::max_probability); + ret.m_val = tmp; + } ret.set_quality (MIN (MAX (MIN (m_quality, overall.m_quality), GUESSED), ADJUSTED)); return ret; diff --git a/gcc/sarif-replay.cc b/gcc/sarif-replay.cc index c740c29b2a32..aa7f2debe9cc 100644 --- a/gcc/sarif-replay.cc +++ b/gcc/sarif-replay.cc @@ -37,6 +37,7 @@ set_defaults (replay_options &replay_opts) replay_opts.m_echo_file = false; replay_opts.m_json_comments = false; replay_opts.m_verbose = false; + replay_opts.m_debug_physical_locations = false; replay_opts.m_diagnostics_colorize = DIAGNOSTIC_COLORIZE_IF_TTY; } diff --git a/gcc/sched-rgn.cc b/gcc/sched-rgn.cc index adae78449163..5382fde1c314 100644 --- a/gcc/sched-rgn.cc +++ b/gcc/sched-rgn.cc @@ -1532,7 +1532,12 @@ compute_trg_info (int trg) int tf = prob[trg], cf = prob[i]; /* In CFGs with low probability edges TF can possibly be zero. */ - sp->src_prob = (tf ? GCOV_COMPUTE_SCALE (cf, tf) : 0); + sp->src_prob = (tf ? + profile_count::from_gcov_type (cf) + .probability_in + (profile_count::from_gcov_type (tf)) + .to_reg_br_prob_base () + : 0); sp->is_valid = (sp->src_prob >= min_spec_prob); } diff --git a/gcc/simplify-rtx.cc b/gcc/simplify-rtx.cc index 8f0f16c865d1..c4de035b44fd 100644 --- a/gcc/simplify-rtx.cc +++ b/gcc/simplify-rtx.cc @@ -3465,7 +3465,9 @@ simplify_context::simplify_binary_operation_1 (rtx_code code, return plus_constant (mode, op0, trunc_int_for_mode (-offset, mode)); /* Don't let a relocatable value get a negative coeff. */ - if (poly_int_rtx_p (op1) && GET_MODE (op0) != VOIDmode) + if (is_a (mode) + && poly_int_rtx_p (op1) + && GET_MODE (op0) != VOIDmode) return simplify_gen_binary (PLUS, mode, op0, neg_poly_int_rtx (mode, op1)); @@ -3699,6 +3701,19 @@ simplify_context::simplify_binary_operation_1 (rtx_code code, /* If (C1|C2) == ~0 then (X&C1)|C2 becomes X|C2. */ if (((c1|c2) & mask) == mask) return simplify_gen_binary (IOR, mode, XEXP (op0, 0), op1); + + /* If (C1|C2) has a single bit clear, then adjust C1 so that + when split it'll match a single bit clear style insn. + + This could have been done with a target dependent splitter, but + then every target with single bit manipulation insns would need + to implement such splitters. */ + if (exact_log2 (~(c1 | c2)) >= 0) + { + rtx temp = gen_rtx_AND (mode, XEXP (op0, 0), GEN_INT (c1 | c2)); + temp = gen_rtx_IOR (mode, temp, trueop1); + return temp; + } } /* Convert (A & B) | A to A. */ diff --git a/gcc/stmt.cc b/gcc/stmt.cc index 7942aa3e4848..f42878ae2077 100644 --- a/gcc/stmt.cc +++ b/gcc/stmt.cc @@ -849,7 +849,8 @@ resolve_asm_operand_names (tree string, tree outputs, tree inputs, tree labels) { if (c[1] == '[') break; - else if (ISALPHA (c[1]) && c[2] == '[') + else if (ISALPHA (c[1]) + && (c[2] == '[' || (ISALPHA (c[2]) && c[3] == '['))) break; else { @@ -873,6 +874,8 @@ resolve_asm_operand_names (tree string, tree outputs, tree inputs, tree labels) p += 1; else if (ISALPHA (p[1]) && p[2] == '[') p += 2; + else if (ISALPHA (p[1]) && ISALPHA (p[2]) && p[3] == '[') + p += 3; else { p += 1 + (p[1] == '%'); diff --git a/gcc/target.def b/gcc/target.def index 8e491d838642..31c7af1f8bcc 100644 --- a/gcc/target.def +++ b/gcc/target.def @@ -1925,13 +1925,13 @@ DEFHOOK (support_vector_misalignment, "This hook should return true if the target supports misaligned vector\n\ store/load of a specific factor denoted in the @var{misalignment}\n\ -parameter. The vector store/load should be of machine mode @var{mode} and\n\ -the elements in the vectors should be of type @var{type}. The\n\ -@var{is_packed} parameter is true if the misalignment is unknown and the\n\ -memory access is defined in a packed struct. @var{is_gather_scatter} is true\n\ -if the load/store is a gather or scatter.", +parameter. The vector store/load should be of machine mode @var{mode}.\n\ +The @var{is_packed} parameter is true if the original memory access is\n\ +not naturally aligned. @var{is_gather_scatter} is true if the\n\ +load/store is a gather or scatter. In that case misalignment\n\ +denotes the misalignment of @var{mode}'s element mode.", bool, - (machine_mode mode, const_tree type, int misalignment, bool is_packed, + (machine_mode mode, int misalignment, bool is_packed, bool is_gather_scatter), default_builtin_support_vector_misalignment) @@ -2606,6 +2606,19 @@ version at run-time. @var{decl} is one version from a set of semantically\n\ identical versions.", tree, (void *decl), NULL) +/* Target hook is used to ignore certain versions specified in a target_clones + annoration. STR is the version to be considered. */ +DEFHOOK +(check_target_clone_version , + "This hook is used to check if a version specified in a @code{target_clones}\n\ +annotation is valid. @var{str} is the version to be considered.\n\ +If @var{loc} is not @code{NULL} then emit warnings for invalid versions at\n\ +that location. Otherwise emit no diagnostics.\n\ +Returns @code{true} if @var{str} is a valid version string, and @code{false}\n\ +otherwise", + bool, (string_slice str, location_t *loc), + hook_stringslice_locationtptr_true) + /* Returns a code for a target-specific builtin that implements reciprocal of a target-specific function, or NULL_TREE if not available. */ DEFHOOK @@ -6912,19 +6925,36 @@ changed via the optimize attribute or pragma, see\n\ void, (void), hook_void_void) -/* This function returns true if DECL1 and DECL2 are versions of the same - function. DECL1 and DECL2 are function versions if and only if they - have the same function signature and different target specific attributes, - that is, they are compiled for different target machines. */ -DEFHOOK -(function_versions, - "This target hook returns @code{true} if @var{DECL1} and @var{DECL2} are\n\ -versions of the same function. @var{DECL1} and @var{DECL2} are function\n\ -versions if and only if they have the same function signature and\n\ -different target specific attributes, that is, they are compiled for\n\ -different target machines.", - bool, (tree decl1, tree decl2), - hook_bool_tree_tree_false) +/* This function returns true if FN1 and FN2 define the same version of a + function. */ +DEFHOOK +(same_function_versions, + "This target hook returns @code{true} if the target/target-version strings\n\ +@var{fn1} and @var{fn2} imply the same function version.", + bool, (string_slice fn1, string_slice fn2), + hook_stringslice_stringslice_unreachable) + +/* Checks if we can be certain that function DECL_A could resolve DECL_B. */ +DEFHOOK +(functions_b_resolvable_from_a, + "@var{decl_b} is a function declaration with a function multi-versioning\n\ +(FMV) attribute; this attribute is either @code{target} or\n\ +@code{target_version}, depending on @code{TARGET_HAS_FMV_TARGET_ATTRIBUTE}.\n\ +@var{decl_a} is a function declaration that may or may not have an FMV\n\ +attribute.\n\ +\n\ +Return true if we have enough information to determine that the\n\ +requirements of @var{decl_b}'s FMV attribute are met whenever @var{decl_a}\n\ +is executed, given that the target supports all features required by\n\ +function declaration @var{base}.\n\ +\n\ +The default implementation just checks whether @var{decl_a} has the same\n\ +FMV attribute as @var{decl_b}. This is conservatively correct,\n\ +but ports can do better by taking the relationships between architecture\n\ +features into account. For example, on AArch64, @code{sve} is present\n\ +whenever @code{sve2} is present.", + bool, (tree decl_a, tree decl_v, tree base), + functions_b_resolvable_from_a) /* Function to determine if one function can inline another function. */ #undef HOOK_PREFIX @@ -7238,9 +7268,10 @@ It is false if we must use @command{collect2}.", DEFHOOKPOD (dtors_from_cxa_atexit, "This value is true if the target wants destructors to be queued to be\n\ -run from __cxa_atexit. If this is the case then, for each priority level,\n\ -a new constructor will be entered that registers the destructors for that\n\ -level with __cxa_atexit (and there will be no destructors emitted).\n\ +run from @code{__cxa_atexit}. If this is the case then, for each\n\ +priority level, a new constructor will be entered that registers the\n\ +destructors for that level with @code{__cxa_atexit} (and there will be\n\ +no destructors emitted).\n\ It is false the method implied by @code{have_ctors_dtors} is used.", bool, false) diff --git a/gcc/targhooks.cc b/gcc/targhooks.cc index 947e39aedc18..dfd46eeb8af8 100644 --- a/gcc/targhooks.cc +++ b/gcc/targhooks.cc @@ -1551,8 +1551,6 @@ default_builtin_vector_alignment_reachable (const_tree /*type*/, bool is_packed) is_packed is true if the memory access is defined in a packed struct. */ bool default_builtin_support_vector_misalignment (machine_mode mode, - const_tree type - ATTRIBUTE_UNUSED, int misalignment ATTRIBUTE_UNUSED, bool is_packed diff --git a/gcc/targhooks.h b/gcc/targhooks.h index 34c30d4af453..441206763451 100644 --- a/gcc/targhooks.h +++ b/gcc/targhooks.h @@ -113,7 +113,6 @@ extern poly_uint64 default_preferred_vector_alignment (const_tree); extern bool default_builtin_vector_alignment_reachable (const_tree, bool); extern bool default_builtin_support_vector_misalignment (machine_mode mode, - const_tree, int, bool, bool); extern machine_mode default_preferred_simd_mode (scalar_mode mode); extern machine_mode default_split_reduction (machine_mode); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 965d93b3f6ae..3b6a2744e0b4 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,2060 @@ +2025-10-08 Joseph Myers + + * gcc.dg/c11-generic-4.c, gcc.dg/c23-generic-5.c, + gcc.dg/c2y-generic-5.c: New tests. + +2025-10-08 Harald Anlauf + + PR fortran/49111 + * gfortran.dg/binding_label_tests_9.f03: Adjust test. + * gfortran.dg/module_private_2.f90: Likewise. + * gfortran.dg/public_private_module_2.f90: Likewise. + * gfortran.dg/binding_label_tests_35.f90: New test. + +2025-10-08 Martin Uecker + + * gcc.dg/c11-generic-2.c: Adapt error message. + * gcc.dg/c2y-generic-3.c: Adapt test. + * gcc.dg/c2y-generic-4.c: New test. + +2025-10-08 Jakub Jelinek + + * c-c++-common/cpp/named-universal-char-escape-1.c: Add test for + \N{CJK UNIFIED IDEOGRAPH-3340E}. + +2025-10-08 Jason Merrill + + * g++.dg/analyzer/new-2.C: Adjust diags. + * g++.dg/analyzer/noexcept-new.C: Adjust diags. + * g++.dg/warn/Warray-bounds-23.C: Add warnings. + * g++.dg/warn/Warray-bounds-24.C: Add warnings. + * g++.dg/cpp26/constexpr-new4a.C: New test. + +2025-10-08 Richard Biener + + PR tree-optimization/110223 + PR tree-optimization/122128 + * gcc.dg/vect/vect-bool-2.c: New testcase. + * gcc.dg/vect/vect-bool-cmp-3.c: Likewise. + * gcc.dg/vect/vect-bool-cmp-4.c: Likewise. + +2025-10-08 Richard Biener + + PR testsuite/120100 + * g++.dg/vect/pr64410.cc: Adjust. + +2025-10-08 Richard Biener + + PR target/120091 + * gcc.target/i386/pr119919.c: Only check for vectorization + when !ia32. + +2025-10-08 Alfie Richards + + PR target/122180 + * gcc.target/i386/pr122180.c: New test. + +2025-10-08 Jakub Jelinek + + PR c/122188 + * c-c++-common/pr122188.c: New test. + +2025-10-08 Jakub Jelinek + + PR tree-optimization/121206 + * gcc.dg/pr121987.c (main): Use unsigned long long type for e instead + of unsigned long and use ULL suffix on the initializer. + +2025-10-08 Paul Thomas + + PR fortran/93175 + PR fortran/102240 + PR fortran/102686 + * gfortran.dg/pdt_55.f03: New test. + +2025-10-08 Richard Biener + + PR tree-optimization/105490 + * gcc.dg/vect/vect-cond-14.c: New testcase. + +2025-10-08 Antoni Boucher + + PR jit/112466 + * jit.dg/all-non-failing-tests.h: Mention + test-target-info.c. + * jit.dg/test-target-info.c: New test. + * jit.dg/test-error-target-info.c: New test. + +2025-10-07 Joseph Myers + + PR c/26581 + * gcc.dg/c23-incomplete-2.c, gcc.dg/c23-incomplete-3.c, + gcc.dg/c23-incomplete-4.c, gcc.dg/c2y-incomplete-4.c, + gcc.dg/c2y-incomplete-5.c: New tests. + * gcc.dg/c23-thread-local-2.c, gcc.dg/c2y-incomplete-1.c: Update + expected errors. + +2025-10-07 H.J. Lu + + PR target/120691 + * gcc.target/i386/pr120691.c: New test. + +2025-10-07 Jason Merrill + + * g++.dg/warn/Warray-bounds-20.C: Remove xfails, add diags. + +2025-10-07 Georg-Johann Lay + + PR target/122187 + * gcc.target/avr/torture/pr122187.c: New test. + +2025-10-07 Jonathan Wakely + + * gfortran.dg/dynamic_dispatch_9.f03: Fix spelling in comment. + * gfortran.dg/use_only_3.inc: Likewise + +2025-10-07 Robin Dapp + + PR target/121845 + * gcc.target/riscv/rvv/autovec/pr121845.c: New test. + +2025-10-07 Raphael Moreira Zinsly + + PR target/122124 + * gcc.target/riscv/rvv/autovec/pr122124.c: New test. + +2025-10-07 Paul Thomas + + PR fortran/102901 + * gfortran.dg/pdt_56.f03: Copy of pdt_13.f03 compiled with + -fcheck=all. + +2025-10-07 Andrew Pinski + + PR tree-optimization/121921 + * gcc.dg/pr121921-1.c: New test. + +2025-10-07 Andrew Pinski + + PR tree-optimization/122083 + * gcc.dg/tree-ssa/ssa-pre-19.c: Disable phiopt and cselim. + * g++.dg/opt/pr122083-1.C: New test. + * gcc.dg/tree-ssa/cselim-1.c: New test. + * gcc.dg/tree-ssa/cselim-2.c: New test. + +2025-10-07 H.J. Lu + + PR middle-end/122122 + * gcc.target/i386/memcpy-pr120683-2.c: Swap %edx/%rdx with + %eax/%rax after + * gcc.target/i386/memcpy-pr120683-3.c: Likewise. + * gcc.target/i386/memcpy-pr120683-4.c: Likewise. + * gcc.target/i386/memcpy-pr120683-5.c: Likewise. + * gcc.target/i386/memcpy-pr120683-6.c: Likewise. + * gcc.target/i386/memcpy-pr120683-7.c: Likewise. + * gcc.target/i386/pr111657-1.c: Likewise. + +2025-10-06 Andrew Pinski + + PR tree-optimization/122155 + * gcc.dg/tree-ssa/cselim-3.c: New test. + +2025-10-06 Georg-Johann Lay + + * gcc.target/avr/sincos-1.c: New test. + +2025-10-06 Andrew MacLeod + + PR tree-optimization/121206 + * gcc.dg/pr121987.c: New. + +2025-10-06 Georg-Johann Lay + + PR target/122177 + * gcc.target/avr/fminfmax-1.c: New test. + +2025-10-06 Georg-Johann Lay + + * gcc.target/avr/cmpdi-1.c: New test. + +2025-10-06 Jennifer Schmitz + + PR target/121599 + * gcc.target/aarch64/sve2/pr121599.c: New test. + +2025-10-06 Richard Biener + + PR tree-optimization/122131 + * gcc.target/powerpc/altivec-39.c: New testcase. + +2025-10-06 Richard Biener + + PR tree-optimization/122158 + * gcc.dg/vect/pr122158.c: New testcase. + +2025-10-06 Jakub Jelinek + + PR middle-end/122133 + * c-c++-common/toplevel-asm-9.c: New test. + +2025-10-05 H.J. Lu + + PR target/122150 + * gcc.target/i386/pr122150.c: New test. + +2025-10-05 Andrew Pinski + + * c-c++-common/torture/asm-inline.c: Disable at -Og. + * gcc.dg/torture/restrict-8.c: Likewise. + +2025-10-05 Pan Li + + * gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u16.c: Add asm check + for vwaddu.wx. + * gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u32.c: Ditto. + * gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u64.c: Ditto. + * gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u16.c: Ditto. + * gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u32.c: Ditto. + * gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u64.c: Ditto. + * gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u16.c: Ditto. + * gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u32.c: Ditto. + * gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u64.c: Ditto. + * gcc.target/riscv/rvv/autovec/vx_vf/vx_widen.h: Add test helper + macros. + * gcc.target/riscv/rvv/autovec/vx_vf/vx_widen_data.h: Add test + helper macros and data. + * gcc.target/riscv/rvv/autovec/vx_vf/vx_widen_wx_run.h: New test. + * gcc.target/riscv/rvv/autovec/vx_vf/wx_vwaddu-run-1-u64.c: New test. + +2025-10-05 Nathaniel Shead + + PR c++/122053 + * g++.dg/modules/pr122053_a.C: New test. + * g++.dg/modules/pr122053_b.C: New test. + +2025-10-05 Nathaniel Shead + + * g++.dg/modules/namespace-1_c.C: Adjust to expect errors. + * g++.dg/modules/namespace-2_b.C: Likewise. + * g++.dg/modules/namespace-3_a.C: Removed. + * g++.dg/modules/namespace-3_b.C: Removed. + +2025-10-05 Franck Behaghel + + * gnat.dg/allocator3.adb: New test. + +2025-10-05 Eric Botcazou + + PR ada/113536 + * gnat.dg/reduce2.adb: New test. + +2025-10-04 Harald Anlauf + + PR fortran/107968 + * gfortran.dg/implied_do_io_9.f90: New test. + +2025-10-04 Andrew Pinski + + PR tree-optimization/122153 + * gcc.dg/tree-ssa/pr122153-1.c: New test. + +2025-10-04 Matteo Nicoli + + PR tree-optimization/117760 + * gcc.dg/int-bwise-opt-1.c: New test. + * gcc.dg/int-bwise-opt-2.c: New test. + +2025-10-04 Jakub Jelinek + + PR tree-optimization/122104 + * gcc.target/i386/pr122104.c: New test. + +2025-10-04 Raphael Moreira Zinsly + + PR target/122114 + * gcc.target/riscv/pr122114.c: New test. + +2025-10-04 Jeff Law + + PR target/122147 + * gcc.target/riscv/pr122147.c: New test. + +2025-10-04 Zhongyao Chen + + PR target/118945 + * gcc.target/riscv/rvv/autovec/pr118945-1.c: New file. + * gcc.target/riscv/rvv/autovec/pr118945-2.c: New file. + +2025-10-04 Eric Botcazou + + * gnat.dg/use_type1.adb: New test. + * gnat.dg/use_type2.adb: Likewise. + +2025-10-04 Jakub Jelinek + + * g++.dg/cpp2a/constexpr-new28.C: New test. + * g++.dg/cpp2a/constexpr-new29.C: New test. + +2025-10-04 Jakub Jelinek + + PR c++/114457 + * g++.dg/cpp1y/vla-initlist1.C: Remove dg-skip-if for powerpc. + Initialize i to 43 for ctor from initializer_list and expect value + 43 instead of 42. + * g++.dg/cpp26/attr-indeterminate1.C: New test. + * g++.dg/cpp26/attr-indeterminate2.C: New test. + * g++.dg/cpp26/attr-indeterminate3.C: New test. + * g++.dg/cpp26/attr-indeterminate4.C: New test. + * g++.dg/cpp26/erroneous1.C: New test. + * g++.dg/cpp26/erroneous2.C: New test. + * g++.dg/cpp26/erroneous3.C: New test. + * g++.dg/cpp26/erroneous4.C: New test. + * g++.dg/opt/store-merging-1.C: Add + -ftrivial-auto-var-init=uninitialized to dg-options. + * g++.dg/uninit-pred-loop-1_b.C: Expect a warning for C++26. + * g++.dg/warn/Wuninitialized-13.C: Expect warning on a different + line. + * c-c++-common/ubsan/vla-1.c: Add + -ftrivial-auto-var-init=uninitialized to dg-options. + * c-c++-common/uninit-17.c: For c++26 expect warning on a different + line. + * g++.dg/warn/Warray-bounds-20.C: Expect warning on a different line. + * c-c++-common/analyzer/invalid-shift-1.c: Xfail for c++26 until + PR122044 is fixed. + * g++.dg/analyzer/exception-value-2.C: Skip for c++26 until PR122044 + is fixed. + * c-c++-common/goacc-gomp/nesting-1.c: Skip for c++26 until PR121975 + is fixed. + * c-c++-common/goacc/kernels-decompose-2.c: Likewise. + * c-c++-common/goacc/kernels-decompose-pr100400-1-1.c: Likewise. + * c-c++-common/goacc/kernels-decompose-pr100400-1-3.c: Likewise. + * c-c++-common/goacc/kernels-decompose-pr104061-1-1.c: Likewise. + * c-c++-common/goacc/kernels-decompose-pr104061-1-3.c: Likewise. + * c-c++-common/goacc/kernels-decompose-pr104061-1-4.c: Likewise. + * c-c++-common/goacc/kernels-decompose-pr104132-1.c: Likewise. + * c-c++-common/goacc/kernels-decompose-pr104133-1.c: Likewise. + * c-c++-common/goacc/kernels-decompose-pr104774-1.c: Likewise. + * c-c++-common/goacc/mdc-1.c: Likewise. + +2025-10-04 Jason Merrill + + PR c++/122127 + PR c++/112632 + * g++.dg/cpp0x/lambda/lambda-template18.C: New test. + +2025-10-04 Nathaniel Shead + + PR c++/117658 + * g++.dg/modules/adl-6_c.C: Adjust diagnostics. + * g++.dg/modules/internal-14_c.C: Likewise. + * g++.dg/modules/internal-15_a.C: New test. + * g++.dg/modules/internal-15_b.C: New test. + +2025-10-03 Egas Ribeiro + + PR c++/122112 + * g++.dg/parse/auto-struct-param.C: New test. + +2025-10-03 David Malcolm + + Revert: + 2025-10-03 David Malcolm + + * gcc.dg/plugin/diagnostic_plugin_test_graphs.cc + (report_diag_with_graphs): Port from set_attr to set_property. + +2025-10-03 Jeff Law + + PR rtl-optimization/121937 + * gcc.target/riscv/pr121937.c: New test. + +2025-10-03 Andrew Pinski + + PR tree-optimization/121762 + * gcc.dg/tree-ssa/builtin-fprintf-1.c: Update to scan optimized. + * gcc.dg/tree-ssa/builtin-fprintf-chk-1.c: Likewise. + * gcc.dg/tree-ssa/builtin-printf-1.c: Likewise. + * gcc.dg/tree-ssa/builtin-printf-chk-1.c: Likewise. + * gcc.dg/tree-ssa/builtin-vfprintf-1.c: Likewise. + * gcc.dg/tree-ssa/builtin-vfprintf-chk-1.c: Likewise. + * gcc.dg/tree-ssa/builtin-vprintf-1.c: Likewise. + * gcc.dg/tree-ssa/builtin-vprintf-chk-1.c: Likewise. + * gcc.dg/tree-ssa/ssa-ccp-10.c: Likewise. + * gcc.dg/builtin-unreachable-5.c: Likewise. + * gcc.dg/builtin-unreachable-6.c: Likewise. + * gcc.dg/builtin-unreachable-6a.c: Likewise. + * gcc.dg/builtin-unreachable-7.c: Likewise. + * gcc.dg/pr78408-2.c: Change fab1 to forwprop1 as that + optimization was moved there a while back. + * gcc.dg/tree-ssa/pr79691.c: Udpate scanning for 9 + constant to return. + +2025-10-03 Andrew Pinski + + PR tree-optimization/122033 + * gcc.dg/tree-ssa/pr122033-1.c: New test. + * gcc.dg/tree-ssa/pr122033-2.c: New test. + +2025-10-03 Richard Earnshaw + + * gcc.target/aarch64/asm-flag-1.c: Scan for lt. + * gcc.target/aarch64/vector-compare-5.c: Use scan-tree-dump-times. + * gcc.target/aarch64/simd/fold_to_highpart_5.c: Scan for sabal2 + and uabal2. + * gcc.target/aarch64/sve/mixed_size_6.c: Scan for absence of + index with 2. + * gcc.target/aarch64/declare-simd-2.c: Scan for _ZGVnM4ul2v_f05 + and_ZGVnN8ul2v_f05 + * gcc.target/aarch64/sve/arith_1.c: Remove duplicate + scan-assembler patterns. + * gcc.target/aarch64/sve/cond_fmaxnm_1.c: Likewise. + * gcc.target/aarch64/sve/cond_fmaxnm_5.c: Likewise. + * gcc.target/aarch64/sve/cond_fminnm_1.c: Likewise. + * gcc.target/aarch64/sve/cond_fminnm_5.c: Likewise + * gcc.target/aarch64/sve/pcs/annotate_1.c: Likewise. + * gcc.target/aarch64/sve/uzp1_1.c: Likewise. + * gcc.target/aarch64/sve/uzp2_1.c: Likewise. + * gcc.target/aarch64/scalar_intrinsics.c: Scan for ursra. + * gcc.target/aarch64/singleton_intrinsics_1.c: Likewise. + * gcc.target/aarch64/sve/cond_fmaxnm_3.c: Fix register modifiers in + scan patterns. + * gcc.target/aarch64/sve/cond_fmaxnm_7.c: Likewise. + * gcc.target/aarch64/sve/cond_fminnm_3.c: Likewise. + * gcc.target/aarch64/sve/cond_fminnm_7.c: Likewise. + * gcc.target/aarch64/sve/cond_fmul_3.c: Likewise. + * gcc.target/aarch64/sve/cond_fsubr_3.c: Likewise. + * gcc.target/aarch64/ldp_stp_18.c: Fix typos in scan patterns. + * gcc.target/aarch64/sve/pcs/return_6.c: Likewise. + * gcc.target/aarch64/ror_2.c: Adjust constants to ensure + scan-assembler patterns are unique. + * gcc.target/aarch64/sve/struct_move_3.c: Likewise. + * gcc.target/aarch64/sve/struct_move_6.c: Likewise. + * gcc.target/aarch64/builtin_pld_pli.c: Use check-function-bodies + * gcc.target/aarch64/csinc-1.c: Likewise. + * gcc.target/aarch64/csneg-1.c: Likewise. + * gcc.target/aarch64/flt_mov_immediate_1.c: Likewise. + * gcc.target/aarch64/scalar_shift_1.c: Likewise. + +2025-10-03 Paul Thomas + + PR fortran/122089 + * gfortran.dg/pdt_52.f03: New test. + * gfortran.dg/pdt_53.f03: New test. + * gfortran.dg/pdt_54.f03: New test. + +2025-10-02 David Malcolm + + * gcc.dg/plugin/diagnostic_plugin_test_graphs.cc + (report_diag_with_graphs): Port from set_attr to set_property. + +2025-10-02 Joseph Myers + + * gcc.dg/c2y-init-2.c, gcc.dg/c2y-init-3.c: New tests. + +2025-10-02 Aurelien Jarno + + PR target/121652 + * gcc.target/riscv/rvv/autovec/vls/math-nearbyint-1.c: Adjust + scan pattern for fewer instances of frflags/fsrflags. + +2025-10-02 David Malcolm + + * gcc.dg/plugin/start_unit_plugin.cc: Fix typo in comment. + +2025-10-02 Jeff Law + + PR target/122051 + * gcc.target/riscv/pr122051.c: New test. + +2025-10-02 Alfie Richards + + * gcc.target/aarch64/mv-error11.c: New test. + * gcc.target/aarch64/mv-error12.c: New test. + +2025-10-02 Alfie Richards + + * gcc.target/aarch64/mv-and-mvc-error1.c: New test. + * gcc.target/aarch64/mv-and-mvc-error2.c: New test. + * gcc.target/aarch64/mv-and-mvc-error3.c: New test. + * gcc.target/aarch64/mv-error1.c: New test. + * gcc.target/aarch64/mv-error2.c: New test. + * gcc.target/aarch64/mv-error3.c: New test. + * gcc.target/aarch64/mv-error4.c: New test. + * gcc.target/aarch64/mv-error5.c: New test. + * gcc.target/aarch64/mv-error6.c: New test. + * gcc.target/aarch64/mv-error7.c: New test. + * gcc.target/aarch64/mv-error8.c: New test. + * gcc.target/aarch64/mv-error9.c: New test. + * gcc.target/aarch64/mv-error10.c: New test. + * gcc.target/aarch64/mvc-error1.c: New test. + * gcc.target/aarch64/mvc-error2.c: New test. + * gcc.target/aarch64/mvc-warning1.c: New test. + +2025-10-02 Alfie Richards + + * gcc.target/aarch64/mv-1.c: New test. + * gcc.target/aarch64/mv-and-mvc1.c: New test. + * gcc.target/aarch64/mv-and-mvc2.c: New test. + * gcc.target/aarch64/mv-and-mvc3.c: New test. + * gcc.target/aarch64/mv-and-mvc4.c: New test. + * gcc.target/aarch64/mv-symbols1.c: New test. + * gcc.target/aarch64/mv-symbols10.c: New test. + * gcc.target/aarch64/mv-symbols11.c: New test. + * gcc.target/aarch64/mv-symbols12.c: New test. + * gcc.target/aarch64/mv-symbols13.c: New test. + * gcc.target/aarch64/mv-symbols14.c: New test. + * gcc.target/aarch64/mv-symbols2.c: New test. + * gcc.target/aarch64/mv-symbols3.c: New test. + * gcc.target/aarch64/mv-symbols4.c: New test. + * gcc.target/aarch64/mv-symbols5.c: New test. + * gcc.target/aarch64/mv-symbols6.c: New test. + * gcc.target/aarch64/mv-symbols7.c: New test. + * gcc.target/aarch64/mv-symbols8.c: New test. + * gcc.target/aarch64/mv-symbols9.c: New test. + * gcc.target/aarch64/mvc-symbols1.c: New test. + * gcc.target/aarch64/mvc-symbols2.c: New test. + * gcc.target/aarch64/mvc-symbols3.c: New test. + * gcc.target/aarch64/mvc-symbols4.c: New test. + +2025-10-02 Richard Biener + + PR tree-optimization/122079 + * gcc.dg/torture/pr122079-2.c: New testcase. + * gcc.dg/torture/pr122079-3.c: Likewise. + +2025-10-02 Richard Biener + + PR tree-optimization/122079 + * gcc.dg/torture/pr122079-1.c: New testcase. + +2025-10-01 Jeff Law + + PR target/122106 + * gcc.target/riscv/pr122106.c: New test. + +2025-10-01 Harald Anlauf + + PR fortran/122080 + * gfortran.dg/ubsan/missing_optional_dummy_9.f90: New test. + +2025-10-01 Andreas Schwab + + PR target/122066 + * gcc.c-torture/compile/pr122066.c: New test. + +2025-10-01 Andrew MacLeod + + PR tree-optimization/120560 + * gcc.dg/pr120560.c: New. + +2025-10-01 Paul Thomas + + PR fortran/122089 + * gfortran.dg/pdt_51.f03: New test. + +2025-09-30 David Malcolm + + * lib/sarif.py: Remove import of ET. + +2025-09-30 Alfie Richards + + * g++.target/aarch64/fmv-selection1.C: New test. + * g++.target/aarch64/fmv-selection2.C: New test. + * g++.target/aarch64/fmv-selection3.C: New test. + * g++.target/aarch64/fmv-selection4.C: New test. + * g++.target/aarch64/fmv-selection5.C: New test. + * g++.target/aarch64/fmv-selection6.C: New test. + * g++.target/aarch64/fmv-selection7.C: New test. + +2025-09-30 Jakub Jelinek + + * gcc.dg/vect/tsvc/vect-tsvc-s1244.c (s1244): Fix comment typo, + ture -> true. + * gcc.dg/vect/tsvc/vect-tsvc-s2244.c (s2244): Likewise. + +2025-09-30 Eric Botcazou + + * gnat.dg/reduce1.adb: New test. + +2025-09-30 Paul Thomas + + PR fortran/105380 + PR fortran/102241 + * gfortran.dg/pdt_49.f03: New test. + * gfortran.dg/pdt_11.f03: Deallocate 'o_fdef'. + * gfortran.dg/pdt_15.f03: Reinstate final 'pop_8' and update + the tree dump counts. + * gfortran.dg/pdt_20.f03: Deallocate 'x'. + * gfortran.dg/pdt_23.f03: Deallocate 'x'. + * gfortran.dg/pdt_3.f03: Eliminate the temporary 'matrix' and + use w%d directly in the allocation. Change the TODO comment and + comment on memory leak in allocation. + * gfortran.dg/pdt_39.f03: Comments on memory leaks. + * gfortran.dg/pdt_40.f03: Deallocate 'foo' and bar%x. + * gfortran.dg/pdt_50.f03: New test. + +2025-09-29 YunQiang Su + + * gcc.target/mips/pr99217-2.c: New test. + +2025-09-28 liuhongt + + * gcc.target/i386/pieces-memcmp-2.c: Remove mstore-max. + * gcc.target/i386/pieces-memcpy-19.c: Ditto. + * gcc.target/i386/pieces-memcpy-20.c: Ditto. + * gcc.target/i386/pr104610.c: Ditto. + * gcc.target/i386/pieces-memset-47.c: Scan warning for + mstore-max deprecation. + * gcc.target/i386/pieces-memset-48.c: Change mstore-max to mmove-max. + * gcc.target/i386/pr121410.c: Ditto. + * gcc.target/i386/pieces-memset-11.c: Change + avx256_store_by_pieces to avx256_move_by_pieces. + * gcc.target/i386/pieces-memset-14.c: Ditto. + * gcc.target/i386/pieces-memset-2.c: Ditto. + * gcc.target/i386/pieces-memset-20.c: Ditto. + * gcc.target/i386/pieces-memset-23.c: Ditto. + * gcc.target/i386/pieces-memset-29.c: Ditto. + * gcc.target/i386/pieces-memset-30.c: Ditto. + * gcc.target/i386/pieces-memset-33.c: Ditto. + * gcc.target/i386/pieces-memset-34.c: Ditto. + * gcc.target/i386/pieces-memset-37.c: Ditto. + * gcc.target/i386/pieces-memset-44.c: Ditto. + * gcc.target/i386/pieces-memset-5.c: Ditto. + * gcc.target/i386/pr100865-10a.c: Ditto. + * gcc.target/i386/pr100865-4a.c: Ditto. + * gcc.target/i386/pr90773-20.c: Ditto. + * gcc.target/i386/pr90773-21.c: Ditto. + * gcc.target/i386/pr90773-22.c: Ditto. + * gcc.target/i386/pr90773-23.c: Ditto. + * g++.target/i386/pr80566-1.C: Ditto. + * gcc.target/i386/pieces-memset-45.c: Change + avx512_store_by_pieces to avx512_move_by_pieces. + +2025-09-27 YunQiang Su + + * gcc.target/mips/mips16e2.c: Use isa_rev=2 instead of >=2. + * gcc.target/mips/mips16e2-cache.c: Ditto. + * gcc.target/mips/mips16e2-cmov.c: Ditto. + * gcc.target/mips/mips16e2-gp.c: Ditto. + +2025-09-27 ChengLulu + + PR target/99217 + * gcc.target/mips/pr99217.c: New test. + +2025-09-27 Jason Merrill + + PR c++/112632 + * g++.dg/cpp2a/concepts-conv4.C: New test. + +2025-09-27 Jason Merrill + + PR c++/121854 + * g++.dg/cpp23/explicit-obj-lambda19.C: New test. + +2025-09-27 Jason Merrill + + PR c++/122048 + * g++.dg/cpp1y/lambda-generic-this6.C: New test. + +2025-09-27 Jie Mei + + * gcc.target/mips/mips16e2-cache.c: Use isa_rev>=2 instead of + -mips32r2 and remove -mips16 option. + * gcc.target/mips/mips16e2-cmov.c: Add isa_rev>=2 and remove + -mips16 option. + * gcc.target/mips/mips16e2-gp.c: Same as above. + * gcc.target/mips/mips16e2.c: Same as above. + +2025-09-27 Paul Thomas + + PR fortran/87908 + * gfortran.dg/pr87908.f90: Delete. + +2025-09-27 Jie Mei + + * gcc.target/mips/mips-msubf.c: New tests for MIPSr6. + +2025-09-26 Alejandro Colomar + + * gcc.dg/Wmultiple-parameter-fwd-decl-lists.c: New test. + +2025-09-26 Harald Anlauf + + * gfortran.dg/pdt_48.f03: + +2025-09-26 Joseph Myers + + PR c/88642 + * gcc.dg/c2y-init-1.c: New test. + +2025-09-26 Lulu Cheng + + PR target/121875 + * gcc.target/loongarch/can_inline_1.c: New test. + * gcc.target/loongarch/can_inline_2.c: New test. + * gcc.target/loongarch/can_inline_3.c: New test. + * gcc.target/loongarch/can_inline_4.c: New test. + * gcc.target/loongarch/can_inline_5.c: New test. + * gcc.target/loongarch/can_inline_6.c: New test. + * gcc.target/loongarch/pr121875.c: New test. + +2025-09-25 Harald Anlauf + + PR fortran/121939 + * gfortran.dg/deferred_character_39.f90: Disable temporary + workaround for character(kind=4) deferred-length bug. + +2025-09-24 Dusan Stojkovic + + PR target/121778 + * gcc.target/riscv/pr121778-1.c: New test. + * gcc.target/riscv/pr121778-2.c: New test. + +2025-09-24 Joseph Myers + + * gcc.dg/c23-complit-9.c: New test. + +2025-09-24 Mikael Morin + + PR fortran/122046 + * gfortran.dg/submodule_34.f90: New test. + +2025-09-24 Andrew Pinski + + PR tree-optimization/121762 + * c-c++-common/ubsan/align-5.c: Update as __builtin_assume_aligned + is no longer taked into account. + * c-c++-common/ubsan/align-5a.c: New test. + +2025-09-24 Xi Ruoyao + + PR middle-end/66462 + * gcc.target/loongarch/fclass-compile.c: Update test. + * gcc.target/loongarch/fclass-run.c: Likewise. + +2025-09-24 Nathaniel Shead + + PR c++/122019 + * g++.dg/modules/lang-4_a.C: New test. + * g++.dg/modules/lang-4_b.C: New test. + +2025-09-24 Paul Thomas + + PR fortran/87908 + * gfortran.dg/pr87908.f90: New test. + +2025-09-24 Pan Li + + * gcc.target/riscv/sat/sat_u_mul-6-u16-from-u32.c: New test. + * gcc.target/riscv/sat/sat_u_mul-6-u16-from-u64.rv32.c: New test. + * gcc.target/riscv/sat/sat_u_mul-6-u16-from-u64.rv64.c: New test. + * gcc.target/riscv/sat/sat_u_mul-6-u32-from-u64.rv32.c: New test. + * gcc.target/riscv/sat/sat_u_mul-6-u32-from-u64.rv64.c: New test. + * gcc.target/riscv/sat/sat_u_mul-6-u8-from-u16.c: New test. + * gcc.target/riscv/sat/sat_u_mul-6-u8-from-u32.c: New test. + * gcc.target/riscv/sat/sat_u_mul-6-u8-from-u64.rv32.c: New test. + * gcc.target/riscv/sat/sat_u_mul-6-u8-from-u64.rv64.c: New test. + * gcc.target/riscv/sat/sat_u_mul-run-6-u16-from-u32.c: New test. + * gcc.target/riscv/sat/sat_u_mul-run-6-u16-from-u64.c: New test. + * gcc.target/riscv/sat/sat_u_mul-run-6-u32-from-u64.c: New test. + * gcc.target/riscv/sat/sat_u_mul-run-6-u8-from-u16.c: New test. + * gcc.target/riscv/sat/sat_u_mul-run-6-u8-from-u32.c: New test. + * gcc.target/riscv/sat/sat_u_mul-run-6-u8-from-u64.c: New test. + +2025-09-23 David Malcolm + + PR diagnostics/121986 + * gcc.dg/sarif-output/extra-semicolon.c: New test. + * gcc.dg/sarif-output/extra-semicolon.py: New test. + * gcc.dg/sarif-output/missing-semicolon.py: Verify the description + of the insertion fix-it hint. + * libgdiagnostics.dg/test-fix-it-hint-c.py: Verify the description + of the replacement fix-it hint. + +2025-09-23 Richard Earnshaw + + * gcc.target/arm/acle/simd32.c (test_sadd16): Scan for sadd16. + * gcc.target/arm/armv8_2-fp16-neon-1.c (vcgtz, 128-bit): Scan for vcgt. + * gcc.target/arm/armv8_2-fp16-neon-2.c (vcgtz, 128-bit): Scan for vcgt. + (vmul, vmul N): Use check function bodies to avoid ambiguity. + * gcc.target/arm/armv8_2-fp16-scalar-1.c (vrndm): Scan for vrintm. + (vrndn): Scan for vrintn. + (vrndp): Scan for vrintp. + (vrndx): Scan for vrintx. + * gcc.target/arm/asm-flag-1.c: Scan for movlt. + * gcc.target/arm/csneg.c: Convert to check-function-bodies. + * gcc.target/arm/mve/dlstp-compile-asm-2.c (test10): Fix comment that caused test9 scan + to be run twice. + * gcc.target/arm/mve/intrinsics/vgetq_lane_f16.c: Convert to check-function-bodies. + * gcc.target/arm/mve/intrinsics/vgetq_lane_f32.c: Likewise. + * gcc.target/arm/mve/intrinsics/vgetq_lane_s16.c: Likewise. + * gcc.target/arm/mve/intrinsics/vgetq_lane_s32.c: Likewise. + * gcc.target/arm/mve/intrinsics/vgetq_lane_s8.c: Likewise. + * gcc.target/arm/mve/intrinsics/vgetq_lane_u16.c: Likewise. + * gcc.target/arm/mve/intrinsics/vgetq_lane_u32.c: Likewise. + * gcc.target/arm/mve/intrinsics/vgetq_lane_u8.c: Likewise. + +2025-09-23 Alfie Richards + + * g++.target/aarch64/mv-1.C: Remove option. + * g++.target/aarch64/mv-and-mvc-error1.C: Ditto. + * g++.target/aarch64/mv-and-mvc-error2.C: Ditto. + * g++.target/aarch64/mv-and-mvc-error3.C: Ditto. + * g++.target/aarch64/mv-and-mvc1.C: Ditto. + * g++.target/aarch64/mv-and-mvc2.C: Ditto. + * g++.target/aarch64/mv-and-mvc3.C: Ditto. + * g++.target/aarch64/mv-and-mvc4.C: Ditto. + * g++.target/aarch64/mv-error1.C: Ditto. + * g++.target/aarch64/mv-error2.C: Ditto. + * g++.target/aarch64/mv-error3.C: Ditto. + * g++.target/aarch64/mv-error4.C: Ditto. + * g++.target/aarch64/mv-error5.C: Ditto. + * g++.target/aarch64/mv-error6.C: Ditto. + * g++.target/aarch64/mv-error7.C: Ditto. + * g++.target/aarch64/mv-error8.C: Ditto. + * g++.target/aarch64/mv-pragma.C: Ditto. + * g++.target/aarch64/mv-symbols1.C: Ditto. + * g++.target/aarch64/mv-symbols10.C: Ditto. + * g++.target/aarch64/mv-symbols11.C: Ditto. + * g++.target/aarch64/mv-symbols12.C: Ditto. + * g++.target/aarch64/mv-symbols13.C: Ditto. + * g++.target/aarch64/mv-symbols2.C: Ditto. + * g++.target/aarch64/mv-symbols3.C: Ditto. + * g++.target/aarch64/mv-symbols4.C: Ditto. + * g++.target/aarch64/mv-symbols5.C: Ditto. + * g++.target/aarch64/mv-symbols6.C: Ditto. + * g++.target/aarch64/mv-symbols7.C: Ditto. + * g++.target/aarch64/mv-symbols8.C: Ditto. + * g++.target/aarch64/mv-symbols9.C: Ditto. + * g++.target/aarch64/mvc-error1.C: Ditto. + * g++.target/aarch64/mvc-error2.C: Ditto. + * g++.target/aarch64/mvc-symbols1.C: Ditto. + * g++.target/aarch64/mvc-symbols2.C: Ditto. + * g++.target/aarch64/mvc-symbols3.C: Ditto. + * g++.target/aarch64/mvc-symbols4.C: Ditto. + * g++.target/aarch64/mv-warning1.C: Removed. + * g++.target/aarch64/mvc-warning1.C: Removed. + +2025-09-23 Alfie Richards + + * g++.target/aarch64/mv-and-mvc-error1.C: New test. + * g++.target/aarch64/mv-and-mvc-error2.C: New test. + * g++.target/aarch64/mv-and-mvc-error3.C: New test. + * g++.target/aarch64/mv-error1.C: New test. + * g++.target/aarch64/mv-error2.C: New test. + * g++.target/aarch64/mv-error3.C: New test. + * g++.target/aarch64/mv-error4.C: New test. + * g++.target/aarch64/mv-error5.C: New test. + * g++.target/aarch64/mv-error6.C: New test. + * g++.target/aarch64/mv-error7.C: New test. + * g++.target/aarch64/mv-error8.C: New test. + * g++.target/aarch64/mvc-error1.C: New test. + * g++.target/aarch64/mvc-error2.C: New test. + * g++.target/aarch64/mvc-warning1.C: Modified test. + +2025-09-23 Alfie Richards + + * g++.target/aarch64/mv-and-mvc1.C: New test. + * g++.target/aarch64/mv-and-mvc2.C: New test. + * g++.target/aarch64/mv-and-mvc3.C: New test. + * g++.target/aarch64/mv-and-mvc4.C: New test. + +2025-09-23 Alfie Richards + + * g++.target/aarch64/mv-1.C: Change for target_version semantics. + * g++.target/aarch64/mv-symbols2.C: Ditto. + * g++.target/aarch64/mv-symbols3.C: Ditto. + * g++.target/aarch64/mv-symbols4.C: Ditto. + * g++.target/aarch64/mv-symbols5.C: Ditto. + * g++.target/aarch64/mvc-symbols3.C: Ditto. + * g++.target/riscv/mv-symbols2.C: Ditto. + * g++.target/riscv/mv-symbols3.C: Ditto. + * g++.target/riscv/mv-symbols4.C: Ditto. + * g++.target/riscv/mv-symbols5.C: Ditto. + * g++.target/riscv/mvc-symbols3.C: Ditto. + * g++.target/aarch64/mv-symbols10.C: New test. + * g++.target/aarch64/mv-symbols11.C: New test. + * g++.target/aarch64/mv-symbols12.C: New test. + * g++.target/aarch64/mv-symbols13.C: New test. + * g++.target/aarch64/mv-symbols6.C: New test. + * g++.target/aarch64/mv-symbols7.C: New test. + * g++.target/aarch64/mv-symbols8.C: New test. + * g++.target/aarch64/mv-symbols9.C: New test. + +2025-09-23 Alfie Richards + + * g++.target/i386/mv-symbols1.C: Update x86 FMV mangling. + * g++.target/i386/mv-symbols3.C: Ditto. + * g++.target/i386/mv-symbols4.C: Ditto. + * g++.target/i386/mv-symbols5.C: Ditto. + +2025-09-22 Peter Bergner + + PR target/121982 + * gcc.target/riscv/pr121982.c: New test. + +2025-09-22 Nathaniel Shead + + PR c++/122015 + * g++.dg/modules/lambda-11.h: New test. + * g++.dg/modules/lambda-11_a.H: New test. + * g++.dg/modules/lambda-11_b.C: New test. + +2025-09-22 Pan Li + + PR middle-end/122021 + * gcc.target/i386/pr122021-0.c: New test. + +2025-09-22 Richard Biener + + PR tree-optimization/122016 + * gcc.dg/torture/pr122016.c: New testcase. + +2025-09-22 Richard Biener + + PR tree-optimization/122023 + * gcc.dg/vect/pr122023.c: New testcase. + +2025-09-22 Dimitar Dimitrov + + PR target/116205 + * gcc.target/pru/mabi-ti-1.c: Adjust diagnostic location. + * gcc.target/pru/mabi-ti-2.c: Ditto. + * gcc.target/pru/mabi-ti-3.c: Ditto. + * gcc.target/pru/mabi-ti-5.c: Ditto. + * gcc.target/pru/mabi-ti-6.c: Ditto. + * gcc.target/pru/mabi-ti-7.c: Adjust diagnostic locations and + add global variables for checking. + * gcc.target/pru/mabi-ti-11.c: New test. + * gcc.target/pru/mabi-ti-12.c: New test. + * gcc.target/pru/mabi-ti-8.c: New test. + * gcc.target/pru/mabi-ti-9.c: New test. + +2025-09-22 Steve Kargl + + PR fortran/103508 + * gfortran.dg/pr103508.f90: New test. + +2025-09-21 Andrew Pinski + + * gcc.dg/builtin-unreachable-7.c: New test. + +2025-09-21 Thomas Koenig + + PR fortran/121161 + * gfortran.dg/matmul_blas_3.f90: Add effective target lp64. + +2025-09-21 Harald Anlauf + + PR fortran/108581 + * gfortran.dg/deferred_character_39.f90: New test. + +2025-09-20 Patrick Palka + + PR c++/121981 + * g++.dg/cpp2a/concepts-placeholder15.C: New test. + +2025-09-20 Eczbek + + PR c++/119048 + * g++.dg/cpp23/static-operator-call8.C: New test. + +2025-09-20 Jan Hubicka + + * g++.dg/ipa/devirt-2.C: Update template. + * g++.dg/ipa/devirt-42.C: Update template. + * g++.dg/lto/devirt-2_0.C: Update template. + +2025-09-20 Joseph Myers + + * gcc.dg/c11-atomic-6.c, gcc.dg/c23-incomplete-1.c, + gcc.dg/c2y-incomplete-3.c: New tests. + +2025-09-19 Paul Thomas + + PR fortran/83746 + * gfortran.dg/pdt_48.f03: New test. + +2025-09-19 Gaius Mulley + + * gm2/errors/fail/testbit2.mod: Rewrite. + * gm2/iso/run/pass/shift4.mod: Rewrite adding more internal + tests. + * gm2/iso/run/pass/testsystem.mod (FindFirstElement): Add + bounds check. + * gm2/sets/run/pass/multisetrotate4.mod: Add more runtime + error messages. + * gm2/sets/run/pass/simplepacked.mod (testpset): Correct + setname. + * lib/gm2.exp (gm2_init_minx): Add -fno-wideset. + * gm2/iso/run/pass/assigncons.mod: New test. + * gm2/iso/run/pass/constructor3.mod: New test. + * gm2/iso/run/pass/proc_test.mod: New test. + * gm2/iso/run/pass/simplelarge2.mod: New test. + * gm2/iso/run/pass/simplelarge3.mod: New test. + * gm2/iso/run/pass/simplelarge4.mod: New test. + * gm2/pimlib/wideset/run/pass/bitset.mod: New test. + * gm2/pimlib/wideset/run/pass/bitset2.mod: New test. + * gm2/pimlib/wideset/run/pass/colorset.mod: New test. + * gm2/pimlib/wideset/run/pass/colorset2.mod: New test. + * gm2/pimlib/wideset/run/pass/colorset3.mod: New test. + * gm2/pimlib/wideset/run/pass/highbit.mod: New test. + * gm2/pimlib/wideset/run/pass/highbit2.mod: New test. + * gm2/sets/run/pass/multisetrotate5.mod: New test. + * gm2/sets/run/pass/setcard.mod: New test. + * gm2/sets/run/pass/setincl.mod: New test. + +2025-09-19 Jeff Law + + PR target/121983 + * gcc.target/riscv/pr121983.c: New test. + +2025-09-19 Raphael Moreira Zinsly + + * gcc.target/riscv/rvv/autovec/shuffle-slide-run.h: + New test. + * gcc.target/riscv/rvv/autovec/shuffle-slidedown-run.c: + Likewise. + * gcc.target/riscv/rvv/autovec/shuffle-slideup-run.c: + Likewise. + * gcc.target/riscv/rvv/autovec/vls-vlmax/shuffle-slide.h: + Likewise. + * gcc.target/riscv/rvv/autovec/vls-vlmax/shuffle-slidedown-1.c: + Likewise. + * gcc.target/riscv/rvv/autovec/vls-vlmax/shuffle-slidedown-2.c: + Likewise. + * gcc.target/riscv/rvv/autovec/vls-vlmax/shuffle-slidedown-perm.h: + Likewise. + * gcc.target/riscv/rvv/autovec/vls-vlmax/shuffle-slideup-1.c: + Likewise. + * gcc.target/riscv/rvv/autovec/vls-vlmax/shuffle-slideup-2.c: + Likewise. + * gcc.target/riscv/rvv/autovec/vls-vlmax/shuffle-slideup-perm.h: + Likewise. + +2025-09-19 Jim Lin + + * gcc.target/riscv/save-restore-cfi-3.c: New test. + * gcc.target/riscv/pr120811.c: New file. + +2025-09-19 Jeff Law + + * gcc.target/riscv/bclr-lowest-set-bit-1.c: New test. + +2025-09-18 Joseph Myers + + * gcc.dg/c2y-anon-init-1.c, gcc.dg/c2y-incomplete-2.c: + gcc.dg/c2y-linkage-1.c, gcc.dg/c2y-linkage-2.c, + gcc.dg/c2y-linkage-3.c, gcc.dg/c2y-linkage-4.c, + gcc.dg/c2y-static-assert-1.c: New tests. + * gcc.dg/c2y-linkage-1.c: New file. + * gcc.dg/c2y-linkage-2.c: New file. + * gcc.dg/c2y-linkage-3.c: New file. + * gcc.dg/c2y-linkage-4.c: New file. + * gcc.dg/c2y-static-assert-1.c: New file. + +2025-09-18 Jason Merrill + + * g++.dg/cpp2a/constexpr-98122.C: Adjust diagnostic. + * g++.dg/cpp26/constexpr-new6a.C: New test. + +2025-09-18 Jason Merrill + + * g++.dg/analyzer/pr97116.C: Adjust diagnostic. + * g++.dg/warn/Warray-bounds-20.C: Likewise. + +2025-09-18 Jason Merrill + + * g++.dg/init/pr25811.C: Tweak diagnostic. + * g++.dg/warn/Warray-bounds-12.C: Likewise. + * g++.dg/warn/Warray-bounds-13.C: Likewise. + * g++.dg/cpp26/constexpr-new6.C: New test. + +2025-09-18 Jason Merrill + + * g++.dg/warn/Wmismatched-new-delete-2.C: Remove xfail. + +2025-09-18 Qing Zhao + + PR tree-optimization/121894 + * g++.dg/opt/auto-init-sra-pr121894.C: New test. + +2025-09-18 Paul Thomas + + PR fortran/121948 + * gfortran.dg/pdt_3.f03: Add missing deallocation of 'matrix'. + * gfortran.dg/pdt_17.f03: Change dg-error text. + * gfortran.dg/pdt_47.f03: New test. + +2025-09-18 Zhongyao Chen + + PR target/121910 + * gcc.target/riscv/rvv/autovec/pr121910.c: New file. + +2025-09-18 Jakub Jelinek + + PR c++/121977 + * g++.dg/gomp/pr121977.C: New test. + +2025-09-18 Karl Meakin + + * gcc.target/aarch64/sme2/acle-asm/svluti4_zt_1.c: New test. + * gcc.target/aarch64/sme2/acle-asm/svwrite_lane_zt_1.c: New test. + * gcc.target/aarch64/sme2/acle-asm/svwrite_zt_1.c: New test. + * gcc.target/aarch64/sve/acle/general-c/svluti4_zt_1.c: New test. + * gcc.target/aarch64/sve/acle/general-c/svwrite_lane_zt_1.c: New test. + * gcc.target/aarch64/sve/acle/general-c/svwrite_zt_1.c: New test. + +2025-09-18 Pan Li + + * gcc.target/riscv/sat/sat_arith.h: Add test helper macros. + * gcc.target/riscv/sat/sat_u_mul-6-u16-from-u128.c: New test. + * gcc.target/riscv/sat/sat_u_mul-6-u32-from-u128.c: New test. + * gcc.target/riscv/sat/sat_u_mul-6-u64-from-u128.c: New test. + * gcc.target/riscv/sat/sat_u_mul-6-u8-from-u128.c: New test. + * gcc.target/riscv/sat/sat_u_mul-run-6-u16-from-u128.c: New test. + * gcc.target/riscv/sat/sat_u_mul-run-6-u32-from-u128.c: New test. + * gcc.target/riscv/sat/sat_u_mul-run-6-u64-from-u128.c: New test. + * gcc.target/riscv/sat/sat_u_mul-run-6-u8-from-u128.c: New test. + +2025-09-18 Richard Biener + + PR tree-optimization/121720 + * gcc.dg/tree-ssa/ssa-pre-36.c: New testcase. + +2025-09-18 hongtao.liu + + * gcc.target/i386/pieces-memcpy-18.c: Use -mtune=znver5 + instead of -mtune=sapphirerapids. + * gcc.target/i386/pieces-memcpy-21.c: Ditto. + * gcc.target/i386/pieces-memset-46.c: Ditto. + * gcc.target/i386/pieces-memset-49.c: Ditto. + +2025-09-17 David Malcolm + + * g++.dg/analyzer/unique_ptr-1.C: Rename to... + * g++.dg/analyzer/std-unique_ptr-1.C: ...this. + * g++.dg/analyzer/unique_ptr-2.C: Rename to... + * g++.dg/analyzer/std-unique_ptr-2.C: ...this. + +2025-09-17 Andrew Pinski + + PR tree-optimization/121962 + * gcc.dg/torture/pr121962-1.c: New test. + +2025-09-17 Andrew Pinski + + * gcc.dg/tree-ssa/copy-prop-aggregate-arg-2.c: New test. + +2025-09-17 Thomas Koenig + + * gfortran.dg/matmul_blas_3.f90: New test. + +2025-09-17 Shreya Munnangi + + PR tree-optimization/58727 + * gcc.target/riscv/pr58727.c: New test. + +2025-09-17 Richard Biener + + * gcc.dg/torture/pr84830.c: Turn into GIMPLE unit test for PRE. + +2025-09-17 Stefan Schulze Frielinghaus + + * gcc.target/s390/arch13/bitops-1.c: Do not return a 32bit value + but write it to memory. + * gcc.target/s390/arch13/bitops-2.c: Ditto. + * gcc.target/s390/md/andc-splitter-2.c: Adjust scan assembler + directive because sign extends are folded, now. + +2025-09-17 Iain Sandoe + + * objc.dg/special/load-category-1.m: Add second source. + * objc.dg/special/load-category-2.m: Likewise. + * objc.dg/special/load-category-3.m: Likewise. + * objc.dg/special/unclaimed-category-1.m: Likewise. + * objc.dg/special/special.exp: Rewrite to make use of generic + testsuite facilities. + +2025-09-17 Torbjörn SVENSSON + + * gcc.target/arm/fp16-aapcs.c: New test. + * gcc.target/arm/fp16-aapcs-1.c: Removed. + * gcc.target/arm/fp16-aapcs-2.c: Likewise. + * gcc.target/arm/fp16-aapcs-3.c: Likewise. + * gcc.target/arm/fp16-aapcs-4.c: Likewise. + +2025-09-17 Pan Li + + * gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u16.c: Add asm check + for vwmulu.vx. + * gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u32.c: Ditto. + * gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u64.c: Ditto. + * gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u16.c: Ditto. + * gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u32.c: Ditto. + * gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u64.c: Ditto. + * gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u16.c: Ditto. + * gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u32.c: Ditto. + * gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u64.c: Ditto. + * gcc.target/riscv/rvv/autovec/vx_vf/vx_widen.h: Add test helper + macros. + * gcc.target/riscv/rvv/autovec/vx_vf/vx_widen_data.h: Add test + data for vwmulu.vx run test. + * gcc.target/riscv/rvv/autovec/vx_vf/vx_vwmulu-run-1-u64.c: New test. + +2025-09-17 Pan Li + + * gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u16.c: Add asm check + for vwsubu.vx. + * gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u32.c: Ditto. + * gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u64.c: Ditto. + * gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u16.c: Ditto. + * gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u32.c: Ditto. + * gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u64.c: Ditto. + * gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u16.c: Ditto. + * gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u32.c: Ditto. + * gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u64.c: Ditto. + * gcc.target/riscv/rvv/autovec/vx_vf/vx_widen.h: Ditto. + * gcc.target/riscv/rvv/autovec/vx_vf/vx_widen_data.h: Add test + data for run test. + * gcc.target/riscv/rvv/autovec/vx_vf/vx_vwsubu-run-1-u64.c: New test. + +2025-09-17 Pan Li + + * gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u16.c: Add asm check + for vwaddu.vx. + * gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u32.c: Ditto. + * gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u64.c: Ditto. + * gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u16.c: Ditto. + * gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u32.c: Ditto. + * gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u64.c: Ditto. + * gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u16.c: Ditto. + * gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u32.c: Ditto. + * gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u64.c: Ditto. + * gcc.target/riscv/rvv/autovec/vx_vf/vx_vwaddu-run-1-u64.c: New test. + * gcc.target/riscv/rvv/autovec/vx_vf/vx_widen.h: New test. + * gcc.target/riscv/rvv/autovec/vx_vf/vx_widen_data.h: New test. + * gcc.target/riscv/rvv/autovec/vx_vf/vx_widen_vx_run.h: New test. + +2025-09-17 Haochen Jiang + + * gcc.target/i386/avx512bw-vpmovuswb-2.c: Correct res_ref2 + array size. + * gcc.target/i386/avx512bw-vpmovwb-2.c: Ditto. + +2025-09-17 Haochen Jiang + + * gcc.target/i386/vect-epilogues-4.c: Fix for epilogue + vect tree dump. + +2025-09-16 Andrew Pinski + + PR c/121421 + * gcc.dg/gimplefe-error-16.c: New test. + +2025-09-16 Wilco Dijkstra + + PR middle-end/66462 + * gcc.target/aarch64/pr66462.c: Update test. + +2025-09-16 Jennifer Schmitz + + PR target/121602 + * gcc.target/aarch64/sve/acle/asm/mul_s16.c: New test. + * gcc.target/aarch64/sve/acle/asm/mul_s32.c: Likewise. + * gcc.target/aarch64/sve/acle/asm/mul_s64.c: Likewise. + * gcc.target/aarch64/sve/acle/asm/mul_s8.c: Likewise. + * gcc.target/aarch64/sve/acle/asm/mul_u16.c: Likewise. + * gcc.target/aarch64/sve/acle/asm/mul_u32.c: Likewise. + * gcc.target/aarch64/sve/acle/asm/mul_u64.c: Likewise. + * gcc.target/aarch64/sve/acle/asm/mul_u8.c: Likewise. + +2025-09-16 Haochen Jiang + + * gcc.target/i386/avx512bw-vpackssdw-1.c: + Fix xmm/ymm mask tests. + * gcc.target/i386/avx512bw-vpacksswb-1.c: Ditto. + * gcc.target/i386/avx512bw-vpackusdw-1.c: Ditto. + * gcc.target/i386/avx512bw-vpackuswb-1.c: Ditto. + * gcc.target/i386/avx512bw-vpermw-1.c: Test xmm. + * gcc.target/i386/avx512bw-vpmulhw-1.c: + Fix xmm/ymm mask tests. + * gcc.target/i386/avx512f-vec-init.c: Remove duplicate test. + * gcc.target/i386/avx512fp16-13.c: Fix test for aligned load. + * gcc.target/i386/avx512fp16-conjugation-1.c: Revise the test + to test more precisely on masks. + * gcc.target/i386/avx512fp16vl-conjugation-1.c: Ditto. + * gcc.target/i386/avx512vbmi-vpermb-1.c: Test xmm. + * gcc.target/i386/avx512vl-vcvtpd2ps-1.c: Fix scan asm. + * gcc.target/i386/avx512vl-vinsert-1.c: Fix typo. + * gcc.target/i386/avx512vl-vpmulld-1.c: + Fix xmm/ymm mask tests. + * gcc.target/i386/avx512vl-vptestmd-1.c: Ditto. + * gcc.target/i386/bitwise_mask_op-1.c: Fix typo. + * gcc.target/i386/cond_op_shift_q-1.c: Test both vpsra{,v} + and vpsll{,v}. + * gcc.target/i386/cond_op_shift_ud-1.c: Ditto. + * gcc.target/i386/cond_op_shift_uq-1.c: Ditto. + * gcc.target/i386/memcpy-pr95886.c: Fix the wrong const int. + * gcc.target/i386/part-vect-sqrtph-1.c: Remove duplicate test. + * gcc.target/i386/pr107432-7.c: Test vpmov{s,z}xbw instead of + vpmov{s,z}xbd. + * gcc.target/i386/pr88828-0.c: Fix pblendw scan asm. + +2025-09-16 liuhongt + + * gcc.target/i386/avx_vbroadcastf128.c: New test. + +2025-09-15 Clément Chigot + + * gcc.target/aarch64/pr113356.C: Move to ... + * g++.target/aarch64/pr113356.C: ... here. + +2025-09-15 Pan Li + + * gcc.target/riscv/sat/widen-mul-0.c: New test. + * gcc.target/riscv/sat/widen-mul-1.c: New test. + * gcc.target/riscv/sat/widen-mul-2.c: New test. + * gcc.target/riscv/sat/widen-mul-3.c: New test. + * gcc.target/riscv/sat/widen-mul.h: New test. + +2025-09-15 Andrew Pinski + + PR tree-optimization/121751 + PR tree-optimization/121418 + PR tree-optimization/121417 + * gcc.dg/tree-ssa/copy-prop-aggregate-1.c: New test. + * gcc.dg/tree-ssa/copy-prop-aggregate-memcpy-1.c: New test. + * gcc.dg/tree-ssa/copy-prop-aggregate-memcpy-2.c: New test. + +2025-09-15 Alex Coplan + + PR tree-optimization/121772 + * gcc.target/aarch64/torture/pr121772.c: New test. + +2025-09-15 H.J. Lu + + PR target/121934 + * gcc.target/i386/pr121934-1a.c: New test. + * gcc.target/i386/pr121934-1b.c: Likewise. + * gcc.target/i386/pr121934-2a.c: Likewise. + * gcc.target/i386/pr121934-2b.c: Likewise. + * gcc.target/i386/pr121934-3a.c: Likewise. + * gcc.target/i386/pr121934-3b.c: Likewise. + * gcc.target/i386/pr121934-4a.c: Likewise. + * gcc.target/i386/pr121934-4b.c: Likewise. + * gcc.target/i386/pr121934-5a.c: Likewise. + * gcc.target/i386/pr121934-5b.c: Likewise. + +2025-09-15 Xi Ruoyao + + PR target/121906 + * gcc.target/loongarch/pr121906.c: New test. + +2025-09-15 Kito Cheng + + * gcc.target/riscv/rvv/xandesvector/non-policy/non-overloaded/andes_vector.h: New file. + * gcc.target/riscv/rvv/xandesvector/non-policy/non-overloaded/nds_vfncvtbf16s.c + (#include): Use local andes_vector.h instead of system header. + * gcc.target/riscv/rvv/xandesvector/non-policy/non-overloaded/nds_vfwcvtsbf16.c + (#include): Likewise. + * gcc.target/riscv/rvv/xandesvector/non-policy/overloaded/andes_vector.h: New file. + * gcc.target/riscv/rvv/xandesvector/non-policy/overloaded/nds_vfncvtbf16s.c + (#include): Use local andes_vector.h instead of system header. + * gcc.target/riscv/rvv/xandesvector/non-policy/overloaded/nds_vfwcvtsbf16.c + (#include): Likewise. + * gcc.target/riscv/rvv/xandesvector/policy/non-overloaded/andes_vector.h: New file. + * gcc.target/riscv/rvv/xandesvector/policy/non-overloaded/nds_vfncvtbf16s.c + (#include): Use local andes_vector.h instead of system header. + * gcc.target/riscv/rvv/xandesvector/policy/non-overloaded/nds_vfwcvtsbf16.c + (#include): Likewise. + * gcc.target/riscv/rvv/xandesvector/policy/overloaded/andes_vector.h: New file. + * gcc.target/riscv/rvv/xandesvector/policy/overloaded/nds_vfncvtbf16s.c + (#include): Use local andes_vector.h instead of system header. + * gcc.target/riscv/rvv/xandesvector/policy/overloaded/nds_vfwcvtsbf16.c + (#include): Likewise. + * gcc.target/riscv/rvv/xsfvector/sifive_vector.h: New file. + * gcc.target/riscv/rvv/xtheadvector/riscv_th_vector.h: New file. + * gcc.target/riscv/rvv/xtheadvector/riscv_vector.h: New file. + +2025-09-15 Stefan Schulze Frielinghaus + + * gcc.dg/pr121391-1.c: New test. + * gcc.dg/pr121391-2.c: New test. + +2025-09-15 Paul Thomas + + PR fortran/83763 + * gfortran.dg/pdt_46.f03: New test. + +2025-09-14 Richard Biener + + PR lto/121935 + * g++.dg/lto/pr121935_0.C: New testcase. + +2025-09-14 Yuao Ma + + * gfortran.dg/conditional_1.f90: New test. + * gfortran.dg/conditional_2.f90: New test. + * gfortran.dg/conditional_3.f90: New test. + * gfortran.dg/conditional_4.f90: New test. + * gfortran.dg/conditional_5.f90: New test. + * gfortran.dg/conditional_6.f90: New test. + * gfortran.dg/conditional_7.f90: New test. + * gfortran.dg/conditional_8.f90: New test. + * gfortran.dg/conditional_9.f90: New test. + +2025-09-14 Richard Biener + + * gcc.dg/vect/vect-reduc-chain-2.c: Adjust. + * gcc.dg/vect/vect-reduc-chain-3.c: Likewise. + +2025-09-13 Dimitar Dimitrov + + * gcc.dg/asm-hard-reg-error-1.c: Enable test for PRU, and define + registers for PRU. + * gcc.dg/asm-hard-reg-error-4.c: Define hard regs for PRU. + * gcc.dg/asm-hard-reg-error-5.c: Ditto. + +2025-09-13 Joseph Myers + + * gcc.dg/c23-array-negative-1.c, gcc.dg/c23-register-array-1.c, + gcc.dg/c23-register-array-2.c, gcc.dg/c23-register-array-3.c, + gcc.dg/c23-register-array-4.c, gcc.dg/c2y-array-negative-1.c, + gcc.dg/c2y-register-array-2.c, gcc.dg/c2y-register-array-3.c: New + tests. + +2025-09-12 Eric Botcazou + + PR ada/121532 + * ada/acats-4/tests/cxa/cxai034.a: Use Long_Switch_To_New_Task + constant instead of Switch_To_New_Task in delay statements. + * ada/acats-4/tests/cxa/cxai035.a: Likewise. + * ada/acats-4/tests/cxa/cxai036.a: Likewise. + +2025-09-12 Patrick Palka + + PR c++/121795 + * g++.dg/cpp26/pack-indexing17.C: New test. + * g++.dg/cpp26/pack-indexing17a.C: New test. + +2025-09-12 Edwin Lu + + PR target/120378 + * gcc.target/riscv/rvv/autovec/pr120378-1.c: New test. + * gcc.target/riscv/rvv/autovec/pr120378-2.c: New test. + * gcc.target/riscv/rvv/autovec/pr120378-3.c: New test. + * gcc.target/riscv/rvv/autovec/pr120378-4.c: New test. + +2025-09-12 H.J. Lu + + PR testsuite/121888 + * gcc.target/sparc/tls-ld-int16.c: Compile with -fPIC. + * gcc.target/sparc/tls-ld-int32.c: Likewise. + * gcc.target/sparc/tls-ld-int64.c: Likewise. + * gcc.target/sparc/tls-ld-int8.c: Likewise. + * gcc.target/sparc/tls-ld-uint16.c: Likewise. + * gcc.target/sparc/tls-ld-uint32.c: Likewise. + * gcc.target/sparc/tls-ld-uint8.c: Likewise. + +2025-09-12 David Malcolm + + PR diagnostics/120063 + * gcc.dg/fatal-error.c: New test. + * gcc.dg/fatal-error-html.py: New test. + * gcc.dg/fatal-error-sarif.py: New test. + +2025-09-12 David Malcolm + + PR diagnostics/121876 + * gcc.dg/plugin/crash-test-nested-ice-html.py: New test. + * gcc.dg/plugin/crash-test-nested-ice-sarif.py: New test. + * gcc.dg/plugin/crash-test-nested-ice.c: New test. + * gcc.dg/plugin/crash-test-nested-write-through-null-html.py: New test. + * gcc.dg/plugin/crash-test-nested-write-through-null-sarif.py: New test. + * gcc.dg/plugin/crash-test-nested-write-through-null.c: New test. + * gcc.dg/plugin/crash_test_plugin.cc: Add "nested" argument, and when + set, inject the problem within a nested diagnostic. + * gcc.dg/plugin/plugin.exp: Add crash-test-nested-ice.c and + crash-test-nested-write-through-null.c. + +2025-09-12 David Malcolm + + * gcc.dg/plugin/crash-test-write-though-null-sarif.c: Rename to... + * gcc.dg/plugin/crash-test-write-through-null-sarif.c: ...this. + * gcc.dg/plugin/crash-test-write-though-null-stderr.c: Rename to... + * gcc.dg/plugin/crash-test-write-through-null-stderr.c: ...this. + * gcc.dg/plugin/plugin.exp: Update for above renamings. Sort the + test files for crash_test_plugin.cc alphabetically. + +2025-09-12 Jeff Law + + * gcc.target/riscv/rvv/xandesvector/non-policy/non-overloaded/nds_vd4dots.c: + Adjust ABI specification. + * gcc.target/riscv/rvv/xandesvector/non-policy/non-overloaded/nds_vd4dotsu.c: + Likewise. + * gcc.target/riscv/rvv/xandesvector/non-policy/non-overloaded/nds_vd4dotu.c: + Likewise. + * gcc.target/riscv/rvv/xandesvector/non-policy/non-overloaded/nds_vfncvtbf16s.c: + Likewise. + * gcc.target/riscv/rvv/xandesvector/non-policy/non-overloaded/nds_vfpmadb.c: + Likewise. + * gcc.target/riscv/rvv/xandesvector/non-policy/non-overloaded/nds_vfpmadt.c: + Likewise. + * gcc.target/riscv/rvv/xandesvector/non-policy/non-overloaded/nds_vfwcvtsbf16.c: + Likewise. + * gcc.target/riscv/rvv/xandesvector/non-policy/non-overloaded/nds_vln8.c: + Likewise. + * gcc.target/riscv/rvv/xandesvector/non-policy/overloaded/nds_vd4dots.c: + Likewise. + * gcc.target/riscv/rvv/xandesvector/non-policy/overloaded/nds_vd4dotsu.c: + Likewise. + * gcc.target/riscv/rvv/xandesvector/non-policy/overloaded/nds_vd4dotu.c: + Likewise. + * gcc.target/riscv/rvv/xandesvector/non-policy/overloaded/nds_vfncvtbf16s.c: + Likewise. + * gcc.target/riscv/rvv/xandesvector/non-policy/overloaded/nds_vfpmadb.c: + Likewise. + * gcc.target/riscv/rvv/xandesvector/non-policy/overloaded/nds_vfpmadt.c: + Likewise. + * gcc.target/riscv/rvv/xandesvector/non-policy/overloaded/nds_vfwcvtsbf16.c: + Likewise. + * gcc.target/riscv/rvv/xandesvector/non-policy/overloaded/nds_vln8.c: + Likewise. + * gcc.target/riscv/rvv/xandesvector/policy/non-overloaded/nds_vd4dots.c: + Likewise. + * gcc.target/riscv/rvv/xandesvector/policy/non-overloaded/nds_vd4dotsu.c: + Likewise. + * gcc.target/riscv/rvv/xandesvector/policy/non-overloaded/nds_vd4dotu.c: + Likewise. + * gcc.target/riscv/rvv/xandesvector/policy/non-overloaded/nds_vfncvtbf16s.c: + Likewise. + * gcc.target/riscv/rvv/xandesvector/policy/non-overloaded/nds_vfpmadb.c: + Likewise. + * gcc.target/riscv/rvv/xandesvector/policy/non-overloaded/nds_vfpmadt.c: + Likewise. + * gcc.target/riscv/rvv/xandesvector/policy/non-overloaded/nds_vfwcvtsbf16.c: + Likewise. + * gcc.target/riscv/rvv/xandesvector/policy/non-overloaded/nds_vln8.c: + Likewise. + * gcc.target/riscv/rvv/xandesvector/policy/overloaded/nds_vd4dots.c: + Likewise. + * gcc.target/riscv/rvv/xandesvector/policy/overloaded/nds_vd4dotsu.c: + Likewise. + * gcc.target/riscv/rvv/xandesvector/policy/overloaded/nds_vd4dotu.c: + Likewise. + * gcc.target/riscv/rvv/xandesvector/policy/overloaded/nds_vfncvtbf16s.c: + Likewise. + * gcc.target/riscv/rvv/xandesvector/policy/overloaded/nds_vfpmadb.c: + Likewise. + * gcc.target/riscv/rvv/xandesvector/policy/overloaded/nds_vfpmadt.c: + Likewise. + * gcc.target/riscv/rvv/xandesvector/policy/overloaded/nds_vfwcvtsbf16.c: + Likewise. + * gcc.target/riscv/rvv/xandesvector/policy/overloaded/nds_vln8.c: + Likewise. + +2025-09-12 Nathaniel Shead + + PR c++/121893 + * g++.dg/modules/adl-10_a.C: New test. + * g++.dg/modules/adl-10_b.C: New test. + +2025-09-12 Nathaniel Shead + + PR c++/121865 + * g++.dg/lto/pr101396_0.C: Ensure A will be walked into (and + isn't constant-folded out of the GIMPLE for the function). + * g++.dg/lto/pr101396_1.C: Add message. + * g++.dg/modules/lto-4_a.C: New test. + * g++.dg/modules/lto-4_b.C: New test. + +2025-09-12 Tamar Christina + + * gcc.target/aarch64/vect-early-break-addhn_1.c: New test. + * gcc.target/aarch64/vect-early-break-addhn_2.c: New test. + * gcc.target/aarch64/vect-early-break-addhn_3.c: New test. + * gcc.target/aarch64/vect-early-break-addhn_4.c: New test. + +2025-09-12 Tamar Christina + + * gcc.target/aarch64/vect-addhn_1.c: New test. + +2025-09-11 Harald Anlauf + + PR fortran/121616 + * gfortran.dg/alloc_comp_assign_17.f90: New test. + +2025-09-11 H.J. Lu + + PR fortran/107421 + PR testsuite/121848 + * gfortran.dg/gomp/pr107421.f90: Require PIE and pass -fPIE for + non-x86 targets. + +2025-09-11 H.J. Lu + + PR c/107419 + PR c++/107393 + * c-c++-common/tls-attr-common.c: New test. + * c-c++-common/tls-attr-le-pic.c: Likewise. + * c-c++-common/tls-attr-le-pie.c: Likewise. + +2025-09-11 H.J. Lu + + PR c++/121889 + * g++.dg/tls/pr121889.C: New test. + +2025-09-11 Wilco Dijkstra + + PR middle-end/66462 + * gcc.target/aarch64/pr66462.c: Add tests for isfinite. + +2025-09-11 Matteo Nicoli + + PR tree-optimization/121595 + * gcc.dg/fabs-plus-zero-1.c: New testcase. + * gcc.dg/fabs-plus-zero-2.c: Likewise. + +2025-09-11 Xi Ruoyao + + * lib/target-supports.exp + (check_effective_target_loongarch_scq_hw): New. + (check_effective_target_sync_int_128_runtime): Return 1 on + loongarch64-*-* if hardware supports both LSX and SCQ. + * gcc.dg/atomic-compare-exchange-5.c: Pass -mlsx -mscq for + loongarch64-*-*. + * gcc.dg/atomic-exchange-5.c: Likewise. + * gcc.dg/atomic-load-5.c: Likewise. + * gcc.dg/atomic-op-5.c: Likewise. + * gcc.dg/atomic-store-5.c: Likewise. + * gcc.dg/atomic-store-6.c: Likewise. + * gcc.dg/simulate-thread/atomic-load-int128.c: Likewise. + * gcc.dg/simulate-thread/atomic-other-int128.c: Likewise. + (dg-final): xfail on loongarch64-*-* because gdb does not + handle sc.q properly yet. + +2025-09-11 Tsukasa OI + + * gcc.target/riscv/rvv/base/abi-call-variant_cc-sibcall.c: New test. + * gcc.target/riscv/rvv/base/abi-call-variant_cc-sibcall-indirect-1.c: Ditto. + * gcc.target/riscv/rvv/base/abi-call-variant_cc-sibcall-indirect-2.c: Ditto. + +2025-09-11 Richard Biener + + PR tree-optimization/121829 + * gcc.dg/torture/pr121829.c: New testcase. + +2025-09-11 Richard Biener + + PR tree-optimization/121870 + * g++.dg/torture/pr121870.C: New testcase. + +2025-09-11 Robin Dapp + + * gcc.target/riscv/zbb-min-max-04.c: New test. + +2025-09-11 Robin Dapp + + * gcc.target/riscv/addsieq.c: Remove xfail and expect conversion + through noce_convert_multiple_sets. + * gcc.target/riscv/addsifeq.c: Ditto. + * gcc.target/riscv/addsifge.c: Ditto. + * gcc.target/riscv/addsifgt.c: Ditto. + * gcc.target/riscv/addsifle.c: Ditto. + * gcc.target/riscv/addsiflt.c: Ditto. + * gcc.target/riscv/addsifne.c: Ditto. + * gcc.target/riscv/addsige.c: Ditto. + * gcc.target/riscv/addsigeu.c: Ditto. + * gcc.target/riscv/addsigt.c: Ditto. + * gcc.target/riscv/addsigtu.c: Ditto. + * gcc.target/riscv/addsile.c: Ditto. + * gcc.target/riscv/addsileu.c: Ditto. + * gcc.target/riscv/addsilt.c: Ditto. + * gcc.target/riscv/addsiltu.c: Ditto. + +2025-09-11 Stefan Schulze Frielinghaus + + * gcc.dg/asm-hard-reg-error-4.c: Limit the test to LRA targets. + Use registers r20 and r21 for hppa. Likewise, for AVR use r20 + and r24 instead. + * gcc.dg/asm-hard-reg-error-5.c: Ditto. + +2025-09-11 Kito Cheng + + * gcc.target/riscv/rvv/autovec/zve32f-1.c: Update expected + vectorization count from 2 to 3. + * gcc.target/riscv/rvv/autovec/zve32f_zvl256b-1.c: Add + -mrvv-max-lmul=m2 option. + * gcc.target/riscv/rvv/autovec/zve32x_zvl256b-1.c: Add + -mrvv-max-lmul=m2 option. + +2025-09-11 Lulu Cheng + + * gcc.target/loongarch/cmodel-extreme-1.c: Add -fPIC. + * gcc.target/loongarch/cmodel-extreme-2.c: Likewise. + * gcc.target/loongarch/tls-gd-noplt.c: Likewise. + * gcc.target/loongarch/tls-extreme-macro.c: Likewise. + * gcc.target/loongarch/func-call-medium-2.c: Modify. + * gcc.target/loongarch/func-call-medium-3.c: Modify. + * gcc.target/loongarch/func-call-medium-4.c: Removed. + +2025-09-10 Joseph Myers + + * gcc.dg/c2y-function-qual-1.c, gcc.dg/c2y-incomplete-1.c, + gcc.dg/c2y-inline-1.c, gcc.dg/c2y-pointer-1.c, + gcc.dg/c2y-register-array-1.c, gcc.dg/c2y-storage-class-1.c, + gcc.dg/c2y-struct-empty-1.c: New tests. + +2025-09-10 Peter Bergner + + PR target/121878 + * gcc.target/riscv/pr121878.c: New test. + +2025-09-10 Juergen Christ + + * gcc.dg/vect/nodump-extractlast-1.c: New test. + +2025-09-10 Martin Uecker + + * gcc.dg/Wreturn-nested-1.c: New test. + * gcc.dg/Wreturn-nested-2.c: New test. + * gcc.dg/Wtrampolines-2.c: New test. + * gcc.dg/Wtrampolines-3.c: New test. + +2025-09-10 Paul-Antoine Arras + + * gcc.target/riscv/rvv/autovec/vx_vf/vf-1-f16.c: Add vfwsub.wf. + * gcc.target/riscv/rvv/autovec/vx_vf/vf-1-f32.c: Likewise. + * gcc.target/riscv/rvv/autovec/vx_vf/vf-2-f16.c: Likewise. + * gcc.target/riscv/rvv/autovec/vx_vf/vf-2-f32.c: Likewise. + * gcc.target/riscv/rvv/autovec/vx_vf/vf-3-f16.c: Likewise. + * gcc.target/riscv/rvv/autovec/vx_vf/vf-3-f32.c: Likewise. + * gcc.target/riscv/rvv/autovec/vx_vf/vf-4-f16.c: Likewise. + * gcc.target/riscv/rvv/autovec/vx_vf/vf-4-f32.c: Likewise. + * gcc.target/riscv/rvv/autovec/vx_vf/vf_binop.h + (DEF_VF_BINOP_WIDEN_CASE_2, DEF_VF_BINOP_WIDEN_CASE_3): Swap operands. + * gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwsub-run-2-f16.c: New test. + * gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwsub-run-2-f32.c: New test. + +2025-09-10 Nathaniel Shead + + PR c++/121859 + * g++.dg/cpp2a/concepts-traits5.C: New test. + +2025-09-10 Jakub Jelinek + + * lib/lto.exp (lto-execute-1): Search for _1.* etc. files + only with a list of known extensions. + +2025-09-10 Jakub Jelinek + + PR middle-end/121828 + * gcc.dg/bitint-126.c: New test. + +2025-09-10 Jakub Jelinek + + PR middle-end/121831 + * g++.dg/lto/pr121831_0.C: New test. + * g++.dg/lto/pr121831_1.C: New test. + +2025-09-10 Juergen Christ + + * gcc.dg/vect/pr109011-2.c: Fix expected outcome. + * gcc.dg/vect/pr109011-4.c: Fix expected outcome. + * gcc.target/s390/ffs-1.c: New test. + +2025-09-10 Jakub Jelinek + + * g++.target/i386/mangle-ldbl-1.C: New test. + * g++.target/i386/mangle-ldbl-2.C: New test. + * g++.target/m68k/mangle-ldbl-1.C: New test. + * g++.target/m68k/mangle-ldbl-2.C: New test. + +2025-09-10 Maximilian Immanuel Brandtner + + * gcc.target/s390/vector/vec-extract-3.c: New test. + +2025-09-09 Nathaniel Shead + + PR c++/99682 + PR c++/121808 + * g++.dg/modules/circ-1_c.C: Adjust diagnostic. + * g++.dg/modules/mod-decl-1.C: Likewise. + * g++.dg/modules/mod-decl-2_b.C: Likewise. + * g++.dg/modules/pr99174.H: Likewise. + * g++.dg/modules/import-3_a.C: New test. + * g++.dg/modules/import-3_b.C: New test. + * g++.dg/modules/import-3_c.C: New test. + * g++.dg/modules/mod-decl-9.C: New test. + * g++.dg/modules/part-10_a.C: New test. + * g++.dg/modules/part-10_b.C: New test. + * g++.dg/modules/part-10_c.C: New test. + * g++.dg/modules/part-10_d.C: New test. + +2025-09-09 Nathaniel Shead + + PR testsuite/121872 + * g++.dg/modules/default-arg-4_b.C: Change run to compile. + +2025-09-09 Patrick Palka + + PR c++/121779 + * g++.dg/lookup/operator-8.C: Remove outdated comment about + this test failing. + * g++.dg/lookup/operator-8a.C: New test. + +2025-09-09 Harald Anlauf + + PR fortran/82480 + * gfortran.dg/stat_3.f90: Extend argument checking. + * gfortran.dg/stat_4.f90: New test. + +2025-09-09 David Faust + + PR debug/121411 + * gcc.dg/debug/ctf/ctf-struct-3.c: New test. + +2025-09-09 Paul-Antoine Arras + + * gcc.target/riscv/rvv/autovec/vx_vf/vf-1-f16.c: Add vfwsub.vf. + * gcc.target/riscv/rvv/autovec/vx_vf/vf-1-f32.c: Likewise. + * gcc.target/riscv/rvv/autovec/vx_vf/vf-2-f16.c: Likewise. + * gcc.target/riscv/rvv/autovec/vx_vf/vf-2-f32.c: Likewise. + * gcc.target/riscv/rvv/autovec/vx_vf/vf-3-f16.c: Likewise. + * gcc.target/riscv/rvv/autovec/vx_vf/vf-3-f32.c: Likewise. + * gcc.target/riscv/rvv/autovec/vx_vf/vf-4-f16.c: Likewise. + * gcc.target/riscv/rvv/autovec/vx_vf/vf-4-f32.c: Likewise. + * gcc.target/riscv/rvv/autovec/vx_vf/vf_binop.h + (DEF_VF_BINOP_WIDEN_CASE_0, DEF_VF_BINOP_WIDEN_CASE_1): Swap operands. + * gcc.target/riscv/rvv/autovec/vx_vf/vf_binop_widen_run.h: Likewise. + * gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwsub-run-1-f16.c: New test. + * gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwsub-run-1-f32.c: New test. + +2025-09-09 Jakub Jelinek + + PR c++/121678 + * g++.dg/ext/pr121678.C: New test. + * gcc.dg/pr121678.c: New test. + +2025-09-09 Paul-Antoine Arras + + * gcc.target/riscv/rvv/autovec/vx_vf/vf-1-f16.c: Add vfwadd.wf. + * gcc.target/riscv/rvv/autovec/vx_vf/vf-1-f32.c: Likewise. + * gcc.target/riscv/rvv/autovec/vx_vf/vf-2-f16.c: Likewise. + * gcc.target/riscv/rvv/autovec/vx_vf/vf-2-f32.c: Likewise. + * gcc.target/riscv/rvv/autovec/vx_vf/vf-3-f16.c: Likewise. + * gcc.target/riscv/rvv/autovec/vx_vf/vf-3-f32.c: Likewise. + * gcc.target/riscv/rvv/autovec/vx_vf/vf-4-f16.c: Likewise. + * gcc.target/riscv/rvv/autovec/vx_vf/vf-4-f32.c: Likewise. + * gcc.target/riscv/rvv/autovec/vx_vf/vf_binop.h: Add support for single + widening variants. + * gcc.target/riscv/rvv/autovec/vx_vf/vf_binop_widen_run.h: Add support + for single widening variants. + * gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwadd-run-2-f16.c: New test. + * gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwadd-run-2-f32.c: New test. + +2025-09-09 Kyrylo Tkachov + + Revert: + 2025-09-09 Kyrylo Tkachov + + * gcc.target/aarch64/simd/bcax_d.c: Add tests for DImode arguments. + +2025-09-09 Tamar Christina + + Revert: + 2025-09-09 Richard Biener + + PR tree-optimization/121829 + * gcc.dg/torture/pr121829.c: New testcase. + +2025-09-09 Matthias Kretz + + PR c++/121801 + * g++.dg/abi/pr121801.C: New test. + +2025-09-09 H.J. Lu + + PR target/121861 + * gcc.target/i386/pr121861-1a.c: New file. + * gcc.target/i386/pr121861-1b.c: Likewise. + +2025-09-09 liuhongt + + * gcc.target/i386/avx256_avoid_vec_perm-3.c: New test. + * gcc.target/i386/avx256_avoid_vec_perm-4.c: New test. + * gcc.target/i386/avx512bw-vpalignr-4.c: Adjust testcase. + * gcc.target/i386/avx512vl-vpalignr-4.c: Ditto. + +2025-09-09 liuhongt + + * gcc.target/i386/avx256_avoid_vec_perm.c: Adjust testcase. + * gcc.target/i386/avx256_avoid_vec_perm-2.c: New test. + * gcc.target/i386/avx256_avoid_vec_perm-5.c: New test. + +2025-09-08 Eric Botcazou + + PR ada/121532 + * ada/acats-4/tests/cxa/cxai033.a: Use Long_Switch_To_New_Task + constant instead of Switch_To_New_Task in delay statements. + +2025-09-08 Xi Ruoyao + + * gcc.dg/fixed-point/bitint-1.c (dg-options): Use -std=gnu23 + instead of -std=c23. + +2025-09-08 Richard Biener + + PR tree-optimization/107997 + PR tree-optimization/121844 + * gcc.dg/torture/pr121844.c: New testcase. + +2025-09-08 Paul-Antoine Arras + + * gcc.target/riscv/rvv/autovec/vx_vf/vf-1-f16.c: Add vfwadd. + * gcc.target/riscv/rvv/autovec/vx_vf/vf-1-f32.c: Likewise. + * gcc.target/riscv/rvv/autovec/vx_vf/vf-2-f16.c: Likewise. + * gcc.target/riscv/rvv/autovec/vx_vf/vf-2-f32.c: Likewise. + * gcc.target/riscv/rvv/autovec/vx_vf/vf-3-f16.c: Likewise. + * gcc.target/riscv/rvv/autovec/vx_vf/vf-3-f32.c: Likewise. + * gcc.target/riscv/rvv/autovec/vx_vf/vf-4-f16.c: Likewise. + * gcc.target/riscv/rvv/autovec/vx_vf/vf-4-f32.c: Likewise. + * gcc.target/riscv/rvv/autovec/vx_vf/vf_binop.h + (DEF_VF_BINOP_WIDEN_CASE_0): Fix OP. + * gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwadd-run-1-f16.c: New test. + * gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwadd-run-1-f32.c: New test. + +2025-09-08 Richard Biener + + PR tree-optimization/121830 + * gcc.dg/vect/pr121830.c: New testcase. + +2025-09-08 Richard Biener + + PR tree-optimization/121829 + * gcc.dg/torture/pr121829.c: New testcase. + +2025-09-08 Paul-Antoine Arras + + * gcc.target/riscv/rvv/autovec/vx_vf/vf-1-f16.c: Add vfrsub. + * gcc.target/riscv/rvv/autovec/vx_vf/vf-1-f32.c: Likewise. + * gcc.target/riscv/rvv/autovec/vx_vf/vf-1-f64.c: Likewise. + * gcc.target/riscv/rvv/autovec/vx_vf/vf-2-f16.c: Likewise. + * gcc.target/riscv/rvv/autovec/vx_vf/vf-2-f32.c: Likewise. + * gcc.target/riscv/rvv/autovec/vx_vf/vf-2-f64.c: Likewise. + * gcc.target/riscv/rvv/autovec/vx_vf/vf-3-f16.c: Likewise. + * gcc.target/riscv/rvv/autovec/vx_vf/vf-3-f32.c: Likewise. + * gcc.target/riscv/rvv/autovec/vx_vf/vf-3-f64.c: Likewise. + * gcc.target/riscv/rvv/autovec/vx_vf/vf-4-f16.c: Likewise. + * gcc.target/riscv/rvv/autovec/vx_vf/vf-4-f32.c: Likewise. + * gcc.target/riscv/rvv/autovec/vx_vf/vf-4-f64.c: Likewise. + * gcc.target/riscv/rvv/autovec/vx_vf/vf_binop_data.h: Add data for + vfrsub. + * gcc.target/riscv/rvv/autovec/vx_vf/vf_vfrsub-run-1-f16.c: New test. + * gcc.target/riscv/rvv/autovec/vx_vf/vf_vfrsub-run-1-f32.c: New test. + * gcc.target/riscv/rvv/autovec/vx_vf/vf_vfrsub-run-1-f64.c: New test. + +2025-09-08 Paul-Antoine Arras + + * gcc.target/riscv/rvv/autovec/vls/floating-point-sub-2.c: Adjust scan + dumps. + * gcc.target/riscv/rvv/autovec/vx_vf/vf-1-f16.c: Add vfsub. + * gcc.target/riscv/rvv/autovec/vx_vf/vf-1-f32.c: Likewise. + * gcc.target/riscv/rvv/autovec/vx_vf/vf-1-f64.c: Likewise. + * gcc.target/riscv/rvv/autovec/vx_vf/vf-2-f16.c: Likewise. + * gcc.target/riscv/rvv/autovec/vx_vf/vf-2-f32.c: Likewise. + * gcc.target/riscv/rvv/autovec/vx_vf/vf-2-f64.c: Likewise. + * gcc.target/riscv/rvv/autovec/vx_vf/vf-3-f16.c: Likewise. + * gcc.target/riscv/rvv/autovec/vx_vf/vf-3-f32.c: Likewise. + * gcc.target/riscv/rvv/autovec/vx_vf/vf-3-f64.c: Likewise. + * gcc.target/riscv/rvv/autovec/vx_vf/vf-4-f16.c: Likewise. + * gcc.target/riscv/rvv/autovec/vx_vf/vf-4-f32.c: Likewise. + * gcc.target/riscv/rvv/autovec/vx_vf/vf-4-f64.c: Likewise. + * gcc.target/riscv/rvv/autovec/vx_vf/vf_binop_data.h: Add data for + vfsub. + * gcc.target/riscv/rvv/autovec/vx_vf/vf_vfsub-run-1-f16.c: New test. + * gcc.target/riscv/rvv/autovec/vx_vf/vf_vfsub-run-1-f32.c: New test. + * gcc.target/riscv/rvv/autovec/vx_vf/vf_vfsub-run-1-f64.c: New test. + +2025-09-08 Paul-Antoine Arras + + * gcc.target/riscv/rvv/autovec/vls/floating-point-add-2.c: Adjust scan + dump. + * gcc.target/riscv/rvv/autovec/vls/floating-point-add-3.c: Likewise. + * gcc.target/riscv/rvv/autovec/vls/floating-point-sub-3.c: Likewise. + * gcc.target/riscv/rvv/autovec/vx_vf/vf-1-f16.c: Add vfadd. + * gcc.target/riscv/rvv/autovec/vx_vf/vf-1-f32.c: Likewise. + * gcc.target/riscv/rvv/autovec/vx_vf/vf-1-f64.c: Likewise. + * gcc.target/riscv/rvv/autovec/vx_vf/vf-2-f16.c: Likewise. + * gcc.target/riscv/rvv/autovec/vx_vf/vf-2-f32.c: Likewise. + * gcc.target/riscv/rvv/autovec/vx_vf/vf-2-f64.c: Likewise. + * gcc.target/riscv/rvv/autovec/vx_vf/vf-3-f16.c: Likewise. + * gcc.target/riscv/rvv/autovec/vx_vf/vf-3-f32.c: Likewise. + * gcc.target/riscv/rvv/autovec/vx_vf/vf-3-f64.c: Likewise. + * gcc.target/riscv/rvv/autovec/vx_vf/vf-4-f16.c: Likewise. + * gcc.target/riscv/rvv/autovec/vx_vf/vf-4-f32.c: Likewise. + * gcc.target/riscv/rvv/autovec/vx_vf/vf-4-f64.c: Likewise. + * gcc.target/riscv/rvv/autovec/vx_vf/vf_binop_data.h: Add data for + vfadd. + * gcc.target/riscv/rvv/autovec/vx_vf/vf_vfadd-run-1-f16.c: New test. + * gcc.target/riscv/rvv/autovec/vx_vf/vf_vfadd-run-1-f32.c: New test. + * gcc.target/riscv/rvv/autovec/vx_vf/vf_vfadd-run-1-f64.c: New test. + +2025-09-08 Paul-Antoine Arras + + * gcc.target/riscv/rvv/autovec/vx_vf/vf-1-f16.c: Add vfwmul. + * gcc.target/riscv/rvv/autovec/vx_vf/vf-1-f32.c: Likewise. + * gcc.target/riscv/rvv/autovec/vx_vf/vf-2-f16.c: Likewise. + * gcc.target/riscv/rvv/autovec/vx_vf/vf-2-f32.c: Likewise. + * gcc.target/riscv/rvv/autovec/vx_vf/vf-3-f16.c: Likewise. + * gcc.target/riscv/rvv/autovec/vx_vf/vf-3-f32.c: Likewise. + * gcc.target/riscv/rvv/autovec/vx_vf/vf-4-f16.c: Likewise. + * gcc.target/riscv/rvv/autovec/vx_vf/vf-4-f32.c: Likewise. + * gcc.target/riscv/rvv/autovec/vx_vf/vf_binop.h: Add support for + widening variants. + * gcc.target/riscv/rvv/autovec/vx_vf/vf_binop_widen_run.h: New test + helper. + * gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwmul-run-1-f16.c: New test. + * gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwmul-run-1-f32.c: New test. + +2025-09-08 Paul-Antoine Arras + + * gcc.target/riscv/rvv/autovec/vx_vf/vf-5-f16.c: Add vfmax. + * gcc.target/riscv/rvv/autovec/vx_vf/vf-5-f32.c: Likewise. + * gcc.target/riscv/rvv/autovec/vx_vf/vf-5-f64.c: Likewise. + * gcc.target/riscv/rvv/autovec/vx_vf/vf-6-f16.c: Likewise. + * gcc.target/riscv/rvv/autovec/vx_vf/vf-6-f32.c: Likewise. + * gcc.target/riscv/rvv/autovec/vx_vf/vf-6-f64.c: Likewise. + * gcc.target/riscv/rvv/autovec/vx_vf/vf-7-f16.c: Likewise. + * gcc.target/riscv/rvv/autovec/vx_vf/vf-7-f32.c: Likewise. + * gcc.target/riscv/rvv/autovec/vx_vf/vf-7-f64.c: Likewise. + * gcc.target/riscv/rvv/autovec/vx_vf/vf-8-f16.c: Add vfmax. Also add + missing -fno-fast-math. + * gcc.target/riscv/rvv/autovec/vx_vf/vf-8-f32.c: Likewise. + * gcc.target/riscv/rvv/autovec/vx_vf/vf-8-f64.c: Likewise. + +2025-09-08 Paul Thomas + + PR fortran/84008 + * gfortran.dg/pdt_45.f03: New test. + +2025-09-08 Andrew Pinski + + PR tree-optimization/87900 + * gcc.dg/tree-ssa/calloc-10.c: New test. + * gcc.dg/tree-ssa/calloc-11.c: New test. + * gcc.dg/tree-ssa/calloc-12.c: New test. + +2025-09-08 Andrew Pinski + + PR tree-optimization/83022 + * gcc.dg/tree-ssa/calloc-6.c: New test. + * gcc.dg/tree-ssa/calloc-7.c: New test. + * gcc.dg/tree-ssa/calloc-8.c: New test. + * gcc.dg/tree-ssa/calloc-9.c: New test. + 2025-09-07 Andrew Pinski PR tree-optimization/121841 diff --git a/gcc/testsuite/ada/acats-4/tests/cxa/cxai033.a b/gcc/testsuite/ada/acats-4/tests/cxa/cxai033.a index 90bd3f60279e..921655bcc624 100644 --- a/gcc/testsuite/ada/acats-4/tests/cxa/cxai033.a +++ b/gcc/testsuite/ada/acats-4/tests/cxa/cxai033.a @@ -116,7 +116,7 @@ begin -- Give time for Reader_1 to activate. - delay Impdef.Switch_To_New_Task; + delay Impdef.Long_Switch_To_New_Task; if not Reader_1_Blocked then @@ -145,7 +145,7 @@ begin -- Give time for Writer_1 to activate; - delay Impdef.Switch_To_New_Task; + delay Impdef.Long_Switch_To_New_Task; if Reader_1_Blocked then diff --git a/gcc/testsuite/ada/acats-4/tests/cxa/cxai034.a b/gcc/testsuite/ada/acats-4/tests/cxa/cxai034.a index ebe88f38ef0c..b39fb84ce349 100644 --- a/gcc/testsuite/ada/acats-4/tests/cxa/cxai034.a +++ b/gcc/testsuite/ada/acats-4/tests/cxa/cxai034.a @@ -143,7 +143,7 @@ begin -- Give time for Reader_1 to activate. - delay Impdef.Switch_To_New_Task; + delay Impdef.Long_Switch_To_New_Task; if not Reader_1_Blocked then @@ -172,7 +172,7 @@ begin -- Give time for Writer_1 to activate; - delay Impdef.Switch_To_New_Task; + delay Impdef.Long_Switch_To_New_Task; if Reader_1_Blocked then @@ -187,7 +187,7 @@ begin -- Give time for Writer_3 to activate. - delay Impdef.Switch_To_New_Task; + delay Impdef.Long_Switch_To_New_Task; if not Writer_3_Blocked then @@ -216,7 +216,7 @@ begin -- Give time for Reader_3 to activate; - delay Impdef.Switch_To_New_Task; + delay Impdef.Long_Switch_To_New_Task; if Writer_3_Blocked then diff --git a/gcc/testsuite/ada/acats-4/tests/cxa/cxai035.a b/gcc/testsuite/ada/acats-4/tests/cxa/cxai035.a index 0c4af5106d2b..51993c70b4a1 100644 --- a/gcc/testsuite/ada/acats-4/tests/cxa/cxai035.a +++ b/gcc/testsuite/ada/acats-4/tests/cxa/cxai035.a @@ -163,7 +163,7 @@ begin -- Give time for Reader_1 to activate. - delay Impdef.Switch_To_New_Task; + delay Impdef.Long_Switch_To_New_Task; if not Reader_1_Blocked then @@ -192,7 +192,7 @@ begin -- Give time for Writer_1 to activate; - delay Impdef.Switch_To_New_Task; + delay Impdef.Long_Switch_To_New_Task; if Reader_1_Blocked then diff --git a/gcc/testsuite/ada/acats-4/tests/cxa/cxai036.a b/gcc/testsuite/ada/acats-4/tests/cxa/cxai036.a index 9b9ef0987aaa..4bb605aba286 100644 --- a/gcc/testsuite/ada/acats-4/tests/cxa/cxai036.a +++ b/gcc/testsuite/ada/acats-4/tests/cxa/cxai036.a @@ -190,7 +190,7 @@ begin -- Give time for Reader_1 to activate. - delay Impdef.Switch_To_New_Task; + delay Impdef.Long_Switch_To_New_Task; if not Reader_1_Blocked then @@ -219,7 +219,7 @@ begin -- Give time for Writer_1 to activate; - delay Impdef.Switch_To_New_Task; + delay Impdef.Long_Switch_To_New_Task; if Reader_1_Blocked then @@ -234,7 +234,7 @@ begin -- Give time for Writer_3 to activate. - delay Impdef.Switch_To_New_Task; + delay Impdef.Long_Switch_To_New_Task; if not Writer_3_Blocked then @@ -263,7 +263,7 @@ begin -- Give time for Reader_3 to activate; - delay Impdef.Switch_To_New_Task; + delay Impdef.Long_Switch_To_New_Task; if Writer_3_Blocked then diff --git a/gcc/testsuite/c-c++-common/analyzer/invalid-shift-1.c b/gcc/testsuite/c-c++-common/analyzer/invalid-shift-1.c index 08e52728748b..1b67c075eb5b 100644 --- a/gcc/testsuite/c-c++-common/analyzer/invalid-shift-1.c +++ b/gcc/testsuite/c-c++-common/analyzer/invalid-shift-1.c @@ -12,10 +12,10 @@ _dl_hwcaps_subdirs_build_bitmask (int subdirs, int active) uint32_t mask; if (subdirs != 32) - mask = (1 << subdirs) - 1; /* { dg-message "shift by count \\('33'\\) >= precision of type \\('\[0-9\]+'\\)" } */ + mask = (1 << subdirs) - 1; /* { dg-message "shift by count \\('33'\\) >= precision of type \\('\[0-9\]+'\\)" "" { xfail c++26 } } */ else mask = -1; - return mask ^ ((1U << inactive) - 1); /* { dg-message "shift by negative count \\('-1'\\)" } */ + return mask ^ ((1U << inactive) - 1); /* { dg-message "shift by negative count \\('-1'\\)" "" { xfail c++26 } } */ } void f1 (int); diff --git a/gcc/testsuite/c-c++-common/cpp/named-universal-char-escape-1.c b/gcc/testsuite/c-c++-common/cpp/named-universal-char-escape-1.c index 3651fdd5734f..9ff93f92129a 100644 --- a/gcc/testsuite/c-c++-common/cpp/named-universal-char-escape-1.c +++ b/gcc/testsuite/c-c++-common/cpp/named-universal-char-escape-1.c @@ -168,6 +168,7 @@ typedef __CHAR32_TYPE__ char32_t; || U'\U0003134A' != U'\N{CJK UNIFIED IDEOGRAPH-3134A}' \ || U'\U00031350' != U'\N{CJK UNIFIED IDEOGRAPH-31350}' \ || U'\U000323AF' != U'\N{CJK UNIFIED IDEOGRAPH-323AF}' \ + || U'\U0003340E' != U'\N{CJK UNIFIED IDEOGRAPH-3340E}' \ || U'\U00013460' != U'\N{EGYPTIAN HIEROGLYPH-13460}' \ || U'\U000143FA' != U'\N{EGYPTIAN HIEROGLYPH-143FA}' \ || U'\U00017000' != U'\N{TANGUT IDEOGRAPH-17000}' \ diff --git a/gcc/testsuite/c-c++-common/goacc-gomp/nesting-1.c b/gcc/testsuite/c-c++-common/goacc-gomp/nesting-1.c index 9ef154ed218b..929dfca646df 100644 --- a/gcc/testsuite/c-c++-common/goacc-gomp/nesting-1.c +++ b/gcc/testsuite/c-c++-common/goacc-gomp/nesting-1.c @@ -1,10 +1,9 @@ -/* { dg-additional-options "--param=openacc-kernels=decompose" } - +/* { dg-additional-options "--param=openacc-kernels=decompose" } */ /* { dg-additional-options "-fopt-info-omp-note" } */ - -/* { dg-additional-options "--param=openacc-privatization=noisy" } - Prune a few: uninteresting, and potentially varying depending on GCC configuration (data types): - { dg-prune-output {note: variable 'D\.[0-9]+' declared in block isn't candidate for adjusting OpenACC privatization level: not addressable} } */ +/* { dg-additional-options "--param=openacc-privatization=noisy" } */ +/* { dg-skip-if "PR121975" { c++26 } { "*" } { "" } } */ +/* Prune a few: uninteresting, and potentially varying depending on GCC configuration (data types): */ +/* { dg-prune-output {note: variable 'D\.[0-9]+' declared in block isn't candidate for adjusting OpenACC privatization level: not addressable} } */ void diff --git a/gcc/testsuite/c-c++-common/goacc/kernels-decompose-2.c b/gcc/testsuite/c-c++-common/goacc/kernels-decompose-2.c index 3ce9490f02f9..5aac40c038a0 100644 --- a/gcc/testsuite/c-c++-common/goacc/kernels-decompose-2.c +++ b/gcc/testsuite/c-c++-common/goacc/kernels-decompose-2.c @@ -1,10 +1,13 @@ /* Test OpenACC 'kernels' construct decomposition. */ +/* { dg-skip-if "PR121975" { c++26 } { "*" } { "" } } */ /* { dg-additional-options "-fopt-info-omp-all" } */ /* { dg-additional-options "--param=openacc-kernels=decompose" } /* { dg-additional-options "-O2" } for 'parloops'. */ +/* { dg-skip-if "PR121975" { c++26 } { "*" } { "" } } */ + /* { dg-additional-options "--param=openacc-privatization=noisy" } Prune a few: uninteresting, and potentially varying depending on GCC configuration (data types): { dg-prune-output {note: variable 'D\.[0-9]+' declared in block isn't candidate for adjusting OpenACC privatization level: not addressable} } */ diff --git a/gcc/testsuite/c-c++-common/goacc/kernels-decompose-pr100400-1-1.c b/gcc/testsuite/c-c++-common/goacc/kernels-decompose-pr100400-1-1.c index 57cb1a8cb87a..97fcaf7f28b3 100644 --- a/gcc/testsuite/c-c++-common/goacc/kernels-decompose-pr100400-1-1.c +++ b/gcc/testsuite/c-c++-common/goacc/kernels-decompose-pr100400-1-1.c @@ -1,3 +1,4 @@ +/* { dg-skip-if "PR121975" { c++26 } { "*" } { "" } } */ /* { dg-additional-options "--param openacc-kernels=decompose" } */ /* { dg-additional-options "-g0" } */ diff --git a/gcc/testsuite/c-c++-common/goacc/kernels-decompose-pr100400-1-3.c b/gcc/testsuite/c-c++-common/goacc/kernels-decompose-pr100400-1-3.c index 9779f1036f60..f7c80692890b 100644 --- a/gcc/testsuite/c-c++-common/goacc/kernels-decompose-pr100400-1-3.c +++ b/gcc/testsuite/c-c++-common/goacc/kernels-decompose-pr100400-1-3.c @@ -1,3 +1,4 @@ +/* { dg-skip-if "PR121975" { c++26 } { "*" } { "" } } */ /* { dg-additional-options "--param openacc-kernels=decompose" } */ /* { dg-additional-options "-fchecking" } diff --git a/gcc/testsuite/c-c++-common/goacc/kernels-decompose-pr104061-1-1.c b/gcc/testsuite/c-c++-common/goacc/kernels-decompose-pr104061-1-1.c index aa0fca7b6ed9..5bb68c1549cd 100644 --- a/gcc/testsuite/c-c++-common/goacc/kernels-decompose-pr104061-1-1.c +++ b/gcc/testsuite/c-c++-common/goacc/kernels-decompose-pr104061-1-1.c @@ -1,3 +1,4 @@ +/* { dg-skip-if "PR121975" { c++26 } { "*" } { "" } } */ /* { dg-additional-options "--param openacc-kernels=decompose" } */ /* { dg-additional-options "-g0" } */ diff --git a/gcc/testsuite/c-c++-common/goacc/kernels-decompose-pr104061-1-3.c b/gcc/testsuite/c-c++-common/goacc/kernels-decompose-pr104061-1-3.c index 70c2ac5b5312..43e1cca6ec7e 100644 --- a/gcc/testsuite/c-c++-common/goacc/kernels-decompose-pr104061-1-3.c +++ b/gcc/testsuite/c-c++-common/goacc/kernels-decompose-pr104061-1-3.c @@ -1,3 +1,4 @@ +/* { dg-skip-if "PR121975" { c++26 } { "*" } { "" } } */ /* { dg-additional-options "--param openacc-kernels=decompose" } */ /* { dg-additional-options "-fcompare-debug" } -- w/o debug compiled first. diff --git a/gcc/testsuite/c-c++-common/goacc/kernels-decompose-pr104061-1-4.c b/gcc/testsuite/c-c++-common/goacc/kernels-decompose-pr104061-1-4.c index d1cc1a97c9f0..97d7bed2d572 100644 --- a/gcc/testsuite/c-c++-common/goacc/kernels-decompose-pr104061-1-4.c +++ b/gcc/testsuite/c-c++-common/goacc/kernels-decompose-pr104061-1-4.c @@ -1,3 +1,4 @@ +/* { dg-skip-if "PR121975" { c++26 } { "*" } { "" } } */ /* { dg-additional-options "--param openacc-kernels=decompose" } */ /* { dg-additional-options "-g -fcompare-debug" } -- w/ debug compiled first. diff --git a/gcc/testsuite/c-c++-common/goacc/kernels-decompose-pr104132-1.c b/gcc/testsuite/c-c++-common/goacc/kernels-decompose-pr104132-1.c index 2a663e0ea19a..9094a5710b4b 100644 --- a/gcc/testsuite/c-c++-common/goacc/kernels-decompose-pr104132-1.c +++ b/gcc/testsuite/c-c++-common/goacc/kernels-decompose-pr104132-1.c @@ -1,3 +1,4 @@ +/* { dg-skip-if "PR121975" { c++26 } { "*" } { "" } } */ /* { dg-additional-options "--param openacc-kernels=decompose" } */ /* { dg-additional-options "-fopt-info-all-omp" } */ diff --git a/gcc/testsuite/c-c++-common/goacc/kernels-decompose-pr104133-1.c b/gcc/testsuite/c-c++-common/goacc/kernels-decompose-pr104133-1.c index 2724e22a5505..aa5dd346220a 100644 --- a/gcc/testsuite/c-c++-common/goacc/kernels-decompose-pr104133-1.c +++ b/gcc/testsuite/c-c++-common/goacc/kernels-decompose-pr104133-1.c @@ -1,3 +1,4 @@ +/* { dg-skip-if "PR121975" { c++26 } { "*" } { "" } } */ /* { dg-additional-options "--param openacc-kernels=decompose" } */ /* { dg-additional-options "-fopt-info-all-omp" } */ diff --git a/gcc/testsuite/c-c++-common/goacc/kernels-decompose-pr104774-1.c b/gcc/testsuite/c-c++-common/goacc/kernels-decompose-pr104774-1.c index 3ef0c897bcda..e6d4c55ae6dc 100644 --- a/gcc/testsuite/c-c++-common/goacc/kernels-decompose-pr104774-1.c +++ b/gcc/testsuite/c-c++-common/goacc/kernels-decompose-pr104774-1.c @@ -1,3 +1,4 @@ +/* { dg-skip-if "PR121975" { c++26 } { "*" } { "" } } */ /* { dg-additional-options "--param openacc-kernels=decompose" } */ /* { dg-additional-options "-fopt-info-all-omp" } */ diff --git a/gcc/testsuite/c-c++-common/goacc/mdc-1.c b/gcc/testsuite/c-c++-common/goacc/mdc-1.c index 923a4ea73a39..8d3e7bfc6cfc 100644 --- a/gcc/testsuite/c-c++-common/goacc/mdc-1.c +++ b/gcc/testsuite/c-c++-common/goacc/mdc-1.c @@ -3,6 +3,7 @@ /* TODO The tree dump scanning has certain expectations. { dg-do compile { target { lp64 || llp64 } } } */ +/* { dg-skip-if "PR121975" { c++26 } { "*" } { "" } } */ /* { dg-additional-options "-fdump-tree-omplower" } */ /* { dg-additional-options -Wuninitialized } */ diff --git a/gcc/testsuite/c-c++-common/pr122188.c b/gcc/testsuite/c-c++-common/pr122188.c new file mode 100644 index 000000000000..8c3fa1c30e55 --- /dev/null +++ b/gcc/testsuite/c-c++-common/pr122188.c @@ -0,0 +1,15 @@ +/* PR c/122188 */ +/* { dg-do compile } */ +/* { dg-options "-O2" } */ + +int +foo (const unsigned x, int y) +{ + return __builtin_ctzg (x ? x : 4081577U, y); +} + +int +bar (const unsigned x, int y) +{ + return __builtin_clzg (x ? x : 4081577U, y); +} diff --git a/gcc/testsuite/c-c++-common/tls-attr-common.c b/gcc/testsuite/c-c++-common/tls-attr-common.c new file mode 100644 index 000000000000..55153bbbb8f5 --- /dev/null +++ b/gcc/testsuite/c-c++-common/tls-attr-common.c @@ -0,0 +1,20 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target pie } */ +/* { dg-require-effective-target tls } */ +/* { dg-options "-O2 -fdump-ipa-whole-program" } */ +/* Add -fPIE or -mno-direct-extern-access to disable direct access to + external symbol from executable. */ +/* { dg-additional-options "-fPIE" { target { ! { i?86-*-* x86_64-*-* } } } } */ +/* { dg-additional-options "-mno-direct-extern-access" { target { i?86-*-* x86_64-*-* } } } */ + +__attribute__((common)) +__thread int i; + +int * +foo (void) +{ + return &i; +} + +/* tls_model should be tls-initial-exec due to common attribute. */ +/* { dg-final { scan-ipa-dump "Varpool flags: tls-initial-exec" "whole-program" } } */ diff --git a/gcc/testsuite/c-c++-common/tls-attr-le-pic.c b/gcc/testsuite/c-c++-common/tls-attr-le-pic.c new file mode 100644 index 000000000000..c02df6919f1a --- /dev/null +++ b/gcc/testsuite/c-c++-common/tls-attr-le-pic.c @@ -0,0 +1,15 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target fpic } */ +/* { dg-require-effective-target tls } */ +/* { dg-options "-O2 -fpic -fdump-ipa-whole-program" } */ + +__attribute__ ((tls_model ("local-exec"))) __thread int i; + +int * +foo (void) +{ + return &i; +} + +/* tls_model should be local-exec due to tls_model attribute. */ +/* { dg-final { scan-ipa-dump "Varpool flags: tls-local-exec" "whole-program" } } */ diff --git a/gcc/testsuite/c-c++-common/tls-attr-le-pie.c b/gcc/testsuite/c-c++-common/tls-attr-le-pie.c new file mode 100644 index 000000000000..b8ef7840d791 --- /dev/null +++ b/gcc/testsuite/c-c++-common/tls-attr-le-pie.c @@ -0,0 +1,15 @@ +/* { dg-do compile { target { tls && pie } } } */ +/* { dg-options "-O2 -fPIE -fdump-ipa-whole-program" } */ + +extern const int afoo[3]; + +__thread const int *pfoo __attribute__ ((tls_model ("initial-exec"))) = afoo; + +const int ** +ppfoo (void) +{ + return &pfoo; +} + +/* tls_model should be local-exec due to -fPIE. */ +/* { dg-final { scan-ipa-dump "Varpool flags: initialized tls-local-exec" "whole-program" } } */ diff --git a/gcc/testsuite/c-c++-common/toplevel-asm-9.c b/gcc/testsuite/c-c++-common/toplevel-asm-9.c new file mode 100644 index 000000000000..a32187891aa1 --- /dev/null +++ b/gcc/testsuite/c-c++-common/toplevel-asm-9.c @@ -0,0 +1,12 @@ +/* PR middle-end/122133 */ +/* { dg-do compile } */ +/* { dg-options "-O0" } */ + +extern int v[42], w; +int x[42], y; +void foo (void); +void bar (void) {} + +asm ("# %cc[foo]: %cc[v]: %cc[w]: %cc[bar] %cc[x] %cc[y]" + :: [foo] ":" (foo), [v] ":" (v), [w] ":" (&w), + [bar] "-i" (bar), [x] "-s" (x), [y] "-s" (&y)); diff --git a/gcc/testsuite/c-c++-common/torture/asm-inline.c b/gcc/testsuite/c-c++-common/torture/asm-inline.c index dea89658be44..03cb434173ff 100644 --- a/gcc/testsuite/c-c++-common/torture/asm-inline.c +++ b/gcc/testsuite/c-c++-common/torture/asm-inline.c @@ -1,6 +1,7 @@ /* { dg-do compile } */ -/* -O0 does no inlining, and -O3 does it too aggressively for this test: */ -/* { dg-skip-if "" { *-*-* } { "-O0" "-O3" } { "" } } +/* -O0 does no inlining, and -O3 does it too aggressively for this test: + -Og does not inline either. */ +/* { dg-skip-if "" { *-*-* } { "-O0" "-O3" "-Og" } { "" } } /* The normal asm is not inlined: */ /* { dg-final { scan-assembler-times "w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w" 2 } } */ /* But the asm inline is inlined: */ diff --git a/gcc/testsuite/c-c++-common/ubsan/align-5.c b/gcc/testsuite/c-c++-common/ubsan/align-5.c index b94e167bb67b..484790134a66 100644 --- a/gcc/testsuite/c-c++-common/ubsan/align-5.c +++ b/gcc/testsuite/c-c++-common/ubsan/align-5.c @@ -1,8 +1,7 @@ /* { dg-do compile } */ /* { dg-options "-fno-sanitize=null -fsanitize=alignment -O2" } */ -/* Check that when optimizing if we know the alignment is right - and we are not doing -fsanitize=null instrumentation we don't - instrument the alignment check. */ +/* __builtin_assume_aligned should be instrumented too. UBSAN alignment + should not depend on it. */ __attribute__((noinline, noclone)) int foo (char *p) @@ -12,4 +11,4 @@ foo (char *p) return *q; } -/* { dg-final { scan-assembler-not "__ubsan_handle" } } */ +/* { dg-final { scan-assembler "__ubsan_handle" } } */ diff --git a/gcc/testsuite/c-c++-common/ubsan/align-5a.c b/gcc/testsuite/c-c++-common/ubsan/align-5a.c new file mode 100644 index 000000000000..d86e5377e033 --- /dev/null +++ b/gcc/testsuite/c-c++-common/ubsan/align-5a.c @@ -0,0 +1,18 @@ +/* { dg-do compile } */ +/* { dg-options "-fno-sanitize=null -fsanitize=alignment -O2" } */ +/* Check that when optimizing if we know the alignment is right + and we are not doing -fsanitize=null instrumentation we don't + instrument the alignment check. */ + +__attribute__((noinline, noclone)) int +foo (int *p) +{ + /* Align the pointer explictly. */ + __INTPTR_TYPE__ t = (__INTPTR_TYPE__)p; + t &= ~0xf; + p = (int*)t; + + return *p; +} + +/* { dg-final { scan-assembler-not "__ubsan_handle" } } */ diff --git a/gcc/testsuite/c-c++-common/ubsan/vla-1.c b/gcc/testsuite/c-c++-common/ubsan/vla-1.c index b29d904dea39..0073514a3fbb 100644 --- a/gcc/testsuite/c-c++-common/ubsan/vla-1.c +++ b/gcc/testsuite/c-c++-common/ubsan/vla-1.c @@ -1,5 +1,5 @@ /* { dg-do run } */ -/* { dg-options "-fsanitize=vla-bound -Wall -Wno-unused-variable -fno-stack-clash-protection" } */ +/* { dg-options "-fsanitize=vla-bound -Wall -Wno-unused-variable -fno-stack-clash-protection -ftrivial-auto-var-init=uninitialized" } */ typedef long int V; int x = -1; diff --git a/gcc/testsuite/c-c++-common/uninit-17.c b/gcc/testsuite/c-c++-common/uninit-17.c index b5495366c5bc..5dd49a9dab54 100644 --- a/gcc/testsuite/c-c++-common/uninit-17.c +++ b/gcc/testsuite/c-c++-common/uninit-17.c @@ -10,10 +10,10 @@ static void bar(int a, int *ptr) do { int b; - if (b < 40) { + if (b < 40) { /* { dg-warning "is used uninitialized" "" { target c++26 } } */ ptr[0] = b; } - b += 1; /* { dg-warning "is used uninitialized" } */ + b += 1; /* { dg-warning "is used uninitialized" "" { target { c || c++23_down } } } */ ptr++; } while (--a != 0); diff --git a/gcc/testsuite/g++.dg/abi/pr121801.C b/gcc/testsuite/g++.dg/abi/pr121801.C new file mode 100644 index 000000000000..cd35186d8881 --- /dev/null +++ b/gcc/testsuite/g++.dg/abi/pr121801.C @@ -0,0 +1,13 @@ +// PR c++/121801 +// { dg-do compile { target { c++20 && float16 } } } +// { dg-add-options float16 } + +template<_Float16 T> void f() {} + +void uses() { + f<_Float16(1)>(); + f<_Float16(2)>(); +} + +// { dg-final { scan-assembler "_Z1fILDF16_3c00EEvv" } } +// { dg-final { scan-assembler "_Z1fILDF16_4000EEvv" } } diff --git a/gcc/testsuite/g++.dg/analyzer/exception-value-2.C b/gcc/testsuite/g++.dg/analyzer/exception-value-2.C index ef9dd46b0768..5173f5381e83 100644 --- a/gcc/testsuite/g++.dg/analyzer/exception-value-2.C +++ b/gcc/testsuite/g++.dg/analyzer/exception-value-2.C @@ -1,3 +1,5 @@ +// { dg-skip-if "PR122044" { c++26 } { "*" } { "" } } + #include "../../gcc.dg/analyzer/analyzer-decls.h" struct foo {}; diff --git a/gcc/testsuite/g++.dg/analyzer/new-2.C b/gcc/testsuite/g++.dg/analyzer/new-2.C index 391d159a53ae..9337569e60bc 100644 --- a/gcc/testsuite/g++.dg/analyzer/new-2.C +++ b/gcc/testsuite/g++.dg/analyzer/new-2.C @@ -59,9 +59,9 @@ void test_nonthrowing () int z = *y + 2; /* { dg-warning "dereference of NULL 'y'" } */ /* { dg-bogus "use of uninitialized value '\\*y'" "" { target *-*-* } .-1 } */ - z = *x + 4; /* { dg-warning "dereference of possibly-NULL 'x'" } */ + z = *x + 4; /* { dg-warning "dereference of NULL 'x'" } */ /* { dg-warning "use of uninitialized value '\\*x'" "" { target *-*-* } .-1 } */ - z = arr[0] + 4; /* { dg-warning "dereference of possibly-NULL 'arr'" } */ + z = arr[0] + 4; /* { dg-warning "dereference of NULL 'arr'" } */ /* { dg-warning "use of uninitialized value '\\*arr'" "" { target *-*-* } .-1 } */ delete y; diff --git a/gcc/testsuite/g++.dg/analyzer/noexcept-new.C b/gcc/testsuite/g++.dg/analyzer/noexcept-new.C index f4bb4956d26d..11225431b57d 100644 --- a/gcc/testsuite/g++.dg/analyzer/noexcept-new.C +++ b/gcc/testsuite/g++.dg/analyzer/noexcept-new.C @@ -11,15 +11,15 @@ struct A void test_throwing () { - int* x = new int; + int* x = new int; /* { dg-warning "dereference of possibly-NULL" } */ int* y = new int(); /* { dg-warning "dereference of possibly-NULL" } */ - int* arr = new int[10]; + int* arr = new int[10]; /* { dg-warning "dereference of possibly-NULL" } */ A *a = new A(); /* { dg-warning "dereference of possibly-NULL" } */ int z = *y + 2; - z = *x + 4; /* { dg-warning "dereference of possibly-NULL 'x'" } */ + z = *x + 4; /* { dg-warning "use of uninitialized value '\\*x'" "" { target *-*-* } .-1 } */ - z = arr[0] + 4; /* { dg-warning "dereference of possibly-NULL 'arr'" } */ + z = arr[0] + 4; /* { dg-warning "use of uninitialized value '\\*arr'" "" { target *-*-* } .-1 } */ a->y = a->x + 3; @@ -37,9 +37,9 @@ void test_nonthrowing () int z = *y + 2; /* { dg-warning "dereference of NULL 'y'" } */ /* { dg-bogus "use of uninitialized value '\\*y'" "" { target *-*-* } .-1 } */ - z = *x + 4; /* { dg-warning "dereference of possibly-NULL 'x'" } */ + z = *x + 4; /* { dg-warning "dereference of NULL 'x'" } */ /* { dg-warning "use of uninitialized value '\\*x'" "" { target *-*-* } .-1 } */ - z = arr[0] + 4; /* { dg-warning "dereference of possibly-NULL 'arr'" } */ + z = arr[0] + 4; /* { dg-warning "dereference of NULL 'arr'" } */ /* { dg-warning "use of uninitialized value '\\*arr'" "" { target *-*-* } .-1 } */ delete y; diff --git a/gcc/testsuite/g++.dg/analyzer/pr97116.C b/gcc/testsuite/g++.dg/analyzer/pr97116.C index 1c404c2ceb23..06ee8623f43a 100644 --- a/gcc/testsuite/g++.dg/analyzer/pr97116.C +++ b/gcc/testsuite/g++.dg/analyzer/pr97116.C @@ -3,7 +3,7 @@ struct foo { - foo (int i) : m_i (i) {} // { dg-message "argument 'this' of 'foo::foo\\(int\\)' must be non-null" "note" } + foo (int i) : m_i (i) {} int get () const { return m_i; } // { dg-message "argument 'this' of '\[^\n\]*' must be non-null" "note" } @@ -15,8 +15,7 @@ struct foo void test_1 (void) { - foo *p = new(NULL) foo (42); // { dg-warning "non-null expected" "warning" } - // { dg-message "argument 'this'( \\(\[^\n\]*\\))? NULL where non-null expected" "final event" { target *-*-* } .-1 } + foo *p = new(NULL) foo (42); // { dg-warning "dereference of NULL" "warning" } } int test_2 (void) diff --git a/gcc/testsuite/g++.dg/analyzer/unique_ptr-1.C b/gcc/testsuite/g++.dg/analyzer/std-unique_ptr-1.C similarity index 100% rename from gcc/testsuite/g++.dg/analyzer/unique_ptr-1.C rename to gcc/testsuite/g++.dg/analyzer/std-unique_ptr-1.C diff --git a/gcc/testsuite/g++.dg/analyzer/unique_ptr-2.C b/gcc/testsuite/g++.dg/analyzer/std-unique_ptr-2.C similarity index 100% rename from gcc/testsuite/g++.dg/analyzer/unique_ptr-2.C rename to gcc/testsuite/g++.dg/analyzer/std-unique_ptr-2.C diff --git a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-template18.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-template18.C new file mode 100644 index 000000000000..e5e6e6a875b9 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-template18.C @@ -0,0 +1,11 @@ +// PR c++/122127 +// { dg-do compile { target c++11 } } + +template struct resize; +template using resize_t = resize<_Np>; +template struct basic_mask { + void _M_chunk() { + constexpr int __rem = 1; + [&] { resize_t<__rem>(); }(); + } +}; diff --git a/gcc/testsuite/g++.dg/cpp1y/lambda-generic-this6.C b/gcc/testsuite/g++.dg/cpp1y/lambda-generic-this6.C new file mode 100644 index 000000000000..8bbff1d9fd25 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp1y/lambda-generic-this6.C @@ -0,0 +1,8 @@ +// PR c++/122048 +// { dg-do compile { target c++14 } } + +class X { + void f(); + int i; +}; +void X::f() {[&](auto) {sizeof i;}(1);} diff --git a/gcc/testsuite/g++.dg/cpp1y/vla-initlist1.C b/gcc/testsuite/g++.dg/cpp1y/vla-initlist1.C index ba485df65fe9..ce35c905452e 100644 --- a/gcc/testsuite/g++.dg/cpp1y/vla-initlist1.C +++ b/gcc/testsuite/g++.dg/cpp1y/vla-initlist1.C @@ -1,5 +1,4 @@ // { dg-do run { target c++11 } } -// { dg-skip-if "power overwrites two slots of array i" { "power*-*-*" } } // { dg-options "-Wno-vla" } #include @@ -7,7 +6,7 @@ struct A { int i; - A(std::initializer_list) { } + A(std::initializer_list) : i{43} { } A(int i): i{i} { } ~A() {} }; @@ -18,7 +17,7 @@ int main(int argc, char **argv) { int i[x] = { 42, 42, 42, 42 }; } { A a[x] = { argc }; - if (a[1].i != 42) + if (a[1].i != 43) __builtin_abort (); } } diff --git a/gcc/testsuite/g++.dg/cpp23/explicit-obj-lambda19.C b/gcc/testsuite/g++.dg/cpp23/explicit-obj-lambda19.C new file mode 100644 index 000000000000..bbf295cddf88 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp23/explicit-obj-lambda19.C @@ -0,0 +1,15 @@ +// PR c++/121854 +// { dg-do compile { target c++23 } } + +struct S +{ + static void static_func(){} + + void func() + { + auto lambda = [](this auto) + { + static_func(); + }; + } +}; diff --git a/gcc/testsuite/g++.dg/cpp23/static-operator-call8.C b/gcc/testsuite/g++.dg/cpp23/static-operator-call8.C new file mode 100644 index 000000000000..46aa6b42ce86 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp23/static-operator-call8.C @@ -0,0 +1,6 @@ +// PR c++/119048 +// { dg-do compile { target c++23 } } + +int main() { + [] {}, [](...) static {}; +} diff --git a/gcc/testsuite/g++.dg/cpp26/attr-indeterminate1.C b/gcc/testsuite/g++.dg/cpp26/attr-indeterminate1.C new file mode 100644 index 000000000000..58f6dc5865fe --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp26/attr-indeterminate1.C @@ -0,0 +1,154 @@ +// C++ 26 P2795R5 - Erroneous behaviour for uninitialized reads +// { dg-do compile { target c++11 } } + +int arr[2]; +struct S { int a, b; }; +S arr2[2]; + +void +foo ([[indeterminate]] int n, int n2 [[indeterminate]], int n3 [[indeterminate]] [2]) +{ + [[indeterminate]] int x1, x11, x12, x13; + int x14, x15 [[indeterminate]]; + [[indeterminate ("foobar")]] int x2; // { dg-error "'indeterminate' attribute does not take any arguments" } + // { dg-error "expected primary-expression before 'int'" "" { target *-*-* } .-1 } + [[indeterminate (0)]] int x3; // { dg-error "'indeterminate' attribute does not take any arguments" } + // { dg-error "expected primary-expression before 'int'" "" { target *-*-* } .-1 } + [[indeterminate ("foo", "bar", "baz")]] int x4;// { dg-error "'indeterminate' attribute does not take any arguments" } + // { dg-error "expected primary-expression before 'int'" "" { target *-*-* } .-1 } + [[indeterminate (0, 1, 2)]] int x5; // { dg-error "'indeterminate' attribute does not take any arguments" } + // { dg-error "expected primary-expression before 'int'" "" { target *-*-* } .-1 } + + auto a = [] [[indeterminate]] () {}; // { dg-error "'indeterminate' on declaration other than parameter or automatic variable" } + auto b = [] constexpr [[indeterminate]] {}; // { dg-warning "'indeterminate' attribute does not apply to types" } + // { dg-error "parameter declaration before lambda declaration specifiers only optional with" "" { target c++20_down } .-1 } + // { dg-error "'constexpr' lambda only available with" "" { target c++14_down } .-2 } + auto c = [] noexcept [[indeterminate]] {}; // { dg-warning "'indeterminate' attribute does not apply to types" } + // { dg-error "parameter declaration before lambda exception specification only optional with" "" { target c++20_down } .-1 } + auto d = [] () [[indeterminate]] {}; // { dg-warning "'indeterminate' attribute does not apply to types" } + auto e = new int [n] [[indeterminate]]; // { dg-warning "attributes ignored on outermost array type in new expression" } + auto e2 = new int [n] [[indeterminate]] [42]; // { dg-warning "attributes ignored on outermost array type in new expression" } + auto f = new int [n][42] [[indeterminate]]; // { dg-warning "'indeterminate' attribute does not apply to types" } + [[indeterminate]]; // { dg-warning "attributes at the beginning of statement are ignored" } + [[indeterminate]] {} // { dg-warning "attributes at the beginning of statement are ignored" } + [[indeterminate]] if (true) {} // { dg-warning "attributes at the beginning of statement are ignored" } + [[indeterminate]] while (false) {} // { dg-warning "attributes at the beginning of statement are ignored" } + [[indeterminate]] goto lab; // { dg-warning "attributes at the beginning of statement are ignored" } + [[indeterminate]] lab:; // { dg-error "'indeterminate' on declaration other than parameter or automatic variable" } + [[indeterminate]] try {} catch (int) {} // { dg-warning "attributes at the beginning of statement are ignored" } + if ([[indeterminate]] int x = 0) {} + switch (n) + { + [[indeterminate]] case 1: // { dg-error "'indeterminate' on declaration other than parameter or automatic variable" } + [[indeterminate]] break; // { dg-warning "attributes at the beginning of statement are ignored" } + [[indeterminate]] default: // { dg-error "'indeterminate' on declaration other than parameter or automatic variable" } + break; + } + for ([[indeterminate]] auto a : arr) {} + for ([[indeterminate]] auto [a, b] : arr2) {} // { dg-error "structured bindings only available with" "" { target c++14_down } } + [[indeterminate]] asm (""); // { dg-warning "attributes ignored on 'asm' declaration" } + try {} catch ([[indeterminate]] int x) {} + try {} catch ([[indeterminate]] int) {} + try {} catch (int [[indeterminate]] x) {} // { dg-warning "attribute ignored" } + try {} catch (int [[indeterminate]]) {} // { dg-warning "attribute ignored" } + try {} catch (int x [[indeterminate]]) {} +} + +[[indeterminate]] int bar (); // { dg-error "'indeterminate' on declaration other than parameter or automatic variable" } +using foobar [[indeterminate]] = int; // { dg-error "'indeterminate' on declaration other than parameter or automatic variable" } +[[indeterminate]] int a; // { dg-error "'indeterminate' on declaration other than parameter or automatic variable" } +[[indeterminate]] auto [b, c] = arr; // { dg-error "'indeterminate' on declaration other than parameter or automatic variable" } + // { dg-error "structured bindings only available with" "" { target c++14_down } .-1 } +[[indeterminate]]; // { dg-warning "attribute ignored" } +inline [[indeterminate]] void baz () {} // { dg-warning "attribute ignored" } + // { dg-error "standard attributes in middle of decl-specifiers" "" { target *-*-* } .-1 } +constexpr [[indeterminate]] int qux () { return 0; } // { dg-warning "attribute ignored" } + // { dg-error "standard attributes in middle of decl-specifiers" "" { target *-*-* } .-1 } +int [[indeterminate]] d; // { dg-warning "attribute ignored" } +int const [[indeterminate]] e = 1; // { dg-warning "attribute ignored" } +struct A {} [[indeterminate]]; // { dg-warning "attribute ignored in declaration of 'struct A'" } +struct A [[indeterminate]]; // { dg-warning "attribute ignored" } +struct A [[indeterminate]] a1; // { dg-warning "attribute ignored" } +A [[indeterminate]] a2; // { dg-warning "attribute ignored" } +enum B { B0 } [[indeterminate]]; // { dg-warning "attribute ignored in declaration of 'enum B'" } +enum B [[indeterminate]]; // { dg-warning "attribute ignored" } +enum B [[indeterminate]] b1; // { dg-warning "attribute ignored" } +B [[indeterminate]] b2; // { dg-warning "attribute ignored" } +struct [[indeterminate]] C {}; // { dg-warning "'indeterminate' attribute does not apply to types" } +int f [[indeterminate]]; // { dg-error "'indeterminate' on declaration other than parameter or automatic variable" } +int g[2] [[indeterminate]]; // { dg-warning "'indeterminate' attribute does not apply to types" } +int g2 [[indeterminate]] [2]; // { dg-error "'indeterminate' on declaration other than parameter or automatic variable" } +int corge () [[indeterminate]]; // { dg-warning "'indeterminate' attribute does not apply to types" } +int *[[indeterminate]] h; // { dg-warning "'indeterminate' attribute does not apply to types" } +int & [[indeterminate]] i = f; // { dg-warning "'indeterminate' attribute does not apply to types" } +int && [[indeterminate]] j = 0; // { dg-warning "'indeterminate' attribute does not apply to types" } +int S::* [[indeterminate]] k; // { dg-warning "'indeterminate' attribute does not apply to types" } +auto l = sizeof (int [2] [[indeterminate]]); // { dg-warning "'indeterminate' attribute does not apply to types" } +int freddy ([[indeterminate]] int a, + [[indeterminate]] int, + [[indeterminate]] int c = 0, + [[indeterminate]] int = 0); +void +corge ([[indeterminate]] int a, + [[indeterminate]] int, + [[indeterminate]] int c = 0, + [[indeterminate]] int = 0) +{ +} +[[indeterminate]] void +garply () // { dg-error "'indeterminate' on declaration other than parameter or automatic variable" } +{ +} +int grault (int [[indeterminate]] a, // { dg-warning "attribute ignored" } + int [[indeterminate]], // { dg-warning "attribute ignored" } + int [[indeterminate]] c = 0, // { dg-warning "attribute ignored" } + int [[indeterminate]] = 0); // { dg-warning "attribute ignored" } +void +waldo (int [[indeterminate]] a, // { dg-warning "attribute ignored" } + int [[indeterminate]], // { dg-warning "attribute ignored" } + int [[indeterminate]] c = 0, // { dg-warning "attribute ignored" } + int [[indeterminate]] = 0) // { dg-warning "attribute ignored" } +{ +} +int plugh (int a [[indeterminate]], + int b [[indeterminate]] = 0); +void +thud (int a [[indeterminate]], + int b [[indeterminate]] = 0) +{ +} +enum [[indeterminate]] D { D0 }; // { dg-warning "'indeterminate' attribute does not apply to types" } +enum class [[indeterminate]] E { E0 }; // { dg-warning "'indeterminate' attribute does not apply to types" } +enum F {}; +enum [[indeterminate]] F; // { dg-warning "'indeterminate' attribute does not apply to types" } +enum G { + G0 [[indeterminate]], // { dg-error "'indeterminate' on declaration other than parameter or automatic variable" } + G1 [[indeterminate]] = 2 // { dg-error "'indeterminate' on declaration other than parameter or automatic variable" } +}; +namespace [[indeterminate]] H { using H0 = int; }// { dg-warning "'indeterminate' attribute directive ignored" } +namespace [[indeterminate]] {} // { dg-warning "'indeterminate' attribute directive ignored" } +[[indeterminate]] using namespace H; // { dg-warning "'indeterminate' attribute directive ignored" } +struct [[indeterminate]] I // { dg-warning "'indeterminate' attribute does not apply to types" } +{ + [[indeterminate]]; // { dg-error "declaration does not declare anything" } + [[indeterminate]] int i; // { dg-error "'indeterminate' on declaration other than parameter or automatic variable" } + [[indeterminate]] int foo (); // { dg-error "'indeterminate' on declaration other than parameter or automatic variable" } + [[indeterminate]] int bar () { return 1; } // { dg-error "'indeterminate' on declaration other than parameter or automatic variable" } + [[indeterminate]] int : 0; // { dg-error "'indeterminate' on declaration other than parameter or automatic variable" } + [[indeterminate]] int i2 : 5; // { dg-error "'indeterminate' on declaration other than parameter or automatic variable" } + [[indeterminate]] static int i3; // { dg-error "'indeterminate' on declaration other than parameter or automatic variable" } + static int i4; +}; +[[indeterminate]] int I::i4 = 0; // { dg-error "'indeterminate' on declaration other than parameter or automatic variable" } +struct J : [[indeterminate]] C {}; // { dg-warning "attributes on base specifiers are ignored" } +#if __cpp_concepts >= 201907L +template +concept K [[indeterminate]] = requires { true; };// { dg-error "'indeterminate' on declaration other than parameter or automatic variable" "" { target c++20 } } +#endif +typedef int L [[indeterminate]]; // { dg-error "'indeterminate' on declaration other than parameter or automatic variable" } +template +struct M {}; +template <> +struct [[indeterminate]] M { int m; }; // { dg-warning "'indeterminate' attribute does not apply to types" } +typedef int N[2] [[indeterminate]]; // { dg-warning "'indeterminate' attribute does not apply to types" } +typedef int O [[indeterminate]] [2]; // { dg-error "'indeterminate' on declaration other than parameter or automatic variable" } diff --git a/gcc/testsuite/g++.dg/cpp26/attr-indeterminate2.C b/gcc/testsuite/g++.dg/cpp26/attr-indeterminate2.C new file mode 100644 index 000000000000..a2704c65b4cd --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp26/attr-indeterminate2.C @@ -0,0 +1,39 @@ +// C++ 26 P2795R5 - Erroneous behaviour for uninitialized reads +// { dg-do compile { target c++11 } } +// { dg-additional-options "-fdump-tree-gimple" } +// { dg-skip-if "" { c++26 } { "-ftrivial-auto-var-init=*" } { "" } } +// Expect .DEFERRED_INIT calls for the h, r and s variables (3) and +// temporaries for the second arguments to foo and baz calls (4). +// { dg-final { scan-tree-dump-times " = \\.DEFERRED_INIT \\\(" 7 "gimple" { target c++26 } } } + +struct S { S (); S (const S &); ~S (); int s; }; +void foo (S a [[indeterminate]], S b, S c [[indeterminate]] = S ()); +void foo (S d, S e, S f [[indeterminate]]); + +void +bar () +{ + S g [[indeterminate]], h; + foo (g, h, S ()); + foo (g, h); +} + +void +foo (S i [[indeterminate]], S j, S k) +{ +} + +void +baz ([[indeterminate]] S l, S m, [[indeterminate]] S n = S ()) +{ +} + +void baz (S o, S p, S q); + +void +qux () +{ + S r, s; + baz (r, s, s); + baz (r, s); +} diff --git a/gcc/testsuite/g++.dg/cpp26/attr-indeterminate3.C b/gcc/testsuite/g++.dg/cpp26/attr-indeterminate3.C new file mode 100644 index 000000000000..8f13390262fe --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp26/attr-indeterminate3.C @@ -0,0 +1,21 @@ +// C++ 26 P2795R5 - Erroneous behaviour for uninitialized reads +// { dg-do compile { target c++11 } } +// { dg-skip-if "" { c++26 } { "-ftrivial-auto-var-init=*" } { "" } } + +struct S { S (); S (const S &); ~S (); int s; }; +void foo (S u, S v [[indeterminate]], int); +void foo (S a, S b, S c = S ()); // { dg-message "earlier declaration" } +void foo (S d, S e, S f [[indeterminate]]); // { dg-error "'indeterminate' attribute not specified for parameter 'f' on the first declaration of its function" } + +void +foo (S i [[indeterminate]], S j, S k) // { dg-error "'indeterminate' attribute not specified for parameter 'i' on the first declaration of its function" } +{ +} + +void +bar (S l, S m, S n = S ()) // { dg-message "earlier declaration" } +{ +} + +void bar (S o [[indeterminate]], S p, [[indeterminate]]S q); // { dg-error "'indeterminate' attribute not specified for parameter 'o' on the first declaration of its function" } + // { dg-error "'indeterminate' attribute not specified for parameter 'q' on the first declaration of its function" "" { target *-*-* } .-1 } diff --git a/gcc/testsuite/g++.dg/cpp26/attr-indeterminate4.C b/gcc/testsuite/g++.dg/cpp26/attr-indeterminate4.C new file mode 100644 index 000000000000..946e01911dd2 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp26/attr-indeterminate4.C @@ -0,0 +1,36 @@ +// C++ 26 P2795R5 - Erroneous behaviour for uninitialized reads +// { dg-do compile { target c++11 } } +// { dg-additional-options "-ftrivial-auto-var-init=uninitialized -fdump-tree-gimple" } +// { dg-final { scan-tree-dump-not " = \\.DEFERRED_INIT \\\(" "gimple" } } + +struct S { S (); S (const S &); ~S (); int s; }; +void foo (S a [[indeterminate]], S b, S c [[indeterminate]] = S ()); +void foo (S d, S e, S f [[indeterminate]]); + +void +bar () +{ + S g [[indeterminate]], h; + foo (g, h, S ()); + foo (g, h); +} + +void +foo (S i [[indeterminate]], S j, S k) +{ +} + +void +baz ([[indeterminate]] S l, S m, [[indeterminate]] S n = S ()) +{ +} + +void baz (S o, S p, S q); + +void +qux () +{ + S r, s; + baz (r, s, s); + baz (r, s); +} diff --git a/gcc/testsuite/g++.dg/cpp26/constexpr-new4a.C b/gcc/testsuite/g++.dg/cpp26/constexpr-new4a.C new file mode 100644 index 000000000000..d621293f3a69 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp26/constexpr-new4a.C @@ -0,0 +1,21 @@ +// PR c++/121068 +// { dg-do compile { target c++26 } } + +constexpr void *operator new (__SIZE_TYPE__, void *p) { return p; } +constexpr void *operator new[] (__SIZE_TYPE__, void *p) { return p; } + +consteval int +foo(int n) +{ + using T = int; + union { T arr[3]; }; + new(arr) T[n]; // makes arr active + for (int i = 0; i < 3; ++i) + arr[i].~T(); + + new (arr + 2) T{10}; // A + + return 1; +}; + +constexpr int g = foo(3); diff --git a/gcc/testsuite/g++.dg/cpp26/constexpr-new6.C b/gcc/testsuite/g++.dg/cpp26/constexpr-new6.C new file mode 100644 index 000000000000..b27c80d71c05 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp26/constexpr-new6.C @@ -0,0 +1,17 @@ +// { dg-do compile { target c++26 } } + +#include + +union U { double d; int i; }; + +constexpr int f() +{ + U u; + new (&u.i) int; + return u.i; // { dg-error "uninitialized" } +} + +int main () +{ + constexpr int i = f(); // { dg-message "" } +} diff --git a/gcc/testsuite/g++.dg/cpp26/constexpr-new6a.C b/gcc/testsuite/g++.dg/cpp26/constexpr-new6a.C new file mode 100644 index 000000000000..2e3b101c8db3 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp26/constexpr-new6a.C @@ -0,0 +1,17 @@ +// { dg-do compile { target c++26 } } + +#include + +union U { double d; int i; }; + +constexpr int f() +{ + U u; + new (&u.i) int; + return u.d; // { dg-error "active" } +} + +int main () +{ + constexpr int i = f(); // { dg-message "" } +} diff --git a/gcc/testsuite/g++.dg/cpp26/erroneous1.C b/gcc/testsuite/g++.dg/cpp26/erroneous1.C new file mode 100644 index 000000000000..78769e65ca17 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp26/erroneous1.C @@ -0,0 +1,61 @@ +// C++ 26 P2795R5 - Erroneous behaviour for uninitialized reads +// { dg-do run { target c++26 } } +// { dg-skip-if "" { *-*-* } { "-ftrivial-auto-var-init=*" } { "" } } +// { dg-options "-O2 -Wuninitialized" } + +#define assert(x) if (!(x)) __builtin_abort () + +template +[[gnu::noipa]] T +baz (T &x) +{ + return x; +} + +[[gnu::noipa]] int +foo (bool b) +{ + unsigned char c; + unsigned char d = c; // no erroneous behavior, but d has an erroneous value + // { dg-warning "'c' is used uninitialized" "" { target *-*-* } .-1 } + + assert (c == d); // holds, both integral promotions have erroneous behavior + + unsigned char f = c; + unsigned char g = baz (f); + + assert (g == c); + + int e = d; // erroneous behavior + baz (e); + return b ? d : 0; // erroneous behavior if b is true +} + +[[gnu::noipa]] void +bar () +{ + int d1, d2; + + int e1 = d1; // erroneous behavior + int e2 = d1; // erroneous behavior + + assert (e1 == e2); // holds + assert (e1 == d1); // holds, erroneous behavior + assert (e2 == d1); // holds, erroneous behavior + + int f = d1; // { dg-warning "'d1' is used uninitialized" } + int g = baz (f); + assert (g == d1); + + __builtin_memcpy (&d2, &d1, sizeof (int)); // no erroneous behavior, but d2 has an erroneous value + assert (e1 == d2); // holds, erroneous behavior + assert (e2 == d2); // holds, erroneous behavior +} + +int +main () +{ + foo (false); + foo (true); + bar (); +} diff --git a/gcc/testsuite/g++.dg/cpp26/erroneous2.C b/gcc/testsuite/g++.dg/cpp26/erroneous2.C new file mode 100644 index 000000000000..e8c66f4d60a0 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp26/erroneous2.C @@ -0,0 +1,234 @@ +// C++ 26 P2795R5 - Erroneous behaviour for uninitialized reads +// { dg-do compile } +// { dg-skip-if "" { *-*-* } { "-ftrivial-auto-var-init=*" } { "" } } +// { dg-options "-O2 -fdump-tree-gimple" } +// All the s1..s24 variables and i1 need .DEFERRED_INIT call on their +// declarations. +// Plus, forward gotos to l1 & l2 labels need up to s1-s4 and s6-s9 vars to +// be .DEFERRED_INITed (and backward gotos up to that minus the first two). +// switch to case 15 skips over s12, switch to case 16/17 skip +// over s12 and s13 but the adjacent l3 label needs to also skip over s3-s4 +// and s6-s9 and s11. switch to case 18 skips over s12-s14 and switch to +// default in the same switch skips over s12-s15. +// goto l4; skips over s19 initialization. +// goto l5; skips over s20-s22 initialization. +// switch to case 32/33 skips over s23 but goto to adjacent l6 skips also +// over s20-s22. switch to default in that switch skips over s23-s24. +// { dg-final { scan-tree-dump-times " s1 = \.DEFERRED_INIT \\\(" 2 "gimple" { target c++26 } } } +// { dg-final { scan-tree-dump-times " s2 = \.DEFERRED_INIT \\\(" 2 "gimple" { target c++26 } } } +// { dg-final { scan-tree-dump-times " s3 = \.DEFERRED_INIT \\\(" 3 "gimple" { target c++26 } } } +// { dg-final { scan-tree-dump-times " s4 = \.DEFERRED_INIT \\\(" 3 "gimple" { target c++26 } } } +// { dg-final { scan-tree-dump-times " s5 = \.DEFERRED_INIT \\\(" 1 "gimple" { target c++26 } } } +// { dg-final { scan-tree-dump-times " s6 = \.DEFERRED_INIT \\\(" 3 "gimple" { target c++26 } } } +// { dg-final { scan-tree-dump-times " s7 = \.DEFERRED_INIT \\\(" 3 "gimple" { target c++26 } } } +// { dg-final { scan-tree-dump-times " s8 = \.DEFERRED_INIT \\\(" 3 "gimple" { target c++26 } } } +// { dg-final { scan-tree-dump-times " s9 = \.DEFERRED_INIT \\\(" 3 "gimple" { target c++26 } } } +// { dg-final { scan-tree-dump-times " s10 = \.DEFERRED_INIT \\\(" 1 "gimple" { target c++26 } } } +// { dg-final { scan-tree-dump-times " s11 = \.DEFERRED_INIT \\\(" 2 "gimple" { target c++26 } } } +// { dg-final { scan-tree-dump-times " s12 = \.DEFERRED_INIT \\\(" 5 "gimple" { target c++26 } } } +// { dg-final { scan-tree-dump-times " s13 = \.DEFERRED_INIT \\\(" 4 "gimple" { target c++26 } } } +// { dg-final { scan-tree-dump-times " s14 = \.DEFERRED_INIT \\\(" 3 "gimple" { target c++26 } } } +// { dg-final { scan-tree-dump-times " s15 = \.DEFERRED_INIT \\\(" 2 "gimple" { target c++26 } } } +// { dg-final { scan-tree-dump-times " s16 = \.DEFERRED_INIT \\\(" 1 "gimple" { target c++26 } } } +// { dg-final { scan-tree-dump-times " s17 = \.DEFERRED_INIT \\\(" 1 "gimple" { target c++26 } } } +// { dg-final { scan-tree-dump-times " s18 = \.DEFERRED_INIT \\\(" 1 "gimple" { target c++26 } } } +// { dg-final { scan-tree-dump-times " s19 = \.DEFERRED_INIT \\\(" 2 "gimple" { target c++26 } } } +// { dg-final { scan-tree-dump-times " s20 = \.DEFERRED_INIT \\\(" 3 "gimple" { target c++26 } } } +// { dg-final { scan-tree-dump-times " s21 = \.DEFERRED_INIT \\\(" 3 "gimple" { target c++26 } } } +// { dg-final { scan-tree-dump-times " s22 = \.DEFERRED_INIT \\\(" 3 "gimple" { target c++26 } } } +// { dg-final { scan-tree-dump-times " s23 = \.DEFERRED_INIT \\\(" 3 "gimple" { target c++26 } } } +// { dg-final { scan-tree-dump-times " s24 = \.DEFERRED_INIT \\\(" 2 "gimple" { target c++26 } } } +// { dg-final { scan-tree-dump-times " i1 = \.DEFERRED_INIT \\\(" 1 "gimple" { target c++26 } } } + +struct S { int a, b, c; }; + +int +foo (int x) +{ + int r = 0; + if (x == 1) + goto l1; + S s1; + if (x == 2) + goto l1; + S s2; + { + S s10; + if (x == 12) + goto l1; + s10.a = 1; + r += s10.a; + int i1; + if (x == 13) + goto l1; + i1 = 2; + r += i1; + } + if (x == 3) + goto l2; + if (x == 4) + goto l1; + { + S s3; + if (x == 5) + goto l2; + S s4; + if (x == 6) + goto l1; + { + S s5; + if (x == 7) + goto l1; + s5.a = 5; + r += s5.a; + } + S s6; + { + S s7; + S s8; + if (x == 8) + goto l1; + S s9; + if (x == 9) + goto l2; + if (x == 10) + goto l2; + if (x == 11) + goto l2; + l1: + l2: + s1.a = 1; + s2.b = 2; + s3.c = 3; + s4.a = 4; + s6.b = 6; + s7.c = 7; + s8.a = 8; + s9.b = 9; + r += s1.a + s2.b + s3.c; + r += s4.a + s6.b + s7.c; + r += s8.a + s9.b; + if (x == 14) + goto l3; + S s11; + switch (x) + { + S s12; + case 15: + S s13; + // FALLTHRU + l3: + case 16: + case 17: + S s14; + s11.a = 1; + s12.b = 2; + s13.c = 3; + s14.a = 4; + r += s11.a + s12.b + s13.c; + r += s14.a; + return r; + case 18: + S s15; + s11.a = 1; + s12.b = 2; + s13.c = 3; + s14.a = 4; + s15.b = 5; + r += s11.a + s12.b + s13.c; + r += s14.a + s15.b; + return r; + default: + if (x != 19 && x != 20) + break; + S s16; + s11.a = 1; + s12.b = 2; + s13.c = 3; + s14.a = 4; + s15.b = 5; + s16.c = 6; + r += s11.a + s12.b + s13.c; + r += s14.a + s15.b + s16.c; + return r; + } + if (x == 21) + goto l3; + } + S s17; + if (x == 22) + goto l3; + if (x == 23) + goto l1; + if (x == 24) + goto l2; + s17.a = 1; + r += s17.a; + } + S s18; + if (x == 25) + { + S s19; + s19.c = 2; + r += s19.c; + if (x == 29) + l4:; + goto l3; + } + if (x == 26) + goto l1; + if (x == 27) + goto l2; + s18.b = 1; + r += s18.b; + if (x == 28) + goto l4; + { + S s20; + { + S s21; + if (x == 29) + goto l1; + S s22; + if (x == 30) + goto l2; + l5: + s20.a = 1; + s21.b = 2; + s22.c = 3; + r += s20.a + s21.b + s22.c; + switch (x) + { + case 31: + S s23; + // FALLTHRU + l6: + case 32: + case 33: + S s24; + s23.a = 1; + s24.b = 2; + r += s23.a + s24.b; + return r; + default: + if (x >= 34 && x <= 35) + return r; + break; + } + if (x == 34) + goto l5; + if (x == 35) + goto l6; + return r; + } + if (x == 36) + goto l5; + if (x == 37) + goto l6; + } + if (x == 38) + goto l5; + if (x == 39) + goto l6; + return r; +} diff --git a/gcc/testsuite/g++.dg/cpp26/erroneous3.C b/gcc/testsuite/g++.dg/cpp26/erroneous3.C new file mode 100644 index 000000000000..d48a08ed7d18 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp26/erroneous3.C @@ -0,0 +1,158 @@ +// C++ 26 P2795R5 - Erroneous behaviour for uninitialized reads +// { dg-do compile { target c++11 } } +// { dg-options "-Wimplicit-fallthrough -Wswitch-unreachable" } +// Make sure -Wimplicit-fallthrough and -Wswitch-unreachable +// are consistent between -std=c++23 and -std=c++26 even when +// the latter instruments jumps across vacuous initializations. + +int i; + +void +foo (int x) +{ + switch (x) + { + case 1: + int j; + ++i; // { dg-warning "this statement may fall through" } + case 2: // { dg-message "here" } + int k; + ++i; + // FALLTHRU + case 3: + int l; + ++i; + [[fallthrough]]; + default: + int m; + ++i; + j = 42; + k = 42; + l = 42; + m = 42; + i += (j - k) + (l - m); + break; + } +} + +void +bar (int x) +{ + if (x == 6) + goto l1; + if (x == 7) + goto l2; + if (x == 8) + goto l3; + if (x == 9) + goto l4; + if (x == 10) + goto l5; + if (x == 11) + goto l6; + int j; + j = 5; + i += j; + switch (x) + { + case 1: + l1: + ++i; // { dg-warning "this statement may fall through" } + case 2: // { dg-message "here" } + l2: + ++i; + // FALLTHRU + case 3: + l3: + ++i; + [[fallthrough]]; + default: + l4: + ++i; + break; + case 4: + ++i; // { dg-warning "this statement may fall through" } + case 5: // { dg-message "here" } + l5:; + ++i; // { dg-warning "this statement may fall through" } + case 6: // { dg-message "here" } + ++i; + case 7: + l6:; + } +} + +void +baz (int x) +{ + switch (x) + { + case 1: + int j [[indeterminate]]; + ++i; // { dg-warning "this statement may fall through" } + case 2: // { dg-message "here" } + int k [[indeterminate]]; + ++i; + // FALLTHRU + case 3: + int l [[indeterminate]]; + ++i; + [[fallthrough]]; + default: + int m [[indeterminate]]; + ++i; + j = 42; + k = 42; + l = 42; + m = 42; + i += (j - k) + (l - m); + break; + } +} + +void +qux (int x) +{ + if (x == 6) + goto l1; + if (x == 7) + goto l2; + if (x == 8) + goto l3; + if (x == 9) + goto l4; + if (x == 10) + goto l5; + if (x == 11) + goto l6; + int j [[indeterminate]]; + j = 5; + i += j; + switch (x) + { + case 1: + l1: + ++i; // { dg-warning "this statement may fall through" } + case 2: // { dg-message "here" } + l2: + ++i; + // FALLTHRU + case 3: + l3: + ++i; + [[fallthrough]]; + default: + l4: + ++i; + break; + case 4: + ++i; // { dg-warning "this statement may fall through" } + case 5: // { dg-message "here" } + l5:; + ++i; // { dg-warning "this statement may fall through" } + case 6: // { dg-message "here" } + ++i; + case 7: + l6:; + } +} diff --git a/gcc/testsuite/g++.dg/cpp26/erroneous4.C b/gcc/testsuite/g++.dg/cpp26/erroneous4.C new file mode 100644 index 000000000000..0863480dc2ea --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp26/erroneous4.C @@ -0,0 +1,37 @@ +// C++ 26 P2795R5 - Erroneous behaviour for uninitialized reads +// { dg-do compile { target c++23 } } +// Make sure we don't reject this in C++26 because of +// .DEFERRED_INIT calls. + +constexpr int +foo (int x) +{ + if (x == 6) + goto l1; + if (x == 7) + goto l2; + int i; + switch (x) + { + int j; + case 1: + i = 6; + return i; + case 2: + i = 4; + l1: + i = 5; + return i; + case 3: + l2: + i = 7; + return i; + default: + return 42; + } +} + +static_assert (foo (1) == 6); +static_assert (foo (2) == 5); +static_assert (foo (3) == 7); +static_assert (foo (4) == 42); diff --git a/gcc/testsuite/g++.dg/cpp26/pack-indexing17.C b/gcc/testsuite/g++.dg/cpp26/pack-indexing17.C new file mode 100644 index 000000000000..8450ed64bd5f --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp26/pack-indexing17.C @@ -0,0 +1,11 @@ +// PR c++/121795 +// { dg-do compile { target c++26 } } + +template +struct A; + +template +struct A { }; + +A x; +A y; // { dg-error "incomplete" } diff --git a/gcc/testsuite/g++.dg/cpp26/pack-indexing17a.C b/gcc/testsuite/g++.dg/cpp26/pack-indexing17a.C new file mode 100644 index 000000000000..445f0d94ad20 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp26/pack-indexing17a.C @@ -0,0 +1,12 @@ +// PR c++/121795 +// A version of pack-indexing17.C using a nontype pack. +// { dg-do compile { target c++26 } } + +template +struct A; + +template +struct A { }; + +A<0, 0> x; +A<0, 1> y; // { dg-error "incomplete" } diff --git a/gcc/testsuite/g++.dg/cpp2a/concepts-conv4.C b/gcc/testsuite/g++.dg/cpp2a/concepts-conv4.C new file mode 100644 index 000000000000..107a1bbe4d92 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp2a/concepts-conv4.C @@ -0,0 +1,9 @@ +// PR c++/112632 +// { dg-do compile { target c++20 } } + +template concept A = N != 0; +template concept B = A; +template concept C = B; + +static_assert(A<256>); +static_assert(!C<256>); diff --git a/gcc/testsuite/g++.dg/cpp2a/concepts-placeholder15.C b/gcc/testsuite/g++.dg/cpp2a/concepts-placeholder15.C new file mode 100644 index 000000000000..e6571e9f18cd --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp2a/concepts-placeholder15.C @@ -0,0 +1,17 @@ +// PR c++/121981 +// { dg-do compile { target c++20 } } + +template +concept C = requires { V; }; + +template +concept D = C; + +template auto W> +struct A { }; + +template T> +struct B { }; + +A<0, 1> a; +B<0, int> b; diff --git a/gcc/testsuite/g++.dg/cpp2a/concepts-traits5.C b/gcc/testsuite/g++.dg/cpp2a/concepts-traits5.C new file mode 100644 index 000000000000..de99dcd13c89 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp2a/concepts-traits5.C @@ -0,0 +1,14 @@ +// PR c++/121859 +// { dg-do compile { target c++20 } } + +template +struct S { + template + static constexpr bool foo = sizeof(T) == sizeof(U); +}; + +template void bar(U x) requires S::foo {} + +int main() { + bar(double{}); // { dg-error "no matching function" } +} diff --git a/gcc/testsuite/g++.dg/cpp2a/constexpr-98122.C b/gcc/testsuite/g++.dg/cpp2a/constexpr-98122.C index b0c91d5ef97a..d835602296c8 100644 --- a/gcc/testsuite/g++.dg/cpp2a/constexpr-98122.C +++ b/gcc/testsuite/g++.dg/cpp2a/constexpr-98122.C @@ -9,7 +9,7 @@ bar () { V f { .b = 42 }; constexpr auto m = &V::a; - return (f.*m) == 42; // { dg-error "accessing 'V::a' member instead of initialized 'V::b' member in constant expression" } + return (f.*m) == 42; // { dg-error "accessing 'V::a' member instead of active 'V::b' member in constant expression" } } constexpr bool diff --git a/gcc/testsuite/g++.dg/cpp2a/constexpr-new28.C b/gcc/testsuite/g++.dg/cpp2a/constexpr-new28.C new file mode 100644 index 000000000000..7828f307bc3f --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp2a/constexpr-new28.C @@ -0,0 +1,45 @@ +// PR c++/115645 +// { dg-do compile { target c++20 } } + +using size_t = decltype(sizeof(0)); + +void* operator new(size_t, void* p) { return p; } +void* operator new[](size_t, void* p) { return p; } + +#define VERIFY(C) if (!(C)) throw + +namespace std { + template + constexpr T* construct_at(T* p) + { + if constexpr (__is_array(T)) + return ::new((void*)p) T[1](); + else + return ::new((void*)p) T(); + } +} + +struct S { + constexpr S () : s (0) {} + constexpr S (int x) : s (x) {} + constexpr bool operator== (int x) const { return s == x; } + int s; +}; + +constexpr void +test_array() +{ + S arr[1] { 99 }; + std::construct_at(&arr); + VERIFY( arr[0] == 0 ); + + union U { + long long x = -1; + S arr[4]; + } u; + + auto p = std::construct_at(&u.arr); + VERIFY( (*p)[0] == 0 ); +} + +static_assert( [] { test_array(); return true; }() ); diff --git a/gcc/testsuite/g++.dg/cpp2a/constexpr-new29.C b/gcc/testsuite/g++.dg/cpp2a/constexpr-new29.C new file mode 100644 index 000000000000..368018df0a10 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp2a/constexpr-new29.C @@ -0,0 +1,30 @@ +// P0784R7 +// { dg-do compile { target c++20 } } +// { dg-additional-options "-fdelete-null-pointer-checks" } + +struct S +{ + constexpr S () : s (0) { s++; } + constexpr S (int x) : s (x) { s += 2; } + constexpr ~S () { if (s != 35) asm (""); s = 5; } + int s; +}; + +constexpr bool +foo (int n) +{ + S *p = new S (7); + if (p->s != 9) return false; + p->s = 35; + delete p; + p = new S[n] { 11, 13, 15 }; + if (p[0].s != 13 || p[1].s != 15 || p[2].s != 17) return false; + p[0].s = 35; + p[2].s = 35; + p[1].s = 35; + delete[] p; + return true; +} + +constexpr bool a = foo (3); +static_assert (a); diff --git a/gcc/testsuite/g++.dg/ext/pr121678.C b/gcc/testsuite/g++.dg/ext/pr121678.C new file mode 100644 index 000000000000..e283ea1c8fc1 --- /dev/null +++ b/gcc/testsuite/g++.dg/ext/pr121678.C @@ -0,0 +1,7 @@ +// PR c++/121678 +// { dg-do compile { target c++11 } } +// { dg-options "" } + +static constexpr _Complex double a = 1.0; +static constexpr double *r = &__real__ a; +static constexpr double *i = &__imag__ a; diff --git a/gcc/testsuite/g++.dg/gomp/pr121977.C b/gcc/testsuite/g++.dg/gomp/pr121977.C new file mode 100644 index 000000000000..223ea3c0b236 --- /dev/null +++ b/gcc/testsuite/g++.dg/gomp/pr121977.C @@ -0,0 +1,17 @@ +// PR c++/121977 +// { dg-do compile } +// { dg-additional-options "-ftrivial-auto-var-init=zero" } + +struct T { T () {}; virtual ~T () {}; int t; }; +struct S : virtual public T { int a; void foo (); }; + +void +S::foo () +{ +#pragma omp parallel + { + #pragma omp taskloop firstprivate (a, t) lastprivate (t) + for (int i = 0; i < a; i++) + t++; + } +} diff --git a/gcc/testsuite/g++.dg/init/pr25811.C b/gcc/testsuite/g++.dg/init/pr25811.C index 4cda484e5af5..853eeae3feb6 100644 --- a/gcc/testsuite/g++.dg/init/pr25811.C +++ b/gcc/testsuite/g++.dg/init/pr25811.C @@ -187,7 +187,7 @@ void f11 () void f12 () { - new A3[1]; // { dg-error "deleted|uninitialized reference member" } + new A3[1]; // { dg-error "deleted|uninitialized reference" } } void f13 () diff --git a/gcc/testsuite/g++.dg/ipa/devirt-2.C b/gcc/testsuite/g++.dg/ipa/devirt-2.C index 1797db6c81c7..3fffe278ecea 100644 --- a/gcc/testsuite/g++.dg/ipa/devirt-2.C +++ b/gcc/testsuite/g++.dg/ipa/devirt-2.C @@ -1,7 +1,7 @@ /* Verify that simple virtual calls using this pointer are converted to direct calls by ipa-cp. */ /* { dg-do run } */ -/* { dg-options "-O3 -fno-early-inlining -fno-inline -fdump-ipa-cp" } */ +/* { dg-options "-O3 -fno-early-inlining -fno-inline -fdump-ipa-cp --param max-devirt-targets=1" } */ extern "C" void abort (void); diff --git a/gcc/testsuite/g++.dg/ipa/devirt-42.C b/gcc/testsuite/g++.dg/ipa/devirt-42.C index 152b9689dc4d..9ec39c1396fc 100644 --- a/gcc/testsuite/g++.dg/ipa/devirt-42.C +++ b/gcc/testsuite/g++.dg/ipa/devirt-42.C @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O3 -fno-ipa-cp -fdump-ipa-inline-details -fno-early-inlining -fdump-tree-optimized" } */ +/* { dg-options "-O3 -fno-ipa-cp -fdump-ipa-inline-details -fno-early-inlining -fdump-tree-optimized --param max-devirt-targets=1" } */ struct A { virtual int foo () {return 1;} int bar () {return foo();} diff --git a/gcc/testsuite/g++.dg/lookup/operator-8.C b/gcc/testsuite/g++.dg/lookup/operator-8.C index 32d432dd8432..4646a6f1303e 100644 --- a/gcc/testsuite/g++.dg/lookup/operator-8.C +++ b/gcc/testsuite/g++.dg/lookup/operator-8.C @@ -1,9 +1,6 @@ // Verify phase 1 lookup works properly for rewritten non-dependent conditional // operator expressions. -// This test currently fails due to build_min_non_dep_op_overload not knowing -// how to handle rewritten operator expressions; see the FIXME in build_new_op. - // { dg-do compile { target c++20 } } #include diff --git a/gcc/testsuite/g++.dg/lookup/operator-8a.C b/gcc/testsuite/g++.dg/lookup/operator-8a.C new file mode 100644 index 000000000000..48df7838520c --- /dev/null +++ b/gcc/testsuite/g++.dg/lookup/operator-8a.C @@ -0,0 +1,40 @@ +// PR c++/121779 +// A version of operator-8.C where the operator<=> return type is int. + +// { dg-do compile { target c++20 } } + +struct A { + bool operator==(int); + int operator<=>(int); +}; + +template +void f() { + A a; + (void)(a != 0); + (void)(0 != a); + (void)(a < 0); + (void)(0 < a); + (void)(a <= 0); + (void)(0 <= a); + (void)(a > 0); + (void)(0 > a); + (void)(a >= 0); + (void)(0 >= a); +} + +// These later-declared namespace-scope overloads shouldn't be considered +// when instantiating f. +bool operator!=(A, int) = delete; +bool operator<(A, int) = delete; +bool operator<=(A, int) = delete; +bool operator>(A, int) = delete; +bool operator>=(A, int) = delete; + +bool operator!=(int, A) = delete; +bool operator<(int, A) = delete; +bool operator<=(int, A) = delete; +bool operator>(int, A) = delete; +bool operator>=(int, A) = delete; + +template void f(); diff --git a/gcc/testsuite/g++.dg/lto/devirt-2_0.C b/gcc/testsuite/g++.dg/lto/devirt-2_0.C index 4e92bb6c2dd0..e8c30fc53593 100644 --- a/gcc/testsuite/g++.dg/lto/devirt-2_0.C +++ b/gcc/testsuite/g++.dg/lto/devirt-2_0.C @@ -1,4 +1,4 @@ /* { dg-lto-do run } */ -/* { dg-lto-options { "-O3 -fno-early-inlining -fno-inline -fdump-ipa-cp -fdump-tree-optimized -flto" } } */ +/* { dg-lto-options { "-O3 -fno-early-inlining -fno-inline -fdump-ipa-cp -fdump-tree-optimized -flto --param max-devirt-targets=1" } } */ #include "../ipa/devirt-2.C" /* { dg-final { scan-wpa-ipa-dump "Discovered a virtual call to a known target.*foo" "cp" } } */ diff --git a/gcc/testsuite/g++.dg/lto/pr101396_0.C b/gcc/testsuite/g++.dg/lto/pr101396_0.C index b7a2947a8809..f195b270b640 100644 --- a/gcc/testsuite/g++.dg/lto/pr101396_0.C +++ b/gcc/testsuite/g++.dg/lto/pr101396_0.C @@ -6,7 +6,9 @@ enum A : __UINT32_TYPE__ { // { dg-lto-warning "6: type 'A' violates the C\\+\\+ c }; -int main() +int g(enum A x) { - return (int) A::a; + return (int) x; } + +int main() {} diff --git a/gcc/testsuite/g++.dg/lto/pr101396_1.C b/gcc/testsuite/g++.dg/lto/pr101396_1.C index a6d032d694d9..782026e03ba5 100644 --- a/gcc/testsuite/g++.dg/lto/pr101396_1.C +++ b/gcc/testsuite/g++.dg/lto/pr101396_1.C @@ -1,4 +1,5 @@ enum A : __UINT64_TYPE__ { // { dg-lto-note "6: an enum with different value name is defined in another translation unit" } + // { dg-lto-note "6: a type with different precision is defined in another translation unit" "" { target *-*-* } .-1 } a, // { dg-lto-note "3: mismatching definition" } b, c diff --git a/gcc/testsuite/g++.dg/lto/pr121831_0.C b/gcc/testsuite/g++.dg/lto/pr121831_0.C new file mode 100644 index 000000000000..cd95133ae6bf --- /dev/null +++ b/gcc/testsuite/g++.dg/lto/pr121831_0.C @@ -0,0 +1,17 @@ +/* PR middle-end/121831 */ +/* { dg-lto-do run } */ +/* { dg-lto-options { { -O2 -flto } } } */ + +struct S { unsigned char s[256]; }; +S a; +extern const S b[1]; +struct T { unsigned char t[2048]; }; +T c; +extern const T d[1]; + +__attribute__((noipa)) void +foo () +{ + a = b[0]; + c = d[0]; +} diff --git a/gcc/testsuite/g++.dg/lto/pr121831_1.C b/gcc/testsuite/g++.dg/lto/pr121831_1.C new file mode 100644 index 000000000000..c5e75f646b78 --- /dev/null +++ b/gcc/testsuite/g++.dg/lto/pr121831_1.C @@ -0,0 +1,64 @@ +struct S { unsigned char s[256]; }; +extern S a; +struct T { unsigned char t[2048]; }; +extern T c; +extern const T d[1]; +extern void foo (); + +extern const S b[1] { + { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, + 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, + 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 0 } +}; +extern const T d[1] { + { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, + 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, + 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, + 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, + 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, + 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, + 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, + 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, + 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128 } +}; + +int +main () +{ + foo (); + for (int i = 0; i < 256; ++i) + if (a.s[i] != (i < 129 ? i + 1 : 0)) + __builtin_abort (); + for (int i = 0; i < 2048; ++i) + if (c.t[i] != (i < 512 ? (i & 127) + 1 : 0)) + __builtin_abort (); +} diff --git a/gcc/testsuite/g++.dg/lto/pr121935_0.C b/gcc/testsuite/g++.dg/lto/pr121935_0.C new file mode 100644 index 000000000000..a4519b1d3ad3 --- /dev/null +++ b/gcc/testsuite/g++.dg/lto/pr121935_0.C @@ -0,0 +1,13 @@ +// { dg-lto-do assemble } +// { dg-lto-options {{-flto -Wno-return-type}} } + +struct a { + static int b; +}; +template struct c { + struct d { + d e(unsigned, unsigned, bool, bool, bool, unsigned, a); + }; +}; +template <> +c<2>::d c<2>::d::e(unsigned, unsigned, bool, bool, bool, unsigned, const a) { } diff --git a/gcc/testsuite/g++.dg/modules/adl-10_a.C b/gcc/testsuite/g++.dg/modules/adl-10_a.C new file mode 100644 index 000000000000..eef4ef0f7245 --- /dev/null +++ b/gcc/testsuite/g++.dg/modules/adl-10_a.C @@ -0,0 +1,23 @@ +// PR c++/121893 +// { dg-additional-options "-fmodules -Wno-global-module" } +// { dg-module-cmi M } + +module; +namespace ns { + struct S {}; + + struct F { + template void operator()(T) {} + }; + inline constexpr F foo{}; +} + +export module M; + +namespace ns { + export using ns::S; + export using ns::foo; +} + +template void foo(T) {} +export template void go(T t) { foo(t); } diff --git a/gcc/testsuite/g++.dg/modules/adl-10_b.C b/gcc/testsuite/g++.dg/modules/adl-10_b.C new file mode 100644 index 000000000000..9be64a96f4e3 --- /dev/null +++ b/gcc/testsuite/g++.dg/modules/adl-10_b.C @@ -0,0 +1,7 @@ +// PR c++/121893 +// { dg-additional-options "-fmodules" } + +import M; +int main() { + ::go(ns::S{}); +} diff --git a/gcc/testsuite/g++.dg/modules/adl-6_c.C b/gcc/testsuite/g++.dg/modules/adl-6_c.C index 99b6c4c043e8..2c675f5241a8 100644 --- a/gcc/testsuite/g++.dg/modules/adl-6_c.C +++ b/gcc/testsuite/g++.dg/modules/adl-6_c.C @@ -1,5 +1,5 @@ // PR c++/117658 -// { dg-additional-options "-fmodules" } +// { dg-additional-options "-fmodules -Wno-error=external-tu-local" } import N; @@ -22,7 +22,8 @@ void test() { apply_err(x); // error: R::g has internal linkage and cannot be used outside N // { dg-message "here" "" { target *-*-* } .-1 } - // { dg-error "'g'" "" { target *-*-* } 0 } + // { dg-warning "lookup of 'R::g'" "" { target *-*-* } 0 } + // { dg-error "'g' was not declared" "" { target *-*-* } 0 } auto y = make_Y(); f(y); // OK, I::B::f and I::A::Y have matching innermost non-inline namespace diff --git a/gcc/testsuite/g++.dg/modules/circ-1_c.C b/gcc/testsuite/g++.dg/modules/circ-1_c.C index cea17d7a2e0a..8bb2ce16052f 100644 --- a/gcc/testsuite/g++.dg/modules/circ-1_c.C +++ b/gcc/testsuite/g++.dg/modules/circ-1_c.C @@ -4,6 +4,6 @@ export module Bob; // { dg-message "declared here" } import Kevin; // { dg-error "failed to read" "" { target *-*-* } 0 } -// { dg-error "cannot import module" "" { target *-*-* } 0 } +// { dg-error "depends on itself" "" { target *-*-* } 0 } // { dg-prune-output "fatal error:" } // { dg-prune-output "compilation terminated" } diff --git a/gcc/testsuite/g++.dg/modules/default-arg-4_b.C b/gcc/testsuite/g++.dg/modules/default-arg-4_b.C index 7ed003ff3982..5800ea208072 100644 --- a/gcc/testsuite/g++.dg/modules/default-arg-4_b.C +++ b/gcc/testsuite/g++.dg/modules/default-arg-4_b.C @@ -1,5 +1,6 @@ // C++20 P1766R1 - Mitigating minor modules maladies -// { dg-module-do run } +// FIXME mark as run once we no longer xfail below. +// { dg-module-do compile } // { dg-additional-options "-fmodules-ts" } import M; diff --git a/gcc/testsuite/g++.dg/modules/import-3_a.C b/gcc/testsuite/g++.dg/modules/import-3_a.C new file mode 100644 index 000000000000..8143da0eb86a --- /dev/null +++ b/gcc/testsuite/g++.dg/modules/import-3_a.C @@ -0,0 +1,6 @@ +// PR c++/99682 +// { dg-additional-options "-fmodules" } +// { dg-module-cmi foo } + +export module foo; +export void foo(); diff --git a/gcc/testsuite/g++.dg/modules/import-3_b.C b/gcc/testsuite/g++.dg/modules/import-3_b.C new file mode 100644 index 000000000000..3c6a5d703c36 --- /dev/null +++ b/gcc/testsuite/g++.dg/modules/import-3_b.C @@ -0,0 +1,8 @@ +// PR c++/99682 +// { dg-additional-options "-fmodules" } +// { dg-module-cmi bar } + +export module bar; +import foo; + +export void bar(); diff --git a/gcc/testsuite/g++.dg/modules/import-3_c.C b/gcc/testsuite/g++.dg/modules/import-3_c.C new file mode 100644 index 000000000000..2508d6136c7a --- /dev/null +++ b/gcc/testsuite/g++.dg/modules/import-3_c.C @@ -0,0 +1,11 @@ +// PR c++/99682 +// { dg-additional-options "-fmodules" } + +module foo; +import bar; // not an interface dependency +import bar; // double import is not an error either + +void test() { + foo(); + bar(); +} diff --git a/gcc/testsuite/g++.dg/modules/internal-14_c.C b/gcc/testsuite/g++.dg/modules/internal-14_c.C index 4f8e785ce872..50fb8e6f1a73 100644 --- a/gcc/testsuite/g++.dg/modules/internal-14_c.C +++ b/gcc/testsuite/g++.dg/modules/internal-14_c.C @@ -4,6 +4,6 @@ import m; int main() { - // { dg-error "instantiation exposes TU-local entity '(fun1|Dodgy)'" "" { target *-*-* } 0 } + // { dg-error "instantiation exposes TU-local entity '\[^']*(fun1|Dodgy)\[^']*'" "" { target *-*-* } 0 } fun2(123); // { dg-message "required from here" } } diff --git a/gcc/testsuite/g++.dg/modules/internal-15_a.C b/gcc/testsuite/g++.dg/modules/internal-15_a.C new file mode 100644 index 000000000000..03fec2a45415 --- /dev/null +++ b/gcc/testsuite/g++.dg/modules/internal-15_a.C @@ -0,0 +1,28 @@ +// { dg-additional-options "-fmodules -fdump-lang-module-graph -Wno-global-module" } +// { dg-module-cmi A } + +export module A; + +namespace N { + struct A {}; + void adl(A); + inline namespace inner { + static void adl(int); + } +} +namespace G { + struct B {}; + void adl(B); + namespace { + extern "C++" void adl(int); + } +} +void adl(double); + +template +inline void h(T t) { + adl(t); +} + +// { dg-final { scan-lang-dump {Binding on tu-local function_decl:'::N::inner::adl' found} module } } +// { dg-final { scan-lang-dump-not {'G::_GLOBAL__N_1::adl'} module } } diff --git a/gcc/testsuite/g++.dg/modules/internal-15_b.C b/gcc/testsuite/g++.dg/modules/internal-15_b.C new file mode 100644 index 000000000000..003d948b014c --- /dev/null +++ b/gcc/testsuite/g++.dg/modules/internal-15_b.C @@ -0,0 +1,13 @@ +// { dg-additional-options "-fmodules -pedantic-errors" } + +module A; + +void other() { + adl(N::A{}); // OK, lookup occurs from here + h(0); // OK, doesn't consider N::inner::adl + + h(N::A{}); // { dg-message "required from here" } + // { dg-error "TU-local" "" { target *-*-* } 0 } + + h(G::B{}); // OK, G::adl is not attached to A +} diff --git a/gcc/testsuite/g++.dg/modules/lambda-11.h b/gcc/testsuite/g++.dg/modules/lambda-11.h new file mode 100644 index 000000000000..e4a07f22cf05 --- /dev/null +++ b/gcc/testsuite/g++.dg/modules/lambda-11.h @@ -0,0 +1,6 @@ +// PR c++/122015 + +template auto declval(); +template void bind_front() { + [... __bound_args(_BindArgs{})] {}; +} diff --git a/gcc/testsuite/g++.dg/modules/lambda-11_a.H b/gcc/testsuite/g++.dg/modules/lambda-11_a.H new file mode 100644 index 000000000000..03d024260c34 --- /dev/null +++ b/gcc/testsuite/g++.dg/modules/lambda-11_a.H @@ -0,0 +1,6 @@ +// PR c++/122015 +// { dg-do compile { target c++20 } } +// { dg-additional-options "-fmodule-header" } +// { dg-module-cmi {} } + +#include "lambda-11.h" diff --git a/gcc/testsuite/g++.dg/modules/lambda-11_b.C b/gcc/testsuite/g++.dg/modules/lambda-11_b.C new file mode 100644 index 000000000000..c7a5f43ba42d --- /dev/null +++ b/gcc/testsuite/g++.dg/modules/lambda-11_b.C @@ -0,0 +1,6 @@ +// PR c++/122015 +// { dg-do compile { target c++20 } } +// { dg-additional-options "-fmodules -fno-module-lazy" } + +#include "lambda-11.h" +import "lambda-11_a.H"; diff --git a/gcc/testsuite/g++.dg/modules/lang-4_a.C b/gcc/testsuite/g++.dg/modules/lang-4_a.C new file mode 100644 index 000000000000..cef2aae00ed2 --- /dev/null +++ b/gcc/testsuite/g++.dg/modules/lang-4_a.C @@ -0,0 +1,22 @@ +// PR c++/122019 +// { dg-additional-options "-fmodules -Wno-global-module" } + +module; + +typedef int pthread_once_t; + +export module M; + +namespace ns { + using ::pthread_once_t; +} + +// note: non-function types don't have language linkage +extern "C++" enum E { c }; +extern "C" typedef int T; + +extern "C" int foo; +extern "C++" int bar; + +extern "C" int qux; +extern "C++" int zap; diff --git a/gcc/testsuite/g++.dg/modules/lang-4_b.C b/gcc/testsuite/g++.dg/modules/lang-4_b.C new file mode 100644 index 000000000000..2085ed152113 --- /dev/null +++ b/gcc/testsuite/g++.dg/modules/lang-4_b.C @@ -0,0 +1,26 @@ +// PR c++/122019 +// { dg-additional-options "-fmodules -Wno-global-module" } +// Language linkage for types, variables, and lazy-loading in extern contexts. + +module; + +extern "C" enum E { c }; +extern "C++" typedef int T; + +extern "C++" int foo; // { dg-message "existing" } +extern "C" int bar; // { dg-message "existing" } + +module M; + +extern "C" ns::pthread_once_t x; + +E e; +T t; + +extern "C" { int use1 = foo; } // { dg-message "during load" } +extern "C" { int use2 = bar; } // { dg-message "during load" } +// { dg-error "conflicting language linkage for imported declaration 'int foo'" "" { target *-*-* } 0 } +// { dg-error "conflicting language linkage for imported declaration 'int bar'" "" { target *-*-* } 0 } + +extern "C++" int qux; // { dg-error "conflicting declaration" } +extern "C" int zap; // { dg-error "conflicting declaration" } diff --git a/gcc/testsuite/g++.dg/modules/lto-4_a.C b/gcc/testsuite/g++.dg/modules/lto-4_a.C new file mode 100644 index 000000000000..16629158dc23 --- /dev/null +++ b/gcc/testsuite/g++.dg/modules/lto-4_a.C @@ -0,0 +1,10 @@ +// PR c++/121865 +// { dg-require-effective-target lto } +// { dg-additional-options "-fmodules -flto" } + +export module M; +export template struct S; +export template void foo(S) {} +template struct S { + friend void foo<>(S); +}; diff --git a/gcc/testsuite/g++.dg/modules/lto-4_b.C b/gcc/testsuite/g++.dg/modules/lto-4_b.C new file mode 100644 index 000000000000..0322855caf42 --- /dev/null +++ b/gcc/testsuite/g++.dg/modules/lto-4_b.C @@ -0,0 +1,8 @@ +// PR c++/121865 +// { dg-module-do link } +// { dg-require-effective-target lto } +// { dg-additional-options "-fmodules -flto" } + +import M; +template struct S; +int main() {} diff --git a/gcc/testsuite/g++.dg/modules/mod-decl-1.C b/gcc/testsuite/g++.dg/modules/mod-decl-1.C index ac7bb84699a1..45c540914a1e 100644 --- a/gcc/testsuite/g++.dg/modules/mod-decl-1.C +++ b/gcc/testsuite/g++.dg/modules/mod-decl-1.C @@ -1,10 +1,10 @@ // { dg-additional-options "-fmodules-ts" } module; -export module frist; +export module frist; // { dg-message "declared here" } // { dg-module-cmi "!frist" } -import frist; // { dg-error {cannot import module.* in its own purview} } +import frist; // { dg-error {module 'frist' depends on itself} } module foo.second; // { dg-error "only permitted as" } diff --git a/gcc/testsuite/g++.dg/modules/mod-decl-2_b.C b/gcc/testsuite/g++.dg/modules/mod-decl-2_b.C index a3ea9b5aa6ac..f01f0b06566c 100644 --- a/gcc/testsuite/g++.dg/modules/mod-decl-2_b.C +++ b/gcc/testsuite/g++.dg/modules/mod-decl-2_b.C @@ -1,7 +1,7 @@ // { dg-additional-options "-fmodules-ts" } module bob; -import bob; // { dg-error "cannot import module.* in its own purview" } +import bob; // { dg-error "import of 'bob' within its own" } // module linkage void Baz () diff --git a/gcc/testsuite/g++.dg/modules/mod-decl-9.C b/gcc/testsuite/g++.dg/modules/mod-decl-9.C new file mode 100644 index 000000000000..16e24a61c941 --- /dev/null +++ b/gcc/testsuite/g++.dg/modules/mod-decl-9.C @@ -0,0 +1,13 @@ +// PR c++/121808 +// { dg-additional-options "-fmodules" } +// { dg-module-cmi !foo } + +void test(); + +export module foo; // { dg-error "module-declaration" } + +import foo; +// { dg-error "failed to read compiled module" "" { target *-*-* } 0 } + +// { dg-prune-output "fatal error:" } +// { dg-prune-output "compilation terminated" } diff --git a/gcc/testsuite/g++.dg/modules/namespace-1_c.C b/gcc/testsuite/g++.dg/modules/namespace-1_c.C index 748ef5d79a4b..e4f81b6bea66 100644 --- a/gcc/testsuite/g++.dg/modules/namespace-1_c.C +++ b/gcc/testsuite/g++.dg/modules/namespace-1_c.C @@ -1,13 +1,7 @@ // { dg-additional-options "-fmodules-ts" } -// The indirect import of frob, with namespaces impl and ompl doesn't -// affect us. -static int impl; -import Frink; -static int ompl; +static int impl; // IF but no diagnostic required: impl@Frob not reachable from here + +import Frink; -void corge (int x) -{ - impl = x; - ompl = frab (x); -} +static int ompl; // { dg-error "different kind" } diff --git a/gcc/testsuite/g++.dg/modules/namespace-2_b.C b/gcc/testsuite/g++.dg/modules/namespace-2_b.C index 6ab5113c23ab..d71c630c75e6 100644 --- a/gcc/testsuite/g++.dg/modules/namespace-2_b.C +++ b/gcc/testsuite/g++.dg/modules/namespace-2_b.C @@ -2,16 +2,5 @@ import foo; -static int also_not_exported; // ok - -void X () -{ - implicit_export::bob (); -} - +static int also_not_exported; // { dg-error "different kind" } static int implicit_export; // { dg-error "different kind" } - -void Y () -{ - also_not_exported = 1; -} diff --git a/gcc/testsuite/g++.dg/modules/namespace-3_a.C b/gcc/testsuite/g++.dg/modules/namespace-3_a.C deleted file mode 100644 index 8e9508d7ff8c..000000000000 --- a/gcc/testsuite/g++.dg/modules/namespace-3_a.C +++ /dev/null @@ -1,21 +0,0 @@ -// Check namespace needed only by internal reference is not made visible -// { dg-additional-options "-fmodules-ts" } - -export module frob; -// { dg-module-cmi frob } - -namespace silent -{ - namespace inner - { - static int X () - { - return 1; - } - } -} - -export int f (int y) -{ - return y + silent::inner::X (); -} diff --git a/gcc/testsuite/g++.dg/modules/namespace-3_b.C b/gcc/testsuite/g++.dg/modules/namespace-3_b.C deleted file mode 100644 index f779ffe8c8f8..000000000000 --- a/gcc/testsuite/g++.dg/modules/namespace-3_b.C +++ /dev/null @@ -1,12 +0,0 @@ -// { dg-additional-options "-fmodules-ts" } - -import frob; - -int x = silent; // { dg-error "not declared" } - -static int silent; - -int user () -{ - return f (silent); -} diff --git a/gcc/testsuite/g++.dg/modules/part-10_a.C b/gcc/testsuite/g++.dg/modules/part-10_a.C new file mode 100644 index 000000000000..056da7185e4d --- /dev/null +++ b/gcc/testsuite/g++.dg/modules/part-10_a.C @@ -0,0 +1,5 @@ +// { dg-additional-options "-fmodules" } +// { dg-module-cmi foo } + +export module foo; +void foo(); diff --git a/gcc/testsuite/g++.dg/modules/part-10_b.C b/gcc/testsuite/g++.dg/modules/part-10_b.C new file mode 100644 index 000000000000..62865d1732d6 --- /dev/null +++ b/gcc/testsuite/g++.dg/modules/part-10_b.C @@ -0,0 +1,9 @@ +// { dg-additional-options "-fmodules" } +// { dg-module-cmi foo:part } + +module foo:part; +import foo; + +void part() { + foo(); +} diff --git a/gcc/testsuite/g++.dg/modules/part-10_c.C b/gcc/testsuite/g++.dg/modules/part-10_c.C new file mode 100644 index 000000000000..7f0a1ea1c7c6 --- /dev/null +++ b/gcc/testsuite/g++.dg/modules/part-10_c.C @@ -0,0 +1,10 @@ +// { dg-additional-options "-fmodules" } +// { dg-module-cmi foo:trans } + +module foo:trans; +import :part; + +void trans() { + foo(); + part(); +} diff --git a/gcc/testsuite/g++.dg/modules/part-10_d.C b/gcc/testsuite/g++.dg/modules/part-10_d.C new file mode 100644 index 000000000000..2c0c3ffa4e40 --- /dev/null +++ b/gcc/testsuite/g++.dg/modules/part-10_d.C @@ -0,0 +1,10 @@ +// { dg-additional-options "-fmodules" } + +module foo; +import :trans; + +void impl() { + foo(); + part(); + trans(); +} diff --git a/gcc/testsuite/g++.dg/modules/pr122053_a.C b/gcc/testsuite/g++.dg/modules/pr122053_a.C new file mode 100644 index 000000000000..2a8748c6be01 --- /dev/null +++ b/gcc/testsuite/g++.dg/modules/pr122053_a.C @@ -0,0 +1,10 @@ +// PR c++/122053 +// { dg-additional-options "-fmodules -Wno-global-module" } +// { dg-module-cmi M } + +module; +struct mytime { + long a, b; +}; +export module M; +export mytime foo(); diff --git a/gcc/testsuite/g++.dg/modules/pr122053_b.C b/gcc/testsuite/g++.dg/modules/pr122053_b.C new file mode 100644 index 000000000000..a7084b74040a --- /dev/null +++ b/gcc/testsuite/g++.dg/modules/pr122053_b.C @@ -0,0 +1,9 @@ +// PR c++/122053 +// { dg-additional-options "-fmodules" } +// Test we don't ICE when redefining a type coming from an import. + +import M; +struct mytime { // { dg-bogus "conflicting" "PR99000" { xfail *-*-* } } + long a, b; +}; +mytime m = foo(); // { dg-bogus "" "PR99000" { xfail *-*-* } } diff --git a/gcc/testsuite/g++.dg/modules/pr99174.H b/gcc/testsuite/g++.dg/modules/pr99174.H index 60d01c59c772..1ad20b71b7ab 100644 --- a/gcc/testsuite/g++.dg/modules/pr99174.H +++ b/gcc/testsuite/g++.dg/modules/pr99174.H @@ -1,3 +1,3 @@ // { dg-additional-options -fmodule-header } // { dg-module-cmi !{} } -import "pr99174.H"; // { dg-error "cannot import" } +import "pr99174.H"; // { dg-error "depends on itself" } diff --git a/gcc/testsuite/g++.dg/opt/auto-init-sra-pr121894.C b/gcc/testsuite/g++.dg/opt/auto-init-sra-pr121894.C new file mode 100644 index 000000000000..b1e5a59ffe7b --- /dev/null +++ b/gcc/testsuite/g++.dg/opt/auto-init-sra-pr121894.C @@ -0,0 +1,22 @@ +/* Verify that SRA total scalarization will not be confused by padding + and also not confused by auto initialization. */ +/* { dg-do compile } */ +/* { dg-options "-O1 -fdump-tree-esra -ftrivial-auto-var-init=pattern" } */ + +struct S { int a, b, c, d; }; +void bar (int, int, int, int); + +void +foo () +{ + S s; + s.a = 1; + s.c = 2; + s.d = 3; + s.a++; + s.c++; + s.d++; + bar (s.a, s.b, s.c, s.d); +} + +/* { dg-final { scan-tree-dump-times "DEFERRED_INIT" 4 "esra" } } */ diff --git a/gcc/testsuite/g++.dg/opt/pr122083-1.C b/gcc/testsuite/g++.dg/opt/pr122083-1.C new file mode 100644 index 000000000000..870089c8c12f --- /dev/null +++ b/gcc/testsuite/g++.dg/opt/pr122083-1.C @@ -0,0 +1,50 @@ +// { dg-do compile { target c++20 } } +// { dg-options "-O2 -Wall" } + +// Make sure we don't get a -Wnonnull warning here. + +#include + + template + constexpr auto + min_cmp(Tp x, Tp y) + { + struct Res { + Tp M_min; + decltype(x <=> y) M_cmp; + }; + auto c = x <=> y; + if (c > 0) + return Res{y, c}; + return Res{x, c}; + } + + + template + auto + lexicographical_compare_three_way(InputIter1 first1, + InputIter1 last1, + InputIter2 first2, + InputIter2 last2) + -> decltype(*first1 <=> *first2) + { + const auto [len, lencmp] = + min_cmp(last1 - first1, last2 - first2); + if (len) + { + const auto blen = len * sizeof(*first1); + const auto c + = __builtin_memcmp(&*first1, &*first2, blen) <=> 0; + if (c != 0) + return c; + } + return lencmp; + } + +auto +test03() +{ + unsigned char a[2] = { 1, 2 }; + unsigned char* p = nullptr; + return lexicographical_compare_three_way(p, p, a, a+2); +} diff --git a/gcc/testsuite/g++.dg/opt/store-merging-1.C b/gcc/testsuite/g++.dg/opt/store-merging-1.C index c7f294ec386c..8c4625283785 100644 --- a/gcc/testsuite/g++.dg/opt/store-merging-1.C +++ b/gcc/testsuite/g++.dg/opt/store-merging-1.C @@ -1,7 +1,7 @@ // PR target/92038 // { dg-do compile { target int32 } } // { dg-require-effective-target store_merge } -// { dg-options "-O2 -flifetime-dse=2 -fdump-tree-store-merging-details" } +// { dg-options "-O2 -flifetime-dse=2 -fdump-tree-store-merging-details -ftrivial-auto-var-init=uninitialized" } // { dg-final { scan-tree-dump "New sequence of \[12] stores to replace old one of 2 stores" "store-merging" } } struct S { S () : a (0), b (0) {} int a; char b; char c[3]; }; diff --git a/gcc/testsuite/g++.dg/parse/auto-struct-param.C b/gcc/testsuite/g++.dg/parse/auto-struct-param.C new file mode 100644 index 000000000000..78573c685036 --- /dev/null +++ b/gcc/testsuite/g++.dg/parse/auto-struct-param.C @@ -0,0 +1,4 @@ +// PR c++/122112 +// { dg-do compile { target c++20 } } + +void func(struct { auto x; }); // { dg-error "" } diff --git a/gcc/testsuite/g++.dg/tls/pr121889.C b/gcc/testsuite/g++.dg/tls/pr121889.C new file mode 100644 index 000000000000..881855adc83d --- /dev/null +++ b/gcc/testsuite/g++.dg/tls/pr121889.C @@ -0,0 +1,9 @@ +// { dg-do compile { target c++11 } } +// { dg-require-effective-target tls } +// { dg-options "-O2" } +// { dg-add-options tls } + +extern void pthread_key_create(); +static __typeof(pthread_key_create) __gthrw___pthread_key_create + __attribute__((__weakref__(""))); +template void zeta_imp_odd_integer() { thread_local int digits; } diff --git a/gcc/testsuite/g++.dg/torture/pr121870.C b/gcc/testsuite/g++.dg/torture/pr121870.C new file mode 100644 index 000000000000..8f4e7ab50696 --- /dev/null +++ b/gcc/testsuite/g++.dg/torture/pr121870.C @@ -0,0 +1,20 @@ +__attribute__((noreturn)) void f1(void) +{ + while(true) {} +} +static void (*fptr)(void) = f1; +struct s1 +{ + ~s1() { + fptr(); + } + void DoInner() { + fptr(); + } +}; + +void f() +{ + s1 xxx; + xxx.DoInner(); +} diff --git a/gcc/testsuite/g++.dg/uninit-pred-loop-1_b.C b/gcc/testsuite/g++.dg/uninit-pred-loop-1_b.C index b17b93601920..55b15b75cba5 100644 --- a/gcc/testsuite/g++.dg/uninit-pred-loop-1_b.C +++ b/gcc/testsuite/g++.dg/uninit-pred-loop-1_b.C @@ -13,7 +13,7 @@ int foo(int n) _err; }); - if (err == 0) return 17; + if (err == 0) return 17; /* { dg-warning "'_err' may be used uninitialized" "" { target c++26 } } */ } return 18; diff --git a/gcc/testsuite/g++.dg/vect/pr64410.cc b/gcc/testsuite/g++.dg/vect/pr64410.cc index 407b893da4b8..dd0256c2fe06 100644 --- a/gcc/testsuite/g++.dg/vect/pr64410.cc +++ b/gcc/testsuite/g++.dg/vect/pr64410.cc @@ -51,4 +51,4 @@ main(int argc, char** argv) return 0; } -// { dg-final { scan-tree-dump "vectorized 1 loops in function" "vect" } } +// { dg-final { scan-tree-dump "pr64410.cc:46:29: optimized: loop vectorized" "vect" } } diff --git a/gcc/testsuite/g++.dg/warn/Warray-bounds-12.C b/gcc/testsuite/g++.dg/warn/Warray-bounds-12.C index 07fa351a86ce..3a0b6093c82b 100644 --- a/gcc/testsuite/g++.dg/warn/Warray-bounds-12.C +++ b/gcc/testsuite/g++.dg/warn/Warray-bounds-12.C @@ -19,7 +19,7 @@ void sink (void*); void warn_new () { - T (int32_t, 0, 0); // { dg-warning "array subscript 0 is outside array bounds of 'int32_t \\\[0]'" } + T (int32_t, 0, 0); // { dg-warning "array subscript 0 is outside array bounds" } // { dg-message "object of size \\d allocated by '\[^\n\r]*operator new\[^\n\r]*'" "note" { target *-*-* } .-1 } T (int32_t, 1, 0); // { dg-warning "array subscript 'int32_t {aka (long )?int}\\\[0]' is partly outside array bounds of 'unsigned char \\\[1]'" } T (int32_t, 2, 0); // { dg-warning "array subscript 'int32_t {aka (long )?int}\\\[0]' is partly outside array bounds of 'unsigned char \\\[2]'" } @@ -45,7 +45,7 @@ void warn_array_new () #undef NEW #define NEW(n) new char [n] - T (int32_t, 0, 0); // { dg-warning "array subscript 0 is outside array bounds of 'int32_t \\\[0]'" } + T (int32_t, 0, 0); // { dg-warning "array subscript 0 is outside array bounds" } // { dg-message "object of size \\d allocated by '\[^\n\r]*operator new\[^\n\r]*'" "note" { target *-*-* } .-1 } T (int32_t, 1, 0); // { dg-warning "array subscript 'int32_t {aka (long )?int}\\\[0]' is partly outside array bounds of 'unsigned char \\\[1]'" } T (int32_t, 2, 0); // { dg-warning "array subscript 'int32_t {aka (long )?int}\\\[0]' is partly outside array bounds of 'unsigned char \\\[2]'" } @@ -53,7 +53,7 @@ void warn_array_new () T (int32_t, 4, 0); - T (int32_t, 0, 1); // { dg-warning "array subscript 1 is outside array bounds of 'int32_t \\\[0]'" } + T (int32_t, 0, 1); // { dg-warning "array subscript 1 is outside array bounds" } T (int32_t, 1, 1); // { dg-warning "array subscript 1 is outside array bounds " } T (int32_t, 2, 1); // { dg-warning "array subscript 1 is outside array bounds " } T (int32_t, 3, 1); // { dg-warning "array subscript 1 is outside array bounds " } diff --git a/gcc/testsuite/g++.dg/warn/Warray-bounds-13.C b/gcc/testsuite/g++.dg/warn/Warray-bounds-13.C index 449324a315d0..68b78e3fd9ea 100644 --- a/gcc/testsuite/g++.dg/warn/Warray-bounds-13.C +++ b/gcc/testsuite/g++.dg/warn/Warray-bounds-13.C @@ -66,7 +66,7 @@ void warn_nothrow_array_new () #undef NEW #define NEW(n) new (std::nothrow) char [n] - T (int32_t, 0, 0); // { dg-warning "array subscript 0 is outside array bounds of 'int32_t \\\[0]'" } + T (int32_t, 0, 0); // { dg-warning "array subscript 0 is outside array bounds" } // { dg-message "object of size \\d allocated by '\[^\n\r]*operator new\[^\n\r]*'" "note" { target *-*-* } .-1 } T (int32_t, 1, 0); // { dg-warning "array subscript 'int32_t {aka (long )?int}\\\[0]' is partly outside array bounds of 'unsigned char \\\[1]'" } T (int32_t, 2, 0); // { dg-warning "array subscript 'int32_t {aka (long )?int}\\\[0]' is partly outside array bounds of 'unsigned char \\\[2]'" } @@ -74,7 +74,7 @@ void warn_nothrow_array_new () T (int32_t, 4, 0); - T (int32_t, 0, 1); // { dg-warning "array subscript 1 is outside array bounds of 'int32_t \\\[0]'" } + T (int32_t, 0, 1); // { dg-warning "array subscript 1 is outside array bounds " } T (int32_t, 1, 1); // { dg-warning "array subscript 1 is outside array bounds " } T (int32_t, 2, 1); // { dg-warning "array subscript 1 is outside array bounds " } T (int32_t, 3, 1); // { dg-warning "array subscript 1 is outside array bounds " } diff --git a/gcc/testsuite/g++.dg/warn/Warray-bounds-20.C b/gcc/testsuite/g++.dg/warn/Warray-bounds-20.C index 5fc552930747..a57499dd07ae 100644 --- a/gcc/testsuite/g++.dg/warn/Warray-bounds-20.C +++ b/gcc/testsuite/g++.dg/warn/Warray-bounds-20.C @@ -26,7 +26,7 @@ struct D1: virtual B, virtual C /* The warning would ideally point to the assignment but instead points to the opening brace. */ D1 () - { // { dg-warning "\\\[-Warray-bounds" "brace" } + { ci = 0; // { dg-warning "\\\[-Warray-bounds" "assign" { xfail lp64 } } } }; @@ -35,11 +35,11 @@ void sink (void*); void warn_derived_ctor_access_new_decl () { - char a[sizeof (D1)]; // { dg-message "at offset 1 into object 'a' of size 40" "LP64 note" { target lp64} } - // { dg-message "at offset 1 into object 'a' of size 20" "LP64 note" { target ilp32} .-1 } + char a[sizeof (D1)]; // { dg-message "at offset 1 into object 'a' of size 40" "LP64 note" { target lp64 } } + // { dg-message "at offset 1 into object 'a' of size 20" "LP32 note" { target ilp32 } .-1 } char *p = a; ++p; - D1 *q = new (p) D1; + D1 *q = new (p) D1; // { dg-warning "\\\[-Warray-bounds" } sink (q); } @@ -47,24 +47,24 @@ void warn_derived_ctor_access_new_alloc () { char *p = (char*)operator new (sizeof (D1)); // { dg-message "at offset 1 into object of size \\d+ allocated by '\[^\n\r]*operator new\[^\n\r]*'" "note" } ++p; - D1 *q = new (p) D1; + D1 *q = new (p) D1; // { dg-warning "\\\[-Warray-bounds" } sink (q); } void warn_derived_ctor_access_new_array_decl () { - char b[sizeof (D1) * 2]; // { dg-message "at offset \\d+ into object 'b' of size 80" "LP64 note" { target { lp64 } xfail { lp64 } } } - // { dg-message "at offset \\d+ into object 'b' of size 40" "LP64 note" { target { ilp32 } xfail { ilp32 } } .-1 } + char b[sizeof (D1) * 2]; // { dg-message "at offset \\d+ into object 'b' of size 80" "LP64 note" { target { lp64 } } } + // { dg-message "at offset \\d+ into object 'b' of size 40" "LP64 note" { target { ilp32 } } .-1 } char *p = b; ++p; - D1 *q = new (p) D1[2]; + D1 *q = new (p) D1[2]; // { dg-message "partly outside array bounds" } sink (q); } void warn_derived_ctor_access_new_array_alloc () { - char *p = new char[sizeof (D1) * 2]; // { dg-message "at offset \\d+ into object of size \\d+ allocated by '\[^\n\r]*operator new\[^\n\r]*" "note" { xfail *-*-* } } + char *p = new char[sizeof (D1) * 2]; // { dg-message "at offset \\d+ into object of size \\d+ allocated by '\[^\n\r]*operator new\[^\n\r]*" "note" } ++p; - D1 *q = new (p) D1[2]; + D1 *q = new (p) D1[2]; // { dg-message "partly outside array bounds" } sink (q); } diff --git a/gcc/testsuite/g++.dg/warn/Warray-bounds-23.C b/gcc/testsuite/g++.dg/warn/Warray-bounds-23.C index c43a7dea3efc..7f6a6395ac74 100644 --- a/gcc/testsuite/g++.dg/warn/Warray-bounds-23.C +++ b/gcc/testsuite/g++.dg/warn/Warray-bounds-23.C @@ -34,7 +34,7 @@ void test_D1_b0i () { { D1 *p = (D1*)new char[sizeof (D1)]; - p->b0i = __LINE__; + p->b0i = __LINE__; // { dg-warning -Wuninitialized } sink (p); } @@ -110,7 +110,7 @@ void test_D2_b0i () { { D2 *p = (D2*)new char[sizeof (D2)]; - p->b0i = __LINE__; + p->b0i = __LINE__; // { dg-warning -Wuninitialized } sink (p); } @@ -201,7 +201,7 @@ void test_D3_b0i () { { D3 *p = (D3*)new char[sizeof (D3)]; - p->b0i = __LINE__; + p->b0i = __LINE__; // { dg-warning -Wuninitialized } sink (p); } diff --git a/gcc/testsuite/g++.dg/warn/Warray-bounds-24.C b/gcc/testsuite/g++.dg/warn/Warray-bounds-24.C index 071453a485d7..068195ab1b06 100644 --- a/gcc/testsuite/g++.dg/warn/Warray-bounds-24.C +++ b/gcc/testsuite/g++.dg/warn/Warray-bounds-24.C @@ -34,7 +34,7 @@ void test_D1_b0a () { { D1 *p = (D1*)new char[sizeof (D1)]; - *p->b0a = __LINE__; // { dg-warning "-Warray-bounds" "pr99630" { xfail *-*-* } } + *p->b0a = __LINE__; // { dg-warning "-Wuninitialized" } sink (p); } @@ -110,7 +110,7 @@ void test_D2_b0a () { { D2 *p = (D2*)new char[sizeof (D2)]; - *p->b0a = __LINE__; // { dg-warning "-Warray-bounds" "pr99630" { xfail *-*-* } } + *p->b0a = __LINE__; // { dg-warning "-Wuninitialized" } sink (p); } @@ -201,7 +201,7 @@ void test_D3_b0a () { { D3 *p = (D3*)new char[sizeof (D3)]; - *p->b0a = __LINE__; // { dg-warning "-Warray-bounds" "pr99630" { xfail *-*-* } } + *p->b0a = __LINE__; // { dg-warning "-Wuninitialized" } sink (p); } diff --git a/gcc/testsuite/g++.dg/warn/Wmismatched-new-delete-2.C b/gcc/testsuite/g++.dg/warn/Wmismatched-new-delete-2.C index d0d53b38b938..0f1877ee3e53 100644 --- a/gcc/testsuite/g++.dg/warn/Wmismatched-new-delete-2.C +++ b/gcc/testsuite/g++.dg/warn/Wmismatched-new-delete-2.C @@ -140,9 +140,8 @@ void warn_x1_array_mismatch () delete p; // { dg-warning "'static void X1::operator delete\\(void\\*\\)' called on pointer returned from a mismatched allocation function" } } { - // The following requires optimization (see warn_x1_array_mismatch()). X1 *p = new (std::nothrow) X1[3]; - delete p; // { dg-warning "'static void X1::operator delete\\(void\\*\\)' called on pointer returned from a mismatched allocation function" "pr?????" { xfail *-*-* } } + delete p; // { dg-warning "'static void X1::operator delete\\(void\\*\\)' called on pointer returned from a mismatched allocation function" } } } diff --git a/gcc/testsuite/g++.dg/warn/Wuninitialized-13.C b/gcc/testsuite/g++.dg/warn/Wuninitialized-13.C index b74a2fa98ecb..47a75454cff5 100644 --- a/gcc/testsuite/g++.dg/warn/Wuninitialized-13.C +++ b/gcc/testsuite/g++.dg/warn/Wuninitialized-13.C @@ -8,12 +8,12 @@ struct shared_count { shared_count () { } shared_count (shared_count &r) - : pi (r.pi) { } // { dg-warning "\\\[-Wuninitialized" } + : pi (r.pi) { } int pi; }; // There's another (redundant) -Wuninitialized on the line below. -struct shared_ptr { +struct shared_ptr { // { dg-warning "\\\[-Wuninitialized" } int ptr; shared_count refcount; }; diff --git a/gcc/testsuite/g++.target/aarch64/fmv-selection1.C b/gcc/testsuite/g++.target/aarch64/fmv-selection1.C new file mode 100644 index 000000000000..4ee54466c133 --- /dev/null +++ b/gcc/testsuite/g++.target/aarch64/fmv-selection1.C @@ -0,0 +1,40 @@ +/* { dg-do compile } */ +/* { dg-require-ifunc "" } */ +/* { dg-options "-O2 -march=armv8-a" } */ + +__attribute__((target_version("default"))) +__attribute__((optimize("O0"))) +int foo () +{ + return 1; +} + +__attribute__((target_version("rng"))) +__attribute__((optimize("O0"))) +int foo () +{ + return 2; +} + +__attribute__((target_version("flagm"))) +__attribute__((optimize("O0"))) +int foo () +{ + return 3; +} + +__attribute__((target_version("rng+flagm"))) +__attribute__((optimize("O0"))) +int foo () +{ + return 4; +} + +int bar() +{ + return foo (); +} + +/* Cannot optimize */ +/* { dg-final { scan-assembler-times "\n\tb\t_Z3foov\n" 1 } } */ + diff --git a/gcc/testsuite/g++.target/aarch64/fmv-selection2.C b/gcc/testsuite/g++.target/aarch64/fmv-selection2.C new file mode 100644 index 000000000000..f580dac4458a --- /dev/null +++ b/gcc/testsuite/g++.target/aarch64/fmv-selection2.C @@ -0,0 +1,40 @@ +/* { dg-do compile } */ +/* { dg-require-ifunc "" } */ +/* { dg-options "-O2 -march=armv8-a+rng+flagm" } */ + +__attribute__((target_version("default"))) +__attribute__((optimize("O0"))) +int foo () +{ + return 1; +} + +__attribute__((target_version("rng"))) +__attribute__((optimize("O0"))) +int foo () +{ + return 2; +} + +__attribute__((target_version("flagm"))) +__attribute__((optimize("O0"))) +int foo () +{ + return 3; +} + +__attribute__((target_version("rng+flagm"))) +__attribute__((optimize("O0"))) +int foo () +{ + return 4; +} + +int bar() +{ + return foo (); +} + +/* Can optimize to highest priority function */ +/* { dg-final { scan-assembler-times "\n\tb\t_Z3foov\._MrngMflagm\n" 1 } } */ + diff --git a/gcc/testsuite/g++.target/aarch64/fmv-selection3.C b/gcc/testsuite/g++.target/aarch64/fmv-selection3.C new file mode 100644 index 000000000000..6b52fd4f644c --- /dev/null +++ b/gcc/testsuite/g++.target/aarch64/fmv-selection3.C @@ -0,0 +1,25 @@ +/* { dg-do compile } */ +/* { dg-require-ifunc "" } */ +/* { dg-options "-O2 -march=armv8-a" } */ + +__attribute__((target_version("default"))) +__attribute__((optimize("O0"))) +int foo () +{ return 1; } + +__attribute__((target_version("rng"))) +int foo (); +__attribute__((target_version("flagm"))) +int foo (); +__attribute__((target_version("rng+flagm"))) +int foo (); + +__attribute__((target_version("rng+flagm"))) +int bar() +{ + return foo (); +} + +/* Cannot optimize */ +/* { dg-final { scan-assembler-times "\n\tb\t_Z3foov\._MrngMflagm\n" 1 } } */ + diff --git a/gcc/testsuite/g++.target/aarch64/fmv-selection4.C b/gcc/testsuite/g++.target/aarch64/fmv-selection4.C new file mode 100644 index 000000000000..155145dcd885 --- /dev/null +++ b/gcc/testsuite/g++.target/aarch64/fmv-selection4.C @@ -0,0 +1,30 @@ +/* { dg-do compile } */ +/* { dg-require-ifunc "" } */ +/* { dg-options "-O2 -march=armv8-a" } */ + +__attribute__((target_version("default"))) +__attribute__((optimize("O0"))) +int foo () +{ return 1; } + +__attribute__((target_version("rng"))) +int foo (); +__attribute__((target_version("flagm"))) +int foo (); +__attribute__((target_version("rng+flagm"))) +int foo (); + +__attribute__((target_version("default"))) +int bar() +{ + return foo (); +} + +__attribute__((target_version("rng"))) +int bar(); + +__attribute__((target_version("flagm"))) +int bar(); + +/* { dg-final { scan-assembler-times "\n\tb\t_Z3foov\.default\n" 1 } } */ + diff --git a/gcc/testsuite/g++.target/aarch64/fmv-selection5.C b/gcc/testsuite/g++.target/aarch64/fmv-selection5.C new file mode 100644 index 000000000000..4d6d38e3754a --- /dev/null +++ b/gcc/testsuite/g++.target/aarch64/fmv-selection5.C @@ -0,0 +1,28 @@ +/* { dg-do compile } */ +/* { dg-require-ifunc "" } */ +/* { dg-options "-O2 -march=armv8-a" } */ + +__attribute__((target_version("default"))) +__attribute__((optimize("O0"))) +int foo () +{ return 1; } + +__attribute__((target_version("rng"))) +int foo (); +__attribute__((target_version("flagm"))) +int foo (); +__attribute__((target_version("rng+flagm"))) +int foo (); + +__attribute__((target_version("default"))) +int bar() +{ + return foo (); +} + +__attribute__((target_version("flagm"))) +int bar(); + +/* { dg-final { scan-assembler-times "\n\tb\t_Z3foov\.default\n" 0 } } */ +/* { dg-final { scan-assembler-times "\n\tb\t_Z3foov\n" 1 } } */ + diff --git a/gcc/testsuite/g++.target/aarch64/fmv-selection6.C b/gcc/testsuite/g++.target/aarch64/fmv-selection6.C new file mode 100644 index 000000000000..db384e16c099 --- /dev/null +++ b/gcc/testsuite/g++.target/aarch64/fmv-selection6.C @@ -0,0 +1,27 @@ +/* { dg-do compile } */ +/* { dg-require-ifunc "" } */ +/* { dg-options "-O2 -march=armv8-a+rng" } */ + +__attribute__((target_version("default"))) +__attribute__((optimize("O0"))) +int foo () +{ return 1; } + +__attribute__((target_version("rng"))) +int foo (); +__attribute__((target_version("flagm"))) +int foo (); +__attribute__((target_version("rng+flagm"))) +int foo (); + +__attribute__((target_version("default"))) +int bar() +{ + return foo (); +} + +__attribute__((target_version("flagm"))) +int bar(); + +/* { dg-final { scan-assembler-times "\n\tb\t_Z3foov\._Mrng\n" 1 } } */ + diff --git a/gcc/testsuite/g++.target/aarch64/fmv-selection7.C b/gcc/testsuite/g++.target/aarch64/fmv-selection7.C new file mode 100644 index 000000000000..41e7462ebb10 --- /dev/null +++ b/gcc/testsuite/g++.target/aarch64/fmv-selection7.C @@ -0,0 +1,65 @@ +/* { dg-do compile } */ +/* { dg-require-ifunc "" } */ +/* { dg-options "-O2 -march=armv8-a" } */ + +[[gnu::optimize("O0")]] +[[gnu::target_version ("default")]] +int bar () { + return 1; +} + +[[gnu::optimize("O0")]] +[[gnu::target ("+sve2")]] +[[gnu::target_version ("sve")]] +int bar (); + +[[gnu::target ("+sve")]] +int foo () { + return bar(); +} + +/* { dg-final { scan-assembler-times "\n\tb\t_Z3barv\._Msve\n" 1 } } */ + +[[gnu::target_version ("default")]] +int bar2 () { + return 1; +} + +[[gnu::target_version ("sve2")]] +int bar2 (); + +[[gnu::target_version ("default")]] +int foo2 (); + +[[gnu::target_version ("sve")]] +[[gnu::target ("+sve2")]] +int foo2 () { + return bar2(); +} + +/* { dg-final { scan-assembler-times "\n\tb\t_Z4bar2v\._Msve2\n" 1 } } */ + +[[gnu::target_version ("default")]] +int bar3 () { + return 1; +} + +[[gnu::target_version ("sve")]] +int bar3 (); + +[[gnu::target ("+rng")]] +[[gnu::target_version ("sve2")]] +int bar3 (); + +[[gnu::target_version ("default")]] +int foo3 (); + +[[gnu::target_version ("sve")]] +int foo3 () { + return bar3 (); +} + +[[gnu::target_version ("sve2+rng")]] +int foo3 (); + +/* { dg-final { scan-assembler-times "\n\tb\t_Z4bar3v\n" 1 } } */ diff --git a/gcc/testsuite/g++.target/aarch64/mv-1.C b/gcc/testsuite/g++.target/aarch64/mv-1.C index b10037f1b9ba..5798e41d1559 100644 --- a/gcc/testsuite/g++.target/aarch64/mv-1.C +++ b/gcc/testsuite/g++.target/aarch64/mv-1.C @@ -1,7 +1,6 @@ /* { dg-do compile } */ /* { dg-require-ifunc "" } */ /* { dg-options "-O0" } */ -/* { dg-additional-options "-Wno-experimental-fmv-target" } */ __attribute__((target_version("default"))) int foo () @@ -37,3 +36,7 @@ int bar() /* { dg-final { scan-assembler-times "\n_Z3foov\._Mrng:\n" 1 } } */ /* { dg-final { scan-assembler-times "\n_Z3foov\._MrngMflagm:\n" 1 } } */ /* { dg-final { scan-assembler-times "\n_Z3foov\._Mflagm:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n_Z3foov\.resolver:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\tbl\t_Z3foov\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\t\.type\t_Z3foov, %gnu_indirect_function\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\t\.set\t_Z3foov,_Z3foov\.resolver\n" 1 } } */ diff --git a/gcc/testsuite/g++.target/aarch64/mv-and-mvc-error1.C b/gcc/testsuite/g++.target/aarch64/mv-and-mvc-error1.C new file mode 100644 index 000000000000..3ae19e9cdebe --- /dev/null +++ b/gcc/testsuite/g++.target/aarch64/mv-and-mvc-error1.C @@ -0,0 +1,9 @@ +/* { dg-do compile } */ +/* { dg-require-ifunc "" } */ +/* { dg-options "-O0" } */ + +__attribute__ ((target_version ("dotprod"))) int +foo () { return 3; } /* { dg-message "previous declaration of .int foo \\\[\\\[target_version\\(.dotprod.\\)\\\]\\\] \\(\\)." } */ + +__attribute__ ((target_clones ("dotprod", "sve"))) int +foo () { return 1; } /* { dg-error ".int foo \\\[\\\[target_clones\\(.dotprod., .sve.\\)\\\]\\\] \\(\\). conflicts for version .dotprod." } */ diff --git a/gcc/testsuite/g++.target/aarch64/mv-and-mvc-error2.C b/gcc/testsuite/g++.target/aarch64/mv-and-mvc-error2.C new file mode 100644 index 000000000000..a1481f0c435f --- /dev/null +++ b/gcc/testsuite/g++.target/aarch64/mv-and-mvc-error2.C @@ -0,0 +1,9 @@ +/* { dg-do compile } */ +/* { dg-require-ifunc "" } */ +/* { dg-options "-O0" } */ + +__attribute__ ((target_version ("default"))) int +foo () { return 1; } /* { dg-message "old declaration .int foo \\\[\\\[target_version\\(.default.\\)\\\]\\\] \\(\\)." } */ + +__attribute__ ((target_clones ("dotprod", "sve"))) float +foo () { return 3; } /* { dg-error "ambiguating new declaration of .float foo \\\[\\\[target_clones\\(.dotprod., .sve.\\)\\\]\\\] \\(\\)." } */ diff --git a/gcc/testsuite/g++.target/aarch64/mv-and-mvc-error3.C b/gcc/testsuite/g++.target/aarch64/mv-and-mvc-error3.C new file mode 100644 index 000000000000..c42575e1a05e --- /dev/null +++ b/gcc/testsuite/g++.target/aarch64/mv-and-mvc-error3.C @@ -0,0 +1,8 @@ +/* { dg-do compile } */ +/* { dg-require-ifunc "" } */ +/* { dg-options "-O0" } */ + +float foo () { return 1; } /* { dg-message ".float foo\\(\\). previously defined here" } */ + +__attribute__ ((target_clones ("default", "dotprod", "sve"))) float +foo () { return 3; } /* { dg-error "redefinition of .float foo \\\[\\\[target_clones\\(.default., .dotprod., .sve.\\)\\\]\\\] \\(\\)." } */ diff --git a/gcc/testsuite/g++.target/aarch64/mv-and-mvc1.C b/gcc/testsuite/g++.target/aarch64/mv-and-mvc1.C new file mode 100644 index 000000000000..47a1138051de --- /dev/null +++ b/gcc/testsuite/g++.target/aarch64/mv-and-mvc1.C @@ -0,0 +1,37 @@ +/* { dg-do compile } */ +/* { dg-require-ifunc "" } */ +/* { dg-options "-O0" } */ + +__attribute__((target_version("default"))) +int foo () +{ + return 0; +} + +__attribute__((target_clones("dotprod", "sve+sve2"))) +int foo () +{ + return 1; +} + +__attribute__((target_clones("sve2+sme", "sve2+sme2"))) +int foo () +{ + return 2; +} + +int bar() +{ + return foo (); +} + + +/* { dg-final { scan-assembler-times "\n_Z3foov\.default:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n_Z3foov\._Mdotprod:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n_Z3foov\._MsveMsve2:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n_Z3foov\._Msve2Msme:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n_Z3foov\._Msve2Msme2:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n_Z3foov\.resolver:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\tbl\t_Z3foov\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\t\.type\t_Z3foov, %gnu_indirect_function\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\t\.set\t_Z3foov,_Z3foov\.resolver\n" 1 } } */ diff --git a/gcc/testsuite/g++.target/aarch64/mv-and-mvc2.C b/gcc/testsuite/g++.target/aarch64/mv-and-mvc2.C new file mode 100644 index 000000000000..70e539734565 --- /dev/null +++ b/gcc/testsuite/g++.target/aarch64/mv-and-mvc2.C @@ -0,0 +1,28 @@ +/* { dg-do compile } */ +/* { dg-require-ifunc "" } */ +/* { dg-options "-O0" } */ + +__attribute__((target_version("default"))) +int foo (); + +__attribute__((target_clones("dotprod", "sve+sve2"))) +int foo () +{ + return 1; +} + +__attribute__((target_clones("sve2+sme", "sve2+sme2"))) +int foo () +{ + return 2; +} + +/* { dg-final { scan-assembler-times "\n_Z3foov\.default:\n" 0 } } */ +/* { dg-final { scan-assembler-times "\n_Z3foov:\n" 0 } } */ +/* { dg-final { scan-assembler-times "\n_Z3foov\._Mdotprod:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n_Z3foov\._MsveMsve2:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n_Z3foov\._Msve2Msme:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n_Z3foov\._Msve2Msme2:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n_Z3foov\.resolver:\n" 0 } } */ +/* { dg-final { scan-assembler-times "\n\t\.type\t_Z3foov, %gnu_indirect_function\n" 0 } } */ +/* { dg-final { scan-assembler-times "\n\t\.set\t_Z3foov,_Z3foov\.resolver\n" 0 } } */ diff --git a/gcc/testsuite/g++.target/aarch64/mv-and-mvc3.C b/gcc/testsuite/g++.target/aarch64/mv-and-mvc3.C new file mode 100644 index 000000000000..4fd69c839889 --- /dev/null +++ b/gcc/testsuite/g++.target/aarch64/mv-and-mvc3.C @@ -0,0 +1,40 @@ +/* { dg-do compile } */ +/* { dg-require-ifunc "" } */ +/* { dg-options "-O0" } */ + +__attribute__((target_clones("dotprod", "sve+sve2"))) +int foo (); + +__attribute__((target_version("default"))) +int foo () +{ + return 0; +} + +__attribute__((target_clones("sve2+sme", "sve2+sme2"))) +int foo () +{ + return 2; +} + +int bar() +{ + return foo (); +} + + +/* { dg-final { scan-assembler-times "\n_Z3foov\.default:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n_Z3foov\._Mdotprod:\n" 0 } } */ +/* { dg-final { scan-assembler-times "\n_Z3foov\._MsveMsve2:\n" 0 } } */ +/* { dg-final { scan-assembler-times "\n_Z3foov\._Msve2Msme:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n_Z3foov\._Msve2Msme2:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n_Z3foov\.resolver:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\tbl\t_Z3foov\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\t\.type\t_Z3foov, %gnu_indirect_function\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\t\.set\t_Z3foov,_Z3foov\.resolver\n" 1 } } */ +// { dg-final { scan-assembler-times "\n\tadrp\tx\[0-9\]+, _Z3foov\.default\n" 1 } } +/* { dg-final { scan-assembler-times "\n\tadrp\tx\[0-9\]+, _Z3foov\._Mdotprod\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\tadrp\tx\[0-9\]+, _Z3foov\._MsveMsve2\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\tadrp\tx\[0-9\]+, _Z3foov\._Msve2Msme\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\tadrp\tx\[0-9\]+, _Z3foov\._Msve2Msme2\n" 1 } } */ + diff --git a/gcc/testsuite/g++.target/aarch64/mv-and-mvc4.C b/gcc/testsuite/g++.target/aarch64/mv-and-mvc4.C new file mode 100644 index 000000000000..1d8a6f5d69f9 --- /dev/null +++ b/gcc/testsuite/g++.target/aarch64/mv-and-mvc4.C @@ -0,0 +1,37 @@ +/* { dg-do compile } */ +/* { dg-require-ifunc "" } */ +/* { dg-options "-O0" } */ + +__attribute__((target_version("dotprod"))) +int foo () +{ + return 0; +} + +__attribute__((target_clones("default", "sve+sve2"))) +int foo () +{ + return 1; +} + +__attribute__((target_clones("sve2+sme", "sve2+sme2"))) +int foo () +{ + return 2; +} + +int bar() +{ + return foo (); +} + + +/* { dg-final { scan-assembler-times "\n_Z3foov\.default:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n_Z3foov\._Mdotprod:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n_Z3foov\._MsveMsve2:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n_Z3foov\._Msve2Msme:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n_Z3foov\._Msve2Msme2:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n_Z3foov\.resolver:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\tbl\t_Z3foov\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\t\.type\t_Z3foov, %gnu_indirect_function\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\t\.set\t_Z3foov,_Z3foov\.resolver\n" 1 } } */ diff --git a/gcc/testsuite/g++.target/aarch64/mv-error1.C b/gcc/testsuite/g++.target/aarch64/mv-error1.C new file mode 100644 index 000000000000..98ef4a7aa878 --- /dev/null +++ b/gcc/testsuite/g++.target/aarch64/mv-error1.C @@ -0,0 +1,18 @@ +/* { dg-do compile } */ +/* { dg-require-ifunc "" } */ +/* { dg-options "-O0" } */ + +__attribute__ ((target_version ("default"))) int +foo (); + +__attribute__ ((target_version ("default"))) int +foo () { return 1; } /* { dg-message "old declaration .int foo \\\[\\\[target_version\\(.default.\\)\\\]\\\] \\(\\)." } */ + +__attribute__ ((target_version ("dotprod"))) float +foo () { return 3; } /* { dg-error "ambiguating new declaration of .float foo \\\[\\\[target_version\\(.dotprod.\\)\\\]\\\] \\(\\)." } */ + +__attribute__ ((target_version ("sve"))) int +foo2 () { return 1; } /* { dg-message "old declaration" } */ + +__attribute__ ((target_version ("dotprod"))) float +foo2 () { return 3; } /* { dg-error "ambiguating new declaration of" } */ diff --git a/gcc/testsuite/g++.target/aarch64/mv-error2.C b/gcc/testsuite/g++.target/aarch64/mv-error2.C new file mode 100644 index 000000000000..bc252ecb375b --- /dev/null +++ b/gcc/testsuite/g++.target/aarch64/mv-error2.C @@ -0,0 +1,9 @@ +/* { dg-do compile } */ +/* { dg-require-ifunc "" } */ +/* { dg-options "-O0" } */ + +__attribute__ ((target_version ("dotprod"))) float +foo () { return 3; } /* { dg-message ".float foo \\\[\\\[target_version\\(.dotprod.\\)\\\]\\\] \\(\\). previously defined here" } */ + +__attribute__ ((target_version ("dotprod"))) float +foo () { return 3; } /* { dg-error "redefinition of .float foo \\\[\\\[target_version\\(.dotprod.\\)\\\]\\\] \\(\\)." } */ diff --git a/gcc/testsuite/g++.target/aarch64/mv-error3.C b/gcc/testsuite/g++.target/aarch64/mv-error3.C new file mode 100644 index 000000000000..cc762179c4d2 --- /dev/null +++ b/gcc/testsuite/g++.target/aarch64/mv-error3.C @@ -0,0 +1,12 @@ +/* { dg-do compile } */ +/* { dg-require-ifunc "" } */ +/* { dg-options "-O0" } */ + +__attribute__ ((target_version ("dotprod"))) float +foo () { return 3; } + +__attribute__ ((target_version ("default"))) float +foo () { return 3; } /* { dg-message "previously defined here" } */ + +__attribute__ ((target_version ("default"))) float +foo () { return 3; } /* { dg-error "redefinition of" } */ diff --git a/gcc/testsuite/g++.target/aarch64/mv-error4.C b/gcc/testsuite/g++.target/aarch64/mv-error4.C new file mode 100644 index 000000000000..44d3195590d2 --- /dev/null +++ b/gcc/testsuite/g++.target/aarch64/mv-error4.C @@ -0,0 +1,9 @@ +/* { dg-do compile } */ +/* { dg-require-ifunc "" } */ +/* { dg-options "-O0" } */ + +__attribute__ ((target_version ("test"))) float +foo () { return 3; } /* { dg-error "invalid feature modifier .test. of value .test. in .target_version. attribute" } */ + +__attribute__ ((target_version ("sve+test"))) float +foo2 () { return 3; } /* { dg-error "invalid feature modifier .test. of value .sve.test. in .target_version. attribute" } */ diff --git a/gcc/testsuite/g++.target/aarch64/mv-error5.C b/gcc/testsuite/g++.target/aarch64/mv-error5.C new file mode 100644 index 000000000000..0475938fab3b --- /dev/null +++ b/gcc/testsuite/g++.target/aarch64/mv-error5.C @@ -0,0 +1,8 @@ +/* { dg-do compile } */ +/* { dg-require-ifunc "" } */ +/* { dg-options "-O0" } */ + +__attribute__ ((target_version ("sve+sve2"))) int +foo(); + +int bar () { return foo (); } /* { dg-error "no default version in scope" } */ diff --git a/gcc/testsuite/g++.target/aarch64/mv-error6.C b/gcc/testsuite/g++.target/aarch64/mv-error6.C new file mode 100644 index 000000000000..ed5980b0ec07 --- /dev/null +++ b/gcc/testsuite/g++.target/aarch64/mv-error6.C @@ -0,0 +1,20 @@ +/* { dg-do compile } */ +/* { dg-require-ifunc "" } */ +/* { dg-options "-O0" } */ + +__attribute__ ((target_version ("sve+sve2"))) int +foo () { + return 1; +} + +__attribute__ ((target_version ("sve"))) int +foo () { + return 1; +} + +int bar () { return foo (); } /* { dg-error "no matching function for call to" } */ + +__attribute__ ((target_version ("sve+sve2"))) int +foo2(); + +int bar2 () { return foo2 (); } /* { dg-error "no default version in scope" } */ diff --git a/gcc/testsuite/g++.target/aarch64/mv-error7.C b/gcc/testsuite/g++.target/aarch64/mv-error7.C new file mode 100644 index 000000000000..97496a981680 --- /dev/null +++ b/gcc/testsuite/g++.target/aarch64/mv-error7.C @@ -0,0 +1,11 @@ +/* { dg-do compile } */ +/* { dg-require-ifunc "" } */ +/* { dg-options "-O0" } */ + +__attribute__ ((target_version ("dotprod"))) int +foo (); + +__attribute__ ((target_version ("sve+sve2"))) int +foo (); + +int bar () { return foo (); } /* { dg-error "no matching function for call to" } */ diff --git a/gcc/testsuite/g++.target/aarch64/mv-error8.C b/gcc/testsuite/g++.target/aarch64/mv-error8.C new file mode 100644 index 000000000000..e5c261a5d10f --- /dev/null +++ b/gcc/testsuite/g++.target/aarch64/mv-error8.C @@ -0,0 +1,12 @@ +/* { dg-do compile } */ +/* { dg-require-ifunc "" } */ +/* { dg-options "-O0" } */ + +__attribute__ ((target_version ("dotprod"))) int +foo (); + +int +bar () +{ + return foo (); /* { dg-error "no default version in scope" } */ +} diff --git a/gcc/testsuite/g++.target/aarch64/mv-pragma.C b/gcc/testsuite/g++.target/aarch64/mv-pragma.C index 6e5929328bbf..545d0735438d 100644 --- a/gcc/testsuite/g++.target/aarch64/mv-pragma.C +++ b/gcc/testsuite/g++.target/aarch64/mv-pragma.C @@ -1,7 +1,6 @@ /* { dg-do compile } */ /* { dg-require-ifunc "" } */ /* { dg-options "-O0" } */ -/* { dg-additional-options "-Wno-experimental-fmv-target" } */ #pragma GCC target ("+sve") diff --git a/gcc/testsuite/g++.target/aarch64/mv-symbols1.C b/gcc/testsuite/g++.target/aarch64/mv-symbols1.C index 73cde42fa343..53e0abcd9b43 100644 --- a/gcc/testsuite/g++.target/aarch64/mv-symbols1.C +++ b/gcc/testsuite/g++.target/aarch64/mv-symbols1.C @@ -1,7 +1,6 @@ /* { dg-do compile } */ /* { dg-require-ifunc "" } */ /* { dg-options "-O0" } */ -/* { dg-additional-options "-Wno-experimental-fmv-target" } */ int foo () { diff --git a/gcc/testsuite/g++.target/aarch64/mv-symbols10.C b/gcc/testsuite/g++.target/aarch64/mv-symbols10.C new file mode 100644 index 000000000000..b83e00be94d7 --- /dev/null +++ b/gcc/testsuite/g++.target/aarch64/mv-symbols10.C @@ -0,0 +1,26 @@ +/* { dg-do compile } */ +/* { dg-options "-O0" } */ + +__attribute__ ((target_version ("default"))) void +foo (int a = 3); + +__attribute__ ((target_version ("sve"))) void +foo (int a = 4); + +void bar() { + foo(); +} + +__attribute__ ((target_version ("sve"))) void +foo2 (int a = 6); + +__attribute__ ((target_version ("default"))) void +foo2 (int a = 5); + +void bar2() { + foo2(); +} + + +/* { dg-final { scan-assembler-times "\n\tmov\tw\[0-9\]\+, 3\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\tmov\tw\[0-9\]\+, 5\n" 1 } } */ diff --git a/gcc/testsuite/g++.target/aarch64/mv-symbols11.C b/gcc/testsuite/g++.target/aarch64/mv-symbols11.C new file mode 100644 index 000000000000..19ab82de7053 --- /dev/null +++ b/gcc/testsuite/g++.target/aarch64/mv-symbols11.C @@ -0,0 +1,29 @@ +/* { dg-do compile } */ +/* { dg-options "-O0" } */ + +__attribute__ ((target_version ("default"))) int +foo () { return 1; } + +__attribute__ ((target_version ("dotprod"))) int +foo () { return 3; } + +int (*test)(); + +void bar () +{ + test = foo; +} + +__attribute__ ((target_version ("default"))) int +foo2 (); + +__attribute__ ((target_version ("dotprod"))) int +foo2 (); + +void bar2 () +{ + test = foo2; +} + +/* { dg-final { scan-assembler-times "\n\tadrp\tx\[0-9\]+, _Z3foov\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\tadrp\tx\[0-9\]+, _Z4foo2v\n" 1 } } */ diff --git a/gcc/testsuite/g++.target/aarch64/mv-symbols12.C b/gcc/testsuite/g++.target/aarch64/mv-symbols12.C new file mode 100644 index 000000000000..a5e54bbf0413 --- /dev/null +++ b/gcc/testsuite/g++.target/aarch64/mv-symbols12.C @@ -0,0 +1,27 @@ +/* { dg-do compile } */ +/* { dg-options "-O0" } */ + +int foo () { + return 1; +} + +void +bar () +{ + foo (); +} + +__attribute__ ((target_version ("dotprod"))) int +foo (); + +/* { dg-final { scan-assembler-times "\n_Z3foov\.default:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n_Z3foov\._Mdotprod:\n" 0 } } */ + +/* { dg-final { scan-assembler-times "\n_Z3foov\.resolver:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\tadrp\tx\[0-9\]+, _Z3foov\._Mdotprod\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\tadrp\tx\[0-9\]+, _Z3foov\.default\n" 1 } } */ + +/* { dg-final { scan-assembler-times "\n\tbl\t_Z3foov\n" 1 } } */ + +/* { dg-final { scan-assembler-times "\n\t\.type\t_Z3foov, %gnu_indirect_function\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\t\.set\t_Z3foov,_Z3foov\.resolver\n" 1 } } */ diff --git a/gcc/testsuite/g++.target/aarch64/mv-symbols13.C b/gcc/testsuite/g++.target/aarch64/mv-symbols13.C new file mode 100644 index 000000000000..01b8b6c768b0 --- /dev/null +++ b/gcc/testsuite/g++.target/aarch64/mv-symbols13.C @@ -0,0 +1,27 @@ +/* { dg-do compile } */ +/* { dg-options "-O0" } */ + +int foo () { + return 1; +} + +void bar () +{ + int (*test)() = foo; + + test(); +} + +__attribute__ ((target_version ("dotprod"))) int foo (); + +/* { dg-final { scan-assembler-times "\n_Z3foov\.default:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n_Z3foov\._Mdotprod:\n" 0 } } */ + +/* { dg-final { scan-assembler-times "\n_Z3foov\.resolver:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\tadrp\tx\[0-9\]+, _Z3foov\._Mdotprod\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\tadrp\tx\[0-9\]+, _Z3foov\.default\n" 1 } } */ + +/* { dg-final { scan-assembler-times "\n\tadrp\tx\[0-9\]+, _Z3foov\n" 1 } } */ + +/* { dg-final { scan-assembler-times "\n\t\.type\t_Z3foov, %gnu_indirect_function\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\t\.set\t_Z3foov,_Z3foov\.resolver\n" 1 } } */ diff --git a/gcc/testsuite/g++.target/aarch64/mv-symbols2.C b/gcc/testsuite/g++.target/aarch64/mv-symbols2.C index 6da88ddfb48d..7c8e1bcbed1a 100644 --- a/gcc/testsuite/g++.target/aarch64/mv-symbols2.C +++ b/gcc/testsuite/g++.target/aarch64/mv-symbols2.C @@ -1,7 +1,6 @@ /* { dg-do compile } */ /* { dg-require-ifunc "" } */ /* { dg-options "-O0" } */ -/* { dg-additional-options "-Wno-experimental-fmv-target" } */ __attribute__((target_version("default"))) int foo () @@ -41,13 +40,13 @@ int foo (int) /* { dg-final { scan-assembler-times "\n_Z3foov\.default:\n" 1 } } */ /* { dg-final { scan-assembler-times "\n_Z3foov\._Mdotprod:\n" 1 } } */ /* { dg-final { scan-assembler-times "\n_Z3foov\._MsveMsve2:\n" 1 } } */ -/* { dg-final { scan-assembler-times "\n_Z3foov\.resolver:\n" 0 } } */ -/* { dg-final { scan-assembler-times "\n\t\.type\t_Z3foov, %gnu_indirect_function\n" 0 } } */ -/* { dg-final { scan-assembler-times "\n\t\.set\t_Z3foov,_Z3foov\.resolver\n" 0 } } */ +/* { dg-final { scan-assembler-times "\n_Z3foov\.resolver:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\t\.type\t_Z3foov, %gnu_indirect_function\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\t\.set\t_Z3foov,_Z3foov\.resolver\n" 1 } } */ /* { dg-final { scan-assembler-times "\n_Z3fooi\.default:\n" 1 } } */ /* { dg-final { scan-assembler-times "\n_Z3fooi\._Mdotprod:\n" 1 } } */ /* { dg-final { scan-assembler-times "\n_Z3fooi\._MsveMsve2:\n" 1 } } */ -/* { dg-final { scan-assembler-times "\n_Z3fooi\.resolver:\n" 0 } } */ -/* { dg-final { scan-assembler-times "\n\t\.type\t_Z3fooi, %gnu_indirect_function\n" 0 } } */ -/* { dg-final { scan-assembler-times "\n\t\.set\t_Z3fooi,_Z3fooi\.resolver\n" 0 } } */ +/* { dg-final { scan-assembler-times "\n_Z3fooi\.resolver:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\t\.type\t_Z3fooi, %gnu_indirect_function\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\t\.set\t_Z3fooi,_Z3fooi\.resolver\n" 1 } } */ diff --git a/gcc/testsuite/g++.target/aarch64/mv-symbols3.C b/gcc/testsuite/g++.target/aarch64/mv-symbols3.C index 5dd7b49be2a1..2e8a27f05222 100644 --- a/gcc/testsuite/g++.target/aarch64/mv-symbols3.C +++ b/gcc/testsuite/g++.target/aarch64/mv-symbols3.C @@ -1,7 +1,6 @@ /* { dg-do compile } */ /* { dg-require-ifunc "" } */ /* { dg-options "-O0" } */ -/* { dg-additional-options "-Wno-experimental-fmv-target" } */ __attribute__((target_version("default"))) int foo (); @@ -29,10 +28,10 @@ int bar() /* { dg-final { scan-assembler-times "\n_Z3foov\.default:\n" 0 } } */ /* { dg-final { scan-assembler-times "\n_Z3foov\._Mdotprod:\n" 0 } } */ /* { dg-final { scan-assembler-times "\n_Z3foov\._MsveMsve2:\n" 0 } } */ -/* { dg-final { scan-assembler-times "\n_Z3foov\.resolver:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n_Z3foov\.resolver:\n" 0 } } */ /* { dg-final { scan-assembler-times "\n\tbl\t_Z3foov\n" 1 } } */ -/* { dg-final { scan-assembler-times "\n\t\.type\t_Z3foov, %gnu_indirect_function\n" 1 } } */ -/* { dg-final { scan-assembler-times "\n\t\.set\t_Z3foov,_Z3foov\.resolver\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\t\.type\t_Z3foov, %gnu_indirect_function\n" 0 } } */ +/* { dg-final { scan-assembler-times "\n\t\.set\t_Z3foov,_Z3foov\.resolver\n" 0 } } */ /* { dg-final { scan-assembler-times "\n_Z3fooi\.default:\n" 0 } } */ /* { dg-final { scan-assembler-times "\n_Z3fooi\._Mdotprod:\n" 0 } } */ diff --git a/gcc/testsuite/g++.target/aarch64/mv-symbols4.C b/gcc/testsuite/g++.target/aarch64/mv-symbols4.C index 4b25d17cc15a..04cac9d118a3 100644 --- a/gcc/testsuite/g++.target/aarch64/mv-symbols4.C +++ b/gcc/testsuite/g++.target/aarch64/mv-symbols4.C @@ -1,7 +1,6 @@ /* { dg-do compile } */ /* { dg-require-ifunc "" } */ /* { dg-options "-O0" } */ -/* { dg-additional-options "-Wno-experimental-fmv-target" } */ __attribute__((target_version("default"))) int foo () @@ -44,6 +43,6 @@ int bar() /* { dg-final { scan-assembler-times "\n_Z3fooi\.default:\n" 1 } } */ /* { dg-final { scan-assembler-times "\n_Z3fooi\._Mdotprod:\n" 0 } } */ /* { dg-final { scan-assembler-times "\n_Z3fooi\._MsveMsve2:\n" 0 } } */ -/* { dg-final { scan-assembler-times "\n_Z3fooi\.resolver:\n" 0 } } */ -/* { dg-final { scan-assembler-times "\n\t\.type\t_Z3fooi, %gnu_indirect_function\n" 0 } } */ -/* { dg-final { scan-assembler-times "\n\t\.set\t_Z3fooi,_Z3fooi\.resolver\n" 0 } } */ +/* { dg-final { scan-assembler-times "\n_Z3fooi\.resolver:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\t\.type\t_Z3fooi, %gnu_indirect_function\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\t\.set\t_Z3fooi,_Z3fooi\.resolver\n" 1 } } */ diff --git a/gcc/testsuite/g++.target/aarch64/mv-symbols5.C b/gcc/testsuite/g++.target/aarch64/mv-symbols5.C index fac00b203135..faa67909c643 100644 --- a/gcc/testsuite/g++.target/aarch64/mv-symbols5.C +++ b/gcc/testsuite/g++.target/aarch64/mv-symbols5.C @@ -1,7 +1,6 @@ /* { dg-do compile } */ /* { dg-require-ifunc "" } */ /* { dg-options "-O0" } */ -/* { dg-additional-options "-Wno-experimental-fmv-target" } */ __attribute__((target_version("default"))) int foo (); @@ -44,10 +43,10 @@ int bar() /* { dg-final { scan-assembler-times "\n_Z3foov\.default:\n" 0 } } */ /* { dg-final { scan-assembler-times "\n_Z3foov\._Mdotprod:\n" 1 } } */ /* { dg-final { scan-assembler-times "\n_Z3foov\._MsveMsve2:\n" 1 } } */ -/* { dg-final { scan-assembler-times "\n_Z3foov\.resolver:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n_Z3foov\.resolver:\n" 0 } } */ /* { dg-final { scan-assembler-times "\n\tbl\t_Z3foov\n" 1 } } */ -/* { dg-final { scan-assembler-times "\n\t\.type\t_Z3foov, %gnu_indirect_function\n" 1 } } */ -/* { dg-final { scan-assembler-times "\n\t\.set\t_Z3foov,_Z3foov\.resolver\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\t\.type\t_Z3foov, %gnu_indirect_function\n" 0 } } */ +/* { dg-final { scan-assembler-times "\n\t\.set\t_Z3foov,_Z3foov\.resolver\n" 0 } } */ /* { dg-final { scan-assembler-times "\n_Z3fooi\.default:\n" 0 } } */ /* { dg-final { scan-assembler-times "\n_Z3fooi\._Mdotprod:\n" 1 } } */ diff --git a/gcc/testsuite/g++.target/aarch64/mv-symbols6.C b/gcc/testsuite/g++.target/aarch64/mv-symbols6.C new file mode 100644 index 000000000000..7e54158f1c80 --- /dev/null +++ b/gcc/testsuite/g++.target/aarch64/mv-symbols6.C @@ -0,0 +1,20 @@ +/* { dg-do compile } */ +/* { dg-options "-O0" } */ + +__attribute__ ((target_version ("default"))) int +foo () +{ + return 1; +} + +int bar() +{ + return foo(); +} + +/* { dg-final { scan-assembler-times "\n_Z3foov:\n" 0 } } */ +/* { dg-final { scan-assembler-times "\n_Z3foov\.default:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n_Z3foov\.resolver:\n" 0 } } */ +/* { dg-final { scan-assembler-times "bl\t_Z3foov.default\n" 1 } } */ +/* { dg-final { scan-assembler-times ".global\t_Z3foov\n" 1 } } */ +/* { dg-final { scan-assembler-times ".set\t_Z3foov,_Z3foov.default\n" 1 } } */ diff --git a/gcc/testsuite/g++.target/aarch64/mv-symbols7.C b/gcc/testsuite/g++.target/aarch64/mv-symbols7.C new file mode 100644 index 000000000000..a312caf651e1 --- /dev/null +++ b/gcc/testsuite/g++.target/aarch64/mv-symbols7.C @@ -0,0 +1,47 @@ +/* { dg-do compile } */ +/* { dg-options "-O0" } */ + +__attribute__ ((target_version ("dotprod"))) int +foo (); + +__attribute__ ((target_version ("sve+sve2"))) int +foo (); + +__attribute__ ((target_version ("default"))) int +foo (); + +__attribute__ ((target_version ("sve+sve2"))) int +foo () +{ + return 5; +} +__attribute__ ((target_version ("dotprod"))) int +foo () +{ + return 3; +} +__attribute__ ((target_version ("default"))) int +foo () +{ + return 1; +} + +int +bar () +{ + return foo (); +} + +/* { dg-final { scan-assembler-times "\n_Z3foov\.default:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n_Z3foov\._Mdotprod:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n_Z3foov\._MsveMsve2:\n" 1 } } */ + +/* { dg-final { scan-assembler-times "\n_Z3foov\.resolver:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\tadrp\tx\[0-9\]+, _Z3foov\._MsveMsve2\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\tadrp\tx\[0-9\]+, _Z3foov\._Mdotprod\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\tadrp\tx\[0-9\]+, _Z3foov\.default\n" 1 } } */ + +/* { dg-final { scan-assembler-times "\n\tbl\t_Z3foov\n" 1 } } */ + +/* { dg-final { scan-assembler-times "\n\t\.type\t_Z3foov, %gnu_indirect_function\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\t\.set\t_Z3foov,_Z3foov\.resolver\n" 1 } } */ diff --git a/gcc/testsuite/g++.target/aarch64/mv-symbols8.C b/gcc/testsuite/g++.target/aarch64/mv-symbols8.C new file mode 100644 index 000000000000..29382ae56d8f --- /dev/null +++ b/gcc/testsuite/g++.target/aarch64/mv-symbols8.C @@ -0,0 +1,45 @@ +/* { dg-do compile } */ +/* { dg-require-ifunc "" } */ +/* { dg-options "-O0" } */ + +__attribute__ ((target_version ("dotprod"))) int +foo (); +__attribute__ ((target_version ("sve+sve2"))) int +foo (); + +int +foo () +{ + return 1; +} + +__attribute__ ((target_version ("dotprod"))) int +foo () +{ + return 3; +} +__attribute__ ((target_version ("sve+sve2"))) int +foo () +{ + return 5; +} + +int +bar () +{ + return foo (); +} + +/* { dg-final { scan-assembler-times "\n_Z3foov\.default:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n_Z3foov\._Mdotprod:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n_Z3foov\._MsveMsve2:\n" 1 } } */ + +/* { dg-final { scan-assembler-times "\n_Z3foov\.resolver:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\tadrp\tx\[0-9\]+, _Z3foov\._MsveMsve2\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\tadrp\tx\[0-9\]+, _Z3foov\._Mdotprod\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\tadrp\tx\[0-9\]+, _Z3foov\.default\n" 1 } } */ + +/* { dg-final { scan-assembler-times "\n\tbl\t_Z3foov\n" 1 } } */ + +/* { dg-final { scan-assembler-times "\n\t\.type\t_Z3foov, %gnu_indirect_function\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\t\.set\t_Z3foov,_Z3foov\.resolver\n" 1 } } */ diff --git a/gcc/testsuite/g++.target/aarch64/mv-symbols9.C b/gcc/testsuite/g++.target/aarch64/mv-symbols9.C new file mode 100644 index 000000000000..e46d9db2649d --- /dev/null +++ b/gcc/testsuite/g++.target/aarch64/mv-symbols9.C @@ -0,0 +1,42 @@ +/* { dg-do compile } */ +/* { dg-options "-O0" } */ + +int +foo (); + +int +foo () +{ + return 1; +} + +__attribute__ ((target_version ("dotprod"))) int +foo () +{ + return 3; +} +__attribute__ ((target_version ("sve+sve2"))) int +foo () +{ + return 5; +} + +int +bar () +{ + return foo (); +} + +/* { dg-final { scan-assembler-times "\n_Z3foov\.default:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n_Z3foov\._Mdotprod:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n_Z3foov\._MsveMsve2:\n" 1 } } */ + +/* { dg-final { scan-assembler-times "\n_Z3foov\.resolver:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\tadrp\tx\[0-9\]+, _Z3foov\._MsveMsve2\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\tadrp\tx\[0-9\]+, _Z3foov\._Mdotprod\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\tadrp\tx\[0-9\]+, _Z3foov\.default\n" 1 } } */ + +/* { dg-final { scan-assembler-times "\n\tbl\t_Z3foov\n" 1 } } */ + +/* { dg-final { scan-assembler-times "\n\t\.type\t_Z3foov, %gnu_indirect_function\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\t\.set\t_Z3foov,_Z3foov\.resolver\n" 1 } } */ diff --git a/gcc/testsuite/g++.target/aarch64/mv-warning1.C b/gcc/testsuite/g++.target/aarch64/mv-warning1.C deleted file mode 100644 index 6346c1673a2e..000000000000 --- a/gcc/testsuite/g++.target/aarch64/mv-warning1.C +++ /dev/null @@ -1,9 +0,0 @@ -/* { dg-do compile } */ -/* { dg-require-ifunc "" } */ -/* { dg-options "-O0" } */ - -__attribute__((target_version("default"))) -int foo () { return 1; }/* { dg-warning "Function Multi Versioning support is experimental, and the behavior is likely to change" } */ - -__attribute__((target_version("rng"))) -int foo () { return 1; } diff --git a/gcc/testsuite/g++.target/aarch64/mvc-error1.C b/gcc/testsuite/g++.target/aarch64/mvc-error1.C new file mode 100644 index 000000000000..cfc550af550c --- /dev/null +++ b/gcc/testsuite/g++.target/aarch64/mvc-error1.C @@ -0,0 +1,9 @@ +/* { dg-do compile } */ +/* { dg-require-ifunc "" } */ +/* { dg-options "-O0" } */ + +__attribute__ ((target_clones ("default, dotprod"))) float +foo (); /* { dg-message "previous declaration of .float foo \\\[\\\[target_clones\\(.default., .dotprod.\\)\\\]\\\] \\(\\)." } */ + +__attribute__ ((target_clones ("dotprod", "sve"))) float +foo () { return 3; } /* { dg-error ".float foo \\\[\\\[target_clones\\(.dotprod., .sve.\\)\\\]\\\] \\(\\). conflicts with overlapping .target_clone. declaration" } */ diff --git a/gcc/testsuite/g++.target/aarch64/mvc-error2.C b/gcc/testsuite/g++.target/aarch64/mvc-error2.C new file mode 100644 index 000000000000..b253c805390b --- /dev/null +++ b/gcc/testsuite/g++.target/aarch64/mvc-error2.C @@ -0,0 +1,9 @@ +/* { dg-do compile } */ +/* { dg-require-ifunc "" } */ +/* { dg-options "-O0" } */ + +__attribute__ ((target_clones ("default, dotprod"))) float +foo () { return 3; } /* { dg-message "previous declaration" } */ + +__attribute__ ((target_clones ("dotprod", "sve"))) float +foo () { return 3; } /* { dg-error "conflicts with overlapping .target_clone. declaration" } */ diff --git a/gcc/testsuite/g++.target/aarch64/mvc-symbols1.C b/gcc/testsuite/g++.target/aarch64/mvc-symbols1.C index 983194d74af2..2dd7c79f16cf 100644 --- a/gcc/testsuite/g++.target/aarch64/mvc-symbols1.C +++ b/gcc/testsuite/g++.target/aarch64/mvc-symbols1.C @@ -1,7 +1,6 @@ /* { dg-do compile } */ /* { dg-require-ifunc "" } */ /* { dg-options "-O0" } */ -/* { dg-additional-options "-Wno-experimental-fmv-target" } */ __attribute__((target_clones("default", "dotprod", "sve+sve2"))) int foo () diff --git a/gcc/testsuite/g++.target/aarch64/mvc-symbols2.C b/gcc/testsuite/g++.target/aarch64/mvc-symbols2.C index 58a797947cea..75b9c126dd8c 100644 --- a/gcc/testsuite/g++.target/aarch64/mvc-symbols2.C +++ b/gcc/testsuite/g++.target/aarch64/mvc-symbols2.C @@ -1,7 +1,6 @@ /* { dg-do compile } */ /* { dg-require-ifunc "" } */ /* { dg-options "-O0" } */ -/* { dg-additional-options "-Wno-experimental-fmv-target" } */ __attribute__((target_clones("default", "dotprod", "sve+sve2"))) int foo () diff --git a/gcc/testsuite/g++.target/aarch64/mvc-symbols3.C b/gcc/testsuite/g++.target/aarch64/mvc-symbols3.C index 350a5586643f..baea04ef5ec6 100644 --- a/gcc/testsuite/g++.target/aarch64/mvc-symbols3.C +++ b/gcc/testsuite/g++.target/aarch64/mvc-symbols3.C @@ -1,7 +1,6 @@ /* { dg-do compile } */ /* { dg-require-ifunc "" } */ /* { dg-options "-O0" } */ -/* { dg-additional-options "-Wno-experimental-fmv-target" } */ __attribute__((target_clones("default", "dotprod", "sve+sve2"))) int foo (); @@ -22,15 +21,15 @@ int bar(int x) /* { dg-final { scan-assembler-times "\n_Z3foov\.default:\n" 0 } } */ /* { dg-final { scan-assembler-times "\n_Z3foov\._Mdotprod:\n" 0 } } */ /* { dg-final { scan-assembler-times "\n_Z3foov\._MsveMsve2:\n" 0 } } */ -/* { dg-final { scan-assembler-times "\n_Z3foov\.resolver:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n_Z3foov\.resolver:\n" 0 } } */ /* { dg-final { scan-assembler-times "\n\tbl\t_Z3foov\n" 1 } } */ -/* { dg-final { scan-assembler-times "\n\t\.type\t_Z3foov, %gnu_indirect_function\n" 1 } } */ -/* { dg-final { scan-assembler-times "\n\t\.set\t_Z3foov,_Z3foov\.resolver\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\t\.type\t_Z3foov, %gnu_indirect_function\n" 0 } } */ +/* { dg-final { scan-assembler-times "\n\t\.set\t_Z3foov,_Z3foov\.resolver\n" 0 } } */ /* { dg-final { scan-assembler-times "\n_Z3fooi\.default:\n" 0 } } */ /* { dg-final { scan-assembler-times "\n_Z3fooi\._Mdotprod:\n" 0 } } */ /* { dg-final { scan-assembler-times "\n_Z3fooi\._MsveMsve2:\n" 0 } } */ -/* { dg-final { scan-assembler-times "\n_Z3fooi\.resolver:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n_Z3fooi\.resolver:\n" 0 } } */ /* { dg-final { scan-assembler-times "\n\tbl\t_Z3fooi\n" 1 } } */ -/* { dg-final { scan-assembler-times "\n\t\.type\t_Z3fooi, %gnu_indirect_function\n" 1 } } */ -/* { dg-final { scan-assembler-times "\n\t\.set\t_Z3fooi,_Z3fooi\.resolver\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\t\.type\t_Z3fooi, %gnu_indirect_function\n" 0 } } */ +/* { dg-final { scan-assembler-times "\n\t\.set\t_Z3fooi,_Z3fooi\.resolver\n" 0 } } */ diff --git a/gcc/testsuite/g++.target/aarch64/mvc-symbols4.C b/gcc/testsuite/g++.target/aarch64/mvc-symbols4.C index 9c8a7bd37f27..6c86ae61e5fa 100644 --- a/gcc/testsuite/g++.target/aarch64/mvc-symbols4.C +++ b/gcc/testsuite/g++.target/aarch64/mvc-symbols4.C @@ -1,7 +1,6 @@ /* { dg-do compile } */ /* { dg-require-ifunc "" } */ /* { dg-options "-O0" } */ -/* { dg-additional-options "-Wno-experimental-fmv-target" } */ __attribute__((target_clones("default", "dotprod", "sve+sve2"))) int foo (); diff --git a/gcc/testsuite/g++.target/aarch64/mvc-warning1.C b/gcc/testsuite/g++.target/aarch64/mvc-warning1.C index 59acec3fad2f..d394e768eb06 100644 --- a/gcc/testsuite/g++.target/aarch64/mvc-warning1.C +++ b/gcc/testsuite/g++.target/aarch64/mvc-warning1.C @@ -2,5 +2,12 @@ /* { dg-require-ifunc "" } */ /* { dg-options "-O0" } */ -__attribute__((target_clones("default", "sve"))) -int foo () { return 1; }/* { dg-warning "Function Multi Versioning support is experimental, and the behavior is likely to change" } */ +__attribute__((target_clones("default", "dotprod", "sve+sve2"))) +int foo () { + return 1; +} + +__attribute__((target_clones("invalid1+sve"))) +int foo () { /* { dg-warning "invalid feature modifier .invalid1. in version .invalid1\\+sve. for .target_clones. attribute" } */ + return 2; +} diff --git a/gcc/testsuite/gcc.target/aarch64/pr113356.C b/gcc/testsuite/g++.target/aarch64/pr113356.C similarity index 100% rename from gcc/testsuite/gcc.target/aarch64/pr113356.C rename to gcc/testsuite/g++.target/aarch64/pr113356.C diff --git a/gcc/testsuite/g++.target/i386/mangle-ldbl-1.C b/gcc/testsuite/g++.target/i386/mangle-ldbl-1.C new file mode 100644 index 000000000000..c891e9532474 --- /dev/null +++ b/gcc/testsuite/g++.target/i386/mangle-ldbl-1.C @@ -0,0 +1,8 @@ +// { dg-do compile { target { c++20 && { x86_64-*-linux* i?86-*-linux* } } } } +// { dg-final { scan-assembler "_Z3fooILe3fff8000000000000000EEiv" } } +// { dg-final { scan-assembler "_Z3fooILe40008000000000000000EEiv" } } + +template +int foo () { return 0; } + +int bar () { return foo <1.0L> () + foo <2.0L> (); } diff --git a/gcc/testsuite/g++.target/i386/mangle-ldbl-2.C b/gcc/testsuite/g++.target/i386/mangle-ldbl-2.C new file mode 100644 index 000000000000..baef12e15d22 --- /dev/null +++ b/gcc/testsuite/g++.target/i386/mangle-ldbl-2.C @@ -0,0 +1,11 @@ +// { dg-do compile { target { c++20 && { x86_64-*-linux* i?86-*-linux* } } } } +// { dg-additional-options "-fabi-version=20" } +// { dg-final { scan-assembler "_Z3fooILe0000000000003fff8000000000000000EEiv" { target { ! ia32 } } } } +// { dg-final { scan-assembler "_Z3fooILe00000000000040008000000000000000EEiv" { target { ! ia32 } } } } +// { dg-final { scan-assembler "_Z3fooILe00003fff8000000000000000EEiv" { target ia32 } } } +// { dg-final { scan-assembler "_Z3fooILe000040008000000000000000EEiv" { target ia32 } } } + +template +int foo () { return 0; } + +int bar () { return foo <1.0L> () + foo <2.0L> (); } diff --git a/gcc/testsuite/g++.target/i386/mv-symbols1.C b/gcc/testsuite/g++.target/i386/mv-symbols1.C index 1290299aea5e..3163f03ddd8a 100644 --- a/gcc/testsuite/g++.target/i386/mv-symbols1.C +++ b/gcc/testsuite/g++.target/i386/mv-symbols1.C @@ -55,14 +55,14 @@ int bar(int x) /* { dg-final { scan-assembler-times "\n_Z3foov\.arch_slm:\n" 1 } } */ /* { dg-final { scan-assembler-times "\n_Z3foov\.sse4.2:\n" 1 } } */ /* { dg-final { scan-assembler-times "\n_Z3foov\.resolver:\n" 1 } } */ -/* { dg-final { scan-assembler-times "\n\tcall\t_Z7_Z3foovv\n" 1 } } */ -/* { dg-final { scan-assembler-times "\n\t\.type\t_Z7_Z3foovv, @gnu_indirect_function\n" 1 } } */ -/* { dg-final { scan-assembler-times "\n\t\.set\t_Z7_Z3foovv,_Z3foov\.resolver\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\tcall\t_Z3foov.ifunc\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\t\.type\t_Z3foov.ifunc, @gnu_indirect_function\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\t\.set\t_Z3foov.ifunc,_Z3foov\.resolver\n" 1 } } */ /* { dg-final { scan-assembler-times "\n_Z3fooi:\n" 1 } } */ /* { dg-final { scan-assembler-times "\n_Z3fooi\.arch_slm:\n" 1 } } */ /* { dg-final { scan-assembler-times "\n_Z3fooi\.sse4.2:\n" 1 } } */ /* { dg-final { scan-assembler-times "\n_Z3fooi\.resolver:\n" 1 } } */ -/* { dg-final { scan-assembler-times "\n\tcall\t_Z7_Z3fooii\n" 1 } } */ -/* { dg-final { scan-assembler-times "\n\t\.type\t_Z7_Z3fooii, @gnu_indirect_function\n" 1 } } */ -/* { dg-final { scan-assembler-times "\n\t\.set\t_Z7_Z3fooii,_Z3fooi\.resolver\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\tcall\t_Z3fooi.ifunc\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\t\.type\t_Z3fooi.ifunc, @gnu_indirect_function\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\t\.set\t_Z3fooi.ifunc,_Z3fooi\.resolver\n" 1 } } */ diff --git a/gcc/testsuite/g++.target/i386/mv-symbols3.C b/gcc/testsuite/g++.target/i386/mv-symbols3.C index a5cf3445a431..67b273511432 100644 --- a/gcc/testsuite/g++.target/i386/mv-symbols3.C +++ b/gcc/testsuite/g++.target/i386/mv-symbols3.C @@ -32,13 +32,13 @@ int bar() /* { dg-final { scan-assembler-times "\n_Z3foov\.arch_slm:\n" 0 } } */ /* { dg-final { scan-assembler-times "\n_Z3foov\.sse4.2:\n" 0 } } */ /* { dg-final { scan-assembler-times "\n_Z3foov\.resolver:\n" 1 } } */ -/* { dg-final { scan-assembler-times "\n\tcall\t_Z7_Z3foovv\n" 1 } } */ -/* { dg-final { scan-assembler-times "\n\t\.type\t_Z7_Z3foovv, @gnu_indirect_function\n" 1 } } */ -/* { dg-final { scan-assembler-times "\n\t\.set\t_Z7_Z3foovv,_Z3foov\.resolver\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\tcall\t_Z3foov.ifunc\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\t\.type\t_Z3foov.ifunc, @gnu_indirect_function\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\t\.set\t_Z3foov.ifunc,_Z3foov\.resolver\n" 1 } } */ /* { dg-final { scan-assembler-times "\n_Z3fooi:\n" 0 } } */ /* { dg-final { scan-assembler-times "\n_Z3fooi\.arch_slm:\n" 0 } } */ /* { dg-final { scan-assembler-times "\n_Z3fooi\.sse4.2:\n" 0 } } */ /* { dg-final { scan-assembler-times "\n_Z3fooi\.resolver:\n" 0 } } */ -/* { dg-final { scan-assembler-times "\n\t\.type\t_Z7_Z3fooii, @gnu_indirect_function\n" 0 } } */ -/* { dg-final { scan-assembler-times "\n\t\.set\t_Z7_Z3fooii,_Z3fooi\.resolver\n" 0 } } */ +/* { dg-final { scan-assembler-times "\n\t\.type\t_Z3fooi.ifunc, @gnu_indirect_function\n" 0 } } */ +/* { dg-final { scan-assembler-times "\n\t\.set\t_Z3fooi.ifunc,_Z3fooi\.resolver\n" 0 } } */ diff --git a/gcc/testsuite/g++.target/i386/mv-symbols4.C b/gcc/testsuite/g++.target/i386/mv-symbols4.C index bb10f126f673..c82db70da354 100644 --- a/gcc/testsuite/g++.target/i386/mv-symbols4.C +++ b/gcc/testsuite/g++.target/i386/mv-symbols4.C @@ -38,13 +38,13 @@ int bar() /* { dg-final { scan-assembler-times "\n_Z3foov\.arch_slm:\n" 0 } } */ /* { dg-final { scan-assembler-times "\n_Z3foov\.sse4.2:\n" 0 } } */ /* { dg-final { scan-assembler-times "\n_Z3foov\.resolver:\n" 1 } } */ -/* { dg-final { scan-assembler-times "\n\tcall\t_Z7_Z3foovv\n" 1 } } */ -/* { dg-final { scan-assembler-times "\n\t\.type\t_Z7_Z3foovv, @gnu_indirect_function\n" 1 } } */ -/* { dg-final { scan-assembler-times "\n\t\.set\t_Z7_Z3foovv,_Z3foov\.resolver\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\tcall\t_Z3foov.ifunc\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\t\.type\t_Z3foov.ifunc, @gnu_indirect_function\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\t\.set\t_Z3foov.ifunc,_Z3foov\.resolver\n" 1 } } */ /* { dg-final { scan-assembler-times "\n_Z3fooi:\n" 1 } } */ /* { dg-final { scan-assembler-times "\n_Z3fooi\.arch_slm:\n" 0 } } */ /* { dg-final { scan-assembler-times "\n_Z3fooi\.sse4.2:\n" 0 } } */ /* { dg-final { scan-assembler-times "\n_Z3fooi\.resolver:\n" 0 } } */ -/* { dg-final { scan-assembler-times "\n\t\.type\t_Z7_Z3fooii, @gnu_indirect_function\n" 0 } } */ -/* { dg-final { scan-assembler-times "\n\t\.set\t_Z7_Z3fooii,_Z3fooi\.resolver\n" 0 } } */ +/* { dg-final { scan-assembler-times "\n\t\.type\t_Z3fooi.ifunc, @gnu_indirect_function\n" 0 } } */ +/* { dg-final { scan-assembler-times "\n\t\.set\t_Z3fooi.ifunc,_Z3fooi\.resolver\n" 0 } } */ diff --git a/gcc/testsuite/g++.target/i386/mv-symbols5.C b/gcc/testsuite/g++.target/i386/mv-symbols5.C index d36e4c304c2d..7792f113f229 100644 --- a/gcc/testsuite/g++.target/i386/mv-symbols5.C +++ b/gcc/testsuite/g++.target/i386/mv-symbols5.C @@ -44,13 +44,13 @@ int bar() /* { dg-final { scan-assembler-times "\n_Z3foov\.arch_slm:\n" 1 } } */ /* { dg-final { scan-assembler-times "\n_Z3foov\.sse4.2:\n" 1 } } */ /* { dg-final { scan-assembler-times "\n_Z3foov\.resolver:\n" 1 } } */ -/* { dg-final { scan-assembler-times "\n\tcall\t_Z7_Z3foovv\n" 1 } } */ -/* { dg-final { scan-assembler-times "\n\t\.type\t_Z7_Z3foovv, @gnu_indirect_function\n" 1 } } */ -/* { dg-final { scan-assembler-times "\n\t\.set\t_Z7_Z3foovv,_Z3foov\.resolver\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\tcall\t_Z3foov.ifunc\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\t\.type\t_Z3foov.ifunc, @gnu_indirect_function\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\t\.set\t_Z3foov.ifunc,_Z3foov\.resolver\n" 1 } } */ /* { dg-final { scan-assembler-times "\n_Z3fooi:\n" 0 } } */ /* { dg-final { scan-assembler-times "\n_Z3fooi\.arch_slm:\n" 1 } } */ /* { dg-final { scan-assembler-times "\n_Z3fooi\.sse4.2:\n" 1 } } */ /* { dg-final { scan-assembler-times "\n_Z3fooi\.resolver:\n" 0 } } */ -/* { dg-final { scan-assembler-times "\n\t\.type\t_Z7_Z3fooii, @gnu_indirect_function\n" 0 } } */ -/* { dg-final { scan-assembler-times "\n\t\.set\t_Z7_Z3fooii,_Z3fooi\.resolver\n" 0 } } */ +/* { dg-final { scan-assembler-times "\n\t\.type\t_Z3fooi.ifunc, @gnu_indirect_function\n" 0 } } */ +/* { dg-final { scan-assembler-times "\n\t\.set\t_Z3fooi.ifunc,_Z3fooi\.resolver\n" 0 } } */ diff --git a/gcc/testsuite/g++.target/i386/pr80566-1.C b/gcc/testsuite/g++.target/i386/pr80566-1.C index 2a8031c46bd6..4e6d96a8804c 100644 --- a/gcc/testsuite/g++.target/i386/pr80566-1.C +++ b/gcc/testsuite/g++.target/i386/pr80566-1.C @@ -1,5 +1,5 @@ // { dg-do compile } -// { dg-options "-O2 -march=haswell -mtune-ctrl=avx256_store_by_pieces" } +// { dg-options "-O2 -march=haswell -mtune-ctrl=avx256_move_by_pieces" } // { dg-skip-if "requires hosted libstdc++ for cstring" { ! hostedlib } } #include diff --git a/gcc/testsuite/g++.target/m68k/mangle-ldbl-1.C b/gcc/testsuite/g++.target/m68k/mangle-ldbl-1.C new file mode 100644 index 000000000000..2a473ae2a66d --- /dev/null +++ b/gcc/testsuite/g++.target/m68k/mangle-ldbl-1.C @@ -0,0 +1,9 @@ +// { dg-do compile { target { c++20 && { m68k*-*-linux* } } } } +// { dg-additional-options "-m68020" } +// { dg-final { scan-assembler "_Z3fooILe3fff8000000000000000EEiv" } } +// { dg-final { scan-assembler "_Z3fooILe40008000000000000000EEiv" } } + +template +int foo () { return 0; } + +int bar () { return foo <1.0L> () + foo <2.0L> (); } diff --git a/gcc/testsuite/g++.target/m68k/mangle-ldbl-2.C b/gcc/testsuite/g++.target/m68k/mangle-ldbl-2.C new file mode 100644 index 000000000000..113775e87880 --- /dev/null +++ b/gcc/testsuite/g++.target/m68k/mangle-ldbl-2.C @@ -0,0 +1,9 @@ +// { dg-do compile { target { c++20 && { m68k*-*-linux* } } } } +// { dg-additional-options "-m68020 -fabi-version=20" } +// { dg-final { scan-assembler "_Z3fooILe3fff00008000000000000000EEiv" } } +// { dg-final { scan-assembler "_Z3fooILe400000008000000000000000EEiv" } } + +template +int foo () { return 0; } + +int bar () { return foo <1.0L> () + foo <2.0L> (); } diff --git a/gcc/testsuite/g++.target/riscv/mv-symbols2.C b/gcc/testsuite/g++.target/riscv/mv-symbols2.C index 43fa1502b7d1..8a5c5a0bc9f4 100644 --- a/gcc/testsuite/g++.target/riscv/mv-symbols2.C +++ b/gcc/testsuite/g++.target/riscv/mv-symbols2.C @@ -47,15 +47,15 @@ int foo (int) /* { dg-final { scan-assembler-times "\n_Z3foov\.default:\n" 1 } } */ /* { dg-final { scan-assembler-times "\n_Z3foov\.arch__v:\n" 1 } } */ /* { dg-final { scan-assembler-times "\n_Z3foov\.arch__zba__zbb:\n" 1 } } */ -/* { dg-final { scan-assembler-times "\n_Z3foov\.resolver:\n" 0 } } */ +/* { dg-final { scan-assembler-times "\n_Z3foov\.resolver:\n" 1 } } */ /* { dg-final { scan-assembler-times "\n\tcall\t_Z3foov\n" 0 } } */ -/* { dg-final { scan-assembler-times "\n\t\.type\t_Z3foov, @gnu_indirect_function\n" 0 } } */ -/* { dg-final { scan-assembler-times "\n\t\.set\t_Z3foov,_Z3foov\.resolver\n" 0 } } */ +/* { dg-final { scan-assembler-times "\n\t\.type\t_Z3foov, @gnu_indirect_function\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\t\.set\t_Z3foov,_Z3foov\.resolver\n" 1 } } */ /* { dg-final { scan-assembler-times "\n_Z3fooi\.default:\n" 1 } } */ /* { dg-final { scan-assembler-times "\n_Z3fooi\.arch__v:\n" 1 } } */ /* { dg-final { scan-assembler-times "\n_Z3fooi\.arch__zba__zbb:\n" 1 } } */ -/* { dg-final { scan-assembler-times "\n_Z3fooi\.resolver:\n" 0 } } */ +/* { dg-final { scan-assembler-times "\n_Z3fooi\.resolver:\n" 1 } } */ /* { dg-final { scan-assembler-times "\n\tcall\t_Z3fooi\n" 0 } } */ -/* { dg-final { scan-assembler-times "\n\t\.type\t_Z3fooi, @gnu_indirect_function\n" 0 } } */ -/* { dg-final { scan-assembler-times "\n\t\.set\t_Z3fooi,_Z3fooi\.resolver\n" 0 } } */ +/* { dg-final { scan-assembler-times "\n\t\.type\t_Z3fooi, @gnu_indirect_function\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\t\.set\t_Z3fooi,_Z3fooi\.resolver\n" 1 } } */ diff --git a/gcc/testsuite/g++.target/riscv/mv-symbols3.C b/gcc/testsuite/g++.target/riscv/mv-symbols3.C index 6596a277f6a9..2a7b2bc8e429 100644 --- a/gcc/testsuite/g++.target/riscv/mv-symbols3.C +++ b/gcc/testsuite/g++.target/riscv/mv-symbols3.C @@ -36,10 +36,10 @@ int bar() /* { dg-final { scan-assembler-times "\n_Z3foov\.default:\n" 0 } } */ /* { dg-final { scan-assembler-times "\n_Z3foov\.arch__v:\n" 0 } } */ /* { dg-final { scan-assembler-times "\n_Z3foov\.arch__zba__zbb:\n" 0 } } */ -/* { dg-final { scan-assembler-times "\n_Z3foov\.resolver:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n_Z3foov\.resolver:\n" 0 } } */ /* { dg-final { scan-assembler-times "\n\tcall\t_Z3foov(?:@plt)?\n" 1 } } */ -/* { dg-final { scan-assembler-times "\n\t\.type\t_Z3foov, @gnu_indirect_function\n" 1 } } */ -/* { dg-final { scan-assembler-times "\n\t\.set\t_Z3foov,_Z3foov\.resolver\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\t\.type\t_Z3foov, @gnu_indirect_function\n" 0 } } */ +/* { dg-final { scan-assembler-times "\n\t\.set\t_Z3foov,_Z3foov\.resolver\n" 0 } } */ /* { dg-final { scan-assembler-times "\n_Z3fooi\.default:\n" 0 } } */ /* { dg-final { scan-assembler-times "\n_Z3fooi\.arch__v:\n" 0 } } */ diff --git a/gcc/testsuite/g++.target/riscv/mv-symbols4.C b/gcc/testsuite/g++.target/riscv/mv-symbols4.C index 83d51e337066..7665e775239b 100644 --- a/gcc/testsuite/g++.target/riscv/mv-symbols4.C +++ b/gcc/testsuite/g++.target/riscv/mv-symbols4.C @@ -50,7 +50,7 @@ int bar() /* { dg-final { scan-assembler-times "\n_Z3fooi\.default:\n" 1 } } */ /* { dg-final { scan-assembler-times "\n_Z3fooi\.arch__v:\n" 0 } } */ /* { dg-final { scan-assembler-times "\n_Z3fooi\.arch__zba__zbb:\n" 0 } } */ -/* { dg-final { scan-assembler-times "\n_Z3fooi\.resolver:\n" 0 } } */ +/* { dg-final { scan-assembler-times "\n_Z3fooi\.resolver:\n" 1 } } */ /* { dg-final { scan-assembler-times "\n\tcall\t_Z3fooi(?:@plt)?\n" 0 } } */ -/* { dg-final { scan-assembler-times "\n\t\.type\t_Z3fooi, @gnu_indirect_function\n" 0 } } */ -/* { dg-final { scan-assembler-times "\n\t\.set\t_Z3fooi,_Z3fooi\.resolver\n" 0 } } */ +/* { dg-final { scan-assembler-times "\n\t\.type\t_Z3fooi, @gnu_indirect_function\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\t\.set\t_Z3fooi,_Z3fooi\.resolver\n" 1 } } */ diff --git a/gcc/testsuite/g++.target/riscv/mv-symbols5.C b/gcc/testsuite/g++.target/riscv/mv-symbols5.C index c92421ab0fb3..5ca31851618d 100644 --- a/gcc/testsuite/g++.target/riscv/mv-symbols5.C +++ b/gcc/testsuite/g++.target/riscv/mv-symbols5.C @@ -48,10 +48,10 @@ int bar() /* { dg-final { scan-assembler-times "\n_Z3foov\.default:\n" 0 } } */ /* { dg-final { scan-assembler-times "\n_Z3foov\.arch__v:\n" 1 } } */ /* { dg-final { scan-assembler-times "\n_Z3foov\.arch__zba__zbb:\n" 1 } } */ -/* { dg-final { scan-assembler-times "\n_Z3foov\.resolver:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n_Z3foov\.resolver:\n" 0 } } */ /* { dg-final { scan-assembler-times "\n\tcall\t_Z3foov(?:@plt)?\n" 1 } } */ -/* { dg-final { scan-assembler-times "\n\t\.type\t_Z3foov, @gnu_indirect_function\n" 1 } } */ -/* { dg-final { scan-assembler-times "\n\t\.set\t_Z3foov,_Z3foov\.resolver\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\t\.type\t_Z3foov, @gnu_indirect_function\n" 0 } } */ +/* { dg-final { scan-assembler-times "\n\t\.set\t_Z3foov,_Z3foov\.resolver\n" 0 } } */ /* { dg-final { scan-assembler-times "\n_Z3fooi\.default:\n" 0 } } */ /* { dg-final { scan-assembler-times "\n_Z3fooi\.arch__v:\n" 1 } } */ diff --git a/gcc/testsuite/g++.target/riscv/mvc-symbols3.C b/gcc/testsuite/g++.target/riscv/mvc-symbols3.C index 78f027b0457e..e3987eaa75a5 100644 --- a/gcc/testsuite/g++.target/riscv/mvc-symbols3.C +++ b/gcc/testsuite/g++.target/riscv/mvc-symbols3.C @@ -28,15 +28,15 @@ int bar(int x) /* { dg-final { scan-assembler-times "\n_Z3foov\.default:\n" 0 } } */ /* { dg-final { scan-assembler-times "\n_Z3foov\.arch__v:\n" 0 } } */ /* { dg-final { scan-assembler-times "\n_Z3foov\.arch__zba__zbb:\n" 0 } } */ -/* { dg-final { scan-assembler-times "\n_Z3foov\.resolver:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n_Z3foov\.resolver:\n" 0 } } */ /* { dg-final { scan-assembler-times "\n\tcall\t_Z3foov(?:@plt)?\n" 1 } } */ -/* { dg-final { scan-assembler-times "\n\t\.type\t_Z3foov, @gnu_indirect_function\n" 1 } } */ -/* { dg-final { scan-assembler-times "\n\t\.set\t_Z3foov,_Z3foov\.resolver\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\t\.type\t_Z3foov, @gnu_indirect_function\n" 0 } } */ +/* { dg-final { scan-assembler-times "\n\t\.set\t_Z3foov,_Z3foov\.resolver\n" 0 } } */ /* { dg-final { scan-assembler-times "\n_Z3fooi\.default:\n" 0 } } */ /* { dg-final { scan-assembler-times "\n_Z3fooi\.arch__v:\n" 0 } } */ /* { dg-final { scan-assembler-times "\n_Z3fooi\.arch__zba__zbb:\n" 0 } } */ -/* { dg-final { scan-assembler-times "\n_Z3fooi\.resolver:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n_Z3fooi\.resolver:\n" 0 } } */ /* { dg-final { scan-assembler-times "\n\tcall\t_Z3fooi(?:@plt)?\n" 1 } } */ -/* { dg-final { scan-assembler-times "\n\t\.type\t_Z3fooi, @gnu_indirect_function\n" 1 } } */ -/* { dg-final { scan-assembler-times "\n\t\.set\t_Z3fooi,_Z3fooi\.resolver\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\t\.type\t_Z3fooi, @gnu_indirect_function\n" 0 } } */ +/* { dg-final { scan-assembler-times "\n\t\.set\t_Z3fooi,_Z3fooi\.resolver\n" 0 } } */ diff --git a/gcc/testsuite/gcc.c-torture/compile/pr122066.c b/gcc/testsuite/gcc.c-torture/compile/pr122066.c new file mode 100644 index 000000000000..5fecb7f02b8a --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/pr122066.c @@ -0,0 +1,18 @@ +/* PR target/122066 -- adddi3/subdi3 mishandle POST_INC/PRE_DEC dest on m68k */ + +struct { + long long wp_ssd[3]; + long long wp_sum[3]; +} m_lowres; +void calcAdaptiveQuantFrame() { + for (int i = 0; i < 3; i++) { + long sum = m_lowres.wp_sum[i]; + long long ssd = m_lowres.wp_ssd[i]; + m_lowres.wp_ssd[i] = ssd - sum; + } + for (int i = 0; i < 3; i++) { + long sum = m_lowres.wp_sum[i]; + long long ssd = m_lowres.wp_ssd[i]; + m_lowres.wp_ssd[i] = ssd + sum; + } +} diff --git a/gcc/testsuite/gcc.dg/Wmultiple-parameter-fwd-decl-lists.c b/gcc/testsuite/gcc.dg/Wmultiple-parameter-fwd-decl-lists.c new file mode 100644 index 000000000000..c3edbf6a4940 --- /dev/null +++ b/gcc/testsuite/gcc.dg/Wmultiple-parameter-fwd-decl-lists.c @@ -0,0 +1,6 @@ +/* { dg-do compile } */ +/* { dg-options "-Wmultiple-parameter-fwd-decl-lists" } */ + +void f(int n, int m; int n, int m); +void g(int n; int m; int n, int m); /* { dg-warning "more than one list of forward declarations" } */ +void h(int n; int n; int n); /* { dg-warning "more than one list of forward declarations" } */ diff --git a/gcc/testsuite/gcc.dg/Wreturn-nested-1.c b/gcc/testsuite/gcc.dg/Wreturn-nested-1.c new file mode 100644 index 000000000000..36413ffa8498 --- /dev/null +++ b/gcc/testsuite/gcc.dg/Wreturn-nested-1.c @@ -0,0 +1,56 @@ +/* { dg-do compile } */ +/* { dg-options "-Wreturn-local-addr" } */ + +typedef int (*fun_t)(); + +fun_t foo() +{ + int bar() { return 1; } + return bar; +} + +fun_t foo0(int n) +{ + int bar() { return sizeof(n); } + return bar; +} + +fun_t foo1() +{ + constexpr int i = 1; + int bar() { return i; } + return bar; +} + +fun_t foo2() +{ + static int i = 1; + int bar() { return i; } + return bar; +} + +fun_t foo3() +{ + static int i = 1; + int bar() { return i; } + int bar2() { return bar(); } + return bar2; +} + +fun_t foo4() +{ + enum { E = 1 }; + int bar() { return E; } + return bar; +} + +fun_t foo5() +{ + int bar() { + int n = 3; + int foo() { return n; }; + return foo(); + } + return bar; +} + diff --git a/gcc/testsuite/gcc.dg/Wreturn-nested-2.c b/gcc/testsuite/gcc.dg/Wreturn-nested-2.c new file mode 100644 index 000000000000..74f72fa68492 --- /dev/null +++ b/gcc/testsuite/gcc.dg/Wreturn-nested-2.c @@ -0,0 +1,81 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target trampolines } */ +/* { dg-options "-Wreturn-local-addr" } */ +/* { dg-skip-if "" { *-*-darwin2* } } */ + +typedef int (*fun_t)(); + +fun_t foo4(int n) +{ + typedef int a[n]; + int bar() { return sizeof(a); } + return bar; /* { dg-warning "address of nested function" } */ +} + +fun_t foo5(int n) +{ + int a[n]; + int bar() { return sizeof(a); } + return bar; /* { dg-warning "address of nested function" } */ +} + +fun_t foo6(int n) +{ + typedef int a[n]; + int bar() { a x; return 1; } + return bar; /* { dg-warning "address of nested function" } */ +} + +fun_t foo7(int n) +{ + typedef int a[n]; + int bar() { (a*)nullptr; return 1; } + return bar; /* { dg-warning "address of nested function" } */ +} + +fun_t foo8(int n) +{ + auto int bar(); + return bar; /* { dg-warning "address of nested function" } */ + int bar() { return n; } +} + +fun_t foo9(int n) +{ + int bar() { return n; } + int bar2() { return bar(); } + return bar2; /* { dg-warning "address of nested function" } */ +} + +fun_t foo10(int n) +{ + int bar() + { + int bar2() { return n; } + return bar2(); + } + return bar; /* { dg-warning "address of nested function" } */ +} + +fun_t foo11() +{ + constexpr int a = 1; + int bar() { const int *ap = &a; return *ap; } + return bar; /* { dg-warning "address of nested function" } */ +} + +fun_t foo12(int n) +{ + static int (*a)[n]; + int bar() { typeof(a) b; return sizeof *b; } + return bar; /* { dg-warning "address of nested function" } */ +} + +fun_t foo13(int n) +{ + int (*bar())[n] { return nullptr; } + int bar2() { return sizeof *(*bar)(); } + return bar2; /* { dg-warning "address of nested function" } */ +} + + diff --git a/gcc/testsuite/gcc.dg/Wtrampolines-2.c b/gcc/testsuite/gcc.dg/Wtrampolines-2.c new file mode 100644 index 000000000000..bc2b9314b271 --- /dev/null +++ b/gcc/testsuite/gcc.dg/Wtrampolines-2.c @@ -0,0 +1,62 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target trampolines } */ +/* { dg-options "-O0 -Wtrampolines" } */ +/* { dg-skip-if "" { *-*-darwin2* } } */ + + + +// Test that we do not create a trampoline even without optimization. + +void g(int (*)()); + +void foo() +{ + int bar() { return 1; } + g(bar); +} + +void foo0(int n) +{ + int bar() { return sizeof(n); } + g(bar); +} + +void foo1() +{ + constexpr int i = 1; + int bar() { return i; } + g(bar); +} + +void foo2() +{ + static int i = 1; + int bar() { return i; } + g(bar); +} + +void foo3() +{ + static int i = 1; + int bar() { return i; } + int bar2() { return bar(); } + g(bar2); +} + +void foo4() +{ + enum { E = 1 }; + int bar() { return E; } + g(bar); +} + +void foo5() +{ + int bar() { + int n = 3; + int foo() { return n; }; + return foo(); + } + g(bar); +} + diff --git a/gcc/testsuite/gcc.dg/Wtrampolines-3.c b/gcc/testsuite/gcc.dg/Wtrampolines-3.c new file mode 100644 index 000000000000..43d6bcefcf83 --- /dev/null +++ b/gcc/testsuite/gcc.dg/Wtrampolines-3.c @@ -0,0 +1,88 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target trampolines } */ +/* { dg-options "-Wtrampolines" } */ +/* { dg-skip-if "" { *-*-darwin2* } } */ + + +// Test that we do generate trampolines where this is required. + +void g(int (*)()); + +void foo4(int n) +{ + typedef int a[n]; + int bar() { return sizeof(a); } /* { dg-warning "trampoline generated" } */ + g(bar); +} + +void foo5(int n) +{ + int a[n]; + int bar() { return sizeof(a); } /* { dg-warning "trampoline generated" } */ + g(bar); +} + +void foo6(int n) +{ + typedef int a[n]; + int bar() { a x; return 1; } /* { dg-warning "trampoline generated" } */ + g(bar); +} + +void foo7(int n) +{ + typedef int a[n]; + int bar() { (a*)nullptr; return 1; } /* { dg-warning "trampoline generated" } */ + g(bar); +} + +void foo8(int n) +{ + auto int bar(); + g(bar); + int bar() { return n; } /* { dg-warning "trampoline generated" } */ +} + +void foo9(int n) +{ + int bar() { return n; } + int bar2() { return bar(); } /* { dg-warning "trampoline generated" } */ + g(bar2); +} + +void foo10(int n) +{ + int bar() /* { dg-warning "trampoline generated" } */ + { + int bar2() { return n; } + return bar2(); + } + g(bar); +} + +void foo11() +{ + constexpr int a = 1; + int bar() /* { dg-warning "trampoline generated" } */ + { + const int *ap = &a; + return *ap; + } + g(bar); +} + +void foo12(int n) +{ + static int (*a)[n]; + int bar() { typeof(a) b; return sizeof *b; } /* { dg-warning "trampoline generated" } */ + g(bar); +} + +void foo13(int n) +{ + int (*bar())[n] { return nullptr; } + int bar2() { return sizeof *(*bar)(); } /* { dg-warning "trampoline generated" } */ + g(bar2); +} + + diff --git a/gcc/testsuite/gcc.dg/asm-hard-reg-error-1.c b/gcc/testsuite/gcc.dg/asm-hard-reg-error-1.c index 0d7c2f210d83..0a31c8508c76 100644 --- a/gcc/testsuite/gcc.dg/asm-hard-reg-error-1.c +++ b/gcc/testsuite/gcc.dg/asm-hard-reg-error-1.c @@ -1,4 +1,4 @@ -/* { dg-do compile { target aarch64*-*-* arm*-*-* i?86-*-* powerpc*-*-* riscv*-*-* s390*-*-* x86_64-*-* } } */ +/* { dg-do compile { target aarch64*-*-* arm*-*-* i?86-*-* powerpc*-*-* pru*-*-* riscv*-*-* s390*-*-* x86_64-*-* } } */ #if defined (__aarch64__) # define GPR1_RAW "x0" @@ -20,6 +20,11 @@ # define GPR2 "{r5}" # define GPR3 "{r6}" # define INVALID_GPR_A "{r33}" +#elif defined (__PRU__) +# define GPR1_RAW "r20" +# define GPR2 "{r21}" +# define GPR3 "{r22}" +# define INVALID_GPR_A "{r34}" #elif defined (__riscv) # define GPR1_RAW "t4" # define GPR2 "{t5}" diff --git a/gcc/testsuite/gcc.dg/asm-hard-reg-error-4.c b/gcc/testsuite/gcc.dg/asm-hard-reg-error-4.c index 465f24b1f716..c1e07c9f930d 100644 --- a/gcc/testsuite/gcc.dg/asm-hard-reg-error-4.c +++ b/gcc/testsuite/gcc.dg/asm-hard-reg-error-4.c @@ -1,21 +1,35 @@ -/* { dg-do compile } */ +/* { dg-do compile { target lra } } */ /* Verify output operands. */ +#if defined __hppa__ +# define R0 "20" +# define R1 "21" +#elif defined __AVR__ +# define R0 "20" +# define R1 "24" +#elif defined __PRU__ +# define R0 "0" +# define R1 "4" +#else +# define R0 "0" +# define R1 "1" +#endif + int test (void) { int x; - register int y __asm__ ("0"); + register int y __asm__ (R0); /* Preserve status quo and don't error out. */ __asm__ ("" : "=r" (x), "=r" (x)); /* Be more strict for hard register constraints and error out. */ - __asm__ ("" : "={0}" (x), "={1}" (x)); /* { dg-error "multiple outputs to lvalue 'x'" } */ + __asm__ ("" : "={"R0"}" (x), "={"R1"}" (x)); /* { dg-error "multiple outputs to lvalue 'x'" } */ /* Still error out in case of a mixture. */ - __asm__ ("" : "=r" (x), "={1}" (x)); /* { dg-error "multiple outputs to lvalue 'x'" } */ + __asm__ ("" : "=r" (x), "={"R1"}" (x)); /* { dg-error "multiple outputs to lvalue 'x'" } */ return x + y; } diff --git a/gcc/testsuite/gcc.dg/asm-hard-reg-error-5.c b/gcc/testsuite/gcc.dg/asm-hard-reg-error-5.c index 85398f04cc88..6588b09c3778 100644 --- a/gcc/testsuite/gcc.dg/asm-hard-reg-error-5.c +++ b/gcc/testsuite/gcc.dg/asm-hard-reg-error-5.c @@ -1,13 +1,27 @@ -/* { dg-do compile } */ +/* { dg-do compile { target lra } } */ /* Test clobbers. See asm-hard-reg-error-{2,3}.c for tests involving register pairs. */ +#if defined __hppa__ +# define R0 "20" +# define R1 "21" +#elif defined __AVR__ +# define R0 "20" +# define R1 "24" +#elif defined __PRU__ +# define R0 "0" +# define R1 "4" +#else +# define R0 "0" +# define R1 "1" +#endif + int test (void) { int x, y; - __asm__ ("" : "={0}" (x), "={1}" (y) : : "1"); /* { dg-error "hard register constraint for output 1 conflicts with 'asm' clobber list" } */ - __asm__ ("" : "={0}" (x) : "{0}" (y), "{1}" (y) : "1"); /* { dg-error "hard register constraint for input 1 conflicts with 'asm' clobber list" } */ + __asm__ ("" : "={"R0"}" (x), "={"R1"}" (y) : : R1); /* { dg-error "hard register constraint for output 1 conflicts with 'asm' clobber list" } */ + __asm__ ("" : "={"R0"}" (x) : "{"R0"}" (y), "{"R1"}" (y) : R1); /* { dg-error "hard register constraint for input 1 conflicts with 'asm' clobber list" } */ return x + y; } diff --git a/gcc/testsuite/gcc.dg/atomic-compare-exchange-5.c b/gcc/testsuite/gcc.dg/atomic-compare-exchange-5.c index f5d071affe8f..8d0b46262183 100644 --- a/gcc/testsuite/gcc.dg/atomic-compare-exchange-5.c +++ b/gcc/testsuite/gcc.dg/atomic-compare-exchange-5.c @@ -3,6 +3,7 @@ /* { dg-do run } */ /* { dg-require-effective-target sync_int_128_runtime } */ /* { dg-options "-mcx16" { target { i?86-*-* x86_64-*-* } } } */ +/* { dg-options "-mlsx -mscq" { target { loongarch64-*-* } } } */ /* Test the execution of __atomic_compare_exchange_n builtin for an int_128. */ diff --git a/gcc/testsuite/gcc.dg/atomic-exchange-5.c b/gcc/testsuite/gcc.dg/atomic-exchange-5.c index 190377f0cd55..ec3837dfdcf0 100644 --- a/gcc/testsuite/gcc.dg/atomic-exchange-5.c +++ b/gcc/testsuite/gcc.dg/atomic-exchange-5.c @@ -3,6 +3,7 @@ /* { dg-do run } */ /* { dg-require-effective-target sync_int_128_runtime } */ /* { dg-options "-mcx16" { target { i?86-*-* x86_64-*-* } } } */ +/* { dg-options "-mlsx -mscq" { target { loongarch64-*-* } } } */ /* Test the execution of the __atomic_X builtin for a 16 byte value. */ diff --git a/gcc/testsuite/gcc.dg/atomic-load-5.c b/gcc/testsuite/gcc.dg/atomic-load-5.c index d37d64248927..1cb2baabc7d1 100644 --- a/gcc/testsuite/gcc.dg/atomic-load-5.c +++ b/gcc/testsuite/gcc.dg/atomic-load-5.c @@ -3,6 +3,7 @@ /* { dg-do run } */ /* { dg-require-effective-target sync_int_128_runtime } */ /* { dg-options "-mcx16" { target { i?86-*-* x86_64-*-* } } } */ +/* { dg-options "-mlsx -mscq" { target { loongarch64-*-* } } } */ extern void abort(void); diff --git a/gcc/testsuite/gcc.dg/atomic-op-5.c b/gcc/testsuite/gcc.dg/atomic-op-5.c index 1407f3fe3b24..4c6dcef8bf23 100644 --- a/gcc/testsuite/gcc.dg/atomic-op-5.c +++ b/gcc/testsuite/gcc.dg/atomic-op-5.c @@ -3,6 +3,7 @@ /* { dg-do run } */ /* { dg-require-effective-target sync_int_128_runtime } */ /* { dg-options "-mcx16" { target { i?86-*-* x86_64-*-* } } } */ +/* { dg-options "-mlsx -mscq" { target { loongarch64-*-* } } } */ /* Test the execution of the __atomic_*OP builtin routines for an int_128. */ diff --git a/gcc/testsuite/gcc.dg/atomic-store-5.c b/gcc/testsuite/gcc.dg/atomic-store-5.c index a855182bf49c..4bc379c722b2 100644 --- a/gcc/testsuite/gcc.dg/atomic-store-5.c +++ b/gcc/testsuite/gcc.dg/atomic-store-5.c @@ -3,6 +3,7 @@ /* { dg-do run } */ /* { dg-require-effective-target sync_int_128_runtime } */ /* { dg-options "-mcx16" { target { i?86-*-* x86_64-*-* } } } */ +/* { dg-options "-mlsx -mscq" { target { loongarch64-*-* } } } */ /* Test the execution of the __atomic_store_n builtin for a 16 byte value. */ diff --git a/gcc/testsuite/gcc.dg/atomic-store-6.c b/gcc/testsuite/gcc.dg/atomic-store-6.c index 81499cd716b3..78bf2aa02f5d 100644 --- a/gcc/testsuite/gcc.dg/atomic-store-6.c +++ b/gcc/testsuite/gcc.dg/atomic-store-6.c @@ -1,6 +1,7 @@ /* { dg-do run } */ /* { dg-require-effective-target sync_int_128_runtime } */ /* { dg-options "-mcx16" { target { i?86-*-* x86_64-*-* } } } */ +/* { dg-options "-mlsx -mscq" { target { loongarch64-*-* } } } */ __int128_t i; diff --git a/gcc/testsuite/gcc.dg/bitint-126.c b/gcc/testsuite/gcc.dg/bitint-126.c new file mode 100644 index 000000000000..62dfadd6bbfd --- /dev/null +++ b/gcc/testsuite/gcc.dg/bitint-126.c @@ -0,0 +1,26 @@ +/* PR middle-end/121828 */ +/* { dg-do compile { target bitint } } */ +/* { dg-options "-std=c23 -O2" } */ + +void baz (int); +#if __BITINT_MAXWIDTH__ >= 255 +unsigned _BitInt(255) a; + +void +foo (int x, int y) +{ + unsigned _BitInt(255) b; + int t = __builtin_sub_overflow (y, x, &b); + baz (t); + a = b; +} + +void +bar (int x, int y) +{ + unsigned _BitInt(255) b; + bool t = __builtin_sub_overflow (y, x, &b); + a = b; + baz (t); +} +#endif diff --git a/gcc/testsuite/gcc.dg/builtin-unreachable-5.c b/gcc/testsuite/gcc.dg/builtin-unreachable-5.c index ba87bdd735e2..91e6dcc3db13 100644 --- a/gcc/testsuite/gcc.dg/builtin-unreachable-5.c +++ b/gcc/testsuite/gcc.dg/builtin-unreachable-5.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -fdump-tree-fab1" } */ +/* { dg-options "-O2 -fdump-tree-optimized" } */ int foo (int a) @@ -16,7 +16,7 @@ foo (int a) return a > 0; } -/* { dg-final { scan-tree-dump-times "if \\(" 0 "fab1" } } */ -/* { dg-final { scan-tree-dump-times "goto" 0 "fab1" } } */ -/* { dg-final { scan-tree-dump-times "L1:" 0 "fab1" } } */ -/* { dg-final { scan-tree-dump-times "__builtin_unreachable" 0 "fab1" } } */ +/* { dg-final { scan-tree-dump-times "if \\(" 0 "optimized" } } */ +/* { dg-final { scan-tree-dump-times "goto" 0 "optimized" } } */ +/* { dg-final { scan-tree-dump-times "L1:" 0 "optimized" } } */ +/* { dg-final { scan-tree-dump-times "__builtin_unreachable" 0 "optimized" } } */ diff --git a/gcc/testsuite/gcc.dg/builtin-unreachable-6.c b/gcc/testsuite/gcc.dg/builtin-unreachable-6.c index 4c3b9bbaefd0..c896ad4e39ce 100644 --- a/gcc/testsuite/gcc.dg/builtin-unreachable-6.c +++ b/gcc/testsuite/gcc.dg/builtin-unreachable-6.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -fdump-tree-fab1 -fno-tree-dominator-opts -fno-tree-vrp" } */ +/* { dg-options "-O2 -fdump-tree-optimized -fno-tree-dominator-opts -fno-tree-vrp" } */ /* { dg-require-effective-target label_values } */ void @@ -17,5 +17,5 @@ foo (int b, int c) goto *x; } -/* { dg-final { scan-tree-dump-times "lab:" 1 "fab1" } } */ -/* { dg-final { scan-tree-dump-times "__builtin_unreachable" 1 "fab1" } } */ +/* { dg-final { scan-tree-dump-times "lab:" 1 "optimized" } } */ +/* { dg-final { scan-tree-dump-times "__builtin_unreachable" 1 "optimized" } } */ diff --git a/gcc/testsuite/gcc.dg/builtin-unreachable-6a.c b/gcc/testsuite/gcc.dg/builtin-unreachable-6a.c index f527f2edc3b2..53062352d420 100644 --- a/gcc/testsuite/gcc.dg/builtin-unreachable-6a.c +++ b/gcc/testsuite/gcc.dg/builtin-unreachable-6a.c @@ -1,7 +1,7 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -fdump-tree-fab1" } */ +/* { dg-options "-O2 -fdump-tree-optimized" } */ #include "builtin-unreachable-6.c" -/* { dg-final { scan-tree-dump-times "lab:" 1 "fab1" } } */ -/* { dg-final { scan-tree-dump-not "__builtin_unreachable" "fab1" } } */ +/* { dg-final { scan-tree-dump-times "lab:" 1 "optimized" } } */ +/* { dg-final { scan-tree-dump-not "__builtin_unreachable" "optimized" } } */ diff --git a/gcc/testsuite/gcc.dg/builtin-unreachable-7.c b/gcc/testsuite/gcc.dg/builtin-unreachable-7.c new file mode 100644 index 000000000000..0ff60b6550be --- /dev/null +++ b/gcc/testsuite/gcc.dg/builtin-unreachable-7.c @@ -0,0 +1,24 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fdump-tree-optimized -fno-tree-dominator-opts -fno-tree-vrp" } */ +/* { dg-require-effective-target label_values } */ + +void foo (int b, int c) +{ + __label__ lab; + __label__ lab2; + static void *x[2] = {&&lab, &&lab2}; + if (b == c) + { +lab: + __builtin_unreachable (); + } +lab2: + goto *x[c!=0]; +} + +/* Fab should still able to remove the conditional but leave the bb there. */ + +/* { dg-final { scan-tree-dump-times "lab:" 1 "optimized" } } */ +/* { dg-final { scan-tree-dump-times "__builtin_unreachable" 1 "optimized" } } */ +/* { dg-final { scan-tree-dump-not "if " "optimized" } } */ + diff --git a/gcc/testsuite/gcc.dg/c11-atomic-6.c b/gcc/testsuite/gcc.dg/c11-atomic-6.c new file mode 100644 index 000000000000..4bb771fe5962 --- /dev/null +++ b/gcc/testsuite/gcc.dg/c11-atomic-6.c @@ -0,0 +1,13 @@ +/* Test ICE accessing _Atomic void object. */ +/* { dg-do compile } */ +/* { dg-options "-std=c11" } */ + +extern _Atomic void x; + +void +f (void) +{ + /* This has undefined behavior (lvalue conversion on an incomplete type) but + should not produce an ICE. */ + x; +} diff --git a/gcc/testsuite/gcc.dg/c11-generic-2.c b/gcc/testsuite/gcc.dg/c11-generic-2.c index 90be650af280..a74838025386 100644 --- a/gcc/testsuite/gcc.dg/c11-generic-2.c +++ b/gcc/testsuite/gcc.dg/c11-generic-2.c @@ -11,7 +11,7 @@ f (int n) _Generic (n, default: 1, default: 2); /* { dg-error "duplicate .*default.* case" } */ /* Variably-modified type not ok. */ - _Generic (n, int[n]: 0, default: 1); /* { dg-error "variable length type" } */ + _Generic (n, int[n]: 0, default: 1); /* { dg-error "variably-modified" } */ /* Type must be complete. */ _Generic (n, struct incomplete: 0, default: 1); /* { dg-error "incomplete type" } */ _Generic (n, void: 0, default: 1); /* { dg-error "incomplete type" } */ diff --git a/gcc/testsuite/gcc.dg/c11-generic-4.c b/gcc/testsuite/gcc.dg/c11-generic-4.c new file mode 100644 index 000000000000..41309dff6318 --- /dev/null +++ b/gcc/testsuite/gcc.dg/c11-generic-4.c @@ -0,0 +1,38 @@ +/* Test references to never-defined static functions in _Generic: allowed in + certain places for C23 but not before. */ +/* { dg-do compile } */ +/* { dg-options "-std=c11 -pedantic-errors" } */ + +static int ok1_c23 (); /* { dg-error "used but never defined" } */ +static int ok2_c23 (); /* { dg-error "used but never defined" } */ +static int ok3_c23 (); /* { dg-error "used but never defined" } */ +static int ok4_c23 (); /* { dg-error "used but never defined" } */ +static int ok5_c23 (); /* { dg-error "used but never defined" } */ +static int ok6 (); +static int ok7 (); +static int ok8 (); +static int ok9 (); +static int ok10 (); +static int ok11 (); +static int ok12 (); +static int not_ok1 (); /* { dg-error "used but never defined" } */ +static int not_ok2 (); /* { dg-error "used but never defined" } */ + +void +f () +{ + _Generic (ok1_c23 (), int: 2); + _Generic (1, int: 2, default: ok2_c23 ()); + _Generic (1, default: ok3_c23 (), int: 3); + _Generic (1, int: 2, float: ok4_c23 ()); + _Generic (1, float: ok5_c23 (), int: 3); + sizeof (_Generic (ok8 (), int: 2)); + sizeof (_Generic (1, int: 2, default: ok9 ())); + sizeof (_Generic (1, default: ok10 (), int: 3)); + sizeof (_Generic (1, int: 2, float: ok11 ())); + sizeof (_Generic (1, float: ok12 (), int: 3)); + _Generic (1.0, int: 2, default: not_ok1 ()); + _Generic (1.0, default: not_ok2 (), int: 3); + sizeof (_Generic (1.0, int: 2, default: ok6 ())); + sizeof (_Generic (1.0, default: ok7 (), int: 3)); +} diff --git a/gcc/testsuite/gcc.dg/c23-array-negative-1.c b/gcc/testsuite/gcc.dg/c23-array-negative-1.c new file mode 100644 index 000000000000..c7d083300181 --- /dev/null +++ b/gcc/testsuite/gcc.dg/c23-array-negative-1.c @@ -0,0 +1,46 @@ +/* Test C2y constraint against negative array indices does not apply in + C23. */ +/* { dg-do compile } */ +/* { dg-options "-std=c23 -pedantic-errors" } */ + +int a[1], b[10]; +struct s { int a[2]; } x; +void *p; + +void +f () +{ + (void) a[0]; + (void) a[1]; + (void) a[12345]; + (void) a[-1]; + (void) a[-__LONG_LONG_MAX__]; + (void) b[0]; + (void) b[10]; + (void) b[12345]; + (void) b[-1]; + (void) b[-__LONG_LONG_MAX__]; + (void) x.a[0]; + (void) x.a[1]; + (void) x.a[12345]; + (void) x.a[-1]; + (void) x.a[-__LONG_LONG_MAX__]; + int c[1]; + (void) c[0]; + (void) c[1]; + (void) c[12345]; + (void) c[-1]; + (void) c[-__LONG_LONG_MAX__]; + (void) (*(int (*)[1]) p)[0]; + (void) (*(int (*)[1]) p)[1]; + (void) (*(int (*)[1]) p)[12345]; + (void) (*(int (*)[1]) p)[-1]; + (void) (*(int (*)[1]) p)[-__LONG_LONG_MAX__]; + /* This index is not an integer constant expression, so the constraint + against negative indices does not apply even in C2y. */ + (void) a[__LONG_LONG_MAX__ + 2]; + /* { dg-warning "integer overflow in expression" "overflow" { target *-*-* } .-1 } */ + /* Likewise, this is only an arithmetic constant expression, not an integer + constant expression. */ + (void) a[(int)-1.0]; +} diff --git a/gcc/testsuite/gcc.dg/c23-complit-9.c b/gcc/testsuite/gcc.dg/c23-complit-9.c new file mode 100644 index 000000000000..738f1a6213fd --- /dev/null +++ b/gcc/testsuite/gcc.dg/c23-complit-9.c @@ -0,0 +1,9 @@ +/* Test register _Atomic compound literals. */ +/* { dg-do compile } */ +/* { dg-options "-std=c23 -pedantic-errors" } */ + +void +f () +{ + (register _Atomic int) { 1 }; +} diff --git a/gcc/testsuite/gcc.dg/c23-generic-5.c b/gcc/testsuite/gcc.dg/c23-generic-5.c new file mode 100644 index 000000000000..4603ec829a29 --- /dev/null +++ b/gcc/testsuite/gcc.dg/c23-generic-5.c @@ -0,0 +1,38 @@ +/* Test references to never-defined static functions in _Generic: allowed in + certain places for C23 but not before. */ +/* { dg-do compile } */ +/* { dg-options "-std=c23 -pedantic-errors" } */ + +static int ok1_c23 (); +static int ok2_c23 (); +static int ok3_c23 (); +static int ok4_c23 (); +static int ok5_c23 (); +static int ok6 (); +static int ok7 (); +static int ok8 (); +static int ok9 (); +static int ok10 (); +static int ok11 (); +static int ok12 (); +static int not_ok1 (); /* { dg-error "used but never defined" } */ +static int not_ok2 (); /* { dg-error "used but never defined" } */ + +void +f () +{ + _Generic (ok1_c23 (), int: 2); + _Generic (1, int: 2, default: ok2_c23 ()); + _Generic (1, default: ok3_c23 (), int: 3); + _Generic (1, int: 2, float: ok4_c23 ()); + _Generic (1, float: ok5_c23 (), int: 3); + sizeof (_Generic (ok8 (), int: 2)); + sizeof (_Generic (1, int: 2, default: ok9 ())); + sizeof (_Generic (1, default: ok10 (), int: 3)); + sizeof (_Generic (1, int: 2, float: ok11 ())); + sizeof (_Generic (1, float: ok12 (), int: 3)); + _Generic (1.0, int: 2, default: not_ok1 ()); + _Generic (1.0, default: not_ok2 (), int: 3); + sizeof (_Generic (1.0, int: 2, default: ok6 ())); + sizeof (_Generic (1.0, default: ok7 (), int: 3)); +} diff --git a/gcc/testsuite/gcc.dg/c23-incomplete-1.c b/gcc/testsuite/gcc.dg/c23-incomplete-1.c new file mode 100644 index 000000000000..c80361a83470 --- /dev/null +++ b/gcc/testsuite/gcc.dg/c23-incomplete-1.c @@ -0,0 +1,36 @@ +/* Test C2y constraint against lvalue conversion of lvalues with incomplete + type: not applied in C23 mode. Although it is not clear that these + constructs are valid in C23, we allow certain cases of qualified void + there. */ +/* { dg-do compile } */ +/* { dg-options "-std=c23 -pedantic-errors" } */ + +struct s; +union u; + +extern struct s vs, *ps; +extern _Atomic struct s vas, *pas; +extern union u vu, *pu; +extern _Atomic union u vau, *pau; + +extern const void cv, *pcv; +extern _Atomic void av, *pav; + +void +f () +{ + vs; /* { dg-error "incomplete type" } */ + *ps; /* { dg-error "invalid use of undefined type" } */ + vas; /* { dg-error "incomplete type" } */ + *pas; /* { dg-error "invalid use of undefined type" } */ + vu; /* { dg-error "incomplete type" } */ + *pu; /* { dg-error "invalid use of undefined type" } */ + vau; /* { dg-error "incomplete type" } */ + *pau; /* { dg-error "invalid use of undefined type" } */ + cv; + *pcv; + /* { dg-warning "dereferencing" "dereferencing" { target *-*-* } .-1 } */ + av; + *pav; + /* { dg-warning "dereferencing" "dereferencing" { target *-*-* } .-1 } */ +} diff --git a/gcc/testsuite/gcc.dg/c23-incomplete-2.c b/gcc/testsuite/gcc.dg/c23-incomplete-2.c new file mode 100644 index 000000000000..3b435a14567e --- /dev/null +++ b/gcc/testsuite/gcc.dg/c23-incomplete-2.c @@ -0,0 +1,31 @@ +/* Test tentative definitions with incomplete type: OK in C2y with internal + linkage if completed by the end of the translation unit, but not allowed in + C23. Note that incomplete structs and unions are not diagnosed for C23 when + completed by the end of the translation unit (bug 88727). */ +/* { dg-do compile } */ +/* { dg-options "-std=c23 -pedantic-errors" } */ + +struct s1; +struct s2; +union u1; +union u2; + +struct s1 v1; +struct s2 v2; /* { dg-error "storage size" } */ +int v3[]; +int v4[]; /* { dg-warning "assumed to have one element" } */ +union u1 v5; +union u2 v6; /* { dg-error "storage size" } */ + +static struct s1 sv1; +static struct s2 sv2; /* { dg-error "storage size" } */ +static int sv3[]; /* { dg-error "array size missing" } */ +static int sv4[]; /* { dg-error "array size missing" } */ +/* { dg-warning "assumed to have one element" "one element" { target *-*-* } .-1 } */ +static union u1 sv5; +static union u2 sv6; /* { dg-error "storage size" } */ + +struct s1 { int x; }; +union u1 { int y; }; +extern int v3[1]; +extern int sv3[1]; diff --git a/gcc/testsuite/gcc.dg/c23-incomplete-3.c b/gcc/testsuite/gcc.dg/c23-incomplete-3.c new file mode 100644 index 000000000000..ebb4cf93a833 --- /dev/null +++ b/gcc/testsuite/gcc.dg/c23-incomplete-3.c @@ -0,0 +1,31 @@ +/* Test tentative definitions with incomplete type: OK in C2y with internal + linkage if completed by the end of the translation unit, but not allowed in + C23. Note that incomplete structs and unions are not diagnosed for C23 when + completed by the end of the translation unit (bug 88727). */ +/* { dg-do compile } */ +/* { dg-options "-std=c23 -pedantic" } */ + +struct s1; +struct s2; +union u1; +union u2; + +struct s1 v1; +struct s2 v2; /* { dg-error "storage size" } */ +int v3[]; +int v4[]; /* { dg-warning "assumed to have one element" } */ +union u1 v5; +union u2 v6; /* { dg-error "storage size" } */ + +static struct s1 sv1; +static struct s2 sv2; /* { dg-error "storage size" } */ +static int sv3[]; /* { dg-warning "array size missing" } */ +static int sv4[]; /* { dg-warning "array size missing" } */ +/* { dg-warning "assumed to have one element" "one element" { target *-*-* } .-1 } */ +static union u1 sv5; +static union u2 sv6; /* { dg-error "storage size" } */ + +struct s1 { int x; }; +union u1 { int y; }; +extern int v3[1]; +extern int sv3[1]; diff --git a/gcc/testsuite/gcc.dg/c23-incomplete-4.c b/gcc/testsuite/gcc.dg/c23-incomplete-4.c new file mode 100644 index 000000000000..6a8b6cc42305 --- /dev/null +++ b/gcc/testsuite/gcc.dg/c23-incomplete-4.c @@ -0,0 +1,30 @@ +/* Test tentative definitions with incomplete type: OK in C2y with internal + linkage if completed by the end of the translation unit, but not allowed in + C23. Note that incomplete structs and unions are not diagnosed for C23 when + completed by the end of the translation unit (bug 88727). */ +/* { dg-do compile } */ +/* { dg-options "-std=c23 -pedantic-errors -Wno-c23-c2y-compat" } */ + +struct s1; +struct s2; +union u1; +union u2; + +struct s1 v1; +struct s2 v2; /* { dg-error "storage size" } */ +int v3[]; +int v4[]; /* { dg-warning "assumed to have one element" } */ +union u1 v5; +union u2 v6; /* { dg-error "storage size" } */ + +static struct s1 sv1; +static struct s2 sv2; /* { dg-error "storage size" } */ +static int sv3[]; +static int sv4[]; /* { dg-warning "assumed to have one element" } */ +static union u1 sv5; +static union u2 sv6; /* { dg-error "storage size" } */ + +struct s1 { int x; }; +union u1 { int y; }; +extern int v3[1]; +extern int sv3[1]; diff --git a/gcc/testsuite/gcc.dg/c23-register-array-1.c b/gcc/testsuite/gcc.dg/c23-register-array-1.c new file mode 100644 index 000000000000..4aa482a4ee9d --- /dev/null +++ b/gcc/testsuite/gcc.dg/c23-register-array-1.c @@ -0,0 +1,48 @@ +/* Test C2y register array element access: not in C23. */ +/* { dg-do compile } */ +/* { dg-options "-std=c23 -pedantic-errors" } */ + +extern void abort (); +extern void exit (int); + +struct s { int a[10]; }; + +int +main () +{ + int n = 10; + register int a[1], b[20], c[n]; + register struct s v; + a[0] = 0; /* { dg-error "ISO C forbids subscripting 'register' array before C2Y" } */ + for (int i = 0; i < n; i++) + c[i] = i; /* { dg-error "ISO C forbids subscripting 'register' array before C2Y" } */ + for (int i = 0; i < 20; i++) + b[i] = i; /* { dg-error "ISO C forbids subscripting 'register' array before C2Y" } */ + for (int i = 0; i < 10; i++) + v.a[i] = i; /* { dg-error "ISO C forbids subscripting 'register' array before C2Y" } */ + for (int i = 0; i < n; i++) + if (c[i] != i) /* { dg-error "ISO C forbids subscripting 'register' array before C2Y" } */ + abort (); + for (int i = 0; i < 20; i++) + if (b[i] != i) /* { dg-error "ISO C forbids subscripting 'register' array before C2Y" } */ + abort (); + for (int i = 0; i < 10; i++) + if (v.a[i] != i) /* { dg-error "ISO C forbids subscripting 'register' array before C2Y" } */ + abort (); + if (a[0] != 0) /* { dg-error "ISO C forbids subscripting 'register' array before C2Y" } */ + abort (); + if ((register int[2]) { 2, 3 }[n / 10] != 3) /* { dg-error "ISO C forbids subscripting 'register' array before C2Y" } */ + abort (); + if ((register struct s) { 1, 2 }.a[n / 10] != 2) /* { dg-error "ISO C forbids subscripting 'register' array before C2Y" } */ + abort (); + if (false) + (void) a[12345]; /* { dg-error "ISO C forbids subscripting 'register' array before C2Y" } */ + if (false) + (void) b[23456]; /* { dg-error "ISO C forbids subscripting 'register' array before C2Y" } */ + if (false) + /* This index is not an integer constant expression, so the constraint + against negative indices does not apply. */ + (void) a[__INT_MAX__ + 2]; /* { dg-error "ISO C forbids subscripting 'register' array before C2Y" } */ + /* { dg-warning "integer overflow in expression" "overflow" { target *-*-* } .-1 } */ + exit (0); +} diff --git a/gcc/testsuite/gcc.dg/c23-register-array-2.c b/gcc/testsuite/gcc.dg/c23-register-array-2.c new file mode 100644 index 000000000000..225b6ca7a5df --- /dev/null +++ b/gcc/testsuite/gcc.dg/c23-register-array-2.c @@ -0,0 +1,48 @@ +/* Test C2y register array element access: C23 warning with -pedantic. */ +/* { dg-do run } */ +/* { dg-options "-std=c23 -pedantic" } */ + +extern void abort (); +extern void exit (int); + +struct s { int a[10]; }; + +int +main () +{ + int n = 10; + register int a[1], b[20], c[n]; + register struct s v; + a[0] = 0; /* { dg-warning "ISO C forbids subscripting 'register' array before C2Y" } */ + for (int i = 0; i < n; i++) + c[i] = i; /* { dg-warning "ISO C forbids subscripting 'register' array before C2Y" } */ + for (int i = 0; i < 20; i++) + b[i] = i; /* { dg-warning "ISO C forbids subscripting 'register' array before C2Y" } */ + for (int i = 0; i < 10; i++) + v.a[i] = i; /* { dg-warning "ISO C forbids subscripting 'register' array before C2Y" } */ + for (int i = 0; i < n; i++) + if (c[i] != i) /* { dg-warning "ISO C forbids subscripting 'register' array before C2Y" } */ + abort (); + for (int i = 0; i < 20; i++) + if (b[i] != i) /* { dg-warning "ISO C forbids subscripting 'register' array before C2Y" } */ + abort (); + for (int i = 0; i < 10; i++) + if (v.a[i] != i) /* { dg-warning "ISO C forbids subscripting 'register' array before C2Y" } */ + abort (); + if (a[0] != 0) /* { dg-warning "ISO C forbids subscripting 'register' array before C2Y" } */ + abort (); + if ((register int[2]) { 2, 3 }[n / 10] != 3) /* { dg-warning "ISO C forbids subscripting 'register' array before C2Y" } */ + abort (); + if ((register struct s) { 1, 2 }.a[n / 10] != 2) /* { dg-warning "ISO C forbids subscripting 'register' array before C2Y" } */ + abort (); + if (false) + (void) a[12345]; /* { dg-warning "ISO C forbids subscripting 'register' array before C2Y" } */ + if (false) + (void) b[23456]; /* { dg-warning "ISO C forbids subscripting 'register' array before C2Y" } */ + if (false) + /* This index is not an integer constant expression, so the constraint + against negative indices does not apply. */ + (void) a[__INT_MAX__ + 2]; /* { dg-warning "ISO C forbids subscripting 'register' array before C2Y" } */ + /* { dg-warning "integer overflow in expression" "overflow" { target *-*-* } .-1 } */ + exit (0); +} diff --git a/gcc/testsuite/gcc.dg/c23-register-array-3.c b/gcc/testsuite/gcc.dg/c23-register-array-3.c new file mode 100644 index 000000000000..2312cfe694df --- /dev/null +++ b/gcc/testsuite/gcc.dg/c23-register-array-3.c @@ -0,0 +1,49 @@ +/* Test C2y register array element access: C23 warning with + -Wc23-c2y-compat. */ +/* { dg-do run } */ +/* { dg-options "-std=c23 -Wc23-c2y-compat" } */ + +extern void abort (); +extern void exit (int); + +struct s { int a[10]; }; + +int +main () +{ + int n = 10; + register int a[1], b[20], c[n]; + register struct s v; + a[0] = 0; /* { dg-warning "ISO C forbids subscripting 'register' array before C2Y" } */ + for (int i = 0; i < n; i++) + c[i] = i; /* { dg-warning "ISO C forbids subscripting 'register' array before C2Y" } */ + for (int i = 0; i < 20; i++) + b[i] = i; /* { dg-warning "ISO C forbids subscripting 'register' array before C2Y" } */ + for (int i = 0; i < 10; i++) + v.a[i] = i; /* { dg-warning "ISO C forbids subscripting 'register' array before C2Y" } */ + for (int i = 0; i < n; i++) + if (c[i] != i) /* { dg-warning "ISO C forbids subscripting 'register' array before C2Y" } */ + abort (); + for (int i = 0; i < 20; i++) + if (b[i] != i) /* { dg-warning "ISO C forbids subscripting 'register' array before C2Y" } */ + abort (); + for (int i = 0; i < 10; i++) + if (v.a[i] != i) /* { dg-warning "ISO C forbids subscripting 'register' array before C2Y" } */ + abort (); + if (a[0] != 0) /* { dg-warning "ISO C forbids subscripting 'register' array before C2Y" } */ + abort (); + if ((register int[2]) { 2, 3 }[n / 10] != 3) /* { dg-warning "ISO C forbids subscripting 'register' array before C2Y" } */ + abort (); + if ((register struct s) { 1, 2 }.a[n / 10] != 2) /* { dg-warning "ISO C forbids subscripting 'register' array before C2Y" } */ + abort (); + if (false) + (void) a[12345]; /* { dg-warning "ISO C forbids subscripting 'register' array before C2Y" } */ + if (false) + (void) b[23456]; /* { dg-warning "ISO C forbids subscripting 'register' array before C2Y" } */ + if (false) + /* This index is not an integer constant expression, so the constraint + against negative indices does not apply. */ + (void) a[__INT_MAX__ + 2]; /* { dg-warning "ISO C forbids subscripting 'register' array before C2Y" } */ + /* { dg-warning "integer overflow in expression" "overflow" { target *-*-* } .-1 } */ + exit (0); +} diff --git a/gcc/testsuite/gcc.dg/c23-register-array-4.c b/gcc/testsuite/gcc.dg/c23-register-array-4.c new file mode 100644 index 000000000000..46156bc6cad6 --- /dev/null +++ b/gcc/testsuite/gcc.dg/c23-register-array-4.c @@ -0,0 +1,49 @@ +/* Test C2y register array element access: no warning in C23 mode with + -Wno-c23-c2y-compat. */ +/* { dg-do run } */ +/* { dg-options "-std=c23 -pedantic-errors -Wno-c23-c2y-compat" } */ + +extern void abort (); +extern void exit (int); + +struct s { int a[10]; }; + +int +main () +{ + int n = 10; + register int a[1], b[20], c[n]; + register struct s v; + a[0] = 0; + for (int i = 0; i < n; i++) + c[i] = i; + for (int i = 0; i < 20; i++) + b[i] = i; + for (int i = 0; i < 10; i++) + v.a[i] = i; + for (int i = 0; i < n; i++) + if (c[i] != i) + abort (); + for (int i = 0; i < 20; i++) + if (b[i] != i) + abort (); + for (int i = 0; i < 10; i++) + if (v.a[i] != i) + abort (); + if (a[0] != 0) + abort (); + if ((register int[2]) { 2, 3 }[n / 10] != 3) + abort (); + if ((register struct s) { 1, 2 }.a[n / 10] != 2) + abort (); + if (false) + (void) a[12345]; + if (false) + (void) b[23456]; + if (false) + /* This index is not an integer constant expression, so the constraint + against negative indices does not apply. */ + (void) a[__INT_MAX__ + 2]; + /* { dg-warning "integer overflow in expression" "overflow" { target *-*-* } .-1 } */ + exit (0); +} diff --git a/gcc/testsuite/gcc.dg/c23-thread-local-2.c b/gcc/testsuite/gcc.dg/c23-thread-local-2.c index 1d063f05e424..8fb34af5eeb7 100644 --- a/gcc/testsuite/gcc.dg/c23-thread-local-2.c +++ b/gcc/testsuite/gcc.dg/c23-thread-local-2.c @@ -25,6 +25,7 @@ static thread_local int f; /* { dg-error "redefinition" } */ rather than defaulting to size 1. */ thread_local int g[]; /* { dg-error "storage size" } */ static thread_local int h[]; /* { dg-error "array size missing" } */ +/* { dg-error "storage size" "storage size" { target *-*-* } .-1 } */ extern thread_local int i[]; thread_local int j[] = { 0 }; diff --git a/gcc/testsuite/gcc.dg/c2y-anon-init-1.c b/gcc/testsuite/gcc.dg/c2y-anon-init-1.c new file mode 100644 index 000000000000..7f422772489d --- /dev/null +++ b/gcc/testsuite/gcc.dg/c2y-anon-init-1.c @@ -0,0 +1,23 @@ +/* Test initialization of anonymous structures and unions (clarified in C2y by + N3451). */ +/* { dg-do run } */ +/* { dg-options "-std=c2y -pedantic-errors" } */ + +struct s { struct { int a, b; }; union { int c; }; } x = { 1, 2, 3 }; +union u { struct { int x, y; }; }; + +struct s a = { 1, 2, 3 }; +union u b = { 4, 5 }; + +extern void abort (); +extern void exit (int); + +int +main () +{ + if (a.a != 1 || a.b != 2 || a.c != 3) + abort (); + if (b.x != 4 || b.y != 5) + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.dg/c2y-array-negative-1.c b/gcc/testsuite/gcc.dg/c2y-array-negative-1.c new file mode 100644 index 000000000000..d745bf2bcf96 --- /dev/null +++ b/gcc/testsuite/gcc.dg/c2y-array-negative-1.c @@ -0,0 +1,45 @@ +/* Test C2y constraint against negative array indices. */ +/* { dg-do compile } */ +/* { dg-options "-std=c2y -pedantic-errors" } */ + +int a[1], b[10]; +struct s { int a[2]; } x; +void *p; + +void +f () +{ + (void) a[0]; + (void) a[1]; + (void) a[12345]; + (void) a[-1]; /* { dg-error "array subscript is negative" } */ + (void) a[-__LONG_LONG_MAX__]; /* { dg-error "array subscript is negative" } */ + (void) b[0]; + (void) b[10]; + (void) b[12345]; + (void) b[-1]; /* { dg-error "array subscript is negative" } */ + (void) b[-__LONG_LONG_MAX__]; /* { dg-error "array subscript is negative" } */ + (void) x.a[0]; + (void) x.a[1]; + (void) x.a[12345]; + (void) x.a[-1]; /* { dg-error "array subscript is negative" } */ + (void) x.a[-__LONG_LONG_MAX__]; /* { dg-error "array subscript is negative" } */ + int c[1]; + (void) c[0]; + (void) c[1]; + (void) c[12345]; + (void) c[-1]; /* { dg-error "array subscript is negative" } */ + (void) c[-__LONG_LONG_MAX__]; /* { dg-error "array subscript is negative" } */ + (void) (*(int (*)[1]) p)[0]; + (void) (*(int (*)[1]) p)[1]; + (void) (*(int (*)[1]) p)[12345]; + (void) (*(int (*)[1]) p)[-1]; /* { dg-error "array subscript is negative" } */ + (void) (*(int (*)[1]) p)[-__LONG_LONG_MAX__]; /* { dg-error "array subscript is negative" } */ + /* This index is not an integer constant expression, so the constraint + against negative indices does not apply. */ + (void) a[__LONG_LONG_MAX__ + 2]; + /* { dg-warning "integer overflow in expression" "overflow" { target *-*-* } .-1 } */ + /* Likewise, this is only an arithmetic constant expression, not an integer + constant expression. */ + (void) a[(int)-1.0]; +} diff --git a/gcc/testsuite/gcc.dg/c2y-function-qual-1.c b/gcc/testsuite/gcc.dg/c2y-function-qual-1.c new file mode 100644 index 000000000000..eef8d8af7b37 --- /dev/null +++ b/gcc/testsuite/gcc.dg/c2y-function-qual-1.c @@ -0,0 +1,13 @@ +/* Test qualified function types: implementation-defined in C2y, undefined + behavior previously. GCC has an extension here, but does not allow it in + pedantic mode. _Atomic and restrict are constraint violations here. */ +/* { dg-do compile } */ +/* { dg-options "-std=c2y -pedantic-errors" } */ + +typedef void FUNC (void); + +const FUNC f1; /* { dg-error "ISO C forbids qualified function types" } */ +volatile FUNC f2; /* { dg-error "ISO C forbids qualified function types" } */ +restrict FUNC f3; /* { dg-error "ISO C forbids qualified function types" } */ +/* { dg-error "invalid use of 'restrict'" "restrict" { target *-*-* } .-1 } */ +_Atomic FUNC f4; /* { dg-error "'_Atomic'-qualified function type" } */ diff --git a/gcc/testsuite/gcc.dg/c2y-generic-3.c b/gcc/testsuite/gcc.dg/c2y-generic-3.c index 09174fdb095d..f3a807e06b49 100644 --- a/gcc/testsuite/gcc.dg/c2y-generic-3.c +++ b/gcc/testsuite/gcc.dg/c2y-generic-3.c @@ -1,9 +1,9 @@ -/* Test C2Y _Generic features: VM types still not allowed. */ +/* Test C2Y _Generic features: VM types allowed. */ /* { dg-do compile } */ /* { dg-options "-std=c2y -pedantic-errors" } */ void f (int i) { - (void) _Generic (i, int : 1, int (*)[i] : 2); /* { dg-error "variable length" } */ + (void) _Generic (i, int : 1, int (*)[i] : 2); } diff --git a/gcc/testsuite/gcc.dg/c2y-generic-4.c b/gcc/testsuite/gcc.dg/c2y-generic-4.c new file mode 100644 index 000000000000..8172ed45e741 --- /dev/null +++ b/gcc/testsuite/gcc.dg/c2y-generic-4.c @@ -0,0 +1,10 @@ +/* Test C2Y _Generic features: VM types allowed. Warn for -Wc23-c2y-compat */ +/* { dg-do compile } */ +/* { dg-options "-std=c2y -pedantic-errors -Wc23-c2y-compat" } */ + +void +f (int i) +{ + (void) _Generic (i, int : 1, int (*)[i] : 2); /* { dg-warning "variably-modified type" } */ +} + diff --git a/gcc/testsuite/gcc.dg/c2y-generic-5.c b/gcc/testsuite/gcc.dg/c2y-generic-5.c new file mode 100644 index 000000000000..80097f0ea37a --- /dev/null +++ b/gcc/testsuite/gcc.dg/c2y-generic-5.c @@ -0,0 +1,13 @@ +/* Test references to never-defined static functions in _Generic: still not + allowed in a type name used for selection, only an expression (may change if + "discarded" is adopted). */ +/* { dg-do compile } */ +/* { dg-options "-std=c2y -pedantic-errors" } */ + +static int not_ok1 (); /* { dg-error "used but never defined" } */ + +void +f () +{ + _Generic (int (*)[not_ok1 ()], default: 1); +} diff --git a/gcc/testsuite/gcc.dg/c2y-incomplete-1.c b/gcc/testsuite/gcc.dg/c2y-incomplete-1.c new file mode 100644 index 000000000000..4c3133d934df --- /dev/null +++ b/gcc/testsuite/gcc.dg/c2y-incomplete-1.c @@ -0,0 +1,20 @@ +/* Test C2y constraint for incomplete types of objects with no linkage. */ +/* { dg-do compile } */ +/* { dg-options "-std=c2y -pedantic-errors" } */ + +struct s1; + +void +f () +{ + struct s1 a; /* { dg-error "storage size" } */ + int b[]; /* { dg-error "array size missing" } */ + static struct s1 c; /* { dg-error "storage size" } */ + static int d[]; /* { dg-error "storage size" } */ + struct s2; + struct s2 e; /* { dg-error "storage size" } */ + static struct s2 g; /* { dg-error "storage size" } */ + struct s2 { int i; }; +} + +struct s1 { int j; }; diff --git a/gcc/testsuite/gcc.dg/c2y-incomplete-2.c b/gcc/testsuite/gcc.dg/c2y-incomplete-2.c new file mode 100644 index 000000000000..81bf922d2b04 --- /dev/null +++ b/gcc/testsuite/gcc.dg/c2y-incomplete-2.c @@ -0,0 +1,24 @@ +/* Test member access to incomplete structures and unions (explicit constraint + violation in C2y). */ +/* { dg-do compile } */ +/* { dg-options "-std=c2y -pedantic-errors" } */ + +struct s1; +extern struct s1 vs1; +struct s1 { int a; int b : sizeof (vs1.a); }; /* { dg-error "invalid use of undefined type" } */ +/* { dg-error "width not an integer constant" "constant" { target *-*-* } .-1 } */ + +union u1; +extern union u1 vu1; +union u1 { int a; int b : sizeof (vu1.a); }; /* { dg-error "invalid use of undefined type" } */ +/* { dg-error "width not an integer constant" "constant" { target *-*-* } .-1 } */ + +struct s2; +extern struct s2 *ps2; +struct s2 { int a; int b : sizeof (ps2->a); }; /* { dg-error "invalid use of undefined type" } */ +/* { dg-error "width not an integer constant" "constant" { target *-*-* } .-1 } */ + +union u2; +extern union u2 *pu2; +union u2 { int a; int b : sizeof (pu2->a); }; /* { dg-error "invalid use of undefined type" } */ +/* { dg-error "width not an integer constant" "constant" { target *-*-* } .-1 } */ diff --git a/gcc/testsuite/gcc.dg/c2y-incomplete-3.c b/gcc/testsuite/gcc.dg/c2y-incomplete-3.c new file mode 100644 index 000000000000..0a18fdadf814 --- /dev/null +++ b/gcc/testsuite/gcc.dg/c2y-incomplete-3.c @@ -0,0 +1,34 @@ +/* Test C2y constraint against lvalue conversion of lvalues with incomplete + type. */ +/* { dg-do compile } */ +/* { dg-options "-std=c2y -pedantic-errors" } */ + +struct s; +union u; + +extern struct s vs, *ps; +extern _Atomic struct s vas, *pas; +extern union u vu, *pu; +extern _Atomic union u vau, *pau; + +extern const void cv, *pcv; +extern _Atomic void av, *pav; + +void +f () +{ + vs; /* { dg-error "incomplete type" } */ + *ps; /* { dg-error "invalid use of undefined type" } */ + vas; /* { dg-error "incomplete type" } */ + *pas; /* { dg-error "invalid use of undefined type" } */ + vu; /* { dg-error "incomplete type" } */ + *pu; /* { dg-error "invalid use of undefined type" } */ + vau; /* { dg-error "incomplete type" } */ + *pau; /* { dg-error "invalid use of undefined type" } */ + cv; /* { dg-error "incomplete type" } */ + *pcv; /* { dg-error "invalid use of void expression" } */ + /* { dg-warning "dereferencing" "dereferencing" { target *-*-* } .-1 } */ + av; /* { dg-error "incomplete type" } */ + *pav; /* { dg-error "invalid use of void expression" } */ + /* { dg-warning "dereferencing" "dereferencing" { target *-*-* } .-1 } */ +} diff --git a/gcc/testsuite/gcc.dg/c2y-incomplete-4.c b/gcc/testsuite/gcc.dg/c2y-incomplete-4.c new file mode 100644 index 000000000000..a2708965ca50 --- /dev/null +++ b/gcc/testsuite/gcc.dg/c2y-incomplete-4.c @@ -0,0 +1,28 @@ +/* Test tentative definitions with incomplete type: OK in C2y with internal + linkage if completed by the end of the translation unit. */ +/* { dg-do compile } */ +/* { dg-options "-std=c2y -pedantic-errors" } */ + +struct s1; +struct s2; +union u1; +union u2; + +struct s1 v1; +struct s2 v2; /* { dg-error "storage size" } */ +int v3[]; +int v4[]; /* { dg-warning "assumed to have one element" } */ +union u1 v5; +union u2 v6; /* { dg-error "storage size" } */ + +static struct s1 sv1; +static struct s2 sv2; /* { dg-error "storage size" } */ +static int sv3[]; +static int sv4[]; /* { dg-error "array size missing" } */ +static union u1 sv5; +static union u2 sv6; /* { dg-error "storage size" } */ + +struct s1 { int x; }; +union u1 { int y; }; +extern int v3[1]; +extern int sv3[1]; diff --git a/gcc/testsuite/gcc.dg/c2y-incomplete-5.c b/gcc/testsuite/gcc.dg/c2y-incomplete-5.c new file mode 100644 index 000000000000..4051cc01c21b --- /dev/null +++ b/gcc/testsuite/gcc.dg/c2y-incomplete-5.c @@ -0,0 +1,29 @@ +/* Test tentative definitions with incomplete type: OK in C2y with internal + linkage if completed by the end of the translation unit. */ +/* { dg-do compile } */ +/* { dg-options "-std=c2y -pedantic-errors -Wc23-c2y-compat" } */ + +struct s1; +struct s2; +union u1; +union u2; + +struct s1 v1; +struct s2 v2; /* { dg-error "storage size" } */ +int v3[]; +int v4[]; /* { dg-warning "assumed to have one element" } */ +union u1 v5; +union u2 v6; /* { dg-error "storage size" } */ + +static struct s1 sv1; +static struct s2 sv2; /* { dg-error "storage size" } */ +static int sv3[]; /* { dg-warning "array size missing" } */ +static int sv4[]; /* { dg-error "array size missing" } */ +/* { dg-warning "array size missing" "warning" { target *-*-* } .-1 } */ +static union u1 sv5; +static union u2 sv6; /* { dg-error "storage size" } */ + +struct s1 { int x; }; +union u1 { int y; }; +extern int v3[1]; +extern int sv3[1]; diff --git a/gcc/testsuite/gcc.dg/c2y-init-1.c b/gcc/testsuite/gcc.dg/c2y-init-1.c new file mode 100644 index 000000000000..2fa200d283f9 --- /dev/null +++ b/gcc/testsuite/gcc.dg/c2y-init-1.c @@ -0,0 +1,48 @@ +/* Test invalid initializers that are consistent with the syntax: undefined + behavior ("shall" in Semantics not Constraints) before C2y, constraint + violation in C2y. Scalar cases; see bug 88642. */ +/* { dg-do compile } */ +/* { dg-options "-std=c2y -pedantic-errors" } */ + +struct s { int a; }; +union u { int a; }; + +int i1 = { 1, 2 }; /* { dg-error "excess elements in scalar initializer" } */ +int i2 = { { 1 } }; /* { dg-error "braces around scalar initializer" } */ +int i3 = { { 1, } }; /* { dg-error "braces around scalar initializer" } */ +int i4 = { { 1 }, }; /* { dg-error "braces around scalar initializer" } */ +int i5 = { 1, { } }; /* { dg-error "excess elements in scalar initializer" } */ +/* { dg-error "braces around scalar initializer" "braces" { target *-*-* } .-1 } */ +int i6 = { { } }; /* { dg-error "braces around scalar initializer" } */ +int i7 = { { }, }; /* { dg-error "braces around scalar initializer" } */ +int i8 = { { { 1 } } }; /* { dg-error "braces around scalar initializer" } */ +struct s s1 = + { + { /* { dg-warning "braces around scalar initializer" } */ + { 1 } /* { dg-error "braces around scalar initializer" } */ + } + }; +union u u1 = + { + { /* { dg-warning "braces around scalar initializer" } */ + { 1 } /* { dg-error "braces around scalar initializer" } */ + } + }; +int a1[1] = + { + { /* { dg-warning "braces around scalar initializer" } */ + { 1 } /* { dg-error "braces around scalar initializer" } */ + } + }; +int *p1 = &(int) { { 1 } }; /* { dg-error "braces around scalar initializer" } */ +int *p2 = &(int) { { 1, } }; /* { dg-error "braces around scalar initializer" } */ + +int ok1 = { 1 }; +struct s ok2 = { { 1 } }; /* { dg-warning "braces around scalar initializer" } */ +struct s ok3 = { { 1, } }; /* { dg-warning "braces around scalar initializer" } */ +int *ok4 = &(int) { 1 }; +int *ok5 = &(int) { 1, }; +int ok6[1] = { { 1 } }; /* { dg-warning "braces around scalar initializer" } */ +int ok7[1] = { { 1, } }; /* { dg-warning "braces around scalar initializer" } */ +union u ok8 = { { 1 } }; /* { dg-warning "braces around scalar initializer" } */ +union u ok9 = { { 1, } }; /* { dg-warning "braces around scalar initializer" } */ diff --git a/gcc/testsuite/gcc.dg/c2y-init-2.c b/gcc/testsuite/gcc.dg/c2y-init-2.c new file mode 100644 index 000000000000..cf62eaa6730a --- /dev/null +++ b/gcc/testsuite/gcc.dg/c2y-init-2.c @@ -0,0 +1,33 @@ +/* Test invalid initializers that are consistent with the syntax: undefined + behavior ("shall" in Semantics not Constraints) before C2y, constraint + violation in C2y. Structure and union cases. */ +/* { dg-do compile } */ +/* { dg-options "-std=c2y -pedantic-errors" } */ + +struct s1 { int a, b; }; +struct s2 { struct s1 x; }; +struct s3 { struct s2 x; }; +union u1 { int a; }; +union u2 { union u1 x; }; +union u3 { union u2 x; }; + +struct s1 s1v; +volatile struct s2 s2v; +union u1 u1v; +const union u2 u2v; + +void +f () +{ + struct s1 ts1a = {}, ts1b = s1v, ts1c = { 1, 2 }; + const struct s2 ts2a = {}, ts2b = s2v, ts2c = { s1v }, ts2d = { 1 }; + volatile struct s3 ts3a = { s2v }, ts3b = { s1v }; + union u1 tu1a = {}, tu1b = u1v, tu1c = { 1 }; + const union u2 tu2a = {}, tu2b = u2v, tu2c = { u1v }, tu2d = { 1 }; + volatile union u3 tu3a = { u2v }, tu3b = { u1v }; + struct s2 es2a = 1; /* { dg-error "invalid initializer" } */ + struct s2 es2b = s1v; /* { dg-error "invalid initializer" } */ + struct s1 es1a = s2v; /* { dg-error "invalid initializer" } */ + union u2 eu2a = u1v; /* { dg-error "invalid initializer" } */ + union u1 eu1a = 1; /* { dg-error "invalid initializer" } */ +} diff --git a/gcc/testsuite/gcc.dg/c2y-init-3.c b/gcc/testsuite/gcc.dg/c2y-init-3.c new file mode 100644 index 000000000000..1dd060705e28 --- /dev/null +++ b/gcc/testsuite/gcc.dg/c2y-init-3.c @@ -0,0 +1,106 @@ +/* Test invalid initializers that are consistent with the syntax: undefined + behavior ("shall" in Semantics not Constraints) before C2y, constraint + violation in C2y. Array cases. */ +/* { dg-do compile } */ +/* { dg-options "-std=c2y -pedantic-errors" } */ + +typedef __WCHAR_TYPE__ wchar_t; +typedef __CHAR8_TYPE__ char8_t; +typedef __CHAR16_TYPE__ char16_t; +typedef __CHAR32_TYPE__ char32_t; + +const char c1[] = "", c2[] = { "" }, c3[] = { "", }; +char c4[] = u8"", c5[] = { u8"" }, c6[] = { u8"", }; + +signed char sc1[] = "", sc2[] = { "" }, sc3[] = { "", }; +volatile signed char sc4[] = u8"", sc5[] = { u8"" }, sc6[] = { u8"", }; + +unsigned char uc1[] = "", uc2[] = { "" }, uc3[] = { "", }; +unsigned char uc4[] = u8"", uc5[] = { u8"" }, uc6[] = { u8"", }; + +char8_t c8_1[] = "", c8_2[] = { "" }, c8_3[] = { "", }; +char8_t c8_4[] = u8"", c8_5[] = { u8"" }, c8_6[] = { u8"", }; + +wchar_t w1[] = L"", w2[] = { L"" }, w3[] = { L"", }; +char16_t c16_1[] = u"", c16_2[] = { u"" }, c16_3[] = { u"", }; +char32_t c32_1[] = U"", c32_2[] = { U"" }, c32_3[] = { U"", }; + +int ia[] = { 1, 2, 3 }; + +_Atomic char ac[] = ""; /* { dg-error "inappropriate type" } */ +_Atomic wchar_t aw[] = L""; /* { dg-error "inappropriate type" } */ +_Atomic char8_t ac8[] = u8""; /* { dg-error "inappropriate type" } */ +_Atomic char16_t ac16[] = u""; /* { dg-error "inappropriate type" } */ +_Atomic char32_t ac32[] = U""; /* { dg-error "inappropriate type" } */ + +#if __WCHAR_WIDTH__ > __SCHAR_WIDTH__ +typedef char char_not_wchar; +typedef wchar_t wchar_not_char; +#else +typedef long long int char_not_wchar; +typedef long long int wchar_not_char; +#endif +char_not_wchar cnw[] = L""; /* { dg-error "cannot initialize|inappropriate type" } */ +char_not_wchar cnwb[] = { L"" }; /* { dg-error "cannot initialize|inappropriate type" } */ +wchar_not_char wnc[] = ""; /* { dg-error "cannot initialize|inappropriate type" } */ +wchar_not_char wncb[] = { "" }; /* { dg-error "cannot initialize|inappropriate type" } */ +wchar_not_char wnc8[] = u8""; /* { dg-error "cannot initialize|inappropriate type" } */ +wchar_not_char wnc8b[] = { u8"" }; /* { dg-error "cannot initialize|inappropriate type" } */ + +#if __INT_LEAST16_WIDTH__ > __SCHAR_WIDTH__ +typedef char char_not_char16; +typedef char16_t char16_not_char; +#else +typedef long long int char_not_char16; +typedef long long int char16_not_char; +#endif +char_not_char16 cn16[] = u""; /* { dg-error "cannot initialize|inappropriate type" } */ +char_not_char16 cn16b[] = { u"" }; /* { dg-error "cannot initialize|inappropriate type" } */ +char16_not_char c16nc[] = ""; /* { dg-error "cannot initialize|inappropriate type" } */ +char16_not_char c16ncb[] = { "" }; /* { dg-error "cannot initialize|inappropriate type" } */ +char16_not_char c16nc8[] = u8""; /* { dg-error "cannot initialize|inappropriate type" } */ +char16_not_char c16nc8b[] = { u8"" }; /* { dg-error "cannot initialize|inappropriate type" } */ + +#if __INT_LEAST32_WIDTH__ > __SCHAR_WIDTH__ +typedef char char_not_char32; +typedef char32_t char32_not_char; +#else +typedef long long int char_not_char32; +typedef long long int char32_not_char; +#endif +char_not_char32 cn32[] = U""; /* { dg-error "cannot initialize|inappropriate type" } */ +char_not_char32 cn32b[] = { U"" }; /* { dg-error "cannot initialize|inappropriate type" } */ +char32_not_char c32nc[] = ""; /* { dg-error "cannot initialize|inappropriate type" } */ +char32_not_char c32ncb[] = { "" }; /* { dg-error "cannot initialize|inappropriate type" } */ +char32_not_char c32nc8[] = u8""; /* { dg-error "cannot initialize|inappropriate type" } */ +char32_not_char c32nc8b[] = { u8"" }; /* { dg-error "cannot initialize|inappropriate type" } */ + +#if __WCHAR_WIDTH__ == __INT_LEAST16_WIDTH__ +typedef long long int wchar_not_char16; +typedef long long int char16_not_wchar; +#else +typedef wchar_t wchar_not_char16; +typedef char16_t char16_not_wchar; +#endif +wchar_not_char16 wcn16[] = u""; /* { dg-error "cannot initialize|inappropriate type" } */ +wchar_not_char16 wcn16b[] = { u"" }; /* { dg-error "cannot initialize|inappropriate type" } */ +char16_not_wchar c16nwc[] = L""; /* { dg-error "cannot initialize|inappropriate type" } */ +char16_not_wchar c16nwcb[] = { L"" }; /* { dg-error "cannot initialize|inappropriate type" } */ + +#if __WCHAR_WIDTH__ == __INT_LEAST32_WIDTH__ +typedef long long int wchar_not_char32; +typedef long long int char32_not_wchar; +#else +typedef wchar_t wchar_not_char32; +typedef char32_t char32_not_wchar; +#endif +wchar_not_char32 wcn32[] = U""; /* { dg-error "cannot initialize|inappropriate type" } */ +wchar_not_char32 wcn32b[] = { U"" }; /* { dg-error "cannot initialize|inappropriate type" } */ +char32_not_wchar c32nwc[] = L""; /* { dg-error "cannot initialize|inappropriate type" } */ +char32_not_wchar c32nwcb[] = { L"" }; /* { dg-error "cannot initialize|inappropriate type" } */ + +void +f () +{ + int ic[] = ia; /* { dg-error "invalid initializer" } */ +} diff --git a/gcc/testsuite/gcc.dg/c2y-inline-1.c b/gcc/testsuite/gcc.dg/c2y-inline-1.c new file mode 100644 index 000000000000..b65fa5fc0826 --- /dev/null +++ b/gcc/testsuite/gcc.dg/c2y-inline-1.c @@ -0,0 +1,7 @@ +/* Test C2y constraint that inline functions with external linkage must be + defined in same translation unit. */ +/* { dg-do compile } */ +/* { dg-options "-std=c2y -pedantic-errors" } */ + +inline void f (); /* { dg-error "declared but never defined" } */ +extern inline void g(); /* { dg-error "declared but never defined" } */ diff --git a/gcc/testsuite/gcc.dg/c2y-linkage-1.c b/gcc/testsuite/gcc.dg/c2y-linkage-1.c new file mode 100644 index 000000000000..bda009802cf4 --- /dev/null +++ b/gcc/testsuite/gcc.dg/c2y-linkage-1.c @@ -0,0 +1,15 @@ +/* Test mixing internal and external linker for the same identifier (a + constraint violation in C2y). */ +/* { dg-do compile } */ +/* { dg-options "-std=c2y -pedantic-errors" } */ + +static int x; + +void +f () +{ + long x; + { + extern int x; /* { dg-error "variable previously declared 'static' redeclared 'extern'" } */ + } +} diff --git a/gcc/testsuite/gcc.dg/c2y-linkage-2.c b/gcc/testsuite/gcc.dg/c2y-linkage-2.c new file mode 100644 index 000000000000..e8be5c731707 --- /dev/null +++ b/gcc/testsuite/gcc.dg/c2y-linkage-2.c @@ -0,0 +1,12 @@ +/* Test mixing internal and external linker for the same identifier (a + constraint violation in C2y). */ +/* { dg-do compile } */ +/* { dg-options "-std=c2y -pedantic-errors" } */ + +void +f () +{ + extern int x; /* { dg-message "previous declaration" } */ +} + +static int x; /* { dg-error "static declaration of 'x' follows non-static declaration" } */ diff --git a/gcc/testsuite/gcc.dg/c2y-linkage-3.c b/gcc/testsuite/gcc.dg/c2y-linkage-3.c new file mode 100644 index 000000000000..e46548a22d94 --- /dev/null +++ b/gcc/testsuite/gcc.dg/c2y-linkage-3.c @@ -0,0 +1,15 @@ +/* Test mixing internal and external linker for the same identifier (a + constraint violation in C2y). */ +/* { dg-do compile } */ +/* { dg-options "-std=c2y -pedantic-errors" } */ + +static int x (); + +void +f () +{ + long x; + { + extern int x (); /* { dg-error "function previously declared 'static' redeclared 'extern'" } */ + } +} diff --git a/gcc/testsuite/gcc.dg/c2y-linkage-4.c b/gcc/testsuite/gcc.dg/c2y-linkage-4.c new file mode 100644 index 000000000000..25e6369ccf2e --- /dev/null +++ b/gcc/testsuite/gcc.dg/c2y-linkage-4.c @@ -0,0 +1,12 @@ +/* Test mixing internal and external linker for the same identifier (a + constraint violation in C2y). */ +/* { dg-do compile } */ +/* { dg-options "-std=c2y -pedantic-errors" } */ + +void +f () +{ + extern int x (); /* { dg-message "previous declaration" } */ +} + +static int x (); /* { dg-error "static declaration of 'x' follows non-static declaration" } */ diff --git a/gcc/testsuite/gcc.dg/c2y-pointer-1.c b/gcc/testsuite/gcc.dg/c2y-pointer-1.c new file mode 100644 index 000000000000..04d59dd200e6 --- /dev/null +++ b/gcc/testsuite/gcc.dg/c2y-pointer-1.c @@ -0,0 +1,53 @@ +/* Test C2y constraints on pointer conversions. */ +/* { dg-do compile } */ +/* { dg-options "-std=c2y -pedantic-errors" } */ + +#include +#include + +void *p1; +struct s { int a; } s1; +struct sp { void *p; } s2; +union t { int b; } t1; +union tp { void *p; } t2; + +void +f () +{ + (double) p1; /* { dg-error "pointer value used where a floating-point was expected" } */ + (struct s) p1; /* { dg-error "conversion to non-scalar type requested" } */ + (union t) p1; /* { dg-error "cast to union type from type not present in union" } */ + (struct sp) p1; /* { dg-error "conversion to non-scalar type requested" } */ + (union tp) p1; /* { dg-error "ISO C forbids casts to union type" } */ + (nullptr_t) p1; /* { dg-error "conversion" } */ + /* { dg-message "or a null pointer constant can be converted" "conversion note" { target *-*-* } .-1 } */ + (intptr_t) p1; + (int *) p1; + (void) p1; + (void *) 0.0; /* { dg-error "cannot convert to a pointer type" } */ + (void *) s1; /* { dg-error "cannot convert to a pointer type" } */ + (void *) t1; /* { dg-error "cannot convert to a pointer type" } */ + (void *) s2; /* { dg-error "cannot convert to a pointer type" } */ + (void *) t2; /* { dg-error "cannot convert to a pointer type" } */ + (void *) nullptr; + (void *) 0; + (void *) (int *) 0; + (void *) (void) p1; /* { dg-error "invalid use of void expression" } */ +} + +void +g () +{ + double d = p1; /* { dg-error "incompatible types" } */ + s1 = p1; /* { dg-error "incompatible types" } */ + t1 = p1; /* { dg-error "incompatible types" } */ + s2 = p1; /* { dg-error "incompatible types" } */ + t2 = p1; /* { dg-error "incompatible types" } */ + nullptr_t np = p1; /* { dg-error "incompatible types" } */ + p1 = 0.0; /* { dg-error "incompatible types" } */ + p1 = s1; /* { dg-error "incompatible types" } */ + p1 = t1; /* { dg-error "incompatible types" } */ + p1 = s2; /* { dg-error "incompatible types" } */ + p1 = t2; /* { dg-error "incompatible types" } */ + p1 = (void) p1; /* { dg-error "invalid use of void expression" } */ +} diff --git a/gcc/testsuite/gcc.dg/c2y-register-array-1.c b/gcc/testsuite/gcc.dg/c2y-register-array-1.c new file mode 100644 index 000000000000..1744b3bc1274 --- /dev/null +++ b/gcc/testsuite/gcc.dg/c2y-register-array-1.c @@ -0,0 +1,21 @@ +/* Test implicit conversion of register arrays to pointers: + implementation-defined in C2y, undefined behavior previously. GCC disallows + this conversion (the case of array element access changed in C2y no longer + to involve the implicit conversion to a pointer). */ +/* { dg-do compile } */ +/* { dg-options "-std=c2y -pedantic-errors" } */ + +void +f () +{ + register int a[1]; + constexpr register int b[1] = { 1 }; + a; /* { dg-error "address of register variable" } */ + b; /* { dg-error "address of register variable" } */ + (void) a; /* { dg-error "address of register variable" } */ + (void) b; /* { dg-error "address of register variable" } */ + *a; /* { dg-error "address of register variable" } */ + *b; /* { dg-error "address of register variable" } */ + a + 0; /* { dg-error "address of register variable" } */ + b + 0; /* { dg-error "address of register variable" } */ +} diff --git a/gcc/testsuite/gcc.dg/c2y-register-array-2.c b/gcc/testsuite/gcc.dg/c2y-register-array-2.c new file mode 100644 index 000000000000..dad0f4c9fb62 --- /dev/null +++ b/gcc/testsuite/gcc.dg/c2y-register-array-2.c @@ -0,0 +1,48 @@ +/* Test C2y register array element access. Execution tests. */ +/* { dg-do run } */ +/* { dg-options "-std=c2y -pedantic-errors" } */ + +extern void abort (); +extern void exit (int); + +struct s { int a[10]; }; + +int +main () +{ + int n = 10; + register int a[1], b[20], c[n]; + register struct s v; + a[0] = 0; + for (int i = 0; i < n; i++) + c[i] = i; + for (int i = 0; i < 20; i++) + b[i] = i; + for (int i = 0; i < 10; i++) + v.a[i] = i; + for (int i = 0; i < n; i++) + if (c[i] != i) + abort (); + for (int i = 0; i < 20; i++) + if (b[i] != i) + abort (); + for (int i = 0; i < 10; i++) + if (v.a[i] != i) + abort (); + if (a[0] != 0) + abort (); + if ((register int[2]) { 2, 3 }[n / 10] != 3) + abort (); + if ((register struct s) { 1, 2 }.a[n / 10] != 2) + abort (); + if (false) + (void) a[12345]; + if (false) + (void) b[23456]; + if (false) + /* This index is not an integer constant expression, so the constraint + against negative indices does not apply. */ + (void) a[__INT_MAX__ + 2]; + /* { dg-warning "integer overflow in expression" "overflow" { target *-*-* } .-1 } */ + exit (0); +} diff --git a/gcc/testsuite/gcc.dg/c2y-register-array-3.c b/gcc/testsuite/gcc.dg/c2y-register-array-3.c new file mode 100644 index 000000000000..010e738ca41a --- /dev/null +++ b/gcc/testsuite/gcc.dg/c2y-register-array-3.c @@ -0,0 +1,49 @@ +/* Test C2y register array element access. Test warnings with + -Wc23-c2y-compat. */ +/* { dg-do run } */ +/* { dg-options "-std=c2y -pedantic-errors -Wc23-c2y-compat" } */ + +extern void abort (); +extern void exit (int); + +struct s { int a[10]; }; + +int +main () +{ + int n = 10; + register int a[1], b[20], c[n]; + register struct s v; + a[0] = 0; /* { dg-warning "ISO C forbids subscripting 'register' array before C2Y" } */ + for (int i = 0; i < n; i++) + c[i] = i; /* { dg-warning "ISO C forbids subscripting 'register' array before C2Y" } */ + for (int i = 0; i < 20; i++) + b[i] = i; /* { dg-warning "ISO C forbids subscripting 'register' array before C2Y" } */ + for (int i = 0; i < 10; i++) + v.a[i] = i; /* { dg-warning "ISO C forbids subscripting 'register' array before C2Y" } */ + for (int i = 0; i < n; i++) + if (c[i] != i) /* { dg-warning "ISO C forbids subscripting 'register' array before C2Y" } */ + abort (); + for (int i = 0; i < 20; i++) + if (b[i] != i) /* { dg-warning "ISO C forbids subscripting 'register' array before C2Y" } */ + abort (); + for (int i = 0; i < 10; i++) + if (v.a[i] != i) /* { dg-warning "ISO C forbids subscripting 'register' array before C2Y" } */ + abort (); + if (a[0] != 0) /* { dg-warning "ISO C forbids subscripting 'register' array before C2Y" } */ + abort (); + if ((register int[2]) { 2, 3 }[n / 10] != 3) /* { dg-warning "ISO C forbids subscripting 'register' array before C2Y" } */ + abort (); + if ((register struct s) { 1, 2 }.a[n / 10] != 2) /* { dg-warning "ISO C forbids subscripting 'register' array before C2Y" } */ + abort (); + if (false) + (void) a[12345]; /* { dg-warning "ISO C forbids subscripting 'register' array before C2Y" } */ + if (false) + (void) b[23456]; /* { dg-warning "ISO C forbids subscripting 'register' array before C2Y" } */ + if (false) + /* This index is not an integer constant expression, so the constraint + against negative indices does not apply. */ + (void) a[__INT_MAX__ + 2]; /* { dg-warning "ISO C forbids subscripting 'register' array before C2Y" } */ + /* { dg-warning "integer overflow in expression" "overflow" { target *-*-* } .-1 } */ + exit (0); +} diff --git a/gcc/testsuite/gcc.dg/c2y-static-assert-1.c b/gcc/testsuite/gcc.dg/c2y-static-assert-1.c new file mode 100644 index 000000000000..5865960732b0 --- /dev/null +++ b/gcc/testsuite/gcc.dg/c2y-static-assert-1.c @@ -0,0 +1,20 @@ +/* Test C2y static assertions with expressions that are not integer constant + expressions (taken from c11-static-assert-3.c; in C2y these are constraint + violations, whereas in C11 we diagnose them but they are undefined behavior + because the requirement to be an integer constant expression is in Semantics + not Constraints). */ +/* { dg-do compile } */ +/* { dg-options "-std=c2y -pedantic-errors" } */ + +_Static_assert (__INT_MAX__ * 2, "overflow"); /* { dg-warning "integer overflow in expression" } */ +/* { dg-error "overflow in constant expression" "error" { target *-*-* } .-1 } */ + +_Static_assert ((void *)(__SIZE_TYPE__)16, "non-integer"); /* { dg-error "not an integer" } */ + +_Static_assert (1.0, "non-integer"); /* { dg-error "not an integer" } */ + +_Static_assert ((int)(1.0 + 1.0), "non-constant-expression"); /* { dg-error "not an integer constant expression" } */ + +int i; + +_Static_assert (i, "non-constant"); /* { dg-error "not constant" } */ diff --git a/gcc/testsuite/gcc.dg/c2y-storage-class-1.c b/gcc/testsuite/gcc.dg/c2y-storage-class-1.c new file mode 100644 index 000000000000..af9c41caf50b --- /dev/null +++ b/gcc/testsuite/gcc.dg/c2y-storage-class-1.c @@ -0,0 +1,18 @@ +/* Test C2y constraint on storage-class specifiers for block-scope identifiers + for functions. */ +/* { dg-do compile } */ +/* { dg-options "-std=c2y -pedantic-errors" } */ + +void +f () +{ + auto void g1 (); /* { dg-error "invalid storage class for function" } */ + /* { dg-error "nested function" "nested" { target *-*-* } .-1 } */ + constexpr void g2 (); /* { dg-error "requires an initialized data declaration" } */ + extern void g3 (); + register void g4 (); /* { dg-error "invalid storage class for function" } */ + static void g5 (); /* { dg-error "invalid storage class for function" } */ + thread_local void g6 (); /* { dg-error "implicitly auto and declared" } */ + static thread_local void g7 (); /* { dg-error "invalid storage class for function" } */ + /* { dg-error "nested function" "nested" { target *-*-* } .-1 } */ +} diff --git a/gcc/testsuite/gcc.dg/c2y-struct-empty-1.c b/gcc/testsuite/gcc.dg/c2y-struct-empty-1.c new file mode 100644 index 000000000000..b6361685a757 --- /dev/null +++ b/gcc/testsuite/gcc.dg/c2y-struct-empty-1.c @@ -0,0 +1,10 @@ +/* Test structures and unions without named members: implementation-defined in + C2y, undefined behavior previously. GCC has an extension here, but does not + allow it in pedantic mode. */ +/* { dg-do compile } */ +/* { dg-options "-std=c2y -pedantic-errors" } */ + +struct s1 { }; /* { dg-error "struct has no members" } */ +union u1 { }; /* { dg-error "union has no members" } */ +struct s2 { struct { }; }; /* { dg-error "struct has no members" } */ +struct s3 { int : 3; int : 4; }; /* { dg-error "struct has no named members" } */ diff --git a/gcc/testsuite/gcc.dg/debug/ctf/ctf-struct-3.c b/gcc/testsuite/gcc.dg/debug/ctf/ctf-struct-3.c new file mode 100644 index 000000000000..bf0be87c7c94 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/ctf/ctf-struct-3.c @@ -0,0 +1,32 @@ +/* PR debug/121411. + Test for compilation of very large struct types. + The ctt_size for the struct shall encode CTF_LSIZE_SENT to indicate the + large struct encoding is used. */ + +/* { dg-do compile { target { lp64 || llp64 } } } */ +/* { dg-options "-O0 -gctf -dA" } */ + +struct huge +{ /* bit offset */ + unsigned char a1[0xffffffff]; /* 0 */ + unsigned char a2[0xffffffff]; /* 7fffffff8 */ + char x; /* ffffffff0 */ + char y; /* ffffffff8 */ + char z; /* 1000000000 */ +}; + +struct huge v; + +/* Verify struct is encoded with large type encoding format. */ +/* { dg-final { scan-assembler-times "0x1a000005\[\t \]+\[^\n\]*ctt_info" 1 } } */ +/* { dg-final { scan-assembler-times "0xffffffff\[\t \]+\[^\n\]*ctt_size" 1 } } */ +/* { dg-final { scan-assembler-times "0x2\[\t \]+\[^\n\]*ctt_lsizehi" 1 } } */ +/* { dg-final { scan-assembler-times "ctt_lsizelo" 1 } } */ + +/* Verify member offsets are correct for large offsets. */ +/* { dg-final { scan-assembler-times "0x7\[\t \]+\[^\n\]*ctlm_offsethi" 1 } } */ +/* { dg-final { scan-assembler-times "0xf\[\t \]+\[^\n\]*ctlm_offsethi" 2 } } */ +/* { dg-final { scan-assembler-times "0x10\[\t \]+\[^\n\]*ctlm_offsethi" 1 } } */ + +/* { dg-final { scan-assembler-times "0xfffffff8\[\t \]+\[^\n\]*ctlm_offsetlo" 2 } } */ +/* { dg-final { scan-assembler-times "0xfffffff0\[\t \]+\[^\n\]*ctlm_offsetlo" 1 } } */ diff --git a/gcc/testsuite/gcc.dg/fabs-plus-zero-1.c b/gcc/testsuite/gcc.dg/fabs-plus-zero-1.c new file mode 100644 index 000000000000..c4a5a298334e --- /dev/null +++ b/gcc/testsuite/gcc.dg/fabs-plus-zero-1.c @@ -0,0 +1,9 @@ +/* With trapping-math enabled (default behavior), GCC must preserve the +0.0 */ +/* { dg-do compile } */ +/* { dg-options "-O2 -fdump-tree-optimized" } */ + +double f(double a) +{ + return __builtin_fabs(a + 0.0); +} +/* { dg-final { scan-tree-dump-times "\\+ 0\\.0" 1 "optimized" } } */ diff --git a/gcc/testsuite/gcc.dg/fabs-plus-zero-2.c b/gcc/testsuite/gcc.dg/fabs-plus-zero-2.c new file mode 100644 index 000000000000..0bc7934353d0 --- /dev/null +++ b/gcc/testsuite/gcc.dg/fabs-plus-zero-2.c @@ -0,0 +1,10 @@ +/* With -fno-trapping-math it is safe to fold away (+/-)0.0 */ +/* { dg-do compile } */ +/* { dg-options "-O2 -fno-trapping-math -fdump-tree-optimized" } */ + +double f1(double a) { return __builtin_fabs(a + 0.0); } +double f2(double a) { return __builtin_fabs(a + -0.0); } +double f3(double a) { return __builtin_fabs(a - 0.0); } +double f4(double a) { return __builtin_fabs(a - -0.0); } + +/* { dg-final { scan-tree-dump-not "\\+ 0\\.0" "optimized" } } */ diff --git a/gcc/testsuite/gcc.dg/fatal-error-html.py b/gcc/testsuite/gcc.dg/fatal-error-html.py new file mode 100644 index 000000000000..b7e7a680ce86 --- /dev/null +++ b/gcc/testsuite/gcc.dg/fatal-error-html.py @@ -0,0 +1,28 @@ +from htmltest import * + +import pytest + +@pytest.fixture(scope='function', autouse=True) +def html_tree(): + return html_tree_from_env() + +def test_results(html_tree): + root = html_tree.getroot () + assert root.tag == make_tag('html') + + head = root.find('xhtml:head', ns) + assert head is not None + + body = root.find('xhtml:body', ns) + assert body is not None + + diag_list = body.find("./xhtml:div[@class='gcc-diagnostic-list']", ns) + assert len(diag_list) + + diag = diag_list.find('xhtml:div[@id="gcc-diag-0"]', ns) + assert diag is not None + message = diag.find("./xhtml:div[@class='gcc-message']", ns) + assert message is not None + assert message[0].tag == make_tag('strong') + assert message[0].text == 'fatal error: ' + assert message[0].tail.startswith(' this-does-not-exist.h:') diff --git a/gcc/testsuite/gcc.dg/fatal-error-sarif.py b/gcc/testsuite/gcc.dg/fatal-error-sarif.py new file mode 100644 index 000000000000..4c434ed8dcf1 --- /dev/null +++ b/gcc/testsuite/gcc.dg/fatal-error-sarif.py @@ -0,0 +1,29 @@ +from sarif import * + +import pytest + +@pytest.fixture(scope='function', autouse=True) +def sarif(): + return sarif_from_env() + +def test_execution_unsuccessful(sarif): + runs = sarif['runs'] + run = runs[0] + + invocations = run['invocations'] + assert len(invocations) == 1 + invocation = invocations[0] + + # We expect the fatal error to make executionSuccessful be false + assert invocation['executionSuccessful'] == False + +def test_fatal_error(sarif): + runs = sarif['runs'] + run = runs[0] + results = run['results'] + + assert len(results) == 1 + + result = results[0] + assert result['level'] == 'error' + assert result['message']['text'] == "this-does-not-exist.h: No such file or directory" diff --git a/gcc/testsuite/gcc.dg/fatal-error.c b/gcc/testsuite/gcc.dg/fatal-error.c new file mode 100644 index 000000000000..54f90079d9f3 --- /dev/null +++ b/gcc/testsuite/gcc.dg/fatal-error.c @@ -0,0 +1,11 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-fdiagnostics-add-output=sarif" } */ +/* { dg-additional-options "-fdiagnostics-add-output=experimental-html:javascript=no" } */ + +#include "this-does-not-exist.h" + +/* { dg-prune-output "fatal error:" } + { dg-prune-output "compilation terminated" } + { dg-final { verify-sarif-file } } + { dg-final { run-sarif-pytest fatal-error.c "fatal-error-sarif.py" } } + { dg-final { run-html-pytest fatal-error.c "fatal-error-html.py" } } */ diff --git a/gcc/testsuite/gcc.dg/gimplefe-error-16.c b/gcc/testsuite/gcc.dg/gimplefe-error-16.c new file mode 100644 index 000000000000..4cdeac889c8f --- /dev/null +++ b/gcc/testsuite/gcc.dg/gimplefe-error-16.c @@ -0,0 +1,10 @@ +/* { dg-do compile } */ +/* { dg-options "-fgimple" } */ +/* PR c/121421 */ +/* Gimple functions cannot be nested functions. */ + + +void main(void) +{ + void __GIMPLE b(){} /* { dg-error "cannot be a nested" } */ +} diff --git a/gcc/testsuite/gcc.dg/int-bwise-opt-1.c b/gcc/testsuite/gcc.dg/int-bwise-opt-1.c new file mode 100644 index 000000000000..11ea9acb3fc2 --- /dev/null +++ b/gcc/testsuite/gcc.dg/int-bwise-opt-1.c @@ -0,0 +1,31 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fdump-tree-optimized" } */ + +int f1(int a, int b) +{ + return (a != b) & ((a | b) != 0); +} + +int f2(int a, int b) +{ + return (a == b) | ((a | b) == 0); +} + +int f3(int a, int b) +{ + return (a != b) & ((a | b) == 0); +} + +int f4(int a, int b) +{ + return (a == b) | ((a | b) != 0); +} + +/* { dg-final { scan-tree-dump-times "\\\|" 0 "optimized" } } */ +/* { dg-final { scan-tree-dump-times "\&" 0 "optimized" } } */ + +/* f3 should fold to `1` (true). */ +/* { dg-final { scan-tree-dump-times "return 1;" 1 "optimized" } } */ + +/* f4 should fold to `0` (false). */ +/* { dg-final { scan-tree-dump-times "return 0;" 1 "optimized" } } */ diff --git a/gcc/testsuite/gcc.dg/int-bwise-opt-2.c b/gcc/testsuite/gcc.dg/int-bwise-opt-2.c new file mode 100644 index 000000000000..cc1a48b061a2 --- /dev/null +++ b/gcc/testsuite/gcc.dg/int-bwise-opt-2.c @@ -0,0 +1,15 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fdump-tree-optimized" } */ + +int f1(int a, int b) +{ + return (a != b) | ((a | b) != 0); +} + +int f2(int a, int b) +{ + return (a == b) & ((a | b) == 0); +} + + /* { dg-final { scan-tree-dump-times "a == b" 0 "optimized" } } */ + /* { dg-final { scan-tree-dump-times "a != b" 0 "optimized" } } */ diff --git a/gcc/testsuite/gcc.dg/plugin/crash-test-nested-ice-html.py b/gcc/testsuite/gcc.dg/plugin/crash-test-nested-ice-html.py new file mode 100644 index 000000000000..d1de6c53bebc --- /dev/null +++ b/gcc/testsuite/gcc.dg/plugin/crash-test-nested-ice-html.py @@ -0,0 +1,42 @@ +from htmltest import * + +import pytest + +@pytest.fixture(scope='function', autouse=True) +def html_tree(): + return html_tree_from_env() + +def test_results(html_tree): + root = html_tree.getroot () + assert root.tag == make_tag('html') + + head = root.find('xhtml:head', ns) + assert head is not None + + body = root.find('xhtml:body', ns) + assert body is not None + + diag_list = body.find("./xhtml:div[@class='gcc-diagnostic-list']", ns) + assert len(diag_list) + + # Currently the ICE appears nested within the parent error + diag = diag_list.find('xhtml:div', ns) + assert diag is not None + assert diag.attrib['class'] == 'alert alert-danger' + + icon = diag.find('xhtml:span', ns) + assert icon.attrib['class'] == 'pficon pficon-error-circle-o' + + # The message line for the parent error: + message = diag.find("./xhtml:div[@class='gcc-message']", ns) + assert message is not None + assert message[0].tag == make_tag('strong') + assert message[0].text == 'error: ' + assert message[0].tail == " placeholder" + + # The ICE + ice = diag.find('.//xhtml:div[@class="gcc-diagnostic"]', ns) + assert ice is not None + ice_msg = ice.find("./xhtml:div[@class='gcc-message']", ns) + assert ice_msg is not None + assert ice_msg.text == "I'm sorry Dave, I'm afraid I can't do that" diff --git a/gcc/testsuite/gcc.dg/plugin/crash-test-nested-ice-sarif.py b/gcc/testsuite/gcc.dg/plugin/crash-test-nested-ice-sarif.py new file mode 100644 index 000000000000..7e32eb0bb08e --- /dev/null +++ b/gcc/testsuite/gcc.dg/plugin/crash-test-nested-ice-sarif.py @@ -0,0 +1,47 @@ +from sarif import * + +import pytest + +@pytest.fixture(scope='function', autouse=True) +def sarif(): + return sarif_from_env() + +def test_execution_failed(sarif): + runs = sarif['runs'] + run = runs[0] + + invocations = run['invocations'] + assert len(invocations) == 1 + invocation = invocations[0] + + assert invocation['executionSuccessful'] == False + +def test_notification(sarif): + # We expect an execution notification for the ICE in the invocation + runs = sarif['runs'] + run = runs[0] + + invocations = run['invocations'] + assert len(invocations) == 1 + invocation = invocations[0] + + assert invocation['executionSuccessful'] == False + + notifications = invocation['toolExecutionNotifications'] + assert len(notifications) == 1 + + notification = notifications[0] + + assert notification['message']['text'] == "I'm sorry Dave, I'm afraid I can't do that" + assert notification['level'] == 'error' + + loc0 = notification['locations'][0] + assert get_location_artifact_uri(loc0).endswith('crash-test-nested-ice.c') + assert 'inject_ice ();' in get_location_snippet_text(loc0) + + # We may have backtrace information + if 'properties' in notification: + backtrace = notification['properties']['gcc/backtrace'] + assert 'frames' in backtrace + # Ideally we should have a frame for pass_crash_test::execute(function*) + # but we can't rely on this. diff --git a/gcc/testsuite/gcc.dg/plugin/crash-test-nested-ice.c b/gcc/testsuite/gcc.dg/plugin/crash-test-nested-ice.c new file mode 100644 index 000000000000..db8bc2aecdb0 --- /dev/null +++ b/gcc/testsuite/gcc.dg/plugin/crash-test-nested-ice.c @@ -0,0 +1,25 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-fno-report-bug" } */ +/* { dg-additional-options "-fplugin-arg-crash_test_plugin-nested" } */ +/* { dg-additional-options "-fdiagnostics-add-output=sarif" } */ +/* { dg-additional-options "-fdiagnostics-add-output=experimental-html:javascript=no" } */ + +extern void inject_ice (void); + +void test_1 (void) +{ + inject_ice (); /* { dg-ice "I'm sorry Dave, I'm afraid I can't do that" } */ + /* { dg-error "placeholder" "" { target *-*-* } .-1 } */ + /* { dg-regexp "during GIMPLE pass: crash_test" } */ +} + +/* Verify that some JSON was written to a file with the expected name. */ +/* { dg-final { verify-sarif-file } } */ + +/* Use a Python script to verify various properties about the generated + .sarif file: + { dg-final { run-sarif-pytest crash-test-nested-ice.c "crash-test-nested-ice-sarif.py" } } */ + +/* Use a Python script to verify various properties about the generated + .html file: + { dg-final { run-html-pytest crash-test-nested-ice.c "crash-test-nested-ice-html.py" } } */ diff --git a/gcc/testsuite/gcc.dg/plugin/crash-test-nested-write-through-null-html.py b/gcc/testsuite/gcc.dg/plugin/crash-test-nested-write-through-null-html.py new file mode 100644 index 000000000000..cc76baaeab07 --- /dev/null +++ b/gcc/testsuite/gcc.dg/plugin/crash-test-nested-write-through-null-html.py @@ -0,0 +1,42 @@ +from htmltest import * + +import pytest + +@pytest.fixture(scope='function', autouse=True) +def html_tree(): + return html_tree_from_env() + +def test_results(html_tree): + root = html_tree.getroot () + assert root.tag == make_tag('html') + + head = root.find('xhtml:head', ns) + assert head is not None + + body = root.find('xhtml:body', ns) + assert body is not None + + diag_list = body.find("./xhtml:div[@class='gcc-diagnostic-list']", ns) + assert len(diag_list) + + # Currently the ICE appears nested within the parent error + diag = diag_list.find('xhtml:div', ns) + assert diag is not None + assert diag.attrib['class'] == 'alert alert-danger' + + icon = diag.find('xhtml:span', ns) + assert icon.attrib['class'] == 'pficon pficon-error-circle-o' + + # The message line for the parent error: + message = diag.find("./xhtml:div[@class='gcc-message']", ns) + assert message is not None + assert message[0].tag == make_tag('strong') + assert message[0].text == 'error: ' + assert message[0].tail == " placeholder" + + # The ICE + ice = diag.find('.//xhtml:div[@class="gcc-diagnostic"]', ns) + assert ice is not None + ice_msg = ice.find("./xhtml:div[@class='gcc-message']", ns) + assert ice_msg is not None + assert ice_msg.text == "Segmentation fault" diff --git a/gcc/testsuite/gcc.dg/plugin/crash-test-nested-write-through-null-sarif.py b/gcc/testsuite/gcc.dg/plugin/crash-test-nested-write-through-null-sarif.py new file mode 100644 index 000000000000..d97e4b94cea6 --- /dev/null +++ b/gcc/testsuite/gcc.dg/plugin/crash-test-nested-write-through-null-sarif.py @@ -0,0 +1,47 @@ +from sarif import * + +import pytest + +@pytest.fixture(scope='function', autouse=True) +def sarif(): + return sarif_from_env() + +def test_execution_failed(sarif): + runs = sarif['runs'] + run = runs[0] + + invocations = run['invocations'] + assert len(invocations) == 1 + invocation = invocations[0] + + assert invocation['executionSuccessful'] == False + +def test_notification(sarif): + # We expect an execution notification for the ICE in the invocation + runs = sarif['runs'] + run = runs[0] + + invocations = run['invocations'] + assert len(invocations) == 1 + invocation = invocations[0] + + assert invocation['executionSuccessful'] == False + + notifications = invocation['toolExecutionNotifications'] + assert len(notifications) == 1 + + notification = notifications[0] + + assert notification['message']['text'] == "Segmentation fault" + assert notification['level'] == 'error' + + loc0 = notification['locations'][0] + assert get_location_artifact_uri(loc0).endswith('crash-test-nested-write-through-null.c') + assert 'inject_write_through_null ();' in get_location_snippet_text(loc0) + + # We may have backtrace information + if 'properties' in notification: + backtrace = notification['properties']['gcc/backtrace'] + assert 'frames' in backtrace + # Ideally we should have a frame for pass_crash_test::execute(function*) + # but we can't rely on this. diff --git a/gcc/testsuite/gcc.dg/plugin/crash-test-nested-write-through-null.c b/gcc/testsuite/gcc.dg/plugin/crash-test-nested-write-through-null.c new file mode 100644 index 000000000000..bd6a21a83bfb --- /dev/null +++ b/gcc/testsuite/gcc.dg/plugin/crash-test-nested-write-through-null.c @@ -0,0 +1,25 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-fno-report-bug" } */ +/* { dg-additional-options "-fplugin-arg-crash_test_plugin-nested" } */ +/* { dg-additional-options "-fdiagnostics-add-output=sarif" } */ +/* { dg-additional-options "-fdiagnostics-add-output=experimental-html:javascript=no" } */ + +extern void inject_write_through_null (void); + +void test_inject_write_through_null (void) +{ + inject_write_through_null (); /* { dg-ice "Segmentation fault" } */ + /* { dg-error "placeholder" "" { target *-*-* } .-1 } */ + /* { dg-regexp "during GIMPLE pass: crash_test" } */ +} + +/* Verify that some JSON was written to a file with the expected name. */ +/* { dg-final { verify-sarif-file } } */ + +/* Use a Python script to verify various properties about the generated + .sarif file: + { dg-final { run-sarif-pytest crash-test-nested-write-through-null.c "crash-test-nested-write-through-null-sarif.py" } } */ + +/* Use a Python script to verify various properties about the generated + .html file: + { dg-final { run-html-pytest crash-test-nested-write-through-null.c "crash-test-nested-write-through-null-html.py" } } */ diff --git a/gcc/testsuite/gcc.dg/plugin/crash-test-write-though-null-sarif.c b/gcc/testsuite/gcc.dg/plugin/crash-test-write-through-null-sarif.c similarity index 100% rename from gcc/testsuite/gcc.dg/plugin/crash-test-write-though-null-sarif.c rename to gcc/testsuite/gcc.dg/plugin/crash-test-write-through-null-sarif.c diff --git a/gcc/testsuite/gcc.dg/plugin/crash-test-write-though-null-stderr.c b/gcc/testsuite/gcc.dg/plugin/crash-test-write-through-null-stderr.c similarity index 100% rename from gcc/testsuite/gcc.dg/plugin/crash-test-write-though-null-stderr.c rename to gcc/testsuite/gcc.dg/plugin/crash-test-write-through-null-stderr.c diff --git a/gcc/testsuite/gcc.dg/plugin/crash_test_plugin.cc b/gcc/testsuite/gcc.dg/plugin/crash_test_plugin.cc index 03ad096964b3..27c027da6a67 100644 --- a/gcc/testsuite/gcc.dg/plugin/crash_test_plugin.cc +++ b/gcc/testsuite/gcc.dg/plugin/crash_test_plugin.cc @@ -50,14 +50,20 @@ const pass_data pass_data_crash_test = class pass_crash_test : public gimple_opt_pass { public: - pass_crash_test(gcc::context *ctxt) - : gimple_opt_pass(pass_data_crash_test, ctxt) + pass_crash_test (gcc::context *ctxt, bool nested) + : gimple_opt_pass (pass_data_crash_test, ctxt), + m_nested (nested) {} /* opt_pass methods: */ bool gate (function *) final override { return true; } unsigned int execute (function *) final override; +private: + /* If true, inject the crash whilst within a nested diagnostic + (PR diagnostics/121876). */ + bool m_nested; + }; // class pass_test_groups /* Determine if STMT is a call to a function named FUNCNAME. @@ -94,15 +100,39 @@ pass_crash_test::execute (function *fun) gimple *stmt = gsi_stmt (gsi); if (gcall *call = check_for_named_call (stmt, "inject_ice")) { + auto_diagnostic_group d; + if (m_nested) + { + error_at (stmt->location, "placeholder"); + global_dc->push_nesting_level (); + } + input_location = stmt->location; internal_error ("I'm sorry Dave, I'm afraid I can't do that"); + + if (m_nested) + { + global_dc->pop_nesting_level (); + } } if (gcall *call = check_for_named_call (stmt, "inject_write_through_null")) { + auto_diagnostic_group d; + if (m_nested) + { + error_at (stmt->location, "placeholder"); + global_dc->push_nesting_level (); + } + input_location = stmt->location; int *p = NULL; *p = 42; + + if (m_nested) + { + global_dc->pop_nesting_level (); + } } } @@ -124,7 +154,15 @@ plugin_init (struct plugin_name_args *plugin_info, if (!plugin_default_version_check (version, &gcc_version)) return 1; - pass_info.pass = new pass_crash_test (g); + bool nested = false; + + for (int i = 0; i < argc; i++) + { + if (!strcmp (argv[i].key, "nested")) + nested = true; + } + + pass_info.pass = new pass_crash_test (g, nested); pass_info.reference_pass_name = "*warn_function_noreturn"; pass_info.ref_pass_instance_number = 1; pass_info.pos_op = PASS_POS_INSERT_AFTER; diff --git a/gcc/testsuite/gcc.dg/plugin/diagnostic_group_plugin.cc b/gcc/testsuite/gcc.dg/plugin/diagnostic_group_plugin.cc index 48f832579add..2bead63eede8 100644 --- a/gcc/testsuite/gcc.dg/plugin/diagnostic_group_plugin.cc +++ b/gcc/testsuite/gcc.dg/plugin/diagnostic_group_plugin.cc @@ -1,5 +1,6 @@ /* { dg-options "-O" } */ +#define INCLUDE_VECTOR #include "gcc-plugin.h" #include "config.h" #include "system.h" diff --git a/gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_test_show_locus.cc b/gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_test_show_locus.cc index 92839cd35b7f..9ee3219370cb 100644 --- a/gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_test_show_locus.cc +++ b/gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_test_show_locus.cc @@ -32,6 +32,7 @@ to ensure that further very long lines don't start a new linemap. This also means that we can't use macros in the test files. */ +#define INCLUDE_VECTOR #include "gcc-plugin.h" #include "config.h" #include "system.h" diff --git a/gcc/testsuite/gcc.dg/plugin/location_overflow_plugin.cc b/gcc/testsuite/gcc.dg/plugin/location_overflow_plugin.cc index 00ad8704477a..2c40b311165e 100644 --- a/gcc/testsuite/gcc.dg/plugin/location_overflow_plugin.cc +++ b/gcc/testsuite/gcc.dg/plugin/location_overflow_plugin.cc @@ -1,6 +1,7 @@ /* Plugin for testing how gracefully we degrade in the face of very large source files. */ +#define INCLUDE_VECTOR #include "config.h" #include "gcc-plugin.h" #include "system.h" diff --git a/gcc/testsuite/gcc.dg/plugin/plugin.exp b/gcc/testsuite/gcc.dg/plugin/plugin.exp index c7cc36c1cef5..38991e8e6191 100644 --- a/gcc/testsuite/gcc.dg/plugin/plugin.exp +++ b/gcc/testsuite/gcc.dg/plugin/plugin.exp @@ -70,12 +70,14 @@ set plugin_test_list [list \ { poly-int-06_plugin.cc poly-int-test-1.c } \ { poly-int-07_plugin.cc poly-int-test-1.c } \ { crash_test_plugin.cc \ - crash-test-ice-stderr.c \ - crash-test-write-though-null-stderr.c \ - crash-test-ice-sarif.c \ crash-test-ice-in-header-sarif-2.1.c \ crash-test-ice-in-header-sarif-2.2.c \ - crash-test-write-though-null-sarif.c } \ + crash-test-ice-sarif.c \ + crash-test-ice-stderr.c \ + crash-test-nested-ice.c \ + crash-test-nested-write-through-null.c \ + crash-test-write-through-null-sarif.c \ + crash-test-write-through-null-stderr.c } \ { diagnostic_group_plugin.cc \ diagnostic-group-test-1.c } \ { diagnostic_plugin_test_show_locus.cc \ diff --git a/gcc/testsuite/gcc.dg/plugin/start_unit_plugin.cc b/gcc/testsuite/gcc.dg/plugin/start_unit_plugin.cc index 7b4f40e0e9df..3b3406e5864c 100644 --- a/gcc/testsuite/gcc.dg/plugin/start_unit_plugin.cc +++ b/gcc/testsuite/gcc.dg/plugin/start_unit_plugin.cc @@ -2,7 +2,7 @@ * By the time a PLUGIN_START_UNIT callback is invoked, the frontend * initialization should have completed. At least the different *_type_nodes * should have been created. This plugin creates an artificial global - * interger variable. + * integer variable. * */ #include "gcc-plugin.h" diff --git a/gcc/testsuite/gcc.dg/pr120560.c b/gcc/testsuite/gcc.dg/pr120560.c new file mode 100644 index 000000000000..deb3c18f0b16 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr120560.c @@ -0,0 +1,13 @@ +/* { dg-do compile } */ +/* { dg-options "-O3 -fno-tree-ccp -fdump-tree-evrp" } */ +int main() { + int a = -1, b = 2, c = 1; + if (a >= 0) + c = 0; + while (1) { + if (-b + c - 7 >= 0) + return 0; + b = b - 1000 - 2147482648; + } +} +/* { dg-final { scan-tree-dump "return 0" "evrp" } } */ diff --git a/gcc/testsuite/gcc.dg/pr121391-1.c b/gcc/testsuite/gcc.dg/pr121391-1.c new file mode 100644 index 000000000000..6a015210ef9c --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr121391-1.c @@ -0,0 +1,9 @@ +/* { dg-do compile { target aarch64*-*-* arm*-*-* powerpc*-*-* s390*-*-* x86_64-*-* } } */ + +/* For the non existing variable we are faced with an error mark node during + gimplify_asm_expr(). */ + +void test (void) +{ + __asm__ __volatile__ ("" : "={2}" (non_existing_var)); /* { dg-error {'non_existing_var' undeclared} } */ +} diff --git a/gcc/testsuite/gcc.dg/pr121391-2.c b/gcc/testsuite/gcc.dg/pr121391-2.c new file mode 100644 index 000000000000..c03f0ab283b8 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr121391-2.c @@ -0,0 +1,9 @@ +/* { dg-do compile { target aarch64*-*-* arm*-*-* powerpc*-*-* s390*-*-* x86_64-*-* } } */ + +/* For the non existing variable we are faced with an error mark node during + gimplify_asm_expr(). */ + +void test (void) +{ + __asm__ __volatile__ ("" :: "{2}" (non_existing_var)); /* { dg-error {'non_existing_var' undeclared} } */ +} diff --git a/gcc/testsuite/gcc.dg/pr121678.c b/gcc/testsuite/gcc.dg/pr121678.c new file mode 100644 index 000000000000..afb6c208892e --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr121678.c @@ -0,0 +1,7 @@ +/* PR c++/121678 */ +/* { dg-do compile } */ +/* { dg-options "" } */ + +static const _Complex double a = 1.0; +static const double *const r = &__real__ a; +static const double *const i = &__imag__ a; diff --git a/gcc/testsuite/gcc.dg/pr121921-1.c b/gcc/testsuite/gcc.dg/pr121921-1.c new file mode 100644 index 000000000000..828472abbd51 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr121921-1.c @@ -0,0 +1,15 @@ +/* { dg-do compile } */ +/* { dg-options "-O -fdump-tree-cddce1" } */ + +/* PR tree-optimization/121921 */ + +int * +fx (int *b, int *e) +{ + __SIZE_TYPE__ p = b - e; + /* The first forwprop pass should optimize this to return e; */ + return b - p; +} + +/* { dg-final { scan-tree-dump "return e" "cddce1" } } */ + diff --git a/gcc/testsuite/gcc.dg/pr121987.c b/gcc/testsuite/gcc.dg/pr121987.c new file mode 100644 index 000000000000..80bedcc67aa2 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr121987.c @@ -0,0 +1,16 @@ +/* { dg-do compile } */ +/* { dg-options "-O3" } */ +int a, b, c, d; +int main() { + unsigned long long e = 10000000000ULL; + unsigned f; + int g; + while (a) { + c = 1; + d = f; + f = ~(~(~(b && g) % a * ~e) << c); + b = e && f % e + ~f; + g = a; + } + return 0; +} diff --git a/gcc/testsuite/gcc.dg/pr78408-2.c b/gcc/testsuite/gcc.dg/pr78408-2.c index 89c9b7eae435..cad1285f70e4 100644 --- a/gcc/testsuite/gcc.dg/pr78408-2.c +++ b/gcc/testsuite/gcc.dg/pr78408-2.c @@ -1,7 +1,7 @@ /* PR c/78408 */ /* { dg-do compile { target size32plus } } */ -/* { dg-options "-O2 -fdump-tree-fab1-details" } */ -/* { dg-final { scan-tree-dump-not "after previous" "fab1" } } */ +/* { dg-options "-O2 -fdump-tree-forwprop1-details" } */ +/* { dg-final { scan-tree-dump-not "after previous" "forwprop1" } } */ struct S { char a[32]; }; struct T { char a[65536]; }; diff --git a/gcc/testsuite/gcc.dg/sarif-output/extra-semicolon.c b/gcc/testsuite/gcc.dg/sarif-output/extra-semicolon.c new file mode 100644 index 000000000000..bcbb267b567e --- /dev/null +++ b/gcc/testsuite/gcc.dg/sarif-output/extra-semicolon.c @@ -0,0 +1,16 @@ +/* { dg-do compile } */ +/* { dg-options "-fdiagnostics-format=sarif-file -Wpedantic" } */ + +/* Verify SARIF output for a deletion fix-it hint. */ + +struct foo +{ + int color;; +}; + +/* Verify that some JSON was written to a file with the expected name: + { dg-final { verify-sarif-file } } */ + +/* Use a Python script to verify various properties about the generated + .sarif file: + { dg-final { run-sarif-pytest extra-semicolon.c "extra-semicolon.py" } } */ diff --git a/gcc/testsuite/gcc.dg/sarif-output/extra-semicolon.py b/gcc/testsuite/gcc.dg/sarif-output/extra-semicolon.py new file mode 100644 index 000000000000..d7f54d248264 --- /dev/null +++ b/gcc/testsuite/gcc.dg/sarif-output/extra-semicolon.py @@ -0,0 +1,37 @@ +from sarif import * + +import pytest + +@pytest.fixture(scope='function', autouse=True) +def sarif(): + return sarif_from_env() + +def test_deletion_fixit(sarif): + runs = sarif['runs'] + run = runs[0] + results = run['results'] + + # We expect a single error with a secondary location and a fix-it hint. + # + # The textual form of the diagnostic would look like this: + # . PATH/extra-semicolon.c:8:13: warning: extra semicolon in struct or union specified [-Wpedantic] + # . 8 | int color;; + # . | ^ + # . | - + assert len(results) == 1 + + result = results[0] + assert result['level'] == 'warning' + assert result['message']['text'] == "extra semicolon in struct or union specified" + + # We expect one fix-it hint representing a deletion of ';' + assert len(result['fixes']) == 1 + fix = result['fixes'][0] + assert fix['description']['text'] == "Delete ';'" + assert len(fix['artifactChanges']) == 1 + change = fix['artifactChanges'][0] + replacement = change['replacements'][0] + assert replacement['deletedRegion']['startLine'] == 8 + assert replacement['deletedRegion']['startColumn'] == 13 + assert replacement['deletedRegion']['endColumn'] == 14 + assert replacement['insertedContent']['text'] == '' diff --git a/gcc/testsuite/gcc.dg/sarif-output/missing-semicolon.py b/gcc/testsuite/gcc.dg/sarif-output/missing-semicolon.py index a0f848387a22..374d2ec0cfaf 100644 --- a/gcc/testsuite/gcc.dg/sarif-output/missing-semicolon.py +++ b/gcc/testsuite/gcc.dg/sarif-output/missing-semicolon.py @@ -79,8 +79,10 @@ def test_location_relationships(sarif): # We expect one fix-it hint representing an insertion of ';' assert len(result['fixes']) == 1 - assert len(result['fixes'][0]['artifactChanges']) == 1 - change = result['fixes'][0]['artifactChanges'][0] + fix = result['fixes'][0] + assert fix['description']['text'] == "Insert ';'" + assert len(fix['artifactChanges']) == 1 + change = fix['artifactChanges'][0] assert change['artifactLocation']['uri'].endswith('missing-semicolon.c') assert len(change['replacements']) == 1 replacement = change['replacements'][0] diff --git a/gcc/testsuite/gcc.dg/simulate-thread/atomic-load-int128.c b/gcc/testsuite/gcc.dg/simulate-thread/atomic-load-int128.c index 759a83d22f76..6adc7d966201 100644 --- a/gcc/testsuite/gcc.dg/simulate-thread/atomic-load-int128.c +++ b/gcc/testsuite/gcc.dg/simulate-thread/atomic-load-int128.c @@ -1,6 +1,7 @@ /* { dg-do link } */ /* { dg-require-effective-target sync_int_128_runtime } */ /* { dg-options "-mcx16" { target { x86_64-*-* i?86-*-* } } } */ +/* { dg-options "-mlsx -mscq" { target { loongarch64-*-* } } } */ /* { dg-final { simulate-thread } } */ #include diff --git a/gcc/testsuite/gcc.dg/simulate-thread/atomic-other-int128.c b/gcc/testsuite/gcc.dg/simulate-thread/atomic-other-int128.c index 6aaaa88ef049..5538fa1ff924 100644 --- a/gcc/testsuite/gcc.dg/simulate-thread/atomic-other-int128.c +++ b/gcc/testsuite/gcc.dg/simulate-thread/atomic-other-int128.c @@ -1,7 +1,12 @@ /* { dg-do link } */ /* { dg-require-effective-target sync_int_128_runtime } */ /* { dg-options "-mcx16" { target { x86_64-*-* i?86-*-* } } } */ -/* { dg-final { simulate-thread } } */ +/* { dg-options "-mlsx -mscq" { target { loongarch64-*-* } } } */ + +/* xfail on loongarch64 until the new GDB versions with + https://sourceware.org/pipermail/gdb-patches/2025-August/220034.html + is widely used by distros. */ +/* { dg-final { simulate-thread { xfail loongarch64-*-* } } } */ #include #include "simulate-thread.h" diff --git a/gcc/testsuite/gcc.dg/torture/pr121962-1.c b/gcc/testsuite/gcc.dg/torture/pr121962-1.c new file mode 100644 index 000000000000..97f88ad57346 --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr121962-1.c @@ -0,0 +1,21 @@ +/* PR tree-optimization/121962 */ +struct s1 +{ + int t; +}; + +struct s2 +{ + struct s1 t; +}; + +struct s1 p; + +void f(struct s2 a) +{ + struct s1 *b = &a.t; + /* this is a nop load/store and should be ignored + by copy propagation for aggregates. */ + a.t = *b; + p = *b; +} diff --git a/gcc/testsuite/gcc.dg/torture/pr122016.c b/gcc/testsuite/gcc.dg/torture/pr122016.c new file mode 100644 index 000000000000..027a63d42562 --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr122016.c @@ -0,0 +1,27 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-ftree-pre" } */ + +int merge_parse_args_argc; +char merge_parse_args_argv_0; +int strncmp(char *, char *, long); +void _setjmp(); +typedef enum { FALSE, TRUE } boool; +void directory_exists(); +void merge_parse_args() { + int i; + boool help_found = FALSE; + while (i < merge_parse_args_argc && !help_found) { + if (strncmp("", &merge_parse_args_argv_0, 2)) + help_found = TRUE; + else { + for (;;) { + _setjmp(); + break; + } + i++; + directory_exists(); + } + i++; + } + _setjmp(); +} diff --git a/gcc/testsuite/gcc.dg/torture/pr122079-1.c b/gcc/testsuite/gcc.dg/torture/pr122079-1.c new file mode 100644 index 000000000000..0af01a581a17 --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr122079-1.c @@ -0,0 +1,27 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-fcode-hoisting" } */ + +int a, b, c; +void e(int *f) { + int d = 0; + if (f) + goto g; + goto h; +i: + d = 1 + f[0]; +j: + if (c) + goto h; +k: + if (b) + goto i; + if (a) + goto j; +g: + if (d + f[0]) + goto k; +h: + int l[] = {f[0]}; + if (a) + e(l); +} diff --git a/gcc/testsuite/gcc.dg/torture/pr122079-2.c b/gcc/testsuite/gcc.dg/torture/pr122079-2.c new file mode 100644 index 000000000000..40c36b0fefff --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr122079-2.c @@ -0,0 +1,27 @@ +/* { dg-do compile } */ + +int a, b, *c = &a, d, e, f; +void g(int *p) { a = p[0]; } +int main() { + int h = 0; +i: + d = c[0]; + c[0] = h; + if (a) + goto j; +k: + h = c[0] - 1; + while (1) { + if (b) + goto i; + if (f) + goto k; + j: + if (!e) { + int m[] = {c[0]}; + g(m); + break; + } + } + return 0; +} diff --git a/gcc/testsuite/gcc.dg/torture/pr122079-3.c b/gcc/testsuite/gcc.dg/torture/pr122079-3.c new file mode 100644 index 000000000000..df95c7181997 --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr122079-3.c @@ -0,0 +1,27 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-fno-tree-loop-im" } */ + +int a, b, c; +void d(int[]); +void e(int f[][2]) { +g: + b = f[0][1]; + if (c) + goto h; +i: + if (a) + goto g; + if (f[1][1]) + goto j; +h: + if (f[1][1]) + goto i; + goto k; +j: + b--; + if (b + f[0][1]) + goto i; +k: + int l[] = {f[0][1]}; + d(l); +} diff --git a/gcc/testsuite/gcc.dg/torture/pr122188.c b/gcc/testsuite/gcc.dg/torture/pr122188.c new file mode 100644 index 000000000000..2c549630f9de --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr122188.c @@ -0,0 +1,33 @@ +/* PR c/122188 */ +/* { dg-do run } */ + +int +foo (unsigned x, int y) +{ + unsigned a = x; + int b = y; + int ret = __builtin_ctzg (x++, y++); + if (x != a + 1 || y != b + 1) + __builtin_abort (); + return ret; +} + +int +bar (unsigned x, int y) +{ + unsigned a = x; + int b = y; + int ret = __builtin_clzg (x++, y++); + if (x != a + 1 || y != b + 1) + __builtin_abort (); + return ret; +} + +int +main () +{ + if (foo (0, 42) != 42 || foo (1, 5) != 0 || foo (4, 17) != 2) + __builtin_abort (); + if (bar (0, 42) != 42 || bar (~0U, 5) != 0 || bar (~0U >> 4, 17) != 4) + __builtin_abort (); +} diff --git a/gcc/testsuite/gcc.dg/torture/pr122212.c b/gcc/testsuite/gcc.dg/torture/pr122212.c new file mode 100644 index 000000000000..01a66313bbb8 --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr122212.c @@ -0,0 +1,28 @@ +/* { dg-do run } */ + +typedef __UINT32_TYPE__ uint32_t; + +uint32_t __attribute__((noipa)) +ZSTD_countLeadingZeros32_fallback(uint32_t val) +{ + static const uint32_t DeBruijnClz[32] + = { 0, 9, 1, 10, 13, 21, 2, 29, + 11, 14, 16, 18, 22, 25, 3, 30, + 8, 12, 20, 28, 15, 17, 24, 7, + 19, 27, 23, 6, 26, 5, 4, 31}; + val |= val >> 1; + val |= val >> 2; + val |= val >> 4; + val |= val >> 8; + val |= val >> 16; + return 31 - DeBruijnClz[(val * 0x07C4ACDDU) >> 27]; +} + +int main() +{ + if (ZSTD_countLeadingZeros32_fallback (0) != 31) + __builtin_abort (); + if (ZSTD_countLeadingZeros32_fallback (-1U) != 0) + __builtin_abort (); + return 0; +} diff --git a/gcc/testsuite/gcc.dg/torture/pr84830.c b/gcc/testsuite/gcc.dg/torture/pr84830.c index d076170d2587..7921fa506b32 100644 --- a/gcc/testsuite/gcc.dg/torture/pr84830.c +++ b/gcc/testsuite/gcc.dg/torture/pr84830.c @@ -1,46 +1,140 @@ /* { dg-do compile } */ -/* { dg-additional-options "-fno-tree-ch -fno-tree-vrp" } */ +/* { dg-additional-options "-fgimple" } */ int x0; -void +void __GIMPLE (ssa,startwith("pre")) br (int yp, int oo) { - int *qi = &yp; - - if (oo == 0) - { -g8: - if (x0 != 0) - x0 = yp; - else if (oo != 0) - x0 = yp; - - if (x0 == 0) - { - *qi = 0; - x0 = *qi; - } - - if (x0 != 0) - { - ++oo; - goto g8; - } - - if (yp == oo) - yp += !!oo; - } + int oo_lsm_17; + int x0_lsm_16; + _Bool x0_lsm_15; + int x0_lsm_14; + int * qi; + int _1; + int _2; + int _3; + int _4; + int _5; + int _6; + int _8; + int _9; + int _10; + int _11; + _Bool _12; + int _13; + int _14; + int _15; + int _16; + int _17; + + __BB(2): + _1 = oo; + if (_1 == 0) + goto __BB13; + else + goto __BB11; + + __BB(3): + x0_lsm_14_44 = __PHI (__BB10: x0_lsm_14_50, __BB14: x0_lsm_14_25, __BB9: x0_lsm_14_50); + goto __BB4; + + __BB(4): + x0_lsm_14_39 = __PHI (__BB3: x0_lsm_14_44, __BB13: x0_lsm_14_38); + _2 = x0_lsm_14_39; + if (_2 != 0) + goto __BB5; + else + goto __BB6; + + __BB(5): + _3 = yp; + x0_lsm_14_7 = _3; + x0_lsm_15_47 = _Literal (_Bool) 1; + goto __BB8; + + __BB(6): + _4 = oo; + if (_4 != 0) + goto __BB7; + else + goto __BB9; + + __BB(7): + _5 = yp; + x0_lsm_14_48 = _5; + x0_lsm_15_49 = _Literal (_Bool) 1; + goto __BB8; + + __BB(8): + x0_lsm_14_25 = __PHI (__BB5: x0_lsm_14_7, __BB7: x0_lsm_14_48); + _6 = x0_lsm_14_25; + if (_6 == 0) + goto __BB9; + else + goto __BB14; + + __BB(9): + __MEM (qi_36) = 0; + x0_lsm_14_50 = 0; + x0_lsm_15_51 = _Literal (_Bool) 1; + _10 = yp; + _11 = oo; + if (_10 == _11) + goto __BB10; + else + goto __BB3; + + __BB(10): + _12 = _11 != 0; + _13 = (int) _12; + _14 = _10 + _13; + yp = _14; + if (_14 == 0) + goto __BB17; + else + goto __BB3; + + __BB(11): + x0 = 1; + oo_lsm_17_24 = oo; + x0_lsm_16_19 = x0; + goto __BB12; + + __BB(12): + oo_lsm_17_41 = __PHI (__BB11: oo_lsm_17_24, __BB15: oo_lsm_17_43); + _15 = oo_lsm_17_41; + _16 = _15 + 1; + oo_lsm_17_43 = _16; + x0_lsm_16_42 = 1; + _17 = x0_lsm_16_42; + if (_17 <= 1) + goto __BB15; else - { - x0 = 1; - while (x0 < 2) - { - qi = &oo; - ++oo; - x0 = 1; - } - } - - goto g8; + goto __BB16; + + __BB(15): + goto __BB12; + + __BB(16): + x0_lsm_16_52 = __PHI (__BB12: x0_lsm_16_42); + oo_lsm_17_53 = __PHI (__BB12: oo_lsm_17_43); + x0 = x0_lsm_16_52; + oo = oo_lsm_17_53; + goto __BB13; + + __BB(13): + qi_36 = __PHI (__BB2: &yp, __BB16: &oo); + x0_lsm_14_38 = x0; + x0_lsm_15_23 = _Literal (_Bool) 0; + goto __BB4; + + __BB(14): + _8 = oo; + _9 = _8 + 1; + oo = _9; + goto __BB3; + + __BB(17): + return; } diff --git a/gcc/testsuite/gcc.dg/torture/restrict-8.c b/gcc/testsuite/gcc.dg/torture/restrict-8.c index 0118de0133c8..420ba2c64b3c 100644 --- a/gcc/testsuite/gcc.dg/torture/restrict-8.c +++ b/gcc/testsuite/gcc.dg/torture/restrict-8.c @@ -1,5 +1,6 @@ /* { dg-do compile } */ -/* { dg-skip-if "" { *-*-* } { "-O0" } { "" } } */ +/* -Og does not build the points-to aliasing info. */ +/* { dg-skip-if "" { *-*-* } { "-O0" "-Og" } { "" } } */ /* { dg-options "-fdump-tree-fre1" } */ struct S { int i; void *p; int j; }; diff --git a/gcc/testsuite/gcc.dg/tree-ssa/builtin-fprintf-1.c b/gcc/testsuite/gcc.dg/tree-ssa/builtin-fprintf-1.c index 9e4501490dbb..31d7f70e4418 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/builtin-fprintf-1.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/builtin-fprintf-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -fdump-tree-fab1" } */ +/* { dg-options "-O2 -fdump-tree-optimized" } */ typedef struct { int i; } FILE; FILE *fp; @@ -29,12 +29,12 @@ void test (void) vi9 = 0; } -/* { dg-final { scan-tree-dump "vi0.*fwrite.*\"hello\".*1, 5, fp.*vi1" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi1.*fwrite.*\"hello\\\\n\".*1, 6, fp.*vi2" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi2.*fputc.*fp.*vi3" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi3 ={v} 0\[^\(\)\]*vi4 ={v} 0" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi4.*fwrite.*\"hello\".*1, 5, fp.*vi5" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi5.*fwrite.*\"hello\\\\n\".*1, 6, fp.*vi6" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi6.*fputc.*fp.*vi7" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi7.*fputc.*fp.*vi8" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi8.*fprintf.*fp.*\"%d%d\".*vi9" "fab1"} } */ +/* { dg-final { scan-tree-dump "vi0.*fwrite.*\"hello\".*1, 5, fp.*vi1" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi1.*fwrite.*\"hello\\\\n\".*1, 6, fp.*vi2" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi2.*fputc.*fp.*vi3" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi3 ={v} 0\[^\(\)\]*vi4 ={v} 0" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi4.*fwrite.*\"hello\".*1, 5, fp.*vi5" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi5.*fwrite.*\"hello\\\\n\".*1, 6, fp.*vi6" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi6.*fputc.*fp.*vi7" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi7.*fputc.*fp.*vi8" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi8.*fprintf.*fp.*\"%d%d\".*vi9" "optimized"} } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/builtin-fprintf-chk-1.c b/gcc/testsuite/gcc.dg/tree-ssa/builtin-fprintf-chk-1.c index f3de73acd86c..f4f18e8bebbf 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/builtin-fprintf-chk-1.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/builtin-fprintf-chk-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -fdump-tree-fab1" } */ +/* { dg-options "-O2 -fdump-tree-optimized" } */ typedef struct { int i; } FILE; FILE *fp; @@ -29,12 +29,12 @@ void test (void) vi9 = 0; } -/* { dg-final { scan-tree-dump "vi0.*fwrite.*\"hello\".*1, 5, fp.*vi1" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi1.*fwrite.*\"hello\\\\n\".*1, 6, fp.*vi2" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi2.*fputc.*fp.*vi3" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi3 ={v} 0\[^\(\)\]*vi4 ={v} 0" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi4.*fwrite.*\"hello\".*1, 5, fp.*vi5" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi5.*fwrite.*\"hello\\\\n\".*1, 6, fp.*vi6" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi6.*fputc.*fp.*vi7" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi7.*fputc.*fp.*vi8" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi8.*__fprintf_chk.*fp.*1.*\"%d%d\".*vi9" "fab1"} } */ +/* { dg-final { scan-tree-dump "vi0.*fwrite.*\"hello\".*1, 5, fp.*vi1" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi1.*fwrite.*\"hello\\\\n\".*1, 6, fp.*vi2" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi2.*fputc.*fp.*vi3" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi3 ={v} 0\[^\(\)\]*vi4 ={v} 0" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi4.*fwrite.*\"hello\".*1, 5, fp.*vi5" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi5.*fwrite.*\"hello\\\\n\".*1, 6, fp.*vi6" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi6.*fputc.*fp.*vi7" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi7.*fputc.*fp.*vi8" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi8.*__fprintf_chk.*fp.*1.*\"%d%d\".*vi9" "optimized"} } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/builtin-printf-1.c b/gcc/testsuite/gcc.dg/tree-ssa/builtin-printf-1.c index bd119e0e55bd..056edea65d2d 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/builtin-printf-1.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/builtin-printf-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -fdump-tree-fab1" } */ +/* { dg-options "-O2 -fdump-tree-optimized" } */ extern int printf (const char *, ...); volatile int vi0, vi1, vi2, vi3, vi4, vi5, vi6, vi7, vi8, vi9, via; @@ -29,13 +29,13 @@ void test (void) via = 0; } -/* { dg-final { scan-tree-dump "vi0.*printf.*\"hello\".*vi1" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi1.*puts.*\"hello\".*vi2" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi2.*putchar.*vi3" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi3 ={v} 0\[^\(\)\]*vi4 ={v} 0" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi4.*printf.*\"hello\".*vi5" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi5.*puts.*\"hello\".*vi6" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi6.*putchar.*vi7" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi7 ={v} 0\[^\(\)\]*vi8 ={v} 0" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi8.*putchar.*vi9" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi9.*puts.*\"hello\\\\n\".*via" "fab1"} } */ +/* { dg-final { scan-tree-dump "vi0.*printf.*\"hello\".*vi1" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi1.*puts.*\"hello\".*vi2" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi2.*putchar.*vi3" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi3 ={v} 0\[^\(\)\]*vi4 ={v} 0" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi4.*printf.*\"hello\".*vi5" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi5.*puts.*\"hello\".*vi6" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi6.*putchar.*vi7" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi7 ={v} 0\[^\(\)\]*vi8 ={v} 0" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi8.*putchar.*vi9" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi9.*puts.*\"hello\\\\n\".*via" "optimized"} } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/builtin-printf-chk-1.c b/gcc/testsuite/gcc.dg/tree-ssa/builtin-printf-chk-1.c index a0c0ef946f38..1a9690fde125 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/builtin-printf-chk-1.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/builtin-printf-chk-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -fdump-tree-fab1" } */ +/* { dg-options "-O2 -fdump-tree-optimized" } */ extern int __printf_chk (int, const char *, ...); volatile int vi0, vi1, vi2, vi3, vi4, vi5, vi6, vi7, vi8, vi9, via; @@ -29,13 +29,13 @@ void test (void) via = 0; } -/* { dg-final { scan-tree-dump "vi0.*__printf_chk.*1.*\"hello\".*vi1" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi1.*puts.*\"hello\".*vi2" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi2.*putchar.*vi3" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi3 ={v} 0\[^\(\)\]*vi4 ={v} 0" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi4.*__printf_chk.*1.*\"hello\".*vi5" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi5.*puts.*\"hello\".*vi6" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi6.*putchar.*vi7" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi7 ={v} 0\[^\(\)\]*vi8 ={v} 0" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi8.*putchar.*vi9" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi9.*puts.*\"hello\\\\n\".*via" "fab1"} } */ +/* { dg-final { scan-tree-dump "vi0.*__printf_chk.*1.*\"hello\".*vi1" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi1.*puts.*\"hello\".*vi2" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi2.*putchar.*vi3" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi3 ={v} 0\[^\(\)\]*vi4 ={v} 0" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi4.*__printf_chk.*1.*\"hello\".*vi5" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi5.*puts.*\"hello\".*vi6" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi6.*putchar.*vi7" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi7 ={v} 0\[^\(\)\]*vi8 ={v} 0" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi8.*putchar.*vi9" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi9.*puts.*\"hello\\\\n\".*via" "optimized"} } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/builtin-vfprintf-1.c b/gcc/testsuite/gcc.dg/tree-ssa/builtin-vfprintf-1.c index 29b4a4b4ebe7..3124309198c6 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/builtin-vfprintf-1.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/builtin-vfprintf-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -fdump-tree-fab1" } */ +/* { dg-options "-O2 -fdump-tree-optimized" } */ #include @@ -29,10 +29,10 @@ test (va_list ap1, va_list ap2, va_list ap3, va_list ap4, va_list ap5, vi7 = 0; } -/* { dg-final { scan-tree-dump "vi0.*fwrite.*\"hello\".*1, 5, fp.*vi1" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi1.*fwrite.*\"hello\\\\n\".*1, 6, fp.*vi2" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi2.*fputc.*fp.*vi3" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi3 ={v} 0\[^\(\)\]*vi4 ={v} 0" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi4.*vfprintf.*\"%s\".*vi5" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi5.*vfprintf.*\"%c\".*vi6" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi6.*vfprintf.*\"%s\\\\n\".*vi7" "fab1"} } */ +/* { dg-final { scan-tree-dump "vi0.*fwrite.*\"hello\".*1, 5, fp.*vi1" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi1.*fwrite.*\"hello\\\\n\".*1, 6, fp.*vi2" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi2.*fputc.*fp.*vi3" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi3 ={v} 0\[^\(\)\]*vi4 ={v} 0" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi4.*vfprintf.*\"%s\".*vi5" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi5.*vfprintf.*\"%c\".*vi6" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi6.*vfprintf.*\"%s\\\\n\".*vi7" "optimized"} } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/builtin-vfprintf-chk-1.c b/gcc/testsuite/gcc.dg/tree-ssa/builtin-vfprintf-chk-1.c index c91c70921b50..15ee7f979526 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/builtin-vfprintf-chk-1.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/builtin-vfprintf-chk-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -fdump-tree-fab1" } */ +/* { dg-options "-O2 -fdump-tree-optimized" } */ #include @@ -29,10 +29,10 @@ test (va_list ap1, va_list ap2, va_list ap3, va_list ap4, va_list ap5, vi7 = 0; } -/* { dg-final { scan-tree-dump "vi0.*fwrite.*\"hello\".*1, 5, fp.*vi1" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi1.*fwrite.*\"hello\\\\n\".*1, 6, fp.*vi2" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi2.*fputc.*fp.*vi3" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi3 ={v} 0\[^\(\)\]*vi4 ={v} 0" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi4.*__vfprintf_chk.*fp.*1.*\"%s\".*vi5" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi5.*__vfprintf_chk.*fp.*1.*\"%c\".*vi6" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi6.*__vfprintf_chk.*fp.*1.*\"%s\\\\n\".*vi7" "fab1"} } */ +/* { dg-final { scan-tree-dump "vi0.*fwrite.*\"hello\".*1, 5, fp.*vi1" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi1.*fwrite.*\"hello\\\\n\".*1, 6, fp.*vi2" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi2.*fputc.*fp.*vi3" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi3 ={v} 0\[^\(\)\]*vi4 ={v} 0" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi4.*__vfprintf_chk.*fp.*1.*\"%s\".*vi5" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi5.*__vfprintf_chk.*fp.*1.*\"%c\".*vi6" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi6.*__vfprintf_chk.*fp.*1.*\"%s\\\\n\".*vi7" "optimized"} } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/builtin-vprintf-1.c b/gcc/testsuite/gcc.dg/tree-ssa/builtin-vprintf-1.c index 023384a3b819..ed7a4ae05592 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/builtin-vprintf-1.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/builtin-vprintf-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -fdump-tree-fab1" } */ +/* { dg-options "-O2 -fdump-tree-optimized" } */ #include @@ -27,10 +27,10 @@ test (va_list ap1, va_list ap2, va_list ap3, va_list ap4, va_list ap5, vi7 = 0; } -/* { dg-final { scan-tree-dump "vi0.*vprintf.*\"hello\".*vi1" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi1.*puts.*\"hello\".*vi2" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi2.*putchar.*vi3" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi3 ={v} 0\[^\(\)\]*vi4 ={v} 0" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi4.*vprintf.*\"%s\".*vi5" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi5.*vprintf.*\"%c\".*vi6" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi6.*vprintf.*\"%s\\\\n\".*vi7" "fab1"} } */ +/* { dg-final { scan-tree-dump "vi0.*vprintf.*\"hello\".*vi1" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi1.*puts.*\"hello\".*vi2" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi2.*putchar.*vi3" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi3 ={v} 0\[^\(\)\]*vi4 ={v} 0" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi4.*vprintf.*\"%s\".*vi5" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi5.*vprintf.*\"%c\".*vi6" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi6.*vprintf.*\"%s\\\\n\".*vi7" "optimized"} } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/builtin-vprintf-chk-1.c b/gcc/testsuite/gcc.dg/tree-ssa/builtin-vprintf-chk-1.c index 2b21f7b70e22..b86fe33f0edd 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/builtin-vprintf-chk-1.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/builtin-vprintf-chk-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -fdump-tree-fab1" } */ +/* { dg-options "-O2 -fdump-tree-optimized" } */ #include @@ -27,10 +27,10 @@ test (va_list ap1, va_list ap2, va_list ap3, va_list ap4, va_list ap5, vi7 = 0; } -/* { dg-final { scan-tree-dump "vi0.*__vprintf_chk.*1.*\"hello\".*vi1" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi1.*puts.*\"hello\".*vi2" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi2.*putchar.*vi3" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi3 ={v} 0\[^\(\)\]*vi4 ={v} 0" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi4.*__vprintf_chk.*1.*\"%s\".*vi5" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi5.*__vprintf_chk.*1.*\"%c\".*vi6" "fab1"} } */ -/* { dg-final { scan-tree-dump "vi6.*__vprintf_chk.*1.*\"%s\\\\n\".*vi7" "fab1"} } */ +/* { dg-final { scan-tree-dump "vi0.*__vprintf_chk.*1.*\"hello\".*vi1" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi1.*puts.*\"hello\".*vi2" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi2.*putchar.*vi3" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi3 ={v} 0\[^\(\)\]*vi4 ={v} 0" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi4.*__vprintf_chk.*1.*\"%s\".*vi5" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi5.*__vprintf_chk.*1.*\"%c\".*vi6" "optimized"} } */ +/* { dg-final { scan-tree-dump "vi6.*__vprintf_chk.*1.*\"%s\\\\n\".*vi7" "optimized"} } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/copy-prop-aggregate-1.c b/gcc/testsuite/gcc.dg/tree-ssa/copy-prop-aggregate-1.c new file mode 100644 index 000000000000..1094c4d768bb --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/copy-prop-aggregate-1.c @@ -0,0 +1,33 @@ +/* { dg-do compile } */ +/* { dg-options "-O1 -fdump-tree-forwprop1-details -fdump-tree-optimized" } */ +/* PR tree-optimization/121751 */ + + +struct s1 +{ + int t[1024]; +}; + +struct s2 { + struct s1 t; +}; + +struct s3 +{ + struct s2 t; +}; + +void g(struct s3*); + +void f(struct s1 s) +{ + struct s2 removeme; + removeme.t = s; + struct s3 t1; + t1.t = removeme; + g(&t1); +} + + +/* { dg-final { scan-tree-dump-times "after previous" 1 "forwprop1" } } */ +/* { dg-final { scan-tree-dump-not "removeme " "optimized" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/copy-prop-aggregate-arg-2.c b/gcc/testsuite/gcc.dg/tree-ssa/copy-prop-aggregate-arg-2.c new file mode 100644 index 000000000000..11f0768c1112 --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/copy-prop-aggregate-arg-2.c @@ -0,0 +1,33 @@ +/* { dg-do compile } */ +/* { dg-options "-O1 -fdump-tree-forwprop1-details -fdump-tree-optimized" } */ + + +struct s1 +{ + int t[1024]; +}; + +struct s2 { + struct s1 t; +}; + +struct s3 +{ + struct s2 t; +}; + +void g(struct s3); + +void f(struct s1 s) +{ + struct s2 removeme; + removeme.t = s; + struct s3 removeme2; + removeme2.t = removeme; + g(removeme2); +} + + +/* { dg-final { scan-tree-dump-times "after previous" 2 "forwprop1" } } */ +/* { dg-final { scan-tree-dump-not "removeme " "optimized" } } */ +/* { dg-final { scan-tree-dump-not "removeme2 " "optimized" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/copy-prop-aggregate-memcpy-1.c b/gcc/testsuite/gcc.dg/tree-ssa/copy-prop-aggregate-memcpy-1.c new file mode 100644 index 000000000000..5faf6d0bf9bb --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/copy-prop-aggregate-memcpy-1.c @@ -0,0 +1,18 @@ +/* { dg-do compile } */ +/* { dg-options "-O1 -fdump-tree-forwprop1-details -fdump-tree-optimized" } */ +/* PR tree-optimization/121418 */ + +struct s1 +{ + unsigned char t[1024]; +}; + +struct s1 f(struct s1 a) +{ + struct s1 removeme1 = a; + __builtin_memcpy (&removeme1, &a, sizeof(struct s1)); + return removeme1; +} + +/* { dg-final { scan-tree-dump-times "after previous" 1 "forwprop1" } } */ +/* { dg-final { scan-tree-dump-not "removeme1 " "optimized" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/copy-prop-aggregate-memcpy-2.c b/gcc/testsuite/gcc.dg/tree-ssa/copy-prop-aggregate-memcpy-2.c new file mode 100644 index 000000000000..b1ba30d0aba0 --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/copy-prop-aggregate-memcpy-2.c @@ -0,0 +1,20 @@ +/* { dg-do compile } */ +/* { dg-options "-O1 -fdump-tree-forwprop1-details -fdump-tree-optimized" } */ +/* PR tree-optimization/121417 */ + +struct s1 +{ + unsigned char t[1024]; +}; + +struct s1 f(struct s1 a) +{ + struct s1 removeme1 = a; + struct s1 removeme2; + __builtin_memcpy (&removeme2, &removeme1, sizeof(struct s1)); + return removeme2; +} + +/* { dg-final { scan-tree-dump-times "after previous" 2 "forwprop1" } } */ +/* { dg-final { scan-tree-dump-not "removeme1 " "optimized" } } */ +/* { dg-final { scan-tree-dump-not "removeme2 " "optimized" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/cselim-1.c b/gcc/testsuite/gcc.dg/tree-ssa/cselim-1.c new file mode 100644 index 000000000000..0a9ff554c450 --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/cselim-1.c @@ -0,0 +1,38 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fdump-tree-phiopt1-stats" } */ + +struct Loc { + int x[3]; +}; + +void bar (struct Loc *); + +int foo (int i, int j, int k, int b) +{ + struct Loc IND; + int res; + + if (b) + { + IND.x[0] = i; + IND.x[1] = j; + IND.x[2] = k-1; + } + else + { + IND.x[0] = i; + IND.x[1] = j; + IND.x[2] = k; + } + + /* This should be optimized to i + j + {k, k + 1}. */ + res = IND.x[0] + IND.x[1] + IND.x[2]; + + /* This is just to prevent SRA. */ + bar (&IND); + + return res; +} + +/* All three stores should be commonalized. */ +/* { dg-final { scan-tree-dump "if-then-else store replacement: 3" "phiopt1" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/cselim-2.c b/gcc/testsuite/gcc.dg/tree-ssa/cselim-2.c new file mode 100644 index 000000000000..db58dd22e8a8 --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/cselim-2.c @@ -0,0 +1,38 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -ftree-cselim -fdump-tree-cselim-stats -fno-ssa-phiopt" } */ + +struct Loc { + int x[3]; +}; + +void bar (struct Loc *); + +int foo (int i, int j, int k, int b) +{ + struct Loc IND; + int res; + + if (b) + { + IND.x[0] = i; + IND.x[1] = j; + IND.x[2] = k-1; + } + else + { + IND.x[0] = i; + IND.x[1] = j; + IND.x[2] = k; + } + + /* This should be optimized to i + j + {k, k + 1}. */ + res = IND.x[0] + IND.x[1] + IND.x[2]; + + /* This is just to prevent SRA. */ + bar (&IND); + + return res; +} + +/* All three stores should be commonalized. */ +/* { dg-final { scan-tree-dump "if-then-else store replacement: 3" "cselim" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/cselim-3.c b/gcc/testsuite/gcc.dg/tree-ssa/cselim-3.c new file mode 100644 index 000000000000..d0c8e6a9e18c --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/cselim-3.c @@ -0,0 +1,16 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fdump-tree-phiopt1-details-stats" } */ +/* PR tree-optimization/122155 */ + +void f(int *a, int b, int c) +{ + if (c) + *a = b; + else + *a = b; +} + +/* When commonalizing a store with the same rhs, a PHI does not need to be created. */ +/* { dg-final { scan-tree-dump "if-then-else store replacement: 1" "phiopt1" } } */ +/* { dg-final { scan-tree-dump-not "to use phi:" "phiopt1" } } */ +/* { dg-final { scan-tree-dump-not "PHI <" "phiopt1" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr122033-1.c b/gcc/testsuite/gcc.dg/tree-ssa/pr122033-1.c new file mode 100644 index 000000000000..4ef8c6c3150f --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/pr122033-1.c @@ -0,0 +1,18 @@ +/* PR middle-end/122033 */ +/* { dg-do compile } */ +/* { dg-options "-O2 -fdump-tree-optimized" } */ + +void bar1 (char *, int); +void bar3(void) __attribute__((noreturn)); +void foo1 (int size) +{ + { + char temp[size]; + temp[size-1] = '\0'; + bar1 (temp, size); + } + bar3 (); +} + +/* { dg-final { scan-tree-dump-not "__builtin_stack_save" "optimized"} } */ +/* { dg-final { scan-tree-dump-not "__builtin_stack_restore" "optimized"} } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr122033-2.c b/gcc/testsuite/gcc.dg/tree-ssa/pr122033-2.c new file mode 100644 index 000000000000..f429324f64c7 --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/pr122033-2.c @@ -0,0 +1,23 @@ +/* PR middle-end/122033 */ +/* { dg-do compile } */ +/* { dg-options "-O2 -fdump-tree-optimized" } */ + +void g(int*); +void h(); +double t; +void f(int a, int b) +{ + { + int array0[a]; + { + int array1[b]; + g(array0); + g(array1); + } + t = __builtin_sin(t); + } + h (); +} + +/* { dg-final { scan-tree-dump-times "__builtin_stack_save" 2 "optimized"} } */ +/* { dg-final { scan-tree-dump-times "__builtin_stack_restore" 2 "optimized"} } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr122153-1.c b/gcc/testsuite/gcc.dg/tree-ssa/pr122153-1.c new file mode 100644 index 000000000000..d6e7527aaa6f --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/pr122153-1.c @@ -0,0 +1,30 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fdump-tree-phiopt1" } */ +/* PR tree-optimization/122153 */ +struct s1 +{ + int t; +}; +void g(struct s1*); +struct s1 f(int *a, int c, int d) +{ + struct s1 r; + int t1; + if (c < d) + { + r = (struct s1){}; + t1 = c; + } + else + { + r = (struct s1){}; + t1 = d; + } + g(&r); + r.t = t1; + return r; +} +/* the `r = {};` store should be commonialized out of the conditional + and produce a MIN_EXPR in phiopt1. */ + +/* { dg-final { scan-tree-dump "MIN_EXPR" "phiopt1" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr79691.c b/gcc/testsuite/gcc.dg/tree-ssa/pr79691.c index bf889318c063..43770c95bcab 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/pr79691.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/pr79691.c @@ -34,4 +34,4 @@ int f4 (int i) /* { dg-final { scan-tree-dump-times "sprintf" 1 "optimized" } } { dg-final { scan-tree-dump-times "snprintf" 1 "optimized" } } - { dg-final { scan-tree-dump " = 9;" "optimized" } } */ + { dg-final { scan-tree-dump "return 9;" "optimized" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-ccp-10.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-ccp-10.c index d6126a3e8efe..dc87a56de06e 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/ssa-ccp-10.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-ccp-10.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O1 -fdump-tree-fab1" } */ +/* { dg-options "-O1 -fdump-tree-optimized" } */ /* Check that we fold strlen of equally long strings, and that we do not fail to terminate when there is a nontrivial cycle in the corresponding @@ -32,4 +32,4 @@ void foo(int i) } /* There should be no calls to strlen. */ -/* { dg-final { scan-tree-dump-times "strlen" 0 "fab1"} } */ +/* { dg-final { scan-tree-dump-times "strlen" 0 "optimized"} } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-19.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-19.c index bb6300d5c8d7..daa58328ec6d 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-19.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-19.c @@ -1,5 +1,6 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -fdump-tree-pre-stats" } */ +/* Both phiopt and cselim can commonalize the stores so disable them too. */ +/* { dg-options "-O2 -fdump-tree-pre-stats -fno-ssa-phiopt -fno-tree-cselim" } */ struct Loc { int x[3]; diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-36.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-36.c new file mode 100644 index 000000000000..51de1be2eb5c --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-36.c @@ -0,0 +1,24 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fdump-tree-pre-stats" } */ + +static unsigned long * +min_element(unsigned long* array, unsigned long size) +{ + unsigned long* min = &array[0]; + + for (unsigned long i = 1; i < size; ++i) + if (array[i] < *min) + min = &array[i]; + + return min; +} + +unsigned long +min(unsigned long* array, unsigned long size) +{ + return *min_element(array, size); +} + +/* We want to hoist the *min dereference before the loop. */ +/* { dg-final { scan-tree-dump "HOIST inserted: 1" "pre" } } */ +/* { dg-final { scan-tree-dump-times "= \\\*" 2 "pre" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/nodump-extractlast-1.c b/gcc/testsuite/gcc.dg/vect/nodump-extractlast-1.c new file mode 100644 index 000000000000..980ac3e42188 --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/nodump-extractlast-1.c @@ -0,0 +1,21 @@ +/* Check for a bung in the treatment of LOOP_VINFO_PARTIAL_LOAD_STORE_BIAS when + using VEC_EXTRACT. */ +/* { dg-require-effective-target vect_int } */ + +char c = 4; + +__attribute__((noipa)) +int +foo () +{ + for ( ; c > 3; c -= 3); + return c - 1; +} + +int +main () +{ + if (foo() != 0) + __builtin_abort(); + return 0; +} diff --git a/gcc/testsuite/gcc.dg/vect/pr109011-2.c b/gcc/testsuite/gcc.dg/vect/pr109011-2.c index 4c7e6ad07a46..dc62d01da5d9 100644 --- a/gcc/testsuite/gcc.dg/vect/pr109011-2.c +++ b/gcc/testsuite/gcc.dg/vect/pr109011-2.c @@ -31,5 +31,4 @@ baz (int *p, int *q) /* { dg-final { scan-tree-dump-times " = \.CLZ \\\(vect" 3 "optimized" { target { { { { i?86-*-* x86_64-*-* } && avx512cd } && lzcnt } && bmi } } } } */ /* { dg-final { scan-tree-dump-times " = \.CTZ \\\(vect" 3 "optimized" { target powerpc_vsx } } } */ -/* { dg-final { scan-tree-dump-times " = \.CTZ \\\(vect" 2 "optimized" { target s390_vx } } } */ -/* { dg-final { scan-tree-dump-times " = \.POPCOUNT \\\(vect" 1 "optimized" { target s390_vx } } } */ +/* { dg-final { scan-tree-dump-times " = \.CTZ \\\(vect" 3 "optimized" { target s390_vx } } } */ diff --git a/gcc/testsuite/gcc.dg/vect/pr109011-4.c b/gcc/testsuite/gcc.dg/vect/pr109011-4.c index 38b2ab4d511e..8440ec73080a 100644 --- a/gcc/testsuite/gcc.dg/vect/pr109011-4.c +++ b/gcc/testsuite/gcc.dg/vect/pr109011-4.c @@ -31,5 +31,4 @@ baz (long long *p, long long *q) /* { dg-final { scan-tree-dump-times " = \.CLZ \\\(vect" 3 "optimized" { target { { { { i?86-*-* x86_64-*-* } && avx512cd } && lzcnt } && bmi } } } } */ /* { dg-final { scan-tree-dump-times " = \.CTZ \\\(vect" 3 "optimized" { target powerpc_vsx } } } */ -/* { dg-final { scan-tree-dump-times " = \.CTZ \\\(vect" 2 "optimized" { target s390_vx } } } */ -/* { dg-final { scan-tree-dump-times " = \.POPCOUNT \\\(vect" 1 "optimized" { target s390_vx } } } */ +/* { dg-final { scan-tree-dump-times " = \.CTZ \\\(vect" 3 "optimized" { target s390_vx } } } */ diff --git a/gcc/testsuite/gcc.dg/vect/pr122023.c b/gcc/testsuite/gcc.dg/vect/pr122023.c new file mode 100644 index 000000000000..7555907730f8 --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/pr122023.c @@ -0,0 +1,17 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target int32plus } */ + +unsigned int gvar1; +int gvar2; +void f () +{ + unsigned int temp1; + while (gvar1--) + { + temp1 = gvar2; + gvar2 >>= 1; + gvar2 &= 2147483647; + temp1 <<= 31; + gvar2 |= temp1; + } +} diff --git a/gcc/testsuite/gcc.dg/vect/pr122158.c b/gcc/testsuite/gcc.dg/vect/pr122158.c new file mode 100644 index 000000000000..5d0f7dac7dc0 --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/pr122158.c @@ -0,0 +1,15 @@ +/* { dg-do compile } */ + +int g_3, g_181, g_7; +void func_54(unsigned int, int *); +int func_24() +{ + int p_25; + int *l_49 = &g_3; + func_54(g_7, l_49); +} +void func_54(unsigned int p_55, int *p_56) +{ + for (g_181 = 27; g_181 != 9; --g_181) + p_55 || (*p_56 = 0); +} diff --git a/gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s1244.c b/gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s1244.c index 94a30412df81..3b76bb347828 100644 --- a/gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s1244.c +++ b/gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s1244.c @@ -9,7 +9,7 @@ real_t s1244(struct args_t * func_args) { // node splitting -// cycle with ture and anti dependency +// cycle with true and anti dependency initialise_arrays(__func__); diff --git a/gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s2244.c b/gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s2244.c index 9b0ca7447dd3..277ebb83c60b 100644 --- a/gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s2244.c +++ b/gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s2244.c @@ -9,7 +9,7 @@ real_t s2244(struct args_t * func_args) { // node splitting -// cycle with ture and anti dependency +// cycle with true and anti dependency initialise_arrays(__func__); diff --git a/gcc/testsuite/gcc.dg/vect/vect-bool-2.c b/gcc/testsuite/gcc.dg/vect/vect-bool-2.c new file mode 100644 index 000000000000..88db018a4f51 --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/vect-bool-2.c @@ -0,0 +1,17 @@ +/* PR122128 */ +/* { dg-do compile } */ + +_Bool a[1024]; +signed char b[1024]; + +void foo () +{ + for (int i = 0; i < 1024; ++i) + { + bool x = a[i]; + bool y = b[i] < 17; + a[i] = x & y; + } +} + +/* { dg-final { scan-tree-dump "optimized: loop vectorized" "vect" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-bool-cmp-3.c b/gcc/testsuite/gcc.dg/vect/vect-bool-cmp-3.c new file mode 100644 index 000000000000..4d96af65e928 --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/vect-bool-cmp-3.c @@ -0,0 +1,14 @@ +/* PR110223 */ +/* { dg-do compile } */ + +_Bool k[1024]; +_Bool res[1024]; + +int main () +{ + int i; + for (i = 0; i < 1024; i++) + res[i] = k[i] != (i == 0); +} + +/* { dg-final { scan-tree-dump "optimized: loop vectorized" "vect" { target vect_unpack } } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-bool-cmp-4.c b/gcc/testsuite/gcc.dg/vect/vect-bool-cmp-4.c new file mode 100644 index 000000000000..162f22835daa --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/vect-bool-cmp-4.c @@ -0,0 +1,14 @@ +/* PR110223 */ +/* { dg-do compile } */ + +_Bool k[1024]; +_Bool res[1024]; + +int main () +{ + char i; + for (i = 0; i < 64; i++) + res[i] = k[i] != (i == 0); +} + +/* { dg-final { scan-tree-dump "optimized: loop vectorized" "vect" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-cond-14.c b/gcc/testsuite/gcc.dg/vect/vect-cond-14.c new file mode 100644 index 000000000000..754168c5646f --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/vect-cond-14.c @@ -0,0 +1,38 @@ +#include "tree-vect.h" + +short a[256]; +short b[256]; +short c[256]; +_Bool pb[256]; + +void __attribute__((noipa)) +predicate_by_bool() +{ + for (int i = 0; i < 256; i++) + c[i] = pb[i] ? a[i] : b[i]; +} + +int +main () +{ + check_vect (); + +#pragma GCC novector + for (int i = 0; i < 256; i++) + { + a[i] = i; + b[i] = -i; + pb[i] = (i % 3) == 0; + } + + predicate_by_bool(); + +#pragma GCC novector + for (int i = 0; i < 256; i++) + if (c[i] != (pb[i] ? a[i] : b[i])) + abort (); + + return 0; +} + +/* { dg-final { scan-tree-dump "optimized: loop vectorized" "vect" { target { vect_unpack && vect_condition } } } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-reduc-chain-2.c b/gcc/testsuite/gcc.dg/vect/vect-reduc-chain-2.c index 5bc2686fc9d6..0d8d012ec2ea 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-reduc-chain-2.c +++ b/gcc/testsuite/gcc.dg/vect/vect-reduc-chain-2.c @@ -74,6 +74,6 @@ main (void) } /* { dg-final { scan-tree-dump "vect_recog_dot_prod_pattern: detected" "vect" } } */ -/* { dg-final { scan-tree-dump "vectorizing statement: \\S+ = DOT_PROD_EXPR" "vect" { target { vect_sdot_qi } } } } */ -/* { dg-final { scan-tree-dump "vectorizing statement: \\S+ = DOT_PROD_EXPR" "vect" { target { vect_udot_qi } } } } */ -/* { dg-final { scan-tree-dump "vectorizing statement: \\S+ = DOT_PROD_EXPR" "vect" { target { vect_sdot_hi } } } } */ +/* { dg-final { scan-tree-dump "vectorizing SLP node starting from: \\S+ = DOT_PROD_EXPR" "vect" { target { vect_sdot_qi } } } } */ +/* { dg-final { scan-tree-dump "vectorizing SLP node starting from: \\S+ = DOT_PROD_EXPR" "vect" { target { vect_udot_qi } } } } */ +/* { dg-final { scan-tree-dump "vectorizing SLP node starting from: \\S+ = DOT_PROD_EXPR" "vect" { target { vect_sdot_hi } } } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-reduc-chain-3.c b/gcc/testsuite/gcc.dg/vect/vect-reduc-chain-3.c index 6a733fbac534..1cefbe0b959f 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-reduc-chain-3.c +++ b/gcc/testsuite/gcc.dg/vect/vect-reduc-chain-3.c @@ -64,5 +64,5 @@ main (void) __builtin_abort (); } -/* { dg-final { scan-tree-dump "vectorizing statement: \\S+ = SAD_EXPR" "vect" { target vect_udot_qi } } } */ -/* { dg-final { scan-tree-dump "vectorizing statement: \\S+ = DOT_PROD_EXPR" "vect" { target vect_sdot_hi } } } */ +/* { dg-final { scan-tree-dump "vectorizing SLP node starting from: \\S+ = SAD_EXPR" "vect" { target vect_udot_qi } } } */ +/* { dg-final { scan-tree-dump "vectorizing SLP node starting from: \\S+ = DOT_PROD_EXPR" "vect" { target vect_sdot_hi } } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/asm-flag-1.c b/gcc/testsuite/gcc.target/aarch64/asm-flag-1.c index 49901e59c38e..7b07cdd77210 100644 --- a/gcc/testsuite/gcc.target/aarch64/asm-flag-1.c +++ b/gcc/testsuite/gcc.target/aarch64/asm-flag-1.c @@ -30,6 +30,6 @@ void f(char *out) /* { dg-final { scan-assembler "cset.*, hi" } } */ /* { dg-final { scan-assembler "cset.*, ls" } } */ /* { dg-final { scan-assembler "cset.*, ge" } } */ -/* { dg-final { scan-assembler "cset.*, ls" } } */ +/* { dg-final { scan-assembler "cset.*, lt" } } */ /* { dg-final { scan-assembler "cset.*, gt" } } */ /* { dg-final { scan-assembler "cset.*, le" } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/builtin_pld_pli.c b/gcc/testsuite/gcc.target/aarch64/builtin_pld_pli.c index 8cbaa97c00ca..0e60baf057b9 100644 --- a/gcc/testsuite/gcc.target/aarch64/builtin_pld_pli.c +++ b/gcc/testsuite/gcc.target/aarch64/builtin_pld_pli.c @@ -1,5 +1,6 @@ /* { dg-do compile } */ /* { dg-options "-march=armv8-a -O2" } */ +/* { dg-final { check-function-bodies "**" "" "" } } */ #include @@ -38,23 +39,27 @@ prefetch_for_read_write (void *a) __pldx (PST, SLC, KEEP, a); __pldx (PST, SLC, STRM, a); } - -/* { dg-final { scan-assembler "prfm\tPLDL1KEEP, \\\[x\[0-9\]+\\\]" } } */ -/* { dg-final { scan-assembler "prfm\tPLDL1STRM, \\\[x\[0-9\]+\\\]" } } */ -/* { dg-final { scan-assembler "prfm\tPLDL2KEEP, \\\[x\[0-9\]+\\\]" } } */ -/* { dg-final { scan-assembler "prfm\tPLDL2STRM, \\\[x\[0-9\]+\\\]" } } */ -/* { dg-final { scan-assembler "prfm\tPLDL3KEEP, \\\[x\[0-9\]+\\\]" } } */ -/* { dg-final { scan-assembler "prfm\tPLDL3STRM, \\\[x\[0-9\]+\\\]" } } */ -/* { dg-final { scan-assembler "prfm\tPLDSLCKEEP, \\\[x\[0-9\]+\\\]" } } */ -/* { dg-final { scan-assembler "prfm\tPLDSLCSTRM, \\\[x\[0-9\]+\\\]" } } */ -/* { dg-final { scan-assembler "prfm\tPSTL1KEEP, \\\[x\[0-9\]+\\\]" } } */ -/* { dg-final { scan-assembler "prfm\tPSTL1STRM, \\\[x\[0-9\]+\\\]" } } */ -/* { dg-final { scan-assembler "prfm\tPSTL2KEEP, \\\[x\[0-9\]+\\\]" } } */ -/* { dg-final { scan-assembler "prfm\tPSTL2STRM, \\\[x\[0-9\]+\\\]" } } */ -/* { dg-final { scan-assembler "prfm\tPSTL3KEEP, \\\[x\[0-9\]+\\\]" } } */ -/* { dg-final { scan-assembler "prfm\tPSTL3STRM, \\\[x\[0-9\]+\\\]" } } */ -/* { dg-final { scan-assembler "prfm\tPSTSLCKEEP, \\\[x\[0-9\]+\\\]" } } */ -/* { dg-final { scan-assembler "prfm\tPSTSLCSTRM, \\\[x\[0-9\]+\\\]" } } */ +/* +** prefetch_for_read_write: +** ... +** prfm\tPLDL1KEEP, \[x[0-9]+\] +** prfm\tPLDL1STRM, \[x[0-9]+\] +** prfm\tPLDL2KEEP, \[x[0-9]+\] +** prfm\tPLDL2STRM, \[x[0-9]+\] +** prfm\tPLDL3KEEP, \[x[0-9]+\] +** prfm\tPLDL3STRM, \[x[0-9]+\] +** prfm\tPLDSLCKEEP, \[x[0-9]+\] +** prfm\tPLDSLCSTRM, \[x[0-9]+\] +** prfm\tPSTL1KEEP, \[x[0-9]+\] +** prfm\tPSTL1STRM, \[x[0-9]+\] +** prfm\tPSTL2KEEP, \[x[0-9]+\] +** prfm\tPSTL2STRM, \[x[0-9]+\] +** prfm\tPSTL3KEEP, \[x[0-9]+\] +** prfm\tPSTL3STRM, \[x[0-9]+\] +** prfm\tPSTSLCKEEP, \[x[0-9]+\] +** prfm\tPSTSLCSTRM, \[x[0-9]+\] +** ... +*/ void prefetch_simple (void *a) @@ -62,9 +67,13 @@ prefetch_simple (void *a) __pld (a); __pli (a); } - -/* { dg-final { scan-assembler "prfm\tPLDL1KEEP, \\\[x\[0-9\]+\\\]" } } */ -/* { dg-final { scan-assembler "prfm\tPLIL1KEEP, \\\[x\[0-9\]+\\\]" } } */ +/* +** prefetch_simple: +** ... +** prfm\tPLDL1KEEP, \[x[0-9]+\] +** prfm\tPLIL1KEEP, \[x[0-9]+\] +** ... +*/ void prefetch_instructions (void *a) @@ -78,13 +87,16 @@ prefetch_instructions (void *a) __plix (SLC, KEEP, a); __plix (SLC, STRM, a); } - -/* { dg-final { scan-assembler "prfm\tPLIL1KEEP, \\\[x\[0-9\]+\\\]" } } */ -/* { dg-final { scan-assembler "prfm\tPLIL1STRM, \\\[x\[0-9\]+\\\]" } } */ -/* { dg-final { scan-assembler "prfm\tPLIL2KEEP, \\\[x\[0-9\]+\\\]" } } */ -/* { dg-final { scan-assembler "prfm\tPLIL2STRM, \\\[x\[0-9\]+\\\]" } } */ -/* { dg-final { scan-assembler "prfm\tPLIL3KEEP, \\\[x\[0-9\]+\\\]" } } */ -/* { dg-final { scan-assembler "prfm\tPLIL3STRM, \\\[x\[0-9\]+\\\]" } } */ -/* { dg-final { scan-assembler "prfm\tPLISLCKEEP, \\\[x\[0-9\]+\\\]" } } */ -/* { dg-final { scan-assembler "prfm\tPLISLCSTRM, \\\[x\[0-9\]+\\\]" } } */ - +/* +** prefetch_instructions: +** ... +** prfm\tPLIL1KEEP, \[x[0-9]+\] +** prfm\tPLIL1STRM, \[x[0-9]+\] +** prfm\tPLIL2KEEP, \[x[0-9]+\] +** prfm\tPLIL2STRM, \[x[0-9]+\] +** prfm\tPLIL3KEEP, \[x[0-9]+\] +** prfm\tPLIL3STRM, \[x[0-9]+\] +** prfm\tPLISLCKEEP, \[x[0-9]+\] +** prfm\tPLISLCSTRM, \[x[0-9]+\] +** ... +*/ diff --git a/gcc/testsuite/gcc.target/aarch64/csinc-1.c b/gcc/testsuite/gcc.target/aarch64/csinc-1.c index 132a0f67939b..53e1ae2c7d98 100644 --- a/gcc/testsuite/gcc.target/aarch64/csinc-1.c +++ b/gcc/testsuite/gcc.target/aarch64/csinc-1.c @@ -1,16 +1,22 @@ /* { dg-do compile } */ /* { dg-options "-O2" } */ +/* { dg-final { check-function-bodies "**" "" "" } } */ unsigned int test_csinc32_ifcvt(unsigned int w0, unsigned int w1, unsigned int w2) { - /* { dg-final { scan-assembler "csinc\tw\[0-9\]*.*ne" } } */ if (w0 == w1) ++ w2; return w2; } +/* +** test_csinc32_ifcvt: +** cmp\tw0, w1 +** cinc\tw0, w2, eq +** ret +*/ unsigned int test_csinc32_condasn1(unsigned int w0, @@ -19,10 +25,15 @@ test_csinc32_condasn1(unsigned int w0, unsigned int w3) { unsigned int w4; - /* { dg-final { scan-assembler "csinc\tw\[0-9\]*.*ne" } } */ w4 = (w0 == w1) ? (w3 + 1) : w2; return w4; } +/* +** test_csinc32_condasn1: +** cmp\tw0, w1 +** csinc\tw0, w2, w3, ne +** ret +*/ unsigned int test_csinc32_condasn2(unsigned int w0, @@ -31,21 +42,31 @@ test_csinc32_condasn2(unsigned int w0, unsigned int w3) { unsigned int w4; - /* { dg-final { scan-assembler "csinc\tw\[0-9\]*.*eq" } } */ w4 = (w0 == w1) ? w2 : (w3 + 1); return w4; } +/* +** test_csinc32_condasn2: +** cmp\tw0, w1 +** csinc\tw0, w2, w3, eq +** ret +*/ unsigned long long test_csinc64_ifcvt(unsigned long long x0, unsigned long long x1, unsigned long long x2) { - /* { dg-final { scan-assembler "csinc\tx\[0-9\]*.*ne" } } */ if (x0 == x1) ++ x2; return x2; } +/* +** test_csinc64_ifcvt: +** cmp\tx0, x1 +** cinc\tx0, x2, eq +** ret +*/ unsigned long long test_csinc64_condasn1(unsigned long long x0, @@ -54,10 +75,15 @@ test_csinc64_condasn1(unsigned long long x0, unsigned long long x3) { unsigned long long x4; - /* { dg-final { scan-assembler "csinc\tx\[0-9\]*.*ne" } } */ x4 = (x0 == x1) ? (x3 + 1) : x2; return x4; } +/* +** test_csinc64_condasn1: +** cmp\tx0, x1 +** csinc\tx0, x2, x3, ne +** ret +*/ unsigned long long test_csinc64_condasn2(unsigned long long x0, @@ -66,7 +92,12 @@ test_csinc64_condasn2(unsigned long long x0, unsigned long long x3) { unsigned long long x4; - /* { dg-final { scan-assembler "csinc\tx\[0-9\]*.*eq" } } */ x4 = (x0 == x1) ? x2 : (x3 + 1); return x4; } +/* +** test_csinc64_condasn2: +** cmp\tx0, x1 +** csinc\tx0, x2, x3, eq +** ret +*/ diff --git a/gcc/testsuite/gcc.target/aarch64/csneg-1.c b/gcc/testsuite/gcc.target/aarch64/csneg-1.c index 4860d64c9353..2533e7b56fe8 100644 --- a/gcc/testsuite/gcc.target/aarch64/csneg-1.c +++ b/gcc/testsuite/gcc.target/aarch64/csneg-1.c @@ -1,5 +1,6 @@ /* { dg-do compile } */ /* { dg-options "-O2" } */ +/* { dg-final { check-function-bodies "**" "" "" } } */ int test_csneg32_condasn1(int w0, @@ -8,10 +9,15 @@ test_csneg32_condasn1(int w0, int w3) { int w4; - /* { dg-final { scan-assembler "csneg\tw\[0-9\]*.*ne" } } */ w4 = (w0 == w1) ? -w3 : w2; return w4; } +/* +** test_csneg32_condasn1: +** cmp\tw0, w1 +** csneg\tw0, w2, w3, ne +** ret +*/ int test_csneg32_condasn2(int w0, @@ -20,10 +26,15 @@ test_csneg32_condasn2(int w0, int w3) { int w4; - /* { dg-final { scan-assembler "csneg\tw\[0-9\]*.*eq" } } */ w4 = (w0 == w1) ? w3 : -w2; return w4; } +/* +** test_csneg32_condasn2: +** cmp\tw0, w1 +** csneg\tw0, w3, w2, eq +** ret +*/ long long test_csneg64_condasn1(long long x0, @@ -32,10 +43,15 @@ test_csneg64_condasn1(long long x0, long long x3) { long long x4; - /* { dg-final { scan-assembler "csneg\tx\[0-9\]*.*ne" } } */ x4 = (x0 == x1) ? -x3 : x2; return x4; } +/* +** test_csneg64_condasn1: +** cmp\tx0, x1 +** csneg\tx0, x2, x3, ne +** ret +*/ long long test_csneg64_condasn2(long long x0, @@ -44,27 +60,41 @@ test_csneg64_condasn2(long long x0, long long x3) { long long x4; - /* { dg-final { scan-assembler "csneg\tx\[0-9\]*.*eq" } } */ x4 = (x0 == x1) ? x3 : -x2; return x4; } +/* +** test_csneg64_condasn2: +** cmp\tx0, x1 +** csneg\tx0, x3, x2, eq +** ret +*/ int test_csneg_cmp(int x) { - /* { dg-final { scan-assembler "csneg\tw\[0-9\]" } } */ if (x > 3) x = -x; return x; } +/* +** test_csneg_cmp: +** cmp\tw0, 3 +** csneg\tw0, w0, w0, le +** ret +*/ unsigned long long test_csneg_uxtw (unsigned int a, unsigned int b, unsigned int c) { - /* { dg-final { scan-assembler "csneg\tw\[0-9\]*.*ne" } } */ - /* { dg-final { scan-assembler-not "uxtw\tw\[0-9\]*.*" } } */ unsigned int val; val = a ? b: -c; return val; } +/* +** test_csneg_uxtw: +** cmp\tw0, 0 +** csneg\tw0, w1, w2, ne +** ret +*/ diff --git a/gcc/testsuite/gcc.target/aarch64/declare-simd-2.c b/gcc/testsuite/gcc.target/aarch64/declare-simd-2.c index 2f4d3a866e55..595a17297b82 100644 --- a/gcc/testsuite/gcc.target/aarch64/declare-simd-2.c +++ b/gcc/testsuite/gcc.target/aarch64/declare-simd-2.c @@ -51,11 +51,10 @@ void f05 (short a, short *b, short c) *b += a + c; } -/* { dg-final { scan-assembler {_ZGVnN4ul2v_f05:} } } */ -/* { dg-final { scan-assembler {_ZGVnN4ul2v_f05:} } } */ -/* { dg-final { scan-assembler {_ZGVnM8ul2v_f05:} } } */ +/* { dg-final { scan-assembler {_ZGVnM4ul2v_f05:} } } */ /* { dg-final { scan-assembler {_ZGVnM8ul2v_f05:} } } */ +/* { dg-final { scan-assembler {_ZGVnN4ul2v_f05:} } } */ +/* { dg-final { scan-assembler {_ZGVnN8ul2v_f05:} } } */ #ifdef __cplusplus } #endif - diff --git a/gcc/testsuite/gcc.target/aarch64/flt_mov_immediate_1.c b/gcc/testsuite/gcc.target/aarch64/flt_mov_immediate_1.c index 7b92a5ae40fb..36a1e3452042 100644 --- a/gcc/testsuite/gcc.target/aarch64/flt_mov_immediate_1.c +++ b/gcc/testsuite/gcc.target/aarch64/flt_mov_immediate_1.c @@ -1,52 +1,74 @@ /* { dg-do compile } */ /* { dg-options "-O3" } */ +/* { dg-final { check-function-bodies "**" "" "" } } */ float f0(void) { float x = 0.0f; return x; } +/* +** f0: +** movi\tv0.2s, #?0 +** ret +*/ float fn1(void) { float x = -0.0f; return x; } +/* +** fn1: +** movi\tv0.2s, 0x80, lsl 24 +** ret +*/ float f1(void) { float x = 256.0f; return x; } +/* +** f1: +** mov\t(w[0-9]+), 1132462080 +** fmov\ts0, \1 +** ret +*/ float f2(void) { float x = 123256.0f; return x; } +/* +** f2: +** mov\t(w[0-9]+), 48128 +** movk\t\1, 0x47f0, lsl 16 +** fmov\ts0, \1 +** ret +*/ float f3(void) { float x = 2.0f; return x; } +/* +** f3: +** fmov\ts0, 2\.0e\+0 +** ret +*/ float f4(void) { float x = -20000.1; return x; } - - -/* { dg-final { scan-assembler-times "movi\tv\[0-9\]+\\\.2s, ?#0" 1 } } */ -/* { dg-final { scan-assembler-times "movi\tv\[0-9\]+\\\.2s, 0x80, lsl 24" 1 } } */ -/* { dg-final { scan-assembler-times "movi\tv\[0-9\]+\\\.2s, 0x80, lsl 24" 1 } } */ - -/* { dg-final { scan-assembler-times "mov\tw\[0-9\]+, 48128" 1 } } */ -/* { dg-final { scan-assembler-times "movk\tw\[0-9\]+, 0x47f0, lsl 16" 1 } } */ - -/* { dg-final { scan-assembler-times "fmov\ts\[0-9\]+, 2\\\.0e\\\+0" 1 } } */ - -/* { dg-final { scan-assembler-times "mov\tw\[0-9\]+, 16435" 1 } } */ -/* { dg-final { scan-assembler-times "movk\tw\[0-9\]+, 0xc69c, lsl 16" 1 } } */ - +/* +** f4: +** mov\t(w[0-9]+), 16435 +** movk\t\1, 0xc69c, lsl 16 +** fmov\ts0, \1 +** ret +*/ diff --git a/gcc/testsuite/gcc.target/aarch64/ldp_stp_18.c b/gcc/testsuite/gcc.target/aarch64/ldp_stp_18.c index ea9fffc22082..49aa0b20ab7d 100644 --- a/gcc/testsuite/gcc.target/aarch64/ldp_stp_18.c +++ b/gcc/testsuite/gcc.target/aarch64/ldp_stp_18.c @@ -107,7 +107,7 @@ CONS4_FN (1, double); CONS4_FN (2, double); /* -** cons2_8_double: +** cons4_4_double: ** ... ** stp q[0-9]+, .* ** ret @@ -115,7 +115,7 @@ CONS4_FN (2, double); CONS4_FN (4, double); /* -** cons2_8_double: +** cons4_8_double: ** ... ** stp q[0-9]+, .* ** ret diff --git a/gcc/testsuite/gcc.target/aarch64/mv-1.c b/gcc/testsuite/gcc.target/aarch64/mv-1.c new file mode 100644 index 000000000000..6f095ecd7a73 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/mv-1.c @@ -0,0 +1,43 @@ +/* { dg-do compile } */ +/* { dg-options "-O0" } */ + +__attribute__ ((target_version ("default"))) int +foo () +{ + return 1; +} + +__attribute__ ((target_version ("rng"))) int +foo () +{ + return 2; +} + +__attribute__ ((target_version ("flagm"))) int +foo () +{ + return 3; +} + +__attribute__ ((target_version ("rng+flagm"))) int +foo () +{ + return 4; +} + +int +bar () +{ + return foo (); +} + +/* Check usage of the first two FMV features, in case of off-by-one errors. */ +/* { dg-final { scan-assembler-times "\nfoo\.default:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\nfoo\._Mrng:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\nfoo\._MrngMflagm:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\nfoo\._Mflagm:\n" 1 } } */ + +/* { dg-final { scan-assembler-times "\nfoo\.resolver:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\tbl\tfoo\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\t\.type\tfoo, %gnu_indirect_function\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\t\.set\tfoo,foo\.resolver\n" 1 } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/mv-and-mvc-error1.c b/gcc/testsuite/gcc.target/aarch64/mv-and-mvc-error1.c new file mode 100644 index 000000000000..b08de29dd3ca --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/mv-and-mvc-error1.c @@ -0,0 +1,9 @@ +/* { dg-do compile } */ +/* { dg-require-ifunc "" } */ +/* { dg-options "-O0" } */ + +__attribute__ ((target_version ("dotprod"))) int +foo () { return 3; } /* { dg-message "previous definition of .foo \\\[\\\[target_version\\(.dotprod.\\)\\\]\\\]. with type .int\\(void\\)." } */ + +__attribute__ ((target_clones ("dotprod", "sve"))) int +foo () { return 1; } /* { dg-error "redefinition of .foo \\\[\\\[target_clones\\(.dotprod., .sve.\\)\\\]\\\]." } */ diff --git a/gcc/testsuite/gcc.target/aarch64/mv-and-mvc-error2.c b/gcc/testsuite/gcc.target/aarch64/mv-and-mvc-error2.c new file mode 100644 index 000000000000..d34b246efc55 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/mv-and-mvc-error2.c @@ -0,0 +1,9 @@ +/* { dg-do compile } */ +/* { dg-require-ifunc "" } */ +/* { dg-options "-O0" } */ + +__attribute__ ((target_version ("default"))) int +foo () { return 1; } /* { dg-message "previous definition of .foo \\\[\\\[target_version\\(.default.\\)\\\]\\\]. with type .int\\(void\\)." } */ + +__attribute__ ((target_clones ("dotprod", "sve"))) float +foo () { return 3; } /* { dg-error "conflicting types for .foo \\\[\\\[target_clones\\(.dotprod., .sve.\\)\\\]\\\].; have .float\\(void\\)." } */ diff --git a/gcc/testsuite/gcc.target/aarch64/mv-and-mvc-error3.c b/gcc/testsuite/gcc.target/aarch64/mv-and-mvc-error3.c new file mode 100644 index 000000000000..a6a45bdf7aa9 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/mv-and-mvc-error3.c @@ -0,0 +1,8 @@ +/* { dg-do compile } */ +/* { dg-require-ifunc "" } */ +/* { dg-options "-O0" } */ + +float foo () { return 1; } /* { dg-message "previous definition of .foo." } */ + +__attribute__ ((target_clones ("default", "dotprod", "sve"))) float +foo () { return 3; } /* { dg-error "redefinition of .foo \\\[\\\[target_clones\\(.default., .dotprod., .sve.\\)\\\]\\\]." } */ diff --git a/gcc/testsuite/gcc.target/aarch64/mv-and-mvc1.c b/gcc/testsuite/gcc.target/aarch64/mv-and-mvc1.c new file mode 100644 index 000000000000..39ed306eec25 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/mv-and-mvc1.c @@ -0,0 +1,37 @@ +/* { dg-do compile } */ +/* { dg-require-ifunc "" } */ +/* { dg-options "-O0" } */ + +__attribute__((target_version("default"))) +int foo () +{ + return 0; +} + +__attribute__((target_clones("dotprod", "sve+sve2"))) +int foo () +{ + return 1; +} + +__attribute__((target_clones("sve", "sve2"))) +int foo () +{ + return 2; +} + +int bar() +{ + return foo (); +} + + +/* { dg-final { scan-assembler-times "\nfoo\.default:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\nfoo\._Mdotprod:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\nfoo\._MsveMsve2:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\nfoo\._Msve:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\nfoo\._Msve2:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\nfoo\.resolver:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\tbl\tfoo\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\t\.type\tfoo, %gnu_indirect_function\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\t\.set\tfoo,foo\.resolver\n" 1 } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/mv-and-mvc2.c b/gcc/testsuite/gcc.target/aarch64/mv-and-mvc2.c new file mode 100644 index 000000000000..17c7cbdd02da --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/mv-and-mvc2.c @@ -0,0 +1,28 @@ +/* { dg-do compile } */ +/* { dg-require-ifunc "" } */ +/* { dg-options "-O0" } */ + +__attribute__((target_version("default"))) +int foo (); + +__attribute__((target_clones("dotprod", "sve+sve2"))) +int foo () +{ + return 1; +} + +__attribute__((target_clones("sve", "sve2"))) +int foo () +{ + return 2; +} + +/* { dg-final { scan-assembler-times "\nfoo\.default:\n" 0 } } */ +/* { dg-final { scan-assembler-times "\nfoo:\n" 0 } } */ +/* { dg-final { scan-assembler-times "\nfoo\._Mdotprod:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\nfoo\._MsveMsve2:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\nfoo\._Msve:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\nfoo\._Msve2:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\nfoo\.resolver:\n" 0 } } */ +/* { dg-final { scan-assembler-times "\n\t\.type\tfoo, %gnu_indirect_function\n" 0 } } */ +/* { dg-final { scan-assembler-times "\n\t\.set\tfoo,foo\.resolver\n" 0 } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/mv-and-mvc3.c b/gcc/testsuite/gcc.target/aarch64/mv-and-mvc3.c new file mode 100644 index 000000000000..8325c8e06999 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/mv-and-mvc3.c @@ -0,0 +1,40 @@ +/* { dg-do compile } */ +/* { dg-require-ifunc "" } */ +/* { dg-options "-O0" } */ + +__attribute__((target_clones("dotprod", "sve+sve2"))) +int foo (); + +__attribute__((target_version("default"))) +int foo () +{ + return 0; +} + +__attribute__((target_clones("sve", "sve2"))) +int foo () +{ + return 2; +} + +int bar() +{ + return foo (); +} + + +/* { dg-final { scan-assembler-times "\nfoo\.default:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\nfoo\._Mdotprod:\n" 0 } } */ +/* { dg-final { scan-assembler-times "\nfoo\._MsveMsve2:\n" 0 } } */ +/* { dg-final { scan-assembler-times "\nfoo\._Msve:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\nfoo\._Msve2:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\nfoo\.resolver:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\tbl\tfoo\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\t\.type\tfoo, %gnu_indirect_function\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\t\.set\tfoo,foo\.resolver\n" 1 } } */ +// { dg-final { scan-assembler-times "\n\tadrp\tx\[0-9\]+, foo\.default\n" 1 } } +/* { dg-final { scan-assembler-times "\n\tadrp\tx\[0-9\]+, foo\._Mdotprod\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\tadrp\tx\[0-9\]+, foo\._MsveMsve2\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\tadrp\tx\[0-9\]+, foo\._Msve\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\tadrp\tx\[0-9\]+, foo\._Msve2\n" 1 } } */ + diff --git a/gcc/testsuite/gcc.target/aarch64/mv-and-mvc4.c b/gcc/testsuite/gcc.target/aarch64/mv-and-mvc4.c new file mode 100644 index 000000000000..951c9500d747 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/mv-and-mvc4.c @@ -0,0 +1,37 @@ +/* { dg-do compile } */ +/* { dg-require-ifunc "" } */ +/* { dg-options "-O0" } */ + +__attribute__((target_version("dotprod"))) +int foo () +{ + return 0; +} + +__attribute__((target_clones("default", "sve+sve2"))) +int foo () +{ + return 1; +} + +__attribute__((target_clones("sve", "sve2"))) +int foo () +{ + return 2; +} + +int bar() +{ + return foo (); +} + + +/* { dg-final { scan-assembler-times "\nfoo\.default:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\nfoo\._Mdotprod:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\nfoo\._MsveMsve2:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\nfoo\._Msve:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\nfoo\._Msve2:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\nfoo\.resolver:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\tbl\tfoo\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\t\.type\tfoo, %gnu_indirect_function\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\t\.set\tfoo,foo\.resolver\n" 1 } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/mv-error1.c b/gcc/testsuite/gcc.target/aarch64/mv-error1.c new file mode 100644 index 000000000000..61c9af276e6e --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/mv-error1.c @@ -0,0 +1,18 @@ +/* { dg-do compile } */ +/* { dg-require-ifunc "" } */ +/* { dg-options "-O0" } */ + +__attribute__ ((target_version ("default"))) int +foo (); + +__attribute__ ((target_version ("default"))) int +foo () { return 1; } /* { dg-message "previous definition of .foo \\\[\\\[target_version\\(.default.\\)\\\]\\\]. with type .int\\(void\\)." } */ + +__attribute__ ((target_version ("dotprod"))) float +foo () { return 3; } /* { dg-error "conflicting types for .foo \\\[\\\[target_version\\(.dotprod.\\)\\\]\\\].; have .float\\(void\\)." } */ + +__attribute__ ((target_version ("sve"))) int +foo2 () { return 1; } /* { dg-message "previous definition of .foo2 \\\[\\\[target_version\\(.sve.\\)\\\]\\\]. with type .int\\(void\\)." } */ + +__attribute__ ((target_version ("dotprod"))) float +foo2 () { return 3; } /* { dg-error "conflicting types for .foo2 \\\[\\\[target_version\\(.dotprod.\\)\\\]\\\].; have .float\\(void\\)." } */ diff --git a/gcc/testsuite/gcc.target/aarch64/mv-error10.c b/gcc/testsuite/gcc.target/aarch64/mv-error10.c new file mode 100644 index 000000000000..218f103a8f43 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/mv-error10.c @@ -0,0 +1,13 @@ +/* { dg-do compile } */ +/* { dg-require-ifunc "" } */ +/* { dg-options "-O0" } */ + +void +bar () +{ + __attribute__ ((target_version ("dotprod"))) int + foo1 (); /* { dg-message "versioned declarations are only allowed at file scope" } */ + + __attribute__ ((target_version ("simd"))) int + foo2 () { return 1; } /* { dg-message "versioned definitions are only allowed at file scope" } */ +} diff --git a/gcc/testsuite/gcc.target/aarch64/mv-error11.c b/gcc/testsuite/gcc.target/aarch64/mv-error11.c new file mode 100644 index 000000000000..0fdd66012d30 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/mv-error11.c @@ -0,0 +1,9 @@ +/* { dg-do compile } */ +/* { dg-require-ifunc "" } */ +/* { dg-options "-O0" } */ + +int fn () asm("name"); +int fn () { return 1; } /* { dg-error "cannot use function multiversioning on a renamed function" } */ +int fn [[gnu::target_version("sve")]] () { return 1; } + +int fn2 [[gnu::target_version("sve")]] () asm("name"); /* { dg-warning ".asm. declaration ignored due to conflict with previous rename" } */ diff --git a/gcc/testsuite/gcc.target/aarch64/mv-error12.c b/gcc/testsuite/gcc.target/aarch64/mv-error12.c new file mode 100644 index 000000000000..45da85a67b96 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/mv-error12.c @@ -0,0 +1,13 @@ +/* { dg-do compile } */ +/* { dg-options "-fopenmp" } */ +/* { dg-require-ifunc "" } */ + +#pragma omp declare simd +int fn [[gnu::target_version("sve")]] () { return 1; } /* { dg-error ".#pragma omp declare simd. cannot be used with function multi-versioning" } */ + +#pragma omp declare simd +int fn2 () { return 1; } + +int fn2 [[gnu::target_version("sve")]] (); /* { dg-warning "ignoring attribute .target_version. because it conflicts with attribute .omp declare simd." } */ + +int fn3 [[gnu::target_version("sve")]] [[gnu::simd]] () { return 1; } /* { dg-warning "ignoring attribute .simd. because it conflicts with attribute .target_version." } */ diff --git a/gcc/testsuite/gcc.target/aarch64/mv-error2.c b/gcc/testsuite/gcc.target/aarch64/mv-error2.c new file mode 100644 index 000000000000..19d961d0a5a6 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/mv-error2.c @@ -0,0 +1,9 @@ +/* { dg-do compile } */ +/* { dg-require-ifunc "" } */ +/* { dg-options "-O0" } */ + +__attribute__ ((target_version ("dotprod"))) float +foo () { return 3; } /* { dg-message "previous definition of .foo \\\[\\\[target_version\\(.dotprod.\\)\\\]\\\]. with type .float\\(void\\)." } */ + +__attribute__ ((target_version ("dotprod"))) float +foo () { return 3; } /* { dg-error "redefinition of .foo \\\[\\\[target_version\\(.dotprod.\\)\\\]\\\]." } */ diff --git a/gcc/testsuite/gcc.target/aarch64/mv-error3.c b/gcc/testsuite/gcc.target/aarch64/mv-error3.c new file mode 100644 index 000000000000..451ce028c655 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/mv-error3.c @@ -0,0 +1,12 @@ +/* { dg-do compile } */ +/* { dg-require-ifunc "" } */ +/* { dg-options "-O0" } */ + +__attribute__ ((target_version ("dotprod"))) float +foo () { return 3; } + +__attribute__ ((target_version ("default"))) float +foo () { return 3; } /* { dg-message "previous definition of .foo \\\[\\\[target_version\\(.default.\\)\\\]\\\]. with type .float\\(void\\)." } */ + +__attribute__ ((target_version ("default"))) float +foo () { return 3; } /* { dg-error "redefinition of .foo \\\[\\\[target_version\\(.default.\\)\\\]\\\]." } */ diff --git a/gcc/testsuite/gcc.target/aarch64/mv-error4.c b/gcc/testsuite/gcc.target/aarch64/mv-error4.c new file mode 100644 index 000000000000..44d3195590d2 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/mv-error4.c @@ -0,0 +1,9 @@ +/* { dg-do compile } */ +/* { dg-require-ifunc "" } */ +/* { dg-options "-O0" } */ + +__attribute__ ((target_version ("test"))) float +foo () { return 3; } /* { dg-error "invalid feature modifier .test. of value .test. in .target_version. attribute" } */ + +__attribute__ ((target_version ("sve+test"))) float +foo2 () { return 3; } /* { dg-error "invalid feature modifier .test. of value .sve.test. in .target_version. attribute" } */ diff --git a/gcc/testsuite/gcc.target/aarch64/mv-error5.c b/gcc/testsuite/gcc.target/aarch64/mv-error5.c new file mode 100644 index 000000000000..776b80a45b65 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/mv-error5.c @@ -0,0 +1,8 @@ +/* { dg-do compile } */ +/* { dg-require-ifunc "" } */ +/* { dg-options "-O0" } */ + +__attribute__ ((target_version ("sve+sve2"))) int +foo(); /* { dg-message "previous declaration of .foo \\\[\\\[target_version\\(.sve\\\+sve2.\\)\\\]\\\]. with type .int\\(void\\)." } */ + +int bar () { return foo (); } /* { dg-error "implicit declaration of function .foo." } */ diff --git a/gcc/testsuite/gcc.target/aarch64/mv-error6.c b/gcc/testsuite/gcc.target/aarch64/mv-error6.c new file mode 100644 index 000000000000..afc71a44e735 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/mv-error6.c @@ -0,0 +1,20 @@ +/* { dg-do compile } */ +/* { dg-require-ifunc "" } */ +/* { dg-options "-O0" } */ + +__attribute__ ((target_version ("sve+sve2"))) int +foo () { + return 1; +} + +__attribute__ ((target_version ("sve"))) int +foo () { /* { dg-message "previous definition of .foo \\\[\\\[target_version\\(.sve.\\)\\\]\\\]. with type .int\\(void\\)." } */ + return 1; +} + +int bar () { return foo (); } /* { dg-error "implicit declaration of function .foo." } */ + +__attribute__ ((target_version ("sve+sve2"))) int +foo2(); /* { dg-message "previous declaration of .foo2 \\\[\\\[target_version\\(.sve\\\+sve2.\\)\\\]\\\]. with type .int\\(void\\)." } */ + +int bar2 () { return foo2 (); } /* { dg-error "implicit declaration of function .foo2." } */ diff --git a/gcc/testsuite/gcc.target/aarch64/mv-error7.c b/gcc/testsuite/gcc.target/aarch64/mv-error7.c new file mode 100644 index 000000000000..68db9783ce62 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/mv-error7.c @@ -0,0 +1,11 @@ +/* { dg-do compile } */ +/* { dg-require-ifunc "" } */ +/* { dg-options "-O0" } */ + +__attribute__ ((target_version ("dotprod"))) int +foo (); /* { dg-message "previous declaration of .foo \\\[\\\[target_version\\(.dotprod.\\)\\\]\\\]. with type .int\\(void\\)." } */ + +__attribute__ ((target_version ("sve+sve2"))) int +foo (); + +int bar () { return foo (); } /* { dg-error "implicit declaration of function .foo." } */ diff --git a/gcc/testsuite/gcc.target/aarch64/mv-error8.c b/gcc/testsuite/gcc.target/aarch64/mv-error8.c new file mode 100644 index 000000000000..7599df189e41 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/mv-error8.c @@ -0,0 +1,12 @@ +/* { dg-do compile } */ +/* { dg-options "-O0" } */ + +__attribute__ ((target_version ("default"))) int +foo (int a, int (*b)[4]) { return 1; } + +int bar(void) { + __attribute__ ((target_version ("dotprod"))) int + foo (int a, int (*b)[5]) { return 3; } /* { dg-error "versioned definitions are only allowed at file scope" } */ + + return 1; +} diff --git a/gcc/testsuite/gcc.target/aarch64/mv-error9.c b/gcc/testsuite/gcc.target/aarch64/mv-error9.c new file mode 100644 index 000000000000..dc982e9d4151 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/mv-error9.c @@ -0,0 +1,12 @@ +/* { dg-do compile } */ +/* { dg-require-ifunc "" } */ +/* { dg-options "-O0" } */ + +__attribute__ ((target_version ("dotprod"))) int +foo (); /* { dg-message "previous declaration of .foo \\\[\\\[target_version\\(.dotprod.\\)\\\]\\\]. with type .int\\(void\\)." } */ + +int +bar () +{ + return foo (); /* { dg-error "implicit declaration of function .foo." } */ +} diff --git a/gcc/testsuite/gcc.target/aarch64/mv-symbols1.c b/gcc/testsuite/gcc.target/aarch64/mv-symbols1.c new file mode 100644 index 000000000000..798227826e50 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/mv-symbols1.c @@ -0,0 +1,38 @@ +/* { dg-do compile } */ +/* { dg-options "-O0" } */ + +// Basic case of fmv correctness with all functions and use in one TU. + +__attribute__ ((target_version ("default"))) int +foo () +{ + return 1; +} + +__attribute__ ((target_version ("dotprod"))) int +foo () +{ + return 3; +} +__attribute__ ((target_version ("sve+sve2"))) int +foo () +{ + return 5; +} + +int +bar () +{ + return foo (); +} + +/* When updating any of the symbol names in these tests, make sure to also + update any tests for their absence in mv-symbolsN.C */ + +/* { dg-final { scan-assembler-times "\nfoo\.default:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\nfoo\._Mdotprod:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\nfoo\._MsveMsve2:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\nfoo\.resolver:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\tbl\tfoo\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\t\.type\tfoo, %gnu_indirect_function\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\t\.set\tfoo,foo\.resolver\n" 1 } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/mv-symbols10.c b/gcc/testsuite/gcc.target/aarch64/mv-symbols10.c new file mode 100644 index 000000000000..d5256389d7bb --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/mv-symbols10.c @@ -0,0 +1,42 @@ +/* { dg-do compile } */ +/* { dg-options "-O0" } */ + +int +foo (); + +int +foo () +{ + return 1; +} + +__attribute__ ((target_version ("dotprod"))) int +foo () +{ + return 3; +} +__attribute__ ((target_version ("sve+sve2"))) int +foo () +{ + return 5; +} + +int +bar () +{ + return foo (); +} + +/* { dg-final { scan-assembler-times "\nfoo\.default:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\nfoo\._Mdotprod:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\nfoo\._MsveMsve2:\n" 1 } } */ + +/* { dg-final { scan-assembler-times "\nfoo\.resolver:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\tadrp\tx., foo\._MsveMsve2\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\tadrp\tx., foo\._Mdotprod\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\tadrp\tx., foo\.default\n" 1 } } */ + +/* { dg-final { scan-assembler-times "\n\tbl\tfoo\n" 1 } } */ + +/* { dg-final { scan-assembler-times "\n\t\.type\tfoo, %gnu_indirect_function\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\t\.set\tfoo,foo\.resolver\n" 1 } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/mv-symbols11.c b/gcc/testsuite/gcc.target/aarch64/mv-symbols11.c new file mode 100644 index 000000000000..fd3dc345a599 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/mv-symbols11.c @@ -0,0 +1,16 @@ +/* { dg-do compile } */ +/* { dg-options "-O0" } */ + +// Check that types can be combined + +__attribute__ ((target_version ("default"))) int +foo (int a, int (*b)[4]) { return 1; } + +__attribute__ ((target_version ("dotprod"))) int +foo (int a, int (*b)[]) { return 3; } + +/* { dg-final { scan-assembler-times "\nfoo\.default:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\nfoo\._Mdotprod:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\nfoo\.resolver:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\t\.type\tfoo, %gnu_indirect_function\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\t\.set\tfoo,foo\.resolver\n" 1 } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/mv-symbols12.c b/gcc/testsuite/gcc.target/aarch64/mv-symbols12.c new file mode 100644 index 000000000000..1a0b667eb5f1 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/mv-symbols12.c @@ -0,0 +1,27 @@ +/* { dg-do compile } */ +/* { dg-options "-O0" } */ + +__attribute__ ((target_version ("default"))) int +foo () { return 1; } + +__attribute__ ((target_version ("dotprod"))) int +foo () { return 3; } + +int bar () +{ + int (*test)() = foo; + + test(); +} + +/* { dg-final { scan-assembler-times "\nfoo\.default:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\nfoo\._Mdotprod:\n" 1 } } */ + +/* { dg-final { scan-assembler-times "\nfoo\.resolver:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\tadrp\tx\[0-9\], foo\._Mdotprod\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\tadrp\tx\[0-9\], foo\.default\n" 1 } } */ + +/* { dg-final { scan-assembler-times "\n\tadrp\tx\[0-9\]+, foo\n" 1 } } */ + +/* { dg-final { scan-assembler-times "\n\t\.type\tfoo, %gnu_indirect_function\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\t\.set\tfoo,foo\.resolver\n" 1 } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/mv-symbols13.c b/gcc/testsuite/gcc.target/aarch64/mv-symbols13.c new file mode 100644 index 000000000000..308dace64a78 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/mv-symbols13.c @@ -0,0 +1,28 @@ +/* { dg-do compile } */ +/* { dg-options "-O0" } */ + +__attribute__ ((target_version ("default"))) int +foo (); + +int bar () +{ + int (*test)() = foo; + + test(); +} + +__attribute__ ((target_version ("dotprod"))) int +foo () { return 3; } + +/* { dg-final { scan-assembler-times "\nfoo\.default:\n" 0 } } */ +/* { dg-final { scan-assembler-times "\nfoo\._Mdotprod:\n" 1 } } */ + +/* { dg-final { scan-assembler-times "\nfoo\.resolver:\n" 0 } } */ +/* { dg-final { scan-assembler-times "\n\tadrp\tx\[0-9\], foo\._Mdotprod\n" 0 } } */ +/* { dg-final { scan-assembler-times "\n\tadrp\tx\[0-9\], foo\.default\n" 0 } } */ + +/* { dg-final { scan-assembler-times "\n\tadrp\tx\[0-9\]+, foo\n" 1 } } */ + +/* { dg-final { scan-assembler-times "\n\t\.type\tfoo, %gnu_indirect_function\n" 0 } } */ +/* { dg-final { scan-assembler-times "\n\t\.set\tfoo,foo\.resolver\n" 0 } } */ + diff --git a/gcc/testsuite/gcc.target/aarch64/mv-symbols14.c b/gcc/testsuite/gcc.target/aarch64/mv-symbols14.c new file mode 100644 index 000000000000..d1af69fe31d9 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/mv-symbols14.c @@ -0,0 +1,34 @@ +/* { dg-do compile } */ +/* { dg-options "-O0" } */ + +int foo (); + +__attribute__ ((target_version ("default"))) int +foo () +{ + return 1; +} + +__attribute__ ((target_version ("dotprod"))) int +foo () +{ + return 3; +} + +int +bar () +{ + return foo (); +} + +/* { dg-final { scan-assembler-times "\nfoo\.default:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\nfoo\._Mdotprod:\n" 1 } } */ + +/* { dg-final { scan-assembler-times "\nfoo\.resolver:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\tadrp\tx., foo\._Mdotprod\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\tadrp\tx., foo\.default\n" 1 } } */ + +/* { dg-final { scan-assembler-times "\n\tbl\tfoo\n" 1 } } */ + +/* { dg-final { scan-assembler-times "\n\t\.type\tfoo, %gnu_indirect_function\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\t\.set\tfoo,foo\.resolver\n" 1 } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/mv-symbols2.c b/gcc/testsuite/gcc.target/aarch64/mv-symbols2.c new file mode 100644 index 000000000000..a8732caf2140 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/mv-symbols2.c @@ -0,0 +1,28 @@ +/* { dg-do compile } */ +/* { dg-options "-O0" } */ + +// FMV correctness with definitions but no call + +__attribute__ ((target_version ("default"))) int +foo () +{ + return 1; +} + +__attribute__ ((target_version ("dotprod"))) int +foo () +{ + return 3; +} +__attribute__ ((target_version ("sve+sve2"))) int +foo () +{ + return 5; +} + +/* { dg-final { scan-assembler-times "\nfoo\.default:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\nfoo\._Mdotprod:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\nfoo\._MsveMsve2:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\nfoo\.resolver:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\t\.type\tfoo, %gnu_indirect_function\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\t\.set\tfoo,foo\.resolver\n" 1 } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/mv-symbols3.c b/gcc/testsuite/gcc.target/aarch64/mv-symbols3.c new file mode 100644 index 000000000000..962bae935773 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/mv-symbols3.c @@ -0,0 +1,27 @@ +/* { dg-do compile } */ +/* { dg-options "-O0" } */ + +// FMV correctness with declarations but no implementation + +__attribute__ ((target_version ("default"))) int +foo (); + +__attribute__ ((target_version ("dotprod"))) int +foo (); + +__attribute__ ((target_version ("sve+sve2"))) int +foo (); + +int +bar () +{ + return foo (); +} + +/* { dg-final { scan-assembler-times "\nfoo\.default:\n" 0 } } */ +/* { dg-final { scan-assembler-times "\nfoo\._Mdotprod:\n" 0 } } */ +/* { dg-final { scan-assembler-times "\nfoo\._MsveMsve2:\n" 0 } } */ +/* { dg-final { scan-assembler-times "\nfoo\.resolver:\n" 0 } } */ +/* { dg-final { scan-assembler-times "\n\tbl\tfoo\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\t\.type\tfoo, %gnu_indirect_function\n" 0 } } */ +/* { dg-final { scan-assembler-times "\n\t\.set\tfoo,foo\.resolver\n" 0 } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/mv-symbols4.c b/gcc/testsuite/gcc.target/aarch64/mv-symbols4.c new file mode 100644 index 000000000000..a476800b2c53 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/mv-symbols4.c @@ -0,0 +1,31 @@ +/* { dg-do compile } */ +/* { dg-options "-O0" } */ + +// FMV correctness with a default implementation and declarations of other +// versions + +__attribute__ ((target_version ("default"))) int +foo () +{ + return 1; +} + +__attribute__ ((target_version ("dotprod"))) int +foo (); + +__attribute__ ((target_version ("sve+sve2"))) int +foo (); + +int +bar () +{ + return foo (); +} + +/* { dg-final { scan-assembler-times "\nfoo\.default:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\nfoo\._Mdotprod:\n" 0 } } */ +/* { dg-final { scan-assembler-times "\nfoo\._MsveMsve2:\n" 0 } } */ +/* { dg-final { scan-assembler-times "\nfoo\.resolver:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\tbl\tfoo\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\t\.type\tfoo, %gnu_indirect_function\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\t\.set\tfoo,foo\.resolver\n" 1 } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/mv-symbols5.c b/gcc/testsuite/gcc.target/aarch64/mv-symbols5.c new file mode 100644 index 000000000000..4df20009f795 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/mv-symbols5.c @@ -0,0 +1,36 @@ +/* { dg-do compile } */ +/* { dg-options "-O0" } */ + +// FMV correctness with default declaration, and implementations of other +// versions. + +__attribute__ ((target_version ("default"))) int +foo (); + +__attribute__ ((target_version ("dotprod"))) int +foo () +{ + return 3; +} +__attribute__ ((target_version ("sve+sve2"))) int +foo () +{ + return 5; +} + +int +bar () +{ + return foo (); +} + +/* When updating any of the symbol names in these tests, make sure to also + update any tests for their absence in mvc-symbolsN.C */ + +/* { dg-final { scan-assembler-times "\nfoo\.default:\n" 0 } } */ +/* { dg-final { scan-assembler-times "\nfoo\._Mdotprod:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\nfoo\._MsveMsve2:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\nfoo\.resolver:\n" 0 } } */ +/* { dg-final { scan-assembler-times "\n\tbl\tfoo\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\t\.type\tfoo, %gnu_indirect_function\n" 0 } } */ +/* { dg-final { scan-assembler-times "\n\t\.set\tfoo,foo\.resolver\n" 0 } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/mv-symbols6.c b/gcc/testsuite/gcc.target/aarch64/mv-symbols6.c new file mode 100644 index 000000000000..cbf8bcaf8e16 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/mv-symbols6.c @@ -0,0 +1,20 @@ +/* { dg-do compile } */ +/* { dg-options "-O0" } */ + +__attribute__ ((target_version ("default"))) int +foo () +{ + return 1; +} + +int bar() +{ + return foo(); +} + +/* { dg-final { scan-assembler-times "\nfoo:\n" 0 } } */ +/* { dg-final { scan-assembler-times "\nfoo\.default:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\nfoo\.resolver:\n" 0 } } */ +/* { dg-final { scan-assembler-times "bl\tfoo.default\n" 1 } } */ +/* { dg-final { scan-assembler-times ".global\tfoo\n" 1 } } */ +/* { dg-final { scan-assembler-times ".set\tfoo,foo.default\n" 1 } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/mv-symbols7.c b/gcc/testsuite/gcc.target/aarch64/mv-symbols7.c new file mode 100644 index 000000000000..2ea4d2ebf0fb --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/mv-symbols7.c @@ -0,0 +1,47 @@ +/* { dg-do compile } */ +/* { dg-options "-O0" } */ + +__attribute__ ((target_version ("dotprod"))) int +foo (); + +__attribute__ ((target_version ("sve+sve2"))) int +foo (); + +__attribute__ ((target_version ("default"))) int +foo (); + +int +bar () +{ + return foo (); +} + +__attribute__ ((target_version ("sve+sve2"))) int +foo () +{ + return 5; +} +__attribute__ ((target_version ("dotprod"))) int +foo () +{ + return 3; +} +__attribute__ ((target_version ("default"))) int +foo () +{ + return 1; +} + +/* { dg-final { scan-assembler-times "\nfoo\.default:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\nfoo\._Mdotprod:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\nfoo\._MsveMsve2:\n" 1 } } */ + +/* { dg-final { scan-assembler-times "\nfoo\.resolver:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\tadrp\tx., foo\._MsveMsve2\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\tadrp\tx., foo\._Mdotprod\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\tadrp\tx., foo\.default\n" 1 } } */ + +/* { dg-final { scan-assembler-times "\n\tbl\tfoo\n" 1 } } */ + +/* { dg-final { scan-assembler-times "\n\t\.type\tfoo, %gnu_indirect_function\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\t\.set\tfoo,foo\.resolver\n" 1 } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/mv-symbols8.c b/gcc/testsuite/gcc.target/aarch64/mv-symbols8.c new file mode 100644 index 000000000000..3e3eaf21aa9e --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/mv-symbols8.c @@ -0,0 +1,47 @@ +/* { dg-do compile } */ +/* { dg-options "-O0" } */ + +__attribute__ ((target_version ("dotprod"))) int +foo (); + +__attribute__ ((target_version ("sve+sve2"))) int +foo (); + +__attribute__ ((target_version ("default"))) int +foo (); + +__attribute__ ((target_version ("sve+sve2"))) int +foo () +{ + return 5; +} +__attribute__ ((target_version ("dotprod"))) int +foo () +{ + return 3; +} +__attribute__ ((target_version ("default"))) int +foo () +{ + return 1; +} + +int +bar () +{ + return foo (); +} + +/* { dg-final { scan-assembler-times "\nfoo\.default:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\nfoo\._Mdotprod:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\nfoo\._MsveMsve2:\n" 1 } } */ + +/* { dg-final { scan-assembler-times "\nfoo\.resolver:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\tadrp\tx., foo\._MsveMsve2\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\tadrp\tx., foo\._Mdotprod\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\tadrp\tx., foo\.default\n" 1 } } */ + +/* { dg-final { scan-assembler-times "\n\tbl\tfoo\n" 1 } } */ + +/* { dg-final { scan-assembler-times "\n\t\.type\tfoo, %gnu_indirect_function\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\t\.set\tfoo,foo\.resolver\n" 1 } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/mv-symbols9.c b/gcc/testsuite/gcc.target/aarch64/mv-symbols9.c new file mode 100644 index 000000000000..8e0864f1663f --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/mv-symbols9.c @@ -0,0 +1,44 @@ +/* { dg-do compile } */ +/* { dg-options "-O0" } */ + +__attribute__ ((target_version ("dotprod"))) int +foo (); +__attribute__ ((target_version ("sve+sve2"))) int +foo (); + +int +foo () +{ + return 1; +} + +__attribute__ ((target_version ("dotprod"))) int +foo () +{ + return 3; +} +__attribute__ ((target_version ("sve+sve2"))) int +foo () +{ + return 5; +} + +int +bar () +{ + return foo (); +} + +/* { dg-final { scan-assembler-times "\nfoo\.default:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\nfoo\._Mdotprod:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\nfoo\._MsveMsve2:\n" 1 } } */ + +/* { dg-final { scan-assembler-times "\nfoo\.resolver:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\tadrp\tx., foo\._MsveMsve2\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\tadrp\tx., foo\._Mdotprod\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\tadrp\tx., foo\.default\n" 1 } } */ + +/* { dg-final { scan-assembler-times "\n\tbl\tfoo\n" 1 } } */ + +/* { dg-final { scan-assembler-times "\n\t\.type\tfoo, %gnu_indirect_function\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\t\.set\tfoo,foo\.resolver\n" 1 } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/mvc-error1.c b/gcc/testsuite/gcc.target/aarch64/mvc-error1.c new file mode 100644 index 000000000000..482d0a71e672 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/mvc-error1.c @@ -0,0 +1,9 @@ +/* { dg-do compile } */ +/* { dg-require-ifunc "" } */ +/* { dg-options "-O0" } */ + +__attribute__ ((target_clones ("default, dotprod"))) float +foo (); /* { dg-message "previous declaration of .foo \\\[\\\[target_clones\\(.default., .dotprod.\\)\\\]\\\]." } */ + +__attribute__ ((target_clones ("dotprod", "sve"))) float +foo () { return 3; } /* { dg-error ".foo \\\[\\\[target_clones\\(.dotprod., .sve.\\)\\\]\\\]. conflicts with overlapping .target_clone. declaration" } */ diff --git a/gcc/testsuite/gcc.target/aarch64/mvc-error2.c b/gcc/testsuite/gcc.target/aarch64/mvc-error2.c new file mode 100644 index 000000000000..482d0a71e672 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/mvc-error2.c @@ -0,0 +1,9 @@ +/* { dg-do compile } */ +/* { dg-require-ifunc "" } */ +/* { dg-options "-O0" } */ + +__attribute__ ((target_clones ("default, dotprod"))) float +foo (); /* { dg-message "previous declaration of .foo \\\[\\\[target_clones\\(.default., .dotprod.\\)\\\]\\\]." } */ + +__attribute__ ((target_clones ("dotprod", "sve"))) float +foo () { return 3; } /* { dg-error ".foo \\\[\\\[target_clones\\(.dotprod., .sve.\\)\\\]\\\]. conflicts with overlapping .target_clone. declaration" } */ diff --git a/gcc/testsuite/gcc.target/aarch64/mvc-symbols1.c b/gcc/testsuite/gcc.target/aarch64/mvc-symbols1.c new file mode 100644 index 000000000000..3ad15e5bb73d --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/mvc-symbols1.c @@ -0,0 +1,25 @@ +/* { dg-do compile } */ +/* { dg-options "-O0" } */ + +__attribute__ ((target_clones ("default", "dotprod", "sve+sve2"))) int +foo () +{ + return 1; +} + +int +bar () +{ + return foo (); +} + +/* When updating any of the symbol names in these tests, make sure to also + update any tests for their absence in mvc-symbolsN.C */ + +/* { dg-final { scan-assembler-times "\nfoo\.default:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\nfoo\._Mdotprod:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\nfoo\._MsveMsve2:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\nfoo\.resolver:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\tbl\tfoo\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\t\.type\tfoo, %gnu_indirect_function\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\t\.set\tfoo,foo\.resolver\n" 1 } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/mvc-symbols2.c b/gcc/testsuite/gcc.target/aarch64/mvc-symbols2.c new file mode 100644 index 000000000000..78385ed904bb --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/mvc-symbols2.c @@ -0,0 +1,15 @@ +/* { dg-do compile } */ +/* { dg-options "-O0" } */ + +__attribute__ ((target_clones ("default", "dotprod", "sve+sve2"))) int +foo () +{ + return 1; +} + +/* { dg-final { scan-assembler-times "\nfoo\.default:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\nfoo\._Mdotprod:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\nfoo\._MsveMsve2:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\nfoo\.resolver:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\t\.type\tfoo, %gnu_indirect_function\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\t\.set\tfoo,foo\.resolver\n" 1 } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/mvc-symbols3.c b/gcc/testsuite/gcc.target/aarch64/mvc-symbols3.c new file mode 100644 index 000000000000..1cbe3fd08509 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/mvc-symbols3.c @@ -0,0 +1,19 @@ +/* { dg-do compile } */ +/* { dg-options "-O0" } */ + +__attribute__ ((target_clones ("default", "dotprod", "sve+sve2"))) int +foo (); + +int +bar () +{ + return foo (); +} + +/* { dg-final { scan-assembler-times "\nfoo\.default:\n" 0 } } */ +/* { dg-final { scan-assembler-times "\nfoo\._Mdotprod:\n" 0 } } */ +/* { dg-final { scan-assembler-times "\nfoo\._MsveMsve2:\n" 0 } } */ +/* { dg-final { scan-assembler-times "\nfoo\.resolver:\n" 0 } } */ +/* { dg-final { scan-assembler-times "\n\tbl\tfoo\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n\t\.type\tfoo, %gnu_indirect_function\n" 0 } } */ +/* { dg-final { scan-assembler-times "\n\t\.set\tfoo,foo\.resolver\n" 0 } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/mvc-symbols4.c b/gcc/testsuite/gcc.target/aarch64/mvc-symbols4.c new file mode 100644 index 000000000000..abaf60f91c3e --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/mvc-symbols4.c @@ -0,0 +1,12 @@ +/* { dg-do compile } */ +/* { dg-options "-O0" } */ + +__attribute__ ((target_clones ("default", "dotprod", "sve+sve2"))) int +foo (); + +/* { dg-final { scan-assembler-times "\nfoo\.default:\n" 0 } } */ +/* { dg-final { scan-assembler-times "\nfoo\._Mdotprod:\n" 0 } } */ +/* { dg-final { scan-assembler-times "\nfoo\._MsveMsve2:\n" 0 } } */ +/* { dg-final { scan-assembler-times "\nfoo\.resolver:\n" 0 } } */ +/* { dg-final { scan-assembler-times "\n\t\.type\tfoo, %gnu_indirect_function\n" 0 } } */ +/* { dg-final { scan-assembler-times "\n\t\.set\tfoo,foo\.resolver\n" 0 } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/mvc-warning1.c b/gcc/testsuite/gcc.target/aarch64/mvc-warning1.c new file mode 100644 index 000000000000..1bae38cceeb3 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/mvc-warning1.c @@ -0,0 +1,13 @@ +/* { dg-do compile } */ +/* { dg-require-ifunc "" } */ +/* { dg-options "-O0" } */ + +__attribute__((target_clones("default", "dotprod", "sve+sve2"))) +int foo () { + return 1; +} + +__attribute__((target_clones("invalid1"))) +int foo () { /* { dg-warning "invalid feature modifier .invalid1. in version .invalid1. for .target_clones. attribute" } */ + return 2; +} diff --git a/gcc/testsuite/gcc.target/aarch64/pr66462.c b/gcc/testsuite/gcc.target/aarch64/pr66462.c index 9ebd48e922c9..2bd734b3193c 100644 --- a/gcc/testsuite/gcc.target/aarch64/pr66462.c +++ b/gcc/testsuite/gcc.target/aarch64/pr66462.c @@ -24,6 +24,47 @@ static void t_inf (double x, bool res) __builtin_abort (); } +static void t_finf (float x, bool res) +{ + if (__builtin_isfinite (x) != res) + __builtin_abort (); + if (__builtin_isfinite (-x) != res) + __builtin_abort (); + if (fetestexcept (FE_INVALID)) + __builtin_abort (); +} + +static void t_fin (double x, bool res) +{ + if (__builtin_isfinite (x) != res) + __builtin_abort (); + if (__builtin_isfinite (-x) != res) + __builtin_abort (); + if (fetestexcept (FE_INVALID)) + __builtin_abort (); +} + +static void t_nanf (float x, bool res) +{ + if (__builtin_isnan (x) != res) + __builtin_abort (); + if (__builtin_isnan (-x) != res) + __builtin_abort (); + if (fetestexcept (FE_INVALID)) + __builtin_abort (); +} + +static void t_nan (double x, bool res) +{ + if (__builtin_isnan (x) != res) + __builtin_abort (); + if (__builtin_isnan (-x) != res) + __builtin_abort (); + if (fetestexcept (FE_INVALID)) + __builtin_abort (); +} + + int main () { @@ -41,5 +82,29 @@ main () t_inf (__builtin_nans (""), 0); t_inf (__builtin_nan (""), 0); + t_finf (0.0f, 1); + t_finf (1.0f, 1); + t_finf (__builtin_inff (), 0); + t_finf (__builtin_nansf (""), 0); + t_finf (__builtin_nanf (""), 0); + + t_fin (0.0, 1); + t_fin (1.0, 1); + t_fin (__builtin_inf (), 0); + t_fin (__builtin_nans (""), 0); + t_fin (__builtin_nan (""), 0); + + t_nanf (0.0f, 0); + t_nanf (1.0f, 0); + t_nanf (__builtin_inff (), 0); + t_nanf (__builtin_nansf (""), 1); + t_nanf (__builtin_nanf (""), 1); + + t_nan (0.0, 0); + t_nan (1.0, 0); + t_nan (__builtin_inf (), 0); + t_nan (__builtin_nans (""), 1); + t_nan (__builtin_nan (""), 1); + return 0; } diff --git a/gcc/testsuite/gcc.target/aarch64/ror_2.c b/gcc/testsuite/gcc.target/aarch64/ror_2.c index 796c1222230e..fbea839454ae 100644 --- a/gcc/testsuite/gcc.target/aarch64/ror_2.c +++ b/gcc/testsuite/gcc.target/aarch64/ror_2.c @@ -175,8 +175,8 @@ tst2 (unsigned x, unsigned y) int tst3 (unsigned x, unsigned y) { - /* { dg-final { scan-assembler "tst\tw\[0-9\]+, w\[0-9\]+, ror 20\n" } } */ - return ((unsigned long)x & ROR (y, 20)) == 0; + /* { dg-final { scan-assembler "tst\tw\[0-9\]+, w\[0-9\]+, ror 21\n" } } */ + return ((unsigned long)x & ROR (y, 21)) == 0; } int @@ -189,15 +189,15 @@ bics1 (unsigned x, unsigned y) int bics2 (unsigned x, unsigned y) { - /* { dg-final { scan-assembler "bics\twzr, w\[0-9\]+, w\[0-9\]+, ror 21\n" } } */ - return (x & ~ROR (y, 21)) == 0; + /* { dg-final { scan-assembler "bics\twzr, w\[0-9\]+, w\[0-9\]+, ror 22\n" } } */ + return (x & ~ROR (y, 22)) == 0; } int bics3 (unsigned x, unsigned y) { - /* { dg-final { scan-assembler "bics\twzr, w\[0-9\]+, w\[0-9\]+, ror 21\n" } } */ - return (x & (unsigned long)~ROR (y, 21)) == 0; + /* { dg-final { scan-assembler "bics\twzr, w\[0-9\]+, w\[0-9\]+, ror 23\n" } } */ + return (x & (unsigned long)~ROR (y, 23)) == 0; } /* { dg-final { scan-assembler-not "cmp" } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/scalar_intrinsics.c b/gcc/testsuite/gcc.target/aarch64/scalar_intrinsics.c index dcf9dc777ade..094aaff7b1c1 100644 --- a/gcc/testsuite/gcc.target/aarch64/scalar_intrinsics.c +++ b/gcc/testsuite/gcc.target/aarch64/scalar_intrinsics.c @@ -913,7 +913,7 @@ test_vrsrad_n_s64 (int64_t a, int64_t b) return vrsrad_n_s64 (a, b, 3); } -/* { dg-final { scan-assembler-times "\\tsrsra\\td\[0-9\]+" 1 } } */ +/* { dg-final { scan-assembler-times "\\tursra\\td\[0-9\]+" 1 } } */ uint64_t test_vrsrad_n_u64 (uint64_t a, uint64_t b) diff --git a/gcc/testsuite/gcc.target/aarch64/scalar_shift_1.c b/gcc/testsuite/gcc.target/aarch64/scalar_shift_1.c index 7be1b12a75bf..e715f19aa5de 100644 --- a/gcc/testsuite/gcc.target/aarch64/scalar_shift_1.c +++ b/gcc/testsuite/gcc.target/aarch64/scalar_shift_1.c @@ -1,6 +1,6 @@ /* { dg-do run } */ /* { dg-options "-O2 -fno-inline -save-temps" } */ - +/* { dg-final { check-function-bodies "**" "" "" } } */ extern void abort (); #define force_simd_di(v) asm volatile ("mov %d0, %1.d[0]" :"=w" (v) :"w" (v) :) @@ -23,8 +23,13 @@ test_lshift_left_sisd_di (UInt64x1 b, UInt64x1 c) force_simd_di (a); return a; } -/* { dg-final { scan-assembler "shl\td\[0-9\]+,\ d\[0-9\]+,\ 8" } } */ -/* { dg-final { scan-assembler "ushl\td\[0-9\]+,\ d\[0-9\]+,\ d\[0-9\]+" } } */ +/* +** test_lshift_left_sisd_di: +** ... +** shl\t(d[0-9]+), d[0-9]+, 8 +** ushl\td[0-9]+, \1, d[0-9]+ +** ... +*/ UInt32x1 test_lshift_left_sisd_si (UInt32x1 b, UInt32x1 c) @@ -38,8 +43,13 @@ test_lshift_left_sisd_si (UInt32x1 b, UInt32x1 c) force_simd_si (a); return a; } -/* { dg-final { scan-assembler "shl\tv\[0-9\]+\.2s,\ v\[0-9\]+\.2s,\ 4" } } */ -/* "ushl\tv\[0-9\]+\.2s,\ v\[0-9\]+\.2s,\ v\[0-9\]+\.2s" (counted later) */ +/* +** test_lshift_left_sisd_si: +** ... +** shl\t(v[0-9]+\.2s), v[0-9]+\.2s, 4 +** ushl\tv[0-9]+\.2s, \1, v[0-9]+\.2s +** ... +*/ UInt64x1 test_lshift_right_sisd_di (UInt64x1 b, UInt64x1 c) @@ -53,9 +63,14 @@ test_lshift_right_sisd_di (UInt64x1 b, UInt64x1 c) force_simd_di (a); return a; } -/* { dg-final { scan-assembler "ushr\td\[0-9\]+,\ d\[0-9\]+,\ 8" } } */ -/* "neg\td\[0-9\]+,\ d\[0-9\]+" (counted later) */ -/* { dg-final { scan-assembler "ushl\td\[0-9\]+,\ d\[0-9\]+,\ d\[0-9\]+" } } */ +/* +** test_lshift_right_sisd_di: +** ... +** ushr\t(d[0-9]+), d[0-9]+, 8 +** neg\t(d[0-9]+), d[0-9]+ +** ushl\td[0-9]+, \1, \2 +** ... +*/ UInt64x1 test_lshift_right_sisd_si (UInt32x1 b, UInt32x1 c) @@ -69,9 +84,14 @@ test_lshift_right_sisd_si (UInt32x1 b, UInt32x1 c) force_simd_si (a); return a; } -/* { dg-final { scan-assembler "ushr\tv\[0-9\]+\.2s,\ v\[0-9\]+\.2s,\ 4" } } */ -/* "neg\td\[0-9\]+,\ d\[0-9\]+" (counted later) */ -/* { dg-final { scan-assembler-times "ushl\tv\[0-9\]+\.2s,\ v\[0-9\]+\.2s,\ v\[0-9\]+\.2s" 2 } } */ +/* +** test_lshift_right_sisd_si: +** ... +** ushr\t(v[0-9]+\.2s), v[0-9]+\.2s, 4 +** neg\td([0-9]+), d[0-9]+ +** ushl\tv[0-9]+\.2s, \1, v\2\.2s +** ... +*/ Int64x1 test_ashift_right_sisd_di (Int64x1 b, Int64x1 c) @@ -85,9 +105,14 @@ test_ashift_right_sisd_di (Int64x1 b, Int64x1 c) force_simd_di (a); return a; } -/* { dg-final { scan-assembler "sshr\td\[0-9\]+,\ d\[0-9\]+,\ 8" } } */ -/* "neg\td\[0-9\]+,\ d\[0-9\]+" (counted later) */ -/* { dg-final { scan-assembler "sshl\td\[0-9\]+,\ d\[0-9\]+,\ d\[0-9\]+" } } */ +/* +** test_ashift_right_sisd_di: +** ... +** sshr\t(d[0-9]+), d[0-9]+, 8 +** neg\t(d[0-9]+), d[0-9]+ +** sshl\td[0-9]+, \1, \2 +** ... +*/ Int32x1 test_ashift_right_sisd_si (Int32x1 b, Int32x1 c) @@ -101,10 +126,14 @@ test_ashift_right_sisd_si (Int32x1 b, Int32x1 c) force_simd_si (a); return a; } -/* { dg-final { scan-assembler "sshr\tv\[0-9\]+\.2s,\ v\[0-9\]+\.2s,\ 4" } } */ -/* { dg-final { scan-assembler-times "neg\td\[0-9\]+,\ d\[0-9\]+" 4 } } */ -/* { dg-final { scan-assembler "sshl\tv\[0-9\]+\.2s,\ v\[0-9\]+\.2s,\ v\[0-9\]+\.2s" } } */ - +/* +** test_ashift_right_sisd_si: +** ... +** sshr\t(v[0-9]+\.2s), v[0-9]+\.2s, 4 +** neg\td([0-9]+), d[0-9]+ +** sshl\tv[0-9]+\.2s, \1, v\2\.2s +** ... +*/ /* The following are to make sure if the integer instructions lsl/lsr/asr are generated in non-vector scenarios */ @@ -118,8 +147,12 @@ test_lshift_left_int_di (UInt64x1 b, UInt64x1 c) a = a << c; return a; } -/* { dg-final { scan-assembler "lsl\tx\[0-9\]+,\ x\[0-9\]+,\ 8" } } */ -/* { dg-final { scan-assembler "lsl\tx\[0-9\]+,\ x\[0-9\]+,\ x\[0-9\]+" } } */ +/* +** test_lshift_left_int_di: +** lsl\t(x[0-9]+), x0, 8 +** lsl\tx0, \1, x1 +** ret +*/ UInt32x1 test_lshift_left_int_si (UInt32x1 b, UInt32x1 c) @@ -130,8 +163,12 @@ test_lshift_left_int_si (UInt32x1 b, UInt32x1 c) a = a << c; return a; } -/* { dg-final { scan-assembler "lsl\tw\[0-9\]+,\ w\[0-9\]+,\ 4" } } */ -/* { dg-final { scan-assembler "lsl\tw\[0-9\]+,\ w\[0-9\]+,\ w\[0-9\]+" } } */ +/* +** test_lshift_left_int_si: +** lsl\t(w[0-9]+), w0, 4 +** lsl\tw0, \1, w1 +** ret +*/ UInt64x1 test_lshift_right_int_di (UInt64x1 b, UInt64x1 c) @@ -142,8 +179,12 @@ test_lshift_right_int_di (UInt64x1 b, UInt64x1 c) a = a >> c; return a; } -/* { dg-final { scan-assembler "lsr\tx\[0-9\]+,\ x\[0-9\]+,\ 8" } } */ -/* { dg-final { scan-assembler "lsr\tx\[0-9\]+,\ x\[0-9\]+,\ x\[0-9\]+" } } */ +/* +** test_lshift_right_int_di: +** lsr\t(x[0-9]+), x0, 8 +** lsr\tx0, \1, x1 +** ret +*/ UInt32x1 test_lshift_right_int_si (UInt32x1 b, UInt32x1 c) @@ -154,8 +195,12 @@ test_lshift_right_int_si (UInt32x1 b, UInt32x1 c) a = a >> c; return a; } -/* { dg-final { scan-assembler "lsr\tw\[0-9\]+,\ w\[0-9\]+,\ 4" } } */ -/* { dg-final { scan-assembler "lsr\tw\[0-9\]+,\ w\[0-9\]+,\ w\[0-9\]+" } } */ +/* +** test_lshift_right_int_si: +** lsr\t(w[0-9]+), w0, 4 +** lsr\tw0, \1, w1 +** ret +*/ Int64x1 test_ashift_right_int_di (Int64x1 b, Int64x1 c) @@ -166,8 +211,12 @@ test_ashift_right_int_di (Int64x1 b, Int64x1 c) a = a >> c; return a; } -/* { dg-final { scan-assembler "asr\tx\[0-9\]+,\ x\[0-9\]+,\ 8" } } */ -/* { dg-final { scan-assembler "asr\tx\[0-9\]+,\ x\[0-9\]+,\ x\[0-9\]+" } } */ +/* +** test_ashift_right_int_di: +** asr\t(x[0-9]+), x0, 8 +** asr\tx0, \1, x1 +** ret +*/ Int32x1 test_ashift_right_int_si (Int32x1 b, Int32x1 c) @@ -178,8 +227,12 @@ test_ashift_right_int_si (Int32x1 b, Int32x1 c) a = a >> c; return a; } -/* { dg-final { scan-assembler "asr\tw\[0-9\]+,\ w\[0-9\]+,\ 4" } } */ -/* { dg-final { scan-assembler "asr\tw\[0-9\]+,\ w\[0-9\]+,\ w\[0-9\]+" } } */ +/* +** test_ashift_right_int_si: +** asr\t(w[0-9]+), w0, 4 +** asr\tw0, \1, w1 +** ret +*/ #define CHECK(var,val) \ do \ @@ -225,4 +278,3 @@ main () return 0; } - diff --git a/gcc/testsuite/gcc.target/aarch64/simd/bcax_d.c b/gcc/testsuite/gcc.target/aarch64/simd/bcax_d.c index a7640c3f6f1e..d68f0e102bf1 100644 --- a/gcc/testsuite/gcc.target/aarch64/simd/bcax_d.c +++ b/gcc/testsuite/gcc.target/aarch64/simd/bcax_d.c @@ -7,13 +7,9 @@ #define BCAX(x,y,z) ((x) ^ ((y) & ~(z))) -/* When the inputs come from GP regs don't form a BCAX. */ -uint64_t bcax_d_gp (uint64_t a, uint64_t b, uint64_t c) { return BCAX (a, b, c); } - -uint64x1_t bcax_d (uint64x1_t a, uint64x1_t b, uint64x1_t c) { return BCAX (a, b, c); } uint32x2_t bcax_s (uint32x2_t a, uint32x2_t b, uint32x2_t c) { return BCAX (a, b, c); } uint16x4_t bcax_h (uint16x4_t a, uint16x4_t b, uint16x4_t c) { return BCAX (a, b, c); } uint8x8_t bcax_b (uint8x8_t a, uint8x8_t b, uint8x8_t c) { return BCAX (a, b, c); } -/* { dg-final { scan-assembler-times {bcax\tv0.16b, v0.16b, v1.16b, v2.16b} 4 } } */ +/* { dg-final { scan-assembler-times {bcax\tv0.16b, v0.16b, v1.16b, v2.16b} 3 } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/simd/fold_to_highpart_5.c b/gcc/testsuite/gcc.target/aarch64/simd/fold_to_highpart_5.c index 4f39b675bff1..1b7252757821 100644 --- a/gcc/testsuite/gcc.target/aarch64/simd/fold_to_highpart_5.c +++ b/gcc/testsuite/gcc.target/aarch64/simd/fold_to_highpart_5.c @@ -68,8 +68,8 @@ /* { dg-final { scan-assembler-times {ssubl2\t} 3} } */ /* { dg-final { scan-assembler-times {usubl2\t} 3} } */ -/* { dg-final { scan-assembler-times {sabdl2\t} 3} } */ -/* { dg-final { scan-assembler-times {uabdl2\t} 3} } */ +/* { dg-final { scan-assembler-times {sabal2\t} 3} } */ +/* { dg-final { scan-assembler-times {uabal2\t} 3} } */ /* { dg-final { scan-assembler-times {saddw2\t} 3} } */ /* { dg-final { scan-assembler-times {uaddw2\t} 3} } */ diff --git a/gcc/testsuite/gcc.target/aarch64/singleton_intrinsics_1.c b/gcc/testsuite/gcc.target/aarch64/singleton_intrinsics_1.c index 1f21bd33e739..27360150b582 100644 --- a/gcc/testsuite/gcc.target/aarch64/singleton_intrinsics_1.c +++ b/gcc/testsuite/gcc.target/aarch64/singleton_intrinsics_1.c @@ -298,7 +298,7 @@ test_vrsra_n_s64 (int64x1_t a, int64x1_t b) return vrsra_n_s64 (a, b, 3); } -/* { dg-final { scan-assembler-times "\\tsrsra\\td\[0-9\]+" 1 } } */ +/* { dg-final { scan-assembler-times "\\tursra\\td\[0-9\]+" 1 } } */ uint64x1_t test_vrsra_n_u64 (uint64x1_t a, uint64x1_t b) diff --git a/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/svluti4_zt_1.c b/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/svluti4_zt_1.c new file mode 100644 index 000000000000..d05c2e01a8ec --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/svluti4_zt_1.c @@ -0,0 +1,30 @@ +/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */ + +/* LUTI4 (four registers, 8-bit) + Variants are also available for: _u8 + svint8x4_t svluti4_zt_s8_x4 (uint64_t zt0, svuint8x2_t zn) + __arm_streaming __arm_in ("zt0"); */ + +#pragma GCC target "+sve2,+sme-lutv2" +#define SHARED_ZT0 +#include "test_sme2_acle.h" + +/* +** luti4_zt_u8_x4: +** luti4 {z0.b - z3.b}, zt0, {z0 - z1} +** ret +*/ +PROTO (luti4_zt_u8_x4, svuint8x4_t, (svuint8x2_t z0)) +{ + return svluti4_zt_u8_x4 (0, z0); +} + +/* +** luti4_zt_s8_x4: +** luti4 {z0.b - z3.b}, zt0, {z0 - z1} +** ret +*/ +PROTO (luti4_zt_s8_x4, svint8x4_t, (svuint8x2_t z0)) +{ + return svluti4_zt_s8_x4 (0, z0); +} diff --git a/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/svwrite_lane_zt_1.c b/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/svwrite_lane_zt_1.c new file mode 100644 index 000000000000..256e32b0f6aa --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/svwrite_lane_zt_1.c @@ -0,0 +1,204 @@ +/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */ + +/* MOVT (vector to table) + Variants are also available for: + [_s8], [_u16], [_s16], [_u32], [_s32], [_u64], [_s64] + [_bf16], [_f16], [_f32], [_f64] + void svwrite_lane_zt[_u8] (uint64_t zt0, svuint8_t zt, uint64_t idx) + __arm_streaming __arm_out ("zt0"); */ + +#pragma GCC target "+sve2,+sme-lutv2" +#define SHARED_ZT0 +#include "test_sme2_acle.h" + +/* +** write_lane_zt_u8: +** movt zt0 \[0, mul vl\], z0 +** movt zt0 \[1, mul vl\], z0 +** movt zt0 \[2, mul vl\], z0 +** movt zt0 \[3, mul vl\], z0 +** ret +*/ +PROTO (write_lane_zt_u8, void, (svuint8_t z0)) +{ + svwrite_lane_zt_u8 (0, z0, 0); + svwrite_lane_zt_u8 (0, z0, 1); + svwrite_lane_zt_u8 (0, z0, 2); + svwrite_lane_zt_u8 (0, z0, 3); +} + +/* +** write_lane_zt_s8: +** movt zt0 \[0, mul vl\], z0 +** movt zt0 \[1, mul vl\], z0 +** movt zt0 \[2, mul vl\], z0 +** movt zt0 \[3, mul vl\], z0 +** ret +*/ +PROTO (write_lane_zt_s8, void, (svint8_t z0)) +{ + svwrite_lane_zt_s8 (0, z0, 0); + svwrite_lane_zt_s8 (0, z0, 1); + svwrite_lane_zt_s8 (0, z0, 2); + svwrite_lane_zt_s8 (0, z0, 3); +} + +/* +** write_lane_zt_u16: +** movt zt0 \[0, mul vl\], z0 +** movt zt0 \[1, mul vl\], z0 +** movt zt0 \[2, mul vl\], z0 +** movt zt0 \[3, mul vl\], z0 +** ret +*/ +PROTO (write_lane_zt_u16, void, (svuint16_t z0)) +{ + svwrite_lane_zt_u16 (0, z0, 0); + svwrite_lane_zt_u16 (0, z0, 1); + svwrite_lane_zt_u16 (0, z0, 2); + svwrite_lane_zt_u16 (0, z0, 3); +} + +/* +** write_lane_zt_s16: +** movt zt0 \[0, mul vl\], z0 +** movt zt0 \[1, mul vl\], z0 +** movt zt0 \[2, mul vl\], z0 +** movt zt0 \[3, mul vl\], z0 +** ret +*/ +PROTO (write_lane_zt_s16, void, (svint16_t z0)) +{ + svwrite_lane_zt_s16 (0, z0, 0); + svwrite_lane_zt_s16 (0, z0, 1); + svwrite_lane_zt_s16 (0, z0, 2); + svwrite_lane_zt_s16 (0, z0, 3); +} + +/* +** write_lane_zt_u32: +** movt zt0 \[0, mul vl\], z0 +** movt zt0 \[1, mul vl\], z0 +** movt zt0 \[2, mul vl\], z0 +** movt zt0 \[3, mul vl\], z0 +** ret +*/ +PROTO (write_lane_zt_u32, void, (svuint32_t z0)) +{ + svwrite_lane_zt_u32 (0, z0, 0); + svwrite_lane_zt_u32 (0, z0, 1); + svwrite_lane_zt_u32 (0, z0, 2); + svwrite_lane_zt_u32 (0, z0, 3); +} + +/* +** write_lane_zt_s32: +** movt zt0 \[0, mul vl\], z0 +** movt zt0 \[1, mul vl\], z0 +** movt zt0 \[2, mul vl\], z0 +** movt zt0 \[3, mul vl\], z0 +** ret +*/ +PROTO (write_lane_zt_s32, void, (svint32_t z0)) +{ + svwrite_lane_zt_s32 (0, z0, 0); + svwrite_lane_zt_s32 (0, z0, 1); + svwrite_lane_zt_s32 (0, z0, 2); + svwrite_lane_zt_s32 (0, z0, 3); +} + +/* +** write_lane_zt_u64: +** movt zt0 \[0, mul vl\], z0 +** movt zt0 \[1, mul vl\], z0 +** movt zt0 \[2, mul vl\], z0 +** movt zt0 \[3, mul vl\], z0 +** ret +*/ +PROTO (write_lane_zt_u64, void, (svuint64_t z0)) +{ + svwrite_lane_zt_u64 (0, z0, 0); + svwrite_lane_zt_u64 (0, z0, 1); + svwrite_lane_zt_u64 (0, z0, 2); + svwrite_lane_zt_u64 (0, z0, 3); +} + +/* +** write_lane_zt_s64: +** movt zt0 \[0, mul vl\], z0 +** movt zt0 \[1, mul vl\], z0 +** movt zt0 \[2, mul vl\], z0 +** movt zt0 \[3, mul vl\], z0 +** ret +*/ +PROTO (write_lane_zt_s64, void, (svint64_t z0)) +{ + svwrite_lane_zt_s64 (0, z0, 0); + svwrite_lane_zt_s64 (0, z0, 1); + svwrite_lane_zt_s64 (0, z0, 2); + svwrite_lane_zt_s64 (0, z0, 3); +} + +/* +** write_lane_zt_bf16: +** movt zt0 \[0, mul vl\], z0 +** movt zt0 \[1, mul vl\], z0 +** movt zt0 \[2, mul vl\], z0 +** movt zt0 \[3, mul vl\], z0 +** ret +*/ +PROTO (write_lane_zt_bf16, void, (svbfloat16_t z0)) +{ + svwrite_lane_zt_bf16 (0, z0, 0); + svwrite_lane_zt_bf16 (0, z0, 1); + svwrite_lane_zt_bf16 (0, z0, 2); + svwrite_lane_zt_bf16 (0, z0, 3); +} + +/* +** write_lane_zt_f16: +** movt zt0 \[0, mul vl\], z0 +** movt zt0 \[1, mul vl\], z0 +** movt zt0 \[2, mul vl\], z0 +** movt zt0 \[3, mul vl\], z0 +** ret +*/ +PROTO (write_lane_zt_f16, void, (svfloat16_t z0)) +{ + svwrite_lane_zt_f16 (0, z0, 0); + svwrite_lane_zt_f16 (0, z0, 1); + svwrite_lane_zt_f16 (0, z0, 2); + svwrite_lane_zt_f16 (0, z0, 3); +} + +/* +** write_lane_zt_f32: +** movt zt0 \[0, mul vl\], z0 +** movt zt0 \[1, mul vl\], z0 +** movt zt0 \[2, mul vl\], z0 +** movt zt0 \[3, mul vl\], z0 +** ret +*/ +PROTO (write_lane_zt_f32, void, (svfloat32_t z0)) +{ + svwrite_lane_zt_f32 (0, z0, 0); + svwrite_lane_zt_f32 (0, z0, 1); + svwrite_lane_zt_f32 (0, z0, 2); + svwrite_lane_zt_f32 (0, z0, 3); +} + +/* +** write_lane_zt_f64: +** movt zt0 \[0, mul vl\], z0 +** movt zt0 \[1, mul vl\], z0 +** movt zt0 \[2, mul vl\], z0 +** movt zt0 \[3, mul vl\], z0 +** ret +*/ +PROTO (write_lane_zt_f64, void, (svfloat64_t z0)) +{ + svwrite_lane_zt_f64 (0, z0, 0); + svwrite_lane_zt_f64 (0, z0, 1); + svwrite_lane_zt_f64 (0, z0, 2); + svwrite_lane_zt_f64 (0, z0, 3); +} diff --git a/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/svwrite_zt_1.c b/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/svwrite_zt_1.c new file mode 100644 index 000000000000..dfe3267e0cbe --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/svwrite_zt_1.c @@ -0,0 +1,96 @@ +/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */ + +/* MOVT (vector to table) + Variants are also available for: + [_s8], [_u16], [_s16], [_u32], [_s32], [_u64], [_s64] + [_bf16], [_f16], [_f32], [_f64] + void svwrite_zt[_u8] (uint64_t zt0, svuint8_t zt, uint64_t idx) + __arm_streaming __arm_out ("zt0"); */ + +#pragma GCC target "+sve2,+sme-lutv2" +#define SHARED_ZT0 +#include "test_sme2_acle.h" + +/* +** write_zt_u8: +** movt zt0 \[0, mul vl\], z0 +** ret +*/ +PROTO (write_zt_u8, void, (svuint8_t z0)) { svwrite_zt_u8 (0, z0); } + +/* +** write_zt_s8: +** movt zt0 \[0, mul vl\], z0 +** ret +*/ +PROTO (write_zt_s8, void, (svint8_t z0)) { svwrite_zt_s8 (0, z0); } + +/* +** write_zt_u16: +** movt zt0 \[0, mul vl\], z0 +** ret +*/ +PROTO (write_zt_u16, void, (svuint16_t z0)) { svwrite_zt_u16 (0, z0); } + +/* +** write_zt_s16: +** movt zt0 \[0, mul vl\], z0 +** ret +*/ +PROTO (write_zt_s16, void, (svint16_t z0)) { svwrite_zt_s16 (0, z0); } + +/* +** write_zt_u32: +** movt zt0 \[0, mul vl\], z0 +** ret +*/ +PROTO (write_zt_u32, void, (svuint32_t z0)) { svwrite_zt_u32 (0, z0); } + +/* +** write_zt_s32: +** movt zt0 \[0, mul vl\], z0 +** ret +*/ +PROTO (write_zt_s32, void, (svint32_t z0)) { svwrite_zt_s32 (0, z0); } + +/* +** write_zt_u64: +** movt zt0 \[0, mul vl\], z0 +** ret +*/ +PROTO (write_zt_u64, void, (svuint64_t z0)) { svwrite_zt_u64 (0, z0); } + +/* +** write_zt_s64: +** movt zt0 \[0, mul vl\], z0 +** ret +*/ +PROTO (write_zt_s64, void, (svint64_t z0)) { svwrite_zt_s64 (0, z0); } + +/* +** write_zt_bf16: +** movt zt0 \[0, mul vl\], z0 +** ret +*/ +PROTO (write_zt_bf16, void, (svbfloat16_t z0)) { svwrite_zt_bf16 (0, z0); } + +/* +** write_zt_f16: +** movt zt0 \[0, mul vl\], z0 +** ret +*/ +PROTO (write_zt_f16, void, (svfloat16_t z0)) { svwrite_zt_f16 (0, z0); } + +/* +** write_zt_f32: +** movt zt0 \[0, mul vl\], z0 +** ret +*/ +PROTO (write_zt_f32, void, (svfloat32_t z0)) { svwrite_zt_f32 (0, z0); } + +/* +** write_zt_f64: +** movt zt0 \[0, mul vl\], z0 +** ret +*/ +PROTO (write_zt_f64, void, (svfloat64_t z0)) { svwrite_zt_f64 (0, z0); } diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/asm/mul_s16.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/asm/mul_s16.c index e9b6bf83b032..4148097cc63c 100644 --- a/gcc/testsuite/gcc.target/aarch64/sve/acle/asm/mul_s16.c +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/asm/mul_s16.c @@ -331,6 +331,16 @@ TEST_UNIFORM_Z (mul_1op1_s16_z_tied2, svint16_t, z0 = svmul_s16_z (p0, svdup_s16 (1), z0), z0 = svmul_z (p0, svdup_s16 (1), z0)) +/* +** mul_1op1n_s16_z: +** movprfx z0\.h, p0/z, z0\.h +** mov z0\.h, p0/m, w0 +** ret +*/ +TEST_UNIFORM_ZX (mul_1op1n_s16_z, svint16_t, int16_t, + z0 = svmul_n_s16_z (p0, svdup_s16 (1), x0), + z0 = svmul_z (p0, svdup_s16 (1), x0)) + /* ** mul_3_s16_z_tied1: ** mov (z[0-9]+\.h), #3 diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/asm/mul_s32.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/asm/mul_s32.c index 71c476f48ca3..2c53e3f14d64 100644 --- a/gcc/testsuite/gcc.target/aarch64/sve/acle/asm/mul_s32.c +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/asm/mul_s32.c @@ -341,6 +341,16 @@ TEST_UNIFORM_Z (mul_1op1_s32_z_tied2, svint32_t, z0 = svmul_s32_z (p0, svdup_s32 (1), z0), z0 = svmul_z (p0, svdup_s32 (1), z0)) +/* +** mul_1op1n_s32_z: +** movprfx z0\.s, p0/z, z0\.s +** mov z0\.s, p0/m, w0 +** ret +*/ +TEST_UNIFORM_ZX (mul_1op1n_s32_z, svint32_t, int32_t, + z0 = svmul_n_s32_z (p0, svdup_s32 (1), x0), + z0 = svmul_z (p0, svdup_s32 (1), x0)) + /* ** mul_3_s32_z_tied1: ** mov (z[0-9]+\.s), #3 diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/asm/mul_s64.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/asm/mul_s64.c index a34dc27740a8..55342a13f8bd 100644 --- a/gcc/testsuite/gcc.target/aarch64/sve/acle/asm/mul_s64.c +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/asm/mul_s64.c @@ -340,6 +340,16 @@ TEST_UNIFORM_Z (mul_1op1_s64_z_tied2, svint64_t, z0 = svmul_s64_z (p0, svdup_s64 (1), z0), z0 = svmul_z (p0, svdup_s64 (1), z0)) +/* +** mul_1op1n_s64_z: +** movprfx z0\.d, p0/z, z0\.d +** mov z0\.d, p0/m, x0 +** ret +*/ +TEST_UNIFORM_ZX (mul_1op1n_s64_z, svint64_t, int64_t, + z0 = svmul_n_s64_z (p0, svdup_s64 (1), x0), + z0 = svmul_z (p0, svdup_s64 (1), x0)) + /* ** mul_2_s64_z_tied1: ** movprfx z0.d, p0/z, z0.d diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/asm/mul_s8.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/asm/mul_s8.c index 683e15eccecb..786a424eeead 100644 --- a/gcc/testsuite/gcc.target/aarch64/sve/acle/asm/mul_s8.c +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/asm/mul_s8.c @@ -331,6 +331,16 @@ TEST_UNIFORM_Z (mul_1op1_s8_z_tied2, svint8_t, z0 = svmul_s8_z (p0, svdup_s8 (1), z0), z0 = svmul_z (p0, svdup_s8 (1), z0)) +/* +** mul_1op1n_s8_z: +** movprfx z0\.b, p0/z, z0\.b +** mov z0\.b, p0/m, w0 +** ret +*/ +TEST_UNIFORM_ZX (mul_1op1n_s8_z, svint8_t, int8_t, + z0 = svmul_n_s8_z (p0, svdup_s8 (1), x0), + z0 = svmul_z (p0, svdup_s8 (1), x0)) + /* ** mul_3_s8_z_tied1: ** mov (z[0-9]+\.b), #3 diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/asm/mul_u16.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/asm/mul_u16.c index e228dc5995df..ed08635382d5 100644 --- a/gcc/testsuite/gcc.target/aarch64/sve/acle/asm/mul_u16.c +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/asm/mul_u16.c @@ -312,6 +312,16 @@ TEST_UNIFORM_Z (mul_1op1_u16_z_tied2, svuint16_t, z0 = svmul_u16_z (p0, svdup_u16 (1), z0), z0 = svmul_z (p0, svdup_u16 (1), z0)) +/* +** mul_1op1n_u16_z: +** movprfx z0\.h, p0/z, z0\.h +** mov z0\.h, p0/m, w0 +** ret +*/ +TEST_UNIFORM_ZX (mul_1op1n_u16_z, svuint16_t, uint16_t, + z0 = svmul_n_u16_z (p0, svdup_u16 (1), x0), + z0 = svmul_z (p0, svdup_u16 (1), x0)) + /* ** mul_3_u16_z_tied1: ** mov (z[0-9]+\.h), #3 diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/asm/mul_u32.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/asm/mul_u32.c index e8f52c9d7854..f82ac4269e8f 100644 --- a/gcc/testsuite/gcc.target/aarch64/sve/acle/asm/mul_u32.c +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/asm/mul_u32.c @@ -312,6 +312,16 @@ TEST_UNIFORM_Z (mul_1op1_u32_z_tied2, svuint32_t, z0 = svmul_u32_z (p0, svdup_u32 (1), z0), z0 = svmul_z (p0, svdup_u32 (1), z0)) +/* +** mul_1op1n_u32_z: +** movprfx z0\.s, p0/z, z0\.s +** mov z0\.s, p0/m, w0 +** ret +*/ +TEST_UNIFORM_ZX (mul_1op1n_u32_z, svuint32_t, uint32_t, + z0 = svmul_n_u32_z (p0, svdup_u32 (1), x0), + z0 = svmul_z (p0, svdup_u32 (1), x0)) + /* ** mul_3_u32_z_tied1: ** mov (z[0-9]+\.s), #3 diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/asm/mul_u64.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/asm/mul_u64.c index 2ccdc3642c52..9f1bfff5fd2f 100644 --- a/gcc/testsuite/gcc.target/aarch64/sve/acle/asm/mul_u64.c +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/asm/mul_u64.c @@ -333,6 +333,16 @@ TEST_UNIFORM_Z (mul_1op1_u64_z_tied2, svuint64_t, z0 = svmul_u64_z (p0, svdup_u64 (1), z0), z0 = svmul_z (p0, svdup_u64 (1), z0)) +/* +** mul_1op1n_u64_z: +** movprfx z0\.d, p0/z, z0\.d +** mov z0\.d, p0/m, x0 +** ret +*/ +TEST_UNIFORM_ZX (mul_1op1n_u64_z, svuint64_t, uint64_t, + z0 = svmul_n_u64_z (p0, svdup_u64 (1), x0), + z0 = svmul_z (p0, svdup_u64 (1), x0)) + /* ** mul_2_u64_z_tied1: ** movprfx z0.d, p0/z, z0.d diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/asm/mul_u8.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/asm/mul_u8.c index 8e53a4821f05..b2c1edf5ff82 100644 --- a/gcc/testsuite/gcc.target/aarch64/sve/acle/asm/mul_u8.c +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/asm/mul_u8.c @@ -312,6 +312,16 @@ TEST_UNIFORM_Z (mul_1op1_u8_z_tied2, svuint8_t, z0 = svmul_u8_z (p0, svdup_u8 (1), z0), z0 = svmul_z (p0, svdup_u8 (1), z0)) +/* +** mul_1op1n_u8_z: +** movprfx z0\.b, p0/z, z0\.b +** mov z0\.b, p0/m, w0 +** ret +*/ +TEST_UNIFORM_ZX (mul_1op1n_u8_z, svuint8_t, uint8_t, + z0 = svmul_n_u8_z (p0, svdup_u8 (1), x0), + z0 = svmul_z (p0, svdup_u8 (1), x0)) + /* ** mul_3_u8_z_tied1: ** mov (z[0-9]+\.b), #3 diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/svluti4_zt_1.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/svluti4_zt_1.c new file mode 100644 index 000000000000..05acb8c74ea2 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/svluti4_zt_1.c @@ -0,0 +1,86 @@ +/* { dg-options "-std=c23" } */ +/* { dg-do compile } */ + +#pragma GCC target "+sve2,+sme-lutv2" +static_assert (__ARM_FEATURE_SME_LUTv2 == 1); +#include + +/* LUTI4 (four registers, 8-bit) + Variants are also available for: _u8 + svint8x4_t svluti4_zt_s8_x4 (uint64_t zt0, svuint8x2_t zn) + __arm_streaming __arm_in ("zt0"); */ + +void +test_svluti4_zt_ok (svuint8x2_t zn_u8) __arm_streaming __arm_in ("zt0") +{ + svluti4_zt_s8_x4 (0, zn_u8); + svluti4_zt_u8_x4 (0, zn_u8); +} + +void +test_svluti4_zt_not_streaming (svuint8x2_t zn_u8) +{ + svluti4_zt_s8_x4 (0, zn_u8); /* { dg-error {ACLE function 'svluti4_zt_s8_x4' can only be called when SME streaming mode is enabled} } */ + svluti4_zt_u8_x4 (0, zn_u8); /* { dg-error {ACLE function 'svluti4_zt_u8_x4' can only be called when SME streaming mode is enabled} } */ +} + +void +test_svluti4_zt_streaming_compatible (svuint8x2_t zn_u8) __arm_streaming_compatible +{ + svluti4_zt_s8_x4 (0, zn_u8); /* { dg-error {ACLE function 'svluti4_zt_s8_x4' can only be called when SME streaming mode is enabled} } */ + svluti4_zt_u8_x4 (0, zn_u8); /* { dg-error {ACLE function 'svluti4_zt_u8_x4' can only be called when SME streaming mode is enabled} } */ +} + +void +test_svluti4_zt_arg_count_mismatch (svuint8x2_t zn_u8) __arm_streaming __arm_in ("zt0") +{ + svluti4_zt_s8_x4 (); /* { dg-error {too few arguments to function 'svluti4_zt_s8_x4'; expected 2, have 0} } */ + svluti4_zt_u8_x4 (); /* { dg-error {too few arguments to function 'svluti4_zt_u8_x4'; expected 2, have 0} } */ + + svluti4_zt_s8_x4 (0); /* { dg-error {too few arguments to function 'svluti4_zt_s8_x4'; expected 2, have 1} } */ + svluti4_zt_u8_x4 (0); /* { dg-error {too few arguments to function 'svluti4_zt_u8_x4'; expected 2, have 1} } */ + + svluti4_zt_s8_x4 (0, zn_u8, 0); /* { dg-error {too many arguments to function 'svluti4_zt_s8_x4'; expected 2, have 3} } */ + svluti4_zt_u8_x4 (0, zn_u8, 0); /* { dg-error {too many arguments to function 'svluti4_zt_u8_x4'; expected 2, have 3} } */ +} + +void +test_svluti4_zt_arg_type_mismatch (svuint8x2_t zn_u8) __arm_streaming __arm_in ("zt0") +{ + struct Foo { uint64_t val; } foo = {0}; + svluti4_zt_s8_x4 (foo, zn_u8); /* { dg-error {incompatible type for argument 1 of 'svluti4_zt_s8_x4'} } */ + svluti4_zt_u8_x4 (foo, zn_u8); /* { dg-error {incompatible type for argument 1 of 'svluti4_zt_u8_x4'} } */ +} + +void +test_svluti4_zt_ret_type_mismatch (svuint8x2_t zn_u8) __arm_streaming __arm_in ("zt0") +{ + int x0 = svluti4_zt_s8_x4 (0, zn_u8); /* { dg-error {incompatible types when initializing type 'int' using type 'svint8x4_t'} } */ + int x1 = svluti4_zt_u8_x4 (0, zn_u8); /* { dg-error {incompatible types when initializing type 'int' using type 'svuint8x4_t'} } */ +} + +void +test_svluti4_zt_zt0_not_immediate (uint64_t zt0, svuint8x2_t zn_u8) __arm_streaming __arm_in ("zt0") +{ + svluti4_zt_s8_x4 (zt0, zn_u8); /* { dg-error {argument 1 of 'svluti4_zt_s8_x4' must be an integer constant expression} } */ + svluti4_zt_u8_x4 (zt0, zn_u8); /* { dg-error {argument 1 of 'svluti4_zt_u8_x4' must be an integer constant expression} } */ +} + +void +test_svluti4_zt_zt0_not_in_range (uint64_t zt0, svuint8x2_t zn_u8)__arm_streaming __arm_in ("zt0") +{ + svluti4_zt_s8_x4 (1, zn_u8); /* { dg-error {passing 1 to argument 1 of 'svluti4_zt_s8_x4', which expects the value 0} } */ + svluti4_zt_u8_x4 (1, zn_u8); /* { dg-error {passing 1 to argument 1 of 'svluti4_zt_u8_x4', which expects the value 0} } */ + + svluti4_zt_s8_x4 (-1, zn_u8); /* { dg-error {passing -1 to argument 1 of 'svluti4_zt_s8_x4', which expects the value 0} } */ + svluti4_zt_u8_x4 (-1, zn_u8); /* { dg-error {passing -1 to argument 1 of 'svluti4_zt_u8_x4', which expects the value 0} } */ +} + +#pragma GCC reset_options +#pragma GCC target("+sve2,+sme2") +void +test_svluti4_zt_feature_not_enabled (svuint8x2_t zn_u8)__arm_streaming __arm_in ("zt0") +{ + // GCC only complains for the first such instance, so only one test here. + svluti4_zt_s8_x4 (0, zn_u8); /* { dg-error {ACLE function 'svluti4_zt_s8_x4' requires ISA extension 'sme-lutv2'} } */ +} diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/svwrite_lane_zt_1.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/svwrite_lane_zt_1.c new file mode 100644 index 000000000000..321c0bd46dfe --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/svwrite_lane_zt_1.c @@ -0,0 +1,406 @@ +/* { dg-options "-std=c23" } */ +/* { dg-do compile } */ + +/* MOVT (vector to table) + Variants are also available for: + [_s8], [_u16], [_s16], [_u32], [_s32], [_u64], [_s64] + [_bf16], [_f16], [_f32], [_f64] + void svwrite_lane_zt[_u8] (uint64_t zt0, svuint8_t zt, uint64_t idx) + __arm_streaming __arm_out ("zt0"); */ + +#pragma GCC target "+sve2,+sme-lutv2" +static_assert (__ARM_FEATURE_SME_LUTv2 == 1); +#include + +void +test_svwrite_lane_zt_explicit_ok ( + svuint8_t zt_u8, svint8_t zt_s8, svuint16_t zt_u16, svint16_t zt_s16, + svuint32_t zt_u32, svint32_t zt_s32, svuint64_t zt_u64, svint64_t zt_s64, + svbfloat16_t zt_bf16, svfloat16_t zt_f16, svfloat32_t zt_f32, + svfloat64_t zt_f64) __arm_streaming __arm_inout ("zt0") +{ + svwrite_lane_zt_u8 (0, zt_u8, 0); + svwrite_lane_zt_s8 (0, zt_s8, 0); + svwrite_lane_zt_u16 (0, zt_u16, 0); + svwrite_lane_zt_s16 (0, zt_s16, 0); + svwrite_lane_zt_u32 (0, zt_u32, 0); + svwrite_lane_zt_s32 (0, zt_s32, 0); + svwrite_lane_zt_u64 (0, zt_u64, 0); + svwrite_lane_zt_s64 (0, zt_s64, 0); + svwrite_lane_zt_bf16 (0, zt_bf16, 0); + svwrite_lane_zt_f16 (0, zt_f16, 0); + svwrite_lane_zt_f32 (0, zt_f32, 0); + svwrite_lane_zt_f64 (0, zt_f64, 0); +} + +void +test_svwrite_lane_zt_inferred_ok ( + svuint8_t zt_u8, svint8_t zt_s8, svuint16_t zt_u16, svint16_t zt_s16, + svuint32_t zt_u32, svint32_t zt_s32, svuint64_t zt_u64, svint64_t zt_s64, + svbfloat16_t zt_bf16, svfloat16_t zt_f16, svfloat32_t zt_f32, + svfloat64_t zt_f64) __arm_streaming __arm_inout ("zt0") +{ + svwrite_lane_zt (0, zt_u8, 0); + svwrite_lane_zt (0, zt_s8, 0); + svwrite_lane_zt (0, zt_u16, 0); + svwrite_lane_zt (0, zt_s16, 0); + svwrite_lane_zt (0, zt_u32, 0); + svwrite_lane_zt (0, zt_s32, 0); + svwrite_lane_zt (0, zt_u64, 0); + svwrite_lane_zt (0, zt_s64, 0); + svwrite_lane_zt (0, zt_bf16, 0); + svwrite_lane_zt (0, zt_f16, 0); + svwrite_lane_zt (0, zt_f32, 0); + svwrite_lane_zt (0, zt_f64, 0); +} + +void +test_svwrite_lane_zt_explicit_error_not_streaming ( + svuint8_t zt_u8, svint8_t zt_s8, svuint16_t zt_u16, svint16_t zt_s16, + svuint32_t zt_u32, svint32_t zt_s32, svuint64_t zt_u64, svint64_t zt_s64, + svbfloat16_t zt_bf16, svfloat16_t zt_f16, svfloat32_t zt_f32, + svfloat64_t zt_f64) +{ + svwrite_lane_zt_u8 (0, zt_u8, 0); /* { dg-error {ACLE function 'svwrite_lane_zt_u8' can only be called when SME streaming mode is enabled} } */ + svwrite_lane_zt_s8 (0, zt_s8, 0); /* { dg-error {ACLE function 'svwrite_lane_zt_s8' can only be called when SME streaming mode is enabled} } */ + svwrite_lane_zt_u16 (0, zt_u16, 0); /* { dg-error {ACLE function 'svwrite_lane_zt_u16' can only be called when SME streaming mode is enabled} } */ + svwrite_lane_zt_s16 (0, zt_s16, 0); /* { dg-error {ACLE function 'svwrite_lane_zt_s16' can only be called when SME streaming mode is enabled} } */ + svwrite_lane_zt_u32 (0, zt_u32, 0); /* { dg-error {ACLE function 'svwrite_lane_zt_u32' can only be called when SME streaming mode is enabled} } */ + svwrite_lane_zt_s32 (0, zt_s32, 0); /* { dg-error {ACLE function 'svwrite_lane_zt_s32' can only be called when SME streaming mode is enabled} } */ + svwrite_lane_zt_u64 (0, zt_u64, 0); /* { dg-error {ACLE function 'svwrite_lane_zt_u64' can only be called when SME streaming mode is enabled} } */ + svwrite_lane_zt_s64 (0, zt_s64, 0); /* { dg-error {ACLE function 'svwrite_lane_zt_s64' can only be called when SME streaming mode is enabled} } */ + svwrite_lane_zt_bf16 (0, zt_bf16, 0); /* { dg-error {ACLE function 'svwrite_lane_zt_bf16' can only be called when SME streaming mode is enabled} } */ + svwrite_lane_zt_f16 (0, zt_f16, 0); /* { dg-error {ACLE function 'svwrite_lane_zt_f16' can only be called when SME streaming mode is enabled} } */ + svwrite_lane_zt_f32 (0, zt_f32, 0); /* { dg-error {ACLE function 'svwrite_lane_zt_f32' can only be called when SME streaming mode is enabled} } */ + svwrite_lane_zt_f64 (0, zt_f64, 0); /* { dg-error {ACLE function 'svwrite_lane_zt_f64' can only be called when SME streaming mode is enabled} } */ +} + +void +test_svwrite_lane_zt_inferred_error_not_streaming ( + svuint8_t zt_u8, svint8_t zt_s8, svuint16_t zt_u16, svint16_t zt_s16, + svuint32_t zt_u32, svint32_t zt_s32, svuint64_t zt_u64, svint64_t zt_s64, + svbfloat16_t zt_bf16, svfloat16_t zt_f16, svfloat32_t zt_f32, + svfloat64_t zt_f64) +{ + svwrite_lane_zt (0, zt_u8, 0); /* { dg-error {ACLE function 'svwrite_lane_zt_u8' can only be called when SME streaming mode is enabled} } */ + svwrite_lane_zt (0, zt_s8, 0); /* { dg-error {ACLE function 'svwrite_lane_zt_s8' can only be called when SME streaming mode is enabled} } */ + svwrite_lane_zt (0, zt_u16, 0); /* { dg-error {ACLE function 'svwrite_lane_zt_u16' can only be called when SME streaming mode is enabled} } */ + svwrite_lane_zt (0, zt_s16, 0); /* { dg-error {ACLE function 'svwrite_lane_zt_s16' can only be called when SME streaming mode is enabled} } */ + svwrite_lane_zt (0, zt_u32, 0); /* { dg-error {ACLE function 'svwrite_lane_zt_u32' can only be called when SME streaming mode is enabled} } */ + svwrite_lane_zt (0, zt_s32, 0); /* { dg-error {ACLE function 'svwrite_lane_zt_s32' can only be called when SME streaming mode is enabled} } */ + svwrite_lane_zt (0, zt_u64, 0); /* { dg-error {ACLE function 'svwrite_lane_zt_u64' can only be called when SME streaming mode is enabled} } */ + svwrite_lane_zt (0, zt_s64, 0); /* { dg-error {ACLE function 'svwrite_lane_zt_s64' can only be called when SME streaming mode is enabled} } */ + svwrite_lane_zt (0, zt_bf16, 0); /* { dg-error {ACLE function 'svwrite_lane_zt_bf16' can only be called when SME streaming mode is enabled} } */ + svwrite_lane_zt (0, zt_f16, 0); /* { dg-error {ACLE function 'svwrite_lane_zt_f16' can only be called when SME streaming mode is enabled} } */ + svwrite_lane_zt (0, zt_f32, 0); /* { dg-error {ACLE function 'svwrite_lane_zt_f32' can only be called when SME streaming mode is enabled} } */ + svwrite_lane_zt (0, zt_f64, 0); /* { dg-error {ACLE function 'svwrite_lane_zt_f64' can only be called when SME streaming mode is enabled} } */ +} + +void +test_svwrite_lane_zt_explicit_error_arg_count_mismatch ( + svuint8_t zt_u8, svint8_t zt_s8, svuint16_t zt_u16, svint16_t zt_s16, + svuint32_t zt_u32, svint32_t zt_s32, svuint64_t zt_u64, svint64_t zt_s64, + svbfloat16_t zt_bf16, svfloat16_t zt_f16, svfloat32_t zt_f32, + svfloat64_t zt_f64) __arm_streaming __arm_out ("zt0") +{ + svwrite_lane_zt_u8 (); /* { dg-error {too few arguments to function 'svwrite_lane_zt_u8'; expected 3, have 0} } */ + svwrite_lane_zt_s8 (); /* { dg-error {too few arguments to function 'svwrite_lane_zt_s8'; expected 3, have 0} } */ + svwrite_lane_zt_u16 (); /* { dg-error {too few arguments to function 'svwrite_lane_zt_u16'; expected 3, have 0} } */ + svwrite_lane_zt_s16 (); /* { dg-error {too few arguments to function 'svwrite_lane_zt_s16'; expected 3, have 0} } */ + svwrite_lane_zt_u32 (); /* { dg-error {too few arguments to function 'svwrite_lane_zt_u32'; expected 3, have 0} } */ + svwrite_lane_zt_s32 (); /* { dg-error {too few arguments to function 'svwrite_lane_zt_s32'; expected 3, have 0} } */ + svwrite_lane_zt_u64 (); /* { dg-error {too few arguments to function 'svwrite_lane_zt_u64'; expected 3, have 0} } */ + svwrite_lane_zt_s64 (); /* { dg-error {too few arguments to function 'svwrite_lane_zt_s64'; expected 3, have 0} } */ + svwrite_lane_zt_bf16 (); /* { dg-error {too few arguments to function 'svwrite_lane_zt_bf16'; expected 3, have 0} } */ + svwrite_lane_zt_f16 (); /* { dg-error {too few arguments to function 'svwrite_lane_zt_f16'; expected 3, have 0} } */ + svwrite_lane_zt_f32 (); /* { dg-error {too few arguments to function 'svwrite_lane_zt_f32'; expected 3, have 0} } */ + svwrite_lane_zt_f64 (); /* { dg-error {too few arguments to function 'svwrite_lane_zt_f64'; expected 3, have 0} } */ + + svwrite_lane_zt_u8 (0); /* { dg-error {too few arguments to function 'svwrite_lane_zt_u8'; expected 3, have 1} } */ + svwrite_lane_zt_s8 (0); /* { dg-error {too few arguments to function 'svwrite_lane_zt_s8'; expected 3, have 1} } */ + svwrite_lane_zt_u16 (0); /* { dg-error {too few arguments to function 'svwrite_lane_zt_u16'; expected 3, have 1} } */ + svwrite_lane_zt_s16 (0); /* { dg-error {too few arguments to function 'svwrite_lane_zt_s16'; expected 3, have 1} } */ + svwrite_lane_zt_u32 (0); /* { dg-error {too few arguments to function 'svwrite_lane_zt_u32'; expected 3, have 1} } */ + svwrite_lane_zt_s32 (0); /* { dg-error {too few arguments to function 'svwrite_lane_zt_s32'; expected 3, have 1} } */ + svwrite_lane_zt_u64 (0); /* { dg-error {too few arguments to function 'svwrite_lane_zt_u64'; expected 3, have 1} } */ + svwrite_lane_zt_s64 (0); /* { dg-error {too few arguments to function 'svwrite_lane_zt_s64'; expected 3, have 1} } */ + svwrite_lane_zt_bf16 (0); /* { dg-error {too few arguments to function 'svwrite_lane_zt_bf16'; expected 3, have 1} } */ + svwrite_lane_zt_f16 (0); /* { dg-error {too few arguments to function 'svwrite_lane_zt_f16'; expected 3, have 1} } */ + svwrite_lane_zt_f32 (0); /* { dg-error {too few arguments to function 'svwrite_lane_zt_f32'; expected 3, have 1} } */ + svwrite_lane_zt_f64 (0); /* { dg-error {too few arguments to function 'svwrite_lane_zt_f64'; expected 3, have 1} } */ + + svwrite_lane_zt_u8 (0, zt_u8); /* { dg-error {too few arguments to function 'svwrite_lane_zt_u8'; expected 3, have 2} } */ + svwrite_lane_zt_s8 (0, zt_s8); /* { dg-error {too few arguments to function 'svwrite_lane_zt_s8'; expected 3, have 2} } */ + svwrite_lane_zt_u16 (0, zt_u16); /* { dg-error {too few arguments to function 'svwrite_lane_zt_u16'; expected 3, have 2} } */ + svwrite_lane_zt_s16 (0, zt_s16); /* { dg-error {too few arguments to function 'svwrite_lane_zt_s16'; expected 3, have 2} } */ + svwrite_lane_zt_u32 (0, zt_u32); /* { dg-error {too few arguments to function 'svwrite_lane_zt_u32'; expected 3, have 2} } */ + svwrite_lane_zt_s32 (0, zt_s32); /* { dg-error {too few arguments to function 'svwrite_lane_zt_s32'; expected 3, have 2} } */ + svwrite_lane_zt_u64 (0, zt_u64); /* { dg-error {too few arguments to function 'svwrite_lane_zt_u64'; expected 3, have 2} } */ + svwrite_lane_zt_s64 (0, zt_s64); /* { dg-error {too few arguments to function 'svwrite_lane_zt_s64'; expected 3, have 2} } */ + svwrite_lane_zt_bf16 (0, zt_bf16); /* { dg-error {too few arguments to function 'svwrite_lane_zt_bf16'; expected 3, have 2} } */ + svwrite_lane_zt_f16 (0, zt_f16); /* { dg-error {too few arguments to function 'svwrite_lane_zt_f16'; expected 3, have 2} } */ + svwrite_lane_zt_f32 (0, zt_f32); /* { dg-error {too few arguments to function 'svwrite_lane_zt_f32'; expected 3, have 2} } */ + svwrite_lane_zt_f64 (0, zt_f64); /* { dg-error {too few arguments to function 'svwrite_lane_zt_f64'; expected 3, have 2} } */ + + svwrite_lane_zt_u8 (0, zt_u8, 0, 0); /* { dg-error {too many arguments to function 'svwrite_lane_zt_u8'; expected 3, have 4} } */ + svwrite_lane_zt_s8 (0, zt_s8, 0, 0); /* { dg-error {too many arguments to function 'svwrite_lane_zt_s8'; expected 3, have 4} } */ + svwrite_lane_zt_u16 (0, zt_u16, 0, 0); /* { dg-error {too many arguments to function 'svwrite_lane_zt_u16'; expected 3, have 4} } */ + svwrite_lane_zt_s16 (0, zt_s16, 0, 0); /* { dg-error {too many arguments to function 'svwrite_lane_zt_s16'; expected 3, have 4} } */ + svwrite_lane_zt_u32 (0, zt_u32, 0, 0); /* { dg-error {too many arguments to function 'svwrite_lane_zt_u32'; expected 3, have 4} } */ + svwrite_lane_zt_s32 (0, zt_s32, 0, 0); /* { dg-error {too many arguments to function 'svwrite_lane_zt_s32'; expected 3, have 4} } */ + svwrite_lane_zt_u64 (0, zt_u64, 0, 0); /* { dg-error {too many arguments to function 'svwrite_lane_zt_u64'; expected 3, have 4} } */ + svwrite_lane_zt_s64 (0, zt_s64, 0, 0); /* { dg-error {too many arguments to function 'svwrite_lane_zt_s64'; expected 3, have 4} } */ + svwrite_lane_zt_bf16 (0, zt_bf16, 0, 0); /* { dg-error {too many arguments to function 'svwrite_lane_zt_bf16'; expected 3, have 4} } */ + svwrite_lane_zt_f16 (0, zt_f16, 0, 0); /* { dg-error {too many arguments to function 'svwrite_lane_zt_f16'; expected 3, have 4} } */ + svwrite_lane_zt_f32 (0, zt_f32, 0, 0); /* { dg-error {too many arguments to function 'svwrite_lane_zt_f32'; expected 3, have 4} } */ + svwrite_lane_zt_f64 (0, zt_f64, 0, 0); /* { dg-error {too many arguments to function 'svwrite_lane_zt_f64'; expected 3, have 4} } */ +} + +void +test_svwrite_lane_zt_implicit_error_arg_count_mismatch ( + svuint8_t zt_u8, svint8_t zt_s8, svuint16_t zt_u16, svint16_t zt_s16, + svuint32_t zt_u32, svint32_t zt_s32, svuint64_t zt_u64, svint64_t zt_s64, + svbfloat16_t zt_bf16, svfloat16_t zt_f16, svfloat32_t zt_f32, + svfloat64_t zt_f64) __arm_streaming __arm_out ("zt0") +{ + svwrite_lane_zt (); /* { dg-error {too few arguments to function 'svwrite_lane_zt'} } */ + svwrite_lane_zt (0); /* { dg-error {too few arguments to function 'svwrite_lane_zt'} } */ + svwrite_lane_zt (0, zt_u8); /* { dg-error {too few arguments to function 'svwrite_lane_zt'} } */ + svwrite_lane_zt (0, zt_s8); /* { dg-error {too few arguments to function 'svwrite_lane_zt'} } */ + svwrite_lane_zt (0, zt_u16); /* { dg-error {too few arguments to function 'svwrite_lane_zt'} } */ + svwrite_lane_zt (0, zt_s16); /* { dg-error {too few arguments to function 'svwrite_lane_zt'} } */ + svwrite_lane_zt (0, zt_u32); /* { dg-error {too few arguments to function 'svwrite_lane_zt'} } */ + svwrite_lane_zt (0, zt_s32); /* { dg-error {too few arguments to function 'svwrite_lane_zt'} } */ + svwrite_lane_zt (0, zt_u64); /* { dg-error {too few arguments to function 'svwrite_lane_zt'} } */ + svwrite_lane_zt (0, zt_s64); /* { dg-error {too few arguments to function 'svwrite_lane_zt'} } */ + svwrite_lane_zt (0, zt_bf16); /* { dg-error {too few arguments to function 'svwrite_lane_zt'} } */ + svwrite_lane_zt (0, zt_f16); /* { dg-error {too few arguments to function 'svwrite_lane_zt'} } */ + svwrite_lane_zt (0, zt_f32); /* { dg-error {too few arguments to function 'svwrite_lane_zt'} } */ + svwrite_lane_zt (0, zt_f64); /* { dg-error {too few arguments to function 'svwrite_lane_zt'} } */ + + svwrite_lane_zt (0, zt_u8, 0, 0); /* { dg-error {too many arguments to function 'svwrite_lane_zt'} } */ + svwrite_lane_zt (0, zt_s8, 0, 0); /* { dg-error {too many arguments to function 'svwrite_lane_zt'} } */ + svwrite_lane_zt (0, zt_u16, 0, 0); /* { dg-error {too many arguments to function 'svwrite_lane_zt'} } */ + svwrite_lane_zt (0, zt_s16, 0, 0); /* { dg-error {too many arguments to function 'svwrite_lane_zt'} } */ + svwrite_lane_zt (0, zt_u32, 0, 0); /* { dg-error {too many arguments to function 'svwrite_lane_zt'} } */ + svwrite_lane_zt (0, zt_s32, 0, 0); /* { dg-error {too many arguments to function 'svwrite_lane_zt'} } */ + svwrite_lane_zt (0, zt_u64, 0, 0); /* { dg-error {too many arguments to function 'svwrite_lane_zt'} } */ + svwrite_lane_zt (0, zt_s64, 0, 0); /* { dg-error {too many arguments to function 'svwrite_lane_zt'} } */ + svwrite_lane_zt (0, zt_bf16, 0, 0); /* { dg-error {too many arguments to function 'svwrite_lane_zt'} } */ + svwrite_lane_zt (0, zt_f16, 0, 0); /* { dg-error {too many arguments to function 'svwrite_lane_zt'} } */ + svwrite_lane_zt (0, zt_f32, 0, 0); /* { dg-error {too many arguments to function 'svwrite_lane_zt'} } */ + svwrite_lane_zt (0, zt_f64, 0, 0); /* { dg-error {too many arguments to function 'svwrite_lane_zt'} } */ +} + +void +test_svwrite_lane_zt_explicit_error_arg_type_mismatch ( + svuint8_t zt_u8, svint8_t zt_s8, svuint16_t zt_u16, svint16_t zt_s16, + svuint32_t zt_u32, svint32_t zt_s32, svuint64_t zt_u64, svint64_t zt_s64, + svbfloat16_t zt_bf16, svfloat16_t zt_f16, svfloat32_t zt_f32, + svfloat64_t zt_f64, svuint8x2_t zt_u8x2, svint8x2_t zt_s8x2, + svuint16x2_t zt_u16x2, svint16x2_t zt_s16x2, svuint32x2_t zt_u32x2, + svint32x2_t zt_s32x2, svuint64x2_t zt_u64x2, svint64x2_t zt_s64x2, + svbfloat16x2_t zt_bf16x2, svfloat16x2_t zt_f16x2, svfloat32x2_t zt_f32x2, + svfloat64x2_t zt_f64x2) __arm_streaming __arm_out ("zt0") +{ + struct Foo { uint64_t val; } foo = {0}; + svwrite_lane_zt_u8 (foo, zt_u8, 0); /* { dg-error {incompatible type for argument 1 of 'svwrite_lane_zt_u8'} } */ + svwrite_lane_zt_s8 (foo, zt_s8, 0); /* { dg-error {incompatible type for argument 1 of 'svwrite_lane_zt_s8'} } */ + svwrite_lane_zt_u16 (foo, zt_u16, 0); /* { dg-error {incompatible type for argument 1 of 'svwrite_lane_zt_u16'} } */ + svwrite_lane_zt_s16 (foo, zt_s16, 0); /* { dg-error {incompatible type for argument 1 of 'svwrite_lane_zt_s16'} } */ + svwrite_lane_zt_u32 (foo, zt_u32, 0); /* { dg-error {incompatible type for argument 1 of 'svwrite_lane_zt_u32'} } */ + svwrite_lane_zt_s32 (foo, zt_s32, 0); /* { dg-error {incompatible type for argument 1 of 'svwrite_lane_zt_s32'} } */ + svwrite_lane_zt_u64 (foo, zt_u64, 0); /* { dg-error {incompatible type for argument 1 of 'svwrite_lane_zt_u64'} } */ + svwrite_lane_zt_s64 (foo, zt_s64, 0); /* { dg-error {incompatible type for argument 1 of 'svwrite_lane_zt_s64'} } */ + svwrite_lane_zt_bf16 (foo, zt_bf16, 0); /* { dg-error {incompatible type for argument 1 of 'svwrite_lane_zt_bf16'} } */ + svwrite_lane_zt_f16 (foo, zt_f16, 0); /* { dg-error {incompatible type for argument 1 of 'svwrite_lane_zt_f16'} } */ + svwrite_lane_zt_f32 (foo, zt_f32, 0); /* { dg-error {incompatible type for argument 1 of 'svwrite_lane_zt_f32'} } */ + svwrite_lane_zt_f64 (foo, zt_f64, 0); /* { dg-error {incompatible type for argument 1 of 'svwrite_lane_zt_f64'} } */ + + svwrite_lane_zt_u8 (0, zt_s8, 0); /* { dg-error {incompatible type for argument 2 of 'svwrite_lane_zt_u8'} } */ + svwrite_lane_zt_s8 (0, zt_u8, 0); /* { dg-error {incompatible type for argument 2 of 'svwrite_lane_zt_s8'} } */ + svwrite_lane_zt_u16 (0, zt_s16, 0); /* { dg-error {incompatible type for argument 2 of 'svwrite_lane_zt_u16'} } */ + svwrite_lane_zt_s16 (0, zt_u16, 0); /* { dg-error {incompatible type for argument 2 of 'svwrite_lane_zt_s16'} } */ + svwrite_lane_zt_u32 (0, zt_s32, 0); /* { dg-error {incompatible type for argument 2 of 'svwrite_lane_zt_u32'} } */ + svwrite_lane_zt_s32 (0, zt_u32, 0); /* { dg-error {incompatible type for argument 2 of 'svwrite_lane_zt_s32'} } */ + svwrite_lane_zt_u64 (0, zt_s64, 0); /* { dg-error {incompatible type for argument 2 of 'svwrite_lane_zt_u64'} } */ + svwrite_lane_zt_s64 (0, zt_u64, 0); /* { dg-error {incompatible type for argument 2 of 'svwrite_lane_zt_s64'} } */ + svwrite_lane_zt_bf16 (0, zt_f16, 0); /* { dg-error {incompatible type for argument 2 of 'svwrite_lane_zt_bf16'} } */ + svwrite_lane_zt_f16 (0, zt_bf16, 0); /* { dg-error {incompatible type for argument 2 of 'svwrite_lane_zt_f16'} } */ + svwrite_lane_zt_f32 (0, zt_f64, 0); /* { dg-error {incompatible type for argument 2 of 'svwrite_lane_zt_f32'} } */ + svwrite_lane_zt_f64 (0, zt_f32, 0); /* { dg-error {incompatible type for argument 2 of 'svwrite_lane_zt_f64'} } */ + + svwrite_lane_zt_u8 (0, zt_u8x2, 0); /* { dg-error {incompatible type for argument 2 of 'svwrite_lane_zt_u8'} } */ + svwrite_lane_zt_s8 (0, zt_s8x2, 0); /* { dg-error {incompatible type for argument 2 of 'svwrite_lane_zt_s8'} } */ + svwrite_lane_zt_u16 (0, zt_u16x2, 0); /* { dg-error {incompatible type for argument 2 of 'svwrite_lane_zt_u16'} } */ + svwrite_lane_zt_s16 (0, zt_s16x2, 0); /* { dg-error {incompatible type for argument 2 of 'svwrite_lane_zt_s16'} } */ + svwrite_lane_zt_u32 (0, zt_u32x2, 0); /* { dg-error {incompatible type for argument 2 of 'svwrite_lane_zt_u32'} } */ + svwrite_lane_zt_s32 (0, zt_s32x2, 0); /* { dg-error {incompatible type for argument 2 of 'svwrite_lane_zt_s32'} } */ + svwrite_lane_zt_u64 (0, zt_u64x2, 0); /* { dg-error {incompatible type for argument 2 of 'svwrite_lane_zt_u64'} } */ + svwrite_lane_zt_s64 (0, zt_s64x2, 0); /* { dg-error {incompatible type for argument 2 of 'svwrite_lane_zt_s64'} } */ + svwrite_lane_zt_bf16 (0, zt_bf16x2, 0); /* { dg-error {incompatible type for argument 2 of 'svwrite_lane_zt_bf16'} } */ + svwrite_lane_zt_f16 (0, zt_f16x2, 0); /* { dg-error {incompatible type for argument 2 of 'svwrite_lane_zt_f16'} } */ + svwrite_lane_zt_f32 (0, zt_f32x2, 0); /* { dg-error {incompatible type for argument 2 of 'svwrite_lane_zt_f32'} } */ + svwrite_lane_zt_f64 (0, zt_f64x2, 0); /* { dg-error {incompatible type for argument 2 of 'svwrite_lane_zt_f64'} } */ + + svwrite_lane_zt_u8 (0, zt_u8, foo); /* { dg-error {incompatible type for argument 3 of 'svwrite_lane_zt_u8'} } */ + svwrite_lane_zt_s8 (0, zt_s8, foo); /* { dg-error {incompatible type for argument 3 of 'svwrite_lane_zt_s8'} } */ + svwrite_lane_zt_u16 (0, zt_u16, foo); /* { dg-error {incompatible type for argument 3 of 'svwrite_lane_zt_u16'} } */ + svwrite_lane_zt_s16 (0, zt_s16, foo); /* { dg-error {incompatible type for argument 3 of 'svwrite_lane_zt_s16'} } */ + svwrite_lane_zt_u32 (0, zt_u32, foo); /* { dg-error {incompatible type for argument 3 of 'svwrite_lane_zt_u32'} } */ + svwrite_lane_zt_s32 (0, zt_s32, foo); /* { dg-error {incompatible type for argument 3 of 'svwrite_lane_zt_s32'} } */ + svwrite_lane_zt_u64 (0, zt_u64, foo); /* { dg-error {incompatible type for argument 3 of 'svwrite_lane_zt_u64'} } */ + svwrite_lane_zt_s64 (0, zt_s64, foo); /* { dg-error {incompatible type for argument 3 of 'svwrite_lane_zt_s64'} } */ + svwrite_lane_zt_bf16 (0, zt_bf16, foo); /* { dg-error {incompatible type for argument 3 of 'svwrite_lane_zt_bf16'} } */ + svwrite_lane_zt_f16 (0, zt_f16, foo); /* { dg-error {incompatible type for argument 3 of 'svwrite_lane_zt_f16'} } */ + svwrite_lane_zt_f32 (0, zt_f32, foo); /* { dg-error {incompatible type for argument 3 of 'svwrite_lane_zt_f32'} } */ + svwrite_lane_zt_f64 (0, zt_f64, foo); /* { dg-error {incompatible type for argument 3 of 'svwrite_lane_zt_f64'} } */ +} + +void +test_svwrite_zt_inferred_error_arg_type_mismatch ( + svuint8_t zt_u8, svint8_t zt_s8, svuint16_t zt_u16, svint16_t zt_s16, + svuint32_t zt_u32, svint32_t zt_s32, svuint64_t zt_u64, svint64_t zt_s64, + svbfloat16_t zt_bf16, svfloat16_t zt_f16, svfloat32_t zt_f32, + svfloat64_t zt_f64, svuint8x2_t zt_u8x2) __arm_streaming __arm_out ("zt0") +{ + struct Foo { uint64_t val; } foo = {0}; + svwrite_lane_zt (foo, zt_u8, 0); /* { dg-error {passing 'struct Foo' to argument 1 of 'svwrite_lane_zt', which expects 'uint64_t'} } */ + svwrite_lane_zt (0, zt_u8x2, 0); /* { dg-error {passing 'svuint8x2_t' to argument 2 of 'svwrite_lane_zt', which expects a single SVE vector rather than a tuple} } */ + svwrite_lane_zt (0, zt_u8, foo); /* { dg-error {passing 'struct Foo' to argument 3 of 'svwrite_lane_zt', which expects 'uint64_t'} } */ +} + +void +test_svwrite_lane_zt_explicit_error_zt0_not_immediate ( + uint64_t zt0, svuint8_t zt_u8, svint8_t zt_s8, svuint16_t zt_u16, + svint16_t zt_s16, svuint32_t zt_u32, svint32_t zt_s32, svuint64_t zt_u64, + svint64_t zt_s64, svbfloat16_t zt_bf16, svfloat16_t zt_f16, + svfloat32_t zt_f32, svfloat64_t zt_f64) __arm_streaming __arm_out ("zt0") +{ + svwrite_lane_zt_u8 (zt0, zt_u8, 0); /* { dg-error {argument 1 of 'svwrite_lane_zt_u8' must be an integer constant expression} } */ + svwrite_lane_zt_s8 (zt0, zt_s8, 0); /* { dg-error {argument 1 of 'svwrite_lane_zt_s8' must be an integer constant expression} } */ + svwrite_lane_zt_u16 (zt0, zt_u16, 0); /* { dg-error {argument 1 of 'svwrite_lane_zt_u16' must be an integer constant expression} } */ + svwrite_lane_zt_s16 (zt0, zt_s16, 0); /* { dg-error {argument 1 of 'svwrite_lane_zt_s16' must be an integer constant expression} } */ + svwrite_lane_zt_u32 (zt0, zt_u32, 0); /* { dg-error {argument 1 of 'svwrite_lane_zt_u32' must be an integer constant expression} } */ + svwrite_lane_zt_s32 (zt0, zt_s32, 0); /* { dg-error {argument 1 of 'svwrite_lane_zt_s32' must be an integer constant expression} } */ + svwrite_lane_zt_u64 (zt0, zt_u64, 0); /* { dg-error {argument 1 of 'svwrite_lane_zt_u64' must be an integer constant expression} } */ + svwrite_lane_zt_s64 (zt0, zt_s64, 0); /* { dg-error {argument 1 of 'svwrite_lane_zt_s64' must be an integer constant expression} } */ + svwrite_lane_zt_bf16 (zt0, zt_bf16, 0); /* { dg-error {argument 1 of 'svwrite_lane_zt_bf16' must be an integer constant expression} } */ + svwrite_lane_zt_f16 (zt0, zt_f16, 0); /* { dg-error {argument 1 of 'svwrite_lane_zt_f16' must be an integer constant expression} } */ + svwrite_lane_zt_f32 (zt0, zt_f32, 0); /* { dg-error {argument 1 of 'svwrite_lane_zt_f32' must be an integer constant expression} } */ + svwrite_lane_zt_f64 (zt0, zt_f64, 0); /* { dg-error {argument 1 of 'svwrite_lane_zt_f64' must be an integer constant expression} } */ +} + +void +test_svwrite_lane_zt_inferred_error_zt0_not_immediate ( + uint64_t zt0, svuint8_t zt_u8, svint8_t zt_s8, svuint16_t zt_u16, + svint16_t zt_s16, svuint32_t zt_u32, svint32_t zt_s32, svuint64_t zt_u64, + svint64_t zt_s64, svbfloat16_t zt_bf16, svfloat16_t zt_f16, + svfloat32_t zt_f32, svfloat64_t zt_f64) __arm_streaming __arm_out ("zt0") +{ + svwrite_lane_zt (zt0, zt_u8, 0); /* { dg-error {argument 1 of 'svwrite_lane_zt' must be an integer constant expression} } */ + svwrite_lane_zt (zt0, zt_s8, 0); /* { dg-error {argument 1 of 'svwrite_lane_zt' must be an integer constant expression} } */ + svwrite_lane_zt (zt0, zt_u16, 0); /* { dg-error {argument 1 of 'svwrite_lane_zt' must be an integer constant expression} } */ + svwrite_lane_zt (zt0, zt_s16, 0); /* { dg-error {argument 1 of 'svwrite_lane_zt' must be an integer constant expression} } */ + svwrite_lane_zt (zt0, zt_u32, 0); /* { dg-error {argument 1 of 'svwrite_lane_zt' must be an integer constant expression} } */ + svwrite_lane_zt (zt0, zt_s32, 0); /* { dg-error {argument 1 of 'svwrite_lane_zt' must be an integer constant expression} } */ + svwrite_lane_zt (zt0, zt_u64, 0); /* { dg-error {argument 1 of 'svwrite_lane_zt' must be an integer constant expression} } */ + svwrite_lane_zt (zt0, zt_s64, 0); /* { dg-error {argument 1 of 'svwrite_lane_zt' must be an integer constant expression} } */ + svwrite_lane_zt (zt0, zt_bf16, 0); /* { dg-error {argument 1 of 'svwrite_lane_zt' must be an integer constant expression} } */ + svwrite_lane_zt (zt0, zt_f16, 0); /* { dg-error {argument 1 of 'svwrite_lane_zt' must be an integer constant expression} } */ + svwrite_lane_zt (zt0, zt_f32, 0); /* { dg-error {argument 1 of 'svwrite_lane_zt' must be an integer constant expression} } */ + svwrite_lane_zt (zt0, zt_f64, 0); /* { dg-error {argument 1 of 'svwrite_lane_zt' must be an integer constant expression} } */ +} + +void +test_svwrite_lane_zt_explicit_error_idx_not_immediate ( + uint64_t idx, svuint8_t zt_u8, svint8_t zt_s8, svuint16_t zt_u16, + svint16_t zt_s16, svuint32_t zt_u32, svint32_t zt_s32, svuint64_t zt_u64, + svint64_t zt_s64, svbfloat16_t zt_bf16, svfloat16_t zt_f16, + svfloat32_t zt_f32, svfloat64_t zt_f64) __arm_streaming __arm_out ("zt0") +{ + svwrite_lane_zt_u8 (0, zt_u8, idx); /* { dg-error {argument 3 of 'svwrite_lane_zt_u8' must be an integer constant expression} } */ + svwrite_lane_zt_s8 (0, zt_s8, idx); /* { dg-error {argument 3 of 'svwrite_lane_zt_s8' must be an integer constant expression} } */ + svwrite_lane_zt_u16 (0, zt_u16, idx); /* { dg-error {argument 3 of 'svwrite_lane_zt_u16' must be an integer constant expression} } */ + svwrite_lane_zt_s16 (0, zt_s16, idx); /* { dg-error {argument 3 of 'svwrite_lane_zt_s16' must be an integer constant expression} } */ + svwrite_lane_zt_u32 (0, zt_u32, idx); /* { dg-error {argument 3 of 'svwrite_lane_zt_u32' must be an integer constant expression} } */ + svwrite_lane_zt_s32 (0, zt_s32, idx); /* { dg-error {argument 3 of 'svwrite_lane_zt_s32' must be an integer constant expression} } */ + svwrite_lane_zt_u64 (0, zt_u64, idx); /* { dg-error {argument 3 of 'svwrite_lane_zt_u64' must be an integer constant expression} } */ + svwrite_lane_zt_s64 (0, zt_s64, idx); /* { dg-error {argument 3 of 'svwrite_lane_zt_s64' must be an integer constant expression} } */ + svwrite_lane_zt_bf16 (0, zt_bf16, idx); /* { dg-error {argument 3 of 'svwrite_lane_zt_bf16' must be an integer constant expression} } */ + svwrite_lane_zt_f16 (0, zt_f16, idx); /* { dg-error {argument 3 of 'svwrite_lane_zt_f16' must be an integer constant expression} } */ + svwrite_lane_zt_f32 (0, zt_f32, idx); /* { dg-error {argument 3 of 'svwrite_lane_zt_f32' must be an integer constant expression} } */ + svwrite_lane_zt_f64 (0, zt_f64, idx); /* { dg-error {argument 3 of 'svwrite_lane_zt_f64' must be an integer constant expression} } */ +} + +void +test_svwrite_lane_zt_inferred_error_idx_not_immediate ( + uint64_t idx, svuint8_t zt_u8, svint8_t zt_s8, svuint16_t zt_u16, + svint16_t zt_s16, svuint32_t zt_u32, svint32_t zt_s32, svuint64_t zt_u64, + svint64_t zt_s64, svbfloat16_t zt_bf16, svfloat16_t zt_f16, + svfloat32_t zt_f32, svfloat64_t zt_f64) __arm_streaming __arm_out ("zt0") +{ + svwrite_lane_zt (0, zt_u8, idx); /* { dg-error {argument 3 of 'svwrite_lane_zt' must be an integer constant expression} } */ + svwrite_lane_zt (0, zt_s8, idx); /* { dg-error {argument 3 of 'svwrite_lane_zt' must be an integer constant expression} } */ + svwrite_lane_zt (0, zt_u16, idx); /* { dg-error {argument 3 of 'svwrite_lane_zt' must be an integer constant expression} } */ + svwrite_lane_zt (0, zt_s16, idx); /* { dg-error {argument 3 of 'svwrite_lane_zt' must be an integer constant expression} } */ + svwrite_lane_zt (0, zt_u32, idx); /* { dg-error {argument 3 of 'svwrite_lane_zt' must be an integer constant expression} } */ + svwrite_lane_zt (0, zt_s32, idx); /* { dg-error {argument 3 of 'svwrite_lane_zt' must be an integer constant expression} } */ + svwrite_lane_zt (0, zt_u64, idx); /* { dg-error {argument 3 of 'svwrite_lane_zt' must be an integer constant expression} } */ + svwrite_lane_zt (0, zt_s64, idx); /* { dg-error {argument 3 of 'svwrite_lane_zt' must be an integer constant expression} } */ + svwrite_lane_zt (0, zt_bf16, idx); /* { dg-error {argument 3 of 'svwrite_lane_zt' must be an integer constant expression} } */ + svwrite_lane_zt (0, zt_f16, idx); /* { dg-error {argument 3 of 'svwrite_lane_zt' must be an integer constant expression} } */ + svwrite_lane_zt (0, zt_f32, idx); /* { dg-error {argument 3 of 'svwrite_lane_zt' must be an integer constant expression} } */ + svwrite_lane_zt (0, zt_f64, idx); /* { dg-error {argument 3 of 'svwrite_lane_zt' must be an integer constant expression} } */ +} + +void +test_svwrite_lane_zt_explicit_error_idx_not_in_range ( + uint64_t idx, svuint8_t zt_u8, svint8_t zt_s8, svuint16_t zt_u16, + svint16_t zt_s16, svuint32_t zt_u32, svint32_t zt_s32, svuint64_t zt_u64, + svint64_t zt_s64, svbfloat16_t zt_bf16, svfloat16_t zt_f16, + svfloat32_t zt_f32, svfloat64_t zt_f64) __arm_streaming __arm_out ("zt0") +{ + svwrite_lane_zt_u8 (0, zt_u8, 4); /* { dg-error {passing 4 to argument 3 of 'svwrite_lane_zt_u8', which expects a value in the range \[0, 3\]} } */ + svwrite_lane_zt_s8 (0, zt_s8, 4); /* { dg-error {passing 4 to argument 3 of 'svwrite_lane_zt_s8', which expects a value in the range \[0, 3\]} } */ + svwrite_lane_zt_u16 (0, zt_u16, 4); /* { dg-error {passing 4 to argument 3 of 'svwrite_lane_zt_u16', which expects a value in the range \[0, 3\]} } */ + svwrite_lane_zt_s16 (0, zt_s16, 4); /* { dg-error {passing 4 to argument 3 of 'svwrite_lane_zt_s16', which expects a value in the range \[0, 3\]} } */ + svwrite_lane_zt_u32 (0, zt_u32, 4); /* { dg-error {passing 4 to argument 3 of 'svwrite_lane_zt_u32', which expects a value in the range \[0, 3\]} } */ + svwrite_lane_zt_s32 (0, zt_s32, 4); /* { dg-error {passing 4 to argument 3 of 'svwrite_lane_zt_s32', which expects a value in the range \[0, 3\]} } */ + svwrite_lane_zt_u64 (0, zt_u64, 4); /* { dg-error {passing 4 to argument 3 of 'svwrite_lane_zt_u64', which expects a value in the range \[0, 3\]} } */ + svwrite_lane_zt_s64 (0, zt_s64, 4); /* { dg-error {passing 4 to argument 3 of 'svwrite_lane_zt_s64', which expects a value in the range \[0, 3\]} } */ + svwrite_lane_zt_bf16 (0, zt_bf16, 4); /* { dg-error {passing 4 to argument 3 of 'svwrite_lane_zt_bf16', which expects a value in the range \[0, 3\]} } */ + svwrite_lane_zt_f16 (0, zt_f16, 4); /* { dg-error {passing 4 to argument 3 of 'svwrite_lane_zt_f16', which expects a value in the range \[0, 3\]} } */ + svwrite_lane_zt_f32 (0, zt_f32, 4); /* { dg-error {passing 4 to argument 3 of 'svwrite_lane_zt_f32', which expects a value in the range \[0, 3\]} } */ + svwrite_lane_zt_f64 (0, zt_f64, 4); /* { dg-error {passing 4 to argument 3 of 'svwrite_lane_zt_f64', which expects a value in the range \[0, 3\]} } */ +} + +void +test_svwrite_lane_zt_inferred_error_idx_not_in_range ( + uint64_t idx, svuint8_t zt_u8, svint8_t zt_s8, svuint16_t zt_u16, + svint16_t zt_s16, svuint32_t zt_u32, svint32_t zt_s32, svuint64_t zt_u64, + svint64_t zt_s64, svbfloat16_t zt_bf16, svfloat16_t zt_f16, + svfloat32_t zt_f32, svfloat64_t zt_f64) __arm_streaming __arm_out ("zt0") +{ + svwrite_lane_zt (0, zt_u8, 4); /* { dg-error {passing 4 to argument 3 of 'svwrite_lane_zt', which expects a value in the range \[0, 3\]} } */ + svwrite_lane_zt (0, zt_s8, 4); /* { dg-error {passing 4 to argument 3 of 'svwrite_lane_zt', which expects a value in the range \[0, 3\]} } */ + svwrite_lane_zt (0, zt_u16, 4); /* { dg-error {passing 4 to argument 3 of 'svwrite_lane_zt', which expects a value in the range \[0, 3\]} } */ + svwrite_lane_zt (0, zt_s16, 4); /* { dg-error {passing 4 to argument 3 of 'svwrite_lane_zt', which expects a value in the range \[0, 3\]} } */ + svwrite_lane_zt (0, zt_u32, 4); /* { dg-error {passing 4 to argument 3 of 'svwrite_lane_zt', which expects a value in the range \[0, 3\]} } */ + svwrite_lane_zt (0, zt_s32, 4); /* { dg-error {passing 4 to argument 3 of 'svwrite_lane_zt', which expects a value in the range \[0, 3\]} } */ + svwrite_lane_zt (0, zt_u64, 4); /* { dg-error {passing 4 to argument 3 of 'svwrite_lane_zt', which expects a value in the range \[0, 3\]} } */ + svwrite_lane_zt (0, zt_s64, 4); /* { dg-error {passing 4 to argument 3 of 'svwrite_lane_zt', which expects a value in the range \[0, 3\]} } */ + svwrite_lane_zt (0, zt_bf16, 4); /* { dg-error {passing 4 to argument 3 of 'svwrite_lane_zt', which expects a value in the range \[0, 3\]} } */ + svwrite_lane_zt (0, zt_f16, 4); /* { dg-error {passing 4 to argument 3 of 'svwrite_lane_zt', which expects a value in the range \[0, 3\]} } */ + svwrite_lane_zt (0, zt_f32, 4); /* { dg-error {passing 4 to argument 3 of 'svwrite_lane_zt', which expects a value in the range \[0, 3\]} } */ + svwrite_lane_zt (0, zt_f64, 4); /* { dg-error {passing 4 to argument 3 of 'svwrite_lane_zt', which expects a value in the range \[0, 3\]} } */ +} + +#pragma GCC reset_options +#pragma GCC target("+sve2,+sme2") +void +test_svwrite_lane_zt_feature_not_enabled (svuint8_t zt_u8) __arm_streaming __arm_out ("zt0") +{ + // GCC only complains for the first such instance, so only one test here. + svwrite_lane_zt (0, zt_u8, 0); /* { dg-error {ACLE function 'svwrite_lane_zt_u8' requires ISA extension 'sme-lutv2'} } */ +} diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/svwrite_zt_1.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/svwrite_zt_1.c new file mode 100644 index 000000000000..6c839a429ae4 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/svwrite_zt_1.c @@ -0,0 +1,351 @@ +/* { dg-options "-std=c23" } */ +/* { dg-do compile } */ + +/* MOVT (vector to table) + Variants are also available for: + [_s8], [_u16], [_s16], [_u32], [_s32], [_u64], [_s64] + [_bf16], [_f16], [_f32], [_f64] + void svwrite_zt[_u8] (uint64_t zt0, svuint8_t zt, uint64_t idx) + __arm_streaming __arm_out ("zt0"); */ + +#pragma GCC target "+sve2,+sme-lutv2" +static_assert (__ARM_FEATURE_SME_LUTv2 == 1); +#include + +void +test_svwrite_zt_explicit_ok ( + svuint8_t zt_u8, svint8_t zt_s8, svuint16_t zt_u16, svint16_t zt_s16, + svuint32_t zt_u32, svint32_t zt_s32, svuint64_t zt_u64, svint64_t zt_s64, + svbfloat16_t zt_bf16, svfloat16_t zt_f16, svfloat32_t zt_f32, + svfloat64_t zt_f64) __arm_streaming __arm_out ("zt0") +{ + svwrite_zt_u8 (0, zt_u8); + svwrite_zt_s8 (0, zt_s8); + svwrite_zt_u16 (0, zt_u16); + svwrite_zt_s16 (0, zt_s16); + svwrite_zt_u32 (0, zt_u32); + svwrite_zt_s32 (0, zt_s32); + svwrite_zt_u64 (0, zt_u64); + svwrite_zt_s64 (0, zt_s64); + svwrite_zt_bf16 (0, zt_bf16); + svwrite_zt_f16 (0, zt_f16); + svwrite_zt_f32 (0, zt_f32); + svwrite_zt_f64 (0, zt_f64); +} + +void +test_svwrite_zt_inferred_ok ( + svuint8_t zt_u8, svint8_t zt_s8, svuint16_t zt_u16, svint16_t zt_s16, + svuint32_t zt_u32, svint32_t zt_s32, svuint64_t zt_u64, svint64_t zt_s64, + svbfloat16_t zt_bf16, svfloat16_t zt_f16, svfloat32_t zt_f32, + svfloat64_t zt_f64) __arm_streaming __arm_out ("zt0") +{ + svwrite_zt (0, zt_u8); + svwrite_zt (0, zt_s8); + svwrite_zt (0, zt_u16); + svwrite_zt (0, zt_s16); + svwrite_zt (0, zt_u32); + svwrite_zt (0, zt_s32); + svwrite_zt (0, zt_u64); + svwrite_zt (0, zt_s64); + svwrite_zt (0, zt_bf16); + svwrite_zt (0, zt_f16); + svwrite_zt (0, zt_f32); + svwrite_zt (0, zt_f64); +} + +void +test_svwrite_zt_explicit_error_not_streaming ( + svuint8_t zt_u8, svint8_t zt_s8, svuint16_t zt_u16, svint16_t zt_s16, + svuint32_t zt_u32, svint32_t zt_s32, svuint64_t zt_u64, svint64_t zt_s64, + svbfloat16_t zt_bf16, svfloat16_t zt_f16, svfloat32_t zt_f32, + svfloat64_t zt_f64) +{ + svwrite_zt_u8 (0, zt_u8); /* { dg-error {ACLE function 'svwrite_zt_u8' can only be called when SME streaming mode is enabled} } */ + svwrite_zt_s8 (0, zt_s8); /* { dg-error {ACLE function 'svwrite_zt_s8' can only be called when SME streaming mode is enabled} } */ + svwrite_zt_u16 (0, zt_u16); /* { dg-error {ACLE function 'svwrite_zt_u16' can only be called when SME streaming mode is enabled} } */ + svwrite_zt_s16 (0, zt_s16); /* { dg-error {ACLE function 'svwrite_zt_s16' can only be called when SME streaming mode is enabled} } */ + svwrite_zt_u32 (0, zt_u32); /* { dg-error {ACLE function 'svwrite_zt_u32' can only be called when SME streaming mode is enabled} } */ + svwrite_zt_s32 (0, zt_s32); /* { dg-error {ACLE function 'svwrite_zt_s32' can only be called when SME streaming mode is enabled} } */ + svwrite_zt_u64 (0, zt_u64); /* { dg-error {ACLE function 'svwrite_zt_u64' can only be called when SME streaming mode is enabled} } */ + svwrite_zt_s64 (0, zt_s64); /* { dg-error {ACLE function 'svwrite_zt_s64' can only be called when SME streaming mode is enabled} } */ + svwrite_zt_bf16 (0, zt_bf16); /* { dg-error {ACLE function 'svwrite_zt_bf16' can only be called when SME streaming mode is enabled} } */ + svwrite_zt_f16 (0, zt_f16); /* { dg-error {ACLE function 'svwrite_zt_f16' can only be called when SME streaming mode is enabled} } */ + svwrite_zt_f32 (0, zt_f32); /* { dg-error {ACLE function 'svwrite_zt_f32' can only be called when SME streaming mode is enabled} } */ + svwrite_zt_f64 (0, zt_f64); /* { dg-error {ACLE function 'svwrite_zt_f64' can only be called when SME streaming mode is enabled} } */ +} + +void +test_svwrite_zt_inferred_error_not_streaming ( + svuint8_t zt_u8, svint8_t zt_s8, svuint16_t zt_u16, svint16_t zt_s16, + svuint32_t zt_u32, svint32_t zt_s32, svuint64_t zt_u64, svint64_t zt_s64, + svbfloat16_t zt_bf16, svfloat16_t zt_f16, svfloat32_t zt_f32, + svfloat64_t zt_f64) +{ + svwrite_zt (0, zt_u8); /* { dg-error {ACLE function 'svwrite_zt_u8' can only be called when SME streaming mode is enabled} } */ + svwrite_zt (0, zt_s8); /* { dg-error {ACLE function 'svwrite_zt_s8' can only be called when SME streaming mode is enabled} } */ + svwrite_zt (0, zt_u16); /* { dg-error {ACLE function 'svwrite_zt_u16' can only be called when SME streaming mode is enabled} } */ + svwrite_zt (0, zt_s16); /* { dg-error {ACLE function 'svwrite_zt_s16' can only be called when SME streaming mode is enabled} } */ + svwrite_zt (0, zt_u32); /* { dg-error {ACLE function 'svwrite_zt_u32' can only be called when SME streaming mode is enabled} } */ + svwrite_zt (0, zt_s32); /* { dg-error {ACLE function 'svwrite_zt_s32' can only be called when SME streaming mode is enabled} } */ + svwrite_zt (0, zt_u64); /* { dg-error {ACLE function 'svwrite_zt_u64' can only be called when SME streaming mode is enabled} } */ + svwrite_zt (0, zt_s64); /* { dg-error {ACLE function 'svwrite_zt_s64' can only be called when SME streaming mode is enabled} } */ + svwrite_zt (0, zt_bf16); /* { dg-error {ACLE function 'svwrite_zt_bf16' can only be called when SME streaming mode is enabled} } */ + svwrite_zt (0, zt_f16); /* { dg-error {ACLE function 'svwrite_zt_f16' can only be called when SME streaming mode is enabled} } */ + svwrite_zt (0, zt_f32); /* { dg-error {ACLE function 'svwrite_zt_f32' can only be called when SME streaming mode is enabled} } */ + svwrite_zt (0, zt_f64); /* { dg-error {ACLE function 'svwrite_zt_f64' can only be called when SME streaming mode is enabled} } */ +} + +void +test_svwrite_zt_explicit_error_arg_count_mismatch ( + svuint8_t zt_u8, svint8_t zt_s8, svuint16_t zt_u16, svint16_t zt_s16, + svuint32_t zt_u32, svint32_t zt_s32, svuint64_t zt_u64, svint64_t zt_s64, + svbfloat16_t zt_bf16, svfloat16_t zt_f16, svfloat32_t zt_f32, + svfloat64_t zt_f64) __arm_streaming __arm_out ("zt0") +{ + svwrite_zt_u8 (); /* { dg-error {too few arguments to function 'svwrite_zt_u8'; expected 2, have 0} } */ + svwrite_zt_s8 (); /* { dg-error {too few arguments to function 'svwrite_zt_s8'; expected 2, have 0} } */ + svwrite_zt_u16 (); /* { dg-error {too few arguments to function 'svwrite_zt_u16'; expected 2, have 0} } */ + svwrite_zt_s16 (); /* { dg-error {too few arguments to function 'svwrite_zt_s16'; expected 2, have 0} } */ + svwrite_zt_u32 (); /* { dg-error {too few arguments to function 'svwrite_zt_u32'; expected 2, have 0} } */ + svwrite_zt_s32 (); /* { dg-error {too few arguments to function 'svwrite_zt_s32'; expected 2, have 0} } */ + svwrite_zt_u64 (); /* { dg-error {too few arguments to function 'svwrite_zt_u64'; expected 2, have 0} } */ + svwrite_zt_s64 (); /* { dg-error {too few arguments to function 'svwrite_zt_s64'; expected 2, have 0} } */ + svwrite_zt_bf16 (); /* { dg-error {too few arguments to function 'svwrite_zt_bf16'; expected 2, have 0} } */ + svwrite_zt_f16 (); /* { dg-error {too few arguments to function 'svwrite_zt_f16'; expected 2, have 0} } */ + svwrite_zt_f32 (); /* { dg-error {too few arguments to function 'svwrite_zt_f32'; expected 2, have 0} } */ + svwrite_zt_f64 (); /* { dg-error {too few arguments to function 'svwrite_zt_f64'; expected 2, have 0} } */ + + svwrite_zt_u8 (0); /* { dg-error {too few arguments to function 'svwrite_zt_u8'; expected 2, have 1} } */ + svwrite_zt_s8 (0); /* { dg-error {too few arguments to function 'svwrite_zt_s8'; expected 2, have 1} } */ + svwrite_zt_u16 (0); /* { dg-error {too few arguments to function 'svwrite_zt_u16'; expected 2, have 1} } */ + svwrite_zt_s16 (0); /* { dg-error {too few arguments to function 'svwrite_zt_s16'; expected 2, have 1} } */ + svwrite_zt_u32 (0); /* { dg-error {too few arguments to function 'svwrite_zt_u32'; expected 2, have 1} } */ + svwrite_zt_s32 (0); /* { dg-error {too few arguments to function 'svwrite_zt_s32'; expected 2, have 1} } */ + svwrite_zt_u64 (0); /* { dg-error {too few arguments to function 'svwrite_zt_u64'; expected 2, have 1} } */ + svwrite_zt_s64 (0); /* { dg-error {too few arguments to function 'svwrite_zt_s64'; expected 2, have 1} } */ + svwrite_zt_bf16 (0); /* { dg-error {too few arguments to function 'svwrite_zt_bf16'; expected 2, have 1} } */ + svwrite_zt_f16 (0); /* { dg-error {too few arguments to function 'svwrite_zt_f16'; expected 2, have 1} } */ + svwrite_zt_f32 (0); /* { dg-error {too few arguments to function 'svwrite_zt_f32'; expected 2, have 1} } */ + svwrite_zt_f64 (0); /* { dg-error {too few arguments to function 'svwrite_zt_f64'; expected 2, have 1} } */ + + svwrite_zt_u8 (0, zt_u8, 0); /* { dg-error {too many arguments to function 'svwrite_zt_u8'; expected 2, have 3} } */ + svwrite_zt_s8 (0, zt_s8, 0); /* { dg-error {too many arguments to function 'svwrite_zt_s8'; expected 2, have 3} } */ + svwrite_zt_u16 (0, zt_u16, 0); /* { dg-error {too many arguments to function 'svwrite_zt_u16'; expected 2, have 3} } */ + svwrite_zt_s16 (0, zt_s16, 0); /* { dg-error {too many arguments to function 'svwrite_zt_s16'; expected 2, have 3} } */ + svwrite_zt_u32 (0, zt_u32, 0); /* { dg-error {too many arguments to function 'svwrite_zt_u32'; expected 2, have 3} } */ + svwrite_zt_s32 (0, zt_s32, 0); /* { dg-error {too many arguments to function 'svwrite_zt_s32'; expected 2, have 3} } */ + svwrite_zt_u64 (0, zt_u64, 0); /* { dg-error {too many arguments to function 'svwrite_zt_u64'; expected 2, have 3} } */ + svwrite_zt_s64 (0, zt_s64, 0); /* { dg-error {too many arguments to function 'svwrite_zt_s64'; expected 2, have 3} } */ + svwrite_zt_bf16 (0, zt_bf16, 0); /* { dg-error {too many arguments to function 'svwrite_zt_bf16'; expected 2, have 3} } */ + svwrite_zt_f16 (0, zt_f16, 0); /* { dg-error {too many arguments to function 'svwrite_zt_f16'; expected 2, have 3} } */ + svwrite_zt_f32 (0, zt_f32, 0); /* { dg-error {too many arguments to function 'svwrite_zt_f32'; expected 2, have 3} } */ + svwrite_zt_f64 (0, zt_f64, 0); /* { dg-error {too many arguments to function 'svwrite_zt_f64'; expected 2, have 3} } */ +} + +void +test_svwrite_zt_inferred_error_arg_count_mismatch ( + svuint8_t zt_u8, svint8_t zt_s8, svuint16_t zt_u16, svint16_t zt_s16, + svuint32_t zt_u32, svint32_t zt_s32, svuint64_t zt_u64, svint64_t zt_s64, + svbfloat16_t zt_bf16, svfloat16_t zt_f16, svfloat32_t zt_f32, + svfloat64_t zt_f64) __arm_streaming __arm_out ("zt0") +{ + svwrite_zt (); /* { dg-error {too few arguments to function 'svwrite_zt'} } */ + svwrite_zt (0); /* { dg-error {too few arguments to function 'svwrite_zt'} } */ + + svwrite_zt (0, zt_u8, 0); /* { dg-error {too many arguments to function 'svwrite_zt'} } */ + svwrite_zt (0, zt_s8, 0); /* { dg-error {too many arguments to function 'svwrite_zt'} } */ + svwrite_zt (0, zt_u16, 0); /* { dg-error {too many arguments to function 'svwrite_zt'} } */ + svwrite_zt (0, zt_s16, 0); /* { dg-error {too many arguments to function 'svwrite_zt'} } */ + svwrite_zt (0, zt_u32, 0); /* { dg-error {too many arguments to function 'svwrite_zt'} } */ + svwrite_zt (0, zt_s32, 0); /* { dg-error {too many arguments to function 'svwrite_zt'} } */ + svwrite_zt (0, zt_u64, 0); /* { dg-error {too many arguments to function 'svwrite_zt'} } */ + svwrite_zt (0, zt_s64, 0); /* { dg-error {too many arguments to function 'svwrite_zt'} } */ + svwrite_zt (0, zt_bf16, 0); /* { dg-error {too many arguments to function 'svwrite_zt'} } */ + svwrite_zt (0, zt_f16, 0); /* { dg-error {too many arguments to function 'svwrite_zt'} } */ + svwrite_zt (0, zt_f32, 0); /* { dg-error {too many arguments to function 'svwrite_zt'} } */ + svwrite_zt (0, zt_f64, 0); /* { dg-error {too many arguments to function 'svwrite_zt'} } */ +} + +void +test_svwrite_zt_explicit_error_arg_type_mismatch ( + svuint8_t zt_u8, svint8_t zt_s8, svuint16_t zt_u16, svint16_t zt_s16, + svuint32_t zt_u32, svint32_t zt_s32, svuint64_t zt_u64, svint64_t zt_s64, + svbfloat16_t zt_bf16, svfloat16_t zt_f16, svfloat32_t zt_f32, + svfloat64_t zt_f64, svuint8x2_t zt_u8x2, svint8x2_t zt_s8x2, + svuint16x2_t zt_u16x2, svint16x2_t zt_s16x2, svuint32x2_t zt_u32x2, + svint32x2_t zt_s32x2, svuint64x2_t zt_u64x2, svint64x2_t zt_s64x2, + svbfloat16x2_t zt_bf16x2, svfloat16x2_t zt_f16x2, svfloat32x2_t zt_f32x2, + svfloat64x2_t zt_f64x2) __arm_streaming __arm_out ("zt0") +{ + struct Foo { uint64_t val; } foo = {0}; + svwrite_zt_u8 (foo, zt_u8); /* { dg-error {incompatible type for argument 1 of 'svwrite_zt_u8'} } */ + svwrite_zt_s8 (foo, zt_s8); /* { dg-error {incompatible type for argument 1 of 'svwrite_zt_s8'} } */ + svwrite_zt_u16 (foo, zt_u16); /* { dg-error {incompatible type for argument 1 of 'svwrite_zt_u16'} } */ + svwrite_zt_s16 (foo, zt_s16); /* { dg-error {incompatible type for argument 1 of 'svwrite_zt_s16'} } */ + svwrite_zt_u32 (foo, zt_u32); /* { dg-error {incompatible type for argument 1 of 'svwrite_zt_u32'} } */ + svwrite_zt_s32 (foo, zt_s32); /* { dg-error {incompatible type for argument 1 of 'svwrite_zt_s32'} } */ + svwrite_zt_u64 (foo, zt_u64); /* { dg-error {incompatible type for argument 1 of 'svwrite_zt_u64'} } */ + svwrite_zt_s64 (foo, zt_s64); /* { dg-error {incompatible type for argument 1 of 'svwrite_zt_s64'} } */ + svwrite_zt_bf16 (foo, zt_bf16); /* { dg-error {incompatible type for argument 1 of 'svwrite_zt_bf16'} } */ + svwrite_zt_f16 (foo, zt_f16); /* { dg-error {incompatible type for argument 1 of 'svwrite_zt_f16'} } */ + svwrite_zt_f32 (foo, zt_f32); /* { dg-error {incompatible type for argument 1 of 'svwrite_zt_f32'} } */ + svwrite_zt_f64 (foo, zt_f64); /* { dg-error {incompatible type for argument 1 of 'svwrite_zt_f64'} } */ + + svwrite_zt_u8 (0, zt_s8); /* { dg-error {incompatible type for argument 2 of 'svwrite_zt_u8'} } */ + svwrite_zt_s8 (0, zt_u8); /* { dg-error {incompatible type for argument 2 of 'svwrite_zt_s8'} } */ + svwrite_zt_u16 (0, zt_s16); /* { dg-error {incompatible type for argument 2 of 'svwrite_zt_u16'} } */ + svwrite_zt_s16 (0, zt_u16); /* { dg-error {incompatible type for argument 2 of 'svwrite_zt_s16'} } */ + svwrite_zt_u32 (0, zt_s32); /* { dg-error {incompatible type for argument 2 of 'svwrite_zt_u32'} } */ + svwrite_zt_s32 (0, zt_u32); /* { dg-error {incompatible type for argument 2 of 'svwrite_zt_s32'} } */ + svwrite_zt_u64 (0, zt_s64); /* { dg-error {incompatible type for argument 2 of 'svwrite_zt_u64'} } */ + svwrite_zt_s64 (0, zt_u64); /* { dg-error {incompatible type for argument 2 of 'svwrite_zt_s64'} } */ + svwrite_zt_bf16 (0, zt_f16); /* { dg-error {incompatible type for argument 2 of 'svwrite_zt_bf16'} } */ + svwrite_zt_f16 (0, zt_bf16); /* { dg-error {incompatible type for argument 2 of 'svwrite_zt_f16'} } */ + svwrite_zt_f32 (0, zt_f64); /* { dg-error {incompatible type for argument 2 of 'svwrite_zt_f32'} } */ + svwrite_zt_f64 (0, zt_f32); /* { dg-error {incompatible type for argument 2 of 'svwrite_zt_f64'} } */ + + svwrite_zt_u8 (0, zt_u8x2); /* { dg-error {incompatible type for argument 2 of 'svwrite_zt_u8'} } */ + svwrite_zt_s8 (0, zt_s8x2); /* { dg-error {incompatible type for argument 2 of 'svwrite_zt_s8'} } */ + svwrite_zt_u16 (0, zt_u16x2); /* { dg-error {incompatible type for argument 2 of 'svwrite_zt_u16'} } */ + svwrite_zt_s16 (0, zt_s16x2); /* { dg-error {incompatible type for argument 2 of 'svwrite_zt_s16'} } */ + svwrite_zt_u32 (0, zt_u32x2); /* { dg-error {incompatible type for argument 2 of 'svwrite_zt_u32'} } */ + svwrite_zt_s32 (0, zt_s32x2); /* { dg-error {incompatible type for argument 2 of 'svwrite_zt_s32'} } */ + svwrite_zt_u64 (0, zt_u64x2); /* { dg-error {incompatible type for argument 2 of 'svwrite_zt_u64'} } */ + svwrite_zt_s64 (0, zt_s64x2); /* { dg-error {incompatible type for argument 2 of 'svwrite_zt_s64'} } */ + svwrite_zt_bf16 (0, zt_bf16x2); /* { dg-error {incompatible type for argument 2 of 'svwrite_zt_bf16'} } */ + svwrite_zt_f16 (0, zt_f16x2); /* { dg-error {incompatible type for argument 2 of 'svwrite_zt_f16'} } */ + svwrite_zt_f32 (0, zt_f32x2); /* { dg-error {incompatible type for argument 2 of 'svwrite_zt_f32'} } */ + svwrite_zt_f64 (0, zt_f64x2); /* { dg-error {incompatible type for argument 2 of 'svwrite_zt_f64'} } */ +} + +void +test_svwrite_zt_inferred_error_arg_type_mismatch ( + svuint8_t zt_u8, svint8_t zt_s8, svuint16_t zt_u16, svint16_t zt_s16, + svuint32_t zt_u32, svint32_t zt_s32, svuint64_t zt_u64, svint64_t zt_s64, + svbfloat16_t zt_bf16, svfloat16_t zt_f16, svfloat32_t zt_f32, + svfloat64_t zt_f64, svuint8x2_t zt_u8x2) __arm_streaming __arm_out ("zt0") +{ + struct Foo { uint64_t val; } foo = {0}; + svwrite_zt (foo, zt_u8); /* { dg-error {passing 'struct Foo' to argument 1 of 'svwrite_zt', which expects 'uint64_t'} } */ + svwrite_zt (0, zt_u8x2); /* { dg-error {passing 'svuint8x2_t' to argument 2 of 'svwrite_zt', which expects a single SVE vector rather than a tuple} } */ +} + +void +test_svwrite_zt_explicit_error_zt0_not_immediate ( + uint64_t zt0, svuint8_t zt_u8, svint8_t zt_s8, svuint16_t zt_u16, + svint16_t zt_s16, svuint32_t zt_u32, svint32_t zt_s32, svuint64_t zt_u64, + svint64_t zt_s64, svbfloat16_t zt_bf16, svfloat16_t zt_f16, + svfloat32_t zt_f32, svfloat64_t zt_f64) __arm_streaming __arm_out ("zt0") +{ + svwrite_zt_u8 (zt0, zt_u8); /* { dg-error {argument 1 of 'svwrite_zt_u8' must be an integer constant expression} } */ + svwrite_zt_s8 (zt0, zt_s8); /* { dg-error {argument 1 of 'svwrite_zt_s8' must be an integer constant expression} } */ + svwrite_zt_u16 (zt0, zt_u16); /* { dg-error {argument 1 of 'svwrite_zt_u16' must be an integer constant expression} } */ + svwrite_zt_s16 (zt0, zt_s16); /* { dg-error {argument 1 of 'svwrite_zt_s16' must be an integer constant expression} } */ + svwrite_zt_u32 (zt0, zt_u32); /* { dg-error {argument 1 of 'svwrite_zt_u32' must be an integer constant expression} } */ + svwrite_zt_s32 (zt0, zt_s32); /* { dg-error {argument 1 of 'svwrite_zt_s32' must be an integer constant expression} } */ + svwrite_zt_u64 (zt0, zt_u64); /* { dg-error {argument 1 of 'svwrite_zt_u64' must be an integer constant expression} } */ + svwrite_zt_s64 (zt0, zt_s64); /* { dg-error {argument 1 of 'svwrite_zt_s64' must be an integer constant expression} } */ + svwrite_zt_bf16 (zt0, zt_bf16); /* { dg-error {argument 1 of 'svwrite_zt_bf16' must be an integer constant expression} } */ + svwrite_zt_f16 (zt0, zt_f16); /* { dg-error {argument 1 of 'svwrite_zt_f16' must be an integer constant expression} } */ + svwrite_zt_f32 (zt0, zt_f32); /* { dg-error {argument 1 of 'svwrite_zt_f32' must be an integer constant expression} } */ + svwrite_zt_f64 (zt0, zt_f64); /* { dg-error {argument 1 of 'svwrite_zt_f64' must be an integer constant expression} } */ +} + +void +test_svwrite_zt_inferred_error_zt0_not_immediate ( + uint64_t zt0, svuint8_t zt_u8, svint8_t zt_s8, svuint16_t zt_u16, + svint16_t zt_s16, svuint32_t zt_u32, svint32_t zt_s32, svuint64_t zt_u64, + svint64_t zt_s64, svbfloat16_t zt_bf16, svfloat16_t zt_f16, + svfloat32_t zt_f32, svfloat64_t zt_f64) __arm_streaming __arm_out ("zt0") +{ + svwrite_zt (zt0, zt_u8); /* { dg-error {argument 1 of 'svwrite_zt' must be an integer constant expression} } */ + svwrite_zt (zt0, zt_s8); /* { dg-error {argument 1 of 'svwrite_zt' must be an integer constant expression} } */ + svwrite_zt (zt0, zt_u16); /* { dg-error {argument 1 of 'svwrite_zt' must be an integer constant expression} } */ + svwrite_zt (zt0, zt_s16); /* { dg-error {argument 1 of 'svwrite_zt' must be an integer constant expression} } */ + svwrite_zt (zt0, zt_u32); /* { dg-error {argument 1 of 'svwrite_zt' must be an integer constant expression} } */ + svwrite_zt (zt0, zt_s32); /* { dg-error {argument 1 of 'svwrite_zt' must be an integer constant expression} } */ + svwrite_zt (zt0, zt_u64); /* { dg-error {argument 1 of 'svwrite_zt' must be an integer constant expression} } */ + svwrite_zt (zt0, zt_s64); /* { dg-error {argument 1 of 'svwrite_zt' must be an integer constant expression} } */ + svwrite_zt (zt0, zt_bf16); /* { dg-error {argument 1 of 'svwrite_zt' must be an integer constant expression} } */ + svwrite_zt (zt0, zt_f16); /* { dg-error {argument 1 of 'svwrite_zt' must be an integer constant expression} } */ + svwrite_zt (zt0, zt_f32); /* { dg-error {argument 1 of 'svwrite_zt' must be an integer constant expression} } */ + svwrite_zt (zt0, zt_f64); /* { dg-error {argument 1 of 'svwrite_zt' must be an integer constant expression} } */ +} + +void +test_svwrite_zt_explicit_error_zt0_not_in_range ( + uint64_t zt0, svuint8_t zt_u8, svint8_t zt_s8, svuint16_t zt_u16, + svint16_t zt_s16, svuint32_t zt_u32, svint32_t zt_s32, svuint64_t zt_u64, + svint64_t zt_s64, svbfloat16_t zt_bf16, svfloat16_t zt_f16, + svfloat32_t zt_f32, svfloat64_t zt_f64) __arm_streaming __arm_out ("zt0") +{ + svwrite_zt_u8 (1, zt_u8); /* { dg-error {passing 1 to argument 1 of 'svwrite_zt_u8', which expects the value 0} } */ + svwrite_zt_s8 (1, zt_s8); /* { dg-error {passing 1 to argument 1 of 'svwrite_zt_s8', which expects the value 0} } */ + svwrite_zt_u16 (1, zt_u16); /* { dg-error {passing 1 to argument 1 of 'svwrite_zt_u16', which expects the value 0} } */ + svwrite_zt_s16 (1, zt_s16); /* { dg-error {passing 1 to argument 1 of 'svwrite_zt_s16', which expects the value 0} } */ + svwrite_zt_u32 (1, zt_u32); /* { dg-error {passing 1 to argument 1 of 'svwrite_zt_u32', which expects the value 0} } */ + svwrite_zt_s32 (1, zt_s32); /* { dg-error {passing 1 to argument 1 of 'svwrite_zt_s32', which expects the value 0} } */ + svwrite_zt_u64 (1, zt_u64); /* { dg-error {passing 1 to argument 1 of 'svwrite_zt_u64', which expects the value 0} } */ + svwrite_zt_s64 (1, zt_s64); /* { dg-error {passing 1 to argument 1 of 'svwrite_zt_s64', which expects the value 0} } */ + svwrite_zt_bf16 (1, zt_bf16); /* { dg-error {passing 1 to argument 1 of 'svwrite_zt_bf16', which expects the value 0} } */ + svwrite_zt_f16 (1, zt_f16); /* { dg-error {passing 1 to argument 1 of 'svwrite_zt_f16', which expects the value 0} } */ + svwrite_zt_f32 (1, zt_f32); /* { dg-error {passing 1 to argument 1 of 'svwrite_zt_f32', which expects the value 0} } */ + svwrite_zt_f64 (1, zt_f64); /* { dg-error {passing 1 to argument 1 of 'svwrite_zt_f64', which expects the value 0} } */ + + svwrite_zt_u8 (-1, zt_u8); /* { dg-error {passing -1 to argument 1 of 'svwrite_zt_u8', which expects the value 0} } */ + svwrite_zt_s8 (-1, zt_s8); /* { dg-error {passing -1 to argument 1 of 'svwrite_zt_s8', which expects the value 0} } */ + svwrite_zt_u16 (-1, zt_u16); /* { dg-error {passing -1 to argument 1 of 'svwrite_zt_u16', which expects the value 0} } */ + svwrite_zt_s16 (-1, zt_s16); /* { dg-error {passing -1 to argument 1 of 'svwrite_zt_s16', which expects the value 0} } */ + svwrite_zt_u32 (-1, zt_u32); /* { dg-error {passing -1 to argument 1 of 'svwrite_zt_u32', which expects the value 0} } */ + svwrite_zt_s32 (-1, zt_s32); /* { dg-error {passing -1 to argument 1 of 'svwrite_zt_s32', which expects the value 0} } */ + svwrite_zt_u64 (-1, zt_u64); /* { dg-error {passing -1 to argument 1 of 'svwrite_zt_u64', which expects the value 0} } */ + svwrite_zt_s64 (-1, zt_s64); /* { dg-error {passing -1 to argument 1 of 'svwrite_zt_s64', which expects the value 0} } */ + svwrite_zt_bf16 (-1, zt_bf16); /* { dg-error {passing -1 to argument 1 of 'svwrite_zt_bf16', which expects the value 0} } */ + svwrite_zt_f16 (-1, zt_f16); /* { dg-error {passing -1 to argument 1 of 'svwrite_zt_f16', which expects the value 0} } */ + svwrite_zt_f32 (-1, zt_f32); /* { dg-error {passing -1 to argument 1 of 'svwrite_zt_f32', which expects the value 0} } */ + svwrite_zt_f64 (-1, zt_f64); /* { dg-error {passing -1 to argument 1 of 'svwrite_zt_f64', which expects the value 0} } */ +} + +void +test_svwrite_zt_inferred_error_zt0_not_in_range ( + uint64_t zt0, svuint8_t zt_u8, svint8_t zt_s8, svuint16_t zt_u16, + svint16_t zt_s16, svuint32_t zt_u32, svint32_t zt_s32, svuint64_t zt_u64, + svint64_t zt_s64, svbfloat16_t zt_bf16, svfloat16_t zt_f16, + svfloat32_t zt_f32, svfloat64_t zt_f64) __arm_streaming __arm_out ("zt0") +{ + svwrite_zt (1, zt_u8); /* { dg-error {passing 1 to argument 1 of 'svwrite_zt', which expects the value 0} } */ + svwrite_zt (1, zt_s8); /* { dg-error {passing 1 to argument 1 of 'svwrite_zt', which expects the value 0} } */ + svwrite_zt (1, zt_u16); /* { dg-error {passing 1 to argument 1 of 'svwrite_zt', which expects the value 0} } */ + svwrite_zt (1, zt_s16); /* { dg-error {passing 1 to argument 1 of 'svwrite_zt', which expects the value 0} } */ + svwrite_zt (1, zt_u32); /* { dg-error {passing 1 to argument 1 of 'svwrite_zt', which expects the value 0} } */ + svwrite_zt (1, zt_s32); /* { dg-error {passing 1 to argument 1 of 'svwrite_zt', which expects the value 0} } */ + svwrite_zt (1, zt_u64); /* { dg-error {passing 1 to argument 1 of 'svwrite_zt', which expects the value 0} } */ + svwrite_zt (1, zt_s64); /* { dg-error {passing 1 to argument 1 of 'svwrite_zt', which expects the value 0} } */ + svwrite_zt (1, zt_bf16); /* { dg-error {passing 1 to argument 1 of 'svwrite_zt', which expects the value 0} } */ + svwrite_zt (1, zt_f16); /* { dg-error {passing 1 to argument 1 of 'svwrite_zt', which expects the value 0} } */ + svwrite_zt (1, zt_f32); /* { dg-error {passing 1 to argument 1 of 'svwrite_zt', which expects the value 0} } */ + svwrite_zt (1, zt_f64); /* { dg-error {passing 1 to argument 1 of 'svwrite_zt', which expects the value 0} } */ + + svwrite_zt (-1, zt_u8); /* { dg-error {passing -1 to argument 1 of 'svwrite_zt', which expects the value 0} } */ + svwrite_zt (-1, zt_s8); /* { dg-error {passing -1 to argument 1 of 'svwrite_zt', which expects the value 0} } */ + svwrite_zt (-1, zt_u16); /* { dg-error {passing -1 to argument 1 of 'svwrite_zt', which expects the value 0} } */ + svwrite_zt (-1, zt_s16); /* { dg-error {passing -1 to argument 1 of 'svwrite_zt', which expects the value 0} } */ + svwrite_zt (-1, zt_u32); /* { dg-error {passing -1 to argument 1 of 'svwrite_zt', which expects the value 0} } */ + svwrite_zt (-1, zt_s32); /* { dg-error {passing -1 to argument 1 of 'svwrite_zt', which expects the value 0} } */ + svwrite_zt (-1, zt_u64); /* { dg-error {passing -1 to argument 1 of 'svwrite_zt', which expects the value 0} } */ + svwrite_zt (-1, zt_s64); /* { dg-error {passing -1 to argument 1 of 'svwrite_zt', which expects the value 0} } */ + svwrite_zt (-1, zt_bf16); /* { dg-error {passing -1 to argument 1 of 'svwrite_zt', which expects the value 0} } */ + svwrite_zt (-1, zt_f16); /* { dg-error {passing -1 to argument 1 of 'svwrite_zt', which expects the value 0} } */ + svwrite_zt (-1, zt_f32); /* { dg-error {passing -1 to argument 1 of 'svwrite_zt', which expects the value 0} } */ + svwrite_zt (-1, zt_f64); /* { dg-error {passing -1 to argument 1 of 'svwrite_zt', which expects the value 0} } */ +} + +#pragma GCC reset_options +#pragma GCC target("+sve2,+sme2") +void +test_svwrite_zt_feature_not_enabled (svuint8_t zt_u8) __arm_streaming __arm_out ("zt0") +{ + // GCC only complains for the first such instance, so only one test here. + svwrite_zt_u8 (0, zt_u8); /* { dg-error {ACLE function 'svwrite_zt_u8' requires ISA extension 'sme-lutv2'} } */ +} diff --git a/gcc/testsuite/gcc.target/aarch64/sve/arith_1.c b/gcc/testsuite/gcc.target/aarch64/sve/arith_1.c index c2e1f6c7eaeb..785b4cc9335f 100644 --- a/gcc/testsuite/gcc.target/aarch64/sve/arith_1.c +++ b/gcc/testsuite/gcc.target/aarch64/sve/arith_1.c @@ -85,7 +85,7 @@ DO_ARITH_OPS (int64_t, -, minus) /* { dg-final { scan-assembler-not {\tadd\tz[0-9]+\.d, z[0-9]+\.d, #-1\n} } } */ /* { dg-final { scan-assembler-times {\tsub\tz[0-9]+\.d, z[0-9]+\.d, #1\n} 1 } } */ -/* { dg-final { scan-assembler-not {\tsub\tz[0-9]+\.b, z[0-9]+\.b, #1\n} } } */ +/* Asserted above { scan-assembler-not {\tsub\tz[0-9]+\.b, z[0-9]+\.b, #1\n} } */ /* { dg-final { scan-assembler-not {\tsub\tz[0-9]+\.b, z[0-9]+\.b, #5\n} } } */ /* { dg-final { scan-assembler-not {\tsub\tz[0-9]+\.b, z[0-9]+\.b, #255\n} } } */ /* { dg-final { scan-assembler-not {\tsub\tz[0-9]+\.b, z[0-9]+\.b, #256\n} } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/sve/cond_fmaxnm_1.c b/gcc/testsuite/gcc.target/aarch64/sve/cond_fmaxnm_1.c index d0db0900ece3..e68d5a4a237f 100644 --- a/gcc/testsuite/gcc.target/aarch64/sve/cond_fmaxnm_1.c +++ b/gcc/testsuite/gcc.target/aarch64/sve/cond_fmaxnm_1.c @@ -38,10 +38,6 @@ TEST_ALL (DEF_LOOP) /* { dg-final { scan-assembler-times {\tfmaxnm\tz[0-9]+\.s, p[0-7]/m, z[0-9]+\.s, #1\.0\n} 1 } } */ /* { dg-final { scan-assembler-times {\tfmaxnm\tz[0-9]+\.d, p[0-7]/m, z[0-9]+\.d, #1\.0\n} 1 } } */ -/* { dg-final { scan-assembler-times {\tfmaxnm\tz[0-9]+\.h, p[0-7]/m, z[0-9]+\.h, #1\.0\n} 1 } } */ -/* { dg-final { scan-assembler-times {\tfmaxnm\tz[0-9]+\.s, p[0-7]/m, z[0-9]+\.s, #1\.0\n} 1 } } */ -/* { dg-final { scan-assembler-times {\tfmaxnm\tz[0-9]+\.d, p[0-7]/m, z[0-9]+\.d, #1\.0\n} 1 } } */ - /* { dg-final { scan-assembler-times {\tfmov\tz[0-9]+\.h, #2\.0} 1 } } */ /* { dg-final { scan-assembler-times {\tfmov\tz[0-9]+\.s, #2\.0} 1 } } */ /* { dg-final { scan-assembler-times {\tfmov\tz[0-9]+\.d, #2\.0} 1 } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/sve/cond_fmaxnm_3.c b/gcc/testsuite/gcc.target/aarch64/sve/cond_fmaxnm_3.c index 741f8f6d08e6..0ef89914b8be 100644 --- a/gcc/testsuite/gcc.target/aarch64/sve/cond_fmaxnm_3.c +++ b/gcc/testsuite/gcc.target/aarch64/sve/cond_fmaxnm_3.c @@ -47,8 +47,8 @@ TEST_ALL (DEF_LOOP) /* { dg-final { scan-assembler-times {\tfmaxnm\tz[0-9]+\.d, p[0-7]/m, z[0-9]+\.d, z[0-9]+\.d\n} 1 } } */ /* { dg-final { scan-assembler-times {\tsel\tz[0-9]+\.h, p[0-7], z[0-9]+\.h, z[0-9]+\.h\n} 3 } } */ -/* { dg-final { scan-assembler-times {\tsel\tz[0-9]+\.h, p[0-7], z[0-9]+\.h, z[0-9]+\.h\n} 3 } } */ -/* { dg-final { scan-assembler-times {\tsel\tz[0-9]+\.h, p[0-7], z[0-9]+\.h, z[0-9]+\.h\n} 3 } } */ +/* { dg-final { scan-assembler-times {\tsel\tz[0-9]+\.s, p[0-7], z[0-9]+\.s, z[0-9]+\.s\n} 3 } } */ +/* { dg-final { scan-assembler-times {\tsel\tz[0-9]+\.d, p[0-7], z[0-9]+\.d, z[0-9]+\.d\n} 3 } } */ /* { dg-final { scan-assembler-not {\tmovprfx\t} } } */ /* { dg-final { scan-assembler-not {\tmov\tz} } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/sve/cond_fmaxnm_5.c b/gcc/testsuite/gcc.target/aarch64/sve/cond_fmaxnm_5.c index 4bae7e02de4b..836cd2c067ec 100644 --- a/gcc/testsuite/gcc.target/aarch64/sve/cond_fmaxnm_5.c +++ b/gcc/testsuite/gcc.target/aarch64/sve/cond_fmaxnm_5.c @@ -11,10 +11,6 @@ /* { dg-final { scan-assembler-times {\tfmaxnm\tz[0-9]+\.s, p[0-7]/m, z[0-9]+\.s, #1\.0\n} 1 } } */ /* { dg-final { scan-assembler-times {\tfmaxnm\tz[0-9]+\.d, p[0-7]/m, z[0-9]+\.d, #1\.0\n} 1 } } */ -/* { dg-final { scan-assembler-times {\tfmaxnm\tz[0-9]+\.h, p[0-7]/m, z[0-9]+\.h, #1\.0\n} 1 } } */ -/* { dg-final { scan-assembler-times {\tfmaxnm\tz[0-9]+\.s, p[0-7]/m, z[0-9]+\.s, #1\.0\n} 1 } } */ -/* { dg-final { scan-assembler-times {\tfmaxnm\tz[0-9]+\.d, p[0-7]/m, z[0-9]+\.d, #1\.0\n} 1 } } */ - /* { dg-final { scan-assembler-times {\tfmov\tz[0-9]+\.h, #2\.0} 1 } } */ /* { dg-final { scan-assembler-times {\tfmov\tz[0-9]+\.s, #2\.0} 1 } } */ /* { dg-final { scan-assembler-times {\tfmov\tz[0-9]+\.d, #2\.0} 1 } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/sve/cond_fmaxnm_7.c b/gcc/testsuite/gcc.target/aarch64/sve/cond_fmaxnm_7.c index 30f07f62ddb7..9331d9e5ccf6 100644 --- a/gcc/testsuite/gcc.target/aarch64/sve/cond_fmaxnm_7.c +++ b/gcc/testsuite/gcc.target/aarch64/sve/cond_fmaxnm_7.c @@ -20,8 +20,8 @@ /* { dg-final { scan-assembler-times {\tfmaxnm\tz[0-9]+\.d, p[0-7]/m, z[0-9]+\.d, z[0-9]+\.d\n} 1 } } */ /* { dg-final { scan-assembler-times {\tsel\tz[0-9]+\.h, p[0-7], z[0-9]+\.h, z[0-9]+\.h\n} 3 } } */ -/* { dg-final { scan-assembler-times {\tsel\tz[0-9]+\.h, p[0-7], z[0-9]+\.h, z[0-9]+\.h\n} 3 } } */ -/* { dg-final { scan-assembler-times {\tsel\tz[0-9]+\.h, p[0-7], z[0-9]+\.h, z[0-9]+\.h\n} 3 } } */ +/* { dg-final { scan-assembler-times {\tsel\tz[0-9]+\.s, p[0-7], z[0-9]+\.s, z[0-9]+\.s\n} 3 } } */ +/* { dg-final { scan-assembler-times {\tsel\tz[0-9]+\.d, p[0-7], z[0-9]+\.d, z[0-9]+\.d\n} 3 } } */ /* { dg-final { scan-assembler-not {\tmovprfx\t} } } */ /* { dg-final { scan-assembler-not {\tmov\tz} } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/sve/cond_fminnm_1.c b/gcc/testsuite/gcc.target/aarch64/sve/cond_fminnm_1.c index d667b20884eb..f6f58391621d 100644 --- a/gcc/testsuite/gcc.target/aarch64/sve/cond_fminnm_1.c +++ b/gcc/testsuite/gcc.target/aarch64/sve/cond_fminnm_1.c @@ -12,10 +12,6 @@ /* { dg-final { scan-assembler-times {\tfminnm\tz[0-9]+\.s, p[0-7]/m, z[0-9]+\.s, #1\.0\n} 1 } } */ /* { dg-final { scan-assembler-times {\tfminnm\tz[0-9]+\.d, p[0-7]/m, z[0-9]+\.d, #1\.0\n} 1 } } */ -/* { dg-final { scan-assembler-times {\tfminnm\tz[0-9]+\.h, p[0-7]/m, z[0-9]+\.h, #1\.0\n} 1 } } */ -/* { dg-final { scan-assembler-times {\tfminnm\tz[0-9]+\.s, p[0-7]/m, z[0-9]+\.s, #1\.0\n} 1 } } */ -/* { dg-final { scan-assembler-times {\tfminnm\tz[0-9]+\.d, p[0-7]/m, z[0-9]+\.d, #1\.0\n} 1 } } */ - /* { dg-final { scan-assembler-times {\tfmov\tz[0-9]+\.h, #2\.0} 1 } } */ /* { dg-final { scan-assembler-times {\tfmov\tz[0-9]+\.s, #2\.0} 1 } } */ /* { dg-final { scan-assembler-times {\tfmov\tz[0-9]+\.d, #2\.0} 1 } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/sve/cond_fminnm_3.c b/gcc/testsuite/gcc.target/aarch64/sve/cond_fminnm_3.c index d39dd1825bd1..01d96ec1eb79 100644 --- a/gcc/testsuite/gcc.target/aarch64/sve/cond_fminnm_3.c +++ b/gcc/testsuite/gcc.target/aarch64/sve/cond_fminnm_3.c @@ -21,8 +21,8 @@ /* { dg-final { scan-assembler-times {\tfminnm\tz[0-9]+\.d, p[0-7]/m, z[0-9]+\.d, z[0-9]+\.d\n} 1 } } */ /* { dg-final { scan-assembler-times {\tsel\tz[0-9]+\.h, p[0-7], z[0-9]+\.h, z[0-9]+\.h\n} 3 } } */ -/* { dg-final { scan-assembler-times {\tsel\tz[0-9]+\.h, p[0-7], z[0-9]+\.h, z[0-9]+\.h\n} 3 } } */ -/* { dg-final { scan-assembler-times {\tsel\tz[0-9]+\.h, p[0-7], z[0-9]+\.h, z[0-9]+\.h\n} 3 } } */ +/* { dg-final { scan-assembler-times {\tsel\tz[0-9]+\.s, p[0-7], z[0-9]+\.s, z[0-9]+\.s\n} 3 } } */ +/* { dg-final { scan-assembler-times {\tsel\tz[0-9]+\.d, p[0-7], z[0-9]+\.d, z[0-9]+\.d\n} 3 } } */ /* { dg-final { scan-assembler-not {\tmovprfx\t} } } */ /* { dg-final { scan-assembler-not {\tmov\tz} } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/sve/cond_fminnm_5.c b/gcc/testsuite/gcc.target/aarch64/sve/cond_fminnm_5.c index 290c4beac246..9865f08818a6 100644 --- a/gcc/testsuite/gcc.target/aarch64/sve/cond_fminnm_5.c +++ b/gcc/testsuite/gcc.target/aarch64/sve/cond_fminnm_5.c @@ -12,10 +12,6 @@ /* { dg-final { scan-assembler-times {\tfminnm\tz[0-9]+\.s, p[0-7]/m, z[0-9]+\.s, #1\.0\n} 1 } } */ /* { dg-final { scan-assembler-times {\tfminnm\tz[0-9]+\.d, p[0-7]/m, z[0-9]+\.d, #1\.0\n} 1 } } */ -/* { dg-final { scan-assembler-times {\tfminnm\tz[0-9]+\.h, p[0-7]/m, z[0-9]+\.h, #1\.0\n} 1 } } */ -/* { dg-final { scan-assembler-times {\tfminnm\tz[0-9]+\.s, p[0-7]/m, z[0-9]+\.s, #1\.0\n} 1 } } */ -/* { dg-final { scan-assembler-times {\tfminnm\tz[0-9]+\.d, p[0-7]/m, z[0-9]+\.d, #1\.0\n} 1 } } */ - /* { dg-final { scan-assembler-times {\tfmov\tz[0-9]+\.h, #2\.0} 1 } } */ /* { dg-final { scan-assembler-times {\tfmov\tz[0-9]+\.s, #2\.0} 1 } } */ /* { dg-final { scan-assembler-times {\tfmov\tz[0-9]+\.d, #2\.0} 1 } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/sve/cond_fminnm_7.c b/gcc/testsuite/gcc.target/aarch64/sve/cond_fminnm_7.c index 347a1a3540b8..eae52cd284ce 100644 --- a/gcc/testsuite/gcc.target/aarch64/sve/cond_fminnm_7.c +++ b/gcc/testsuite/gcc.target/aarch64/sve/cond_fminnm_7.c @@ -21,8 +21,8 @@ /* { dg-final { scan-assembler-times {\tfminnm\tz[0-9]+\.d, p[0-7]/m, z[0-9]+\.d, z[0-9]+\.d\n} 1 } } */ /* { dg-final { scan-assembler-times {\tsel\tz[0-9]+\.h, p[0-7], z[0-9]+\.h, z[0-9]+\.h\n} 3 } } */ -/* { dg-final { scan-assembler-times {\tsel\tz[0-9]+\.h, p[0-7], z[0-9]+\.h, z[0-9]+\.h\n} 3 } } */ -/* { dg-final { scan-assembler-times {\tsel\tz[0-9]+\.h, p[0-7], z[0-9]+\.h, z[0-9]+\.h\n} 3 } } */ +/* { dg-final { scan-assembler-times {\tsel\tz[0-9]+\.s, p[0-7], z[0-9]+\.s, z[0-9]+\.s\n} 3 } } */ +/* { dg-final { scan-assembler-times {\tsel\tz[0-9]+\.d, p[0-7], z[0-9]+\.d, z[0-9]+\.d\n} 3 } } */ /* { dg-final { scan-assembler-not {\tmovprfx\t} } } */ /* { dg-final { scan-assembler-not {\tmov\tz} } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/sve/cond_fmul_3.c b/gcc/testsuite/gcc.target/aarch64/sve/cond_fmul_3.c index 4da147e15680..549950d2e157 100644 --- a/gcc/testsuite/gcc.target/aarch64/sve/cond_fmul_3.c +++ b/gcc/testsuite/gcc.target/aarch64/sve/cond_fmul_3.c @@ -43,8 +43,8 @@ TEST_ALL (DEF_LOOP) /* { dg-final { scan-assembler-times {\tfmul\tz[0-9]+\.d, p[0-7]/m, z[0-9]+\.d, z[0-9]+\.d\n} 1 } } */ /* { dg-final { scan-assembler-times {\tsel\tz[0-9]+\.h, p[0-7], z[0-9]+\.h, z[0-9]+\.h\n} 3 } } */ -/* { dg-final { scan-assembler-times {\tsel\tz[0-9]+\.h, p[0-7], z[0-9]+\.h, z[0-9]+\.h\n} 3 } } */ -/* { dg-final { scan-assembler-times {\tsel\tz[0-9]+\.h, p[0-7], z[0-9]+\.h, z[0-9]+\.h\n} 3 } } */ +/* { dg-final { scan-assembler-times {\tsel\tz[0-9]+\.s, p[0-7], z[0-9]+\.s, z[0-9]+\.s\n} 3 } } */ +/* { dg-final { scan-assembler-times {\tsel\tz[0-9]+\.d, p[0-7], z[0-9]+\.d, z[0-9]+\.d\n} 3 } } */ /* { dg-final { scan-assembler-not {\tmovprfx\t} } } */ /* { dg-final { scan-assembler-not {\tmov\tz} } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/sve/cond_fsubr_3.c b/gcc/testsuite/gcc.target/aarch64/sve/cond_fsubr_3.c index 328af5741ef7..91eee805bbb6 100644 --- a/gcc/testsuite/gcc.target/aarch64/sve/cond_fsubr_3.c +++ b/gcc/testsuite/gcc.target/aarch64/sve/cond_fsubr_3.c @@ -43,8 +43,8 @@ TEST_ALL (DEF_LOOP) /* { dg-final { scan-assembler-times {\tfsub\tz[0-9]+\.d, p[0-7]/m, z[0-9]+\.d, z[0-9]+\.d\n} 1 } } */ /* { dg-final { scan-assembler-times {\tsel\tz[0-9]+\.h, p[0-7], z[0-9]+\.h, z[0-9]+\.h\n} 3 } } */ -/* { dg-final { scan-assembler-times {\tsel\tz[0-9]+\.h, p[0-7], z[0-9]+\.h, z[0-9]+\.h\n} 3 } } */ -/* { dg-final { scan-assembler-times {\tsel\tz[0-9]+\.h, p[0-7], z[0-9]+\.h, z[0-9]+\.h\n} 3 } } */ +/* { dg-final { scan-assembler-times {\tsel\tz[0-9]+\.s, p[0-7], z[0-9]+\.s, z[0-9]+\.s\n} 3 } } */ +/* { dg-final { scan-assembler-times {\tsel\tz[0-9]+\.d, p[0-7], z[0-9]+\.d, z[0-9]+\.d\n} 3 } } */ /* { dg-final { scan-assembler-not {\tmovprfx\t} } } */ /* { dg-final { scan-assembler-not {\tmov\tz} } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/sve/mixed_size_6.c b/gcc/testsuite/gcc.target/aarch64/sve/mixed_size_6.c index 837edecf7d07..da778204454f 100644 --- a/gcc/testsuite/gcc.target/aarch64/sve/mixed_size_6.c +++ b/gcc/testsuite/gcc.target/aarch64/sve/mixed_size_6.c @@ -39,9 +39,9 @@ f3 (uint64_t *restrict ptr1, uint32_t *restrict ptr2, uint32_t start) } /* { dg-final { scan-assembler {\tindex\tz[0-9]+\.d, x[0-9]+, #1\n} } } */ -/* { dg-final { scan-assembler {\tindex\tz[0-9]+\.d, x[0-9]+, #1\n} } } */ +/* { dg-final { scan-assembler {\tindex\tz[0-9]+\.d, x[0-9]+, #2\n} } } */ /* { dg-final { scan-assembler {\tindex\tz[0-9]+\.d, x[0-9]+, #4\n} } } */ /* { dg-final { scan-assembler-not {\tindex\tz[0-9]+\.d, w[0-9]+, #1\n} } } */ -/* { dg-final { scan-assembler-not {\tindex\tz[0-9]+\.d, w[0-9]+, #1\n} } } */ +/* { dg-final { scan-assembler-not {\tindex\tz[0-9]+\.d, w[0-9]+, #2\n} } } */ /* { dg-final { scan-assembler-not {\tindex\tz[0-9]+\.d, w[0-9]+, #4\n} } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/sve/pcs/annotate_1.c b/gcc/testsuite/gcc.target/aarch64/sve/pcs/annotate_1.c index a85d068607aa..6430980add47 100644 --- a/gcc/testsuite/gcc.target/aarch64/sve/pcs/annotate_1.c +++ b/gcc/testsuite/gcc.target/aarch64/sve/pcs/annotate_1.c @@ -96,7 +96,6 @@ svfloat64x4_t ret_f64x4 (void) { return svundef4_f64 (); } /* { dg-final { scan-assembler {\t\.variant_pcs\tret_s8x3\n} } } */ /* { dg-final { scan-assembler {\t\.variant_pcs\tret_s16x3\n} } } */ -/* { dg-final { scan-assembler {\t\.variant_pcs\tret_s16x3\n} } } */ /* { dg-final { scan-assembler {\t\.variant_pcs\tret_s32x3\n} } } */ /* { dg-final { scan-assembler {\t\.variant_pcs\tret_s64x3\n} } } */ /* { dg-final { scan-assembler {\t\.variant_pcs\tret_u8x3\n} } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/sve/pcs/return_6.c b/gcc/testsuite/gcc.target/aarch64/sve/pcs/return_6.c index 81c0a4163faa..bf7308dd567b 100644 --- a/gcc/testsuite/gcc.target/aarch64/sve/pcs/return_6.c +++ b/gcc/testsuite/gcc.target/aarch64/sve/pcs/return_6.c @@ -55,7 +55,7 @@ CALLEE (s8, svint8_t) CALLEE (u8, svuint8_t) /* -** callee_u8: +** callee_mf8: ** ( ** ld1 ({v.*}), \[x0\] ** st1 \1, \[x8\] diff --git a/gcc/testsuite/gcc.target/aarch64/sve/struct_move_3.c b/gcc/testsuite/gcc.target/aarch64/sve/struct_move_3.c index 19011384f9b8..d6092e791d85 100644 --- a/gcc/testsuite/gcc.target/aarch64/sve/struct_move_3.c +++ b/gcc/testsuite/gcc.target/aarch64/sve/struct_move_3.c @@ -37,7 +37,7 @@ typedef struct { vnx2df a[4]; } vnx8df; TEST_TYPE (vnx64qi, z0, z4) TEST_TYPE (vnx32hi, z6, z2) TEST_TYPE (vnx16si, z12, z16) -TEST_TYPE (vnx8di, z17, z13) +TEST_TYPE (vnx8di, z17, z12) TEST_TYPE (vnx32hf, z18, z1) TEST_TYPE (vnx16sf, z20, z16) TEST_TYPE (vnx8df, z24, z28) @@ -92,11 +92,11 @@ TEST_TYPE (vnx8df, z24, z28) /* { dg-final { scan-assembler {\tld1d\tz19.d, p[0-7]/z, \[x0, #2, mul vl\]\n} } } */ /* { dg-final { scan-assembler {\tld1d\tz20.d, p[0-7]/z, \[x0, #3, mul vl\]\n} } } */ /* { dg-final { scan-assembler { test vnx8di 1 z17\n} } } */ -/* { dg-final { scan-assembler {\tmov\tz13.d, z17.d\n} } } */ -/* { dg-final { scan-assembler {\tmov\tz14.d, z18.d\n} } } */ -/* { dg-final { scan-assembler {\tmov\tz15.d, z19.d\n} } } */ -/* { dg-final { scan-assembler {\tmov\tz16.d, z20.d\n} } } */ -/* { dg-final { scan-assembler { test vnx8di 2 z17, z17, z13\n} } } */ +/* { dg-final { scan-assembler {\tmov\tz12.d, z17.d\n} } } */ +/* { dg-final { scan-assembler {\tmov\tz13.d, z18.d\n} } } */ +/* { dg-final { scan-assembler {\tmov\tz14.d, z19.d\n} } } */ +/* { dg-final { scan-assembler {\tmov\tz15.d, z20.d\n} } } */ +/* { dg-final { scan-assembler { test vnx8di 2 z17, z17, z12\n} } } */ /* { dg-final { scan-assembler {\tst1d\tz17.d, p[0-7], \[x0, #4, mul vl\]\n} } } */ /* { dg-final { scan-assembler {\tst1d\tz18.d, p[0-7], \[x0, #5, mul vl\]\n} } } */ /* { dg-final { scan-assembler {\tst1d\tz19.d, p[0-7], \[x0, #6, mul vl\]\n} } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/sve/struct_move_6.c b/gcc/testsuite/gcc.target/aarch64/sve/struct_move_6.c index 8336e3f1eddf..12b714481e3d 100644 --- a/gcc/testsuite/gcc.target/aarch64/sve/struct_move_6.c +++ b/gcc/testsuite/gcc.target/aarch64/sve/struct_move_6.c @@ -34,7 +34,7 @@ typedef struct { vnx2df a[4]; } vnx8df; TEST_TYPE (vnx64qi, z0, z4) TEST_TYPE (vnx32hi, z6, z2) TEST_TYPE (vnx16si, z12, z16) -TEST_TYPE (vnx8di, z17, z13) +TEST_TYPE (vnx8di, z17, z12) TEST_TYPE (vnx16sf, z20, z16) TEST_TYPE (vnx8df, z24, z28) @@ -88,11 +88,11 @@ TEST_TYPE (vnx8df, z24, z28) /* { dg-final { scan-assembler {\tldr\tz19, \[x0, #2, mul vl\]\n} } } */ /* { dg-final { scan-assembler {\tldr\tz20, \[x0, #3, mul vl\]\n} } } */ /* { dg-final { scan-assembler { test vnx8di 1 z17\n} } } */ -/* { dg-final { scan-assembler {\tmov\tz13.d, z17.d\n} } } */ -/* { dg-final { scan-assembler {\tmov\tz14.d, z18.d\n} } } */ -/* { dg-final { scan-assembler {\tmov\tz15.d, z19.d\n} } } */ -/* { dg-final { scan-assembler {\tmov\tz16.d, z20.d\n} } } */ -/* { dg-final { scan-assembler { test vnx8di 2 z17, z17, z13\n} } } */ +/* { dg-final { scan-assembler {\tmov\tz12.d, z17.d\n} } } */ +/* { dg-final { scan-assembler {\tmov\tz13.d, z18.d\n} } } */ +/* { dg-final { scan-assembler {\tmov\tz14.d, z19.d\n} } } */ +/* { dg-final { scan-assembler {\tmov\tz15.d, z20.d\n} } } */ +/* { dg-final { scan-assembler { test vnx8di 2 z17, z17, z12\n} } } */ /* { dg-final { scan-assembler {\tstr\tz17, \[x0, #4, mul vl\]\n} } } */ /* { dg-final { scan-assembler {\tstr\tz18, \[x0, #5, mul vl\]\n} } } */ /* { dg-final { scan-assembler {\tstr\tz19, \[x0, #6, mul vl\]\n} } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/sve/uzp1_1.c b/gcc/testsuite/gcc.target/aarch64/sve/uzp1_1.c index 84c6c6f1c606..83451db9b44b 100644 --- a/gcc/testsuite/gcc.target/aarch64/sve/uzp1_1.c +++ b/gcc/testsuite/gcc.target/aarch64/sve/uzp1_1.c @@ -32,9 +32,6 @@ UZP1 (vnx8hf, ((vnx8hi) { 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30 })); /* { dg-final { scan-assembler-not {\ttbl\t} } } */ -/* { dg-final { scan-assembler-not {\ttbl\t} } } */ -/* { dg-final { scan-assembler-not {\ttbl\t} } } */ -/* { dg-final { scan-assembler-not {\ttbl\t} } } */ /* { dg-final { scan-assembler-times {\tuzp1\tz[0-9]+\.d, z[0-9]+\.d, z[0-9]+\.d\n} 2 } } */ /* { dg-final { scan-assembler-times {\tuzp1\tz[0-9]+\.s, z[0-9]+\.s, z[0-9]+\.s\n} 2 } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/sve/uzp2_1.c b/gcc/testsuite/gcc.target/aarch64/sve/uzp2_1.c index 1336cafc5c7e..bfdee4073f75 100644 --- a/gcc/testsuite/gcc.target/aarch64/sve/uzp2_1.c +++ b/gcc/testsuite/gcc.target/aarch64/sve/uzp2_1.c @@ -31,9 +31,6 @@ UZP2 (vnx8hf, ((vnx8hi) { 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31 })); /* { dg-final { scan-assembler-not {\ttbl\t} } } */ -/* { dg-final { scan-assembler-not {\ttbl\t} } } */ -/* { dg-final { scan-assembler-not {\ttbl\t} } } */ -/* { dg-final { scan-assembler-not {\ttbl\t} } } */ /* { dg-final { scan-assembler-times {\tuzp2\tz[0-9]+\.d, z[0-9]+\.d, z[0-9]+\.d\n} 2 } } */ /* { dg-final { scan-assembler-times {\tuzp2\tz[0-9]+\.s, z[0-9]+\.s, z[0-9]+\.s\n} 2 } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/pr121599.c b/gcc/testsuite/gcc.target/aarch64/sve2/pr121599.c new file mode 100644 index 000000000000..90c5ac97e4f8 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/pr121599.c @@ -0,0 +1,31 @@ +/* PR target/121599. */ +/* { dg-do compile } */ +/* { dg-options "-O2" } */ +/* { dg-final { check-function-bodies "**" "" "" } } */ + +#include + +/* +** foo: +** movi d([0-9]+), #0 +** movprfx z0\.b, p0/z, z0\.b +** usqadd z0\.b, p0/m, z0\.b, z\1\.b +** ret +*/ +svuint8_t foo (svbool_t pg, svuint8_t op1) +{ + return svsqadd_u8_z (pg, op1, svdup_s8 (0)); +} + +/* +** bar: +** movi d([0-9]+), #0 +** movprfx z0\.b, p0/z, z0\.b +** suqadd z0\.b, p0/m, z0\.b, z\1\.b +** ret +*/ +svint8_t bar (svbool_t pg, svint8_t op1) +{ + return svuqadd_n_s8_z (pg, op1, 0); +} + diff --git a/gcc/testsuite/gcc.target/aarch64/torture/pr121772.c b/gcc/testsuite/gcc.target/aarch64/torture/pr121772.c new file mode 100644 index 000000000000..3b4cf4d7d189 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/torture/pr121772.c @@ -0,0 +1,5 @@ +/* { dg-do compile } */ +#include +int16_t f(int16x4_t b) { + return vaddvq_s16(vcombine_s16(b, vdup_n_s16 (0))); +} diff --git a/gcc/testsuite/gcc.target/aarch64/vect-addhn_1.c b/gcc/testsuite/gcc.target/aarch64/vect-addhn_1.c new file mode 100644 index 000000000000..0ea673e0e053 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/vect-addhn_1.c @@ -0,0 +1,86 @@ +/* { dg-require-effective-target vect_int } */ +/* { dg-options "-O3 -std=c99" } */ + +#include +#include + +#define N 1000 +#define CHECK_ERROR(cond, fmt, ...) \ + do { if (cond) { printf(fmt "\n", ##__VA_ARGS__); __builtin_abort (); } } while (0) + +// Generates all test components for a given type combo +#define TEST_COMBO(A_TYPE, C_TYPE, CAST_TYPE, SHIFT) \ + A_TYPE a_##A_TYPE##_##C_TYPE[N]; \ + A_TYPE b_##A_TYPE##_##C_TYPE[N]; \ + C_TYPE c_##A_TYPE##_##C_TYPE[N]; \ + C_TYPE ref_##A_TYPE##_##C_TYPE[N]; \ + \ + void init_##A_TYPE##_##C_TYPE() { \ + _Pragma ("GCC novector") \ + for (int i = 0; i < N; i++) { \ + a_##A_TYPE##_##C_TYPE[i] = (A_TYPE)(i * 3); \ + b_##A_TYPE##_##C_TYPE[i] = (A_TYPE)(i * 7); \ + } \ + } \ + \ + void foo_##A_TYPE##_##C_TYPE() { \ + for (int i = 0; i < N; i++) \ + c_##A_TYPE##_##C_TYPE[i] = \ + ((CAST_TYPE)a_##A_TYPE##_##C_TYPE[i] + \ + (CAST_TYPE)b_##A_TYPE##_##C_TYPE[i]) >> SHIFT; \ + } \ + \ + void ref_##A_TYPE##_##C_TYPE##_compute() { \ + _Pragma ("GCC novector") \ + for (int i = 0; i < N; i++) \ + ref_##A_TYPE##_##C_TYPE[i] = \ + ((CAST_TYPE)a_##A_TYPE##_##C_TYPE[i] + \ + (CAST_TYPE)b_##A_TYPE##_##C_TYPE[i]) >> SHIFT; \ + } \ + \ + void validate_##A_TYPE##_##C_TYPE(const char* variant_name) { \ + _Pragma ("GCC novector") \ + for (int i = 0; i < N; i++) { \ + if (c_##A_TYPE##_##C_TYPE[i] != ref_##A_TYPE##_##C_TYPE[i]) { \ + printf("FAIL [%s]: Index %d: got %lld, expected %lld\n", \ + variant_name, i, \ + (long long)c_##A_TYPE##_##C_TYPE[i], \ + (long long)ref_##A_TYPE##_##C_TYPE[i]); \ + __builtin_abort (); \ + } \ + } \ + } + +// Runs the test for one combo with name output +#define RUN_COMBO(A_TYPE, C_TYPE) \ + do { \ + init_##A_TYPE##_##C_TYPE(); \ + foo_##A_TYPE##_##C_TYPE(); \ + ref_##A_TYPE##_##C_TYPE##_compute(); \ + validate_##A_TYPE##_##C_TYPE(#A_TYPE " -> " #C_TYPE); \ + } while (0) + +// Instantiate all valid combinations +TEST_COMBO(int16_t, int8_t, int32_t, 8) +TEST_COMBO(uint16_t, uint8_t, uint32_t, 8) +TEST_COMBO(int32_t, int16_t, int64_t, 16) +TEST_COMBO(uint32_t, uint16_t, uint64_t, 16) +#if defined(__aarch64__) +TEST_COMBO(int64_t, int32_t, __int128_t, 32) +TEST_COMBO(uint64_t, uint32_t, unsigned __int128, 32) +#endif + +int main() { + + RUN_COMBO(int16_t, int8_t); + RUN_COMBO(uint16_t, uint8_t); + RUN_COMBO(int32_t, int16_t); + RUN_COMBO(uint32_t, uint16_t); +#if defined(__aarch64__) + RUN_COMBO(int64_t, int32_t); + RUN_COMBO(uint64_t, uint32_t); +#endif + + return 0; +} + diff --git a/gcc/testsuite/gcc.target/aarch64/vect-early-break-addhn_1.c b/gcc/testsuite/gcc.target/aarch64/vect-early-break-addhn_1.c new file mode 100644 index 000000000000..b22e7d9c49d3 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/vect-early-break-addhn_1.c @@ -0,0 +1,33 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-O3 -fdump-tree-vect-details -std=c99" } */ +/* { dg-final { check-function-bodies "**" "" "" } } */ + +#define TYPE int +#define N 800 + +#pragma GCC target "+nosve" + +TYPE a[N]; + +/* +** foo: +** ... +** ldp q[0-9]+, q[0-9]+, \[x[0-9]+\], 32 +** cmeq v[0-9]+.4s, v[0-9]+.4s, v[0-9]+.4s +** cmeq v[0-9]+.4s, v[0-9]+.4s, v[0-9]+.4s +** addhn v[0-9]+.4h, v[0-9]+.4s, v[0-9]+.4s +** fmov x[0-9]+, d[0-9]+ +** ... +*/ + +int foo () +{ +#pragma GCC unroll 8 + for (int i = 0; i < N; i++) + if (a[i] == 124) + return 1; + + return 0; +} + +/* { dg-final { scan-tree-dump "VEC_TRUNC_ADD_HIGH" "vect" } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/vect-early-break-addhn_2.c b/gcc/testsuite/gcc.target/aarch64/vect-early-break-addhn_2.c new file mode 100644 index 000000000000..31d2515dcb90 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/vect-early-break-addhn_2.c @@ -0,0 +1,33 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-O3 -fdump-tree-vect-details -std=c99" } */ +/* { dg-final { check-function-bodies "**" "" "" } } */ + +#define TYPE long long +#define N 800 + +#pragma GCC target "+nosve" + +TYPE a[N]; + +/* +** foo: +** ... +** ldp q[0-9]+, q[0-9]+, \[x[0-9]+\], 32 +** cmeq v[0-9]+.2d, v[0-9]+.2d, v[0-9]+.2d +** cmeq v[0-9]+.2d, v[0-9]+.2d, v[0-9]+.2d +** addhn v[0-9]+.2s, v[0-9]+.2d, v[0-9]+.2d +** fmov x[0-9]+, d[0-9]+ +** ... +*/ + +int foo () +{ +#pragma GCC unroll 4 + for (int i = 0; i < N; i++) + if (a[i] == 124) + return 1; + + return 0; +} + +/* { dg-final { scan-tree-dump "VEC_TRUNC_ADD_HIGH" "vect" } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/vect-early-break-addhn_3.c b/gcc/testsuite/gcc.target/aarch64/vect-early-break-addhn_3.c new file mode 100644 index 000000000000..375fe1788af7 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/vect-early-break-addhn_3.c @@ -0,0 +1,33 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-O3 -fdump-tree-vect-details -std=c99" } */ +/* { dg-final { check-function-bodies "**" "" "" } } */ + +#define TYPE short +#define N 800 + +#pragma GCC target "+nosve" + +TYPE a[N]; + +/* +** foo: +** ... +** ldp q[0-9]+, q[0-9]+, \[x[0-9]+\], 32 +** cmeq v[0-9]+.8h, v[0-9]+.8h, v[0-9]+.8h +** cmeq v[0-9]+.8h, v[0-9]+.8h, v[0-9]+.8h +** addhn v[0-9]+.8b, v[0-9]+.8h, v[0-9]+.8h +** fmov x[0-9]+, d[0-9]+ +** ... +*/ + +int foo () +{ +#pragma GCC unroll 16 + for (int i = 0; i < N; i++) + if (a[i] == 124) + return 1; + + return 0; +} + +/* { dg-final { scan-tree-dump "VEC_TRUNC_ADD_HIGH" "vect" } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/vect-early-break-addhn_4.c b/gcc/testsuite/gcc.target/aarch64/vect-early-break-addhn_4.c new file mode 100644 index 000000000000..e584bfac6271 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/vect-early-break-addhn_4.c @@ -0,0 +1,21 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-O3 -fdump-tree-vect-details -std=c99" } */ + +#define TYPE char +#define N 800 + +#pragma GCC target "+nosve" + +TYPE a[N]; + +int foo () +{ +#pragma GCC unroll 32 + for (int i = 0; i < N; i++) + if (a[i] == 124) + return 1; + + return 0; +} + +/* { dg-final { scan-tree-dump-not "VEC_TRUNC_ADD_HIGH" "vect" } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/vector-compare-5.c b/gcc/testsuite/gcc.target/aarch64/vector-compare-5.c index a1a601dc1958..7becd56f10c1 100644 --- a/gcc/testsuite/gcc.target/aarch64/vector-compare-5.c +++ b/gcc/testsuite/gcc.target/aarch64/vector-compare-5.c @@ -53,15 +53,13 @@ n (v4i *x, v4i const *y, v4i *z, v4i *t) } +/* { dg-final { scan-tree-dump-times "\\s*\\*tD\\.\\d+\\s*=\\s*\\{\\s*-1(?:,\\s*-1){3}\\s*\\}\\s*;" 1 "original" } } */ +/* { dg-final { scan-tree-dump-times "\\s*\\*tD\\.\\d+\\s*=\\s*\\{\\s*0(?:,\\s*0){3}\\s*\\}\\s*;" 3 "original" } } */ +/* { dg-final { scan-tree-dump-times "\\s*\\*zD\\.\\d+\\s*=\\s*\\{\\s*-1(?:,\\s*-1){3}\\s*\\}\\s*;" 2 "original" } } */ + /* { dg-final { scan-tree-dump ".*\\*zD\\.\\d+\\s*=\\s*VEC_COND_EXPR\\s*<\\s*\\*xD\\.\\d+\\s*>=\\s*VIEW_CONVERT_EXPR\\(\\*yD\\.\\d+\\)\\s*,\\s*\\{\\s*-1(,\\s*-1){3}\\s*\\}\\s*,\\s*\\{\\s*0(,\\s*0){3}\\s*\\}\\s*>\\s*;" "original" } } */ -/* { dg-final { scan-tree-dump ".*\\*tD\\.\\d+\\s*=\\s*\\{\\s*-1(,\\s*-1){3}\\s*\\}\\s*;" "original" } } */ /* { dg-final { scan-tree-dump ".*\\*zD\\.\\d+\\s*=\\s*VEC_COND_EXPR\\s*<\\s*\\*xD\\.\\d+\\s*==\\s*VIEW_CONVERT_EXPR\\(\\*yD\\.\\d+\\)\\s*,\\s*\\{\\s*-1(,\\s*-1){3}\\s*\\}\\s*,\\s*\\{\\s*0(,\\s*0){3}\\s*\\}\\s*>\\s*;" "original" } } */ /* { dg-final { scan-tree-dump ".*\\*tD\\.\\d+\\s*=\\s*VEC_COND_EXPR\\s*<\\s*\\*xD\\.\\d+\\s*<\\s*VIEW_CONVERT_EXPR\\(\\*yD\\.\\d+\\)\\s*,\\s*\\{\\s*-1(,\\s*-1){3}\\s*\\}\\s*,\\s*\\{\\s*0(,\\s*0){3}\\s*\\}\\s*>\\s*;" "original" } } */ -/* { dg-final { scan-tree-dump ".*\\*zD\\.\\d+\\s*=\\s*\\{\\s*-1(,\\s*-1){3}\\s*\\}\\s*;" "original" } } */ -/* { dg-final { scan-tree-dump ".*\\*tD\\.\\d+\\s*=\\s*\\{\\s*0(,\\s*0){3}\\s*\\}\\s*;" "original" } } */ /* { dg-final { scan-tree-dump ".*\\*zD\\.\\d+\\s*=\\s*VEC_COND_EXPR\\s*<\\s*\\*xD\\.\\d+\\s*<=\\s*VIEW_CONVERT_EXPR\\(\\*yD\\.\\d+\\)\\s*,\\s*\\{\\s*-1(,\\s*-1){3}\\s*\\}\\s*,\\s*\\{\\s*0(,\\s*0){3}\\s*\\}\\s*>\\s*;" "original" } } */ -/* { dg-final { scan-tree-dump ".*\\*tD\\.\\d+\\s*=\\s*\\{\\s*0(,\\s*0){3}\\s*\\}\\s*;" "original" } } */ /* { dg-final { scan-tree-dump ".*\\*zD\\.\\d+\\s*=\\s*VEC_COND_EXPR\\s*<\\s*\\*xD\\.\\d+\\s*!=\\s*VIEW_CONVERT_EXPR\\(\\*yD\\.\\d+\\)\\s*,\\s*\\{\\s*-1(,\\s*-1){3}\\s*\\}\\s*,\\s*\\{\\s*0(,\\s*0){3}\\s*\\}\\s*>\\s*;" "original" } } */ /* { dg-final { scan-tree-dump ".*\\*tD\\.\\d+\\s*=\\s*VEC_COND_EXPR\\s*<\\s*\\*xD\\.\\d+\\s*>=\\s*VIEW_CONVERT_EXPR\\(\\*yD\\.\\d+\\)\\s*,\\s*\\{\\s*-1(,\\s*-1){3}\\s*\\}\\s*,\\s*\\{\\s*0(,\\s*0){3}\\s*\\}\\s*>\\s*;" "original" } } */ -/* { dg-final { scan-tree-dump ".*\\*zD\\.\\d+\\s*=\\s*\\{\\s*-1(,\\s*-1){3}\\s*\\}\\s*;" "original" } } */ -/* { dg-final { scan-tree-dump ".*\\*tD\\.\\d+\\s*=\\s*\\{\\s*0(,\\s*0){3}\\s*\\}\\s*;" "original" } } */ diff --git a/gcc/testsuite/gcc.target/arm/acle/simd32.c b/gcc/testsuite/gcc.target/arm/acle/simd32.c index d9b337da35ba..50f7e775fd27 100644 --- a/gcc/testsuite/gcc.target/arm/acle/simd32.c +++ b/gcc/testsuite/gcc.target/arm/acle/simd32.c @@ -315,7 +315,7 @@ test_sadd16 (int16x2_t a, int16x2_t b) return __sadd16 (a, b); } -/* { dg-final { scan-assembler-times "\tsadd8\t...?, ...?, ...?" 1 } } */ +/* { dg-final { scan-assembler-times "\tsadd16\t...?, ...?, ...?" 1 } } */ int16x2_t test_sasx (int16x2_t a, int16x2_t b) diff --git a/gcc/testsuite/gcc.target/arm/armv8_2-fp16-neon-1.c b/gcc/testsuite/gcc.target/arm/armv8_2-fp16-neon-1.c index 4cdee1f4ca70..d32c723e5e3e 100644 --- a/gcc/testsuite/gcc.target/arm/armv8_2-fp16-neon-1.c +++ b/gcc/testsuite/gcc.target/arm/armv8_2-fp16-neon-1.c @@ -142,7 +142,7 @@ VCMP1_TEST (vceqz) VCMP1_TEST (vcgtz) /* { dg-final { scan-assembler-times {vcgt\.f16\td[0-9]+, d[0-9]+, #0} 1 } } */ -/* { dg-final { scan-assembler-times {vceq\.f16\tq[0-9]+, q[0-9]+, #0} 1 } } */ +/* { dg-final { scan-assembler-times {vcgt\.f16\tq[0-9]+, q[0-9]+, #0} 1 } } */ VCMP1_TEST (vcgez) /* { dg-final { scan-assembler-times {vcge\.f16\td[0-9]+, d[0-9]+, #0} 1 } } */ diff --git a/gcc/testsuite/gcc.target/arm/armv8_2-fp16-neon-2.c b/gcc/testsuite/gcc.target/arm/armv8_2-fp16-neon-2.c index d65f68774616..9e783046d2b4 100644 --- a/gcc/testsuite/gcc.target/arm/armv8_2-fp16-neon-2.c +++ b/gcc/testsuite/gcc.target/arm/armv8_2-fp16-neon-2.c @@ -2,6 +2,7 @@ /* { dg-require-effective-target arm_v8_2a_fp16_neon_ok } */ /* { dg-options "-O2 -ffast-math" } */ /* { dg-add-options arm_v8_2a_fp16_neon } */ +/* { dg-final { check-function-bodies "**" "" "" } } */ /* Test instructions generated for the FP16 vector intrinsics with -ffast-math */ @@ -143,7 +144,7 @@ VCMP1_TEST (vceqz) VCMP1_TEST (vcgtz) /* { dg-final { scan-assembler-times {vcgt\.f16\td[0-9]+, d[0-9]+, #0} 1 } } */ -/* { dg-final { scan-assembler-times {vceq\.f16\tq[0-9]+, q[0-9]+, #0} 1 } } */ +/* { dg-final { scan-assembler-times {vcgt\.f16\tq[0-9]+, q[0-9]+, #0} 1 } } */ VCMP1_TEST (vcgez) /* { dg-final { scan-assembler-times {vcge\.f16\td[0-9]+, d[0-9]+, #0} 1 } } */ @@ -187,43 +188,35 @@ VCVT_N_TEST (vcvt, _u16_f16, uint, float) VCVT_TEST (vcvta, _s16_f16, int, float) /* { dg-final { scan-assembler-times {vcvta\.s16\.f16\td[0-9]+, d[0-9]+} 1 } } - { dg-final { scan-assembler-times {vcvta\.s16\.f16\tq[0-9]+, q[0-9]+} 1 } } -*/ + { dg-final { scan-assembler-times {vcvta\.s16\.f16\tq[0-9]+, q[0-9]+} 1 } } */ VCVT_TEST (vcvta, _u16_f16, uint, float) /* { dg-final { scan-assembler-times {vcvta\.u16\.f16\td[0-9]+, d[0-9]+} 1 } } - { dg-final { scan-assembler-times {vcvta\.u16\.f16\tq[0-9]+, q[0-9]+} 1 } } -*/ + { dg-final { scan-assembler-times {vcvta\.u16\.f16\tq[0-9]+, q[0-9]+} 1 } } */ VCVT_TEST (vcvtm, _s16_f16, int, float) /* { dg-final { scan-assembler-times {vcvtm\.s16\.f16\td[0-9]+, d[0-9]+} 1 } } - { dg-final { scan-assembler-times {vcvtm\.s16\.f16\tq[0-9]+, q[0-9]+} 1 } } -*/ + { dg-final { scan-assembler-times {vcvtm\.s16\.f16\tq[0-9]+, q[0-9]+} 1 } } */ VCVT_TEST (vcvtm, _u16_f16, uint, float) /* { dg-final { scan-assembler-times {vcvtm\.u16\.f16\td[0-9]+, d[0-9]+} 1 } } - { dg-final { scan-assembler-times {vcvtm\.u16\.f16\tq[0-9]+, q[0-9]+} 1 } } -*/ + { dg-final { scan-assembler-times {vcvtm\.u16\.f16\tq[0-9]+, q[0-9]+} 1 } } */ VCVT_TEST (vcvtn, _s16_f16, int, float) /* { dg-final { scan-assembler-times {vcvtn\.s16\.f16\td[0-9]+, d[0-9]+} 1 } } - { dg-final { scan-assembler-times {vcvtn\.s16\.f16\tq[0-9]+, q[0-9]+} 1 } } -*/ + { dg-final { scan-assembler-times {vcvtn\.s16\.f16\tq[0-9]+, q[0-9]+} 1 } } */ VCVT_TEST (vcvtn, _u16_f16, uint, float) /* { dg-final { scan-assembler-times {vcvtn\.u16\.f16\td[0-9]+, d[0-9]+} 1 } } - { dg-final { scan-assembler-times {vcvtn\.u16\.f16\tq[0-9]+, q[0-9]+} 1 } } -*/ + { dg-final { scan-assembler-times {vcvtn\.u16\.f16\tq[0-9]+, q[0-9]+} 1 } } */ VCVT_TEST (vcvtp, _s16_f16, int, float) /* { dg-final { scan-assembler-times {vcvtp\.s16\.f16\td[0-9]+, d[0-9]+} 1 } } - { dg-final { scan-assembler-times {vcvtp\.s16\.f16\tq[0-9]+, q[0-9]+} 1 } } -*/ + { dg-final { scan-assembler-times {vcvtp\.s16\.f16\tq[0-9]+, q[0-9]+} 1 } } */ VCVT_TEST (vcvtp, _u16_f16, uint, float) /* { dg-final { scan-assembler-times {vcvtp\.u16\.f16\td[0-9]+, d[0-9]+} 1 } } - { dg-final { scan-assembler-times {vcvtp\.u16\.f16\tq[0-9]+, q[0-9]+} 1 } } -*/ + { dg-final { scan-assembler-times {vcvtp\.u16\.f16\tq[0-9]+, q[0-9]+} 1 } } */ UNOP_TEST (vabs) /* { dg-final { scan-assembler-times {vabs\.f16\td[0-9]+, d[0-9]+} 1 } } @@ -326,14 +319,42 @@ BINOP_TEST (vminnm) { dg-final { scan-assembler-times {vminnm\.f16\tq[0-9]+, q[0-9]+, q[0-9]+} 1 } } */ BINOP_TEST (vmul) -/* { dg-final { scan-assembler-times {vmul\.f16\td[0-9]+, d[0-9]+, d[0-9]+} 3 } } - { dg-final { scan-assembler-times {vmul\.f16\tq[0-9]+, q[0-9]+, q[0-9]+} 2 } } */ +/* +** test_vmul_16x4: +** ... +** vmul\.f16 d[0-9]+, d[0-9]+, d[0-9]+ +** ... +*/ +/* +** test_vmul_16x8: +** ... +** vmul\.f16 q[0-9]+, q[0-9]+, q[0-9]+ +** ... +*/ BINOP_LANE_TEST (vmul, 2) /* { dg-final { scan-assembler-times {vmul\.f16\td[0-9]+, d[0-9]+, d[0-9]+\[2\]} 1 } } { dg-final { scan-assembler-times {vmul\.f16\tq[0-9]+, q[0-9]+, d[0-9]+\[2\]} 1 } } */ BINOP_N_TEST (vmul) -/* { dg-final { scan-assembler-times {vmul\.f16\td[0-9]+, d[0-9]+, d[0-9]+} 3 } } - { dg-final { scan-assembler-times {vmul\.f16\tq[0-9]+, q[0-9]+, q[0-9]+} 2 } }*/ +/* +** test_vmul_n_16x4: +** ... +** vdup\.f?16 d[0-9]+, .+ +** ... +** vmul\.f16 d[0-9]+, d[0-9]+, d[0-9]+ +** ... +*/ +/* +** test_vmul_n_16x8: +** ... +** ( +** vdup\.f?16 q[0-9]+, .+ +** | +** vld1.16 {d[0-9]+\[\], d[0-9]+\[\]}, \[(sp|r[0-9]+)\] +** ) +** ... +** vmul\.f16 q[0-9]+, q[0-9]+, q[0-9]+ +** ... +*/ float16x4_t test_vpadd_16x4 (float16x4_t a, float16x4_t b) diff --git a/gcc/testsuite/gcc.target/arm/armv8_2-fp16-scalar-1.c b/gcc/testsuite/gcc.target/arm/armv8_2-fp16-scalar-1.c index 2eddb76f7f42..7340eebf1337 100644 --- a/gcc/testsuite/gcc.target/arm/armv8_2-fp16-scalar-1.c +++ b/gcc/testsuite/gcc.target/arm/armv8_2-fp16-scalar-1.c @@ -164,16 +164,16 @@ UNOP_TEST (vrnda) /* { dg-final { scan-assembler-times {vrinta\.f16\ts[0-9]+, s[0-9]+} 1 } } */ UNOP_TEST (vrndm) -/* { dg-final { scan-assembler-times {vrinta\.f16\ts[0-9]+, s[0-9]+} 1 } } */ +/* { dg-final { scan-assembler-times {vrintm\.f16\ts[0-9]+, s[0-9]+} 1 } } */ UNOP_TEST (vrndn) -/* { dg-final { scan-assembler-times {vrinta\.f16\ts[0-9]+, s[0-9]+} 1 } } */ +/* { dg-final { scan-assembler-times {vrintn\.f16\ts[0-9]+, s[0-9]+} 1 } } */ UNOP_TEST (vrndp) -/* { dg-final { scan-assembler-times {vrinta\.f16\ts[0-9]+, s[0-9]+} 1 } } */ +/* { dg-final { scan-assembler-times {vrintp\.f16\ts[0-9]+, s[0-9]+} 1 } } */ UNOP_TEST (vrndx) -/* { dg-final { scan-assembler-times {vrinta\.f16\ts[0-9]+, s[0-9]+} 1 } } */ +/* { dg-final { scan-assembler-times {vrintx\.f16\ts[0-9]+, s[0-9]+} 1 } } */ UNOP_TEST (vsqrt) /* { dg-final { scan-assembler-times {vsqrt\.f16\ts[0-9]+, s[0-9]+} 1 } } */ diff --git a/gcc/testsuite/gcc.target/arm/asm-flag-1.c b/gcc/testsuite/gcc.target/arm/asm-flag-1.c index 97104d3ac73a..0ecab616efe9 100644 --- a/gcc/testsuite/gcc.target/arm/asm-flag-1.c +++ b/gcc/testsuite/gcc.target/arm/asm-flag-1.c @@ -32,6 +32,6 @@ void f(char *out) /* { dg-final { scan-assembler "movhi" } } */ /* { dg-final { scan-assembler "movls" } } */ /* { dg-final { scan-assembler "movge" } } */ -/* { dg-final { scan-assembler "movls" } } */ +/* { dg-final { scan-assembler "movlt" } } */ /* { dg-final { scan-assembler "movgt" } } */ /* { dg-final { scan-assembler "movle" } } */ diff --git a/gcc/testsuite/gcc.target/arm/csneg.c b/gcc/testsuite/gcc.target/arm/csneg.c index cf3df13e7e4c..b542f43134a8 100644 --- a/gcc/testsuite/gcc.target/arm/csneg.c +++ b/gcc/testsuite/gcc.target/arm/csneg.c @@ -2,33 +2,54 @@ /* { dg-require-effective-target arm_arch_v8_1m_main_ok } */ /* { dg-options "-O2" } */ /* { dg-add-options arm_arch_v8_1m_main } */ +/* { dg-final { check-function-bodies "**" "" "" } } */ +/* +** test_csneg32_condasn1: +** cmp\tr0, r1 +** csneg\tr0, r3, r2, ne +** bx\tlr +*/ int test_csneg32_condasn1(int w0, int w1, int w2, int w3) { int w4; - - /* { dg-final { scan-assembler "csneg\tr\[0-9\]*.*ne" } } */ w4 = (w0 == w1) ? -w2 : w3; return w4; } +/* +** test_csneg32_condasn2: +** cmp\tr0, r1 +** csneg\tr0, r3, r2, eq +** bx\tlr +*/ int test_csneg32_condasn2(int w0, int w1, int w2, int w3) { int w4; - - /* { dg-final { scan-assembler "csneg\tr\[0-9\]*.*eq" } } */ w4 = (w0 == w1) ? w3 : -w2; return w4; } +/* +** test_csneg_uxtw: { target arm_little_endian } +** cmp\tr0, #0 +** csneg\tr0, r1, r2, ne +** movs\tr1, #0 +** bx\tlr +*/ +/* +** test_csneg_uxtw: { target { ! arm_little_endian } } +** cmp\tr0, #0 +** csneg\tr1, r1, r2, ne +** movs\tr0, #0 +** bx\tlr +*/ unsigned long long test_csneg_uxtw (unsigned int a, unsigned int b, unsigned int c) { unsigned int val; - - /* { dg-final { scan-assembler "csneg\tr\[0-9\]*.*ne" } } */ val = a ? b : -c; return val; } diff --git a/gcc/testsuite/gcc.target/arm/fp16-aapcs-1.c b/gcc/testsuite/gcc.target/arm/fp16-aapcs-1.c deleted file mode 100644 index b18d7cda65c8..000000000000 --- a/gcc/testsuite/gcc.target/arm/fp16-aapcs-1.c +++ /dev/null @@ -1,65 +0,0 @@ -/* { dg-do compile } */ -/* { dg-require-effective-target arm_hard_vfp_ok } */ -/* { dg-require-effective-target arm_fp16_ok } */ -/* { dg-options "-O2" } */ -/* { dg-add-options arm_fp16_ieee } */ -/* { dg-final { check-function-bodies "**" "" "" } } */ - -/* Test __fp16 arguments and return value in registers (hard-float). */ - -void -swap (__fp16, __fp16); - -/* -** F: -** ... -** ( - -Below block is for non-armv8.1 -** ( -** vmov\.f32 (s[3-9]|s1[0-5]), s0 -** ... -** vmov\.f32 s0, s1 -** ... -** vmov\.f32 s1, \1 -** | -** vmov\.f32 (s[3-9]|s1[0-5]), s1 -** ... -** vmov\.f32 s1, s0 -** ... -** vmov\.f32 s0, \2 -** ) -** vstr\.32 s2, \[sp, #4\] @ int -** bl swap -** vldr\.32 s2, \[sp, #4\] @ int -** vmov\.f32 s0, s2 - -** | - -Below block is for armv8.1 -** ( -** vmov (s[3-9]|s1[0-5]), s0 @ __fp16 -** ... -** vmov s0, s1 @ __fp16 -** ... -** vmov s1, \3 @ __fp16 -** | -** vmov (s[3-9]|s1[0-5]), s1 @ __fp16 -** ... -** vmov s1, s0 @ __fp16 -** ... -** vmov s0, \4 @ __fp16 -** ) -** vstr\.32 s2, \[sp, #4\] @ int -** bl swap -** vldr\.16 s0, \[sp, #4\] - -** ) -** ... -*/ -__fp16 -F (__fp16 a, __fp16 b, __fp16 c) -{ - swap (b, a); - return c; -} diff --git a/gcc/testsuite/gcc.target/arm/fp16-aapcs-2.c b/gcc/testsuite/gcc.target/arm/fp16-aapcs-2.c deleted file mode 100644 index 48510e895368..000000000000 --- a/gcc/testsuite/gcc.target/arm/fp16-aapcs-2.c +++ /dev/null @@ -1,44 +0,0 @@ -/* { dg-do compile } */ -/* { dg-require-effective-target arm_fp16_ok } */ -/* { dg-options "-mfloat-abi=softfp -O2 -mno-long-calls" } */ -/* { dg-add-options arm_fp16_ieee } */ -/* { dg-skip-if "incompatible float-abi" { arm*-*-* } { "-mfloat-abi=hard" } } */ -/* { dg-final { check-function-bodies "**" "" "" } } */ - -/* Test __fp16 arguments and return value in registers (softfp). */ - -void -swap (__fp16, __fp16); - -/* -** F: -** ... -** ( -** mov r3, r0 @ __fp16 -** ... -** mov r0, r1 @ __fp16 -** ... -** mov r1, r3 @ __fp16 -** | -** mov r3, r1 @ __fp16 -** ... -** mov r1, r0 @ __fp16 -** ... -** mov r0, r3 @ __fp16 -** ) -** ... -*/ -/* -** F: { target arm_little_endian } -** ... -** str r2, \[sp, #4\] -** bl swap -** ldrh r0, \[sp, #4\] @ __fp16 -** ... -*/ -__fp16 -F (__fp16 a, __fp16 b, __fp16 c) -{ - swap (b, a); - return c; -} diff --git a/gcc/testsuite/gcc.target/arm/fp16-aapcs-3.c b/gcc/testsuite/gcc.target/arm/fp16-aapcs-3.c deleted file mode 100644 index 7238ef3a02e0..000000000000 --- a/gcc/testsuite/gcc.target/arm/fp16-aapcs-3.c +++ /dev/null @@ -1,65 +0,0 @@ -/* { dg-do compile } */ -/* { dg-require-effective-target arm_hard_vfp_ok } */ -/* { dg-require-effective-target arm_fp16_alternative_ok } */ -/* { dg-options "-O2" } */ -/* { dg-add-options arm_fp16_alternative } */ -/* { dg-final { check-function-bodies "**" "" "" } } */ - -/* Test __fp16 arguments and return value in registers (hard-float). */ - -void -swap (__fp16, __fp16); - -/* -** F: -** ... -** ( - -Below block is for non-armv8.1 -** ( -** vmov\.f32 (s[3-9]|s1[0-5]), s0 -** ... -** vmov\.f32 s0, s1 -** ... -** vmov\.f32 s1, \1 -** | -** vmov\.f32 (s[3-9]|s1[0-5]), s1 -** ... -** vmov\.f32 s1, s0 -** ... -** vmov\.f32 s0, \2 -** ) -** vstr\.32 s2, \[sp, #4\] @ int -** bl swap -** vldr\.32 s2, \[sp, #4\] @ int -** vmov\.f32 s0, s2 - -** | - -Below block is for armv8.1 -** ( -** vmov (s[3-9]|s1[0-5]), s0 -** ... -** vmov s0, s1 -** ... -** vmov s1, \3 -** | -** vmov (s[3-9]|s1[0-5]), s1 -** ... -** vmov s1, s0 -** ... -** vmov s0, \4 -** ) -** vstr\.32 s2, \[sp, #4\] @ int -** bl swap -** vldr\.16 s0, \[sp, #4\] - -** ) -** ... -*/ -__fp16 -F (__fp16 a, __fp16 b, __fp16 c) -{ - swap (b, a); - return c; -} diff --git a/gcc/testsuite/gcc.target/arm/fp16-aapcs-4.c b/gcc/testsuite/gcc.target/arm/fp16-aapcs-4.c deleted file mode 100644 index 13f08d8afa32..000000000000 --- a/gcc/testsuite/gcc.target/arm/fp16-aapcs-4.c +++ /dev/null @@ -1,44 +0,0 @@ -/* { dg-do compile } */ -/* { dg-require-effective-target arm_fp16_alternative_ok } */ -/* { dg-options "-mfloat-abi=softfp -O2" } */ -/* { dg-add-options arm_fp16_alternative } */ -/* { dg-skip-if "incompatible float-abi" { arm*-*-* } { "-mfloat-abi=hard" } } */ -/* { dg-final { check-function-bodies "**" "" "" } } */ - -/* Test __fp16 arguments and return value in registers (softfp). */ - -void -swap (__fp16, __fp16); - -/* -** F: -** ... -** ( -** mov r3, r0 @ __fp16 -** ... -** mov r0, r1 @ __fp16 -** ... -** mov r1, r3 @ __fp16 -** | -** mov r3, r1 @ __fp16 -** ... -** mov r1, r0 @ __fp16 -** ... -** mov r0, r3 @ __fp16 -** ) -** ... -*/ -/* -** F: { target arm_little_endian } -** ... -** str r2, \[sp, #4\] -** bl swap -** ldrh r0, \[sp, #4\] @ __fp16 -** ... -*/ -__fp16 -F (__fp16 a, __fp16 b, __fp16 c) -{ - swap (b, a); - return c; -} diff --git a/gcc/testsuite/gcc.target/arm/fp16-aapcs.c b/gcc/testsuite/gcc.target/arm/fp16-aapcs.c new file mode 100644 index 000000000000..8c87d5dde313 --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/fp16-aapcs.c @@ -0,0 +1,24 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target arm_fp16_alternative_ok } */ +/* { dg-options "-O2" } */ +/* { dg-add-options arm_fp16_alternative } */ +/* { dg-final { check-function-bodies "**" "" "" } } */ + +/* Test __fp16 arguments and return value in registers. */ + +__fp16 f(); +void g(__fp16); +void h(); + +/* +** test: +** ... +** bl f +** bl g +** ... +*/ +int test() +{ + g(f()); + h(); +} diff --git a/gcc/testsuite/gcc.target/arm/mve/dlstp-compile-asm-2.c b/gcc/testsuite/gcc.target/arm/mve/dlstp-compile-asm-2.c index 210930447084..37c54f22abc3 100644 --- a/gcc/testsuite/gcc.target/arm/mve/dlstp-compile-asm-2.c +++ b/gcc/testsuite/gcc.target/arm/mve/dlstp-compile-asm-2.c @@ -326,8 +326,7 @@ void test10 (int32_t *a, int32_t *b, int32_t *c, int n) } /* We don't need that extra vctp in the loop, but we currently do not optimize - it away, however, it is not wrong to use it... -*/ + it away, however, it is not wrong to use it... */ /* ** test10: **... diff --git a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vgetq_lane_f16.c b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vgetq_lane_f16.c index a92e1d47393a..b0811372dc71 100644 --- a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vgetq_lane_f16.c +++ b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vgetq_lane_f16.c @@ -2,6 +2,7 @@ /* { dg-require-effective-target arm_v8_1m_mve_fp_ok } */ /* { dg-add-options arm_v8_1m_mve_fp } */ /* { dg-additional-options "-O2" } */ +/* { dg-final { check-function-bodies "**" "" "" } } */ #include "arm_mve.h" @@ -10,13 +11,37 @@ foo (float16x8_t a) { return vgetq_lane_f16 (a, 1); } - -/* { dg-final { scan-assembler "vmov.u16" } } */ +/* +** foo: +** ( + -mfloat-abi=softfp +** vmov\td[0-9]+, r0, r1 @ v8hf +** vmov\td[0-9]+, r2, r3 +** vmov\.u16\tr0, q[0-7]\[1\] +** | + -mfloat-abi=hard +** vmov\.u16\t(r[0-9]+), q0\[1\] +** vmov\.f16\ts0, \1\t@ __fp16 +** ) +** bx\tlr +*/ float16_t foo1 (float16x8_t a) { return vgetq_lane (a, 1); } - -/* { dg-final { scan-assembler "vmov.u16" } } */ +/* +** foo1: +** ( + -mfloat-abi=softfp +** vmov\td[0-9]+, r0, r1 @ v8hf +** vmov\td[0-9]+, r2, r3 +** vmov\.u16\tr0, q[0-7]\[1\] +** | + -mfloat-abi=hard +** vmov\.u16\t(r[0-9]+), q0\[1\] +** vmov\.f16\ts0, \1\t@ __fp16 +** ) +** bx\tlr +*/ diff --git a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vgetq_lane_f32.c b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vgetq_lane_f32.c index 98319eff5c0f..c923b9ecf260 100644 --- a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vgetq_lane_f32.c +++ b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vgetq_lane_f32.c @@ -2,6 +2,7 @@ /* { dg-require-effective-target arm_v8_1m_mve_fp_ok } */ /* { dg-add-options arm_v8_1m_mve_fp } */ /* { dg-additional-options "-O2" } */ +/* { dg-final { check-function-bodies "**" "" "" } } */ #include "arm_mve.h" @@ -10,13 +11,37 @@ foo (float32x4_t a) { return vgetq_lane_f32 (a, 1); } - -/* { dg-final { scan-assembler "vmov.32" } } */ +/* +** foo: +** ( + -mfloat-abi=softfp +** vmov\td[0-9]+, r0, r1 @ v4sf +** vmov\td[0-9]+, r2, r3 +** vmov\.32\tr0, q[0-7]\[1\] +** | + -mfloat-abi=hard +** vmov\.32\t(r[0-9]+), q0\[1\] +** vmov\ts0, \1 +** ) +** bx\tlr +*/ float32_t foo1 (float32x4_t a) { return vgetq_lane (a, 1); } - -/* { dg-final { scan-assembler "vmov.32" } } */ +/* +** foo1: +** ( + -mfloat-abi=softfp +** vmov\td[0-9]+, r0, r1 @ v4sf +** vmov\td[0-9]+, r2, r3 +** vmov\.32\tr0, q[0-7]\[1\] +** | + -mfloat-abi=hard +** vmov\.32\t(r[0-9]+), q0\[1\] +** vmov\ts0, \1 +** ) +** bx\tlr +*/ diff --git a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vgetq_lane_s16.c b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vgetq_lane_s16.c index c9eefeb9972e..4a8963744f8f 100644 --- a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vgetq_lane_s16.c +++ b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vgetq_lane_s16.c @@ -2,6 +2,7 @@ /* { dg-require-effective-target arm_v8_1m_mve_ok } */ /* { dg-add-options arm_v8_1m_mve } */ /* { dg-additional-options "-O2" } */ +/* { dg-final { check-function-bodies "**" "" "" } } */ #include "arm_mve.h" @@ -10,13 +11,35 @@ foo (int16x8_t a) { return vgetq_lane_s16 (a, 1); } - -/* { dg-final { scan-assembler "vmov.s16" } } */ +/* +** foo: +** ( + -mfloat-abi=softfp +** vmov\td[0-9]+, r0, r1 @ v8hi +** vmov\td[0-9]+, r2, r3 +** vmov\.s16\tr0, q[0-7]\[1\] +** | + -mfloat-abi=hard +** vmov\.s16\tr0, q0\[1\] +** ) +** bx\tlr +*/ int16_t foo1 (int16x8_t a) { return vgetq_lane (a, 1); } - -/* { dg-final { scan-assembler "vmov.s16" } } */ +/* +** foo1: +** ( + -mfloat-abi=softfp +** vmov\td[0-9]+, r0, r1 @ v8hi +** vmov\td[0-9]+, r2, r3 +** vmov\.s16\tr0, q[0-7]\[1\] +** | + -mfloat-abi=hard +** vmov\.s16\tr0, q0\[1\] +** ) +** bx\tlr +*/ diff --git a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vgetq_lane_s32.c b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vgetq_lane_s32.c index 0925a25bb45d..3a504e84382e 100644 --- a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vgetq_lane_s32.c +++ b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vgetq_lane_s32.c @@ -2,6 +2,7 @@ /* { dg-require-effective-target arm_v8_1m_mve_ok } */ /* { dg-add-options arm_v8_1m_mve } */ /* { dg-additional-options "-O2" } */ +/* { dg-final { check-function-bodies "**" "" "" } } */ #include "arm_mve.h" @@ -10,13 +11,35 @@ foo (int32x4_t a) { return vgetq_lane_s32 (a, 1); } - -/* { dg-final { scan-assembler "vmov.32" } } */ +/* +** foo: +** ( + -mfloat-abi=softfp +** vmov\td[0-9]+, r0, r1 @ v4si +** vmov\td[0-9]+, r2, r3 +** vmov\.32\tr0, q[0-7]\[1\] +** | + -mfloat-abi=hard +** vmov\.32\tr0, q0\[1\] +** ) +** bx\tlr +*/ int32_t foo1 (int32x4_t a) { return vgetq_lane (a, 1); } - -/* { dg-final { scan-assembler "vmov.32" } } */ +/* +** foo1: +** ( + -mfloat-abi=softfp +** vmov\td[0-9]+, r0, r1 @ v4si +** vmov\td[0-9]+, r2, r3 +** vmov\.32\tr0, q[0-7]\[1\] +** | + -mfloat-abi=hard +** vmov\.32\tr0, q0\[1\] +** ) +** bx\tlr +*/ diff --git a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vgetq_lane_s8.c b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vgetq_lane_s8.c index 5b76e3da5562..cd014b288774 100644 --- a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vgetq_lane_s8.c +++ b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vgetq_lane_s8.c @@ -2,6 +2,7 @@ /* { dg-require-effective-target arm_v8_1m_mve_ok } */ /* { dg-add-options arm_v8_1m_mve } */ /* { dg-additional-options "-O2" } */ +/* { dg-final { check-function-bodies "**" "" "" } } */ #include "arm_mve.h" @@ -10,13 +11,35 @@ foo (int8x16_t a) { return vgetq_lane_s8 (a, 1); } - -/* { dg-final { scan-assembler "vmov.s8" } } */ +/* +** foo: +** ( + -mfloat-abi=softfp +** vmov\td[0-9]+, r0, r1 @ v16qi +** vmov\td[0-9]+, r2, r3 +** vmov\.s8\tr0, q[0-7]\[1\] +** | + -mfloat-abi=hard +** vmov\.s8\tr0, q0\[1\] +** ) +** bx\tlr +*/ int8_t foo1 (int8x16_t a) { return vgetq_lane (a, 1); } - -/* { dg-final { scan-assembler "vmov.s8" } } */ +/* +** foo1: +** ( + -mfloat-abi=softfp +** vmov\td[0-9]+, r0, r1 @ v16qi +** vmov\td[0-9]+, r2, r3 +** vmov\.s8\tr0, q[0-7]\[1\] +** | + -mfloat-abi=hard +** vmov\.s8\tr0, q0\[1\] +** ) +** bx\tlr +*/ diff --git a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vgetq_lane_u16.c b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vgetq_lane_u16.c index c4a3fb0d3794..74b734051d41 100644 --- a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vgetq_lane_u16.c +++ b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vgetq_lane_u16.c @@ -2,6 +2,7 @@ /* { dg-require-effective-target arm_v8_1m_mve_ok } */ /* { dg-add-options arm_v8_1m_mve } */ /* { dg-additional-options "-O2" } */ +/* { dg-final { check-function-bodies "**" "" "" } } */ #include "arm_mve.h" @@ -10,13 +11,35 @@ foo (uint16x8_t a) { return vgetq_lane_u16 (a, 1); } - -/* { dg-final { scan-assembler "vmov.u16" } } */ +/* +** foo: +** ( + -mfloat-abi=softfp +** vmov\td[0-9]+, r0, r1 @ v8hi +** vmov\td[0-9]+, r2, r3 +** vmov\.u16\tr0, q[0-7]\[1\] +** | + -mfloat-abi=hard +** vmov\.u16\tr0, q0\[1\] +** ) +** bx\tlr +*/ uint16_t foo1 (uint16x8_t a) { return vgetq_lane (a, 1); } - -/* { dg-final { scan-assembler "vmov.u16" } } */ +/* +** foo1: +** ( + -mfloat-abi=softfp +** vmov\td[0-9]+, r0, r1 @ v8hi +** vmov\td[0-9]+, r2, r3 +** vmov\.u16\tr0, q[0-7]\[1\] +** | + -mfloat-abi=hard +** vmov\.u16\tr0, q0\[1\] +** ) +** bx\tlr +*/ diff --git a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vgetq_lane_u32.c b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vgetq_lane_u32.c index d79837023248..c4460e44b9ab 100644 --- a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vgetq_lane_u32.c +++ b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vgetq_lane_u32.c @@ -2,6 +2,7 @@ /* { dg-require-effective-target arm_v8_1m_mve_ok } */ /* { dg-add-options arm_v8_1m_mve } */ /* { dg-additional-options "-O2" } */ +/* { dg-final { check-function-bodies "**" "" "" } } */ #include "arm_mve.h" @@ -10,13 +11,35 @@ foo (uint32x4_t a) { return vgetq_lane_u32 (a, 1); } - -/* { dg-final { scan-assembler "vmov.32" } } */ +/* +** foo: +** ( + -mfloat-abi=softfp +** vmov\td[0-9]+, r0, r1 @ v4si +** vmov\td[0-9]+, r2, r3 +** vmov\.32\tr0, q[0-7]\[1\] +** | + -mfloat-abi=hard +** vmov\.32\tr0, q0\[1\] +** ) +** bx\tlr +*/ uint32_t foo1 (uint32x4_t a) { return vgetq_lane (a, 1); } - -/* { dg-final { scan-assembler "vmov.32" } } */ +/* +** foo1: +** ( + -mfloat-abi=softfp +** vmov\td[0-9]+, r0, r1 @ v4si +** vmov\td[0-9]+, r2, r3 +** vmov\.32\tr0, q[0-7]\[1\] +** | + -mfloat-abi=hard +** vmov\.32\tr0, q0\[1\] +** ) +** bx\tlr +*/ diff --git a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vgetq_lane_u8.c b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vgetq_lane_u8.c index 631d995dc17f..f3abf1e9c566 100644 --- a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vgetq_lane_u8.c +++ b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vgetq_lane_u8.c @@ -2,6 +2,7 @@ /* { dg-require-effective-target arm_v8_1m_mve_ok } */ /* { dg-add-options arm_v8_1m_mve } */ /* { dg-additional-options "-O2" } */ +/* { dg-final { check-function-bodies "**" "" "" } } */ #include "arm_mve.h" @@ -10,13 +11,35 @@ foo (uint8x16_t a) { return vgetq_lane_u8 (a, 1); } - -/* { dg-final { scan-assembler "vmov.u8" } } */ +/* +** foo: +** ( + -mfloat-abi=softfp +** vmov\td[0-9]+, r0, r1 @ v16qi +** vmov\td[0-9]+, r2, r3 +** vmov\.u8\tr0, q[0-7]\[1\] +** | + -mfloat-abi=hard +** vmov\.u8\tr0, q0\[1\] +** ) +** bx\tlr +*/ uint8_t foo1 (uint8x16_t a) { return vgetq_lane (a, 1); } - -/* { dg-final { scan-assembler "vmov.u8" } } */ +/* +** foo1: +** ( + -mfloat-abi=softfp +** vmov\td[0-9]+, r0, r1 @ v16qi +** vmov\td[0-9]+, r2, r3 +** vmov\.u8\tr0, q[0-7]\[1\] +** | + -mfloat-abi=hard +** vmov\.u8\tr0, q0\[1\] +** ) +** bx\tlr +*/ diff --git a/gcc/testsuite/gcc.target/avr/cmpdi-1.c b/gcc/testsuite/gcc.target/avr/cmpdi-1.c new file mode 100644 index 000000000000..e7f59c1a29e2 --- /dev/null +++ b/gcc/testsuite/gcc.target/avr/cmpdi-1.c @@ -0,0 +1,149 @@ +/* { dg-do run { target { ! avr_tiny } } } */ +/* { dg-additional-options { -std=gnu99 -Os -mcall-prologues } } */ + +typedef __INT8_TYPE__ int8_t; +typedef __UINT8_TYPE__ uint8_t; +typedef __UINT16_TYPE__ uint16_t; +typedef __UINT64_TYPE__ uint64_t; +typedef __INT64_TYPE__ int64_t; + +#define ARRAY_SIZE(X) (sizeof(X) / sizeof(*X)) + +const __flash uint64_t mant[] = + { + 0x0000000000000, + 0x0000000000001, + 0x0000000000100, + 0x0000000010000, + 0x0000001000000, + 0x0000100000000, + 0x0010000000000, + 0x1000000000000, + 0x00000000000ff, + 0x00000000000ff, + 0x000000000ffff, + 0x0000000ffffff, + 0x00000ffffffff, + 0x000ffffffffff, + 0x0ffffffffffff, + 0xfffffffffffff, + 0xfffffffffff00, + 0xfffffffff0000, + 0xfffffff000000, + 0xfffff00000000, + 0xfff0000000000, + 0xff00000000000, + 0xf000000000000, + 0x7ffffffffffff, + 0x8000000000000, + 0x8000000000001, + 0xffffffffffffe + }; + +const __flash uint16_t expo[] = + { + 0x000, + 0x001, + 0x002, + 0x7fe, + 0x7ff + }; + +#define SMASK ((uint64_t) 1 << 63) +#define xNAN 0x7f + +char d64_nan_p (uint64_t a) +{ + return (a & ~SMASK) > (uint64_t) 0x7ff << 52; +} + +int8_t cmp_d64 (uint64_t a, uint64_t b) +{ + if (d64_nan_p (a) || d64_nan_p (b)) + return xNAN; + + if (a & SMASK) a = SMASK - a; + if (b & SMASK) b = SMASK - b; + __asm ("" : "+r" (a)); + __asm ("" : "+r" (b)); + + return a == b + ? 0 + : (int64_t) a > (int64_t) b ? 1 : -1; +} + +extern int8_t eq (uint64_t, uint64_t) __asm("__eqdf2"); +extern int8_t ne (uint64_t, uint64_t) __asm("__nedf2"); +extern int8_t ge (uint64_t, uint64_t) __asm("__gedf2"); +extern int8_t gt (uint64_t, uint64_t) __asm("__gtdf2"); +extern int8_t le (uint64_t, uint64_t) __asm("__ledf2"); +extern int8_t lt (uint64_t, uint64_t) __asm("__ltdf2"); +extern int8_t unord (uint64_t, uint64_t) __asm("__unorddf2"); + +void test1 (uint64_t a, uint64_t b) +{ + int8_t d, c = cmp_d64 (a, b); + d = eq (a, b); + if (c == xNAN && d) __builtin_exit (1); + if (c != xNAN && d != (c == 0)) __builtin_exit (2); + + d = ne (a, b); + if (c == xNAN && d) __builtin_exit (3); + if (c != xNAN && d != (c != 0)) __builtin_exit (4); + + d = ge (a, b); + if (c == xNAN && d) __builtin_exit (5); + if (c != xNAN && d != (c >= 0)) __builtin_exit (6); + + d = gt (a, b); + if (c == xNAN && d) __builtin_exit (7); + if (c != xNAN && d != (c > 0)) __builtin_exit (8); + + d = le (a, b); + if (c == xNAN && d) __builtin_exit (9); + if (c != xNAN && d != (c <= 0)) __builtin_exit (10); + + d = lt (a, b); + if (c == xNAN && d) __builtin_exit (11); + if (c != xNAN && d != (c < 0)) __builtin_exit (12); + + d = unord (a, b); + if (c == xNAN && !d) __builtin_exit (13); + if (c != xNAN && d) __builtin_exit (14); +} + + +void testAB (uint64_t a, uint64_t b) +{ + test1 (a, b); + test1 (a, b ^ SMASK); + test1 (a ^ SMASK, b); + test1 (a ^ SMASK, b ^ SMASK); +} + +void testA (uint64_t a) +{ + for (uint8_t i = 0; i < ARRAY_SIZE (mant); ++i) + { + uint64_t b = mant[i]; + for (uint8_t j = 0; j < ARRAY_SIZE (expo); ++j) + testAB (a, b | ((uint64_t) expo[j] << 52)); + } +} + +void tests (void) +{ + for (uint8_t i = 0; i < ARRAY_SIZE (mant); ++i) + { + uint64_t a = mant[i]; + for (uint8_t j = 0; j < ARRAY_SIZE (expo); ++j) + testA (a | ((uint64_t) expo[j] << 52)); + } +} + + +int main (void) +{ + tests (); + return 0; +} diff --git a/gcc/testsuite/gcc.target/avr/dtofx.c b/gcc/testsuite/gcc.target/avr/dtofx.c new file mode 100644 index 000000000000..f7e28159f920 --- /dev/null +++ b/gcc/testsuite/gcc.target/avr/dtofx.c @@ -0,0 +1,98 @@ +/* { dg-do run { target { ! avr_tiny } } } */ +/* { dg-additional-options { -std=gnu99 -Os -mcall-prologues -Wno-pedantic } } */ + +#include + +#if __SIZEOF_LONG_DOUBLE__ == 8 + +typedef long double D; + +volatile D d0 = 0; +volatile D dm15 = -1.5; +volatile D dp15 = +1.5; +volatile D dm05 = -0.5; +volatile D dp05 = +0.5; + +void test0 (void) +{ + if (0hk != (short accum) d0) + __builtin_exit (__LINE__); + + if (0uhk != (unsigned short accum) d0) + __builtin_exit (__LINE__); + + if (0hr != (short fract) d0) + __builtin_exit (__LINE__); + + if (0uhr != (unsigned short fract) d0) + __builtin_exit (__LINE__); + + if (0k != (accum) d0) + __builtin_exit (__LINE__); + + if (0uk != (unsigned accum) d0) + __builtin_exit (__LINE__); + + if (0r != (fract) d0) + __builtin_exit (__LINE__); + + if (0ur != (unsigned fract) d0) + __builtin_exit (__LINE__); +} + +void testp (void) +{ + if (0.5hr != (short fract) dp05) + __builtin_exit (__LINE__); + + if (0.5uhr != (unsigned short fract) dp05) + __builtin_exit (__LINE__); + + if (0.5r != (fract) dp05) + __builtin_exit (__LINE__); + + if (0.5ur != (unsigned fract) dp05) + __builtin_exit (__LINE__); + + if (1.5hk != (short accum) dp15) + __builtin_exit (__LINE__); + + if (1.5uhk != (unsigned short accum) dp15) + __builtin_exit (__LINE__); + + if (1.5k != (accum) dp15) + __builtin_exit (__LINE__); + + if (1.5uk != (unsigned accum) dp15) + __builtin_exit (__LINE__); +} + +void testm (void) +{ + if (-0.5hr != (short fract) dm05) + __builtin_exit (__LINE__); + + if (-0.5r != (fract) dm05) + __builtin_exit (__LINE__); + + if (-1.5hk != (short accum) dm15) + __builtin_exit (__LINE__); + + if (-1.5k != (accum) dm15) + __builtin_exit (__LINE__); +} + +int main (void) +{ + test0 (); + testp (); + testm (); + + return 0; +} +#else +int main (void) +{ + return 0; +} +#endif diff --git a/gcc/testsuite/gcc.target/avr/fminfmax-1.c b/gcc/testsuite/gcc.target/avr/fminfmax-1.c new file mode 100644 index 000000000000..eba910cff8c3 --- /dev/null +++ b/gcc/testsuite/gcc.target/avr/fminfmax-1.c @@ -0,0 +1,116 @@ +/* { dg-do run { target { ! avr_tiny } } } */ +/* { dg-additional-options { -std=gnu99 -Os -mcall-prologues } } */ + +typedef __INT8_TYPE__ int8_t; +typedef __UINT8_TYPE__ uint8_t; +typedef __UINT16_TYPE__ uint16_t; +typedef __UINT64_TYPE__ uint64_t; +typedef __INT64_TYPE__ int64_t; + +#define ARRAY_SIZE(X) (sizeof(X) / sizeof(*X)) + +const __flash uint64_t vals[] = + { + // NaNs + 0xffffffffffffffff, + 0x7fffffffffffffff, + 0xfff0000000000001, + 0x7ff0000000000001, + + // Some non-NaN doubles, increasing in magnitude. + 0xfff0000000000000, // -Inf + 0xffefffffffffffff, + 0xffe0000000000000, + 0x8010000000000000, + 0x800fffffffffffff, + 0x800ffffffffffffe, + 0x8007fffffffffffe, + 0x8000000000000001, + 0x0000000000000000, + 0x0000000000000001, + 0x0007fffffffffffe, + 0x000ffffffffffffe, + 0x000fffffffffffff, + 0x0010000000000000, + 0x7fe0000000000000, + 0x7fefffffffffffff, + 0x7ff0000000000000 // +Inf + }; + +#define SMASK ((uint64_t) 1 << 63) + +char d64_nan_p (uint64_t a) +{ + return (a & ~SMASK) > (uint64_t) 0x7ff << 52; +} + +extern uint64_t xmin (uint64_t, uint64_t) __asm("__fmin"); +extern uint64_t xmax (uint64_t, uint64_t) __asm("__fmax"); + +void test_fmin (uint8_t i, uint8_t j) +{ + uint64_t a = vals[i]; + uint64_t b = vals[j]; + uint64_t m = xmin (a, b); + + char a_nan_p = d64_nan_p (a); + char b_nan_p = d64_nan_p (b); + + if (a_nan_p + b_nan_p == 2) + { + if (!d64_nan_p (m)) + __builtin_exit (__LINE__); + } + else + { + uint64_t r = 0?0 + : a_nan_p ? b + : b_nan_p ? a + : i < j ? a : b; + if (r != m) + __builtin_exit (__LINE__); + } +} + + +void test_fmax (uint8_t i, uint8_t j) +{ + uint64_t a = vals[i]; + uint64_t b = vals[j]; + uint64_t m = xmax (a, b); + + char a_nan_p = d64_nan_p (a); + char b_nan_p = d64_nan_p (b); + + if (a_nan_p + b_nan_p == 2) + { + if (!d64_nan_p (m)) + __builtin_exit (__LINE__); + } + else + { + uint64_t r = 0?0 + : a_nan_p ? b + : b_nan_p ? a + : i > j ? a : b; + if (r != m) + __builtin_exit (__LINE__); + } +} + + +void tests (void) +{ + for (uint8_t i = 0; i < ARRAY_SIZE (vals); ++i) + for (uint8_t j = 0; j < ARRAY_SIZE (vals); ++j) + { + test_fmin (i, j); + } +} + + +int main (void) +{ + tests (); + return 0; +} diff --git a/gcc/testsuite/gcc.target/avr/fxtod.c b/gcc/testsuite/gcc.target/avr/fxtod.c new file mode 100644 index 000000000000..e069a312290d --- /dev/null +++ b/gcc/testsuite/gcc.target/avr/fxtod.c @@ -0,0 +1,115 @@ +/* { dg-do run { target { ! avr_tiny } } } */ +/* { dg-additional-options { -std=gnu99 -Os -mcall-prologues -fwrapv -Wno-overflow } } */ + +#include + +#if __SIZEOF_LONG_DOUBLE__ == 8 + +#define NI __attribute__((noipa)) + +typedef long double D; + +extern D ldexpl (D, int); + +typedef short fract hr_t; +typedef unsigned short fract uhr_t; +typedef fract r_t; +typedef unsigned fract ur_t; + +typedef short accum hk_t; +typedef unsigned short accum uhk_t; +typedef accum k_t; +typedef unsigned accum uk_t; + +#define FBITuhr 8 +#define FBIThr 7 +#define FBITur 16 +#define FBITr 15 + +#define FBITuhk 8 +#define FBIThk 7 +#define FBITuk 16 +#define FBITk 15 + +#define VALff(S) ((2ul << (8 * sizeof (S##bits(0)) - 1)) - 1) +#define VAL80(S) (1ul << (8 * sizeof (S##bits(0)) - 1)) +#define VAL00(S) 0 +#define VAL01(S) 1 + + +#define TEST_U(S, V) \ + NI void test_##S##_##V (void) \ + { \ + S##_t x = S##bits (VAL##V (S)); \ + __asm ("" : "+r" (x)); \ + D d = (D) x; \ + D z = ldexpl (VAL##V (S), - FBIT##S); \ + if (d != z) \ + __builtin_exit (1); \ + } + +#define TEST_S(S, V) \ + NI void test_##S##_##V (void) \ + { \ + uint32_t u32 = (VAL##V (S) & VAL80 (S)) \ + ? 1u + (VAL##V (S) ^ VALff (S)) \ + : VAL##V (S); \ + S##_t x = S##bits (VAL##V (S)); \ + __asm ("" : "+r" (x)); \ + D d = (D) x; \ + D z = ldexpl (u32, - FBIT##S); \ + int s = (VAL##V (S) & VAL80 (S)) != 0; \ + if (s == 0 && d != z) \ + __builtin_exit (2); \ + if (s == 1 && d != -z) \ + __builtin_exit (3); \ + } + +#define TESTS_U(S) \ + TEST_U (S, 00) \ + TEST_U (S, 01) \ + TEST_U (S, ff) \ + TEST_U (S, 80) + +#define TESTS_S(S) \ + TEST_S (S, 00) \ + TEST_S (S, 01) \ + TEST_S (S, ff) \ + TEST_S (S, 80) + +TESTS_U (uhr) +TESTS_U (ur) +TESTS_U (uhk) +TESTS_U (uk) + +TESTS_S (hr) +TESTS_S (r) +TESTS_S (hk) +TESTS_S (k) + +#define RUN(S) \ + test_##S##_00 (); \ + test_##S##_01 (); \ + test_##S##_ff (); \ + test_##S##_80 () + +int main (void) +{ + RUN (uhr); + RUN (ur); + RUN (uhk); + RUN (uk); + + RUN (hr); + RUN (r); + RUN (hk); + RUN (k); + + return 0; +} +#else +int main (void) +{ + return 0; +} +#endif diff --git a/gcc/testsuite/gcc.target/avr/sincos-1.c b/gcc/testsuite/gcc.target/avr/sincos-1.c new file mode 100644 index 000000000000..3cf543cee2e6 --- /dev/null +++ b/gcc/testsuite/gcc.target/avr/sincos-1.c @@ -0,0 +1,35 @@ +/* { dg-do run { target { ! avr_tiny } } } */ +/* { dg-additional-options { -std=gnu99 -Os -mcall-prologues } } */ + +#if __SIZEOF_LONG_DOUBLE__ == 8 +typedef long double D; + +extern void sincosl (D, D*, D*); +extern D sinl (D); +extern D cosl (D); + +D s1, c1; + +int main (void) +{ + for (D x = -20; x < 20; x += 1.1) + { + sincosl (x, &s1, &c1); + + __asm ("" : "+r" (x) :: "memory"); + + if (s1 != sinl (x)) + __builtin_exit (1); + + if (c1 != cosl (x)) + __builtin_exit (2); + } + + return 0; +} +#else +int main (void) +{ + return 0; +} +#endif diff --git a/gcc/testsuite/gcc.target/avr/torture/pr122187.c b/gcc/testsuite/gcc.target/avr/torture/pr122187.c new file mode 100644 index 000000000000..0f781eb1a64d --- /dev/null +++ b/gcc/testsuite/gcc.target/avr/torture/pr122187.c @@ -0,0 +1,17 @@ +/* { dg-do compile } */ +/* { dg-additional-options { -std=c99 } } */ + +typedef __UINT32_TYPE__ uint32_t; +typedef __UINT16_TYPE__ uint16_t; +typedef __UINT8_TYPE__ uint8_t; + +#define PINB (*(volatile uint8_t*) (13 + __AVR_SFR_OFFSET__)) +#define PB1 1 + +uint16_t fun (void) +{ + uint16_t h = 0; + for (uint32_t s = 0; s < 0x10000; ++s) + h += (PINB >> PB1) & 1; + return h; +} diff --git a/gcc/testsuite/gcc.target/i386/avx256_avoid_vec_perm-2.c b/gcc/testsuite/gcc.target/i386/avx256_avoid_vec_perm-2.c new file mode 100644 index 000000000000..8d4e641444d2 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/avx256_avoid_vec_perm-2.c @@ -0,0 +1,21 @@ +/* { dg-do compile } */ +/* { dg-options "-march=sierraforest -O2 -fdump-tree-slp-details" } */ +/* { dg-final { scan-tree-dump-times {(?n)Detected avx256 cross-lane permutation} 1 "slp2" } } */ + +void +foo (double* a, double* __restrict b, int c, int n) +{ + a[0] = b[100] * b[2]; + a[1] = b[100] * b[3]; + a[2] = b[100] * b[0]; + a[3] = b[100] * b[1]; +} + +void +foo1 (double* a, double* __restrict b, int c, int n) +{ + a[0] = b[100] * b[0]; + a[1] = b[100] * b[1]; + a[2] = b[100] * b[3]; + a[3] = b[100] * b[2]; +} diff --git a/gcc/testsuite/gcc.target/i386/avx256_avoid_vec_perm-3.c b/gcc/testsuite/gcc.target/i386/avx256_avoid_vec_perm-3.c new file mode 100644 index 000000000000..cb1328ce2d0b --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/avx256_avoid_vec_perm-3.c @@ -0,0 +1,24 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -march=sierraforest -fdump-tree-vect-details" } */ +/* { dg-final { scan-tree-dump "loop vectorized using 32 byte vectors" "vect" { xfail *-*-* } } } */ +/* { dg-final { scan-assembler "vpermilps" { xfail *-*-* } } } */ +/* { dg-final { scan-assembler-not "vpermd" } } */ + +int a[256], b[256]; + +void __attribute__((noinline)) +foo (void) +{ + int i; + for (i = 0; i < 32; ++i) + { + b[i*8+0] = a[i*8+0]; + b[i*8+1] = a[i*8+0]; + b[i*8+2] = a[i*8+3]; + b[i*8+3] = a[i*8+3]; + b[i*8+4] = a[i*8+4]; + b[i*8+5] = a[i*8+6]; + b[i*8+6] = a[i*8+4]; + b[i*8+7] = a[i*8+6]; + } +} diff --git a/gcc/testsuite/gcc.target/i386/avx256_avoid_vec_perm-4.c b/gcc/testsuite/gcc.target/i386/avx256_avoid_vec_perm-4.c new file mode 100644 index 000000000000..016771ab743c --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/avx256_avoid_vec_perm-4.c @@ -0,0 +1,21 @@ +/* { dg-do compile } */ +/* { dg-options "-mavx2 -O2" } */ +/* { dg-final { scan-assembler-times {(?n)vpermilp[ds]} 2} } */ +/* { dg-final { scan-assembler-not {(?n)vperm[dq]} } } */ + + +typedef long long v4di __attribute__((vector_size(32))); +typedef int v8si __attribute__((vector_size(32))); + +v4di +foo (v4di a) +{ + return __builtin_shufflevector (a, a, 1, 0, 3, 2); +} + +v8si +foo1 (v8si a) +{ + return __builtin_shufflevector (a, a, 1, 0, 3, 2, 7, 6, 5, 4); +} + diff --git a/gcc/testsuite/gcc.target/i386/avx256_avoid_vec_perm-5.c b/gcc/testsuite/gcc.target/i386/avx256_avoid_vec_perm-5.c new file mode 100644 index 000000000000..c11bea8c7b36 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/avx256_avoid_vec_perm-5.c @@ -0,0 +1,24 @@ +/* { dg-do compile } */ +/* { dg-options "-march=sierraforest -Ofast" } */ +/* { dg-final { scan-assembler-not {(?n)vpermpd.*%ymm} } } */ + +typedef struct { + unsigned short m1, m2, m3, m4; +} the_struct_t; +typedef struct { + double m1, m2, m3, m4, m5; +} the_struct2_t; + +double bar1 (the_struct2_t*); + +double foo (double* k, unsigned int n, the_struct_t* the_struct) { + unsigned int u; + the_struct2_t result; + for (u=0; u < n; u++, k--) { + result.m1 += (*k)*the_struct[u].m1; + result.m2 += (*k)*the_struct[u].m2; + result.m3 += (*k)*the_struct[u].m3; + result.m4 += (*k)*the_struct[u].m4; + } + return bar1 (&result); +} diff --git a/gcc/testsuite/gcc.target/i386/avx256_avoid_vec_perm.c b/gcc/testsuite/gcc.target/i386/avx256_avoid_vec_perm.c index d4f00b3fb520..e0399041ad9d 100644 --- a/gcc/testsuite/gcc.target/i386/avx256_avoid_vec_perm.c +++ b/gcc/testsuite/gcc.target/i386/avx256_avoid_vec_perm.c @@ -13,7 +13,7 @@ foo (void) b[i*8+0] = a[i*8+0]; b[i*8+1] = a[i*8+0]; b[i*8+2] = a[i*8+3]; - b[i*8+3] = a[i*8+3]; + b[i*8+3] = a[i*8+5]; b[i*8+4] = a[i*8+4]; b[i*8+5] = a[i*8+6]; b[i*8+6] = a[i*8+4]; diff --git a/gcc/testsuite/gcc.target/i386/avx512bw-vpackssdw-1.c b/gcc/testsuite/gcc.target/i386/avx512bw-vpackssdw-1.c index 70bef644d523..4bb0be1258cf 100644 --- a/gcc/testsuite/gcc.target/i386/avx512bw-vpackssdw-1.c +++ b/gcc/testsuite/gcc.target/i386/avx512bw-vpackssdw-1.c @@ -4,8 +4,8 @@ /* { dg-final { scan-assembler-times "vpackssdw\[ \\t\]+\[^\{\n\]*%zmm\[0-9\]+\{%k\[1-7\]\}(?:\n|\[ \\t\]+#)" 1 } } */ /* { dg-final { scan-assembler-times "vpackssdw\[ \\t\]+\[^\{\n\]*%zmm\[0-9\]+\{%k\[1-7\]\}{z}(?:\n|\[ \\t\]+#)" 1 } } */ /* { dg-final { scan-assembler-times "vpackssdw\[ \\t\]+\[^\{\n\]*%ymm\[0-9\]+\{%k\[1-7\]\}(?:\n|\[ \\t\]+#)" 1 } } */ -/* { dg-final { scan-assembler-times "vpackssdw\[ \\t\]+\[^\{\n\]*%ymm\[0-9\]+\{%k\[1-7\]\}(?:\n|\[ \\t\]+#)" 1 } } */ -/* { dg-final { scan-assembler-times "vpackssdw\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+\{%k\[1-7\]\}{z}(?:\n|\[ \\t\]+#)" 1 } } */ +/* { dg-final { scan-assembler-times "vpackssdw\[ \\t\]+\[^\{\n\]*%ymm\[0-9\]+\{%k\[1-7\]\}{z}(?:\n|\[ \\t\]+#)" 1 } } */ +/* { dg-final { scan-assembler-times "vpackssdw\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+\{%k\[1-7\]\}(?:\n|\[ \\t\]+#)" 1 } } */ /* { dg-final { scan-assembler-times "vpackssdw\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+\{%k\[1-7\]\}{z}(?:\n|\[ \\t\]+#)" 1 } } */ diff --git a/gcc/testsuite/gcc.target/i386/avx512bw-vpacksswb-1.c b/gcc/testsuite/gcc.target/i386/avx512bw-vpacksswb-1.c index b867dcb1320c..a59502c9493d 100644 --- a/gcc/testsuite/gcc.target/i386/avx512bw-vpacksswb-1.c +++ b/gcc/testsuite/gcc.target/i386/avx512bw-vpacksswb-1.c @@ -4,8 +4,8 @@ /* { dg-final { scan-assembler-times "vpacksswb\[ \\t\]+\[^\{\n\]*%zmm\[0-9\]+\{%k\[1-7\]\}(?:\n|\[ \\t\]+#)" 1 } } */ /* { dg-final { scan-assembler-times "vpacksswb\[ \\t\]+\[^\{\n\]*%zmm\[0-9\]+\{%k\[1-7\]\}{z}(?:\n|\[ \\t\]+#)" 1 } } */ /* { dg-final { scan-assembler-times "vpacksswb\[ \\t\]+\[^\{\n\]*%ymm\[0-9\]+\{%k\[1-7\]\}(?:\n|\[ \\t\]+#)" 1 } } */ -/* { dg-final { scan-assembler-times "vpacksswb\[ \\t\]+\[^\{\n\]*%ymm\[0-9\]+\{%k\[1-7\]\}(?:\n|\[ \\t\]+#)" 1 } } */ -/* { dg-final { scan-assembler-times "vpacksswb\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+\{%k\[1-7\]\}{z}(?:\n|\[ \\t\]+#)" 1 } } */ +/* { dg-final { scan-assembler-times "vpacksswb\[ \\t\]+\[^\{\n\]*%ymm\[0-9\]+\{%k\[1-7\]\}{z}(?:\n|\[ \\t\]+#)" 1 } } */ +/* { dg-final { scan-assembler-times "vpacksswb\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+\{%k\[1-7\]\}(?:\n|\[ \\t\]+#)" 1 } } */ /* { dg-final { scan-assembler-times "vpacksswb\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+\{%k\[1-7\]\}{z}(?:\n|\[ \\t\]+#)" 1 } } */ diff --git a/gcc/testsuite/gcc.target/i386/avx512bw-vpackusdw-1.c b/gcc/testsuite/gcc.target/i386/avx512bw-vpackusdw-1.c index 2421b5cfff9b..035ad3f2d340 100644 --- a/gcc/testsuite/gcc.target/i386/avx512bw-vpackusdw-1.c +++ b/gcc/testsuite/gcc.target/i386/avx512bw-vpackusdw-1.c @@ -4,8 +4,8 @@ /* { dg-final { scan-assembler-times "vpackusdw\[ \\t\]+\[^\{\n\]*%zmm\[0-9\]+\{%k\[1-7\]\}(?:\n|\[ \\t\]+#)" 1 } } */ /* { dg-final { scan-assembler-times "vpackusdw\[ \\t\]+\[^\{\n\]*%zmm\[0-9\]+\{%k\[1-7\]\}{z}(?:\n|\[ \\t\]+#)" 1 } } */ /* { dg-final { scan-assembler-times "vpackusdw\[ \\t\]+\[^\{\n\]*%ymm\[0-9\]+\{%k\[1-7\]\}(?:\n|\[ \\t\]+#)" 1 } } */ -/* { dg-final { scan-assembler-times "vpackusdw\[ \\t\]+\[^\{\n\]*%ymm\[0-9\]+\{%k\[1-7\]\}(?:\n|\[ \\t\]+#)" 1 } } */ -/* { dg-final { scan-assembler-times "vpackusdw\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+\{%k\[1-7\]\}{z}(?:\n|\[ \\t\]+#)" 1 } } */ +/* { dg-final { scan-assembler-times "vpackusdw\[ \\t\]+\[^\{\n\]*%ymm\[0-9\]+\{%k\[1-7\]\}{z}(?:\n|\[ \\t\]+#)" 1 } } */ +/* { dg-final { scan-assembler-times "vpackusdw\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+\{%k\[1-7\]\}(?:\n|\[ \\t\]+#)" 1 } } */ /* { dg-final { scan-assembler-times "vpackusdw\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+\{%k\[1-7\]\}{z}(?:\n|\[ \\t\]+#)" 1 } } */ diff --git a/gcc/testsuite/gcc.target/i386/avx512bw-vpackuswb-1.c b/gcc/testsuite/gcc.target/i386/avx512bw-vpackuswb-1.c index 122a6a084cc3..d2027ca02bc5 100644 --- a/gcc/testsuite/gcc.target/i386/avx512bw-vpackuswb-1.c +++ b/gcc/testsuite/gcc.target/i386/avx512bw-vpackuswb-1.c @@ -4,8 +4,8 @@ /* { dg-final { scan-assembler-times "vpackuswb\[ \\t\]+\[^\{\n\]*%zmm\[0-9\]+\{%k\[1-7\]\}(?:\n|\[ \\t\]+#)" 1 } } */ /* { dg-final { scan-assembler-times "vpackuswb\[ \\t\]+\[^\{\n\]*%zmm\[0-9\]+\{%k\[1-7\]\}{z}(?:\n|\[ \\t\]+#)" 1 } } */ /* { dg-final { scan-assembler-times "vpackuswb\[ \\t\]+\[^\{\n\]*%ymm\[0-9\]+\{%k\[1-7\]\}(?:\n|\[ \\t\]+#)" 1 } } */ -/* { dg-final { scan-assembler-times "vpackuswb\[ \\t\]+\[^\{\n\]*%ymm\[0-9\]+\{%k\[1-7\]\}(?:\n|\[ \\t\]+#)" 1 } } */ -/* { dg-final { scan-assembler-times "vpackuswb\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+\{%k\[1-7\]\}{z}(?:\n|\[ \\t\]+#)" 1 } } */ +/* { dg-final { scan-assembler-times "vpackuswb\[ \\t\]+\[^\{\n\]*%ymm\[0-9\]+\{%k\[1-7\]\}{z}(?:\n|\[ \\t\]+#)" 1 } } */ +/* { dg-final { scan-assembler-times "vpackuswb\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+\{%k\[1-7\]\}(?:\n|\[ \\t\]+#)" 1 } } */ /* { dg-final { scan-assembler-times "vpackuswb\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+\{%k\[1-7\]\}{z}(?:\n|\[ \\t\]+#)" 1 } } */ diff --git a/gcc/testsuite/gcc.target/i386/avx512bw-vpalignr-4.c b/gcc/testsuite/gcc.target/i386/avx512bw-vpalignr-4.c index 50a2a3522139..cdd08f5be63f 100644 --- a/gcc/testsuite/gcc.target/i386/avx512bw-vpalignr-4.c +++ b/gcc/testsuite/gcc.target/i386/avx512bw-vpalignr-4.c @@ -55,8 +55,6 @@ f4 (V4 x) asm volatile ("" : "+v" (a)); } -/* { dg-final { scan-assembler-times "vpalignr\[^\n\r]*\\\$8\[^\n\r]*%xmm16\[^\n\r]*%xmm16\[^\n\r]*%xmm16" 1 } } */ - typedef float V5 __attribute__((vector_size (16))); void @@ -83,4 +81,4 @@ f6 (V6 x) asm volatile ("" : "+v" (a)); } -/* { dg-final { scan-assembler-times "vpermilpd\[^\n\r]*\\\$1\[^\n\r]*%xmm16\[^\n\r]*%xmm16" 1 } } */ +/* { dg-final { scan-assembler-times "vpermilpd\[^\n\r]*\\\$1\[^\n\r]*%xmm16\[^\n\r]*%xmm16" 2 } } */ diff --git a/gcc/testsuite/gcc.target/i386/avx512bw-vpermw-1.c b/gcc/testsuite/gcc.target/i386/avx512bw-vpermw-1.c index 7196c9a62584..30e3f6d1b88e 100644 --- a/gcc/testsuite/gcc.target/i386/avx512bw-vpermw-1.c +++ b/gcc/testsuite/gcc.target/i386/avx512bw-vpermw-1.c @@ -6,9 +6,9 @@ /* { dg-final { scan-assembler-times "vpermw\[ \\t\]+\[^\{\n\]*%ymm\[0-9\]+(?:\n|\[ \\t\]+#)" 1 } } */ /* { dg-final { scan-assembler-times "vpermw\[ \\t\]+\[^\{\n\]*%ymm\[0-9\]+\{%k\[1-7\]\}(?:\n|\[ \\t\]+#)" 1 } } */ /* { dg-final { scan-assembler-times "vpermw\[ \\t\]+\[^\{\n\]*%ymm\[0-9\]+\{%k\[1-7\]\}\{z\}(?:\n|\[ \\t\]+#)" 1 } } */ -/* { dg-final { scan-assembler-times "vpermw\[ \\t\]+\[^\{\n\]*%zmm\[0-9\]+(?:\n|\[ \\t\]+#)" 1 } } */ -/* { dg-final { scan-assembler-times "vpermw\[ \\t\]+\[^\{\n\]*%zmm\[0-9\]+\{%k\[1-7\]\}(?:\n|\[ \\t\]+#)" 1 } } */ -/* { dg-final { scan-assembler-times "vpermw\[ \\t\]+\[^\{\n\]*%zmm\[0-9\]+\{%k\[1-7\]\}\{z\}(?:\n|\[ \\t\]+#)" 1 } } */ +/* { dg-final { scan-assembler-times "vpermw\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+(?:\n|\[ \\t\]+#)" 1 } } */ +/* { dg-final { scan-assembler-times "vpermw\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+\{%k\[1-7\]\}(?:\n|\[ \\t\]+#)" 1 } } */ +/* { dg-final { scan-assembler-times "vpermw\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+\{%k\[1-7\]\}\{z\}(?:\n|\[ \\t\]+#)" 1 } } */ #include diff --git a/gcc/testsuite/gcc.target/i386/avx512bw-vpmovuswb-2.c b/gcc/testsuite/gcc.target/i386/avx512bw-vpmovuswb-2.c index d5198f39eb61..2311dfea34f5 100644 --- a/gcc/testsuite/gcc.target/i386/avx512bw-vpmovuswb-2.c +++ b/gcc/testsuite/gcc.target/i386/avx512bw-vpmovuswb-2.c @@ -27,7 +27,7 @@ TEST (void) UNION_TYPE (AVX512F_LEN, i_w) src; MASK_TYPE mask = MASK_VALUE; unsigned char res_ref[32]; - unsigned char res_ref2[SIZE]; + unsigned char res_ref2[SIZE_HALF]; for (i = 0; i < SIZE; i++) { diff --git a/gcc/testsuite/gcc.target/i386/avx512bw-vpmovwb-2.c b/gcc/testsuite/gcc.target/i386/avx512bw-vpmovwb-2.c index 6b0f86f57d8c..ea91181284f2 100644 --- a/gcc/testsuite/gcc.target/i386/avx512bw-vpmovwb-2.c +++ b/gcc/testsuite/gcc.target/i386/avx512bw-vpmovwb-2.c @@ -28,7 +28,7 @@ TEST (void) UNION_TYPE (AVX512F_LEN, i_w) src; MASK_TYPE mask = MASK_VALUE; char res_ref[32]; - char res_ref2[SIZE]; + char res_ref2[SIZE_HALF]; sign = -1; for (i = 0; i < SIZE; i++) diff --git a/gcc/testsuite/gcc.target/i386/avx512bw-vpmulhw-1.c b/gcc/testsuite/gcc.target/i386/avx512bw-vpmulhw-1.c index 6ded26c9fc4f..4f53e5cbab88 100644 --- a/gcc/testsuite/gcc.target/i386/avx512bw-vpmulhw-1.c +++ b/gcc/testsuite/gcc.target/i386/avx512bw-vpmulhw-1.c @@ -3,10 +3,10 @@ /* { dg-final { scan-assembler-times "vpmulhw\[ \\t\]+\[^\{\n\]*%zmm\[0-9\]+\[^\n\]*%zmm\[0-9\]+\[^\n\]*%zmm\[0-9\]+(?:\n|\[ \\t\]+#)" 1 } } */ /* { dg-final { scan-assembler-times "vpmulhw\[ \\t\]+\[^\{\n\]*%zmm\[0-9\]+\[^\n\]*%zmm\[0-9\]+\[^\n\]*%zmm\[0-9\]+\{%k\[1-7\]\}\{z\}(?:\n|\[ \\t\]+#)" 1 } } */ /* { dg-final { scan-assembler-times "vpmulhw\[ \\t\]+\[^\{\n\]*%zmm\[0-9\]+\[^\n\]*%zmm\[0-9\]+\[^\n\]*%zmm\[0-9\]+\{%k\[1-7\]\}(?:\n|\[ \\t\]+#)" 1 } } */ -/* { dg-final { scan-assembler-times "vpmulhw\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+\[^\n\]*%xmm\[0-9\]+\[^\n\]*%xmm\[0-9\]+\{%k\[1-7\]\}\{z\}(?:\n|\[ \\t\]+#)" 1 } } */ -/* { dg-final { scan-assembler-times "vpmulhw\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+\[^\n\]*%xmm\[0-9\]+\[^\n\]*%xmm\[0-9\]+\{%k\[1-7\]\}\{z\}(?:\n|\[ \\t\]+#)" 1 } } */ -/* { dg-final { scan-assembler-times "vpmulhw\[ \\t\]+\[^\{\n\]*%ymm\[0-9\]+\[^\n\]*%ymm\[0-9\]+\[^\n\]*%ymm\[0-9\]+\{%k\[1-7\]\}(?:\n|\[ \\t\]+#)" 1 } } */ /* { dg-final { scan-assembler-times "vpmulhw\[ \\t\]+\[^\{\n\]*%ymm\[0-9\]+\[^\n\]*%ymm\[0-9\]+\[^\n\]*%ymm\[0-9\]+\{%k\[1-7\]\}(?:\n|\[ \\t\]+#)" 1 } } */ +/* { dg-final { scan-assembler-times "vpmulhw\[ \\t\]+\[^\{\n\]*%ymm\[0-9\]+\[^\n\]*%ymm\[0-9\]+\[^\n\]*%ymm\[0-9\]+\{%k\[1-7\]\}\{z\}(?:\n|\[ \\t\]+#)" 1 } } */ +/* { dg-final { scan-assembler-times "vpmulhw\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+\[^\n\]*%xmm\[0-9\]+\[^\n\]*%xmm\[0-9\]+\{%k\[1-7\]\}(?:\n|\[ \\t\]+#)" 1 } } */ +/* { dg-final { scan-assembler-times "vpmulhw\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+\[^\n\]*%xmm\[0-9\]+\[^\n\]*%xmm\[0-9\]+\{%k\[1-7\]\}\{z\}(?:\n|\[ \\t\]+#)" 1 } } */ #include diff --git a/gcc/testsuite/gcc.target/i386/avx512f-vec-init.c b/gcc/testsuite/gcc.target/i386/avx512f-vec-init.c index c00fa4275712..6cc8261d4f7e 100644 --- a/gcc/testsuite/gcc.target/i386/avx512f-vec-init.c +++ b/gcc/testsuite/gcc.target/i386/avx512f-vec-init.c @@ -4,7 +4,6 @@ /* { dg-final { scan-assembler-times "vpbroadcastd\[ \\t\]+\[^\{\n\]*%zmm\[0-9\]+(?:\n|\[ \\t\]+#)" 1 } } */ /* { dg-final { scan-assembler-times "vpbroadcastd\[ \\t\]+\[^\{\n\]*%ymm\[0-9\]+(?:\n|\[ \\t\]+#)" 1 } } */ /* { dg-final { scan-assembler-times "vpbroadcastq\[ \\t\]+\[^\{\n\]*%zmm\[0-9\]+(?:\n|\[ \\t\]+#)" 1 } } */ -/* { dg-final { scan-assembler-times "vpbroadcastq\[ \\t\]+\[^\{\n\]*%zmm\[0-9\]+(?:\n|\[ \\t\]+#)" 1 } } */ /* { dg-final { scan-assembler-times "vpbroadcastq\[ \\t\]+\[^\{\n\]*%ymm\[0-9\]+(?:\n|\[ \\t\]+#)" 1 } } */ /* { dg-final { scan-assembler-times "vpbroadcastb\[ \\t\]+\[^\{\n\]*%ymm\[0-9\]+(?:\n|\[ \\t\]+#)" 2 } } */ /* { dg-final { scan-assembler-times "vpbroadcastb\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+(?:\n|\[ \\t\]+#)" 1 } } */ diff --git a/gcc/testsuite/gcc.target/i386/avx512fp16-13.c b/gcc/testsuite/gcc.target/i386/avx512fp16-13.c index 92ac197e1066..8bd0e39b0567 100644 --- a/gcc/testsuite/gcc.target/i386/avx512fp16-13.c +++ b/gcc/testsuite/gcc.target/i386/avx512fp16-13.c @@ -36,7 +36,7 @@ load512_ph (void const *p) return _mm512_load_ph (p); } -/* { dg-final { scan-assembler-times "vmovdqa64\[ \\t\]+\[^\{\n\]*%zmm\[0-9\]+\[^\n\]*\\)" 1 } } */ +/* { dg-final { scan-assembler-times "vmovdqa64\[ \\t\]*\[^,\]*,\[^\{\n\]*%zmm\[0-9\]" 1 } } */ __m256h __attribute__ ((noinline, noclone)) @@ -45,7 +45,7 @@ load256_ph (void const *p) return _mm256_load_ph (p); } -/* { dg-final { scan-assembler-times "vmovdqa\[ \\t\]+\[^\{\n\]*%ymm\[0-9\]+\[^\n\]*\\)" 1 } } */ +/* { dg-final { scan-assembler-times "vmovdqa\[ \\t\]*\[^,\]*,\[^\{\n\]*%ymm\[0-9\]" 1 } } */ __m128h __attribute__ ((noinline, noclone)) @@ -53,7 +53,8 @@ load_ph (void const *p) { return _mm_load_ph (p); } -/* { dg-final { scan-assembler-times "vmovdqa\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+\[^\n\]*\\)" 1 } } */ + +/* { dg-final { scan-assembler-times "vmovdqa\[ \\t\]*\[^,\]*,\[^\{\n\]*%xmm\[0-9\]" 1 } } */ __m512h __attribute__ ((noinline, noclone)) diff --git a/gcc/testsuite/gcc.target/i386/avx512fp16-conjugation-1.c b/gcc/testsuite/gcc.target/i386/avx512fp16-conjugation-1.c index 1b974e77046b..a1e81b0360c3 100644 --- a/gcc/testsuite/gcc.target/i386/avx512fp16-conjugation-1.c +++ b/gcc/testsuite/gcc.target/i386/avx512fp16-conjugation-1.c @@ -1,5 +1,9 @@ /* { dg-do compile } */ /* { dg-options "-O2 -mavx512fp16" } */ +/* { dg-final { scan-assembler-times "vpxord\[^\n\]*%zmm\[0-9\]+" 3 } } */ +/* { dg-final { scan-assembler-times "kmovw\[^\n\]*%k\[1-9\]+" 2 } } */ +/* { dg-final { scan-assembler-times "vmovaps\[ \\t\]+\[^\{\n\]*%zmm\[0-9\]+\{%k\[1-7\]\}(?:\n|\[ \\t\]+#)" 1 } } */ +/* { dg-final { scan-assembler-times "vmovaps\[ \\t\]+\[^\{\n\]*%zmm\[0-9\]+\{%k\[1-7\]\}\{z\}(?:\n|\[ \\t\]+#)" 1 } } */ #include __m512h @@ -9,8 +13,6 @@ test_mm512_conj_pch (__m512h __A) return _mm512_conj_pch (__A); } -/* { dg-final { scan-assembler-times "vpxord\[^\n\]*%zmm\[0-9\]+" 3 } } */ - __m512h __attribute__ ((noinline, noclone)) test_mm512_mask_conj_pch (__m512h __W, __mmask16 __U, __m512h __A) @@ -18,10 +20,6 @@ test_mm512_mask_conj_pch (__m512h __W, __mmask16 __U, __m512h __A) return _mm512_mask_conj_pch (__W, __U, __A); } -/* { dg-final { scan-assembler-times "vpxord\[^\n\]*%zmm\[0-9\]+" 3 } } */ -/* { dg-final { scan-assembler-times "kmovw\[^\n\]*%k\[1-9\]+" 2 } } */ -/* { dg-final { scan-assembler-times "vmovaps\[^\n]" 2 } } */ - __m512h __attribute__ ((noinline, noclone)) test_mm512_maskz_conj_pch (__mmask16 __U, __m512h __A) @@ -29,6 +27,3 @@ test_mm512_maskz_conj_pch (__mmask16 __U, __m512h __A) return _mm512_maskz_conj_pch (__U, __A); } -/* { dg-final { scan-assembler-times "vpxord\[^\n\]*%zmm\[0-9\]+" 3 } } */ -/* { dg-final { scan-assembler-times "kmovw\[^\n\]*%k\[1-9\]+" 2 } } */ -/* { dg-final { scan-assembler-times "vmovaps\[ \\t\]+\[^\{\n\]*%zmm\[0-9\]+\{%k\[1-7\]\}\{z\}(?:\n|\[ \\t\]+#)" 1 } } */ diff --git a/gcc/testsuite/gcc.target/i386/avx512fp16vl-conjugation-1.c b/gcc/testsuite/gcc.target/i386/avx512fp16vl-conjugation-1.c index 3ba664f4aecf..05368052b65f 100644 --- a/gcc/testsuite/gcc.target/i386/avx512fp16vl-conjugation-1.c +++ b/gcc/testsuite/gcc.target/i386/avx512fp16vl-conjugation-1.c @@ -1,5 +1,11 @@ /* { dg-do compile } */ /* { dg-options "-O2 -mavx512fp16 -mavx512vl -mavx512dq" } */ +/* { dg-final { scan-assembler-times "vpxor\[^\n\]*%ymm\[0-9\]+" 3 } } */ +/* { dg-final { scan-assembler-times "vmovaps\[ \\t\]+\[^\{\n\]*%ymm\[0-9\]+\{%k\[1-7\]\}(?:\n|\[ \\t\]+#)" 1 } } */ +/* { dg-final { scan-assembler-times "vmovaps\[ \\t\]+\[^\{\n\]*%ymm\[0-9\]+\{%k\[1-7\]\}\{z\}(?:\n|\[ \\t\]+#)" 1 } } */ +/* { dg-final { scan-assembler-times "vpxor\[^\n\]*%xmm\[0-9\]+" 3 } } */ +/* { dg-final { scan-assembler-times "vmovaps\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+\{%k\[1-7\]\}(?:\n|\[ \\t\]+#)" 1 } } */ +/* { dg-final { scan-assembler-times "vmovaps\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+\{%k\[1-7\]\}\{z\}(?:\n|\[ \\t\]+#)" 1 } } */ #include __m256h @@ -9,8 +15,6 @@ test_mm256_conj_pch (__m256h __A) return _mm256_conj_pch (__A); } -/* { dg-final { scan-assembler-times "vpxor\[^\n\]*%ymm\[0-9\]+" 3 } } */ - __m128h __attribute__ ((noinline, noclone)) test_mm_conj_pch (__m128h __A) @@ -18,8 +22,6 @@ test_mm_conj_pch (__m128h __A) return _mm_conj_pch (__A); } -/* { dg-final { scan-assembler-times "vpxor\[^\n\]*%xmm\[0-9\]+" 3 } } */ - __m256h __attribute__ ((noinline, noclone)) test_mm256_mask_conj_pch (__m256h __W, __mmask8 __U, __m256h __A) @@ -27,8 +29,6 @@ test_mm256_mask_conj_pch (__m256h __W, __mmask8 __U, __m256h __A) return _mm256_mask_conj_pch (__W, __U, __A); } -/* { dg-final { scan-assembler-times "vmovaps\[^\n\]*%ymm\[0-9\]+" 2 } } */ - __m128h __attribute__ ((noinline, noclone)) test_mm_mask_conj_pch (__m128h __W, __mmask8 __U, __m128h __A) @@ -36,20 +36,15 @@ test_mm_mask_conj_pch (__m128h __W, __mmask8 __U, __m128h __A) return _mm_mask_conj_pch (__W, __U, __A); } -/* { dg-final { scan-assembler-times "vmovaps\[^\n\]*%xmm\[0-9\]+" 2 } } */ - __m256h __attribute__ ((noinline, noclone)) test_mm256_maskz_conj_pch (__mmask8 __U, __m256h __A) { return _mm256_maskz_conj_pch (__U, __A); } -/* { dg-final { scan-assembler-times "vmovaps\[ \\t\]+\[^\{\n\]*%ymm\[0-9\]+\{%k\[1-7\]\}\{z\}(?:\n|\[ \\t\]+#)" 1 } } */ __m128h __attribute__ ((noinline, noclone)) test_mm_maskz_conj_pch (__mmask8 __U, __m128h __A) { return _mm_maskz_conj_pch (__U, __A); } - -/* { dg-final { scan-assembler-times "vmovaps\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+\{%k\[1-7\]\}\{z\}(?:\n|\[ \\t\]+#)" 1 } } */ diff --git a/gcc/testsuite/gcc.target/i386/avx512vbmi-vpermb-1.c b/gcc/testsuite/gcc.target/i386/avx512vbmi-vpermb-1.c index f701c5aa18fe..837aeb88f822 100644 --- a/gcc/testsuite/gcc.target/i386/avx512vbmi-vpermb-1.c +++ b/gcc/testsuite/gcc.target/i386/avx512vbmi-vpermb-1.c @@ -6,9 +6,9 @@ /* { dg-final { scan-assembler-times "vpermb\[ \\t\]+\[^\n\]*%ymm\[0-9\]+\[^\{\]" 3 } } */ /* { dg-final { scan-assembler-times "vpermb\[ \\t\]+\[^\n\]*%ymm\[0-9\]+\{%k\[1-7\]\}\[^\{\]" 1 } } */ /* { dg-final { scan-assembler-times "vpermb\[ \\t\]+\[^\n\]*%ymm\[0-9\]+\{%k\[1-7\]\}\{z\}" 1 } } */ -/* { dg-final { scan-assembler-times "vpermb\[ \\t\]+\[^\n\]*%zmm\[0-9\]+\[^\{\]" 3 } } */ -/* { dg-final { scan-assembler-times "vpermb\[ \\t\]+\[^\n\]*%zmm\[0-9\]+\{%k\[1-7\]\}\[^\{\]" 1 } } */ -/* { dg-final { scan-assembler-times "vpermb\[ \\t\]+\[^\n\]*%zmm\[0-9\]+\{%k\[1-7\]\}\{z\}" 1 } } */ +/* { dg-final { scan-assembler-times "vpermb\[ \\t\]+\[^\n\]*%xmm\[0-9\]+\[^\{\]" 3 } } */ +/* { dg-final { scan-assembler-times "vpermb\[ \\t\]+\[^\n\]*%xmm\[0-9\]+\{%k\[1-7\]\}\[^\{\]" 1 } } */ +/* { dg-final { scan-assembler-times "vpermb\[ \\t\]+\[^\n\]*%xmm\[0-9\]+\{%k\[1-7\]\}\{z\}" 1 } } */ #include diff --git a/gcc/testsuite/gcc.target/i386/avx512vl-vcvtpd2ps-1.c b/gcc/testsuite/gcc.target/i386/avx512vl-vcvtpd2ps-1.c index fc29f45f1458..b0cd6e4f1a59 100644 --- a/gcc/testsuite/gcc.target/i386/avx512vl-vcvtpd2ps-1.c +++ b/gcc/testsuite/gcc.target/i386/avx512vl-vcvtpd2ps-1.c @@ -1,9 +1,9 @@ /* { dg-do compile } */ /* { dg-options "-O2 -mavx512vl" } */ -/* { dg-final { scan-assembler-times "vcvtpd2psy\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+\{%k\[1-7\]\}\{z\}(?:\n|\[ \\t\]+#)" 1 } } */ -/* { dg-final { scan-assembler-times "vcvtpd2psy\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+\{%k\[1-7\]\}\{z\}(?:\n|\[ \\t\]+#)" 1 } } */ -/* { dg-final { scan-assembler-times "vcvtpd2psx\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+\{%k\[1-7\]\}(?:\n|\[ \\t\]+#)" 1 } } */ -/* { dg-final { scan-assembler-times "vcvtpd2psx\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+\{%k\[1-7\]\}(?:\n|\[ \\t\]+#)" 1 } } */ +/* { dg-final { scan-assembler-times "vcvtpd2psy\[ \\t\]+\[^\{\n\]*%ymm\[0-9\]+\[^\n\r]*%xmm\[0-9\]+\{%k\[1-7\]\}(?:\n|\[ \\t\]+#)" 1 } } */ +/* { dg-final { scan-assembler-times "vcvtpd2psy\[ \\t\]+\[^\{\n\]*%ymm\[0-9\]+\[^\n\r]*%xmm\[0-9\]+\{%k\[1-7\]\}\{z\}(?:\n|\[ \\t\]+#)" 1 } } */ +/* { dg-final { scan-assembler-times "vcvtpd2psx\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+\[^\n\r]*%xmm\[0-9\]+\{%k\[1-7\]\}(?:\n|\[ \\t\]+#)" 1 } } */ +/* { dg-final { scan-assembler-times "vcvtpd2psx\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+\[^\n\r]*%xmm\[0-9\]+\{%k\[1-7\]\}\{z\}(?:\n|\[ \\t\]+#)" 1 } } */ #include diff --git a/gcc/testsuite/gcc.target/i386/avx512vl-vinsert-1.c b/gcc/testsuite/gcc.target/i386/avx512vl-vinsert-1.c index f12260a23f3e..c0b57a6224b3 100644 --- a/gcc/testsuite/gcc.target/i386/avx512vl-vinsert-1.c +++ b/gcc/testsuite/gcc.target/i386/avx512vl-vinsert-1.c @@ -95,4 +95,4 @@ f8 (V4 x, double y) /* { dg-final { scan-assembler-not "vinserti64x2" } } */ /* { dg-final { scan-assembler-not "vinsertf64x2" } } */ /* { dg-final { scan-assembler-not "vextracti64x2" } } */ -/* { dg-final { scan-assembler-not "vextracti64x2" } } */ +/* { dg-final { scan-assembler-not "vextractf64x2" } } */ diff --git a/gcc/testsuite/gcc.target/i386/avx512vl-vpalignr-4.c b/gcc/testsuite/gcc.target/i386/avx512vl-vpalignr-4.c index 4936d2f4c5b0..3076fb020a7c 100644 --- a/gcc/testsuite/gcc.target/i386/avx512vl-vpalignr-4.c +++ b/gcc/testsuite/gcc.target/i386/avx512vl-vpalignr-4.c @@ -83,4 +83,4 @@ f6 (V6 x) asm volatile ("" : "+v" (a)); } -/* { dg-final { scan-assembler-times "vpermilpd\[^\n\r]*\\\$1\[^\n\r]*%xmm16\[^\n\r]*%xmm16" 1 } } */ +/* { dg-final { scan-assembler-times "vpermilpd\[^\n\r]*\\\$1\[^\n\r]*%xmm16\[^\n\r]*%xmm16" 2 } } */ diff --git a/gcc/testsuite/gcc.target/i386/avx512vl-vpmulld-1.c b/gcc/testsuite/gcc.target/i386/avx512vl-vpmulld-1.c index f03907807f4f..b92b7f77443c 100644 --- a/gcc/testsuite/gcc.target/i386/avx512vl-vpmulld-1.c +++ b/gcc/testsuite/gcc.target/i386/avx512vl-vpmulld-1.c @@ -1,8 +1,8 @@ /* { dg-do compile } */ /* { dg-options "-mavx512vl -O2" } */ /* { dg-final { scan-assembler-times "vpmulld\[ \\t\]+\[^\{\n\]*%ymm\[0-9\]+\{%k\[1-7\]\}(?:\n|\[ \\t\]+#)" 1 } } */ -/* { dg-final { scan-assembler-times "vpmulld\[ \\t\]+\[^\{\n\]*%ymm\[0-9\]+\{%k\[1-7\]\}(?:\n|\[ \\t\]+#)" 1 } } */ -/* { dg-final { scan-assembler-times "vpmulld\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+\{%k\[1-7\]\}{z}(?:\n|\[ \\t\]+#)" 1 } } */ +/* { dg-final { scan-assembler-times "vpmulld\[ \\t\]+\[^\{\n\]*%ymm\[0-9\]+\{%k\[1-7\]\}{z}(?:\n|\[ \\t\]+#)" 1 } } */ +/* { dg-final { scan-assembler-times "vpmulld\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+\{%k\[1-7\]\}(?:\n|\[ \\t\]+#)" 1 } } */ /* { dg-final { scan-assembler-times "vpmulld\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+\{%k\[1-7\]\}{z}(?:\n|\[ \\t\]+#)" 1 } } */ #include diff --git a/gcc/testsuite/gcc.target/i386/avx512vl-vptestmd-1.c b/gcc/testsuite/gcc.target/i386/avx512vl-vptestmd-1.c index 4ec618c43c7b..58b9745b8fee 100644 --- a/gcc/testsuite/gcc.target/i386/avx512vl-vptestmd-1.c +++ b/gcc/testsuite/gcc.target/i386/avx512vl-vptestmd-1.c @@ -1,8 +1,8 @@ /* { dg-do compile } */ /* { dg-options "-mavx512vl -O2" } */ /* { dg-final { scan-assembler-times "vptestmd\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+\[^\n\]*%k\[0-7\](?:\n|\[ \\t\]+#)" 1 } } */ -/* { dg-final { scan-assembler-times "vptestmd\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+\[^\n\]*%k\[0-7\](?:\n|\[ \\t\]+#)" 1 } } */ -/* { dg-final { scan-assembler-times "vptestmd\[ \\t\]+\[^\{\n\]*%ymm\[0-9\]+\[^\n\]*%k\[0-7\]\{%*k\[1-7\]\}(?:\n|\[ \\t\]+#)" 1 } } */ +/* { dg-final { scan-assembler-times "vptestmd\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+\[^\n\]*%k\[0-7\]\{%*k\[1-7\]\}(?:\n|\[ \\t\]+#)" 1 } } */ +/* { dg-final { scan-assembler-times "vptestmd\[ \\t\]+\[^\{\n\]*%ymm\[0-9\]+\[^\n\]*%k\[0-7\](?:\n|\[ \\t\]+#)" 1 } } */ /* { dg-final { scan-assembler-times "vptestmd\[ \\t\]+\[^\{\n\]*%ymm\[0-9\]+\[^\n\]*%k\[0-7\]\{%*k\[1-7\]\}(?:\n|\[ \\t\]+#)" 1 } } */ #include diff --git a/gcc/testsuite/gcc.target/i386/avx_vbroadcastf128.c b/gcc/testsuite/gcc.target/i386/avx_vbroadcastf128.c new file mode 100644 index 000000000000..e0bda7dda106 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/avx_vbroadcastf128.c @@ -0,0 +1,17 @@ +/* { dg-do compile } */ +/* { dg-options "-march=x86-64-v3 -O3" } */ +/* { dg-final { scan-assembler-not "vpermpd"} } */ +/* { dg-final { scan-assembler {(?n)vbroadcastf(?:128|64x2)} } } */ + +void +foo (double* __restrict a, double* b, double* c, int n) +{ + for (int i = 0; i != n; i+=4) + { + a[i] += b[i] * c[i]; + a[i+1] += b[i+1] * c[i+1]; + a[i+2] += b[i] * c[i+2]; + a[i+3] += b[i+1] * c[i+3]; + } + +} diff --git a/gcc/testsuite/gcc.target/i386/bitwise_mask_op-1.c b/gcc/testsuite/gcc.target/i386/bitwise_mask_op-1.c index 826ed6921d44..b2c40aafee9f 100644 --- a/gcc/testsuite/gcc.target/i386/bitwise_mask_op-1.c +++ b/gcc/testsuite/gcc.target/i386/bitwise_mask_op-1.c @@ -77,7 +77,7 @@ foo_xorb (__m512i a, __m512i b, __m512i c, __m512i d) return _mm512_mask_add_epi64 (c, m1 ^ m2, a, d); } -/* { dg-final { scan-assembler-times "korw" "2" } } */ +/* { dg-final { scan-assembler-times "kxorw" "2" } } */ __m512i foo_andq (__m512i a, __m512i b, __m512i c, __m512i d) diff --git a/gcc/testsuite/gcc.target/i386/cond_op_shift_q-1.c b/gcc/testsuite/gcc.target/i386/cond_op_shift_q-1.c index 1b981b57497d..19f2fabb620c 100644 --- a/gcc/testsuite/gcc.target/i386/cond_op_shift_q-1.c +++ b/gcc/testsuite/gcc.target/i386/cond_op_shift_q-1.c @@ -2,8 +2,8 @@ /* { dg-options "-O2 -march=skylake-avx512 -fdump-tree-optimized -DTYPE=int64" } */ /* { dg-final { scan-tree-dump-times ".COND_SHR" 2 "optimized" } } */ /* { dg-final { scan-tree-dump-times ".COND_SHL" 2 "optimized" } } */ -/* { dg-final { scan-assembler-times "vpsravq" 1 } } */ -/* { dg-final { scan-assembler-times "vpsllvq" 1 } } */ +/* { dg-final { scan-assembler-times "vpsraq" 1 } } */ +/* { dg-final { scan-assembler-times "vpsllq" 1 } } */ /* { dg-final { scan-assembler-times "vpsravq" 1 } } */ /* { dg-final { scan-assembler-times "vpsllvq" 1 } } */ diff --git a/gcc/testsuite/gcc.target/i386/cond_op_shift_ud-1.c b/gcc/testsuite/gcc.target/i386/cond_op_shift_ud-1.c index eea0f6720c6a..6a5c943a3994 100644 --- a/gcc/testsuite/gcc.target/i386/cond_op_shift_ud-1.c +++ b/gcc/testsuite/gcc.target/i386/cond_op_shift_ud-1.c @@ -2,8 +2,8 @@ /* { dg-options "-O2 -march=skylake-avx512 -fdump-tree-optimized -DTYPE=uint32" } */ /* { dg-final { scan-tree-dump-times ".COND_SHR" 2 "optimized" } } */ /* { dg-final { scan-tree-dump-times ".COND_SHL" 2 "optimized" } } */ -/* { dg-final { scan-assembler-times "vpsrlvd" 1 } } */ -/* { dg-final { scan-assembler-times "vpsllvd" 1 } } */ +/* { dg-final { scan-assembler-times "vpsrld" 1 } } */ +/* { dg-final { scan-assembler-times "vpslld" 1 } } */ /* { dg-final { scan-assembler-times "vpsrlvd" 1 } } */ /* { dg-final { scan-assembler-times "vpsllvd" 1 } } */ diff --git a/gcc/testsuite/gcc.target/i386/cond_op_shift_uq-1.c b/gcc/testsuite/gcc.target/i386/cond_op_shift_uq-1.c index 77a03886d06c..b8a3c50c3803 100644 --- a/gcc/testsuite/gcc.target/i386/cond_op_shift_uq-1.c +++ b/gcc/testsuite/gcc.target/i386/cond_op_shift_uq-1.c @@ -4,7 +4,7 @@ /* { dg-final { scan-tree-dump-times ".COND_SHL" 2 "optimized" } } */ /* { dg-final { scan-assembler-times "vpsrlq" 1 } } */ /* { dg-final { scan-assembler-times "vpsllq" 1 } } */ -/* { dg-final { scan-assembler-times "vpsrlq" 1 } } */ -/* { dg-final { scan-assembler-times "vpsllq" 1 } } */ +/* { dg-final { scan-assembler-times "vpsrlvq" 1 } } */ +/* { dg-final { scan-assembler-times "vpsllvq" 1 } } */ #include "cond_op_shift_d-1.c" diff --git a/gcc/testsuite/gcc.target/i386/memcpy-pr120683-2.c b/gcc/testsuite/gcc.target/i386/memcpy-pr120683-2.c index 0d0e34860e91..cd78ae860b6b 100644 --- a/gcc/testsuite/gcc.target/i386/memcpy-pr120683-2.c +++ b/gcc/testsuite/gcc.target/i386/memcpy-pr120683-2.c @@ -7,22 +7,22 @@ **foo: **.LFB[0-9]+: ** .cfi_startproc -** xorl %edx, %edx +** xorl %eax, %eax **.L[0-9]+: -** movl %edx, %eax -** addl \$64, %edx -** movdqa src\(%rax\), %xmm3 -** movdqa src\+16\(%rax\), %xmm2 -** movdqa src\+32\(%rax\), %xmm1 -** movdqa src\+48\(%rax\), %xmm0 -** movaps %xmm3, dest\(%rax\) -** movaps %xmm2, dest\+16\(%rax\) -** movaps %xmm1, dest\+32\(%rax\) -** movaps %xmm0, dest\+48\(%rax\) -** cmpl \$256, %edx +** movl %eax, %edx +** addl \$64, %eax +** movdqa src\(%rdx\), %xmm3 +** movdqa src\+16\(%rdx\), %xmm2 +** movdqa src\+32\(%rdx\), %xmm1 +** movdqa src\+48\(%rdx\), %xmm0 +** movaps %xmm3, dest\(%rdx\) +** movaps %xmm2, dest\+16\(%rdx\) +** movaps %xmm1, dest\+32\(%rdx\) +** movaps %xmm0, dest\+48\(%rdx\) +** cmpl \$256, %eax ** jb .L[0-9]+ -** movdqa src\(%rdx\), %xmm0 -** movaps %xmm0, dest\(%rdx\) +** movdqa src\(%rax\), %xmm0 +** movaps %xmm0, dest\(%rax\) ** ret **... */ diff --git a/gcc/testsuite/gcc.target/i386/memcpy-pr120683-3.c b/gcc/testsuite/gcc.target/i386/memcpy-pr120683-3.c index e5aca32a5880..ea3bcca61039 100644 --- a/gcc/testsuite/gcc.target/i386/memcpy-pr120683-3.c +++ b/gcc/testsuite/gcc.target/i386/memcpy-pr120683-3.c @@ -7,24 +7,24 @@ **foo: **.LFB[0-9]+: ** .cfi_startproc -** xorl %edx, %edx +** xorl %eax, %eax **.L[0-9]+: -** movl %edx, %eax -** addl \$64, %edx -** movdqa src\(%rax\), %xmm3 -** movdqa src\+16\(%rax\), %xmm2 -** movdqa src\+32\(%rax\), %xmm1 -** movdqa src\+48\(%rax\), %xmm0 -** movaps %xmm3, dest\(%rax\) -** movaps %xmm2, dest\+16\(%rax\) -** movaps %xmm1, dest\+32\(%rax\) -** movaps %xmm0, dest\+48\(%rax\) -** cmpl \$256, %edx +** movl %eax, %edx +** addl \$64, %eax +** movdqa src\(%rdx\), %xmm3 +** movdqa src\+16\(%rdx\), %xmm2 +** movdqa src\+32\(%rdx\), %xmm1 +** movdqa src\+48\(%rdx\), %xmm0 +** movaps %xmm3, dest\(%rdx\) +** movaps %xmm2, dest\+16\(%rdx\) +** movaps %xmm1, dest\+32\(%rdx\) +** movaps %xmm0, dest\+48\(%rdx\) +** cmpl \$256, %eax ** jb .L[0-9]+ -** movdqa src\(%rdx\), %xmm0 -** movaps %xmm0, dest\(%rdx\) -** movdqu src\+15\(%rdx\), %xmm0 -** movups %xmm0, dest\+15\(%rdx\) +** movdqa src\(%rax\), %xmm0 +** movaps %xmm0, dest\(%rax\) +** movdqu src\+15\(%rax\), %xmm0 +** movups %xmm0, dest\+15\(%rax\) ** ret **... */ diff --git a/gcc/testsuite/gcc.target/i386/memcpy-pr120683-4.c b/gcc/testsuite/gcc.target/i386/memcpy-pr120683-4.c index 27f7bedc7037..c2d595f877dc 100644 --- a/gcc/testsuite/gcc.target/i386/memcpy-pr120683-4.c +++ b/gcc/testsuite/gcc.target/i386/memcpy-pr120683-4.c @@ -7,22 +7,22 @@ **foo: **.LFB[0-9]+: ** .cfi_startproc -** xorl %edx, %edx +** xorl %eax, %eax **.L[0-9]+: -** movl %edx, %eax -** subl \$-128, %edx -** vmovdqa src\(%rax\), %ymm3 -** vmovdqa src\+32\(%rax\), %ymm2 -** vmovdqa src\+64\(%rax\), %ymm1 -** vmovdqa src\+96\(%rax\), %ymm0 -** vmovdqa %ymm3, dest\(%rax\) -** vmovdqa %ymm2, dest\+32\(%rax\) -** vmovdqa %ymm1, dest\+64\(%rax\) -** vmovdqa %ymm0, dest\+96\(%rax\) -** cmpl \$512, %edx +** movl %eax, %edx +** subl \$-128, %eax +** vmovdqa src\(%rdx\), %ymm3 +** vmovdqa src\+32\(%rdx\), %ymm2 +** vmovdqa src\+64\(%rdx\), %ymm1 +** vmovdqa src\+96\(%rdx\), %ymm0 +** vmovdqa %ymm3, dest\(%rdx\) +** vmovdqa %ymm2, dest\+32\(%rdx\) +** vmovdqa %ymm1, dest\+64\(%rdx\) +** vmovdqa %ymm0, dest\+96\(%rdx\) +** cmpl \$512, %eax ** jb .L[0-9]+ -** vmovdqa src\(%rdx\), %ymm0 -** vmovdqa %ymm0, dest\(%rdx\) +** vmovdqa src\(%rax\), %ymm0 +** vmovdqa %ymm0, dest\(%rax\) ** vzeroupper ** ret **... diff --git a/gcc/testsuite/gcc.target/i386/memcpy-pr120683-5.c b/gcc/testsuite/gcc.target/i386/memcpy-pr120683-5.c index 34a74080f21a..294d25c53e6d 100644 --- a/gcc/testsuite/gcc.target/i386/memcpy-pr120683-5.c +++ b/gcc/testsuite/gcc.target/i386/memcpy-pr120683-5.c @@ -7,24 +7,24 @@ **foo: **.LFB[0-9]+: ** .cfi_startproc -** xorl %edx, %edx +** xorl %eax, %eax **.L[0-9]+: -** movl %edx, %eax -** subl \$-128, %edx -** vmovdqa src\(%rax\), %ymm3 -** vmovdqa src\+32\(%rax\), %ymm2 -** vmovdqa src\+64\(%rax\), %ymm1 -** vmovdqa src\+96\(%rax\), %ymm0 -** vmovdqa %ymm3, dest\(%rax\) -** vmovdqa %ymm2, dest\+32\(%rax\) -** vmovdqa %ymm1, dest\+64\(%rax\) -** vmovdqa %ymm0, dest\+96\(%rax\) -** cmpl \$512, %edx +** movl %eax, %edx +** subl \$-128, %eax +** vmovdqa src\(%rdx\), %ymm3 +** vmovdqa src\+32\(%rdx\), %ymm2 +** vmovdqa src\+64\(%rdx\), %ymm1 +** vmovdqa src\+96\(%rdx\), %ymm0 +** vmovdqa %ymm3, dest\(%rdx\) +** vmovdqa %ymm2, dest\+32\(%rdx\) +** vmovdqa %ymm1, dest\+64\(%rdx\) +** vmovdqa %ymm0, dest\+96\(%rdx\) +** cmpl \$512, %eax ** jb .L[0-9]+ -** vmovdqa src\(%rdx\), %ymm0 -** vmovdqa %ymm0, dest\(%rdx\) -** vmovdqu src\+31\(%rdx\), %ymm0 -** vmovdqu %ymm0, dest\+31\(%rdx\) +** vmovdqa src\(%rax\), %ymm0 +** vmovdqa %ymm0, dest\(%rax\) +** vmovdqu src\+31\(%rax\), %ymm0 +** vmovdqu %ymm0, dest\+31\(%rax\) ** vzeroupper ** ret **... diff --git a/gcc/testsuite/gcc.target/i386/memcpy-pr120683-6.c b/gcc/testsuite/gcc.target/i386/memcpy-pr120683-6.c index aa5d90d62e4b..2013916f7b2b 100644 --- a/gcc/testsuite/gcc.target/i386/memcpy-pr120683-6.c +++ b/gcc/testsuite/gcc.target/i386/memcpy-pr120683-6.c @@ -7,22 +7,22 @@ **foo: **.LFB[0-9]+: ** .cfi_startproc -** xorl %edx, %edx +** xorl %eax, %eax **.L[0-9]+: -** movl %edx, %eax -** addl \$256, %edx -** vmovdqa64 src\(%rax\), %zmm3 -** vmovdqa64 src\+64\(%rax\), %zmm2 -** vmovdqa64 src\+128\(%rax\), %zmm1 -** vmovdqa64 src\+192\(%rax\), %zmm0 -** vmovdqa64 %zmm3, dest\(%rax\) -** vmovdqa64 %zmm2, dest\+64\(%rax\) -** vmovdqa64 %zmm1, dest\+128\(%rax\) -** vmovdqa64 %zmm0, dest\+192\(%rax\) -** cmpl \$1024, %edx +** movl %eax, %edx +** addl \$256, %eax +** vmovdqa64 src\(%rdx\), %zmm3 +** vmovdqa64 src\+64\(%rdx\), %zmm2 +** vmovdqa64 src\+128\(%rdx\), %zmm1 +** vmovdqa64 src\+192\(%rdx\), %zmm0 +** vmovdqa64 %zmm3, dest\(%rdx\) +** vmovdqa64 %zmm2, dest\+64\(%rdx\) +** vmovdqa64 %zmm1, dest\+128\(%rdx\) +** vmovdqa64 %zmm0, dest\+192\(%rdx\) +** cmpl \$1024, %eax ** jb .L[0-9]+ -** vmovdqa64 src\(%rdx\), %zmm0 -** vmovdqa64 %zmm0, dest\(%rdx\) +** vmovdqa64 src\(%rax\), %zmm0 +** vmovdqa64 %zmm0, dest\(%rax\) ** vzeroupper ** ret **... diff --git a/gcc/testsuite/gcc.target/i386/memcpy-pr120683-7.c b/gcc/testsuite/gcc.target/i386/memcpy-pr120683-7.c index 63d8a1521a16..30e2c3c6bef0 100644 --- a/gcc/testsuite/gcc.target/i386/memcpy-pr120683-7.c +++ b/gcc/testsuite/gcc.target/i386/memcpy-pr120683-7.c @@ -7,24 +7,24 @@ **foo: **.LFB[0-9]+: ** .cfi_startproc -** xorl %edx, %edx +** xorl %eax, %eax **.L[0-9]+: -** movl %edx, %eax -** addl \$256, %edx -** vmovdqa64 src\(%rax\), %zmm3 -** vmovdqa64 src\+64\(%rax\), %zmm2 -** vmovdqa64 src\+128\(%rax\), %zmm1 -** vmovdqa64 src\+192\(%rax\), %zmm0 -** vmovdqa64 %zmm3, dest\(%rax\) -** vmovdqa64 %zmm2, dest\+64\(%rax\) -** vmovdqa64 %zmm1, dest\+128\(%rax\) -** vmovdqa64 %zmm0, dest\+192\(%rax\) -** cmpl \$1024, %edx +** movl %eax, %edx +** addl \$256, %eax +** vmovdqa64 src\(%rdx\), %zmm3 +** vmovdqa64 src\+64\(%rdx\), %zmm2 +** vmovdqa64 src\+128\(%rdx\), %zmm1 +** vmovdqa64 src\+192\(%rdx\), %zmm0 +** vmovdqa64 %zmm3, dest\(%rdx\) +** vmovdqa64 %zmm2, dest\+64\(%rdx\) +** vmovdqa64 %zmm1, dest\+128\(%rdx\) +** vmovdqa64 %zmm0, dest\+192\(%rdx\) +** cmpl \$1024, %eax ** jb .L[0-9]+ -** vmovdqa src\(%rdx\), %ymm0 -** vmovdqa %ymm0, dest\(%rdx\) -** vmovdqu src\+31\(%rdx\), %ymm0 -** vmovdqu %ymm0, dest\+31\(%rdx\) +** vmovdqa src\(%rax\), %ymm0 +** vmovdqa %ymm0, dest\(%rax\) +** vmovdqu src\+31\(%rax\), %ymm0 +** vmovdqu %ymm0, dest\+31\(%rax\) ** vzeroupper ** ret **... diff --git a/gcc/testsuite/gcc.target/i386/memcpy-pr95886.c b/gcc/testsuite/gcc.target/i386/memcpy-pr95886.c index 0699146296ab..6f39b992728c 100644 --- a/gcc/testsuite/gcc.target/i386/memcpy-pr95886.c +++ b/gcc/testsuite/gcc.target/i386/memcpy-pr95886.c @@ -74,7 +74,7 @@ void cpy_123406789 (void *d) __builtin_memcpy (d, a1234067890, 9); } -/* { dg-final { scan-rtl-dump-times "const_int 578437695685198337" 1 "expand"} } */ +/* { dg-final { scan-rtl-dump-times "const_int 578437674277470721" 1 "expand"} } */ const char a1234507890[10] = { 1, 2, 3, 4, 5, 0, 7, 8, 9 }; diff --git a/gcc/testsuite/gcc.target/i386/part-vect-sqrtph-1.c b/gcc/testsuite/gcc.target/i386/part-vect-sqrtph-1.c index b7f9e7fb9b21..a6e62d0094b1 100644 --- a/gcc/testsuite/gcc.target/i386/part-vect-sqrtph-1.c +++ b/gcc/testsuite/gcc.target/i386/part-vect-sqrtph-1.c @@ -1,7 +1,6 @@ /* { dg-do compile } */ /* { dg-options "-mavx512fp16 -mavx512vl -Ofast" } */ /* { dg-final { scan-assembler-times {(?n)vsqrtph[ \t].*%xmm[0-9]} 2 { target { ! ia32 } } } } */ -/* { dg-final { scan-assembler-times {(?n)vsqrtph[ \t].*%xmm[0-9]} 2 { target { ! ia32 } } } } */ void foo16_sqrt (_Float16* a, _Float16* __restrict c) diff --git a/gcc/testsuite/gcc.target/i386/pieces-memcmp-2.c b/gcc/testsuite/gcc.target/i386/pieces-memcmp-2.c index 6061c9111650..d4dd0a5159f1 100644 --- a/gcc/testsuite/gcc.target/i386/pieces-memcmp-2.c +++ b/gcc/testsuite/gcc.target/i386/pieces-memcmp-2.c @@ -1,5 +1,5 @@ /* { dg-do compile { target ia32 } } */ -/* { dg-options "-O2 -mavx2 -mmove-max=128 -mstore-max=128" } */ +/* { dg-options "-O2 -mavx2 -mmove-max=128" } */ int foo(char *a) { diff --git a/gcc/testsuite/gcc.target/i386/pieces-memcpy-18.c b/gcc/testsuite/gcc.target/i386/pieces-memcpy-18.c index b15a0db9ff0c..b4995ac0598c 100644 --- a/gcc/testsuite/gcc.target/i386/pieces-memcpy-18.c +++ b/gcc/testsuite/gcc.target/i386/pieces-memcpy-18.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -march=sapphirerapids" } */ +/* { dg-options "-O2 -march=znver5" } */ extern char *dst, *src; diff --git a/gcc/testsuite/gcc.target/i386/pieces-memcpy-19.c b/gcc/testsuite/gcc.target/i386/pieces-memcpy-19.c index a5b5b617578c..de9757fc3ea0 100644 --- a/gcc/testsuite/gcc.target/i386/pieces-memcpy-19.c +++ b/gcc/testsuite/gcc.target/i386/pieces-memcpy-19.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -march=sapphirerapids -mmove-max=128 -mstore-max=128" } */ +/* { dg-options "-O2 -march=sapphirerapids -mmove-max=128" } */ extern char *dst, *src; diff --git a/gcc/testsuite/gcc.target/i386/pieces-memcpy-20.c b/gcc/testsuite/gcc.target/i386/pieces-memcpy-20.c index 1feff48c5b24..cb96fbab6965 100644 --- a/gcc/testsuite/gcc.target/i386/pieces-memcpy-20.c +++ b/gcc/testsuite/gcc.target/i386/pieces-memcpy-20.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -march=sapphirerapids -mmove-max=256 -mstore-max=256" } */ +/* { dg-options "-O2 -march=sapphirerapids -mmove-max=256" } */ extern char *dst, *src; diff --git a/gcc/testsuite/gcc.target/i386/pieces-memcpy-21.c b/gcc/testsuite/gcc.target/i386/pieces-memcpy-21.c index ef439f20f74d..804a2989d640 100644 --- a/gcc/testsuite/gcc.target/i386/pieces-memcpy-21.c +++ b/gcc/testsuite/gcc.target/i386/pieces-memcpy-21.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -mtune=sapphirerapids -march=x86-64 -mavx2" } */ +/* { dg-options "-O2 -mtune=znver5 -march=x86-64 -mavx2" } */ extern char *dst, *src; diff --git a/gcc/testsuite/gcc.target/i386/pieces-memset-11.c b/gcc/testsuite/gcc.target/i386/pieces-memset-11.c index 3802eb7c1472..fbf76d06b1d0 100644 --- a/gcc/testsuite/gcc.target/i386/pieces-memset-11.c +++ b/gcc/testsuite/gcc.target/i386/pieces-memset-11.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -mno-avx2 -mavx -mtune-ctrl=avx256_store_by_pieces" } */ +/* { dg-options "-O2 -mno-avx2 -mavx -mtune-ctrl=avx256_move_by_pieces" } */ extern char *dst; diff --git a/gcc/testsuite/gcc.target/i386/pieces-memset-14.c b/gcc/testsuite/gcc.target/i386/pieces-memset-14.c index 10bc085f83b3..cb940f6710c3 100644 --- a/gcc/testsuite/gcc.target/i386/pieces-memset-14.c +++ b/gcc/testsuite/gcc.target/i386/pieces-memset-14.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -mno-avx2 -mavx -mtune-ctrl=avx256_store_by_pieces" } */ +/* { dg-options "-O2 -mno-avx2 -mavx -mtune-ctrl=avx256_move_by_pieces" } */ extern char *dst; diff --git a/gcc/testsuite/gcc.target/i386/pieces-memset-2.c b/gcc/testsuite/gcc.target/i386/pieces-memset-2.c index 4ebfc4df090a..53498f9f4aa1 100644 --- a/gcc/testsuite/gcc.target/i386/pieces-memset-2.c +++ b/gcc/testsuite/gcc.target/i386/pieces-memset-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -mno-avx2 -mavx -mtune-ctrl=avx256_store_by_pieces" } */ +/* { dg-options "-O2 -mno-avx2 -mavx -mtune-ctrl=avx256_move_by_pieces" } */ extern char *dst; diff --git a/gcc/testsuite/gcc.target/i386/pieces-memset-20.c b/gcc/testsuite/gcc.target/i386/pieces-memset-20.c index 1dc4db180d30..09c9defa0172 100644 --- a/gcc/testsuite/gcc.target/i386/pieces-memset-20.c +++ b/gcc/testsuite/gcc.target/i386/pieces-memset-20.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -mno-avx2 -mavx -mtune-ctrl=avx256_store_by_pieces" } */ +/* { dg-options "-O2 -mno-avx2 -mavx -mtune-ctrl=avx256_move_by_pieces" } */ extern char *dst; diff --git a/gcc/testsuite/gcc.target/i386/pieces-memset-23.c b/gcc/testsuite/gcc.target/i386/pieces-memset-23.c index 9232864024e5..f692ff00b38e 100644 --- a/gcc/testsuite/gcc.target/i386/pieces-memset-23.c +++ b/gcc/testsuite/gcc.target/i386/pieces-memset-23.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -mno-avx2 -mavx -mtune-ctrl=avx256_store_by_pieces" } */ +/* { dg-options "-O2 -mno-avx2 -mavx -mtune-ctrl=avx256_move_by_pieces" } */ extern char *dst; diff --git a/gcc/testsuite/gcc.target/i386/pieces-memset-29.c b/gcc/testsuite/gcc.target/i386/pieces-memset-29.c index 3b07a64e3f63..8499907b4164 100644 --- a/gcc/testsuite/gcc.target/i386/pieces-memset-29.c +++ b/gcc/testsuite/gcc.target/i386/pieces-memset-29.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -mno-avx2 -mavx -mtune-ctrl=avx256_store_by_pieces" } */ +/* { dg-options "-O2 -mno-avx2 -mavx -mtune-ctrl=avx256_move_by_pieces" } */ extern char *dst; diff --git a/gcc/testsuite/gcc.target/i386/pieces-memset-30.c b/gcc/testsuite/gcc.target/i386/pieces-memset-30.c index 59595e6d3c40..c9c4459894ea 100644 --- a/gcc/testsuite/gcc.target/i386/pieces-memset-30.c +++ b/gcc/testsuite/gcc.target/i386/pieces-memset-30.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -mno-avx512f -mavx2 -mtune-ctrl=avx256_store_by_pieces" } */ +/* { dg-options "-O2 -mno-avx512f -mavx2 -mtune-ctrl=avx256_move_by_pieces" } */ extern char *dst; diff --git a/gcc/testsuite/gcc.target/i386/pieces-memset-33.c b/gcc/testsuite/gcc.target/i386/pieces-memset-33.c index 68646223b0ed..b88988f50f5d 100644 --- a/gcc/testsuite/gcc.target/i386/pieces-memset-33.c +++ b/gcc/testsuite/gcc.target/i386/pieces-memset-33.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -mno-avx2 -mavx -mtune-ctrl=avx256_store_by_pieces" } */ +/* { dg-options "-O2 -mno-avx2 -mavx -mtune-ctrl=avx256_move_by_pieces" } */ extern char *dst; diff --git a/gcc/testsuite/gcc.target/i386/pieces-memset-34.c b/gcc/testsuite/gcc.target/i386/pieces-memset-34.c index 52a16a0292d1..b6a6c3dd1634 100644 --- a/gcc/testsuite/gcc.target/i386/pieces-memset-34.c +++ b/gcc/testsuite/gcc.target/i386/pieces-memset-34.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -mno-avx512f -mavx2 -mtune-ctrl=avx256_store_by_pieces" } */ +/* { dg-options "-O2 -mno-avx512f -mavx2 -mtune-ctrl=avx256_move_by_pieces" } */ extern char *dst; diff --git a/gcc/testsuite/gcc.target/i386/pieces-memset-37.c b/gcc/testsuite/gcc.target/i386/pieces-memset-37.c index 5cc4d7749c36..7b9845f9ef4e 100644 --- a/gcc/testsuite/gcc.target/i386/pieces-memset-37.c +++ b/gcc/testsuite/gcc.target/i386/pieces-memset-37.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -mno-avx512f -mavx2 -mtune-ctrl=avx256_store_by_pieces" } */ +/* { dg-options "-O2 -mno-avx512f -mavx2 -mtune-ctrl=avx256_move_by_pieces" } */ void foo (int a1, int a2, int a3, int a4, int a5, int a6, int x, char *dst) diff --git a/gcc/testsuite/gcc.target/i386/pieces-memset-44.c b/gcc/testsuite/gcc.target/i386/pieces-memset-44.c index 5986f8e8b239..94552bed9dcf 100644 --- a/gcc/testsuite/gcc.target/i386/pieces-memset-44.c +++ b/gcc/testsuite/gcc.target/i386/pieces-memset-44.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -mno-avx2 -mavx -mtune-ctrl=avx256_store_by_pieces" } */ +/* { dg-options "-O2 -mno-avx2 -mavx -mtune-ctrl=avx256_move_by_pieces" } */ extern char *dst; diff --git a/gcc/testsuite/gcc.target/i386/pieces-memset-45.c b/gcc/testsuite/gcc.target/i386/pieces-memset-45.c index e8ce7c23256f..d0822a774e3c 100644 --- a/gcc/testsuite/gcc.target/i386/pieces-memset-45.c +++ b/gcc/testsuite/gcc.target/i386/pieces-memset-45.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -march=x86-64 -mavx512f -mtune-ctrl=avx512_store_by_pieces" } */ +/* { dg-options "-O2 -march=x86-64 -mavx512f -mtune-ctrl=avx512_move_by_pieces" } */ extern char *dst; diff --git a/gcc/testsuite/gcc.target/i386/pieces-memset-46.c b/gcc/testsuite/gcc.target/i386/pieces-memset-46.c index be1b054eed2b..43d636ee3ff8 100644 --- a/gcc/testsuite/gcc.target/i386/pieces-memset-46.c +++ b/gcc/testsuite/gcc.target/i386/pieces-memset-46.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -march=sapphirerapids" } */ +/* { dg-options "-O2 -march=znver5" } */ extern char *dst; diff --git a/gcc/testsuite/gcc.target/i386/pieces-memset-47.c b/gcc/testsuite/gcc.target/i386/pieces-memset-47.c index 78d3290c74fb..99d6abe4844b 100644 --- a/gcc/testsuite/gcc.target/i386/pieces-memset-47.c +++ b/gcc/testsuite/gcc.target/i386/pieces-memset-47.c @@ -1,5 +1,6 @@ /* { dg-do compile } */ /* { dg-options "-O2 -march=sapphirerapids -mstore-max=128" } */ +/* { dg-warning ".-mstore-max=. is deprecated; use .-mmove-max=. instead" "" { target *-*-* } 0 } */ extern char *dst; diff --git a/gcc/testsuite/gcc.target/i386/pieces-memset-48.c b/gcc/testsuite/gcc.target/i386/pieces-memset-48.c index 6342dbb91b00..be12fbb2e9b5 100644 --- a/gcc/testsuite/gcc.target/i386/pieces-memset-48.c +++ b/gcc/testsuite/gcc.target/i386/pieces-memset-48.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -march=sapphirerapids -mstore-max=256" } */ +/* { dg-options "-O2 -march=sapphirerapids -mmove-max=256" } */ extern char *dst; diff --git a/gcc/testsuite/gcc.target/i386/pieces-memset-49.c b/gcc/testsuite/gcc.target/i386/pieces-memset-49.c index ad43f89a9bd8..ca4933ac1d80 100644 --- a/gcc/testsuite/gcc.target/i386/pieces-memset-49.c +++ b/gcc/testsuite/gcc.target/i386/pieces-memset-49.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -mtune=sapphirerapids -march=x86-64 -mavx2" } */ +/* { dg-options "-O2 -mtune=znver5 -march=x86-64 -mavx2" } */ extern char *dst; diff --git a/gcc/testsuite/gcc.target/i386/pieces-memset-5.c b/gcc/testsuite/gcc.target/i386/pieces-memset-5.c index e2379df71aaf..7fc824c3c56c 100644 --- a/gcc/testsuite/gcc.target/i386/pieces-memset-5.c +++ b/gcc/testsuite/gcc.target/i386/pieces-memset-5.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -mno-avx2 -mavx -mtune-ctrl=avx256_store_by_pieces" } */ +/* { dg-options "-O2 -mno-avx2 -mavx -mtune-ctrl=avx256_move_by_pieces" } */ extern char *dst; diff --git a/gcc/testsuite/gcc.target/i386/pr100865-10a.c b/gcc/testsuite/gcc.target/i386/pr100865-10a.c index 3bc0f1a2f0fb..04129f51234d 100644 --- a/gcc/testsuite/gcc.target/i386/pr100865-10a.c +++ b/gcc/testsuite/gcc.target/i386/pr100865-10a.c @@ -1,5 +1,5 @@ /* { dg-do compile { target int128 } } */ -/* { dg-options "-O3 -march=skylake -mtune-ctrl=avx256_store_by_pieces" } */ +/* { dg-options "-O3 -march=skylake -mtune-ctrl=avx256_move_by_pieces" } */ extern __int128 array[16]; diff --git a/gcc/testsuite/gcc.target/i386/pr100865-4a.c b/gcc/testsuite/gcc.target/i386/pr100865-4a.c index 8009e5cebd69..5817f78fbb38 100644 --- a/gcc/testsuite/gcc.target/i386/pr100865-4a.c +++ b/gcc/testsuite/gcc.target/i386/pr100865-4a.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -march=skylake -mtune-ctrl=avx256_store_by_pieces" } */ +/* { dg-options "-O2 -march=skylake -mtune-ctrl=avx256_move_by_pieces" } */ /* { dg-additional-options "-fno-PIE" { target ia32 } } */ extern char array[64]; diff --git a/gcc/testsuite/gcc.target/i386/pr104610.c b/gcc/testsuite/gcc.target/i386/pr104610.c index 5173fc8898ce..fec9fcbe9357 100644 --- a/gcc/testsuite/gcc.target/i386/pr104610.c +++ b/gcc/testsuite/gcc.target/i386/pr104610.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -mavx -mmove-max=256 -mstore-max=256 -fno-stack-protector" } */ +/* { dg-options "-O2 -mavx -mmove-max=256 -fno-stack-protector" } */ /* { dg-final { scan-assembler-times {(?n)vptest.*ymm} 1 } } */ /* { dg-final { scan-assembler-times {sete} 1 } } */ /* { dg-final { scan-assembler-not {(?n)je.*L[0-9]} } } */ diff --git a/gcc/testsuite/gcc.target/i386/pr107432-7.c b/gcc/testsuite/gcc.target/i386/pr107432-7.c index 1b33e9a95088..45c58b4bd36c 100644 --- a/gcc/testsuite/gcc.target/i386/pr107432-7.c +++ b/gcc/testsuite/gcc.target/i386/pr107432-7.c @@ -10,10 +10,10 @@ /* { dg-final { scan-assembler-times "vpmovsxbd" 7 { target { ! ia32 } } } } */ /* { dg-final { scan-assembler-times "vpmovzxbd" 5 { target { ia32 } } } } */ /* { dg-final { scan-assembler-times "vpmovzxbd" 7 { target { ! ia32 } } } } */ -/* { dg-final { scan-assembler-times "vpmovsxbd" 5 { target { ia32 } } } } */ -/* { dg-final { scan-assembler-times "vpmovsxbd" 7 { target { ! ia32 } } } } */ -/* { dg-final { scan-assembler-times "vpmovzxbd" 5 { target { ia32 } } } } */ -/* { dg-final { scan-assembler-times "vpmovzxbd" 7 { target { ! ia32 } } } } */ +/* { dg-final { scan-assembler-times "vpmovsxbw" 4 { target { ia32 } } } } */ +/* { dg-final { scan-assembler-times "vpmovsxbw" 5 { target { ! ia32 } } } } */ +/* { dg-final { scan-assembler-times "vpmovzxbw" 4 { target { ia32 } } } } */ +/* { dg-final { scan-assembler-times "vpmovzxbw" 5 { target { ! ia32 } } } } */ #include diff --git a/gcc/testsuite/gcc.target/i386/pr111657-1.c b/gcc/testsuite/gcc.target/i386/pr111657-1.c index fa9f4cfe5c53..bb37e95a39b2 100644 --- a/gcc/testsuite/gcc.target/i386/pr111657-1.c +++ b/gcc/testsuite/gcc.target/i386/pr111657-1.c @@ -7,17 +7,17 @@ **bar: **... **.L[0-9]+: -** movl %edx, %eax -** addl \$32, %edx -** movq %gs:m\(%rax\), %r9 -** movq %gs:m\+8\(%rax\), %r8 -** movq %gs:m\+16\(%rax\), %rsi -** movq %gs:m\+24\(%rax\), %rcx -** movq %r9, \(%rdi,%rax\) -** movq %r8, 8\(%rdi,%rax\) -** movq %rsi, 16\(%rdi,%rax\) -** movq %rcx, 24\(%rdi,%rax\) -** cmpl \$224, %edx +** movl %eax, %edx +** addl \$32, %eax +** movq %gs:m\(%rdx\), %r9 +** movq %gs:m\+8\(%rdx\), %r8 +** movq %gs:m\+16\(%rdx\), %rsi +** movq %gs:m\+24\(%rdx\), %rcx +** movq %r9, \(%rdi,%rdx\) +** movq %r8, 8\(%rdi,%rdx\) +** movq %rsi, 16\(%rdi,%rdx\) +** movq %rcx, 24\(%rdi,%rdx\) +** cmpl \$224, %eax ** jb .L[0-9]+ **... */ diff --git a/gcc/testsuite/gcc.target/i386/pr119919.c b/gcc/testsuite/gcc.target/i386/pr119919.c index e39819f682db..bf11f9171925 100644 --- a/gcc/testsuite/gcc.target/i386/pr119919.c +++ b/gcc/testsuite/gcc.target/i386/pr119919.c @@ -1,5 +1,6 @@ /* { dg-do compile } */ /* { dg-options "-O2 -msse2 -fdump-tree-vect-details -mtune=znver1" } */ + int a[9*9]; bool b[9]; void test() @@ -10,4 +11,4 @@ void test() } } -/* { dg-final { scan-tree-dump "loop vectorized using 8 byte vectors" "vect" } } */ +/* { dg-final { scan-tree-dump "loop vectorized using 8 byte vectors" "vect" { target { ! ia32 } } } } */ diff --git a/gcc/testsuite/gcc.target/i386/pr120691.c b/gcc/testsuite/gcc.target/i386/pr120691.c new file mode 100644 index 000000000000..9bbd61ed53d5 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr120691.c @@ -0,0 +1,19 @@ +/* { dg-do run } */ +/* { dg-options "-O0 -mfpmath=sse -msse2" } */ +/* { dg-require-effective-target sse2 } */ +/* { dg-require-effective-target fenv } */ +/* { dg-require-effective-target dfp } */ + +#include + +int main() { + fesetround( FE_UPWARD ); + _Decimal128 x1 = 9825, x2 = 10000 ; + + double c = (double) (x1 / x2); + + if (c != 0.9825) + __builtin_abort (); + + return 0 ; +} diff --git a/gcc/testsuite/gcc.target/i386/pr121410.c b/gcc/testsuite/gcc.target/i386/pr121410.c index 04bab91e1b81..93cb39b80179 100644 --- a/gcc/testsuite/gcc.target/i386/pr121410.c +++ b/gcc/testsuite/gcc.target/i386/pr121410.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -march=x86-64 -mavx512f -mstore-max=128" } */ +/* { dg-options "-O2 -march=x86-64 -mavx512f -mmove-max=128" } */ extern unsigned _BitInt(3719) a; extern _BitInt(465) g; diff --git a/gcc/testsuite/gcc.target/i386/pr121861-1a.c b/gcc/testsuite/gcc.target/i386/pr121861-1a.c new file mode 100644 index 000000000000..ebd0a57253c7 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr121861-1a.c @@ -0,0 +1,43 @@ +/* { dg-do compile } */ +/* { dg-options "-Os -mfpmath=sse -mno-avx -msse4.1" } */ + +#include + +float +cf (float x) +{ + return ceilf (x); +} + +float +ff (float x) +{ + return floorf (x); +} + +float +tf (float x) +{ + return truncf (x); +} + +double +c (double x) +{ + return ceil (x); +} + +double +f (double x) +{ + return floor (x); +} + +double +t (double x) +{ + return trunc (x); +} + +/* { dg-final { scan-assembler-times "roundss" 3 } } */ +/* { dg-final { scan-assembler-times "roundsd" 3 } } */ diff --git a/gcc/testsuite/gcc.target/i386/pr121861-1b.c b/gcc/testsuite/gcc.target/i386/pr121861-1b.c new file mode 100644 index 000000000000..b52faae66d0e --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr121861-1b.c @@ -0,0 +1,7 @@ +/* { dg-do compile } */ +/* { dg-options "-Os -mfpmath=sse -mno-avx512f -mavx" } */ + +#include "pr121861-1a.c" + +/* { dg-final { scan-assembler-times "vroundss" 3 } } */ +/* { dg-final { scan-assembler-times "vroundsd" 3 } } */ diff --git a/gcc/testsuite/gcc.target/i386/pr121934-1a.c b/gcc/testsuite/gcc.target/i386/pr121934-1a.c new file mode 100644 index 000000000000..6b6881367db4 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr121934-1a.c @@ -0,0 +1,22 @@ +/* { dg-do compile } */ +/* { dg-options "-O3 -fno-tree-dominator-opts -fno-tree-vrp -fno-tree-ccp -fno-tree-forwprop -fno-tree-pre -fno-tree-fre" } */ + +extern int f(); +int a, b, c, d[3]; +void g() { + int h; + if (f()) { + if (b) + i: + c > 0; + a = 0; + for (h = 0; h < 3; h++) { + if (a != 1) + __builtin_printf("0\n"); + d[h] = -1; + } + goto i; + } +} + +/* { dg-final { scan-assembler-not "rep stos" } } */ diff --git a/gcc/testsuite/gcc.target/i386/pr121934-1b.c b/gcc/testsuite/gcc.target/i386/pr121934-1b.c new file mode 100644 index 000000000000..47381ec34769 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr121934-1b.c @@ -0,0 +1,7 @@ +/* { dg-do compile } */ +/* { dg-options "-O3 -fno-tree-dominator-opts -fno-tree-vrp -fno-tree-ccp -fno-tree-forwprop -fno-tree-pre -fno-tree-fre -mmemset-strategy=rep_byte:8192:align,libcall:-1:noalign" } */ + +#include "pr121934-1a.c" + +/* { dg-final { scan-assembler-not "rep stos" } } */ +/* { dg-final { scan-assembler-not "movb\[ \\t\]+\\\$-1" } } */ diff --git a/gcc/testsuite/gcc.target/i386/pr121934-2a.c b/gcc/testsuite/gcc.target/i386/pr121934-2a.c new file mode 100644 index 000000000000..49def11aa4e9 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr121934-2a.c @@ -0,0 +1,23 @@ +/* { dg-do compile } */ +/* { dg-options "-O3 -fno-tree-dominator-opts -fno-tree-vrp -fno-tree-ccp -fno-tree-forwprop -fno-tree-pre -fno-tree-fre" } */ + +extern int f(); +int a, b, c; +long long int d[3]; +void g() { + int h; + if (f()) { + if (b) + i: + c > 0; + a = 0; + for (h = 0; h < 3; h++) { + if (a != 1) + __builtin_printf("0\n"); + d[h] = (long long int) -1; + } + goto i; + } +} + +/* { dg-final { scan-assembler-not "rep stos" } } */ diff --git a/gcc/testsuite/gcc.target/i386/pr121934-2b.c b/gcc/testsuite/gcc.target/i386/pr121934-2b.c new file mode 100644 index 000000000000..1c634dfe4202 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr121934-2b.c @@ -0,0 +1,7 @@ +/* { dg-do compile } */ +/* { dg-options "-O3 -fno-tree-dominator-opts -fno-tree-vrp -fno-tree-ccp -fno-tree-forwprop -fno-tree-pre -fno-tree-fre -mmemset-strategy=rep_byte:8192:align,libcall:-1:noalign" } */ + +#include "pr121934-2a.c" + +/* { dg-final { scan-assembler-not "rep stos" } } */ +/* { dg-final { scan-assembler-not "movb\[ \\t\]+\\\$-1" } } */ diff --git a/gcc/testsuite/gcc.target/i386/pr121934-3a.c b/gcc/testsuite/gcc.target/i386/pr121934-3a.c new file mode 100644 index 000000000000..0c04b69c0d4d --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr121934-3a.c @@ -0,0 +1,23 @@ +/* { dg-do compile } */ +/* { dg-options "-O3 -fno-tree-dominator-opts -fno-tree-vrp -fno-tree-ccp -fno-tree-forwprop -fno-tree-pre -fno-tree-fre -msse2" } */ + +extern int f(); +int a, b, c; +_BitInt(128) d[3]; +void g() { + int h; + if (f()) { + if (b) + i: + c > 0; + a = 0; + for (h = 0; h < 3; h++) { + if (a != 1) + __builtin_printf("0\n"); + d[h] = (_BitInt(128)) -1; + } + goto i; + } +} + +/* { dg-final { scan-assembler-not "rep stos" } } */ diff --git a/gcc/testsuite/gcc.target/i386/pr121934-3b.c b/gcc/testsuite/gcc.target/i386/pr121934-3b.c new file mode 100644 index 000000000000..ff4b0831cead --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr121934-3b.c @@ -0,0 +1,7 @@ +/* { dg-do compile } */ +/* { dg-options "-O3 -fno-tree-dominator-opts -fno-tree-vrp -fno-tree-ccp -fno-tree-forwprop -fno-tree-pre -fno-tree-fre -msse2 -mmemset-strategy=rep_byte:8192:align,libcall:-1:noalign" } */ + +#include "pr121934-3a.c" + +/* { dg-final { scan-assembler-not "rep stos" } } */ +/* { dg-final { scan-assembler-not "movb\[ \\t\]+\\\$-1" } } */ diff --git a/gcc/testsuite/gcc.target/i386/pr121934-4a.c b/gcc/testsuite/gcc.target/i386/pr121934-4a.c new file mode 100644 index 000000000000..5aa3e069cff2 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr121934-4a.c @@ -0,0 +1,23 @@ +/* { dg-do compile } */ +/* { dg-options "-O3 -fno-tree-dominator-opts -fno-tree-vrp -fno-tree-ccp -fno-tree-forwprop -fno-tree-pre -fno-tree-fre -mno-avx512f -mavx -mprefer-vector-width=256" } */ + +extern int f(); +int a, b, c; +_BitInt(256) d[3]; +void g() { + int h; + if (f()) { + if (b) + i: + c > 0; + a = 0; + for (h = 0; h < 3; h++) { + if (a != 1) + __builtin_printf("0\n"); + d[h] = (_BitInt(256)) -1; + } + goto i; + } +} + +/* { dg-final { scan-assembler-not "rep stos" } } */ diff --git a/gcc/testsuite/gcc.target/i386/pr121934-4b.c b/gcc/testsuite/gcc.target/i386/pr121934-4b.c new file mode 100644 index 000000000000..5f8241dcad5d --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr121934-4b.c @@ -0,0 +1,7 @@ +/* { dg-do compile } */ +/* { dg-options "-O3 -fno-tree-dominator-opts -fno-tree-vrp -fno-tree-ccp -fno-tree-forwprop -fno-tree-pre -fno-tree-fre -mno-avx512f -mavx -mprefer-vector-width=256 -mmemset-strategy=rep_byte:8192:align,libcall:-1:noalign" } */ + +#include "pr121934-4a.c" + +/* { dg-final { scan-assembler-not "rep stos" } } */ +/* { dg-final { scan-assembler-not "movb\[ \\t\]+\\\$-1" } } */ diff --git a/gcc/testsuite/gcc.target/i386/pr121934-5a.c b/gcc/testsuite/gcc.target/i386/pr121934-5a.c new file mode 100644 index 000000000000..10be0dd4343e --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr121934-5a.c @@ -0,0 +1,23 @@ +/* { dg-do compile } */ +/* { dg-options "-O3 -fno-tree-dominator-opts -fno-tree-vrp -fno-tree-ccp -fno-tree-forwprop -fno-tree-pre -fno-tree-fre -mavx512f -mprefer-vector-width=512" } */ + +extern int f(); +int a, b, c; +_BitInt(512) d[3]; +void g() { + int h; + if (f()) { + if (b) + i: + c > 0; + a = 0; + for (h = 0; h < 3; h++) { + if (a != 1) + __builtin_printf("0\n"); + d[h] = (_BitInt(512)) -1; + } + goto i; + } +} + +/* { dg-final { scan-assembler-not "rep stos" } } */ diff --git a/gcc/testsuite/gcc.target/i386/pr121934-5b.c b/gcc/testsuite/gcc.target/i386/pr121934-5b.c new file mode 100644 index 000000000000..6a45a8a7a8b4 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr121934-5b.c @@ -0,0 +1,7 @@ +/* { dg-do compile } */ +/* { dg-options "-O3 -fno-tree-dominator-opts -fno-tree-vrp -fno-tree-ccp -fno-tree-forwprop -fno-tree-pre -fno-tree-fre -mavx512f -mprefer-vector-width=512 -mmemset-strategy=rep_byte:8192:align,libcall:-1:noalign" } */ + +#include "pr121934-5a.c" + +/* { dg-final { scan-assembler-not "rep stos" } } */ +/* { dg-final { scan-assembler-not "movb\[ \\t\]+\\\$-1" } } */ diff --git a/gcc/testsuite/gcc.target/i386/pr122021-0.c b/gcc/testsuite/gcc.target/i386/pr122021-0.c new file mode 100644 index 000000000000..de17734523cd --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr122021-0.c @@ -0,0 +1,22 @@ +/* { dg-do run } */ +/* { dg-options "-O2 -m32" } */ + +#include +#include + +__attribute__ ((noipa)) static void +vp9_build_inter_predictor (int a) +{ + int16_t row = a * 2; + int32_t row_w = (int)((int64_t)row * 16384 >> 14); + + if (row_w != -544) + __builtin_abort (); +} + +int +main () +{ + vp9_build_inter_predictor (-272); + return 0; +} diff --git a/gcc/testsuite/gcc.target/i386/pr122104.c b/gcc/testsuite/gcc.target/i386/pr122104.c new file mode 100644 index 000000000000..be88933e3ec6 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr122104.c @@ -0,0 +1,12 @@ +/* PR tree-optimization/122104 */ +/* { dg-do compile } */ +/* { dg-options "-O2 -fdump-tree-widening_mul-alias" } */ +/* { dg-final { scan-tree-dump "\\.MUL_OVERFLOW" "widening_mul" } } */ +/* { dg-final { scan-tree-dump-not "# RANGE \\\[irange\\\] unsigned int \\\[1, " "widening_mul" } } */ + +int +foo (int x) +{ + int r = (unsigned) x * 35; + return x && ((unsigned) r / x) != 35U; +} diff --git a/gcc/testsuite/gcc.target/i386/pr122150.c b/gcc/testsuite/gcc.target/i386/pr122150.c new file mode 100644 index 000000000000..973c34d180ee --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr122150.c @@ -0,0 +1,21 @@ +/* { dg-do run } */ +/* { dg-options "-mstringop-strategy=unrolled_loop" } */ + +char c[2841]; + +__attribute__((noipa)) +void +foo (void) +{ + __builtin_memset (&c, 1, 2841); +} + +int +main (void) +{ + foo (); + for (unsigned i = 0; i < sizeof (c); i++) + if (c[i] != 1) + __builtin_abort(); + return 0; +} diff --git a/gcc/testsuite/gcc.target/i386/pr122180.c b/gcc/testsuite/gcc.target/i386/pr122180.c new file mode 100644 index 000000000000..6153d6c4c710 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr122180.c @@ -0,0 +1,7 @@ +/* { dg-do compile } */ + +static void s() __attribute__((target("avx"))); +static void s() { } +void f() { + s(); +} diff --git a/gcc/testsuite/gcc.target/i386/pr88828-0.c b/gcc/testsuite/gcc.target/i386/pr88828-0.c index 441c441b51dd..6fceafe6ce55 100644 --- a/gcc/testsuite/gcc.target/i386/pr88828-0.c +++ b/gcc/testsuite/gcc.target/i386/pr88828-0.c @@ -9,15 +9,13 @@ v4si foo (v4si x) return (v4si){ x[0], 1, x[2], 3 }; } -/* { dg-final { scan-assembler "pblendw" } } */ - v4si bar (v4sf x) { return (v4si){ 1, x[1], x[2], 3 }; } /* { dg-final { scan-assembler "cvttps2dq" } } */ -/* { dg-final { scan-assembler "pblendw" } } */ +/* { dg-final { scan-assembler-times "pblendw" 2 } } */ v4si baz (v4si x) { diff --git a/gcc/testsuite/gcc.target/i386/pr90773-20.c b/gcc/testsuite/gcc.target/i386/pr90773-20.c index 884a5502b592..3286d33f3962 100644 --- a/gcc/testsuite/gcc.target/i386/pr90773-20.c +++ b/gcc/testsuite/gcc.target/i386/pr90773-20.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -march=skylake -mtune-ctrl=avx256_store_by_pieces" } */ +/* { dg-options "-O2 -march=skylake -mtune-ctrl=avx256_move_by_pieces" } */ extern char *dst; diff --git a/gcc/testsuite/gcc.target/i386/pr90773-21.c b/gcc/testsuite/gcc.target/i386/pr90773-21.c index 0d620fff83c3..56ec843c40f1 100644 --- a/gcc/testsuite/gcc.target/i386/pr90773-21.c +++ b/gcc/testsuite/gcc.target/i386/pr90773-21.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -march=skylake -mtune-ctrl=avx256_store_by_pieces" } */ +/* { dg-options "-O2 -march=skylake -mtune-ctrl=avx256_move_by_pieces" } */ extern char *dst; diff --git a/gcc/testsuite/gcc.target/i386/pr90773-22.c b/gcc/testsuite/gcc.target/i386/pr90773-22.c index 245a436b7eb1..5fc70c3d02d8 100644 --- a/gcc/testsuite/gcc.target/i386/pr90773-22.c +++ b/gcc/testsuite/gcc.target/i386/pr90773-22.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -march=skylake -mtune-ctrl=avx256_store_by_pieces" } */ +/* { dg-options "-O2 -march=skylake -mtune-ctrl=avx256_move_by_pieces" } */ extern char *dst; diff --git a/gcc/testsuite/gcc.target/i386/pr90773-23.c b/gcc/testsuite/gcc.target/i386/pr90773-23.c index b7369e802e10..120f2d9d809c 100644 --- a/gcc/testsuite/gcc.target/i386/pr90773-23.c +++ b/gcc/testsuite/gcc.target/i386/pr90773-23.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -march=skylake -mtune-ctrl=avx256_store_by_pieces" } */ +/* { dg-options "-O2 -march=skylake -mtune-ctrl=avx256_move_by_pieces" } */ extern char *dst; diff --git a/gcc/testsuite/gcc.target/i386/vect-epilogues-4.c b/gcc/testsuite/gcc.target/i386/vect-epilogues-4.c index 498db6b5a13c..d48a79b25790 100644 --- a/gcc/testsuite/gcc.target/i386/vect-epilogues-4.c +++ b/gcc/testsuite/gcc.target/i386/vect-epilogues-4.c @@ -9,5 +9,6 @@ int test (signed char *data, int n) return sum; } -/* { dg-final { scan-tree-dump-times "loop vectorized using 64 byte vectors" 2 "vect" } } */ +/* { dg-final { scan-tree-dump-times "loop vectorized using 64 byte vectors" 1 "vect" } } */ +/* { dg-final { scan-tree-dump-times "epilogue loop vectorized using masked 64 byte vectors" 1 "vect" } } */ /* { dg-final { scan-tree-dump-not "loop vectorized using 32 byte vectors" "vect" } } */ diff --git a/gcc/testsuite/gcc.target/loongarch/can_inline_1.c b/gcc/testsuite/gcc.target/loongarch/can_inline_1.c new file mode 100644 index 000000000000..a1726d7f0896 --- /dev/null +++ b/gcc/testsuite/gcc.target/loongarch/can_inline_1.c @@ -0,0 +1,15 @@ +/* { dg-do compile } */ +/* { dg-options "-march=loongarch64 -mabi=lp64d -fdump-tree-einline-details -O2" } */ +/* { dg-final { scan-tree-dump {missed: not inlinable: bar/\d+ -> foo/\d+, target specific option mismatch} "einline" } } */ +/* { dg-final { scan-tree-dump-not {\(inlined\)} "einline" } } */ + +void +__attribute__ ((target ("lsx"))) +foo (void) +{} + +void +bar (void) +{ + foo (); +} diff --git a/gcc/testsuite/gcc.target/loongarch/can_inline_2.c b/gcc/testsuite/gcc.target/loongarch/can_inline_2.c new file mode 100644 index 000000000000..0d77aca6c767 --- /dev/null +++ b/gcc/testsuite/gcc.target/loongarch/can_inline_2.c @@ -0,0 +1,16 @@ +/* { dg-do compile } */ +/* { dg-options "-march=loongarch64 -mabi=lp64d -fdump-tree-einline-details -O2" } */ +/* { dg-final { scan-tree-dump {missed: not inlinable: bar/\d+ -> foo/\d+, target specific option mismatch} "einline" } } */ +/* { dg-final { scan-tree-dump-not {\(inlined\)} "einline" } } */ + +void +__attribute__ ((target ("lasx"))) +foo (void) +{} + +void +__attribute__ ((target ("lsx"))) +bar (void) +{ + foo (); +} diff --git a/gcc/testsuite/gcc.target/loongarch/can_inline_3.c b/gcc/testsuite/gcc.target/loongarch/can_inline_3.c new file mode 100644 index 000000000000..d11dc4707fbd --- /dev/null +++ b/gcc/testsuite/gcc.target/loongarch/can_inline_3.c @@ -0,0 +1,16 @@ +/* { dg-do compile } */ +/* { dg-options "-march=loongarch64 -mabi=lp64d -fdump-tree-einline-details -O2" } */ +/* { dg-final { scan-tree-dump {missed: not inlinable: bar/\d+ -> foo/\d+, target specific option mismatch} "einline" } } */ +/* { dg-final { scan-tree-dump-not {\(inlined\)} "einline" } } */ + +void +__attribute__ ((target ("arch=la64v1.1"))) +foo (void) +{} + +void +__attribute__ ((target ("arch=la64v1.0"))) +bar (void) +{ + foo (); +} diff --git a/gcc/testsuite/gcc.target/loongarch/can_inline_4.c b/gcc/testsuite/gcc.target/loongarch/can_inline_4.c new file mode 100644 index 000000000000..6274ff10a7fa --- /dev/null +++ b/gcc/testsuite/gcc.target/loongarch/can_inline_4.c @@ -0,0 +1,15 @@ +/* { dg-do compile } */ +/* { dg-options "-march=loongarch64 -mabi=lp64d -fdump-tree-einline-details -O2" } */ +/* { dg-final { scan-tree-dump {missed: not inlinable: bar/\d+ -> foo/\d+, target specific option mismatch} "einline" } } */ +/* { dg-final { scan-tree-dump-not {\(inlined\)} "einline" } } */ + +void +foo (void) +{} + +void +__attribute__ ((target ("cmodel=extreme"))) +bar (void) +{ + foo (); +} diff --git a/gcc/testsuite/gcc.target/loongarch/can_inline_5.c b/gcc/testsuite/gcc.target/loongarch/can_inline_5.c new file mode 100644 index 000000000000..88550268e97d --- /dev/null +++ b/gcc/testsuite/gcc.target/loongarch/can_inline_5.c @@ -0,0 +1,16 @@ +/* { dg-do compile } */ +/* { dg-options "-march=loongarch64 -mabi=lp64d -fdump-tree-einline-details -O2" } */ +/* { dg-final { scan-tree-dump {\(inlined\)} "einline" } } */ + +void +__attribute__ ((always_inline)) +inline +foo (void) +{} + +void +__attribute__ ((target ("cmodel=extreme"))) +bar (void) +{ + foo (); +} diff --git a/gcc/testsuite/gcc.target/loongarch/can_inline_6.c b/gcc/testsuite/gcc.target/loongarch/can_inline_6.c new file mode 100644 index 000000000000..b700de263a31 --- /dev/null +++ b/gcc/testsuite/gcc.target/loongarch/can_inline_6.c @@ -0,0 +1,15 @@ +/* { dg-do compile } */ +/* { dg-options "-march=loongarch64 -mabi=lp64d -fdump-tree-einline-details -O2" } */ +/* { dg-final { scan-tree-dump {missed: not inlinable: bar/\d+ -> foo/\d+, target specific option mismatch} "einline" } } */ +/* { dg-final { scan-tree-dump-not {\(inlined\)} "einline" } } */ + +void +__attribute__ ((target ("strict-align"))) +foo (void) +{} + +void +bar (void) +{ + foo (); +} diff --git a/gcc/testsuite/gcc.target/loongarch/cmodel-extreme-1.c b/gcc/testsuite/gcc.target/loongarch/cmodel-extreme-1.c index 6269607e7df3..4fad516f0570 100644 --- a/gcc/testsuite/gcc.target/loongarch/cmodel-extreme-1.c +++ b/gcc/testsuite/gcc.target/loongarch/cmodel-extreme-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=loongarch64 -mabi=lp64d -O2 -mcmodel=extreme -mtls-dialect=trad -fno-plt -mexplicit-relocs=always -fdump-rtl-final" } */ +/* { dg-options "-march=loongarch64 -mabi=lp64d -O2 -mcmodel=extreme -mtls-dialect=trad -fno-plt -mexplicit-relocs=always -fdump-rtl-final -fPIC" } */ int a; extern int b; diff --git a/gcc/testsuite/gcc.target/loongarch/cmodel-extreme-2.c b/gcc/testsuite/gcc.target/loongarch/cmodel-extreme-2.c index 35f6ee0bb301..49bc65839145 100644 --- a/gcc/testsuite/gcc.target/loongarch/cmodel-extreme-2.c +++ b/gcc/testsuite/gcc.target/loongarch/cmodel-extreme-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=loongarch64 -mabi=lp64d -O2 -mcmodel=extreme -mtls-dialect=trad -fno-plt -mexplicit-relocs=auto -fdump-rtl-final" } */ +/* { dg-options "-march=loongarch64 -mabi=lp64d -O2 -mcmodel=extreme -mtls-dialect=trad -fno-plt -mexplicit-relocs=auto -fdump-rtl-final -fPIC" } */ #include "cmodel-extreme-1.c" diff --git a/gcc/testsuite/gcc.target/loongarch/fclass-compile.c b/gcc/testsuite/gcc.target/loongarch/fclass-compile.c index 9c24d6e263ce..3db83e7b31d3 100644 --- a/gcc/testsuite/gcc.target/loongarch/fclass-compile.c +++ b/gcc/testsuite/gcc.target/loongarch/fclass-compile.c @@ -1,14 +1,16 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -march=loongarch64 -mfpu=64 -mabi=lp64d" } */ +/* { dg-options "-O2 -fsignaling-nans -march=loongarch64 -mfpu=64 -mabi=lp64d" } */ /* { dg-final { scan-assembler-times "fclass\\.s" 1 } } */ /* { dg-final { scan-assembler-times "fclass\\.d" 1 } } */ +/* { dg-final { scan-assembler-not "fcmp" } } */ __attribute__ ((noipa)) int test_fclass_f (float f) { return __builtin_isinf (f) | __builtin_isnormal (f) << 1 - | __builtin_isfinite (f) << 2; + | __builtin_isfinite (f) << 2 + | __builtin_isnan (f) << 3; } __attribute__ ((noipa)) int @@ -16,5 +18,6 @@ test_fclass_d (double d) { return __builtin_isinf (d) | __builtin_isnormal (d) << 1 - | __builtin_isfinite (d) << 2; + | __builtin_isfinite (d) << 2 + | __builtin_isnan (d) << 3; } diff --git a/gcc/testsuite/gcc.target/loongarch/fclass-run.c b/gcc/testsuite/gcc.target/loongarch/fclass-run.c index e5585f9d557a..3852d2015b3a 100644 --- a/gcc/testsuite/gcc.target/loongarch/fclass-run.c +++ b/gcc/testsuite/gcc.target/loongarch/fclass-run.c @@ -37,8 +37,8 @@ main (void) ASSERT_EQ (test_fclass_f (-f_normal), 0b110); ASSERT_EQ (test_fclass_f (f_subnormal), 0b100); ASSERT_EQ (test_fclass_f (-f_subnormal), 0b100); - ASSERT_EQ (test_fclass_f (f_qnan), 0); - ASSERT_EQ (test_fclass_f (f_snan), 0); + ASSERT_EQ (test_fclass_f (f_qnan), 0b1000); + ASSERT_EQ (test_fclass_f (f_snan), 0b1000); ASSERT_EQ (test_fclass_d (d_inf), 0b001); ASSERT_EQ (test_fclass_d (-d_inf), 0b001); @@ -48,6 +48,6 @@ main (void) ASSERT_EQ (test_fclass_d (-d_normal), 0b110); ASSERT_EQ (test_fclass_d (d_subnormal), 0b100); ASSERT_EQ (test_fclass_d (-d_subnormal), 0b100); - ASSERT_EQ (test_fclass_d (d_qnan), 0); - ASSERT_EQ (test_fclass_d (d_snan), 0); + ASSERT_EQ (test_fclass_d (d_qnan), 0b1000); + ASSERT_EQ (test_fclass_d (d_snan), 0b1000); } diff --git a/gcc/testsuite/gcc.target/loongarch/func-call-medium-2.c b/gcc/testsuite/gcc.target/loongarch/func-call-medium-2.c index d73df2dd8c25..e97044a6013c 100644 --- a/gcc/testsuite/gcc.target/loongarch/func-call-medium-2.c +++ b/gcc/testsuite/gcc.target/loongarch/func-call-medium-2.c @@ -1,41 +1,45 @@ /* { dg-do compile } */ -/* { dg-options "-mabi=lp64d -O0 -fno-pic -fplt -mno-explicit-relocs -mtls-dialect=trad -mcmodel=medium" } */ -/* { dg-final { scan-assembler "test:.*la\.global\t.*g\n\tjirl" } } */ -/* { dg-final { scan-assembler "test1:.*la\.local\t.*f\n\tjirl" } } */ -/* { dg-final { scan-assembler "test2:.*la\.local\t.*l\n\tjirl" } } */ -/* { dg-final { scan-assembler "test3:.*la\.global\t.*\_\_tls\_get\_addr" { target tls_native } } } */ +/* { dg-options "-mabi=lp64d -O2 -fno-pic -fplt -mno-explicit-relocs -mtls-dialect=trad -mcmodel=medium" } */ +/* { dg-final { check-function-bodies "**" "" } } */ extern void g (void); -void +void __attribute__ ((noipa,noinline)) f (void) {} -static void +static void __attribute__ ((noipa,noinline)) l (void) {} +/* +** test: +** la.global (\$r[0-9]+),g +** jr (\$r[0-9]+) +*/ void test (void) { g (); } +/* +** test1: +** la.local (\$r[0-9]+),f +** jr (\$r[0-9]+) +*/ void test1 (void) { f (); } +/* +** test2: +** la.local (\$r[0-9]+),l +** jr (\$r[0-9]+) +*/ void test2 (void) { l (); } - -__attribute__ ((tls_model ("global-dynamic"))) __thread int a; - -void -test3 (void) -{ - a = 10; -} diff --git a/gcc/testsuite/gcc.target/loongarch/func-call-medium-3.c b/gcc/testsuite/gcc.target/loongarch/func-call-medium-3.c index 88a66745070e..8754fc6ef309 100644 --- a/gcc/testsuite/gcc.target/loongarch/func-call-medium-3.c +++ b/gcc/testsuite/gcc.target/loongarch/func-call-medium-3.c @@ -1,31 +1,43 @@ /* { dg-do compile } */ -/* { dg-options "-mabi=lp64d -O0 -fpic -fno-plt -mno-explicit-relocs -mtls-dialect=trad -mcmodel=medium" } */ -/* { dg-final { scan-assembler "test:.*la\.global\t.*g\n\tjirl" } } */ -/* { dg-final { scan-assembler "test1:.*la\.global\t.*f\n\tjirl" } } */ -/* { dg-final { scan-assembler "test2:.*la\.local\t.*l\n\tjirl" } } */ -/* { dg-final { scan-assembler "test3:.*la\.global\t.*\_\_tls\_get\_addr" { target tls_native } } } */ +/* { dg-options "-mabi=lp64d -O2 -fpic -fno-plt -mno-explicit-relocs -mtls-dialect=trad -mcmodel=medium" } */ +/* { dg-final { check-function-bodies "**" "" } } */ extern void g (void); -void +void __attribute__ ((noinline)) f (void) {} -static void +static void __attribute__ ((noipa,noinline)) l (void) {} +/* +** test: +** la.global (\$r[0-9]+),g +** jr (\$r[0-9]+) +*/ void test (void) { g (); } +/* +** test1: +** la.global (\$r[0-9]+),f +** jr (\$r[0-9]+) +*/ void test1 (void) { f (); } +/* +** test2: +** la.local (\$r[0-9]+),l +** jr (\$r[0-9]+) +*/ void test2 (void) { @@ -39,3 +51,4 @@ test3 (void) { a = 10; } +/* { dg-final { scan-assembler "test3:.*la\.global\t.*\_\_tls\_get\_addr" { target tls_native } } } */ diff --git a/gcc/testsuite/gcc.target/loongarch/func-call-medium-4.c b/gcc/testsuite/gcc.target/loongarch/func-call-medium-4.c deleted file mode 100644 index f9dc12feaf54..000000000000 --- a/gcc/testsuite/gcc.target/loongarch/func-call-medium-4.c +++ /dev/null @@ -1,41 +0,0 @@ -/* { dg-do compile } */ -/* { dg-options "-mabi=lp64d -O0 -fno-pic -fno-plt -mno-explicit-relocs -mtls-dialect=trad -mcmodel=medium" } */ -/* { dg-final { scan-assembler "test:.*la\.global\t.*g\n\tjirl" } } */ -/* { dg-final { scan-assembler "test1:.*la\.local\t.*f\n\tjirl" } } */ -/* { dg-final { scan-assembler "test2:.*la\.local\t.*l\n\tjirl" } } */ -/* { dg-final { scan-assembler "test3:.*la\.global\t.*\_\_tls\_get\_addr" { target tls_native } } } */ - -extern void g (void); -void -f (void) -{} - -static void -l (void) -{} - -void -test (void) -{ - g (); -} - -void -test1 (void) -{ - f (); -} - -void -test2 (void) -{ - l (); -} - -__attribute__ ((tls_model ("global-dynamic"))) __thread int a; - -void -test3 (void) -{ - a = 10; -} diff --git a/gcc/testsuite/gcc.target/loongarch/pr121875.c b/gcc/testsuite/gcc.target/loongarch/pr121875.c new file mode 100644 index 000000000000..f0a42ba020ad --- /dev/null +++ b/gcc/testsuite/gcc.target/loongarch/pr121875.c @@ -0,0 +1,5 @@ +/* { dg-do compile } */ +/* { dg-options "-march=loongarch64 -mabi=lp64d -O2" } */ + +[[gnu::always_inline]] inline void f() {} +[[gnu::target("lasx")]] int main() {f();} diff --git a/gcc/testsuite/gcc.target/loongarch/pr121906.c b/gcc/testsuite/gcc.target/loongarch/pr121906.c new file mode 100644 index 000000000000..b4fde5f0c854 --- /dev/null +++ b/gcc/testsuite/gcc.target/loongarch/pr121906.c @@ -0,0 +1,31 @@ +/* PR target/121906 */ +/* { dg-do run } */ +/* { dg-options "-O2 -mno-lsx" } */ + +typedef unsigned short u16; +typedef unsigned long u64; +typedef u16 v4hi __attribute__ ((vector_size (8))); +typedef u16 v8hi __attribute__ ((vector_size (16))); + +u64 d; +int e, i; +u16 x; + +int +main () +{ + v4hi n = { 1 }; + u64 *o = &d; +p: + asm goto ("" : : : : q); + n[3] = (-(v8hi){ 0, 0, 0, 0, x })[7]; + for (; e >= 0; e--) + { + *o = n[0]; + if (i) + goto p; + q: + } + if (d != 1) + __builtin_trap (); +} diff --git a/gcc/testsuite/gcc.target/loongarch/tls-extreme-macro.c b/gcc/testsuite/gcc.target/loongarch/tls-extreme-macro.c index 4adda4202fdd..7f6160e1f662 100644 --- a/gcc/testsuite/gcc.target/loongarch/tls-extreme-macro.c +++ b/gcc/testsuite/gcc.target/loongarch/tls-extreme-macro.c @@ -1,9 +1,9 @@ /* { dg-do compile } */ -/* { dg-options "-march=loongarch64 -mabi=lp64d -O2 -mcmodel=extreme -mtls-dialect=trad -fno-plt -mexplicit-relocs=none" } */ -/* { dg-final { scan-assembler "test_le:.*la.tls.le\t\\\$r\[0-9\]+,\\\.L" { target tls_native } } } */ -/* { dg-final { scan-assembler "test_ie:.*la.tls.ie\t\\\$r\[0-9\]+,\\\$r\[0-9\]+,\\\.L" { target tls_native } } } */ -/* { dg-final { scan-assembler "test_ld:.*la.tls.ld\t\\\$r\[0-9\]+,\\\$r\[0-9\]+,\\\.L.*la.global\t\\\$r\[0-9\]+,\\\$r\[0-9\]+,__tls_get_addr" { target tls_native } } } */ -/* { dg-final { scan-assembler "test_le:.*la.tls.gd\t\\\$r\[0-9\]+,\\\$r\[0-9\]+,\\\.L.*la.global\t\\\$r\[0-9\]+,\\\$r\[0-9\]+,__tls_get_addr" { target tls_native } } } */ +/* { dg-options "-march=loongarch64 -mabi=lp64d -O2 -mcmodel=extreme -mtls-dialect=trad -fno-plt -mexplicit-relocs=none -fPIC" } */ +/* { dg-final { scan-assembler "test_le:.*la.tls.le\t\\\$r\[0-9\]+,c" { target tls_native } } } */ +/* { dg-final { scan-assembler "test_ie:.*la.tls.ie\t\\\$r\[0-9\]+,\\\$r\[0-9\]+,d" { target tls_native } } } */ +/* { dg-final { scan-assembler "test_ld:.*la.tls.ld\t\\\$r\[0-9\]+,\\\$r\[0-9\]+,e.*la.global\t\\\$r\[0-9\]+,\\\$r\[0-9\]+,__tls_get_addr" { target tls_native } } } */ +/* { dg-final { scan-assembler "test_le:.*la.tls.gd\t\\\$r\[0-9\]+,\\\$r\[0-9\]+,f.*la.global\t\\\$r\[0-9\]+,\\\$r\[0-9\]+,__tls_get_addr" { target tls_native } } } */ __thread int c __attribute__ ((tls_model ("local-exec"))); __thread int d __attribute__ ((tls_model ("initial-exec"))); diff --git a/gcc/testsuite/gcc.target/loongarch/tls-gd-noplt.c b/gcc/testsuite/gcc.target/loongarch/tls-gd-noplt.c index dfa1bf53c92e..610262a7783f 100644 --- a/gcc/testsuite/gcc.target/loongarch/tls-gd-noplt.c +++ b/gcc/testsuite/gcc.target/loongarch/tls-gd-noplt.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O0 -fno-plt -mcmodel=normal -mtls-dialect=trad -mexplicit-relocs" } */ +/* { dg-options "-O0 -fno-plt -mcmodel=normal -mtls-dialect=trad -mexplicit-relocs -fPIC" } */ /* { dg-final { scan-assembler "pcalau12i\t.*%got_pc_hi20\\(__tls_get_addr\\)\n\tld\.d.*%got_pc_lo12\\(__tls_get_addr\\)" { target tls_native } } } */ __attribute__ ((tls_model ("global-dynamic"))) __thread int a; diff --git a/gcc/testsuite/gcc.target/mips/mips-msubf.c b/gcc/testsuite/gcc.target/mips/mips-msubf.c new file mode 100644 index 000000000000..424ca21e7f8b --- /dev/null +++ b/gcc/testsuite/gcc.target/mips/mips-msubf.c @@ -0,0 +1,31 @@ +/* { dg-do compile } */ +/* { dg-options "-mhard-float -ffast-math -march=mips32r6" } */ +/* { dg-skip-if "code quality test" { *-*-* } { "-O0" "-O1" } { "" } } */ +/* { dg-final { scan-assembler-times "\tmsubf\\.s\t" 2 } } */ +/* { dg-final { scan-assembler-times "\tmsubf\\.d\t" 2 } } */ + +NOMIPS16 float +test01 (float x, float y, float z) +{ + return x - (y * z); +} + +NOMIPS16 double +test02 (double x, double y, double z) +{ + return x - (y * z); +} + +NOMIPS16 float +test03 (float x, float y, float z) +{ + return (y * z) - x; +} + +NOMIPS16 double +test04 (double x, double y, double z) +{ + return (y * z) - x; +} + + diff --git a/gcc/testsuite/gcc.target/mips/mips16e2-cache.c b/gcc/testsuite/gcc.target/mips/mips16e2-cache.c index dcc39b580f52..c79157589992 100644 --- a/gcc/testsuite/gcc.target/mips/mips16e2-cache.c +++ b/gcc/testsuite/gcc.target/mips/mips16e2-cache.c @@ -1,4 +1,4 @@ -/* { dg-options "-mno-abicalls -mgpopt -G8 -mabi=32 -mips32r2 -mips16 -mmips16e2" } */ +/* { dg-options "-mno-abicalls -mgpopt -G8 -mabi=32 isa_rev=2 -mmips16e2" } */ /* { dg-skip-if "naming registers makes this a code quality test" { *-*-* } { "-O0" } { "" } } */ /* Test cache. */ diff --git a/gcc/testsuite/gcc.target/mips/mips16e2-cmov.c b/gcc/testsuite/gcc.target/mips/mips16e2-cmov.c index 129ea23b65b1..8d71e88596cc 100644 --- a/gcc/testsuite/gcc.target/mips/mips16e2-cmov.c +++ b/gcc/testsuite/gcc.target/mips/mips16e2-cmov.c @@ -1,4 +1,4 @@ -/* { dg-options "-mno-abicalls -mgpopt -G8 -mabi=32 -mips16 -mmips16e2 -mbranch-cost=2" } */ +/* { dg-options "-mno-abicalls -mgpopt -G8 -mabi=32 isa_rev=2 -mmips16e2 -mbranch-cost=2" } */ /* { dg-skip-if "code quality test" { *-*-* } { "-O0" } { "" } } */ /* Test MOVN. */ diff --git a/gcc/testsuite/gcc.target/mips/mips16e2-gp.c b/gcc/testsuite/gcc.target/mips/mips16e2-gp.c index 7955472bde30..5fab454d5e06 100644 --- a/gcc/testsuite/gcc.target/mips/mips16e2-gp.c +++ b/gcc/testsuite/gcc.target/mips/mips16e2-gp.c @@ -1,4 +1,4 @@ -/* { dg-options "-mno-abicalls -mgpopt -G8 -mabi=32 -mips16 -mmips16e2" } */ +/* { dg-options "-mno-abicalls -mgpopt -G8 -mabi=32 isa_rev=2 -mmips16e2" } */ /* { dg-skip-if "per-function expected output" { *-*-* } { "-flto" } { "" } } */ /* Generate GP-relative ADDIU. */ diff --git a/gcc/testsuite/gcc.target/mips/mips16e2.c b/gcc/testsuite/gcc.target/mips/mips16e2.c index 166aa7422687..33c4bb52ccca 100644 --- a/gcc/testsuite/gcc.target/mips/mips16e2.c +++ b/gcc/testsuite/gcc.target/mips/mips16e2.c @@ -1,4 +1,4 @@ -/* { dg-options "-mno-abicalls -mgpopt -G8 -mabi=32 -mips16 -mmips16e2" } */ +/* { dg-options "-mno-abicalls -mgpopt -G8 -mabi=32 isa_rev=2 -mmips16e2" } */ /* { dg-skip-if "per-function expected output" { *-*-* } { "-flto" } { "" } } */ /* ANDI is a two operand instruction. Hence, it won't be generated if src and diff --git a/gcc/testsuite/gcc.target/mips/pr99217-2.c b/gcc/testsuite/gcc.target/mips/pr99217-2.c new file mode 100644 index 000000000000..c51f3f4399e4 --- /dev/null +++ b/gcc/testsuite/gcc.target/mips/pr99217-2.c @@ -0,0 +1,11 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-fpatchable-function-entry=2,1" } */ +/* { dg-final { scan-assembler "foo:\n\t.set\tnoreorder\n\tnop\n\t.set\treorder" } } */ +/* { dg-final { scan-assembler ".*.LPFE0:\n\t.set\tnoreorder\n\tnop\n\t.set\treorder\n\t.ent\tfoo\n" } } */ + +/* Test the placement of the .LPFE0 label. */ + +void +foo (void) +{ +} diff --git a/gcc/testsuite/gcc.target/mips/pr99217.c b/gcc/testsuite/gcc.target/mips/pr99217.c new file mode 100644 index 000000000000..ac1e27b756b7 --- /dev/null +++ b/gcc/testsuite/gcc.target/mips/pr99217.c @@ -0,0 +1,10 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-fpatchable-function-entry=1" } */ +/* { dg-final { scan-assembler "foo:\n.*.LPFE0:\n\t.set\tnoreorder\n\tnop\n\t.set\treorder" } } */ + +/* Test the placement of the .LPFE0 label. */ + +void +foo (void) +{ +} diff --git a/gcc/testsuite/gcc.target/powerpc/altivec-39.c b/gcc/testsuite/gcc.target/powerpc/altivec-39.c new file mode 100644 index 000000000000..3263eb7bbc61 --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/altivec-39.c @@ -0,0 +1,17 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -maltivec" } */ +/* { dg-require-effective-target powerpc_altivec } */ + +char *sort_filesquote_name_buf_plimit; +int sort_filesquote_name_buf_width; +int *__ctype_b_loc() __attribute__((__const__)); +void sort_filesquote_name_buf(char* p) +{ + unsigned displayed_width = 0; + while (p < sort_filesquote_name_buf_plimit) { + if (__ctype_b_loc()[*p]) + displayed_width++; + p++; + } + sort_filesquote_name_buf_width = displayed_width; +} diff --git a/gcc/testsuite/gcc.target/pru/mabi-ti-1.c b/gcc/testsuite/gcc.target/pru/mabi-ti-1.c index 117ae8fd176b..44f5202f3305 100644 --- a/gcc/testsuite/gcc.target/pru/mabi-ti-1.c +++ b/gcc/testsuite/gcc.target/pru/mabi-ti-1.c @@ -4,7 +4,7 @@ /* { dg-options "-O1 -mabi=ti" } */ -int test(int a, int b, void (*fp)(void)) -{ /* { dg-error "function pointers not supported with '-mabi=ti' option" } */ +int test(int a, int b, void (*fp)(void)) /* { dg-error "function pointers not supported with '-mabi=ti' option" } */ +{ return a+b; } diff --git a/gcc/testsuite/gcc.target/pru/mabi-ti-11.c b/gcc/testsuite/gcc.target/pru/mabi-ti-11.c new file mode 100644 index 000000000000..c5df2ad39800 --- /dev/null +++ b/gcc/testsuite/gcc.target/pru/mabi-ti-11.c @@ -0,0 +1,14 @@ +/* Test TI ABI unsupported constructs */ + +/* { dg-do assemble } */ +/* { dg-options "-O1 -mabi=ti" } */ + +struct s1 { + int (*f)(void); /* { dg-error "function pointers not supported with '-mabi=ti' option" } */ + int a; +}; + +int test1(void) +{ + return ((struct s1 *)0x11223344)->a; +} diff --git a/gcc/testsuite/gcc.target/pru/mabi-ti-12.c b/gcc/testsuite/gcc.target/pru/mabi-ti-12.c new file mode 100644 index 000000000000..4658f60b971b --- /dev/null +++ b/gcc/testsuite/gcc.target/pru/mabi-ti-12.c @@ -0,0 +1,15 @@ +/* Test TI ABI unsupported constructs */ + +/* { dg-do assemble } */ +/* { dg-options "-O1 -mabi=ti" } */ + +struct s1 { + int (*f)(void); /* { dg-error "function pointers not supported with '-mabi=ti' option" } */ + int a; +}; + +struct s1 g1; +struct s1 g2; +struct s1 g3; + +int (*g_f1)(char); /* { dg-error "function pointers not supported with '-mabi=ti' option" } */ diff --git a/gcc/testsuite/gcc.target/pru/mabi-ti-2.c b/gcc/testsuite/gcc.target/pru/mabi-ti-2.c index d4a3aff546c0..66bdfd0aa903 100644 --- a/gcc/testsuite/gcc.target/pru/mabi-ti-2.c +++ b/gcc/testsuite/gcc.target/pru/mabi-ti-2.c @@ -8,8 +8,8 @@ struct big { char c[9]; }; -struct big test(void) -{ /* { dg-error "large return values not supported with '-mabi=ti' option" } */ +struct big test(void) /* { dg-error "large return values not supported with '-mabi=ti' option" } */ +{ static struct big b; return b; } diff --git a/gcc/testsuite/gcc.target/pru/mabi-ti-3.c b/gcc/testsuite/gcc.target/pru/mabi-ti-3.c index c49f6653589c..472452b499a3 100644 --- a/gcc/testsuite/gcc.target/pru/mabi-ti-3.c +++ b/gcc/testsuite/gcc.target/pru/mabi-ti-3.c @@ -4,9 +4,9 @@ /* { dg-options "-O1 -mabi=ti" } */ -extern void extfunc(void (*fp)(void)); +extern void extfunc(void (*fp)(void)); /* { dg-error "function pointers not supported with '-mabi=ti' option" } */ void test(void) { - extfunc(test); /* { dg-error "function pointers not supported with '-mabi=ti' option" } */ + extfunc(test); } diff --git a/gcc/testsuite/gcc.target/pru/mabi-ti-5.c b/gcc/testsuite/gcc.target/pru/mabi-ti-5.c index 38eeaa4435dc..9ef73b1754c6 100644 --- a/gcc/testsuite/gcc.target/pru/mabi-ti-5.c +++ b/gcc/testsuite/gcc.target/pru/mabi-ti-5.c @@ -4,13 +4,13 @@ /* { dg-options "-O1 -mabi=ti" } */ struct s1 { - void (*f)(void); + void (*f)(void); /* { dg-error "function pointers not supported with '-mabi=ti' option" } */ int a; }; struct s2 { union { - void (*f)(void); + void (*f)(int); /* { dg-error "function pointers not supported with '-mabi=ti' option" } */ int a; long b; } u; @@ -18,16 +18,16 @@ struct s2 { int test1(struct s1 *p) { - return p->a; /* { dg-error "function pointers not supported with '-mabi=ti' option" } */ + return p->a; return 1; } int test1_unused_arg(struct s1 p, int a) -{ /* { dg-error "function pointers not supported with '-mabi=ti' option" } */ +{ return a; } int test2(struct s2 v) -{ /* { dg-error "function pointers not supported with '-mabi=ti' option" } */ +{ return 2; } diff --git a/gcc/testsuite/gcc.target/pru/mabi-ti-6.c b/gcc/testsuite/gcc.target/pru/mabi-ti-6.c index c8aa018a21e2..b94971878db9 100644 --- a/gcc/testsuite/gcc.target/pru/mabi-ti-6.c +++ b/gcc/testsuite/gcc.target/pru/mabi-ti-6.c @@ -4,9 +4,9 @@ /* { dg-options "-O1 -mabi=ti" } */ -extern void (*extfuncp)(int); +extern void (*extfuncp)(int); /* { dg-error "function pointers not supported with '-mabi=ti' option" } */ void test(void) { - extfuncp(1); /* { dg-error "function pointers not supported with '-mabi=ti' option" } */ + extfuncp(1); } diff --git a/gcc/testsuite/gcc.target/pru/mabi-ti-7.c b/gcc/testsuite/gcc.target/pru/mabi-ti-7.c index cc095facf646..7738255fafac 100644 --- a/gcc/testsuite/gcc.target/pru/mabi-ti-7.c +++ b/gcc/testsuite/gcc.target/pru/mabi-ti-7.c @@ -4,18 +4,32 @@ /* { dg-options "-O1 -mabi=ti" } */ struct s1 { - int (*f)(void); + int (*f)(void); /* { dg-error "function pointers not supported with '-mabi=ti' option" } */ int a; }; -extern struct s1 s; +struct s2 { + int (*f)(short); /* { dg-error "function pointers not supported with '-mabi=ti' option" } */ + int a; +}; + +struct s3 { + int (*f)(char); /* { dg-error "function pointers not supported with '-mabi=ti' option" } */ + int a; + int b; + int c; +}; + +extern struct s1 g_s1; +extern struct s2 g_s2; +struct s3 g_s3; int test1(void) { - return s.f(); /* { dg-error "function pointers not supported with '-mabi=ti' option" } */ + return g_s1.f(); } int test2(void) { - return s.a; /* { dg-error "function pointers not supported with '-mabi=ti' option" } */ + return g_s2.a; } diff --git a/gcc/testsuite/gcc.target/pru/mabi-ti-8.c b/gcc/testsuite/gcc.target/pru/mabi-ti-8.c new file mode 100644 index 000000000000..6f4a91a6b5a6 --- /dev/null +++ b/gcc/testsuite/gcc.target/pru/mabi-ti-8.c @@ -0,0 +1,48 @@ +/* Test TI ABI unsupported constructs */ + +/* { dg-do assemble } */ +/* { dg-options "-O1 -mabi=ti" } */ + +struct s0 { + int f0 : 2; /* { dg-error "bit-fields not supported with '-mabi=ti' option" } */ + int f1; +}; +struct s0 g_s; + +struct s1 { + int f : 2; /* { dg-error "bit-fields not supported with '-mabi=ti' option" } */ + int a; +}; +struct s1 g_s1; +int test1(void) +{ + struct s1 s; + + return sizeof(s); +} + +struct s2 { + int a2; + int f2 : 3; /* { dg-error "bit-fields not supported with '-mabi=ti' option" } */ +}; +struct s22 { + struct s2 *p; +}; +int test2(struct s22 *s) +{ + return s->p->f2 + s->p->a2; +} + +int test2a(struct s2 *s) +{ + return s->f2 - s->a2; +} + +struct s3 { + int a3; + int f3 : 3; /* { dg-error "bit-fields not supported with '-mabi=ti' option" } */ +}; +int test3(struct s3 s) +{ + return 0; +} diff --git a/gcc/testsuite/gcc.target/pru/mabi-ti-9.c b/gcc/testsuite/gcc.target/pru/mabi-ti-9.c new file mode 100644 index 000000000000..37c74e0616de --- /dev/null +++ b/gcc/testsuite/gcc.target/pru/mabi-ti-9.c @@ -0,0 +1,16 @@ +/* Test TI ABI unsupported constructs */ + +/* { dg-do assemble } */ +/* { dg-options "-O1 -mabi=ti" } */ + +struct s1 { + int (*f)(void); /* { dg-error "function pointers not supported with '-mabi=ti' option" } */ + int a; +}; + +struct s2 { + struct s1 *s; + int a; +}; + +struct s2 g_s2; diff --git a/gcc/testsuite/gcc.target/riscv/addsieq.c b/gcc/testsuite/gcc.target/riscv/addsieq.c index bacd7a2b2555..5cfbf91ed9a2 100644 --- a/gcc/testsuite/gcc.target/riscv/addsieq.c +++ b/gcc/testsuite/gcc.target/riscv/addsieq.c @@ -20,8 +20,9 @@ addsieq (int_t w, int_t x, int_t y, int_t z) add[w] a0,a1,a2 */ -/* { dg-final { scan-rtl-dump-times "Conversion succeeded on pass 1\\." 1 "ce1" { xfail rv64 } } } */ -/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_try_addcc" 1 "ce1" { xfail rv64 } } } */ -/* { dg-final { scan-assembler-times "\\s(?:sub|subw)\\s" 1 { xfail rv64 } } } */ -/* { dg-final { scan-assembler-times "\\s(?:seqz|snez)\\s" 1 { xfail rv64 } } } */ -/* { dg-final { scan-assembler-not "\\s(?:beq|bne)\\s" { xfail rv64 } } } */ +/* { dg-final { scan-rtl-dump-times "Conversion succeeded on pass 1\\." 1 "ce1" } } */ +/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_try_addcc" 1 "ce1" { target { rv32 } } } } */ +/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_convert_multiple_sets" 1 "ce1" { target { rv64 } } } } */ +/* { dg-final { scan-assembler-times "\\s(?:sub|subw)\\s" 1 } } */ +/* { dg-final { scan-assembler-times "\\s(?:seqz|snez)\\s" 1 } } */ +/* { dg-final { scan-assembler-not "\\s(?:beq|bne)\\s" } } */ diff --git a/gcc/testsuite/gcc.target/riscv/addsifeq.c b/gcc/testsuite/gcc.target/riscv/addsifeq.c index d0d89ca014fc..70c1e62e167a 100644 --- a/gcc/testsuite/gcc.target/riscv/addsifeq.c +++ b/gcc/testsuite/gcc.target/riscv/addsifeq.c @@ -19,8 +19,9 @@ addsifeq (double w, double x, int_t y, int_t z) add[w] a0,a5,a0 */ -/* { dg-final { scan-rtl-dump-times "Conversion succeeded on pass 1\\." 1 "ce1" { xfail rv64 } } } */ -/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_try_addcc" 1 "ce1" { xfail rv64 } } } */ +/* { dg-final { scan-rtl-dump-times "Conversion succeeded on pass 1\\." 1 "ce1" } } */ +/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_try_addcc" 1 "ce1" { target { rv32 } } } } */ +/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_convert_multiple_sets" 1 "ce1" { target { rv64 } } } } */ /* { dg-final { scan-assembler-times "\\sfeq\\.d\\s" 1 } } */ /* { dg-final { scan-assembler-not "\\s(?:seqz|snez)\\s" } } */ -/* { dg-final { scan-assembler-not "\\s(?:beq|bne)\\s" { xfail rv64 } } } */ +/* { dg-final { scan-assembler-not "\\s(?:beq|bne)\\s" } } */ diff --git a/gcc/testsuite/gcc.target/riscv/addsifge.c b/gcc/testsuite/gcc.target/riscv/addsifge.c index da13f39694fb..553c3d264198 100644 --- a/gcc/testsuite/gcc.target/riscv/addsifge.c +++ b/gcc/testsuite/gcc.target/riscv/addsifge.c @@ -19,8 +19,9 @@ addsifge (double w, double x, int_t y, int_t z) add[w] a0,a5,a0 */ -/* { /* { dg-final { scan-rtl-dump-times "Conversion succeeded on pass 1\\." 1 "ce1" { xfail rv64 } } } */ -/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_try_addcc" 1 "ce1" { xfail rv64 } } } */ +/* { dg-final { scan-rtl-dump-times "Conversion succeeded on pass 1\\." 1 "ce1" } } */ +/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_try_addcc" 1 "ce1" { target { rv32 } } } } */ +/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_convert_multiple_sets" 1 "ce1" { target { rv64 } } } } */ /* { dg-final { scan-assembler-times "\\s(?:fge\\.d|fgt\\.d|fle\\.d|flt\\.d)\\s" 1 } } */ /* { dg-final { scan-assembler-not "\\s(?:seqz|snez)\\s" } } */ -/* { dg-final { scan-assembler-not "\\s(?:beq|bne)\\s" { xfail rv64 } } } */ +/* { dg-final { scan-assembler-not "\\s(?:beq|bne)\\s" } } */ diff --git a/gcc/testsuite/gcc.target/riscv/addsifgt.c b/gcc/testsuite/gcc.target/riscv/addsifgt.c index 355c5bfef79c..b166e6c7b7d9 100644 --- a/gcc/testsuite/gcc.target/riscv/addsifgt.c +++ b/gcc/testsuite/gcc.target/riscv/addsifgt.c @@ -19,8 +19,9 @@ addsifgt (double w, double x, int_t y, int_t z) add[w] a0,a5,a0 */ -/* { /* { dg-final { scan-rtl-dump-times "Conversion succeeded on pass 1\\." 1 "ce1" { xfail rv64 } } } */ -/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_try_addcc" 1 "ce1" { xfail rv64 } } } */ +/* { dg-final { scan-rtl-dump-times "Conversion succeeded on pass 1\\." 1 "ce1" } } */ +/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_try_addcc" 1 "ce1" { target { rv32 } } } } */ +/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_convert_multiple_sets" 1 "ce1" { target { rv64 } } } } */ /* { dg-final { scan-assembler-times "\\s(?:fge\\.d|fgt\\.d|fle\\.d|flt\\.d)\\s" 1 } } */ /* { dg-final { scan-assembler-not "\\s(?:seqz|snez)\\s" } } */ -/* { dg-final { scan-assembler-not "\\s(?:beq|bne)\\s" { xfail rv64 } } } */ +/* { dg-final { scan-assembler-not "\\s(?:beq|bne)\\s" } } */ diff --git a/gcc/testsuite/gcc.target/riscv/addsifle.c b/gcc/testsuite/gcc.target/riscv/addsifle.c index 5d0c21ef2850..b2144904614c 100644 --- a/gcc/testsuite/gcc.target/riscv/addsifle.c +++ b/gcc/testsuite/gcc.target/riscv/addsifle.c @@ -19,8 +19,9 @@ addsifle (double w, double x, int_t y, int_t z) add[w] a0,a5,a0 */ -/* { /* { dg-final { scan-rtl-dump-times "Conversion succeeded on pass 1\\." 1 "ce1" { xfail rv64 } } } */ -/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_try_addcc" 1 "ce1" { xfail rv64 } } } */ +/* { dg-final { scan-rtl-dump-times "Conversion succeeded on pass 1\\." 1 "ce1" } } */ +/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_try_addcc" 1 "ce1" { target { rv32 } } } } */ +/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_convert_multiple_sets" 1 "ce1" { target { rv64 } } } } */ /* { dg-final { scan-assembler-times "\\s(?:fge\\.d|fgt\\.d|fle\\.d|flt\\.d)\\s" 1 } } */ /* { dg-final { scan-assembler-not "\\s(?:seqz|snez)\\s" } } */ -/* { dg-final { scan-assembler-not "\\s(?:beq|bne)\\s" { xfail rv64 } } } */ +/* { dg-final { scan-assembler-not "\\s(?:beq|bne)\\s" } } */ diff --git a/gcc/testsuite/gcc.target/riscv/addsiflt.c b/gcc/testsuite/gcc.target/riscv/addsiflt.c index 4feeb5cdc618..97982090813f 100644 --- a/gcc/testsuite/gcc.target/riscv/addsiflt.c +++ b/gcc/testsuite/gcc.target/riscv/addsiflt.c @@ -19,8 +19,9 @@ addsiflt (double w, double x, int_t y, int_t z) add[w] a0,a5,a0 */ -/* { /* { dg-final { scan-rtl-dump-times "Conversion succeeded on pass 1\\." 1 "ce1" { xfail rv64 } } } */ -/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_try_addcc" 1 "ce1" { xfail rv64 } } } */ +/* { dg-final { scan-rtl-dump-times "Conversion succeeded on pass 1\\." 1 "ce1" } } */ +/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_try_addcc" 1 "ce1" { target { rv32 } } } } */ +/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_convert_multiple_sets" 1 "ce1" { target { rv64 } } } } */ /* { dg-final { scan-assembler-times "\\s(?:fge\\.d|fgt\\.d|fle\\.d|flt\\.d)\\s" 1 } } */ /* { dg-final { scan-assembler-not "\\s(?:seqz|snez)\\s" } } */ -/* { dg-final { scan-assembler-not "\\s(?:beq|bne)\\s" { xfail rv64 } } } */ +/* { dg-final { scan-assembler-not "\\s(?:beq|bne)\\s" } } */ diff --git a/gcc/testsuite/gcc.target/riscv/addsifne.c b/gcc/testsuite/gcc.target/riscv/addsifne.c index 24da3346e021..af6521cee706 100644 --- a/gcc/testsuite/gcc.target/riscv/addsifne.c +++ b/gcc/testsuite/gcc.target/riscv/addsifne.c @@ -19,8 +19,9 @@ addsifne (double w, double x, int_t y, int_t z) add[w] a0,a5,a0 */ -/* { dg-final { scan-rtl-dump-times "Conversion succeeded on pass 1\\." 1 "ce1" { xfail rv64 } } } */ -/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_try_addcc" 1 "ce1" { xfail rv64 } } } */ +/* { dg-final { scan-rtl-dump-times "Conversion succeeded on pass 1\\." 1 "ce1" } } */ +/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_try_addcc" 1 "ce1" { target { rv32 } } } } */ +/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_convert_multiple_sets" 1 "ce1" { target { rv64 } } } } */ /* { dg-final { scan-assembler-times "\\sfeq\\.d\\s" 1 } } */ /* { dg-final { scan-assembler-not "\\s(?:seqz|snez)\\s" } } */ -/* { dg-final { scan-assembler-not "\\s(?:beq|bne)\\s" { xfail rv64 } } } */ +/* { dg-final { scan-assembler-not "\\s(?:beq|bne)\\s" } } */ diff --git a/gcc/testsuite/gcc.target/riscv/addsige.c b/gcc/testsuite/gcc.target/riscv/addsige.c index 9dad7c9067b0..1aaa06cb8bc4 100644 --- a/gcc/testsuite/gcc.target/riscv/addsige.c +++ b/gcc/testsuite/gcc.target/riscv/addsige.c @@ -19,8 +19,9 @@ addsige (int_t w, int_t x, int_t y, int_t z) add[w] a0,a1,a2 */ -/* { dg-final { scan-rtl-dump-times "Conversion succeeded on pass 1\\." 1 "ce1" { xfail rv64 } } } */ -/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_try_addcc" 1 "ce1" { xfail rv64 } } } */ -/* { dg-final { scan-assembler-times "\\s(?:sgt|slt)\\s" 1 { xfail rv64 } } } */ +/* { dg-final { scan-rtl-dump-times "Conversion succeeded on pass 1\\." 1 "ce1" } } */ +/* { DG-Final { scan-rtl-dump-times "if-conversion succeeded through noce_try_addcc" 1 "ce1" { target { rv32 } } } } */ +/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_convert_multiple_sets" 1 "ce1" { target { rv64 } } } } */ +/* { dg-final { scan-assembler-times "\\s(?:sgt|slt)\\s" 1 } } */ /* { dg-final { scan-assembler-not "\\s(?:seqz|snez)\\s" } } */ -/* { dg-final { scan-assembler-not "\\s(?:bge|bgt|ble|blt)\\s" { xfail rv64 } } } */ +/* { dg-final { scan-assembler-not "\\s(?:bge|bgt|ble|blt)\\s" } } */ diff --git a/gcc/testsuite/gcc.target/riscv/addsigeu.c b/gcc/testsuite/gcc.target/riscv/addsigeu.c index 846241d49a17..e6f1e8c62eac 100644 --- a/gcc/testsuite/gcc.target/riscv/addsigeu.c +++ b/gcc/testsuite/gcc.target/riscv/addsigeu.c @@ -19,8 +19,9 @@ addsigeu (int_t w, int_t x, int_t y, int_t z) add[w] a0,a1,a2 */ -/* { dg-final { scan-rtl-dump-times "Conversion succeeded on pass 1\\." 1 "ce1" { xfail rv64 } } } */ -/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_try_addcc" 1 "ce1" { xfail rv64 } } } */ -/* { dg-final { scan-assembler-times "\\s(?:sgtu|sltu)\\s" 1 { xfail rv64 } } } */ +/* { dg-final { scan-rtl-dump-times "Conversion succeeded on pass 1\\." 1 "ce1" } } */ +/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_try_addcc" 1 "ce1" { target { rv32 } } } } */ +/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_convert_multiple_sets" 1 "ce1" { target { rv64 } } } } */ +/* { dg-final { scan-assembler-times "\\s(?:sgtu|sltu)\\s" 1 } } */ /* { dg-final { scan-assembler-not "\\s(?:seqz|snez)\\s" } } */ -/* { dg-final { scan-assembler-not "\\s(?:bgeu|bgtu|bleu|bltu)\\s" { xfail rv64 } } } */ +/* { dg-final { scan-assembler-not "\\s(?:bgeu|bgtu|bleu|bltu)\\s" } } */ diff --git a/gcc/testsuite/gcc.target/riscv/addsigt.c b/gcc/testsuite/gcc.target/riscv/addsigt.c index 564b2b31fab1..69b5d15f6cfc 100644 --- a/gcc/testsuite/gcc.target/riscv/addsigt.c +++ b/gcc/testsuite/gcc.target/riscv/addsigt.c @@ -19,8 +19,9 @@ addsigt (int_t w, int_t x, int_t y, int_t z) add[w] a0,a1,a2 */ -/* { dg-final { scan-rtl-dump-times "Conversion succeeded on pass 1\\." 1 "ce1" { xfail rv64 } } } */ -/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_try_addcc" 1 "ce1" { xfail rv64 } } } */ -/* { dg-final { scan-assembler-times "\\s(?:sgt|slt)\\s" 1 { xfail rv64 } } } */ +/* { dg-final { scan-rtl-dump-times "Conversion succeeded on pass 1\\." 1 "ce1" } } */ +/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_try_addcc" 1 "ce1" { target { rv32 } } } } */ +/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_convert_multiple_sets" 1 "ce1" { target { rv64 } } } } */ +/* { dg-final { scan-assembler-times "\\s(?:sgt|slt)\\s" 1 } } */ /* { dg-final { scan-assembler-not "\\s(?:seqz|snez)\\s" } } */ -/* { dg-final { scan-assembler-not "\\s(?:bge|bgt|ble|blt)\\s" { xfail rv64 } } } */ +/* { dg-final { scan-assembler-not "\\s(?:bge|bgt|ble|blt)\\s" } } */ diff --git a/gcc/testsuite/gcc.target/riscv/addsigtu.c b/gcc/testsuite/gcc.target/riscv/addsigtu.c index 568683006bfd..80d4451ff277 100644 --- a/gcc/testsuite/gcc.target/riscv/addsigtu.c +++ b/gcc/testsuite/gcc.target/riscv/addsigtu.c @@ -19,8 +19,9 @@ addsigtu (int_t w, int_t x, int_t y, int_t z) add[w] a0,a1,a2 */ -/* { dg-final { scan-rtl-dump-times "Conversion succeeded on pass 1\\." 1 "ce1" { xfail rv64 } } } */ -/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_try_addcc" 1 "ce1" { xfail rv64 } } } */ -/* { dg-final { scan-assembler-times "\\s(?:sgtu|sltu)\\s" 1 { xfail rv64 } } } */ +/* { dg-final { scan-rtl-dump-times "Conversion succeeded on pass 1\\." 1 "ce1" } } */ +/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_try_addcc" 1 "ce1" { target { rv32 } } } } */ +/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_convert_multiple_sets" 1 "ce1" { target { rv64 } } } } */ +/* { dg-final { scan-assembler-times "\\s(?:sgtu|sltu)\\s" 1 } } */ /* { dg-final { scan-assembler-not "\\s(?:seqz|snez)\\s" } } */ -/* { dg-final { scan-assembler-not "\\s(?:bgeu|bgtu|bleu|bltu)\\s" { xfail rv64 } } } */ +/* { dg-final { scan-assembler-not "\\s(?:bgeu|bgtu|bleu|bltu)\\s" } } */ diff --git a/gcc/testsuite/gcc.target/riscv/addsile.c b/gcc/testsuite/gcc.target/riscv/addsile.c index 2e8398836bbb..7a7a0e0c9b40 100644 --- a/gcc/testsuite/gcc.target/riscv/addsile.c +++ b/gcc/testsuite/gcc.target/riscv/addsile.c @@ -19,8 +19,9 @@ addsile (int_t w, int_t x, int_t y, int_t z) add[w] a0,a1,a2 */ -/* { dg-final { scan-rtl-dump-times "Conversion succeeded on pass 1\\." 1 "ce1" { xfail rv64 } } } */ -/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_try_addcc" 1 "ce1" { xfail rv64 } } } */ -/* { dg-final { scan-assembler-times "\\s(?:sgt|slt)\\s" 1 { xfail rv64 } } } */ +/* { dg-final { scan-rtl-dump-times "Conversion succeeded on pass 1\\." 1 "ce1" } } */ +/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_try_addcc" 1 "ce1" { target { rv32 } } } } */ +/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_convert_multiple_sets" 1 "ce1" { target { rv64 } } } } */ +/* { dg-final { scan-assembler-times "\\s(?:sgt|slt)\\s" 1 } } */ /* { dg-final { scan-assembler-not "\\s(?:seqz|snez)\\s" } } */ -/* { dg-final { scan-assembler-not "\\s(?:bge|bgt|ble|blt)\\s" { xfail rv64 } } } */ +/* { dg-final { scan-assembler-not "\\s(?:bge|bgt|ble|blt)\\s" } } */ diff --git a/gcc/testsuite/gcc.target/riscv/addsileu.c b/gcc/testsuite/gcc.target/riscv/addsileu.c index 1f0f99b5d16c..e059c586c37b 100644 --- a/gcc/testsuite/gcc.target/riscv/addsileu.c +++ b/gcc/testsuite/gcc.target/riscv/addsileu.c @@ -19,8 +19,9 @@ addsileu (int_t w, int_t x, int_t y, int_t z) add[w] a0,a1,a2 */ -/* { dg-final { scan-rtl-dump-times "Conversion succeeded on pass 1\\." 1 "ce1" { xfail rv64 } } } */ -/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_try_addcc" 1 "ce1" { xfail rv64 } } } */ -/* { dg-final { scan-assembler-times "\\s(?:sgtu|sltu)\\s" 1 { xfail rv64 } } } */ +/* { dg-final { scan-rtl-dump-times "Conversion succeeded on pass 1\\." 1 "ce1" } } */ +/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_try_addcc" 1 "ce1" { target { rv32 } } } } */ +/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_convert_multiple_sets" 1 "ce1" { target { rv64 } } } } */ +/* { dg-final { scan-assembler-times "\\s(?:sgtu|sltu)\\s" 1 } } */ /* { dg-final { scan-assembler-not "\\s(?:seqz|snez)\\s" } } */ -/* { dg-final { scan-assembler-not "\\s(?:bgeu|bgtu|bleu|bltu)\\s" { xfail rv64 } } } */ +/* { dg-final { scan-assembler-not "\\s(?:bgeu|bgtu|bleu|bltu)\\s" } } */ diff --git a/gcc/testsuite/gcc.target/riscv/addsilt.c b/gcc/testsuite/gcc.target/riscv/addsilt.c index 99071328aa07..c18fd743fe53 100644 --- a/gcc/testsuite/gcc.target/riscv/addsilt.c +++ b/gcc/testsuite/gcc.target/riscv/addsilt.c @@ -19,8 +19,9 @@ addsilt (int_t w, int_t x, int_t y, int_t z) add[w] a0,a1,a2 */ -/* { dg-final { scan-rtl-dump-times "Conversion succeeded on pass 1\\." 1 "ce1" { xfail rv64 } } } */ -/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_try_addcc" 1 "ce1" { xfail rv64 } } } */ -/* { dg-final { scan-assembler-times "\\s(?:sgt|slt)\\s" 1 { xfail rv64 } } } */ +/* { dg-final { scan-rtl-dump-times "Conversion succeeded on pass 1\\." 1 "ce1" } } */ +/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_try_addcc" 1 "ce1" { target { rv32 } } } } */ +/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_convert_multiple_sets" 1 "ce1" { target { rv64 } } } } */ +/* { dg-final { scan-assembler-times "\\s(?:sgt|slt)\\s" 1 } } */ /* { dg-final { scan-assembler-not "\\s(?:seqz|snez)\\s" } } */ -/* { dg-final { scan-assembler-not "\\s(?:bge|bgt|ble|blt)\\s" { xfail rv64 } } } */ +/* { dg-final { scan-assembler-not "\\s(?:bge|bgt|ble|blt)\\s" } } */ diff --git a/gcc/testsuite/gcc.target/riscv/addsiltu.c b/gcc/testsuite/gcc.target/riscv/addsiltu.c index 3f8f022ce8e8..f1948ce7c8a2 100644 --- a/gcc/testsuite/gcc.target/riscv/addsiltu.c +++ b/gcc/testsuite/gcc.target/riscv/addsiltu.c @@ -19,8 +19,9 @@ addsiltu (int_t w, int_t x, int_t y, int_t z) add[w] a0,a1,a2 */ -/* { dg-final { scan-rtl-dump-times "Conversion succeeded on pass 1\\." 1 "ce1" { xfail rv64 } } } */ -/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_try_addcc" 1 "ce1" { xfail rv64 } } } */ -/* { dg-final { scan-assembler-times "\\s(?:sgtu|sltu)\\s" 1 { xfail rv64 } } } */ +/* { dg-final { scan-rtl-dump-times "Conversion succeeded on pass 1\\." 1 "ce1" } } */ +/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_try_addcc" 1 "ce1" { target { rv32 } } } } */ +/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_convert_multiple_sets" 1 "ce1" { target { rv64 } } } } */ +/* { dg-final { scan-assembler-times "\\s(?:sgtu|sltu)\\s" 1 } } */ /* { dg-final { scan-assembler-not "\\s(?:seqz|snez)\\s" } } */ -/* { dg-final { scan-assembler-not "\\s(?:bgeu|bgtu|bleu|bltu)\\s" { xfail rv64 } } } */ +/* { dg-final { scan-assembler-not "\\s(?:bgeu|bgtu|bleu|bltu)\\s" } } */ diff --git a/gcc/testsuite/gcc.target/riscv/bclr-lowest-set-bit-1.c b/gcc/testsuite/gcc.target/riscv/bclr-lowest-set-bit-1.c new file mode 100644 index 000000000000..fa201cec3590 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/bclr-lowest-set-bit-1.c @@ -0,0 +1,128 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gcb -mabi=lp64d" { target { rv64} } } */ +/* { dg-options "-march=rv32gcb -mabi=ilp32" { target { rv32} } } */ +/* { dg-skip-if "" { *-*-* } { "-O0" "-Og" } } */ + +int foo1_res1; +int foo1_res2; +void foo1(unsigned int x) +{ + unsigned int tz = __builtin_ctz (x); + unsigned int t = x - 1UL; + foo1_res1 = t & x; + foo1_res2 = tz; +} + +int foo2_res1; +int foo2_res2; +void foo2(unsigned int x) +{ + unsigned int t = x - 1UL; + unsigned int tz = __builtin_ctz (x); + foo2_res1 = t & x; + foo2_res2 = tz; +} + +int foo3_res1; +int foo3_res2; +void foo3(unsigned int x) +{ + unsigned int t = x - 1UL; + foo3_res1 = t & x; + unsigned int tz = __builtin_ctz (x); + foo3_res2 = tz; +} + +unsigned int foo4_res1; +unsigned int foo4_res2; +void foo4(unsigned int x) +{ + unsigned int tz = __builtin_ctz (x); + unsigned int t = x - 1UL; + foo4_res1 = t & x; + foo4_res2 = tz; +} + +unsigned int foo5_res1; +unsigned int foo5_res2; +void foo5(unsigned int x) +{ + unsigned int t = x - 1UL; + unsigned int tz = __builtin_ctz (x); + foo5_res1 = t & x; + foo5_res2 = tz; +} + +unsigned int foo6_res1; +unsigned int foo6_res2; +void foo6(unsigned int x) +{ + unsigned int t = x - 1UL; + foo6_res1 = t & x; + unsigned int tz = __builtin_ctzl (x); + foo6_res2 = tz; +} + +long foo7_res1; +long foo7_res2; +void foo7(unsigned long x) +{ + unsigned long tz = __builtin_ctzl (x); + unsigned long t = x - 1UL; + foo7_res1 = t & x; + foo7_res2 = tz; +} + +long foo8_res1; +long foo8_res2; +void foo8(unsigned long x) +{ + unsigned long t = x - 1UL; + unsigned long tz = __builtin_ctzl (x); + foo8_res1 = t & x; + foo8_res2 = tz; +} + +long foo9_res1; +long foo9_res2; +void foo9(unsigned long x) +{ + unsigned long t = x - 1UL; + foo9_res1 = t & x; + unsigned long tz = __builtin_ctzl (x); + foo9_res2 = tz; +} + +unsigned long foo10_res1; +unsigned long foo10_res2; +void foo10(unsigned long x) +{ + unsigned long tz = __builtin_ctzl (x); + unsigned long t = x - 1UL; + foo10_res1 = t & x; + foo10_res2 = tz; +} + +unsigned long foo11_res1; +unsigned long foo11_res2; +void foo11(unsigned long x) +{ + unsigned long t = x - 1UL; + unsigned long tz = __builtin_ctzl (x); + foo11_res1 = t & x; + foo11_res2 = tz; +} + +unsigned long foo12_res1; +unsigned long foo12_res2; +void foo12(unsigned long x) +{ + unsigned long t = x - 1UL; + foo12_res1 = t & x; + unsigned long tz = __builtin_ctzl (x); + foo12_res2 = tz; +} + +/* { dg-final { scan-assembler-not "\\sand\\s" } } */ +/* { dg-final { scan-assembler-times "\\sbclr\\s" 12 } } */ + diff --git a/gcc/testsuite/gcc.target/riscv/pr120811.c b/gcc/testsuite/gcc.target/riscv/pr120811.c new file mode 100644 index 000000000000..c28e5ec4cc36 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/pr120811.c @@ -0,0 +1,42 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -march=rv64gc -mabi=lp64d -fdump-rtl-reload -fdump-rtl-late_combine2" { target { rv64 } } } */ +/* { dg-options "-O2 -march=rv32gc -mabi=ilp32d -fdump-rtl-reload -fdump-rtl-late_combine2" { target { rv32 } } } */ +/* { dg-skip-if "" { *-*-* } "-fomit-frame-pointer" } */ + +double *a, *b, *ab, *ac, *ad, *ae, *af, *c, *i, *k, *l; +int n(int *, int, int, int), d, ag, aj; +long ai, e; +double f, g, h, o, p; +int m; +void q() { + long am = n(&d, 0, 1, 0); + for (;;) + for (int j = ag; j; ++j) { + int ao = 0; + for (; ao < aj; ao++) { + long ap = ao + j; + double ar = ad[ap] = ae[ap], az; + switch (m) + case 4: { + o = (&l[ap])[2] - (&l[ap])[3] * ((char *)ap)[am] + (&l[ap])[e] + + (&l[ap])[am]; + p = (&l[ap])[ai - 1] + (&ap)[ai] * (&l[ap])[am * ai] + + (&l[ap])[ai * 3]; + az = (&b[ap])[1] + + (&b[ap])[3] * i[ap] * (&ap)[203] * ((char *)&i[ap])[ai] - + (&i[ap])[ai * 3]; + g = (&i[ap])[e] + (&i[ap])[ai]; + h = (&ab[ap])[am] * (&ab[ap])[2] - ((char *)ap)[ai] + + (&ab[ap])[ai] * (&ap)[0] * (&af[ap])[am] * (&af[ap])[e] + + (&ap)[2] + (&af[ap])[e * am] + (&af[ap])[am * 3]; + } + ar = az * f * k[ap]; + c[ap] = ar; + a[ap] = ac[ap]; + } + } +} +/* { dg-final { scan-rtl-dump-not "const_sum_of_two_s12" "reload" } } */ +/* { dg-final { scan-rtl-dump-not "const_sum_of_two_s12" "late_combine2" } } */ +/* { dg-final { scan-assembler "addi.*sp,2047\n\tl\[dw\]\t.*,1\(.*\).*" } } */ + diff --git a/gcc/testsuite/gcc.target/riscv/pr121778-1.c b/gcc/testsuite/gcc.target/riscv/pr121778-1.c new file mode 100644 index 000000000000..2bb550a095af --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/pr121778-1.c @@ -0,0 +1,11 @@ +/* { dg-do compile { target { rv32 } } } */ +/* { dg-options "-march=rv32gc_zbb -mabi=ilp32 -O2" } */ + +unsigned int +foo (unsigned int a) +{ + return (a << 1) | ((a >> 31) ^ 1); +} + + /* { dg-final { scan-assembler {\mrori} } } */ + /* { dg-final { scan-assembler {\mxori} } } */ diff --git a/gcc/testsuite/gcc.target/riscv/pr121778-2.c b/gcc/testsuite/gcc.target/riscv/pr121778-2.c new file mode 100644 index 000000000000..a9460adeda5f --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/pr121778-2.c @@ -0,0 +1,11 @@ +/* { dg-do compile { target { rv64 } } } */ +/* { dg-options "-march=rv64gc_zbb -mabi=lp64 -O2" } */ + +unsigned long +foo (unsigned long a) +{ + return (a << 1) | ((a >> 63) ^ 1); +} + + /* { dg-final { scan-assembler {\mrori} } } */ + /* { dg-final { scan-assembler {\mxori} } } */ diff --git a/gcc/testsuite/gcc.target/riscv/pr121878.c b/gcc/testsuite/gcc.target/riscv/pr121878.c new file mode 100644 index 000000000000..a0f20e9850cc --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/pr121878.c @@ -0,0 +1,11 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-mcpu=tt-ascalon-d8 -mtune=tt-ascalon-d8" } */ + +/* Verify we don't ICE on the following test case. */ + +typedef int __attribute__((__vector_size__ (32))) vec; +vec +foo (vec x, vec y) +{ + return x / y; +} diff --git a/gcc/testsuite/gcc.target/riscv/pr121937.c b/gcc/testsuite/gcc.target/riscv/pr121937.c new file mode 100644 index 000000000000..3c0389c09346 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/pr121937.c @@ -0,0 +1,66 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-w -march=rv64gcv -mabi=lp64d" { target rv64 } } */ +/* { dg-additional-options "-w -march=rv32gcv -mabi=ilp32" { target rv32 } } */ + +#include +#define BS_VEC(type, num) type __attribute__((vector_size(num * sizeof(type)))) +typedef int16_t int16; +typedef uint16_t uint16; +typedef int32_t int32; +typedef uint64_t uint64; +int32_t g_69, g_539; +int32_t *g_68; +void func_59(int32_t p_60) { + BS_VEC(uint64, 2) BS_VAR_4; + BS_VEC(int16, 8) BS_VAR_6; + uint64 *LOCAL_CHECKSUM; + int32_t *l_108 = &g_69; + int64_t l_829 = 10; + int32_t l_844 = -1; + for (; g_69;) { + int32_t l_924; + if (p_60 * 2u) { + BS_LABEL_0: + *LOCAL_CHECKSUM ^= BS_VAR_4[3]; + for (l_924 = 3; l_924; l_924 -= 1) { + BS_VEC(uint64, 8) + BS_TEMP_600 = -__builtin_convertvector(BS_VAR_6, BS_VEC(uint64, 8)); + BS_VEC(uint64, 8) + BS_TEMP_601 = __builtin_convertvector((BS_VEC(int32, 8)){p_60}, + BS_VEC(uint64, 8)); + BS_VAR_4[356358257141730375] = + __builtin_convertvector( + __builtin_shufflevector((BS_VEC(uint16, 2))0, + (BS_VEC(uint16, 2))0, 1, 3, 0, 1, 2, 0, + 0, 2, 0, 0, 1, 2, 3, 3, 3, 2), + BS_VEC(uint64, 16))[BS_VAR_6[4]] > + (BS_VEC(uint64, 8)){0, BS_TEMP_600[1] ? BS_TEMP_601[1] + : 0}[l_829 != 0]; + } + } + if (*l_108) + *g_68 |= g_539; + __asm goto("" : : : : BS_LABEL_0); + BS_VEC(int16, 4) + BS_TEMP_681 = __builtin_shufflevector( + (BS_VEC(int16, 2))__builtin_shufflevector( + __builtin_convertvector( + __builtin_shufflevector(BS_VAR_6, BS_VAR_6, 8, 6, 5, 8, 1, 3, 6, + 2, 0, 1, 2, 5, 8, 6, 5, 1, 5, 0, 3, 5, + 8, 2, 2, 4, 6, 0, 6, 4, 3, 3, 1, 2), + BS_VEC(uint16, 32)), + __builtin_convertvector((BS_VEC(int32, 32)){}, BS_VEC(uint16, 32)), + 42, 52) - + __builtin_convertvector((BS_VEC(int32, 2)){l_844}, + BS_VEC(uint16, 2)) * + ~0, + ~(0 < __builtin_shufflevector( + __builtin_convertvector((BS_VEC(int32, 16)){p_60}, + BS_VEC(uint16, 16)), + (BS_VEC(uint16, 16)){20489, 3, 2, 4}, 19, 6)), + 1, 2, 0, 3); + BS_VAR_6[0] = + BS_TEMP_681[0] ^ BS_TEMP_681[1] ^ BS_TEMP_681[2] ^ BS_TEMP_681[3]; + } +} + diff --git a/gcc/testsuite/gcc.target/riscv/pr121982.c b/gcc/testsuite/gcc.target/riscv/pr121982.c new file mode 100644 index 000000000000..fb9baf886fda --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/pr121982.c @@ -0,0 +1,16 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-mcpu=tt-ascalon-d8 -mtune=tt-ascalon-d8" } */ + +/* Verify we don't ICE on the following test cases. */ + +typedef char __attribute__((__vector_size__ (32))) vqi; +typedef short __attribute__((__vector_size__ (32))) vhi; +typedef int __attribute__((__vector_size__ (32))) vsi; +typedef long __attribute__((__vector_size__ (32))) vdi; + +#define TEST(type) type foo_ ## type (type x, type y) { return x / y; } + +TEST(vqi) +TEST(vhi) +TEST(vsi) +TEST(vdi) diff --git a/gcc/testsuite/gcc.target/riscv/pr121983.c b/gcc/testsuite/gcc.target/riscv/pr121983.c new file mode 100644 index 000000000000..1572c379a038 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/pr121983.c @@ -0,0 +1,15 @@ +/* { dg-do compile } */ +/* { dg-options "-mcpu=xiangshan-nanhu" } */ + +struct { + int a; + short s; + unsigned x : 18; + unsigned y : 14; +} bf; + +void +foo() +{ + bf.s ^= bf.y / __builtin_stdc_rotate_left(bf.x, 5); +} diff --git a/gcc/testsuite/gcc.target/riscv/pr122051.c b/gcc/testsuite/gcc.target/riscv/pr122051.c new file mode 100644 index 000000000000..c2f4b877d5ea --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/pr122051.c @@ -0,0 +1,24 @@ +/* { dg-do compile { target int128 } } */ +/* { dg-additional-options "-mrvv-vector-bits=zvl -mcpu=xt-c920 -w" } */ + +typedef __attribute__((__vector_size__(4))) char B; +typedef __attribute__((__vector_size__(16))) long V; +typedef __attribute__((__vector_size__(32))) double W; +typedef __attribute__((__vector_size__(32))) char U; +unsigned u; +B o; +char *p; +int q; +V v; +W w; + +void +foo(__int128, __int128, __int128, __int128, B a, B b, B c, B d, B e, B f, B g, B h) { + do { + w -= q; + v ^= u; + } while (__builtin_memcmp(p, 1 + p, 7)); + o = ((U)w)[0] + c + d + e + f + g + h + a + b; +} + + diff --git a/gcc/testsuite/gcc.target/riscv/pr122106.c b/gcc/testsuite/gcc.target/riscv/pr122106.c new file mode 100644 index 000000000000..b0345b029701 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/pr122106.c @@ -0,0 +1,3 @@ +/* { dg-do compile } */ + +short foo() { return __builtin_rev_crc16_data16(0, 0, 0); } diff --git a/gcc/testsuite/gcc.target/riscv/pr122114.c b/gcc/testsuite/gcc.target/riscv/pr122114.c new file mode 100644 index 000000000000..ccb2ec912a74 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/pr122114.c @@ -0,0 +1,22 @@ +/* { dg-do compile { target { rv64 } } } */ +/* { dg-options "-O2 -fstack-clash-protection -march=rv64gcv_zvl256b -mabi=lp64d" } */ + +int pk_gen_i, pk_gen_j; +long pk_gen_buf[4]; +long pk_gen_t; + +void vec_mul(long *, long *, long *); +void uint64_is_zero_declassify(long); + +void pk_gen() { + long consts[128][13], prod[128][13]; + + vec_mul(prod[pk_gen_j], prod[pk_gen_j], consts[pk_gen_j]); + + for (; pk_gen_i;) { + for (; pk_gen_j; pk_gen_j++) + pk_gen_t |= pk_gen_buf[pk_gen_j]; + + uint64_is_zero_declassify(pk_gen_t); + } +} diff --git a/gcc/testsuite/gcc.target/riscv/pr122147.c b/gcc/testsuite/gcc.target/riscv/pr122147.c new file mode 100644 index 000000000000..14da321bc85f --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/pr122147.c @@ -0,0 +1,14 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-w -march=rv64gcv -mabi=lp64d" { target rv64 } } */ +/* { dg-additional-options "-w -march=rv32gcv -mabi=ilp32" { target rv32 } } */ + +typedef __attribute__((__vector_size__ (4))) _Float16 F; +_Complex char cc; +F f; + +void +foo () +{ + __builtin_memmove (&f, &cc, 2); + f *= f; +} diff --git a/gcc/testsuite/gcc.target/riscv/pr58727.c b/gcc/testsuite/gcc.target/riscv/pr58727.c new file mode 100644 index 000000000000..264710dda32d --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/pr58727.c @@ -0,0 +1,16 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gcb -mabi=lp64d" { target { rv64} } } */ +/* { dg-options "-march=rv32gcb -mabi=ilp32" { target { rv32} } } */ +/* { dg-skip-if "" { *-*-* } { "-O0" "-Og" } } */ + +enum masks { CLEAR = 0x400000, SET = 0x02 }; +unsigned clear_set(unsigned a) { return (a & ~CLEAR) | SET; } +unsigned set_clear(unsigned a) { return (a | SET) & ~CLEAR; } +unsigned clear(unsigned a) { return a & ~CLEAR; } +unsigned set(unsigned a) { return a | SET; } +__attribute__((flatten)) unsigned clear_set_inline(unsigned a) { return set(clear(a)); } +__attribute__((flatten)) unsigned set_clear_inline(unsigned a) { return clear(set(a)); } + +/* { dg-final { scan-assembler-not "\\sand\\s" } } */ +/* { dg-final { scan-assembler-not "\\sandi\\s" } } */ + diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr118945-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr118945-1.c new file mode 100644 index 000000000000..fc37bef12586 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr118945-1.c @@ -0,0 +1,15 @@ +/* { dg-do compile } */ +/* { dg-options "-mtune=generic-ooo -O3 -march=rv64gcv_zvl256b_zba -mabi=lp64d -mrvv-max-lmul=m2 -mrvv-vector-bits=scalable" } */ + +int test(int* in, int n) +{ + int accum = 0; + for (int i = 0; i < n; i++) + accum += in[i]; + + return accum; +} + +/* { dg-final { scan-assembler-times {vsetvli\s+[a-z0-9]+,\s*[a-z0-9]+,\s*e[0-9]+,\s*m[f0-9]+,\s*ta,\s*ma} 3 } } */ +/* { dg-final { scan-assembler-times {vsetvli\s+[a-z0-9]+,\s*[a-z0-9]+,\s*e[0-9]+,\s*m[f0-9]+,\s*tu,\s*ma} 1 } } */ + diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr118945-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr118945-2.c new file mode 100644 index 000000000000..956574067ce1 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr118945-2.c @@ -0,0 +1,28 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rva23u64 -mtune=generic-ooo -Ofast -S" } */ + +void vmult( + double* dst, + const double* src, + const unsigned int* rowstart, + const unsigned int* colnums, + const double* val, + const unsigned int n_rows +) { + const double* val_ptr = &val[rowstart[0]]; + const unsigned int* colnum_ptr = &colnums[rowstart[0]]; + double* dst_ptr = dst; + + for (unsigned int row = 0; row < n_rows; ++row) { + double s = 0.; + const double* const val_end_of_row = &val[rowstart[row + 1]]; + while (val_ptr != val_end_of_row) { + s += *val_ptr++ * src[*colnum_ptr++]; + } + *dst_ptr++ = s; + } +} + +/* { dg-final { scan-assembler-times {vsetvli\s+[a-z0-9]+,\s*[a-z0-9]+,\s*e[0-9]+,\s*m[f0-9]+,\s*ta,\s*ma} 4 } } */ +/* { dg-final { scan-assembler-times {vsetvli\s+[a-z0-9]+,\s*[a-z0-9]+,\s*e[0-9]+,\s*m[f0-9]+,\s*tu,\s*ma} 1 } } */ + diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr120378-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr120378-1.c new file mode 100644 index 000000000000..500028e7a150 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr120378-1.c @@ -0,0 +1,21 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gcv -mabi=lp64d -O3" } */ + +#include + +inline uint8_t +clip_uint8 (int x) +{ + return x & (~255) ? (-x) >> 31 : x; +} + +void __attribute__ ((noipa)) +clip_loop (uint8_t *res, int *x, int w) +{ + for (int i = 0; i < w; i++) + res[i] = clip_uint8 (x[i]); +} + +/* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */ +/* { dg-final { scan-tree-dump-times "MAX_EXPR " 1 "optimized" } } */ +/* { dg-final { scan-assembler-times {vnclipu\.wi} 2 } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr120378-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr120378-2.c new file mode 100644 index 000000000000..9a880e0f67b2 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr120378-2.c @@ -0,0 +1,21 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gcv -mabi=lp64d -O3" } */ + +#include + +inline uint16_t +clip_uint16 (int x) +{ + return x & (~65535) ? (-x) >> 31 : x; +} + +void __attribute__ ((noipa)) +clip_loop (uint16_t *res, int *x, int w) +{ + for (int i = 0; i < w; i++) + res[i] = clip_uint16 (x[i]); +} + +/* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */ +/* { dg-final { scan-tree-dump-times "MAX_EXPR " 1 "optimized" } } */ +/* { dg-final { scan-assembler-times {vnclipu\.wi} 1 } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr120378-3.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr120378-3.c new file mode 100644 index 000000000000..d6b2ddd3f8d0 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr120378-3.c @@ -0,0 +1,21 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gcv -mabi=lp64d -O3" } */ + +#include + +inline uint8_t +clip_uint8 (int64_t x) +{ + return x & (~255) ? (-x) >> 63 : x; +} + +void __attribute__ ((noipa)) +clip_loop (uint8_t *res, int64_t *x, int w) +{ + for (int i = 0; i < w; i++) + res[i] = clip_uint8 (x[i]); +} + +/* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */ +/* { dg-final { scan-tree-dump-times "MAX_EXPR " 1 "optimized" } } */ +/* { dg-final { scan-assembler-times {vnclipu\.wi} 3 } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr120378-4.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr120378-4.c new file mode 100644 index 000000000000..4657e52f8839 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr120378-4.c @@ -0,0 +1,21 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gcv -mabi=lp64d -O3" } */ + +#include + +inline uint16_t +clip_uint16 (int64_t x) +{ + return x & (~65535) ? (-x) >> 63 : x; +} + +void __attribute__ ((noipa)) +clip_loop (uint16_t *res, int64_t *x, int w) +{ + for (int i = 0; i < w; i++) + res[i] = clip_uint16 (x[i]); +} + +/* { dg-final { scan-tree-dump-times ".SAT_TRUNC " 1 "optimized" } } */ +/* { dg-final { scan-tree-dump-times "MAX_EXPR " 1 "optimized" } } */ +/* { dg-final { scan-assembler-times {vnclipu\.wi} 2 } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr121845.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr121845.c new file mode 100644 index 000000000000..84aca3cd8e74 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr121845.c @@ -0,0 +1,37 @@ +/* { dg-do run } */ +/* { dg-require-effective-target riscv_v_ok } */ +/* { dg-options "-march=rv64gcv -mabi=lp64d -O0" } */ + +#include +typedef uint32_t a; +typedef uint64_t uint64; + +uint64 b; +__attribute__ ((__vector_size__ (4 * sizeof (a)))) a f = {504339, 7, 3}; +uint64 *g = &b; + +int32_t * +c (uint8_t, int32_t *, uint32_t, uint32_t, int64_t); +int8_t +d () +{ + int32_t e; + c (0, &e, 0, 0, 1); + return 0; +} + +int32_t * +c (uint8_t, int32_t *j, uint32_t, uint32_t, int64_t) +{ + f = __builtin_shufflevector (f, f, 0, 3, 2, 1); + *g = f[2]; + return j; +} + +int +main () +{ + d (); + if (b != 3) + __builtin_abort (); +} diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr121910.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr121910.c new file mode 100644 index 000000000000..024aae336481 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr121910.c @@ -0,0 +1,34 @@ +/* { dg-do compile } */ +/* { dg-options "-O3 -ftree-vectorize -mabi=lp64d -march=rv64gcv -mrvv-max-lmul=dynamic -fdump-tree-vect-all" } */ +/* { dg-skip-if "" { *-*-* } { "-O0" "-O1" "-O2" "-Os" "-Og" "-Oz" } } */ + +#include + +/* full chroma mc (ie until 1/8 pixel)*/ +void mc_chroma(uint8_t* dst, int i_dst_stride, uint8_t* src, int i_src_stride, + int mvx, int mvy, int i_width, int i_height) { + uint8_t* srcp; + + int d8x = mvx & 0x07; + int d8y = mvy & 0x07; + int cA = (8 - d8x) * (8 - d8y); + int cB = d8x * (8 - d8y); + int cC = (8 - d8x) * d8y; + int cD = d8x * d8y; + + src += (mvy >> 3) * i_src_stride + (mvx >> 3); + srcp = &src[i_src_stride]; + + for (int y = 0; y < i_height; y++) { + for (int x = 0; x < i_width; x++) + dst[x] = (cA * src[x] + cB * src[x + 1] + cC * srcp[x] + + cD * srcp[x + 1] + 32) >> + 6; + dst += i_dst_stride; + src = srcp; + srcp += i_src_stride; + } +} + +/* { dg-final { scan-tree-dump "LOOP VECTORIZED" "vect" } } */ +/* { dg-final { scan-tree-dump "Choosing vector mode RVVM1QI" "vect" } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr122124.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr122124.c new file mode 100644 index 000000000000..29d51b618548 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr122124.c @@ -0,0 +1,21 @@ +/* { dg-do run } */ +/* { dg-require-effective-target riscv_v_ok } */ +/* { dg-add-options riscv_v } */ +/* { dg-additional-options "-O0 -std=gnu99" } */ + +#include +#include +#define BS_VEC(type, num) type __attribute__((vector_size(num * sizeof(type)))) +uint16_t func_24() { + BS_VEC(uint32_t, 4) zero = {0}; + BS_VEC(uint8_t, 2) + BS_VAR_1 = __builtin_shufflevector( + (BS_VEC(uint8_t, 4))5, + __builtin_convertvector(zero, BS_VEC(uint8_t, 4)), 5, 0); + return BS_VAR_1[1]; +} +int main() { + printf("%u\n", func_24()); +} + +/* { dg-output "5" } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/shuffle-slide-run.h b/gcc/testsuite/gcc.target/riscv/rvv/autovec/shuffle-slide-run.h new file mode 100644 index 000000000000..e14ebeb974e9 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/shuffle-slide-run.h @@ -0,0 +1,106 @@ +#define comp(a, b, n) \ + for (unsigned i = 0; i < n; ++i) \ + if ((a)[i] != (b)[i]) \ + __builtin_abort (); + +#define CHECK4(TYPE, NUNITS, A, B, C) \ + __attribute__ ((noipa)) void check4_##A##_##B##_##C##_##TYPE () \ + { \ + TYPE v0_##TYPE = (TYPE){SERIES_##NUNITS (0, NUNITS)}; \ + TYPE v1_##TYPE = (TYPE){SERIES_##NUNITS (NUNITS, NUNITS)}; \ + TYPE ref_##TYPE = (TYPE){MASK4_##NUNITS (0, NUNITS, A, B, C)}; \ + TYPE res_##TYPE; \ + permute4_##A##_##B##_##C##_##TYPE (v0_##TYPE, v1_##TYPE, &res_##TYPE); \ + comp (res_##TYPE, ref_##TYPE, NUNITS); \ + } + +#define CHECK8(TYPE, NUNITS, A, B, C) \ + __attribute__ ((noipa)) void check8_##A##_##B##_##C##_##TYPE () \ + { \ + TYPE v0_##TYPE = (TYPE){SERIES_##NUNITS (0, NUNITS)}; \ + TYPE v1_##TYPE = (TYPE){SERIES_##NUNITS (NUNITS, NUNITS)}; \ + TYPE ref_##TYPE = (TYPE){MASK8_##NUNITS (0, NUNITS, A, B, C)}; \ + TYPE res_##TYPE; \ + permute8_##A##_##B##_##C##_##TYPE (v0_##TYPE, v1_##TYPE, &res_##TYPE); \ + comp (res_##TYPE, ref_##TYPE, NUNITS); \ + } + +#define CHECK8(TYPE, NUNITS, A, B, C) \ + __attribute__ ((noipa)) void check8_##A##_##B##_##C##_##TYPE () \ + { \ + TYPE v0_##TYPE = (TYPE){SERIES_##NUNITS (0, NUNITS)}; \ + TYPE v1_##TYPE = (TYPE){SERIES_##NUNITS (NUNITS, NUNITS)}; \ + TYPE ref_##TYPE = (TYPE){MASK8_##NUNITS (0, NUNITS, A, B, C)}; \ + TYPE res_##TYPE; \ + permute8_##A##_##B##_##C##_##TYPE (v0_##TYPE, v1_##TYPE, &res_##TYPE); \ + comp (res_##TYPE, ref_##TYPE, NUNITS); \ + } + +#define CHECK16(TYPE, NUNITS, A, B, C) \ + __attribute__ ((noipa)) void check16_##A##_##B##_##C##_##TYPE () \ + { \ + TYPE v0_##TYPE = (TYPE){SERIES_##NUNITS (0, NUNITS)}; \ + TYPE v1_##TYPE = (TYPE){SERIES_##NUNITS (NUNITS, NUNITS)}; \ + TYPE ref_##TYPE = (TYPE){MASK16_##NUNITS (0, NUNITS, A, B, C)}; \ + TYPE res_##TYPE; \ + permute16_##A##_##B##_##C##_##TYPE (v0_##TYPE, v1_##TYPE, &res_##TYPE); \ + comp (res_##TYPE, ref_##TYPE, NUNITS); \ + } + +#define CHECK32(TYPE, NUNITS, A, B, C) \ + __attribute__ ((noipa)) void check32_##A##_##B##_##C##_##TYPE () \ + { \ + TYPE v0_##TYPE = (TYPE){SERIES_##NUNITS (0, NUNITS)}; \ + TYPE v1_##TYPE = (TYPE){SERIES_##NUNITS (NUNITS, NUNITS)}; \ + TYPE ref_##TYPE = (TYPE){MASK32_##NUNITS (0, NUNITS, A, B, C)}; \ + TYPE res_##TYPE; \ + permute32_##A##_##B##_##C##_##TYPE (v0_##TYPE, v1_##TYPE, &res_##TYPE); \ + comp (res_##TYPE, ref_##TYPE, NUNITS); \ + } + +#define CHECK64(TYPE, NUNITS, A, B, C) \ + __attribute__ ((noipa)) void check64_##A##_##B##_##C##_##TYPE () \ + { \ + TYPE v0_##TYPE = (TYPE){SERIES_##NUNITS (0, NUNITS)}; \ + TYPE v1_##TYPE = (TYPE){SERIES_##NUNITS (NUNITS, NUNITS)}; \ + TYPE ref_##TYPE = (TYPE){MASK64_##NUNITS (0, NUNITS, A, B, C)}; \ + TYPE res_##TYPE; \ + permute64_##A##_##B##_##C##_##TYPE (v0_##TYPE, v1_##TYPE, &res_##TYPE); \ + comp (res_##TYPE, ref_##TYPE, NUNITS); \ + } + +#define CHECK128(TYPE, NUNITS, A, B, C) \ + __attribute__ ((noipa)) void check128_##A##_##B##_##C##_##TYPE () \ + { \ + TYPE v0_##TYPE = (TYPE){SERIES_##NUNITS (0, NUNITS)}; \ + TYPE v1_##TYPE = (TYPE){SERIES_##NUNITS (NUNITS, NUNITS)}; \ + TYPE ref_##TYPE = (TYPE){MASK128_##NUNITS (0, NUNITS, A, B, C)}; \ + TYPE res_##TYPE; \ + permute128_##A##_##B##_##C##_##TYPE (v0_##TYPE, v1_##TYPE, &res_##TYPE); \ + comp (res_##TYPE, ref_##TYPE, NUNITS); \ + } + +DO_ALL_TEST4(CHECK4) +DO_ALL_TEST8(CHECK8) +DO_ALL_TEST16(CHECK16) +DO_ALL_TEST32(CHECK32) +DO_ALL_TEST64(CHECK64) +DO_ALL_TEST128(CHECK128) + +#define CALL_CHECK4(TYPE, NUNITS, A, B, C) check4_##A##_##B##_##C##_##TYPE (); +#define CALL_CHECK8(TYPE, NUNITS, A, B, C) check8_##A##_##B##_##C##_##TYPE (); +#define CALL_CHECK16(TYPE, NUNITS, A, B, C) check16_##A##_##B##_##C##_##TYPE (); +#define CALL_CHECK32(TYPE, NUNITS, A, B, C) check32_##A##_##B##_##C##_##TYPE (); +#define CALL_CHECK64(TYPE, NUNITS, A, B, C) check64_##A##_##B##_##C##_##TYPE (); +#define CALL_CHECK128(TYPE, NUNITS, A, B, C) check128_##A##_##B##_##C##_##TYPE (); + +int +main () +{ + DO_ALL_TEST4(CALL_CHECK4) + DO_ALL_TEST8(CALL_CHECK8) + DO_ALL_TEST16(CALL_CHECK16) + DO_ALL_TEST32(CALL_CHECK32) + DO_ALL_TEST64(CALL_CHECK64) + DO_ALL_TEST128(CALL_CHECK128) +} diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/shuffle-slidedown-run.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/shuffle-slidedown-run.c new file mode 100644 index 000000000000..1c7203d26a53 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/shuffle-slidedown-run.c @@ -0,0 +1,7 @@ +/* { dg-do run } */ +/* { dg-require-effective-target riscv_v_ok } */ +/* { dg-add-options riscv_v } */ +/* { dg-additional-options "-O3 -std=gnu99 -mrvv-max-lmul=m8 -Wno-overflow" } */ + +#include "vls-vlmax/shuffle-slidedown-1.c" +#include "shuffle-slide-run.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/shuffle-slideup-run.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/shuffle-slideup-run.c new file mode 100644 index 000000000000..201b36f65cb2 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/shuffle-slideup-run.c @@ -0,0 +1,7 @@ +/* { dg-do run } */ +/* { dg-require-effective-target riscv_v_ok } */ +/* { dg-add-options riscv_v } */ +/* { dg-additional-options "-O3 -std=gnu99 -mrvv-max-lmul=m8 -Wno-overflow" } */ + +#include "vls-vlmax/shuffle-slideup-1.c" +#include "shuffle-slide-run.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/shuffle-slide.h b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/shuffle-slide.h new file mode 100644 index 000000000000..d426433d6ea3 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/shuffle-slide.h @@ -0,0 +1,240 @@ +#include "perm.h" + +#define SERIES_1(x, y) (x) +#define SERIES_2(x, y) (x), (x + 1) +#define SERIES_3(x, y) SERIES_1 (x, y), SERIES_2 (x + 1, y) +#define SERIES_4(x, y) SERIES_2 (x, y), SERIES_2 (x + 2, y) +#define SERIES_5(x, y) SERIES_2 (x, y), SERIES_3 (x + 2, y) +#define SERIES_6(x, y) SERIES_3 (x, y), SERIES_3 (x + 3, y) +#define SERIES_7(x, y) SERIES_3 (x, y), SERIES_4 (x + 3, y) +#define SERIES_8(x, y) SERIES_4 (x, y), SERIES_4 (x + 4, y) +#define SERIES_9(x, y) SERIES_4 (x, y), SERIES_5 (x + 4, y) +#define SERIES_10(x, y) SERIES_5 (x, y), SERIES_5 (x + 5, y) +#define SERIES_11(x, y) SERIES_5 (x, y), SERIES_6 (x + 5, y) +#define SERIES_12(x, y) SERIES_6 (x, y), SERIES_6 (x + 6, y) +#define SERIES_13(x, y) SERIES_6 (x, y), SERIES_7 (x + 6, y) +#define SERIES_14(x, y) SERIES_7 (x, y), SERIES_7 (x + 7, y) +#define SERIES_15(x, y) SERIES_7 (x, y), SERIES_8 (x + 7, y) +#define SERIES_16(x, y) SERIES_8 (x, y), SERIES_8 (x + 8, y) +#define SERIES_17(x, y) SERIES_8 (x, y), SERIES_9 (x + 8, y) +#define SERIES_18(x, y) SERIES_9 (x, y), SERIES_9 (x + 9, y) +#define SERIES_19(x, y) SERIES_9 (x, y), SERIES_10 (x + 9, y) +#define SERIES_20(x, y) SERIES_10 (x, y), SERIES_10 (x + 10, y) +#define SERIES_21(x, y) SERIES_10 (x, y), SERIES_11 (x + 10, y) +#define SERIES_22(x, y) SERIES_11 (x, y), SERIES_11 (x + 11, y) +#define SERIES_23(x, y) SERIES_11 (x, y), SERIES_12 (x + 11, y) +#define SERIES_24(x, y) SERIES_12 (x, y), SERIES_12 (x + 12, y) +#define SERIES_25(x, y) SERIES_12 (x, y), SERIES_13 (x + 12, y) +#define SERIES_26(x, y) SERIES_13 (x, y), SERIES_13 (x + 13, y) +#define SERIES_27(x, y) SERIES_13 (x, y), SERIES_14 (x + 13, y) +#define SERIES_28(x, y) SERIES_14 (x, y), SERIES_14 (x + 14, y) +#define SERIES_29(x, y) SERIES_14 (x, y), SERIES_15 (x + 14, y) +#define SERIES_30(x, y) SERIES_15 (x, y), SERIES_15 (x + 15, y) +#define SERIES_31(x, y) SERIES_15 (x, y), SERIES_16 (x + 15, y) +#define SERIES_32(x, y) SERIES_16 (x, y), SERIES_16 (x + 16, y) +#define SERIES_33(x, y) SERIES_16 (x, y), SERIES_17 (x + 16, y) +#define SERIES_34(x, y) SERIES_17 (x, y), SERIES_17 (x + 17, y) +#define SERIES_35(x, y) SERIES_17 (x, y), SERIES_18 (x + 17, y) +#define SERIES_36(x, y) SERIES_18 (x, y), SERIES_18 (x + 18, y) +#define SERIES_37(x, y) SERIES_18 (x, y), SERIES_19 (x + 18, y) +#define SERIES_38(x, y) SERIES_19 (x, y), SERIES_19 (x + 19, y) +#define SERIES_39(x, y) SERIES_19 (x, y), SERIES_20 (x + 19, y) +#define SERIES_40(x, y) SERIES_20 (x, y), SERIES_20 (x + 20, y) +#define SERIES_41(x, y) SERIES_20 (x, y), SERIES_21 (x + 20, y) +#define SERIES_42(x, y) SERIES_21 (x, y), SERIES_21 (x + 21, y) +#define SERIES_43(x, y) SERIES_21 (x, y), SERIES_22 (x + 21, y) +#define SERIES_44(x, y) SERIES_22 (x, y), SERIES_22 (x + 22, y) +#define SERIES_45(x, y) SERIES_22 (x, y), SERIES_23 (x + 22, y) +#define SERIES_46(x, y) SERIES_23 (x, y), SERIES_23 (x + 23, y) +#define SERIES_47(x, y) SERIES_23 (x, y), SERIES_24 (x + 23, y) +#define SERIES_48(x, y) SERIES_24 (x, y), SERIES_24 (x + 24, y) +#define SERIES_49(x, y) SERIES_24 (x, y), SERIES_25 (x + 24, y) +#define SERIES_50(x, y) SERIES_25 (x, y), SERIES_25 (x + 25, y) +#define SERIES_51(x, y) SERIES_25 (x, y), SERIES_26 (x + 25, y) +#define SERIES_52(x, y) SERIES_26 (x, y), SERIES_26 (x + 26, y) +#define SERIES_53(x, y) SERIES_26 (x, y), SERIES_27 (x + 26, y) +#define SERIES_54(x, y) SERIES_27 (x, y), SERIES_27 (x + 27, y) +#define SERIES_55(x, y) SERIES_27 (x, y), SERIES_28 (x + 27, y) +#define SERIES_56(x, y) SERIES_28 (x, y), SERIES_28 (x + 28, y) +#define SERIES_57(x, y) SERIES_28 (x, y), SERIES_29 (x + 28, y) +#define SERIES_58(x, y) SERIES_29 (x, y), SERIES_29 (x + 29, y) +#define SERIES_59(x, y) SERIES_29 (x, y), SERIES_30 (x + 29, y) +#define SERIES_60(x, y) SERIES_30 (x, y), SERIES_30 (x + 30, y) +#define SERIES_61(x, y) SERIES_30 (x, y), SERIES_31 (x + 30, y) +#define SERIES_62(x, y) SERIES_31 (x, y), SERIES_31 (x + 31, y) +#define SERIES_63(x, y) SERIES_31 (x, y), SERIES_32 (x + 31, y) +#define SERIES_64(x, y) SERIES_32 (x, y), SERIES_32 (x + 32, y) +#define SERIES_65(x, y) SERIES_32 (x, y), SERIES_33 (x + 32, y) +#define SERIES_66(x, y) SERIES_33 (x, y), SERIES_33 (x + 33, y) +#define SERIES_67(x, y) SERIES_33 (x, y), SERIES_34 (x + 33, y) +#define SERIES_68(x, y) SERIES_34 (x, y), SERIES_34 (x + 34, y) +#define SERIES_69(x, y) SERIES_34 (x, y), SERIES_35 (x + 34, y) +#define SERIES_70(x, y) SERIES_35 (x, y), SERIES_35 (x + 35, y) +#define SERIES_71(x, y) SERIES_35 (x, y), SERIES_36 (x + 35, y) +#define SERIES_72(x, y) SERIES_36 (x, y), SERIES_36 (x + 36, y) +#define SERIES_73(x, y) SERIES_36 (x, y), SERIES_37 (x + 36, y) +#define SERIES_74(x, y) SERIES_37 (x, y), SERIES_37 (x + 37, y) +#define SERIES_75(x, y) SERIES_37 (x, y), SERIES_38 (x + 37, y) +#define SERIES_76(x, y) SERIES_38 (x, y), SERIES_38 (x + 38, y) +#define SERIES_77(x, y) SERIES_38 (x, y), SERIES_39 (x + 38, y) +#define SERIES_78(x, y) SERIES_39 (x, y), SERIES_39 (x + 39, y) +#define SERIES_79(x, y) SERIES_39 (x, y), SERIES_40 (x + 39, y) +#define SERIES_80(x, y) SERIES_40 (x, y), SERIES_40 (x + 40, y) +#define SERIES_81(x, y) SERIES_40 (x, y), SERIES_41 (x + 40, y) +#define SERIES_82(x, y) SERIES_41 (x, y), SERIES_41 (x + 41, y) +#define SERIES_83(x, y) SERIES_41 (x, y), SERIES_42 (x + 41, y) +#define SERIES_84(x, y) SERIES_42 (x, y), SERIES_42 (x + 42, y) +#define SERIES_85(x, y) SERIES_42 (x, y), SERIES_43 (x + 42, y) +#define SERIES_86(x, y) SERIES_43 (x, y), SERIES_43 (x + 43, y) +#define SERIES_87(x, y) SERIES_43 (x, y), SERIES_44 (x + 43, y) +#define SERIES_88(x, y) SERIES_44 (x, y), SERIES_44 (x + 44, y) +#define SERIES_89(x, y) SERIES_44 (x, y), SERIES_45 (x + 44, y) +#define SERIES_90(x, y) SERIES_45 (x, y), SERIES_45 (x + 45, y) +#define SERIES_91(x, y) SERIES_45 (x, y), SERIES_46 (x + 45, y) +#define SERIES_92(x, y) SERIES_46 (x, y), SERIES_46 (x + 46, y) +#define SERIES_93(x, y) SERIES_46 (x, y), SERIES_47 (x + 46, y) +#define SERIES_94(x, y) SERIES_47 (x, y), SERIES_47 (x + 47, y) +#define SERIES_95(x, y) SERIES_47 (x, y), SERIES_48 (x + 47, y) +#define SERIES_96(x, y) SERIES_48 (x, y), SERIES_48 (x + 48, y) +#define SERIES_97(x, y) SERIES_48 (x, y), SERIES_49 (x + 48, y) +#define SERIES_98(x, y) SERIES_49 (x, y), SERIES_49 (x + 49, y) +#define SERIES_99(x, y) SERIES_49 (x, y), SERIES_50 (x + 49, y) +#define SERIES_100(x, y) SERIES_50 (x, y), SERIES_50 (x + 50, y) +#define SERIES_101(x, y) SERIES_50 (x, y), SERIES_51 (x + 50, y) +#define SERIES_102(x, y) SERIES_51 (x, y), SERIES_51 (x + 51, y) +#define SERIES_103(x, y) SERIES_51 (x, y), SERIES_52 (x + 51, y) +#define SERIES_104(x, y) SERIES_52 (x, y), SERIES_52 (x + 52, y) +#define SERIES_105(x, y) SERIES_52 (x, y), SERIES_53 (x + 52, y) +#define SERIES_106(x, y) SERIES_53 (x, y), SERIES_53 (x + 53, y) +#define SERIES_107(x, y) SERIES_53 (x, y), SERIES_54 (x + 53, y) +#define SERIES_108(x, y) SERIES_54 (x, y), SERIES_54 (x + 54, y) +#define SERIES_109(x, y) SERIES_54 (x, y), SERIES_55 (x + 54, y) +#define SERIES_110(x, y) SERIES_55 (x, y), SERIES_55 (x + 55, y) +#define SERIES_111(x, y) SERIES_55 (x, y), SERIES_56 (x + 55, y) +#define SERIES_112(x, y) SERIES_56 (x, y), SERIES_56 (x + 56, y) +#define SERIES_113(x, y) SERIES_56 (x, y), SERIES_57 (x + 56, y) +#define SERIES_114(x, y) SERIES_57 (x, y), SERIES_57 (x + 57, y) +#define SERIES_115(x, y) SERIES_57 (x, y), SERIES_58 (x + 57, y) +#define SERIES_116(x, y) SERIES_58 (x, y), SERIES_58 (x + 58, y) +#define SERIES_117(x, y) SERIES_58 (x, y), SERIES_59 (x + 58, y) +#define SERIES_118(x, y) SERIES_59 (x, y), SERIES_59 (x + 59, y) +#define SERIES_119(x, y) SERIES_59 (x, y), SERIES_60 (x + 59, y) +#define SERIES_120(x, y) SERIES_60 (x, y), SERIES_60 (x + 60, y) +#define SERIES_121(x, y) SERIES_60 (x, y), SERIES_61 (x + 60, y) +#define SERIES_122(x, y) SERIES_61 (x, y), SERIES_61 (x + 61, y) +#define SERIES_123(x, y) SERIES_61 (x, y), SERIES_62 (x + 61, y) +#define SERIES_124(x, y) SERIES_62 (x, y), SERIES_62 (x + 62, y) +#define SERIES_125(x, y) SERIES_62 (x, y), SERIES_63 (x + 62, y) +#define SERIES_126(x, y) SERIES_63 (x, y), SERIES_63 (x + 63, y) +#define SERIES_127(x, y) SERIES_63 (x, y), SERIES_64 (x + 63, y) +#define SERIES_128(x, y) SERIES_64 (x, y), SERIES_64 (x + 64, y) +#define SERIES_129(x, y) SERIES_64 (x, y), SERIES_65 (x + 64, y) +#define SERIES_128(x, y) SERIES_64 (x, y), SERIES_64 (x + 64, y) + +#define PERMUTE4(TYPE, NUNITS, A, B, C) \ + __attribute__ ((noipa)) void permute4_##A##_##B##_##C##_##TYPE \ + (TYPE values1, \ + TYPE values2, \ + TYPE *out) \ + { \ + TYPE v = __builtin_shufflevector (values1, values2, \ + MASK4_##NUNITS (0, NUNITS, A, B, C)); \ + *(TYPE *) out = v; \ + } + +#define PERMUTE8(TYPE, NUNITS, A, B, C) \ + __attribute__ ((noipa)) void permute8_##A##_##B##_##C##_##TYPE \ + (TYPE values1, \ + TYPE values2, \ + TYPE *out) \ + { \ + TYPE v = __builtin_shufflevector (values1, values2, \ + MASK8_##NUNITS (0, NUNITS, A, B, C)); \ + *(TYPE *) out = v; \ + } + +#define PERMUTE16(TYPE, NUNITS, A, B, C) \ + __attribute__ ((noipa)) void permute16_##A##_##B##_##C##_##TYPE \ + (TYPE values1, \ + TYPE values2, \ + TYPE *out) \ + { \ + TYPE v = __builtin_shufflevector (values1, values2, \ + MASK16_##NUNITS (0, NUNITS, A, B, C)); \ + *(TYPE *) out = v; \ + } + +#define PERMUTE32(TYPE, NUNITS, A, B, C) \ + __attribute__ ((noipa)) void permute32_##A##_##B##_##C##_##TYPE \ + (TYPE values1, \ + TYPE values2, \ + TYPE *out) \ + { \ + TYPE v = __builtin_shufflevector (values1, values2, \ + MASK32_##NUNITS (0, NUNITS, A, B, C)); \ + *(TYPE *) out = v; \ + } + +#define PERMUTE64(TYPE, NUNITS, A, B, C) \ + __attribute__ ((noipa)) void permute64_##A##_##B##_##C##_##TYPE \ + (TYPE values1, \ + TYPE values2, \ + TYPE *out) \ + { \ + TYPE v = __builtin_shufflevector (values1, values2, \ + MASK64_##NUNITS (0, NUNITS, A, B, C)); \ + *(TYPE *) out = v; \ + } + +#define PERMUTE128(TYPE, NUNITS, A, B, C) \ + __attribute__ ((noipa)) void permute128_##A##_##B##_##C##_##TYPE \ + (TYPE values1, \ + TYPE values2, \ + TYPE *out) \ + { \ + TYPE v = __builtin_shufflevector (values1, values2, \ + MASK128_##NUNITS (0, NUNITS, A, B, C)); \ + *(TYPE *) out = v; \ + } + +#define TEST_128(FUNC, T) \ + T (vnx128qi, 128, FUNC) + +#define TEST_64(FUNC, T) \ + T (vnx64qi, 64, FUNC) \ + T (vnx64hi, 64, FUNC) \ + TEST_128(FUNC, T) + +#define TEST_32(FUNC, T) \ + T (vnx32hi, 32, FUNC) \ + T (vnx32si, 32, FUNC) \ + T (vnx32sf, 32, FUNC) \ + T (vnx32qi, 32, FUNC) \ + TEST_64(FUNC, T) + +#define TEST_16(FUNC, T) \ + T (vnx16qi, 16, FUNC) \ + T (vnx16hi, 16, FUNC) \ + T (vnx16si, 16, FUNC) \ + T (vnx16di, 16, FUNC) \ + T (vnx16sf, 16, FUNC) \ + T (vnx16df, 16, FUNC) \ + TEST_32(FUNC, T) + +#define TEST_8(FUNC, T) \ + T (vnx8qi, 8, FUNC) \ + T (vnx8hi, 8, FUNC) \ + T (vnx8si, 8, FUNC) \ + T (vnx8di, 8, FUNC) \ + T (vnx8sf, 8, FUNC) \ + T (vnx8df, 8, FUNC) \ + TEST_16(FUNC, T) + +#define TEST_4(FUNC, T) \ + T (vnx4qi, 4, FUNC) \ + T (vnx4hi, 4, FUNC) \ + T (vnx4si, 4, FUNC) \ + T (vnx4di, 4, FUNC) \ + T (vnx4sf, 4, FUNC) \ + T (vnx4df, 4, FUNC) \ + TEST_8(FUNC, T) diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/shuffle-slidedown-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/shuffle-slidedown-1.c new file mode 100644 index 000000000000..c91e1bc37359 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/shuffle-slidedown-1.c @@ -0,0 +1,41 @@ +/* { dg-do compile { target { ! riscv_abi_e } } } */ +/* { dg-options "-O3 -march=rv64gcv -mrvv-max-lmul=m8 -Wno-overflow" { target { rv64 } } } */ +/* { dg-options "-O3 -march=rv32gcv -mrvv-max-lmul=m8 -Wno-overflow" { target { rv32 } } } */ + +#define MASK(X, Y, A, B, C) SERIES_##A (X + C, Y), SERIES_##B (X + Y + A, Y) + +#define MASK4_4(X, Y, A, B, C) MASK(X, Y, A, B, C) +#define MASK4_8(X, Y, A, B, C) MASK4_4(X, Y, A, B, C), SERIES_4 (X + Y + 4, Y) +#define MASK4_16(X, Y, A, B, C) MASK4_8(X, Y, A, B, C), SERIES_8 (X + Y + 8, Y) +#define MASK4_32(X, Y, A, B, C) MASK4_16(X, Y, A, B, C), SERIES_16 (X + Y + 16, Y) +#define MASK4_64(X, Y, A, B, C) MASK4_32(X, Y, A, B, C), SERIES_32 (X + Y + 32, Y) +#define MASK4_128(X, Y, A, B, C) MASK4_64(X, Y, A, B, C), SERIES_64 (X + Y + 64, Y) + +#define MASK8_8(X, Y, A, B, C) MASK(X, Y, A, B, C) +#define MASK8_16(X, Y, A, B, C) MASK8_8(X, Y, A, B, C), SERIES_8 (X + Y + 8, Y) +#define MASK8_32(X, Y, A, B, C) MASK8_16(X, Y, A, B, C), SERIES_16 (X + Y + 16, Y) +#define MASK8_64(X, Y, A, B, C) MASK8_32(X, Y, A, B, C), SERIES_32 (X + Y + 32, Y) +#define MASK8_128(X, Y, A, B, C) MASK8_64(X, Y, A, B, C), SERIES_64 (X + Y + 64, Y) + +#define MASK16_16(X, Y, A, B, C) MASK(X, Y, A, B, C) +#define MASK16_32(X, Y, A, B, C) MASK16_16(X, Y, A, B, C), SERIES_16 (X + Y + 16, Y) +#define MASK16_64(X, Y, A, B, C) MASK16_32(X, Y, A, B, C), SERIES_32 (X + Y + 32, Y) +#define MASK16_128(X, Y, A, B, C) MASK16_64(X, Y, A, B, C), SERIES_64 (X + Y + 64, Y) + +#define MASK32_32(X, Y, A, B, C) MASK(X, Y, A, B, C) +#define MASK32_64(X, Y, A, B, C) MASK32_32(X, Y, A, B, C), SERIES_32 (X + Y + 32, Y) +#define MASK32_128(X, Y, A, B, C) MASK32_64(X, Y, A, B, C), SERIES_64 (X + Y + 64, Y) + +#define MASK64_64(X, Y, A, B, C) MASK(X, Y, A, B, C) +#define MASK64_128(X, Y, A, B, C) MASK64_64(X, Y, A, B, C), SERIES_64 (X + Y + 64, Y) + +#define MASK128_128(X, Y, A, B, C) MASK(X, Y, A, B, C) + +#include "shuffle-slidedown-perm.h" + +/* All cases are covered by shuffle_slide_patterns but shuffle_merge_patterns is + called first, that's why we see some vmerge here. */ +/* { dg-final { scan-assembler-times "vslidedown" 477 } } */ +/* { dg-final { scan-assembler-times "vmerge" 164 } } */ +/* { dg-final { scan-assembler-not "vslideup" } } */ +/* { dg-final { scan-assembler-not "vrgather" } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/shuffle-slidedown-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/shuffle-slidedown-2.c new file mode 100644 index 000000000000..5fa7848f04ce --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/shuffle-slidedown-2.c @@ -0,0 +1,41 @@ +/* { dg-do compile { target { ! riscv_abi_e } } } */ +/* { dg-options "-O3 -march=rv64gcv -mrvv-max-lmul=m8 -Wno-overflow" { target { rv64 } } } */ +/* { dg-options "-O3 -march=rv32gcv -mrvv-max-lmul=m8 -Wno-overflow" { target { rv32 } } } */ + +#define MASK(X, Y, A, B, C) SERIES_##A (X + Y + C, Y), SERIES_##B (X + A, Y) + +#define MASK4_4(X, Y, A, B, C) MASK(X, Y, A, B, C) +#define MASK4_8(X, Y, A, B, C) MASK4_4(X, Y, A, B, C), SERIES_4 (X + 4, Y) +#define MASK4_16(X, Y, A, B, C) MASK4_8(X, Y, A, B, C), SERIES_8 (X + 8, Y) +#define MASK4_32(X, Y, A, B, C) MASK4_16(X, Y, A, B, C), SERIES_16 (X + 16, Y) +#define MASK4_64(X, Y, A, B, C) MASK4_32(X, Y, A, B, C), SERIES_32 (X + 32, Y) +#define MASK4_128(X, Y, A, B, C) MASK4_64(X, Y, A, B, C), SERIES_64 (X + 64, Y) + +#define MASK8_8(X, Y, A, B, C) MASK(X, Y, A, B, C) +#define MASK8_16(X, Y, A, B, C) MASK8_8(X, Y, A, B, C), SERIES_8 (X + 8, Y) +#define MASK8_32(X, Y, A, B, C) MASK8_16(X, Y, A, B, C), SERIES_16 (X + 16, Y) +#define MASK8_64(X, Y, A, B, C) MASK8_32(X, Y, A, B, C), SERIES_32 (X + 32, Y) +#define MASK8_128(X, Y, A, B, C) MASK8_64(X, Y, A, B, C), SERIES_64 (X + 64, Y) + +#define MASK16_16(X, Y, A, B, C) MASK(X, Y, A, B, C) +#define MASK16_32(X, Y, A, B, C) MASK16_16(X, Y, A, B, C), SERIES_16 (X + 16, Y) +#define MASK16_64(X, Y, A, B, C) MASK16_32(X, Y, A, B, C), SERIES_32 (X + 32, Y) +#define MASK16_128(X, Y, A, B, C) MASK16_64(X, Y, A, B, C), SERIES_64 (X + 64, Y) + +#define MASK32_32(X, Y, A, B, C) MASK(X, Y, A, B, C) +#define MASK32_64(X, Y, A, B, C) MASK32_32(X, Y, A, B, C), SERIES_32 (X + 32, Y) +#define MASK32_128(X, Y, A, B, C) MASK32_64(X, Y, A, B, C), SERIES_64 (X + 64, Y) + +#define MASK64_64(X, Y, A, B, C) MASK(X, Y, A, B, C) +#define MASK64_128(X, Y, A, B, C) MASK64_64(X, Y, A, B, C), SERIES_64 (X + 64, Y) + +#define MASK128_128(X, Y, A, B, C) MASK(X, Y, A, B, C) + +#include "shuffle-slidedown-perm.h" + +/* All cases are covered by shuffle_slide_patterns but shuffle_merge_patterns is + called first, that's why we see some vmerge here. */ +/* { dg-final { scan-assembler-times "vslidedown" 477 } } */ +/* { dg-final { scan-assembler-times "vmerge" 164 } } */ +/* { dg-final { scan-assembler-not "vslideup" } } */ +/* { dg-final { scan-assembler-not "vrgather" } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/shuffle-slidedown-perm.h b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/shuffle-slidedown-perm.h new file mode 100644 index 000000000000..f031de4173c8 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/shuffle-slidedown-perm.h @@ -0,0 +1,107 @@ +#include "shuffle-slide.h" + +/* All permutations with 4 and 8 elements. */ +#define PERM4_1(TYPE, NUNITS, FUNC) FUNC(TYPE, NUNITS, 1, 3, 0) +#define PERM4_2(TYPE, NUNITS, FUNC) FUNC(TYPE, NUNITS, 1, 3, 1) +#define PERM4_3(TYPE, NUNITS, FUNC) FUNC(TYPE, NUNITS, 1, 3, 2) +#define PERM4_4(TYPE, NUNITS, FUNC) FUNC(TYPE, NUNITS, 2, 2, 0) +#define PERM4_5(TYPE, NUNITS, FUNC) FUNC(TYPE, NUNITS, 2, 2, 1) +#define PERM4_6(TYPE, NUNITS, FUNC) FUNC(TYPE, NUNITS, 3, 1, 0) +#define PERM8_1(TYPE, NUNITS, FUNC) FUNC(TYPE, NUNITS, 1, 7, 3) +#define PERM8_2(TYPE, NUNITS, FUNC) FUNC(TYPE, NUNITS, 1, 7, 4) +#define PERM8_3(TYPE, NUNITS, FUNC) FUNC(TYPE, NUNITS, 1, 7, 5) +#define PERM8_4(TYPE, NUNITS, FUNC) FUNC(TYPE, NUNITS, 1, 7, 6) +#define PERM8_5(TYPE, NUNITS, FUNC) FUNC(TYPE, NUNITS, 2, 6, 2) +#define PERM8_6(TYPE, NUNITS, FUNC) FUNC(TYPE, NUNITS, 2, 6, 3) +#define PERM8_7(TYPE, NUNITS, FUNC) FUNC(TYPE, NUNITS, 2, 6, 4) +#define PERM8_8(TYPE, NUNITS, FUNC) FUNC(TYPE, NUNITS, 2, 6, 5) +#define PERM8_9(TYPE, NUNITS, FUNC) FUNC(TYPE, NUNITS, 3, 5, 1) +#define PERM8_10(TYPE, NUNITS, FUNC) FUNC(TYPE, NUNITS, 3, 5, 2) +#define PERM8_11(TYPE, NUNITS, FUNC) FUNC(TYPE, NUNITS, 3, 5, 3) +#define PERM8_12(TYPE, NUNITS, FUNC) FUNC(TYPE, NUNITS, 3, 5, 4) +#define PERM8_13(TYPE, NUNITS, FUNC) FUNC(TYPE, NUNITS, 4, 4, 0) +#define PERM8_14(TYPE, NUNITS, FUNC) FUNC(TYPE, NUNITS, 4, 4, 1) +#define PERM8_15(TYPE, NUNITS, FUNC) FUNC(TYPE, NUNITS, 4, 4, 2) +#define PERM8_16(TYPE, NUNITS, FUNC) FUNC(TYPE, NUNITS, 4, 4, 3) +#define PERM8_17(TYPE, NUNITS, FUNC) FUNC(TYPE, NUNITS, 5, 3, 0) +#define PERM8_18(TYPE, NUNITS, FUNC) FUNC(TYPE, NUNITS, 5, 3, 1) +#define PERM8_19(TYPE, NUNITS, FUNC) FUNC(TYPE, NUNITS, 5, 3, 2) +#define PERM8_20(TYPE, NUNITS, FUNC) FUNC(TYPE, NUNITS, 6, 2, 0) +#define PERM8_21(TYPE, NUNITS, FUNC) FUNC(TYPE, NUNITS, 6, 2, 1) +#define PERM8_22(TYPE, NUNITS, FUNC) FUNC(TYPE, NUNITS, 7, 1, 0) + +/* We don't test all possible permutations with higher number of elements to avoid + timing out. */ +#define PERM16_1(TYPE, NUNITS, FUNC) FUNC(TYPE, NUNITS, 4, 12, 6) +#define PERM16_2(TYPE, NUNITS, FUNC) FUNC(TYPE, NUNITS, 7, 9, 4) +#define PERM16_3(TYPE, NUNITS, FUNC) FUNC(TYPE, NUNITS, 14, 2, 0) +#define PERM32_1(TYPE, NUNITS, FUNC) FUNC(TYPE, NUNITS, 2, 30, 17) +#define PERM32_2(TYPE, NUNITS, FUNC) FUNC(TYPE, NUNITS, 3, 29, 20) +#define PERM32_3(TYPE, NUNITS, FUNC) FUNC(TYPE, NUNITS, 13, 19, 18) +#define PERM64_1(TYPE, NUNITS, FUNC) FUNC(TYPE, NUNITS, 1, 63, 31) +#define PERM64_2(TYPE, NUNITS, FUNC) FUNC(TYPE, NUNITS, 25, 39, 14) +#define PERM64_3(TYPE, NUNITS, FUNC) FUNC(TYPE, NUNITS, 59, 5, 3) +#define PERM128_1(TYPE, NUNITS, FUNC) FUNC(TYPE, NUNITS, 4, 124, 73) +#define PERM128_2(TYPE, NUNITS, FUNC) FUNC(TYPE, NUNITS, 10, 118, 117) +#define PERM128_3(TYPE, NUNITS, FUNC) FUNC(TYPE, NUNITS, 22, 106, 50) +#define PERM128_4(TYPE, NUNITS, FUNC) FUNC(TYPE, NUNITS, 35, 93, 42) + +#define DO_ALL_TEST4(FUNC) \ + TEST_4 (FUNC, PERM4_1) \ + TEST_4 (FUNC, PERM4_2) \ + TEST_4 (FUNC, PERM4_3) \ + TEST_4 (FUNC, PERM4_4) \ + TEST_4 (FUNC, PERM4_5) \ + TEST_4 (FUNC, PERM4_6) + +#define DO_ALL_TEST8(FUNC) \ + TEST_8 (FUNC, PERM8_1) \ + TEST_8 (FUNC, PERM8_2) \ + TEST_8 (FUNC, PERM8_3) \ + TEST_8 (FUNC, PERM8_4) \ + TEST_8 (FUNC, PERM8_5) \ + TEST_8 (FUNC, PERM8_6) \ + TEST_8 (FUNC, PERM8_7) \ + TEST_8 (FUNC, PERM8_8) \ + TEST_8 (FUNC, PERM8_9) \ + TEST_8 (FUNC, PERM8_10) \ + TEST_8 (FUNC, PERM8_11) \ + TEST_8 (FUNC, PERM8_12) \ + TEST_8 (FUNC, PERM8_13) \ + TEST_8 (FUNC, PERM8_14) \ + TEST_8 (FUNC, PERM8_15) \ + TEST_8 (FUNC, PERM8_16) \ + TEST_8 (FUNC, PERM8_17) \ + TEST_8 (FUNC, PERM8_18) \ + TEST_8 (FUNC, PERM8_19) \ + TEST_8 (FUNC, PERM8_20) \ + TEST_8 (FUNC, PERM8_21) \ + TEST_8 (FUNC, PERM8_22) + +#define DO_ALL_TEST16(FUNC) \ + TEST_16 (FUNC, PERM16_1) \ + TEST_16 (FUNC, PERM16_2) \ + TEST_16 (FUNC, PERM16_3) + +#define DO_ALL_TEST32(FUNC) \ + TEST_32 (FUNC, PERM32_1) \ + TEST_32 (FUNC, PERM32_2) \ + TEST_32 (FUNC, PERM32_3) + +#define DO_ALL_TEST64(FUNC) \ + TEST_64 (FUNC, PERM64_1) \ + TEST_64 (FUNC, PERM64_2) \ + TEST_64 (FUNC, PERM64_3) + +#define DO_ALL_TEST128(FUNC) \ + TEST_128 (FUNC, PERM128_1) \ + TEST_128 (FUNC, PERM128_2) \ + TEST_128 (FUNC, PERM128_3) \ + TEST_128 (FUNC, PERM128_4) + +DO_ALL_TEST4(PERMUTE4) +DO_ALL_TEST8(PERMUTE8) +DO_ALL_TEST16(PERMUTE16) +DO_ALL_TEST32(PERMUTE32) +DO_ALL_TEST64(PERMUTE64) +DO_ALL_TEST128(PERMUTE128) diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/shuffle-slideup-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/shuffle-slideup-1.c new file mode 100644 index 000000000000..47a5f8692ff2 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/shuffle-slideup-1.c @@ -0,0 +1,37 @@ +/* { dg-do compile { target { ! riscv_abi_e } } } */ +/* { dg-options "-O3 -march=rv64gcv -mrvv-max-lmul=m8 -Wno-overflow" { target { rv64 } } } */ +/* { dg-options "-O3 -march=rv32gcv -mrvv-max-lmul=m8 -Wno-overflow" { target { rv32 } } } */ + +#define MASK4_4(X, Y, A, B, C) SERIES_##A (X, Y), SERIES_##B (X + Y, Y), SERIES_##C (X + 4 - C, Y) +#define MASK4_8(X, Y, A, B, C) MASK4_4(X, Y, A, B, C), SERIES_4 (X + 4, Y) +#define MASK4_16(X, Y, A, B, C) MASK4_8(X, Y, A, B, C), SERIES_8 (X + 8, Y) +#define MASK4_32(X, Y, A, B, C) MASK4_16(X, Y, A, B, C), SERIES_16 (X + 16, Y) +#define MASK4_64(X, Y, A, B, C) MASK4_32(X, Y, A, B, C), SERIES_32 (X + 32, Y) +#define MASK4_128(X, Y, A, B, C) MASK4_64(X, Y, A, B, C), SERIES_64 (X + 64, Y) + +#define MASK8_8(X, Y, A, B, C) SERIES_##A (X, Y), SERIES_##B (X + Y, Y), SERIES_##C (X + 8 - C, Y) +#define MASK8_16(X, Y, A, B, C) MASK8_8(X, Y, A, B, C), SERIES_8 (X + 8, Y) +#define MASK8_32(X, Y, A, B, C) MASK8_16(X, Y, A, B, C), SERIES_16 (X + 16, Y) +#define MASK8_64(X, Y, A, B, C) MASK8_32(X, Y, A, B, C), SERIES_32 (X + 32, Y) +#define MASK8_128(X, Y, A, B, C) MASK8_64(X, Y, A, B, C), SERIES_64 (X + 64, Y) + +#define MASK16_16(X, Y, A, B, C) SERIES_##A (X, Y), SERIES_##B (X + Y, Y), SERIES_##C (X + 16 - C, Y) +#define MASK16_32(X, Y, A, B, C) MASK16_16(X, Y, A, B, C), SERIES_16 (X + 16, Y) +#define MASK16_64(X, Y, A, B, C) MASK16_32(X, Y, A, B, C), SERIES_32 (X + 32, Y) +#define MASK16_128(X, Y, A, B, C) MASK16_64(X, Y, A, B, C), SERIES_64 (X + 64, Y) + +#define MASK32_32(X, Y, A, B, C) SERIES_##A (X, Y), SERIES_##B (X + Y, Y), SERIES_##C (X + 32 - C, Y) +#define MASK32_64(X, Y, A, B, C) MASK32_32(X, Y, A, B, C), SERIES_32 (X + 32, Y) +#define MASK32_128(X, Y, A, B, C) MASK32_64(X, Y, A, B, C), SERIES_64 (X + 64, Y) + +#define MASK64_64(X, Y, A, B, C) SERIES_##A (X, Y), SERIES_##B (X + Y, Y), SERIES_##C (X + 64 - C, Y) +#define MASK64_128(X, Y, A, B, C) MASK64_64(X, Y, A, B, C), SERIES_64 (X + 64, Y) + +#define MASK128_128(X, Y, A, B, C) SERIES_##A (X, Y), SERIES_##B (X + Y, Y), SERIES_##C (X + 128 - C, Y) + +#include "shuffle-slideup-perm.h" + +/* { dg-final { scan-assembler-times "vslideup" 490 } } */ +/* { dg-final { scan-assembler-not "vslidedown" } } */ +/* { dg-final { scan-assembler-not "vrgather" } } */ +/* { dg-final { scan-assembler-not "vmerge" } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/shuffle-slideup-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/shuffle-slideup-2.c new file mode 100644 index 000000000000..cc82dd185aed --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/shuffle-slideup-2.c @@ -0,0 +1,37 @@ +/* { dg-do compile { target { ! riscv_abi_e } } } */ +/* { dg-options "-O3 -march=rv64gcv -mrvv-max-lmul=m8 -Wno-overflow" { target { rv64 } } } */ +/* { dg-options "-O3 -march=rv32gcv -mrvv-max-lmul=m8 -Wno-overflow" { target { rv32 } } } */ + +#define MASK4_4(X, Y, A, B, C) SERIES_##A (X + Y, Y), SERIES_##B (X, Y), SERIES_##C (X + Y + 4 - C, Y) +#define MASK4_8(X, Y, A, B, C) MASK4_4(X, Y, A, B, C), SERIES_4 (X + Y + 4, Y) +#define MASK4_16(X, Y, A, B, C) MASK4_8(X, Y, A, B, C), SERIES_8 (X + Y + 8, Y) +#define MASK4_32(X, Y, A, B, C) MASK4_16(X, Y, A, B, C), SERIES_16 (X + Y + 16, Y) +#define MASK4_64(X, Y, A, B, C) MASK4_32(X, Y, A, B, C), SERIES_32 (X + Y + 32, Y) +#define MASK4_128(X, Y, A, B, C) MASK4_64(X, Y, A, B, C), SERIES_64 (X + Y + 64, Y) + +#define MASK8_8(X, Y, A, B, C) SERIES_##A (X + Y, Y), SERIES_##B (X, Y), SERIES_##C (X + Y + 8 - C, Y) +#define MASK8_16(X, Y, A, B, C) MASK8_8(X, Y, A, B, C), SERIES_8 (X + Y + 8, Y) +#define MASK8_32(X, Y, A, B, C) MASK8_16(X, Y, A, B, C), SERIES_16 (X + Y + 16, Y) +#define MASK8_64(X, Y, A, B, C) MASK8_32(X, Y, A, B, C), SERIES_32 (X + Y + 32, Y) +#define MASK8_128(X, Y, A, B, C) MASK8_64(X, Y, A, B, C), SERIES_64 (X + Y + 64, Y) + +#define MASK16_16(X, Y, A, B, C) SERIES_##A (X + Y, Y), SERIES_##B (X, Y), SERIES_##C (X + Y + 16 - C, Y) +#define MASK16_32(X, Y, A, B, C) MASK16_16(X, Y, A, B, C), SERIES_16 (X + Y + 16, Y) +#define MASK16_64(X, Y, A, B, C) MASK16_32(X, Y, A, B, C), SERIES_32 (X + Y + 32, Y) +#define MASK16_128(X, Y, A, B, C) MASK16_64(X, Y, A, B, C), SERIES_64 (X + Y + 64, Y) + +#define MASK32_32(X, Y, A, B, C) SERIES_##A (X + Y, Y), SERIES_##B (X, Y), SERIES_##C (X + Y + 32 - C, Y) +#define MASK32_64(X, Y, A, B, C) MASK32_32(X, Y, A, B, C), SERIES_32 (X + Y + 32, Y) +#define MASK32_128(X, Y, A, B, C) MASK32_64(X, Y, A, B, C), SERIES_64 (X + Y + 64, Y) + +#define MASK64_64(X, Y, A, B, C) SERIES_##A (X + Y, Y), SERIES_##B (X, Y), SERIES_##C (X + Y + 64 - C, Y) +#define MASK64_128(X, Y, A, B, C) MASK64_64(X, Y, A, B, C), SERIES_64 (X + Y + 64, Y) + +#define MASK128_128(X, Y, A, B, C) SERIES_##A (X + Y, Y), SERIES_##B (X, Y), SERIES_##C (X + Y + 128 - C, Y) + +#include "shuffle-slideup-perm.h" + +/* { dg-final { scan-assembler-times "vslideup" 490 } } */ +/* { dg-final { scan-assembler-not "vslidedown" } } */ +/* { dg-final { scan-assembler-not "vrgather" } } */ +/* { dg-final { scan-assembler-not "vmerge" } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/shuffle-slideup-perm.h b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/shuffle-slideup-perm.h new file mode 100644 index 000000000000..907793f5e1c6 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/shuffle-slideup-perm.h @@ -0,0 +1,93 @@ +#include "shuffle-slide.h" + +/* All permutations with 4 and 8 elements. */ +#define PERM4_1(TYPE, NUNITS, FUNC) FUNC(TYPE, NUNITS, 1, 1, 2) +#define PERM4_2(TYPE, NUNITS, FUNC) FUNC(TYPE, NUNITS, 1, 2, 1) +#define PERM4_3(TYPE, NUNITS, FUNC) FUNC(TYPE, NUNITS, 2, 1, 1) +#define PERM8_1(TYPE, NUNITS, FUNC) FUNC(TYPE, NUNITS, 1, 3, 4) +#define PERM8_2(TYPE, NUNITS, FUNC) FUNC(TYPE, NUNITS, 1, 4, 3) +#define PERM8_3(TYPE, NUNITS, FUNC) FUNC(TYPE, NUNITS, 1, 5, 2) +#define PERM8_4(TYPE, NUNITS, FUNC) FUNC(TYPE, NUNITS, 1, 6, 1) +#define PERM8_5(TYPE, NUNITS, FUNC) FUNC(TYPE, NUNITS, 2, 2, 4) +#define PERM8_6(TYPE, NUNITS, FUNC) FUNC(TYPE, NUNITS, 2, 3, 3) +#define PERM8_7(TYPE, NUNITS, FUNC) FUNC(TYPE, NUNITS, 2, 4, 2) +#define PERM8_8(TYPE, NUNITS, FUNC) FUNC(TYPE, NUNITS, 2, 5, 1) +#define PERM8_9(TYPE, NUNITS, FUNC) FUNC(TYPE, NUNITS, 3, 1, 4) +#define PERM8_10(TYPE, NUNITS, FUNC) FUNC(TYPE, NUNITS, 3, 2, 3) +#define PERM8_11(TYPE, NUNITS, FUNC) FUNC(TYPE, NUNITS, 3, 3, 2) +#define PERM8_12(TYPE, NUNITS, FUNC) FUNC(TYPE, NUNITS, 3, 4, 1) +#define PERM8_13(TYPE, NUNITS, FUNC) FUNC(TYPE, NUNITS, 4, 1, 3) +#define PERM8_14(TYPE, NUNITS, FUNC) FUNC(TYPE, NUNITS, 4, 2, 2) +#define PERM8_15(TYPE, NUNITS, FUNC) FUNC(TYPE, NUNITS, 4, 3, 1) +#define PERM8_16(TYPE, NUNITS, FUNC) FUNC(TYPE, NUNITS, 5, 1, 2) +#define PERM8_17(TYPE, NUNITS, FUNC) FUNC(TYPE, NUNITS, 5, 2, 1) +#define PERM8_18(TYPE, NUNITS, FUNC) FUNC(TYPE, NUNITS, 6, 1, 1) + +/* We don't test all possible permutations with higher number of elements to avoid + timing out. */ +#define PERM16_1(TYPE, NUNITS, FUNC) FUNC(TYPE, NUNITS, 1, 13, 2) +#define PERM16_2(TYPE, NUNITS, FUNC) FUNC(TYPE, NUNITS, 4, 9, 3) +#define PERM16_3(TYPE, NUNITS, FUNC) FUNC(TYPE, NUNITS, 11, 4, 1) +#define PERM32_1(TYPE, NUNITS, FUNC) FUNC(TYPE, NUNITS, 4, 27, 1) +#define PERM32_2(TYPE, NUNITS, FUNC) FUNC(TYPE, NUNITS, 6, 19, 7) +#define PERM32_3(TYPE, NUNITS, FUNC) FUNC(TYPE, NUNITS, 20, 4, 8) +#define PERM64_1(TYPE, NUNITS, FUNC) FUNC(TYPE, NUNITS, 2, 37, 25) +#define PERM64_2(TYPE, NUNITS, FUNC) FUNC(TYPE, NUNITS, 6, 29, 29) +#define PERM64_3(TYPE, NUNITS, FUNC) FUNC(TYPE, NUNITS, 34, 10, 20) +#define PERM128_1(TYPE, NUNITS, FUNC) FUNC(TYPE, NUNITS, 2, 68, 58) +#define PERM128_2(TYPE, NUNITS, FUNC) FUNC(TYPE, NUNITS, 32, 45, 51) +#define PERM128_3(TYPE, NUNITS, FUNC) FUNC(TYPE, NUNITS, 60, 63, 5) +#define PERM128_4(TYPE, NUNITS, FUNC) FUNC(TYPE, NUNITS, 81, 7, 40) + +#define DO_ALL_TEST4(FUNC) \ + TEST_4 (FUNC, PERM4_1) \ + TEST_4 (FUNC, PERM4_2) \ + TEST_4 (FUNC, PERM4_3) + +#define DO_ALL_TEST8(FUNC) \ + TEST_8 (FUNC, PERM8_1) \ + TEST_8 (FUNC, PERM8_2) \ + TEST_8 (FUNC, PERM8_3) \ + TEST_8 (FUNC, PERM8_4) \ + TEST_8 (FUNC, PERM8_5) \ + TEST_8 (FUNC, PERM8_6) \ + TEST_8 (FUNC, PERM8_7) \ + TEST_8 (FUNC, PERM8_8) \ + TEST_8 (FUNC, PERM8_9) \ + TEST_8 (FUNC, PERM8_10) \ + TEST_8 (FUNC, PERM8_11) \ + TEST_8 (FUNC, PERM8_12) \ + TEST_8 (FUNC, PERM8_13) \ + TEST_8 (FUNC, PERM8_14) \ + TEST_8 (FUNC, PERM8_15) \ + TEST_8 (FUNC, PERM8_16) \ + TEST_8 (FUNC, PERM8_17) \ + TEST_8 (FUNC, PERM8_18) + +#define DO_ALL_TEST16(FUNC) \ + TEST_16 (FUNC, PERM16_1) \ + TEST_16 (FUNC, PERM16_2) \ + TEST_16 (FUNC, PERM16_3) + +#define DO_ALL_TEST32(FUNC) \ + TEST_32 (FUNC, PERM32_1) \ + TEST_32 (FUNC, PERM32_2) \ + TEST_32 (FUNC, PERM32_3) + +#define DO_ALL_TEST64(FUNC) \ + TEST_64 (FUNC, PERM64_1) \ + TEST_64 (FUNC, PERM64_2) \ + TEST_64 (FUNC, PERM64_3) + +#define DO_ALL_TEST128(FUNC) \ + TEST_128 (FUNC, PERM128_1) \ + TEST_128 (FUNC, PERM128_2) \ + TEST_128 (FUNC, PERM128_3) \ + TEST_128 (FUNC, PERM128_4) + +DO_ALL_TEST4(PERMUTE4) +DO_ALL_TEST8(PERMUTE8) +DO_ALL_TEST16(PERMUTE16) +DO_ALL_TEST32(PERMUTE32) +DO_ALL_TEST64(PERMUTE64) +DO_ALL_TEST128(PERMUTE128) diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-nearbyint-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-nearbyint-1.c index 89af160112c9..bb62ce2ef8a8 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-nearbyint-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-nearbyint-1.c @@ -54,5 +54,5 @@ DEF_OP_V (nearbyint, 512, double, __builtin_nearbyint) /* { dg-final { scan-tree-dump-not "4096,4096" "optimized" } } */ /* { dg-final { scan-assembler-times {vfcvt\.x\.f\.v\s+v[0-9]+,\s*v[0-9]+,\s*v0\.t} 30 } } */ /* { dg-final { scan-assembler-times {vfcvt\.f\.x\.v\s+v[0-9]+,\s*v[0-9]+,\s*v0\.t} 30 } } */ -/* { dg-final { scan-assembler-times {frflags\s+[atx][0-9]+} 32 } } */ -/* { dg-final { scan-assembler-times {fsflags\s+[atx][0-9]+} 32 } } */ +/* { dg-final { scan-assembler-times {frflags\s+[atx][0-9]+} 30 } } */ +/* { dg-final { scan-assembler-times {fsflags\s+[atx][0-9]+} 30 } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-1-f16.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-1-f16.c index 696b75080659..8c0f0361ff34 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-1-f16.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-1-f16.c @@ -27,6 +27,9 @@ DEF_VF_BINOP_CASE_2_WRAP (_Float16, MAX_FUNC_0_WRAP (_Float16), max) DEF_VF_BINOP_CASE_2_WRAP (_Float16, MAX_FUNC_1_WRAP (_Float16), max) DEF_VF_BINOP_WIDEN_CASE_0 (_Float16, float, *, mul) DEF_VF_BINOP_WIDEN_CASE_0 (_Float16, float, +, add) +DEF_VF_BINOP_WIDEN_CASE_0 (_Float16, float, -, sub) +DEF_VF_BINOP_WIDEN_CASE_2 (_Float16, float, +, add) +DEF_VF_BINOP_WIDEN_CASE_2 (_Float16, float, -, sub) /* { dg-final { scan-assembler-times {vfmadd.vf} 1 } } */ /* { dg-final { scan-assembler-times {vfmsub.vf} 1 } } */ @@ -49,3 +52,6 @@ DEF_VF_BINOP_WIDEN_CASE_0 (_Float16, float, +, add) /* { dg-final { scan-assembler-times {vfmax.vf} 2 } } */ /* { dg-final { scan-assembler-times {vfwmul.vf} 1 } } */ /* { dg-final { scan-assembler-times {vfwadd.vf} 1 } } */ +/* { dg-final { scan-assembler-times {vfwsub.vf} 1 } } */ +/* { dg-final { scan-assembler-times {vfwadd.wf} 1 } } */ +/* { dg-final { scan-assembler-times {vfwsub.wf} 1 } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-1-f32.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-1-f32.c index 7f746d8eb6aa..7e08e5b09174 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-1-f32.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-1-f32.c @@ -27,6 +27,9 @@ DEF_VF_BINOP_CASE_2_WRAP (float, MAX_FUNC_0_WRAP (float), max) DEF_VF_BINOP_CASE_2_WRAP (float, MAX_FUNC_1_WRAP (float), max) DEF_VF_BINOP_WIDEN_CASE_0 (float, double, *, mul) DEF_VF_BINOP_WIDEN_CASE_0 (float, double, +, add) +DEF_VF_BINOP_WIDEN_CASE_0 (float, double, -, sub) +DEF_VF_BINOP_WIDEN_CASE_2 (float, double, +, add) +DEF_VF_BINOP_WIDEN_CASE_2 (float, double, -, sub) /* { dg-final { scan-assembler-times {vfmadd.vf} 1 } } */ /* { dg-final { scan-assembler-times {vfmsub.vf} 1 } } */ @@ -49,3 +52,6 @@ DEF_VF_BINOP_WIDEN_CASE_0 (float, double, +, add) /* { dg-final { scan-assembler-times {vfmax.vf} 2 } } */ /* { dg-final { scan-assembler-times {vfwmul.vf} 1 } } */ /* { dg-final { scan-assembler-times {vfwadd.vf} 1 } } */ +/* { dg-final { scan-assembler-times {vfwsub.vf} 1 } } */ +/* { dg-final { scan-assembler-times {vfwadd.wf} 1 } } */ +/* { dg-final { scan-assembler-times {vfwsub.wf} 1 } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-2-f16.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-2-f16.c index 0ecfb6209e62..ae298b65cad2 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-2-f16.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-2-f16.c @@ -24,4 +24,7 @@ /* { dg-final { scan-assembler-not {vfmax.vf} } } */ /* { dg-final { scan-assembler-not {vfwmul.vf} } } */ /* { dg-final { scan-assembler-not {vfwadd.vf} } } */ -/* { dg-final { scan-assembler-times {fcvt.s.h} 6 } } */ +/* { dg-final { scan-assembler-not {vfwsub.vf} } } */ +/* { dg-final { scan-assembler-not {vfwadd.wf} } } */ +/* { dg-final { scan-assembler-not {vfwsub.wf} } } */ +/* { dg-final { scan-assembler-times {fcvt.s.h} 9 } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-2-f32.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-2-f32.c index d48777cf4445..60f258785341 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-2-f32.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-2-f32.c @@ -24,4 +24,7 @@ /* { dg-final { scan-assembler-not {vfmax.vf} } } */ /* { dg-final { scan-assembler-not {vfwmul.vf} } } */ /* { dg-final { scan-assembler-not {vfwadd.vf} } } */ -/* { dg-final { scan-assembler-times {fcvt.d.s} 6 } } */ +/* { dg-final { scan-assembler-not {vfwsub.vf} } } */ +/* { dg-final { scan-assembler-not {vfwadd.wf} } } */ +/* { dg-final { scan-assembler-not {vfwsub.wf} } } */ +/* { dg-final { scan-assembler-times {fcvt.d.s} 9 } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-3-f16.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-3-f16.c index 8e670a3c13ac..e1e7407d6c18 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-3-f16.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-3-f16.c @@ -31,6 +31,9 @@ DEF_VF_BINOP_CASE_3_WRAP (_Float16, MAX_FUNC_1_WRAP (_Float16), max, VF_BINOP_FUNC_BODY_X128) DEF_VF_BINOP_WIDEN_CASE_1 (_Float16, float, *, mul) DEF_VF_BINOP_WIDEN_CASE_1 (_Float16, float, +, add) +DEF_VF_BINOP_WIDEN_CASE_1 (_Float16, float, -, sub) +DEF_VF_BINOP_WIDEN_CASE_3 (_Float16, float, +, add) +DEF_VF_BINOP_WIDEN_CASE_3 (_Float16, float, -, sub) /* { dg-final { scan-assembler {vfmadd.vf} } } */ /* { dg-final { scan-assembler {vfmsub.vf} } } */ @@ -53,3 +56,6 @@ DEF_VF_BINOP_WIDEN_CASE_1 (_Float16, float, +, add) /* { dg-final { scan-assembler {vfmax.vf} } } */ /* { dg-final { scan-assembler {vfwmul.vf} } } */ /* { dg-final { scan-assembler {vfwadd.vf} } } */ +/* { dg-final { scan-assembler {vfwsub.vf} } } */ +/* { dg-final { scan-assembler {vfwadd.wf} } } */ +/* { dg-final { scan-assembler {vfwsub.wf} } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-3-f32.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-3-f32.c index 3c2e7f510b02..36e415f5849f 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-3-f32.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-3-f32.c @@ -31,6 +31,9 @@ DEF_VF_BINOP_CASE_3_WRAP (float, MAX_FUNC_1_WRAP (float), max, VF_BINOP_FUNC_BODY_X128) DEF_VF_BINOP_WIDEN_CASE_1 (float, double, *, mul) DEF_VF_BINOP_WIDEN_CASE_1 (float, double, +, add) +DEF_VF_BINOP_WIDEN_CASE_1 (float, double, -, sub) +DEF_VF_BINOP_WIDEN_CASE_3 (float, double, +, add) +DEF_VF_BINOP_WIDEN_CASE_3 (float, double, -, sub) /* { dg-final { scan-assembler {vfmadd.vf} } } */ /* { dg-final { scan-assembler {vfmsub.vf} } } */ @@ -53,3 +56,6 @@ DEF_VF_BINOP_WIDEN_CASE_1 (float, double, +, add) /* { dg-final { scan-assembler {vfmax.vf} } } */ /* { dg-final { scan-assembler {vfwmul.vf} } } */ /* { dg-final { scan-assembler {vfwadd.vf} } } */ +/* { dg-final { scan-assembler {vfwsub.vf} } } */ +/* { dg-final { scan-assembler {vfwadd.wf} } } */ +/* { dg-final { scan-assembler {vfwsub.wf} } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-4-f16.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-4-f16.c index 069e82a27a5d..b3a4c7aad6a3 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-4-f16.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-4-f16.c @@ -24,4 +24,7 @@ /* { dg-final { scan-assembler-not {vfmax.vf} } } */ /* { dg-final { scan-assembler-not {vfwmul.vf} } } */ /* { dg-final { scan-assembler-not {vfwadd.vf} } } */ +/* { dg-final { scan-assembler-not {vfwsub.vf} } } */ +/* { dg-final { scan-assembler-not {vfwadd.wf} } } */ +/* { dg-final { scan-assembler-not {vfwsub.wf} } } */ /* { dg-final { scan-assembler {fcvt.s.h} } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-4-f32.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-4-f32.c index 62e7aef82dd9..b19ffd82ba86 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-4-f32.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf-4-f32.c @@ -24,4 +24,7 @@ /* { dg-final { scan-assembler-not {vfmax.vf} } } */ /* { dg-final { scan-assembler-not {vfwmul.vf} } } */ /* { dg-final { scan-assembler-not {vfwadd.vf} } } */ +/* { dg-final { scan-assembler-not {vfwsub.vf} } } */ +/* { dg-final { scan-assembler-not {vfwadd.wf} } } */ +/* { dg-final { scan-assembler-not {vfwsub.wf} } } */ /* { dg-final { scan-assembler {fcvt.d.s} } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_binop.h b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_binop.h index 1d97ea4f4828..4a3615d2d6f1 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_binop.h +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_binop.h @@ -37,7 +37,7 @@ unsigned n) \ { \ for (unsigned i = 0; i < n; i++) \ - out[i] = (T2) f OP (T2) in[i]; \ + out[i] = (T2) in[i] OP (T2) f; \ } #define DEF_VF_BINOP_WIDEN_CASE_0_WRAP(T1, T2, OP, NAME) \ DEF_VF_BINOP_WIDEN_CASE_0 (T1, T2, OP, NAME) @@ -246,10 +246,40 @@ DEF_MAX_1 (double) { \ for (int i = 0; i < n; i++) \ { \ - dst[i] = (TYPE2) * a OP (TYPE2) b[i]; \ - dst2[i] = (TYPE2) * a2 OP (TYPE2) b[i]; \ - dst3[i] = (TYPE2) * a2 OP (TYPE2) a[i]; \ - dst4[i] = (TYPE2) * a OP (TYPE2) b2[i]; \ + dst[i] = (TYPE2) b[i] OP (TYPE2) * a; \ + dst2[i] = (TYPE2) b[i] OP (TYPE2) * a2; \ + dst3[i] = (TYPE2) a[i] OP (TYPE2) * a2; \ + dst4[i] = (TYPE2) b2[i] OP (TYPE2) * a; \ + } \ + } + +#define DEF_VF_BINOP_WIDEN_CASE_2(T1, T2, OP, NAME) \ + void test_vf_binop_widen_##NAME##_##T1##_case_2 (T2 *restrict out, \ + T2 *restrict in, T1 f, \ + unsigned n) \ + { \ + for (unsigned i = 0; i < n; i++) \ + out[i] = in[i] OP (T2) f; \ + } +#define DEF_VF_BINOP_WIDEN_CASE_2_WRAP(T1, T2, OP, NAME) \ + DEF_VF_BINOP_WIDEN_CASE_2 (T1, T2, OP, NAME) +#define RUN_VF_BINOP_WIDEN_CASE_2(T1, T2, NAME, out, in, f, n) \ + test_vf_binop_widen_##NAME##_##T1##_case_2 (out, in, f, n) +#define RUN_VF_BINOP_WIDEN_CASE_2_WRAP(T1, T2, NAME, out, in, f, n) \ + RUN_VF_BINOP_WIDEN_CASE_2 (T1, T2, NAME, out, in, f, n) + +#define DEF_VF_BINOP_WIDEN_CASE_3(TYPE1, TYPE2, OP, NAME) \ + void test_vf_binop_widen_##NAME##_##TYPE1##_##TYPE2##_case_3 ( \ + TYPE2 *__restrict dst, TYPE2 *__restrict dst2, TYPE2 *__restrict dst3, \ + TYPE2 *__restrict dst4, TYPE1 *__restrict a, TYPE2 *__restrict b, \ + TYPE1 *__restrict a2, TYPE2 *__restrict b2, int n) \ + { \ + for (int i = 0; i < n; i++) \ + { \ + dst[i] = b[i] OP (TYPE2) * a; \ + dst2[i] = b[i] OP (TYPE2) * a2; \ + dst3[i] = b2[i] OP (TYPE2) * a2; \ + dst4[i] = b2[i] OP (TYPE2) * a; \ } \ } diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_binop_widen_run.h b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_binop_widen_run.h index 929b2dec85da..1c9dc8c5e7b4 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_binop_widen_run.h +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_binop_widen_run.h @@ -5,26 +5,30 @@ #define N 512 +#ifdef SINGLE +#define TIN T2 +#else +#define TIN T1 +#endif + int main () { T1 f; - T1 in[N]; + TIN in[N]; T2 out[N]; - T2 out2[N]; f = LIMIT % 8723; for (int i = 0; i < N; i++) { in[i] = LIMIT + i & 1964; out[i] = LIMIT + i & 628; - out2[i] = LIMIT + i & 628; asm volatile ("" ::: "memory"); } TEST_RUN (T1, T2, NAME, out, in, f, N); for (int i = 0; i < N; i++) - assert (out[i] == ((T2) f OP (T2) in[i])); + assert (out[i] == ((T2) in[i] OP (T2) f)); return 0; } diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwadd-run-2-f16.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwadd-run-2-f16.c new file mode 100644 index 000000000000..d5400cc4a670 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwadd-run-2-f16.c @@ -0,0 +1,21 @@ +/* { dg-do run { target { riscv_v } } } */ +/* { dg-require-effective-target riscv_v_ok } */ +/* { dg-require-effective-target riscv_zvfh_ok } */ +/* { dg-add-options "riscv_v" } */ +/* { dg-add-options "riscv_zvfh" } */ +/* { dg-additional-options "--param=fpr2vr-cost=0" } */ + +#include "vf_binop.h" + +#define T1 _Float16 +#define T2 float +#define NAME add +#define OP + + +DEF_VF_BINOP_WIDEN_CASE_2_WRAP (T1, T2, OP, NAME) + +#define TEST_RUN(T1, T2, NAME, out, in, f, n) RUN_VF_BINOP_WIDEN_CASE_2_WRAP(T1, T2, NAME, out, in, f, n) +#define LIMIT -32768 +#define SINGLE + +#include "vf_binop_widen_run.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwadd-run-2-f32.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwadd-run-2-f32.c new file mode 100644 index 000000000000..630a153ff144 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwadd-run-2-f32.c @@ -0,0 +1,17 @@ +/* { dg-do run { target { riscv_v } } } */ +/* { dg-additional-options "--param=fpr2vr-cost=0" } */ + +#include "vf_binop.h" + +#define T1 float +#define T2 double +#define NAME add +#define OP + + +DEF_VF_BINOP_WIDEN_CASE_2_WRAP (T1, T2, OP, NAME) + +#define TEST_RUN(T1, T2, NAME, out, in, f, n) RUN_VF_BINOP_WIDEN_CASE_2_WRAP(T1, T2, NAME, out, in, f, n) +#define LIMIT -2147483648 +#define SINGLE + +#include "vf_binop_widen_run.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwsub-run-1-f16.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwsub-run-1-f16.c new file mode 100644 index 000000000000..6269073b9409 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwsub-run-1-f16.c @@ -0,0 +1,20 @@ +/* { dg-do run { target { riscv_v } } } */ +/* { dg-require-effective-target riscv_v_ok } */ +/* { dg-require-effective-target riscv_zvfh_ok } */ +/* { dg-add-options "riscv_v" } */ +/* { dg-add-options "riscv_zvfh" } */ +/* { dg-additional-options "--param=fpr2vr-cost=0" } */ + +#include "vf_binop.h" + +#define T1 _Float16 +#define T2 float +#define NAME sub +#define OP - + +DEF_VF_BINOP_WIDEN_CASE_0_WRAP (T1, T2, OP, NAME) + +#define TEST_RUN(T1, T2, NAME, out, in, f, n) RUN_VF_BINOP_WIDEN_CASE_0_WRAP(T1, T2, NAME, out, in, f, n) +#define LIMIT -32768 + +#include "vf_binop_widen_run.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwsub-run-1-f32.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwsub-run-1-f32.c new file mode 100644 index 000000000000..9e23db1f8af6 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwsub-run-1-f32.c @@ -0,0 +1,16 @@ +/* { dg-do run { target { riscv_v } } } */ +/* { dg-additional-options "--param=fpr2vr-cost=0" } */ + +#include "vf_binop.h" + +#define T1 float +#define T2 double +#define NAME sub +#define OP - + +DEF_VF_BINOP_WIDEN_CASE_0_WRAP (T1, T2, OP, NAME) + +#define TEST_RUN(T1, T2, NAME, out, in, f, n) RUN_VF_BINOP_WIDEN_CASE_0_WRAP(T1, T2, NAME, out, in, f, n) +#define LIMIT -2147483648 + +#include "vf_binop_widen_run.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwsub-run-2-f16.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwsub-run-2-f16.c new file mode 100644 index 000000000000..ea1c06e76383 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwsub-run-2-f16.c @@ -0,0 +1,21 @@ +/* { dg-do run { target { riscv_v } } } */ +/* { dg-require-effective-target riscv_v_ok } */ +/* { dg-require-effective-target riscv_zvfh_ok } */ +/* { dg-add-options "riscv_v" } */ +/* { dg-add-options "riscv_zvfh" } */ +/* { dg-additional-options "--param=fpr2vr-cost=0" } */ + +#include "vf_binop.h" + +#define T1 _Float16 +#define T2 float +#define NAME sub +#define OP - + +DEF_VF_BINOP_WIDEN_CASE_2_WRAP (T1, T2, OP, NAME) + +#define TEST_RUN(T1, T2, NAME, out, in, f, n) RUN_VF_BINOP_WIDEN_CASE_2_WRAP(T1, T2, NAME, out, in, f, n) +#define LIMIT -32768 +#define SINGLE + +#include "vf_binop_widen_run.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwsub-run-2-f32.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwsub-run-2-f32.c new file mode 100644 index 000000000000..813f02094b34 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwsub-run-2-f32.c @@ -0,0 +1,17 @@ +/* { dg-do run { target { riscv_v } } } */ +/* { dg-additional-options "--param=fpr2vr-cost=0" } */ + +#include "vf_binop.h" + +#define T1 float +#define T2 double +#define NAME sub +#define OP - + +DEF_VF_BINOP_WIDEN_CASE_2_WRAP (T1, T2, OP, NAME) + +#define TEST_RUN(T1, T2, NAME, out, in, f, n) RUN_VF_BINOP_WIDEN_CASE_2_WRAP(T1, T2, NAME, out, in, f, n) +#define LIMIT -2147483648 +#define SINGLE + +#include "vf_binop_widen_run.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u16.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u16.c index d191097e2bb3..76ef2d3f0206 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u16.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u16.c @@ -3,13 +3,16 @@ #include "vx_binary.h" #include "vx_ternary.h" +#include "vx_widen.h" #define T uint16_t +#define NT uint8_t TEST_BINARY_VX_UNSIGNED_0(T) TEST_TERNARY_VX_UNSIGNED_0(T) +TEST_WIDEN_BINARY_VX_UNSIGNED(T, NT) -/* { dg-final { scan-assembler-times {vadd.vx} 1 } } */ +/* { dg-final { scan-assembler-times {vadd.vx} 2 } } */ /* { dg-final { scan-assembler-times {vsub.vx} 1 } } */ /* { dg-final { scan-assembler-times {vrsub.vx} 1 } } */ /* { dg-final { scan-assembler-times {vand.vx} 1 } } */ @@ -26,3 +29,7 @@ TEST_TERNARY_VX_UNSIGNED_0(T) /* { dg-final { scan-assembler-times {vnmsac.vx} 1 } } */ /* { dg-final { scan-assembler-times {vmadd.vx} 1 } } */ /* { dg-final { scan-assembler-times {vnmsub.vx} 1 } } */ +/* { dg-final { scan-assembler-not {vwaddu.vx} } } */ +/* { dg-final { scan-assembler-not {vwsubu.vx} } } */ +/* { dg-final { scan-assembler-not {vwmulu.vx} } } */ +/* { dg-final { scan-assembler-not {vwaddu.wx} } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u32.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u32.c index e0b4b732c79c..55fa57dec35d 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u32.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u32.c @@ -3,13 +3,16 @@ #include "vx_binary.h" #include "vx_ternary.h" +#include "vx_widen.h" #define T uint32_t +#define NT uint16_t TEST_BINARY_VX_UNSIGNED_0(T) TEST_TERNARY_VX_UNSIGNED_0(T) +TEST_WIDEN_BINARY_VX_UNSIGNED(T, NT) -/* { dg-final { scan-assembler-times {vadd.vx} 1 } } */ +/* { dg-final { scan-assembler-times {vadd.vx} 2 } } */ /* { dg-final { scan-assembler-times {vsub.vx} 1 } } */ /* { dg-final { scan-assembler-times {vrsub.vx} 1 } } */ /* { dg-final { scan-assembler-times {vand.vx} 1 } } */ @@ -26,3 +29,7 @@ TEST_TERNARY_VX_UNSIGNED_0(T) /* { dg-final { scan-assembler-times {vnmsac.vx} 1 } } */ /* { dg-final { scan-assembler-times {vmadd.vx} 1 } } */ /* { dg-final { scan-assembler-times {vnmsub.vx} 1 } } */ +/* { dg-final { scan-assembler-not {vwaddu.vx} } } */ +/* { dg-final { scan-assembler-not {vwsubu.vx} } } */ +/* { dg-final { scan-assembler-not {vwmulu.vx} } } */ +/* { dg-final { scan-assembler-not {vwaddu.wx} } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u64.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u64.c index 65528400b5b4..d5176834494e 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u64.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u64.c @@ -3,11 +3,14 @@ #include "vx_binary.h" #include "vx_ternary.h" +#include "vx_widen.h" #define T uint64_t +#define NT uint32_t TEST_BINARY_VX_UNSIGNED_0(T) TEST_TERNARY_VX_UNSIGNED_0(T) +TEST_WIDEN_BINARY_VX_UNSIGNED(T, NT) /* { dg-final { scan-assembler-times {vadd.vx} 1 } } */ /* { dg-final { scan-assembler-times {vsub.vx} 1 } } */ @@ -29,3 +32,7 @@ TEST_TERNARY_VX_UNSIGNED_0(T) /* { dg-final { scan-assembler-times {vnmsac.vx} 1 } } */ /* { dg-final { scan-assembler-times {vmadd.vx} 1 } } */ /* { dg-final { scan-assembler-times {vnmsub.vx} 1 } } */ +/* { dg-final { scan-assembler-times {vwaddu.vx} 1 } } */ +/* { dg-final { scan-assembler-times {vwsubu.vx} 1 } } */ +/* { dg-final { scan-assembler-times {vwmulu.vx} 1 } } */ +/* { dg-final { scan-assembler-times {vwaddu.wx} 1 } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u16.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u16.c index 23479d97b650..a234505ce81c 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u16.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u16.c @@ -3,11 +3,14 @@ #include "vx_binary.h" #include "vx_ternary.h" +#include "vx_widen.h" #define T uint16_t +#define NT uint8_t TEST_BINARY_VX_UNSIGNED_0(T) TEST_TERNARY_VX_UNSIGNED_0(T) +TEST_WIDEN_BINARY_VX_UNSIGNED(T, NT) /* { dg-final { scan-assembler-not {vadd.vx} } } */ /* { dg-final { scan-assembler-not {vsub.vx} } } */ @@ -26,3 +29,7 @@ TEST_TERNARY_VX_UNSIGNED_0(T) /* { dg-final { scan-assembler-not {vnmsac.vx} } } */ /* { dg-final { scan-assembler-not {vmadd.vx} } } */ /* { dg-final { scan-assembler-not {vnmsub.vx} } } */ +/* { dg-final { scan-assembler-not {vwaddu.vx} } } */ +/* { dg-final { scan-assembler-not {vwsubu.vx} } } */ +/* { dg-final { scan-assembler-not {vwmulu.vx} } } */ +/* { dg-final { scan-assembler-not {vwaddu.wx} } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u32.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u32.c index 8c41bd85686b..a46c874d0a44 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u32.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u32.c @@ -3,11 +3,14 @@ #include "vx_binary.h" #include "vx_ternary.h" +#include "vx_widen.h" #define T uint32_t +#define NT uint16_t TEST_BINARY_VX_UNSIGNED_0(T) TEST_TERNARY_VX_UNSIGNED_0(T) +TEST_WIDEN_BINARY_VX_UNSIGNED(T, NT) /* { dg-final { scan-assembler-not {vadd.vx} } } */ /* { dg-final { scan-assembler-not {vsub.vx} } } */ @@ -26,3 +29,7 @@ TEST_TERNARY_VX_UNSIGNED_0(T) /* { dg-final { scan-assembler-not {vnmsac.vx} } } */ /* { dg-final { scan-assembler-not {vmadd.vx} } } */ /* { dg-final { scan-assembler-not {vnmsub.vx} } } */ +/* { dg-final { scan-assembler-not {vwaddu.vx} } } */ +/* { dg-final { scan-assembler-not {vwsubu.vx} } } */ +/* { dg-final { scan-assembler-not {vwmulu.vx} } } */ +/* { dg-final { scan-assembler-not {vwaddu.wx} } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u64.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u64.c index abe16cd7b509..94ce774fc2aa 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u64.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u64.c @@ -3,11 +3,14 @@ #include "vx_binary.h" #include "vx_ternary.h" +#include "vx_widen.h" #define T uint64_t +#define NT uint32_t TEST_BINARY_VX_UNSIGNED_0(T) TEST_TERNARY_VX_UNSIGNED_0(T) +TEST_WIDEN_BINARY_VX_UNSIGNED(T, NT) /* { dg-final { scan-assembler-not {vadd.vx} } } */ /* { dg-final { scan-assembler-not {vsub.vx} } } */ @@ -26,3 +29,7 @@ TEST_TERNARY_VX_UNSIGNED_0(T) /* { dg-final { scan-assembler-not {vnmsac.vx} } } */ /* { dg-final { scan-assembler-not {vmadd.vx} } } */ /* { dg-final { scan-assembler-not {vnmsub.vx} } } */ +/* { dg-final { scan-assembler-not {vwaddu.vx} } } */ +/* { dg-final { scan-assembler-not {vwsubu.vx} } } */ +/* { dg-final { scan-assembler-not {vwmulu.vx} } } */ +/* { dg-final { scan-assembler-not {vwaddu.wx} } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u16.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u16.c index f232d6a97bd7..a1278cec61d4 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u16.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u16.c @@ -3,11 +3,14 @@ #include "vx_binary.h" #include "vx_ternary.h" +#include "vx_widen.h" #define T uint16_t +#define NT uint8_t TEST_BINARY_VX_UNSIGNED_0(T) TEST_TERNARY_VX_UNSIGNED_0(T) +TEST_WIDEN_BINARY_VX_UNSIGNED(T, NT) /* { dg-final { scan-assembler-not {vadd.vx} } } */ /* { dg-final { scan-assembler-not {vsub.vx} } } */ @@ -26,3 +29,7 @@ TEST_TERNARY_VX_UNSIGNED_0(T) /* { dg-final { scan-assembler-not {vnmsac.vx} } } */ /* { dg-final { scan-assembler-not {vmadd.vx} } } */ /* { dg-final { scan-assembler-not {vnmsub.vx} } } */ +/* { dg-final { scan-assembler-not {vwaddu.vx} } } */ +/* { dg-final { scan-assembler-not {vwsubu.vx} } } */ +/* { dg-final { scan-assembler-not {vwmulu.vx} } } */ +/* { dg-final { scan-assembler-not {vwaddu.wx} } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u32.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u32.c index 24e187ce2b05..910fa6e31580 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u32.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u32.c @@ -3,11 +3,14 @@ #include "vx_binary.h" #include "vx_ternary.h" +#include "vx_widen.h" #define T uint32_t +#define NT uint32_t TEST_BINARY_VX_UNSIGNED_0(T) TEST_TERNARY_VX_UNSIGNED_0(T) +TEST_WIDEN_BINARY_VX_UNSIGNED(T, NT) /* { dg-final { scan-assembler-not {vadd.vx} } } */ /* { dg-final { scan-assembler-not {vsub.vx} } } */ @@ -26,3 +29,7 @@ TEST_TERNARY_VX_UNSIGNED_0(T) /* { dg-final { scan-assembler-not {vnmsac.vx} } } */ /* { dg-final { scan-assembler-not {vmadd.vx} } } */ /* { dg-final { scan-assembler-not {vnmsub.vx} } } */ +/* { dg-final { scan-assembler-not {vwaddu.vx} } } */ +/* { dg-final { scan-assembler-not {vwsubu.vx} } } */ +/* { dg-final { scan-assembler-not {vwmulu.vx} } } */ +/* { dg-final { scan-assembler-not {vwaddu.wx} } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u64.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u64.c index 977aa463232e..9ce0211603ec 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u64.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u64.c @@ -3,11 +3,14 @@ #include "vx_binary.h" #include "vx_ternary.h" +#include "vx_widen.h" #define T uint64_t +#define NT uint32_t TEST_BINARY_VX_UNSIGNED_0(T) TEST_TERNARY_VX_UNSIGNED_0(T) +TEST_WIDEN_BINARY_VX_UNSIGNED(T, NT) /* { dg-final { scan-assembler-not {vadd.vx} } } */ /* { dg-final { scan-assembler-not {vsub.vx} } } */ @@ -26,3 +29,7 @@ TEST_TERNARY_VX_UNSIGNED_0(T) /* { dg-final { scan-assembler-not {vnmsac.vx} } } */ /* { dg-final { scan-assembler-not {vmadd.vx} } } */ /* { dg-final { scan-assembler-not {vnmsub.vx} } } */ +/* { dg-final { scan-assembler-not {vwaddu.vx} } } */ +/* { dg-final { scan-assembler-not {vwsubu.vx} } } */ +/* { dg-final { scan-assembler-not {vwmulu.vx} } } */ +/* { dg-final { scan-assembler-not {vwaddu.wx} } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vwaddu-run-1-u64.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vwaddu-run-1-u64.c new file mode 100644 index 000000000000..e7a75d56f774 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vwaddu-run-1-u64.c @@ -0,0 +1,18 @@ +/* { dg-do run { target { riscv_v } } } */ +/* { dg-additional-options "-std=c99 --param=gpr2vr-cost=0" } */ + +#include "vx_widen.h" +#include "vx_widen_data.h" + +#define WT uint64_t +#define NT uint32_t +#define NAME add +#define TEST_DATA DEF_BINARY_WIDEN_STRUCT_0_VAR_WRAP(WT, NT, NAME) +#define DATA_TYPE DEF_BINARY_WIDEN_STRUCT_0_TYPE_WRAP(WT, NT, NAME) + +DEF_VX_WIDEN_BINARY_CASE_0_WRAP(WT, NT, +, NAME) + +#define TEST_RUN(WT, NT, NAME, vd, vs2, rs1, N) \ + RUN_VX_WIDEN_BINARY_CASE_0_WRAP(WT, NT, NAME, vd, vs2, rs1, N) + +#include "vx_widen_vx_run.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vwmulu-run-1-u64.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vwmulu-run-1-u64.c new file mode 100644 index 000000000000..11c11eded433 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vwmulu-run-1-u64.c @@ -0,0 +1,18 @@ +/* { dg-do run { target { riscv_v } } } */ +/* { dg-additional-options "-std=c99 --param=gpr2vr-cost=0" } */ + +#include "vx_widen.h" +#include "vx_widen_data.h" + +#define WT uint64_t +#define NT uint32_t +#define NAME mul +#define TEST_DATA DEF_BINARY_WIDEN_STRUCT_0_VAR_WRAP(WT, NT, NAME) +#define DATA_TYPE DEF_BINARY_WIDEN_STRUCT_0_TYPE_WRAP(WT, NT, NAME) + +DEF_VX_WIDEN_BINARY_CASE_0_WRAP(WT, NT, *, NAME) + +#define TEST_RUN(WT, NT, NAME, vd, vs2, rs1, N) \ + RUN_VX_WIDEN_BINARY_CASE_0_WRAP(WT, NT, NAME, vd, vs2, rs1, N) + +#include "vx_widen_vx_run.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vwsubu-run-1-u64.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vwsubu-run-1-u64.c new file mode 100644 index 000000000000..f94281002eaa --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vwsubu-run-1-u64.c @@ -0,0 +1,18 @@ +/* { dg-do run { target { riscv_v } } } */ +/* { dg-additional-options "-std=c99 --param=gpr2vr-cost=0" } */ + +#include "vx_widen.h" +#include "vx_widen_data.h" + +#define WT uint64_t +#define NT uint32_t +#define NAME sub +#define TEST_DATA DEF_BINARY_WIDEN_STRUCT_0_VAR_WRAP(WT, NT, NAME) +#define DATA_TYPE DEF_BINARY_WIDEN_STRUCT_0_TYPE_WRAP(WT, NT, NAME) + +DEF_VX_WIDEN_BINARY_CASE_0_WRAP(WT, NT, -, NAME) + +#define TEST_RUN(WT, NT, NAME, vd, vs2, rs1, N) \ + RUN_VX_WIDEN_BINARY_CASE_0_WRAP(WT, NT, NAME, vd, vs2, rs1, N) + +#include "vx_widen_vx_run.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_widen.h b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_widen.h new file mode 100644 index 000000000000..03fba3c2a0c4 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_widen.h @@ -0,0 +1,54 @@ +#ifndef HAVE_DEFINED_VX_VF_BINARY_WIDEN_H +#define HAVE_DEFINED_VX_VF_BINARY_WIDEN_H + +#include + +#undef HAS_INT128 + +#if __riscv_xlen == 64 +#define HAS_INT128 +typedef unsigned __int128 uint128_t; +typedef signed __int128 int128_t; +#endif + +#define DEF_VX_WIDEN_BINARY_CASE_0(WT, NT, OP, NAME) \ +void \ +test_vx_widen_binary_##NAME##_##WT##_##NT##_case_0 (WT * restrict vd, \ + NT * restrict vs2, \ + NT rs1, unsigned n) \ +{ \ + for (unsigned i = 0; i < n; i++) \ + vd[i] = (WT)vs2[i] OP (WT)rs1; \ +} + +#define DEF_VX_WIDEN_BINARY_CASE_0_WRAP(WT, NT, OP, NAME) \ + DEF_VX_WIDEN_BINARY_CASE_0(WT, NT, OP, NAME) +#define RUN_VX_WIDEN_BINARY_CASE_0(WT, NT, NAME, vd, vs2, rs1, n) \ + test_vx_widen_binary_##NAME##_##WT##_##NT##_case_0(vd, vs2, rs1, n) +#define RUN_VX_WIDEN_BINARY_CASE_0_WRAP(WT, NT, NAME, vd, vs2, rs1, n) \ + RUN_VX_WIDEN_BINARY_CASE_0(WT, NT, NAME, vd, vs2, rs1, n) + +#define DEF_VX_WIDEN_BINARY_CASE_1(WT, NT, OP, NAME) \ +void \ +test_vx_widen_binary_##NAME##_##WT##_##NT##_case_1 (WT * restrict vd, \ + WT * restrict vs2, \ + NT rs1, unsigned n) \ +{ \ + for (unsigned i = 0; i < n; i++) \ + vd[i] = vs2[i] OP (WT)rs1; \ +} + +#define DEF_VX_WIDEN_BINARY_CASE_1_WRAP(WT, NT, OP, NAME) \ + DEF_VX_WIDEN_BINARY_CASE_1(WT, NT, OP, NAME) +#define RUN_VX_WIDEN_BINARY_CASE_1(WT, NT, NAME, vd, vs2, rs1, n) \ + test_vx_widen_binary_##NAME##_##WT##_##NT##_case_1(vd, vs2, rs1, n) +#define RUN_VX_WIDEN_BINARY_CASE_1_WRAP(WT, NT, NAME, vd, vs2, rs1, n) \ + RUN_VX_WIDEN_BINARY_CASE_1(WT, NT, NAME, vd, vs2, rs1, n) + +#define TEST_WIDEN_BINARY_VX_UNSIGNED(WT, NT) \ + DEF_VX_WIDEN_BINARY_CASE_0_WRAP(WT, NT, +, add) \ + DEF_VX_WIDEN_BINARY_CASE_0_WRAP(WT, NT, -, sub) \ + DEF_VX_WIDEN_BINARY_CASE_0_WRAP(WT, NT, *, mul) \ + DEF_VX_WIDEN_BINARY_CASE_1_WRAP(WT, NT, +, add) \ + +#endif diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_widen_data.h b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_widen_data.h new file mode 100644 index 000000000000..faf46a81e6ab --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_widen_data.h @@ -0,0 +1,232 @@ +#ifndef HAVE_DEFINED_VX_WIDEN_DATA_H +#define HAVE_DEFINED_VX_WIDEN_DATA_H + +#define N 16 + +#define DEF_BINARY_WIDEN_STRUCT_0_NAME(WT, NT, NAME) \ + binary_widen_##WT##_##NT##_##NAME##_s_0 +#define DEF_BINARY_WIDEN_STRUCT_0_NAME_WRAP(WT, NT, NAME) \ + DEF_BINARY_WIDEN_STRUCT_0_NAME(WT, NT, NAME) + +#define DEF_BINARY_WIDEN_STRUCT_0_TYPE(WT, NT, NAME) \ + struct DEF_BINARY_WIDEN_STRUCT_0_NAME_WRAP(WT, NT, NAME) +#define DEF_BINARY_WIDEN_STRUCT_0_TYPE_WRAP(WT, NT, NAME) \ + DEF_BINARY_WIDEN_STRUCT_0_TYPE(WT, NT, NAME) + +#define DEF_BINARY_WIDEN_STRUCT_0_VAR(WT, NT, NAME) \ + binary_widen_##WT##_##NT##_##NAME##_data_0 +#define DEF_BINARY_WIDEN_STRUCT_0_VAR_WRAP(WT, NT, NAME) \ + DEF_BINARY_WIDEN_STRUCT_0_VAR(WT, NT, NAME) + +#define DEF_BINARY_WIDEN_STRUCT_0_DECL(WT, NT, NAME) \ + DEF_BINARY_WIDEN_STRUCT_0_TYPE_WRAP(WT, NT, NAME) \ + DEF_BINARY_WIDEN_STRUCT_0_VAR_WRAP(WT, NT, NAME) +#define DEF_BINARY_WIDEN_STRUCT_0_DECL_WRAP(WT, NT, NAME) \ + DEF_BINARY_WIDEN_STRUCT_0_DECL(WT, NT, NAME) + +#define DEF_BINARY_WIDEN_STRUCT_1_NAME(WT, NT, NAME) \ + binary_widen_##WT##_##NT##_##NAME##_s_1 +#define DEF_BINARY_WIDEN_STRUCT_1_NAME_WRAP(WT, NT, NAME) \ + DEF_BINARY_WIDEN_STRUCT_1_NAME(WT, NT, NAME) + +#define DEF_BINARY_WIDEN_STRUCT_1_TYPE(WT, NT, NAME) \ + struct DEF_BINARY_WIDEN_STRUCT_1_NAME_WRAP(WT, NT, NAME) +#define DEF_BINARY_WIDEN_STRUCT_1_TYPE_WRAP(WT, NT, NAME) \ + DEF_BINARY_WIDEN_STRUCT_1_TYPE(WT, NT, NAME) + +#define DEF_BINARY_WIDEN_STRUCT_1_VAR(WT, NT, NAME) \ + binary_widen_##WT##_##NT##_##NAME##_data_1 +#define DEF_BINARY_WIDEN_STRUCT_1_VAR_WRAP(WT, NT, NAME) \ + DEF_BINARY_WIDEN_STRUCT_1_VAR(WT, NT, NAME) + +#define DEF_BINARY_WIDEN_STRUCT_1_DECL(WT, NT, NAME) \ + DEF_BINARY_WIDEN_STRUCT_1_TYPE_WRAP(WT, NT, NAME) \ + DEF_BINARY_WIDEN_STRUCT_1_VAR_WRAP(WT, NT, NAME) +#define DEF_BINARY_WIDEN_STRUCT_1_DECL_WRAP(WT, NT, NAME) \ + DEF_BINARY_WIDEN_STRUCT_1_DECL(WT, NT, NAME) + +#define DEF_BINARY_WIDEN_STRUCT_0(WT, NT, NAME) \ + DEF_BINARY_WIDEN_STRUCT_0_TYPE_WRAP(WT, NT, NAME) \ + { \ + NT vs2[N]; \ + NT rs1; \ + WT expect[N]; \ + WT vd[N]; \ + }; +#define DEF_BINARY_WIDEN_STRUCT_0_WRAP(WT, NT, NAME) \ + DEF_BINARY_WIDEN_STRUCT_0(WT, NT, NAME) + +DEF_BINARY_WIDEN_STRUCT_0_WRAP(uint64_t, uint32_t, add) +DEF_BINARY_WIDEN_STRUCT_0_WRAP(uint64_t, uint32_t, sub) +DEF_BINARY_WIDEN_STRUCT_0_WRAP(uint64_t, uint32_t, mul) + +#define DEF_BINARY_WIDEN_STRUCT_1(WT, NT, NAME) \ + DEF_BINARY_WIDEN_STRUCT_1_TYPE_WRAP(WT, NT, NAME) \ + { \ + WT vs2[N]; \ + NT rs1; \ + WT expect[N]; \ + WT vd[N]; \ + }; +#define DEF_BINARY_WIDEN_STRUCT_1_WRAP(WT, NT, NAME) \ + DEF_BINARY_WIDEN_STRUCT_1(WT, NT, NAME) + +DEF_BINARY_WIDEN_STRUCT_1_WRAP(uint64_t, uint32_t, add) + +DEF_BINARY_WIDEN_STRUCT_0_DECL_WRAP(uint64_t, uint32_t, add)[] = { + { + /* vs2 */ + { + 1, 1, 1, 1, + 0, 0, 0, 0, + 2147483647, 2147483647, 2147483647, 2147483647, + 2147483648, 2147483648, 2147483648, 2147483648, + }, + /* rs1 */ + 2147483647, + /* expect */ + { + 2147483648, 2147483648, 2147483648, 2147483648, + 2147483647, 2147483647, 2147483647, 2147483647, + 4294967294, 4294967294, 4294967294, 4294967294, + 4294967295, 4294967295, 4294967295, 4294967295, + }, + }, + { + /* vs2 */ + { + 1, 1, 1, 1, + 0, 0, 0, 0, + 4294967295, 4294967295, 4294967295, 4294967295, + 4294967294, 4294967294, 4294967294, 4294967294, + }, + /* rs1 */ + 4294967295, + /* expect */ + { + 4294967296ull, 4294967296ull, 4294967296ull, 4294967296ull, + 4294967295ull, 4294967295ull, 4294967295ull, 4294967295ull, + 8589934590ull, 8589934590ull, 8589934590ull, 8589934590ull, + 8589934589ull, 8589934589ull, 8589934589ull, 8589934589ull, + }, + }, +}; + +DEF_BINARY_WIDEN_STRUCT_0_DECL_WRAP(uint64_t, uint32_t, sub)[] = { + { + /* vs2 */ + { + 2147483648, 2147483648, 2147483648, 2147483648, + 2147483647, 2147483647, 2147483647, 2147483647, + 4294967294, 4294967294, 4294967294, 4294967294, + 4294967295, 4294967295, 4294967295, 4294967295, + }, + /* rs1 */ + 2147483647, + /* expect */ + { + 1, 1, 1, 1, + 0, 0, 0, 0, + 2147483647, 2147483647, 2147483647, 2147483647, + 2147483648, 2147483648, 2147483648, 2147483648, + }, + }, + { + /* vs2 */ + { + 4294967295ull, 4294967295ull, 4294967295ull, 4294967295ull, + 4294967294ull, 4294967294ull, 4294967294ull, 4294967294ull, + 1, 1, 1, 1, + 0, 0, 0, 0, + }, + /* rs1 */ + 4294967295, + /* expect */ + { + 0, 0, 0, 0, + 18446744073709551615ull, 18446744073709551615ull, 18446744073709551615ull, 18446744073709551615ull, + 18446744069414584322ull, 18446744069414584322ull, 18446744069414584322ull, 18446744069414584322ull, + 18446744069414584321ull, 18446744069414584321ull, 18446744069414584321ull, 18446744069414584321ull, + }, + }, +}; + +DEF_BINARY_WIDEN_STRUCT_0_DECL_WRAP(uint64_t, uint32_t, mul)[] = { + { + /* vs2 */ + { + 1, 1, 1, 1, + 0, 0, 0, 0, + 2, 2, 2, 2, + 9, 9, 9, 9, + }, + /* rs1 */ + 2147483647, + /* expect */ + { + 2147483647, 2147483647, 2147483647, 2147483647, + 0, 0, 0, 0, + 4294967294, 4294967294, 4294967294, 4294967294, + 19327352823ull, 19327352823ull, 19327352823ull, 19327352823ull, + }, + }, + { + /* vs2 */ + { + 1, 1, 1, 1, + 0, 0, 0, 0, + 4294967295ull, 4294967295ull, 4294967295ull, 4294967295ull, + 4294967294ull, 4294967294ull, 4294967294ull, 4294967294ull, + }, + /* rs1 */ + 4294967295, + /* expect */ + { + 4294967295ull, 4294967295ull, 4294967295ull, 4294967295ull, + 0, 0, 0, 0, + 18446744065119617025ull, 18446744065119617025ull, 18446744065119617025ull, 18446744065119617025ull, + 18446744060824649730ull, 18446744060824649730ull, 18446744060824649730ull, 18446744060824649730ull, + }, + }, +}; + +DEF_BINARY_WIDEN_STRUCT_1_DECL_WRAP(uint64_t, uint32_t, add)[] = { + { + /* vs2 */ + { + 1, 1, 1, 1, + 0, 0, 0, 0, + 2147483647, 2147483647, 2147483647, 2147483647, + 2147483649, 2147483649, 2147483649, 2147483649, + }, + /* rs1 */ + 2147483647, + /* expect */ + { + 2147483648, 2147483648, 2147483648, 2147483648, + 2147483647, 2147483647, 2147483647, 2147483647, + 4294967294, 4294967294, 4294967294, 4294967294, + 4294967296ull, 4294967296ull, 4294967296ull, 4294967296ull, + }, + }, + { + /* vs2 */ + { + 1, 1, 1, 1, + 0, 0, 0, 0, + 4294967295ull, 4294967295ull, 4294967295ull, 4294967295ull, + 4294967296ull, 4294967296ull, 4294967296ull, 4294967296ull, + }, + /* rs1 */ + 4294967295, + /* expect */ + { + 4294967296ull, 4294967296ull, 4294967296ull, 4294967296ull, + 4294967295ull, 4294967295ull, 4294967295ull, 4294967295ull, + 8589934590ull, 8589934590ull, 8589934590ull, 8589934590ull, + 8589934591ull, 8589934591ull, 8589934591ull, 8589934591ull, + }, + }, +}; + +#endif diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_widen_vx_run.h b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_widen_vx_run.h new file mode 100644 index 000000000000..87fe0b132152 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_widen_vx_run.h @@ -0,0 +1,27 @@ +#ifndef HAVE_DEFINED_VX_WIDEN_RUN_H +#define HAVE_DEFINED_VX_WIDEN_RUN_H + +int +main () +{ + unsigned i, k; + + for (i = 0; i < sizeof (TEST_DATA) / sizeof (TEST_DATA[0]); i++) + { + DATA_TYPE *data = &TEST_DATA[i]; + NT *vs2 = data->vs2; + NT rs1 = data->rs1; + WT *expect = data->expect; + WT *vd = data->vd; + + TEST_RUN (WT, NT, NAME, vd, vs2, rs1, N); + + for (k = 0; k < N; k++) + if (vd[k] != expect[k]) + __builtin_abort (); + } + + return 0; +} + +#endif diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_widen_wx_run.h b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_widen_wx_run.h new file mode 100644 index 000000000000..6edd48605044 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_widen_wx_run.h @@ -0,0 +1,27 @@ +#ifndef HAVE_DEFINED_WX_WIDEN_RUN_H +#define HAVE_DEFINED_WX_WIDEN_RUN_H + +int +main () +{ + unsigned i, k; + + for (i = 0; i < sizeof (TEST_DATA) / sizeof (TEST_DATA[0]); i++) + { + DATA_TYPE *data = &TEST_DATA[i]; + WT *vs2 = data->vs2; + NT rs1 = data->rs1; + WT *expect = data->expect; + WT *vd = data->vd; + + TEST_RUN (WT, NT, NAME, vd, vs2, rs1, N); + + for (k = 0; k < N; k++) + if (vd[k] != expect[k]) + __builtin_abort (); + } + + return 0; +} + +#endif diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/wx_vwaddu-run-1-u64.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/wx_vwaddu-run-1-u64.c new file mode 100644 index 000000000000..fe0ea7cb3c93 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/wx_vwaddu-run-1-u64.c @@ -0,0 +1,18 @@ +/* { dg-do run { target { riscv_v } } } */ +/* { dg-additional-options "-std=c99 --param=gpr2vr-cost=0" } */ + +#include "vx_widen.h" +#include "vx_widen_data.h" + +#define WT uint64_t +#define NT uint32_t +#define NAME add +#define TEST_DATA DEF_BINARY_WIDEN_STRUCT_1_VAR_WRAP(WT, NT, NAME) +#define DATA_TYPE DEF_BINARY_WIDEN_STRUCT_1_TYPE_WRAP(WT, NT, NAME) + +DEF_VX_WIDEN_BINARY_CASE_1_WRAP(WT, NT, +, NAME) + +#define TEST_RUN(WT, NT, NAME, vd, vs2, rs1, N) \ + RUN_VX_WIDEN_BINARY_CASE_1_WRAP(WT, NT, NAME, vd, vs2, rs1, N) + +#include "vx_widen_wx_run.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/zve32f-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/zve32f-1.c index 66b4dc636d3f..4650b5e57eab 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/zve32f-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/zve32f-1.c @@ -3,4 +3,4 @@ #include "template-1.h" -/* { dg-final { scan-tree-dump-times "vectorized 1 loops in function" 2 "vect" } } */ +/* { dg-final { scan-tree-dump-times "vectorized 1 loops in function" 3 "vect" } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/zve32f_zvl256b-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/zve32f_zvl256b-1.c index e50af33f48b8..5c253ce70c30 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/zve32f_zvl256b-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/zve32f_zvl256b-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv32gc_zve32f_zvl256b -mabi=ilp32d -mrvv-vector-bits=scalable -fdump-tree-vect-details" } */ +/* { dg-options "-march=rv32gc_zve32f_zvl256b -mabi=ilp32d -mrvv-vector-bits=scalable -mrvv-max-lmul=m2 -fdump-tree-vect-details" } */ #include "template-1.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/zve32x_zvl256b-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/zve32x_zvl256b-1.c index 889689523c85..77f98acf87e0 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/zve32x_zvl256b-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/zve32x_zvl256b-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv32gc_zve32x_zvl256b -mabi=ilp32d -mrvv-vector-bits=scalable -fdump-tree-vect-details" } */ +/* { dg-options "-march=rv32gc_zve32x_zvl256b -mabi=ilp32d -mrvv-vector-bits=scalable -mrvv-max-lmul=m2 -fdump-tree-vect-details" } */ #include "template-1.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/abi-call-variant_cc-sibcall-indirect-1.c b/gcc/testsuite/gcc.target/riscv/rvv/base/abi-call-variant_cc-sibcall-indirect-1.c new file mode 100644 index 000000000000..54ff106716f8 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/abi-call-variant_cc-sibcall-indirect-1.c @@ -0,0 +1,12 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gcv -mabi=lp64d -O2" } */ + +void __attribute__((riscv_vector_cc)) +f_try_sibcall_v2v_indirect (void __attribute__((riscv_vector_cc)) + (*func) (void)) +{ + func (); +} + +/* { dg-final { scan-assembler-times "\\.variant_cc\tf_try_sibcall_v2v_indirect\n" 1 } } */ +/* { dg-final { scan-assembler-times "\tjr\ta0\n" 1 } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/abi-call-variant_cc-sibcall-indirect-2.c b/gcc/testsuite/gcc.target/riscv/rvv/base/abi-call-variant_cc-sibcall-indirect-2.c new file mode 100644 index 000000000000..121ac0f57e0a --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/abi-call-variant_cc-sibcall-indirect-2.c @@ -0,0 +1,12 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gcv -mabi=lp64d -O2" } */ + +void __attribute__((riscv_vector_cc)) +f_try_sibcall_v2n_indirect (void (*func) (void)) +{ + func (); +} + +/* { dg-final { scan-assembler-times "\\.variant_cc\tf_try_sibcall_v2n_indirect\n" 1 } } */ +/* { dg-final { scan-assembler-times "\tjalr\ta0\n" 1 } } */ +/* { dg-final { scan-assembler-times "\tjr\tra\n" 1 } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/abi-call-variant_cc-sibcall.c b/gcc/testsuite/gcc.target/riscv/rvv/base/abi-call-variant_cc-sibcall.c new file mode 100644 index 000000000000..ccfc38777f49 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/abi-call-variant_cc-sibcall.c @@ -0,0 +1,54 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gcv -mabi=lp64d -O2" } */ + +void f_ext_n2n (void); +void f_ext_v2n (void); +void __attribute__((riscv_vector_cc)) f_ext_n2v (void); +void __attribute__((riscv_vector_cc)) f_ext_v2v (void); + +/* { dg-final { scan-assembler-times "\\.variant_cc\tf_ext_n2n\n" 0 } } */ +/* { dg-final { scan-assembler-times "\\.variant_cc\tf_ext_v2n\n" 0 } } */ +/* { dg-final { scan-assembler-times "\\.variant_cc\tf_ext_n2v\n" 1 } } */ +/* { dg-final { scan-assembler-times "\\.variant_cc\tf_ext_v2v\n" 1 } } */ + +void +f_try_sibcall_n2n (void) +{ + f_ext_n2n (); +} + +/* { dg-final { scan-assembler-times "\\.variant_cc\tf_try_sibcall_n2n\n" 0 } } */ +/* { dg-final { scan-assembler-times "\ttail\tf_ext_n2n\n" 1 } } */ +/* { dg-final { scan-assembler-times "\tcall\tf_ext_n2n\n" 0 } } */ + +void +f_try_sibcall_n2v (void) +{ + f_ext_n2v (); +} + +/* { dg-final { scan-assembler-times "\\.variant_cc\tf_try_sibcall_n2v\n" 0 } } */ +/* { dg-final { scan-assembler-times "\ttail\tf_ext_n2v\n" 1 } } */ +/* { dg-final { scan-assembler-times "\tcall\tf_ext_n2v\n" 0 } } */ + +void __attribute__((riscv_vector_cc)) +f_try_sibcall_v2n (void) +{ + /* Vector to normal: sibling call optimization shall be + suppressed to preserve caller's registers: v1-v7 and v24-v31. */ + f_ext_v2n (); +} + +/* { dg-final { scan-assembler-times "\\.variant_cc\tf_try_sibcall_v2n\n" 1 } } */ +/* { dg-final { scan-assembler-times "\ttail\tf_ext_v2n\n" 0 } } */ +/* { dg-final { scan-assembler-times "\tcall\tf_ext_v2n\n" 1 } } */ + +void __attribute__((riscv_vector_cc)) +f_try_sibcall_v2v (void) +{ + f_ext_v2v (); +} + +/* { dg-final { scan-assembler-times "\\.variant_cc\tf_try_sibcall_v2v\n" 1 } } */ +/* { dg-final { scan-assembler-times "\ttail\tf_ext_v2v\n" 1 } } */ +/* { dg-final { scan-assembler-times "\tcall\tf_ext_v2v\n" 0 } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/vls-type-rvv-max-lmul-autovec.c b/gcc/testsuite/gcc.target/riscv/rvv/vls-type-rvv-max-lmul-autovec.c new file mode 100644 index 000000000000..3b083e8f67c7 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/vls-type-rvv-max-lmul-autovec.c @@ -0,0 +1,12 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gcv -mabi=lp64d -O3 -mrvv-max-lmul=m2 -fdump-tree-optimized" } */ + +void foo(int * restrict a, int *b, int *c) +{ + for (int i=0;i<32;++i) + a[i] = b[i] + c[i]; +} + +/* Make sure -mrvv-max-lmul still constraint the auto vectorizer for VLS + types. */ +/* { dg-final { scan-assembler {vsetivli\s+zero,8,e32,m2,t[au],m[au]} } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/vls-type-rvv-max-lmul.c b/gcc/testsuite/gcc.target/riscv/rvv/vls-type-rvv-max-lmul.c new file mode 100644 index 000000000000..5d52f7798d59 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/vls-type-rvv-max-lmul.c @@ -0,0 +1,12 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gcv -mabi=lp64d -O3 -mrvv-max-lmul=m1 -fdump-tree-optimized" } */ + +typedef long long int64x8_t __attribute__((vector_size(64))); + +int64x8_t foo(int64x8_t a, int64x8_t b) +{ + return a + b; +} +/* Make sure we can us up to LMUL 4 to process int64x8_t at once rather than + break that into 4 LMUL 1 operations. */ +/* { dg-final { scan-assembler {vsetivli\s+zero,8,e64,m4,t[au],m[au]} } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/non-policy/non-overloaded/andes_vector.h b/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/non-policy/non-overloaded/andes_vector.h new file mode 100644 index 000000000000..0d0a8efef6ed --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/non-policy/non-overloaded/andes_vector.h @@ -0,0 +1,11 @@ +/* Wrapper of andes_vector.h, prevent andes_vector.h including stdint.h from + C library, that might cause problem on testing RV32 related testcase when + we disable multilib. */ +#ifndef _ANDES_VECTOR_WRAP_H + +#define _GCC_WRAP_STDINT_H +#include "stdint-gcc.h" +#include_next +#define _ANDES_VECTOR_WRAP_H + +#endif diff --git a/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/non-policy/non-overloaded/nds_vd4dots.c b/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/non-policy/non-overloaded/nds_vd4dots.c index 7f53d900d987..eaf46cc8b267 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/non-policy/non-overloaded/nds_vd4dots.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/non-policy/non-overloaded/nds_vd4dots.c @@ -1,6 +1,6 @@ /* { dg-do compile } */ /* { dg-options "-march=rv32gv_xandesvdot -O3 -mabi=ilp32" { target { rv32 } } } */ -/* { dg-options "-march=rv64gv_xandesvdot -O3 -mabi=lp64" { target { rv64 } } } */ +/* { dg-options "-march=rv64gv_xandesvdot -O3 -mabi=lp64d" { target { rv64 } } } */ #include "andes_vector.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/non-policy/non-overloaded/nds_vd4dotsu.c b/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/non-policy/non-overloaded/nds_vd4dotsu.c index 5cfc9ce3b8f9..92c667f3eb08 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/non-policy/non-overloaded/nds_vd4dotsu.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/non-policy/non-overloaded/nds_vd4dotsu.c @@ -1,6 +1,6 @@ /* { dg-do compile } */ /* { dg-options "-march=rv32gv_xandesvdot -O3 -mabi=ilp32" { target { rv32 } } } */ -/* { dg-options "-march=rv64gv_xandesvdot -O3 -mabi=lp64" { target { rv64 } } } */ +/* { dg-options "-march=rv64gv_xandesvdot -O3 -mabi=lp64d" { target { rv64 } } } */ #include "andes_vector.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/non-policy/non-overloaded/nds_vd4dotu.c b/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/non-policy/non-overloaded/nds_vd4dotu.c index a99a1a32651e..d03a49a35267 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/non-policy/non-overloaded/nds_vd4dotu.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/non-policy/non-overloaded/nds_vd4dotu.c @@ -1,6 +1,6 @@ /* { dg-do compile } */ /* { dg-options "-march=rv32gv_xandesvdot -O3 -mabi=ilp32" { target { rv32 } } } */ -/* { dg-options "-march=rv64gv_xandesvdot -O3 -mabi=lp64" { target { rv64 } } } */ +/* { dg-options "-march=rv64gv_xandesvdot -O3 -mabi=lp64d" { target { rv64 } } } */ #include "andes_vector.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/non-policy/non-overloaded/nds_vfncvtbf16s.c b/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/non-policy/non-overloaded/nds_vfncvtbf16s.c index f1c66acca00d..5f15d7f235c8 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/non-policy/non-overloaded/nds_vfncvtbf16s.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/non-policy/non-overloaded/nds_vfncvtbf16s.c @@ -1,8 +1,8 @@ /* { dg-do compile } */ /* { dg-options "-march=rv32gv_xandesvbfhcvt -mabi=ilp32 -O3 -fno-schedule-insns -fno-schedule-insns2" { target { rv32 } } } */ -/* { dg-options "-march=rv64gv_xandesvbfhcvt -mabi=lp64 -O3 -fno-schedule-insns -fno-schedule-insns2" { target { rv64 } } } */ +/* { dg-options "-march=rv64gv_xandesvbfhcvt -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2" { target { rv64 } } } */ -#include +#include "andes_vector.h" vbfloat16mf4_t test_nds_vfncvt_bf16_s_bf16mf4(vfloat32mf2_t vs2, size_t vl) { return __riscv_nds_vfncvt_bf16_s_bf16mf4(vs2, vl); diff --git a/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/non-policy/non-overloaded/nds_vfpmadb.c b/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/non-policy/non-overloaded/nds_vfpmadb.c index decd594ceb54..449d180c7b9c 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/non-policy/non-overloaded/nds_vfpmadb.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/non-policy/non-overloaded/nds_vfpmadb.c @@ -1,6 +1,6 @@ /* { dg-do compile } */ /* { dg-options "-march=rv32gv_zvfh_xandesvpackfph -O3 -mabi=ilp32" { target { rv32 } } } */ -/* { dg-options "-march=rv64gv_zvfh_xandesvpackfph -O3 -mabi=lp64" { target { rv64 } } } */ +/* { dg-options "-march=rv64gv_zvfh_xandesvpackfph -O3 -mabi=lp64d" { target { rv64 } } } */ #include "andes_vector.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/non-policy/non-overloaded/nds_vfpmadt.c b/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/non-policy/non-overloaded/nds_vfpmadt.c index bc104ff79a5b..04583dfd02ff 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/non-policy/non-overloaded/nds_vfpmadt.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/non-policy/non-overloaded/nds_vfpmadt.c @@ -1,6 +1,6 @@ /* { dg-do compile } */ /* { dg-options "-march=rv32gv_zvfh_xandesvpackfph -O3 -mabi=ilp32" { target { rv32 } } } */ -/* { dg-options "-march=rv64gv_zvfh_xandesvpackfph -O3 -mabi=lp64" { target { rv64 } } } */ +/* { dg-options "-march=rv64gv_zvfh_xandesvpackfph -O3 -mabi=lp64d" { target { rv64 } } } */ #include "andes_vector.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/non-policy/non-overloaded/nds_vfwcvtsbf16.c b/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/non-policy/non-overloaded/nds_vfwcvtsbf16.c index 4193c6b10ba4..63b52978aa3e 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/non-policy/non-overloaded/nds_vfwcvtsbf16.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/non-policy/non-overloaded/nds_vfwcvtsbf16.c @@ -1,8 +1,8 @@ /* { dg-do compile } */ /* { dg-options "-march=rv32gv_xandesvbfhcvt -mabi=ilp32 -O3 -fno-schedule-insns -fno-schedule-insns2" { target { rv32 } } } */ -/* { dg-options "-march=rv64gv_xandesvbfhcvt -mabi=lp64 -O3 -fno-schedule-insns -fno-schedule-insns2" { target { rv64 } } } */ +/* { dg-options "-march=rv64gv_xandesvbfhcvt -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2" { target { rv64 } } } */ -#include +#include "andes_vector.h" vfloat32mf2_t test_nds_vfwcvt_s_bf16_f32mf2(vbfloat16mf4_t vs2, size_t vl) { return __riscv_nds_vfwcvt_s_bf16_f32mf2(vs2, vl); diff --git a/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/non-policy/non-overloaded/nds_vln8.c b/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/non-policy/non-overloaded/nds_vln8.c index ddabe658bdee..9367944a118a 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/non-policy/non-overloaded/nds_vln8.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/non-policy/non-overloaded/nds_vln8.c @@ -1,6 +1,6 @@ /* { dg-do compile } */ /* { dg-options "-march=rv32gv_xandesvsintload -O3 -mabi=ilp32" { target { rv32 } } } */ -/* { dg-options "-march=rv64gv_xandesvsintload -O3 -mabi=lp64" { target { rv64 } } } */ +/* { dg-options "-march=rv64gv_xandesvsintload -O3 -mabi=lp64d" { target { rv64 } } } */ #include "andes_vector.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/non-policy/overloaded/andes_vector.h b/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/non-policy/overloaded/andes_vector.h new file mode 100644 index 000000000000..0d0a8efef6ed --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/non-policy/overloaded/andes_vector.h @@ -0,0 +1,11 @@ +/* Wrapper of andes_vector.h, prevent andes_vector.h including stdint.h from + C library, that might cause problem on testing RV32 related testcase when + we disable multilib. */ +#ifndef _ANDES_VECTOR_WRAP_H + +#define _GCC_WRAP_STDINT_H +#include "stdint-gcc.h" +#include_next +#define _ANDES_VECTOR_WRAP_H + +#endif diff --git a/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/non-policy/overloaded/nds_vd4dots.c b/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/non-policy/overloaded/nds_vd4dots.c index e5408abd1485..72b984ef85fd 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/non-policy/overloaded/nds_vd4dots.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/non-policy/overloaded/nds_vd4dots.c @@ -1,6 +1,6 @@ /* { dg-do compile } */ /* { dg-options "-march=rv32gv_xandesvdot -O3 -mabi=ilp32" { target { rv32 } } } */ -/* { dg-options "-march=rv64gv_xandesvdot -O3 -mabi=lp64" { target { rv64 } } } */ +/* { dg-options "-march=rv64gv_xandesvdot -O3 -mabi=lp64d" { target { rv64 } } } */ #include "andes_vector.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/non-policy/overloaded/nds_vd4dotsu.c b/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/non-policy/overloaded/nds_vd4dotsu.c index 89b8c9e6fb5d..edfe2efd40b5 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/non-policy/overloaded/nds_vd4dotsu.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/non-policy/overloaded/nds_vd4dotsu.c @@ -1,6 +1,6 @@ /* { dg-do compile } */ /* { dg-options "-march=rv32gv_xandesvdot -O3 -mabi=ilp32" { target { rv32 } } } */ -/* { dg-options "-march=rv64gv_xandesvdot -O3 -mabi=lp64" { target { rv64 } } } */ +/* { dg-options "-march=rv64gv_xandesvdot -O3 -mabi=lp64d" { target { rv64 } } } */ #include "andes_vector.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/non-policy/overloaded/nds_vd4dotu.c b/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/non-policy/overloaded/nds_vd4dotu.c index 1b168d490936..fbac25a27a6d 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/non-policy/overloaded/nds_vd4dotu.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/non-policy/overloaded/nds_vd4dotu.c @@ -1,6 +1,6 @@ /* { dg-do compile } */ /* { dg-options "-march=rv32gv_xandesvdot -O3 -mabi=ilp32" { target { rv32 } } } */ -/* { dg-options "-march=rv64gv_xandesvdot -O3 -mabi=lp64" { target { rv64 } } } */ +/* { dg-options "-march=rv64gv_xandesvdot -O3 -mabi=lp64d" { target { rv64 } } } */ #include "andes_vector.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/non-policy/overloaded/nds_vfncvtbf16s.c b/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/non-policy/overloaded/nds_vfncvtbf16s.c index 838bea77a62b..5a6702809a23 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/non-policy/overloaded/nds_vfncvtbf16s.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/non-policy/overloaded/nds_vfncvtbf16s.c @@ -1,8 +1,8 @@ /* { dg-do compile } */ /* { dg-options "-march=rv32gv_xandesvbfhcvt -mabi=ilp32 -O3 -fno-schedule-insns -fno-schedule-insns2" { target { rv32 } } } */ -/* { dg-options "-march=rv64gv_xandesvbfhcvt -mabi=lp64 -O3 -fno-schedule-insns -fno-schedule-insns2" { target { rv64 } } } */ +/* { dg-options "-march=rv64gv_xandesvbfhcvt -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2" { target { rv64 } } } */ -#include +#include "andes_vector.h" vbfloat16mf4_t test_nds_vfncvt_bf16_s_bf16mf4(vfloat32mf2_t vs2, size_t vl) { return __riscv_nds_vfncvt_bf16(vs2, vl); diff --git a/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/non-policy/overloaded/nds_vfpmadb.c b/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/non-policy/overloaded/nds_vfpmadb.c index bbb084dfae0b..b25e7cf4f1a6 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/non-policy/overloaded/nds_vfpmadb.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/non-policy/overloaded/nds_vfpmadb.c @@ -1,6 +1,6 @@ /* { dg-do compile } */ /* { dg-options "-march=rv32gv_zvfh_xandesvpackfph -O3 -mabi=ilp32" { target { rv32 } } } */ -/* { dg-options "-march=rv64gv_zvfh_xandesvpackfph -O3 -mabi=lp64" { target { rv64 } } } */ +/* { dg-options "-march=rv64gv_zvfh_xandesvpackfph -O3 -mabi=lp64d" { target { rv64 } } } */ #include "andes_vector.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/non-policy/overloaded/nds_vfpmadt.c b/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/non-policy/overloaded/nds_vfpmadt.c index 1e1347ed193c..31b46c646637 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/non-policy/overloaded/nds_vfpmadt.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/non-policy/overloaded/nds_vfpmadt.c @@ -1,6 +1,6 @@ /* { dg-do compile } */ /* { dg-options "-march=rv32gv_zvfh_xandesvpackfph -O3 -mabi=ilp32" { target { rv32 } } } */ -/* { dg-options "-march=rv64gv_zvfh_xandesvpackfph -O3 -mabi=lp64" { target { rv64 } } } */ +/* { dg-options "-march=rv64gv_zvfh_xandesvpackfph -O3 -mabi=lp64d" { target { rv64 } } } */ #include "andes_vector.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/non-policy/overloaded/nds_vfwcvtsbf16.c b/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/non-policy/overloaded/nds_vfwcvtsbf16.c index 0a09916e47f4..aca15295ec56 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/non-policy/overloaded/nds_vfwcvtsbf16.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/non-policy/overloaded/nds_vfwcvtsbf16.c @@ -1,8 +1,8 @@ /* { dg-do compile } */ /* { dg-options "-march=rv32gv_xandesvbfhcvt -mabi=ilp32 -O3 -fno-schedule-insns -fno-schedule-insns2" { target { rv32 } } } */ -/* { dg-options "-march=rv64gv_xandesvbfhcvt -mabi=lp64 -O3 -fno-schedule-insns -fno-schedule-insns2" { target { rv64 } } } */ +/* { dg-options "-march=rv64gv_xandesvbfhcvt -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2" { target { rv64 } } } */ -#include +#include "andes_vector.h" vfloat32mf2_t test_nds_vfwcvt_s_bf16_f32mf2(vbfloat16mf4_t vs2, size_t vl) { return __riscv_nds_vfwcvt_s(vs2, vl); diff --git a/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/non-policy/overloaded/nds_vln8.c b/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/non-policy/overloaded/nds_vln8.c index 08be93f2b3a5..c494e003c8e4 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/non-policy/overloaded/nds_vln8.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/non-policy/overloaded/nds_vln8.c @@ -1,6 +1,6 @@ /* { dg-do compile } */ /* { dg-options "-march=rv32gv_xandesvsintload -O3 -mabi=ilp32" { target { rv32 } } } */ -/* { dg-options "-march=rv64gv_xandesvsintload -O3 -mabi=lp64" { target { rv64 } } } */ +/* { dg-options "-march=rv64gv_xandesvsintload -O3 -mabi=lp64d" { target { rv64 } } } */ #include "andes_vector.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/policy/non-overloaded/andes_vector.h b/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/policy/non-overloaded/andes_vector.h new file mode 100644 index 000000000000..289664c9c25c --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/policy/non-overloaded/andes_vector.h @@ -0,0 +1,11 @@ +/* Wrapper of riscv_vector.h, prevent riscv_vector.h including stdint.h from + C library, that might cause problem on testing RV32 related testcase when + we disable multilib. */ +#ifndef _ANDES_VECTOR_WRAP_H + +#define _GCC_WRAP_STDINT_H +#include "stdint-gcc.h" +#include_next +#define _ANDES_VECTOR_WRAP_H + +#endif diff --git a/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/policy/non-overloaded/nds_vd4dots.c b/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/policy/non-overloaded/nds_vd4dots.c index 0ca7788b7ab2..76d58c02f5a8 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/policy/non-overloaded/nds_vd4dots.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/policy/non-overloaded/nds_vd4dots.c @@ -1,6 +1,6 @@ /* { dg-do compile } */ /* { dg-options "-march=rv32gv_xandesvdot -O3 -mabi=ilp32" { target { rv32 } } } */ -/* { dg-options "-march=rv64gv_xandesvdot -O3 -mabi=lp64" { target { rv64 } } } */ +/* { dg-options "-march=rv64gv_xandesvdot -O3 -mabi=lp64d" { target { rv64 } } } */ #include "andes_vector.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/policy/non-overloaded/nds_vd4dotsu.c b/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/policy/non-overloaded/nds_vd4dotsu.c index 0fc31c50053e..814224d67bd1 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/policy/non-overloaded/nds_vd4dotsu.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/policy/non-overloaded/nds_vd4dotsu.c @@ -1,6 +1,6 @@ /* { dg-do compile } */ /* { dg-options "-march=rv32gv_xandesvdot -O3 -mabi=ilp32" { target { rv32 } } } */ -/* { dg-options "-march=rv64gv_xandesvdot -O3 -mabi=lp64" { target { rv64 } } } */ +/* { dg-options "-march=rv64gv_xandesvdot -O3 -mabi=lp64d" { target { rv64 } } } */ #include "andes_vector.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/policy/non-overloaded/nds_vd4dotu.c b/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/policy/non-overloaded/nds_vd4dotu.c index 2fb544443541..d49cf8864b23 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/policy/non-overloaded/nds_vd4dotu.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/policy/non-overloaded/nds_vd4dotu.c @@ -1,6 +1,6 @@ /* { dg-do compile } */ /* { dg-options "-march=rv32gv_xandesvdot -O3 -mabi=ilp32" { target { rv32 } } } */ -/* { dg-options "-march=rv64gv_xandesvdot -O3 -mabi=lp64" { target { rv64 } } } */ +/* { dg-options "-march=rv64gv_xandesvdot -O3 -mabi=lp64d" { target { rv64 } } } */ #include "andes_vector.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/policy/non-overloaded/nds_vfncvtbf16s.c b/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/policy/non-overloaded/nds_vfncvtbf16s.c index 29a0d681c7dd..65a9260a3b9a 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/policy/non-overloaded/nds_vfncvtbf16s.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/policy/non-overloaded/nds_vfncvtbf16s.c @@ -1,8 +1,8 @@ /* { dg-do compile } */ /* { dg-options "-march=rv32gv_xandesvbfhcvt -mabi=ilp32 -O3 -fno-schedule-insns -fno-schedule-insns2" { target { rv32 } } } */ -/* { dg-options "-march=rv64gv_xandesvbfhcvt -mabi=lp64 -O3 -fno-schedule-insns -fno-schedule-insns2" { target { rv64 } } } */ +/* { dg-options "-march=rv64gv_xandesvbfhcvt -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2" { target { rv64 } } } */ -#include +#include "andes_vector.h" vbfloat16mf4_t test_nds_vfncvt_bf16_s_bf16mf4_tu(vbfloat16mf4_t vd, vfloat32mf2_t vs2, size_t vl) { return __riscv_nds_vfncvt_bf16_s_bf16mf4_tu(vd, vs2, vl); diff --git a/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/policy/non-overloaded/nds_vfpmadb.c b/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/policy/non-overloaded/nds_vfpmadb.c index 31de0dde2f7c..438ddcf8e96a 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/policy/non-overloaded/nds_vfpmadb.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/policy/non-overloaded/nds_vfpmadb.c @@ -1,6 +1,6 @@ /* { dg-do compile } */ /* { dg-options "-march=rv32gv_zvfh_xandesvpackfph -O3 -mabi=ilp32" { target { rv32 } } } */ -/* { dg-options "-march=rv64gv_zvfh_xandesvpackfph -O3 -mabi=lp64" { target { rv64 } } } */ +/* { dg-options "-march=rv64gv_zvfh_xandesvpackfph -O3 -mabi=lp64d" { target { rv64 } } } */ #include "andes_vector.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/policy/non-overloaded/nds_vfpmadt.c b/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/policy/non-overloaded/nds_vfpmadt.c index 0b41e9a5c886..bf43168c99b4 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/policy/non-overloaded/nds_vfpmadt.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/policy/non-overloaded/nds_vfpmadt.c @@ -1,6 +1,6 @@ /* { dg-do compile } */ /* { dg-options "-march=rv32gv_zvfh_xandesvpackfph -O3 -mabi=ilp32" { target { rv32 } } } */ -/* { dg-options "-march=rv64gv_zvfh_xandesvpackfph -O3 -mabi=lp64" { target { rv64 } } } */ +/* { dg-options "-march=rv64gv_zvfh_xandesvpackfph -O3 -mabi=lp64d" { target { rv64 } } } */ #include "andes_vector.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/policy/non-overloaded/nds_vfwcvtsbf16.c b/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/policy/non-overloaded/nds_vfwcvtsbf16.c index 8d206435a0b5..b424d276e343 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/policy/non-overloaded/nds_vfwcvtsbf16.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/policy/non-overloaded/nds_vfwcvtsbf16.c @@ -1,8 +1,8 @@ /* { dg-do compile } */ /* { dg-options "-march=rv32gv_xandesvbfhcvt -mabi=ilp32 -O3 -fno-schedule-insns -fno-schedule-insns2" { target { rv32 } } } */ -/* { dg-options "-march=rv64gv_xandesvbfhcvt -mabi=lp64 -O3 -fno-schedule-insns -fno-schedule-insns2" { target { rv64 } } } */ +/* { dg-options "-march=rv64gv_xandesvbfhcvt -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2" { target { rv64 } } } */ -#include +#include "andes_vector.h" vfloat32mf2_t test_nds_vfwcvt_s_bf16_f32mf2_tu(vfloat32mf2_t vd, vbfloat16mf4_t vs2, size_t vl) { return __riscv_nds_vfwcvt_s_tu(vd, vs2, vl); diff --git a/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/policy/non-overloaded/nds_vln8.c b/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/policy/non-overloaded/nds_vln8.c index 137b56ea4bb1..6454e54c7772 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/policy/non-overloaded/nds_vln8.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/policy/non-overloaded/nds_vln8.c @@ -1,6 +1,6 @@ /* { dg-do compile } */ /* { dg-options "-march=rv32gv_xandesvsintload -O3 -mabi=ilp32" { target { rv32 } } } */ -/* { dg-options "-march=rv64gv_xandesvsintload -O3 -mabi=lp64" { target { rv64 } } } */ +/* { dg-options "-march=rv64gv_xandesvsintload -O3 -mabi=lp64d" { target { rv64 } } } */ #include "andes_vector.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/policy/overloaded/andes_vector.h b/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/policy/overloaded/andes_vector.h new file mode 100644 index 000000000000..289664c9c25c --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/policy/overloaded/andes_vector.h @@ -0,0 +1,11 @@ +/* Wrapper of riscv_vector.h, prevent riscv_vector.h including stdint.h from + C library, that might cause problem on testing RV32 related testcase when + we disable multilib. */ +#ifndef _ANDES_VECTOR_WRAP_H + +#define _GCC_WRAP_STDINT_H +#include "stdint-gcc.h" +#include_next +#define _ANDES_VECTOR_WRAP_H + +#endif diff --git a/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/policy/overloaded/nds_vd4dots.c b/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/policy/overloaded/nds_vd4dots.c index ea78fa989bd3..0afc0ff13dde 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/policy/overloaded/nds_vd4dots.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/policy/overloaded/nds_vd4dots.c @@ -1,6 +1,6 @@ /* { dg-do compile } */ /* { dg-options "-march=rv32gv_xandesvdot -O3 -mabi=ilp32" { target { rv32 } } } */ -/* { dg-options "-march=rv64gv_xandesvdot -O3 -mabi=lp64" { target { rv64 } } } */ +/* { dg-options "-march=rv64gv_xandesvdot -O3 -mabi=lp64d" { target { rv64 } } } */ #include "andes_vector.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/policy/overloaded/nds_vd4dotsu.c b/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/policy/overloaded/nds_vd4dotsu.c index ba14b7e3132e..01f68a049a53 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/policy/overloaded/nds_vd4dotsu.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/policy/overloaded/nds_vd4dotsu.c @@ -1,6 +1,6 @@ /* { dg-do compile } */ /* { dg-options "-march=rv32gv_xandesvdot -O3 -mabi=ilp32" { target { rv32 } } } */ -/* { dg-options "-march=rv64gv_xandesvdot -O3 -mabi=lp64" { target { rv64 } } } */ +/* { dg-options "-march=rv64gv_xandesvdot -O3 -mabi=lp64d" { target { rv64 } } } */ #include "andes_vector.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/policy/overloaded/nds_vd4dotu.c b/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/policy/overloaded/nds_vd4dotu.c index 7518934aba88..80fd1295670c 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/policy/overloaded/nds_vd4dotu.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/policy/overloaded/nds_vd4dotu.c @@ -1,6 +1,6 @@ /* { dg-do compile } */ /* { dg-options "-march=rv32gv_xandesvdot -O3 -mabi=ilp32" { target { rv32 } } } */ -/* { dg-options "-march=rv64gv_xandesvdot -O3 -mabi=lp64" { target { rv64 } } } */ +/* { dg-options "-march=rv64gv_xandesvdot -O3 -mabi=lp64d" { target { rv64 } } } */ #include "andes_vector.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/policy/overloaded/nds_vfncvtbf16s.c b/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/policy/overloaded/nds_vfncvtbf16s.c index a9f77ed2e5b7..7343c6343d17 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/policy/overloaded/nds_vfncvtbf16s.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/policy/overloaded/nds_vfncvtbf16s.c @@ -1,8 +1,8 @@ /* { dg-do compile } */ /* { dg-options "-march=rv32gv_xandesvbfhcvt -mabi=ilp32 -O3 -fno-schedule-insns -fno-schedule-insns2" { target { rv32 } } } */ -/* { dg-options "-march=rv64gv_xandesvbfhcvt -mabi=lp64 -O3 -fno-schedule-insns -fno-schedule-insns2" { target { rv64 } } } */ +/* { dg-options "-march=rv64gv_xandesvbfhcvt -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2" { target { rv64 } } } */ -#include +#include "andes_vector.h" vbfloat16mf4_t test_nds_vfncvt_bf16_s_bf16mf4_tu(vbfloat16mf4_t vd, vfloat32mf2_t vs2, size_t vl) { return __riscv_nds_vfncvt_bf16_tu(vd, vs2, vl); diff --git a/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/policy/overloaded/nds_vfpmadb.c b/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/policy/overloaded/nds_vfpmadb.c index ff79fe7aafd1..989a3c7312fd 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/policy/overloaded/nds_vfpmadb.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/policy/overloaded/nds_vfpmadb.c @@ -1,6 +1,6 @@ /* { dg-do compile } */ /* { dg-options "-march=rv32gv_zvfh_xandesvpackfph -O3 -mabi=ilp32" { target { rv32 } } } */ -/* { dg-options "-march=rv64gv_zvfh_xandesvpackfph -O3 -mabi=lp64" { target { rv64 } } } */ +/* { dg-options "-march=rv64gv_zvfh_xandesvpackfph -O3 -mabi=lp64d" { target { rv64 } } } */ #include "andes_vector.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/policy/overloaded/nds_vfpmadt.c b/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/policy/overloaded/nds_vfpmadt.c index f40b54fb2586..7d8cc288ac07 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/policy/overloaded/nds_vfpmadt.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/policy/overloaded/nds_vfpmadt.c @@ -1,6 +1,6 @@ /* { dg-do compile } */ /* { dg-options "-march=rv32gv_zvfh_xandesvpackfph -O3 -mabi=ilp32" { target { rv32 } } } */ -/* { dg-options "-march=rv64gv_zvfh_xandesvpackfph -O3 -mabi=lp64" { target { rv64 } } } */ +/* { dg-options "-march=rv64gv_zvfh_xandesvpackfph -O3 -mabi=lp64d" { target { rv64 } } } */ #include "andes_vector.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/policy/overloaded/nds_vfwcvtsbf16.c b/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/policy/overloaded/nds_vfwcvtsbf16.c index 8d206435a0b5..b424d276e343 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/policy/overloaded/nds_vfwcvtsbf16.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/policy/overloaded/nds_vfwcvtsbf16.c @@ -1,8 +1,8 @@ /* { dg-do compile } */ /* { dg-options "-march=rv32gv_xandesvbfhcvt -mabi=ilp32 -O3 -fno-schedule-insns -fno-schedule-insns2" { target { rv32 } } } */ -/* { dg-options "-march=rv64gv_xandesvbfhcvt -mabi=lp64 -O3 -fno-schedule-insns -fno-schedule-insns2" { target { rv64 } } } */ +/* { dg-options "-march=rv64gv_xandesvbfhcvt -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2" { target { rv64 } } } */ -#include +#include "andes_vector.h" vfloat32mf2_t test_nds_vfwcvt_s_bf16_f32mf2_tu(vfloat32mf2_t vd, vbfloat16mf4_t vs2, size_t vl) { return __riscv_nds_vfwcvt_s_tu(vd, vs2, vl); diff --git a/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/policy/overloaded/nds_vln8.c b/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/policy/overloaded/nds_vln8.c index 5a5e2a781e4a..a9839dd0b992 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/policy/overloaded/nds_vln8.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/xandesvector/policy/overloaded/nds_vln8.c @@ -1,6 +1,6 @@ /* { dg-do compile } */ /* { dg-options "-march=rv32gv_xandesvsintload -O3 -mabi=ilp32" { target { rv32 } } } */ -/* { dg-options "-march=rv64gv_xandesvsintload -O3 -mabi=lp64" { target { rv64 } } } */ +/* { dg-options "-march=rv64gv_xandesvsintload -O3 -mabi=lp64d" { target { rv64 } } } */ #include "andes_vector.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/xsfvector/sifive_vector.h b/gcc/testsuite/gcc.target/riscv/rvv/xsfvector/sifive_vector.h new file mode 100644 index 000000000000..b94b24a6bd03 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/xsfvector/sifive_vector.h @@ -0,0 +1,11 @@ +/* Wrapper of sifive_vector.h, prevent sifive_vector.h including stdint.h from + C library, that might cause problem on testing RV32 related testcase when + we disable multilib. */ +#ifndef _SIFIVE_VECTOR_WRAP_H + +#define _GCC_WRAP_STDINT_H +#include "stdint-gcc.h" +#include_next +#define _SIFIVE_VECTOR_WRAP_H + +#endif diff --git a/gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/riscv_th_vector.h b/gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/riscv_th_vector.h new file mode 100644 index 000000000000..d824c6185e9d --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/riscv_th_vector.h @@ -0,0 +1,11 @@ +/* Wrapper of riscv_th_vector.h, prevent riscv_th_vector.h including stdint.h from + C library, that might cause problem on testing RV32 related testcase when + we disable multilib. */ +#ifndef _RISCV_TH_VECTOR_WRAP_H + +#define _GCC_WRAP_STDINT_H +#include "stdint-gcc.h" +#include_next +#define _RISCV_TH_VECTOR_WRAP_H + +#endif diff --git a/gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/riscv_vector.h b/gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/riscv_vector.h new file mode 100644 index 000000000000..fbb4858fc867 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/riscv_vector.h @@ -0,0 +1,11 @@ +/* Wrapper of riscv_vector.h, prevent riscv_vector.h including stdint.h from + C library, that might cause problem on testing RV32 related testcase when + we disable multilib. */ +#ifndef _RISCV_VECTOR_WRAP_H + +#define _GCC_WRAP_STDINT_H +#include "stdint-gcc.h" +#include_next +#define _RISCV_VECTOR_WRAP_H + +#endif diff --git a/gcc/testsuite/gcc.target/riscv/sat/sat_arith.h b/gcc/testsuite/gcc.target/riscv/sat/sat_arith.h index 035545c9e0fb..7cd16a296484 100644 --- a/gcc/testsuite/gcc.target/riscv/sat/sat_arith.h +++ b/gcc/testsuite/gcc.target/riscv/sat/sat_arith.h @@ -741,4 +741,19 @@ sat_u_mul_##NT##_from_##WT##_fmt_4 (NT a, NT b) \ sat_u_mul_##NT##_from_##WT##_fmt_4 (a, b) #define RUN_SAT_U_MUL_FMT_4_WRAP(NT, WT, a, b) RUN_SAT_U_MUL_FMT_4(NT, WT, a, b) +#define DEF_SAT_U_MUL_FMT_5(NT, WT) \ +NT __attribute__((noinline)) \ +sat_u_mul_##NT##_from_##WT##_fmt_5 (NT a, NT b) \ +{ \ + WT x = (WT)a * (WT)b; \ + NT hi = x >> (sizeof(NT) * 8); \ + NT lo = (NT)x; \ + return lo | -!!hi; \ +} + +#define DEF_SAT_U_MUL_FMT_5_WRAP(NT, WT) DEF_SAT_U_MUL_FMT_5(NT, WT) +#define RUN_SAT_U_MUL_FMT_5(NT, WT, a, b) \ + sat_u_mul_##NT##_from_##WT##_fmt_5 (a, b) +#define RUN_SAT_U_MUL_FMT_5_WRAP(NT, WT, a, b) RUN_SAT_U_MUL_FMT_5(NT, WT, a, b) + #endif diff --git a/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-6-u16-from-u128.c b/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-6-u16-from-u128.c new file mode 100644 index 000000000000..d58966500369 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-6-u16-from-u128.c @@ -0,0 +1,11 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */ + +#include "sat_arith.h" + +#define NT uint16_t +#define WT uint128_t + +DEF_SAT_U_MUL_FMT_5_WRAP(NT, WT) + +/* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */ diff --git a/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-6-u16-from-u32.c b/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-6-u16-from-u32.c new file mode 100644 index 000000000000..6e186a02d578 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-6-u16-from-u32.c @@ -0,0 +1,11 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */ + +#include "sat_arith.h" + +#define NT uint16_t +#define WT uint32_t + +DEF_SAT_U_MUL_FMT_5_WRAP(NT, WT) + +/* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */ diff --git a/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-6-u16-from-u64.rv32.c b/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-6-u16-from-u64.rv32.c new file mode 100644 index 000000000000..8c3ec20df5dc --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-6-u16-from-u64.rv32.c @@ -0,0 +1,11 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv32gc -mabi=ilp32 -fdump-tree-optimized" } */ + +#include "sat_arith.h" + +#define NT uint16_t +#define WT uint64_t + +DEF_SAT_U_MUL_FMT_5_WRAP(NT, WT) + +/* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */ diff --git a/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-6-u16-from-u64.rv64.c b/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-6-u16-from-u64.rv64.c new file mode 100644 index 000000000000..5233bde4d7ee --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-6-u16-from-u64.rv64.c @@ -0,0 +1,11 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */ + +#include "sat_arith.h" + +#define NT uint16_t +#define WT uint64_t + +DEF_SAT_U_MUL_FMT_5_WRAP(NT, WT) + +/* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */ diff --git a/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-6-u32-from-u128.c b/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-6-u32-from-u128.c new file mode 100644 index 000000000000..6a0742284928 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-6-u32-from-u128.c @@ -0,0 +1,11 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */ + +#include "sat_arith.h" + +#define NT uint32_t +#define WT uint128_t + +DEF_SAT_U_MUL_FMT_5_WRAP(NT, WT) + +/* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */ diff --git a/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-6-u32-from-u64.rv32.c b/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-6-u32-from-u64.rv32.c new file mode 100644 index 000000000000..b5ed463db08a --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-6-u32-from-u64.rv32.c @@ -0,0 +1,11 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv32gc -mabi=ilp32 -fdump-tree-optimized" } */ + +#include "sat_arith.h" + +#define NT uint32_t +#define WT uint64_t + +DEF_SAT_U_MUL_FMT_5_WRAP(NT, WT) + +/* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */ diff --git a/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-6-u32-from-u64.rv64.c b/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-6-u32-from-u64.rv64.c new file mode 100644 index 000000000000..2cd4db505a10 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-6-u32-from-u64.rv64.c @@ -0,0 +1,11 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */ + +#include "sat_arith.h" + +#define NT uint32_t +#define WT uint64_t + +DEF_SAT_U_MUL_FMT_5_WRAP(NT, WT) + +/* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */ diff --git a/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-6-u64-from-u128.c b/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-6-u64-from-u128.c new file mode 100644 index 000000000000..438b420f95a3 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-6-u64-from-u128.c @@ -0,0 +1,11 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */ + +#include "sat_arith.h" + +#define NT uint64_t +#define WT uint128_t + +DEF_SAT_U_MUL_FMT_5_WRAP(NT, WT) + +/* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */ diff --git a/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-6-u8-from-u128.c b/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-6-u8-from-u128.c new file mode 100644 index 000000000000..9dbb434d56a5 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-6-u8-from-u128.c @@ -0,0 +1,11 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */ + +#include "sat_arith.h" + +#define NT uint8_t +#define WT uint128_t + +DEF_SAT_U_MUL_FMT_5_WRAP(NT, WT) + +/* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */ diff --git a/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-6-u8-from-u16.c b/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-6-u8-from-u16.c new file mode 100644 index 000000000000..daf164983184 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-6-u8-from-u16.c @@ -0,0 +1,11 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */ + +#include "sat_arith.h" + +#define NT uint8_t +#define WT uint16_t + +DEF_SAT_U_MUL_FMT_5_WRAP(NT, WT) + +/* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */ diff --git a/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-6-u8-from-u32.c b/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-6-u8-from-u32.c new file mode 100644 index 000000000000..48f5d3eb22ba --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-6-u8-from-u32.c @@ -0,0 +1,11 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */ + +#include "sat_arith.h" + +#define NT uint8_t +#define WT uint32_t + +DEF_SAT_U_MUL_FMT_5_WRAP(NT, WT) + +/* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */ diff --git a/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-6-u8-from-u64.rv32.c b/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-6-u8-from-u64.rv32.c new file mode 100644 index 000000000000..5b8af339f9cf --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-6-u8-from-u64.rv32.c @@ -0,0 +1,11 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv32gc -mabi=ilp32 -fdump-tree-optimized" } */ + +#include "sat_arith.h" + +#define NT uint8_t +#define WT uint64_t + +DEF_SAT_U_MUL_FMT_5_WRAP(NT, WT) + +/* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */ diff --git a/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-6-u8-from-u64.rv64.c b/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-6-u8-from-u64.rv64.c new file mode 100644 index 000000000000..3a5e7cc43fb7 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-6-u8-from-u64.rv64.c @@ -0,0 +1,11 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */ + +#include "sat_arith.h" + +#define NT uint8_t +#define WT uint64_t + +DEF_SAT_U_MUL_FMT_5_WRAP(NT, WT) + +/* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */ diff --git a/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-6-u16-from-u128.c b/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-6-u16-from-u128.c new file mode 100644 index 000000000000..88fe3a74e568 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-6-u16-from-u128.c @@ -0,0 +1,16 @@ +/* { dg-do run { target { rv64 } } } */ +/* { dg-additional-options "-std=c99" } */ + +#include "sat_arith.h" +#include "sat_arith_data.h" + +#define NT uint8_t +#define WT uint128_t +#define NAME usmul +#define DATA TEST_BINARY_DATA_WRAP(NT, NAME) +#define T TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME) +#define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_5_WRAP(NT, WT, x, y) + +DEF_SAT_U_MUL_FMT_5_WRAP(NT, WT) + +#include "scalar_sat_binary_run_xxx.h" diff --git a/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-6-u16-from-u32.c b/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-6-u16-from-u32.c new file mode 100644 index 000000000000..d495ce537369 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-6-u16-from-u32.c @@ -0,0 +1,16 @@ +/* { dg-do run { target { rv32 || rv64 } } } */ +/* { dg-additional-options "-std=c99" } */ + +#include "sat_arith.h" +#include "sat_arith_data.h" + +#define NT uint16_t +#define WT uint32_t +#define NAME usmul +#define DATA TEST_BINARY_DATA_WRAP(NT, NAME) +#define T TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME) +#define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_5_WRAP(NT, WT, x, y) + +DEF_SAT_U_MUL_FMT_5_WRAP(NT, WT) + +#include "scalar_sat_binary_run_xxx.h" diff --git a/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-6-u16-from-u64.c b/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-6-u16-from-u64.c new file mode 100644 index 000000000000..d663953f0894 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-6-u16-from-u64.c @@ -0,0 +1,16 @@ +/* { dg-do run { target { rv32 || rv64 } } } */ +/* { dg-additional-options "-std=c99" } */ + +#include "sat_arith.h" +#include "sat_arith_data.h" + +#define NT uint16_t +#define WT uint64_t +#define NAME usmul +#define DATA TEST_BINARY_DATA_WRAP(NT, NAME) +#define T TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME) +#define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_5_WRAP(NT, WT, x, y) + +DEF_SAT_U_MUL_FMT_5_WRAP(NT, WT) + +#include "scalar_sat_binary_run_xxx.h" diff --git a/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-6-u32-from-u128.c b/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-6-u32-from-u128.c new file mode 100644 index 000000000000..c8d802efdf41 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-6-u32-from-u128.c @@ -0,0 +1,16 @@ +/* { dg-do run { target { rv64 } } } */ +/* { dg-additional-options "-std=c99" } */ + +#include "sat_arith.h" +#include "sat_arith_data.h" + +#define NT uint32_t +#define WT uint128_t +#define NAME usmul +#define DATA TEST_BINARY_DATA_WRAP(NT, NAME) +#define T TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME) +#define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_5_WRAP(NT, WT, x, y) + +DEF_SAT_U_MUL_FMT_5_WRAP(NT, WT) + +#include "scalar_sat_binary_run_xxx.h" diff --git a/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-6-u32-from-u64.c b/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-6-u32-from-u64.c new file mode 100644 index 000000000000..5b47a3992a0f --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-6-u32-from-u64.c @@ -0,0 +1,16 @@ +/* { dg-do run { target { rv32 || rv64 } } } */ +/* { dg-additional-options "-std=c99" } */ + +#include "sat_arith.h" +#include "sat_arith_data.h" + +#define NT uint32_t +#define WT uint64_t +#define NAME usmul +#define DATA TEST_BINARY_DATA_WRAP(NT, NAME) +#define T TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME) +#define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_5_WRAP(NT, WT, x, y) + +DEF_SAT_U_MUL_FMT_5_WRAP(NT, WT) + +#include "scalar_sat_binary_run_xxx.h" diff --git a/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-6-u64-from-u128.c b/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-6-u64-from-u128.c new file mode 100644 index 000000000000..acc999fc748a --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-6-u64-from-u128.c @@ -0,0 +1,16 @@ +/* { dg-do run { target { rv64 } } } */ +/* { dg-additional-options "-std=c99" } */ + +#include "sat_arith.h" +#include "sat_arith_data.h" + +#define NT uint64_t +#define WT uint128_t +#define NAME usmul +#define DATA TEST_BINARY_DATA_WRAP(NT, NAME) +#define T TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME) +#define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_5_WRAP(NT, WT, x, y) + +DEF_SAT_U_MUL_FMT_5_WRAP(NT, WT) + +#include "scalar_sat_binary_run_xxx.h" diff --git a/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-6-u8-from-u128.c b/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-6-u8-from-u128.c new file mode 100644 index 000000000000..88fe3a74e568 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-6-u8-from-u128.c @@ -0,0 +1,16 @@ +/* { dg-do run { target { rv64 } } } */ +/* { dg-additional-options "-std=c99" } */ + +#include "sat_arith.h" +#include "sat_arith_data.h" + +#define NT uint8_t +#define WT uint128_t +#define NAME usmul +#define DATA TEST_BINARY_DATA_WRAP(NT, NAME) +#define T TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME) +#define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_5_WRAP(NT, WT, x, y) + +DEF_SAT_U_MUL_FMT_5_WRAP(NT, WT) + +#include "scalar_sat_binary_run_xxx.h" diff --git a/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-6-u8-from-u16.c b/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-6-u8-from-u16.c new file mode 100644 index 000000000000..536a2222ad43 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-6-u8-from-u16.c @@ -0,0 +1,16 @@ +/* { dg-do run { target { rv32 || rv64 } } } */ +/* { dg-additional-options "-std=c99" } */ + +#include "sat_arith.h" +#include "sat_arith_data.h" + +#define NT uint8_t +#define WT uint16_t +#define NAME usmul +#define DATA TEST_BINARY_DATA_WRAP(NT, NAME) +#define T TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME) +#define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_5_WRAP(NT, WT, x, y) + +DEF_SAT_U_MUL_FMT_5_WRAP(NT, WT) + +#include "scalar_sat_binary_run_xxx.h" diff --git a/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-6-u8-from-u32.c b/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-6-u8-from-u32.c new file mode 100644 index 000000000000..1e778a8d5b23 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-6-u8-from-u32.c @@ -0,0 +1,16 @@ +/* { dg-do run { target { rv32 || rv64 } } } */ +/* { dg-additional-options "-std=c99" } */ + +#include "sat_arith.h" +#include "sat_arith_data.h" + +#define NT uint8_t +#define WT uint32_t +#define NAME usmul +#define DATA TEST_BINARY_DATA_WRAP(NT, NAME) +#define T TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME) +#define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_5_WRAP(NT, WT, x, y) + +DEF_SAT_U_MUL_FMT_5_WRAP(NT, WT) + +#include "scalar_sat_binary_run_xxx.h" diff --git a/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-6-u8-from-u64.c b/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-6-u8-from-u64.c new file mode 100644 index 000000000000..98fda1986376 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-6-u8-from-u64.c @@ -0,0 +1,16 @@ +/* { dg-do run { target { rv32 || rv64 } } } */ +/* { dg-additional-options "-std=c99" } */ + +#include "sat_arith.h" +#include "sat_arith_data.h" + +#define NT uint8_t +#define WT uint64_t +#define NAME usmul +#define DATA TEST_BINARY_DATA_WRAP(NT, NAME) +#define T TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME) +#define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_5_WRAP(NT, WT, x, y) + +DEF_SAT_U_MUL_FMT_5_WRAP(NT, WT) + +#include "scalar_sat_binary_run_xxx.h" diff --git a/gcc/testsuite/gcc.target/riscv/sat/widen-mul-0.c b/gcc/testsuite/gcc.target/riscv/sat/widen-mul-0.c new file mode 100644 index 000000000000..1074fa9d5f41 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/sat/widen-mul-0.c @@ -0,0 +1,8 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */ + +#include "widen-mul.h" + +SAT_U_MUL_FMT_5(uint8_t, uint128_t) + +/* { dg-final { scan-tree-dump-not " = (__int128 unsigned) " "optimized" } } */ diff --git a/gcc/testsuite/gcc.target/riscv/sat/widen-mul-1.c b/gcc/testsuite/gcc.target/riscv/sat/widen-mul-1.c new file mode 100644 index 000000000000..5f8f0dd733ce --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/sat/widen-mul-1.c @@ -0,0 +1,8 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */ + +#include "widen-mul.h" + +SAT_U_MUL_FMT_5(uint16_t, uint128_t) + +/* { dg-final { scan-tree-dump-not " = (__int128 unsigned) " "optimized" } } */ diff --git a/gcc/testsuite/gcc.target/riscv/sat/widen-mul-2.c b/gcc/testsuite/gcc.target/riscv/sat/widen-mul-2.c new file mode 100644 index 000000000000..4c54cc07b535 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/sat/widen-mul-2.c @@ -0,0 +1,8 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */ + +#include "widen-mul.h" + +SAT_U_MUL_FMT_5(uint32_t, uint128_t) + +/* { dg-final { scan-tree-dump-not " = (__int128 unsigned) " "optimized" } } */ diff --git a/gcc/testsuite/gcc.target/riscv/sat/widen-mul-3.c b/gcc/testsuite/gcc.target/riscv/sat/widen-mul-3.c new file mode 100644 index 000000000000..d3dd97104b70 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/sat/widen-mul-3.c @@ -0,0 +1,8 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */ + +#include "widen-mul.h" + +SAT_U_MUL_FMT_5(uint64_t, uint128_t) + +/* { dg-final { scan-tree-dump-not " = (__int128 unsigned) " "optimized" } } */ diff --git a/gcc/testsuite/gcc.target/riscv/sat/widen-mul.h b/gcc/testsuite/gcc.target/riscv/sat/widen-mul.h new file mode 100644 index 000000000000..a0a44084e58a --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/sat/widen-mul.h @@ -0,0 +1,15 @@ +#include + +#if __riscv_xlen == 64 +typedef unsigned __int128 uint128_t; +#endif + +#define SAT_U_MUL_FMT_5(NT, WT) \ +NT __attribute__((noinline)) \ +sat_u_mul_##NT##_from_##WT##_fmt_5 (NT a, NT b) \ +{ \ + WT x = (WT)a * (WT)b; \ + NT hi = x >> (sizeof(NT) * 8); \ + NT lo = (NT)x; \ + return lo | -!!hi; \ +} diff --git a/gcc/testsuite/gcc.target/riscv/save-restore-cfi-3.c b/gcc/testsuite/gcc.target/riscv/save-restore-cfi-3.c new file mode 100644 index 000000000000..3d35ad185f77 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/save-restore-cfi-3.c @@ -0,0 +1,16 @@ +/* { dg-do compile } */ +/* { dg-options "-g -Os -march=rv32e -mabi=ilp32e -msave-restore" } */ +/* { dg-skip-if "" { *-*-* } {"-O2" "-O1" "-O0" "-Og" "-O3" "-Oz" "-flto"} } */ +/* { dg-final { scan-assembler-times {\.cfi_offset 8, -8} 1} } */ +/* { dg-final { scan-assembler-times {\.cfi_offset 1, -4} 1} } */ +/* { dg-final { scan-assembler-times {\.cfi_def_cfa_offset 8} 1} } */ +/* { dg-final { scan-assembler-times {\.cfi_restore 8} 1} } */ +/* { dg-final { scan-assembler-times {\.cfi_restore 1} 1} } */ +/* { dg-final { scan-assembler-times {\.cfi_def_cfa_offset 0} 1} } */ + +int my_getint(); + +int foo(int x) +{ + return x + my_getint(); +} diff --git a/gcc/testsuite/gcc.target/riscv/zbb-min-max-04.c b/gcc/testsuite/gcc.target/riscv/zbb-min-max-04.c new file mode 100644 index 000000000000..3103c96ef2fe --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/zbb-min-max-04.c @@ -0,0 +1,45 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -march=rv64gc_zicond_zbb -mabi=lp64d" } */ +/* { dg-skip-if "" { *-*-* } { "-finline-functions" "-funroll-loops" "-ftracer" } } */ + +int +remove_one_fast (int *move_ordering, const int num_moves, int mark) +{ + int i, best = -1000000; + int tmp = 0; + + for (i = mark; i < num_moves; i++) + { + if (move_ordering[i] > best) + { + best = move_ordering[i]; + tmp = i; + } + } + + return tmp; +} + +/* { dg-final { scan-assembler-times "max\t" 1 } } */ +/* { dg-final { scan-assembler-times "czero.nez" 2 } } */ +/* { dg-final { scan-assembler-times "czero.eqz" 2 } } */ + +int +remove_one_fast2 (int *move_ordering, const int num_moves, int mark) +{ + int i, best = -1000000; + int tmp = 0; + + for (i = mark; i < num_moves; i++) + { + if (move_ordering[i] < best) + { + best = move_ordering[i]; + tmp = i; + } + } + + return tmp; +} + +/* { dg-final { scan-assembler-times "min\t" 1 } } */ diff --git a/gcc/testsuite/gcc.target/s390/arch13/bitops-1.c b/gcc/testsuite/gcc.target/s390/arch13/bitops-1.c index 8d84655f71cc..41915a88f331 100644 --- a/gcc/testsuite/gcc.target/s390/arch13/bitops-1.c +++ b/gcc/testsuite/gcc.target/s390/arch13/bitops-1.c @@ -2,10 +2,12 @@ /* and with complement */ -int +int i32; + +void ncrk (int a, int b) { - return a & ~b; + i32 = a & ~b; } /* { dg-final { scan-assembler-times "\tncrk\t" 1 } } */ @@ -20,10 +22,10 @@ ncgrk (long long a, long long b) /* or with complement */ -int +void ocrk (int a, int b) { - return a | ~b; + i32 = a | ~b; } /* { dg-final { scan-assembler-times "\tocrk\t" 1 } } */ @@ -38,10 +40,10 @@ ocgrk (long long a, long long b) /* nand */ -int +void nnrk (int a, int b) { - return ~(a & b); + i32 = ~(a & b); } /* { dg-final { scan-assembler-times "\tnnrk\t" 1 } } */ @@ -56,10 +58,10 @@ nngrk (long long a, long long b) /* nor */ -int +void nork (int a, int b) { - return ~(a | b); + i32 = ~(a | b); } /* { dg-final { scan-assembler-times "\tnork\t" 1 } } */ @@ -74,10 +76,10 @@ nogrk (long long a, long long b) /* nxor */ -int +void nxrk (int a, int b) { - return ~(a ^ b); + i32 = ~(a ^ b); } /* { dg-final { scan-assembler-times "\tnxrk\t" 1 } } */ diff --git a/gcc/testsuite/gcc.target/s390/arch13/bitops-2.c b/gcc/testsuite/gcc.target/s390/arch13/bitops-2.c index 1bfada3b05ab..db05309fcaed 100644 --- a/gcc/testsuite/gcc.target/s390/arch13/bitops-2.c +++ b/gcc/testsuite/gcc.target/s390/arch13/bitops-2.c @@ -4,6 +4,8 @@ /* and with complement */ +int i32; + int ncrk (int a, int b) { @@ -58,10 +60,10 @@ nngrk (long long a, long long b) /* nor */ -int +void nork (int a, int b) { - return ~(a | b); + i32 = ~(a | b); } /* { dg-final { scan-assembler-times "\tnork\t" 1 } } */ diff --git a/gcc/testsuite/gcc.target/s390/ffs-1.c b/gcc/testsuite/gcc.target/s390/ffs-1.c new file mode 100644 index 000000000000..79774d29ddac --- /dev/null +++ b/gcc/testsuite/gcc.target/s390/ffs-1.c @@ -0,0 +1,18 @@ +/* Check that __builtin_ffs does not expand to libcall. This is required by + Linux kernel code since libcalls are not present there. */ +/* { dg-do compile } */ +/* { dg-options "-march=z10" } */ + +long +fool (long x) +{ + return __builtin_ffsl (x); +} + +int +foo (int x) +{ + return __builtin_ffs (x); +} + +/* { dg-final { scan-assembler-not "brasl" } } */ diff --git a/gcc/testsuite/gcc.target/s390/md/andc-splitter-2.c b/gcc/testsuite/gcc.target/s390/md/andc-splitter-2.c index 03df7b214db1..7d098d8d987e 100644 --- a/gcc/testsuite/gcc.target/s390/md/andc-splitter-2.c +++ b/gcc/testsuite/gcc.target/s390/md/andc-splitter-2.c @@ -37,8 +37,8 @@ unsigned int andc_pp(unsigned int *a, unsigned int *b) /* { dg-final { scan-assembler ":36:.\* \{\\*andsi3_\(esa\|zarch\)\}" } } */ /* { dg-final { scan-assembler ":36:.\* \{\\*xorsi3\}" } } */ -/* { dg-final { scan-assembler-times "\tnr\?k\?\t" 4 } } */ -/* { dg-final { scan-assembler-times "\txr\?k\?\t" 4 } } */ +/* { dg-final { scan-assembler-times "\tng\?r\?k\?\t" 4 } } */ +/* { dg-final { scan-assembler-times "\txg\?r\?k\?\t" 4 } } */ int main (void) diff --git a/gcc/testsuite/gcc.target/s390/vector/vec-extract-3.c b/gcc/testsuite/gcc.target/s390/vector/vec-extract-3.c new file mode 100644 index 000000000000..01030cce7786 --- /dev/null +++ b/gcc/testsuite/gcc.target/s390/vector/vec-extract-3.c @@ -0,0 +1,141 @@ +/* { dg-do compile { target lp64 } } */ +/* { dg-options "-O2 -march=z13 -mzarch" } */ +/* { dg-final { check-function-bodies "**" "" } } */ + +typedef unsigned char uv16qi __attribute__ ((vector_size (16))); +typedef signed char v16qi __attribute__ ((vector_size (16))); +typedef unsigned short uv8hi __attribute__ ((vector_size (16))); +typedef signed short v8hi __attribute__ ((vector_size (16))); +typedef unsigned int uv4si __attribute__ ((vector_size (16))); +typedef signed int v4si __attribute__ ((vector_size (16))); +typedef unsigned long uv2di __attribute__ ((vector_size (16))); +typedef signed long v2di __attribute__ ((vector_size (16))); +typedef float v4sf __attribute__ ((vector_size (16))); +typedef double v2df __attribute__ ((vector_size (16))); + +/* +** extractnthuchar: +** vlgvb %r2,%v24,3\(%r2\) +** br %r14 +*/ +unsigned char +extractnthuchar (uv16qi in, int n) +{ + return in[n + 3]; +} + +/* +** extractnthchar: +** vlgvb %r2,%v24,3\(%r2\) +** lgbr %r2,%r2 +** br %r14 +*/ +signed char +extractnthchar (v16qi in, int n) +{ + return in[n + 3]; +} + +/* +** extractnthushort: +** vlgvh %r2,%v24,3\(%r2\) +** br %r14 +*/ +unsigned short +extractnthushort (uv8hi in, int n) +{ + return in[n + 3]; +} + +/* +** extractnthshort: +** vlgvh %r2,%v24,3\(%r2\) +** lghr %r2,%r2 +** br %r14 +*/ +short +extractnthshort (v8hi in, int n) +{ + return in[n + 3]; +} + +/* +** extractnthuint: +** vlgvf %r2,%v24,3\(%r2\) +** br %r14 +*/ +unsigned int +extractnthuint (uv4si in, int n) +{ + return in[n + 3]; +} + +/* +** extractnthint: +** vlgvf %r2,%v24,3\(%r2\) +** lgfr %r2,%r2 +** br %r14 +*/ +int +extractnthint (v4si in, int n) +{ + return in[n + 3]; +} + +/* +** extractnthulong: +** vlgvg %r2,%v24,1\(%r2\) +** br %r14 +*/ +unsigned long +extractnthulong (uv2di in, int n) +{ + return in[n + 1]; +} + +/* +** extractnthlong: +** vlgvg %r2,%v24,1\(%r2\) +** br %r14 +*/ +long +extractnthlong (v2di in, int n) +{ + return in[n + 1]; +} + +/* +** extractnthfloat: +** vlgvf %r1,%v24,3\(%r2\) +** vlvgf %v0,%r1,0 +** br %r14 +*/ +float +extractnthfloat (v4sf in, int n) +{ + return in[n + 3]; +} + +/* +** extractnthdouble: +** vlgvg %r1,%v24,1\(%r2\) +** ldgr %f0,%r1 +** br %r14 +*/ +double +extractnthdouble (v2df in, int n) +{ + return in[n + 1]; +} + +/* +** extractnthuintm1displacement: +** ahi %r2,-1 +** vlgvf %r2,%v24,0\(%r2\) +** br %r14 +*/ +unsigned int +extractnthuintm1displacement (uv4si in, int n) +{ + return in[n - 1]; +} diff --git a/gcc/testsuite/gcc.target/sparc/tls-ld-int16.c b/gcc/testsuite/gcc.target/sparc/tls-ld-int16.c index de4ce4034c6d..38fe1b28f6c3 100644 --- a/gcc/testsuite/gcc.target/sparc/tls-ld-int16.c +++ b/gcc/testsuite/gcc.target/sparc/tls-ld-int16.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2" } +/* { dg-options "-O2 -fPIC" } /* { dg-add-options tls } */ /* { dg-skip-if "native tls expected" { tls_emulated } } */ diff --git a/gcc/testsuite/gcc.target/sparc/tls-ld-int32.c b/gcc/testsuite/gcc.target/sparc/tls-ld-int32.c index 5604c24151ac..90cd4a4db8dd 100644 --- a/gcc/testsuite/gcc.target/sparc/tls-ld-int32.c +++ b/gcc/testsuite/gcc.target/sparc/tls-ld-int32.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2" } +/* { dg-options "-O2 -fPIC" } /* { dg-add-options tls } */ /* { dg-skip-if "native tls expected" { tls_emulated } } */ diff --git a/gcc/testsuite/gcc.target/sparc/tls-ld-int64.c b/gcc/testsuite/gcc.target/sparc/tls-ld-int64.c index c1925df084fb..72e437d70ed8 100644 --- a/gcc/testsuite/gcc.target/sparc/tls-ld-int64.c +++ b/gcc/testsuite/gcc.target/sparc/tls-ld-int64.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2" } +/* { dg-options "-O2 -fPIC" } /* { dg-add-options tls } */ /* { dg-require-effective-target lp64 } */ diff --git a/gcc/testsuite/gcc.target/sparc/tls-ld-int8.c b/gcc/testsuite/gcc.target/sparc/tls-ld-int8.c index 17eb32ea2a10..5837a3e46d82 100644 --- a/gcc/testsuite/gcc.target/sparc/tls-ld-int8.c +++ b/gcc/testsuite/gcc.target/sparc/tls-ld-int8.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2" } +/* { dg-options "-O2 -fPIC" } /* { dg-add-options tls } */ /* { dg-skip-if "native tls expected" { tls_emulated } } */ diff --git a/gcc/testsuite/gcc.target/sparc/tls-ld-uint16.c b/gcc/testsuite/gcc.target/sparc/tls-ld-uint16.c index 81990a7bf3ca..df2eb064feb3 100644 --- a/gcc/testsuite/gcc.target/sparc/tls-ld-uint16.c +++ b/gcc/testsuite/gcc.target/sparc/tls-ld-uint16.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2" } +/* { dg-options "-O2 -fPIC" } /* { dg-add-options tls } */ /* { dg-skip-if "native tls expected" { tls_emulated } } */ diff --git a/gcc/testsuite/gcc.target/sparc/tls-ld-uint32.c b/gcc/testsuite/gcc.target/sparc/tls-ld-uint32.c index 60524ba87cf6..4639bbbbda0b 100644 --- a/gcc/testsuite/gcc.target/sparc/tls-ld-uint32.c +++ b/gcc/testsuite/gcc.target/sparc/tls-ld-uint32.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2" } +/* { dg-options "-O2 -fPIC" } /* { dg-add-options tls } */ /* { dg-skip-if "native tls expected" { tls_emulated } } */ diff --git a/gcc/testsuite/gcc.target/sparc/tls-ld-uint8.c b/gcc/testsuite/gcc.target/sparc/tls-ld-uint8.c index 7a7492197f95..265291f5f4bb 100644 --- a/gcc/testsuite/gcc.target/sparc/tls-ld-uint8.c +++ b/gcc/testsuite/gcc.target/sparc/tls-ld-uint8.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2" } +/* { dg-options "-O2 -fPIC" } /* { dg-add-options tls } */ /* { dg-skip-if "native tls expected" { tls_emulated } } */ diff --git a/gcc/testsuite/gcc.target/xtensa/BGEUI-BLTUI-32k-64k.c b/gcc/testsuite/gcc.target/xtensa/BGEUI-BLTUI-32k-64k.c index 05873b896896..bd6bf5f2111c 100644 --- a/gcc/testsuite/gcc.target/xtensa/BGEUI-BLTUI-32k-64k.c +++ b/gcc/testsuite/gcc.target/xtensa/BGEUI-BLTUI-32k-64k.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2" } */ +/* { dg-options "-O0 -fdump-rtl-expand" } */ extern void foo(void); @@ -15,5 +15,6 @@ void BLTUI_test(unsigned int a) foo(); } +/* { dg-final { scan-rtl-dump-times "ubtrue" 2 "expand" } } */ /* { dg-final { scan-assembler-times "bgeui" 1 } } */ /* { dg-final { scan-assembler-times "bltui" 1 } } */ diff --git a/gcc/testsuite/gcc.target/xtensa/constsynthV2_O2_costs0.c b/gcc/testsuite/gcc.target/xtensa/constsynthV2_O2_costs0.c new file mode 100644 index 000000000000..a32d75c360ab --- /dev/null +++ b/gcc/testsuite/gcc.target/xtensa/constsynthV2_O2_costs0.c @@ -0,0 +1,19 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -mextra-l32r-costs=0" } */ + +_Complex double test(int a[], float b[]) +{ + a[0] = 2045 * 2045; + a[1] = 4182000; /* postreload const-anchored */ + a[2] = 0xDEADBEEF; + a[3] = 0xDEADBEEF - 15; /* postreload const-anchored */ + a[4] = 131071; + a[5] = 293805; + a[6] = 700972933; + a[7] = -372738139; + b[0] = 3.14159265359f; + b[1] = 0.12005615234375f; + return 1-1i; +} + +/* { dg-final { scan-assembler-times "l32r" 10 } } */ diff --git a/gcc/testsuite/gcc.target/xtensa/constsynthV2_O2_costs5.c b/gcc/testsuite/gcc.target/xtensa/constsynthV2_O2_costs5.c new file mode 100644 index 000000000000..5d29ddb8dae1 --- /dev/null +++ b/gcc/testsuite/gcc.target/xtensa/constsynthV2_O2_costs5.c @@ -0,0 +1,19 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -mextra-l32r-costs=5" } */ + +_Complex double test(int a[], float b[]) +{ + a[0] = 2045 * 2045; /* method "square" */ + a[1] = 4182000; /* postreload const-anchored */ + a[2] = 0xDEADBEEF; /* method "32bits" */ + a[3] = 0xDEADBEEF - 15; /* postreload const-anchored */ + a[4] = 131071; /* method "lshr_m1" */ + a[5] = 293805; /* method "16bits" */ + a[6] = 700972933; /* method "32bits" */ + a[7] = -372738139; /* method "32bits" */ + b[0] = 3.14159265359f; /* method "32bits" */ + b[1] = 0.12005615234375f; /* method "32bits" */ + return 1-1i; /* method "16bits", method "16bits" */ +} + +/* { dg-final { scan-assembler-not "l32r" } } */ diff --git a/gcc/testsuite/gcc.target/xtensa/constsynthV2_Os.c b/gcc/testsuite/gcc.target/xtensa/constsynthV2_Os.c new file mode 100644 index 000000000000..f56c68837b9c --- /dev/null +++ b/gcc/testsuite/gcc.target/xtensa/constsynthV2_Os.c @@ -0,0 +1,23 @@ +/* { dg-do compile } */ +/* { dg-options "-Os -mabi=windowed" } */ + +_Complex double test(int a[], float b[]) +{ + a[0] = 2045 * 2045; /* method "square", but not unique */ + a[1] = 4182000; /* postreload const-anchored */ + a[2] = 0xDEADBEEF; + a[3] = 0xDEADBEEF - 15; /* postreload const-anchored */ + a[4] = 131071; /* method "lshr_m1", but not unique */ + a[5] = 293805; + a[6] = 700972933; + a[7] = -372738139; + asm volatile ("# clobbers":::"a2","a3","a4","a5","a6","a7","a8","a9","a10","a11","a12","a13","a14","a15"); + a[8] = 2045 * 2045; /* method "square", but not unique */ + a[9] = 131071; /* method "lshr_m1", but not unique */ + b[0] = 3.14159265359f; + b[1] = 0.12005615234375f; + return 1-1i; /* method "16bits", method "16bits" */ +} + +/* { dg-final { scan-assembler-times "l32r" 10 } } */ +/* { dg-final { scan-assembler-times ".literal " 8 } } */ diff --git a/gcc/testsuite/gcc.target/xtensa/constsynth_2insns.c b/gcc/testsuite/gcc.target/xtensa/constsynth_2insns.c deleted file mode 100644 index 43c85a25086a..000000000000 --- a/gcc/testsuite/gcc.target/xtensa/constsynth_2insns.c +++ /dev/null @@ -1,44 +0,0 @@ -/* { dg-do compile } */ -/* { dg-options "-Os" } */ - -int test_0(void) -{ - return 4095; -} - -int test_1(void) -{ - return 2147483647; -} - -int test_2(void) -{ - return -34816; -} - -int test_3(void) -{ - return -2049; -} - -int test_4(void) -{ - return 2048; -} - -int test_5(void) -{ - return 34559; -} - -int test_6(void) -{ - return 43680; -} - -void test_7(int *p) -{ - *p = -1432354816; -} - -/* { dg-final { scan-assembler-not "l32r" } } */ diff --git a/gcc/testsuite/gcc.target/xtensa/constsynth_3insns.c b/gcc/testsuite/gcc.target/xtensa/constsynth_3insns.c deleted file mode 100644 index 831288c7ddd5..000000000000 --- a/gcc/testsuite/gcc.target/xtensa/constsynth_3insns.c +++ /dev/null @@ -1,35 +0,0 @@ -/* { dg-do compile } */ -/* { dg-options "-O2 -mextra-l32r-costs=3" } */ - -int test_0(void) -{ - return 134217216; -} - -int test_1(void) -{ - return -27604992; -} - -int test_2(void) -{ - return -162279; -} - -void test_3(int *p) -{ - *p = 192437; -} - -struct foo -{ - unsigned int b : 10; - unsigned int g : 11; - unsigned int r : 11; -}; -void test_4(struct foo *p, unsigned int v) -{ - p->g = v; -} - -/* { dg-final { scan-assembler-not "l32r" } } */ diff --git a/gcc/testsuite/gcc.target/xtensa/constsynth_double.c b/gcc/testsuite/gcc.target/xtensa/constsynth_double.c deleted file mode 100644 index 5fba6a986506..000000000000 --- a/gcc/testsuite/gcc.target/xtensa/constsynth_double.c +++ /dev/null @@ -1,11 +0,0 @@ -/* { dg-do compile } */ -/* { dg-options "-Os" } */ - -void test(unsigned int count, double array[]) -{ - unsigned int i; - for (i = 0; i < count; ++i) - array[i] = 8.988474246316506e+307; -} - -/* { dg-final { scan-assembler-not "l32r" } } */ diff --git a/gcc/testsuite/gfortran.dg/alloc_comp_assign_17.f90 b/gcc/testsuite/gfortran.dg/alloc_comp_assign_17.f90 new file mode 100644 index 000000000000..7a659f2e0c02 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/alloc_comp_assign_17.f90 @@ -0,0 +1,96 @@ +! { dg-do run } +! PR fortran/121616 +! +! Test fix for intrinsic assignment to allocatable scalar polymorphic component + +program p + call pr121616 () + call test_ts () +end + +! Derived from original PR (contributed by Jean Vézina) +subroutine pr121616 () + implicit none + integer :: i + type general + class(*), allocatable :: x + end type general + type(general) :: a(4), b(4) + ! Intrinsic assignment to a variable of unlimited polymorphic type + a(1)%x = 1 + a(2)%x = 3.14 + a(3)%x = .true. + a(4)%x = 'abc' + ! The workaround was to use a structure constructor + b(1) = general(1) + b(2) = general(3.14) + b(3) = general(.true.) + b(4) = general('abc') + do i = 1, 4 + if (.not. allocated (a(i)%x)) stop 10+i + if (.not. allocated (b(i)%x)) stop 20+i + call prt (a(i)%x, b(i)%x) + end do + do i = 1, 4 + deallocate (a(i)%x, b(i)%x) + end do +contains + subroutine prt (x, y) + class(*), intent(in) :: x, y + select type (v=>x) + type is (integer) + print *,v + type is (real) + print *,v + type is (logical) + print *,v + type is (character(*)) + print *,v + class default + error stop 99 + end select + if (.not. same_type_as (x, y)) stop 30+i + end subroutine prt +end + +! Contributed by a friend (private communication) +subroutine test_ts () + implicit none + + type :: t_inner + integer :: i + end type + + type :: t_outer + class(t_inner), allocatable :: inner + end type + + class(t_inner), allocatable :: inner + type(t_outer), allocatable :: outer(:) + integer :: i + + allocate(t_inner :: inner) + inner% i = 0 + + !------------------------------------------------ + ! Size of outer must be > 1 for the bug to appear + !------------------------------------------------ + allocate(outer(2)) + + !------------------------------ + ! Loop is necessary for the bug + !------------------------------ + do i = 1, size(outer) + write(*,*) i + !---------------------------------------------------- + ! Expect intrinsic assignment to polymorphic variable + !---------------------------------------------------- + outer(i)% inner = inner + deallocate (outer(i)% inner) + end do + + write(*,*) 'Loop DONE' + deallocate(outer) + deallocate(inner) + write(*,*) 'Dellocation DONE' +end diff --git a/gcc/testsuite/gfortran.dg/binding_label_tests_35.f90 b/gcc/testsuite/gfortran.dg/binding_label_tests_35.f90 new file mode 100644 index 000000000000..ae3973fe5bf2 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/binding_label_tests_35.f90 @@ -0,0 +1,21 @@ +! { dg-do compile } +! { dg-options "-Wsurprising" } +! PR fortran/49111 +! +! Do not warn for interface declarations with C binding declared PRIVATE + +module mod1 + use iso_c_binding + implicit none + save + + interface + function strerror(errnum) bind(C, NAME = 'strerror') + import + type(C_PTR) :: strerror + integer(C_INT), value :: errnum + end function strerror + end interface + + private strerror +end module mod1 diff --git a/gcc/testsuite/gfortran.dg/binding_label_tests_9.f03 b/gcc/testsuite/gfortran.dg/binding_label_tests_9.f03 index bb61cbf12c77..81d74af019e2 100644 --- a/gcc/testsuite/gfortran.dg/binding_label_tests_9.f03 +++ b/gcc/testsuite/gfortran.dg/binding_label_tests_9.f03 @@ -1,4 +1,5 @@ ! { dg-do compile } +! { dg-options "-Wsurprising" } module x use iso_c_binding implicit none @@ -7,13 +8,13 @@ module x private :: my_private_sub_2 public :: my_public_sub contains - subroutine bar() bind(c,name="foo") ! { dg-warning "PRIVATE but has been given the binding label" } + subroutine bar() bind(c,name="foo") end subroutine bar subroutine my_private_sub() bind(c, name="") end subroutine my_private_sub - subroutine my_private_sub_2() bind(c) ! { dg-warning "PRIVATE but has been given the binding label" } + subroutine my_private_sub_2() bind(c) ! { dg-warning "is marked PRIVATE" } end subroutine my_private_sub_2 subroutine my_public_sub() bind(c, name="my_sub") diff --git a/gcc/testsuite/gfortran.dg/conditional_1.f90 b/gcc/testsuite/gfortran.dg/conditional_1.f90 new file mode 100644 index 000000000000..ca7d21db1a7d --- /dev/null +++ b/gcc/testsuite/gfortran.dg/conditional_1.f90 @@ -0,0 +1,32 @@ +! { dg-do run } +! { dg-options "-std=f2023" } +program conditional_simple + implicit none + integer :: i = 42 + logical :: l = .true. + real(4) :: r1 = 1.e-4, r2 = 1.e-5 + complex :: z = (3.0, 4.0) + + i = (i > 0 ? 1 : -1) + if (i /= 1) stop 1 + + i = 0 + i = (i > 0 ? 1 : i < 0 ? -1 : 0) + if (i /= 0) stop 2 + + i = 0 + i = (i > 0 ? 1 : (i < 0 ? -1 : 0)) + if (i /= 0) stop 3 + + i = 0 + i = (l .eqv. .false. ? 1 : 0) + if (i /= 0) stop 4 + + i = 0 + i = (r1 /= r2 ? 0 : 1) + if (i /= 0) stop 5 + + i = 0 + z = (i /= 0 ? z : (-3.0, -4.0)) + if (z /= (-3.0, -4.0)) stop 6 +end program conditional_simple diff --git a/gcc/testsuite/gfortran.dg/conditional_2.f90 b/gcc/testsuite/gfortran.dg/conditional_2.f90 new file mode 100644 index 000000000000..e78cd0841543 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/conditional_2.f90 @@ -0,0 +1,13 @@ +! { dg-do run } +! { dg-options "-std=f2023" } +program conditional_constant + implicit none + integer :: i = 42 + + i = (.true. ? 1 : -1) + if (i /= 1) stop 1 + + i = 0 + i = (i > 0 ? 1 : .false. ? -1 : 0) + if (i /= 0) stop 2 +end program conditional_constant diff --git a/gcc/testsuite/gfortran.dg/conditional_3.f90 b/gcc/testsuite/gfortran.dg/conditional_3.f90 new file mode 100644 index 000000000000..5596cf5a59c5 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/conditional_3.f90 @@ -0,0 +1,9 @@ +! { dg-do compile } +! { dg-options "-std=f2023" } +program conditional_syntax + implicit none + integer :: i = 42 + + i = i > 0 ? 1 : -1 ! { dg-error "Unclassifiable statement at" } + i = (i > 0 ? 1 -1) ! { dg-error "Expected ':' in conditional expression" } +end program conditional_syntax diff --git a/gcc/testsuite/gfortran.dg/conditional_4.f90 b/gcc/testsuite/gfortran.dg/conditional_4.f90 new file mode 100644 index 000000000000..38033b9ec1de --- /dev/null +++ b/gcc/testsuite/gfortran.dg/conditional_4.f90 @@ -0,0 +1,21 @@ +! { dg-do compile } +! { dg-options "-std=f2023" } +program conditional_resolve + implicit none + integer :: i = 42 + integer, parameter :: ucs4 = selected_char_kind('ISO_10646') + character(kind=1) :: k1 = "k1" + character(kind=ucs4) :: k4 = "k4" + integer, dimension(1) :: a_1d + integer, dimension(1, 1) :: a_2d + logical :: l1(2) + integer :: i1(2) + + i = (l1 ? 1 : -1) ! { dg-error "Condition in conditional expression must be a scalar logical" } + i = (i ? 1 : -1) ! { dg-error "Condition in conditional expression must be a scalar logical" } + i = (i /= 0 ? 1 : "oh no") ! { dg-error "must have the same declared type" } + i = (i /= 0 ? k1 : k4) ! { dg-error "must have the same kind parameter" } + i = (i /= 0 ? a_1d : a_2d) ! { dg-error "must have the same rank" } + k1 = (i /= 0 ? k1 : k1) ! { dg-error "Sorry, only integer, logical, real and complex types are currently supported for conditional expressions" } + i1 = (i /= 0 ? i1 : i1 + 1) ! { dg-error "Sorry, array is currently unsupported for conditional expressions" } +end program conditional_resolve diff --git a/gcc/testsuite/gfortran.dg/conditional_5.f90 b/gcc/testsuite/gfortran.dg/conditional_5.f90 new file mode 100644 index 000000000000..98b479d3e9df --- /dev/null +++ b/gcc/testsuite/gfortran.dg/conditional_5.f90 @@ -0,0 +1,7 @@ +! { dg-do compile } +! { dg-options "-std=f2018" } +program conditional_std + implicit none + integer :: i = 42 + i = (i > 0 ? 1 : -1) ! { dg-error "Fortran 2023: Conditional expression at" } +end program conditional_std diff --git a/gcc/testsuite/gfortran.dg/conditional_6.f90 b/gcc/testsuite/gfortran.dg/conditional_6.f90 new file mode 100644 index 000000000000..c9ac7132c45f --- /dev/null +++ b/gcc/testsuite/gfortran.dg/conditional_6.f90 @@ -0,0 +1,16 @@ +! { dg-do run } +! { dg-options "-std=f2023" } +program conditional_arg + implicit none + integer :: a = 4 + integer :: b = 5 + call five((a < 5 ? a : b)) + if (a /= 5) stop 1 +contains + subroutine five(x) + integer, optional :: x + if (present(x)) then + x = 5 + end if + end subroutine five +end program conditional_arg diff --git a/gcc/testsuite/gfortran.dg/conditional_7.f90 b/gcc/testsuite/gfortran.dg/conditional_7.f90 new file mode 100644 index 000000000000..87e621a6f74e --- /dev/null +++ b/gcc/testsuite/gfortran.dg/conditional_7.f90 @@ -0,0 +1,11 @@ +! { dg-do compile } +! { dg-options "-std=f2023" } +module m + contains + function f(n) result(str) + integer, value :: n + character(len=(n > 5 ? n : 5)) :: str + str = "" + str(1:5) = "abcde" + end +end diff --git a/gcc/testsuite/gfortran.dg/conditional_8.f90 b/gcc/testsuite/gfortran.dg/conditional_8.f90 new file mode 100644 index 000000000000..913acc7f4a80 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/conditional_8.f90 @@ -0,0 +1,14 @@ +! { dg-do run } +! { dg-options "-std=f2023" } +implicit none +integer :: aa(2) +aa = [1, 2] + +print *, (aa(1) > 0 ? aa(2) : g()) +contains +integer function g() + allocatable :: g + error stop "should not be called" + g = 3 +end +end diff --git a/gcc/testsuite/gfortran.dg/conditional_9.f90 b/gcc/testsuite/gfortran.dg/conditional_9.f90 new file mode 100644 index 000000000000..d1bb15e63153 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/conditional_9.f90 @@ -0,0 +1,11 @@ +! { dg-do compile } +! { dg-options "-std=f2023" } +implicit none +integer :: i, j +do concurrent (i=(j > 1 ? 0 : 1) : 5) local(j) ! { dg-error "must not appear in LOCAL locality-spec at" } +end do +do concurrent (i=(.true. ? j : 1) : 5) local(j) ! { dg-error "must not appear in LOCAL locality-spec at" } +end do +do concurrent (i=(.false. ? 1 : j) : 5) local(j) ! { dg-error "must not appear in LOCAL locality-spec at" } +end do +end diff --git a/gcc/testsuite/gfortran.dg/deferred_character_39.f90 b/gcc/testsuite/gfortran.dg/deferred_character_39.f90 new file mode 100644 index 000000000000..38ec431fc60f --- /dev/null +++ b/gcc/testsuite/gfortran.dg/deferred_character_39.f90 @@ -0,0 +1,241 @@ +! { dg-do run } +! PR fortran/108581 - issues with rank-2 deferred-length character arrays +! PR fortran/121939 - ICE in gfc_conv_string_parameter + +program p + call pr108581 + call test2 +end + +! Derived from original testcase +subroutine pr108581 + integer, parameter :: xmin = 0, xmax = 0 + integer, parameter :: ymin = 0, ymax = 1 + integer, parameter :: l = 2 + integer :: x, y + character(8) :: line1, line2, line3 + character(*), parameter :: expect(ymin:ymax) = ['A.','B*'] + character(len=:), pointer :: a(:,:) => NULL() + + allocate (character(len=l) :: a(xmin:xmax, ymin:ymax)) + a(xmin:xmax, ymin) = expect(ymin) + a(xmin:xmax, ymax) = expect(ymax) + + do y = ymin, ymax + write(line1,'(4A)') (a(x, y), x = xmin, xmax) + write(line2,'(4A)') a(xmin:xmax, y) + write(line3,'(4A)') a( : , y) + if (line1 /= expect(y) .or. & + line2 /= expect(y) .or. & + line3 /= expect(y) ) then + write(*,*) (a(x, y), x = xmin, xmax) + write(*,*) a(xmin:xmax, y) + write(*,*) a( : , y) + stop 1 + y + end if + enddo + call chk (a) + deallocate (a) +contains + subroutine chk (z) + character(len=:), pointer :: z(:,:) + integer :: y + do y = lbound(z,2), ubound (z,2) + write(line2,'(4A)') z(xmin:xmax, y) + write(line3,'(4A)') z( : , y) + if (line2 /= expect(y) .or. & + line3 /= expect(y) ) then + write(*,*) z(xmin:xmax, y) + write(*,*) z( : , y) + stop 5 + y + end if + enddo + end subroutine chk +end + +! Exercise character kinds, strides, ... +subroutine test2 + implicit none + integer, parameter :: l = 3 + integer :: i + + character(len=l,kind=1), parameter :: str1(*) = & + [ "123", "456", "789", "0AB" ] + character(len=l,kind=4), parameter :: str4(*) = & + [ 4_"123", 4_"456", 4_"789", 4_"0AB" ] + + character(len=l,kind=1), parameter :: str2(*,*) = & + reshape ([(str1(i),str1(5-i),i=1,4)], shape=[2,4]) + character(len=l,kind=4), parameter :: str5(*,*) = & + reshape ([(str4(i),str4(5-i),i=1,4)], shape=[2,4]) + + character(len=l,kind=1), pointer :: a(:,:) => NULL(), e(:,:) => NULL() + character(len=:,kind=1), pointer :: b(:,:) => NULL(), f(:,:) => NULL() + character(len=l,kind=4), pointer :: c(:,:) => NULL(), g(:,:) => NULL() + character(len=:,kind=4), pointer :: d(:,:) => NULL(), h(:,:) => NULL() + + character(len=16) :: s0, s1, s2, s3, s4 + + ! Simple case: shape=[1,4] + allocate (a, source = reshape (str1,[1,size(str1)])) + allocate (b, source = reshape (str1,[1,size(str1)])) + allocate (c, source = reshape (str4,[1,size(str4)])) + allocate (d, source = c) ! fixed with pr121939 +! d => c + ! Positive non-unit stride + s0 = concat (str1(1::2)) + write(s1,'(4A)') a(1,1::2) + write(s2,'(4A)') b(1,1::2) + write(s3,'(4A)') c(1,1::2) + write(s4,'(4A)') d(1,1::2) +! print *, s0, s1, s2, s3, s4 + if (s1 /= s0) stop 11 + if (s2 /= s0) stop 12 + if (s3 /= s0) stop 13 + if (s4 /= s0) stop 14 + s0 = concat (str1(2::2)) + write(s1,'(4A)') a(1,2::2) + write(s2,'(4A)') b(1,2::2) + write(s3,'(4A)') c(1,2::2) + write(s4,'(4A)') d(1,2::2) +! print *, s0, s1, s2, s3, s4 + if (s1 /= s0) stop 15 + if (s2 /= s0) stop 16 + if (s3 /= s0) stop 17 + if (s4 /= s0) stop 18 + + ! Negative non-unit stride + s0 = concat (str1(3:1:-2)) + write(s1,'(4A)') a(1,3:1:-2) + write(s2,'(4A)') b(1,3:1:-2) + write(s3,'(4A)') c(1,3:1:-2) + write(s4,'(4A)') d(1,3:1:-2) +! print *, s0, s1, s2, s3, s4 + if (s1 /= s0) stop 21 + if (s2 /= s0) stop 22 + if (s3 /= s0) stop 23 + if (s4 /= s0) stop 24 + s0 = concat (str1(4:1:-2)) + write(s1,'(4A)') a(1,4:1:-2) + write(s2,'(4A)') b(1,4:1:-2) + write(s3,'(4A)') c(1,4:1:-2) + write(s4,'(4A)') d(1,4:1:-2) +! print *, s0, s1, s2, s3, s4 + if (s1 /= s0) stop 25 + if (s2 /= s0) stop 26 + if (s3 /= s0) stop 27 + if (s4 /= s0) stop 28 + deallocate (a,b,c,d) + + ! More complex cases with shape=[2,4] + allocate (e, source = reshape (str2,[2,size(str2,2)])) + allocate (f, source = reshape (str2,[2,size(str2,2)])) + allocate (g, source = reshape (str5,[2,size(str5,2)])) + allocate (h, source = reshape (str5,[2,size(str5,2)])) ! fixed with pr121939 +! h => g + s0 = concat (str2(1,3:1:-2)) + write(s1,'(4A)') e(1,3:1:-2) + write(s2,'(4A)') f(1,3:1:-2) + write(s3,'(4A)') g(1,3:1:-2) + write(s4,'(4A)') h(1,3:1:-2) +! print *, s0, s1, s2, s3, s4 + if (s1 /= s0) stop 31 + if (s2 /= s0) stop 32 + if (s3 /= s0) stop 33 + if (s4 /= s0) stop 34 + s0 = concat (str2(1,4:1:-2)) + write(s1,'(4A)') e(1,4:1:-2) + write(s2,'(4A)') f(1,4:1:-2) + write(s3,'(4A)') g(1,4:1:-2) + write(s4,'(4A)') h(1,4:1:-2) +! print *, s0, s1, s2, s3, s4 + if (s1 /= s0) stop 35 + if (s2 /= s0) stop 36 + if (s3 /= s0) stop 37 + if (s4 /= s0) stop 38 + + s0 = concat (str2(2,3:1:-2)) + write(s1,'(4A)') e(2,3:1:-2) + write(s2,'(4A)') f(2,3:1:-2) + write(s3,'(4A)') g(2,3:1:-2) + write(s4,'(4A)') h(2,3:1:-2) +! print *, s0, s1, s2, s3, s4 + if (s1 /= s0) stop 41 + if (s2 /= s0) stop 42 + if (s3 /= s0) stop 43 + if (s4 /= s0) stop 44 + s0 = concat (str2(2,4:1:-2)) + write(s1,'(4A)') e(2,4:1:-2) + write(s2,'(4A)') f(2,4:1:-2) + write(s3,'(4A)') g(2,4:1:-2) + write(s4,'(4A)') h(2,4:1:-2) +! print *, s0, s1, s2, s3, s4 + if (s1 /= s0) stop 45 + if (s2 /= s0) stop 46 + if (s3 /= s0) stop 47 + if (s4 /= s0) stop 48 + + ! Check pointer association with negative stride + a => e(2:1:-1,4:1:-1) + b => f(2:1:-1,4:1:-1) + c => g(2:1:-1,4:1:-1) + d => h(2:1:-1,4:1:-1) + + s0 = concat (str2(2,4:1:-2)) + write(s1,'(4A)') a(1,1::2) + write(s2,'(4A)') b(1,1::2) + write(s3,'(4A)') c(1,1::2) + write(s4,'(4A)') d(1,1::2) +! print *, s0, s1, s2, s3, s4 + if (s1 /= s0) stop 51 + if (s2 /= s0) stop 52 + if (s3 /= s0) stop 53 + if (s4 /= s0) stop 54 + s0 = concat (str2(2,3:1:-2)) + write(s1,'(4A)') a(1,2::2) + write(s2,'(4A)') b(1,2::2) + write(s3,'(4A)') c(1,2::2) + write(s4,'(4A)') d(1,2::2) +! print *, s0, s1, s2, s3, s4 + if (s1 /= s0) stop 55 + if (s2 /= s0) stop 56 + if (s3 /= s0) stop 57 + if (s4 /= s0) stop 58 + + s0 = concat (str2(1,4:1:-2)) + write(s1,'(4A)') a(2,1::2) + write(s2,'(4A)') b(2,1::2) + write(s3,'(4A)') c(2,1::2) + write(s4,'(4A)') d(2,1::2) +! print *, s0, s1, s2, s3, s4 + if (s1 /= s0) stop 61 + if (s2 /= s0) stop 62 + if (s3 /= s0) stop 63 + if (s4 /= s0) stop 64 + s0 = concat (str2(1,3:1:-2)) + write(s1,'(4A)') a(2,2::2) + write(s2,'(4A)') b(2,2::2) + write(s3,'(4A)') c(2,2::2) + write(s4,'(4A)') d(2,2::2) +! print *, s0, s1, s2, s3, s4 + if (s1 /= s0) stop 65 + if (s2 /= s0) stop 66 + if (s3 /= s0) stop 67 + if (s4 /= s0) stop 68 + deallocate (e,f,g,h) + +contains + + ! Helper function to concatenate string array to scalar string + function concat (s) + character(len=:), allocatable :: concat + character(len=*), intent(in) :: s(:) + integer :: i, l, n + n = size (s) + l = len (s) + allocate (character(len=l*n) :: concat) + do i = 1, n + concat(1+(i-1)*l:i*l) = s(i) + end do + end function concat +end diff --git a/gcc/testsuite/gfortran.dg/dynamic_dispatch_9.f03 b/gcc/testsuite/gfortran.dg/dynamic_dispatch_9.f03 index b9b1b1a6e069..0f807ba51049 100644 --- a/gcc/testsuite/gfortran.dg/dynamic_dispatch_9.f03 +++ b/gcc/testsuite/gfortran.dg/dynamic_dispatch_9.f03 @@ -1,6 +1,6 @@ ! { dg-do run } ! -! [OOP] Ensure that different specifc interfaces are +! [OOP] Ensure that different specific interfaces are ! handled properly by dynamic dispatch. ! ! Contributed by Salvatore Filippone diff --git a/gcc/testsuite/gfortran.dg/gomp/pr107421.f90 b/gcc/testsuite/gfortran.dg/gomp/pr107421.f90 index db98dced8cec..a524db5f2af8 100644 --- a/gcc/testsuite/gfortran.dg/gomp/pr107421.f90 +++ b/gcc/testsuite/gfortran.dg/gomp/pr107421.f90 @@ -1,4 +1,8 @@ +! { dg-require-effective-target pie } ! { dg-additional-options "-fdump-ipa-whole-program" } +! Add -fPIE or -mno-direct-extern-access to disable direct access to +! external symbol from executable. +! { dg-additional-options "-fPIE" { target { ! { i?86-*-* x86_64-*-* } } } } ! { dg-additional-options "-mno-direct-extern-access" { target { i?86-*-* x86_64-*-* } } } integer :: i diff --git a/gcc/testsuite/gfortran.dg/implied_do_io_9.f90 b/gcc/testsuite/gfortran.dg/implied_do_io_9.f90 new file mode 100644 index 000000000000..5180b8ace66c --- /dev/null +++ b/gcc/testsuite/gfortran.dg/implied_do_io_9.f90 @@ -0,0 +1,72 @@ +! { dg-do run } +! { dg-additional-options "-O2" } +! +! PR fortran/107968 +! +! Verify that array I/O optimization is not used for a section +! of an array pointer as the pointee can be non-contiguous +! +! Contributed by Nils Dreier + +PROGRAM foo + implicit none + + TYPE t_geographical_coordinates + REAL :: lon + REAL :: lat + END TYPE t_geographical_coordinates + + TYPE t_vertices + REAL, POINTER :: vlon(:) => null() + REAL, POINTER :: vlat(:) => null() + END TYPE t_vertices + + TYPE(t_geographical_coordinates), TARGET :: vertex(2) + TYPE(t_vertices), POINTER :: vertices_pointer + TYPE(t_vertices), TARGET :: vertices_target + + character(24) :: s0, s1, s2 + character(*), parameter :: fmt = '(2f8.3)' + + ! initialization + vertex%lon = [1,3] + vertex%lat = [2,4] + + ! obtain pointer to (non-contiguous) field + vertices_target%vlon => vertex%lon + + ! reference output of write + write (s0,fmt) vertex%lon + + ! set pointer vertices_pointer in a subroutine + CALL set_vertices_pointer(vertices_target) + + write (s1,fmt) vertices_pointer%vlon + write (s2,fmt) vertices_pointer%vlon(1:) + if (s1 /= s0 .or. s2 /= s0) then + print *, s0, s1, s2 + stop 3 + end if + +CONTAINS + + SUBROUTINE set_vertices_pointer(vertices) + TYPE(t_vertices), POINTER, INTENT(IN) :: vertices + + vertices_pointer => vertices + + write (s1,fmt) vertices %vlon + write (s2,fmt) vertices %vlon(1:) + if (s1 /= s0 .or. s2 /= s0) then + print *, s0, s1, s2 + stop 1 + end if + + write (s1,fmt) vertices_pointer%vlon + write (s2,fmt) vertices_pointer%vlon(1:) + if (s1 /= s0 .or. s2 /= s0) then + print *, s0, s1, s2 + stop 2 + end if + END SUBROUTINE set_vertices_pointer +END PROGRAM foo diff --git a/gcc/testsuite/gfortran.dg/interface_abstract_6.f90 b/gcc/testsuite/gfortran.dg/interface_abstract_6.f90 new file mode 100644 index 000000000000..05b9a4e805f2 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/interface_abstract_6.f90 @@ -0,0 +1,53 @@ +! { dg-do compile } +! { dg-options "-fdump-tree-original" } +! +! PR fortran/122206 +! +! Verify that procedure interfaces are "stable" + +module test_example + use, intrinsic :: iso_c_binding, only: c_double, c_int + implicit none + + abstract interface + function simple_interface(iarg1, arg2) bind(c) result(res) + import c_double, c_int + integer(c_int), value, intent(in) :: iarg1 + real(c_double), value, intent(in) :: arg2 + real(c_double) :: res + end function simple_interface + end interface + + procedure(simple_interface), bind(c,name="simple_function") :: simple_function + + interface + function other_interface(iarg1, arg2) result(res) + import c_double, c_int + integer(c_int), value, intent(in) :: iarg1 + real(c_double), value, intent(in) :: arg2 + real(c_double) :: res + end function other_interface + end interface + + procedure(other_interface) :: other_function + +contains + subroutine test_example_interface + implicit none + integer(c_int) :: iarg1 = 2 + real(c_double) :: arg2 = 10. + real(c_double) :: val1, val2 + + val1 = simple_function(iarg1, arg2) + val2 = simple_function(iarg1, arg2) + if (val1 /= val2) stop 1 + + val1 = other_function(iarg1, arg2) + val2 = other_function(iarg1, arg2) + if (val1 /= val2) stop 2 + + end subroutine test_example_interface +end module test_example + +! { dg-final { scan-tree-dump-times "simple_function \\(iarg1, arg2\\);" 2 "original"} } +! { dg-final { scan-tree-dump-times "other_function \\(iarg1, arg2\\);" 2 "original"} } diff --git a/gcc/testsuite/gfortran.dg/matmul_blas_3.f90 b/gcc/testsuite/gfortran.dg/matmul_blas_3.f90 new file mode 100644 index 000000000000..bf02a38c458c --- /dev/null +++ b/gcc/testsuite/gfortran.dg/matmul_blas_3.f90 @@ -0,0 +1,13 @@ +! { dg-do compile } +! { dg-options "-ffrontend-optimize -fexternal-blas64 -fdump-tree-original" } +! { dg-require-effective-target lp64 } +! PR 121161 - option for 64-bit BLAS for MATMUL. +! Check this by making sure there is no KIND=4 integer. +subroutine foo(a,b,c,n) + implicit none + integer(kind=8) :: n + real, dimension(n,n) :: a, b, c + c = matmul(a,b) +end subroutine foo +! { dg-final { scan-tree-dump-not "integer\\(kind=4\\)" "original" } } +! { dg-final { scan-tree-dump-times "sgemm" 1 "original" } } diff --git a/gcc/testsuite/gfortran.dg/module_private_2.f90 b/gcc/testsuite/gfortran.dg/module_private_2.f90 index 847c58d5e37c..58dbb1e23fe5 100644 --- a/gcc/testsuite/gfortran.dg/module_private_2.f90 +++ b/gcc/testsuite/gfortran.dg/module_private_2.f90 @@ -1,5 +1,5 @@ ! { dg-do compile } -! { dg-options "-O2 -fdump-tree-optimized" } +! { dg-options "-O2 -Wsurprising -fdump-tree-optimized" } ! ! PR fortran/47266 ! diff --git a/gcc/testsuite/gfortran.dg/pdt_11.f03 b/gcc/testsuite/gfortran.dg/pdt_11.f03 index 41b506af41ec..3ddbafe4efb5 100644 --- a/gcc/testsuite/gfortran.dg/pdt_11.f03 +++ b/gcc/testsuite/gfortran.dg/pdt_11.f03 @@ -47,6 +47,7 @@ program test write(*,*) 'o_fdef FAIL' STOP 2 end if + deallocate (o_fdef) end program test diff --git a/gcc/testsuite/gfortran.dg/pdt_15.f03 b/gcc/testsuite/gfortran.dg/pdt_15.f03 index 4ae19839923f..17d4d37d3fa1 100644 --- a/gcc/testsuite/gfortran.dg/pdt_15.f03 +++ b/gcc/testsuite/gfortran.dg/pdt_15.f03 @@ -98,9 +98,9 @@ subroutine foo if (int (pop_8 (root)) .ne. 3) STOP 1 if (int (pop_8 (root)) .ne. 2) STOP 2 if (int (pop_8 (root)) .ne. 1) STOP 3 -! if (int (pop_8 (root)) .ne. 0) STOP 4 + if (int (pop_8 (root)) .ne. 0) STOP 4 end subroutine end program ch2701 ! { dg-final { scan-tree-dump-times "Pdtlink_8._deallocate " 5 "original" } } -! { dg-final { scan-tree-dump-times ".n.data = 0B" 8 "original" } } -! { dg-final { scan-tree-dump-times "__builtin_free" 14 "original" } } +! { dg-final { scan-tree-dump-times ".n.data = 0B" 9 "original" } } +! { dg-final { scan-tree-dump-times "__builtin_free" 15 "original" } } diff --git a/gcc/testsuite/gfortran.dg/pdt_17.f03 b/gcc/testsuite/gfortran.dg/pdt_17.f03 index 1b0a30dca4cb..d03e2d139a02 100644 --- a/gcc/testsuite/gfortran.dg/pdt_17.f03 +++ b/gcc/testsuite/gfortran.dg/pdt_17.f03 @@ -6,6 +6,6 @@ ! program p type t(a) ! { dg-error "does not have a component" } - integer(kind=t()) :: x ! { dg-error "used before it is defined" } + integer(kind=t()) :: x ! { dg-error "Expected initialization expression" } end type end diff --git a/gcc/testsuite/gfortran.dg/pdt_20.f03 b/gcc/testsuite/gfortran.dg/pdt_20.f03 index 3aa9b2e086b8..3c4b5b8dfcab 100644 --- a/gcc/testsuite/gfortran.dg/pdt_20.f03 +++ b/gcc/testsuite/gfortran.dg/pdt_20.f03 @@ -17,4 +17,5 @@ program p if (x%b .ne. 3) STOP 1 if (x%b .ne. size (x%r, 1)) STOP 2 if (x%r%a .ne. 1) STOP 3 +! deallocate (x) ! Segmentation fault: triggered at trans-array.cc:11009. end diff --git a/gcc/testsuite/gfortran.dg/pdt_23.f03 b/gcc/testsuite/gfortran.dg/pdt_23.f03 index c0cec9afe0fe..dadea11a3ca3 100644 --- a/gcc/testsuite/gfortran.dg/pdt_23.f03 +++ b/gcc/testsuite/gfortran.dg/pdt_23.f03 @@ -30,4 +30,5 @@ program p buffer = "lmn" read (buffer, *) x ! PDT IO was incorrect (PRs 84143/84432). if (x%c .ne. 'lmn') STOP 5 +! if (allocated (x)) deallocate (x) ! Used to seg fault - invalid memory reference. end diff --git a/gcc/testsuite/gfortran.dg/pdt_3.f03 b/gcc/testsuite/gfortran.dg/pdt_3.f03 index cd48364b1534..7359519b9baf 100644 --- a/gcc/testsuite/gfortran.dg/pdt_3.f03 +++ b/gcc/testsuite/gfortran.dg/pdt_3.f03 @@ -32,7 +32,6 @@ module vars type (mytype (b=s*2)) :: mat2 end type x - real, allocatable :: matrix (:,:) type(thytype(ftype, 4, 4)) :: w type(x(ftype,ftype,256)) :: q class(mytype(ftype, :)), allocatable :: cz @@ -54,10 +53,9 @@ module vars if (size (q%mat2%d) .ne. 4*mat_dim**2) STOP 10 ! Now check some basic OOP with PDTs - matrix = w%d -! TODO - for some reason, using w%d directly in the source causes a seg fault. - allocate (cz, source = mytype(ftype, d_dim)( 0, matrix)) +! Using w%d directly in the source used to cause a seg fault. + allocate (cz, source = mytype(ftype, d_dim)( 0, w%d)) ! Leaks 64 bytes in 1 block. select type (cz) type is (mytype(ftype, *)) if (int (sum (cz%d)) .ne. 136) STOP 11 diff --git a/gcc/testsuite/gfortran.dg/pdt_39.f03 b/gcc/testsuite/gfortran.dg/pdt_39.f03 index 7378cf509830..7cfd232a72f9 100644 --- a/gcc/testsuite/gfortran.dg/pdt_39.f03 +++ b/gcc/testsuite/gfortran.dg/pdt_39.f03 @@ -49,7 +49,7 @@ end subroutine geta_r4 subroutine geta_r8(a_lhs, t_rhs) real(r8), allocatable, intent(out) :: a_lhs(:,:) class(mat_t(k=r8,c=*,r=*)), intent(in) :: t_rhs - a_lhs = t_rhs%m_a + a_lhs = t_rhs%m_a ! Leaks 152 bytes in 2 blocks return end subroutine geta_r8 @@ -94,7 +94,7 @@ program p if (mat_r4%c /= N) stop 2 if (mat_r4%r /= M) stop 3 mat_r4 = reshape( [ (real(i, kind=mat_r4%k), i=1,N*M) ], [ N, M ] ) - a_r4 = mat_r4 + a_r4 = mat_r4 ! Leaks 24 bytes in 1 block. if (int (sum (a_r4)) /= 21) stop 4 N = 4 M = 4 diff --git a/gcc/testsuite/gfortran.dg/pdt_40.f03 b/gcc/testsuite/gfortran.dg/pdt_40.f03 index 48535087f541..673ffdec29d5 100644 --- a/gcc/testsuite/gfortran.dg/pdt_40.f03 +++ b/gcc/testsuite/gfortran.dg/pdt_40.f03 @@ -22,4 +22,5 @@ if (bar%x%ell /= parm) stop 1 ! Then these component references failed in if (bar%x%i /= 2 * parm) stop 2 ! translation. + deallocate (foo, bar%x) end diff --git a/gcc/testsuite/gfortran.dg/pdt_46.f03 b/gcc/testsuite/gfortran.dg/pdt_46.f03 new file mode 100644 index 000000000000..67d32df66a56 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pdt_46.f03 @@ -0,0 +1,62 @@ +! { dg-do run } +! { dg-options "-fdump-tree-original" } +! +! Test the fix for PR83763 in which a dependency was not handled correctly, which +! resulted in a runtime segfault. +! +! Contributed by Berke Durak +! +module bar + implicit none + + type :: foo(n) + integer, len :: n = 10 + real :: vec(n) + end type foo + +contains + + function baz(a) result(b) + type(foo(n = *)), intent(in) :: a + type(foo(n = a%n)) :: b + + b%vec = a%vec * 10 + end function baz + +end module bar + +program test + use bar + implicit none + call main1 ! Original report + call main2 ! Check for memory loss with allocatable 'x' and 'y'. + +contains + + subroutine main1 + type(foo(5)) :: x, y + integer :: a(5) = [1,2,3,4,5] + + x = foo(5)(a) + x = baz (x) ! Segmentation fault because dependency not handled. + if (any (x%vec /= 10 * a)) stop 1 + y = x + x = baz (y) ! No dependecy and so this worked. + if (any (x%vec /= 100 * a)) stop 2 + end subroutine main1 + + subroutine main2 + type(foo(5)), allocatable :: x, y + integer :: a(5) = [1,2,3,4,5] + + x = foo(5)(a) + x = baz (x) ! Segmentation fault because dependency not handled. + if (any (x%vec /= 10 * a)) stop 3 + y = x + x = baz (y) ! No dependecy and so this worked. + if (any (x%vec /= 100 * a)) stop 4 + end subroutine main2 + +end program test +! { dg-final { scan-tree-dump-times "__builtin_free" 16 "original" } } +! { dg-final { scan-tree-dump-times "__builtin_malloc" 12 "original" } } diff --git a/gcc/testsuite/gfortran.dg/pdt_47.f03 b/gcc/testsuite/gfortran.dg/pdt_47.f03 new file mode 100644 index 000000000000..f3b77d9555fc --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pdt_47.f03 @@ -0,0 +1,50 @@ +! { dg-do run } +! +! Test the fix for PR121948, in which the PDT constructor expressions without +! the type specification list, ie. relying on default values, failed. The fix +! also required that the incorrect initialization of functions with implicit +! function result be eliminated. +! +! Contributed by Damian Rouson +! + implicit none + + integer, parameter :: dp = kind(1d0) + real, parameter :: ap = 42.0 + real(dp), parameter :: ap_d = 42.0d0 + + type operands_t(k) + integer, kind :: k = kind(1.) + real(k) :: actual, expected + end type + + type(operands_t) :: x + type(operands_t(dp)) :: y + + x = operands (ap, 10 * ap) + if (abs (x%actual - ap) >1e-5) stop 1 + if (abs (x%expected - 10 * ap) > 1e-5) stop 2 + + + y = operands_dp (ap_d, 10d0 * ap_d) + if (abs (y%actual - ap_d) > 1d-10) stop 3 + if (abs (y%expected - 10d0 * ap_d) > 1d-10) stop 4 + if (kind (y%actual) /= dp) stop 5 + if (kind (y%expected) /= dp) stop 6 + +contains + + function operands(actual, expected) ! Use the default 'k' + real actual, expected + type(operands_t) :: operands + operands = operands_t(actual, expected) + end function + + + function operands_dp(actual, expected) ! Override the default + real(dp) actual, expected + type(operands_t(dp)) :: operands_dp + operands_dp = operands_t(dp)(actual, expected) + end function + +end diff --git a/gcc/testsuite/gfortran.dg/pdt_48.f03 b/gcc/testsuite/gfortran.dg/pdt_48.f03 new file mode 100644 index 000000000000..41b4b045cc15 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pdt_48.f03 @@ -0,0 +1,50 @@ +! { dg-do run } +! +! Test the fix for P83746, which failed as in the comment below. +! +! Contributed by Berke Durak +! +module pdt_m + implicit none + type :: vec(k) + integer, len :: k + integer :: foo(k) + end type vec +contains + elemental function diy_max(a,b) result(c) + integer, intent(in) :: a,b + integer :: c + c=max(a,b) + end function diy_max + + function add(a,b) result(c) + type(vec(k=*)), intent(in) :: a,b + type(vec(k=max(a%k,b%k))) :: c ! Fails + !type(vec(k=diy_max(a%k,b%k))) :: c ! Worked with diy_max + !type(vec(k=a%k+b%k)) :: c ! Worked with + + + c%foo(1:a%k)=a%foo + c%foo(a%k+1:) = 0 + c%foo(1:b%k)=c%foo(1:b%k)+b%foo + + if (c%k /= 5) stop 1 + end function add +end module pdt_m + +program test_pdt + use pdt_m + implicit none + type(vec(k=2)) :: u + type(vec(k=5)) :: v,w + + if (w%k /= 5) stop 2 + if (size(w%foo) /= 5) stop 3 + + u%foo=[1,2] + v%foo=[10,20,30,40,50] + w=add(u,v) + + if (w%k /= 5) stop 4 + if (size(w%foo) /= 5) stop 5 + if (any (w%foo /= [11,22,30,40,50])) stop 6 +end program test_pdt diff --git a/gcc/testsuite/gfortran.dg/pdt_49.f03 b/gcc/testsuite/gfortran.dg/pdt_49.f03 new file mode 100644 index 000000000000..9ddfd14da3e3 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pdt_49.f03 @@ -0,0 +1,19 @@ +! { dg-do compile } +! +! Check PR105380 has gone away. Used to ICE with, "internal compiler error: +! tree check: expected array_type, have record_type in ....." +! +! Contributed by Martin Liska +! +program p + type t(n) + integer, len :: n + end type + type t2(m) + integer, len :: m + type(t(1)) :: a(m) + end type + type(t2(3)) :: x + + print *, x%m, size (x%a), x%a%n ! Outputs 3 3 1 as expected. +end diff --git a/gcc/testsuite/gfortran.dg/pdt_50.f03 b/gcc/testsuite/gfortran.dg/pdt_50.f03 new file mode 100644 index 000000000000..9c036e435632 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pdt_50.f03 @@ -0,0 +1,54 @@ +! { dg-do compile } +! ! { dg-options "-fdump-tree-original" } +! +! Test the fix for PR102241, which caused an ICE in gfc_get_derived_type. +! The test in comment 4 used to cause a spurious error. +! +! Contributed by Roland Wirth +! + MODULE mo + TYPE t1(n) + INTEGER, LEN :: n + INTEGER :: a(n) + END TYPE + + TYPE t2 + TYPE(t1(:)), allocatable :: p_t1 + END TYPE + END MODULE + +!---Check test in comment 4 now works--- + MODULE mo2 + TYPE u1(n) + INTEGER, LEN :: n + INTEGER :: a(n) + END TYPE + + TYPE u2 + TYPE(u1(2)), POINTER :: p_u1 + END TYPE + + CONTAINS + + SUBROUTINE sr + + type(u1(2)), target :: tgt + type(u2) :: pt + + tgt = u1(2)([42,84]) + pt%p_u1 => tgt + if (any (pt%p_u1%a /= [42,84])) stop 1 + END SUBROUTINE + END MODULE +!------ + + use mo + use mo2 + type(t2) :: d + d%p_t1 = t1(8)([42,43,44,45,42,43,44,45]) + if (any (d%p_t1%a /= [42,43,44,45,42,43,44,45])) stop 2 + call sr + deallocate (d%p_t1) +end +! { dg-final { scan-tree-dump-times "__builtin_malloc" 8 "original" } } +! { dg-final { scan-tree-dump-times "__builtin_free" 9 "original" } } diff --git a/gcc/testsuite/gfortran.dg/pdt_51.f03 b/gcc/testsuite/gfortran.dg/pdt_51.f03 new file mode 100644 index 000000000000..46697bf1c09a --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pdt_51.f03 @@ -0,0 +1,57 @@ +! { dg-do compile } +! { dg-options "-fdump-tree-original" } +! +! Test the fix for PR122089 in which the generic interface checking failed. +! +! Contributed by Damian Rouson +! +module tensor_m + implicit none + + type tensor_t(k) + integer, kind :: k = kind(1.) + real(k) values_ + contains + generic :: values => double_precision_values + procedure double_precision_values + end type + +contains + function double_precision_values(self) + class(tensor_t(kind(1D0))) self + double precision double_precision_values + double_precision_values = self%values_ + end function +end module + +module input_output_pair_m + use tensor_m, only : tensor_t + implicit none + + type input_output_pair_t(k) + integer, kind :: k = kind(1.) + type(tensor_t(k)) inputs_ + end type + + interface + module subroutine double_precision_write_to_stdout(input_output_pairs) + implicit none + type(input_output_pair_t(kind(1D0))) input_output_pairs + end subroutine + end interface +end module + +submodule(input_output_pair_m) input_output_pair_s + implicit none +contains + module procedure double_precision_write_to_stdout + print *, input_output_pairs%inputs_%values() + end procedure +end submodule + + use input_output_pair_m + type(input_output_pair_t(kind(1d0))) :: tgt + tgt%inputs_%values_ = 42d0 + call double_precision_write_to_stdout(tgt) +end +! { dg-final { scan-tree-dump-times "double_precision_write_to_stdout \\(&tgt\\);" 1 "original" } } diff --git a/gcc/testsuite/gfortran.dg/pdt_52.f03 b/gcc/testsuite/gfortran.dg/pdt_52.f03 new file mode 100644 index 000000000000..5acdecbdf3ce --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pdt_52.f03 @@ -0,0 +1,36 @@ +! { dg-do compile } +! +! Test the fix for PR122089 in which an error occured in compiling the module +! because a spurious REAL(KIND=0) was being produced for 'values_'. +! +! Other failures are indicated by the comments. For reasons that are not to me, +! they didn't fail when combined with this test. +! +! Contributed by Damian Rouson +! +module tensor_m + implicit none + + type tensor_t(k) + integer, kind :: k = kind(1.) + real(k), allocatable :: values_ ! ICE if not allocatable + end type + + type input_output_pair_t(k) + integer, kind :: k + type(tensor_t(k)) inputs_, expected_outputs_ ! ICE if 2nd component dropped + end type + + type mini_batch_t(k) + integer, kind :: k + type(input_output_pair_t(k)) input_output_pairs_ + end type + +end module tensor_m + + use tensor_m + type (mini_batch_t(k = kind(1d0))) :: x + allocate (x%input_output_pairs_%inputs_%values_, source = 42d0) + print *, kind (x%input_output_pairs_%inputs_%values_), x%input_output_pairs_%inputs_%values_ + deallocate (x%input_output_pairs_%inputs_%values_) +end diff --git a/gcc/testsuite/gfortran.dg/pdt_53.f03 b/gcc/testsuite/gfortran.dg/pdt_53.f03 new file mode 100644 index 000000000000..9f3b4ca82ab8 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pdt_53.f03 @@ -0,0 +1,28 @@ +! { dg-do compile } +! +! Test the fix for PR122089 in which an error occured in compiling the module +! because a spurious REAL(KIND=0) was being produced for 'values_'. +! +! This is a variant of pdt_52.f03. See the comments in that test. +! +! Contributed by Damian Rouson +! +module tensor_m + implicit none + + type tensor_t(k) + integer, kind :: k = kind(1.) + real(k) :: values_ ! Used to ICE + end type + + type input_output_pair_t(k) + integer, kind :: k + type(tensor_t(k)) inputs_, expected_outputs_ + end type + + type mini_batch_t(k) + integer, kind :: k + type(input_output_pair_t(k)) input_output_pairs_ + end type + +end module tensor_m diff --git a/gcc/testsuite/gfortran.dg/pdt_54.f03 b/gcc/testsuite/gfortran.dg/pdt_54.f03 new file mode 100644 index 000000000000..9631dad2f5e2 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pdt_54.f03 @@ -0,0 +1,28 @@ +! { dg-do compile } +! +! Test the fix for PR122089 in which an error occured in compiling the module +! because a spurious REAL(KIND=0) was being produced for 'values_'. +! +! This is a variant of pdt_52.f03. See the comments in that test. +! +! Contributed by Damian Rouson +! +module tensor_m + implicit none + + type tensor_t(k) + integer, kind :: k = kind(1.) + real(k), allocatable :: values_ + end type + + type input_output_pair_t(k) + integer, kind :: k + type(tensor_t(k)) inputs_ ! Used to ICE if 2nd component dropped + end type + + type mini_batch_t(k) + integer, kind :: k + type(input_output_pair_t(k)) input_output_pairs_ + end type + +end module tensor_m diff --git a/gcc/testsuite/gfortran.dg/pdt_55.f03 b/gcc/testsuite/gfortran.dg/pdt_55.f03 new file mode 100644 index 000000000000..bcdb1518fde3 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pdt_55.f03 @@ -0,0 +1,96 @@ +! { dg-do run } +! +! Test fix for PRs 102240, 102686 and 93175. +! +! PR102240 +! Contributed by Roland Wirth +! +MODULE m1 + IMPLICIT NONE + private + public r + INTEGER :: n0, n ! Symbols that confused the parameter substitution. + type t0(m0,n0) + INTEGER, kind :: m0 + INTEGER, LEN :: n0 + INTEGER(kind=m0) :: a0(n0*2) + end type t0 + + TYPE t(m,n) + INTEGER, kind :: m + INTEGER, LEN :: n + INTEGER(kind=m) :: a(n/8:(n/2 + 4)) + type(t0(m,n)) :: p ! During testing, getting this to work fixed PR93175. + END TYPE t +contains + subroutine r + type (t(kind(1_8), 8)) :: x + x%a = [1,2,3,4,5,6,7,8] + if (kind (x%a) /= kind(1_8)) stop 1 + if (sum (x%a) /= 36_8) stop 2 + if (size(x%p%a0) /= 16) stop 3 + end +END + +! PR102686 +! Contributed by Gerhard Steinmetz +! +module m2 + implicit none + private + public s +contains + pure integer function n() ! Confused the parameter substitution. + n = 1 + end + subroutine s + type t(n) + integer, len :: n = 2 + character(len=n) :: c ! ICE because function n() referenced rather than parameter. + end type + type (t(4)) :: c_type, c_type2 + c_type = t(4)("abcd") + if (len (c_type%c) /= 4) stop 4 + if (c_type%c /= "abcd") stop 5 + c_type2%c = "efgh" + if (len (c_type2%c) /= 4) stop 6 + if (c_type2%c /= "efgh") stop 7 + end +end + +! PR93175 +! Contributed by Rich Townsend +! +module m3 + private + public u + type :: matrix (k,n) + integer, kind :: k + integer, len :: n + real(k) :: a(n,n) + end type matrix + + type :: problem(n) + integer, len :: n + type(matrix(kind(0.D0),n)) :: m + end type problem + +contains + subroutine u + implicit none + type(problem(2)) :: p + + p%m%a = 1. + if (p%n /= 2) stop 8 + if (p%m%n /= 2) stop 9 + if (int (sum (p%m%a)) /= 4) stop 10 + end subroutine +end module m3 + + use m1 + use m2 + use m3 + call r + call s + call u +end diff --git a/gcc/testsuite/gfortran.dg/pdt_56.f03 b/gcc/testsuite/gfortran.dg/pdt_56.f03 new file mode 100644 index 000000000000..681d47937029 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pdt_56.f03 @@ -0,0 +1,96 @@ +! { dg-do compile } +! { dg-options "-fcheck=all" } +! +! Test the fix for PR102901, where pdt_13/14/15.f03 segfaulted in compilation +! with -fcheck=all. +! +! Reported by Tobias Burnus +! +! This is pdt_13.f03. +! +module precision_module + implicit none + integer, parameter :: sp = selected_real_kind(6, 37) + integer, parameter :: dp = selected_real_kind(15, 307) + integer, parameter :: qp = selected_real_kind( 30, 291) +end module precision_module + +module link_module + use precision_module + + type link(real_kind) + integer, kind :: real_kind + real (kind=real_kind) :: n + type (link(real_kind)), pointer :: next => NULL() + end type link + +contains + + function push_8 (self, arg) result(current) + real(dp) :: arg + type (link(real_kind=dp)), pointer :: self + type (link(real_kind=dp)), pointer :: current + + if (associated (self)) then + current => self + do while (associated (current%next)) + current => current%next + end do + + allocate (current%next) + current => current%next + else + allocate (current) + self => current + end if + + current%n = arg + current%next => NULL () + end function push_8 + + function pop_8 (self) result(res) + type (link(real_kind=dp)), pointer :: self + type (link(real_kind=dp)), pointer :: current => NULL() + type (link(real_kind=dp)), pointer :: previous => NULL() + real(dp) :: res + + res = 0.0_8 + if (associated (self)) then + current => self + do while (associated (current) .and. associated (current%next)) + previous => current + current => current%next + end do + + previous%next => NULL () + + res = current%n + if (associated (self, current)) then + deallocate (self) + else + deallocate (current) + end if + + end if + end function pop_8 + +end module link_module + +program ch2701 + use precision_module + use link_module + implicit none + integer, parameter :: wp = dp + type (link(real_kind=wp)), pointer :: root => NULL() + type (link(real_kind=wp)), pointer :: current + + current => push_8 (root, 1.0_8) + current => push_8 (root, 2.0_8) + current => push_8 (root, 3.0_8) + + if (int (pop_8 (root)) .ne. 3) STOP 1 + if (int (pop_8 (root)) .ne. 2) STOP 2 + if (int (pop_8 (root)) .ne. 1) STOP 3 + if (int (pop_8 (root)) .ne. 0) STOP 4 + +end program ch2701 diff --git a/gcc/testsuite/gfortran.dg/pr103508.f90 b/gcc/testsuite/gfortran.dg/pr103508.f90 new file mode 100644 index 000000000000..541b9b2d1f03 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr103508.f90 @@ -0,0 +1,22 @@ +! { dg-do compile } +! +! Check the fix for PR103508. As noted in comment 6 of the PR, the bug +! has nothing to do with PDTs. However, the contributor's test has been +! retained. +! +! Contributed by Gerhard Steinmetz +! +program p + type t + integer :: n = 1 + character(3) :: c + end type + block + block + type(t) :: x + x%c = 'abc' + print *, len(x%c) + end ! { dg-error "END BLOCK statement expected" } + end ! { dg-error "END BLOCK statement expected" } +end +! { dg-error "Unexpected end of file" "" { target "*-*-*" } 0 } diff --git a/gcc/testsuite/gfortran.dg/public_private_module_2.f90 b/gcc/testsuite/gfortran.dg/public_private_module_2.f90 index e84429e10033..87276ccdfd18 100644 --- a/gcc/testsuite/gfortran.dg/public_private_module_2.f90 +++ b/gcc/testsuite/gfortran.dg/public_private_module_2.f90 @@ -1,5 +1,5 @@ ! { dg-do compile } -! { dg-options "-O2" } +! { dg-options "-O2 -Wsurprising" } ! { dg-require-visibility "" } ! ! PR fortran/52751 (top, "module mod") @@ -8,16 +8,16 @@ ! Ensure that (only) those module variables and procedures which are PRIVATE ! and have no C-binding label are optimized away. ! - module mod - integer :: aa - integer, private :: iii - integer, private, bind(C) :: jj ! { dg-warning "PRIVATE but has been given the binding label" } - integer, private, bind(C,name='lll') :: kk ! { dg-warning "PRIVATE but has been given the binding label" } - integer, private, bind(C,name='') :: mmmm - integer, bind(C) :: nnn - integer, bind(C,name='oo') :: pp - integer, bind(C,name='') :: qq - end module mod +module mod + integer :: aa + integer, private :: iii + integer, private, bind(C) :: jj ! { dg-warning "is marked PRIVATE" } + integer, private, bind(C,name='lll') :: kk + integer, private, bind(C,name='') :: mmmm + integer, bind(C) :: nnn + integer, bind(C,name='oo') :: pp + integer, bind(C,name='') :: qq +end module mod ! The two xfails below have appeared with the introduction of submodules. 'iii' and ! 'mmm' now are TREE_PUBLIC but has DECL_VISIBILITY (decl) = VISIBILITY_HIDDEN set. @@ -43,10 +43,10 @@ END SUBROUTINE one integer FUNCTION two() two = 42 END FUNCTION two - integer FUNCTION three() bind(C) ! { dg-warning "PRIVATE but has been given the binding label" } + integer FUNCTION three() bind(C) ! { dg-warning "is marked PRIVATE" } three = 43 END FUNCTION three - integer FUNCTION four() bind(C, name='five') ! { dg-warning "PRIVATE but has been given the binding label" } + integer FUNCTION four() bind(C, name='five') four = 44 END FUNCTION four integer FUNCTION six() bind(C, name='') diff --git a/gcc/testsuite/gfortran.dg/stat_3.f90 b/gcc/testsuite/gfortran.dg/stat_3.f90 index 93ec1836a9a9..9bfff1eeb7d4 100644 --- a/gcc/testsuite/gfortran.dg/stat_3.f90 +++ b/gcc/testsuite/gfortran.dg/stat_3.f90 @@ -44,3 +44,16 @@ subroutine sub2 () call lstat (name, status=perr, values= pbuf) call fstat (unit, status=perr, values= pbuf) end + +subroutine sub3 () + implicit none + integer(1) :: ierr1, unit1 = 10 + integer(2) :: buff2(13) + integer(4) :: buff4(13) + integer(8) :: buff8(13) + character(len=32) :: name = "/etc/passwd" + ierr1 = stat (name,values=buff2) ! { dg-error "with kind 2" } + call fstat (unit1, values=buff2) ! { dg-error "with kind 2" } + call fstat (unit1, values=buff4, status=ierr1) ! { dg-error "at least four" } + call lstat (name, values=buff8, status=ierr1) ! { dg-error "at least four" } +end diff --git a/gcc/testsuite/gfortran.dg/stat_4.f90 b/gcc/testsuite/gfortran.dg/stat_4.f90 new file mode 100644 index 000000000000..c2d36ffc819f --- /dev/null +++ b/gcc/testsuite/gfortran.dg/stat_4.f90 @@ -0,0 +1,94 @@ +! { dg-do compile } +! { dg-additional-options "-fdump-tree-original" } +! PR fortran/82480 - make STAT/LSTAT/FSTAT generic + +subroutine fstat_sub_wrapper (unit, values8, status, opt_status4, opt_status8) + implicit none + integer(1), intent(in) :: unit + integer(8), intent(out) :: values8(:) + integer(2), intent(out) :: status + integer(4), intent(out), optional :: opt_status4 + integer(8), intent(out), optional :: opt_status8 + call fstat (unit, values8, status) + call fstat (unit, values8, opt_status4) + call fstat (unit, values8, opt_status8) +end + +subroutine stat_sub_wrapper (name, values4, status, opt_status4, opt_status8) + implicit none + character(*), intent(in) :: name + integer(4), intent(out) :: values4(:) + integer(2), intent(out) :: status + integer(4), intent(out), optional :: opt_status4 + integer(8), intent(out), optional :: opt_status8 + call stat (name, values4, status) + call lstat (name, values4, status) + call stat (name, values4, opt_status4) + call lstat (name, values4, opt_status4) + call stat (name, values4, opt_status8) + call lstat (name, values4, opt_status8) +end + +subroutine sub1 () + implicit none + character(len=32) :: name = "/etc/passwd" + integer(1) :: unit1 = 10 + integer(4) :: unit4 = 10, buff4(13) + integer(8) :: unit8 = 10, buff8(13) + integer :: ierr + ierr = fstat (unit1, values=buff4) + ierr = fstat (unit1, values=buff8) + ierr = fstat (unit4, values=buff4) + ierr = fstat (unit4, values=buff8) + ierr = fstat (unit8, values=buff4) + ierr = fstat (unit8, values=buff8) + ierr = stat (name, values=buff4) + ierr = stat (name, values=buff8) + ierr = lstat (name, values=buff4) + ierr = lstat (name, values=buff8) +end + +subroutine sub2 () + implicit none + integer(2) :: ierr2, unit2 = 10 + integer(4) :: ierr4, unit4 = 10, buff4(13) + integer(8) :: ierr8, unit8 = 10, buff8(13) + character(len=32) :: name = "/etc/passwd" + call fstat (unit2, values=buff4) + call fstat (unit2, values=buff8) + call fstat (unit4, values=buff4) + call fstat (unit4, values=buff8) + call fstat (unit8, values=buff4) + call fstat (unit8, values=buff8) + call stat (name, values=buff4) + call lstat (name, values=buff4) + call stat (name, values=buff8) + call lstat (name, values=buff8) + call fstat (unit4, values=buff4, status=ierr2) + call fstat (unit4, values=buff4, status=ierr4) + call fstat (unit4, values=buff4, status=ierr8) + call fstat (unit4, values=buff8, status=ierr2) + call fstat (unit4, values=buff8, status=ierr4) + call fstat (unit4, values=buff8, status=ierr8) + call stat (name, values=buff4, status=ierr4) + call lstat (name, values=buff4, status=ierr4) + call stat (name, values=buff4, status=ierr8) + call lstat (name, values=buff4, status=ierr8) + call stat (name, values=buff8, status=ierr4) + call lstat (name, values=buff8, status=ierr4) +end + +! { dg-final { scan-tree-dump-times "_gfortran_fstat_i4_sub" 6 "original" } } +! { dg-final { scan-tree-dump-times "_gfortran_lstat_i4_sub" 6 "original" } } +! { dg-final { scan-tree-dump-times "_gfortran_stat_i4_sub" 6 "original" } } +! { dg-final { scan-tree-dump-times "_gfortran_fstat_i8_sub" 9 "original" } } +! { dg-final { scan-tree-dump-times "_gfortran_lstat_i8_sub" 2 "original" } } +! { dg-final { scan-tree-dump-times "_gfortran_stat_i8_sub" 2 "original" } } +! { dg-final { scan-tree-dump-times "_gfortran_fstat_i4 " 3 "original" } } +! { dg-final { scan-tree-dump-times "_gfortran_fstat_i8 " 3 "original" } } +! { dg-final { scan-tree-dump-times "_gfortran_lstat_i4 " 1 "original" } } +! { dg-final { scan-tree-dump-times "_gfortran_lstat_i8 " 1 "original" } } +! { dg-final { scan-tree-dump-times "_gfortran_stat_i4 " 1 "original" } } +! { dg-final { scan-tree-dump-times "_gfortran_stat_i8 " 1 "original" } } +! { dg-final { scan-tree-dump-times "opt_status4" 11 "original" } } +! { dg-final { scan-tree-dump-times "opt_status8" 11 "original" } } diff --git a/gcc/testsuite/gfortran.dg/submodule_34.f90 b/gcc/testsuite/gfortran.dg/submodule_34.f90 new file mode 100644 index 000000000000..5978ecd2f99b --- /dev/null +++ b/gcc/testsuite/gfortran.dg/submodule_34.f90 @@ -0,0 +1,63 @@ +! { dg-do compile } +! +! PR fortran/122046 +! The check for illegal recursion used to trigger on assertion when resolving +! the array spec of the dummy argument in the submodule +! +! Contributed by Tomáš Trnka + +module ChemicalSystemModule + + implicit none + private + + type, public :: ChemicalSystemType + contains + procedure, public :: NumAtoms + end type + +contains + + elemental integer function NumAtoms(self) + class(ChemicalSystemType), intent(in) :: self + + NumAtoms = 123 + + end function + +end module + +module ChemicalSystemUtilsModule + + use ChemicalSystemModule + + implicit none + private + + public :: ChemicalSystemRMSD + + interface + + module subroutine ChemicalSystemRMSD(modelSys, rmsdGrad) + type(ChemicalSystemType), intent(in) :: modelSys + real , intent(out) :: rmsdGrad(3,modelSys%NumAtoms()) + end subroutine + + end interface + +end module + +submodule(ChemicalSystemUtilsModule) ChemicalSystemUtilsSubModule + use ChemicalSystemModule + + implicit none + +contains + + module subroutine ChemicalSystemRMSD(modelSys, rmsdGrad) + type(ChemicalSystemType), intent(in) :: modelSys + real , intent(out) :: rmsdGrad(3,modelSys%NumAtoms()) + end subroutine + +end submodule + diff --git a/gcc/testsuite/gfortran.dg/ubsan/missing_optional_dummy_9.f90 b/gcc/testsuite/gfortran.dg/ubsan/missing_optional_dummy_9.f90 new file mode 100644 index 000000000000..06b0004d5738 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/ubsan/missing_optional_dummy_9.f90 @@ -0,0 +1,22 @@ +! { dg-do compile } +! { dg-options "-O2 -fdump-tree-original -fdump-tree-optimized -fsanitize=undefined" } +! +! PR fortran/122080 - UBSAN: uninitialized stride for missing actual argument +! +! Contributed by Henri Menke + +subroutine outer (optarr) + real, optional, intent(in) :: optarr(:,:) + interface + subroutine inner (optarr) + real, optional, intent(in) :: optarr(:,:) + end subroutine inner + end interface + call inner (optarr) +end subroutine outer + +! There will be 2 remaining UBSAN checks of stride wrapped by a check +! for argument presence: +! +! { dg-final { scan-tree-dump-times "if \\(optarr.0 != 0B\\)" 1 "original" } } +! { dg-final { scan-tree-dump-times "UBSAN_CHECK_SUB (.)* stride" 2 "optimized" } } diff --git a/gcc/testsuite/gfortran.dg/use_only_3.inc b/gcc/testsuite/gfortran.dg/use_only_3.inc index 7b860096b32d..7ef449e00082 100644 --- a/gcc/testsuite/gfortran.dg/use_only_3.inc +++ b/gcc/testsuite/gfortran.dg/use_only_3.inc @@ -397,7 +397,7 @@ END MODULE control_flags REAL(DP) :: ecutw = 0.0d0 REAL(DP) :: gcutw = 0.0d0 - ! values for costant cut-off computations + ! values for constant cut-off computations REAL(DP) :: ecfix = 0.0d0 ! value of the constant cut-off REAL(DP) :: ecutz = 0.0d0 ! height of the penalty function (above ecfix) diff --git a/gcc/testsuite/gm2/errors/fail/testbit2.mod b/gcc/testsuite/gm2/errors/fail/testbit2.mod index d851b0990cc9..0e07a80d6bdf 100644 --- a/gcc/testsuite/gm2/errors/fail/testbit2.mod +++ b/gcc/testsuite/gm2/errors/fail/testbit2.mod @@ -19,11 +19,14 @@ MODULE testbit2 ; FROM StrIO IMPORT WriteString, WriteLn ; +TYPE + index = CARDINAL ; + VAR - c : CARDINAL ; + c : index ; a, b: BITSET ; BEGIN - IF b IN b + IF c IN c THEN WriteString('hmm') ; WriteLn END diff --git a/gcc/testsuite/gm2/iso/run/pass/assigncons.mod b/gcc/testsuite/gm2/iso/run/pass/assigncons.mod new file mode 100644 index 000000000000..b2f00bf6b953 --- /dev/null +++ b/gcc/testsuite/gm2/iso/run/pass/assigncons.mod @@ -0,0 +1,23 @@ +MODULE assigncons ; + + +TYPE + rec = RECORD + x, y: CARDINAL ; + END ; + +CONST + z = rec {1, 2} ; + + +PROCEDURE Init ; +VAR + r: rec ; +BEGIN + r := z +END Init ; + + +BEGIN + Init +END assigncons. diff --git a/gcc/testsuite/gm2/iso/run/pass/constructor3.mod b/gcc/testsuite/gm2/iso/run/pass/constructor3.mod new file mode 100644 index 000000000000..cc94b578021f --- /dev/null +++ b/gcc/testsuite/gm2/iso/run/pass/constructor3.mod @@ -0,0 +1,42 @@ +(* Copyright (C) 2008 Free Software Foundation, Inc. *) +(* This file is part of GNU Modula-2. + +GNU Modula-2 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 2, or (at your option) any later +version. + +GNU Modula-2 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 gm2; see the file COPYING. If not, write to the Free Software +Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *) + +MODULE constructor3 ; + +FROM libc IMPORT exit ; + + +VAR + f: position ; + +TYPE + position = RECORD + x1, y1, x2, y2: CARDINAL ; + END ; + +CONST + first = position{1,2,3,4} ; + +BEGIN + f := first ; + IF (f.x1=1) AND (f.y1=2) AND (f.x2=3) AND (f.y2=4) + THEN + (* all ok *) + ELSE + exit(1) + END +END constructor3. diff --git a/gcc/testsuite/gm2/iso/run/pass/proc_test.mod b/gcc/testsuite/gm2/iso/run/pass/proc_test.mod new file mode 100644 index 000000000000..00242db413b0 --- /dev/null +++ b/gcc/testsuite/gm2/iso/run/pass/proc_test.mod @@ -0,0 +1,10 @@ +MODULE proc_test; + + PROCEDURE Calc () : CARDINAL; + BEGIN + RETURN 2; + END Calc; + +BEGIN + +END proc_test. \ No newline at end of file diff --git a/gcc/testsuite/gm2/iso/run/pass/shift4.mod b/gcc/testsuite/gm2/iso/run/pass/shift4.mod index 26b2d53d9044..b0d0278a457b 100644 --- a/gcc/testsuite/gm2/iso/run/pass/shift4.mod +++ b/gcc/testsuite/gm2/iso/run/pass/shift4.mod @@ -18,7 +18,39 @@ Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *) MODULE shift4 ; FROM libc IMPORT exit, printf ; -FROM SYSTEM IMPORT SHIFT, BITSPERLOC ; +FROM SYSTEM IMPORT SHIFT, BITSPERLOC, TBITSIZE, BYTE ; + + +CONST + EarlyFail = TRUE ; + Verbose = FALSE ; + + +(* + assert - +*) + +PROCEDURE assert (condition: BOOLEAN) ; +BEGIN + IF NOT condition + THEN + printf ("assert failed\n"); + exit (1) + END +END assert ; + + +(* + SanityCheck - +*) + +PROCEDURE SanityCheck ; +BEGIN + assert (MIN (large) = 0) ; + assert (MAX (large) = 1023) ; + assert (TBITSIZE (BYTE) = 8) ; +END SanityCheck ; + TYPE large = SET OF [0..1023] ; @@ -27,37 +59,107 @@ VAR i : INTEGER ; b, c: large ; BEGIN + SanityCheck ; r := 0 ; b := large{1, 2, 3, 1022} ; - b := SHIFT(b, 1) ; + IF b # large{1, 2, 3, 1022} + THEN + printf ("failed to assign a large set with a constant set\n"); + exit (1) + END ; + b := SHIFT(b, 1) ; (* Shift left by 1 bit. *) IF b#large{2, 3, 4, 1023} THEN + printf ("failed (exit 1) as b#large{2, 3, 4, 1023}\n"); exit(1) END ; b := large{1, 2, 3, 1023} ; - b := SHIFT(b, -1) ; + b := SHIFT(b, -1) ; (* Shift right by 1 bit. *) IF b#large{0, 1, 2, 1022} THEN + printf ("failed (exit 2) as b#large{1, 2, 3, 1022}\n"); exit(2) END ; b := large{1+SIZE(BITSET)*BITSPERLOC} ; b := SHIFT(b, -1) ; IF b#large{SIZE(BITSET)*BITSPERLOC} THEN + printf ("failed (exit 3)\n"); exit(3) END ; b := SHIFT(b, -1) ; IF b#large{SIZE(BITSET)*BITSPERLOC-1} THEN + printf ("failed (exit 4)\n"); exit(4) END ; + + printf ("test left shift on byte boundaries\n"); + FOR i := 0 TO MAX(large) BY 8 DO + b := large{0} ; + b := SHIFT(b, i) ; + c := large{i} ; + IF b # c + THEN + printf("failed shift left in loop on iteration %d, failed to shift bit 0 left by %i bits\n", i, i) ; + IF EarlyFail + THEN + exit (5) + END ; + r := 5 + END + END ; + IF r = 0 + THEN + printf ("test left shift on byte boundaries passed\n") + ELSE + printf ("test left shift on byte boundaries failed\n") + END ; + + printf ("test right shift on byte boundaries\n"); + FOR i := 0 TO MAX(large) BY 8 DO + b := large{i} ; + b := SHIFT(b, -i) ; + c := large{0} ; + IF b = c + THEN + IF Verbose + THEN + printf ("success shifted large set right by %d bits\n", i) + END + ELSE + printf("failed shift right in loop on iteration %d\n", i) ; + IF EarlyFail + THEN + exit (6) + END ; + r := 6 + END + END ; + IF r = 0 + THEN + printf ("test right shift on byte boundaries passed\n") + ELSE + printf ("test right shift on byte boundaries failed\n") + END ; + + printf ("test shift on each bit\n"); FOR i := 0 TO MAX(large) DO b := large{0} ; b := SHIFT(b, i) ; c := large{i} ; - IF b#c + IF b = c THEN - printf("failed shift left in loop on iteration %d\n", i) ; + IF Verbose + THEN + printf ("success shifted large set left by %d bits\n", i) + END + ELSE + printf("failed shift left in loop on iteration %d, failed to shift bit 0 left by %i bits\n", i, i) ; + IF EarlyFail + THEN + exit (5) + END ; r := 5 END END ; @@ -65,9 +167,18 @@ BEGIN b := large{i} ; b := SHIFT(b, -i) ; c := large{0} ; - IF b#c + IF b = c THEN + IF Verbose + THEN + printf ("success shifted large set right by %d bits\n", i) + END + ELSE printf("failed shift right in loop on iteration %d\n", i) ; + IF EarlyFail + THEN + exit (6) + END ; r := 6 END END ; diff --git a/gcc/testsuite/gm2/iso/run/pass/simplelarge2.mod b/gcc/testsuite/gm2/iso/run/pass/simplelarge2.mod new file mode 100644 index 000000000000..c78dda894df4 --- /dev/null +++ b/gcc/testsuite/gm2/iso/run/pass/simplelarge2.mod @@ -0,0 +1,99 @@ +(* Copyright (C) 2014 Free Software Foundation, Inc. *) +(* This file is part of GNU Modula-2. + +GNU Modula-2 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 2, or (at your option) any later +version. + +GNU Modula-2 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 gm2; see the file COPYING. If not, write to the Free Software +Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *) + +MODULE simplelarge2 ; + +FROM STextIO IMPORT WriteString, WriteLn, WriteChar, ReadToken, SkipLine ; +FROM SWholeIO IMPORT WriteCard, WriteInt ; +FROM WholeStr IMPORT StrToCard, ConvResults ; +FROM SYSTEM IMPORT CARDINAL8 ; +FROM libc IMPORT printf ; + +CONST + BoardX = 16 ; + BoardY = 16 ; + BoardSize = BoardX * BoardY ; + +TYPE + Squares = [0..BoardSize-1] ; + SoS = SET OF Squares ; + Colour = (Blue, Red, Green, White) ; + +VAR + homeBase: ARRAY [MIN(Colour)..MAX(Colour)] OF SoS ; + + +PROCEDURE dumpSet (c: Colour) ; +VAR + n: CARDINAL ; +BEGIN + printf ("inside dumpSet (%d)\n", ORD(c)) ; + printf (" : 0 2 4 6 8 a c e \n") ; + FOR n := MIN(Squares) TO MAX(Squares) DO + IF n MOD 16 = 0 + THEN + printf ("\nrow %2d: ", n DIV 16) + END ; + IF n IN homeBase[c] + THEN + printf ("1") + ELSE + printf ("0") + END + END ; + printf ("\n") +END dumpSet ; + + +(* + assert - +*) + +PROCEDURE assert (b: BOOLEAN) ; +BEGIN + IF NOT b + THEN + WriteString('assert failed') ; WriteLn ; + HALT + END +END assert ; + + +BEGIN + homeBase[Blue] := SoS {0, 1, 2, 3, + 16, 17, 18, 19, + 32, 33, 34, + 48, 49} ; + + dumpSet(Blue) ; + + assert (0 IN homeBase[Blue]) ; + assert (1 IN homeBase[Blue]) ; + assert (2 IN homeBase[Blue]) ; + assert (3 IN homeBase[Blue]) ; + + homeBase[Blue] := homeBase[Blue] + SoS {4, 20, 35, 50, 65, 64} ; + dumpSet(Blue) ; + + assert (0 IN homeBase[Blue]) ; + assert (1 IN homeBase[Blue]) ; + assert (2 IN homeBase[Blue]) ; + assert (3 IN homeBase[Blue]) ; + assert (4 IN homeBase[Blue]) ; + assert (NOT (5 IN homeBase[Blue])) ; + assert (NOT (6 IN homeBase[Blue])) ; +END simplelarge2. diff --git a/gcc/testsuite/gm2/iso/run/pass/simplelarge3.mod b/gcc/testsuite/gm2/iso/run/pass/simplelarge3.mod new file mode 100644 index 000000000000..41742affd952 --- /dev/null +++ b/gcc/testsuite/gm2/iso/run/pass/simplelarge3.mod @@ -0,0 +1,88 @@ +(* Copyright (C) 2014 Free Software Foundation, Inc. *) +(* This file is part of GNU Modula-2. + +GNU Modula-2 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 2, or (at your option) any later +version. + +GNU Modula-2 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 gm2; see the file COPYING. If not, write to the Free Software +Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *) + +MODULE simplelarge3 ; + +FROM STextIO IMPORT WriteString, WriteLn, WriteChar, ReadToken, SkipLine ; +FROM SWholeIO IMPORT WriteCard, WriteInt ; +FROM WholeStr IMPORT StrToCard, ConvResults ; +FROM SYSTEM IMPORT CARDINAL8 ; +FROM libc IMPORT printf ; + +CONST + BoardX = 16 ; + BoardY = 16 ; + BoardSize = BoardX * BoardY ; + +TYPE + Squares = [0..BoardSize-1] ; + SoS = SET OF Squares ; + Colour = (Blue, Red, Green, White) ; + +VAR + homeBase: ARRAY [MIN(Colour)..MAX(Colour)] OF SoS ; + + +PROCEDURE dumpSet (c: Colour) ; +VAR + n: CARDINAL ; +BEGIN + printf ("inside dumpSet (%d)\n", ORD(c)) ; + printf (" : 0 2 4 6 8 a c e \n") ; + FOR n := MIN(Squares) TO MAX(Squares) DO + IF n MOD 16 = 0 + THEN + printf ("\nrow %2d: ", n DIV 16) + END ; + IF n IN homeBase[c] + THEN + printf ("1") + ELSE + printf ("0") + END + END ; + printf ("\n") +END dumpSet ; + + +(* + assert - +*) + +PROCEDURE assert (b: BOOLEAN) ; +BEGIN + IF NOT b + THEN + WriteString('assert failed') ; WriteLn ; + HALT + END +END assert ; + + +BEGIN + homeBase[Blue] := SoS {0, 1, 2, 3, + 16, 17, 18, 19, + 32, 33, 34, + 48, 49} ; + + dumpSet(Blue) ; + + homeBase[Blue] := homeBase[Blue] + SoS {4, 20, 35, 50, 65, 64} ; + dumpSet(Blue) ; + + assert (0 IN homeBase[Blue]) +END simplelarge3. diff --git a/gcc/testsuite/gm2/iso/run/pass/simplelarge4.mod b/gcc/testsuite/gm2/iso/run/pass/simplelarge4.mod new file mode 100644 index 000000000000..ea9fa6191215 --- /dev/null +++ b/gcc/testsuite/gm2/iso/run/pass/simplelarge4.mod @@ -0,0 +1,88 @@ +(* Copyright (C) 2014 Free Software Foundation, Inc. *) +(* This file is part of GNU Modula-2. + +GNU Modula-2 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 2, or (at your option) any later +version. + +GNU Modula-2 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 gm2; see the file COPYING. If not, write to the Free Software +Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *) + +MODULE simplelarge4 ; + +FROM STextIO IMPORT WriteString, WriteLn, WriteChar, ReadToken, SkipLine ; +FROM SWholeIO IMPORT WriteCard, WriteInt ; +FROM WholeStr IMPORT StrToCard, ConvResults ; +FROM SYSTEM IMPORT CARDINAL8 ; +FROM libc IMPORT printf ; + +CONST + BoardX = 16 ; + BoardY = 16 ; + BoardSize = BoardX * BoardY ; + +TYPE + Squares = [0..BoardSize-1] ; + SoS = SET OF Squares ; + Colour = (Blue, Red, Green, White) ; + +VAR + homeBase: SoS ; + + +PROCEDURE dumpSet (c: Colour) ; +VAR + n: CARDINAL ; +BEGIN + printf ("inside dumpSet (%d)\n", ORD(c)) ; + printf (" : 0 2 4 6 8 a c e \n") ; + FOR n := MIN(Squares) TO MAX(Squares) DO + IF n MOD 16 = 0 + THEN + printf ("\nrow %2d: ", n DIV 16) + END ; + IF n IN homeBase + THEN + printf ("1") + ELSE + printf ("0") + END + END ; + printf ("\n") +END dumpSet ; + + +(* + assert - +*) + +PROCEDURE assert (b: BOOLEAN) ; +BEGIN + IF NOT b + THEN + WriteString('assert failed') ; WriteLn ; + HALT + END +END assert ; + + +BEGIN + homeBase := SoS {0, 1, 2, 3, + 16, 17, 18, 19, + 32, 33, 34, + 48, 49} ; + + dumpSet(Blue) ; + + homeBase := homeBase + SoS {4, 20, 35, 50, 65, 64} ; + dumpSet(Blue) ; + + assert (0 IN homeBase) +END simplelarge4. diff --git a/gcc/testsuite/gm2/iso/run/pass/testsystem.mod b/gcc/testsuite/gm2/iso/run/pass/testsystem.mod index c22f25be0c6f..51c7162e4b67 100644 --- a/gcc/testsuite/gm2/iso/run/pass/testsystem.mod +++ b/gcc/testsuite/gm2/iso/run/pass/testsystem.mod @@ -29,7 +29,7 @@ FROM FIO IMPORT Close, StdOut ; PROCEDURE FindFirstElement (start: CARDINAL; s: LargeSet) : CARDINAL ; BEGIN - WHILE NOT (start IN s) DO + WHILE (start < 1024) AND (NOT (start IN s)) DO INC(start) END ; RETURN( start ) diff --git a/gcc/testsuite/gm2/pimlib/wideset/run/pass/bitset.mod b/gcc/testsuite/gm2/pimlib/wideset/run/pass/bitset.mod new file mode 100644 index 000000000000..e5a6ba40b69c --- /dev/null +++ b/gcc/testsuite/gm2/pimlib/wideset/run/pass/bitset.mod @@ -0,0 +1,46 @@ +MODULE bitset ; + +FROM libc IMPORT printf, exit ; +FROM M2WIDESET IMPORT Equal, Clear ; + +TYPE + set = BITSET ; + +CONST + HighBit = MAX (set) ; + + +(* + Assert - +*) + +PROCEDURE Assert (bool: BOOLEAN; line: CARDINAL) ; +BEGIN + IF NOT bool + THEN + printf ("%s:%d:assert failed\n", __FILE__, line); + exit (1) + END +END Assert ; + + +(* + init - +*) + +PROCEDURE init ; +VAR + left, right: set ; +BEGIN + left := set {} ; + right := set {1} ; + Assert (NOT Equal (left, right, HighBit), __LINE__) ; + Clear (right, HighBit) ; + Assert (Equal (left, right, HighBit), __LINE__) ; + printf ("All tests pass in %s\n", __FILE__) +END init ; + + +BEGIN + init +END bitset. diff --git a/gcc/testsuite/gm2/pimlib/wideset/run/pass/bitset2.mod b/gcc/testsuite/gm2/pimlib/wideset/run/pass/bitset2.mod new file mode 100644 index 000000000000..2466a63ea386 --- /dev/null +++ b/gcc/testsuite/gm2/pimlib/wideset/run/pass/bitset2.mod @@ -0,0 +1,43 @@ +MODULE bitset ; + +FROM libc IMPORT printf, exit ; +FROM M2WIDESET IMPORT Equal, Clear ; + +CONST + HighBit = MAX (BITSET) ; + + +(* + Assert - +*) + +PROCEDURE Assert (bool: BOOLEAN; line: CARDINAL) ; +BEGIN + IF NOT bool + THEN + printf ("%s:%d:assert failed\n", __FILE__, line); + exit (1) + END +END Assert ; + + +(* + init - +*) + +PROCEDURE init ; +VAR + left, right: BITSET ; +BEGIN + left := BITSET {} ; + right := BITSET {1} ; + Assert (NOT Equal (left, right, HighBit), __LINE__) ; + Clear (right, HighBit) ; + Assert (Equal (left, right, HighBit), __LINE__) ; + printf ("All tests pass in %s\n", __FILE__) +END init ; + + +BEGIN + init +END bitset. diff --git a/gcc/testsuite/gm2/pimlib/wideset/run/pass/colorset.mod b/gcc/testsuite/gm2/pimlib/wideset/run/pass/colorset.mod new file mode 100644 index 000000000000..61b609635e91 --- /dev/null +++ b/gcc/testsuite/gm2/pimlib/wideset/run/pass/colorset.mod @@ -0,0 +1,47 @@ +MODULE colorset ; + +FROM libc IMPORT printf, exit ; +FROM M2WIDESET IMPORT Equal, Clear ; + +TYPE + color = SET OF (red, green, blue) ; + set = color ; + +CONST + HighBit = MAX (set) ; + + +(* + Assert - +*) + +PROCEDURE Assert (bool: BOOLEAN; line: CARDINAL) ; +BEGIN + IF NOT bool + THEN + printf ("%s:%d:assert failed\n", __FILE__, line); + exit (1) + END +END Assert ; + + +(* + init - +*) + +PROCEDURE init ; +VAR + left, right: set ; +BEGIN + left := set {} ; + right := set {green} ; + Assert (NOT Equal (left, right, HighBit), __LINE__) ; + Clear (right, HighBit) ; + Assert (Equal (left, right, HighBit), __LINE__) ; + printf ("All tests pass in %s\n", __FILE__) +END init ; + + +BEGIN + init +END colorset. diff --git a/gcc/testsuite/gm2/pimlib/wideset/run/pass/colorset2.mod b/gcc/testsuite/gm2/pimlib/wideset/run/pass/colorset2.mod new file mode 100644 index 000000000000..41b8a3be52fe --- /dev/null +++ b/gcc/testsuite/gm2/pimlib/wideset/run/pass/colorset2.mod @@ -0,0 +1,72 @@ +MODULE colorset2 ; + +FROM libc IMPORT printf, exit ; +FROM M2WIDESET IMPORT Equal, Clear, Shift, Rotate ; + +TYPE + color = SET OF (red, green, blue) ; + set = color ; + +CONST + HighBit = MAX (set) ; + + +(* + Assert - +*) + +PROCEDURE Assert (bool: BOOLEAN; line: CARDINAL) ; +BEGIN + IF NOT bool + THEN + printf ("%s:%d:assert failed\n", __FILE__, line); + exit (1) + END +END Assert ; + + +(* + init - +*) + +PROCEDURE init ; +VAR + left, right: set ; +BEGIN + left := set {} ; + right := set {green} ; + Assert (NOT Equal (left, right, HighBit), __LINE__) ; + Clear (right, HighBit) ; + Assert (Equal (left, right, HighBit), __LINE__) ; + + left := set {red} ; + right := set {green} ; + Assert (NOT Equal (left, right, HighBit), __LINE__) ; + Shift (right, right, MAX (set), -1) ; + Assert (Equal (left, right, HighBit), __LINE__) ; + left := set {red} ; + right := set {green} ; + Shift (left, left, MAX (set), 1) ; + Assert (Equal (left, right, HighBit), __LINE__) ; + + left := set {red} ; + right := set {green} ; + Rotate (left, left, MAX (set), 1) ; + Assert (Equal (left, right, HighBit), __LINE__) ; + + left := set {green} ; + right := set {red} ; + Rotate (left, left, MAX (set), -1) ; + Assert (Equal (left, right, HighBit), __LINE__) ; + + left := set {red} ; + right := set {blue} ; + Rotate (left, left, MAX (set), -1) ; + Assert (Equal (left, right, HighBit), __LINE__) ; + printf ("All tests pass in %s\n", __FILE__) +END init ; + + +BEGIN + init +END colorset2. diff --git a/gcc/testsuite/gm2/pimlib/wideset/run/pass/colorset3.mod b/gcc/testsuite/gm2/pimlib/wideset/run/pass/colorset3.mod new file mode 100644 index 000000000000..170abb0ff605 --- /dev/null +++ b/gcc/testsuite/gm2/pimlib/wideset/run/pass/colorset3.mod @@ -0,0 +1,46 @@ +MODULE colorset3 ; + +FROM libc IMPORT printf, exit ; +FROM M2WIDESET IMPORT Equal, Clear, Shift, Rotate ; + +TYPE + color = SET OF (red, green, blue) ; + set = color ; + +CONST + HighBit = MAX (set) ; + + +(* + Assert - +*) + +PROCEDURE Assert (bool: BOOLEAN; line: CARDINAL) ; +BEGIN + IF NOT bool + THEN + printf ("%s:%d:assert failed\n", __FILE__, line); + exit (1) + END +END Assert ; + + +(* + init - +*) + +PROCEDURE init ; +VAR + left, right: set ; +BEGIN + left := set {green} ; + right := set {red} ; + Rotate (left, left, MAX (set), -1) ; + Assert (Equal (left, right, HighBit), __LINE__) ; + printf ("All tests pass in %s\n", __FILE__) +END init ; + + +BEGIN + init +END colorset3. diff --git a/gcc/testsuite/gm2/pimlib/wideset/run/pass/highbit.mod b/gcc/testsuite/gm2/pimlib/wideset/run/pass/highbit.mod new file mode 100644 index 000000000000..c9c872a62f31 --- /dev/null +++ b/gcc/testsuite/gm2/pimlib/wideset/run/pass/highbit.mod @@ -0,0 +1,13 @@ +MODULE highbit ; + +FROM libc IMPORT printf ; + +TYPE + set = BITSET ; + +CONST + HighBit = MAX (set) ; + +BEGIN + printf ("the MAX (set) = %d\n", HighBit) +END highbit. diff --git a/gcc/testsuite/gm2/pimlib/wideset/run/pass/highbit2.mod b/gcc/testsuite/gm2/pimlib/wideset/run/pass/highbit2.mod new file mode 100644 index 000000000000..940556da5fe9 --- /dev/null +++ b/gcc/testsuite/gm2/pimlib/wideset/run/pass/highbit2.mod @@ -0,0 +1,13 @@ +MODULE highbit2 ; + +FROM libc IMPORT printf ; + +TYPE + set = BITSET ; + +CONST + HighBit = MAX (BITSET) ; + +BEGIN + printf ("the MAX (BITSET) = %d\n", HighBit) +END highbit2. diff --git a/gcc/testsuite/gm2/sets/run/pass/multisetrotate4.mod b/gcc/testsuite/gm2/sets/run/pass/multisetrotate4.mod index f7524eb9444d..19a085be2bca 100644 --- a/gcc/testsuite/gm2/sets/run/pass/multisetrotate4.mod +++ b/gcc/testsuite/gm2/sets/run/pass/multisetrotate4.mod @@ -18,7 +18,7 @@ Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *) MODULE multisetrotate4 ; FROM libc IMPORT printf, exit ; -FROM SYSTEM IMPORT ROTATE, WORD, BITSPERLOC ; +FROM SYSTEM IMPORT ROTATE, WORD, BITSPERLOC, TBITSIZE ; TYPE multi = SET OF [0..SIZE (WORD) * 2 * BITSPERLOC-1] ; @@ -29,12 +29,21 @@ VAR BEGIN set := multi {1} ; bits := SIZE (multi) * BITSPERLOC ; + IF bits # TBITSIZE (set) + THEN + printf ("test code is invalid, set must match TBITSIZE\n"); + exit (3) + END ; IF ROTATE (set, bits-1) # multi {0} THEN + printf ("rotate %d on a set type of %d bits failed\n", + bits-1, bits) ; exit (1) END ; IF ROTATE (set, -(bits - 1)) # multi {2} THEN + printf ("rotate %d on a set type of %d bits failed\n", + - (bits-1), bits) ; exit (2) END ; exit (0) diff --git a/gcc/testsuite/gm2/sets/run/pass/multisetrotate5.mod b/gcc/testsuite/gm2/sets/run/pass/multisetrotate5.mod new file mode 100644 index 000000000000..ff0e28849cff --- /dev/null +++ b/gcc/testsuite/gm2/sets/run/pass/multisetrotate5.mod @@ -0,0 +1,70 @@ +(* Copyright (C) 2025 Free Software Foundation, Inc. *) +(* This file is part of GNU Modula-2. + +GNU Modula-2 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 2, or (at your option) any later +version. + +GNU Modula-2 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 gm2; see the file COPYING. If not, write to the Free Software +Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *) + +MODULE multisetrotate5 ; + +FROM libc IMPORT printf, exit ; +FROM SYSTEM IMPORT ROTATE, WORD, BITSPERLOC ; + +TYPE + multi = SET OF [0..SIZE (WORD) * 2 * BITSPERLOC-1] ; + + +(* + dump - +*) + +PROCEDURE dump (s: multi) ; +VAR + bits, i: CARDINAL ; +BEGIN + bits := SIZE (multi) * BITSPERLOC -1; + FOR i := 0 TO bits DO + printf (" %2d", i) + END ; + printf ("\n") ; + FOR i := 0 TO bits DO + IF i IN s + THEN + printf (" X") + ELSE + printf (" ") + END + END ; + printf ("\n") +END dump ; + + +VAR + set : multi ; + bits: INTEGER ; +BEGIN + dump (multi {1}) ; + dump (multi {2}) ; + set := multi {2} ; + dump (set) ; + set := multi {1} ; + dump (set) ; + IF ROTATE (set, 1) = multi {2} + THEN + exit (0) + END ; + set := multi {2} ; + set := ROTATE (set, 1) ; + dump (set) ; + exit (1) +END multisetrotate5. diff --git a/gcc/testsuite/gm2/sets/run/pass/setcard.mod b/gcc/testsuite/gm2/sets/run/pass/setcard.mod new file mode 100644 index 000000000000..5b964b931497 --- /dev/null +++ b/gcc/testsuite/gm2/sets/run/pass/setcard.mod @@ -0,0 +1,18 @@ +MODULE setcard ; + +FROM libc IMPORT exit ; + +TYPE + large = SET OF CARDINAL ; +VAR + set: large ; +BEGIN + set := large {} ; + INCL (set, 2) ; + IF 2 IN set + THEN + exit (0) + ELSE + exit (1) + END +END setcard. diff --git a/gcc/testsuite/gm2/sets/run/pass/setincl.mod b/gcc/testsuite/gm2/sets/run/pass/setincl.mod new file mode 100644 index 000000000000..ad65b1aff424 --- /dev/null +++ b/gcc/testsuite/gm2/sets/run/pass/setincl.mod @@ -0,0 +1,51 @@ +(* Copyright (C) 2024 Free Software Foundation, Inc. *) +(* This file is part of GNU Modula-2. + +GNU Modula-2 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 2, or (at your option) any later +version. + +GNU Modula-2 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 gm2; see the file COPYING. If not, write to the Free Software +Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *) + +MODULE setincl ; + +FROM libc IMPORT printf, exit ; +FROM SYSTEM IMPORT ROTATE ; + + +PROCEDURE incl (VAR set: BITSET; bit: CARDINAL) ; +BEGIN + INCL (set, bit) +END incl ; + + +PROCEDURE excl (VAR set: BITSET; bit: CARDINAL) ; +BEGIN + EXCL (set, bit) +END excl ; + + +VAR + set: BITSET ; +BEGIN + set := BITSET {} ; + incl (set, 1) ; + IF set # BITSET {1} + THEN + exit (1) + END ; + excl (set, 1) ; + IF set # BITSET {} + THEN + exit (2) + END ; + exit (0) +END setincl. diff --git a/gcc/testsuite/gm2/sets/run/pass/simplepacked.mod b/gcc/testsuite/gm2/sets/run/pass/simplepacked.mod index 4cc598baca4b..d173700b7289 100644 --- a/gcc/testsuite/gm2/sets/run/pass/simplepacked.mod +++ b/gcc/testsuite/gm2/sets/run/pass/simplepacked.mod @@ -57,7 +57,7 @@ BEGIN assert (ROTATE (psettype {1}, 1) = ROTATE (psettype {1}, 1), __LINE__, "comparision between constant rotated packed sets") ; assert (ROTATE (psettype {1}, 1) # ROTATE (psettype {2}, 1), __LINE__, "comparision between constant rotated packed sets") ; assert (ROTATE (a, 1) = psettype {2}, __LINE__, "comparision between rotated variable and constant packed sets") ; - assert (ROTATE (a, -1) = settype {0}, __LINE__, "comparision between rotated variable and constant packed sets") ; + assert (ROTATE (a, -1) = psettype {0}, __LINE__, "comparision between rotated variable and constant packed sets") ; END testpset ; diff --git a/gcc/testsuite/gnat.dg/allocator3.adb b/gcc/testsuite/gnat.dg/allocator3.adb new file mode 100644 index 000000000000..ac04344fbb1d --- /dev/null +++ b/gcc/testsuite/gnat.dg/allocator3.adb @@ -0,0 +1,23 @@ +-- { dg-do compile } + +with Ada.Containers.Synchronized_Queue_Interfaces; +with Ada.Containers.Unbounded_Synchronized_Queues; + +procedure Allocator3 is + + package Queue_Interfaces is + new Ada.Containers.Synchronized_Queue_Interfaces (Integer); + + package Synchronized_Queues is + new Ada.Containers.Unbounded_Synchronized_Queues (Queue_Interfaces); + + subtype Queue is Synchronized_Queues.Queue; + + type Access_Type is access all Queue; + + Q1 : Access_Type := new Queue; + Q2 : Access_Type := new Queue; + +begin + null; +end; diff --git a/gcc/testsuite/gnat.dg/reduce1.adb b/gcc/testsuite/gnat.dg/reduce1.adb new file mode 100644 index 000000000000..601be4bcbcb0 --- /dev/null +++ b/gcc/testsuite/gnat.dg/reduce1.adb @@ -0,0 +1,14 @@ +-- { dg-do compile } +-- { dg-options "-gnat2022" } + +procedure Reduce1 is + + type Arr is array (Positive range <>) of Positive; + + A: Arr := (2, 87); + + B: Positive := A'Reduce (1, Positive'Max); -- { dg-error "no suitable" } + +begin + null; +end; diff --git a/gcc/testsuite/gnat.dg/reduce2.adb b/gcc/testsuite/gnat.dg/reduce2.adb new file mode 100644 index 000000000000..0246709ec43a --- /dev/null +++ b/gcc/testsuite/gnat.dg/reduce2.adb @@ -0,0 +1,18 @@ +-- { dg-do compile } +-- { dg-options "-gnat2022" } + +procedure Reduce2 is + + subtype Value is Natural range 0 .. 255; + + function Do_Something (Accumulator : Value; Symbol : Character) return Value + is (((Accumulator + Character'Pos (Symbol)) * 17) mod 256); + + function Do_It_By_Reduction (S : String) return Value is + (S'Reduce (Do_Something, 0)); + + Test_It : constant Value := Do_It_By_Reduction ("Hello, world!"); + +begin + null; +end; diff --git a/gcc/testsuite/gnat.dg/use_type1.adb b/gcc/testsuite/gnat.dg/use_type1.adb new file mode 100644 index 000000000000..a32461014ae5 --- /dev/null +++ b/gcc/testsuite/gnat.dg/use_type1.adb @@ -0,0 +1,16 @@ +-- { dg-do compile } + +procedure Use_Type1 is + + package Nested is + type T is (X, Y, Z); + procedure Proc (Obj : T) is null; + end Nested; + + use all type Nested.T; + + Obj : Nested.T := X; + +begin + Proc (Obj); +end; diff --git a/gcc/testsuite/gnat.dg/use_type2.adb b/gcc/testsuite/gnat.dg/use_type2.adb new file mode 100644 index 000000000000..82996363d676 --- /dev/null +++ b/gcc/testsuite/gnat.dg/use_type2.adb @@ -0,0 +1,15 @@ +-- { dg-do compile } + +with Ada.Containers.Vectors; + +procedure Use_Type2 is + + package Vectors is new Ada.Containers.Vectors (Positive, Character); + + use all type Vectors.Vector; + + X : Vectors.Vector := To_Vector (0); + +begin + Append (X, 'A'); +end; diff --git a/gcc/testsuite/jit.dg/all-non-failing-tests.h b/gcc/testsuite/jit.dg/all-non-failing-tests.h index add5619aebd4..4aa18e3b7678 100644 --- a/gcc/testsuite/jit.dg/all-non-failing-tests.h +++ b/gcc/testsuite/jit.dg/all-non-failing-tests.h @@ -424,6 +424,9 @@ #undef create_code #undef verify_code +/* test-target-info.c: This can't be in the testcases array as it + is target-specific. */ + /* test-types.c */ #define create_code create_code_types #define verify_code verify_code_types diff --git a/gcc/testsuite/jit.dg/test-error-target-info.c b/gcc/testsuite/jit.dg/test-error-target-info.c new file mode 100644 index 000000000000..a2426458285d --- /dev/null +++ b/gcc/testsuite/jit.dg/test-error-target-info.c @@ -0,0 +1,60 @@ +/* { dg-do compile { target x86_64-*-* } } */ + +#include +#include + +#include "libgccjit.h" + +#define TEST_PROVIDES_MAIN +#include "harness.h" + +void +create_code (gcc_jit_context *ctxt, void *user_data) +{ +} + +void +verify_code (gcc_jit_context *ctxt, gcc_jit_result *result) +{ +} + +int +main (int argc, char **argv) +{ + /* This is the same as the main provided by harness.h, but calls gcc_jit_context_get_target_info. */ + gcc_jit_context *ctxt; + ctxt = gcc_jit_context_acquire (); + if (!ctxt) + { + fail ("gcc_jit_context_acquire failed"); + return -1; + } + gcc_jit_target_info* info = gcc_jit_context_get_target_info (ctxt); + gcc_jit_context_compile (ctxt); + + gcc_jit_target_info_release (info); + + /* Verify that the correct error message was emitted. */ + CHECK_STRING_VALUE (gcc_jit_context_get_last_error (ctxt), + "cannot compile after calling gcc_jit_context_get_target_info"); + + gcc_jit_context_release (ctxt); + + int i; + + for (i = 1; i <= 5; i++) + { + snprintf (test, sizeof (test), + "%s iteration %d of %d", + extract_progname (argv[0]), + i, 5); + + //printf ("ITERATION %d\n", i); + test_jit (argv[0], NULL); + //printf ("\n"); + } + + totals (); + + return 0; +} diff --git a/gcc/testsuite/jit.dg/test-target-info.c b/gcc/testsuite/jit.dg/test-target-info.c new file mode 100644 index 000000000000..edae18aa1143 --- /dev/null +++ b/gcc/testsuite/jit.dg/test-target-info.c @@ -0,0 +1,61 @@ +/* { dg-do compile { target x86_64-*-* } } */ + +#include +#include + +#include "libgccjit.h" + +#define TEST_PROVIDES_MAIN +#include "harness.h" + +void +create_code (gcc_jit_context *ctxt, void *user_data) +{ +} + +void +verify_code (gcc_jit_context *ctxt, gcc_jit_result *result) +{ +} + +int +main (int argc, char **argv) +{ + /* This is the same as the main provided by harness.h, but calls gcc_jit_context_get_target_info. */ + gcc_jit_context *ctxt; + ctxt = gcc_jit_context_acquire (); + if (!ctxt) + { + fail ("gcc_jit_context_acquire failed"); + return -1; + } + gcc_jit_target_info* info = gcc_jit_context_get_target_info (ctxt); + + int sse2_supported = gcc_jit_target_info_cpu_supports (info, "sse2"); + CHECK_VALUE (sse2_supported, 1); + + int supports_128bit_int = + gcc_jit_target_info_supports_target_dependent_type (info, + GCC_JIT_TYPE_INT128_T); + CHECK_VALUE (supports_128bit_int, 1); + gcc_jit_target_info_release (info); + gcc_jit_context_release (ctxt); + + int i; + + for (i = 1; i <= 5; i++) + { + snprintf (test, sizeof (test), + "%s iteration %d of %d", + extract_progname (argv[0]), + i, 5); + + //printf ("ITERATION %d\n", i); + test_jit (argv[0], NULL); + //printf ("\n"); + } + + totals (); + + return 0; +} diff --git a/gcc/testsuite/lib/gm2.exp b/gcc/testsuite/lib/gm2.exp index 5760bc02b1e5..1b03118ccd53 100644 --- a/gcc/testsuite/lib/gm2.exp +++ b/gcc/testsuite/lib/gm2.exp @@ -633,6 +633,7 @@ proc gm2_init_minx { dialect paths args } { gm2_link_lib "m2min" lappend args -fno-exceptions lappend args -fno-libs=- + lappend args -fno-wideset gm2_init {*}${theIpath} {*}${dialect} {*}${theLpath} {*}${args} } diff --git a/gcc/testsuite/lib/lto.exp b/gcc/testsuite/lib/lto.exp index 81519b580e13..9231e8550afb 100644 --- a/gcc/testsuite/lib/lto.exp +++ b/gcc/testsuite/lib/lto.exp @@ -659,9 +659,9 @@ proc lto-execute-1 { src1 sid } { set i 1 set done 0 while { !$done } { - set names [glob -nocomplain -types f -- "${dir}/${base}_${i}.*"] + set names [glob -nocomplain -types f -- "${dir}/${base}_${i}.{c,C,ii,\[fF\]{,90,95,03,08},d,m,mm}"] if { [llength ${names}] > 1 } { - warning "lto-execute: more than one file matched ${dir}/${base}_${i}.*" + warning "lto-execute: more than one file matched ${dir}/${base}_${i}.{c,C,ii,\[fF\]{,90,95,03,08},d,m,mm}" } if { [llength ${names}] == 1 } { lappend src_list [lindex ${names} 0] diff --git a/gcc/testsuite/lib/sarif.py b/gcc/testsuite/lib/sarif.py index d75a87ec73a2..f0b3ddd9745d 100644 --- a/gcc/testsuite/lib/sarif.py +++ b/gcc/testsuite/lib/sarif.py @@ -1,6 +1,5 @@ import json import os -import xml.etree.ElementTree as ET def sarif_from_env(): # return parsed JSON content a SARIF_PATH file diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp index 957fa7f3599e..1acfb373bebb 100644 --- a/gcc/testsuite/lib/target-supports.exp +++ b/gcc/testsuite/lib/target-supports.exp @@ -10053,7 +10053,13 @@ proc check_effective_target_sync_int_128 { } { # This requires support for both compare-and-swap and true atomic loads. proc check_effective_target_sync_int_128_runtime { } { - return 0 + if { [istarget loongarch64-*-*] + && [check_effective_target_loongarch_sx_hw] + && [check_effective_target_loongarch_scq_hw] } { + return 1 + } else { + return 0 + } } # Return 1 if the target supports atomic operations on "long long". @@ -14314,6 +14320,18 @@ proc check_effective_target_loongarch_asx_hw { } { } "-mlasx"] } +proc check_effective_target_loongarch_scq_hw { } { + return [check_runtime loongarch_scq_hw { + #include + int main (void) + { + if (__cpucfg (2) & (1 << 30)) + return 0; + __builtin_trap (); + } + } ""] +} + # Check whether LoongArch binutils supports call36 relocation. proc check_effective_target_loongarch_call36_support { } { return [check_no_compiler_messages loongarch_call36_support object { diff --git a/gcc/testsuite/libgdiagnostics.dg/test-fix-it-hint-c.py b/gcc/testsuite/libgdiagnostics.dg/test-fix-it-hint-c.py index f3dc71c27b56..cf1466e6983e 100644 --- a/gcc/testsuite/libgdiagnostics.dg/test-fix-it-hint-c.py +++ b/gcc/testsuite/libgdiagnostics.dg/test-fix-it-hint-c.py @@ -37,6 +37,7 @@ def test_sarif_output_with_fixes(sarif): assert len(results[0]['fixes']) == 1 fix = results[0]['fixes'][0] + assert fix['description']['text'] == "Replace 'colour' with 'color'" assert len(fix['artifactChanges']) == 1 change = fix['artifactChanges'][0] assert change['artifactLocation']['uri'].endswith('test-fix-it-hint.c') diff --git a/gcc/testsuite/objc.dg/special/load-category-1.m b/gcc/testsuite/objc.dg/special/load-category-1.m index b72d0709044e..1f488124a610 100644 --- a/gcc/testsuite/objc.dg/special/load-category-1.m +++ b/gcc/testsuite/objc.dg/special/load-category-1.m @@ -1,7 +1,7 @@ /* Contributed by Nicola Pero , December 2010. */ /* { dg-do run } */ /* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */ -/* { dg-additional-options "-Wno-objc-root-class" } */ +/* { dg-additional-sources "load-category-1a.m" } */ #include #include diff --git a/gcc/testsuite/objc.dg/special/load-category-2.m b/gcc/testsuite/objc.dg/special/load-category-2.m index 2706351da223..124eed8f4241 100644 --- a/gcc/testsuite/objc.dg/special/load-category-2.m +++ b/gcc/testsuite/objc.dg/special/load-category-2.m @@ -1,7 +1,7 @@ /* Contributed by Nicola Pero , December 2010. */ /* { dg-do run } */ /* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */ -/* { dg-additional-options "-Wno-objc-root-class" } */ +/* { dg-additional-sources "load-category-2a.m" } */ #include #include diff --git a/gcc/testsuite/objc.dg/special/load-category-3.m b/gcc/testsuite/objc.dg/special/load-category-3.m index 215e463fcbe1..751c6e3bede9 100644 --- a/gcc/testsuite/objc.dg/special/load-category-3.m +++ b/gcc/testsuite/objc.dg/special/load-category-3.m @@ -1,7 +1,7 @@ /* Contributed by Nicola Pero , December 2010. */ /* { dg-do run } */ /* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */ -/* { dg-additional-options "-Wno-objc-root-class" } */ +/* { dg-additional-sources "load-category-3a.m" } */ /* This test is identical to load-category-2, but the classes and categories are created in inverted order in the modules, to test diff --git a/gcc/testsuite/objc.dg/special/special.exp b/gcc/testsuite/objc.dg/special/special.exp index a997052d78dd..c28358867be6 100644 --- a/gcc/testsuite/objc.dg/special/special.exp +++ b/gcc/testsuite/objc.dg/special/special.exp @@ -1,16 +1,19 @@ -# GCC Objective-C testsuite that uses the `dg.exp' driver. -# Copyright (C) 1997-2025 Free Software Foundation, Inc. +# All these testcases compile and link two Objective-C modules.. -# 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. +# Copyright (C) 2025 Free Software Foundation, Inc. # -# This program is distributed in the hope that it will be useful, +# 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 # . @@ -24,130 +27,30 @@ if ![info exists DEFAULT_CFLAGS] then { set DEFAULT_CFLAGS "" } +set extra_flags "$DEFAULT_CFLAGS -Wno-objc-root-class" + # Initialize `dg'. dg-init -# TODO: All these testcases compile and link two Objective-C modules. -# Remove code duplication and factor the common code out. - -# -# unclaimed-category-1 test -# -# This test is special because we must compile two different modules, -# unclaimed-category-1a.m and unclaimed-category-1.m, then link -# together, then run the resulting executable. -# for all systems we point to the libobjc includes and use the -fgnu-runtime -set add_flags "additional_flags=-I${srcdir}/../../libobjc" -lappend add_flags "additional_flags=-fgnu-runtime" -lappend add_flags "additional_flags=-Wno-objc-root-class" -set lines [objc_target_compile "$srcdir/$subdir/unclaimed-category-1a.m" "unclaimed-category-1a.o" object $add_flags ] -if ![string match "" $lines] then { - fail "unclaimed-category-1a.o" -} else { - dg-runtest "$srcdir/$subdir/unclaimed-category-1.m" "unclaimed-category-1a.o" "-I${srcdir}/../../libobjc -fgnu-runtime" - file delete unclaimed-category-1a.o -} - -if [istarget "*-*-darwin*" ] { -set add_flags "" -lappend add_flags "additional_flags=-fnext-runtime" -lappend add_flags "additional_flags=-Wno-objc-root-class" -set lines [objc_target_compile "$srcdir/$subdir/unclaimed-category-1a.m" "unclaimed-category-1a.o" object $add_flags ] -if ![string match "" $lines] then { - fail "unclaimed-category-1a.o" -} else { - dg-runtest "$srcdir/$subdir/unclaimed-category-1.m" "unclaimed-category-1a.o" "-fnext-runtime" - file delete unclaimed-category-1a.o -} +# Gather a list of all objective-c sources. +set all_srcs [lsort [glob -nocomplain $srcdir/$subdir/*.m]] +# Remove the ones ending in a.m +set tests "" +set pat "a\.m" +foreach t $all_srcs { + if { [string match *$pat $t] } { + continue + } + lappend tests $t } -# -# load-category-1 test -# -# This test is similar to the one above. We compile load-category-1.m -# and load-category-1a.m, link them together, and execute the result. -set add_flags "additional_flags=-I${srcdir}/../../libobjc" -lappend add_flags "additional_flags=-fgnu-runtime" -lappend add_flags "additional_flags=-Wno-objc-root-class" -set lines [objc_target_compile "$srcdir/$subdir/load-category-1a.m" "load-category-1a.o" object $add_flags ] -if ![string match "" $lines] then { - fail "load-category-1a.o" -} else { - dg-runtest "$srcdir/$subdir/load-category-1.m" "load-category-1a.o" "-I${srcdir}/../../libobjc -fgnu-runtime" - file delete load-category-1a.o -} +# Main loop. +dg-runtest $tests "-fgnu-runtime" $extra_flags +# darwin targets can also run code with the NeXT runtime. if [istarget "*-*-darwin*" ] { -set add_flags "" -lappend add_flags "additional_flags=-fnext-runtime" -lappend add_flags "additional_flags=-Wno-objc-root-class" -set lines [objc_target_compile "$srcdir/$subdir/load-category-1a.m" "load-category-1a.o" object $add_flags ] -if ![string match "" $lines] then { - fail "load-category-1a.o" -} else { - dg-runtest "$srcdir/$subdir/load-category-1.m" "load-category-1a.o" "-fnext-runtime" - file delete load-category-1a.o -} -} - -# -# load-category-2 test -# -# This test is similar to the one above. We compile load-category-2.m -# and load-category-2a.m, link them together, and execute the result. -set add_flags "additional_flags=-I${srcdir}/../../libobjc" -lappend add_flags "additional_flags=-fgnu-runtime" -lappend add_flags "additional_flags=-Wno-objc-root-class" -set lines [objc_target_compile "$srcdir/$subdir/load-category-2a.m" "load-category-2a.o" object $add_flags ] -if ![string match "" $lines] then { - fail "load-category-2a.o" -} else { - dg-runtest "$srcdir/$subdir/load-category-2.m" "load-category-2a.o" "-I${srcdir}/../../libobjc -fgnu-runtime" - file delete load-category-2a.o -} - -if [istarget "*-*-darwin*" ] { -set add_flags "" -lappend add_flags "additional_flags=-fnext-runtime" -lappend add_flags "additional_flags=-Wno-objc-root-class" -set lines [objc_target_compile "$srcdir/$subdir/load-category-2a.m" "load-category-2a.o" object $add_flags ] -if ![string match "" $lines] then { - fail "load-category-2a.o" -} else { - dg-runtest "$srcdir/$subdir/load-category-2.m" "load-category-2a.o" "-fnext-runtime" - file delete load-category-2a.o -} -} - -# -# load-category-3 test -# -# This test is similar to the one above. We compile load-category-3.m -# and load-category-3a.m, link them together, and execute the result. -set add_flags "additional_flags=-I${srcdir}/../../libobjc" -lappend add_flags "additional_flags=-fgnu-runtime" -lappend add_flags "additional_flags=-Wno-objc-root-class" -set lines [objc_target_compile "$srcdir/$subdir/load-category-3a.m" "load-category-3a.o" object $add_flags ] -if ![string match "" $lines] then { - fail "load-category-3a.o" -} else { - dg-runtest "$srcdir/$subdir/load-category-3.m" "load-category-3a.o" "-I${srcdir}/../../libobjc -fgnu-runtime" - file delete load-category-3a.o -} - -if [istarget "*-*-darwin*" ] { -set add_flags "" -lappend add_flags "additional_flags=-fnext-runtime" -lappend add_flags "additional_flags=-Wno-objc-root-class" -set lines [objc_target_compile "$srcdir/$subdir/load-category-3a.m" "load-category-3a.o" object $add_flags ] -if ![string match "" $lines] then { - fail "load-category-3a.o" -} else { - dg-runtest "$srcdir/$subdir/load-category-3.m" "load-category-3a.o" "-fnext-runtime" - file delete load-category-3a.o -} + dg-runtest $tests "-fnext-runtime" $extra_flags } # All done. dg-finish - diff --git a/gcc/testsuite/objc.dg/special/unclaimed-category-1.m b/gcc/testsuite/objc.dg/special/unclaimed-category-1.m index a8e422d34e98..12380fe17ff9 100644 --- a/gcc/testsuite/objc.dg/special/unclaimed-category-1.m +++ b/gcc/testsuite/objc.dg/special/unclaimed-category-1.m @@ -1,7 +1,7 @@ /* Contributed by Nicola Pero - Fri Dec 14 08:36:00 GMT 2001 */ /* { dg-do run } */ /* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */ -/* { dg-additional-options "-Wno-objc-root-class" } */ +/* { dg-additional-sources "unclaimed-category-1a.m" } */ #include #include "../../objc-obj-c++-shared/runtime.h" diff --git a/gcc/tree-cfg.cc b/gcc/tree-cfg.cc index c3883446de8b..39aeb16f74e0 100644 --- a/gcc/tree-cfg.cc +++ b/gcc/tree-cfg.cc @@ -1132,8 +1132,8 @@ assign_discriminators (void) { location_t prev_loc = UNKNOWN_LOCATION, prev_replacement = UNKNOWN_LOCATION; /* Traverse the basic block, if two function calls within a basic block - are mapped to the same line, assign a new discriminator because a call - stmt could be a split point of a basic block. */ + are mapped to the same line, assign a new discriminator because a call + stmt could be a split point of a basic block. */ for (gimple_stmt_iterator gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi)) { @@ -1149,8 +1149,8 @@ assign_discriminators (void) prev_replacement = assign_discriminator (loc, bb_id, map); gimple_set_location (stmt, prev_replacement); } - /* Break basic blocks after each call. This is requires so each - call site has unque discriminator. + /* Break basic blocks after each call. This is required so each + call site has unique discriminator. More correctly, we can break after each statement that can possibly terinate execution of the basic block, but for auto-profile this precision is probably not useful. */ @@ -1160,16 +1160,27 @@ assign_discriminators (void) bb_id++; } } - /* IF basic block has multiple sucessors, consdier every edge as a separate - block. */ + /* If basic block has multiple sucessors, consdier every edge as a + separate block. */ if (!single_succ_p (bb)) bb_id++; for (edge e : bb->succs) - if (e->goto_locus != UNKNOWN_LOCATION) - { + { + if (e->goto_locus != UNKNOWN_LOCATION) e->goto_locus = assign_discriminator (e->goto_locus, bb_id, map); - bb_id++; - } + for (gphi_iterator gpi = gsi_start_phis (bb); + !gsi_end_p (gpi); gsi_next (&gpi)) + { + gphi *phi = gpi.phi (); + location_t phi_loc + = gimple_phi_arg_location_from_edge (phi, e); + if (phi_loc == UNKNOWN_LOCATION) + continue; + gimple_phi_arg_set_location + (phi, e->dest_idx, assign_discriminator (phi_loc, bb_id, map)); + } + bb_id++; + } bb_id++; } diff --git a/gcc/tree-cfgcleanup.cc b/gcc/tree-cfgcleanup.cc index 5aaa18df0c55..58e8af5efcf5 100644 --- a/gcc/tree-cfgcleanup.cc +++ b/gcc/tree-cfgcleanup.cc @@ -392,7 +392,7 @@ tree_forwarder_block_p (basic_block bb, bool phi_wanted) location_t locus; /* BB must have a single outgoing edge. */ - if (single_succ_p (bb) != 1 + if (!single_succ_p (bb) /* If PHI_WANTED is false, BB must not have any PHI nodes. Otherwise, BB must have PHI nodes. */ || gimple_seq_empty_p (phi_nodes (bb)) == phi_wanted diff --git a/gcc/tree-diagnostic-client-data-hooks.cc b/gcc/tree-diagnostic-client-data-hooks.cc index 77eb292f787d..9ad608d17e09 100644 --- a/gcc/tree-diagnostic-client-data-hooks.cc +++ b/gcc/tree-diagnostic-client-data-hooks.cc @@ -19,6 +19,7 @@ You should have received a copy of the GNU General Public License along with GCC; see the file COPYING3. If not see . */ +#define INCLUDE_VECTOR #include "config.h" #include "system.h" #include "coretypes.h" diff --git a/gcc/tree-diagnostic.cc b/gcc/tree-diagnostic.cc index 20183c8bceda..4cf742d047d9 100644 --- a/gcc/tree-diagnostic.cc +++ b/gcc/tree-diagnostic.cc @@ -19,6 +19,7 @@ You should have received a copy of the GNU General Public License along with GCC; see the file COPYING3. If not see . */ +#define INCLUDE_VECTOR #include "config.h" #include "system.h" #include "coretypes.h" diff --git a/gcc/tree-if-conv.cc b/gcc/tree-if-conv.cc index e96c89ea7918..0bb3de9b1376 100644 --- a/gcc/tree-if-conv.cc +++ b/gcc/tree-if-conv.cc @@ -3444,7 +3444,7 @@ version_loop_for_if_conversion (class loop *loop, vec *preds) } initialize_original_copy_tables (); - /* At this point we invalidate porfile confistency until IFN_LOOP_VECTORIZED + /* At this point we invalidate profile consistency until IFN_LOOP_VECTORIZED is re-merged in the vectorizer. */ new_loop = loop_version (loop, cond, &cond_bb, profile_probability::always (), diff --git a/gcc/tree-inline.cc b/gcc/tree-inline.cc index 08e642178ba5..428cf55a2255 100644 --- a/gcc/tree-inline.cc +++ b/gcc/tree-inline.cc @@ -986,6 +986,30 @@ is_parm (tree decl) return (TREE_CODE (decl) == PARM_DECL); } +/* Copy the TREE_THIS_NOTRAP flag from OLD to T if it is appropriate to do so. + T and OLD must be both either INDIRECT_REF or MEM_REF. */ + +static void +maybe_copy_this_notrap (copy_body_data *id, tree t, tree old) +{ + gcc_assert (TREE_CODE (t) == TREE_CODE (old)); + + /* We cannot blindly propagate the TREE_THIS_NOTRAP flag if we have remapped + a parameter as the property might be valid only for the parameter itself, + typically when it is passed by reference. But we propagate the flag when + this is the dereference of an entire object done in a type that has self- + referential size, to avoid the static size check in tree_could_trap_p. */ + if (TREE_THIS_NOTRAP (old) + && (!is_parm (TREE_OPERAND (old, 0)) + || (!id->transform_parameter && is_parm (TREE_OPERAND (t, 0))) + || ((TREE_CODE (t) == INDIRECT_REF + || integer_zerop (TREE_OPERAND (t, 1))) + && TREE_CODE (TREE_OPERAND (t, 0)) == ADDR_EXPR + && DECL_P (TREE_OPERAND (TREE_OPERAND (t, 0), 0)) + && type_contains_placeholder_p (TREE_TYPE (t))))) + TREE_THIS_NOTRAP (t) = 1; +} + /* Remap the dependence CLIQUE from the source to the destination function as specified in ID. */ @@ -1118,13 +1142,7 @@ remap_gimple_op_r (tree *tp, int *walk_subtrees, void *data) = remap_dependence_clique (id, MR_DEPENDENCE_CLIQUE (old)); MR_DEPENDENCE_BASE (*tp) = MR_DEPENDENCE_BASE (old); } - /* We cannot propagate the TREE_THIS_NOTRAP flag if we have - remapped a parameter as the property might be valid only - for the parameter itself. */ - if (TREE_THIS_NOTRAP (old) - && (!is_parm (TREE_OPERAND (old, 0)) - || (!id->transform_parameter && is_parm (ptr)))) - TREE_THIS_NOTRAP (*tp) = 1; + maybe_copy_this_notrap (id, *tp, old); REF_REVERSE_STORAGE_ORDER (*tp) = REF_REVERSE_STORAGE_ORDER (old); *walk_subtrees = 0; return NULL; @@ -1352,13 +1370,7 @@ copy_tree_body_r (tree *tp, int *walk_subtrees, void *data) TREE_THIS_VOLATILE (*tp) = TREE_THIS_VOLATILE (old); TREE_SIDE_EFFECTS (*tp) = TREE_SIDE_EFFECTS (old); TREE_READONLY (*tp) = TREE_READONLY (old); - /* We cannot propagate the TREE_THIS_NOTRAP flag if we - have remapped a parameter as the property might be - valid only for the parameter itself. */ - if (TREE_THIS_NOTRAP (old) - && (!is_parm (TREE_OPERAND (old, 0)) - || (!id->transform_parameter && is_parm (ptr)))) - TREE_THIS_NOTRAP (*tp) = 1; + maybe_copy_this_notrap (id, *tp, old); } } *walk_subtrees = 0; @@ -1384,13 +1396,7 @@ copy_tree_body_r (tree *tp, int *walk_subtrees, void *data) = remap_dependence_clique (id, MR_DEPENDENCE_CLIQUE (old)); MR_DEPENDENCE_BASE (*tp) = MR_DEPENDENCE_BASE (old); } - /* We cannot propagate the TREE_THIS_NOTRAP flag if we have - remapped a parameter as the property might be valid only - for the parameter itself. */ - if (TREE_THIS_NOTRAP (old) - && (!is_parm (TREE_OPERAND (old, 0)) - || (!id->transform_parameter && is_parm (ptr)))) - TREE_THIS_NOTRAP (*tp) = 1; + maybe_copy_this_notrap (id, *tp, old); REF_REVERSE_STORAGE_ORDER (*tp) = REF_REVERSE_STORAGE_ORDER (old); *walk_subtrees = 0; return NULL; diff --git a/gcc/tree-logical-location.cc b/gcc/tree-logical-location.cc index 19bccd1a7060..b39327feca5e 100644 --- a/gcc/tree-logical-location.cc +++ b/gcc/tree-logical-location.cc @@ -26,6 +26,7 @@ along with GCC; see the file COPYING3. If not see #include "tree-logical-location.h" #include "langhooks.h" #include "intl.h" +#include "diagnostics/dumping.h" using namespace diagnostics::logical_locations; @@ -40,6 +41,13 @@ assert_valid_tree (const_tree node) /* class tree_logical_location_manager : public diagnostics::logical_locations::manager. */ +void +tree_logical_location_manager::dump (FILE *outfile, int indent) const +{ + diagnostics::dumping::emit_heading (outfile, indent, + "tree_logical_location_manager"); +} + const char * tree_logical_location_manager::get_short_name (key k) const { diff --git a/gcc/tree-logical-location.h b/gcc/tree-logical-location.h index 2a7de37ade78..b7e0da8d6ff1 100644 --- a/gcc/tree-logical-location.h +++ b/gcc/tree-logical-location.h @@ -34,6 +34,8 @@ class tree_logical_location_manager using key = diagnostics::logical_locations::key; using kind = diagnostics::logical_locations::kind; + void dump (FILE *out, int indent) const final override; + const char *get_short_name (key) const final override; const char *get_name_with_scope (key) const final override; const char *get_internal_name (key) const final override; diff --git a/gcc/tree-pass.h b/gcc/tree-pass.h index 61cec52c6248..410341d47119 100644 --- a/gcc/tree-pass.h +++ b/gcc/tree-pass.h @@ -447,7 +447,6 @@ extern gimple_opt_pass *make_pass_warn_access (gcc::context *ctxt); extern gimple_opt_pass *make_pass_warn_printf (gcc::context *ctxt); extern gimple_opt_pass *make_pass_warn_recursion (gcc::context *ctxt); extern gimple_opt_pass *make_pass_strlen (gcc::context *ctxt); -extern gimple_opt_pass *make_pass_fold_builtins (gcc::context *ctxt); extern gimple_opt_pass *make_pass_post_ipa_warn (gcc::context *ctxt); extern gimple_opt_pass *make_pass_stdarg (gcc::context *ctxt); extern gimple_opt_pass *make_pass_early_warn_uninitialized (gcc::context *ctxt); diff --git a/gcc/tree-sra.cc b/gcc/tree-sra.cc index 921664ef470b..cb0f518ff038 100644 --- a/gcc/tree-sra.cc +++ b/gcc/tree-sra.cc @@ -1678,7 +1678,13 @@ scan_function (void) /* If the STMT is a call to DEFERRED_INIT, avoid setting cannot_scalarize_away_bitmap. */ if (gimple_call_internal_p (stmt, IFN_DEFERRED_INIT)) - ret |= !!build_access_from_expr_1 (t, stmt, true); + { + struct access *access + = build_access_from_expr_1 (t, stmt, true); + if (access) + access->grp_assignment_write = 1; + ret |= access != NULL; + } else ret |= build_access_from_expr (t, stmt, true); } diff --git a/gcc/tree-ssa-alias.cc b/gcc/tree-ssa-alias.cc index 9b028e040460..76aac6f1c032 100644 --- a/gcc/tree-ssa-alias.cc +++ b/gcc/tree-ssa-alias.cc @@ -4167,7 +4167,7 @@ attr_fnspec::verify () } } -/* Return ture if TYPE1 and TYPE2 will always give the same answer +/* Return true if TYPE1 and TYPE2 will always give the same answer when compared with other types using same_type_for_tbaa. */ static bool @@ -4191,7 +4191,7 @@ types_equal_for_same_type_for_tbaa_p (tree type1, tree type2, return TYPE_CANONICAL (type1) == TYPE_CANONICAL (type2); } -/* Return ture if TYPE1 and TYPE2 will always give the same answer +/* Return true if TYPE1 and TYPE2 will always give the same answer when compared with other types using same_type_for_tbaa. */ bool diff --git a/gcc/tree-ssa-ccp.cc b/gcc/tree-ssa-ccp.cc index f16b37f193e2..6de02e5c7dcb 100644 --- a/gcc/tree-ssa-ccp.cc +++ b/gcc/tree-ssa-ccp.cc @@ -3085,1473 +3085,6 @@ make_pass_ccp (gcc::context *ctxt) return new pass_ccp (ctxt); } - - -/* Try to optimize out __builtin_stack_restore. Optimize it out - if there is another __builtin_stack_restore in the same basic - block and no calls or ASM_EXPRs are in between, or if this block's - only outgoing edge is to EXIT_BLOCK and there are no calls or - ASM_EXPRs after this __builtin_stack_restore. */ - -static tree -optimize_stack_restore (gimple_stmt_iterator i) -{ - tree callee; - gimple *stmt; - - basic_block bb = gsi_bb (i); - gimple *call = gsi_stmt (i); - - if (gimple_code (call) != GIMPLE_CALL - || gimple_call_num_args (call) != 1 - || TREE_CODE (gimple_call_arg (call, 0)) != SSA_NAME - || !POINTER_TYPE_P (TREE_TYPE (gimple_call_arg (call, 0)))) - return NULL_TREE; - - for (gsi_next (&i); !gsi_end_p (i); gsi_next (&i)) - { - stmt = gsi_stmt (i); - if (gimple_code (stmt) == GIMPLE_ASM) - return NULL_TREE; - if (gimple_code (stmt) != GIMPLE_CALL) - continue; - - callee = gimple_call_fndecl (stmt); - if (!callee - || !fndecl_built_in_p (callee, BUILT_IN_NORMAL) - /* All regular builtins are ok, just obviously not alloca. */ - || ALLOCA_FUNCTION_CODE_P (DECL_FUNCTION_CODE (callee)) - /* Do not remove stack updates before strub leave. */ - || fndecl_built_in_p (callee, BUILT_IN___STRUB_LEAVE)) - return NULL_TREE; - - if (fndecl_built_in_p (callee, BUILT_IN_STACK_RESTORE)) - goto second_stack_restore; - } - - if (!gsi_end_p (i)) - return NULL_TREE; - - /* Allow one successor of the exit block, or zero successors. */ - switch (EDGE_COUNT (bb->succs)) - { - case 0: - break; - case 1: - if (single_succ_edge (bb)->dest != EXIT_BLOCK_PTR_FOR_FN (cfun)) - return NULL_TREE; - break; - default: - return NULL_TREE; - } - second_stack_restore: - - /* If there's exactly one use, then zap the call to __builtin_stack_save. - If there are multiple uses, then the last one should remove the call. - In any case, whether the call to __builtin_stack_save can be removed - or not is irrelevant to removing the call to __builtin_stack_restore. */ - if (has_single_use (gimple_call_arg (call, 0))) - { - gimple *stack_save = SSA_NAME_DEF_STMT (gimple_call_arg (call, 0)); - if (is_gimple_call (stack_save)) - { - callee = gimple_call_fndecl (stack_save); - if (callee && fndecl_built_in_p (callee, BUILT_IN_STACK_SAVE)) - { - gimple_stmt_iterator stack_save_gsi; - tree rhs; - - stack_save_gsi = gsi_for_stmt (stack_save); - rhs = build_int_cst (TREE_TYPE (gimple_call_arg (call, 0)), 0); - replace_call_with_value (&stack_save_gsi, rhs); - } - } - } - - /* No effect, so the statement will be deleted. */ - return integer_zero_node; -} - -/* If va_list type is a simple pointer and nothing special is needed, - optimize __builtin_va_start (&ap, 0) into ap = __builtin_next_arg (0), - __builtin_va_end (&ap) out as NOP and __builtin_va_copy into a simple - pointer assignment. */ - -static tree -optimize_stdarg_builtin (gimple *call) -{ - tree callee, lhs, rhs, cfun_va_list; - bool va_list_simple_ptr; - location_t loc = gimple_location (call); - - callee = gimple_call_fndecl (call); - - cfun_va_list = targetm.fn_abi_va_list (callee); - va_list_simple_ptr = POINTER_TYPE_P (cfun_va_list) - && (TREE_TYPE (cfun_va_list) == void_type_node - || TREE_TYPE (cfun_va_list) == char_type_node); - - switch (DECL_FUNCTION_CODE (callee)) - { - case BUILT_IN_VA_START: - if (!va_list_simple_ptr - || targetm.expand_builtin_va_start != NULL - || !builtin_decl_explicit_p (BUILT_IN_NEXT_ARG)) - return NULL_TREE; - - if (gimple_call_num_args (call) != 2) - return NULL_TREE; - - lhs = gimple_call_arg (call, 0); - if (!POINTER_TYPE_P (TREE_TYPE (lhs)) - || TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (lhs))) - != TYPE_MAIN_VARIANT (cfun_va_list)) - return NULL_TREE; - - lhs = build_fold_indirect_ref_loc (loc, lhs); - rhs = build_call_expr_loc (loc, builtin_decl_explicit (BUILT_IN_NEXT_ARG), - 1, integer_zero_node); - rhs = fold_convert_loc (loc, TREE_TYPE (lhs), rhs); - return build2 (MODIFY_EXPR, TREE_TYPE (lhs), lhs, rhs); - - case BUILT_IN_VA_COPY: - if (!va_list_simple_ptr) - return NULL_TREE; - - if (gimple_call_num_args (call) != 2) - return NULL_TREE; - - lhs = gimple_call_arg (call, 0); - if (!POINTER_TYPE_P (TREE_TYPE (lhs)) - || TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (lhs))) - != TYPE_MAIN_VARIANT (cfun_va_list)) - return NULL_TREE; - - lhs = build_fold_indirect_ref_loc (loc, lhs); - rhs = gimple_call_arg (call, 1); - if (TYPE_MAIN_VARIANT (TREE_TYPE (rhs)) - != TYPE_MAIN_VARIANT (cfun_va_list)) - return NULL_TREE; - - rhs = fold_convert_loc (loc, TREE_TYPE (lhs), rhs); - return build2 (MODIFY_EXPR, TREE_TYPE (lhs), lhs, rhs); - - case BUILT_IN_VA_END: - /* No effect, so the statement will be deleted. */ - return integer_zero_node; - - default: - gcc_unreachable (); - } -} - -/* Attemp to make the block of __builtin_unreachable I unreachable by changing - the incoming jumps. Return true if at least one jump was changed. */ - -static bool -optimize_unreachable (gimple_stmt_iterator i) -{ - basic_block bb = gsi_bb (i); - gimple_stmt_iterator gsi; - gimple *stmt; - edge_iterator ei; - edge e; - bool ret; - - if (flag_sanitize & SANITIZE_UNREACHABLE) - return false; - - for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi)) - { - stmt = gsi_stmt (gsi); - - if (is_gimple_debug (stmt)) - continue; - - if (glabel *label_stmt = dyn_cast (stmt)) - { - /* Verify we do not need to preserve the label. */ - if (FORCED_LABEL (gimple_label_label (label_stmt))) - return false; - - continue; - } - - /* Only handle the case that __builtin_unreachable is the first statement - in the block. We rely on DCE to remove stmts without side-effects - before __builtin_unreachable. */ - if (gsi_stmt (gsi) != gsi_stmt (i)) - return false; - } - - ret = false; - FOR_EACH_EDGE (e, ei, bb->preds) - { - gsi = gsi_last_bb (e->src); - if (gsi_end_p (gsi)) - continue; - - stmt = gsi_stmt (gsi); - if (gcond *cond_stmt = dyn_cast (stmt)) - { - if (e->flags & EDGE_TRUE_VALUE) - gimple_cond_make_false (cond_stmt); - else if (e->flags & EDGE_FALSE_VALUE) - gimple_cond_make_true (cond_stmt); - else - gcc_unreachable (); - update_stmt (cond_stmt); - } - else - { - /* Todo: handle other cases. Note that unreachable switch case - statements have already been removed. */ - continue; - } - - ret = true; - } - - return ret; -} - -/* Convert - _1 = __atomic_fetch_or_* (ptr_6, 1, _3); - _7 = ~_1; - _5 = (_Bool) _7; - to - _1 = __atomic_fetch_or_* (ptr_6, 1, _3); - _8 = _1 & 1; - _5 = _8 == 0; - and convert - _1 = __atomic_fetch_and_* (ptr_6, ~1, _3); - _7 = ~_1; - _4 = (_Bool) _7; - to - _1 = __atomic_fetch_and_* (ptr_6, ~1, _3); - _8 = _1 & 1; - _4 = (_Bool) _8; - - USE_STMT is the gimplt statement which uses the return value of - __atomic_fetch_or_*. LHS is the return value of __atomic_fetch_or_*. - MASK is the mask passed to __atomic_fetch_or_*. - */ - -static gimple * -convert_atomic_bit_not (enum internal_fn fn, gimple *use_stmt, - tree lhs, tree mask) -{ - tree and_mask; - if (fn == IFN_ATOMIC_BIT_TEST_AND_RESET) - { - /* MASK must be ~1. */ - if (!operand_equal_p (build_int_cst (TREE_TYPE (lhs), - ~HOST_WIDE_INT_1), mask, 0)) - return nullptr; - and_mask = build_int_cst (TREE_TYPE (lhs), 1); - } - else - { - /* MASK must be 1. */ - if (!operand_equal_p (build_int_cst (TREE_TYPE (lhs), 1), mask, 0)) - return nullptr; - and_mask = mask; - } - - tree use_lhs = gimple_assign_lhs (use_stmt); - - use_operand_p use_p; - gimple *use_not_stmt; - - if (!single_imm_use (use_lhs, &use_p, &use_not_stmt) - || !is_gimple_assign (use_not_stmt)) - return nullptr; - - if (!CONVERT_EXPR_CODE_P (gimple_assign_rhs_code (use_not_stmt))) - return nullptr; - - tree use_not_lhs = gimple_assign_lhs (use_not_stmt); - if (TREE_CODE (TREE_TYPE (use_not_lhs)) != BOOLEAN_TYPE) - return nullptr; - - gimple_stmt_iterator gsi; - tree var = make_ssa_name (TREE_TYPE (lhs)); - /* use_stmt need to be removed after use_nop_stmt, - so use_lhs can be released. */ - gimple *use_stmt_removal = use_stmt; - use_stmt = gimple_build_assign (var, BIT_AND_EXPR, lhs, and_mask); - gsi = gsi_for_stmt (use_not_stmt); - gsi_insert_before (&gsi, use_stmt, GSI_NEW_STMT); - lhs = gimple_assign_lhs (use_not_stmt); - gimple *g = gimple_build_assign (lhs, EQ_EXPR, var, - build_zero_cst (TREE_TYPE (mask))); - gsi_insert_after (&gsi, g, GSI_NEW_STMT); - gsi = gsi_for_stmt (use_not_stmt); - gsi_remove (&gsi, true); - gsi = gsi_for_stmt (use_stmt_removal); - gsi_remove (&gsi, true); - return use_stmt; -} - -/* match.pd function to match atomic_bit_test_and pattern which - has nop_convert: - _1 = __atomic_fetch_or_4 (&v, 1, 0); - _2 = (int) _1; - _5 = _2 & 1; - */ -extern bool gimple_nop_atomic_bit_test_and_p (tree, tree *, - tree (*) (tree)); -extern bool gimple_nop_convert (tree, tree*, tree (*) (tree)); - -/* Optimize - mask_2 = 1 << cnt_1; - _4 = __atomic_fetch_or_* (ptr_6, mask_2, _3); - _5 = _4 & mask_2; - to - _4 = .ATOMIC_BIT_TEST_AND_SET (ptr_6, cnt_1, 0, _3); - _5 = _4; - If _5 is only used in _5 != 0 or _5 == 0 comparisons, 1 - is passed instead of 0, and the builtin just returns a zero - or 1 value instead of the actual bit. - Similarly for __sync_fetch_and_or_* (without the ", _3" part - in there), and/or if mask_2 is a power of 2 constant. - Similarly for xor instead of or, use ATOMIC_BIT_TEST_AND_COMPLEMENT - in that case. And similarly for and instead of or, except that - the second argument to the builtin needs to be one's complement - of the mask instead of mask. */ - -static bool -optimize_atomic_bit_test_and (gimple_stmt_iterator *gsip, - enum internal_fn fn, bool has_model_arg, - bool after) -{ - gimple *call = gsi_stmt (*gsip); - tree lhs = gimple_call_lhs (call); - use_operand_p use_p; - gimple *use_stmt; - tree mask; - optab optab; - - if (!flag_inline_atomics - || optimize_debug - || !gimple_call_builtin_p (call, BUILT_IN_NORMAL) - || !lhs - || SSA_NAME_OCCURS_IN_ABNORMAL_PHI (lhs) - || !single_imm_use (lhs, &use_p, &use_stmt) - || !is_gimple_assign (use_stmt) - || !gimple_vdef (call)) - return false; - - switch (fn) - { - case IFN_ATOMIC_BIT_TEST_AND_SET: - optab = atomic_bit_test_and_set_optab; - break; - case IFN_ATOMIC_BIT_TEST_AND_COMPLEMENT: - optab = atomic_bit_test_and_complement_optab; - break; - case IFN_ATOMIC_BIT_TEST_AND_RESET: - optab = atomic_bit_test_and_reset_optab; - break; - default: - return false; - } - - tree bit = nullptr; - - mask = gimple_call_arg (call, 1); - tree_code rhs_code = gimple_assign_rhs_code (use_stmt); - if (rhs_code != BIT_AND_EXPR) - { - if (rhs_code != NOP_EXPR && rhs_code != BIT_NOT_EXPR) - return false; - - tree use_lhs = gimple_assign_lhs (use_stmt); - if (TREE_CODE (use_lhs) == SSA_NAME - && SSA_NAME_OCCURS_IN_ABNORMAL_PHI (use_lhs)) - return false; - - tree use_rhs = gimple_assign_rhs1 (use_stmt); - if (lhs != use_rhs) - return false; - - if (optab_handler (optab, TYPE_MODE (TREE_TYPE (lhs))) - == CODE_FOR_nothing) - return false; - - gimple *g; - gimple_stmt_iterator gsi; - tree var; - int ibit = -1; - - if (rhs_code == BIT_NOT_EXPR) - { - g = convert_atomic_bit_not (fn, use_stmt, lhs, mask); - if (!g) - return false; - use_stmt = g; - ibit = 0; - } - else if (TREE_CODE (TREE_TYPE (use_lhs)) == BOOLEAN_TYPE) - { - tree and_mask; - if (fn == IFN_ATOMIC_BIT_TEST_AND_RESET) - { - /* MASK must be ~1. */ - if (!operand_equal_p (build_int_cst (TREE_TYPE (lhs), - ~HOST_WIDE_INT_1), - mask, 0)) - return false; - - /* Convert - _1 = __atomic_fetch_and_* (ptr_6, ~1, _3); - _4 = (_Bool) _1; - to - _1 = __atomic_fetch_and_* (ptr_6, ~1, _3); - _5 = _1 & 1; - _4 = (_Bool) _5; - */ - and_mask = build_int_cst (TREE_TYPE (lhs), 1); - } - else - { - and_mask = build_int_cst (TREE_TYPE (lhs), 1); - if (!operand_equal_p (and_mask, mask, 0)) - return false; - - /* Convert - _1 = __atomic_fetch_or_* (ptr_6, 1, _3); - _4 = (_Bool) _1; - to - _1 = __atomic_fetch_or_* (ptr_6, 1, _3); - _5 = _1 & 1; - _4 = (_Bool) _5; - */ - } - var = make_ssa_name (TREE_TYPE (use_rhs)); - replace_uses_by (use_rhs, var); - g = gimple_build_assign (var, BIT_AND_EXPR, use_rhs, - and_mask); - gsi = gsi_for_stmt (use_stmt); - gsi_insert_before (&gsi, g, GSI_NEW_STMT); - use_stmt = g; - ibit = 0; - } - else if (TYPE_PRECISION (TREE_TYPE (use_lhs)) - <= TYPE_PRECISION (TREE_TYPE (use_rhs))) - { - gimple *use_nop_stmt; - if (!single_imm_use (use_lhs, &use_p, &use_nop_stmt) - || (!is_gimple_assign (use_nop_stmt) - && gimple_code (use_nop_stmt) != GIMPLE_COND)) - return false; - /* Handle both - _4 = _5 < 0; - and - if (_5 < 0) - */ - tree use_nop_lhs = nullptr; - rhs_code = ERROR_MARK; - if (is_gimple_assign (use_nop_stmt)) - { - use_nop_lhs = gimple_assign_lhs (use_nop_stmt); - rhs_code = gimple_assign_rhs_code (use_nop_stmt); - } - if (!use_nop_lhs || rhs_code != BIT_AND_EXPR) - { - /* Also handle - if (_5 < 0) - */ - if (use_nop_lhs - && TREE_CODE (use_nop_lhs) == SSA_NAME - && SSA_NAME_OCCURS_IN_ABNORMAL_PHI (use_nop_lhs)) - return false; - if (use_nop_lhs && rhs_code == BIT_NOT_EXPR) - { - /* Handle - _7 = ~_2; - */ - g = convert_atomic_bit_not (fn, use_nop_stmt, lhs, - mask); - if (!g) - return false; - /* Convert - _1 = __atomic_fetch_or_4 (ptr_6, 1, _3); - _2 = (int) _1; - _7 = ~_2; - _5 = (_Bool) _7; - to - _1 = __atomic_fetch_or_4 (ptr_6, ~1, _3); - _8 = _1 & 1; - _5 = _8 == 0; - and convert - _1 = __atomic_fetch_and_4 (ptr_6, ~1, _3); - _2 = (int) _1; - _7 = ~_2; - _5 = (_Bool) _7; - to - _1 = __atomic_fetch_and_4 (ptr_6, 1, _3); - _8 = _1 & 1; - _5 = _8 == 0; - */ - gsi = gsi_for_stmt (use_stmt); - gsi_remove (&gsi, true); - use_stmt = g; - ibit = 0; - } - else - { - tree cmp_rhs1, cmp_rhs2; - if (use_nop_lhs) - { - /* Handle - _4 = _5 < 0; - */ - if (TREE_CODE (TREE_TYPE (use_nop_lhs)) - != BOOLEAN_TYPE) - return false; - cmp_rhs1 = gimple_assign_rhs1 (use_nop_stmt); - cmp_rhs2 = gimple_assign_rhs2 (use_nop_stmt); - } - else - { - /* Handle - if (_5 < 0) - */ - rhs_code = gimple_cond_code (use_nop_stmt); - cmp_rhs1 = gimple_cond_lhs (use_nop_stmt); - cmp_rhs2 = gimple_cond_rhs (use_nop_stmt); - } - if (rhs_code != GE_EXPR && rhs_code != LT_EXPR) - return false; - if (use_lhs != cmp_rhs1) - return false; - if (!integer_zerop (cmp_rhs2)) - return false; - - tree and_mask; - - unsigned HOST_WIDE_INT bytes - = tree_to_uhwi (TYPE_SIZE_UNIT (TREE_TYPE (use_rhs))); - ibit = bytes * BITS_PER_UNIT - 1; - unsigned HOST_WIDE_INT highest - = HOST_WIDE_INT_1U << ibit; - - if (fn == IFN_ATOMIC_BIT_TEST_AND_RESET) - { - /* Get the signed maximum of the USE_RHS type. */ - and_mask = build_int_cst (TREE_TYPE (use_rhs), - highest - 1); - if (!operand_equal_p (and_mask, mask, 0)) - return false; - - /* Convert - _1 = __atomic_fetch_and_4 (ptr_6, 0x7fffffff, _3); - _5 = (signed int) _1; - _4 = _5 < 0 or _5 >= 0; - to - _1 = __atomic_fetch_and_4 (ptr_6, 0x7fffffff, _3); - _6 = _1 & 0x80000000; - _4 = _6 != 0 or _6 == 0; - and convert - _1 = __atomic_fetch_and_4 (ptr_6, 0x7fffffff, _3); - _5 = (signed int) _1; - if (_5 < 0 or _5 >= 0) - to - _1 = __atomic_fetch_and_4 (ptr_6, 0x7fffffff, _3); - _6 = _1 & 0x80000000; - if (_6 != 0 or _6 == 0) - */ - and_mask = build_int_cst (TREE_TYPE (use_rhs), - highest); - } - else - { - /* Get the signed minimum of the USE_RHS type. */ - and_mask = build_int_cst (TREE_TYPE (use_rhs), - highest); - if (!operand_equal_p (and_mask, mask, 0)) - return false; - - /* Convert - _1 = __atomic_fetch_or_4 (ptr_6, 0x80000000, _3); - _5 = (signed int) _1; - _4 = _5 < 0 or _5 >= 0; - to - _1 = __atomic_fetch_or_4 (ptr_6, 0x80000000, _3); - _6 = _1 & 0x80000000; - _4 = _6 != 0 or _6 == 0; - and convert - _1 = __atomic_fetch_or_4 (ptr_6, 0x80000000, _3); - _5 = (signed int) _1; - if (_5 < 0 or _5 >= 0) - to - _1 = __atomic_fetch_or_4 (ptr_6, 0x80000000, _3); - _6 = _1 & 0x80000000; - if (_6 != 0 or _6 == 0) - */ - } - var = make_ssa_name (TREE_TYPE (use_rhs)); - gimple* use_stmt_removal = use_stmt; - g = gimple_build_assign (var, BIT_AND_EXPR, use_rhs, - and_mask); - gsi = gsi_for_stmt (use_nop_stmt); - gsi_insert_before (&gsi, g, GSI_NEW_STMT); - use_stmt = g; - rhs_code = rhs_code == GE_EXPR ? EQ_EXPR : NE_EXPR; - tree const_zero = build_zero_cst (TREE_TYPE (use_rhs)); - if (use_nop_lhs) - g = gimple_build_assign (use_nop_lhs, rhs_code, - var, const_zero); - else - g = gimple_build_cond (rhs_code, var, const_zero, - nullptr, nullptr); - gsi_insert_after (&gsi, g, GSI_NEW_STMT); - gsi = gsi_for_stmt (use_nop_stmt); - gsi_remove (&gsi, true); - gsi = gsi_for_stmt (use_stmt_removal); - gsi_remove (&gsi, true); - } - } - else - { - tree match_op[3]; - gimple *g; - if (!gimple_nop_atomic_bit_test_and_p (use_nop_lhs, - &match_op[0], NULL) - || SSA_NAME_OCCURS_IN_ABNORMAL_PHI (match_op[2]) - || !single_imm_use (match_op[2], &use_p, &g) - || !is_gimple_assign (g)) - return false; - mask = match_op[0]; - if (TREE_CODE (match_op[1]) == INTEGER_CST) - { - ibit = tree_log2 (match_op[1]); - gcc_assert (ibit >= 0); - } - else - { - g = SSA_NAME_DEF_STMT (match_op[1]); - gcc_assert (is_gimple_assign (g)); - bit = gimple_assign_rhs2 (g); - } - /* Convert - _1 = __atomic_fetch_or_4 (ptr_6, mask, _3); - _2 = (int) _1; - _5 = _2 & mask; - to - _1 = __atomic_fetch_or_4 (ptr_6, mask, _3); - _6 = _1 & mask; - _5 = (int) _6; - and convert - _1 = ~mask_7; - _2 = (unsigned int) _1; - _3 = __atomic_fetch_and_4 (ptr_6, _2, 0); - _4 = (int) _3; - _5 = _4 & mask_7; - to - _1 = __atomic_fetch_and_* (ptr_6, ~mask_7, _3); - _12 = _3 & mask_7; - _5 = (int) _12; - - and Convert - _1 = __atomic_fetch_and_4 (ptr_6, ~mask, _3); - _2 = (short int) _1; - _5 = _2 & mask; - to - _1 = __atomic_fetch_and_4 (ptr_6, ~mask, _3); - _8 = _1 & mask; - _5 = (short int) _8; - */ - gimple_seq stmts = NULL; - match_op[1] = gimple_convert (&stmts, - TREE_TYPE (use_rhs), - match_op[1]); - var = gimple_build (&stmts, BIT_AND_EXPR, - TREE_TYPE (use_rhs), use_rhs, match_op[1]); - gsi = gsi_for_stmt (use_stmt); - gsi_remove (&gsi, true); - release_defs (use_stmt); - use_stmt = gimple_seq_last_stmt (stmts); - gsi = gsi_for_stmt (use_nop_stmt); - gsi_insert_seq_before (&gsi, stmts, GSI_SAME_STMT); - gimple_assign_set_rhs_with_ops (&gsi, CONVERT_EXPR, var); - update_stmt (use_nop_stmt); - } - } - else - return false; - - if (!bit) - { - if (ibit < 0) - gcc_unreachable (); - bit = build_int_cst (TREE_TYPE (lhs), ibit); - } - } - else if (optab_handler (optab, TYPE_MODE (TREE_TYPE (lhs))) - == CODE_FOR_nothing) - return false; - - tree use_lhs = gimple_assign_lhs (use_stmt); - if (!use_lhs) - return false; - - if (!bit) - { - if (TREE_CODE (mask) == INTEGER_CST) - { - if (fn == IFN_ATOMIC_BIT_TEST_AND_RESET) - mask = const_unop (BIT_NOT_EXPR, TREE_TYPE (mask), mask); - mask = fold_convert (TREE_TYPE (lhs), mask); - int ibit = tree_log2 (mask); - if (ibit < 0) - return false; - bit = build_int_cst (TREE_TYPE (lhs), ibit); - } - else if (TREE_CODE (mask) == SSA_NAME) - { - gimple *g = SSA_NAME_DEF_STMT (mask); - tree match_op; - if (gimple_nop_convert (mask, &match_op, NULL)) - { - mask = match_op; - if (TREE_CODE (mask) != SSA_NAME) - return false; - g = SSA_NAME_DEF_STMT (mask); - } - if (!is_gimple_assign (g)) - return false; - - if (fn == IFN_ATOMIC_BIT_TEST_AND_RESET) - { - if (gimple_assign_rhs_code (g) != BIT_NOT_EXPR) - return false; - mask = gimple_assign_rhs1 (g); - if (TREE_CODE (mask) != SSA_NAME) - return false; - g = SSA_NAME_DEF_STMT (mask); - } - - if (!is_gimple_assign (g) - || gimple_assign_rhs_code (g) != LSHIFT_EXPR - || !integer_onep (gimple_assign_rhs1 (g))) - return false; - bit = gimple_assign_rhs2 (g); - } - else - return false; - - tree cmp_mask; - if (gimple_assign_rhs1 (use_stmt) == lhs) - cmp_mask = gimple_assign_rhs2 (use_stmt); - else - cmp_mask = gimple_assign_rhs1 (use_stmt); - - tree match_op; - if (gimple_nop_convert (cmp_mask, &match_op, NULL)) - cmp_mask = match_op; - - if (!operand_equal_p (cmp_mask, mask, 0)) - return false; - } - - bool use_bool = true; - bool has_debug_uses = false; - imm_use_iterator iter; - gimple *g; - - if (SSA_NAME_OCCURS_IN_ABNORMAL_PHI (use_lhs)) - use_bool = false; - FOR_EACH_IMM_USE_STMT (g, iter, use_lhs) - { - enum tree_code code = ERROR_MARK; - tree op0 = NULL_TREE, op1 = NULL_TREE; - if (is_gimple_debug (g)) - { - has_debug_uses = true; - continue; - } - else if (is_gimple_assign (g)) - switch (gimple_assign_rhs_code (g)) - { - case COND_EXPR: - op1 = gimple_assign_rhs1 (g); - code = TREE_CODE (op1); - if (TREE_CODE_CLASS (code) != tcc_comparison) - break; - op0 = TREE_OPERAND (op1, 0); - op1 = TREE_OPERAND (op1, 1); - break; - case EQ_EXPR: - case NE_EXPR: - code = gimple_assign_rhs_code (g); - op0 = gimple_assign_rhs1 (g); - op1 = gimple_assign_rhs2 (g); - break; - default: - break; - } - else if (gimple_code (g) == GIMPLE_COND) - { - code = gimple_cond_code (g); - op0 = gimple_cond_lhs (g); - op1 = gimple_cond_rhs (g); - } - - if ((code == EQ_EXPR || code == NE_EXPR) - && op0 == use_lhs - && integer_zerop (op1)) - { - use_operand_p use_p; - int n = 0; - FOR_EACH_IMM_USE_ON_STMT (use_p, iter) - n++; - if (n == 1) - continue; - } - - use_bool = false; - break; - } - - tree new_lhs = make_ssa_name (TREE_TYPE (lhs)); - tree flag = build_int_cst (TREE_TYPE (lhs), use_bool); - if (has_model_arg) - g = gimple_build_call_internal (fn, 5, gimple_call_arg (call, 0), - bit, flag, gimple_call_arg (call, 2), - gimple_call_fn (call)); - else - g = gimple_build_call_internal (fn, 4, gimple_call_arg (call, 0), - bit, flag, gimple_call_fn (call)); - gimple_call_set_lhs (g, new_lhs); - gimple_set_location (g, gimple_location (call)); - gimple_move_vops (g, call); - bool throws = stmt_can_throw_internal (cfun, call); - gimple_call_set_nothrow (as_a (g), - gimple_call_nothrow_p (as_a (call))); - gimple_stmt_iterator gsi = *gsip; - gsi_insert_after (&gsi, g, GSI_NEW_STMT); - edge e = NULL; - if (throws) - { - maybe_clean_or_replace_eh_stmt (call, g); - if (after || (use_bool && has_debug_uses)) - e = find_fallthru_edge (gsi_bb (gsi)->succs); - } - if (after) - { - /* The internal function returns the value of the specified bit - before the atomic operation. If we are interested in the value - of the specified bit after the atomic operation (makes only sense - for xor, otherwise the bit content is compile time known), - we need to invert the bit. */ - tree mask_convert = mask; - gimple_seq stmts = NULL; - if (!use_bool) - mask_convert = gimple_convert (&stmts, TREE_TYPE (lhs), mask); - new_lhs = gimple_build (&stmts, BIT_XOR_EXPR, TREE_TYPE (lhs), new_lhs, - use_bool ? build_int_cst (TREE_TYPE (lhs), 1) - : mask_convert); - if (throws) - { - gsi_insert_seq_on_edge_immediate (e, stmts); - gsi = gsi_for_stmt (gimple_seq_last (stmts)); - } - else - gsi_insert_seq_after (&gsi, stmts, GSI_NEW_STMT); - } - if (use_bool && has_debug_uses) - { - tree temp = NULL_TREE; - if (!throws || after || single_pred_p (e->dest)) - { - temp = build_debug_expr_decl (TREE_TYPE (lhs)); - tree t = build2 (LSHIFT_EXPR, TREE_TYPE (lhs), new_lhs, bit); - g = gimple_build_debug_bind (temp, t, g); - if (throws && !after) - { - gsi = gsi_after_labels (e->dest); - gsi_insert_before (&gsi, g, GSI_SAME_STMT); - } - else - gsi_insert_after (&gsi, g, GSI_NEW_STMT); - } - FOR_EACH_IMM_USE_STMT (g, iter, use_lhs) - if (is_gimple_debug (g)) - { - use_operand_p use_p; - if (temp == NULL_TREE) - gimple_debug_bind_reset_value (g); - else - FOR_EACH_IMM_USE_ON_STMT (use_p, iter) - SET_USE (use_p, temp); - update_stmt (g); - } - } - SSA_NAME_OCCURS_IN_ABNORMAL_PHI (new_lhs) - = SSA_NAME_OCCURS_IN_ABNORMAL_PHI (use_lhs); - replace_uses_by (use_lhs, new_lhs); - gsi = gsi_for_stmt (use_stmt); - gsi_remove (&gsi, true); - release_defs (use_stmt); - gsi_remove (gsip, true); - release_ssa_name (lhs); - return true; -} - -/* Optimize - _4 = __atomic_add_fetch_* (ptr_6, arg_2, _3); - _5 = _4 == 0; - to - _4 = .ATOMIC_ADD_FETCH_CMP_0 (EQ_EXPR, ptr_6, arg_2, _3); - _5 = _4; - Similarly for __sync_add_and_fetch_* (without the ", _3" part - in there). */ - -static bool -optimize_atomic_op_fetch_cmp_0 (gimple_stmt_iterator *gsip, - enum internal_fn fn, bool has_model_arg) -{ - gimple *call = gsi_stmt (*gsip); - tree lhs = gimple_call_lhs (call); - use_operand_p use_p; - gimple *use_stmt; - - if (!flag_inline_atomics - || optimize_debug - || !gimple_call_builtin_p (call, BUILT_IN_NORMAL) - || !lhs - || SSA_NAME_OCCURS_IN_ABNORMAL_PHI (lhs) - || !single_imm_use (lhs, &use_p, &use_stmt) - || !gimple_vdef (call)) - return false; - - optab optab; - switch (fn) - { - case IFN_ATOMIC_ADD_FETCH_CMP_0: - optab = atomic_add_fetch_cmp_0_optab; - break; - case IFN_ATOMIC_SUB_FETCH_CMP_0: - optab = atomic_sub_fetch_cmp_0_optab; - break; - case IFN_ATOMIC_AND_FETCH_CMP_0: - optab = atomic_and_fetch_cmp_0_optab; - break; - case IFN_ATOMIC_OR_FETCH_CMP_0: - optab = atomic_or_fetch_cmp_0_optab; - break; - case IFN_ATOMIC_XOR_FETCH_CMP_0: - optab = atomic_xor_fetch_cmp_0_optab; - break; - default: - return false; - } - - if (optab_handler (optab, TYPE_MODE (TREE_TYPE (lhs))) - == CODE_FOR_nothing) - return false; - - tree use_lhs = lhs; - if (gimple_assign_cast_p (use_stmt)) - { - use_lhs = gimple_assign_lhs (use_stmt); - if (!tree_nop_conversion_p (TREE_TYPE (use_lhs), TREE_TYPE (lhs)) - || (!INTEGRAL_TYPE_P (TREE_TYPE (use_lhs)) - && !POINTER_TYPE_P (TREE_TYPE (use_lhs))) - || SSA_NAME_OCCURS_IN_ABNORMAL_PHI (use_lhs) - || !single_imm_use (use_lhs, &use_p, &use_stmt)) - return false; - } - enum tree_code code = ERROR_MARK; - tree op0 = NULL_TREE, op1 = NULL_TREE; - if (is_gimple_assign (use_stmt)) - switch (gimple_assign_rhs_code (use_stmt)) - { - case COND_EXPR: - op1 = gimple_assign_rhs1 (use_stmt); - code = TREE_CODE (op1); - if (TREE_CODE_CLASS (code) == tcc_comparison) - { - op0 = TREE_OPERAND (op1, 0); - op1 = TREE_OPERAND (op1, 1); - } - break; - default: - code = gimple_assign_rhs_code (use_stmt); - if (TREE_CODE_CLASS (code) == tcc_comparison) - { - op0 = gimple_assign_rhs1 (use_stmt); - op1 = gimple_assign_rhs2 (use_stmt); - } - break; - } - else if (gimple_code (use_stmt) == GIMPLE_COND) - { - code = gimple_cond_code (use_stmt); - op0 = gimple_cond_lhs (use_stmt); - op1 = gimple_cond_rhs (use_stmt); - } - - switch (code) - { - case LT_EXPR: - case LE_EXPR: - case GT_EXPR: - case GE_EXPR: - if (!INTEGRAL_TYPE_P (TREE_TYPE (use_lhs)) - || TREE_CODE (TREE_TYPE (use_lhs)) == BOOLEAN_TYPE - || TYPE_UNSIGNED (TREE_TYPE (use_lhs))) - return false; - /* FALLTHRU */ - case EQ_EXPR: - case NE_EXPR: - if (op0 == use_lhs && integer_zerop (op1)) - break; - return false; - default: - return false; - } - - int encoded; - switch (code) - { - /* Use special encoding of the operation. We want to also - encode the mode in the first argument and for neither EQ_EXPR - etc. nor EQ etc. we can rely it will fit into QImode. */ - case EQ_EXPR: encoded = ATOMIC_OP_FETCH_CMP_0_EQ; break; - case NE_EXPR: encoded = ATOMIC_OP_FETCH_CMP_0_NE; break; - case LT_EXPR: encoded = ATOMIC_OP_FETCH_CMP_0_LT; break; - case LE_EXPR: encoded = ATOMIC_OP_FETCH_CMP_0_LE; break; - case GT_EXPR: encoded = ATOMIC_OP_FETCH_CMP_0_GT; break; - case GE_EXPR: encoded = ATOMIC_OP_FETCH_CMP_0_GE; break; - default: gcc_unreachable (); - } - - tree new_lhs = make_ssa_name (boolean_type_node); - gimple *g; - tree flag = build_int_cst (TREE_TYPE (lhs), encoded); - if (has_model_arg) - g = gimple_build_call_internal (fn, 5, flag, - gimple_call_arg (call, 0), - gimple_call_arg (call, 1), - gimple_call_arg (call, 2), - gimple_call_fn (call)); - else - g = gimple_build_call_internal (fn, 4, flag, - gimple_call_arg (call, 0), - gimple_call_arg (call, 1), - gimple_call_fn (call)); - gimple_call_set_lhs (g, new_lhs); - gimple_set_location (g, gimple_location (call)); - gimple_move_vops (g, call); - bool throws = stmt_can_throw_internal (cfun, call); - gimple_call_set_nothrow (as_a (g), - gimple_call_nothrow_p (as_a (call))); - gimple_stmt_iterator gsi = *gsip; - gsi_insert_after (&gsi, g, GSI_SAME_STMT); - if (throws) - maybe_clean_or_replace_eh_stmt (call, g); - if (is_gimple_assign (use_stmt)) - switch (gimple_assign_rhs_code (use_stmt)) - { - case COND_EXPR: - gimple_assign_set_rhs1 (use_stmt, new_lhs); - break; - default: - gsi = gsi_for_stmt (use_stmt); - if (tree ulhs = gimple_assign_lhs (use_stmt)) - if (useless_type_conversion_p (TREE_TYPE (ulhs), - boolean_type_node)) - { - gimple_assign_set_rhs_with_ops (&gsi, SSA_NAME, new_lhs); - break; - } - gimple_assign_set_rhs_with_ops (&gsi, NOP_EXPR, new_lhs); - break; - } - else if (gimple_code (use_stmt) == GIMPLE_COND) - { - gcond *use_cond = as_a (use_stmt); - gimple_cond_set_code (use_cond, NE_EXPR); - gimple_cond_set_lhs (use_cond, new_lhs); - gimple_cond_set_rhs (use_cond, boolean_false_node); - } - - update_stmt (use_stmt); - if (use_lhs != lhs) - { - gsi = gsi_for_stmt (SSA_NAME_DEF_STMT (use_lhs)); - gsi_remove (&gsi, true); - release_ssa_name (use_lhs); - } - gsi_remove (gsip, true); - release_ssa_name (lhs); - return true; -} - -/* A simple pass that attempts to fold all builtin functions. This pass - is run after we've propagated as many constants as we can. */ - -namespace { - -const pass_data pass_data_fold_builtins = -{ - GIMPLE_PASS, /* type */ - "fab", /* name */ - OPTGROUP_NONE, /* optinfo_flags */ - TV_NONE, /* tv_id */ - ( PROP_cfg | PROP_ssa ), /* properties_required */ - 0, /* properties_provided */ - 0, /* properties_destroyed */ - 0, /* todo_flags_start */ - TODO_update_ssa, /* todo_flags_finish */ -}; - -class pass_fold_builtins : public gimple_opt_pass -{ -public: - pass_fold_builtins (gcc::context *ctxt) - : gimple_opt_pass (pass_data_fold_builtins, ctxt) - {} - - /* opt_pass methods: */ - opt_pass * clone () final override { return new pass_fold_builtins (m_ctxt); } - unsigned int execute (function *) final override; - -}; // class pass_fold_builtins - -/* Optimize memcmp STMT into memcmp_eq if it is only used with - `== 0` or `!= 0`. */ - -static void -optimize_memcmp_eq (gcall *stmt) -{ - /* Make sure memcmp arguments are the correct type. */ - if (gimple_call_num_args (stmt) != 3) - return; - tree arg1 = gimple_call_arg (stmt, 0); - tree arg2 = gimple_call_arg (stmt, 1); - tree len = gimple_call_arg (stmt, 2); - - if (!POINTER_TYPE_P (TREE_TYPE (arg1))) - return; - if (!POINTER_TYPE_P (TREE_TYPE (arg2))) - return; - if (!INTEGRAL_TYPE_P (TREE_TYPE (len))) - return; - /* The return value of the memcmp has to be used - equality comparison to zero. */ - tree res = gimple_call_lhs (stmt); - - if (!res || !use_in_zero_equality (res)) - return; - - gimple_call_set_fndecl (stmt, builtin_decl_explicit (BUILT_IN_MEMCMP_EQ)); - update_stmt (stmt); -} - -unsigned int -pass_fold_builtins::execute (function *fun) -{ - bool cfg_changed = false; - basic_block bb; - unsigned int todoflags = 0; - - FOR_EACH_BB_FN (bb, fun) - { - gimple_stmt_iterator i; - for (i = gsi_start_bb (bb); !gsi_end_p (i); ) - { - gimple *stmt, *old_stmt; - tree callee; - enum built_in_function fcode; - - stmt = gsi_stmt (i); - - if (gimple_code (stmt) != GIMPLE_CALL) - { - gsi_next (&i); - continue; - } - - callee = gimple_call_fndecl (stmt); - if (!callee - && gimple_call_internal_p (stmt, IFN_ASSUME)) - { - gsi_remove (&i, true); - continue; - } - if (!callee || !fndecl_built_in_p (callee, BUILT_IN_NORMAL)) - { - gsi_next (&i); - continue; - } - - fcode = DECL_FUNCTION_CODE (callee); - if (fold_stmt (&i)) - ; - else - { - tree result = NULL_TREE; - switch (DECL_FUNCTION_CODE (callee)) - { - case BUILT_IN_CONSTANT_P: - /* Resolve __builtin_constant_p. If it hasn't been - folded to integer_one_node by now, it's fairly - certain that the value simply isn't constant. */ - result = integer_zero_node; - break; - - case BUILT_IN_ASSUME_ALIGNED: - /* Remove __builtin_assume_aligned. */ - result = gimple_call_arg (stmt, 0); - break; - - case BUILT_IN_STACK_RESTORE: - result = optimize_stack_restore (i); - if (result) - break; - gsi_next (&i); - continue; - - case BUILT_IN_MEMCMP: - optimize_memcmp_eq (as_a(stmt)); - break; - - case BUILT_IN_UNREACHABLE: - if (optimize_unreachable (i)) - cfg_changed = true; - break; - - case BUILT_IN_ATOMIC_ADD_FETCH_1: - case BUILT_IN_ATOMIC_ADD_FETCH_2: - case BUILT_IN_ATOMIC_ADD_FETCH_4: - case BUILT_IN_ATOMIC_ADD_FETCH_8: - case BUILT_IN_ATOMIC_ADD_FETCH_16: - optimize_atomic_op_fetch_cmp_0 (&i, - IFN_ATOMIC_ADD_FETCH_CMP_0, - true); - break; - case BUILT_IN_SYNC_ADD_AND_FETCH_1: - case BUILT_IN_SYNC_ADD_AND_FETCH_2: - case BUILT_IN_SYNC_ADD_AND_FETCH_4: - case BUILT_IN_SYNC_ADD_AND_FETCH_8: - case BUILT_IN_SYNC_ADD_AND_FETCH_16: - optimize_atomic_op_fetch_cmp_0 (&i, - IFN_ATOMIC_ADD_FETCH_CMP_0, - false); - break; - - case BUILT_IN_ATOMIC_SUB_FETCH_1: - case BUILT_IN_ATOMIC_SUB_FETCH_2: - case BUILT_IN_ATOMIC_SUB_FETCH_4: - case BUILT_IN_ATOMIC_SUB_FETCH_8: - case BUILT_IN_ATOMIC_SUB_FETCH_16: - optimize_atomic_op_fetch_cmp_0 (&i, - IFN_ATOMIC_SUB_FETCH_CMP_0, - true); - break; - case BUILT_IN_SYNC_SUB_AND_FETCH_1: - case BUILT_IN_SYNC_SUB_AND_FETCH_2: - case BUILT_IN_SYNC_SUB_AND_FETCH_4: - case BUILT_IN_SYNC_SUB_AND_FETCH_8: - case BUILT_IN_SYNC_SUB_AND_FETCH_16: - optimize_atomic_op_fetch_cmp_0 (&i, - IFN_ATOMIC_SUB_FETCH_CMP_0, - false); - break; - - case BUILT_IN_ATOMIC_FETCH_OR_1: - case BUILT_IN_ATOMIC_FETCH_OR_2: - case BUILT_IN_ATOMIC_FETCH_OR_4: - case BUILT_IN_ATOMIC_FETCH_OR_8: - case BUILT_IN_ATOMIC_FETCH_OR_16: - optimize_atomic_bit_test_and (&i, - IFN_ATOMIC_BIT_TEST_AND_SET, - true, false); - break; - case BUILT_IN_SYNC_FETCH_AND_OR_1: - case BUILT_IN_SYNC_FETCH_AND_OR_2: - case BUILT_IN_SYNC_FETCH_AND_OR_4: - case BUILT_IN_SYNC_FETCH_AND_OR_8: - case BUILT_IN_SYNC_FETCH_AND_OR_16: - optimize_atomic_bit_test_and (&i, - IFN_ATOMIC_BIT_TEST_AND_SET, - false, false); - break; - - case BUILT_IN_ATOMIC_FETCH_XOR_1: - case BUILT_IN_ATOMIC_FETCH_XOR_2: - case BUILT_IN_ATOMIC_FETCH_XOR_4: - case BUILT_IN_ATOMIC_FETCH_XOR_8: - case BUILT_IN_ATOMIC_FETCH_XOR_16: - optimize_atomic_bit_test_and - (&i, IFN_ATOMIC_BIT_TEST_AND_COMPLEMENT, true, false); - break; - case BUILT_IN_SYNC_FETCH_AND_XOR_1: - case BUILT_IN_SYNC_FETCH_AND_XOR_2: - case BUILT_IN_SYNC_FETCH_AND_XOR_4: - case BUILT_IN_SYNC_FETCH_AND_XOR_8: - case BUILT_IN_SYNC_FETCH_AND_XOR_16: - optimize_atomic_bit_test_and - (&i, IFN_ATOMIC_BIT_TEST_AND_COMPLEMENT, false, false); - break; - - case BUILT_IN_ATOMIC_XOR_FETCH_1: - case BUILT_IN_ATOMIC_XOR_FETCH_2: - case BUILT_IN_ATOMIC_XOR_FETCH_4: - case BUILT_IN_ATOMIC_XOR_FETCH_8: - case BUILT_IN_ATOMIC_XOR_FETCH_16: - if (optimize_atomic_bit_test_and - (&i, IFN_ATOMIC_BIT_TEST_AND_COMPLEMENT, true, true)) - break; - optimize_atomic_op_fetch_cmp_0 (&i, - IFN_ATOMIC_XOR_FETCH_CMP_0, - true); - break; - case BUILT_IN_SYNC_XOR_AND_FETCH_1: - case BUILT_IN_SYNC_XOR_AND_FETCH_2: - case BUILT_IN_SYNC_XOR_AND_FETCH_4: - case BUILT_IN_SYNC_XOR_AND_FETCH_8: - case BUILT_IN_SYNC_XOR_AND_FETCH_16: - if (optimize_atomic_bit_test_and - (&i, IFN_ATOMIC_BIT_TEST_AND_COMPLEMENT, false, true)) - break; - optimize_atomic_op_fetch_cmp_0 (&i, - IFN_ATOMIC_XOR_FETCH_CMP_0, - false); - break; - - case BUILT_IN_ATOMIC_FETCH_AND_1: - case BUILT_IN_ATOMIC_FETCH_AND_2: - case BUILT_IN_ATOMIC_FETCH_AND_4: - case BUILT_IN_ATOMIC_FETCH_AND_8: - case BUILT_IN_ATOMIC_FETCH_AND_16: - optimize_atomic_bit_test_and (&i, - IFN_ATOMIC_BIT_TEST_AND_RESET, - true, false); - break; - case BUILT_IN_SYNC_FETCH_AND_AND_1: - case BUILT_IN_SYNC_FETCH_AND_AND_2: - case BUILT_IN_SYNC_FETCH_AND_AND_4: - case BUILT_IN_SYNC_FETCH_AND_AND_8: - case BUILT_IN_SYNC_FETCH_AND_AND_16: - optimize_atomic_bit_test_and (&i, - IFN_ATOMIC_BIT_TEST_AND_RESET, - false, false); - break; - - case BUILT_IN_ATOMIC_AND_FETCH_1: - case BUILT_IN_ATOMIC_AND_FETCH_2: - case BUILT_IN_ATOMIC_AND_FETCH_4: - case BUILT_IN_ATOMIC_AND_FETCH_8: - case BUILT_IN_ATOMIC_AND_FETCH_16: - optimize_atomic_op_fetch_cmp_0 (&i, - IFN_ATOMIC_AND_FETCH_CMP_0, - true); - break; - case BUILT_IN_SYNC_AND_AND_FETCH_1: - case BUILT_IN_SYNC_AND_AND_FETCH_2: - case BUILT_IN_SYNC_AND_AND_FETCH_4: - case BUILT_IN_SYNC_AND_AND_FETCH_8: - case BUILT_IN_SYNC_AND_AND_FETCH_16: - optimize_atomic_op_fetch_cmp_0 (&i, - IFN_ATOMIC_AND_FETCH_CMP_0, - false); - break; - - case BUILT_IN_ATOMIC_OR_FETCH_1: - case BUILT_IN_ATOMIC_OR_FETCH_2: - case BUILT_IN_ATOMIC_OR_FETCH_4: - case BUILT_IN_ATOMIC_OR_FETCH_8: - case BUILT_IN_ATOMIC_OR_FETCH_16: - optimize_atomic_op_fetch_cmp_0 (&i, - IFN_ATOMIC_OR_FETCH_CMP_0, - true); - break; - case BUILT_IN_SYNC_OR_AND_FETCH_1: - case BUILT_IN_SYNC_OR_AND_FETCH_2: - case BUILT_IN_SYNC_OR_AND_FETCH_4: - case BUILT_IN_SYNC_OR_AND_FETCH_8: - case BUILT_IN_SYNC_OR_AND_FETCH_16: - optimize_atomic_op_fetch_cmp_0 (&i, - IFN_ATOMIC_OR_FETCH_CMP_0, - false); - break; - - case BUILT_IN_VA_START: - case BUILT_IN_VA_END: - case BUILT_IN_VA_COPY: - /* These shouldn't be folded before pass_stdarg. */ - result = optimize_stdarg_builtin (stmt); - break; - - default:; - } - - if (!result) - { - gsi_next (&i); - continue; - } - - gimplify_and_update_call_from_tree (&i, result); - } - - todoflags |= TODO_update_address_taken; - - if (dump_file && (dump_flags & TDF_DETAILS)) - { - fprintf (dump_file, "Simplified\n "); - print_gimple_stmt (dump_file, stmt, 0, dump_flags); - } - - old_stmt = stmt; - stmt = gsi_stmt (i); - update_stmt (stmt); - - if (maybe_clean_or_replace_eh_stmt (old_stmt, stmt) - && gimple_purge_dead_eh_edges (bb)) - cfg_changed = true; - - if (dump_file && (dump_flags & TDF_DETAILS)) - { - fprintf (dump_file, "to\n "); - print_gimple_stmt (dump_file, stmt, 0, dump_flags); - fprintf (dump_file, "\n"); - } - - /* Retry the same statement if it changed into another - builtin, there might be new opportunities now. */ - if (gimple_code (stmt) != GIMPLE_CALL) - { - gsi_next (&i); - continue; - } - callee = gimple_call_fndecl (stmt); - if (!callee - || !fndecl_built_in_p (callee, fcode)) - gsi_next (&i); - } - } - - /* Delete unreachable blocks. */ - if (cfg_changed) - todoflags |= TODO_cleanup_cfg; - - return todoflags; -} - -} // anon namespace - -gimple_opt_pass * -make_pass_fold_builtins (gcc::context *ctxt) -{ - return new pass_fold_builtins (ctxt); -} - /* A simple pass that emits some warnings post IPA. */ namespace { diff --git a/gcc/tree-ssa-dce.cc b/gcc/tree-ssa-dce.cc index ba9cd6536aeb..438690883226 100644 --- a/gcc/tree-ssa-dce.cc +++ b/gcc/tree-ssa-dce.cc @@ -1457,6 +1457,70 @@ control_parents_preserved_p (basic_block bb) return true; } +/* If basic block is empty, we can remove conditionals that controls + its execution. However in some cases the empty BB can stay live + (such as when it was a header of empty loop). In this case we + need to update its count. Since regions of dead BBs are acyclic + we simply propagate counts forward from live BBs to dead ones. */ + +static void +propagate_counts () +{ + basic_block bb; + auto_vec queue; + hash_map cnt; + + FOR_EACH_BB_FN (bb, cfun) + if (!bitmap_bit_p (bb_contains_live_stmts, bb->index)) + { + int n = 0; + for (edge e : bb->preds) + if (e->src != ENTRY_BLOCK_PTR_FOR_FN (cfun) + && !bitmap_bit_p (bb_contains_live_stmts, e->src->index)) + n++; + if (!n) + queue.safe_push (bb); + cnt.put (bb, n); + } + while (!queue.is_empty ()) + { + basic_block bb = queue.pop (); + profile_count sum = profile_count::zero (); + + for (edge e : bb->preds) + { + sum += e->count (); + gcc_checking_assert (!cnt.get (e->src)); + } + /* If we have partial profile and some counts of incomming edges are + unknown, it is probably better to keep the existing count. + We could also propagate bi-directionally. */ + if (sum.initialized_p () && !(sum == bb->count)) + { + if (dump_file && (dump_flags & TDF_DETAILS)) + { + fprintf (dump_file, "Updating count of empty bb %i from ", + bb->index); + bb->count.dump (dump_file); + fprintf (dump_file, " to "); + sum.dump (dump_file); + fprintf (dump_file, "\n"); + } + bb->count = sum; + } + cnt.remove (bb); + for (edge e : bb->succs) + if (int *n = cnt.get (e->dest)) + { + (*n)--; + if (!*n) + queue.safe_push (e->dest); + } + } + /* Do not check that all blocks has been processed, since for + empty infinite loops this is not the case. */ +} + /* Eliminate unnecessary statements. Any instruction not marked as necessary contributes nothing to the program, and can be deleted. */ @@ -1800,6 +1864,8 @@ eliminate_unnecessary_stmts (bool aggressive) } } } + if (bb_contains_live_stmts) + propagate_counts (); } if (bb_postorder) diff --git a/gcc/tree-ssa-forwprop.cc b/gcc/tree-ssa-forwprop.cc index 9c6f4b355d6d..749708f05a29 100644 --- a/gcc/tree-ssa-forwprop.cc +++ b/gcc/tree-ssa-forwprop.cc @@ -1190,7 +1190,7 @@ constant_pointer_difference (tree p1, tree p2) /* Helper function for optimize_aggr_zeroprop. Props the zeroing (memset, VAL) that was done in DEST+OFFSET:LEN (DEFSTMT) into the STMT. Returns true if the STMT was updated. */ -static bool +static void optimize_aggr_zeroprop_1 (gimple *defstmt, gimple *stmt, tree dest, poly_int64 offset, tree val, poly_offset_int len) @@ -1214,29 +1214,29 @@ optimize_aggr_zeroprop_1 (gimple *defstmt, gimple *stmt, : TYPE_SIZE_UNIT (TREE_TYPE (src2))); /* Can only handle zero memsets. */ if (!integer_zerop (val)) - return false; + return; } else - return false; + return; if (len2 == NULL_TREE || !poly_int_tree_p (len2)) - return false; + return; src2 = get_addr_base_and_unit_offset (src2, &offset2); if (src2 == NULL_TREE || maybe_lt (offset2, offset)) - return false; + return; if (!operand_equal_p (dest, src2, 0)) - return false; + return; /* [ dest + offset, dest + offset + len - 1 ] is set to val. Make sure that [ dest + offset2, dest + offset2 + len2 - 1 ] is a subset of that. */ if (maybe_gt (wi::to_poly_offset (len2) + (offset2 - offset), len)) - return false; + return; if (dump_file && (dump_flags & TDF_DETAILS)) { @@ -1282,8 +1282,6 @@ optimize_aggr_zeroprop_1 (gimple *defstmt, gimple *stmt, /* Mark the bb for eh cleanup if needed. */ if (maybe_clean_or_replace_eh_stmt (orig_stmt, stmt)) bitmap_set_bit (to_purge, gimple_bb (stmt)->index); - - return true; } /* Optimize @@ -1295,19 +1293,17 @@ optimize_aggr_zeroprop_1 (gimple *defstmt, gimple *stmt, Similarly for memset (&a, ..., sizeof (a)); instead of a = {}; and/or memcpy (&b, &a, sizeof (a)); instead of b = a; */ -static bool -optimize_aggr_zeroprop (gimple_stmt_iterator *gsip, bool full_walk) +static void +optimize_aggr_zeroprop (gimple *stmt, bool full_walk) { ao_ref read; - gimple *stmt = gsi_stmt (*gsip); if (gimple_has_volatile_ops (stmt)) - return false; + return; tree dest = NULL_TREE; tree val = integer_zero_node; tree len = NULL_TREE; bool can_use_tbba = true; - bool changed = false; if (gimple_call_builtin_p (stmt, BUILT_IN_MEMSET) && TREE_CODE (gimple_call_arg (stmt, 0)) == ADDR_EXPR @@ -1362,7 +1358,7 @@ optimize_aggr_zeroprop (gimple_stmt_iterator *gsip, bool full_walk) } if (dest == NULL_TREE) - return false; + return; if (len == NULL_TREE) len = (TREE_CODE (dest) == COMPONENT_REF @@ -1370,13 +1366,13 @@ optimize_aggr_zeroprop (gimple_stmt_iterator *gsip, bool full_walk) : TYPE_SIZE_UNIT (TREE_TYPE (dest))); if (len == NULL_TREE || !poly_int_tree_p (len)) - return false; + return; /* This store needs to be on the byte boundary and pointing to an object. */ poly_int64 offset; tree dest_base = get_addr_base_and_unit_offset (dest, &offset); if (dest_base == NULL_TREE) - return false; + return; /* Setup the worklist. */ auto_vec> worklist; @@ -1409,33 +1405,202 @@ optimize_aggr_zeroprop (gimple_stmt_iterator *gsip, bool full_walk) new_limit)); } - if (optimize_aggr_zeroprop_1 (stmt, use_stmt, dest_base, offset, - val, wi::to_poly_offset (len))) - changed = true; + optimize_aggr_zeroprop_1 (stmt, use_stmt, dest_base, offset, + val, wi::to_poly_offset (len)); } } - return changed; +} + +/* Returns the pointer to the base of the object of the + reference EXPR and extracts the information about + the offset of the access, storing it to PBYTESIZE, + PBYTEPOS and PREVERSEP. + If the access is not a byte sized or position is not + on the byte, return NULL. */ +static tree +split_core_and_offset_size (tree expr, + poly_int64 *pbytesize, poly_int64 *pbytepos, + tree *poffset, int *preversep) +{ + tree core; + machine_mode mode; + int unsignedp, volatilep; + poly_int64 bitsize; + poly_int64 bitpos; + location_t loc = EXPR_LOCATION (expr); + + core = get_inner_reference (expr, &bitsize, &bitpos, + poffset, &mode, &unsignedp, preversep, + &volatilep); + if (!multiple_p (bitsize, BITS_PER_UNIT, pbytesize)) + return NULL_TREE; + if (!multiple_p (bitpos, BITS_PER_UNIT, pbytepos)) + return NULL_TREE; + /* If we are left with MEM[a + CST] strip that and add it to the + pbytepos and return a. */ + if (TREE_CODE (core) == MEM_REF) + { + poly_offset_int tem; + tem = wi::to_poly_offset (TREE_OPERAND (core, 1)); + tem += *pbytepos; + if (tem.to_shwi (pbytepos)) + return TREE_OPERAND (core, 0); + } + core = build_fold_addr_expr_loc (loc, core); + STRIP_NOPS (core); + return core; +} + +/* Returns a new src based on the + copy `DEST = SRC` and for the old SRC2. + Returns null if SRC2 is not related to DEST. */ + +static tree +new_src_based_on_copy (tree src2, tree dest, tree src) +{ + /* If the second src is not exactly the same as dest, + try to handle it seperately; see it is address/size equivalent. + Handles `a` and `a.b` and `MEM(&a)` which all have + the same size and offsets as address/size equivalent. + This allows copying over a memcpy and also one for copying + where one field is the same size as the whole struct. */ + if (operand_equal_p (dest, src2)) + return src; + /* if both dest and src2 are decls, then we know these 2 + accesses can't be the same. */ + if (DECL_P (dest) && DECL_P (src2)) + return NULL_TREE; + /* A VCE can't be used with imag/real or BFR so reject them early. */ + if (TREE_CODE (src) == IMAGPART_EXPR + || TREE_CODE (src) == REALPART_EXPR + || TREE_CODE (src) == BIT_FIELD_REF) + return NULL_TREE; + tree core1, core2; + poly_int64 bytepos1, bytepos2; + poly_int64 bytesize1, bytesize2; + tree toffset1, toffset2; + int reversep1 = 0; + int reversep2 = 0; + poly_int64 diff = 0; + core1 = split_core_and_offset_size (dest, &bytesize1, &bytepos1, + &toffset1, &reversep1); + core2 = split_core_and_offset_size (src2, &bytesize2, &bytepos2, + &toffset2, &reversep2); + if (!core1 || !core2) + return NULL_TREE; + if (reversep1 != reversep2) + return NULL_TREE; + /* The sizes of the 2 accesses need to be the same. */ + if (!known_eq (bytesize1, bytesize2)) + return NULL_TREE; + if (!operand_equal_p (core1, core2, 0)) + return NULL_TREE; + + if (toffset1 && toffset2) + { + tree type = TREE_TYPE (toffset1); + if (type != TREE_TYPE (toffset2)) + toffset2 = fold_convert (type, toffset2); + + tree tdiff = fold_build2 (MINUS_EXPR, type, toffset1, toffset2); + if (!cst_and_fits_in_hwi (tdiff)) + return NULL_TREE; + + diff = int_cst_value (tdiff); + } + else if (toffset1 || toffset2) + { + /* If only one of the offsets is non-constant, the difference cannot + be a constant. */ + return NULL_TREE; + } + diff += bytepos1 - bytepos2; + /* The offset between the 2 need to be 0. */ + if (!known_eq (diff, 0)) + return NULL_TREE; + return fold_build1 (VIEW_CONVERT_EXPR,TREE_TYPE (src2), src); +} + +/* Returns true if SRC and DEST are the same address such that + `SRC == DEST;` is considered a nop. This is more than an + operand_equal_p check as it needs to be similar to + new_src_based_on_copy. */ + +static bool +same_for_assignment (tree src, tree dest) +{ + if (operand_equal_p (dest, src, 0)) + return true; + /* if both dest and src2 are decls, then we know these 2 + accesses can't be the same. */ + if (DECL_P (dest) && DECL_P (src)) + return false; + + tree core1, core2; + poly_int64 bytepos1, bytepos2; + poly_int64 bytesize1, bytesize2; + tree toffset1, toffset2; + int reversep1 = 0; + int reversep2 = 0; + poly_int64 diff = 0; + core1 = split_core_and_offset_size (dest, &bytesize1, &bytepos1, + &toffset1, &reversep1); + core2 = split_core_and_offset_size (src, &bytesize2, &bytepos2, + &toffset2, &reversep2); + if (!core1 || !core2) + return false; + if (reversep1 != reversep2) + return false; + /* The sizes of the 2 accesses need to be the same. */ + if (!known_eq (bytesize1, bytesize2)) + return false; + if (!operand_equal_p (core1, core2, 0)) + return false; + if (toffset1 && toffset2) + { + tree type = TREE_TYPE (toffset1); + if (type != TREE_TYPE (toffset2)) + toffset2 = fold_convert (type, toffset2); + + tree tdiff = fold_build2 (MINUS_EXPR, type, toffset1, toffset2); + if (!cst_and_fits_in_hwi (tdiff)) + return false; + + diff = int_cst_value (tdiff); + } + else if (toffset1 || toffset2) + { + /* If only one of the offsets is non-constant, the difference cannot + be a constant. */ + return false; + } + diff += bytepos1 - bytepos2; + /* The offset between the 2 need to be 0. */ + if (!known_eq (diff, 0)) + return false; + return true; } /* Helper function for optimize_agr_copyprop. For aggregate copies in USE_STMT, see if DEST is on the lhs of USE_STMT and replace it with SRC. */ -static bool +static void optimize_agr_copyprop_1 (gimple *stmt, gimple *use_stmt, tree dest, tree src) { gcc_assert (gimple_assign_load_p (use_stmt) && gimple_store_p (use_stmt)); if (gimple_has_volatile_ops (use_stmt)) - return false; + return; tree dest2 = gimple_assign_lhs (use_stmt); tree src2 = gimple_assign_rhs1 (use_stmt); /* If the new store is `src2 = src2;` skip over it. */ - if (operand_equal_p (src2, dest2, 0)) - return false; - if (!operand_equal_p (dest, src2, 0)) - return false; + if (same_for_assignment (src2, dest2)) + return; + src = new_src_based_on_copy (src2, dest, src); + if (!src) + return; /* For 2 memory refences and using a temporary to do the copy, don't remove the temporary as the 2 memory references might overlap. Note t does not need to be decl as it could be field. @@ -1463,7 +1628,7 @@ optimize_agr_copyprop_1 (gimple *stmt, gimple *use_stmt, tree len = TYPE_SIZE_UNIT (TREE_TYPE (src)); if (len == NULL_TREE || !tree_fits_poly_int64_p (len)) - return false; + return; tree base1 = get_addr_base_and_unit_offset (dest2, &offset1); tree base2 = get_addr_base_and_unit_offset (src, &offset2); poly_int64 size = tree_to_poly_int64 (len); @@ -1488,14 +1653,14 @@ optimize_agr_copyprop_1 (gimple *stmt, gimple *use_stmt, of overlapping. */ if (maybe_lt (align1, size) || maybe_lt (align2, size)) - return false; + return; } /* Make sure [offset1, offset1 + len - 1] does not overlap with [offset2, offset2 + len - 1], it is ok if they are at the same location though. */ else if (ranges_maybe_overlap_p (offset1, size, offset2, size) && !known_eq (offset2, offset1)) - return false; + return; } if (dump_file && (dump_flags & TDF_DETAILS)) @@ -1518,13 +1683,12 @@ optimize_agr_copyprop_1 (gimple *stmt, gimple *use_stmt, if (maybe_clean_or_replace_eh_stmt (orig_stmt, use_stmt)) bitmap_set_bit (to_purge, gimple_bb (stmt)->index); statistics_counter_event (cfun, "copy prop for aggregate", 1); - return true; } /* Helper function for optimize_agr_copyprop_1, propagate aggregates into the arguments of USE_STMT if the argument matches with DEST; replacing it with SRC. */ -static bool +static void optimize_agr_copyprop_arg (gimple *defstmt, gcall *call, tree dest, tree src) { @@ -1536,8 +1700,10 @@ optimize_agr_copyprop_arg (gimple *defstmt, gcall *call, || is_gimple_min_invariant (*argptr) || TYPE_VOLATILE (TREE_TYPE (*argptr))) continue; - if (!operand_equal_p (*argptr, dest, 0)) + tree newsrc = new_src_based_on_copy (*argptr, dest, src); + if (!newsrc) continue; + if (dump_file && (dump_flags & TDF_DETAILS)) { fprintf (dump_file, "Simplified\n "); @@ -1545,7 +1711,7 @@ optimize_agr_copyprop_arg (gimple *defstmt, gcall *call, fprintf (dump_file, "after previous\n "); print_gimple_stmt (dump_file, defstmt, 0, dump_flags); } - *argptr = unshare_expr (src); + *argptr = unshare_expr (newsrc); changed = true; if (dump_file && (dump_flags & TDF_DETAILS)) { @@ -1555,7 +1721,6 @@ optimize_agr_copyprop_arg (gimple *defstmt, gcall *call, } if (changed) update_stmt (call); - return changed; } /* Optimizes @@ -1564,7 +1729,7 @@ optimize_agr_copyprop_arg (gimple *defstmt, gcall *call, into DEST = SRC; DEST2 = SRC; - GSIP is the first statement and SRC is the common + STMT is the first statement and SRC is the common between the statements. Also optimizes: @@ -1575,39 +1740,33 @@ optimize_agr_copyprop_arg (gimple *defstmt, gcall *call, call_func(..., SRC, ...); */ -static bool -optimize_agr_copyprop (gimple_stmt_iterator *gsip) +static void +optimize_agr_copyprop (gimple *stmt) { - gimple *stmt = gsi_stmt (*gsip); if (gimple_has_volatile_ops (stmt)) - return false; + return; /* Can't prop if the statement could throw. */ if (stmt_could_throw_p (cfun, stmt)) - return false; + return; tree dest = gimple_assign_lhs (stmt); tree src = gimple_assign_rhs1 (stmt); /* If the statement is `src = src;` then ignore it. */ - if (operand_equal_p (dest, src, 0)) - return false; + if (same_for_assignment (dest, src)) + return; tree vdef = gimple_vdef (stmt); imm_use_iterator iter; gimple *use_stmt; - bool changed = false; FOR_EACH_IMM_USE_STMT (use_stmt, iter, vdef) { if (gimple_assign_load_p (use_stmt) - && gimple_store_p (use_stmt) - && optimize_agr_copyprop_1 (stmt, use_stmt, dest, src)) - changed = true; - else if (is_gimple_call (use_stmt) - && optimize_agr_copyprop_arg (stmt, as_a(use_stmt), - dest, src)) - changed = true; + && gimple_store_p (use_stmt)) + optimize_agr_copyprop_1 (stmt, use_stmt, dest, src); + else if (is_gimple_call (use_stmt)) + optimize_agr_copyprop_arg (stmt, as_a(use_stmt), dest, src); } - return changed; } /* Optimizes builtin memcmps for small constant sizes. @@ -1683,7 +1842,15 @@ simplify_builtin_memcmp (gimple_stmt_iterator *gsi_p, gcall *stmt) return true; } } - return false; + + /* Replace memcmp with memcmp_eq if the above fails. */ + if (DECL_FUNCTION_CODE (gimple_call_fndecl (stmt)) == BUILT_IN_MEMCMP_EQ) + return false; + if (!fold_before_rtl_expansion_p ()) + return false; + gimple_call_set_fndecl (stmt, builtin_decl_explicit (BUILT_IN_MEMCMP_EQ)); + update_stmt (stmt); + return true; } /* Optimizes builtin memchrs for small constant sizes with a const string. @@ -1965,6 +2132,116 @@ simplify_builtin_memcpy_memset (gimple_stmt_iterator *gsi_p, gcall *stmt2) } } + +/* Try to optimize out __builtin_stack_restore. Optimize it out + if there is another __builtin_stack_restore in the same basic + block and no calls or ASM_EXPRs are in between, or if this block's + only outgoing edge is to EXIT_BLOCK and there are no calls or + ASM_EXPRs after this __builtin_stack_restore. + Note restore right before a noreturn function is not needed. + And skip some cheap calls that will most likely become an instruction. + Restoring the stack before a call is important to be able to keep + stack usage down so that call does not run out of stack. */ + + +static bool +optimize_stack_restore (gimple_stmt_iterator *gsi, gimple *call) +{ + if (!fold_before_rtl_expansion_p ()) + return false; + tree callee; + gimple *stmt; + + basic_block bb = gsi_bb (*gsi); + + if (gimple_call_num_args (call) != 1 + || TREE_CODE (gimple_call_arg (call, 0)) != SSA_NAME + || !POINTER_TYPE_P (TREE_TYPE (gimple_call_arg (call, 0)))) + return false; + + gimple_stmt_iterator i = *gsi; + for (gsi_next (&i); !gsi_end_p (i); gsi_next (&i)) + { + stmt = gsi_stmt (i); + if (is_a (stmt)) + return false; + gcall *call = dyn_cast(stmt); + if (!call) + continue; + + /* We can remove the restore in front of noreturn + calls. Since the restore will happen either + via an unwind/longjmp or not at all. */ + if (gimple_call_noreturn_p (call)) + break; + + /* Internal calls are ok, to bypass + check first since fndecl will be null. */ + if (gimple_call_internal_p (call)) + continue; + + callee = gimple_call_fndecl (call); + /* Non-builtin calls are not ok. */ + if (!callee + || !fndecl_built_in_p (callee)) + return false; + + /* Do not remove stack updates before strub leave. */ + if (fndecl_built_in_p (callee, BUILT_IN___STRUB_LEAVE) + /* Alloca calls are not ok either. */ + || fndecl_builtin_alloc_p (callee)) + return false; + + if (fndecl_built_in_p (callee, BUILT_IN_STACK_RESTORE)) + goto second_stack_restore; + + /* If not a simple or inexpensive builtin, then it is not ok either. */ + if (!is_simple_builtin (callee) + && !is_inexpensive_builtin (callee)) + return false; + } + + /* Allow one successor of the exit block, or zero successors. */ + switch (EDGE_COUNT (bb->succs)) + { + case 0: + break; + case 1: + if (single_succ_edge (bb)->dest != EXIT_BLOCK_PTR_FOR_FN (cfun)) + return false; + break; + default: + return false; + } + second_stack_restore: + + /* If there's exactly one use, then zap the call to __builtin_stack_save. + If there are multiple uses, then the last one should remove the call. + In any case, whether the call to __builtin_stack_save can be removed + or not is irrelevant to removing the call to __builtin_stack_restore. */ + if (has_single_use (gimple_call_arg (call, 0))) + { + gimple *stack_save = SSA_NAME_DEF_STMT (gimple_call_arg (call, 0)); + if (is_gimple_call (stack_save)) + { + callee = gimple_call_fndecl (stack_save); + if (callee && fndecl_built_in_p (callee, BUILT_IN_STACK_SAVE)) + { + gimple_stmt_iterator stack_save_gsi; + tree rhs; + + stack_save_gsi = gsi_for_stmt (stack_save); + rhs = build_int_cst (TREE_TYPE (gimple_call_arg (call, 0)), 0); + replace_call_with_value (&stack_save_gsi, rhs); + } + } + } + + /* No effect, so the statement will be deleted. */ + replace_call_with_value (gsi, NULL_TREE); + return true; +} + /* *GSI_P is a GIMPLE_CALL to a builtin function. Optimize memcpy (p, "abcd", 4); @@ -1996,6 +2273,8 @@ simplify_builtin_call (gimple_stmt_iterator *gsi_p, tree callee2, bool full_walk switch (DECL_FUNCTION_CODE (callee2)) { + case BUILT_IN_STACK_RESTORE: + return optimize_stack_restore (gsi_p, as_a(stmt2)); case BUILT_IN_MEMCMP: case BUILT_IN_MEMCMP_EQ: return simplify_builtin_memcmp (gsi_p, as_a(stmt2)); @@ -2007,8 +2286,7 @@ simplify_builtin_call (gimple_stmt_iterator *gsi_p, tree callee2, bool full_walk { /* Try to prop the zeroing/value of the memset to memcpy if the dest is an address and the value is a constant. */ - if (optimize_aggr_zeroprop (gsi_p, full_walk)) - return true; + optimize_aggr_zeroprop (stmt2, full_walk); } return simplify_builtin_memcpy_memset (gsi_p, as_a(stmt2)); @@ -3017,17 +3295,6 @@ simplify_count_zeroes (gimple_stmt_iterator *gsi) gimple_seq_add_stmt (&seq, call); tree prev_lhs = gimple_call_lhs (call); - if (fn == IFN_CLZ) - { - g = gimple_build_assign (make_ssa_name (integer_type_node), - MINUS_EXPR, - build_int_cst (integer_type_node, - input_bits - 1), - prev_lhs); - gimple_set_location (g, gimple_location (stmt)); - gimple_seq_add_stmt (&seq, g); - prev_lhs = gimple_assign_lhs (g); - } if (zero_ok && zero_val == ctz_val) ; @@ -3059,6 +3326,18 @@ simplify_count_zeroes (gimple_stmt_iterator *gsi) prev_lhs = gimple_assign_lhs (g); } + if (fn == IFN_CLZ) + { + g = gimple_build_assign (make_ssa_name (integer_type_node), + MINUS_EXPR, + build_int_cst (integer_type_node, + input_bits - 1), + prev_lhs); + gimple_set_location (g, gimple_location (stmt)); + gimple_seq_add_stmt (&seq, g); + prev_lhs = gimple_assign_lhs (g); + } + g = gimple_build_assign (gimple_assign_lhs (stmt), NOP_EXPR, prev_lhs); gimple_seq_add_stmt (&seq, g); gsi_replace_with_seq (gsi, seq, true); @@ -4628,6 +4907,49 @@ class pass_forwprop : public gimple_opt_pass bool m_full_walk = false; }; // class pass_forwprop +/* Attemp to make the BB block of __builtin_unreachable unreachable by changing + the incoming jumps. Return true if at least one jump was changed. */ + +static bool +optimize_unreachable (basic_block bb) +{ + gimple_stmt_iterator gsi; + gimple *stmt; + edge_iterator ei; + edge e; + bool ret; + + ret = false; + FOR_EACH_EDGE (e, ei, bb->preds) + { + gsi = gsi_last_bb (e->src); + if (gsi_end_p (gsi)) + continue; + + stmt = gsi_stmt (gsi); + if (gcond *cond_stmt = dyn_cast (stmt)) + { + if (e->flags & EDGE_TRUE_VALUE) + gimple_cond_make_false (cond_stmt); + else if (e->flags & EDGE_FALSE_VALUE) + gimple_cond_make_true (cond_stmt); + else + gcc_unreachable (); + update_stmt (cond_stmt); + } + else + { + /* Todo: handle other cases. Note that unreachable switch case + statements have already been removed. */ + continue; + } + + ret = true; + } + + return ret; +} + unsigned int pass_forwprop::execute (function *fun) { @@ -4695,6 +5017,21 @@ pass_forwprop::execute (function *fun) if (!any) continue; + /* Remove conditions that go directly to unreachable when this is the last forwprop. */ + if (last_p + && !(flag_sanitize & SANITIZE_UNREACHABLE)) + { + gimple_stmt_iterator gsi; + gsi = gsi_start_nondebug_after_labels_bb (bb); + if (!gsi_end_p (gsi) + && gimple_call_builtin_p (*gsi, BUILT_IN_UNREACHABLE) + && optimize_unreachable (bb)) + { + cfg_changed = true; + continue; + } + } + /* Record degenerate PHIs in the lattice. */ for (gphi_iterator si = gsi_start_phis (bb); !gsi_end_p (si); gsi_next (&si)) @@ -5115,7 +5452,8 @@ pass_forwprop::execute (function *fun) do { gimple *orig_stmt = stmt = gsi_stmt (gsi); - bool was_noreturn = (is_gimple_call (stmt) + bool was_call = is_gimple_call (stmt); + bool was_noreturn = (was_call && gimple_call_noreturn_p (stmt)); changed = false; @@ -5127,6 +5465,13 @@ pass_forwprop::execute (function *fun) if (fold_stmt (&gsi, fwprop_ssa_val, simple_dce_worklist)) { changed = true; + /* There is no updating of the address + taken after the last forwprop so update + the addresses when a folding happened to a call. + The va_* builtins can remove taking of the address so + can the sincos->cexpi transformation. See PR 39643 and PR 20983. */ + if (was_call && last_p) + todoflags |= TODO_update_address_taken; stmt = gsi_stmt (gsi); /* Cleanup the CFG if we simplified a condition to true or false. */ @@ -5150,19 +5495,13 @@ pass_forwprop::execute (function *fun) { tree rhs1 = gimple_assign_rhs1 (stmt); enum tree_code code = gimple_assign_rhs_code (stmt); - if (gimple_store_p (stmt) && optimize_aggr_zeroprop (&gsi, full_walk)) - { - changed = true; - break; - } - if (gimple_assign_load_p (stmt) && gimple_store_p (stmt) - && optimize_agr_copyprop (&gsi)) + if (gimple_store_p (stmt)) { - changed = true; - break; + optimize_aggr_zeroprop (stmt, full_walk); + if (gimple_assign_load_p (stmt)) + optimize_agr_copyprop (stmt); } - - if (TREE_CODE_CLASS (code) == tcc_comparison) + else if (TREE_CODE_CLASS (code) == tcc_comparison) changed |= forward_propagate_into_comparison (&gsi); else if ((code == PLUS_EXPR || code == BIT_IOR_EXPR diff --git a/gcc/tree-ssa-math-opts.cc b/gcc/tree-ssa-math-opts.cc index bfad4cf5c99d..0db39f330ead 100644 --- a/gcc/tree-ssa-math-opts.cc +++ b/gcc/tree-ssa-math-opts.cc @@ -1632,7 +1632,39 @@ build_and_insert_cast (gimple_stmt_iterator *gsi, location_t loc, tree type, tree val) { tree result = make_ssa_name (type); - gassign *stmt = gimple_build_assign (result, NOP_EXPR, val); + tree rhs = val; + + if (TREE_CODE (val) == SSA_NAME) + { + gimple *def = SSA_NAME_DEF_STMT (val); + + if (is_gimple_assign (def) + && CONVERT_EXPR_CODE_P (gimple_assign_rhs_code (def))) + { + tree cast_rhs = gimple_assign_rhs1 (def); + tree cast_rhs_type = TREE_TYPE (cast_rhs); + tree val_type = TREE_TYPE (val); + + bool unsigned_p = TYPE_UNSIGNED (type); + bool unsigned_rhs_p = TYPE_UNSIGNED (cast_rhs_type); + bool unsigned_val_p = TYPE_UNSIGNED (val_type); + + unsigned rhs_prec = TYPE_PRECISION (cast_rhs_type); + unsigned type_prec = TYPE_PRECISION (type); + unsigned val_prec = TYPE_PRECISION (val_type); + + if (type_prec >= rhs_prec && val_prec >= rhs_prec) + { + /* Aka any sign extend from small to big size */ + if (!((val_prec > rhs_prec && !unsigned_val_p && !unsigned_rhs_p) + || (type_prec > val_prec && !unsigned_p && !unsigned_val_p))) + rhs = cast_rhs; + } + } + } + + gassign *stmt = gimple_build_assign (result, NOP_EXPR, rhs); + gimple_set_location (stmt, loc); gsi_insert_before (gsi, stmt, GSI_SAME_STMT); return result; @@ -3802,6 +3834,7 @@ maybe_optimize_guarding_check (vec &mul_stmts, gimple *cond_stmt, else gimple_cond_make_false (zero_cond); update_stmt (zero_cond); + reset_flow_sensitive_info_in_bb (bb); *cfg_changed = true; } @@ -6509,6 +6542,7 @@ math_opts_dom_walker::after_dom_children (basic_block bb) break; case BIT_IOR_EXPR: + match_unsigned_saturation_mul (&gsi, as_a (stmt)); match_saturation_add_with_assign (&gsi, as_a (stmt)); match_unsigned_saturation_trunc (&gsi, as_a (stmt)); /* fall-through */ diff --git a/gcc/tree-ssa-phiopt.cc b/gcc/tree-ssa-phiopt.cc index e1c9e1296c0e..3d6673cfb901 100644 --- a/gcc/tree-ssa-phiopt.cc +++ b/gcc/tree-ssa-phiopt.cc @@ -3643,7 +3643,7 @@ cond_if_else_store_replacement_1 (basic_block then_bb, basic_block else_bb, tree lhs_base, lhs, then_rhs, else_rhs, name; location_t then_locus, else_locus; gimple_stmt_iterator gsi; - gphi *newphi; + gphi *newphi = nullptr; gassign *new_stmt; if (then_assign == NULL @@ -3659,8 +3659,7 @@ cond_if_else_store_replacement_1 (basic_block then_bb, basic_block else_bb, return false; lhs = gimple_assign_lhs (then_assign); - if (!is_gimple_reg_type (TREE_TYPE (lhs)) - || !operand_equal_p (lhs, gimple_assign_lhs (else_assign), 0)) + if (!operand_equal_p (lhs, gimple_assign_lhs (else_assign), 0)) return false; lhs_base = get_base_address (lhs); @@ -3673,6 +3672,15 @@ cond_if_else_store_replacement_1 (basic_block then_bb, basic_block else_bb, then_locus = gimple_location (then_assign); else_locus = gimple_location (else_assign); + if (!is_gimple_reg_type (TREE_TYPE (lhs))) + { + if (!operand_equal_p (then_rhs, else_rhs)) + return false; + /* Currently only handle commoning of `= {}`. */ + if (TREE_CODE (then_rhs) != CONSTRUCTOR) + return false; + } + if (dump_file && (dump_flags & TDF_DETAILS)) { fprintf(dump_file, "factoring out stores:\n\tthen:\n"); @@ -3699,12 +3707,17 @@ cond_if_else_store_replacement_1 (basic_block then_bb, basic_block else_bb, /* 2) Create a PHI node at the join block, with one argument holding the old RHS, and the other holding the temporary where we stored the old memory contents. */ - name = make_temp_ssa_name (TREE_TYPE (lhs), NULL, "cstore"); - newphi = create_phi_node (name, join_bb); - add_phi_arg (newphi, then_rhs, EDGE_SUCC (then_bb, 0), then_locus); - add_phi_arg (newphi, else_rhs, EDGE_SUCC (else_bb, 0), else_locus); + if (operand_equal_p (then_rhs, else_rhs)) + name = then_rhs; + else + { + name = make_temp_ssa_name (TREE_TYPE (lhs), NULL, "cstore"); + newphi = create_phi_node (name, join_bb); + add_phi_arg (newphi, then_rhs, EDGE_SUCC (then_bb, 0), then_locus); + add_phi_arg (newphi, else_rhs, EDGE_SUCC (else_bb, 0), else_locus); + } - new_stmt = gimple_build_assign (lhs, gimple_phi_result (newphi)); + new_stmt = gimple_build_assign (lhs, name); /* Update the vdef for the new store statement. */ tree newvphilhs = make_ssa_name (gimple_vop (cfun)); tree vdef = gimple_phi_result (vphi); @@ -3715,16 +3728,21 @@ cond_if_else_store_replacement_1 (basic_block then_bb, basic_block else_bb, update_stmt (vphi); if (dump_file && (dump_flags & TDF_DETAILS)) { - fprintf(dump_file, "to use phi:\n"); - print_gimple_stmt (dump_file, newphi, 0, - TDF_VOPS|TDF_MEMSYMS); - fprintf(dump_file, "\n"); + if (newphi) + { + fprintf(dump_file, "to use phi:\n"); + print_gimple_stmt (dump_file, newphi, 0, + TDF_VOPS|TDF_MEMSYMS); + fprintf(dump_file, "\n"); + } + else + fprintf(dump_file, "to:\n"); print_gimple_stmt (dump_file, new_stmt, 0, TDF_VOPS|TDF_MEMSYMS); fprintf(dump_file, "\n\n"); } - /* 3) Insert that PHI node. */ + /* 3) Insert that new store. */ gsi = gsi_after_labels (join_bb); if (gsi_end_p (gsi)) { @@ -3739,12 +3757,13 @@ cond_if_else_store_replacement_1 (basic_block then_bb, basic_block else_bb, return true; } -/* Return the single store in BB with VDEF or NULL if there are - other stores in the BB or loads following the store. VPHI is - where the only use of the vdef should be. */ +/* Return the last store in BB with VDEF or NULL if there are + loads following the store. VPHI is where the only use of the + vdef should be. If ONLYONESTORE is true, then the store is + the only store in the BB. */ static gimple * -single_trailing_store_in_bb (basic_block bb, tree vdef, gphi *vphi) +trailing_store_in_bb (basic_block bb, tree vdef, gphi *vphi, bool onlyonestore) { if (SSA_NAME_IS_DEFAULT_DEF (vdef)) return NULL; @@ -3753,12 +3772,14 @@ single_trailing_store_in_bb (basic_block bb, tree vdef, gphi *vphi) || gimple_code (store) == GIMPLE_PHI) return NULL; - /* Verify there is no other store in this BB. */ - if (!SSA_NAME_IS_DEFAULT_DEF (gimple_vuse (store)) + /* Verify there is no other store in this BB if requested. */ + if (onlyonestore + && !SSA_NAME_IS_DEFAULT_DEF (gimple_vuse (store)) && gimple_bb (SSA_NAME_DEF_STMT (gimple_vuse (store))) == bb && gimple_code (SSA_NAME_DEF_STMT (gimple_vuse (store))) != GIMPLE_PHI) return NULL; + /* Verify there is no load or store after the store, the vdef of the store should only be used by the vphi joining the 2 bbs. */ use_operand_p use_p; @@ -3778,20 +3799,22 @@ single_trailing_store_in_bb (basic_block bb, tree vdef, gphi *vphi) if (cond) goto THEN_BB; else goto ELSE_BB (edge E1) THEN_BB: ... - ONLY_STORE = Y; + STORE = Y; ... goto JOIN_BB; ELSE_BB: ... - ONLY_STORE = Z; + STORE = Z; ... fallthrough (edge E0) JOIN_BB: some more - Handles only the case with single store in THEN_BB and ELSE_BB. That is + Handles only the case with store in THEN_BB and ELSE_BB. That is cheap enough due to in phiopt and not worry about heurstics. Moving the store - out might provide an opportunity for a phiopt to happen. */ + out might provide an opportunity for a phiopt to happen. + At -O1 (!flag_expensive_optimizations), this only handles the only store in + the BBs. */ static bool cond_if_else_store_replacement_limited (basic_block then_bb, basic_block else_bb, @@ -3802,12 +3825,14 @@ cond_if_else_store_replacement_limited (basic_block then_bb, basic_block else_bb return false; tree then_vdef = PHI_ARG_DEF_FROM_EDGE (vphi, single_succ_edge (then_bb)); - gimple *then_assign = single_trailing_store_in_bb (then_bb, then_vdef, vphi); + gimple *then_assign = trailing_store_in_bb (then_bb, then_vdef, vphi, + !flag_expensive_optimizations); if (!then_assign) return false; tree else_vdef = PHI_ARG_DEF_FROM_EDGE (vphi, single_succ_edge (else_bb)); - gimple *else_assign = single_trailing_store_in_bb (else_bb, else_vdef, vphi); + gimple *else_assign = trailing_store_in_bb (else_bb, else_vdef, vphi, + !flag_expensive_optimizations); if (!else_assign) return false; @@ -3847,25 +3872,15 @@ cond_if_else_store_replacement (basic_block then_bb, basic_block else_bb, bool found, ok = false, res; tree then_lhs, else_lhs; basic_block blocks[3]; - - /* Handle the case with single store in THEN_BB and ELSE_BB. That is - cheap enough to always handle as it allows us to elide dependence - checking. */ gphi *vphi = get_virtual_phi (join_bb); if (!vphi) return false; - tree then_vdef = PHI_ARG_DEF_FROM_EDGE (vphi, single_succ_edge (then_bb)); - gimple *then_assign = single_trailing_store_in_bb (then_bb, then_vdef, vphi); - if (then_assign) - { - tree else_vdef = PHI_ARG_DEF_FROM_EDGE (vphi, single_succ_edge (else_bb)); - gimple *else_assign = single_trailing_store_in_bb (else_bb, else_vdef, - vphi); - if (else_assign) - return cond_if_else_store_replacement_1 (then_bb, else_bb, join_bb, - then_assign, else_assign, - vphi); - } + + /* Handle the case with trailing stores in THEN_BB and ELSE_BB. That is + cheap enough to always handle as it allows us to elide dependence + checking. */ + while (cond_if_else_store_replacement_limited (then_bb, else_bb, join_bb)) + ; /* If either vectorization or if-conversion is disabled then do not sink any stores. */ @@ -4539,10 +4554,11 @@ pass_phiopt::execute (function *) && !predictable_edge_p (EDGE_SUCC (bb, 1))) hoist_adjacent_loads (bb, bb1, bb2, bb3); - /* Try to see if there are only one store in each side of the if + /* Try to see if there are only store in each side of the if and try to remove that. */ if (EDGE_COUNT (bb3->preds) == 2) - cond_if_else_store_replacement_limited (bb1, bb2, bb3); + while (cond_if_else_store_replacement_limited (bb1, bb2, bb3)) + ; } gimple_stmt_iterator gsi; diff --git a/gcc/tree-ssa-pre.cc b/gcc/tree-ssa-pre.cc index 99331730bc2e..2a7dcbee52ce 100644 --- a/gcc/tree-ssa-pre.cc +++ b/gcc/tree-ssa-pre.cc @@ -908,7 +908,8 @@ sorted_array_from_bitmap_set (bitmap_set_t set) /* Subtract all expressions contained in ORIG from DEST. */ static bitmap_set_t -bitmap_set_subtract_expressions (bitmap_set_t dest, bitmap_set_t orig) +bitmap_set_subtract_expressions (bitmap_set_t dest, bitmap_set_t orig, + bool copy_values = false) { bitmap_set_t result = bitmap_set_new (); bitmap_iterator bi; @@ -917,12 +918,15 @@ bitmap_set_subtract_expressions (bitmap_set_t dest, bitmap_set_t orig) bitmap_and_compl (&result->expressions, &dest->expressions, &orig->expressions); - FOR_EACH_EXPR_ID_IN_SET (result, i, bi) - { - pre_expr expr = expression_for_id (i); - unsigned int value_id = get_expr_value_id (expr); - bitmap_set_bit (&result->values, value_id); - } + if (copy_values) + bitmap_copy (&result->values, &dest->values); + else + FOR_EACH_EXPR_ID_IN_SET (result, i, bi) + { + pre_expr expr = expression_for_id (i); + unsigned int value_id = get_expr_value_id (expr); + bitmap_set_bit (&result->values, value_id); + } return result; } @@ -2045,8 +2049,12 @@ prune_clobbered_mems (bitmap_set_t set, basic_block block, bool clean_traps) the bitmap_find_leader way to see if there's still an expression for it. For some ratio of to be removed values and number of values/expressions in the set this might be faster than rebuilding - the value-set. */ - if (any_removed) + the value-set. + Note when there's a MAX solution on one edge (clean_traps) do not + prune values as we need to consider the resulting expression set MAX + as well. This avoids a later growing ANTIC_IN value-set during + iteration, when the explicitly represented expression set grows. */ + if (any_removed && !clean_traps) { bitmap_clear (&set->values); FOR_EACH_EXPR_ID_IN_SET (set, i, bi) @@ -2192,8 +2200,13 @@ compute_antic_aux (basic_block block, bool block_has_abnormal_pred_edge) invalid if translated from ANTIC_OUT to ANTIC_IN. */ prune_clobbered_mems (ANTIC_OUT, block, any_max_on_edge); - /* Generate ANTIC_OUT - TMP_GEN. */ - S = bitmap_set_subtract_expressions (ANTIC_OUT, TMP_GEN (block)); + /* Generate ANTIC_OUT - TMP_GEN. Note when there's a MAX solution + on one edge do not prune values as we need to consider the resulting + expression set MAX as well. This avoids a later growing ANTIC_IN + value-set during iteration, when the explicitly represented + expression set grows. */ + S = bitmap_set_subtract_expressions (ANTIC_OUT, TMP_GEN (block), + any_max_on_edge); /* Start ANTIC_IN with EXP_GEN - TMP_GEN. */ ANTIC_IN (block) = bitmap_set_subtract_expressions (EXP_GEN (block), @@ -2207,9 +2220,6 @@ compute_antic_aux (basic_block block, bool block_has_abnormal_pred_edge) /* clean (ANTIC_IN (block)) is defered to after the iteration converged because it can cause non-convergence, see for example PR81181. */ - /* Intersect ANTIC_IN with the old ANTIC_IN. This is required until - we properly represent the maximum expression set, thus not prune - values without expressions during the iteration. */ if (was_visited && bitmap_and_into (&ANTIC_IN (block)->values, &old->values)) { diff --git a/gcc/tree-ssa-propagate.cc b/gcc/tree-ssa-propagate.cc index ec2068948215..872f881b644c 100644 --- a/gcc/tree-ssa-propagate.cc +++ b/gcc/tree-ssa-propagate.cc @@ -1019,6 +1019,8 @@ substitute_and_fold_engine::substitute_and_fold (basic_block block) while (!walker.stmts_to_fixup.is_empty ()) { gimple *stmt = walker.stmts_to_fixup.pop (); + if (!gimple_bb (stmt)) + continue; if (dump_file && dump_flags & TDF_DETAILS) { fprintf (dump_file, "Fixing up noreturn call "); diff --git a/gcc/tree-ssa-sccvn.cc b/gcc/tree-ssa-sccvn.cc index 3212063ad743..246fa082561e 100644 --- a/gcc/tree-ssa-sccvn.cc +++ b/gcc/tree-ssa-sccvn.cc @@ -2622,6 +2622,12 @@ vn_nary_simplify (vn_nary_op_t nary) nary->type, nary->length); memcpy (op.ops, nary->op, sizeof (tree) * nary->length); tree res = vn_nary_build_or_lookup_1 (&op, false, true); + /* Do not update *NARY with a simplified result that contains abnormals. + This matches what maybe_push_res_to_seq does when requesting insertion. */ + for (unsigned i = 0; i < op.num_ops; ++i) + if (TREE_CODE (op.ops[i]) == SSA_NAME + && SSA_NAME_OCCURS_IN_ABNORMAL_PHI (op.ops[i])) + return res; if (op.code.is_tree_code () && op.num_ops <= nary->length && (tree_code) op.code != CONSTRUCTOR) @@ -4699,12 +4705,17 @@ vn_nary_op_insert_into (vn_nary_op_t vno, vn_nary_op_table_type *table) = BASIC_BLOCK_FOR_FN (cfun, vno->u.values->valid_dominated_by_p[0]); vn_pval *nval = vno->u.values; vn_pval **next = &vno->u.values; - bool found = false; + vn_pval *ins = NULL; + vn_pval *ins_at = NULL; + /* Find an existing value to append to. */ for (vn_pval *val = (*slot)->u.values; val; val = val->next) { if (expressions_equal_p (val->result, nval->result)) { - found = true; + /* Limit the number of places we register a predicate + as valid. */ + if (val->n > 8) + return *slot; for (unsigned i = 0; i < val->n; ++i) { basic_block val_bb @@ -4718,33 +4729,45 @@ vn_nary_op_insert_into (vn_nary_op_t vno, vn_nary_op_table_type *table) gcc_assert (!dominated_by_p (CDI_DOMINATORS, val_bb, vno_bb)); } - /* Append value. */ - *next = (vn_pval *) obstack_alloc (&vn_tables_obstack, - sizeof (vn_pval) - + val->n * sizeof (int)); - (*next)->next = NULL; - (*next)->result = val->result; - (*next)->n = val->n + 1; - memcpy ((*next)->valid_dominated_by_p, + /* Append the location. */ + ins_at = val; + ins = (vn_pval *) obstack_alloc (&vn_tables_obstack, + sizeof (vn_pval) + + val->n * sizeof (int)); + ins->next = NULL; + ins->result = val->result; + ins->n = val->n + 1; + memcpy (ins->valid_dominated_by_p, val->valid_dominated_by_p, val->n * sizeof (int)); - (*next)->valid_dominated_by_p[val->n] = vno_bb->index; - next = &(*next)->next; + ins->valid_dominated_by_p[val->n] = vno_bb->index; if (dump_file && (dump_flags & TDF_DETAILS)) fprintf (dump_file, "Appending predicate to value.\n"); - continue; + break; + } + } + /* Copy the rest of the value chain. */ + for (vn_pval *val = (*slot)->u.values; val; val = val->next) + { + if (val == ins_at) + /* Replace the node we appended to. */ + *next = ins; + else + { + /* Copy other predicated values. */ + *next = (vn_pval *) obstack_alloc (&vn_tables_obstack, + sizeof (vn_pval) + + ((val->n-1) + * sizeof (int))); + memcpy (*next, val, + sizeof (vn_pval) + (val->n-1) * sizeof (int)); + (*next)->next = NULL; } - /* Copy other predicated values. */ - *next = (vn_pval *) obstack_alloc (&vn_tables_obstack, - sizeof (vn_pval) - + (val->n-1) * sizeof (int)); - memcpy (*next, val, sizeof (vn_pval) + (val->n-1) * sizeof (int)); - (*next)->next = NULL; next = &(*next)->next; } - if (!found) + /* Append the value if we didn't find it. */ + if (!ins_at) *next = nval; - *slot = vno; vno->next = last_inserted_nary; last_inserted_nary = vno; @@ -4819,7 +4842,8 @@ vn_nary_op_insert_pieces_predicated (unsigned int length, enum tree_code code, tree result, unsigned int value_id, edge pred_e) { - gcc_assert (can_track_predicate_on_edge (pred_e)); + if (flag_checking) + gcc_assert (can_track_predicate_on_edge (pred_e)); if (dump_file && (dump_flags & TDF_DETAILS) /* ??? Fix dumping, but currently we only get comparisons. */ @@ -5258,7 +5282,11 @@ dominated_by_p_w_unex (basic_block bb1, basic_block bb2, bool allow_back) } succe = e; } - if (succe) + if (succe + /* Limit the number of edges we check, we should bring in + context from the iteration and compute the single + executable incoming edge when visiting a block. */ + && EDGE_COUNT (succe->dest->preds) < 8) { /* Verify the reached block is only reached through succe. If there is only one edge we can spare us the dominator diff --git a/gcc/tree-ssa-structalias.cc b/gcc/tree-ssa-structalias.cc index 0035e50c62c7..bb19123a6a11 100644 --- a/gcc/tree-ssa-structalias.cc +++ b/gcc/tree-ssa-structalias.cc @@ -50,6 +50,7 @@ #include "tree-ssa-structalias.h" #include "pta-andersen.h" +#include "gimple-ssa-pta-constraints.h" /* The idea behind this analyzer is to generate set constraints from the program, then solve the resulting constraints in order to generate the @@ -204,8 +205,22 @@ And probably more. */ +using namespace pointer_analysis; + +/* Pool of variable info structures. */ +static object_allocator variable_info_pool + ("Variable info pool"); + +/* Map varinfo to final pt_solution. */ +static hash_map *final_solutions; +static struct obstack final_solutions_obstack; + + namespace pointer_analysis { +bool use_field_sensitive = true; +int in_ipa_mode = 0; + /* Used for points-to sets. */ bitmap_obstack pta_obstack; @@ -219,9 +234,6 @@ vec varmap; /* List of constraints that we use to build the constraint graph from. */ vec constraints; -/* Map from trees to variable infos. */ -static hash_map *vi_for_tree; - /* The representative variable for a variable. The points-to solution for a var can be found in its rep. Trivially, a var can be its own rep. @@ -288,6 +300,120 @@ first_or_preceding_vi_for_offset (varinfo_t start, return start; } +/* Determine global memory access of call STMT and update + WRITES_GLOBAL_MEMORY, READS_GLOBAL_MEMORY and USES_GLOBAL_MEMORY. */ + +void +determine_global_memory_access (gcall *stmt, + bool *writes_global_memory, + bool *reads_global_memory, + bool *uses_global_memory) +{ + tree callee; + cgraph_node *node; + modref_summary *summary; + + /* We need to detrmine reads to set uses. */ + gcc_assert (!uses_global_memory || reads_global_memory); + + if ((callee = gimple_call_fndecl (stmt)) != NULL_TREE + && (node = cgraph_node::get (callee)) != NULL + && (summary = get_modref_function_summary (node))) + { + if (writes_global_memory && *writes_global_memory) + *writes_global_memory = summary->global_memory_written; + if (reads_global_memory && *reads_global_memory) + *reads_global_memory = summary->global_memory_read; + if (reads_global_memory && uses_global_memory + && !summary->calls_interposable + && !*reads_global_memory && node->binds_to_current_def_p ()) + *uses_global_memory = false; + } + if ((writes_global_memory && *writes_global_memory) + || (uses_global_memory && *uses_global_memory) + || (reads_global_memory && *reads_global_memory)) + { + attr_fnspec fnspec = gimple_call_fnspec (stmt); + if (fnspec.known_p ()) + { + if (writes_global_memory + && !fnspec.global_memory_written_p ()) + *writes_global_memory = false; + if (reads_global_memory && !fnspec.global_memory_read_p ()) + { + *reads_global_memory = false; + if (uses_global_memory) + *uses_global_memory = false; + } + } + } +} + +/* Return true if FNDECL may be part of another lto partition. */ + +bool +fndecl_maybe_in_other_partition (tree fndecl) +{ + cgraph_node *fn_node = cgraph_node::get (fndecl); + if (fn_node == NULL) + return true; + + return fn_node->in_other_partition; +} + +/* Return a new variable info structure consisting for a variable + named NAME, and using constraint graph node NODE. Append it + to the vector of variable info structures. */ + +varinfo_t +new_var_info (tree t, const char *name, bool add_id) +{ + unsigned index = varmap.length (); + varinfo_t ret = variable_info_pool.allocate (); + + if (dump_file && add_id) + { + char *tempname = xasprintf ("%s(%d)", name, index); + name = ggc_strdup (tempname); + free (tempname); + } + + ret->id = index; + ret->name = name; + ret->decl = t; + /* Vars without decl are artificial and do not have sub-variables. */ + ret->is_artificial_var = (t == NULL_TREE); + ret->is_special_var = false; + ret->is_unknown_size_var = false; + ret->is_full_var = (t == NULL_TREE); + ret->is_heap_var = false; + ret->may_have_pointers = true; + ret->only_restrict_pointers = false; + ret->is_restrict_var = false; + ret->ruid = 0; + ret->is_global_var = (t == NULL_TREE); + ret->is_ipa_escape_point = false; + ret->is_fn_info = false; + ret->address_taken = false; + if (t && DECL_P (t)) + ret->is_global_var = (is_global_var (t) + /* We have to treat even local register variables + as escape points. */ + || (VAR_P (t) && DECL_HARD_REGISTER (t))); + ret->is_reg_var = (t && TREE_CODE (t) == SSA_NAME); + ret->solution = BITMAP_ALLOC (&pta_obstack); + ret->oldsolution = NULL; + ret->next = 0; + ret->shadow_var_uid = 0; + ret->head = ret->id; + + stats.total_vars++; + + varmap.safe_push (ret); + + return ret; +} + /* Print out constraint C to FILE. */ void @@ -402,3942 +528,141 @@ dump_sa_stats (FILE *outfile) fprintf (outfile, "Number of implicit edges: %d\n", stats.num_implicit_edges); fprintf (outfile, "Number of avoided edges: %d\n", - stats.num_avoided_edges); -} - -/* Dump points-to information to OUTFILE. */ - -void -dump_sa_points_to_info (FILE *outfile) -{ - fprintf (outfile, "\nPoints-to sets\n\n"); - - for (unsigned i = 1; i < varmap.length (); i++) - { - varinfo_t vi = get_varinfo (i); - if (!vi->may_have_pointers) - continue; - dump_solution_for_var (outfile, i); - } -} - - -/* Debug points-to information to stderr. */ - -DEBUG_FUNCTION void -debug_sa_points_to_info (void) -{ - dump_sa_points_to_info (stderr); -} - -/* Dump varinfo VI to FILE. */ - -void -dump_varinfo (FILE *file, varinfo_t vi) -{ - if (vi == NULL) - return; - - fprintf (file, "%u: %s\n", vi->id, vi->name); - - const char *sep = " "; - if (vi->is_artificial_var) - fprintf (file, "%sartificial", sep); - if (vi->is_special_var) - fprintf (file, "%sspecial", sep); - if (vi->is_unknown_size_var) - fprintf (file, "%sunknown-size", sep); - if (vi->is_full_var) - fprintf (file, "%sfull", sep); - if (vi->is_heap_var) - fprintf (file, "%sheap", sep); - if (vi->may_have_pointers) - fprintf (file, "%smay-have-pointers", sep); - if (vi->only_restrict_pointers) - fprintf (file, "%sonly-restrict-pointers", sep); - if (vi->is_restrict_var) - fprintf (file, "%sis-restrict-var", sep); - if (vi->is_global_var) - fprintf (file, "%sglobal", sep); - if (vi->is_ipa_escape_point) - fprintf (file, "%sipa-escape-point", sep); - if (vi->is_fn_info) - fprintf (file, "%sfn-info", sep); - if (vi->ruid) - fprintf (file, "%srestrict-uid:%u", sep, vi->ruid); - if (vi->next) - fprintf (file, "%snext:%u", sep, vi->next); - if (vi->head != vi->id) - fprintf (file, "%shead:%u", sep, vi->head); - if (vi->offset) - fprintf (file, "%soffset:" HOST_WIDE_INT_PRINT_DEC, sep, vi->offset); - if (vi->size != ~HOST_WIDE_INT_0U) - fprintf (file, "%ssize:" HOST_WIDE_INT_PRINT_DEC, sep, vi->size); - if (vi->fullsize != ~HOST_WIDE_INT_0U && vi->fullsize != vi->size) - fprintf (file, "%sfullsize:" HOST_WIDE_INT_PRINT_DEC, sep, - vi->fullsize); - fprintf (file, "\n"); - - if (vi->solution && !bitmap_empty_p (vi->solution)) - { - bitmap_iterator bi; - unsigned i; - fprintf (file, " solution: {"); - EXECUTE_IF_SET_IN_BITMAP (vi->solution, 0, i, bi) - fprintf (file, " %u", i); - fprintf (file, " }\n"); - } - - if (vi->oldsolution && !bitmap_empty_p (vi->oldsolution) - && !bitmap_equal_p (vi->solution, vi->oldsolution)) - { - bitmap_iterator bi; - unsigned i; - fprintf (file, " oldsolution: {"); - EXECUTE_IF_SET_IN_BITMAP (vi->oldsolution, 0, i, bi) - fprintf (file, " %u", i); - fprintf (file, " }\n"); - } -} - -/* Dump varinfo VI to stderr. */ - -DEBUG_FUNCTION void -debug_varinfo (varinfo_t vi) -{ - dump_varinfo (stderr, vi); -} - -/* Dump varmap to FILE. */ - -void -dump_varmap (FILE *file) -{ - if (varmap.length () == 0) - return; - - fprintf (file, "variables:\n"); - - for (unsigned int i = 0; i < varmap.length (); ++i) - { - varinfo_t vi = get_varinfo (i); - dump_varinfo (file, vi); - } - - fprintf (file, "\n"); -} - -/* Dump varmap to stderr. */ - -DEBUG_FUNCTION void -debug_varmap (void) -{ - dump_varmap (stderr); -} - -} // namespace pointer_analysis - - -using namespace pointer_analysis; - -static bool use_field_sensitive = true; -static int in_ipa_mode = 0; - -static unsigned int create_variable_info_for (tree, const char *, bool); -static varinfo_t lookup_vi_for_tree (tree); -static inline bool type_can_have_subvars (const_tree); -static void make_param_constraints (varinfo_t); - -/* Pool of variable info structures. */ -static object_allocator variable_info_pool - ("Variable info pool"); - -/* Map varinfo to final pt_solution. */ -static hash_map *final_solutions; -static struct obstack final_solutions_obstack; - -/* Return a new variable info structure consisting for a variable - named NAME, and using constraint graph node NODE. Append it - to the vector of variable info structures. */ - -static varinfo_t -new_var_info (tree t, const char *name, bool add_id) -{ - unsigned index = varmap.length (); - varinfo_t ret = variable_info_pool.allocate (); - - if (dump_file && add_id) - { - char *tempname = xasprintf ("%s(%d)", name, index); - name = ggc_strdup (tempname); - free (tempname); - } - - ret->id = index; - ret->name = name; - ret->decl = t; - /* Vars without decl are artificial and do not have sub-variables. */ - ret->is_artificial_var = (t == NULL_TREE); - ret->is_special_var = false; - ret->is_unknown_size_var = false; - ret->is_full_var = (t == NULL_TREE); - ret->is_heap_var = false; - ret->may_have_pointers = true; - ret->only_restrict_pointers = false; - ret->is_restrict_var = false; - ret->ruid = 0; - ret->is_global_var = (t == NULL_TREE); - ret->is_ipa_escape_point = false; - ret->is_fn_info = false; - ret->address_taken = false; - if (t && DECL_P (t)) - ret->is_global_var = (is_global_var (t) - /* We have to treat even local register variables - as escape points. */ - || (VAR_P (t) && DECL_HARD_REGISTER (t))); - ret->is_reg_var = (t && TREE_CODE (t) == SSA_NAME); - ret->solution = BITMAP_ALLOC (&pta_obstack); - ret->oldsolution = NULL; - ret->next = 0; - ret->shadow_var_uid = 0; - ret->head = ret->id; - - stats.total_vars++; - - varmap.safe_push (ret); - - return ret; -} - -/* A map mapping call statements to per-stmt variables for uses - and clobbers specific to the call. */ -static hash_map *call_stmt_vars; - -/* Lookup or create the variable for the call statement CALL. */ - -static varinfo_t -get_call_vi (gcall *call) -{ - varinfo_t vi, vi2; - - bool existed; - varinfo_t *slot_p = &call_stmt_vars->get_or_insert (call, &existed); - if (existed) - return *slot_p; - - vi = new_var_info (NULL_TREE, "CALLUSED", true); - vi->offset = 0; - vi->size = 1; - vi->fullsize = 2; - vi->is_full_var = true; - vi->is_reg_var = true; - - vi2 = new_var_info (NULL_TREE, "CALLCLOBBERED", true); - vi2->offset = 1; - vi2->size = 1; - vi2->fullsize = 2; - vi2->is_full_var = true; - vi2->is_reg_var = true; - - vi->next = vi2->id; - - *slot_p = vi; - return vi; -} - -/* Lookup the variable for the call statement CALL representing - the uses. Returns NULL if there is nothing special about this call. */ - -static varinfo_t -lookup_call_use_vi (gcall *call) -{ - varinfo_t *slot_p = call_stmt_vars->get (call); - if (slot_p) - return *slot_p; - - return NULL; -} - -/* Lookup the variable for the call statement CALL representing - the clobbers. Returns NULL if there is nothing special about this call. */ - -static varinfo_t -lookup_call_clobber_vi (gcall *call) -{ - varinfo_t uses = lookup_call_use_vi (call); - if (!uses) - return NULL; - - return vi_next (uses); -} - -/* Lookup or create the variable for the call statement CALL representing - the uses. */ - -static varinfo_t -get_call_use_vi (gcall *call) -{ - return get_call_vi (call); -} - -/* Lookup or create the variable for the call statement CALL representing - the clobbers. */ - -static varinfo_t ATTRIBUTE_UNUSED -get_call_clobber_vi (gcall *call) -{ - return vi_next (get_call_vi (call)); -} - - -static void get_constraint_for_1 (tree, vec *, bool, bool); -static void get_constraint_for (tree, vec *); -static void get_constraint_for_rhs (tree, vec *); -static void do_deref (vec *); - -/* Allocator for 'constraints' vector. */ - -static object_allocator constraint_pool ("Constraint pool"); - -/* Create a new constraint consisting of LHS and RHS expressions. */ - -static constraint_t -new_constraint (const struct constraint_expr lhs, - const struct constraint_expr rhs) -{ - constraint_t ret = constraint_pool.allocate (); - ret->lhs = lhs; - ret->rhs = rhs; - return ret; -} - -/* Insert ID as the variable id for tree T in the vi_for_tree map. */ - -static void -insert_vi_for_tree (tree t, varinfo_t vi) -{ - gcc_assert (vi); - bool existed = vi_for_tree->put (t, vi); - gcc_assert (!existed); -} - -/* Find the variable info for tree T in VI_FOR_TREE. If T does not - exist in the map, return NULL, otherwise, return the varinfo we found. */ - -static varinfo_t -lookup_vi_for_tree (tree t) -{ - varinfo_t *slot = vi_for_tree->get (t); - if (slot == NULL) - return NULL; - - return *slot; -} - -/* Return a printable name for DECL. */ - -static const char * -alias_get_name (tree decl) -{ - const char *res = "NULL"; - if (dump_file) - { - char *temp = NULL; - if (TREE_CODE (decl) == SSA_NAME) - { - res = get_name (decl); - temp = xasprintf ("%s_%u", res ? res : "", SSA_NAME_VERSION (decl)); - } - else if (HAS_DECL_ASSEMBLER_NAME_P (decl) - && DECL_ASSEMBLER_NAME_SET_P (decl)) - res = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME_RAW (decl)); - else if (DECL_P (decl)) - { - res = get_name (decl); - if (!res) - temp = xasprintf ("D.%u", DECL_UID (decl)); - } - - if (temp) - { - res = ggc_strdup (temp); - free (temp); - } - } - - return res; -} - -/* Find the variable id for tree T in the map. - If T doesn't exist in the map, create an entry for it and return it. */ - -static varinfo_t -get_vi_for_tree (tree t) -{ - varinfo_t *slot = vi_for_tree->get (t); - if (slot == NULL) - { - unsigned int id = create_variable_info_for (t, alias_get_name (t), false); - return get_varinfo (id); - } - - return *slot; -} - -/* Get a scalar constraint expression for a new temporary variable. */ - -static struct constraint_expr -new_scalar_tmp_constraint_exp (const char *name, bool add_id) -{ - struct constraint_expr tmp; - varinfo_t vi; - - vi = new_var_info (NULL_TREE, name, add_id); - vi->offset = 0; - vi->size = -1; - vi->fullsize = -1; - vi->is_full_var = 1; - vi->is_reg_var = 1; - - tmp.var = vi->id; - tmp.type = SCALAR; - tmp.offset = 0; - - return tmp; -} - -/* Get a constraint expression vector from an SSA_VAR_P node. - If address_p is true, the result will be taken its address of. */ - -static void -get_constraint_for_ssa_var (tree t, vec *results, bool address_p) -{ - struct constraint_expr cexpr; - varinfo_t vi; - - /* We allow FUNCTION_DECLs here even though it doesn't make much sense. */ - gcc_assert (TREE_CODE (t) == SSA_NAME || DECL_P (t)); - - if (TREE_CODE (t) == SSA_NAME - && SSA_NAME_IS_DEFAULT_DEF (t)) - { - /* For parameters, get at the points-to set for the actual parm - decl. */ - if (TREE_CODE (SSA_NAME_VAR (t)) == PARM_DECL - || TREE_CODE (SSA_NAME_VAR (t)) == RESULT_DECL) - { - get_constraint_for_ssa_var (SSA_NAME_VAR (t), results, address_p); - return; - } - /* For undefined SSA names return nothing. */ - else if (!ssa_defined_default_def_p (t)) - { - cexpr.var = nothing_id; - cexpr.type = SCALAR; - cexpr.offset = 0; - results->safe_push (cexpr); - return; - } - } - - /* For global variables resort to the alias target. */ - if (VAR_P (t) && (TREE_STATIC (t) || DECL_EXTERNAL (t))) - { - varpool_node *node = varpool_node::get (t); - if (node && node->alias && node->analyzed) - { - node = node->ultimate_alias_target (); - /* Canonicalize the PT uid of all aliases to the ultimate target. - ??? Hopefully the set of aliases can't change in a way that - changes the ultimate alias target. */ - gcc_assert ((! DECL_PT_UID_SET_P (node->decl) - || DECL_PT_UID (node->decl) == DECL_UID (node->decl)) - && (! DECL_PT_UID_SET_P (t) - || DECL_PT_UID (t) == DECL_UID (node->decl))); - DECL_PT_UID (t) = DECL_UID (node->decl); - t = node->decl; - } - - /* If this is decl may bind to NULL note that. */ - if (address_p - && (! node || ! node->nonzero_address ())) - { - cexpr.var = nothing_id; - cexpr.type = SCALAR; - cexpr.offset = 0; - results->safe_push (cexpr); - } - } - - vi = get_vi_for_tree (t); - cexpr.var = vi->id; - cexpr.type = SCALAR; - cexpr.offset = 0; - - /* If we are not taking the address of the constraint expr, add all - sub-fiels of the variable as well. */ - if (!address_p - && !vi->is_full_var) - { - for (; vi; vi = vi_next (vi)) - { - cexpr.var = vi->id; - results->safe_push (cexpr); - } - return; - } - - results->safe_push (cexpr); -} - -/* Process constraint T, performing various simplifications and then - adding it to our list of overall constraints. */ - -static void -process_constraint (constraint_t t) -{ - struct constraint_expr rhs = t->rhs; - struct constraint_expr lhs = t->lhs; - - gcc_assert (rhs.var < varmap.length ()); - gcc_assert (lhs.var < varmap.length ()); - - /* If we didn't get any useful constraint from the lhs we get - &ANYTHING as fallback from get_constraint_for. Deal with - it here by turning it into *ANYTHING. */ - if (lhs.type == ADDRESSOF - && lhs.var == anything_id) - t->lhs.type = lhs.type = DEREF; - - /* ADDRESSOF on the lhs is invalid. */ - gcc_assert (lhs.type != ADDRESSOF); - - /* We shouldn't add constraints from things that cannot have pointers. - It's not completely trivial to avoid in the callers, so do it here. */ - if (rhs.type != ADDRESSOF - && !get_varinfo (rhs.var)->may_have_pointers) - return; - - /* Likewise adding to the solution of a non-pointer var isn't useful. */ - if (!get_varinfo (lhs.var)->may_have_pointers) - return; - - /* This can happen in our IR with things like n->a = *p. */ - if (rhs.type == DEREF && lhs.type == DEREF && rhs.var != anything_id) - { - /* Split into tmp = *rhs, *lhs = tmp. */ - struct constraint_expr tmplhs; - tmplhs = new_scalar_tmp_constraint_exp ("doubledereftmp", true); - process_constraint (new_constraint (tmplhs, rhs)); - process_constraint (new_constraint (lhs, tmplhs)); - } - else if ((rhs.type != SCALAR || rhs.offset != 0) && lhs.type == DEREF) - { - /* Split into tmp = &rhs, *lhs = tmp. */ - struct constraint_expr tmplhs; - tmplhs = new_scalar_tmp_constraint_exp ("derefaddrtmp", true); - process_constraint (new_constraint (tmplhs, rhs)); - process_constraint (new_constraint (lhs, tmplhs)); - } - else - { - gcc_assert (rhs.type != ADDRESSOF || rhs.offset == 0); - if (rhs.type == ADDRESSOF) - get_varinfo (get_varinfo (rhs.var)->head)->address_taken = true; - constraints.safe_push (t); - } -} - - -/* Return the position, in bits, of FIELD_DECL from the beginning of its - structure. */ - -static unsigned HOST_WIDE_INT -bitpos_of_field (const tree fdecl) -{ - if (!tree_fits_uhwi_p (DECL_FIELD_OFFSET (fdecl)) - || !tree_fits_uhwi_p (DECL_FIELD_BIT_OFFSET (fdecl))) - return -1; - - return (tree_to_uhwi (DECL_FIELD_OFFSET (fdecl)) * BITS_PER_UNIT - + tree_to_uhwi (DECL_FIELD_BIT_OFFSET (fdecl))); -} - - -/* Get constraint expressions for offsetting PTR by OFFSET. Stores the - resulting constraint expressions in *RESULTS. */ - -static void -get_constraint_for_ptr_offset (tree ptr, tree offset, - vec *results) -{ - struct constraint_expr c; - unsigned int j, n; - HOST_WIDE_INT rhsoffset; - - /* If we do not do field-sensitive PTA adding offsets to pointers - does not change the points-to solution. */ - if (!use_field_sensitive) - { - get_constraint_for_rhs (ptr, results); - return; - } - - /* If the offset is not a non-negative integer constant that fits - in a HOST_WIDE_INT, we have to fall back to a conservative - solution which includes all sub-fields of all pointed-to - variables of ptr. */ - if (offset == NULL_TREE - || TREE_CODE (offset) != INTEGER_CST) - rhsoffset = UNKNOWN_OFFSET; - else - { - /* Sign-extend the offset. */ - offset_int soffset = offset_int::from (wi::to_wide (offset), SIGNED); - if (!wi::fits_shwi_p (soffset)) - rhsoffset = UNKNOWN_OFFSET; - else - { - /* Make sure the bit-offset also fits. */ - HOST_WIDE_INT rhsunitoffset = soffset.to_shwi (); - rhsoffset = rhsunitoffset * (unsigned HOST_WIDE_INT) BITS_PER_UNIT; - if (rhsunitoffset != rhsoffset / BITS_PER_UNIT) - rhsoffset = UNKNOWN_OFFSET; - } - } - - get_constraint_for_rhs (ptr, results); - if (rhsoffset == 0) - return; - - /* As we are eventually appending to the solution do not use - vec::iterate here. */ - n = results->length (); - for (j = 0; j < n; j++) - { - varinfo_t curr; - c = (*results)[j]; - curr = get_varinfo (c.var); - - if (c.type == ADDRESSOF - /* If this varinfo represents a full variable just use it. */ - && curr->is_full_var) - ; - else if (c.type == ADDRESSOF - /* If we do not know the offset add all subfields. */ - && rhsoffset == UNKNOWN_OFFSET) - { - varinfo_t temp = get_varinfo (curr->head); - do - { - struct constraint_expr c2; - c2.var = temp->id; - c2.type = ADDRESSOF; - c2.offset = 0; - if (c2.var != c.var) - results->safe_push (c2); - temp = vi_next (temp); - } - while (temp); - } - else if (c.type == ADDRESSOF) - { - varinfo_t temp; - unsigned HOST_WIDE_INT offset = curr->offset + rhsoffset; - - /* If curr->offset + rhsoffset is less than zero adjust it. */ - if (rhsoffset < 0 - && curr->offset < offset) - offset = 0; - - /* We have to include all fields that overlap the current - field shifted by rhsoffset. And we include at least - the last or the first field of the variable to represent - reachability of off-bound addresses, in particular &object + 1, - conservatively correct. */ - temp = first_or_preceding_vi_for_offset (curr, offset); - c.var = temp->id; - c.offset = 0; - temp = vi_next (temp); - while (temp - && temp->offset < offset + curr->size) - { - struct constraint_expr c2; - c2.var = temp->id; - c2.type = ADDRESSOF; - c2.offset = 0; - results->safe_push (c2); - temp = vi_next (temp); - } - } - else if (c.type == SCALAR) - { - gcc_assert (c.offset == 0); - c.offset = rhsoffset; - } - else - /* We shouldn't get any DEREFs here. */ - gcc_unreachable (); - - (*results)[j] = c; - } -} - - -/* Given a COMPONENT_REF T, return the constraint_expr vector for it. - If address_p is true the result will be taken its address of. - If lhs_p is true then the constraint expression is assumed to be used - as the lhs. */ - -static void -get_constraint_for_component_ref (tree t, vec *results, - bool address_p, bool lhs_p) -{ - tree orig_t = t; - poly_int64 bitsize = -1; - poly_int64 bitmaxsize = -1; - poly_int64 bitpos; - bool reverse; - tree forzero; - - /* Some people like to do cute things like take the address of - &0->a.b. */ - forzero = t; - while (handled_component_p (forzero) - || INDIRECT_REF_P (forzero) - || TREE_CODE (forzero) == MEM_REF) - forzero = TREE_OPERAND (forzero, 0); - - if (CONSTANT_CLASS_P (forzero) && integer_zerop (forzero)) - { - struct constraint_expr temp; - - temp.offset = 0; - temp.var = integer_id; - temp.type = SCALAR; - results->safe_push (temp); - return; - } - - t = get_ref_base_and_extent (t, &bitpos, &bitsize, &bitmaxsize, &reverse); - - /* We can end up here for component references on a - VIEW_CONVERT_EXPR <>(&foobar) or things like a - BIT_FIELD_REF <&MEM[(void *)&b + 4B], ...>. So for - symbolic constants simply give up. */ - if (TREE_CODE (t) == ADDR_EXPR) - { - constraint_expr result; - result.type = SCALAR; - result.var = anything_id; - result.offset = 0; - results->safe_push (result); - return; - } - - /* Avoid creating pointer-offset constraints, so handle MEM_REF - offsets directly. Pretend to take the address of the base, - we'll take care of adding the required subset of sub-fields below. */ - if (TREE_CODE (t) == MEM_REF - && !integer_zerop (TREE_OPERAND (t, 0))) - { - poly_offset_int off = mem_ref_offset (t); - off <<= LOG2_BITS_PER_UNIT; - off += bitpos; - poly_int64 off_hwi; - if (off.to_shwi (&off_hwi)) - bitpos = off_hwi; - else - { - bitpos = 0; - bitmaxsize = -1; - } - get_constraint_for_1 (TREE_OPERAND (t, 0), results, false, lhs_p); - do_deref (results); - } - else - get_constraint_for_1 (t, results, true, lhs_p); - - /* Strip off nothing_id. */ - if (results->length () == 2) - { - gcc_assert ((*results)[0].var == nothing_id); - results->unordered_remove (0); - } - gcc_assert (results->length () == 1); - struct constraint_expr &result = results->last (); - - if (result.type == SCALAR - && get_varinfo (result.var)->is_full_var) - /* For single-field vars do not bother about the offset. */ - result.offset = 0; - else if (result.type == SCALAR) - { - /* In languages like C, you can access one past the end of an - array. You aren't allowed to dereference it, so we can - ignore this constraint. When we handle pointer subtraction, - we may have to do something cute here. */ - - if (maybe_lt (poly_uint64 (bitpos), get_varinfo (result.var)->fullsize) - && maybe_ne (bitmaxsize, 0)) - { - /* It's also not true that the constraint will actually start at the - right offset, it may start in some padding. We only care about - setting the constraint to the first actual field it touches, so - walk to find it. */ - struct constraint_expr cexpr = result; - varinfo_t curr; - results->pop (); - cexpr.offset = 0; - for (curr = get_varinfo (cexpr.var); curr; curr = vi_next (curr)) - { - if (ranges_maybe_overlap_p (poly_int64 (curr->offset), - curr->size, bitpos, bitmaxsize)) - { - cexpr.var = curr->id; - results->safe_push (cexpr); - if (address_p) - break; - } - } - /* If we are going to take the address of this field then - to be able to compute reachability correctly add at least - the last field of the variable. */ - if (address_p && results->length () == 0) - { - curr = get_varinfo (cexpr.var); - while (curr->next != 0) - curr = vi_next (curr); - cexpr.var = curr->id; - results->safe_push (cexpr); - } - else if (results->length () == 0) - /* Assert that we found *some* field there. The user couldn't be - accessing *only* padding. */ - /* Still the user could access one past the end of an array - embedded in a struct resulting in accessing *only* padding. */ - /* Or accessing only padding via type-punning to a type - that has a filed just in padding space. */ - { - cexpr.type = SCALAR; - cexpr.var = anything_id; - cexpr.offset = 0; - results->safe_push (cexpr); - } - } - else if (known_eq (bitmaxsize, 0)) - { - if (dump_file && (dump_flags & TDF_DETAILS)) - fprintf (dump_file, "Access to zero-sized part of variable, " - "ignoring\n"); - } - else - if (dump_file && (dump_flags & TDF_DETAILS)) - fprintf (dump_file, "Access to past the end of variable, ignoring\n"); - } - else if (result.type == DEREF) - { - /* If we do not know exactly where the access goes say so. Note - that only for non-structure accesses we know that we access - at most one subfiled of any variable. */ - HOST_WIDE_INT const_bitpos; - if (!bitpos.is_constant (&const_bitpos) - || const_bitpos == -1 - || maybe_ne (bitsize, bitmaxsize) - || AGGREGATE_TYPE_P (TREE_TYPE (orig_t)) - || result.offset == UNKNOWN_OFFSET) - result.offset = UNKNOWN_OFFSET; - else - result.offset += const_bitpos; - } - else if (result.type == ADDRESSOF) - { - /* We can end up here for component references on constants like - VIEW_CONVERT_EXPR <>({ 0, 1, 2, 3 })[i]. */ - result.type = SCALAR; - result.var = anything_id; - result.offset = 0; - } - else - gcc_unreachable (); -} - - -/* Dereference the constraint expression CONS, and return the result. - DEREF (ADDRESSOF) = SCALAR - DEREF (SCALAR) = DEREF - DEREF (DEREF) = (temp = DEREF1; result = DEREF (temp)) - This is needed so that we can handle dereferencing DEREF constraints. */ - -static void -do_deref (vec *constraints) -{ - struct constraint_expr *c; - unsigned int i = 0; - - FOR_EACH_VEC_ELT (*constraints, i, c) - { - if (c->type == SCALAR) - c->type = DEREF; - else if (c->type == ADDRESSOF) - c->type = SCALAR; - else if (c->type == DEREF) - { - struct constraint_expr tmplhs; - tmplhs = new_scalar_tmp_constraint_exp ("dereftmp", true); - process_constraint (new_constraint (tmplhs, *c)); - c->var = tmplhs.var; - } - else - gcc_unreachable (); - } -} - -/* Given a tree T, return the constraint expression for taking the - address of it. */ - -static void -get_constraint_for_address_of (tree t, vec *results) -{ - struct constraint_expr *c; - unsigned int i; - - get_constraint_for_1 (t, results, true, true); - - FOR_EACH_VEC_ELT (*results, i, c) - { - if (c->type == DEREF) - c->type = SCALAR; - else - c->type = ADDRESSOF; - } -} - -/* Given a tree T, return the constraint expression for it. */ - -static void -get_constraint_for_1 (tree t, vec *results, bool address_p, - bool lhs_p) -{ - struct constraint_expr temp; - - /* x = integer is all glommed to a single variable, which doesn't - point to anything by itself. That is, of course, unless it is an - integer constant being treated as a pointer, in which case, we - will return that this is really the addressof anything. This - happens below, since it will fall into the default case. The only - case we know something about an integer treated like a pointer is - when it is the NULL pointer, and then we just say it points to - NULL. - - Do not do that if -fno-delete-null-pointer-checks though, because - in that case *NULL does not fail, so it _should_ alias *anything. - It is not worth adding a new option or renaming the existing one, - since this case is relatively obscure. */ - if ((TREE_CODE (t) == INTEGER_CST - && integer_zerop (t)) - /* The only valid CONSTRUCTORs in gimple with pointer typed - elements are zero-initializer. But in IPA mode we also - process global initializers, so verify at least. */ - || (TREE_CODE (t) == CONSTRUCTOR - && CONSTRUCTOR_NELTS (t) == 0)) - { - if (flag_delete_null_pointer_checks) - temp.var = nothing_id; - else - temp.var = nonlocal_id; - temp.type = ADDRESSOF; - temp.offset = 0; - results->safe_push (temp); - return; - } - - /* String constants are read-only, ideally we'd have a CONST_DECL - for those. */ - if (TREE_CODE (t) == STRING_CST) - { - temp.var = string_id; - temp.type = SCALAR; - temp.offset = 0; - results->safe_push (temp); - return; - } - - switch (TREE_CODE_CLASS (TREE_CODE (t))) - { - case tcc_expression: - { - switch (TREE_CODE (t)) - { - case ADDR_EXPR: - get_constraint_for_address_of (TREE_OPERAND (t, 0), results); - return; - default:; - } - break; - } - case tcc_reference: - { - if (!lhs_p && TREE_THIS_VOLATILE (t)) - /* Fall back to anything. */ - break; - - switch (TREE_CODE (t)) - { - case MEM_REF: - { - struct constraint_expr cs; - varinfo_t vi, curr; - get_constraint_for_ptr_offset (TREE_OPERAND (t, 0), - TREE_OPERAND (t, 1), results); - do_deref (results); - - /* If we are not taking the address then make sure to process - all subvariables we might access. */ - if (address_p) - return; - - cs = results->last (); - if (cs.type == DEREF - && type_can_have_subvars (TREE_TYPE (t))) - { - /* For dereferences this means we have to defer it - to solving time. */ - results->last ().offset = UNKNOWN_OFFSET; - return; - } - if (cs.type != SCALAR) - return; - - vi = get_varinfo (cs.var); - curr = vi_next (vi); - if (!vi->is_full_var - && curr) - { - unsigned HOST_WIDE_INT size; - if (tree_fits_uhwi_p (TYPE_SIZE (TREE_TYPE (t)))) - size = tree_to_uhwi (TYPE_SIZE (TREE_TYPE (t))); - else - size = -1; - for (; curr; curr = vi_next (curr)) - { - /* The start of the access might happen anywhere - within vi, so conservatively assume it was - at its end. */ - if (curr->offset - (vi->offset + vi->size - 1) < size) - { - cs.var = curr->id; - results->safe_push (cs); - } - else - break; - } - } - return; - } - case ARRAY_REF: - case ARRAY_RANGE_REF: - case COMPONENT_REF: - case IMAGPART_EXPR: - case REALPART_EXPR: - case BIT_FIELD_REF: - get_constraint_for_component_ref (t, results, address_p, lhs_p); - return; - case VIEW_CONVERT_EXPR: - get_constraint_for_1 (TREE_OPERAND (t, 0), results, address_p, - lhs_p); - return; - /* We are missing handling for TARGET_MEM_REF here. */ - default:; - } - break; - } - case tcc_exceptional: - { - switch (TREE_CODE (t)) - { - case SSA_NAME: - { - get_constraint_for_ssa_var (t, results, address_p); - return; - } - case CONSTRUCTOR: - { - unsigned int i; - tree val; - auto_vec tmp; - FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (t), i, val) - { - struct constraint_expr *rhsp; - unsigned j; - get_constraint_for_1 (val, &tmp, address_p, lhs_p); - FOR_EACH_VEC_ELT (tmp, j, rhsp) - results->safe_push (*rhsp); - tmp.truncate (0); - } - /* We do not know whether the constructor was complete, - so technically we have to add &NOTHING or &ANYTHING - like we do for an empty constructor as well. */ - return; - } - default:; - } - break; - } - case tcc_declaration: - { - if (!lhs_p && VAR_P (t) && TREE_THIS_VOLATILE (t)) - /* Fall back to anything. */ - break; - get_constraint_for_ssa_var (t, results, address_p); - return; - } - case tcc_constant: - { - /* We cannot refer to automatic variables through constants. */ - temp.type = ADDRESSOF; - temp.var = nonlocal_id; - temp.offset = 0; - results->safe_push (temp); - return; - } - default:; - } - - /* The default fallback is a constraint from anything. */ - temp.type = ADDRESSOF; - temp.var = anything_id; - temp.offset = 0; - results->safe_push (temp); -} - -/* Given a gimple tree T, return the constraint expression vector for it. */ - -static void -get_constraint_for (tree t, vec *results) -{ - gcc_assert (results->length () == 0); - - get_constraint_for_1 (t, results, false, true); -} - -/* Given a gimple tree T, return the constraint expression vector for it - to be used as the rhs of a constraint. */ - -static void -get_constraint_for_rhs (tree t, vec *results) -{ - gcc_assert (results->length () == 0); - - get_constraint_for_1 (t, results, false, false); -} - - -/* Efficiently generates constraints from all entries in *RHSC to all - entries in *LHSC. */ - -static void -process_all_all_constraints (const vec &lhsc, - const vec &rhsc) -{ - struct constraint_expr *lhsp, *rhsp; - unsigned i, j; - - if (lhsc.length () <= 1 || rhsc.length () <= 1) - { - FOR_EACH_VEC_ELT (lhsc, i, lhsp) - FOR_EACH_VEC_ELT (rhsc, j, rhsp) - process_constraint (new_constraint (*lhsp, *rhsp)); - } - else - { - struct constraint_expr tmp; - tmp = new_scalar_tmp_constraint_exp ("allalltmp", true); - FOR_EACH_VEC_ELT (rhsc, i, rhsp) - process_constraint (new_constraint (tmp, *rhsp)); - FOR_EACH_VEC_ELT (lhsc, i, lhsp) - process_constraint (new_constraint (*lhsp, tmp)); - } -} - -/* Handle aggregate copies by expanding into copies of the respective - fields of the structures. */ - -static void -do_structure_copy (tree lhsop, tree rhsop) -{ - struct constraint_expr *lhsp, *rhsp; - auto_vec lhsc; - auto_vec rhsc; - unsigned j; - - get_constraint_for (lhsop, &lhsc); - get_constraint_for_rhs (rhsop, &rhsc); - lhsp = &lhsc[0]; - rhsp = &rhsc[0]; - if (lhsp->type == DEREF - || (lhsp->type == ADDRESSOF && lhsp->var == anything_id) - || rhsp->type == DEREF) - { - if (lhsp->type == DEREF) - { - gcc_assert (lhsc.length () == 1); - lhsp->offset = UNKNOWN_OFFSET; - } - if (rhsp->type == DEREF) - { - gcc_assert (rhsc.length () == 1); - rhsp->offset = UNKNOWN_OFFSET; - } - process_all_all_constraints (lhsc, rhsc); - } - else if (lhsp->type == SCALAR - && (rhsp->type == SCALAR - || rhsp->type == ADDRESSOF)) - { - HOST_WIDE_INT lhssize, lhsoffset; - HOST_WIDE_INT rhssize, rhsoffset; - bool reverse; - unsigned k = 0; - if (!get_ref_base_and_extent_hwi (lhsop, &lhsoffset, &lhssize, &reverse) - || !get_ref_base_and_extent_hwi (rhsop, &rhsoffset, &rhssize, - &reverse)) - { - process_all_all_constraints (lhsc, rhsc); - return; - } - for (j = 0; lhsc.iterate (j, &lhsp);) - { - varinfo_t lhsv, rhsv; - rhsp = &rhsc[k]; - lhsv = get_varinfo (lhsp->var); - rhsv = get_varinfo (rhsp->var); - if (lhsv->may_have_pointers - && (lhsv->is_full_var - || rhsv->is_full_var - || ranges_overlap_p (lhsv->offset + rhsoffset, lhsv->size, - rhsv->offset + lhsoffset, rhsv->size))) - process_constraint (new_constraint (*lhsp, *rhsp)); - if (!rhsv->is_full_var - && (lhsv->is_full_var - || (lhsv->offset + rhsoffset + lhsv->size - > rhsv->offset + lhsoffset + rhsv->size))) - { - ++k; - if (k >= rhsc.length ()) - break; - } - else - ++j; - } - } - else - gcc_unreachable (); -} - -/* Create constraints ID = { rhsc }. */ - -static void -make_constraints_to (unsigned id, const vec &rhsc) -{ - struct constraint_expr *c; - struct constraint_expr includes; - unsigned int j; - - includes.var = id; - includes.offset = 0; - includes.type = SCALAR; - - FOR_EACH_VEC_ELT (rhsc, j, c) - process_constraint (new_constraint (includes, *c)); -} - -/* Create a constraint ID = OP. */ - -static void -make_constraint_to (unsigned id, tree op) -{ - auto_vec rhsc; - get_constraint_for_rhs (op, &rhsc); - make_constraints_to (id, rhsc); -} - -/* Create a constraint ID = &FROM. */ - -static void -make_constraint_from (varinfo_t vi, int from) -{ - struct constraint_expr lhs, rhs; - - lhs.var = vi->id; - lhs.offset = 0; - lhs.type = SCALAR; - - rhs.var = from; - rhs.offset = 0; - rhs.type = ADDRESSOF; - process_constraint (new_constraint (lhs, rhs)); -} - -/* Create a constraint ID = FROM. */ - -static void -make_copy_constraint (varinfo_t vi, int from) -{ - struct constraint_expr lhs, rhs; - - lhs.var = vi->id; - lhs.offset = 0; - lhs.type = SCALAR; - - rhs.var = from; - rhs.offset = 0; - rhs.type = SCALAR; - process_constraint (new_constraint (lhs, rhs)); -} - -/* Make constraints necessary to make OP escape. */ - -static void -make_escape_constraint (tree op) -{ - make_constraint_to (escaped_id, op); -} - -/* Make constraint necessary to make all indirect references - from VI escape. */ - -static void -make_indirect_escape_constraint (varinfo_t vi) -{ - struct constraint_expr lhs, rhs; - /* escaped = *(VAR + UNKNOWN); */ - lhs.type = SCALAR; - lhs.var = escaped_id; - lhs.offset = 0; - rhs.type = DEREF; - rhs.var = vi->id; - rhs.offset = UNKNOWN_OFFSET; - process_constraint (new_constraint (lhs, rhs)); -} - -/* Add constraints to that the solution of VI is transitively closed. */ - -static void -make_transitive_closure_constraints (varinfo_t vi) -{ - struct constraint_expr lhs, rhs; - - /* VAR = *(VAR + UNKNOWN); */ - lhs.type = SCALAR; - lhs.var = vi->id; - lhs.offset = 0; - rhs.type = DEREF; - rhs.var = vi->id; - rhs.offset = UNKNOWN_OFFSET; - process_constraint (new_constraint (lhs, rhs)); -} - -/* Add constraints to that the solution of VI has all subvariables added. */ - -static void -make_any_offset_constraints (varinfo_t vi) -{ - struct constraint_expr lhs, rhs; - - /* VAR = VAR + UNKNOWN; */ - lhs.type = SCALAR; - lhs.var = vi->id; - lhs.offset = 0; - rhs.type = SCALAR; - rhs.var = vi->id; - rhs.offset = UNKNOWN_OFFSET; - process_constraint (new_constraint (lhs, rhs)); -} - -/* Temporary storage for fake var decls. */ -struct obstack fake_var_decl_obstack; - -/* Build a fake VAR_DECL acting as referrer to a DECL_UID. */ - -static tree -build_fake_var_decl (tree type) -{ - tree decl = (tree) XOBNEW (&fake_var_decl_obstack, struct tree_var_decl); - memset (decl, 0, sizeof (struct tree_var_decl)); - TREE_SET_CODE (decl, VAR_DECL); - TREE_TYPE (decl) = type; - DECL_UID (decl) = allocate_decl_uid (); - SET_DECL_PT_UID (decl, -1); - layout_decl (decl, 0); - return decl; -} - -/* Create a new artificial heap variable with NAME. - Return the created variable. */ - -static varinfo_t -make_heapvar (const char *name, bool add_id) -{ - varinfo_t vi; - tree heapvar; - - heapvar = build_fake_var_decl (ptr_type_node); - DECL_EXTERNAL (heapvar) = 1; - - vi = new_var_info (heapvar, name, add_id); - vi->is_heap_var = true; - vi->is_unknown_size_var = true; - vi->offset = 0; - vi->fullsize = ~0; - vi->size = ~0; - vi->is_full_var = true; - insert_vi_for_tree (heapvar, vi); - - return vi; -} - -/* Create a new artificial heap variable with NAME and make a - constraint from it to LHS. Set flags according to a tag used - for tracking restrict pointers. */ - -static varinfo_t -make_constraint_from_restrict (varinfo_t lhs, const char *name, bool add_id) -{ - varinfo_t vi = make_heapvar (name, add_id); - vi->is_restrict_var = 1; - vi->is_global_var = 1; - vi->may_have_pointers = 1; - make_constraint_from (lhs, vi->id); - return vi; -} - -/* Create a new artificial heap variable with NAME and make a - constraint from it to LHS. Set flags according to a tag used - for tracking restrict pointers and make the artificial heap - point to global memory. */ - -static varinfo_t -make_constraint_from_global_restrict (varinfo_t lhs, const char *name, - bool add_id) -{ - varinfo_t vi = make_constraint_from_restrict (lhs, name, add_id); - make_copy_constraint (vi, nonlocal_id); - return vi; -} - -/* In IPA mode there are varinfos for different aspects of reach - function designator. One for the points-to set of the return - value, one for the variables that are clobbered by the function, - one for its uses and one for each parameter (including a single - glob for remaining variadic arguments). */ - -enum { fi_clobbers = 1, fi_uses = 2, - fi_static_chain = 3, fi_result = 4, fi_parm_base = 5 }; - -/* Get a constraint for the requested part of a function designator FI - when operating in IPA mode. */ - -static struct constraint_expr -get_function_part_constraint (varinfo_t fi, unsigned part) -{ - struct constraint_expr c; - - gcc_assert (in_ipa_mode); - - if (fi->id == anything_id) - { - /* ??? We probably should have a ANYFN special variable. */ - c.var = anything_id; - c.offset = 0; - c.type = SCALAR; - } - else if (fi->decl && TREE_CODE (fi->decl) == FUNCTION_DECL) - { - varinfo_t ai = first_vi_for_offset (fi, part); - if (ai) - c.var = ai->id; - else - c.var = anything_id; - c.offset = 0; - c.type = SCALAR; - } - else - { - c.var = fi->id; - c.offset = part; - c.type = DEREF; - } - - return c; -} - -/* Produce constraints for argument ARG of call STMT with eaf flags - FLAGS. RESULTS is array holding constraints for return value. - CALLESCAPE_ID is variable where call loocal escapes are added. - WRITES_GLOVEL_MEMORY is true if callee may write global memory. */ - -static void -handle_call_arg (gcall *stmt, tree arg, vec *results, int flags, - int callescape_id, bool writes_global_memory) -{ - int relevant_indirect_flags = EAF_NO_INDIRECT_CLOBBER | EAF_NO_INDIRECT_READ - | EAF_NO_INDIRECT_ESCAPE; - int relevant_flags = relevant_indirect_flags - | EAF_NO_DIRECT_CLOBBER - | EAF_NO_DIRECT_READ - | EAF_NO_DIRECT_ESCAPE; - if (gimple_call_lhs (stmt)) - { - relevant_flags |= EAF_NOT_RETURNED_DIRECTLY | EAF_NOT_RETURNED_INDIRECTLY; - relevant_indirect_flags |= EAF_NOT_RETURNED_INDIRECTLY; - - /* If value is never read from it can not be returned indirectly - (except through the escape solution). - For all flags we get these implications right except for - not_returned because we miss return functions in ipa-prop. */ - - if (flags & EAF_NO_DIRECT_READ) - flags |= EAF_NOT_RETURNED_INDIRECTLY; - } - - /* If the argument is not used we can ignore it. - Similarly argument is invisile for us if it not clobbered, does not - escape, is not read and can not be returned. */ - if ((flags & EAF_UNUSED) || ((flags & relevant_flags) == relevant_flags)) - return; - - /* Produce varinfo for direct accesses to ARG. */ - varinfo_t tem = new_var_info (NULL_TREE, "callarg", true); - tem->is_reg_var = true; - make_constraint_to (tem->id, arg); - make_any_offset_constraints (tem); - - bool callarg_transitive = false; - - /* As an compile time optimization if we make no difference between - direct and indirect accesses make arg transitively closed. - This avoids the need to build indir arg and do everything twice. */ - if (((flags & EAF_NO_INDIRECT_CLOBBER) != 0) - == ((flags & EAF_NO_DIRECT_CLOBBER) != 0) - && (((flags & EAF_NO_INDIRECT_READ) != 0) - == ((flags & EAF_NO_DIRECT_READ) != 0)) - && (((flags & EAF_NO_INDIRECT_ESCAPE) != 0) - == ((flags & EAF_NO_DIRECT_ESCAPE) != 0)) - && (((flags & EAF_NOT_RETURNED_INDIRECTLY) != 0) - == ((flags & EAF_NOT_RETURNED_DIRECTLY) != 0))) - { - make_transitive_closure_constraints (tem); - callarg_transitive = true; - } - - /* If necessary, produce varinfo for indirect accesses to ARG. */ - varinfo_t indir_tem = NULL; - if (!callarg_transitive - && (flags & relevant_indirect_flags) != relevant_indirect_flags) - { - struct constraint_expr lhs, rhs; - indir_tem = new_var_info (NULL_TREE, "indircallarg", true); - indir_tem->is_reg_var = true; - - /* indir_term = *tem. */ - lhs.type = SCALAR; - lhs.var = indir_tem->id; - lhs.offset = 0; - - rhs.type = DEREF; - rhs.var = tem->id; - rhs.offset = UNKNOWN_OFFSET; - process_constraint (new_constraint (lhs, rhs)); - - make_any_offset_constraints (indir_tem); - - /* If we do not read indirectly there is no need for transitive closure. - We know there is only one level of indirection. */ - if (!(flags & EAF_NO_INDIRECT_READ)) - make_transitive_closure_constraints (indir_tem); - gcc_checking_assert (!(flags & EAF_NO_DIRECT_READ)); - } - - if (gimple_call_lhs (stmt)) - { - if (!(flags & EAF_NOT_RETURNED_DIRECTLY)) - { - struct constraint_expr cexpr; - cexpr.var = tem->id; - cexpr.type = SCALAR; - cexpr.offset = 0; - results->safe_push (cexpr); - } - if (!callarg_transitive & !(flags & EAF_NOT_RETURNED_INDIRECTLY)) - { - struct constraint_expr cexpr; - cexpr.var = indir_tem->id; - cexpr.type = SCALAR; - cexpr.offset = 0; - results->safe_push (cexpr); - } - } - - if (!(flags & EAF_NO_DIRECT_READ)) - { - varinfo_t uses = get_call_use_vi (stmt); - make_copy_constraint (uses, tem->id); - if (!callarg_transitive & !(flags & EAF_NO_INDIRECT_READ)) - make_copy_constraint (uses, indir_tem->id); - } - else - /* To read indirectly we need to read directly. */ - gcc_checking_assert (flags & EAF_NO_INDIRECT_READ); - - if (!(flags & EAF_NO_DIRECT_CLOBBER)) - { - struct constraint_expr lhs, rhs; - - /* *arg = callescape. */ - lhs.type = DEREF; - lhs.var = tem->id; - lhs.offset = 0; - - rhs.type = SCALAR; - rhs.var = callescape_id; - rhs.offset = 0; - process_constraint (new_constraint (lhs, rhs)); - - /* callclobbered = arg. */ - make_copy_constraint (get_call_clobber_vi (stmt), tem->id); - } - if (!callarg_transitive & !(flags & EAF_NO_INDIRECT_CLOBBER)) - { - struct constraint_expr lhs, rhs; - - /* *indir_arg = callescape. */ - lhs.type = DEREF; - lhs.var = indir_tem->id; - lhs.offset = 0; - - rhs.type = SCALAR; - rhs.var = callescape_id; - rhs.offset = 0; - process_constraint (new_constraint (lhs, rhs)); - - /* callclobbered = indir_arg. */ - make_copy_constraint (get_call_clobber_vi (stmt), indir_tem->id); - } - - if (!(flags & (EAF_NO_DIRECT_ESCAPE | EAF_NO_INDIRECT_ESCAPE))) - { - struct constraint_expr lhs, rhs; - - /* callescape = arg; */ - lhs.var = callescape_id; - lhs.offset = 0; - lhs.type = SCALAR; - - rhs.var = tem->id; - rhs.offset = 0; - rhs.type = SCALAR; - process_constraint (new_constraint (lhs, rhs)); - - if (writes_global_memory) - make_escape_constraint (arg); - } - else if (!callarg_transitive & !(flags & EAF_NO_INDIRECT_ESCAPE)) - { - struct constraint_expr lhs, rhs; - - /* callescape = *(indir_arg + UNKNOWN); */ - lhs.var = callescape_id; - lhs.offset = 0; - lhs.type = SCALAR; - - rhs.var = indir_tem->id; - rhs.offset = 0; - rhs.type = SCALAR; - process_constraint (new_constraint (lhs, rhs)); - - if (writes_global_memory) - make_indirect_escape_constraint (tem); - } -} - -/* Determine global memory access of call STMT and update - WRITES_GLOBAL_MEMORY, READS_GLOBAL_MEMORY and USES_GLOBAL_MEMORY. */ - -static void -determine_global_memory_access (gcall *stmt, - bool *writes_global_memory, - bool *reads_global_memory, - bool *uses_global_memory) -{ - tree callee; - cgraph_node *node; - modref_summary *summary; - - /* We need to detrmine reads to set uses. */ - gcc_assert (!uses_global_memory || reads_global_memory); - - if ((callee = gimple_call_fndecl (stmt)) != NULL_TREE - && (node = cgraph_node::get (callee)) != NULL - && (summary = get_modref_function_summary (node))) - { - if (writes_global_memory && *writes_global_memory) - *writes_global_memory = summary->global_memory_written; - if (reads_global_memory && *reads_global_memory) - *reads_global_memory = summary->global_memory_read; - if (reads_global_memory && uses_global_memory - && !summary->calls_interposable - && !*reads_global_memory && node->binds_to_current_def_p ()) - *uses_global_memory = false; - } - if ((writes_global_memory && *writes_global_memory) - || (uses_global_memory && *uses_global_memory) - || (reads_global_memory && *reads_global_memory)) - { - attr_fnspec fnspec = gimple_call_fnspec (stmt); - if (fnspec.known_p ()) - { - if (writes_global_memory - && !fnspec.global_memory_written_p ()) - *writes_global_memory = false; - if (reads_global_memory && !fnspec.global_memory_read_p ()) - { - *reads_global_memory = false; - if (uses_global_memory) - *uses_global_memory = false; - } - } - } -} - -/* For non-IPA mode, generate constraints necessary for a call on the - RHS and collect return value constraint to RESULTS to be used later in - handle_lhs_call. - - IMPLICIT_EAF_FLAGS are added to each function argument. If - WRITES_GLOBAL_MEMORY is true function is assumed to possibly write to global - memory. Similar for READS_GLOBAL_MEMORY. */ - -static void -handle_rhs_call (gcall *stmt, vec *results, - int implicit_eaf_flags, - bool writes_global_memory, - bool reads_global_memory) -{ - determine_global_memory_access (stmt, &writes_global_memory, - &reads_global_memory, - NULL); - - varinfo_t callescape = new_var_info (NULL_TREE, "callescape", true); - - /* If function can use global memory, add it to callescape - and to possible return values. If not we can still use/return addresses - of global symbols. */ - struct constraint_expr lhs, rhs; - - lhs.type = SCALAR; - lhs.var = callescape->id; - lhs.offset = 0; - - rhs.type = reads_global_memory ? SCALAR : ADDRESSOF; - rhs.var = nonlocal_id; - rhs.offset = 0; - - process_constraint (new_constraint (lhs, rhs)); - results->safe_push (rhs); - - varinfo_t uses = get_call_use_vi (stmt); - make_copy_constraint (uses, callescape->id); - - for (unsigned i = 0; i < gimple_call_num_args (stmt); ++i) - { - tree arg = gimple_call_arg (stmt, i); - int flags = gimple_call_arg_flags (stmt, i); - handle_call_arg (stmt, arg, results, - flags | implicit_eaf_flags, - callescape->id, writes_global_memory); - } - - /* The static chain escapes as well. */ - if (gimple_call_chain (stmt)) - handle_call_arg (stmt, gimple_call_chain (stmt), results, - implicit_eaf_flags - | gimple_call_static_chain_flags (stmt), - callescape->id, writes_global_memory); - - /* And if we applied NRV the address of the return slot escapes as well. */ - if (gimple_call_return_slot_opt_p (stmt) - && gimple_call_lhs (stmt) != NULL_TREE - && TREE_ADDRESSABLE (TREE_TYPE (gimple_call_lhs (stmt)))) - { - int flags = gimple_call_retslot_flags (stmt); - const int relevant_flags = EAF_NO_DIRECT_ESCAPE - | EAF_NOT_RETURNED_DIRECTLY; - - if (!(flags & EAF_UNUSED) && (flags & relevant_flags) != relevant_flags) - { - auto_vec tmpc; - - get_constraint_for_address_of (gimple_call_lhs (stmt), &tmpc); - - if (!(flags & EAF_NO_DIRECT_ESCAPE)) - { - make_constraints_to (callescape->id, tmpc); - if (writes_global_memory) - make_constraints_to (escaped_id, tmpc); - } - if (!(flags & EAF_NOT_RETURNED_DIRECTLY)) - { - struct constraint_expr *c; - unsigned i; - FOR_EACH_VEC_ELT (tmpc, i, c) - results->safe_push (*c); - } - } - } -} - -/* For non-IPA mode, generate constraints necessary for a call - that returns a pointer and assigns it to LHS. This simply makes - the LHS point to global and escaped variables. */ - -static void -handle_lhs_call (gcall *stmt, tree lhs, int flags, vec &rhsc, - tree fndecl) -{ - auto_vec lhsc; - - get_constraint_for (lhs, &lhsc); - /* If the store is to a global decl make sure to - add proper escape constraints. */ - lhs = get_base_address (lhs); - if (lhs - && DECL_P (lhs) - && is_global_var (lhs)) - { - struct constraint_expr tmpc; - tmpc.var = escaped_id; - tmpc.offset = 0; - tmpc.type = SCALAR; - lhsc.safe_push (tmpc); - } - - /* If the call returns an argument unmodified override the rhs - constraints. */ - if (flags & ERF_RETURNS_ARG - && (flags & ERF_RETURN_ARG_MASK) < gimple_call_num_args (stmt)) - { - tree arg; - rhsc.truncate (0); - arg = gimple_call_arg (stmt, flags & ERF_RETURN_ARG_MASK); - get_constraint_for (arg, &rhsc); - process_all_all_constraints (lhsc, rhsc); - rhsc.truncate (0); - } - else if (flags & ERF_NOALIAS) - { - varinfo_t vi; - struct constraint_expr tmpc; - rhsc.truncate (0); - vi = make_heapvar ("HEAP", true); - /* We are marking allocated storage local, we deal with it becoming - global by escaping and setting of vars_contains_escaped_heap. */ - DECL_EXTERNAL (vi->decl) = 0; - vi->is_global_var = 0; - /* If this is not a real malloc call assume the memory was - initialized and thus may point to global memory. All - builtin functions with the malloc attribute behave in a sane way. */ - if (!fndecl - || !fndecl_built_in_p (fndecl, BUILT_IN_NORMAL)) - make_constraint_from (vi, nonlocal_id); - tmpc.var = vi->id; - tmpc.offset = 0; - tmpc.type = ADDRESSOF; - rhsc.safe_push (tmpc); - process_all_all_constraints (lhsc, rhsc); - rhsc.truncate (0); - } - else - process_all_all_constraints (lhsc, rhsc); -} - - -/* Return the varinfo for the callee of CALL. */ - -static varinfo_t -get_fi_for_callee (gcall *call) -{ - tree decl, fn = gimple_call_fn (call); - - if (fn && TREE_CODE (fn) == OBJ_TYPE_REF) - fn = OBJ_TYPE_REF_EXPR (fn); - - /* If we can directly resolve the function being called, do so. - Otherwise, it must be some sort of indirect expression that - we should still be able to handle. */ - decl = gimple_call_addr_fndecl (fn); - if (decl) - return get_vi_for_tree (decl); - - /* If the function is anything other than a SSA name pointer we have no - clue and should be getting ANYFN (well, ANYTHING for now). */ - if (!fn || TREE_CODE (fn) != SSA_NAME) - return get_varinfo (anything_id); - - if (SSA_NAME_IS_DEFAULT_DEF (fn) - && (TREE_CODE (SSA_NAME_VAR (fn)) == PARM_DECL - || TREE_CODE (SSA_NAME_VAR (fn)) == RESULT_DECL)) - fn = SSA_NAME_VAR (fn); - - return get_vi_for_tree (fn); -} - -/* Create constraints for assigning call argument ARG to the incoming parameter - INDEX of function FI. */ - -static void -find_func_aliases_for_call_arg (varinfo_t fi, unsigned index, tree arg) -{ - struct constraint_expr lhs; - lhs = get_function_part_constraint (fi, fi_parm_base + index); - - auto_vec rhsc; - get_constraint_for_rhs (arg, &rhsc); - - unsigned j; - struct constraint_expr *rhsp; - FOR_EACH_VEC_ELT (rhsc, j, rhsp) - process_constraint (new_constraint (lhs, *rhsp)); -} - -/* Return true if FNDECL may be part of another lto partition. */ - -static bool -fndecl_maybe_in_other_partition (tree fndecl) -{ - cgraph_node *fn_node = cgraph_node::get (fndecl); - if (fn_node == NULL) - return true; - - return fn_node->in_other_partition; -} - -/* Create constraints for the builtin call T. Return true if the call - was handled, otherwise false. */ - -static bool -find_func_aliases_for_builtin_call (struct function *fn, gcall *t) -{ - tree fndecl = gimple_call_fndecl (t); - auto_vec lhsc; - auto_vec rhsc; - varinfo_t fi; - - if (gimple_call_builtin_p (t, BUILT_IN_NORMAL)) - /* ??? All builtins that are handled here need to be handled - in the alias-oracle query functions explicitly! */ - switch (DECL_FUNCTION_CODE (fndecl)) - { - /* All the following functions return a pointer to the same object - as their first argument points to. The functions do not add - to the ESCAPED solution. The functions make the first argument - pointed to memory point to what the second argument pointed to - memory points to. */ - case BUILT_IN_STRCPY: - case BUILT_IN_STRNCPY: - case BUILT_IN_BCOPY: - case BUILT_IN_MEMCPY: - case BUILT_IN_MEMMOVE: - case BUILT_IN_MEMPCPY: - case BUILT_IN_STPCPY: - case BUILT_IN_STPNCPY: - case BUILT_IN_STRCAT: - case BUILT_IN_STRNCAT: - case BUILT_IN_STRCPY_CHK: - case BUILT_IN_STRNCPY_CHK: - case BUILT_IN_MEMCPY_CHK: - case BUILT_IN_MEMMOVE_CHK: - case BUILT_IN_MEMPCPY_CHK: - case BUILT_IN_STPCPY_CHK: - case BUILT_IN_STPNCPY_CHK: - case BUILT_IN_STRCAT_CHK: - case BUILT_IN_STRNCAT_CHK: - case BUILT_IN_TM_MEMCPY: - case BUILT_IN_TM_MEMMOVE: - { - tree res = gimple_call_lhs (t); - tree dest = gimple_call_arg (t, (DECL_FUNCTION_CODE (fndecl) - == BUILT_IN_BCOPY ? 1 : 0)); - tree src = gimple_call_arg (t, (DECL_FUNCTION_CODE (fndecl) - == BUILT_IN_BCOPY ? 0 : 1)); - if (res != NULL_TREE) - { - get_constraint_for (res, &lhsc); - if (DECL_FUNCTION_CODE (fndecl) == BUILT_IN_MEMPCPY - || DECL_FUNCTION_CODE (fndecl) == BUILT_IN_STPCPY - || DECL_FUNCTION_CODE (fndecl) == BUILT_IN_STPNCPY - || DECL_FUNCTION_CODE (fndecl) == BUILT_IN_MEMPCPY_CHK - || DECL_FUNCTION_CODE (fndecl) == BUILT_IN_STPCPY_CHK - || DECL_FUNCTION_CODE (fndecl) == BUILT_IN_STPNCPY_CHK) - get_constraint_for_ptr_offset (dest, NULL_TREE, &rhsc); - else - get_constraint_for (dest, &rhsc); - process_all_all_constraints (lhsc, rhsc); - lhsc.truncate (0); - rhsc.truncate (0); - } - get_constraint_for_ptr_offset (dest, NULL_TREE, &lhsc); - get_constraint_for_ptr_offset (src, NULL_TREE, &rhsc); - do_deref (&lhsc); - do_deref (&rhsc); - process_all_all_constraints (lhsc, rhsc); - return true; - } - case BUILT_IN_MEMSET: - case BUILT_IN_MEMSET_CHK: - case BUILT_IN_TM_MEMSET: - { - tree res = gimple_call_lhs (t); - tree dest = gimple_call_arg (t, 0); - unsigned i; - ce_s *lhsp; - struct constraint_expr ac; - if (res != NULL_TREE) - { - get_constraint_for (res, &lhsc); - get_constraint_for (dest, &rhsc); - process_all_all_constraints (lhsc, rhsc); - lhsc.truncate (0); - } - get_constraint_for_ptr_offset (dest, NULL_TREE, &lhsc); - do_deref (&lhsc); - if (flag_delete_null_pointer_checks - && integer_zerop (gimple_call_arg (t, 1))) - { - ac.type = ADDRESSOF; - ac.var = nothing_id; - } - else - { - ac.type = SCALAR; - ac.var = integer_id; - } - ac.offset = 0; - FOR_EACH_VEC_ELT (lhsc, i, lhsp) - process_constraint (new_constraint (*lhsp, ac)); - return true; - } - case BUILT_IN_STACK_SAVE: - case BUILT_IN_STACK_RESTORE: - /* Nothing interesting happens. */ - return true; - case BUILT_IN_ALLOCA: - case BUILT_IN_ALLOCA_WITH_ALIGN: - case BUILT_IN_ALLOCA_WITH_ALIGN_AND_MAX: - { - tree ptr = gimple_call_lhs (t); - if (ptr == NULL_TREE) - return true; - get_constraint_for (ptr, &lhsc); - varinfo_t vi = make_heapvar ("HEAP", true); - /* Alloca storage is never global. To exempt it from escaped - handling make it a non-heap var. */ - DECL_EXTERNAL (vi->decl) = 0; - vi->is_global_var = 0; - vi->is_heap_var = 0; - struct constraint_expr tmpc; - tmpc.var = vi->id; - tmpc.offset = 0; - tmpc.type = ADDRESSOF; - rhsc.safe_push (tmpc); - process_all_all_constraints (lhsc, rhsc); - return true; - } - case BUILT_IN_POSIX_MEMALIGN: - { - tree ptrptr = gimple_call_arg (t, 0); - get_constraint_for (ptrptr, &lhsc); - do_deref (&lhsc); - varinfo_t vi = make_heapvar ("HEAP", true); - /* We are marking allocated storage local, we deal with it becoming - global by escaping and setting of vars_contains_escaped_heap. */ - DECL_EXTERNAL (vi->decl) = 0; - vi->is_global_var = 0; - struct constraint_expr tmpc; - tmpc.var = vi->id; - tmpc.offset = 0; - tmpc.type = ADDRESSOF; - rhsc.safe_push (tmpc); - process_all_all_constraints (lhsc, rhsc); - return true; - } - case BUILT_IN_ASSUME_ALIGNED: - { - tree res = gimple_call_lhs (t); - tree dest = gimple_call_arg (t, 0); - if (res != NULL_TREE) - { - get_constraint_for (res, &lhsc); - get_constraint_for (dest, &rhsc); - process_all_all_constraints (lhsc, rhsc); - } - return true; - } - /* All the following functions do not return pointers, do not - modify the points-to sets of memory reachable from their - arguments and do not add to the ESCAPED solution. */ - case BUILT_IN_SINCOS: - case BUILT_IN_SINCOSF: - case BUILT_IN_SINCOSL: - case BUILT_IN_FREXP: - case BUILT_IN_FREXPF: - case BUILT_IN_FREXPL: - case BUILT_IN_GAMMA_R: - case BUILT_IN_GAMMAF_R: - case BUILT_IN_GAMMAL_R: - case BUILT_IN_LGAMMA_R: - case BUILT_IN_LGAMMAF_R: - case BUILT_IN_LGAMMAL_R: - case BUILT_IN_MODF: - case BUILT_IN_MODFF: - case BUILT_IN_MODFL: - case BUILT_IN_REMQUO: - case BUILT_IN_REMQUOF: - case BUILT_IN_REMQUOL: - case BUILT_IN_FREE: - return true; - case BUILT_IN_STRDUP: - case BUILT_IN_STRNDUP: - case BUILT_IN_REALLOC: - if (gimple_call_lhs (t)) - { - auto_vec rhsc; - handle_lhs_call (t, gimple_call_lhs (t), - gimple_call_return_flags (t) | ERF_NOALIAS, - rhsc, fndecl); - get_constraint_for_ptr_offset (gimple_call_lhs (t), - NULL_TREE, &lhsc); - get_constraint_for_ptr_offset (gimple_call_arg (t, 0), - NULL_TREE, &rhsc); - do_deref (&lhsc); - do_deref (&rhsc); - process_all_all_constraints (lhsc, rhsc); - lhsc.truncate (0); - rhsc.truncate (0); - /* For realloc the resulting pointer can be equal to the - argument as well. But only doing this wouldn't be - correct because with ptr == 0 realloc behaves like malloc. */ - if (DECL_FUNCTION_CODE (fndecl) == BUILT_IN_REALLOC) - { - get_constraint_for (gimple_call_lhs (t), &lhsc); - get_constraint_for (gimple_call_arg (t, 0), &rhsc); - process_all_all_constraints (lhsc, rhsc); - } - return true; - } - break; - /* String / character search functions return a pointer into the - source string or NULL. */ - case BUILT_IN_INDEX: - case BUILT_IN_STRCHR: - case BUILT_IN_STRRCHR: - case BUILT_IN_MEMCHR: - case BUILT_IN_STRSTR: - case BUILT_IN_STRPBRK: - if (gimple_call_lhs (t)) - { - tree src = gimple_call_arg (t, 0); - get_constraint_for_ptr_offset (src, NULL_TREE, &rhsc); - constraint_expr nul; - nul.var = nothing_id; - nul.offset = 0; - nul.type = ADDRESSOF; - rhsc.safe_push (nul); - get_constraint_for (gimple_call_lhs (t), &lhsc); - process_all_all_constraints (lhsc, rhsc); - } - return true; - /* Pure functions that return something not based on any object and - that use the memory pointed to by their arguments (but not - transitively). */ - case BUILT_IN_STRCMP: - case BUILT_IN_STRCMP_EQ: - case BUILT_IN_STRNCMP: - case BUILT_IN_STRNCMP_EQ: - case BUILT_IN_STRCASECMP: - case BUILT_IN_STRNCASECMP: - case BUILT_IN_MEMCMP: - case BUILT_IN_BCMP: - case BUILT_IN_STRSPN: - case BUILT_IN_STRCSPN: - { - varinfo_t uses = get_call_use_vi (t); - make_any_offset_constraints (uses); - make_constraint_to (uses->id, gimple_call_arg (t, 0)); - make_constraint_to (uses->id, gimple_call_arg (t, 1)); - /* No constraints are necessary for the return value. */ - return true; - } - case BUILT_IN_STRLEN: - { - varinfo_t uses = get_call_use_vi (t); - make_any_offset_constraints (uses); - make_constraint_to (uses->id, gimple_call_arg (t, 0)); - /* No constraints are necessary for the return value. */ - return true; - } - case BUILT_IN_OBJECT_SIZE: - case BUILT_IN_CONSTANT_P: - { - /* No constraints are necessary for the return value or the - arguments. */ - return true; - } - /* Trampolines are special - they set up passing the static - frame. */ - case BUILT_IN_INIT_TRAMPOLINE: - { - tree tramp = gimple_call_arg (t, 0); - tree nfunc = gimple_call_arg (t, 1); - tree frame = gimple_call_arg (t, 2); - unsigned i; - struct constraint_expr lhs, *rhsp; - if (in_ipa_mode) - { - varinfo_t nfi = NULL; - gcc_assert (TREE_CODE (nfunc) == ADDR_EXPR); - nfi = lookup_vi_for_tree (TREE_OPERAND (nfunc, 0)); - if (nfi) - { - lhs = get_function_part_constraint (nfi, fi_static_chain); - get_constraint_for (frame, &rhsc); - FOR_EACH_VEC_ELT (rhsc, i, rhsp) - process_constraint (new_constraint (lhs, *rhsp)); - rhsc.truncate (0); - - /* Make the frame point to the function for - the trampoline adjustment call. */ - get_constraint_for (tramp, &lhsc); - do_deref (&lhsc); - get_constraint_for (nfunc, &rhsc); - process_all_all_constraints (lhsc, rhsc); - - return true; - } - } - /* Else fallthru to generic handling which will let - the frame escape. */ - break; - } - case BUILT_IN_ADJUST_TRAMPOLINE: - { - tree tramp = gimple_call_arg (t, 0); - tree res = gimple_call_lhs (t); - if (in_ipa_mode && res) - { - get_constraint_for (res, &lhsc); - get_constraint_for (tramp, &rhsc); - do_deref (&rhsc); - process_all_all_constraints (lhsc, rhsc); - } - return true; - } - CASE_BUILT_IN_TM_STORE (1): - CASE_BUILT_IN_TM_STORE (2): - CASE_BUILT_IN_TM_STORE (4): - CASE_BUILT_IN_TM_STORE (8): - CASE_BUILT_IN_TM_STORE (FLOAT): - CASE_BUILT_IN_TM_STORE (DOUBLE): - CASE_BUILT_IN_TM_STORE (LDOUBLE): - CASE_BUILT_IN_TM_STORE (M64): - CASE_BUILT_IN_TM_STORE (M128): - CASE_BUILT_IN_TM_STORE (M256): - { - tree addr = gimple_call_arg (t, 0); - tree src = gimple_call_arg (t, 1); - - get_constraint_for (addr, &lhsc); - do_deref (&lhsc); - get_constraint_for (src, &rhsc); - process_all_all_constraints (lhsc, rhsc); - return true; - } - CASE_BUILT_IN_TM_LOAD (1): - CASE_BUILT_IN_TM_LOAD (2): - CASE_BUILT_IN_TM_LOAD (4): - CASE_BUILT_IN_TM_LOAD (8): - CASE_BUILT_IN_TM_LOAD (FLOAT): - CASE_BUILT_IN_TM_LOAD (DOUBLE): - CASE_BUILT_IN_TM_LOAD (LDOUBLE): - CASE_BUILT_IN_TM_LOAD (M64): - CASE_BUILT_IN_TM_LOAD (M128): - CASE_BUILT_IN_TM_LOAD (M256): - { - tree dest = gimple_call_lhs (t); - tree addr = gimple_call_arg (t, 0); - - get_constraint_for (dest, &lhsc); - get_constraint_for (addr, &rhsc); - do_deref (&rhsc); - process_all_all_constraints (lhsc, rhsc); - return true; - } - /* Variadic argument handling needs to be handled in IPA - mode as well. */ - case BUILT_IN_VA_START: - { - tree valist = gimple_call_arg (t, 0); - struct constraint_expr rhs, *lhsp; - unsigned i; - get_constraint_for_ptr_offset (valist, NULL_TREE, &lhsc); - do_deref (&lhsc); - /* The va_list gets access to pointers in variadic - arguments. Which we know in the case of IPA analysis - and otherwise are just all nonlocal variables. */ - if (in_ipa_mode) - { - fi = lookup_vi_for_tree (fn->decl); - rhs = get_function_part_constraint (fi, ~0); - rhs.type = ADDRESSOF; - } - else - { - rhs.var = nonlocal_id; - rhs.type = ADDRESSOF; - rhs.offset = 0; - } - FOR_EACH_VEC_ELT (lhsc, i, lhsp) - process_constraint (new_constraint (*lhsp, rhs)); - /* va_list is clobbered. */ - make_constraint_to (get_call_clobber_vi (t)->id, valist); - return true; - } - /* va_end doesn't have any effect that matters. */ - case BUILT_IN_VA_END: - return true; - /* Alternate return. Simply give up for now. */ - case BUILT_IN_RETURN: - { - fi = NULL; - if (!in_ipa_mode - || !(fi = get_vi_for_tree (fn->decl))) - make_constraint_from (get_varinfo (escaped_id), anything_id); - else if (in_ipa_mode - && fi != NULL) - { - struct constraint_expr lhs, rhs; - lhs = get_function_part_constraint (fi, fi_result); - rhs.var = anything_id; - rhs.offset = 0; - rhs.type = SCALAR; - process_constraint (new_constraint (lhs, rhs)); - } - return true; - } - case BUILT_IN_GOMP_PARALLEL: - case BUILT_IN_GOACC_PARALLEL: - { - if (in_ipa_mode) - { - unsigned int fnpos, argpos; - switch (DECL_FUNCTION_CODE (fndecl)) - { - case BUILT_IN_GOMP_PARALLEL: - /* __builtin_GOMP_parallel (fn, data, num_threads, flags). */ - fnpos = 0; - argpos = 1; - break; - case BUILT_IN_GOACC_PARALLEL: - /* __builtin_GOACC_parallel (flags_m, fn, mapnum, hostaddrs, - sizes, kinds, ...). */ - fnpos = 1; - argpos = 3; - break; - default: - gcc_unreachable (); - } - - tree fnarg = gimple_call_arg (t, fnpos); - gcc_assert (TREE_CODE (fnarg) == ADDR_EXPR); - tree fndecl = TREE_OPERAND (fnarg, 0); - if (fndecl_maybe_in_other_partition (fndecl)) - /* Fallthru to general call handling. */ - break; - - tree arg = gimple_call_arg (t, argpos); - - varinfo_t fi = get_vi_for_tree (fndecl); - find_func_aliases_for_call_arg (fi, 0, arg); - return true; - } - /* Else fallthru to generic call handling. */ - break; - } - /* printf-style functions may have hooks to set pointers to - point to somewhere into the generated string. Leave them - for a later exercise... */ - default: - /* Fallthru to general call handling. */; - } - - return false; -} - -/* Create constraints for the call T. */ - -static void -find_func_aliases_for_call (struct function *fn, gcall *t) -{ - tree fndecl = gimple_call_fndecl (t); - varinfo_t fi; - - if (fndecl != NULL_TREE - && fndecl_built_in_p (fndecl) - && find_func_aliases_for_builtin_call (fn, t)) - return; - - if (gimple_call_internal_p (t, IFN_DEFERRED_INIT)) - return; - - fi = get_fi_for_callee (t); - if (!in_ipa_mode - || (fi->decl && fndecl && !fi->is_fn_info)) - { - auto_vec rhsc; - int flags = gimple_call_flags (t); - - /* Const functions can return their arguments and addresses - of global memory but not of escaped memory. */ - if (flags & (ECF_CONST|ECF_NOVOPS)) - { - if (gimple_call_lhs (t)) - handle_rhs_call (t, &rhsc, implicit_const_eaf_flags, false, false); - } - /* Pure functions can return addresses in and of memory - reachable from their arguments, but they are not an escape - point for reachable memory of their arguments. */ - else if (flags & (ECF_PURE|ECF_LOOPING_CONST_OR_PURE)) - handle_rhs_call (t, &rhsc, implicit_pure_eaf_flags, false, true); - /* If the call is to a replaceable operator delete and results - from a delete expression as opposed to a direct call to - such operator, then the effects for PTA (in particular - the escaping of the pointer) can be ignored. */ - else if (fndecl - && DECL_IS_OPERATOR_DELETE_P (fndecl) - && gimple_call_from_new_or_delete (t)) - ; - else - handle_rhs_call (t, &rhsc, 0, true, true); - if (gimple_call_lhs (t)) - handle_lhs_call (t, gimple_call_lhs (t), - gimple_call_return_flags (t), rhsc, fndecl); - } - else - { - auto_vec rhsc; - tree lhsop; - unsigned j; - - /* Assign all the passed arguments to the appropriate incoming - parameters of the function. */ - for (j = 0; j < gimple_call_num_args (t); j++) - { - tree arg = gimple_call_arg (t, j); - find_func_aliases_for_call_arg (fi, j, arg); - } - - /* If we are returning a value, assign it to the result. */ - lhsop = gimple_call_lhs (t); - if (lhsop) - { - auto_vec lhsc; - struct constraint_expr rhs; - struct constraint_expr *lhsp; - bool aggr_p = aggregate_value_p (lhsop, gimple_call_fntype (t)); - - get_constraint_for (lhsop, &lhsc); - rhs = get_function_part_constraint (fi, fi_result); - if (aggr_p) - { - auto_vec tem; - tem.quick_push (rhs); - do_deref (&tem); - gcc_checking_assert (tem.length () == 1); - rhs = tem[0]; - } - FOR_EACH_VEC_ELT (lhsc, j, lhsp) - process_constraint (new_constraint (*lhsp, rhs)); - - /* If we pass the result decl by reference, honor that. */ - if (aggr_p) - { - struct constraint_expr lhs; - struct constraint_expr *rhsp; - - get_constraint_for_address_of (lhsop, &rhsc); - lhs = get_function_part_constraint (fi, fi_result); - FOR_EACH_VEC_ELT (rhsc, j, rhsp) - process_constraint (new_constraint (lhs, *rhsp)); - rhsc.truncate (0); - } - } - - /* If we use a static chain, pass it along. */ - if (gimple_call_chain (t)) - { - struct constraint_expr lhs; - struct constraint_expr *rhsp; - - get_constraint_for (gimple_call_chain (t), &rhsc); - lhs = get_function_part_constraint (fi, fi_static_chain); - FOR_EACH_VEC_ELT (rhsc, j, rhsp) - process_constraint (new_constraint (lhs, *rhsp)); - } - } -} - -/* Walk statement T setting up aliasing constraints according to the - references found in T. This function is the main part of the - constraint builder. AI points to auxiliary alias information used - when building alias sets and computing alias grouping heuristics. */ - -static void -find_func_aliases (struct function *fn, gimple *origt) -{ - gimple *t = origt; - auto_vec lhsc; - auto_vec rhsc; - varinfo_t fi; - - /* Now build constraints expressions. */ - if (gimple_code (t) == GIMPLE_PHI) - { - /* For a phi node, assign all the arguments to - the result. */ - get_constraint_for (gimple_phi_result (t), &lhsc); - for (unsigned i = 0; i < gimple_phi_num_args (t); i++) - { - get_constraint_for_rhs (gimple_phi_arg_def (t, i), &rhsc); - process_all_all_constraints (lhsc, rhsc); - rhsc.truncate (0); - } - } - /* In IPA mode, we need to generate constraints to pass call - arguments through their calls. There are two cases, - either a GIMPLE_CALL returning a value, or just a plain - GIMPLE_CALL when we are not. - - In non-ipa mode, we need to generate constraints for each - pointer passed by address. */ - else if (is_gimple_call (t)) - find_func_aliases_for_call (fn, as_a (t)); - - /* Otherwise, just a regular assignment statement. Only care about - operations with pointer result, others are dealt with as escape - points if they have pointer operands. */ - else if (is_gimple_assign (t)) - { - /* Otherwise, just a regular assignment statement. */ - tree lhsop = gimple_assign_lhs (t); - tree rhsop = (gimple_num_ops (t) == 2) ? gimple_assign_rhs1 (t) : NULL; - - if (rhsop && TREE_CLOBBER_P (rhsop)) - /* Ignore clobbers, they don't actually store anything into - the LHS. */ - ; - else if (rhsop && AGGREGATE_TYPE_P (TREE_TYPE (lhsop))) - do_structure_copy (lhsop, rhsop); - else - { - enum tree_code code = gimple_assign_rhs_code (t); - - get_constraint_for (lhsop, &lhsc); - - if (code == POINTER_PLUS_EXPR) - get_constraint_for_ptr_offset (gimple_assign_rhs1 (t), - gimple_assign_rhs2 (t), &rhsc); - else if (code == POINTER_DIFF_EXPR) - /* The result is not a pointer (part). */ - ; - else if (code == BIT_AND_EXPR - && TREE_CODE (gimple_assign_rhs2 (t)) == INTEGER_CST) - { - /* Aligning a pointer via a BIT_AND_EXPR is offsetting - the pointer. Handle it by offsetting it by UNKNOWN. */ - get_constraint_for_ptr_offset (gimple_assign_rhs1 (t), - NULL_TREE, &rhsc); - } - else if (code == TRUNC_DIV_EXPR - || code == CEIL_DIV_EXPR - || code == FLOOR_DIV_EXPR - || code == ROUND_DIV_EXPR - || code == EXACT_DIV_EXPR - || code == TRUNC_MOD_EXPR - || code == CEIL_MOD_EXPR - || code == FLOOR_MOD_EXPR - || code == ROUND_MOD_EXPR) - /* Division and modulo transfer the pointer from the LHS. */ - get_constraint_for_ptr_offset (gimple_assign_rhs1 (t), - NULL_TREE, &rhsc); - else if (CONVERT_EXPR_CODE_P (code) - || gimple_assign_single_p (t)) - /* See through conversions, single RHS are handled by - get_constraint_for_rhs. */ - get_constraint_for_rhs (rhsop, &rhsc); - else if (code == COND_EXPR) - { - /* The result is a merge of both COND_EXPR arms. */ - auto_vec tmp; - struct constraint_expr *rhsp; - unsigned i; - get_constraint_for_rhs (gimple_assign_rhs2 (t), &rhsc); - get_constraint_for_rhs (gimple_assign_rhs3 (t), &tmp); - FOR_EACH_VEC_ELT (tmp, i, rhsp) - rhsc.safe_push (*rhsp); - } - else if (truth_value_p (code)) - /* Truth value results are not pointer (parts). Or at least - very unreasonable obfuscation of a part. */ - ; - else - { - /* All other operations are possibly offsetting merges. */ - auto_vec tmp; - struct constraint_expr *rhsp; - unsigned i, j; - get_constraint_for_ptr_offset (gimple_assign_rhs1 (t), - NULL_TREE, &rhsc); - for (i = 2; i < gimple_num_ops (t); ++i) - { - get_constraint_for_ptr_offset (gimple_op (t, i), - NULL_TREE, &tmp); - FOR_EACH_VEC_ELT (tmp, j, rhsp) - rhsc.safe_push (*rhsp); - tmp.truncate (0); - } - } - process_all_all_constraints (lhsc, rhsc); - } - /* If there is a store to a global variable the rhs escapes. */ - if ((lhsop = get_base_address (lhsop)) != NULL_TREE - && DECL_P (lhsop)) - { - varinfo_t vi = get_vi_for_tree (lhsop); - if ((! in_ipa_mode && vi->is_global_var) - || vi->is_ipa_escape_point) - make_escape_constraint (rhsop); - } - } - /* Handle escapes through return. */ - else if (gimple_code (t) == GIMPLE_RETURN - && gimple_return_retval (as_a (t)) != NULL_TREE) - { - greturn *return_stmt = as_a (t); - tree retval = gimple_return_retval (return_stmt); - if (!in_ipa_mode) - make_constraint_to (escaped_return_id, retval); - else - { - struct constraint_expr lhs ; - struct constraint_expr *rhsp; - unsigned i; - - fi = lookup_vi_for_tree (fn->decl); - lhs = get_function_part_constraint (fi, fi_result); - get_constraint_for_rhs (retval, &rhsc); - FOR_EACH_VEC_ELT (rhsc, i, rhsp) - process_constraint (new_constraint (lhs, *rhsp)); - } - } - /* Handle asms conservatively by adding escape constraints to everything. */ - else if (gasm *asm_stmt = dyn_cast (t)) - { - unsigned i, noutputs; - const char **oconstraints; - const char *constraint; - bool allows_mem, allows_reg, is_inout; - - noutputs = gimple_asm_noutputs (asm_stmt); - oconstraints = XALLOCAVEC (const char *, noutputs); - - for (i = 0; i < noutputs; ++i) - { - tree link = gimple_asm_output_op (asm_stmt, i); - tree op = TREE_VALUE (link); - - constraint = TREE_STRING_POINTER (TREE_VALUE (TREE_PURPOSE (link))); - oconstraints[i] = constraint; - parse_output_constraint (&constraint, i, 0, 0, &allows_mem, - &allows_reg, &is_inout, nullptr); - - /* A memory constraint makes the address of the operand escape. */ - if (!allows_reg && allows_mem) - { - auto_vec tmpc; - get_constraint_for_address_of (op, &tmpc); - make_constraints_to (escaped_id, tmpc); - } - - /* The asm may read global memory, so outputs may point to - any global memory. */ - if (op) - { - auto_vec lhsc; - struct constraint_expr rhsc, *lhsp; - unsigned j; - get_constraint_for (op, &lhsc); - rhsc.var = nonlocal_id; - rhsc.offset = 0; - rhsc.type = SCALAR; - FOR_EACH_VEC_ELT (lhsc, j, lhsp) - process_constraint (new_constraint (*lhsp, rhsc)); - } - } - for (i = 0; i < gimple_asm_ninputs (asm_stmt); ++i) - { - tree link = gimple_asm_input_op (asm_stmt, i); - tree op = TREE_VALUE (link); - - constraint = TREE_STRING_POINTER (TREE_VALUE (TREE_PURPOSE (link))); - - parse_input_constraint (&constraint, 0, 0, noutputs, 0, oconstraints, - &allows_mem, &allows_reg, nullptr); - - /* A memory constraint makes the address of the operand escape. */ - if (!allows_reg && allows_mem) - { - auto_vec tmpc; - get_constraint_for_address_of (op, &tmpc); - make_constraints_to (escaped_id, tmpc); - } - /* Strictly we'd only need the constraint to ESCAPED if - the asm clobbers memory, otherwise using something - along the lines of per-call clobbers/uses would be enough. */ - else if (op) - make_escape_constraint (op); - } - } -} - - -/* Create a constraint adding to the clobber set of FI the memory - pointed to by PTR. */ - -static void -process_ipa_clobber (varinfo_t fi, tree ptr) -{ - vec ptrc = vNULL; - struct constraint_expr *c, lhs; - unsigned i; - get_constraint_for_rhs (ptr, &ptrc); - lhs = get_function_part_constraint (fi, fi_clobbers); - FOR_EACH_VEC_ELT (ptrc, i, c) - process_constraint (new_constraint (lhs, *c)); - ptrc.release (); -} - -/* Walk statement T setting up clobber and use constraints according to the - references found in T. This function is a main part of the - IPA constraint builder. */ - -static void -find_func_clobbers (struct function *fn, gimple *origt) -{ - gimple *t = origt; - auto_vec lhsc; - auto_vec rhsc; - varinfo_t fi; - - /* Add constraints for clobbered/used in IPA mode. - We are not interested in what automatic variables are clobbered - or used as we only use the information in the caller to which - they do not escape. */ - gcc_assert (in_ipa_mode); - - /* If the stmt refers to memory in any way it better had a VUSE. */ - if (gimple_vuse (t) == NULL_TREE) - return; - - /* We'd better have function information for the current function. */ - fi = lookup_vi_for_tree (fn->decl); - gcc_assert (fi != NULL); - - /* Account for stores in assignments and calls. */ - if (gimple_vdef (t) != NULL_TREE - && gimple_has_lhs (t)) - { - tree lhs = gimple_get_lhs (t); - tree tem = lhs; - while (handled_component_p (tem)) - tem = TREE_OPERAND (tem, 0); - if ((DECL_P (tem) - && !auto_var_in_fn_p (tem, fn->decl)) - || INDIRECT_REF_P (tem) - || (TREE_CODE (tem) == MEM_REF - && !(TREE_CODE (TREE_OPERAND (tem, 0)) == ADDR_EXPR - && auto_var_in_fn_p - (TREE_OPERAND (TREE_OPERAND (tem, 0), 0), fn->decl)))) - { - struct constraint_expr lhsc, *rhsp; - unsigned i; - lhsc = get_function_part_constraint (fi, fi_clobbers); - get_constraint_for_address_of (lhs, &rhsc); - FOR_EACH_VEC_ELT (rhsc, i, rhsp) - process_constraint (new_constraint (lhsc, *rhsp)); - rhsc.truncate (0); - } - } - - /* Account for uses in assigments and returns. */ - if (gimple_assign_single_p (t) - || (gimple_code (t) == GIMPLE_RETURN - && gimple_return_retval (as_a (t)) != NULL_TREE)) - { - tree rhs = (gimple_assign_single_p (t) - ? gimple_assign_rhs1 (t) - : gimple_return_retval (as_a (t))); - tree tem = rhs; - while (handled_component_p (tem)) - tem = TREE_OPERAND (tem, 0); - if ((DECL_P (tem) - && !auto_var_in_fn_p (tem, fn->decl)) - || INDIRECT_REF_P (tem) - || (TREE_CODE (tem) == MEM_REF - && !(TREE_CODE (TREE_OPERAND (tem, 0)) == ADDR_EXPR - && auto_var_in_fn_p - (TREE_OPERAND (TREE_OPERAND (tem, 0), 0), fn->decl)))) - { - struct constraint_expr lhs, *rhsp; - unsigned i; - lhs = get_function_part_constraint (fi, fi_uses); - get_constraint_for_address_of (rhs, &rhsc); - FOR_EACH_VEC_ELT (rhsc, i, rhsp) - process_constraint (new_constraint (lhs, *rhsp)); - rhsc.truncate (0); - } - } - - if (gcall *call_stmt = dyn_cast (t)) - { - varinfo_t cfi = NULL; - tree decl = gimple_call_fndecl (t); - struct constraint_expr lhs, rhs; - unsigned i, j; - - /* For builtins we do not have separate function info. For those - we do not generate escapes for we have to generate clobbers/uses. */ - if (gimple_call_builtin_p (t, BUILT_IN_NORMAL)) - switch (DECL_FUNCTION_CODE (decl)) - { - /* The following functions use and clobber memory pointed to - by their arguments. */ - case BUILT_IN_STRCPY: - case BUILT_IN_STRNCPY: - case BUILT_IN_BCOPY: - case BUILT_IN_MEMCPY: - case BUILT_IN_MEMMOVE: - case BUILT_IN_MEMPCPY: - case BUILT_IN_STPCPY: - case BUILT_IN_STPNCPY: - case BUILT_IN_STRCAT: - case BUILT_IN_STRNCAT: - case BUILT_IN_STRCPY_CHK: - case BUILT_IN_STRNCPY_CHK: - case BUILT_IN_MEMCPY_CHK: - case BUILT_IN_MEMMOVE_CHK: - case BUILT_IN_MEMPCPY_CHK: - case BUILT_IN_STPCPY_CHK: - case BUILT_IN_STPNCPY_CHK: - case BUILT_IN_STRCAT_CHK: - case BUILT_IN_STRNCAT_CHK: - { - tree dest = gimple_call_arg (t, (DECL_FUNCTION_CODE (decl) - == BUILT_IN_BCOPY ? 1 : 0)); - tree src = gimple_call_arg (t, (DECL_FUNCTION_CODE (decl) - == BUILT_IN_BCOPY ? 0 : 1)); - unsigned i; - struct constraint_expr *rhsp, *lhsp; - get_constraint_for_ptr_offset (dest, NULL_TREE, &lhsc); - lhs = get_function_part_constraint (fi, fi_clobbers); - FOR_EACH_VEC_ELT (lhsc, i, lhsp) - process_constraint (new_constraint (lhs, *lhsp)); - get_constraint_for_ptr_offset (src, NULL_TREE, &rhsc); - lhs = get_function_part_constraint (fi, fi_uses); - FOR_EACH_VEC_ELT (rhsc, i, rhsp) - process_constraint (new_constraint (lhs, *rhsp)); - return; - } - /* The following function clobbers memory pointed to by - its argument. */ - case BUILT_IN_MEMSET: - case BUILT_IN_MEMSET_CHK: - case BUILT_IN_POSIX_MEMALIGN: - { - tree dest = gimple_call_arg (t, 0); - unsigned i; - ce_s *lhsp; - get_constraint_for_ptr_offset (dest, NULL_TREE, &lhsc); - lhs = get_function_part_constraint (fi, fi_clobbers); - FOR_EACH_VEC_ELT (lhsc, i, lhsp) - process_constraint (new_constraint (lhs, *lhsp)); - return; - } - /* The following functions clobber their second and third - arguments. */ - case BUILT_IN_SINCOS: - case BUILT_IN_SINCOSF: - case BUILT_IN_SINCOSL: - { - process_ipa_clobber (fi, gimple_call_arg (t, 1)); - process_ipa_clobber (fi, gimple_call_arg (t, 2)); - return; - } - /* The following functions clobber their second argument. */ - case BUILT_IN_FREXP: - case BUILT_IN_FREXPF: - case BUILT_IN_FREXPL: - case BUILT_IN_LGAMMA_R: - case BUILT_IN_LGAMMAF_R: - case BUILT_IN_LGAMMAL_R: - case BUILT_IN_GAMMA_R: - case BUILT_IN_GAMMAF_R: - case BUILT_IN_GAMMAL_R: - case BUILT_IN_MODF: - case BUILT_IN_MODFF: - case BUILT_IN_MODFL: - { - process_ipa_clobber (fi, gimple_call_arg (t, 1)); - return; - } - /* The following functions clobber their third argument. */ - case BUILT_IN_REMQUO: - case BUILT_IN_REMQUOF: - case BUILT_IN_REMQUOL: - { - process_ipa_clobber (fi, gimple_call_arg (t, 2)); - return; - } - /* The following functions use what their first argument - points to. */ - case BUILT_IN_STRDUP: - case BUILT_IN_STRNDUP: - case BUILT_IN_REALLOC: - case BUILT_IN_INDEX: - case BUILT_IN_STRCHR: - case BUILT_IN_STRRCHR: - case BUILT_IN_MEMCHR: - { - tree src = gimple_call_arg (t, 0); - get_constraint_for_ptr_offset (src, NULL_TREE, &rhsc); - lhs = get_function_part_constraint (fi, fi_uses); - struct constraint_expr *rhsp; - FOR_EACH_VEC_ELT (rhsc, i, rhsp) - process_constraint (new_constraint (lhs, *rhsp)); - return; - } - /* The following functions use what their first and second argument - point to. */ - case BUILT_IN_STRSTR: - case BUILT_IN_STRPBRK: - { - tree src = gimple_call_arg (t, 0); - get_constraint_for_ptr_offset (src, NULL_TREE, &rhsc); - lhs = get_function_part_constraint (fi, fi_uses); - struct constraint_expr *rhsp; - FOR_EACH_VEC_ELT (rhsc, i, rhsp) - process_constraint (new_constraint (lhs, *rhsp)); - rhsc.truncate (0); - src = gimple_call_arg (t, 1); - get_constraint_for_ptr_offset (src, NULL_TREE, &rhsc); - FOR_EACH_VEC_ELT (rhsc, i, rhsp) - process_constraint (new_constraint (lhs, *rhsp)); - return; - } - /* The following functions neither read nor clobber memory. */ - case BUILT_IN_ASSUME_ALIGNED: - case BUILT_IN_FREE: - return; - /* Trampolines are of no interest to us. */ - case BUILT_IN_INIT_TRAMPOLINE: - case BUILT_IN_ADJUST_TRAMPOLINE: - return; - case BUILT_IN_VA_START: - case BUILT_IN_VA_END: - return; - case BUILT_IN_GOMP_PARALLEL: - case BUILT_IN_GOACC_PARALLEL: - { - unsigned int fnpos, argpos; - unsigned int implicit_use_args[2]; - unsigned int num_implicit_use_args = 0; - switch (DECL_FUNCTION_CODE (decl)) - { - case BUILT_IN_GOMP_PARALLEL: - /* __builtin_GOMP_parallel (fn, data, num_threads, flags). */ - fnpos = 0; - argpos = 1; - break; - case BUILT_IN_GOACC_PARALLEL: - /* __builtin_GOACC_parallel (flags_m, fn, mapnum, hostaddrs, - sizes, kinds, ...). */ - fnpos = 1; - argpos = 3; - implicit_use_args[num_implicit_use_args++] = 4; - implicit_use_args[num_implicit_use_args++] = 5; - break; - default: - gcc_unreachable (); - } - - tree fnarg = gimple_call_arg (t, fnpos); - gcc_assert (TREE_CODE (fnarg) == ADDR_EXPR); - tree fndecl = TREE_OPERAND (fnarg, 0); - if (fndecl_maybe_in_other_partition (fndecl)) - /* Fallthru to general call handling. */ - break; - - varinfo_t cfi = get_vi_for_tree (fndecl); - - tree arg = gimple_call_arg (t, argpos); - - /* Parameter passed by value is used. */ - lhs = get_function_part_constraint (fi, fi_uses); - struct constraint_expr *rhsp; - get_constraint_for (arg, &rhsc); - FOR_EACH_VEC_ELT (rhsc, j, rhsp) - process_constraint (new_constraint (lhs, *rhsp)); - rhsc.truncate (0); - - /* Handle parameters used by the call, but not used in cfi, as - implicitly used by cfi. */ - lhs = get_function_part_constraint (cfi, fi_uses); - for (unsigned i = 0; i < num_implicit_use_args; ++i) - { - tree arg = gimple_call_arg (t, implicit_use_args[i]); - get_constraint_for (arg, &rhsc); - FOR_EACH_VEC_ELT (rhsc, j, rhsp) - process_constraint (new_constraint (lhs, *rhsp)); - rhsc.truncate (0); - } - - /* The caller clobbers what the callee does. */ - lhs = get_function_part_constraint (fi, fi_clobbers); - rhs = get_function_part_constraint (cfi, fi_clobbers); - process_constraint (new_constraint (lhs, rhs)); - - /* The caller uses what the callee does. */ - lhs = get_function_part_constraint (fi, fi_uses); - rhs = get_function_part_constraint (cfi, fi_uses); - process_constraint (new_constraint (lhs, rhs)); - - return; - } - /* printf-style functions may have hooks to set pointers to - point to somewhere into the generated string. Leave them - for a later exercise... */ - default: - /* Fallthru to general call handling. */; - } - - /* Parameters passed by value are used. */ - lhs = get_function_part_constraint (fi, fi_uses); - for (i = 0; i < gimple_call_num_args (t); i++) - { - struct constraint_expr *rhsp; - tree arg = gimple_call_arg (t, i); - - if (TREE_CODE (arg) == SSA_NAME - || is_gimple_min_invariant (arg)) - continue; - - get_constraint_for_address_of (arg, &rhsc); - FOR_EACH_VEC_ELT (rhsc, j, rhsp) - process_constraint (new_constraint (lhs, *rhsp)); - rhsc.truncate (0); - } - - /* Build constraints for propagating clobbers/uses along the - callgraph edges. */ - cfi = get_fi_for_callee (call_stmt); - if (cfi->id == anything_id) - { - if (gimple_vdef (t)) - make_constraint_from (first_vi_for_offset (fi, fi_clobbers), - anything_id); - make_constraint_from (first_vi_for_offset (fi, fi_uses), - anything_id); - return; - } - - /* For callees without function info (that's external functions), - ESCAPED is clobbered and used. */ - if (cfi->decl - && TREE_CODE (cfi->decl) == FUNCTION_DECL - && !cfi->is_fn_info) - { - varinfo_t vi; - - if (gimple_vdef (t)) - make_copy_constraint (first_vi_for_offset (fi, fi_clobbers), - escaped_id); - make_copy_constraint (first_vi_for_offset (fi, fi_uses), escaped_id); - - /* Also honor the call statement use/clobber info. */ - if ((vi = lookup_call_clobber_vi (call_stmt)) != NULL) - make_copy_constraint (first_vi_for_offset (fi, fi_clobbers), - vi->id); - if ((vi = lookup_call_use_vi (call_stmt)) != NULL) - make_copy_constraint (first_vi_for_offset (fi, fi_uses), - vi->id); - return; - } - - /* Otherwise the caller clobbers and uses what the callee does. - ??? This should use a new complex constraint that filters - local variables of the callee. */ - if (gimple_vdef (t)) - { - lhs = get_function_part_constraint (fi, fi_clobbers); - rhs = get_function_part_constraint (cfi, fi_clobbers); - process_constraint (new_constraint (lhs, rhs)); - } - lhs = get_function_part_constraint (fi, fi_uses); - rhs = get_function_part_constraint (cfi, fi_uses); - process_constraint (new_constraint (lhs, rhs)); - } - else if (gimple_code (t) == GIMPLE_ASM) - { - /* ??? Ick. We can do better. */ - if (gimple_vdef (t)) - make_constraint_from (first_vi_for_offset (fi, fi_clobbers), - anything_id); - make_constraint_from (first_vi_for_offset (fi, fi_uses), - anything_id); - } -} - - -/* This structure is used during pushing fields onto the fieldstack - to track the offset of the field, since bitpos_of_field gives it - relative to its immediate containing type, and we want it relative - to the ultimate containing object. */ - -struct fieldoff -{ - /* Offset from the base of the base containing object to this field. */ - HOST_WIDE_INT offset; - - /* Size, in bits, of the field. */ - unsigned HOST_WIDE_INT size; - - unsigned has_unknown_size : 1; - - unsigned must_have_pointers : 1; - - unsigned may_have_pointers : 1; - - unsigned only_restrict_pointers : 1; - - tree restrict_pointed_type; -}; -typedef struct fieldoff fieldoff_s; - - -/* qsort comparison function for two fieldoff's PA and PB. */ - -static int -fieldoff_compare (const void *pa, const void *pb) -{ - const fieldoff_s *foa = (const fieldoff_s *)pa; - const fieldoff_s *fob = (const fieldoff_s *)pb; - unsigned HOST_WIDE_INT foasize, fobsize; - - if (foa->offset < fob->offset) - return -1; - else if (foa->offset > fob->offset) - return 1; - - foasize = foa->size; - fobsize = fob->size; - if (foasize < fobsize) - return -1; - else if (foasize > fobsize) - return 1; - return 0; -} - -/* Sort a fieldstack according to the field offset and sizes. */ -static void -sort_fieldstack (vec &fieldstack) -{ - fieldstack.qsort (fieldoff_compare); -} - -/* Return true if T is a type that can have subvars. */ - -static inline bool -type_can_have_subvars (const_tree t) -{ - /* Aggregates without overlapping fields can have subvars. */ - return TREE_CODE (t) == RECORD_TYPE; -} - -/* Return true if V is a tree that we can have subvars for. - Normally, this is any aggregate type. Also complex - types which are not gimple registers can have subvars. */ - -static inline bool -var_can_have_subvars (const_tree v) -{ - /* Volatile variables should never have subvars. */ - if (TREE_THIS_VOLATILE (v)) - return false; - - /* Non decls or memory tags can never have subvars. */ - if (!DECL_P (v)) - return false; - - return type_can_have_subvars (TREE_TYPE (v)); -} - -/* Return true if T is a type that does contain pointers. */ - -static bool -type_must_have_pointers (tree type) -{ - if (POINTER_TYPE_P (type)) - return true; - - if (TREE_CODE (type) == ARRAY_TYPE) - return type_must_have_pointers (TREE_TYPE (type)); - - /* A function or method can have pointers as arguments, so track - those separately. */ - if (FUNC_OR_METHOD_TYPE_P (type)) - return true; - - return false; -} - -static bool -field_must_have_pointers (tree t) -{ - return type_must_have_pointers (TREE_TYPE (t)); -} - -/* Given a TYPE, and a vector of field offsets FIELDSTACK, push all - the fields of TYPE onto fieldstack, recording their offsets along - the way. - - OFFSET is used to keep track of the offset in this entire - structure, rather than just the immediately containing structure. - Returns false if the caller is supposed to handle the field we - recursed for. */ - -static bool -push_fields_onto_fieldstack (tree type, vec *fieldstack, - unsigned HOST_WIDE_INT offset) -{ - tree field; - bool empty_p = true; - - if (TREE_CODE (type) != RECORD_TYPE) - return false; - - /* If the vector of fields is growing too big, bail out early. - Callers check for vec::length <= param_max_fields_for_field_sensitive, make - sure this fails. */ - if (fieldstack->length () > (unsigned)param_max_fields_for_field_sensitive) - return false; - - for (field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field)) - if (TREE_CODE (field) == FIELD_DECL) - { - bool push = false; - unsigned HOST_WIDE_INT foff = bitpos_of_field (field); - tree field_type = TREE_TYPE (field); - - if (!var_can_have_subvars (field) - || TREE_CODE (field_type) == QUAL_UNION_TYPE - || TREE_CODE (field_type) == UNION_TYPE) - push = true; - else if (!push_fields_onto_fieldstack - (field_type, fieldstack, offset + foff) - && (DECL_SIZE (field) - && !integer_zerop (DECL_SIZE (field)))) - /* Empty structures may have actual size, like in C++. So - see if we didn't push any subfields and the size is - nonzero, push the field onto the stack. */ - push = true; - - if (push) - { - fieldoff_s *pair = NULL; - bool has_unknown_size = false; - bool must_have_pointers_p; - - if (!fieldstack->is_empty ()) - pair = &fieldstack->last (); - - /* If there isn't anything at offset zero, create sth. */ - if (!pair - && offset + foff != 0) - { - fieldoff_s e - = {0, offset + foff, false, false, true, false, NULL_TREE}; - pair = fieldstack->safe_push (e); - } - - if (!DECL_SIZE (field) - || !tree_fits_uhwi_p (DECL_SIZE (field))) - has_unknown_size = true; - - /* If adjacent fields do not contain pointers merge them. */ - must_have_pointers_p = field_must_have_pointers (field); - if (pair - && !has_unknown_size - && !must_have_pointers_p - && !pair->must_have_pointers - && !pair->has_unknown_size - && pair->offset + pair->size == offset + foff) - { - pair->size += tree_to_uhwi (DECL_SIZE (field)); - } - else - { - fieldoff_s e; - e.offset = offset + foff; - e.has_unknown_size = has_unknown_size; - if (!has_unknown_size) - e.size = tree_to_uhwi (DECL_SIZE (field)); - else - e.size = -1; - e.must_have_pointers = must_have_pointers_p; - e.may_have_pointers = true; - e.only_restrict_pointers - = (!has_unknown_size - && POINTER_TYPE_P (field_type) - && TYPE_RESTRICT (field_type)); - if (e.only_restrict_pointers) - e.restrict_pointed_type = TREE_TYPE (field_type); - fieldstack->safe_push (e); - } - } - - empty_p = false; - } - - return !empty_p; -} - -/* Count the number of arguments DECL has, and set IS_VARARGS to true - if it is a varargs function. */ - -static unsigned int -count_num_arguments (tree decl, bool *is_varargs) -{ - unsigned int num = 0; - tree t; - - /* Capture named arguments for K&R functions. They do not - have a prototype and thus no TYPE_ARG_TYPES. */ - for (t = DECL_ARGUMENTS (decl); t; t = DECL_CHAIN (t)) - ++num; - - /* Check if the function has variadic arguments. */ - for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t)) - if (TREE_VALUE (t) == void_type_node) - break; - if (!t) - *is_varargs = true; - - return num; -} - -/* Creation function node for DECL, using NAME, and return the index - of the variable we've created for the function. If NONLOCAL_p, create - initial constraints. */ - -static varinfo_t -create_function_info_for (tree decl, const char *name, bool add_id, - bool nonlocal_p) -{ - struct function *fn = DECL_STRUCT_FUNCTION (decl); - varinfo_t vi, prev_vi; - tree arg; - unsigned int i; - bool is_varargs = false; - unsigned int num_args = count_num_arguments (decl, &is_varargs); - - /* Create the variable info. */ - - vi = new_var_info (decl, name, add_id); - vi->offset = 0; - vi->size = 1; - vi->fullsize = fi_parm_base + num_args; - vi->is_fn_info = 1; - vi->may_have_pointers = false; - if (is_varargs) - vi->fullsize = ~0; - insert_vi_for_tree (vi->decl, vi); - - prev_vi = vi; - - /* Create a variable for things the function clobbers and one for - things the function uses. */ - { - varinfo_t clobbervi, usevi; - const char *newname; - char *tempname; - - tempname = xasprintf ("%s.clobber", name); - newname = ggc_strdup (tempname); - free (tempname); - - clobbervi = new_var_info (NULL, newname, false); - clobbervi->offset = fi_clobbers; - clobbervi->size = 1; - clobbervi->fullsize = vi->fullsize; - clobbervi->is_full_var = true; - clobbervi->is_global_var = false; - clobbervi->is_reg_var = true; - - gcc_assert (prev_vi->offset < clobbervi->offset); - prev_vi->next = clobbervi->id; - prev_vi = clobbervi; - - tempname = xasprintf ("%s.use", name); - newname = ggc_strdup (tempname); - free (tempname); - - usevi = new_var_info (NULL, newname, false); - usevi->offset = fi_uses; - usevi->size = 1; - usevi->fullsize = vi->fullsize; - usevi->is_full_var = true; - usevi->is_global_var = false; - usevi->is_reg_var = true; - - gcc_assert (prev_vi->offset < usevi->offset); - prev_vi->next = usevi->id; - prev_vi = usevi; - } - - /* And one for the static chain. */ - if (fn->static_chain_decl != NULL_TREE) - { - varinfo_t chainvi; - const char *newname; - char *tempname; - - tempname = xasprintf ("%s.chain", name); - newname = ggc_strdup (tempname); - free (tempname); - - chainvi = new_var_info (fn->static_chain_decl, newname, false); - chainvi->offset = fi_static_chain; - chainvi->size = 1; - chainvi->fullsize = vi->fullsize; - chainvi->is_full_var = true; - chainvi->is_global_var = false; - - insert_vi_for_tree (fn->static_chain_decl, chainvi); - - if (nonlocal_p - && chainvi->may_have_pointers) - make_constraint_from (chainvi, nonlocal_id); - - gcc_assert (prev_vi->offset < chainvi->offset); - prev_vi->next = chainvi->id; - prev_vi = chainvi; - } - - /* Create a variable for the return var. */ - if (DECL_RESULT (decl) != NULL - || !VOID_TYPE_P (TREE_TYPE (TREE_TYPE (decl)))) - { - varinfo_t resultvi; - const char *newname; - char *tempname; - tree resultdecl = decl; - - if (DECL_RESULT (decl)) - resultdecl = DECL_RESULT (decl); - - tempname = xasprintf ("%s.result", name); - newname = ggc_strdup (tempname); - free (tempname); - - resultvi = new_var_info (resultdecl, newname, false); - resultvi->offset = fi_result; - resultvi->size = 1; - resultvi->fullsize = vi->fullsize; - resultvi->is_full_var = true; - if (DECL_RESULT (decl)) - resultvi->may_have_pointers = true; - - if (DECL_RESULT (decl)) - insert_vi_for_tree (DECL_RESULT (decl), resultvi); - - if (nonlocal_p - && DECL_RESULT (decl) - && DECL_BY_REFERENCE (DECL_RESULT (decl))) - make_constraint_from (resultvi, nonlocal_id); - - gcc_assert (prev_vi->offset < resultvi->offset); - prev_vi->next = resultvi->id; - prev_vi = resultvi; - } - - /* We also need to make function return values escape. Nothing - escapes by returning from main though. */ - if (nonlocal_p - && !MAIN_NAME_P (DECL_NAME (decl))) - { - varinfo_t fi, rvi; - fi = lookup_vi_for_tree (decl); - rvi = first_vi_for_offset (fi, fi_result); - if (rvi && rvi->offset == fi_result) - make_copy_constraint (get_varinfo (escaped_id), rvi->id); - } - - /* Set up variables for each argument. */ - arg = DECL_ARGUMENTS (decl); - for (i = 0; i < num_args; i++) - { - varinfo_t argvi; - const char *newname; - char *tempname; - tree argdecl = decl; - - if (arg) - argdecl = arg; - - tempname = xasprintf ("%s.arg%d", name, i); - newname = ggc_strdup (tempname); - free (tempname); - - argvi = new_var_info (argdecl, newname, false); - argvi->offset = fi_parm_base + i; - argvi->size = 1; - argvi->is_full_var = true; - argvi->fullsize = vi->fullsize; - if (arg) - argvi->may_have_pointers = true; - - if (arg) - insert_vi_for_tree (arg, argvi); - - if (nonlocal_p - && argvi->may_have_pointers) - make_constraint_from (argvi, nonlocal_id); - - gcc_assert (prev_vi->offset < argvi->offset); - prev_vi->next = argvi->id; - prev_vi = argvi; - if (arg) - arg = DECL_CHAIN (arg); - } - - /* Add one representative for all further args. */ - if (is_varargs) - { - varinfo_t argvi; - const char *newname; - char *tempname; - tree decl; - - tempname = xasprintf ("%s.varargs", name); - newname = ggc_strdup (tempname); - free (tempname); - - /* We need sth that can be pointed to for va_start. */ - decl = build_fake_var_decl (ptr_type_node); - - argvi = new_var_info (decl, newname, false); - argvi->offset = fi_parm_base + num_args; - argvi->size = ~0; - argvi->is_full_var = true; - argvi->is_heap_var = true; - argvi->fullsize = vi->fullsize; - - if (nonlocal_p - && argvi->may_have_pointers) - make_constraint_from (argvi, nonlocal_id); - - gcc_assert (prev_vi->offset < argvi->offset); - prev_vi->next = argvi->id; - } - - return vi; + stats.num_avoided_edges); } +/* Dump points-to information to OUTFILE. */ -/* Return true if FIELDSTACK contains fields that overlap. - FIELDSTACK is assumed to be sorted by offset. */ - -static bool -check_for_overlaps (const vec &fieldstack) +void +dump_sa_points_to_info (FILE *outfile) { - fieldoff_s *fo = NULL; - unsigned int i; - HOST_WIDE_INT lastoffset = -1; + fprintf (outfile, "\nPoints-to sets\n\n"); - FOR_EACH_VEC_ELT (fieldstack, i, fo) + for (unsigned i = 1; i < varmap.length (); i++) { - if (fo->offset == lastoffset) - return true; - lastoffset = fo->offset; + varinfo_t vi = get_varinfo (i); + if (!vi->may_have_pointers) + continue; + dump_solution_for_var (outfile, i); } - return false; } -/* Create a varinfo structure for NAME and DECL, and add it to VARMAP. - This will also create any varinfo structures necessary for fields - of DECL. DECL is a function parameter if HANDLE_PARAM is set. - HANDLED_STRUCT_TYPE is used to register struct types reached by following - restrict pointers. This is needed to prevent infinite recursion. - If ADD_RESTRICT, pretend that the pointer NAME is restrict even if DECL - does not advertise it. */ - -static varinfo_t -create_variable_info_for_1 (tree decl, const char *name, bool add_id, - bool handle_param, bitmap handled_struct_type, - bool add_restrict = false) -{ - varinfo_t vi, newvi; - tree decl_type = TREE_TYPE (decl); - tree declsize = DECL_P (decl) ? DECL_SIZE (decl) : TYPE_SIZE (decl_type); - auto_vec fieldstack; - fieldoff_s *fo; - unsigned int i; - if (!declsize - || !tree_fits_uhwi_p (declsize)) - { - vi = new_var_info (decl, name, add_id); - vi->offset = 0; - vi->size = ~0; - vi->fullsize = ~0; - vi->is_unknown_size_var = true; - vi->is_full_var = true; - vi->may_have_pointers = true; - return vi; - } +/* Debug points-to information to stderr. */ - /* Collect field information. */ - if (use_field_sensitive - && var_can_have_subvars (decl) - /* ??? Force us to not use subfields for globals in IPA mode. - Else we'd have to parse arbitrary initializers. */ - && !(in_ipa_mode - && is_global_var (decl))) - { - fieldoff_s *fo = NULL; - bool notokay = false; - unsigned int i; +DEBUG_FUNCTION void +debug_sa_points_to_info (void) +{ + dump_sa_points_to_info (stderr); +} - push_fields_onto_fieldstack (decl_type, &fieldstack, 0); +/* Dump varinfo VI to FILE. */ - for (i = 0; !notokay && fieldstack.iterate (i, &fo); i++) - if (fo->has_unknown_size - || fo->offset < 0) - { - notokay = true; - break; - } +void +dump_varinfo (FILE *file, varinfo_t vi) +{ + if (vi == NULL) + return; - /* We can't sort them if we have a field with a variable sized type, - which will make notokay = true. In that case, we are going to return - without creating varinfos for the fields anyway, so sorting them is a - waste to boot. */ - if (!notokay) - { - sort_fieldstack (fieldstack); - /* Due to some C++ FE issues, like PR 22488, we might end up - what appear to be overlapping fields even though they, - in reality, do not overlap. Until the C++ FE is fixed, - we will simply disable field-sensitivity for these cases. */ - notokay = check_for_overlaps (fieldstack); - } + fprintf (file, "%u: %s\n", vi->id, vi->name); - if (notokay) - fieldstack.release (); - } + const char *sep = " "; + if (vi->is_artificial_var) + fprintf (file, "%sartificial", sep); + if (vi->is_special_var) + fprintf (file, "%sspecial", sep); + if (vi->is_unknown_size_var) + fprintf (file, "%sunknown-size", sep); + if (vi->is_full_var) + fprintf (file, "%sfull", sep); + if (vi->is_heap_var) + fprintf (file, "%sheap", sep); + if (vi->may_have_pointers) + fprintf (file, "%smay-have-pointers", sep); + if (vi->only_restrict_pointers) + fprintf (file, "%sonly-restrict-pointers", sep); + if (vi->is_restrict_var) + fprintf (file, "%sis-restrict-var", sep); + if (vi->is_global_var) + fprintf (file, "%sglobal", sep); + if (vi->is_ipa_escape_point) + fprintf (file, "%sipa-escape-point", sep); + if (vi->is_fn_info) + fprintf (file, "%sfn-info", sep); + if (vi->ruid) + fprintf (file, "%srestrict-uid:%u", sep, vi->ruid); + if (vi->next) + fprintf (file, "%snext:%u", sep, vi->next); + if (vi->head != vi->id) + fprintf (file, "%shead:%u", sep, vi->head); + if (vi->offset) + fprintf (file, "%soffset:" HOST_WIDE_INT_PRINT_DEC, sep, vi->offset); + if (vi->size != ~HOST_WIDE_INT_0U) + fprintf (file, "%ssize:" HOST_WIDE_INT_PRINT_DEC, sep, vi->size); + if (vi->fullsize != ~HOST_WIDE_INT_0U && vi->fullsize != vi->size) + fprintf (file, "%sfullsize:" HOST_WIDE_INT_PRINT_DEC, sep, + vi->fullsize); + fprintf (file, "\n"); - /* If we didn't end up collecting sub-variables create a full - variable for the decl. */ - if (fieldstack.length () == 0 - || fieldstack.length () > (unsigned)param_max_fields_for_field_sensitive) + if (vi->solution && !bitmap_empty_p (vi->solution)) { - vi = new_var_info (decl, name, add_id); - vi->offset = 0; - vi->may_have_pointers = true; - vi->fullsize = tree_to_uhwi (declsize); - vi->size = vi->fullsize; - vi->is_full_var = true; - if (POINTER_TYPE_P (decl_type) - && (TYPE_RESTRICT (decl_type) || add_restrict)) - vi->only_restrict_pointers = 1; - if (vi->only_restrict_pointers - && !type_contains_placeholder_p (TREE_TYPE (decl_type)) - && handle_param - && !bitmap_bit_p (handled_struct_type, - TYPE_UID (TREE_TYPE (decl_type)))) - { - varinfo_t rvi; - tree heapvar = build_fake_var_decl (TREE_TYPE (decl_type)); - DECL_EXTERNAL (heapvar) = 1; - if (var_can_have_subvars (heapvar)) - bitmap_set_bit (handled_struct_type, - TYPE_UID (TREE_TYPE (decl_type))); - rvi = create_variable_info_for_1 (heapvar, "PARM_NOALIAS", true, - true, handled_struct_type); - if (var_can_have_subvars (heapvar)) - bitmap_clear_bit (handled_struct_type, - TYPE_UID (TREE_TYPE (decl_type))); - rvi->is_restrict_var = 1; - insert_vi_for_tree (heapvar, rvi); - make_constraint_from (vi, rvi->id); - make_param_constraints (rvi); - } - fieldstack.release (); - return vi; + bitmap_iterator bi; + unsigned i; + fprintf (file, " solution: {"); + EXECUTE_IF_SET_IN_BITMAP (vi->solution, 0, i, bi) + fprintf (file, " %u", i); + fprintf (file, " }\n"); } - vi = new_var_info (decl, name, add_id); - vi->fullsize = tree_to_uhwi (declsize); - if (fieldstack.length () == 1) - vi->is_full_var = true; - for (i = 0, newvi = vi; - fieldstack.iterate (i, &fo); - ++i, newvi = vi_next (newvi)) + if (vi->oldsolution && !bitmap_empty_p (vi->oldsolution) + && !bitmap_equal_p (vi->solution, vi->oldsolution)) { - const char *newname = NULL; - char *tempname; - - if (dump_file) - { - if (fieldstack.length () != 1) - { - tempname - = xasprintf ("%s." HOST_WIDE_INT_PRINT_DEC - "+" HOST_WIDE_INT_PRINT_DEC, name, - fo->offset, fo->size); - newname = ggc_strdup (tempname); - free (tempname); - } - } - else - newname = "NULL"; - - if (newname) - newvi->name = newname; - newvi->offset = fo->offset; - newvi->size = fo->size; - newvi->fullsize = vi->fullsize; - newvi->may_have_pointers = fo->may_have_pointers; - newvi->only_restrict_pointers = fo->only_restrict_pointers; - if (handle_param - && newvi->only_restrict_pointers - && !type_contains_placeholder_p (fo->restrict_pointed_type) - && !bitmap_bit_p (handled_struct_type, - TYPE_UID (fo->restrict_pointed_type))) - { - varinfo_t rvi; - tree heapvar = build_fake_var_decl (fo->restrict_pointed_type); - DECL_EXTERNAL (heapvar) = 1; - if (var_can_have_subvars (heapvar)) - bitmap_set_bit (handled_struct_type, - TYPE_UID (fo->restrict_pointed_type)); - rvi = create_variable_info_for_1 (heapvar, "PARM_NOALIAS", true, - true, handled_struct_type); - if (var_can_have_subvars (heapvar)) - bitmap_clear_bit (handled_struct_type, - TYPE_UID (fo->restrict_pointed_type)); - rvi->is_restrict_var = 1; - insert_vi_for_tree (heapvar, rvi); - make_constraint_from (newvi, rvi->id); - make_param_constraints (rvi); - } - if (i + 1 < fieldstack.length ()) - { - varinfo_t tem = new_var_info (decl, name, false); - newvi->next = tem->id; - tem->head = vi->id; - } + bitmap_iterator bi; + unsigned i; + fprintf (file, " oldsolution: {"); + EXECUTE_IF_SET_IN_BITMAP (vi->oldsolution, 0, i, bi) + fprintf (file, " %u", i); + fprintf (file, " }\n"); } - - return vi; } -static unsigned int -create_variable_info_for (tree decl, const char *name, bool add_id) +/* Dump varinfo VI to stderr. */ + +DEBUG_FUNCTION void +debug_varinfo (varinfo_t vi) { - /* First see if we are dealing with an ifunc resolver call and - assiociate that with a call to the resolver function result. */ - cgraph_node *node; - if (in_ipa_mode - && TREE_CODE (decl) == FUNCTION_DECL - && (node = cgraph_node::get (decl)) - && node->ifunc_resolver) - { - varinfo_t fi = get_vi_for_tree (node->get_alias_target ()->decl); - constraint_expr rhs - = get_function_part_constraint (fi, fi_result); - fi = new_var_info (NULL_TREE, "ifuncres", true); - fi->is_reg_var = true; - constraint_expr lhs; - lhs.type = SCALAR; - lhs.var = fi->id; - lhs.offset = 0; - process_constraint (new_constraint (lhs, rhs)); - insert_vi_for_tree (decl, fi); - return fi->id; - } + dump_varinfo (stderr, vi); +} - varinfo_t vi = create_variable_info_for_1 (decl, name, add_id, false, NULL); - unsigned int id = vi->id; +/* Dump varmap to FILE. */ - insert_vi_for_tree (decl, vi); +void +dump_varmap (FILE *file) +{ + if (varmap.length () == 0) + return; - if (!VAR_P (decl)) - return id; + fprintf (file, "variables:\n"); - /* Create initial constraints for globals. */ - for (; vi; vi = vi_next (vi)) + for (unsigned int i = 0; i < varmap.length (); ++i) { - if (!vi->may_have_pointers - || !vi->is_global_var) - continue; - - /* Mark global restrict qualified pointers. */ - if ((POINTER_TYPE_P (TREE_TYPE (decl)) - && TYPE_RESTRICT (TREE_TYPE (decl))) - || vi->only_restrict_pointers) - { - varinfo_t rvi - = make_constraint_from_global_restrict (vi, "GLOBAL_RESTRICT", - true); - /* ??? For now exclude reads from globals as restrict sources - if those are not (indirectly) from incoming parameters. */ - rvi->is_restrict_var = false; - continue; - } - - /* In non-IPA mode the initializer from nonlocal is all we need. */ - if (!in_ipa_mode - || DECL_HARD_REGISTER (decl)) - make_copy_constraint (vi, nonlocal_id); - - /* In IPA mode parse the initializer and generate proper constraints - for it. */ - else - { - varpool_node *vnode = varpool_node::get (decl); - - /* For escaped variables initialize them from nonlocal. */ - if (!vnode || !vnode->all_refs_explicit_p ()) - make_copy_constraint (vi, nonlocal_id); - - /* While we can in theory walk references for the varpool - node that does not cover zero-initialization or references - to the constant pool. */ - if (DECL_INITIAL (decl)) - { - auto_vec rhsc; - struct constraint_expr lhs, *rhsp; - unsigned i; - lhs.var = vi->id; - lhs.offset = 0; - lhs.type = SCALAR; - get_constraint_for (DECL_INITIAL (decl), &rhsc); - FOR_EACH_VEC_ELT (rhsc, i, rhsp) - process_constraint (new_constraint (lhs, *rhsp)); - /* If this is a variable that escapes from the unit - the initializer escapes as well. */ - if (!vnode || !vnode->all_refs_explicit_p ()) - { - lhs.var = escaped_id; - lhs.offset = 0; - lhs.type = SCALAR; - FOR_EACH_VEC_ELT (rhsc, i, rhsp) - process_constraint (new_constraint (lhs, *rhsp)); - } - } - } + varinfo_t vi = get_varinfo (i); + dump_varinfo (file, vi); } - return id; + fprintf (file, "\n"); } -/* Register the constraints for function parameter related VI. */ +/* Dump varmap to stderr. */ -static void -make_param_constraints (varinfo_t vi) +DEBUG_FUNCTION void +debug_varmap (void) { - for (; vi; vi = vi_next (vi)) - { - if (vi->only_restrict_pointers) - ; - else if (vi->may_have_pointers) - make_constraint_from (vi, nonlocal_id); - - if (vi->is_full_var) - break; - } + dump_varmap (stderr); } -/* Create varinfo structures for all of the variables in the - function for intraprocedural mode. */ - -static void -intra_create_variable_infos (struct function *fn) -{ - tree t; - bitmap handled_struct_type = NULL; - bool this_parm_in_ctor = DECL_CXX_CONSTRUCTOR_P (fn->decl); - - /* For each incoming pointer argument arg, create the constraint ARG - = NONLOCAL or a dummy variable if it is a restrict qualified - passed-by-reference argument. */ - for (t = DECL_ARGUMENTS (fn->decl); t; t = DECL_CHAIN (t)) - { - if (handled_struct_type == NULL) - handled_struct_type = BITMAP_ALLOC (NULL); - - varinfo_t p - = create_variable_info_for_1 (t, alias_get_name (t), false, true, - handled_struct_type, this_parm_in_ctor); - insert_vi_for_tree (t, p); - - make_param_constraints (p); - - this_parm_in_ctor = false; - } - - if (handled_struct_type != NULL) - BITMAP_FREE (handled_struct_type); - - /* Add a constraint for a result decl that is passed by reference. */ - if (DECL_RESULT (fn->decl) - && DECL_BY_REFERENCE (DECL_RESULT (fn->decl))) - { - varinfo_t p, result_vi = get_vi_for_tree (DECL_RESULT (fn->decl)); - - for (p = result_vi; p; p = vi_next (p)) - make_constraint_from (p, nonlocal_id); - } - - /* Add a constraint for the incoming static chain parameter. */ - if (fn->static_chain_decl != NULL_TREE) - { - varinfo_t p, chain_vi = get_vi_for_tree (fn->static_chain_decl); +} // namespace pointer_analysis - for (p = chain_vi; p; p = vi_next (p)) - make_constraint_from (p, nonlocal_id); - } -} /* Structure used to put solution bitmaps in a hashtable so they can be shared among variables with the same points-to set. */ @@ -4398,7 +723,6 @@ shared_bitmap_lookup (bitmap pt_vars) return (*slot)->pt_vars; } - /* Add a bitmap to the shared bitmap hashtable. */ static void @@ -4415,7 +739,6 @@ shared_bitmap_add (bitmap pt_vars) *slot = sbi; } - /* Set bits in INTO corresponding to the variable uids in solution set FROM. */ static void @@ -4914,197 +1237,6 @@ pt_solutions_intersect (struct pt_solution *pt1, struct pt_solution *pt2) } -/* Initialize the always-existing constraint variables for NULL - ANYTHING, READONLY, and INTEGER */ - -static void -init_base_vars (void) -{ - struct constraint_expr lhs, rhs; - varinfo_t var_anything; - varinfo_t var_nothing; - varinfo_t var_string; - varinfo_t var_escaped; - varinfo_t var_nonlocal; - varinfo_t var_escaped_return; - varinfo_t var_storedanything; - varinfo_t var_integer; - - /* Variable ID zero is reserved and should be NULL. */ - varmap.safe_push (NULL); - - /* Create the NULL variable, used to represent that a variable points - to NULL. */ - var_nothing = new_var_info (NULL_TREE, "NULL", false); - gcc_assert (var_nothing->id == nothing_id); - var_nothing->is_artificial_var = 1; - var_nothing->offset = 0; - var_nothing->size = ~0; - var_nothing->fullsize = ~0; - var_nothing->is_special_var = 1; - var_nothing->may_have_pointers = 0; - var_nothing->is_global_var = 0; - - /* Create the ANYTHING variable, used to represent that a variable - points to some unknown piece of memory. */ - var_anything = new_var_info (NULL_TREE, "ANYTHING", false); - gcc_assert (var_anything->id == anything_id); - var_anything->is_artificial_var = 1; - var_anything->size = ~0; - var_anything->offset = 0; - var_anything->fullsize = ~0; - var_anything->is_special_var = 1; - - /* Anything points to anything. This makes deref constraints just - work in the presence of linked list and other p = *p type loops, - by saying that *ANYTHING = ANYTHING. */ - lhs.type = SCALAR; - lhs.var = anything_id; - lhs.offset = 0; - rhs.type = ADDRESSOF; - rhs.var = anything_id; - rhs.offset = 0; - - /* This specifically does not use process_constraint because - process_constraint ignores all anything = anything constraints, since all - but this one are redundant. */ - constraints.safe_push (new_constraint (lhs, rhs)); - - /* Create the STRING variable, used to represent that a variable - points to a string literal. String literals don't contain - pointers so STRING doesn't point to anything. */ - var_string = new_var_info (NULL_TREE, "STRING", false); - gcc_assert (var_string->id == string_id); - var_string->is_artificial_var = 1; - var_string->offset = 0; - var_string->size = ~0; - var_string->fullsize = ~0; - var_string->is_special_var = 1; - var_string->may_have_pointers = 0; - - /* Create the ESCAPED variable, used to represent the set of escaped - memory. */ - var_escaped = new_var_info (NULL_TREE, "ESCAPED", false); - gcc_assert (var_escaped->id == escaped_id); - var_escaped->is_artificial_var = 1; - var_escaped->offset = 0; - var_escaped->size = ~0; - var_escaped->fullsize = ~0; - var_escaped->is_special_var = 0; - - /* Create the NONLOCAL variable, used to represent the set of nonlocal - memory. */ - var_nonlocal = new_var_info (NULL_TREE, "NONLOCAL", false); - gcc_assert (var_nonlocal->id == nonlocal_id); - var_nonlocal->is_artificial_var = 1; - var_nonlocal->offset = 0; - var_nonlocal->size = ~0; - var_nonlocal->fullsize = ~0; - var_nonlocal->is_special_var = 1; - - /* Create the ESCAPED_RETURN variable, used to represent the set of escaped - memory via a regular return stmt. */ - var_escaped_return = new_var_info (NULL_TREE, "ESCAPED_RETURN", false); - gcc_assert (var_escaped_return->id == escaped_return_id); - var_escaped_return->is_artificial_var = 1; - var_escaped_return->offset = 0; - var_escaped_return->size = ~0; - var_escaped_return->fullsize = ~0; - var_escaped_return->is_special_var = 0; - - /* ESCAPED = *ESCAPED, because escaped is may-deref'd at calls, etc. */ - lhs.type = SCALAR; - lhs.var = escaped_id; - lhs.offset = 0; - rhs.type = DEREF; - rhs.var = escaped_id; - rhs.offset = 0; - process_constraint (new_constraint (lhs, rhs)); - - /* ESCAPED = ESCAPED + UNKNOWN_OFFSET, because if a sub-field escapes the - whole variable escapes. */ - lhs.type = SCALAR; - lhs.var = escaped_id; - lhs.offset = 0; - rhs.type = SCALAR; - rhs.var = escaped_id; - rhs.offset = UNKNOWN_OFFSET; - process_constraint (new_constraint (lhs, rhs)); - - /* *ESCAPED = NONLOCAL. This is true because we have to assume - everything pointed to by escaped points to what global memory can - point to. */ - lhs.type = DEREF; - lhs.var = escaped_id; - lhs.offset = 0; - rhs.type = SCALAR; - rhs.var = nonlocal_id; - rhs.offset = 0; - process_constraint (new_constraint (lhs, rhs)); - - /* NONLOCAL = &NONLOCAL, NONLOCAL = &ESCAPED. This is true because - global memory may point to global memory and escaped memory. */ - lhs.type = SCALAR; - lhs.var = nonlocal_id; - lhs.offset = 0; - rhs.type = ADDRESSOF; - rhs.var = nonlocal_id; - rhs.offset = 0; - process_constraint (new_constraint (lhs, rhs)); - rhs.type = ADDRESSOF; - rhs.var = escaped_id; - rhs.offset = 0; - process_constraint (new_constraint (lhs, rhs)); - - /* Transitively close ESCAPED_RETURN. - ESCAPED_RETURN = ESCAPED_RETURN + UNKNOWN_OFFSET - ESCAPED_RETURN = *ESCAPED_RETURN. */ - lhs.type = SCALAR; - lhs.var = escaped_return_id; - lhs.offset = 0; - rhs.type = SCALAR; - rhs.var = escaped_return_id; - rhs.offset = UNKNOWN_OFFSET; - process_constraint (new_constraint (lhs, rhs)); - lhs.type = SCALAR; - lhs.var = escaped_return_id; - lhs.offset = 0; - rhs.type = DEREF; - rhs.var = escaped_return_id; - rhs.offset = 0; - process_constraint (new_constraint (lhs, rhs)); - - /* Create the STOREDANYTHING variable, used to represent the set of - variables stored to *ANYTHING. */ - var_storedanything = new_var_info (NULL_TREE, "STOREDANYTHING", false); - gcc_assert (var_storedanything->id == storedanything_id); - var_storedanything->is_artificial_var = 1; - var_storedanything->offset = 0; - var_storedanything->size = ~0; - var_storedanything->fullsize = ~0; - var_storedanything->is_special_var = 0; - - /* Create the INTEGER variable, used to represent that a variable points - to what an INTEGER "points to". */ - var_integer = new_var_info (NULL_TREE, "INTEGER", false); - gcc_assert (var_integer->id == integer_id); - var_integer->is_artificial_var = 1; - var_integer->size = ~0; - var_integer->fullsize = ~0; - var_integer->offset = 0; - var_integer->is_special_var = 1; - - /* INTEGER = ANYTHING, because we don't know where a dereference of - a random integer will point to. */ - lhs.type = SCALAR; - lhs.var = integer_id; - lhs.offset = 0; - rhs.type = ADDRESSOF; - rhs.var = anything_id; - rhs.offset = 0; - process_constraint (new_constraint (lhs, rhs)); -} - /* Initialize things necessary to perform PTA. */ static void @@ -5117,17 +1249,14 @@ init_alias_vars (void) constraints.create (8); varmap.create (8); - vi_for_tree = new hash_map; - call_stmt_vars = new hash_map; memset (&stats, 0, sizeof (stats)); shared_bitmap_table = new hash_table (511); - init_base_vars (); - - gcc_obstack_init (&fake_var_decl_obstack); final_solutions = new hash_map; gcc_obstack_init (&final_solutions_obstack); + + init_constraint_builder (); } /* Create points-to sets for the current function. See the comments @@ -5143,34 +1272,7 @@ compute_points_to_sets (void) init_alias_vars (); - intra_create_variable_infos (cfun); - - /* Now walk all statements and build the constraint set. */ - FOR_EACH_BB_FN (bb, cfun) - { - for (gphi_iterator gsi = gsi_start_phis (bb); !gsi_end_p (gsi); - gsi_next (&gsi)) - { - gphi *phi = gsi.phi (); - - if (! virtual_operand_p (gimple_phi_result (phi))) - find_func_aliases (cfun, phi); - } - - for (gimple_stmt_iterator gsi = gsi_start_bb (bb); !gsi_end_p (gsi); - gsi_next (&gsi)) - { - gimple *stmt = gsi_stmt (gsi); - - find_func_aliases (cfun, stmt); - } - } - - if (dump_file && (dump_flags & TDF_DETAILS)) - { - fprintf (dump_file, "Points-to analysis\n\nConstraints:\n\n"); - dump_constraints (dump_file, 0); - } + intra_build_constraints (); /* From the constraints compute the points-to sets. */ solve_constraints (); @@ -5294,7 +1396,6 @@ compute_points_to_sets (void) timevar_pop (TV_TREE_PTA); } - /* Delete created points-to sets. */ static void @@ -5306,8 +1407,6 @@ delete_points_to_sets (void) fprintf (dump_file, "Points to sets created:%d\n", stats.points_to_sets_created); - delete vi_for_tree; - delete call_stmt_vars; bitmap_obstack_release (&pta_obstack); constraints.release (); @@ -5315,14 +1414,14 @@ delete_points_to_sets (void) varmap.release (); variable_info_pool.release (); - constraint_pool.release (); - - obstack_free (&fake_var_decl_obstack, NULL); delete final_solutions; obstack_free (&final_solutions_obstack, NULL); + + delete_constraint_builder (); } + struct vls_data { unsigned short clique; @@ -5580,6 +1679,7 @@ compute_dependence_clique (void) BITMAP_FREE (rvars); } + /* Compute points-to information for every SSA_NAME pointer in the current function and compute the transitive closure of escaped variables to re-initialize the call-clobber states of local variables. */ @@ -5705,53 +1805,12 @@ struct pt_solution ipa_escaped_pt = { true, false, false, false, false, false, false, false, false, false, false, NULL }; -/* Associate node with varinfo DATA. Worker for - cgraph_for_symbol_thunks_and_aliases. */ -static bool -associate_varinfo_to_alias (struct cgraph_node *node, void *data) -{ - if ((node->alias - || (node->thunk - && ! node->inlined_to)) - && node->analyzed - && !node->ifunc_resolver) - insert_vi_for_tree (node->decl, (varinfo_t)data); - return false; -} - -/* Compute whether node is refered to non-locally. Worker for - cgraph_for_symbol_thunks_and_aliases. */ -static bool -refered_from_nonlocal_fn (struct cgraph_node *node, void *data) -{ - bool *nonlocal_p = (bool *)data; - *nonlocal_p |= (node->used_from_other_partition - || DECL_EXTERNAL (node->decl) - || TREE_PUBLIC (node->decl) - || node->force_output - || lookup_attribute ("noipa", DECL_ATTRIBUTES (node->decl))); - return false; -} - -/* Same for varpool nodes. */ -static bool -refered_from_nonlocal_var (struct varpool_node *node, void *data) -{ - bool *nonlocal_p = (bool *)data; - *nonlocal_p |= (node->used_from_other_partition - || DECL_EXTERNAL (node->decl) - || TREE_PUBLIC (node->decl) - || node->force_output); - return false; -} /* Execute the driver for IPA PTA. */ static unsigned int ipa_pta_execute (void) { struct cgraph_node *node; - varpool_node *var; - unsigned int from = 0; in_ipa_mode = 1; @@ -5766,148 +1825,11 @@ ipa_pta_execute (void) if (dump_file && (dump_flags & TDF_DETAILS)) { fprintf (dump_file, "Generating generic constraints\n\n"); - dump_constraints (dump_file, from); - fprintf (dump_file, "\n"); - from = constraints.length (); - } - - /* Build the constraints. */ - FOR_EACH_DEFINED_FUNCTION (node) - { - varinfo_t vi; - /* Nodes without a body in this partition are not interesting. - Especially do not visit clones at this point for now - we - get duplicate decls there for inline clones at least. */ - if (!node->has_gimple_body_p () - || node->in_other_partition - || node->inlined_to) - continue; - node->get_body (); - - gcc_assert (!node->clone_of); - - /* For externally visible or attribute used annotated functions use - local constraints for their arguments. - For local functions we see all callers and thus do not need initial - constraints for parameters. */ - bool nonlocal_p = (node->used_from_other_partition - || DECL_EXTERNAL (node->decl) - || TREE_PUBLIC (node->decl) - || node->force_output - || lookup_attribute ("noipa", - DECL_ATTRIBUTES (node->decl))); - node->call_for_symbol_thunks_and_aliases (refered_from_nonlocal_fn, - &nonlocal_p, true); - - vi = create_function_info_for (node->decl, - alias_get_name (node->decl), false, - nonlocal_p); - if (dump_file && (dump_flags & TDF_DETAILS) - && from != constraints.length ()) - { - fprintf (dump_file, - "Generating initial constraints for %s", - node->dump_name ()); - if (DECL_ASSEMBLER_NAME_SET_P (node->decl)) - fprintf (dump_file, " (%s)", - IDENTIFIER_POINTER - (DECL_ASSEMBLER_NAME (node->decl))); - fprintf (dump_file, "\n\n"); - dump_constraints (dump_file, from); - fprintf (dump_file, "\n"); - - from = constraints.length (); - } - - node->call_for_symbol_thunks_and_aliases - (associate_varinfo_to_alias, vi, true); - } - - /* Create constraints for global variables and their initializers. */ - FOR_EACH_VARIABLE (var) - { - if (var->alias && var->analyzed) - continue; - - varinfo_t vi = get_vi_for_tree (var->decl); - - /* For the purpose of IPA PTA unit-local globals are not - escape points. */ - bool nonlocal_p = (DECL_EXTERNAL (var->decl) - || TREE_PUBLIC (var->decl) - || var->used_from_other_partition - || var->force_output); - var->call_for_symbol_and_aliases (refered_from_nonlocal_var, - &nonlocal_p, true); - if (nonlocal_p) - vi->is_ipa_escape_point = true; - } - - if (dump_file && (dump_flags & TDF_DETAILS) - && from != constraints.length ()) - { - fprintf (dump_file, - "Generating constraints for global initializers\n\n"); - dump_constraints (dump_file, from); + dump_constraints (dump_file, 0); fprintf (dump_file, "\n"); - from = constraints.length (); } - FOR_EACH_DEFINED_FUNCTION (node) - { - struct function *func; - basic_block bb; - - /* Nodes without a body in this partition are not interesting. */ - if (!node->has_gimple_body_p () - || node->in_other_partition - || node->clone_of) - continue; - - if (dump_file && (dump_flags & TDF_DETAILS)) - { - fprintf (dump_file, - "Generating constraints for %s", node->dump_name ()); - if (DECL_ASSEMBLER_NAME_SET_P (node->decl)) - fprintf (dump_file, " (%s)", - IDENTIFIER_POINTER - (DECL_ASSEMBLER_NAME (node->decl))); - fprintf (dump_file, "\n"); - } - - func = DECL_STRUCT_FUNCTION (node->decl); - gcc_assert (cfun == NULL); - - /* Build constriants for the function body. */ - FOR_EACH_BB_FN (bb, func) - { - for (gphi_iterator gsi = gsi_start_phis (bb); !gsi_end_p (gsi); - gsi_next (&gsi)) - { - gphi *phi = gsi.phi (); - - if (! virtual_operand_p (gimple_phi_result (phi))) - find_func_aliases (func, phi); - } - - for (gimple_stmt_iterator gsi = gsi_start_bb (bb); !gsi_end_p (gsi); - gsi_next (&gsi)) - { - gimple *stmt = gsi_stmt (gsi); - - find_func_aliases (func, stmt); - find_func_clobbers (func, stmt); - } - } - - if (dump_file && (dump_flags & TDF_DETAILS)) - { - fprintf (dump_file, "\n"); - dump_constraints (dump_file, from); - fprintf (dump_file, "\n"); - from = constraints.length (); - } - } + ipa_build_constraints (); /* From the constraints compute the points-to sets. */ solve_constraints (); diff --git a/gcc/tree-ssa-structalias.h b/gcc/tree-ssa-structalias.h index 4104bad3499f..1f5b28048b46 100644 --- a/gcc/tree-ssa-structalias.h +++ b/gcc/tree-ssa-structalias.h @@ -34,6 +34,15 @@ enum { nothing_id = 1, anything_id = 2, string_id = 3, escaped_id = 4, nonlocal_id = 5, escaped_return_id = 6, storedanything_id = 7, integer_id = 8 }; +/* In IPA mode there are varinfos for different aspects of reach + function designator. One for the points-to set of the return + value, one for the variables that are clobbered by the function, + one for its uses and one for each parameter (including a single + glob for remaining variadic arguments). */ + +enum { fi_clobbers = 1, fi_uses = 2, + fi_static_chain = 3, fi_result = 4, fi_parm_base = 5 }; + /* Use 0x8000... as special unknown offset. */ #define UNKNOWN_OFFSET HOST_WIDE_INT_MIN @@ -167,6 +176,9 @@ struct constraint_stats unsigned int points_to_sets_created; }; +extern bool use_field_sensitive; +extern int in_ipa_mode; + extern struct constraint_stats stats; extern bitmap_obstack pta_obstack; @@ -198,6 +210,9 @@ varinfo_t first_vi_for_offset (varinfo_t start, unsigned HOST_WIDE_INT offset); varinfo_t first_or_preceding_vi_for_offset (varinfo_t start, unsigned HOST_WIDE_INT offset); +void determine_global_memory_access (gcall *, bool *, bool *, bool *); +bool fndecl_maybe_in_other_partition (tree); +varinfo_t new_var_info (tree t, const char *name, bool add_id); void dump_constraint (FILE *file, constraint_t c); void dump_constraints (FILE *file, int from); void dump_solution_for_var (FILE *file, unsigned int var); diff --git a/gcc/tree-ssa-uninit.cc b/gcc/tree-ssa-uninit.cc index cb82001770e8..45e789c9563e 100644 --- a/gcc/tree-ssa-uninit.cc +++ b/gcc/tree-ssa-uninit.cc @@ -641,6 +641,7 @@ maybe_warn_operand (ao_ref &ref, gimple *stmt, tree lhs, tree rhs, return NULL_TREE; bool found_alloc = false; + bool found_clobber_deref_this = false; if (fentry_reached) { @@ -662,12 +663,30 @@ maybe_warn_operand (ao_ref &ref, gimple *stmt, tree lhs, tree rhs, tree fndecl = gimple_call_fndecl (def_stmt); const built_in_function fncode = DECL_FUNCTION_CODE (fndecl); if (fncode == BUILT_IN_ALLOCA - || fncode == BUILT_IN_ALLOCA_WITH_ALIGN - || fncode == BUILT_IN_MALLOC) + || fncode == BUILT_IN_ALLOCA_WITH_ALIGN + || fncode == BUILT_IN_MALLOC) found_alloc = true; break; } + /* The C++ FE for -flifetime-dse=2 marks this parameters + of certain constructors with "clobber *this" attribute. + Emit uninitialized warnings if we read from what this points + to. This is similar to access (write_only, 1) attribute, + except it is a -Wuninitialized warning rather than + -Wmaybe-uninitialized and doesn't talk about access + attribute. */ + if (SSA_NAME_IS_DEFAULT_DEF (base) + && POINTER_TYPE_P (TREE_TYPE (base)) + && SSA_NAME_VAR (base) + && TREE_CODE (SSA_NAME_VAR (base)) == PARM_DECL + && lookup_attribute ("clobber *this", + DECL_ATTRIBUTES (SSA_NAME_VAR (base)))) + { + found_clobber_deref_this = true; + break; + } + if (!is_gimple_assign (def_stmt)) break; @@ -702,7 +721,7 @@ maybe_warn_operand (ao_ref &ref, gimple *stmt, tree lhs, tree rhs, /* Do not warn if it can be initialized outside this function. If we did not reach function entry then we found killing clobbers on all paths to entry. */ - if (!found_alloc && fentry_reached) + if ((!found_alloc && !found_clobber_deref_this) && fentry_reached) { if (TREE_CODE (base) == SSA_NAME) { diff --git a/gcc/tree-vect-data-refs.cc b/gcc/tree-vect-data-refs.cc index a31ff93bbd3c..c7941108887e 100644 --- a/gcc/tree-vect-data-refs.cc +++ b/gcc/tree-vect-data-refs.cc @@ -6522,7 +6522,8 @@ vect_can_force_dr_alignment_p (const_tree decl, poly_uint64 alignment) alignment. If CHECK_ALIGNED_ACCESSES is TRUE, check if the access is supported even it is aligned, i.e., check if it is possible to vectorize it with different - alignment. If GS_INFO is passed we are dealing with a gather/scatter. */ + alignment. If IS_GATHER_SCATTER is true we are dealing with a + gather/scatter. */ enum dr_alignment_support vect_supportable_dr_alignment (vec_info *vinfo, dr_vec_info *dr_info, @@ -6610,7 +6611,7 @@ vect_supportable_dr_alignment (vec_info *vinfo, dr_vec_info *dr_info, } } */ - if (DR_IS_READ (dr)) + if (DR_IS_READ (dr) && !is_gather_scatter) { if (can_implement_p (vec_realign_load_optab, mode) && (!targetm.vectorize.builtin_mask_for_load @@ -6636,11 +6637,13 @@ vect_supportable_dr_alignment (vec_info *vinfo, dr_vec_info *dr_info, } } - bool is_packed = false; - tree type = TREE_TYPE (DR_REF (dr)); - if (misalignment == DR_MISALIGNMENT_UNKNOWN) - is_packed = not_size_aligned (DR_REF (dr)); - if (targetm.vectorize.support_vector_misalignment (mode, type, misalignment, + bool is_packed = not_size_aligned (DR_REF (dr)); + if (misalignment == DR_MISALIGNMENT_UNKNOWN + && is_gather_scatter) + misalignment = (get_object_alignment (DR_REF (dr)) + % (GET_MODE_BITSIZE (GET_MODE_INNER (mode)))) + / BITS_PER_UNIT; + if (targetm.vectorize.support_vector_misalignment (mode, misalignment, is_packed, is_gather_scatter)) return dr_unaligned_supported; diff --git a/gcc/tree-vect-loop-manip.cc b/gcc/tree-vect-loop-manip.cc index 7af70a51335f..20141dbc2e54 100644 --- a/gcc/tree-vect-loop-manip.cc +++ b/gcc/tree-vect-loop-manip.cc @@ -1459,21 +1459,6 @@ get_live_virtual_operand_on_edge (edge e) while (1); } -/* Remove the single succ/pred forwarder block BB. */ - -static void -vect_remove_forwarder (basic_block bb) -{ - edge pred = single_pred_edge (bb); - edge succ = single_succ_edge (bb); - basic_block to = single_succ (bb); - edge e = redirect_edge_and_branch (pred, to); - gcc_assert (e == pred); - copy_phi_arg_into_existing_phi (succ, e); - delete_basic_block (bb); - set_immediate_dominator (CDI_DOMINATORS, to, pred->src); -} - /* Given LOOP this function generates a new copy of it and puts it on E which is either the entry or exit of LOOP. If SCALAR_LOOP is non-NULL, assume LOOP and SCALAR_LOOP are equivalent and copy the @@ -1873,7 +1858,11 @@ slpeel_tree_duplicate_loop_to_edge_cfg (class loop *loop, edge loop_exit, /* And remove the non-necessary forwarder again. Keep the other one so we have a proper pre-header for the loop at the exit edge. */ - vect_remove_forwarder (preheader); + redirect_edge_pred (single_succ_edge (preheader), + single_pred (preheader)); + delete_basic_block (preheader); + set_immediate_dominator (CDI_DOMINATORS, scalar_loop->header, + loop_preheader_edge (scalar_loop)->src); /* Finally after wiring the new epilogue we need to update its main exit to the original function exit we recorded. Other exits are already @@ -1931,7 +1920,11 @@ slpeel_tree_duplicate_loop_to_edge_cfg (class loop *loop, edge loop_exit, if (scalar_loop != loop) { /* Remove the non-necessary forwarder of scalar_loop again. */ - vect_remove_forwarder (preheader); + redirect_edge_pred (single_succ_edge (preheader), + single_pred (preheader)); + delete_basic_block (preheader); + set_immediate_dominator (CDI_DOMINATORS, scalar_loop->header, + loop_preheader_edge (scalar_loop)->src); preheader = split_edge (loop_preheader_edge (loop)); entry_e = single_pred_edge (preheader); } @@ -1946,7 +1939,11 @@ slpeel_tree_duplicate_loop_to_edge_cfg (class loop *loop, edge loop_exit, /* And remove the non-necessary forwarder again. Keep the other one so we have a proper pre-header for the loop at the exit edge. */ - vect_remove_forwarder (new_preheader); + redirect_edge_pred (single_succ_edge (new_preheader), + single_pred (new_preheader)); + delete_basic_block (new_preheader); + set_immediate_dominator (CDI_DOMINATORS, new_loop->header, + loop_preheader_edge (new_loop)->src); /* Update dominators for multiple exits. */ if (multiple_exits_p) diff --git a/gcc/tree-vect-loop.cc b/gcc/tree-vect-loop.cc index 446c4e3b3db6..73398e58fdc9 100644 --- a/gcc/tree-vect-loop.cc +++ b/gcc/tree-vect-loop.cc @@ -2932,11 +2932,13 @@ vect_analyze_loop_1 (class loop *loop, vec_info_shared *shared, { delete loop_vinfo; loop_vinfo = unroll_vinfo; - LOOP_VINFO_USER_UNROLL (loop_vinfo) = user_unroll > 1; } else delete unroll_vinfo; } + + /* Record that we have honored a user unroll factor. */ + LOOP_VINFO_USER_UNROLL (loop_vinfo) = user_unroll > 1; } /* Remember the autodetected vector mode. */ @@ -6047,8 +6049,6 @@ vect_create_epilog_for_reduction (loop_vec_info loop_vinfo, Create: va = vop } */ - tree rhs; - if (dump_enabled_p ()) dump_printf_loc (MSG_NOTE, vect_location, "Reduce using vector shifts\n"); @@ -6067,7 +6067,6 @@ vect_create_epilog_for_reduction (loop_vec_info loop_vinfo, new_temp = gimple_build (&stmts, code, vectype1, new_name, new_temp); } - gsi_insert_seq_before (&exit_gsi, stmts, GSI_SAME_STMT); /* 2.4 Extract the final scalar result. Create: s_out3 = extract_field */ @@ -6076,12 +6075,11 @@ vect_create_epilog_for_reduction (loop_vec_info loop_vinfo, dump_printf_loc (MSG_NOTE, vect_location, "extract scalar result\n"); - rhs = build3 (BIT_FIELD_REF, scalar_type, new_temp, - bitsize, bitsize_zero_node); - epilog_stmt = gimple_build_assign (new_scalar_dest, rhs); - new_temp = make_ssa_name (new_scalar_dest, epilog_stmt); - gimple_assign_set_lhs (epilog_stmt, new_temp); - gsi_insert_before (&exit_gsi, epilog_stmt, GSI_SAME_STMT); + new_temp = gimple_build (&stmts, BIT_FIELD_REF, TREE_TYPE (vectype1), + new_temp, bitsize, bitsize_zero_node); + new_temp = gimple_build (&stmts, VIEW_CONVERT_EXPR, + scalar_type, new_temp); + gsi_insert_seq_before (&exit_gsi, stmts, GSI_SAME_STMT); scalar_results.safe_push (new_temp); } else @@ -6751,8 +6749,7 @@ vect_reduction_update_partial_vector_usage (loop_vec_info loop_vinfo, = get_masked_reduction_fn (reduc_fn, vectype_in); vec_loop_masks *masks = &LOOP_VINFO_MASKS (loop_vinfo); vec_loop_lens *lens = &LOOP_VINFO_LENS (loop_vinfo); - unsigned nvectors = vect_get_num_copies (loop_vinfo, slp_node, - vectype_in); + unsigned nvectors = vect_get_num_copies (loop_vinfo, slp_node); if (mask_reduc_fn == IFN_MASK_LEN_FOLD_LEFT_PLUS) vect_record_loop_len (loop_vinfo, lens, nvectors, vectype_in, 1); @@ -6855,12 +6852,12 @@ vectorizable_lane_reducing (loop_vec_info loop_vinfo, stmt_vec_info stmt_info, return false; } - tree vectype_in = SLP_TREE_VECTYPE (SLP_TREE_CHILDREN (slp_node)[0]); + slp_tree node_in = SLP_TREE_CHILDREN (slp_node)[0]; + tree vectype_in = SLP_TREE_VECTYPE (node_in); gcc_assert (vectype_in); /* Compute number of effective vector statements for costing. */ - unsigned int ncopies_for_cost = vect_get_num_copies (loop_vinfo, slp_node, - vectype_in); + unsigned int ncopies_for_cost = vect_get_num_copies (loop_vinfo, node_in); gcc_assert (ncopies_for_cost >= 1); if (vect_is_emulated_mixed_dot_prod (slp_node)) @@ -6886,7 +6883,7 @@ vectorizable_lane_reducing (loop_vec_info loop_vinfo, stmt_vec_info stmt_info, { enum tree_code code = gimple_assign_rhs_code (stmt); vect_reduction_update_partial_vector_usage (loop_vinfo, reduc_info, - slp_node, code, type, + node_in, code, type, vectype_in); } @@ -7176,6 +7173,15 @@ vectorizable_reduction (loop_vec_info loop_vinfo, tree vectype_out = SLP_TREE_VECTYPE (slp_for_stmt_info); VECT_REDUC_INFO_VECTYPE (reduc_info) = vectype_out; + /* We do not handle mask reductions correctly in the epilogue. */ + if (VECTOR_BOOLEAN_TYPE_P (vectype_out)) + { + if (dump_enabled_p ()) + dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location, + "mask reduction not supported.\n"); + return false; + } + gimple_match_op op; if (!gimple_extract_op (stmt_info->stmt, &op)) gcc_unreachable (); @@ -7186,7 +7192,10 @@ vectorizable_reduction (loop_vec_info loop_vinfo, return false; /* Do not try to vectorize bit-precision reductions. */ - if (!type_has_mode_precision_p (op.type)) + if (!type_has_mode_precision_p (op.type) + && op.code != BIT_AND_EXPR + && op.code != BIT_IOR_EXPR + && op.code != BIT_XOR_EXPR) return false; /* Lane-reducing ops also never can be used in a SLP reduction group @@ -7372,7 +7381,7 @@ vectorizable_reduction (loop_vec_info loop_vinfo, if (STMT_VINFO_LIVE_P (phi_info)) return false; - ncopies = SLP_TREE_NUMBER_OF_VEC_STMTS (slp_node); + ncopies = vect_get_num_copies (loop_vinfo, slp_node); gcc_assert (ncopies >= 1); @@ -7906,7 +7915,7 @@ vect_transform_reduction (loop_vec_info loop_vinfo, int reduc_index = SLP_TREE_REDUC_IDX (slp_node); tree vectype_in = SLP_TREE_VECTYPE (SLP_TREE_CHILDREN (slp_node)[0]); - vec_num = vect_get_num_copies (loop_vinfo, slp_node, vectype_in); + vec_num = vect_get_num_copies (loop_vinfo, SLP_TREE_CHILDREN (slp_node)[0]); code_helper code = canonicalize_code (op.code, op.type); internal_fn cond_fn = get_conditional_internal_fn (code, op.type); @@ -8085,7 +8094,7 @@ vect_transform_reduction (loop_vec_info loop_vinfo, gcc_assert (reduc_vectype_in); unsigned effec_reduc_ncopies - = vect_get_num_copies (loop_vinfo, slp_node, reduc_vectype_in); + = vect_get_num_copies (loop_vinfo, SLP_TREE_CHILDREN (slp_node)[0]); gcc_assert (effec_ncopies <= effec_reduc_ncopies); @@ -8245,7 +8254,7 @@ vect_transform_cycle_phi (loop_vec_info loop_vinfo, /* Leave the scalar phi in place. */ return true; - vec_num = SLP_TREE_NUMBER_OF_VEC_STMTS (slp_node); + vec_num = vect_get_num_copies (loop_vinfo, slp_node); /* Check whether we should use a single PHI node and accumulate vectors to one before the backedge. */ @@ -8500,7 +8509,7 @@ vect_transform_lc_phi (loop_vec_info loop_vinfo, /* Vectorizes PHIs. */ bool -vectorizable_phi (bb_vec_info, +vectorizable_phi (bb_vec_info vinfo, stmt_vec_info stmt_info, slp_tree slp_node, stmt_vector_for_cost *cost_vec) { @@ -8551,7 +8560,7 @@ vectorizable_phi (bb_vec_info, for the scalar and the vector PHIs. This avoids artificially favoring the vector path (but may pessimize it in some cases). */ if (gimple_phi_num_args (as_a (stmt_info->stmt)) > 1) - record_stmt_cost (cost_vec, SLP_TREE_NUMBER_OF_VEC_STMTS (slp_node), + record_stmt_cost (cost_vec, vect_get_num_copies (vinfo, slp_node), vector_stmt, slp_node, vectype, 0, vect_body); SLP_TREE_TYPE (slp_node) = phi_info_type; return true; @@ -8655,7 +8664,7 @@ vectorizable_recurr (loop_vec_info loop_vinfo, stmt_vec_info stmt_info, return false; tree vectype = SLP_TREE_VECTYPE (slp_node); - unsigned ncopies = SLP_TREE_NUMBER_OF_VEC_STMTS (slp_node); + unsigned ncopies = vect_get_num_copies (loop_vinfo, slp_node); poly_int64 nunits = TYPE_VECTOR_SUBPARTS (vectype); unsigned dist = SLP_TREE_LANES (slp_node); /* We need to be able to make progress with a single vector. */ @@ -9145,7 +9154,7 @@ vectorizable_nonlinear_induction (loop_vec_info loop_vinfo, gcc_assert (induction_type > vect_step_op_add); - ncopies = vect_get_num_copies (loop_vinfo, slp_node, vectype); + ncopies = vect_get_num_copies (loop_vinfo, slp_node); gcc_assert (ncopies >= 1); /* FORNOW. Only handle nonlinear induction in the same loop. */ @@ -9564,6 +9573,7 @@ vectorizable_induction (loop_vec_info loop_vinfo, } } + unsigned nvects = vect_get_num_copies (loop_vinfo, slp_node); if (cost_vec) /* transformation not required. */ { unsigned inside_cost = 0, prologue_cost = 0; @@ -9582,8 +9592,7 @@ vectorizable_induction (loop_vec_info loop_vinfo, return false; } /* loop cost for vec_loop. */ - inside_cost = record_stmt_cost (cost_vec, - SLP_TREE_NUMBER_OF_VEC_STMTS (slp_node), + inside_cost = record_stmt_cost (cost_vec, nvects, vector_stmt, slp_node, 0, vect_body); /* prologue cost for vec_init (if not nested) and step. */ prologue_cost = record_stmt_cost (cost_vec, 1 + !nested_in_vect_loop, @@ -9643,7 +9652,6 @@ vectorizable_induction (loop_vec_info loop_vinfo, } /* Now generate the IVs. */ - unsigned nvects = SLP_TREE_NUMBER_OF_VEC_STMTS (slp_node); gcc_assert (multiple_p (nunits * nvects, group_size)); unsigned nivs; unsigned HOST_WIDE_INT const_nunits; @@ -10029,10 +10037,12 @@ vectorizable_live_operation_1 (loop_vec_info loop_vinfo, basic_block exit_bb, { /* Emit: - SCALAR_RES = VEC_EXTRACT + SCALAR_RES = VEC_EXTRACT - where VEC_LHS is the vectorized live-out result and MASK is - the loop mask for the final iteration. */ + where VEC_LHS is the vectorized live-out result, LEN is the length of + the vector, BIAS is the load-store bias. The bias should not be used + at all since we are not using load/store operations, but LEN will be + REALLEN + BIAS, so subtract it to get to the correct position. */ gcc_assert (SLP_TREE_LANES (slp_node) == 1); gimple_seq tem = NULL; gimple_stmt_iterator gsi = gsi_last (tem); @@ -10041,18 +10051,18 @@ vectorizable_live_operation_1 (loop_vec_info loop_vinfo, basic_block exit_bb, 1, vectype, 0, 1); gimple_seq_add_seq (&stmts, tem); - /* BIAS - 1. */ + /* BIAS + 1. */ signed char biasval = LOOP_VINFO_PARTIAL_LOAD_STORE_BIAS (loop_vinfo); - tree bias_minus_one - = int_const_binop (MINUS_EXPR, + tree bias_plus_one + = int_const_binop (PLUS_EXPR, build_int_cst (TREE_TYPE (len), biasval), build_one_cst (TREE_TYPE (len))); - /* LAST_INDEX = LEN + (BIAS - 1). */ - tree last_index = gimple_build (&stmts, PLUS_EXPR, TREE_TYPE (len), - len, bias_minus_one); + /* LAST_INDEX = LEN - (BIAS + 1). */ + tree last_index = gimple_build (&stmts, MINUS_EXPR, TREE_TYPE (len), + len, bias_plus_one); - /* SCALAR_RES = VEC_EXTRACT . */ + /* SCALAR_RES = VEC_EXTRACT . */ tree scalar_res = gimple_build (&stmts, CFN_VEC_EXTRACT, TREE_TYPE (vectype), vec_lhs_phi, last_index); @@ -10191,7 +10201,7 @@ vectorizable_live_operation (vec_info *vinfo, stmt_vec_info stmt_info, all the slp vectors. Calculate which slp vector it is and the index within. */ int num_scalar = SLP_TREE_LANES (slp_node); - int num_vec = SLP_TREE_NUMBER_OF_VEC_STMTS (slp_node); + int num_vec = vect_get_num_copies (vinfo, slp_node); poly_uint64 pos = (num_vec * nunits) - num_scalar + slp_index; /* Calculate which vector contains the result, and which lane of @@ -10219,7 +10229,7 @@ vectorizable_live_operation (vec_info *vinfo, stmt_vec_info stmt_info, "the loop.\n"); LOOP_VINFO_CAN_USE_PARTIAL_VECTORS_P (loop_vinfo) = false; } - else if (SLP_TREE_NUMBER_OF_VEC_STMTS (slp_node) > 1) + else if (num_vec > 1) { if (dump_enabled_p ()) dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location, diff --git a/gcc/tree-vect-patterns.cc b/gcc/tree-vect-patterns.cc index b39da1062c0e..5581f44a6a84 100644 --- a/gcc/tree-vect-patterns.cc +++ b/gcc/tree-vect-patterns.cc @@ -3882,6 +3882,10 @@ vect_recog_rotate_pattern (vec_info *vinfo, goto use_rotate; } + /* We may not use a reduction operand twice. */ + if (vect_is_reduction (stmt_vinfo)) + return NULL; + tree utype = unsigned_type_for (type); tree uvectype = get_vectype_for_scalar_type (vinfo, utype); if (!uvectype) @@ -4538,6 +4542,8 @@ extern bool gimple_unsigned_integer_sat_add (tree, tree*, tree (*)(tree)); extern bool gimple_unsigned_integer_sat_sub (tree, tree*, tree (*)(tree)); extern bool gimple_unsigned_integer_sat_trunc (tree, tree*, tree (*)(tree)); +extern bool gimple_unsigned_integer_narrow_clip (tree, tree*, tree (*)(tree)); + extern bool gimple_signed_integer_sat_add (tree, tree*, tree (*)(tree)); extern bool gimple_signed_integer_sat_sub (tree, tree*, tree (*)(tree)); extern bool gimple_signed_integer_sat_trunc (tree, tree*, tree (*)(tree)); @@ -4772,6 +4778,36 @@ vect_recog_sat_trunc_pattern (vec_info *vinfo, stmt_vec_info stmt_vinfo, tree lhs = gimple_assign_lhs (last_stmt); tree otype = TREE_TYPE (lhs); + if ((gimple_unsigned_integer_narrow_clip (lhs, ops, NULL)) + && type_has_mode_precision_p (otype)) + { + tree itype = TREE_TYPE (ops[0]); + tree v_itype = get_vectype_for_scalar_type (vinfo, itype); + tree v_otype = get_vectype_for_scalar_type (vinfo, otype); + internal_fn fn = IFN_SAT_TRUNC; + + if (v_itype != NULL_TREE && v_otype != NULL_TREE + && direct_internal_fn_supported_p (fn, tree_pair (v_otype, v_itype), + OPTIMIZE_FOR_BOTH)) + { + tree temp = vect_recog_temp_ssa_var (itype, NULL); + gimple * max_stmt = gimple_build_assign (temp, build2 (MAX_EXPR, itype, build_zero_cst(itype), ops[0])); + append_pattern_def_seq (vinfo, stmt_vinfo, max_stmt, v_itype); + + gcall *call = gimple_build_call_internal (fn, 1, temp); + tree out_ssa = vect_recog_temp_ssa_var (otype, NULL); + + gimple_call_set_lhs (call, out_ssa); + gimple_call_set_nothrow (call, /* nothrow_p */ false); + gimple_set_location (call, gimple_location (last_stmt)); + + *type_out = v_otype; + + return call; + } + + } + if ((gimple_unsigned_integer_sat_trunc (lhs, ops, NULL) || gimple_signed_integer_sat_trunc (lhs, ops, NULL)) && type_has_mode_precision_p (otype)) @@ -5416,8 +5452,10 @@ integer_type_for_mask (tree var, vec_info *vinfo) if (!VECT_SCALAR_BOOLEAN_TYPE_P (TREE_TYPE (var))) return NULL_TREE; - stmt_vec_info def_stmt_info = vect_get_internal_def (vinfo, var); - if (!def_stmt_info || !vect_use_mask_type_p (def_stmt_info)) + stmt_vec_info def_stmt_info = vinfo->lookup_def (var); + if (!def_stmt_info + || STMT_VINFO_DEF_TYPE (def_stmt_info) == vect_external_def + || !vect_use_mask_type_p (def_stmt_info)) return NULL_TREE; return build_nonstandard_integer_type (def_stmt_info->mask_precision, 1); @@ -5497,6 +5535,53 @@ vect_recog_gcond_pattern (vec_info *vinfo, return pattern_stmt; } + +/* A helper for vect_recog_mask_conversion_pattern. Build + conversion of MASK to a type suitable for masking VECTYPE. + Built statement gets required vectype and is appended to + a pattern sequence of STMT_VINFO. + + Return converted mask. */ + +static tree +build_mask_conversion (vec_info *vinfo, + tree mask, tree vectype, stmt_vec_info stmt_vinfo) +{ + gimple *stmt; + tree masktype, tmp; + + masktype = truth_type_for (vectype); + tmp = vect_recog_temp_ssa_var (TREE_TYPE (masktype), NULL); + stmt = gimple_build_assign (tmp, CONVERT_EXPR, mask); + append_pattern_def_seq (vinfo, stmt_vinfo, + stmt, masktype, TREE_TYPE (vectype)); + + return tmp; +} + + +/* Return MASK if MASK is suitable for masking an operation on vectors + of type VECTYPE, otherwise convert it into such a form and return + the result. Associate any conversion statements with STMT_INFO's + pattern. */ + +static tree +vect_convert_mask_for_vectype (tree mask, tree vectype, + stmt_vec_info stmt_info, vec_info *vinfo) +{ + tree mask_type = integer_type_for_mask (mask, vinfo); + if (mask_type) + { + tree mask_vectype = get_mask_type_for_scalar_type (vinfo, mask_type); + if (mask_vectype + && maybe_ne (TYPE_VECTOR_SUBPARTS (vectype), + TYPE_VECTOR_SUBPARTS (mask_vectype))) + mask = build_mask_conversion (vinfo, mask, vectype, stmt_info); + } + return mask; +} + + /* Function vect_recog_bool_pattern Try to find pattern like following: @@ -5655,10 +5740,12 @@ vect_recog_bool_pattern (vec_info *vinfo, if (!new_vectype) return NULL; - new_vectype = truth_type_for (new_vectype); append_pattern_def_seq (vinfo, stmt_vinfo, pattern_stmt, new_vectype, TREE_TYPE (var)); + lhs_var = vect_convert_mask_for_vectype (lhs_var, vectype, stmt_vinfo, + vinfo); + lhs = vect_recog_temp_ssa_var (TREE_TYPE (lhs), NULL); pattern_stmt = gimple_build_assign (lhs, COND_EXPR, lhs_var, @@ -5667,6 +5754,68 @@ vect_recog_bool_pattern (vec_info *vinfo, *type_out = vectype; vect_pattern_detected ("vect_recog_bool_pattern", last_stmt); + return pattern_stmt; + } + else if (rhs_code == BIT_XOR_EXPR + || rhs_code == BIT_AND_EXPR + || rhs_code == BIT_IOR_EXPR) + { + tree lhs_type = integer_type_for_mask (lhs, vinfo); + if (!lhs_type) + return NULL; + vectype = get_mask_type_for_scalar_type (vinfo, lhs_type); + if (!vectype) + return NULL; + tree rhs2 = gimple_assign_rhs2 (last_stmt); + tree rhs1_type = integer_type_for_mask (var, vinfo); + tree rhs2_type = integer_type_for_mask (rhs2, vinfo); + if (rhs1_type && rhs2_type) + return NULL; + /* When one input is a mask and the other is not create a pattern + stmt sequence that creates a mask for the non-mask input and + convert it to one suitable for the output mask used. */ + if (rhs1_type && !rhs2_type) + { + tree rhs1_vectype = get_mask_type_for_scalar_type (vinfo, rhs1_type); + if (!rhs1_vectype) + return NULL; + tree rhs2_vectype = get_vectype_for_scalar_type (vinfo, + TREE_TYPE (rhs2)); + if (!rhs2_vectype) + return NULL; + tree new_vectype = truth_type_for (rhs2_vectype); + tree tem = vect_recog_temp_ssa_var (TREE_TYPE (new_vectype), NULL); + pattern_stmt = gimple_build_assign (tem, NE_EXPR, rhs2, + build_zero_cst + (TREE_TYPE (rhs2))); + append_pattern_def_seq (vinfo, stmt_vinfo, pattern_stmt, + new_vectype, TREE_TYPE (new_vectype)); + rhs2 = vect_convert_mask_for_vectype (tem, rhs1_vectype, + stmt_vinfo, vinfo); + } + else if (!rhs1_type && rhs2_type) + { + tree rhs2_vectype = get_mask_type_for_scalar_type (vinfo, rhs2_type); + if (!rhs2_vectype) + return NULL; + tree rhs1_vectype = get_vectype_for_scalar_type (vinfo, + TREE_TYPE (var)); + if (!rhs1_vectype) + return NULL; + tree new_vectype = truth_type_for (rhs1_vectype); + tree tem = vect_recog_temp_ssa_var (TREE_TYPE (new_vectype), NULL); + pattern_stmt = gimple_build_assign (tem, NE_EXPR, var, + build_zero_cst + (TREE_TYPE (var))); + append_pattern_def_seq (vinfo, stmt_vinfo, pattern_stmt, + new_vectype, TREE_TYPE (new_vectype)); + var = vect_convert_mask_for_vectype (tem, rhs2_vectype, + stmt_vinfo, vinfo); + } + lhs = vect_recog_temp_ssa_var (TREE_TYPE (lhs), NULL); + pattern_stmt = gimple_build_assign (lhs, rhs_code, var, rhs2); + vect_pattern_detected ("vect_recog_bool_pattern", last_stmt); + *type_out = vectype; return pattern_stmt; } else if (rhs_code == SSA_NAME @@ -5678,30 +5827,18 @@ vect_recog_bool_pattern (vec_info *vinfo, return NULL; tree type = integer_type_for_mask (var, vinfo); - tree cst0, cst1, new_vectype; - if (!type) return NULL; - if (TYPE_MODE (type) == TYPE_MODE (TREE_TYPE (vectype))) - type = TREE_TYPE (vectype); + var = vect_convert_mask_for_vectype (var, vectype, stmt_vinfo, vinfo); - cst0 = build_int_cst (type, 0); - cst1 = build_int_cst (type, 1); - new_vectype = get_vectype_for_scalar_type (vinfo, type); - - rhs = vect_recog_temp_ssa_var (type, NULL); + tree cst0 = build_int_cst (TREE_TYPE (vectype), 0); + tree cst1 = build_int_cst (TREE_TYPE (vectype), 1); + rhs = vect_recog_temp_ssa_var (TREE_TYPE (vectype), NULL); pattern_stmt = gimple_build_assign (rhs, COND_EXPR, var, cst1, cst0); - append_pattern_def_seq (vinfo, stmt_vinfo, pattern_stmt, new_vectype); + append_pattern_def_seq (vinfo, stmt_vinfo, pattern_stmt, vectype); lhs = build1 (VIEW_CONVERT_EXPR, TREE_TYPE (vectype), lhs); - if (!useless_type_conversion_p (TREE_TYPE (lhs), TREE_TYPE (rhs))) - { - tree rhs2 = vect_recog_temp_ssa_var (TREE_TYPE (lhs), NULL); - gimple *cast_stmt = gimple_build_assign (rhs2, NOP_EXPR, rhs); - append_pattern_def_seq (vinfo, stmt_vinfo, cast_stmt); - rhs = rhs2; - } pattern_stmt = gimple_build_assign (lhs, SSA_NAME, rhs); pattern_stmt_info = vinfo->add_stmt (pattern_stmt); vinfo->move_dr (pattern_stmt_info, stmt_vinfo); @@ -5714,29 +5851,6 @@ vect_recog_bool_pattern (vec_info *vinfo, return NULL; } -/* A helper for vect_recog_mask_conversion_pattern. Build - conversion of MASK to a type suitable for masking VECTYPE. - Built statement gets required vectype and is appended to - a pattern sequence of STMT_VINFO. - - Return converted mask. */ - -static tree -build_mask_conversion (vec_info *vinfo, - tree mask, tree vectype, stmt_vec_info stmt_vinfo) -{ - gimple *stmt; - tree masktype, tmp; - - masktype = truth_type_for (vectype); - tmp = vect_recog_temp_ssa_var (TREE_TYPE (masktype), NULL); - stmt = gimple_build_assign (tmp, CONVERT_EXPR, mask); - append_pattern_def_seq (vinfo, stmt_vinfo, - stmt, masktype, TREE_TYPE (vectype)); - - return tmp; -} - /* Function vect_recog_mask_conversion_pattern @@ -5969,27 +6083,6 @@ vect_get_load_store_mask (stmt_vec_info stmt_info) gcc_unreachable (); } -/* Return MASK if MASK is suitable for masking an operation on vectors - of type VECTYPE, otherwise convert it into such a form and return - the result. Associate any conversion statements with STMT_INFO's - pattern. */ - -static tree -vect_convert_mask_for_vectype (tree mask, tree vectype, - stmt_vec_info stmt_info, vec_info *vinfo) -{ - tree mask_type = integer_type_for_mask (mask, vinfo); - if (mask_type) - { - tree mask_vectype = get_mask_type_for_scalar_type (vinfo, mask_type); - if (mask_vectype - && maybe_ne (TYPE_VECTOR_SUBPARTS (vectype), - TYPE_VECTOR_SUBPARTS (mask_vectype))) - mask = build_mask_conversion (vinfo, mask, vectype, stmt_info); - } - return mask; -} - /* Return the equivalent of: fold_convert (TYPE, VALUE) diff --git a/gcc/tree-vect-slp.cc b/gcc/tree-vect-slp.cc index 8187dbc47f1d..f553e8fba198 100644 --- a/gcc/tree-vect-slp.cc +++ b/gcc/tree-vect-slp.cc @@ -64,8 +64,6 @@ static bool vect_transform_slp_perm_load_1 (vec_info *, slp_tree, static int vectorizable_slp_permutation_1 (vec_info *, gimple_stmt_iterator *, slp_tree, lane_permutation_t &, vec &, bool); -static bool vectorizable_slp_permutation (vec_info *, gimple_stmt_iterator *, - slp_tree, stmt_vector_for_cost *); static void vect_print_slp_tree (dump_flags_t, dump_location_t, slp_tree); static bool vect_slp_can_convert_to_external (const vec &); @@ -114,7 +112,6 @@ _slp_tree::_slp_tree () SLP_TREE_SCALAR_STMTS (this) = vNULL; SLP_TREE_SCALAR_OPS (this) = vNULL; SLP_TREE_VEC_DEFS (this) = vNULL; - SLP_TREE_NUMBER_OF_VEC_STMTS (this) = 0; SLP_TREE_CHILDREN (this) = vNULL; SLP_TREE_LOAD_PERMUTATION (this) = vNULL; SLP_TREE_LANE_PERMUTATION (this) = vNULL; @@ -8044,17 +8041,6 @@ vect_slp_analyze_node_operations_1 (vec_info *vinfo, slp_tree node, slp_instance node_instance, stmt_vector_for_cost *cost_vec) { - /* Calculate the number of vector statements to be created for the scalar - stmts in this node. It is the number of scalar elements in one scalar - iteration (DR_GROUP_SIZE) multiplied by VF divided by the number of - elements in a vector. For single-defuse-cycle, lane-reducing op, and - PHI statement that starts reduction comprised of only lane-reducing ops, - the number is more than effective vector statements actually required. */ - if (SLP_TREE_VECTYPE (node)) - SLP_TREE_NUMBER_OF_VEC_STMTS (node) = vect_get_num_copies (vinfo, node); - else - SLP_TREE_NUMBER_OF_VEC_STMTS (node) = 0; - /* Handle purely internal nodes. */ if (SLP_TREE_PERMUTE_P (node)) { @@ -8072,6 +8058,7 @@ vect_slp_analyze_node_operations_1 (vec_info *vinfo, slp_tree node, false, cost_vec)) return false; } + SLP_TREE_TYPE (node) = permute_info_type; return true; } @@ -8221,7 +8208,7 @@ vect_scalar_ops_slice_hash::equal (const value_type &s1, by NODE. */ static void -vect_prologue_cost_for_slp (slp_tree node, +vect_prologue_cost_for_slp (vec_info *vinfo, slp_tree node, stmt_vector_for_cost *cost_vec) { /* There's a special case of an existing vector, that costs nothing. */ @@ -8235,14 +8222,15 @@ vect_prologue_cost_for_slp (slp_tree node, unsigned group_size = SLP_TREE_SCALAR_OPS (node).length (); unsigned HOST_WIDE_INT const_nunits; unsigned nelt_limit; + unsigned nvectors = vect_get_num_copies (vinfo, node); auto ops = &SLP_TREE_SCALAR_OPS (node); - auto_vec starts (SLP_TREE_NUMBER_OF_VEC_STMTS (node)); + auto_vec starts (nvectors); if (TYPE_VECTOR_SUBPARTS (vectype).is_constant (&const_nunits) && ! multiple_p (const_nunits, group_size)) { nelt_limit = const_nunits; hash_set vector_ops; - for (unsigned int i = 0; i < SLP_TREE_NUMBER_OF_VEC_STMTS (node); ++i) + for (unsigned int i = 0; i < nvectors; ++i) if (!vector_ops.add ({ ops, i * nelt_limit, nelt_limit })) starts.quick_push (i * nelt_limit); } @@ -8396,10 +8384,8 @@ vect_slp_analyze_node_operations (vec_info *vinfo, slp_tree node, continue; } - SLP_TREE_NUMBER_OF_VEC_STMTS (child) - = vect_get_num_copies (vinfo, child); /* And cost them. */ - vect_prologue_cost_for_slp (child, cost_vec); + vect_prologue_cost_for_slp (vinfo, child, cost_vec); } /* If this node or any of its children can't be vectorized, try pruning @@ -10338,7 +10324,7 @@ vect_create_constant_vectors (vec_info *vinfo, slp_tree op_node) /* We always want SLP_TREE_VECTYPE (op_node) here correctly set. */ vector_type = SLP_TREE_VECTYPE (op_node); - unsigned int number_of_vectors = SLP_TREE_NUMBER_OF_VEC_STMTS (op_node); + unsigned int number_of_vectors = vect_get_num_copies (vinfo, op_node); SLP_TREE_VEC_DEFS (op_node).create (number_of_vectors); auto_vec voprnds (number_of_vectors); @@ -10563,7 +10549,7 @@ vect_get_slp_vect_def (slp_tree slp_node, unsigned i) void vect_get_slp_defs (slp_tree slp_node, vec *vec_defs) { - vec_defs->create (SLP_TREE_NUMBER_OF_VEC_STMTS (slp_node)); + vec_defs->create (SLP_TREE_VEC_DEFS (slp_node).length ()); vec_defs->splice (SLP_TREE_VEC_DEFS (slp_node)); } @@ -10617,7 +10603,7 @@ vect_transform_slp_perm_load_1 (vec_info *vinfo, slp_tree node, mode = TYPE_MODE (vectype); poly_uint64 nunits = TYPE_VECTOR_SUBPARTS (vectype); - unsigned int nstmts = SLP_TREE_NUMBER_OF_VEC_STMTS (node); + unsigned int nstmts = vect_get_num_copies (vinfo, node); /* Initialize the vect stmts of NODE to properly insert the generated stmts later. */ @@ -10817,7 +10803,7 @@ vect_transform_slp_perm_load_1 (vec_info *vinfo, slp_tree node, if (n_loads) { if (repeating_p) - *n_loads = SLP_TREE_NUMBER_OF_VEC_STMTS (node); + *n_loads = nstmts; else { /* Enforced above when !repeating_p. */ @@ -11066,7 +11052,8 @@ vectorizable_slp_permutation_1 (vec_info *vinfo, gimple_stmt_iterator *gsi, unsigned vec_idx = (SLP_TREE_LANE_PERMUTATION (node)[0].second / SLP_TREE_LANES (node)); unsigned vec_num = SLP_TREE_LANES (child) / SLP_TREE_LANES (node); - for (unsigned i = 0; i < SLP_TREE_NUMBER_OF_VEC_STMTS (node); ++i) + unsigned nvectors = vect_get_num_copies (vinfo, node); + for (unsigned i = 0; i < nvectors; ++i) { tree def = SLP_TREE_VEC_DEFS (child)[i * vec_num + vec_idx]; node->push_vec_def (def); @@ -11359,7 +11346,7 @@ vectorizable_slp_permutation_1 (vec_info *vinfo, gimple_stmt_iterator *gsi, [ { 0, 2 }, { 0, 3 } ] Where currently only a subset is supported by code generating below. */ -static bool +bool vectorizable_slp_permutation (vec_info *vinfo, gimple_stmt_iterator *gsi, slp_tree node, stmt_vector_for_cost *cost_vec) { @@ -11407,14 +11394,11 @@ vect_schedule_slp_node (vec_info *vinfo, return; } - gcc_assert (SLP_TREE_VEC_DEFS (node).is_empty ()); - stmt_vec_info stmt_info = SLP_TREE_REPRESENTATIVE (node); - gcc_assert (!SLP_TREE_VECTYPE (node) - || SLP_TREE_NUMBER_OF_VEC_STMTS (node) != 0); - if (SLP_TREE_NUMBER_OF_VEC_STMTS (node) != 0) - SLP_TREE_VEC_DEFS (node).create (SLP_TREE_NUMBER_OF_VEC_STMTS (node)); + gcc_assert (SLP_TREE_VEC_DEFS (node).is_empty ()); + if (SLP_TREE_VECTYPE (node)) + SLP_TREE_VEC_DEFS (node).create (vect_get_num_copies (vinfo, node)); if (!SLP_TREE_PERMUTE_P (node) && STMT_VINFO_DATA_REF (stmt_info)) { @@ -11596,37 +11580,20 @@ vect_schedule_slp_node (vec_info *vinfo, } } - /* Handle purely internal nodes. */ - if (SLP_TREE_PERMUTE_P (node)) - { - if (dump_enabled_p ()) - dump_printf_loc (MSG_NOTE, vect_location, - "------>vectorizing SLP permutation node\n"); - /* ??? the transform kind was stored to STMT_VINFO_TYPE which might - be shared with different SLP nodes (but usually it's the same - operation apart from the case the stmt is only there for denoting - the actual scalar lane defs ...). So do not call vect_transform_stmt - but open-code it here (partly). */ - bool done = vectorizable_slp_permutation (vinfo, &si, node, NULL); - gcc_assert (done); - stmt_vec_info slp_stmt_info; - unsigned int i; - FOR_EACH_VEC_ELT (SLP_TREE_SCALAR_STMTS (node), i, slp_stmt_info) - if (slp_stmt_info && STMT_VINFO_LIVE_P (slp_stmt_info)) - { - done = vectorizable_live_operation (vinfo, slp_stmt_info, node, - instance, i, true, NULL); - gcc_assert (done); - } - } - else + if (dump_enabled_p ()) { - if (dump_enabled_p ()) + if (stmt_info) dump_printf_loc (MSG_NOTE, vect_location, "------>vectorizing SLP node starting from: %G", stmt_info->stmt); - vect_transform_stmt (vinfo, stmt_info, &si, node, instance); + else + { + dump_printf_loc (MSG_NOTE, vect_location, + "------>vectorizing SLP node:\n"); + vect_print_slp_tree (MSG_NOTE, vect_location, node); + } } + vect_transform_stmt (vinfo, stmt_info, &si, node, instance); } /* Replace scalar calls from SLP node NODE with setting of their lhs to zero. @@ -11693,7 +11660,7 @@ vectorize_slp_instance_root_stmt (vec_info *vinfo, slp_tree node, slp_instance i if (instance->kind == slp_inst_kind_ctor) { - if (SLP_TREE_NUMBER_OF_VEC_STMTS (node) == 1) + if (SLP_TREE_VEC_DEFS (node).length () == 1) { tree vect_lhs = SLP_TREE_VEC_DEFS (node)[0]; tree root_lhs = gimple_get_lhs (instance->root_stmts[0]->stmt); @@ -11703,13 +11670,13 @@ vectorize_slp_instance_root_stmt (vec_info *vinfo, slp_tree node, slp_instance i vect_lhs); rstmt = gimple_build_assign (root_lhs, vect_lhs); } - else if (SLP_TREE_NUMBER_OF_VEC_STMTS (node) > 1) + else { - int nelts = SLP_TREE_NUMBER_OF_VEC_STMTS (node); + gcc_assert (SLP_TREE_VEC_DEFS (node).length () > 1); tree child_def; int j; vec *v; - vec_alloc (v, nelts); + vec_alloc (v, SLP_TREE_VEC_DEFS (node).length ()); /* A CTOR can handle V16HI composition from VNx8HI so we do not need to convert vector elements if the types diff --git a/gcc/tree-vect-stmts.cc b/gcc/tree-vect-stmts.cc index 9fcc2fd08498..cfc4f323a220 100644 --- a/gcc/tree-vect-stmts.cc +++ b/gcc/tree-vect-stmts.cc @@ -916,7 +916,7 @@ vect_mark_stmts_to_be_vectorized (loop_vec_info loop_vinfo, bool *fatal) of the same KIND. */ static void -vect_model_simple_cost (vec_info *, int n, slp_tree node, +vect_model_simple_cost (vec_info *vinfo, int n, slp_tree node, stmt_vector_for_cost *cost_vec, vect_cost_for_stmt kind = vector_stmt) { @@ -924,7 +924,7 @@ vect_model_simple_cost (vec_info *, int n, slp_tree node, gcc_assert (cost_vec != NULL); - n *= SLP_TREE_NUMBER_OF_VEC_STMTS (node); + n *= vect_get_num_copies (vinfo, node); /* Pass the inside-of-loop statements to the target-specific cost model. */ inside_cost += record_stmt_cost (cost_vec, n, kind, node, 0, vect_body); @@ -1459,7 +1459,7 @@ check_load_store_for_partial_vectors (loop_vec_info loop_vinfo, tree vectype, scalar_mask = def; } - unsigned int nvectors = vect_get_num_copies (loop_vinfo, slp_node, vectype); + unsigned int nvectors = vect_get_num_copies (loop_vinfo, slp_node); vec_loop_masks *masks = &LOOP_VINFO_MASKS (loop_vinfo); vec_loop_lens *lens = &LOOP_VINFO_LENS (loop_vinfo); machine_mode vecmode = TYPE_MODE (vectype); @@ -1963,13 +1963,16 @@ vector_vector_composition_type (tree vtype, poly_uint64 nelts, tree *ptype) VECTYPE is the vector type that the vectorized statements will use. If ELSVALS is nonzero the supported else values will be stored in the - vector ELSVALS points to. */ + vector ELSVALS points to. + + For loads PERM_OK indicates whether we can code generate a + SLP_TREE_LOAD_PERMUTATION on the node. */ static bool get_load_store_type (vec_info *vinfo, stmt_vec_info stmt_info, tree vectype, slp_tree slp_node, bool masked_p, vec_load_store_type vls_type, - vect_load_store_data *ls) + bool perm_ok, vect_load_store_data *ls) { vect_memory_access_type *memory_access_type = &ls->memory_access_type; poly_int64 *poffset = &ls->poffset; @@ -2026,6 +2029,7 @@ get_load_store_type (vec_info *vinfo, stmt_vec_info stmt_info, without permutation. */ if (! SLP_TREE_LOAD_PERMUTATION (slp_node).exists ()) first_dr_info = STMT_VINFO_DR_INFO (SLP_TREE_SCALAR_STMTS (slp_node)[0]); + if (STMT_VINFO_STRIDED_P (first_stmt_info)) /* Try to use consecutive accesses of as many elements as possible, separated by the stride, until we have a complete vector. @@ -2089,15 +2093,10 @@ get_load_store_type (vec_info *vinfo, stmt_vec_info stmt_info, (vinfo, stmt_info, vectype, vls_type, 1, &neg_ldst_offset); else - { - /* Try to use consecutive accesses of DR_GROUP_SIZE elements, - separated by the stride, until we have a complete vector. - Fall back to scalar accesses if that isn't possible. */ - if (multiple_p (nunits, group_size)) - *memory_access_type = VMAT_STRIDED_SLP; - else - *memory_access_type = VMAT_ELEMENTWISE; - } + /* We can fall back to VMAT_STRIDED_SLP since that does + not care whether the stride between the group instances + is positive or negative. */ + *memory_access_type = VMAT_STRIDED_SLP; } else if (cmp == 0 && loop_vinfo) { @@ -2135,45 +2134,26 @@ get_load_store_type (vec_info *vinfo, stmt_vec_info stmt_info, || *memory_access_type == VMAT_CONTIGUOUS_REVERSE) && maybe_gt (group_size, TYPE_VECTOR_SUBPARTS (vectype))) { - if (SLP_TREE_LANES (slp_node) == 1) - { - *memory_access_type = VMAT_ELEMENTWISE; - if (dump_enabled_p ()) - dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location, - "single-element interleaving not supported " - "for not adjacent vector loads, using " - "elementwise access\n"); - } - else - { - if (dump_enabled_p ()) - dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location, - "single-element interleaving not supported " - "for not adjacent vector loads\n"); - return false; - } + *memory_access_type = VMAT_ELEMENTWISE; + if (dump_enabled_p ()) + dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location, + "single-element interleaving not supported " + "for not adjacent vector loads, using " + "elementwise access\n"); } - /* For single-element interleaving also fall back to elementwise - access in case we did not lower a permutation and cannot - code generate it. */ - auto_vec temv; - unsigned n_perms; + /* Also fall back to elementwise access in case we did not lower a + permutation and cannot code generate it. */ if (loop_vinfo - && single_element_p - && SLP_TREE_LANES (slp_node) == 1 - && (*memory_access_type == VMAT_CONTIGUOUS - || *memory_access_type == VMAT_CONTIGUOUS_REVERSE) + && *memory_access_type != VMAT_ELEMENTWISE && SLP_TREE_LOAD_PERMUTATION (slp_node).exists () - && !vect_transform_slp_perm_load - (loop_vinfo, slp_node, temv, NULL, - LOOP_VINFO_VECT_FACTOR (loop_vinfo), true, &n_perms)) + && !perm_ok) { *memory_access_type = VMAT_ELEMENTWISE; if (dump_enabled_p ()) dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location, - "single-element interleaving permutation not " - "supported, using elementwise access\n"); + "permutation not supported, using elementwise " + "access\n"); } overrun_p = (loop_vinfo && gap != 0 @@ -2318,11 +2298,13 @@ get_load_store_type (vec_info *vinfo, stmt_vec_info stmt_info, on nearby locations. Or, even if it's a win over scalar code, it might not be a win over vectorizing at a lower VF, if that allows us to use contiguous accesses. */ - if ((*memory_access_type == VMAT_ELEMENTWISE - || *memory_access_type == VMAT_STRIDED_SLP) + if (loop_vinfo + && (*memory_access_type == VMAT_ELEMENTWISE + || *memory_access_type == VMAT_STRIDED_SLP) && !STMT_VINFO_GATHER_SCATTER_P (stmt_info) && SLP_TREE_LANES (slp_node) == 1 - && loop_vinfo) + && (!SLP_TREE_LOAD_PERMUTATION (slp_node).exists () + || single_element_p)) { gather_scatter_info gs_info; if (vect_use_strided_gather_scatters_p (stmt_info, vectype, loop_vinfo, @@ -2501,15 +2483,20 @@ get_load_store_type (vec_info *vinfo, stmt_vec_info stmt_info, traditional behavior until that can be fixed. */ if (*memory_access_type == VMAT_ELEMENTWISE && !STMT_VINFO_STRIDED_P (first_stmt_info) - && !(stmt_info == DR_GROUP_FIRST_ELEMENT (stmt_info) - && !DR_GROUP_NEXT_ELEMENT (stmt_info) - && !pow2p_hwi (DR_GROUP_SIZE (stmt_info)))) + && !(STMT_VINFO_GROUPED_ACCESS (stmt_info) + && single_element_p + && !pow2p_hwi (group_size))) { if (dump_enabled_p ()) dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location, "not falling back to elementwise accesses\n"); return false; } + + /* For BB vectorization build up the vector from existing scalar defs. */ + if (!loop_vinfo && *memory_access_type == VMAT_ELEMENTWISE) + return false; + return true; } @@ -3123,7 +3110,7 @@ vectorizable_bswap (vec_info *vinfo, record_stmt_cost (cost_vec, 1, vector_stmt, slp_node, 0, vect_prologue); record_stmt_cost (cost_vec, - SLP_TREE_NUMBER_OF_VEC_STMTS (slp_node), + vect_get_num_copies (vinfo, slp_node), vec_perm, slp_node, 0, vect_body); return true; } @@ -3441,6 +3428,7 @@ vectorizable_call (vec_info *vinfo, int len_opno = internal_fn_len_index (cond_len_fn); vec_loop_masks *masks = (loop_vinfo ? &LOOP_VINFO_MASKS (loop_vinfo) : NULL); vec_loop_lens *lens = (loop_vinfo ? &LOOP_VINFO_LENS (loop_vinfo) : NULL); + unsigned int nvectors = vect_get_num_copies (vinfo, slp_node); if (cost_vec) /* transformation not required. */ { for (i = 0; i < nargs; ++i) @@ -3477,7 +3465,6 @@ vectorizable_call (vec_info *vinfo, } else { - unsigned int nvectors = SLP_TREE_NUMBER_OF_VEC_STMTS (slp_node); tree scalar_mask = NULL_TREE; if (mask_opno >= 0) scalar_mask = gimple_call_arg (stmt_info->stmt, mask_opno); @@ -3534,7 +3521,7 @@ vectorizable_call (vec_info *vinfo, /* Build argument list for the vectorized call. */ if (cfn == CFN_GOMP_SIMD_LANE) { - for (i = 0; i < SLP_TREE_NUMBER_OF_VEC_STMTS (slp_node); ++i) + for (i = 0; i < nvectors; ++i) { /* ??? For multi-lane SLP we'd need to build { 0, 0, .., 1, 1, ... }. */ @@ -5393,6 +5380,7 @@ vectorizable_conversion (vec_info *vinfo, return false; } DUMP_VECT_SCOPE ("vectorizable_conversion"); + unsigned int nvectors = vect_get_num_copies (vinfo, slp_node); if (modifier == NONE) { SLP_TREE_TYPE (slp_node) = type_conversion_vec_info_type; @@ -5403,7 +5391,6 @@ vectorizable_conversion (vec_info *vinfo, { SLP_TREE_TYPE (slp_node) = type_demotion_vec_info_type; /* The final packing step produces one vector result per copy. */ - unsigned int nvectors = SLP_TREE_NUMBER_OF_VEC_STMTS (slp_node); vect_model_promotion_demotion_cost (slp_node, nvectors, multi_step_cvt, cost_vec, widen_arith); @@ -5414,9 +5401,8 @@ vectorizable_conversion (vec_info *vinfo, /* The initial unpacking step produces two vector results per copy. MULTI_STEP_CVT is 0 for a single conversion, so >> MULTI_STEP_CVT divides by 2^(number of steps - 1). */ - unsigned int nvectors - = SLP_TREE_NUMBER_OF_VEC_STMTS (slp_node) >> multi_step_cvt; - vect_model_promotion_demotion_cost (slp_node, nvectors, + vect_model_promotion_demotion_cost (slp_node, + nvectors >> multi_step_cvt, multi_step_cvt, cost_vec, widen_arith); } @@ -5946,7 +5932,7 @@ vectorizable_shift (vec_info *vinfo, scalar shift operand but code-generation below simply always takes the first. */ if (dt[1] == vect_internal_def - && maybe_ne (nunits_out * SLP_TREE_NUMBER_OF_VEC_STMTS (slp_node), + && maybe_ne (nunits_out * vect_get_num_copies (vinfo, slp_node), stmts.length ())) scalar_shift_arg = false; @@ -6105,6 +6091,7 @@ vectorizable_shift (vec_info *vinfo, /* Handle def. */ vec_dest = vect_create_destination_var (scalar_dest, vectype); + unsigned nvectors = vect_get_num_copies (vinfo, slp_node); if (scalar_shift_arg && dt[1] != vect_internal_def) { /* Vector shl and shr insn patterns can be defined with scalar @@ -6118,15 +6105,14 @@ vectorizable_shift (vec_info *vinfo, dump_printf_loc (MSG_NOTE, vect_location, "operand 1 using scalar mode.\n"); vec_oprnd1 = op1; - vec_oprnds1.create (SLP_TREE_NUMBER_OF_VEC_STMTS (slp_node)); + vec_oprnds1.create (nvectors); vec_oprnds1.quick_push (vec_oprnd1); - /* Store vec_oprnd1 for every vector stmt to be created. - We check during the analysis that all the shift arguments - are the same. - TODO: Allow different constants for different vector - stmts generated for an SLP instance. */ - for (k = 0; - k < SLP_TREE_NUMBER_OF_VEC_STMTS (slp_node) - 1; k++) + /* Store vec_oprnd1 for every vector stmt to be created. + We check during the analysis that all the shift arguments + are the same. + TODO: Allow different constants for different vector + stmts generated for an SLP instance. */ + for (k = 0; k < nvectors - 1; k++) vec_oprnds1.quick_push (vec_oprnd1); } } @@ -6144,8 +6130,8 @@ vectorizable_shift (vec_info *vinfo, gsi); vec_oprnd1 = vect_init_vector (vinfo, stmt_info, op1, vectype, gsi); - vec_oprnds1.create (slp_node->vec_stmts_size); - for (k = 0; k < slp_node->vec_stmts_size; k++) + vec_oprnds1.create (nvectors); + for (k = 0; k < nvectors; k++) vec_oprnds1.quick_push (vec_oprnd1); } else if (dt[1] == vect_constant_def) @@ -6396,7 +6382,7 @@ vectorizable_operation (vec_info *vinfo, /* Multiple types in SLP are handled by creating the appropriate number of vectorized stmts for each SLP node. */ - auto vec_num = SLP_TREE_NUMBER_OF_VEC_STMTS (slp_node); + auto vec_num = vect_get_num_copies (vinfo, slp_node); /* Reject attempts to combine mask types with nonmask types, e.g. if we have an AND between a (nonmask) boolean loaded from memory and @@ -6518,7 +6504,7 @@ vectorizable_operation (vec_info *vinfo, in the prologue and (mis-)costs one of the stmts as vector stmt. See below for the actual lowering that will be applied. */ - unsigned n = SLP_TREE_NUMBER_OF_VEC_STMTS (slp_node); + unsigned n = vect_get_num_copies (vinfo, slp_node); switch (code) { case PLUS_EXPR: @@ -7858,11 +7844,12 @@ vectorizable_store (vec_info *vinfo, } else vf = 1; + vec_num = vect_get_num_copies (vinfo, slp_node); /* FORNOW. This restriction should be relaxed. */ if (loop && nested_in_vect_loop_p (loop, stmt_info) - && SLP_TREE_NUMBER_OF_VEC_STMTS (slp_node) > 1) + && vec_num > 1) { if (dump_enabled_p ()) dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location, @@ -7881,11 +7868,11 @@ vectorizable_store (vec_info *vinfo, if (!STMT_VINFO_DATA_REF (stmt_info)) return false; - vect_load_store_data _ls_data; + vect_load_store_data _ls_data{}; vect_load_store_data &ls = slp_node->get_data (_ls_data); if (cost_vec && !get_load_store_type (vinfo, stmt_info, vectype, slp_node, mask_node, - vls_type, &_ls_data)) + vls_type, false, &_ls_data)) return false; /* Temporary aliases to analysis data, should not be modified through these. */ @@ -7952,7 +7939,7 @@ vectorizable_store (vec_info *vinfo, { first_stmt_info = stmt_info; first_dr_info = dr_info; - group_size = vec_num = 1; + group_size = 1; } if (STMT_VINFO_SIMD_LANE_ACCESS_P (stmt_info) > 1 && cost_vec) @@ -8029,9 +8016,6 @@ vectorizable_store (vec_info *vinfo, || !nested_in_vect_loop_p (loop, stmt_info)); grouped_store = false; - /* VEC_NUM is the number of vect stmts to be created for this - group. */ - vec_num = SLP_TREE_NUMBER_OF_VEC_STMTS (slp_node); first_stmt_info = SLP_TREE_SCALAR_STMTS (slp_node)[0]; gcc_assert (!STMT_VINFO_GROUPED_ACCESS (first_stmt_info) || (DR_GROUP_FIRST_ELEMENT (first_stmt_info) == first_stmt_info)); @@ -8204,7 +8188,7 @@ vectorizable_store (vec_info *vinfo, if (nstores > 1) align = MIN (tree_to_uhwi (TYPE_SIZE_UNIT (ltype)), align); ltype = build_aligned_type (ltype, align * BITS_PER_UNIT); - int ncopies = SLP_TREE_NUMBER_OF_VEC_STMTS (slp_node); + int ncopies = vec_num; if (!costing_p) { @@ -8415,7 +8399,7 @@ vectorizable_store (vec_info *vinfo, /* For costing some adjacent vector stores, we'd like to cost with the total number of them once instead of cost each one by one. */ unsigned int n_adjacent_stores = 0; - int ncopies = SLP_TREE_NUMBER_OF_VEC_STMTS (slp_node) / group_size; + int ncopies = vec_num / group_size; for (j = 0; j < ncopies; j++) { if (j == 0) @@ -9401,9 +9385,10 @@ vectorizable_load (vec_info *vinfo, else vf = 1; + vec_num = vect_get_num_copies (vinfo, slp_node); + /* FORNOW. This restriction should be relaxed. */ - if (nested_in_vect_loop - && SLP_TREE_NUMBER_OF_VEC_STMTS (slp_node) > 1) + if (nested_in_vect_loop && vec_num > 1) { if (dump_enabled_p ()) dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location, @@ -9451,11 +9436,17 @@ vectorizable_load (vec_info *vinfo, else group_size = 1; - vect_load_store_data _ls_data; + bool perm_ok = true; + unsigned n_perms = -1U; + if (cost_vec && SLP_TREE_LOAD_PERMUTATION (slp_node).exists ()) + perm_ok = vect_transform_slp_perm_load (vinfo, slp_node, vNULL, NULL, vf, + true, &n_perms); + + vect_load_store_data _ls_data{}; vect_load_store_data &ls = slp_node->get_data (_ls_data); if (cost_vec && !get_load_store_type (vinfo, stmt_info, vectype, slp_node, mask_node, - VLS_LOAD, &ls)) + VLS_LOAD, perm_ok, &ls)) return false; /* Temporary aliases to analysis data, should not be modified through these. */ @@ -9479,13 +9470,15 @@ vectorizable_load (vec_info *vinfo, /* ??? The following checks should really be part of get_load_store_type. */ if (SLP_TREE_LOAD_PERMUTATION (slp_node).exists () - && !((memory_access_type == VMAT_ELEMENTWISE - || mat_gather_scatter_p (memory_access_type)) - && SLP_TREE_LANES (slp_node) == 1)) + && !(memory_access_type == VMAT_ELEMENTWISE + || (mat_gather_scatter_p (memory_access_type) + && SLP_TREE_LANES (slp_node) == 1 + && (!grouped_load + || !DR_GROUP_NEXT_ELEMENT (first_stmt_info))))) { slp_perm = true; - if (!loop_vinfo) + if (!loop_vinfo && cost_vec) { /* In BB vectorization we may not actually use a loaded vector accessing elements in excess of DR_GROUP_SIZE. */ @@ -9508,17 +9501,20 @@ vectorizable_load (vec_info *vinfo, } } - auto_vec tem; - unsigned n_perms; - if (!vect_transform_slp_perm_load (vinfo, slp_node, tem, NULL, vf, - true, &n_perms)) + if (cost_vec) { - if (dump_enabled_p ()) - dump_printf_loc (MSG_MISSED_OPTIMIZATION, - vect_location, - "unsupported load permutation\n"); - return false; + if (!perm_ok) + { + if (dump_enabled_p ()) + dump_printf_loc (MSG_MISSED_OPTIMIZATION, + vect_location, + "unsupported load permutation\n"); + return false; + } + ls.n_perms = n_perms; } + else + n_perms = ls.n_perms; } if (slp_node->ldst_lanes @@ -9693,7 +9689,7 @@ vectorizable_load (vec_info *vinfo, vectype, &gsi2); } gimple *new_stmt = SSA_NAME_DEF_STMT (new_temp); - for (j = 0; j < (int) SLP_TREE_NUMBER_OF_VEC_STMTS (slp_node); ++j) + for (j = 0; j < (int) vec_num; ++j) slp_node->push_vec_def (new_stmt); return true; } @@ -9721,28 +9717,24 @@ vectorizable_load (vec_info *vinfo, { first_stmt_info = DR_GROUP_FIRST_ELEMENT (stmt_info); first_dr_info = STMT_VINFO_DR_INFO (first_stmt_info); + ref_type = get_group_alias_ptr_type (first_stmt_info); } else { first_stmt_info = stmt_info; first_dr_info = dr_info; + ref_type = reference_alias_ptr_type (DR_REF (dr_info->dr)); } - if (grouped_load && memory_access_type == VMAT_STRIDED_SLP) + if (grouped_load) { - group_size = DR_GROUP_SIZE (first_stmt_info); - ref_type = get_group_alias_ptr_type (first_stmt_info); + if (memory_access_type == VMAT_STRIDED_SLP) + group_size = DR_GROUP_SIZE (first_stmt_info); + else /* VMAT_ELEMENTWISE */ + group_size = SLP_TREE_LANES (slp_node); } else - { - if (grouped_load) - cst_offset - = (tree_to_uhwi (TYPE_SIZE_UNIT (TREE_TYPE (vectype))) - * vect_get_place_in_interleaving_chain (stmt_info, - first_stmt_info)); - group_size = 1; - ref_type = reference_alias_ptr_type (DR_REF (dr_info->dr)); - } + group_size = 1; if (!costing_p) { @@ -9881,6 +9873,7 @@ vectorizable_load (vec_info *vinfo, int ncopies; if (slp_perm) { + gcc_assert (memory_access_type != VMAT_ELEMENTWISE); /* We don't yet generate SLP_TREE_LOAD_PERMUTATIONs for variable VF. */ unsigned int const_vf = vf.to_constant (); @@ -9888,7 +9881,7 @@ vectorizable_load (vec_info *vinfo, dr_chain.create (ncopies); } else - ncopies = SLP_TREE_NUMBER_OF_VEC_STMTS (slp_node); + ncopies = vec_num; unsigned int group_el = 0; unsigned HOST_WIDE_INT @@ -9916,8 +9909,13 @@ vectorizable_load (vec_info *vinfo, slp_node, 0, vect_body); continue; } + unsigned int load_el = group_el; + /* For elementwise accesses apply a load permutation directly. */ + if (memory_access_type == VMAT_ELEMENTWISE + && SLP_TREE_LOAD_PERMUTATION (slp_node).exists ()) + load_el = SLP_TREE_LOAD_PERMUTATION (slp_node)[group_el]; tree this_off = build_int_cst (TREE_TYPE (alias_off), - group_el * elsz + cst_offset); + load_el * elsz + cst_offset); tree data_ref = build2 (MEM_REF, ltype, running_off, this_off); vect_copy_ref_info (data_ref, DR_REF (first_dr_info->dr)); new_temp = make_ssa_name (ltype); @@ -9989,18 +9987,19 @@ vectorizable_load (vec_info *vinfo, } if (slp_perm) { - unsigned n_perms; if (costing_p) { - unsigned n_loads; - vect_transform_slp_perm_load (vinfo, slp_node, vNULL, NULL, vf, - true, &n_perms, &n_loads); + gcc_assert (n_perms != -1U); inside_cost += record_stmt_cost (cost_vec, n_perms, vec_perm, slp_node, 0, vect_body); } else - vect_transform_slp_perm_load (vinfo, slp_node, dr_chain, gsi, vf, - false, &n_perms); + { + unsigned n_perms2; + vect_transform_slp_perm_load (vinfo, slp_node, dr_chain, gsi, vf, + false, &n_perms2); + gcc_assert (n_perms == n_perms2); + } } if (costing_p) @@ -10062,7 +10061,7 @@ vectorizable_load (vec_info *vinfo, /* We do not support grouped accesses in a nested loop, instead the access is contiguous but it might be permuted. No gap adjustment is needed though. */ - vec_num = SLP_TREE_NUMBER_OF_VEC_STMTS (slp_node); + ; else if (slp_perm && (group_size != scalar_lanes || !multiple_p (nunits, group_size))) @@ -10076,7 +10075,6 @@ vectorizable_load (vec_info *vinfo, } else { - vec_num = SLP_TREE_NUMBER_OF_VEC_STMTS (slp_node); group_gap_adj = group_size - scalar_lanes; } @@ -10086,10 +10084,9 @@ vectorizable_load (vec_info *vinfo, { first_stmt_info = stmt_info; first_dr_info = dr_info; - group_size = vec_num = 1; + group_size = 1; group_gap_adj = 0; ref_type = reference_alias_ptr_type (DR_REF (first_dr_info->dr)); - vec_num = SLP_TREE_NUMBER_OF_VEC_STMTS (slp_node); } vec_loop_masks *loop_masks @@ -10258,7 +10255,7 @@ vectorizable_load (vec_info *vinfo, /* For costing some adjacent vector loads, we'd like to cost with the total number of them once instead of cost each one by one. */ unsigned int n_adjacent_loads = 0; - int ncopies = slp_node->vec_stmts_size / group_size; + int ncopies = vec_num / group_size; for (j = 0; j < ncopies; j++) { if (costing_p) @@ -11378,25 +11375,24 @@ vectorizable_load (vec_info *vinfo, if (slp_perm) { - unsigned n_perms; /* For SLP we know we've seen all possible uses of dr_chain so direct vect_transform_slp_perm_load to DCE the unused parts. ??? This is a hack to prevent compile-time issues as seen in PR101120 and friends. */ if (costing_p) { - vect_transform_slp_perm_load (vinfo, slp_node, vNULL, nullptr, vf, - true, &n_perms, nullptr); + gcc_assert (n_perms != -1U); if (n_perms != 0) inside_cost = record_stmt_cost (cost_vec, n_perms, vec_perm, slp_node, 0, vect_body); } else { + unsigned n_perms2; bool ok = vect_transform_slp_perm_load (vinfo, slp_node, dr_chain, - gsi, vf, false, &n_perms, + gsi, vf, false, &n_perms2, nullptr, true); - gcc_assert (ok); + gcc_assert (ok && n_perms == n_perms2); } dr_chain.release (); } @@ -11592,7 +11588,7 @@ vectorizable_condition (vec_info *vinfo, tree vectype = SLP_TREE_VECTYPE (slp_node); tree vectype1 = NULL_TREE, vectype2 = NULL_TREE; - int vec_num = SLP_TREE_NUMBER_OF_VEC_STMTS (slp_node); + int vec_num = vect_get_num_copies (vinfo, slp_node); cond_expr = gimple_assign_rhs1 (stmt); gcc_assert (! COMPARISON_CLASS_P (cond_expr)); @@ -12324,7 +12320,7 @@ vectorizable_early_exit (loop_vec_info loop_vinfo, stmt_vec_info stmt_info, return false; machine_mode mode = TYPE_MODE (vectype); - int vec_num = SLP_TREE_NUMBER_OF_VEC_STMTS (slp_node); + int vec_num = vect_get_num_copies (loop_vinfo, slp_node); vec_loop_masks *masks = &LOOP_VINFO_MASKS (loop_vinfo); vec_loop_lens *lens = &LOOP_VINFO_LENS (loop_vinfo); @@ -12336,7 +12332,7 @@ vectorizable_early_exit (loop_vec_info loop_vinfo, stmt_vec_info stmt_info, gimple *orig_stmt = STMT_VINFO_STMT (vect_orig_stmt (stmt_info)); gcond *cond_stmt = as_a (orig_stmt); - tree cst = build_zero_cst (vectype); + tree vectype_out = vectype; auto bb = gimple_bb (cond_stmt); edge exit_true_edge = EDGE_SUCC (bb, 0); if (exit_true_edge->flags & EDGE_FALSE_VALUE) @@ -12353,10 +12349,37 @@ vectorizable_early_exit (loop_vec_info loop_vinfo, stmt_vec_info stmt_info, bool flipped = flow_bb_inside_loop_p (LOOP_VINFO_LOOP (loop_vinfo), exit_true_edge->dest); + /* See if we support ADDHN and use that for the reduction. */ + internal_fn ifn = IFN_VEC_TRUNC_ADD_HIGH; + bool addhn_supported_p + = direct_internal_fn_supported_p (ifn, vectype, OPTIMIZE_FOR_BOTH); + tree narrow_type = NULL_TREE; + if (addhn_supported_p) + { + /* Calculate the narrowing type for the result. */ + auto halfprec = TYPE_PRECISION (TREE_TYPE (vectype)) / 2; + auto unsignedp = TYPE_UNSIGNED (TREE_TYPE (vectype)); + tree itype = build_nonstandard_integer_type (halfprec, unsignedp); + tree tmp_type = build_vector_type (itype, TYPE_VECTOR_SUBPARTS (vectype)); + narrow_type = truth_type_for (tmp_type); + + if (direct_optab_handler (cbranch_optab, TYPE_MODE (narrow_type)) + == CODE_FOR_nothing) + { + if (dump_enabled_p ()) + dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location, + "can't use ADDHN reduction because cbranch for " + "the narrowed type is not supported by the " + "target.\n"); + addhn_supported_p = false; + } + } + /* Analyze only. */ if (cost_vec) { - if (direct_optab_handler (cbranch_optab, mode) == CODE_FOR_nothing) + if (!addhn_supported_p + && direct_optab_handler (cbranch_optab, mode) == CODE_FOR_nothing) { if (dump_enabled_p ()) dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location, @@ -12462,10 +12485,22 @@ vectorizable_early_exit (loop_vec_info loop_vinfo, stmt_vec_info stmt_info, while (workset.length () > 1) { - new_temp = make_temp_ssa_name (vectype, NULL, "vexit_reduc"); tree arg0 = workset.pop (); tree arg1 = workset.pop (); - new_stmt = gimple_build_assign (new_temp, BIT_IOR_EXPR, arg0, arg1); + if (addhn_supported_p && workset.length () == 0) + { + new_stmt = gimple_build_call_internal (ifn, 2, arg0, arg1); + vectype_out = narrow_type; + new_temp = make_temp_ssa_name (vectype_out, NULL, "vexit_reduc"); + gimple_call_set_lhs (as_a (new_stmt), new_temp); + gimple_call_set_nothrow (as_a (new_stmt), true); + } + else + { + new_temp = make_temp_ssa_name (vectype_out, NULL, "vexit_reduc"); + new_stmt + = gimple_build_assign (new_temp, BIT_IOR_EXPR, arg0, arg1); + } vect_finish_stmt_generation (loop_vinfo, stmt_info, new_stmt, &cond_gsi); workset.quick_insert (0, new_temp); @@ -12488,6 +12523,7 @@ vectorizable_early_exit (loop_vec_info loop_vinfo, stmt_vec_info stmt_info, gcc_assert (new_temp); + tree cst = build_zero_cst (vectype_out); gimple_cond_set_condition (cond_stmt, NE_EXPR, new_temp, cst); update_stmt (orig_stmt); @@ -12690,11 +12726,8 @@ vect_transform_stmt (vec_info *vinfo, gcc_assert (slp_node); - if (dump_enabled_p ()) - dump_printf_loc (MSG_NOTE, vect_location, - "------>vectorizing statement: %G", stmt_info->stmt); - - STMT_VINFO_VECTYPE (stmt_info) = NULL_TREE; + if (stmt_info) + STMT_VINFO_VECTYPE (stmt_info) = NULL_TREE; switch (SLP_TREE_TYPE (slp_node)) { @@ -12732,21 +12765,9 @@ vect_transform_stmt (vec_info *vinfo, break; case store_vec_info_type: - if (STMT_VINFO_GROUPED_ACCESS (stmt_info) - && !slp_node - && (++DR_GROUP_STORE_COUNT (DR_GROUP_FIRST_ELEMENT (stmt_info)) - < DR_GROUP_SIZE (DR_GROUP_FIRST_ELEMENT (stmt_info)))) - /* In case of interleaving, the whole chain is vectorized when the - last store in the chain is reached. Store stmts before the last - one are skipped, and there vec_stmt_info shouldn't be freed - meanwhile. */ - ; - else - { - done = vectorizable_store (vinfo, stmt_info, gsi, slp_node, NULL); - gcc_assert (done); - is_store = true; - } + done = vectorizable_store (vinfo, stmt_info, gsi, slp_node, NULL); + gcc_assert (done); + is_store = true; break; case condition_vec_info_type: @@ -12804,6 +12825,11 @@ vect_transform_stmt (vec_info *vinfo, gcc_assert (done); break; + case permute_info_type: + done = vectorizable_slp_permutation (vinfo, gsi, slp_node, NULL); + gcc_assert (done); + break; + default: if (!STMT_VINFO_LIVE_P (stmt_info)) { diff --git a/gcc/tree-vectorizer.cc b/gcc/tree-vectorizer.cc index d7dc30bbeac5..97b6297fb145 100644 --- a/gcc/tree-vectorizer.cc +++ b/gcc/tree-vectorizer.cc @@ -1137,7 +1137,7 @@ try_vectorize_loop_1 (hash_table *&simduid_to_vf_htab, || ifn == IFN_MASK_STORE || ifn == IFN_MASK_CALL /* Don't keep the if-converted parts when the ifn with - specifc type is not supported by the backend. */ + specific type is not supported by the backend. */ || (direct_internal_fn_p (ifn) && !direct_internal_fn_supported_p (call, OPTIMIZE_FOR_SPEED))) diff --git a/gcc/tree-vectorizer.h b/gcc/tree-vectorizer.h index 6872f8a03d2a..727534823720 100644 --- a/gcc/tree-vectorizer.h +++ b/gcc/tree-vectorizer.h @@ -242,7 +242,8 @@ enum stmt_vec_info_type { lc_phi_info_type, phi_info_type, recurr_info_type, - loop_exit_ctrl_vec_info_type + loop_exit_ctrl_vec_info_type, + permute_info_type }; /************************************************************************ @@ -288,6 +289,7 @@ struct vect_load_store_data : vect_data { } gs; tree strided_offset_vectype; // VMAT_GATHER_SCATTER_IFN, originally strided auto_vec elsvals; + unsigned n_perms; // SLP_TREE_LOAD_PERMUTATION }; /* A computation tree of an SLP instance. Each node corresponds to a group of @@ -328,11 +330,6 @@ struct _slp_tree { tree vectype; /* Vectorized defs. */ vec vec_defs; - /* Number of vector stmts that are created to replace the group of scalar - stmts. It is calculated during the transformation phase as the number of - scalar elements in one scalar iteration (GROUP_SIZE) multiplied by VF - divided by vector size. */ - unsigned int vec_stmts_size; /* Reference count in the SLP graph. */ unsigned int refcnt; @@ -442,7 +439,6 @@ typedef class _slp_instance { #define SLP_TREE_SCALAR_OPS(S) (S)->ops #define SLP_TREE_REF_COUNT(S) (S)->refcnt #define SLP_TREE_VEC_DEFS(S) (S)->vec_defs -#define SLP_TREE_NUMBER_OF_VEC_STMTS(S) (S)->vec_stmts_size #define SLP_TREE_LOAD_PERMUTATION(S) (S)->load_permutation #define SLP_TREE_LANE_PERMUTATION(S) (S)->lane_permutation #define SLP_TREE_DEF_TYPE(S) (S)->def_type @@ -1548,9 +1544,6 @@ class _stmt_vec_info { stmt_vec_info next_element; /* The size of the group. */ unsigned int size; - /* For stores, number of stores from this group seen. We vectorize the last - one. */ - unsigned int store_count; /* For loads only, the gap from the previous load. For consecutive loads, GAP is 1. */ unsigned int gap; @@ -1714,8 +1707,6 @@ struct gather_scatter_info { (gcc_checking_assert ((S)->dr_aux.dr), (S)->next_element) #define DR_GROUP_SIZE(S) \ (gcc_checking_assert ((S)->dr_aux.dr), (S)->size) -#define DR_GROUP_STORE_COUNT(S) \ - (gcc_checking_assert ((S)->dr_aux.dr), (S)->store_count) #define DR_GROUP_GAP(S) \ (gcc_checking_assert ((S)->dr_aux.dr), (S)->gap) @@ -2300,13 +2291,10 @@ vect_get_num_vectors (poly_uint64 nunits, tree vectype) } /* Return the number of vectors in the context of vectorization region VINFO, - needed for a group of statements, whose size is specified by lanes of NODE, - if NULL, it is 1. The statements are supposed to be interleaved together - with no gap, and all operate on vectors of type VECTYPE, if NULL, the - vectype of NODE is used. */ + needed for a group of statements and a vector type as specified by NODE. */ inline unsigned int -vect_get_num_copies (vec_info *vinfo, slp_tree node, tree vectype = NULL) +vect_get_num_copies (vec_info *vinfo, slp_tree node) { poly_uint64 vf; @@ -2315,27 +2303,12 @@ vect_get_num_copies (vec_info *vinfo, slp_tree node, tree vectype = NULL) else vf = 1; - if (node) - { - vf *= SLP_TREE_LANES (node); - if (!vectype) - vectype = SLP_TREE_VECTYPE (node); - } + vf *= SLP_TREE_LANES (node); + tree vectype = SLP_TREE_VECTYPE (node); return vect_get_num_vectors (vf, vectype); } -/* Return the number of copies needed for loop vectorization when - a statement operates on vectors of type VECTYPE. This is the - vectorization factor divided by the number of elements in - VECTYPE and is always known at compile time. */ - -inline unsigned int -vect_get_num_copies (loop_vec_info loop_vinfo, tree vectype) -{ - return vect_get_num_copies (loop_vinfo, NULL, vectype); -} - /* Update maximum unit count *MAX_NUNITS so that it accounts for NUNITS. *MAX_NUNITS can be 1 if we haven't yet recorded anything. */ @@ -2754,6 +2727,8 @@ extern bool vect_transform_slp_perm_load (vec_info *, slp_tree, const vec gimple_stmt_iterator *, poly_uint64, bool, unsigned *, unsigned * = nullptr, bool = false); +extern bool vectorizable_slp_permutation (vec_info *, gimple_stmt_iterator *, + slp_tree, stmt_vector_for_cost *); extern bool vect_slp_analyze_operations (vec_info *); extern void vect_schedule_slp (vec_info *, const vec &); extern opt_result vect_analyze_slp (vec_info *, unsigned, bool); diff --git a/gcc/tree.cc b/gcc/tree.cc index 905c2d6657fb..966da8052a43 100644 --- a/gcc/tree.cc +++ b/gcc/tree.cc @@ -3935,6 +3935,10 @@ staticp (tree arg) else return NULL; + case REALPART_EXPR: + case IMAGPART_EXPR: + return staticp (TREE_OPERAND (arg, 0)); + case COMPOUND_LITERAL_EXPR: return TREE_STATIC (COMPOUND_LITERAL_EXPR_DECL (arg)) ? arg : NULL; @@ -14704,7 +14708,7 @@ verify_type (const_tree t) int get_range_pos_neg (tree arg, gimple *stmt) { - if (arg == error_mark_node) + if (arg == error_mark_node || !INTEGRAL_TYPE_P (TREE_TYPE (arg))) return 3; int prec = TYPE_PRECISION (TREE_TYPE (arg)); @@ -15420,37 +15424,14 @@ get_attr_nonstring_decl (tree expr, tree *ref) return NULL_TREE; } -/* Return length of attribute names string, - if arglist chain > 1, -1 otherwise. */ - -int -get_target_clone_attr_len (tree arglist) -{ - tree arg; - int str_len_sum = 0; - int argnum = 0; - - for (arg = arglist; arg; arg = TREE_CHAIN (arg)) - { - const char *str = TREE_STRING_POINTER (TREE_VALUE (arg)); - size_t len = strlen (str); - str_len_sum += len + 1; - for (const char *p = strchr (str, TARGET_CLONES_ATTR_SEPARATOR); - p; - p = strchr (p + 1, TARGET_CLONES_ATTR_SEPARATOR)) - argnum++; - argnum++; - } - if (argnum <= 1) - return -1; - return str_len_sum; -} - /* Returns an auto_vec of string_slices containing the version strings from - ARGLIST. DEFAULT_COUNT is incremented for each default version found. */ + ARGLIST. DEFAULT_COUNT is incremented for each default version found. + If FILTER is true then any invalid versions strings are not included. */ auto_vec -get_clone_attr_versions (const tree arglist, int *default_count) +get_clone_attr_versions (const tree arglist, + int *default_count, + bool filter) { gcc_assert (TREE_CODE (arglist) == TREE_LIST); auto_vec versions; @@ -15466,6 +15447,9 @@ get_clone_attr_versions (const tree arglist, int *default_count) string_slice attr = string_slice::tokenize (&str, separators); attr = attr.strip (); + if (filter && !targetm.check_target_clone_version (attr, NULL)) + continue; + if (attr == "default" && default_count) (*default_count)++; versions.safe_push (attr); @@ -15476,15 +15460,16 @@ get_clone_attr_versions (const tree arglist, int *default_count) /* Returns an auto_vec of string_slices containing the version strings from the target_clone attribute from DECL. DEFAULT_COUNT is incremented for each - default version found. */ + default version found. If FILTER is true then any invalid versions strings + are not included. */ auto_vec -get_clone_versions (const tree decl, int *default_count) +get_clone_versions (const tree decl, int *default_count, bool filter) { tree attr = lookup_attribute ("target_clones", DECL_ATTRIBUTES (decl)); if (!attr) return auto_vec (); tree arglist = TREE_VALUE (attr); - return get_clone_attr_versions (arglist, default_count); + return get_clone_attr_versions (arglist, default_count, filter); } /* If DECL has a target_version attribute, returns a string_slice containing the @@ -15505,6 +15490,249 @@ get_target_version (const tree decl) .strip (); } +/* Returns true if FN1 and FN2 define disjoint function versions in an FMV + function set. That is, the two declarations are completely non-overlapping. + For target_version semantics, that means if one is a target clone and one is + a target version, the target_version must not be defined by the target_clone, + and for two target_clones, they must not define any of the same version. + + FN1 and FN2 should be function decls. */ + +bool +disjoint_version_decls (tree fn1, tree fn2) +{ + if (TREE_CODE (fn1) != FUNCTION_DECL + || TREE_CODE (fn2) != FUNCTION_DECL) + return false; + + if (TARGET_HAS_FMV_TARGET_ATTRIBUTE) + { + tree attr1 = lookup_attribute ("target", DECL_ATTRIBUTES (fn1)); + tree attr2 = lookup_attribute ("target", DECL_ATTRIBUTES (fn2)); + + /* At least one function decl should have the target attribute + specified. */ + if (attr1 == NULL_TREE && attr2 == NULL_TREE) + return false; + + /* Diagnose missing target attribute if one of the decls is already + multi-versioned. */ + if (attr1 == NULL_TREE || attr2 == NULL_TREE) + { + if (DECL_FUNCTION_VERSIONED (fn1) || DECL_FUNCTION_VERSIONED (fn2)) + { + if (attr2 != NULL_TREE) + { + std::swap (fn1, fn2); + attr1 = attr2; + } + auto_diagnostic_group d; + error_at (DECL_SOURCE_LOCATION (fn2), + "missing % attribute for multi-versioned %qD", + fn2); + inform (DECL_SOURCE_LOCATION (fn1), + "previous declaration of %qD", fn1); + /* Prevent diagnosing of the same error multiple times. */ + DECL_ATTRIBUTES (fn2) + = tree_cons (get_identifier ("target"), + copy_node (TREE_VALUE (attr1)), + DECL_ATTRIBUTES (fn2)); + } + return false; + } + + char *target1 = sorted_attr_string (TREE_VALUE (attr1)); + char *target2 = sorted_attr_string (TREE_VALUE (attr2)); + + /* The sorted target strings must be different for fn1 and fn2 + to be versions. */ + bool result = strcmp (target1, target2) != 0; + + XDELETEVEC (target1); + XDELETEVEC (target2); + + return result; + } + else + { + /* As this is symmetric, can remove the case where fn2 is target clone + and fn1 is target version by swapping here. */ + if (lookup_attribute ("target_clones", DECL_ATTRIBUTES (fn2))) + std::swap (fn1, fn2); + + if (lookup_attribute ("target_clones", DECL_ATTRIBUTES (fn1))) + { + auto_vec fn1_versions = get_clone_versions (fn1); + /* fn1 is target_clone. */ + if (lookup_attribute ("target_clones", DECL_ATTRIBUTES (fn2))) + { + /* Both are target_clone. */ + auto_vec fn2_versions = get_clone_versions (fn2); + for (string_slice v1 : fn1_versions) + { + for (string_slice v2 : fn2_versions) + if (targetm.target_option.same_function_versions (v1, v2)) + return false; + } + return true; + } + else + { + string_slice v2 = get_target_version (fn2); + + /* target and target_clones is always conflicting for target + semantics. */ + if (TARGET_HAS_FMV_TARGET_ATTRIBUTE) + return false; + + /* Only fn1 is target clone. */ + if (!v2.is_valid ()) + v2 = "default"; + for (string_slice v1 : fn1_versions) + if (targetm.target_option.same_function_versions (v1, v2)) + return false; + return true; + } + } + else + { + /* Both are target_version. */ + string_slice v1 = get_target_version (fn1); + string_slice v2 = get_target_version (fn2); + + if (!v1.is_valid () && !v2.is_valid ()) + return false; + + if (!v1.is_valid ()) + v1 = "default"; + if (!v2.is_valid ()) + v2 = "default"; + + if (targetm.target_option.same_function_versions (v1, v2)) + return false; + + return true; + } + } +} + +/* Check if the target_version/target_clones attributes are mergeable + for two decls, and if so returns false. + If they aren't mergeable, diagnose this and return true. + Only works for target_version semantics. */ +bool +diagnose_versioned_decls (tree old_decl, tree new_decl) +{ + gcc_assert (!TARGET_HAS_FMV_TARGET_ATTRIBUTE); + + string_slice old_target_attr = get_target_version (old_decl); + string_slice new_target_attr = get_target_version (new_decl); + + tree old_target_clones_attr = lookup_attribute ("target_clones", + DECL_ATTRIBUTES (old_decl)); + tree new_target_clones_attr = lookup_attribute ("target_clones", + DECL_ATTRIBUTES (new_decl)); + + /* If none of these are annotated, then it is mergeable. */ + if (!old_target_attr.is_valid () + && !old_target_attr.is_valid () + && !old_target_clones_attr + && !new_target_clones_attr) + return false; + + /* If fn1 is unnanotated and fn2 contains default, then is mergeable. */ + if (!old_target_attr.is_valid () + && !old_target_clones_attr + && is_function_default_version (new_decl)) + return false; + + /* If fn2 is unnanotated and fn1 contains default, then is mergeable. */ + if (!new_target_attr.is_valid () + && !new_target_clones_attr + && is_function_default_version (old_decl)) + return false; + + /* In the case where both are annotated with target_clones, only mergeable if + the two sets of target_clones imply the same set of versions. */ + if (old_target_clones_attr && new_target_clones_attr) + { + auto_vec fn1_versions = get_clone_versions (old_decl); + auto_vec fn2_versions = get_clone_versions (new_decl); + + bool mergeable = true; + + if (fn1_versions.length () != fn2_versions.length ()) + mergeable = false; + + /* Check both inclusion directions. */ + for (auto fn1v : fn1_versions) + { + bool matched = false; + for (auto fn2v : fn2_versions) + if (targetm.target_option.same_function_versions (fn1v, fn2v)) + matched = true; + if (!matched) + mergeable = false; + } + + for (auto fn2v : fn2_versions) + { + bool matched = false; + for (auto fn1v : fn1_versions) + if (targetm.target_option.same_function_versions (fn1v, fn2v)) + matched = true; + if (!matched) + mergeable = false; + } + + if (!mergeable) + { + error_at (DECL_SOURCE_LOCATION (new_decl), + "%qD conflicts with overlapping % " + "declaration", + new_decl); + inform (DECL_SOURCE_LOCATION (old_decl), + "previous declaration of %qD", old_decl); + return true; + } + + return false; + } + + /* If olddecl is target clones and newdecl is a target_version. + As they are not distinct this implies newdecl redefines a version of + olddecl. Not mergeable. */ + if (new_target_clones_attr) + { + gcc_assert (old_target_attr.is_valid ()); + + error_at (DECL_SOURCE_LOCATION (new_decl), + "%qD conflicts for version %qB", + new_decl, &old_target_attr); + inform (DECL_SOURCE_LOCATION (old_decl), + "previous declaration of %qD", + old_decl); + return true; + } + + if (old_target_clones_attr) + { + gcc_assert (new_target_attr.is_valid ()); + + error_at (DECL_SOURCE_LOCATION (new_decl), + "%qD conflicts with a previous declaration for version %qB", + new_decl, &new_target_attr); + inform (DECL_SOURCE_LOCATION (old_decl), + "previous declaration of %qD", + old_decl); + return true; + } + + /* The only remaining case is two target_version annotated decls. Must + be mergeable as otherwise are distinct. */ + return false; +} + void tree_cc_finalize (void) { diff --git a/gcc/tree.h b/gcc/tree.h index ce8c778087f9..4a4b8ef7f0a7 100644 --- a/gcc/tree.h +++ b/gcc/tree.h @@ -900,6 +900,19 @@ extern void omp_clause_range_check_failed (const_tree, const char *, int, #define UNUSED_LABEL_P(NODE) \ (LABEL_DECL_CHECK (NODE)->base.default_def_flag) +/* Label used to goto around artificial .DEFERRED_INIT code for + C++ -ftrivial-auto-var-init= purposes with a goto around it. + VACUOUS_INIT_LABEL_P flag is used on the lab LABEL_DECL in: + goto lab; + lab1: + v1 = .DEFERRED_INIT (...); + v2 = .DEFERRED_INIT (...); + lab2: + v3 = .DEFERRED_INIT (...); + lab: */ +#define VACUOUS_INIT_LABEL_P(NODE) \ + (LABEL_DECL_CHECK (NODE)->base.nothrow_flag) + /* Nonzero means this expression is volatile in the C sense: its address should be of type `volatile WHATEVER *'. In other words, the declared item is volatile qualified. @@ -5960,7 +5973,7 @@ tree_code_for_canonical_type_merging (enum tree_code code) return code; } -/* Return ture if get_alias_set care about TYPE_CANONICAL of given type. +/* Return true if get_alias_set care about TYPE_CANONICAL of given type. We don't define the types for pointers, arrays and vectors. The reason is that pointers are handled specially: ptr_type_node accesses conflict with accesses to all other pointers. This is done by alias.cc. @@ -7005,6 +7018,15 @@ fndecl_built_in_p (const_tree node, built_in_function name1, F... names) name1, names...)); } +/* Returns true if the function decl NODE is an alloca. */ +inline bool +fndecl_builtin_alloc_p (const_tree node) +{ + if (!fndecl_built_in_p (node, BUILT_IN_NORMAL)) + return false; + return ALLOCA_FUNCTION_CODE_P (DECL_FUNCTION_CODE (node)); +} + /* A struct for encapsulating location information about an operator and the operation built from it. @@ -7101,16 +7123,24 @@ extern unsigned fndecl_dealloc_argno (tree); object or pointer. Otherwise return null. */ extern tree get_attr_nonstring_decl (tree, tree * = NULL); -extern int get_target_clone_attr_len (tree); - /* Returns the version string for a decl with target_version attribute. Returns an invalid string_slice if no attribute is present. */ extern string_slice get_target_version (const tree); /* Returns a vector of the version strings from a target_clones attribute on - a decl. Can also record the number of default versions found. */ -extern auto_vec get_clone_versions (const tree, int * = NULL); + a decl. Can also record the number of default versions found. + Use bool to control whether or not the results should + be filtered with TARGET_CHECK_TARGET_CLONE_VERSION. */ +extern auto_vec get_clone_versions + (const tree,int * = NULL, bool = true); /* Returns a vector of the version strings from a target_clones attribute - directly. */ -extern auto_vec get_clone_attr_versions (const tree, int *); + directly. Additionally takes a bool to control whether or not the results + should be filtered with TARGET_CHECK_TARGET_CLONE_VERSION. */ +extern auto_vec get_clone_attr_versions + (const tree, int *, bool = true); + +/* Checks if two decls define any overlapping versions. */ +extern bool disjoint_version_decls (tree, tree); +/* Checks if two overlapping decls are not mergeable. */ +extern bool diagnose_versioned_decls (tree, tree); #endif /* GCC_TREE_H */ diff --git a/gcc/value-range.cc b/gcc/value-range.cc index dc6909e77c54..d34a2623db44 100644 --- a/gcc/value-range.cc +++ b/gcc/value-range.cc @@ -2552,22 +2552,19 @@ irange::intersect_bitmask (const irange &r) { gcc_checking_assert (!undefined_p () && !r.undefined_p ()); + // If the bitmasks are the same, do nothing. if (m_bitmask == r.m_bitmask) return false; irange_bitmask bm = get_bitmask (); irange_bitmask save = bm; bm.intersect (r.get_bitmask ()); - // Use ths opportunity to make sure mask always reflects the - // best mask we have. - m_bitmask = bm; - // Updating m_bitmask may still yield a semantic bitmask (as - // returned by get_bitmask) which is functionally equivalent to what - // we originally had. In which case, there's still no change. - if (save == bm || save == get_bitmask ()) + // If the new mask is the same, there is no change. + if (m_bitmask == bm) return false; + m_bitmask = bm; if (!set_range_from_bitmask ()) normalize_kind (); if (flag_checking) diff --git a/gcc/vr-values.cc b/gcc/vr-values.cc index ff11656559bf..44dff35bcf29 100644 --- a/gcc/vr-values.cc +++ b/gcc/vr-values.cc @@ -278,14 +278,14 @@ range_from_loop_direction (irange &r, tree type, r.set_varying (type); else if (dir == EV_DIR_GROWS) { - if (wi::gt_p (begin.lower_bound (), end.upper_bound (), sign)) + if (wi::ge_p (begin.lower_bound (), end.upper_bound (), sign)) r.set_varying (type); else r = int_range<1> (type, begin.lower_bound (), end.upper_bound ()); } else { - if (wi::gt_p (end.lower_bound (), begin.upper_bound (), sign)) + if (wi::ge_p (end.lower_bound (), begin.upper_bound (), sign)) r.set_varying (type); else r = int_range<1> (type, end.lower_bound (), begin.upper_bound ()); diff --git a/libatomic/ChangeLog b/libatomic/ChangeLog index f9bbaae7f33f..1cc0e86c0452 100644 --- a/libatomic/ChangeLog +++ b/libatomic/ChangeLog @@ -1,3 +1,10 @@ +2025-10-05 Sam James + + * Makefile.in: Regenerate. + * aclocal.m4: Regenerate. + * configure: Regenerate. + * testsuite/Makefile.in: Regenerate. + 2025-07-31 Yury Khrustalev * config/linux/aarch64/host-config.h (__ifunc_arg_t): diff --git a/libatomic/Makefile.am b/libatomic/Makefile.am index 65dff6ece9ff..6dde874fa388 100644 --- a/libatomic/Makefile.am +++ b/libatomic/Makefile.am @@ -69,7 +69,7 @@ libatomic_darwin_rpath += -Wl,-rpath,@loader_path endif libatomic_la_LDFLAGS = $(libatomic_version_info) $(libatomic_version_script) \ - $(lt_host_flags) $(libatomic_darwin_rpath) + -Wc,-fno-link-libatomic $(lt_host_flags) $(libatomic_darwin_rpath) SIZES = @SIZES@ @@ -168,6 +168,19 @@ libatomic_convenience_la_LIBADD = $(libatomic_la_LIBADD) # when it is reloaded during the build of all-multi. all-multi: $(libatomic_la_LIBADD) +# Copy built libatomic library to $build/gcc so it's easier to locate, +# similar to libgcc. +# +# FIXME: libtool --mode=install also ends up copying libatomic.la in $gcc_objdir, +# which (somehow) ends up adding $gcc_objdir to RPATH for libraries that get +# built after libatomic, which makes RPATH insecure. Removing libatomic.la +# from $gcc_objdir seems to fix the issue. + +gcc_objdir = `pwd`/$(MULTIBUILDTOP)../../gcc/ +all-local: libatomic.la + $(LIBTOOL) --mode=install $(INSTALL_DATA) libatomic.la $(gcc_objdir)$(MULTISUBDIR)/ + rm $(gcc_objdir)$(MULTISUBDIR)/libatomic.la + # target overrides -include $(tmake_file) diff --git a/libatomic/Makefile.in b/libatomic/Makefile.in index 4344ac4a2e8f..be06e38e7235 100644 --- a/libatomic/Makefile.in +++ b/libatomic/Makefile.in @@ -104,7 +104,9 @@ target_triplet = @target@ subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/depstand.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ $(top_srcdir)/../config/lthostflags.m4 \ $(top_srcdir)/../config/multi.m4 \ @@ -309,6 +311,7 @@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ @@ -429,7 +432,7 @@ libatomic_version_info = -version-info $(libtool_VERSION) @ENABLE_DARWIN_AT_RPATH_TRUE@ -Wc,-nodefaultrpaths \ @ENABLE_DARWIN_AT_RPATH_TRUE@ -Wl,-rpath,@loader_path libatomic_la_LDFLAGS = $(libatomic_version_info) $(libatomic_version_script) \ - $(lt_host_flags) $(libatomic_darwin_rpath) + -Wc,-fno-link-libatomic $(lt_host_flags) $(libatomic_darwin_rpath) @PARTIAL_VXWORKS_FALSE@libatomic_la_SOURCES = gload.c gstore.c gcas.c \ @PARTIAL_VXWORKS_FALSE@ gexch.c glfree.c lock.c init.c fenv.c \ @@ -471,6 +474,15 @@ libatomic_la_LDFLAGS = $(libatomic_version_info) $(libatomic_version_script) \ @ARCH_X86_64_TRUE@@HAVE_IFUNC_TRUE@@PARTIAL_VXWORKS_FALSE@IFUNC_OPTIONS = -mcx16 -mcx16 libatomic_convenience_la_SOURCES = $(libatomic_la_SOURCES) libatomic_convenience_la_LIBADD = $(libatomic_la_LIBADD) + +# Copy built libatomic library to $build/gcc so it's easier to locate, +# similar to libgcc. +# +# FIXME: libtool --mode=install also ends up copying libatomic.la in $gcc_objdir, +# which (somehow) ends up adding $gcc_objdir to RPATH for libraries that get +# built after libatomic, which makes RPATH insecure. Removing libatomic.la +# from $gcc_objdir seems to fix the issue. +gcc_objdir = `pwd`/$(MULTIBUILDTOP)../../gcc/ MULTISRCTOP = MULTIBUILDTOP = MULTIDIRS = @@ -914,6 +926,9 @@ vpath % $(strip $(search_path)) # makefile fragments to avoid broken *.Ppo getting included into the Makefile # when it is reloaded during the build of all-multi. all-multi: $(libatomic_la_LIBADD) +all-local: libatomic.la + $(LIBTOOL) --mode=install $(INSTALL_DATA) libatomic.la $(gcc_objdir)$(MULTISUBDIR)/ + rm $(gcc_objdir)$(MULTISUBDIR)/libatomic.la # target overrides -include $(tmake_file) diff --git a/libatomic/aclocal.m4 b/libatomic/aclocal.m4 index 80e24219d7d1..91bff17e5ea6 100644 --- a/libatomic/aclocal.m4 +++ b/libatomic/aclocal.m4 @@ -1188,7 +1188,9 @@ AC_SUBST([am__untar]) ]) # _AM_PROG_TAR m4_include([../config/acx.m4]) +m4_include([../config/clang-plugin.m4]) m4_include([../config/depstand.m4]) +m4_include([../config/gcc-plugin.m4]) m4_include([../config/lead-dot.m4]) m4_include([../config/lthostflags.m4]) m4_include([../config/multi.m4]) diff --git a/libatomic/configure b/libatomic/configure index 67b3a6388d7f..cd9fcdb15181 100755 --- a/libatomic/configure +++ b/libatomic/configure @@ -669,12 +669,13 @@ MAINTAINER_MODE_TRUE enable_static enable_shared lt_host_flags -CPP OTOOL64 OTOOL LIPO NMEDIT DSYMUTIL +LLVM_CONFIG +CPP OBJDUMP LN_S ac_ct_DUMPBIN @@ -1612,6 +1613,43 @@ fi } # ac_fn_c_try_compile +# ac_fn_c_try_cpp LINENO +# ---------------------- +# Try to preprocess conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } > conftest.i && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_cpp + # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. @@ -1689,43 +1727,6 @@ $as_echo "$ac_res" >&6; } } # ac_fn_c_check_header_compile -# ac_fn_c_try_cpp LINENO -# ---------------------- -# Try to preprocess conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_cpp () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } > conftest.i && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_c_try_cpp - # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes @@ -3417,6 +3418,26 @@ esac # the wrong, non-multilib-adjusted value will be used in multilibs. # As a side effect, we have to subst CFLAGS ourselves. +# AC_PROG_CC sets CFLAGS to "-g -O2" by default (if unset), and +# then compile conftests with default CFLAGS, leaving no place to temporarily +# modify CFLAGS and restore them later. However we need to pass +# -fno-link-libatomic in CFLAGS so conftests compiled in AC_PROG_CC don't fail. +# Assert that CFLAGS is always set by user so the default setting of CFLAGS by +# AC_PROG_CC won't be applicable anyway. +if test -z "${CFLAGS}"; then + as_fn_error $? "CFLAGS must be set." "$LINENO" 5 +fi + +# In order to override CFLAGS_FOR_TARGET, all of our special flags go +# in XCFLAGS. But we need them in CFLAGS during configury. So put them +# in both places for now and restore CFLAGS at the end of config. +__libatomic_save_CFLAGS__="$CFLAGS" + +# Append -fno-link-libatomic to avoid automatically linking libatomic, +# while building libatomic itself. +XCFLAGS="$XCFLAGS -fno-link-libatomic" +CFLAGS="$__libatomic_save_CFLAGS__ $XCFLAGS" + ac_ext=c @@ -4595,11 +4616,6 @@ fi -# In order to override CFLAGS_FOR_TARGET, all of our special flags go -# in XCFLAGS. But we need them in CFLAGS during configury. So put them -# in both places for now and restore CFLAGS at the end of config. -save_CFLAGS="$CFLAGS" - # Find other programs we need. if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. @@ -6143,36 +6159,545 @@ vxworks*) esac fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 -$as_echo "$lt_cv_deplibs_check_method" >&6; } -file_magic_cmd=$lt_cv_file_magic_cmd -deplibs_check_method=$lt_cv_deplibs_check_method -test -z "$deplibs_check_method" && deplibs_check_method=unknown - - - - - - - - +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 +$as_echo "$lt_cv_deplibs_check_method" >&6; } +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method +test -z "$deplibs_check_method" && deplibs_check_method=unknown + + + + + + + + + + + + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +$as_echo_n "checking how to run the C preprocessor... " >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if ${ac_cv_prog_CPP+:} false; then : + $as_echo_n "(cached) " >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi + + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +$as_echo "$CPP" >&6; } +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details" "$LINENO" 5; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + +# Try CLANG_PLUGIN_FILE first since GCC_PLUGIN_OPTION may return the +# wrong plugin_option with clang. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang" >&5 +$as_echo_n "checking for clang... " >&6; } +if ${clang_cv_is_clang+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifdef __clang__ + yes +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "yes" >/dev/null 2>&1; then : + clang_cv_is_clang=yes +else + clang_cv_is_clang=no +fi +rm -f conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $clang_cv_is_clang" >&5 +$as_echo "$clang_cv_is_clang" >&6; } + plugin_file= + if test $clang_cv_is_clang = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang plugin file" >&5 +$as_echo_n "checking for clang plugin file... " >&6; } + plugin_names="LLVMgold.so" + for plugin in $plugin_names; do + plugin_file=`${CC} ${CFLAGS} --print-file-name $plugin` + if test x$plugin_file = x$plugin; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}llvm-config", so it can be a program name with args. +set dummy ${ac_tool_prefix}llvm-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_LLVM_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$LLVM_CONFIG"; then + ac_cv_prog_LLVM_CONFIG="$LLVM_CONFIG" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_LLVM_CONFIG="${ac_tool_prefix}llvm-config" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +LLVM_CONFIG=$ac_cv_prog_LLVM_CONFIG +if test -n "$LLVM_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LLVM_CONFIG" >&5 +$as_echo "$LLVM_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_LLVM_CONFIG"; then + ac_ct_LLVM_CONFIG=$LLVM_CONFIG + # Extract the first word of "llvm-config", so it can be a program name with args. +set dummy llvm-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_LLVM_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_LLVM_CONFIG"; then + ac_cv_prog_ac_ct_LLVM_CONFIG="$ac_ct_LLVM_CONFIG" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_LLVM_CONFIG="llvm-config" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_LLVM_CONFIG=$ac_cv_prog_ac_ct_LLVM_CONFIG +if test -n "$ac_ct_LLVM_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LLVM_CONFIG" >&5 +$as_echo "$ac_ct_LLVM_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_LLVM_CONFIG" = x; then + LLVM_CONFIG="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + LLVM_CONFIG=$ac_ct_LLVM_CONFIG + fi +else + LLVM_CONFIG="$ac_cv_prog_LLVM_CONFIG" +fi + + if test "$?" != 0; then + as_fn_error $? "Required tool 'llvm-config' not found on PATH." "$LINENO" 5 + fi + clang_lib_dir=`$LLVM_CONFIG --libdir` + if test -f $clang_lib_dir/$plugin; then + plugin_file=$clang_lib_dir/$plugin + fi + if test x$plugin_file != x$plugin; then + break; + fi + fi + done + if test -z $plugin_file; then + as_fn_error $? "Couldn't find clang plugin file for $CC." "$LINENO" 5 + fi + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + + if test "${AR}" = "" ; then + as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5 + fi + plugin_option="--plugin $plugin_file" + touch conftest.c + ${AR} $plugin_option rc conftest.a conftest.c + if test "$?" != 0; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 +$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} + plugin_file= + fi + rm -f conftest.* + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_file" >&5 +$as_echo "$plugin_file" >&6; } + fi + plugin_file="$plugin_file" + +if test -n "$plugin_file"; then + plugin_option="--plugin $plugin_file" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -plugin option" >&5 +$as_echo_n "checking for -plugin option... " >&6; } + +plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll" +plugin_option= +for plugin in $plugin_names; do + plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin` + if test x$plugin_so = x$plugin; then + plugin_so=`${CC} ${CFLAGS} --print-file-name $plugin` + fi + if test x$plugin_so != x$plugin; then + plugin_option="--plugin $plugin_so" + break + fi +done +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi -plugin_option= -plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll" -for plugin in $plugin_names; do - plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin` - if test x$plugin_so = x$plugin; then - plugin_so=`${CC} ${CFLAGS} --print-file-name $plugin` - fi - if test x$plugin_so != x$plugin; then - plugin_option="--plugin $plugin_so" - break + if test "x$ac_ct_AR" = x; then + AR="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR fi -done +else + AR="$ac_cv_prog_AR" +fi + +if test "${AR}" = "" ; then + as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5 +fi +touch conftest.c +${AR} $plugin_option rc conftest.a conftest.c +if test "$?" != 0; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 +$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} + plugin_option= +fi +rm -f conftest.* +if test -n "$plugin_option"; then + plugin_option="$plugin_option" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_option" >&5 +$as_echo "$plugin_option" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. set dummy ${ac_tool_prefix}ar; ac_word=$2 @@ -6267,17 +6792,15 @@ fi test -z "$AR" && AR=ar if test -n "$plugin_option"; then - if $AR --help 2>&1 | grep -q "\--plugin"; then - touch conftest.c - $AR $plugin_option rc conftest.a conftest.c - if test "$?" != 0; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 -$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} - else + case "$AR" in + *"$plugin_option"*) + ;; + *) + if $AR --help 2>&1 | grep -q "\--plugin"; then AR="$AR $plugin_option" fi - rm -f conftest.* - fi + ;; + esac fi test -z "$AR_FLAGS" && AR_FLAGS=cru @@ -6484,9 +7007,15 @@ fi test -z "$RANLIB" && RANLIB=: if test -n "$plugin_option" && test "$RANLIB" != ":"; then - if $RANLIB --help 2>&1 | grep -q "\--plugin"; then - RANLIB="$RANLIB $plugin_option" - fi + case "$RANLIB" in + *"$plugin_option"*) + ;; + *) + if $RANLIB --help 2>&1 | grep -q "\--plugin"; then + RANLIB="$RANLIB $plugin_option" + fi + ;; + esac fi @@ -6813,7 +7342,6 @@ fi - # Check whether --enable-libtool-lock was given. @@ -7639,144 +8167,6 @@ $as_echo "$lt_cv_ld_force_load" >&6; } ;; esac -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 -$as_echo_n "checking how to run the C preprocessor... " >&6; } -# On Suns, sometimes $CPP names a directory. -if test -n "$CPP" && test -d "$CPP"; then - CPP= -fi -if test -z "$CPP"; then - if ${ac_cv_prog_CPP+:} false; then : - $as_echo_n "(cached) " >&6 -else - # Double quotes because CPP needs to be expanded - for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" - do - ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - break -fi - - done - ac_cv_prog_CPP=$CPP - -fi - CPP=$ac_cv_prog_CPP -else - ac_cv_prog_CPP=$CPP -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 -$as_echo "$CPP" >&6; } -ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "C preprocessor \"$CPP\" fails sanity check -See \`config.log' for more details" "$LINENO" 5; } -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : @@ -11458,7 +11848,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 11461 "configure" +#line 11851 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -11564,7 +11954,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 11567 "configure" +#line 11957 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -11958,7 +12348,7 @@ _ACEOF # Disable fallbacks to __sync routines from libgcc. Otherwise we'll # make silly decisions about what the cpu can do. -CFLAGS="$save_CFLAGS -fno-sync-libcalls $XCFLAGS" +CFLAGS="$__libatomic_save_CFLAGS__ -fno-sync-libcalls $XCFLAGS" # Check header files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 @@ -14979,7 +15369,7 @@ _ACEOF if ac_fn_c_try_link "$LINENO"; then : XPCFLAGS=" -pthread" else - CFLAGS="$save_CFLAGS $XCFLAGS" LIBS="-lpthread $LIBS" + CFLAGS="$__libatomic_save_CFLAGS__ $XCFLAGS" LIBS="-lpthread $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -15002,7 +15392,7 @@ rm -f core conftest.err conftest.$ac_objext \ fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext - CFLAGS="$save_CFLAGS $XPCFLAGS" + CFLAGS="$__libatomic_save_CFLAGS__ $XPCFLAGS $XCFLAGS" ;; esac @@ -15577,7 +15967,7 @@ $as_echo "$as_me: versioning on shared library symbols is $enable_symvers" >&6;} # Cleanup and exit. -CFLAGS="$save_CFLAGS" +CFLAGS="$__libatomic_save_CFLAGS__" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure diff --git a/libatomic/configure.ac b/libatomic/configure.ac index 01141f643769..ded382233562 100644 --- a/libatomic/configure.ac +++ b/libatomic/configure.ac @@ -129,6 +129,26 @@ AC_SUBST(toolexeclibdir) # the wrong, non-multilib-adjusted value will be used in multilibs. # As a side effect, we have to subst CFLAGS ourselves. +# AC_PROG_CC sets CFLAGS to "-g -O2" by default (if unset), and +# then compile conftests with default CFLAGS, leaving no place to temporarily +# modify CFLAGS and restore them later. However we need to pass +# -fno-link-libatomic in CFLAGS so conftests compiled in AC_PROG_CC don't fail. +# Assert that CFLAGS is always set by user so the default setting of CFLAGS by +# AC_PROG_CC won't be applicable anyway. +if test -z "${CFLAGS}"; then + AC_MSG_ERROR([CFLAGS must be set.]) +fi + +# In order to override CFLAGS_FOR_TARGET, all of our special flags go +# in XCFLAGS. But we need them in CFLAGS during configury. So put them +# in both places for now and restore CFLAGS at the end of config. +__libatomic_save_CFLAGS__="$CFLAGS" + +# Append -fno-link-libatomic to avoid automatically linking libatomic, +# while building libatomic itself. +XCFLAGS="$XCFLAGS -fno-link-libatomic" +CFLAGS="$__libatomic_save_CFLAGS__ $XCFLAGS" + m4_rename([_AC_ARG_VAR_PRECIOUS],[real_PRECIOUS]) m4_define([_AC_ARG_VAR_PRECIOUS],[]) AC_PROG_CC @@ -137,11 +157,6 @@ m4_rename_force([real_PRECIOUS],[_AC_ARG_VAR_PRECIOUS]) AC_SUBST(CFLAGS) -# In order to override CFLAGS_FOR_TARGET, all of our special flags go -# in XCFLAGS. But we need them in CFLAGS during configury. So put them -# in both places for now and restore CFLAGS at the end of config. -save_CFLAGS="$CFLAGS" - # Find other programs we need. AC_CHECK_TOOL(AR, ar) AC_CHECK_TOOL(NM, nm) @@ -189,7 +204,7 @@ AC_DEFINE_UNQUOTED(IFUNC_RESOLVER_ARGS, $IFUNC_RESOLVER_ARGS, # Disable fallbacks to __sync routines from libgcc. Otherwise we'll # make silly decisions about what the cpu can do. -CFLAGS="$save_CFLAGS -fno-sync-libcalls $XCFLAGS" +CFLAGS="$__libatomic_save_CFLAGS__ -fno-sync-libcalls $XCFLAGS" # Check header files. AC_STDC_HEADERS @@ -230,7 +245,7 @@ case " $config_path " in void *g(void *d) { return NULL; }], [pthread_t t; pthread_create(&t,NULL,g,NULL);])], [XPCFLAGS=" -pthread"], - [CFLAGS="$save_CFLAGS $XCFLAGS" LIBS="-lpthread $LIBS" + [CFLAGS="$__libatomic_save_CFLAGS__ $XCFLAGS" LIBS="-lpthread $LIBS" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [#include @@ -238,7 +253,7 @@ case " $config_path " in [pthread_t t; pthread_create(&t,NULL,g,NULL);])], [], [AC_MSG_ERROR([Pthreads are required to build libatomic])])]) - CFLAGS="$save_CFLAGS $XPCFLAGS" + CFLAGS="$__libatomic_save_CFLAGS__ $XPCFLAGS $XCFLAGS" ;; esac @@ -254,7 +269,7 @@ fi LIBAT_ENABLE_SYMVERS # Cleanup and exit. -CFLAGS="$save_CFLAGS" +CFLAGS="$__libatomic_save_CFLAGS__" AC_CACHE_SAVE AC_ARG_ENABLE([werror], diff --git a/libatomic/testsuite/Makefile.in b/libatomic/testsuite/Makefile.in index 247268f19490..f540a7523077 100644 --- a/libatomic/testsuite/Makefile.in +++ b/libatomic/testsuite/Makefile.in @@ -91,7 +91,9 @@ target_triplet = @target@ subdir = testsuite ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/depstand.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ $(top_srcdir)/../config/lthostflags.m4 \ $(top_srcdir)/../config/multi.m4 \ @@ -171,6 +173,7 @@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ diff --git a/libbacktrace/ChangeLog b/libbacktrace/ChangeLog index 87abec9134e8..fc2ba89aea8f 100644 --- a/libbacktrace/ChangeLog +++ b/libbacktrace/ChangeLog @@ -1,3 +1,13 @@ +2025-10-02 H.J. Lu + + * Makefile.in: Regenerated. + * aclocal.m4: Likewise. + * configure: Likewise. + +2025-09-28 Ian Lance Taylor + + * filetype.awk: Recognize PE bigobj objects at configure time. + 2025-04-10 John David Anglin * fileline.c (hpux_get_executable_path): New. diff --git a/libbacktrace/Makefile.in b/libbacktrace/Makefile.in index 9a9b8a441dda..43d9bb54260e 100644 --- a/libbacktrace/Makefile.in +++ b/libbacktrace/Makefile.in @@ -171,7 +171,9 @@ TESTS = $(am__append_4) $(MAKETESTS) $(am__EXEEXT_17) subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/cet.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/enable.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ $(top_srcdir)/../config/multi.m4 \ $(top_srcdir)/../config/override.m4 \ @@ -904,6 +906,7 @@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ diff --git a/libbacktrace/aclocal.m4 b/libbacktrace/aclocal.m4 index 528e61739304..df92f64c55b9 100644 --- a/libbacktrace/aclocal.m4 +++ b/libbacktrace/aclocal.m4 @@ -853,7 +853,9 @@ AC_SUBST([am__untar]) ]) # _AM_PROG_TAR m4_include([../config/cet.m4]) +m4_include([../config/clang-plugin.m4]) m4_include([../config/enable.m4]) +m4_include([../config/gcc-plugin.m4]) m4_include([../config/lead-dot.m4]) m4_include([../config/multi.m4]) m4_include([../config/override.m4]) diff --git a/libbacktrace/configure b/libbacktrace/configure index 85be043009af..b956afe8c345 100755 --- a/libbacktrace/configure +++ b/libbacktrace/configure @@ -691,6 +691,7 @@ LIPO NMEDIT DSYMUTIL AR +LLVM_CONFIG OBJDUMP LN_S NM @@ -2739,7 +2740,6 @@ test -n "$target_alias" && test "$program_prefix$program_suffix$program_transform_name" = \ NONENONEs,x,x, && program_prefix=${target_alias}- - target_alias=${target_alias-$host_alias} # Expand $ac_aux_dir to an absolute path. @@ -6606,8 +6606,266 @@ test -z "$deplibs_check_method" && deplibs_check_method=unknown -plugin_option= + +# Try CLANG_PLUGIN_FILE first since GCC_PLUGIN_OPTION may return the +# wrong plugin_option with clang. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang" >&5 +$as_echo_n "checking for clang... " >&6; } +if ${clang_cv_is_clang+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifdef __clang__ + yes +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "yes" >/dev/null 2>&1; then : + clang_cv_is_clang=yes +else + clang_cv_is_clang=no +fi +rm -f conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $clang_cv_is_clang" >&5 +$as_echo "$clang_cv_is_clang" >&6; } + plugin_file= + if test $clang_cv_is_clang = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang plugin file" >&5 +$as_echo_n "checking for clang plugin file... " >&6; } + plugin_names="LLVMgold.so" + for plugin in $plugin_names; do + plugin_file=`${CC} ${CFLAGS} --print-file-name $plugin` + if test x$plugin_file = x$plugin; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}llvm-config", so it can be a program name with args. +set dummy ${ac_tool_prefix}llvm-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_LLVM_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$LLVM_CONFIG"; then + ac_cv_prog_LLVM_CONFIG="$LLVM_CONFIG" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_LLVM_CONFIG="${ac_tool_prefix}llvm-config" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +LLVM_CONFIG=$ac_cv_prog_LLVM_CONFIG +if test -n "$LLVM_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LLVM_CONFIG" >&5 +$as_echo "$LLVM_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_LLVM_CONFIG"; then + ac_ct_LLVM_CONFIG=$LLVM_CONFIG + # Extract the first word of "llvm-config", so it can be a program name with args. +set dummy llvm-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_LLVM_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_LLVM_CONFIG"; then + ac_cv_prog_ac_ct_LLVM_CONFIG="$ac_ct_LLVM_CONFIG" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_LLVM_CONFIG="llvm-config" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_LLVM_CONFIG=$ac_cv_prog_ac_ct_LLVM_CONFIG +if test -n "$ac_ct_LLVM_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LLVM_CONFIG" >&5 +$as_echo "$ac_ct_LLVM_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_LLVM_CONFIG" = x; then + LLVM_CONFIG="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + LLVM_CONFIG=$ac_ct_LLVM_CONFIG + fi +else + LLVM_CONFIG="$ac_cv_prog_LLVM_CONFIG" +fi + + if test "$?" != 0; then + as_fn_error $? "Required tool 'llvm-config' not found on PATH." "$LINENO" 5 + fi + clang_lib_dir=`$LLVM_CONFIG --libdir` + if test -f $clang_lib_dir/$plugin; then + plugin_file=$clang_lib_dir/$plugin + fi + if test x$plugin_file != x$plugin; then + break; + fi + fi + done + if test -z $plugin_file; then + as_fn_error $? "Couldn't find clang plugin file for $CC." "$LINENO" 5 + fi + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + + if test "${AR}" = "" ; then + as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5 + fi + plugin_option="--plugin $plugin_file" + touch conftest.c + ${AR} $plugin_option rc conftest.a conftest.c + if test "$?" != 0; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 +$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} + plugin_file= + fi + rm -f conftest.* + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_file" >&5 +$as_echo "$plugin_file" >&6; } + fi + plugin_file="$plugin_file" + +if test -n "$plugin_file"; then + plugin_option="--plugin $plugin_file" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -plugin option" >&5 +$as_echo_n "checking for -plugin option... " >&6; } + plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll" +plugin_option= for plugin in $plugin_names; do plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin` if test x$plugin_so = x$plugin; then @@ -6618,7 +6876,119 @@ for plugin in $plugin_names; do break fi done +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + +if test "${AR}" = "" ; then + as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5 +fi +touch conftest.c +${AR} $plugin_option rc conftest.a conftest.c +if test "$?" != 0; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 +$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} + plugin_option= +fi +rm -f conftest.* +if test -n "$plugin_option"; then + plugin_option="$plugin_option" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_option" >&5 +$as_echo "$plugin_option" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + +fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. set dummy ${ac_tool_prefix}ar; ac_word=$2 @@ -6713,17 +7083,15 @@ fi test -z "$AR" && AR=ar if test -n "$plugin_option"; then - if $AR --help 2>&1 | grep -q "\--plugin"; then - touch conftest.c - $AR $plugin_option rc conftest.a conftest.c - if test "$?" != 0; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 -$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} - else + case "$AR" in + *"$plugin_option"*) + ;; + *) + if $AR --help 2>&1 | grep -q "\--plugin"; then AR="$AR $plugin_option" fi - rm -f conftest.* - fi + ;; + esac fi test -z "$AR_FLAGS" && AR_FLAGS=cru @@ -6930,9 +7298,15 @@ fi test -z "$RANLIB" && RANLIB=: if test -n "$plugin_option" && test "$RANLIB" != ":"; then - if $RANLIB --help 2>&1 | grep -q "\--plugin"; then - RANLIB="$RANLIB $plugin_option" - fi + case "$RANLIB" in + *"$plugin_option"*) + ;; + *) + if $RANLIB --help 2>&1 | grep -q "\--plugin"; then + RANLIB="$RANLIB $plugin_option" + fi + ;; + esac fi @@ -11636,7 +12010,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 11639 "configure" +#line 12013 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -11742,7 +12116,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 11745 "configure" +#line 12119 "configure" #include "confdefs.h" #if HAVE_DLFCN_H diff --git a/libbacktrace/configure.ac b/libbacktrace/configure.ac index 6549cdeacf4f..0a5e04fcdf77 100644 --- a/libbacktrace/configure.ac +++ b/libbacktrace/configure.ac @@ -37,7 +37,8 @@ if test -n "${with_target_subdir}"; then AM_ENABLE_MULTILIB(, ..) fi -AC_CANONICAL_SYSTEM +AC_CANONICAL_HOST +AC_CANONICAL_TARGET target_alias=${target_alias-$host_alias} AC_USE_SYSTEM_EXTENSIONS diff --git a/libbacktrace/filetype.awk b/libbacktrace/filetype.awk index 1eefa7e72f0e..30349046efd8 100644 --- a/libbacktrace/filetype.awk +++ b/libbacktrace/filetype.awk @@ -3,6 +3,7 @@ /^\177ELF\002/ { if (NR == 1) { print "elf64"; exit } } /^\114\001/ { if (NR == 1) { print "pecoff"; exit } } /^\144\206/ { if (NR == 1) { print "pecoff"; exit } } +/^\000\000\377\377/ { if (NR == 1) { print "pecoff"; exit } } /^\001\337/ { if (NR == 1) { print "xcoff32"; exit } } /^\001\367/ { if (NR == 1) { print "xcoff64"; exit } } /^\376\355\372\316/ { if (NR == 1) { print "macho"; exit } } diff --git a/libcc1/ChangeLog b/libcc1/ChangeLog index bd1394ae4b6f..b82fc530cacb 100644 --- a/libcc1/ChangeLog +++ b/libcc1/ChangeLog @@ -1,3 +1,14 @@ +2025-10-05 Sam James + + * Makefile.in: Regenerate. + * aclocal.m4: Regenerate. + +2025-10-02 H.J. Lu + + * Makefile.in: Regenerated. + * aclocal.m4: Likewise. + * configure: Likewise. + 2025-07-25 David Malcolm * context.cc: Update usage of "diagnostic_info" to explicitly diff --git a/libcc1/Makefile.in b/libcc1/Makefile.in index 9d56a8323b05..d154bd45c5e6 100644 --- a/libcc1/Makefile.in +++ b/libcc1/Makefile.in @@ -94,6 +94,7 @@ subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ $(top_srcdir)/../config/cet.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/depstand.m4 \ $(top_srcdir)/../config/enable.m4 \ $(top_srcdir)/../config/gcc-plugin.m4 \ @@ -284,6 +285,7 @@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ diff --git a/libcc1/aclocal.m4 b/libcc1/aclocal.m4 index 2348721062e4..171045274a53 100644 --- a/libcc1/aclocal.m4 +++ b/libcc1/aclocal.m4 @@ -1169,6 +1169,7 @@ AC_SUBST([am__untar]) m4_include([../config/acx.m4]) m4_include([../config/cet.m4]) +m4_include([../config/clang-plugin.m4]) m4_include([../config/depstand.m4]) m4_include([../config/enable.m4]) m4_include([../config/gcc-plugin.m4]) diff --git a/libcc1/configure b/libcc1/configure index ea689a353c8e..685f2abe178e 100755 --- a/libcc1/configure +++ b/libcc1/configure @@ -660,6 +660,7 @@ NMEDIT DSYMUTIL RANLIB AR +LLVM_CONFIG OBJDUMP LN_S NM @@ -5861,8 +5862,266 @@ test -z "$deplibs_check_method" && deplibs_check_method=unknown -plugin_option= + +# Try CLANG_PLUGIN_FILE first since GCC_PLUGIN_OPTION may return the +# wrong plugin_option with clang. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang" >&5 +$as_echo_n "checking for clang... " >&6; } +if ${clang_cv_is_clang+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifdef __clang__ + yes +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "yes" >/dev/null 2>&1; then : + clang_cv_is_clang=yes +else + clang_cv_is_clang=no +fi +rm -f conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $clang_cv_is_clang" >&5 +$as_echo "$clang_cv_is_clang" >&6; } + plugin_file= + if test $clang_cv_is_clang = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang plugin file" >&5 +$as_echo_n "checking for clang plugin file... " >&6; } + plugin_names="LLVMgold.so" + for plugin in $plugin_names; do + plugin_file=`${CC} ${CFLAGS} --print-file-name $plugin` + if test x$plugin_file = x$plugin; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}llvm-config", so it can be a program name with args. +set dummy ${ac_tool_prefix}llvm-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_LLVM_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$LLVM_CONFIG"; then + ac_cv_prog_LLVM_CONFIG="$LLVM_CONFIG" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_LLVM_CONFIG="${ac_tool_prefix}llvm-config" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +LLVM_CONFIG=$ac_cv_prog_LLVM_CONFIG +if test -n "$LLVM_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LLVM_CONFIG" >&5 +$as_echo "$LLVM_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_LLVM_CONFIG"; then + ac_ct_LLVM_CONFIG=$LLVM_CONFIG + # Extract the first word of "llvm-config", so it can be a program name with args. +set dummy llvm-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_LLVM_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_LLVM_CONFIG"; then + ac_cv_prog_ac_ct_LLVM_CONFIG="$ac_ct_LLVM_CONFIG" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_LLVM_CONFIG="llvm-config" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_LLVM_CONFIG=$ac_cv_prog_ac_ct_LLVM_CONFIG +if test -n "$ac_ct_LLVM_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LLVM_CONFIG" >&5 +$as_echo "$ac_ct_LLVM_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_LLVM_CONFIG" = x; then + LLVM_CONFIG="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + LLVM_CONFIG=$ac_ct_LLVM_CONFIG + fi +else + LLVM_CONFIG="$ac_cv_prog_LLVM_CONFIG" +fi + + if test "$?" != 0; then + as_fn_error $? "Required tool 'llvm-config' not found on PATH." "$LINENO" 5 + fi + clang_lib_dir=`$LLVM_CONFIG --libdir` + if test -f $clang_lib_dir/$plugin; then + plugin_file=$clang_lib_dir/$plugin + fi + if test x$plugin_file != x$plugin; then + break; + fi + fi + done + if test -z $plugin_file; then + as_fn_error $? "Couldn't find clang plugin file for $CC." "$LINENO" 5 + fi + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + + if test "${AR}" = "" ; then + as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5 + fi + plugin_option="--plugin $plugin_file" + touch conftest.c + ${AR} $plugin_option rc conftest.a conftest.c + if test "$?" != 0; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 +$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} + plugin_file= + fi + rm -f conftest.* + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_file" >&5 +$as_echo "$plugin_file" >&6; } + fi + plugin_file="$plugin_file" + +if test -n "$plugin_file"; then + plugin_option="--plugin $plugin_file" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -plugin option" >&5 +$as_echo_n "checking for -plugin option... " >&6; } + plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll" +plugin_option= for plugin in $plugin_names; do plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin` if test x$plugin_so = x$plugin; then @@ -5873,7 +6132,119 @@ for plugin in $plugin_names; do break fi done +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + +if test "${AR}" = "" ; then + as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5 +fi +touch conftest.c +${AR} $plugin_option rc conftest.a conftest.c +if test "$?" != 0; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 +$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} + plugin_option= +fi +rm -f conftest.* +if test -n "$plugin_option"; then + plugin_option="$plugin_option" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_option" >&5 +$as_echo "$plugin_option" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + +fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. set dummy ${ac_tool_prefix}ar; ac_word=$2 @@ -5968,17 +6339,15 @@ fi test -z "$AR" && AR=ar if test -n "$plugin_option"; then - if $AR --help 2>&1 | grep -q "\--plugin"; then - touch conftest.c - $AR $plugin_option rc conftest.a conftest.c - if test "$?" != 0; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 -$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} - else + case "$AR" in + *"$plugin_option"*) + ;; + *) + if $AR --help 2>&1 | grep -q "\--plugin"; then AR="$AR $plugin_option" fi - rm -f conftest.* - fi + ;; + esac fi test -z "$AR_FLAGS" && AR_FLAGS=cru @@ -6185,9 +6554,15 @@ fi test -z "$RANLIB" && RANLIB=: if test -n "$plugin_option" && test "$RANLIB" != ":"; then - if $RANLIB --help 2>&1 | grep -q "\--plugin"; then - RANLIB="$RANLIB $plugin_option" - fi + case "$RANLIB" in + *"$plugin_option"*) + ;; + *) + if $RANLIB --help 2>&1 | grep -q "\--plugin"; then + RANLIB="$RANLIB $plugin_option" + fi + ;; + esac fi @@ -10890,7 +11265,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 10893 "configure" +#line 11268 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -10996,7 +11371,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 10999 "configure" +#line 11374 "configure" #include "confdefs.h" #if HAVE_DLFCN_H diff --git a/libcc1/context.cc b/libcc1/context.cc index 38343a7c29eb..b392f774c723 100644 --- a/libcc1/context.cc +++ b/libcc1/context.cc @@ -31,6 +31,7 @@ along with GCC; see the file COPYING3. If not see #undef PACKAGE_TARNAME #undef PACKAGE_VERSION +#define INCLUDE_VECTOR #include "gcc-plugin.h" #include "system.h" #include "coretypes.h" diff --git a/libcpp/ChangeLog b/libcpp/ChangeLog index d60ccbc37763..43d3f39dd086 100644 --- a/libcpp/ChangeLog +++ b/libcpp/ChangeLog @@ -1,3 +1,29 @@ +2025-10-08 Jakub Jelinek + + * makeucnid.cc (write_copyright): Adjust copyright year. + * makeuname2c.cc (generated_ranges): Adjust end points for a couple + of ranges based on UnicodeData.txt Last changes and add a whole new + CJK UNIFIED IDEOGRAPH- entry. None of these changes are in the 4-8 + table, but clearly it has just been forgotten. + (write_copyright): Adjust copyright year. + (write_dict): Fix up condition when to print semicolon. + * generated_cpp_wcwidth.h: Regenerate. + * ucnid.h: Regenerate. + * uname2c.h: Regenerate. + +2025-09-23 David Malcolm + + PR diagnostics/121986 + * include/rich-location.h (fixit_hint::deletion_p): New accessor. + (fixit_hint::replacement_p): New accessor. + +2025-09-18 David Malcolm + + * include/line-map.h (enum location_aspect): Convert to... + (enum class location_aspect): ...this. + * line-map.cc: Update for conversion of location_aspect to enum + class. + 2025-09-01 Jakub Jelinek * macro.cc: Implement C2Y N3457 - The __COUNTER__ predefined macro. diff --git a/libcpp/generated_cpp_wcwidth.h b/libcpp/generated_cpp_wcwidth.h index 938af6b3a70b..b2ca8deb4a53 100644 --- a/libcpp/generated_cpp_wcwidth.h +++ b/libcpp/generated_cpp_wcwidth.h @@ -1,5 +1,5 @@ /* Generated by contrib/unicode/gen_wcwidth.py, with the help of glibc's - utf8_gen.py, using version 16.0 of the Unicode standard. */ + utf8_gen.py, using version 17.0 of the Unicode standard. */ static const cppchar_t wcwidth_range_ends[] = { 0x2ff, 0x36f, 0x482, 0x489, 0x590, 0x5bd, 0x5be, 0x5bf, @@ -37,95 +37,97 @@ static const cppchar_t wcwidth_range_ends[] = { 0x1886, 0x18a8, 0x18a9, 0x191f, 0x1922, 0x1926, 0x1928, 0x1931, 0x1932, 0x1938, 0x193b, 0x1a16, 0x1a18, 0x1a1a, 0x1a1b, 0x1a55, 0x1a56, 0x1a57, 0x1a5e, 0x1a5f, 0x1a60, 0x1a61, 0x1a62, 0x1a64, - 0x1a6c, 0x1a72, 0x1a7c, 0x1a7e, 0x1a7f, 0x1aaf, 0x1ace, 0x1aff, - 0x1b03, 0x1b33, 0x1b34, 0x1b35, 0x1b3a, 0x1b3b, 0x1b3c, 0x1b41, - 0x1b42, 0x1b6a, 0x1b73, 0x1b7f, 0x1b81, 0x1ba1, 0x1ba5, 0x1ba7, - 0x1ba9, 0x1baa, 0x1bad, 0x1be5, 0x1be6, 0x1be7, 0x1be9, 0x1bec, - 0x1bed, 0x1bee, 0x1bf1, 0x1c2b, 0x1c33, 0x1c35, 0x1c37, 0x1ccf, - 0x1cd2, 0x1cd3, 0x1ce0, 0x1ce1, 0x1ce8, 0x1cec, 0x1ced, 0x1cf3, - 0x1cf4, 0x1cf7, 0x1cf9, 0x1dbf, 0x1dff, 0x200a, 0x200f, 0x2029, - 0x202e, 0x205f, 0x2064, 0x2065, 0x206f, 0x20cf, 0x20f0, 0x2319, - 0x231b, 0x2328, 0x232a, 0x23e8, 0x23ec, 0x23ef, 0x23f0, 0x23f2, - 0x23f3, 0x25fc, 0x25fe, 0x2613, 0x2615, 0x262f, 0x2637, 0x2647, - 0x2653, 0x267e, 0x267f, 0x2689, 0x268f, 0x2692, 0x2693, 0x26a0, - 0x26a1, 0x26a9, 0x26ab, 0x26bc, 0x26be, 0x26c3, 0x26c5, 0x26cd, - 0x26ce, 0x26d3, 0x26d4, 0x26e9, 0x26ea, 0x26f1, 0x26f3, 0x26f4, - 0x26f5, 0x26f9, 0x26fa, 0x26fc, 0x26fd, 0x2704, 0x2705, 0x2709, - 0x270b, 0x2727, 0x2728, 0x274b, 0x274c, 0x274d, 0x274e, 0x2752, - 0x2755, 0x2756, 0x2757, 0x2794, 0x2797, 0x27af, 0x27b0, 0x27be, - 0x27bf, 0x2b1a, 0x2b1c, 0x2b4f, 0x2b50, 0x2b54, 0x2b55, 0x2cee, - 0x2cf1, 0x2d7e, 0x2d7f, 0x2ddf, 0x2dff, 0x2e7f, 0x2e99, 0x2e9a, - 0x2ef3, 0x2eff, 0x2fd5, 0x2fef, 0x3029, 0x302d, 0x303e, 0x3040, - 0x3096, 0x3098, 0x309a, 0x30ff, 0x3104, 0x312f, 0x3130, 0x318e, - 0x318f, 0x31e5, 0x31ee, 0x321e, 0x321f, 0xa48c, 0xa48f, 0xa4c6, - 0xa66e, 0xa672, 0xa673, 0xa67d, 0xa69d, 0xa69f, 0xa6ef, 0xa6f1, - 0xa801, 0xa802, 0xa805, 0xa806, 0xa80a, 0xa80b, 0xa824, 0xa826, - 0xa82b, 0xa82c, 0xa8c3, 0xa8c5, 0xa8df, 0xa8f1, 0xa8fe, 0xa8ff, - 0xa925, 0xa92d, 0xa946, 0xa951, 0xa95f, 0xa97c, 0xa97f, 0xa982, - 0xa9b2, 0xa9b3, 0xa9b5, 0xa9b9, 0xa9bb, 0xa9bd, 0xa9e4, 0xa9e5, - 0xaa28, 0xaa2e, 0xaa30, 0xaa32, 0xaa34, 0xaa36, 0xaa42, 0xaa43, - 0xaa4b, 0xaa4c, 0xaa7b, 0xaa7c, 0xaaaf, 0xaab0, 0xaab1, 0xaab4, - 0xaab6, 0xaab8, 0xaabd, 0xaabf, 0xaac0, 0xaac1, 0xaaeb, 0xaaed, - 0xaaf5, 0xaaf6, 0xabe4, 0xabe5, 0xabe7, 0xabe8, 0xabec, 0xabed, - 0xabff, 0xd7a3, 0xd7af, 0xd7c6, 0xd7ca, 0xd7fb, 0xf8ff, 0xfa6d, - 0xfa6f, 0xfad9, 0xfb1d, 0xfb1e, 0xfdff, 0xfe0f, 0xfe19, 0xfe1f, - 0xfe2f, 0xfe52, 0xfe53, 0xfe66, 0xfe67, 0xfe6b, 0xfefe, 0xfeff, - 0xff00, 0xff60, 0xffdf, 0xffe6, 0xfff8, 0xfffb, 0x101fc, 0x101fd, - 0x102df, 0x102e0, 0x10375, 0x1037a, 0x10a00, 0x10a03, 0x10a04, 0x10a06, - 0x10a0b, 0x10a0f, 0x10a37, 0x10a3a, 0x10a3e, 0x10a3f, 0x10ae4, 0x10ae6, - 0x10d23, 0x10d27, 0x10d68, 0x10d6d, 0x10eaa, 0x10eac, 0x10efb, 0x10eff, - 0x10f45, 0x10f50, 0x10f81, 0x10f85, 0x11000, 0x11001, 0x11037, 0x11046, - 0x1106f, 0x11070, 0x11072, 0x11074, 0x1107e, 0x11081, 0x110b2, 0x110b6, - 0x110b8, 0x110ba, 0x110c1, 0x110c2, 0x110ff, 0x11102, 0x11126, 0x1112b, - 0x1112c, 0x11134, 0x11172, 0x11173, 0x1117f, 0x11181, 0x111b5, 0x111be, - 0x111c8, 0x111cc, 0x111ce, 0x111cf, 0x1122e, 0x11231, 0x11233, 0x11234, - 0x11235, 0x11237, 0x1123d, 0x1123e, 0x11240, 0x11241, 0x112de, 0x112df, - 0x112e2, 0x112ea, 0x112ff, 0x11301, 0x1133a, 0x1133c, 0x1133f, 0x11340, - 0x11365, 0x1136c, 0x1136f, 0x11374, 0x113ba, 0x113c0, 0x113cd, 0x113ce, - 0x113cf, 0x113d0, 0x113d1, 0x113d2, 0x113e0, 0x113e2, 0x11437, 0x1143f, - 0x11441, 0x11444, 0x11445, 0x11446, 0x1145d, 0x1145e, 0x114b2, 0x114b8, - 0x114b9, 0x114ba, 0x114be, 0x114c0, 0x114c1, 0x114c3, 0x115b1, 0x115b5, - 0x115bb, 0x115bd, 0x115be, 0x115c0, 0x115db, 0x115dd, 0x11632, 0x1163a, - 0x1163c, 0x1163d, 0x1163e, 0x11640, 0x116aa, 0x116ab, 0x116ac, 0x116ad, - 0x116af, 0x116b5, 0x116b6, 0x116b7, 0x1171c, 0x1171d, 0x1171e, 0x1171f, - 0x11721, 0x11725, 0x11726, 0x1172b, 0x1182e, 0x11837, 0x11838, 0x1183a, - 0x1193a, 0x1193c, 0x1193d, 0x1193e, 0x11942, 0x11943, 0x119d3, 0x119d7, - 0x119d9, 0x119db, 0x119df, 0x119e0, 0x11a00, 0x11a0a, 0x11a32, 0x11a38, - 0x11a3a, 0x11a3e, 0x11a46, 0x11a47, 0x11a50, 0x11a56, 0x11a58, 0x11a5b, - 0x11a89, 0x11a96, 0x11a97, 0x11a99, 0x11c2f, 0x11c36, 0x11c37, 0x11c3d, - 0x11c3e, 0x11c3f, 0x11c91, 0x11ca7, 0x11ca9, 0x11cb0, 0x11cb1, 0x11cb3, - 0x11cb4, 0x11cb6, 0x11d30, 0x11d36, 0x11d39, 0x11d3a, 0x11d3b, 0x11d3d, - 0x11d3e, 0x11d45, 0x11d46, 0x11d47, 0x11d8f, 0x11d91, 0x11d94, 0x11d95, - 0x11d96, 0x11d97, 0x11ef2, 0x11ef4, 0x11eff, 0x11f01, 0x11f35, 0x11f3a, - 0x11f3f, 0x11f40, 0x11f41, 0x11f42, 0x11f59, 0x11f5a, 0x1342f, 0x13440, - 0x13446, 0x13455, 0x1611d, 0x16129, 0x1612c, 0x1612f, 0x16aef, 0x16af4, - 0x16b2f, 0x16b36, 0x16f4e, 0x16f4f, 0x16f8e, 0x16f92, 0x16fdf, 0x16fe3, - 0x16fe4, 0x16fef, 0x16ff1, 0x16fff, 0x187f7, 0x187ff, 0x18cd5, 0x18cfe, - 0x18d08, 0x1afef, 0x1aff3, 0x1aff4, 0x1affb, 0x1affc, 0x1affe, 0x1afff, - 0x1b122, 0x1b131, 0x1b132, 0x1b14f, 0x1b152, 0x1b154, 0x1b155, 0x1b163, - 0x1b167, 0x1b16f, 0x1b2fb, 0x1bc9c, 0x1bc9e, 0x1bc9f, 0x1bca3, 0x1ceff, - 0x1cf2d, 0x1cf2f, 0x1cf46, 0x1d166, 0x1d169, 0x1d172, 0x1d182, 0x1d184, - 0x1d18b, 0x1d1a9, 0x1d1ad, 0x1d241, 0x1d244, 0x1d2ff, 0x1d356, 0x1d35f, - 0x1d376, 0x1d9ff, 0x1da36, 0x1da3a, 0x1da6c, 0x1da74, 0x1da75, 0x1da83, - 0x1da84, 0x1da9a, 0x1da9f, 0x1daa0, 0x1daaf, 0x1dfff, 0x1e006, 0x1e007, - 0x1e018, 0x1e01a, 0x1e021, 0x1e022, 0x1e024, 0x1e025, 0x1e02a, 0x1e08e, - 0x1e08f, 0x1e12f, 0x1e136, 0x1e2ad, 0x1e2ae, 0x1e2eb, 0x1e2ef, 0x1e4eb, - 0x1e4ef, 0x1e5ed, 0x1e5ef, 0x1e8cf, 0x1e8d6, 0x1e943, 0x1e94a, 0x1f003, - 0x1f004, 0x1f0ce, 0x1f0cf, 0x1f18d, 0x1f18e, 0x1f190, 0x1f19a, 0x1f1ff, - 0x1f202, 0x1f20f, 0x1f23b, 0x1f23f, 0x1f248, 0x1f24f, 0x1f251, 0x1f25f, - 0x1f265, 0x1f2ff, 0x1f320, 0x1f32c, 0x1f335, 0x1f336, 0x1f37c, 0x1f37d, - 0x1f393, 0x1f39f, 0x1f3ca, 0x1f3ce, 0x1f3d3, 0x1f3df, 0x1f3f0, 0x1f3f3, - 0x1f3f4, 0x1f3f7, 0x1f43e, 0x1f43f, 0x1f440, 0x1f441, 0x1f4fc, 0x1f4fe, - 0x1f53d, 0x1f54a, 0x1f54e, 0x1f54f, 0x1f567, 0x1f579, 0x1f57a, 0x1f594, - 0x1f596, 0x1f5a3, 0x1f5a4, 0x1f5fa, 0x1f64f, 0x1f67f, 0x1f6c5, 0x1f6cb, - 0x1f6cc, 0x1f6cf, 0x1f6d2, 0x1f6d4, 0x1f6d7, 0x1f6db, 0x1f6df, 0x1f6ea, - 0x1f6ec, 0x1f6f3, 0x1f6fc, 0x1f7df, 0x1f7eb, 0x1f7ef, 0x1f7f0, 0x1f90b, - 0x1f93a, 0x1f93b, 0x1f945, 0x1f946, 0x1f9ff, 0x1fa6f, 0x1fa7c, 0x1fa7f, - 0x1fa89, 0x1fa8e, 0x1fac6, 0x1facd, 0x1fadc, 0x1fade, 0x1fae9, 0x1faef, - 0x1faf8, 0x1ffff, 0x2a6df, 0x2a6ff, 0x2b739, 0x2b73f, 0x2b81d, 0x2b81f, - 0x2cea1, 0x2ceaf, 0x2ebe0, 0x2ebef, 0x2ee5d, 0x2f7ff, 0x2fa1d, 0x2ffff, - 0x3134a, 0x3134f, 0x323af, 0xe0000, 0xe0001, 0xe001f, 0xe007f, 0xe00ff, - 0xe01ef, + 0x1a6c, 0x1a72, 0x1a7c, 0x1a7e, 0x1a7f, 0x1aaf, 0x1add, 0x1adf, + 0x1aeb, 0x1aff, 0x1b03, 0x1b33, 0x1b34, 0x1b35, 0x1b3a, 0x1b3b, + 0x1b3c, 0x1b41, 0x1b42, 0x1b6a, 0x1b73, 0x1b7f, 0x1b81, 0x1ba1, + 0x1ba5, 0x1ba7, 0x1ba9, 0x1baa, 0x1bad, 0x1be5, 0x1be6, 0x1be7, + 0x1be9, 0x1bec, 0x1bed, 0x1bee, 0x1bf1, 0x1c2b, 0x1c33, 0x1c35, + 0x1c37, 0x1ccf, 0x1cd2, 0x1cd3, 0x1ce0, 0x1ce1, 0x1ce8, 0x1cec, + 0x1ced, 0x1cf3, 0x1cf4, 0x1cf7, 0x1cf9, 0x1dbf, 0x1dff, 0x200a, + 0x200f, 0x2029, 0x202e, 0x205f, 0x2064, 0x2065, 0x206f, 0x20cf, + 0x20f0, 0x2319, 0x231b, 0x2328, 0x232a, 0x23e8, 0x23ec, 0x23ef, + 0x23f0, 0x23f2, 0x23f3, 0x25fc, 0x25fe, 0x2613, 0x2615, 0x262f, + 0x2637, 0x2647, 0x2653, 0x267e, 0x267f, 0x2689, 0x268f, 0x2692, + 0x2693, 0x26a0, 0x26a1, 0x26a9, 0x26ab, 0x26bc, 0x26be, 0x26c3, + 0x26c5, 0x26cd, 0x26ce, 0x26d3, 0x26d4, 0x26e9, 0x26ea, 0x26f1, + 0x26f3, 0x26f4, 0x26f5, 0x26f9, 0x26fa, 0x26fc, 0x26fd, 0x2704, + 0x2705, 0x2709, 0x270b, 0x2727, 0x2728, 0x274b, 0x274c, 0x274d, + 0x274e, 0x2752, 0x2755, 0x2756, 0x2757, 0x2794, 0x2797, 0x27af, + 0x27b0, 0x27be, 0x27bf, 0x2b1a, 0x2b1c, 0x2b4f, 0x2b50, 0x2b54, + 0x2b55, 0x2cee, 0x2cf1, 0x2d7e, 0x2d7f, 0x2ddf, 0x2dff, 0x2e7f, + 0x2e99, 0x2e9a, 0x2ef3, 0x2eff, 0x2fd5, 0x2fef, 0x3029, 0x302d, + 0x303e, 0x3040, 0x3096, 0x3098, 0x309a, 0x30ff, 0x3104, 0x312f, + 0x3130, 0x3163, 0x3164, 0x318e, 0x318f, 0x31e5, 0x31ee, 0x321e, + 0x321f, 0xa48c, 0xa48f, 0xa4c6, 0xa66e, 0xa672, 0xa673, 0xa67d, + 0xa69d, 0xa69f, 0xa6ef, 0xa6f1, 0xa801, 0xa802, 0xa805, 0xa806, + 0xa80a, 0xa80b, 0xa824, 0xa826, 0xa82b, 0xa82c, 0xa8c3, 0xa8c5, + 0xa8df, 0xa8f1, 0xa8fe, 0xa8ff, 0xa925, 0xa92d, 0xa946, 0xa951, + 0xa95f, 0xa97c, 0xa97f, 0xa982, 0xa9b2, 0xa9b3, 0xa9b5, 0xa9b9, + 0xa9bb, 0xa9bd, 0xa9e4, 0xa9e5, 0xaa28, 0xaa2e, 0xaa30, 0xaa32, + 0xaa34, 0xaa36, 0xaa42, 0xaa43, 0xaa4b, 0xaa4c, 0xaa7b, 0xaa7c, + 0xaaaf, 0xaab0, 0xaab1, 0xaab4, 0xaab6, 0xaab8, 0xaabd, 0xaabf, + 0xaac0, 0xaac1, 0xaaeb, 0xaaed, 0xaaf5, 0xaaf6, 0xabe4, 0xabe5, + 0xabe7, 0xabe8, 0xabec, 0xabed, 0xabff, 0xd7a3, 0xd7af, 0xd7c6, + 0xd7ca, 0xd7fb, 0xf8ff, 0xfa6d, 0xfa6f, 0xfad9, 0xfb1d, 0xfb1e, + 0xfdff, 0xfe0f, 0xfe19, 0xfe1f, 0xfe2f, 0xfe52, 0xfe53, 0xfe66, + 0xfe67, 0xfe6b, 0xfefe, 0xfeff, 0xff00, 0xff60, 0xff9f, 0xffa0, + 0xffdf, 0xffe6, 0x101fc, 0x101fd, 0x102df, 0x102e0, 0x10375, 0x1037a, + 0x10a00, 0x10a03, 0x10a04, 0x10a06, 0x10a0b, 0x10a0f, 0x10a37, 0x10a3a, + 0x10a3e, 0x10a3f, 0x10ae4, 0x10ae6, 0x10d23, 0x10d27, 0x10d68, 0x10d6d, + 0x10eaa, 0x10eac, 0x10ef9, 0x10eff, 0x10f45, 0x10f50, 0x10f81, 0x10f85, + 0x11000, 0x11001, 0x11037, 0x11046, 0x1106f, 0x11070, 0x11072, 0x11074, + 0x1107e, 0x11081, 0x110b2, 0x110b6, 0x110b8, 0x110ba, 0x110c1, 0x110c2, + 0x110ff, 0x11102, 0x11126, 0x1112b, 0x1112c, 0x11134, 0x11172, 0x11173, + 0x1117f, 0x11181, 0x111b5, 0x111be, 0x111c8, 0x111cc, 0x111ce, 0x111cf, + 0x1122e, 0x11231, 0x11233, 0x11234, 0x11235, 0x11237, 0x1123d, 0x1123e, + 0x11240, 0x11241, 0x112de, 0x112df, 0x112e2, 0x112ea, 0x112ff, 0x11301, + 0x1133a, 0x1133c, 0x1133f, 0x11340, 0x11365, 0x1136c, 0x1136f, 0x11374, + 0x113ba, 0x113c0, 0x113cd, 0x113ce, 0x113cf, 0x113d0, 0x113d1, 0x113d2, + 0x113e0, 0x113e2, 0x11437, 0x1143f, 0x11441, 0x11444, 0x11445, 0x11446, + 0x1145d, 0x1145e, 0x114b2, 0x114b8, 0x114b9, 0x114ba, 0x114be, 0x114c0, + 0x114c1, 0x114c3, 0x115b1, 0x115b5, 0x115bb, 0x115bd, 0x115be, 0x115c0, + 0x115db, 0x115dd, 0x11632, 0x1163a, 0x1163c, 0x1163d, 0x1163e, 0x11640, + 0x116aa, 0x116ab, 0x116ac, 0x116ad, 0x116af, 0x116b5, 0x116b6, 0x116b7, + 0x1171c, 0x1171d, 0x1171e, 0x1171f, 0x11721, 0x11725, 0x11726, 0x1172b, + 0x1182e, 0x11837, 0x11838, 0x1183a, 0x1193a, 0x1193c, 0x1193d, 0x1193e, + 0x11942, 0x11943, 0x119d3, 0x119d7, 0x119d9, 0x119db, 0x119df, 0x119e0, + 0x11a00, 0x11a0a, 0x11a32, 0x11a38, 0x11a3a, 0x11a3e, 0x11a46, 0x11a47, + 0x11a50, 0x11a56, 0x11a58, 0x11a5b, 0x11a89, 0x11a96, 0x11a97, 0x11a99, + 0x11b5f, 0x11b60, 0x11b61, 0x11b64, 0x11b65, 0x11b66, 0x11c2f, 0x11c36, + 0x11c37, 0x11c3d, 0x11c3e, 0x11c3f, 0x11c91, 0x11ca7, 0x11ca9, 0x11cb0, + 0x11cb1, 0x11cb3, 0x11cb4, 0x11cb6, 0x11d30, 0x11d36, 0x11d39, 0x11d3a, + 0x11d3b, 0x11d3d, 0x11d3e, 0x11d45, 0x11d46, 0x11d47, 0x11d8f, 0x11d91, + 0x11d94, 0x11d95, 0x11d96, 0x11d97, 0x11ef2, 0x11ef4, 0x11eff, 0x11f01, + 0x11f35, 0x11f3a, 0x11f3f, 0x11f40, 0x11f41, 0x11f42, 0x11f59, 0x11f5a, + 0x1343f, 0x13440, 0x13446, 0x13455, 0x1611d, 0x16129, 0x1612c, 0x1612f, + 0x16aef, 0x16af4, 0x16b2f, 0x16b36, 0x16f4e, 0x16f4f, 0x16f8e, 0x16f92, + 0x16fdf, 0x16fe3, 0x16fe4, 0x16fef, 0x16ff6, 0x16fff, 0x18cd5, 0x18cfe, + 0x18d1e, 0x18d7f, 0x18df2, 0x1afef, 0x1aff3, 0x1aff4, 0x1affb, 0x1affc, + 0x1affe, 0x1afff, 0x1b122, 0x1b131, 0x1b132, 0x1b14f, 0x1b152, 0x1b154, + 0x1b155, 0x1b163, 0x1b167, 0x1b16f, 0x1b2fb, 0x1bc9c, 0x1bc9e, 0x1bc9f, + 0x1bca3, 0x1ceff, 0x1cf2d, 0x1cf2f, 0x1cf46, 0x1d166, 0x1d169, 0x1d172, + 0x1d182, 0x1d184, 0x1d18b, 0x1d1a9, 0x1d1ad, 0x1d241, 0x1d244, 0x1d2ff, + 0x1d356, 0x1d35f, 0x1d376, 0x1d9ff, 0x1da36, 0x1da3a, 0x1da6c, 0x1da74, + 0x1da75, 0x1da83, 0x1da84, 0x1da9a, 0x1da9f, 0x1daa0, 0x1daaf, 0x1dfff, + 0x1e006, 0x1e007, 0x1e018, 0x1e01a, 0x1e021, 0x1e022, 0x1e024, 0x1e025, + 0x1e02a, 0x1e08e, 0x1e08f, 0x1e12f, 0x1e136, 0x1e2ad, 0x1e2ae, 0x1e2eb, + 0x1e2ef, 0x1e4eb, 0x1e4ef, 0x1e5ed, 0x1e5ef, 0x1e6e2, 0x1e6e3, 0x1e6e5, + 0x1e6e6, 0x1e6ed, 0x1e6ef, 0x1e6f4, 0x1e6f5, 0x1e8cf, 0x1e8d6, 0x1e943, + 0x1e94a, 0x1f003, 0x1f004, 0x1f0ce, 0x1f0cf, 0x1f18d, 0x1f18e, 0x1f190, + 0x1f19a, 0x1f1ff, 0x1f202, 0x1f20f, 0x1f23b, 0x1f23f, 0x1f248, 0x1f24f, + 0x1f251, 0x1f25f, 0x1f265, 0x1f2ff, 0x1f320, 0x1f32c, 0x1f335, 0x1f336, + 0x1f37c, 0x1f37d, 0x1f393, 0x1f39f, 0x1f3ca, 0x1f3ce, 0x1f3d3, 0x1f3df, + 0x1f3f0, 0x1f3f3, 0x1f3f4, 0x1f3f7, 0x1f43e, 0x1f43f, 0x1f440, 0x1f441, + 0x1f4fc, 0x1f4fe, 0x1f53d, 0x1f54a, 0x1f54e, 0x1f54f, 0x1f567, 0x1f579, + 0x1f57a, 0x1f594, 0x1f596, 0x1f5a3, 0x1f5a4, 0x1f5fa, 0x1f64f, 0x1f67f, + 0x1f6c5, 0x1f6cb, 0x1f6cc, 0x1f6cf, 0x1f6d2, 0x1f6d4, 0x1f6d8, 0x1f6db, + 0x1f6df, 0x1f6ea, 0x1f6ec, 0x1f6f3, 0x1f6fc, 0x1f7df, 0x1f7eb, 0x1f7ef, + 0x1f7f0, 0x1f90b, 0x1f93a, 0x1f93b, 0x1f945, 0x1f946, 0x1f9ff, 0x1fa6f, + 0x1fa7c, 0x1fa7f, 0x1fa8a, 0x1fa8d, 0x1fac6, 0x1fac7, 0x1fac8, 0x1facc, + 0x1fadc, 0x1fade, 0x1faea, 0x1faee, 0x1faf8, 0x1ffff, 0x2a6df, 0x2a6ff, + 0x2b81d, 0x2b81f, 0x2cead, 0x2ceaf, 0x2ebe0, 0x2ebef, 0x2ee5d, 0x2f7ff, + 0x2fa1d, 0x2ffff, 0x3134a, 0x3134f, 0x33479, 0xe0000, 0xe0001, 0xe001f, + 0xe007f, 0xe00ff, 0xe01ef, }; static const unsigned char wcwidth_widths[] = { @@ -143,15 +145,16 @@ static const unsigned char wcwidth_widths[] = { 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, - 0, 1, 0, 1, 0, 1, 0, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, + 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, - 2, 1, 2, 1, 2, 1, 2, 1, 0, 1, 0, 1, 0, 1, 2, 1, 2, 1, 2, 1, 2, 0, 2, 1, - 2, 1, 0, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 0, 1, 0, 1, 0, 1, 0, - 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 2, 1, 0, + 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 0, 1, 0, 1, 0, 1, 2, 1, 2, 1, 2, 1, 2, 0, + 2, 1, 2, 1, 0, 2, 1, 2, 1, 2, 0, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, - 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 2, 1, 0, 1, 0, 1, 2, - 1, 2, 1, 0, 1, 0, 2, 1, 0, 2, 1, 2, 1, 2, 1, 0, 1, 2, 1, 2, 1, 0, 1, 0, + 1, 2, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 2, 1, 0, + 1, 0, 1, 2, 1, 2, 1, 0, 1, 0, 2, 1, 0, 2, 1, 2, 1, 2, 1, 0, 1, 2, 1, 0, + 1, 2, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, @@ -161,14 +164,13 @@ static const unsigned char wcwidth_widths[] = { 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, - 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 2, 0, 1, 2, 1, 2, 1, 2, 1, - 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 0, 1, 0, 1, - 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 2, 1, 2, 1, 0, 1, 0, 1, 0, 1, + 1, 2, 0, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, + 2, 1, 2, 1, 2, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, + 2, 1, 2, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, - 0, 1, 0, 1, 0, 1, 0, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, + 0, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, - 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 0, 1, 0, 1, - 0, + 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 0, 1, 0, 1, 0, }; diff --git a/libcpp/include/line-map.h b/libcpp/include/line-map.h index 21a59af22369..9bcf4d0c8078 100644 --- a/libcpp/include/line-map.h +++ b/libcpp/include/line-map.h @@ -1459,11 +1459,11 @@ void line_table_dump (FILE *, const line_maps *, /* An enum for distinguishing the various parts within a location_t. */ -enum location_aspect +enum class location_aspect { - LOCATION_ASPECT_CARET, - LOCATION_ASPECT_START, - LOCATION_ASPECT_FINISH + caret, + start, + finish }; /* The rich_location class requires a way to expand location_t instances. diff --git a/libcpp/include/rich-location.h b/libcpp/include/rich-location.h index c74e80e9f61e..cc9547d3ab7a 100644 --- a/libcpp/include/rich-location.h +++ b/libcpp/include/rich-location.h @@ -642,6 +642,8 @@ class fixit_hint size_t get_length () const { return m_len; } bool insertion_p () const { return m_start == m_next_loc; } + bool deletion_p () const { return m_len == 0; } + bool replacement_p () const { return m_len > 0 && m_start != m_next_loc; } bool ends_with_newline_p () const; diff --git a/libcpp/line-map.cc b/libcpp/line-map.cc index 33701b519e1f..2875bf2092b7 100644 --- a/libcpp/line-map.cc +++ b/libcpp/line-map.cc @@ -2326,7 +2326,7 @@ rich_location::get_expanded_location (unsigned int idx) const { m_expanded_location = linemap_client_expand_location_to_spelling_point - (m_line_table, get_loc (0), LOCATION_ASPECT_CARET); + (m_line_table, get_loc (0), location_aspect::caret); if (m_column_override) m_expanded_location.column = m_column_override; m_have_expanded_location = true; @@ -2336,7 +2336,7 @@ rich_location::get_expanded_location (unsigned int idx) const } else return linemap_client_expand_location_to_spelling_point - (m_line_table, get_loc (idx), LOCATION_ASPECT_CARET); + (m_line_table, get_loc (idx), location_aspect::caret); } /* Set the column of the primary location, with 0 meaning @@ -2611,11 +2611,11 @@ rich_location::maybe_add_fixit (location_t start, expanded_location exploc_start = linemap_client_expand_location_to_spelling_point (m_line_table, start, - LOCATION_ASPECT_START); + location_aspect::start); expanded_location exploc_next_loc = linemap_client_expand_location_to_spelling_point (m_line_table, next_loc, - LOCATION_ASPECT_START); + location_aspect::start); /* They must be within the same file... */ if (exploc_start.file != exploc_next_loc.file) { @@ -2717,7 +2717,7 @@ fixit_hint::affects_line_p (const line_maps *set, expanded_location exploc_start = linemap_client_expand_location_to_spelling_point (set, m_start, - LOCATION_ASPECT_START); + location_aspect::start); if (file != exploc_start.file) return false; if (line < exploc_start.line) @@ -2725,7 +2725,7 @@ fixit_hint::affects_line_p (const line_maps *set, expanded_location exploc_next_loc = linemap_client_expand_location_to_spelling_point (set, m_next_loc, - LOCATION_ASPECT_START); + location_aspect::start); if (file != exploc_next_loc.file) return false; if (line > exploc_next_loc.line) diff --git a/libcpp/makeucnid.cc b/libcpp/makeucnid.cc index 4ceead25be66..25dfa88af63a 100644 --- a/libcpp/makeucnid.cc +++ b/libcpp/makeucnid.cc @@ -467,7 +467,7 @@ write_copyright (void) .\n\ \n\ \n\ - Copyright (C) 1991-2024 Unicode, Inc. All rights reserved.\n\ + Copyright (C) 1991-2025 Unicode, Inc. All rights reserved.\n\ Distributed under the Terms of Use in\n\ http://www.unicode.org/copyright.html.\n\ \n\ diff --git a/libcpp/makeuname2c.cc b/libcpp/makeuname2c.cc index f9b6957b7116..b05d589b9803 100644 --- a/libcpp/makeuname2c.cc +++ b/libcpp/makeuname2c.cc @@ -83,16 +83,17 @@ static struct generated generated_ranges[] = { "CJK UNIFIED IDEOGRAPH-", 0x3400, 0x4dbf, 0, 1, 0 }, /* NR2 rules */ { "CJK UNIFIED IDEOGRAPH-", 0x4e00, 0x9fff, 0, 1, 0 }, { "CJK UNIFIED IDEOGRAPH-", 0x20000, 0x2a6df, 0, 1, 0 }, - { "CJK UNIFIED IDEOGRAPH-", 0x2a700, 0x2b739, 0, 1, 0 }, + { "CJK UNIFIED IDEOGRAPH-", 0x2a700, 0x2b73f, 0, 1, 0 }, { "CJK UNIFIED IDEOGRAPH-", 0x2b740, 0x2b81d, 0, 1, 0 }, - { "CJK UNIFIED IDEOGRAPH-", 0x2b820, 0x2cea1, 0, 1, 0 }, + { "CJK UNIFIED IDEOGRAPH-", 0x2b820, 0x2cead, 0, 1, 0 }, { "CJK UNIFIED IDEOGRAPH-", 0x2ceb0, 0x2ebe0, 0, 1, 0 }, { "CJK UNIFIED IDEOGRAPH-", 0x2ebf0, 0x2ee5d, 0, 1, 0 }, { "CJK UNIFIED IDEOGRAPH-", 0x30000, 0x3134a, 0, 1, 0 }, { "CJK UNIFIED IDEOGRAPH-", 0x31350, 0x323af, 0, 1, 0 }, + { "CJK UNIFIED IDEOGRAPH-", 0x323b0, 0x33479, 0, 1, 0 }, { "EGYPTIAN HIEROGLYPH-", 0x13460, 0x143fa, 0, 2, 0 }, - { "TANGUT IDEOGRAPH-", 0x17000, 0x187f7, 0, 3, 0 }, - { "TANGUT IDEOGRAPH-", 0x18d00, 0x18d08, 0, 3, 0 }, + { "TANGUT IDEOGRAPH-", 0x17000, 0x187ff, 0, 3, 0 }, + { "TANGUT IDEOGRAPH-", 0x18d00, 0x18d1e, 0, 3, 0 }, { "KHITAN SMALL SCRIPT CHARACTER-", 0x18b00, 0x18cd5, 0, 4, 0 }, { "NUSHU CHARACTER-", 0x1b170, 0x1b2fb, 0, 5, 0 }, { "CJK COMPATIBILITY IDEOGRAPH-", 0xf900, 0xfa6d, 0, 6, 0 }, @@ -671,7 +672,7 @@ write_copyright (void) .\n\ \n\ \n\ - Copyright (C) 1991-2024 Unicode, Inc. All rights reserved.\n\ + Copyright (C) 1991-2025 Unicode, Inc. All rights reserved.\n\ Distributed under the Terms of Use in\n\ http://www.unicode.org/copyright.html.\n\ \n\ @@ -717,7 +718,7 @@ write_dict (void) printf ("static const char uname2c_dict[%ld] =\n", (long) (dict_size + 1)); for (i = 0; i < dict_size; i += 77) - printf ("\"%.77s\"%s\n", dict + i, i + 76 > dict_size ? ";" : ""); + printf ("\"%.77s\"%s\n", dict + i, i + 77 >= dict_size ? ";" : ""); puts (""); } diff --git a/libcpp/ucnid.h b/libcpp/ucnid.h index 26eaca1ba76c..8b6125aca286 100644 --- a/libcpp/ucnid.h +++ b/libcpp/ucnid.h @@ -16,7 +16,7 @@ . - Copyright (C) 1991-2024 Unicode, Inc. All rights reserved. + Copyright (C) 1991-2025 Unicode, Inc. All rights reserved. Distributed under the Terms of Use in http://www.unicode.org/copyright.html. @@ -440,7 +440,7 @@ static const struct ucnrange ucnranges[] = { { 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x086f }, { 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x0887 }, { 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0888 }, -{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x088e }, +{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x088f }, { 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0896 }, { 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 230, 0x0898 }, { 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 220, 0x089b }, @@ -718,7 +718,7 @@ static const struct ucnrange ucnranges[] = { { 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC|CTX, 91, 0x0c56 }, { 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0c57 }, { 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x0c5a }, -{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0c5c }, +{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0c5b }, { 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x0c5d }, { 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0c5f }, { C99| 0|CXX|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x0c61 }, @@ -756,7 +756,7 @@ static const struct ucnrange ucnranges[] = { { C99| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 9, 0x0ccd }, { 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0cd4 }, { 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC|CTX, 0, 0x0cd6 }, -{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0cdc }, +{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0cdb }, { 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x0cdd }, { C99| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x0cde }, { 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x0cdf }, @@ -1160,7 +1160,13 @@ static const struct ucnrange ucnranges[] = { { 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 220, 0x1ac4 }, { 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 230, 0x1ac9 }, { 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 220, 0x1aca }, -{ 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 230, 0x1ace }, +{ 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 230, 0x1adc }, +{ 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 220, 0x1add }, +{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x1adf }, +{ 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 230, 0x1ae5 }, +{ 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 220, 0x1ae6 }, +{ 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 230, 0x1aea }, +{ 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 234, 0x1aeb }, { 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x1aff }, { 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 0, 0x1b04 }, { 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x1b05 }, @@ -1678,14 +1684,8 @@ static const struct ucnrange ucnranges[] = { { 0| 0| 0|C11| 0|CXX23| 0|CID|NFC| 0| 0, 0, 0xa770 }, { 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0xa788 }, { 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0xa78a }, -{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0xa7cd }, -{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0xa7cf }, -{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0xa7d1 }, -{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0xa7d2 }, -{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0xa7d3 }, -{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0xa7d4 }, { 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0xa7dc }, -{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0xa7f1 }, +{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0xa7f0 }, { 0| 0| 0|C11| 0|CXX23| 0|CID|NFC| 0| 0, 0, 0xa7f4 }, { 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0xa7f7 }, { 0| 0| 0|C11| 0|CXX23| 0|CID|NFC| 0| 0, 0, 0xa7f9 }, @@ -2035,6 +2035,8 @@ static const struct ucnrange ucnranges[] = { { 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x10915 }, { 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x1091f }, { 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x10939 }, +{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x1093f }, +{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x10959 }, { 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x1097f }, { 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x109b7 }, { 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x109bd }, @@ -2103,8 +2105,9 @@ static const struct ucnrange ucnranges[] = { { 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x10eaf }, { 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x10eb1 }, { 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x10ec1 }, -{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x10ec4 }, -{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x10efb }, +{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x10ec7 }, +{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x10ef9 }, +{ 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 220, 0x10efb }, { 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 0, 0x10efc }, { 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 220, 0x10eff }, { 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x10f1c }, @@ -2426,6 +2429,8 @@ static const struct ucnrange ucnranges[] = { { 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x11a9d }, { 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x11aaf }, { 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x11af8 }, +{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x11b5f }, +{ 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 0, 0x11b67 }, { 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x11bbf }, { 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x11be0 }, { 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x11bef }, @@ -2482,6 +2487,10 @@ static const struct ucnrange ucnranges[] = { { 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x11d98 }, { 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x11d9f }, { 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 0, 0x11da9 }, +{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x11daf }, +{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x11ddb }, +{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x11ddf }, +{ 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 0, 0x11de9 }, { 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x11edf }, { 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x11ef2 }, { 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 0, 0x11ef6 }, @@ -2561,6 +2570,10 @@ static const struct ucnrange ucnranges[] = { { 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 0, 0x16d79 }, { 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x16e3f }, { 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x16e7f }, +{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x16e9f }, +{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x16eb8 }, +{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x16eba }, +{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x16ed3 }, { 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x16eff }, { 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x16f4a }, { 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x16f4e }, @@ -2577,12 +2590,13 @@ static const struct ucnrange ucnranges[] = { { 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 0, 0x16fe4 }, { 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x16fef }, { 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 6, 0x16ff1 }, +{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x16ff6 }, { 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x16fff }, -{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x187f7 }, -{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x187ff }, { 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x18cd5 }, { 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x18cfe }, -{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x18d08 }, +{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x18d1e }, +{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x18d7f }, +{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x18df2 }, { 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x1afef }, { 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x1aff3 }, { 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x1aff4 }, @@ -2757,6 +2771,19 @@ static const struct ucnrange ucnranges[] = { { 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 220, 0x1e5ef }, { 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x1e5f0 }, { 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 0, 0x1e5fa }, +{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x1e6bf }, +{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x1e6de }, +{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x1e6df }, +{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x1e6e2 }, +{ 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 230, 0x1e6e3 }, +{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x1e6e5 }, +{ 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 230, 0x1e6e6 }, +{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x1e6ed }, +{ 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 230, 0x1e6ef }, +{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x1e6f4 }, +{ 0| 0| 0|C11| 0|CXX23|NXX23|CID|NFC|NKC| 0, 230, 0x1e6f5 }, +{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x1e6fd }, +{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x1e6ff }, { 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x1e7df }, { 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x1e7e6 }, { 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x1e7e7 }, @@ -2866,11 +2893,9 @@ static const struct ucnrange ucnranges[] = { { 0| 0| 0| 0| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x1ffff }, { 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x2a6df }, { 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x2a6ff }, -{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x2b739 }, -{ 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x2b73f }, { 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x2b81d }, { 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x2b81f }, -{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x2cea1 }, +{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x2cead }, { 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x2ceaf }, { 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x2ebe0 }, { 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x2ebef }, @@ -2881,7 +2906,7 @@ static const struct ucnrange ucnranges[] = { { 0| 0| 0| 0| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x2ffff }, { 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x3134a }, { 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x3134f }, -{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x323af }, +{ 0| 0| 0|C11| 0|CXX23| 0|CID|NFC|NKC| 0, 0, 0x33479 }, { 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x3fffd }, { 0| 0| 0| 0| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x3ffff }, { 0| 0| 0|C11| 0| 0| 0|CID|NFC|NKC| 0, 0, 0x4fffd }, diff --git a/libcpp/uname2c.h b/libcpp/uname2c.h index 04890a76fb51..a10e7be60e65 100644 --- a/libcpp/uname2c.h +++ b/libcpp/uname2c.h @@ -16,7 +16,7 @@ . - Copyright (C) 1991-2024 Unicode, Inc. All rights reserved. + Copyright (C) 1991-2025 Unicode, Inc. All rights reserved. Distributed under the Terms of Use in http://www.unicode.org/copyright.html. @@ -52,7 +52,7 @@ use or other dealings in these Data Files or Software without prior written authorization of the copyright holder. */ -static const char uname2c_dict[61913] = +static const char uname2c_dict[62755] = "DIVIDED BY HORIZONTAL BAR AND TOP HALF DIVIDED BY VERTICAL BARUIGHUR KIRGHIZ " "YEH WITH HAMZA ABOVE WITH ALEF MAKSURA LANTED EQUAL ABOVE GREATER-THAN ABOVE " "SLANTED EQUAL WITH EXCLAMATION MARK WITH LEFT RIGHT ARROW ABOVELANTED EQUAL A" @@ -62,3743 +62,3854 @@ static const char uname2c_dict[61913] = "NWARDS EQUILATERAL ARROWHEADLEFTWARDS OF DOWNWARDS TRIANGLE-HEADED ARROWOVER " "KASKAL LAGAB TIMES U OVER LAGAB TIMES URIGHT-LIGHTED UPWARDS EQUILATERAL ARRO" "WHEADUPPER CENTRE TO MIDDLE LEFT TO LOWER CENTREUPPER RIGHT-SHADOWED WHITE RI" -"GHTWARDS ARROWJUSTIFIED LOWER RIGHT QUARTER BLACK CIRCLEJUSTIFIED UPPER RIGHT" -" QUARTER BLACK CIRCLELA USED AS KORANIC STOP SIGN ISOLATED FORMLEFTWARDS OF U" -"PWARDS TRIANGLE-HEADED ARROWLOWER LEFT TO MIDDLE CENTRE TO LOWER RIGHTOWER RI" -"GHT-SHADOWED WHITE RIGHTWARDS ARROW OVER HI TIMES ASH2 KU OVER HI TIMES ASH2A" -"ND RIGHT TRIANGULAR THREE QUARTERS BLOCKINVERSE MEDIUM SHADE AND RIGHT HALF B" -"LOCKJUSTIFIED LOWER LEFT QUARTER BLACK CIRCLEJUSTIFIED UPPER LEFT QUARTER BLA" -"CK CIRCLEULTIPLICATION SIGN WITH CIRCUMFLEX ACCENTDOWNWARDS AND UPWARDS OPEN " -"CIRCLE ARROWSLOW DOUBLE COMMA QUOTATION MARK ORNAMENTVERTICAL BAR AT END OF H" -"ORIZONTAL STROKE-TILTED SHADOWED WHITE RIGHTWARDS ARROWABOVE RIGHTWARDS HARPO" -"ON WITH BARB DOWNASH FROM LEFT MEMBER OF DOUBLE VERTICALNEGATIVE SQUARED LATI" -"N CAPITAL LETTER PWITH OPEN ARM ENDING IN ARROW POINTING -HEADED ARROW WITH T" -"RIANGLE ARROWHEADSABOVE LEFTWARDS HARPOON WITH BARB DOWNAL WITH SUPERSCRIPT A" -"LEF ISOLATED FORMASHED TRIANGLE-HEADED RIGHTWARDS ARROWEH WITH SUPERSCRIPT AL" -"EF ISOLATED FORMEXTENDED ARABIC-INDIC DIGIT FOUR ABOVEEXTENDED ARABIC-INDIC D" -"IGIT FOUR BELOWIANGLE CONTAINING SMALL WHITE TRIANGLERIGHTWARDS ARROW ABOVE L" -"EFTWARDS ARROWURNED SWIRL BIRGA WITH DOUBLE ORNAMENTWARDS AND LEFTWARDS OPEN " -"CIRCLE ARROWS WITH MONITOR IN PORTRAIT ORIENTATIONHORIZONTAL LINE WITH THREE " -"TICK MARKSIOUS FACE WITH SYMBOLS COVERING MOUTHONCAVE-POINTED BLACK RIGHTWARD" -"S ARROWOVER RIGHTWARDS TRIANGLE-HEADED ARROWSMALL LETTER BYELORUSSIAN-UKRAINI" -"AN I AND LOWER HALF INVERSE MEDIUM SHADE WITH HORIZONTAL MIDDLE BLACK STRIPED" -"OUBLE-LINE EQUAL ABOVE GREATER-THANGREATER-THAN ABOVE DOUBLE-LINE EQUALIGHT T" -"ORTOISE SHELL BRACKET ORNAMENTLEFT TORTOISE SHELL BRACKET ORNAMENTOVER LEFTWA" -"RDS TRIANGLE-HEADED ARROWPART BETWEEN MIDDLE AND RING FINGERSSINGLE COMMA QUO" -"TATION MARK ORNAMENTSMALL ARABIC LETTER TAH AND TWO DOTSTURNED COMMA QUOTATIO" -"N MARK ORNAMENTZENGE CONTAINING BLACK SMALL LOZENGE CONTAINING BLACK VERY SMA" -"LL SQUAREBESIDE AND JOINED WITH INTERSECTIONBOTTOM-LIGHTED RIGHTWARDS ARROWHE" -"ADGVEDIC KASHMIRI INDEPENDENT SVARITAND UPPER AND LOWER ONE EIGHTH BLOCKORNER" -" ARROWS CIRCLING ANTICLOCKWISEOUNDED HIGH STOP WITH FILLED CENTRER LOWER RIGH" -"T CURLY BRACKET SECTIONRIGHT-POINTING ANGLE QUOTATION MARKTWO HORIZONTAL STRO" -"KES TO THE RIGHTVERTICAL LINE WITH THREE TICK MARKS TWO DOTS OVER ONE DOT PUN" -"CTUATIONBLACK LEFT-POINTING SMALL TRIANGLEDOWNWARDS ARROW WITH TIP LEFTWARDSI" -"GHUR KAZAKH KIRGHIZ ALEF MAKSURA MODIFIER LETTER LABIALIZATION MARKOVER IGI S" -"HIR OVER SHIR UD OVER UDOVER TAB NI OVER NI DISH OVER DISHPPROXIMATELY NOR AC" -"TUALLY EQUAL TOR LOWER LEFT CURLY BRACKET SECTIONTEARDROP-SPOKED PROPELLER AS" -"TERISKUPPER BODY TILTING FROM HIP JOINTSALL BUT UPPER LEFT QUADRANT BLACKDIRE" -"CT PRODUCT WITH BOTTOM CLOSEDDOUBLE-LINE EQUAL ABOVE LESS-THANDOWNWARDS HARPO" -"ON WITH BARB RIGHTEFT-POINTING ANGLE QUOTATION MARKLESS-THAN ABOVE DOUBLE-LIN" -"E EQUALLLAR SIGN WITH OVERLAID BACKSLASHMEDIUM SHADE AND LOWER HALF BLOCKRAIS" -"ING BOTH HANDS IN CELEBRATIONTROFLEX CLICK WITH RETROFLEX HOOKTRONG CENTRALIZ" -"ATION STROKE BELOWTUG2 OVER TUG2 TUG2 OVER TUG2 PAPTWO DOTS ABOVE AND TWO DOT" -"S BELOWWARDS HARPOON WITH BARB DOWNWARDS-POINTING ANGLE BRACKET ORNAMENTAND M" -"IDDLE RIGHT TO LOWER CENTREATHARVAVEDIC INDEPENDENT SVARITAETALLED BLACK AND " -"WHITE FLORETTEHAND WITH MIDDLE FINGER EXTENDEDNORMAL FACTOR SEMIDIRECT PRODUC" -"TRIANGLE-HEADED OPEN CIRCLE ARROWRIGHT SEMICIRCLE WITH THREE DOTSRONT-TILTED " -"SHADOWED WHITE ARROWSEMICIRCULAR ANTICLOCKWISE ARROWVED STEM PARAGRAPH SIGN O" -"RNAMENT CROSSING ASH OVER ASH OVER ASHACK-TILTED SHADOWED WHITE ARROWAISED HA" -"ND WITH FINGERS SPLAYEDAND MIDDLE LEFT TO LOWER CENTREETALLED OUTLINED BLACK " -"FLORETTEIN WHITE CIRCLE IN BLACK SQUARELEFTWARDS EQUILATERAL ARROWHEADONE HUN" -"DRED THIRTY-FIVE DEGREESRIGHTWARDS HARPOON WITH BARB UPRING OVER TWO RINGS PU" -"NCTUATIONRINGS OVER ONE RING PUNCTUATIONTNAMESE ALTERNATE READING MARK UPWARD" -"S HARPOON WITH BARB RIGHT CONTAINING BLACK SMALL SQUARE-HIRAGANA PROLONGED SO" -"UND MARKAGGRAVATED INDEPENDENT SVARITAAND JOINED BY DASH WITH SUBSETDOT BELOW" -" AND THREE DOTS ABOVEDOWNWARDS AND RIGHTWARDS ARROWEART EXCLAMATION MARK ORNA" -"MENTEFT SEMICIRCLE WITH THREE DOTSGHT FOUR POINTED PINWHEEL STARGREATER-THAN " -"ABOVE EQUALS SIGNHIGH-REVERSED-9 QUOTATION MARKHT CENTRALIZATION STROKE BELOW" -"INDEX THUMB CURVE THUMB INSIDEMAKSURA WITH SUPERSCRIPT ALEF MINTON RACQUET AN" -"D SHUTTLECOCKMODIFIER LETTER LEFT HALF RINGON WITH RIGHTWARDS ARROW ABOVEOPEN" -" CENTRE EIGHT POINTED STARQAF WITH LAM WITH ALEF MAKSURARECTANGULAR CHECKER B" -"OARD FORMSAD WITH LAM WITH ALEF MAKSURA DOWN INDEX THUMB HOOK MIDDLE OVER RIG" -"HTWARDS ARROW TO BAR WITH REVERSED NEGATION SLASHCKED FACE WITH EXPLODING HEA" -"DCONTAINING BLACK SMALL CIRCLEDOT OVER TWO DOTS PUNCTUATIONDOWN HEAVY AND RIG" -"HT UP LIGHTDOWN MIDDLE THUMB INDEX CROSSEFTWARDS HARPOON WITH BARB UPEVERSED " -"LUNATE EPSILON SYMBOLEXTENDED ARABIC-INDIC DIGIT TLIGHT FOUR POINTED BLACK CU" -"SPNS-SERIF INTERROBANG ORNAMENTOMBINING ANUSVARA ABOVE RIGHTONAL INDICATOR SY" -"MBOL LETTER PUNCTUATION CHINOOK FULL STOPSEMICIRCULAR PATH AROUND POLESUPERSC" -"RIPT ALEF INITIAL FORMUP HEAVY AND RIGHT DOWN LIGHTWITH RIGHTWARDS ARROW AT L" -"EFTACE DIRECTION POSITION NOSE ASTERISKS ALIGNED VERTICALLYBESIDE AND JOINED " -"WITH UNIONDOUBLE ANUSVARA ANTARGOMUKHADOWN HEAVY AND LEFT UP LIGHTEDGE-TAILED" -" RIGHTWARDS ARROWEFT ARC GREATER-THAN BRACKETFTING POINT RIGHTWARDS ARROWHADE" -"D WHITE RIGHTWARDS ARROWHREE HUNDRED FIFTEEN DEGREESIBE SYLLABLE BOUNDARY MAR" -"KERISMILLAH AR-RAHMAN AR-RAHEEMLEFTWARDS OF DOWNWARDS ARROWLIQUID MEASURE FIR" -"ST SUBUNITMIDDLE CENTRE TO UPPER RIGHTMIDDLE RING LITTLE CONJOINEDMONOGRAMMOS" -" TESSERA DODEKATAOUND-TIPPED RIGHTWARDS ARROWRECTANGULAR PATH AROUND POLESALT" -"IRE WITH ROUNDED CORNERST LITTER IN ITS PLACE SYMBOLU ALAYHI WAAALIHEE WA-SAL" -"LAMUP HEAVY AND LEFT DOWN LIGHTUPPER CENTRE TO MIDDLE RIGHTUPWARDS AND RIGHTW" -"ARDS ARROW AND LEFT SEMICIRCLE ARROWS BARREE WITH TWO DOTS BELOW DIVIDED BY H" -"ORIZONTAL RULE-FEATHERED RIGHTWARDS ARROWAND UPPER HALF WHITE CIRCLEBETWEEN T" -"WO HORIZONTAL BARSBRDA RNYING YIG MGO MDUN MABRDA RNYING YIG MGO SGAB MACIRCL" -"E WITH NORTHWEST ARROWCONTINUOUS UNDERLINE SYMBOLDOUBLE PRIME QUOTATION MARKE" -"AVY WHITE RIGHTWARDS ARROWEMICIRCULAR CLOCKWISE ARROWENTATION FORM FOR VERTIC" -"AL FINGER COVERING CLOSED LIPSFOUR FINGERS CONJOINED BENTHANDED INTERLACED PE" -"NTAGRAMHEAD MARK WITH MOON AND SUNIDE ARC ANTICLOCKWISE ARROWIDE-HEADED RIGHT" -"WARDS ARROWIMPERFECTUM CUM PROLATIONE KATHAKA INDEPENDENT SVARITALARGE EQUILA" -"TERAL ARROWHEADLESS-THAN ABOVE EQUALS SIGNLIGHT CENTRALIZATION STROKELOWER MI" -"DDLE LEFT TO LOWER LOWER TONAL RANGE INDICATORONE LARGE AND ONE SMALL EYEOUR " -"BALLOON-SPOKED ASTERISKPHARYNGEAL VOICED FRICATIVEPPY PERSON RAISING ONE HAND" -"RIANGULAR ONE QUARTER BLOCKRIGHT ARC LESS-THAN BRACKETRIPLE VERTICAL BAR OPER" -"ATORSTRUMENTAL NOTATION SYMBOL-TALIC LATIN CAPITAL LETTER TWO HUNDRED SEVENTY" -" DEGREESUPPER CENTRE TO LOWER RIGHTUPPER MIDDLE LEFT TO UPPER WALLPLANE SHOUL" -"DER HIP MOVEWO DOTS BELOW AND DOT ABOVEZERO FOR ODD POWERS OF FOUR GAD OVER G" -"AD GAR OVER GAR LESS THAN THE DENOMINATOR NEGATED WITH VERTICAL BAR OR APPROX" -"IMATELY EQUAL TO WITHIN TRIANGLE ARROWHEADALEF MAKSURA ISOLATED FORMAND LEFT " -"HALF WHITE CIRCLEAND MIDDLE FINGERS CROSSEDAND RIGHT ONE EIGHTH BLOCKBLE TENN" -"IS PADDLE AND BALLCAT FACE WITH SMILING EYESCLOCKWISE ARROW WITH MINUSCRIPT L" -"IGATURE ET ORNAMENTDOTTED LUNATE SIGMA SYMBOLDOTTED SUBSTITUTION MARKERDROP-S" -"HADOWED WHITE SQUAREE ONE-WAY LEFT WAY TRAFFICERSTRASS ELLIPTIC FUNCTIONHTORA" -" SKLIRON CHROMA VASISIDEOGRAPHIC ITERATION MARKINDUSTRIAL STANDARD SYMBOLJECT" -" REPLACEMENT CHARACTERLANTED SOUTH ARROW WITH HOLEFTWARDS OF UPWARDS ARROWLIN" -"E FEED SEPARATOR SYMBOLLLALLAHOU ALAYHE WASSALLAMMARRIED PARTNERSHIP SYMBOLME" -"EM WITH HAH WITH TATWEELMODIFIER FITZPATRICK TYPE-OCKED FEMALE AND MALE SIGNO" -"NOMICAL SYMBOL FOR URANUSOORPLANE SHOULDER HIP MOVEORTHOGONAL CROSSHATCH FILL" -"OTATED FLORAL HEART BULLETOUBLE ANGLE QUOTATION MARKRIGHT PARENTHESIS ORNAMEN" -"TRINGS ALIGNED HORIZONTALLYRIPLE DOT PUNCTUATION MARKSSIAN ASTROLOGICAL SYMBO" -"L THREE DOTS ABOVE DOWNWARDSU REVERSED OVER U REVERSEDUNEVEN EYES AND WAVY MO" -"UTHWHITE RIGHT POINTING INDEXWITH LEFTWARDS ARROW ABOVEYAJURVEDIC MIDLINE SVA" -"RITA OVER NUN LAGAR TIMES SAL WITH CIRCLED ONE OVERLAY WITH DOUBLE GRAVE ACCE" -"NT WITH DOUBLE MIDDLE TILDE WITH DOUBLE VERTICAL BARBREVE WITH INVERTED BREVE" -"BUT NOT ACTUALLY EQUAL TOCAT FACE WITH CLOSED EYESCROSSING NORTH EAST ARROWDI" -"AERESIS AND HOOK SYMBOLDOUBLE CANDRABINDU VIRAMADRY MEASURE FIRST SUBUNITELD " -"HOCKEY STICK AND BALLFECTIVENESS OR DISTORTIONFFICULTY AT THE BEGINNINGING ON" -" THE FLOOR LAUGHINGINVERTED EXCLAMATION MARKLEFT PARENTHESIS ORNAMENTLEFTWARD" -"S ARROW WITH HOOKLOW QUILT SQUARE ORNAMENTMBINING CRYPTOGRAMMIC DOTMEDIUM TRI" -"ANGLE ARROWHEADMULTIPLICATION SIGN BELOWNIVERSAL RECYCLING SYMBOLOLD ASSYRIAN" -" WORD DIVIDERONE UNDER EIGHTEEN SYMBOLOUBLE BIRGA WITH ORNAMENTOUTLINED RIGHT" -"WARDS ARROWRANCH BANK IDENTIFICATIONREE-HUNDRED-AND-TWENTIETHRIGHT DIAGONAL H" -"ALF BLACKRIGHT ONE SIXTEENTH BLOCKRIPLE BIRGA WITH ORNAMENTRIST CIRCLE HITTIN" -"G WALL SQUARE CHECKER BOARD FORMSTROKE AND TWO DOTS ABOVETAB OVER TAB GAR OVE" -"R GARTERNION INTEGRAL OPERATORTTED SUBSTITUTION BRACKET OVER TOP SQUARE BRACK" -"ET POINTING BACKHAND INDEXALTERNATE SECTION MARKERAND MALE AND FEMALE SIGNARM" -" CIRCLE HITTING WALL ARROW POINTING DIRECTLY BERKANAN BEORC BJARKAN BBLACK LE" -"NTICULAR BRACKETBLIC ADDRESS LOUDSPEAKERBUSINESS SUIT LEVITATINGCOMPATIBILITY" -" IDEOGRAPH-CONSECUTIVE EQUALS SIGNSCULINE ORDINAL INDICATORDESCENDING MUSICAL" -" NOTESDIAGONAL CROSSHATCH FILLDOUBLE HORIZONTAL STROKEDOWNSCALING FACTOR KIIZ" -"HE PLUS A PLUS SU PLUS NAEASTERN PWO KAREN DIGIT EQUAL TO OR GREATER-THANEYES" -" AND HAND OVER MOUTHFINGER AND THUMB CROSSEDGLOTTAL STOP WITH STROKEGREATER-T" -"HAN OR EQUAL TOHEAVY BLACK HEART BULLETIGATURE OPEN ET ORNAMENTING FACE WITH " -"OPEN MOUTHINTERSECTION WITH SERIFSISOSCELES RIGHT TRIANGLELARGE TRIANGLE ARRO" -"WHEADLEFT DIAGONAL HALF BLACKLEFT ONE SIXTEENTH BLOCKLICATION PROGRAM COMMAND" -"LINE HORIZONTAL ELLIPSISLY-RECYCLED PAPER SYMBOLMALL CIRCLE TO THE RIGHTMALL " -"LEFT SQUARE BRACKETMTAVRULI CAPITAL LETTER ONE-HUNDRED-AND-SIXTIETHORIZONTAL " -"BAR WITH NOTCHOTTOM SHADED WHITE ARROWOTTOM-SHADED WHITE ARROWPERSCRIPT ALEF " -"MOKHASSASPOINTING DOWNWARDS ABOVEREVERSED NINE-LIKE BHALERIGHTWARDS THEN CURV" -"ING SINGLE-LINE NOT EQUAL TOSTROKE THROUGH DESCENDERSYLLABLE REPETITION MARKT" -" BLACK RIGHTWARDS ARROWTEARDROP-SPOKED ASTERISKTED INTERPOLATION MARKERUPRIGH" -"T RECTANGULAR ZEROUPWARD POINTING TRIANGLEVOICED LARYNGEAL SPIRANTWELVE POINT" -"ED BLACK STARWITH CANCELLATION STROKEWITH UPWARDS ARROW ABOVEWO DOTS VERTICAL" -"LY ABOVEWO DOTS VERTICALLY BELOW CAKE WITH SWIRL DESIGN HUNDRED TWENTY-EIGHTH" -" POINTING AT THE VIEWER ROTATED NINETY DEGREES WITH HALF-CIRCLE BELOWALEF MA" -"KSURA FINAL FORMALGAMATION OR COPRODUCTAND WOMAN HOLDING HANDSANG DEPARTING T" -"ONE MARKARABIC LETTER TAH ABOVEARTY HORN AND PARTY HATASCENDING MUSICAL NOTES" -"ATTACHING VERTICAL OMETAVOURING DELICIOUS FOODBARBED RIGHTWARDS ARROWCIRCUMFL" -"EX ACCENT ABOVECLUSTER-INITIAL LETTER CURRENT SYMBOL FORM TWODOT BELOW AND DO" -"T ABOVEDOWNWARDS THEN CURVING ESS OUTLINED WHITE STARFACING SNAKE HEAD WITH G" -"REEK SMALL LETTER IOTAHANKED RIGHTWARDS ARROWHREE POINTED BLACK STARHT TRIFOL" -"IATE SNOWFLAKEIDE ARC CLOCKWISE ARROWIGHT-SHADED WHITE ARROWININE ORDINAL IND" -"ICATORISTED RIGHTWARDS ARROWSIVE FINGERS SPREAD OPENLEFT-SHADED WHITE ARROWLO" -"WER ONE QUARTER BLOCKLSCHREIBER PAUSE SYMBOLMITIAN CONJUGATE MATRIXORAH WITH " -"NINE BRANCHESORIGINAL OF OR EQUAL TOORIZONTAL RULER SEGMENTOVER RIGHTWARDS HA" -"RPOONOVERLAPPING LOGICAL ANDP WITH EXCLAMATION MARKPA OVER PA GAR OVER GARPUN" -"CTUATION END OF TEXTRAISED OMISSION BRACKETREE VARIATION SELECTOR RIGHT DIAGO" -"NAL ELLIPSISRIGHT HORIZONTAL SECANTRIGHT ONE QUARTER BLOCKRIGHT-POINTING TRIA" -"NGLERTOISE SHELL BRACKETED SHAPE WITH A DOT INSIDESING DIAGONAL CROSSING SOLI" -"DUS BINARY RELATIONUBLE VERTICAL BAR BELOWUP SPREAD THUMB FORWARDUPPER ONE QU" -"ARTER BLOCKUPWARDS THEN NORTH WESTVERTICAL BISECTING LINEWESTERN PWO KAREN TO" -"NE-WHITE FOUR POINTED CUSPWO-WAY LEFT WAY TRAFFICZANTINE MUSICAL SYMBOL OVER" -" STAMPED ENVELOPE RIGHT ARROWHEAD ABOVE SYMBOL FOR LIGHTHOUSE WITH CIRCUMFLEX" -" ABOVE WITH DECORATIVE COVER WITH SINGLE ZAPYATAYA WITH THREE DOTS ABOVE-ROTA" -"TED DIVISION SIGNACKSLANTED SOUTH ARROWARMENIAN ETERNITY SIGNBAR ABOVE INTERS" -"ECTIONCJK UNIFIED IDEOGRAPH-CONSONANT MODIFIER BARCONSONANT SIGN MEDIAL CURLY" -" BRACKET ORNAMENTDOMAIN ANTIRESTRICTIONDOUBLE SOLIDUS OVERLAYDOUBLE VERTICAL " -"STROKEDOUBLE-LINED HEAD MARKDOWN-POINTING TRIANGLEDOWNWARDS ZIGZAG ARROWDRESS" -"ED TO THE SUBJECTEAST-POINTING AIRPLANEGREATER-THAN DIAERESISHEXIFORM LONG AN" -"USVARAHORT HORIZONTAL STROKEI YFESIS TETARTIMORIONIGEL LONG-BRANCH-SOL SIN DE" -"PARTING TONE MARKINDIRECT QUESTION MARKING HEAD IN SILHOUETTEINVERTED SMALL V" -" ABOVEINVERTED SMALL V BELOWKEEPING STILL MOUNTAINLATIN CAPITAL LETTER SLE BE" -"SIDE VERTICAL BARLEFT ONE QUARTER BLOCKLEFT TRIANGLE OPERATORLEFT-POINTING TR" -"IANGLELONG HORIZONTAL STROKELOW PARAPHRASE BRACKETMNYAM YIG GI MGO RGYANND RE" -"CORDING COPYRIGHTNOT INCLUDING THE POLEOVER LEFTWARDS HARPOONOVER NU11 BUR OV" -"ER BUROVER SHIR BUR OVER BURPERSET OF NOR EQUAL TOPOINTING UPWARDS BELOWPRECE" -"DED BY APOSTROPHEPUNCTUATION KUNDDALIYAQUESTION MARK ORNAMENTREASE FONT SIZE " -"SYMBOLRECTILINEAR BLACK STARREE-CIRCLE ALTERNATE IRIGHT-POINTING FLEURONROUND" -" A POINT OPERATORRROW WITH ROUNDED HEADSEMI-VOICED SOUND MARKSHORT RIGHTWARDS" -" ARROWSHORT VERTICAL STROKESSYMPTOTICALLY EQUAL TOTRIPLE DASH HORIZONTALTRIPL" -"E RIGHT TURNSTILETRIPLE VERTICAL STROKEUBSCRIPT SMALL LETTER UPPER ONE EIGHTH" -" BLOCKUPPER RIGHT AND LOWER USTOMER ACCOUNT NUMBERWASALLAM ISOLATED FORMWITH " -"HORIZONTAL STROKEWITH JEEM INITIAL FORMWITH VOICED SOUND MARKYIAKENG PUACHUE " -"HMONG AND SLANTED PARALLEL WITH SHORT RIGHT LEG WITH VERTICAL STROKE-ROUND N" -"OTEHEAD DOWN -SHAPED BAG DELIMITERABOVE SHORT DOWN TACKACUTE AND HOOK SYMBOLA" -"KIA TELOUS ICHIMATOSALLING DIAGONAL SLASHAND VOWEL LENGTH MARKARD SHELL FLOPP" -"Y DISKARKENING OF THE LIGHTARYSTIAN FIVE HUNDREDBESIDE RIGHT TRIANGLEBOTTOM A" -"ND LOWER LEFTBOTTOM U-SHAPED ARROWBUT NOT EQUIVALENT TOCROSSE STICK AND BALLC" -"RUCIFORM NUMBER FOURCTOR OR CROSS PRODUCTDELIMITER TSHEG BSTARDIGRAMMOS EX DO" -"DEKATADOUBLE LEFT TURNSTILEDOWN HORIZONTAL HEAVYDOWN HORIZONTAL LIGHTDOWNWARD" -"S ARROW ABOVEEFT HORIZONTAL SECANTEFT OPEN BOX OPERATOREIGHT SPOKED ASTERISKE" -"LATIONAL COMPOSITIONEQUAL TO OR LESS-THANER RIGHT CORNER ANGLEFINAL CONSONANT" -" SIGN FLATTENED PARENTHESISGHT OPEN BOX OPERATORGRAMMOS OKTO DODEKATAGRUENT W" -"ITH DOT ABOVEHALF TRIANGULAR COLONHAND INTERIOR PRODUCTHOCKEY STICK AND PUCKH" -"ORIZONTAL REFLECTIONHORIZONTAL TABULATIONHOUSAND MILLIONS SIGNINTERSECTING LO" -"GICAL INTERSECTION OPERATORINVERTED BRIDGE BELOWINVERTED GLOTTAL STOPJUSTIFIE" -"D LOWER HALF JUSTIFIED RIGHT HALF JUSTIFIED UPPER HALF LATTENED OPEN A ABOVEL" -"ESS-THAN OR EQUAL TOLETTER SMALL CAPITAL MALE WITH STROKE SIGNMIDDLE RING LIT" -"TLE ONMORPHOLOGICAL DIVIDERND TELEPHONE RECEIVEROCAL NOTATION SYMBOL-OHAMMAD " -"ISOLATED FORMOP SHADED WHITE ARROWOPPOSING AN PLUS NAGAPAP PLUS PAP PLUS LU3R" -"ATING SYSTEM COMMANDRELICT HOUSE BUILDINGREVERSED FEATHER MARKRIGHT QUARTER S" -"ECTIONRISING DIAGONAL SLASHSH AMPERSAND ORNAMENTSHORT LEFTWARDS ARROWSIDE TO " -"SIDE SCISSORSTEEN POINTED ASTERISKTHICK LETTER SELECTORTILDE OPERATOR ABOVE T" -"OUCHING INSIDE MOUTHTRIANGULAR HALF BLOCKUPPER QUARTER SECTIONVERTICAL LINE O" -"VERLAYVERY HEAVY BARB ARROWVOICED ITERATION MARKWITH INVERTED V ABOVEWO-CIRCL" -"E ALTERNATE IWO-CIRCLE NUKTA ABOVEXTRA SHORT VOWEL MARKYIG MGO TSHEG SHAD MA " -"ABOVE LEFT TRIANGLE AND DIAGONAL STROKE BEGIN LOGOGRAM MARK OVER LAGAR GUNU S" -"HE OVER TUR ZA OVER ZA WITH HORIZONTAL BAR WITH INVERTED INPUT79 OVER LAK-079" -" GUNUA- SHOG GI MGO RGYANAISED UPPER LEFT ARCAND NORTH EAST ARROWAND NORTH WE" -"ST ARROWAND SOUTH EAST ARROWAND SOUTH WEST ARROWANGE ANTIRESTRICTIONARXIS KAI" -" FTHORA VOUBETWEEN PALM FACINGSBSET OF NOR EQUAL TOCENTRE VERTICAL LINECHARAC" -"TER INTRODUCERCHEMICAL SYMBOL FOR CONSONANT SIGN HAARUCRESCENT MOON SYMBOLCUR" -"RENCY SYMBOL RIELCURVED ANGLE BRACKETDOTLESS HEAD OF KHAHDOUBLE ANGLE BRACKET" -"DOUBLE DOT TONE MARKDOWN ARROWHEAD BELOWE CONSONANT MODIFIERE POINTED WHITE S" -"TAREMESTVENNY ZADERZHKAENARMONIOS ANTIFONIAEVERSED ROTATED RANAFINAL CONSONAN" -"T MARKFIVE SPOKED ASTERISKFORMS LIGHT VERTICALFOUR RAISED KNUCKLESGHTWARDS AR" -"ROW BELOWGRA GCAN -CHAR RTAGSHALF CIRCLE WITH DOTHAR2 TIMES GAL PLUS HIGH RAT" -"HA OR LOW PAHIGH TONE APOSTROPHEHREE-DOT NUKTA ABOVEIMAGE OF OR EQUAL TOINDEX" -" RING LITTLE ONINING OBLIQUE STROKEINSIDE MOUTH RELAXEDINVERSE WHITE CIRCLEIN" -"VERTED CANDRABINDUIRCLES HITTING WALL JUDEO-SPANISH VARIKAJUSTIFIED LEFT HALF" -" KHAMTI REDUPLICATIONL FUNCTIONAL SYMBOL LAILING ROBOT FRAME-LATALIZED HOOK B" -"ELOWLE WITH POPPING CORKLEFT AND LOWER RIGHTLEFT-TO-RIGHT SECANTMULTIPLE PUNC" -"TUATIONNIS RACQUET AND BALLONCAVE-SIDED DIAMONDONE MARK SGAW KAREN OTLESS J W" -"ITH STROKEOVER LEFTWARDS ARROWOWER QUARTER SECTIONPLUS GISH TIMES TAK4POTABLE" -" WATER SYMBOLREAN STANDARD SYMBOLREVERSED ONE HUNDREDRIGHT ANGLE WITH DOTRIGH" -"T QUADRANT BLACKRIGHT U-SHAPED ARROWRUMAI PALAUNG TONE-5SCRIPTION CHARACTER S" -"EPARATOR KEY SYMBOLSEPARATOR MIDDLE DOTSIDEWAYS NOON GHUNNASTAR WITH MIDDLE D" -"OTTHROUGH SMALL CIRCLETISTRY SYMBOL LIGHT TRANSPOSITION MARKERUBHAANAHU WA TA" -"AALAAUP-POINTING AIRPLANEUP-POINTING TRIANGLEVAL WITH OVAL INSIDEWARE-FUNCTIO" -"N SYMBOLWET CULTIVATION SIGNWITH FOUR DOTS ABOVEWITH SOROCHYA NOZHKAWORD REPE" -"TITION MARKYIG MGO PHUR SHAD MAYRENAIC TWO DRACHMAS AND PROSGEGRAMMENI AND RE" -"TROFLEX HOOK FLUTTERING IN WIND IN A RECTANGLE BOX KASKAL U GUNU DISH LOVE YO" -"U HAND SIGN WITH STRIKETHROUGH WITH VERTICAL TAILA END LOGOGRAM MARKAHU ALAYH" -"I WA-AALIHALTERNATE LAKH MARKANS-SERIF CAPITAL LANSPOSITION BRACKETARABIC FOR" -"M SHAPINGARENTHESIS NOTEHEADARTIAL DIFFERENTIALATED TELLER MACHINEBETWEEN MID" -"DLE RINGBINING ALEF OVERLAYC DIGRAPH WITH CURLCIRCLED SANS-SERIF CIRCLED WHIT" -"E ARROWD CIRCUMFLEX ACCENTDENOMINATOR SIXTEENDOWN AND HORIZONTALDOWN POINTING" -" INDEXEFT QUARTER SECTIONET WITH WHITE CROSSEVEN POWERS OF FOURFIVE FINGERS S" -"PREADFLOORPLANE TWISTINGFT-POINTING FLEURONGAPPED CIRCLE ARROWGIBBOUS MOON SY" -"MBOLHAND COVERING MOUTHHEAD-SHAPED POINTERHORT STROKE OVERLAYHURISAZ THURS TH" -"ORNIGATURE AYIN-DALETHILDING CONSTRUCTIONIMIDIA SEXTULA SIGNIN CHEN SPUNGS SH" -"ADING SHIRT WITH SASHINGLE DOT TONE MARKINSIDE CIRCLE BELOWISPUTED END OF AYA" -"HITED LIABILITY SIGNKULL AND CROSSBONESLEADING MCHAN RTAGSLEFT POINTING INDEX" -"LEFT U-SHAPED ARROWLF MADDA OVER MADDALUB-SPOKED ASTERISKMOVES AGAINST CHEEKM" -"SHELL MOBILE PHONENAXIAN FIVE HUNDREDNDRED POINTS SYMBOLNE HUNDRED TWENTY PNE" -"TWORKED COMPUTERSNOGRAPHIC FULL STOPNORTH ARROW WITH HOOP SEMICIRCLE ARROWOTA" -"TED ARDHAVISARGAOVER E NUN OVER NUNOW-9 QUOTATION MARKPARAGRAPH SEPARATORPREF" -"IXED NASAL SIGNQUADRUPLE CRESCENTSQUESTION MARK ABOVERAILING MCHAN RTAGSRATUM" -" SUPER STRATUMREE-QUARTER CIRCLE RIGHT MIDDLE STROKERIGHT TO LOWER LEFTRROW N" -"O-BREAK SPACERY CULTIVATION SIGNSEQUENCE INTRODUCERSEVEN EIGHTHS BLOCKSH PLUS" -" HU PLUS ASHSLANTED NORTH ARROWSTRAIGHT THUMB BENTSTRATIAN FIFTY MNASSYMBOL F" -"OR BEGINNERTART OF RUB EL HIZBTHANG LONG ANUSVARATIGHTLY-CLOSED EYESTO LOWER " -"RIGHT FILLTRANNO MALO POVYSHETURNED PADA PISELEHTURNED SECTION MARKTWENTY-FIV" -"E DEGREESUBLE DOT WITHIN DOTUP HORIZONTAL HEAVYUP HORIZONTAL LIGHTUP-POINTING" -" CHEVRONURRENCY SYMBOL BAHTVARIANT FORM ILIMMUVARIANT WITH SQUAREVARIATION IN" -"DICATORVASTNESS OR WASTINGVERSAL INTERSECTIONVERSE FINAL BARLINEVERTICAL TABU" -"LATIONWITH YEH FINAL FORMWOMEN HOLDING HANDS AND NO DOTS ABOVE AND SMASH PROD" -"UCT AND YPOGEGRAMMENI FOR SIMALUNGUN SA NOT LITTER SYMBOL OVER INVERTED SHU S" -"PREAD THUMB SIDE THUMB INDEX THUMB WITH CIRCLE ABOVE WITH CIRCLE BELOW WITH C" -"ROSSED-TAIL WITH FLOWING SAND WITH KAVYKA ABOVEABBREVIATION MARK AND LOW RIGH" -"T RINGARROW SHAFT WIDTH ASTED SWEET POTATOASTROLOGICAL SIGN ATERRESTRIAL ALIE" -"NATIN SMALL LETTER BAARAKA WA-TAAALAABASELINE ROUND DOTBOTTOM RIGHT KASRACANT" -"ILLATION SIGN CONTINUING OVERLAPCOPPER ANTIMONIATECTLY EQUIVALENT TOCUP WITHO" -"UT HANDLEDOUBLE PUNCTUATIONDOWN-OUTPUT SYMBOLEAST POINTING LEAFENTERING TONE " -"MARKENTY-TWO POINT TWOEPIGRAPHIC LETTER ERTICAL BAR VIRAMAEVENTEEN FULL STOPE" -"VERSED CHELYUSTKAFIVE EIGHTHS BLOCKFORKED PARAGRAPHOSFORTY-FIVE DEGREESGATIVE" -" ACKNOWLEDGEGGLY VERTICAL LINEGISH CROSSING GISHHAIS LUS NTOG NTOGHEAVY WHITE" -" SQUAREHILOSOPHERS SULFURHOLDING BACK TEARSHORIZONTALLY BELOWHOUSANDS SEPARAT" -"ORHUNDREDS UNIT MARKIGATURE ZAYIN-YODHIGSAW PUZZLE PIECEIN POSSESSION SIGNIND" -"EPENDENT VOWEL IRROR HORIZONTALLYITAN SMALL SCRIPT IX SPOKED ASTERISKJEEM ISO" -"LATED FORMKANTAJA NAASIKYAYAKBAR ISOLATED FORMKOREAN CHARACTER OLEFT MIDDLE S" -"TROKELEFT-STEM TONE BARLOSED CIRCLE ARROWLOWER MIDDLE RIGHTMATHEMATICAL SPACE" -"ND UPPER RIGHT ARCNINETEEN FULL STOPNISH VERSE DIVIDERNORMAL SUBGROUP OFNYET " -"THYOOM TA-ROLNYOOGA NAAKSIKYAYAORK ON THE DECAYEDOTLESS DALATH RISHOU ALAYHE " -"WASALLAMOUCHTONE TELEPHONEOW TONE APOSTROPHEPACING CANDRABINDUPERFIXED LETTER" -" RAPUNCTUATION BINDU QUARTER NOTE STEM REDUPLICATION MARKRIST CIRCLE FRONT RY" -"UKOVAYA SVETLAYAS INSIDE AND ABOVES PRESSED TOGETHERSEPTUPLE CRESCENTSSET OVE" -"R BUILDINGSSHAN REDUPLICATIONSHING SWEAT SYMBOLSINGLE PUNCTUATIONSMALL CIRCLE" -" ABOVESOUL ISOLATED FORMSYMMETRIC SWAPPINGTILTING FROM WAISTTO LOWER LEFT FIL" -"LTOP U-SHAPED ARROWTROFLEX HOOK BELOWTYPE A ELECTRONICSU-SHAPED ORNAMENTSUM W" -"ITH DRUMSTICKSUP ARROWHEAD BELOWUPPER MIDDLE RIGHTUTLINED BLACK STARVARIANT F" -"ORM LIMMUVERY SMALL DIAMONDWEST POINTING LEAFWHITE VERTICAL BARWITH JUSTIFICA" -"TIONWITH STROKE SYMBOLYLLABLE LENGTHENER ALTERNATION MARK AND PALATAL HOOK GR" -"AVEYARD SYMBOL LAGAB TIMES ASH2 LAGAR OVER LAGAR OVER ZU PLUS SAR PLUS SHA3 P" -"LUS A TO BLACK DIAMOND WITH BULLET NOSE WITH SOUND WAVES WITH TILDE ABOVE-GAA" -"HLAA TTUDDAAG-HEIGHT LEFT HOOK0 WHEELED CHARIOTA PLUS HA PLUS DAABBREVIATION " -"SIGNAEUM ONE PLETHRONALTERNATE NUMBER AMPHYLIAN DIGAMMAAND BLACK SQUARESAPLI " -"DYO DODEKATAATHERING TOGETHERAUKAZ LAGU LOGR LBE WITH MERIDIANSBERBER ACADEMY" -" YABOTTOM HALF BLACKBRACKET EXTENSIONBRIGHTNESS SYMBOLBUT RELIEVED FACECAL SY" -"MBOL BOTTOMCANCELLATION MARKCANDRABINDU ABOVECIRCLES WITH DOTSCLOSED LITTLE Y" -"USCOMBINING NUMBER CONSONANT SIGN PACONTINUATION SIGNCONTOURED OUTLINECROSS P" -"UNCTUATIONCTION APPLICATIONDELPHIC FIVE MNASDENTAL PERCUSSIVEEAR SCREEN SYMBO" -"LEMICOLON UNDERBARFACING BABY CHICKFINGER-POST ARROWFLICK ALTERNATINGFRACTION" -" ONE HALFFROM SMALL CIRCLEGENERIC MATERIALSGREATER-THAN NOR GREATER-THAN SIGN" -"HAH ISOLATED FORMHEART-SHAPED EYESHIRTEEN FULL STOPHORIZONTAL DOUBLEHORIZONTA" -"L SINGLEIASTRE MARK ABOVEICTED LEFT ENTRY-IDEOGRAPHIC COMMAIGHTEEN FULL STOPI" -"NEAR ANNOTATION ING POLE AND FISHINITIAL LETTER RAINVERTED MCHU CANITE PART I" -"NTEGRALKE BOTTLE AND CUPKHAH INITIAL FORMLAGOLITIC LETTER LAH ISOLATED FORMLA" -"PPING LESS-THANLD PERMIC LETTER LHOUETTE OF JAPANLIAN HIEROGLYPH AMALL RED TR" -"IANGLEMALL WHITE CIRCLEMANENT PAPER SIGNMEDIUM BARB ARROWMEDIUM SHADE FORMMEE" -"M INITIAL FORMMILITARY AIRPLANENASALIZATION MARKNAUDIZ NYD NAUD NND UPPER LEF" -"T ARCNE EYEBROW RAISEDNEGATIVE CIRCLED NFORMATION SOURCENG STROKE OVERLAYONE " -"EIGHTH BLOCK-OP AND UPPER LEFTOPEN-HEADED ARROWOURTEEN FULL STOPOWER NUMERAL " -"SIGNPINWHEEL ASTERISKPRECEDING SOLIDUSPRIZNAK MODIFIER PUNCTUATION SIGN QUAT " -"REVERSED ESHREATIONAL VEHICLERIATION SELECTOR-RIGHT HALF CIRCLERYBLION BASE S" -"IGNS REVOLVING LIGHTSERVER EYE SYMBOLSIGN O WITH CROSSSQUARED TIMES KURSTRAIG" -"HT MOVEMENTTAN ISOLATED FORMTARTING FROM SIGNTEN THOUSAND SIGNTERSYLLABIC TSH" -"EGTHREE SOUND WAVESTIAL ARTS UNIFORMTONAL RANGE MARK TRIPLE DASH ARROWULAR ME" -"DIUM SHADEUP AND HORIZONTALUP POINTING INDEXURNED COMMA ABOVEURNED DAMMA BELO" -"WVARIANT FORM ASH9VARIANT FORM IMINVARIANT FORM USSUVEE WITH UNDERBARVERAGE W" -"ITH SLASHVOCALIZATION MARKVRE TOURNOIS SIGNWHITE PARENTHESISWHITE SHOGI PIECE" -"WITH NOT EQUAL TOWO VERTICAL DOTS Y ON BLACK SQUAREYEH ISOLATED FORMYPTIAN HI" -"EROGLYPH AND HEAVY RIGHT AND LIGHT RIGHT CAPPED MOUNTAIN INSERTION POINT LIGH" -"T MOON ARTA OR THE IMAGE OF PLUS KAK PLUS A SMALL ROTATIONS TIMES DISH TENU T" -"IMES GAN2 TENU WITH BUNNY EARS WITH DOT INSIDE WITH HEADSTROKEADIAN SYLLABICS" -" AFFRICATION MARKANABAZAR SQUARE ARENTHESES ABOVEB2 TENU PLUS TABBOLD GREEK C" -"ROSSBOTTOM HALF RINGCANDRA ANUNASIKACASIAN ALBANIAN CH WITH UMBRELLACKLE FILL" -" FRAME-CLOSED TENTACLESCOMPRESSED ARROWCONSONANT JOINERCORNER DOWNWARDSCORNER" -" LEFTWARDSCREAMING IN FEARDEWAYS U BRACKETDITORIAL CORONISDOTTED CRESCENTSDOU" -"BLE CRESCENTSDOUBLE DOT ABOVEDOUBLE HEAD MARKDOUBLE TURNSTILEDOUBLE ZAPYATAYA" -"DOWN RIGHT BARB DVUMYA ZAPYATYMIE PLUS GAN2 TENUECIMAL SEPARATOREFORE COMPLET" -"IONEN MILLIONS SIGNEND OF TEXT MARKENTRE WHITE STARENUMERATION SIGNEPSILON UN" -"DERBARERCURY SUBLIMATEEVERSED VISARGA EVERY OTHER TIMEFALLING DIAGONALFFERENC" -"E BETWEENFLOORPLANE SPACEFORWARD-FACING RHIGH SPACING DOTHMATULLAH ALAYHEHOLD" -"ING TOGETHERHYPHENATION MARKIDED GREEK CROSSIFTEEN FULL STOPIGHTH NOTE STEM I" -"MENSIONAL ANGLEINDEPENDENT SHININDEX THUMB SIDEINES CONVERGING IPPER-MOUTH FA" -"CEIRCLE X NOTEHEADISTOS DISC SIGN IVE POINTED STARK PERMITTED HERELD ASSYRIAN" -" ONE LEFT ARROW ABOVELEFT HALF CIRCLELIGHT AND RIGHT LIGHT BARB ARROWLLER COA" -"STER CARLLOW PAN OF FOODLOWER OVER UPPERLTERNATE HASANTAMAGNIFYING GLASSMESTV" -"ENNY KLYUCHMIDDLE AND BELOWMIDDLE AND RIGHTNAL DIGIT SHAPESNION WITH SERIFSNT" -"AIGANA LETTER O-MINOAN SIGN CMOLD TAMIL VIRAMAOLD WHITE CIRCLEORIZONTAL JOINE" -"RPEN CENTRE CROSSPLACEHOLDER MARKPLE MEASURE RESTPOSTPOSITION MENPRECEDING SU" -"BSETPRECHGESANG STEMQ WITH HOOK TAILQUALS SIGN BELOWR PLUS GAN2 TENURAIDO RAD" -" REID RRAYS AND DOTTED RECORD SEPARATORREPETITION MARK-RESH-AYIN-DALETHRESSIO" -"NLESS FACERIGHT DOWN BARB RIGHT HALF BELOWRIGHT HALF BLACKRISING TONE MARKRIZ" -"ONTAL ELLIPSESANS-SERIF ARROWSERIFS AT BOTTOMSHU2 PLUS KASKALSIGN RISING TONE" -"SITION INDICATORSLANTED EQUAL TOSMALL CAPITAL ELSMALL NOON ABOVESTERISK OPERA" -"TORSTICKING OUT FARSTRAIGHT STRETCHSTRING FRETBOARDSTUCK-OUT TONGUETAKANA-HIR" -"AGANA TRIPLE CRESCENTSUBJOINED LETTER UDLY CRYING FACEULDERED OPEN BOXUMBER S" -"IGN ABOVEUP MIDDLE HINGEDUP-OUTPUT SYMBOLUPERSCRIPT ALAPHUPPER OVER LOWERVARI" -"ANT FORM ESHVERY HEAVY SHAFTVIEWING CEREMONYVOWEL LENGTHENERWALLED ENCLOSUREW" -"AVY HAMZA BELOWWITH CENTRED DOTWITH HEARING AIDWITH LEFT UPTURNYATHOS BASE SI" -"GNYIR MKPARAQ MEUN ALTERNATE FORM AND BOTTOM END CLOUD AND RAIN CORNER BRACKE" -"T DEYTEROU ICHOU NEPOSTOYANNAYA OPERATOR WITH OVER MOUNTAINS OVER SIG4 SHU2 " -"PARESTIGMENON PLUS HI PLUS A THROUGH CIRCLE THUMB STRAIGHT TIMES IGI GUNU TO" -"UCHING INDEX WITH DESCENDER WITH DIAERESIS WITH RIGHT LEG-CARRIER LETTER-NO-E" -"VIL MONKEY-PIECE SWIMSUIT2 CHARIOT FRAMEACHES THE LIMITAI LAING DIGIT ALAYHE " -"ASSALLAMALIF LENGTHENERALMOST EQUAL TOAMARITAN SOURCEAMOUNT OF CHECKAND PARAL" -"LEL TOATA LINK ESCAPEATINATE MYSLITEBAGS UNDER EYESBAR ABOVE UNIONBELGTHOR SY" -"MBOLBELOW LONG DASHBENT OVER INDEXBINDING BRACKETBLACK TRIANGLESBLOCK DIAGONA" -"L BREAKING HYPHENBROWS STRAIGHT CAPITAL LETTERSCIRCUIT-OUTPUT CKET CALCULATOR" -"CLOSED BY CURVECORNER WITH DOTDAGESH OR MAPIQDESCENDING TONEDI ALLAHOU ANHUDI" -"ALYTIKA TONOSDIGA AELA-PILLADOING CARTWHEELDOUBLE TRIANGLEDOWN SEQUENTIALDOWN" -"WARDS TRENDE ISOLATED FORME MUSICAL NOTESE OVER INFINITYEFT REPEAT SIGNEH INI" -"TIAL FORMERICAN FOOTBALLESIDE LESS-THANESISTOR SEGMENTESSARON CHRONONETIC VER" -"SE SIGNEXPONENT SYMBOLFIVE-LIKE BHALEFORWARD TILTINGFOUR DOTS WITH FOUR ENCLO" -"SURESFOUR TICK MARKSFRACTION DIGIT FTER COMPLETIONGEMINATION MARKGGLY LINE BE" -"LOWGHT REPEAT SIGNGROUP SEPARATORHAKING PARALLELHALF FILL SPACEHALF VERTEX OF" -" HEH MEDIAL FORMHOOKED INDEX UPHORIZONTAL DASHHORIZONTAL FILLHOUSAND STATERSH" -"REE DOTS BELOWIAMOND UNDERBARIDING ENCLOSUREIGN PALI VIRAMAIMISEOS CHRONOUIMP" -"ERFECTA RESTING SYMBOL FOR INGLE HEAD MARKINUS SIGN BELOWINVERTED CARIK INVER" -"TED LAZY SINVERTED STROKEIRCUMFLEX BELOWITH FINGERNAILSIZED WHEELCHAIRKISIM5 " -"TIMES BIKTOVIK NUMERAL LATION FUNCTIONLD TAMIL SHORT LEFT DOWN BARB LEFT HALF" -" BELOWLEFT HALF BLACKLEFT HAND INDEXLETTER CAPITAL LEVEL TONE MARKLEVEN FULL " -"STOPLIGHT AND LEFT LMOST EQUAL TO LONG HOOK BELOWLONG VOWEL SIGNLOOK OF TRIUM" -"PHLOSED INSULAR GMALAKON CHROMA MARRYING MAIDENMEEM FINAL FORMMIDDLE DIAGONAL" -"MURDA MAHAPRANAN-ARY SUMMATIONNA DOUBLE HELIXNASALIZED TONE-ND OF PARAGRAPHNJ" -"OINING MACRONNO GOOD GESTURENOON FINAL FORMNOON WITH KASRANOT APPROXIMATENVER" -"TED UBADAMAODIFIER DAMAGEDODO SOFT HYPHENOGOGRAM KHAMTI OLIDUS OPERATORON TOP" -" OF MODEMOND PLACE MEDALONJOINED HINGEDONTOUR INTEGRALORIZONTAL COLONORT EQUA" -"LS SIGNOUBLE BACKSLASHOW-FALLING TONEOWER HALF BLACKPEN SQUARED DOTPENSION RA" -"ILWAYPERTHO PEORTH PPLUS SIGN BELOWPRISHTHAMATRA EPUT SYMBOL FOR QUADRUPLE AR" -"ROWQUADRUPLE DASH R WITH FISHHOOKREAMY EYEBROWS RECEPTIVE EARTHRECITATIVE MAR" -"KREVERSE SOLIDUSREVERSED OPEN ERIGHT HALF RINGRIGHT RERENGGANRIGHTWARDS AND R" -"IGHTWARDS TICKRMAN PENNY SIGNRNAMENT STROKE-S ELEVATUS MARKS IN SILHOUETTESAL" -"TER PAHLAVI SHITA PLUS GISHSHORT OVER LONGSIXTEENTH NOTESSSICAL BUILDINGST QU" -"ARTER MOONST SYRIAC CROSSSTANDING KNIGHTSTANDING PERSONSTERESIS SYMBOLSTROKE " -"NOT SIGNTAI LAING TONE-THREE DISH TENUTHROWING A KISSTILDE DIAERESISTIP ON TH" -"E LEFTTOP RIGHT FATHATRIANGULAR MARKTVIMADUR SYMBOLTWO WITH STROKEU PLUS U PL" -"US UUBLE RING BELOWUGMENTATION DOTULTIPLICATION XUMAI PALAUNG FAUR POINTED ST" -"ARUSTER NOTEHEAD VERTICAL SECANTVOWEL SEPARATORVOWEL SHORTENERWALLPLANE SPACE" -"WHITE DOT RIGHTWITH DOWN ARROWWITH RAIN DROPSWO THIRDS BLOCKXTEEN FULL STOPYN" -"CHRONOUS IDLEZ WITH CROSSBARZAIN FINAL FORMZERO WITH SLASH AND DIAERESIS AND " -"SMALL TAH CROSSING ESH2 HASER FOR VAV WITH BACK YER WITH LONG LEG-CURRENCY SI" -"GN1 OVER LAK-081AFETY SCISSORSAI LENGTH MARKALF TREE TRUNKALLAJALALOUHOUAMNUC" -" PII KUUHAND COLD SWEATANGLE OPENING AROUND-PROFILEAU LENGTH MARKBAG MEMBERSH" -"IPBHATTIPROLU AABLADE SCISSORSCENTURIAL SIGNCEPTER OF JOVECERTAINTY SIGNCOLON" -" OPERATORCRAB STEPPING CRIFICIAL WINED-UP NEWSPAPERDASIA PNEUMATADEYTEROS ICH" -"OSDI ALLAAHU ANHDIAGONAL MOUTHDIAGONAL PATH DIO MICROPHONEDIRECTION FLIPDOES " -"NOT EXISTDOUBLE-STRUCK DUN3 GUNU GUNUED SYMBOL FOR EMIVOWEL SIGN END OF SECTI" -"ONENDED MULTIMAPEPENTHETIC YUTERIAL ARAMAIC ERIC INDICATORERTICAL JOINEREXCLA" -"MATION OHEXTENDED BHALEFATHATAN ABOVEFFED FLATBREADFFICE BUILDINGFINAL ANUSVA" -"RAFORWARD INDEX GERED TREMOLO-GHT WITH STARSGUNU TIMES ASHGYPTOLOGICAL AHESIV" -"E BANDAGEHIRD-STAGE HLIHREE-LEGGED TEIGHTWARDS VANEIKHAYA PUTNAYAINFINITY BEL" -"OWING HANDS SIGNINOLOGICAL DOTINSERTION SIGNINVERTED BIRGAINVERTED DAMMAIRCUL" -"AR VIRAMAISED ROUND DOTISSION TICKETSITA PLUS GISH IVE KEY SYMBOLIVE OBOLS SI" -"GNIWAZ TIR TYR TJOINED SQUARESLACE OF SAJDAHLEFTWARDS AND LEFTWARDS TICKLESS-" -"THAN NOR LETTER OVERLAPLEVEN TWELFTHSLIGHTLY SMALL LITTLE SECTIONLOTUS POSITI" -"ONLOWER DIAGONALLOWER TERMINALMEDIUM DIAMONDMENSION ORIGINMID-LEVEL TONEMOTHE" -"TIC ABOVEMRACHNOTIKHAYANORTH ARABIAN NYI ZLA NAA DAOBLIQUE HYPHENOLD RESOLUTI" -"ONONE SOUND WAVEOOTNOTE MARKEROPEN TENTACLESOPPOSING PIRIGORANGE DIAMONDORD S" -"EPARATOR OSITION SYMBOLOT TILDE ABOVEOTHERS CIRCLEDOUR OBOLS SIGNOUSING THUND" -"EROVER GUD LUGALPAO KAREN TONEPARTMENT STOREPEN MARK BELOWPLE WITH HEARTPLETE" -" INFINITYPLITTING APARTPPED MIDDLE UPPROTECTED AREAQUINARIUS SIGNRD PLACE MED" -"ALREATIVE HEAVENREE-LINE STAFFREH FINAL FORMREVERSED-SCHWARIGHT CROSSBARRING " -"MEGAPHONEROSS ON SHIELDSECOND SUBUNITSEL LOCOMOTIVESEPARATOR MARKSHAN MEDIAL " -"WASHESHIG TIMES SHRII PUSHPIKASIDE-DOWN FACESMALL LETTER DSMALL LETTER JSMOKI" -"NG SYMBOLSPEECH BUBBLESSQUIGGLE ARROWSTRONG ISOLATETELPIECE CLOCKTERMINAL MAR" -"K-TETARTOS ICHOSTHAKA ANUDATTATHALAN ETHEL OTHER CHRISTMASTHOUSANDS MARKTHOUS" -"ANDS SIGNTHREE POINTED TIMES OPERATORTIMES SHU TENUTOP HALF BLACKTRANSMIT STA" -"TETRIANGLE CARETTRIANGLE WITH TURKIC LETTER TWELFTH CIRCLETWO DOT LEADERTWO E" -"NCLOSURESTWO WHITE DOTSUAL WHEELCHAIRUBHAYATO MUKHAUND MARK ABOVEUNDER RELATI" -"ONUNION OPERATORUNIT SEPARATORUP RIGHT BARB UPPED INDEX UPUPPER TERMINALUSPEN" -"SION MARKVENIENCE STOREVERTICAL ABOVEVERTICAL COLONVERTICAL HEAVYVERTICAL LIG" -"HTVONIC ASTERISKVRON SNOWFLAKEWITH DOT BELOWWITH FATHATAN WITH LEFT HOOKWORD " -"SEPARATORXO EKFONITIKONYOUTHFUL FOLLYZAH WITH MEEM ZAKAYA LANTERN AND SKI BOO" -"T AND YEN SIGN B BAR SYMBOL BAT AND BALL BZHI MIG CAN CROSSING KA2 DIMINUTION" -"-1 DIRECTIONAL HEADED ARROW OF THE HORNS OPPOSING KUR TIMES KASKAL VARIANT F" -"ORM WITH INK PEN WITH JEGOGAN WITH OVERBAR WITH TEE TOP WITHOUT SNOW-ESASA DO" -"TTED-OFF CALENDAR-OR-PLUS SIGN-PER-EM SPACEACCOMMODATIONALL LOST SIGNAMUHU AL" -"AYNAAAN RUPEE SIGNANNED LEATHERAPPED PRESENTAR WITH QUILLARCHAIC KOPPAARGOSYN" -"THETONARLAUG SYMBOLARRED TRIDENTARROW OVERLAYAUDATE CHRIVIAWELLEMET YAZBACKSL" -"ASH BARBALL AND HOOPBASAN LETTER BOHAIRIC KHEIBOTTOM CORNERBOWING DEEPLYBY DE" -"FINITIONCHRYSANTHEMUMCIRCLE INSIDECITATION MARKCRIPTION TAKECRIPTIONAL PACROS" -"SING GABACROSSING GAN2CROSSING MUSHCULATED LORRYDIAERESIZED UDIC MARK SIGNDOT" -"TED ZLAMA DOUBLE CIRCLEDOUBLE HYPHENDOUBLE MUCAADDOUBLE STROKEDVOECHELNAYA EA" -"VENLY EARTHED PAPERCLIPSEDIC ANUSVARAEELING PERSONEHU FEOH FE FEMPHATIC TONEE" -"R BOARD FILLERTION SYMBOLEUROPE-AFRICAEVERSED DAMMAFICATION CARDFINAL LETTER " -"FINAL SEMKATHFIXED-FORM RAFOREMENTIONEDFROWNING FACEFT ARROWHEAD FULL SURROUN" -"DGAR FRACTION GAW KAREN SHAGIFT ENVELOPEGTER TSHEG MAGYA GRAM SHADH-TYPE SYMB" -"OLHAKASSIAN CHEHAM DIGIT ONEHERICAL ANGLEHIEROGLYPHIC HINESE TONE YHREE TWELF" -"THSI WITH STROKEIDE LOST SIGNIFI ROHINGYA IGHT TWELFTHSILABIAL CLICKILE SEPAR" -"ATORIMAGE BRACKETINTEREST SIGNINVERTED FORKINVERTED TURNIOT SYLLABLE IRCLED I" -"NDEX ISH LIRA SIGNITING THROUGHIVE POINT ONEIVE SLOW SIGNJES SU NGA ROK WORK " -"SYMBOLKAPYEOUNPIEUPL-TYPE SYMBOLLATERAL CLICKLEFT CROSSBARLEGETOS ICHOSLISION" -" SYMBOLLOCATION SIGNLOCK WITH KEYLOOPED VIRAMALOSING SPIRALLVE FULL STOPLVEOL" -"AR CLICKMAILBOX WITH MALL LETTER ZMALO POVYSHE MARKS CHAPTERMASORA CIRCLEMEDI" -"UM SQUAREMELODIC QITSAMESSENIAN TENMICROCOMPUTERMINDER RIBBONMINUS SIMILARMIN" -"US WHITE XMOBILE PHONESMODIFIER MARKMULTIOCULAR ONAP PIZZICATONG TERMINATORNI" -"NE TWELFTHSNING MOVEMENTNP TRANSISTORNTY FULL STOPNUMERATOR ONENUMERIC SIGN O" -"BLIQUE LINE OGOTYPE SIGN OLVING HEARTSOMAN NUMERAL ONAL COMPUTERONG RIGHT LEG" -"ONG-LEGGED DEONGRATULATIONOON NOTEHEAD OPPOSING NAGAOTEHEAD BLACKOURTH SUBUNI" -"TOUT MIDDLE UPPA NJI PIPAEMPAIRED ARROWSPLUS OPERATORPN TRANSISTORPPOSING LUG" -"ALPREPONDERANCEQUARTERS SIGNRACKETS ABOVERANKS CASKET RIGHT HARPOONRIGHT POIN" -"TERRIPLE SVARITARIZONTAL TAILRN PENTATHLONROTATED BIRGARPENTRY PLANERRIAGE RE" -"TURNRTABLE STEREOS KAI APOTHESS KRYZHEM ON S UP TOGETHERSAL PLUS TUG2SAMYOK S" -"ANNYASELECTED AREASHESH PLUS KISIA-AUSTRALIASIGN AVAGRAHASIGN PAMUDPODSILI PN" -"EUMATASMALL LETTERSSSAGE WAITINGSTABLE SYMBOLSTERTIUS SIGNSYNDESMOS NEOTE ORD" -"ER MARKTED HAND SIGNTHIRD SUBUNITTIRTA TUMETESTOP HALF RINGTU WAS-SALAAMU WIT" -"H STROKEUDDISA SIRRAHUE OF LIBERTYUFFLE PRODUCTUPERIMPOSED XUPONDIUS SIGNUPSI" -"LON WITH UPWARDS TRENDURNED W BELOWUSHING UPWARDUSICAL LEIMMAVE-LINE STAFFVEN" -" POINT ONEVERGREEN TREEVERLAY MIDDLEVERTICAL BARSVERTICAL FILLVICE CONTROL VO" -"WEL SIGN PAW RING INSIDEWAVY LOW LINEWAVY OVERLINEWAW-AYIN-RESHWHITE ELLIPSEW" -"ITH ASTERISKWITH INTEGRALWO-LINE STAFFYMBOL TAU RHOYOD YOD PATAHYUUKALEAPINTU" -"ZHOU NUMERAL AND PICTURE AND TOP END CROSSING GU IN TRIANGLE KLYUCHEVAYA LIN" -"E SYMBOL OF ANTIMONY ON PEDESTAL OVER KISIM5 OVER MIDDLE OVER TWO PI SKEWED L" -"EFT WITH DAGESH WITH INDEX WITH UPTURN-DZUD RTAGS -MAIL SYMBOL-SHAPED SIGN-S" -"IMPLIFIED 6 LONG NGGOOAA AS-SALAAMACE INTEGRALACUTE ACCENTAFU LEERAEWAALLPOIN" -"T PENALT PAN SIGNALTERNATING AND CRESCENTAND OPERATORANG KHANG GYAR DIAERESIS" -"ARALLELOGRAMATNAH HAFUKHATTOOED HEADBACK OF HANDBAHIRGOMUKHABEHIND CLOUDBETWE" -"EN LIPSBINING MARK BLOWING FACEBLUE DIAMONDBRATION MODEBRIDGE ABOVEBSCRIPT AL" -"EFBUTTON MOUSEBYSMAL WATERCABBAGE-TREECALENDAR PADCENDING NODECHAIR SYMBOLCIA" -"N LETTER CIRCLED PLUSCIRCLES AND CK-O-LANTERNCLOSED MOUTHCRESCENT BARCROSSING" -" GI4CROSSING KALCROSSING LU2CROSSING NUNDASHED ARROWDE MARK SIGNDENTAL CLICKD" -"HRI LETTER DICTION SIGNDIGRAPH KOTODIGRAPH YORIDOT OPERATORDOUBLE ARCH DOUBLE" -" ARROWDOWN HARPOONDOWN NEUTRALDUG TIMES NIEAGULL BELOWEEPING SMALLEIGHTH NOTE" -"SEMELY HEAVY EMISOFT SIGNENARIUS SIGNENOS CHRONOUERPENDICULARETRETES SIGNEVER" -"ING FACEFALLING DOTSFEMININE DOTFERENCE MARKFLAG ON POSTFOLDED HANDSFORMING A" -"RTSFOUNTAIN PENFT RERENGGANGAW KAREN EUGBY FOOTBALLGEBA KAREN IGREEN DRAGONGR" -"OUND SLIDEGUARDED AREAHAH WITH DALHALF BRACKETHAND FORMAT HASIS SYMBOLHEAD-BA" -"NDAGEHIBITED SIGNHREE FINGERSHYPHEN-MINUSIDENTICAL TOIGATURE SHRIILLED CIRCLE" -"IN MIDDLE UPINDEX MIDDLEING ENVELOPEING HAND FANING HITTING ING OPERATORINTEG" -"RATION INUSOID SIGNINVERTEBRATEIRAGANA HOKAIRTY-SECOND IVE TWELFTHSKANA REPEA" -"T KAPPA SYMBOLKHAMTI TONE-KHMIMIC KHEILAM WITH YEHLARGE DOUBLELARGE TRIPLELAT" -"ALIZATIONLAYING CARDSLEADING EYESLEFT HARPOONLEFT POINTERLER CONSTANTLICKING " -"LIPSLIMBS DIGITSLINGING FIRELINKING MARKLL MODIFIER-LLE PATTERN LOWER CORNERL" -"OWERED FLAGLU PLUS ESH2LUS NOTEHEADLYING SAUCERM NSHUT NYAMMADDA ABOVE MALL S" -"ECTIONMANNAZ MAN MMBELLISHMENTMEDARY CAMELMEDIUM SHAFTMETA STAVROUMIDDLE PIEC" -"EMING TO MEETMONOGRAPH UKMPHASIS MARKMPTY CENTRE MUM TIMES PAN ELEMENT OFNARR" -"OW SHAFTNATURAL SIGNNCK CONSTANTNEPOSTOYANNYNERSHIP SIGNNEUTRAL FACENGLE BARL" -"INENJALA GONDI NORTHERN TSENOTCHED HOOKNOTCHED TAILNUITY SYMBOLOGOGRAM NYAJOH" -"AZARD SIGNOID NOTEHEADOING TO MEETOK HAND SIGNON US SYMBOLONISHED FACEOPENING" -" LEFTOPLE HUGGINGOPPOSING LU2OQ NSHUT YUMOTTOM HALF OOUCHES THUMBOUGHT BUBBLE" -"OUR TWELFTHSPHEME JOINERPOETRY MARK-PORT CONTROLPOUTING FACEPROTOS ICHOSQUARE" -"D ARROWQUARTER SIGNQUIRREL TAILRAFFIC LIGHTRAH BEN YOMORANCHING OUTRCHAIC SAM" -"PIREFACE COLONREN CROSSINGREVERSE MARKRIAGE SYMBOLRIAL TRAMWAYRIGHT DOUBLERIG" -"HT SINGLERING OVERLAYRION CHRONONRISTMAS TREERNAM BCAD MAROLLING EYESROUNDED " -"ZERORROUND FROM S ABOVE SIGNS SUBPUNCTISSAZ IS ISS ISECTION SIGNSH ZIDA TENUS" -"HED BARLINESHORT RIKRIKSMALL DOUBLESMALL TRIPLESMILING FACESS-THAN SIGNSTICK " -"FIGURESUR OVER SURT MONGKEUAEQTE SEPARATORTEARS OF JOYTERNATE AYINTHETA SYMBO" -"LTHIC LETTER THREE HEARTSTOP-LIGHTED TRAGRAM FOR TRIPLE DANDATRIPLE FLAMEUBSC" -"RIPT TWOUGHT BALLOONUH PLUS GISHULL NOTEHEADUME INTEGRALUN WITH RAYSUNNER FRA" -"ME-UPPER CORNERUSEATED FACEUTH ARABIAN UTH-SLAVEY KVAKRAHASANYAVER EQUAL TOVI" -"CTORY HANDVOLTAGE SIGNWDATA SQUAREWIGGLY FENCEWITH SMALL VXIRON KLASMAYAN NUM" -"ERAL YMBOL BINDU YOD TRIANGLEYOUTHFULNESS AND MACRON DECORATION I ZAPYATOY OF" -" FLOWERS OF FORTUNE OVER BULUG OVER IDIM PLUS MASH2 PLUS NUNUZ PROPORTION S " -"ZAPYATOY SHOE STILE TACK BELOW TIMES ESH2 WITH CARON WITH COMMA WITH DASIA WI" -"TH FLASH WITH JACKS WITH MAPIQ WITH PLATE WITH TITLO WITH TRILL WRIST FLEX-CO" -"PPER ORE-MINUS SIGN-OFF SYMBOL0 FOOTSTOOL3 LONG NGGO5 LONG MBOO6 LONG NGGEACK" -"ED COMMAACTIVE SIGNACUTE-GRAVEAESCULAPIUSAESHAE NYAMAGAZ DAEG DAGONAL SIGNAIL" -"LESS PHIAMUSED FACEARAM GONDI ARM SPIRAL ARMS RAISEDARPEGGIATO ASE TO THE ATH" -" PRODUCTATION POINTATION SPACEAWNING FACEBANK SYMBOLBELOW RIGHTBETA SYMBOLBLA" -"CK ARROWBOTTOM MARKBREVE BELOWBUMPY ABOVEBZHI -KHYILCAN RGYINGSCARET TILDECCU" -"MULATIONCE OF PIZZACELANDIC-YRCH AND LAMPCHING CHICKCLOSED JAWSCOMBINATIONCON" -"D SCREENCONTAIN AS CREDIT SIGNCROSSING BUCROSSING ENCROSSING IMCROSSING PICRO" -"SSING URCTION MARK CTION MARK-CURVED BENDDALETH-RESHDASH SYMBOLDE KIKAKUI DEN" -"T EMBLEMDESK PERSONDIATONON DIDOACHASHMEEDOLLAR SIGNDONG TSHUGSDOUBLE AND DOU" +"GHTWARDS ARROWWARDS HARPOON ABOVE LONG RIGHTWARDS HARPOONJUSTIFIED LOWER RIGH" +"T QUARTER BLACK CIRCLEJUSTIFIED UPPER RIGHT QUARTER BLACK CIRCLELA USED AS KO" +"RANIC STOP SIGN ISOLATED FORMLEFTWARDS OF UPWARDS TRIANGLE-HEADED ARROWLOWER " +"LEFT TO MIDDLE CENTRE TO LOWER RIGHTOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARRO" +"W OVER HI TIMES ASH2 KU OVER HI TIMES ASH2AND RIGHT TRIANGULAR THREE QUARTERS" +" BLOCKINVERSE MEDIUM SHADE AND RIGHT HALF BLOCKJUSTIFIED LOWER LEFT QUARTER B" +"LACK CIRCLEJUSTIFIED UPPER LEFT QUARTER BLACK CIRCLEULTIPLICATION SIGN WITH C" +"IRCUMFLEX ACCENTDOWNWARDS AND UPWARDS OPEN CIRCLE ARROWSLOW DOUBLE COMMA QUOT" +"ATION MARK ORNAMENTVERTICAL BAR AT END OF HORIZONTAL STROKE-TILTED SHADOWED W" +"HITE RIGHTWARDS ARROWABOVE RIGHTWARDS HARPOON WITH BARB DOWNASH FROM LEFT MEM" +"BER OF DOUBLE VERTICALNEGATIVE SQUARED LATIN CAPITAL LETTER PWITH OPEN ARM EN" +"DING IN ARROW POINTING -HEADED ARROW WITH TRIANGLE ARROWHEADSABOVE LEFTWARDS " +"HARPOON WITH BARB DOWNAL WITH SUPERSCRIPT ALEF ISOLATED FORMASHED TRIANGLE-HE" +"ADED RIGHTWARDS ARROWEH WITH SUPERSCRIPT ALEF ISOLATED FORMEXTENDED ARABIC-IN" +"DIC DIGIT FOUR ABOVEEXTENDED ARABIC-INDIC DIGIT FOUR BELOWHARPOON ABOVE SHORT" +" RIGHTWARDS HARPOONIANGLE CONTAINING SMALL WHITE TRIANGLEURNED SWIRL BIRGA WI" +"TH DOUBLE ORNAMENTWARDS AND LEFTWARDS OPEN CIRCLE ARROWS WITH MONITOR IN PORT" +"RAIT ORIENTATIONHORIZONTAL LINE WITH THREE TICK MARKSIOUS FACE WITH SYMBOLS C" +"OVERING MOUTHONCAVE-POINTED BLACK RIGHTWARDS ARROWOVER RIGHTWARDS TRIANGLE-HE" +"ADED ARROWSMALL LETTER BYELORUSSIAN-UKRAINIAN I AND LOWER HALF INVERSE MEDIUM" +" SHADE WITH HORIZONTAL MIDDLE BLACK STRIPEDOUBLE-LINE EQUAL ABOVE GREATER-THA" +"NGREATER-THAN ABOVE DOUBLE-LINE EQUALHARPOON ABOVE LONG LEFTWARDS HARPOONIGHT" +" TORTOISE SHELL BRACKET ORNAMENTLEFT TORTOISE SHELL BRACKET ORNAMENTOVER LEFT" +"WARDS TRIANGLE-HEADED ARROWPART BETWEEN MIDDLE AND RING FINGERSSINGLE COMMA Q" +"UOTATION MARK ORNAMENTSMALL ARABIC LETTER TAH AND TWO DOTSTURNED COMMA QUOTAT" +"ION MARK ORNAMENTZENGE CONTAINING BLACK SMALL LOZENGE CONTAINING BLACK VERY S" +"MALL SQUAREBESIDE AND JOINED WITH INTERSECTIONBOTTOM-LIGHTED RIGHTWARDS ARROW" +"HEADGVEDIC KASHMIRI INDEPENDENT SVARITAND UPPER AND LOWER ONE EIGHTH BLOCKORN" +"ER ARROWS CIRCLING ANTICLOCKWISEOUNDED HIGH STOP WITH FILLED CENTRER LOWER RI" +"GHT CURLY BRACKET SECTIONRIGHT-POINTING ANGLE QUOTATION MARKTWO HORIZONTAL ST" +"ROKES TO THE RIGHTVERTICAL LINE WITH THREE TICK MARKS TWO DOTS OVER ONE DOT P" +"UNCTUATIONBLACK LEFT-POINTING SMALL TRIANGLEDOWNWARDS ARROW WITH TIP LEFTWARD" +"SIGHUR KAZAKH KIRGHIZ ALEF MAKSURA MODIFIER LETTER LABIALIZATION MARKOVER IGI" +" SHIR OVER SHIR UD OVER UDOVER TAB NI OVER NI DISH OVER DISHPPROXIMATELY NOR " +"ACTUALLY EQUAL TOR LOWER LEFT CURLY BRACKET SECTIONTEARDROP-SPOKED PROPELLER " +"ASTERISKUPPER BODY TILTING FROM HIP JOINTSALL BUT UPPER LEFT QUADRANT BLACKDI" +"RECT PRODUCT WITH BOTTOM CLOSEDDOUBLE-LINE EQUAL ABOVE LESS-THANDOWNWARDS HAR" +"POON WITH BARB RIGHTEFT-POINTING ANGLE QUOTATION MARKLESS-THAN ABOVE DOUBLE-L" +"INE EQUALLLAR SIGN WITH OVERLAID BACKSLASHMEDIUM SHADE AND LOWER HALF BLOCKRA" +"ISING BOTH HANDS IN CELEBRATIONTROFLEX CLICK WITH RETROFLEX HOOKTRONG CENTRAL" +"IZATION STROKE BELOWTUG2 OVER TUG2 TUG2 OVER TUG2 PAPTWO DOTS ABOVE AND TWO D" +"OTS BELOWWARDS HARPOON WITH BARB DOWNWARDS-POINTING ANGLE BRACKET ORNAMENTAND" +" MIDDLE RIGHT TO LOWER CENTREATHARVAVEDIC INDEPENDENT SVARITAETALLED BLACK AN" +"D WHITE FLORETTEHAND WITH MIDDLE FINGER EXTENDEDNORMAL FACTOR SEMIDIRECT PROD" +"UCTRIANGLE-HEADED OPEN CIRCLE ARROWRIGHT SEMICIRCLE WITH THREE DOTSRONT-TILTE" +"D SHADOWED WHITE ARROWSEMICIRCULAR ANTICLOCKWISE ARROWVED STEM PARAGRAPH SIGN" +" ORNAMENT CROSSING ASH OVER ASH OVER ASHACK-TILTED SHADOWED WHITE ARROWAISED " +"HAND WITH FINGERS SPLAYEDAND MIDDLE LEFT TO LOWER CENTREETALLED OUTLINED BLAC" +"K FLORETTEIN WHITE CIRCLE IN BLACK SQUARELEFTWARDS EQUILATERAL ARROWHEADONE H" +"UNDRED THIRTY-FIVE DEGREESRIGHTWARDS HARPOON WITH BARB UPRING OVER TWO RINGS " +"PUNCTUATIONRINGS OVER ONE RING PUNCTUATIONTNAMESE ALTERNATE READING MARK UPWA" +"RDS HARPOON WITH BARB RIGHT CONTAINING BLACK SMALL SQUARE-HIRAGANA PROLONGED " +"SOUND MARKAGGRAVATED INDEPENDENT SVARITAAND JOINED BY DASH WITH SUBSETDOT BEL" +"OW AND THREE DOTS ABOVEDOWNWARDS AND RIGHTWARDS ARROWEART EXCLAMATION MARK OR" +"NAMENTEFT SEMICIRCLE WITH THREE DOTSGHT FOUR POINTED PINWHEEL STARGREATER-THA" +"N ABOVE EQUALS SIGNHIGH-REVERSED-9 QUOTATION MARKHT CENTRALIZATION STROKE BEL" +"OWINDEX THUMB CURVE THUMB INSIDEMAKSURA WITH SUPERSCRIPT ALEF MINTON RACQUET " +"AND SHUTTLECOCKMODIFIER LETTER LEFT HALF RINGON WITH RIGHTWARDS ARROW ABOVEOP" +"EN CENTRE EIGHT POINTED STARQAF WITH LAM WITH ALEF MAKSURARECTANGULAR CHECKER" +" BOARD FORMSAD WITH LAM WITH ALEF MAKSURA DOWN INDEX THUMB HOOK MIDDLE OVER R" +"IGHTWARDS ARROW TO BAR WITH REVERSED NEGATION SLASHABOVE SHORT LEFTWARDS HARP" +"OONCKED FACE WITH EXPLODING HEADCONTAINING BLACK SMALL CIRCLEDOT OVER TWO DOT" +"S PUNCTUATIONDOWN HEAVY AND RIGHT UP LIGHTDOWN MIDDLE THUMB INDEX CROSSEFTWAR" +"DS HARPOON WITH BARB UPEVERSED LUNATE EPSILON SYMBOLEXTENDED ARABIC-INDIC DIG" +"IT TLIGHT FOUR POINTED BLACK CUSPNS-SERIF INTERROBANG ORNAMENTOMBINING ANUSVA" +"RA ABOVE RIGHTONAL INDICATOR SYMBOL LETTER PUNCTUATION CHINOOK FULL STOPSEMIC" +"IRCULAR PATH AROUND POLESUPERSCRIPT ALEF INITIAL FORMUP HEAVY AND RIGHT DOWN " +"LIGHTWITH RIGHTWARDS ARROW AT LEFTACE DIRECTION POSITION NOSE ASTERISKS ALIGN" +"ED VERTICALLYBESIDE AND JOINED WITH UNIONDOUBLE ANUSVARA ANTARGOMUKHADOWN HEA" +"VY AND LEFT UP LIGHTEDGE-TAILED RIGHTWARDS ARROWEFT ARC GREATER-THAN BRACKETF" +"TING POINT RIGHTWARDS ARROWHADED WHITE RIGHTWARDS ARROWHREE HUNDRED FIFTEEN D" +"EGREESIBE SYLLABLE BOUNDARY MARKERISMILLAH AR-RAHMAN AR-RAHEEMLEFTWARDS OF DO" +"WNWARDS ARROWLIQUID MEASURE FIRST SUBUNITMIDDLE CENTRE TO UPPER RIGHTMIDDLE R" +"ING LITTLE CONJOINEDMONOGRAMMOS TESSERA DODEKATAOUND-TIPPED RIGHTWARDS ARROWR" +"ECTANGULAR PATH AROUND POLESALTIRE WITH ROUNDED CORNERST LITTER IN ITS PLACE " +"SYMBOLTAAALAA FARAJAHU ASH-SHAREEFUP HEAVY AND LEFT DOWN LIGHTUPPER CENTRE TO" +" MIDDLE RIGHTUPWARDS AND RIGHTWARDS ARROW AND LEFT SEMICIRCLE ARROWS BARREE W" +"ITH TWO DOTS BELOW DIVIDED BY HORIZONTAL RULE-FEATHERED RIGHTWARDS ARROWAND U" +"PPER HALF WHITE CIRCLEARROW ABOVE LEFTWARDS ARROWBETWEEN TWO HORIZONTAL BARSB" +"RDA RNYING YIG MGO MDUN MABRDA RNYING YIG MGO SGAB MACIRCLE WITH NORTHWEST AR" +"ROWCONTINUOUS UNDERLINE SYMBOLDOUBLE PRIME QUOTATION MARKEAVY WHITE RIGHTWARD" +"S ARROWEMICIRCULAR CLOCKWISE ARROWENTATION FORM FOR VERTICAL FINGER COVERING " +"CLOSED LIPSFOUR FINGERS CONJOINED BENTHANDED INTERLACED PENTAGRAMHEAD MARK WI" +"TH MOON AND SUNIDE ARC ANTICLOCKWISE ARROWIDE-HEADED RIGHTWARDS ARROWIMPERFEC" +"TUM CUM PROLATIONE KATHAKA INDEPENDENT SVARITALARGE EQUILATERAL ARROWHEADLESS" +"-THAN ABOVE EQUALS SIGNLIGHT CENTRALIZATION STROKELOWER MIDDLE LEFT TO LOWER " +"LOWER TONAL RANGE INDICATORONE LARGE AND ONE SMALL EYEOUR BALLOON-SPOKED ASTE" +"RISKOVER LONG LEFTWARDS HARPOONPHARYNGEAL VOICED FRICATIVEPPY PERSON RAISING " +"ONE HANDRIANGULAR ONE QUARTER BLOCKRIGHT ARC LESS-THAN BRACKETRIPLE VERTICAL " +"BAR OPERATORSTRUMENTAL NOTATION SYMBOL-TALIC LATIN CAPITAL LETTER TWO HUNDRED" +" SEVENTY DEGREESUPPER CENTRE TO LOWER RIGHTUPPER MIDDLE LEFT TO UPPER WALLPLA" +"NE SHOULDER HIP MOVEWO DOTS BELOW AND DOT ABOVEZERO FOR ODD POWERS OF FOUR GA" +"D OVER GAD GAR OVER GAR LESS THAN THE DENOMINATOR NEGATED WITH VERTICAL BAR O" +"R APPROXIMATELY EQUAL TO WITHIN TRIANGLE ARROWHEADALEF MAKSURA ISOLATED FORMA" +"ND LEFT HALF WHITE CIRCLEAND MIDDLE FINGERS CROSSEDAND RIGHT ONE EIGHTH BLOCK" +"BLE TENNIS PADDLE AND BALLCAT FACE WITH SMILING EYESCLOCKWISE ARROW WITH MINU" +"SCRIPT LIGATURE ET ORNAMENTDOTTED LUNATE SIGMA SYMBOLDOTTED SUBSTITUTION MARK" +"ERDROP-SHADOWED WHITE SQUAREE ONE-WAY LEFT WAY TRAFFICERSTRASS ELLIPTIC FUNCT" +"IONHTORA SKLIRON CHROMA VASISIDEOGRAPHIC ITERATION MARKINDUSTRIAL STANDARD SY" +"MBOLJECT REPLACEMENT CHARACTERLANTED SOUTH ARROW WITH HOLEFTWARDS OF UPWARDS " +"ARROWLINE FEED SEPARATOR SYMBOLLLALLAHOU ALAYHE WASSALLAMMARRIED PARTNERSHIP " +"SYMBOLMEEM WITH HAH WITH TATWEELMODIFIER FITZPATRICK TYPE-OCKED FEMALE AND MA" +"LE SIGNOORPLANE SHOULDER HIP MOVEORTHOGONAL CROSSHATCH FILLOTATED FLORAL HEAR" +"T BULLETOUBLE ANGLE QUOTATION MARKRIGHT PARENTHESIS ORNAMENTRINGS ALIGNED HOR" +"IZONTALLYRIPLE DOT PUNCTUATION MARKSSIAN ASTROLOGICAL SYMBOL THREE DOTS ABOVE" +" DOWNWARDSU REVERSED OVER U REVERSEDUNEVEN EYES AND WAVY MOUTHWHITE RIGHT POI" +"NTING INDEXWITH LEFTWARDS ARROW ABOVEYAJURVEDIC MIDLINE SVARITA OVER NUN LAGA" +"R TIMES SAL WITH CIRCLED ONE OVERLAY WITH DOUBLE GRAVE ACCENT WITH DOUBLE MID" +"DLE TILDE WITH DOUBLE VERTICAL BARBREVE WITH INVERTED BREVEBUT NOT ACTUALLY E" +"QUAL TOCAT FACE WITH CLOSED EYESCROSSING NORTH EAST ARROWDIAERESIS AND HOOK S" +"YMBOLDOUBLE CANDRABINDU VIRAMADRY MEASURE FIRST SUBUNITELD HOCKEY STICK AND B" +"ALLFECTIVENESS OR DISTORTIONFFICULTY AT THE BEGINNINGING ON THE FLOOR LAUGHIN" +"GINVERTED EXCLAMATION MARKLEFT PARENTHESIS ORNAMENTLEFTWARDS ARROW WITH HOOKL" +"OW QUILT SQUARE ORNAMENTMBINING CRYPTOGRAMMIC DOTMEDIUM TRIANGLE ARROWHEADMUL" +"TIPLICATION SIGN BELOWNIVERSAL RECYCLING SYMBOLOLD ASSYRIAN WORD DIVIDERONE U" +"NDER EIGHTEEN SYMBOLOUBLE BIRGA WITH ORNAMENTOUTLINED RIGHTWARDS ARROWOVER LO" +"NG LEFTWARDS ARROWRANCH BANK IDENTIFICATIONREE-HUNDRED-AND-TWENTIETHRIGHT DIA" +"GONAL HALF BLACKRIGHT ONE SIXTEENTH BLOCKRIPLE BIRGA WITH ORNAMENTRIST CIRCLE" +" HITTING WALL SQUARE CHECKER BOARD FORMSTROKE AND TWO DOTS ABOVETAB OVER TAB " +"GAR OVER GARTERNION INTEGRAL OPERATORTTED SUBSTITUTION BRACKET OVER TOP SQUAR" +"E BRACKET POINTING BACKHAND INDEXALTERNATE SECTION MARKERAND MALE AND FEMALE " +"SIGNARM CIRCLE HITTING WALL ARROW POINTING DIRECTLY BERKANAN BEORC BJARKAN BB" +"LACK LENTICULAR BRACKETBLIC ADDRESS LOUDSPEAKERBUSINESS SUIT LEVITATINGCOMPAT" +"IBILITY IDEOGRAPH-CONSECUTIVE EQUALS SIGNSCULINE ORDINAL INDICATORDESCENDING " +"MUSICAL NOTESDIAGONAL CROSSHATCH FILLDOUBLE HORIZONTAL STROKEDOWNSCALING FACT" +"OR KIIZHE PLUS A PLUS SU PLUS NAEASTERN PWO KAREN DIGIT EQUAL TO OR GREATER-T" +"HANEYES AND HAND OVER MOUTHFINGER AND THUMB CROSSEDGLOTTAL STOP WITH STROKEGR" +"EATER-THAN OR EQUAL TOHEAVY BLACK HEART BULLETIGATURE OPEN ET ORNAMENTING FAC" +"E WITH OPEN MOUTHINTERSECTION WITH SERIFSISOSCELES RIGHT TRIANGLELARGE TRIANG" +"LE ARROWHEADLEFT DIAGONAL HALF BLACKLEFT ONE SIXTEENTH BLOCKLINE HORIZONTAL E" +"LLIPSISLY-RECYCLED PAPER SYMBOLMALL CIRCLE TO THE RIGHTMALL LEFT SQUARE BRACK" +"ETMTAVRULI CAPITAL LETTER ONE-HUNDRED-AND-SIXTIETHORIZONTAL BAR WITH NOTCHOTT" +"OM SHADED WHITE ARROWOTTOM-SHADED WHITE ARROWPERSCRIPT ALEF MOKHASSASPOINTING" +" DOWNWARDS ABOVEREVERSED NINE-LIKE BHALERIGHTWARDS THEN CURVING SINGLE-LINE N" +"OT EQUAL TOSTROKE THROUGH DESCENDERSYLLABLE REPETITION MARKT BLACK RIGHTWARDS" +" ARROWTAAALAA ALAYHI WA-SALLAMTEARDROP-SPOKED ASTERISKTED INTERPOLATION MARKE" +"RUPRIGHT RECTANGULAR ZEROUPWARD POINTING TRIANGLEVOICED LARYNGEAL SPIRANTWELV" +"E POINTED BLACK STARWITH CANCELLATION STROKEWITH UPWARDS ARROW ABOVEWO DOTS V" +"ERTICALLY ABOVEWO DOTS VERTICALLY BELOW CAKE WITH SWIRL DESIGN HUNDRED TWENTY" +"-EIGHTH POINTING AT THE VIEWER ROTATED NINETY DEGREES WITH HALF-CIRCLE BELOW" +"-ALAA AALIHEE WA-SALLAMALEF MAKSURA FINAL FORMALGAMATION OR COPRODUCTAND WOMA" +"N HOLDING HANDSANG DEPARTING TONE MARKARABIC LETTER TAH ABOVEARTY HORN AND PA" +"RTY HATASCENDING MUSICAL NOTESATTACHING VERTICAL OMETAVOURING DELICIOUS FOODA" +"WWARA ALLAAHU MARQADAHBARBED RIGHTWARDS ARROWCIRCUMFLEX ACCENT ABOVECLUSTER-I" +"NITIAL LETTER CURRENT SYMBOL FORM TWODOT BELOW AND DOT ABOVEDOWNWARDS THEN CU" +"RVING ESS OUTLINED WHITE STARFACING SNAKE HEAD WITH GREEK SMALL LETTER IOTAHA" +"NKED RIGHTWARDS ARROWHREE POINTED BLACK STARHT TRIFOLIATE SNOWFLAKEICATION PR" +"OGRAM COMMANDIDE ARC CLOCKWISE ARROWIGHT-SHADED WHITE ARROWININE ORDINAL INDI" +"CATORISTED RIGHTWARDS ARROWSIVE FINGERS SPREAD OPENLEFT-SHADED WHITE ARROWLOW" +"ER ONE QUARTER BLOCKLSCHREIBER PAUSE SYMBOLMITIAN CONJUGATE MATRIXORAH WITH N" +"INE BRANCHESORIGINAL OF OR EQUAL TOORIZONTAL RULER SEGMENTOVER RIGHTWARDS HAR" +"POONOVERLAPPING LOGICAL ANDP WITH EXCLAMATION MARKPA OVER PA GAR OVER GARPUNC" +"TUATION END OF TEXTRAISED OMISSION BRACKETREE VARIATION SELECTOR RIGHT DIAGON" +"AL ELLIPSISRIGHT HORIZONTAL SECANTRIGHT ONE QUARTER BLOCKRIGHT-POINTING TRIAN" +"GLERTOISE SHELL BRACKETED SHAPE WITH A DOT INSIDESING DIAGONAL CROSSING SOLID" +"US BINARY RELATIONUBLE VERTICAL BAR BELOWUP SPREAD THUMB FORWARDUPPER ONE QUA" +"RTER BLOCKUPWARDS THEN NORTH WESTVERTICAL BISECTING LINEWESTERN PWO KAREN TON" +"E-WHITE FOUR POINTED CUSPWO-WAY LEFT WAY TRAFFICZANTINE MUSICAL SYMBOL OVER " +"STAMPED ENVELOPE SYMBOL FOR LIGHTHOUSE WITH CIRCUMFLEX ABOVE WITH DECORATIVE " +"COVER WITH SINGLE ZAPYATAYA WITH THREE DOTS ABOVE-ROTATED DIVISION SIGNACKSLA" +"NTED SOUTH ARROWARMENIAN ETERNITY SIGNBAR ABOVE INTERSECTIONCJK UNIFIED IDEOG" +"RAPH-CONSONANT MODIFIER BARCONSONANT SIGN MEDIAL CURLY BRACKET ORNAMENTDOMAIN" +" ANTIRESTRICTIONDOUBLE SOLIDUS OVERLAYDOUBLE VERTICAL STROKEDOUBLE-LINED HEAD" +" MARKDOWN-POINTING TRIANGLEDOWNWARDS ZIGZAG ARROWDRESSED TO THE SUBJECTEAST-P" +"OINTING AIRPLANEGREATER-THAN DIAERESISHEXIFORM LONG ANUSVARAHORT HORIZONTAL S" +"TROKEI YFESIS TETARTIMORIONIGEL LONG-BRANCH-SOL SIN DEPARTING TONE MARKINDIRE" +"CT QUESTION MARKING HEAD IN SILHOUETTEINVERTED SMALL V ABOVEINVERTED SMALL V " +"BELOWKEEPING STILL MOUNTAINLATIN CAPITAL LETTER SLE BESIDE VERTICAL BARLEFT O" +"NE QUARTER BLOCKLEFT TRIANGLE OPERATORLEFT-POINTING TRIANGLELONG HORIZONTAL S" +"TROKELOW PARAPHRASE BRACKETMNYAM YIG GI MGO RGYANND RECORDING COPYRIGHTNOT IN" +"CLUDING THE POLEOVER LEFTWARDS HARPOONOVER NU11 BUR OVER BUROVER SHIR BUR OVE" +"R BURPERSET OF NOR EQUAL TOPOINTING UPWARDS BELOWPRECEDED BY APOSTROPHEPUNCTU" +"ATION KUNDDALIYAQUESTION MARK ORNAMENTREASE FONT SIZE SYMBOLRECTILINEAR BLACK" +" STARREE-CIRCLE ALTERNATE IRIGHT-POINTING FLEURONROUND A POINT OPERATORRROW W" +"ITH ROUNDED HEADSEMI-VOICED SOUND MARKSHORT RIGHTWARDS ARROWSHORT VERTICAL ST" +"ROKESSYMPTOTICALLY EQUAL TOTRIPLE DASH HORIZONTALTRIPLE RIGHT TURNSTILETRIPLE" +" VERTICAL STROKEUBSCRIPT SMALL LETTER UPPER ONE EIGHTH BLOCKUPPER RIGHT AND L" +"OWER USTOMER ACCOUNT NUMBERWASALLAM ISOLATED FORMWITH HORIZONTAL STROKEWITH J" +"EEM INITIAL FORMWITH VOICED SOUND MARKYIAKENG PUACHUE HMONG AND SLANTED PARA" +"LLEL WITH SHORT RIGHT LEG WITH VERTICAL STROKE-ROUND NOTEHEAD DOWN -SHAPED BA" +"G DELIMITERABOVE SHORT DOWN TACKACUTE AND HOOK SYMBOLAKIA TELOUS ICHIMATOSALL" +"ING DIAGONAL SLASHAND VOWEL LENGTH MARKARD SHELL FLOPPY DISKARKENING OF THE L" +"IGHTARYSTIAN FIVE HUNDREDBESIDE RIGHT TRIANGLEBOTTOM AND LOWER LEFTBOTTOM U-S" +"HAPED ARROWBUT NOT EQUIVALENT TOCROSSE STICK AND BALLCRUCIFORM NUMBER FOURCTO" +"R OR CROSS PRODUCTDELIMITER TSHEG BSTARDIGRAMMOS EX DODEKATADOUBLE LEFT TURNS" +"TILEDOWN HORIZONTAL HEAVYDOWN HORIZONTAL LIGHTDOWNWARDS ARROW ABOVEEFT HORIZO" +"NTAL SECANTEFT OPEN BOX OPERATOREIGHT SPOKED ASTERISKELATIONAL COMPOSITIONEQU" +"AL TO OR LESS-THANER RIGHT CORNER ANGLEFINAL CONSONANT SIGN FLATTENED PARENTH" +"ESISGHT OPEN BOX OPERATORGRAMMOS OKTO DODEKATAGRUENT WITH DOT ABOVEHALF TRIAN" +"GULAR COLONHAND INTERIOR PRODUCTHOCKEY STICK AND PUCKHORIZONTAL REFLECTIONHOR" +"IZONTAL TABULATIONHOUSAND MILLIONS SIGNINTERSECTING LOGICAL INTERSECTION OPER" +"ATORINVERTED BRIDGE BELOWINVERTED GLOTTAL STOPJUSTIFIED LOWER HALF JUSTIFIED " +"RIGHT HALF JUSTIFIED UPPER HALF LATTENED OPEN A ABOVELESS-THAN OR EQUAL TOLET" +"TER SMALL CAPITAL MALE WITH STROKE SIGNMIDDLE RING LITTLE ONMORPHOLOGICAL DIV" +"IDERND TELEPHONE RECEIVEROCAL NOTATION SYMBOL-OHAMMAD ISOLATED FORMOP SHADED " +"WHITE ARROWOPPOSING AN PLUS NAGAPAP PLUS PAP PLUS LU3RATING SYSTEM COMMANDREL" +"ICT HOUSE BUILDINGREVERSED FEATHER MARKRIGHT ARROWHEAD ABOVERIGHT QUARTER SEC" +"TIONRISING DIAGONAL SLASHSH AMPERSAND ORNAMENTSHORT LEFTWARDS ARROWSIDE TO SI" +"DE SCISSORSTEEN POINTED ASTERISKTHICK LETTER SELECTORTILDE OPERATOR ABOVE TOU" +"CHING INSIDE MOUTHTRIANGULAR HALF BLOCKUPPER QUARTER SECTIONVERTICAL LINE OVE" +"RLAYVERY HEAVY BARB ARROWVOICED ITERATION MARKWITH INVERTED V ABOVEWO-CIRCLE " +"ALTERNATE IWO-CIRCLE NUKTA ABOVEXTRA SHORT VOWEL MARKYIG MGO TSHEG SHAD MA AB" +"OVE LEFT TRIANGLE AND DIAGONAL STROKE BEGIN LOGOGRAM MARK OVER LAGAR GUNU SHE" +" OVER TUR ZA OVER ZA WITH DEPENDENT LOBE WITH HORIZONTAL BAR WITH INVERTED IN" +"PUT79 OVER LAK-079 GUNUA- SHOG GI MGO RGYANAISED UPPER LEFT ARCAND NORTH EAST" +" ARROWAND NORTH WEST ARROWAND SOUTH EAST ARROWAND SOUTH WEST ARROWANGE ANTIRE" +"STRICTIONARXIS KAI FTHORA VOUBETWEEN PALM FACINGSBSET OF NOR EQUAL TOCENTRE V" +"ERTICAL LINECHARACTER INTRODUCERCHEMICAL SYMBOL FOR CONSONANT SIGN HAARUCRESC" +"ENT MOON SYMBOLCURRENCY SYMBOL RIELCURVED ANGLE BRACKETDDASA ALLAAHU SIRRAHDO" +"TLESS HEAD OF KHAHDOUBLE ANGLE BRACKETDOUBLE DOT TONE MARKDOWN ARROWHEAD BELO" +"WE CONSONANT MODIFIERE POINTED WHITE STAREMESTVENNY ZADERZHKAENARMONIOS ANTIF" +"ONIAEVERSED ROTATED RANAFINAL CONSONANT MARKFIVE SPOKED ASTERISKFORMS LIGHT V" +"ERTICALFOUR RAISED KNUCKLESGRA GCAN -CHAR RTAGSHALF CIRCLE WITH DOTHAR2 TIMES" +" GAL PLUS HIGH RATHA OR LOW PAHIGH TONE APOSTROPHEHREE-DOT NUKTA ABOVEIBLICAL" +" END OF VERSEIMAGE OF OR EQUAL TOINDEX RING LITTLE ONINING OBLIQUE STROKEINSI" +"DE MOUTH RELAXEDINVERSE WHITE CIRCLEINVERTED CANDRABINDUIRCLES HITTING WALL J" +"UDEO-SPANISH VARIKAJUSTIFIED LEFT HALF KHAMTI REDUPLICATIONL FUNCTIONAL SYMBO" +"L LAILING ROBOT FRAME-LATALIZED HOOK BELOWLE WITH POPPING CORKLEFT AND LOWER " +"RIGHTLEFT-TO-RIGHT SECANTMULTIPLE PUNCTUATIONNIS RACQUET AND BALLONCAVE-SIDED" +" DIAMONDONE MARK SGAW KAREN ONOMICAL SYMBOL FOR OTLESS J WITH STROKEOVER LEFT" +"WARDS ARROWOWER QUARTER SECTIONPLUS GISH TIMES TAK4POTABLE WATER SYMBOLREAN S" +"TANDARD SYMBOLREVERSED ONE HUNDREDRIGHT ANGLE WITH DOTRIGHT QUADRANT BLACKRIG" +"HT U-SHAPED ARROWRRAMA ALLAAHU WAJHAHRUMAI PALAUNG TONE-5SCRIPTION CHARACTER " +"SEPARATOR KEY SYMBOLSEPARATOR MIDDLE DOTSIDEWAYS NOON GHUNNASTAR WITH MIDDLE " +"DOTTHROUGH SMALL CIRCLETISTRY SYMBOL LIGHT TRANSPOSITION MARKERUBHAANAHU WA T" +"AAALAAUP-POINTING AIRPLANEUP-POINTING TRIANGLEVAL WITH OVAL INSIDEWARE-FUNCTI" +"ON SYMBOLWET CULTIVATION SIGNWITH FOUR DOTS ABOVEWITH RAISED LEFT DOTWITH SOR" +"OCHYA NOZHKAWORD REPETITION MARKYIG MGO PHUR SHAD MAYRENAIC TWO DRACHMAS AND " +"PROSGEGRAMMENI AND RETROFLEX HOOK FLUTTERING IN WIND IN A RECTANGLE BOX KASKA" +"L U GUNU DISH LOVE YOU HAND SIGN WITH STRIKETHROUGH WITH VERTICAL TAILA END L" +"OGOGRAM MARKALTERNATE LAKH MARKANS-SERIF CAPITAL LANSPOSITION BRACKETARABIC F" +"ORM SHAPINGARENTHESIS NOTEHEADARTIAL DIFFERENTIALASTEROID PROSERPINAATED TELL" +"ER MACHINEBETWEEN MIDDLE RINGBINING ALEF OVERLAYC DIGRAPH WITH CURLCIRCLED SA" +"NS-SERIF CIRCLED WHITE ARROWD CIRCUMFLEX ACCENTDENOMINATOR SIXTEENDOWN AND HO" +"RIZONTALDOWN POINTING INDEXEFT QUARTER SECTIONET WITH WHITE CROSSEVEN POWERS " +"OF FOURFIVE FINGERS SPREADFLOORPLANE TWISTINGFT-POINTING FLEURONGAPPED CIRCLE" +" ARROWGIBBOUS MOON SYMBOLHAND COVERING MOUTHHEAD-SHAPED POINTERHORT STROKE OV" +"ERLAYHURISAZ THURS THORNIGATURE AYIN-DALETHILDING CONSTRUCTIONIMIDIA SEXTULA " +"SIGNIN CHEN SPUNGS SHADING SHIRT WITH SASHINGLE DOT TONE MARKINSIDE CIRCLE BE" +"LOWISPUTED END OF AYAHITED LIABILITY SIGNKULL AND CROSSBONESLEADING MCHAN RTA" +"GSLEFT POINTING INDEXLEFT U-SHAPED ARROWLF MADDA OVER MADDALUB-SPOKED ASTERIS" +"KMOVES AGAINST CHEEKMSHELL MOBILE PHONENAXIAN FIVE HUNDREDNDRED POINTS SYMBOL" +"NE HUNDRED TWENTY PNETWORKED COMPUTERSNOGRAPHIC FULL STOPNORTH ARROW WITH HOO" +"P SEMICIRCLE ARROWOTATED ARDHAVISARGAOVER E NUN OVER NUNOW-9 QUOTATION MARKPA" +"RAGRAPH SEPARATORPREFIXED NASAL SIGNQUADRUPLE CRESCENTSQUESTION MARK ABOVERAI" +"LING MCHAN RTAGSRATUM SUPER STRATUMREE-QUARTER CIRCLE RIGHT MIDDLE STROKERIGH" +"T TO LOWER LEFTRROW NO-BREAK SPACERY CULTIVATION SIGNSEQUENCE INTRODUCERSEVEN" +" EIGHTHS BLOCKSH PLUS HU PLUS ASHSLANTED NORTH ARROWSTRAIGHT THUMB BENTSTRATI" +"AN FIFTY MNASSYMBOL FOR BEGINNERTART OF RUB EL HIZBTHANG LONG ANUSVARATIGHTLY" +"-CLOSED EYESTO LOWER RIGHT FILLTRANNO MALO POVYSHETURNED PADA PISELEHTURNED S" +"ECTION MARKTWENTY-FIVE DEGREESUBLE DOT WITHIN DOTUP HORIZONTAL HEAVYUP HORIZO" +"NTAL LIGHTUP-POINTING CHEVRONURRENCY SYMBOL BAHTVARIANT FORM ILIMMUVARIANT WI" +"TH SQUAREVARIATION INDICATORVASTNESS OR WASTINGVERSAL INTERSECTIONVERSE FINAL" +" BARLINEVERTICAL TABULATIONWITH YEH FINAL FORMWOMEN HOLDING HANDS AND NO DOTS" +" ABOVE AND SMASH PRODUCT AND YPOGEGRAMMENI FOR SIMALUNGUN SA NOT LITTER SYMBO" +"L OVER INVERTED SHU SPREAD THUMB SIDE THUMB INDEX THUMB WITH CIRCLE ABOVE WIT" +"H CIRCLE BELOW WITH CROSSED-TAIL WITH FLOWING SAND WITH KAVYKA ABOVEAA ALLAAH" +"U TAAALAAABBREVIATION MARK AND LOW RIGHT RINGARROW SHAFT WIDTH ASTED SWEET PO" +"TATOASTROLOGICAL SIGN ATERRESTRIAL ALIENATIN SMALL LETTER BAARAKA WA-TAAALAAB" +"OTTOM RIGHT KASRACANTILLATION SIGN CONTINUING OVERLAPCOPPER ANTIMONIATECTLY E" +"QUIVALENT TOCUP WITHOUT HANDLEDOUBLE PUNCTUATIONDOWN-OUTPUT SYMBOLEAST POINTI" +"NG LEAFENTERING TONE MARKENTY-TWO POINT TWOEPIGRAPHIC LETTER ERTICAL BAR VIRA" +"MAEVENTEEN FULL STOPEVERSED CHELYUSTKAFIVE EIGHTHS BLOCKFORKED PARAGRAPHOSFOR" +"TY-FIVE DEGREESGATIVE ACKNOWLEDGEGGLY VERTICAL LINEGISH CROSSING GISHHAIS LUS" +" NTOG NTOGHEAVY WHITE SQUAREHILOSOPHERS SULFURHOLDING BACK TEARSHORIZONTALLY " +"BELOWHOUSANDS SEPARATORHUNDREDS UNIT MARKIGATURE ZAYIN-YODHIGSAW PUZZLE PIECE" +"IN POSSESSION SIGNINDEPENDENT VOWEL IRROR HORIZONTALLYITAN SMALL SCRIPT IX SP" +"OKED ASTERISKJEEM ISOLATED FORMKANTAJA NAASIKYAYAKBAR ISOLATED FORMKOREAN CHA" +"RACTER OLEFT MIDDLE STROKELEFT-STEM TONE BARLOSED CIRCLE ARROWLOWER MIDDLE RI" +"GHTMATHEMATICAL SPACEND UPPER RIGHT ARCNINETEEN FULL STOPNISH VERSE DIVIDERNO" +"RMAL SUBGROUP OFNYET THYOOM TA-ROLNYOOGA NAAKSIKYAYAORK ON THE DECAYEDOTLESS " +"DALATH RISHOU ALAYHE WASALLAMOUCHTONE TELEPHONEOW TONE APOSTROPHEPACING CANDR" +"ABINDUPERFIXED LETTER RAPUNCTUATION BINDU QUARTER NOTE STEM REDUPLICATION MAR" +"KRIST CIRCLE FRONT RYUKOVAYA SVETLAYAS INSIDE AND ABOVES PRESSED TOGETHERSEPT" +"UPLE CRESCENTSSET OVER BUILDINGSSHAN REDUPLICATIONSHING SWEAT SYMBOLSINGLE PU" +"NCTUATIONSMALL CIRCLE ABOVESOUL ISOLATED FORMSYMMETRIC SWAPPINGTILTING FROM W" +"AISTTO LOWER LEFT FILLTOP U-SHAPED ARROWTROFLEX HOOK BELOWTYPE A ELECTRONICSU" +"-SHAPED ORNAMENTSUM WITH DRUMSTICKSUP ARROWHEAD BELOWUPPER MIDDLE RIGHTUTLINE" +"D BLACK STARVARIANT FORM LIMMUVERY SMALL DIAMONDWEST POINTING LEAFWHITE VERTI" +"CAL BARWITH JUSTIFICATIONWITH STROKE SYMBOLYLLABLE LENGTHENER ALTERNATION MAR" +"K AND PALATAL HOOK GRAVEYARD SYMBOL LAGAB TIMES ASH2 LAGAR OVER LAGAR OVER ZU" +" PLUS SAR PLUS SHA3 PLUS A TO BLACK DIAMOND WITH BULLET NOSE WITH SOUND WAVES" +" WITH TILDE ABOVE-GAAHLAA TTUDDAAG-HEIGHT LEFT HOOK0 WHEELED CHARIOTA PLUS HA" +" PLUS DAABBREVIATION SIGNAEUM ONE PLETHRONALTERNATE NUMBER AMAT BARAKAATUHUMA" +"MPHYLIAN DIGAMMAAND BLACK SQUARESAPLI DYO DODEKATAASELINE ROUND DOTATHERING T" +"OGETHERAUKAZ LAGU LOGR LBE WITH MERIDIANSBERBER ACADEMY YABOTTOM HALF BLACKBR" +"ACKET EXTENSIONBRIGHTNESS SYMBOLBUT RELIEVED FACECAL SYMBOL BOTTOMCANCELLATIO" +"N MARKCANDRABINDU ABOVECIRCLES WITH DOTSCLOSED LITTLE YUSCOMBINING NUMBER CON" +"SONANT SIGN PACONTINUATION SIGNCONTOURED OUTLINECROSS PUNCTUATIONCTION APPLIC" +"ATIONDELPHIC FIVE MNASDENTAL PERCUSSIVEEAR SCREEN SYMBOLEMICOLON UNDERBARFACI" +"NG BABY CHICKFINGER-POST ARROWFLICK ALTERNATINGFRACTION ONE HALFFROM SMALL CI" +"RCLEGENERIC MATERIALSGREATER-THAN NOR GREATER-THAN SIGNHAH ISOLATED FORMHEART" +"-SHAPED EYESHIRTEEN FULL STOPHORIZONTAL DOUBLEHORIZONTAL SINGLEIASTRE MARK AB" +"OVEICTED LEFT ENTRY-IDEOGRAPHIC COMMAIGHTEEN FULL STOPINEAR ANNOTATION ING PO" +"LE AND FISHINITIAL LETTER RAINVERTED MCHU CANITE PART INTEGRALKE BOTTLE AND C" +"UPKHAH INITIAL FORMLAGOLITIC LETTER LAH ISOLATED FORMLAPPING LESS-THANLD PERM" +"IC LETTER LHOUETTE OF JAPANLIAN HIEROGLYPH AMALL RED TRIANGLEMALL WHITE CIRCL" +"EMANENT PAPER SIGNMEDIUM BARB ARROWMEDIUM SHADE FORMMEEM INITIAL FORMMILITARY" +" AIRPLANENASALIZATION MARKNAUDIZ NYD NAUD NND UPPER LEFT ARCNE EYEBROW RAISED" +"NEGATIVE CIRCLED NFORMATION SOURCENG STROKE OVERLAYONE EIGHTH BLOCK-OP AND UP" +"PER LEFTOPEN-HEADED ARROWOURTEEN FULL STOPOWER NUMERAL SIGNPINWHEEL ASTERISKP" +"RECEDING SOLIDUSPRIZNAK MODIFIER PUNCTUATION SIGN QUAT REVERSED ESHREATIONAL " +"VEHICLERIATION SELECTOR-RIGHT HALF CIRCLERYBLION BASE SIGNS REVOLVING LIGHTSE" +"RVER EYE SYMBOLSIGN O WITH CROSSSQUARED TIMES KURSTRAIGHT MOVEMENTTAN ISOLATE" +"D FORMTARTING FROM SIGNTEN THOUSAND SIGNTERSYLLABIC TSHEGTHREE SOUND WAVESTIA" +"L ARTS UNIFORMTONAL RANGE MARK TRIPLE DASH ARROWULAR MEDIUM SHADEUP AND HORIZ" +"ONTALUP POINTING INDEXURNED COMMA ABOVEURNED DAMMA BELOWVARIANT FORM ASH9VARI" +"ANT FORM IMINVARIANT FORM USSUVEE WITH UNDERBARVERAGE WITH SLASHVOCALIZATION " +"MARKVRE TOURNOIS SIGNWHITE PARENTHESISWHITE SHOGI PIECEWITH DOUBLE SLASHWITH " +"NOT EQUAL TOWO VERTICAL DOTS Y ON BLACK SQUAREYEH ISOLATED FORMYPTIAN HIEROGL" +"YPH AND HEAVY RIGHT AND LIGHT RIGHT CAPPED MOUNTAIN INSERTION POINT LIGHT MOO" +"N ARTA OR THE IMAGE OF PLUS KAK PLUS A SMALL ROTATIONS TIMES DISH TENU TIMES " +"GAN2 TENU WITH BUNNY EARS WITH DOT INSIDE WITH HEADSTROKEADIAN SYLLABICS AFFR" +"ICATION MARKANABAZAR SQUARE ARENTHESES ABOVEB2 TENU PLUS TABBOLD GREEK CROSSB" +"OTTOM HALF RINGCANDRA ANUNASIKACASIAN ALBANIAN CH WITH UMBRELLACKLE FILL FRAM" +"E-CLOSED TENTACLESCOMPRESSED ARROWCONSONANT JOINERCORNER DOWNWARDSCORNER LEFT" +"WARDSCREAMING IN FEARDEWAYS U BRACKETDITORIAL CORONISDOTTED CRESCENTSDOUBLE C" +"RESCENTSDOUBLE DOT ABOVEDOUBLE HEAD MARKDOUBLE TURNSTILEDOUBLE ZAPYATAYADOWN " +"RIGHT BARB DVUMYA ZAPYATYMIE PLUS GAN2 TENUECIMAL SEPARATOREFORE COMPLETIONEN" +" MILLIONS SIGNEND OF TEXT MARKENTRE WHITE STARENUMERATION SIGNEPSILON UNDERBA" +"RERCURY SUBLIMATEEVERSED VISARGA EVERY OTHER TIMEFALLING DIAGONALFFERENCE BET" +"WEENFLOORPLANE SPACEFORWARD-FACING RHIGH SPACING DOTHMATULLAH ALAYHEHOLDING T" +"OGETHERHYPHENATION MARKIDED GREEK CROSSIFTEEN FULL STOPIGHTH NOTE STEM IMENSI" +"ONAL ANGLEINDEPENDENT SHININDEX THUMB SIDEINES CONVERGING IPPER-MOUTH FACEIRC" +"LE X NOTEHEADISTOS DISC SIGN IVE POINTED STARK PERMITTED HERELD ASSYRIAN ONE " +"LEFT ARROW ABOVELEFT HALF CIRCLELIGHT AND RIGHT LIGHT BARB ARROWLLER COASTER " +"CARLLOW PAN OF FOODLOWER OVER UPPERLTERNATE HASANTAMAGNIFYING GLASSMESTVENNY " +"KLYUCHMIDDLE AND BELOWMIDDLE AND RIGHTNAL DIGIT SHAPESNGQIN SIGN SLOW NION WI" +"TH SERIFSNTAIGANA LETTER O-MINOAN SIGN CMOLD TAMIL VIRAMAOLD WHITE CIRCLEORIZ" +"ONTAL JOINERPEN CENTRE CROSSPLACEHOLDER MARKPLE MEASURE RESTPOSTPOSITION MENP" +"RECEDING SUBSETPRECHGESANG STEMQ WITH HOOK TAILR PLUS GAN2 TENURAIDO RAD REID" +" RRAYS AND DOTTED RECORD SEPARATORREPETITION MARK-RESH-AYIN-DALETHRESSIONLESS" +" FACERIGHT DOWN BARB RIGHT HALF BELOWRIGHT HALF BLACKRISING TONE MARKRIZONTAL" +" ELLIPSESANS-SERIF ARROWSERIFS AT BOTTOMSHU2 PLUS KASKALSIGN RISING TONESITIO" +"N INDICATORSLANTED EQUAL TOSMALL CAPITAL ELSMALL NOON ABOVESTERISK OPERATORST" +"ICKING OUT FARSTRAIGHT STRETCHSTRING FRETBOARDSTUCK-OUT TONGUETAKANA-HIRAGANA" +" TRIPLE CRESCENTSUBJOINED LETTER UDLY CRYING FACEULDERED OPEN BOXUMBER SIGN A" +"BOVEUP MIDDLE HINGEDUP-OUTPUT SYMBOLUPERSCRIPT ALAPHUPPER OVER LOWERVARIANT F" +"ORM ESHVERY HEAVY SHAFTVIEWING CEREMONYVOWEL LENGTHENERWALLED ENCLOSUREWAVY H" +"AMZA BELOWWITH CENTRED DOTWITH HEARING AIDWITH LEFT UPTURNYATHOS BASE SIGNYIR" +" MKPARAQ MEUN ALTERNATE FORM AND BOTTOM END CLOUD AND RAIN CORNER BRACKET DEY" +"TEROU ICHOU NEPOSTOYANNAYA OPERATOR WITH OVER MOUNTAINS OVER SIG4 SHU2 PARES" +"TIGMENON PLUS HI PLUS A THROUGH CIRCLE THUMB STRAIGHT TIMES IGI GUNU TOUCHIN" +"G INDEX WITH DESCENDER WITH DIAERESIS WITH RIGHT LEG-AND-RING BELOW-CARRIER L" +"ETTER-NO-EVIL MONKEY-PIECE SWIMSUIT2 CHARIOT FRAMEACHES THE LIMITAI LAING DIG" +"IT ALAYHE ASSALLAMALAYHI WA-AALIHALIF LENGTHENERALMOST EQUAL TOAMARITAN SOURC" +"EAMOUNT OF CHECKAND PARALLEL TOATA LINK ESCAPEATINATE MYSLITEBAGS UNDER EYESB" +"AR ABOVE UNIONBELGTHOR SYMBOLBELOW LONG DASHBENT OVER INDEXBINDING BRACKETBLA" +"CK TRIANGLESBLOCK DIAGONAL BREAKING HYPHENBROWS STRAIGHT CAPITAL LETTERSCIRCU" +"IT-OUTPUT CKET CALCULATORCLOSED BY CURVECORNER WITH DOTDAGESH OR MAPIQDESCEND" +"ING TONEDI ALLAHOU ANHUDIALYTIKA TONOSDIGA AELA-PILLADOING CARTWHEELDOUBLE TR" +"IANGLEDOWN SEQUENTIALDOWNWARDS TRENDE ISOLATED FORME MUSICAL NOTESE OVER INFI" +"NITYEFT REPEAT SIGNEH INITIAL FORMERICAN FOOTBALLESIDE LESS-THANESISTOR SEGME" +"NTESSARON CHRONONETIC VERSE SIGNEXPONENT SYMBOLFIVE-LIKE BHALEFORWARD TILTING" +"FOUR DOTS BELOWFOUR DOTS WITH FOUR ENCLOSURESFOUR TICK MARKSFRACTION DIGIT FT" +"ER COMPLETIONGEMINATION MARKGGLY LINE BELOWGHT REPEAT SIGNGROUP SEPARATORHAKI" +"NG PARALLELHALF FILL SPACEHALF VERTEX OF HEH MEDIAL FORMHOOKED INDEX UPHORIZO" +"NTAL DASHHORIZONTAL FILLHOUSAND STATERSHREE DOTS BELOWHREE HALF BEATSIAMOND U" +"NDERBARIDING ENCLOSUREIGN PALI VIRAMAIMISEOS CHRONOUIMPERFECTA RESTING SYMBOL" +" FOR INGLE HEAD MARKINVERTED CARIK INVERTED LAZY SINVERTED STROKEIRCUMFLEX BE" +"LOWITH FINGERNAILSIZED WHEELCHAIRKISIM5 TIMES BIKTOVIK NUMERAL LATION FUNCTIO" +"NLD TAMIL SHORT LEFT DOWN BARB LEFT HALF BELOWLEFT HALF BLACKLEFT HAND INDEXL" +"ETTER CAPITAL LEVEL TONE MARKLEVEN FULL STOPLIGHT AND LEFT LMOST EQUAL TO LON" +"G HOOK BELOWLONG VOWEL SIGNLOOK OF TRIUMPHLOSED INSULAR GMALAKON CHROMA MARRY" +"ING MAIDENMEEM FINAL FORMMIDDLE DIAGONALMURDA MAHAPRANAN-ARY SUMMATIONNA DOUB" +"LE HELIXNASALIZED TONE-ND OF PARAGRAPHNJOINING MACRONNO GOOD GESTURENOON FINA" +"L FORMNOT APPROXIMATENVERTED UBADAMAODIFIER DAMAGEDODO SOFT HYPHENOGOGRAM KHA" +"MTI OLIDUS OPERATORON TOP OF MODEMOND PLACE MEDALONJOINED HINGEDONTOUR INTEGR" +"ALORIZONTAL COLONORT EQUALS SIGNOUBLE BACKSLASHOW-FALLING TONEOWER HALF BLACK" +"PEN SQUARED DOTPENSION RAILWAYPERTHO PEORTH PPLUS SIGN BELOWPRISHTHAMATRA EPU" +"T SYMBOL FOR QUADRUPLE ARROWQUADRUPLE DASH R WITH FISHHOOKREAMY EYEBROWS RECE" +"PTIVE EARTHRECITATIVE MARKREVERSE SOLIDUSREVERSED OPEN ERIGHT HALF RINGRIGHT " +"RERENGGANRIGHTWARDS AND RIGHTWARDS TICKRMAN PENNY SIGNRNAMENT STROKE-S ELEVAT" +"US MARKS IN SILHOUETTESHITA PLUS GISHSHORT OVER LONGSIXTEENTH NOTESSSICAL BUI" +"LDINGST QUARTER MOONST SYRIAC CROSSSTANDING KNIGHTSTANDING PERSONSTERESIS SYM" +"BOLSTROKE NOT SIGNTAI LAING TONE-THREE DISH TENUTHROWING A KISSTILDE DIAERESI" +"STIP ON THE LEFTTOP RIGHT FATHATRIANGULAR MARKTVIMADUR SYMBOLTWO WITH STROKEU" +" PLUS U PLUS UUBLE RING BELOWUGMENTATION DOTULTIPLICATION XUMAI PALAUNG FAUR " +"POINTED STARUSTER NOTEHEAD VERTICAL SECANTVOWEL SEPARATORVOWEL SHORTENERWALLP" +"LANE SPACEWHITE DOT RIGHTWITH DOWN ARROWWITH RAIN DROPSWO THIRDS BLOCKXTEEN F" +"ULL STOPYNCHRONOUS IDLEZ WITH CROSSBARZAIN FINAL FORMZERO WITH SLASH AND DIAE" +"RESIS AND SMALL TAH CROSSING ESH2 HASER FOR VAV WITH BACK YER WITH LONG LEG-C" +"URRENCY SIGN1 OVER LAK-081AFETY SCISSORSALF TREE TRUNKALTER PAHLAVI AMNUC PII" +" KUUHAND COLD SWEATANGLE OPENING AROUND-PROFILEAU LENGTH MARKBAG MEMBERSHIPBH" +"ATTIPROLU AABLADE SCISSORSCENTURIAL SIGNCEPTER OF JOVECERTAINTY SIGNCOLON OPE" +"RATORCRAB STEPPING CRIFICIAL WINED-UP NEWSPAPERDASIA PNEUMATADEYTEROS ICHOSDI" +"AGONAL MOUTHDIAGONAL PATH DIO MICROPHONEDIRECTION FLIPDOES NOT EXISTDOUBLE-ST" +"RUCK DUN3 GUNU GUNUED SYMBOL FOR EMIVOWEL SIGN END OF SECTIONENDED MULTIMAPEP" +"ENTHETIC YUTERIAL ARAMAIC ERIC INDICATORERTICAL JOINEREXCLAMATION OHEXTENDED " +"BHALEFATHATAN ABOVEFFED FLATBREADFFICE BUILDINGFINAL ANUSVARAFORWARD INDEX GE" +"RED TREMOLO-GHT WITH STARSGUNU TIMES ASHGYPTOLOGICAL AHESIVE BANDAGEHIRD-STAG" +"E HLIHREE-LEGGED TEIGHTWARDS VANEIKHAYA PUTNAYAING HANDS SIGNINOLOGICAL DOTIN" +"SERTION SIGNINVERTED BIRGAINVERTED DAMMAIRCULAR VIRAMAISED ROUND DOTISSION TI" +"CKETSITA PLUS GISH IVE KEY SYMBOLIVE OBOLS SIGNIWAZ TIR TYR TJOINED SQUARESLA" +"CE OF SAJDAHLEFTWARDS AND LEFTWARDS TICKLESS-THAN NOR LETTER OVERLAPLEVEN TWE" +"LFTHSLIGHTLY SMALL LITTLE SECTIONLOTUS POSITIONLOWER DIAGONALLOWER TERMINALME" +"DIUM DIAMONDMENSION ORIGINMID-LEVEL TONEMOTHETIC ABOVEMRACHNOTIKHAYANORTH ARA" +"BIAN NYI ZLA NAA DAOBLIQUE HYPHENOLD RESOLUTIONONE SOUND WAVEOOTNOTE MARKEROP" +"EN TENTACLESOPPOSING PIRIGORANGE DIAMONDORD SEPARATOR OSITION SYMBOLOT TILDE " +"ABOVEOTHERS CIRCLEDOUR OBOLS SIGNOUSING THUNDEROVER GUD LUGALPAO KAREN TONEPA" +"RTMENT STOREPEN MARK BELOWPLE WITH HEARTPLETE INFINITYPLITTING APARTPPED MIDD" +"LE UPPROTECTED AREAQUINARIUS SIGNRD PLACE MEDALREATIVE HEAVENREE-LINE STAFFRE" +"H FINAL FORMREVERSED-SCHWARIGHT CROSSBARRING MEGAPHONEROSS ON SHIELDSECOND SU" +"BUNITSEL LOCOMOTIVESEPARATOR MARKSHAN MEDIAL WASHESHIG TIMES SHRII PUSHPIKASI" +"DE-DOWN FACESMALL LETTER DSMALL LETTER JSMOKING SYMBOLSPEECH BUBBLESSQUIGGLE " +"ARROWSTRONG ISOLATETELPIECE CLOCKTERMINAL MARK-TETARTOS ICHOSTHAKA ANUDATTATH" +"ALAN ETHEL OTHER CHRISTMASTHOUSANDS MARKTHOUSANDS SIGNTHREE POINTED TIMES OPE" +"RATORTIMES SHU TENUTOP HALF BLACKTRADITIONAL ERTRANSMIT STATETRIANGLE CARETTR" +"IANGLE WITH TURKIC LETTER TWELFTH CIRCLETWO DOT LEADERTWO ENCLOSURESTWO WHITE" +" DOTSUAL WHEELCHAIRUBHAYATO MUKHAUND MARK ABOVEUNDER RELATIONUNION OPERATORUN" +"IT SEPARATORUP RIGHT BARB UPPED INDEX UPUPPER TERMINALUSPENSION MARKVENIENCE " +"STOREVERTICAL ABOVEVERTICAL COLONVERTICAL HEAVYVERTICAL LIGHTVONIC ASTERISKVR" +"ON SNOWFLAKEWITH DOT BELOWWITH FATHATAN WITH LEFT HOOKWORD SEPARATORXO EKFONI" +"TIKONYOUTHFUL FOLLYZAH WITH MEEM ZAKAYA LANTERN AND SKI BOOT AND YEN SIGN B B" +"AR SYMBOL BAT AND BALL BZHI MIG CAN CROSSING KA2 DIMINUTION-1 DIRECTIONAL HE" +"ADED ARROW OF THE HORNS OPPOSING KUR TIMES KASKAL VARIANT FORM WITH INK PEN W" +"ITH JEGOGAN WITH OVERBAR WITH TEE TOP WITHOUT SNOW-ESASA DOTTED-OFF CALENDAR-" +"OR-PLUS SIGN-PER-EM SPACEACCOMMODATIONALL LOST SIGNAMUHU ALAYNAAAN RUPEE SIGN" +"ANNED LEATHERANTIC FIGURE APPED PRESENTAR WITH QUILLARCHAIC KOPPAARGOSYNTHETO" +"NARLAUG SYMBOLARRED TRIDENTARROW OVERLAYAUDATE CHRIVIAWELLEMET YAZBACKSLASH B" +"ARBALL AND HOOPBASAN LETTER BOHAIRIC KHEIBOTTOM CORNERBOWING DEEPLYBY DEFINIT" +"IONCENTRED ABOVECHRYSANTHEMUMCIRCLE INSIDECITATION MARKCRIPTION TAKECRIPTIONA" +"L PACROSSING GABACROSSING GAN2CROSSING MUSHCULATED LORRYDI RIYAL SIGNDIAERESI" +"ZED UDIC MARK SIGNDOTTED ZLAMA DOUBLE CIRCLEDOUBLE HYPHENDOUBLE MUCAADDOUBLE " +"STROKEDVOECHELNAYA EAVENLY EARTHED PAPERCLIPSEDIC ANUSVARAEELING PERSONEHU FE" +"OH FE FEMPHATIC TONEER BOARD FILLERTION SYMBOLEUROPE-AFRICAEVERSED DAMMAFICAT" +"ION CARDFINAL LETTER FINAL SEMKATHFIXED-FORM RAFOREMENTIONEDFROWNING FACEFT A" +"RROWHEAD FULL SURROUNDGAR FRACTION GAW KAREN SHAGIFT ENVELOPEGTER TSHEG MAGYA" +" GRAM SHADH-TYPE SYMBOLHAKASSIAN CHEHAM DIGIT ONEHERICAL ANGLEHIEROGLYPHIC HI" +"NESE TONE YHREE TWELFTHSI LENGTH MARKI WITH STROKEIDE LOST SIGNIFI ROHINGYA I" +"GHT TWELFTHSILABIAL CLICKILE SEPARATORIMAGE BRACKETINTEREST SIGNINVERTED FORK" +"INVERTED TURNIOT SYLLABLE IRCLED INDEX ISH LIRA SIGNITING THROUGHIVE POINT ON" +"EIVE SLOW SIGNJES SU NGA ROJJAL ALLAAHU K WORK SYMBOLKAPYEOUNPIEUPL-TYPE SYMB" +"OLLATERAL CLICKLEFT CROSSBARLEGETOS ICHOSLISION SYMBOLLOCATION SIGNLOCK WITH " +"KEYLOOPED VIRAMALOSING SPIRALLVE FULL STOPLVEOLAR CLICKMAILBOX WITH MALL LETT" +"ER ZMALO POVYSHE MARKS CHAPTERMASORA CIRCLEMATU ALLAAHI MEDIUM SQUAREMELODIC " +"QITSAMESSENIAN TENMICROCOMPUTERMINDER RIBBONMINUS SIMILARMINUS WHITE XMOBILE " +"PHONESMODIFIER MARKMULTIOCULAR ONAP PIZZICATONG TERMINATORNINE TWELFTHSNING M" +"OVEMENTNP TRANSISTORNTY FULL STOPNUMERATOR ONENUMERIC SIGN OBLIQUE LINE OGOTY" +"PE SIGN OLVING HEARTSOMAN NUMERAL ONAL COMPUTERONG RIGHT LEGONG-LEGGED DEONGR" +"ATULATIONOON NOTEHEAD OPPOSING NAGAOTEHEAD BLACKOURTH SUBUNITOUT MIDDLE UPPA " +"NJI PIPAEMPAIRED ARROWSPLUS OPERATORPN TRANSISTORPPOSING LUGALPREPONDERANCEQU" +"ARTERS SIGNRACKETS ABOVERANKS CASKET RIGHT HARPOONRIGHT POINTERRIPLE SVARITAR" +"IZONTAL TAILRN PENTATHLONROTATED BIRGARPENTRY PLANERRIAGE RETURNRTABLE STEREO" +"S KAI APOTHESS KRYZHEM ON S UP TOGETHERSAL PLUS TUG2SAMYOK SANNYASELECTED ARE" +"ASHESH PLUS KISIA-AUSTRALIASIGN AVAGRAHASIGN PAMUDPODSILI PNEUMATASIMPLIFIED " +"ERSMALL LETTERSSSAGE WAITINGSTABLE SYMBOLSTERTIUS SIGNSYNDESMOS NEOTE ORDER M" +"ARKTED HAND SIGNTHIRD SUBUNITTIRTA TUMETESTOP HALF RINGTU WAS-SALAAMU WITH ST" +"ROKEUE OF LIBERTYUFFLE PRODUCTUPERIMPOSED XUPONDIUS SIGNUPSILON WITH UPWARDS " +"TRENDURNED W BELOWUSHING UPWARDUSICAL LEIMMAVE-LINE STAFFVEN POINT ONEVERGREE" +"N TREEVERLAY MIDDLEVERTICAL BARSVERTICAL FILLVERTICAL-LINEVICE CONTROL VOWEL " +"SIGN PAW RING INSIDEWAVY LOW LINEWAVY OVERLINEWAW-AYIN-RESHWHITE ELLIPSEWITH " +"ASTERISKWITH INTEGRALWO-LINE STAFFYMBOL TAU RHOYOD YOD PATAHYUUKALEAPINTUZHOU" +" NUMERAL AND PICTURE AND TOP END CROSSING GU IN TRIANGLE KLYUCHEVAYA LINE SY" +"MBOL OF ANTIMONY ON PEDESTAL OVER KISIM5 OVER MIDDLE OVER TWO PI SKEWED LEFT " +"WITH DAGESH WITH INDEX WITH UPTURN-DZUD RTAGS -MAIL SYMBOL-SHAPED SIGN-SIMPL" +"IFIED 6 LONG NGGOOACE INTEGRALACUTE ACCENTAFU LEERAEWAALLPOINT PENALT PAN SIG" +"NALTERNATING AND CRESCENTAND OPERATORANG KHANG GYAR DIAERESISARALLELOGRAMATNA" +"H HAFUKHATTOOED HEADBACK OF HANDBAHIRGOMUKHABEHIND CLOUDBETWEEN LIPSBINING MA" +"RK BLOWING FACEBLUE DIAMONDBRATION MODEBRIDGE ABOVEBSCRIPT ALEFBUTTON MOUSEBY" +"SMAL WATERCABBAGE-TREECALENDAR PADCENDING NODECHAIR SYMBOLCIAN LETTER CIRCLED" +" PLUSCIRCLES AND CK-O-LANTERNCLOSED MOUTHCRESCENT BARCROSSING GI4CROSSING KAL" +"CROSSING LU2CROSSING NUNDASHED ARROWDE MARK SIGNDENTAL CLICKDHRI LETTER DICTI" +"ON SIGNDIGRAPH KOTODIGRAPH YORIDOT OPERATORDOUBLE ARCH DOUBLE ARROWDOWN HARPO" +"ONDOWN NEUTRALDUG TIMES NIEEPING SMALLEIGHTH NOTESEMELY HEAVY EMISOFT SIGNENA" +"RIUS SIGNENOS CHRONOUERPENDICULARETRETES SIGNEVERING FACEFALLING DOTSFEMININE" +" DOTFERENCE MARKFLAG ON POSTFOLDED HANDSFORMING ARTSFOUNTAIN PENFT RERENGGANG" +"AW KAREN EUGBY FOOTBALLGEBA KAREN IGREEN DRAGONGROUND SLIDEGUARDED AREAHAH WI" +"TH DALHALF BRACKETHAND FORMAT HASIS SYMBOLHEAD-BANDAGEHIBITED SIGNHREE FINGER" +"SHYPHEN-MINUSIDENTICAL TOIGATURE SHRIILLED CIRCLEIN MIDDLE UPINDEX MIDDLEING " +"ENVELOPEING HAND FANING HITTING ING OPERATORINTEGRATION INUSOID SIGNINVERTEBR" +"ATEIRAGANA HOKAIRTY-SECOND IVE TWELFTHSKANA REPEAT KAPPA SYMBOLKHAMTI TONE-KH" +"MIMIC KHEILAM WITH YEHLARGE DOUBLELARGE TRIPLELATALIZATIONLAYING CARDSLEADING" +" EYESLEFT HARPOONLEFT POINTERLER CONSTANTLICKING LIPSLIMBS DIGITSLINGING FIRE" +"LINKING MARKLL MODIFIER-LLE PATTERN LOWER CORNERLOWERED FLAGLU PLUS ESH2LUS N" +"OTEHEADLYING SAUCERM NSHUT NYAMMADDA ABOVE MALL SECTIONMANNAZ MAN MMBELLISHME" +"NTMEDARY CAMELMEDIUM SHAFTMETA STAVROUMIDDLE PIECEMING TO MEETMONOGRAPH UKMPH" +"ASIS MARKMPTY CENTRE MUM TIMES PAN ELEMENT OFNARROW SHAFTNATURAL SIGNNCK CONS" +"TANTNEPOSTOYANNYNERSHIP SIGNNEUTRAL FACENGLE BARLINENJALA GONDI NORTHERN TSEN" +"OTCHED HOOKNOTCHED TAILNUITY SYMBOLOGOGRAM NYAJOHAZARD SIGNOID NOTEHEADOING T" +"O MEETOK HAND SIGNON US SYMBOLONISHED FACEOPENING LEFTOPLE HUGGINGOPPOSING LU" +"2OQ NSHUT YUMOTTOM HALF OOUCHES THUMBOUGHT BUBBLEOUR TWELFTHSPHEME JOINERPOET" +"RY MARK-PORT CONTROLPOUTING FACEPROTOS ICHOSPUT DRACONISQUARED ARROWQUARTER S" +"IGNQUIRREL TAILRAFFIC LIGHTRAH BEN YOMORANCHING OUTRCHAIC SAMPIRCHAIC SHRIIRE" +"FACE COLONREN CROSSINGREVERSE MARKRIAGE SYMBOLRIAL TRAMWAYRIGHT DOUBLERIGHT S" +"INGLERING OVERLAYRION CHRONONRISTMAS TREERNAM BCAD MAROLLING EYESROUNDED ZERO" +"RROUND FROM S ABOVE SIGNS SUBPUNCTISSAZ IS ISS ISECTION SIGNSH ZIDA TENUSHED " +"BARLINESHORT RIKRIKSMALL DOUBLESMALL TRIPLESMILING FACESS-THAN SIGNSTICK FIGU" +"RESUR OVER SURT ASRAARUHUMT MONGKEUAEQTE SEPARATORTEARS OF JOYTERNATE AYINTHE" +"TA SYMBOLTHIC LETTER THREE HEARTSTIC LETTER NTOP-LIGHTED TRAGRAM FOR TRIPLE D" +"ANDATRIPLE FLAMEUBSCRIPT TWOUDA DRACONISUGHT BALLOONUH PLUS GISHULL NOTEHEADU" +"ME INTEGRALUN WITH RAYSUNNER FRAME-UPPER CORNERUSEATED FACEUTH ARABIAN UTH-SL" +"AVEY KVAKRAHASANYAVER EQUAL TOVICTORY HANDVOLTAGE SIGNWDATA SQUAREWIGGLY FENC" +"EWITH SMALL VXIRON KLASMAYAN NUMERAL YMBOL BINDU YMBOL MUEANGYOD TRIANGLEYOUT" +"HFULNESS AND MACRON DECORATION I ZAPYATOY OF FLOWERS OF FORTUNE OVER BULUG OV" +"ER IDIM PLUS MASH2 PLUS NUNUZ PROPORTION S ZAPYATOY SHOE STILE TIMES ESH2 WI" +"TH CARON WITH COMMA WITH DASIA WITH FLASH WITH JACKS WITH KASRA WITH MAPIQ WI" +"TH PLATE WITH TITLO WITH TRILL WRIST FLEX-COPPER ORE-MINUS SIGN-OFF SYMBOL0 F" +"OOTSTOOL3 LONG NGGO5 LONG MBOO6 LONG NGGEAA AS-SALAAACKED COMMAACTIVE SIGNACU" +"TE-GRAVEAESCULAPIUSAESHAE NYAMAGAZ DAEG DAGONAL SIGNAILLESS PHIAMUSED FACEARA" +"M GONDI ARM SPIRAL ARMS RAISEDARPEGGIATO ASE TO THE ASURE CHESTATH PRODUCTATI" +"ON POINTATION SPACEBANK SYMBOLBELL SYMBOLBELOW RIGHTBETA SYMBOLBLACK ARROWBOT" +"TOM MARKBREVE BELOWBUMPY ABOVEBZHI -KHYILCAN RGYINGSCARET TILDECCUMULATIONCE " +"OF PIZZACELANDIC-YRCH AND LAMPCHING CHICKCLOSED JAWSCOMBINATIONCOND SCREENCON" +"TAIN AS CREDIT SIGNCROSSING BUCROSSING ENCROSSING IMCROSSING PICROSSING URCTI" +"ON MARK CTION MARK-CURVED BENDDALETH-RESHDASH SYMBOLDE KIKAKUI DENT EMBLEMDES" +"K PERSONDI ALLAAHU DIATONON DIDOACHASHMEEDOLLAR SIGNDONG TSHUGSDOUBLE AND DOU" "BLE MARKDOUBLE RINGDOUBLE SHADDUATION CAPDYO CHRONONE WITH VEILE2 TIMES ANEAV" "ER DENE EDICAL MASKEEZING FACEEN STRAIGHTENERGY WAVEENG DIGRAPHENTHESIZED EOR" "GIAN NAREPIDAUREAN ERCENT SIGNESH DIGRAPHETEI MAYEK EUNJOMNDEUQFGHANI SIGNFIN" "AL SIGMAFIRE ENGINEFOURTH ROOTGAP FILLER-GAYANUKITTAGE AT NIGHTGENTLE WINDGHA" -"IN WITH GRAMMA SIGNGRAVE-ACUTEGSUM -KHYILGUISED FACEHAGGAR YAZHHANG KHUDAMHAW" -"H HMONG HEATED FACEHEAVEN MARKHEELED SHOEHIGH STROKEHITE DRAGONHLETIC SHOEHOK" -"HLOM ON HORA DIGIT HREE BALUDAI TIMES BADI TIMES NUNIBLE-CREE YIL FRAGMENTILC" -"ROW SIGNILIQUA SIGNIMULTANEOUSIN EQUAL TOINDERGARTENINDICESIMA IPLE TONGUEIRC" -"LED TEXTIRCULAR ARCISIGOTHIC ZIVERY TRUCKIX TWELFTHSJECT SYMBOLJIHVAMULIYAJOY" -"OUS LAKEKAARA POLLUKRAINIAN IEKTIESELSKABL OF THREADL TIMES LALLACK SULFURLAC" -"KLETTER LATIN CROSSLCE TSA CANLD POLISH OLD SCRIPT XLEAF CLOVERLEEP SYMBOLLEF" -"T DOUBLELEFT SINGLELEFT SYMBOLLETION MARKLEU SATANGALINE FILLERLON SKEWED LOS" -"ED ENTRYLOSING MARKLOTI NAGRI LT OF CLOTHLTED FLOWERLTERNATE AALTERNATE YALU " -"PLUS IGILUPOVODNAYAMACING FACEMBA BAYANNAMBLER GLASSME LONG CANMED RGYINGSMFO" -"N PIPAEMMICAL HEARTMIDDLE BENTMIDDLE HOOKMIDDLE STEMMONOCULAR OMOVED BELOWMUN" -"CIA SIGNMUUSIKATOANN THE VERGENBLENDED UKND ODD SIGNND OF PIECENG LEFT LEGNIK" -"OLSBURG NITIAL IZHENSE CHEEKS NTIMONY ORENUMBER SIGNNUMBER ZERONUN HAFUKHANUS" -"VARA ONENYIS -KHYILOF ENVELOPEOF MASHFAATOHINGYA YEHOLD NUBIAN OM PUSHPIKAOMA" -"N SIYAQ ONIAN SIGN OPPOSING ENOPPOSING IMOR OPERATORORCE SYMBOLORT BARLINEOUB" -"LE ACUTEOUBLE DANDAOUNDED FACEOUTHERN TSEOVERSTRUCK PARAKALESMAPERISPOMENIPHN" -"AEK MUANPIRAL FROM PODCHASHIEMPOST OFFICEPUT MORTUUMQUERED FLAGQUIQUADRATERA " -"SOMPENG RACHMA SIGNRADITIONAL RAISED FLAGRANSMISSIONRCHAIC JNYAREAKTHROUGHRES" -"PONDS TORIGHT GUARDRIGHT HEAVYRIGHT-HAND RING LIQUIDRIPLE PRIMERISING DOTSRIT" -"ING HANDROKUTASTI ARONTHISMATAROR-BARRED ROSS ACCENTRPOON ABOVERUNNING MANRYV" -"NIA SIGNSECOND MARKSHAAYATHIYASHEQEL SIGNSIMILE SIGNSINGLE AND SMALL CLOUDSPE" -"ED TRAINSPIRATED FASSANGKIYEOKSTEAMY ROOMSTERED SIGNSTORIC SITESYMBOL VIDJSYU" -"RA SASAKT VEGETABLETA EQUAL TOTENS DIGIT TETRAFONIASTH-THALATHATHAM DIGIT THI" -"RD BLOCKTHIRDS SIGNTHREE TIMESTIEE SHEUOQTIGHT ACUTETONAL MARK TRAIGHT WAWTRE" -"SS SIGN TRESVETLAYATRIAN CAMELTRUNCATED ATUNE COOKIETWO FINGERSTY THOUSANDU-T" -"IGALARI UBLE TONGUEUETTE BREADUG RTAGS GYUISHED FACEULO TWO SUMUMAN FIGUREUNI" -"T DIGIT UNJO WYNN WUPADHMANIYAURRENT SIGNUSHING HANDUTH CORNERSUTING WHALEVA " -"V CHELNUVAMAGOMUKHAVARYS ICHOSVE OF PEACEVERTEX OF VVISARGA ONEVYKA ABOVE WAS" -"LA ABOVEWE PALAUNG WHITE JOKERWING NEEDLEWINKING EYEWITH GARDENWO TWELFTHSXAG" -"RAM FOR XESTES SIGNXI RADICAL XTINGUISHERYEORINHIEUHZERO THIRDSZIGZAG LINEZZA" -" WA JALL AND ACUTE AND ARROW AND BREVE AND KNIFE AND MOUSE DRAWINGS KABA TEN" -"U LATE FORM OF DHARMA OVER KAD5 PLUS SHU2 POVODNAYA RESUPINUS RGYA GRAM SCHRO" -"EDER THOUSANDS TIMES SHE WITH BARS WITH BASE WITH BELT WITH EGGS WITH LOW WI" -"TH PAGE WITH PLUS WITH RAIN WITH RING WITH TAIL WITH TICK-LUE KARAN-SHAPED HA" -"1 LONG MBE1 PLASTICS2 LONG MBO2 PLASTICS2 PLUS ASH3 PLASTICS4 PLASTICS5 PLAST" -"ICS6 PLASTICS7 PLASTICSA PLUS IGIA PLUS KURA TANG LAIAB2 TIMES ABATA TREEACE " -"FILLERADAK BINDIADDA WITH AEDA-PILLAAILED BIRDAKKHANGYAOALEF LAMEDALEF WITH A" -"LENT SIGNALLY MARK ANDHI MARKANGKHANKHUANGULAR TOAR ECLIPSEASPIRATIONASTERISC" -"USAT HORIZONATRICHISMAATTY WITH AUTOMOBILEAYER BEADSBA SATANGABELOW LEFTBLACK" -" FLAGBLUE HEARTBOLD SHAFTBROKEN BARBSTRUCTIONC WITH DOTCAPITAL ETCH BALLOONCH" -"AD RTAGSCHARACTER-CHECK MARKCIRCLED CACISIVENESSCOLATE BARCOMPONENT COMPONENT" -"-CROPHONIC CROSS MARKCURLED WAWCURLY HAIRCY MESSAGED KEYBOARDD WITH DOTDA PLU" -"S HADA SATANGADED PERSONDIATONIKI DIGIT ZERODIRGA MUREDOUBLE BARDUOUS TREEE P" -"LUS SUMEARLY FORMEARTH MARKEBENSTIMMEED FIGURE-ED FINGERSEDESTRIANSEDIC TONE " -"EEKING EYEEICH STARKEIGHTIETHSELT BUCKLEENETRATIONENS SYMBOLENTHUSIASMEONGCHI" -"EUMEQUIHOPPERETTA-PILLAEUTRAL YEREVERSED PEF SHE-GOATFAHRENHEITFFICULTIESFINA" -"L HETHFOR RECORDFORMATTINGFRONT WALLFTOGGOS OUG MUNDARI GAGE CLAIMGANDA MARKG" -"AS BZUNG GBAKURUNENGGING FACEGGRAVATIONGHT LIFTERGIMEL-HETHGOLUBCHIK GREE SLA" -"SHGUA PI MAOHAAPRAANA HAMZA MARKHAN DIGIT HEAVY BEATHERMOMETERHOOK ABOVEHOTIC" -" HOOKHREE ABOVEHUNGARIAN I ARCHAIONICAL TAPERIDDLE MARKIDEOGRAPH IED SHRIMPIG" -"ATING RAIGATURE OEIKRON ISONILE FOLDERINDEX BENTINDU BELOWING LARGE ING-SHIFT" -" INHERENT AINITIAL RAION BOTTLEISMUTH OREIT MBAAKETITH DIGIT IXTHS DISHJONG T" -"ILE K2 PLUS BUKA SATANGAKAI SYMBOLKINDI MVOPKRYZHEVAYALACK JOKERLANE MERGELE " -"LETTER LE-DELAYEDLEFT GUARDLEFT HEAVYLEFT LIGHTLEFT SERIFLEFT-HAND LEK ATTAK " -"LENDED YUSLET SYMBOLLGIZ EOLHXLHAG RTAGSLIGHT BEATLIGHT BULBLIMITATIONLINDRIC" -"ITYLLOW HEARTLOGICAL ORLONG FINALLONG OVER LONG TSHEGLOWER HOOKLOWER STEMLPAP" -"RAANA LTERNATE ULTIC CROSSM STALLIONMADDA MARKMALL ALEPHMBINING DOME PLUS ENM" -"EEM ABOVEMEL SYMBOLMILLE SIGNMINO TILE MONOFONIASMONOGRAM BMONOSPACE MONTH SI" -"GNMOTORCYCLEN NGGEUAETNAKE BELOWNANGMONTHONASPIRATEDNDA PA NJINDU TEMPLENGLIC" -"ANA WNGUAGE TAGNOTE WITH NTITY MARKNTO SHRINENUMBER TENOANDAKHIATOCKET SHIPOF" -" HYGIEIAOLING FACEOLON EQUALOMMA BELOWON MEDIAL OON LILITHOON SELENAOP NKAARA" -"EOPEN SHELFOROME SIGNORTHERN TAOSSED SHEIOSTAL MARKOTING STAROUND OMEGAOUR FI" -"FTHSOUT INDEX OUTER JOINOUTHERN TAPAO DIGIT PASSIMBANGPEDAL MARKPLUS BELOWPLU" -"S ERIN2PLUS NAGA POLICE CARPOUND SIGNPPING BIRDPPOPOTAMUSPRALINEAR QUISH QUAD" -"R2 PLUS SURAGGISMATARCHAIC KHARDHACANDRARECIPITATERED DRAGONRESH BELOWREVERSE" -"D IRGE CIRCLERGE SQUARERHO SYMBOLRIGHT HOOKRIGHT SIGNRING ABOVERING THUMBRKIN" -"G FACEROAD OMEGAROEZENIAN ROUND DOT ROUNDED ERRSI SYMBOLRUDIMENTA RUPEE MARKS" -"BUB -CHALSCAN LINE-SE-CREE SKSELINE ESHSGOR RTAGSSHARP SIGNSHMIRI YEHSIDEWAYS" -" ISIXTEENTHSSMILO SIGNSPACE MARKSS OF MILKSSANGARAEASSANGPIEUPST PALETTEST-FE" -"EDINGSTRAL SIGNSTROM SIGNSTRUCTION SYLLABLE MT AND BOLTTAIL GLASSTAMAN SIGNTE" -"LEVISIONTEMPLATIONTERNATIVE TESE CROSSTHAPASCAN THDAY CAKETHMIKON N TIMES SIG" -"NTING HEARTTOMIC BOMBTOP CORNERTREFACTIONTRESS AND TRETCHED CTRIPLE DOTTWENTI" -"ETHSTWO SHORTSTWO THIRDSTYPE COLONU CIN HAU U2 PLUS BAUAM TSHOOJUARDEDNESSUBL" -"E DASH UM ROTUNDAUMAN EARTHUNG KHEMA UNKIA SIGNUP HARPOONUP NEUTRALUP OR DOWN" -"UPPER HOOKUPPER STEMUR HUNDREDUR YIG MGOURIPIGMENTURVED OMETUSEL HORSEUTH OR " -"SPYVASTI SIGNVEL SLIDERVERAGE BOXVIE CAMERAVIOUS PAGEW OR MODELWHITE FLAGWHIT" -"E HAIRWHOLE NOTEWING HEARTWITH SPOONWITH STRAWWITH WINGSWO SHORTS XED BICEPSX" -"HEEJ CEEVY AND RICEYEH BARREEYMBOL AIVAYPE PIECE ZAR AMULETZEIRO SIGNZH DIGRA" -"PHZU OVER ZU AND BELT AND CURL AND TAIL APODEXIA DIVIDERS FROM BAR GARSHUNI O" -"F BLOOD OF PAPER OVER BAL OVER LUM PLUS GAL PLUS GUD PLUS KU3 PLUS LAL PLUS S" -"AG PLUS TUR PLUS ZA7 RA OR RI RICKSHAW SPARKLER STREAMER TIMES HA TIMES UD TR" -"OMIKON-AMMONIAC-KHYUD PA-LOW TONE-MID TONE-STACCATO0 LONG LE1 CHARIOT2 GARMEN" -"T247 DIPTE3 PLUS AN5 BATHTUB5 CYPERUS5 LONG JOA PLUS NAABOVE TO ACE NOTE ACIN" -"G CARADEG ADEGADMA GDANAF PERSONAFFE FACEAINTBRUSHAISED DOTAJANYALANAL RUNOUT" -"ALAYALAM ALI GALI ALPAPRANAANEROSIS ANG CITI ANGGEUAETANSKRIT SANTAYALANANTHA" -"KHATAOS ICHOSARCHAIC MARISTERA ARM CLOCKAS MEMBERATHAMASATATTACHED AVE ARROWB" -" DIGRAPHBASE UNITBEER MUGSBIAL SIGNBICYCLISTBING CANEBITE LIPSBKHASIAN BO BAI" -"MAIBO GYFU GBOTH BENTBRUL SHADBTRACTIONCANG TE-UCAPACITORCAPITAL DCAPITAL ICA" -"PITAL QCARTRIDGECHANICAL CHAVIYANICHOSEONG CLOSED PLCOIN SIGNCOMPLETEDCONJOIN" -"ERCORN FACECRESCENDOCROUCHINGCUBE ROOTCULTATIOND SALTIREDAD WITH DENT AND DEP" -"ARTUREDIAGONALSDOWN HANDDOWN SIGNDOWN STEPDOX CROSSDRAM SIGNDUS RTAGSE AT LEF" -"TEAVY DOWNEBIT SIGNED DIGIT ED PLANETEEN WITH EFAIDRIN EFORMED TEIGHT OF ELEG" -"RAPH ELLOWSHIPEMBEDDINGEMPTY SETENTRE OF ENTRY SAWER BUBBLEERCIAL ATERTY LINE" -"ES AKURU ESAME DOTETER SIGNETRASIMOUETTI BALLEURO SIGNFACING UPFEH WITH FINAL" -" MEMFINAL NGAFINAL NUNFISH TAILFLAT SIGNFOUR BENTFROM WALLG IN HOLEGITTARIUSG" -"REATER YGRIK SIGNHAIKSUKI HALF NOTEHALF SIGNHALSHELETHARACTERSHARD SIGNHEADSC" -"ARFHI SYMBOLHIMA SIMAHINOCEROSHIYYAALAAHOOK MARKHOT SASAKHREE FOR HWAZ EH EI " -"PLUS LIIA SYMBOLIALECT-P ICE CREAMIDEOGRAM IDEWAYS UIGH HAMZAIGHTH ASHIGN NUK" -"TAIGN SAFHAIGN TOMPIILE TILDEILIPPINE IN SQUAREINAL NOTEINARBORASING CARD ING" -" DOLLSING GLOVEING LANESING STONEINISHMENTINNYIIYHEIRST MARKISEN-ISENITRA SIG" -"NIVE-PULL-IVINATIONJERUSALEMK GESTUREKA- SHOG KAMEYTSA KEMPHRENGKING BOOTKSTR" -"EPTONKU RU KHAKYO TOWERL ME HANDLACKFOOT LAN SIGN LARGEMENTLEFT RINGLEFT TACK" -"LESS TREELIGHTNINGLINE FACELISSANDO LITTLE UPLIVERANCELLABLE B0LLABLE OMLOND " -"HAIRLONG TIP LOWER DOTLVIN SIGNM HE-GOATMAEMGBIEEMALL RINGMARK CIM MARK SHADM" -"BROIDERYMETOBELUSMHANCHOLLMRACHNAYAMUKPHRENGNA KHONNANCLOSING NDAILING NFORZA" -"NDONG SANDALNGER ROOTNGER SHIPNGUN SIGNNIGGAHITANIGHT OF NIHSHVASANING SIGNNO" -" TELEIANSERT AT NTERPRISENTESSENCENTRACTIONNUSVARAYANVERTED ROCCLUSIONODIASTO" -"LEOF STIMMEOKED HEADOKED TAILOKOUFISMAOM SYMBOLON GROUNDON TEUAEQONE MARK-ONE" -" THIRDONG GRAVEONGSEONG OO DENNENOP HALF OOPEN EYESOPEN JAWSORT-TWIG-ORTH WIN" -"DOTAL SIGNOURA SIGNOUT BEAMSOUT MOUTHOUTH WINDOVER GAN2OVER MUSHOW KAVYKAP DI" -"GRAPHP ELAMITEPAA-PILLAPADE SUITPANYANGGAPENT SIGNPENTASEMEPIDERY HAPLE HEART" -"POSITIONSPPOINTED PPOSITIONPROJECTORQUADCOLONQUADRANT-QUEEN OF QUSHSHAYAR PLU" -"S RARCHAIC IIRCHAIC RARDEL DKARREAK HERERED JOKERREDNE ON REFORMED RFUL FACER" -"IED FACERNEY PARARO WIDTH ROJECTIONROTATION-RPORATIONRTER MARKRTS MEDALRUM CL" -"EF-RWARI DDAS DIGRAPHSEMICOLONSEPTEMBERSHAB CEEBSIVE FACESMALL YUSSOF PASUQSP" -"IRITUS SSANGSIOSSTAL BALLSTEBASKETSTRELNAYAT OF MEATT ON BONETABE SIGNTAKHALL" -"USTANDSTILLTED PLANTTEH ABOVETIMES NA2TIMES PAPTO CORNERTONE MAI TRAIGHT UTRE" -"DECILETRESVETLOTTED STEMTUKWENTISTUTEYASATUBSTITUTEUE MAEMBAULL BLANKUMED HEA" -"DUNGLASSESUNGSEONG UPPER DOTUPTSTIMMEUR CORNERUR-DE-LISURAMAZDAAURLY LOOPURNE" -"D AYBURNED GANURUZ UR UUTRA MARKUURDHAJA UVUZHAKKUVANAGARI VELOPMENTVER LUGAL" -"VERLONG AVEUAENGAMVICE MARKVIGINTILEVINE LEAFVISARGAYAVOCALIC RVOETOCHIEVRAKH" -"IYA WASH TAILWING STARWITH FACEWORDSPACEWRINKLES WRY SMILEXCITEMENTXHAUSTIONY" -" BLOSSOMY-FOURTH Y-FOURTHSYEAR SIGNYEH ABOVEYRANISMA Z DIGRAPHZAKRYTAYAZAL SA" -"SAKZENE RINGZERO SIGNZIR SASAK ANTENNA AT DUSK CEDILLA FACING HANDLES KEMBAN" -"G LANTANG NUTILLU OF YARN ON LEFT OTTAVA OVER KG OVER MU OVER ZI PLUS DI PLU" -"S DU PLUS RU POLNAYA RASWADI SATCHEL SCOTS S SLIDING TALENTS TTUDDAG YUQ NAE-" -"CREE TH-EM DASH-KHIEUKH-PHIEUPH-X BELOW0 BRONZE1 BARLEY1 HELMET3 ARMOUR56 TUR" -"O28 KANAKOA SIGN AABAAFILIABOAFILIACKSPACEAEN NYAMAIYANNOIALLIANCEAMS HORNANC" -" SIGNANE TREEANS SIGNAPITAL FAR TSHESARCASITEARKLEAN ARRIVINGARSI YEHARTYRIA " -"AST WINDASTERN WATAKANA ATE MARKATEBOARDATH MARKAVY BANDAY-NIGHTAZHAAKKUBACKW" -"ARDBASSINETBATBEIT BER POLEBEVERAGEBIEE FONBILLIONSBINOVILEBLE SIGNBLED CARBL" -"INEAR BOL SIGNBOT FACEBOX TRAYBRA FACEBUNDANCEC SIYAQ CABLEWAYCAL DISCCANDICU" -"SCASSETTECEILING CER BALLCHATTAWACHINESE CK CHARTCLIMBINGCOMBINEDCOUNCIL COUN" -"TERSCURLICUECURSIVE D BUBBLED CROSS DAMMATANDANTAJA DDY BEARDIAMONDSDIFONIASD" -"IM GUNUDIT CARDDOCUMENTDS-CREE DUSHENNADVANTAGEDVISVARAE OF POOEBEEFILIECH YI" -"WNED BRICKEGORIAN EK ONKARELEPHANTEN NTEUMENICIAN EOUT BOXER TRUTHERAL URNERD" -"IGRISEREVODKAESH LOOPEST WINDET SHOESETA SIGNETRASEMEEUFEUAETEVEN OF EVERANCE" -"EXCHANGEFEBRUARYFILE BOXFINAL THFLOURISHFOR STOPFRAKTUR FRICAN DGARITIC GBASI" -"NNAGENITIVEGERPRINTGLASNAYAGORAZDO GREAT SAHAGALL HHALF GURHAN-AKATHARBAHAYHA" -"RMONICHESPIAN HOP BELLHREE OF I SHAKTIICHAEAN IGHT ARMIGMOID SIMANSIS INAGARI" -" INDUCTORING BELLING BOWLING ROD IRD MARKIS FORM IS WHEELIS-PILLAITA MFONJACK" -" OF JAVIYANIJUNCTIONKAIYARAAKASRATANKATAKANAL POLISHL-LAKUNALA LENGALATION XL" -"EANING LESS SHALESSER YLF RING LFWIDTH LKULIZMYLOCATIVELONG BARLONG S TLORRAI" -"NELOW STOPLOZHITIELTRY LEGLUB SUITM ALLAAHMALL AXEMANDARINMANGALAMMARRATANME " -"BADGEME WITH MEM-QOPHMIONIAN MMATION MON TIMEMY HOUSEN-JOINERNA METEKNAMENNY " -"NAVIYANINCE SIGNNED FOODNEIFORM NG RTAGSNI ABOVENINE OF NITIAL ZNO SLASHNO TH" -"UMBNOTE PADNOVEMBERNRES TOSOBOOFILIOCALIC MOCK SALTOCUS OF ODESTONEOHM SIGNOL" -"LOWINGOM NTEUMOMANIAN OMMA BARON CROSSONE FOR OO TYPE OREHEAD ORM FEEDOT MBUA" -"EOTIFIED OVER BU OVER GA2OVER GI4OVER SAGOVER SHEOVER TIROVERRIDEPAIRTHRAPAKP" -"AK EPALOCHKAPARATED PAVIYANIPENTAGONPRECEDESPROSTAYAPUB DAWBPUN IYEKQAIRTHRAQ" -"UINTILERAMMA GGRASMIAN RAT RAI RAUGHTS RDEL NAGREATNESSRED HAIRREE MARKRESVET" -"LYRILLIONSRIYOOSANROSHTHI ROSSED ORSE DUNGS OCHKOMSALT OF SALTIRESSANYAKA SCR" -"IPT GSE WEDGESENTAGONSEXTANT-SHKIR KASHOE JOTSHORT ERSIFISTONSIGN LAESIGN PVO" -"SIX DOTSSMA SIGNSNA LDANSOFTNESSSPERSIONSQUEEZEDSUCCEEDSSUPERSETSWIMMINGT NGG" -"EETTAALUJA TAI LUE TAR EYESTER FACETHIOPIC THOLHOMATHOSCOPETICK IN TIRRUP RTI" -"SMOS ETO-LEFT TOWARDS TRI DISHTRICOLONTTENTIONTTO MARKTURNED MUAREG YAUATRILL" -"OUBJOINERUDAWADI UKEUTNDAULLS LEGUNDERDOTUNDERTIEUNG DASHUP TRUCKV OVER MVE S" -"ASAKVERGENCEVESSEL BVOLUTIONVOMITINGW PRINTSWASH KAFWBOY HATWN HEARTWO ABOVEW" -"ON SIGNWRINKLEDWRITING XCELLENTY BEETLEY POPPERYAMAKKANYBEYFILIYENISEI YER YA" -"GHYESIEUNGYIDDISH YPORROONYRILLIC ZAKRYTOEZWARAKAYZWJ THAJ APLOUN BUTTON CER-" -"WA FLEXUS ISLAND KEFULA LONSUM MAELEE MENDUT MINUS MUOMAE MUQDAM OCLOCK OPEN" -"-O PLOPHU RAMBAT SHAKER SLOWLY STRIDE TEDUNG WAAJIB WOLOSO-CREE R-KIYEOK-MACR" -"ON-MU-MO--SHIFT--THIRTY-TIKEUT-WELSH 0 SPEAR0 WHEAT1 ARROW2 OLIVE2 WOMAN26 EY" -"YY3 AREPA3 EIGHT3 MONTH3 OMEGA3 SPICE3 SWORD3 WHEEL5 NGGEE6 NGGOO7 NGGUA7 NGU" -"AN9 CLOTH9 NGGAAA -PHRUA NAME ACTER TAD NECKAELAENGAETMEUNAHAPAKHALESMA ALLOT" -" XALTILLOAM ALEFAN MARKAND ENDANDERERANGKUOQANGLED ANGLONGANGOLATAPEZIUMARDNE" -"SSARRED BARRED OAS SIGNASHTRA ASUTORUATAEAN ATH OF AU MARKAULDRONAUNTLETAXIMA" -"TAAY SIGNBAIRKANBAMBOOSBARREKHBERGINEBERRIESBIG YUSBLACHKOBOARDERBOOSTERBORZA" -"YABOURINGBREVIS BUFFALOBULANCECABINETCAP TENCAYANNACELSIUSCHEINAPCHIEUCHCK LI" -"MECLEAVERCLOSE ECLOTHESCOMING CONTACTCOPTIC CRACKERD MADDADA FACEDANCINGDANES" -"E DAYANNADEAVOURDHALATHDIARGONDIPLOUNDISIMOUDOFONONDRIL BUDU NJAADYNAMICE DRI" -"NKE GLASSEAD OREEAVY YAECEMBERED RICEEFT ARMEIGHT KEL PUMPEN LEAFENSHUETER TH" -"ANERNIN AESTIVALETNAHTAEULEUNGF DAVIDF SASAKFATIGUEFAYANNAFINAGH FINAL YFLUEN" -"CEFORKINGGAYANNAGENERALGHEUGHEGLAGOLIGO-KARTGOLIAN GRADUALHAARKAAHALANTAHANGU" -"L HAYANNAHEADINGHEXAGONHI SIGNHIUCHUSHODDONDHYAAUSHI NTEUMI RTAGSIANGQI IBIFI" -"LIIC WANDICOPTERICYCLESIFIED EIKHAHITIL DRUMILLEANNIMILAR INNABARISIBLE ITALI" -"C ITON RAIVE OF JAIN OMJARATI JAYANNAJECTIVEJERAN JJIBWAY KARO BAKAYANNAKEUAE" -"RIKHA YATKKURUNIKOMBUVAKOQNDONKORONISKPAK WAKUTAARUKYLISMAL SEGNOLAGIOS LAK-0" -"50LAMITE LASHES LAYANNALE LEAFLEK TOOLENGTH-LEUT KALEYBALLLF FACELIGHT XLJUDI" -"JELLYFISHLOSION LYGISMAMAAYYAAMAI SATMANCHU MARCATOMASSAGEMBOL B0MEETORUMERIC" -"ASMINGKALMINIMA MONSTERMRACHNYMUNGKAHNANCIALNAYANNANEQUDAANESTED NG MASKNIKAH" -"ITNJAEMLINUMBERSOCTAGONOCTANT-OCTOBEROF SOAPOFFICEROGDIAN OKRYTIEOLAPUK OMERA" -"NGON FACEONG UEXONGONANONTIEENOP MARKORCULUSOREVMA ORKHON ORTIETHOT NGOMOT RE" -"PHOUR OF OUT HUBOUTWARDOVER ANOVER DUOW ALEFOWILO SOX BACKOX LINEP PIEETPALLA" -"WAPANESE PANSIOSPARERENPAYANNAPAYEROKPECTIVEPEGERMAPENGKALPERVISEPHUTHAOPLOYA" -"N POMOFO POVODNYPPROACHPRENKHAPSTICKSPTHAHA PURPLE PUSHPINQUARIUSQUEEZE R2 GU" -"NURA REPARAKHANGRANGKEPRARIETYRAYANNARD FACERDO RJEREATHY REREKANRESILLORIPPL" -"E RISIMOUROGRESSROKEN LRRECTUSRTHIAN RY FACES-SAJDASA VAH SAMPHAOSANDHI SANGA" -"N SAYANNASCOOTERSERPINASEXTILESHAKINGSHIFT TSHORT ASIDDHAMSIGN UDSOLDIERSOV R" -"OGSPRINGSST TUBESTERINGSUKUUDOSYNAGMAT ASHESTA MARKTAISYOUTALL AATASHEELTAYAN" -"NATCHFORKTHALIYATHESEOSTHIEUTHTHKUQI TIKRAMATIVATE TORNADOTRAINERTROLLEYTRYAS" -"KATSECHKATTHACANTTILIK TYSCAPEUBUFILIUKKAKHAUM IYEKUN MEUTUP HANDUP MARKUP SI" -"GNUP STEPUP TACKURATIONURFACE URGLASSUSSYERUUT TIMEUYGHUR VANESE VAPOURSVAV Y" -"ODVAYANNAVE DOT VEMENT-VEW NOWVILIK BVILLAINVOICINGVOWEL KVYSOKO WAZ EOHWDRIV" -"ERWIFRUITWIGNYANWO FOR WO MARKWO WAENWORSHIPXOPHONEY GREENY HEARTYA LAMPYAH L" -"I YANMAR YAYANNAYELLOW YMAIC LYNAMIC ZQAPHA AGUNG DIPLI EPOCH EQUID FACE- GA" -"TE KAPAL LELET LONGA MELIK MURDA QATAN SPLIT TIKHY-HIDET-HIEUH-IEUNG-PIEUP0 " -"NGGI0 NGGO0 NYON0 NYUN00-1021 GBOO1 GOLD1 HORN1 NDEE1 WINE2 KPOO2 NGGU3 GBEE3" -" HEEI3 NGGA4 DART4 DEER4 KPEE4 MUAN4 NGEN4 NJOO4 NYIN5 MERI5 WOOL6 GUEI6 HUAN" -"6 NGGE6 TREE7 GUAN7 KAPO7 MBEE7 MBUU7 NDOO7 NGON8 HOOU8 MBEE8 NYAN8 NYEN9 MUE" -"N9 NJEEA HAAMA-KARAAASHAEACINTHAEMMAEAESURAAFFIX AGOGUEAGRANTAILUREAJANI AK-6" -"68AKABATANCHORANGKATANIMALANUARYAPISMAAPLI MAPYRUSARADDOARBUTAARSEOSASHGABASS" -"INGATTERYATTIC AUTUMNBAFILIBANWA BEFILIBETAN BGBIEEBISCUSBISHOPBLINK BOFILIBO" -"WTIEBUFFERBURGERC CLEFCALATECASTLECATAWACEVITUCHADINCHAMKOCHEIKHCHEMA CHESS C" -"HIKI CHIRETCHO CHCHURCHCKNESSCLOSETCODILECRAYONCREASECUMBERCUPPEDD DISKDAGGER" -"DE DOGDERMA DGEHOGDICINEDIESISDOKMAIDUCEUSDVANCEE WAVEEAHMUKED CAPED ICEEENTH" -"-EIGHTYELLITEEMASTIEMPUS EN GHEENIKI ENTIMAEPACT ERMATAERTUREESTAN ET KUTEU M" -"BUEUAENAEUNYAMEUREUTEVENTHEXHALEEXISTSEYANNAF CLEFF MAREFAMILYFATHA FF OF FOR" -"MEEFORTISFRAMESGANGIAGBASAQGEADALGEDOLAGGLINGGHAMALGHETTIGHEUAEGLAZ HGNANT GO" -" NGUGOBLINGORGONGRASP GS-PA GURAMUHALF HHAM AIHAMEDHHAMILOHASHKAHE MGOHEISEIH" -"ERMESHEUAEPHIBIT HIMAHUHINGE HIVETEHO HOIHORT IHUMBS HUR PAI HOOKI MAIMIASMA " -"IB YAMIDE ESIEVAN IGGLESILBOATILLAGEIN YEHINAGMAINCUNXINDHI INGAATINHALEINPUT" -"SINSHIPINWARDIRINGUISSANTISSHARISSIMOITABLEITHER ITULUMIX OF IXTY PIYANNAKAYA" -"H KE PHOKEYCAPKILLERKLITONKRISISKTIKO KUSHU2KY WAYLAFRONLAMADHLAMEDHLANDERLAS" -"TONLD MAPLEVEL-LIGIONLIGON LISHA LITIKILLIPOPLOACHALONG EM BOARM BULLMADDAHMA" -"DR MMALL FMANYA ME DIEMECHIKMPLINGMUKHI N DASHN YANGN-NISFNACLESNCH FRNDA TAN" -"EUME NGBAT NGGONGNIRUGUNISTERNIZKO NKNOWNNOKHUKNOR BUNOWMANNOZHEKNSANAQNSUZ A" -"NTEVMANTIIMUNTOGENOBELOSOCENCEOCIETYODHADHOFOUNDOGONEKOITIC ON KEYONOCLEOOMUU" -"TOPEN DOPEN POPITSAOSETTEOW TIEPALUTAPBOARDPEAKS PECIALPENCILPEPPERPICKETPIDE" -"R PIRIT POKOJIPOMMEEPTACLEPUFFEDPWATCHQAMATSQETANARAAKANRACINGRAKLITRAVEL-RBI" -"TSAREMEDYRENGTHRICORNRIISAPRISEMERKAANUROCKETRSENICRSHANARSIAN S SHOES TENTSA" -"ADIYSHAYIMSHMAAMSICKLESIXTHSSKAPI SOUNAPSPADESSPATHISPITALSSLESSSTANCESTANCYS" -"TLERSSTOLI STROFOSUCKEDSURANGSURED SWORDSSYNAFISYOUWAT NJAQTAIKHUTAMINGTARGET" -"TAU ROTAUROSTE TSETE USETERON TEUWENTHAKKUTIKENOTIMATETIRYAKTOPBARTRAPLITRIKE" -" TURBANTUXEDOU MBITUAEQTUUANGXIUBLE XUCIBLEUDARKAUGGAGEUNGAAMUP BOWUPNAYAURNA" -"MAUUMISHUYANNAUZEIROVERTKAVILIANVIRIAMWBERRYWEORTHWINDOWWN BOWWN BOXWO OF WOR" -"KERWRENCHX FACEXIMIZEXO NEOYAKASHYIN-DOYOMBO YRENE YSTICKZHITSA AMPS CAPO CHW" -"V COAT DEKA FUJI GORA HAA ICON ILUT JERA KAWI LACA MOOD SARI TABS TELU-ALAF-" -"BEAM-RING-SIOS0 BEE0 DOO0 DWO0 GBO0 GEE0 HAN0 HEE0 JOO0 MAN0 OIL0-VAS1 DWE1 F" -"AN1 PEE1 TEE1 TWO1 WVI1 YOO1-VAS18CFF2 HEN2 HOO2 KPA2 KPI2 MBA2 MBE2 MBO2 MBU" -"2 NJA2 NJU2 POO2 PTE2 SEE2-VAS3 BOO3 FOO3 HIN3 HON3 NDI3 RA33 VEE3 WEI3-VAS32" -" JE4 ABB4 GBI4 KPU4 LEE4 LOO4 MBO4 MON4 NDO4 TOO4 VOO4 WOO4 WUI4-VAS5 KEE5 MB" -"I5 NDU5-VAS6 GBA6 KOO6 RA26 SIA6 SOO6 TA26 WEE6-VAS7 FUA7 GBE7 HUN7 JEE7 MIN7" -" NEN7 NIN7 TWE7-VAS8 FEE8 GBU8 KPE8 KPO8 MAN8 NAN8 NWA8 RO28-VAS9 DEE9 KUA9 M" -"EN9 MUN9 NDA9 NDE9 NON9 NUN9 PU29 WVA9 WVE9 YEE9-VASA UNAA YUEAADHUAAMAEACHKA" -"ADDERADULTAEMAEAEPENAEREEAGMA ALGARALLEYALLI ALOG ALPHAAMBDAAMEKHANGELANNONAP" -"PLEAR AEARERUARTARASAR ASEIAASPERATAF ATIYAAUTHSAVROSAWAY BAARUBACUSBALAGBASA" -" BASSABAWAKBEITHBENDEBHADHBHETHBISAHBLAKOBOOTSBORZYBREW BSTERCAANGCAKESCAKRAC" -"ALYACANUSCAUDACAUSECCEPTCCOLICECAKCECEKCEREKCHADACHERYCHESTCHIMECHOOICHOOLCHU" -"LACHUTECIEUCCKAGECKTIECLIFFCLONECLUBSCROWNCTRICCUBEDDAIC DATUSDBOATDELTADENCE" -"DEPTHDESTYDHAM DKAR DLINGDOTS-DSMANDWICHE GEEEAGLEEATH EBALLEESHIEGALIEGIONEG" -"L HEIDONEISMAEKEETEMAKEEMBICEMLJAENANOENDEPENENGENJETEO-EUEOPLEERINEERKHAESHE" -"3ESO EET TUEUAEMEURAEEYBUSEYYALF COWF EWEF SOWFAAFUFAIHUFEARNFLAGSFLICTFLUTEF" -"ORCEFSAAQGADOLGALGAGAMALGAMANGAZE-GEAN GESH2GHNUTGHULUGOGI GORGIGULUSGURE GVA" -"NGHAALUHADDAHAINUHALA HALQAHAMSOHANNAHASE-HATHIHAYINHELAPHETHEHIMELHIRIQHISTI" -"HIUTHHOLAMHOLARHOTELHROOMHUMP HUTA I KOII-RESIARDSIAUDAICHONICRONIHVUSIKARAIK" -"URUILVERIMGBAIMMA IMMERINGSAINNA INTHUIPEHAIPINGIRACYISTLEITHI ITUALJANG JERV" -"IJUDGEJUDULJUEUIK-020KARORKBALLKERETKESH2KHAPHKNOBSKO LAKTOP KURONKUSMAKWAENL" -" NETL-JUZLABATLABORLAGUSLAMDALATIKLAYARLEASELENISLOAN LOBE LOMKALOOP LOURELUR" -"ALLWAY M RAMMAAEHMAALAMACUSMADYAMAI KMAIZEMALONMAQAFMEEMUMEIZIMELONMENOEMEPET" -"METEGMETRYMI ROMIEUMMINDUMINGOMISRAMMOTHMPAREMROCKMSHAEMUCH MUHORMUOY NA PONA" -"BLANADA NASHINCORANEGARNEMKANENOENGENTNGMANNGUE NIEUNNINTHNIS FNNAN NSIEENSUA" -"ENSYONNTHA NTXIVNUENGNZEUMO ANGO BOXO KAIO PLAO RUAOBYLAOCADOOJKI OKARAOKEE O" -"LD XOMBIEOMMAEOPLETOQPENORUTOOTERIOTHALOTTHIOUNCEPASEQPATAKPCHA PEAN PEITHPEN" -" OPEN-PPEPETPI ROPITERPLHAUPLUTAPLUTOPMUNKPOLI PONSEPPAGEPSILIPTUNEQAAFUQUIRY" -"R-RUBRACHYRAIDARASHARCHIDRDIONREGIAREIWARELA RELAAREPHARICEMRIEENRIEULRILLARI" -"TSIROGOMRONOSROTCHROWN RRITORUDAARUHUARULAIRUMP-RUSH RYASOSADHESAKINSAKTASALA" -"DSATA SAUILSEGOLSENTOSHANGSHAR2SHARASHARUSHIMASHOOKSHTINSICLESILA3SKATESOLVES" -"PINESTARTSTEP-STNUTSTORMSUKUNSURYASUTUHTEGEHTENSETHINGTIGMATINNETIPPITKAANTMA" -"AUTON ATONPITORCHTORSOTOYORTRACKTRAIFTRIOLTSADITSEEBTSERETTOCKTTORUTUEUMTURN " -"TUUMUU U UUBITOUBURUUBUTSUDAATUGUSTUKARAUMMERUNGBAUNITYUNOO UQUETURINEURITYUR" -"TLEUTEUXUTIESUTTHIUWAR VAAVUVARCAVATORVIET VITAEVRIDOVZMETWAAVUWAQFAWATTOWBOA" -"TWFISHWIDE WINDUWINJAWISADWU318WUAETXING XTRA-XW XWXYOOJYAMOKYECEKYENAPYIZETY" -"STERYURIIZHAINZIDI ZILDEZSEKAZYGOS C D OHM R S WEB-RAY-UM 0 BI0 HO0 JU0 KO0 N" -"I0 PU0 RA0 SA0 WI0 YE0 ZO028B1 DA1 DO1 DU1 GA1 HA1 IN1 KI1 KU1 PO1 QI1 RA1 SA" -"1 SI1 SU1 VU1 YI13582 BU2 KA2 L22 NO2 PE2 QO2 RO2 SO2 VI2 YA3 A33 EE3 JE3 JO3" -" KU3 L33 LE3 ME3 MI3 MU3 PA3 RI3 TA3 YU4 DO4 FI4 KE4 L44 NE4 TE4 TU4 WA4 WI4 " -"ZE5 A25 AN5 AU5 BB5 DE5 FA5 FE5 GI5 IN5 JU5 LI5 MO5 NU5 OO5 TE5 TO5 VA5 VE5 W" -"A5 WE6 DI6 FU6 HE6 HI6 JE6 JO6 L66 LA6 NA6 PO6 QA6 RU6 SE6 WU7 BE7 DA7 DD7 EI" -"7 JA7 KI7 LU7 RE7 TI7 VO7 ZA8 BO8 DU8 EN8 FO8 GU8 JI8 KO8 PI8 QE8 SU8 WE9 JA9" -" PA9 PI9 SE9 SI9 SO9 TA9 TO9 TUA IEA-HAAACUAFELAHADAILMALAIALDAALTAAMLAAN XAN" -"AEAPAQAPONARA3ARGIAROOARUMATIMATYAAULABALDBASHBAYIBBITBERDBETHBOOKBOREBUNGBUO" -"YCANOCASECAYNCHAUCOONCORECRETCWAADAGSDAIRDDAKDDHIDEADDGERDIM2DZHAEAAEEEEEEENU" -"EHEHEIRTEIWSEZZOFAIBFASTFEEMFETHFEUQFFINFIRIFITAFROGFWAAGAMEGAMLGEDEGGWSGHOMG" -"HWAGIBAGIDAGIEAGIR2GOALGORTGROMGRU GUINHAVEHAYNHEEPHEROHERUHEYNHEYSHEYTHHWAHI" -"D HIINHMI HOM HOPHHSDAHSHUHUB2HUENHUVAHWAAIANOIARAIEN IFATIGERIITOIK HIKIRILU" -"YIMARINORINY IODEIPODIQAAISI JEONJIIMJOT JYAHKAAFKAD3KAKOKALIKAPHKCETKEUPKICK" -"KINIKMA KOBAKOETKOKEKOKOKWAALFERLFIELIFULIUMLIWNLOLLLOVOLUISLUMNMARUMARYMESOM" -"FAAMIIMMIINMLYAMMU2MPETMUASMUINMVATMWAANAAUNAG NAM2NANANCERNDAPNDUENEMANEO NG" -"A2NHAYNJAMNNNANOWCNPEANRUANSHENSUBNTAANTOCNUNGNUUNNWAAO-YOOBATOBROODLEOFUMOJI" -" OJODONA ONUTOONEOOTHOPODOPUSORAXORIIOUBTOXIAPARDPAWNPEEIPEEPPEUXPHABPHINPLUG" -"PLUMPOLOPPHOPRILQASRQEF QHAUQOPARAFEREIARGU2RIFYROA ROARROOKROUTRPSERROIRSO-R" -"T TRUISRUKURUNARUSISA-ISAATSEENSEEVSELFSEYESHTASHYASHYESIKISINKSLURSOKASONGSU" -"ABTFONTUKITURUTZELUGU UHURULU UNAVUON URUSUSA UTAEUTANUTTYVEDEVEUMVEUXVEYZVID" -"AVIYOVOS VUEQWAAKWAETWAHAWAIRWAW WDERWULUXEIAXEYNYAWNYEUXYUDHYUKUYUPIYWAAZATA" -"ZAYNZELOZETAZIETZIZ2ZZY 0 E0 U0-004A0B91 X1-01-212114D15518D2-020B2532DD3 D3 " -"I3-030531C4 E4-05 U5-05505575B66-06206D77 O72C8 A8 I8F09819E3A7AAEFAL2AUJAWXA" -"ZUB57B89BIBBXGCA9CAHCAICIGCWICYAD42D70DA2DE6DIBDJADUBDZEE80EEGEIEEYKEZHF14F8C" -"FAJFLYFOMFUEHAQHOJHOXI-IIMNIWRJAHJEUJHAK00KAQKUEKUGLFALK LULNIIOAYOIXPOQPUQQ0" -"0QARQIFQIGQOFQOTQUFSIISUUTJETUJUDYUEZUMXUOPUQAVAUVNOVOKVOYVUUWAUWOQX00XAUXEHX" -"WVY00YOTZJEZOOZORZUPZZE16171D1F343638394048494B4E647890929599C0D0G0G3G9LXR7VD" -"VWZ0"; +"IN WITH GILE SYMBOLGRAMMA SIGNGRAVE-ACUTEGSUM -KHYILGUISED FACEHAGGAR YAZHHAN" +"G KHUDAMHAWH HMONG HEATED FACEHEAVEN MARKHEELED SHOEHIGH STROKEHITE DRAGONHLE" +"TIC SHOEHOKHLOM ON HORA DIGIT HREE BALUDAI TIMES BADI TIMES NUNIBLE-CREE YIL " +"FRAGMENTILCROW SIGNILIQUA SIGNIMULTANEOUSIN EQUAL TOINDERGARTENINDICESIMA IPL" +"E TONGUEIRCLED TEXTIRCULAR ARCISIGOTHIC ZIVERY TRUCKIX TWELFTHSJECT SYMBOLJIH" +"VAMULIYAJOYOUS LAKEKAARA POLLUKRAINIAN IEKTIESELSKABL OF THREADL TIMES LALLAC" +"K SULFURLACKLETTER LATIN CROSSLCE TSA CANLD POLISH OLD SCRIPT XLEAF CLOVERLEE" +"P SYMBOLLEFT DOUBLELEFT SINGLELEFT SYMBOLLETION MARKLEU SATANGALINE FILLERLON" +" SKEWED LOSED ENTRYLOSING MARKLOTI NAGRI LT OF CLOTHLTED FLOWERLTERNATE AALTE" +"RNATE YALU PLUS IGILUPOVODNAYAMACING FACEMBA BAYANNAMBLER GLASSME LONG CANMED" +" RGYINGSMFON PIPAEMMICAL HEARTMIDDLE BENTMIDDLE HOOKMIDDLE STEMMONOCULAR OMOV" +"ED BELOWMUNCIA SIGNMUUSIKATOANN THE VERGENBLENDED UKND ODD SIGNND OF PIECENES" +"E SMALL NG LEFT LEGNIKOLSBURG NITIAL IZHENSE CHEEKS NTIMONY ORENUMBER SIGNNUM" +"BER ZERONUN HAFUKHANUSVARA ONENYIS -KHYILOF ENVELOPEOF MASHFAATOHINGYA YEHOLD" +" NUBIAN OM PUSHPIKAOMAN SIYAQ ONIAN SIGN OPPOSING ENOPPOSING IMOR OPERATORORC" +"E SYMBOLORT BARLINEOUBLE ACUTEOUBLE DANDAOUNDED FACEOUTHERN TSEOVERSTRUCK PAR" +"AKALESMAPERISPOMENIPHNAEK MUANPIRAL FROM PODCHASHIEMPOST OFFICEPUT MORTUUMQUA" +"LS SIGN QUERED FLAGQUIQUADRATERA SOMPENG RACHMA SIGNRAISED FLAGRANSMISSIONRCH" +"AIC JNYAREAKTHROUGHRESPONDS TORIGHT GUARDRIGHT HEAVYRIGHT-HAND RING LIQUIDRIP" +"LE PRIMERISING DOTSRITING HANDROKUTASTI ARONTHISMATAROR-BARRED ROSS ACCENTRUN" +"NING MANRYVNIA SIGNSECOND MARKSHAAYATHIYASHEQEL SIGNSIMILE SIGNSINGLE AND SMA" +"LL CLOUDSPEED TRAINSPIRATED FASSANGKIYEOKSTEAMY ROOMSTERED SIGNSTORIC SITESYM" +"BOL VIDJSYURA SASAKT VEGETABLETA EQUAL TOTAAALAA ANHTENS DIGIT TETRAFONIASTH-" +"THALATHATHAM DIGIT THIRD BLOCKTHIRDS SIGNTHREE TIMESTIEE SHEUOQTIGHT ACUTETON" +"AL MARK TORTED FACETRAIGHT WAWTRESS SIGN TRESVETLAYATRIAN CAMELTRUNCATED ATWO" +" FINGERSTY THOUSANDU ALAYHI WAU-TIGALARI UBLE TONGUEUETTE BREADUG RTAGS GYUIS" +"HED FACEULO TWO SUMUMAN FIGUREUNIT DIGIT UNJO WYNN WUPADHMANIYAURRENT SIGNUSH" +"ING HANDUTH CORNERSUTING WHALEVA V CHELNUVAMAGOMUKHAVARYS ICHOSVE OF PEACEVER" +"TEX OF VVISARGA ONEVYKA ABOVE WASLA ABOVEWE PALAUNG WHITE JOKERWING NEEDLEWIN" +"KING EYEWITH GARDENWO TWELFTHSXAGRAM FOR XESTES SIGNXI RADICAL XTINGUISHERYEO" +"RINHIEUHZERO THIRDSZIGZAG LINEZZA WA JALL AND ACUTE AND ARROW AND BREVE AND K" +"NIFE AND MOUSE DRAWINGS KABA TENU LATE FORM OF DHARMA OVER KAD5 PLUS SHU2 PO" +"VODNAYA RESUPINUS RGYA GRAM SCHROEDER THOUSANDS TIMES SHE WITH BARS WITH BASE" +" WITH BELT WITH EGGS WITH LOW WITH PAGE WITH PLUS WITH RAIN WITH RING WITH T" +"AIL WITH TICK-LUE KARAN-SHAPED HA1 LONG MBE1 PLASTICS2 LONG MBO2 PLASTICS2 PL" +"US ASH3 PLASTICS4 PLASTICS5 PLASTICS6 PLASTICS7 PLASTICSA PLUS IGIA PLUS KURA" +" TANG LAIAB2 TIMES ABATA TREEACE FILLERADAK BINDIADDA WITH AEDA-PILLAAILED BI" +"RDAKKHANGYAOALEF LAMEDALEF WITH ALENT SIGNALLY MARK ANDHI MARKANGKHANKHUANGUL" +"AR TOAR ECLIPSEASPIRATIONASTERISCUSAT HORIZONATRICHISMAATTY WITH AUTOMOBILEAY" +"ER BEADSBA SATANGABELOW LEFTBLACK FLAGBLUE HEARTBOLD SHAFTBROKEN BARBSTRUCTIO" +"NC WITH DOTCAPITAL ETCH BALLOONCHAD RTAGSCHARACTER-CHECK MARKCIRCLED CACISIVE" +"NESSCOLATE BARCOMPONENT COMPONENT-CROPHONIC CROSS MARKCURLED WAWCURLY HAIRCY " +"MESSAGED KEYBOARDD WITH DOTDA PLUS HADA SATANGADED PERSONDIATONIKI DIGIT ZERO" +"DIRGA MUREDOUBLE BARDUOUS TREEE PLUS SUMEARLY FORMEARTH MARKEBENSTIMMEED FIGU" +"RE-ED FINGERSEDESTRIANSEDIC TONE EEKING EYEEICH STARKEIGHTIETHSELT BUCKLEENET" +"RATIONENS SYMBOLENTHUSIASMEONGCHIEUMEQUIHOPPERETTA-PILLAEUTRAL YEREVERSED PEF" +" SHE-GOATFAHRENHEITFFICULTIESFINAL HETHFOR RECORDFORMATTINGFRONT WALLFTOGGOS " +"OUG MUNDARI GAGE CLAIMGANDA MARKGAS BZUNG GBAKURUNENGGING FACEGGRAVATIONGHT L" +"IFTERGIMEL-HETHGOLUBCHIK GREE SLASHGUA PI MAOHAAPRAANA HAMZA MARKHAN DIGIT HE" +"AVY BEATHERMOMETERHOOK ABOVEHOTIC HOOKHREE ABOVEHUNGARIAN I ARCHAIONICAL TAPE" +"RIDDLE MARKIDEOGRAPH IED SHRIMPIGATING RAIGATURE OEIKRON ISONILE FOLDERINDEX " +"BENTINDU BELOWING LARGE ING-SHIFT INHERENT AINITIAL RAINUS SIGN ION BOTTLEISM" +"UTH OREIT MBAAKETITH DIGIT IXTHS DISHJALALOUHOUJONG TILE K2 PLUS BUKA SATANGA" +"KAI SYMBOLKINDI MVOPKRYZHEVAYALACK JOKERLANE MERGELE LETTER LE-DELAYEDLEFT GU" +"ARDLEFT HEAVYLEFT LIGHTLEFT SERIFLEFT-HAND LEK ATTAK LENDED YUSLET SYMBOLLGIZ" +" EOLHXLHAG RTAGSLIGHT BEATLIGHT BULBLIMITATIONLINDRICITYLLOW HEARTLOGICAL ORL" +"ONG FINALLONG OVER LONG SIKI LONG TSHEGLOWER HOOKLOWER STEMLPAPRAANA LTERNATE" +" ULTIC CROSSM STALLIONMADDA MARKMALL ALEPHMBINING DOME PLUS ENMEEM ABOVEMEL S" +"YMBOLMILLE SIGNMINO TILE MONOFONIASMONOGRAM BMONOSPACE MONTH SIGNMOTORCYCLEN " +"NGGEUAETNAKE BELOWNANGMONTHONASPIRATEDNDA PA NJINDU TEMPLENGLICANA WNOTE WITH" +" NTITY MARKNTO SHRINENUMBER TENOANDAKHIATOCKET SHIPOF HYGIEIAOLING FACEOLON E" +"QUALOMMA BELOWON MEDIAL OON LILITHOON SELENAOP NKAARAEOPEN SHELFOROME SIGNORT" +"HERN TAOSSED SHEIOSTAL MARKOTING STAROUND OMEGAOUR FIFTHSOUT INDEX OUTER JOIN" +"OUTHERN TAPAO DIGIT PASSIMBANGPEDAL MARKPLUS BELOWPLUS ERIN2PLUS NAGA POLICE " +"CARPOUND SIGNPPING BIRDPPOPOTAMUSPRALINEAR QUISH QUADR2 PLUS SURAGGISMATARCHA" +"IC KHARDHACANDRARECIPITATERED DRAGONRESH BELOWREVERSED IRGE CIRCLERGE SQUARER" +"HO SYMBOLRIGHT HOOKRIGHT SIGNRING ABOVERING THUMBRKING FACEROAD OMEGAROEZENIA" +"N ROUND DOT ROUNDED ERRSI SYMBOLRUDIMENTA RUPEE MARKSBUB -CHALSCAN LINE-SE-CR" +"EE SKSELINE ESHSGOR RTAGSSHARP SIGNSHMIRI YEHSIDEWAYS ISIXTEENTHSSMILO SIGNSP" +"ACE MARKSS OF MILKSSANGARAEASSANGPIEUPST PALETTEST-FEEDINGSTRAL SIGNSTROM SIG" +"NSTRUCTION SYLLABLE MT AND BOLTTAIL GLASSTAMAN SIGNTELEVISIONTEMPLATIONTERNAT" +"IVE TESE CROSSTHAPASCAN THDAY CAKETHMIKON N TIMES SIGNTING HEARTTOMIC BOMBTOP" +" CORNERTREFACTIONTRESS AND TRETCHED CTRIPLE DOTTWENTIETHSTWO SHORTSTWO THIRDS" +"TYPE COLONU CIN HAU U2 PLUS BAUAM TSHOOJUARDEDNESSUBLE DASH UM ROTUNDAUMAN EA" +"RTHUNG KHEMA UNKIA SIGNUP HARPOONUP NEUTRALUP OR DOWNUPPER HOOKUPPER STEMUR H" +"UNDREDUR YIG MGOURIPIGMENTURVED OMETUSEL HORSEUTH OR SPYVASTI SIGNVEL SLIDERV" +"ERAGE BOXVIE CAMERAVIOUS PAGEW OR MODELWHITE FLAGWHITE HAIRWHOLE NOTEWING HEA" +"RTWITH SPOONWITH STRAWWITH WINGSWO SHORTS XED BICEPSXHEEJ CEEVY AND RICEY CRE" +"ATUREYEH BARREEYMBOL AIVAYPE PIECE ZAR AMULETZEIRO SIGNZH DIGRAPHZU OVER ZU A" +"ND BELT AND CURL AND TAIL APODEXIA DIVIDERS FROM BAR GARSHUNI OF BLOOD OF PAP" +"ER OVER BAL OVER LUM PLUS GAL PLUS GUD PLUS KU3 PLUS LAL PLUS SAG PLUS TUR PL" +"US ZA7 RA OR RI RICKSHAW SPARKLER STREAMER TIMES HA TIMES UD TROMIKON-AMMONIA" +"C-KHYUD PA-LOW TONE-MID TONE-STACCATO0 LONG LE1 CHARIOT2 GARMENT247 DIPTE3 PL" +"US AN5 BATHTUB5 CYPERUS5 LONG JOA PLUS NAABOVE TO ACE NOTE ACING CARADEG ADEG" +"ADMA GDANAF PERSONAFFE FACEAINTBRUSHAISED DOTAJANYALANAL RUNOUTALAYALAM ALI G" +"ALI ALPAPRANAANEROSIS ANG CITI ANGGEUAETANSKRIT SANTAYALANANTHAKHATAOS ICHOSA" +"RCHAIC MARISTERA AS MEMBERATHAMASATATTACHED AVE ARROWB DIGRAPHBASE UNITBEER M" +"UGSBIAL SIGNBICYCLISTBING CANEBITE LIPSBKHASIAN BO BAIMAIBO GYFU GBOTH BENTBR" +"UL SHADBTRACTIONCANG TE-UCAPACITORCAPITAL DCAPITAL ICAPITAL QCARTRIDGECHANICA" +"L CHAVIYANICHOSEONG CLOSED PLCOIN SIGNCOMPLETEDCONJOINERCORN FACECQUISITIOCRE" +"SCENDOCROUCHINGCUBE ROOTCULTATIOND SALTIREDENT AND DEPARTUREDIAGONALSDOWN HAN" +"DDOWN SIGNDOWN STEPDOX CROSSDRAM SIGNDUS RTAGSE AT LEFTEAVY DOWNEBIT SIGNED D" +"IGIT ED PLANETEEN WITH EFAIDRIN EFORMED TEIGHT OF ELEGRAPH ELLOWSHIPEMBEDDING" +"EMPTY SETENTRE OF ENTRY SAWER BUBBLEERCIAL ATERTY LINEES AKURU ESAME DOTETER " +"SIGNETRASIMOUETTI BALLEURO SIGNFACING UPFEH WITH FINAL MEMFINAL NGAFINAL NUNF" +"ISH TAILFLAT SIGNFORTUNA MFOUR BENTFROM WALLG IN HOLEGITTARIUSGREATER YGRIK S" +"IGNGUAGE TAGHAIKSUKI HALF NOTEHALF SIGNHALSHELETHARACTERSHARD SIGNHEADSCARFHI" +" SYMBOLHIMA SIMAHINOCEROSHIYYAALAAHOOK MARKHOT SASAKHREE FOR HWAZ EH EI PLUS " +"LIIA SYMBOLIALECT-P ICE CREAMIDEOGRAM IDEWAYS UIGH HAMZAIGHTH ASHIGN NUKTAIGN" +" SAFHAIGN TOMPIILE TILDEILIPPINE IN SQUAREINAL NOTEINARBORASINFINITY ING CARD" +" ING DOLLSING GLOVEING LANESING STONEINISHMENTINNYIIYHEIRST MARKISEN-ISENITRA" +" SIGNIVE-PULL-IVINATIONJERUSALEMK GESTUREKA- SHOG KAMEYTSA KEMPHRENGKING BOOT" +"KSTREPTONKU RU KHAKYO TOWERL ME HANDLACKFOOT LAN SIGN LARGEMENTLEFT RINGLESS " +"TREELIGHTNINGLINE FACELISSANDO LITTLE UPLIVERANCELLABLE B0LLABLE OMLOND HAIRL" +"ONG TIP LOWER DOTLVIN SIGNM HE-GOATMAEMGBIEEMALL RINGMARK CIM MARK SHADMBROID" +"ERYMETOBELUSMHANCHOLLMRACHNAYAMUKPHRENGNA KHONNANCLOSING NDAILING NFORZANDONG" +" SANDALNGER ROOTNGER SHIPNGUN SIGNNIGGAHITANIGHT OF NIHSHVASANING SIGNNO TELE" +"IANSERT AT NTERPRISENTESSENCENTRACTIONNUSVARAYANVERTED ROCCLUSIONODIASTOLEOF " +"STIMMEOKED HEADOKED TAILOKOUFISMAOM SYMBOLON GROUNDON TEUAEQONE MARK-ONE THIR" +"DONG GRAVEONGSEONG ONJUNCTIOOO DENNENOP HALF OOPEN EYESOPEN JAWSORT-TWIG-ORTH" +" WINDOTAL SIGNOURA SIGNOUT BEAMSOUT MOUTHOUTH WINDOVER GAN2OVER MUSHOW KAVYKA" +"P DIGRAPHP ELAMITEPAA-PILLAPADE SUITPANYANGGAPENT SIGNPENTASEMEPIDERY HAPLE H" +"EARTPOSITIONSPPOINTED PPOSITIONPROJECTORQUADCOLONQUADRANT-QUEEN OF QUSHSHAYAR" +" PLUS RARCHAIC IIRCHAIC RARDEL DKARREAK HERERED JOKERREDNE ON REFORMED RFUL F" +"ACERIA ERFE RIED FACERNEY PARARO WIDTH ROJECTIONROTATION-RPORATIONRTER MARKRT" +"S MEDALRUM CLEF-RWARI DDAS DIGRAPHSEMICOLONSEPTEMBERSHAB CEEBSIVE FACESMALL Y" +"USSOF PASUQSPIRITUS SSANGSIOSSTAL BALLSTEBASKETSTRELNAYAT OF MEATT ON BONETAB" +"E SIGNTAKHALLUSTANDSTILLTED PLANTTEH ABOVETHROUGH XTIMES NA2TIMES PAPTO CORNE" +"RTONE MAI TRAIGHT UTREDECILETRESVETLOTRISTITIATTED STEMTUKWENTISTUTEYASATUBST" +"ITUTEUE MAEMBAULL BLANKUMED HEADUNGLASSESUNGSEONG UPPER DOTUPTSTIMMEUR CORNER" +"UR-DE-LISURAMAZDAAURLY LOOPURNED AYBURNED GANURUZ UR UUTRA MARKUURDHAJA UVUZH" +"AKKUVANAGARI VELOPMENTVER LUGALVERLONG AVEUAENGAMVICE MARKVIGINTILEVINE LEAFV" +"ISARGAYAVOCALIC RVOETOCHIEVRAKHIYA WASH TAILWING STARWITH FACEWORDSPACEWRINKL" +"ES WRY SMILEXCITEMENTXHAUSTIONY-FOURTH Y-FOURTHSYEAR SIGNYEH ABOVEYRANISMA Z " +"DIGRAPHZAKRYTAYAZAL SASAKZENE RINGZERO SIGNZIR SASAK ANTENNA AT DUSK CEDILLA " +"FACING HANDLES KEMBANG LANTANG NUTILLU OF YARN ON LEFT OTTAVA OVER KG OVER " +"MU OVER ZI PLUS DI PLUS DU PLUS RU POLNAYA RASWADI SATCHEL SCOTS S SLIDING TA" +"LENTS TTUDDAG WA-ALAA YUQ NAE-CREE TH-EM DASH-KHIEUKH-PHIEUPH-X BELOW0 BRONZE" +"1 BARLEY1 HELMET3 ARMOUR56 TURO28 KANAKOA SIGN AABAAFILIABOAFILIACKSPACEAEN N" +"YAMAIYANNOIALLIANCEAMS HORNANC SIGNANE TREEANS SIGNAPITAL FAR TSHESARCASITEAR" +"KLEAN ARRIVINGARSI YEHARTYRIA AST WINDASTERN WATAKANA ATE MARKATEBOARDATH MAR" +"KAVY BANDAY-NIGHTAZHAAKKUBACKWARDBASSINETBATBEIT BER POLEBEVERAGEBIEE FONBILL" +"IONSBINOVILEBLE SIGNBLED CARBLINEAR BOL SIGNBOT FACEBOX TRAYBRA FACEBUNDANCEC" +" SIYAQ CABLEWAYCAL DISCCANDICUSCASSETTECEILING CER BALLCHATTAWACHINESE CK CHA" +"RTCLIMBINGCOMBINEDCOUNCIL COUNTERSCURLICUECURSIVE D BUBBLED CROSS DAMMATANDAN" +"TAJA DDY BEARDIAMONDSDIFONIASDIM GUNUDIT CARDDOCUMENTDS-CREE DUSHENNADVANTAGE" +"DVISVARAE COOKIEE OF POOEBEEFILIECH YIWNED BRICKEGORIAN EK ONKARELEPHANTEN NT" +"EUMENICIAN EOUT BOXER TRUTHERAL URNERDIGRISEREVODKAESH LOOPEST WINDET SHOESET" +"A SIGNETRASEMEEUFEUAETEVEN OF EVERANCEEXCHANGEFEBRUARYFILE BOXFINAL THFLOURIS" +"HFOR STOPFRAKTUR FRICAN DGARITIC GBASINNAGENITIVEGERPRINTGLASNAYAGORAZDO GREA" +"T SAHAGALL HHALF GURHAN-AKATHARBAHAYHARMONICHESPIAN HIRDEABOHOP BELLHREE OF H" +"T CLOUDI SHAKTIICHAEAN IGHT ARMIGMOID SIMANSIS INAGARI INDUCTORING BELLING BO" +"WLING ROD IRD MARKIS FORM IS WHEELIS-PILLAITA MFONJACK OF JAVIYANIJUNCTIONKAI" +"YARAAKASRATANKATAKANAL POLISHL-LAKUNALA LENGALAETITIALATION XLEANING LESS SHA" +"LESSER YLF RING LFWIDTH LKULIZMYLOCATIVELONG BARLONG S TLORRAINELOW STOPLOZHI" +"TIELTRY LEGLUB SUITMALL AXEMANDARINMANGALAMMARRATANME BADGEME WITH MEM-QOPHMI" +"ONIAN MMATION MON TIMEMY HOUSEN-JOINERNA METEKNAMENNY NAVIYANINCE SIGNNED FOO" +"DNEIFORM NG RTAGSNI ABOVENINE OF NITIAL ZNO SLASHNO THUMBNOTE PADNOVEMBERNRES" +" TOSOBOOFILIOCALIC MOCK SALTOCUS OF ODESTONEOHM SIGNOLLOWINGOM NTEUMOMANIAN O" +"MMA BARON CROSSONE BEATONE FOR OO TYPE OREHEAD ORM FEEDOT MBUAEOTIFIED OVER B" +"U OVER GA2OVER GI4OVER SAGOVER SHEOVER TIROVERRIDEPAIRTHRAPAKPAK EPALOCHKAPAR" +"ATED PAVIYANIPENTAGONPRECEDESPROSTAYAPUB DAWBPUN IYEKQAIRTHRAQUINTILER-RAHMAH" +"RAMMA GGRASMIAN RAT RAI RAUGHTS RDEL NAGREATNESSRED HAIRREE MARKRESVETLYRILLI" +"ONSRIYOOSANROSHTHI ROSSED ORSE DUNGS OCHKOMSALT OF SALTIRESSANYAKA SCRIPT GSE" +" WEDGESENTAGONSEXTANT-SHKIR KASHOE JOTSHORT ERSIFISTONSIGN LAESIGN PVOSIX DOT" +"SSMA SIGNSNA LDANSOFTNESSSPERSIONSQUEEZEDSUCCEEDSSUPERSETSWIMMINGT NGGEETTAAL" +"UJA TAI LUE TAR EYESTATASOUETER FACETHIOPIC THOLHOMATHOSCOPETICK IN TIRRUP RT" +"ISMOS ETO-LEFT TOWARDS TRI DISHTRICOLONTTENTIONTTO MARKTURNED MUAREG YAUATRIL" +"LOUBJOINERUDAWADI UKEUTNDAULLS LEGUNDERDOTUNDERTIEUNG DASHUP TRUCKV OVER MVE " +"SASAKVERGENCEVESSEL BVOLUTIONVOMITINGW PRINTSWASH KAFWBOY HATWN HEARTWO ABOVE" +"WO BEATSWON SIGNWRINKLEDWRITING XCELLENTY BEETLEY POPPERYAMAKKANYBEYFILIYENIS" +"EI YER YAGHYESIEUNGYIDDISH YPORROONYRILLIC ZAKRYTOEZWARAKAYZWJ THAJ APLOUN BU" +"TTON CER-WA FLEXUS ISLAND KEFULA LONSUM MAELEE MENDUT MINUS MUOMAE MUQDAM OC" +"LOCK OPEN-O PLOPHU RAMBAT SHAKER SLOWLY STRIDE TAMURA TEDUNG WAAJIB WOLOSO-CR" +"EE R-KIYEOK-MACRON-MU-MO--SHIFT--THIRTY-TIKEUT-WELSH 0 SPEAR0 WHEAT1 ARROW2 O" +"LIVE2 WOMAN26 EYYY3 AREPA3 EIGHT3 MONTH3 OMEGA3 SPICE3 SWORD3 WHEEL5 NGGEE6 N" +"GGOO7 NGGUA7 NGUAN9 CLOTH9 NGGAAA -PHRUA NAME ACTER TAD NECKAELAENGAETMEUNAHA" +"PAKHALESMA ALLOT XALTILLOAM ALEFAN MARKAND ENDANDERERANGKUOQANGLED ANGLONGANG" +"OLATAPEZIUMARDNESSARRED BARRED OAS SIGNASHTRA ASUTORUATAEAN ATH OF AU MARKAUL" +"DRONAUNTLETAXIMATAAY SIGNBAIRKANBAMBOOSBARREKHBASIGNABERGINEBERRIESBIG YUSBLA" +"CHKOBLOSSOMBOARDERBOOSTERBORZAYABOURINGBREVIS BUFFALOBULANCECABINETCAP TENCAY" +"ANNACELSIUSCHEINAPCHIEUCHCK LIMECLEAVERCLOSE ECLOTHESCOMING CONTACTCOPTIC CRA" +"CKERD MADDADA FACEDANCINGDANESE DAYANNADEAVOURDHALATHDIARGONDIPLOUNDISIMOUDOF" +"ONONDRIL BUDU NJAADYNAMICE DRINKE GLASSEAD OREEAGULL EAVY YAECEMBERED RICEEFT" +" ARMEIGHT KEL PUMPEN LEAFENSHUETER THANERNIN AESTIVALETNAHTAEULEUNGF DAVIDF S" +"ASAKFATIGUEFAYANNAFINAGH FINAL YFLUENCEFORKINGGAYANNAGENERALGHEUGHEGLAGOLIGO-" +"KARTGOLIAN GRADUALHAARKAAHALANTAHANGUL HAYANNAHEADINGHEXAGONHI SIGNHIUCHUSHOD" +"DONDHYAAUSHI NTEUMI RTAGSIANGQI IBIFILIIC WANDICOPTERICYCLESIKHAHITIL DRUMILL" +"EANNIMILAR INNABARISIBLE ITALIC ITON RAIVE OF JAIN OMJARATI JAYANNAJECTIVEJER" +"AN JJIBWAY KARO BAKAYANNAKEUAERIKHA YATKKURUNIKOMBUVAKOQNDONKORONISKPAK WAKUT" +"AARUKYLISMAL SEGNOLAGIOS LAK-050LAMITE LASHES LAYANNALE LEAFLEK TOOLENGTH-LEU" +"T KALEYBALLLF FACELIGHT XLJUDIJELLYFISHLOSION LYGISMAMAAYYAAMAI SATMANCHU MAR" +"CATOMASSAGEMBOL B0MEETORUMERICASMINGKALMINIMA MONSTERMRACHNYMUNGKAHNANCIALNAY" +"ANNANEQUDAANESTED NG MASKNIKAHITNJAEMLINUMBERSOCTAGONOCTANT-OCTOBEROF SOAPOFF" +"ICEROGDIAN OKRYTIEOLAPUK OMERANGON FACEONG UEXONGONANONTIEENOP MARKORCULUSORE" +"VMA ORKHON ORTIETHOT NGOMOT REPHOUR OF OUT HUBOUTWARDOVER ANOVER DUOW ALEFOWI" +"LO SOX BACKOX LINEP PIEETPALLAWAPANESE PANSIOSPARERENPAYANNAPAYEROKPECTIVEPEG" +"ERMAPENGKALPERVISEPHUTHAOPLOYAN POMOFO POVODNYPPROACHPRENKHAPSTICKSPTHAHA PUR" +"PLE PUSHPINQUARIUSQUEEZE R2 GUNURA REPARAKHANGRANGKEPRARIETYRAYANNARD FACERDO" +" RJEREATHY REREKANRESILLORIPPLE RISIMOUROGRESSROKEN LRRECTUSRTHIAN RY FACES-S" +"AJDASA VAH SAMPHAOSANDHI SANGAN SAYANNASCOOTERSEXTILESHAKINGSHIFT TSHORT ASID" +"DHAMSIGN UDSOLDIERSOV ROGSPRINGSST TUBESTERINGSUKUUDOSYNAGMAT ASHESTA MARKTAI" +"SYOUTALL AATASHEELTAYANNATCHFORKTHALIYATHESEOSTHIEUTHTHKUQI TIKRAMATIVATE TOR" +"NADOTRAINERTROLLEYTRYASKATSECHKATTHACANTTILIK TYSCAPEUBUFILIUKKAKHAUKOTHEAUM " +"IYEKUN MEUTUP HANDUP MARKUP SIGNUP STEPUP TACKURATIONURFACE URGLASSUSSYERUUT " +"TIMEUYGHUR VANESE VAPOURSVAV YODVAYANNAVE DOT VEMENT-VEW NOWVILIK BVILLAINVOI" +"CINGVOWEL KVYSOKO WAZ EOHWDRIVERWIFRUITWIGNYANWO FOR WO MARKWO WAENWORSHIPXAM" +" LAIXOPHONEY GREENY HEARTYA LAMPYAH LI YANMAR YAYANNAYELLOW YMAIC LYNAMIC ZQA" +"PHA AGUNG DIPLI EPOCH EQUID FACE- GATE KAPAL LELET LONGA MELIK MURDA QATAN " +"SPLIT TACK TIKHY-HIDET-HIEUH-IEUNG-LINE--PIEUP0 NGGI0 NGGO0 NYON0 NYUN00-102" +"1 GBOO1 GOLD1 HORN1 NDEE1 WINE2 KPOO2 NGGU3 GBEE3 HEEI3 NGGA4 DART4 DEER4 KPE" +"E4 MUAN4 NGEN4 NJOO4 NYIN5 MERI5 WOOL6 GUEI6 HUAN6 NGGE6 TREE7 GUAN7 KAPO7 MB" +"EE7 MBUU7 NDOO7 NGON8 HOOU8 MBEE8 NYAN8 NYEN9 MUEN9 NJEEA HAAMA-KARAAASHAEACI" +"NTHAEMMAEAESURAAFFIX AGOGUEAGRANTAILUREAJANI AK-668AKABATANCHORANGKATANIMALAN" +"UARYAPISMAAPLI MAPYRUSARADDOARBUTAARSEOSASHGABASSINGATTERYATTIC AUTUMNBAFILIB" +"ANWA BEFILIBETAN BGBIEEBISCUSBISHOPBLINK BOFILIBOWTIEBUFFERBURGERC CLEFCALATE" +"CASTLECATAWACEVITUCHADINCHAMKOCHEIKHCHEMA CHESS CHIKI CHIRETCHO CHCHURCHCKNES" +"SCLOSETCODILECRAYONCREASECUMBERCUPPEDD DISKDAGGERDE DOGDERMA DGEHOGDICINEDIES" +"ISDOKMAIDSLIDEDUCEUSDVANCEE WAVEEAHMUKED CAPED ICEEENTH-EIGHTYELLITEEMASTIEMP" +"US EN GHEENIKI ENTIMAEPACT ERMATAERTUREESTAN ET KUTEU MBUEUAENAEUNYAMEUREUTEV" +"ENTHEXHALEEXISTSEYANNAF CLEFF MAREFAMILYFATHA FF OF FIZAHUFORMEEFORTISFRAMESG" +"ANGIAGBASAQGEADALGEDOLAGGLINGGHAMALGHETTIGHEUAEGLAZ HGNANT GO NGUGOBLINGORGON" +"GRASP GS-PA GURAMUHALF HHAM AIHAMEDHHAMILOHASHKAHE MGOHECAKAHEISEIHENOPEHERME" +"SHEUAEPHIBIT HINGE HIVETEHO HOIHORT IHUMBS HUR PAI HOOKI MAIMIASMA IB YAMIDE " +"ESIEVAN IGGLESILBOATILLAGEINAGMAINCUNXINDHI INGAATINHALEINPUTSINSHIPINWARDIRI" +"NGUISSANTISSHARISSIMOITABLEITHER ITRITEITULUMIX OF IXTY PIYANNAKAYAH KE PHOKE" +"YCAPKILLERKLITONKRISISKTIKO KUSHU2KY WAYLAFRONLAMADHLAMEDHLANDERLASTONLD MAPL" +"EVEL-LIGIONLIGON LISHA LITIKILLIPOPLOACHALONG EM BOARM BULLMADDAHMADR MMALL F" +"MANYA ME DIEMECHIKMPLINGMUKHI N DASHN YANGN-NISFNACLESNCH FRNDA TANEUME NGBAT" +" NGGONGNIRUGUNISTERNIZKO NKNOWNNOKHUKNOR BUNOWMANNOZHEKNSANAQNSUZ ANTEVMANTII" +"MUNTOGENOBELOSOCENCEOCIETYODHADHOFOUNDOGONEKOITIC ON KEYONOCLEOOMUUTOPEN DOPE" +"N POPITSAOPULUSOSETTEOW TIEPALUTAPBOARDPEAKS PECIALPENCILPEPPERPICKETPIDER PI" +"RIT POKOJIPOMENEPOMMEEPTACLEPUFFEDPWATCHQAMATSQETANARAAKANRACINGRAKLITRAVEL-R" +"BITSAREMEDYRENGTHRICORNRIISAPRISEMERKAANUROCKETRSENICRSHANARSIAN RUBEUSS SHOE" +"S TENTSAADIYSHAYIMSHMAAMSICKLESIXTHSSKAPI SOUNAPSPADESSPATHISPITALSSLESSSTANC" +"ESTANCYSTLERSSTOLI STROFOSUCKEDSURANGSURED SWORDSSYNAFISYOUWAT NJAQTAIKHUTAMI" +"NGTARGETTAU ROTAUROSTE TSETE USETERON TEUWENTHAKKUTIKENOTIMATETIRYAKTOPBARTRA" +"PLITRIKE TURBANTUXEDOU MBITUAEQTUUANGXIUBLE XUCIBLEUDARKAUDDISAUGGAGEUP BOWUP" +"NAYAURANUSURNAMAUUMISHUYANNAUZEIROVERTKAVILIANVIRIAMWBERRYWEORTHWINDOWWN BOWW" +"N BOXWO OF WORKERWRENCHX FACEXIMIZEXO NEOYAKASHYIN-DOYOMBO YRENE YSTICKZHITSA" +" AMPS CAPO CHWV COAT DEKA FUJI GORA HAA ICON ILUT JERA KAWI LACA MOOD SARI T" +"ABS TELU-ALAF-BEAM-SIOS0 BEE0 DOO0 DWO0 GBO0 GEE0 HAN0 HEE0 JOO0 MAN0 OIL0-VA" +"S1 DWE1 FAN1 PEE1 TEE1 TWO1 WVI1 YOO1-VAS18CFF2 HEN2 HOO2 KPA2 KPI2 MBA2 MBE2" +" MBO2 MBU2 NJA2 NJU2 POO2 PTE2 SEE2-VAS3 BOO3 FOO3 HIN3 HON3 NDI3 RA33 VEE3 W" +"EI3-VAS32 JE4 ABB4 GBI4 KPU4 LEE4 LOO4 MBO4 MON4 NDO4 TOO4 VOO4 WOO4 WUI4-VAS" +"5 KEE5 MBI5 NDU5-VAS6 GBA6 KOO6 RA26 SIA6 SOO6 TA26 WEE6-VAS7 FUA7 GBE7 HUN7 " +"JEE7 MIN7 NEN7 NIN7 TWE7-VAS8 FEE8 GBU8 KPE8 KPO8 MAN8 NAN8 NWA8 RO28-VAS9 DE" +"E9 KUA9 MEN9 MUN9 NDA9 NDE9 NON9 NUN9 PU29 WVA9 WVE9 YEE9-VASA UNAA YUEAADHUA" +"AMAEACHKAADDERADULTAEMAEAEPENAEREEAGMA ALFILALGARALLEYALLI ALOG ALPHAAMBDAAME" +"KHANGELANNONAPPLEAR AEARBAIARERUARTARASAR ASEIAASPERATAF ATIYAAUTHSAVROSAWAY " +"BAARUBACUSBALAGBASA BASSABAWAKBEITHBENDEBHADHBHETHBISAHBLAKOBOOTSBORZYBSTERCA" +"ANGCAKESCAKRACALYACANUSCAUDACAUSECCEPTCCOLICECAKCECEKCEREKCHADACHERYCHIMECHOO" +"ICHOOLCHULACHUTECIEUCCKAGECKTIECLIFFCLONECLUBSCROWNCTRICCUBEDDAIC DATUSDBOATD" +"ELTADENCEDEPTHDESTYDHAM DKAR DLINGDOTS-DSMANDWICHE GEEEAGLEEATH EBALLEESHIEGA" +"LIEGIONEGL HEIDONEISMAEKEETEMAKEEMBICEMLJAENANOENDEPENENGENJETEO-EUEOPLEERINE" +"ERKHAESHE3ESO EET TUETFONEUAEMEURAEEYBUSEYYALF COWF EWEF SOWFAAFUFAIHUFEARNFI" +"TKOFLAGSFLICTFLUTEFORCEFSAAQGADOLGALGAGAMALGAMANGAZE-GEAN GESH2GHNUTGHULUGOGI" +" GORGIGULUSGVANGHAALUHADDAHAINUHALA HALQAHAMSOHANNAHASE-HATHIHAYINHELAPHETHEH" +"IMELHIRIQHISTIHIUTHHOLAMHOLARHOTELHROOMHUMP HUTA I KOII-RESIARDSIAUDAICHONICR" +"ONIHVUSIKARAIKURUILVERIMAHUIMGBAIMMA IMMERINGSAINNA INTHUIPEHAIPINGIRACYISTLE" +"ITHI ITUALJANG JERVIJUDGEJUDULJUEUIK-020KARORKBALLKERETKESH2KHAPHKNOBSKO LAKT" +"OP KURONKUSMAKWAENL NETL-JUZLABATLABORLAGUSLAKKOLAMDALATIKLAYARLEASELENISLOAN" +" LOMKALOOP LOURELURALLWAY M RAMMAAEHMAALAMACUSMADYAMAI KMAIZEMALONMAQAFMBONEM" +"EEMUMEIZIMELONMENOEMEPETMETEGMETRYMI ROMIEUMMINDUMINGOMISRAMMOTHMPAREMPIREMRO" +"CKMSHAEMUCH MUHORMUOY NA PONABLANADA NASHINCORANEGARNEMKANENOENGENTNGMANNGUE " +"NIEUNNINTHNIS FNNAN NOMIANSIEENSUAENSYONNTHA NTXIVNUENGNZEUMO ANGO BOXO KAIO " +"PLAO RUAOBYLAOCADOOJKI OKARAOKEE OLD XOMBIEOMMAEOPLETOQPENORUTOOTERIOTHALOTTH" +"IOUNCEPASEQPATAKPCHA PEAN PEITHPEN OPEN-PPEPETPI ROPITERPLHAUPLUTAPLUTOPMUNKP" +"OLI PONSEPPAGEPSILIPTUNEQAAFUQUIRYR-RUBRACHYRAIDARASHARCHIDRDIONREGIAREIWAREL" +"A RELAAREPHARICEMRIEENRIEULRILLARITSIROGOMRONOSROTCHROWN RRITORUDAARUHUARULAI" +"RUMP-RUSH RYASOSADHESAKINSAKTASALADSATA SAUILSEGOLSENTOSHANGSHAR2SHARASHARUSH" +"IMASHOOKSHTINSICLESILA3SKATESOLVESPINESTARTSTEP-STNUTSTORMSUKUNSURYASUTUHTEGE" +"HTENSETHINGTIGMATINNETIPPITKAANTMAAUTON ATONPITORCHTORSOTOYORTRACKTRAIFTRIOLT" +"SADITSEEBTSERETTOCKTTORUTUEUMTURN TUUMUU U UUBITOUBURUUBUTSUDAATUGUSTUKARAUMM" +"ERUNGBAUNGGAUNITYUNOO UQUETURINEURITYURTLEUTEUXUTIESUTTHIUWAR VAAVUVARCAVATOR" +"VIET VITAEVRIDOVZMETWAAVUWAQFAWASSEWATTOWBOATWFISHWIANGWIDE WINDUWINJAWISADWU" +"318WUAETXING XTRA-XW XWXYOOJYAMOKYECEKYENAPYIZETYSTERYURIIZHAINZIDI ZILDEZSEK" +"AZYGOS C D OHM R S WEB-RAY-UM 0 BI0 HO0 JU0 KO0 NI0 PU0 RA0 SA0 WI0 YE0 ZO028" +"B1 DA1 DO1 DU1 GA1 HA1 IN1 KI1 KU1 PO1 QI1 RA1 SA1 SI1 SU1 VU1 YI13582 BU2 KA" +"2 L22 NO2 PE2 QO2 RO2 SO2 VI2 YA3 A33 EE3 JE3 JO3 KU3 L33 LE3 ME3 MI3 MU3 PA3" +" RI3 TA3 YU4 DO4 FI4 KE4 L44 NE4 TE4 TU4 WA4 WI4 ZE5 A25 AN5 AU5 BB5 DE5 FA5 " +"FE5 GI5 IN5 JU5 LI5 MO5 NU5 OO5 TE5 TO5 VA5 VE5 WA5 WE6 DI6 FU6 HE6 HI6 JE6 J" +"O6 L66 LA6 NA6 PO6 QA6 RU6 SE6 WU7 BE7 DA7 DD7 EI7 JA7 KI7 LU7 RE7 TI7 VO7 ZA" +"8 BO8 DU8 EN8 FO8 GU8 JI8 KO8 PI8 QE8 SU8 WE9 JA9 PA9 PI9 SE9 SI9 SO9 TA9 TO9" +" TUA IEA-HAAACUAFELAHADAILMAJORALAIALDAALTAAMLAAN XANAEAPAQAPONARA3ARGIAROOAR" +"UMATIMATYAAULABALDBASHBAYIBBITBERDBETHBOOKBOREBUNGBUOYCANOCASECAYNCHAUCOONCOR" +"ECRETCWAADAGSDAIRDDAKDDHIDEADDGERDIM2DZHAEAAEEEEEEENUEHEHEIRTEIWSEZZOFAIBFAST" +"FEEMFERZFETHFEUQFFINFIRIFITAFROGFWAAGAAMGAMEGAMLGEDEGGWSGHOMGHWAGIBAGIDAGIEAG" +"IR2GOALGORTGROMGRU GUINHAVEHAYNHEEPHEROHERUHEYNHEYSHEYTHHWAHID HIINHMI HOM HO" +"PHHSDAHSHUHUB2HUENHUVAHWAAIANOIARAIEN IFATIGERIITOIK HIKIRILUYIMARINORINY IOD" +"EIPODIQAAISI JEONJIIMJOT JYAHKAAFKAD3KAKOKALIKAPHKCETKEUPKICKKINIKMA KOBAKOET" +"KOKEKOKOKWAALBUSLFERLFIELIFULIUMLIWNLOLLLOVOLUISLUMNMARUMARYMESOMFAAMIIMMIINM" +"LYAMMU2MPETMUASMUINMVATMWAANAAUNAG NAM2NANANCERNDAPNDUENEMANEO NGA2NHAYNJAMNN" +"NANOWCNPEANRUANSHENSUBNTAANTOCNUNGNUUNNWAAO-YOOBATOBROODLEOFUMOJI OJODONA ONU" +"TOONEOOTHOPODOPUSORAXORIIOUBTOWAYOXIAPARDPAWNPEEIPEEPPEUXPHABPHINPLUGPLUMPOLO" +"PPHOPRILQASRQEF QHAUQOPARAFERCERREIAREW RGU2RIFYRKABROA ROARROOKROUTRPSERROIR" +"SO-RT TRUISRUKURUNARUSISA-ISAATSEENSEEVSELASELFSEYESHTASHYASHYESINKSLURSOKASO" +"NGSUABTUKITURUTZELUGU UHURULU UNAVUON URUSUSA UTAEUTANUTTYVEDEVEUMVEUXVEYZVID" +"AVIYOVOS VUEQWAAKWAETWAHAWAIRWAW WDERWULUXEIAXEYNYAWNYCHEYEUXYUDHYUKUYUPIYWAA" +"ZATAZAYNZELOZETAZIETZIZ2ZZY 0 E0 U0-004A0B91 X1-01-212114D15518D2-020B2532DD3" +" D3 I3-030531C4 E4-05 U5-05505575B66-06206D77 O72C8 A8 I8F09819E3A7AAEFAL2AUJ" +"AWXAZUB57B89BIBBXGCA9CAHCAICIGCWICYAD42D70DA2DE6DIBDJADUBDZEE80EEGEIEEYKEZHF1" +"4F8CFAJFLYFOMFUEHAQHOJHOXI-IIMNIWRJEUK00KAQKUEKUGLFALK LULNIIOAYOIXPOQPUQQ00Q" +"ARQIFQIGQOFQOTQUFSIISUUTJETUJUDYUEZUMXUOPUQAVAUVNOVOKVOYVUUWOQX00XAUXEHXWVY00" +"YOTZJEZOOZORZUPZZE16171D1F343638394048494B4E647890929599C0D0G0G3G9LXR7VDVWZ0"; -static const unsigned char uname2c_tree[218382] = { - 0xa1, 0xad, 0x9f, 0x0c, 0xa2, 0x92, 0x99, 0x0b, 0xa3, 0xf7, 0xc8, 0x09, - 0xa4, 0xc2, 0x96, 0x09, 0xa5, 0xb9, 0xcd, 0x08, 0xa6, 0xef, 0xbf, 0x08, - 0xa7, 0xb8, 0xf9, 0x07, 0xa8, 0x9c, 0xaf, 0x07, 0xa9, 0x9c, 0x9a, 0x07, - 0xaa, 0xa1, 0x94, 0x07, 0xab, 0xd0, 0xdd, 0x06, 0xac, 0xb8, 0xd1, 0x05, - 0xad, 0xdf, 0xa8, 0x04, 0xae, 0x8e, 0x83, 0x04, 0xaf, 0xb2, 0xd4, 0x03, - 0xb0, 0xee, 0xa7, 0x03, 0x02, 0x7c, 0x00, 0xc1, 0xa6, 0x03, 0xb2, 0xde, - 0x83, 0x03, 0xb3, 0xeb, 0xf7, 0x01, 0xb4, 0xde, 0x84, 0x01, 0xb5, 0xb8, - 0x75, 0xb6, 0xb9, 0x56, 0xb7, 0xdf, 0x3f, 0xb8, 0xe5, 0x3e, 0xb9, 0xd3, - 0x10, 0xba, 0x01, 0xff, 0x0a, 0xee, 0x1c, 0xe9, 0x0f, 0x10, 0x6a, 0x5f, - 0x80, 0x0c, 0xa5, 0xd1, 0x0b, 0x50, 0x9a, 0x62, 0x10, 0xf9, 0x01, 0x08, - 0xe2, 0xc5, 0x06, 0x45, 0x6a, 0xe6, 0xdf, 0xf9, 0x41, 0x0a, 0xd6, 0x57, - 0xaa, 0x07, 0x06, 0x44, 0xdb, 0x23, 0x11, 0xe3, 0x5b, 0x01, 0xff, 0x4e, - 0x88, 0x75, 0x44, 0xcf, 0x01, 0x45, 0x93, 0x86, 0x45, 0xcf, 0x01, 0x06, - 0xb4, 0xda, 0x06, 0x43, 0x27, 0x29, 0x46, 0xcf, 0x41, 0xd2, 0x42, 0xcf, - 0x01, 0xd3, 0x43, 0xcf, 0x41, 0x02, 0x1e, 0x14, 0xf2, 0x06, 0xa4, 0xcf, - 0x06, 0x44, 0x96, 0xec, 0x83, 0xcf, 0x01, 0x0a, 0xab, 0xa8, 0xa3, 0x06, - 0xab, 0xf1, 0x05, 0x46, 0x0e, 0xdb, 0xa7, 0xcf, 0x81, 0xca, 0x05, 0x45, - 0xe3, 0xe5, 0xc2, 0xcf, 0x01, 0xaf, 0x8d, 0x05, 0xb0, 0xda, 0x04, 0xb2, - 0xcb, 0x04, 0xb3, 0x4f, 0x09, 0xad, 0xbe, 0x17, 0xba, 0x01, 0xff, 0xa1, - 0x06, 0x46, 0x91, 0xb8, 0x85, 0xcf, 0x41, 0x46, 0x80, 0xdb, 0x55, 0xcf, - 0x01, 0x47, 0xcc, 0x31, 0x5d, 0xcf, 0x41, 0x0c, 0x66, 0x89, 0x18, 0x49, - 0xaf, 0xb9, 0x64, 0xcf, 0x01, 0x48, 0x4a, 0xc7, 0x63, 0xcf, 0x01, 0x48, - 0xa6, 0x53, 0x65, 0xcf, 0x01, 0x4b, 0x8d, 0xa1, 0x66, 0xcf, 0x41, 0x49, - 0xaf, 0xb9, 0x68, 0xcf, 0x01, 0x48, 0x4a, 0xc7, 0x67, 0xcf, 0x01, 0x48, - 0xa6, 0x53, 0x69, 0xcf, 0x01, 0x4b, 0x8d, 0xa1, 0x6a, 0xcf, 0x41, 0x09, - 0x8f, 0xb8, 0xa3, 0x03, 0x48, 0x5a, 0xc5, 0x7d, 0xcf, 0x81, 0x82, 0x03, - 0xb4, 0x01, 0xff, 0x44, 0xee, 0xeb, 0x86, 0xcf, 0x81, 0xac, 0x02, 0x46, - 0xec, 0xdb, 0x56, 0xcf, 0x81, 0x95, 0x02, 0x05, 0x28, 0xe7, 0x01, 0xff, - 0x09, 0xad, 0x80, 0xe8, 0x01, 0x04, 0xd2, 0xec, 0xae, 0x01, 0xab, 0x42, - 0x4e, 0xa6, 0x78, 0x93, 0xcf, 0x01, 0x4e, 0xd6, 0x67, 0x97, 0xcf, 0x01, - 0xb0, 0x20, 0xb4, 0x01, 0xff, 0x4e, 0x02, 0x77, 0x9a, 0xcf, 0x01, 0x05, - 0x82, 0xe7, 0x01, 0xff, 0x48, 0xe2, 0xc3, 0xac, 0xcf, 0x01, 0x49, 0x0c, - 0x9d, 0xad, 0xcf, 0x01, 0x49, 0x06, 0xbd, 0xae, 0xcf, 0x41, 0xaf, 0x06, - 0x47, 0x4b, 0xc7, 0x92, 0xcf, 0x41, 0x4b, 0x0a, 0x9d, 0x95, 0xcf, 0x01, - 0x47, 0x0e, 0x9d, 0x96, 0xcf, 0x41, 0x06, 0x67, 0x89, 0x5a, 0x02, 0x34, - 0x0a, 0x01, 0xff, 0x47, 0x9e, 0x53, 0xb5, 0xcf, 0x81, 0x06, 0x47, 0x20, - 0xaa, 0x94, 0xcf, 0x41, 0x80, 0x01, 0xff, 0x04, 0xd2, 0xec, 0x0c, 0x49, - 0x0c, 0x9d, 0xb6, 0xcf, 0x01, 0x47, 0xbb, 0xd3, 0xbe, 0xcf, 0x41, 0x44, - 0xe0, 0x67, 0xb9, 0xcf, 0x81, 0x28, 0xaf, 0x01, 0xff, 0x4a, 0x1d, 0xaa, - 0xbc, 0xcf, 0x81, 0x18, 0x49, 0x0c, 0x9d, 0xba, 0xcf, 0xc1, 0x00, 0x06, - 0x50, 0x00, 0x01, 0xff, 0x50, 0xca, 0x60, 0xbb, 0xcf, 0x01, 0x50, 0xc3, - 0x31, 0xb8, 0xcf, 0x41, 0x4a, 0xc9, 0xa3, 0xbd, 0xcf, 0x41, 0x56, 0xbd, - 0x31, 0xb7, 0xcf, 0x41, 0x4e, 0xd6, 0x67, 0x99, 0xcf, 0x01, 0x49, 0x0c, - 0x9d, 0x98, 0xcf, 0x41, 0x44, 0xe0, 0x67, 0xa2, 0xcf, 0x81, 0x28, 0xaf, - 0x01, 0xff, 0x4a, 0x1d, 0xaa, 0xa5, 0xcf, 0x81, 0x18, 0x49, 0x0c, 0x9d, - 0xa3, 0xcf, 0xc1, 0x00, 0x06, 0x50, 0x00, 0x01, 0xff, 0x50, 0xca, 0x60, - 0xa4, 0xcf, 0x01, 0x50, 0xc3, 0x31, 0xa1, 0xcf, 0x41, 0x4a, 0xc9, 0xa3, - 0xa6, 0xcf, 0x41, 0x56, 0xbd, 0x31, 0xa0, 0xcf, 0x41, 0x43, 0xd0, 0x31, - 0x9b, 0xcf, 0x81, 0x16, 0xaf, 0x01, 0xff, 0x4a, 0x1d, 0xaa, 0x9c, 0xcf, - 0x01, 0x49, 0x0c, 0x9d, 0x9d, 0xcf, 0xc1, 0x00, 0x4c, 0x65, 0x89, 0x9f, - 0xcf, 0x41, 0x4c, 0x65, 0x89, 0x9e, 0xcf, 0x41, 0x80, 0x01, 0xff, 0x48, - 0xe2, 0xc7, 0x57, 0xcf, 0x01, 0x54, 0xab, 0x45, 0x5a, 0xcf, 0x41, 0x80, - 0x01, 0xff, 0x4e, 0xd6, 0x67, 0x91, 0xcf, 0x01, 0x02, 0x31, 0x01, 0x0d, - 0x49, 0x3d, 0xbf, 0x8b, 0xcf, 0xc1, 0x00, 0x4b, 0xc7, 0x95, 0x8c, 0xcf, - 0x41, 0x50, 0xea, 0x60, 0x8e, 0xcf, 0x01, 0x47, 0x93, 0x86, 0x88, 0xcf, - 0x81, 0x1e, 0x45, 0x50, 0xe7, 0x8d, 0xcf, 0x01, 0x48, 0x72, 0x95, 0x87, - 0xcf, 0xc1, 0x00, 0x03, 0x6e, 0x08, 0x01, 0xff, 0x47, 0x93, 0x86, 0x89, - 0xcf, 0x01, 0x4b, 0x30, 0x9f, 0x8f, 0xcf, 0x41, 0x4b, 0x6f, 0x95, 0x8a, - 0xcf, 0x41, 0x80, 0x01, 0xff, 0x02, 0x31, 0x01, 0x06, 0x48, 0x42, 0xca, - 0x7f, 0xcf, 0x41, 0x47, 0x93, 0x86, 0x80, 0xcf, 0x01, 0x48, 0x72, 0x95, - 0x7e, 0xcf, 0x41, 0x0d, 0xad, 0x80, 0x36, 0x07, 0x66, 0x89, 0x1b, 0x49, - 0xaf, 0xb9, 0x71, 0xcf, 0x01, 0x48, 0xa6, 0x53, 0x72, 0xcf, 0x01, 0xb4, - 0x01, 0xff, 0x46, 0x02, 0x77, 0x74, 0xcf, 0x01, 0x4a, 0x8e, 0xa1, 0x73, - 0xcf, 0x41, 0x4e, 0xd6, 0x67, 0x77, 0xcf, 0x01, 0x05, 0xa1, 0x53, 0x01, - 0xff, 0x48, 0xa6, 0x53, 0x76, 0xcf, 0x01, 0x47, 0xad, 0x78, 0x78, 0xcf, - 0x41, 0x4b, 0x66, 0x89, 0x7c, 0xcf, 0x01, 0x4e, 0xd6, 0x67, 0x7b, 0xcf, - 0x01, 0x48, 0x4a, 0xc7, 0x79, 0xcf, 0x01, 0x48, 0xa6, 0x53, 0x7a, 0xcf, - 0x41, 0x52, 0x4e, 0x50, 0x6c, 0xcf, 0x01, 0x42, 0x55, 0x18, 0x82, 0xcf, - 0x41, 0xa1, 0x1c, 0x48, 0x3a, 0xc3, 0x58, 0xcf, 0x81, 0x0f, 0xaf, 0x01, - 0xff, 0x48, 0x32, 0x9f, 0x70, 0xcf, 0x01, 0x48, 0x2a, 0xc5, 0x90, 0xcf, - 0x41, 0x4f, 0xd5, 0x67, 0x59, 0xcf, 0x41, 0x43, 0x29, 0x83, 0x5c, 0xcf, - 0x01, 0x46, 0x6a, 0xdc, 0x52, 0xcf, 0x01, 0x42, 0x65, 0x08, 0xc3, 0xcf, - 0x41, 0x45, 0xba, 0xe1, 0xc0, 0xcf, 0x01, 0x44, 0x62, 0xef, 0xaf, 0xcf, - 0xc1, 0x00, 0x80, 0x01, 0xff, 0xab, 0x0c, 0x48, 0xa6, 0x53, 0xb0, 0xcf, - 0x01, 0x4b, 0x8d, 0xa1, 0xb1, 0xcf, 0x41, 0x0b, 0x67, 0x89, 0x06, 0x52, - 0x9c, 0x53, 0xb2, 0xcf, 0x41, 0x4e, 0xd6, 0x67, 0xb4, 0xcf, 0x01, 0x48, - 0xa6, 0x53, 0xb3, 0xcf, 0x41, 0x80, 0x01, 0xff, 0x07, 0x66, 0x89, 0x06, - 0x47, 0xfb, 0xd1, 0xa8, 0xcf, 0x41, 0x4c, 0xcd, 0x90, 0xab, 0xcf, 0x01, - 0x47, 0xfb, 0xd1, 0xaa, 0xcf, 0x01, 0x43, 0x71, 0xf1, 0xa9, 0xcf, 0x41, - 0x46, 0x5e, 0xd9, 0x6e, 0xcf, 0x01, 0x45, 0x95, 0x63, 0x54, 0xcf, 0x01, - 0x45, 0x4c, 0xe6, 0x84, 0xcf, 0x01, 0x02, 0x34, 0x0a, 0x06, 0x46, 0x9c, - 0xba, 0xbf, 0xcf, 0x41, 0x42, 0x65, 0x08, 0x50, 0xcf, 0x81, 0x06, 0x42, - 0xb3, 0x27, 0x81, 0xcf, 0x41, 0x46, 0x6e, 0xd5, 0x51, 0xcf, 0x41, 0x45, - 0xc4, 0xe1, 0x5e, 0xcf, 0x01, 0x47, 0x88, 0xd0, 0x60, 0xcf, 0x01, 0x46, - 0xb4, 0xc7, 0x61, 0xcf, 0x01, 0xb4, 0x01, 0xff, 0x44, 0x70, 0xd5, 0x5f, - 0xcf, 0x01, 0x48, 0xb2, 0xc7, 0x62, 0xcf, 0x41, 0xa5, 0x12, 0x4f, 0xcb, - 0x60, 0x6b, 0xcf, 0x01, 0x43, 0x6a, 0x7b, 0xc1, 0xcf, 0x01, 0x4b, 0x69, - 0xa2, 0x53, 0xcf, 0x41, 0x50, 0x8a, 0x63, 0x75, 0xcf, 0x01, 0x46, 0x76, - 0xdc, 0x6d, 0xcf, 0x41, 0x45, 0x65, 0xd9, 0x6f, 0xcf, 0x01, 0x48, 0x58, - 0x50, 0x5b, 0xcf, 0x41, 0x57, 0xd1, 0x2c, 0x3e, 0xcf, 0x01, 0x5b, 0x0c, - 0x1c, 0x41, 0xcf, 0x01, 0x05, 0xb9, 0x00, 0x17, 0x11, 0x15, 0x5d, 0x01, - 0xff, 0x47, 0xa6, 0x78, 0x30, 0xcf, 0x01, 0x46, 0x87, 0xbd, 0x31, 0xcf, - 0x01, 0x49, 0x84, 0xbd, 0x32, 0xcf, 0x41, 0x47, 0xd0, 0xcc, 0x24, 0xcf, - 0x01, 0xa3, 0xcf, 0x03, 0xa4, 0xc0, 0x03, 0x08, 0xea, 0xc3, 0x90, 0x03, - 0xab, 0xf4, 0x02, 0x45, 0x20, 0xe5, 0x27, 0xcf, 0x01, 0x0d, 0xe0, 0x83, - 0xb6, 0x02, 0x06, 0x62, 0xdb, 0x90, 0x02, 0xaf, 0xfd, 0x01, 0x02, 0x9c, +static const unsigned char uname2c_tree[221210] = { + 0xa1, 0xb9, 0xb2, 0x0c, 0xa2, 0xa3, 0xa9, 0x0b, 0xa3, 0x81, 0xd7, 0x09, + 0xa4, 0xc6, 0xa4, 0x09, 0xa5, 0xa7, 0xdb, 0x08, 0xa6, 0xb4, 0xcd, 0x08, + 0xa7, 0x87, 0x86, 0x08, 0xa8, 0xd7, 0xbb, 0x07, 0xa9, 0xc9, 0xa6, 0x07, + 0xaa, 0xce, 0xa0, 0x07, 0xab, 0xf4, 0xe9, 0x06, 0xac, 0xfe, 0xdc, 0x05, + 0xad, 0x8d, 0xb4, 0x04, 0xae, 0xb4, 0x8e, 0x04, 0xaf, 0xc9, 0xdf, 0x03, + 0xb0, 0xf0, 0xb2, 0x03, 0x02, 0x7c, 0x00, 0xc3, 0xb1, 0x03, 0xb2, 0xe0, + 0x8e, 0x03, 0xb3, 0xa0, 0x81, 0x02, 0xb4, 0x98, 0x85, 0x01, 0xb5, 0xf2, + 0x75, 0xb6, 0xe1, 0x56, 0xb7, 0xfb, 0x3f, 0xb8, 0x81, 0x3f, 0xb9, 0xd3, + 0x10, 0xba, 0x01, 0xff, 0x0a, 0x90, 0x1d, 0xe9, 0x0f, 0x10, 0xe6, 0x60, + 0x80, 0x0c, 0xa5, 0xd1, 0x0b, 0x50, 0x16, 0x64, 0x10, 0xf9, 0x01, 0x08, + 0x80, 0xc8, 0x06, 0x45, 0x8e, 0xe9, 0xdf, 0xf9, 0x41, 0x0a, 0x41, 0x59, + 0xaa, 0x07, 0x06, 0x3c, 0xde, 0x23, 0x11, 0x4e, 0x5d, 0x01, 0xff, 0x4e, + 0xf7, 0x76, 0x44, 0xcf, 0x01, 0x45, 0x50, 0x88, 0x45, 0xcf, 0x01, 0x06, + 0xac, 0xdd, 0x06, 0x43, 0xeb, 0x2e, 0x46, 0xcf, 0x41, 0xd2, 0x42, 0xcf, + 0x01, 0xd3, 0x43, 0xcf, 0x41, 0x02, 0x6d, 0x14, 0xf2, 0x06, 0xa4, 0xcf, + 0x06, 0x44, 0xd1, 0xef, 0x83, 0xcf, 0x01, 0x0a, 0xe7, 0xaa, 0xa3, 0x06, + 0xab, 0xf1, 0x05, 0x46, 0x06, 0xde, 0xa7, 0xcf, 0x81, 0xca, 0x05, 0x45, + 0x02, 0xe9, 0xc2, 0xcf, 0x01, 0xaf, 0x8d, 0x05, 0xb0, 0xda, 0x04, 0xb2, + 0xcb, 0x04, 0xb3, 0x4f, 0x09, 0x34, 0xc1, 0x17, 0xba, 0x01, 0xff, 0xa1, + 0x06, 0x46, 0xfd, 0xba, 0x85, 0xcf, 0x41, 0x46, 0x78, 0xde, 0x55, 0xcf, + 0x01, 0x47, 0x9c, 0x32, 0x5d, 0xcf, 0x41, 0x0c, 0x30, 0x8b, 0x18, 0x49, + 0x12, 0xbc, 0x64, 0xcf, 0x01, 0x48, 0xf0, 0xc9, 0x63, 0xcf, 0x01, 0x48, + 0xef, 0x54, 0x65, 0xcf, 0x01, 0x4b, 0xc9, 0xa3, 0x66, 0xcf, 0x41, 0x49, + 0x12, 0xbc, 0x68, 0xcf, 0x01, 0x48, 0xf0, 0xc9, 0x67, 0xcf, 0x01, 0x48, + 0xef, 0x54, 0x69, 0xcf, 0x01, 0x4b, 0xc9, 0xa3, 0x6a, 0xcf, 0x41, 0x09, + 0xfb, 0xba, 0xa3, 0x03, 0x48, 0x00, 0xc8, 0x7d, 0xcf, 0x81, 0x82, 0x03, + 0xb4, 0x01, 0xff, 0x44, 0x25, 0xef, 0x86, 0xcf, 0x81, 0xac, 0x02, 0x46, + 0xe4, 0xde, 0x56, 0xcf, 0x81, 0x95, 0x02, 0x05, 0x4c, 0xea, 0x01, 0xff, + 0x09, 0x43, 0x82, 0xe8, 0x01, 0x04, 0x11, 0xf0, 0xae, 0x01, 0xab, 0x42, + 0x4e, 0x07, 0x7a, 0x93, 0xcf, 0x01, 0x4e, 0x52, 0x69, 0x97, 0xcf, 0x01, + 0xb0, 0x20, 0xb4, 0x01, 0xff, 0x4e, 0x71, 0x78, 0x9a, 0xcf, 0x01, 0x05, + 0xa6, 0xea, 0x01, 0xff, 0x48, 0x70, 0xc6, 0xac, 0xcf, 0x01, 0x49, 0x32, + 0x9f, 0xad, 0xcf, 0x01, 0x49, 0x7b, 0xbf, 0xae, 0xcf, 0x41, 0xaf, 0x06, + 0x47, 0xf1, 0xc9, 0x92, 0xcf, 0x41, 0x4b, 0x30, 0x9f, 0x95, 0xcf, 0x01, + 0x47, 0x34, 0x9f, 0x96, 0xcf, 0x41, 0x06, 0x31, 0x8b, 0x5a, 0x02, 0x83, + 0x0a, 0x01, 0xff, 0x47, 0xe7, 0x54, 0xb5, 0xcf, 0x81, 0x06, 0x47, 0x70, + 0xac, 0x94, 0xcf, 0x41, 0x80, 0x01, 0xff, 0x04, 0x11, 0xf0, 0x0c, 0x49, + 0x32, 0x9f, 0xb6, 0xcf, 0x01, 0x47, 0x87, 0xd6, 0xbe, 0xcf, 0x41, 0x44, + 0x5c, 0x69, 0xb9, 0xcf, 0x81, 0x28, 0xaf, 0x01, 0xff, 0x4a, 0x6d, 0xac, + 0xbc, 0xcf, 0x81, 0x18, 0x49, 0x32, 0x9f, 0xba, 0xcf, 0xc1, 0x00, 0x06, + 0x50, 0x00, 0x01, 0xff, 0x50, 0x46, 0x62, 0xbb, 0xcf, 0x01, 0x50, 0x93, + 0x32, 0xb8, 0xcf, 0x41, 0x4a, 0x05, 0xa6, 0xbd, 0xcf, 0x41, 0x56, 0x8d, + 0x32, 0xb7, 0xcf, 0x41, 0x4e, 0x52, 0x69, 0x99, 0xcf, 0x01, 0x49, 0x32, + 0x9f, 0x98, 0xcf, 0x41, 0x44, 0x5c, 0x69, 0xa2, 0xcf, 0x81, 0x28, 0xaf, + 0x01, 0xff, 0x4a, 0x6d, 0xac, 0xa5, 0xcf, 0x81, 0x18, 0x49, 0x32, 0x9f, + 0xa3, 0xcf, 0xc1, 0x00, 0x06, 0x50, 0x00, 0x01, 0xff, 0x50, 0x46, 0x62, + 0xa4, 0xcf, 0x01, 0x50, 0x93, 0x32, 0xa1, 0xcf, 0x41, 0x4a, 0x05, 0xa6, + 0xa6, 0xcf, 0x41, 0x56, 0x8d, 0x32, 0xa0, 0xcf, 0x41, 0x43, 0xa0, 0x32, + 0x9b, 0xcf, 0x81, 0x16, 0xaf, 0x01, 0xff, 0x4a, 0x6d, 0xac, 0x9c, 0xcf, + 0x01, 0x49, 0x32, 0x9f, 0x9d, 0xcf, 0xc1, 0x00, 0x4c, 0x2f, 0x8b, 0x9f, + 0xcf, 0x41, 0x4c, 0x2f, 0x8b, 0x9e, 0xcf, 0x41, 0x80, 0x01, 0xff, 0x48, + 0x90, 0xca, 0x57, 0xcf, 0x01, 0x54, 0xf4, 0x46, 0x5a, 0xcf, 0x41, 0x80, + 0x01, 0xff, 0x4e, 0x52, 0x69, 0x91, 0xcf, 0x01, 0x02, 0x31, 0x01, 0x0d, + 0x49, 0xbb, 0xc1, 0x8b, 0xcf, 0xc1, 0x00, 0x4b, 0xc1, 0x97, 0x8c, 0xcf, + 0x41, 0x50, 0x66, 0x62, 0x8e, 0xcf, 0x01, 0x47, 0x50, 0x88, 0x88, 0xcf, + 0x81, 0x1e, 0x45, 0x74, 0xea, 0x8d, 0xcf, 0x01, 0x48, 0x6c, 0x97, 0x87, + 0xcf, 0xc1, 0x00, 0x03, 0x99, 0x08, 0x01, 0xff, 0x47, 0x50, 0x88, 0x89, + 0xcf, 0x01, 0x4b, 0x61, 0xa1, 0x8f, 0xcf, 0x41, 0x4b, 0x69, 0x97, 0x8a, + 0xcf, 0x41, 0x80, 0x01, 0xff, 0x02, 0x31, 0x01, 0x06, 0x48, 0x00, 0xcd, + 0x7f, 0xcf, 0x41, 0x47, 0x50, 0x88, 0x80, 0xcf, 0x01, 0x48, 0x6c, 0x97, + 0x7e, 0xcf, 0x41, 0x0d, 0x43, 0x82, 0x36, 0x07, 0x30, 0x8b, 0x1b, 0x49, + 0x12, 0xbc, 0x71, 0xcf, 0x01, 0x48, 0xef, 0x54, 0x72, 0xcf, 0x01, 0xb4, + 0x01, 0xff, 0x46, 0x71, 0x78, 0x74, 0xcf, 0x01, 0x4a, 0xca, 0xa3, 0x73, + 0xcf, 0x41, 0x4e, 0x52, 0x69, 0x77, 0xcf, 0x01, 0x05, 0xea, 0x54, 0x01, + 0xff, 0x48, 0xef, 0x54, 0x76, 0xcf, 0x01, 0x47, 0x0e, 0x7a, 0x78, 0xcf, + 0x41, 0x4b, 0x30, 0x8b, 0x7c, 0xcf, 0x01, 0x4e, 0x52, 0x69, 0x7b, 0xcf, + 0x01, 0x48, 0xf0, 0xc9, 0x79, 0xcf, 0x01, 0x48, 0xef, 0x54, 0x7a, 0xcf, + 0x41, 0x52, 0x97, 0x51, 0x6c, 0xcf, 0x01, 0x42, 0xc1, 0x18, 0x82, 0xcf, + 0x41, 0xa1, 0x1c, 0x48, 0xc8, 0xc5, 0x58, 0xcf, 0x81, 0x0f, 0xaf, 0x01, + 0xff, 0x48, 0x63, 0xa1, 0x70, 0xcf, 0x01, 0x48, 0xd0, 0xc7, 0x90, 0xcf, + 0x41, 0x4f, 0x51, 0x69, 0x59, 0xcf, 0x41, 0x43, 0xd9, 0x84, 0x5c, 0xcf, + 0x01, 0x46, 0x6e, 0xdf, 0x52, 0xcf, 0x01, 0x42, 0x90, 0x08, 0xc3, 0xcf, + 0x41, 0x45, 0xcf, 0xe4, 0xc0, 0xcf, 0x01, 0x44, 0xb5, 0xf2, 0xaf, 0xcf, + 0xc1, 0x00, 0x80, 0x01, 0xff, 0xab, 0x0c, 0x48, 0xef, 0x54, 0xb0, 0xcf, + 0x01, 0x4b, 0xc9, 0xa3, 0xb1, 0xcf, 0x41, 0x0b, 0x31, 0x8b, 0x06, 0x52, + 0xe5, 0x54, 0xb2, 0xcf, 0x41, 0x4e, 0x52, 0x69, 0xb4, 0xcf, 0x01, 0x48, + 0xef, 0x54, 0xb3, 0xcf, 0x41, 0x80, 0x01, 0xff, 0x07, 0x30, 0x8b, 0x06, + 0x47, 0xce, 0xd4, 0xa8, 0xcf, 0x41, 0x4c, 0x7f, 0x92, 0xab, 0xcf, 0x01, + 0x47, 0xce, 0xd4, 0xaa, 0xcf, 0x01, 0x43, 0xbe, 0xf4, 0xa9, 0xcf, 0x41, + 0x46, 0x50, 0xdc, 0x6e, 0xcf, 0x01, 0x45, 0x11, 0x65, 0x54, 0xcf, 0x01, + 0x45, 0x70, 0xe9, 0x84, 0xcf, 0x01, 0x02, 0x83, 0x0a, 0x06, 0x46, 0xff, + 0xbc, 0xbf, 0xcf, 0x41, 0x42, 0x90, 0x08, 0x50, 0xcf, 0x81, 0x06, 0x42, + 0x54, 0x28, 0x81, 0xcf, 0x41, 0x46, 0x4e, 0xd8, 0x51, 0xcf, 0x41, 0x45, + 0xd9, 0xe4, 0x5e, 0xcf, 0x01, 0x47, 0x5b, 0xd3, 0x60, 0xcf, 0x01, 0x46, + 0x62, 0xca, 0x61, 0xcf, 0x01, 0xb4, 0x01, 0xff, 0x44, 0x50, 0xd8, 0x5f, + 0xcf, 0x01, 0x48, 0x60, 0xca, 0x62, 0xcf, 0x41, 0xa5, 0x12, 0x4f, 0x47, + 0x62, 0x6b, 0xcf, 0x01, 0x43, 0xcb, 0x7c, 0xc1, 0xcf, 0x01, 0x4b, 0xa5, + 0xa4, 0x53, 0xcf, 0x41, 0x50, 0x06, 0x65, 0x75, 0xcf, 0x01, 0x46, 0x7a, + 0xdf, 0x6d, 0xcf, 0x41, 0x45, 0x57, 0xdc, 0x6f, 0xcf, 0x01, 0x48, 0xa1, + 0x51, 0x5b, 0xcf, 0x41, 0x57, 0x89, 0x2d, 0x3e, 0xcf, 0x01, 0x5b, 0x93, + 0x1c, 0x41, 0xcf, 0x01, 0x05, 0xb9, 0x00, 0x17, 0x11, 0x80, 0x5e, 0x01, + 0xff, 0x47, 0x07, 0x7a, 0x30, 0xcf, 0x01, 0x46, 0x05, 0xc0, 0x31, 0xcf, + 0x01, 0x49, 0x02, 0xc0, 0x32, 0xcf, 0x41, 0x47, 0xa3, 0xcf, 0x24, 0xcf, + 0x01, 0xa3, 0xcf, 0x03, 0xa4, 0xc0, 0x03, 0x08, 0x78, 0xc6, 0x90, 0x03, + 0xab, 0xf4, 0x02, 0x45, 0x35, 0xe8, 0x27, 0xcf, 0x01, 0x0d, 0x90, 0x85, + 0xb6, 0x02, 0x06, 0x5a, 0xde, 0x90, 0x02, 0xaf, 0xfd, 0x01, 0x02, 0x9c, 0x01, 0xab, 0x01, 0x02, 0x71, 0x00, 0x9a, 0x01, 0xb3, 0x76, 0xb4, 0x4d, - 0x46, 0xd8, 0xdd, 0x25, 0xcf, 0x01, 0x07, 0x94, 0xd4, 0x18, 0xba, 0x01, - 0xff, 0x48, 0x07, 0x41, 0x33, 0xcf, 0x01, 0xa5, 0x01, 0xff, 0x42, 0x13, - 0x01, 0x20, 0xcf, 0x01, 0x43, 0x6e, 0xf1, 0x2a, 0xcf, 0x41, 0x03, 0xb6, - 0x00, 0x1b, 0x03, 0x20, 0x03, 0x01, 0xff, 0x0b, 0xe4, 0x9a, 0x06, 0x46, - 0x94, 0x86, 0x1d, 0xcf, 0x41, 0x44, 0xc3, 0x00, 0x0b, 0xcf, 0x01, 0x45, + 0x46, 0xe2, 0xe0, 0x25, 0xcf, 0x01, 0x07, 0x67, 0xd7, 0x18, 0xba, 0x01, + 0xff, 0x48, 0x14, 0x42, 0x33, 0xcf, 0x01, 0xa5, 0x01, 0xff, 0x42, 0x13, + 0x01, 0x20, 0xcf, 0x01, 0x43, 0xbb, 0xf4, 0x2a, 0xcf, 0x41, 0x03, 0xb6, + 0x00, 0x1b, 0x03, 0x4b, 0x03, 0x01, 0xff, 0x0b, 0x0a, 0x9d, 0x06, 0x46, + 0x51, 0x88, 0x1d, 0xcf, 0x41, 0x44, 0xc3, 0x00, 0x0b, 0xcf, 0x01, 0x45, 0xc8, 0x00, 0x17, 0xcf, 0x41, 0x44, 0xc3, 0x00, 0x08, 0xcf, 0x01, 0x45, - 0xc8, 0x00, 0x14, 0xcf, 0x41, 0x46, 0x02, 0x77, 0x23, 0xcf, 0x01, 0x45, - 0x25, 0xc7, 0x3c, 0xcf, 0x01, 0x05, 0x9b, 0xe7, 0x01, 0xff, 0x03, 0xb6, - 0x00, 0x06, 0x49, 0x91, 0x86, 0x18, 0xcf, 0x41, 0x44, 0xc3, 0x00, 0x02, - 0xcf, 0x01, 0x45, 0xc8, 0x00, 0x0e, 0xcf, 0x41, 0x44, 0xa6, 0xed, 0x2b, - 0xcf, 0x01, 0x4e, 0xb1, 0x45, 0x3b, 0xcf, 0x01, 0x09, 0x2e, 0xbc, 0x06, - 0x53, 0x70, 0x4c, 0x1a, 0xcf, 0x41, 0x44, 0xc3, 0x00, 0x05, 0xcf, 0x01, - 0x45, 0xc8, 0x00, 0x11, 0xcf, 0x41, 0x43, 0x6b, 0xf1, 0x22, 0xcf, 0x01, - 0x45, 0x80, 0xe9, 0x2c, 0xcf, 0x41, 0xa4, 0x38, 0x06, 0xe7, 0x83, 0x01, + 0xc8, 0x00, 0x14, 0xcf, 0x41, 0x46, 0x71, 0x78, 0x23, 0xcf, 0x01, 0x45, + 0xcb, 0xc9, 0x3c, 0xcf, 0x01, 0x05, 0xbf, 0xea, 0x01, 0xff, 0x03, 0xb6, + 0x00, 0x06, 0x49, 0x4e, 0x88, 0x18, 0xcf, 0x41, 0x44, 0xc3, 0x00, 0x02, + 0xcf, 0x01, 0x45, 0xc8, 0x00, 0x0e, 0xcf, 0x41, 0x44, 0xe5, 0xf0, 0x2b, + 0xcf, 0x01, 0x4e, 0xfa, 0x46, 0x3b, 0xcf, 0x01, 0x09, 0x9a, 0xbe, 0x06, + 0x53, 0xb9, 0x4d, 0x1a, 0xcf, 0x41, 0x44, 0xc3, 0x00, 0x05, 0xcf, 0x01, + 0x45, 0xc8, 0x00, 0x11, 0xcf, 0x41, 0x43, 0xb8, 0xf4, 0x22, 0xcf, 0x01, + 0x45, 0xb3, 0xec, 0x2c, 0xcf, 0x41, 0xa4, 0x38, 0x06, 0x97, 0x85, 0x01, 0xff, 0x03, 0xb6, 0x00, 0x23, 0xb3, 0x01, 0xff, 0x02, 0x44, 0x00, 0x06, - 0x46, 0x70, 0x4c, 0x1c, 0xcf, 0x41, 0x0b, 0xe4, 0x9a, 0x06, 0x46, 0x94, - 0x86, 0x1b, 0xcf, 0x41, 0x44, 0xc3, 0x00, 0x0a, 0xcf, 0x01, 0x45, 0xc8, + 0x46, 0xb9, 0x4d, 0x1c, 0xcf, 0x41, 0x0b, 0x0a, 0x9d, 0x06, 0x46, 0x51, + 0x88, 0x1b, 0xcf, 0x41, 0x44, 0xc3, 0x00, 0x0a, 0xcf, 0x01, 0x45, 0xc8, 0x00, 0x16, 0xcf, 0x41, 0x44, 0xc3, 0x00, 0x07, 0xcf, 0x01, 0x45, 0xc8, - 0x00, 0x13, 0xcf, 0x41, 0x47, 0x33, 0x9f, 0x36, 0xcf, 0x81, 0x06, 0x46, - 0x0e, 0xde, 0x26, 0xcf, 0x41, 0x55, 0xd5, 0x37, 0x37, 0xcf, 0x41, 0x47, - 0xbb, 0xcc, 0x3a, 0xcf, 0x01, 0xee, 0x21, 0xcf, 0x01, 0x47, 0xc2, 0xd3, - 0x35, 0xcf, 0x41, 0x03, 0xb6, 0x00, 0x11, 0x0d, 0x91, 0x86, 0x01, 0xff, + 0x00, 0x13, 0xcf, 0x41, 0x47, 0x64, 0xa1, 0x36, 0xcf, 0x81, 0x06, 0x46, + 0x1e, 0xe1, 0x26, 0xcf, 0x41, 0x55, 0xa5, 0x38, 0x37, 0xcf, 0x41, 0x47, + 0x87, 0xcf, 0x3a, 0xcf, 0x01, 0xee, 0x21, 0xcf, 0x01, 0x47, 0x8e, 0xd6, + 0x35, 0xcf, 0x41, 0x03, 0xb6, 0x00, 0x11, 0x0d, 0x4e, 0x88, 0x01, 0xff, 0x44, 0xc3, 0x00, 0x01, 0xcf, 0x01, 0x45, 0xc8, 0x00, 0x0d, 0xcf, 0x41, 0x44, 0xc3, 0x00, 0x04, 0xcf, 0x01, 0x45, 0xc8, 0x00, 0x10, 0xcf, 0x41, 0x03, 0xb6, 0x00, 0x23, 0xb3, 0x01, 0xff, 0x02, 0x44, 0x00, 0x06, 0x46, - 0x70, 0x4c, 0x1e, 0xcf, 0x41, 0x0b, 0xe4, 0x9a, 0x06, 0x46, 0x94, 0x86, + 0xb9, 0x4d, 0x1e, 0xcf, 0x41, 0x0b, 0x0a, 0x9d, 0x06, 0x46, 0x51, 0x88, 0x19, 0xcf, 0x41, 0x44, 0xc3, 0x00, 0x09, 0xcf, 0x01, 0x45, 0xc8, 0x00, 0x15, 0xcf, 0x41, 0x44, 0xc3, 0x00, 0x06, 0xcf, 0x01, 0x45, 0xc8, 0x00, - 0x12, 0xcf, 0x41, 0x45, 0xf7, 0xe0, 0x29, 0xcf, 0x01, 0x44, 0x94, 0x86, - 0x40, 0xcf, 0x81, 0x06, 0x46, 0xf0, 0xdd, 0x28, 0xcf, 0x41, 0x48, 0xb2, - 0xbf, 0x2d, 0xcf, 0x41, 0x06, 0x62, 0xdb, 0x06, 0x46, 0x94, 0xd4, 0x1f, - 0xcf, 0x41, 0x03, 0xb6, 0x00, 0x11, 0x0d, 0x91, 0x86, 0x01, 0xff, 0x44, + 0x12, 0xcf, 0x41, 0x45, 0x02, 0xe4, 0x29, 0xcf, 0x01, 0x44, 0x51, 0x88, + 0x40, 0xcf, 0x81, 0x06, 0x46, 0xfa, 0xe0, 0x28, 0xcf, 0x41, 0x48, 0x30, + 0xc2, 0x2d, 0xcf, 0x41, 0x06, 0x5a, 0xde, 0x06, 0x46, 0x67, 0xd7, 0x1f, + 0xcf, 0x41, 0x03, 0xb6, 0x00, 0x11, 0x0d, 0x4e, 0x88, 0x01, 0xff, 0x44, 0xc3, 0x00, 0x00, 0xcf, 0x01, 0x45, 0xc8, 0x00, 0x0c, 0xcf, 0x41, 0x44, 0xc3, 0x00, 0x03, 0xcf, 0x01, 0x45, 0xc8, 0x00, 0x0f, 0xcf, 0x41, 0x54, - 0xfb, 0x40, 0x34, 0xcf, 0x01, 0x49, 0xa4, 0xbe, 0x3d, 0xcf, 0x41, 0x46, - 0x64, 0xd9, 0x38, 0xcf, 0x81, 0x06, 0x4a, 0xc1, 0xb0, 0x3f, 0xcf, 0x41, - 0x48, 0xf2, 0xbf, 0x39, 0xcf, 0x41, 0x48, 0xd2, 0xc1, 0x93, 0xf9, 0x01, - 0x09, 0x5b, 0xbc, 0x06, 0x42, 0xc4, 0x02, 0xe2, 0x2b, 0x40, 0x46, 0x24, - 0x60, 0x0d, 0x20, 0x00, 0x02, 0xb4, 0x01, 0x06, 0x45, 0x87, 0x4b, 0x0b, - 0x20, 0x40, 0x4c, 0x80, 0x4b, 0xff, 0xfe, 0x00, 0x48, 0xd2, 0xc5, 0x0c, - 0x20, 0x40, 0x02, 0xaf, 0x00, 0xa8, 0x03, 0x54, 0x37, 0x41, 0x33, 0x1a, - 0x01, 0x08, 0x4c, 0x16, 0x91, 0x03, 0x07, 0xc1, 0x05, 0x90, 0x01, 0x05, - 0xb9, 0x00, 0x74, 0xb3, 0x3a, 0x06, 0x6c, 0x38, 0x01, 0xff, 0x4b, 0x72, - 0x38, 0x0a, 0x1a, 0x01, 0x05, 0x2f, 0x03, 0x01, 0xff, 0xa1, 0x20, 0xe5, + 0x08, 0x42, 0x34, 0xcf, 0x01, 0x49, 0x2b, 0xc1, 0x3d, 0xcf, 0x41, 0x46, + 0x56, 0xdc, 0x38, 0xcf, 0x81, 0x06, 0x4a, 0x11, 0xb3, 0x3f, 0xcf, 0x41, + 0x48, 0x70, 0xc2, 0x39, 0xcf, 0x41, 0x48, 0x58, 0xc4, 0x93, 0xf9, 0x01, + 0x09, 0xd0, 0xbe, 0x06, 0x42, 0xef, 0x02, 0xe2, 0x2b, 0x40, 0x46, 0xa0, + 0x61, 0x0d, 0x20, 0x00, 0x02, 0xb4, 0x01, 0x06, 0x45, 0xd0, 0x4c, 0x0b, + 0x20, 0x40, 0x4c, 0xc9, 0x4c, 0xff, 0xfe, 0x00, 0x48, 0x70, 0xc8, 0x0c, + 0x20, 0x40, 0x02, 0xaf, 0x00, 0xa8, 0x03, 0x54, 0x44, 0x42, 0x33, 0x1a, + 0x01, 0x08, 0xb8, 0x16, 0x91, 0x03, 0x07, 0xec, 0x05, 0x90, 0x01, 0x05, + 0xb9, 0x00, 0x74, 0xb3, 0x3a, 0x06, 0x3c, 0x39, 0x01, 0xff, 0x4b, 0x42, + 0x39, 0x0a, 0x1a, 0x01, 0x05, 0x5a, 0x03, 0x01, 0xff, 0xa1, 0x20, 0xe5, 0x04, 0x1a, 0x01, 0xe9, 0x01, 0x1a, 0x01, 0xef, 0x06, 0x1a, 0x81, 0x0f, - 0x4a, 0xd3, 0xad, 0x09, 0x1a, 0x01, 0xf5, 0x03, 0x1a, 0xc1, 0x00, 0xe5, + 0x4a, 0x23, 0xb0, 0x09, 0x1a, 0x01, 0xf5, 0x03, 0x1a, 0xc1, 0x00, 0xe5, 0x02, 0x1a, 0x41, 0xe5, 0x05, 0x1a, 0x41, 0xe9, 0x07, 0x1a, 0x01, 0xf5, - 0x08, 0x1a, 0x41, 0x04, 0x30, 0x03, 0x06, 0x48, 0x3a, 0xc9, 0x47, 0x1a, - 0x41, 0x48, 0xd0, 0x15, 0x38, 0x1a, 0x01, 0x06, 0x4f, 0x23, 0x11, 0x02, - 0x02, 0x00, 0x01, 0xff, 0x44, 0x5d, 0x23, 0x34, 0x1a, 0x01, 0x45, 0xa3, - 0x4a, 0x39, 0x1a, 0x41, 0x4e, 0xe3, 0x24, 0x37, 0x1a, 0x01, 0x45, 0x55, - 0x23, 0x35, 0x1a, 0xc1, 0x00, 0x4e, 0xe3, 0x24, 0x36, 0x1a, 0x41, 0x4b, - 0x2c, 0x99, 0x43, 0x1a, 0x01, 0x4a, 0x03, 0xab, 0x44, 0x1a, 0x01, 0x44, - 0xa4, 0x02, 0x42, 0x1a, 0x01, 0x45, 0x59, 0x39, 0x41, 0x1a, 0x41, 0x42, - 0x2e, 0x25, 0x29, 0x1a, 0x01, 0xe1, 0x00, 0x1a, 0x01, 0xa2, 0xe5, 0x01, + 0x08, 0x1a, 0x41, 0x04, 0x5b, 0x03, 0x06, 0x48, 0xf0, 0xcb, 0x47, 0x1a, + 0x41, 0x48, 0x3c, 0x16, 0x38, 0x1a, 0x01, 0x06, 0xd7, 0x23, 0x11, 0x02, + 0x02, 0x00, 0x01, 0xff, 0x44, 0xe5, 0x23, 0x34, 0x1a, 0x01, 0x45, 0xec, + 0x4b, 0x39, 0x1a, 0x41, 0x4e, 0x6b, 0x25, 0x37, 0x1a, 0x01, 0x45, 0xdd, + 0x23, 0x35, 0x1a, 0xc1, 0x00, 0x4e, 0x6b, 0x25, 0x36, 0x1a, 0x41, 0x4b, + 0x47, 0x9b, 0x43, 0x1a, 0x01, 0x4a, 0x5d, 0xad, 0x44, 0x1a, 0x01, 0x44, + 0xa4, 0x02, 0x42, 0x1a, 0x01, 0x45, 0x29, 0x3a, 0x41, 0x1a, 0x41, 0x42, + 0xcf, 0x25, 0x29, 0x1a, 0x01, 0xe1, 0x00, 0x1a, 0x01, 0xa2, 0xe5, 0x01, 0xa3, 0xd8, 0x01, 0xa4, 0xb2, 0x01, 0xa7, 0xa5, 0x01, 0x42, 0x22, 0x00, - 0x31, 0x1a, 0x01, 0x42, 0xbd, 0x26, 0x12, 0x1a, 0x01, 0xab, 0x86, 0x01, + 0x31, 0x1a, 0x01, 0x42, 0x56, 0x19, 0x12, 0x1a, 0x01, 0xab, 0x86, 0x01, 0x42, 0x74, 0x00, 0x2c, 0x1a, 0x01, 0x42, 0x6c, 0x00, 0x22, 0x1a, 0x01, 0xae, 0x62, 0xb0, 0x56, 0x42, 0x71, 0x00, 0x2b, 0x1a, 0x01, 0xb3, 0x3e, - 0xb4, 0x19, 0x42, 0xa6, 0x0a, 0x2d, 0x1a, 0x01, 0x42, 0x34, 0x22, 0x2a, + 0xb4, 0x19, 0x42, 0xf5, 0x0a, 0x2d, 0x1a, 0x01, 0x42, 0xbc, 0x22, 0x2a, 0x1a, 0x01, 0xba, 0x01, 0xff, 0xe1, 0x28, 0x1a, 0x01, 0x42, 0x22, 0x00, 0x27, 0x1a, 0x41, 0xe1, 0x19, 0x1a, 0x01, 0x42, 0x22, 0x00, 0x1a, 0x1a, 0x01, 0xb3, 0x0d, 0xb4, 0x01, 0xff, 0xe1, 0x14, 0x1a, 0x01, 0x42, 0x22, 0x00, 0x15, 0x1a, 0x41, 0xe1, 0x23, 0x1a, 0x01, 0x42, 0x22, 0x00, 0x24, 0x1a, 0x41, 0xe1, 0x30, 0x1a, 0x01, 0x42, 0x22, 0x00, 0x2e, 0x1a, 0x01, - 0x42, 0x15, 0x06, 0x2f, 0x1a, 0x41, 0xe1, 0x1e, 0x1a, 0x01, 0x42, 0x22, + 0x42, 0x40, 0x06, 0x2f, 0x1a, 0x41, 0xe1, 0x1e, 0x1a, 0x01, 0x42, 0x22, 0x00, 0x1f, 0x1a, 0x41, 0xe1, 0x1d, 0x1a, 0x01, 0x42, 0x24, 0x02, 0x0f, - 0x1a, 0x01, 0x42, 0xff, 0x04, 0x18, 0x1a, 0x01, 0x42, 0x34, 0x22, 0x13, + 0x1a, 0x01, 0x42, 0x2a, 0x05, 0x18, 0x1a, 0x01, 0x42, 0xbc, 0x22, 0x13, 0x1a, 0x41, 0xe1, 0x0b, 0x1a, 0x01, 0x42, 0x22, 0x00, 0x0c, 0x1a, 0x01, - 0x43, 0x59, 0x20, 0x32, 0x1a, 0x41, 0xe1, 0x0d, 0x1a, 0x01, 0x42, 0x22, + 0x43, 0xfb, 0x20, 0x32, 0x1a, 0x41, 0xe1, 0x0d, 0x1a, 0x01, 0x42, 0x22, 0x00, 0x0e, 0x1a, 0x41, 0xe1, 0x1b, 0x1a, 0x01, 0xa4, 0x13, 0x42, 0x22, 0x00, 0x1c, 0x1a, 0x01, 0xba, 0x01, 0xff, 0xe1, 0x25, 0x1a, 0x01, 0x42, 0x22, 0x00, 0x26, 0x1a, 0x41, 0xe1, 0x16, 0x1a, 0x01, 0x42, 0x22, 0x00, 0x17, 0x1a, 0x41, 0xe1, 0x10, 0x1a, 0x01, 0x42, 0x22, 0x00, 0x11, 0x1a, 0x41, 0xe1, 0x20, 0x1a, 0x01, 0x42, 0x22, 0x00, 0x21, 0x1a, 0x41, 0x56, - 0xdb, 0x32, 0x45, 0x1a, 0x01, 0x49, 0x19, 0x1b, 0x3f, 0x1a, 0x41, 0x06, - 0x9a, 0x3c, 0x27, 0x06, 0x2f, 0x2d, 0x01, 0xff, 0x0d, 0x49, 0x81, 0x06, - 0x51, 0xc3, 0x59, 0x3a, 0x1a, 0x41, 0x42, 0x74, 0x00, 0x3d, 0x1a, 0x01, - 0x42, 0x71, 0x00, 0x3c, 0x1a, 0x01, 0x42, 0xa6, 0x0a, 0x3e, 0x1a, 0x01, - 0x42, 0x34, 0x22, 0x3b, 0x1a, 0x41, 0x56, 0xdb, 0x32, 0x46, 0x1a, 0x01, - 0x49, 0x19, 0x1b, 0x40, 0x1a, 0x41, 0x4e, 0xa8, 0x74, 0xff, 0x22, 0x00, - 0x56, 0x99, 0x32, 0x64, 0x2a, 0x00, 0x05, 0xc3, 0x00, 0x46, 0xb2, 0x27, - 0xb3, 0x06, 0x4a, 0x0d, 0xb0, 0x82, 0x29, 0x40, 0x06, 0x9c, 0xd7, 0x06, - 0x43, 0xf3, 0x43, 0x81, 0x29, 0x40, 0x4b, 0x16, 0x3a, 0x1f, 0x2a, 0x00, - 0xb0, 0x01, 0xff, 0x45, 0x76, 0xe4, 0x20, 0x2a, 0x00, 0x49, 0x64, 0xbc, - 0x21, 0x2a, 0x40, 0x54, 0xa7, 0x3f, 0x65, 0x2a, 0x00, 0x55, 0x0c, 0x3a, - 0x3e, 0x2a, 0x00, 0x05, 0xc9, 0x00, 0x01, 0xff, 0x4f, 0xb5, 0x69, 0x8a, - 0x29, 0x00, 0x4d, 0x8e, 0x82, 0x88, 0x29, 0x40, 0x4f, 0xb5, 0x69, 0x89, - 0x29, 0x00, 0x4d, 0x8e, 0x82, 0x87, 0x29, 0x40, 0x4b, 0x69, 0x97, 0x71, - 0xf9, 0x01, 0xa5, 0xc4, 0x2b, 0xa9, 0x06, 0x44, 0x6e, 0xee, 0x80, 0xfa, - 0x41, 0x80, 0x06, 0x46, 0x26, 0xdb, 0x2f, 0x26, 0x40, 0x08, 0x1c, 0xa3, - 0xcd, 0x28, 0x09, 0xae, 0x17, 0x01, 0xff, 0xe1, 0x0a, 0xa0, 0x80, 0xb6, - 0x28, 0xa2, 0x94, 0x26, 0xa3, 0x87, 0x24, 0xa4, 0x9d, 0x22, 0xe5, 0x14, - 0xa0, 0x80, 0x93, 0x22, 0xa6, 0xb6, 0x21, 0xa7, 0xb7, 0x1f, 0xa8, 0x8b, - 0x1b, 0xe9, 0x02, 0xa0, 0x80, 0xe1, 0x1a, 0xaa, 0xf8, 0x18, 0xab, 0xfd, - 0x17, 0xac, 0xe3, 0x16, 0xad, 0xf6, 0x14, 0xae, 0xab, 0x0e, 0xef, 0x11, - 0xa0, 0x80, 0x99, 0x0e, 0xb0, 0x95, 0x0d, 0xb1, 0x9a, 0x0c, 0xb2, 0xba, - 0x0a, 0xb3, 0xb4, 0x07, 0xb4, 0xb9, 0x06, 0x42, 0xef, 0x04, 0x0d, 0xa0, - 0x80, 0xa9, 0x06, 0xb6, 0xa4, 0x05, 0xb7, 0xe4, 0x04, 0xb8, 0x89, 0x04, - 0xb9, 0x8e, 0x03, 0xba, 0x01, 0xff, 0xe1, 0x96, 0xa2, 0x80, 0xf9, 0x02, - 0xe5, 0xa0, 0xa2, 0x80, 0xeb, 0x02, 0xa8, 0xf4, 0x01, 0xe9, 0x8f, 0xa2, - 0x80, 0xd5, 0x01, 0xef, 0x9d, 0xa2, 0x80, 0xc3, 0x01, 0xf5, 0xa4, 0xa2, - 0x80, 0x9b, 0x01, 0xf9, 0xaa, 0xa2, 0x80, 0x80, 0x01, 0xba, 0x01, 0xff, - 0xe1, 0xda, 0xa2, 0x80, 0x6c, 0xe5, 0xe0, 0xa2, 0x80, 0x5f, 0xe9, 0xd2, - 0xa2, 0x80, 0x3d, 0xef, 0xdd, 0xa2, 0x80, 0x30, 0xf5, 0xe3, 0xa2, 0x80, - 0x1a, 0xf9, 0xe9, 0xa2, 0xc0, 0x00, 0xf0, 0xea, 0xa2, 0x00, 0xf2, 0xec, - 0xa2, 0x80, 0x08, 0xf4, 0xe7, 0xa2, 0x00, 0xf8, 0xe8, 0xa2, 0x40, 0xf8, - 0xeb, 0xa2, 0x40, 0xf0, 0xe4, 0xa2, 0x00, 0xf2, 0xe6, 0xa2, 0x80, 0x04, - 0xf8, 0xe2, 0xa2, 0x40, 0xf8, 0xe5, 0xa2, 0x40, 0xf0, 0xde, 0xa2, 0x00, - 0xf8, 0xdc, 0xa2, 0x40, 0xe5, 0xd6, 0xa2, 0x80, 0x0c, 0xf0, 0xd3, 0xa2, - 0x00, 0xf4, 0xd0, 0xa2, 0x00, 0xf8, 0xd1, 0xa2, 0x40, 0xf0, 0xd7, 0xa2, - 0x00, 0xf4, 0xd4, 0xa2, 0x00, 0xf8, 0xd5, 0xa2, 0x40, 0xf0, 0xe1, 0xa2, - 0x00, 0xf8, 0xdf, 0xa2, 0x40, 0xf0, 0xdb, 0xa2, 0x00, 0xf4, 0xd8, 0xa2, - 0x00, 0xf8, 0xd9, 0xa2, 0x40, 0xf0, 0xab, 0xa2, 0x00, 0xf2, 0xad, 0xa2, - 0x80, 0x08, 0xf4, 0xa8, 0xa2, 0x00, 0xf8, 0xa9, 0xa2, 0x40, 0xf8, 0xac, - 0xa2, 0x40, 0xef, 0x99, 0xa2, 0x80, 0x15, 0xf0, 0xa5, 0xa2, 0x00, 0xf2, - 0xa7, 0xa2, 0x80, 0x08, 0xf4, 0xa2, 0xa2, 0x00, 0xf8, 0xa3, 0xa2, 0x40, - 0xf8, 0xa6, 0xa2, 0x40, 0xf0, 0x9a, 0xa2, 0x00, 0xf8, 0x98, 0xa2, 0x40, - 0xf0, 0x9e, 0xa2, 0x00, 0xf4, 0x9b, 0xa2, 0x00, 0xf8, 0x9c, 0xa2, 0x40, - 0xe5, 0x92, 0xa2, 0x80, 0x0c, 0xf0, 0x90, 0xa2, 0x00, 0xf4, 0x8d, 0xa2, - 0x00, 0xf8, 0x8e, 0xa2, 0x40, 0xf0, 0x93, 0xa2, 0x00, 0xf8, 0x91, 0xa2, - 0x40, 0xe1, 0x48, 0xa3, 0x80, 0x63, 0xe5, 0x53, 0xa3, 0x80, 0x52, 0xef, - 0x4f, 0xa3, 0x80, 0x41, 0xf5, 0x57, 0xa3, 0x80, 0x1a, 0xf9, 0x5d, 0xa3, - 0xc0, 0x00, 0xf0, 0x5e, 0xa3, 0x00, 0xf2, 0x60, 0xa3, 0x80, 0x08, 0xf4, - 0x5b, 0xa3, 0x00, 0xf8, 0x5c, 0xa3, 0x40, 0xf8, 0x5f, 0xa3, 0x40, 0xef, - 0x4b, 0xa3, 0x80, 0x15, 0xf0, 0x58, 0xa3, 0x00, 0xf2, 0x5a, 0xa3, 0x80, - 0x08, 0xf4, 0x55, 0xa3, 0x00, 0xf8, 0x56, 0xa3, 0x40, 0xf8, 0x59, 0xa3, - 0x40, 0xf0, 0x4c, 0xa3, 0x00, 0xf8, 0x4a, 0xa3, 0x40, 0xf0, 0x50, 0xa3, - 0x00, 0xf4, 0x4d, 0xa3, 0x00, 0xf8, 0x4e, 0xa3, 0x40, 0xf0, 0x54, 0xa3, - 0x00, 0xf4, 0x51, 0xa3, 0x00, 0xf8, 0x52, 0xa3, 0x40, 0xf0, 0x49, 0xa3, - 0x00, 0xf4, 0x46, 0xa3, 0x00, 0xf8, 0x47, 0xa3, 0x40, 0xf0, 0xa1, 0xa2, - 0x00, 0xf8, 0x9f, 0xa2, 0x40, 0xf0, 0x97, 0xa2, 0x00, 0xf4, 0x94, 0xa2, - 0x00, 0xf8, 0x95, 0xa2, 0x40, 0xe9, 0x73, 0xa4, 0x80, 0x56, 0xef, 0x7f, - 0xa4, 0x80, 0x45, 0xf5, 0x83, 0xa4, 0x80, 0x1a, 0xf9, 0x89, 0xa4, 0xc0, - 0x00, 0xf0, 0x8a, 0xa4, 0x00, 0xf2, 0x8c, 0xa4, 0x80, 0x08, 0xf4, 0x87, - 0xa4, 0x00, 0xf8, 0x88, 0xa4, 0x40, 0xf8, 0x8b, 0xa4, 0x40, 0xef, 0x7b, - 0xa4, 0x80, 0x15, 0xf0, 0x84, 0xa4, 0x00, 0xf2, 0x86, 0xa4, 0x80, 0x08, - 0xf4, 0x81, 0xa4, 0x00, 0xf8, 0x82, 0xa4, 0x40, 0xf8, 0x85, 0xa4, 0x40, - 0xf0, 0x7c, 0xa4, 0x00, 0xf4, 0x79, 0xa4, 0x00, 0xf8, 0x7a, 0xa4, 0x40, - 0xf0, 0x80, 0xa4, 0x00, 0xf4, 0x7d, 0xa4, 0x00, 0xf8, 0x7e, 0xa4, 0x40, - 0xe5, 0x77, 0xa4, 0x80, 0x0c, 0xf0, 0x74, 0xa4, 0x00, 0xf4, 0x71, 0xa4, - 0x00, 0xf8, 0x72, 0xa4, 0x40, 0xf0, 0x78, 0xa4, 0x00, 0xf4, 0x75, 0xa4, - 0x00, 0xf8, 0x76, 0xa4, 0x40, 0xe9, 0x5f, 0xa4, 0x80, 0x36, 0xef, 0x69, - 0xa4, 0x80, 0x25, 0x42, 0xef, 0x04, 0x66, 0xa4, 0x80, 0x1a, 0xf9, 0x6d, - 0xa4, 0xc0, 0x00, 0xf0, 0x6e, 0xa4, 0x00, 0xf2, 0x70, 0xa4, 0x80, 0x08, - 0xf4, 0x6b, 0xa4, 0x00, 0xf8, 0x6c, 0xa4, 0x40, 0xf8, 0x6f, 0xa4, 0x40, - 0xf8, 0x65, 0xa4, 0x40, 0xf0, 0x6a, 0xa4, 0x00, 0xf4, 0x67, 0xa4, 0x00, - 0xf8, 0x68, 0xa4, 0x40, 0xe5, 0x63, 0xa4, 0x80, 0x0c, 0xf0, 0x60, 0xa4, - 0x00, 0xf4, 0x5d, 0xa4, 0x00, 0xf8, 0x5e, 0xa4, 0x40, 0xf0, 0x64, 0xa4, - 0x00, 0xf4, 0x61, 0xa4, 0x00, 0xf8, 0x62, 0xa4, 0x40, 0xe1, 0x82, 0xa2, - 0x80, 0x2c, 0xe5, 0x8b, 0xa2, 0x80, 0x1f, 0xef, 0x88, 0xa2, 0x80, 0x12, - 0xf5, 0x15, 0xa0, 0xc0, 0x00, 0xef, 0x85, 0xa2, 0xc0, 0x00, 0xf0, 0x86, - 0xa2, 0x00, 0xf8, 0x84, 0xa2, 0x40, 0xf0, 0x89, 0xa2, 0x00, 0xf8, 0x87, - 0xa2, 0x40, 0xf0, 0x8c, 0xa2, 0x00, 0xf8, 0x8a, 0xa2, 0x40, 0xf0, 0x83, - 0xa2, 0x00, 0xf4, 0x80, 0xa2, 0x00, 0xf8, 0x81, 0xa2, 0x40, 0xe1, 0xec, - 0xa0, 0x80, 0x71, 0xa5, 0x67, 0xe9, 0xe4, 0xa0, 0x80, 0x45, 0xef, 0xf0, - 0xa0, 0x80, 0x34, 0xf5, 0xf6, 0xa0, 0x80, 0x1a, 0xf9, 0xfc, 0xa0, 0xc0, - 0x00, 0xf0, 0xfd, 0xa0, 0x00, 0xf2, 0xff, 0xa0, 0x80, 0x08, 0xf4, 0xfa, - 0xa0, 0x00, 0xf8, 0xfb, 0xa0, 0x40, 0xf8, 0xfe, 0xa0, 0x40, 0xf0, 0xf7, - 0xa0, 0x00, 0xf2, 0xf9, 0xa0, 0x80, 0x08, 0xf4, 0xf4, 0xa0, 0x00, 0xf8, - 0xf5, 0xa0, 0x40, 0xf8, 0xf8, 0xa0, 0x40, 0xf0, 0xf1, 0xa0, 0x00, 0xf4, - 0xee, 0xa0, 0x00, 0xf8, 0xef, 0xa0, 0x40, 0xe5, 0xe8, 0xa0, 0x80, 0x0c, - 0xf0, 0xe5, 0xa0, 0x00, 0xf4, 0xe2, 0xa0, 0x00, 0xf8, 0xe3, 0xa0, 0x40, - 0xf0, 0xe9, 0xa0, 0x00, 0xf4, 0xe6, 0xa0, 0x00, 0xf8, 0xe7, 0xa0, 0x40, - 0xf0, 0xf3, 0xa0, 0x00, 0xf8, 0xf2, 0xa0, 0x40, 0xf0, 0xed, 0xa0, 0x00, - 0xf4, 0xea, 0xa0, 0x00, 0xf8, 0xeb, 0xa0, 0x40, 0xf0, 0x0e, 0xa0, 0x00, - 0xf8, 0x0c, 0xa0, 0x40, 0xe1, 0x23, 0xa1, 0x80, 0x67, 0xe5, 0x2e, 0xa1, - 0x80, 0x5a, 0xe9, 0x1c, 0xa1, 0x80, 0x3c, 0xef, 0x2b, 0xa1, 0x80, 0x2b, - 0xf5, 0x32, 0xa1, 0xc0, 0x00, 0xef, 0x27, 0xa1, 0x80, 0x15, 0xf0, 0x33, - 0xa1, 0x00, 0xf2, 0x35, 0xa1, 0x80, 0x08, 0xf4, 0x30, 0xa1, 0x00, 0xf8, - 0x31, 0xa1, 0x40, 0xf8, 0x34, 0xa1, 0x40, 0xf0, 0x28, 0xa1, 0x00, 0xf4, - 0x25, 0xa1, 0x00, 0xf8, 0x26, 0xa1, 0x40, 0xf0, 0x2c, 0xa1, 0x00, 0xf4, - 0x29, 0xa1, 0x00, 0xf8, 0x2a, 0xa1, 0x40, 0xe5, 0x1f, 0xa1, 0x80, 0x0c, - 0xf0, 0x1d, 0xa1, 0x00, 0xf4, 0x1a, 0xa1, 0x00, 0xf8, 0x1b, 0xa1, 0x40, - 0xf0, 0x20, 0xa1, 0x00, 0xf8, 0x1e, 0xa1, 0x40, 0xf0, 0x2f, 0xa1, 0x00, - 0xf8, 0x2d, 0xa1, 0x40, 0xf0, 0x24, 0xa1, 0x00, 0xf4, 0x21, 0xa1, 0x00, - 0xf8, 0x22, 0xa1, 0x40, 0xe1, 0x12, 0xa3, 0x80, 0xf1, 0x02, 0xe5, 0x1c, - 0xa3, 0x80, 0xe3, 0x02, 0xa8, 0xec, 0x01, 0xe9, 0x0b, 0xa3, 0x80, 0xcd, - 0x01, 0xef, 0x19, 0xa3, 0x80, 0xbb, 0x01, 0xb3, 0x41, 0xf5, 0x20, 0xa3, - 0x80, 0x1a, 0xf9, 0x26, 0xa3, 0xc0, 0x00, 0xf0, 0x27, 0xa3, 0x00, 0xf2, - 0x29, 0xa3, 0x80, 0x08, 0xf4, 0x24, 0xa3, 0x00, 0xf8, 0x25, 0xa3, 0x40, - 0xf8, 0x28, 0xa3, 0x40, 0xef, 0x15, 0xa3, 0x80, 0x15, 0xf0, 0x21, 0xa3, - 0x00, 0xf2, 0x23, 0xa3, 0x80, 0x08, 0xf4, 0x1e, 0xa3, 0x00, 0xf8, 0x1f, - 0xa3, 0x40, 0xf8, 0x22, 0xa3, 0x40, 0xf0, 0x16, 0xa3, 0x00, 0xf8, 0x14, - 0xa3, 0x40, 0xe1, 0x33, 0xa3, 0x80, 0x67, 0xe5, 0x3a, 0xa3, 0x80, 0x5a, - 0xe9, 0x2c, 0xa3, 0x80, 0x3c, 0xef, 0x37, 0xa3, 0x80, 0x2b, 0xf5, 0x3e, - 0xa3, 0x80, 0x1a, 0xf9, 0x42, 0xa3, 0xc0, 0x00, 0xf0, 0x43, 0xa3, 0x00, - 0xf2, 0x45, 0xa3, 0x80, 0x08, 0xf4, 0x40, 0xa3, 0x00, 0xf8, 0x41, 0xa3, - 0x40, 0xf8, 0x44, 0xa3, 0x40, 0xf0, 0x3f, 0xa3, 0x00, 0xf4, 0x3c, 0xa3, - 0x00, 0xf8, 0x3d, 0xa3, 0x40, 0xf0, 0x38, 0xa3, 0x00, 0xf4, 0x35, 0xa3, - 0x00, 0xf8, 0x36, 0xa3, 0x40, 0xe5, 0x2f, 0xa3, 0x80, 0x0c, 0xf0, 0x2d, - 0xa3, 0x00, 0xf4, 0x2a, 0xa3, 0x00, 0xf8, 0x2b, 0xa3, 0x40, 0xf0, 0x30, - 0xa3, 0x00, 0xf8, 0x2e, 0xa3, 0x40, 0xf0, 0x3b, 0xa3, 0x00, 0xf8, 0x39, - 0xa3, 0x40, 0xf0, 0x34, 0xa3, 0x00, 0xf4, 0x31, 0xa3, 0x00, 0xf8, 0x32, - 0xa3, 0x40, 0xf0, 0x1a, 0xa3, 0x00, 0xf4, 0x17, 0xa3, 0x00, 0xf8, 0x18, - 0xa3, 0x40, 0xe5, 0x0e, 0xa3, 0x80, 0x0c, 0xf0, 0x0c, 0xa3, 0x00, 0xf4, - 0x09, 0xa3, 0x00, 0xf8, 0x0a, 0xa3, 0x40, 0xf0, 0x0f, 0xa3, 0x00, 0xf8, - 0x0d, 0xa3, 0x40, 0xe1, 0xad, 0xa3, 0x80, 0x63, 0xe5, 0xb8, 0xa3, 0x80, - 0x52, 0xef, 0xb4, 0xa3, 0x80, 0x41, 0xf5, 0xbc, 0xa3, 0x80, 0x1a, 0xf9, - 0xc2, 0xa3, 0xc0, 0x00, 0xf0, 0xc3, 0xa3, 0x00, 0xf2, 0xc5, 0xa3, 0x80, - 0x08, 0xf4, 0xc0, 0xa3, 0x00, 0xf8, 0xc1, 0xa3, 0x40, 0xf8, 0xc4, 0xa3, - 0x40, 0xef, 0xb0, 0xa3, 0x80, 0x15, 0xf0, 0xbd, 0xa3, 0x00, 0xf2, 0xbf, - 0xa3, 0x80, 0x08, 0xf4, 0xba, 0xa3, 0x00, 0xf8, 0xbb, 0xa3, 0x40, 0xf8, - 0xbe, 0xa3, 0x40, 0xf0, 0xb1, 0xa3, 0x00, 0xf8, 0xaf, 0xa3, 0x40, 0xf0, - 0xb5, 0xa3, 0x00, 0xf4, 0xb2, 0xa3, 0x00, 0xf8, 0xb3, 0xa3, 0x40, 0xf0, - 0xb9, 0xa3, 0x00, 0xf4, 0xb6, 0xa3, 0x00, 0xf8, 0xb7, 0xa3, 0x40, 0xf0, - 0xae, 0xa3, 0x00, 0xf4, 0xab, 0xa3, 0x00, 0xf8, 0xac, 0xa3, 0x40, 0xf0, - 0x1d, 0xa3, 0x00, 0xf8, 0x1b, 0xa3, 0x40, 0xf0, 0x13, 0xa3, 0x00, 0xf4, - 0x10, 0xa3, 0x00, 0xf8, 0x11, 0xa3, 0x40, 0xe1, 0xc8, 0xa3, 0x80, 0xcb, - 0x01, 0xe5, 0xd2, 0xa3, 0x80, 0xbd, 0x01, 0xef, 0xcf, 0xa3, 0x80, 0xab, - 0x01, 0xb2, 0x41, 0xf5, 0xd6, 0xa3, 0x80, 0x1a, 0xf9, 0xdc, 0xa3, 0xc0, - 0x00, 0xf0, 0xdd, 0xa3, 0x00, 0xf2, 0xdf, 0xa3, 0x80, 0x08, 0xf4, 0xda, - 0xa3, 0x00, 0xf8, 0xdb, 0xa3, 0x40, 0xf8, 0xde, 0xa3, 0x40, 0xef, 0xcb, - 0xa3, 0x80, 0x15, 0xf0, 0xd7, 0xa3, 0x00, 0xf2, 0xd9, 0xa3, 0x80, 0x08, - 0xf4, 0xd4, 0xa3, 0x00, 0xf8, 0xd5, 0xa3, 0x40, 0xf8, 0xd8, 0xa3, 0x40, - 0xf0, 0xcc, 0xa3, 0x00, 0xf8, 0xca, 0xa3, 0x40, 0xe1, 0x7d, 0xa3, 0x80, - 0x5f, 0xe5, 0x86, 0xa3, 0x80, 0x4e, 0xef, 0x82, 0xa3, 0x80, 0x3d, 0xf5, - 0x8a, 0xa3, 0x80, 0x1a, 0xf9, 0x90, 0xa3, 0xc0, 0x00, 0xf0, 0x91, 0xa3, - 0x00, 0xf2, 0x93, 0xa3, 0x80, 0x08, 0xf4, 0x8e, 0xa3, 0x00, 0xf8, 0x8f, - 0xa3, 0x40, 0xf8, 0x92, 0xa3, 0x40, 0xef, 0x7f, 0xa3, 0x80, 0x15, 0xf0, - 0x8b, 0xa3, 0x00, 0xf2, 0x8d, 0xa3, 0x80, 0x08, 0xf4, 0x88, 0xa3, 0x00, - 0xf8, 0x89, 0xa3, 0x40, 0xf8, 0x8c, 0xa3, 0x40, 0xf8, 0x7e, 0xa3, 0x40, - 0xf0, 0x83, 0xa3, 0x00, 0xf4, 0x80, 0xa3, 0x00, 0xf8, 0x81, 0xa3, 0x40, - 0xf0, 0x87, 0xa3, 0x00, 0xf4, 0x84, 0xa3, 0x00, 0xf8, 0x85, 0xa3, 0x40, - 0xf8, 0x7c, 0xa3, 0x40, 0xf0, 0xd0, 0xa3, 0x00, 0xf4, 0xcd, 0xa3, 0x00, - 0xf8, 0xce, 0xa3, 0x40, 0xf0, 0xd3, 0xa3, 0x00, 0xf8, 0xd1, 0xa3, 0x40, - 0xf0, 0xc9, 0xa3, 0x00, 0xf4, 0xc6, 0xa3, 0x00, 0xf8, 0xc7, 0xa3, 0x40, - 0xe9, 0xfe, 0xa3, 0x80, 0x56, 0xef, 0x0a, 0xa4, 0x80, 0x45, 0xf5, 0x0e, - 0xa4, 0x80, 0x1a, 0xf9, 0x14, 0xa4, 0xc0, 0x00, 0xf0, 0x15, 0xa4, 0x00, - 0xf2, 0x17, 0xa4, 0x80, 0x08, 0xf4, 0x12, 0xa4, 0x00, 0xf8, 0x13, 0xa4, - 0x40, 0xf8, 0x16, 0xa4, 0x40, 0xef, 0x06, 0xa4, 0x80, 0x15, 0xf0, 0x0f, - 0xa4, 0x00, 0xf2, 0x11, 0xa4, 0x80, 0x08, 0xf4, 0x0c, 0xa4, 0x00, 0xf8, - 0x0d, 0xa4, 0x40, 0xf8, 0x10, 0xa4, 0x40, 0xf0, 0x07, 0xa4, 0x00, 0xf4, - 0x04, 0xa4, 0x00, 0xf8, 0x05, 0xa4, 0x40, 0xf0, 0x0b, 0xa4, 0x00, 0xf4, - 0x08, 0xa4, 0x00, 0xf8, 0x09, 0xa4, 0x40, 0xe5, 0x02, 0xa4, 0x80, 0x0c, - 0xf0, 0xff, 0xa3, 0x00, 0xf4, 0xfc, 0xa3, 0x00, 0xf8, 0xfd, 0xa3, 0x40, - 0xf0, 0x03, 0xa4, 0x00, 0xf4, 0x00, 0xa4, 0x00, 0xf8, 0x01, 0xa4, 0x40, - 0xe1, 0x41, 0xa0, 0x80, 0x70, 0xe9, 0x3a, 0xa0, 0x80, 0x52, 0xef, 0x48, - 0xa0, 0x80, 0x41, 0xf5, 0x4c, 0xa0, 0x80, 0x1a, 0xf9, 0x52, 0xa0, 0xc0, - 0x00, 0xf0, 0x53, 0xa0, 0x00, 0xf2, 0x55, 0xa0, 0x80, 0x08, 0xf4, 0x50, - 0xa0, 0x00, 0xf8, 0x51, 0xa0, 0x40, 0xf8, 0x54, 0xa0, 0x40, 0xef, 0x44, - 0xa0, 0x80, 0x15, 0xf0, 0x4d, 0xa0, 0x00, 0xf2, 0x4f, 0xa0, 0x80, 0x08, - 0xf4, 0x4a, 0xa0, 0x00, 0xf8, 0x4b, 0xa0, 0x40, 0xf8, 0x4e, 0xa0, 0x40, - 0xf0, 0x45, 0xa0, 0x00, 0xf8, 0x43, 0xa0, 0x40, 0xf0, 0x49, 0xa0, 0x00, - 0xf4, 0x46, 0xa0, 0x00, 0xf8, 0x47, 0xa0, 0x40, 0xe5, 0x3d, 0xa0, 0x80, - 0x0c, 0xf0, 0x3b, 0xa0, 0x00, 0xf4, 0x38, 0xa0, 0x00, 0xf8, 0x39, 0xa0, - 0x40, 0xf0, 0x3e, 0xa0, 0x00, 0xf8, 0x3c, 0xa0, 0x40, 0xf0, 0x42, 0xa0, - 0x00, 0xf4, 0x3f, 0xa0, 0x00, 0xf8, 0x40, 0xa0, 0x40, 0xf0, 0x12, 0xa0, - 0x00, 0xf4, 0x0f, 0xa0, 0x00, 0xf8, 0x10, 0xa0, 0x40, 0xe1, 0x85, 0xa1, - 0x80, 0xba, 0x06, 0xa2, 0xc3, 0x05, 0xa4, 0xdd, 0x04, 0xe5, 0x8f, 0xa1, - 0x80, 0xcf, 0x04, 0xa7, 0xff, 0x03, 0xe9, 0x7f, 0xa1, 0x80, 0xe0, 0x03, - 0xaa, 0xf1, 0x02, 0xef, 0x8c, 0xa1, 0x80, 0xdf, 0x02, 0xb2, 0xf9, 0x01, - 0xf5, 0x93, 0xa1, 0x80, 0xd1, 0x01, 0xb9, 0x7e, 0xba, 0x01, 0xff, 0xe1, - 0xf6, 0xa2, 0x80, 0x6a, 0xe5, 0xfd, 0xa2, 0x80, 0x61, 0xe9, 0xef, 0xa2, - 0x80, 0x43, 0xaf, 0x39, 0xf5, 0xff, 0xa2, 0x80, 0x1a, 0xf9, 0x05, 0xa3, - 0xc0, 0x00, 0xf0, 0x06, 0xa3, 0x00, 0xf2, 0x08, 0xa3, 0x80, 0x08, 0xf4, - 0x03, 0xa3, 0x00, 0xf8, 0x04, 0xa3, 0x40, 0xf8, 0x07, 0xa3, 0x40, 0xef, - 0xf9, 0xa2, 0x80, 0x11, 0xf0, 0x00, 0xa3, 0x00, 0xf2, 0x02, 0xa3, 0x80, - 0x04, 0xf8, 0xfe, 0xa2, 0x40, 0xf8, 0x01, 0xa3, 0x40, 0xf8, 0xf8, 0xa2, - 0x40, 0xf0, 0xfb, 0xa2, 0x00, 0xf8, 0xfa, 0xa2, 0x40, 0xe5, 0xf2, 0xa2, - 0x80, 0x0c, 0xf0, 0xf0, 0xa2, 0x00, 0xf4, 0xed, 0xa2, 0x00, 0xf8, 0xee, - 0xa2, 0x40, 0xf0, 0xf3, 0xa2, 0x00, 0xf8, 0xf1, 0xa2, 0x40, 0xf8, 0xfc, - 0xa2, 0x40, 0xf0, 0xf7, 0xa2, 0x00, 0xf4, 0xf4, 0xa2, 0x00, 0xf8, 0xf5, - 0xa2, 0x40, 0xe9, 0x4c, 0xa4, 0x80, 0x2f, 0xef, 0x57, 0xa4, 0x80, 0x1e, - 0xf5, 0x5b, 0xa4, 0xc0, 0x00, 0xef, 0x53, 0xa4, 0x80, 0x0c, 0xf0, 0x5c, - 0xa4, 0x00, 0xf4, 0x59, 0xa4, 0x00, 0xf8, 0x5a, 0xa4, 0x40, 0xf0, 0x54, - 0xa4, 0x00, 0xf8, 0x52, 0xa4, 0x40, 0xf0, 0x58, 0xa4, 0x00, 0xf4, 0x55, - 0xa4, 0x00, 0xf8, 0x56, 0xa4, 0x40, 0xe5, 0x50, 0xa4, 0x80, 0x0c, 0xf0, - 0x4d, 0xa4, 0x00, 0xf4, 0x4a, 0xa4, 0x00, 0xf8, 0x4b, 0xa4, 0x40, 0xf0, - 0x51, 0xa4, 0x00, 0xf4, 0x4e, 0xa4, 0x00, 0xf8, 0x4f, 0xa4, 0x40, 0xef, - 0x88, 0xa1, 0x80, 0x15, 0xf0, 0x94, 0xa1, 0x00, 0xf2, 0x96, 0xa1, 0x80, - 0x08, 0xf4, 0x91, 0xa1, 0x00, 0xf8, 0x92, 0xa1, 0x40, 0xf8, 0x95, 0xa1, - 0x40, 0xf0, 0x89, 0xa1, 0x00, 0xf8, 0x87, 0xa1, 0x40, 0xe1, 0x96, 0xa3, - 0x80, 0x52, 0xe5, 0x9d, 0xa3, 0x80, 0x41, 0xef, 0x99, 0xa3, 0x80, 0x34, - 0xf5, 0xa1, 0xa3, 0x80, 0x1a, 0xf9, 0xa7, 0xa3, 0xc0, 0x00, 0xf0, 0xa8, - 0xa3, 0x00, 0xf2, 0xaa, 0xa3, 0x80, 0x08, 0xf4, 0xa5, 0xa3, 0x00, 0xf8, - 0xa6, 0xa3, 0x40, 0xf8, 0xa9, 0xa3, 0x40, 0xf0, 0xa2, 0xa3, 0x00, 0xf2, - 0xa4, 0xa3, 0x80, 0x08, 0xf4, 0x9f, 0xa3, 0x00, 0xf8, 0xa0, 0xa3, 0x40, - 0xf8, 0xa3, 0xa3, 0x40, 0xf0, 0x9a, 0xa3, 0x00, 0xf8, 0x98, 0xa3, 0x40, - 0xf0, 0x9e, 0xa3, 0x00, 0xf4, 0x9b, 0xa3, 0x00, 0xf8, 0x9c, 0xa3, 0x40, - 0xf0, 0x97, 0xa3, 0x00, 0xf4, 0x94, 0xa3, 0x00, 0xf8, 0x95, 0xa3, 0x40, - 0xf0, 0x8d, 0xa1, 0x00, 0xf4, 0x8a, 0xa1, 0x00, 0xf8, 0x8b, 0xa1, 0x40, - 0xe9, 0x33, 0xa4, 0x80, 0x4a, 0xef, 0x3d, 0xa4, 0x80, 0x39, 0xf5, 0x40, - 0xa4, 0x80, 0x1a, 0xf9, 0x46, 0xa4, 0xc0, 0x00, 0xf0, 0x47, 0xa4, 0x00, - 0xf2, 0x49, 0xa4, 0x80, 0x08, 0xf4, 0x44, 0xa4, 0x00, 0xf8, 0x45, 0xa4, - 0x40, 0xf8, 0x48, 0xa4, 0x40, 0xef, 0x3a, 0xa4, 0x80, 0x11, 0xf0, 0x41, - 0xa4, 0x00, 0xf2, 0x43, 0xa4, 0x80, 0x04, 0xf8, 0x3f, 0xa4, 0x40, 0xf8, - 0x42, 0xa4, 0x40, 0xf8, 0x39, 0xa4, 0x40, 0xf0, 0x3e, 0xa4, 0x00, 0xf4, - 0x3b, 0xa4, 0x00, 0xf8, 0x3c, 0xa4, 0x40, 0xe5, 0x37, 0xa4, 0x80, 0x0c, - 0xf0, 0x34, 0xa4, 0x00, 0xf4, 0x31, 0xa4, 0x00, 0xf8, 0x32, 0xa4, 0x40, - 0xf0, 0x38, 0xa4, 0x00, 0xf4, 0x35, 0xa4, 0x00, 0xf8, 0x36, 0xa4, 0x40, - 0xe5, 0x82, 0xa1, 0x80, 0x0c, 0xf0, 0x80, 0xa1, 0x00, 0xf4, 0x7d, 0xa1, - 0x00, 0xf8, 0x7e, 0xa1, 0x40, 0xf0, 0x83, 0xa1, 0x00, 0xf8, 0x81, 0xa1, - 0x40, 0xe1, 0x62, 0xa2, 0x80, 0x3c, 0xe5, 0x6c, 0xa2, 0x80, 0x2f, 0x42, - 0xc9, 0x02, 0x5e, 0xa2, 0x80, 0x20, 0xef, 0x69, 0xa2, 0x80, 0x0f, 0x42, - 0xef, 0x04, 0x66, 0xa2, 0xc0, 0x00, 0xf4, 0x64, 0xa2, 0x00, 0xf8, 0x65, - 0xa2, 0x40, 0xf0, 0x6a, 0xa2, 0x00, 0xf4, 0x67, 0xa2, 0x00, 0xf8, 0x68, - 0xa2, 0x40, 0xf0, 0x5f, 0xa2, 0x00, 0xf8, 0x5d, 0xa2, 0x40, 0xf0, 0x6d, - 0xa2, 0x00, 0xf8, 0x6b, 0xa2, 0x40, 0xf0, 0x63, 0xa2, 0x00, 0xf4, 0x60, - 0xa2, 0x00, 0xf8, 0x61, 0xa2, 0x40, 0xf0, 0x90, 0xa1, 0x00, 0xf8, 0x8e, - 0xa1, 0x40, 0xe1, 0x59, 0xa1, 0x80, 0x52, 0xe5, 0x60, 0xa1, 0x80, 0x45, - 0xe9, 0x53, 0xa1, 0x80, 0x2b, 0xef, 0x5d, 0xa1, 0x80, 0x1a, 0xf5, 0x64, - 0xa1, 0xc0, 0x00, 0xf0, 0x65, 0xa1, 0x00, 0xf2, 0x67, 0xa1, 0x80, 0x08, - 0xf4, 0x62, 0xa1, 0x00, 0xf8, 0x63, 0xa1, 0x40, 0xf8, 0x66, 0xa1, 0x40, - 0xf0, 0x5e, 0xa1, 0x00, 0xf4, 0x5b, 0xa1, 0x00, 0xf8, 0x5c, 0xa1, 0x40, - 0xe5, 0x56, 0xa1, 0x80, 0x0c, 0xf0, 0x54, 0xa1, 0x00, 0xf4, 0x51, 0xa1, - 0x00, 0xf8, 0x52, 0xa1, 0x40, 0xf8, 0x55, 0xa1, 0x40, 0xf0, 0x61, 0xa1, - 0x00, 0xf8, 0x5f, 0xa1, 0x40, 0xf0, 0x5a, 0xa1, 0x00, 0xf4, 0x57, 0xa1, - 0x00, 0xf8, 0x58, 0xa1, 0x40, 0xe1, 0x7f, 0xa0, 0x80, 0x63, 0xe9, 0x78, - 0xa0, 0x80, 0x45, 0xef, 0x83, 0xa0, 0x80, 0x34, 0xf5, 0x87, 0xa0, 0x80, - 0x1a, 0xf9, 0x8d, 0xa0, 0xc0, 0x00, 0xf0, 0x8e, 0xa0, 0x00, 0xf2, 0x90, - 0xa0, 0x80, 0x08, 0xf4, 0x8b, 0xa0, 0x00, 0xf8, 0x8c, 0xa0, 0x40, 0xf8, - 0x8f, 0xa0, 0x40, 0xf0, 0x88, 0xa0, 0x00, 0xf2, 0x8a, 0xa0, 0x80, 0x08, - 0xf4, 0x85, 0xa0, 0x00, 0xf8, 0x86, 0xa0, 0x40, 0xf8, 0x89, 0xa0, 0x40, - 0xf0, 0x84, 0xa0, 0x00, 0xf4, 0x81, 0xa0, 0x00, 0xf8, 0x82, 0xa0, 0x40, - 0xe5, 0x7b, 0xa0, 0x80, 0x0c, 0xf0, 0x79, 0xa0, 0x00, 0xf4, 0x76, 0xa0, - 0x00, 0xf8, 0x77, 0xa0, 0x40, 0xf0, 0x7c, 0xa0, 0x00, 0xf8, 0x7a, 0xa0, - 0x40, 0xf0, 0x80, 0xa0, 0x00, 0xf4, 0x7d, 0xa0, 0x00, 0xf8, 0x7e, 0xa0, - 0x40, 0xf0, 0x86, 0xa1, 0x00, 0xf8, 0x84, 0xa1, 0x40, 0xe1, 0xb7, 0xa0, - 0x80, 0xd8, 0x01, 0xe5, 0xc2, 0xa0, 0x80, 0xce, 0x01, 0xa7, 0x6b, 0xe9, - 0xb0, 0xa0, 0x80, 0x4d, 0xef, 0xbf, 0xa0, 0x80, 0x3c, 0xf5, 0xc5, 0xa0, - 0x80, 0x11, 0xf9, 0xcb, 0xa0, 0xc0, 0x00, 0xf0, 0xcc, 0xa0, 0x00, 0xf4, - 0xc9, 0xa0, 0x00, 0xf8, 0xca, 0xa0, 0x40, 0xef, 0xbb, 0xa0, 0x80, 0x15, - 0xf0, 0xc6, 0xa0, 0x00, 0xf2, 0xc8, 0xa0, 0x80, 0x08, 0xf4, 0xc3, 0xa0, - 0x00, 0xf8, 0xc4, 0xa0, 0x40, 0xf8, 0xc7, 0xa0, 0x40, 0xf0, 0xbc, 0xa0, - 0x00, 0xf4, 0xb9, 0xa0, 0x00, 0xf8, 0xba, 0xa0, 0x40, 0xf0, 0xc0, 0xa0, - 0x00, 0xf4, 0xbd, 0xa0, 0x00, 0xf8, 0xbe, 0xa0, 0x40, 0xe5, 0xb3, 0xa0, - 0x80, 0x0c, 0xf0, 0xb1, 0xa0, 0x00, 0xf4, 0xae, 0xa0, 0x00, 0xf8, 0xaf, - 0xa0, 0x40, 0xf0, 0xb4, 0xa0, 0x00, 0xf8, 0xb2, 0xa0, 0x40, 0xe1, 0x34, - 0xa2, 0x80, 0x50, 0xe5, 0x3e, 0xa2, 0x80, 0x43, 0x42, 0xc9, 0x02, 0x31, - 0xa2, 0x80, 0x38, 0xef, 0x3b, 0xa2, 0x80, 0x27, 0xf5, 0x42, 0xa2, 0xc0, - 0x00, 0xef, 0x37, 0xa2, 0x80, 0x15, 0xf0, 0x43, 0xa2, 0x00, 0xf2, 0x45, - 0xa2, 0x80, 0x08, 0xf4, 0x40, 0xa2, 0x00, 0xf8, 0x41, 0xa2, 0x40, 0xf8, - 0x44, 0xa2, 0x40, 0xf0, 0x38, 0xa2, 0x00, 0xf8, 0x36, 0xa2, 0x40, 0xf0, - 0x3c, 0xa2, 0x00, 0xf4, 0x39, 0xa2, 0x00, 0xf8, 0x3a, 0xa2, 0x40, 0xf8, - 0x30, 0xa2, 0x40, 0xf0, 0x3f, 0xa2, 0x00, 0xf8, 0x3d, 0xa2, 0x40, 0xf0, - 0x35, 0xa2, 0x00, 0xf4, 0x32, 0xa2, 0x00, 0xf8, 0x33, 0xa2, 0x40, 0xf8, - 0xc1, 0xa0, 0x40, 0xf0, 0xb8, 0xa0, 0x00, 0xf4, 0xb5, 0xa0, 0x00, 0xf8, - 0xb6, 0xa0, 0x40, 0xe1, 0xc1, 0xa1, 0x80, 0x85, 0x01, 0xe5, 0xcc, 0xa1, - 0x80, 0x78, 0xe9, 0xb9, 0xa1, 0x80, 0x56, 0xef, 0xc9, 0xa1, 0x80, 0x45, - 0xf5, 0xd0, 0xa1, 0x80, 0x1a, 0xf9, 0xd6, 0xa1, 0xc0, 0x00, 0xf0, 0xd7, - 0xa1, 0x00, 0xf2, 0xd9, 0xa1, 0x80, 0x08, 0xf4, 0xd4, 0xa1, 0x00, 0xf8, - 0xd5, 0xa1, 0x40, 0xf8, 0xd8, 0xa1, 0x40, 0xef, 0xc5, 0xa1, 0x80, 0x15, - 0xf0, 0xd1, 0xa1, 0x00, 0xf2, 0xd3, 0xa1, 0x80, 0x08, 0xf4, 0xce, 0xa1, - 0x00, 0xf8, 0xcf, 0xa1, 0x40, 0xf8, 0xd2, 0xa1, 0x40, 0xf0, 0xc6, 0xa1, - 0x00, 0xf4, 0xc3, 0xa1, 0x00, 0xf8, 0xc4, 0xa1, 0x40, 0xf0, 0xca, 0xa1, - 0x00, 0xf4, 0xc7, 0xa1, 0x00, 0xf8, 0xc8, 0xa1, 0x40, 0xe5, 0xbd, 0xa1, - 0x80, 0x0c, 0xf0, 0xba, 0xa1, 0x00, 0xf4, 0xb7, 0xa1, 0x00, 0xf8, 0xb8, - 0xa1, 0x40, 0xf0, 0xbe, 0xa1, 0x00, 0xf4, 0xbb, 0xa1, 0x00, 0xf8, 0xbc, - 0xa1, 0x40, 0xf0, 0xcd, 0xa1, 0x00, 0xf8, 0xcb, 0xa1, 0x40, 0xf0, 0xc2, - 0xa1, 0x00, 0xf4, 0xbf, 0xa1, 0x00, 0xf8, 0xc0, 0xa1, 0x40, 0xe1, 0x01, - 0xa2, 0x80, 0x67, 0xe5, 0x0c, 0xa2, 0x80, 0x56, 0xe9, 0xfa, 0xa1, 0x80, - 0x38, 0xef, 0x08, 0xa2, 0x80, 0x27, 0xf5, 0x10, 0xa2, 0xc0, 0x00, 0xef, - 0x04, 0xa2, 0x80, 0x15, 0xf0, 0x11, 0xa2, 0x00, 0xf2, 0x13, 0xa2, 0x80, - 0x08, 0xf4, 0x0e, 0xa2, 0x00, 0xf8, 0x0f, 0xa2, 0x40, 0xf8, 0x12, 0xa2, - 0x40, 0xf0, 0x05, 0xa2, 0x00, 0xf8, 0x03, 0xa2, 0x40, 0xf0, 0x09, 0xa2, - 0x00, 0xf4, 0x06, 0xa2, 0x00, 0xf8, 0x07, 0xa2, 0x40, 0xe5, 0xfd, 0xa1, - 0x80, 0x0c, 0xf0, 0xfb, 0xa1, 0x00, 0xf4, 0xf8, 0xa1, 0x00, 0xf8, 0xf9, - 0xa1, 0x40, 0xf0, 0xfe, 0xa1, 0x00, 0xf8, 0xfc, 0xa1, 0x40, 0xf0, 0x0d, - 0xa2, 0x00, 0xf4, 0x0a, 0xa2, 0x00, 0xf8, 0x0b, 0xa2, 0x40, 0xf0, 0x02, - 0xa2, 0x00, 0xf4, 0xff, 0xa1, 0x00, 0xf8, 0x00, 0xa2, 0x40, 0xe9, 0xe2, - 0xa3, 0x80, 0xc3, 0x01, 0xaa, 0x56, 0xef, 0xee, 0xa3, 0x80, 0x45, 0xf5, - 0xf2, 0xa3, 0x80, 0x1a, 0xf9, 0xf8, 0xa3, 0xc0, 0x00, 0xf0, 0xf9, 0xa3, - 0x00, 0xf2, 0xfb, 0xa3, 0x80, 0x08, 0xf4, 0xf6, 0xa3, 0x00, 0xf8, 0xf7, - 0xa3, 0x40, 0xf8, 0xfa, 0xa3, 0x40, 0xef, 0xea, 0xa3, 0x80, 0x15, 0xf0, - 0xf3, 0xa3, 0x00, 0xf2, 0xf5, 0xa3, 0x80, 0x08, 0xf4, 0xf0, 0xa3, 0x00, - 0xf8, 0xf1, 0xa3, 0x40, 0xf8, 0xf4, 0xa3, 0x40, 0xf0, 0xeb, 0xa3, 0x00, - 0xf4, 0xe8, 0xa3, 0x00, 0xf8, 0xe9, 0xa3, 0x40, 0xf0, 0xef, 0xa3, 0x00, - 0xf4, 0xec, 0xa3, 0x00, 0xf8, 0xed, 0xa3, 0x40, 0xe9, 0x1a, 0xa4, 0x80, - 0x49, 0xef, 0x25, 0xa4, 0x80, 0x38, 0xf5, 0x29, 0xa4, 0x80, 0x11, 0xf9, - 0x2f, 0xa4, 0xc0, 0x00, 0xf0, 0x30, 0xa4, 0x00, 0xf4, 0x2d, 0xa4, 0x00, - 0xf8, 0x2e, 0xa4, 0x40, 0xef, 0x21, 0xa4, 0x80, 0x15, 0xf0, 0x2a, 0xa4, - 0x00, 0xf2, 0x2c, 0xa4, 0x80, 0x08, 0xf4, 0x27, 0xa4, 0x00, 0xf8, 0x28, - 0xa4, 0x40, 0xf8, 0x2b, 0xa4, 0x40, 0xf0, 0x22, 0xa4, 0x00, 0xf8, 0x20, - 0xa4, 0x40, 0xf0, 0x26, 0xa4, 0x00, 0xf4, 0x23, 0xa4, 0x00, 0xf8, 0x24, - 0xa4, 0x40, 0xe5, 0x1e, 0xa4, 0x80, 0x0c, 0xf0, 0x1b, 0xa4, 0x00, 0xf4, - 0x18, 0xa4, 0x00, 0xf8, 0x19, 0xa4, 0x40, 0xf0, 0x1f, 0xa4, 0x00, 0xf4, - 0x1c, 0xa4, 0x00, 0xf8, 0x1d, 0xa4, 0x40, 0xe5, 0xe6, 0xa3, 0x80, 0x0c, - 0xf0, 0xe3, 0xa3, 0x00, 0xf4, 0xe0, 0xa3, 0x00, 0xf8, 0xe1, 0xa3, 0x40, - 0xf0, 0xe7, 0xa3, 0x00, 0xf4, 0xe4, 0xa3, 0x00, 0xf8, 0xe5, 0xa3, 0x40, - 0xe5, 0x06, 0xa0, 0x80, 0x13, 0xf0, 0x03, 0xa0, 0x00, 0xf4, 0x00, 0xa0, - 0x80, 0x04, 0xf8, 0x01, 0xa0, 0x40, 0x4c, 0xb8, 0x1f, 0x15, 0xa0, 0x40, - 0xf0, 0x07, 0xa0, 0x00, 0xf4, 0x04, 0xa0, 0x00, 0xf8, 0x05, 0xa0, 0x40, - 0xe1, 0x73, 0xa2, 0x80, 0x97, 0x04, 0xe5, 0x7e, 0xa2, 0x80, 0x89, 0x04, - 0xa9, 0xf9, 0x03, 0xac, 0xec, 0x02, 0xad, 0xec, 0x01, 0xae, 0x8b, 0x01, - 0xef, 0x7b, 0xa2, 0x80, 0x7a, 0x42, 0xef, 0x04, 0x77, 0xa2, 0x80, 0x67, - 0xb8, 0x01, 0xff, 0xe1, 0x50, 0xa2, 0x80, 0x53, 0xe5, 0x5b, 0xa2, 0x80, - 0x46, 0xe9, 0x48, 0xa2, 0x80, 0x24, 0xef, 0x58, 0xa2, 0x80, 0x13, 0x42, - 0xef, 0x04, 0x54, 0xa2, 0xc0, 0x00, 0xf0, 0x55, 0xa2, 0x00, 0xf4, 0x52, - 0xa2, 0x00, 0xf8, 0x53, 0xa2, 0x40, 0xf0, 0x59, 0xa2, 0x00, 0xf4, 0x56, - 0xa2, 0x00, 0xf8, 0x57, 0xa2, 0x40, 0xe5, 0x4c, 0xa2, 0x80, 0x0c, 0xf0, - 0x49, 0xa2, 0x00, 0xf4, 0x46, 0xa2, 0x00, 0xf8, 0x47, 0xa2, 0x40, 0xf0, - 0x4d, 0xa2, 0x00, 0xf4, 0x4a, 0xa2, 0x00, 0xf8, 0x4b, 0xa2, 0x40, 0xf0, - 0x5c, 0xa2, 0x00, 0xf8, 0x5a, 0xa2, 0x40, 0xf0, 0x51, 0xa2, 0x00, 0xf4, - 0x4e, 0xa2, 0x00, 0xf8, 0x4f, 0xa2, 0x40, 0xf0, 0x78, 0xa2, 0x00, 0xf4, - 0x75, 0xa2, 0x00, 0xf8, 0x76, 0xa2, 0x40, 0xf0, 0x7c, 0xa2, 0x00, 0xf4, - 0x79, 0xa2, 0x00, 0xf8, 0x7a, 0xa2, 0x40, 0xe1, 0x72, 0xa1, 0x80, 0x4d, - 0xe5, 0x7a, 0xa1, 0x80, 0x40, 0xe9, 0x6a, 0xa1, 0x80, 0x1e, 0xaf, 0x10, - 0xb5, 0x01, 0xff, 0xef, 0x75, 0xa1, 0x80, 0x04, 0xf4, 0x7c, 0xa1, 0x40, - 0xf8, 0x74, 0xa1, 0x40, 0xf0, 0x78, 0xa1, 0x00, 0xf4, 0x76, 0xa1, 0x00, - 0xf8, 0x77, 0xa1, 0x40, 0xe5, 0x6e, 0xa1, 0x80, 0x0c, 0xf0, 0x6b, 0xa1, - 0x00, 0xf4, 0x68, 0xa1, 0x00, 0xf8, 0x69, 0xa1, 0x40, 0xf0, 0x6f, 0xa1, - 0x00, 0xf4, 0x6c, 0xa1, 0x00, 0xf8, 0x6d, 0xa1, 0x40, 0xf0, 0x7b, 0xa1, - 0x00, 0xf8, 0x79, 0xa1, 0x40, 0xf0, 0x73, 0xa1, 0x00, 0xf4, 0x70, 0xa1, - 0x00, 0xf8, 0x71, 0xa1, 0x40, 0xe1, 0x9a, 0xa0, 0x80, 0x6c, 0xe9, 0x93, - 0xa0, 0x80, 0x4e, 0xef, 0xa1, 0xa0, 0x80, 0x3d, 0xf5, 0xa5, 0xa0, 0x80, - 0x16, 0xf9, 0xaa, 0xa0, 0xc0, 0x00, 0xf0, 0xab, 0xa0, 0x00, 0xf2, 0xad, - 0xa0, 0x80, 0x04, 0xf8, 0xa9, 0xa0, 0x40, 0xf8, 0xac, 0xa0, 0x40, 0xef, - 0x9d, 0xa0, 0x80, 0x15, 0xf0, 0xa6, 0xa0, 0x00, 0xf2, 0xa8, 0xa0, 0x80, - 0x08, 0xf4, 0xa3, 0xa0, 0x00, 0xf8, 0xa4, 0xa0, 0x40, 0xf8, 0xa7, 0xa0, - 0x40, 0xf0, 0x9e, 0xa0, 0x00, 0xf8, 0x9c, 0xa0, 0x40, 0xf0, 0xa2, 0xa0, - 0x00, 0xf4, 0x9f, 0xa0, 0x00, 0xf8, 0xa0, 0xa0, 0x40, 0xe5, 0x96, 0xa0, - 0x80, 0x0c, 0xf0, 0x94, 0xa0, 0x00, 0xf4, 0x91, 0xa0, 0x00, 0xf8, 0x92, - 0xa0, 0x40, 0xf0, 0x97, 0xa0, 0x00, 0xf8, 0x95, 0xa0, 0x40, 0xf0, 0x9b, - 0xa0, 0x00, 0xf4, 0x98, 0xa0, 0x00, 0xf8, 0x99, 0xa0, 0x40, 0xe1, 0xa0, - 0xa1, 0x80, 0x79, 0xe5, 0xa9, 0xa1, 0x80, 0x6c, 0xe9, 0x99, 0xa1, 0x80, - 0x4e, 0xef, 0xa6, 0xa1, 0x80, 0x41, 0xf5, 0xad, 0xa1, 0x80, 0x1a, 0xf9, - 0xb3, 0xa1, 0xc0, 0x00, 0xf0, 0xb4, 0xa1, 0x00, 0xf2, 0xb6, 0xa1, 0x80, - 0x08, 0xf4, 0xb1, 0xa1, 0x00, 0xf8, 0xb2, 0xa1, 0x40, 0xf8, 0xb5, 0xa1, - 0x40, 0xef, 0xa3, 0xa1, 0x80, 0x15, 0xf0, 0xae, 0xa1, 0x00, 0xf2, 0xb0, - 0xa1, 0x80, 0x08, 0xf4, 0xab, 0xa1, 0x00, 0xf8, 0xac, 0xa1, 0x40, 0xf8, - 0xaf, 0xa1, 0x40, 0xf0, 0xa4, 0xa1, 0x00, 0xf8, 0xa2, 0xa1, 0x40, 0xf0, - 0xa7, 0xa1, 0x00, 0xf8, 0xa5, 0xa1, 0x40, 0xe5, 0x9c, 0xa1, 0x80, 0x0c, - 0xf0, 0x9a, 0xa1, 0x00, 0xf4, 0x97, 0xa1, 0x00, 0xf8, 0x98, 0xa1, 0x40, - 0xf0, 0x9d, 0xa1, 0x00, 0xf8, 0x9b, 0xa1, 0x40, 0xf0, 0xaa, 0xa1, 0x00, - 0xf8, 0xa8, 0xa1, 0x40, 0xf0, 0xa1, 0xa1, 0x00, 0xf4, 0x9e, 0xa1, 0x00, - 0xf8, 0x9f, 0xa1, 0x40, 0xe5, 0x70, 0xa2, 0x80, 0x04, 0xf4, 0x6e, 0xa2, - 0x40, 0xf8, 0x6f, 0xa2, 0x40, 0xf0, 0x7f, 0xa2, 0x00, 0xf8, 0x7d, 0xa2, - 0x40, 0xf0, 0x74, 0xa2, 0x00, 0xf4, 0x71, 0xa2, 0x00, 0xf8, 0x72, 0xa2, - 0x40, 0xe1, 0xe4, 0xa1, 0x80, 0xea, 0x01, 0xe5, 0xf0, 0xa1, 0x80, 0xd8, - 0x01, 0xa7, 0x5e, 0xe9, 0xdc, 0xa1, 0x80, 0x3c, 0xef, 0xec, 0xa1, 0x80, - 0x2b, 0xf5, 0xf4, 0xa1, 0xc0, 0x00, 0xef, 0xe8, 0xa1, 0x80, 0x15, 0xf0, - 0xf5, 0xa1, 0x00, 0xf2, 0xf7, 0xa1, 0x80, 0x08, 0xf4, 0xf2, 0xa1, 0x00, - 0xf8, 0xf3, 0xa1, 0x40, 0xf8, 0xf6, 0xa1, 0x40, 0xf0, 0xe9, 0xa1, 0x00, - 0xf4, 0xe6, 0xa1, 0x00, 0xf8, 0xe7, 0xa1, 0x40, 0xf0, 0xed, 0xa1, 0x00, - 0xf4, 0xea, 0xa1, 0x00, 0xf8, 0xeb, 0xa1, 0x40, 0xe5, 0xe0, 0xa1, 0x80, - 0x0c, 0xf0, 0xdd, 0xa1, 0x00, 0xf4, 0xda, 0xa1, 0x00, 0xf8, 0xdb, 0xa1, - 0x40, 0xf0, 0xe1, 0xa1, 0x00, 0xf4, 0xde, 0xa1, 0x00, 0xf8, 0xdf, 0xa1, - 0x40, 0xe1, 0x1c, 0xa2, 0x80, 0x67, 0xe5, 0x28, 0xa2, 0x80, 0x56, 0xe9, - 0x16, 0xa2, 0x80, 0x3c, 0xef, 0x24, 0xa2, 0x80, 0x2b, 0xf5, 0x2c, 0xa2, - 0xc0, 0x00, 0xef, 0x20, 0xa2, 0x80, 0x15, 0xf0, 0x2d, 0xa2, 0x00, 0xf2, - 0x2f, 0xa2, 0x80, 0x08, 0xf4, 0x2a, 0xa2, 0x00, 0xf8, 0x2b, 0xa2, 0x40, - 0xf8, 0x2e, 0xa2, 0x40, 0xf0, 0x21, 0xa2, 0x00, 0xf4, 0x1e, 0xa2, 0x00, - 0xf8, 0x1f, 0xa2, 0x40, 0xf0, 0x25, 0xa2, 0x00, 0xf4, 0x22, 0xa2, 0x00, - 0xf8, 0x23, 0xa2, 0x40, 0xe5, 0x18, 0xa2, 0x80, 0x08, 0xf4, 0x14, 0xa2, - 0x00, 0xf8, 0x15, 0xa2, 0x40, 0xf0, 0x19, 0xa2, 0x00, 0xf8, 0x17, 0xa2, - 0x40, 0xf0, 0x29, 0xa2, 0x00, 0xf4, 0x26, 0xa2, 0x00, 0xf8, 0x27, 0xa2, - 0x40, 0xf0, 0x1d, 0xa2, 0x00, 0xf4, 0x1a, 0xa2, 0x00, 0xf8, 0x1b, 0xa2, - 0x40, 0xf0, 0xf1, 0xa1, 0x00, 0xf4, 0xee, 0xa1, 0x00, 0xf8, 0xef, 0xa1, - 0x40, 0xf0, 0xe5, 0xa1, 0x00, 0xf4, 0xe2, 0xa1, 0x00, 0xf8, 0xe3, 0xa1, - 0x40, 0xe1, 0xd3, 0xa0, 0x80, 0x49, 0xe9, 0xcf, 0xa0, 0x80, 0x38, 0xef, - 0xd6, 0xa0, 0x80, 0x2b, 0xf5, 0xda, 0xa0, 0x80, 0x11, 0xf9, 0xe0, 0xa0, - 0xc0, 0x00, 0xf0, 0xe1, 0xa0, 0x00, 0xf4, 0xde, 0xa0, 0x00, 0xf8, 0xdf, - 0xa0, 0x40, 0xf0, 0xdb, 0xa0, 0x00, 0xf2, 0xdd, 0xa0, 0x80, 0x08, 0xf4, - 0xd8, 0xa0, 0x00, 0xf8, 0xd9, 0xa0, 0x40, 0xf8, 0xdc, 0xa0, 0x40, 0xf0, - 0xd7, 0xa0, 0x00, 0xf8, 0xd5, 0xa0, 0x40, 0xf0, 0xd0, 0xa0, 0x00, 0xf4, - 0xcd, 0xa0, 0x00, 0xf8, 0xce, 0xa0, 0x40, 0xf0, 0xd4, 0xa0, 0x00, 0xf4, - 0xd1, 0xa0, 0x00, 0xf8, 0xd2, 0xa0, 0x40, 0xf8, 0x13, 0xa0, 0x40, 0xe1, - 0x09, 0xa1, 0x80, 0xd5, 0x01, 0xa4, 0x5f, 0xe5, 0x12, 0xa1, 0x80, 0x52, - 0xe9, 0x02, 0xa1, 0x80, 0x34, 0xef, 0x0f, 0xa1, 0x80, 0x23, 0xf5, 0x16, - 0xa1, 0xc0, 0x00, 0xef, 0x0c, 0xa1, 0x80, 0x15, 0xf0, 0x17, 0xa1, 0x00, - 0xf2, 0x19, 0xa1, 0x80, 0x08, 0xf4, 0x14, 0xa1, 0x00, 0xf8, 0x15, 0xa1, - 0x40, 0xf8, 0x18, 0xa1, 0x40, 0xf8, 0x0b, 0xa1, 0x40, 0xf0, 0x10, 0xa1, - 0x00, 0xf4, 0x0d, 0xa1, 0x00, 0xf8, 0x0e, 0xa1, 0x40, 0xe5, 0x05, 0xa1, - 0x80, 0x0c, 0xf0, 0x03, 0xa1, 0x00, 0xf4, 0x00, 0xa1, 0x00, 0xf8, 0x01, - 0xa1, 0x40, 0xf0, 0x06, 0xa1, 0x00, 0xf8, 0x04, 0xa1, 0x40, 0xf0, 0x13, - 0xa1, 0x00, 0xf8, 0x11, 0xa1, 0x40, 0xe1, 0x3f, 0xa1, 0x80, 0x63, 0xe5, - 0x49, 0xa1, 0x80, 0x56, 0xe9, 0x38, 0xa1, 0x80, 0x38, 0xef, 0x46, 0xa1, - 0x80, 0x27, 0xf5, 0x4d, 0xa1, 0xc0, 0x00, 0xef, 0x42, 0xa1, 0x80, 0x15, - 0xf0, 0x4e, 0xa1, 0x00, 0xf2, 0x50, 0xa1, 0x80, 0x08, 0xf4, 0x4b, 0xa1, - 0x00, 0xf8, 0x4c, 0xa1, 0x40, 0xf8, 0x4f, 0xa1, 0x40, 0xf0, 0x43, 0xa1, - 0x00, 0xf8, 0x41, 0xa1, 0x40, 0xf0, 0x47, 0xa1, 0x00, 0xf4, 0x44, 0xa1, - 0x00, 0xf8, 0x45, 0xa1, 0x40, 0xe5, 0x3b, 0xa1, 0x80, 0x0c, 0xf0, 0x39, - 0xa1, 0x00, 0xf4, 0x36, 0xa1, 0x00, 0xf8, 0x37, 0xa1, 0x40, 0xf0, 0x3c, - 0xa1, 0x00, 0xf8, 0x3a, 0xa1, 0x40, 0xf0, 0x4a, 0xa1, 0x00, 0xf8, 0x48, - 0xa1, 0x40, 0xf0, 0x40, 0xa1, 0x00, 0xf4, 0x3d, 0xa1, 0x00, 0xf8, 0x3e, - 0xa1, 0x40, 0xf0, 0x0a, 0xa1, 0x00, 0xf4, 0x07, 0xa1, 0x00, 0xf8, 0x08, - 0xa1, 0x40, 0xe1, 0xb8, 0xa2, 0x80, 0xf8, 0x01, 0xe5, 0xc2, 0xa2, 0x80, - 0xea, 0x01, 0xa8, 0x74, 0xe9, 0xb0, 0xa2, 0x80, 0x52, 0xef, 0xbf, 0xa2, - 0x80, 0x41, 0xf5, 0xc6, 0xa2, 0x80, 0x1a, 0xf9, 0xcc, 0xa2, 0xc0, 0x00, - 0xf0, 0xcd, 0xa2, 0x00, 0xf2, 0xcf, 0xa2, 0x80, 0x08, 0xf4, 0xca, 0xa2, - 0x00, 0xf8, 0xcb, 0xa2, 0x40, 0xf8, 0xce, 0xa2, 0x40, 0xef, 0xbb, 0xa2, - 0x80, 0x15, 0xf0, 0xc7, 0xa2, 0x00, 0xf2, 0xc9, 0xa2, 0x80, 0x08, 0xf4, - 0xc4, 0xa2, 0x00, 0xf8, 0xc5, 0xa2, 0x40, 0xf8, 0xc8, 0xa2, 0x40, 0xf0, - 0xbc, 0xa2, 0x00, 0xf8, 0xba, 0xa2, 0x40, 0xf0, 0xc0, 0xa2, 0x00, 0xf4, - 0xbd, 0xa2, 0x00, 0xf8, 0xbe, 0xa2, 0x40, 0xe5, 0xb4, 0xa2, 0x80, 0x0c, - 0xf0, 0xb1, 0xa2, 0x00, 0xf4, 0xae, 0xa2, 0x00, 0xf8, 0xaf, 0xa2, 0x40, - 0xf0, 0xb5, 0xa2, 0x00, 0xf4, 0xb2, 0xa2, 0x00, 0xf8, 0xb3, 0xa2, 0x40, - 0xe1, 0x63, 0xa3, 0x80, 0x63, 0xe5, 0x6f, 0xa3, 0x80, 0x52, 0xef, 0x6b, - 0xa3, 0x80, 0x41, 0xf5, 0x72, 0xa3, 0x80, 0x1a, 0xf9, 0x78, 0xa3, 0xc0, - 0x00, 0xf0, 0x79, 0xa3, 0x00, 0xf2, 0x7b, 0xa3, 0x80, 0x08, 0xf4, 0x76, - 0xa3, 0x00, 0xf8, 0x77, 0xa3, 0x40, 0xf8, 0x7a, 0xa3, 0x40, 0xef, 0x67, - 0xa3, 0x80, 0x11, 0xf0, 0x73, 0xa3, 0x00, 0xf2, 0x75, 0xa3, 0x80, 0x04, - 0xf8, 0x71, 0xa3, 0x40, 0xf8, 0x74, 0xa3, 0x40, 0xf0, 0x68, 0xa3, 0x00, - 0xf4, 0x65, 0xa3, 0x00, 0xf8, 0x66, 0xa3, 0x40, 0xf0, 0x6c, 0xa3, 0x00, - 0xf4, 0x69, 0xa3, 0x00, 0xf8, 0x6a, 0xa3, 0x40, 0xf0, 0x70, 0xa3, 0x00, - 0xf4, 0x6d, 0xa3, 0x00, 0xf8, 0x6e, 0xa3, 0x40, 0xf0, 0x64, 0xa3, 0x00, - 0xf4, 0x61, 0xa3, 0x00, 0xf8, 0x62, 0xa3, 0x40, 0xf0, 0xc3, 0xa2, 0x00, - 0xf8, 0xc1, 0xa2, 0x40, 0xf0, 0xb9, 0xa2, 0x00, 0xf4, 0xb6, 0xa2, 0x00, - 0xf8, 0xb7, 0xa2, 0x40, 0xe1, 0x20, 0xa0, 0x80, 0x8d, 0x02, 0xa2, 0x81, - 0x01, 0xe5, 0x2a, 0xa0, 0x80, 0x74, 0xe9, 0x18, 0xa0, 0x80, 0x52, 0xef, - 0x27, 0xa0, 0x80, 0x41, 0xf5, 0x2e, 0xa0, 0x80, 0x1a, 0xf9, 0x34, 0xa0, - 0xc0, 0x00, 0xf0, 0x35, 0xa0, 0x00, 0xf2, 0x37, 0xa0, 0x80, 0x08, 0xf4, - 0x32, 0xa0, 0x00, 0xf8, 0x33, 0xa0, 0x40, 0xf8, 0x36, 0xa0, 0x40, 0xef, - 0x23, 0xa0, 0x80, 0x15, 0xf0, 0x2f, 0xa0, 0x00, 0xf2, 0x31, 0xa0, 0x80, - 0x08, 0xf4, 0x2c, 0xa0, 0x00, 0xf8, 0x2d, 0xa0, 0x40, 0xf8, 0x30, 0xa0, - 0x40, 0xf0, 0x24, 0xa0, 0x00, 0xf8, 0x22, 0xa0, 0x40, 0xf0, 0x28, 0xa0, - 0x00, 0xf4, 0x25, 0xa0, 0x00, 0xf8, 0x26, 0xa0, 0x40, 0xe5, 0x1c, 0xa0, - 0x80, 0x0c, 0xf0, 0x19, 0xa0, 0x00, 0xf4, 0x16, 0xa0, 0x00, 0xf8, 0x17, - 0xa0, 0x40, 0xf0, 0x1d, 0xa0, 0x00, 0xf4, 0x1a, 0xa0, 0x00, 0xf8, 0x1b, - 0xa0, 0x40, 0xf0, 0x2b, 0xa0, 0x00, 0xf8, 0x29, 0xa0, 0x40, 0xe1, 0x60, - 0xa0, 0x80, 0x78, 0xe5, 0x6a, 0xa0, 0x80, 0x6b, 0xe9, 0x58, 0xa0, 0x80, - 0x49, 0xef, 0x67, 0xa0, 0x80, 0x38, 0xf5, 0x6e, 0xa0, 0x80, 0x11, 0xf9, - 0x74, 0xa0, 0xc0, 0x00, 0xf0, 0x75, 0xa0, 0x00, 0xf4, 0x72, 0xa0, 0x00, - 0xf8, 0x73, 0xa0, 0x40, 0xef, 0x63, 0xa0, 0x80, 0x15, 0xf0, 0x6f, 0xa0, - 0x00, 0xf2, 0x71, 0xa0, 0x80, 0x08, 0xf4, 0x6c, 0xa0, 0x00, 0xf8, 0x6d, - 0xa0, 0x40, 0xf8, 0x70, 0xa0, 0x40, 0xf0, 0x64, 0xa0, 0x00, 0xf8, 0x62, - 0xa0, 0x40, 0xf0, 0x68, 0xa0, 0x00, 0xf4, 0x65, 0xa0, 0x00, 0xf8, 0x66, - 0xa0, 0x40, 0xe5, 0x5c, 0xa0, 0x80, 0x0c, 0xf0, 0x59, 0xa0, 0x00, 0xf4, - 0x56, 0xa0, 0x00, 0xf8, 0x57, 0xa0, 0x40, 0xf0, 0x5d, 0xa0, 0x00, 0xf4, - 0x5a, 0xa0, 0x00, 0xf8, 0x5b, 0xa0, 0x40, 0xf0, 0x6b, 0xa0, 0x00, 0xf8, - 0x69, 0xa0, 0x40, 0xf0, 0x61, 0xa0, 0x00, 0xf4, 0x5e, 0xa0, 0x00, 0xf8, - 0x5f, 0xa0, 0x40, 0xf0, 0x21, 0xa0, 0x00, 0xf4, 0x1e, 0xa0, 0x00, 0xf8, - 0x1f, 0xa0, 0x40, 0xf0, 0x0b, 0xa0, 0x00, 0xf4, 0x08, 0xa0, 0x00, 0xf8, - 0x09, 0xa0, 0x40, 0xa2, 0xd3, 0x02, 0xa3, 0xb1, 0x02, 0xa4, 0xa4, 0x02, - 0xa7, 0x83, 0x02, 0xa8, 0xe5, 0x01, 0xaa, 0xcc, 0x01, 0xab, 0xbf, 0x01, - 0xac, 0xad, 0x01, 0xad, 0xa0, 0x01, 0xae, 0x83, 0x01, 0x42, 0x1f, 0x00, - 0xa9, 0xa4, 0x00, 0xb0, 0x6f, 0x43, 0x47, 0xf1, 0x90, 0xa4, 0x00, 0xb3, - 0x49, 0xb4, 0x3d, 0xb6, 0x2f, 0x42, 0x15, 0x02, 0xb8, 0xa4, 0x00, 0xb9, - 0x1d, 0xba, 0x01, 0xff, 0xe1, 0xb2, 0xa4, 0x00, 0x42, 0xf0, 0x04, 0xab, - 0xa4, 0x00, 0xb5, 0x06, 0x44, 0x12, 0xf0, 0xc4, 0xa4, 0x40, 0xf0, 0xa2, - 0xa4, 0x00, 0xf2, 0xc1, 0xa4, 0x40, 0x42, 0x52, 0x00, 0xae, 0xa4, 0x00, - 0xef, 0x9d, 0xa4, 0x40, 0x42, 0x9c, 0x0a, 0xb1, 0xa4, 0x00, 0x42, 0x42, - 0x00, 0xaf, 0xa4, 0x40, 0x42, 0x8a, 0x00, 0xa0, 0xa4, 0x00, 0xf5, 0xa8, - 0xa4, 0x40, 0xa8, 0x06, 0x42, 0x2f, 0x03, 0x95, 0xa4, 0x40, 0x42, 0x8a, - 0x00, 0xc0, 0xa4, 0x00, 0x42, 0x1f, 0x00, 0xc2, 0xa4, 0x00, 0x42, 0x42, - 0x00, 0xba, 0xa4, 0x00, 0xf9, 0xb0, 0xa4, 0x40, 0x42, 0xfe, 0x07, 0x9e, - 0xa4, 0x00, 0x42, 0xc9, 0x67, 0xac, 0xa4, 0x40, 0x43, 0x75, 0xb9, 0xc5, - 0xa4, 0x00, 0xb9, 0x06, 0x43, 0x98, 0xf1, 0xb4, 0xa4, 0x40, 0x42, 0x8f, - 0x04, 0x93, 0xa4, 0x00, 0x42, 0x1f, 0x00, 0xa7, 0xa4, 0x40, 0xe9, 0x98, - 0xa4, 0x00, 0x42, 0x1f, 0x00, 0x9c, 0xa4, 0x40, 0xe9, 0x91, 0xa4, 0x80, - 0x06, 0x42, 0x7d, 0x21, 0x9a, 0xa4, 0x40, 0xe5, 0xbb, 0xa4, 0x40, 0xe5, - 0xc6, 0xa4, 0x00, 0x42, 0x52, 0x00, 0x92, 0xa4, 0x40, 0xaa, 0x04, 0xef, - 0xb3, 0xa4, 0x40, 0x42, 0xc9, 0x02, 0xb7, 0xa4, 0x00, 0x42, 0xfe, 0x07, - 0xaa, 0xa4, 0x00, 0xf9, 0xb5, 0xa4, 0x40, 0x42, 0x98, 0x07, 0xad, 0xa4, - 0x00, 0xb8, 0x01, 0xff, 0x42, 0x52, 0x00, 0x99, 0xa4, 0x00, 0x42, 0x1f, - 0x00, 0xbf, 0xa4, 0x00, 0x42, 0xef, 0x04, 0x9f, 0xa4, 0x40, 0xe1, 0xa1, - 0xa4, 0x00, 0x42, 0x9c, 0x0a, 0x97, 0xa4, 0x00, 0xa7, 0x06, 0x42, 0xf0, - 0x04, 0xb6, 0xa4, 0x40, 0x42, 0x1f, 0x00, 0x96, 0xa4, 0x00, 0x42, 0xef, - 0x04, 0xa6, 0xa4, 0x40, 0x43, 0x75, 0x72, 0xa4, 0xa4, 0x00, 0xf5, 0xb9, - 0xa4, 0x40, 0x42, 0xb0, 0x01, 0xc3, 0xa4, 0x00, 0x42, 0x8f, 0x04, 0xbe, - 0xa4, 0x00, 0x43, 0x62, 0xf1, 0xbd, 0xa4, 0x00, 0xf9, 0xbc, 0xa4, 0xc0, - 0x00, 0xf0, 0x94, 0xa4, 0x00, 0xf4, 0xa3, 0xa4, 0x40, 0x43, 0x1b, 0x0d, - 0x9b, 0xa4, 0x00, 0x42, 0x42, 0x00, 0xa5, 0xa4, 0x40, 0x4a, 0xdb, 0xaa, - 0x9b, 0xf4, 0x01, 0x46, 0x98, 0x04, 0xa5, 0x00, 0x00, 0x05, 0x76, 0xe9, - 0x01, 0xff, 0x0a, 0xd6, 0x57, 0xa0, 0x02, 0x50, 0x1a, 0x62, 0xad, 0x0e, - 0x01, 0x07, 0xc1, 0x05, 0x01, 0xff, 0x42, 0x8c, 0x05, 0x81, 0x0e, 0x01, - 0xa3, 0xf8, 0x01, 0x02, 0xa1, 0x10, 0xeb, 0x01, 0xa5, 0xd4, 0x01, 0x42, - 0xe1, 0x07, 0x99, 0x0e, 0x01, 0x43, 0x9e, 0xb6, 0x9f, 0x0e, 0x01, 0xa8, - 0xb9, 0x01, 0x42, 0xbd, 0x26, 0x90, 0x0e, 0x01, 0xab, 0xa4, 0x01, 0x43, - 0xb0, 0x00, 0xa0, 0x0e, 0x81, 0x96, 0x01, 0x43, 0xfb, 0x8e, 0xa1, 0x0e, - 0x01, 0x43, 0x54, 0x22, 0xa2, 0x0e, 0x01, 0x42, 0xd1, 0x00, 0xa5, 0x0e, - 0x01, 0xb0, 0x78, 0x43, 0xf4, 0x13, 0x9c, 0x0e, 0x01, 0xb2, 0x66, 0xb3, - 0x4e, 0xb4, 0x42, 0x42, 0x1d, 0x04, 0xa3, 0x0e, 0x01, 0x42, 0xa6, 0x0a, - 0x9a, 0x0e, 0x81, 0x2f, 0x43, 0xc0, 0x88, 0xa4, 0x0e, 0x01, 0xb8, 0x1d, - 0x43, 0x8c, 0xf1, 0xa8, 0x0e, 0x81, 0x10, 0xba, 0x01, 0xff, 0xe1, 0x8f, - 0x0e, 0x81, 0x04, 0xe5, 0x96, 0x0e, 0x41, 0xec, 0x8c, 0x0e, 0x41, 0x56, - 0x91, 0x31, 0xb1, 0x0e, 0x41, 0xe1, 0x8a, 0x0e, 0x01, 0x44, 0xf2, 0xec, - 0x98, 0x0e, 0x41, 0x4f, 0x8a, 0x67, 0x9b, 0x0e, 0x41, 0xe1, 0x95, 0x0e, - 0x01, 0x42, 0xb0, 0x01, 0x84, 0x0e, 0x41, 0x42, 0xe8, 0x01, 0x93, 0x0e, - 0x01, 0xe5, 0x85, 0x0e, 0x01, 0x43, 0x0e, 0x16, 0x92, 0x0e, 0x01, 0x42, - 0x9e, 0x01, 0x91, 0x0e, 0x41, 0xe1, 0x8d, 0x0e, 0x01, 0x42, 0x22, 0x00, - 0x8e, 0x0e, 0x41, 0xe5, 0x82, 0x0e, 0x01, 0x42, 0xb0, 0x01, 0x83, 0x0e, - 0x41, 0x4f, 0xa5, 0x3a, 0xb0, 0x0e, 0x41, 0x42, 0xf5, 0x13, 0x9d, 0x0e, - 0x01, 0x43, 0xdb, 0x4e, 0x9e, 0x0e, 0x41, 0x42, 0x9e, 0x10, 0xa7, 0x0e, - 0x01, 0x42, 0x22, 0x00, 0x89, 0x0e, 0x41, 0x43, 0x02, 0x69, 0x80, 0x0e, - 0x01, 0xf4, 0xa9, 0x0e, 0x01, 0xf7, 0xa6, 0x0e, 0x01, 0x42, 0x61, 0x1c, - 0x97, 0x0e, 0x41, 0xe4, 0x94, 0x0e, 0x01, 0xec, 0x8b, 0x0e, 0x41, 0xa8, - 0x06, 0x42, 0x29, 0x02, 0x86, 0x0e, 0x41, 0x43, 0x4c, 0x38, 0x88, 0x0e, - 0x01, 0x42, 0x29, 0x02, 0x87, 0x0e, 0x41, 0x4a, 0xd3, 0xa8, 0xab, 0x0e, - 0x01, 0x4a, 0x49, 0xab, 0xac, 0x0e, 0x41, 0x53, 0x34, 0x46, 0x27, 0x23, - 0x00, 0x44, 0x9a, 0xe9, 0x7b, 0xfa, 0x01, 0x07, 0xe4, 0xce, 0x06, 0x42, - 0x0c, 0x00, 0xbb, 0x22, 0x40, 0x06, 0xe1, 0x02, 0x31, 0x04, 0xaf, 0x05, - 0x01, 0xff, 0xa3, 0x1e, 0x48, 0x02, 0xc3, 0x62, 0xfa, 0x01, 0x47, 0x66, - 0xce, 0x60, 0xfa, 0x01, 0x45, 0xd0, 0xb0, 0x63, 0xfa, 0x01, 0x48, 0x82, - 0xc5, 0x61, 0xfa, 0x01, 0x47, 0x1a, 0xd3, 0x66, 0xfa, 0x41, 0x45, 0x42, - 0xe1, 0x65, 0xfa, 0x01, 0x46, 0x7c, 0x56, 0x64, 0xfa, 0x41, 0xa3, 0x1e, - 0x48, 0x02, 0xc3, 0x69, 0xfa, 0x01, 0x47, 0x66, 0xce, 0x67, 0xfa, 0x01, - 0x45, 0xd0, 0xb0, 0x6a, 0xfa, 0x01, 0x48, 0x82, 0xc5, 0x68, 0xfa, 0x01, - 0x47, 0x1a, 0xd3, 0x6d, 0xfa, 0x41, 0x45, 0x42, 0xe1, 0x6c, 0xfa, 0x01, - 0x46, 0x7c, 0x56, 0x6b, 0xfa, 0x41, 0xa1, 0x94, 0x0e, 0xa5, 0xdf, 0x0d, - 0xa8, 0xf6, 0x03, 0xa9, 0x8c, 0x01, 0xaf, 0x23, 0xb2, 0x01, 0xff, 0x4d, - 0x0d, 0x7f, 0x81, 0xf3, 0x01, 0xa5, 0x06, 0x4a, 0x02, 0xa0, 0x0d, 0x27, - 0x40, 0x4b, 0x48, 0x97, 0x40, 0x22, 0x00, 0x43, 0x0c, 0x25, 0x27, 0xf5, - 0x01, 0x46, 0x12, 0xdd, 0x3c, 0xf9, 0x41, 0x47, 0x11, 0xd0, 0x3a, 0xf4, - 0x01, 0xad, 0x2f, 0x46, 0x98, 0x04, 0xa9, 0x20, 0x00, 0x42, 0x2a, 0x0c, - 0xb5, 0xfa, 0x01, 0xb2, 0x01, 0xff, 0x02, 0x06, 0x00, 0x10, 0x46, 0xae, - 0xda, 0xfa, 0xf5, 0x01, 0xed, 0xb1, 0xfa, 0x01, 0x49, 0x49, 0xbc, 0x1f, - 0xf6, 0x41, 0x46, 0x24, 0x60, 0x60, 0x20, 0x00, 0x54, 0xa7, 0x44, 0x31, - 0x2e, 0x40, 0x42, 0x1a, 0x00, 0x69, 0xf4, 0x81, 0x06, 0x4a, 0xbb, 0xa7, - 0xba, 0xf6, 0x41, 0x50, 0x1a, 0x5f, 0x6f, 0xf4, 0x01, 0x02, 0x31, 0x01, - 0x01, 0xff, 0x45, 0xbf, 0xe1, 0x62, 0xf4, 0x01, 0x47, 0x32, 0xcd, 0x5a, - 0xf4, 0x01, 0x43, 0x0c, 0x21, 0x52, 0xf4, 0x01, 0x46, 0xe8, 0xb9, 0x61, - 0xf4, 0x41, 0x0a, 0x50, 0x1b, 0x45, 0x52, 0xa8, 0x50, 0x3e, 0x2e, 0x00, - 0x4b, 0xde, 0x9c, 0x40, 0xf9, 0x01, 0xae, 0x11, 0x02, 0x88, 0x00, 0x01, - 0xff, 0x4a, 0xd5, 0xa6, 0xae, 0xf5, 0x01, 0x44, 0xec, 0x00, 0xdc, 0xf6, - 0x41, 0xa4, 0x10, 0x47, 0xbe, 0xcd, 0x77, 0xf3, 0x01, 0xe7, 0xbd, 0xfa, - 0x01, 0x49, 0x24, 0xae, 0x09, 0xf6, 0x41, 0x80, 0x06, 0x42, 0xd1, 0x00, - 0x9f, 0xfa, 0x41, 0x4c, 0x09, 0x8b, 0x2c, 0xf3, 0x01, 0x45, 0x1e, 0xe2, - 0x90, 0xf3, 0x41, 0x0a, 0xa5, 0x01, 0xfb, 0x01, 0x0a, 0xea, 0x01, 0xd8, - 0x01, 0x06, 0xb4, 0x01, 0x8e, 0x01, 0x0b, 0xb3, 0x02, 0x6c, 0x06, 0xff, - 0x1f, 0x23, 0x08, 0x50, 0x02, 0x01, 0xff, 0x4a, 0x07, 0x3e, 0x69, 0xf8, - 0x01, 0x50, 0x01, 0x3e, 0x79, 0xf8, 0x01, 0x50, 0x2a, 0x63, 0x61, 0xf8, - 0x01, 0x51, 0xb1, 0x5a, 0x71, 0xf8, 0x01, 0x55, 0xfc, 0x3d, 0x81, 0xf8, - 0x41, 0x05, 0x25, 0x23, 0x23, 0x05, 0x37, 0x1a, 0x01, 0xff, 0x4a, 0x07, - 0x3e, 0x6f, 0xf8, 0x01, 0x50, 0x01, 0x3e, 0x7f, 0xf8, 0x01, 0x50, 0x2a, - 0x63, 0x67, 0xf8, 0x01, 0x51, 0xb1, 0x5a, 0x77, 0xf8, 0x01, 0x55, 0xfc, - 0x3d, 0x87, 0xf8, 0x41, 0x4a, 0x07, 0x3e, 0x6e, 0xf8, 0x01, 0x50, 0x01, - 0x3e, 0x7e, 0xf8, 0x01, 0x50, 0x2a, 0x63, 0x66, 0xf8, 0x01, 0x51, 0xb1, - 0x5a, 0x76, 0xf8, 0x01, 0x55, 0xfc, 0x3d, 0x86, 0xf8, 0x41, 0x4a, 0x07, - 0x3e, 0x6a, 0xf8, 0x01, 0x50, 0x01, 0x3e, 0x7a, 0xf8, 0x01, 0x50, 0x2a, - 0x63, 0x62, 0xf8, 0x01, 0x51, 0xb1, 0x5a, 0x72, 0xf8, 0x01, 0x55, 0xfc, - 0x3d, 0x82, 0xf8, 0x41, 0x05, 0x25, 0x23, 0x23, 0x05, 0x37, 0x1a, 0x01, - 0xff, 0x4a, 0x07, 0x3e, 0x6c, 0xf8, 0x01, 0x50, 0x01, 0x3e, 0x7c, 0xf8, - 0x01, 0x50, 0x2a, 0x63, 0x64, 0xf8, 0x01, 0x51, 0xb1, 0x5a, 0x74, 0xf8, - 0x01, 0x55, 0xfc, 0x3d, 0x84, 0xf8, 0x41, 0x4a, 0x07, 0x3e, 0x6d, 0xf8, - 0x01, 0x50, 0x01, 0x3e, 0x7d, 0xf8, 0x01, 0x50, 0x2a, 0x63, 0x65, 0xf8, - 0x01, 0x51, 0xb1, 0x5a, 0x75, 0xf8, 0x01, 0x55, 0xfc, 0x3d, 0x85, 0xf8, - 0x41, 0x4a, 0x07, 0x3e, 0x68, 0xf8, 0x01, 0x50, 0x01, 0x3e, 0x78, 0xf8, - 0x01, 0x50, 0x2a, 0x63, 0x60, 0xf8, 0x01, 0x51, 0xb1, 0x5a, 0x70, 0xf8, - 0x01, 0x55, 0xfc, 0x3d, 0x80, 0xf8, 0x41, 0x4a, 0x07, 0x3e, 0x6b, 0xf8, - 0x01, 0x50, 0x01, 0x3e, 0x7b, 0xf8, 0x01, 0x50, 0x2a, 0x63, 0x63, 0xf8, - 0x01, 0x51, 0xb1, 0x5a, 0x73, 0xf8, 0x01, 0x55, 0xfc, 0x3d, 0x83, 0xf8, - 0x41, 0x43, 0x67, 0x00, 0x0b, 0xf4, 0x01, 0x43, 0xde, 0x12, 0xde, 0xf6, - 0x81, 0xcc, 0x09, 0x03, 0xaf, 0x02, 0x01, 0xff, 0x80, 0x06, 0x5b, 0x9f, - 0x19, 0xb3, 0x27, 0x40, 0x12, 0xd4, 0x4e, 0xae, 0x09, 0x46, 0x2a, 0x21, - 0xe6, 0x25, 0x00, 0xa3, 0xb1, 0x06, 0xa4, 0xc0, 0x05, 0x59, 0x91, 0x12, - 0x55, 0x27, 0x00, 0xa6, 0x83, 0x05, 0xa8, 0xc3, 0x04, 0xac, 0xe5, 0x03, - 0xad, 0xb7, 0x03, 0x43, 0x1a, 0x9b, 0x11, 0x27, 0x00, 0xb0, 0x97, 0x03, - 0x56, 0xb1, 0x35, 0x54, 0x27, 0x00, 0xb2, 0xd4, 0x02, 0xb3, 0x7c, 0xb4, - 0x5a, 0x02, 0x50, 0x02, 0x28, 0x03, 0x32, 0x00, 0x01, 0xff, 0x06, 0x35, - 0x00, 0x06, 0x4e, 0x35, 0x0a, 0x1e, 0x2b, 0x40, 0x43, 0x16, 0x00, 0xfe, - 0x2a, 0x00, 0x47, 0x63, 0x65, 0x2f, 0x2b, 0x00, 0x49, 0x3a, 0x46, 0xaf, - 0x25, 0xc0, 0x00, 0x54, 0xf3, 0x3e, 0x06, 0xce, 0x41, 0x0a, 0x9b, 0x01, - 0x1e, 0x0a, 0x3d, 0x0b, 0x01, 0xff, 0x47, 0x01, 0x4d, 0xca, 0xfb, 0x01, - 0x4e, 0xd7, 0x0b, 0xb5, 0x25, 0x00, 0x48, 0x01, 0x02, 0xb3, 0x25, 0xc0, - 0x00, 0x49, 0xa5, 0x3a, 0xec, 0x25, 0x40, 0x4e, 0x3f, 0x26, 0x46, 0xf4, - 0x01, 0x45, 0x40, 0x13, 0x1d, 0x26, 0x40, 0x48, 0x47, 0x3c, 0x0f, 0x26, - 0x00, 0x52, 0x0c, 0x53, 0x7e, 0xf5, 0x01, 0xb2, 0x06, 0x57, 0x21, 0x31, - 0xd7, 0x26, 0x40, 0x47, 0x2f, 0xcc, 0xe2, 0x23, 0x00, 0x66, 0xfa, 0x06, - 0xc1, 0x27, 0x40, 0x47, 0x62, 0x3d, 0x04, 0x27, 0x00, 0x49, 0x4f, 0xb6, - 0x46, 0xfe, 0x00, 0x4a, 0x1b, 0x5e, 0x16, 0x26, 0x00, 0xad, 0xa2, 0x01, - 0x49, 0x7a, 0xbb, 0x64, 0x26, 0x00, 0x45, 0xac, 0x05, 0xa1, 0x25, 0x80, - 0x2e, 0x43, 0xe3, 0x12, 0x06, 0x26, 0x00, 0x42, 0xf3, 0x0a, 0x23, 0xf3, - 0xc1, 0x00, 0x80, 0x01, 0xff, 0x4c, 0xe5, 0x8a, 0x25, 0xf3, 0x81, 0x11, - 0x05, 0x51, 0x00, 0x01, 0xff, 0x44, 0xca, 0x64, 0x3c, 0x26, 0x00, 0x4b, - 0x90, 0xa0, 0x24, 0xf3, 0x41, 0x4a, 0x4b, 0xa4, 0x26, 0xf3, 0x41, 0x80, - 0x01, 0xff, 0x46, 0x45, 0x8b, 0x33, 0xf5, 0x01, 0x11, 0x02, 0x0a, 0x48, - 0x05, 0x51, 0x00, 0x01, 0xff, 0x54, 0xf7, 0x3f, 0x85, 0x23, 0x00, 0xac, - 0x24, 0xb2, 0x16, 0x06, 0x6d, 0x02, 0x06, 0x57, 0xdc, 0x30, 0xeb, 0x25, - 0x40, 0x4d, 0x25, 0x0d, 0xf0, 0x25, 0x00, 0x4e, 0x43, 0x44, 0xf3, 0x25, - 0x40, 0x4e, 0x18, 0x71, 0xe5, 0x27, 0x00, 0x4e, 0xb4, 0x18, 0xa2, 0x25, - 0x40, 0x4d, 0xf1, 0x77, 0xe4, 0x27, 0x00, 0x05, 0x14, 0x01, 0x01, 0xff, - 0x4d, 0x25, 0x0d, 0xf1, 0x25, 0x00, 0x4e, 0x43, 0x44, 0xf2, 0x25, 0x40, - 0x4d, 0x07, 0x84, 0x95, 0xf7, 0x01, 0x4c, 0x37, 0x0a, 0xa3, 0x25, 0x00, - 0x51, 0x32, 0x0a, 0x94, 0xf7, 0x41, 0x04, 0x0e, 0x07, 0x06, 0x4a, 0x93, - 0x93, 0x3a, 0x26, 0x40, 0x47, 0x19, 0x0a, 0x2b, 0x2b, 0x00, 0xb3, 0x01, - 0xff, 0x45, 0xac, 0x05, 0xab, 0x25, 0x00, 0x43, 0xe3, 0x12, 0x52, 0x2b, - 0x40, 0x48, 0x3b, 0x46, 0xad, 0x25, 0x00, 0x04, 0xc9, 0x00, 0x01, 0xff, - 0x0a, 0x9b, 0x01, 0x1f, 0x0a, 0x3d, 0x0b, 0x01, 0xff, 0xb0, 0x0c, 0x4e, - 0xd7, 0x0b, 0xb9, 0x25, 0x00, 0x48, 0x01, 0x02, 0xb7, 0x25, 0x40, 0x47, - 0x3b, 0xc7, 0x54, 0x2b, 0x00, 0x46, 0xa1, 0x48, 0xbb, 0x25, 0x40, 0x4e, - 0x3f, 0x26, 0x49, 0xf4, 0x01, 0x45, 0x40, 0x13, 0x1e, 0x26, 0x40, 0x4c, - 0xa9, 0x8a, 0xb1, 0x25, 0x00, 0x02, 0x92, 0x01, 0x01, 0xff, 0x44, 0x5c, - 0x32, 0xf1, 0xf3, 0x01, 0x45, 0x3d, 0xc7, 0x20, 0x2b, 0x40, 0x06, 0x1a, - 0x04, 0x06, 0x4a, 0x93, 0xac, 0xdd, 0x2b, 0x40, 0x47, 0x88, 0x43, 0x26, - 0x2b, 0x00, 0x47, 0x19, 0x0a, 0x28, 0x2b, 0x00, 0xb3, 0x01, 0xff, 0x4b, - 0x38, 0x0a, 0xfd, 0x25, 0x00, 0x45, 0xac, 0x05, 0xfb, 0x25, 0x00, 0x43, - 0xe3, 0x12, 0x50, 0x2b, 0x40, 0xa1, 0x4d, 0x03, 0xc4, 0x00, 0x19, 0xaf, - 0x01, 0xff, 0x04, 0x15, 0x01, 0x06, 0x64, 0xfc, 0x09, 0xa0, 0xf7, 0x41, - 0x4c, 0x59, 0x8f, 0x86, 0xcc, 0x01, 0x4d, 0x1c, 0x86, 0x87, 0xcc, 0x41, - 0x80, 0x17, 0x0a, 0x3d, 0x0b, 0x01, 0xff, 0x47, 0xa0, 0x48, 0xc5, 0x25, - 0x00, 0x4e, 0xd7, 0x0b, 0xc3, 0x25, 0x00, 0x48, 0x01, 0x02, 0xc1, 0x25, - 0x40, 0x4a, 0x31, 0xaa, 0xd9, 0x26, 0x00, 0x09, 0x9c, 0x01, 0x01, 0xff, - 0x4e, 0x3f, 0x26, 0x48, 0xf4, 0x01, 0x45, 0x40, 0x13, 0x1c, 0x26, 0x40, - 0x4a, 0xe7, 0xad, 0x1c, 0x2b, 0x00, 0x49, 0x25, 0x9c, 0x46, 0xf5, 0x41, - 0x55, 0x7d, 0x38, 0xab, 0xf5, 0x01, 0xa5, 0x0f, 0xaf, 0x01, 0xff, 0x50, - 0x5a, 0x65, 0x2d, 0x2b, 0x00, 0x47, 0x2b, 0xd4, 0xd6, 0x29, 0x40, 0xa1, - 0x06, 0x45, 0xb5, 0xce, 0x21, 0x2b, 0x40, 0x42, 0x34, 0x00, 0x0d, 0xf9, - 0x81, 0x11, 0x03, 0x04, 0x15, 0x01, 0xff, 0x4a, 0x67, 0xa6, 0x05, 0x27, - 0x00, 0x5c, 0xa6, 0x18, 0xc0, 0xfb, 0x41, 0x45, 0xfd, 0x26, 0x61, 0x26, - 0x40, 0xac, 0x16, 0x0c, 0xcd, 0x12, 0x06, 0x4c, 0x7e, 0x81, 0x39, 0x26, - 0x40, 0x44, 0xa6, 0x15, 0xce, 0x2b, 0x00, 0x44, 0xe2, 0x12, 0x27, 0x27, - 0x40, 0x42, 0x23, 0x02, 0x90, 0x26, 0x80, 0x0f, 0xaf, 0x01, 0xff, 0x45, - 0x60, 0x0f, 0x40, 0x27, 0x00, 0x43, 0x15, 0x01, 0xae, 0xf4, 0x41, 0x64, - 0x94, 0x08, 0xff, 0x26, 0x40, 0x46, 0x89, 0x43, 0xc7, 0x25, 0x80, 0x3c, - 0x03, 0xa6, 0x01, 0x11, 0x08, 0x8a, 0xc7, 0x01, 0xff, 0x44, 0xe2, 0x33, - 0xc1, 0x26, 0x00, 0x43, 0xd5, 0x17, 0xc0, 0x26, 0x40, 0x0a, 0x9b, 0x01, - 0x11, 0x0a, 0x3d, 0x0b, 0x01, 0xff, 0x4e, 0xd7, 0x0b, 0xbf, 0x25, 0x00, - 0x48, 0x01, 0x02, 0xbd, 0x25, 0x40, 0x4e, 0x3f, 0x26, 0x47, 0xf4, 0x01, - 0x45, 0x40, 0x13, 0x1f, 0x26, 0x00, 0x4f, 0xde, 0x6d, 0x97, 0xf5, 0x41, - 0x80, 0x01, 0xff, 0x11, 0x02, 0x0a, 0x12, 0x49, 0xed, 0xb7, 0xcb, 0x26, - 0x00, 0x44, 0xfe, 0x26, 0x62, 0x26, 0x00, 0x50, 0x3a, 0x67, 0xd0, 0x27, - 0x40, 0x4e, 0x6e, 0x78, 0x9b, 0xf7, 0x01, 0x4d, 0x2d, 0x55, 0xc8, 0x25, - 0x00, 0x52, 0x28, 0x55, 0x9a, 0xf7, 0x41, 0x05, 0x8e, 0x86, 0x70, 0x45, - 0xe8, 0x02, 0xcb, 0x25, 0x80, 0x24, 0x48, 0x6a, 0xc5, 0x67, 0x26, 0x00, - 0x54, 0x7b, 0x43, 0xe1, 0x27, 0x80, 0x06, 0x49, 0xae, 0xa6, 0xcb, 0xfb, - 0x41, 0x06, 0x50, 0x00, 0x01, 0xff, 0x4e, 0xf0, 0x77, 0xe2, 0x27, 0x00, - 0x4f, 0x17, 0x71, 0xe3, 0x27, 0x40, 0x80, 0x01, 0xff, 0x5d, 0xc2, 0x14, - 0x8a, 0xf7, 0x01, 0x05, 0x51, 0x00, 0x01, 0xff, 0x02, 0x3b, 0x01, 0x27, - 0x06, 0x13, 0x01, 0x17, 0x48, 0xd0, 0x09, 0x87, 0x26, 0x00, 0x06, 0x6d, - 0x02, 0x01, 0xff, 0x4d, 0x25, 0x0d, 0xf4, 0x25, 0x00, 0x4e, 0x43, 0x44, - 0xf7, 0x25, 0x40, 0x4d, 0x25, 0x0d, 0xf5, 0x25, 0x00, 0x4e, 0x43, 0x44, - 0xf6, 0x25, 0x40, 0x47, 0xc6, 0x00, 0x86, 0x26, 0x00, 0x48, 0xc1, 0x40, - 0xec, 0x29, 0x40, 0x46, 0x48, 0xd7, 0x57, 0x26, 0x80, 0xe7, 0x01, 0x4a, - 0xd9, 0xa7, 0x48, 0xfa, 0x81, 0xd9, 0x01, 0xab, 0x73, 0x44, 0xb6, 0xee, - 0x59, 0x26, 0x80, 0x5b, 0x45, 0xe6, 0xbb, 0x55, 0x26, 0x80, 0x43, 0x44, - 0x0a, 0xef, 0x56, 0x26, 0x80, 0x2b, 0x07, 0xd8, 0x09, 0x01, 0xff, 0x46, - 0x48, 0xd7, 0x21, 0xfa, 0x01, 0xab, 0x12, 0x44, 0xb6, 0xee, 0x23, 0xfa, - 0x01, 0x45, 0xe6, 0xbb, 0x1f, 0xfa, 0x01, 0x44, 0x0a, 0xef, 0x20, 0xfa, - 0x41, 0x43, 0xa1, 0x01, 0x1e, 0xfa, 0x01, 0x45, 0xd5, 0x71, 0x22, 0xfa, - 0x41, 0x09, 0x02, 0x2c, 0x01, 0xff, 0x4e, 0x0b, 0x2c, 0x0b, 0xfa, 0x01, - 0x5b, 0x1a, 0x1d, 0x35, 0xfa, 0x41, 0x09, 0x02, 0x2c, 0x01, 0xff, 0x4e, - 0x0b, 0x2c, 0x0a, 0xfa, 0x01, 0x5b, 0x1a, 0x1d, 0x34, 0xfa, 0x41, 0x09, - 0x02, 0x2c, 0x01, 0xff, 0x4e, 0x0b, 0x2c, 0x0e, 0xfa, 0x01, 0x5b, 0x1a, - 0x1d, 0x38, 0xfa, 0x41, 0x43, 0xa1, 0x01, 0x54, 0x26, 0x80, 0x4c, 0x45, - 0xd5, 0x71, 0x58, 0x26, 0xc0, 0x00, 0x09, 0x02, 0x2c, 0x15, 0x8d, 0x01, - 0xff, 0x46, 0x48, 0xd7, 0x50, 0xfa, 0x01, 0x45, 0xe6, 0xbb, 0x4e, 0xfa, - 0x01, 0x44, 0x0a, 0xef, 0x4f, 0xfa, 0x41, 0x52, 0x84, 0x50, 0x06, 0xfa, - 0x01, 0x4e, 0x0b, 0x2c, 0x0d, 0xfa, 0x01, 0x5f, 0x1e, 0x11, 0x1b, 0xfa, - 0x01, 0xb4, 0x01, 0xff, 0x5c, 0x8e, 0x17, 0x45, 0xfa, 0x01, 0x0b, 0x1b, - 0x1d, 0x01, 0xff, 0x4f, 0x26, 0x1d, 0x37, 0xfa, 0x01, 0x53, 0xa9, 0x4c, - 0x30, 0xfa, 0x41, 0x09, 0x02, 0x2c, 0x01, 0xff, 0x4e, 0x0b, 0x2c, 0x09, - 0xfa, 0x01, 0x5b, 0x1a, 0x1d, 0x33, 0xfa, 0x41, 0x57, 0x02, 0x2c, 0x4b, - 0xfa, 0x41, 0x09, 0x02, 0x2c, 0x01, 0xff, 0x4e, 0x0b, 0x2c, 0x0c, 0xfa, - 0x01, 0x5b, 0x1a, 0x1d, 0x36, 0xfa, 0x41, 0x43, 0xbf, 0x0a, 0xac, 0xf8, - 0x01, 0x4a, 0x03, 0xb0, 0xad, 0xf8, 0x41, 0x4a, 0xab, 0xa3, 0x38, 0x26, - 0x00, 0x4c, 0x81, 0x8b, 0x7f, 0x26, 0x40, 0x04, 0xbc, 0x17, 0x22, 0xa4, - 0x14, 0xa9, 0x06, 0x4f, 0xbc, 0x71, 0x70, 0x26, 0x40, 0x5a, 0x76, 0x1f, - 0x18, 0x21, 0x00, 0x4a, 0x97, 0xa8, 0xcb, 0xf3, 0x41, 0x44, 0xd9, 0x05, - 0x92, 0xf4, 0x01, 0x5a, 0x20, 0x17, 0xbc, 0x27, 0x40, 0x48, 0xc0, 0x1e, - 0x40, 0xf6, 0x01, 0x44, 0xe1, 0x07, 0x29, 0xf6, 0x41, 0x44, 0xca, 0x87, - 0xc7, 0xf9, 0x01, 0xae, 0xb5, 0x05, 0xb2, 0x95, 0x01, 0x49, 0xfd, 0xbc, - 0xd1, 0xf5, 0x01, 0xb4, 0x62, 0xb6, 0x11, 0x05, 0x3f, 0xe9, 0x01, 0xff, - 0x54, 0x47, 0x40, 0x12, 0xf3, 0x01, 0x53, 0x6e, 0x48, 0x14, 0xf3, 0x41, - 0x02, 0x60, 0x00, 0x35, 0x04, 0xa1, 0x01, 0x1f, 0x02, 0x09, 0x00, 0x01, - 0xff, 0x44, 0x40, 0x12, 0x30, 0x30, 0x00, 0xac, 0x06, 0x48, 0xb8, 0x88, - 0x4b, 0xfe, 0x40, 0x43, 0xc3, 0x07, 0x07, 0x23, 0x00, 0x47, 0xac, 0x88, - 0x4f, 0xfe, 0x40, 0x4a, 0x03, 0xa6, 0xf4, 0xf3, 0x01, 0x49, 0x64, 0x46, - 0x4b, 0xf4, 0x01, 0x4a, 0x1b, 0xb1, 0xf3, 0xf3, 0x41, 0x18, 0x95, 0x26, - 0x06, 0x44, 0x40, 0x12, 0x1c, 0x30, 0x40, 0x44, 0xc3, 0x00, 0x3f, 0x2b, - 0x00, 0x45, 0xc8, 0x00, 0x33, 0x29, 0x40, 0x42, 0x1e, 0x14, 0x1a, 0x23, - 0x00, 0x02, 0x33, 0x00, 0x01, 0xff, 0x80, 0x06, 0x45, 0x70, 0xe5, 0x49, - 0xf3, 0x41, 0x47, 0xe5, 0xcc, 0x03, 0xf4, 0x01, 0x46, 0xc6, 0xd7, 0xbe, - 0xf6, 0x01, 0x44, 0xd6, 0xee, 0x3d, 0xf9, 0x01, 0x44, 0x39, 0x56, 0x0a, - 0xf3, 0x41, 0x09, 0xb5, 0xb3, 0x06, 0x49, 0x24, 0xba, 0xa0, 0x26, 0x40, - 0x0f, 0xb9, 0x05, 0xd1, 0x02, 0x06, 0xc4, 0x06, 0x8a, 0x02, 0x07, 0x2f, - 0x39, 0xc8, 0x01, 0x42, 0xe9, 0x04, 0xff, 0x18, 0x01, 0x0d, 0x4b, 0x08, - 0x01, 0xff, 0xe1, 0xc1, 0x18, 0x81, 0xa9, 0x01, 0x42, 0x1b, 0x0d, 0xd7, - 0x18, 0x01, 0x42, 0xa1, 0x10, 0xd4, 0x18, 0x01, 0xe5, 0xc8, 0x18, 0x81, - 0x8c, 0x01, 0x42, 0x24, 0x02, 0xcb, 0x18, 0x01, 0xa8, 0x69, 0x42, 0xb1, - 0x27, 0xc6, 0x18, 0x01, 0x42, 0x22, 0x03, 0xcc, 0x18, 0x01, 0xae, 0x4f, - 0xef, 0xc9, 0x18, 0x81, 0x44, 0x42, 0xb8, 0x0b, 0xd8, 0x18, 0x01, 0xb3, - 0x30, 0x43, 0xc3, 0x05, 0xd2, 0x18, 0x01, 0xb5, 0x20, 0x44, 0xba, 0xef, - 0xdf, 0x18, 0x01, 0x42, 0x51, 0x00, 0xc2, 0x18, 0x01, 0xb9, 0x01, 0xff, - 0xe1, 0xc4, 0x18, 0x01, 0xef, 0xc5, 0x18, 0x01, 0xf5, 0xc3, 0x18, 0xc1, - 0x00, 0xea, 0xce, 0x18, 0x41, 0xe3, 0xcf, 0x18, 0x01, 0xf5, 0xc7, 0x18, - 0x41, 0x42, 0xb1, 0x27, 0xde, 0x18, 0x01, 0x43, 0x50, 0xf1, 0xdd, 0x18, - 0x41, 0x42, 0x7f, 0x02, 0xd1, 0x18, 0x41, 0x43, 0x50, 0x56, 0xc0, 0x18, - 0x01, 0x43, 0x75, 0x44, 0xd3, 0x18, 0x41, 0x42, 0x17, 0x00, 0xdc, 0x18, - 0x01, 0x43, 0xc3, 0xc7, 0xd9, 0x18, 0x01, 0xaf, 0x01, 0xff, 0x42, 0x13, - 0x01, 0xda, 0x18, 0x01, 0x42, 0xcf, 0x00, 0xdb, 0x18, 0x41, 0xae, 0x01, - 0xff, 0xee, 0xd0, 0x18, 0x01, 0xf9, 0xcd, 0x18, 0x41, 0xed, 0xd6, 0x18, - 0x01, 0x42, 0x1d, 0x01, 0xca, 0x18, 0x01, 0xf4, 0xd5, 0x18, 0x41, 0x46, - 0x44, 0xd8, 0xf1, 0x18, 0x01, 0xa6, 0x29, 0x46, 0x0b, 0x2c, 0xf2, 0x18, - 0x01, 0xb3, 0x15, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0xea, 0x18, 0x01, - 0x45, 0x2b, 0x11, 0xec, 0x18, 0x01, 0x45, 0xde, 0x2b, 0xeb, 0x18, 0x41, - 0x46, 0x27, 0x1d, 0xf0, 0x18, 0x01, 0x44, 0x4e, 0xda, 0xef, 0x18, 0x41, - 0x44, 0x08, 0x4c, 0xee, 0x18, 0x01, 0x44, 0x85, 0x50, 0xed, 0x18, 0x41, - 0x45, 0xc3, 0x0a, 0xe8, 0x18, 0x01, 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0xe9, - 0x18, 0x01, 0x43, 0xbf, 0x0a, 0xe1, 0x18, 0x01, 0xb3, 0x14, 0xb4, 0x06, - 0x44, 0xa1, 0x1d, 0xe0, 0x18, 0x41, 0x44, 0x25, 0x01, 0xe3, 0x18, 0x01, - 0x42, 0x15, 0x02, 0xe2, 0x18, 0x41, 0x44, 0x27, 0x1d, 0xe7, 0x18, 0x01, - 0x42, 0x60, 0x25, 0xe6, 0x18, 0x41, 0x43, 0xa7, 0x05, 0xe5, 0x18, 0x01, - 0x43, 0xcb, 0x06, 0xe4, 0x18, 0x41, 0xe1, 0xa1, 0x18, 0x81, 0xa9, 0x01, - 0x42, 0x1b, 0x0d, 0xb7, 0x18, 0x01, 0x42, 0xa1, 0x10, 0xb4, 0x18, 0x01, - 0xe5, 0xa8, 0x18, 0x81, 0x8c, 0x01, 0x42, 0x24, 0x02, 0xab, 0x18, 0x01, - 0xa8, 0x69, 0x42, 0xb1, 0x27, 0xa6, 0x18, 0x01, 0x42, 0x22, 0x03, 0xac, - 0x18, 0x01, 0xae, 0x4f, 0xef, 0xa9, 0x18, 0x81, 0x44, 0x42, 0xb8, 0x0b, - 0xb8, 0x18, 0x01, 0xb3, 0x30, 0x43, 0xc3, 0x05, 0xb2, 0x18, 0x01, 0xb5, - 0x20, 0x44, 0xba, 0xef, 0xbf, 0x18, 0x01, 0x42, 0x51, 0x00, 0xa2, 0x18, - 0x01, 0xb9, 0x01, 0xff, 0xe1, 0xa4, 0x18, 0x01, 0xef, 0xa5, 0x18, 0x01, - 0xf5, 0xa3, 0x18, 0xc1, 0x00, 0xea, 0xae, 0x18, 0x41, 0xe3, 0xaf, 0x18, - 0x01, 0xf5, 0xa7, 0x18, 0x41, 0x42, 0xb1, 0x27, 0xbe, 0x18, 0x01, 0x43, - 0x50, 0xf1, 0xbd, 0x18, 0x41, 0x42, 0x7f, 0x02, 0xb1, 0x18, 0x41, 0x43, - 0x50, 0x56, 0xa0, 0x18, 0x01, 0x43, 0x75, 0x44, 0xb3, 0x18, 0x41, 0x42, - 0x17, 0x00, 0xbc, 0x18, 0x01, 0x43, 0xc3, 0xc7, 0xb9, 0x18, 0x01, 0xaf, - 0x01, 0xff, 0x42, 0x13, 0x01, 0xba, 0x18, 0x01, 0x42, 0xcf, 0x00, 0xbb, - 0x18, 0x41, 0xae, 0x01, 0xff, 0xee, 0xb0, 0x18, 0x01, 0xf9, 0xad, 0x18, - 0x41, 0xed, 0xb6, 0x18, 0x01, 0x42, 0x1d, 0x01, 0xaa, 0x18, 0x01, 0xf4, - 0xb5, 0x18, 0x41, 0x04, 0xb4, 0xd7, 0x11, 0x04, 0xa1, 0x01, 0x01, 0xff, - 0x54, 0x47, 0x40, 0x18, 0xf3, 0x01, 0x53, 0x6e, 0x48, 0x16, 0xf3, 0x41, - 0x06, 0xc4, 0x06, 0xa6, 0x02, 0x07, 0xc1, 0x05, 0x25, 0x49, 0x00, 0xba, - 0xff, 0xe2, 0x01, 0x05, 0x83, 0x2c, 0x01, 0xff, 0x43, 0xc7, 0xdb, 0xee, - 0xe2, 0x81, 0x0d, 0x43, 0x15, 0x19, 0xec, 0xe2, 0xc1, 0x00, 0x42, 0x26, - 0x03, 0xed, 0xe2, 0x41, 0x42, 0x26, 0x03, 0xef, 0xe2, 0x41, 0xe1, 0xc1, - 0xe2, 0x81, 0xdf, 0x01, 0x42, 0x16, 0x00, 0xc2, 0xe2, 0x01, 0x42, 0x37, - 0x00, 0xc3, 0xe2, 0x01, 0x42, 0xa1, 0x10, 0xc4, 0xe2, 0x01, 0xe5, 0xdb, - 0xe2, 0x81, 0xc3, 0x01, 0x42, 0xe1, 0x07, 0xcd, 0xe2, 0x01, 0x42, 0x24, - 0x02, 0xc5, 0xe2, 0x01, 0x42, 0x22, 0x00, 0xda, 0xe2, 0x01, 0xe9, 0xdc, - 0xe2, 0x81, 0xa5, 0x01, 0x42, 0xbd, 0x26, 0xd0, 0xe2, 0x01, 0xab, 0x92, - 0x01, 0xac, 0x85, 0x01, 0x42, 0x6c, 0x00, 0xd8, 0xe2, 0x01, 0xae, 0x6d, - 0xef, 0xd5, 0xe2, 0x81, 0x5f, 0xb0, 0x53, 0x42, 0x71, 0x00, 0xd7, 0xe2, - 0x01, 0xb3, 0x41, 0xb4, 0x29, 0xf5, 0xde, 0xe2, 0x81, 0x1e, 0x42, 0xa6, - 0x0a, 0xd3, 0xe2, 0x01, 0x42, 0xa9, 0x01, 0xd2, 0xe2, 0x01, 0xb9, 0x06, - 0x42, 0x59, 0x00, 0xd1, 0xe2, 0x41, 0xe1, 0xc6, 0xe2, 0x01, 0x42, 0xec, - 0x18, 0xeb, 0xe2, 0x41, 0x42, 0x92, 0x01, 0xea, 0xe2, 0x41, 0xe1, 0xcb, - 0xe2, 0x01, 0x42, 0x22, 0x00, 0xcc, 0xe2, 0x01, 0x42, 0x71, 0x00, 0xe1, - 0xe2, 0x01, 0x42, 0x15, 0x06, 0xe0, 0xe2, 0x41, 0xe1, 0xce, 0xe2, 0x01, - 0x42, 0x22, 0x00, 0xcf, 0xe2, 0x41, 0xe1, 0xca, 0xe2, 0x01, 0x42, 0x22, - 0x00, 0xc7, 0xe2, 0x41, 0xee, 0xe6, 0xe2, 0xc1, 0x00, 0xe7, 0xe2, 0xe2, - 0x41, 0xe1, 0xc9, 0xe2, 0x01, 0x42, 0x24, 0x02, 0xdd, 0xe2, 0x01, 0x42, - 0x34, 0x22, 0xe9, 0xe2, 0x41, 0xe1, 0xc8, 0xe2, 0x01, 0x43, 0x80, 0x48, - 0xdf, 0xe2, 0x41, 0xe1, 0xd4, 0xe2, 0x01, 0x42, 0x22, 0x00, 0xd9, 0xe2, - 0x41, 0x42, 0x1d, 0x01, 0xe5, 0xe2, 0x41, 0xee, 0xe7, 0xe2, 0x41, 0xe1, - 0xc0, 0xe2, 0x81, 0x0a, 0x42, 0x1d, 0x01, 0xe4, 0xe2, 0x01, 0xf5, 0xd6, - 0xe2, 0x41, 0xee, 0xe8, 0xe2, 0xc1, 0x00, 0xe7, 0xe3, 0xe2, 0x41, 0x45, - 0xc3, 0x0a, 0xf8, 0xe2, 0x01, 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0xf9, 0xe2, - 0x01, 0x43, 0xbf, 0x0a, 0xf1, 0xe2, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, - 0xa1, 0x1d, 0xf0, 0xe2, 0x41, 0x44, 0x25, 0x01, 0xf3, 0xe2, 0x01, 0x42, - 0x15, 0x02, 0xf2, 0xe2, 0x41, 0x44, 0x27, 0x1d, 0xf7, 0xe2, 0x01, 0x42, - 0x60, 0x25, 0xf6, 0xe2, 0x41, 0x43, 0xa7, 0x05, 0xf5, 0xe2, 0x01, 0x43, - 0xcb, 0x06, 0xf4, 0xe2, 0x41, 0xa1, 0xf0, 0x0a, 0xa5, 0xaa, 0x05, 0xa9, - 0xba, 0x01, 0xaf, 0x9c, 0x01, 0x02, 0x1f, 0x01, 0x01, 0xff, 0x45, 0xe7, - 0xe1, 0xe6, 0x2b, 0x00, 0x0d, 0xa4, 0x81, 0x01, 0xff, 0xa6, 0x74, 0x04, - 0xbf, 0x0a, 0x35, 0x4d, 0xb2, 0x4b, 0x5e, 0x21, 0x00, 0xb4, 0x06, 0x4b, - 0x3a, 0xa3, 0x89, 0x21, 0x40, 0x05, 0x25, 0x01, 0x11, 0x03, 0xd1, 0x09, - 0x01, 0xff, 0x46, 0xf1, 0xac, 0x56, 0x21, 0x00, 0x46, 0x63, 0x73, 0x54, - 0x21, 0x40, 0x47, 0xb8, 0x4b, 0x5c, 0x21, 0x00, 0x46, 0xf1, 0xac, 0x57, - 0x21, 0x00, 0x48, 0x2a, 0x01, 0xbe, 0x00, 0x40, 0x46, 0xc3, 0x0a, 0x5b, - 0x21, 0x00, 0x45, 0xf1, 0xac, 0x55, 0x21, 0x00, 0x44, 0x22, 0x00, 0xbd, - 0x00, 0x00, 0x45, 0x01, 0xe6, 0x51, 0x21, 0x00, 0x47, 0x2a, 0x01, 0xbc, - 0x00, 0x00, 0xb3, 0x0f, 0xb4, 0x01, 0xff, 0x44, 0xfb, 0x1a, 0x52, 0x21, - 0x00, 0x44, 0x64, 0x73, 0x53, 0x21, 0x40, 0x46, 0xa4, 0xd8, 0x50, 0x21, - 0x00, 0x44, 0xe1, 0xa9, 0x59, 0x21, 0x40, 0x04, 0xa7, 0x05, 0x06, 0x4a, - 0xed, 0xac, 0x58, 0x21, 0x40, 0x47, 0xb8, 0x4b, 0x5d, 0x21, 0x00, 0x46, - 0xdc, 0xdc, 0x5a, 0x21, 0x40, 0x50, 0x2a, 0x62, 0xbb, 0xfb, 0x01, 0xac, - 0x01, 0xff, 0x44, 0x1e, 0xec, 0x0b, 0xf3, 0x01, 0x47, 0x0a, 0xd0, 0xd0, - 0xf3, 0x01, 0x4c, 0x75, 0x94, 0x30, 0x22, 0x40, 0x4c, 0x21, 0x8b, 0xf3, - 0xf4, 0x01, 0x4a, 0xe3, 0x94, 0x0c, 0x27, 0x00, 0x03, 0xab, 0x1f, 0xc8, - 0x03, 0xa5, 0xaf, 0x03, 0x44, 0x61, 0xac, 0xbb, 0xf3, 0x01, 0x43, 0xfa, - 0x16, 0x4d, 0x26, 0x00, 0x07, 0x91, 0xd3, 0x01, 0xff, 0x0f, 0xb9, 0x05, - 0xcf, 0x01, 0x0d, 0x4b, 0x08, 0x01, 0xff, 0xe1, 0x97, 0x05, 0x01, 0xa2, - 0xb9, 0x01, 0xa3, 0xac, 0x01, 0xa4, 0x9f, 0x01, 0xe5, 0x9f, 0x05, 0x81, - 0x95, 0x01, 0x42, 0xa0, 0x19, 0xa0, 0x05, 0x01, 0x42, 0x24, 0x02, 0xa1, - 0x05, 0x01, 0xa8, 0x7d, 0xe9, 0xa5, 0x05, 0x81, 0x72, 0x42, 0xde, 0x1f, - 0xa7, 0x05, 0x01, 0x42, 0x1b, 0x02, 0xa8, 0x05, 0x01, 0xac, 0x5a, 0x42, - 0x2a, 0x02, 0xab, 0x05, 0x01, 0xae, 0x48, 0xef, 0xae, 0x05, 0x01, 0x42, - 0x6f, 0x02, 0xaf, 0x05, 0x01, 0x42, 0xf4, 0x13, 0xb0, 0x05, 0x01, 0x42, - 0x88, 0x00, 0xb1, 0x05, 0x01, 0xb3, 0x26, 0xb4, 0x1a, 0xf5, 0xb7, 0x05, - 0x01, 0x42, 0x32, 0x00, 0xb8, 0x05, 0x01, 0x42, 0x60, 0x42, 0xb9, 0x05, - 0x01, 0xf9, 0xbb, 0x05, 0x01, 0x42, 0xfc, 0x09, 0xbc, 0x05, 0x41, 0xe5, - 0xb5, 0x05, 0x01, 0x42, 0xb0, 0x01, 0xb6, 0x05, 0x41, 0xe5, 0xb3, 0x05, - 0x01, 0x42, 0xb0, 0x01, 0xb4, 0x05, 0x41, 0xe5, 0xac, 0x05, 0x01, 0x42, - 0xde, 0x1f, 0xad, 0x05, 0x41, 0xe1, 0xa9, 0x05, 0x01, 0x42, 0x74, 0x00, - 0xaa, 0x05, 0x41, 0x42, 0xde, 0x1f, 0xa6, 0x05, 0x41, 0xe1, 0xa3, 0x05, - 0x01, 0x42, 0x22, 0x00, 0xa4, 0x05, 0x41, 0xe9, 0x9e, 0x05, 0x41, 0xe5, - 0x9c, 0x05, 0x01, 0x42, 0xb0, 0x01, 0x9d, 0x05, 0x41, 0xe5, 0x9a, 0x05, - 0x01, 0x42, 0xb0, 0x01, 0x9b, 0x05, 0x41, 0x42, 0x8c, 0x05, 0x98, 0x05, - 0x01, 0xe5, 0x99, 0x05, 0x41, 0xe1, 0x70, 0x05, 0x01, 0xa2, 0xb9, 0x01, - 0xa3, 0xac, 0x01, 0xa4, 0x9f, 0x01, 0xe5, 0x78, 0x05, 0x81, 0x95, 0x01, - 0x42, 0xa0, 0x19, 0x79, 0x05, 0x01, 0x42, 0x24, 0x02, 0x7a, 0x05, 0x01, - 0xa8, 0x7d, 0xe9, 0x7e, 0x05, 0x81, 0x72, 0x42, 0xde, 0x1f, 0x80, 0x05, - 0x01, 0x42, 0x1b, 0x02, 0x81, 0x05, 0x01, 0xac, 0x5a, 0x42, 0x2a, 0x02, - 0x84, 0x05, 0x01, 0xae, 0x48, 0xef, 0x87, 0x05, 0x01, 0x42, 0x6f, 0x02, - 0x88, 0x05, 0x01, 0x42, 0xf4, 0x13, 0x89, 0x05, 0x01, 0x42, 0x88, 0x00, - 0x8a, 0x05, 0x01, 0xb3, 0x26, 0xb4, 0x1a, 0xf5, 0x90, 0x05, 0x01, 0x42, - 0x32, 0x00, 0x91, 0x05, 0x01, 0x42, 0x60, 0x42, 0x92, 0x05, 0x01, 0xf9, - 0x94, 0x05, 0x01, 0x42, 0xfc, 0x09, 0x95, 0x05, 0x41, 0xe5, 0x8e, 0x05, - 0x01, 0x42, 0xb0, 0x01, 0x8f, 0x05, 0x41, 0xe5, 0x8c, 0x05, 0x01, 0x42, - 0xb0, 0x01, 0x8d, 0x05, 0x41, 0xe5, 0x85, 0x05, 0x01, 0x42, 0xde, 0x1f, - 0x86, 0x05, 0x41, 0xe1, 0x82, 0x05, 0x01, 0x42, 0x74, 0x00, 0x83, 0x05, - 0x41, 0x42, 0xde, 0x1f, 0x7f, 0x05, 0x41, 0xe1, 0x7c, 0x05, 0x01, 0x42, - 0x22, 0x00, 0x7d, 0x05, 0x41, 0xe9, 0x77, 0x05, 0x41, 0xe5, 0x75, 0x05, - 0x01, 0x42, 0xb0, 0x01, 0x76, 0x05, 0x41, 0xe5, 0x73, 0x05, 0x01, 0x42, - 0xb0, 0x01, 0x74, 0x05, 0x41, 0x42, 0x8c, 0x05, 0x71, 0x05, 0x01, 0xe5, - 0x72, 0x05, 0x41, 0x1f, 0x9a, 0x11, 0x06, 0x4c, 0xf9, 0x94, 0x17, 0x23, - 0x40, 0x42, 0x37, 0x00, 0xf0, 0x6f, 0x01, 0x44, 0x3a, 0xee, 0xf1, 0x6f, - 0x41, 0x80, 0x06, 0x48, 0x02, 0xc2, 0xfc, 0xf4, 0x41, 0x46, 0x01, 0xb1, - 0xf9, 0xf4, 0x01, 0x44, 0xa2, 0xec, 0xae, 0xf3, 0x41, 0x55, 0x3a, 0x39, - 0x2f, 0x2a, 0x00, 0x04, 0xc0, 0x06, 0xfc, 0x02, 0xb2, 0x06, 0x43, 0xe2, - 0x12, 0xb6, 0x26, 0x40, 0x45, 0xd2, 0xe7, 0x23, 0x21, 0x00, 0x06, 0x35, - 0x00, 0x67, 0x02, 0x09, 0x00, 0x01, 0xff, 0x50, 0x9a, 0x5f, 0xa5, 0xf7, - 0x01, 0x06, 0x01, 0x15, 0x11, 0x05, 0xb6, 0xe5, 0x01, 0xff, 0x4c, 0x87, - 0x00, 0xd9, 0x22, 0x00, 0x49, 0xec, 0x00, 0xd8, 0x22, 0x40, 0x06, 0xe2, - 0x13, 0x37, 0x54, 0x4b, 0x41, 0xb3, 0xf7, 0x01, 0x4b, 0x9f, 0x5f, 0xa6, - 0xf7, 0x01, 0x4f, 0xcc, 0x70, 0x7d, 0xf6, 0x01, 0xb3, 0x11, 0x06, 0xad, - 0x02, 0x01, 0xff, 0x46, 0xe7, 0x02, 0x88, 0xf7, 0x01, 0x46, 0xab, 0x05, - 0x92, 0xf7, 0x41, 0x46, 0xa7, 0x18, 0xad, 0xf7, 0x01, 0x52, 0xb6, 0x51, - 0xb9, 0xf7, 0x01, 0x46, 0x6a, 0x30, 0x7c, 0xf6, 0x41, 0x52, 0x4b, 0x2b, - 0xd0, 0xf7, 0x01, 0x4f, 0x4e, 0x1c, 0xbf, 0xf7, 0x41, 0x04, 0x16, 0x00, - 0xe6, 0x01, 0x49, 0xa8, 0xb4, 0x14, 0xcc, 0x01, 0x48, 0x45, 0x29, 0xee, - 0x22, 0x00, 0x49, 0x9c, 0x45, 0x5e, 0x20, 0x00, 0x47, 0x7b, 0xce, 0x9d, - 0xcc, 0x01, 0x5a, 0xaa, 0x1f, 0x3b, 0x30, 0x00, 0x0c, 0xd5, 0x8e, 0xa0, - 0x01, 0xac, 0x61, 0x55, 0x04, 0x3c, 0xa8, 0x26, 0x00, 0x11, 0x6c, 0x5b, - 0x3f, 0xb2, 0x31, 0x48, 0x52, 0xc8, 0x3d, 0x2e, 0x00, 0xb4, 0x06, 0x4b, - 0x45, 0xa3, 0x9a, 0x29, 0x40, 0x02, 0x5c, 0x00, 0x0c, 0x44, 0xae, 0x22, - 0x2f, 0x2e, 0x00, 0x4c, 0x4d, 0x92, 0xa6, 0xf6, 0x41, 0x44, 0x9c, 0x44, - 0x7f, 0x2b, 0x00, 0x47, 0x16, 0x3b, 0x0b, 0x00, 0xc0, 0x00, 0x44, 0x15, - 0xb6, 0x8a, 0x00, 0x40, 0x49, 0x40, 0xb3, 0x9c, 0xcc, 0x01, 0x4f, 0x3b, - 0x6b, 0x0a, 0xcc, 0x41, 0xd2, 0x70, 0xfb, 0x01, 0xd3, 0x71, 0xfb, 0x01, - 0xd4, 0x72, 0xfb, 0x01, 0xd5, 0x73, 0xfb, 0x01, 0xd6, 0x74, 0xfb, 0x01, - 0xd7, 0x75, 0xfb, 0x41, 0x45, 0xfc, 0xe0, 0x84, 0xcc, 0x01, 0x43, 0xc3, - 0x07, 0x7c, 0x00, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x49, 0x56, 0x57, 0xd0, - 0x23, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x07, 0xd0, 0x04, 0x12, 0x4f, - 0xb3, 0x6b, 0x90, 0xcc, 0x01, 0x4a, 0xb1, 0x44, 0x7f, 0x23, 0x00, 0x50, - 0xcc, 0x07, 0x15, 0xce, 0x41, 0x45, 0x5c, 0x00, 0xef, 0x2a, 0x00, 0x45, - 0xf5, 0x06, 0xf0, 0x2a, 0x40, 0x44, 0xb9, 0x00, 0x31, 0x30, 0x80, 0x0d, - 0x56, 0x7f, 0x37, 0x32, 0x30, 0xc0, 0x00, 0x4b, 0xbd, 0x19, 0x34, 0x30, - 0x40, 0x80, 0x01, 0xff, 0x4a, 0x75, 0x08, 0x35, 0x30, 0x00, 0x4a, 0xbe, - 0x19, 0x33, 0x30, 0x40, 0x55, 0xbc, 0x38, 0xd0, 0x29, 0x00, 0x55, 0x79, - 0x39, 0xe4, 0x2a, 0x00, 0x56, 0xb9, 0x36, 0xe2, 0x2a, 0x00, 0x56, 0x53, - 0x37, 0xca, 0x27, 0x40, 0x05, 0x2f, 0x03, 0x94, 0x01, 0x05, 0x83, 0x2c, - 0x01, 0xff, 0x60, 0x25, 0x0f, 0xe1, 0x1c, 0x00, 0x07, 0xba, 0x5f, 0x79, - 0x02, 0x3b, 0x01, 0x5e, 0x02, 0x1b, 0x02, 0x4e, 0x47, 0x09, 0xd2, 0xd2, - 0x1c, 0x00, 0x02, 0x0d, 0x00, 0x38, 0x45, 0xb9, 0xe7, 0xd1, 0x1c, 0x00, - 0xb4, 0x1e, 0x0b, 0x34, 0x22, 0x01, 0xff, 0x5e, 0x14, 0x12, 0xd5, 0x1c, - 0x00, 0x53, 0x99, 0x0a, 0xd6, 0x1c, 0x00, 0x5b, 0x85, 0x1b, 0xd7, 0x1c, - 0xc0, 0x00, 0x4a, 0xe7, 0xa3, 0xd9, 0x1c, 0x40, 0x4f, 0x94, 0x6c, 0xdf, - 0x1c, 0x00, 0x4d, 0x29, 0x86, 0xdb, 0x1c, 0x00, 0x4d, 0xb7, 0x0e, 0xde, - 0x1c, 0x40, 0x63, 0x89, 0x0a, 0xe0, 0x1c, 0x00, 0x48, 0x11, 0xae, 0xf8, - 0x1c, 0x40, 0x46, 0xac, 0xdc, 0xd0, 0x1c, 0x00, 0x4e, 0x62, 0x7b, 0xdc, - 0x1c, 0x40, 0x47, 0x52, 0x12, 0xdd, 0x1c, 0x00, 0x05, 0x3d, 0x01, 0x01, - 0xff, 0x4a, 0x0f, 0xae, 0xf9, 0x1c, 0x00, 0x47, 0xa5, 0x0a, 0xda, 0x1c, - 0x40, 0x45, 0x5c, 0x00, 0xf4, 0x1c, 0x00, 0x45, 0xf5, 0x06, 0xd8, 0x1c, - 0x40, 0xa1, 0x72, 0x5c, 0xe6, 0x16, 0xfa, 0x1c, 0x00, 0x56, 0x5f, 0x33, - 0xee, 0x1c, 0x00, 0x4b, 0xc0, 0x9b, 0xf5, 0x1c, 0x00, 0x4d, 0x68, 0x33, - 0xef, 0x1c, 0x00, 0x49, 0x1b, 0xba, 0xd3, 0x1c, 0x00, 0xb2, 0x36, 0x46, - 0x96, 0xdd, 0xed, 0x1c, 0x00, 0x4b, 0x32, 0xa2, 0xf6, 0x1c, 0x00, 0x08, - 0x92, 0x61, 0x06, 0x5a, 0x34, 0x22, 0xd4, 0x1c, 0x40, 0x48, 0x68, 0x7b, - 0xe5, 0x1c, 0x80, 0x13, 0x47, 0xa5, 0x0a, 0xe2, 0x1c, 0x00, 0x46, 0x6a, - 0x7b, 0xe3, 0x1c, 0xc0, 0x00, 0x4a, 0x5f, 0xa4, 0xe7, 0x1c, 0x40, 0x4a, - 0x5f, 0xa4, 0xe8, 0x1c, 0x40, 0x10, 0x8a, 0x61, 0x0c, 0x53, 0x95, 0x4a, - 0xf3, 0x1c, 0x00, 0x53, 0x37, 0x4c, 0xf0, 0x1c, 0x40, 0x48, 0x68, 0x7b, - 0xe6, 0x1c, 0x00, 0x46, 0x6a, 0x7b, 0xe4, 0x1c, 0x40, 0x08, 0xd1, 0x15, - 0x0c, 0x4b, 0x9d, 0x4a, 0xf2, 0x1c, 0x00, 0x47, 0x98, 0xd3, 0xf7, 0x1c, - 0x40, 0x4c, 0xf6, 0x16, 0xe9, 0x1c, 0x00, 0x4c, 0xd9, 0x8a, 0xea, 0x1c, - 0x00, 0x4e, 0x5e, 0x7c, 0xf1, 0x1c, 0x00, 0x4b, 0x74, 0xa2, 0xeb, 0x1c, - 0xc0, 0x00, 0x4a, 0x5f, 0xa4, 0xec, 0x1c, 0x40, 0x02, 0xc6, 0x03, 0xb4, - 0x08, 0x45, 0x7a, 0x92, 0xdb, 0xf9, 0x01, 0x11, 0x27, 0x5c, 0x01, 0xff, - 0xd1, 0x00, 0xfe, 0x80, 0xda, 0x04, 0xd2, 0x01, 0xfe, 0x80, 0xbf, 0x02, - 0xd3, 0x02, 0xfe, 0x80, 0x91, 0x02, 0xd4, 0x03, 0xfe, 0x80, 0xe3, 0x01, - 0xd5, 0x04, 0xfe, 0x80, 0xb5, 0x01, 0xd6, 0x05, 0xfe, 0x80, 0x87, 0x01, - 0xd7, 0x06, 0xfe, 0x80, 0x5a, 0xd8, 0x07, 0xfe, 0x80, 0x2d, 0xd9, 0x08, - 0xfe, 0xc0, 0x00, 0xd0, 0x49, 0x01, 0x0e, 0xd1, 0x4a, 0x01, 0x0e, 0xd2, - 0x4b, 0x01, 0x0e, 0xd3, 0x4c, 0x01, 0x0e, 0xd4, 0x4d, 0x01, 0x0e, 0xd5, - 0x4e, 0x01, 0x0e, 0xd6, 0x4f, 0x01, 0x0e, 0xd7, 0x50, 0x01, 0x0e, 0xd8, - 0x51, 0x01, 0x0e, 0xd9, 0x52, 0x01, 0x4e, 0xd0, 0x3f, 0x01, 0x0e, 0xd1, - 0x40, 0x01, 0x0e, 0xd2, 0x41, 0x01, 0x0e, 0xd3, 0x42, 0x01, 0x0e, 0xd4, - 0x43, 0x01, 0x0e, 0xd5, 0x44, 0x01, 0x0e, 0xd6, 0x45, 0x01, 0x0e, 0xd7, - 0x46, 0x01, 0x0e, 0xd8, 0x47, 0x01, 0x0e, 0xd9, 0x48, 0x01, 0x4e, 0xd0, - 0x35, 0x01, 0x0e, 0xd1, 0x36, 0x01, 0x0e, 0xd2, 0x37, 0x01, 0x0e, 0xd3, - 0x38, 0x01, 0x0e, 0xd4, 0x39, 0x01, 0x0e, 0xd5, 0x3a, 0x01, 0x0e, 0xd6, - 0x3b, 0x01, 0x0e, 0xd7, 0x3c, 0x01, 0x0e, 0xd8, 0x3d, 0x01, 0x0e, 0xd9, - 0x3e, 0x01, 0x4e, 0xd0, 0x2b, 0x01, 0x0e, 0xd1, 0x2c, 0x01, 0x0e, 0xd2, - 0x2d, 0x01, 0x0e, 0xd3, 0x2e, 0x01, 0x0e, 0xd4, 0x2f, 0x01, 0x0e, 0xd5, - 0x30, 0x01, 0x0e, 0xd6, 0x31, 0x01, 0x0e, 0xd7, 0x32, 0x01, 0x0e, 0xd8, - 0x33, 0x01, 0x0e, 0xd9, 0x34, 0x01, 0x4e, 0xd0, 0x21, 0x01, 0x0e, 0xd1, - 0x22, 0x01, 0x0e, 0xd2, 0x23, 0x01, 0x0e, 0xd3, 0x24, 0x01, 0x0e, 0xd4, - 0x25, 0x01, 0x0e, 0xd5, 0x26, 0x01, 0x0e, 0xd6, 0x27, 0x01, 0x0e, 0xd7, - 0x28, 0x01, 0x0e, 0xd8, 0x29, 0x01, 0x0e, 0xd9, 0x2a, 0x01, 0x4e, 0xd0, - 0x17, 0x01, 0x0e, 0xd1, 0x18, 0x01, 0x0e, 0xd2, 0x19, 0x01, 0x0e, 0xd3, - 0x1a, 0x01, 0x0e, 0xd4, 0x1b, 0x01, 0x0e, 0xd5, 0x1c, 0x01, 0x0e, 0xd6, - 0x1d, 0x01, 0x0e, 0xd7, 0x1e, 0x01, 0x0e, 0xd8, 0x1f, 0x01, 0x0e, 0xd9, - 0x20, 0x01, 0x4e, 0xd0, 0x0d, 0x01, 0x0e, 0xd1, 0x0e, 0x01, 0x0e, 0xd2, - 0x0f, 0x01, 0x0e, 0xd3, 0x10, 0x01, 0x0e, 0xd4, 0x11, 0x01, 0x0e, 0xd5, - 0x12, 0x01, 0x0e, 0xd6, 0x13, 0x01, 0x0e, 0xd7, 0x14, 0x01, 0x0e, 0xd8, - 0x15, 0x01, 0x0e, 0xd9, 0x16, 0x01, 0x4e, 0xd0, 0x03, 0x01, 0x8e, 0xe7, - 0x01, 0xd1, 0x04, 0x01, 0x8e, 0xb9, 0x01, 0xd2, 0x05, 0x01, 0x8e, 0x8b, - 0x01, 0xd3, 0x06, 0x01, 0x8e, 0x5e, 0xd4, 0x07, 0x01, 0x8e, 0x31, 0xd5, - 0x08, 0x01, 0x8e, 0x10, 0xd6, 0x09, 0x01, 0x0e, 0xd7, 0x0a, 0x01, 0x0e, - 0xd8, 0x0b, 0x01, 0x0e, 0xd9, 0x0c, 0x01, 0x4e, 0xd0, 0xe9, 0x01, 0x0e, - 0xd1, 0xea, 0x01, 0x0e, 0xd2, 0xeb, 0x01, 0x0e, 0xd3, 0xec, 0x01, 0x0e, - 0xd4, 0xed, 0x01, 0x0e, 0xd5, 0xee, 0x01, 0x0e, 0xd6, 0xef, 0x01, 0x4e, - 0xd0, 0xdf, 0x01, 0x0e, 0xd1, 0xe0, 0x01, 0x0e, 0xd2, 0xe1, 0x01, 0x0e, - 0xd3, 0xe2, 0x01, 0x0e, 0xd4, 0xe3, 0x01, 0x0e, 0xd5, 0xe4, 0x01, 0x0e, - 0xd6, 0xe5, 0x01, 0x0e, 0xd7, 0xe6, 0x01, 0x0e, 0xd8, 0xe7, 0x01, 0x0e, - 0xd9, 0xe8, 0x01, 0x4e, 0xd0, 0xd5, 0x01, 0x0e, 0xd1, 0xd6, 0x01, 0x0e, - 0xd2, 0xd7, 0x01, 0x0e, 0xd3, 0xd8, 0x01, 0x0e, 0xd4, 0xd9, 0x01, 0x0e, - 0xd5, 0xda, 0x01, 0x0e, 0xd6, 0xdb, 0x01, 0x0e, 0xd7, 0xdc, 0x01, 0x0e, - 0xd8, 0xdd, 0x01, 0x0e, 0xd9, 0xde, 0x01, 0x4e, 0xd0, 0xcb, 0x01, 0x0e, - 0xd1, 0xcc, 0x01, 0x0e, 0xd2, 0xcd, 0x01, 0x0e, 0xd3, 0xce, 0x01, 0x0e, - 0xd4, 0xcf, 0x01, 0x0e, 0xd5, 0xd0, 0x01, 0x0e, 0xd6, 0xd1, 0x01, 0x0e, - 0xd7, 0xd2, 0x01, 0x0e, 0xd8, 0xd3, 0x01, 0x0e, 0xd9, 0xd4, 0x01, 0x4e, - 0xd0, 0xc1, 0x01, 0x0e, 0xd1, 0xc2, 0x01, 0x0e, 0xd2, 0xc3, 0x01, 0x0e, - 0xd3, 0xc4, 0x01, 0x0e, 0xd4, 0xc5, 0x01, 0x0e, 0xd5, 0xc6, 0x01, 0x0e, - 0xd6, 0xc7, 0x01, 0x0e, 0xd7, 0xc8, 0x01, 0x0e, 0xd8, 0xc9, 0x01, 0x0e, - 0xd9, 0xca, 0x01, 0x4e, 0xd0, 0xb7, 0x01, 0x0e, 0xd1, 0xb8, 0x01, 0x0e, - 0xd2, 0xb9, 0x01, 0x0e, 0xd3, 0xba, 0x01, 0x0e, 0xd4, 0xbb, 0x01, 0x0e, - 0xd5, 0xbc, 0x01, 0x0e, 0xd6, 0xbd, 0x01, 0x0e, 0xd7, 0xbe, 0x01, 0x0e, - 0xd8, 0xbf, 0x01, 0x0e, 0xd9, 0xc0, 0x01, 0x4e, 0xd0, 0x09, 0xfe, 0x80, - 0x9b, 0x03, 0xd1, 0x0a, 0xfe, 0x80, 0xed, 0x02, 0xd2, 0x0b, 0xfe, 0x80, - 0xbf, 0x02, 0xd3, 0x0c, 0xfe, 0x80, 0x91, 0x02, 0xd4, 0x0d, 0xfe, 0x80, - 0xe3, 0x01, 0xd5, 0x0e, 0xfe, 0x80, 0xb5, 0x01, 0xd6, 0x0f, 0xfe, 0x80, - 0x87, 0x01, 0xd7, 0x00, 0x01, 0x8e, 0x5a, 0xd8, 0x01, 0x01, 0x8e, 0x2d, - 0xd9, 0x02, 0x01, 0xce, 0x00, 0xd0, 0xad, 0x01, 0x0e, 0xd1, 0xae, 0x01, - 0x0e, 0xd2, 0xaf, 0x01, 0x0e, 0xd3, 0xb0, 0x01, 0x0e, 0xd4, 0xb1, 0x01, - 0x0e, 0xd5, 0xb2, 0x01, 0x0e, 0xd6, 0xb3, 0x01, 0x0e, 0xd7, 0xb4, 0x01, - 0x0e, 0xd8, 0xb5, 0x01, 0x0e, 0xd9, 0xb6, 0x01, 0x4e, 0xd0, 0xa3, 0x01, - 0x0e, 0xd1, 0xa4, 0x01, 0x0e, 0xd2, 0xa5, 0x01, 0x0e, 0xd3, 0xa6, 0x01, - 0x0e, 0xd4, 0xa7, 0x01, 0x0e, 0xd5, 0xa8, 0x01, 0x0e, 0xd6, 0xa9, 0x01, - 0x0e, 0xd7, 0xaa, 0x01, 0x0e, 0xd8, 0xab, 0x01, 0x0e, 0xd9, 0xac, 0x01, - 0x4e, 0xd0, 0x99, 0x01, 0x0e, 0xd1, 0x9a, 0x01, 0x0e, 0xd2, 0x9b, 0x01, - 0x0e, 0xd3, 0x9c, 0x01, 0x0e, 0xd4, 0x9d, 0x01, 0x0e, 0xd5, 0x9e, 0x01, - 0x0e, 0xd6, 0x9f, 0x01, 0x0e, 0xd7, 0xa0, 0x01, 0x0e, 0xd8, 0xa1, 0x01, - 0x0e, 0xd9, 0xa2, 0x01, 0x4e, 0xd0, 0x8f, 0x01, 0x0e, 0xd1, 0x90, 0x01, - 0x0e, 0xd2, 0x91, 0x01, 0x0e, 0xd3, 0x92, 0x01, 0x0e, 0xd4, 0x93, 0x01, - 0x0e, 0xd5, 0x94, 0x01, 0x0e, 0xd6, 0x95, 0x01, 0x0e, 0xd7, 0x96, 0x01, - 0x0e, 0xd8, 0x97, 0x01, 0x0e, 0xd9, 0x98, 0x01, 0x4e, 0xd0, 0x85, 0x01, - 0x0e, 0xd1, 0x86, 0x01, 0x0e, 0xd2, 0x87, 0x01, 0x0e, 0xd3, 0x88, 0x01, - 0x0e, 0xd4, 0x89, 0x01, 0x0e, 0xd5, 0x8a, 0x01, 0x0e, 0xd6, 0x8b, 0x01, - 0x0e, 0xd7, 0x8c, 0x01, 0x0e, 0xd8, 0x8d, 0x01, 0x0e, 0xd9, 0x8e, 0x01, - 0x4e, 0xd0, 0x7b, 0x01, 0x0e, 0xd1, 0x7c, 0x01, 0x0e, 0xd2, 0x7d, 0x01, - 0x0e, 0xd3, 0x7e, 0x01, 0x0e, 0xd4, 0x7f, 0x01, 0x0e, 0xd5, 0x80, 0x01, - 0x0e, 0xd6, 0x81, 0x01, 0x0e, 0xd7, 0x82, 0x01, 0x0e, 0xd8, 0x83, 0x01, - 0x0e, 0xd9, 0x84, 0x01, 0x4e, 0xd0, 0x71, 0x01, 0x0e, 0xd1, 0x72, 0x01, - 0x0e, 0xd2, 0x73, 0x01, 0x0e, 0xd3, 0x74, 0x01, 0x0e, 0xd4, 0x75, 0x01, - 0x0e, 0xd5, 0x76, 0x01, 0x0e, 0xd6, 0x77, 0x01, 0x0e, 0xd7, 0x78, 0x01, - 0x0e, 0xd8, 0x79, 0x01, 0x0e, 0xd9, 0x7a, 0x01, 0x4e, 0xd0, 0x67, 0x01, - 0x0e, 0xd1, 0x68, 0x01, 0x0e, 0xd2, 0x69, 0x01, 0x0e, 0xd3, 0x6a, 0x01, - 0x0e, 0xd4, 0x6b, 0x01, 0x0e, 0xd5, 0x6c, 0x01, 0x0e, 0xd6, 0x6d, 0x01, - 0x0e, 0xd7, 0x6e, 0x01, 0x0e, 0xd8, 0x6f, 0x01, 0x0e, 0xd9, 0x70, 0x01, - 0x4e, 0xd0, 0x5d, 0x01, 0x0e, 0xd1, 0x5e, 0x01, 0x0e, 0xd2, 0x5f, 0x01, - 0x0e, 0xd3, 0x60, 0x01, 0x0e, 0xd4, 0x61, 0x01, 0x0e, 0xd5, 0x62, 0x01, - 0x0e, 0xd6, 0x63, 0x01, 0x0e, 0xd7, 0x64, 0x01, 0x0e, 0xd8, 0x65, 0x01, - 0x0e, 0xd9, 0x66, 0x01, 0x4e, 0xd0, 0x53, 0x01, 0x0e, 0xd1, 0x54, 0x01, - 0x0e, 0xd2, 0x55, 0x01, 0x0e, 0xd3, 0x56, 0x01, 0x0e, 0xd4, 0x57, 0x01, - 0x0e, 0xd5, 0x58, 0x01, 0x0e, 0xd6, 0x59, 0x01, 0x0e, 0xd7, 0x5a, 0x01, - 0x0e, 0xd8, 0x5b, 0x01, 0x0e, 0xd9, 0x5c, 0x01, 0x4e, 0x45, 0xe8, 0x04, - 0x0d, 0xa6, 0x00, 0x06, 0xc4, 0x06, 0x83, 0x0b, 0x49, 0x15, 0x16, 0x0e, - 0xa6, 0x00, 0x4d, 0xd6, 0x33, 0x0f, 0xa6, 0x00, 0x02, 0xeb, 0x07, 0x01, - 0xff, 0x07, 0xb0, 0x17, 0x5f, 0x05, 0xf5, 0x15, 0x01, 0xff, 0x44, 0xba, - 0x15, 0x17, 0xa6, 0x00, 0xa4, 0x3d, 0xa6, 0x2f, 0x44, 0xeb, 0xa9, 0x1f, - 0xa6, 0x00, 0xab, 0x1b, 0x43, 0x29, 0xf1, 0x16, 0xa6, 0x00, 0xb4, 0x01, - 0xff, 0x42, 0x31, 0x12, 0x19, 0xa6, 0x00, 0x43, 0xa1, 0x01, 0x15, 0xa6, - 0x00, 0x43, 0x63, 0x0e, 0x1d, 0xa6, 0x40, 0x44, 0x99, 0x99, 0x14, 0xa6, - 0x00, 0x43, 0x75, 0x44, 0x1c, 0xa6, 0x40, 0x42, 0x31, 0x12, 0x18, 0xa6, - 0x00, 0x44, 0x99, 0x99, 0x13, 0xa6, 0x40, 0x43, 0x1c, 0x01, 0x1a, 0xa6, - 0x00, 0xaf, 0x01, 0xff, 0x42, 0xad, 0x20, 0x1e, 0xa6, 0x00, 0x43, 0x63, - 0x0e, 0x1b, 0xa6, 0x40, 0xe1, 0x49, 0xa5, 0x80, 0x85, 0x0a, 0xa2, 0xc4, - 0x09, 0xa3, 0xa3, 0x09, 0xa4, 0xc2, 0x08, 0xe5, 0xe1, 0xa5, 0x80, 0xaf, - 0x08, 0xa6, 0x8e, 0x08, 0xa7, 0xc1, 0x07, 0xa8, 0x89, 0x07, 0xe9, 0x24, - 0xa5, 0x80, 0xff, 0x06, 0xaa, 0xde, 0x06, 0xab, 0x8f, 0x06, 0xac, 0xe8, - 0x05, 0xad, 0x85, 0x05, 0xae, 0xa4, 0x03, 0xef, 0xba, 0xa5, 0x80, 0x91, - 0x03, 0xb0, 0xf0, 0x02, 0xb2, 0xcf, 0x02, 0xb3, 0x8e, 0x02, 0xb4, 0xcd, - 0x01, 0xf5, 0x95, 0xa5, 0x80, 0xc3, 0x01, 0xb6, 0xa2, 0x01, 0xb7, 0x61, - 0xb9, 0x41, 0xba, 0x01, 0xff, 0xe1, 0x64, 0xa5, 0x00, 0xe5, 0xfd, 0xa5, - 0x80, 0x31, 0xa8, 0x11, 0xe9, 0x3d, 0xa5, 0x00, 0xef, 0xd5, 0xa5, 0x80, - 0x04, 0xf5, 0xae, 0xa5, 0x40, 0xef, 0x89, 0xa5, 0x40, 0xe1, 0x65, 0xa5, - 0x00, 0xe5, 0xfe, 0xa5, 0x80, 0x11, 0xe9, 0x3e, 0xa5, 0x00, 0xef, 0xd6, - 0xa5, 0x80, 0x04, 0xf5, 0xaf, 0xa5, 0x40, 0xef, 0x8a, 0xa5, 0x40, 0xe5, - 0x19, 0xa5, 0x40, 0xe5, 0x18, 0xa5, 0x40, 0xe1, 0x69, 0xa5, 0x00, 0xe5, - 0x02, 0xa6, 0x80, 0x11, 0xe9, 0x42, 0xa5, 0x00, 0xef, 0xda, 0xa5, 0x80, - 0x04, 0xf5, 0xb3, 0xa5, 0x40, 0xef, 0x8e, 0xa5, 0x40, 0xe5, 0x1d, 0xa5, - 0x40, 0xe1, 0x4e, 0xa5, 0x80, 0x36, 0xe5, 0xe6, 0xa5, 0x80, 0x24, 0xe9, - 0x28, 0xa5, 0x80, 0x1b, 0xef, 0xbf, 0xa5, 0x80, 0x09, 0xf5, 0x99, 0xa5, - 0xc0, 0x00, 0xee, 0x9a, 0xa5, 0x40, 0xee, 0xc0, 0xa5, 0x00, 0xef, 0x74, - 0xa5, 0xc0, 0x00, 0xee, 0x75, 0xa5, 0x40, 0xee, 0x29, 0xa5, 0x40, 0xe5, - 0x03, 0xa5, 0x80, 0x04, 0xee, 0xe7, 0xa5, 0x40, 0xee, 0x04, 0xa5, 0x40, - 0xee, 0x4f, 0xa5, 0x40, 0xe1, 0x59, 0xa5, 0x00, 0xe5, 0xf2, 0xa5, 0x80, - 0x11, 0xe9, 0x32, 0xa5, 0x00, 0xef, 0xca, 0xa5, 0x80, 0x04, 0xf5, 0xa3, - 0xa5, 0x40, 0xef, 0x7e, 0xa5, 0x40, 0xe5, 0x0d, 0xa5, 0x40, 0xee, 0x96, - 0xa5, 0x40, 0xe1, 0x5a, 0xa5, 0x00, 0xe5, 0xf3, 0xa5, 0x80, 0x31, 0xa8, - 0x11, 0xe9, 0x33, 0xa5, 0x00, 0xef, 0xcb, 0xa5, 0x80, 0x04, 0xf5, 0xa4, - 0xa5, 0x40, 0xef, 0x7f, 0xa5, 0x40, 0xe1, 0x5b, 0xa5, 0x00, 0xe5, 0xf4, - 0xa5, 0x80, 0x11, 0xe9, 0x34, 0xa5, 0x00, 0xef, 0xcc, 0xa5, 0x80, 0x04, - 0xf5, 0xa5, 0xa5, 0x40, 0xef, 0x80, 0xa5, 0x40, 0xe5, 0x0f, 0xa5, 0x40, - 0xe5, 0x0e, 0xa5, 0x40, 0xe1, 0x62, 0xa5, 0x00, 0xe5, 0xfb, 0xa5, 0x80, - 0x31, 0xa8, 0x11, 0xe9, 0x3b, 0xa5, 0x00, 0xef, 0xd3, 0xa5, 0x80, 0x04, - 0xf5, 0xac, 0xa5, 0x40, 0xef, 0x87, 0xa5, 0x40, 0xe1, 0x63, 0xa5, 0x00, - 0xe5, 0xfc, 0xa5, 0x80, 0x11, 0xe9, 0x3c, 0xa5, 0x00, 0xef, 0xd4, 0xa5, - 0x80, 0x04, 0xf5, 0xad, 0xa5, 0x40, 0xef, 0x88, 0xa5, 0x40, 0xe5, 0x17, - 0xa5, 0x40, 0xe5, 0x16, 0xa5, 0x40, 0xe1, 0x5f, 0xa5, 0x00, 0xe5, 0xf8, - 0xa5, 0x80, 0x11, 0xe9, 0x38, 0xa5, 0x00, 0xef, 0xd0, 0xa5, 0x80, 0x04, - 0xf5, 0xa9, 0xa5, 0x40, 0xef, 0x84, 0xa5, 0x40, 0xe5, 0x13, 0xa5, 0x40, - 0xe1, 0x50, 0xa5, 0x00, 0xe5, 0xe8, 0xa5, 0x80, 0x11, 0xe9, 0x2a, 0xa5, - 0x00, 0xef, 0xc1, 0xa5, 0x80, 0x04, 0xf5, 0x9b, 0xa5, 0x40, 0xef, 0x76, - 0xa5, 0x40, 0xe5, 0x05, 0xa5, 0x40, 0xee, 0xbb, 0xa5, 0x00, 0xef, 0x71, - 0xa5, 0xc0, 0x00, 0xee, 0x72, 0xa5, 0x40, 0xe1, 0x6f, 0xa5, 0x00, 0xa4, - 0x97, 0x01, 0xe5, 0x09, 0xa6, 0x80, 0x8d, 0x01, 0xe7, 0x0b, 0xa6, 0x80, - 0x52, 0xe9, 0x47, 0xa5, 0x00, 0xaa, 0x2e, 0xef, 0xdf, 0xa5, 0x80, 0x25, - 0xf5, 0xb8, 0xa5, 0x00, 0xb9, 0x01, 0xff, 0xe1, 0x70, 0xa5, 0x00, 0xe5, - 0x0a, 0xa6, 0x80, 0x11, 0xe9, 0x48, 0xa5, 0x00, 0xef, 0xe0, 0xa5, 0x80, - 0x04, 0xf5, 0xb9, 0xa5, 0x40, 0xef, 0x94, 0xa5, 0x40, 0xe5, 0x23, 0xa5, - 0x40, 0xef, 0x93, 0xa5, 0x40, 0xe1, 0x68, 0xa5, 0x00, 0xe5, 0x01, 0xa6, - 0x80, 0x11, 0xe9, 0x41, 0xa5, 0x00, 0xef, 0xd9, 0xa5, 0x80, 0x04, 0xf5, - 0xb2, 0xa5, 0x40, 0xef, 0x8d, 0xa5, 0x40, 0xe5, 0x1c, 0xa5, 0x40, 0x42, - 0x1a, 0x00, 0x4b, 0xa5, 0x00, 0x42, 0x92, 0x01, 0xe3, 0xa5, 0x00, 0xa7, - 0x06, 0x42, 0x10, 0x00, 0xbc, 0xa5, 0x40, 0xe1, 0x6c, 0xa5, 0x00, 0xe5, - 0x04, 0xa6, 0x80, 0x11, 0xe9, 0x44, 0xa5, 0x00, 0xef, 0xdc, 0xa5, 0x80, - 0x04, 0xf5, 0xb5, 0xa5, 0x40, 0xef, 0x90, 0xa5, 0x40, 0xe5, 0x1f, 0xa5, - 0x00, 0xee, 0x05, 0xa6, 0x40, 0xe5, 0x22, 0xa5, 0x40, 0xe1, 0x61, 0xa5, - 0x00, 0xe5, 0xfa, 0xa5, 0x80, 0x33, 0xe9, 0x3a, 0xa5, 0x00, 0xef, 0xd2, - 0xa5, 0x80, 0x04, 0xf5, 0xab, 0xa5, 0x40, 0x03, 0x3f, 0x01, 0x04, 0xef, - 0x86, 0xa5, 0x40, 0x42, 0x3b, 0x01, 0x2b, 0xa6, 0x00, 0x42, 0xe1, 0x07, - 0x10, 0xa6, 0x00, 0x42, 0x1b, 0x02, 0x11, 0xa6, 0x00, 0x42, 0x6c, 0x00, - 0x2a, 0xa6, 0x00, 0x43, 0xe1, 0x20, 0x12, 0xa6, 0x40, 0xe5, 0x15, 0xa5, - 0x40, 0xe1, 0x6e, 0xa5, 0x00, 0xa2, 0x3c, 0xe5, 0x08, 0xa6, 0x80, 0x33, - 0x02, 0x50, 0x47, 0x11, 0xe9, 0x46, 0xa5, 0x00, 0xef, 0xde, 0xa5, 0x80, - 0x04, 0xf5, 0xb7, 0xa5, 0x40, 0xef, 0x92, 0xa5, 0x40, 0xe1, 0x56, 0xa5, - 0x00, 0xe5, 0xee, 0xa5, 0x80, 0x11, 0xe9, 0x2f, 0xa5, 0x00, 0xef, 0xc6, - 0xa5, 0x80, 0x04, 0xf5, 0xa0, 0xa5, 0x40, 0xef, 0x7b, 0xa5, 0x40, 0xe5, - 0x0a, 0xa5, 0x40, 0xe5, 0x21, 0xa5, 0x40, 0xe1, 0x53, 0xa5, 0x00, 0xe5, - 0xeb, 0xa5, 0x80, 0x11, 0xe9, 0x2d, 0xa5, 0x00, 0xef, 0xc4, 0xa5, 0x80, - 0x04, 0xf5, 0x9e, 0xa5, 0x40, 0xef, 0x79, 0xa5, 0x40, 0xe5, 0x08, 0xa5, - 0x40, 0xe1, 0x5e, 0xa5, 0x00, 0xe5, 0xf7, 0xa5, 0x80, 0x11, 0xe9, 0x37, - 0xa5, 0x00, 0xef, 0xcf, 0xa5, 0x80, 0x04, 0xf5, 0xa8, 0xa5, 0x40, 0xef, - 0x83, 0xa5, 0x40, 0xe5, 0x12, 0xa5, 0x00, 0x48, 0x8c, 0x55, 0x0c, 0xa6, - 0x40, 0xe1, 0x6a, 0xa5, 0x80, 0x43, 0xe5, 0x03, 0xa6, 0x80, 0x3a, 0xe9, - 0x43, 0xa5, 0x00, 0xef, 0xdb, 0xa5, 0x80, 0x2d, 0xb0, 0x04, 0xf5, 0xb4, - 0xa5, 0x40, 0xe1, 0x54, 0xa5, 0x80, 0x1e, 0xe5, 0xec, 0xa5, 0x80, 0x11, - 0xe9, 0x2e, 0xa5, 0x00, 0xef, 0xc5, 0xa5, 0x80, 0x04, 0xf5, 0x9f, 0xa5, - 0x40, 0xef, 0x7a, 0xa5, 0x40, 0xe5, 0x09, 0xa5, 0x00, 0xee, 0xed, 0xa5, - 0x40, 0xee, 0x55, 0xa5, 0x40, 0xef, 0x8f, 0xa5, 0x40, 0xe5, 0x1e, 0xa5, - 0x40, 0xee, 0x6b, 0xa5, 0x40, 0xe1, 0x67, 0xa5, 0x00, 0xe5, 0x00, 0xa6, - 0x80, 0x11, 0xe9, 0x40, 0xa5, 0x00, 0xef, 0xd8, 0xa5, 0x80, 0x04, 0xf5, - 0xb1, 0xa5, 0x40, 0xef, 0x8c, 0xa5, 0x40, 0xe5, 0x1b, 0xa5, 0x40, 0xee, - 0x25, 0xa5, 0x40, 0xe1, 0x4c, 0xa5, 0x80, 0x2c, 0xe5, 0xe4, 0xa5, 0x80, - 0x1f, 0xe9, 0x26, 0xa5, 0x80, 0x16, 0xef, 0xbd, 0xa5, 0x80, 0x09, 0xf5, - 0x97, 0xa5, 0xc0, 0x00, 0xee, 0x98, 0xa5, 0x40, 0xee, 0xbe, 0xa5, 0x00, - 0xef, 0x73, 0xa5, 0x40, 0xee, 0x27, 0xa5, 0x40, 0xe5, 0x02, 0xa5, 0x00, - 0xee, 0xe5, 0xa5, 0x40, 0xee, 0x4d, 0xa5, 0x40, 0xe1, 0x6d, 0xa5, 0x00, - 0xa2, 0x1e, 0xe5, 0x06, 0xa6, 0x80, 0x11, 0xe9, 0x45, 0xa5, 0x00, 0xef, - 0xdd, 0xa5, 0x80, 0x04, 0xf5, 0xb6, 0xa5, 0x40, 0xef, 0x91, 0xa5, 0x40, - 0xe5, 0x20, 0xa5, 0x00, 0xee, 0x07, 0xa6, 0x40, 0xe1, 0x57, 0xa5, 0x00, - 0xe5, 0xef, 0xa5, 0x80, 0x15, 0xe9, 0x30, 0xa5, 0x00, 0xef, 0xc7, 0xa5, - 0x80, 0x04, 0xf5, 0xa1, 0xa5, 0x40, 0xee, 0xc8, 0xa5, 0x00, 0xef, 0x7c, - 0xa5, 0x40, 0xe5, 0x0b, 0xa5, 0x00, 0xee, 0xf0, 0xa5, 0x40, 0xe1, 0x58, - 0xa5, 0x00, 0xe5, 0xf1, 0xa5, 0x80, 0x11, 0xe9, 0x31, 0xa5, 0x00, 0xef, - 0xc9, 0xa5, 0x80, 0x04, 0xf5, 0xa2, 0xa5, 0x40, 0xef, 0x7d, 0xa5, 0x40, - 0xe5, 0x0c, 0xa5, 0x40, 0xe5, 0x00, 0xa5, 0x80, 0x04, 0xee, 0xe2, 0xa5, - 0x40, 0xee, 0x01, 0xa5, 0x40, 0xe1, 0x60, 0xa5, 0x00, 0xe5, 0xf9, 0xa5, - 0x80, 0x51, 0xa8, 0x11, 0xe9, 0x39, 0xa5, 0x00, 0xef, 0xd1, 0xa5, 0x80, - 0x04, 0xf5, 0xaa, 0xa5, 0x40, 0xef, 0x85, 0xa5, 0x40, 0xe1, 0x5c, 0xa5, - 0x00, 0xe5, 0xf5, 0xa5, 0x80, 0x31, 0xa8, 0x11, 0xe9, 0x35, 0xa5, 0x00, - 0xef, 0xcd, 0xa5, 0x80, 0x04, 0xf5, 0xa6, 0xa5, 0x40, 0xef, 0x81, 0xa5, - 0x40, 0xe1, 0x5d, 0xa5, 0x00, 0xe5, 0xf6, 0xa5, 0x80, 0x11, 0xe9, 0x36, - 0xa5, 0x00, 0xef, 0xce, 0xa5, 0x80, 0x04, 0xf5, 0xa7, 0xa5, 0x40, 0xef, - 0x82, 0xa5, 0x40, 0xe5, 0x11, 0xa5, 0x40, 0xe5, 0x10, 0xa5, 0x40, 0xe5, - 0x14, 0xa5, 0x40, 0xe1, 0x66, 0xa5, 0x00, 0xe5, 0xff, 0xa5, 0x80, 0x11, - 0xe9, 0x3f, 0xa5, 0x00, 0xef, 0xd7, 0xa5, 0x80, 0x04, 0xf5, 0xb0, 0xa5, - 0x40, 0xef, 0x8b, 0xa5, 0x40, 0xe5, 0x1a, 0xa5, 0x40, 0xe1, 0x52, 0xa5, - 0x00, 0xe5, 0xea, 0xa5, 0x80, 0x31, 0xa8, 0x11, 0xe9, 0x2c, 0xa5, 0x00, - 0xef, 0xc3, 0xa5, 0x80, 0x04, 0xf5, 0x9d, 0xa5, 0x40, 0xef, 0x78, 0xa5, - 0x40, 0xe1, 0x51, 0xa5, 0x00, 0xe5, 0xe9, 0xa5, 0x80, 0x11, 0xe9, 0x2b, - 0xa5, 0x00, 0xef, 0xc2, 0xa5, 0x80, 0x04, 0xf5, 0x9c, 0xa5, 0x40, 0xef, - 0x77, 0xa5, 0x40, 0xe5, 0x06, 0xa5, 0x40, 0xe5, 0x07, 0xa5, 0x40, 0xee, - 0x4a, 0xa5, 0x40, 0x45, 0xc3, 0x0a, 0x28, 0xa6, 0x00, 0xa6, 0x2e, 0x44, - 0x46, 0x2a, 0x29, 0xa6, 0x00, 0x43, 0xbf, 0x0a, 0x21, 0xa6, 0x00, 0xb3, - 0x14, 0xb4, 0x06, 0x44, 0xa1, 0x1d, 0x20, 0xa6, 0x40, 0x44, 0x25, 0x01, - 0x23, 0xa6, 0x00, 0x42, 0x15, 0x02, 0x22, 0xa6, 0x40, 0x44, 0x27, 0x1d, - 0x27, 0xa6, 0x00, 0x42, 0x60, 0x25, 0x26, 0xa6, 0x40, 0x43, 0xa7, 0x05, - 0x25, 0xa6, 0x00, 0x43, 0xcb, 0x06, 0x24, 0xa6, 0x40, 0x08, 0xc2, 0xc3, - 0xd2, 0x0d, 0x47, 0xe3, 0x5f, 0x02, 0x26, 0x80, 0xbb, 0x0d, 0xae, 0xc5, - 0x0c, 0xb0, 0x06, 0x45, 0xdd, 0x20, 0x45, 0x26, 0x40, 0x80, 0xad, 0x0b, - 0x8d, 0xb4, 0x0a, 0x04, 0x6f, 0x02, 0xff, 0x03, 0x4e, 0xd6, 0x7a, 0x43, - 0xf6, 0x01, 0x06, 0xa9, 0x01, 0x01, 0xff, 0xa1, 0xff, 0x02, 0x06, 0xe1, - 0x02, 0xee, 0x02, 0x50, 0x0a, 0x60, 0x3d, 0xf8, 0x01, 0xa4, 0xd9, 0x02, - 0x51, 0x91, 0x58, 0x35, 0xf8, 0x01, 0xa8, 0xfa, 0x01, 0x4d, 0xa7, 0x85, - 0xc8, 0x21, 0x00, 0x4f, 0x72, 0x70, 0xf0, 0x27, 0x00, 0x46, 0xa0, 0xdc, - 0x6d, 0xf6, 0x01, 0xb3, 0xd9, 0x01, 0xb4, 0x47, 0x06, 0xad, 0x02, 0x01, - 0xff, 0x45, 0xce, 0x00, 0xe7, 0x21, 0x80, 0x0d, 0x4c, 0x71, 0x8c, 0xee, - 0x21, 0xc0, 0x00, 0x4c, 0x89, 0x89, 0xef, 0x21, 0x40, 0x80, 0x01, 0xff, - 0x48, 0xfd, 0xb1, 0xea, 0x21, 0x80, 0x1e, 0x4b, 0x8a, 0x89, 0xeb, 0x21, - 0x80, 0x06, 0x59, 0x25, 0x1e, 0x95, 0xf8, 0x41, 0x06, 0x50, 0x00, 0x01, - 0xff, 0x4e, 0x0b, 0x00, 0xec, 0x21, 0x00, 0x4c, 0x32, 0x00, 0xed, 0x21, - 0x40, 0x54, 0xf3, 0x3e, 0xb8, 0x2b, 0x40, 0x02, 0x0d, 0x00, 0x1c, 0x02, - 0x15, 0x02, 0x01, 0xff, 0x4d, 0x16, 0x7e, 0x9f, 0x21, 0x00, 0x0e, 0xf0, - 0x05, 0x01, 0xff, 0x51, 0xc4, 0x58, 0x49, 0x29, 0x00, 0x58, 0xfe, 0x05, - 0xed, 0x2b, 0x40, 0x05, 0x04, 0x02, 0x06, 0x49, 0x78, 0x70, 0x0a, 0x29, - 0x40, 0x4a, 0xe0, 0x01, 0x91, 0xf8, 0x01, 0x08, 0x09, 0x02, 0x01, 0xff, - 0x45, 0xce, 0x00, 0x61, 0x2b, 0x80, 0x0c, 0x4c, 0x05, 0x8c, 0x6b, 0x2b, - 0x00, 0x4d, 0xa7, 0x85, 0x85, 0x2b, 0x40, 0x80, 0x01, 0xff, 0x6c, 0xea, - 0x01, 0x81, 0x2b, 0x00, 0x46, 0x82, 0x14, 0x71, 0x2b, 0x00, 0x05, 0x51, - 0x00, 0x01, 0xff, 0x4a, 0x17, 0xa6, 0x29, 0xf8, 0x01, 0x58, 0x85, 0x27, - 0x7b, 0x2b, 0x00, 0x4b, 0xef, 0x66, 0x2d, 0xf8, 0x01, 0x09, 0x4c, 0xb9, - 0x12, 0x4c, 0x3d, 0x90, 0x25, 0xf8, 0x01, 0x4c, 0xa9, 0x90, 0x21, 0xf8, - 0x01, 0x50, 0xea, 0x66, 0x31, 0xf8, 0x41, 0x49, 0xea, 0x01, 0xa2, 0x2b, - 0x00, 0x4a, 0xb3, 0x02, 0xa3, 0x2b, 0x40, 0x4f, 0x6b, 0x65, 0x51, 0xf8, - 0x01, 0x4c, 0x29, 0x92, 0x39, 0xf8, 0x41, 0x11, 0x66, 0x05, 0x11, 0x05, - 0x02, 0x15, 0x01, 0xff, 0x45, 0xce, 0x00, 0x45, 0xf8, 0x01, 0x50, 0x0a, - 0x60, 0x41, 0xf8, 0x41, 0x04, 0xc3, 0x00, 0x19, 0x05, 0xc8, 0x00, 0x01, - 0xff, 0x80, 0x06, 0x45, 0xa9, 0x01, 0xbe, 0x21, 0x40, 0x48, 0xfd, 0xb1, - 0x5c, 0x29, 0x00, 0x46, 0x82, 0x14, 0x54, 0x29, 0x40, 0x80, 0x06, 0x45, - 0xa9, 0x01, 0xbf, 0x21, 0x40, 0x07, 0x43, 0x0a, 0x0c, 0x48, 0xfd, 0xb1, - 0x60, 0x29, 0x00, 0x46, 0x82, 0x14, 0x58, 0x29, 0x40, 0x61, 0x7a, 0x0d, - 0x6e, 0x29, 0x00, 0x5f, 0xb9, 0x11, 0x63, 0x29, 0x40, 0x4b, 0x06, 0x8c, - 0xe1, 0x21, 0x00, 0x4b, 0x72, 0x8c, 0xd1, 0x21, 0x40, 0x45, 0xce, 0x00, - 0x06, 0x2b, 0x00, 0x53, 0x8a, 0x47, 0x89, 0x2b, 0x40, 0x45, 0xd9, 0xe5, - 0x15, 0x2e, 0x00, 0x44, 0xcf, 0x00, 0x91, 0x21, 0xc0, 0x00, 0x80, 0x01, - 0xff, 0x5a, 0x8c, 0x1e, 0xb8, 0xfb, 0x01, 0x48, 0xfd, 0xb1, 0xa5, 0x21, - 0x00, 0x5c, 0xe2, 0x17, 0xc5, 0x21, 0x00, 0x46, 0x82, 0x14, 0x12, 0x29, - 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x4d, 0xa0, 0x80, 0xde, 0x21, 0x00, - 0x55, 0xd5, 0x01, 0x15, 0xf8, 0x01, 0x51, 0x1c, 0x05, 0x09, 0x29, 0x00, - 0x58, 0xd5, 0x28, 0x09, 0xf8, 0x01, 0x59, 0x5b, 0x24, 0x05, 0xf8, 0x01, - 0x4c, 0x21, 0x91, 0x99, 0xf8, 0x01, 0x06, 0x0c, 0x07, 0x11, 0x04, 0xfa, - 0x0b, 0x01, 0xff, 0x49, 0xea, 0x01, 0xb0, 0x21, 0x00, 0x4a, 0xb3, 0x02, - 0xb1, 0x21, 0x40, 0x55, 0xd5, 0x01, 0x11, 0xf8, 0x01, 0x52, 0x03, 0x06, - 0x01, 0xf8, 0x41, 0x04, 0x1a, 0x00, 0x8c, 0x06, 0x4e, 0xc4, 0x74, 0x01, - 0x27, 0x00, 0x07, 0x73, 0x02, 0xda, 0x05, 0x52, 0x60, 0x50, 0x84, 0xfb, - 0x01, 0x05, 0x22, 0x00, 0x8e, 0x05, 0x05, 0xc3, 0x00, 0x8c, 0x03, 0x07, - 0x7d, 0x02, 0xd6, 0x02, 0x04, 0xbf, 0x0a, 0xc5, 0x02, 0x06, 0xc8, 0x00, - 0x30, 0x53, 0xb2, 0x4b, 0x86, 0xfb, 0x01, 0xb4, 0x01, 0xff, 0x05, 0x25, - 0x01, 0x06, 0x5b, 0x93, 0x1c, 0x6d, 0xfb, 0x41, 0x4d, 0xb8, 0x4b, 0x83, - 0xfb, 0x01, 0x09, 0x2a, 0x01, 0x01, 0xff, 0x45, 0x33, 0x01, 0x85, 0xfb, - 0x01, 0x56, 0x67, 0x34, 0xa6, 0xce, 0x01, 0x57, 0xf6, 0x2f, 0xad, 0xce, - 0x41, 0x0f, 0xd3, 0x69, 0xac, 0x01, 0x5a, 0x42, 0x1f, 0x50, 0x27, 0x00, - 0xaf, 0x97, 0x01, 0x46, 0x16, 0xdc, 0x10, 0x27, 0x00, 0x03, 0x7c, 0x00, - 0x2f, 0x0f, 0xa4, 0x02, 0x1f, 0xb4, 0x01, 0xff, 0x51, 0x75, 0x54, 0x99, - 0xfb, 0x01, 0x05, 0x1a, 0x01, 0x06, 0x4d, 0x19, 0x7c, 0x33, 0xcc, 0x41, - 0x42, 0x68, 0x00, 0xf9, 0x25, 0x00, 0x51, 0x37, 0x5d, 0x9d, 0xfb, 0x41, - 0x46, 0xe7, 0x02, 0x3f, 0xf5, 0x01, 0x46, 0xab, 0x05, 0x52, 0x27, 0x40, - 0x06, 0x2d, 0x0d, 0x06, 0x4b, 0x47, 0x4b, 0x36, 0xcc, 0x41, 0xa3, 0x22, - 0x0a, 0xe1, 0x07, 0x12, 0x4d, 0x2e, 0x84, 0xb7, 0xcc, 0x01, 0x4f, 0xcb, - 0x71, 0xd3, 0xcc, 0x01, 0x4a, 0x59, 0xaf, 0xb3, 0xcc, 0x41, 0x4b, 0x0b, - 0x23, 0xa9, 0xcc, 0x01, 0x49, 0xf3, 0xba, 0xa7, 0xcc, 0x41, 0x05, 0x8e, - 0x86, 0x06, 0x4b, 0x89, 0x9b, 0xdd, 0x25, 0x40, 0x46, 0x48, 0xd7, 0xc7, - 0xcc, 0x01, 0xab, 0x12, 0x44, 0xb6, 0xee, 0xcf, 0xcc, 0x01, 0x45, 0xe6, - 0xbb, 0xbf, 0xcc, 0x01, 0x44, 0x0a, 0xef, 0xc3, 0xcc, 0x41, 0x43, 0xa1, - 0x01, 0xbb, 0xcc, 0x01, 0x45, 0xd5, 0x71, 0xcb, 0xcc, 0x41, 0x52, 0x5c, - 0x25, 0x93, 0xce, 0x01, 0x62, 0xb1, 0x0c, 0xb1, 0x23, 0x40, 0x1b, 0xf1, - 0x1b, 0x50, 0x06, 0x6d, 0x02, 0x01, 0xff, 0x0a, 0x73, 0x02, 0x31, 0x08, - 0x84, 0x02, 0x17, 0x15, 0x7d, 0x02, 0x01, 0xff, 0x46, 0x73, 0x02, 0x54, - 0xfb, 0x01, 0x4c, 0x09, 0x0f, 0x67, 0xfb, 0x01, 0x45, 0xc8, 0x00, 0x55, - 0xfb, 0x41, 0x06, 0x13, 0x01, 0x06, 0x52, 0xf2, 0x54, 0x63, 0xfb, 0x41, - 0x46, 0x73, 0x02, 0x56, 0xfb, 0x01, 0x4c, 0x09, 0x0f, 0x65, 0xfb, 0x41, - 0x06, 0x13, 0x01, 0x06, 0x52, 0xf2, 0x54, 0x62, 0xfb, 0x41, 0x4c, 0x09, - 0x0f, 0x64, 0xfb, 0x01, 0x45, 0xc8, 0x00, 0x66, 0xfb, 0x41, 0x46, 0x73, - 0x02, 0x52, 0xfb, 0x01, 0x45, 0xc8, 0x00, 0x53, 0xfb, 0x41, 0x4c, 0xc3, - 0x0a, 0x94, 0x25, 0x00, 0x4d, 0xa1, 0x1c, 0x82, 0xfb, 0x41, 0x07, 0x73, - 0x02, 0x21, 0x05, 0xc3, 0x00, 0x11, 0x06, 0xc8, 0x00, 0x01, 0xff, 0x53, - 0x5b, 0x25, 0x97, 0xce, 0x01, 0x4e, 0x18, 0x7c, 0x37, 0xcc, 0x41, 0x53, - 0x5b, 0x25, 0x94, 0xce, 0x01, 0x4e, 0x18, 0x7c, 0x34, 0xcc, 0x41, 0x58, - 0x05, 0x29, 0x95, 0xce, 0x01, 0x59, 0x55, 0x25, 0x96, 0xce, 0x41, 0x0f, - 0xd3, 0x69, 0x96, 0x01, 0x4f, 0x3c, 0x6a, 0xd4, 0x27, 0x00, 0xaf, 0x81, - 0x01, 0x03, 0x7c, 0x00, 0x1f, 0xb4, 0x01, 0xff, 0x52, 0x5e, 0x4c, 0x98, - 0xfb, 0x01, 0x05, 0x1a, 0x01, 0x06, 0x4d, 0x19, 0x7c, 0x30, 0xcc, 0x41, - 0x42, 0x68, 0x00, 0xf8, 0x25, 0x00, 0x51, 0x37, 0x5d, 0x9c, 0xfb, 0x41, - 0x06, 0x2d, 0x0d, 0x06, 0x4b, 0x47, 0x4b, 0x35, 0xcc, 0x41, 0xa3, 0x22, - 0x0a, 0xe1, 0x07, 0x12, 0x4d, 0x2e, 0x84, 0xb6, 0xcc, 0x01, 0x4f, 0xcb, - 0x71, 0xd2, 0xcc, 0x01, 0x4a, 0x59, 0xaf, 0xb2, 0xcc, 0x41, 0x4b, 0x0b, - 0x23, 0xa8, 0xcc, 0x01, 0x49, 0xf3, 0xba, 0xa6, 0xcc, 0x41, 0x05, 0x8e, - 0x86, 0x06, 0x4b, 0x89, 0x9b, 0xdc, 0x25, 0x40, 0x46, 0x48, 0xd7, 0xc6, - 0xcc, 0x01, 0xab, 0x12, 0x44, 0xb6, 0xee, 0xce, 0xcc, 0x01, 0x45, 0xe6, - 0xbb, 0xbe, 0xcc, 0x01, 0x44, 0x0a, 0xef, 0xc2, 0xcc, 0x41, 0x43, 0xa1, - 0x01, 0xba, 0xcc, 0x01, 0x45, 0xd5, 0x71, 0xca, 0xcc, 0x41, 0x52, 0x5c, - 0x25, 0x90, 0xce, 0x01, 0x63, 0x15, 0x0b, 0xb0, 0x23, 0x40, 0x06, 0x13, - 0x01, 0x11, 0x1b, 0x50, 0x1d, 0x01, 0xff, 0x46, 0x73, 0x02, 0x57, 0xfb, - 0x01, 0x45, 0xc8, 0x00, 0x58, 0xfb, 0x41, 0x0a, 0x73, 0x02, 0x32, 0x08, - 0x84, 0x02, 0x17, 0x15, 0x56, 0x1d, 0x01, 0xff, 0x46, 0x73, 0x02, 0x59, - 0xfb, 0x01, 0x4c, 0x09, 0x0f, 0x5c, 0xfb, 0x01, 0x45, 0xc8, 0x00, 0x5a, - 0xfb, 0x41, 0x52, 0x46, 0x52, 0x5e, 0xfb, 0x01, 0x06, 0x6d, 0x02, 0x01, - 0xff, 0x46, 0x73, 0x02, 0x5b, 0xfb, 0x01, 0x4c, 0x09, 0x0f, 0x60, 0xfb, - 0x41, 0x52, 0x46, 0x52, 0x5d, 0xfb, 0x01, 0x06, 0x6d, 0x02, 0x01, 0xff, - 0x4c, 0x09, 0x0f, 0x5f, 0xfb, 0x01, 0x45, 0xc8, 0x00, 0x61, 0xfb, 0x41, - 0x45, 0x33, 0x01, 0x80, 0x25, 0x80, 0x34, 0x46, 0xe7, 0x02, 0xe0, 0x25, - 0x00, 0x52, 0xde, 0x50, 0x03, 0xce, 0x01, 0x08, 0x11, 0x04, 0x18, 0x56, - 0x67, 0x34, 0xa7, 0xce, 0x01, 0x4c, 0x19, 0x04, 0x8e, 0xfb, 0x01, 0x57, - 0xf6, 0x2f, 0xac, 0xce, 0x01, 0x63, 0x7e, 0x0b, 0x14, 0xce, 0x41, 0x61, - 0xfe, 0x0d, 0x92, 0xfb, 0x01, 0x4c, 0xe3, 0x10, 0xda, 0x25, 0x40, 0x64, - 0x70, 0x08, 0x91, 0xfb, 0x41, 0x05, 0xc3, 0x00, 0x17, 0x51, 0x9d, 0x1c, - 0xe4, 0xfb, 0x01, 0x06, 0xc8, 0x00, 0x01, 0xff, 0x53, 0x5b, 0x25, 0x92, - 0xce, 0x01, 0x4e, 0x18, 0x7c, 0x32, 0xcc, 0x41, 0x53, 0x5b, 0x25, 0x91, - 0xce, 0x01, 0x4e, 0x18, 0x7c, 0x31, 0xcc, 0x41, 0xac, 0x06, 0x6f, 0x09, - 0x01, 0x68, 0xfb, 0x41, 0x6d, 0x65, 0x01, 0x6a, 0xfb, 0x01, 0x05, 0x14, - 0x01, 0x01, 0xff, 0x50, 0xbf, 0x0a, 0x80, 0xfb, 0x01, 0x55, 0xbd, 0x3d, - 0x9a, 0xfb, 0x41, 0x17, 0xa0, 0x2d, 0x66, 0x09, 0x9c, 0x01, 0x01, 0xff, - 0xa1, 0x53, 0x4b, 0x8f, 0x99, 0x79, 0xcc, 0x01, 0x44, 0x9a, 0xec, 0xfb, - 0xcd, 0x01, 0x47, 0x7b, 0xce, 0x00, 0xcc, 0x01, 0x51, 0xe4, 0x5a, 0xe6, - 0xf6, 0x01, 0xb2, 0x21, 0x06, 0x0c, 0x07, 0x11, 0x0e, 0xfc, 0x7b, 0x01, - 0xff, 0x4f, 0xcf, 0x6d, 0xed, 0x25, 0x00, 0x50, 0x3a, 0x65, 0xee, 0x25, - 0x40, 0x48, 0x41, 0x33, 0xe8, 0xf6, 0x01, 0x4c, 0x83, 0x5a, 0x3c, 0xf5, - 0x41, 0x49, 0x40, 0xb3, 0x98, 0xcc, 0x01, 0x4b, 0x65, 0x06, 0x3a, 0xf5, - 0x01, 0x44, 0x75, 0xaa, 0x66, 0xcc, 0x01, 0x4a, 0x4d, 0xac, 0x57, 0xcc, - 0x41, 0x47, 0x42, 0x33, 0xe7, 0xf6, 0x01, 0x4a, 0xb3, 0xaf, 0x61, 0xcc, - 0x41, 0x4c, 0xbd, 0x8b, 0x75, 0xcc, 0x01, 0x4a, 0x9b, 0x28, 0x71, 0xcc, - 0x41, 0x05, 0xce, 0x00, 0x6d, 0x05, 0x72, 0x05, 0x48, 0x05, 0x4f, 0x14, - 0x19, 0x49, 0xa9, 0xb6, 0x7e, 0x29, 0x00, 0x57, 0xc8, 0x2f, 0xf0, 0x22, - 0x00, 0x44, 0x25, 0x38, 0xa5, 0x22, 0xc0, 0x00, 0x52, 0x56, 0x4e, 0xdf, - 0x27, 0x40, 0x45, 0xce, 0x00, 0x95, 0x21, 0x80, 0x1e, 0x4b, 0x95, 0x97, - 0x0d, 0x2b, 0x00, 0x4c, 0x71, 0x8c, 0xd5, 0x21, 0x00, 0x50, 0x6a, 0x65, - 0x59, 0xf8, 0x01, 0x55, 0x01, 0x02, 0x65, 0x2b, 0x00, 0x4b, 0xfa, 0x0f, - 0xf3, 0x21, 0x40, 0x4a, 0x0f, 0xa4, 0xa8, 0x21, 0x40, 0x0f, 0xb1, 0x6d, - 0x11, 0x10, 0x1a, 0x65, 0x01, 0xff, 0x4c, 0x4d, 0x8f, 0x4c, 0x29, 0x00, - 0x4d, 0x0f, 0x86, 0x4f, 0x29, 0x40, 0x4c, 0x4d, 0x8f, 0x51, 0x29, 0x00, - 0x4d, 0x0f, 0x86, 0x4d, 0x29, 0x40, 0x4f, 0x2f, 0x68, 0xbd, 0x29, 0x00, - 0x44, 0xe6, 0x01, 0x03, 0x23, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x5b, 0xd5, - 0x19, 0x24, 0x23, 0x00, 0x52, 0x35, 0x46, 0xb9, 0x2b, 0x40, 0x4b, 0x06, - 0x97, 0x12, 0xf6, 0x01, 0x4e, 0xee, 0x74, 0xd1, 0x2b, 0x00, 0xa4, 0x59, - 0xa9, 0x06, 0x5a, 0x60, 0x20, 0xaf, 0x26, 0x40, 0x49, 0x14, 0xb5, 0x84, - 0xf9, 0x01, 0x42, 0x10, 0x00, 0x2a, 0x22, 0x80, 0x14, 0xb4, 0x06, 0x57, - 0x8f, 0x24, 0x72, 0x26, 0x40, 0x4a, 0x35, 0x20, 0x1f, 0x00, 0x00, 0x49, - 0xc0, 0x75, 0xfa, 0x2b, 0x40, 0x80, 0x01, 0xff, 0x06, 0x5c, 0x00, 0x1d, - 0x5c, 0xca, 0x16, 0x4a, 0x2a, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x4a, - 0xe5, 0xaa, 0x45, 0x2a, 0x00, 0x4a, 0x6d, 0x96, 0x41, 0x2a, 0x00, 0x47, - 0x77, 0x7e, 0x42, 0x2a, 0x40, 0x56, 0x2b, 0x32, 0x48, 0x2a, 0x00, 0x4c, - 0x5a, 0x0a, 0x46, 0x2a, 0x40, 0x45, 0x65, 0xc9, 0x3f, 0x20, 0x00, 0x48, - 0xf3, 0xad, 0x8c, 0x23, 0x40, 0x80, 0x01, 0xff, 0x49, 0xab, 0xba, 0xf1, - 0x26, 0x00, 0x4f, 0x51, 0x73, 0x14, 0x26, 0x40, 0x07, 0xc1, 0x05, 0x06, - 0x4c, 0xb3, 0x24, 0x9f, 0x03, 0x41, 0xa1, 0xb3, 0x01, 0x44, 0x8a, 0x97, - 0x81, 0x03, 0x01, 0xa4, 0x9e, 0x01, 0xa7, 0x8f, 0x01, 0x42, 0x0b, 0x00, - 0x85, 0x03, 0x81, 0x81, 0x01, 0xe9, 0x9b, 0x03, 0x01, 0xab, 0x6f, 0x45, - 0xfd, 0xe4, 0x8d, 0x03, 0x01, 0x43, 0x89, 0x05, 0x8e, 0x03, 0x01, 0x43, - 0x54, 0x22, 0x90, 0x03, 0x01, 0x42, 0xb8, 0x0b, 0x94, 0x03, 0x01, 0x44, - 0xee, 0xee, 0x96, 0x03, 0x01, 0x45, 0x0f, 0xe7, 0x97, 0x03, 0x01, 0xb3, - 0x2f, 0xb4, 0x1d, 0xf5, 0x9c, 0x03, 0x01, 0x42, 0x15, 0x02, 0x86, 0x03, - 0x01, 0x43, 0x58, 0x51, 0x8a, 0x03, 0x01, 0xba, 0x01, 0xff, 0x43, 0x45, - 0x0f, 0x87, 0x03, 0x01, 0xf5, 0x91, 0x03, 0x41, 0x42, 0xc2, 0x05, 0x89, - 0x03, 0x01, 0x45, 0xd1, 0xe3, 0x98, 0x03, 0x01, 0xef, 0x9a, 0x03, 0x41, - 0xa1, 0x0c, 0x43, 0x0e, 0x16, 0x8c, 0x03, 0x01, 0x42, 0x6f, 0x00, 0x9d, - 0x03, 0x41, 0x42, 0x04, 0x00, 0x95, 0x03, 0x01, 0x43, 0xd9, 0x51, 0x92, - 0x03, 0x41, 0x42, 0xf5, 0x13, 0x8b, 0x03, 0x01, 0x42, 0x22, 0x00, 0x83, - 0x03, 0x41, 0x42, 0x12, 0x00, 0x88, 0x03, 0x41, 0x44, 0xc6, 0xeb, 0x82, - 0x03, 0x01, 0x44, 0x4b, 0x9a, 0x99, 0x03, 0x41, 0x44, 0x6c, 0xd3, 0x84, - 0x03, 0x01, 0x43, 0x22, 0x00, 0x8f, 0x03, 0x41, 0x42, 0x9e, 0x01, 0x93, - 0x03, 0x01, 0x43, 0x93, 0x79, 0x80, 0x03, 0x41, 0x8d, 0xfa, 0x72, 0xa1, - 0xe3, 0x38, 0xa5, 0x81, 0x2e, 0xa8, 0xee, 0x23, 0xa9, 0xd1, 0x10, 0xaf, - 0xc2, 0x09, 0xb2, 0xd4, 0x06, 0xb5, 0x88, 0x01, 0xb7, 0x01, 0xff, 0x57, - 0x46, 0x2b, 0x39, 0x27, 0x00, 0x57, 0x58, 0x2e, 0x00, 0xf5, 0x01, 0xaf, - 0x01, 0xff, 0x80, 0x06, 0x48, 0x3a, 0xc0, 0x3a, 0x2e, 0x40, 0x5c, 0xae, - 0x16, 0x51, 0x20, 0x00, 0x4c, 0x45, 0x8b, 0xb0, 0xf5, 0x01, 0x58, 0x25, - 0x27, 0x75, 0x2a, 0x00, 0x03, 0xd4, 0x09, 0x44, 0x46, 0x12, 0x85, 0x95, - 0xf4, 0x01, 0x15, 0x32, 0x3b, 0x2e, 0x4e, 0xc6, 0x77, 0xc9, 0x29, 0x00, - 0x08, 0xa3, 0x21, 0x18, 0x51, 0xb5, 0x4d, 0x6c, 0xf4, 0x01, 0x5a, 0x64, - 0x21, 0x88, 0xcc, 0x01, 0x4e, 0x0e, 0x7b, 0xea, 0xf5, 0x01, 0x53, 0xb3, - 0x4d, 0x6d, 0xf4, 0x41, 0x4c, 0x85, 0x8a, 0x07, 0x2a, 0x00, 0x4b, 0xac, - 0x9e, 0x08, 0x2a, 0x40, 0x43, 0x1a, 0x00, 0x55, 0x2a, 0x00, 0x42, 0x0c, - 0x00, 0x56, 0x2a, 0x40, 0x80, 0x06, 0x5a, 0xa9, 0x0b, 0x2a, 0x2e, 0x40, - 0x46, 0x2e, 0x7c, 0x25, 0x20, 0x00, 0x4b, 0xb8, 0x0b, 0x5a, 0x20, 0x40, - 0x49, 0xe8, 0xb6, 0xae, 0x20, 0x00, 0xac, 0xc4, 0x01, 0x4b, 0x2b, 0x9d, - 0x43, 0xf9, 0x01, 0xb2, 0x01, 0xff, 0xab, 0xac, 0x01, 0x04, 0x48, 0x07, - 0x06, 0x43, 0xbd, 0x01, 0x22, 0xf4, 0x41, 0xa1, 0x93, 0x01, 0x06, 0xe1, - 0x02, 0x82, 0x01, 0xa3, 0x74, 0xa4, 0x5b, 0x57, 0xb7, 0x2d, 0x29, 0x21, - 0x00, 0x02, 0xb4, 0x01, 0x3b, 0x4c, 0x69, 0x91, 0x8f, 0xf5, 0x01, 0xb3, - 0x06, 0x51, 0x14, 0x5e, 0xc9, 0x26, 0x40, 0x12, 0xcc, 0x46, 0x1d, 0x48, - 0x6f, 0x58, 0x35, 0x2e, 0x00, 0x46, 0xfc, 0xda, 0x4e, 0x21, 0x00, 0x05, - 0x00, 0x20, 0x01, 0xff, 0x52, 0xe2, 0x4f, 0x57, 0xf6, 0x01, 0x52, 0x3a, - 0x55, 0x55, 0xf6, 0x41, 0xe7, 0x41, 0x21, 0x00, 0xec, 0x42, 0x21, 0x00, - 0xf9, 0x44, 0x21, 0x40, 0x04, 0xb6, 0x01, 0x06, 0x46, 0x75, 0x32, 0x19, - 0x23, 0x40, 0x52, 0xe2, 0x4f, 0x56, 0xf6, 0x01, 0x52, 0x3a, 0x55, 0x54, - 0xf6, 0x41, 0x45, 0xf1, 0xd7, 0x38, 0x2e, 0x00, 0x06, 0x87, 0x15, 0x01, - 0xff, 0x44, 0x25, 0x01, 0x8b, 0x21, 0x00, 0x42, 0x15, 0x02, 0x8a, 0x21, - 0x40, 0x48, 0xe2, 0xc0, 0x32, 0x21, 0x00, 0x44, 0xe9, 0x04, 0x32, 0x2e, - 0x40, 0x48, 0x3a, 0xc7, 0xc2, 0x2b, 0x00, 0x4b, 0x1a, 0x5e, 0xca, 0x26, - 0x40, 0x48, 0x2e, 0x3d, 0x4b, 0x21, 0x00, 0x44, 0x05, 0x02, 0xa2, 0x29, - 0x40, 0x42, 0x3f, 0x1c, 0x83, 0xf9, 0x01, 0x4d, 0xdc, 0x82, 0xba, 0x20, - 0x40, 0x42, 0x8f, 0x04, 0x37, 0xf3, 0x01, 0x0b, 0xcf, 0xa1, 0x01, 0xff, - 0x4e, 0x9a, 0x74, 0xc9, 0x13, 0x01, 0x49, 0x0b, 0xb5, 0xd0, 0x13, 0x01, - 0xa4, 0xd6, 0x03, 0x4f, 0xe0, 0x6b, 0xd2, 0x13, 0x01, 0x07, 0xc1, 0x05, - 0xa2, 0x01, 0x45, 0x32, 0xe7, 0xd1, 0x13, 0x01, 0x05, 0x2f, 0x03, 0x5b, - 0xb6, 0x01, 0xff, 0x0a, 0x7f, 0xa7, 0x48, 0x0a, 0xd2, 0x75, 0x01, 0xff, - 0xa1, 0x35, 0x42, 0x27, 0x01, 0xc2, 0x13, 0x01, 0xe9, 0xb9, 0x13, 0x81, - 0x26, 0x42, 0x69, 0x05, 0xc7, 0x13, 0x01, 0xf5, 0xbb, 0x13, 0x81, 0x17, - 0x08, 0x9b, 0xbe, 0x01, 0xff, 0xec, 0xbf, 0x13, 0x81, 0x09, 0xf2, 0xbd, - 0x13, 0xc1, 0x00, 0xf2, 0xbe, 0x13, 0x41, 0xec, 0xc0, 0x13, 0x41, 0xf5, - 0xbc, 0x13, 0x41, 0xe9, 0xba, 0x13, 0x41, 0xe1, 0xb8, 0x13, 0x01, 0xe9, - 0xc5, 0x13, 0x01, 0xf5, 0xc8, 0x13, 0x41, 0x48, 0x68, 0x7b, 0xe2, 0x13, - 0x01, 0x47, 0xa5, 0x0a, 0xe1, 0x13, 0x41, 0xa1, 0x2f, 0x50, 0xba, 0x5f, - 0xca, 0x13, 0x01, 0x4d, 0x92, 0x83, 0xcf, 0x13, 0x01, 0x4b, 0x75, 0x9e, - 0xd7, 0x13, 0x01, 0x45, 0xce, 0xe6, 0xd3, 0x13, 0x01, 0x4e, 0xc8, 0x7a, - 0xd8, 0x13, 0x01, 0x02, 0x02, 0x00, 0x01, 0xff, 0x44, 0x5d, 0x23, 0xce, - 0x13, 0x01, 0x45, 0xa3, 0x4a, 0xcd, 0x13, 0x41, 0x47, 0xd1, 0x15, 0xcc, - 0x13, 0x01, 0x47, 0xf2, 0x86, 0xb7, 0x13, 0x41, 0xe1, 0x80, 0x13, 0x81, - 0x97, 0x02, 0xa2, 0x8a, 0x02, 0xa3, 0xfd, 0x01, 0xa4, 0xe4, 0x01, 0x42, - 0x27, 0x01, 0x8b, 0x13, 0x01, 0xa7, 0xd1, 0x01, 0x42, 0x22, 0x00, 0xb2, - 0x13, 0x01, 0xe9, 0x82, 0x13, 0x81, 0xc1, 0x01, 0xaa, 0xb4, 0x01, 0xab, - 0xa7, 0x01, 0xac, 0x93, 0x01, 0x42, 0x6c, 0x00, 0xaa, 0x13, 0x01, 0xae, - 0x75, 0x42, 0x69, 0x05, 0x90, 0x13, 0x01, 0xb0, 0x63, 0xb2, 0x57, 0xb3, - 0x45, 0xb4, 0x2c, 0xf5, 0x84, 0x13, 0x81, 0x23, 0xb6, 0x06, 0x42, 0x34, - 0x22, 0xab, 0x13, 0x41, 0xe1, 0xae, 0x13, 0x01, 0x07, 0x9c, 0xbe, 0x01, - 0xff, 0xec, 0x88, 0x13, 0x81, 0x09, 0xf2, 0x86, 0x13, 0xc1, 0x00, 0xf2, - 0x87, 0x13, 0x41, 0xec, 0x89, 0x13, 0x41, 0xf5, 0x85, 0x13, 0x41, 0xe1, - 0xa1, 0x13, 0x01, 0x42, 0x22, 0x00, 0xa2, 0x13, 0x01, 0xb4, 0x01, 0xff, - 0xe1, 0x9c, 0x13, 0x01, 0x42, 0x22, 0x00, 0x9d, 0x13, 0x41, 0xe1, 0xb1, - 0x13, 0x01, 0x42, 0x22, 0x00, 0xaf, 0x13, 0x01, 0x42, 0x15, 0x06, 0xb0, - 0x13, 0x41, 0xe1, 0xac, 0x13, 0x01, 0x42, 0x71, 0x00, 0xb4, 0x13, 0x41, - 0xe1, 0xa6, 0x13, 0x01, 0x42, 0x22, 0x00, 0xa7, 0x13, 0x41, 0xe1, 0xa5, - 0x13, 0x01, 0x42, 0x24, 0x02, 0x96, 0x13, 0x01, 0x42, 0xff, 0x04, 0xa0, - 0x13, 0x01, 0x42, 0x34, 0x22, 0x9b, 0x13, 0x41, 0xe1, 0xad, 0x13, 0x01, - 0xac, 0x01, 0xff, 0xe1, 0xb3, 0x13, 0x01, 0x42, 0x74, 0x00, 0xb5, 0x13, - 0x41, 0xe1, 0x92, 0x13, 0x01, 0x42, 0x22, 0x00, 0x93, 0x13, 0x41, 0xe1, - 0x99, 0x13, 0x01, 0x42, 0x22, 0x00, 0x9a, 0x13, 0x41, 0xe9, 0x83, 0x13, - 0x41, 0xe1, 0x94, 0x13, 0x01, 0x42, 0x22, 0x00, 0x95, 0x13, 0x41, 0xe1, - 0xa3, 0x13, 0x01, 0xa4, 0x06, 0x42, 0x22, 0x00, 0xa4, 0x13, 0x41, 0xe1, - 0x9e, 0x13, 0x01, 0x42, 0x22, 0x00, 0x9f, 0x13, 0x41, 0xe1, 0x97, 0x13, - 0x01, 0x42, 0x22, 0x00, 0x98, 0x13, 0x41, 0xe1, 0xa8, 0x13, 0x01, 0x42, - 0x22, 0x00, 0xa9, 0x13, 0x41, 0xe1, 0x81, 0x13, 0x01, 0xe9, 0x8e, 0x13, - 0x01, 0xf5, 0x91, 0x13, 0x41, 0x44, 0xd1, 0x1f, 0xd4, 0x13, 0x01, 0x4b, - 0xd8, 0x9e, 0xd5, 0x13, 0x41, 0xa1, 0xb2, 0x02, 0xa9, 0x3d, 0xaf, 0x14, - 0xb5, 0x01, 0xff, 0xe5, 0xa8, 0x22, 0x80, 0x06, 0x44, 0xfe, 0xed, 0xba, - 0xf3, 0x41, 0x50, 0xba, 0x5e, 0xdf, 0x2b, 0x40, 0x42, 0x0f, 0x07, 0xcc, - 0xf9, 0x81, 0x1a, 0xb0, 0x01, 0xff, 0x42, 0xb5, 0x45, 0xc6, 0xf3, 0x01, - 0x05, 0x36, 0x00, 0x01, 0xff, 0x45, 0xb9, 0xcd, 0x79, 0xf3, 0x01, 0x44, - 0xbf, 0x59, 0x20, 0xf4, 0x41, 0x45, 0x2c, 0xe3, 0x8e, 0xf6, 0x41, 0x03, - 0x1c, 0x01, 0xb1, 0x01, 0x45, 0xc4, 0x3a, 0x5d, 0x20, 0x00, 0x4b, 0xc9, - 0x98, 0x31, 0xf5, 0x01, 0x09, 0x24, 0x94, 0x6e, 0x04, 0xcb, 0x1c, 0x01, - 0xff, 0x4e, 0xfc, 0x74, 0xf6, 0x2a, 0x00, 0x46, 0xf0, 0xd7, 0x4b, 0x2e, - 0x00, 0x14, 0xc4, 0x29, 0x4d, 0x48, 0xf3, 0x25, 0x2d, 0x22, 0x00, 0x07, - 0xab, 0xd0, 0x37, 0xb0, 0x29, 0x57, 0x69, 0x30, 0xfb, 0x2a, 0x00, 0x45, - 0xad, 0x22, 0x4b, 0x22, 0x00, 0x0d, 0x42, 0x01, 0x01, 0xff, 0x4f, 0x71, - 0x30, 0xf4, 0x2a, 0x00, 0x49, 0x0b, 0x38, 0x80, 0x29, 0x00, 0x4f, 0x56, - 0x01, 0xaa, 0x22, 0x00, 0x56, 0x53, 0x37, 0xf5, 0x2a, 0x40, 0x43, 0xb8, - 0x27, 0xfb, 0x29, 0x00, 0x44, 0x64, 0x1a, 0x34, 0x20, 0x40, 0x4c, 0x87, - 0x00, 0xf8, 0x2a, 0x00, 0x49, 0xec, 0x00, 0xf7, 0x2a, 0x40, 0x56, 0xc5, - 0x32, 0x68, 0x2a, 0x00, 0x56, 0xcf, 0x36, 0x69, 0x2a, 0x40, 0x45, 0xb8, - 0x70, 0x37, 0x26, 0x00, 0x44, 0x91, 0x8f, 0x32, 0x26, 0x00, 0x46, 0x28, - 0x7a, 0x30, 0x26, 0x00, 0x44, 0x0f, 0x2e, 0x31, 0x26, 0x00, 0x48, 0x33, - 0x34, 0x36, 0x26, 0x00, 0x47, 0x7f, 0x79, 0x33, 0x26, 0x00, 0xb7, 0x01, - 0xff, 0x44, 0x8a, 0x00, 0x35, 0x26, 0x00, 0x43, 0xbe, 0x06, 0x34, 0x26, - 0x40, 0x02, 0x68, 0x00, 0x17, 0x05, 0x1f, 0x01, 0x01, 0xff, 0x46, 0x2a, - 0x21, 0x23, 0x20, 0x00, 0x4c, 0x3d, 0x8d, 0xa9, 0xf6, 0x01, 0x45, 0x1a, - 0x2f, 0xd0, 0xf4, 0x41, 0x06, 0x50, 0x00, 0x06, 0x58, 0x70, 0x06, 0x9d, - 0x27, 0x40, 0x49, 0x98, 0x1d, 0xca, 0x29, 0x00, 0x4f, 0xb3, 0x18, 0xc6, - 0xf6, 0x01, 0x50, 0x7a, 0x65, 0xcd, 0x29, 0x00, 0x48, 0x78, 0x58, 0xcb, - 0x29, 0x40, 0xa3, 0x28, 0x4c, 0x11, 0x8c, 0x22, 0x21, 0x00, 0x42, 0x9e, - 0x01, 0x86, 0xf6, 0x01, 0xed, 0x8a, 0xf6, 0x81, 0x11, 0x02, 0x5f, 0x01, - 0x01, 0xff, 0x45, 0xd3, 0xe6, 0xd7, 0x2b, 0x00, 0x53, 0x67, 0x4d, 0xdb, - 0x2a, 0x40, 0x44, 0x46, 0x63, 0x8b, 0xf6, 0x41, 0x45, 0xb2, 0xe4, 0xb2, - 0xf5, 0x01, 0x43, 0x9c, 0x07, 0x9c, 0xf6, 0x41, 0x0c, 0x29, 0x8c, 0xd4, - 0x04, 0x44, 0xcc, 0x36, 0xbd, 0xf6, 0x01, 0x49, 0xbc, 0xb8, 0xfc, 0xf5, - 0x01, 0x44, 0x4e, 0x38, 0x45, 0xf3, 0x01, 0x44, 0x36, 0x66, 0x45, 0xf4, - 0x01, 0xaf, 0xa6, 0x04, 0x02, 0x20, 0x00, 0x8f, 0x02, 0x17, 0x24, 0x30, - 0xbf, 0x01, 0xb4, 0x01, 0xff, 0x49, 0x88, 0xb3, 0x30, 0x23, 0x00, 0x02, - 0x7b, 0x02, 0x01, 0xff, 0x07, 0xc1, 0x05, 0x06, 0x50, 0x9a, 0x65, 0xae, - 0xe2, 0x41, 0xe1, 0xad, 0xe2, 0x81, 0x9d, 0x01, 0xa2, 0x7a, 0x43, 0xef, - 0x1f, 0x9a, 0xe2, 0x01, 0x42, 0xa1, 0x10, 0x93, 0xe2, 0x01, 0xe5, 0xa6, + 0xab, 0x33, 0x45, 0x1a, 0x01, 0x49, 0xa0, 0x1b, 0x3f, 0x1a, 0x41, 0x06, + 0x6a, 0x3d, 0x27, 0x06, 0xfe, 0x2d, 0x01, 0xff, 0x0d, 0xdf, 0x82, 0x06, + 0x51, 0x2e, 0x5b, 0x3a, 0x1a, 0x41, 0x42, 0x74, 0x00, 0x3d, 0x1a, 0x01, + 0x42, 0x71, 0x00, 0x3c, 0x1a, 0x01, 0x42, 0xf5, 0x0a, 0x3e, 0x1a, 0x01, + 0x42, 0xbc, 0x22, 0x3b, 0x1a, 0x41, 0x56, 0xab, 0x33, 0x46, 0x1a, 0x01, + 0x49, 0xa0, 0x1b, 0x40, 0x1a, 0x41, 0x4e, 0x25, 0x76, 0xff, 0x22, 0x00, + 0x56, 0x69, 0x33, 0x64, 0x2a, 0x00, 0x05, 0xc3, 0x00, 0x46, 0xb2, 0x27, + 0xb3, 0x06, 0x4a, 0x5d, 0xb2, 0x82, 0x29, 0x40, 0x06, 0x82, 0xda, 0x06, + 0x43, 0x14, 0x45, 0x81, 0x29, 0x40, 0x4b, 0xe6, 0x3a, 0x1f, 0x2a, 0x00, + 0xb0, 0x01, 0xff, 0x45, 0x8b, 0xe7, 0x20, 0x2a, 0x00, 0x49, 0xd9, 0xbe, + 0x21, 0x2a, 0x40, 0x54, 0xa0, 0x40, 0x65, 0x2a, 0x00, 0x55, 0xdc, 0x3a, + 0x3e, 0x2a, 0x00, 0x05, 0xc9, 0x00, 0x01, 0xff, 0x4f, 0x4f, 0x6b, 0x8a, + 0x29, 0x00, 0x4d, 0x31, 0x84, 0x88, 0x29, 0x40, 0x4f, 0x4f, 0x6b, 0x89, + 0x29, 0x00, 0x4d, 0x31, 0x84, 0x87, 0x29, 0x40, 0xa1, 0x89, 0x2e, 0xa5, + 0xc4, 0x2b, 0xa9, 0x06, 0x44, 0xb1, 0xf1, 0x80, 0xfa, 0x41, 0x80, 0x06, + 0x46, 0x1e, 0xde, 0x2f, 0x26, 0x40, 0x08, 0x58, 0xa5, 0xcd, 0x28, 0x09, + 0x1a, 0x18, 0x01, 0xff, 0xe1, 0x0a, 0xa0, 0x80, 0xb6, 0x28, 0xa2, 0x94, + 0x26, 0xa3, 0x87, 0x24, 0xa4, 0x9d, 0x22, 0xe5, 0x14, 0xa0, 0x80, 0x93, + 0x22, 0xa6, 0xb6, 0x21, 0xa7, 0xb7, 0x1f, 0xa8, 0x8b, 0x1b, 0xe9, 0x02, + 0xa0, 0x80, 0xe1, 0x1a, 0xaa, 0xf8, 0x18, 0xab, 0xfd, 0x17, 0xac, 0xe3, + 0x16, 0xad, 0xf6, 0x14, 0xae, 0xab, 0x0e, 0xef, 0x11, 0xa0, 0x80, 0x99, + 0x0e, 0xb0, 0x95, 0x0d, 0xb1, 0x9a, 0x0c, 0xb2, 0xba, 0x0a, 0xb3, 0xb4, + 0x07, 0xb4, 0xb9, 0x06, 0x42, 0x1a, 0x05, 0x0d, 0xa0, 0x80, 0xa9, 0x06, + 0xb6, 0xa4, 0x05, 0xb7, 0xe4, 0x04, 0xb8, 0x89, 0x04, 0xb9, 0x8e, 0x03, + 0xba, 0x01, 0xff, 0xe1, 0x96, 0xa2, 0x80, 0xf9, 0x02, 0xe5, 0xa0, 0xa2, + 0x80, 0xeb, 0x02, 0xa8, 0xf4, 0x01, 0xe9, 0x8f, 0xa2, 0x80, 0xd5, 0x01, + 0xef, 0x9d, 0xa2, 0x80, 0xc3, 0x01, 0xf5, 0xa4, 0xa2, 0x80, 0x9b, 0x01, + 0xf9, 0xaa, 0xa2, 0x80, 0x80, 0x01, 0xba, 0x01, 0xff, 0xe1, 0xda, 0xa2, + 0x80, 0x6c, 0xe5, 0xe0, 0xa2, 0x80, 0x5f, 0xe9, 0xd2, 0xa2, 0x80, 0x3d, + 0xef, 0xdd, 0xa2, 0x80, 0x30, 0xf5, 0xe3, 0xa2, 0x80, 0x1a, 0xf9, 0xe9, + 0xa2, 0xc0, 0x00, 0xf0, 0xea, 0xa2, 0x00, 0xf2, 0xec, 0xa2, 0x80, 0x08, + 0xf4, 0xe7, 0xa2, 0x00, 0xf8, 0xe8, 0xa2, 0x40, 0xf8, 0xeb, 0xa2, 0x40, + 0xf0, 0xe4, 0xa2, 0x00, 0xf2, 0xe6, 0xa2, 0x80, 0x04, 0xf8, 0xe2, 0xa2, + 0x40, 0xf8, 0xe5, 0xa2, 0x40, 0xf0, 0xde, 0xa2, 0x00, 0xf8, 0xdc, 0xa2, + 0x40, 0xe5, 0xd6, 0xa2, 0x80, 0x0c, 0xf0, 0xd3, 0xa2, 0x00, 0xf4, 0xd0, + 0xa2, 0x00, 0xf8, 0xd1, 0xa2, 0x40, 0xf0, 0xd7, 0xa2, 0x00, 0xf4, 0xd4, + 0xa2, 0x00, 0xf8, 0xd5, 0xa2, 0x40, 0xf0, 0xe1, 0xa2, 0x00, 0xf8, 0xdf, + 0xa2, 0x40, 0xf0, 0xdb, 0xa2, 0x00, 0xf4, 0xd8, 0xa2, 0x00, 0xf8, 0xd9, + 0xa2, 0x40, 0xf0, 0xab, 0xa2, 0x00, 0xf2, 0xad, 0xa2, 0x80, 0x08, 0xf4, + 0xa8, 0xa2, 0x00, 0xf8, 0xa9, 0xa2, 0x40, 0xf8, 0xac, 0xa2, 0x40, 0xef, + 0x99, 0xa2, 0x80, 0x15, 0xf0, 0xa5, 0xa2, 0x00, 0xf2, 0xa7, 0xa2, 0x80, + 0x08, 0xf4, 0xa2, 0xa2, 0x00, 0xf8, 0xa3, 0xa2, 0x40, 0xf8, 0xa6, 0xa2, + 0x40, 0xf0, 0x9a, 0xa2, 0x00, 0xf8, 0x98, 0xa2, 0x40, 0xf0, 0x9e, 0xa2, + 0x00, 0xf4, 0x9b, 0xa2, 0x00, 0xf8, 0x9c, 0xa2, 0x40, 0xe5, 0x92, 0xa2, + 0x80, 0x0c, 0xf0, 0x90, 0xa2, 0x00, 0xf4, 0x8d, 0xa2, 0x00, 0xf8, 0x8e, + 0xa2, 0x40, 0xf0, 0x93, 0xa2, 0x00, 0xf8, 0x91, 0xa2, 0x40, 0xe1, 0x48, + 0xa3, 0x80, 0x63, 0xe5, 0x53, 0xa3, 0x80, 0x52, 0xef, 0x4f, 0xa3, 0x80, + 0x41, 0xf5, 0x57, 0xa3, 0x80, 0x1a, 0xf9, 0x5d, 0xa3, 0xc0, 0x00, 0xf0, + 0x5e, 0xa3, 0x00, 0xf2, 0x60, 0xa3, 0x80, 0x08, 0xf4, 0x5b, 0xa3, 0x00, + 0xf8, 0x5c, 0xa3, 0x40, 0xf8, 0x5f, 0xa3, 0x40, 0xef, 0x4b, 0xa3, 0x80, + 0x15, 0xf0, 0x58, 0xa3, 0x00, 0xf2, 0x5a, 0xa3, 0x80, 0x08, 0xf4, 0x55, + 0xa3, 0x00, 0xf8, 0x56, 0xa3, 0x40, 0xf8, 0x59, 0xa3, 0x40, 0xf0, 0x4c, + 0xa3, 0x00, 0xf8, 0x4a, 0xa3, 0x40, 0xf0, 0x50, 0xa3, 0x00, 0xf4, 0x4d, + 0xa3, 0x00, 0xf8, 0x4e, 0xa3, 0x40, 0xf0, 0x54, 0xa3, 0x00, 0xf4, 0x51, + 0xa3, 0x00, 0xf8, 0x52, 0xa3, 0x40, 0xf0, 0x49, 0xa3, 0x00, 0xf4, 0x46, + 0xa3, 0x00, 0xf8, 0x47, 0xa3, 0x40, 0xf0, 0xa1, 0xa2, 0x00, 0xf8, 0x9f, + 0xa2, 0x40, 0xf0, 0x97, 0xa2, 0x00, 0xf4, 0x94, 0xa2, 0x00, 0xf8, 0x95, + 0xa2, 0x40, 0xe9, 0x73, 0xa4, 0x80, 0x56, 0xef, 0x7f, 0xa4, 0x80, 0x45, + 0xf5, 0x83, 0xa4, 0x80, 0x1a, 0xf9, 0x89, 0xa4, 0xc0, 0x00, 0xf0, 0x8a, + 0xa4, 0x00, 0xf2, 0x8c, 0xa4, 0x80, 0x08, 0xf4, 0x87, 0xa4, 0x00, 0xf8, + 0x88, 0xa4, 0x40, 0xf8, 0x8b, 0xa4, 0x40, 0xef, 0x7b, 0xa4, 0x80, 0x15, + 0xf0, 0x84, 0xa4, 0x00, 0xf2, 0x86, 0xa4, 0x80, 0x08, 0xf4, 0x81, 0xa4, + 0x00, 0xf8, 0x82, 0xa4, 0x40, 0xf8, 0x85, 0xa4, 0x40, 0xf0, 0x7c, 0xa4, + 0x00, 0xf4, 0x79, 0xa4, 0x00, 0xf8, 0x7a, 0xa4, 0x40, 0xf0, 0x80, 0xa4, + 0x00, 0xf4, 0x7d, 0xa4, 0x00, 0xf8, 0x7e, 0xa4, 0x40, 0xe5, 0x77, 0xa4, + 0x80, 0x0c, 0xf0, 0x74, 0xa4, 0x00, 0xf4, 0x71, 0xa4, 0x00, 0xf8, 0x72, + 0xa4, 0x40, 0xf0, 0x78, 0xa4, 0x00, 0xf4, 0x75, 0xa4, 0x00, 0xf8, 0x76, + 0xa4, 0x40, 0xe9, 0x5f, 0xa4, 0x80, 0x36, 0xef, 0x69, 0xa4, 0x80, 0x25, + 0x42, 0x1a, 0x05, 0x66, 0xa4, 0x80, 0x1a, 0xf9, 0x6d, 0xa4, 0xc0, 0x00, + 0xf0, 0x6e, 0xa4, 0x00, 0xf2, 0x70, 0xa4, 0x80, 0x08, 0xf4, 0x6b, 0xa4, + 0x00, 0xf8, 0x6c, 0xa4, 0x40, 0xf8, 0x6f, 0xa4, 0x40, 0xf8, 0x65, 0xa4, + 0x40, 0xf0, 0x6a, 0xa4, 0x00, 0xf4, 0x67, 0xa4, 0x00, 0xf8, 0x68, 0xa4, + 0x40, 0xe5, 0x63, 0xa4, 0x80, 0x0c, 0xf0, 0x60, 0xa4, 0x00, 0xf4, 0x5d, + 0xa4, 0x00, 0xf8, 0x5e, 0xa4, 0x40, 0xf0, 0x64, 0xa4, 0x00, 0xf4, 0x61, + 0xa4, 0x00, 0xf8, 0x62, 0xa4, 0x40, 0xe1, 0x82, 0xa2, 0x80, 0x2c, 0xe5, + 0x8b, 0xa2, 0x80, 0x1f, 0xef, 0x88, 0xa2, 0x80, 0x12, 0xf5, 0x15, 0xa0, + 0xc0, 0x00, 0xef, 0x85, 0xa2, 0xc0, 0x00, 0xf0, 0x86, 0xa2, 0x00, 0xf8, + 0x84, 0xa2, 0x40, 0xf0, 0x89, 0xa2, 0x00, 0xf8, 0x87, 0xa2, 0x40, 0xf0, + 0x8c, 0xa2, 0x00, 0xf8, 0x8a, 0xa2, 0x40, 0xf0, 0x83, 0xa2, 0x00, 0xf4, + 0x80, 0xa2, 0x00, 0xf8, 0x81, 0xa2, 0x40, 0xe1, 0xec, 0xa0, 0x80, 0x71, + 0xa5, 0x67, 0xe9, 0xe4, 0xa0, 0x80, 0x45, 0xef, 0xf0, 0xa0, 0x80, 0x34, + 0xf5, 0xf6, 0xa0, 0x80, 0x1a, 0xf9, 0xfc, 0xa0, 0xc0, 0x00, 0xf0, 0xfd, + 0xa0, 0x00, 0xf2, 0xff, 0xa0, 0x80, 0x08, 0xf4, 0xfa, 0xa0, 0x00, 0xf8, + 0xfb, 0xa0, 0x40, 0xf8, 0xfe, 0xa0, 0x40, 0xf0, 0xf7, 0xa0, 0x00, 0xf2, + 0xf9, 0xa0, 0x80, 0x08, 0xf4, 0xf4, 0xa0, 0x00, 0xf8, 0xf5, 0xa0, 0x40, + 0xf8, 0xf8, 0xa0, 0x40, 0xf0, 0xf1, 0xa0, 0x00, 0xf4, 0xee, 0xa0, 0x00, + 0xf8, 0xef, 0xa0, 0x40, 0xe5, 0xe8, 0xa0, 0x80, 0x0c, 0xf0, 0xe5, 0xa0, + 0x00, 0xf4, 0xe2, 0xa0, 0x00, 0xf8, 0xe3, 0xa0, 0x40, 0xf0, 0xe9, 0xa0, + 0x00, 0xf4, 0xe6, 0xa0, 0x00, 0xf8, 0xe7, 0xa0, 0x40, 0xf0, 0xf3, 0xa0, + 0x00, 0xf8, 0xf2, 0xa0, 0x40, 0xf0, 0xed, 0xa0, 0x00, 0xf4, 0xea, 0xa0, + 0x00, 0xf8, 0xeb, 0xa0, 0x40, 0xf0, 0x0e, 0xa0, 0x00, 0xf8, 0x0c, 0xa0, + 0x40, 0xe1, 0x23, 0xa1, 0x80, 0x67, 0xe5, 0x2e, 0xa1, 0x80, 0x5a, 0xe9, + 0x1c, 0xa1, 0x80, 0x3c, 0xef, 0x2b, 0xa1, 0x80, 0x2b, 0xf5, 0x32, 0xa1, + 0xc0, 0x00, 0xef, 0x27, 0xa1, 0x80, 0x15, 0xf0, 0x33, 0xa1, 0x00, 0xf2, + 0x35, 0xa1, 0x80, 0x08, 0xf4, 0x30, 0xa1, 0x00, 0xf8, 0x31, 0xa1, 0x40, + 0xf8, 0x34, 0xa1, 0x40, 0xf0, 0x28, 0xa1, 0x00, 0xf4, 0x25, 0xa1, 0x00, + 0xf8, 0x26, 0xa1, 0x40, 0xf0, 0x2c, 0xa1, 0x00, 0xf4, 0x29, 0xa1, 0x00, + 0xf8, 0x2a, 0xa1, 0x40, 0xe5, 0x1f, 0xa1, 0x80, 0x0c, 0xf0, 0x1d, 0xa1, + 0x00, 0xf4, 0x1a, 0xa1, 0x00, 0xf8, 0x1b, 0xa1, 0x40, 0xf0, 0x20, 0xa1, + 0x00, 0xf8, 0x1e, 0xa1, 0x40, 0xf0, 0x2f, 0xa1, 0x00, 0xf8, 0x2d, 0xa1, + 0x40, 0xf0, 0x24, 0xa1, 0x00, 0xf4, 0x21, 0xa1, 0x00, 0xf8, 0x22, 0xa1, + 0x40, 0xe1, 0x12, 0xa3, 0x80, 0xf1, 0x02, 0xe5, 0x1c, 0xa3, 0x80, 0xe3, + 0x02, 0xa8, 0xec, 0x01, 0xe9, 0x0b, 0xa3, 0x80, 0xcd, 0x01, 0xef, 0x19, + 0xa3, 0x80, 0xbb, 0x01, 0xb3, 0x41, 0xf5, 0x20, 0xa3, 0x80, 0x1a, 0xf9, + 0x26, 0xa3, 0xc0, 0x00, 0xf0, 0x27, 0xa3, 0x00, 0xf2, 0x29, 0xa3, 0x80, + 0x08, 0xf4, 0x24, 0xa3, 0x00, 0xf8, 0x25, 0xa3, 0x40, 0xf8, 0x28, 0xa3, + 0x40, 0xef, 0x15, 0xa3, 0x80, 0x15, 0xf0, 0x21, 0xa3, 0x00, 0xf2, 0x23, + 0xa3, 0x80, 0x08, 0xf4, 0x1e, 0xa3, 0x00, 0xf8, 0x1f, 0xa3, 0x40, 0xf8, + 0x22, 0xa3, 0x40, 0xf0, 0x16, 0xa3, 0x00, 0xf8, 0x14, 0xa3, 0x40, 0xe1, + 0x33, 0xa3, 0x80, 0x67, 0xe5, 0x3a, 0xa3, 0x80, 0x5a, 0xe9, 0x2c, 0xa3, + 0x80, 0x3c, 0xef, 0x37, 0xa3, 0x80, 0x2b, 0xf5, 0x3e, 0xa3, 0x80, 0x1a, + 0xf9, 0x42, 0xa3, 0xc0, 0x00, 0xf0, 0x43, 0xa3, 0x00, 0xf2, 0x45, 0xa3, + 0x80, 0x08, 0xf4, 0x40, 0xa3, 0x00, 0xf8, 0x41, 0xa3, 0x40, 0xf8, 0x44, + 0xa3, 0x40, 0xf0, 0x3f, 0xa3, 0x00, 0xf4, 0x3c, 0xa3, 0x00, 0xf8, 0x3d, + 0xa3, 0x40, 0xf0, 0x38, 0xa3, 0x00, 0xf4, 0x35, 0xa3, 0x00, 0xf8, 0x36, + 0xa3, 0x40, 0xe5, 0x2f, 0xa3, 0x80, 0x0c, 0xf0, 0x2d, 0xa3, 0x00, 0xf4, + 0x2a, 0xa3, 0x00, 0xf8, 0x2b, 0xa3, 0x40, 0xf0, 0x30, 0xa3, 0x00, 0xf8, + 0x2e, 0xa3, 0x40, 0xf0, 0x3b, 0xa3, 0x00, 0xf8, 0x39, 0xa3, 0x40, 0xf0, + 0x34, 0xa3, 0x00, 0xf4, 0x31, 0xa3, 0x00, 0xf8, 0x32, 0xa3, 0x40, 0xf0, + 0x1a, 0xa3, 0x00, 0xf4, 0x17, 0xa3, 0x00, 0xf8, 0x18, 0xa3, 0x40, 0xe5, + 0x0e, 0xa3, 0x80, 0x0c, 0xf0, 0x0c, 0xa3, 0x00, 0xf4, 0x09, 0xa3, 0x00, + 0xf8, 0x0a, 0xa3, 0x40, 0xf0, 0x0f, 0xa3, 0x00, 0xf8, 0x0d, 0xa3, 0x40, + 0xe1, 0xad, 0xa3, 0x80, 0x63, 0xe5, 0xb8, 0xa3, 0x80, 0x52, 0xef, 0xb4, + 0xa3, 0x80, 0x41, 0xf5, 0xbc, 0xa3, 0x80, 0x1a, 0xf9, 0xc2, 0xa3, 0xc0, + 0x00, 0xf0, 0xc3, 0xa3, 0x00, 0xf2, 0xc5, 0xa3, 0x80, 0x08, 0xf4, 0xc0, + 0xa3, 0x00, 0xf8, 0xc1, 0xa3, 0x40, 0xf8, 0xc4, 0xa3, 0x40, 0xef, 0xb0, + 0xa3, 0x80, 0x15, 0xf0, 0xbd, 0xa3, 0x00, 0xf2, 0xbf, 0xa3, 0x80, 0x08, + 0xf4, 0xba, 0xa3, 0x00, 0xf8, 0xbb, 0xa3, 0x40, 0xf8, 0xbe, 0xa3, 0x40, + 0xf0, 0xb1, 0xa3, 0x00, 0xf8, 0xaf, 0xa3, 0x40, 0xf0, 0xb5, 0xa3, 0x00, + 0xf4, 0xb2, 0xa3, 0x00, 0xf8, 0xb3, 0xa3, 0x40, 0xf0, 0xb9, 0xa3, 0x00, + 0xf4, 0xb6, 0xa3, 0x00, 0xf8, 0xb7, 0xa3, 0x40, 0xf0, 0xae, 0xa3, 0x00, + 0xf4, 0xab, 0xa3, 0x00, 0xf8, 0xac, 0xa3, 0x40, 0xf0, 0x1d, 0xa3, 0x00, + 0xf8, 0x1b, 0xa3, 0x40, 0xf0, 0x13, 0xa3, 0x00, 0xf4, 0x10, 0xa3, 0x00, + 0xf8, 0x11, 0xa3, 0x40, 0xe1, 0xc8, 0xa3, 0x80, 0xcb, 0x01, 0xe5, 0xd2, + 0xa3, 0x80, 0xbd, 0x01, 0xef, 0xcf, 0xa3, 0x80, 0xab, 0x01, 0xb2, 0x41, + 0xf5, 0xd6, 0xa3, 0x80, 0x1a, 0xf9, 0xdc, 0xa3, 0xc0, 0x00, 0xf0, 0xdd, + 0xa3, 0x00, 0xf2, 0xdf, 0xa3, 0x80, 0x08, 0xf4, 0xda, 0xa3, 0x00, 0xf8, + 0xdb, 0xa3, 0x40, 0xf8, 0xde, 0xa3, 0x40, 0xef, 0xcb, 0xa3, 0x80, 0x15, + 0xf0, 0xd7, 0xa3, 0x00, 0xf2, 0xd9, 0xa3, 0x80, 0x08, 0xf4, 0xd4, 0xa3, + 0x00, 0xf8, 0xd5, 0xa3, 0x40, 0xf8, 0xd8, 0xa3, 0x40, 0xf0, 0xcc, 0xa3, + 0x00, 0xf8, 0xca, 0xa3, 0x40, 0xe1, 0x7d, 0xa3, 0x80, 0x5f, 0xe5, 0x86, + 0xa3, 0x80, 0x4e, 0xef, 0x82, 0xa3, 0x80, 0x3d, 0xf5, 0x8a, 0xa3, 0x80, + 0x1a, 0xf9, 0x90, 0xa3, 0xc0, 0x00, 0xf0, 0x91, 0xa3, 0x00, 0xf2, 0x93, + 0xa3, 0x80, 0x08, 0xf4, 0x8e, 0xa3, 0x00, 0xf8, 0x8f, 0xa3, 0x40, 0xf8, + 0x92, 0xa3, 0x40, 0xef, 0x7f, 0xa3, 0x80, 0x15, 0xf0, 0x8b, 0xa3, 0x00, + 0xf2, 0x8d, 0xa3, 0x80, 0x08, 0xf4, 0x88, 0xa3, 0x00, 0xf8, 0x89, 0xa3, + 0x40, 0xf8, 0x8c, 0xa3, 0x40, 0xf8, 0x7e, 0xa3, 0x40, 0xf0, 0x83, 0xa3, + 0x00, 0xf4, 0x80, 0xa3, 0x00, 0xf8, 0x81, 0xa3, 0x40, 0xf0, 0x87, 0xa3, + 0x00, 0xf4, 0x84, 0xa3, 0x00, 0xf8, 0x85, 0xa3, 0x40, 0xf8, 0x7c, 0xa3, + 0x40, 0xf0, 0xd0, 0xa3, 0x00, 0xf4, 0xcd, 0xa3, 0x00, 0xf8, 0xce, 0xa3, + 0x40, 0xf0, 0xd3, 0xa3, 0x00, 0xf8, 0xd1, 0xa3, 0x40, 0xf0, 0xc9, 0xa3, + 0x00, 0xf4, 0xc6, 0xa3, 0x00, 0xf8, 0xc7, 0xa3, 0x40, 0xe9, 0xfe, 0xa3, + 0x80, 0x56, 0xef, 0x0a, 0xa4, 0x80, 0x45, 0xf5, 0x0e, 0xa4, 0x80, 0x1a, + 0xf9, 0x14, 0xa4, 0xc0, 0x00, 0xf0, 0x15, 0xa4, 0x00, 0xf2, 0x17, 0xa4, + 0x80, 0x08, 0xf4, 0x12, 0xa4, 0x00, 0xf8, 0x13, 0xa4, 0x40, 0xf8, 0x16, + 0xa4, 0x40, 0xef, 0x06, 0xa4, 0x80, 0x15, 0xf0, 0x0f, 0xa4, 0x00, 0xf2, + 0x11, 0xa4, 0x80, 0x08, 0xf4, 0x0c, 0xa4, 0x00, 0xf8, 0x0d, 0xa4, 0x40, + 0xf8, 0x10, 0xa4, 0x40, 0xf0, 0x07, 0xa4, 0x00, 0xf4, 0x04, 0xa4, 0x00, + 0xf8, 0x05, 0xa4, 0x40, 0xf0, 0x0b, 0xa4, 0x00, 0xf4, 0x08, 0xa4, 0x00, + 0xf8, 0x09, 0xa4, 0x40, 0xe5, 0x02, 0xa4, 0x80, 0x0c, 0xf0, 0xff, 0xa3, + 0x00, 0xf4, 0xfc, 0xa3, 0x00, 0xf8, 0xfd, 0xa3, 0x40, 0xf0, 0x03, 0xa4, + 0x00, 0xf4, 0x00, 0xa4, 0x00, 0xf8, 0x01, 0xa4, 0x40, 0xe1, 0x41, 0xa0, + 0x80, 0x70, 0xe9, 0x3a, 0xa0, 0x80, 0x52, 0xef, 0x48, 0xa0, 0x80, 0x41, + 0xf5, 0x4c, 0xa0, 0x80, 0x1a, 0xf9, 0x52, 0xa0, 0xc0, 0x00, 0xf0, 0x53, + 0xa0, 0x00, 0xf2, 0x55, 0xa0, 0x80, 0x08, 0xf4, 0x50, 0xa0, 0x00, 0xf8, + 0x51, 0xa0, 0x40, 0xf8, 0x54, 0xa0, 0x40, 0xef, 0x44, 0xa0, 0x80, 0x15, + 0xf0, 0x4d, 0xa0, 0x00, 0xf2, 0x4f, 0xa0, 0x80, 0x08, 0xf4, 0x4a, 0xa0, + 0x00, 0xf8, 0x4b, 0xa0, 0x40, 0xf8, 0x4e, 0xa0, 0x40, 0xf0, 0x45, 0xa0, + 0x00, 0xf8, 0x43, 0xa0, 0x40, 0xf0, 0x49, 0xa0, 0x00, 0xf4, 0x46, 0xa0, + 0x00, 0xf8, 0x47, 0xa0, 0x40, 0xe5, 0x3d, 0xa0, 0x80, 0x0c, 0xf0, 0x3b, + 0xa0, 0x00, 0xf4, 0x38, 0xa0, 0x00, 0xf8, 0x39, 0xa0, 0x40, 0xf0, 0x3e, + 0xa0, 0x00, 0xf8, 0x3c, 0xa0, 0x40, 0xf0, 0x42, 0xa0, 0x00, 0xf4, 0x3f, + 0xa0, 0x00, 0xf8, 0x40, 0xa0, 0x40, 0xf0, 0x12, 0xa0, 0x00, 0xf4, 0x0f, + 0xa0, 0x00, 0xf8, 0x10, 0xa0, 0x40, 0xe1, 0x85, 0xa1, 0x80, 0xba, 0x06, + 0xa2, 0xc3, 0x05, 0xa4, 0xdd, 0x04, 0xe5, 0x8f, 0xa1, 0x80, 0xcf, 0x04, + 0xa7, 0xff, 0x03, 0xe9, 0x7f, 0xa1, 0x80, 0xe0, 0x03, 0xaa, 0xf1, 0x02, + 0xef, 0x8c, 0xa1, 0x80, 0xdf, 0x02, 0xb2, 0xf9, 0x01, 0xf5, 0x93, 0xa1, + 0x80, 0xd1, 0x01, 0xb9, 0x7e, 0xba, 0x01, 0xff, 0xe1, 0xf6, 0xa2, 0x80, + 0x6a, 0xe5, 0xfd, 0xa2, 0x80, 0x61, 0xe9, 0xef, 0xa2, 0x80, 0x43, 0xaf, + 0x39, 0xf5, 0xff, 0xa2, 0x80, 0x1a, 0xf9, 0x05, 0xa3, 0xc0, 0x00, 0xf0, + 0x06, 0xa3, 0x00, 0xf2, 0x08, 0xa3, 0x80, 0x08, 0xf4, 0x03, 0xa3, 0x00, + 0xf8, 0x04, 0xa3, 0x40, 0xf8, 0x07, 0xa3, 0x40, 0xef, 0xf9, 0xa2, 0x80, + 0x11, 0xf0, 0x00, 0xa3, 0x00, 0xf2, 0x02, 0xa3, 0x80, 0x04, 0xf8, 0xfe, + 0xa2, 0x40, 0xf8, 0x01, 0xa3, 0x40, 0xf8, 0xf8, 0xa2, 0x40, 0xf0, 0xfb, + 0xa2, 0x00, 0xf8, 0xfa, 0xa2, 0x40, 0xe5, 0xf2, 0xa2, 0x80, 0x0c, 0xf0, + 0xf0, 0xa2, 0x00, 0xf4, 0xed, 0xa2, 0x00, 0xf8, 0xee, 0xa2, 0x40, 0xf0, + 0xf3, 0xa2, 0x00, 0xf8, 0xf1, 0xa2, 0x40, 0xf8, 0xfc, 0xa2, 0x40, 0xf0, + 0xf7, 0xa2, 0x00, 0xf4, 0xf4, 0xa2, 0x00, 0xf8, 0xf5, 0xa2, 0x40, 0xe9, + 0x4c, 0xa4, 0x80, 0x2f, 0xef, 0x57, 0xa4, 0x80, 0x1e, 0xf5, 0x5b, 0xa4, + 0xc0, 0x00, 0xef, 0x53, 0xa4, 0x80, 0x0c, 0xf0, 0x5c, 0xa4, 0x00, 0xf4, + 0x59, 0xa4, 0x00, 0xf8, 0x5a, 0xa4, 0x40, 0xf0, 0x54, 0xa4, 0x00, 0xf8, + 0x52, 0xa4, 0x40, 0xf0, 0x58, 0xa4, 0x00, 0xf4, 0x55, 0xa4, 0x00, 0xf8, + 0x56, 0xa4, 0x40, 0xe5, 0x50, 0xa4, 0x80, 0x0c, 0xf0, 0x4d, 0xa4, 0x00, + 0xf4, 0x4a, 0xa4, 0x00, 0xf8, 0x4b, 0xa4, 0x40, 0xf0, 0x51, 0xa4, 0x00, + 0xf4, 0x4e, 0xa4, 0x00, 0xf8, 0x4f, 0xa4, 0x40, 0xef, 0x88, 0xa1, 0x80, + 0x15, 0xf0, 0x94, 0xa1, 0x00, 0xf2, 0x96, 0xa1, 0x80, 0x08, 0xf4, 0x91, + 0xa1, 0x00, 0xf8, 0x92, 0xa1, 0x40, 0xf8, 0x95, 0xa1, 0x40, 0xf0, 0x89, + 0xa1, 0x00, 0xf8, 0x87, 0xa1, 0x40, 0xe1, 0x96, 0xa3, 0x80, 0x52, 0xe5, + 0x9d, 0xa3, 0x80, 0x41, 0xef, 0x99, 0xa3, 0x80, 0x34, 0xf5, 0xa1, 0xa3, + 0x80, 0x1a, 0xf9, 0xa7, 0xa3, 0xc0, 0x00, 0xf0, 0xa8, 0xa3, 0x00, 0xf2, + 0xaa, 0xa3, 0x80, 0x08, 0xf4, 0xa5, 0xa3, 0x00, 0xf8, 0xa6, 0xa3, 0x40, + 0xf8, 0xa9, 0xa3, 0x40, 0xf0, 0xa2, 0xa3, 0x00, 0xf2, 0xa4, 0xa3, 0x80, + 0x08, 0xf4, 0x9f, 0xa3, 0x00, 0xf8, 0xa0, 0xa3, 0x40, 0xf8, 0xa3, 0xa3, + 0x40, 0xf0, 0x9a, 0xa3, 0x00, 0xf8, 0x98, 0xa3, 0x40, 0xf0, 0x9e, 0xa3, + 0x00, 0xf4, 0x9b, 0xa3, 0x00, 0xf8, 0x9c, 0xa3, 0x40, 0xf0, 0x97, 0xa3, + 0x00, 0xf4, 0x94, 0xa3, 0x00, 0xf8, 0x95, 0xa3, 0x40, 0xf0, 0x8d, 0xa1, + 0x00, 0xf4, 0x8a, 0xa1, 0x00, 0xf8, 0x8b, 0xa1, 0x40, 0xe9, 0x33, 0xa4, + 0x80, 0x4a, 0xef, 0x3d, 0xa4, 0x80, 0x39, 0xf5, 0x40, 0xa4, 0x80, 0x1a, + 0xf9, 0x46, 0xa4, 0xc0, 0x00, 0xf0, 0x47, 0xa4, 0x00, 0xf2, 0x49, 0xa4, + 0x80, 0x08, 0xf4, 0x44, 0xa4, 0x00, 0xf8, 0x45, 0xa4, 0x40, 0xf8, 0x48, + 0xa4, 0x40, 0xef, 0x3a, 0xa4, 0x80, 0x11, 0xf0, 0x41, 0xa4, 0x00, 0xf2, + 0x43, 0xa4, 0x80, 0x04, 0xf8, 0x3f, 0xa4, 0x40, 0xf8, 0x42, 0xa4, 0x40, + 0xf8, 0x39, 0xa4, 0x40, 0xf0, 0x3e, 0xa4, 0x00, 0xf4, 0x3b, 0xa4, 0x00, + 0xf8, 0x3c, 0xa4, 0x40, 0xe5, 0x37, 0xa4, 0x80, 0x0c, 0xf0, 0x34, 0xa4, + 0x00, 0xf4, 0x31, 0xa4, 0x00, 0xf8, 0x32, 0xa4, 0x40, 0xf0, 0x38, 0xa4, + 0x00, 0xf4, 0x35, 0xa4, 0x00, 0xf8, 0x36, 0xa4, 0x40, 0xe5, 0x82, 0xa1, + 0x80, 0x0c, 0xf0, 0x80, 0xa1, 0x00, 0xf4, 0x7d, 0xa1, 0x00, 0xf8, 0x7e, + 0xa1, 0x40, 0xf0, 0x83, 0xa1, 0x00, 0xf8, 0x81, 0xa1, 0x40, 0xe1, 0x62, + 0xa2, 0x80, 0x3c, 0xe5, 0x6c, 0xa2, 0x80, 0x2f, 0x42, 0xf4, 0x02, 0x5e, + 0xa2, 0x80, 0x20, 0xef, 0x69, 0xa2, 0x80, 0x0f, 0x42, 0x1a, 0x05, 0x66, + 0xa2, 0xc0, 0x00, 0xf4, 0x64, 0xa2, 0x00, 0xf8, 0x65, 0xa2, 0x40, 0xf0, + 0x6a, 0xa2, 0x00, 0xf4, 0x67, 0xa2, 0x00, 0xf8, 0x68, 0xa2, 0x40, 0xf0, + 0x5f, 0xa2, 0x00, 0xf8, 0x5d, 0xa2, 0x40, 0xf0, 0x6d, 0xa2, 0x00, 0xf8, + 0x6b, 0xa2, 0x40, 0xf0, 0x63, 0xa2, 0x00, 0xf4, 0x60, 0xa2, 0x00, 0xf8, + 0x61, 0xa2, 0x40, 0xf0, 0x90, 0xa1, 0x00, 0xf8, 0x8e, 0xa1, 0x40, 0xe1, + 0x59, 0xa1, 0x80, 0x52, 0xe5, 0x60, 0xa1, 0x80, 0x45, 0xe9, 0x53, 0xa1, + 0x80, 0x2b, 0xef, 0x5d, 0xa1, 0x80, 0x1a, 0xf5, 0x64, 0xa1, 0xc0, 0x00, + 0xf0, 0x65, 0xa1, 0x00, 0xf2, 0x67, 0xa1, 0x80, 0x08, 0xf4, 0x62, 0xa1, + 0x00, 0xf8, 0x63, 0xa1, 0x40, 0xf8, 0x66, 0xa1, 0x40, 0xf0, 0x5e, 0xa1, + 0x00, 0xf4, 0x5b, 0xa1, 0x00, 0xf8, 0x5c, 0xa1, 0x40, 0xe5, 0x56, 0xa1, + 0x80, 0x0c, 0xf0, 0x54, 0xa1, 0x00, 0xf4, 0x51, 0xa1, 0x00, 0xf8, 0x52, + 0xa1, 0x40, 0xf8, 0x55, 0xa1, 0x40, 0xf0, 0x61, 0xa1, 0x00, 0xf8, 0x5f, + 0xa1, 0x40, 0xf0, 0x5a, 0xa1, 0x00, 0xf4, 0x57, 0xa1, 0x00, 0xf8, 0x58, + 0xa1, 0x40, 0xe1, 0x7f, 0xa0, 0x80, 0x63, 0xe9, 0x78, 0xa0, 0x80, 0x45, + 0xef, 0x83, 0xa0, 0x80, 0x34, 0xf5, 0x87, 0xa0, 0x80, 0x1a, 0xf9, 0x8d, + 0xa0, 0xc0, 0x00, 0xf0, 0x8e, 0xa0, 0x00, 0xf2, 0x90, 0xa0, 0x80, 0x08, + 0xf4, 0x8b, 0xa0, 0x00, 0xf8, 0x8c, 0xa0, 0x40, 0xf8, 0x8f, 0xa0, 0x40, + 0xf0, 0x88, 0xa0, 0x00, 0xf2, 0x8a, 0xa0, 0x80, 0x08, 0xf4, 0x85, 0xa0, + 0x00, 0xf8, 0x86, 0xa0, 0x40, 0xf8, 0x89, 0xa0, 0x40, 0xf0, 0x84, 0xa0, + 0x00, 0xf4, 0x81, 0xa0, 0x00, 0xf8, 0x82, 0xa0, 0x40, 0xe5, 0x7b, 0xa0, + 0x80, 0x0c, 0xf0, 0x79, 0xa0, 0x00, 0xf4, 0x76, 0xa0, 0x00, 0xf8, 0x77, + 0xa0, 0x40, 0xf0, 0x7c, 0xa0, 0x00, 0xf8, 0x7a, 0xa0, 0x40, 0xf0, 0x80, + 0xa0, 0x00, 0xf4, 0x7d, 0xa0, 0x00, 0xf8, 0x7e, 0xa0, 0x40, 0xf0, 0x86, + 0xa1, 0x00, 0xf8, 0x84, 0xa1, 0x40, 0xe1, 0xb7, 0xa0, 0x80, 0xd8, 0x01, + 0xe5, 0xc2, 0xa0, 0x80, 0xce, 0x01, 0xa7, 0x6b, 0xe9, 0xb0, 0xa0, 0x80, + 0x4d, 0xef, 0xbf, 0xa0, 0x80, 0x3c, 0xf5, 0xc5, 0xa0, 0x80, 0x11, 0xf9, + 0xcb, 0xa0, 0xc0, 0x00, 0xf0, 0xcc, 0xa0, 0x00, 0xf4, 0xc9, 0xa0, 0x00, + 0xf8, 0xca, 0xa0, 0x40, 0xef, 0xbb, 0xa0, 0x80, 0x15, 0xf0, 0xc6, 0xa0, + 0x00, 0xf2, 0xc8, 0xa0, 0x80, 0x08, 0xf4, 0xc3, 0xa0, 0x00, 0xf8, 0xc4, + 0xa0, 0x40, 0xf8, 0xc7, 0xa0, 0x40, 0xf0, 0xbc, 0xa0, 0x00, 0xf4, 0xb9, + 0xa0, 0x00, 0xf8, 0xba, 0xa0, 0x40, 0xf0, 0xc0, 0xa0, 0x00, 0xf4, 0xbd, + 0xa0, 0x00, 0xf8, 0xbe, 0xa0, 0x40, 0xe5, 0xb3, 0xa0, 0x80, 0x0c, 0xf0, + 0xb1, 0xa0, 0x00, 0xf4, 0xae, 0xa0, 0x00, 0xf8, 0xaf, 0xa0, 0x40, 0xf0, + 0xb4, 0xa0, 0x00, 0xf8, 0xb2, 0xa0, 0x40, 0xe1, 0x34, 0xa2, 0x80, 0x50, + 0xe5, 0x3e, 0xa2, 0x80, 0x43, 0x42, 0xf4, 0x02, 0x31, 0xa2, 0x80, 0x38, + 0xef, 0x3b, 0xa2, 0x80, 0x27, 0xf5, 0x42, 0xa2, 0xc0, 0x00, 0xef, 0x37, + 0xa2, 0x80, 0x15, 0xf0, 0x43, 0xa2, 0x00, 0xf2, 0x45, 0xa2, 0x80, 0x08, + 0xf4, 0x40, 0xa2, 0x00, 0xf8, 0x41, 0xa2, 0x40, 0xf8, 0x44, 0xa2, 0x40, + 0xf0, 0x38, 0xa2, 0x00, 0xf8, 0x36, 0xa2, 0x40, 0xf0, 0x3c, 0xa2, 0x00, + 0xf4, 0x39, 0xa2, 0x00, 0xf8, 0x3a, 0xa2, 0x40, 0xf8, 0x30, 0xa2, 0x40, + 0xf0, 0x3f, 0xa2, 0x00, 0xf8, 0x3d, 0xa2, 0x40, 0xf0, 0x35, 0xa2, 0x00, + 0xf4, 0x32, 0xa2, 0x00, 0xf8, 0x33, 0xa2, 0x40, 0xf8, 0xc1, 0xa0, 0x40, + 0xf0, 0xb8, 0xa0, 0x00, 0xf4, 0xb5, 0xa0, 0x00, 0xf8, 0xb6, 0xa0, 0x40, + 0xe1, 0xc1, 0xa1, 0x80, 0x85, 0x01, 0xe5, 0xcc, 0xa1, 0x80, 0x78, 0xe9, + 0xb9, 0xa1, 0x80, 0x56, 0xef, 0xc9, 0xa1, 0x80, 0x45, 0xf5, 0xd0, 0xa1, + 0x80, 0x1a, 0xf9, 0xd6, 0xa1, 0xc0, 0x00, 0xf0, 0xd7, 0xa1, 0x00, 0xf2, + 0xd9, 0xa1, 0x80, 0x08, 0xf4, 0xd4, 0xa1, 0x00, 0xf8, 0xd5, 0xa1, 0x40, + 0xf8, 0xd8, 0xa1, 0x40, 0xef, 0xc5, 0xa1, 0x80, 0x15, 0xf0, 0xd1, 0xa1, + 0x00, 0xf2, 0xd3, 0xa1, 0x80, 0x08, 0xf4, 0xce, 0xa1, 0x00, 0xf8, 0xcf, + 0xa1, 0x40, 0xf8, 0xd2, 0xa1, 0x40, 0xf0, 0xc6, 0xa1, 0x00, 0xf4, 0xc3, + 0xa1, 0x00, 0xf8, 0xc4, 0xa1, 0x40, 0xf0, 0xca, 0xa1, 0x00, 0xf4, 0xc7, + 0xa1, 0x00, 0xf8, 0xc8, 0xa1, 0x40, 0xe5, 0xbd, 0xa1, 0x80, 0x0c, 0xf0, + 0xba, 0xa1, 0x00, 0xf4, 0xb7, 0xa1, 0x00, 0xf8, 0xb8, 0xa1, 0x40, 0xf0, + 0xbe, 0xa1, 0x00, 0xf4, 0xbb, 0xa1, 0x00, 0xf8, 0xbc, 0xa1, 0x40, 0xf0, + 0xcd, 0xa1, 0x00, 0xf8, 0xcb, 0xa1, 0x40, 0xf0, 0xc2, 0xa1, 0x00, 0xf4, + 0xbf, 0xa1, 0x00, 0xf8, 0xc0, 0xa1, 0x40, 0xe1, 0x01, 0xa2, 0x80, 0x67, + 0xe5, 0x0c, 0xa2, 0x80, 0x56, 0xe9, 0xfa, 0xa1, 0x80, 0x38, 0xef, 0x08, + 0xa2, 0x80, 0x27, 0xf5, 0x10, 0xa2, 0xc0, 0x00, 0xef, 0x04, 0xa2, 0x80, + 0x15, 0xf0, 0x11, 0xa2, 0x00, 0xf2, 0x13, 0xa2, 0x80, 0x08, 0xf4, 0x0e, + 0xa2, 0x00, 0xf8, 0x0f, 0xa2, 0x40, 0xf8, 0x12, 0xa2, 0x40, 0xf0, 0x05, + 0xa2, 0x00, 0xf8, 0x03, 0xa2, 0x40, 0xf0, 0x09, 0xa2, 0x00, 0xf4, 0x06, + 0xa2, 0x00, 0xf8, 0x07, 0xa2, 0x40, 0xe5, 0xfd, 0xa1, 0x80, 0x0c, 0xf0, + 0xfb, 0xa1, 0x00, 0xf4, 0xf8, 0xa1, 0x00, 0xf8, 0xf9, 0xa1, 0x40, 0xf0, + 0xfe, 0xa1, 0x00, 0xf8, 0xfc, 0xa1, 0x40, 0xf0, 0x0d, 0xa2, 0x00, 0xf4, + 0x0a, 0xa2, 0x00, 0xf8, 0x0b, 0xa2, 0x40, 0xf0, 0x02, 0xa2, 0x00, 0xf4, + 0xff, 0xa1, 0x00, 0xf8, 0x00, 0xa2, 0x40, 0xe9, 0xe2, 0xa3, 0x80, 0xc3, + 0x01, 0xaa, 0x56, 0xef, 0xee, 0xa3, 0x80, 0x45, 0xf5, 0xf2, 0xa3, 0x80, + 0x1a, 0xf9, 0xf8, 0xa3, 0xc0, 0x00, 0xf0, 0xf9, 0xa3, 0x00, 0xf2, 0xfb, + 0xa3, 0x80, 0x08, 0xf4, 0xf6, 0xa3, 0x00, 0xf8, 0xf7, 0xa3, 0x40, 0xf8, + 0xfa, 0xa3, 0x40, 0xef, 0xea, 0xa3, 0x80, 0x15, 0xf0, 0xf3, 0xa3, 0x00, + 0xf2, 0xf5, 0xa3, 0x80, 0x08, 0xf4, 0xf0, 0xa3, 0x00, 0xf8, 0xf1, 0xa3, + 0x40, 0xf8, 0xf4, 0xa3, 0x40, 0xf0, 0xeb, 0xa3, 0x00, 0xf4, 0xe8, 0xa3, + 0x00, 0xf8, 0xe9, 0xa3, 0x40, 0xf0, 0xef, 0xa3, 0x00, 0xf4, 0xec, 0xa3, + 0x00, 0xf8, 0xed, 0xa3, 0x40, 0xe9, 0x1a, 0xa4, 0x80, 0x49, 0xef, 0x25, + 0xa4, 0x80, 0x38, 0xf5, 0x29, 0xa4, 0x80, 0x11, 0xf9, 0x2f, 0xa4, 0xc0, + 0x00, 0xf0, 0x30, 0xa4, 0x00, 0xf4, 0x2d, 0xa4, 0x00, 0xf8, 0x2e, 0xa4, + 0x40, 0xef, 0x21, 0xa4, 0x80, 0x15, 0xf0, 0x2a, 0xa4, 0x00, 0xf2, 0x2c, + 0xa4, 0x80, 0x08, 0xf4, 0x27, 0xa4, 0x00, 0xf8, 0x28, 0xa4, 0x40, 0xf8, + 0x2b, 0xa4, 0x40, 0xf0, 0x22, 0xa4, 0x00, 0xf8, 0x20, 0xa4, 0x40, 0xf0, + 0x26, 0xa4, 0x00, 0xf4, 0x23, 0xa4, 0x00, 0xf8, 0x24, 0xa4, 0x40, 0xe5, + 0x1e, 0xa4, 0x80, 0x0c, 0xf0, 0x1b, 0xa4, 0x00, 0xf4, 0x18, 0xa4, 0x00, + 0xf8, 0x19, 0xa4, 0x40, 0xf0, 0x1f, 0xa4, 0x00, 0xf4, 0x1c, 0xa4, 0x00, + 0xf8, 0x1d, 0xa4, 0x40, 0xe5, 0xe6, 0xa3, 0x80, 0x0c, 0xf0, 0xe3, 0xa3, + 0x00, 0xf4, 0xe0, 0xa3, 0x00, 0xf8, 0xe1, 0xa3, 0x40, 0xf0, 0xe7, 0xa3, + 0x00, 0xf4, 0xe4, 0xa3, 0x00, 0xf8, 0xe5, 0xa3, 0x40, 0xe5, 0x06, 0xa0, + 0x80, 0x13, 0xf0, 0x03, 0xa0, 0x00, 0xf4, 0x00, 0xa0, 0x80, 0x04, 0xf8, + 0x01, 0xa0, 0x40, 0x4c, 0x5a, 0x20, 0x15, 0xa0, 0x40, 0xf0, 0x07, 0xa0, + 0x00, 0xf4, 0x04, 0xa0, 0x00, 0xf8, 0x05, 0xa0, 0x40, 0xe1, 0x73, 0xa2, + 0x80, 0x97, 0x04, 0xe5, 0x7e, 0xa2, 0x80, 0x89, 0x04, 0xa9, 0xf9, 0x03, + 0xac, 0xec, 0x02, 0xad, 0xec, 0x01, 0xae, 0x8b, 0x01, 0xef, 0x7b, 0xa2, + 0x80, 0x7a, 0x42, 0x1a, 0x05, 0x77, 0xa2, 0x80, 0x67, 0xb8, 0x01, 0xff, + 0xe1, 0x50, 0xa2, 0x80, 0x53, 0xe5, 0x5b, 0xa2, 0x80, 0x46, 0xe9, 0x48, + 0xa2, 0x80, 0x24, 0xef, 0x58, 0xa2, 0x80, 0x13, 0x42, 0x1a, 0x05, 0x54, + 0xa2, 0xc0, 0x00, 0xf0, 0x55, 0xa2, 0x00, 0xf4, 0x52, 0xa2, 0x00, 0xf8, + 0x53, 0xa2, 0x40, 0xf0, 0x59, 0xa2, 0x00, 0xf4, 0x56, 0xa2, 0x00, 0xf8, + 0x57, 0xa2, 0x40, 0xe5, 0x4c, 0xa2, 0x80, 0x0c, 0xf0, 0x49, 0xa2, 0x00, + 0xf4, 0x46, 0xa2, 0x00, 0xf8, 0x47, 0xa2, 0x40, 0xf0, 0x4d, 0xa2, 0x00, + 0xf4, 0x4a, 0xa2, 0x00, 0xf8, 0x4b, 0xa2, 0x40, 0xf0, 0x5c, 0xa2, 0x00, + 0xf8, 0x5a, 0xa2, 0x40, 0xf0, 0x51, 0xa2, 0x00, 0xf4, 0x4e, 0xa2, 0x00, + 0xf8, 0x4f, 0xa2, 0x40, 0xf0, 0x78, 0xa2, 0x00, 0xf4, 0x75, 0xa2, 0x00, + 0xf8, 0x76, 0xa2, 0x40, 0xf0, 0x7c, 0xa2, 0x00, 0xf4, 0x79, 0xa2, 0x00, + 0xf8, 0x7a, 0xa2, 0x40, 0xe1, 0x72, 0xa1, 0x80, 0x4d, 0xe5, 0x7a, 0xa1, + 0x80, 0x40, 0xe9, 0x6a, 0xa1, 0x80, 0x1e, 0xaf, 0x10, 0xb5, 0x01, 0xff, + 0xef, 0x75, 0xa1, 0x80, 0x04, 0xf4, 0x7c, 0xa1, 0x40, 0xf8, 0x74, 0xa1, + 0x40, 0xf0, 0x78, 0xa1, 0x00, 0xf4, 0x76, 0xa1, 0x00, 0xf8, 0x77, 0xa1, + 0x40, 0xe5, 0x6e, 0xa1, 0x80, 0x0c, 0xf0, 0x6b, 0xa1, 0x00, 0xf4, 0x68, + 0xa1, 0x00, 0xf8, 0x69, 0xa1, 0x40, 0xf0, 0x6f, 0xa1, 0x00, 0xf4, 0x6c, + 0xa1, 0x00, 0xf8, 0x6d, 0xa1, 0x40, 0xf0, 0x7b, 0xa1, 0x00, 0xf8, 0x79, + 0xa1, 0x40, 0xf0, 0x73, 0xa1, 0x00, 0xf4, 0x70, 0xa1, 0x00, 0xf8, 0x71, + 0xa1, 0x40, 0xe1, 0x9a, 0xa0, 0x80, 0x6c, 0xe9, 0x93, 0xa0, 0x80, 0x4e, + 0xef, 0xa1, 0xa0, 0x80, 0x3d, 0xf5, 0xa5, 0xa0, 0x80, 0x16, 0xf9, 0xaa, + 0xa0, 0xc0, 0x00, 0xf0, 0xab, 0xa0, 0x00, 0xf2, 0xad, 0xa0, 0x80, 0x04, + 0xf8, 0xa9, 0xa0, 0x40, 0xf8, 0xac, 0xa0, 0x40, 0xef, 0x9d, 0xa0, 0x80, + 0x15, 0xf0, 0xa6, 0xa0, 0x00, 0xf2, 0xa8, 0xa0, 0x80, 0x08, 0xf4, 0xa3, + 0xa0, 0x00, 0xf8, 0xa4, 0xa0, 0x40, 0xf8, 0xa7, 0xa0, 0x40, 0xf0, 0x9e, + 0xa0, 0x00, 0xf8, 0x9c, 0xa0, 0x40, 0xf0, 0xa2, 0xa0, 0x00, 0xf4, 0x9f, + 0xa0, 0x00, 0xf8, 0xa0, 0xa0, 0x40, 0xe5, 0x96, 0xa0, 0x80, 0x0c, 0xf0, + 0x94, 0xa0, 0x00, 0xf4, 0x91, 0xa0, 0x00, 0xf8, 0x92, 0xa0, 0x40, 0xf0, + 0x97, 0xa0, 0x00, 0xf8, 0x95, 0xa0, 0x40, 0xf0, 0x9b, 0xa0, 0x00, 0xf4, + 0x98, 0xa0, 0x00, 0xf8, 0x99, 0xa0, 0x40, 0xe1, 0xa0, 0xa1, 0x80, 0x79, + 0xe5, 0xa9, 0xa1, 0x80, 0x6c, 0xe9, 0x99, 0xa1, 0x80, 0x4e, 0xef, 0xa6, + 0xa1, 0x80, 0x41, 0xf5, 0xad, 0xa1, 0x80, 0x1a, 0xf9, 0xb3, 0xa1, 0xc0, + 0x00, 0xf0, 0xb4, 0xa1, 0x00, 0xf2, 0xb6, 0xa1, 0x80, 0x08, 0xf4, 0xb1, + 0xa1, 0x00, 0xf8, 0xb2, 0xa1, 0x40, 0xf8, 0xb5, 0xa1, 0x40, 0xef, 0xa3, + 0xa1, 0x80, 0x15, 0xf0, 0xae, 0xa1, 0x00, 0xf2, 0xb0, 0xa1, 0x80, 0x08, + 0xf4, 0xab, 0xa1, 0x00, 0xf8, 0xac, 0xa1, 0x40, 0xf8, 0xaf, 0xa1, 0x40, + 0xf0, 0xa4, 0xa1, 0x00, 0xf8, 0xa2, 0xa1, 0x40, 0xf0, 0xa7, 0xa1, 0x00, + 0xf8, 0xa5, 0xa1, 0x40, 0xe5, 0x9c, 0xa1, 0x80, 0x0c, 0xf0, 0x9a, 0xa1, + 0x00, 0xf4, 0x97, 0xa1, 0x00, 0xf8, 0x98, 0xa1, 0x40, 0xf0, 0x9d, 0xa1, + 0x00, 0xf8, 0x9b, 0xa1, 0x40, 0xf0, 0xaa, 0xa1, 0x00, 0xf8, 0xa8, 0xa1, + 0x40, 0xf0, 0xa1, 0xa1, 0x00, 0xf4, 0x9e, 0xa1, 0x00, 0xf8, 0x9f, 0xa1, + 0x40, 0xe5, 0x70, 0xa2, 0x80, 0x04, 0xf4, 0x6e, 0xa2, 0x40, 0xf8, 0x6f, + 0xa2, 0x40, 0xf0, 0x7f, 0xa2, 0x00, 0xf8, 0x7d, 0xa2, 0x40, 0xf0, 0x74, + 0xa2, 0x00, 0xf4, 0x71, 0xa2, 0x00, 0xf8, 0x72, 0xa2, 0x40, 0xe1, 0xe4, + 0xa1, 0x80, 0xea, 0x01, 0xe5, 0xf0, 0xa1, 0x80, 0xd8, 0x01, 0xa7, 0x5e, + 0xe9, 0xdc, 0xa1, 0x80, 0x3c, 0xef, 0xec, 0xa1, 0x80, 0x2b, 0xf5, 0xf4, + 0xa1, 0xc0, 0x00, 0xef, 0xe8, 0xa1, 0x80, 0x15, 0xf0, 0xf5, 0xa1, 0x00, + 0xf2, 0xf7, 0xa1, 0x80, 0x08, 0xf4, 0xf2, 0xa1, 0x00, 0xf8, 0xf3, 0xa1, + 0x40, 0xf8, 0xf6, 0xa1, 0x40, 0xf0, 0xe9, 0xa1, 0x00, 0xf4, 0xe6, 0xa1, + 0x00, 0xf8, 0xe7, 0xa1, 0x40, 0xf0, 0xed, 0xa1, 0x00, 0xf4, 0xea, 0xa1, + 0x00, 0xf8, 0xeb, 0xa1, 0x40, 0xe5, 0xe0, 0xa1, 0x80, 0x0c, 0xf0, 0xdd, + 0xa1, 0x00, 0xf4, 0xda, 0xa1, 0x00, 0xf8, 0xdb, 0xa1, 0x40, 0xf0, 0xe1, + 0xa1, 0x00, 0xf4, 0xde, 0xa1, 0x00, 0xf8, 0xdf, 0xa1, 0x40, 0xe1, 0x1c, + 0xa2, 0x80, 0x67, 0xe5, 0x28, 0xa2, 0x80, 0x56, 0xe9, 0x16, 0xa2, 0x80, + 0x3c, 0xef, 0x24, 0xa2, 0x80, 0x2b, 0xf5, 0x2c, 0xa2, 0xc0, 0x00, 0xef, + 0x20, 0xa2, 0x80, 0x15, 0xf0, 0x2d, 0xa2, 0x00, 0xf2, 0x2f, 0xa2, 0x80, + 0x08, 0xf4, 0x2a, 0xa2, 0x00, 0xf8, 0x2b, 0xa2, 0x40, 0xf8, 0x2e, 0xa2, + 0x40, 0xf0, 0x21, 0xa2, 0x00, 0xf4, 0x1e, 0xa2, 0x00, 0xf8, 0x1f, 0xa2, + 0x40, 0xf0, 0x25, 0xa2, 0x00, 0xf4, 0x22, 0xa2, 0x00, 0xf8, 0x23, 0xa2, + 0x40, 0xe5, 0x18, 0xa2, 0x80, 0x08, 0xf4, 0x14, 0xa2, 0x00, 0xf8, 0x15, + 0xa2, 0x40, 0xf0, 0x19, 0xa2, 0x00, 0xf8, 0x17, 0xa2, 0x40, 0xf0, 0x29, + 0xa2, 0x00, 0xf4, 0x26, 0xa2, 0x00, 0xf8, 0x27, 0xa2, 0x40, 0xf0, 0x1d, + 0xa2, 0x00, 0xf4, 0x1a, 0xa2, 0x00, 0xf8, 0x1b, 0xa2, 0x40, 0xf0, 0xf1, + 0xa1, 0x00, 0xf4, 0xee, 0xa1, 0x00, 0xf8, 0xef, 0xa1, 0x40, 0xf0, 0xe5, + 0xa1, 0x00, 0xf4, 0xe2, 0xa1, 0x00, 0xf8, 0xe3, 0xa1, 0x40, 0xe1, 0xd3, + 0xa0, 0x80, 0x49, 0xe9, 0xcf, 0xa0, 0x80, 0x38, 0xef, 0xd6, 0xa0, 0x80, + 0x2b, 0xf5, 0xda, 0xa0, 0x80, 0x11, 0xf9, 0xe0, 0xa0, 0xc0, 0x00, 0xf0, + 0xe1, 0xa0, 0x00, 0xf4, 0xde, 0xa0, 0x00, 0xf8, 0xdf, 0xa0, 0x40, 0xf0, + 0xdb, 0xa0, 0x00, 0xf2, 0xdd, 0xa0, 0x80, 0x08, 0xf4, 0xd8, 0xa0, 0x00, + 0xf8, 0xd9, 0xa0, 0x40, 0xf8, 0xdc, 0xa0, 0x40, 0xf0, 0xd7, 0xa0, 0x00, + 0xf8, 0xd5, 0xa0, 0x40, 0xf0, 0xd0, 0xa0, 0x00, 0xf4, 0xcd, 0xa0, 0x00, + 0xf8, 0xce, 0xa0, 0x40, 0xf0, 0xd4, 0xa0, 0x00, 0xf4, 0xd1, 0xa0, 0x00, + 0xf8, 0xd2, 0xa0, 0x40, 0xf8, 0x13, 0xa0, 0x40, 0xe1, 0x09, 0xa1, 0x80, + 0xd5, 0x01, 0xa4, 0x5f, 0xe5, 0x12, 0xa1, 0x80, 0x52, 0xe9, 0x02, 0xa1, + 0x80, 0x34, 0xef, 0x0f, 0xa1, 0x80, 0x23, 0xf5, 0x16, 0xa1, 0xc0, 0x00, + 0xef, 0x0c, 0xa1, 0x80, 0x15, 0xf0, 0x17, 0xa1, 0x00, 0xf2, 0x19, 0xa1, + 0x80, 0x08, 0xf4, 0x14, 0xa1, 0x00, 0xf8, 0x15, 0xa1, 0x40, 0xf8, 0x18, + 0xa1, 0x40, 0xf8, 0x0b, 0xa1, 0x40, 0xf0, 0x10, 0xa1, 0x00, 0xf4, 0x0d, + 0xa1, 0x00, 0xf8, 0x0e, 0xa1, 0x40, 0xe5, 0x05, 0xa1, 0x80, 0x0c, 0xf0, + 0x03, 0xa1, 0x00, 0xf4, 0x00, 0xa1, 0x00, 0xf8, 0x01, 0xa1, 0x40, 0xf0, + 0x06, 0xa1, 0x00, 0xf8, 0x04, 0xa1, 0x40, 0xf0, 0x13, 0xa1, 0x00, 0xf8, + 0x11, 0xa1, 0x40, 0xe1, 0x3f, 0xa1, 0x80, 0x63, 0xe5, 0x49, 0xa1, 0x80, + 0x56, 0xe9, 0x38, 0xa1, 0x80, 0x38, 0xef, 0x46, 0xa1, 0x80, 0x27, 0xf5, + 0x4d, 0xa1, 0xc0, 0x00, 0xef, 0x42, 0xa1, 0x80, 0x15, 0xf0, 0x4e, 0xa1, + 0x00, 0xf2, 0x50, 0xa1, 0x80, 0x08, 0xf4, 0x4b, 0xa1, 0x00, 0xf8, 0x4c, + 0xa1, 0x40, 0xf8, 0x4f, 0xa1, 0x40, 0xf0, 0x43, 0xa1, 0x00, 0xf8, 0x41, + 0xa1, 0x40, 0xf0, 0x47, 0xa1, 0x00, 0xf4, 0x44, 0xa1, 0x00, 0xf8, 0x45, + 0xa1, 0x40, 0xe5, 0x3b, 0xa1, 0x80, 0x0c, 0xf0, 0x39, 0xa1, 0x00, 0xf4, + 0x36, 0xa1, 0x00, 0xf8, 0x37, 0xa1, 0x40, 0xf0, 0x3c, 0xa1, 0x00, 0xf8, + 0x3a, 0xa1, 0x40, 0xf0, 0x4a, 0xa1, 0x00, 0xf8, 0x48, 0xa1, 0x40, 0xf0, + 0x40, 0xa1, 0x00, 0xf4, 0x3d, 0xa1, 0x00, 0xf8, 0x3e, 0xa1, 0x40, 0xf0, + 0x0a, 0xa1, 0x00, 0xf4, 0x07, 0xa1, 0x00, 0xf8, 0x08, 0xa1, 0x40, 0xe1, + 0xb8, 0xa2, 0x80, 0xf8, 0x01, 0xe5, 0xc2, 0xa2, 0x80, 0xea, 0x01, 0xa8, + 0x74, 0xe9, 0xb0, 0xa2, 0x80, 0x52, 0xef, 0xbf, 0xa2, 0x80, 0x41, 0xf5, + 0xc6, 0xa2, 0x80, 0x1a, 0xf9, 0xcc, 0xa2, 0xc0, 0x00, 0xf0, 0xcd, 0xa2, + 0x00, 0xf2, 0xcf, 0xa2, 0x80, 0x08, 0xf4, 0xca, 0xa2, 0x00, 0xf8, 0xcb, + 0xa2, 0x40, 0xf8, 0xce, 0xa2, 0x40, 0xef, 0xbb, 0xa2, 0x80, 0x15, 0xf0, + 0xc7, 0xa2, 0x00, 0xf2, 0xc9, 0xa2, 0x80, 0x08, 0xf4, 0xc4, 0xa2, 0x00, + 0xf8, 0xc5, 0xa2, 0x40, 0xf8, 0xc8, 0xa2, 0x40, 0xf0, 0xbc, 0xa2, 0x00, + 0xf8, 0xba, 0xa2, 0x40, 0xf0, 0xc0, 0xa2, 0x00, 0xf4, 0xbd, 0xa2, 0x00, + 0xf8, 0xbe, 0xa2, 0x40, 0xe5, 0xb4, 0xa2, 0x80, 0x0c, 0xf0, 0xb1, 0xa2, + 0x00, 0xf4, 0xae, 0xa2, 0x00, 0xf8, 0xaf, 0xa2, 0x40, 0xf0, 0xb5, 0xa2, + 0x00, 0xf4, 0xb2, 0xa2, 0x00, 0xf8, 0xb3, 0xa2, 0x40, 0xe1, 0x63, 0xa3, + 0x80, 0x63, 0xe5, 0x6f, 0xa3, 0x80, 0x52, 0xef, 0x6b, 0xa3, 0x80, 0x41, + 0xf5, 0x72, 0xa3, 0x80, 0x1a, 0xf9, 0x78, 0xa3, 0xc0, 0x00, 0xf0, 0x79, + 0xa3, 0x00, 0xf2, 0x7b, 0xa3, 0x80, 0x08, 0xf4, 0x76, 0xa3, 0x00, 0xf8, + 0x77, 0xa3, 0x40, 0xf8, 0x7a, 0xa3, 0x40, 0xef, 0x67, 0xa3, 0x80, 0x11, + 0xf0, 0x73, 0xa3, 0x00, 0xf2, 0x75, 0xa3, 0x80, 0x04, 0xf8, 0x71, 0xa3, + 0x40, 0xf8, 0x74, 0xa3, 0x40, 0xf0, 0x68, 0xa3, 0x00, 0xf4, 0x65, 0xa3, + 0x00, 0xf8, 0x66, 0xa3, 0x40, 0xf0, 0x6c, 0xa3, 0x00, 0xf4, 0x69, 0xa3, + 0x00, 0xf8, 0x6a, 0xa3, 0x40, 0xf0, 0x70, 0xa3, 0x00, 0xf4, 0x6d, 0xa3, + 0x00, 0xf8, 0x6e, 0xa3, 0x40, 0xf0, 0x64, 0xa3, 0x00, 0xf4, 0x61, 0xa3, + 0x00, 0xf8, 0x62, 0xa3, 0x40, 0xf0, 0xc3, 0xa2, 0x00, 0xf8, 0xc1, 0xa2, + 0x40, 0xf0, 0xb9, 0xa2, 0x00, 0xf4, 0xb6, 0xa2, 0x00, 0xf8, 0xb7, 0xa2, + 0x40, 0xe1, 0x20, 0xa0, 0x80, 0x8d, 0x02, 0xa2, 0x81, 0x01, 0xe5, 0x2a, + 0xa0, 0x80, 0x74, 0xe9, 0x18, 0xa0, 0x80, 0x52, 0xef, 0x27, 0xa0, 0x80, + 0x41, 0xf5, 0x2e, 0xa0, 0x80, 0x1a, 0xf9, 0x34, 0xa0, 0xc0, 0x00, 0xf0, + 0x35, 0xa0, 0x00, 0xf2, 0x37, 0xa0, 0x80, 0x08, 0xf4, 0x32, 0xa0, 0x00, + 0xf8, 0x33, 0xa0, 0x40, 0xf8, 0x36, 0xa0, 0x40, 0xef, 0x23, 0xa0, 0x80, + 0x15, 0xf0, 0x2f, 0xa0, 0x00, 0xf2, 0x31, 0xa0, 0x80, 0x08, 0xf4, 0x2c, + 0xa0, 0x00, 0xf8, 0x2d, 0xa0, 0x40, 0xf8, 0x30, 0xa0, 0x40, 0xf0, 0x24, + 0xa0, 0x00, 0xf8, 0x22, 0xa0, 0x40, 0xf0, 0x28, 0xa0, 0x00, 0xf4, 0x25, + 0xa0, 0x00, 0xf8, 0x26, 0xa0, 0x40, 0xe5, 0x1c, 0xa0, 0x80, 0x0c, 0xf0, + 0x19, 0xa0, 0x00, 0xf4, 0x16, 0xa0, 0x00, 0xf8, 0x17, 0xa0, 0x40, 0xf0, + 0x1d, 0xa0, 0x00, 0xf4, 0x1a, 0xa0, 0x00, 0xf8, 0x1b, 0xa0, 0x40, 0xf0, + 0x2b, 0xa0, 0x00, 0xf8, 0x29, 0xa0, 0x40, 0xe1, 0x60, 0xa0, 0x80, 0x78, + 0xe5, 0x6a, 0xa0, 0x80, 0x6b, 0xe9, 0x58, 0xa0, 0x80, 0x49, 0xef, 0x67, + 0xa0, 0x80, 0x38, 0xf5, 0x6e, 0xa0, 0x80, 0x11, 0xf9, 0x74, 0xa0, 0xc0, + 0x00, 0xf0, 0x75, 0xa0, 0x00, 0xf4, 0x72, 0xa0, 0x00, 0xf8, 0x73, 0xa0, + 0x40, 0xef, 0x63, 0xa0, 0x80, 0x15, 0xf0, 0x6f, 0xa0, 0x00, 0xf2, 0x71, + 0xa0, 0x80, 0x08, 0xf4, 0x6c, 0xa0, 0x00, 0xf8, 0x6d, 0xa0, 0x40, 0xf8, + 0x70, 0xa0, 0x40, 0xf0, 0x64, 0xa0, 0x00, 0xf8, 0x62, 0xa0, 0x40, 0xf0, + 0x68, 0xa0, 0x00, 0xf4, 0x65, 0xa0, 0x00, 0xf8, 0x66, 0xa0, 0x40, 0xe5, + 0x5c, 0xa0, 0x80, 0x0c, 0xf0, 0x59, 0xa0, 0x00, 0xf4, 0x56, 0xa0, 0x00, + 0xf8, 0x57, 0xa0, 0x40, 0xf0, 0x5d, 0xa0, 0x00, 0xf4, 0x5a, 0xa0, 0x00, + 0xf8, 0x5b, 0xa0, 0x40, 0xf0, 0x6b, 0xa0, 0x00, 0xf8, 0x69, 0xa0, 0x40, + 0xf0, 0x61, 0xa0, 0x00, 0xf4, 0x5e, 0xa0, 0x00, 0xf8, 0x5f, 0xa0, 0x40, + 0xf0, 0x21, 0xa0, 0x00, 0xf4, 0x1e, 0xa0, 0x00, 0xf8, 0x1f, 0xa0, 0x40, + 0xf0, 0x0b, 0xa0, 0x00, 0xf4, 0x08, 0xa0, 0x00, 0xf8, 0x09, 0xa0, 0x40, + 0xa2, 0xd3, 0x02, 0xa3, 0xb1, 0x02, 0xa4, 0xa4, 0x02, 0xa7, 0x83, 0x02, + 0xa8, 0xe5, 0x01, 0xaa, 0xcc, 0x01, 0xab, 0xbf, 0x01, 0xac, 0xad, 0x01, + 0xad, 0xa0, 0x01, 0xae, 0x83, 0x01, 0x42, 0x1f, 0x00, 0xa9, 0xa4, 0x00, + 0xb0, 0x6f, 0x43, 0x94, 0xf4, 0x90, 0xa4, 0x00, 0xb3, 0x49, 0xb4, 0x3d, + 0xb6, 0x2f, 0x42, 0x15, 0x02, 0xb8, 0xa4, 0x00, 0xb9, 0x1d, 0xba, 0x01, + 0xff, 0xe1, 0xb2, 0xa4, 0x00, 0x42, 0x1b, 0x05, 0xab, 0xa4, 0x00, 0xb5, + 0x06, 0x44, 0x65, 0xf3, 0xc4, 0xa4, 0x40, 0xf0, 0xa2, 0xa4, 0x00, 0xf2, + 0xc1, 0xa4, 0x40, 0x42, 0x52, 0x00, 0xae, 0xa4, 0x00, 0xef, 0x9d, 0xa4, + 0x40, 0x42, 0xeb, 0x0a, 0xb1, 0xa4, 0x00, 0x42, 0x42, 0x00, 0xaf, 0xa4, + 0x40, 0x42, 0x8a, 0x00, 0xa0, 0xa4, 0x00, 0xf5, 0xa8, 0xa4, 0x40, 0xa8, + 0x06, 0x42, 0x5a, 0x03, 0x95, 0xa4, 0x40, 0x42, 0x8a, 0x00, 0xc0, 0xa4, + 0x00, 0x42, 0x1f, 0x00, 0xc2, 0xa4, 0x00, 0x42, 0x42, 0x00, 0xba, 0xa4, + 0x00, 0xf9, 0xb0, 0xa4, 0x40, 0x42, 0x29, 0x08, 0x9e, 0xa4, 0x00, 0x42, + 0x45, 0x69, 0xac, 0xa4, 0x40, 0x43, 0xd8, 0xbb, 0xc5, 0xa4, 0x00, 0xb9, + 0x06, 0x43, 0xe2, 0xf4, 0xb4, 0xa4, 0x40, 0x42, 0xba, 0x04, 0x93, 0xa4, + 0x00, 0x42, 0x1f, 0x00, 0xa7, 0xa4, 0x40, 0xe9, 0x98, 0xa4, 0x00, 0x42, + 0x1f, 0x00, 0x9c, 0xa4, 0x40, 0xe9, 0x91, 0xa4, 0x80, 0x06, 0x42, 0x05, + 0x22, 0x9a, 0xa4, 0x40, 0xe5, 0xbb, 0xa4, 0x40, 0xe5, 0xc6, 0xa4, 0x00, + 0x42, 0x52, 0x00, 0x92, 0xa4, 0x40, 0xaa, 0x04, 0xef, 0xb3, 0xa4, 0x40, + 0x42, 0xf4, 0x02, 0xb7, 0xa4, 0x00, 0x42, 0x29, 0x08, 0xaa, 0xa4, 0x00, + 0xf9, 0xb5, 0xa4, 0x40, 0x42, 0xc3, 0x07, 0xad, 0xa4, 0x00, 0xb8, 0x01, + 0xff, 0x42, 0x52, 0x00, 0x99, 0xa4, 0x00, 0x42, 0x1f, 0x00, 0xbf, 0xa4, + 0x00, 0x42, 0x1a, 0x05, 0x9f, 0xa4, 0x40, 0xe1, 0xa1, 0xa4, 0x00, 0x42, + 0xeb, 0x0a, 0x97, 0xa4, 0x00, 0xa7, 0x06, 0x42, 0x1b, 0x05, 0xb6, 0xa4, + 0x40, 0x42, 0x1f, 0x00, 0x96, 0xa4, 0x00, 0x42, 0x1a, 0x05, 0xa6, 0xa4, + 0x40, 0x43, 0x00, 0x74, 0xa4, 0xa4, 0x00, 0xf5, 0xb9, 0xa4, 0x40, 0x42, + 0xb0, 0x01, 0xc3, 0xa4, 0x00, 0x42, 0xba, 0x04, 0xbe, 0xa4, 0x00, 0x43, + 0xaf, 0xf4, 0xbd, 0xa4, 0x00, 0xf9, 0xbc, 0xa4, 0xc0, 0x00, 0xf0, 0x94, + 0xa4, 0x00, 0xf4, 0xa3, 0xa4, 0x40, 0x43, 0x6a, 0x0d, 0x9b, 0xa4, 0x00, + 0x42, 0x42, 0x00, 0xa5, 0xa4, 0x40, 0x4a, 0x2b, 0xad, 0x9b, 0xf4, 0x01, + 0x46, 0xc3, 0x04, 0xa5, 0x00, 0x00, 0x05, 0xa9, 0xec, 0x01, 0xff, 0x0a, + 0x41, 0x59, 0xa0, 0x02, 0x50, 0x96, 0x63, 0xad, 0x0e, 0x01, 0x07, 0xec, + 0x05, 0x01, 0xff, 0x42, 0xb7, 0x05, 0x81, 0x0e, 0x01, 0xa3, 0xf8, 0x01, + 0x02, 0xf0, 0x10, 0xeb, 0x01, 0xa5, 0xd4, 0x01, 0x42, 0x0c, 0x08, 0x99, + 0x0e, 0x01, 0x43, 0xef, 0xb8, 0x9f, 0x0e, 0x01, 0xa8, 0xb9, 0x01, 0x42, + 0x56, 0x19, 0x90, 0x0e, 0x01, 0xab, 0xa4, 0x01, 0x43, 0xb0, 0x00, 0xa0, + 0x0e, 0x81, 0x96, 0x01, 0x43, 0xad, 0x90, 0xa1, 0x0e, 0x01, 0x43, 0xdc, + 0x22, 0xa2, 0x0e, 0x01, 0x42, 0xd1, 0x00, 0xa5, 0x0e, 0x01, 0xb0, 0x78, + 0x43, 0x43, 0x14, 0x9c, 0x0e, 0x01, 0xb2, 0x66, 0xb3, 0x4e, 0xb4, 0x42, + 0x42, 0x48, 0x04, 0xa3, 0x0e, 0x01, 0x42, 0xf5, 0x0a, 0x9a, 0x0e, 0x81, + 0x2f, 0x43, 0x8a, 0x8a, 0xa4, 0x0e, 0x01, 0xb8, 0x1d, 0x43, 0xd6, 0xf4, + 0xa8, 0x0e, 0x81, 0x10, 0xba, 0x01, 0xff, 0xe1, 0x8f, 0x0e, 0x81, 0x04, + 0xe5, 0x96, 0x0e, 0x41, 0xec, 0x8c, 0x0e, 0x41, 0x56, 0x61, 0x32, 0xb1, + 0x0e, 0x41, 0xe1, 0x8a, 0x0e, 0x01, 0x44, 0x31, 0xf0, 0x98, 0x0e, 0x41, + 0x4f, 0x06, 0x69, 0x9b, 0x0e, 0x41, 0xe1, 0x95, 0x0e, 0x01, 0x42, 0xb0, + 0x01, 0x84, 0x0e, 0x41, 0x42, 0xe8, 0x01, 0x93, 0x0e, 0x01, 0xe5, 0x85, + 0x0e, 0x01, 0x43, 0x7a, 0x16, 0x92, 0x0e, 0x01, 0x42, 0x9e, 0x01, 0x91, + 0x0e, 0x41, 0xe1, 0x8d, 0x0e, 0x01, 0x42, 0x22, 0x00, 0x8e, 0x0e, 0x41, + 0xe5, 0x82, 0x0e, 0x01, 0x42, 0xb0, 0x01, 0x83, 0x0e, 0x41, 0x4f, 0x75, + 0x3b, 0xb0, 0x0e, 0x41, 0x42, 0x44, 0x14, 0x9d, 0x0e, 0x01, 0x43, 0x36, + 0x50, 0x9e, 0x0e, 0x41, 0x42, 0xed, 0x10, 0xa7, 0x0e, 0x01, 0x42, 0x22, + 0x00, 0x89, 0x0e, 0x41, 0x43, 0x9c, 0x6a, 0x80, 0x0e, 0x01, 0xf4, 0xa9, + 0x0e, 0x01, 0xf7, 0xa6, 0x0e, 0x01, 0x42, 0x03, 0x1d, 0x97, 0x0e, 0x41, + 0xe4, 0x94, 0x0e, 0x01, 0xec, 0x8b, 0x0e, 0x41, 0xa8, 0x06, 0x42, 0x29, + 0x02, 0x86, 0x0e, 0x41, 0x43, 0x1c, 0x39, 0x88, 0x0e, 0x01, 0x42, 0x29, + 0x02, 0x87, 0x0e, 0x41, 0x4a, 0x0f, 0xab, 0xab, 0x0e, 0x01, 0x4a, 0xa3, + 0xad, 0xac, 0x0e, 0x41, 0x10, 0x46, 0x65, 0x06, 0x4a, 0x16, 0x83, 0x71, + 0xf9, 0x41, 0x48, 0x48, 0xc9, 0xf4, 0x6f, 0x01, 0xb4, 0x01, 0xff, 0x4f, + 0x4c, 0x6e, 0xf5, 0x6f, 0x01, 0x48, 0x88, 0xcc, 0xf6, 0x6f, 0x41, 0x53, + 0x7d, 0x47, 0x27, 0x23, 0x00, 0x44, 0xcd, 0xec, 0x7b, 0xfa, 0x01, 0x07, + 0xbe, 0xd1, 0x06, 0x42, 0x0c, 0x00, 0xbb, 0x22, 0x40, 0x06, 0x0c, 0x03, + 0x31, 0x04, 0xda, 0x05, 0x01, 0xff, 0xa3, 0x1e, 0x48, 0x90, 0xc5, 0x62, + 0xfa, 0x01, 0x47, 0x40, 0xd1, 0x60, 0xfa, 0x01, 0x45, 0x20, 0xb3, 0x63, + 0xfa, 0x01, 0x48, 0x20, 0xc8, 0x61, 0xfa, 0x01, 0x47, 0xe6, 0xd5, 0x66, + 0xfa, 0x41, 0x45, 0x52, 0xe4, 0x65, 0xfa, 0x01, 0x46, 0xc5, 0x57, 0x64, + 0xfa, 0x41, 0xa3, 0x1e, 0x48, 0x90, 0xc5, 0x69, 0xfa, 0x01, 0x47, 0x40, + 0xd1, 0x67, 0xfa, 0x01, 0x45, 0x20, 0xb3, 0x6a, 0xfa, 0x01, 0x48, 0x20, + 0xc8, 0x68, 0xfa, 0x01, 0x47, 0xe6, 0xd5, 0x6d, 0xfa, 0x41, 0x45, 0x52, + 0xe4, 0x6c, 0xfa, 0x01, 0x46, 0xc5, 0x57, 0x6b, 0xfa, 0x41, 0xa1, 0xa0, + 0x0e, 0xa5, 0xeb, 0x0d, 0xa8, 0xf6, 0x03, 0xa9, 0x8c, 0x01, 0xaf, 0x23, + 0xb2, 0x01, 0xff, 0x4d, 0x89, 0x80, 0x81, 0xf3, 0x01, 0xa5, 0x06, 0x4a, + 0x33, 0xa2, 0x0d, 0x27, 0x40, 0x4b, 0x58, 0x99, 0x40, 0x22, 0x00, 0x43, + 0xad, 0x25, 0x27, 0xf5, 0x01, 0x46, 0x1c, 0xe0, 0x3c, 0xf9, 0x41, 0x47, + 0xe4, 0xd2, 0x3a, 0xf4, 0x01, 0xad, 0x2f, 0x46, 0xc3, 0x04, 0xa9, 0x20, + 0x00, 0x42, 0x79, 0x0c, 0xb5, 0xfa, 0x01, 0xb2, 0x01, 0xff, 0x02, 0x06, + 0x00, 0x10, 0x46, 0xa6, 0xdd, 0xfa, 0xf5, 0x01, 0xed, 0xb1, 0xfa, 0x01, + 0x49, 0xbe, 0xbe, 0x1f, 0xf6, 0x41, 0x46, 0xa0, 0x61, 0x60, 0x20, 0x00, + 0x54, 0xdc, 0x45, 0x31, 0x2e, 0x40, 0x42, 0x1a, 0x00, 0x69, 0xf4, 0x81, + 0x06, 0x4a, 0xf7, 0xa9, 0xba, 0xf6, 0x41, 0x50, 0x96, 0x60, 0x6f, 0xf4, + 0x01, 0x02, 0x31, 0x01, 0x01, 0xff, 0x45, 0xd4, 0xe4, 0x62, 0xf4, 0x01, + 0x47, 0x05, 0xd0, 0x5a, 0xf4, 0x01, 0x43, 0x94, 0x21, 0x52, 0xf4, 0x01, + 0x46, 0x4b, 0xbc, 0x61, 0xf4, 0x41, 0x0a, 0xd7, 0x1b, 0x45, 0x52, 0xf1, + 0x51, 0x3e, 0x2e, 0x00, 0x4b, 0x04, 0x9f, 0x40, 0xf9, 0x01, 0xae, 0x11, + 0x02, 0x88, 0x00, 0x01, 0xff, 0x4a, 0x11, 0xa9, 0xae, 0xf5, 0x01, 0x44, + 0xec, 0x00, 0xdc, 0xf6, 0x41, 0xa4, 0x10, 0x47, 0x91, 0xd0, 0x77, 0xf3, + 0x01, 0xe7, 0xbd, 0xfa, 0x01, 0x49, 0x74, 0xb0, 0x09, 0xf6, 0x41, 0x80, + 0x06, 0x42, 0xd1, 0x00, 0x9f, 0xfa, 0x41, 0x4c, 0xc7, 0x8c, 0x2c, 0xf3, + 0x01, 0x45, 0x29, 0xe5, 0x90, 0xf3, 0x41, 0x0a, 0xa5, 0x01, 0xfb, 0x01, + 0x0a, 0xea, 0x01, 0xd8, 0x01, 0x06, 0xb4, 0x01, 0x8e, 0x01, 0x0b, 0xb3, + 0x02, 0x6c, 0x06, 0xa1, 0x20, 0x23, 0x08, 0x50, 0x02, 0x01, 0xff, 0x4a, + 0xec, 0x3e, 0x69, 0xf8, 0x01, 0x50, 0xe6, 0x3e, 0x79, 0xf8, 0x01, 0x50, + 0xa6, 0x64, 0x61, 0xf8, 0x01, 0x51, 0x1c, 0x5c, 0x71, 0xf8, 0x01, 0x55, + 0xe1, 0x3e, 0x81, 0xf8, 0x41, 0x05, 0xad, 0x23, 0x23, 0x05, 0xbe, 0x1a, + 0x01, 0xff, 0x4a, 0xec, 0x3e, 0x6f, 0xf8, 0x01, 0x50, 0xe6, 0x3e, 0x7f, + 0xf8, 0x01, 0x50, 0xa6, 0x64, 0x67, 0xf8, 0x01, 0x51, 0x1c, 0x5c, 0x77, + 0xf8, 0x01, 0x55, 0xe1, 0x3e, 0x87, 0xf8, 0x41, 0x4a, 0xec, 0x3e, 0x6e, + 0xf8, 0x01, 0x50, 0xe6, 0x3e, 0x7e, 0xf8, 0x01, 0x50, 0xa6, 0x64, 0x66, + 0xf8, 0x01, 0x51, 0x1c, 0x5c, 0x76, 0xf8, 0x01, 0x55, 0xe1, 0x3e, 0x86, + 0xf8, 0x41, 0x4a, 0xec, 0x3e, 0x6a, 0xf8, 0x01, 0x50, 0xe6, 0x3e, 0x7a, + 0xf8, 0x01, 0x50, 0xa6, 0x64, 0x62, 0xf8, 0x01, 0x51, 0x1c, 0x5c, 0x72, + 0xf8, 0x01, 0x55, 0xe1, 0x3e, 0x82, 0xf8, 0x41, 0x05, 0xad, 0x23, 0x23, + 0x05, 0xbe, 0x1a, 0x01, 0xff, 0x4a, 0xec, 0x3e, 0x6c, 0xf8, 0x01, 0x50, + 0xe6, 0x3e, 0x7c, 0xf8, 0x01, 0x50, 0xa6, 0x64, 0x64, 0xf8, 0x01, 0x51, + 0x1c, 0x5c, 0x74, 0xf8, 0x01, 0x55, 0xe1, 0x3e, 0x84, 0xf8, 0x41, 0x4a, + 0xec, 0x3e, 0x6d, 0xf8, 0x01, 0x50, 0xe6, 0x3e, 0x7d, 0xf8, 0x01, 0x50, + 0xa6, 0x64, 0x65, 0xf8, 0x01, 0x51, 0x1c, 0x5c, 0x75, 0xf8, 0x01, 0x55, + 0xe1, 0x3e, 0x85, 0xf8, 0x41, 0x4a, 0xec, 0x3e, 0x68, 0xf8, 0x01, 0x50, + 0xe6, 0x3e, 0x78, 0xf8, 0x01, 0x50, 0xa6, 0x64, 0x60, 0xf8, 0x01, 0x51, + 0x1c, 0x5c, 0x70, 0xf8, 0x01, 0x55, 0xe1, 0x3e, 0x80, 0xf8, 0x41, 0x4a, + 0xec, 0x3e, 0x6b, 0xf8, 0x01, 0x50, 0xe6, 0x3e, 0x7b, 0xf8, 0x01, 0x50, + 0xa6, 0x64, 0x63, 0xf8, 0x01, 0x51, 0x1c, 0x5c, 0x73, 0xf8, 0x01, 0x55, + 0xe1, 0x3e, 0x83, 0xf8, 0x41, 0x43, 0x67, 0x00, 0x0b, 0xf4, 0x01, 0x43, + 0x2d, 0x13, 0xde, 0xf6, 0x81, 0xd8, 0x09, 0x03, 0xaf, 0x02, 0x01, 0xff, + 0x80, 0x06, 0x5b, 0x0b, 0x1a, 0xb3, 0x27, 0x40, 0x12, 0x2f, 0x50, 0xba, + 0x09, 0x46, 0xb2, 0x21, 0xe6, 0x25, 0x00, 0xa3, 0xb1, 0x06, 0xa4, 0xc0, + 0x05, 0x59, 0xe0, 0x12, 0x55, 0x27, 0x00, 0xa6, 0x83, 0x05, 0xa8, 0xc3, + 0x04, 0xac, 0xe5, 0x03, 0xad, 0xb7, 0x03, 0x43, 0x40, 0x9d, 0x11, 0x27, + 0x00, 0xb0, 0x97, 0x03, 0x56, 0x81, 0x36, 0x54, 0x27, 0x00, 0xb2, 0xd4, + 0x02, 0xb3, 0x7c, 0xb4, 0x5a, 0x02, 0x50, 0x02, 0x28, 0x03, 0x32, 0x00, + 0x01, 0xff, 0x06, 0x35, 0x00, 0x06, 0x4e, 0x84, 0x0a, 0x1e, 0x2b, 0x40, + 0x43, 0x16, 0x00, 0xfe, 0x2a, 0x00, 0x47, 0xdf, 0x66, 0x2f, 0x2b, 0x00, + 0x49, 0x83, 0x47, 0xaf, 0x25, 0xc0, 0x00, 0x54, 0xec, 0x3f, 0x06, 0xce, + 0x41, 0x0a, 0x9b, 0x01, 0x1e, 0x0a, 0x8c, 0x0b, 0x01, 0xff, 0x47, 0x4a, + 0x4e, 0xca, 0xfb, 0x01, 0x4e, 0x26, 0x0c, 0xb5, 0x25, 0x00, 0x48, 0x01, + 0x02, 0xb3, 0x25, 0xc0, 0x00, 0x49, 0x75, 0x3b, 0xec, 0x25, 0x40, 0x4e, + 0xe0, 0x26, 0x46, 0xf4, 0x01, 0x45, 0x8f, 0x13, 0x1d, 0x26, 0x40, 0x48, + 0x17, 0x3d, 0x0f, 0x26, 0x00, 0x52, 0x55, 0x54, 0x7e, 0xf5, 0x01, 0xb2, + 0x06, 0x57, 0x07, 0x32, 0xd7, 0x26, 0x40, 0x47, 0xf4, 0xce, 0xe2, 0x23, + 0x00, 0x66, 0x4b, 0x07, 0xc1, 0x27, 0x40, 0x47, 0x47, 0x3e, 0x04, 0x27, + 0x00, 0x49, 0xa0, 0xb8, 0x46, 0xfe, 0x00, 0x4a, 0x86, 0x5f, 0x16, 0x26, + 0x00, 0xad, 0xa2, 0x01, 0x49, 0xe6, 0xbd, 0x64, 0x26, 0x00, 0x45, 0xd7, + 0x05, 0xa1, 0x25, 0x80, 0x2e, 0x43, 0x32, 0x13, 0x06, 0x26, 0x00, 0x42, + 0x42, 0x0b, 0x23, 0xf3, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x4c, 0xa3, 0x8c, + 0x25, 0xf3, 0x81, 0x11, 0x05, 0x51, 0x00, 0x01, 0xff, 0x44, 0x46, 0x66, + 0x3c, 0x26, 0x00, 0x4b, 0xb6, 0xa2, 0x24, 0xf3, 0x41, 0x4a, 0x87, 0xa6, + 0x26, 0xf3, 0x41, 0x80, 0x01, 0xff, 0x46, 0x03, 0x8d, 0x33, 0xf5, 0x01, + 0x11, 0x51, 0x0a, 0x48, 0x05, 0x51, 0x00, 0x01, 0xff, 0x54, 0xf0, 0x40, + 0x85, 0x23, 0x00, 0xac, 0x24, 0xb2, 0x16, 0x06, 0x6d, 0x02, 0x06, 0x57, + 0xc2, 0x31, 0xeb, 0x25, 0x40, 0x4d, 0x74, 0x0d, 0xf0, 0x25, 0x00, 0x4e, + 0x64, 0x45, 0xf3, 0x25, 0x40, 0x4e, 0xb2, 0x72, 0xe5, 0x27, 0x00, 0x4e, + 0x20, 0x19, 0xa2, 0x25, 0x40, 0x4d, 0x52, 0x79, 0xe4, 0x27, 0x00, 0x05, + 0x14, 0x01, 0x01, 0xff, 0x4d, 0x74, 0x0d, 0xf1, 0x25, 0x00, 0x4e, 0x64, + 0x45, 0xf2, 0x25, 0x40, 0x4d, 0xc4, 0x85, 0x95, 0xf7, 0x01, 0x4c, 0x86, + 0x0a, 0xa3, 0x25, 0x00, 0x51, 0x81, 0x0a, 0x94, 0xf7, 0x41, 0x04, 0x5f, + 0x07, 0x06, 0x4a, 0x5d, 0x95, 0x3a, 0x26, 0x40, 0x47, 0x68, 0x0a, 0x2b, + 0x2b, 0x00, 0xb3, 0x01, 0xff, 0x45, 0xd7, 0x05, 0xab, 0x25, 0x00, 0x43, + 0x32, 0x13, 0x52, 0x2b, 0x40, 0x48, 0x84, 0x47, 0xad, 0x25, 0x00, 0x04, + 0xc9, 0x00, 0x01, 0xff, 0x0a, 0x9b, 0x01, 0x1f, 0x0a, 0x8c, 0x0b, 0x01, + 0xff, 0xb0, 0x0c, 0x4e, 0x26, 0x0c, 0xb9, 0x25, 0x00, 0x48, 0x01, 0x02, + 0xb7, 0x25, 0x40, 0x47, 0xe1, 0xc9, 0x54, 0x2b, 0x00, 0x46, 0xea, 0x49, + 0xbb, 0x25, 0x40, 0x4e, 0xe0, 0x26, 0x49, 0xf4, 0x01, 0x45, 0x8f, 0x13, + 0x1e, 0x26, 0x40, 0x4c, 0x67, 0x8c, 0xb1, 0x25, 0x00, 0x02, 0x92, 0x01, + 0x01, 0xff, 0x44, 0x2c, 0x33, 0xf1, 0xf3, 0x01, 0x45, 0xe3, 0xc9, 0x20, + 0x2b, 0x40, 0x06, 0x45, 0x04, 0x06, 0x4a, 0xe3, 0xae, 0xdd, 0x2b, 0x40, + 0x47, 0x95, 0x44, 0x26, 0x2b, 0x00, 0x47, 0x68, 0x0a, 0x28, 0x2b, 0x00, + 0xb3, 0x01, 0xff, 0x4b, 0x87, 0x0a, 0xfd, 0x25, 0x00, 0x45, 0xd7, 0x05, + 0xfb, 0x25, 0x00, 0x43, 0x32, 0x13, 0x50, 0x2b, 0x40, 0xa1, 0x4d, 0x03, + 0xc4, 0x00, 0x19, 0xaf, 0x01, 0xff, 0x04, 0x15, 0x01, 0x06, 0x64, 0x4b, + 0x0a, 0xa0, 0xf7, 0x41, 0x4c, 0x0b, 0x91, 0x86, 0xcc, 0x01, 0x4d, 0xd9, + 0x87, 0x87, 0xcc, 0x41, 0x80, 0x17, 0x0a, 0x8c, 0x0b, 0x01, 0xff, 0x47, + 0xe9, 0x49, 0xc5, 0x25, 0x00, 0x4e, 0x26, 0x0c, 0xc3, 0x25, 0x00, 0x48, + 0x01, 0x02, 0xc1, 0x25, 0x40, 0x4a, 0x81, 0xac, 0xd9, 0x26, 0x00, 0x09, + 0x9c, 0x01, 0x01, 0xff, 0x4e, 0xe0, 0x26, 0x48, 0xf4, 0x01, 0x45, 0x8f, + 0x13, 0x1c, 0x26, 0x40, 0x4a, 0x37, 0xb0, 0x1c, 0x2b, 0x00, 0x49, 0x4b, + 0x9e, 0x46, 0xf5, 0x41, 0x55, 0x4d, 0x39, 0xab, 0xf5, 0x01, 0xa5, 0x0f, + 0xaf, 0x01, 0xff, 0x50, 0xd6, 0x66, 0x2d, 0x2b, 0x00, 0x47, 0xfe, 0xd6, + 0xd6, 0x29, 0x40, 0xa1, 0x06, 0x45, 0x8f, 0xd1, 0x21, 0x2b, 0x40, 0x42, + 0x34, 0x00, 0x0d, 0xf9, 0x81, 0x11, 0x03, 0x70, 0x15, 0x01, 0xff, 0x4a, + 0xa3, 0xa8, 0x05, 0x27, 0x00, 0x5c, 0x12, 0x19, 0xc0, 0xfb, 0x41, 0x45, + 0x9e, 0x27, 0x61, 0x26, 0x40, 0xac, 0x16, 0x0c, 0x1c, 0x13, 0x06, 0x4c, + 0x14, 0x83, 0x39, 0x26, 0x40, 0x44, 0x12, 0x16, 0xce, 0x2b, 0x00, 0x44, + 0x31, 0x13, 0x27, 0x27, 0x40, 0x42, 0x23, 0x02, 0x90, 0x26, 0x80, 0x0f, + 0xaf, 0x01, 0xff, 0x45, 0xaf, 0x0f, 0x40, 0x27, 0x00, 0x43, 0x15, 0x01, + 0xae, 0xf4, 0x41, 0x64, 0xbf, 0x08, 0xff, 0x26, 0x40, 0x46, 0x96, 0x44, + 0xc7, 0x25, 0x80, 0x3c, 0x03, 0xa6, 0x01, 0x11, 0x08, 0x38, 0xca, 0x01, + 0xff, 0x44, 0xb2, 0x34, 0xc1, 0x26, 0x00, 0x43, 0x41, 0x18, 0xc0, 0x26, + 0x40, 0x0a, 0x9b, 0x01, 0x11, 0x0a, 0x8c, 0x0b, 0x01, 0xff, 0x4e, 0x26, + 0x0c, 0xbf, 0x25, 0x00, 0x48, 0x01, 0x02, 0xbd, 0x25, 0x40, 0x4e, 0xe0, + 0x26, 0x47, 0xf4, 0x01, 0x45, 0x8f, 0x13, 0x1f, 0x26, 0x00, 0x4f, 0x87, + 0x6f, 0x97, 0xf5, 0x41, 0x80, 0x01, 0xff, 0x11, 0x51, 0x0a, 0x12, 0x49, + 0x50, 0xba, 0xcb, 0x26, 0x00, 0x44, 0x9f, 0x27, 0x62, 0x26, 0x00, 0x50, + 0xb6, 0x68, 0xd0, 0x27, 0x40, 0x4e, 0xcf, 0x79, 0x9b, 0xf7, 0x01, 0x4d, + 0x76, 0x56, 0xc8, 0x25, 0x00, 0x52, 0x71, 0x56, 0x9a, 0xf7, 0x41, 0x05, + 0x4b, 0x88, 0x70, 0x45, 0x13, 0x03, 0xcb, 0x25, 0x80, 0x24, 0x48, 0x10, + 0xc8, 0x67, 0x26, 0x00, 0x54, 0x88, 0x44, 0xe1, 0x27, 0x80, 0x06, 0x49, + 0xea, 0xa8, 0xcb, 0xfb, 0x41, 0x06, 0x50, 0x00, 0x01, 0xff, 0x4e, 0x51, + 0x79, 0xe2, 0x27, 0x00, 0x4f, 0xb1, 0x72, 0xe3, 0x27, 0x40, 0x80, 0x01, + 0xff, 0x5d, 0x2e, 0x15, 0x8a, 0xf7, 0x01, 0x05, 0x51, 0x00, 0x01, 0xff, + 0x02, 0x3b, 0x01, 0x27, 0x06, 0x13, 0x01, 0x17, 0x48, 0x1f, 0x0a, 0x87, + 0x26, 0x00, 0x06, 0x6d, 0x02, 0x01, 0xff, 0x4d, 0x74, 0x0d, 0xf4, 0x25, + 0x00, 0x4e, 0x64, 0x45, 0xf7, 0x25, 0x40, 0x4d, 0x74, 0x0d, 0xf5, 0x25, + 0x00, 0x4e, 0x64, 0x45, 0xf6, 0x25, 0x40, 0x47, 0xc6, 0x00, 0x86, 0x26, + 0x00, 0x48, 0xce, 0x41, 0xec, 0x29, 0x40, 0x45, 0x25, 0xe4, 0x55, 0xfa, + 0x01, 0x46, 0x2e, 0xda, 0x57, 0x26, 0x80, 0xed, 0x01, 0x4a, 0x15, 0xaa, + 0x48, 0xfa, 0x81, 0xdf, 0x01, 0x44, 0xbd, 0xef, 0x54, 0xfa, 0x01, 0xab, + 0x73, 0x44, 0xfd, 0xf1, 0x59, 0x26, 0x80, 0x5b, 0x45, 0x52, 0xbe, 0x55, + 0x26, 0x80, 0x43, 0x44, 0x5d, 0xf2, 0x56, 0x26, 0x80, 0x2b, 0x07, 0x27, + 0x0a, 0x01, 0xff, 0x46, 0x2e, 0xda, 0x21, 0xfa, 0x01, 0xab, 0x12, 0x44, + 0xfd, 0xf1, 0x23, 0xfa, 0x01, 0x45, 0x52, 0xbe, 0x1f, 0xfa, 0x01, 0x44, + 0x5d, 0xf2, 0x20, 0xfa, 0x41, 0x43, 0xa1, 0x01, 0x1e, 0xfa, 0x01, 0x45, + 0x4e, 0x09, 0x22, 0xfa, 0x41, 0x09, 0xa3, 0x2c, 0x01, 0xff, 0x4e, 0xac, + 0x2c, 0x0b, 0xfa, 0x01, 0x5b, 0xbc, 0x1d, 0x35, 0xfa, 0x41, 0x09, 0xa3, + 0x2c, 0x01, 0xff, 0x4e, 0xac, 0x2c, 0x0a, 0xfa, 0x01, 0x5b, 0xbc, 0x1d, + 0x34, 0xfa, 0x41, 0x09, 0xa3, 0x2c, 0x01, 0xff, 0x4e, 0xac, 0x2c, 0x0e, + 0xfa, 0x01, 0x5b, 0xbc, 0x1d, 0x38, 0xfa, 0x41, 0x43, 0xa1, 0x01, 0x54, + 0x26, 0x80, 0x4c, 0x45, 0x4e, 0x09, 0x58, 0x26, 0xc0, 0x00, 0x09, 0xa3, + 0x2c, 0x15, 0x8d, 0x01, 0xff, 0x46, 0x2e, 0xda, 0x50, 0xfa, 0x01, 0x45, + 0x52, 0xbe, 0x4e, 0xfa, 0x01, 0x44, 0x5d, 0xf2, 0x4f, 0xfa, 0x41, 0x52, + 0xcd, 0x51, 0x06, 0xfa, 0x01, 0x4e, 0xac, 0x2c, 0x0d, 0xfa, 0x01, 0x5f, + 0x6d, 0x11, 0x1b, 0xfa, 0x01, 0xb4, 0x01, 0xff, 0x5c, 0xfa, 0x17, 0x45, + 0xfa, 0x01, 0x0b, 0xbd, 0x1d, 0x01, 0xff, 0x4f, 0xc8, 0x1d, 0x37, 0xfa, + 0x01, 0x53, 0xf2, 0x4d, 0x30, 0xfa, 0x41, 0x09, 0xa3, 0x2c, 0x01, 0xff, + 0x4e, 0xac, 0x2c, 0x09, 0xfa, 0x01, 0x5b, 0xbc, 0x1d, 0x33, 0xfa, 0x41, + 0x57, 0xa3, 0x2c, 0x4b, 0xfa, 0x41, 0x09, 0xa3, 0x2c, 0x01, 0xff, 0x4e, + 0xac, 0x2c, 0x0c, 0xfa, 0x01, 0x5b, 0xbc, 0x1d, 0x36, 0xfa, 0x41, 0x43, + 0x0e, 0x0b, 0xac, 0xf8, 0x01, 0x4a, 0x53, 0xb2, 0xad, 0xf8, 0x41, 0x4a, + 0xe7, 0xa5, 0x38, 0x26, 0x00, 0x4c, 0x3f, 0x8d, 0x7f, 0x26, 0x40, 0x04, + 0x28, 0x18, 0x22, 0xa4, 0x14, 0xa9, 0x06, 0x4f, 0x47, 0x73, 0x70, 0x26, + 0x40, 0x5a, 0x18, 0x20, 0x18, 0x21, 0x00, 0x4a, 0xd3, 0xaa, 0xcb, 0xf3, + 0x41, 0x44, 0x04, 0x06, 0x92, 0xf4, 0x01, 0x5a, 0x8c, 0x17, 0xbc, 0x27, + 0x40, 0x48, 0x62, 0x1f, 0x40, 0xf6, 0x01, 0x44, 0x0c, 0x08, 0x29, 0xf6, + 0x41, 0x44, 0x87, 0x89, 0xc7, 0xf9, 0x01, 0xae, 0xb5, 0x05, 0xb2, 0x95, + 0x01, 0x49, 0x72, 0xbf, 0xd1, 0xf5, 0x01, 0xb4, 0x62, 0xb6, 0x11, 0x05, + 0x72, 0xec, 0x01, 0xff, 0x54, 0x40, 0x41, 0x12, 0xf3, 0x01, 0x53, 0xb7, + 0x49, 0x14, 0xf3, 0x41, 0x02, 0x60, 0x00, 0x35, 0x04, 0xa1, 0x01, 0x1f, + 0x02, 0x09, 0x00, 0x01, 0xff, 0x44, 0x8f, 0x12, 0x30, 0x30, 0x00, 0xac, + 0x06, 0x48, 0x82, 0x8a, 0x4b, 0xfe, 0x40, 0x43, 0xee, 0x07, 0x07, 0x23, + 0x00, 0x47, 0x76, 0x8a, 0x4f, 0xfe, 0x40, 0x4a, 0x3f, 0xa8, 0xf4, 0xf3, + 0x01, 0x49, 0xad, 0x47, 0x4b, 0xf4, 0x01, 0x4a, 0x6b, 0xb3, 0xf3, 0xf3, + 0x41, 0x18, 0x36, 0x27, 0x06, 0x44, 0x8f, 0x12, 0x1c, 0x30, 0x40, 0x44, + 0xc3, 0x00, 0x3f, 0x2b, 0x00, 0x45, 0xc8, 0x00, 0x33, 0x29, 0x40, 0x42, + 0x6d, 0x14, 0x1a, 0x23, 0x00, 0x02, 0x33, 0x00, 0x01, 0xff, 0x80, 0x06, + 0x45, 0x8a, 0xe8, 0x49, 0xf3, 0x41, 0x47, 0xb8, 0xcf, 0x03, 0xf4, 0x01, + 0x46, 0xac, 0xda, 0xbe, 0xf6, 0x01, 0x44, 0x1d, 0xf2, 0x3d, 0xf9, 0x01, + 0x44, 0x82, 0x57, 0x0a, 0xf3, 0x41, 0x09, 0x0f, 0xb6, 0x06, 0x49, 0x87, + 0xbc, 0xa0, 0x26, 0x40, 0x0f, 0xe4, 0x05, 0xd1, 0x02, 0x06, 0xef, 0x06, + 0x8a, 0x02, 0x07, 0xff, 0x39, 0xc8, 0x01, 0x42, 0x14, 0x05, 0xff, 0x18, + 0x01, 0x0d, 0x76, 0x08, 0x01, 0xff, 0xe1, 0xc1, 0x18, 0x81, 0xa9, 0x01, + 0x42, 0x6a, 0x0d, 0xd7, 0x18, 0x01, 0x42, 0xf0, 0x10, 0xd4, 0x18, 0x01, + 0xe5, 0xc8, 0x18, 0x81, 0x8c, 0x01, 0x42, 0x24, 0x02, 0xcb, 0x18, 0x01, + 0xa8, 0x69, 0x42, 0x52, 0x28, 0xc6, 0x18, 0x01, 0x42, 0x4d, 0x03, 0xcc, + 0x18, 0x01, 0xae, 0x4f, 0xef, 0xc9, 0x18, 0x81, 0x44, 0x42, 0x07, 0x0c, + 0xd8, 0x18, 0x01, 0xb3, 0x30, 0x43, 0xee, 0x05, 0xd2, 0x18, 0x01, 0xb5, + 0x20, 0x44, 0x09, 0xf3, 0xdf, 0x18, 0x01, 0x42, 0x51, 0x00, 0xc2, 0x18, + 0x01, 0xb9, 0x01, 0xff, 0xe1, 0xc4, 0x18, 0x01, 0xef, 0xc5, 0x18, 0x01, + 0xf5, 0xc3, 0x18, 0xc1, 0x00, 0xea, 0xce, 0x18, 0x41, 0xe3, 0xcf, 0x18, + 0x01, 0xf5, 0xc7, 0x18, 0x41, 0x42, 0x52, 0x28, 0xde, 0x18, 0x01, 0x43, + 0x9d, 0xf4, 0xdd, 0x18, 0x41, 0x42, 0x7f, 0x02, 0xd1, 0x18, 0x41, 0x43, + 0x99, 0x57, 0xc0, 0x18, 0x01, 0x43, 0xaa, 0x45, 0xd3, 0x18, 0x41, 0x42, + 0x17, 0x00, 0xdc, 0x18, 0x01, 0x43, 0x71, 0xca, 0xd9, 0x18, 0x01, 0xaf, + 0x01, 0xff, 0x42, 0x13, 0x01, 0xda, 0x18, 0x01, 0x42, 0xcf, 0x00, 0xdb, + 0x18, 0x41, 0xae, 0x01, 0xff, 0xee, 0xd0, 0x18, 0x01, 0xf9, 0xcd, 0x18, + 0x41, 0xed, 0xd6, 0x18, 0x01, 0x42, 0x1d, 0x01, 0xca, 0x18, 0x01, 0xf4, + 0xd5, 0x18, 0x41, 0x46, 0x30, 0xdb, 0xf1, 0x18, 0x01, 0xa6, 0x29, 0x46, + 0xac, 0x2c, 0xf2, 0x18, 0x01, 0xb3, 0x15, 0xb4, 0x01, 0xff, 0x42, 0x92, + 0x01, 0xea, 0x18, 0x01, 0x45, 0x7a, 0x11, 0xec, 0x18, 0x01, 0x45, 0x7f, + 0x2c, 0xeb, 0x18, 0x41, 0x46, 0xc9, 0x1d, 0xf0, 0x18, 0x01, 0x44, 0x46, + 0xdd, 0xef, 0x18, 0x41, 0x44, 0x51, 0x4d, 0xee, 0x18, 0x01, 0x44, 0xce, + 0x51, 0xed, 0x18, 0x41, 0x45, 0x12, 0x0b, 0xe8, 0x18, 0x01, 0xa6, 0x2e, + 0x44, 0xcf, 0x2a, 0xe9, 0x18, 0x01, 0x43, 0x0e, 0x0b, 0xe1, 0x18, 0x01, + 0xb3, 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, 0xe0, 0x18, 0x41, 0x44, 0x25, + 0x01, 0xe3, 0x18, 0x01, 0x42, 0x15, 0x02, 0xe2, 0x18, 0x41, 0x44, 0xc9, + 0x1d, 0xe7, 0x18, 0x01, 0x42, 0x01, 0x26, 0xe6, 0x18, 0x41, 0x43, 0xd2, + 0x05, 0xe5, 0x18, 0x01, 0x43, 0xf6, 0x06, 0xe4, 0x18, 0x41, 0xe1, 0xa1, + 0x18, 0x81, 0xa9, 0x01, 0x42, 0x6a, 0x0d, 0xb7, 0x18, 0x01, 0x42, 0xf0, + 0x10, 0xb4, 0x18, 0x01, 0xe5, 0xa8, 0x18, 0x81, 0x8c, 0x01, 0x42, 0x24, + 0x02, 0xab, 0x18, 0x01, 0xa8, 0x69, 0x42, 0x52, 0x28, 0xa6, 0x18, 0x01, + 0x42, 0x4d, 0x03, 0xac, 0x18, 0x01, 0xae, 0x4f, 0xef, 0xa9, 0x18, 0x81, + 0x44, 0x42, 0x07, 0x0c, 0xb8, 0x18, 0x01, 0xb3, 0x30, 0x43, 0xee, 0x05, + 0xb2, 0x18, 0x01, 0xb5, 0x20, 0x44, 0x09, 0xf3, 0xbf, 0x18, 0x01, 0x42, + 0x51, 0x00, 0xa2, 0x18, 0x01, 0xb9, 0x01, 0xff, 0xe1, 0xa4, 0x18, 0x01, + 0xef, 0xa5, 0x18, 0x01, 0xf5, 0xa3, 0x18, 0xc1, 0x00, 0xea, 0xae, 0x18, + 0x41, 0xe3, 0xaf, 0x18, 0x01, 0xf5, 0xa7, 0x18, 0x41, 0x42, 0x52, 0x28, + 0xbe, 0x18, 0x01, 0x43, 0x9d, 0xf4, 0xbd, 0x18, 0x41, 0x42, 0x7f, 0x02, + 0xb1, 0x18, 0x41, 0x43, 0x99, 0x57, 0xa0, 0x18, 0x01, 0x43, 0xaa, 0x45, + 0xb3, 0x18, 0x41, 0x42, 0x17, 0x00, 0xbc, 0x18, 0x01, 0x43, 0x71, 0xca, + 0xb9, 0x18, 0x01, 0xaf, 0x01, 0xff, 0x42, 0x13, 0x01, 0xba, 0x18, 0x01, + 0x42, 0xcf, 0x00, 0xbb, 0x18, 0x41, 0xae, 0x01, 0xff, 0xee, 0xb0, 0x18, + 0x01, 0xf9, 0xad, 0x18, 0x41, 0xed, 0xb6, 0x18, 0x01, 0x42, 0x1d, 0x01, + 0xaa, 0x18, 0x01, 0xf4, 0xb5, 0x18, 0x41, 0x04, 0x9a, 0xda, 0x11, 0x04, + 0xa1, 0x01, 0x01, 0xff, 0x54, 0x40, 0x41, 0x18, 0xf3, 0x01, 0x53, 0xb7, + 0x49, 0x16, 0xf3, 0x41, 0x06, 0xef, 0x06, 0xa6, 0x02, 0x07, 0xec, 0x05, + 0x25, 0x49, 0x63, 0xbc, 0xff, 0xe2, 0x01, 0x05, 0x3b, 0x2d, 0x01, 0xff, + 0x43, 0xbf, 0xde, 0xee, 0xe2, 0x81, 0x0d, 0x43, 0x81, 0x19, 0xec, 0xe2, + 0xc1, 0x00, 0x42, 0x51, 0x03, 0xed, 0xe2, 0x41, 0x42, 0x51, 0x03, 0xef, + 0xe2, 0x41, 0xe1, 0xc1, 0xe2, 0x81, 0xdf, 0x01, 0x42, 0x16, 0x00, 0xc2, + 0xe2, 0x01, 0x42, 0x37, 0x00, 0xc3, 0xe2, 0x01, 0x42, 0xf0, 0x10, 0xc4, + 0xe2, 0x01, 0xe5, 0xdb, 0xe2, 0x81, 0xc3, 0x01, 0x42, 0x0c, 0x08, 0xcd, + 0xe2, 0x01, 0x42, 0x24, 0x02, 0xc5, 0xe2, 0x01, 0x42, 0x22, 0x00, 0xda, + 0xe2, 0x01, 0xe9, 0xdc, 0xe2, 0x81, 0xa5, 0x01, 0x42, 0x56, 0x19, 0xd0, + 0xe2, 0x01, 0xab, 0x92, 0x01, 0xac, 0x85, 0x01, 0x42, 0x6c, 0x00, 0xd8, + 0xe2, 0x01, 0xae, 0x6d, 0xef, 0xd5, 0xe2, 0x81, 0x5f, 0xb0, 0x53, 0x42, + 0x71, 0x00, 0xd7, 0xe2, 0x01, 0xb3, 0x41, 0xb4, 0x29, 0xf5, 0xde, 0xe2, + 0x81, 0x1e, 0x42, 0xf5, 0x0a, 0xd3, 0xe2, 0x01, 0x42, 0xa9, 0x01, 0xd2, + 0xe2, 0x01, 0xb9, 0x06, 0x42, 0x59, 0x00, 0xd1, 0xe2, 0x41, 0xe1, 0xc6, + 0xe2, 0x01, 0x42, 0xda, 0x2c, 0xeb, 0xe2, 0x41, 0x42, 0x92, 0x01, 0xea, + 0xe2, 0x41, 0xe1, 0xcb, 0xe2, 0x01, 0x42, 0x22, 0x00, 0xcc, 0xe2, 0x01, + 0x42, 0x71, 0x00, 0xe1, 0xe2, 0x01, 0x42, 0x40, 0x06, 0xe0, 0xe2, 0x41, + 0xe1, 0xce, 0xe2, 0x01, 0x42, 0x22, 0x00, 0xcf, 0xe2, 0x41, 0xe1, 0xca, + 0xe2, 0x01, 0x42, 0x22, 0x00, 0xc7, 0xe2, 0x41, 0xee, 0xe6, 0xe2, 0xc1, + 0x00, 0xe7, 0xe2, 0xe2, 0x41, 0xe1, 0xc9, 0xe2, 0x01, 0x42, 0x24, 0x02, + 0xdd, 0xe2, 0x01, 0x42, 0xbc, 0x22, 0xe9, 0xe2, 0x41, 0xe1, 0xc8, 0xe2, + 0x01, 0x43, 0x2a, 0x09, 0xdf, 0xe2, 0x41, 0xe1, 0xd4, 0xe2, 0x01, 0x42, + 0x22, 0x00, 0xd9, 0xe2, 0x41, 0x42, 0x1d, 0x01, 0xe5, 0xe2, 0x41, 0xee, + 0xe7, 0xe2, 0x41, 0xe1, 0xc0, 0xe2, 0x81, 0x0a, 0x42, 0x1d, 0x01, 0xe4, + 0xe2, 0x01, 0xf5, 0xd6, 0xe2, 0x41, 0xee, 0xe8, 0xe2, 0xc1, 0x00, 0xe7, + 0xe3, 0xe2, 0x41, 0x45, 0x12, 0x0b, 0xf8, 0xe2, 0x01, 0xa6, 0x2e, 0x44, + 0xcf, 0x2a, 0xf9, 0xe2, 0x01, 0x43, 0x0e, 0x0b, 0xf1, 0xe2, 0x01, 0xb3, + 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, 0xf0, 0xe2, 0x41, 0x44, 0x25, 0x01, + 0xf3, 0xe2, 0x01, 0x42, 0x15, 0x02, 0xf2, 0xe2, 0x41, 0x44, 0xc9, 0x1d, + 0xf7, 0xe2, 0x01, 0x42, 0x01, 0x26, 0xf6, 0xe2, 0x41, 0x43, 0xd2, 0x05, + 0xf5, 0xe2, 0x01, 0x43, 0xf6, 0x06, 0xf4, 0xe2, 0x41, 0xa1, 0x82, 0x0b, + 0xa5, 0xb5, 0x05, 0xa9, 0xba, 0x01, 0xaf, 0x9c, 0x01, 0x02, 0x1f, 0x01, + 0x01, 0xff, 0x45, 0xf7, 0xe4, 0xe6, 0x2b, 0x00, 0x0d, 0x3a, 0x83, 0x01, + 0xff, 0xa6, 0x74, 0x04, 0x0e, 0x0b, 0x35, 0x4d, 0xfb, 0x4c, 0x5e, 0x21, + 0x00, 0xb4, 0x06, 0x4b, 0x76, 0xa5, 0x89, 0x21, 0x40, 0x05, 0x25, 0x01, + 0x11, 0x03, 0x20, 0x0a, 0x01, 0xff, 0x46, 0x41, 0xaf, 0x56, 0x21, 0x00, + 0x46, 0xee, 0x74, 0x54, 0x21, 0x40, 0x47, 0x01, 0x4d, 0x5c, 0x21, 0x00, + 0x46, 0x41, 0xaf, 0x57, 0x21, 0x00, 0x48, 0x2a, 0x01, 0xbe, 0x00, 0x40, + 0x46, 0x12, 0x0b, 0x5b, 0x21, 0x00, 0x45, 0x41, 0xaf, 0x55, 0x21, 0x00, + 0x44, 0x22, 0x00, 0xbd, 0x00, 0x00, 0x45, 0x20, 0xe9, 0x51, 0x21, 0x00, + 0x47, 0x2a, 0x01, 0xbc, 0x00, 0x00, 0xb3, 0x0f, 0xb4, 0x01, 0xff, 0x44, + 0x82, 0x1b, 0x52, 0x21, 0x00, 0x44, 0xef, 0x74, 0x53, 0x21, 0x40, 0x46, + 0x90, 0xdb, 0x50, 0x21, 0x00, 0x44, 0x27, 0xac, 0x59, 0x21, 0x40, 0x04, + 0xd2, 0x05, 0x06, 0x4a, 0x3d, 0xaf, 0x58, 0x21, 0x40, 0x47, 0x01, 0x4d, + 0x5d, 0x21, 0x00, 0x46, 0xe6, 0xdf, 0x5a, 0x21, 0x40, 0x50, 0xa6, 0x63, + 0xbb, 0xfb, 0x01, 0xac, 0x01, 0xff, 0x44, 0x55, 0xef, 0x0b, 0xf3, 0x01, + 0x47, 0xdd, 0xd2, 0xd0, 0xf3, 0x01, 0x4c, 0x63, 0x96, 0x30, 0x22, 0x40, + 0x4c, 0xdf, 0x8c, 0xf3, 0xf4, 0x01, 0x04, 0xdd, 0x0f, 0xe1, 0x03, 0x03, + 0x4d, 0x20, 0xc8, 0x03, 0xa5, 0xaf, 0x03, 0x44, 0xb1, 0xae, 0xbb, 0xf3, + 0x01, 0x43, 0x66, 0x17, 0x4d, 0x26, 0x00, 0x07, 0x5d, 0xd6, 0x01, 0xff, + 0x0f, 0xe4, 0x05, 0xcf, 0x01, 0x0d, 0x76, 0x08, 0x01, 0xff, 0xe1, 0x97, + 0x05, 0x01, 0xa2, 0xb9, 0x01, 0xa3, 0xac, 0x01, 0xa4, 0x9f, 0x01, 0xe5, + 0x9f, 0x05, 0x81, 0x95, 0x01, 0x42, 0x0c, 0x1a, 0xa0, 0x05, 0x01, 0x42, + 0x24, 0x02, 0xa1, 0x05, 0x01, 0xa8, 0x7d, 0xe9, 0xa5, 0x05, 0x81, 0x72, + 0x42, 0x80, 0x20, 0xa7, 0x05, 0x01, 0x42, 0x1b, 0x02, 0xa8, 0x05, 0x01, + 0xac, 0x5a, 0x42, 0x2a, 0x02, 0xab, 0x05, 0x01, 0xae, 0x48, 0xef, 0xae, + 0x05, 0x01, 0x42, 0x6f, 0x02, 0xaf, 0x05, 0x01, 0x42, 0x43, 0x14, 0xb0, + 0x05, 0x01, 0x42, 0x88, 0x00, 0xb1, 0x05, 0x01, 0xb3, 0x26, 0xb4, 0x1a, + 0xf5, 0xb7, 0x05, 0x01, 0x42, 0x32, 0x00, 0xb8, 0x05, 0x01, 0x42, 0x6d, + 0x43, 0xb9, 0x05, 0x01, 0xf9, 0xbb, 0x05, 0x01, 0x42, 0x4b, 0x0a, 0xbc, + 0x05, 0x41, 0xe5, 0xb5, 0x05, 0x01, 0x42, 0xb0, 0x01, 0xb6, 0x05, 0x41, + 0xe5, 0xb3, 0x05, 0x01, 0x42, 0xb0, 0x01, 0xb4, 0x05, 0x41, 0xe5, 0xac, + 0x05, 0x01, 0x42, 0x80, 0x20, 0xad, 0x05, 0x41, 0xe1, 0xa9, 0x05, 0x01, + 0x42, 0x74, 0x00, 0xaa, 0x05, 0x41, 0x42, 0x80, 0x20, 0xa6, 0x05, 0x41, + 0xe1, 0xa3, 0x05, 0x01, 0x42, 0x22, 0x00, 0xa4, 0x05, 0x41, 0xe9, 0x9e, + 0x05, 0x41, 0xe5, 0x9c, 0x05, 0x01, 0x42, 0xb0, 0x01, 0x9d, 0x05, 0x41, + 0xe5, 0x9a, 0x05, 0x01, 0x42, 0xb0, 0x01, 0x9b, 0x05, 0x41, 0x42, 0xb7, + 0x05, 0x98, 0x05, 0x01, 0xe5, 0x99, 0x05, 0x41, 0xe1, 0x70, 0x05, 0x01, + 0xa2, 0xb9, 0x01, 0xa3, 0xac, 0x01, 0xa4, 0x9f, 0x01, 0xe5, 0x78, 0x05, + 0x81, 0x95, 0x01, 0x42, 0x0c, 0x1a, 0x79, 0x05, 0x01, 0x42, 0x24, 0x02, + 0x7a, 0x05, 0x01, 0xa8, 0x7d, 0xe9, 0x7e, 0x05, 0x81, 0x72, 0x42, 0x80, + 0x20, 0x80, 0x05, 0x01, 0x42, 0x1b, 0x02, 0x81, 0x05, 0x01, 0xac, 0x5a, + 0x42, 0x2a, 0x02, 0x84, 0x05, 0x01, 0xae, 0x48, 0xef, 0x87, 0x05, 0x01, + 0x42, 0x6f, 0x02, 0x88, 0x05, 0x01, 0x42, 0x43, 0x14, 0x89, 0x05, 0x01, + 0x42, 0x88, 0x00, 0x8a, 0x05, 0x01, 0xb3, 0x26, 0xb4, 0x1a, 0xf5, 0x90, + 0x05, 0x01, 0x42, 0x32, 0x00, 0x91, 0x05, 0x01, 0x42, 0x6d, 0x43, 0x92, + 0x05, 0x01, 0xf9, 0x94, 0x05, 0x01, 0x42, 0x4b, 0x0a, 0x95, 0x05, 0x41, + 0xe5, 0x8e, 0x05, 0x01, 0x42, 0xb0, 0x01, 0x8f, 0x05, 0x41, 0xe5, 0x8c, + 0x05, 0x01, 0x42, 0xb0, 0x01, 0x8d, 0x05, 0x41, 0xe5, 0x85, 0x05, 0x01, + 0x42, 0x80, 0x20, 0x86, 0x05, 0x41, 0xe1, 0x82, 0x05, 0x01, 0x42, 0x74, + 0x00, 0x83, 0x05, 0x41, 0x42, 0x80, 0x20, 0x7f, 0x05, 0x41, 0xe1, 0x7c, + 0x05, 0x01, 0x42, 0x22, 0x00, 0x7d, 0x05, 0x41, 0xe9, 0x77, 0x05, 0x41, + 0xe5, 0x75, 0x05, 0x01, 0x42, 0xb0, 0x01, 0x76, 0x05, 0x41, 0xe5, 0x73, + 0x05, 0x01, 0x42, 0xb0, 0x01, 0x74, 0x05, 0x41, 0x42, 0xb7, 0x05, 0x71, + 0x05, 0x01, 0xe5, 0x72, 0x05, 0x41, 0x1f, 0xe9, 0x11, 0x06, 0x4c, 0xe7, + 0x96, 0x17, 0x23, 0x40, 0x42, 0x37, 0x00, 0xf0, 0x6f, 0x01, 0x44, 0x7d, + 0xf1, 0xf1, 0x6f, 0x41, 0x80, 0x06, 0x48, 0x88, 0xc4, 0xfc, 0xf4, 0x41, + 0x46, 0x51, 0xb3, 0xf9, 0xf4, 0x01, 0x44, 0xe1, 0xef, 0xae, 0xf3, 0x41, + 0x42, 0x1b, 0x01, 0xc5, 0xce, 0x01, 0x46, 0xd5, 0x96, 0x0c, 0x27, 0x40, + 0x55, 0x0a, 0x3a, 0x2f, 0x2a, 0x00, 0x04, 0xeb, 0x06, 0x83, 0x03, 0xb2, + 0x0d, 0x43, 0x31, 0x13, 0xb6, 0x26, 0xc0, 0x00, 0x49, 0x21, 0x2e, 0x77, + 0xf7, 0x41, 0x45, 0xf6, 0xea, 0x23, 0x21, 0x00, 0x06, 0x35, 0x00, 0x67, + 0x02, 0x09, 0x00, 0x01, 0xff, 0x50, 0x16, 0x61, 0xa5, 0xf7, 0x01, 0x06, + 0x6d, 0x15, 0x11, 0x05, 0xd5, 0xe8, 0x01, 0xff, 0x4c, 0x87, 0x00, 0xd9, + 0x22, 0x00, 0x49, 0xec, 0x00, 0xd8, 0x22, 0x40, 0x06, 0x31, 0x14, 0x37, + 0x54, 0x58, 0x42, 0xb3, 0xf7, 0x01, 0x4b, 0x1b, 0x61, 0xa6, 0xf7, 0x01, + 0x4f, 0x66, 0x72, 0x7d, 0xf6, 0x01, 0xb3, 0x11, 0x06, 0xad, 0x02, 0x01, + 0xff, 0x46, 0x12, 0x03, 0x88, 0xf7, 0x01, 0x46, 0xd6, 0x05, 0x92, 0xf7, + 0x41, 0x46, 0x13, 0x19, 0xad, 0xf7, 0x01, 0x52, 0xff, 0x52, 0xb9, 0xf7, + 0x01, 0x46, 0x50, 0x31, 0x7c, 0xf6, 0x41, 0x52, 0xec, 0x2b, 0xd0, 0xf7, + 0x01, 0x4f, 0xd5, 0x1c, 0xbf, 0xf7, 0x41, 0x04, 0x16, 0x00, 0xe6, 0x01, + 0x49, 0xf9, 0xb6, 0x14, 0xcc, 0x01, 0x48, 0xce, 0x29, 0xee, 0x22, 0x00, + 0x49, 0xd1, 0x46, 0x5e, 0x20, 0x00, 0x47, 0x55, 0xd1, 0x9d, 0xcc, 0x01, + 0x5a, 0x4c, 0x20, 0x3b, 0x30, 0x00, 0x0c, 0x87, 0x90, 0xa0, 0x01, 0xac, + 0x61, 0x55, 0xd4, 0x3c, 0xa8, 0x26, 0x00, 0x11, 0xd7, 0x5c, 0x3f, 0xb2, + 0x31, 0x48, 0x00, 0xcb, 0x3d, 0x2e, 0x00, 0xb4, 0x06, 0x4b, 0x81, 0xa5, + 0x9a, 0x29, 0x40, 0x02, 0x5c, 0x00, 0x0c, 0x44, 0x36, 0x23, 0x2f, 0x2e, + 0x00, 0x4c, 0x0b, 0x94, 0xa6, 0xf6, 0x41, 0x44, 0xd1, 0x45, 0x7f, 0x2b, + 0x00, 0x47, 0xe6, 0x3b, 0x0b, 0x00, 0xc0, 0x00, 0x44, 0x66, 0xb8, 0x8a, + 0x00, 0x40, 0x49, 0x9a, 0xb5, 0x9c, 0xcc, 0x01, 0x4f, 0xd5, 0x6c, 0x0a, + 0xcc, 0x41, 0xd2, 0x70, 0xfb, 0x01, 0xd3, 0x71, 0xfb, 0x01, 0xd4, 0x72, + 0xfb, 0x01, 0xd5, 0x73, 0xfb, 0x01, 0xd6, 0x74, 0xfb, 0x01, 0xd7, 0x75, + 0xfb, 0x41, 0x45, 0x07, 0xe4, 0x84, 0xcc, 0x01, 0x43, 0xee, 0x07, 0x7c, + 0x00, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x49, 0xc1, 0x58, 0xd0, 0x23, 0x00, + 0x05, 0x51, 0x00, 0x01, 0xff, 0x07, 0xfb, 0x04, 0x12, 0x4f, 0x5c, 0x6d, + 0x90, 0xcc, 0x01, 0x4a, 0xe6, 0x45, 0x7f, 0x23, 0x00, 0x50, 0xf7, 0x07, + 0x15, 0xce, 0x41, 0x45, 0x5c, 0x00, 0xef, 0x2a, 0x00, 0x45, 0x20, 0x07, + 0xf0, 0x2a, 0x40, 0x44, 0xb9, 0x00, 0x31, 0x30, 0x80, 0x0d, 0x56, 0x4f, + 0x38, 0x32, 0x30, 0xc0, 0x00, 0x4b, 0x29, 0x1a, 0x34, 0x30, 0x40, 0x80, + 0x01, 0xff, 0x4a, 0xa0, 0x08, 0x35, 0x30, 0x00, 0x4a, 0x2a, 0x1a, 0x33, + 0x30, 0x40, 0x55, 0x8c, 0x39, 0xd0, 0x29, 0x00, 0x55, 0x49, 0x3a, 0xe4, + 0x2a, 0x00, 0x56, 0x89, 0x37, 0xe2, 0x2a, 0x00, 0x56, 0x23, 0x38, 0xca, + 0x27, 0x40, 0x05, 0x5a, 0x03, 0x94, 0x01, 0x05, 0x3b, 0x2d, 0x01, 0xff, + 0x60, 0x74, 0x0f, 0xe1, 0x1c, 0x00, 0x07, 0x36, 0x61, 0x79, 0x02, 0x3b, + 0x01, 0x5e, 0x02, 0x1b, 0x02, 0x4e, 0x47, 0xdc, 0xd4, 0xd2, 0x1c, 0x00, + 0x02, 0x0d, 0x00, 0x38, 0x45, 0xdd, 0xea, 0xd1, 0x1c, 0x00, 0xb4, 0x1e, + 0x0b, 0xbc, 0x22, 0x01, 0xff, 0x5e, 0x63, 0x12, 0xd5, 0x1c, 0x00, 0x53, + 0xe8, 0x0a, 0xd6, 0x1c, 0x00, 0x5b, 0x0c, 0x1c, 0xd7, 0x1c, 0xc0, 0x00, + 0x4a, 0x23, 0xa6, 0xd9, 0x1c, 0x40, 0x4f, 0x3d, 0x6e, 0xdf, 0x1c, 0x00, + 0x4d, 0xe6, 0x87, 0xdb, 0x1c, 0x00, 0x4d, 0x06, 0x0f, 0xde, 0x1c, 0x40, + 0x63, 0xd8, 0x0a, 0xe0, 0x1c, 0x00, 0x48, 0x61, 0xb0, 0xf8, 0x1c, 0x40, + 0x46, 0xb0, 0xdf, 0xd0, 0x1c, 0x00, 0x4e, 0xc3, 0x7c, 0xdc, 0x1c, 0x40, + 0x47, 0xa1, 0x12, 0xdd, 0x1c, 0x00, 0x05, 0x3d, 0x01, 0x01, 0xff, 0x4a, + 0x5f, 0xb0, 0xf9, 0x1c, 0x00, 0x47, 0xf4, 0x0a, 0xda, 0x1c, 0x40, 0x45, + 0x5c, 0x00, 0xf4, 0x1c, 0x00, 0x45, 0x20, 0x07, 0xd8, 0x1c, 0x40, 0xa1, + 0x72, 0x5c, 0x52, 0x17, 0xfa, 0x1c, 0x00, 0x56, 0x2f, 0x34, 0xee, 0x1c, + 0x00, 0x4b, 0xe6, 0x9d, 0xf5, 0x1c, 0x00, 0x4d, 0x38, 0x34, 0xef, 0x1c, + 0x00, 0x49, 0x7e, 0xbc, 0xd3, 0x1c, 0x00, 0xb2, 0x36, 0x46, 0xa0, 0xe0, + 0xed, 0x1c, 0x00, 0x4b, 0x6e, 0xa4, 0xf6, 0x1c, 0x00, 0x08, 0x0e, 0x63, + 0x06, 0x5a, 0xbc, 0x22, 0xd4, 0x1c, 0x40, 0x48, 0xc9, 0x7c, 0xe5, 0x1c, + 0x80, 0x13, 0x47, 0xf4, 0x0a, 0xe2, 0x1c, 0x00, 0x46, 0xcb, 0x7c, 0xe3, + 0x1c, 0xc0, 0x00, 0x4a, 0x9b, 0xa6, 0xe7, 0x1c, 0x40, 0x4a, 0x9b, 0xa6, + 0xe8, 0x1c, 0x40, 0x10, 0x06, 0x63, 0x0c, 0x53, 0xde, 0x4b, 0xf3, 0x1c, + 0x00, 0x53, 0x80, 0x4d, 0xf0, 0x1c, 0x40, 0x48, 0xc9, 0x7c, 0xe6, 0x1c, + 0x00, 0x46, 0xcb, 0x7c, 0xe4, 0x1c, 0x40, 0x08, 0x3d, 0x16, 0x0c, 0x4b, + 0xe6, 0x4b, 0xf2, 0x1c, 0x00, 0x47, 0x64, 0xd6, 0xf7, 0x1c, 0x40, 0x4c, + 0x62, 0x17, 0xe9, 0x1c, 0x00, 0x4c, 0x97, 0x8c, 0xea, 0x1c, 0x00, 0x4e, + 0xcd, 0x7d, 0xf1, 0x1c, 0x00, 0x4b, 0xb0, 0xa4, 0xeb, 0x1c, 0xc0, 0x00, + 0x4a, 0x9b, 0xa6, 0xec, 0x1c, 0x40, 0x02, 0xf1, 0x03, 0xb4, 0x08, 0x45, + 0xc6, 0xe8, 0xdb, 0xf9, 0x01, 0x11, 0x92, 0x5d, 0x01, 0xff, 0xd1, 0x00, + 0xfe, 0x80, 0xda, 0x04, 0xd2, 0x01, 0xfe, 0x80, 0xbf, 0x02, 0xd3, 0x02, + 0xfe, 0x80, 0x91, 0x02, 0xd4, 0x03, 0xfe, 0x80, 0xe3, 0x01, 0xd5, 0x04, + 0xfe, 0x80, 0xb5, 0x01, 0xd6, 0x05, 0xfe, 0x80, 0x87, 0x01, 0xd7, 0x06, + 0xfe, 0x80, 0x5a, 0xd8, 0x07, 0xfe, 0x80, 0x2d, 0xd9, 0x08, 0xfe, 0xc0, + 0x00, 0xd0, 0x49, 0x01, 0x0e, 0xd1, 0x4a, 0x01, 0x0e, 0xd2, 0x4b, 0x01, + 0x0e, 0xd3, 0x4c, 0x01, 0x0e, 0xd4, 0x4d, 0x01, 0x0e, 0xd5, 0x4e, 0x01, + 0x0e, 0xd6, 0x4f, 0x01, 0x0e, 0xd7, 0x50, 0x01, 0x0e, 0xd8, 0x51, 0x01, + 0x0e, 0xd9, 0x52, 0x01, 0x4e, 0xd0, 0x3f, 0x01, 0x0e, 0xd1, 0x40, 0x01, + 0x0e, 0xd2, 0x41, 0x01, 0x0e, 0xd3, 0x42, 0x01, 0x0e, 0xd4, 0x43, 0x01, + 0x0e, 0xd5, 0x44, 0x01, 0x0e, 0xd6, 0x45, 0x01, 0x0e, 0xd7, 0x46, 0x01, + 0x0e, 0xd8, 0x47, 0x01, 0x0e, 0xd9, 0x48, 0x01, 0x4e, 0xd0, 0x35, 0x01, + 0x0e, 0xd1, 0x36, 0x01, 0x0e, 0xd2, 0x37, 0x01, 0x0e, 0xd3, 0x38, 0x01, + 0x0e, 0xd4, 0x39, 0x01, 0x0e, 0xd5, 0x3a, 0x01, 0x0e, 0xd6, 0x3b, 0x01, + 0x0e, 0xd7, 0x3c, 0x01, 0x0e, 0xd8, 0x3d, 0x01, 0x0e, 0xd9, 0x3e, 0x01, + 0x4e, 0xd0, 0x2b, 0x01, 0x0e, 0xd1, 0x2c, 0x01, 0x0e, 0xd2, 0x2d, 0x01, + 0x0e, 0xd3, 0x2e, 0x01, 0x0e, 0xd4, 0x2f, 0x01, 0x0e, 0xd5, 0x30, 0x01, + 0x0e, 0xd6, 0x31, 0x01, 0x0e, 0xd7, 0x32, 0x01, 0x0e, 0xd8, 0x33, 0x01, + 0x0e, 0xd9, 0x34, 0x01, 0x4e, 0xd0, 0x21, 0x01, 0x0e, 0xd1, 0x22, 0x01, + 0x0e, 0xd2, 0x23, 0x01, 0x0e, 0xd3, 0x24, 0x01, 0x0e, 0xd4, 0x25, 0x01, + 0x0e, 0xd5, 0x26, 0x01, 0x0e, 0xd6, 0x27, 0x01, 0x0e, 0xd7, 0x28, 0x01, + 0x0e, 0xd8, 0x29, 0x01, 0x0e, 0xd9, 0x2a, 0x01, 0x4e, 0xd0, 0x17, 0x01, + 0x0e, 0xd1, 0x18, 0x01, 0x0e, 0xd2, 0x19, 0x01, 0x0e, 0xd3, 0x1a, 0x01, + 0x0e, 0xd4, 0x1b, 0x01, 0x0e, 0xd5, 0x1c, 0x01, 0x0e, 0xd6, 0x1d, 0x01, + 0x0e, 0xd7, 0x1e, 0x01, 0x0e, 0xd8, 0x1f, 0x01, 0x0e, 0xd9, 0x20, 0x01, + 0x4e, 0xd0, 0x0d, 0x01, 0x0e, 0xd1, 0x0e, 0x01, 0x0e, 0xd2, 0x0f, 0x01, + 0x0e, 0xd3, 0x10, 0x01, 0x0e, 0xd4, 0x11, 0x01, 0x0e, 0xd5, 0x12, 0x01, + 0x0e, 0xd6, 0x13, 0x01, 0x0e, 0xd7, 0x14, 0x01, 0x0e, 0xd8, 0x15, 0x01, + 0x0e, 0xd9, 0x16, 0x01, 0x4e, 0xd0, 0x03, 0x01, 0x8e, 0xe7, 0x01, 0xd1, + 0x04, 0x01, 0x8e, 0xb9, 0x01, 0xd2, 0x05, 0x01, 0x8e, 0x8b, 0x01, 0xd3, + 0x06, 0x01, 0x8e, 0x5e, 0xd4, 0x07, 0x01, 0x8e, 0x31, 0xd5, 0x08, 0x01, + 0x8e, 0x10, 0xd6, 0x09, 0x01, 0x0e, 0xd7, 0x0a, 0x01, 0x0e, 0xd8, 0x0b, + 0x01, 0x0e, 0xd9, 0x0c, 0x01, 0x4e, 0xd0, 0xe9, 0x01, 0x0e, 0xd1, 0xea, + 0x01, 0x0e, 0xd2, 0xeb, 0x01, 0x0e, 0xd3, 0xec, 0x01, 0x0e, 0xd4, 0xed, + 0x01, 0x0e, 0xd5, 0xee, 0x01, 0x0e, 0xd6, 0xef, 0x01, 0x4e, 0xd0, 0xdf, + 0x01, 0x0e, 0xd1, 0xe0, 0x01, 0x0e, 0xd2, 0xe1, 0x01, 0x0e, 0xd3, 0xe2, + 0x01, 0x0e, 0xd4, 0xe3, 0x01, 0x0e, 0xd5, 0xe4, 0x01, 0x0e, 0xd6, 0xe5, + 0x01, 0x0e, 0xd7, 0xe6, 0x01, 0x0e, 0xd8, 0xe7, 0x01, 0x0e, 0xd9, 0xe8, + 0x01, 0x4e, 0xd0, 0xd5, 0x01, 0x0e, 0xd1, 0xd6, 0x01, 0x0e, 0xd2, 0xd7, + 0x01, 0x0e, 0xd3, 0xd8, 0x01, 0x0e, 0xd4, 0xd9, 0x01, 0x0e, 0xd5, 0xda, + 0x01, 0x0e, 0xd6, 0xdb, 0x01, 0x0e, 0xd7, 0xdc, 0x01, 0x0e, 0xd8, 0xdd, + 0x01, 0x0e, 0xd9, 0xde, 0x01, 0x4e, 0xd0, 0xcb, 0x01, 0x0e, 0xd1, 0xcc, + 0x01, 0x0e, 0xd2, 0xcd, 0x01, 0x0e, 0xd3, 0xce, 0x01, 0x0e, 0xd4, 0xcf, + 0x01, 0x0e, 0xd5, 0xd0, 0x01, 0x0e, 0xd6, 0xd1, 0x01, 0x0e, 0xd7, 0xd2, + 0x01, 0x0e, 0xd8, 0xd3, 0x01, 0x0e, 0xd9, 0xd4, 0x01, 0x4e, 0xd0, 0xc1, + 0x01, 0x0e, 0xd1, 0xc2, 0x01, 0x0e, 0xd2, 0xc3, 0x01, 0x0e, 0xd3, 0xc4, + 0x01, 0x0e, 0xd4, 0xc5, 0x01, 0x0e, 0xd5, 0xc6, 0x01, 0x0e, 0xd6, 0xc7, + 0x01, 0x0e, 0xd7, 0xc8, 0x01, 0x0e, 0xd8, 0xc9, 0x01, 0x0e, 0xd9, 0xca, + 0x01, 0x4e, 0xd0, 0xb7, 0x01, 0x0e, 0xd1, 0xb8, 0x01, 0x0e, 0xd2, 0xb9, + 0x01, 0x0e, 0xd3, 0xba, 0x01, 0x0e, 0xd4, 0xbb, 0x01, 0x0e, 0xd5, 0xbc, + 0x01, 0x0e, 0xd6, 0xbd, 0x01, 0x0e, 0xd7, 0xbe, 0x01, 0x0e, 0xd8, 0xbf, + 0x01, 0x0e, 0xd9, 0xc0, 0x01, 0x4e, 0xd0, 0x09, 0xfe, 0x80, 0x9b, 0x03, + 0xd1, 0x0a, 0xfe, 0x80, 0xed, 0x02, 0xd2, 0x0b, 0xfe, 0x80, 0xbf, 0x02, + 0xd3, 0x0c, 0xfe, 0x80, 0x91, 0x02, 0xd4, 0x0d, 0xfe, 0x80, 0xe3, 0x01, + 0xd5, 0x0e, 0xfe, 0x80, 0xb5, 0x01, 0xd6, 0x0f, 0xfe, 0x80, 0x87, 0x01, + 0xd7, 0x00, 0x01, 0x8e, 0x5a, 0xd8, 0x01, 0x01, 0x8e, 0x2d, 0xd9, 0x02, + 0x01, 0xce, 0x00, 0xd0, 0xad, 0x01, 0x0e, 0xd1, 0xae, 0x01, 0x0e, 0xd2, + 0xaf, 0x01, 0x0e, 0xd3, 0xb0, 0x01, 0x0e, 0xd4, 0xb1, 0x01, 0x0e, 0xd5, + 0xb2, 0x01, 0x0e, 0xd6, 0xb3, 0x01, 0x0e, 0xd7, 0xb4, 0x01, 0x0e, 0xd8, + 0xb5, 0x01, 0x0e, 0xd9, 0xb6, 0x01, 0x4e, 0xd0, 0xa3, 0x01, 0x0e, 0xd1, + 0xa4, 0x01, 0x0e, 0xd2, 0xa5, 0x01, 0x0e, 0xd3, 0xa6, 0x01, 0x0e, 0xd4, + 0xa7, 0x01, 0x0e, 0xd5, 0xa8, 0x01, 0x0e, 0xd6, 0xa9, 0x01, 0x0e, 0xd7, + 0xaa, 0x01, 0x0e, 0xd8, 0xab, 0x01, 0x0e, 0xd9, 0xac, 0x01, 0x4e, 0xd0, + 0x99, 0x01, 0x0e, 0xd1, 0x9a, 0x01, 0x0e, 0xd2, 0x9b, 0x01, 0x0e, 0xd3, + 0x9c, 0x01, 0x0e, 0xd4, 0x9d, 0x01, 0x0e, 0xd5, 0x9e, 0x01, 0x0e, 0xd6, + 0x9f, 0x01, 0x0e, 0xd7, 0xa0, 0x01, 0x0e, 0xd8, 0xa1, 0x01, 0x0e, 0xd9, + 0xa2, 0x01, 0x4e, 0xd0, 0x8f, 0x01, 0x0e, 0xd1, 0x90, 0x01, 0x0e, 0xd2, + 0x91, 0x01, 0x0e, 0xd3, 0x92, 0x01, 0x0e, 0xd4, 0x93, 0x01, 0x0e, 0xd5, + 0x94, 0x01, 0x0e, 0xd6, 0x95, 0x01, 0x0e, 0xd7, 0x96, 0x01, 0x0e, 0xd8, + 0x97, 0x01, 0x0e, 0xd9, 0x98, 0x01, 0x4e, 0xd0, 0x85, 0x01, 0x0e, 0xd1, + 0x86, 0x01, 0x0e, 0xd2, 0x87, 0x01, 0x0e, 0xd3, 0x88, 0x01, 0x0e, 0xd4, + 0x89, 0x01, 0x0e, 0xd5, 0x8a, 0x01, 0x0e, 0xd6, 0x8b, 0x01, 0x0e, 0xd7, + 0x8c, 0x01, 0x0e, 0xd8, 0x8d, 0x01, 0x0e, 0xd9, 0x8e, 0x01, 0x4e, 0xd0, + 0x7b, 0x01, 0x0e, 0xd1, 0x7c, 0x01, 0x0e, 0xd2, 0x7d, 0x01, 0x0e, 0xd3, + 0x7e, 0x01, 0x0e, 0xd4, 0x7f, 0x01, 0x0e, 0xd5, 0x80, 0x01, 0x0e, 0xd6, + 0x81, 0x01, 0x0e, 0xd7, 0x82, 0x01, 0x0e, 0xd8, 0x83, 0x01, 0x0e, 0xd9, + 0x84, 0x01, 0x4e, 0xd0, 0x71, 0x01, 0x0e, 0xd1, 0x72, 0x01, 0x0e, 0xd2, + 0x73, 0x01, 0x0e, 0xd3, 0x74, 0x01, 0x0e, 0xd4, 0x75, 0x01, 0x0e, 0xd5, + 0x76, 0x01, 0x0e, 0xd6, 0x77, 0x01, 0x0e, 0xd7, 0x78, 0x01, 0x0e, 0xd8, + 0x79, 0x01, 0x0e, 0xd9, 0x7a, 0x01, 0x4e, 0xd0, 0x67, 0x01, 0x0e, 0xd1, + 0x68, 0x01, 0x0e, 0xd2, 0x69, 0x01, 0x0e, 0xd3, 0x6a, 0x01, 0x0e, 0xd4, + 0x6b, 0x01, 0x0e, 0xd5, 0x6c, 0x01, 0x0e, 0xd6, 0x6d, 0x01, 0x0e, 0xd7, + 0x6e, 0x01, 0x0e, 0xd8, 0x6f, 0x01, 0x0e, 0xd9, 0x70, 0x01, 0x4e, 0xd0, + 0x5d, 0x01, 0x0e, 0xd1, 0x5e, 0x01, 0x0e, 0xd2, 0x5f, 0x01, 0x0e, 0xd3, + 0x60, 0x01, 0x0e, 0xd4, 0x61, 0x01, 0x0e, 0xd5, 0x62, 0x01, 0x0e, 0xd6, + 0x63, 0x01, 0x0e, 0xd7, 0x64, 0x01, 0x0e, 0xd8, 0x65, 0x01, 0x0e, 0xd9, + 0x66, 0x01, 0x4e, 0xd0, 0x53, 0x01, 0x0e, 0xd1, 0x54, 0x01, 0x0e, 0xd2, + 0x55, 0x01, 0x0e, 0xd3, 0x56, 0x01, 0x0e, 0xd4, 0x57, 0x01, 0x0e, 0xd5, + 0x58, 0x01, 0x0e, 0xd6, 0x59, 0x01, 0x0e, 0xd7, 0x5a, 0x01, 0x0e, 0xd8, + 0x5b, 0x01, 0x0e, 0xd9, 0x5c, 0x01, 0x4e, 0x45, 0x13, 0x05, 0x0d, 0xa6, + 0x00, 0x06, 0xef, 0x06, 0x83, 0x0b, 0x49, 0x81, 0x16, 0x0e, 0xa6, 0x00, + 0x4d, 0xa6, 0x34, 0x0f, 0xa6, 0x00, 0x02, 0x16, 0x08, 0x01, 0xff, 0x07, + 0x1c, 0x18, 0x5f, 0x05, 0x61, 0x16, 0x01, 0xff, 0x44, 0x26, 0x16, 0x17, + 0xa6, 0x00, 0xa4, 0x3d, 0xa6, 0x2f, 0x44, 0x3b, 0xac, 0x1f, 0xa6, 0x00, + 0xab, 0x1b, 0x43, 0x76, 0xf4, 0x16, 0xa6, 0x00, 0xb4, 0x01, 0xff, 0x42, + 0x80, 0x12, 0x19, 0xa6, 0x00, 0x43, 0xa1, 0x01, 0x15, 0xa6, 0x00, 0x43, + 0xd8, 0x02, 0x1d, 0xa6, 0x40, 0x44, 0xb4, 0x9b, 0x14, 0xa6, 0x00, 0x43, + 0xaa, 0x45, 0x1c, 0xa6, 0x40, 0x42, 0x80, 0x12, 0x18, 0xa6, 0x00, 0x44, + 0xb4, 0x9b, 0x13, 0xa6, 0x40, 0x43, 0x1c, 0x01, 0x1a, 0xa6, 0x00, 0xaf, + 0x01, 0xff, 0x42, 0x4f, 0x21, 0x1e, 0xa6, 0x00, 0x43, 0xd8, 0x02, 0x1b, + 0xa6, 0x40, 0xe1, 0x49, 0xa5, 0x80, 0x85, 0x0a, 0xa2, 0xc4, 0x09, 0xa3, + 0xa3, 0x09, 0xa4, 0xc2, 0x08, 0xe5, 0xe1, 0xa5, 0x80, 0xaf, 0x08, 0xa6, + 0x8e, 0x08, 0xa7, 0xc1, 0x07, 0xa8, 0x89, 0x07, 0xe9, 0x24, 0xa5, 0x80, + 0xff, 0x06, 0xaa, 0xde, 0x06, 0xab, 0x8f, 0x06, 0xac, 0xe8, 0x05, 0xad, + 0x85, 0x05, 0xae, 0xa4, 0x03, 0xef, 0xba, 0xa5, 0x80, 0x91, 0x03, 0xb0, + 0xf0, 0x02, 0xb2, 0xcf, 0x02, 0xb3, 0x8e, 0x02, 0xb4, 0xcd, 0x01, 0xf5, + 0x95, 0xa5, 0x80, 0xc3, 0x01, 0xb6, 0xa2, 0x01, 0xb7, 0x61, 0xb9, 0x41, + 0xba, 0x01, 0xff, 0xe1, 0x64, 0xa5, 0x00, 0xe5, 0xfd, 0xa5, 0x80, 0x31, + 0xa8, 0x11, 0xe9, 0x3d, 0xa5, 0x00, 0xef, 0xd5, 0xa5, 0x80, 0x04, 0xf5, + 0xae, 0xa5, 0x40, 0xef, 0x89, 0xa5, 0x40, 0xe1, 0x65, 0xa5, 0x00, 0xe5, + 0xfe, 0xa5, 0x80, 0x11, 0xe9, 0x3e, 0xa5, 0x00, 0xef, 0xd6, 0xa5, 0x80, + 0x04, 0xf5, 0xaf, 0xa5, 0x40, 0xef, 0x8a, 0xa5, 0x40, 0xe5, 0x19, 0xa5, + 0x40, 0xe5, 0x18, 0xa5, 0x40, 0xe1, 0x69, 0xa5, 0x00, 0xe5, 0x02, 0xa6, + 0x80, 0x11, 0xe9, 0x42, 0xa5, 0x00, 0xef, 0xda, 0xa5, 0x80, 0x04, 0xf5, + 0xb3, 0xa5, 0x40, 0xef, 0x8e, 0xa5, 0x40, 0xe5, 0x1d, 0xa5, 0x40, 0xe1, + 0x4e, 0xa5, 0x80, 0x36, 0xe5, 0xe6, 0xa5, 0x80, 0x24, 0xe9, 0x28, 0xa5, + 0x80, 0x1b, 0xef, 0xbf, 0xa5, 0x80, 0x09, 0xf5, 0x99, 0xa5, 0xc0, 0x00, + 0xee, 0x9a, 0xa5, 0x40, 0xee, 0xc0, 0xa5, 0x00, 0xef, 0x74, 0xa5, 0xc0, + 0x00, 0xee, 0x75, 0xa5, 0x40, 0xee, 0x29, 0xa5, 0x40, 0xe5, 0x03, 0xa5, + 0x80, 0x04, 0xee, 0xe7, 0xa5, 0x40, 0xee, 0x04, 0xa5, 0x40, 0xee, 0x4f, + 0xa5, 0x40, 0xe1, 0x59, 0xa5, 0x00, 0xe5, 0xf2, 0xa5, 0x80, 0x11, 0xe9, + 0x32, 0xa5, 0x00, 0xef, 0xca, 0xa5, 0x80, 0x04, 0xf5, 0xa3, 0xa5, 0x40, + 0xef, 0x7e, 0xa5, 0x40, 0xe5, 0x0d, 0xa5, 0x40, 0xee, 0x96, 0xa5, 0x40, + 0xe1, 0x5a, 0xa5, 0x00, 0xe5, 0xf3, 0xa5, 0x80, 0x31, 0xa8, 0x11, 0xe9, + 0x33, 0xa5, 0x00, 0xef, 0xcb, 0xa5, 0x80, 0x04, 0xf5, 0xa4, 0xa5, 0x40, + 0xef, 0x7f, 0xa5, 0x40, 0xe1, 0x5b, 0xa5, 0x00, 0xe5, 0xf4, 0xa5, 0x80, + 0x11, 0xe9, 0x34, 0xa5, 0x00, 0xef, 0xcc, 0xa5, 0x80, 0x04, 0xf5, 0xa5, + 0xa5, 0x40, 0xef, 0x80, 0xa5, 0x40, 0xe5, 0x0f, 0xa5, 0x40, 0xe5, 0x0e, + 0xa5, 0x40, 0xe1, 0x62, 0xa5, 0x00, 0xe5, 0xfb, 0xa5, 0x80, 0x31, 0xa8, + 0x11, 0xe9, 0x3b, 0xa5, 0x00, 0xef, 0xd3, 0xa5, 0x80, 0x04, 0xf5, 0xac, + 0xa5, 0x40, 0xef, 0x87, 0xa5, 0x40, 0xe1, 0x63, 0xa5, 0x00, 0xe5, 0xfc, + 0xa5, 0x80, 0x11, 0xe9, 0x3c, 0xa5, 0x00, 0xef, 0xd4, 0xa5, 0x80, 0x04, + 0xf5, 0xad, 0xa5, 0x40, 0xef, 0x88, 0xa5, 0x40, 0xe5, 0x17, 0xa5, 0x40, + 0xe5, 0x16, 0xa5, 0x40, 0xe1, 0x5f, 0xa5, 0x00, 0xe5, 0xf8, 0xa5, 0x80, + 0x11, 0xe9, 0x38, 0xa5, 0x00, 0xef, 0xd0, 0xa5, 0x80, 0x04, 0xf5, 0xa9, + 0xa5, 0x40, 0xef, 0x84, 0xa5, 0x40, 0xe5, 0x13, 0xa5, 0x40, 0xe1, 0x50, + 0xa5, 0x00, 0xe5, 0xe8, 0xa5, 0x80, 0x11, 0xe9, 0x2a, 0xa5, 0x00, 0xef, + 0xc1, 0xa5, 0x80, 0x04, 0xf5, 0x9b, 0xa5, 0x40, 0xef, 0x76, 0xa5, 0x40, + 0xe5, 0x05, 0xa5, 0x40, 0xee, 0xbb, 0xa5, 0x00, 0xef, 0x71, 0xa5, 0xc0, + 0x00, 0xee, 0x72, 0xa5, 0x40, 0xe1, 0x6f, 0xa5, 0x00, 0xa4, 0x97, 0x01, + 0xe5, 0x09, 0xa6, 0x80, 0x8d, 0x01, 0xe7, 0x0b, 0xa6, 0x80, 0x52, 0xe9, + 0x47, 0xa5, 0x00, 0xaa, 0x2e, 0xef, 0xdf, 0xa5, 0x80, 0x25, 0xf5, 0xb8, + 0xa5, 0x00, 0xb9, 0x01, 0xff, 0xe1, 0x70, 0xa5, 0x00, 0xe5, 0x0a, 0xa6, + 0x80, 0x11, 0xe9, 0x48, 0xa5, 0x00, 0xef, 0xe0, 0xa5, 0x80, 0x04, 0xf5, + 0xb9, 0xa5, 0x40, 0xef, 0x94, 0xa5, 0x40, 0xe5, 0x23, 0xa5, 0x40, 0xef, + 0x93, 0xa5, 0x40, 0xe1, 0x68, 0xa5, 0x00, 0xe5, 0x01, 0xa6, 0x80, 0x11, + 0xe9, 0x41, 0xa5, 0x00, 0xef, 0xd9, 0xa5, 0x80, 0x04, 0xf5, 0xb2, 0xa5, + 0x40, 0xef, 0x8d, 0xa5, 0x40, 0xe5, 0x1c, 0xa5, 0x40, 0x42, 0x1a, 0x00, + 0x4b, 0xa5, 0x00, 0x42, 0x92, 0x01, 0xe3, 0xa5, 0x00, 0xa7, 0x06, 0x42, + 0x10, 0x00, 0xbc, 0xa5, 0x40, 0xe1, 0x6c, 0xa5, 0x00, 0xe5, 0x04, 0xa6, + 0x80, 0x11, 0xe9, 0x44, 0xa5, 0x00, 0xef, 0xdc, 0xa5, 0x80, 0x04, 0xf5, + 0xb5, 0xa5, 0x40, 0xef, 0x90, 0xa5, 0x40, 0xe5, 0x1f, 0xa5, 0x00, 0xee, + 0x05, 0xa6, 0x40, 0xe5, 0x22, 0xa5, 0x40, 0xe1, 0x61, 0xa5, 0x00, 0xe5, + 0xfa, 0xa5, 0x80, 0x33, 0xe9, 0x3a, 0xa5, 0x00, 0xef, 0xd2, 0xa5, 0x80, + 0x04, 0xf5, 0xab, 0xa5, 0x40, 0x03, 0x3f, 0x01, 0x04, 0xef, 0x86, 0xa5, + 0x40, 0x42, 0x3b, 0x01, 0x2b, 0xa6, 0x00, 0x42, 0x0c, 0x08, 0x10, 0xa6, + 0x00, 0x42, 0x1b, 0x02, 0x11, 0xa6, 0x00, 0x42, 0x6c, 0x00, 0x2a, 0xa6, + 0x00, 0x43, 0x41, 0xe3, 0x12, 0xa6, 0x40, 0xe5, 0x15, 0xa5, 0x40, 0xe1, + 0x6e, 0xa5, 0x00, 0xa2, 0x3c, 0xe5, 0x08, 0xa6, 0x80, 0x33, 0x02, 0x99, + 0x48, 0x11, 0xe9, 0x46, 0xa5, 0x00, 0xef, 0xde, 0xa5, 0x80, 0x04, 0xf5, + 0xb7, 0xa5, 0x40, 0xef, 0x92, 0xa5, 0x40, 0xe1, 0x56, 0xa5, 0x00, 0xe5, + 0xee, 0xa5, 0x80, 0x11, 0xe9, 0x2f, 0xa5, 0x00, 0xef, 0xc6, 0xa5, 0x80, + 0x04, 0xf5, 0xa0, 0xa5, 0x40, 0xef, 0x7b, 0xa5, 0x40, 0xe5, 0x0a, 0xa5, + 0x40, 0xe5, 0x21, 0xa5, 0x40, 0xe1, 0x53, 0xa5, 0x00, 0xe5, 0xeb, 0xa5, + 0x80, 0x11, 0xe9, 0x2d, 0xa5, 0x00, 0xef, 0xc4, 0xa5, 0x80, 0x04, 0xf5, + 0x9e, 0xa5, 0x40, 0xef, 0x79, 0xa5, 0x40, 0xe5, 0x08, 0xa5, 0x40, 0xe1, + 0x5e, 0xa5, 0x00, 0xe5, 0xf7, 0xa5, 0x80, 0x11, 0xe9, 0x37, 0xa5, 0x00, + 0xef, 0xcf, 0xa5, 0x80, 0x04, 0xf5, 0xa8, 0xa5, 0x40, 0xef, 0x83, 0xa5, + 0x40, 0xe5, 0x12, 0xa5, 0x00, 0x48, 0xd5, 0x56, 0x0c, 0xa6, 0x40, 0xe1, + 0x6a, 0xa5, 0x80, 0x43, 0xe5, 0x03, 0xa6, 0x80, 0x3a, 0xe9, 0x43, 0xa5, + 0x00, 0xef, 0xdb, 0xa5, 0x80, 0x2d, 0xb0, 0x04, 0xf5, 0xb4, 0xa5, 0x40, + 0xe1, 0x54, 0xa5, 0x80, 0x1e, 0xe5, 0xec, 0xa5, 0x80, 0x11, 0xe9, 0x2e, + 0xa5, 0x00, 0xef, 0xc5, 0xa5, 0x80, 0x04, 0xf5, 0x9f, 0xa5, 0x40, 0xef, + 0x7a, 0xa5, 0x40, 0xe5, 0x09, 0xa5, 0x00, 0xee, 0xed, 0xa5, 0x40, 0xee, + 0x55, 0xa5, 0x40, 0xef, 0x8f, 0xa5, 0x40, 0xe5, 0x1e, 0xa5, 0x40, 0xee, + 0x6b, 0xa5, 0x40, 0xe1, 0x67, 0xa5, 0x00, 0xe5, 0x00, 0xa6, 0x80, 0x11, + 0xe9, 0x40, 0xa5, 0x00, 0xef, 0xd8, 0xa5, 0x80, 0x04, 0xf5, 0xb1, 0xa5, + 0x40, 0xef, 0x8c, 0xa5, 0x40, 0xe5, 0x1b, 0xa5, 0x40, 0xee, 0x25, 0xa5, + 0x40, 0xe1, 0x4c, 0xa5, 0x80, 0x2c, 0xe5, 0xe4, 0xa5, 0x80, 0x1f, 0xe9, + 0x26, 0xa5, 0x80, 0x16, 0xef, 0xbd, 0xa5, 0x80, 0x09, 0xf5, 0x97, 0xa5, + 0xc0, 0x00, 0xee, 0x98, 0xa5, 0x40, 0xee, 0xbe, 0xa5, 0x00, 0xef, 0x73, + 0xa5, 0x40, 0xee, 0x27, 0xa5, 0x40, 0xe5, 0x02, 0xa5, 0x00, 0xee, 0xe5, + 0xa5, 0x40, 0xee, 0x4d, 0xa5, 0x40, 0xe1, 0x6d, 0xa5, 0x00, 0xa2, 0x1e, + 0xe5, 0x06, 0xa6, 0x80, 0x11, 0xe9, 0x45, 0xa5, 0x00, 0xef, 0xdd, 0xa5, + 0x80, 0x04, 0xf5, 0xb6, 0xa5, 0x40, 0xef, 0x91, 0xa5, 0x40, 0xe5, 0x20, + 0xa5, 0x00, 0xee, 0x07, 0xa6, 0x40, 0xe1, 0x57, 0xa5, 0x00, 0xe5, 0xef, + 0xa5, 0x80, 0x15, 0xe9, 0x30, 0xa5, 0x00, 0xef, 0xc7, 0xa5, 0x80, 0x04, + 0xf5, 0xa1, 0xa5, 0x40, 0xee, 0xc8, 0xa5, 0x00, 0xef, 0x7c, 0xa5, 0x40, + 0xe5, 0x0b, 0xa5, 0x00, 0xee, 0xf0, 0xa5, 0x40, 0xe1, 0x58, 0xa5, 0x00, + 0xe5, 0xf1, 0xa5, 0x80, 0x11, 0xe9, 0x31, 0xa5, 0x00, 0xef, 0xc9, 0xa5, + 0x80, 0x04, 0xf5, 0xa2, 0xa5, 0x40, 0xef, 0x7d, 0xa5, 0x40, 0xe5, 0x0c, + 0xa5, 0x40, 0xe5, 0x00, 0xa5, 0x80, 0x04, 0xee, 0xe2, 0xa5, 0x40, 0xee, + 0x01, 0xa5, 0x40, 0xe1, 0x60, 0xa5, 0x00, 0xe5, 0xf9, 0xa5, 0x80, 0x51, + 0xa8, 0x11, 0xe9, 0x39, 0xa5, 0x00, 0xef, 0xd1, 0xa5, 0x80, 0x04, 0xf5, + 0xaa, 0xa5, 0x40, 0xef, 0x85, 0xa5, 0x40, 0xe1, 0x5c, 0xa5, 0x00, 0xe5, + 0xf5, 0xa5, 0x80, 0x31, 0xa8, 0x11, 0xe9, 0x35, 0xa5, 0x00, 0xef, 0xcd, + 0xa5, 0x80, 0x04, 0xf5, 0xa6, 0xa5, 0x40, 0xef, 0x81, 0xa5, 0x40, 0xe1, + 0x5d, 0xa5, 0x00, 0xe5, 0xf6, 0xa5, 0x80, 0x11, 0xe9, 0x36, 0xa5, 0x00, + 0xef, 0xce, 0xa5, 0x80, 0x04, 0xf5, 0xa7, 0xa5, 0x40, 0xef, 0x82, 0xa5, + 0x40, 0xe5, 0x11, 0xa5, 0x40, 0xe5, 0x10, 0xa5, 0x40, 0xe5, 0x14, 0xa5, + 0x40, 0xe1, 0x66, 0xa5, 0x00, 0xe5, 0xff, 0xa5, 0x80, 0x11, 0xe9, 0x3f, + 0xa5, 0x00, 0xef, 0xd7, 0xa5, 0x80, 0x04, 0xf5, 0xb0, 0xa5, 0x40, 0xef, + 0x8b, 0xa5, 0x40, 0xe5, 0x1a, 0xa5, 0x40, 0xe1, 0x52, 0xa5, 0x00, 0xe5, + 0xea, 0xa5, 0x80, 0x31, 0xa8, 0x11, 0xe9, 0x2c, 0xa5, 0x00, 0xef, 0xc3, + 0xa5, 0x80, 0x04, 0xf5, 0x9d, 0xa5, 0x40, 0xef, 0x78, 0xa5, 0x40, 0xe1, + 0x51, 0xa5, 0x00, 0xe5, 0xe9, 0xa5, 0x80, 0x11, 0xe9, 0x2b, 0xa5, 0x00, + 0xef, 0xc2, 0xa5, 0x80, 0x04, 0xf5, 0x9c, 0xa5, 0x40, 0xef, 0x77, 0xa5, + 0x40, 0xe5, 0x06, 0xa5, 0x40, 0xe5, 0x07, 0xa5, 0x40, 0xee, 0x4a, 0xa5, + 0x40, 0x45, 0x12, 0x0b, 0x28, 0xa6, 0x00, 0xa6, 0x2e, 0x44, 0xcf, 0x2a, + 0x29, 0xa6, 0x00, 0x43, 0x0e, 0x0b, 0x21, 0xa6, 0x00, 0xb3, 0x14, 0xb4, + 0x06, 0x44, 0x43, 0x1e, 0x20, 0xa6, 0x40, 0x44, 0x25, 0x01, 0x23, 0xa6, + 0x00, 0x42, 0x15, 0x02, 0x22, 0xa6, 0x40, 0x44, 0xc9, 0x1d, 0x27, 0xa6, + 0x00, 0x42, 0x01, 0x26, 0x26, 0xa6, 0x40, 0x43, 0xd2, 0x05, 0x25, 0xa6, + 0x00, 0x43, 0xf6, 0x06, 0x24, 0xa6, 0x40, 0x08, 0x50, 0xc6, 0xd2, 0x0d, + 0x47, 0x5f, 0x61, 0x02, 0x26, 0x80, 0xbb, 0x0d, 0xae, 0xc5, 0x0c, 0xb0, + 0x06, 0x45, 0x01, 0xe1, 0x45, 0x26, 0x40, 0x80, 0xad, 0x0b, 0x8d, 0xb4, + 0x0a, 0x04, 0x6f, 0x02, 0xff, 0x03, 0x4e, 0x37, 0x7c, 0x43, 0xf6, 0x01, + 0x06, 0xa9, 0x01, 0x01, 0xff, 0xa1, 0xff, 0x02, 0x06, 0x0c, 0x03, 0xee, + 0x02, 0x50, 0x86, 0x61, 0x3d, 0xf8, 0x01, 0xa4, 0xd9, 0x02, 0x51, 0xfc, + 0x59, 0x35, 0xf8, 0x01, 0xa8, 0xfa, 0x01, 0x4d, 0x64, 0x87, 0xc8, 0x21, + 0x00, 0x4f, 0x0c, 0x72, 0xf0, 0x27, 0x00, 0x46, 0xa4, 0xdf, 0x6d, 0xf6, + 0x01, 0xb3, 0xd9, 0x01, 0xb4, 0x47, 0x06, 0xad, 0x02, 0x01, 0xff, 0x45, + 0xce, 0x00, 0xe7, 0x21, 0x80, 0x0d, 0x4c, 0x2f, 0x8e, 0xee, 0x21, 0xc0, + 0x00, 0x4c, 0x53, 0x8b, 0xef, 0x21, 0x40, 0x80, 0x01, 0xff, 0x48, 0x57, + 0xb4, 0xea, 0x21, 0x80, 0x1e, 0x4b, 0x54, 0x8b, 0xeb, 0x21, 0x80, 0x06, + 0x59, 0xc7, 0x1e, 0x95, 0xf8, 0x41, 0x06, 0x50, 0x00, 0x01, 0xff, 0x4e, + 0x0b, 0x00, 0xec, 0x21, 0x00, 0x4c, 0x32, 0x00, 0xed, 0x21, 0x40, 0x54, + 0xec, 0x3f, 0xb8, 0x2b, 0x40, 0x02, 0x0d, 0x00, 0x1c, 0x02, 0x15, 0x02, + 0x01, 0xff, 0x4d, 0x85, 0x7f, 0x9f, 0x21, 0x00, 0x0e, 0x1b, 0x06, 0x01, + 0xff, 0x51, 0x2f, 0x5a, 0x49, 0x29, 0x00, 0x58, 0x29, 0x06, 0xed, 0x2b, + 0x40, 0x05, 0x04, 0x02, 0x06, 0x49, 0x12, 0x72, 0x0a, 0x29, 0x40, 0x4a, + 0xe0, 0x01, 0x91, 0xf8, 0x01, 0x08, 0x09, 0x02, 0x01, 0xff, 0x45, 0xce, + 0x00, 0x61, 0x2b, 0x80, 0x0c, 0x4c, 0xc3, 0x8d, 0x6b, 0x2b, 0x00, 0x4d, + 0x64, 0x87, 0x85, 0x2b, 0x40, 0x80, 0x01, 0xff, 0x6c, 0xea, 0x01, 0x81, + 0x2b, 0x00, 0x46, 0xd1, 0x14, 0x71, 0x2b, 0x00, 0x05, 0x51, 0x00, 0x01, + 0xff, 0x4a, 0x53, 0xa8, 0x29, 0xf8, 0x01, 0x58, 0x26, 0x28, 0x7b, 0x2b, + 0x00, 0x4b, 0x6b, 0x68, 0x2d, 0xf8, 0x01, 0x09, 0xaf, 0xbb, 0x12, 0x4c, + 0xef, 0x91, 0x25, 0xf8, 0x01, 0x4c, 0x5b, 0x92, 0x21, 0xf8, 0x01, 0x50, + 0x66, 0x68, 0x31, 0xf8, 0x41, 0x49, 0xea, 0x01, 0xa2, 0x2b, 0x00, 0x4a, + 0xb3, 0x02, 0xa3, 0x2b, 0x40, 0x4f, 0xe7, 0x66, 0x51, 0xf8, 0x01, 0x4c, + 0xe7, 0x93, 0x39, 0xf8, 0x41, 0x11, 0x91, 0x05, 0x11, 0x05, 0x6e, 0x15, + 0x01, 0xff, 0x45, 0xce, 0x00, 0x45, 0xf8, 0x01, 0x50, 0x86, 0x61, 0x41, + 0xf8, 0x41, 0x04, 0xc3, 0x00, 0x19, 0x05, 0xc8, 0x00, 0x01, 0xff, 0x80, + 0x06, 0x45, 0xa9, 0x01, 0xbe, 0x21, 0x40, 0x48, 0x57, 0xb4, 0x5c, 0x29, + 0x00, 0x46, 0xd1, 0x14, 0x54, 0x29, 0x40, 0x80, 0x06, 0x45, 0xa9, 0x01, + 0xbf, 0x21, 0x40, 0x07, 0x92, 0x0a, 0x0c, 0x48, 0x57, 0xb4, 0x60, 0x29, + 0x00, 0x46, 0xd1, 0x14, 0x58, 0x29, 0x40, 0x61, 0xc9, 0x0d, 0x6e, 0x29, + 0x00, 0x5f, 0x08, 0x12, 0x63, 0x29, 0x40, 0x4b, 0xc4, 0x8d, 0xe1, 0x21, + 0x00, 0x4b, 0x30, 0x8e, 0xd1, 0x21, 0x40, 0x45, 0xce, 0x00, 0x06, 0x2b, + 0x00, 0x53, 0xd3, 0x48, 0x89, 0x2b, 0x40, 0x45, 0xf8, 0xe8, 0x15, 0x2e, + 0x00, 0x44, 0xcf, 0x00, 0x91, 0x21, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x5a, + 0x2e, 0x1f, 0xb8, 0xfb, 0x01, 0x48, 0x57, 0xb4, 0xa5, 0x21, 0x00, 0x5c, + 0x4e, 0x18, 0xc5, 0x21, 0x00, 0x46, 0xd1, 0x14, 0x12, 0x29, 0x00, 0x05, + 0x51, 0x00, 0x01, 0xff, 0x4d, 0x36, 0x82, 0xde, 0x21, 0x00, 0x55, 0xd5, + 0x01, 0x15, 0xf8, 0x01, 0x51, 0x47, 0x05, 0x09, 0x29, 0x00, 0x58, 0x76, + 0x29, 0x09, 0xf8, 0x01, 0x59, 0xe3, 0x24, 0x05, 0xf8, 0x01, 0x4c, 0xd3, + 0x92, 0x99, 0xf8, 0x01, 0x06, 0x5d, 0x07, 0x11, 0x04, 0x49, 0x0c, 0x01, + 0xff, 0x49, 0xea, 0x01, 0xb0, 0x21, 0x00, 0x4a, 0xb3, 0x02, 0xb1, 0x21, + 0x40, 0x55, 0xd5, 0x01, 0x11, 0xf8, 0x01, 0x52, 0x2e, 0x06, 0x01, 0xf8, + 0x41, 0x04, 0x1a, 0x00, 0x8c, 0x06, 0x4e, 0x41, 0x76, 0x01, 0x27, 0x00, + 0x07, 0x73, 0x02, 0xda, 0x05, 0x52, 0xa9, 0x51, 0x84, 0xfb, 0x01, 0x05, + 0x22, 0x00, 0x8e, 0x05, 0x05, 0xc3, 0x00, 0x8c, 0x03, 0x07, 0x7d, 0x02, + 0xd6, 0x02, 0x04, 0x0e, 0x0b, 0xc5, 0x02, 0x06, 0xc8, 0x00, 0x30, 0x53, + 0xfb, 0x4c, 0x86, 0xfb, 0x01, 0xb4, 0x01, 0xff, 0x05, 0x25, 0x01, 0x06, + 0x5b, 0x35, 0x1d, 0x6d, 0xfb, 0x41, 0x4d, 0x01, 0x4d, 0x83, 0xfb, 0x01, + 0x09, 0x2a, 0x01, 0x01, 0xff, 0x45, 0x33, 0x01, 0x85, 0xfb, 0x01, 0x56, + 0x37, 0x35, 0xa6, 0xce, 0x01, 0x57, 0xdc, 0x30, 0xad, 0xce, 0x41, 0x0f, + 0x6d, 0x6b, 0xac, 0x01, 0x5a, 0xe4, 0x1f, 0x50, 0x27, 0x00, 0xaf, 0x97, + 0x01, 0x46, 0x14, 0xdf, 0x10, 0x27, 0x00, 0x03, 0x7c, 0x00, 0x2f, 0x0f, + 0xa4, 0x02, 0x1f, 0xb4, 0x01, 0xff, 0x51, 0xbe, 0x55, 0x99, 0xfb, 0x01, + 0x05, 0x1a, 0x01, 0x06, 0x4d, 0x88, 0x7d, 0x33, 0xcc, 0x41, 0x42, 0x68, + 0x00, 0xf9, 0x25, 0x00, 0x51, 0xa2, 0x5e, 0x9d, 0xfb, 0x41, 0x46, 0x12, + 0x03, 0x3f, 0xf5, 0x01, 0x46, 0xd6, 0x05, 0x52, 0x27, 0x40, 0x06, 0x7c, + 0x0d, 0x06, 0x4b, 0x90, 0x4c, 0x36, 0xcc, 0x41, 0xa3, 0x22, 0x0a, 0x0c, + 0x08, 0x12, 0x4d, 0xeb, 0x85, 0xb7, 0xcc, 0x01, 0x4f, 0x56, 0x73, 0xd3, + 0xcc, 0x01, 0x4a, 0xa9, 0xb1, 0xb3, 0xcc, 0x41, 0x4b, 0x93, 0x23, 0xa9, + 0xcc, 0x01, 0x49, 0x5f, 0xbd, 0xa7, 0xcc, 0x41, 0x05, 0x4b, 0x88, 0x06, + 0x4b, 0xaf, 0x9d, 0xdd, 0x25, 0x40, 0x46, 0x2e, 0xda, 0xc7, 0xcc, 0x01, + 0xab, 0x12, 0x44, 0xfd, 0xf1, 0xcf, 0xcc, 0x01, 0x45, 0x52, 0xbe, 0xbf, + 0xcc, 0x01, 0x44, 0x5d, 0xf2, 0xc3, 0xcc, 0x41, 0x43, 0xa1, 0x01, 0xbb, + 0xcc, 0x01, 0x45, 0x4e, 0x09, 0xcb, 0xcc, 0x41, 0x52, 0xfd, 0x25, 0x93, + 0xce, 0x01, 0x62, 0x00, 0x0d, 0xb1, 0x23, 0x40, 0x1b, 0x78, 0x1c, 0x50, + 0x06, 0x6d, 0x02, 0x01, 0xff, 0x0a, 0x73, 0x02, 0x31, 0x08, 0x84, 0x02, + 0x17, 0x15, 0x7d, 0x02, 0x01, 0xff, 0x46, 0x73, 0x02, 0x54, 0xfb, 0x01, + 0x4c, 0x58, 0x0f, 0x67, 0xfb, 0x01, 0x45, 0xc8, 0x00, 0x55, 0xfb, 0x41, + 0x06, 0x13, 0x01, 0x06, 0x52, 0x3b, 0x56, 0x63, 0xfb, 0x41, 0x46, 0x73, + 0x02, 0x56, 0xfb, 0x01, 0x4c, 0x58, 0x0f, 0x65, 0xfb, 0x41, 0x06, 0x13, + 0x01, 0x06, 0x52, 0x3b, 0x56, 0x62, 0xfb, 0x41, 0x4c, 0x58, 0x0f, 0x64, + 0xfb, 0x01, 0x45, 0xc8, 0x00, 0x66, 0xfb, 0x41, 0x46, 0x73, 0x02, 0x52, + 0xfb, 0x01, 0x45, 0xc8, 0x00, 0x53, 0xfb, 0x41, 0x4c, 0x12, 0x0b, 0x94, + 0x25, 0x00, 0x4d, 0x43, 0x1d, 0x82, 0xfb, 0x41, 0x07, 0x73, 0x02, 0x21, + 0x05, 0xc3, 0x00, 0x11, 0x06, 0xc8, 0x00, 0x01, 0xff, 0x53, 0xfc, 0x25, + 0x97, 0xce, 0x01, 0x4e, 0x87, 0x7d, 0x37, 0xcc, 0x41, 0x53, 0xfc, 0x25, + 0x94, 0xce, 0x01, 0x4e, 0x87, 0x7d, 0x34, 0xcc, 0x41, 0x58, 0xa6, 0x29, + 0x95, 0xce, 0x01, 0x59, 0xf6, 0x25, 0x96, 0xce, 0x41, 0x0f, 0x6d, 0x6b, + 0x96, 0x01, 0x4f, 0xd6, 0x6b, 0xd4, 0x27, 0x00, 0xaf, 0x81, 0x01, 0x03, + 0x7c, 0x00, 0x1f, 0xb4, 0x01, 0xff, 0x52, 0xa7, 0x4d, 0x98, 0xfb, 0x01, + 0x05, 0x1a, 0x01, 0x06, 0x4d, 0x88, 0x7d, 0x30, 0xcc, 0x41, 0x42, 0x68, + 0x00, 0xf8, 0x25, 0x00, 0x51, 0xa2, 0x5e, 0x9c, 0xfb, 0x41, 0x06, 0x7c, + 0x0d, 0x06, 0x4b, 0x90, 0x4c, 0x35, 0xcc, 0x41, 0xa3, 0x22, 0x0a, 0x0c, + 0x08, 0x12, 0x4d, 0xeb, 0x85, 0xb6, 0xcc, 0x01, 0x4f, 0x56, 0x73, 0xd2, + 0xcc, 0x01, 0x4a, 0xa9, 0xb1, 0xb2, 0xcc, 0x41, 0x4b, 0x93, 0x23, 0xa8, + 0xcc, 0x01, 0x49, 0x5f, 0xbd, 0xa6, 0xcc, 0x41, 0x05, 0x4b, 0x88, 0x06, + 0x4b, 0xaf, 0x9d, 0xdc, 0x25, 0x40, 0x46, 0x2e, 0xda, 0xc6, 0xcc, 0x01, + 0xab, 0x12, 0x44, 0xfd, 0xf1, 0xce, 0xcc, 0x01, 0x45, 0x52, 0xbe, 0xbe, + 0xcc, 0x01, 0x44, 0x5d, 0xf2, 0xc2, 0xcc, 0x41, 0x43, 0xa1, 0x01, 0xba, + 0xcc, 0x01, 0x45, 0x4e, 0x09, 0xca, 0xcc, 0x41, 0x52, 0xfd, 0x25, 0x90, + 0xce, 0x01, 0x63, 0x64, 0x0b, 0xb0, 0x23, 0x40, 0x06, 0x13, 0x01, 0x11, + 0x1b, 0xf2, 0x1d, 0x01, 0xff, 0x46, 0x73, 0x02, 0x57, 0xfb, 0x01, 0x45, + 0xc8, 0x00, 0x58, 0xfb, 0x41, 0x0a, 0x73, 0x02, 0x32, 0x08, 0x84, 0x02, + 0x17, 0x15, 0xf8, 0x1d, 0x01, 0xff, 0x46, 0x73, 0x02, 0x59, 0xfb, 0x01, + 0x4c, 0x58, 0x0f, 0x5c, 0xfb, 0x01, 0x45, 0xc8, 0x00, 0x5a, 0xfb, 0x41, + 0x52, 0x8f, 0x53, 0x5e, 0xfb, 0x01, 0x06, 0x6d, 0x02, 0x01, 0xff, 0x46, + 0x73, 0x02, 0x5b, 0xfb, 0x01, 0x4c, 0x58, 0x0f, 0x60, 0xfb, 0x41, 0x52, + 0x8f, 0x53, 0x5d, 0xfb, 0x01, 0x06, 0x6d, 0x02, 0x01, 0xff, 0x4c, 0x58, + 0x0f, 0x5f, 0xfb, 0x01, 0x45, 0xc8, 0x00, 0x61, 0xfb, 0x41, 0x45, 0x33, + 0x01, 0x80, 0x25, 0x80, 0x34, 0x46, 0x12, 0x03, 0xe0, 0x25, 0x00, 0x52, + 0x27, 0x52, 0x03, 0xce, 0x01, 0x08, 0x3c, 0x04, 0x18, 0x56, 0x37, 0x35, + 0xa7, 0xce, 0x01, 0x4c, 0x44, 0x04, 0x8e, 0xfb, 0x01, 0x57, 0xdc, 0x30, + 0xac, 0xce, 0x01, 0x63, 0xcd, 0x0b, 0x14, 0xce, 0x41, 0x61, 0x4d, 0x0e, + 0x92, 0xfb, 0x01, 0x4c, 0x32, 0x11, 0xda, 0x25, 0x40, 0x64, 0x9b, 0x08, + 0x91, 0xfb, 0x41, 0x05, 0xc3, 0x00, 0x17, 0x51, 0x3f, 0x1d, 0xe4, 0xfb, + 0x01, 0x06, 0xc8, 0x00, 0x01, 0xff, 0x53, 0xfc, 0x25, 0x92, 0xce, 0x01, + 0x4e, 0x87, 0x7d, 0x32, 0xcc, 0x41, 0x53, 0xfc, 0x25, 0x91, 0xce, 0x01, + 0x4e, 0x87, 0x7d, 0x31, 0xcc, 0x41, 0xac, 0x06, 0x6f, 0x09, 0x01, 0x68, + 0xfb, 0x41, 0x6d, 0x65, 0x01, 0x6a, 0xfb, 0x01, 0x05, 0x14, 0x01, 0x01, + 0xff, 0x50, 0x0e, 0x0b, 0x80, 0xfb, 0x01, 0x55, 0xa2, 0x3e, 0x9a, 0xfb, + 0x41, 0x17, 0x6f, 0x2e, 0x66, 0x09, 0x9c, 0x01, 0x01, 0xff, 0xa1, 0x53, + 0x4b, 0xaa, 0x9b, 0x79, 0xcc, 0x01, 0x44, 0xd5, 0xef, 0xfb, 0xcd, 0x01, + 0x47, 0x55, 0xd1, 0x00, 0xcc, 0x01, 0x51, 0x4f, 0x5c, 0xe6, 0xf6, 0x01, + 0xb2, 0x21, 0x06, 0x5d, 0x07, 0x11, 0x0e, 0x6b, 0x7d, 0x01, 0xff, 0x4f, + 0x78, 0x6f, 0xed, 0x25, 0x00, 0x50, 0xb6, 0x66, 0xee, 0x25, 0x40, 0x48, + 0x11, 0x34, 0xe8, 0xf6, 0x01, 0x4c, 0xee, 0x5b, 0x3c, 0xf5, 0x41, 0x49, + 0x9a, 0xb5, 0x98, 0xcc, 0x01, 0x4b, 0x90, 0x06, 0x3a, 0xf5, 0x01, 0x44, + 0xc5, 0xac, 0x66, 0xcc, 0x01, 0x4a, 0x9d, 0xae, 0x57, 0xcc, 0x41, 0x47, + 0x12, 0x34, 0xe7, 0xf6, 0x01, 0x4a, 0x03, 0xb2, 0x61, 0xcc, 0x41, 0x4c, + 0x7b, 0x8d, 0x75, 0xcc, 0x01, 0x4a, 0x3c, 0x29, 0x71, 0xcc, 0x41, 0x05, + 0xce, 0x00, 0x6d, 0x05, 0x9d, 0x05, 0x48, 0x05, 0x9e, 0x14, 0x19, 0x49, + 0xfa, 0xb8, 0x7e, 0x29, 0x00, 0x57, 0xae, 0x30, 0xf0, 0x22, 0x00, 0x44, + 0xf5, 0x38, 0xa5, 0x22, 0xc0, 0x00, 0x52, 0x9f, 0x4f, 0xdf, 0x27, 0x40, + 0x45, 0xce, 0x00, 0x95, 0x21, 0x80, 0x1e, 0x4b, 0xa5, 0x99, 0x0d, 0x2b, + 0x00, 0x4c, 0x2f, 0x8e, 0xd5, 0x21, 0x00, 0x50, 0xe6, 0x66, 0x59, 0xf8, + 0x01, 0x55, 0x01, 0x02, 0x65, 0x2b, 0x00, 0x4b, 0x49, 0x10, 0xf3, 0x21, + 0x40, 0x4a, 0x4b, 0xa6, 0xa8, 0x21, 0x40, 0x0f, 0x5a, 0x6f, 0x11, 0x10, + 0x96, 0x66, 0x01, 0xff, 0x4c, 0xff, 0x90, 0x4c, 0x29, 0x00, 0x4d, 0xcc, + 0x87, 0x4f, 0x29, 0x40, 0x4c, 0xff, 0x90, 0x51, 0x29, 0x00, 0x4d, 0xcc, + 0x87, 0x4d, 0x29, 0x40, 0x4f, 0xab, 0x69, 0xbd, 0x29, 0x00, 0x44, 0xe6, + 0x01, 0x03, 0x23, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x5b, 0x5c, 0x1a, 0x24, + 0x23, 0x00, 0x52, 0x7e, 0x47, 0xb9, 0x2b, 0x40, 0x4b, 0x0b, 0x99, 0x12, + 0xf6, 0x01, 0x4e, 0x6b, 0x76, 0xd1, 0x2b, 0x00, 0xa4, 0x59, 0xa9, 0x06, + 0x5a, 0x02, 0x21, 0xaf, 0x26, 0x40, 0x49, 0x65, 0xb7, 0x84, 0xf9, 0x01, + 0x42, 0x10, 0x00, 0x2a, 0x22, 0x80, 0x14, 0xb4, 0x06, 0x57, 0x17, 0x25, + 0x72, 0x26, 0x40, 0x4a, 0xd7, 0x20, 0x1f, 0x00, 0x00, 0x49, 0x2f, 0x77, + 0xfa, 0x2b, 0x40, 0x80, 0x01, 0xff, 0x06, 0x5c, 0x00, 0x1d, 0x5c, 0x36, + 0x17, 0x4a, 0x2a, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x4a, 0x35, 0xad, + 0x45, 0x2a, 0x00, 0x4a, 0x67, 0x98, 0x41, 0x2a, 0x00, 0x47, 0xe6, 0x7f, + 0x42, 0x2a, 0x40, 0x56, 0xfb, 0x32, 0x48, 0x2a, 0x00, 0x4c, 0xa9, 0x0a, + 0x46, 0x2a, 0x40, 0x45, 0x1b, 0xcc, 0x3f, 0x20, 0x00, 0x48, 0x43, 0xb0, + 0x8c, 0x23, 0x40, 0x80, 0x01, 0xff, 0x49, 0x0e, 0xbd, 0xf1, 0x26, 0x00, + 0x4f, 0xdc, 0x74, 0x14, 0x26, 0x40, 0x07, 0xec, 0x05, 0x06, 0x4c, 0x3b, + 0x25, 0x9f, 0x03, 0x41, 0xa1, 0xb3, 0x01, 0x44, 0x9a, 0x99, 0x81, 0x03, + 0x01, 0xa4, 0x9e, 0x01, 0xa7, 0x8f, 0x01, 0x42, 0x0b, 0x00, 0x85, 0x03, + 0x81, 0x81, 0x01, 0xe9, 0x9b, 0x03, 0x01, 0xab, 0x6f, 0x45, 0x17, 0xe8, + 0x8d, 0x03, 0x01, 0x43, 0xb4, 0x05, 0x8e, 0x03, 0x01, 0x43, 0xdc, 0x22, + 0x90, 0x03, 0x01, 0x42, 0x07, 0x0c, 0x94, 0x03, 0x01, 0x44, 0x35, 0xf2, + 0x96, 0x03, 0x01, 0x45, 0x33, 0xea, 0x97, 0x03, 0x01, 0xb3, 0x2f, 0xb4, + 0x1d, 0xf5, 0x9c, 0x03, 0x01, 0x42, 0x15, 0x02, 0x86, 0x03, 0x01, 0x43, + 0xa1, 0x52, 0x8a, 0x03, 0x01, 0xba, 0x01, 0xff, 0x43, 0x94, 0x0f, 0x87, + 0x03, 0x01, 0xf5, 0x91, 0x03, 0x41, 0x42, 0xed, 0x05, 0x89, 0x03, 0x01, + 0x45, 0xe1, 0xe6, 0x98, 0x03, 0x01, 0xef, 0x9a, 0x03, 0x41, 0xa1, 0x0c, + 0x43, 0x7a, 0x16, 0x8c, 0x03, 0x01, 0x42, 0x6f, 0x00, 0x9d, 0x03, 0x41, + 0x42, 0x04, 0x00, 0x95, 0x03, 0x01, 0x43, 0x22, 0x53, 0x92, 0x03, 0x41, + 0x42, 0x44, 0x14, 0x8b, 0x03, 0x01, 0x42, 0x22, 0x00, 0x83, 0x03, 0x41, + 0x42, 0x12, 0x00, 0x88, 0x03, 0x41, 0x44, 0xfd, 0xee, 0x82, 0x03, 0x01, + 0x44, 0x66, 0x9c, 0x99, 0x03, 0x41, 0x44, 0x38, 0xd6, 0x84, 0x03, 0x01, + 0x43, 0x22, 0x00, 0x8f, 0x03, 0x41, 0x42, 0x9e, 0x01, 0x93, 0x03, 0x01, + 0x43, 0xf4, 0x7a, 0x80, 0x03, 0x41, 0x8d, 0xf5, 0x7b, 0xa1, 0xa4, 0x3b, + 0xa5, 0xb9, 0x30, 0xa8, 0xa0, 0x26, 0xa9, 0x83, 0x13, 0xaf, 0xd7, 0x09, + 0xb2, 0xd4, 0x06, 0xb5, 0x88, 0x01, 0xb7, 0x01, 0xff, 0x57, 0xe7, 0x2b, + 0x39, 0x27, 0x00, 0x57, 0x3e, 0x2f, 0x00, 0xf5, 0x01, 0xaf, 0x01, 0xff, + 0x80, 0x06, 0x48, 0xc0, 0xc2, 0x3a, 0x2e, 0x40, 0x5c, 0x1a, 0x17, 0x51, + 0x20, 0x00, 0x4c, 0x03, 0x8d, 0xb0, 0xf5, 0x01, 0x58, 0xc6, 0x27, 0x75, + 0x2a, 0x00, 0x03, 0x23, 0x0a, 0x44, 0x46, 0xcf, 0x86, 0x95, 0xf4, 0x01, + 0x15, 0x02, 0x3c, 0x2e, 0x4e, 0x27, 0x79, 0xc9, 0x29, 0x00, 0x08, 0x2b, + 0x22, 0x18, 0x51, 0xfe, 0x4e, 0x6c, 0xf4, 0x01, 0x5a, 0xec, 0x21, 0x88, + 0xcc, 0x01, 0x4e, 0x6f, 0x7c, 0xea, 0xf5, 0x01, 0x53, 0xfc, 0x4e, 0x6d, + 0xf4, 0x41, 0x4c, 0x43, 0x8c, 0x07, 0x2a, 0x00, 0x4b, 0xdd, 0xa0, 0x08, + 0x2a, 0x40, 0x43, 0x1a, 0x00, 0x55, 0x2a, 0x00, 0x42, 0x0c, 0x00, 0x56, + 0x2a, 0x40, 0x80, 0x06, 0x5a, 0xf8, 0x0b, 0x2a, 0x2e, 0x40, 0x46, 0x9d, + 0x7d, 0x25, 0x20, 0x00, 0x4b, 0x07, 0x0c, 0x5a, 0x20, 0x40, 0x49, 0x42, + 0xb9, 0xae, 0x20, 0x00, 0xac, 0xc4, 0x01, 0x4b, 0x51, 0x9f, 0x43, 0xf9, + 0x01, 0xb2, 0x01, 0xff, 0xab, 0xac, 0x01, 0x04, 0x73, 0x07, 0x06, 0x43, + 0xbd, 0x01, 0x22, 0xf4, 0x41, 0xa1, 0x93, 0x01, 0x06, 0x0c, 0x03, 0x82, + 0x01, 0xa3, 0x74, 0xa4, 0x5b, 0x57, 0x86, 0x2e, 0x29, 0x21, 0x00, 0x02, + 0xb4, 0x01, 0x3b, 0x4c, 0x1b, 0x93, 0x8f, 0xf5, 0x01, 0xb3, 0x06, 0x51, + 0x7f, 0x5f, 0xc9, 0x26, 0x40, 0x12, 0x02, 0x48, 0x1d, 0x48, 0xda, 0x59, + 0x35, 0x2e, 0x00, 0x46, 0xf4, 0xdd, 0x4e, 0x21, 0x00, 0x05, 0xa2, 0x20, + 0x01, 0xff, 0x52, 0x2b, 0x51, 0x57, 0xf6, 0x01, 0x52, 0x83, 0x56, 0x55, + 0xf6, 0x41, 0xe7, 0x41, 0x21, 0x00, 0xec, 0x42, 0x21, 0x00, 0xf9, 0x44, + 0x21, 0x40, 0x04, 0xb6, 0x01, 0x06, 0x46, 0x45, 0x33, 0x19, 0x23, 0x40, + 0x52, 0x2b, 0x51, 0x56, 0xf6, 0x01, 0x52, 0x83, 0x56, 0x54, 0xf6, 0x41, + 0x45, 0xd7, 0xda, 0x38, 0x2e, 0x00, 0x06, 0xf3, 0x15, 0x01, 0xff, 0x44, + 0x25, 0x01, 0x8b, 0x21, 0x00, 0x42, 0x15, 0x02, 0x8a, 0x21, 0x40, 0x48, + 0x68, 0xc3, 0x32, 0x21, 0x00, 0x44, 0x14, 0x05, 0x32, 0x2e, 0x40, 0x48, + 0xe0, 0xc9, 0xc2, 0x2b, 0x00, 0x4b, 0x85, 0x5f, 0xca, 0x26, 0x40, 0x48, + 0x13, 0x3e, 0x4b, 0x21, 0x00, 0x44, 0x05, 0x02, 0xa2, 0x29, 0x40, 0x42, + 0xc6, 0x1c, 0x83, 0xf9, 0x01, 0x4d, 0x7f, 0x84, 0xba, 0x20, 0x40, 0x42, + 0xba, 0x04, 0x37, 0xf3, 0x01, 0x0b, 0x0b, 0xa4, 0x01, 0xff, 0x4e, 0x17, + 0x76, 0xc9, 0x13, 0x01, 0x49, 0x5c, 0xb7, 0xd0, 0x13, 0x01, 0xa4, 0xd6, + 0x03, 0x4f, 0x89, 0x6d, 0xd2, 0x13, 0x01, 0x07, 0xec, 0x05, 0xa2, 0x01, + 0x45, 0x56, 0xea, 0xd1, 0x13, 0x01, 0x05, 0x5a, 0x03, 0x5b, 0xb6, 0x01, + 0xff, 0x0a, 0xbb, 0xa9, 0x48, 0x0a, 0x41, 0x77, 0x01, 0xff, 0xa1, 0x35, + 0x42, 0x27, 0x01, 0xc2, 0x13, 0x01, 0xe9, 0xb9, 0x13, 0x81, 0x26, 0x42, + 0xcd, 0x02, 0xc7, 0x13, 0x01, 0xf5, 0xbb, 0x13, 0x81, 0x17, 0x08, 0x22, + 0xc1, 0x01, 0xff, 0xec, 0xbf, 0x13, 0x81, 0x09, 0xf2, 0xbd, 0x13, 0xc1, + 0x00, 0xf2, 0xbe, 0x13, 0x41, 0xec, 0xc0, 0x13, 0x41, 0xf5, 0xbc, 0x13, + 0x41, 0xe9, 0xba, 0x13, 0x41, 0xe1, 0xb8, 0x13, 0x01, 0xe9, 0xc5, 0x13, + 0x01, 0xf5, 0xc8, 0x13, 0x41, 0x48, 0xc9, 0x7c, 0xe2, 0x13, 0x01, 0x47, + 0xf4, 0x0a, 0xe1, 0x13, 0x41, 0xa1, 0x2f, 0x50, 0x36, 0x61, 0xca, 0x13, + 0x01, 0x4d, 0x42, 0x85, 0xcf, 0x13, 0x01, 0x4b, 0xa6, 0xa0, 0xd7, 0x13, + 0x01, 0x45, 0xf2, 0xe9, 0xd3, 0x13, 0x01, 0x4e, 0x29, 0x7c, 0xd8, 0x13, + 0x01, 0x02, 0x02, 0x00, 0x01, 0xff, 0x44, 0xe5, 0x23, 0xce, 0x13, 0x01, + 0x45, 0xec, 0x4b, 0xcd, 0x13, 0x41, 0x47, 0x3d, 0x16, 0xcc, 0x13, 0x01, + 0x47, 0xaf, 0x88, 0xb7, 0x13, 0x41, 0xe1, 0x80, 0x13, 0x81, 0x97, 0x02, + 0xa2, 0x8a, 0x02, 0xa3, 0xfd, 0x01, 0xa4, 0xe4, 0x01, 0x42, 0x27, 0x01, + 0x8b, 0x13, 0x01, 0xa7, 0xd1, 0x01, 0x42, 0x22, 0x00, 0xb2, 0x13, 0x01, + 0xe9, 0x82, 0x13, 0x81, 0xc1, 0x01, 0xaa, 0xb4, 0x01, 0xab, 0xa7, 0x01, + 0xac, 0x93, 0x01, 0x42, 0x6c, 0x00, 0xaa, 0x13, 0x01, 0xae, 0x75, 0x42, + 0xcd, 0x02, 0x90, 0x13, 0x01, 0xb0, 0x63, 0xb2, 0x57, 0xb3, 0x45, 0xb4, + 0x2c, 0xf5, 0x84, 0x13, 0x81, 0x23, 0xb6, 0x06, 0x42, 0xbc, 0x22, 0xab, + 0x13, 0x41, 0xe1, 0xae, 0x13, 0x01, 0x07, 0x23, 0xc1, 0x01, 0xff, 0xec, + 0x88, 0x13, 0x81, 0x09, 0xf2, 0x86, 0x13, 0xc1, 0x00, 0xf2, 0x87, 0x13, + 0x41, 0xec, 0x89, 0x13, 0x41, 0xf5, 0x85, 0x13, 0x41, 0xe1, 0xa1, 0x13, + 0x01, 0x42, 0x22, 0x00, 0xa2, 0x13, 0x01, 0xb4, 0x01, 0xff, 0xe1, 0x9c, + 0x13, 0x01, 0x42, 0x22, 0x00, 0x9d, 0x13, 0x41, 0xe1, 0xb1, 0x13, 0x01, + 0x42, 0x22, 0x00, 0xaf, 0x13, 0x01, 0x42, 0x40, 0x06, 0xb0, 0x13, 0x41, + 0xe1, 0xac, 0x13, 0x01, 0x42, 0x71, 0x00, 0xb4, 0x13, 0x41, 0xe1, 0xa6, + 0x13, 0x01, 0x42, 0x22, 0x00, 0xa7, 0x13, 0x41, 0xe1, 0xa5, 0x13, 0x01, + 0x42, 0x24, 0x02, 0x96, 0x13, 0x01, 0x42, 0x2a, 0x05, 0xa0, 0x13, 0x01, + 0x42, 0xbc, 0x22, 0x9b, 0x13, 0x41, 0xe1, 0xad, 0x13, 0x01, 0xac, 0x01, + 0xff, 0xe1, 0xb3, 0x13, 0x01, 0x42, 0x74, 0x00, 0xb5, 0x13, 0x41, 0xe1, + 0x92, 0x13, 0x01, 0x42, 0x22, 0x00, 0x93, 0x13, 0x41, 0xe1, 0x99, 0x13, + 0x01, 0x42, 0x22, 0x00, 0x9a, 0x13, 0x41, 0xe9, 0x83, 0x13, 0x41, 0xe1, + 0x94, 0x13, 0x01, 0x42, 0x22, 0x00, 0x95, 0x13, 0x41, 0xe1, 0xa3, 0x13, + 0x01, 0xa4, 0x06, 0x42, 0x22, 0x00, 0xa4, 0x13, 0x41, 0xe1, 0x9e, 0x13, + 0x01, 0x42, 0x22, 0x00, 0x9f, 0x13, 0x41, 0xe1, 0x97, 0x13, 0x01, 0x42, + 0x22, 0x00, 0x98, 0x13, 0x41, 0xe1, 0xa8, 0x13, 0x01, 0x42, 0x22, 0x00, + 0xa9, 0x13, 0x41, 0xe1, 0x81, 0x13, 0x01, 0xe9, 0x8e, 0x13, 0x01, 0xf5, + 0x91, 0x13, 0x41, 0x44, 0x73, 0x20, 0xd4, 0x13, 0x01, 0x4b, 0x09, 0xa1, + 0xd5, 0x13, 0x41, 0xa1, 0xc7, 0x02, 0xa5, 0xb8, 0x02, 0xa9, 0x43, 0xaf, + 0x14, 0xb5, 0x01, 0xff, 0xe5, 0xa8, 0x22, 0x80, 0x06, 0x44, 0x41, 0xf1, + 0xba, 0xf3, 0x41, 0x50, 0x36, 0x60, 0xdf, 0x2b, 0x40, 0x42, 0x60, 0x07, + 0xcc, 0xf9, 0x81, 0x20, 0x45, 0x7b, 0xe8, 0x8a, 0xfa, 0x01, 0xb0, 0x01, + 0xff, 0x42, 0xfe, 0x46, 0xc6, 0xf3, 0x01, 0x05, 0x36, 0x00, 0x01, 0xff, + 0x45, 0x8c, 0xd0, 0x79, 0xf3, 0x01, 0x44, 0x2a, 0x5b, 0x20, 0xf4, 0x41, + 0x45, 0x3c, 0xe6, 0x8e, 0xf6, 0x41, 0x03, 0x1c, 0x01, 0xb1, 0x01, 0x45, + 0x94, 0x3b, 0x5d, 0x20, 0x00, 0x4b, 0xd9, 0x9a, 0x31, 0xf5, 0x01, 0x09, + 0x06, 0x96, 0x6e, 0x04, 0x6d, 0x1d, 0x01, 0xff, 0x4e, 0x79, 0x76, 0xf6, + 0x2a, 0x00, 0x46, 0xd6, 0xda, 0x4b, 0x2e, 0x00, 0x14, 0x4d, 0x2a, 0x4d, + 0x48, 0x94, 0x26, 0x2d, 0x22, 0x00, 0x07, 0x7e, 0xd3, 0x37, 0xb0, 0x29, + 0x57, 0x4f, 0x31, 0xfb, 0x2a, 0x00, 0x45, 0x35, 0x23, 0x4b, 0x22, 0x00, + 0x0d, 0x42, 0x01, 0x01, 0xff, 0x4f, 0x57, 0x31, 0xf4, 0x2a, 0x00, 0x49, + 0xdb, 0x38, 0x80, 0x29, 0x00, 0x4f, 0x56, 0x01, 0xaa, 0x22, 0x00, 0x56, + 0x23, 0x38, 0xf5, 0x2a, 0x40, 0x43, 0x59, 0x28, 0xfb, 0x29, 0x00, 0x44, + 0xeb, 0x1a, 0x34, 0x20, 0x40, 0x4c, 0x87, 0x00, 0xf8, 0x2a, 0x00, 0x49, + 0xec, 0x00, 0xf7, 0x2a, 0x40, 0x56, 0x95, 0x33, 0x68, 0x2a, 0x00, 0x56, + 0x9f, 0x37, 0x69, 0x2a, 0x40, 0x45, 0x52, 0x72, 0x37, 0x26, 0x00, 0x44, + 0x43, 0x91, 0x32, 0x26, 0x00, 0x46, 0x89, 0x7b, 0x30, 0x26, 0x00, 0x44, + 0xde, 0x2e, 0x31, 0x26, 0x00, 0x48, 0x03, 0x35, 0x36, 0x26, 0x00, 0x47, + 0xe0, 0x7a, 0x33, 0x26, 0x00, 0xb7, 0x01, 0xff, 0x44, 0x8a, 0x00, 0x35, + 0x26, 0x00, 0x43, 0xe9, 0x06, 0x34, 0x26, 0x40, 0x02, 0x68, 0x00, 0x17, + 0x05, 0x1f, 0x01, 0x01, 0xff, 0x46, 0xb2, 0x21, 0x23, 0x20, 0x00, 0x4c, + 0xef, 0x8e, 0xa9, 0xf6, 0x01, 0x45, 0x00, 0x30, 0xd0, 0xf4, 0x41, 0x06, + 0x50, 0x00, 0x06, 0x58, 0x9b, 0x06, 0x9d, 0x27, 0x40, 0x49, 0x3a, 0x1e, + 0xca, 0x29, 0x00, 0x4f, 0x1f, 0x19, 0xc6, 0xf6, 0x01, 0x50, 0xf6, 0x66, + 0xcd, 0x29, 0x00, 0x48, 0xe3, 0x59, 0xcb, 0x29, 0x40, 0x4b, 0x4d, 0x99, + 0x8e, 0xfa, 0x01, 0x48, 0x42, 0x19, 0xbc, 0xce, 0x41, 0xa3, 0x28, 0x4c, + 0xcf, 0x8d, 0x22, 0x21, 0x00, 0x42, 0x9e, 0x01, 0x86, 0xf6, 0x01, 0xed, + 0x8a, 0xf6, 0x81, 0x11, 0x02, 0x5f, 0x01, 0x01, 0xff, 0x45, 0xf7, 0xe9, + 0xd7, 0x2b, 0x00, 0x53, 0xb0, 0x4e, 0xdb, 0x2a, 0x40, 0x44, 0xc2, 0x64, + 0x8b, 0xf6, 0x41, 0x45, 0xc7, 0xe7, 0xb2, 0xf5, 0x01, 0x43, 0xc7, 0x07, + 0x9c, 0xf6, 0x41, 0x0c, 0xe7, 0x8d, 0xf1, 0x06, 0x44, 0x9c, 0x37, 0xbd, + 0xf6, 0x01, 0x49, 0x28, 0xbb, 0xfc, 0xf5, 0x01, 0x0a, 0x53, 0xad, 0xc8, + 0x04, 0x44, 0x1e, 0x39, 0x45, 0xf3, 0x01, 0x44, 0xb2, 0x67, 0x45, 0xf4, + 0x01, 0xaf, 0xa6, 0x04, 0x02, 0x20, 0x00, 0x8f, 0x02, 0x17, 0x0a, 0x31, + 0xbf, 0x01, 0xb4, 0x01, 0xff, 0x49, 0xe2, 0xb5, 0x30, 0x23, 0x00, 0x02, + 0x7b, 0x02, 0x01, 0xff, 0x07, 0xec, 0x05, 0x06, 0x50, 0x16, 0x67, 0xae, + 0xe2, 0x41, 0xe1, 0xad, 0xe2, 0x81, 0x9d, 0x01, 0xa2, 0x7a, 0x43, 0x91, + 0x20, 0x9a, 0xe2, 0x01, 0x42, 0xf0, 0x10, 0x93, 0xe2, 0x01, 0xe5, 0xa6, 0xe2, 0x81, 0x65, 0x42, 0x24, 0x02, 0x95, 0xe2, 0x01, 0x42, 0x22, 0x00, - 0x9e, 0xe2, 0x01, 0xe9, 0xa1, 0xe2, 0x81, 0x50, 0x42, 0xbd, 0x26, 0x9d, + 0x9e, 0xe2, 0x01, 0xe9, 0xa1, 0xe2, 0x81, 0x50, 0x42, 0x56, 0x19, 0x9d, 0xe2, 0x01, 0x42, 0x1b, 0x02, 0x94, 0xe2, 0x01, 0x42, 0x74, 0x00, 0xa0, 0xe2, 0x01, 0x42, 0x6c, 0x00, 0x96, 0xe2, 0x01, 0xae, 0x2c, 0xef, 0xaa, - 0xe2, 0x01, 0x42, 0x6c, 0x09, 0x90, 0xe2, 0x01, 0x42, 0x71, 0x00, 0x9f, - 0xe2, 0x01, 0x42, 0x15, 0x06, 0x99, 0xe2, 0x01, 0x42, 0x12, 0x00, 0x92, + 0xe2, 0x01, 0x42, 0xbb, 0x09, 0x90, 0xe2, 0x01, 0x42, 0x71, 0x00, 0x9f, + 0xe2, 0x01, 0x42, 0x40, 0x06, 0x99, 0xe2, 0x01, 0x42, 0x12, 0x00, 0x92, 0xe2, 0x01, 0xf5, 0xa5, 0xe2, 0x01, 0x42, 0xa9, 0x01, 0x9c, 0xe2, 0x01, - 0x42, 0x34, 0x22, 0x9b, 0xe2, 0x41, 0xe1, 0x97, 0xe2, 0x01, 0x42, 0x24, + 0x42, 0xbc, 0x22, 0x9b, 0xe2, 0x41, 0xe1, 0x97, 0xe2, 0x01, 0x42, 0x24, 0x02, 0x98, 0xe2, 0x41, 0xf5, 0xa3, 0xe2, 0x41, 0xef, 0xa8, 0xe2, 0x41, - 0xe1, 0x91, 0xe2, 0x01, 0x07, 0x72, 0xd2, 0x01, 0xff, 0x42, 0x44, 0x0f, + 0xe1, 0x91, 0xe2, 0x01, 0x07, 0x45, 0xd5, 0x01, 0xff, 0x42, 0x93, 0x0f, 0xac, 0xe2, 0x01, 0xe5, 0xa7, 0xe2, 0x81, 0x09, 0xe9, 0xa2, 0xe2, 0xc1, 0x00, 0xf5, 0xa4, 0xe2, 0x41, 0xef, 0xa9, 0xe2, 0x41, 0xe5, 0xab, 0xe2, - 0x41, 0x16, 0x41, 0x32, 0x06, 0x56, 0x3b, 0x34, 0x2a, 0xf1, 0x41, 0x02, - 0xb6, 0xf1, 0x31, 0x95, 0x23, 0x96, 0x0f, 0x97, 0x01, 0xff, 0x43, 0x2a, - 0xf0, 0x44, 0xf2, 0x01, 0x43, 0x78, 0xf0, 0x46, 0xf2, 0x41, 0x43, 0x48, - 0xf0, 0x45, 0xf2, 0x01, 0x43, 0x6c, 0xf0, 0x48, 0xf2, 0x01, 0x43, 0x7e, - 0xf0, 0x40, 0xf2, 0x41, 0x43, 0x4b, 0xf0, 0x47, 0xf2, 0x01, 0x43, 0xa5, - 0xf0, 0x43, 0xf2, 0x41, 0x42, 0x89, 0xf0, 0x41, 0xf2, 0x01, 0x42, 0x4f, - 0xdf, 0x42, 0xf2, 0x41, 0x04, 0x3e, 0x17, 0xfa, 0x01, 0x4d, 0x23, 0x0b, - 0xde, 0x23, 0x00, 0x02, 0x22, 0x00, 0x6a, 0x15, 0x86, 0x3b, 0x5a, 0x05, - 0xc3, 0x00, 0x36, 0x4b, 0x50, 0x21, 0xdc, 0x23, 0x00, 0x06, 0xc8, 0x00, - 0x12, 0x4e, 0x27, 0x26, 0xb4, 0x23, 0x00, 0x56, 0x05, 0x09, 0xe0, 0x23, - 0x00, 0x58, 0x75, 0x2b, 0x1d, 0xf5, 0x41, 0xa3, 0x0c, 0x4c, 0xcd, 0x8d, - 0x23, 0x2e, 0x00, 0x69, 0x3a, 0x04, 0xec, 0xfb, 0x41, 0x45, 0xcf, 0x0a, - 0x1d, 0x23, 0x00, 0x43, 0xd8, 0x0c, 0x0e, 0x23, 0x40, 0x62, 0xc3, 0x0b, - 0x07, 0xce, 0x01, 0xa3, 0x0c, 0x4c, 0xcd, 0x8d, 0x22, 0x2e, 0x00, 0x6a, - 0xc3, 0x02, 0xef, 0xfb, 0x41, 0x45, 0xcf, 0x0a, 0x1c, 0x23, 0x00, 0x43, - 0xd8, 0x0c, 0x0f, 0x23, 0x40, 0x4c, 0xe1, 0x02, 0xe8, 0xfb, 0x01, 0x4c, - 0xe3, 0x10, 0xe0, 0xfb, 0x41, 0x03, 0x24, 0x00, 0x04, 0xf4, 0xa9, 0xf3, - 0x41, 0x4c, 0xe1, 0x02, 0xca, 0x2b, 0x00, 0xa6, 0x59, 0x48, 0xf3, 0x25, + 0x41, 0x16, 0x11, 0x33, 0x06, 0x56, 0x0b, 0x35, 0x2a, 0xf1, 0x41, 0x02, + 0x00, 0xf5, 0x31, 0x95, 0x23, 0x96, 0x0f, 0x97, 0x01, 0xff, 0x43, 0x7d, + 0xf3, 0x44, 0xf2, 0x01, 0x43, 0xcb, 0xf3, 0x46, 0xf2, 0x41, 0x43, 0x9b, + 0xf3, 0x45, 0xf2, 0x01, 0x43, 0xbf, 0xf3, 0x48, 0xf2, 0x01, 0x43, 0xd1, + 0xf3, 0x40, 0xf2, 0x41, 0x43, 0x9e, 0xf3, 0x47, 0xf2, 0x01, 0x43, 0xf8, + 0xf3, 0x43, 0xf2, 0x41, 0x42, 0xdc, 0xf3, 0x41, 0xf2, 0x01, 0x42, 0x5a, + 0xe2, 0x42, 0xf2, 0x41, 0x04, 0xaa, 0x17, 0xfa, 0x01, 0x4d, 0x72, 0x0b, + 0xde, 0x23, 0x00, 0x02, 0x22, 0x00, 0x6a, 0x15, 0x56, 0x3c, 0x5a, 0x05, + 0xc3, 0x00, 0x36, 0x4b, 0xd8, 0x21, 0xdc, 0x23, 0x00, 0x06, 0xc8, 0x00, + 0x12, 0x4e, 0xc8, 0x26, 0xb4, 0x23, 0x00, 0x56, 0x54, 0x09, 0xe0, 0x23, + 0x00, 0x58, 0x16, 0x2c, 0x1d, 0xf5, 0x41, 0xa3, 0x0c, 0x4c, 0x7f, 0x8f, + 0x23, 0x2e, 0x00, 0x69, 0x65, 0x04, 0xec, 0xfb, 0x41, 0x45, 0x1e, 0x0b, + 0x1d, 0x23, 0x00, 0x43, 0x27, 0x0d, 0x0e, 0x23, 0x40, 0x62, 0x12, 0x0c, + 0x07, 0xce, 0x01, 0xa3, 0x0c, 0x4c, 0x7f, 0x8f, 0x22, 0x2e, 0x00, 0x6a, + 0xee, 0x02, 0xef, 0xfb, 0x41, 0x45, 0x1e, 0x0b, 0x1c, 0x23, 0x00, 0x43, + 0x27, 0x0d, 0x0f, 0x23, 0x40, 0x4c, 0x0c, 0x03, 0xe8, 0xfb, 0x01, 0x4c, + 0x32, 0x11, 0xe0, 0xfb, 0x41, 0x03, 0x24, 0x00, 0x04, 0xf4, 0xa9, 0xf3, + 0x41, 0x4c, 0x0c, 0x03, 0xca, 0x2b, 0x00, 0xa6, 0x59, 0x48, 0x94, 0x26, 0x20, 0x23, 0x00, 0x04, 0xc3, 0x00, 0x31, 0x05, 0xc8, 0x00, 0x0f, 0xb3, - 0x01, 0xff, 0x4b, 0x4a, 0x93, 0x39, 0x2e, 0x00, 0x4e, 0xdb, 0x71, 0xe6, - 0xcd, 0x41, 0x4c, 0x4f, 0x21, 0x5a, 0x2e, 0x00, 0x09, 0xe1, 0x61, 0x01, - 0xff, 0x44, 0xf8, 0x42, 0x5c, 0xcc, 0x01, 0x0c, 0x8d, 0x94, 0x01, 0xff, - 0xd1, 0xe8, 0xcd, 0x01, 0xd2, 0xea, 0xcd, 0x41, 0x4c, 0x4f, 0x21, 0x59, - 0x2e, 0x00, 0x09, 0xe1, 0x61, 0x01, 0xff, 0x44, 0xf8, 0x42, 0x5a, 0xcc, - 0x01, 0x0c, 0x8d, 0x94, 0x01, 0xff, 0xd1, 0xec, 0xcd, 0x01, 0xd2, 0xee, - 0xcd, 0x41, 0x14, 0xef, 0x42, 0x11, 0x0f, 0xdb, 0x61, 0x01, 0xff, 0x44, - 0xf8, 0x42, 0x5b, 0xcc, 0x01, 0x45, 0x8d, 0x94, 0xf0, 0xcd, 0x41, 0xd1, - 0xf6, 0xcd, 0x01, 0xd2, 0xf7, 0xcd, 0x41, 0x53, 0x12, 0x10, 0x3a, 0x29, - 0x80, 0x06, 0x5a, 0xda, 0x1e, 0x3c, 0x29, 0x40, 0x4a, 0x41, 0xa4, 0x3d, - 0x29, 0x40, 0x44, 0xc9, 0x83, 0xf0, 0xf9, 0x01, 0x42, 0x53, 0x00, 0xb7, - 0xf9, 0xc1, 0x00, 0x45, 0x71, 0xb3, 0xa5, 0xfa, 0x41, 0xe1, 0xc0, 0x05, - 0x81, 0xa9, 0x02, 0x42, 0x16, 0x00, 0xc2, 0x05, 0x01, 0xa3, 0x96, 0x02, - 0xa4, 0x89, 0x02, 0xe5, 0xca, 0x05, 0x81, 0xff, 0x01, 0x42, 0xe1, 0x07, - 0xcb, 0x05, 0x01, 0xa7, 0xe6, 0x01, 0xa8, 0xd9, 0x01, 0xe9, 0xd2, 0x05, - 0x01, 0xaa, 0xca, 0x01, 0xab, 0xbd, 0x01, 0xac, 0xb0, 0x01, 0xad, 0xa3, - 0x01, 0xae, 0x78, 0xef, 0xda, 0x05, 0x81, 0x6f, 0xb0, 0x63, 0x42, 0xf4, - 0x13, 0xdc, 0x05, 0x01, 0xb2, 0x51, 0xb3, 0x33, 0xb4, 0x27, 0xf5, 0xe4, - 0x05, 0x01, 0x42, 0xa6, 0x0a, 0xe5, 0x05, 0x01, 0xb8, 0x11, 0xf9, 0xea, - 0x05, 0x01, 0xba, 0x01, 0xff, 0xe1, 0xec, 0x05, 0x01, 0x42, 0x22, 0x00, - 0xed, 0x05, 0x41, 0xe1, 0xe6, 0x05, 0x01, 0x42, 0x22, 0x00, 0xe8, 0x05, - 0x41, 0xe1, 0xe2, 0x05, 0x01, 0x42, 0x22, 0x00, 0xe3, 0x05, 0x41, 0xe1, - 0xdf, 0x05, 0x01, 0xa8, 0x0c, 0x43, 0xb0, 0x26, 0xf0, 0x05, 0x01, 0x42, - 0x12, 0x00, 0xef, 0x05, 0x41, 0xe1, 0xe0, 0x05, 0x01, 0x42, 0x12, 0x00, - 0xe1, 0x05, 0x41, 0xe1, 0xdd, 0x05, 0x01, 0x42, 0x71, 0x00, 0xde, 0x05, - 0x41, 0xe1, 0xdb, 0x05, 0x01, 0x42, 0x15, 0x06, 0xf2, 0x05, 0x41, 0xef, - 0xf3, 0x05, 0x41, 0xe1, 0xd8, 0x05, 0x01, 0x42, 0xa1, 0x10, 0xc7, 0x05, - 0x01, 0xa7, 0x13, 0x43, 0x80, 0xb3, 0xd9, 0x05, 0x01, 0xb8, 0x01, 0xff, - 0xe1, 0xe7, 0x05, 0x01, 0x42, 0x22, 0x00, 0xe9, 0x05, 0x41, 0xe1, 0xcd, - 0x05, 0x01, 0x42, 0xbd, 0x26, 0xcf, 0x05, 0x41, 0xe1, 0xd7, 0x05, 0x01, - 0x42, 0x16, 0x00, 0xc3, 0x05, 0x41, 0xe1, 0xd5, 0x05, 0x01, 0x42, 0x74, - 0x00, 0xd6, 0x05, 0x41, 0xe1, 0xd4, 0x05, 0x01, 0x42, 0x22, 0x00, 0xf1, - 0x05, 0x41, 0xe1, 0xd3, 0x05, 0x01, 0xf9, 0xeb, 0x05, 0x41, 0xe1, 0xd0, - 0x05, 0x01, 0x42, 0xbd, 0x26, 0xd1, 0x05, 0x41, 0xe1, 0xcc, 0x05, 0x01, - 0x42, 0x22, 0x00, 0xee, 0x05, 0x01, 0x42, 0xbd, 0x26, 0xce, 0x05, 0x41, - 0xe9, 0xc9, 0x05, 0x41, 0xe1, 0xc6, 0x05, 0x01, 0x42, 0x22, 0x00, 0xc8, - 0x05, 0x41, 0xe1, 0xc4, 0x05, 0x01, 0x42, 0x22, 0x00, 0xc5, 0x05, 0x41, - 0xf3, 0xc1, 0x05, 0x41, 0x06, 0x36, 0xd7, 0xde, 0x07, 0x44, 0x17, 0x09, - 0xab, 0xf3, 0x01, 0x4f, 0xf0, 0x6a, 0xdd, 0x29, 0x00, 0x07, 0x43, 0xce, - 0xa6, 0x05, 0xa7, 0x90, 0x05, 0x43, 0x79, 0x1d, 0x7e, 0x00, 0x80, 0xbf, - 0x04, 0x02, 0x2a, 0x02, 0xa3, 0x04, 0x42, 0xf6, 0x19, 0xfe, 0x29, 0x80, - 0x95, 0x04, 0xb2, 0x01, 0xff, 0x47, 0xa7, 0x14, 0x2b, 0xf6, 0x01, 0x05, - 0x1c, 0xe4, 0x11, 0x0b, 0x8b, 0x9e, 0x01, 0xff, 0x4a, 0x3f, 0xa6, 0x52, - 0x2e, 0x00, 0x42, 0xc2, 0x05, 0x4a, 0x20, 0x40, 0xa1, 0xe8, 0x03, 0x06, - 0xc4, 0x06, 0xa1, 0x03, 0x45, 0xae, 0xe3, 0xc5, 0x14, 0x01, 0x07, 0xc1, - 0x05, 0x85, 0x01, 0x42, 0xe9, 0x04, 0xc7, 0x14, 0x01, 0x05, 0x2f, 0x03, - 0x50, 0x0b, 0xd1, 0x75, 0x01, 0xff, 0xa1, 0x3d, 0xe5, 0xb9, 0x14, 0x01, - 0xe9, 0xb1, 0x14, 0x81, 0x30, 0xef, 0xbc, 0x14, 0x01, 0x06, 0x61, 0x36, - 0x20, 0xf5, 0xb3, 0x14, 0x81, 0x17, 0x08, 0x9b, 0xbe, 0x01, 0xff, 0xec, - 0xb7, 0x14, 0x81, 0x09, 0xf2, 0xb5, 0x14, 0xc1, 0x00, 0xf2, 0xb6, 0x14, - 0x41, 0xec, 0xb8, 0x14, 0x41, 0xf5, 0xb4, 0x14, 0x41, 0xe5, 0xba, 0x14, - 0x01, 0xef, 0xbd, 0x14, 0x41, 0xe9, 0xb2, 0x14, 0x41, 0xe1, 0xb0, 0x14, - 0x01, 0xe9, 0xbb, 0x14, 0x01, 0xf5, 0xbe, 0x14, 0x41, 0xa1, 0x1d, 0x4b, - 0x4f, 0x23, 0xbf, 0x14, 0x01, 0x45, 0x5a, 0x3e, 0xc3, 0x14, 0x01, 0x02, - 0x02, 0x00, 0x01, 0xff, 0x44, 0x5d, 0x23, 0xc2, 0x14, 0x01, 0x45, 0xa3, - 0x4a, 0xc1, 0x14, 0x41, 0x47, 0xd1, 0x15, 0xc0, 0x14, 0x01, 0x47, 0xf2, - 0x86, 0xc4, 0x14, 0x41, 0xe1, 0x81, 0x14, 0x81, 0xff, 0x01, 0xa2, 0xf2, - 0x01, 0xa3, 0xe5, 0x01, 0xa4, 0xcc, 0x01, 0xe5, 0x8b, 0x14, 0x01, 0xa7, - 0xbb, 0x01, 0x42, 0x22, 0x00, 0xaf, 0x14, 0x01, 0xe9, 0x83, 0x14, 0x81, - 0xab, 0x01, 0xaa, 0x9e, 0x01, 0xab, 0x91, 0x01, 0x42, 0x74, 0x00, 0xaa, - 0x14, 0x01, 0x42, 0x6c, 0x00, 0xa7, 0x14, 0x01, 0xae, 0x6d, 0xef, 0x8d, - 0x14, 0x01, 0xb0, 0x5d, 0x42, 0x71, 0x00, 0xa9, 0x14, 0x01, 0xb3, 0x45, - 0xb4, 0x2c, 0xf5, 0x85, 0x14, 0x81, 0x23, 0xb6, 0x06, 0x42, 0x34, 0x22, - 0xa8, 0x14, 0x41, 0xe1, 0xab, 0x14, 0x01, 0x07, 0x9c, 0xbe, 0x01, 0xff, - 0xec, 0x89, 0x14, 0x81, 0x09, 0xf2, 0x87, 0x14, 0xc1, 0x00, 0xf2, 0x88, - 0x14, 0x41, 0xec, 0x8a, 0x14, 0x41, 0xf5, 0x86, 0x14, 0x41, 0xe1, 0x9e, - 0x14, 0x01, 0x42, 0x22, 0x00, 0x9f, 0x14, 0x01, 0xb4, 0x01, 0xff, 0xe1, - 0x99, 0x14, 0x01, 0x42, 0x22, 0x00, 0x9a, 0x14, 0x41, 0xe1, 0xae, 0x14, - 0x01, 0x42, 0x22, 0x00, 0xac, 0x14, 0x01, 0x42, 0x15, 0x06, 0xad, 0x14, - 0x41, 0xe1, 0xa3, 0x14, 0x01, 0x42, 0x22, 0x00, 0xa4, 0x14, 0x41, 0xe1, - 0xa2, 0x14, 0x01, 0x42, 0x24, 0x02, 0x93, 0x14, 0x01, 0x42, 0xff, 0x04, - 0x9d, 0x14, 0x01, 0x42, 0x34, 0x22, 0x98, 0x14, 0x41, 0xe1, 0x8f, 0x14, - 0x01, 0x42, 0x22, 0x00, 0x90, 0x14, 0x41, 0xe1, 0x96, 0x14, 0x01, 0x42, - 0x22, 0x00, 0x97, 0x14, 0x41, 0xe9, 0x84, 0x14, 0x41, 0xe1, 0x91, 0x14, - 0x01, 0x42, 0x22, 0x00, 0x92, 0x14, 0x41, 0xe1, 0xa0, 0x14, 0x01, 0xa4, - 0x06, 0x42, 0x22, 0x00, 0xa1, 0x14, 0x41, 0xe1, 0x9b, 0x14, 0x01, 0x42, - 0x22, 0x00, 0x9c, 0x14, 0x41, 0xe1, 0x94, 0x14, 0x01, 0x42, 0x22, 0x00, - 0x95, 0x14, 0x41, 0xe1, 0xa5, 0x14, 0x01, 0x42, 0x22, 0x00, 0xa6, 0x14, - 0x41, 0xe1, 0x82, 0x14, 0x01, 0xe9, 0x8c, 0x14, 0x01, 0xf5, 0x8e, 0x14, - 0x41, 0x45, 0xc3, 0x0a, 0xd8, 0x14, 0x01, 0xa6, 0x2e, 0x44, 0x46, 0x2a, - 0xd9, 0x14, 0x01, 0x43, 0xbf, 0x0a, 0xd1, 0x14, 0x01, 0xb3, 0x14, 0xb4, - 0x06, 0x44, 0xa1, 0x1d, 0xd0, 0x14, 0x41, 0x44, 0x25, 0x01, 0xd3, 0x14, - 0x01, 0x42, 0x15, 0x02, 0xd2, 0x14, 0x41, 0x44, 0x27, 0x1d, 0xd7, 0x14, - 0x01, 0x42, 0x60, 0x25, 0xd6, 0x14, 0x41, 0x43, 0xa7, 0x05, 0xd5, 0x14, - 0x01, 0x43, 0xcb, 0x06, 0xd4, 0x14, 0x41, 0x50, 0x94, 0x56, 0xc6, 0x14, - 0x01, 0x43, 0x9d, 0x85, 0x80, 0x14, 0x41, 0x62, 0xa1, 0x0b, 0x3a, 0x0b, - 0x41, 0x47, 0x9c, 0x1a, 0xf2, 0x23, 0x00, 0x07, 0x91, 0x07, 0x01, 0xff, - 0x4f, 0xcf, 0x6d, 0xd4, 0x29, 0x00, 0x50, 0x3a, 0x65, 0xd5, 0x29, 0x40, - 0x80, 0x01, 0xff, 0x48, 0xdc, 0x1c, 0x3c, 0x22, 0x80, 0x1b, 0x05, 0x51, - 0x00, 0x01, 0xff, 0x04, 0xb4, 0x0b, 0x06, 0x4a, 0x0f, 0xae, 0x1b, 0x2e, - 0x40, 0x45, 0x5c, 0x00, 0x1e, 0x2e, 0x00, 0x45, 0xf5, 0x06, 0x1f, 0x2e, - 0x40, 0x80, 0x01, 0xff, 0x06, 0x5c, 0x00, 0x11, 0x05, 0x51, 0x00, 0x01, - 0xff, 0x49, 0x98, 0x1d, 0x6a, 0x2a, 0x00, 0x4b, 0xf6, 0x9f, 0x6b, 0x2a, - 0x40, 0x4f, 0x37, 0x07, 0x49, 0x2b, 0x00, 0x50, 0xb3, 0x02, 0x72, 0x29, - 0x40, 0x42, 0x33, 0x00, 0x05, 0xf4, 0x81, 0x06, 0x57, 0xfc, 0x2d, 0x45, - 0x27, 0x40, 0x45, 0xe0, 0x07, 0x2f, 0xf4, 0x41, 0x50, 0x1a, 0x60, 0x7f, - 0x2d, 0x00, 0x07, 0xc1, 0x05, 0x0c, 0x62, 0x29, 0x0c, 0x6f, 0x2d, 0x00, - 0x4e, 0x9e, 0x7a, 0x70, 0x2d, 0x40, 0xa1, 0x82, 0x02, 0x11, 0x2c, 0x57, - 0xf5, 0x01, 0xb4, 0xc0, 0x01, 0xb9, 0x01, 0xff, 0xe1, 0x30, 0x2d, 0x80, - 0x15, 0xe5, 0x66, 0x2d, 0x80, 0x0c, 0xe9, 0x49, 0x2d, 0x00, 0xef, 0x67, - 0x2d, 0x00, 0xf5, 0x53, 0x2d, 0x40, 0xf9, 0x3b, 0x2d, 0x40, 0xe1, 0x44, - 0x2d, 0x00, 0xe2, 0x31, 0x2d, 0x80, 0x95, 0x01, 0x42, 0x1e, 0x14, 0x5e, - 0x2d, 0x00, 0xe4, 0x37, 0x2d, 0x80, 0x7d, 0xe6, 0x3c, 0x2d, 0x00, 0xe7, - 0x33, 0x2d, 0x80, 0x6b, 0xe8, 0x40, 0x2d, 0x80, 0x62, 0xea, 0x36, 0x2d, - 0x00, 0xeb, 0x3d, 0x2d, 0x80, 0x50, 0xec, 0x4d, 0x2d, 0x00, 0xed, 0x4e, - 0x2d, 0x00, 0xee, 0x4f, 0x2d, 0x00, 0xf0, 0x52, 0x2d, 0x00, 0xf1, 0x47, - 0x2d, 0x00, 0xf2, 0x54, 0x2d, 0x80, 0x33, 0xf3, 0x59, 0x2d, 0x80, 0x26, - 0xf4, 0x5c, 0x2d, 0x80, 0x19, 0xf6, 0x60, 0x2d, 0x00, 0xf7, 0x61, 0x2d, - 0x00, 0xf9, 0x62, 0x2d, 0x00, 0xfa, 0x63, 0x2d, 0xc0, 0x00, 0xe8, 0x4a, - 0x2d, 0x00, 0xfa, 0x65, 0x2d, 0x40, 0xe8, 0x5d, 0x2d, 0x00, 0xf4, 0x5f, - 0x2d, 0x40, 0xe8, 0x5b, 0x2d, 0x00, 0xf3, 0x5a, 0x2d, 0x40, 0xf2, 0x55, - 0x2d, 0x40, 0xe8, 0x45, 0x2d, 0xc0, 0x00, 0xe8, 0x3f, 0x2d, 0x40, 0xe8, - 0x43, 0x2d, 0x40, 0xe8, 0x56, 0x2d, 0xc0, 0x00, 0xe8, 0x34, 0x2d, 0x40, - 0xe4, 0x39, 0x2d, 0x80, 0x04, 0xe8, 0x38, 0x2d, 0x40, 0xe8, 0x3a, 0x2d, - 0x40, 0xe8, 0x32, 0x2d, 0x40, 0x4d, 0x75, 0x7f, 0x64, 0x2d, 0x00, 0x08, - 0x2a, 0xc9, 0x01, 0xff, 0xa7, 0x1d, 0xe8, 0x42, 0x2d, 0x00, 0xeb, 0x3e, - 0x2d, 0x80, 0x10, 0x42, 0x1d, 0x01, 0x51, 0x2d, 0x00, 0xf1, 0x48, 0x2d, - 0x00, 0x42, 0xb3, 0x27, 0x4c, 0x2d, 0x40, 0xe8, 0x46, 0x2d, 0x40, 0xe8, - 0x57, 0x2d, 0x00, 0xee, 0x50, 0x2d, 0x40, 0xe8, 0x41, 0x2d, 0x00, 0xea, - 0x35, 0x2d, 0x40, 0x4b, 0x81, 0x9a, 0x4b, 0x2d, 0x00, 0x48, 0x1a, 0xca, - 0x58, 0x2d, 0x40, 0x12, 0xf8, 0x4e, 0x9d, 0x0b, 0x12, 0x64, 0x4f, 0x80, - 0x0b, 0x06, 0xc4, 0x06, 0xf3, 0x09, 0x49, 0xb3, 0xb8, 0xbe, 0x0f, 0x80, - 0xe5, 0x09, 0xac, 0xbf, 0x07, 0x05, 0xb9, 0x00, 0xf6, 0x04, 0xb3, 0x51, - 0x0b, 0xd1, 0x75, 0x01, 0xff, 0x42, 0x31, 0x12, 0x71, 0x0f, 0x00, 0xe5, - 0x7a, 0x0f, 0x80, 0x3d, 0xe9, 0x72, 0x0f, 0x80, 0x34, 0xef, 0x7c, 0x0f, - 0x80, 0x2b, 0x4a, 0xd3, 0xad, 0x80, 0x0f, 0x80, 0x20, 0xf5, 0x74, 0x0f, - 0x80, 0x17, 0x08, 0x9b, 0xbe, 0x01, 0xff, 0xec, 0x78, 0x0f, 0x80, 0x09, - 0xf2, 0x76, 0x0f, 0xc0, 0x00, 0xf2, 0x77, 0x0f, 0x40, 0xec, 0x79, 0x0f, - 0x40, 0xf5, 0x75, 0x0f, 0x40, 0xe9, 0x81, 0x0f, 0x40, 0xef, 0x7d, 0x0f, - 0x40, 0xe9, 0x73, 0x0f, 0x40, 0xe5, 0x7b, 0x0f, 0x40, 0x04, 0x30, 0x03, - 0xfd, 0x02, 0x09, 0x5a, 0x66, 0x4b, 0xb9, 0x01, 0xff, 0x49, 0x3a, 0xb9, - 0x00, 0x0f, 0x00, 0x05, 0xf5, 0x15, 0x01, 0xff, 0x47, 0xa2, 0xcd, 0xc4, - 0x0f, 0x00, 0x46, 0x74, 0xdb, 0xc9, 0x0f, 0x80, 0x1b, 0xb0, 0x0d, 0x47, - 0x6b, 0xd2, 0xc5, 0x0f, 0xc0, 0x00, 0x4a, 0xdd, 0xa3, 0xc7, 0x0f, 0x40, - 0x49, 0x52, 0xb3, 0xc6, 0x0f, 0x00, 0x46, 0xac, 0xd9, 0xc8, 0x0f, 0x40, - 0x80, 0x01, 0xff, 0x4b, 0xc1, 0x97, 0xcc, 0x0f, 0x00, 0x4b, 0x6b, 0x9a, - 0xcb, 0x0f, 0x00, 0x4b, 0x3e, 0x9e, 0xca, 0x0f, 0x40, 0x07, 0xc1, 0x05, - 0x17, 0x05, 0x2f, 0x03, 0x01, 0xff, 0x51, 0xd4, 0x59, 0x8f, 0x0f, 0x00, - 0x4b, 0x2e, 0x9c, 0x8d, 0x0f, 0x00, 0x48, 0xdd, 0x59, 0x8e, 0x0f, 0x40, - 0x42, 0x2e, 0x25, 0xb0, 0x0f, 0x00, 0xe1, 0xb8, 0x0f, 0x00, 0xa2, 0xfc, - 0x01, 0xa3, 0xef, 0x01, 0xa4, 0xc9, 0x01, 0x0b, 0x63, 0x81, 0xb2, 0x01, - 0xa7, 0xa5, 0x01, 0x42, 0x22, 0x00, 0xb7, 0x0f, 0x00, 0x42, 0xbd, 0x26, - 0x97, 0x0f, 0x00, 0xab, 0x86, 0x01, 0x42, 0x74, 0x00, 0xb3, 0x0f, 0x00, - 0x42, 0x6c, 0x00, 0xa8, 0x0f, 0x00, 0xae, 0x62, 0xb0, 0x56, 0x42, 0x71, - 0x00, 0xb2, 0x0f, 0x00, 0xb3, 0x3e, 0xb4, 0x19, 0x42, 0xa9, 0x01, 0xad, - 0x0f, 0x00, 0x42, 0x34, 0x22, 0xb1, 0x0f, 0x00, 0xba, 0x01, 0xff, 0xe1, - 0xaf, 0x0f, 0x00, 0x42, 0x22, 0x00, 0xae, 0x0f, 0x40, 0xe1, 0x9f, 0x0f, - 0x00, 0x42, 0x22, 0x00, 0xa0, 0x0f, 0x00, 0xb3, 0x0d, 0xb4, 0x01, 0xff, - 0xe1, 0x9a, 0x0f, 0x00, 0x42, 0x22, 0x00, 0x9b, 0x0f, 0x40, 0xe1, 0xa9, - 0x0f, 0x00, 0x42, 0x22, 0x00, 0xaa, 0x0f, 0x40, 0xe1, 0xb6, 0x0f, 0x00, - 0x42, 0x22, 0x00, 0xb4, 0x0f, 0x00, 0x42, 0x15, 0x06, 0xb5, 0x0f, 0x40, - 0xe1, 0xa4, 0x0f, 0x00, 0x42, 0x22, 0x00, 0xa5, 0x0f, 0x40, 0xe1, 0xa3, - 0x0f, 0x00, 0x42, 0x24, 0x02, 0x94, 0x0f, 0x00, 0x42, 0xff, 0x04, 0x9e, - 0x0f, 0x00, 0x42, 0x34, 0x22, 0x99, 0x0f, 0x40, 0xe1, 0x90, 0x0f, 0x00, - 0x42, 0x22, 0x00, 0x91, 0x0f, 0x00, 0x43, 0x59, 0x20, 0xb9, 0x0f, 0x40, - 0xe1, 0x92, 0x0f, 0x00, 0x42, 0x22, 0x00, 0x93, 0x0f, 0x40, 0x42, 0x71, - 0x00, 0xbc, 0x0f, 0x00, 0x42, 0xa9, 0x01, 0xba, 0x0f, 0x00, 0x42, 0x34, - 0x22, 0xbb, 0x0f, 0x40, 0xe1, 0xa1, 0x0f, 0x00, 0xa4, 0x13, 0x42, 0x22, - 0x00, 0xa2, 0x0f, 0x00, 0xba, 0x01, 0xff, 0xe1, 0xab, 0x0f, 0x00, 0x42, - 0x22, 0x00, 0xac, 0x0f, 0x40, 0xe1, 0x9c, 0x0f, 0x00, 0x42, 0x22, 0x00, - 0x9d, 0x0f, 0x40, 0xe1, 0x95, 0x0f, 0x00, 0x42, 0x22, 0x00, 0x96, 0x0f, - 0x40, 0xe1, 0xa6, 0x0f, 0x00, 0x42, 0x22, 0x00, 0xa7, 0x0f, 0x40, 0x04, - 0xd6, 0xec, 0x90, 0x01, 0x51, 0xd4, 0x59, 0x8c, 0x0f, 0x00, 0x02, 0xbf, - 0x1e, 0x7a, 0xad, 0x6c, 0x4e, 0xc2, 0x78, 0x82, 0x0f, 0x00, 0xb2, 0x17, - 0x48, 0x62, 0xc8, 0x83, 0x0f, 0x00, 0x02, 0x34, 0x22, 0x01, 0xff, 0x48, - 0x0a, 0xc6, 0x87, 0x0f, 0x00, 0x47, 0xeb, 0xc0, 0x3e, 0x0f, 0x40, 0x04, - 0x14, 0xbc, 0x0c, 0x4d, 0x10, 0x83, 0x7e, 0x0f, 0x00, 0x48, 0xf6, 0x92, - 0x7f, 0x0f, 0x40, 0x05, 0x8c, 0xe2, 0x1f, 0x04, 0x16, 0xee, 0x01, 0xff, - 0xa7, 0x06, 0x49, 0x13, 0xbc, 0xce, 0x0f, 0x40, 0x43, 0xb7, 0xf0, 0x1d, - 0x0f, 0x00, 0x44, 0x3e, 0x9e, 0x1e, 0x0f, 0x00, 0x43, 0xcd, 0x54, 0xcf, - 0x0f, 0x40, 0xa7, 0x06, 0x48, 0x92, 0xc7, 0x1f, 0x0f, 0x40, 0x43, 0xb7, - 0xf0, 0x1a, 0x0f, 0x00, 0x44, 0x3e, 0x9e, 0x1b, 0x0f, 0x00, 0x43, 0xcd, - 0x54, 0x1c, 0x0f, 0x40, 0x48, 0xea, 0xc0, 0x3f, 0x0f, 0x00, 0x47, 0xde, - 0x59, 0x89, 0x0f, 0x40, 0x49, 0x30, 0x9c, 0x88, 0x0f, 0x00, 0x47, 0xdd, - 0xce, 0x86, 0x0f, 0x40, 0x4b, 0xcc, 0x97, 0x8a, 0x0f, 0x00, 0x4b, 0x41, - 0x9d, 0x8b, 0x0f, 0x40, 0x0c, 0x91, 0x8a, 0xb3, 0x02, 0xa2, 0x88, 0x02, - 0xa3, 0xd4, 0x01, 0x55, 0x4f, 0x39, 0x0c, 0x0f, 0x00, 0xa7, 0x95, 0x01, - 0x47, 0x97, 0xce, 0x84, 0x0f, 0x00, 0x02, 0x9e, 0x01, 0x75, 0x53, 0x8b, - 0x49, 0xd9, 0x0f, 0x00, 0x56, 0xd5, 0x34, 0xd1, 0x0f, 0x00, 0xae, 0x3f, - 0x46, 0xfe, 0xdb, 0x85, 0x0f, 0x00, 0xb2, 0x2b, 0xb3, 0x1d, 0xb4, 0x06, - 0x55, 0x7a, 0x3e, 0x07, 0x0f, 0x40, 0x53, 0x1a, 0x4b, 0xda, 0x0f, 0x00, - 0xb3, 0x01, 0xff, 0x47, 0xb1, 0xcb, 0x39, 0x0f, 0x00, 0x48, 0x84, 0x3e, - 0x0f, 0x0f, 0x40, 0x49, 0x8d, 0xb4, 0x08, 0x0f, 0x00, 0x43, 0xa5, 0x02, - 0x0d, 0x0f, 0x40, 0x4d, 0xd8, 0x81, 0x12, 0x0f, 0x00, 0x53, 0x06, 0x49, - 0x11, 0x0f, 0x40, 0x0a, 0x6f, 0xa8, 0x18, 0x04, 0x3f, 0x9e, 0x01, 0xff, - 0x44, 0xa4, 0x02, 0x0e, 0x0f, 0x00, 0x45, 0x59, 0x39, 0xd2, 0x0f, 0xc0, - 0x00, 0x45, 0x1f, 0x04, 0x10, 0x0f, 0x40, 0x47, 0xc2, 0x78, 0x35, 0x0f, - 0x00, 0x4a, 0x9b, 0xae, 0x37, 0x0f, 0x40, 0x06, 0x4e, 0x16, 0x06, 0x51, - 0xe2, 0x5c, 0x0b, 0x0f, 0x40, 0x5b, 0xf0, 0x19, 0xd3, 0x0f, 0x00, 0x4f, - 0xfc, 0x19, 0x04, 0x0f, 0x40, 0x04, 0xdd, 0x02, 0x11, 0x0b, 0xf0, 0xa1, - 0x01, 0xff, 0x42, 0xbb, 0x01, 0x3b, 0x0f, 0x00, 0x42, 0x10, 0x00, 0x3a, - 0x0f, 0x40, 0x45, 0x59, 0x39, 0x14, 0x0f, 0x00, 0x08, 0xfc, 0x19, 0x01, - 0xff, 0x04, 0x9e, 0xe9, 0x06, 0x4b, 0xa3, 0xa1, 0x01, 0x0f, 0x40, 0x4d, - 0xcb, 0x81, 0x03, 0x0f, 0x00, 0x4c, 0xf5, 0x92, 0x02, 0x0f, 0x40, 0x05, - 0xd8, 0x97, 0x17, 0x46, 0x6a, 0xd9, 0x38, 0x0f, 0x00, 0x07, 0x9f, 0x83, - 0x01, 0xff, 0x5b, 0x0b, 0x1a, 0xd4, 0x0f, 0x00, 0x4f, 0x17, 0x1a, 0x05, - 0x0f, 0x40, 0x0c, 0xe9, 0x89, 0x06, 0x54, 0xd3, 0x45, 0x06, 0x0f, 0x40, - 0x4c, 0xe3, 0x7d, 0x36, 0x0f, 0x00, 0x4b, 0x36, 0x9d, 0x13, 0x0f, 0x40, - 0x09, 0x86, 0xb8, 0x18, 0xb3, 0x01, 0xff, 0x49, 0x9b, 0xb5, 0x34, 0x0f, - 0x00, 0xab, 0x01, 0xff, 0x54, 0x2f, 0x3f, 0xd0, 0x0f, 0x00, 0x4a, 0xad, - 0xb0, 0x09, 0x0f, 0x40, 0x4c, 0xdf, 0x34, 0xd0, 0x0f, 0x00, 0x47, 0xfc, - 0x19, 0x0a, 0x0f, 0x40, 0x42, 0xbb, 0x01, 0x3d, 0x0f, 0x00, 0x42, 0x10, - 0x00, 0x3c, 0x0f, 0x40, 0x06, 0xc2, 0x05, 0x11, 0x0d, 0xfe, 0x84, 0x01, - 0xff, 0x4a, 0x53, 0xa6, 0x15, 0x0f, 0x00, 0x4a, 0xa9, 0xaa, 0x16, 0x0f, - 0x40, 0x42, 0x2e, 0x25, 0x60, 0x0f, 0x00, 0xe1, 0x68, 0x0f, 0x00, 0xa2, - 0xf7, 0x01, 0xa3, 0xea, 0x01, 0xa4, 0xc4, 0x01, 0x4d, 0x63, 0x81, 0x6a, - 0x0f, 0x00, 0xa7, 0xb1, 0x01, 0x42, 0x22, 0x00, 0x67, 0x0f, 0x00, 0x42, - 0xbd, 0x26, 0x47, 0x0f, 0x00, 0xab, 0x8c, 0x01, 0x42, 0x74, 0x00, 0x63, - 0x0f, 0x00, 0x42, 0x6c, 0x00, 0x58, 0x0f, 0x00, 0xae, 0x68, 0xb0, 0x5c, - 0xb2, 0x50, 0xb3, 0x3e, 0xb4, 0x19, 0x42, 0xa9, 0x01, 0x5d, 0x0f, 0x00, - 0x42, 0x34, 0x22, 0x61, 0x0f, 0x00, 0xba, 0x01, 0xff, 0xe1, 0x5f, 0x0f, - 0x00, 0x42, 0x22, 0x00, 0x5e, 0x0f, 0x40, 0xe1, 0x4f, 0x0f, 0x00, 0x42, - 0x22, 0x00, 0x50, 0x0f, 0x00, 0xb3, 0x0d, 0xb4, 0x01, 0xff, 0xe1, 0x4a, - 0x0f, 0x00, 0x42, 0x22, 0x00, 0x4b, 0x0f, 0x40, 0xe1, 0x59, 0x0f, 0x00, - 0x42, 0x22, 0x00, 0x5a, 0x0f, 0x40, 0xe1, 0x66, 0x0f, 0x00, 0x42, 0x22, - 0x00, 0x64, 0x0f, 0x00, 0x42, 0x15, 0x06, 0x65, 0x0f, 0x40, 0xe1, 0x62, - 0x0f, 0x00, 0x42, 0x71, 0x00, 0x6c, 0x0f, 0x40, 0xe1, 0x54, 0x0f, 0x00, - 0x42, 0x22, 0x00, 0x55, 0x0f, 0x40, 0xe1, 0x53, 0x0f, 0x00, 0x42, 0x24, - 0x02, 0x44, 0x0f, 0x00, 0x42, 0xff, 0x04, 0x4e, 0x0f, 0x00, 0x42, 0x34, - 0x22, 0x49, 0x0f, 0x40, 0xe1, 0x40, 0x0f, 0x00, 0x42, 0x22, 0x00, 0x41, - 0x0f, 0x00, 0x42, 0x1b, 0x02, 0x6b, 0x0f, 0x00, 0x43, 0x59, 0x20, 0x69, - 0x0f, 0x40, 0xe1, 0x42, 0x0f, 0x00, 0x42, 0x22, 0x00, 0x43, 0x0f, 0x40, - 0xe1, 0x51, 0x0f, 0x00, 0xa4, 0x13, 0x42, 0x22, 0x00, 0x52, 0x0f, 0x00, - 0xba, 0x01, 0xff, 0xe1, 0x5b, 0x0f, 0x00, 0x42, 0x22, 0x00, 0x5c, 0x0f, - 0x40, 0xe1, 0x4c, 0x0f, 0x00, 0x42, 0x22, 0x00, 0x4d, 0x0f, 0x40, 0xe1, - 0x45, 0x0f, 0x00, 0x42, 0x22, 0x00, 0x46, 0x0f, 0x40, 0xe1, 0x56, 0x0f, - 0x00, 0x42, 0x22, 0x00, 0x57, 0x0f, 0x40, 0x4d, 0xe2, 0x7d, 0xbf, 0x0f, - 0x40, 0x45, 0xc3, 0x0a, 0x28, 0x0f, 0x00, 0xa6, 0x74, 0x05, 0x22, 0x00, - 0x2e, 0x44, 0x46, 0x2a, 0x29, 0x0f, 0x00, 0x43, 0xbf, 0x0a, 0x21, 0x0f, - 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xa1, 0x1d, 0x20, 0x0f, 0x40, 0x44, - 0x25, 0x01, 0x23, 0x0f, 0x00, 0x42, 0x15, 0x02, 0x22, 0x0f, 0x40, 0x44, - 0x27, 0x1d, 0x27, 0x0f, 0x00, 0x42, 0x60, 0x25, 0x26, 0x0f, 0x40, 0x45, - 0xc3, 0x0a, 0x31, 0x0f, 0x00, 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0x32, 0x0f, - 0x00, 0x43, 0xbf, 0x0a, 0x2a, 0x0f, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, - 0xa1, 0x1d, 0x33, 0x0f, 0x40, 0x44, 0x25, 0x01, 0x2c, 0x0f, 0x00, 0x42, - 0x15, 0x02, 0x2b, 0x0f, 0x40, 0x44, 0x27, 0x1d, 0x30, 0x0f, 0x00, 0x42, - 0x60, 0x25, 0x2f, 0x0f, 0x40, 0x43, 0xa7, 0x05, 0x2e, 0x0f, 0x00, 0x43, - 0xcb, 0x06, 0x2d, 0x0f, 0x40, 0x43, 0xa7, 0x05, 0x25, 0x0f, 0x00, 0x43, - 0xcb, 0x06, 0x24, 0x0f, 0x40, 0x49, 0x9f, 0xb4, 0xc2, 0x0f, 0x00, 0x4a, - 0xe7, 0xa8, 0xc0, 0x0f, 0x00, 0x4a, 0xb3, 0xaa, 0xc1, 0x0f, 0x00, 0x4a, - 0x73, 0xae, 0xc3, 0x0f, 0x40, 0x49, 0xb9, 0xb2, 0x18, 0x0f, 0x00, 0xb3, - 0x01, 0xff, 0x4b, 0x00, 0x99, 0x19, 0x0f, 0x00, 0x54, 0x9b, 0x41, 0x17, - 0x0f, 0x40, 0xa1, 0xb7, 0x02, 0x02, 0x33, 0x00, 0x8b, 0x02, 0xa9, 0xe3, - 0x01, 0xaf, 0xd4, 0x01, 0x03, 0x26, 0x01, 0x24, 0xb5, 0x01, 0xff, 0x04, - 0x7f, 0x8f, 0x11, 0x04, 0x4d, 0x1a, 0x01, 0xff, 0x4f, 0xa8, 0x67, 0xc8, - 0x26, 0x00, 0x45, 0xfa, 0xe7, 0x08, 0x26, 0x40, 0x49, 0x77, 0xb5, 0x4e, - 0xf4, 0x01, 0x47, 0x08, 0xd4, 0x4d, 0xf4, 0x41, 0x80, 0x41, 0x8d, 0x01, - 0xff, 0x02, 0x06, 0x00, 0x0c, 0x47, 0x3b, 0xc0, 0x3b, 0x2e, 0x00, 0x4c, - 0xc0, 0x7e, 0x04, 0x20, 0x40, 0x63, 0x66, 0x0a, 0xa3, 0x27, 0x00, 0x6c, - 0xbe, 0x01, 0x9b, 0x2b, 0x00, 0x6b, 0x42, 0x02, 0x99, 0x2b, 0x00, 0x0c, - 0x15, 0x94, 0x01, 0xff, 0x5f, 0xff, 0x10, 0x98, 0x2b, 0x00, 0x0b, 0xb3, - 0x02, 0x01, 0xff, 0x49, 0xe1, 0x01, 0xa2, 0x27, 0x00, 0x55, 0xd5, 0x01, - 0x9a, 0x2b, 0x40, 0x4c, 0x45, 0x8b, 0xb1, 0xf5, 0x01, 0x58, 0x25, 0x27, - 0x76, 0x2a, 0x00, 0xa4, 0x4f, 0xac, 0x36, 0x53, 0x49, 0x4a, 0xa7, 0xf5, - 0x01, 0x52, 0x4b, 0x2b, 0xc2, 0xf7, 0x01, 0xb2, 0x06, 0x4e, 0x0e, 0x7b, - 0xeb, 0xf5, 0x41, 0x04, 0xc0, 0x44, 0x06, 0x50, 0x5f, 0x2e, 0xf6, 0x21, - 0x40, 0x45, 0x5c, 0x00, 0xe4, 0xf5, 0x01, 0x45, 0xf5, 0x06, 0xe5, 0xf5, - 0x01, 0x44, 0xc3, 0x00, 0xe6, 0xf5, 0x01, 0x45, 0xc8, 0x00, 0xe7, 0xf5, - 0x41, 0x4f, 0x46, 0x3d, 0x31, 0x2b, 0x00, 0x10, 0x8a, 0x62, 0x01, 0xff, - 0x44, 0xc3, 0x00, 0x9f, 0x26, 0x00, 0x45, 0xc8, 0x00, 0x9e, 0x26, 0x40, - 0x50, 0x5a, 0x62, 0xc0, 0x27, 0x00, 0x4e, 0xb5, 0x0b, 0x56, 0x20, 0x40, - 0x49, 0xe5, 0xb9, 0x74, 0xfa, 0x01, 0x4c, 0x51, 0x94, 0xad, 0xf4, 0x41, - 0xae, 0x06, 0x4e, 0x12, 0x7a, 0x49, 0xf9, 0x41, 0x80, 0x06, 0x49, 0x24, - 0xae, 0x14, 0xf9, 0x41, 0x4b, 0x9f, 0x5f, 0xa1, 0xf7, 0x01, 0xb3, 0x01, - 0xff, 0x46, 0xa7, 0x18, 0xa8, 0xf7, 0x01, 0x44, 0x88, 0x4b, 0x09, 0x20, - 0x40, 0xa5, 0x11, 0x02, 0x98, 0x07, 0x01, 0xff, 0x47, 0xb0, 0xcd, 0xe7, - 0x29, 0x00, 0x45, 0xf6, 0xa8, 0x21, 0xf3, 0x41, 0x80, 0x06, 0x44, 0x1b, - 0x61, 0x34, 0x22, 0x40, 0x4e, 0x96, 0x75, 0x04, 0x22, 0x00, 0x46, 0xb0, - 0xd8, 0x03, 0x22, 0x40, 0x04, 0xfc, 0x11, 0xfc, 0x04, 0x02, 0xc6, 0x03, - 0x01, 0xff, 0xa3, 0x47, 0x06, 0xc4, 0x06, 0x01, 0xff, 0x45, 0xc3, 0x0a, - 0x58, 0x0e, 0x00, 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0x59, 0x0e, 0x00, 0x43, - 0xbf, 0x0a, 0x51, 0x0e, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xa1, 0x1d, - 0x50, 0x0e, 0x40, 0x44, 0x25, 0x01, 0x53, 0x0e, 0x00, 0x42, 0x15, 0x02, - 0x52, 0x0e, 0x40, 0x44, 0x27, 0x1d, 0x57, 0x0e, 0x00, 0x42, 0x60, 0x25, - 0x56, 0x0e, 0x40, 0x43, 0xa7, 0x05, 0x55, 0x0e, 0x00, 0x43, 0xcb, 0x06, - 0x54, 0x0e, 0x40, 0x09, 0x0c, 0x40, 0x06, 0x53, 0x08, 0x4d, 0x3f, 0x0e, - 0x40, 0x4a, 0x8b, 0xa5, 0x5a, 0x0e, 0x00, 0x49, 0x72, 0xb4, 0x1a, 0x0e, - 0x00, 0x06, 0xb4, 0xd7, 0xfc, 0x03, 0x03, 0xbd, 0x64, 0xeb, 0x03, 0x02, - 0x3d, 0x03, 0xd5, 0x03, 0x03, 0x3a, 0x70, 0xc4, 0x03, 0xab, 0x8d, 0x03, - 0xac, 0xf0, 0x02, 0xad, 0xb4, 0x02, 0xae, 0x96, 0x02, 0x45, 0x33, 0xe6, - 0x2d, 0x0e, 0x00, 0xb0, 0xde, 0x01, 0xb2, 0xd1, 0x01, 0xb3, 0x69, 0xb4, - 0x20, 0x47, 0xc5, 0xd4, 0x27, 0x0e, 0x00, 0xb9, 0x01, 0xff, 0x47, 0x03, - 0xca, 0x4e, 0x0e, 0x00, 0x03, 0x72, 0xde, 0x01, 0xff, 0x42, 0x6d, 0x00, - 0x22, 0x0e, 0x00, 0x43, 0xa1, 0x01, 0x0d, 0x0e, 0x40, 0xa8, 0x11, 0x02, - 0x7b, 0x02, 0x01, 0xff, 0x45, 0x9c, 0xe6, 0x0f, 0x0e, 0x00, 0x43, 0x6c, - 0x18, 0x15, 0x0e, 0x40, 0x49, 0xd9, 0xb3, 0x4c, 0x0e, 0x00, 0x02, 0x7b, - 0x02, 0x01, 0xff, 0x4a, 0xdf, 0xab, 0x11, 0x0e, 0x00, 0x47, 0xe6, 0xd1, - 0x12, 0x0e, 0x00, 0x02, 0x53, 0x00, 0x01, 0xff, 0xa1, 0x0c, 0x43, 0x63, - 0x0e, 0x18, 0x0e, 0x00, 0x43, 0x75, 0x44, 0x16, 0x0e, 0x40, 0x43, 0x90, - 0x00, 0x17, 0x0e, 0x00, 0xee, 0x10, 0x0e, 0x40, 0x04, 0xd5, 0x15, 0x1e, - 0x02, 0x7b, 0x02, 0x01, 0xff, 0x44, 0x2e, 0xef, 0x29, 0x0e, 0x00, 0xb3, - 0x01, 0xff, 0x43, 0xe0, 0x18, 0x28, 0x0e, 0x00, 0xef, 0x0b, 0x0e, 0x00, - 0x42, 0x7d, 0x00, 0x2a, 0x0e, 0x40, 0xe1, 0x30, 0x0e, 0x80, 0x23, 0xe5, - 0x40, 0x0e, 0x00, 0xe9, 0x34, 0x0e, 0x80, 0x16, 0xef, 0x42, 0x0e, 0x00, - 0xf5, 0x38, 0x0e, 0xc0, 0x00, 0xe5, 0x36, 0x0e, 0x80, 0x04, 0xf5, 0x39, - 0x0e, 0x40, 0xe5, 0x37, 0x0e, 0x40, 0xe9, 0x35, 0x0e, 0x40, 0xe1, 0x32, - 0x0e, 0x00, 0xe5, 0x41, 0x0e, 0x00, 0x06, 0xb8, 0xd9, 0x04, 0xed, 0x33, - 0x0e, 0x40, 0x44, 0xba, 0xeb, 0x44, 0x0e, 0x00, 0x43, 0x22, 0x9f, 0x43, - 0x0e, 0x40, 0x45, 0x47, 0xe6, 0x23, 0x0e, 0x00, 0xf5, 0x24, 0x0e, 0x40, - 0x48, 0xb2, 0xc0, 0x2f, 0x0e, 0x00, 0xa8, 0x06, 0x45, 0x42, 0xe6, 0x1b, - 0x0e, 0x40, 0x45, 0x6c, 0xe4, 0x3a, 0x0e, 0x00, 0x02, 0x7b, 0x02, 0x01, - 0xff, 0x02, 0x35, 0x10, 0x06, 0x47, 0xc6, 0xd2, 0x20, 0x0e, 0x40, 0x42, - 0x1a, 0x00, 0x1e, 0x0e, 0x00, 0x43, 0x75, 0x44, 0x1c, 0x0e, 0x40, 0x46, - 0x28, 0xd9, 0x07, 0x0e, 0x00, 0x47, 0x0e, 0xcf, 0x4d, 0x0e, 0x00, 0x03, - 0x29, 0xd9, 0x01, 0xff, 0x42, 0x92, 0x01, 0x13, 0x0e, 0x00, 0xf5, 0x19, - 0x0e, 0x40, 0x02, 0x05, 0x07, 0x06, 0x44, 0x75, 0x4c, 0x21, 0x0e, 0x40, - 0x80, 0x0c, 0x46, 0x4e, 0xdd, 0x47, 0x0e, 0x00, 0x45, 0x53, 0xe9, 0x46, - 0x0e, 0x40, 0x48, 0x1a, 0xc2, 0x4b, 0x0e, 0x00, 0x42, 0x69, 0x18, 0x48, - 0x0e, 0x00, 0x48, 0x0a, 0xc4, 0x31, 0x0e, 0x00, 0xb4, 0x01, 0xff, 0x42, - 0x0b, 0x00, 0x49, 0x0e, 0x00, 0x42, 0x0d, 0x00, 0x4a, 0x0e, 0x40, 0x4a, - 0x4f, 0xa5, 0x45, 0x0e, 0x00, 0x02, 0x7b, 0x02, 0x04, 0xf5, 0x26, 0x0e, - 0x40, 0x45, 0x2d, 0xe2, 0x2c, 0x0e, 0x00, 0x44, 0xe0, 0x0a, 0x25, 0x0e, - 0x40, 0x02, 0x0b, 0x00, 0x06, 0x45, 0x3d, 0xe6, 0x01, 0x0e, 0x40, 0x80, - 0x06, 0x43, 0xc5, 0xa9, 0x5b, 0x0e, 0x40, 0x02, 0x11, 0x0c, 0x06, 0x47, - 0x48, 0xd2, 0x06, 0x0e, 0x40, 0x42, 0x05, 0x07, 0x02, 0x0e, 0x00, 0x42, - 0x10, 0x00, 0x05, 0x0e, 0x00, 0x43, 0xbd, 0x0b, 0x03, 0x0e, 0x00, 0x43, - 0x82, 0x10, 0x04, 0x0e, 0x40, 0x43, 0x0d, 0x0d, 0x2b, 0x0e, 0x00, 0x46, - 0x6e, 0xdb, 0x2e, 0x0e, 0x40, 0x43, 0xe0, 0x07, 0x1d, 0x0e, 0x80, 0x06, - 0x45, 0xf2, 0xe5, 0x4f, 0x0e, 0x40, 0xee, 0x1f, 0x0e, 0x40, 0x45, 0x0f, - 0xe2, 0x0e, 0x0e, 0x00, 0x43, 0x68, 0x18, 0x14, 0x0e, 0x40, 0x42, 0x1a, - 0x00, 0x08, 0x0e, 0x80, 0x0c, 0x43, 0xa1, 0x01, 0x09, 0x0e, 0x00, 0x42, - 0x17, 0x50, 0x0c, 0x0e, 0x40, 0xe7, 0x0a, 0x0e, 0x40, 0xa1, 0xc6, 0x02, - 0xa5, 0xb1, 0x02, 0x47, 0xeb, 0xce, 0xa8, 0x07, 0x00, 0x07, 0xc1, 0x05, - 0x20, 0xaf, 0x0c, 0x45, 0xff, 0xe7, 0xb0, 0x07, 0x00, 0x47, 0xde, 0xd3, - 0xaa, 0x07, 0x40, 0x48, 0x9a, 0xc0, 0xaf, 0x07, 0x00, 0x46, 0x54, 0xd7, - 0xae, 0x07, 0x00, 0x48, 0x52, 0xc6, 0xab, 0x07, 0x40, 0xa1, 0xf8, 0x01, - 0x43, 0x2e, 0x4f, 0x84, 0x07, 0x00, 0x49, 0xde, 0xb4, 0x97, 0x07, 0x00, - 0xa4, 0xd5, 0x01, 0x45, 0x45, 0xe3, 0x8a, 0x07, 0x00, 0xa7, 0xba, 0x01, - 0xa8, 0xab, 0x01, 0x48, 0xba, 0xc4, 0x96, 0x07, 0x00, 0xab, 0x96, 0x01, - 0xac, 0x87, 0x01, 0x45, 0x66, 0xe5, 0x89, 0x07, 0x00, 0xae, 0x73, 0x48, - 0x32, 0xc7, 0x95, 0x07, 0x00, 0x45, 0xf6, 0xe6, 0xa4, 0x07, 0x00, 0x43, - 0xcd, 0xa8, 0x83, 0x07, 0x00, 0xb3, 0x44, 0xb4, 0x25, 0x45, 0xe5, 0xe8, - 0x88, 0x07, 0x00, 0x45, 0x08, 0xe9, 0xa5, 0x07, 0x00, 0x43, 0x4e, 0xb7, - 0x94, 0x07, 0x00, 0xba, 0x01, 0xff, 0xa1, 0x04, 0xef, 0xa1, 0x07, 0x40, - 0xe1, 0x9c, 0x07, 0x00, 0x46, 0xe1, 0xb4, 0x92, 0x07, 0x40, 0x47, 0xe0, - 0xb4, 0x93, 0x07, 0x00, 0x43, 0x42, 0x40, 0x8c, 0x07, 0x80, 0x0a, 0xef, - 0xa0, 0x07, 0x00, 0x43, 0x30, 0x12, 0x98, 0x07, 0x40, 0x42, 0x5b, 0x15, - 0x9b, 0x07, 0x40, 0x45, 0xed, 0xe0, 0x9e, 0x07, 0x00, 0x44, 0x66, 0xec, - 0x90, 0x07, 0x00, 0xa8, 0x01, 0xff, 0x47, 0xe0, 0xb4, 0x81, 0x07, 0x00, - 0x44, 0x66, 0xec, 0x9d, 0x07, 0x40, 0x42, 0x31, 0x12, 0xb1, 0x07, 0x00, - 0x44, 0x5a, 0x94, 0x82, 0x07, 0x40, 0x44, 0x9f, 0x87, 0x8d, 0x07, 0x00, - 0x48, 0xdf, 0xb4, 0x85, 0x07, 0x40, 0x44, 0x46, 0xe3, 0x86, 0x07, 0x00, - 0x43, 0x42, 0x40, 0x9a, 0x07, 0x40, 0x42, 0x31, 0x12, 0x80, 0x07, 0x00, - 0x43, 0x42, 0x40, 0x99, 0x07, 0x40, 0x44, 0x46, 0xe3, 0x8e, 0x07, 0x00, - 0x45, 0xbd, 0xe3, 0xa3, 0x07, 0x00, 0x48, 0xea, 0xc5, 0x8f, 0x07, 0x40, - 0xa1, 0x06, 0x45, 0xb3, 0xe3, 0x8b, 0x07, 0x40, 0x44, 0xee, 0xe0, 0x9f, - 0x07, 0x00, 0x46, 0xe1, 0xb4, 0x91, 0x07, 0x40, 0x43, 0x45, 0x1a, 0xa2, - 0x07, 0x00, 0x44, 0xc2, 0xed, 0x87, 0x07, 0x40, 0x46, 0x30, 0xd7, 0xac, - 0x07, 0x00, 0x48, 0xda, 0xc2, 0xa9, 0x07, 0x00, 0x48, 0x0a, 0xca, 0xad, - 0x07, 0x40, 0x48, 0x92, 0xc0, 0xa7, 0x07, 0x00, 0x46, 0x24, 0xd7, 0xa6, - 0x07, 0x40, 0xa1, 0xb6, 0x0a, 0x48, 0x82, 0xc2, 0xf8, 0xf9, 0x01, 0xac, - 0xea, 0x04, 0xae, 0xd7, 0x04, 0x47, 0x2f, 0xd3, 0xea, 0xf9, 0x01, 0x0c, - 0x21, 0x94, 0x01, 0xff, 0xa1, 0xb1, 0x04, 0xa2, 0x9c, 0x04, 0xa3, 0xc4, - 0x03, 0xa4, 0xff, 0x02, 0xa5, 0xd0, 0x02, 0xa6, 0xa2, 0x02, 0xa7, 0x80, - 0x02, 0xa8, 0xf1, 0x01, 0x02, 0x9e, 0x01, 0xe0, 0x01, 0x43, 0xe2, 0x93, - 0x1d, 0xd3, 0x01, 0xab, 0xcb, 0x01, 0xac, 0xb4, 0x01, 0xad, 0x9f, 0x01, - 0xaf, 0x90, 0x01, 0xb0, 0x74, 0xb2, 0x47, 0xb3, 0x22, 0x45, 0xb3, 0xe8, - 0x3b, 0xd3, 0x01, 0x53, 0x54, 0x4d, 0x37, 0xd3, 0x01, 0x02, 0xa9, 0x01, - 0x06, 0x4c, 0x4d, 0x95, 0x11, 0xd3, 0x41, 0x45, 0xe9, 0x82, 0x17, 0xd3, - 0x01, 0x43, 0x0e, 0x21, 0x44, 0xd3, 0x41, 0x48, 0x7a, 0xc3, 0x4b, 0xd3, - 0x01, 0x46, 0x96, 0x8f, 0x45, 0xd3, 0x01, 0xb4, 0x01, 0xff, 0xaf, 0x06, - 0x46, 0x82, 0xdc, 0x29, 0xd3, 0x41, 0x45, 0xe7, 0xe6, 0x4c, 0xd3, 0x01, - 0x42, 0x32, 0x00, 0x31, 0xd3, 0x41, 0xa5, 0x06, 0x45, 0x8a, 0xe4, 0x35, - 0xd3, 0x41, 0x43, 0xd4, 0x2c, 0x14, 0xd3, 0x01, 0x45, 0x0c, 0xe5, 0x1a, - 0xd3, 0x01, 0xb3, 0x01, 0xff, 0xa9, 0x06, 0x45, 0xe2, 0xe6, 0x2e, 0xd3, - 0x41, 0x45, 0x78, 0xe2, 0x2c, 0xd3, 0x01, 0x46, 0x06, 0xdd, 0x1b, 0xd3, - 0x41, 0xa1, 0x0c, 0x4a, 0xb1, 0xa7, 0x13, 0xd3, 0x01, 0x45, 0xc7, 0xe8, - 0x2a, 0xd3, 0x41, 0x45, 0xfd, 0x65, 0x24, 0xd3, 0x01, 0x45, 0xb3, 0x8f, - 0x34, 0xd3, 0x41, 0x4b, 0xaf, 0x9d, 0x53, 0xd3, 0x01, 0x49, 0xc2, 0xbb, - 0x0d, 0xd3, 0x41, 0x46, 0x0c, 0xd7, 0x40, 0xd3, 0x01, 0x46, 0x06, 0x18, - 0x39, 0xd3, 0x01, 0x44, 0xa9, 0x85, 0x08, 0xd3, 0x41, 0xa1, 0x06, 0x45, - 0xc3, 0xe2, 0x25, 0xd3, 0x41, 0x47, 0xd7, 0xcc, 0x55, 0xd3, 0x01, 0x4a, - 0x11, 0xb1, 0x2d, 0xd3, 0x41, 0x4c, 0xad, 0x8c, 0x0a, 0xd3, 0x01, 0x46, - 0x12, 0xda, 0x27, 0xd3, 0x41, 0x46, 0xd8, 0xd7, 0x12, 0xd3, 0x01, 0x43, - 0xd1, 0x0a, 0x46, 0xd3, 0x41, 0x47, 0x36, 0xcc, 0x4d, 0xd3, 0x01, 0x4b, - 0x03, 0x51, 0x16, 0xd3, 0x41, 0x48, 0xf9, 0x56, 0x28, 0xd3, 0x81, 0x12, - 0x4c, 0x5d, 0x91, 0x2f, 0xd3, 0x01, 0x48, 0x9a, 0xc7, 0x32, 0xd3, 0x01, - 0x4a, 0x35, 0xb0, 0x3e, 0xd3, 0x41, 0x43, 0xdd, 0x05, 0x3f, 0xd3, 0x41, - 0x46, 0xb2, 0xd6, 0x50, 0xd3, 0x01, 0x45, 0xc3, 0x01, 0x36, 0xd3, 0x01, - 0xaf, 0x11, 0x03, 0x16, 0x16, 0x01, 0xff, 0x47, 0xe6, 0x02, 0x07, 0xd3, - 0x01, 0x44, 0x9a, 0x23, 0x2b, 0xd3, 0x41, 0x47, 0x83, 0xc6, 0x18, 0xd3, - 0x01, 0x47, 0x36, 0xd3, 0x56, 0xd3, 0x41, 0x43, 0xca, 0x34, 0x1c, 0xd3, - 0x01, 0x4c, 0x25, 0x90, 0x42, 0xd3, 0x01, 0xae, 0x0c, 0x47, 0x1f, 0x32, - 0x3a, 0xd3, 0x01, 0x49, 0xf5, 0xbe, 0x4a, 0xd3, 0x41, 0x48, 0x4a, 0xc2, - 0x30, 0xd3, 0x01, 0x47, 0x78, 0xcd, 0x1f, 0xd3, 0x01, 0x49, 0xe0, 0xb8, - 0x33, 0xd3, 0x41, 0x48, 0x92, 0x38, 0x48, 0xd3, 0x01, 0xa5, 0x28, 0xa9, - 0x0c, 0x44, 0xaa, 0xee, 0x43, 0xd3, 0x01, 0x45, 0xd6, 0xe8, 0x20, 0xd3, - 0x41, 0x4a, 0x15, 0xa8, 0x54, 0xd3, 0x01, 0xad, 0x06, 0x48, 0x8a, 0xc9, - 0x10, 0xd3, 0x41, 0x49, 0x35, 0xb8, 0x3c, 0xd3, 0x01, 0x44, 0x4e, 0x60, - 0x49, 0xd3, 0x41, 0x4a, 0x7b, 0xa6, 0x22, 0xd3, 0x01, 0x59, 0x93, 0x23, - 0x0f, 0xd3, 0x01, 0x47, 0x5e, 0xb5, 0x47, 0xd3, 0x41, 0x45, 0x74, 0x02, - 0x06, 0xd3, 0x01, 0x45, 0x85, 0xc3, 0x21, 0xd3, 0x01, 0x03, 0x54, 0x0d, - 0x31, 0xaf, 0x01, 0xff, 0x03, 0x22, 0x61, 0x1e, 0xae, 0x01, 0xff, 0x46, - 0x0c, 0xdd, 0x38, 0xd3, 0x01, 0xb4, 0x01, 0xff, 0x43, 0xa0, 0x0c, 0x15, - 0xd3, 0x01, 0x46, 0x75, 0x81, 0x1e, 0xd3, 0x01, 0x47, 0x56, 0xd2, 0x0b, - 0xd3, 0x41, 0x45, 0x25, 0x61, 0x4e, 0xd3, 0x01, 0x45, 0xbd, 0xc0, 0x52, - 0xd3, 0x41, 0xa5, 0x06, 0x43, 0x09, 0x18, 0x4f, 0xd3, 0x41, 0x47, 0xc2, - 0x8b, 0x3d, 0xd3, 0x01, 0x44, 0x9a, 0x23, 0x26, 0xd3, 0x41, 0x46, 0x9a, - 0x68, 0x09, 0xd3, 0x01, 0x4e, 0xde, 0x78, 0x23, 0xd3, 0x01, 0x4c, 0x65, - 0x92, 0x0e, 0xd3, 0x41, 0x4b, 0xe2, 0x97, 0x41, 0xd3, 0x01, 0x46, 0x20, - 0xd8, 0x19, 0xd3, 0x01, 0x4a, 0x8d, 0xa8, 0x51, 0xd3, 0x01, 0x45, 0x4a, - 0x40, 0x0c, 0xd3, 0x41, 0x47, 0xf2, 0x94, 0xb8, 0x20, 0x00, 0x54, 0x67, - 0x43, 0xbe, 0xf3, 0x01, 0xf4, 0xfa, 0x26, 0x40, 0xa5, 0x87, 0x05, 0x04, - 0x7e, 0xef, 0x01, 0xff, 0x4e, 0x38, 0x74, 0x56, 0x0c, 0x00, 0x06, 0xc4, - 0x06, 0xb5, 0x04, 0x0f, 0xc2, 0x6b, 0xf7, 0x03, 0x02, 0x68, 0x00, 0x9c, - 0x01, 0x05, 0x2f, 0x03, 0x4e, 0x0b, 0xd1, 0x75, 0x01, 0xff, 0xa1, 0x3b, - 0xe5, 0x46, 0x0c, 0x80, 0x32, 0xe9, 0x3f, 0x0c, 0x80, 0x29, 0xef, 0x4a, - 0x0c, 0x80, 0x20, 0xf5, 0x41, 0x0c, 0x80, 0x17, 0x08, 0x9b, 0xbe, 0x01, - 0xff, 0xec, 0x62, 0x0c, 0x80, 0x09, 0xf2, 0x43, 0x0c, 0xc0, 0x00, 0xf2, - 0x44, 0x0c, 0x40, 0xec, 0x63, 0x0c, 0x40, 0xf5, 0x42, 0x0c, 0x40, 0xef, - 0x4b, 0x0c, 0x40, 0xe9, 0x40, 0x0c, 0x40, 0xe5, 0x47, 0x0c, 0x40, 0xe1, - 0x3e, 0x0c, 0x00, 0xe9, 0x48, 0x0c, 0x00, 0xf5, 0x4c, 0x0c, 0x40, 0xa1, - 0x3c, 0xa3, 0x23, 0x45, 0x5a, 0x3e, 0x3c, 0x0c, 0x00, 0x47, 0x0c, 0xd3, - 0x77, 0x0c, 0x00, 0x45, 0x81, 0xe8, 0x7f, 0x0c, 0x00, 0x02, 0x02, 0x00, - 0x01, 0xff, 0x44, 0x5d, 0x23, 0x4d, 0x0c, 0x00, 0x45, 0xa3, 0x4a, 0x03, - 0x0c, 0x40, 0x4a, 0x50, 0x23, 0x01, 0x0c, 0x00, 0x09, 0xc7, 0x15, 0x01, - 0xff, 0x4e, 0xd0, 0x15, 0x04, 0x0c, 0x00, 0x51, 0xa3, 0x57, 0x00, 0x0c, - 0x40, 0x47, 0xd1, 0x15, 0x02, 0x0c, 0x00, 0x47, 0xf2, 0x86, 0x3d, 0x0c, - 0x40, 0x49, 0x74, 0x38, 0x55, 0x0c, 0x00, 0x05, 0xc3, 0x05, 0x01, 0xff, - 0xe1, 0x05, 0x0c, 0x80, 0xb9, 0x02, 0xa2, 0xac, 0x02, 0xa3, 0x9f, 0x02, - 0xa4, 0x80, 0x02, 0xe5, 0x0e, 0x0c, 0x80, 0xf6, 0x01, 0xa7, 0xe9, 0x01, - 0x42, 0x22, 0x00, 0x39, 0x0c, 0x00, 0xe9, 0x07, 0x0c, 0x80, 0xd9, 0x01, - 0xaa, 0xcc, 0x01, 0xab, 0xbf, 0x01, 0xac, 0xab, 0x01, 0x42, 0x6c, 0x00, - 0x2e, 0x0c, 0x00, 0xae, 0x85, 0x01, 0xef, 0x12, 0x0c, 0x80, 0x7c, 0xb0, - 0x70, 0xb2, 0x5d, 0xb3, 0x4b, 0xb4, 0x2c, 0xf5, 0x09, 0x0c, 0x80, 0x23, - 0xb6, 0x06, 0x42, 0x34, 0x22, 0x2f, 0x0c, 0x40, 0xe1, 0x35, 0x0c, 0x00, - 0x07, 0x9c, 0xbe, 0x01, 0xff, 0xec, 0x0c, 0x0c, 0x80, 0x09, 0xf2, 0x0b, - 0x0c, 0xc0, 0x00, 0xf2, 0x60, 0x0c, 0x40, 0xec, 0x61, 0x0c, 0x40, 0xf5, - 0x0a, 0x0c, 0x40, 0xe1, 0x24, 0x0c, 0x00, 0x42, 0x22, 0x00, 0x25, 0x0c, - 0x00, 0x42, 0x15, 0x06, 0x58, 0x0c, 0x00, 0xb4, 0x01, 0xff, 0xe1, 0x1f, - 0x0c, 0x00, 0x42, 0x22, 0x00, 0x20, 0x0c, 0x40, 0xe1, 0x38, 0x0c, 0x00, - 0x42, 0x22, 0x00, 0x36, 0x0c, 0x00, 0x42, 0x15, 0x06, 0x37, 0x0c, 0x40, - 0xe1, 0x30, 0x0c, 0x00, 0xb2, 0x01, 0xff, 0xe1, 0x31, 0x0c, 0x00, 0x42, - 0x71, 0x00, 0x5a, 0x0c, 0x40, 0xe1, 0x2a, 0x0c, 0x00, 0x42, 0x22, 0x00, - 0x2b, 0x0c, 0x40, 0xef, 0x13, 0x0c, 0x40, 0xe1, 0x28, 0x0c, 0x80, 0x12, - 0x42, 0x24, 0x02, 0x19, 0x0c, 0x00, 0x42, 0xff, 0x04, 0x23, 0x0c, 0x00, - 0x42, 0x34, 0x22, 0x1e, 0x0c, 0x40, 0x4b, 0xd6, 0x9b, 0x5d, 0x0c, 0x40, - 0xe1, 0x32, 0x0c, 0x00, 0xac, 0x01, 0xff, 0xe1, 0x33, 0x0c, 0x00, 0x42, - 0x74, 0x00, 0x34, 0x0c, 0x40, 0xe1, 0x15, 0x0c, 0x00, 0x42, 0x22, 0x00, - 0x16, 0x0c, 0x40, 0xe1, 0x1c, 0x0c, 0x00, 0x42, 0x22, 0x00, 0x1d, 0x0c, - 0x40, 0xe9, 0x08, 0x0c, 0x40, 0xe1, 0x17, 0x0c, 0x00, 0x42, 0x22, 0x00, - 0x18, 0x0c, 0x40, 0xe5, 0x0f, 0x0c, 0x40, 0xe1, 0x26, 0x0c, 0x00, 0xa4, - 0x0c, 0x42, 0x22, 0x00, 0x27, 0x0c, 0x00, 0x42, 0x59, 0x00, 0x59, 0x0c, - 0x40, 0xe1, 0x21, 0x0c, 0x00, 0x42, 0x22, 0x00, 0x22, 0x0c, 0x40, 0xe1, - 0x1a, 0x0c, 0x00, 0x42, 0x22, 0x00, 0x1b, 0x0c, 0x40, 0xe1, 0x2c, 0x0c, - 0x00, 0x42, 0x22, 0x00, 0x2d, 0x0c, 0x40, 0xe1, 0x06, 0x0c, 0x00, 0xe9, - 0x10, 0x0c, 0x00, 0xf5, 0x14, 0x0c, 0x40, 0x08, 0xaa, 0xc6, 0x29, 0xb4, - 0x06, 0x5b, 0xa1, 0x1d, 0x78, 0x0c, 0x40, 0x09, 0x66, 0xb7, 0x11, 0x07, - 0xb7, 0xd4, 0x01, 0xff, 0x53, 0x0f, 0x48, 0x7d, 0x0c, 0x00, 0x52, 0xaa, - 0x1d, 0x7a, 0x0c, 0x40, 0x53, 0x0f, 0x48, 0x7e, 0x0c, 0x00, 0x52, 0xaa, - 0x1d, 0x7b, 0x0c, 0x40, 0x53, 0x0f, 0x48, 0x7c, 0x0c, 0x00, 0x52, 0xaa, - 0x1d, 0x79, 0x0c, 0x40, 0x45, 0xc3, 0x0a, 0x6e, 0x0c, 0x00, 0xa6, 0x2e, - 0x44, 0x46, 0x2a, 0x6f, 0x0c, 0x00, 0x43, 0xbf, 0x0a, 0x67, 0x0c, 0x00, - 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xa1, 0x1d, 0x66, 0x0c, 0x40, 0x44, 0x25, - 0x01, 0x69, 0x0c, 0x00, 0x42, 0x15, 0x02, 0x68, 0x0c, 0x40, 0x44, 0x27, - 0x1d, 0x6d, 0x0c, 0x00, 0x42, 0x60, 0x25, 0x6c, 0x0c, 0x40, 0x43, 0xa7, - 0x05, 0x6b, 0x0c, 0x00, 0x43, 0xcb, 0x06, 0x6a, 0x0c, 0x40, 0x06, 0x4a, - 0x3c, 0x0c, 0x45, 0xd5, 0xc8, 0x2d, 0xf5, 0x01, 0x46, 0xf4, 0x31, 0xfa, - 0xf4, 0x41, 0x4d, 0x78, 0x83, 0x06, 0x27, 0x00, 0x4f, 0x91, 0x6f, 0x80, - 0xf5, 0x01, 0x03, 0x3a, 0x0d, 0x06, 0x44, 0x2f, 0x03, 0x21, 0x21, 0x40, - 0x45, 0x53, 0x3c, 0xde, 0xf4, 0x81, 0x06, 0x45, 0x57, 0x87, 0x15, 0x23, - 0x40, 0x4a, 0x37, 0xa4, 0x7c, 0xf5, 0x41, 0x52, 0xac, 0x4f, 0x75, 0xf3, - 0x01, 0x43, 0xf3, 0x43, 0xd6, 0xfa, 0x01, 0xb2, 0x01, 0xff, 0x4d, 0xa5, - 0x7e, 0xc6, 0xf4, 0x01, 0x05, 0xd7, 0x0c, 0x01, 0xff, 0x57, 0xff, 0x2c, - 0xba, 0x27, 0x00, 0x4f, 0x4e, 0x1c, 0x3b, 0x27, 0x40, 0x5a, 0xa6, 0x1e, - 0xd3, 0xf3, 0x01, 0x42, 0xe8, 0x04, 0x2e, 0xf3, 0x01, 0xa7, 0xe9, 0x33, - 0x02, 0xc6, 0x03, 0xa3, 0x28, 0xab, 0xf7, 0x24, 0x09, 0x78, 0xa5, 0xe6, - 0x24, 0xad, 0xa9, 0x1e, 0xae, 0x1c, 0x03, 0x3e, 0x30, 0x0c, 0x44, 0x92, - 0xef, 0x49, 0x26, 0x00, 0x42, 0x93, 0x0c, 0x95, 0xf6, 0x41, 0x49, 0xcc, - 0xb4, 0xad, 0xf5, 0x01, 0x45, 0xa3, 0xd4, 0x07, 0x27, 0x40, 0x4a, 0x13, - 0xa5, 0x8b, 0xf3, 0x01, 0xa7, 0x01, 0xff, 0x45, 0x09, 0xe3, 0x4a, 0xf3, - 0x01, 0x03, 0x0c, 0x4e, 0xff, 0x19, 0x03, 0x1c, 0x0d, 0x01, 0xff, 0x0a, - 0x99, 0xa6, 0x0f, 0xa9, 0x01, 0xff, 0x49, 0x1c, 0x27, 0x03, 0xd8, 0x00, - 0x4d, 0xb7, 0x1f, 0xe0, 0x6f, 0x41, 0x90, 0xbd, 0x16, 0x91, 0x8f, 0x13, - 0x92, 0xe1, 0x0f, 0x93, 0xb3, 0x0c, 0x94, 0x85, 0x09, 0x95, 0xd7, 0x05, - 0x96, 0xa9, 0x02, 0x97, 0x01, 0xff, 0x90, 0xfb, 0x01, 0x91, 0xd0, 0x01, - 0x92, 0xa5, 0x01, 0x93, 0x7b, 0x94, 0x51, 0x95, 0x27, 0x96, 0x01, 0xff, - 0xd0, 0xf7, 0x8a, 0x01, 0xd1, 0xf8, 0x8a, 0x01, 0xd2, 0xf9, 0x8a, 0x01, - 0xd3, 0xfa, 0x8a, 0x01, 0xd4, 0xfb, 0x8a, 0x01, 0xd5, 0xfc, 0x8a, 0x01, - 0xd6, 0xfd, 0x8a, 0x01, 0xd7, 0xfe, 0x8a, 0x01, 0xd8, 0xff, 0x8a, 0x41, - 0xd0, 0xed, 0x8a, 0x01, 0xd1, 0xee, 0x8a, 0x01, 0xd2, 0xef, 0x8a, 0x01, - 0xd3, 0xf0, 0x8a, 0x01, 0xd4, 0xf1, 0x8a, 0x01, 0xd5, 0xf2, 0x8a, 0x01, - 0xd6, 0xf3, 0x8a, 0x01, 0xd7, 0xf4, 0x8a, 0x01, 0xd8, 0xf5, 0x8a, 0x01, - 0xd9, 0xf6, 0x8a, 0x41, 0xd0, 0xe3, 0x8a, 0x01, 0xd1, 0xe4, 0x8a, 0x01, - 0xd2, 0xe5, 0x8a, 0x01, 0xd3, 0xe6, 0x8a, 0x01, 0xd4, 0xe7, 0x8a, 0x01, - 0xd5, 0xe8, 0x8a, 0x01, 0xd6, 0xe9, 0x8a, 0x01, 0xd7, 0xea, 0x8a, 0x01, - 0xd8, 0xeb, 0x8a, 0x01, 0xd9, 0xec, 0x8a, 0x41, 0xd0, 0xd9, 0x8a, 0x01, - 0xd1, 0xda, 0x8a, 0x01, 0xd2, 0xdb, 0x8a, 0x01, 0xd3, 0xdc, 0x8a, 0x01, - 0xd4, 0xdd, 0x8a, 0x01, 0xd5, 0xde, 0x8a, 0x01, 0xd6, 0xdf, 0x8a, 0x01, - 0xd7, 0xe0, 0x8a, 0x01, 0xd8, 0xe1, 0x8a, 0x01, 0xd9, 0xe2, 0x8a, 0x41, - 0xd0, 0xcf, 0x8a, 0x01, 0xd1, 0xd0, 0x8a, 0x01, 0xd2, 0xd1, 0x8a, 0x01, - 0xd3, 0xd2, 0x8a, 0x01, 0xd4, 0xd3, 0x8a, 0x01, 0xd5, 0xd4, 0x8a, 0x01, - 0xd6, 0xd5, 0x8a, 0x01, 0xd7, 0xd6, 0x8a, 0x01, 0xd8, 0xd7, 0x8a, 0x01, - 0xd9, 0xd8, 0x8a, 0x41, 0xd0, 0xc5, 0x8a, 0x01, 0xd1, 0xc6, 0x8a, 0x01, - 0xd2, 0xc7, 0x8a, 0x01, 0xd3, 0xc8, 0x8a, 0x01, 0xd4, 0xc9, 0x8a, 0x01, - 0xd5, 0xca, 0x8a, 0x01, 0xd6, 0xcb, 0x8a, 0x01, 0xd7, 0xcc, 0x8a, 0x01, - 0xd8, 0xcd, 0x8a, 0x01, 0xd9, 0xce, 0x8a, 0x41, 0xd0, 0xbb, 0x8a, 0x01, - 0xd1, 0xbc, 0x8a, 0x01, 0xd2, 0xbd, 0x8a, 0x01, 0xd3, 0xbe, 0x8a, 0x01, - 0xd4, 0xbf, 0x8a, 0x01, 0xd5, 0xc0, 0x8a, 0x01, 0xd6, 0xc1, 0x8a, 0x01, - 0xd7, 0xc2, 0x8a, 0x01, 0xd8, 0xc3, 0x8a, 0x01, 0xd9, 0xc4, 0x8a, 0x41, - 0x90, 0x80, 0x03, 0x91, 0xd5, 0x02, 0x92, 0xaa, 0x02, 0x93, 0xff, 0x01, - 0x94, 0xd4, 0x01, 0x95, 0xa9, 0x01, 0x96, 0x7f, 0x97, 0x55, 0x98, 0x2b, - 0x99, 0x01, 0xff, 0xd0, 0xb1, 0x8a, 0x01, 0xd1, 0xb2, 0x8a, 0x01, 0xd2, - 0xb3, 0x8a, 0x01, 0xd3, 0xb4, 0x8a, 0x01, 0xd4, 0xb5, 0x8a, 0x01, 0xd5, - 0xb6, 0x8a, 0x01, 0xd6, 0xb7, 0x8a, 0x01, 0xd7, 0xb8, 0x8a, 0x01, 0xd8, - 0xb9, 0x8a, 0x01, 0xd9, 0xba, 0x8a, 0x41, 0xd0, 0xa7, 0x8a, 0x01, 0xd1, - 0xa8, 0x8a, 0x01, 0xd2, 0xa9, 0x8a, 0x01, 0xd3, 0xaa, 0x8a, 0x01, 0xd4, - 0xab, 0x8a, 0x01, 0xd5, 0xac, 0x8a, 0x01, 0xd6, 0xad, 0x8a, 0x01, 0xd7, - 0xae, 0x8a, 0x01, 0xd8, 0xaf, 0x8a, 0x01, 0xd9, 0xb0, 0x8a, 0x41, 0xd0, - 0x9d, 0x8a, 0x01, 0xd1, 0x9e, 0x8a, 0x01, 0xd2, 0x9f, 0x8a, 0x01, 0xd3, - 0xa0, 0x8a, 0x01, 0xd4, 0xa1, 0x8a, 0x01, 0xd5, 0xa2, 0x8a, 0x01, 0xd6, - 0xa3, 0x8a, 0x01, 0xd7, 0xa4, 0x8a, 0x01, 0xd8, 0xa5, 0x8a, 0x01, 0xd9, - 0xa6, 0x8a, 0x41, 0xd0, 0x93, 0x8a, 0x01, 0xd1, 0x94, 0x8a, 0x01, 0xd2, - 0x95, 0x8a, 0x01, 0xd3, 0x96, 0x8a, 0x01, 0xd4, 0x97, 0x8a, 0x01, 0xd5, - 0x98, 0x8a, 0x01, 0xd6, 0x99, 0x8a, 0x01, 0xd7, 0x9a, 0x8a, 0x01, 0xd8, - 0x9b, 0x8a, 0x01, 0xd9, 0x9c, 0x8a, 0x41, 0xd0, 0x89, 0x8a, 0x01, 0xd1, - 0x8a, 0x8a, 0x01, 0xd2, 0x8b, 0x8a, 0x01, 0xd3, 0x8c, 0x8a, 0x01, 0xd4, - 0x8d, 0x8a, 0x01, 0xd5, 0x8e, 0x8a, 0x01, 0xd6, 0x8f, 0x8a, 0x01, 0xd7, - 0x90, 0x8a, 0x01, 0xd8, 0x91, 0x8a, 0x01, 0xd9, 0x92, 0x8a, 0x41, 0xd0, - 0x7f, 0x8a, 0x01, 0xd1, 0x80, 0x8a, 0x01, 0xd2, 0x81, 0x8a, 0x01, 0xd3, - 0x82, 0x8a, 0x01, 0xd4, 0x83, 0x8a, 0x01, 0xd5, 0x84, 0x8a, 0x01, 0xd6, - 0x85, 0x8a, 0x01, 0xd7, 0x86, 0x8a, 0x01, 0xd8, 0x87, 0x8a, 0x01, 0xd9, - 0x88, 0x8a, 0x41, 0xd0, 0x75, 0x8a, 0x01, 0xd1, 0x76, 0x8a, 0x01, 0xd2, - 0x77, 0x8a, 0x01, 0xd3, 0x78, 0x8a, 0x01, 0xd4, 0x79, 0x8a, 0x01, 0xd5, - 0x7a, 0x8a, 0x01, 0xd6, 0x7b, 0x8a, 0x01, 0xd7, 0x7c, 0x8a, 0x01, 0xd8, - 0x7d, 0x8a, 0x01, 0xd9, 0x7e, 0x8a, 0x41, 0xd0, 0x6b, 0x8a, 0x01, 0xd1, - 0x6c, 0x8a, 0x01, 0xd2, 0x6d, 0x8a, 0x01, 0xd3, 0x6e, 0x8a, 0x01, 0xd4, - 0x6f, 0x8a, 0x01, 0xd5, 0x70, 0x8a, 0x01, 0xd6, 0x71, 0x8a, 0x01, 0xd7, - 0x72, 0x8a, 0x01, 0xd8, 0x73, 0x8a, 0x01, 0xd9, 0x74, 0x8a, 0x41, 0xd0, - 0x61, 0x8a, 0x01, 0xd1, 0x62, 0x8a, 0x01, 0xd2, 0x63, 0x8a, 0x01, 0xd3, - 0x64, 0x8a, 0x01, 0xd4, 0x65, 0x8a, 0x01, 0xd5, 0x66, 0x8a, 0x01, 0xd6, - 0x67, 0x8a, 0x01, 0xd7, 0x68, 0x8a, 0x01, 0xd8, 0x69, 0x8a, 0x01, 0xd9, - 0x6a, 0x8a, 0x41, 0xd0, 0x57, 0x8a, 0x01, 0xd1, 0x58, 0x8a, 0x01, 0xd2, - 0x59, 0x8a, 0x01, 0xd3, 0x5a, 0x8a, 0x01, 0xd4, 0x5b, 0x8a, 0x01, 0xd5, - 0x5c, 0x8a, 0x01, 0xd6, 0x5d, 0x8a, 0x01, 0xd7, 0x5e, 0x8a, 0x01, 0xd8, - 0x5f, 0x8a, 0x01, 0xd9, 0x60, 0x8a, 0x41, 0x90, 0x80, 0x03, 0x91, 0xd5, - 0x02, 0x92, 0xaa, 0x02, 0x93, 0xff, 0x01, 0x94, 0xd4, 0x01, 0x95, 0xa9, - 0x01, 0x96, 0x7f, 0x97, 0x55, 0x98, 0x2b, 0x99, 0x01, 0xff, 0xd0, 0x4d, - 0x8a, 0x01, 0xd1, 0x4e, 0x8a, 0x01, 0xd2, 0x4f, 0x8a, 0x01, 0xd3, 0x50, - 0x8a, 0x01, 0xd4, 0x51, 0x8a, 0x01, 0xd5, 0x52, 0x8a, 0x01, 0xd6, 0x53, - 0x8a, 0x01, 0xd7, 0x54, 0x8a, 0x01, 0xd8, 0x55, 0x8a, 0x01, 0xd9, 0x56, - 0x8a, 0x41, 0xd0, 0x43, 0x8a, 0x01, 0xd1, 0x44, 0x8a, 0x01, 0xd2, 0x45, - 0x8a, 0x01, 0xd3, 0x46, 0x8a, 0x01, 0xd4, 0x47, 0x8a, 0x01, 0xd5, 0x48, - 0x8a, 0x01, 0xd6, 0x49, 0x8a, 0x01, 0xd7, 0x4a, 0x8a, 0x01, 0xd8, 0x4b, - 0x8a, 0x01, 0xd9, 0x4c, 0x8a, 0x41, 0xd0, 0x39, 0x8a, 0x01, 0xd1, 0x3a, - 0x8a, 0x01, 0xd2, 0x3b, 0x8a, 0x01, 0xd3, 0x3c, 0x8a, 0x01, 0xd4, 0x3d, - 0x8a, 0x01, 0xd5, 0x3e, 0x8a, 0x01, 0xd6, 0x3f, 0x8a, 0x01, 0xd7, 0x40, - 0x8a, 0x01, 0xd8, 0x41, 0x8a, 0x01, 0xd9, 0x42, 0x8a, 0x41, 0xd0, 0x2f, - 0x8a, 0x01, 0xd1, 0x30, 0x8a, 0x01, 0xd2, 0x31, 0x8a, 0x01, 0xd3, 0x32, - 0x8a, 0x01, 0xd4, 0x33, 0x8a, 0x01, 0xd5, 0x34, 0x8a, 0x01, 0xd6, 0x35, - 0x8a, 0x01, 0xd7, 0x36, 0x8a, 0x01, 0xd8, 0x37, 0x8a, 0x01, 0xd9, 0x38, - 0x8a, 0x41, 0xd0, 0x25, 0x8a, 0x01, 0xd1, 0x26, 0x8a, 0x01, 0xd2, 0x27, - 0x8a, 0x01, 0xd3, 0x28, 0x8a, 0x01, 0xd4, 0x29, 0x8a, 0x01, 0xd5, 0x2a, - 0x8a, 0x01, 0xd6, 0x2b, 0x8a, 0x01, 0xd7, 0x2c, 0x8a, 0x01, 0xd8, 0x2d, - 0x8a, 0x01, 0xd9, 0x2e, 0x8a, 0x41, 0xd0, 0x1b, 0x8a, 0x01, 0xd1, 0x1c, - 0x8a, 0x01, 0xd2, 0x1d, 0x8a, 0x01, 0xd3, 0x1e, 0x8a, 0x01, 0xd4, 0x1f, - 0x8a, 0x01, 0xd5, 0x20, 0x8a, 0x01, 0xd6, 0x21, 0x8a, 0x01, 0xd7, 0x22, - 0x8a, 0x01, 0xd8, 0x23, 0x8a, 0x01, 0xd9, 0x24, 0x8a, 0x41, 0xd0, 0x11, - 0x8a, 0x01, 0xd1, 0x12, 0x8a, 0x01, 0xd2, 0x13, 0x8a, 0x01, 0xd3, 0x14, - 0x8a, 0x01, 0xd4, 0x15, 0x8a, 0x01, 0xd5, 0x16, 0x8a, 0x01, 0xd6, 0x17, - 0x8a, 0x01, 0xd7, 0x18, 0x8a, 0x01, 0xd8, 0x19, 0x8a, 0x01, 0xd9, 0x1a, - 0x8a, 0x41, 0xd0, 0x07, 0x8a, 0x01, 0xd1, 0x08, 0x8a, 0x01, 0xd2, 0x09, - 0x8a, 0x01, 0xd3, 0x0a, 0x8a, 0x01, 0xd4, 0x0b, 0x8a, 0x01, 0xd5, 0x0c, - 0x8a, 0x01, 0xd6, 0x0d, 0x8a, 0x01, 0xd7, 0x0e, 0x8a, 0x01, 0xd8, 0x0f, - 0x8a, 0x01, 0xd9, 0x10, 0x8a, 0x41, 0xd0, 0xfd, 0x89, 0x01, 0xd1, 0xfe, - 0x89, 0x01, 0xd2, 0xff, 0x89, 0x01, 0xd3, 0x00, 0x8a, 0x01, 0xd4, 0x01, - 0x8a, 0x01, 0xd5, 0x02, 0x8a, 0x01, 0xd6, 0x03, 0x8a, 0x01, 0xd7, 0x04, - 0x8a, 0x01, 0xd8, 0x05, 0x8a, 0x01, 0xd9, 0x06, 0x8a, 0x41, 0xd0, 0xf3, - 0x89, 0x01, 0xd1, 0xf4, 0x89, 0x01, 0xd2, 0xf5, 0x89, 0x01, 0xd3, 0xf6, - 0x89, 0x01, 0xd4, 0xf7, 0x89, 0x01, 0xd5, 0xf8, 0x89, 0x01, 0xd6, 0xf9, - 0x89, 0x01, 0xd7, 0xfa, 0x89, 0x01, 0xd8, 0xfb, 0x89, 0x01, 0xd9, 0xfc, - 0x89, 0x41, 0x90, 0x80, 0x03, 0x91, 0xd5, 0x02, 0x92, 0xaa, 0x02, 0x93, - 0xff, 0x01, 0x94, 0xd4, 0x01, 0x95, 0xa9, 0x01, 0x96, 0x7f, 0x97, 0x55, - 0x98, 0x2b, 0x99, 0x01, 0xff, 0xd0, 0xe9, 0x89, 0x01, 0xd1, 0xea, 0x89, - 0x01, 0xd2, 0xeb, 0x89, 0x01, 0xd3, 0xec, 0x89, 0x01, 0xd4, 0xed, 0x89, - 0x01, 0xd5, 0xee, 0x89, 0x01, 0xd6, 0xef, 0x89, 0x01, 0xd7, 0xf0, 0x89, - 0x01, 0xd8, 0xf1, 0x89, 0x01, 0xd9, 0xf2, 0x89, 0x41, 0xd0, 0xdf, 0x89, - 0x01, 0xd1, 0xe0, 0x89, 0x01, 0xd2, 0xe1, 0x89, 0x01, 0xd3, 0xe2, 0x89, - 0x01, 0xd4, 0xe3, 0x89, 0x01, 0xd5, 0xe4, 0x89, 0x01, 0xd6, 0xe5, 0x89, - 0x01, 0xd7, 0xe6, 0x89, 0x01, 0xd8, 0xe7, 0x89, 0x01, 0xd9, 0xe8, 0x89, - 0x41, 0xd0, 0xd5, 0x89, 0x01, 0xd1, 0xd6, 0x89, 0x01, 0xd2, 0xd7, 0x89, - 0x01, 0xd3, 0xd8, 0x89, 0x01, 0xd4, 0xd9, 0x89, 0x01, 0xd5, 0xda, 0x89, - 0x01, 0xd6, 0xdb, 0x89, 0x01, 0xd7, 0xdc, 0x89, 0x01, 0xd8, 0xdd, 0x89, - 0x01, 0xd9, 0xde, 0x89, 0x41, 0xd0, 0xcb, 0x89, 0x01, 0xd1, 0xcc, 0x89, - 0x01, 0xd2, 0xcd, 0x89, 0x01, 0xd3, 0xce, 0x89, 0x01, 0xd4, 0xcf, 0x89, - 0x01, 0xd5, 0xd0, 0x89, 0x01, 0xd6, 0xd1, 0x89, 0x01, 0xd7, 0xd2, 0x89, - 0x01, 0xd8, 0xd3, 0x89, 0x01, 0xd9, 0xd4, 0x89, 0x41, 0xd0, 0xc1, 0x89, - 0x01, 0xd1, 0xc2, 0x89, 0x01, 0xd2, 0xc3, 0x89, 0x01, 0xd3, 0xc4, 0x89, - 0x01, 0xd4, 0xc5, 0x89, 0x01, 0xd5, 0xc6, 0x89, 0x01, 0xd6, 0xc7, 0x89, - 0x01, 0xd7, 0xc8, 0x89, 0x01, 0xd8, 0xc9, 0x89, 0x01, 0xd9, 0xca, 0x89, - 0x41, 0xd0, 0xb7, 0x89, 0x01, 0xd1, 0xb8, 0x89, 0x01, 0xd2, 0xb9, 0x89, - 0x01, 0xd3, 0xba, 0x89, 0x01, 0xd4, 0xbb, 0x89, 0x01, 0xd5, 0xbc, 0x89, - 0x01, 0xd6, 0xbd, 0x89, 0x01, 0xd7, 0xbe, 0x89, 0x01, 0xd8, 0xbf, 0x89, - 0x01, 0xd9, 0xc0, 0x89, 0x41, 0xd0, 0xad, 0x89, 0x01, 0xd1, 0xae, 0x89, - 0x01, 0xd2, 0xaf, 0x89, 0x01, 0xd3, 0xb0, 0x89, 0x01, 0xd4, 0xb1, 0x89, - 0x01, 0xd5, 0xb2, 0x89, 0x01, 0xd6, 0xb3, 0x89, 0x01, 0xd7, 0xb4, 0x89, - 0x01, 0xd8, 0xb5, 0x89, 0x01, 0xd9, 0xb6, 0x89, 0x41, 0xd0, 0xa3, 0x89, - 0x01, 0xd1, 0xa4, 0x89, 0x01, 0xd2, 0xa5, 0x89, 0x01, 0xd3, 0xa6, 0x89, - 0x01, 0xd4, 0xa7, 0x89, 0x01, 0xd5, 0xa8, 0x89, 0x01, 0xd6, 0xa9, 0x89, - 0x01, 0xd7, 0xaa, 0x89, 0x01, 0xd8, 0xab, 0x89, 0x01, 0xd9, 0xac, 0x89, - 0x41, 0xd0, 0x99, 0x89, 0x01, 0xd1, 0x9a, 0x89, 0x01, 0xd2, 0x9b, 0x89, - 0x01, 0xd3, 0x9c, 0x89, 0x01, 0xd4, 0x9d, 0x89, 0x01, 0xd5, 0x9e, 0x89, - 0x01, 0xd6, 0x9f, 0x89, 0x01, 0xd7, 0xa0, 0x89, 0x01, 0xd8, 0xa1, 0x89, - 0x01, 0xd9, 0xa2, 0x89, 0x41, 0xd0, 0x8f, 0x89, 0x01, 0xd1, 0x90, 0x89, - 0x01, 0xd2, 0x91, 0x89, 0x01, 0xd3, 0x92, 0x89, 0x01, 0xd4, 0x93, 0x89, - 0x01, 0xd5, 0x94, 0x89, 0x01, 0xd6, 0x95, 0x89, 0x01, 0xd7, 0x96, 0x89, - 0x01, 0xd8, 0x97, 0x89, 0x01, 0xd9, 0x98, 0x89, 0x41, 0x90, 0x80, 0x03, - 0x91, 0xd5, 0x02, 0x92, 0xaa, 0x02, 0x93, 0xff, 0x01, 0x94, 0xd4, 0x01, - 0x95, 0xa9, 0x01, 0x96, 0x7f, 0x97, 0x55, 0x98, 0x2b, 0x99, 0x01, 0xff, - 0xd0, 0x85, 0x89, 0x01, 0xd1, 0x86, 0x89, 0x01, 0xd2, 0x87, 0x89, 0x01, - 0xd3, 0x88, 0x89, 0x01, 0xd4, 0x89, 0x89, 0x01, 0xd5, 0x8a, 0x89, 0x01, - 0xd6, 0x8b, 0x89, 0x01, 0xd7, 0x8c, 0x89, 0x01, 0xd8, 0x8d, 0x89, 0x01, - 0xd9, 0x8e, 0x89, 0x41, 0xd0, 0x7b, 0x89, 0x01, 0xd1, 0x7c, 0x89, 0x01, - 0xd2, 0x7d, 0x89, 0x01, 0xd3, 0x7e, 0x89, 0x01, 0xd4, 0x7f, 0x89, 0x01, - 0xd5, 0x80, 0x89, 0x01, 0xd6, 0x81, 0x89, 0x01, 0xd7, 0x82, 0x89, 0x01, - 0xd8, 0x83, 0x89, 0x01, 0xd9, 0x84, 0x89, 0x41, 0xd0, 0x71, 0x89, 0x01, - 0xd1, 0x72, 0x89, 0x01, 0xd2, 0x73, 0x89, 0x01, 0xd3, 0x74, 0x89, 0x01, - 0xd4, 0x75, 0x89, 0x01, 0xd5, 0x76, 0x89, 0x01, 0xd6, 0x77, 0x89, 0x01, - 0xd7, 0x78, 0x89, 0x01, 0xd8, 0x79, 0x89, 0x01, 0xd9, 0x7a, 0x89, 0x41, - 0xd0, 0x67, 0x89, 0x01, 0xd1, 0x68, 0x89, 0x01, 0xd2, 0x69, 0x89, 0x01, - 0xd3, 0x6a, 0x89, 0x01, 0xd4, 0x6b, 0x89, 0x01, 0xd5, 0x6c, 0x89, 0x01, - 0xd6, 0x6d, 0x89, 0x01, 0xd7, 0x6e, 0x89, 0x01, 0xd8, 0x6f, 0x89, 0x01, - 0xd9, 0x70, 0x89, 0x41, 0xd0, 0x5d, 0x89, 0x01, 0xd1, 0x5e, 0x89, 0x01, - 0xd2, 0x5f, 0x89, 0x01, 0xd3, 0x60, 0x89, 0x01, 0xd4, 0x61, 0x89, 0x01, - 0xd5, 0x62, 0x89, 0x01, 0xd6, 0x63, 0x89, 0x01, 0xd7, 0x64, 0x89, 0x01, - 0xd8, 0x65, 0x89, 0x01, 0xd9, 0x66, 0x89, 0x41, 0xd0, 0x53, 0x89, 0x01, - 0xd1, 0x54, 0x89, 0x01, 0xd2, 0x55, 0x89, 0x01, 0xd3, 0x56, 0x89, 0x01, - 0xd4, 0x57, 0x89, 0x01, 0xd5, 0x58, 0x89, 0x01, 0xd6, 0x59, 0x89, 0x01, - 0xd7, 0x5a, 0x89, 0x01, 0xd8, 0x5b, 0x89, 0x01, 0xd9, 0x5c, 0x89, 0x41, - 0xd0, 0x49, 0x89, 0x01, 0xd1, 0x4a, 0x89, 0x01, 0xd2, 0x4b, 0x89, 0x01, - 0xd3, 0x4c, 0x89, 0x01, 0xd4, 0x4d, 0x89, 0x01, 0xd5, 0x4e, 0x89, 0x01, - 0xd6, 0x4f, 0x89, 0x01, 0xd7, 0x50, 0x89, 0x01, 0xd8, 0x51, 0x89, 0x01, - 0xd9, 0x52, 0x89, 0x41, 0xd0, 0x3f, 0x89, 0x01, 0xd1, 0x40, 0x89, 0x01, - 0xd2, 0x41, 0x89, 0x01, 0xd3, 0x42, 0x89, 0x01, 0xd4, 0x43, 0x89, 0x01, - 0xd5, 0x44, 0x89, 0x01, 0xd6, 0x45, 0x89, 0x01, 0xd7, 0x46, 0x89, 0x01, - 0xd8, 0x47, 0x89, 0x01, 0xd9, 0x48, 0x89, 0x41, 0xd0, 0x35, 0x89, 0x01, - 0xd1, 0x36, 0x89, 0x01, 0xd2, 0x37, 0x89, 0x01, 0xd3, 0x38, 0x89, 0x01, - 0xd4, 0x39, 0x89, 0x01, 0xd5, 0x3a, 0x89, 0x01, 0xd6, 0x3b, 0x89, 0x01, - 0xd7, 0x3c, 0x89, 0x01, 0xd8, 0x3d, 0x89, 0x01, 0xd9, 0x3e, 0x89, 0x41, - 0xd0, 0x2b, 0x89, 0x01, 0xd1, 0x2c, 0x89, 0x01, 0xd2, 0x2d, 0x89, 0x01, - 0xd3, 0x2e, 0x89, 0x01, 0xd4, 0x2f, 0x89, 0x01, 0xd5, 0x30, 0x89, 0x01, - 0xd6, 0x31, 0x89, 0x01, 0xd7, 0x32, 0x89, 0x01, 0xd8, 0x33, 0x89, 0x01, - 0xd9, 0x34, 0x89, 0x41, 0x90, 0x80, 0x03, 0x91, 0xd5, 0x02, 0x92, 0xaa, + 0x01, 0xff, 0x4b, 0x14, 0x95, 0x39, 0x2e, 0x00, 0x4e, 0x66, 0x73, 0xe6, + 0xcd, 0x41, 0x4c, 0xd7, 0x21, 0x5a, 0x2e, 0x00, 0x09, 0x5d, 0x63, 0x01, + 0xff, 0x44, 0x05, 0x44, 0x5c, 0xcc, 0x01, 0x0c, 0x7b, 0x96, 0x01, 0xff, + 0xd1, 0xe8, 0xcd, 0x01, 0xd2, 0xea, 0xcd, 0x41, 0x4c, 0xd7, 0x21, 0x59, + 0x2e, 0x00, 0x09, 0x5d, 0x63, 0x01, 0xff, 0x44, 0x05, 0x44, 0x5a, 0xcc, + 0x01, 0x0c, 0x7b, 0x96, 0x01, 0xff, 0xd1, 0xec, 0xcd, 0x01, 0xd2, 0xee, + 0xcd, 0x41, 0x14, 0xfc, 0x43, 0x11, 0x0f, 0x57, 0x63, 0x01, 0xff, 0x44, + 0x05, 0x44, 0x5b, 0xcc, 0x01, 0x45, 0x7b, 0x96, 0xf0, 0xcd, 0x41, 0xd1, + 0xf6, 0xcd, 0x01, 0xd2, 0xf7, 0xcd, 0x41, 0x53, 0x61, 0x10, 0x3a, 0x29, + 0x80, 0x06, 0x5a, 0x7c, 0x1f, 0x3c, 0x29, 0x40, 0x4a, 0x7d, 0xa6, 0x3d, + 0x29, 0x40, 0x44, 0x79, 0x85, 0xf0, 0xf9, 0x01, 0x42, 0x53, 0x00, 0xb7, + 0xf9, 0xc1, 0x00, 0x45, 0xcb, 0xb5, 0xa5, 0xfa, 0x41, 0x06, 0xef, 0x06, + 0xd1, 0x01, 0x07, 0xec, 0x05, 0x16, 0x05, 0x5a, 0x03, 0x06, 0x45, 0xd7, + 0xeb, 0xdb, 0x1d, 0x41, 0x46, 0x62, 0xdc, 0xda, 0x1d, 0x01, 0x44, 0x95, + 0xf2, 0xd9, 0x1d, 0x41, 0xe1, 0xb4, 0x1d, 0x81, 0xad, 0x01, 0xe2, 0xb8, + 0x1d, 0x81, 0xa3, 0x01, 0xe3, 0xc5, 0x1d, 0x81, 0x99, 0x01, 0xe4, 0xbd, + 0x1d, 0x81, 0x86, 0x01, 0xe5, 0xb1, 0x1d, 0x01, 0xe7, 0xcc, 0x1d, 0x81, + 0x79, 0xe8, 0xd5, 0x1d, 0x01, 0xe9, 0xb0, 0x1d, 0x01, 0xea, 0xc7, 0x1d, + 0x81, 0x68, 0xeb, 0xca, 0x1d, 0x81, 0x5f, 0xec, 0xd1, 0x1d, 0x01, 0xed, + 0xba, 0x1d, 0x01, 0xee, 0xbf, 0x1d, 0x81, 0x41, 0xef, 0xb3, 0x1d, 0x01, + 0xf0, 0xb6, 0x1d, 0x81, 0x34, 0xf2, 0xd0, 0x1d, 0x81, 0x26, 0xf3, 0xd4, + 0x1d, 0x01, 0xf4, 0xbb, 0x1d, 0x81, 0x10, 0xf5, 0xb2, 0x1d, 0x01, 0xf6, + 0xd2, 0x1d, 0x01, 0xf8, 0xd6, 0x1d, 0x01, 0xf9, 0xcf, 0x1d, 0x41, 0xe8, + 0xbc, 0x1d, 0x01, 0xf4, 0xc0, 0x1d, 0xc1, 0x00, 0xe8, 0xc1, 0x1d, 0x41, + 0xf2, 0xd7, 0x1d, 0xc1, 0x00, 0xe8, 0xd8, 0x1d, 0x41, 0xe8, 0xb7, 0x1d, + 0x41, 0xe7, 0xce, 0x1d, 0x01, 0xee, 0xc4, 0x1d, 0x81, 0x04, 0xf9, 0xc9, + 0x1d, 0x41, 0xf9, 0xd3, 0x1d, 0x41, 0xe8, 0xcb, 0x1d, 0x41, 0xe8, 0xc8, + 0x1d, 0x41, 0xe8, 0xcd, 0x1d, 0x41, 0xe4, 0xc2, 0x1d, 0x81, 0x04, 0xe8, + 0xbe, 0x1d, 0x41, 0xe8, 0xc3, 0x1d, 0x41, 0xe8, 0xc6, 0x1d, 0x41, 0xe8, + 0xb9, 0x1d, 0x41, 0xe1, 0xb5, 0x1d, 0x41, 0x45, 0x12, 0x0b, 0xe8, 0x1d, + 0x01, 0xa6, 0x2e, 0x44, 0xcf, 0x2a, 0xe9, 0x1d, 0x01, 0x43, 0x0e, 0x0b, + 0xe1, 0x1d, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, 0xe0, 0x1d, + 0x41, 0x44, 0x25, 0x01, 0xe3, 0x1d, 0x01, 0x42, 0x15, 0x02, 0xe2, 0x1d, + 0x41, 0x44, 0xc9, 0x1d, 0xe7, 0x1d, 0x01, 0x42, 0x01, 0x26, 0xe6, 0x1d, + 0x41, 0x43, 0xd2, 0x05, 0xe5, 0x1d, 0x01, 0x43, 0xf6, 0x06, 0xe4, 0x1d, + 0x41, 0xe1, 0xc0, 0x05, 0x81, 0xa9, 0x02, 0x42, 0x16, 0x00, 0xc2, 0x05, + 0x01, 0xa3, 0x96, 0x02, 0xa4, 0x89, 0x02, 0xe5, 0xca, 0x05, 0x81, 0xff, + 0x01, 0x42, 0x0c, 0x08, 0xcb, 0x05, 0x01, 0xa7, 0xe6, 0x01, 0xa8, 0xd9, + 0x01, 0xe9, 0xd2, 0x05, 0x01, 0xaa, 0xca, 0x01, 0xab, 0xbd, 0x01, 0xac, + 0xb0, 0x01, 0xad, 0xa3, 0x01, 0xae, 0x78, 0xef, 0xda, 0x05, 0x81, 0x6f, + 0xb0, 0x63, 0x42, 0x43, 0x14, 0xdc, 0x05, 0x01, 0xb2, 0x51, 0xb3, 0x33, + 0xb4, 0x27, 0xf5, 0xe4, 0x05, 0x01, 0x42, 0xf5, 0x0a, 0xe5, 0x05, 0x01, + 0xb8, 0x11, 0xf9, 0xea, 0x05, 0x01, 0xba, 0x01, 0xff, 0xe1, 0xec, 0x05, + 0x01, 0x42, 0x22, 0x00, 0xed, 0x05, 0x41, 0xe1, 0xe6, 0x05, 0x01, 0x42, + 0x22, 0x00, 0xe8, 0x05, 0x41, 0xe1, 0xe2, 0x05, 0x01, 0x42, 0x22, 0x00, + 0xe3, 0x05, 0x41, 0xe1, 0xdf, 0x05, 0x01, 0xa8, 0x0c, 0x43, 0x51, 0x27, + 0xf0, 0x05, 0x01, 0x42, 0x12, 0x00, 0xef, 0x05, 0x41, 0xe1, 0xe0, 0x05, + 0x01, 0x42, 0x12, 0x00, 0xe1, 0x05, 0x41, 0xe1, 0xdd, 0x05, 0x01, 0x42, + 0x71, 0x00, 0xde, 0x05, 0x41, 0xe1, 0xdb, 0x05, 0x01, 0x42, 0x40, 0x06, + 0xf2, 0x05, 0x41, 0xef, 0xf3, 0x05, 0x41, 0xe1, 0xd8, 0x05, 0x01, 0x42, + 0xf0, 0x10, 0xc7, 0x05, 0x01, 0xa7, 0x13, 0x43, 0xda, 0xb5, 0xd9, 0x05, + 0x01, 0xb8, 0x01, 0xff, 0xe1, 0xe7, 0x05, 0x01, 0x42, 0x22, 0x00, 0xe9, + 0x05, 0x41, 0xe1, 0xcd, 0x05, 0x01, 0x42, 0x56, 0x19, 0xcf, 0x05, 0x41, + 0xe1, 0xd7, 0x05, 0x01, 0x42, 0x16, 0x00, 0xc3, 0x05, 0x41, 0xe1, 0xd5, + 0x05, 0x01, 0x42, 0x74, 0x00, 0xd6, 0x05, 0x41, 0xe1, 0xd4, 0x05, 0x01, + 0x42, 0x22, 0x00, 0xf1, 0x05, 0x41, 0xe1, 0xd3, 0x05, 0x01, 0xf9, 0xeb, + 0x05, 0x41, 0xe1, 0xd0, 0x05, 0x01, 0x42, 0x56, 0x19, 0xd1, 0x05, 0x41, + 0xe1, 0xcc, 0x05, 0x01, 0x42, 0x22, 0x00, 0xee, 0x05, 0x01, 0x42, 0x56, + 0x19, 0xce, 0x05, 0x41, 0xe9, 0xc9, 0x05, 0x41, 0xe1, 0xc6, 0x05, 0x01, + 0x42, 0x22, 0x00, 0xc8, 0x05, 0x41, 0xe1, 0xc4, 0x05, 0x01, 0x42, 0x22, + 0x00, 0xc5, 0x05, 0x41, 0xf3, 0xc1, 0x05, 0x41, 0x06, 0x1c, 0xda, 0xde, + 0x07, 0x44, 0x66, 0x09, 0xab, 0xf3, 0x01, 0x4f, 0x8a, 0x6c, 0xdd, 0x29, + 0x00, 0x07, 0x1d, 0xd1, 0xa6, 0x05, 0xa7, 0x90, 0x05, 0x43, 0x1b, 0x1e, + 0x7e, 0x00, 0x80, 0xbf, 0x04, 0x02, 0x2a, 0x02, 0xa3, 0x04, 0x42, 0x7d, + 0x1a, 0xfe, 0x29, 0x80, 0x95, 0x04, 0xb2, 0x01, 0xff, 0x47, 0x13, 0x15, + 0x2b, 0xf6, 0x01, 0x05, 0x2c, 0xe7, 0x11, 0x0b, 0xbc, 0xa0, 0x01, 0xff, + 0x4a, 0x7b, 0xa8, 0x52, 0x2e, 0x00, 0x42, 0xed, 0x05, 0x4a, 0x20, 0x40, + 0xa1, 0xe8, 0x03, 0x06, 0xef, 0x06, 0xa1, 0x03, 0x45, 0xbe, 0xe6, 0xc5, + 0x14, 0x01, 0x07, 0xec, 0x05, 0x85, 0x01, 0x42, 0x14, 0x05, 0xc7, 0x14, + 0x01, 0x05, 0x5a, 0x03, 0x50, 0x0b, 0x40, 0x77, 0x01, 0xff, 0xa1, 0x3d, + 0xe5, 0xb9, 0x14, 0x01, 0xe9, 0xb1, 0x14, 0x81, 0x30, 0xef, 0xbc, 0x14, + 0x01, 0x06, 0x33, 0x07, 0x20, 0xf5, 0xb3, 0x14, 0x81, 0x17, 0x08, 0x22, + 0xc1, 0x01, 0xff, 0xec, 0xb7, 0x14, 0x81, 0x09, 0xf2, 0xb5, 0x14, 0xc1, + 0x00, 0xf2, 0xb6, 0x14, 0x41, 0xec, 0xb8, 0x14, 0x41, 0xf5, 0xb4, 0x14, + 0x41, 0xe5, 0xba, 0x14, 0x01, 0xef, 0xbd, 0x14, 0x41, 0xe9, 0xb2, 0x14, + 0x41, 0xe1, 0xb0, 0x14, 0x01, 0xe9, 0xbb, 0x14, 0x01, 0xf5, 0xbe, 0x14, + 0x41, 0xa1, 0x1d, 0x4b, 0xd7, 0x23, 0xbf, 0x14, 0x01, 0x45, 0x3f, 0x3f, + 0xc3, 0x14, 0x01, 0x02, 0x02, 0x00, 0x01, 0xff, 0x44, 0xe5, 0x23, 0xc2, + 0x14, 0x01, 0x45, 0xec, 0x4b, 0xc1, 0x14, 0x41, 0x47, 0x3d, 0x16, 0xc0, + 0x14, 0x01, 0x47, 0xaf, 0x88, 0xc4, 0x14, 0x41, 0xe1, 0x81, 0x14, 0x81, + 0xff, 0x01, 0xa2, 0xf2, 0x01, 0xa3, 0xe5, 0x01, 0xa4, 0xcc, 0x01, 0xe5, + 0x8b, 0x14, 0x01, 0xa7, 0xbb, 0x01, 0x42, 0x22, 0x00, 0xaf, 0x14, 0x01, + 0xe9, 0x83, 0x14, 0x81, 0xab, 0x01, 0xaa, 0x9e, 0x01, 0xab, 0x91, 0x01, + 0x42, 0x74, 0x00, 0xaa, 0x14, 0x01, 0x42, 0x6c, 0x00, 0xa7, 0x14, 0x01, + 0xae, 0x6d, 0xef, 0x8d, 0x14, 0x01, 0xb0, 0x5d, 0x42, 0x71, 0x00, 0xa9, + 0x14, 0x01, 0xb3, 0x45, 0xb4, 0x2c, 0xf5, 0x85, 0x14, 0x81, 0x23, 0xb6, + 0x06, 0x42, 0xbc, 0x22, 0xa8, 0x14, 0x41, 0xe1, 0xab, 0x14, 0x01, 0x07, + 0x23, 0xc1, 0x01, 0xff, 0xec, 0x89, 0x14, 0x81, 0x09, 0xf2, 0x87, 0x14, + 0xc1, 0x00, 0xf2, 0x88, 0x14, 0x41, 0xec, 0x8a, 0x14, 0x41, 0xf5, 0x86, + 0x14, 0x41, 0xe1, 0x9e, 0x14, 0x01, 0x42, 0x22, 0x00, 0x9f, 0x14, 0x01, + 0xb4, 0x01, 0xff, 0xe1, 0x99, 0x14, 0x01, 0x42, 0x22, 0x00, 0x9a, 0x14, + 0x41, 0xe1, 0xae, 0x14, 0x01, 0x42, 0x22, 0x00, 0xac, 0x14, 0x01, 0x42, + 0x40, 0x06, 0xad, 0x14, 0x41, 0xe1, 0xa3, 0x14, 0x01, 0x42, 0x22, 0x00, + 0xa4, 0x14, 0x41, 0xe1, 0xa2, 0x14, 0x01, 0x42, 0x24, 0x02, 0x93, 0x14, + 0x01, 0x42, 0x2a, 0x05, 0x9d, 0x14, 0x01, 0x42, 0xbc, 0x22, 0x98, 0x14, + 0x41, 0xe1, 0x8f, 0x14, 0x01, 0x42, 0x22, 0x00, 0x90, 0x14, 0x41, 0xe1, + 0x96, 0x14, 0x01, 0x42, 0x22, 0x00, 0x97, 0x14, 0x41, 0xe9, 0x84, 0x14, + 0x41, 0xe1, 0x91, 0x14, 0x01, 0x42, 0x22, 0x00, 0x92, 0x14, 0x41, 0xe1, + 0xa0, 0x14, 0x01, 0xa4, 0x06, 0x42, 0x22, 0x00, 0xa1, 0x14, 0x41, 0xe1, + 0x9b, 0x14, 0x01, 0x42, 0x22, 0x00, 0x9c, 0x14, 0x41, 0xe1, 0x94, 0x14, + 0x01, 0x42, 0x22, 0x00, 0x95, 0x14, 0x41, 0xe1, 0xa5, 0x14, 0x01, 0x42, + 0x22, 0x00, 0xa6, 0x14, 0x41, 0xe1, 0x82, 0x14, 0x01, 0xe9, 0x8c, 0x14, + 0x01, 0xf5, 0x8e, 0x14, 0x41, 0x45, 0x12, 0x0b, 0xd8, 0x14, 0x01, 0xa6, + 0x2e, 0x44, 0xcf, 0x2a, 0xd9, 0x14, 0x01, 0x43, 0x0e, 0x0b, 0xd1, 0x14, + 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, 0xd0, 0x14, 0x41, 0x44, + 0x25, 0x01, 0xd3, 0x14, 0x01, 0x42, 0x15, 0x02, 0xd2, 0x14, 0x41, 0x44, + 0xc9, 0x1d, 0xd7, 0x14, 0x01, 0x42, 0x01, 0x26, 0xd6, 0x14, 0x41, 0x43, + 0xd2, 0x05, 0xd5, 0x14, 0x01, 0x43, 0xf6, 0x06, 0xd4, 0x14, 0x41, 0x50, + 0xdd, 0x57, 0xc6, 0x14, 0x01, 0x43, 0x5a, 0x87, 0x80, 0x14, 0x41, 0x62, + 0xf0, 0x0b, 0x3a, 0x0b, 0x41, 0x47, 0x23, 0x1b, 0xf2, 0x23, 0x00, 0x07, + 0xbc, 0x07, 0x01, 0xff, 0x4f, 0x78, 0x6f, 0xd4, 0x29, 0x00, 0x50, 0xb6, + 0x66, 0xd5, 0x29, 0x40, 0x80, 0x01, 0xff, 0x48, 0x7e, 0x1d, 0x3c, 0x22, + 0x80, 0x1b, 0x05, 0x51, 0x00, 0x01, 0xff, 0x04, 0x03, 0x0c, 0x06, 0x4a, + 0x5f, 0xb0, 0x1b, 0x2e, 0x40, 0x45, 0x5c, 0x00, 0x1e, 0x2e, 0x00, 0x45, + 0x20, 0x07, 0x1f, 0x2e, 0x40, 0x80, 0x01, 0xff, 0x06, 0x5c, 0x00, 0x11, + 0x05, 0x51, 0x00, 0x01, 0xff, 0x49, 0x3a, 0x1e, 0x6a, 0x2a, 0x00, 0x4b, + 0x27, 0xa2, 0x6b, 0x2a, 0x40, 0x4f, 0x4d, 0x1a, 0x49, 0x2b, 0x00, 0x50, + 0xb3, 0x02, 0x72, 0x29, 0x40, 0x42, 0x33, 0x00, 0x05, 0xf4, 0x81, 0x06, + 0x57, 0xcb, 0x2e, 0x45, 0x27, 0x40, 0x45, 0x0b, 0x08, 0x2f, 0xf4, 0x41, + 0x50, 0x96, 0x61, 0x7f, 0x2d, 0x00, 0x07, 0xec, 0x05, 0x0c, 0x62, 0x78, + 0x0c, 0x6f, 0x2d, 0x00, 0x4e, 0xff, 0x7b, 0x70, 0x2d, 0x40, 0xa1, 0x82, + 0x02, 0x11, 0x97, 0x58, 0xf5, 0x01, 0xb4, 0xc0, 0x01, 0xb9, 0x01, 0xff, + 0xe1, 0x30, 0x2d, 0x80, 0x15, 0xe5, 0x66, 0x2d, 0x80, 0x0c, 0xe9, 0x49, + 0x2d, 0x00, 0xef, 0x67, 0x2d, 0x00, 0xf5, 0x53, 0x2d, 0x40, 0xf9, 0x3b, + 0x2d, 0x40, 0xe1, 0x44, 0x2d, 0x00, 0xe2, 0x31, 0x2d, 0x80, 0x95, 0x01, + 0x42, 0x6d, 0x14, 0x5e, 0x2d, 0x00, 0xe4, 0x37, 0x2d, 0x80, 0x7d, 0xe6, + 0x3c, 0x2d, 0x00, 0xe7, 0x33, 0x2d, 0x80, 0x6b, 0xe8, 0x40, 0x2d, 0x80, + 0x62, 0xea, 0x36, 0x2d, 0x00, 0xeb, 0x3d, 0x2d, 0x80, 0x50, 0xec, 0x4d, + 0x2d, 0x00, 0xed, 0x4e, 0x2d, 0x00, 0xee, 0x4f, 0x2d, 0x00, 0xf0, 0x52, + 0x2d, 0x00, 0xf1, 0x47, 0x2d, 0x00, 0xf2, 0x54, 0x2d, 0x80, 0x33, 0xf3, + 0x59, 0x2d, 0x80, 0x26, 0xf4, 0x5c, 0x2d, 0x80, 0x19, 0xf6, 0x60, 0x2d, + 0x00, 0xf7, 0x61, 0x2d, 0x00, 0xf9, 0x62, 0x2d, 0x00, 0xfa, 0x63, 0x2d, + 0xc0, 0x00, 0xe8, 0x4a, 0x2d, 0x00, 0xfa, 0x65, 0x2d, 0x40, 0xe8, 0x5d, + 0x2d, 0x00, 0xf4, 0x5f, 0x2d, 0x40, 0xe8, 0x5b, 0x2d, 0x00, 0xf3, 0x5a, + 0x2d, 0x40, 0xf2, 0x55, 0x2d, 0x40, 0xe8, 0x45, 0x2d, 0xc0, 0x00, 0xe8, + 0x3f, 0x2d, 0x40, 0xe8, 0x43, 0x2d, 0x40, 0xe8, 0x56, 0x2d, 0xc0, 0x00, + 0xe8, 0x34, 0x2d, 0x40, 0xe4, 0x39, 0x2d, 0x80, 0x04, 0xe8, 0x38, 0x2d, + 0x40, 0xe8, 0x3a, 0x2d, 0x40, 0xe8, 0x32, 0x2d, 0x40, 0x4d, 0xf1, 0x80, + 0x64, 0x2d, 0x00, 0x08, 0xe0, 0xcb, 0x01, 0xff, 0xa7, 0x1d, 0xe8, 0x42, + 0x2d, 0x00, 0xeb, 0x3e, 0x2d, 0x80, 0x10, 0x42, 0x1d, 0x01, 0x51, 0x2d, + 0x00, 0xf1, 0x48, 0x2d, 0x00, 0x42, 0x54, 0x28, 0x4c, 0x2d, 0x40, 0xe8, + 0x46, 0x2d, 0x40, 0xe8, 0x57, 0x2d, 0x00, 0xee, 0x50, 0x2d, 0x40, 0xe8, + 0x41, 0x2d, 0x00, 0xea, 0x35, 0x2d, 0x40, 0x4b, 0xa7, 0x9c, 0x4b, 0x2d, + 0x00, 0x48, 0xd8, 0xcc, 0x58, 0x2d, 0x40, 0x12, 0x53, 0x50, 0x9d, 0x0b, + 0x12, 0xad, 0x50, 0x80, 0x0b, 0x06, 0xef, 0x06, 0xf3, 0x09, 0x49, 0x1f, + 0xbb, 0xbe, 0x0f, 0x80, 0xe5, 0x09, 0xac, 0xbf, 0x07, 0x05, 0xb9, 0x00, + 0xf6, 0x04, 0xb3, 0x51, 0x0b, 0x40, 0x77, 0x01, 0xff, 0x42, 0x80, 0x12, + 0x71, 0x0f, 0x00, 0xe5, 0x7a, 0x0f, 0x80, 0x3d, 0xe9, 0x72, 0x0f, 0x80, + 0x34, 0xef, 0x7c, 0x0f, 0x80, 0x2b, 0x4a, 0x23, 0xb0, 0x80, 0x0f, 0x80, + 0x20, 0xf5, 0x74, 0x0f, 0x80, 0x17, 0x08, 0x22, 0xc1, 0x01, 0xff, 0xec, + 0x78, 0x0f, 0x80, 0x09, 0xf2, 0x76, 0x0f, 0xc0, 0x00, 0xf2, 0x77, 0x0f, + 0x40, 0xec, 0x79, 0x0f, 0x40, 0xf5, 0x75, 0x0f, 0x40, 0xe9, 0x81, 0x0f, + 0x40, 0xef, 0x7d, 0x0f, 0x40, 0xe9, 0x73, 0x0f, 0x40, 0xe5, 0x7b, 0x0f, + 0x40, 0x04, 0x5b, 0x03, 0xfd, 0x02, 0x09, 0xd6, 0x67, 0x4b, 0xb9, 0x01, + 0xff, 0x49, 0x9d, 0xbb, 0x00, 0x0f, 0x00, 0x05, 0x61, 0x16, 0x01, 0xff, + 0x47, 0x75, 0xd0, 0xc4, 0x0f, 0x00, 0x46, 0x6c, 0xde, 0xc9, 0x0f, 0x80, + 0x1b, 0xb0, 0x0d, 0x47, 0x3e, 0xd5, 0xc5, 0x0f, 0xc0, 0x00, 0x4a, 0x19, + 0xa6, 0xc7, 0x0f, 0x40, 0x49, 0xac, 0xb5, 0xc6, 0x0f, 0x00, 0x46, 0xa4, + 0xdc, 0xc8, 0x0f, 0x40, 0x80, 0x01, 0xff, 0x4b, 0xd1, 0x99, 0xcc, 0x0f, + 0x00, 0x4b, 0x91, 0x9c, 0xcb, 0x0f, 0x00, 0x4b, 0x6f, 0xa0, 0xca, 0x0f, + 0x40, 0x07, 0xec, 0x05, 0x17, 0x05, 0x5a, 0x03, 0x01, 0xff, 0x51, 0x3f, + 0x5b, 0x8f, 0x0f, 0x00, 0x4b, 0x54, 0x9e, 0x8d, 0x0f, 0x00, 0x48, 0x48, + 0x5b, 0x8e, 0x0f, 0x40, 0x42, 0xcf, 0x25, 0xb0, 0x0f, 0x00, 0xe1, 0xb8, + 0x0f, 0x00, 0xa2, 0xfc, 0x01, 0xa3, 0xef, 0x01, 0xa4, 0xc9, 0x01, 0x0b, + 0xf9, 0x82, 0xb2, 0x01, 0xa7, 0xa5, 0x01, 0x42, 0x22, 0x00, 0xb7, 0x0f, + 0x00, 0x42, 0x56, 0x19, 0x97, 0x0f, 0x00, 0xab, 0x86, 0x01, 0x42, 0x74, + 0x00, 0xb3, 0x0f, 0x00, 0x42, 0x6c, 0x00, 0xa8, 0x0f, 0x00, 0xae, 0x62, + 0xb0, 0x56, 0x42, 0x71, 0x00, 0xb2, 0x0f, 0x00, 0xb3, 0x3e, 0xb4, 0x19, + 0x42, 0xa9, 0x01, 0xad, 0x0f, 0x00, 0x42, 0xbc, 0x22, 0xb1, 0x0f, 0x00, + 0xba, 0x01, 0xff, 0xe1, 0xaf, 0x0f, 0x00, 0x42, 0x22, 0x00, 0xae, 0x0f, + 0x40, 0xe1, 0x9f, 0x0f, 0x00, 0x42, 0x22, 0x00, 0xa0, 0x0f, 0x00, 0xb3, + 0x0d, 0xb4, 0x01, 0xff, 0xe1, 0x9a, 0x0f, 0x00, 0x42, 0x22, 0x00, 0x9b, + 0x0f, 0x40, 0xe1, 0xa9, 0x0f, 0x00, 0x42, 0x22, 0x00, 0xaa, 0x0f, 0x40, + 0xe1, 0xb6, 0x0f, 0x00, 0x42, 0x22, 0x00, 0xb4, 0x0f, 0x00, 0x42, 0x40, + 0x06, 0xb5, 0x0f, 0x40, 0xe1, 0xa4, 0x0f, 0x00, 0x42, 0x22, 0x00, 0xa5, + 0x0f, 0x40, 0xe1, 0xa3, 0x0f, 0x00, 0x42, 0x24, 0x02, 0x94, 0x0f, 0x00, + 0x42, 0x2a, 0x05, 0x9e, 0x0f, 0x00, 0x42, 0xbc, 0x22, 0x99, 0x0f, 0x40, + 0xe1, 0x90, 0x0f, 0x00, 0x42, 0x22, 0x00, 0x91, 0x0f, 0x00, 0x43, 0xfb, + 0x20, 0xb9, 0x0f, 0x40, 0xe1, 0x92, 0x0f, 0x00, 0x42, 0x22, 0x00, 0x93, + 0x0f, 0x40, 0x42, 0x71, 0x00, 0xbc, 0x0f, 0x00, 0x42, 0xa9, 0x01, 0xba, + 0x0f, 0x00, 0x42, 0xbc, 0x22, 0xbb, 0x0f, 0x40, 0xe1, 0xa1, 0x0f, 0x00, + 0xa4, 0x13, 0x42, 0x22, 0x00, 0xa2, 0x0f, 0x00, 0xba, 0x01, 0xff, 0xe1, + 0xab, 0x0f, 0x00, 0x42, 0x22, 0x00, 0xac, 0x0f, 0x40, 0xe1, 0x9c, 0x0f, + 0x00, 0x42, 0x22, 0x00, 0x9d, 0x0f, 0x40, 0xe1, 0x95, 0x0f, 0x00, 0x42, + 0x22, 0x00, 0x96, 0x0f, 0x40, 0xe1, 0xa6, 0x0f, 0x00, 0x42, 0x22, 0x00, + 0xa7, 0x0f, 0x40, 0x04, 0x15, 0xf0, 0x90, 0x01, 0x51, 0x3f, 0x5b, 0x8c, + 0x0f, 0x00, 0x02, 0x61, 0x1f, 0x7a, 0xad, 0x6c, 0x4e, 0x23, 0x7a, 0x82, + 0x0f, 0x00, 0xb2, 0x17, 0x48, 0x10, 0xcb, 0x83, 0x0f, 0x00, 0x02, 0xbc, + 0x22, 0x01, 0xff, 0x48, 0xa8, 0xc8, 0x87, 0x0f, 0x00, 0x47, 0x71, 0xc3, + 0x3e, 0x0f, 0x40, 0x04, 0x80, 0xbe, 0x0c, 0x4d, 0xb3, 0x84, 0x7e, 0x0f, + 0x00, 0x48, 0xc0, 0x94, 0x7f, 0x0f, 0x40, 0x05, 0x97, 0xe5, 0x1f, 0x04, + 0x59, 0xf1, 0x01, 0xff, 0xa7, 0x06, 0x49, 0x7f, 0xbe, 0xce, 0x0f, 0x40, + 0x43, 0x0a, 0xf4, 0x1d, 0x0f, 0x00, 0x44, 0x6f, 0xa0, 0x1e, 0x0f, 0x00, + 0x43, 0x16, 0x56, 0xcf, 0x0f, 0x40, 0xa7, 0x06, 0x48, 0x40, 0xca, 0x1f, + 0x0f, 0x40, 0x43, 0x0a, 0xf4, 0x1a, 0x0f, 0x00, 0x44, 0x6f, 0xa0, 0x1b, + 0x0f, 0x00, 0x43, 0x16, 0x56, 0x1c, 0x0f, 0x40, 0x48, 0x70, 0xc3, 0x3f, + 0x0f, 0x00, 0x47, 0x49, 0x5b, 0x89, 0x0f, 0x40, 0x49, 0x56, 0x9e, 0x88, + 0x0f, 0x00, 0x47, 0xb7, 0xd1, 0x86, 0x0f, 0x40, 0x4b, 0xdc, 0x99, 0x8a, + 0x0f, 0x00, 0x4b, 0x67, 0x9f, 0x8b, 0x0f, 0x40, 0x0c, 0x4f, 0x8c, 0xb3, + 0x02, 0xa2, 0x88, 0x02, 0xa3, 0xd4, 0x01, 0x55, 0x1f, 0x3a, 0x0c, 0x0f, + 0x00, 0xa7, 0x95, 0x01, 0x47, 0x71, 0xd1, 0x84, 0x0f, 0x00, 0x02, 0x9e, + 0x01, 0x75, 0x53, 0xd4, 0x4a, 0xd9, 0x0f, 0x00, 0x56, 0xa5, 0x35, 0xd1, + 0x0f, 0x00, 0xae, 0x3f, 0x46, 0xfc, 0xde, 0x85, 0x0f, 0x00, 0xb2, 0x2b, + 0xb3, 0x1d, 0xb4, 0x06, 0x55, 0x5f, 0x3f, 0x07, 0x0f, 0x40, 0x53, 0x63, + 0x4c, 0xda, 0x0f, 0x00, 0xb3, 0x01, 0xff, 0x47, 0x76, 0xce, 0x39, 0x0f, + 0x00, 0x48, 0x69, 0x3f, 0x0f, 0x0f, 0x40, 0x49, 0xde, 0xb6, 0x08, 0x0f, + 0x00, 0x43, 0xa5, 0x02, 0x0d, 0x0f, 0x40, 0x4d, 0x6e, 0x83, 0x12, 0x0f, + 0x00, 0x53, 0x4f, 0x4a, 0x11, 0x0f, 0x40, 0x0a, 0xab, 0xaa, 0x18, 0x04, + 0x70, 0xa0, 0x01, 0xff, 0x44, 0xa4, 0x02, 0x0e, 0x0f, 0x00, 0x45, 0x29, + 0x3a, 0xd2, 0x0f, 0xc0, 0x00, 0x45, 0x4a, 0x04, 0x10, 0x0f, 0x40, 0x47, + 0x23, 0x7a, 0x35, 0x0f, 0x00, 0x4a, 0xeb, 0xb0, 0x37, 0x0f, 0x40, 0x06, + 0xba, 0x16, 0x06, 0x51, 0x4d, 0x5e, 0x0b, 0x0f, 0x40, 0x5b, 0x77, 0x1a, + 0xd3, 0x0f, 0x00, 0x4f, 0x83, 0x1a, 0x04, 0x0f, 0x40, 0x04, 0x08, 0x03, + 0x11, 0x0b, 0x2c, 0xa4, 0x01, 0xff, 0x42, 0xbb, 0x01, 0x3b, 0x0f, 0x00, + 0x42, 0x10, 0x00, 0x3a, 0x0f, 0x40, 0x45, 0x29, 0x3a, 0x14, 0x0f, 0x00, + 0x08, 0x83, 0x1a, 0x01, 0xff, 0x04, 0xd1, 0xec, 0x06, 0x4b, 0xdf, 0xa3, + 0x01, 0x0f, 0x40, 0x4d, 0x61, 0x83, 0x03, 0x0f, 0x00, 0x4c, 0xbf, 0x94, + 0x02, 0x0f, 0x40, 0x05, 0xe8, 0x99, 0x17, 0x46, 0x5c, 0xdc, 0x38, 0x0f, + 0x00, 0x07, 0x4f, 0x85, 0x01, 0xff, 0x5b, 0x92, 0x1a, 0xd4, 0x0f, 0x00, + 0x4f, 0x9e, 0x1a, 0x05, 0x0f, 0x40, 0x0c, 0xb3, 0x8b, 0x06, 0x54, 0x1c, + 0x47, 0x06, 0x0f, 0x40, 0x4c, 0x52, 0x7f, 0x36, 0x0f, 0x00, 0x4b, 0x5c, + 0x9f, 0x13, 0x0f, 0x40, 0x09, 0xf2, 0xba, 0x18, 0xb3, 0x01, 0xff, 0x49, + 0xec, 0xb7, 0x34, 0x0f, 0x00, 0xab, 0x01, 0xff, 0x54, 0x28, 0x40, 0xd0, + 0x0f, 0x00, 0x4a, 0xfd, 0xb2, 0x09, 0x0f, 0x40, 0x4c, 0xaf, 0x35, 0xd0, + 0x0f, 0x00, 0x47, 0x83, 0x1a, 0x0a, 0x0f, 0x40, 0x42, 0xbb, 0x01, 0x3d, + 0x0f, 0x00, 0x42, 0x10, 0x00, 0x3c, 0x0f, 0x40, 0x06, 0xed, 0x05, 0x11, + 0x0d, 0xbb, 0x86, 0x01, 0xff, 0x4a, 0x8f, 0xa8, 0x15, 0x0f, 0x00, 0x4a, + 0xf9, 0xac, 0x16, 0x0f, 0x40, 0x42, 0xcf, 0x25, 0x60, 0x0f, 0x00, 0xe1, + 0x68, 0x0f, 0x00, 0xa2, 0xf7, 0x01, 0xa3, 0xea, 0x01, 0xa4, 0xc4, 0x01, + 0x4d, 0xf9, 0x82, 0x6a, 0x0f, 0x00, 0xa7, 0xb1, 0x01, 0x42, 0x22, 0x00, + 0x67, 0x0f, 0x00, 0x42, 0x56, 0x19, 0x47, 0x0f, 0x00, 0xab, 0x8c, 0x01, + 0x42, 0x74, 0x00, 0x63, 0x0f, 0x00, 0x42, 0x6c, 0x00, 0x58, 0x0f, 0x00, + 0xae, 0x68, 0xb0, 0x5c, 0xb2, 0x50, 0xb3, 0x3e, 0xb4, 0x19, 0x42, 0xa9, + 0x01, 0x5d, 0x0f, 0x00, 0x42, 0xbc, 0x22, 0x61, 0x0f, 0x00, 0xba, 0x01, + 0xff, 0xe1, 0x5f, 0x0f, 0x00, 0x42, 0x22, 0x00, 0x5e, 0x0f, 0x40, 0xe1, + 0x4f, 0x0f, 0x00, 0x42, 0x22, 0x00, 0x50, 0x0f, 0x00, 0xb3, 0x0d, 0xb4, + 0x01, 0xff, 0xe1, 0x4a, 0x0f, 0x00, 0x42, 0x22, 0x00, 0x4b, 0x0f, 0x40, + 0xe1, 0x59, 0x0f, 0x00, 0x42, 0x22, 0x00, 0x5a, 0x0f, 0x40, 0xe1, 0x66, + 0x0f, 0x00, 0x42, 0x22, 0x00, 0x64, 0x0f, 0x00, 0x42, 0x40, 0x06, 0x65, + 0x0f, 0x40, 0xe1, 0x62, 0x0f, 0x00, 0x42, 0x71, 0x00, 0x6c, 0x0f, 0x40, + 0xe1, 0x54, 0x0f, 0x00, 0x42, 0x22, 0x00, 0x55, 0x0f, 0x40, 0xe1, 0x53, + 0x0f, 0x00, 0x42, 0x24, 0x02, 0x44, 0x0f, 0x00, 0x42, 0x2a, 0x05, 0x4e, + 0x0f, 0x00, 0x42, 0xbc, 0x22, 0x49, 0x0f, 0x40, 0xe1, 0x40, 0x0f, 0x00, + 0x42, 0x22, 0x00, 0x41, 0x0f, 0x00, 0x42, 0x1b, 0x02, 0x6b, 0x0f, 0x00, + 0x43, 0xfb, 0x20, 0x69, 0x0f, 0x40, 0xe1, 0x42, 0x0f, 0x00, 0x42, 0x22, + 0x00, 0x43, 0x0f, 0x40, 0xe1, 0x51, 0x0f, 0x00, 0xa4, 0x13, 0x42, 0x22, + 0x00, 0x52, 0x0f, 0x00, 0xba, 0x01, 0xff, 0xe1, 0x5b, 0x0f, 0x00, 0x42, + 0x22, 0x00, 0x5c, 0x0f, 0x40, 0xe1, 0x4c, 0x0f, 0x00, 0x42, 0x22, 0x00, + 0x4d, 0x0f, 0x40, 0xe1, 0x45, 0x0f, 0x00, 0x42, 0x22, 0x00, 0x46, 0x0f, + 0x40, 0xe1, 0x56, 0x0f, 0x00, 0x42, 0x22, 0x00, 0x57, 0x0f, 0x40, 0x4d, + 0x51, 0x7f, 0xbf, 0x0f, 0x40, 0x45, 0x12, 0x0b, 0x28, 0x0f, 0x00, 0xa6, + 0x74, 0x05, 0x22, 0x00, 0x2e, 0x44, 0xcf, 0x2a, 0x29, 0x0f, 0x00, 0x43, + 0x0e, 0x0b, 0x21, 0x0f, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, + 0x20, 0x0f, 0x40, 0x44, 0x25, 0x01, 0x23, 0x0f, 0x00, 0x42, 0x15, 0x02, + 0x22, 0x0f, 0x40, 0x44, 0xc9, 0x1d, 0x27, 0x0f, 0x00, 0x42, 0x01, 0x26, + 0x26, 0x0f, 0x40, 0x45, 0x12, 0x0b, 0x31, 0x0f, 0x00, 0xa6, 0x2e, 0x44, + 0xcf, 0x2a, 0x32, 0x0f, 0x00, 0x43, 0x0e, 0x0b, 0x2a, 0x0f, 0x00, 0xb3, + 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, 0x33, 0x0f, 0x40, 0x44, 0x25, 0x01, + 0x2c, 0x0f, 0x00, 0x42, 0x15, 0x02, 0x2b, 0x0f, 0x40, 0x44, 0xc9, 0x1d, + 0x30, 0x0f, 0x00, 0x42, 0x01, 0x26, 0x2f, 0x0f, 0x40, 0x43, 0xd2, 0x05, + 0x2e, 0x0f, 0x00, 0x43, 0xf6, 0x06, 0x2d, 0x0f, 0x40, 0x43, 0xd2, 0x05, + 0x25, 0x0f, 0x00, 0x43, 0xf6, 0x06, 0x24, 0x0f, 0x40, 0x49, 0xf0, 0xb6, + 0xc2, 0x0f, 0x00, 0x4a, 0x23, 0xab, 0xc0, 0x0f, 0x00, 0x4a, 0x03, 0xad, + 0xc1, 0x0f, 0x00, 0x4a, 0xc3, 0xb0, 0xc3, 0x0f, 0x40, 0x49, 0x13, 0xb5, + 0x18, 0x0f, 0x00, 0xb3, 0x01, 0xff, 0x4b, 0x1b, 0x9b, 0x19, 0x0f, 0x00, + 0x54, 0x94, 0x42, 0x17, 0x0f, 0x40, 0xa1, 0xbd, 0x02, 0xa5, 0x8b, 0x02, + 0xa9, 0xe3, 0x01, 0xaf, 0xd4, 0x01, 0x03, 0x26, 0x01, 0x24, 0xb5, 0x01, + 0xff, 0x04, 0x31, 0x91, 0x11, 0x04, 0xd4, 0x1a, 0x01, 0xff, 0x4f, 0x24, + 0x69, 0xc8, 0x26, 0x00, 0x45, 0x1e, 0xeb, 0x08, 0x26, 0x40, 0x49, 0xc8, + 0xb7, 0x4e, 0xf4, 0x01, 0x47, 0xdb, 0xd6, 0x4d, 0xf4, 0x41, 0x80, 0x41, + 0x8d, 0x01, 0xff, 0x02, 0x06, 0x00, 0x0c, 0x47, 0xc1, 0xc2, 0x3b, 0x2e, + 0x00, 0x4c, 0x2f, 0x80, 0x04, 0x20, 0x40, 0x63, 0xb5, 0x0a, 0xa3, 0x27, + 0x00, 0x6c, 0xbe, 0x01, 0x9b, 0x2b, 0x00, 0x6b, 0x42, 0x02, 0x99, 0x2b, + 0x00, 0x0c, 0xf7, 0x95, 0x01, 0xff, 0x5f, 0x4e, 0x11, 0x98, 0x2b, 0x00, + 0x0b, 0xb3, 0x02, 0x01, 0xff, 0x49, 0xe1, 0x01, 0xa2, 0x27, 0x00, 0x55, + 0xd5, 0x01, 0x9a, 0x2b, 0x40, 0x4c, 0x03, 0x8d, 0xb1, 0xf5, 0x01, 0x58, + 0xc6, 0x27, 0x76, 0x2a, 0x00, 0xa4, 0x4f, 0xac, 0x36, 0x53, 0x92, 0x4b, + 0xa7, 0xf5, 0x01, 0x52, 0xec, 0x2b, 0xc2, 0xf7, 0x01, 0xb2, 0x06, 0x4e, + 0x6f, 0x7c, 0xeb, 0xf5, 0x41, 0x04, 0xf5, 0x45, 0x06, 0x50, 0x45, 0x2f, + 0xf6, 0x21, 0x40, 0x45, 0x5c, 0x00, 0xe4, 0xf5, 0x01, 0x45, 0x20, 0x07, + 0xe5, 0xf5, 0x01, 0x44, 0xc3, 0x00, 0xe6, 0xf5, 0x01, 0x45, 0xc8, 0x00, + 0xe7, 0xf5, 0x41, 0x4f, 0x2b, 0x3e, 0x31, 0x2b, 0x00, 0x10, 0x06, 0x64, + 0x01, 0xff, 0x44, 0xc3, 0x00, 0x9f, 0x26, 0x00, 0x45, 0xc8, 0x00, 0x9e, + 0x26, 0x40, 0x50, 0xd6, 0x63, 0xc0, 0x27, 0x00, 0x4e, 0x04, 0x0c, 0x56, + 0x20, 0x40, 0x49, 0x48, 0xbc, 0x74, 0xfa, 0x01, 0x4c, 0x3f, 0x96, 0xad, + 0xf4, 0x41, 0xae, 0x06, 0x4e, 0x73, 0x7b, 0x49, 0xf9, 0x41, 0x80, 0x06, + 0x49, 0x74, 0xb0, 0x14, 0xf9, 0x41, 0x4b, 0x1b, 0x61, 0xa1, 0xf7, 0x01, + 0xb3, 0x01, 0xff, 0x46, 0x13, 0x19, 0xa8, 0xf7, 0x01, 0x44, 0xd1, 0x4c, + 0x09, 0x20, 0x40, 0xb2, 0x06, 0x43, 0x2c, 0x46, 0xca, 0xce, 0x41, 0xa5, + 0x11, 0x02, 0xc3, 0x07, 0x01, 0xff, 0x47, 0x83, 0xd0, 0xe7, 0x29, 0x00, + 0x45, 0x32, 0xab, 0x21, 0xf3, 0x41, 0x80, 0x06, 0x44, 0x97, 0x62, 0x34, + 0x22, 0x40, 0x4e, 0x05, 0x77, 0x04, 0x22, 0x00, 0x46, 0x9c, 0xdb, 0x03, + 0x22, 0x40, 0x04, 0x4b, 0x12, 0xfc, 0x04, 0x02, 0xf1, 0x03, 0x01, 0xff, + 0xa3, 0x47, 0x06, 0xef, 0x06, 0x01, 0xff, 0x45, 0x12, 0x0b, 0x58, 0x0e, + 0x00, 0xa6, 0x2e, 0x44, 0xcf, 0x2a, 0x59, 0x0e, 0x00, 0x43, 0x0e, 0x0b, + 0x51, 0x0e, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, 0x50, 0x0e, + 0x40, 0x44, 0x25, 0x01, 0x53, 0x0e, 0x00, 0x42, 0x15, 0x02, 0x52, 0x0e, + 0x40, 0x44, 0xc9, 0x1d, 0x57, 0x0e, 0x00, 0x42, 0x01, 0x26, 0x56, 0x0e, + 0x40, 0x43, 0xd2, 0x05, 0x55, 0x0e, 0x00, 0x43, 0xf6, 0x06, 0x54, 0x0e, + 0x40, 0x09, 0x05, 0x41, 0x06, 0x53, 0x51, 0x4e, 0x3f, 0x0e, 0x40, 0x4a, + 0xc7, 0xa7, 0x5a, 0x0e, 0x00, 0x49, 0xc3, 0xb6, 0x1a, 0x0e, 0x00, 0x06, + 0x9a, 0xda, 0xfc, 0x03, 0x03, 0x39, 0x66, 0xeb, 0x03, 0x02, 0x68, 0x03, + 0xd5, 0x03, 0x03, 0xd4, 0x71, 0xc4, 0x03, 0xab, 0x8d, 0x03, 0xac, 0xf0, + 0x02, 0xad, 0xb4, 0x02, 0xae, 0x96, 0x02, 0x45, 0x57, 0xe9, 0x2d, 0x0e, + 0x00, 0xb0, 0xde, 0x01, 0xb2, 0xd1, 0x01, 0xb3, 0x69, 0xb4, 0x20, 0x47, + 0x98, 0xd7, 0x27, 0x0e, 0x00, 0xb9, 0x01, 0xff, 0x47, 0xc1, 0xcc, 0x4e, + 0x0e, 0x00, 0x03, 0x82, 0xe1, 0x01, 0xff, 0x42, 0x6d, 0x00, 0x22, 0x0e, + 0x00, 0x43, 0xa1, 0x01, 0x0d, 0x0e, 0x40, 0xa8, 0x11, 0x02, 0x7b, 0x02, + 0x01, 0xff, 0x45, 0xc0, 0xe9, 0x0f, 0x0e, 0x00, 0x43, 0xd8, 0x18, 0x15, + 0x0e, 0x40, 0x49, 0x33, 0xb6, 0x4c, 0x0e, 0x00, 0x02, 0x7b, 0x02, 0x01, + 0xff, 0x4a, 0x39, 0xae, 0x11, 0x0e, 0x00, 0x47, 0xb9, 0xd4, 0x12, 0x0e, + 0x00, 0x02, 0x53, 0x00, 0x01, 0xff, 0xa1, 0x0c, 0x43, 0xd8, 0x02, 0x18, + 0x0e, 0x00, 0x43, 0xaa, 0x45, 0x16, 0x0e, 0x40, 0x43, 0x90, 0x00, 0x17, + 0x0e, 0x00, 0xee, 0x10, 0x0e, 0x40, 0x04, 0x41, 0x16, 0x1e, 0x02, 0x7b, + 0x02, 0x01, 0xff, 0x44, 0x81, 0xf2, 0x29, 0x0e, 0x00, 0xb3, 0x01, 0xff, + 0x43, 0x4d, 0x19, 0x28, 0x0e, 0x00, 0xef, 0x0b, 0x0e, 0x00, 0x42, 0x7d, + 0x00, 0x2a, 0x0e, 0x40, 0xe1, 0x30, 0x0e, 0x80, 0x23, 0xe5, 0x40, 0x0e, + 0x00, 0xe9, 0x34, 0x0e, 0x80, 0x16, 0xef, 0x42, 0x0e, 0x00, 0xf5, 0x38, + 0x0e, 0xc0, 0x00, 0xe5, 0x36, 0x0e, 0x80, 0x04, 0xf5, 0x39, 0x0e, 0x40, + 0xe5, 0x37, 0x0e, 0x40, 0xe9, 0x35, 0x0e, 0x40, 0xe1, 0x32, 0x0e, 0x00, + 0xe5, 0x41, 0x0e, 0x00, 0x06, 0xb0, 0xdc, 0x04, 0xed, 0x33, 0x0e, 0x40, + 0x44, 0xf1, 0xee, 0x44, 0x0e, 0x00, 0x43, 0x53, 0xa1, 0x43, 0x0e, 0x40, + 0x45, 0x6b, 0xe9, 0x23, 0x0e, 0x00, 0xf5, 0x24, 0x0e, 0x40, 0x48, 0x38, + 0xc3, 0x2f, 0x0e, 0x00, 0xa8, 0x06, 0x45, 0x66, 0xe9, 0x1b, 0x0e, 0x40, + 0x45, 0x81, 0xe7, 0x3a, 0x0e, 0x00, 0x02, 0x7b, 0x02, 0x01, 0xff, 0x02, + 0x84, 0x10, 0x06, 0x47, 0x99, 0xd5, 0x20, 0x0e, 0x40, 0x42, 0x1a, 0x00, + 0x1e, 0x0e, 0x00, 0x43, 0xaa, 0x45, 0x1c, 0x0e, 0x40, 0x46, 0x1a, 0xdc, + 0x07, 0x0e, 0x00, 0x47, 0xe1, 0xd1, 0x4d, 0x0e, 0x00, 0x03, 0x1b, 0xdc, + 0x01, 0xff, 0x42, 0x92, 0x01, 0x13, 0x0e, 0x00, 0xf5, 0x19, 0x0e, 0x40, + 0x02, 0x56, 0x07, 0x06, 0x44, 0xbe, 0x4d, 0x21, 0x0e, 0x40, 0x80, 0x0c, + 0x46, 0x58, 0xe0, 0x47, 0x0e, 0x00, 0x45, 0x86, 0xec, 0x46, 0x0e, 0x40, + 0x48, 0xa0, 0xc4, 0x4b, 0x0e, 0x00, 0x42, 0xd5, 0x18, 0x48, 0x0e, 0x00, + 0x48, 0x98, 0xc6, 0x31, 0x0e, 0x00, 0xb4, 0x01, 0xff, 0x42, 0x0b, 0x00, + 0x49, 0x0e, 0x00, 0x42, 0x0d, 0x00, 0x4a, 0x0e, 0x40, 0x4a, 0x8b, 0xa7, + 0x45, 0x0e, 0x00, 0x02, 0x7b, 0x02, 0x04, 0xf5, 0x26, 0x0e, 0x40, 0x45, + 0x38, 0xe5, 0x2c, 0x0e, 0x00, 0x44, 0x2f, 0x0b, 0x25, 0x0e, 0x40, 0x02, + 0x0b, 0x00, 0x06, 0x45, 0x61, 0xe9, 0x01, 0x0e, 0x40, 0x80, 0x06, 0x43, + 0x0b, 0xac, 0x5b, 0x0e, 0x40, 0x02, 0x60, 0x0c, 0x06, 0x47, 0x1b, 0xd5, + 0x06, 0x0e, 0x40, 0x42, 0x56, 0x07, 0x02, 0x0e, 0x00, 0x42, 0x10, 0x00, + 0x05, 0x0e, 0x00, 0x43, 0x0c, 0x0c, 0x03, 0x0e, 0x00, 0x43, 0xd1, 0x10, + 0x04, 0x0e, 0x40, 0x43, 0x5c, 0x0d, 0x2b, 0x0e, 0x00, 0x46, 0x66, 0xde, + 0x2e, 0x0e, 0x40, 0x43, 0x0b, 0x08, 0x1d, 0x0e, 0x80, 0x06, 0x45, 0x11, + 0xe9, 0x4f, 0x0e, 0x40, 0xee, 0x1f, 0x0e, 0x40, 0x45, 0x1f, 0xe5, 0x0e, + 0x0e, 0x00, 0x43, 0xd4, 0x18, 0x14, 0x0e, 0x40, 0x42, 0x1a, 0x00, 0x08, + 0x0e, 0x80, 0x0c, 0x43, 0xa1, 0x01, 0x09, 0x0e, 0x00, 0x42, 0x60, 0x51, + 0x0c, 0x0e, 0x40, 0xe7, 0x0a, 0x0e, 0x40, 0xa1, 0xc6, 0x02, 0xa5, 0xb1, + 0x02, 0x47, 0xc5, 0xd1, 0xa8, 0x07, 0x00, 0x07, 0xec, 0x05, 0x20, 0xaf, + 0x0c, 0x45, 0x23, 0xeb, 0xb0, 0x07, 0x00, 0x47, 0xaa, 0xd6, 0xaa, 0x07, + 0x40, 0x48, 0x20, 0xc3, 0xaf, 0x07, 0x00, 0x46, 0x3a, 0xda, 0xae, 0x07, + 0x00, 0x48, 0xf0, 0xc8, 0xab, 0x07, 0x40, 0xa1, 0xf8, 0x01, 0x43, 0x89, + 0x50, 0x84, 0x07, 0x00, 0x49, 0x2f, 0xb7, 0x97, 0x07, 0x00, 0xa4, 0xd5, + 0x01, 0x45, 0x55, 0xe6, 0x8a, 0x07, 0x00, 0xa7, 0xba, 0x01, 0xa8, 0xab, + 0x01, 0x48, 0x58, 0xc7, 0x96, 0x07, 0x00, 0xab, 0x96, 0x01, 0xac, 0x87, + 0x01, 0x45, 0x80, 0xe8, 0x89, 0x07, 0x00, 0xae, 0x73, 0x48, 0xd8, 0xc9, + 0x95, 0x07, 0x00, 0x45, 0x1a, 0xea, 0xa4, 0x07, 0x00, 0x43, 0x8f, 0x95, + 0x83, 0x07, 0x00, 0xb3, 0x44, 0xb4, 0x25, 0x45, 0x0e, 0xec, 0x88, 0x07, + 0x00, 0x45, 0x31, 0xec, 0xa5, 0x07, 0x00, 0x43, 0xb1, 0xb9, 0x94, 0x07, + 0x00, 0xba, 0x01, 0xff, 0xa1, 0x04, 0xef, 0xa1, 0x07, 0x40, 0xe1, 0x9c, + 0x07, 0x00, 0x46, 0x32, 0xb7, 0x92, 0x07, 0x40, 0x47, 0x31, 0xb7, 0x93, + 0x07, 0x00, 0x43, 0x3b, 0x41, 0x8c, 0x07, 0x80, 0x0a, 0xef, 0xa0, 0x07, + 0x00, 0x43, 0x7f, 0x12, 0x98, 0x07, 0x40, 0x42, 0xc7, 0x15, 0x9b, 0x07, + 0x40, 0x45, 0xf8, 0xe3, 0x9e, 0x07, 0x00, 0x44, 0x9d, 0xef, 0x90, 0x07, + 0x00, 0xa8, 0x01, 0xff, 0x47, 0x31, 0xb7, 0x81, 0x07, 0x00, 0x44, 0x9d, + 0xef, 0x9d, 0x07, 0x40, 0x42, 0x80, 0x12, 0xb1, 0x07, 0x00, 0x44, 0x48, + 0x96, 0x82, 0x07, 0x40, 0x44, 0x69, 0x89, 0x8d, 0x07, 0x00, 0x48, 0x30, + 0xb7, 0x85, 0x07, 0x40, 0x44, 0x56, 0xe6, 0x86, 0x07, 0x00, 0x43, 0x3b, + 0x41, 0x9a, 0x07, 0x40, 0x42, 0x80, 0x12, 0x80, 0x07, 0x00, 0x43, 0x3b, + 0x41, 0x99, 0x07, 0x40, 0x44, 0x56, 0xe6, 0x8e, 0x07, 0x00, 0x45, 0xcd, + 0xe6, 0xa3, 0x07, 0x00, 0x48, 0x88, 0xc8, 0x8f, 0x07, 0x40, 0xa1, 0x06, + 0x45, 0xc3, 0xe6, 0x8b, 0x07, 0x40, 0x44, 0xf9, 0xe3, 0x9f, 0x07, 0x00, + 0x46, 0x32, 0xb7, 0x91, 0x07, 0x40, 0x43, 0xcc, 0x1a, 0xa2, 0x07, 0x00, + 0x44, 0x05, 0xf1, 0x87, 0x07, 0x40, 0x46, 0x16, 0xda, 0xac, 0x07, 0x00, + 0x48, 0x68, 0xc5, 0xa9, 0x07, 0x00, 0x48, 0xc8, 0xcc, 0xad, 0x07, 0x40, + 0x48, 0x18, 0xc3, 0xa7, 0x07, 0x00, 0x46, 0x0a, 0xda, 0xa6, 0x07, 0x40, + 0xa1, 0xbf, 0x0a, 0x48, 0x08, 0xc5, 0xf8, 0xf9, 0x01, 0xac, 0xea, 0x04, + 0xae, 0xd7, 0x04, 0x47, 0xfb, 0xd5, 0xea, 0xf9, 0x01, 0x0c, 0x03, 0x96, + 0x01, 0xff, 0xa1, 0xb1, 0x04, 0xa2, 0x9c, 0x04, 0xa3, 0xc4, 0x03, 0xa4, + 0xff, 0x02, 0xa5, 0xd0, 0x02, 0xa6, 0xa2, 0x02, 0xa7, 0x80, 0x02, 0xa8, + 0xf1, 0x01, 0x02, 0x9e, 0x01, 0xe0, 0x01, 0x43, 0xb8, 0x95, 0x1d, 0xd3, + 0x01, 0xab, 0xcb, 0x01, 0xac, 0xb4, 0x01, 0xad, 0x9f, 0x01, 0xaf, 0x90, + 0x01, 0xb0, 0x74, 0xb2, 0x47, 0xb3, 0x22, 0x45, 0xdc, 0xeb, 0x3b, 0xd3, + 0x01, 0x53, 0x9d, 0x4e, 0x37, 0xd3, 0x01, 0x02, 0xa9, 0x01, 0x06, 0x4c, + 0x47, 0x97, 0x11, 0xd3, 0x41, 0x45, 0x8c, 0x84, 0x17, 0xd3, 0x01, 0x43, + 0x96, 0x21, 0x44, 0xd3, 0x41, 0x48, 0x08, 0xc6, 0x4b, 0xd3, 0x01, 0x46, + 0x48, 0x91, 0x45, 0xd3, 0x01, 0xb4, 0x01, 0xff, 0xaf, 0x06, 0x46, 0x86, + 0xdf, 0x29, 0xd3, 0x41, 0x45, 0x0b, 0xea, 0x4c, 0xd3, 0x01, 0x42, 0x32, + 0x00, 0x31, 0xd3, 0x41, 0xa5, 0x06, 0x45, 0x9f, 0xe7, 0x35, 0xd3, 0x41, + 0x43, 0x8c, 0x2d, 0x14, 0xd3, 0x01, 0x45, 0x26, 0xe8, 0x1a, 0xd3, 0x01, + 0xb3, 0x01, 0xff, 0xa9, 0x06, 0x45, 0x06, 0xea, 0x2e, 0xd3, 0x41, 0x45, + 0x83, 0xe5, 0x2c, 0xd3, 0x01, 0x46, 0x10, 0xe0, 0x1b, 0xd3, 0x41, 0xa1, + 0x0c, 0x4a, 0xed, 0xa9, 0x13, 0xd3, 0x01, 0x45, 0xf0, 0xeb, 0x2a, 0xd3, + 0x41, 0x45, 0x79, 0x67, 0x24, 0xd3, 0x01, 0x45, 0x65, 0x91, 0x34, 0xd3, + 0x41, 0x4b, 0xd5, 0x9f, 0x53, 0xd3, 0x01, 0x49, 0x2e, 0xbe, 0x0d, 0xd3, + 0x41, 0x46, 0xf2, 0xd9, 0x40, 0xd3, 0x01, 0x46, 0x72, 0x18, 0x39, 0xd3, + 0x01, 0x44, 0x66, 0x87, 0x08, 0xd3, 0x41, 0xa1, 0x06, 0x45, 0xce, 0xe5, + 0x25, 0xd3, 0x41, 0x47, 0xaa, 0xcf, 0x55, 0xd3, 0x01, 0x4a, 0x61, 0xb3, + 0x2d, 0xd3, 0x41, 0x4c, 0x5f, 0x8e, 0x0a, 0xd3, 0x01, 0x46, 0x04, 0xdd, + 0x27, 0xd3, 0x41, 0x46, 0xbe, 0xda, 0x12, 0xd3, 0x01, 0x43, 0x20, 0x0b, + 0x46, 0xd3, 0x41, 0x47, 0xfb, 0xce, 0x4d, 0xd3, 0x01, 0x4b, 0x4c, 0x52, + 0x16, 0xd3, 0x41, 0x48, 0x64, 0x58, 0x28, 0xd3, 0x81, 0x12, 0x4c, 0x0f, + 0x93, 0x2f, 0xd3, 0x01, 0x48, 0x48, 0xca, 0x32, 0xd3, 0x01, 0x4a, 0x85, + 0xb2, 0x3e, 0xd3, 0x41, 0x43, 0x08, 0x06, 0x3f, 0xd3, 0x41, 0x46, 0x98, + 0xd9, 0x50, 0xd3, 0x01, 0x45, 0xc3, 0x01, 0x36, 0xd3, 0x01, 0xaf, 0x11, + 0x03, 0x82, 0x16, 0x01, 0xff, 0x47, 0x11, 0x03, 0x07, 0xd3, 0x01, 0x44, + 0x22, 0x24, 0x2b, 0xd3, 0x41, 0x47, 0x21, 0xc9, 0x18, 0xd3, 0x01, 0x47, + 0x02, 0xd6, 0x56, 0xd3, 0x41, 0x43, 0x9a, 0x35, 0x1c, 0xd3, 0x01, 0x4c, + 0xd7, 0x91, 0x42, 0xd3, 0x01, 0xae, 0x0c, 0x47, 0xef, 0x32, 0x3a, 0xd3, + 0x01, 0x49, 0x7c, 0xc1, 0x4a, 0xd3, 0x41, 0x48, 0xd0, 0xc4, 0x30, 0xd3, + 0x01, 0x47, 0x4b, 0xd0, 0x1f, 0xd3, 0x01, 0x49, 0x4c, 0xbb, 0x33, 0xd3, + 0x41, 0x48, 0x62, 0x39, 0x48, 0xd3, 0x01, 0xa5, 0x28, 0xa9, 0x0c, 0x44, + 0xed, 0xf1, 0x43, 0xd3, 0x01, 0x45, 0xff, 0xeb, 0x20, 0xd3, 0x41, 0x4a, + 0x51, 0xaa, 0x54, 0xd3, 0x01, 0xad, 0x06, 0x48, 0x40, 0xcc, 0x10, 0xd3, + 0x41, 0x49, 0xa1, 0xba, 0x3c, 0xd3, 0x01, 0x44, 0xca, 0x61, 0x49, 0xd3, + 0x41, 0x4a, 0xb7, 0xa8, 0x22, 0xd3, 0x01, 0x59, 0x1b, 0x24, 0x0f, 0xd3, + 0x01, 0x47, 0xaf, 0xb7, 0x47, 0xd3, 0x41, 0x45, 0x74, 0x02, 0x06, 0xd3, + 0x01, 0x45, 0x13, 0xc6, 0x21, 0xd3, 0x01, 0x03, 0xa3, 0x0d, 0x31, 0xaf, + 0x01, 0xff, 0x03, 0x9e, 0x62, 0x1e, 0xae, 0x01, 0xff, 0x46, 0x16, 0xe0, + 0x38, 0xd3, 0x01, 0xb4, 0x01, 0xff, 0x43, 0xef, 0x0c, 0x15, 0xd3, 0x01, + 0x46, 0x0b, 0x83, 0x1e, 0xd3, 0x01, 0x47, 0x29, 0xd5, 0x0b, 0xd3, 0x41, + 0x45, 0xa1, 0x62, 0x4e, 0xd3, 0x01, 0x45, 0x43, 0xc3, 0x52, 0xd3, 0x41, + 0xa5, 0x06, 0x43, 0x75, 0x18, 0x4f, 0xd3, 0x41, 0x47, 0x80, 0x8d, 0x3d, + 0xd3, 0x01, 0x44, 0x22, 0x24, 0x26, 0xd3, 0x41, 0x46, 0x25, 0x6a, 0x09, + 0xd3, 0x01, 0x4e, 0x3f, 0x7a, 0x23, 0xd3, 0x01, 0x4c, 0x23, 0x94, 0x0e, + 0xd3, 0x41, 0x4b, 0xf2, 0x99, 0x41, 0xd3, 0x01, 0x46, 0x0c, 0xdb, 0x19, + 0xd3, 0x01, 0x4a, 0xc9, 0xaa, 0x51, 0xd3, 0x01, 0x45, 0x43, 0x41, 0x0c, + 0xd3, 0x41, 0x47, 0xe0, 0x96, 0xb8, 0x20, 0x00, 0x54, 0x74, 0x44, 0xbe, + 0xf3, 0x01, 0xf4, 0xfa, 0x26, 0x40, 0xa5, 0x90, 0x05, 0x04, 0xcd, 0xf2, + 0x01, 0xff, 0xa1, 0xfc, 0x04, 0x06, 0xef, 0x06, 0xb5, 0x04, 0x0f, 0x6b, + 0x6d, 0xf7, 0x03, 0x02, 0x68, 0x00, 0x9c, 0x01, 0x05, 0x5a, 0x03, 0x4e, + 0x0b, 0x40, 0x77, 0x01, 0xff, 0xa1, 0x3b, 0xe5, 0x46, 0x0c, 0x80, 0x32, + 0xe9, 0x3f, 0x0c, 0x80, 0x29, 0xef, 0x4a, 0x0c, 0x80, 0x20, 0xf5, 0x41, + 0x0c, 0x80, 0x17, 0x08, 0x22, 0xc1, 0x01, 0xff, 0xec, 0x62, 0x0c, 0x80, + 0x09, 0xf2, 0x43, 0x0c, 0xc0, 0x00, 0xf2, 0x44, 0x0c, 0x40, 0xec, 0x63, + 0x0c, 0x40, 0xf5, 0x42, 0x0c, 0x40, 0xef, 0x4b, 0x0c, 0x40, 0xe9, 0x40, + 0x0c, 0x40, 0xe5, 0x47, 0x0c, 0x40, 0xe1, 0x3e, 0x0c, 0x00, 0xe9, 0x48, + 0x0c, 0x00, 0xf5, 0x4c, 0x0c, 0x40, 0xa1, 0x3c, 0xa3, 0x23, 0x45, 0x3f, + 0x3f, 0x3c, 0x0c, 0x00, 0x47, 0xd8, 0xd5, 0x77, 0x0c, 0x00, 0x45, 0xa5, + 0xeb, 0x7f, 0x0c, 0x00, 0x02, 0x02, 0x00, 0x01, 0xff, 0x44, 0xe5, 0x23, + 0x4d, 0x0c, 0x00, 0x45, 0xec, 0x4b, 0x03, 0x0c, 0x40, 0x4a, 0xd8, 0x23, + 0x01, 0x0c, 0x00, 0x09, 0x33, 0x16, 0x01, 0xff, 0x4e, 0x3c, 0x16, 0x04, + 0x0c, 0x00, 0x51, 0x0e, 0x59, 0x00, 0x0c, 0x40, 0x47, 0x3d, 0x16, 0x02, + 0x0c, 0x00, 0x47, 0xaf, 0x88, 0x3d, 0x0c, 0x40, 0x49, 0x44, 0x39, 0x55, + 0x0c, 0x00, 0x05, 0xee, 0x05, 0x01, 0xff, 0xe1, 0x05, 0x0c, 0x80, 0xb9, + 0x02, 0xa2, 0xac, 0x02, 0xa3, 0x9f, 0x02, 0xa4, 0x80, 0x02, 0xe5, 0x0e, + 0x0c, 0x80, 0xf6, 0x01, 0xa7, 0xe9, 0x01, 0x42, 0x22, 0x00, 0x39, 0x0c, + 0x00, 0xe9, 0x07, 0x0c, 0x80, 0xd9, 0x01, 0xaa, 0xcc, 0x01, 0xab, 0xbf, + 0x01, 0xac, 0xab, 0x01, 0x42, 0x6c, 0x00, 0x2e, 0x0c, 0x00, 0xae, 0x85, + 0x01, 0xef, 0x12, 0x0c, 0x80, 0x7c, 0xb0, 0x70, 0xb2, 0x5d, 0xb3, 0x4b, + 0xb4, 0x2c, 0xf5, 0x09, 0x0c, 0x80, 0x23, 0xb6, 0x06, 0x42, 0xbc, 0x22, + 0x2f, 0x0c, 0x40, 0xe1, 0x35, 0x0c, 0x00, 0x07, 0x23, 0xc1, 0x01, 0xff, + 0xec, 0x0c, 0x0c, 0x80, 0x09, 0xf2, 0x0b, 0x0c, 0xc0, 0x00, 0xf2, 0x60, + 0x0c, 0x40, 0xec, 0x61, 0x0c, 0x40, 0xf5, 0x0a, 0x0c, 0x40, 0xe1, 0x24, + 0x0c, 0x00, 0x42, 0x22, 0x00, 0x25, 0x0c, 0x00, 0x42, 0x40, 0x06, 0x58, + 0x0c, 0x00, 0xb4, 0x01, 0xff, 0xe1, 0x1f, 0x0c, 0x00, 0x42, 0x22, 0x00, + 0x20, 0x0c, 0x40, 0xe1, 0x38, 0x0c, 0x00, 0x42, 0x22, 0x00, 0x36, 0x0c, + 0x00, 0x42, 0x40, 0x06, 0x37, 0x0c, 0x40, 0xe1, 0x30, 0x0c, 0x00, 0xb2, + 0x01, 0xff, 0xe1, 0x31, 0x0c, 0x00, 0x42, 0x71, 0x00, 0x5a, 0x0c, 0x40, + 0xe1, 0x2a, 0x0c, 0x00, 0x42, 0x22, 0x00, 0x2b, 0x0c, 0x40, 0xef, 0x13, + 0x0c, 0x40, 0xe1, 0x28, 0x0c, 0x80, 0x12, 0x42, 0x24, 0x02, 0x19, 0x0c, + 0x00, 0x42, 0x2a, 0x05, 0x23, 0x0c, 0x00, 0x42, 0xbc, 0x22, 0x1e, 0x0c, + 0x40, 0x4b, 0xfc, 0x9d, 0x5d, 0x0c, 0x40, 0xe1, 0x32, 0x0c, 0x00, 0xac, + 0x01, 0xff, 0xe1, 0x33, 0x0c, 0x00, 0x42, 0x74, 0x00, 0x34, 0x0c, 0x40, + 0xe1, 0x15, 0x0c, 0x00, 0x42, 0x22, 0x00, 0x16, 0x0c, 0x40, 0xe1, 0x1c, + 0x0c, 0x00, 0x42, 0x22, 0x00, 0x1d, 0x0c, 0x40, 0xe9, 0x08, 0x0c, 0x40, + 0xe1, 0x17, 0x0c, 0x00, 0x42, 0x22, 0x00, 0x18, 0x0c, 0x40, 0xe5, 0x0f, + 0x0c, 0x40, 0xe1, 0x26, 0x0c, 0x00, 0xa4, 0x0c, 0x42, 0x22, 0x00, 0x27, + 0x0c, 0x00, 0x42, 0x59, 0x00, 0x59, 0x0c, 0x40, 0xe1, 0x21, 0x0c, 0x00, + 0x42, 0x22, 0x00, 0x22, 0x0c, 0x40, 0xe1, 0x1a, 0x0c, 0x00, 0x42, 0x22, + 0x00, 0x1b, 0x0c, 0x40, 0xe1, 0x2c, 0x0c, 0x00, 0x42, 0x22, 0x00, 0x2d, + 0x0c, 0x40, 0xe1, 0x06, 0x0c, 0x00, 0xe9, 0x10, 0x0c, 0x00, 0xf5, 0x14, + 0x0c, 0x40, 0x08, 0x50, 0xc9, 0x29, 0xb4, 0x06, 0x5b, 0x43, 0x1e, 0x78, + 0x0c, 0x40, 0x09, 0xc9, 0xb9, 0x11, 0x07, 0x8a, 0xd7, 0x01, 0xff, 0x53, + 0x58, 0x49, 0x7d, 0x0c, 0x00, 0x52, 0x4c, 0x1e, 0x7a, 0x0c, 0x40, 0x53, + 0x58, 0x49, 0x7e, 0x0c, 0x00, 0x52, 0x4c, 0x1e, 0x7b, 0x0c, 0x40, 0x53, + 0x58, 0x49, 0x7c, 0x0c, 0x00, 0x52, 0x4c, 0x1e, 0x79, 0x0c, 0x40, 0x45, + 0x12, 0x0b, 0x6e, 0x0c, 0x00, 0xa6, 0x2e, 0x44, 0xcf, 0x2a, 0x6f, 0x0c, + 0x00, 0x43, 0x0e, 0x0b, 0x67, 0x0c, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, + 0x43, 0x1e, 0x66, 0x0c, 0x40, 0x44, 0x25, 0x01, 0x69, 0x0c, 0x00, 0x42, + 0x15, 0x02, 0x68, 0x0c, 0x40, 0x44, 0xc9, 0x1d, 0x6d, 0x0c, 0x00, 0x42, + 0x01, 0x26, 0x6c, 0x0c, 0x40, 0x43, 0xd2, 0x05, 0x6b, 0x0c, 0x00, 0x43, + 0xf6, 0x06, 0x6a, 0x0c, 0x40, 0x4d, 0xd6, 0x83, 0x56, 0x0c, 0x00, 0x4c, + 0x3b, 0x94, 0x5c, 0x0c, 0x40, 0x06, 0x1a, 0x3d, 0x0c, 0x45, 0x8b, 0xcb, + 0x2d, 0xf5, 0x01, 0x46, 0xc4, 0x32, 0xfa, 0xf4, 0x41, 0x4d, 0x28, 0x85, + 0x06, 0x27, 0x00, 0x4f, 0x2b, 0x71, 0x80, 0xf5, 0x01, 0x03, 0x89, 0x0d, + 0x06, 0x44, 0x5a, 0x03, 0x21, 0x21, 0x40, 0x45, 0x23, 0x3d, 0xde, 0xf4, + 0x81, 0x06, 0x45, 0x21, 0x89, 0x15, 0x23, 0x40, 0x4a, 0x73, 0xa6, 0x7c, + 0xf5, 0x41, 0x52, 0xf5, 0x50, 0x75, 0xf3, 0x01, 0x43, 0x14, 0x45, 0xd6, + 0xfa, 0x01, 0xb2, 0x01, 0xff, 0x4d, 0x14, 0x80, 0xc6, 0xf4, 0x01, 0x05, + 0x26, 0x0d, 0x01, 0xff, 0x57, 0xce, 0x2d, 0xba, 0x27, 0x00, 0x4f, 0xd5, + 0x1c, 0x3b, 0x27, 0x40, 0x5a, 0x48, 0x1f, 0xd3, 0xf3, 0x01, 0x42, 0x13, + 0x05, 0x2e, 0xf3, 0x01, 0xa7, 0xa3, 0x3a, 0x02, 0xf1, 0x03, 0x93, 0x2c, + 0xab, 0xe7, 0x28, 0x09, 0xb4, 0xa7, 0xd6, 0x28, 0xad, 0x99, 0x22, 0xae, + 0x1c, 0x03, 0x24, 0x31, 0x0c, 0x44, 0xe1, 0xf2, 0x49, 0x26, 0x00, 0x42, + 0xe2, 0x0c, 0x95, 0xf6, 0x41, 0x49, 0x1d, 0xb7, 0xad, 0xf5, 0x01, 0x45, + 0x76, 0xd7, 0x07, 0x27, 0x40, 0x4a, 0x4f, 0xa7, 0x8b, 0xf3, 0x01, 0xa7, + 0x01, 0xff, 0x45, 0x14, 0xe6, 0x4a, 0xf3, 0x01, 0x03, 0x7f, 0x41, 0xef, + 0x1d, 0x03, 0x6b, 0x0d, 0x01, 0xff, 0x0a, 0xd5, 0xa8, 0x0f, 0xa9, 0x01, + 0xff, 0x49, 0xbd, 0x27, 0x03, 0xd8, 0x00, 0x4d, 0x59, 0x20, 0xe0, 0x6f, + 0x41, 0x90, 0xad, 0x1a, 0x91, 0xff, 0x16, 0x92, 0xd1, 0x13, 0x93, 0xa3, + 0x10, 0x94, 0xf5, 0x0c, 0x95, 0xc7, 0x09, 0x96, 0x99, 0x06, 0x97, 0xeb, + 0x02, 0x98, 0x01, 0xff, 0x90, 0xbd, 0x02, 0x91, 0x92, 0x02, 0x92, 0xe7, + 0x01, 0x93, 0xbc, 0x01, 0x94, 0x91, 0x01, 0x95, 0x67, 0x96, 0x3d, 0x97, + 0x13, 0x98, 0x01, 0xff, 0xd0, 0xef, 0x8d, 0x01, 0xd1, 0xf0, 0x8d, 0x01, + 0xd2, 0xf1, 0x8d, 0x01, 0xd3, 0xf2, 0x8d, 0x41, 0xd0, 0xe5, 0x8d, 0x01, + 0xd1, 0xe6, 0x8d, 0x01, 0xd2, 0xe7, 0x8d, 0x01, 0xd3, 0xe8, 0x8d, 0x01, + 0xd4, 0xe9, 0x8d, 0x01, 0xd5, 0xea, 0x8d, 0x01, 0xd6, 0xeb, 0x8d, 0x01, + 0xd7, 0xec, 0x8d, 0x01, 0xd8, 0xed, 0x8d, 0x01, 0xd9, 0xee, 0x8d, 0x41, + 0xd0, 0xdb, 0x8d, 0x01, 0xd1, 0xdc, 0x8d, 0x01, 0xd2, 0xdd, 0x8d, 0x01, + 0xd3, 0xde, 0x8d, 0x01, 0xd4, 0xdf, 0x8d, 0x01, 0xd5, 0xe0, 0x8d, 0x01, + 0xd6, 0xe1, 0x8d, 0x01, 0xd7, 0xe2, 0x8d, 0x01, 0xd8, 0xe3, 0x8d, 0x01, + 0xd9, 0xe4, 0x8d, 0x41, 0xd0, 0xd1, 0x8d, 0x01, 0xd1, 0xd2, 0x8d, 0x01, + 0xd2, 0xd3, 0x8d, 0x01, 0xd3, 0xd4, 0x8d, 0x01, 0xd4, 0xd5, 0x8d, 0x01, + 0xd5, 0xd6, 0x8d, 0x01, 0xd6, 0xd7, 0x8d, 0x01, 0xd7, 0xd8, 0x8d, 0x01, + 0xd8, 0xd9, 0x8d, 0x01, 0xd9, 0xda, 0x8d, 0x41, 0xd0, 0xc7, 0x8d, 0x01, + 0xd1, 0xc8, 0x8d, 0x01, 0xd2, 0xc9, 0x8d, 0x01, 0xd3, 0xca, 0x8d, 0x01, + 0xd4, 0xcb, 0x8d, 0x01, 0xd5, 0xcc, 0x8d, 0x01, 0xd6, 0xcd, 0x8d, 0x01, + 0xd7, 0xce, 0x8d, 0x01, 0xd8, 0xcf, 0x8d, 0x01, 0xd9, 0xd0, 0x8d, 0x41, + 0xd0, 0xbd, 0x8d, 0x01, 0xd1, 0xbe, 0x8d, 0x01, 0xd2, 0xbf, 0x8d, 0x01, + 0xd3, 0xc0, 0x8d, 0x01, 0xd4, 0xc1, 0x8d, 0x01, 0xd5, 0xc2, 0x8d, 0x01, + 0xd6, 0xc3, 0x8d, 0x01, 0xd7, 0xc4, 0x8d, 0x01, 0xd8, 0xc5, 0x8d, 0x01, + 0xd9, 0xc6, 0x8d, 0x41, 0xd0, 0xb3, 0x8d, 0x01, 0xd1, 0xb4, 0x8d, 0x01, + 0xd2, 0xb5, 0x8d, 0x01, 0xd3, 0xb6, 0x8d, 0x01, 0xd4, 0xb7, 0x8d, 0x01, + 0xd5, 0xb8, 0x8d, 0x01, 0xd6, 0xb9, 0x8d, 0x01, 0xd7, 0xba, 0x8d, 0x01, + 0xd8, 0xbb, 0x8d, 0x01, 0xd9, 0xbc, 0x8d, 0x41, 0xd0, 0xa9, 0x8d, 0x01, + 0xd1, 0xaa, 0x8d, 0x01, 0xd2, 0xab, 0x8d, 0x01, 0xd3, 0xac, 0x8d, 0x01, + 0xd4, 0xad, 0x8d, 0x01, 0xd5, 0xae, 0x8d, 0x01, 0xd6, 0xaf, 0x8d, 0x01, + 0xd7, 0xb0, 0x8d, 0x01, 0xd8, 0xb1, 0x8d, 0x01, 0xd9, 0xb2, 0x8d, 0x41, + 0xd0, 0x9f, 0x8d, 0x01, 0xd1, 0xa0, 0x8d, 0x01, 0xd2, 0xa1, 0x8d, 0x01, + 0xd3, 0xa2, 0x8d, 0x01, 0xd4, 0xa3, 0x8d, 0x01, 0xd5, 0xa4, 0x8d, 0x01, + 0xd6, 0xa5, 0x8d, 0x01, 0xd7, 0xa6, 0x8d, 0x01, 0xd8, 0xa7, 0x8d, 0x01, + 0xd9, 0xa8, 0x8d, 0x41, 0x90, 0x80, 0x03, 0x91, 0xd5, 0x02, 0x92, 0xaa, 0x02, 0x93, 0xff, 0x01, 0x94, 0xd4, 0x01, 0x95, 0xa9, 0x01, 0x96, 0x7f, - 0x97, 0x55, 0x98, 0x2b, 0x99, 0x01, 0xff, 0xd0, 0x21, 0x89, 0x01, 0xd1, - 0x22, 0x89, 0x01, 0xd2, 0x23, 0x89, 0x01, 0xd3, 0x24, 0x89, 0x01, 0xd4, - 0x25, 0x89, 0x01, 0xd5, 0x26, 0x89, 0x01, 0xd6, 0x27, 0x89, 0x01, 0xd7, - 0x28, 0x89, 0x01, 0xd8, 0x29, 0x89, 0x01, 0xd9, 0x2a, 0x89, 0x41, 0xd0, - 0x17, 0x89, 0x01, 0xd1, 0x18, 0x89, 0x01, 0xd2, 0x19, 0x89, 0x01, 0xd3, - 0x1a, 0x89, 0x01, 0xd4, 0x1b, 0x89, 0x01, 0xd5, 0x1c, 0x89, 0x01, 0xd6, - 0x1d, 0x89, 0x01, 0xd7, 0x1e, 0x89, 0x01, 0xd8, 0x1f, 0x89, 0x01, 0xd9, - 0x20, 0x89, 0x41, 0xd0, 0x0d, 0x89, 0x01, 0xd1, 0x0e, 0x89, 0x01, 0xd2, - 0x0f, 0x89, 0x01, 0xd3, 0x10, 0x89, 0x01, 0xd4, 0x11, 0x89, 0x01, 0xd5, - 0x12, 0x89, 0x01, 0xd6, 0x13, 0x89, 0x01, 0xd7, 0x14, 0x89, 0x01, 0xd8, - 0x15, 0x89, 0x01, 0xd9, 0x16, 0x89, 0x41, 0xd0, 0x03, 0x89, 0x01, 0xd1, - 0x04, 0x89, 0x01, 0xd2, 0x05, 0x89, 0x01, 0xd3, 0x06, 0x89, 0x01, 0xd4, - 0x07, 0x89, 0x01, 0xd5, 0x08, 0x89, 0x01, 0xd6, 0x09, 0x89, 0x01, 0xd7, - 0x0a, 0x89, 0x01, 0xd8, 0x0b, 0x89, 0x01, 0xd9, 0x0c, 0x89, 0x41, 0xd0, - 0xf9, 0x88, 0x01, 0xd1, 0xfa, 0x88, 0x01, 0xd2, 0xfb, 0x88, 0x01, 0xd3, - 0xfc, 0x88, 0x01, 0xd4, 0xfd, 0x88, 0x01, 0xd5, 0xfe, 0x88, 0x01, 0xd6, - 0xff, 0x88, 0x01, 0xd7, 0x00, 0x89, 0x01, 0xd8, 0x01, 0x89, 0x01, 0xd9, - 0x02, 0x89, 0x41, 0xd0, 0xef, 0x88, 0x01, 0xd1, 0xf0, 0x88, 0x01, 0xd2, - 0xf1, 0x88, 0x01, 0xd3, 0xf2, 0x88, 0x01, 0xd4, 0xf3, 0x88, 0x01, 0xd5, - 0xf4, 0x88, 0x01, 0xd6, 0xf5, 0x88, 0x01, 0xd7, 0xf6, 0x88, 0x01, 0xd8, - 0xf7, 0x88, 0x01, 0xd9, 0xf8, 0x88, 0x41, 0xd0, 0xe5, 0x88, 0x01, 0xd1, - 0xe6, 0x88, 0x01, 0xd2, 0xe7, 0x88, 0x01, 0xd3, 0xe8, 0x88, 0x01, 0xd4, - 0xe9, 0x88, 0x01, 0xd5, 0xea, 0x88, 0x01, 0xd6, 0xeb, 0x88, 0x01, 0xd7, - 0xec, 0x88, 0x01, 0xd8, 0xed, 0x88, 0x01, 0xd9, 0xee, 0x88, 0x41, 0xd0, - 0xdb, 0x88, 0x01, 0xd1, 0xdc, 0x88, 0x01, 0xd2, 0xdd, 0x88, 0x01, 0xd3, - 0xde, 0x88, 0x01, 0xd4, 0xdf, 0x88, 0x01, 0xd5, 0xe0, 0x88, 0x01, 0xd6, - 0xe1, 0x88, 0x01, 0xd7, 0xe2, 0x88, 0x01, 0xd8, 0xe3, 0x88, 0x01, 0xd9, - 0xe4, 0x88, 0x41, 0xd0, 0xd1, 0x88, 0x01, 0xd1, 0xd2, 0x88, 0x01, 0xd2, - 0xd3, 0x88, 0x01, 0xd3, 0xd4, 0x88, 0x01, 0xd4, 0xd5, 0x88, 0x01, 0xd5, - 0xd6, 0x88, 0x01, 0xd6, 0xd7, 0x88, 0x01, 0xd7, 0xd8, 0x88, 0x01, 0xd8, - 0xd9, 0x88, 0x01, 0xd9, 0xda, 0x88, 0x41, 0xd0, 0xc7, 0x88, 0x01, 0xd1, - 0xc8, 0x88, 0x01, 0xd2, 0xc9, 0x88, 0x01, 0xd3, 0xca, 0x88, 0x01, 0xd4, - 0xcb, 0x88, 0x01, 0xd5, 0xcc, 0x88, 0x01, 0xd6, 0xcd, 0x88, 0x01, 0xd7, - 0xce, 0x88, 0x01, 0xd8, 0xcf, 0x88, 0x01, 0xd9, 0xd0, 0x88, 0x41, 0x90, + 0x97, 0x55, 0x98, 0x2b, 0x99, 0x01, 0xff, 0xd0, 0x95, 0x8d, 0x01, 0xd1, + 0x96, 0x8d, 0x01, 0xd2, 0x97, 0x8d, 0x01, 0xd3, 0x98, 0x8d, 0x01, 0xd4, + 0x99, 0x8d, 0x01, 0xd5, 0x9a, 0x8d, 0x01, 0xd6, 0x9b, 0x8d, 0x01, 0xd7, + 0x9c, 0x8d, 0x01, 0xd8, 0x9d, 0x8d, 0x01, 0xd9, 0x9e, 0x8d, 0x41, 0xd0, + 0x8b, 0x8d, 0x01, 0xd1, 0x8c, 0x8d, 0x01, 0xd2, 0x8d, 0x8d, 0x01, 0xd3, + 0x8e, 0x8d, 0x01, 0xd4, 0x8f, 0x8d, 0x01, 0xd5, 0x90, 0x8d, 0x01, 0xd6, + 0x91, 0x8d, 0x01, 0xd7, 0x92, 0x8d, 0x01, 0xd8, 0x93, 0x8d, 0x01, 0xd9, + 0x94, 0x8d, 0x41, 0xd0, 0x81, 0x8d, 0x01, 0xd1, 0x82, 0x8d, 0x01, 0xd2, + 0x83, 0x8d, 0x01, 0xd3, 0x84, 0x8d, 0x01, 0xd4, 0x85, 0x8d, 0x01, 0xd5, + 0x86, 0x8d, 0x01, 0xd6, 0x87, 0x8d, 0x01, 0xd7, 0x88, 0x8d, 0x01, 0xd8, + 0x89, 0x8d, 0x01, 0xd9, 0x8a, 0x8d, 0x41, 0xd0, 0xf7, 0x8a, 0x01, 0xd1, + 0xf8, 0x8a, 0x01, 0xd2, 0xf9, 0x8a, 0x01, 0xd3, 0xfa, 0x8a, 0x01, 0xd4, + 0xfb, 0x8a, 0x01, 0xd5, 0xfc, 0x8a, 0x01, 0xd6, 0xfd, 0x8a, 0x01, 0xd7, + 0xfe, 0x8a, 0x01, 0xd8, 0xff, 0x8a, 0x01, 0xd9, 0x80, 0x8d, 0x41, 0xd0, + 0xed, 0x8a, 0x01, 0xd1, 0xee, 0x8a, 0x01, 0xd2, 0xef, 0x8a, 0x01, 0xd3, + 0xf0, 0x8a, 0x01, 0xd4, 0xf1, 0x8a, 0x01, 0xd5, 0xf2, 0x8a, 0x01, 0xd6, + 0xf3, 0x8a, 0x01, 0xd7, 0xf4, 0x8a, 0x01, 0xd8, 0xf5, 0x8a, 0x01, 0xd9, + 0xf6, 0x8a, 0x41, 0xd0, 0xe3, 0x8a, 0x01, 0xd1, 0xe4, 0x8a, 0x01, 0xd2, + 0xe5, 0x8a, 0x01, 0xd3, 0xe6, 0x8a, 0x01, 0xd4, 0xe7, 0x8a, 0x01, 0xd5, + 0xe8, 0x8a, 0x01, 0xd6, 0xe9, 0x8a, 0x01, 0xd7, 0xea, 0x8a, 0x01, 0xd8, + 0xeb, 0x8a, 0x01, 0xd9, 0xec, 0x8a, 0x41, 0xd0, 0xd9, 0x8a, 0x01, 0xd1, + 0xda, 0x8a, 0x01, 0xd2, 0xdb, 0x8a, 0x01, 0xd3, 0xdc, 0x8a, 0x01, 0xd4, + 0xdd, 0x8a, 0x01, 0xd5, 0xde, 0x8a, 0x01, 0xd6, 0xdf, 0x8a, 0x01, 0xd7, + 0xe0, 0x8a, 0x01, 0xd8, 0xe1, 0x8a, 0x01, 0xd9, 0xe2, 0x8a, 0x41, 0xd0, + 0xcf, 0x8a, 0x01, 0xd1, 0xd0, 0x8a, 0x01, 0xd2, 0xd1, 0x8a, 0x01, 0xd3, + 0xd2, 0x8a, 0x01, 0xd4, 0xd3, 0x8a, 0x01, 0xd5, 0xd4, 0x8a, 0x01, 0xd6, + 0xd5, 0x8a, 0x01, 0xd7, 0xd6, 0x8a, 0x01, 0xd8, 0xd7, 0x8a, 0x01, 0xd9, + 0xd8, 0x8a, 0x41, 0xd0, 0xc5, 0x8a, 0x01, 0xd1, 0xc6, 0x8a, 0x01, 0xd2, + 0xc7, 0x8a, 0x01, 0xd3, 0xc8, 0x8a, 0x01, 0xd4, 0xc9, 0x8a, 0x01, 0xd5, + 0xca, 0x8a, 0x01, 0xd6, 0xcb, 0x8a, 0x01, 0xd7, 0xcc, 0x8a, 0x01, 0xd8, + 0xcd, 0x8a, 0x01, 0xd9, 0xce, 0x8a, 0x41, 0xd0, 0xbb, 0x8a, 0x01, 0xd1, + 0xbc, 0x8a, 0x01, 0xd2, 0xbd, 0x8a, 0x01, 0xd3, 0xbe, 0x8a, 0x01, 0xd4, + 0xbf, 0x8a, 0x01, 0xd5, 0xc0, 0x8a, 0x01, 0xd6, 0xc1, 0x8a, 0x01, 0xd7, + 0xc2, 0x8a, 0x01, 0xd8, 0xc3, 0x8a, 0x01, 0xd9, 0xc4, 0x8a, 0x41, 0x90, 0x80, 0x03, 0x91, 0xd5, 0x02, 0x92, 0xaa, 0x02, 0x93, 0xff, 0x01, 0x94, 0xd4, 0x01, 0x95, 0xa9, 0x01, 0x96, 0x7f, 0x97, 0x55, 0x98, 0x2b, 0x99, - 0x01, 0xff, 0xd0, 0xbd, 0x88, 0x01, 0xd1, 0xbe, 0x88, 0x01, 0xd2, 0xbf, - 0x88, 0x01, 0xd3, 0xc0, 0x88, 0x01, 0xd4, 0xc1, 0x88, 0x01, 0xd5, 0xc2, - 0x88, 0x01, 0xd6, 0xc3, 0x88, 0x01, 0xd7, 0xc4, 0x88, 0x01, 0xd8, 0xc5, - 0x88, 0x01, 0xd9, 0xc6, 0x88, 0x41, 0xd0, 0xb3, 0x88, 0x01, 0xd1, 0xb4, - 0x88, 0x01, 0xd2, 0xb5, 0x88, 0x01, 0xd3, 0xb6, 0x88, 0x01, 0xd4, 0xb7, - 0x88, 0x01, 0xd5, 0xb8, 0x88, 0x01, 0xd6, 0xb9, 0x88, 0x01, 0xd7, 0xba, - 0x88, 0x01, 0xd8, 0xbb, 0x88, 0x01, 0xd9, 0xbc, 0x88, 0x41, 0xd0, 0xa9, - 0x88, 0x01, 0xd1, 0xaa, 0x88, 0x01, 0xd2, 0xab, 0x88, 0x01, 0xd3, 0xac, - 0x88, 0x01, 0xd4, 0xad, 0x88, 0x01, 0xd5, 0xae, 0x88, 0x01, 0xd6, 0xaf, - 0x88, 0x01, 0xd7, 0xb0, 0x88, 0x01, 0xd8, 0xb1, 0x88, 0x01, 0xd9, 0xb2, - 0x88, 0x41, 0xd0, 0x9f, 0x88, 0x01, 0xd1, 0xa0, 0x88, 0x01, 0xd2, 0xa1, - 0x88, 0x01, 0xd3, 0xa2, 0x88, 0x01, 0xd4, 0xa3, 0x88, 0x01, 0xd5, 0xa4, - 0x88, 0x01, 0xd6, 0xa5, 0x88, 0x01, 0xd7, 0xa6, 0x88, 0x01, 0xd8, 0xa7, - 0x88, 0x01, 0xd9, 0xa8, 0x88, 0x41, 0xd0, 0x95, 0x88, 0x01, 0xd1, 0x96, - 0x88, 0x01, 0xd2, 0x97, 0x88, 0x01, 0xd3, 0x98, 0x88, 0x01, 0xd4, 0x99, - 0x88, 0x01, 0xd5, 0x9a, 0x88, 0x01, 0xd6, 0x9b, 0x88, 0x01, 0xd7, 0x9c, - 0x88, 0x01, 0xd8, 0x9d, 0x88, 0x01, 0xd9, 0x9e, 0x88, 0x41, 0xd0, 0x8b, - 0x88, 0x01, 0xd1, 0x8c, 0x88, 0x01, 0xd2, 0x8d, 0x88, 0x01, 0xd3, 0x8e, - 0x88, 0x01, 0xd4, 0x8f, 0x88, 0x01, 0xd5, 0x90, 0x88, 0x01, 0xd6, 0x91, - 0x88, 0x01, 0xd7, 0x92, 0x88, 0x01, 0xd8, 0x93, 0x88, 0x01, 0xd9, 0x94, - 0x88, 0x41, 0xd0, 0x81, 0x88, 0x01, 0xd1, 0x82, 0x88, 0x01, 0xd2, 0x83, - 0x88, 0x01, 0xd3, 0x84, 0x88, 0x01, 0xd4, 0x85, 0x88, 0x01, 0xd5, 0x86, - 0x88, 0x01, 0xd6, 0x87, 0x88, 0x01, 0xd7, 0x88, 0x88, 0x01, 0xd8, 0x89, - 0x88, 0x01, 0xd9, 0x8a, 0x88, 0x41, 0xd0, 0x77, 0x88, 0x01, 0xd1, 0x78, - 0x88, 0x01, 0xd2, 0x79, 0x88, 0x01, 0xd3, 0x7a, 0x88, 0x01, 0xd4, 0x7b, - 0x88, 0x01, 0xd5, 0x7c, 0x88, 0x01, 0xd6, 0x7d, 0x88, 0x01, 0xd7, 0x7e, - 0x88, 0x01, 0xd8, 0x7f, 0x88, 0x01, 0xd9, 0x80, 0x88, 0x41, 0xd0, 0x6d, - 0x88, 0x01, 0xd1, 0x6e, 0x88, 0x01, 0xd2, 0x6f, 0x88, 0x01, 0xd3, 0x70, - 0x88, 0x01, 0xd4, 0x71, 0x88, 0x01, 0xd5, 0x72, 0x88, 0x01, 0xd6, 0x73, - 0x88, 0x01, 0xd7, 0x74, 0x88, 0x01, 0xd8, 0x75, 0x88, 0x01, 0xd9, 0x76, - 0x88, 0x41, 0xd0, 0x63, 0x88, 0x01, 0xd1, 0x64, 0x88, 0x01, 0xd2, 0x65, - 0x88, 0x01, 0xd3, 0x66, 0x88, 0x01, 0xd4, 0x67, 0x88, 0x01, 0xd5, 0x68, - 0x88, 0x01, 0xd6, 0x69, 0x88, 0x01, 0xd7, 0x6a, 0x88, 0x01, 0xd8, 0x6b, - 0x88, 0x01, 0xd9, 0x6c, 0x88, 0x41, 0x90, 0x80, 0x03, 0x91, 0xd5, 0x02, + 0x01, 0xff, 0xd0, 0xb1, 0x8a, 0x01, 0xd1, 0xb2, 0x8a, 0x01, 0xd2, 0xb3, + 0x8a, 0x01, 0xd3, 0xb4, 0x8a, 0x01, 0xd4, 0xb5, 0x8a, 0x01, 0xd5, 0xb6, + 0x8a, 0x01, 0xd6, 0xb7, 0x8a, 0x01, 0xd7, 0xb8, 0x8a, 0x01, 0xd8, 0xb9, + 0x8a, 0x01, 0xd9, 0xba, 0x8a, 0x41, 0xd0, 0xa7, 0x8a, 0x01, 0xd1, 0xa8, + 0x8a, 0x01, 0xd2, 0xa9, 0x8a, 0x01, 0xd3, 0xaa, 0x8a, 0x01, 0xd4, 0xab, + 0x8a, 0x01, 0xd5, 0xac, 0x8a, 0x01, 0xd6, 0xad, 0x8a, 0x01, 0xd7, 0xae, + 0x8a, 0x01, 0xd8, 0xaf, 0x8a, 0x01, 0xd9, 0xb0, 0x8a, 0x41, 0xd0, 0x9d, + 0x8a, 0x01, 0xd1, 0x9e, 0x8a, 0x01, 0xd2, 0x9f, 0x8a, 0x01, 0xd3, 0xa0, + 0x8a, 0x01, 0xd4, 0xa1, 0x8a, 0x01, 0xd5, 0xa2, 0x8a, 0x01, 0xd6, 0xa3, + 0x8a, 0x01, 0xd7, 0xa4, 0x8a, 0x01, 0xd8, 0xa5, 0x8a, 0x01, 0xd9, 0xa6, + 0x8a, 0x41, 0xd0, 0x93, 0x8a, 0x01, 0xd1, 0x94, 0x8a, 0x01, 0xd2, 0x95, + 0x8a, 0x01, 0xd3, 0x96, 0x8a, 0x01, 0xd4, 0x97, 0x8a, 0x01, 0xd5, 0x98, + 0x8a, 0x01, 0xd6, 0x99, 0x8a, 0x01, 0xd7, 0x9a, 0x8a, 0x01, 0xd8, 0x9b, + 0x8a, 0x01, 0xd9, 0x9c, 0x8a, 0x41, 0xd0, 0x89, 0x8a, 0x01, 0xd1, 0x8a, + 0x8a, 0x01, 0xd2, 0x8b, 0x8a, 0x01, 0xd3, 0x8c, 0x8a, 0x01, 0xd4, 0x8d, + 0x8a, 0x01, 0xd5, 0x8e, 0x8a, 0x01, 0xd6, 0x8f, 0x8a, 0x01, 0xd7, 0x90, + 0x8a, 0x01, 0xd8, 0x91, 0x8a, 0x01, 0xd9, 0x92, 0x8a, 0x41, 0xd0, 0x7f, + 0x8a, 0x01, 0xd1, 0x80, 0x8a, 0x01, 0xd2, 0x81, 0x8a, 0x01, 0xd3, 0x82, + 0x8a, 0x01, 0xd4, 0x83, 0x8a, 0x01, 0xd5, 0x84, 0x8a, 0x01, 0xd6, 0x85, + 0x8a, 0x01, 0xd7, 0x86, 0x8a, 0x01, 0xd8, 0x87, 0x8a, 0x01, 0xd9, 0x88, + 0x8a, 0x41, 0xd0, 0x75, 0x8a, 0x01, 0xd1, 0x76, 0x8a, 0x01, 0xd2, 0x77, + 0x8a, 0x01, 0xd3, 0x78, 0x8a, 0x01, 0xd4, 0x79, 0x8a, 0x01, 0xd5, 0x7a, + 0x8a, 0x01, 0xd6, 0x7b, 0x8a, 0x01, 0xd7, 0x7c, 0x8a, 0x01, 0xd8, 0x7d, + 0x8a, 0x01, 0xd9, 0x7e, 0x8a, 0x41, 0xd0, 0x6b, 0x8a, 0x01, 0xd1, 0x6c, + 0x8a, 0x01, 0xd2, 0x6d, 0x8a, 0x01, 0xd3, 0x6e, 0x8a, 0x01, 0xd4, 0x6f, + 0x8a, 0x01, 0xd5, 0x70, 0x8a, 0x01, 0xd6, 0x71, 0x8a, 0x01, 0xd7, 0x72, + 0x8a, 0x01, 0xd8, 0x73, 0x8a, 0x01, 0xd9, 0x74, 0x8a, 0x41, 0xd0, 0x61, + 0x8a, 0x01, 0xd1, 0x62, 0x8a, 0x01, 0xd2, 0x63, 0x8a, 0x01, 0xd3, 0x64, + 0x8a, 0x01, 0xd4, 0x65, 0x8a, 0x01, 0xd5, 0x66, 0x8a, 0x01, 0xd6, 0x67, + 0x8a, 0x01, 0xd7, 0x68, 0x8a, 0x01, 0xd8, 0x69, 0x8a, 0x01, 0xd9, 0x6a, + 0x8a, 0x41, 0xd0, 0x57, 0x8a, 0x01, 0xd1, 0x58, 0x8a, 0x01, 0xd2, 0x59, + 0x8a, 0x01, 0xd3, 0x5a, 0x8a, 0x01, 0xd4, 0x5b, 0x8a, 0x01, 0xd5, 0x5c, + 0x8a, 0x01, 0xd6, 0x5d, 0x8a, 0x01, 0xd7, 0x5e, 0x8a, 0x01, 0xd8, 0x5f, + 0x8a, 0x01, 0xd9, 0x60, 0x8a, 0x41, 0x90, 0x80, 0x03, 0x91, 0xd5, 0x02, 0x92, 0xaa, 0x02, 0x93, 0xff, 0x01, 0x94, 0xd4, 0x01, 0x95, 0xa9, 0x01, - 0x96, 0x7f, 0x97, 0x55, 0x98, 0x2b, 0x99, 0x01, 0xff, 0xd0, 0x59, 0x88, - 0x01, 0xd1, 0x5a, 0x88, 0x01, 0xd2, 0x5b, 0x88, 0x01, 0xd3, 0x5c, 0x88, - 0x01, 0xd4, 0x5d, 0x88, 0x01, 0xd5, 0x5e, 0x88, 0x01, 0xd6, 0x5f, 0x88, - 0x01, 0xd7, 0x60, 0x88, 0x01, 0xd8, 0x61, 0x88, 0x01, 0xd9, 0x62, 0x88, - 0x41, 0xd0, 0x4f, 0x88, 0x01, 0xd1, 0x50, 0x88, 0x01, 0xd2, 0x51, 0x88, - 0x01, 0xd3, 0x52, 0x88, 0x01, 0xd4, 0x53, 0x88, 0x01, 0xd5, 0x54, 0x88, - 0x01, 0xd6, 0x55, 0x88, 0x01, 0xd7, 0x56, 0x88, 0x01, 0xd8, 0x57, 0x88, - 0x01, 0xd9, 0x58, 0x88, 0x41, 0xd0, 0x45, 0x88, 0x01, 0xd1, 0x46, 0x88, - 0x01, 0xd2, 0x47, 0x88, 0x01, 0xd3, 0x48, 0x88, 0x01, 0xd4, 0x49, 0x88, - 0x01, 0xd5, 0x4a, 0x88, 0x01, 0xd6, 0x4b, 0x88, 0x01, 0xd7, 0x4c, 0x88, - 0x01, 0xd8, 0x4d, 0x88, 0x01, 0xd9, 0x4e, 0x88, 0x41, 0xd0, 0x3b, 0x88, - 0x01, 0xd1, 0x3c, 0x88, 0x01, 0xd2, 0x3d, 0x88, 0x01, 0xd3, 0x3e, 0x88, - 0x01, 0xd4, 0x3f, 0x88, 0x01, 0xd5, 0x40, 0x88, 0x01, 0xd6, 0x41, 0x88, - 0x01, 0xd7, 0x42, 0x88, 0x01, 0xd8, 0x43, 0x88, 0x01, 0xd9, 0x44, 0x88, - 0x41, 0xd0, 0x31, 0x88, 0x01, 0xd1, 0x32, 0x88, 0x01, 0xd2, 0x33, 0x88, - 0x01, 0xd3, 0x34, 0x88, 0x01, 0xd4, 0x35, 0x88, 0x01, 0xd5, 0x36, 0x88, - 0x01, 0xd6, 0x37, 0x88, 0x01, 0xd7, 0x38, 0x88, 0x01, 0xd8, 0x39, 0x88, - 0x01, 0xd9, 0x3a, 0x88, 0x41, 0xd0, 0x27, 0x88, 0x01, 0xd1, 0x28, 0x88, - 0x01, 0xd2, 0x29, 0x88, 0x01, 0xd3, 0x2a, 0x88, 0x01, 0xd4, 0x2b, 0x88, - 0x01, 0xd5, 0x2c, 0x88, 0x01, 0xd6, 0x2d, 0x88, 0x01, 0xd7, 0x2e, 0x88, - 0x01, 0xd8, 0x2f, 0x88, 0x01, 0xd9, 0x30, 0x88, 0x41, 0xd0, 0x1d, 0x88, - 0x01, 0xd1, 0x1e, 0x88, 0x01, 0xd2, 0x1f, 0x88, 0x01, 0xd3, 0x20, 0x88, - 0x01, 0xd4, 0x21, 0x88, 0x01, 0xd5, 0x22, 0x88, 0x01, 0xd6, 0x23, 0x88, - 0x01, 0xd7, 0x24, 0x88, 0x01, 0xd8, 0x25, 0x88, 0x01, 0xd9, 0x26, 0x88, - 0x41, 0xd0, 0x13, 0x88, 0x01, 0xd1, 0x14, 0x88, 0x01, 0xd2, 0x15, 0x88, - 0x01, 0xd3, 0x16, 0x88, 0x01, 0xd4, 0x17, 0x88, 0x01, 0xd5, 0x18, 0x88, - 0x01, 0xd6, 0x19, 0x88, 0x01, 0xd7, 0x1a, 0x88, 0x01, 0xd8, 0x1b, 0x88, - 0x01, 0xd9, 0x1c, 0x88, 0x41, 0xd0, 0x09, 0x88, 0x01, 0xd1, 0x0a, 0x88, - 0x01, 0xd2, 0x0b, 0x88, 0x01, 0xd3, 0x0c, 0x88, 0x01, 0xd4, 0x0d, 0x88, - 0x01, 0xd5, 0x0e, 0x88, 0x01, 0xd6, 0x0f, 0x88, 0x01, 0xd7, 0x10, 0x88, - 0x01, 0xd8, 0x11, 0x88, 0x01, 0xd9, 0x12, 0x88, 0x41, 0xd1, 0x00, 0x88, - 0x01, 0xd2, 0x01, 0x88, 0x01, 0xd3, 0x02, 0x88, 0x01, 0xd4, 0x03, 0x88, - 0x01, 0xd5, 0x04, 0x88, 0x01, 0xd6, 0x05, 0x88, 0x01, 0xd7, 0x06, 0x88, - 0x01, 0xd8, 0x07, 0x88, 0x01, 0xd9, 0x08, 0x88, 0x41, 0x06, 0xc4, 0x06, - 0xb1, 0x03, 0x07, 0xc1, 0x05, 0x01, 0xff, 0xa1, 0x87, 0x03, 0x42, 0x16, - 0x00, 0xaa, 0x6a, 0x01, 0xa3, 0xf4, 0x02, 0xa4, 0xe7, 0x02, 0xa5, 0xd4, - 0x02, 0xa6, 0xc7, 0x02, 0xa7, 0xba, 0x02, 0xa8, 0xa6, 0x02, 0xa9, 0x93, - 0x02, 0xab, 0x86, 0x02, 0xac, 0xf9, 0x01, 0xad, 0xe2, 0x01, 0xae, 0xc9, - 0x01, 0xaf, 0xb6, 0x01, 0xb0, 0xa9, 0x01, 0x42, 0x71, 0x00, 0xb2, 0x6a, - 0x01, 0xb3, 0x84, 0x01, 0xb4, 0x72, 0xb5, 0x2a, 0xb6, 0x18, 0x42, 0xa9, - 0x01, 0xa6, 0x6a, 0x01, 0x42, 0x4c, 0x26, 0xba, 0x6a, 0x01, 0x42, 0x34, - 0x22, 0xa5, 0x6a, 0x01, 0x42, 0x59, 0x00, 0xbe, 0x6a, 0x41, 0xe3, 0x79, - 0x6a, 0x01, 0xf1, 0x7a, 0x6a, 0x01, 0xf8, 0x7b, 0x6a, 0x01, 0xfa, 0x78, - 0x6a, 0x41, 0xe3, 0x85, 0x6a, 0x01, 0xa5, 0x30, 0xa9, 0x0c, 0xf1, 0x86, - 0x6a, 0x01, 0xf8, 0x87, 0x6a, 0x01, 0xfa, 0x84, 0x6a, 0x41, 0xe3, 0x8d, - 0x6a, 0x01, 0xf1, 0x8e, 0x6a, 0x01, 0xb5, 0x08, 0xf8, 0x8f, 0x6a, 0x01, - 0xfa, 0x8c, 0x6a, 0x41, 0xe3, 0x99, 0x6a, 0x01, 0xf1, 0x9a, 0x6a, 0x01, - 0xf8, 0x9b, 0x6a, 0x01, 0xfa, 0x98, 0x6a, 0x41, 0xe3, 0x94, 0x6a, 0x01, - 0xf1, 0x96, 0x6a, 0x01, 0xf8, 0x97, 0x6a, 0x01, 0xfa, 0x95, 0x6a, 0x41, - 0xe1, 0xb0, 0x6a, 0x01, 0x42, 0x22, 0x00, 0xb9, 0x6a, 0x01, 0x42, 0x15, - 0x06, 0xb6, 0x6a, 0x41, 0xe1, 0xa4, 0x6a, 0x01, 0xa8, 0x01, 0xff, 0xe1, - 0xb4, 0x6a, 0x01, 0x04, 0x76, 0x33, 0x01, 0xff, 0x43, 0x9c, 0xf0, 0x93, - 0x6a, 0x01, 0x43, 0x5c, 0xf1, 0x92, 0x6a, 0x41, 0xe1, 0xa7, 0x6a, 0x01, - 0x42, 0x22, 0x00, 0xa9, 0x6a, 0x41, 0xe3, 0x71, 0x6a, 0x01, 0xf1, 0x72, - 0x6a, 0x01, 0xf8, 0x73, 0x6a, 0x01, 0xfa, 0x70, 0x6a, 0x41, 0xe1, 0xac, - 0x6a, 0x01, 0x42, 0x24, 0x02, 0xa3, 0x6a, 0x01, 0x42, 0x22, 0x00, 0xb3, - 0x6a, 0x01, 0x42, 0x34, 0x22, 0xa8, 0x6a, 0x41, 0xe1, 0xab, 0x6a, 0x01, - 0xe3, 0x9d, 0x6a, 0x01, 0xf1, 0x9e, 0x6a, 0x01, 0xf8, 0x9f, 0x6a, 0x01, - 0xfa, 0x9c, 0x6a, 0x41, 0xe1, 0xae, 0x6a, 0x01, 0x47, 0x14, 0xd1, 0x91, - 0x6a, 0x41, 0xe1, 0xa0, 0x6a, 0x01, 0x42, 0x22, 0x00, 0xa1, 0x6a, 0x41, - 0xe3, 0x81, 0x6a, 0x01, 0xf1, 0x82, 0x6a, 0x01, 0xf8, 0x83, 0x6a, 0x01, - 0xfa, 0x80, 0x6a, 0x41, 0xe1, 0xad, 0x6a, 0x01, 0xb4, 0x01, 0xff, 0xe1, - 0xaf, 0x6a, 0x01, 0x42, 0x12, 0x00, 0xb8, 0x6a, 0x41, 0xe1, 0xa2, 0x6a, - 0x01, 0x42, 0x22, 0x00, 0xb7, 0x6a, 0x41, 0xe1, 0xbb, 0x6a, 0x01, 0x47, - 0x98, 0xb6, 0x90, 0x6a, 0x41, 0xe3, 0x7d, 0x6a, 0x01, 0xf1, 0x7e, 0x6a, - 0x01, 0xf8, 0x7f, 0x6a, 0x01, 0xfa, 0x7c, 0x6a, 0x41, 0xe1, 0xb1, 0x6a, - 0x01, 0x42, 0x22, 0x00, 0xbc, 0x6a, 0x41, 0xe1, 0xb5, 0x6a, 0x01, 0x42, - 0x22, 0x00, 0xbd, 0x6a, 0x41, 0xe3, 0x75, 0x6a, 0x01, 0xf1, 0x76, 0x6a, - 0x01, 0xb7, 0x08, 0xf8, 0x77, 0x6a, 0x01, 0xfa, 0x74, 0x6a, 0x41, 0xe3, - 0x89, 0x6a, 0x01, 0xf1, 0x8a, 0x6a, 0x01, 0xf8, 0x8b, 0x6a, 0x01, 0xfa, - 0x88, 0x6a, 0x41, 0x45, 0xc3, 0x0a, 0xc8, 0x6a, 0x01, 0xa6, 0x2e, 0x44, - 0x46, 0x2a, 0xc9, 0x6a, 0x01, 0x43, 0xbf, 0x0a, 0xc1, 0x6a, 0x01, 0xb3, - 0x14, 0xb4, 0x06, 0x44, 0xa1, 0x1d, 0xc0, 0x6a, 0x41, 0x44, 0x25, 0x01, - 0xc3, 0x6a, 0x01, 0x42, 0x15, 0x02, 0xc2, 0x6a, 0x41, 0x44, 0x27, 0x1d, - 0xc7, 0x6a, 0x01, 0x42, 0x60, 0x25, 0xc6, 0x6a, 0x41, 0x43, 0xa7, 0x05, - 0xc5, 0x6a, 0x01, 0x43, 0xcb, 0x06, 0xc4, 0x6a, 0x41, 0x43, 0x67, 0x00, - 0xd4, 0xfa, 0x01, 0x03, 0x8a, 0x4e, 0x01, 0xff, 0xa1, 0x9a, 0x06, 0xa3, - 0x8b, 0x06, 0xa4, 0xb0, 0x05, 0x09, 0xb3, 0x58, 0x93, 0x04, 0x52, 0x6e, - 0x51, 0xee, 0x1f, 0x01, 0xac, 0xbc, 0x02, 0x4a, 0xb7, 0xab, 0xf4, 0x0b, - 0x00, 0x07, 0x2f, 0x39, 0x95, 0x02, 0x42, 0xe9, 0x04, 0xd0, 0x0b, 0x00, - 0x57, 0x83, 0x2f, 0xff, 0x1f, 0x01, 0x4a, 0xf6, 0x7e, 0xf9, 0x0b, 0x00, - 0xb3, 0x5b, 0xb4, 0x42, 0x0b, 0xd1, 0x75, 0x0c, 0x54, 0x83, 0x45, 0xe4, - 0x1f, 0x01, 0x49, 0x19, 0xbf, 0xf5, 0x0b, 0x40, 0xa1, 0x24, 0xe5, 0xc6, - 0x0b, 0x80, 0x1b, 0xe9, 0xbf, 0x0b, 0x80, 0x12, 0xef, 0xca, 0x0b, 0x80, - 0x09, 0xf5, 0xc1, 0x0b, 0xc0, 0x00, 0xf5, 0xc2, 0x0b, 0x40, 0xef, 0xcb, - 0x0b, 0x40, 0xe9, 0xc0, 0x0b, 0x40, 0xe5, 0xc7, 0x0b, 0x40, 0xe1, 0xbe, - 0x0b, 0x00, 0xe9, 0xc8, 0x0b, 0x00, 0xf5, 0xcc, 0x0b, 0x40, 0x49, 0x17, - 0xbb, 0xed, 0x1f, 0x01, 0x0b, 0x7d, 0x9f, 0x01, 0xff, 0x4b, 0x45, 0x98, - 0xe8, 0x1f, 0x01, 0x4b, 0x12, 0x9e, 0xe9, 0x1f, 0x41, 0x4c, 0x61, 0x8a, - 0xe7, 0x1f, 0x01, 0x04, 0x30, 0x03, 0x0c, 0x49, 0x8c, 0xbb, 0xec, 0x1f, - 0x01, 0x51, 0xc0, 0x5c, 0xef, 0x1f, 0x41, 0xa1, 0x81, 0x01, 0x46, 0x84, - 0xd7, 0xd6, 0x1f, 0x01, 0xab, 0x64, 0x02, 0x57, 0x16, 0x4e, 0x43, 0x50, - 0xc5, 0xd5, 0x1f, 0x01, 0xb0, 0x2c, 0x47, 0x43, 0xbe, 0xd8, 0x1f, 0x01, - 0xb6, 0x01, 0xff, 0xa1, 0x15, 0x43, 0xf2, 0x2c, 0xe3, 0x1f, 0x01, 0xa9, - 0x01, 0xff, 0x44, 0x5d, 0x23, 0xcd, 0x0b, 0x00, 0x45, 0xa3, 0x4a, 0x83, - 0x0b, 0x40, 0x48, 0xca, 0xc4, 0xf1, 0x1f, 0x01, 0x46, 0x5e, 0xdc, 0xe0, - 0x1f, 0x41, 0xa1, 0x06, 0x42, 0x10, 0x00, 0xdf, 0x1f, 0x41, 0x44, 0x0c, - 0x76, 0xe1, 0x1f, 0x01, 0x43, 0xff, 0x04, 0xde, 0x1f, 0x01, 0x46, 0x84, - 0xdd, 0xdb, 0x1f, 0x41, 0x47, 0x93, 0xcf, 0xdc, 0x1f, 0x01, 0x47, 0x7c, - 0xd3, 0xf0, 0x1f, 0x01, 0x49, 0x41, 0xbe, 0xd9, 0x1f, 0x41, 0x44, 0xaa, - 0xeb, 0xdd, 0x1f, 0x01, 0xb5, 0x01, 0xff, 0x44, 0x95, 0x7c, 0xda, 0x1f, - 0x01, 0x43, 0xe4, 0x7d, 0xe2, 0x1f, 0x41, 0x48, 0x5a, 0xc1, 0xd7, 0x1f, - 0x01, 0x47, 0xd1, 0x15, 0x82, 0x0b, 0x40, 0x04, 0xbf, 0x0a, 0x0c, 0x44, - 0x2f, 0x03, 0xfa, 0x0b, 0x00, 0x43, 0xb0, 0x06, 0xf0, 0x0b, 0x40, 0x47, - 0x22, 0x11, 0xf1, 0x0b, 0x00, 0x48, 0xd5, 0x5c, 0xf2, 0x0b, 0x40, 0x48, - 0x65, 0x46, 0xe6, 0x1f, 0x01, 0x06, 0xc2, 0x05, 0x01, 0xff, 0xe1, 0x85, - 0x0b, 0x80, 0xb1, 0x01, 0x42, 0x37, 0x00, 0x9a, 0x0b, 0x00, 0xe5, 0x8e, - 0x0b, 0x80, 0xa1, 0x01, 0x42, 0x22, 0x00, 0xb9, 0x0b, 0x00, 0xe9, 0x87, - 0x0b, 0x80, 0x91, 0x01, 0x42, 0xbd, 0x26, 0x9c, 0x0b, 0x00, 0x42, 0x1b, - 0x02, 0x95, 0x0b, 0x00, 0xac, 0x72, 0x42, 0x6c, 0x00, 0xae, 0x0b, 0x00, - 0xae, 0x4e, 0xef, 0x92, 0x0b, 0x80, 0x45, 0x42, 0x6c, 0x09, 0xaa, 0x0b, - 0x00, 0xb2, 0x33, 0xb3, 0x21, 0xb4, 0x15, 0xf5, 0x89, 0x0b, 0x80, 0x0c, - 0x42, 0xa6, 0x0a, 0xb5, 0x0b, 0x00, 0x42, 0x34, 0x22, 0xaf, 0x0b, 0x40, - 0xf5, 0x8a, 0x0b, 0x40, 0xe1, 0xa4, 0x0b, 0x00, 0x42, 0x12, 0x00, 0x9f, - 0x0b, 0x40, 0xe1, 0xb8, 0x0b, 0x00, 0x42, 0x22, 0x00, 0xb6, 0x0b, 0x00, - 0x42, 0x15, 0x06, 0xb7, 0x0b, 0x40, 0xe1, 0xb0, 0x0b, 0x00, 0x42, 0x71, - 0x00, 0xb1, 0x0b, 0x40, 0xef, 0x93, 0x0b, 0x40, 0xe1, 0xa8, 0x0b, 0x00, - 0x42, 0x24, 0x02, 0x99, 0x0b, 0x00, 0xae, 0x06, 0x42, 0x34, 0x22, 0x9e, - 0x0b, 0x40, 0xe1, 0xa3, 0x0b, 0x00, 0x42, 0xff, 0x04, 0xa9, 0x0b, 0x40, - 0xe1, 0xb2, 0x0b, 0x00, 0xac, 0x01, 0xff, 0xe1, 0xb3, 0x0b, 0x00, 0x42, - 0x74, 0x00, 0xb4, 0x0b, 0x40, 0xe9, 0x88, 0x0b, 0x40, 0xe5, 0x8f, 0x0b, - 0x40, 0xe1, 0x86, 0x0b, 0x00, 0xe9, 0x90, 0x0b, 0x00, 0xf5, 0x94, 0x0b, - 0x40, 0x58, 0x9d, 0x27, 0xd4, 0x1f, 0x01, 0x04, 0xbf, 0x0a, 0x27, 0x06, - 0x24, 0x01, 0x01, 0xff, 0x4a, 0x9d, 0xa7, 0xc6, 0x1f, 0x01, 0x48, 0x2a, - 0x01, 0xd3, 0x1f, 0x01, 0x04, 0x5f, 0x25, 0x06, 0x4a, 0xef, 0xaf, 0xcd, - 0x1f, 0x41, 0x46, 0xc7, 0xae, 0xce, 0x1f, 0x01, 0x49, 0x10, 0xbf, 0xc7, - 0x1f, 0x41, 0x05, 0xc3, 0x0a, 0x59, 0xa6, 0x4b, 0x05, 0x1f, 0x2c, 0x3f, - 0x58, 0xad, 0x29, 0xc1, 0x1f, 0x01, 0x47, 0x2a, 0x01, 0xd0, 0x1f, 0x01, - 0x04, 0x5f, 0x25, 0x1d, 0xb4, 0x01, 0xff, 0x44, 0xfb, 0x1a, 0xcb, 0x1f, - 0x01, 0xa8, 0x06, 0x48, 0x34, 0x25, 0xc8, 0x1f, 0x41, 0x4b, 0xbd, 0x8e, - 0xc5, 0x1f, 0x01, 0x59, 0x23, 0x25, 0xc0, 0x1f, 0x41, 0x06, 0x3e, 0xd8, - 0x06, 0x48, 0x07, 0xbf, 0xc3, 0x1f, 0x41, 0xd1, 0xc9, 0x1f, 0x01, 0xd2, - 0xca, 0x1f, 0x41, 0xd1, 0xd1, 0x1f, 0x01, 0xd2, 0xd2, 0x1f, 0x41, 0x44, - 0xf2, 0xac, 0xcf, 0x1f, 0x01, 0x47, 0x45, 0xd1, 0xc4, 0x1f, 0x41, 0xe8, - 0xcc, 0x1f, 0x01, 0x44, 0x38, 0x25, 0xc2, 0x1f, 0x41, 0x47, 0x8a, 0xcc, - 0xf3, 0x0b, 0x00, 0x49, 0xb6, 0xb5, 0xf6, 0x0b, 0x00, 0x05, 0xc5, 0x06, - 0x06, 0x53, 0x8c, 0x4b, 0xe5, 0x1f, 0x41, 0x45, 0xc3, 0x0a, 0xee, 0x0b, - 0x00, 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0xef, 0x0b, 0x00, 0x43, 0xbf, 0x0a, - 0xe7, 0x0b, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xa1, 0x1d, 0xe6, 0x0b, - 0x40, 0x44, 0x25, 0x01, 0xe9, 0x0b, 0x00, 0x42, 0x15, 0x02, 0xe8, 0x0b, - 0x40, 0x44, 0x27, 0x1d, 0xed, 0x0b, 0x00, 0x42, 0x60, 0x25, 0xec, 0x0b, - 0x40, 0x43, 0xa7, 0x05, 0xeb, 0x0b, 0x00, 0x43, 0xcb, 0x06, 0xea, 0x0b, - 0x40, 0x4a, 0x46, 0x98, 0xf7, 0x0b, 0x00, 0x4b, 0x3d, 0xa2, 0xea, 0x1f, - 0x41, 0x4b, 0xc5, 0x9d, 0xeb, 0x1f, 0x01, 0x4c, 0x25, 0x93, 0xf8, 0x0b, - 0x00, 0x4d, 0x9b, 0x74, 0xd7, 0x0b, 0x40, 0x44, 0x31, 0x11, 0x78, 0xd3, - 0x01, 0x43, 0xbf, 0x0a, 0x77, 0xd3, 0x41, 0x48, 0x1a, 0xc3, 0x61, 0xf9, - 0x01, 0x03, 0x96, 0x0a, 0x01, 0xff, 0x51, 0x93, 0x56, 0xb9, 0x16, 0x01, - 0x06, 0xc4, 0x06, 0xd1, 0x02, 0x07, 0xc1, 0x05, 0x4e, 0x05, 0x2f, 0x03, - 0x2d, 0x0b, 0xd1, 0x75, 0x01, 0xff, 0xa1, 0x1a, 0xe5, 0xb2, 0x16, 0x01, - 0xe9, 0xae, 0x16, 0x81, 0x0d, 0xef, 0xb4, 0x16, 0x01, 0xf5, 0xb0, 0x16, - 0xc1, 0x00, 0xf5, 0xb1, 0x16, 0x41, 0xe9, 0xaf, 0x16, 0x41, 0xe1, 0xad, - 0x16, 0x01, 0xe9, 0xb3, 0x16, 0x01, 0xf5, 0xb5, 0x16, 0x41, 0x48, 0xd0, - 0x15, 0xab, 0x16, 0x01, 0x45, 0x5a, 0x3e, 0xb7, 0x16, 0x01, 0x02, 0x02, - 0x00, 0x01, 0xff, 0x44, 0x5d, 0x23, 0xb6, 0x16, 0x01, 0x45, 0xa3, 0x4a, - 0xac, 0x16, 0x41, 0xe1, 0x80, 0x16, 0x81, 0xe7, 0x01, 0xa2, 0xda, 0x01, - 0xa3, 0xcd, 0x01, 0xa4, 0xb4, 0x01, 0xe5, 0x86, 0x16, 0x01, 0xa7, 0xa3, - 0x01, 0x42, 0x22, 0x00, 0xa9, 0x16, 0x01, 0xe9, 0x82, 0x16, 0x81, 0x93, - 0x01, 0xaa, 0x86, 0x01, 0xab, 0x7a, 0x42, 0x74, 0x00, 0xa5, 0x16, 0x01, - 0x42, 0x6c, 0x00, 0xa2, 0x16, 0x01, 0xae, 0x56, 0xef, 0x88, 0x16, 0x01, - 0xb0, 0x46, 0xb2, 0x3a, 0xb3, 0x2e, 0xb4, 0x15, 0xf5, 0x84, 0x16, 0x81, - 0x0c, 0x42, 0xa6, 0x0a, 0xa6, 0x16, 0x01, 0x42, 0x34, 0x22, 0xa3, 0x16, - 0x41, 0xf5, 0x85, 0x16, 0x41, 0xe1, 0x99, 0x16, 0x01, 0x42, 0x22, 0x00, - 0x9a, 0x16, 0x01, 0xb4, 0x01, 0xff, 0xe1, 0x94, 0x16, 0x01, 0x42, 0x22, - 0x00, 0x95, 0x16, 0x41, 0xe1, 0xa8, 0x16, 0x01, 0x42, 0x22, 0x00, 0xa7, - 0x16, 0x41, 0xe1, 0xa4, 0x16, 0x01, 0x42, 0x71, 0x00, 0xaa, 0x16, 0x41, - 0xe1, 0x9e, 0x16, 0x01, 0x42, 0x22, 0x00, 0x9f, 0x16, 0x41, 0xe1, 0x9d, - 0x16, 0x01, 0x42, 0x24, 0x02, 0x8e, 0x16, 0x01, 0x42, 0xff, 0x04, 0x98, - 0x16, 0x01, 0x42, 0x34, 0x22, 0x93, 0x16, 0x41, 0xe1, 0x8a, 0x16, 0x01, - 0x42, 0x22, 0x00, 0x8b, 0x16, 0x41, 0xe1, 0x91, 0x16, 0x01, 0x42, 0x22, - 0x00, 0x92, 0x16, 0x41, 0xe9, 0x83, 0x16, 0x41, 0xe1, 0x8c, 0x16, 0x01, - 0x42, 0x22, 0x00, 0x8d, 0x16, 0x41, 0xe1, 0x9b, 0x16, 0x01, 0xa4, 0x06, - 0x42, 0x22, 0x00, 0x9c, 0x16, 0x41, 0xe1, 0x96, 0x16, 0x01, 0x42, 0x22, - 0x00, 0x97, 0x16, 0x41, 0xe1, 0x8f, 0x16, 0x01, 0x42, 0x22, 0x00, 0x90, - 0x16, 0x41, 0xe1, 0xa0, 0x16, 0x01, 0x42, 0x22, 0x00, 0xa1, 0x16, 0x41, - 0xe1, 0x81, 0x16, 0x01, 0xe9, 0x87, 0x16, 0x01, 0x4a, 0xa1, 0xad, 0xb8, - 0x16, 0x01, 0xf5, 0x89, 0x16, 0x41, 0x45, 0xc3, 0x0a, 0xc8, 0x16, 0x01, - 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0xc9, 0x16, 0x01, 0x43, 0xbf, 0x0a, 0xc1, - 0x16, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xa1, 0x1d, 0xc0, 0x16, 0x41, - 0x44, 0x25, 0x01, 0xc3, 0x16, 0x01, 0x42, 0x15, 0x02, 0xc2, 0x16, 0x41, - 0x44, 0x27, 0x1d, 0xc7, 0x16, 0x01, 0x42, 0x60, 0x25, 0xc6, 0x16, 0x41, - 0x43, 0xa7, 0x05, 0xc5, 0x16, 0x01, 0x43, 0xcb, 0x06, 0xc4, 0x16, 0x41, - 0x0a, 0x3b, 0xaa, 0xfc, 0x09, 0x05, 0x2a, 0xa1, 0xc1, 0x03, 0x05, 0xf4, - 0xe8, 0x01, 0xff, 0x07, 0xc1, 0x05, 0x91, 0x01, 0x05, 0x52, 0xe5, 0x80, - 0x01, 0x07, 0xf3, 0x15, 0x5c, 0x09, 0x69, 0xbd, 0x40, 0x06, 0x6c, 0x38, - 0x01, 0xff, 0xa1, 0x23, 0xe5, 0xb5, 0xaa, 0x00, 0xe9, 0xb2, 0xaa, 0x80, - 0x16, 0xef, 0xb6, 0xaa, 0x00, 0xf5, 0xb4, 0xaa, 0xc0, 0x00, 0xe1, 0xba, - 0xaa, 0x00, 0xe5, 0xb3, 0xaa, 0xc0, 0x00, 0xe1, 0xb9, 0xaa, 0x40, 0xe1, - 0xb8, 0xaa, 0x40, 0xe1, 0xb1, 0xaa, 0x00, 0xed, 0xbe, 0xaa, 0x00, 0xee, - 0xbd, 0xaa, 0x00, 0x42, 0x87, 0x13, 0xbb, 0xaa, 0x00, 0xf9, 0xbc, 0xaa, - 0x40, 0x42, 0x69, 0x18, 0xbf, 0xaa, 0x00, 0x45, 0x29, 0xe6, 0xc0, 0xaa, - 0x00, 0x44, 0x66, 0xef, 0xc2, 0xaa, 0x00, 0x43, 0xff, 0x07, 0xc1, 0xaa, - 0x40, 0x46, 0x9a, 0xd9, 0xde, 0xaa, 0x00, 0x02, 0x22, 0x03, 0x0c, 0x45, - 0x29, 0xe6, 0xdc, 0xaa, 0x00, 0x43, 0x1f, 0x84, 0xdd, 0xaa, 0x40, 0x45, - 0x21, 0xe4, 0xdf, 0xaa, 0x00, 0xee, 0xdb, 0xaa, 0x40, 0x43, 0x1c, 0x01, - 0xb0, 0xaa, 0x00, 0x43, 0xae, 0x02, 0xb7, 0xaa, 0x40, 0x05, 0xf9, 0x0a, - 0x93, 0x01, 0x04, 0xdd, 0x04, 0x01, 0xff, 0x42, 0x5d, 0x00, 0x9a, 0xaa, - 0x00, 0xa3, 0x7c, 0x42, 0x3b, 0x01, 0x92, 0xaa, 0x00, 0x42, 0x3d, 0x03, - 0xa0, 0xaa, 0x00, 0x42, 0xb7, 0x13, 0x86, 0xaa, 0x00, 0x42, 0x0b, 0x00, - 0xac, 0xaa, 0x00, 0xab, 0x52, 0x42, 0x13, 0x01, 0xa8, 0xaa, 0x00, 0x42, - 0x98, 0x07, 0xa2, 0xaa, 0x00, 0xae, 0x34, 0xef, 0xae, 0xaa, 0x00, 0xb0, - 0x24, 0x42, 0xd0, 0x00, 0xa6, 0xaa, 0x00, 0x42, 0x35, 0x03, 0x8e, 0xaa, - 0x00, 0xb4, 0x0c, 0x42, 0x68, 0x1c, 0xaa, 0xaa, 0x00, 0x42, 0x60, 0x46, - 0xa4, 0xaa, 0x40, 0x42, 0x0b, 0x00, 0x96, 0xaa, 0x00, 0xef, 0x94, 0xaa, - 0x40, 0x42, 0x0b, 0x00, 0x9e, 0xaa, 0x00, 0xef, 0x9c, 0xaa, 0x40, 0x42, - 0xb7, 0x13, 0x88, 0xaa, 0x00, 0xef, 0x98, 0xaa, 0x00, 0x42, 0x60, 0x46, - 0x90, 0xaa, 0x40, 0xa8, 0x04, 0xef, 0x80, 0xaa, 0x40, 0x42, 0x0b, 0x00, - 0x84, 0xaa, 0x00, 0xef, 0x82, 0xaa, 0x40, 0x42, 0x0b, 0x00, 0x8c, 0xaa, - 0x00, 0xef, 0x8a, 0xaa, 0x40, 0x42, 0x5d, 0x00, 0x9b, 0xaa, 0x00, 0xa3, - 0x7c, 0x42, 0x3b, 0x01, 0x93, 0xaa, 0x00, 0x42, 0x3d, 0x03, 0xa1, 0xaa, - 0x00, 0x42, 0xb7, 0x13, 0x87, 0xaa, 0x00, 0x42, 0x0b, 0x00, 0xad, 0xaa, - 0x00, 0xab, 0x52, 0x42, 0x13, 0x01, 0xa9, 0xaa, 0x00, 0x42, 0x98, 0x07, - 0xa3, 0xaa, 0x00, 0xae, 0x34, 0xef, 0xaf, 0xaa, 0x00, 0xb0, 0x24, 0x42, - 0xd0, 0x00, 0xa7, 0xaa, 0x00, 0x42, 0x35, 0x03, 0x8f, 0xaa, 0x00, 0xb4, - 0x0c, 0x42, 0x68, 0x1c, 0xab, 0xaa, 0x00, 0x42, 0x60, 0x46, 0xa5, 0xaa, - 0x40, 0x42, 0x0b, 0x00, 0x97, 0xaa, 0x00, 0xef, 0x95, 0xaa, 0x40, 0x42, - 0x0b, 0x00, 0x9f, 0xaa, 0x00, 0xef, 0x9d, 0xaa, 0x40, 0x42, 0xb7, 0x13, - 0x89, 0xaa, 0x00, 0xef, 0x99, 0xaa, 0x00, 0x42, 0x60, 0x46, 0x91, 0xaa, - 0x40, 0xa8, 0x04, 0xef, 0x81, 0xaa, 0x40, 0x42, 0x0b, 0x00, 0x85, 0xaa, - 0x00, 0xef, 0x83, 0xaa, 0x40, 0x42, 0x0b, 0x00, 0x8d, 0xaa, 0x00, 0xef, - 0x8b, 0xaa, 0x40, 0x02, 0xe8, 0x04, 0xe9, 0x05, 0x0b, 0xef, 0x9a, 0xa2, - 0x05, 0x07, 0xc1, 0x05, 0xdd, 0x02, 0x05, 0x2f, 0x03, 0xac, 0x01, 0x0b, - 0x2a, 0xa1, 0x66, 0x0b, 0xd1, 0x75, 0x01, 0xff, 0xe1, 0x61, 0x1a, 0x80, - 0x50, 0xe5, 0x6e, 0x1a, 0x00, 0xe9, 0x65, 0x1a, 0x80, 0x43, 0x47, 0x42, - 0xd0, 0x62, 0x1a, 0x00, 0xef, 0x6b, 0x1a, 0x80, 0x20, 0xb4, 0x12, 0xf5, - 0x69, 0x1a, 0xc0, 0x00, 0xe5, 0x67, 0x1a, 0x00, 0xf5, 0x6a, 0x1a, 0xc0, - 0x00, 0xe5, 0x68, 0x1a, 0x40, 0x46, 0x61, 0xd3, 0x64, 0x1a, 0x00, 0x46, - 0x52, 0xd9, 0x72, 0x1a, 0x40, 0x02, 0x5a, 0x00, 0x08, 0xef, 0x70, 0x1a, - 0x00, 0xf9, 0x6d, 0x1a, 0x40, 0x45, 0x5c, 0x00, 0x73, 0x1a, 0x00, 0x45, - 0xf5, 0x06, 0x6c, 0x1a, 0x40, 0xe9, 0x66, 0x1a, 0x40, 0xe1, 0x63, 0x1a, - 0x00, 0xe5, 0x6f, 0x1a, 0x00, 0xe9, 0x71, 0x1a, 0x40, 0x45, 0xc3, 0x0a, - 0x98, 0x1a, 0x00, 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0x99, 0x1a, 0x00, 0x43, - 0xbf, 0x0a, 0x91, 0x1a, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xa1, 0x1d, - 0x90, 0x1a, 0x40, 0x44, 0x25, 0x01, 0x93, 0x1a, 0x00, 0x42, 0x15, 0x02, - 0x92, 0x1a, 0x40, 0x44, 0x27, 0x1d, 0x97, 0x1a, 0x00, 0x42, 0x60, 0x25, - 0x96, 0x1a, 0x40, 0x43, 0xa7, 0x05, 0x95, 0x1a, 0x00, 0x43, 0xcb, 0x06, - 0x94, 0x1a, 0x40, 0x45, 0xd3, 0xe1, 0xad, 0x1a, 0x00, 0x46, 0x14, 0xd8, - 0xa5, 0x1a, 0x00, 0xa8, 0x91, 0x01, 0xab, 0x61, 0x04, 0x6d, 0x44, 0x44, - 0xb2, 0x36, 0x02, 0x15, 0x06, 0x19, 0x05, 0x05, 0x31, 0x0d, 0x45, 0xf9, - 0x06, 0xa0, 0x1a, 0xc0, 0x00, 0x44, 0xc6, 0xef, 0xa1, 0x1a, 0x40, 0xd1, - 0x75, 0x1a, 0x00, 0xd2, 0x76, 0x1a, 0x40, 0x43, 0x49, 0x8c, 0x60, 0x1a, - 0x00, 0x45, 0x2c, 0xe8, 0xaa, 0x1a, 0x80, 0x06, 0x43, 0xb9, 0x19, 0xa2, - 0x1a, 0x40, 0x43, 0x6c, 0x74, 0xab, 0x1a, 0x40, 0x46, 0x7c, 0xd6, 0x7a, - 0x1a, 0x00, 0x54, 0x23, 0x41, 0xa6, 0x1a, 0x40, 0x44, 0x8a, 0xa5, 0x74, - 0x1a, 0x80, 0x0c, 0x43, 0x1f, 0x84, 0x7b, 0x1a, 0x00, 0x45, 0x53, 0xe9, - 0xa7, 0x1a, 0x40, 0x44, 0xee, 0x42, 0x58, 0x1a, 0x40, 0x43, 0x31, 0x12, - 0xa8, 0x1a, 0x80, 0x21, 0x43, 0x1d, 0x53, 0xa3, 0x1a, 0x00, 0x04, 0x22, - 0xed, 0x01, 0xff, 0x06, 0x04, 0x31, 0x06, 0x4a, 0x73, 0xa4, 0x7c, 0x1a, - 0x40, 0xd3, 0x77, 0x1a, 0x00, 0xd4, 0x78, 0x1a, 0x00, 0xd5, 0x79, 0x1a, - 0x40, 0x43, 0x6c, 0x74, 0xa9, 0x1a, 0x40, 0x43, 0x1c, 0x01, 0xac, 0x1a, - 0x00, 0x42, 0xdc, 0x67, 0xa4, 0x1a, 0x40, 0xe1, 0x4b, 0x1a, 0x00, 0x42, - 0x16, 0x00, 0x37, 0x1a, 0x00, 0x42, 0xa1, 0x10, 0x2f, 0x1a, 0x00, 0x42, - 0x27, 0x01, 0x51, 0x1a, 0x00, 0x48, 0xf2, 0xc3, 0x54, 0x1a, 0x00, 0x05, - 0xf9, 0x0a, 0xbf, 0x01, 0xe9, 0x4d, 0x1a, 0x80, 0xb5, 0x01, 0xac, 0x46, - 0x42, 0x6c, 0x00, 0x3e, 0x1a, 0x00, 0xae, 0x2e, 0x42, 0x69, 0x05, 0x52, - 0x1a, 0x00, 0xb2, 0x0f, 0xf5, 0x4f, 0x1a, 0x80, 0x06, 0x42, 0xa9, 0x01, - 0x45, 0x1a, 0x40, 0xf5, 0x50, 0x1a, 0x40, 0xe1, 0x41, 0x1a, 0x80, 0x06, - 0x42, 0x87, 0x13, 0x42, 0x1a, 0x40, 0x42, 0xff, 0x04, 0x31, 0x1a, 0x00, - 0x42, 0x12, 0x00, 0x2d, 0x1a, 0x40, 0xe1, 0x36, 0x1a, 0x00, 0x42, 0x24, - 0x02, 0x26, 0x1a, 0x00, 0x42, 0x34, 0x22, 0x2c, 0x1a, 0x40, 0xe1, 0x43, - 0x1a, 0x80, 0x64, 0x42, 0x74, 0x00, 0x4a, 0x1a, 0x00, 0x03, 0xd1, 0x00, - 0x06, 0x42, 0x87, 0x13, 0x44, 0x1a, 0x40, 0xa3, 0x48, 0x42, 0xe1, 0x07, - 0x3c, 0x1a, 0x00, 0x42, 0x22, 0x00, 0x4c, 0x1a, 0x00, 0xab, 0x2a, 0xb0, - 0x1e, 0x45, 0xdc, 0x41, 0x30, 0x1a, 0x00, 0x42, 0x15, 0x06, 0x2a, 0x1a, - 0x00, 0xb4, 0x06, 0x42, 0x34, 0x22, 0x3f, 0x1a, 0x40, 0xe1, 0x34, 0x1a, - 0x00, 0x42, 0x22, 0x00, 0x35, 0x1a, 0x40, 0xe1, 0x3b, 0x1a, 0x00, 0x42, - 0x22, 0x00, 0x3d, 0x1a, 0x40, 0xe1, 0x23, 0x1a, 0x00, 0x42, 0x22, 0x00, - 0x25, 0x1a, 0x00, 0x42, 0x4c, 0x26, 0x24, 0x1a, 0x40, 0xe1, 0x29, 0x1a, - 0x00, 0x42, 0x22, 0x00, 0x2b, 0x1a, 0x40, 0xe5, 0x53, 0x1a, 0x40, 0xe9, - 0x4e, 0x1a, 0x40, 0xa3, 0x54, 0x42, 0xe1, 0x07, 0x3a, 0x1a, 0x00, 0x42, - 0x22, 0x00, 0x49, 0x1a, 0x00, 0xab, 0x36, 0xb0, 0x2a, 0x45, 0xdc, 0x41, - 0x2e, 0x1a, 0x00, 0xb3, 0x12, 0xb4, 0x06, 0x42, 0x34, 0x22, 0x40, 0x1a, - 0x40, 0xe1, 0x32, 0x1a, 0x00, 0x42, 0x22, 0x00, 0x33, 0x1a, 0x40, 0xe1, - 0x48, 0x1a, 0x00, 0x42, 0x22, 0x00, 0x46, 0x1a, 0x00, 0x42, 0x15, 0x06, - 0x47, 0x1a, 0x40, 0xe1, 0x38, 0x1a, 0x00, 0x42, 0x22, 0x00, 0x39, 0x1a, - 0x40, 0xe1, 0x20, 0x1a, 0x00, 0x42, 0x22, 0x00, 0x21, 0x1a, 0x00, 0x42, - 0x4c, 0x26, 0x22, 0x1a, 0x40, 0xe1, 0x27, 0x1a, 0x00, 0x42, 0x22, 0x00, - 0x28, 0x1a, 0x40, 0x45, 0xc3, 0x0a, 0x88, 0x1a, 0x00, 0xa6, 0x2e, 0x44, - 0x46, 0x2a, 0x89, 0x1a, 0x00, 0x43, 0xbf, 0x0a, 0x81, 0x1a, 0x00, 0xb3, - 0x14, 0xb4, 0x06, 0x44, 0xa1, 0x1d, 0x80, 0x1a, 0x40, 0x44, 0x25, 0x01, - 0x83, 0x1a, 0x00, 0x42, 0x15, 0x02, 0x82, 0x1a, 0x40, 0x44, 0x27, 0x1d, - 0x87, 0x1a, 0x00, 0x42, 0x60, 0x25, 0x86, 0x1a, 0x40, 0x43, 0xa7, 0x05, - 0x85, 0x1a, 0x00, 0x43, 0xcb, 0x06, 0x84, 0x1a, 0x40, 0x59, 0x42, 0x24, - 0x7f, 0x1a, 0x00, 0x0d, 0x6f, 0x32, 0x01, 0xff, 0x42, 0x16, 0x00, 0x5d, - 0x1a, 0x00, 0x49, 0x97, 0xb6, 0x59, 0x1a, 0x00, 0x54, 0xd7, 0x41, 0x5b, - 0x1a, 0x00, 0xac, 0x1d, 0xad, 0x06, 0x42, 0x15, 0x06, 0x5e, 0x1a, 0x40, - 0xe1, 0x5c, 0x1a, 0x00, 0x06, 0x7d, 0x32, 0x01, 0xff, 0x42, 0x74, 0x00, - 0x56, 0x1a, 0x00, 0x42, 0x71, 0x00, 0x55, 0x1a, 0x40, 0x4a, 0xff, 0xa4, - 0x57, 0x1a, 0x00, 0x45, 0xc0, 0x34, 0x5a, 0x1a, 0x40, 0xe1, 0x63, 0x19, - 0x80, 0xb0, 0x01, 0xe5, 0x6b, 0x19, 0x80, 0xa2, 0x01, 0x42, 0xe1, 0x07, - 0x5c, 0x19, 0x00, 0x42, 0x22, 0x00, 0x5e, 0x19, 0x00, 0xe9, 0x64, 0x19, - 0x00, 0xab, 0x85, 0x01, 0x42, 0x74, 0x00, 0x58, 0x19, 0x00, 0x42, 0x6c, - 0x00, 0x5b, 0x19, 0x00, 0xae, 0x6d, 0xef, 0x69, 0x19, 0x80, 0x64, 0xb0, - 0x58, 0x42, 0xf4, 0x13, 0x5f, 0x19, 0x00, 0x42, 0x15, 0x06, 0x54, 0x19, - 0x00, 0xb4, 0x1b, 0xf5, 0x67, 0x19, 0x80, 0x12, 0x42, 0xa6, 0x0a, 0x5d, - 0x19, 0x00, 0x42, 0x4c, 0x26, 0x51, 0x19, 0x00, 0x42, 0x34, 0x22, 0x55, - 0x19, 0x40, 0xe5, 0x6a, 0x19, 0x40, 0xe1, 0x56, 0x19, 0x00, 0x42, 0x22, - 0x00, 0x57, 0x19, 0x00, 0x04, 0x5e, 0x1f, 0x0d, 0xb3, 0x01, 0xff, 0xe1, - 0x53, 0x19, 0x00, 0x42, 0x22, 0x00, 0x61, 0x19, 0x40, 0xd2, 0x70, 0x19, - 0x00, 0xd3, 0x71, 0x19, 0x00, 0xd4, 0x72, 0x19, 0x00, 0xd5, 0x73, 0x19, - 0x00, 0xd6, 0x74, 0x19, 0x40, 0xe1, 0x59, 0x19, 0x00, 0x42, 0x22, 0x00, - 0x5a, 0x19, 0x40, 0xef, 0x68, 0x19, 0x40, 0xe1, 0x62, 0x19, 0x00, 0x42, - 0x24, 0x02, 0x52, 0x19, 0x40, 0xe1, 0x50, 0x19, 0x00, 0x42, 0x22, 0x00, - 0x60, 0x19, 0x40, 0xe5, 0x65, 0x19, 0x00, 0xe8, 0x66, 0x19, 0x40, 0xe9, - 0x6d, 0x19, 0x00, 0x42, 0x87, 0x13, 0x6c, 0x19, 0x40, 0x80, 0x82, 0x02, - 0x05, 0x29, 0xe1, 0x70, 0x06, 0x2a, 0xd7, 0x01, 0xff, 0x07, 0xc1, 0x05, - 0x0d, 0x0b, 0xd1, 0x75, 0x01, 0xff, 0xe9, 0x72, 0x17, 0x00, 0xf5, 0x73, - 0x17, 0x40, 0xe1, 0x60, 0x17, 0x00, 0x42, 0x16, 0x00, 0x6a, 0x17, 0x00, - 0x42, 0xa1, 0x10, 0x67, 0x17, 0x00, 0x42, 0x24, 0x02, 0x64, 0x17, 0x00, - 0xe9, 0x61, 0x17, 0x00, 0x42, 0x1b, 0x02, 0x63, 0x17, 0x00, 0x42, 0x74, - 0x00, 0x6e, 0x17, 0x00, 0x42, 0x6c, 0x00, 0x6b, 0x17, 0x00, 0xae, 0x22, - 0x42, 0x6c, 0x09, 0x69, 0x17, 0x00, 0x42, 0x15, 0x06, 0x70, 0x17, 0x00, - 0x42, 0x12, 0x00, 0x66, 0x17, 0x00, 0xf5, 0x62, 0x17, 0x00, 0x42, 0xa9, - 0x01, 0x6f, 0x17, 0x00, 0x42, 0x34, 0x22, 0x6c, 0x17, 0x40, 0xe1, 0x68, - 0x17, 0x00, 0x42, 0x24, 0x02, 0x65, 0x17, 0x40, 0x07, 0xc1, 0x05, 0x1d, - 0x05, 0x2f, 0x03, 0x0d, 0x0b, 0xd1, 0x75, 0x01, 0xff, 0xe9, 0x12, 0x17, - 0x00, 0xf5, 0x13, 0x17, 0x40, 0x48, 0xfe, 0x86, 0x15, 0x17, 0x00, 0x46, - 0x5b, 0x23, 0x14, 0x17, 0x40, 0xe1, 0x00, 0x17, 0x80, 0x62, 0x42, 0x16, - 0x00, 0x0a, 0x17, 0x00, 0x42, 0xa1, 0x10, 0x07, 0x17, 0x00, 0x42, 0x24, - 0x02, 0x04, 0x17, 0x00, 0x42, 0x22, 0x00, 0x11, 0x17, 0x00, 0xe9, 0x01, - 0x17, 0x00, 0x42, 0x1b, 0x02, 0x03, 0x17, 0x00, 0x42, 0x74, 0x00, 0x0e, - 0x17, 0x00, 0x42, 0x6c, 0x00, 0x0b, 0x17, 0x00, 0xae, 0x28, 0x42, 0x6c, - 0x09, 0x09, 0x17, 0x00, 0x42, 0x71, 0x00, 0x0d, 0x17, 0x00, 0x42, 0x15, - 0x06, 0x10, 0x17, 0x00, 0x42, 0x12, 0x00, 0x06, 0x17, 0x00, 0xf5, 0x02, - 0x17, 0x00, 0x42, 0xa9, 0x01, 0x0f, 0x17, 0x00, 0x42, 0x34, 0x22, 0x0c, - 0x17, 0x40, 0xe1, 0x08, 0x17, 0x00, 0x42, 0x24, 0x02, 0x05, 0x17, 0x40, - 0x49, 0x0a, 0xbc, 0x1f, 0x17, 0x40, 0xa1, 0x82, 0x04, 0xa3, 0xe1, 0x03, - 0xa4, 0x92, 0x03, 0xa5, 0x83, 0x03, 0x49, 0x15, 0x16, 0x2e, 0x00, 0x0e, - 0x02, 0x87, 0x00, 0xec, 0x02, 0x4c, 0x15, 0x8e, 0x2d, 0x00, 0x0e, 0xac, - 0x63, 0x4b, 0x12, 0x9e, 0x23, 0x00, 0x0e, 0xb0, 0x4f, 0x02, 0x7c, 0x00, - 0x3f, 0xb2, 0x20, 0xb3, 0x0c, 0x45, 0xad, 0x22, 0x7e, 0x00, 0x0e, 0x4d, - 0x7e, 0x0b, 0x7c, 0x00, 0x4e, 0x48, 0x6f, 0x58, 0x3b, 0x00, 0x0e, 0x46, - 0x6a, 0x30, 0x2f, 0x00, 0x0e, 0x44, 0x88, 0x4b, 0x20, 0x00, 0x4e, 0x4e, - 0xcd, 0x70, 0x5c, 0x00, 0x0e, 0x05, 0xc9, 0x00, 0x01, 0xff, 0x4d, 0x23, - 0x0b, 0x7d, 0x00, 0x0e, 0x4b, 0x50, 0x21, 0x29, 0x00, 0x0e, 0x4e, 0x27, - 0x26, 0x5d, 0x00, 0x4e, 0x4b, 0xd8, 0x33, 0x3f, 0x00, 0x0e, 0x4c, 0xf0, - 0x04, 0x22, 0x00, 0x4e, 0x4b, 0xc6, 0x99, 0x25, 0x00, 0x0e, 0x48, 0x46, - 0x70, 0x2b, 0x00, 0x4e, 0x05, 0xb4, 0x05, 0x24, 0xa5, 0x06, 0x47, 0xac, - 0x88, 0x5f, 0x00, 0x4e, 0x03, 0xc5, 0x00, 0x06, 0x4c, 0x9d, 0x93, 0x3c, - 0x00, 0x4e, 0x4d, 0x23, 0x0b, 0x7b, 0x00, 0x0e, 0x4b, 0x50, 0x21, 0x28, - 0x00, 0x0e, 0x4e, 0x27, 0x26, 0x5b, 0x00, 0x4e, 0x0f, 0xb9, 0x05, 0x6d, - 0x0d, 0x4b, 0x08, 0x01, 0xff, 0xe1, 0x61, 0x00, 0x0e, 0xe2, 0x62, 0x00, - 0x0e, 0xe3, 0x63, 0x00, 0x0e, 0xe4, 0x64, 0x00, 0x0e, 0xe5, 0x65, 0x00, - 0x0e, 0xe6, 0x66, 0x00, 0x0e, 0xe7, 0x67, 0x00, 0x0e, 0xe8, 0x68, 0x00, - 0x0e, 0xe9, 0x69, 0x00, 0x0e, 0xea, 0x6a, 0x00, 0x0e, 0xeb, 0x6b, 0x00, - 0x0e, 0xec, 0x6c, 0x00, 0x0e, 0xed, 0x6d, 0x00, 0x0e, 0xee, 0x6e, 0x00, - 0x0e, 0xef, 0x6f, 0x00, 0x0e, 0xf0, 0x70, 0x00, 0x0e, 0xf1, 0x71, 0x00, - 0x0e, 0xf2, 0x72, 0x00, 0x0e, 0xf3, 0x73, 0x00, 0x0e, 0xf4, 0x74, 0x00, - 0x0e, 0xf5, 0x75, 0x00, 0x0e, 0xf6, 0x76, 0x00, 0x0e, 0xf7, 0x77, 0x00, - 0x0e, 0xf8, 0x78, 0x00, 0x0e, 0xf9, 0x79, 0x00, 0x0e, 0xfa, 0x7a, 0x00, - 0x4e, 0xe1, 0x41, 0x00, 0x0e, 0xe2, 0x42, 0x00, 0x0e, 0xe3, 0x43, 0x00, - 0x0e, 0xe4, 0x44, 0x00, 0x0e, 0xe5, 0x45, 0x00, 0x0e, 0xe6, 0x46, 0x00, - 0x0e, 0xe7, 0x47, 0x00, 0x0e, 0xe8, 0x48, 0x00, 0x0e, 0xe9, 0x49, 0x00, - 0x0e, 0xea, 0x4a, 0x00, 0x0e, 0xeb, 0x4b, 0x00, 0x0e, 0xec, 0x4c, 0x00, - 0x0e, 0xed, 0x4d, 0x00, 0x0e, 0xee, 0x4e, 0x00, 0x0e, 0xef, 0x4f, 0x00, - 0x0e, 0xf0, 0x50, 0x00, 0x0e, 0xf1, 0x51, 0x00, 0x0e, 0xf2, 0x52, 0x00, - 0x0e, 0xf3, 0x53, 0x00, 0x0e, 0xf4, 0x54, 0x00, 0x0e, 0xf5, 0x55, 0x00, - 0x0e, 0xf6, 0x56, 0x00, 0x0e, 0xf7, 0x57, 0x00, 0x0e, 0xf8, 0x58, 0x00, - 0x0e, 0xf9, 0x59, 0x00, 0x0e, 0xfa, 0x5a, 0x00, 0x4e, 0x4a, 0x8f, 0x22, - 0x60, 0x00, 0x0e, 0x4f, 0xf9, 0x58, 0x3e, 0x00, 0x4e, 0x4a, 0xfa, 0x12, - 0x3d, 0x00, 0x0e, 0x4f, 0xae, 0x00, 0x21, 0x00, 0x4e, 0x05, 0xc5, 0x06, - 0x06, 0x4a, 0xf6, 0x98, 0x24, 0x00, 0x4e, 0x45, 0xc3, 0x0a, 0x38, 0x00, - 0x0e, 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0x39, 0x00, 0x0e, 0x43, 0xbf, 0x0a, - 0x31, 0x00, 0x0e, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xa1, 0x1d, 0x30, 0x00, - 0x4e, 0x44, 0x25, 0x01, 0x33, 0x00, 0x0e, 0x42, 0x15, 0x02, 0x32, 0x00, - 0x4e, 0x44, 0x27, 0x1d, 0x37, 0x00, 0x0e, 0x42, 0x60, 0x25, 0x36, 0x00, - 0x4e, 0x43, 0xa7, 0x05, 0x35, 0x00, 0x0e, 0x43, 0xcb, 0x06, 0x34, 0x00, - 0x4e, 0x50, 0xa5, 0x04, 0x5e, 0x00, 0x0e, 0xaf, 0x01, 0xff, 0x43, 0x03, - 0x12, 0x3a, 0x00, 0x0e, 0x02, 0xea, 0x04, 0x01, 0xff, 0xe1, 0x2c, 0x00, - 0x0e, 0x49, 0x34, 0xb6, 0x40, 0x00, 0x4e, 0x48, 0x2e, 0x3d, 0x26, 0x00, - 0x0e, 0x49, 0x92, 0x35, 0x27, 0x00, 0x0e, 0x47, 0xee, 0x0c, 0x2a, 0x00, - 0x4e, 0x43, 0x2f, 0x76, 0x96, 0xf9, 0x01, 0x45, 0x1d, 0x49, 0x55, 0xf4, - 0x41, 0x4c, 0x59, 0x89, 0xcc, 0x29, 0x00, 0xa1, 0xd3, 0x83, 0x01, 0xa3, - 0xb6, 0x82, 0x01, 0xa5, 0xe0, 0x7d, 0xa8, 0xb7, 0x74, 0xa9, 0xec, 0x3d, - 0xab, 0xbf, 0x3d, 0xac, 0x95, 0x3c, 0xad, 0xdf, 0x37, 0xae, 0xa4, 0x37, - 0xaf, 0xc8, 0x2c, 0xb0, 0xd0, 0x2a, 0x02, 0x7c, 0x00, 0xbe, 0x18, 0xb4, - 0xf4, 0x15, 0xb5, 0xa8, 0x0a, 0xb7, 0x8d, 0x0a, 0xb9, 0x01, 0xff, 0x0b, - 0xc8, 0x9c, 0xfa, 0x07, 0xad, 0xb2, 0x05, 0xae, 0xa3, 0x05, 0x02, 0x0d, - 0x00, 0x01, 0xff, 0x03, 0xc3, 0x71, 0x06, 0x43, 0x8b, 0x09, 0x89, 0xf4, - 0x41, 0x51, 0xb0, 0x4e, 0x0f, 0x07, 0x00, 0x47, 0x9f, 0xcc, 0x4a, 0x07, - 0x00, 0x02, 0xe8, 0x04, 0xed, 0x04, 0x0d, 0x6c, 0x80, 0xdc, 0x04, 0xa5, - 0xc2, 0x04, 0x4c, 0x25, 0x8d, 0x40, 0x07, 0x00, 0xa8, 0x85, 0x04, 0x07, - 0xc1, 0x05, 0xca, 0x01, 0x45, 0x60, 0x27, 0x49, 0x07, 0x00, 0x0d, 0xf1, - 0x84, 0xb3, 0x01, 0x07, 0x17, 0xd2, 0x9c, 0x01, 0x49, 0xef, 0xbb, 0x41, - 0x07, 0x00, 0xb2, 0x78, 0x02, 0x6f, 0x00, 0x3a, 0xb4, 0x17, 0x07, 0x19, - 0xd5, 0x01, 0xff, 0x45, 0x5c, 0x00, 0x33, 0x07, 0x00, 0x45, 0xf5, 0x06, - 0x34, 0x07, 0x00, 0x46, 0x0e, 0x1f, 0x35, 0x07, 0x40, 0x0a, 0x5f, 0x12, - 0x11, 0x11, 0x36, 0x5e, 0x01, 0xff, 0x45, 0x5c, 0x00, 0x43, 0x07, 0x00, - 0x45, 0xf5, 0x06, 0x44, 0x07, 0x40, 0x45, 0x5c, 0x00, 0x45, 0x07, 0x00, - 0x45, 0xf5, 0x06, 0x46, 0x07, 0x40, 0x08, 0xb2, 0xc1, 0x18, 0x0a, 0x79, - 0xad, 0x01, 0xff, 0x45, 0xc4, 0x3a, 0x03, 0x07, 0x80, 0x06, 0x49, 0x15, - 0x16, 0x01, 0x07, 0x40, 0x4c, 0xb9, 0x89, 0x08, 0x07, 0x40, 0x45, 0xc4, - 0x3a, 0x04, 0x07, 0x80, 0x06, 0x49, 0x15, 0x16, 0x02, 0x07, 0x40, 0x08, - 0xb9, 0x89, 0x01, 0xff, 0x44, 0xc3, 0x00, 0x09, 0x07, 0x00, 0x45, 0xc8, - 0x00, 0x09, 0x07, 0x40, 0x05, 0x92, 0xe1, 0x0c, 0x47, 0xe5, 0xd3, 0x42, - 0x07, 0x00, 0x44, 0xce, 0xef, 0x3f, 0x07, 0x40, 0x45, 0x5c, 0x00, 0x36, - 0x07, 0x00, 0x45, 0xf5, 0x06, 0x37, 0x07, 0x40, 0x45, 0x5c, 0x00, 0x30, - 0x07, 0x00, 0x45, 0xf5, 0x06, 0x31, 0x07, 0x00, 0x46, 0x0e, 0x1f, 0x32, - 0x07, 0x40, 0x45, 0x5c, 0x00, 0x47, 0x07, 0x00, 0x45, 0xf5, 0x06, 0x48, - 0x07, 0x40, 0x45, 0xc5, 0x66, 0x10, 0x07, 0x00, 0x44, 0x0a, 0xec, 0x12, - 0x07, 0x00, 0xa4, 0x9b, 0x02, 0xe5, 0x25, 0x07, 0x00, 0x4d, 0x56, 0x81, - 0x24, 0x07, 0x00, 0x45, 0x77, 0xe3, 0x13, 0x07, 0x80, 0x83, 0x02, 0x42, - 0xb0, 0x01, 0x17, 0x07, 0x80, 0xf5, 0x01, 0x44, 0x8e, 0xed, 0x1f, 0x07, - 0x00, 0x46, 0x96, 0xda, 0x20, 0x07, 0x00, 0xad, 0x96, 0x01, 0x43, 0x54, - 0x22, 0x22, 0x07, 0x00, 0x42, 0x6f, 0x02, 0x26, 0x07, 0x80, 0x72, 0x44, - 0x1a, 0xd5, 0x29, 0x07, 0x00, 0xb2, 0x5e, 0xb3, 0x2e, 0xb4, 0x19, 0x43, - 0xc0, 0x88, 0x18, 0x07, 0x00, 0x44, 0xf2, 0xef, 0x1d, 0x07, 0x80, 0x06, - 0x44, 0x9c, 0x73, 0x19, 0x07, 0x40, 0x43, 0xbd, 0x14, 0x1e, 0x07, 0x40, - 0x42, 0x9a, 0x43, 0x2c, 0x07, 0x00, 0x43, 0x39, 0x25, 0x1b, 0x07, 0xc0, - 0x00, 0x49, 0x05, 0xb2, 0x1c, 0x07, 0x40, 0x44, 0x88, 0xe7, 0x28, 0x07, - 0x00, 0x46, 0x5d, 0x81, 0x23, 0x07, 0x00, 0x43, 0x0e, 0x16, 0x2b, 0x07, - 0x00, 0x07, 0xf1, 0xd0, 0x06, 0x50, 0xba, 0x66, 0x11, 0x07, 0x40, 0x42, - 0xa0, 0x19, 0x4f, 0x07, 0x00, 0x45, 0xc1, 0xe4, 0x4e, 0x07, 0x00, 0x45, - 0x71, 0xe9, 0x4d, 0x07, 0x40, 0x4a, 0xf7, 0xa7, 0x27, 0x07, 0x00, 0x43, - 0x82, 0x0c, 0x2a, 0x07, 0x40, 0x06, 0xb2, 0xdc, 0x01, 0xff, 0x45, 0xb0, - 0xe1, 0x2d, 0x07, 0x00, 0x47, 0x7f, 0xcd, 0x2f, 0x07, 0x00, 0x46, 0x0a, - 0xd9, 0x2e, 0x07, 0x40, 0x09, 0x91, 0xb3, 0x06, 0x42, 0x29, 0x02, 0x21, - 0x07, 0x40, 0x43, 0x50, 0x2a, 0x66, 0x08, 0x00, 0x42, 0xbd, 0x26, 0x61, - 0x08, 0x00, 0x02, 0x0f, 0x07, 0x2c, 0xae, 0x12, 0x42, 0x71, 0x00, 0x67, - 0x08, 0x00, 0x43, 0x59, 0x20, 0x6a, 0x08, 0x00, 0x43, 0x30, 0x28, 0x63, - 0x08, 0x40, 0x42, 0x24, 0x02, 0x60, 0x08, 0x00, 0xae, 0x06, 0x42, 0x34, - 0x22, 0x62, 0x08, 0x40, 0xe1, 0x64, 0x08, 0x00, 0x42, 0xff, 0x04, 0x65, - 0x08, 0x40, 0xe1, 0x68, 0x08, 0x00, 0x42, 0x74, 0x00, 0x69, 0x08, 0x40, - 0x42, 0x53, 0x00, 0x1a, 0x07, 0x40, 0x49, 0x05, 0xb2, 0x14, 0x07, 0x40, - 0x45, 0xf0, 0x52, 0x15, 0x07, 0x00, 0x52, 0xe8, 0x52, 0x16, 0x07, 0x40, - 0x08, 0xfa, 0xc0, 0x1e, 0x04, 0x9c, 0x7f, 0x06, 0x4f, 0xcd, 0x6f, 0x05, - 0x07, 0x40, 0x80, 0x06, 0x4d, 0x98, 0x7e, 0x3c, 0x07, 0x40, 0x45, 0x5c, - 0x00, 0x3a, 0x07, 0x00, 0x45, 0xf5, 0x06, 0x3b, 0x07, 0x40, 0x4a, 0xb3, - 0xa5, 0x0d, 0x07, 0x00, 0x49, 0x9d, 0xb9, 0x0c, 0x07, 0x00, 0x46, 0xa0, - 0xb9, 0x0b, 0x07, 0x40, 0x4f, 0xec, 0x6e, 0x00, 0x07, 0x00, 0x05, 0x9a, - 0x7e, 0x01, 0xff, 0x45, 0x5c, 0x00, 0x3d, 0x07, 0x00, 0x45, 0xf5, 0x06, - 0x3e, 0x07, 0x40, 0x47, 0x1c, 0x01, 0x39, 0x07, 0x00, 0x4a, 0x0b, 0x00, - 0x38, 0x07, 0x40, 0x0b, 0xa7, 0x9c, 0x06, 0x49, 0x51, 0xba, 0x0a, 0x07, - 0x40, 0x44, 0xc3, 0x00, 0x06, 0x07, 0x00, 0x45, 0xc8, 0x00, 0x07, 0x07, - 0x40, 0x46, 0xa6, 0xd6, 0x4d, 0xf5, 0x01, 0x4d, 0x80, 0x73, 0x16, 0x00, - 0x40, 0x08, 0xd4, 0x20, 0x06, 0x45, 0x84, 0xe5, 0x2f, 0x23, 0x40, 0x4b, - 0x9d, 0x50, 0x06, 0x24, 0x00, 0xa2, 0xa6, 0x02, 0x02, 0x37, 0x00, 0x95, - 0x02, 0xa4, 0xc7, 0x01, 0xa5, 0x96, 0x01, 0xa6, 0x87, 0x01, 0x4f, 0x0d, - 0x6c, 0x1d, 0x24, 0x00, 0x55, 0x08, 0x3b, 0x09, 0x24, 0x00, 0x49, 0x2c, - 0x20, 0x0a, 0x24, 0x00, 0x4d, 0xed, 0x83, 0x45, 0xf5, 0x01, 0xae, 0x59, - 0x50, 0xda, 0x64, 0x1e, 0x24, 0x00, 0xb3, 0x12, 0x52, 0xaa, 0x54, 0x97, - 0x2b, 0x00, 0x4e, 0x96, 0x7c, 0x1f, 0x24, 0x00, 0x53, 0x8d, 0x4d, 0x0b, - 0x24, 0x40, 0x4f, 0x1f, 0x69, 0x4f, 0x21, 0x00, 0x05, 0xa0, 0xa9, 0x29, - 0x44, 0x88, 0x4b, 0x20, 0x24, 0x00, 0x08, 0x24, 0x4c, 0x13, 0x49, 0xa8, - 0xbd, 0x1a, 0x24, 0x80, 0x06, 0x4f, 0x7e, 0x73, 0x16, 0x24, 0x40, 0x49, - 0x52, 0x2d, 0x26, 0x24, 0x40, 0x47, 0xac, 0xce, 0x01, 0x24, 0x00, 0x44, - 0x96, 0x2f, 0x02, 0x24, 0x40, 0x42, 0x9e, 0x01, 0x0f, 0x24, 0x00, 0x43, - 0xfd, 0x07, 0x0e, 0x24, 0x40, 0xa5, 0x06, 0x43, 0x16, 0x16, 0x00, 0x24, - 0x40, 0x52, 0x96, 0x50, 0x15, 0x24, 0x00, 0x45, 0x2b, 0x20, 0x24, 0x24, - 0x40, 0x4d, 0x81, 0x82, 0x1c, 0x24, 0x00, 0x48, 0xc2, 0xc6, 0x0c, 0x24, - 0x40, 0xae, 0x06, 0x45, 0x56, 0x69, 0x1b, 0x24, 0x40, 0x05, 0x17, 0x05, - 0x06, 0x45, 0xfb, 0xe6, 0x05, 0x24, 0x40, 0x46, 0x19, 0x04, 0x19, 0x24, - 0x00, 0xb4, 0x01, 0xff, 0x43, 0xae, 0x06, 0x03, 0x24, 0x00, 0x4b, 0x93, - 0x9f, 0x04, 0x24, 0xc0, 0x00, 0x46, 0x32, 0x01, 0x17, 0x24, 0x40, 0x4f, - 0x4c, 0x69, 0x10, 0x24, 0x00, 0xa5, 0x01, 0xff, 0x44, 0xcd, 0x79, 0x21, - 0x24, 0x80, 0x20, 0x0d, 0x7f, 0x88, 0x01, 0xff, 0x44, 0xca, 0x06, 0x14, - 0x24, 0x00, 0x43, 0xbf, 0x0a, 0x11, 0x24, 0x00, 0xb4, 0x01, 0xff, 0x44, - 0x25, 0x01, 0x13, 0x24, 0x00, 0x42, 0x15, 0x02, 0x12, 0x24, 0x40, 0x80, - 0x01, 0xff, 0x48, 0x53, 0x2d, 0x25, 0x24, 0x00, 0x51, 0xc2, 0x5a, 0x29, - 0x24, 0x00, 0x5e, 0x12, 0x14, 0x28, 0x24, 0x00, 0x59, 0xa0, 0x25, 0x27, - 0x24, 0x40, 0x44, 0x64, 0x2b, 0x18, 0x24, 0x00, 0x4d, 0x6a, 0x86, 0x0d, - 0x24, 0x40, 0x48, 0xa2, 0xc0, 0x08, 0x24, 0x00, 0x43, 0x10, 0x09, 0x07, - 0x24, 0x40, 0x07, 0xc1, 0x05, 0x4d, 0x0c, 0xf9, 0x91, 0x39, 0x05, 0x2f, - 0x03, 0x1b, 0x0b, 0xd1, 0x75, 0x01, 0xff, 0xe1, 0x23, 0xa8, 0x00, 0xe5, - 0x26, 0xa8, 0x00, 0xe9, 0x24, 0xa8, 0x00, 0x42, 0x69, 0x05, 0x27, 0xa8, - 0x00, 0xf5, 0x25, 0xa8, 0x40, 0xa1, 0x0c, 0x48, 0xca, 0xc2, 0x02, 0xa8, - 0x00, 0x47, 0x73, 0x63, 0x06, 0xa8, 0x40, 0x50, 0x6a, 0x63, 0x2c, 0xa8, - 0x00, 0x47, 0xd1, 0x15, 0x0b, 0xa8, 0x40, 0xd1, 0x28, 0xa8, 0x00, 0xd2, - 0x29, 0xa8, 0x00, 0xd3, 0x2a, 0xa8, 0x00, 0xd4, 0x2b, 0xa8, 0x40, 0xe1, - 0x00, 0xa8, 0x00, 0xa2, 0xa9, 0x01, 0xa3, 0x9c, 0x01, 0xa4, 0x83, 0x01, - 0xe5, 0x04, 0xa8, 0x00, 0xa7, 0x73, 0x42, 0x0b, 0x00, 0x22, 0xa8, 0x00, - 0xe9, 0x01, 0xa8, 0x00, 0xaa, 0x5d, 0xab, 0x51, 0x42, 0x13, 0x01, 0x1f, - 0xa8, 0x00, 0x42, 0x98, 0x07, 0x1d, 0xa8, 0x00, 0x42, 0xb4, 0x01, 0x18, - 0xa8, 0x00, 0xef, 0x05, 0xa8, 0x00, 0xb0, 0x2f, 0xb2, 0x23, 0x42, 0x35, - 0x03, 0x21, 0xa8, 0x00, 0xb4, 0x04, 0xf5, 0x03, 0xa8, 0x40, 0x42, 0x0b, - 0x00, 0x15, 0xa8, 0x00, 0xef, 0x14, 0xa8, 0x00, 0xb4, 0x01, 0xff, 0x42, - 0x0b, 0x00, 0x11, 0xa8, 0x00, 0xef, 0x10, 0xa8, 0x40, 0xef, 0x1e, 0xa8, - 0x00, 0x42, 0xd0, 0x00, 0x20, 0xa8, 0x40, 0x42, 0x0b, 0x00, 0x1a, 0xa8, - 0x00, 0xef, 0x19, 0xa8, 0x40, 0x42, 0x0b, 0x00, 0x08, 0xa8, 0x00, 0xef, - 0x07, 0xa8, 0x40, 0x42, 0x0b, 0x00, 0x0f, 0xa8, 0x00, 0xef, 0x0e, 0xa8, - 0x40, 0x42, 0x0b, 0x00, 0x0a, 0xa8, 0x00, 0xef, 0x09, 0xa8, 0x40, 0xa4, - 0x0a, 0x42, 0x0b, 0x00, 0x17, 0xa8, 0x00, 0xef, 0x16, 0xa8, 0x40, 0x42, - 0x0b, 0x00, 0x13, 0xa8, 0x00, 0xef, 0x12, 0xa8, 0x40, 0x42, 0x0b, 0x00, - 0x0d, 0xa8, 0x00, 0xef, 0x0c, 0xa8, 0x40, 0x42, 0x0b, 0x00, 0x1c, 0xa8, - 0x00, 0xef, 0x1b, 0xa8, 0x40, 0xa1, 0x0c, 0x45, 0x5d, 0xe4, 0xca, 0xf3, - 0x01, 0x48, 0x6a, 0xc9, 0x53, 0x20, 0x40, 0xee, 0xa2, 0xf9, 0x01, 0x55, - 0x2a, 0x3d, 0x75, 0xf6, 0x41, 0x02, 0x4c, 0x12, 0xe9, 0x09, 0x46, 0x84, - 0xc8, 0x7b, 0x22, 0x80, 0x91, 0x09, 0x08, 0xba, 0xc5, 0xfa, 0x08, 0xee, - 0x09, 0x26, 0x80, 0xac, 0x02, 0x03, 0x6f, 0x02, 0x1f, 0x02, 0x6e, 0x1b, - 0x0f, 0xb3, 0x01, 0xff, 0x42, 0x49, 0x00, 0x63, 0xf3, 0x01, 0x4f, 0x27, - 0x70, 0x9f, 0xf6, 0x41, 0x4c, 0x31, 0x8a, 0x2f, 0x22, 0x00, 0x42, 0x33, - 0x00, 0xc4, 0xf3, 0x41, 0x44, 0xea, 0xec, 0xb8, 0xf9, 0x01, 0xb3, 0x06, - 0x47, 0x7f, 0xd4, 0xb9, 0xf9, 0x41, 0x06, 0x4a, 0x06, 0x86, 0x01, 0x03, - 0x19, 0x09, 0x01, 0xff, 0x06, 0x5c, 0x00, 0x66, 0x07, 0x43, 0x0a, 0x56, - 0x42, 0xf4, 0x01, 0x83, 0x22, 0x80, 0x1d, 0x51, 0xd2, 0x5b, 0xc9, 0x27, - 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x43, 0xd4, 0x09, 0xbe, 0x2a, 0x00, - 0x59, 0x74, 0x24, 0xc2, 0x2a, 0x00, 0x4f, 0x45, 0x70, 0xc0, 0x2a, 0x40, - 0x80, 0x01, 0xff, 0x06, 0x5c, 0x00, 0x13, 0x4b, 0x52, 0x28, 0x87, 0x22, - 0x80, 0x06, 0x51, 0x25, 0x5e, 0x8b, 0x22, 0x40, 0x4f, 0xa5, 0x3a, 0xc4, - 0x2a, 0x40, 0x4f, 0x10, 0x69, 0xca, 0x2a, 0x00, 0x4b, 0xf9, 0x12, 0xc6, - 0x2a, 0x00, 0x4c, 0x79, 0x2a, 0xcc, 0x2a, 0x00, 0x4e, 0x93, 0x3d, 0xc8, - 0x2a, 0x40, 0x5e, 0x32, 0x12, 0xd8, 0x2a, 0x00, 0x46, 0x4a, 0x12, 0xd7, - 0x2a, 0x40, 0x4f, 0x37, 0x07, 0x7b, 0x29, 0x00, 0x02, 0x6f, 0x00, 0x01, - 0xff, 0x44, 0x4c, 0x12, 0xd4, 0x2a, 0x00, 0x46, 0x59, 0x35, 0xd6, 0x2a, - 0x40, 0xa5, 0x62, 0xa6, 0x54, 0xac, 0x40, 0x45, 0xef, 0x1e, 0x7b, 0x20, - 0x00, 0x44, 0x46, 0x2a, 0x79, 0x20, 0x00, 0x43, 0xbf, 0x0a, 0xb9, 0x00, - 0x00, 0x49, 0x45, 0x70, 0x7a, 0x20, 0x00, 0x51, 0x4a, 0x21, 0x7e, 0x20, - 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xa1, 0x1d, 0x70, 0x20, 0x40, 0x44, - 0x25, 0x01, 0xb3, 0x00, 0x00, 0x42, 0x15, 0x02, 0xb2, 0x00, 0x40, 0x44, - 0x27, 0x1d, 0x77, 0x20, 0x00, 0x42, 0x60, 0x25, 0x76, 0x20, 0x40, 0x12, - 0x1c, 0x4f, 0x06, 0x4f, 0xf8, 0x23, 0x7d, 0x20, 0x40, 0xe9, 0x71, 0x20, - 0x00, 0xee, 0x7f, 0x20, 0x40, 0x43, 0xa7, 0x05, 0x75, 0x20, 0x00, 0x43, - 0xcb, 0x06, 0x74, 0x20, 0x40, 0x44, 0xc9, 0x00, 0x78, 0x20, 0x00, 0x4a, - 0xfa, 0x12, 0x7c, 0x20, 0x40, 0x80, 0xb9, 0x06, 0x07, 0x6a, 0xcd, 0xcc, - 0x02, 0x46, 0x7e, 0x95, 0x3b, 0xf3, 0x01, 0x44, 0x44, 0xba, 0x05, 0xf3, - 0x81, 0xb8, 0x02, 0x52, 0xe4, 0x53, 0x07, 0xf3, 0x01, 0x05, 0xe0, 0xe8, - 0x01, 0xff, 0x06, 0xc4, 0x06, 0xe6, 0x01, 0x07, 0xc1, 0x05, 0x06, 0x48, - 0x4a, 0xc8, 0xe1, 0x1b, 0x41, 0xa1, 0xc7, 0x01, 0x43, 0x37, 0x35, 0xce, - 0x1b, 0x01, 0xa3, 0xb2, 0x01, 0xa4, 0xa3, 0x01, 0x43, 0xc6, 0xdb, 0xc2, - 0x1b, 0x01, 0x43, 0x08, 0x9d, 0xca, 0x1b, 0x01, 0x45, 0xcc, 0xe3, 0xcb, - 0x1b, 0x01, 0x44, 0x52, 0xed, 0xc3, 0x1b, 0x01, 0x44, 0x7a, 0xed, 0xcf, - 0x1b, 0x01, 0xab, 0x71, 0x46, 0xd8, 0xda, 0xd0, 0x1b, 0x01, 0x42, 0x6c, - 0x00, 0xc7, 0x1b, 0x01, 0xae, 0x57, 0x45, 0x8d, 0xe6, 0xd1, 0x1b, 0x01, - 0xb0, 0x43, 0x43, 0x96, 0x02, 0xc4, 0x1b, 0x01, 0x04, 0x52, 0xef, 0x2f, - 0xb4, 0x12, 0x45, 0xdb, 0xe8, 0xc5, 0x1b, 0x01, 0x45, 0xea, 0xe8, 0xd3, - 0x1b, 0x01, 0x43, 0xcd, 0x31, 0xd4, 0x1b, 0x41, 0x44, 0xb7, 0xa2, 0xc1, - 0x1b, 0x01, 0x44, 0xd3, 0x74, 0xde, 0x1b, 0x01, 0xa8, 0x01, 0xff, 0x43, - 0xa7, 0x0a, 0xd8, 0x1b, 0x01, 0x43, 0x36, 0x0e, 0xdf, 0x1b, 0x41, 0x42, - 0x68, 0x00, 0xd2, 0x1b, 0x01, 0xf2, 0xdc, 0x1b, 0x41, 0x43, 0x65, 0x05, - 0xd9, 0x1b, 0x01, 0x42, 0x8f, 0x04, 0xc9, 0x1b, 0x41, 0x42, 0xc9, 0x09, - 0xcd, 0x1b, 0x01, 0x43, 0xca, 0x1d, 0xda, 0x1b, 0x41, 0x42, 0x22, 0x00, - 0xdb, 0x1b, 0x01, 0x42, 0x4c, 0x2a, 0xc6, 0x1b, 0x01, 0x44, 0x98, 0xba, - 0xe0, 0x1b, 0x41, 0x43, 0x04, 0x27, 0xc0, 0x1b, 0x01, 0x44, 0x59, 0x48, - 0xd7, 0x1b, 0x41, 0x44, 0x53, 0x84, 0xcc, 0x1b, 0x01, 0x45, 0xe5, 0xe3, - 0xdd, 0x1b, 0x41, 0x42, 0x13, 0x00, 0xd6, 0x1b, 0x01, 0x44, 0xda, 0xee, - 0xc8, 0x1b, 0x01, 0x42, 0xa6, 0x0a, 0xd5, 0x1b, 0x41, 0x45, 0xc3, 0x0a, - 0xf8, 0x1b, 0x01, 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0xf9, 0x1b, 0x01, 0x43, - 0xbf, 0x0a, 0xf1, 0x1b, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xa1, 0x1d, - 0xf0, 0x1b, 0x41, 0x44, 0x25, 0x01, 0xf3, 0x1b, 0x01, 0x42, 0x15, 0x02, - 0xf2, 0x1b, 0x41, 0x44, 0x27, 0x1d, 0xf7, 0x1b, 0x01, 0x42, 0x60, 0x25, - 0xf6, 0x1b, 0x41, 0x43, 0xa7, 0x05, 0xf5, 0x1b, 0x01, 0x43, 0xcb, 0x06, - 0xf4, 0x1b, 0x41, 0x4f, 0xf3, 0x67, 0x04, 0xf3, 0x41, 0x48, 0xf1, 0x86, - 0xba, 0x1b, 0x00, 0x11, 0xe7, 0x57, 0xb6, 0x03, 0x06, 0xc4, 0x06, 0xef, - 0x02, 0x07, 0xc1, 0x05, 0x8d, 0x01, 0x12, 0x54, 0x53, 0x57, 0x05, 0x2f, - 0x03, 0x2c, 0x0d, 0x8c, 0x88, 0x01, 0xff, 0x45, 0x7a, 0xe5, 0xa8, 0x1b, - 0x00, 0xae, 0x01, 0xff, 0x47, 0xcd, 0xcb, 0xa6, 0x1b, 0x00, 0x47, 0x20, - 0xce, 0xa9, 0x1b, 0x00, 0x45, 0x95, 0xe3, 0xa4, 0x1b, 0x00, 0x45, 0x02, - 0x12, 0xa7, 0x1b, 0x00, 0x44, 0xf6, 0xef, 0xa5, 0x1b, 0x40, 0x02, 0x6c, - 0x09, 0x06, 0x46, 0x5b, 0x23, 0xab, 0x1b, 0x40, 0x45, 0x3e, 0xe5, 0xaa, - 0x1b, 0x00, 0xae, 0x01, 0xff, 0xa7, 0x06, 0x45, 0x58, 0xe9, 0x80, 0x1b, - 0x40, 0x45, 0x07, 0xe5, 0x81, 0x1b, 0x00, 0x45, 0x30, 0xe9, 0x82, 0x1b, - 0x40, 0x4a, 0xef, 0xa5, 0xc7, 0x1c, 0x00, 0x45, 0xdd, 0xe1, 0xc3, 0x1c, - 0x00, 0x4a, 0xf3, 0xa6, 0xc6, 0x1c, 0x00, 0x4a, 0xff, 0xa9, 0xc5, 0x1c, - 0x00, 0x4b, 0x91, 0x9c, 0xc4, 0x1c, 0x00, 0xb0, 0x06, 0x45, 0x04, 0xe8, - 0xc0, 0x1c, 0x40, 0x47, 0x21, 0xcc, 0xc1, 0x1c, 0x00, 0x46, 0xf6, 0xdd, - 0xc2, 0x1c, 0x40, 0xe1, 0x83, 0x1b, 0x80, 0xcd, 0x01, 0xa2, 0xc0, 0x01, - 0x42, 0x37, 0x00, 0x8e, 0x1b, 0x00, 0x42, 0xa1, 0x10, 0x93, 0x1b, 0x00, - 0xe5, 0x88, 0x1b, 0x80, 0xaa, 0x01, 0xa6, 0x96, 0x01, 0x42, 0x24, 0x02, - 0x8c, 0x1b, 0x00, 0x42, 0x22, 0x00, 0xa0, 0x1b, 0x00, 0xe9, 0x84, 0x1b, - 0x00, 0x42, 0xbd, 0x26, 0x8f, 0x1b, 0x00, 0xab, 0x74, 0xac, 0x68, 0x42, - 0x6c, 0x00, 0x99, 0x1b, 0x00, 0xae, 0x50, 0xef, 0x87, 0x1b, 0x00, 0x42, - 0x6c, 0x09, 0x95, 0x1b, 0x00, 0x42, 0xf4, 0x13, 0x8b, 0x1b, 0x00, 0xb2, - 0x34, 0xb3, 0x28, 0x42, 0x12, 0x00, 0x92, 0x1b, 0x00, 0xf5, 0x85, 0x1b, - 0x00, 0x42, 0xa6, 0x0a, 0x97, 0x1b, 0x00, 0x42, 0xa9, 0x01, 0x9d, 0x1b, - 0x00, 0x42, 0x4c, 0x26, 0x9f, 0x1b, 0x00, 0x42, 0x34, 0x22, 0x9a, 0x1b, - 0x00, 0x42, 0x59, 0x00, 0x90, 0x1b, 0x40, 0xe1, 0x9e, 0x1b, 0x00, 0x42, - 0x34, 0x22, 0xaf, 0x1b, 0x40, 0xe1, 0x9b, 0x1b, 0x00, 0x42, 0x97, 0x02, - 0xbb, 0x1b, 0x40, 0xe1, 0x94, 0x1b, 0x00, 0x42, 0x24, 0x02, 0x8d, 0x1b, - 0x00, 0x42, 0x34, 0x22, 0x91, 0x1b, 0x40, 0xe1, 0x9c, 0x1b, 0x00, 0x42, - 0x97, 0x02, 0xbc, 0x1b, 0x40, 0xe1, 0x8a, 0x1b, 0x00, 0x42, 0x22, 0x00, - 0xae, 0x1b, 0x40, 0xe1, 0x96, 0x1b, 0x00, 0x05, 0x47, 0x27, 0x01, 0xff, - 0xeb, 0xbe, 0x1b, 0x00, 0xed, 0xbf, 0x1b, 0x40, 0xf5, 0x89, 0x1b, 0x40, - 0xe1, 0x98, 0x1b, 0x00, 0x42, 0x22, 0x00, 0xbd, 0x1b, 0x40, 0xe5, 0x86, - 0x1b, 0x00, 0x48, 0x01, 0xbc, 0xbd, 0x1b, 0x40, 0x45, 0xc3, 0x0a, 0xb8, - 0x1b, 0x00, 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0xb9, 0x1b, 0x00, 0x43, 0xbf, - 0x0a, 0xb1, 0x1b, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xa1, 0x1d, 0xb0, - 0x1b, 0x40, 0x44, 0x25, 0x01, 0xb3, 0x1b, 0x00, 0x42, 0x15, 0x02, 0xb2, - 0x1b, 0x40, 0x44, 0x27, 0x1d, 0xb7, 0x1b, 0x00, 0x42, 0x60, 0x25, 0xb6, - 0x1b, 0x40, 0x43, 0xa7, 0x05, 0xb5, 0x1b, 0x00, 0x43, 0xcb, 0x06, 0xb4, - 0x1b, 0x40, 0x47, 0x73, 0xd0, 0xa1, 0x1b, 0x00, 0x02, 0xf6, 0x19, 0x11, - 0x07, 0xd4, 0xd2, 0x01, 0xff, 0x42, 0x6c, 0x00, 0xac, 0x1b, 0x00, 0x42, - 0xa9, 0x01, 0xad, 0x1b, 0x40, 0x44, 0xca, 0x94, 0xa2, 0x1b, 0x00, 0x43, - 0x49, 0xe4, 0xa3, 0x1b, 0x40, 0x4c, 0xe5, 0x8a, 0xc5, 0x26, 0x00, 0x49, - 0xc8, 0xbe, 0x1e, 0xf3, 0x41, 0x46, 0x66, 0x0a, 0xb3, 0x23, 0x00, 0x43, - 0x1e, 0x00, 0xb2, 0x23, 0x00, 0x4d, 0xe7, 0x88, 0x0b, 0x2a, 0x40, 0x80, - 0x01, 0xff, 0x06, 0x5c, 0x00, 0x1c, 0x55, 0xfb, 0x38, 0xe9, 0x22, 0x00, - 0x06, 0x52, 0x28, 0x06, 0x4e, 0x7a, 0x7c, 0xb1, 0x22, 0x40, 0x45, 0xac, - 0x0c, 0x7d, 0x22, 0x00, 0x4a, 0x06, 0x39, 0x7f, 0x22, 0x40, 0x4f, 0x10, - 0x69, 0xb8, 0x2a, 0x00, 0x4b, 0xf9, 0x12, 0xb4, 0x2a, 0x00, 0x04, 0xe8, - 0x22, 0x11, 0x0c, 0x6d, 0x2a, 0x01, 0xff, 0x4b, 0xf9, 0x12, 0xb0, 0x2a, - 0x00, 0x4c, 0x79, 0x2a, 0xb2, 0x2a, 0x40, 0x4f, 0x10, 0x69, 0xba, 0x2a, - 0x00, 0x48, 0xa9, 0x0c, 0xb6, 0x2a, 0x40, 0x06, 0x4a, 0x06, 0x75, 0x03, - 0x19, 0x09, 0x06, 0x46, 0xab, 0xbd, 0x1a, 0x00, 0x40, 0x06, 0x5c, 0x00, - 0x50, 0x42, 0xf4, 0x01, 0x82, 0x22, 0x80, 0x17, 0x05, 0x51, 0x00, 0x01, - 0xff, 0x43, 0xd4, 0x09, 0xbd, 0x2a, 0x00, 0x59, 0x74, 0x24, 0xc1, 0x2a, - 0x00, 0x4f, 0x45, 0x70, 0xbf, 0x2a, 0x40, 0x80, 0x01, 0xff, 0x06, 0x5c, - 0x00, 0x13, 0x4b, 0x52, 0x28, 0x86, 0x22, 0x80, 0x06, 0x51, 0x25, 0x5e, - 0x8a, 0x22, 0x40, 0x4f, 0xa5, 0x3a, 0xc3, 0x2a, 0x40, 0x4f, 0x10, 0x69, - 0xc9, 0x2a, 0x00, 0x4b, 0xf9, 0x12, 0xc5, 0x2a, 0x00, 0x4c, 0x79, 0x2a, - 0xcb, 0x2a, 0x00, 0x4e, 0x93, 0x3d, 0xc7, 0x2a, 0x40, 0x50, 0xb3, 0x02, - 0x79, 0x29, 0x00, 0x02, 0x6f, 0x00, 0x01, 0xff, 0x44, 0x4c, 0x12, 0xd5, - 0x2a, 0x00, 0x46, 0x59, 0x35, 0xd3, 0x2a, 0x40, 0xa5, 0x54, 0xa6, 0x46, - 0x50, 0xf7, 0x23, 0x8d, 0x20, 0x00, 0x45, 0xef, 0x1e, 0x8b, 0x20, 0x00, - 0x44, 0x46, 0x2a, 0x89, 0x20, 0x00, 0x43, 0xbf, 0x0a, 0x81, 0x20, 0x00, - 0x49, 0x45, 0x70, 0x8a, 0x20, 0x00, 0x51, 0x4a, 0x21, 0x8e, 0x20, 0x00, - 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xa1, 0x1d, 0x80, 0x20, 0x40, 0x44, 0x25, - 0x01, 0x83, 0x20, 0x00, 0x42, 0x15, 0x02, 0x82, 0x20, 0x40, 0x44, 0x27, - 0x1d, 0x87, 0x20, 0x00, 0x42, 0x60, 0x25, 0x86, 0x20, 0x40, 0x43, 0xa7, - 0x05, 0x85, 0x20, 0x00, 0x43, 0xcb, 0x06, 0x84, 0x20, 0x40, 0x44, 0xc9, - 0x00, 0x88, 0x20, 0x00, 0x4a, 0xfa, 0x12, 0x8c, 0x20, 0x40, 0xa1, 0xb9, - 0x01, 0xa5, 0x9a, 0x01, 0x4a, 0xab, 0x93, 0xc5, 0xfb, 0x81, 0x6f, 0xaf, - 0x61, 0xb2, 0x15, 0xb5, 0x01, 0xff, 0x4e, 0x7a, 0x75, 0x99, 0xf3, 0x01, - 0x4e, 0x5a, 0x76, 0x59, 0xf9, 0x01, 0x42, 0x6c, 0x09, 0xd3, 0xf6, 0x41, - 0xa1, 0x32, 0x57, 0x89, 0x2d, 0x29, 0x27, 0x00, 0xa9, 0x01, 0xff, 0x52, - 0x9a, 0x4f, 0x63, 0x22, 0x00, 0x4d, 0x96, 0x84, 0x9c, 0x00, 0x00, 0x04, - 0x76, 0x18, 0x01, 0xff, 0x56, 0xf1, 0x32, 0x83, 0xcc, 0x01, 0x56, 0x93, - 0x34, 0x80, 0xcc, 0x01, 0x57, 0x0d, 0x30, 0x82, 0xcc, 0x01, 0x54, 0x47, - 0x45, 0x81, 0xcc, 0x41, 0x04, 0xc9, 0x00, 0x06, 0x46, 0x20, 0xde, 0x53, - 0xf3, 0x41, 0x46, 0x19, 0x2f, 0xcf, 0xf4, 0x01, 0x44, 0x9a, 0x23, 0xe4, - 0x23, 0x40, 0x48, 0x2a, 0xc2, 0xe0, 0xf5, 0x01, 0x46, 0x4c, 0xdc, 0xf1, - 0x23, 0x40, 0x80, 0x01, 0xff, 0x08, 0x02, 0xc5, 0x11, 0x05, 0x51, 0x00, - 0x01, 0xff, 0x4b, 0x27, 0x97, 0xc6, 0xfb, 0x01, 0x45, 0xe4, 0x26, 0xc9, + 0x96, 0x7f, 0x97, 0x55, 0x98, 0x2b, 0x99, 0x01, 0xff, 0xd0, 0x4d, 0x8a, + 0x01, 0xd1, 0x4e, 0x8a, 0x01, 0xd2, 0x4f, 0x8a, 0x01, 0xd3, 0x50, 0x8a, + 0x01, 0xd4, 0x51, 0x8a, 0x01, 0xd5, 0x52, 0x8a, 0x01, 0xd6, 0x53, 0x8a, + 0x01, 0xd7, 0x54, 0x8a, 0x01, 0xd8, 0x55, 0x8a, 0x01, 0xd9, 0x56, 0x8a, + 0x41, 0xd0, 0x43, 0x8a, 0x01, 0xd1, 0x44, 0x8a, 0x01, 0xd2, 0x45, 0x8a, + 0x01, 0xd3, 0x46, 0x8a, 0x01, 0xd4, 0x47, 0x8a, 0x01, 0xd5, 0x48, 0x8a, + 0x01, 0xd6, 0x49, 0x8a, 0x01, 0xd7, 0x4a, 0x8a, 0x01, 0xd8, 0x4b, 0x8a, + 0x01, 0xd9, 0x4c, 0x8a, 0x41, 0xd0, 0x39, 0x8a, 0x01, 0xd1, 0x3a, 0x8a, + 0x01, 0xd2, 0x3b, 0x8a, 0x01, 0xd3, 0x3c, 0x8a, 0x01, 0xd4, 0x3d, 0x8a, + 0x01, 0xd5, 0x3e, 0x8a, 0x01, 0xd6, 0x3f, 0x8a, 0x01, 0xd7, 0x40, 0x8a, + 0x01, 0xd8, 0x41, 0x8a, 0x01, 0xd9, 0x42, 0x8a, 0x41, 0xd0, 0x2f, 0x8a, + 0x01, 0xd1, 0x30, 0x8a, 0x01, 0xd2, 0x31, 0x8a, 0x01, 0xd3, 0x32, 0x8a, + 0x01, 0xd4, 0x33, 0x8a, 0x01, 0xd5, 0x34, 0x8a, 0x01, 0xd6, 0x35, 0x8a, + 0x01, 0xd7, 0x36, 0x8a, 0x01, 0xd8, 0x37, 0x8a, 0x01, 0xd9, 0x38, 0x8a, + 0x41, 0xd0, 0x25, 0x8a, 0x01, 0xd1, 0x26, 0x8a, 0x01, 0xd2, 0x27, 0x8a, + 0x01, 0xd3, 0x28, 0x8a, 0x01, 0xd4, 0x29, 0x8a, 0x01, 0xd5, 0x2a, 0x8a, + 0x01, 0xd6, 0x2b, 0x8a, 0x01, 0xd7, 0x2c, 0x8a, 0x01, 0xd8, 0x2d, 0x8a, + 0x01, 0xd9, 0x2e, 0x8a, 0x41, 0xd0, 0x1b, 0x8a, 0x01, 0xd1, 0x1c, 0x8a, + 0x01, 0xd2, 0x1d, 0x8a, 0x01, 0xd3, 0x1e, 0x8a, 0x01, 0xd4, 0x1f, 0x8a, + 0x01, 0xd5, 0x20, 0x8a, 0x01, 0xd6, 0x21, 0x8a, 0x01, 0xd7, 0x22, 0x8a, + 0x01, 0xd8, 0x23, 0x8a, 0x01, 0xd9, 0x24, 0x8a, 0x41, 0xd0, 0x11, 0x8a, + 0x01, 0xd1, 0x12, 0x8a, 0x01, 0xd2, 0x13, 0x8a, 0x01, 0xd3, 0x14, 0x8a, + 0x01, 0xd4, 0x15, 0x8a, 0x01, 0xd5, 0x16, 0x8a, 0x01, 0xd6, 0x17, 0x8a, + 0x01, 0xd7, 0x18, 0x8a, 0x01, 0xd8, 0x19, 0x8a, 0x01, 0xd9, 0x1a, 0x8a, + 0x41, 0xd0, 0x07, 0x8a, 0x01, 0xd1, 0x08, 0x8a, 0x01, 0xd2, 0x09, 0x8a, + 0x01, 0xd3, 0x0a, 0x8a, 0x01, 0xd4, 0x0b, 0x8a, 0x01, 0xd5, 0x0c, 0x8a, + 0x01, 0xd6, 0x0d, 0x8a, 0x01, 0xd7, 0x0e, 0x8a, 0x01, 0xd8, 0x0f, 0x8a, + 0x01, 0xd9, 0x10, 0x8a, 0x41, 0xd0, 0xfd, 0x89, 0x01, 0xd1, 0xfe, 0x89, + 0x01, 0xd2, 0xff, 0x89, 0x01, 0xd3, 0x00, 0x8a, 0x01, 0xd4, 0x01, 0x8a, + 0x01, 0xd5, 0x02, 0x8a, 0x01, 0xd6, 0x03, 0x8a, 0x01, 0xd7, 0x04, 0x8a, + 0x01, 0xd8, 0x05, 0x8a, 0x01, 0xd9, 0x06, 0x8a, 0x41, 0xd0, 0xf3, 0x89, + 0x01, 0xd1, 0xf4, 0x89, 0x01, 0xd2, 0xf5, 0x89, 0x01, 0xd3, 0xf6, 0x89, + 0x01, 0xd4, 0xf7, 0x89, 0x01, 0xd5, 0xf8, 0x89, 0x01, 0xd6, 0xf9, 0x89, + 0x01, 0xd7, 0xfa, 0x89, 0x01, 0xd8, 0xfb, 0x89, 0x01, 0xd9, 0xfc, 0x89, + 0x41, 0x90, 0x80, 0x03, 0x91, 0xd5, 0x02, 0x92, 0xaa, 0x02, 0x93, 0xff, + 0x01, 0x94, 0xd4, 0x01, 0x95, 0xa9, 0x01, 0x96, 0x7f, 0x97, 0x55, 0x98, + 0x2b, 0x99, 0x01, 0xff, 0xd0, 0xe9, 0x89, 0x01, 0xd1, 0xea, 0x89, 0x01, + 0xd2, 0xeb, 0x89, 0x01, 0xd3, 0xec, 0x89, 0x01, 0xd4, 0xed, 0x89, 0x01, + 0xd5, 0xee, 0x89, 0x01, 0xd6, 0xef, 0x89, 0x01, 0xd7, 0xf0, 0x89, 0x01, + 0xd8, 0xf1, 0x89, 0x01, 0xd9, 0xf2, 0x89, 0x41, 0xd0, 0xdf, 0x89, 0x01, + 0xd1, 0xe0, 0x89, 0x01, 0xd2, 0xe1, 0x89, 0x01, 0xd3, 0xe2, 0x89, 0x01, + 0xd4, 0xe3, 0x89, 0x01, 0xd5, 0xe4, 0x89, 0x01, 0xd6, 0xe5, 0x89, 0x01, + 0xd7, 0xe6, 0x89, 0x01, 0xd8, 0xe7, 0x89, 0x01, 0xd9, 0xe8, 0x89, 0x41, + 0xd0, 0xd5, 0x89, 0x01, 0xd1, 0xd6, 0x89, 0x01, 0xd2, 0xd7, 0x89, 0x01, + 0xd3, 0xd8, 0x89, 0x01, 0xd4, 0xd9, 0x89, 0x01, 0xd5, 0xda, 0x89, 0x01, + 0xd6, 0xdb, 0x89, 0x01, 0xd7, 0xdc, 0x89, 0x01, 0xd8, 0xdd, 0x89, 0x01, + 0xd9, 0xde, 0x89, 0x41, 0xd0, 0xcb, 0x89, 0x01, 0xd1, 0xcc, 0x89, 0x01, + 0xd2, 0xcd, 0x89, 0x01, 0xd3, 0xce, 0x89, 0x01, 0xd4, 0xcf, 0x89, 0x01, + 0xd5, 0xd0, 0x89, 0x01, 0xd6, 0xd1, 0x89, 0x01, 0xd7, 0xd2, 0x89, 0x01, + 0xd8, 0xd3, 0x89, 0x01, 0xd9, 0xd4, 0x89, 0x41, 0xd0, 0xc1, 0x89, 0x01, + 0xd1, 0xc2, 0x89, 0x01, 0xd2, 0xc3, 0x89, 0x01, 0xd3, 0xc4, 0x89, 0x01, + 0xd4, 0xc5, 0x89, 0x01, 0xd5, 0xc6, 0x89, 0x01, 0xd6, 0xc7, 0x89, 0x01, + 0xd7, 0xc8, 0x89, 0x01, 0xd8, 0xc9, 0x89, 0x01, 0xd9, 0xca, 0x89, 0x41, + 0xd0, 0xb7, 0x89, 0x01, 0xd1, 0xb8, 0x89, 0x01, 0xd2, 0xb9, 0x89, 0x01, + 0xd3, 0xba, 0x89, 0x01, 0xd4, 0xbb, 0x89, 0x01, 0xd5, 0xbc, 0x89, 0x01, + 0xd6, 0xbd, 0x89, 0x01, 0xd7, 0xbe, 0x89, 0x01, 0xd8, 0xbf, 0x89, 0x01, + 0xd9, 0xc0, 0x89, 0x41, 0xd0, 0xad, 0x89, 0x01, 0xd1, 0xae, 0x89, 0x01, + 0xd2, 0xaf, 0x89, 0x01, 0xd3, 0xb0, 0x89, 0x01, 0xd4, 0xb1, 0x89, 0x01, + 0xd5, 0xb2, 0x89, 0x01, 0xd6, 0xb3, 0x89, 0x01, 0xd7, 0xb4, 0x89, 0x01, + 0xd8, 0xb5, 0x89, 0x01, 0xd9, 0xb6, 0x89, 0x41, 0xd0, 0xa3, 0x89, 0x01, + 0xd1, 0xa4, 0x89, 0x01, 0xd2, 0xa5, 0x89, 0x01, 0xd3, 0xa6, 0x89, 0x01, + 0xd4, 0xa7, 0x89, 0x01, 0xd5, 0xa8, 0x89, 0x01, 0xd6, 0xa9, 0x89, 0x01, + 0xd7, 0xaa, 0x89, 0x01, 0xd8, 0xab, 0x89, 0x01, 0xd9, 0xac, 0x89, 0x41, + 0xd0, 0x99, 0x89, 0x01, 0xd1, 0x9a, 0x89, 0x01, 0xd2, 0x9b, 0x89, 0x01, + 0xd3, 0x9c, 0x89, 0x01, 0xd4, 0x9d, 0x89, 0x01, 0xd5, 0x9e, 0x89, 0x01, + 0xd6, 0x9f, 0x89, 0x01, 0xd7, 0xa0, 0x89, 0x01, 0xd8, 0xa1, 0x89, 0x01, + 0xd9, 0xa2, 0x89, 0x41, 0xd0, 0x8f, 0x89, 0x01, 0xd1, 0x90, 0x89, 0x01, + 0xd2, 0x91, 0x89, 0x01, 0xd3, 0x92, 0x89, 0x01, 0xd4, 0x93, 0x89, 0x01, + 0xd5, 0x94, 0x89, 0x01, 0xd6, 0x95, 0x89, 0x01, 0xd7, 0x96, 0x89, 0x01, + 0xd8, 0x97, 0x89, 0x01, 0xd9, 0x98, 0x89, 0x41, 0x90, 0x80, 0x03, 0x91, + 0xd5, 0x02, 0x92, 0xaa, 0x02, 0x93, 0xff, 0x01, 0x94, 0xd4, 0x01, 0x95, + 0xa9, 0x01, 0x96, 0x7f, 0x97, 0x55, 0x98, 0x2b, 0x99, 0x01, 0xff, 0xd0, + 0x85, 0x89, 0x01, 0xd1, 0x86, 0x89, 0x01, 0xd2, 0x87, 0x89, 0x01, 0xd3, + 0x88, 0x89, 0x01, 0xd4, 0x89, 0x89, 0x01, 0xd5, 0x8a, 0x89, 0x01, 0xd6, + 0x8b, 0x89, 0x01, 0xd7, 0x8c, 0x89, 0x01, 0xd8, 0x8d, 0x89, 0x01, 0xd9, + 0x8e, 0x89, 0x41, 0xd0, 0x7b, 0x89, 0x01, 0xd1, 0x7c, 0x89, 0x01, 0xd2, + 0x7d, 0x89, 0x01, 0xd3, 0x7e, 0x89, 0x01, 0xd4, 0x7f, 0x89, 0x01, 0xd5, + 0x80, 0x89, 0x01, 0xd6, 0x81, 0x89, 0x01, 0xd7, 0x82, 0x89, 0x01, 0xd8, + 0x83, 0x89, 0x01, 0xd9, 0x84, 0x89, 0x41, 0xd0, 0x71, 0x89, 0x01, 0xd1, + 0x72, 0x89, 0x01, 0xd2, 0x73, 0x89, 0x01, 0xd3, 0x74, 0x89, 0x01, 0xd4, + 0x75, 0x89, 0x01, 0xd5, 0x76, 0x89, 0x01, 0xd6, 0x77, 0x89, 0x01, 0xd7, + 0x78, 0x89, 0x01, 0xd8, 0x79, 0x89, 0x01, 0xd9, 0x7a, 0x89, 0x41, 0xd0, + 0x67, 0x89, 0x01, 0xd1, 0x68, 0x89, 0x01, 0xd2, 0x69, 0x89, 0x01, 0xd3, + 0x6a, 0x89, 0x01, 0xd4, 0x6b, 0x89, 0x01, 0xd5, 0x6c, 0x89, 0x01, 0xd6, + 0x6d, 0x89, 0x01, 0xd7, 0x6e, 0x89, 0x01, 0xd8, 0x6f, 0x89, 0x01, 0xd9, + 0x70, 0x89, 0x41, 0xd0, 0x5d, 0x89, 0x01, 0xd1, 0x5e, 0x89, 0x01, 0xd2, + 0x5f, 0x89, 0x01, 0xd3, 0x60, 0x89, 0x01, 0xd4, 0x61, 0x89, 0x01, 0xd5, + 0x62, 0x89, 0x01, 0xd6, 0x63, 0x89, 0x01, 0xd7, 0x64, 0x89, 0x01, 0xd8, + 0x65, 0x89, 0x01, 0xd9, 0x66, 0x89, 0x41, 0xd0, 0x53, 0x89, 0x01, 0xd1, + 0x54, 0x89, 0x01, 0xd2, 0x55, 0x89, 0x01, 0xd3, 0x56, 0x89, 0x01, 0xd4, + 0x57, 0x89, 0x01, 0xd5, 0x58, 0x89, 0x01, 0xd6, 0x59, 0x89, 0x01, 0xd7, + 0x5a, 0x89, 0x01, 0xd8, 0x5b, 0x89, 0x01, 0xd9, 0x5c, 0x89, 0x41, 0xd0, + 0x49, 0x89, 0x01, 0xd1, 0x4a, 0x89, 0x01, 0xd2, 0x4b, 0x89, 0x01, 0xd3, + 0x4c, 0x89, 0x01, 0xd4, 0x4d, 0x89, 0x01, 0xd5, 0x4e, 0x89, 0x01, 0xd6, + 0x4f, 0x89, 0x01, 0xd7, 0x50, 0x89, 0x01, 0xd8, 0x51, 0x89, 0x01, 0xd9, + 0x52, 0x89, 0x41, 0xd0, 0x3f, 0x89, 0x01, 0xd1, 0x40, 0x89, 0x01, 0xd2, + 0x41, 0x89, 0x01, 0xd3, 0x42, 0x89, 0x01, 0xd4, 0x43, 0x89, 0x01, 0xd5, + 0x44, 0x89, 0x01, 0xd6, 0x45, 0x89, 0x01, 0xd7, 0x46, 0x89, 0x01, 0xd8, + 0x47, 0x89, 0x01, 0xd9, 0x48, 0x89, 0x41, 0xd0, 0x35, 0x89, 0x01, 0xd1, + 0x36, 0x89, 0x01, 0xd2, 0x37, 0x89, 0x01, 0xd3, 0x38, 0x89, 0x01, 0xd4, + 0x39, 0x89, 0x01, 0xd5, 0x3a, 0x89, 0x01, 0xd6, 0x3b, 0x89, 0x01, 0xd7, + 0x3c, 0x89, 0x01, 0xd8, 0x3d, 0x89, 0x01, 0xd9, 0x3e, 0x89, 0x41, 0xd0, + 0x2b, 0x89, 0x01, 0xd1, 0x2c, 0x89, 0x01, 0xd2, 0x2d, 0x89, 0x01, 0xd3, + 0x2e, 0x89, 0x01, 0xd4, 0x2f, 0x89, 0x01, 0xd5, 0x30, 0x89, 0x01, 0xd6, + 0x31, 0x89, 0x01, 0xd7, 0x32, 0x89, 0x01, 0xd8, 0x33, 0x89, 0x01, 0xd9, + 0x34, 0x89, 0x41, 0x90, 0x80, 0x03, 0x91, 0xd5, 0x02, 0x92, 0xaa, 0x02, + 0x93, 0xff, 0x01, 0x94, 0xd4, 0x01, 0x95, 0xa9, 0x01, 0x96, 0x7f, 0x97, + 0x55, 0x98, 0x2b, 0x99, 0x01, 0xff, 0xd0, 0x21, 0x89, 0x01, 0xd1, 0x22, + 0x89, 0x01, 0xd2, 0x23, 0x89, 0x01, 0xd3, 0x24, 0x89, 0x01, 0xd4, 0x25, + 0x89, 0x01, 0xd5, 0x26, 0x89, 0x01, 0xd6, 0x27, 0x89, 0x01, 0xd7, 0x28, + 0x89, 0x01, 0xd8, 0x29, 0x89, 0x01, 0xd9, 0x2a, 0x89, 0x41, 0xd0, 0x17, + 0x89, 0x01, 0xd1, 0x18, 0x89, 0x01, 0xd2, 0x19, 0x89, 0x01, 0xd3, 0x1a, + 0x89, 0x01, 0xd4, 0x1b, 0x89, 0x01, 0xd5, 0x1c, 0x89, 0x01, 0xd6, 0x1d, + 0x89, 0x01, 0xd7, 0x1e, 0x89, 0x01, 0xd8, 0x1f, 0x89, 0x01, 0xd9, 0x20, + 0x89, 0x41, 0xd0, 0x0d, 0x89, 0x01, 0xd1, 0x0e, 0x89, 0x01, 0xd2, 0x0f, + 0x89, 0x01, 0xd3, 0x10, 0x89, 0x01, 0xd4, 0x11, 0x89, 0x01, 0xd5, 0x12, + 0x89, 0x01, 0xd6, 0x13, 0x89, 0x01, 0xd7, 0x14, 0x89, 0x01, 0xd8, 0x15, + 0x89, 0x01, 0xd9, 0x16, 0x89, 0x41, 0xd0, 0x03, 0x89, 0x01, 0xd1, 0x04, + 0x89, 0x01, 0xd2, 0x05, 0x89, 0x01, 0xd3, 0x06, 0x89, 0x01, 0xd4, 0x07, + 0x89, 0x01, 0xd5, 0x08, 0x89, 0x01, 0xd6, 0x09, 0x89, 0x01, 0xd7, 0x0a, + 0x89, 0x01, 0xd8, 0x0b, 0x89, 0x01, 0xd9, 0x0c, 0x89, 0x41, 0xd0, 0xf9, + 0x88, 0x01, 0xd1, 0xfa, 0x88, 0x01, 0xd2, 0xfb, 0x88, 0x01, 0xd3, 0xfc, + 0x88, 0x01, 0xd4, 0xfd, 0x88, 0x01, 0xd5, 0xfe, 0x88, 0x01, 0xd6, 0xff, + 0x88, 0x01, 0xd7, 0x00, 0x89, 0x01, 0xd8, 0x01, 0x89, 0x01, 0xd9, 0x02, + 0x89, 0x41, 0xd0, 0xef, 0x88, 0x01, 0xd1, 0xf0, 0x88, 0x01, 0xd2, 0xf1, + 0x88, 0x01, 0xd3, 0xf2, 0x88, 0x01, 0xd4, 0xf3, 0x88, 0x01, 0xd5, 0xf4, + 0x88, 0x01, 0xd6, 0xf5, 0x88, 0x01, 0xd7, 0xf6, 0x88, 0x01, 0xd8, 0xf7, + 0x88, 0x01, 0xd9, 0xf8, 0x88, 0x41, 0xd0, 0xe5, 0x88, 0x01, 0xd1, 0xe6, + 0x88, 0x01, 0xd2, 0xe7, 0x88, 0x01, 0xd3, 0xe8, 0x88, 0x01, 0xd4, 0xe9, + 0x88, 0x01, 0xd5, 0xea, 0x88, 0x01, 0xd6, 0xeb, 0x88, 0x01, 0xd7, 0xec, + 0x88, 0x01, 0xd8, 0xed, 0x88, 0x01, 0xd9, 0xee, 0x88, 0x41, 0xd0, 0xdb, + 0x88, 0x01, 0xd1, 0xdc, 0x88, 0x01, 0xd2, 0xdd, 0x88, 0x01, 0xd3, 0xde, + 0x88, 0x01, 0xd4, 0xdf, 0x88, 0x01, 0xd5, 0xe0, 0x88, 0x01, 0xd6, 0xe1, + 0x88, 0x01, 0xd7, 0xe2, 0x88, 0x01, 0xd8, 0xe3, 0x88, 0x01, 0xd9, 0xe4, + 0x88, 0x41, 0xd0, 0xd1, 0x88, 0x01, 0xd1, 0xd2, 0x88, 0x01, 0xd2, 0xd3, + 0x88, 0x01, 0xd3, 0xd4, 0x88, 0x01, 0xd4, 0xd5, 0x88, 0x01, 0xd5, 0xd6, + 0x88, 0x01, 0xd6, 0xd7, 0x88, 0x01, 0xd7, 0xd8, 0x88, 0x01, 0xd8, 0xd9, + 0x88, 0x01, 0xd9, 0xda, 0x88, 0x41, 0xd0, 0xc7, 0x88, 0x01, 0xd1, 0xc8, + 0x88, 0x01, 0xd2, 0xc9, 0x88, 0x01, 0xd3, 0xca, 0x88, 0x01, 0xd4, 0xcb, + 0x88, 0x01, 0xd5, 0xcc, 0x88, 0x01, 0xd6, 0xcd, 0x88, 0x01, 0xd7, 0xce, + 0x88, 0x01, 0xd8, 0xcf, 0x88, 0x01, 0xd9, 0xd0, 0x88, 0x41, 0x90, 0x80, + 0x03, 0x91, 0xd5, 0x02, 0x92, 0xaa, 0x02, 0x93, 0xff, 0x01, 0x94, 0xd4, + 0x01, 0x95, 0xa9, 0x01, 0x96, 0x7f, 0x97, 0x55, 0x98, 0x2b, 0x99, 0x01, + 0xff, 0xd0, 0xbd, 0x88, 0x01, 0xd1, 0xbe, 0x88, 0x01, 0xd2, 0xbf, 0x88, + 0x01, 0xd3, 0xc0, 0x88, 0x01, 0xd4, 0xc1, 0x88, 0x01, 0xd5, 0xc2, 0x88, + 0x01, 0xd6, 0xc3, 0x88, 0x01, 0xd7, 0xc4, 0x88, 0x01, 0xd8, 0xc5, 0x88, + 0x01, 0xd9, 0xc6, 0x88, 0x41, 0xd0, 0xb3, 0x88, 0x01, 0xd1, 0xb4, 0x88, + 0x01, 0xd2, 0xb5, 0x88, 0x01, 0xd3, 0xb6, 0x88, 0x01, 0xd4, 0xb7, 0x88, + 0x01, 0xd5, 0xb8, 0x88, 0x01, 0xd6, 0xb9, 0x88, 0x01, 0xd7, 0xba, 0x88, + 0x01, 0xd8, 0xbb, 0x88, 0x01, 0xd9, 0xbc, 0x88, 0x41, 0xd0, 0xa9, 0x88, + 0x01, 0xd1, 0xaa, 0x88, 0x01, 0xd2, 0xab, 0x88, 0x01, 0xd3, 0xac, 0x88, + 0x01, 0xd4, 0xad, 0x88, 0x01, 0xd5, 0xae, 0x88, 0x01, 0xd6, 0xaf, 0x88, + 0x01, 0xd7, 0xb0, 0x88, 0x01, 0xd8, 0xb1, 0x88, 0x01, 0xd9, 0xb2, 0x88, + 0x41, 0xd0, 0x9f, 0x88, 0x01, 0xd1, 0xa0, 0x88, 0x01, 0xd2, 0xa1, 0x88, + 0x01, 0xd3, 0xa2, 0x88, 0x01, 0xd4, 0xa3, 0x88, 0x01, 0xd5, 0xa4, 0x88, + 0x01, 0xd6, 0xa5, 0x88, 0x01, 0xd7, 0xa6, 0x88, 0x01, 0xd8, 0xa7, 0x88, + 0x01, 0xd9, 0xa8, 0x88, 0x41, 0xd0, 0x95, 0x88, 0x01, 0xd1, 0x96, 0x88, + 0x01, 0xd2, 0x97, 0x88, 0x01, 0xd3, 0x98, 0x88, 0x01, 0xd4, 0x99, 0x88, + 0x01, 0xd5, 0x9a, 0x88, 0x01, 0xd6, 0x9b, 0x88, 0x01, 0xd7, 0x9c, 0x88, + 0x01, 0xd8, 0x9d, 0x88, 0x01, 0xd9, 0x9e, 0x88, 0x41, 0xd0, 0x8b, 0x88, + 0x01, 0xd1, 0x8c, 0x88, 0x01, 0xd2, 0x8d, 0x88, 0x01, 0xd3, 0x8e, 0x88, + 0x01, 0xd4, 0x8f, 0x88, 0x01, 0xd5, 0x90, 0x88, 0x01, 0xd6, 0x91, 0x88, + 0x01, 0xd7, 0x92, 0x88, 0x01, 0xd8, 0x93, 0x88, 0x01, 0xd9, 0x94, 0x88, + 0x41, 0xd0, 0x81, 0x88, 0x01, 0xd1, 0x82, 0x88, 0x01, 0xd2, 0x83, 0x88, + 0x01, 0xd3, 0x84, 0x88, 0x01, 0xd4, 0x85, 0x88, 0x01, 0xd5, 0x86, 0x88, + 0x01, 0xd6, 0x87, 0x88, 0x01, 0xd7, 0x88, 0x88, 0x01, 0xd8, 0x89, 0x88, + 0x01, 0xd9, 0x8a, 0x88, 0x41, 0xd0, 0x77, 0x88, 0x01, 0xd1, 0x78, 0x88, + 0x01, 0xd2, 0x79, 0x88, 0x01, 0xd3, 0x7a, 0x88, 0x01, 0xd4, 0x7b, 0x88, + 0x01, 0xd5, 0x7c, 0x88, 0x01, 0xd6, 0x7d, 0x88, 0x01, 0xd7, 0x7e, 0x88, + 0x01, 0xd8, 0x7f, 0x88, 0x01, 0xd9, 0x80, 0x88, 0x41, 0xd0, 0x6d, 0x88, + 0x01, 0xd1, 0x6e, 0x88, 0x01, 0xd2, 0x6f, 0x88, 0x01, 0xd3, 0x70, 0x88, + 0x01, 0xd4, 0x71, 0x88, 0x01, 0xd5, 0x72, 0x88, 0x01, 0xd6, 0x73, 0x88, + 0x01, 0xd7, 0x74, 0x88, 0x01, 0xd8, 0x75, 0x88, 0x01, 0xd9, 0x76, 0x88, + 0x41, 0xd0, 0x63, 0x88, 0x01, 0xd1, 0x64, 0x88, 0x01, 0xd2, 0x65, 0x88, + 0x01, 0xd3, 0x66, 0x88, 0x01, 0xd4, 0x67, 0x88, 0x01, 0xd5, 0x68, 0x88, + 0x01, 0xd6, 0x69, 0x88, 0x01, 0xd7, 0x6a, 0x88, 0x01, 0xd8, 0x6b, 0x88, + 0x01, 0xd9, 0x6c, 0x88, 0x41, 0x90, 0x80, 0x03, 0x91, 0xd5, 0x02, 0x92, + 0xaa, 0x02, 0x93, 0xff, 0x01, 0x94, 0xd4, 0x01, 0x95, 0xa9, 0x01, 0x96, + 0x7f, 0x97, 0x55, 0x98, 0x2b, 0x99, 0x01, 0xff, 0xd0, 0x59, 0x88, 0x01, + 0xd1, 0x5a, 0x88, 0x01, 0xd2, 0x5b, 0x88, 0x01, 0xd3, 0x5c, 0x88, 0x01, + 0xd4, 0x5d, 0x88, 0x01, 0xd5, 0x5e, 0x88, 0x01, 0xd6, 0x5f, 0x88, 0x01, + 0xd7, 0x60, 0x88, 0x01, 0xd8, 0x61, 0x88, 0x01, 0xd9, 0x62, 0x88, 0x41, + 0xd0, 0x4f, 0x88, 0x01, 0xd1, 0x50, 0x88, 0x01, 0xd2, 0x51, 0x88, 0x01, + 0xd3, 0x52, 0x88, 0x01, 0xd4, 0x53, 0x88, 0x01, 0xd5, 0x54, 0x88, 0x01, + 0xd6, 0x55, 0x88, 0x01, 0xd7, 0x56, 0x88, 0x01, 0xd8, 0x57, 0x88, 0x01, + 0xd9, 0x58, 0x88, 0x41, 0xd0, 0x45, 0x88, 0x01, 0xd1, 0x46, 0x88, 0x01, + 0xd2, 0x47, 0x88, 0x01, 0xd3, 0x48, 0x88, 0x01, 0xd4, 0x49, 0x88, 0x01, + 0xd5, 0x4a, 0x88, 0x01, 0xd6, 0x4b, 0x88, 0x01, 0xd7, 0x4c, 0x88, 0x01, + 0xd8, 0x4d, 0x88, 0x01, 0xd9, 0x4e, 0x88, 0x41, 0xd0, 0x3b, 0x88, 0x01, + 0xd1, 0x3c, 0x88, 0x01, 0xd2, 0x3d, 0x88, 0x01, 0xd3, 0x3e, 0x88, 0x01, + 0xd4, 0x3f, 0x88, 0x01, 0xd5, 0x40, 0x88, 0x01, 0xd6, 0x41, 0x88, 0x01, + 0xd7, 0x42, 0x88, 0x01, 0xd8, 0x43, 0x88, 0x01, 0xd9, 0x44, 0x88, 0x41, + 0xd0, 0x31, 0x88, 0x01, 0xd1, 0x32, 0x88, 0x01, 0xd2, 0x33, 0x88, 0x01, + 0xd3, 0x34, 0x88, 0x01, 0xd4, 0x35, 0x88, 0x01, 0xd5, 0x36, 0x88, 0x01, + 0xd6, 0x37, 0x88, 0x01, 0xd7, 0x38, 0x88, 0x01, 0xd8, 0x39, 0x88, 0x01, + 0xd9, 0x3a, 0x88, 0x41, 0xd0, 0x27, 0x88, 0x01, 0xd1, 0x28, 0x88, 0x01, + 0xd2, 0x29, 0x88, 0x01, 0xd3, 0x2a, 0x88, 0x01, 0xd4, 0x2b, 0x88, 0x01, + 0xd5, 0x2c, 0x88, 0x01, 0xd6, 0x2d, 0x88, 0x01, 0xd7, 0x2e, 0x88, 0x01, + 0xd8, 0x2f, 0x88, 0x01, 0xd9, 0x30, 0x88, 0x41, 0xd0, 0x1d, 0x88, 0x01, + 0xd1, 0x1e, 0x88, 0x01, 0xd2, 0x1f, 0x88, 0x01, 0xd3, 0x20, 0x88, 0x01, + 0xd4, 0x21, 0x88, 0x01, 0xd5, 0x22, 0x88, 0x01, 0xd6, 0x23, 0x88, 0x01, + 0xd7, 0x24, 0x88, 0x01, 0xd8, 0x25, 0x88, 0x01, 0xd9, 0x26, 0x88, 0x41, + 0xd0, 0x13, 0x88, 0x01, 0xd1, 0x14, 0x88, 0x01, 0xd2, 0x15, 0x88, 0x01, + 0xd3, 0x16, 0x88, 0x01, 0xd4, 0x17, 0x88, 0x01, 0xd5, 0x18, 0x88, 0x01, + 0xd6, 0x19, 0x88, 0x01, 0xd7, 0x1a, 0x88, 0x01, 0xd8, 0x1b, 0x88, 0x01, + 0xd9, 0x1c, 0x88, 0x41, 0xd0, 0x09, 0x88, 0x01, 0xd1, 0x0a, 0x88, 0x01, + 0xd2, 0x0b, 0x88, 0x01, 0xd3, 0x0c, 0x88, 0x01, 0xd4, 0x0d, 0x88, 0x01, + 0xd5, 0x0e, 0x88, 0x01, 0xd6, 0x0f, 0x88, 0x01, 0xd7, 0x10, 0x88, 0x01, + 0xd8, 0x11, 0x88, 0x01, 0xd9, 0x12, 0x88, 0x41, 0xd1, 0x00, 0x88, 0x01, + 0xd2, 0x01, 0x88, 0x01, 0xd3, 0x02, 0x88, 0x01, 0xd4, 0x03, 0x88, 0x01, + 0xd5, 0x04, 0x88, 0x01, 0xd6, 0x05, 0x88, 0x01, 0xd7, 0x06, 0x88, 0x01, + 0xd8, 0x07, 0x88, 0x01, 0xd9, 0x08, 0x88, 0x41, 0x06, 0xef, 0x06, 0xb1, + 0x03, 0x07, 0xec, 0x05, 0x01, 0xff, 0xa1, 0x87, 0x03, 0x42, 0x16, 0x00, + 0xaa, 0x6a, 0x01, 0xa3, 0xf4, 0x02, 0xa4, 0xe7, 0x02, 0xa5, 0xd4, 0x02, + 0xa6, 0xc7, 0x02, 0xa7, 0xba, 0x02, 0xa8, 0xa6, 0x02, 0xa9, 0x93, 0x02, + 0xab, 0x86, 0x02, 0xac, 0xf9, 0x01, 0xad, 0xe2, 0x01, 0xae, 0xc9, 0x01, + 0xaf, 0xb6, 0x01, 0xb0, 0xa9, 0x01, 0x42, 0x71, 0x00, 0xb2, 0x6a, 0x01, + 0xb3, 0x84, 0x01, 0xb4, 0x72, 0xb5, 0x2a, 0xb6, 0x18, 0x42, 0xa9, 0x01, + 0xa6, 0x6a, 0x01, 0x42, 0xed, 0x26, 0xba, 0x6a, 0x01, 0x42, 0xbc, 0x22, + 0xa5, 0x6a, 0x01, 0x42, 0x59, 0x00, 0xbe, 0x6a, 0x41, 0xe3, 0x79, 0x6a, + 0x01, 0xf1, 0x7a, 0x6a, 0x01, 0xf8, 0x7b, 0x6a, 0x01, 0xfa, 0x78, 0x6a, + 0x41, 0xe3, 0x85, 0x6a, 0x01, 0xa5, 0x30, 0xa9, 0x0c, 0xf1, 0x86, 0x6a, + 0x01, 0xf8, 0x87, 0x6a, 0x01, 0xfa, 0x84, 0x6a, 0x41, 0xe3, 0x8d, 0x6a, + 0x01, 0xf1, 0x8e, 0x6a, 0x01, 0xb5, 0x08, 0xf8, 0x8f, 0x6a, 0x01, 0xfa, + 0x8c, 0x6a, 0x41, 0xe3, 0x99, 0x6a, 0x01, 0xf1, 0x9a, 0x6a, 0x01, 0xf8, + 0x9b, 0x6a, 0x01, 0xfa, 0x98, 0x6a, 0x41, 0xe3, 0x94, 0x6a, 0x01, 0xf1, + 0x96, 0x6a, 0x01, 0xf8, 0x97, 0x6a, 0x01, 0xfa, 0x95, 0x6a, 0x41, 0xe1, + 0xb0, 0x6a, 0x01, 0x42, 0x22, 0x00, 0xb9, 0x6a, 0x01, 0x42, 0x40, 0x06, + 0xb6, 0x6a, 0x41, 0xe1, 0xa4, 0x6a, 0x01, 0xa8, 0x01, 0xff, 0xe1, 0xb4, + 0x6a, 0x01, 0x04, 0x35, 0x07, 0x01, 0xff, 0x43, 0xef, 0xf3, 0x93, 0x6a, + 0x01, 0x43, 0xa9, 0xf4, 0x92, 0x6a, 0x41, 0xe1, 0xa7, 0x6a, 0x01, 0x42, + 0x22, 0x00, 0xa9, 0x6a, 0x41, 0xe3, 0x71, 0x6a, 0x01, 0xf1, 0x72, 0x6a, + 0x01, 0xf8, 0x73, 0x6a, 0x01, 0xfa, 0x70, 0x6a, 0x41, 0xe1, 0xac, 0x6a, + 0x01, 0x42, 0x24, 0x02, 0xa3, 0x6a, 0x01, 0x42, 0x22, 0x00, 0xb3, 0x6a, + 0x01, 0x42, 0xbc, 0x22, 0xa8, 0x6a, 0x41, 0xe1, 0xab, 0x6a, 0x01, 0xe3, + 0x9d, 0x6a, 0x01, 0xf1, 0x9e, 0x6a, 0x01, 0xf8, 0x9f, 0x6a, 0x01, 0xfa, + 0x9c, 0x6a, 0x41, 0xe1, 0xae, 0x6a, 0x01, 0x47, 0xe7, 0xd3, 0x91, 0x6a, + 0x41, 0xe1, 0xa0, 0x6a, 0x01, 0x42, 0x22, 0x00, 0xa1, 0x6a, 0x41, 0xe3, + 0x81, 0x6a, 0x01, 0xf1, 0x82, 0x6a, 0x01, 0xf8, 0x83, 0x6a, 0x01, 0xfa, + 0x80, 0x6a, 0x41, 0xe1, 0xad, 0x6a, 0x01, 0xb4, 0x01, 0xff, 0xe1, 0xaf, + 0x6a, 0x01, 0x42, 0x12, 0x00, 0xb8, 0x6a, 0x41, 0xe1, 0xa2, 0x6a, 0x01, + 0x42, 0x22, 0x00, 0xb7, 0x6a, 0x41, 0xe1, 0xbb, 0x6a, 0x01, 0x47, 0xe9, + 0xb8, 0x90, 0x6a, 0x41, 0xe3, 0x7d, 0x6a, 0x01, 0xf1, 0x7e, 0x6a, 0x01, + 0xf8, 0x7f, 0x6a, 0x01, 0xfa, 0x7c, 0x6a, 0x41, 0xe1, 0xb1, 0x6a, 0x01, + 0x42, 0x22, 0x00, 0xbc, 0x6a, 0x41, 0xe1, 0xb5, 0x6a, 0x01, 0x42, 0x22, + 0x00, 0xbd, 0x6a, 0x41, 0xe3, 0x75, 0x6a, 0x01, 0xf1, 0x76, 0x6a, 0x01, + 0xb7, 0x08, 0xf8, 0x77, 0x6a, 0x01, 0xfa, 0x74, 0x6a, 0x41, 0xe3, 0x89, + 0x6a, 0x01, 0xf1, 0x8a, 0x6a, 0x01, 0xf8, 0x8b, 0x6a, 0x01, 0xfa, 0x88, + 0x6a, 0x41, 0x45, 0x12, 0x0b, 0xc8, 0x6a, 0x01, 0xa6, 0x2e, 0x44, 0xcf, + 0x2a, 0xc9, 0x6a, 0x01, 0x43, 0x0e, 0x0b, 0xc1, 0x6a, 0x01, 0xb3, 0x14, + 0xb4, 0x06, 0x44, 0x43, 0x1e, 0xc0, 0x6a, 0x41, 0x44, 0x25, 0x01, 0xc3, + 0x6a, 0x01, 0x42, 0x15, 0x02, 0xc2, 0x6a, 0x41, 0x44, 0xc9, 0x1d, 0xc7, + 0x6a, 0x01, 0x42, 0x01, 0x26, 0xc6, 0x6a, 0x41, 0x43, 0xd2, 0x05, 0xc5, + 0x6a, 0x01, 0x43, 0xf6, 0x06, 0xc4, 0x6a, 0x41, 0x43, 0x67, 0x00, 0xd4, + 0xfa, 0x01, 0x03, 0xd3, 0x4f, 0x01, 0xff, 0xa1, 0x9a, 0x06, 0xa3, 0x8b, + 0x06, 0xa4, 0xb0, 0x05, 0x09, 0x1e, 0x5a, 0x93, 0x04, 0x52, 0xb7, 0x52, + 0xee, 0x1f, 0x01, 0xac, 0xbc, 0x02, 0x4a, 0x11, 0xae, 0xf4, 0x0b, 0x00, + 0x07, 0xff, 0x39, 0x95, 0x02, 0x42, 0x14, 0x05, 0xd0, 0x0b, 0x00, 0x57, + 0x69, 0x30, 0xff, 0x1f, 0x01, 0x4a, 0x65, 0x80, 0xf9, 0x0b, 0x00, 0xb3, + 0x5b, 0xb4, 0x42, 0x0b, 0x40, 0x77, 0x0c, 0x54, 0xb8, 0x46, 0xe4, 0x1f, + 0x01, 0x49, 0x97, 0xc1, 0xf5, 0x0b, 0x40, 0xa1, 0x24, 0xe5, 0xc6, 0x0b, + 0x80, 0x1b, 0xe9, 0xbf, 0x0b, 0x80, 0x12, 0xef, 0xca, 0x0b, 0x80, 0x09, + 0xf5, 0xc1, 0x0b, 0xc0, 0x00, 0xf5, 0xc2, 0x0b, 0x40, 0xef, 0xcb, 0x0b, + 0x40, 0xe9, 0xc0, 0x0b, 0x40, 0xe5, 0xc7, 0x0b, 0x40, 0xe1, 0xbe, 0x0b, + 0x00, 0xe9, 0xc8, 0x0b, 0x00, 0xf5, 0xcc, 0x0b, 0x40, 0x49, 0x83, 0xbd, + 0xed, 0x1f, 0x01, 0x0b, 0x42, 0x7d, 0x01, 0xff, 0x4b, 0x55, 0x9a, 0xe8, + 0x1f, 0x01, 0x4b, 0x43, 0xa0, 0xe9, 0x1f, 0x41, 0x4c, 0x1f, 0x8c, 0xe7, + 0x1f, 0x01, 0x04, 0x5b, 0x03, 0x0c, 0x49, 0xf8, 0xbd, 0xec, 0x1f, 0x01, + 0x51, 0x2b, 0x5e, 0xef, 0x1f, 0x41, 0xa1, 0x81, 0x01, 0x46, 0x6a, 0xda, + 0xd6, 0x1f, 0x01, 0xab, 0x64, 0x02, 0xc3, 0x16, 0x4e, 0x43, 0xf6, 0xc7, + 0xd5, 0x1f, 0x01, 0xb0, 0x2c, 0x47, 0xca, 0xc0, 0xd8, 0x1f, 0x01, 0xb6, + 0x01, 0xff, 0xa1, 0x15, 0x43, 0xaa, 0x2d, 0xe3, 0x1f, 0x01, 0xa9, 0x01, + 0xff, 0x44, 0xe5, 0x23, 0xcd, 0x0b, 0x00, 0x45, 0xec, 0x4b, 0x83, 0x0b, + 0x40, 0x48, 0x68, 0xc7, 0xf1, 0x1f, 0x01, 0x46, 0x62, 0xdf, 0xe0, 0x1f, + 0x41, 0xa1, 0x06, 0x42, 0x10, 0x00, 0xdf, 0x1f, 0x41, 0x44, 0x7b, 0x77, + 0xe1, 0x1f, 0x01, 0x43, 0x2a, 0x05, 0xde, 0x1f, 0x01, 0x46, 0x8e, 0xe0, + 0xdb, 0x1f, 0x41, 0x47, 0x66, 0xd2, 0xdc, 0x1f, 0x01, 0x47, 0x48, 0xd6, + 0xf0, 0x1f, 0x01, 0x49, 0xc8, 0xc0, 0xd9, 0x1f, 0x41, 0x44, 0xdd, 0xee, + 0xdd, 0x1f, 0x01, 0xb5, 0x01, 0xff, 0x44, 0x04, 0x7e, 0xda, 0x1f, 0x01, + 0x43, 0x53, 0x7f, 0xe2, 0x1f, 0x41, 0x48, 0xe0, 0xc3, 0xd7, 0x1f, 0x01, + 0x47, 0x3d, 0x16, 0x82, 0x0b, 0x40, 0x04, 0x0e, 0x0b, 0x0c, 0x44, 0x5a, + 0x03, 0xfa, 0x0b, 0x00, 0x43, 0xdb, 0x06, 0xf0, 0x0b, 0x40, 0x47, 0x71, + 0x11, 0xf1, 0x0b, 0x00, 0x48, 0x40, 0x5e, 0xf2, 0x0b, 0x40, 0x48, 0xae, + 0x47, 0xe6, 0x1f, 0x01, 0x06, 0xed, 0x05, 0x01, 0xff, 0xe1, 0x85, 0x0b, + 0x80, 0xb1, 0x01, 0x42, 0x37, 0x00, 0x9a, 0x0b, 0x00, 0xe5, 0x8e, 0x0b, + 0x80, 0xa1, 0x01, 0x42, 0x22, 0x00, 0xb9, 0x0b, 0x00, 0xe9, 0x87, 0x0b, + 0x80, 0x91, 0x01, 0x42, 0x56, 0x19, 0x9c, 0x0b, 0x00, 0x42, 0x1b, 0x02, + 0x95, 0x0b, 0x00, 0xac, 0x72, 0x42, 0x6c, 0x00, 0xae, 0x0b, 0x00, 0xae, + 0x4e, 0xef, 0x92, 0x0b, 0x80, 0x45, 0x42, 0xbb, 0x09, 0xaa, 0x0b, 0x00, + 0xb2, 0x33, 0xb3, 0x21, 0xb4, 0x15, 0xf5, 0x89, 0x0b, 0x80, 0x0c, 0x42, + 0xf5, 0x0a, 0xb5, 0x0b, 0x00, 0x42, 0xbc, 0x22, 0xaf, 0x0b, 0x40, 0xf5, + 0x8a, 0x0b, 0x40, 0xe1, 0xa4, 0x0b, 0x00, 0x42, 0x12, 0x00, 0x9f, 0x0b, + 0x40, 0xe1, 0xb8, 0x0b, 0x00, 0x42, 0x22, 0x00, 0xb6, 0x0b, 0x00, 0x42, + 0x40, 0x06, 0xb7, 0x0b, 0x40, 0xe1, 0xb0, 0x0b, 0x00, 0x42, 0x71, 0x00, + 0xb1, 0x0b, 0x40, 0xef, 0x93, 0x0b, 0x40, 0xe1, 0xa8, 0x0b, 0x00, 0x42, + 0x24, 0x02, 0x99, 0x0b, 0x00, 0xae, 0x06, 0x42, 0xbc, 0x22, 0x9e, 0x0b, + 0x40, 0xe1, 0xa3, 0x0b, 0x00, 0x42, 0x2a, 0x05, 0xa9, 0x0b, 0x40, 0xe1, + 0xb2, 0x0b, 0x00, 0xac, 0x01, 0xff, 0xe1, 0xb3, 0x0b, 0x00, 0x42, 0x74, + 0x00, 0xb4, 0x0b, 0x40, 0xe9, 0x88, 0x0b, 0x40, 0xe5, 0x8f, 0x0b, 0x40, + 0xe1, 0x86, 0x0b, 0x00, 0xe9, 0x90, 0x0b, 0x00, 0xf5, 0x94, 0x0b, 0x40, + 0x58, 0x3e, 0x28, 0xd4, 0x1f, 0x01, 0x04, 0x0e, 0x0b, 0x27, 0x06, 0x24, + 0x01, 0x01, 0xff, 0x4a, 0xd9, 0xa9, 0xc6, 0x1f, 0x01, 0x48, 0x2a, 0x01, + 0xd3, 0x1f, 0x01, 0x04, 0x00, 0x26, 0x06, 0x4a, 0x3f, 0xb2, 0xcd, 0x1f, + 0x41, 0x46, 0x17, 0xb1, 0xce, 0x1f, 0x01, 0x49, 0x8e, 0xc1, 0xc7, 0x1f, + 0x41, 0x05, 0x12, 0x0b, 0x59, 0xa6, 0x4b, 0x05, 0xc0, 0x2c, 0x3f, 0x58, + 0x36, 0x2a, 0xc1, 0x1f, 0x01, 0x47, 0x2a, 0x01, 0xd0, 0x1f, 0x01, 0x04, + 0x00, 0x26, 0x1d, 0xb4, 0x01, 0xff, 0x44, 0x82, 0x1b, 0xcb, 0x1f, 0x01, + 0xa8, 0x06, 0x48, 0xd5, 0x25, 0xc8, 0x1f, 0x41, 0x4b, 0x6f, 0x90, 0xc5, + 0x1f, 0x01, 0x59, 0xc4, 0x25, 0xc0, 0x1f, 0x41, 0x06, 0x2a, 0xdb, 0x06, + 0x48, 0x85, 0xc1, 0xc3, 0x1f, 0x41, 0xd1, 0xc9, 0x1f, 0x01, 0xd2, 0xca, + 0x1f, 0x41, 0xd1, 0xd1, 0x1f, 0x01, 0xd2, 0xd2, 0x1f, 0x41, 0x44, 0x42, + 0xaf, 0xcf, 0x1f, 0x01, 0x47, 0x18, 0xd4, 0xc4, 0x1f, 0x41, 0xe8, 0xcc, + 0x1f, 0x01, 0x44, 0xd9, 0x25, 0xc2, 0x1f, 0x41, 0x47, 0x4f, 0xcf, 0xf3, + 0x0b, 0x00, 0x49, 0x07, 0xb8, 0xf6, 0x0b, 0x00, 0x05, 0xf0, 0x06, 0x06, + 0x53, 0xd5, 0x4c, 0xe5, 0x1f, 0x41, 0x45, 0x12, 0x0b, 0xee, 0x0b, 0x00, + 0xa6, 0x2e, 0x44, 0xcf, 0x2a, 0xef, 0x0b, 0x00, 0x43, 0x0e, 0x0b, 0xe7, + 0x0b, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, 0xe6, 0x0b, 0x40, + 0x44, 0x25, 0x01, 0xe9, 0x0b, 0x00, 0x42, 0x15, 0x02, 0xe8, 0x0b, 0x40, + 0x44, 0xc9, 0x1d, 0xed, 0x0b, 0x00, 0x42, 0x01, 0x26, 0xec, 0x0b, 0x40, + 0x43, 0xd2, 0x05, 0xeb, 0x0b, 0x00, 0x43, 0xf6, 0x06, 0xea, 0x0b, 0x40, + 0x4a, 0x56, 0x9a, 0xf7, 0x0b, 0x00, 0x4b, 0x79, 0xa4, 0xea, 0x1f, 0x41, + 0x4b, 0xeb, 0x9f, 0xeb, 0x1f, 0x01, 0x4c, 0xef, 0x94, 0xf8, 0x0b, 0x00, + 0x4d, 0x18, 0x76, 0xd7, 0x0b, 0x40, 0x44, 0x80, 0x11, 0x78, 0xd3, 0x01, + 0x43, 0x0e, 0x0b, 0x77, 0xd3, 0x41, 0x48, 0xa8, 0xc5, 0x61, 0xf9, 0x01, + 0x03, 0xe5, 0x0a, 0x01, 0xff, 0x51, 0xdc, 0x57, 0xb9, 0x16, 0x01, 0x06, + 0xef, 0x06, 0xd1, 0x02, 0x07, 0xec, 0x05, 0x4e, 0x05, 0x5a, 0x03, 0x2d, + 0x0b, 0x40, 0x77, 0x01, 0xff, 0xa1, 0x1a, 0xe5, 0xb2, 0x16, 0x01, 0xe9, + 0xae, 0x16, 0x81, 0x0d, 0xef, 0xb4, 0x16, 0x01, 0xf5, 0xb0, 0x16, 0xc1, + 0x00, 0xf5, 0xb1, 0x16, 0x41, 0xe9, 0xaf, 0x16, 0x41, 0xe1, 0xad, 0x16, + 0x01, 0xe9, 0xb3, 0x16, 0x01, 0xf5, 0xb5, 0x16, 0x41, 0x48, 0x3c, 0x16, + 0xab, 0x16, 0x01, 0x45, 0x3f, 0x3f, 0xb7, 0x16, 0x01, 0x02, 0x02, 0x00, + 0x01, 0xff, 0x44, 0xe5, 0x23, 0xb6, 0x16, 0x01, 0x45, 0xec, 0x4b, 0xac, + 0x16, 0x41, 0xe1, 0x80, 0x16, 0x81, 0xe7, 0x01, 0xa2, 0xda, 0x01, 0xa3, + 0xcd, 0x01, 0xa4, 0xb4, 0x01, 0xe5, 0x86, 0x16, 0x01, 0xa7, 0xa3, 0x01, + 0x42, 0x22, 0x00, 0xa9, 0x16, 0x01, 0xe9, 0x82, 0x16, 0x81, 0x93, 0x01, + 0xaa, 0x86, 0x01, 0xab, 0x7a, 0x42, 0x74, 0x00, 0xa5, 0x16, 0x01, 0x42, + 0x6c, 0x00, 0xa2, 0x16, 0x01, 0xae, 0x56, 0xef, 0x88, 0x16, 0x01, 0xb0, + 0x46, 0xb2, 0x3a, 0xb3, 0x2e, 0xb4, 0x15, 0xf5, 0x84, 0x16, 0x81, 0x0c, + 0x42, 0xf5, 0x0a, 0xa6, 0x16, 0x01, 0x42, 0xbc, 0x22, 0xa3, 0x16, 0x41, + 0xf5, 0x85, 0x16, 0x41, 0xe1, 0x99, 0x16, 0x01, 0x42, 0x22, 0x00, 0x9a, + 0x16, 0x01, 0xb4, 0x01, 0xff, 0xe1, 0x94, 0x16, 0x01, 0x42, 0x22, 0x00, + 0x95, 0x16, 0x41, 0xe1, 0xa8, 0x16, 0x01, 0x42, 0x22, 0x00, 0xa7, 0x16, + 0x41, 0xe1, 0xa4, 0x16, 0x01, 0x42, 0x71, 0x00, 0xaa, 0x16, 0x41, 0xe1, + 0x9e, 0x16, 0x01, 0x42, 0x22, 0x00, 0x9f, 0x16, 0x41, 0xe1, 0x9d, 0x16, + 0x01, 0x42, 0x24, 0x02, 0x8e, 0x16, 0x01, 0x42, 0x2a, 0x05, 0x98, 0x16, + 0x01, 0x42, 0xbc, 0x22, 0x93, 0x16, 0x41, 0xe1, 0x8a, 0x16, 0x01, 0x42, + 0x22, 0x00, 0x8b, 0x16, 0x41, 0xe1, 0x91, 0x16, 0x01, 0x42, 0x22, 0x00, + 0x92, 0x16, 0x41, 0xe9, 0x83, 0x16, 0x41, 0xe1, 0x8c, 0x16, 0x01, 0x42, + 0x22, 0x00, 0x8d, 0x16, 0x41, 0xe1, 0x9b, 0x16, 0x01, 0xa4, 0x06, 0x42, + 0x22, 0x00, 0x9c, 0x16, 0x41, 0xe1, 0x96, 0x16, 0x01, 0x42, 0x22, 0x00, + 0x97, 0x16, 0x41, 0xe1, 0x8f, 0x16, 0x01, 0x42, 0x22, 0x00, 0x90, 0x16, + 0x41, 0xe1, 0xa0, 0x16, 0x01, 0x42, 0x22, 0x00, 0xa1, 0x16, 0x41, 0xe1, + 0x81, 0x16, 0x01, 0xe9, 0x87, 0x16, 0x01, 0x4a, 0xf1, 0xaf, 0xb8, 0x16, + 0x01, 0xf5, 0x89, 0x16, 0x41, 0x45, 0x12, 0x0b, 0xc8, 0x16, 0x01, 0xa6, + 0x2e, 0x44, 0xcf, 0x2a, 0xc9, 0x16, 0x01, 0x43, 0x0e, 0x0b, 0xc1, 0x16, + 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, 0xc0, 0x16, 0x41, 0x44, + 0x25, 0x01, 0xc3, 0x16, 0x01, 0x42, 0x15, 0x02, 0xc2, 0x16, 0x41, 0x44, + 0xc9, 0x1d, 0xc7, 0x16, 0x01, 0x42, 0x01, 0x26, 0xc6, 0x16, 0x41, 0x43, + 0xd2, 0x05, 0xc5, 0x16, 0x01, 0x43, 0xf6, 0x06, 0xc4, 0x16, 0x41, 0x0a, + 0x8b, 0xac, 0xc6, 0x0c, 0x05, 0x5b, 0xa3, 0x8b, 0x06, 0x05, 0x1d, 0xec, + 0xca, 0x02, 0x03, 0x48, 0x58, 0x01, 0xff, 0x07, 0xec, 0x05, 0x2e, 0xb3, + 0x06, 0x47, 0xa6, 0xd7, 0xff, 0xe6, 0x41, 0x04, 0x5b, 0x03, 0x06, 0x4c, + 0x2f, 0x97, 0xfe, 0xe6, 0x41, 0xa1, 0x0c, 0x42, 0x14, 0x05, 0xf5, 0xe6, + 0x01, 0x42, 0xd6, 0x13, 0xe3, 0xe6, 0x41, 0x42, 0x1d, 0x01, 0xef, 0xe6, + 0x01, 0xf5, 0xe6, 0xe6, 0x01, 0xf9, 0xee, 0xe6, 0x41, 0xa1, 0xee, 0x01, + 0x42, 0x5d, 0x00, 0xd0, 0xe6, 0x01, 0x42, 0x13, 0x05, 0xc6, 0xe6, 0x01, + 0x42, 0x3b, 0x01, 0xcb, 0xe6, 0x01, 0xe5, 0xe8, 0xe6, 0x01, 0x42, 0x06, + 0x14, 0xc4, 0xe6, 0x01, 0x05, 0x48, 0x0b, 0x97, 0x01, 0xe9, 0xe1, 0xe6, + 0x81, 0x8d, 0x01, 0x42, 0x13, 0x01, 0xd8, 0xe6, 0x81, 0x4b, 0x42, 0xc3, + 0x07, 0xd6, 0xe6, 0x01, 0xae, 0x39, 0xef, 0xe7, 0xe6, 0x81, 0x30, 0x43, + 0x01, 0x3d, 0xd3, 0xe6, 0x01, 0x42, 0x1f, 0xbd, 0xdc, 0xe6, 0x01, 0x43, + 0x2a, 0x08, 0xce, 0xe6, 0x01, 0xf5, 0xe4, 0xe6, 0x81, 0x0c, 0x42, 0x0a, + 0x1d, 0xd9, 0xe6, 0x01, 0x42, 0xa9, 0x47, 0xd7, 0xe6, 0x41, 0xe1, 0xeb, + 0xe6, 0x01, 0xe5, 0xe2, 0xe6, 0xc1, 0x00, 0xe1, 0xea, 0xe6, 0x41, 0xef, + 0xec, 0xe6, 0x41, 0x42, 0x06, 0x14, 0xc5, 0xe6, 0x01, 0xef, 0xcf, 0xe6, + 0x41, 0x02, 0xd2, 0x00, 0x01, 0xff, 0x42, 0x68, 0x03, 0xd4, 0xe6, 0x01, + 0x42, 0x0b, 0x00, 0xda, 0xe6, 0x01, 0xab, 0x18, 0x43, 0x0d, 0x54, 0xc9, + 0xe6, 0x01, 0x42, 0x9c, 0x01, 0xd1, 0xe6, 0x01, 0x42, 0x1e, 0x00, 0xcc, + 0xe6, 0x01, 0x42, 0xc7, 0x2f, 0xc7, 0xe6, 0x41, 0x42, 0x0b, 0x00, 0xc2, + 0xe6, 0x01, 0xef, 0xc0, 0xe6, 0x01, 0x42, 0x0a, 0x1d, 0xdd, 0xe6, 0x41, + 0xe1, 0xe9, 0xe6, 0x41, 0x42, 0x68, 0x03, 0xd5, 0xe6, 0x01, 0x42, 0x0b, + 0x00, 0xdb, 0xe6, 0x01, 0xab, 0x18, 0x43, 0x0d, 0x54, 0xca, 0xe6, 0x01, + 0x42, 0x9c, 0x01, 0xd2, 0xe6, 0x01, 0x42, 0x1e, 0x00, 0xcd, 0xe6, 0x01, + 0x42, 0xc7, 0x2f, 0xc8, 0xe6, 0x41, 0x42, 0x0b, 0x00, 0xc3, 0xe6, 0x01, + 0xef, 0xc1, 0xe6, 0x01, 0x42, 0x0a, 0x1d, 0xde, 0xe6, 0x41, 0xe1, 0xe0, + 0xe6, 0x01, 0xe5, 0xe5, 0xe6, 0x01, 0xeb, 0xf2, 0xe6, 0x01, 0xed, 0xf1, + 0xe6, 0x01, 0xee, 0xf0, 0xe6, 0x01, 0xf0, 0xf4, 0xe6, 0x01, 0xf4, 0xf3, + 0xe6, 0x01, 0x42, 0xd6, 0x13, 0xed, 0xe6, 0x41, 0x07, 0xec, 0x05, 0x91, + 0x01, 0x05, 0x67, 0xe8, 0x80, 0x01, 0x07, 0x5f, 0x16, 0x5c, 0x09, 0xe7, + 0xbf, 0x40, 0x06, 0x3c, 0x39, 0x01, 0xff, 0xa1, 0x23, 0xe5, 0xb5, 0xaa, + 0x00, 0xe9, 0xb2, 0xaa, 0x80, 0x16, 0xef, 0xb6, 0xaa, 0x00, 0xf5, 0xb4, + 0xaa, 0xc0, 0x00, 0xe1, 0xba, 0xaa, 0x00, 0xe5, 0xb3, 0xaa, 0xc0, 0x00, + 0xe1, 0xb9, 0xaa, 0x40, 0xe1, 0xb8, 0xaa, 0x40, 0xe1, 0xb1, 0xaa, 0x00, + 0xed, 0xbe, 0xaa, 0x00, 0xee, 0xbd, 0xaa, 0x00, 0x42, 0xd6, 0x13, 0xbb, + 0xaa, 0x00, 0xf9, 0xbc, 0xaa, 0x40, 0x42, 0xd5, 0x18, 0xbf, 0xaa, 0x00, + 0x45, 0x4d, 0xe9, 0xc0, 0xaa, 0x00, 0x44, 0xb9, 0xf2, 0xc2, 0xaa, 0x00, + 0x43, 0x2a, 0x08, 0xc1, 0xaa, 0x40, 0x46, 0x92, 0xdc, 0xde, 0xaa, 0x00, + 0x02, 0x4d, 0x03, 0x0c, 0x45, 0x4d, 0xe9, 0xdc, 0xaa, 0x00, 0x43, 0xdc, + 0x85, 0xdd, 0xaa, 0x40, 0x45, 0x31, 0xe7, 0xdf, 0xaa, 0x00, 0xee, 0xdb, + 0xaa, 0x40, 0x43, 0x1c, 0x01, 0xb0, 0xaa, 0x00, 0x43, 0xae, 0x02, 0xb7, + 0xaa, 0x40, 0x05, 0x48, 0x0b, 0x93, 0x01, 0x04, 0x08, 0x05, 0x01, 0xff, + 0x42, 0x5d, 0x00, 0x9a, 0xaa, 0x00, 0xa3, 0x7c, 0x42, 0x3b, 0x01, 0x92, + 0xaa, 0x00, 0x42, 0x68, 0x03, 0xa0, 0xaa, 0x00, 0x42, 0x06, 0x14, 0x86, + 0xaa, 0x00, 0x42, 0x0b, 0x00, 0xac, 0xaa, 0x00, 0xab, 0x52, 0x42, 0x13, + 0x01, 0xa8, 0xaa, 0x00, 0x42, 0xc3, 0x07, 0xa2, 0xaa, 0x00, 0xae, 0x34, + 0xef, 0xae, 0xaa, 0x00, 0xb0, 0x24, 0x42, 0xd0, 0x00, 0xa6, 0xaa, 0x00, + 0x42, 0x60, 0x03, 0x8e, 0xaa, 0x00, 0xb4, 0x0c, 0x42, 0x0a, 0x1d, 0xaa, + 0xaa, 0x00, 0x42, 0xa9, 0x47, 0xa4, 0xaa, 0x40, 0x42, 0x0b, 0x00, 0x96, + 0xaa, 0x00, 0xef, 0x94, 0xaa, 0x40, 0x42, 0x0b, 0x00, 0x9e, 0xaa, 0x00, + 0xef, 0x9c, 0xaa, 0x40, 0x42, 0x06, 0x14, 0x88, 0xaa, 0x00, 0xef, 0x98, + 0xaa, 0x00, 0x42, 0xa9, 0x47, 0x90, 0xaa, 0x40, 0xa8, 0x04, 0xef, 0x80, + 0xaa, 0x40, 0x42, 0x0b, 0x00, 0x84, 0xaa, 0x00, 0xef, 0x82, 0xaa, 0x40, + 0x42, 0x0b, 0x00, 0x8c, 0xaa, 0x00, 0xef, 0x8a, 0xaa, 0x40, 0x42, 0x5d, + 0x00, 0x9b, 0xaa, 0x00, 0xa3, 0x7c, 0x42, 0x3b, 0x01, 0x93, 0xaa, 0x00, + 0x42, 0x68, 0x03, 0xa1, 0xaa, 0x00, 0x42, 0x06, 0x14, 0x87, 0xaa, 0x00, + 0x42, 0x0b, 0x00, 0xad, 0xaa, 0x00, 0xab, 0x52, 0x42, 0x13, 0x01, 0xa9, + 0xaa, 0x00, 0x42, 0xc3, 0x07, 0xa3, 0xaa, 0x00, 0xae, 0x34, 0xef, 0xaf, + 0xaa, 0x00, 0xb0, 0x24, 0x42, 0xd0, 0x00, 0xa7, 0xaa, 0x00, 0x42, 0x60, + 0x03, 0x8f, 0xaa, 0x00, 0xb4, 0x0c, 0x42, 0x0a, 0x1d, 0xab, 0xaa, 0x00, + 0x42, 0xa9, 0x47, 0xa5, 0xaa, 0x40, 0x42, 0x0b, 0x00, 0x97, 0xaa, 0x00, + 0xef, 0x95, 0xaa, 0x40, 0x42, 0x0b, 0x00, 0x9f, 0xaa, 0x00, 0xef, 0x9d, + 0xaa, 0x40, 0x42, 0x06, 0x14, 0x89, 0xaa, 0x00, 0xef, 0x99, 0xaa, 0x00, + 0x42, 0xa9, 0x47, 0x91, 0xaa, 0x40, 0xa8, 0x04, 0xef, 0x81, 0xaa, 0x40, + 0x42, 0x0b, 0x00, 0x85, 0xaa, 0x00, 0xef, 0x83, 0xaa, 0x40, 0x42, 0x0b, + 0x00, 0x8d, 0xaa, 0x00, 0xef, 0x8b, 0xaa, 0x40, 0x02, 0x13, 0x05, 0xe9, + 0x05, 0x0b, 0x15, 0x9d, 0xa2, 0x05, 0x07, 0xec, 0x05, 0xdd, 0x02, 0x05, + 0x5a, 0x03, 0xac, 0x01, 0x0b, 0x5b, 0xa3, 0x66, 0x0b, 0x40, 0x77, 0x01, + 0xff, 0xe1, 0x61, 0x1a, 0x80, 0x50, 0xe5, 0x6e, 0x1a, 0x00, 0xe9, 0x65, + 0x1a, 0x80, 0x43, 0x47, 0x15, 0xd3, 0x62, 0x1a, 0x00, 0xef, 0x6b, 0x1a, + 0x80, 0x20, 0xb4, 0x12, 0xf5, 0x69, 0x1a, 0xc0, 0x00, 0xe5, 0x67, 0x1a, + 0x00, 0xf5, 0x6a, 0x1a, 0xc0, 0x00, 0xe5, 0x68, 0x1a, 0x40, 0x46, 0x2d, + 0xd6, 0x64, 0x1a, 0x00, 0x46, 0x44, 0xdc, 0x72, 0x1a, 0x40, 0x02, 0x5a, + 0x00, 0x08, 0xef, 0x70, 0x1a, 0x00, 0xf9, 0x6d, 0x1a, 0x40, 0x45, 0x5c, + 0x00, 0x73, 0x1a, 0x00, 0x45, 0x20, 0x07, 0x6c, 0x1a, 0x40, 0xe9, 0x66, + 0x1a, 0x40, 0xe1, 0x63, 0x1a, 0x00, 0xe5, 0x6f, 0x1a, 0x00, 0xe9, 0x71, + 0x1a, 0x40, 0x45, 0x12, 0x0b, 0x98, 0x1a, 0x00, 0xa6, 0x2e, 0x44, 0xcf, + 0x2a, 0x99, 0x1a, 0x00, 0x43, 0x0e, 0x0b, 0x91, 0x1a, 0x00, 0xb3, 0x14, + 0xb4, 0x06, 0x44, 0x43, 0x1e, 0x90, 0x1a, 0x40, 0x44, 0x25, 0x01, 0x93, + 0x1a, 0x00, 0x42, 0x15, 0x02, 0x92, 0x1a, 0x40, 0x44, 0xc9, 0x1d, 0x97, + 0x1a, 0x00, 0x42, 0x01, 0x26, 0x96, 0x1a, 0x40, 0x43, 0xd2, 0x05, 0x95, + 0x1a, 0x00, 0x43, 0xf6, 0x06, 0x94, 0x1a, 0x40, 0x45, 0xe3, 0xe4, 0xad, + 0x1a, 0x00, 0x46, 0xfa, 0xda, 0xa5, 0x1a, 0x00, 0xa8, 0x91, 0x01, 0xab, + 0x61, 0x04, 0xa2, 0x45, 0x44, 0xb2, 0x36, 0x02, 0x40, 0x06, 0x19, 0x05, + 0xeb, 0x31, 0x0d, 0x45, 0x4f, 0xec, 0xa0, 0x1a, 0xc0, 0x00, 0x44, 0x15, + 0xf3, 0xa1, 0x1a, 0x40, 0xd1, 0x75, 0x1a, 0x00, 0xd2, 0x76, 0x1a, 0x40, + 0x43, 0x07, 0x8e, 0x60, 0x1a, 0x00, 0x45, 0x50, 0xeb, 0xaa, 0x1a, 0x80, + 0x06, 0x43, 0x25, 0x1a, 0xa2, 0x1a, 0x40, 0x43, 0xe9, 0x75, 0xab, 0x1a, + 0x40, 0x46, 0x62, 0xd9, 0x7a, 0x1a, 0x00, 0x54, 0x30, 0x42, 0xa6, 0x1a, + 0x40, 0x44, 0xc6, 0xa7, 0x74, 0x1a, 0x80, 0x0c, 0x43, 0xdc, 0x85, 0x7b, + 0x1a, 0x00, 0x45, 0x86, 0xec, 0xa7, 0x1a, 0x40, 0x44, 0xfb, 0x43, 0x58, + 0x1a, 0x40, 0x43, 0x80, 0x12, 0xa8, 0x1a, 0x80, 0x21, 0x43, 0x66, 0x54, + 0xa3, 0x1a, 0x00, 0x04, 0x61, 0xf0, 0x01, 0xff, 0x06, 0xea, 0x31, 0x06, + 0x4a, 0xaf, 0xa6, 0x7c, 0x1a, 0x40, 0xd3, 0x77, 0x1a, 0x00, 0xd4, 0x78, + 0x1a, 0x00, 0xd5, 0x79, 0x1a, 0x40, 0x43, 0xe9, 0x75, 0xa9, 0x1a, 0x40, + 0x43, 0x1c, 0x01, 0xac, 0x1a, 0x00, 0x42, 0x58, 0x69, 0xa4, 0x1a, 0x40, + 0xe1, 0x4b, 0x1a, 0x00, 0x42, 0x16, 0x00, 0x37, 0x1a, 0x00, 0x42, 0xf0, + 0x10, 0x2f, 0x1a, 0x00, 0x42, 0x27, 0x01, 0x51, 0x1a, 0x00, 0x48, 0x80, + 0xc6, 0x54, 0x1a, 0x00, 0x05, 0x48, 0x0b, 0xbf, 0x01, 0xe9, 0x4d, 0x1a, + 0x80, 0xb5, 0x01, 0xac, 0x46, 0x42, 0x6c, 0x00, 0x3e, 0x1a, 0x00, 0xae, + 0x2e, 0x42, 0xcd, 0x02, 0x52, 0x1a, 0x00, 0xb2, 0x0f, 0xf5, 0x4f, 0x1a, + 0x80, 0x06, 0x42, 0xa9, 0x01, 0x45, 0x1a, 0x40, 0xf5, 0x50, 0x1a, 0x40, + 0xe1, 0x41, 0x1a, 0x80, 0x06, 0x42, 0xd6, 0x13, 0x42, 0x1a, 0x40, 0x42, + 0x2a, 0x05, 0x31, 0x1a, 0x00, 0x42, 0x12, 0x00, 0x2d, 0x1a, 0x40, 0xe1, + 0x36, 0x1a, 0x00, 0x42, 0x24, 0x02, 0x26, 0x1a, 0x00, 0x42, 0xbc, 0x22, + 0x2c, 0x1a, 0x40, 0xe1, 0x43, 0x1a, 0x80, 0x64, 0x42, 0x74, 0x00, 0x4a, + 0x1a, 0x00, 0x03, 0xd1, 0x00, 0x06, 0x42, 0xd6, 0x13, 0x44, 0x1a, 0x40, + 0xa3, 0x48, 0x42, 0x0c, 0x08, 0x3c, 0x1a, 0x00, 0x42, 0x22, 0x00, 0x4c, + 0x1a, 0x00, 0xab, 0x2a, 0xb0, 0x1e, 0x45, 0xd5, 0x42, 0x30, 0x1a, 0x00, + 0x42, 0x40, 0x06, 0x2a, 0x1a, 0x00, 0xb4, 0x06, 0x42, 0xbc, 0x22, 0x3f, + 0x1a, 0x40, 0xe1, 0x34, 0x1a, 0x00, 0x42, 0x22, 0x00, 0x35, 0x1a, 0x40, + 0xe1, 0x3b, 0x1a, 0x00, 0x42, 0x22, 0x00, 0x3d, 0x1a, 0x40, 0xe1, 0x23, + 0x1a, 0x00, 0x42, 0x22, 0x00, 0x25, 0x1a, 0x00, 0x42, 0xed, 0x26, 0x24, + 0x1a, 0x40, 0xe1, 0x29, 0x1a, 0x00, 0x42, 0x22, 0x00, 0x2b, 0x1a, 0x40, + 0xe5, 0x53, 0x1a, 0x40, 0xe9, 0x4e, 0x1a, 0x40, 0xa3, 0x54, 0x42, 0x0c, + 0x08, 0x3a, 0x1a, 0x00, 0x42, 0x22, 0x00, 0x49, 0x1a, 0x00, 0xab, 0x36, + 0xb0, 0x2a, 0x45, 0xd5, 0x42, 0x2e, 0x1a, 0x00, 0xb3, 0x12, 0xb4, 0x06, + 0x42, 0xbc, 0x22, 0x40, 0x1a, 0x40, 0xe1, 0x32, 0x1a, 0x00, 0x42, 0x22, + 0x00, 0x33, 0x1a, 0x40, 0xe1, 0x48, 0x1a, 0x00, 0x42, 0x22, 0x00, 0x46, + 0x1a, 0x00, 0x42, 0x40, 0x06, 0x47, 0x1a, 0x40, 0xe1, 0x38, 0x1a, 0x00, + 0x42, 0x22, 0x00, 0x39, 0x1a, 0x40, 0xe1, 0x20, 0x1a, 0x00, 0x42, 0x22, + 0x00, 0x21, 0x1a, 0x00, 0x42, 0xed, 0x26, 0x22, 0x1a, 0x40, 0xe1, 0x27, + 0x1a, 0x00, 0x42, 0x22, 0x00, 0x28, 0x1a, 0x40, 0x45, 0x12, 0x0b, 0x88, + 0x1a, 0x00, 0xa6, 0x2e, 0x44, 0xcf, 0x2a, 0x89, 0x1a, 0x00, 0x43, 0x0e, + 0x0b, 0x81, 0x1a, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, 0x80, + 0x1a, 0x40, 0x44, 0x25, 0x01, 0x83, 0x1a, 0x00, 0x42, 0x15, 0x02, 0x82, + 0x1a, 0x40, 0x44, 0xc9, 0x1d, 0x87, 0x1a, 0x00, 0x42, 0x01, 0x26, 0x86, + 0x1a, 0x40, 0x43, 0xd2, 0x05, 0x85, 0x1a, 0x00, 0x43, 0xf6, 0x06, 0x84, + 0x1a, 0x40, 0x59, 0xca, 0x24, 0x7f, 0x1a, 0x00, 0x0d, 0x3f, 0x33, 0x01, + 0xff, 0x42, 0x16, 0x00, 0x5d, 0x1a, 0x00, 0x49, 0xe8, 0xb8, 0x59, 0x1a, + 0x00, 0x54, 0xd0, 0x42, 0x5b, 0x1a, 0x00, 0xac, 0x1d, 0xad, 0x06, 0x42, + 0x40, 0x06, 0x5e, 0x1a, 0x40, 0xe1, 0x5c, 0x1a, 0x00, 0x06, 0x4d, 0x33, + 0x01, 0xff, 0x42, 0x74, 0x00, 0x56, 0x1a, 0x00, 0x42, 0x71, 0x00, 0x55, + 0x1a, 0x40, 0x4a, 0x3b, 0xa7, 0x57, 0x1a, 0x00, 0x45, 0x90, 0x35, 0x5a, + 0x1a, 0x40, 0xe1, 0x63, 0x19, 0x80, 0xb0, 0x01, 0xe5, 0x6b, 0x19, 0x80, + 0xa2, 0x01, 0x42, 0x0c, 0x08, 0x5c, 0x19, 0x00, 0x42, 0x22, 0x00, 0x5e, + 0x19, 0x00, 0xe9, 0x64, 0x19, 0x00, 0xab, 0x85, 0x01, 0x42, 0x74, 0x00, + 0x58, 0x19, 0x00, 0x42, 0x6c, 0x00, 0x5b, 0x19, 0x00, 0xae, 0x6d, 0xef, + 0x69, 0x19, 0x80, 0x64, 0xb0, 0x58, 0x42, 0x43, 0x14, 0x5f, 0x19, 0x00, + 0x42, 0x40, 0x06, 0x54, 0x19, 0x00, 0xb4, 0x1b, 0xf5, 0x67, 0x19, 0x80, + 0x12, 0x42, 0xf5, 0x0a, 0x5d, 0x19, 0x00, 0x42, 0xed, 0x26, 0x51, 0x19, + 0x00, 0x42, 0xbc, 0x22, 0x55, 0x19, 0x40, 0xe5, 0x6a, 0x19, 0x40, 0xe1, + 0x56, 0x19, 0x00, 0x42, 0x22, 0x00, 0x57, 0x19, 0x00, 0x04, 0x00, 0x20, + 0x0d, 0xb3, 0x01, 0xff, 0xe1, 0x53, 0x19, 0x00, 0x42, 0x22, 0x00, 0x61, + 0x19, 0x40, 0xd2, 0x70, 0x19, 0x00, 0xd3, 0x71, 0x19, 0x00, 0xd4, 0x72, + 0x19, 0x00, 0xd5, 0x73, 0x19, 0x00, 0xd6, 0x74, 0x19, 0x40, 0xe1, 0x59, + 0x19, 0x00, 0x42, 0x22, 0x00, 0x5a, 0x19, 0x40, 0xef, 0x68, 0x19, 0x40, + 0xe1, 0x62, 0x19, 0x00, 0x42, 0x24, 0x02, 0x52, 0x19, 0x40, 0xe1, 0x50, + 0x19, 0x00, 0x42, 0x22, 0x00, 0x60, 0x19, 0x40, 0xe5, 0x65, 0x19, 0x00, + 0xe8, 0x66, 0x19, 0x40, 0xe9, 0x6d, 0x19, 0x00, 0x42, 0xd6, 0x13, 0x6c, + 0x19, 0x40, 0x80, 0x82, 0x02, 0x05, 0x39, 0xe4, 0x70, 0x06, 0x10, 0xda, + 0x01, 0xff, 0x07, 0xec, 0x05, 0x0d, 0x0b, 0x40, 0x77, 0x01, 0xff, 0xe9, + 0x72, 0x17, 0x00, 0xf5, 0x73, 0x17, 0x40, 0xe1, 0x60, 0x17, 0x00, 0x42, + 0x16, 0x00, 0x6a, 0x17, 0x00, 0x42, 0xf0, 0x10, 0x67, 0x17, 0x00, 0x42, + 0x24, 0x02, 0x64, 0x17, 0x00, 0xe9, 0x61, 0x17, 0x00, 0x42, 0x1b, 0x02, + 0x63, 0x17, 0x00, 0x42, 0x74, 0x00, 0x6e, 0x17, 0x00, 0x42, 0x6c, 0x00, + 0x6b, 0x17, 0x00, 0xae, 0x22, 0x42, 0xbb, 0x09, 0x69, 0x17, 0x00, 0x42, + 0x40, 0x06, 0x70, 0x17, 0x00, 0x42, 0x12, 0x00, 0x66, 0x17, 0x00, 0xf5, + 0x62, 0x17, 0x00, 0x42, 0xa9, 0x01, 0x6f, 0x17, 0x00, 0x42, 0xbc, 0x22, + 0x6c, 0x17, 0x40, 0xe1, 0x68, 0x17, 0x00, 0x42, 0x24, 0x02, 0x65, 0x17, + 0x40, 0x07, 0xec, 0x05, 0x1d, 0x05, 0x5a, 0x03, 0x0d, 0x0b, 0x40, 0x77, + 0x01, 0xff, 0xe9, 0x12, 0x17, 0x00, 0xf5, 0x13, 0x17, 0x40, 0x48, 0xbb, + 0x88, 0x15, 0x17, 0x00, 0x46, 0xe3, 0x23, 0x14, 0x17, 0x40, 0xe1, 0x00, + 0x17, 0x80, 0x62, 0x42, 0x16, 0x00, 0x0a, 0x17, 0x00, 0x42, 0xf0, 0x10, + 0x07, 0x17, 0x00, 0x42, 0x24, 0x02, 0x04, 0x17, 0x00, 0x42, 0x22, 0x00, + 0x11, 0x17, 0x00, 0xe9, 0x01, 0x17, 0x00, 0x42, 0x1b, 0x02, 0x03, 0x17, + 0x00, 0x42, 0x74, 0x00, 0x0e, 0x17, 0x00, 0x42, 0x6c, 0x00, 0x0b, 0x17, + 0x00, 0xae, 0x28, 0x42, 0xbb, 0x09, 0x09, 0x17, 0x00, 0x42, 0x71, 0x00, + 0x0d, 0x17, 0x00, 0x42, 0x40, 0x06, 0x10, 0x17, 0x00, 0x42, 0x12, 0x00, + 0x06, 0x17, 0x00, 0xf5, 0x02, 0x17, 0x00, 0x42, 0xa9, 0x01, 0x0f, 0x17, + 0x00, 0x42, 0xbc, 0x22, 0x0c, 0x17, 0x40, 0xe1, 0x08, 0x17, 0x00, 0x42, + 0x24, 0x02, 0x05, 0x17, 0x40, 0x49, 0x76, 0xbe, 0x1f, 0x17, 0x40, 0xa1, + 0x82, 0x04, 0xa3, 0xe1, 0x03, 0xa4, 0x92, 0x03, 0xa5, 0x83, 0x03, 0x49, + 0x81, 0x16, 0x2e, 0x00, 0x0e, 0x02, 0x87, 0x00, 0xec, 0x02, 0x4c, 0xc7, + 0x8f, 0x2d, 0x00, 0x0e, 0xac, 0x63, 0x4b, 0x43, 0xa0, 0x23, 0x00, 0x0e, + 0xb0, 0x4f, 0x02, 0x7c, 0x00, 0x3f, 0xb2, 0x20, 0xb3, 0x0c, 0x45, 0x35, + 0x23, 0x7e, 0x00, 0x0e, 0x4d, 0xcd, 0x0b, 0x7c, 0x00, 0x4e, 0x48, 0xda, + 0x59, 0x3b, 0x00, 0x0e, 0x46, 0x50, 0x31, 0x2f, 0x00, 0x0e, 0x44, 0xd1, + 0x4c, 0x20, 0x00, 0x4e, 0x4e, 0x67, 0x72, 0x5c, 0x00, 0x0e, 0x05, 0xc9, + 0x00, 0x01, 0xff, 0x4d, 0x72, 0x0b, 0x7d, 0x00, 0x0e, 0x4b, 0xd8, 0x21, + 0x29, 0x00, 0x0e, 0x4e, 0xc8, 0x26, 0x5d, 0x00, 0x4e, 0x4b, 0xa8, 0x34, + 0x3f, 0x00, 0x0e, 0x4c, 0x1b, 0x05, 0x22, 0x00, 0x4e, 0x4b, 0xe1, 0x9b, + 0x25, 0x00, 0x0e, 0x48, 0xe0, 0x71, 0x2b, 0x00, 0x4e, 0x05, 0xdf, 0x05, + 0x24, 0xa5, 0x06, 0x47, 0x76, 0x8a, 0x5f, 0x00, 0x4e, 0x03, 0xc5, 0x00, + 0x06, 0x4c, 0x67, 0x95, 0x3c, 0x00, 0x4e, 0x4d, 0x72, 0x0b, 0x7b, 0x00, + 0x0e, 0x4b, 0xd8, 0x21, 0x28, 0x00, 0x0e, 0x4e, 0xc8, 0x26, 0x5b, 0x00, + 0x4e, 0x0f, 0xe4, 0x05, 0x6d, 0x0d, 0x76, 0x08, 0x01, 0xff, 0xe1, 0x61, + 0x00, 0x0e, 0xe2, 0x62, 0x00, 0x0e, 0xe3, 0x63, 0x00, 0x0e, 0xe4, 0x64, + 0x00, 0x0e, 0xe5, 0x65, 0x00, 0x0e, 0xe6, 0x66, 0x00, 0x0e, 0xe7, 0x67, + 0x00, 0x0e, 0xe8, 0x68, 0x00, 0x0e, 0xe9, 0x69, 0x00, 0x0e, 0xea, 0x6a, + 0x00, 0x0e, 0xeb, 0x6b, 0x00, 0x0e, 0xec, 0x6c, 0x00, 0x0e, 0xed, 0x6d, + 0x00, 0x0e, 0xee, 0x6e, 0x00, 0x0e, 0xef, 0x6f, 0x00, 0x0e, 0xf0, 0x70, + 0x00, 0x0e, 0xf1, 0x71, 0x00, 0x0e, 0xf2, 0x72, 0x00, 0x0e, 0xf3, 0x73, + 0x00, 0x0e, 0xf4, 0x74, 0x00, 0x0e, 0xf5, 0x75, 0x00, 0x0e, 0xf6, 0x76, + 0x00, 0x0e, 0xf7, 0x77, 0x00, 0x0e, 0xf8, 0x78, 0x00, 0x0e, 0xf9, 0x79, + 0x00, 0x0e, 0xfa, 0x7a, 0x00, 0x4e, 0xe1, 0x41, 0x00, 0x0e, 0xe2, 0x42, + 0x00, 0x0e, 0xe3, 0x43, 0x00, 0x0e, 0xe4, 0x44, 0x00, 0x0e, 0xe5, 0x45, + 0x00, 0x0e, 0xe6, 0x46, 0x00, 0x0e, 0xe7, 0x47, 0x00, 0x0e, 0xe8, 0x48, + 0x00, 0x0e, 0xe9, 0x49, 0x00, 0x0e, 0xea, 0x4a, 0x00, 0x0e, 0xeb, 0x4b, + 0x00, 0x0e, 0xec, 0x4c, 0x00, 0x0e, 0xed, 0x4d, 0x00, 0x0e, 0xee, 0x4e, + 0x00, 0x0e, 0xef, 0x4f, 0x00, 0x0e, 0xf0, 0x50, 0x00, 0x0e, 0xf1, 0x51, + 0x00, 0x0e, 0xf2, 0x52, 0x00, 0x0e, 0xf3, 0x53, 0x00, 0x0e, 0xf4, 0x54, + 0x00, 0x0e, 0xf5, 0x55, 0x00, 0x0e, 0xf6, 0x56, 0x00, 0x0e, 0xf7, 0x57, + 0x00, 0x0e, 0xf8, 0x58, 0x00, 0x0e, 0xf9, 0x59, 0x00, 0x0e, 0xfa, 0x5a, + 0x00, 0x4e, 0x4a, 0x17, 0x23, 0x60, 0x00, 0x0e, 0x4f, 0x64, 0x5a, 0x3e, + 0x00, 0x4e, 0x4a, 0x49, 0x13, 0x3d, 0x00, 0x0e, 0x4f, 0xae, 0x00, 0x21, + 0x00, 0x4e, 0x05, 0xf0, 0x06, 0x06, 0x4a, 0x11, 0x9b, 0x24, 0x00, 0x4e, + 0x45, 0x12, 0x0b, 0x38, 0x00, 0x0e, 0xa6, 0x2e, 0x44, 0xcf, 0x2a, 0x39, + 0x00, 0x0e, 0x43, 0x0e, 0x0b, 0x31, 0x00, 0x0e, 0xb3, 0x14, 0xb4, 0x06, + 0x44, 0x43, 0x1e, 0x30, 0x00, 0x4e, 0x44, 0x25, 0x01, 0x33, 0x00, 0x0e, + 0x42, 0x15, 0x02, 0x32, 0x00, 0x4e, 0x44, 0xc9, 0x1d, 0x37, 0x00, 0x0e, + 0x42, 0x01, 0x26, 0x36, 0x00, 0x4e, 0x43, 0xd2, 0x05, 0x35, 0x00, 0x0e, + 0x43, 0xf6, 0x06, 0x34, 0x00, 0x4e, 0x50, 0xd0, 0x04, 0x5e, 0x00, 0x0e, + 0xaf, 0x01, 0xff, 0x43, 0xd7, 0x02, 0x3a, 0x00, 0x0e, 0x02, 0x15, 0x05, + 0x01, 0xff, 0xe1, 0x2c, 0x00, 0x0e, 0x49, 0x85, 0xb8, 0x40, 0x00, 0x4e, + 0x48, 0x13, 0x3e, 0x26, 0x00, 0x0e, 0x49, 0x62, 0x36, 0x27, 0x00, 0x0e, + 0x47, 0x3d, 0x0d, 0x2a, 0x00, 0x4e, 0x43, 0x9e, 0x77, 0x96, 0xf9, 0x01, + 0x45, 0x66, 0x4a, 0x55, 0xf4, 0x41, 0x4c, 0x23, 0x8b, 0xcc, 0x29, 0x00, + 0xa1, 0x99, 0x85, 0x01, 0xa3, 0xfc, 0x83, 0x01, 0xa5, 0xa6, 0x7f, 0xa8, + 0xbc, 0x75, 0xa9, 0xfa, 0x3d, 0xab, 0xcd, 0x3d, 0xac, 0xa3, 0x3c, 0xad, + 0xed, 0x37, 0xae, 0xab, 0x37, 0xaf, 0xcf, 0x2c, 0xb0, 0xd7, 0x2a, 0x02, + 0x7c, 0x00, 0xc5, 0x18, 0xb4, 0xf4, 0x15, 0xb5, 0xa8, 0x0a, 0xb7, 0x8d, + 0x0a, 0xb9, 0x01, 0xff, 0x0b, 0xee, 0x9e, 0xfa, 0x07, 0xad, 0xb2, 0x05, + 0xae, 0xa3, 0x05, 0x02, 0x0d, 0x00, 0x01, 0xff, 0x03, 0x4e, 0x73, 0x06, + 0x43, 0xda, 0x09, 0x89, 0xf4, 0x41, 0x51, 0x0b, 0x50, 0x0f, 0x07, 0x00, + 0x47, 0x64, 0xcf, 0x4a, 0x07, 0x00, 0x02, 0x13, 0x05, 0xed, 0x04, 0x0d, + 0x02, 0x82, 0xdc, 0x04, 0xa5, 0xc2, 0x04, 0x4c, 0xd7, 0x8e, 0x40, 0x07, + 0x00, 0xa8, 0x85, 0x04, 0x07, 0xec, 0x05, 0xca, 0x01, 0x45, 0x01, 0x28, + 0x49, 0x07, 0x00, 0x0d, 0xae, 0x86, 0xb3, 0x01, 0x07, 0xea, 0xd4, 0x9c, + 0x01, 0x49, 0x5b, 0xbe, 0x41, 0x07, 0x00, 0xb2, 0x78, 0x02, 0x6f, 0x00, + 0x3a, 0xb4, 0x17, 0x07, 0xf3, 0xd7, 0x01, 0xff, 0x45, 0x5c, 0x00, 0x33, + 0x07, 0x00, 0x45, 0x20, 0x07, 0x34, 0x07, 0x00, 0x46, 0xb0, 0x1f, 0x35, + 0x07, 0x40, 0x0a, 0xae, 0x12, 0x11, 0x11, 0xb2, 0x5f, 0x01, 0xff, 0x45, + 0x5c, 0x00, 0x43, 0x07, 0x00, 0x45, 0x20, 0x07, 0x44, 0x07, 0x40, 0x45, + 0x5c, 0x00, 0x45, 0x07, 0x00, 0x45, 0x20, 0x07, 0x46, 0x07, 0x40, 0x08, + 0x38, 0xc4, 0x18, 0x0a, 0xc9, 0xaf, 0x01, 0xff, 0x45, 0x94, 0x3b, 0x03, + 0x07, 0x80, 0x06, 0x49, 0x81, 0x16, 0x01, 0x07, 0x40, 0x4c, 0x83, 0x8b, + 0x08, 0x07, 0x40, 0x45, 0x94, 0x3b, 0x04, 0x07, 0x80, 0x06, 0x49, 0x81, + 0x16, 0x02, 0x07, 0x40, 0x08, 0x83, 0x8b, 0x01, 0xff, 0x44, 0xc3, 0x00, + 0x09, 0x07, 0x00, 0x45, 0xc8, 0x00, 0x09, 0x07, 0x40, 0x05, 0xa7, 0xe4, + 0x0c, 0x47, 0xb1, 0xd6, 0x42, 0x07, 0x00, 0x44, 0x1d, 0xf3, 0x3f, 0x07, + 0x40, 0x45, 0x5c, 0x00, 0x36, 0x07, 0x00, 0x45, 0x20, 0x07, 0x37, 0x07, + 0x40, 0x45, 0x5c, 0x00, 0x30, 0x07, 0x00, 0x45, 0x20, 0x07, 0x31, 0x07, + 0x00, 0x46, 0xb0, 0x1f, 0x32, 0x07, 0x40, 0x45, 0x5c, 0x00, 0x47, 0x07, + 0x00, 0x45, 0x20, 0x07, 0x48, 0x07, 0x40, 0x45, 0x41, 0x68, 0x10, 0x07, + 0x00, 0x44, 0x41, 0xef, 0x12, 0x07, 0x00, 0xa4, 0x9b, 0x02, 0xe5, 0x25, + 0x07, 0x00, 0x4d, 0xec, 0x82, 0x24, 0x07, 0x00, 0x45, 0x8c, 0xe6, 0x13, + 0x07, 0x80, 0x83, 0x02, 0x42, 0xb0, 0x01, 0x17, 0x07, 0x80, 0xf5, 0x01, + 0x44, 0xcd, 0xf0, 0x1f, 0x07, 0x00, 0x46, 0x8e, 0xdd, 0x20, 0x07, 0x00, + 0xad, 0x96, 0x01, 0x43, 0xdc, 0x22, 0x22, 0x07, 0x00, 0x42, 0x6f, 0x02, + 0x26, 0x07, 0x80, 0x72, 0x44, 0xf4, 0xd7, 0x29, 0x07, 0x00, 0xb2, 0x5e, + 0xb3, 0x2e, 0xb4, 0x19, 0x43, 0x8a, 0x8a, 0x18, 0x07, 0x00, 0x44, 0x45, + 0xf3, 0x1d, 0x07, 0x80, 0x06, 0x44, 0x27, 0x75, 0x19, 0x07, 0x40, 0x43, + 0x29, 0x15, 0x1e, 0x07, 0x40, 0x42, 0xb7, 0x2d, 0x2c, 0x07, 0x00, 0x43, + 0xda, 0x25, 0x1b, 0x07, 0xc0, 0x00, 0x49, 0x5f, 0xb4, 0x1c, 0x07, 0x40, + 0x44, 0xac, 0xea, 0x28, 0x07, 0x00, 0x46, 0xf3, 0x82, 0x23, 0x07, 0x00, + 0x43, 0x7a, 0x16, 0x2b, 0x07, 0x00, 0x07, 0xc4, 0xd3, 0x06, 0x50, 0x36, + 0x68, 0x11, 0x07, 0x40, 0x42, 0x0c, 0x1a, 0x4f, 0x07, 0x00, 0x45, 0xd6, + 0xe7, 0x4e, 0x07, 0x00, 0x45, 0xa4, 0xec, 0x4d, 0x07, 0x40, 0x4a, 0x33, + 0xaa, 0x27, 0x07, 0x00, 0x43, 0xd1, 0x0c, 0x2a, 0x07, 0x40, 0x06, 0xb6, + 0xdf, 0x01, 0xff, 0x45, 0xc5, 0xe4, 0x2d, 0x07, 0x00, 0x47, 0x52, 0xd0, + 0x2f, 0x07, 0x00, 0x46, 0xfc, 0xdb, 0x2e, 0x07, 0x40, 0x09, 0xeb, 0xb5, + 0x06, 0x42, 0x29, 0x02, 0x21, 0x07, 0x40, 0x43, 0xd9, 0x2a, 0x66, 0x08, + 0x00, 0x42, 0x56, 0x19, 0x61, 0x08, 0x00, 0x02, 0x60, 0x07, 0x2c, 0xae, + 0x12, 0x42, 0x71, 0x00, 0x67, 0x08, 0x00, 0x43, 0xfb, 0x20, 0x6a, 0x08, + 0x00, 0x43, 0xd1, 0x28, 0x63, 0x08, 0x40, 0x42, 0x24, 0x02, 0x60, 0x08, + 0x00, 0xae, 0x06, 0x42, 0xbc, 0x22, 0x62, 0x08, 0x40, 0xe1, 0x64, 0x08, + 0x00, 0x42, 0x2a, 0x05, 0x65, 0x08, 0x40, 0xe1, 0x68, 0x08, 0x00, 0x42, + 0x74, 0x00, 0x69, 0x08, 0x40, 0x42, 0x53, 0x00, 0x1a, 0x07, 0x40, 0x49, + 0x5f, 0xb4, 0x14, 0x07, 0x40, 0x45, 0x39, 0x54, 0x15, 0x07, 0x00, 0x52, + 0x31, 0x54, 0x16, 0x07, 0x40, 0x08, 0x80, 0xc3, 0x1e, 0x04, 0x18, 0x81, + 0x06, 0x4f, 0x67, 0x71, 0x05, 0x07, 0x40, 0x80, 0x06, 0x4d, 0x07, 0x80, + 0x3c, 0x07, 0x40, 0x45, 0x5c, 0x00, 0x3a, 0x07, 0x00, 0x45, 0x20, 0x07, + 0x3b, 0x07, 0x40, 0x4a, 0xef, 0xa7, 0x0d, 0x07, 0x00, 0x49, 0x00, 0xbc, + 0x0c, 0x07, 0x00, 0x46, 0x03, 0xbc, 0x0b, 0x07, 0x40, 0x4f, 0x95, 0x70, + 0x00, 0x07, 0x00, 0x05, 0x09, 0x80, 0x01, 0xff, 0x45, 0x5c, 0x00, 0x3d, + 0x07, 0x00, 0x45, 0x20, 0x07, 0x3e, 0x07, 0x40, 0x47, 0x1c, 0x01, 0x39, + 0x07, 0x00, 0x4a, 0x0b, 0x00, 0x38, 0x07, 0x40, 0x0b, 0xcd, 0x9e, 0x06, + 0x49, 0xb4, 0xbc, 0x0a, 0x07, 0x40, 0x44, 0xc3, 0x00, 0x06, 0x07, 0x00, + 0x45, 0xc8, 0x00, 0x07, 0x07, 0x40, 0x46, 0x8c, 0xd9, 0x4d, 0xf5, 0x01, + 0x4d, 0x0b, 0x75, 0x16, 0x00, 0x40, 0x08, 0x4f, 0x32, 0x06, 0x45, 0x9e, + 0xe8, 0x2f, 0x23, 0x40, 0x4b, 0xe6, 0x51, 0x06, 0x24, 0x00, 0xa2, 0xa6, + 0x02, 0x02, 0x37, 0x00, 0x95, 0x02, 0xa4, 0xc7, 0x01, 0xa5, 0x96, 0x01, + 0xa6, 0x87, 0x01, 0x4f, 0xb6, 0x6d, 0x1d, 0x24, 0x00, 0x55, 0xd8, 0x3b, + 0x09, 0x24, 0x00, 0x49, 0xce, 0x20, 0x0a, 0x24, 0x00, 0x4d, 0x9d, 0x85, + 0x45, 0xf5, 0x01, 0xae, 0x59, 0x50, 0x56, 0x66, 0x1e, 0x24, 0x00, 0xb3, + 0x12, 0x52, 0xf3, 0x55, 0x97, 0x2b, 0x00, 0x4e, 0x05, 0x7e, 0x1f, 0x24, + 0x00, 0x53, 0xd6, 0x4e, 0x0b, 0x24, 0x40, 0x4f, 0xb9, 0x6a, 0x4f, 0x21, + 0x00, 0x05, 0xdc, 0xab, 0x29, 0x44, 0xd1, 0x4c, 0x20, 0x24, 0x00, 0x08, + 0x6d, 0x4d, 0x13, 0x49, 0x2f, 0xc0, 0x1a, 0x24, 0x80, 0x06, 0x4f, 0x09, + 0x75, 0x16, 0x24, 0x40, 0x49, 0x21, 0x2e, 0x26, 0x24, 0x40, 0x47, 0x86, + 0xd1, 0x01, 0x24, 0x00, 0x44, 0x7c, 0x30, 0x02, 0x24, 0x40, 0x42, 0x9e, + 0x01, 0x0f, 0x24, 0x00, 0x43, 0x28, 0x08, 0x0e, 0x24, 0x40, 0xa5, 0x06, + 0x43, 0x82, 0x16, 0x00, 0x24, 0x40, 0x52, 0xdf, 0x51, 0x15, 0x24, 0x00, + 0x45, 0xcd, 0x20, 0x24, 0x24, 0x40, 0x4d, 0x24, 0x84, 0x1c, 0x24, 0x00, + 0x48, 0x68, 0xc9, 0x0c, 0x24, 0x40, 0xae, 0x06, 0x45, 0xf0, 0x6a, 0x1b, + 0x24, 0x40, 0x05, 0x42, 0x05, 0x06, 0x45, 0x1f, 0xea, 0x05, 0x24, 0x40, + 0x46, 0x44, 0x04, 0x19, 0x24, 0x00, 0xb4, 0x01, 0xff, 0x43, 0xd9, 0x06, + 0x03, 0x24, 0x00, 0x4b, 0xc4, 0xa1, 0x04, 0x24, 0xc0, 0x00, 0x46, 0x32, + 0x01, 0x17, 0x24, 0x40, 0x4f, 0xe6, 0x6a, 0x10, 0x24, 0x00, 0xa5, 0x01, + 0xff, 0x44, 0x2e, 0x7b, 0x21, 0x24, 0x80, 0x20, 0x0d, 0x49, 0x8a, 0x01, + 0xff, 0x44, 0xf5, 0x06, 0x14, 0x24, 0x00, 0x43, 0x0e, 0x0b, 0x11, 0x24, + 0x00, 0xb4, 0x01, 0xff, 0x44, 0x25, 0x01, 0x13, 0x24, 0x00, 0x42, 0x15, + 0x02, 0x12, 0x24, 0x40, 0x80, 0x01, 0xff, 0x48, 0x22, 0x2e, 0x25, 0x24, + 0x00, 0x51, 0x2d, 0x5c, 0x29, 0x24, 0x00, 0x5e, 0x61, 0x14, 0x28, 0x24, + 0x00, 0x59, 0x41, 0x26, 0x27, 0x24, 0x40, 0x44, 0x05, 0x2c, 0x18, 0x24, + 0x00, 0x4d, 0x27, 0x88, 0x0d, 0x24, 0x40, 0x48, 0x28, 0xc3, 0x08, 0x24, + 0x00, 0x43, 0x5f, 0x09, 0x07, 0x24, 0x40, 0x07, 0xec, 0x05, 0x4d, 0x0c, + 0xab, 0x93, 0x39, 0x05, 0x5a, 0x03, 0x1b, 0x0b, 0x40, 0x77, 0x01, 0xff, + 0xe1, 0x23, 0xa8, 0x00, 0xe5, 0x26, 0xa8, 0x00, 0xe9, 0x24, 0xa8, 0x00, + 0x42, 0xcd, 0x02, 0x27, 0xa8, 0x00, 0xf5, 0x25, 0xa8, 0x40, 0xa1, 0x0c, + 0x48, 0x50, 0xc5, 0x02, 0xa8, 0x00, 0x47, 0xef, 0x64, 0x06, 0xa8, 0x40, + 0x50, 0xe6, 0x64, 0x2c, 0xa8, 0x00, 0x47, 0x3d, 0x16, 0x0b, 0xa8, 0x40, + 0xd1, 0x28, 0xa8, 0x00, 0xd2, 0x29, 0xa8, 0x00, 0xd3, 0x2a, 0xa8, 0x00, + 0xd4, 0x2b, 0xa8, 0x40, 0xe1, 0x00, 0xa8, 0x00, 0xa2, 0xa9, 0x01, 0xa3, + 0x9c, 0x01, 0xa4, 0x83, 0x01, 0xe5, 0x04, 0xa8, 0x00, 0xa7, 0x73, 0x42, + 0x0b, 0x00, 0x22, 0xa8, 0x00, 0xe9, 0x01, 0xa8, 0x00, 0xaa, 0x5d, 0xab, + 0x51, 0x42, 0x13, 0x01, 0x1f, 0xa8, 0x00, 0x42, 0xc3, 0x07, 0x1d, 0xa8, + 0x00, 0x42, 0xb4, 0x01, 0x18, 0xa8, 0x00, 0xef, 0x05, 0xa8, 0x00, 0xb0, + 0x2f, 0xb2, 0x23, 0x42, 0x60, 0x03, 0x21, 0xa8, 0x00, 0xb4, 0x04, 0xf5, + 0x03, 0xa8, 0x40, 0x42, 0x0b, 0x00, 0x15, 0xa8, 0x00, 0xef, 0x14, 0xa8, + 0x00, 0xb4, 0x01, 0xff, 0x42, 0x0b, 0x00, 0x11, 0xa8, 0x00, 0xef, 0x10, + 0xa8, 0x40, 0xef, 0x1e, 0xa8, 0x00, 0x42, 0xd0, 0x00, 0x20, 0xa8, 0x40, + 0x42, 0x0b, 0x00, 0x1a, 0xa8, 0x00, 0xef, 0x19, 0xa8, 0x40, 0x42, 0x0b, + 0x00, 0x08, 0xa8, 0x00, 0xef, 0x07, 0xa8, 0x40, 0x42, 0x0b, 0x00, 0x0f, + 0xa8, 0x00, 0xef, 0x0e, 0xa8, 0x40, 0x42, 0x0b, 0x00, 0x0a, 0xa8, 0x00, + 0xef, 0x09, 0xa8, 0x40, 0xa4, 0x0a, 0x42, 0x0b, 0x00, 0x17, 0xa8, 0x00, + 0xef, 0x16, 0xa8, 0x40, 0x42, 0x0b, 0x00, 0x13, 0xa8, 0x00, 0xef, 0x12, + 0xa8, 0x40, 0x42, 0x0b, 0x00, 0x0d, 0xa8, 0x00, 0xef, 0x0c, 0xa8, 0x40, + 0x42, 0x0b, 0x00, 0x1c, 0xa8, 0x00, 0xef, 0x1b, 0xa8, 0x40, 0xa1, 0x0c, + 0x45, 0x72, 0xe7, 0xca, 0xf3, 0x01, 0x48, 0x20, 0xcc, 0x53, 0x20, 0x40, + 0xee, 0xa2, 0xf9, 0x01, 0x55, 0x0f, 0x3e, 0x75, 0xf6, 0x41, 0x02, 0x9b, + 0x12, 0xe9, 0x09, 0x46, 0x32, 0xcb, 0x7b, 0x22, 0x80, 0x91, 0x09, 0x08, + 0x58, 0xc8, 0xfa, 0x08, 0xee, 0x09, 0x26, 0x80, 0xac, 0x02, 0x03, 0x6f, + 0x02, 0x1f, 0x02, 0xf5, 0x1b, 0x0f, 0xb3, 0x01, 0xff, 0x42, 0x49, 0x00, + 0x63, 0xf3, 0x01, 0x4f, 0xc1, 0x71, 0x9f, 0xf6, 0x41, 0x4c, 0xef, 0x8b, + 0x2f, 0x22, 0x00, 0x42, 0x33, 0x00, 0xc4, 0xf3, 0x41, 0x44, 0x29, 0xf0, + 0xb8, 0xf9, 0x01, 0xb3, 0x06, 0x47, 0x52, 0xd7, 0xb9, 0xf9, 0x41, 0x06, + 0x75, 0x06, 0x86, 0x01, 0x03, 0x68, 0x09, 0x01, 0xff, 0x06, 0x5c, 0x00, + 0x66, 0x07, 0x92, 0x0a, 0x56, 0x42, 0xf4, 0x01, 0x83, 0x22, 0x80, 0x1d, + 0x51, 0x3d, 0x5d, 0xc9, 0x27, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x43, + 0x23, 0x0a, 0xbe, 0x2a, 0x00, 0x59, 0xfc, 0x24, 0xc2, 0x2a, 0x00, 0x4f, + 0xdf, 0x71, 0xc0, 0x2a, 0x40, 0x80, 0x01, 0xff, 0x06, 0x5c, 0x00, 0x13, + 0x4b, 0xf3, 0x28, 0x87, 0x22, 0x80, 0x06, 0x51, 0xa1, 0x5f, 0x8b, 0x22, + 0x40, 0x4f, 0x75, 0x3b, 0xc4, 0x2a, 0x40, 0x4f, 0xaa, 0x6a, 0xca, 0x2a, + 0x00, 0x4b, 0x48, 0x13, 0xc6, 0x2a, 0x00, 0x4c, 0x02, 0x2b, 0xcc, 0x2a, + 0x00, 0x4e, 0x78, 0x3e, 0xc8, 0x2a, 0x40, 0x5e, 0x81, 0x12, 0xd8, 0x2a, + 0x00, 0x46, 0x99, 0x12, 0xd7, 0x2a, 0x40, 0x4f, 0x4d, 0x1a, 0x7b, 0x29, + 0x00, 0x02, 0x6f, 0x00, 0x01, 0xff, 0x44, 0x9b, 0x12, 0xd4, 0x2a, 0x00, + 0x46, 0x29, 0x36, 0xd6, 0x2a, 0x40, 0xa5, 0x62, 0xa6, 0x54, 0xac, 0x40, + 0x45, 0x91, 0x1f, 0x7b, 0x20, 0x00, 0x44, 0xcf, 0x2a, 0x79, 0x20, 0x00, + 0x43, 0x0e, 0x0b, 0xb9, 0x00, 0x00, 0x49, 0xdf, 0x71, 0x7a, 0x20, 0x00, + 0x51, 0xd2, 0x21, 0x7e, 0x20, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0x43, + 0x1e, 0x70, 0x20, 0x40, 0x44, 0x25, 0x01, 0xb3, 0x00, 0x00, 0x42, 0x15, + 0x02, 0xb2, 0x00, 0x40, 0x44, 0xc9, 0x1d, 0x77, 0x20, 0x00, 0x42, 0x01, + 0x26, 0x76, 0x20, 0x40, 0x12, 0x77, 0x50, 0x06, 0x4f, 0x80, 0x24, 0x7d, + 0x20, 0x40, 0xe9, 0x71, 0x20, 0x00, 0xee, 0x7f, 0x20, 0x40, 0x43, 0xd2, + 0x05, 0x75, 0x20, 0x00, 0x43, 0xf6, 0x06, 0x74, 0x20, 0x40, 0x44, 0xc9, + 0x00, 0x78, 0x20, 0x00, 0x4a, 0x49, 0x13, 0x7c, 0x20, 0x40, 0x80, 0xb9, + 0x06, 0x07, 0x3d, 0xd0, 0xcc, 0x02, 0x46, 0x78, 0x97, 0x3b, 0xf3, 0x01, + 0x44, 0xa7, 0xbc, 0x05, 0xf3, 0x81, 0xb8, 0x02, 0x52, 0x2d, 0x55, 0x07, + 0xf3, 0x01, 0x05, 0x09, 0xec, 0x01, 0xff, 0x06, 0xef, 0x06, 0xe6, 0x01, + 0x07, 0xec, 0x05, 0x06, 0x48, 0xf8, 0xca, 0xe1, 0x1b, 0x41, 0xa1, 0xc7, + 0x01, 0x43, 0x07, 0x36, 0xce, 0x1b, 0x01, 0xa3, 0xb2, 0x01, 0xa4, 0xa3, + 0x01, 0x43, 0xbe, 0xde, 0xc2, 0x1b, 0x01, 0x43, 0x70, 0x9c, 0xca, 0x1b, + 0x01, 0x45, 0xdc, 0xe6, 0xcb, 0x1b, 0x01, 0x44, 0x91, 0xf0, 0xc3, 0x1b, + 0x01, 0x44, 0xb9, 0xf0, 0xcf, 0x1b, 0x01, 0xab, 0x71, 0x46, 0xd0, 0xdd, + 0xd0, 0x1b, 0x01, 0x42, 0x6c, 0x00, 0xc7, 0x1b, 0x01, 0xae, 0x57, 0x45, + 0xb1, 0xe9, 0xd1, 0x1b, 0x01, 0xb0, 0x43, 0x43, 0x96, 0x02, 0xc4, 0x1b, + 0x01, 0x04, 0xa9, 0xf2, 0x2f, 0xb4, 0x12, 0x45, 0x04, 0xec, 0xc5, 0x1b, + 0x01, 0x45, 0x13, 0xec, 0xd3, 0x1b, 0x01, 0x43, 0x9d, 0x32, 0xd4, 0x1b, + 0x41, 0x44, 0xf3, 0xa4, 0xc1, 0x1b, 0x01, 0x44, 0x50, 0x76, 0xde, 0x1b, + 0x01, 0xa8, 0x01, 0xff, 0x43, 0xf6, 0x0a, 0xd8, 0x1b, 0x01, 0x43, 0x85, + 0x0e, 0xdf, 0x1b, 0x41, 0x42, 0x68, 0x00, 0xd2, 0x1b, 0x01, 0xf2, 0xdc, + 0x1b, 0x41, 0x43, 0xc9, 0x02, 0xd9, 0x1b, 0x01, 0x42, 0xba, 0x04, 0xc9, + 0x1b, 0x41, 0x42, 0x18, 0x0a, 0xcd, 0x1b, 0x01, 0x43, 0x6c, 0x1e, 0xda, + 0x1b, 0x41, 0x42, 0x22, 0x00, 0xdb, 0x1b, 0x01, 0x42, 0xd5, 0x2a, 0xc6, + 0x1b, 0x01, 0x44, 0xfb, 0xbc, 0xe0, 0x1b, 0x41, 0x43, 0xa5, 0x27, 0xc0, + 0x1b, 0x01, 0x44, 0xa2, 0x49, 0xd7, 0x1b, 0x41, 0x44, 0x10, 0x86, 0xcc, + 0x1b, 0x01, 0x45, 0xf5, 0xe6, 0xdd, 0x1b, 0x41, 0x42, 0x13, 0x00, 0xd6, + 0x1b, 0x01, 0x44, 0x21, 0xf2, 0xc8, 0x1b, 0x01, 0x42, 0xf5, 0x0a, 0xd5, + 0x1b, 0x41, 0x45, 0x12, 0x0b, 0xf8, 0x1b, 0x01, 0xa6, 0x2e, 0x44, 0xcf, + 0x2a, 0xf9, 0x1b, 0x01, 0x43, 0x0e, 0x0b, 0xf1, 0x1b, 0x01, 0xb3, 0x14, + 0xb4, 0x06, 0x44, 0x43, 0x1e, 0xf0, 0x1b, 0x41, 0x44, 0x25, 0x01, 0xf3, + 0x1b, 0x01, 0x42, 0x15, 0x02, 0xf2, 0x1b, 0x41, 0x44, 0xc9, 0x1d, 0xf7, + 0x1b, 0x01, 0x42, 0x01, 0x26, 0xf6, 0x1b, 0x41, 0x43, 0xd2, 0x05, 0xf5, + 0x1b, 0x01, 0x43, 0xf6, 0x06, 0xf4, 0x1b, 0x41, 0x4f, 0x6f, 0x69, 0x04, + 0xf3, 0x41, 0x48, 0xae, 0x88, 0xba, 0x1b, 0x00, 0x11, 0x52, 0x59, 0xb6, + 0x03, 0x06, 0xef, 0x06, 0xef, 0x02, 0x07, 0xec, 0x05, 0x8d, 0x01, 0x12, + 0x9d, 0x54, 0x57, 0x05, 0x5a, 0x03, 0x2c, 0x0d, 0x56, 0x8a, 0x01, 0xff, + 0x45, 0x94, 0xe8, 0xa8, 0x1b, 0x00, 0xae, 0x01, 0xff, 0x47, 0x92, 0xce, + 0xa6, 0x1b, 0x00, 0x47, 0xfa, 0xd0, 0xa9, 0x1b, 0x00, 0x45, 0xaa, 0xe6, + 0xa4, 0x1b, 0x00, 0x45, 0x51, 0x12, 0xa7, 0x1b, 0x00, 0x44, 0x49, 0xf3, + 0xa5, 0x1b, 0x40, 0x02, 0xbb, 0x09, 0x06, 0x46, 0xe3, 0x23, 0xab, 0x1b, + 0x40, 0x45, 0x53, 0xe8, 0xaa, 0x1b, 0x00, 0xae, 0x01, 0xff, 0xa7, 0x06, + 0x45, 0x8b, 0xec, 0x80, 0x1b, 0x40, 0x45, 0x21, 0xe8, 0x81, 0x1b, 0x00, + 0x45, 0x63, 0xec, 0x82, 0x1b, 0x40, 0x4a, 0x2b, 0xa8, 0xc7, 0x1c, 0x00, + 0x45, 0xed, 0xe4, 0xc3, 0x1c, 0x00, 0x4a, 0x2f, 0xa9, 0xc6, 0x1c, 0x00, + 0x4a, 0x4f, 0xac, 0xc5, 0x1c, 0x00, 0x4b, 0xb7, 0x9e, 0xc4, 0x1c, 0x00, + 0xb0, 0x06, 0x45, 0x28, 0xeb, 0xc0, 0x1c, 0x40, 0x47, 0xe6, 0xce, 0xc1, + 0x1c, 0x00, 0x46, 0x06, 0xe1, 0xc2, 0x1c, 0x40, 0xe1, 0x83, 0x1b, 0x80, + 0xcd, 0x01, 0xa2, 0xc0, 0x01, 0x42, 0x37, 0x00, 0x8e, 0x1b, 0x00, 0x42, + 0xf0, 0x10, 0x93, 0x1b, 0x00, 0xe5, 0x88, 0x1b, 0x80, 0xaa, 0x01, 0xa6, + 0x96, 0x01, 0x42, 0x24, 0x02, 0x8c, 0x1b, 0x00, 0x42, 0x22, 0x00, 0xa0, + 0x1b, 0x00, 0xe9, 0x84, 0x1b, 0x00, 0x42, 0x56, 0x19, 0x8f, 0x1b, 0x00, + 0xab, 0x74, 0xac, 0x68, 0x42, 0x6c, 0x00, 0x99, 0x1b, 0x00, 0xae, 0x50, + 0xef, 0x87, 0x1b, 0x00, 0x42, 0xbb, 0x09, 0x95, 0x1b, 0x00, 0x42, 0x43, + 0x14, 0x8b, 0x1b, 0x00, 0xb2, 0x34, 0xb3, 0x28, 0x42, 0x12, 0x00, 0x92, + 0x1b, 0x00, 0xf5, 0x85, 0x1b, 0x00, 0x42, 0xf5, 0x0a, 0x97, 0x1b, 0x00, + 0x42, 0xa9, 0x01, 0x9d, 0x1b, 0x00, 0x42, 0xed, 0x26, 0x9f, 0x1b, 0x00, + 0x42, 0xbc, 0x22, 0x9a, 0x1b, 0x00, 0x42, 0x59, 0x00, 0x90, 0x1b, 0x40, + 0xe1, 0x9e, 0x1b, 0x00, 0x42, 0xbc, 0x22, 0xaf, 0x1b, 0x40, 0xe1, 0x9b, + 0x1b, 0x00, 0x42, 0x97, 0x02, 0xbb, 0x1b, 0x40, 0xe1, 0x94, 0x1b, 0x00, + 0x42, 0x24, 0x02, 0x8d, 0x1b, 0x00, 0x42, 0xbc, 0x22, 0x91, 0x1b, 0x40, + 0xe1, 0x9c, 0x1b, 0x00, 0x42, 0x97, 0x02, 0xbc, 0x1b, 0x40, 0xe1, 0x8a, + 0x1b, 0x00, 0x42, 0x22, 0x00, 0xae, 0x1b, 0x40, 0xe1, 0x96, 0x1b, 0x00, + 0x05, 0xe8, 0x27, 0x01, 0xff, 0xeb, 0xbe, 0x1b, 0x00, 0xed, 0xbf, 0x1b, + 0x40, 0xf5, 0x89, 0x1b, 0x40, 0xe1, 0x98, 0x1b, 0x00, 0x42, 0x22, 0x00, + 0xbd, 0x1b, 0x40, 0xe5, 0x86, 0x1b, 0x00, 0x48, 0x6d, 0xbe, 0xbd, 0x1b, + 0x40, 0x45, 0x12, 0x0b, 0xb8, 0x1b, 0x00, 0xa6, 0x2e, 0x44, 0xcf, 0x2a, + 0xb9, 0x1b, 0x00, 0x43, 0x0e, 0x0b, 0xb1, 0x1b, 0x00, 0xb3, 0x14, 0xb4, + 0x06, 0x44, 0x43, 0x1e, 0xb0, 0x1b, 0x40, 0x44, 0x25, 0x01, 0xb3, 0x1b, + 0x00, 0x42, 0x15, 0x02, 0xb2, 0x1b, 0x40, 0x44, 0xc9, 0x1d, 0xb7, 0x1b, + 0x00, 0x42, 0x01, 0x26, 0xb6, 0x1b, 0x40, 0x43, 0xd2, 0x05, 0xb5, 0x1b, + 0x00, 0x43, 0xf6, 0x06, 0xb4, 0x1b, 0x40, 0x47, 0x46, 0xd3, 0xa1, 0x1b, + 0x00, 0x02, 0x7d, 0x1a, 0x11, 0x07, 0xa7, 0xd5, 0x01, 0xff, 0x42, 0x6c, + 0x00, 0xac, 0x1b, 0x00, 0x42, 0xa9, 0x01, 0xad, 0x1b, 0x40, 0x44, 0xb8, + 0x96, 0xa2, 0x1b, 0x00, 0x43, 0x59, 0xe7, 0xa3, 0x1b, 0x40, 0x4c, 0xa3, + 0x8c, 0xc5, 0x26, 0x00, 0x49, 0x4f, 0xc1, 0x1e, 0xf3, 0x41, 0x46, 0xb5, + 0x0a, 0xb3, 0x23, 0x00, 0x43, 0x1e, 0x00, 0xb2, 0x23, 0x00, 0x4d, 0xb1, + 0x8a, 0x0b, 0x2a, 0x40, 0x80, 0x01, 0xff, 0x06, 0x5c, 0x00, 0x1c, 0x55, + 0xcb, 0x39, 0xe9, 0x22, 0x00, 0x06, 0xf3, 0x28, 0x06, 0x4e, 0xe9, 0x7d, + 0xb1, 0x22, 0x40, 0x45, 0xfb, 0x0c, 0x7d, 0x22, 0x00, 0x4a, 0xd6, 0x39, + 0x7f, 0x22, 0x40, 0x4f, 0xaa, 0x6a, 0xb8, 0x2a, 0x00, 0x4b, 0x48, 0x13, + 0xb4, 0x2a, 0x00, 0x04, 0x70, 0x23, 0x11, 0x0c, 0xf6, 0x2a, 0x01, 0xff, + 0x4b, 0x48, 0x13, 0xb0, 0x2a, 0x00, 0x4c, 0x02, 0x2b, 0xb2, 0x2a, 0x40, + 0x4f, 0xaa, 0x6a, 0xba, 0x2a, 0x00, 0x48, 0xf8, 0x0c, 0xb6, 0x2a, 0x40, + 0x06, 0x75, 0x06, 0x75, 0x03, 0x68, 0x09, 0x06, 0x46, 0x32, 0xc0, 0x1a, + 0x00, 0x40, 0x06, 0x5c, 0x00, 0x50, 0x42, 0xf4, 0x01, 0x82, 0x22, 0x80, + 0x17, 0x05, 0x51, 0x00, 0x01, 0xff, 0x43, 0x23, 0x0a, 0xbd, 0x2a, 0x00, + 0x59, 0xfc, 0x24, 0xc1, 0x2a, 0x00, 0x4f, 0xdf, 0x71, 0xbf, 0x2a, 0x40, + 0x80, 0x01, 0xff, 0x06, 0x5c, 0x00, 0x13, 0x4b, 0xf3, 0x28, 0x86, 0x22, + 0x80, 0x06, 0x51, 0xa1, 0x5f, 0x8a, 0x22, 0x40, 0x4f, 0x75, 0x3b, 0xc3, + 0x2a, 0x40, 0x4f, 0xaa, 0x6a, 0xc9, 0x2a, 0x00, 0x4b, 0x48, 0x13, 0xc5, + 0x2a, 0x00, 0x4c, 0x02, 0x2b, 0xcb, 0x2a, 0x00, 0x4e, 0x78, 0x3e, 0xc7, + 0x2a, 0x40, 0x50, 0xb3, 0x02, 0x79, 0x29, 0x00, 0x02, 0x6f, 0x00, 0x01, + 0xff, 0x44, 0x9b, 0x12, 0xd5, 0x2a, 0x00, 0x46, 0x29, 0x36, 0xd3, 0x2a, + 0x40, 0xa5, 0x54, 0xa6, 0x46, 0x50, 0x7f, 0x24, 0x8d, 0x20, 0x00, 0x45, + 0x91, 0x1f, 0x8b, 0x20, 0x00, 0x44, 0xcf, 0x2a, 0x89, 0x20, 0x00, 0x43, + 0x0e, 0x0b, 0x81, 0x20, 0x00, 0x49, 0xdf, 0x71, 0x8a, 0x20, 0x00, 0x51, + 0xd2, 0x21, 0x8e, 0x20, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, + 0x80, 0x20, 0x40, 0x44, 0x25, 0x01, 0x83, 0x20, 0x00, 0x42, 0x15, 0x02, + 0x82, 0x20, 0x40, 0x44, 0xc9, 0x1d, 0x87, 0x20, 0x00, 0x42, 0x01, 0x26, + 0x86, 0x20, 0x40, 0x43, 0xd2, 0x05, 0x85, 0x20, 0x00, 0x43, 0xf6, 0x06, + 0x84, 0x20, 0x40, 0x44, 0xc9, 0x00, 0x88, 0x20, 0x00, 0x4a, 0x49, 0x13, + 0x8c, 0x20, 0x40, 0xa1, 0xc0, 0x01, 0xa5, 0xa1, 0x01, 0x4a, 0x75, 0x95, + 0xc5, 0xfb, 0x81, 0x76, 0xaf, 0x68, 0xb2, 0x15, 0xb5, 0x01, 0xff, 0x4e, + 0xe9, 0x76, 0x99, 0xf3, 0x01, 0x4e, 0xc9, 0x77, 0x59, 0xf9, 0x01, 0x42, + 0xbb, 0x09, 0xd3, 0xf6, 0x41, 0xa1, 0x32, 0x57, 0x58, 0x2e, 0x29, 0x27, + 0x00, 0xa9, 0x01, 0xff, 0x52, 0xe3, 0x50, 0x63, 0x22, 0x00, 0x4d, 0x53, + 0x86, 0x9c, 0x00, 0x00, 0x04, 0xe2, 0x18, 0x01, 0xff, 0x56, 0xc1, 0x33, + 0x83, 0xcc, 0x01, 0x56, 0x63, 0x35, 0x80, 0xcc, 0x01, 0x57, 0xf3, 0x30, + 0x82, 0xcc, 0x01, 0x54, 0x7c, 0x46, 0x81, 0xcc, 0x41, 0x04, 0xc9, 0x00, + 0x0d, 0x46, 0x30, 0xe1, 0x53, 0xf3, 0xc1, 0x00, 0x47, 0x15, 0x08, 0xbf, + 0xce, 0x41, 0x46, 0xff, 0x2f, 0xcf, 0xf4, 0x01, 0x44, 0x22, 0x24, 0xe4, + 0x23, 0x40, 0x48, 0xb0, 0xc4, 0xe0, 0xf5, 0x01, 0x46, 0x50, 0xdf, 0xf1, + 0x23, 0x40, 0x80, 0x01, 0xff, 0x08, 0xa8, 0xc7, 0x11, 0x05, 0x51, 0x00, + 0x01, 0xff, 0x4b, 0x2c, 0x99, 0xc6, 0xfb, 0x01, 0x45, 0x85, 0x27, 0xc9, 0xfb, 0x41, 0x44, 0xc3, 0x00, 0xc7, 0xfb, 0x01, 0x45, 0xc8, 0x00, 0xc8, - 0xfb, 0x41, 0x02, 0x57, 0x00, 0x0c, 0x53, 0x5c, 0x4a, 0x3c, 0x2e, 0x00, - 0x48, 0xd2, 0xc8, 0x7a, 0xfa, 0x41, 0x4b, 0x93, 0x7a, 0x82, 0xf6, 0x01, - 0x48, 0x7a, 0xc4, 0x5c, 0xf3, 0x41, 0x44, 0x1b, 0x04, 0xdf, 0xf3, 0x01, - 0x06, 0xd4, 0xd8, 0x75, 0x4d, 0x58, 0x31, 0x83, 0xf5, 0x01, 0x4c, 0xdd, - 0x71, 0xcd, 0xf9, 0x01, 0xb2, 0x0f, 0xb4, 0x01, 0xff, 0x43, 0xb5, 0x00, - 0x89, 0xf6, 0x01, 0x4d, 0xbc, 0x87, 0xfd, 0xf5, 0x41, 0x80, 0x2b, 0x05, - 0x5e, 0x35, 0x01, 0xff, 0x4c, 0xb5, 0x8d, 0x96, 0x00, 0x00, 0x47, 0xac, - 0xce, 0x01, 0x00, 0x00, 0x4e, 0xf6, 0x79, 0x96, 0x00, 0x00, 0xb3, 0x06, - 0x44, 0x96, 0x2f, 0x02, 0x00, 0x40, 0x4c, 0xc6, 0x86, 0x86, 0x00, 0x00, - 0x45, 0x63, 0x21, 0x98, 0x00, 0x40, 0x4c, 0x79, 0x8a, 0x2a, 0x26, 0x00, - 0x46, 0xf9, 0x12, 0x5b, 0x22, 0x00, 0xaf, 0x11, 0x05, 0x51, 0x00, 0x01, - 0xff, 0x4f, 0xcf, 0x6d, 0xea, 0x2b, 0x00, 0x50, 0x3a, 0x65, 0xeb, 0x2b, - 0x40, 0x47, 0x27, 0xce, 0x21, 0x27, 0x00, 0x47, 0xdd, 0x1c, 0xc6, 0x22, - 0x40, 0x4b, 0xcf, 0x96, 0x95, 0x26, 0x00, 0x46, 0x76, 0xd9, 0x9a, 0x26, + 0xfb, 0x41, 0x02, 0x57, 0x00, 0x0c, 0x53, 0xa5, 0x4b, 0x3c, 0x2e, 0x00, + 0x48, 0x88, 0xcb, 0x7a, 0xfa, 0x41, 0x4b, 0xf4, 0x7b, 0x82, 0xf6, 0x01, + 0x48, 0x18, 0xc7, 0x5c, 0xf3, 0x41, 0x44, 0x46, 0x04, 0xdf, 0xf3, 0x01, + 0x06, 0xc0, 0xdb, 0x75, 0x4d, 0x3e, 0x32, 0x83, 0xf5, 0x01, 0x4c, 0x68, + 0x73, 0xcd, 0xf9, 0x01, 0xb2, 0x0f, 0xb4, 0x01, 0xff, 0x43, 0xb5, 0x00, + 0x89, 0xf6, 0x01, 0x4d, 0x79, 0x89, 0xfd, 0xf5, 0x41, 0x80, 0x2b, 0x05, + 0x2e, 0x36, 0x01, 0xff, 0x4c, 0x67, 0x8f, 0x96, 0x00, 0x00, 0x47, 0x86, + 0xd1, 0x01, 0x00, 0x00, 0x4e, 0x57, 0x7b, 0x96, 0x00, 0x00, 0xb3, 0x06, + 0x44, 0x7c, 0x30, 0x02, 0x00, 0x40, 0x4c, 0x83, 0x88, 0x86, 0x00, 0x00, + 0x45, 0xeb, 0x21, 0x98, 0x00, 0x40, 0x4c, 0x37, 0x8c, 0x2a, 0x26, 0x00, + 0x46, 0x48, 0x13, 0x5b, 0x22, 0x00, 0xaf, 0x11, 0x05, 0x51, 0x00, 0x01, + 0xff, 0x4f, 0x78, 0x6f, 0xea, 0x2b, 0x00, 0x50, 0xb6, 0x66, 0xeb, 0x2b, + 0x40, 0x47, 0x01, 0xd1, 0x21, 0x27, 0x00, 0x47, 0x7f, 0x1d, 0xc6, 0x22, + 0x40, 0x4b, 0xd4, 0x98, 0x95, 0x26, 0x00, 0x46, 0x74, 0xdc, 0x9a, 0x26, 0x40, 0xa1, 0x06, 0x42, 0x03, 0x00, 0x91, 0xf9, 0x41, 0x02, 0x88, 0x00, - 0x06, 0x58, 0xb5, 0x2a, 0xa7, 0x27, 0x40, 0x80, 0xee, 0x05, 0x02, 0x06, - 0x00, 0x01, 0xff, 0x48, 0xed, 0x0c, 0xc6, 0x29, 0x00, 0xa3, 0xb1, 0x03, - 0x4c, 0x59, 0x8c, 0xa1, 0x22, 0x00, 0x47, 0xe8, 0xcd, 0x9f, 0xf1, 0x01, + 0x06, 0x58, 0x3e, 0x2b, 0xa7, 0x27, 0x40, 0x80, 0xee, 0x05, 0x02, 0x06, + 0x00, 0x01, 0xff, 0x48, 0x3c, 0x0d, 0xc6, 0x29, 0x00, 0xa3, 0xb1, 0x03, + 0x4c, 0x17, 0x8e, 0xa1, 0x22, 0x00, 0x47, 0xc2, 0xd0, 0x9f, 0xf1, 0x01, 0xa6, 0x82, 0x03, 0xa8, 0xeb, 0x02, 0x42, 0x03, 0x00, 0x94, 0xf1, 0x01, 0xab, 0xc6, 0x02, 0xac, 0xb4, 0x01, 0xad, 0xa7, 0x01, 0xae, 0x9a, 0x01, - 0xaf, 0x8d, 0x01, 0xb0, 0x7f, 0x55, 0x15, 0x3d, 0xc4, 0x29, 0x00, 0xb3, - 0x3d, 0xb4, 0x20, 0xb5, 0x12, 0xb6, 0x06, 0x42, 0x40, 0x1a, 0x4f, 0xf1, - 0x41, 0x42, 0x2a, 0x0c, 0xac, 0xf1, 0x01, 0xf3, 0x9a, 0xf1, 0x41, 0x42, - 0x96, 0x40, 0xab, 0xf1, 0x01, 0x57, 0x55, 0x2f, 0x99, 0xf1, 0x41, 0x46, - 0xdc, 0x0f, 0x9b, 0xf1, 0x01, 0x44, 0x29, 0x02, 0xa0, 0x22, 0x00, 0xb7, - 0x01, 0xff, 0x52, 0x06, 0x50, 0xa2, 0xf1, 0x01, 0x43, 0xd7, 0x27, 0x9d, - 0xf1, 0x41, 0x46, 0xa7, 0x18, 0xdd, 0x26, 0x00, 0xe4, 0x4c, 0xf1, 0x01, - 0xa5, 0x22, 0x42, 0xe0, 0x5d, 0xaa, 0xf1, 0x01, 0x46, 0x4e, 0xda, 0xa3, - 0xf1, 0x01, 0x4b, 0xd4, 0x14, 0xc7, 0x29, 0x00, 0x42, 0x55, 0x0d, 0x98, - 0xf1, 0x01, 0x45, 0xac, 0x05, 0xc8, 0x29, 0x00, 0xf3, 0x4d, 0xf1, 0x41, - 0x4b, 0x2f, 0x98, 0x9c, 0xf1, 0x01, 0x4d, 0x3e, 0x88, 0xa1, 0xf1, 0x41, - 0x43, 0xb8, 0x27, 0x9e, 0x22, 0x00, 0x42, 0x4f, 0xc8, 0x4e, 0xf1, 0x41, - 0xeb, 0x97, 0xf1, 0x01, 0x53, 0x36, 0x4a, 0xa4, 0xf1, 0x41, 0x42, 0x85, - 0x1d, 0x95, 0xf1, 0x01, 0xe7, 0x96, 0xf1, 0x41, 0x44, 0xf0, 0x1e, 0x9f, - 0x22, 0x00, 0xf6, 0x4b, 0xf1, 0x41, 0x05, 0xb4, 0x05, 0x19, 0xaf, 0x01, - 0xff, 0x06, 0xa5, 0x21, 0x06, 0x46, 0x00, 0xdd, 0xa9, 0xf1, 0x41, 0x43, + 0xaf, 0x8d, 0x01, 0xb0, 0x7f, 0x55, 0xfa, 0x3d, 0xc4, 0x29, 0x00, 0xb3, + 0x3d, 0xb4, 0x20, 0xb5, 0x12, 0xb6, 0x06, 0x42, 0xc7, 0x1a, 0x4f, 0xf1, + 0x41, 0x42, 0x79, 0x0c, 0xac, 0xf1, 0x01, 0xf3, 0x9a, 0xf1, 0x41, 0x42, + 0x8f, 0x41, 0xab, 0xf1, 0x01, 0x57, 0x3b, 0x30, 0x99, 0xf1, 0x41, 0x46, + 0x2b, 0x10, 0x9b, 0xf1, 0x01, 0x44, 0x29, 0x02, 0xa0, 0x22, 0x00, 0xb7, + 0x01, 0xff, 0x52, 0x4f, 0x51, 0xa2, 0xf1, 0x01, 0x43, 0x78, 0x28, 0x9d, + 0xf1, 0x41, 0x46, 0x13, 0x19, 0xdd, 0x26, 0x00, 0xe4, 0x4c, 0xf1, 0x01, + 0xa5, 0x22, 0x42, 0x4b, 0x5f, 0xaa, 0xf1, 0x01, 0x46, 0x46, 0xdd, 0xa3, + 0xf1, 0x01, 0x4b, 0x40, 0x15, 0xc7, 0x29, 0x00, 0x42, 0xa4, 0x0d, 0x98, + 0xf1, 0x01, 0x45, 0xd7, 0x05, 0xc8, 0x29, 0x00, 0xf3, 0x4d, 0xf1, 0x41, + 0x4b, 0x3f, 0x9a, 0x9c, 0xf1, 0x01, 0x4d, 0xfb, 0x89, 0xa1, 0xf1, 0x41, + 0x43, 0x59, 0x28, 0x9e, 0x22, 0x00, 0x42, 0xfd, 0xca, 0x4e, 0xf1, 0x41, + 0xeb, 0x97, 0xf1, 0x01, 0x53, 0x7f, 0x4b, 0xa4, 0xf1, 0x41, 0x42, 0x27, + 0x1e, 0x95, 0xf1, 0x01, 0xe7, 0x96, 0xf1, 0x41, 0x44, 0x92, 0x1f, 0x9f, + 0x22, 0x00, 0xf6, 0x4b, 0xf1, 0x41, 0x05, 0xdf, 0x05, 0x19, 0xaf, 0x01, + 0xff, 0x06, 0x2d, 0x22, 0x06, 0x46, 0x0a, 0xe0, 0xa9, 0xf1, 0x41, 0x43, 0x1a, 0x00, 0xce, 0x27, 0x00, 0x42, 0x0c, 0x00, 0xcf, 0x27, 0x40, 0x0f, - 0xb9, 0x05, 0x06, 0x4e, 0xe4, 0x7a, 0xa5, 0xf1, 0x41, 0xe1, 0x30, 0xf1, + 0xe4, 0x05, 0x06, 0x4e, 0x45, 0x7c, 0xa5, 0xf1, 0x41, 0xe1, 0x30, 0xf1, 0x01, 0xe2, 0x31, 0xf1, 0x01, 0xe3, 0x32, 0xf1, 0x01, 0xe4, 0x33, 0xf1, 0x01, 0xe5, 0x34, 0xf1, 0x01, 0xe6, 0x35, 0xf1, 0x01, 0xe7, 0x36, 0xf1, 0x01, 0xe8, 0x37, 0xf1, 0x01, 0xe9, 0x38, 0xf1, 0x01, 0xea, 0x39, 0xf1, @@ -3807,2286 +3918,2305 @@ static const unsigned char uname2c_tree[218382] = { 0x01, 0xf1, 0x40, 0xf1, 0x01, 0xf2, 0x41, 0xf1, 0x01, 0xf3, 0x42, 0xf1, 0x01, 0xf4, 0x43, 0xf1, 0x01, 0xf5, 0x44, 0xf1, 0x01, 0xf6, 0x45, 0xf1, 0x01, 0xf7, 0x46, 0xf1, 0x01, 0xf8, 0x47, 0xf1, 0x01, 0xf9, 0x48, 0xf1, - 0x01, 0xfa, 0x49, 0xf1, 0x41, 0x08, 0x2a, 0xc1, 0x06, 0x42, 0x3f, 0x1c, - 0xbf, 0x26, 0x40, 0x42, 0x04, 0x00, 0x13, 0xf2, 0x01, 0x44, 0xb2, 0xed, - 0x01, 0xf2, 0x01, 0x42, 0x15, 0x06, 0x02, 0xf2, 0x41, 0xe3, 0xa6, 0xf1, - 0x01, 0x42, 0xd7, 0x0c, 0xa7, 0xf1, 0x01, 0x45, 0x26, 0xe4, 0xa8, 0xf1, - 0x01, 0xf6, 0x4a, 0xf1, 0x41, 0x55, 0x53, 0x38, 0xc5, 0x29, 0x00, 0x4d, - 0xf6, 0x82, 0xa0, 0xf1, 0x01, 0x04, 0xcb, 0x06, 0x06, 0x43, 0x26, 0x01, - 0x93, 0xf1, 0x41, 0x4f, 0xb4, 0x0b, 0x2c, 0x2e, 0x00, 0xeb, 0x9e, 0xf1, - 0x41, 0x15, 0x42, 0x32, 0x0a, 0xec, 0x91, 0xf1, 0x01, 0x43, 0x8a, 0x96, - 0x92, 0xf1, 0x41, 0x02, 0xb6, 0xf1, 0x80, 0x02, 0x95, 0x9b, 0x01, 0x96, - 0x4b, 0x97, 0x23, 0x98, 0x0f, 0x99, 0x01, 0xff, 0x43, 0x27, 0xf0, 0x2b, - 0xf2, 0x01, 0x43, 0x39, 0xf0, 0x3b, 0xf2, 0x41, 0x43, 0x8d, 0xf0, 0x16, - 0xf2, 0x01, 0x43, 0xae, 0xf0, 0x23, 0xf2, 0x01, 0x43, 0xc3, 0xf0, 0x30, - 0xf2, 0x41, 0x43, 0x36, 0xf0, 0x1a, 0xf2, 0x01, 0x95, 0x12, 0x43, 0x8a, - 0xf0, 0x32, 0xf2, 0x01, 0x43, 0x90, 0xf0, 0x33, 0xf2, 0x01, 0x43, 0xc0, - 0xf0, 0x21, 0xf2, 0x41, 0x42, 0xa4, 0xf1, 0x22, 0xf2, 0x01, 0x42, 0xb6, - 0xdf, 0x38, 0xf2, 0x41, 0x92, 0x3a, 0x93, 0x2c, 0x95, 0x1e, 0x43, 0x75, - 0xf0, 0x19, 0xf2, 0x01, 0x02, 0xc4, 0xf0, 0x0c, 0x43, 0xd8, 0xf0, 0x35, - 0xf2, 0x01, 0x43, 0xe7, 0xf0, 0x26, 0xf2, 0x41, 0xd8, 0x37, 0xf2, 0x01, - 0xd9, 0x36, 0xf2, 0x41, 0x42, 0xc2, 0xf1, 0x1b, 0xf2, 0x01, 0x42, 0x38, - 0xb9, 0x1f, 0xf2, 0x41, 0x42, 0x27, 0x3f, 0x2f, 0xf2, 0x01, 0x42, 0x3d, - 0xf0, 0x28, 0xf2, 0x41, 0x42, 0xb4, 0xf1, 0x10, 0xf2, 0x01, 0x42, 0x49, - 0xf0, 0x31, 0xf2, 0x01, 0x42, 0xc0, 0xf1, 0x27, 0xf2, 0x41, 0x43, 0x3f, - 0xf0, 0x1e, 0xf2, 0x01, 0x92, 0x48, 0x93, 0x3a, 0x94, 0x2c, 0x43, 0x6f, - 0xf0, 0x3a, 0xf2, 0x01, 0x43, 0x87, 0xf0, 0x24, 0xf2, 0x01, 0x99, 0x12, - 0x43, 0xa2, 0xf0, 0x11, 0xf2, 0x01, 0x43, 0xc9, 0xf0, 0x2c, 0xf2, 0x01, - 0x43, 0xea, 0xf0, 0x1d, 0xf2, 0x41, 0x42, 0x29, 0x74, 0x15, 0xf2, 0x01, - 0x42, 0xce, 0xe0, 0x17, 0xf2, 0x41, 0x42, 0x27, 0x74, 0x34, 0xf2, 0x01, - 0x42, 0xac, 0xf1, 0x25, 0xf2, 0x41, 0x42, 0xb0, 0x04, 0x12, 0xf2, 0x01, - 0x42, 0xa5, 0xf1, 0x2e, 0xf2, 0x41, 0x42, 0xa2, 0xf1, 0x20, 0xf2, 0x01, - 0x42, 0x3a, 0xf0, 0x1c, 0xf2, 0x01, 0x42, 0x7e, 0xf0, 0x39, 0xf2, 0x41, - 0x90, 0x12, 0x42, 0x59, 0xec, 0x2d, 0xf2, 0x01, 0x42, 0x4f, 0xdf, 0x14, - 0xf2, 0x01, 0x42, 0xe5, 0xd5, 0x18, 0xf2, 0x41, 0xd0, 0x29, 0xf2, 0x01, + 0x01, 0xfa, 0x49, 0xf1, 0x41, 0x08, 0xb0, 0xc3, 0x06, 0x42, 0xc6, 0x1c, + 0xbf, 0x26, 0x40, 0x42, 0x04, 0x00, 0x13, 0xf2, 0x01, 0x44, 0xf1, 0xf0, + 0x01, 0xf2, 0x01, 0x42, 0x40, 0x06, 0x02, 0xf2, 0x41, 0xe3, 0xa6, 0xf1, + 0x01, 0x42, 0x26, 0x0d, 0xa7, 0xf1, 0x01, 0x45, 0x36, 0xe7, 0xa8, 0xf1, + 0x01, 0xf6, 0x4a, 0xf1, 0x41, 0x55, 0x23, 0x39, 0xc5, 0x29, 0x00, 0x4d, + 0x99, 0x84, 0xa0, 0xf1, 0x01, 0x04, 0xf6, 0x06, 0x06, 0x43, 0x26, 0x01, + 0x93, 0xf1, 0x41, 0x4f, 0x03, 0x0c, 0x2c, 0x2e, 0x00, 0xeb, 0x9e, 0xf1, + 0x41, 0x15, 0x12, 0x33, 0x0a, 0xec, 0x91, 0xf1, 0x01, 0x43, 0x84, 0x98, + 0x92, 0xf1, 0x41, 0x02, 0x00, 0xf5, 0x80, 0x02, 0x95, 0x9b, 0x01, 0x96, + 0x4b, 0x97, 0x23, 0x98, 0x0f, 0x99, 0x01, 0xff, 0x43, 0x7a, 0xf3, 0x2b, + 0xf2, 0x01, 0x43, 0x8c, 0xf3, 0x3b, 0xf2, 0x41, 0x43, 0xe0, 0xf3, 0x16, + 0xf2, 0x01, 0x43, 0x01, 0xf4, 0x23, 0xf2, 0x01, 0x43, 0x16, 0xf4, 0x30, + 0xf2, 0x41, 0x43, 0x89, 0xf3, 0x1a, 0xf2, 0x01, 0x95, 0x12, 0x43, 0xdd, + 0xf3, 0x32, 0xf2, 0x01, 0x43, 0xe3, 0xf3, 0x33, 0xf2, 0x01, 0x43, 0x13, + 0xf4, 0x21, 0xf2, 0x41, 0x42, 0xee, 0xf4, 0x22, 0xf2, 0x01, 0x42, 0xc1, + 0xe2, 0x38, 0xf2, 0x41, 0x92, 0x3a, 0x93, 0x2c, 0x95, 0x1e, 0x43, 0xc8, + 0xf3, 0x19, 0xf2, 0x01, 0x02, 0x17, 0xf4, 0x0c, 0x43, 0x2b, 0xf4, 0x35, + 0xf2, 0x01, 0x43, 0x3a, 0xf4, 0x26, 0xf2, 0x41, 0xd8, 0x37, 0xf2, 0x01, + 0xd9, 0x36, 0xf2, 0x41, 0x42, 0x0c, 0xf5, 0x1b, 0xf2, 0x01, 0x42, 0x9b, + 0xbb, 0x1f, 0xf2, 0x41, 0x42, 0x20, 0x40, 0x2f, 0xf2, 0x01, 0x42, 0x90, + 0xf3, 0x28, 0xf2, 0x41, 0x42, 0xfe, 0xf4, 0x10, 0xf2, 0x01, 0x42, 0x9c, + 0xf3, 0x31, 0xf2, 0x01, 0x42, 0x0a, 0xf5, 0x27, 0xf2, 0x41, 0x43, 0x92, + 0xf3, 0x1e, 0xf2, 0x01, 0x92, 0x48, 0x93, 0x3a, 0x94, 0x2c, 0x43, 0xc2, + 0xf3, 0x3a, 0xf2, 0x01, 0x43, 0xda, 0xf3, 0x24, 0xf2, 0x01, 0x99, 0x12, + 0x43, 0xf5, 0xf3, 0x11, 0xf2, 0x01, 0x43, 0x1c, 0xf4, 0x2c, 0xf2, 0x01, + 0x43, 0x3d, 0xf4, 0x1d, 0xf2, 0x41, 0x42, 0xb4, 0x75, 0x15, 0xf2, 0x01, + 0x42, 0xd9, 0xe3, 0x17, 0xf2, 0x41, 0x42, 0xb2, 0x75, 0x34, 0xf2, 0x01, + 0x42, 0xf6, 0xf4, 0x25, 0xf2, 0x41, 0x42, 0xdb, 0x04, 0x12, 0xf2, 0x01, + 0x42, 0xef, 0xf4, 0x2e, 0xf2, 0x41, 0x42, 0xec, 0xf4, 0x20, 0xf2, 0x01, + 0x42, 0x8d, 0xf3, 0x1c, 0xf2, 0x01, 0x42, 0xd1, 0xf3, 0x39, 0xf2, 0x41, + 0x90, 0x12, 0x42, 0x90, 0xef, 0x2d, 0xf2, 0x01, 0x42, 0x5a, 0xe2, 0x14, + 0xf2, 0x01, 0x42, 0xcb, 0xd8, 0x18, 0xf2, 0x41, 0xd0, 0x29, 0xf2, 0x01, 0xd9, 0x2a, 0xf2, 0x41, 0xa1, 0xd9, 0x0b, 0xa2, 0xae, 0x0b, 0xa3, 0xee, 0x0a, 0xa4, 0xb4, 0x0a, 0xa5, 0xf9, 0x09, 0xa6, 0xcc, 0x09, 0xa7, 0x82, 0x09, 0xa8, 0xa8, 0x08, 0xa9, 0xf8, 0x07, 0xab, 0xc7, 0x06, 0xac, 0xa6, 0x06, 0xad, 0xb2, 0x04, 0xae, 0x8a, 0x04, 0xaf, 0xdf, 0x03, 0xb0, 0xd7, - 0x02, 0xb2, 0x89, 0x02, 0xb3, 0xb9, 0x01, 0xb4, 0xa4, 0x01, 0x43, 0x8e, - 0xef, 0x06, 0x33, 0x00, 0x48, 0x7a, 0xc9, 0xde, 0x33, 0x00, 0xb7, 0x19, - 0xb9, 0x01, 0xff, 0x02, 0x31, 0x12, 0x06, 0x43, 0x22, 0x9f, 0x50, 0x33, + 0x02, 0xb2, 0x89, 0x02, 0xb3, 0xb9, 0x01, 0xb4, 0xa4, 0x01, 0x43, 0xdd, + 0xf2, 0x06, 0x33, 0x00, 0x48, 0x30, 0xcc, 0xde, 0x33, 0x00, 0xb7, 0x19, + 0xb9, 0x01, 0xff, 0x02, 0x80, 0x12, 0x06, 0x43, 0x53, 0xa1, 0x50, 0x33, 0x40, 0x42, 0x3b, 0x01, 0x4e, 0x33, 0x00, 0x42, 0x3d, 0x00, 0x4f, 0x33, - 0x40, 0x44, 0xc1, 0x8a, 0x57, 0x33, 0x00, 0xe2, 0xdd, 0x33, 0x00, 0x04, - 0x52, 0x00, 0x01, 0xff, 0x51, 0x3d, 0x57, 0x13, 0x2b, 0x00, 0x51, 0x09, - 0x58, 0xe0, 0x29, 0x00, 0x58, 0x6d, 0x27, 0xa9, 0x25, 0x00, 0x4f, 0x76, - 0x6c, 0xa4, 0x25, 0x00, 0xac, 0x3d, 0x5a, 0xfc, 0x20, 0xa6, 0x25, 0x00, - 0x50, 0x3a, 0x65, 0xe8, 0x25, 0x00, 0x4e, 0xd2, 0x7b, 0x12, 0x2b, 0x00, - 0x06, 0x6d, 0x02, 0x06, 0x4d, 0x72, 0x88, 0xa5, 0x25, 0x40, 0x05, 0xc3, - 0x00, 0x11, 0x06, 0xc8, 0x00, 0x01, 0xff, 0x53, 0x42, 0x25, 0x14, 0x2b, - 0x00, 0x52, 0x74, 0x54, 0xa8, 0x25, 0x40, 0x53, 0x42, 0x25, 0xe9, 0x25, - 0x00, 0x53, 0x5d, 0x4c, 0xa7, 0x25, 0x40, 0x4e, 0xd0, 0x6d, 0xe7, 0x25, - 0x00, 0x05, 0x14, 0x01, 0x01, 0xff, 0x58, 0xed, 0x28, 0x15, 0x2b, 0x00, - 0x59, 0x3c, 0x25, 0xea, 0x25, 0x40, 0x45, 0x5b, 0xdd, 0x96, 0xf7, 0x01, - 0x42, 0x39, 0xa3, 0x94, 0x33, 0x00, 0x42, 0x10, 0x00, 0x27, 0x33, 0x40, - 0xa1, 0x3f, 0x03, 0x92, 0x01, 0x33, 0x46, 0x1e, 0xda, 0x21, 0x33, 0x00, - 0x0b, 0x25, 0x9f, 0x08, 0xf2, 0xdb, 0x33, 0x00, 0xf6, 0xdc, 0x33, 0x40, - 0x07, 0x4c, 0x0d, 0x11, 0x04, 0x1e, 0x00, 0x01, 0xff, 0x44, 0xc3, 0x00, + 0x40, 0x44, 0x7f, 0x8c, 0x57, 0x33, 0x00, 0xe2, 0xdd, 0x33, 0x00, 0x04, + 0x52, 0x00, 0x01, 0xff, 0x51, 0xa8, 0x58, 0x13, 0x2b, 0x00, 0x51, 0x74, + 0x59, 0xe0, 0x29, 0x00, 0x58, 0x0e, 0x28, 0xa9, 0x25, 0x00, 0x4f, 0x1f, + 0x6e, 0xa4, 0x25, 0x00, 0xac, 0x3d, 0x5a, 0x84, 0x21, 0xa6, 0x25, 0x00, + 0x50, 0xb6, 0x66, 0xe8, 0x25, 0x00, 0x4e, 0x33, 0x7d, 0x12, 0x2b, 0x00, + 0x06, 0x6d, 0x02, 0x06, 0x4d, 0x2f, 0x8a, 0xa5, 0x25, 0x40, 0x05, 0xc3, + 0x00, 0x11, 0x06, 0xc8, 0x00, 0x01, 0xff, 0x53, 0xe3, 0x25, 0x14, 0x2b, + 0x00, 0x52, 0xbd, 0x55, 0xa8, 0x25, 0x40, 0x53, 0xe3, 0x25, 0xe9, 0x25, + 0x00, 0x53, 0xa6, 0x4d, 0xa7, 0x25, 0x40, 0x4e, 0x79, 0x6f, 0xe7, 0x25, + 0x00, 0x05, 0x14, 0x01, 0x01, 0xff, 0x58, 0x8e, 0x29, 0x15, 0x2b, 0x00, + 0x59, 0xdd, 0x25, 0xea, 0x25, 0x40, 0x45, 0x65, 0xe0, 0x96, 0xf7, 0x01, + 0x42, 0x75, 0xa5, 0x94, 0x33, 0x00, 0x42, 0x10, 0x00, 0x27, 0x33, 0x40, + 0xa1, 0x3f, 0x03, 0x92, 0x01, 0x33, 0x46, 0x10, 0xdd, 0x21, 0x33, 0x00, + 0x0b, 0x56, 0xa1, 0x08, 0xf2, 0xdb, 0x33, 0x00, 0xf6, 0xdc, 0x33, 0x40, + 0x07, 0x9b, 0x0d, 0x11, 0x04, 0x1e, 0x00, 0x01, 0xff, 0x44, 0xc3, 0x00, 0x7c, 0xcc, 0x01, 0x45, 0xc8, 0x00, 0x7d, 0xcc, 0x41, 0x44, 0xc3, 0x00, 0x7f, 0xcc, 0x01, 0x45, 0xc8, 0x00, 0x7e, 0xcc, 0x41, 0xe9, 0x22, 0x33, - 0x00, 0xef, 0x23, 0x33, 0x40, 0x45, 0x49, 0xe4, 0x1f, 0x33, 0x00, 0x46, - 0x98, 0xdb, 0x20, 0x33, 0x40, 0x42, 0xe8, 0x01, 0xad, 0x33, 0x80, 0x37, - 0xa5, 0x29, 0xa9, 0x15, 0x43, 0x25, 0x6b, 0x1a, 0x22, 0x00, 0xb5, 0x01, - 0xff, 0x43, 0x68, 0x74, 0x53, 0x33, 0x00, 0x45, 0x90, 0xe8, 0x54, 0x33, - 0x40, 0x55, 0x75, 0x3a, 0xce, 0x2a, 0x00, 0x42, 0x71, 0x00, 0x52, 0x33, - 0x00, 0x45, 0x72, 0xe8, 0x51, 0x33, 0x40, 0x42, 0x57, 0x16, 0x55, 0x33, - 0x00, 0x46, 0x9e, 0xdb, 0x56, 0x33, 0x40, 0x47, 0x58, 0x0c, 0xae, 0x33, - 0xc0, 0x00, 0x48, 0xaa, 0x05, 0xaf, 0x33, 0x40, 0xe1, 0xa9, 0x33, 0x80, + 0x00, 0xef, 0x23, 0x33, 0x40, 0x45, 0x59, 0xe7, 0x1f, 0x33, 0x00, 0x46, + 0x90, 0xde, 0x20, 0x33, 0x40, 0x42, 0xe8, 0x01, 0xad, 0x33, 0x80, 0x37, + 0xa5, 0x29, 0xa9, 0x15, 0x43, 0xbf, 0x6c, 0x1a, 0x22, 0x00, 0xb5, 0x01, + 0xff, 0x43, 0xe5, 0x75, 0x53, 0x33, 0x00, 0x45, 0xb4, 0xeb, 0x54, 0x33, + 0x40, 0x55, 0x45, 0x3b, 0xce, 0x2a, 0x00, 0x42, 0x71, 0x00, 0x52, 0x33, + 0x00, 0x45, 0x96, 0xeb, 0x51, 0x33, 0x40, 0x42, 0xc3, 0x16, 0x55, 0x33, + 0x00, 0x46, 0x96, 0xde, 0x56, 0x33, 0x40, 0x47, 0xa7, 0x0c, 0xae, 0x33, + 0xc0, 0x00, 0x48, 0xd5, 0x05, 0xaf, 0x33, 0x40, 0xe1, 0xa9, 0x33, 0x80, 0x6b, 0xe3, 0x76, 0x33, 0x00, 0xa5, 0x4b, 0xe6, 0x8a, 0x33, 0x00, 0xe8, 0xd7, 0x33, 0x00, 0xa9, 0x2e, 0xed, 0xd8, 0x33, 0x00, 0xaf, 0x16, 0x42, - 0x57, 0xbe, 0xd9, 0x33, 0x00, 0xf2, 0xda, 0x33, 0x00, 0xf3, 0xb0, 0x33, - 0x00, 0xf6, 0xb4, 0x33, 0x00, 0xf7, 0xba, 0x33, 0x40, 0x44, 0x7d, 0x13, - 0x3d, 0x33, 0x00, 0x43, 0x79, 0x0d, 0x40, 0x33, 0x00, 0x50, 0xaa, 0x65, - 0xd0, 0x2b, 0x40, 0x47, 0x59, 0xcc, 0x2e, 0x33, 0x00, 0xab, 0x01, 0xff, - 0xef, 0x30, 0x33, 0x00, 0x43, 0x7d, 0xa8, 0x2f, 0x33, 0x40, 0x43, 0x7a, - 0x99, 0x3b, 0x33, 0x00, 0xae, 0x06, 0x42, 0x35, 0x03, 0x37, 0x33, 0x40, - 0x43, 0xfd, 0xe3, 0x38, 0x33, 0x00, 0x42, 0x6f, 0x00, 0x3a, 0x33, 0x40, - 0x45, 0x86, 0xde, 0x80, 0x33, 0x00, 0xa1, 0x01, 0xff, 0x45, 0xaa, 0xe7, - 0x2b, 0x33, 0x00, 0x42, 0x5c, 0x01, 0x2c, 0x33, 0x40, 0x43, 0x6c, 0x6e, - 0x09, 0x33, 0x00, 0x43, 0xfc, 0x16, 0x0a, 0x33, 0x00, 0x4a, 0xfa, 0x2e, - 0x90, 0x22, 0x80, 0x04, 0xf6, 0x75, 0x33, 0x40, 0x04, 0x0a, 0x1e, 0x01, - 0xff, 0x48, 0xa9, 0x0c, 0x92, 0x22, 0x00, 0x4c, 0x79, 0x2a, 0xe5, 0x22, + 0xde, 0xc0, 0xd9, 0x33, 0x00, 0xf2, 0xda, 0x33, 0x00, 0xf3, 0xb0, 0x33, + 0x00, 0xf6, 0xb4, 0x33, 0x00, 0xf7, 0xba, 0x33, 0x40, 0x44, 0xcc, 0x13, + 0x3d, 0x33, 0x00, 0x43, 0xc8, 0x0d, 0x40, 0x33, 0x00, 0x50, 0x26, 0x67, + 0xd0, 0x2b, 0x40, 0x47, 0x1e, 0xcf, 0x2e, 0x33, 0x00, 0xab, 0x01, 0xff, + 0xef, 0x30, 0x33, 0x00, 0x43, 0xb9, 0xaa, 0x2f, 0x33, 0x40, 0x43, 0x95, + 0x9b, 0x3b, 0x33, 0x00, 0xae, 0x06, 0x42, 0x60, 0x03, 0x37, 0x33, 0x40, + 0x43, 0x0d, 0xe7, 0x38, 0x33, 0x00, 0x42, 0x6f, 0x00, 0x3a, 0x33, 0x40, + 0x45, 0x96, 0xe1, 0x80, 0x33, 0x00, 0xa1, 0x01, 0xff, 0x45, 0xce, 0xea, + 0x2b, 0x33, 0x00, 0x42, 0x5c, 0x01, 0x2c, 0x33, 0x40, 0x43, 0x15, 0x70, + 0x09, 0x33, 0x00, 0x43, 0x68, 0x17, 0x0a, 0x33, 0x00, 0x4a, 0xe0, 0x2f, + 0x90, 0x22, 0x80, 0x04, 0xf6, 0x75, 0x33, 0x40, 0x04, 0xac, 0x1e, 0x01, + 0xff, 0x48, 0xf8, 0x0c, 0x92, 0x22, 0x00, 0x4c, 0x02, 0x2b, 0xe5, 0x22, 0x40, 0xe1, 0x81, 0x33, 0x80, 0x1a, 0xe6, 0x8b, 0x33, 0x00, 0xed, 0x9a, - 0x33, 0x00, 0x44, 0x67, 0x0a, 0x29, 0x33, 0x00, 0xf3, 0xb1, 0x33, 0x00, + 0x33, 0x00, 0x44, 0xb6, 0x0a, 0x29, 0x33, 0x00, 0xf3, 0xb1, 0x33, 0x00, 0xf6, 0xb5, 0x33, 0x00, 0xf7, 0xbb, 0x33, 0x40, 0x42, 0xb4, 0x01, 0x28, 0x33, 0x40, 0x80, 0xcd, 0x01, 0xe1, 0x83, 0x33, 0x80, 0xa7, 0x01, 0xe2, 0x86, 0x33, 0x80, 0x9b, 0x01, 0xa5, 0x85, 0x01, 0xe7, 0x8e, 0x33, 0x00, - 0x42, 0x39, 0xa3, 0x92, 0x33, 0x00, 0xa9, 0x62, 0xec, 0x96, 0x33, 0x00, - 0xed, 0x9c, 0x33, 0x80, 0x4a, 0x42, 0x36, 0x03, 0xd6, 0x33, 0x00, 0x42, - 0x6c, 0x09, 0xab, 0x33, 0x00, 0xf3, 0xb3, 0x33, 0x00, 0x02, 0x2e, 0x02, + 0x42, 0x75, 0xa5, 0x92, 0x33, 0x00, 0xa9, 0x62, 0xec, 0x96, 0x33, 0x00, + 0xed, 0x9c, 0x33, 0x80, 0x4a, 0x42, 0x61, 0x03, 0xd6, 0x33, 0x00, 0x42, + 0xbb, 0x09, 0xab, 0x33, 0x00, 0xf3, 0xb3, 0x33, 0x00, 0x02, 0x2e, 0x02, 0x16, 0xf6, 0xb7, 0x33, 0x80, 0x0b, 0xf7, 0xbd, 0x33, 0xc0, 0x00, 0x45, - 0x6a, 0x7a, 0xbf, 0x33, 0x40, 0x45, 0x6a, 0x7a, 0xb9, 0x33, 0x40, 0xe1, + 0xcb, 0x7b, 0xbf, 0x33, 0x40, 0x45, 0xcb, 0x7b, 0xb9, 0x33, 0x40, 0xe1, 0x82, 0x33, 0x00, 0xe6, 0x8c, 0x33, 0x00, 0xe7, 0x8d, 0x33, 0x00, 0xec, 0x95, 0x33, 0x00, 0xed, 0x9b, 0x33, 0x00, 0xf3, 0xb2, 0x33, 0x00, 0xf6, - 0xb6, 0x33, 0x00, 0xf7, 0xbc, 0x33, 0x40, 0x80, 0x01, 0xff, 0x45, 0x5f, - 0xe2, 0xa3, 0x33, 0x00, 0x47, 0xab, 0x05, 0x9f, 0x33, 0x40, 0x45, 0xd5, - 0xe4, 0x48, 0x33, 0x00, 0xec, 0xd5, 0x33, 0x00, 0x42, 0x0d, 0x00, 0x49, - 0x33, 0xc0, 0x00, 0x45, 0x83, 0xe1, 0x4a, 0x33, 0x40, 0x45, 0x67, 0xd0, - 0x4d, 0x33, 0x00, 0x42, 0x24, 0x02, 0x4b, 0x33, 0xc0, 0x00, 0x43, 0x7f, - 0x13, 0x4c, 0x33, 0x40, 0x46, 0x0b, 0x07, 0xd4, 0x33, 0x40, 0x43, 0xcb, - 0x50, 0x45, 0x33, 0x00, 0xa9, 0x0c, 0x45, 0x1a, 0xe6, 0x47, 0x33, 0x00, - 0x44, 0x26, 0xef, 0x46, 0x33, 0x40, 0x44, 0xd5, 0xe4, 0x43, 0x33, 0x00, - 0x42, 0x3d, 0x00, 0x44, 0x33, 0x40, 0x45, 0x5f, 0xe2, 0xa5, 0x33, 0x00, - 0xaf, 0x06, 0x47, 0xab, 0x05, 0xa1, 0x33, 0x40, 0x42, 0x93, 0x0a, 0xc1, - 0x33, 0x00, 0x45, 0x5a, 0x0c, 0xa7, 0x33, 0xc0, 0x00, 0x48, 0xaa, 0x05, - 0xa8, 0x33, 0x40, 0x55, 0xe2, 0x39, 0xcd, 0x2a, 0x00, 0xed, 0xd0, 0x33, + 0xb6, 0x33, 0x00, 0xf7, 0xbc, 0x33, 0x40, 0x80, 0x01, 0xff, 0x45, 0x6a, + 0xe5, 0xa3, 0x33, 0x00, 0x47, 0xd6, 0x05, 0x9f, 0x33, 0x40, 0x45, 0xea, + 0xe7, 0x48, 0x33, 0x00, 0xec, 0xd5, 0x33, 0x00, 0x42, 0x0d, 0x00, 0x49, + 0x33, 0xc0, 0x00, 0x45, 0x98, 0xe4, 0x4a, 0x33, 0x40, 0x45, 0x3a, 0xd3, + 0x4d, 0x33, 0x00, 0x42, 0x24, 0x02, 0x4b, 0x33, 0xc0, 0x00, 0x43, 0xce, + 0x13, 0x4c, 0x33, 0x40, 0x46, 0x5c, 0x07, 0xd4, 0x33, 0x40, 0x43, 0x14, + 0x52, 0x45, 0x33, 0x00, 0xa9, 0x0c, 0x45, 0x3e, 0xe9, 0x47, 0x33, 0x00, + 0x44, 0x79, 0xf2, 0x46, 0x33, 0x40, 0x44, 0xea, 0xe7, 0x43, 0x33, 0x00, + 0x42, 0x3d, 0x00, 0x44, 0x33, 0x40, 0x45, 0x6a, 0xe5, 0xa5, 0x33, 0x00, + 0xaf, 0x06, 0x47, 0xd6, 0x05, 0xa1, 0x33, 0x40, 0x42, 0xe2, 0x0a, 0xc1, + 0x33, 0x00, 0x45, 0xa9, 0x0c, 0xa7, 0x33, 0xc0, 0x00, 0x48, 0xd5, 0x05, + 0xa8, 0x33, 0x40, 0x55, 0xb2, 0x3a, 0xcd, 0x2a, 0x00, 0xed, 0xd0, 0x33, 0x00, 0xee, 0xd1, 0x33, 0x00, 0xaf, 0x04, 0xf8, 0xd3, 0x33, 0x40, 0xe7, - 0xd2, 0x33, 0x00, 0x45, 0xfc, 0x09, 0x11, 0x23, 0x40, 0x44, 0x8e, 0xe9, + 0xd2, 0x33, 0x00, 0x45, 0x4b, 0x0a, 0x11, 0x23, 0x40, 0x44, 0xc1, 0xec, 0xc0, 0x33, 0x00, 0xe1, 0x84, 0x33, 0x80, 0x8d, 0x01, 0xe2, 0x85, 0x33, - 0x00, 0x43, 0x37, 0x00, 0x89, 0x33, 0x00, 0x44, 0x32, 0x1d, 0x1c, 0x33, - 0x00, 0xe7, 0x8f, 0x33, 0x00, 0x42, 0x39, 0xa3, 0x91, 0x33, 0x00, 0x43, - 0x99, 0x1f, 0x14, 0x33, 0x80, 0x5a, 0xeb, 0xcd, 0x33, 0x00, 0xec, 0x98, - 0x33, 0x00, 0xed, 0x9e, 0x33, 0x80, 0x36, 0xaf, 0x28, 0x42, 0x6c, 0x09, + 0x00, 0x43, 0x37, 0x00, 0x89, 0x33, 0x00, 0x44, 0xd4, 0x1d, 0x1c, 0x33, + 0x00, 0xe7, 0x8f, 0x33, 0x00, 0x42, 0x75, 0xa5, 0x91, 0x33, 0x00, 0x43, + 0x3b, 0x20, 0x14, 0x33, 0x80, 0x5a, 0xeb, 0xcd, 0x33, 0x00, 0xec, 0x98, + 0x33, 0x00, 0xed, 0x9e, 0x33, 0x80, 0x36, 0xaf, 0x28, 0x42, 0xbb, 0x09, 0xaa, 0x33, 0x00, 0xf4, 0xcf, 0x33, 0x00, 0x02, 0x42, 0x00, 0x0e, 0xf6, - 0xb8, 0x33, 0x00, 0xf7, 0xbe, 0x33, 0x00, 0x45, 0x6c, 0xe9, 0x12, 0x33, - 0x40, 0x44, 0x92, 0xee, 0x1b, 0x33, 0x00, 0x46, 0x08, 0xde, 0x1a, 0x33, - 0x40, 0x43, 0x6e, 0x35, 0x1e, 0x33, 0x00, 0x44, 0x2a, 0xef, 0x1d, 0x33, - 0x40, 0x80, 0x01, 0xff, 0xa3, 0x06, 0x47, 0xab, 0x05, 0xa2, 0x33, 0x40, - 0x46, 0xba, 0x05, 0xce, 0x33, 0x00, 0x44, 0x60, 0xe2, 0xa6, 0x33, 0x40, - 0x46, 0x46, 0xd9, 0x15, 0x33, 0x00, 0x47, 0x65, 0xd0, 0x16, 0x33, 0x00, - 0x45, 0x12, 0xe9, 0x17, 0x33, 0x40, 0x43, 0x95, 0x0a, 0x0b, 0x33, 0x00, - 0xb2, 0x01, 0xff, 0x44, 0xc1, 0x8a, 0x0c, 0x33, 0x00, 0x44, 0xa6, 0xee, - 0x0d, 0x33, 0x40, 0x47, 0x14, 0x42, 0x8f, 0x22, 0x80, 0x15, 0xee, 0xcc, - 0x33, 0x80, 0x04, 0xf5, 0x7a, 0x33, 0x40, 0x44, 0x26, 0xa3, 0x04, 0x33, - 0x00, 0x42, 0x35, 0x00, 0x05, 0x33, 0x40, 0x04, 0x0a, 0x1e, 0x01, 0xff, - 0x48, 0xa9, 0x0c, 0x91, 0x22, 0x00, 0x4c, 0x79, 0x2a, 0xe4, 0x22, 0x40, + 0xb8, 0x33, 0x00, 0xf7, 0xbe, 0x33, 0x00, 0x45, 0x9f, 0xec, 0x12, 0x33, + 0x40, 0x44, 0xd5, 0xf1, 0x1b, 0x33, 0x00, 0x46, 0x18, 0xe1, 0x1a, 0x33, + 0x40, 0x43, 0x3e, 0x36, 0x1e, 0x33, 0x00, 0x44, 0x7d, 0xf2, 0x1d, 0x33, + 0x40, 0x80, 0x01, 0xff, 0xa3, 0x06, 0x47, 0xd6, 0x05, 0xa2, 0x33, 0x40, + 0x46, 0xe5, 0x05, 0xce, 0x33, 0x00, 0x44, 0x6b, 0xe5, 0xa6, 0x33, 0x40, + 0x46, 0x38, 0xdc, 0x15, 0x33, 0x00, 0x47, 0x38, 0xd3, 0x16, 0x33, 0x00, + 0x45, 0x40, 0xec, 0x17, 0x33, 0x40, 0x43, 0xe4, 0x0a, 0x0b, 0x33, 0x00, + 0xb2, 0x01, 0xff, 0x44, 0x7f, 0x8c, 0x0c, 0x33, 0x00, 0x44, 0xe9, 0xf1, + 0x0d, 0x33, 0x40, 0x47, 0x21, 0x43, 0x8f, 0x22, 0x80, 0x15, 0xee, 0xcc, + 0x33, 0x80, 0x04, 0xf5, 0x7a, 0x33, 0x40, 0x44, 0x62, 0xa5, 0x04, 0x33, + 0x00, 0x42, 0x35, 0x00, 0x05, 0x33, 0x40, 0x04, 0xac, 0x1e, 0x01, 0xff, + 0x48, 0xf8, 0x0c, 0x91, 0x22, 0x00, 0x4c, 0x02, 0x2b, 0xe4, 0x22, 0x40, 0xe1, 0xca, 0x33, 0x80, 0x4c, 0xa5, 0x3e, 0xe7, 0xcc, 0x32, 0x00, 0x4c, - 0xb1, 0x8e, 0x00, 0xf2, 0x01, 0xaf, 0x21, 0xf0, 0xcb, 0x33, 0x80, 0x18, - 0xb5, 0x04, 0xfa, 0x90, 0x33, 0x40, 0x46, 0xf4, 0xd6, 0x32, 0x33, 0x00, - 0x44, 0x42, 0xed, 0x33, 0x33, 0x00, 0x43, 0x24, 0x03, 0x35, 0x33, 0x40, + 0x63, 0x90, 0x00, 0xf2, 0x01, 0xaf, 0x21, 0xf0, 0xcb, 0x33, 0x80, 0x18, + 0xb5, 0x04, 0xfa, 0x90, 0x33, 0x40, 0x46, 0xda, 0xd9, 0x32, 0x33, 0x00, + 0x44, 0x81, 0xf0, 0x33, 0x33, 0x00, 0x43, 0x4f, 0x03, 0x35, 0x33, 0x40, 0xe1, 0x71, 0x33, 0x40, 0xee, 0x3f, 0x33, 0x00, 0xaf, 0x01, 0xff, 0xee, - 0x42, 0x33, 0x00, 0x42, 0x3d, 0x00, 0x41, 0x33, 0x40, 0x47, 0xb6, 0xcf, - 0x36, 0x33, 0x00, 0x44, 0x75, 0xe8, 0x39, 0x33, 0x40, 0x43, 0x34, 0x1f, - 0x2a, 0x33, 0x40, 0xa1, 0x35, 0xe2, 0x87, 0x33, 0x00, 0x42, 0x39, 0xa3, - 0x93, 0x33, 0x00, 0xa9, 0x17, 0x42, 0x6c, 0x09, 0xac, 0x33, 0x00, 0x45, - 0x47, 0xd9, 0x18, 0x33, 0x80, 0x04, 0xf9, 0xc9, 0x33, 0x40, 0x43, 0x7f, - 0x13, 0x19, 0x33, 0x40, 0x42, 0x24, 0x02, 0x10, 0x33, 0x00, 0x43, 0x29, - 0xf1, 0x11, 0x33, 0x00, 0x45, 0x69, 0xe7, 0x13, 0x33, 0x40, 0xec, 0xff, - 0x33, 0x00, 0x43, 0x18, 0x90, 0x0f, 0x33, 0x00, 0x43, 0x62, 0x0e, 0x0e, - 0x33, 0x40, 0xed, 0x99, 0x33, 0x00, 0xaf, 0x01, 0xff, 0x42, 0xf0, 0x04, - 0xcd, 0x23, 0x00, 0x09, 0xf0, 0xbd, 0x01, 0xff, 0x80, 0x04, 0xf3, 0xf6, - 0x26, 0x40, 0x4f, 0xc4, 0x69, 0x8b, 0xcc, 0x01, 0x49, 0x65, 0xb5, 0x8a, - 0xcc, 0x01, 0x48, 0xf2, 0xc7, 0x89, 0xcc, 0x41, 0x44, 0xd5, 0x9b, 0x08, - 0x33, 0x00, 0xb2, 0x0a, 0x47, 0x3d, 0xd3, 0x07, 0x33, 0x00, 0xf6, 0xce, - 0x32, 0x40, 0x07, 0xb8, 0xcb, 0x04, 0xe7, 0xcd, 0x32, 0x40, 0x46, 0x70, - 0xd9, 0x7b, 0x33, 0x00, 0x45, 0x6b, 0xe5, 0x7e, 0x33, 0x00, 0x45, 0x23, - 0xe7, 0xff, 0x32, 0x00, 0x46, 0x42, 0xdd, 0x7c, 0x33, 0x00, 0x47, 0x59, - 0xd3, 0x7d, 0x33, 0x40, 0xe1, 0x72, 0x33, 0x80, 0x2c, 0xe2, 0xc8, 0x33, - 0x00, 0x43, 0x44, 0x0a, 0x25, 0x33, 0x00, 0xea, 0x90, 0xf1, 0x01, 0xec, - 0x97, 0x33, 0x00, 0xed, 0x77, 0x33, 0x80, 0x06, 0x43, 0x5c, 0x08, 0x26, - 0x33, 0x40, 0x80, 0x01, 0xff, 0x45, 0x5f, 0xe2, 0x79, 0x33, 0x00, 0x47, - 0xab, 0x05, 0x78, 0x33, 0x40, 0x43, 0x07, 0x18, 0x24, 0x33, 0x40, 0x48, - 0xc2, 0xbf, 0xc6, 0x33, 0x00, 0xa1, 0x2d, 0xe3, 0xc4, 0x33, 0x00, 0xe4, + 0x42, 0x33, 0x00, 0x42, 0x3d, 0x00, 0x41, 0x33, 0x40, 0x47, 0x89, 0xd2, + 0x36, 0x33, 0x00, 0x44, 0x99, 0xeb, 0x39, 0x33, 0x40, 0x43, 0xd6, 0x1f, + 0x2a, 0x33, 0x40, 0xa1, 0x35, 0xe2, 0x87, 0x33, 0x00, 0x42, 0x75, 0xa5, + 0x93, 0x33, 0x00, 0xa9, 0x17, 0x42, 0xbb, 0x09, 0xac, 0x33, 0x00, 0x45, + 0x39, 0xdc, 0x18, 0x33, 0x80, 0x04, 0xf9, 0xc9, 0x33, 0x40, 0x43, 0xce, + 0x13, 0x19, 0x33, 0x40, 0x42, 0x24, 0x02, 0x10, 0x33, 0x00, 0x43, 0x76, + 0xf4, 0x11, 0x33, 0x00, 0x45, 0x8d, 0xea, 0x13, 0x33, 0x40, 0xec, 0xff, + 0x33, 0x00, 0x43, 0xca, 0x91, 0x0f, 0x33, 0x00, 0x43, 0xb1, 0x0e, 0x0e, + 0x33, 0x40, 0xed, 0x99, 0x33, 0x00, 0xaf, 0x01, 0xff, 0x42, 0x1b, 0x05, + 0xcd, 0x23, 0x00, 0x09, 0x77, 0xc0, 0x01, 0xff, 0x80, 0x04, 0xf3, 0xf6, + 0x26, 0x40, 0x4f, 0x5e, 0x6b, 0x8b, 0xcc, 0x01, 0x49, 0xb6, 0xb7, 0x8a, + 0xcc, 0x01, 0x48, 0xa0, 0xca, 0x89, 0xcc, 0x41, 0x44, 0xfb, 0x9d, 0x08, + 0x33, 0x00, 0xb2, 0x0a, 0x47, 0x09, 0xd6, 0x07, 0x33, 0x00, 0xf6, 0xce, + 0x32, 0x40, 0x07, 0x7d, 0xce, 0x04, 0xe7, 0xcd, 0x32, 0x40, 0x46, 0x68, + 0xdc, 0x7b, 0x33, 0x00, 0x45, 0x85, 0xe8, 0x7e, 0x33, 0x00, 0x45, 0x47, + 0xea, 0xff, 0x32, 0x00, 0x46, 0x4c, 0xe0, 0x7c, 0x33, 0x00, 0x47, 0x25, + 0xd6, 0x7d, 0x33, 0x40, 0xe1, 0x72, 0x33, 0x80, 0x2c, 0xe2, 0xc8, 0x33, + 0x00, 0x43, 0x93, 0x0a, 0x25, 0x33, 0x00, 0xea, 0x90, 0xf1, 0x01, 0xec, + 0x97, 0x33, 0x00, 0xed, 0x77, 0x33, 0x80, 0x06, 0x43, 0x87, 0x08, 0x26, + 0x33, 0x40, 0x80, 0x01, 0xff, 0x45, 0x6a, 0xe5, 0x79, 0x33, 0x00, 0x47, + 0xd6, 0x05, 0x78, 0x33, 0x40, 0x43, 0x73, 0x18, 0x24, 0x33, 0x40, 0x48, + 0x40, 0xc2, 0xc6, 0x33, 0x00, 0xa1, 0x2d, 0xe3, 0xc4, 0x33, 0x00, 0xe4, 0xc5, 0x33, 0x00, 0xed, 0x9d, 0x33, 0x80, 0x11, 0xef, 0xc7, 0x33, 0x80, - 0x06, 0x42, 0x50, 0x02, 0x94, 0x22, 0x40, 0x49, 0x76, 0xbc, 0x7f, 0x33, - 0x40, 0x80, 0x01, 0xff, 0x45, 0x5f, 0xe2, 0xa4, 0x33, 0x00, 0x47, 0xab, + 0x06, 0x42, 0x50, 0x02, 0x94, 0x22, 0x40, 0x49, 0xeb, 0xbe, 0x7f, 0x33, + 0x40, 0x80, 0x01, 0xff, 0x45, 0x6a, 0xe5, 0xa4, 0x33, 0x00, 0x47, 0xd6, 0x05, 0xa0, 0x33, 0x40, 0xec, 0x88, 0x33, 0x00, 0xf0, 0x93, 0x22, 0x40, - 0xa1, 0x1c, 0x44, 0xc0, 0x10, 0x3c, 0x33, 0x00, 0x43, 0x5c, 0x7c, 0x31, - 0x33, 0x00, 0x45, 0x7e, 0xe6, 0x3e, 0x33, 0x00, 0xf1, 0xc3, 0x33, 0x00, - 0x47, 0x32, 0xd4, 0x34, 0x33, 0x40, 0x45, 0x51, 0xe1, 0x2d, 0x33, 0x00, - 0xf2, 0x74, 0x33, 0x40, 0x47, 0x0a, 0x28, 0xdf, 0x33, 0x00, 0x43, 0x3c, - 0x00, 0x03, 0x33, 0x00, 0xed, 0xc2, 0x33, 0x00, 0x44, 0x4a, 0xee, 0x02, - 0x33, 0x00, 0xb0, 0x0a, 0x45, 0x6e, 0xe7, 0x01, 0x33, 0x00, 0xf5, 0x73, - 0x33, 0x40, 0x44, 0x5c, 0x9e, 0x00, 0x33, 0x00, 0x46, 0x7a, 0xd8, 0x8c, - 0xcc, 0x41, 0xa1, 0xbf, 0x01, 0xa5, 0x6f, 0x4d, 0x0c, 0x82, 0x22, 0x22, + 0xa1, 0x1c, 0x44, 0x0f, 0x11, 0x3c, 0x33, 0x00, 0x43, 0xcb, 0x7d, 0x31, + 0x33, 0x00, 0x45, 0xa2, 0xe9, 0x3e, 0x33, 0x00, 0xf1, 0xc3, 0x33, 0x00, + 0x47, 0x05, 0xd7, 0x34, 0x33, 0x40, 0x45, 0x66, 0xe4, 0x2d, 0x33, 0x00, + 0xf2, 0x74, 0x33, 0x40, 0x47, 0xab, 0x28, 0xdf, 0x33, 0x00, 0x43, 0x3c, + 0x00, 0x03, 0x33, 0x00, 0xed, 0xc2, 0x33, 0x00, 0x44, 0x8d, 0xf1, 0x02, + 0x33, 0x00, 0xb0, 0x0a, 0x45, 0x92, 0xea, 0x01, 0x33, 0x00, 0xf5, 0x73, + 0x33, 0x40, 0x44, 0x8d, 0xa0, 0x00, 0x33, 0x00, 0x46, 0x66, 0xdb, 0x8c, + 0xcc, 0x41, 0xa1, 0xbf, 0x01, 0xa5, 0x6f, 0x4d, 0xa2, 0x83, 0x22, 0x22, 0x80, 0x57, 0xa9, 0x31, 0x02, 0x74, 0x00, 0x21, 0xaf, 0x01, 0xff, 0x43, - 0x8b, 0x09, 0xfd, 0xf9, 0x01, 0xaf, 0x0c, 0x49, 0x88, 0xbc, 0xc5, 0xf3, - 0x01, 0x4b, 0x5e, 0xa2, 0x33, 0xf4, 0x41, 0x4b, 0xf7, 0x9b, 0xf5, 0xf9, - 0x01, 0xee, 0x44, 0xf9, 0x41, 0x52, 0x08, 0x54, 0xa6, 0xf4, 0x01, 0x44, - 0xc3, 0x05, 0xdf, 0xfa, 0x41, 0x43, 0x4e, 0x1a, 0x77, 0xf5, 0x81, 0x17, - 0x04, 0xdd, 0x01, 0x01, 0xff, 0x4c, 0x69, 0x8b, 0xd3, 0xf5, 0x01, 0x48, - 0x3a, 0xc6, 0xd2, 0xf5, 0x01, 0x45, 0x0e, 0x09, 0x1a, 0xf4, 0x41, 0x44, - 0x96, 0xe9, 0x78, 0xf5, 0x41, 0x09, 0x83, 0x74, 0x01, 0xff, 0x44, 0xc3, + 0xda, 0x09, 0xfd, 0xf9, 0x01, 0xaf, 0x0c, 0x49, 0xfd, 0xbe, 0xc5, 0xf3, + 0x01, 0x4b, 0x9a, 0xa4, 0x33, 0xf4, 0x41, 0x4b, 0x1d, 0x9e, 0xf5, 0xf9, + 0x01, 0xee, 0x44, 0xf9, 0x41, 0x52, 0x51, 0x55, 0xa6, 0xf4, 0x01, 0x44, + 0xee, 0x05, 0xdf, 0xfa, 0x41, 0x43, 0xd5, 0x1a, 0x77, 0xf5, 0x81, 0x17, + 0x04, 0xdd, 0x01, 0x01, 0xff, 0x4c, 0x27, 0x8d, 0xd3, 0xf5, 0x01, 0x48, + 0xd8, 0xc8, 0xd2, 0xf5, 0x01, 0x45, 0x5d, 0x09, 0x1a, 0xf4, 0x41, 0x44, + 0xc9, 0xec, 0x78, 0xf5, 0x41, 0x09, 0x00, 0x76, 0x01, 0xff, 0x44, 0xc3, 0x00, 0xa0, 0x29, 0x00, 0x42, 0x50, 0x02, 0xa1, 0x29, 0x40, 0x02, 0x6d, - 0x00, 0x20, 0x10, 0xea, 0x5f, 0x14, 0xa5, 0x06, 0x4a, 0xcd, 0xae, 0xb7, - 0x20, 0x40, 0x4a, 0x49, 0xa6, 0xac, 0xf4, 0x01, 0x45, 0x6e, 0xe2, 0xa4, - 0xf6, 0x41, 0xd1, 0x46, 0xcc, 0x01, 0xd2, 0x47, 0xcc, 0x41, 0x4f, 0xa7, - 0x68, 0x4a, 0xf6, 0x01, 0x42, 0x33, 0x00, 0x08, 0xf5, 0x81, 0x06, 0x56, - 0xe3, 0x33, 0xe3, 0xf5, 0x41, 0x06, 0x50, 0x00, 0x01, 0xff, 0x53, 0x62, - 0x2b, 0x07, 0xf5, 0x01, 0x4e, 0xec, 0x78, 0x09, 0xf5, 0x01, 0x51, 0xf3, - 0x5c, 0x0a, 0xf5, 0x41, 0x42, 0x73, 0x02, 0x20, 0x00, 0x00, 0x46, 0x10, - 0xd9, 0x5d, 0xf3, 0x01, 0xb2, 0x01, 0xff, 0x02, 0xbb, 0x0d, 0x11, 0x03, - 0x16, 0x04, 0x01, 0xff, 0x4f, 0x76, 0x6c, 0x40, 0xcc, 0x01, 0x4d, 0x72, - 0x88, 0x41, 0xcc, 0x41, 0xe5, 0x47, 0x27, 0x80, 0x06, 0x49, 0x0e, 0x85, + 0x00, 0x20, 0x10, 0x66, 0x61, 0x14, 0xa5, 0x06, 0x4a, 0x1d, 0xb1, 0xb7, + 0x20, 0x40, 0x4a, 0x85, 0xa8, 0xac, 0xf4, 0x01, 0x45, 0x79, 0xe5, 0xa4, + 0xf6, 0x41, 0xd1, 0x46, 0xcc, 0x01, 0xd2, 0x47, 0xcc, 0x41, 0x4f, 0x32, + 0x6a, 0x4a, 0xf6, 0x01, 0x42, 0x33, 0x00, 0x08, 0xf5, 0x81, 0x06, 0x56, + 0xb3, 0x34, 0xe3, 0xf5, 0x41, 0x06, 0x50, 0x00, 0x01, 0xff, 0x53, 0x03, + 0x2c, 0x07, 0xf5, 0x01, 0x4e, 0x4d, 0x7a, 0x09, 0xf5, 0x01, 0x51, 0x5e, + 0x5e, 0x0a, 0xf5, 0x41, 0x42, 0x73, 0x02, 0x20, 0x00, 0x00, 0x46, 0x02, + 0xdc, 0x5d, 0xf3, 0x01, 0xb2, 0x01, 0xff, 0x02, 0x0a, 0x0e, 0x11, 0x03, + 0x41, 0x04, 0x01, 0xff, 0x4f, 0x1f, 0x6e, 0x40, 0xcc, 0x01, 0x4d, 0x2f, + 0x8a, 0x41, 0xcc, 0x41, 0xe5, 0x47, 0x27, 0x80, 0x06, 0x49, 0xcb, 0x86, 0x96, 0xf4, 0x41, 0xf3, 0x28, 0x27, 0x40, 0xa3, 0xca, 0x0a, 0x02, 0xc5, - 0x00, 0xa5, 0x0a, 0x06, 0xf2, 0xd0, 0xee, 0x07, 0x03, 0x6b, 0x30, 0xcf, - 0x07, 0x46, 0xcb, 0x5c, 0xc0, 0x20, 0x00, 0x5e, 0xb8, 0x13, 0x1c, 0xf5, - 0x01, 0x0b, 0x67, 0x9f, 0xda, 0x05, 0xb5, 0x89, 0x04, 0x06, 0x6e, 0xde, - 0x01, 0xff, 0x17, 0x2d, 0x2d, 0xe6, 0x03, 0x15, 0x4b, 0x3a, 0xad, 0x03, - 0x4f, 0xe0, 0x6b, 0x98, 0x1a, 0x01, 0x5b, 0x19, 0x1b, 0xa0, 0x1a, 0x81, - 0x8e, 0x03, 0x07, 0xc1, 0x05, 0x8d, 0x01, 0x05, 0xb9, 0x00, 0x71, 0xb3, - 0x4d, 0x0e, 0x46, 0x7b, 0x41, 0x06, 0x6c, 0x38, 0x01, 0xff, 0x4b, 0x72, - 0x38, 0x5b, 0x1a, 0x01, 0x05, 0x2f, 0x03, 0x01, 0xff, 0xa1, 0x27, 0xe5, + 0x00, 0xa5, 0x0a, 0x06, 0xc5, 0xd3, 0xee, 0x07, 0x03, 0x51, 0x31, 0xcf, + 0x07, 0x46, 0x36, 0x5e, 0xc0, 0x20, 0x00, 0x5e, 0x07, 0x14, 0x1c, 0xf5, + 0x01, 0x0b, 0xa3, 0xa1, 0xda, 0x05, 0xb5, 0x89, 0x04, 0x06, 0x7e, 0xe1, + 0x01, 0xff, 0x17, 0xfc, 0x2d, 0xe6, 0x03, 0x15, 0x1b, 0x3b, 0xad, 0x03, + 0x4f, 0x89, 0x6d, 0x98, 0x1a, 0x01, 0x5b, 0xa0, 0x1b, 0xa0, 0x1a, 0x81, + 0x8e, 0x03, 0x07, 0xec, 0x05, 0x8d, 0x01, 0x05, 0xb9, 0x00, 0x71, 0xb3, + 0x4d, 0x0e, 0xa7, 0x7c, 0x41, 0x06, 0x3c, 0x39, 0x01, 0xff, 0x4b, 0x42, + 0x39, 0x5b, 0x1a, 0x01, 0x05, 0x5a, 0x03, 0x01, 0xff, 0xa1, 0x27, 0xe5, 0x54, 0x1a, 0x01, 0xe9, 0x51, 0x1a, 0x01, 0xef, 0x55, 0x1a, 0x81, 0x16, - 0xf5, 0x53, 0x1a, 0x81, 0x0d, 0x08, 0x9b, 0xbe, 0x01, 0xff, 0xec, 0x5a, + 0xf5, 0x53, 0x1a, 0x81, 0x0d, 0x08, 0x22, 0xc1, 0x01, 0xff, 0xec, 0x5a, 0x1a, 0x01, 0xf2, 0x59, 0x1a, 0x41, 0xe5, 0x52, 0x1a, 0x41, 0xe5, 0x56, 0x1a, 0x41, 0xe9, 0x57, 0x1a, 0x01, 0xf5, 0x58, 0x1a, 0x41, 0xd1, 0xa1, - 0x1a, 0x01, 0xd2, 0xa2, 0x1a, 0x41, 0x04, 0x30, 0x03, 0x06, 0x48, 0x3a, - 0xc9, 0x99, 0x1a, 0x41, 0x48, 0xd0, 0x15, 0x96, 0x1a, 0x01, 0x4b, 0xc0, - 0x9b, 0x84, 0x1a, 0x01, 0x4b, 0x32, 0xa2, 0x85, 0x1a, 0x01, 0x47, 0xa1, - 0x4a, 0x97, 0x1a, 0x41, 0x4b, 0x2c, 0x99, 0x9c, 0x1a, 0x01, 0x45, 0xce, - 0xe6, 0x9d, 0x1a, 0x01, 0x44, 0xa4, 0x02, 0x9b, 0x1a, 0x01, 0x45, 0x59, - 0x39, 0x9a, 0x1a, 0x41, 0x42, 0x2e, 0x25, 0x7a, 0x1a, 0x01, 0xe1, 0x50, + 0x1a, 0x01, 0xd2, 0xa2, 0x1a, 0x41, 0x04, 0x5b, 0x03, 0x06, 0x48, 0xf0, + 0xcb, 0x99, 0x1a, 0x41, 0x48, 0x3c, 0x16, 0x96, 0x1a, 0x01, 0x4b, 0xe6, + 0x9d, 0x84, 0x1a, 0x01, 0x4b, 0x6e, 0xa4, 0x85, 0x1a, 0x01, 0x47, 0xea, + 0x4b, 0x97, 0x1a, 0x41, 0x4b, 0x47, 0x9b, 0x9c, 0x1a, 0x01, 0x45, 0xf2, + 0xe9, 0x9d, 0x1a, 0x01, 0x44, 0xa4, 0x02, 0x9b, 0x1a, 0x01, 0x45, 0x29, + 0x3a, 0x9a, 0x1a, 0x41, 0x42, 0xcf, 0x25, 0x7a, 0x1a, 0x01, 0xe1, 0x50, 0x1a, 0x01, 0xa2, 0xe5, 0x01, 0xa3, 0xd8, 0x01, 0xa4, 0xb9, 0x01, 0xa7, 0xac, 0x01, 0x42, 0x22, 0x00, 0x82, 0x1a, 0x01, 0xaa, 0x99, 0x01, 0xab, 0x86, 0x01, 0x42, 0x74, 0x00, 0x7d, 0x1a, 0x01, 0x42, 0x6c, 0x00, 0x74, 0x1a, 0x01, 0xae, 0x62, 0xb0, 0x56, 0x42, 0x71, 0x00, 0x7c, 0x1a, 0x01, - 0xb3, 0x3e, 0xb4, 0x19, 0x42, 0xa6, 0x0a, 0x7e, 0x1a, 0x01, 0x42, 0x34, + 0xb3, 0x3e, 0xb4, 0x19, 0x42, 0xf5, 0x0a, 0x7e, 0x1a, 0x01, 0x42, 0xbc, 0x22, 0x7b, 0x1a, 0x01, 0xba, 0x01, 0xff, 0xe1, 0x79, 0x1a, 0x01, 0x42, 0x22, 0x00, 0x78, 0x1a, 0x41, 0xe1, 0x6b, 0x1a, 0x01, 0x42, 0x22, 0x00, 0x6c, 0x1a, 0x01, 0xb3, 0x0d, 0xb4, 0x01, 0xff, 0xe1, 0x66, 0x1a, 0x01, 0x42, 0x22, 0x00, 0x67, 0x1a, 0x41, 0xe1, 0x75, 0x1a, 0x01, 0x42, 0x22, 0x00, 0x76, 0x1a, 0x41, 0xe1, 0x81, 0x1a, 0x01, 0x42, 0x22, 0x00, 0x7f, - 0x1a, 0x01, 0x42, 0x15, 0x06, 0x80, 0x1a, 0x41, 0xe1, 0x70, 0x1a, 0x01, + 0x1a, 0x01, 0x42, 0x40, 0x06, 0x80, 0x1a, 0x41, 0xe1, 0x70, 0x1a, 0x01, 0x42, 0x22, 0x00, 0x71, 0x1a, 0x41, 0xe1, 0x6f, 0x1a, 0x01, 0x42, 0x24, - 0x02, 0x60, 0x1a, 0x01, 0x42, 0xff, 0x04, 0x6a, 0x1a, 0x01, 0x42, 0x34, + 0x02, 0x60, 0x1a, 0x01, 0x42, 0x2a, 0x05, 0x6a, 0x1a, 0x01, 0x42, 0xbc, 0x22, 0x65, 0x1a, 0x41, 0xe1, 0x5c, 0x1a, 0x01, 0x42, 0x22, 0x00, 0x5d, - 0x1a, 0x01, 0x43, 0x59, 0x20, 0x83, 0x1a, 0x41, 0xe1, 0x63, 0x1a, 0x01, + 0x1a, 0x01, 0x43, 0xfb, 0x20, 0x83, 0x1a, 0x41, 0xe1, 0x63, 0x1a, 0x01, 0x42, 0x22, 0x00, 0x64, 0x1a, 0x41, 0xe1, 0x5e, 0x1a, 0x01, 0x42, 0x22, 0x00, 0x5f, 0x1a, 0x41, 0xe1, 0x6d, 0x1a, 0x01, 0xa4, 0x0c, 0x42, 0x22, 0x00, 0x6e, 0x1a, 0x01, 0x42, 0x59, 0x00, 0x77, 0x1a, 0x41, 0xe1, 0x68, 0x1a, 0x01, 0x42, 0x22, 0x00, 0x69, 0x1a, 0x41, 0xe1, 0x61, 0x1a, 0x01, 0x42, 0x22, 0x00, 0x62, 0x1a, 0x41, 0xe1, 0x72, 0x1a, 0x01, 0x42, 0x22, - 0x00, 0x73, 0x1a, 0x41, 0x05, 0x19, 0x00, 0x01, 0xff, 0x45, 0x40, 0x94, - 0x9f, 0x1a, 0x01, 0x4c, 0x39, 0x94, 0x9e, 0x1a, 0x41, 0x42, 0x2e, 0x25, + 0x00, 0x73, 0x1a, 0x41, 0x05, 0x19, 0x00, 0x01, 0xff, 0x45, 0x22, 0x96, + 0x9f, 0x1a, 0x01, 0x4c, 0x1b, 0x96, 0x9e, 0x1a, 0x41, 0x42, 0xcf, 0x25, 0x95, 0x1a, 0x01, 0xe2, 0x8f, 0x1a, 0x01, 0xe4, 0x8d, 0x1a, 0x01, 0xe7, 0x8a, 0x1a, 0x01, 0xeb, 0x8b, 0x1a, 0x01, 0xec, 0x92, 0x1a, 0x01, 0xed, 0x90, 0x1a, 0x01, 0xee, 0x8e, 0x1a, 0x81, 0x0d, 0xf2, 0x91, 0x1a, 0x01, 0xf3, 0x94, 0x1a, 0xc1, 0x00, 0xe8, 0x93, 0x1a, 0x41, 0xe7, 0x8c, 0x1a, 0x41, 0x42, 0x74, 0x00, 0x87, 0x1a, 0x01, 0x42, 0x71, 0x00, 0x86, 0x1a, 0x01, 0xb3, 0x01, 0xff, 0xe1, 0x89, 0x1a, 0x01, 0x42, 0x22, 0x00, 0x88, - 0x1a, 0x41, 0x56, 0xeb, 0x34, 0x17, 0x21, 0x00, 0x03, 0x53, 0x00, 0x01, - 0xff, 0x05, 0x25, 0x23, 0x5c, 0x05, 0x37, 0x1a, 0x01, 0xff, 0x45, 0xce, - 0x00, 0x99, 0x21, 0x80, 0x3b, 0x4b, 0x95, 0x97, 0x0b, 0x2b, 0x00, 0x4c, - 0x71, 0x8c, 0xd9, 0x21, 0x00, 0x09, 0x9c, 0x01, 0x19, 0x50, 0x6a, 0x65, - 0x57, 0xf8, 0x01, 0x55, 0x01, 0x02, 0x69, 0x2b, 0x80, 0x06, 0x4b, 0xfa, - 0x0f, 0x03, 0x2b, 0x40, 0x47, 0x81, 0x14, 0x79, 0x2b, 0x40, 0x43, 0xa7, - 0xcd, 0x61, 0xf6, 0x01, 0x44, 0xf0, 0x4f, 0x51, 0xf6, 0x01, 0x49, 0x89, - 0xbe, 0x59, 0xf6, 0x41, 0x80, 0x01, 0xff, 0x54, 0x6b, 0x3f, 0x2a, 0x29, - 0x00, 0x48, 0xfd, 0xb1, 0xbb, 0xf8, 0x01, 0x49, 0x20, 0x24, 0x26, 0x29, - 0x40, 0x45, 0xce, 0x00, 0x98, 0x21, 0x80, 0x3b, 0x4b, 0x95, 0x97, 0x0a, - 0x2b, 0x00, 0x4c, 0x71, 0x8c, 0xd8, 0x21, 0x00, 0x09, 0x9c, 0x01, 0x19, - 0x50, 0x6a, 0x65, 0x56, 0xf8, 0x01, 0x55, 0x01, 0x02, 0x68, 0x2b, 0x80, - 0x06, 0x4b, 0xfa, 0x0f, 0x02, 0x2b, 0x40, 0x47, 0x81, 0x14, 0x78, 0x2b, - 0x40, 0x43, 0xa7, 0xcd, 0x63, 0xf6, 0x01, 0x44, 0xf0, 0x4f, 0x53, 0xf6, - 0x01, 0x49, 0x89, 0xbe, 0x5b, 0xf6, 0x41, 0x80, 0x01, 0xff, 0x54, 0x93, - 0x3f, 0x29, 0x29, 0x00, 0x59, 0x16, 0x23, 0x2d, 0x29, 0x00, 0x48, 0xfd, - 0xb1, 0xba, 0xf8, 0x01, 0x49, 0x60, 0xbd, 0xf2, 0x21, 0x00, 0x49, 0x20, - 0x24, 0x25, 0x29, 0x40, 0x06, 0xc4, 0x06, 0x9d, 0x01, 0x07, 0xc1, 0x05, - 0x01, 0xff, 0x42, 0xc9, 0x09, 0xe2, 0x10, 0x01, 0x43, 0x17, 0x4d, 0xd2, - 0x10, 0x01, 0x43, 0xb1, 0xf0, 0xd3, 0x10, 0x01, 0x43, 0xdf, 0x77, 0xd4, - 0x10, 0x01, 0xa5, 0x74, 0x43, 0x0c, 0xba, 0xd5, 0x10, 0x01, 0x43, 0x84, - 0x20, 0xde, 0x10, 0x01, 0x42, 0xec, 0x18, 0xe4, 0x10, 0x01, 0x43, 0x0b, - 0xf1, 0xe0, 0x10, 0x01, 0x43, 0xa5, 0x46, 0xdf, 0x10, 0x01, 0x43, 0xcb, - 0x17, 0xd8, 0x10, 0x01, 0x02, 0x6c, 0x00, 0x44, 0xae, 0x30, 0x42, 0x5c, - 0x28, 0xe6, 0x10, 0x01, 0x43, 0xe9, 0x41, 0xdb, 0x10, 0x01, 0x43, 0xd2, - 0x17, 0xdd, 0x10, 0x01, 0x43, 0xf8, 0xc3, 0xd0, 0x10, 0x01, 0x43, 0xc8, - 0x09, 0xd1, 0x10, 0x01, 0x42, 0x5e, 0x74, 0xe5, 0x10, 0x01, 0x43, 0xc2, - 0xd2, 0xda, 0x10, 0x01, 0x43, 0x62, 0x49, 0xdc, 0x10, 0x41, 0x42, 0xc9, - 0x09, 0xd9, 0x10, 0x01, 0x43, 0x0c, 0xba, 0xd7, 0x10, 0x01, 0x43, 0x62, - 0x49, 0xe1, 0x10, 0x41, 0xe5, 0xe8, 0x10, 0x01, 0xe8, 0xd6, 0x10, 0x41, - 0x42, 0x4e, 0x00, 0xe3, 0x10, 0x01, 0xe8, 0xe7, 0x10, 0x41, 0x45, 0xc3, - 0x0a, 0xf8, 0x10, 0x01, 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0xf9, 0x10, 0x01, - 0x43, 0xbf, 0x0a, 0xf1, 0x10, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xa1, - 0x1d, 0xf0, 0x10, 0x41, 0x44, 0x25, 0x01, 0xf3, 0x10, 0x01, 0x42, 0x15, - 0x02, 0xf2, 0x10, 0x41, 0x44, 0x27, 0x1d, 0xf7, 0x10, 0x01, 0x42, 0x60, - 0x25, 0xf6, 0x10, 0x41, 0x43, 0xa7, 0x05, 0xf5, 0x10, 0x01, 0x43, 0xcb, - 0x06, 0xf4, 0x10, 0x41, 0x56, 0x2c, 0x24, 0x6a, 0xf6, 0x81, 0x0d, 0x42, - 0xc4, 0x02, 0x2f, 0x00, 0xc0, 0x00, 0x4d, 0x71, 0x7e, 0xf6, 0x29, 0x40, - 0x50, 0xef, 0x10, 0x6b, 0xf6, 0x41, 0x0a, 0xd6, 0x57, 0xda, 0x01, 0x50, - 0x6a, 0x62, 0x45, 0x0f, 0x01, 0x07, 0xc1, 0x05, 0x49, 0x07, 0x2f, 0x39, - 0x29, 0x0c, 0x01, 0x16, 0x01, 0xff, 0x4f, 0xb4, 0x41, 0x57, 0x0f, 0x01, - 0x54, 0xaf, 0x41, 0x59, 0x0f, 0x01, 0x04, 0xd0, 0x09, 0x01, 0xff, 0x51, - 0xb4, 0x57, 0x58, 0x0f, 0x01, 0x4d, 0x65, 0x88, 0x55, 0x0f, 0xc1, 0x00, - 0x4a, 0xbb, 0x57, 0x56, 0x0f, 0x41, 0x43, 0xbf, 0x0a, 0x51, 0x0f, 0x81, - 0x0f, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0x52, 0x0f, 0x01, 0x45, 0xde, - 0x2b, 0x53, 0x0f, 0x41, 0x48, 0x21, 0x11, 0x54, 0x0f, 0x41, 0xa1, 0x79, - 0x44, 0x0a, 0xec, 0x31, 0x0f, 0x01, 0x44, 0x86, 0xec, 0x43, 0x0f, 0x01, - 0x45, 0xa1, 0xa8, 0x32, 0x0f, 0x01, 0x42, 0xb0, 0x01, 0x33, 0x0f, 0x81, - 0x5a, 0x44, 0x8e, 0xed, 0x38, 0x0f, 0x01, 0xac, 0x46, 0x43, 0x89, 0x05, - 0x3a, 0x0f, 0x01, 0x43, 0x54, 0x22, 0x3b, 0x0f, 0x01, 0x42, 0x6f, 0x02, - 0x3e, 0x0f, 0x01, 0x49, 0xfa, 0x64, 0x40, 0x0f, 0x01, 0xb3, 0x18, 0x43, - 0x1e, 0xc2, 0x42, 0x0f, 0x01, 0x43, 0xc0, 0x88, 0x34, 0x0f, 0x01, 0x44, - 0x58, 0x51, 0x37, 0x0f, 0x01, 0x45, 0x52, 0x51, 0x35, 0x0f, 0x41, 0xa1, - 0x06, 0x43, 0x0e, 0x16, 0x41, 0x0f, 0x41, 0x43, 0x89, 0xe7, 0x3f, 0x0f, - 0x01, 0x44, 0x39, 0xe1, 0x3c, 0x0f, 0x41, 0x45, 0x59, 0xd9, 0x39, 0x0f, - 0x01, 0x43, 0x28, 0x59, 0x44, 0x0f, 0x41, 0x42, 0x53, 0x00, 0x36, 0x0f, - 0x41, 0x44, 0x48, 0x3c, 0x30, 0x0f, 0x01, 0x43, 0xf7, 0x19, 0x3d, 0x0f, - 0x41, 0x06, 0x4c, 0x13, 0x43, 0x04, 0xb4, 0x0b, 0x33, 0x05, 0x60, 0x14, - 0x23, 0x4f, 0x38, 0x6e, 0x4e, 0x0f, 0x01, 0x4a, 0xc9, 0xad, 0x4f, 0x0f, - 0x01, 0x4c, 0x76, 0x0e, 0x50, 0x0f, 0x01, 0x09, 0xa2, 0x0b, 0x01, 0xff, - 0x45, 0x5c, 0x00, 0x49, 0x0f, 0x01, 0x45, 0xf5, 0x06, 0x47, 0x0f, 0x41, - 0x45, 0x5c, 0x00, 0x4c, 0x0f, 0x01, 0x45, 0xf5, 0x06, 0x4d, 0x0f, 0x41, - 0x45, 0x5c, 0x00, 0x48, 0x0f, 0x01, 0x45, 0xf5, 0x06, 0x46, 0x0f, 0x41, - 0x45, 0x5c, 0x00, 0x4a, 0x0f, 0x01, 0x45, 0xf5, 0x06, 0x4b, 0x0f, 0x41, - 0x80, 0x0c, 0x44, 0x46, 0x1c, 0x4e, 0xf9, 0x01, 0x54, 0x6f, 0x45, 0x94, - 0x23, 0x40, 0x46, 0x1a, 0x62, 0xad, 0x00, 0x00, 0x49, 0x93, 0xb7, 0x66, - 0xf3, 0x01, 0x51, 0x81, 0x38, 0xac, 0xf5, 0x41, 0x48, 0x12, 0xc2, 0xbd, - 0x26, 0x00, 0x42, 0x6e, 0x00, 0xe6, 0xf9, 0x41, 0xa1, 0x2a, 0x4b, 0x79, - 0x99, 0x27, 0xf9, 0x01, 0x02, 0xd1, 0x00, 0x01, 0xff, 0x50, 0x9a, 0x5e, - 0xd4, 0xf3, 0x01, 0x47, 0xc2, 0xcc, 0xc2, 0xf3, 0x01, 0x45, 0x0e, 0x2e, - 0x44, 0x27, 0x00, 0x43, 0xd5, 0x17, 0x03, 0x26, 0xc0, 0x00, 0x4d, 0x8b, - 0x7e, 0xc4, 0x26, 0x40, 0x42, 0x62, 0x01, 0x0c, 0xf4, 0x01, 0x42, 0x37, - 0x01, 0x0d, 0xf4, 0x41, 0xa1, 0x86, 0x01, 0xa9, 0x06, 0x4c, 0x02, 0x7b, - 0xac, 0xf6, 0x41, 0xac, 0x06, 0x4a, 0x23, 0xae, 0x0f, 0xf6, 0x41, 0xe5, - 0x23, 0x23, 0x00, 0x04, 0xa1, 0x01, 0x01, 0xff, 0x0e, 0xc0, 0x1e, 0x5d, - 0x0a, 0xe1, 0x07, 0x01, 0xff, 0xa8, 0x44, 0x4a, 0x9b, 0x28, 0x03, 0xf6, - 0x81, 0x26, 0xb3, 0x06, 0x44, 0xd3, 0x0c, 0x72, 0xf9, 0x41, 0x4b, 0xcf, - 0x1e, 0x0a, 0xf6, 0x81, 0x06, 0x49, 0xcc, 0xbd, 0x0e, 0xf6, 0x41, 0x05, - 0x19, 0x00, 0x01, 0xff, 0x53, 0x81, 0x48, 0x2d, 0xf9, 0x01, 0x4c, 0x09, - 0x94, 0x70, 0xf9, 0x41, 0x05, 0x19, 0x00, 0x01, 0xff, 0x4a, 0x74, 0x74, - 0x05, 0xf6, 0x01, 0x4c, 0xce, 0x1e, 0x04, 0xf6, 0x01, 0x53, 0x4a, 0x4c, - 0x06, 0xf6, 0x41, 0x43, 0x78, 0x4c, 0x07, 0xf6, 0x01, 0x50, 0x1a, 0x59, - 0x0d, 0xf6, 0x01, 0x44, 0x2c, 0x7e, 0x08, 0xf6, 0x41, 0x51, 0x19, 0x59, - 0x3b, 0xf6, 0x01, 0x4a, 0x9b, 0x28, 0x3a, 0xf6, 0x41, 0x02, 0x0f, 0x07, - 0x06, 0x4a, 0xe0, 0x4d, 0x33, 0x2a, 0x40, 0x80, 0x0d, 0x47, 0x04, 0xce, - 0xaa, 0x2a, 0xc0, 0x00, 0x4c, 0x51, 0x28, 0xac, 0x2a, 0x40, 0xa1, 0xfc, - 0x02, 0x4c, 0x15, 0x8b, 0x39, 0xf5, 0x01, 0x02, 0xe8, 0x04, 0xc1, 0x02, - 0x4b, 0xf5, 0x98, 0x69, 0xfe, 0x00, 0xa5, 0x8e, 0x02, 0x49, 0x15, 0x16, - 0x52, 0xfe, 0x00, 0x51, 0xf7, 0x58, 0x65, 0xfe, 0x00, 0x4c, 0x15, 0x8e, - 0x63, 0xfe, 0x00, 0x51, 0x7f, 0x59, 0x51, 0xfe, 0x00, 0x02, 0x68, 0x00, - 0xd5, 0x01, 0x4b, 0x12, 0x9e, 0x5f, 0xfe, 0x00, 0x4e, 0x24, 0x79, 0x38, - 0xf5, 0x01, 0xb0, 0xba, 0x01, 0x4d, 0xd6, 0x33, 0x56, 0xfe, 0x00, 0xb2, - 0x20, 0x49, 0xac, 0xbc, 0x54, 0xfe, 0x00, 0xb4, 0x0c, 0x54, 0x33, 0x45, - 0xfa, 0xcd, 0x01, 0x51, 0xbf, 0x5d, 0x61, 0x2a, 0x40, 0x44, 0xae, 0x22, - 0xdc, 0x02, 0x00, 0x60, 0xa3, 0x0b, 0x3b, 0x0b, 0x41, 0x4e, 0xcd, 0x70, - 0x68, 0xfe, 0x00, 0x05, 0xc9, 0x00, 0x76, 0x0d, 0x18, 0x85, 0x01, 0xff, - 0xa5, 0x63, 0xa6, 0x46, 0x44, 0x46, 0x2a, 0x78, 0x21, 0x00, 0x43, 0xbf, - 0x0a, 0x70, 0x21, 0x80, 0x2a, 0xb3, 0x1c, 0xb4, 0x01, 0xff, 0x42, 0x92, - 0x01, 0x79, 0x21, 0x00, 0x44, 0x25, 0x01, 0x72, 0x21, 0x00, 0xb7, 0x01, - 0xff, 0x44, 0x46, 0x2b, 0x7b, 0x21, 0x00, 0xef, 0x71, 0x21, 0x40, 0x44, - 0x27, 0x1d, 0x76, 0x21, 0x00, 0x42, 0x60, 0x25, 0x75, 0x21, 0x40, 0x80, - 0x01, 0xff, 0x47, 0x22, 0x11, 0x7d, 0x21, 0x00, 0x48, 0xd5, 0x5c, 0x7f, - 0x21, 0x40, 0xa9, 0x06, 0x43, 0xcb, 0x06, 0x73, 0x21, 0x40, 0x43, 0x09, - 0x4c, 0x7c, 0x21, 0x00, 0x42, 0x32, 0x00, 0x74, 0x21, 0xc0, 0x00, 0x48, - 0x21, 0x11, 0x7e, 0x21, 0x40, 0x44, 0xc9, 0x00, 0x77, 0x21, 0x00, 0x45, - 0x0b, 0x6e, 0x7a, 0x21, 0x40, 0x4d, 0x23, 0x0b, 0x5c, 0xfe, 0x00, 0x4b, - 0x50, 0x21, 0x5a, 0xfe, 0x00, 0x56, 0x05, 0x09, 0x5e, 0xfe, 0x40, 0x4b, - 0xc6, 0x99, 0x6a, 0xfe, 0x00, 0x48, 0x46, 0x70, 0x62, 0xfe, 0x40, 0x03, - 0xc5, 0x00, 0x06, 0x4c, 0x9d, 0x93, 0x64, 0xfe, 0x40, 0x4d, 0x23, 0x0b, - 0x5b, 0xfe, 0x00, 0x4b, 0x50, 0x21, 0x59, 0xfe, 0x00, 0x56, 0x05, 0x09, - 0x5d, 0xfe, 0x40, 0x49, 0xa0, 0x90, 0x0a, 0x22, 0x80, 0x12, 0x46, 0x3c, - 0xc0, 0x58, 0xfe, 0x00, 0x4a, 0xfa, 0x12, 0x66, 0xfe, 0x00, 0x4f, 0xae, - 0x00, 0x57, 0xfe, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x47, 0x77, 0x7e, - 0xf7, 0x22, 0x00, 0x68, 0x05, 0x05, 0xf4, 0x22, 0x40, 0x43, 0x03, 0x12, - 0x55, 0xfe, 0x00, 0x02, 0xea, 0x04, 0x1c, 0x07, 0xfc, 0x67, 0x01, 0xff, - 0x49, 0x06, 0xb4, 0x0d, 0x22, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x47, - 0x77, 0x7e, 0xfe, 0x22, 0x00, 0x68, 0x05, 0x05, 0xfc, 0x22, 0x40, 0xe1, - 0x50, 0xfe, 0x00, 0x49, 0x34, 0xb6, 0x6b, 0xfe, 0x40, 0x47, 0x42, 0x33, - 0xe9, 0xf6, 0x01, 0x48, 0x2e, 0x3d, 0x60, 0xfe, 0x00, 0x47, 0xee, 0x0c, - 0x61, 0xfe, 0x40, 0xa1, 0x6c, 0xa5, 0x40, 0xa9, 0x27, 0xaf, 0x01, 0xff, - 0xb0, 0x0d, 0xb4, 0x01, 0xff, 0x48, 0x36, 0x47, 0xb0, 0xf3, 0x01, 0xe8, - 0xa5, 0xf9, 0x41, 0xe5, 0x33, 0x23, 0x00, 0x0a, 0x91, 0xa9, 0x01, 0xff, - 0x43, 0x1a, 0x00, 0x58, 0x2a, 0x00, 0x42, 0x0c, 0x00, 0x57, 0x2a, 0x40, - 0x4b, 0xed, 0x97, 0x55, 0xf3, 0x01, 0x06, 0x2a, 0x78, 0x01, 0xff, 0x4d, - 0x7d, 0x81, 0x41, 0xf6, 0x01, 0x4c, 0x91, 0x93, 0x42, 0xf6, 0x41, 0xe4, - 0xf7, 0xf6, 0x01, 0x02, 0x9c, 0x0a, 0x06, 0x4a, 0xd5, 0xb0, 0x75, 0xf5, - 0x41, 0x04, 0xa1, 0x01, 0x06, 0x46, 0xb2, 0xd2, 0x2a, 0xf6, 0x41, 0x4d, - 0xcc, 0x7e, 0xcc, 0xf6, 0x01, 0x44, 0xe1, 0x07, 0x34, 0xf6, 0x01, 0x46, - 0xeb, 0x07, 0xa4, 0xf4, 0x41, 0x05, 0x76, 0x00, 0x06, 0x4e, 0x22, 0x7d, - 0x73, 0xa6, 0x40, 0x0c, 0xe5, 0x27, 0x11, 0x13, 0x6f, 0x4a, 0x01, 0xff, - 0x49, 0x87, 0xba, 0x5a, 0x2b, 0x00, 0x4d, 0x36, 0x86, 0x5c, 0x2b, 0x40, - 0x4c, 0x87, 0x00, 0x96, 0x2a, 0x80, 0x0d, 0x49, 0xec, 0x00, 0x95, 0x2a, - 0xc0, 0x00, 0x50, 0x2a, 0x5f, 0x97, 0x2a, 0x40, 0x50, 0x2a, 0x5f, 0x98, - 0x2a, 0x40, 0x48, 0x3a, 0xc1, 0xf9, 0xf6, 0x01, 0xa9, 0x16, 0xb5, 0x01, - 0xff, 0x42, 0x0f, 0x07, 0x80, 0xf4, 0x81, 0x06, 0x42, 0x12, 0x25, 0xa8, - 0xf9, 0x41, 0x4f, 0x7c, 0x49, 0x20, 0x26, 0x40, 0x4d, 0xae, 0x7d, 0xbf, - 0xf3, 0x01, 0x42, 0x33, 0x00, 0xf7, 0x26, 0x40, 0xa4, 0xbc, 0x31, 0x02, - 0x31, 0x03, 0xf0, 0x07, 0x51, 0x5c, 0x5a, 0xfe, 0xf5, 0x01, 0x06, 0x24, - 0xcf, 0xbe, 0x07, 0xae, 0x30, 0xb8, 0x01, 0xff, 0x02, 0x9b, 0x01, 0x0c, - 0x4d, 0xbf, 0x7e, 0x06, 0x20, 0x00, 0x55, 0x69, 0x3d, 0x3a, 0x27, 0x40, - 0x60, 0x45, 0x0f, 0x3e, 0x27, 0x00, 0x07, 0x09, 0x08, 0x01, 0xff, 0x4a, - 0x53, 0x2b, 0x36, 0x27, 0x00, 0x4d, 0xd9, 0x12, 0xcd, 0xf7, 0x01, 0x54, - 0xcf, 0x44, 0x2f, 0xf5, 0x41, 0x46, 0x26, 0xd8, 0x3f, 0x22, 0x00, 0x03, - 0x06, 0x02, 0xc1, 0x06, 0x05, 0xc2, 0xe3, 0x01, 0xff, 0x08, 0x27, 0x7f, - 0xa4, 0x05, 0xac, 0xae, 0x01, 0x56, 0x9b, 0x35, 0xf4, 0x0d, 0x00, 0x05, - 0x2f, 0x03, 0x89, 0x01, 0x0b, 0xd1, 0x75, 0x01, 0xff, 0x4a, 0x8c, 0x6a, - 0xcf, 0x0d, 0x00, 0x05, 0x87, 0x6a, 0x52, 0x02, 0x24, 0x02, 0x42, 0xab, - 0x01, 0xff, 0x05, 0x6a, 0xb6, 0x29, 0x04, 0x9b, 0xcf, 0x01, 0xff, 0x45, - 0x9a, 0xde, 0xdb, 0x0d, 0x00, 0x42, 0xa6, 0x0a, 0xd9, 0x0d, 0xc0, 0x00, - 0x05, 0xa9, 0xde, 0x01, 0xff, 0x4a, 0x8c, 0x6a, 0xdc, 0x0d, 0x00, 0x4f, - 0x87, 0x6a, 0xdd, 0x0d, 0x00, 0x4b, 0x29, 0x9a, 0xde, 0x0d, 0x40, 0x4a, - 0x3b, 0xa5, 0xd0, 0x0d, 0x00, 0x48, 0xa2, 0xc4, 0xd2, 0x0d, 0x00, 0x49, - 0x71, 0xbb, 0xd4, 0x0d, 0x40, 0x4a, 0xe3, 0xa7, 0xd8, 0x0d, 0x00, 0x49, - 0x2b, 0x9a, 0xdf, 0x0d, 0x40, 0x4a, 0x3b, 0xa5, 0xd1, 0x0d, 0x00, 0x02, - 0x24, 0x02, 0x12, 0x48, 0xa2, 0xc4, 0xd3, 0x0d, 0x00, 0x47, 0x9a, 0xcf, - 0xda, 0x0d, 0x00, 0x49, 0x71, 0xbb, 0xd6, 0x0d, 0x40, 0x4a, 0xe3, 0xa7, - 0xf2, 0x0d, 0x00, 0x49, 0x2b, 0x9a, 0xf3, 0x0d, 0x40, 0xa1, 0x0c, 0x4b, - 0x4f, 0x23, 0x81, 0x0d, 0x00, 0x49, 0x92, 0xbe, 0x83, 0x0d, 0x40, 0x48, - 0xea, 0xc4, 0xca, 0x0d, 0x00, 0x49, 0x5a, 0xba, 0x82, 0x0d, 0x40, 0x06, - 0xc2, 0x05, 0x47, 0x0a, 0xd7, 0xa9, 0x01, 0xff, 0x45, 0xc3, 0x0a, 0xee, - 0x0d, 0x00, 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0xef, 0x0d, 0x00, 0x43, 0xbf, - 0x0a, 0xe7, 0x0d, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xa1, 0x1d, 0xe6, - 0x0d, 0x40, 0x44, 0x25, 0x01, 0xe9, 0x0d, 0x00, 0x42, 0x15, 0x02, 0xe8, - 0x0d, 0x40, 0x44, 0x27, 0x1d, 0xed, 0x0d, 0x00, 0x42, 0x60, 0x25, 0xec, - 0x0d, 0x40, 0x43, 0xa7, 0x05, 0xeb, 0x0d, 0x00, 0x43, 0xcb, 0x06, 0xea, - 0x0d, 0x40, 0xa1, 0xb4, 0x02, 0x08, 0x7a, 0xc2, 0x9d, 0x02, 0xa5, 0x8e, - 0x02, 0x47, 0x3c, 0xce, 0xc6, 0x0d, 0x00, 0x47, 0xa5, 0xce, 0xc4, 0x0d, - 0x00, 0xa9, 0xd3, 0x01, 0x52, 0xda, 0x51, 0x9e, 0x0d, 0x00, 0xad, 0x67, - 0xaf, 0x59, 0x47, 0x5d, 0xd2, 0xbb, 0x0d, 0x00, 0x08, 0xfa, 0xc7, 0x35, - 0x08, 0xa2, 0xc8, 0x1a, 0xb5, 0x0c, 0x47, 0x5c, 0xd4, 0xc0, 0x0d, 0x00, - 0x47, 0xfd, 0xd4, 0xba, 0x0d, 0x40, 0x46, 0x02, 0xde, 0x8c, 0x0d, 0x00, - 0x45, 0xdd, 0x67, 0x8b, 0x0d, 0x40, 0x4a, 0xe2, 0x51, 0xa4, 0x0d, 0x00, - 0x02, 0x15, 0x06, 0x01, 0xff, 0x52, 0xc4, 0x52, 0xa5, 0x0d, 0x00, 0x45, - 0xdd, 0x67, 0xc1, 0x0d, 0x40, 0xa4, 0x0c, 0x47, 0x5f, 0xce, 0x9f, 0x0d, - 0x00, 0x47, 0x5b, 0xcf, 0xa6, 0x0d, 0x40, 0x46, 0x25, 0x9d, 0xb3, 0x0d, - 0x00, 0x47, 0x71, 0xcd, 0xac, 0x0d, 0x40, 0x46, 0xdc, 0x67, 0x95, 0x0d, - 0x00, 0x45, 0xdd, 0x67, 0x94, 0x0d, 0x40, 0xa1, 0x17, 0x09, 0x38, 0xbe, - 0x01, 0xff, 0x47, 0xe7, 0xcf, 0xc5, 0x0d, 0x00, 0x47, 0x9d, 0xd0, 0xab, - 0x0d, 0x00, 0x47, 0xdb, 0xd2, 0xc2, 0x0d, 0x40, 0x0a, 0xc9, 0xa8, 0x06, - 0x45, 0xdd, 0x67, 0xb8, 0x0d, 0x40, 0x47, 0x24, 0x9d, 0xb7, 0x0d, 0x00, - 0x47, 0x01, 0xcd, 0xa1, 0x0d, 0x00, 0xa4, 0x27, 0x47, 0x5f, 0xce, 0x9d, - 0x0d, 0x00, 0x47, 0x5b, 0xcf, 0xa3, 0x0d, 0x00, 0x47, 0x7e, 0xcf, 0x9b, - 0x0d, 0x00, 0x47, 0xbc, 0xd1, 0xb5, 0x0d, 0x00, 0xb4, 0x01, 0xff, 0x46, - 0x25, 0x9d, 0xae, 0x0d, 0x00, 0x47, 0x6e, 0xd3, 0xa8, 0x0d, 0x40, 0x46, - 0x25, 0x9d, 0xb0, 0x0d, 0x00, 0x47, 0x71, 0xcd, 0xaa, 0x0d, 0x40, 0x46, - 0x54, 0xda, 0x8a, 0x0d, 0x00, 0x02, 0x5b, 0x15, 0x16, 0x02, 0x3d, 0x00, - 0x06, 0x45, 0xdd, 0x67, 0x89, 0x0d, 0x40, 0x46, 0x02, 0xde, 0x8e, 0x0d, - 0x00, 0x45, 0xdd, 0x67, 0x8d, 0x0d, 0x40, 0x46, 0x02, 0xde, 0x90, 0x0d, - 0x00, 0x45, 0xdd, 0x67, 0x8f, 0x0d, 0x40, 0x46, 0xb6, 0xd8, 0x92, 0x0d, - 0x00, 0x45, 0xdd, 0x67, 0x91, 0x0d, 0x40, 0x47, 0xe7, 0xcf, 0xbd, 0x0d, - 0x00, 0x47, 0x9d, 0xd0, 0xb1, 0x0d, 0x00, 0x47, 0xdb, 0xd2, 0xc3, 0x0d, - 0x40, 0x46, 0x25, 0x9d, 0x86, 0x0d, 0x00, 0xa5, 0x5d, 0x46, 0x54, 0xda, - 0x93, 0x0d, 0x00, 0x0a, 0x21, 0xab, 0x12, 0x4b, 0x20, 0x9d, 0xb9, 0x0d, - 0x00, 0x46, 0x02, 0xde, 0x96, 0x0d, 0x00, 0x45, 0xdd, 0x67, 0x85, 0x0d, - 0x40, 0x47, 0x24, 0x9d, 0xb6, 0x0d, 0x00, 0x47, 0x01, 0xcd, 0xa0, 0x0d, - 0x00, 0xa4, 0x27, 0x47, 0x5f, 0xce, 0x9c, 0x0d, 0x00, 0x47, 0x5b, 0xcf, - 0xa2, 0x0d, 0x00, 0x47, 0x7e, 0xcf, 0x9a, 0x0d, 0x00, 0x47, 0xbc, 0xd1, - 0xb4, 0x0d, 0x00, 0xb4, 0x01, 0xff, 0x46, 0x25, 0x9d, 0xad, 0x0d, 0x00, - 0x47, 0x6e, 0xd3, 0xa7, 0x0d, 0x40, 0x46, 0x25, 0x9d, 0xaf, 0x0d, 0x00, - 0x47, 0x71, 0xcd, 0xa9, 0x0d, 0x40, 0x46, 0xb6, 0xd8, 0x88, 0x0d, 0x00, - 0x45, 0xdd, 0x67, 0x87, 0x0d, 0x40, 0x06, 0xc4, 0x06, 0x52, 0x07, 0x2f, - 0x39, 0x01, 0xff, 0x46, 0x44, 0xd8, 0xf1, 0x11, 0x01, 0xa6, 0x39, 0x46, - 0x0b, 0x2c, 0xf2, 0x11, 0x01, 0x04, 0xbf, 0x0a, 0x23, 0xb3, 0x15, 0xb4, - 0x01, 0xff, 0x42, 0x92, 0x01, 0xea, 0x11, 0x01, 0x45, 0x2b, 0x11, 0xec, - 0x11, 0x01, 0x45, 0xde, 0x2b, 0xeb, 0x11, 0x41, 0x46, 0x27, 0x1d, 0xf0, - 0x11, 0x01, 0x44, 0x4e, 0xda, 0xef, 0x11, 0x41, 0x47, 0x22, 0x11, 0xf3, - 0x11, 0x01, 0x48, 0xd5, 0x5c, 0xf4, 0x11, 0x41, 0x44, 0x08, 0x4c, 0xee, - 0x11, 0x01, 0x44, 0x85, 0x50, 0xed, 0x11, 0x41, 0x45, 0xc3, 0x0a, 0xe8, - 0x11, 0x01, 0xa6, 0x29, 0x44, 0x46, 0x2a, 0xe9, 0x11, 0x01, 0x43, 0xbf, - 0x0a, 0xe1, 0x11, 0x01, 0xb3, 0x0f, 0xb4, 0x01, 0xff, 0x44, 0x25, 0x01, - 0xe3, 0x11, 0x01, 0x42, 0x15, 0x02, 0xe2, 0x11, 0x41, 0x44, 0x27, 0x1d, - 0xe7, 0x11, 0x01, 0x42, 0x60, 0x25, 0xe6, 0x11, 0x41, 0x43, 0xa7, 0x05, - 0xe5, 0x11, 0x01, 0x43, 0xcb, 0x06, 0xe4, 0x11, 0x41, 0x80, 0x0d, 0x07, - 0x10, 0xcb, 0x01, 0xff, 0xd2, 0x8e, 0x00, 0x00, 0xd3, 0x8f, 0x00, 0x40, - 0x54, 0x0b, 0x40, 0x9a, 0x00, 0x00, 0x5e, 0x04, 0x13, 0x1b, 0x20, 0x00, - 0xac, 0x17, 0x63, 0x38, 0x0b, 0x3a, 0x20, 0x00, 0x07, 0xfe, 0xd2, 0x01, - 0xff, 0x44, 0x25, 0x01, 0x8f, 0x00, 0x00, 0x42, 0x15, 0x02, 0x8e, 0x00, - 0x40, 0x61, 0x9b, 0x0d, 0x39, 0x20, 0x00, 0x53, 0xbb, 0x4a, 0x1a, 0x20, - 0x40, 0x06, 0x5c, 0x00, 0x17, 0x4d, 0x48, 0x84, 0x6c, 0x2a, 0x00, 0x03, - 0x9d, 0x07, 0x01, 0xff, 0x4c, 0x87, 0x00, 0x9e, 0x2a, 0x00, 0x49, 0xec, - 0x00, 0x9d, 0x2a, 0x40, 0x5e, 0xe6, 0x12, 0xa0, 0x2a, 0x00, 0x5b, 0xbb, - 0x1b, 0x9f, 0x2a, 0x40, 0x4d, 0x23, 0x7e, 0x18, 0xf9, 0x01, 0x08, 0xe2, - 0xc9, 0x01, 0xff, 0x04, 0x83, 0x8b, 0x96, 0x29, 0x02, 0x14, 0x09, 0xea, - 0x28, 0xa3, 0xc2, 0x28, 0xa4, 0xd7, 0x27, 0xa5, 0xf8, 0x25, 0xa6, 0xec, - 0x24, 0x06, 0x3a, 0xd9, 0xd5, 0x24, 0xa8, 0xc7, 0x14, 0xac, 0xc2, 0x13, - 0x02, 0x98, 0x07, 0x8c, 0x06, 0xae, 0xe3, 0x05, 0x4b, 0x50, 0x21, 0x8b, - 0xda, 0x01, 0xb2, 0xdf, 0x03, 0xb3, 0xe1, 0x02, 0xb4, 0x0c, 0x62, 0xf5, - 0x0c, 0x75, 0xda, 0x01, 0x5b, 0x6b, 0x1d, 0x6f, 0xda, 0x41, 0xa5, 0x84, - 0x02, 0xaf, 0x92, 0x01, 0x06, 0x70, 0xdc, 0x01, 0xff, 0x0b, 0x35, 0x48, - 0x52, 0x0a, 0x6b, 0x1d, 0x01, 0xff, 0x0b, 0x1c, 0x97, 0x37, 0x09, 0x6d, - 0xbc, 0x06, 0x47, 0xf7, 0xd2, 0x51, 0xd9, 0x41, 0x0b, 0x35, 0x48, 0x17, - 0x0a, 0x6b, 0x1d, 0x01, 0xff, 0x4b, 0xa8, 0x58, 0x4d, 0xd9, 0x01, 0x46, - 0x3b, 0x01, 0x4c, 0xd9, 0x01, 0x46, 0x90, 0x09, 0x4b, 0xd9, 0x41, 0x4b, - 0xa8, 0x58, 0x50, 0xd9, 0x01, 0x46, 0x3b, 0x01, 0x4f, 0xd9, 0x01, 0x46, - 0x90, 0x09, 0x4e, 0xd9, 0x41, 0x46, 0x3b, 0x01, 0x53, 0xd9, 0x01, 0x46, - 0x90, 0x09, 0x52, 0xd9, 0x01, 0x46, 0xc8, 0x1c, 0x54, 0xd9, 0x41, 0x09, - 0x6d, 0xbc, 0x06, 0x47, 0xf7, 0xd2, 0x87, 0xd9, 0x41, 0x0b, 0x35, 0x48, - 0x17, 0x0a, 0x6b, 0x1d, 0x01, 0xff, 0x4b, 0xa8, 0x58, 0x86, 0xd9, 0x01, - 0x46, 0x3b, 0x01, 0x85, 0xd9, 0x01, 0x46, 0x90, 0x09, 0x84, 0xd9, 0x41, - 0x4b, 0xa8, 0x58, 0x83, 0xd9, 0x01, 0x46, 0x3b, 0x01, 0x82, 0xd9, 0x01, - 0x46, 0x90, 0x09, 0x81, 0xd9, 0x41, 0x05, 0xf7, 0xe5, 0x32, 0x04, 0x1a, - 0xef, 0x17, 0x04, 0xb7, 0xe5, 0x01, 0xff, 0x47, 0x71, 0x09, 0x07, 0xd9, - 0x01, 0x48, 0x53, 0x43, 0x06, 0xd9, 0x01, 0x46, 0x90, 0x09, 0x05, 0xd9, - 0x41, 0x53, 0x35, 0x48, 0x74, 0xda, 0x01, 0x0a, 0x6b, 0x1d, 0x01, 0xff, - 0x4b, 0x9d, 0x98, 0x73, 0xda, 0x01, 0x50, 0x0a, 0x66, 0x72, 0xda, 0x41, - 0x07, 0x73, 0x02, 0x29, 0x54, 0x4f, 0x42, 0x5d, 0xda, 0x01, 0x4c, 0x71, - 0x8f, 0x5a, 0xda, 0x01, 0x53, 0xea, 0x49, 0x5e, 0xda, 0x01, 0x50, 0xfa, - 0x65, 0x59, 0xda, 0x01, 0x04, 0xfa, 0x0b, 0x01, 0xff, 0x4c, 0xf1, 0x8a, - 0x5b, 0xda, 0x01, 0x55, 0xa8, 0x3d, 0x5c, 0xda, 0x41, 0x4c, 0xb1, 0x3d, - 0x60, 0xda, 0x01, 0x4c, 0xfa, 0x65, 0x5f, 0xda, 0x41, 0x43, 0x39, 0x25, - 0x61, 0xda, 0x81, 0x17, 0x0b, 0xfc, 0x9d, 0x01, 0xff, 0x44, 0xf9, 0x0a, - 0x2d, 0xda, 0x01, 0x43, 0x13, 0x01, 0x2f, 0xda, 0x01, 0x46, 0x7d, 0x02, - 0x2e, 0xda, 0x41, 0x80, 0x01, 0xff, 0x49, 0x60, 0xb4, 0x67, 0xda, 0x01, - 0x48, 0xa7, 0x5c, 0x62, 0xda, 0x01, 0x03, 0xb6, 0x00, 0x01, 0xff, 0x44, - 0xdf, 0x1a, 0x65, 0xda, 0x81, 0x0d, 0x46, 0x34, 0x66, 0x63, 0xda, 0xc1, - 0x00, 0x49, 0xa6, 0x5c, 0x64, 0xda, 0x41, 0x49, 0xa6, 0x5c, 0x66, 0xda, - 0x41, 0x48, 0x6f, 0x58, 0x89, 0xda, 0x01, 0x08, 0x76, 0x1d, 0x5b, 0x07, - 0x33, 0xd2, 0x27, 0x06, 0xa8, 0xdd, 0x11, 0x07, 0x24, 0xd4, 0x01, 0xff, - 0x47, 0x71, 0x09, 0x15, 0xd9, 0x01, 0x47, 0xeb, 0x07, 0x14, 0xd9, 0x41, - 0x47, 0x71, 0x09, 0x0d, 0xd9, 0x01, 0x48, 0x53, 0x43, 0x0c, 0xd9, 0x01, - 0x46, 0x90, 0x09, 0x0b, 0xd9, 0x41, 0x51, 0xa2, 0x58, 0x20, 0xd9, 0x01, - 0x06, 0xa0, 0x1b, 0x1a, 0xb3, 0x01, 0xff, 0x49, 0xba, 0x6a, 0x1a, 0xd9, - 0x01, 0x05, 0x0d, 0x07, 0x01, 0xff, 0x48, 0x53, 0x43, 0x19, 0xd9, 0x01, - 0x46, 0x90, 0x09, 0x17, 0xd9, 0x41, 0x48, 0x53, 0x43, 0x18, 0xd9, 0x01, - 0x46, 0x90, 0x09, 0x16, 0xd9, 0x41, 0x04, 0x0d, 0x0d, 0x06, 0x52, 0x62, - 0x54, 0x71, 0xda, 0x41, 0x49, 0xb0, 0xbb, 0x6e, 0xda, 0x01, 0x45, 0xe6, - 0xe7, 0x6d, 0xda, 0x41, 0x07, 0xf0, 0x04, 0x17, 0x03, 0x2d, 0x4c, 0x01, - 0xff, 0x47, 0x71, 0x09, 0x13, 0xd9, 0x01, 0x48, 0x53, 0x43, 0x12, 0xd9, - 0x01, 0x46, 0x90, 0x09, 0x11, 0xd9, 0x41, 0x0a, 0xa3, 0x8f, 0x9d, 0x01, - 0x8d, 0x01, 0xff, 0x0b, 0x35, 0x48, 0x4e, 0x0a, 0x6b, 0x1d, 0x01, 0xff, - 0x08, 0xa2, 0x11, 0x30, 0x46, 0x3b, 0x01, 0xa3, 0xd9, 0x81, 0x18, 0x46, - 0x90, 0x09, 0xa2, 0xd9, 0xc1, 0x00, 0x09, 0x92, 0x25, 0x01, 0xff, 0x45, - 0x19, 0xe2, 0xb1, 0xd9, 0x01, 0x4a, 0x3d, 0xa8, 0xaa, 0xd9, 0x41, 0x09, - 0x92, 0x25, 0x01, 0xff, 0x45, 0x19, 0xe2, 0xb2, 0xd9, 0x01, 0x4a, 0x3d, - 0xa8, 0xab, 0xd9, 0x41, 0xe5, 0xa4, 0xd9, 0x01, 0x0c, 0x75, 0x8e, 0x01, - 0xff, 0x45, 0x19, 0xe2, 0xb3, 0xd9, 0x01, 0x4a, 0x3d, 0xa8, 0xac, 0xd9, - 0x41, 0x4b, 0xa8, 0x58, 0xe1, 0xd9, 0x81, 0x30, 0x46, 0x3b, 0x01, 0xe0, - 0xd9, 0x81, 0x18, 0x46, 0x90, 0x09, 0xdf, 0xd9, 0xc1, 0x00, 0x09, 0x92, - 0x25, 0x01, 0xff, 0x47, 0x0a, 0xc2, 0xc3, 0xd9, 0x01, 0x45, 0xd0, 0x23, - 0xd2, 0xd9, 0x41, 0x09, 0x92, 0x25, 0x01, 0xff, 0x47, 0x0a, 0xc2, 0xc4, - 0xd9, 0x01, 0x45, 0xd0, 0x23, 0xd3, 0xd9, 0x41, 0x09, 0x92, 0x25, 0x01, - 0xff, 0x47, 0x0a, 0xc2, 0xc5, 0xd9, 0x01, 0x45, 0xd0, 0x23, 0xd4, 0xd9, - 0x41, 0x91, 0x20, 0xd2, 0xa1, 0xda, 0x01, 0xd3, 0xa2, 0xda, 0x01, 0xd4, - 0xa3, 0xda, 0x01, 0xd5, 0xa4, 0xda, 0x01, 0xd6, 0xa5, 0xda, 0x01, 0xd7, - 0xa6, 0xda, 0x01, 0xd8, 0xa7, 0xda, 0x01, 0xd9, 0xa8, 0xda, 0x41, 0xd0, - 0xa9, 0xda, 0x01, 0xd1, 0xaa, 0xda, 0x01, 0xd2, 0xab, 0xda, 0x01, 0xd3, - 0xac, 0xda, 0x01, 0xd4, 0xad, 0xda, 0x01, 0xd5, 0xae, 0xda, 0x01, 0xd6, - 0xaf, 0xda, 0x41, 0x43, 0x20, 0x14, 0x6a, 0xda, 0x01, 0x04, 0xaa, 0x16, - 0x01, 0xff, 0x47, 0x40, 0xcd, 0x32, 0xda, 0x01, 0x47, 0x8e, 0x8c, 0x31, - 0xda, 0x01, 0xb7, 0x01, 0xff, 0x46, 0xd6, 0xd9, 0x34, 0xda, 0x01, 0x47, - 0xdb, 0xbe, 0x33, 0xda, 0x41, 0x04, 0x01, 0x20, 0xe1, 0x0b, 0x07, 0x6a, - 0xd4, 0x01, 0xff, 0x09, 0x42, 0x25, 0xdd, 0x0a, 0x0b, 0x35, 0x48, 0xd5, - 0x05, 0x06, 0x8e, 0xd9, 0x99, 0x05, 0x0a, 0x6b, 0x1d, 0x01, 0xff, 0x0b, - 0x7d, 0x26, 0xee, 0x04, 0xa2, 0xbe, 0x04, 0xa3, 0x80, 0x03, 0x07, 0x3b, - 0x01, 0xe2, 0x02, 0x08, 0xc8, 0x1a, 0xc7, 0x02, 0x05, 0x17, 0xe4, 0xa0, - 0x02, 0x43, 0x20, 0x98, 0x68, 0xda, 0x01, 0x05, 0x25, 0xe5, 0xec, 0x01, - 0x06, 0x0a, 0xdc, 0xd5, 0x01, 0xb3, 0xa4, 0x01, 0x07, 0xc8, 0x1c, 0x86, - 0x01, 0xb7, 0x17, 0x07, 0x11, 0x33, 0x01, 0xff, 0x45, 0xa0, 0x1b, 0x47, - 0xd9, 0x01, 0x46, 0x19, 0x04, 0x46, 0xd9, 0x01, 0x45, 0x0c, 0x07, 0x45, - 0xd9, 0x41, 0x04, 0x8f, 0x22, 0x11, 0x12, 0x8a, 0x53, 0x01, 0xff, 0x46, - 0x3b, 0x01, 0xee, 0xd9, 0x01, 0x46, 0x90, 0x09, 0xed, 0xd9, 0x41, 0x06, - 0x4c, 0x13, 0x27, 0x0e, 0x6c, 0x75, 0x11, 0x08, 0x93, 0x25, 0x01, 0xff, - 0x45, 0x19, 0xe2, 0xb0, 0xd9, 0x01, 0x4a, 0x3d, 0xa8, 0xa9, 0xd9, 0x41, - 0x45, 0xa0, 0x1b, 0xb6, 0xd9, 0x01, 0x46, 0x19, 0x04, 0xb5, 0xd9, 0x01, - 0x45, 0x0c, 0x07, 0xb4, 0xd9, 0x41, 0x07, 0x3b, 0x01, 0x17, 0x07, 0xc8, - 0x1c, 0x01, 0xff, 0x45, 0xa0, 0x1b, 0x9e, 0xd9, 0x01, 0x46, 0x19, 0x04, - 0x9d, 0xd9, 0x01, 0x45, 0x0c, 0x07, 0x9c, 0xd9, 0x41, 0x45, 0xa0, 0x1b, - 0x9b, 0xd9, 0x01, 0x46, 0x19, 0x04, 0x9a, 0xd9, 0x01, 0x45, 0x0c, 0x07, - 0x99, 0xd9, 0x41, 0x4b, 0xa8, 0x58, 0x36, 0xd9, 0x81, 0x0c, 0x51, 0x9e, - 0x5c, 0x34, 0xd9, 0x01, 0x4a, 0x57, 0x96, 0x35, 0xd9, 0x41, 0x4b, 0x56, - 0x96, 0x37, 0xd9, 0x41, 0x46, 0x1c, 0x6c, 0xa5, 0xd9, 0x01, 0x06, 0x91, - 0x09, 0x01, 0xff, 0x09, 0xeb, 0x4b, 0x06, 0x4a, 0x57, 0x96, 0x2e, 0xd9, - 0x41, 0x45, 0xa0, 0x1b, 0x2c, 0xd9, 0x81, 0x0c, 0x46, 0x19, 0x04, 0x2b, - 0xd9, 0x01, 0x45, 0x0c, 0x07, 0x2a, 0xd9, 0x41, 0x42, 0x60, 0x01, 0x2d, - 0xd9, 0x41, 0x45, 0xa0, 0x1b, 0x4a, 0xd9, 0x01, 0x46, 0x19, 0x04, 0x49, - 0xd9, 0x01, 0x45, 0x0c, 0x07, 0x48, 0xd9, 0x41, 0x08, 0x93, 0x25, 0x19, - 0x45, 0xa0, 0x1b, 0x97, 0xd9, 0x01, 0x46, 0x19, 0x04, 0x96, 0xd9, 0x01, - 0x45, 0x0c, 0x07, 0x95, 0xd9, 0xc1, 0x00, 0x47, 0x3a, 0x01, 0x98, 0xd9, - 0x41, 0x45, 0x19, 0xe2, 0xaf, 0xd9, 0x01, 0x4a, 0x3d, 0xa8, 0xa8, 0xd9, - 0x41, 0x08, 0x93, 0x25, 0x12, 0x45, 0xa0, 0x1b, 0x94, 0xd9, 0x01, 0x46, - 0x19, 0x04, 0x93, 0xd9, 0x01, 0x45, 0x0c, 0x07, 0x92, 0xd9, 0x41, 0x45, - 0x19, 0xe2, 0xae, 0xd9, 0x01, 0x4a, 0x3d, 0xa8, 0xa7, 0xd9, 0x41, 0x07, - 0x8b, 0x42, 0x06, 0x46, 0x41, 0xcd, 0x28, 0xd9, 0x41, 0x46, 0x3b, 0x01, - 0xf2, 0xd9, 0x01, 0x46, 0x90, 0x09, 0xf1, 0xd9, 0x41, 0x4b, 0xa8, 0x58, - 0x31, 0xd9, 0x81, 0x0c, 0x48, 0xeb, 0x4b, 0x2f, 0xd9, 0x01, 0x4a, 0x57, - 0x96, 0x30, 0xd9, 0x41, 0x4b, 0x56, 0x96, 0x32, 0xd9, 0x41, 0x05, 0x68, - 0xa6, 0xa4, 0x01, 0x06, 0xcf, 0x0a, 0x87, 0x01, 0x44, 0x47, 0x10, 0x33, - 0xd9, 0x01, 0x04, 0x4d, 0x13, 0x01, 0xff, 0x80, 0x11, 0x08, 0x6a, 0xc2, - 0x01, 0xff, 0x46, 0x19, 0x04, 0xa1, 0xd9, 0x01, 0x45, 0x0c, 0x07, 0xa0, - 0xd9, 0x41, 0xa8, 0x39, 0x08, 0xd9, 0x02, 0x1c, 0x02, 0x53, 0x00, 0x01, - 0xff, 0x4b, 0x84, 0x99, 0x9f, 0xd9, 0x01, 0x13, 0x40, 0x4b, 0x01, 0xff, - 0x46, 0x19, 0x04, 0x91, 0xd9, 0x01, 0x45, 0x0c, 0x07, 0x90, 0xd9, 0x41, - 0x45, 0xa0, 0x1b, 0x8a, 0xd9, 0x81, 0x0c, 0x46, 0x19, 0x04, 0x89, 0xd9, - 0x01, 0x45, 0x0c, 0x07, 0x88, 0xd9, 0x41, 0x42, 0x60, 0x01, 0x8b, 0xd9, - 0x41, 0x0b, 0x20, 0x2c, 0x11, 0x07, 0x94, 0x25, 0x01, 0xff, 0x45, 0x19, - 0xe2, 0xad, 0xd9, 0x01, 0x4a, 0x3d, 0xa8, 0xa6, 0xd9, 0x41, 0x45, 0xa0, - 0x1b, 0x8e, 0xd9, 0x81, 0x0c, 0x46, 0x19, 0x04, 0x8d, 0xd9, 0x01, 0x45, - 0x0c, 0x07, 0x8c, 0xd9, 0x41, 0x42, 0x60, 0x01, 0x8f, 0xd9, 0x41, 0x45, - 0xa0, 0x1b, 0x3d, 0xd9, 0x01, 0x46, 0x19, 0x04, 0x3c, 0xd9, 0x01, 0x48, - 0xf1, 0x5e, 0x3e, 0xd9, 0x01, 0x45, 0x0c, 0x07, 0x3b, 0xd9, 0x41, 0x45, - 0xa0, 0x1b, 0x41, 0xd9, 0x01, 0x46, 0x19, 0x04, 0x40, 0xd9, 0x01, 0x45, - 0x0c, 0x07, 0x3f, 0xd9, 0x41, 0x04, 0x15, 0x05, 0x17, 0x03, 0xec, 0x39, - 0x01, 0xff, 0x45, 0xa0, 0x1b, 0x44, 0xd9, 0x01, 0x46, 0x19, 0x04, 0x43, - 0xd9, 0x01, 0x45, 0x0c, 0x07, 0x42, 0xd9, 0x41, 0x45, 0xa0, 0x1b, 0x3a, - 0xd9, 0x01, 0x46, 0x19, 0x04, 0x39, 0xd9, 0x01, 0x45, 0x0c, 0x07, 0x38, - 0xd9, 0x41, 0x07, 0x19, 0x04, 0x11, 0x06, 0x0c, 0x07, 0x01, 0xff, 0x46, - 0x3b, 0x01, 0xe5, 0xd9, 0x01, 0x46, 0x90, 0x09, 0xe3, 0xd9, 0x41, 0x46, - 0x3b, 0x01, 0xe6, 0xd9, 0x01, 0x46, 0x90, 0x09, 0xe4, 0xd9, 0x41, 0x4f, - 0xb4, 0x6a, 0x24, 0xd9, 0x01, 0x55, 0x54, 0x3d, 0x27, 0xd9, 0x01, 0x03, - 0x11, 0x15, 0x01, 0xff, 0x05, 0x4f, 0x14, 0x06, 0x4a, 0xb9, 0x6a, 0x23, - 0xd9, 0x41, 0x0c, 0x6d, 0x8a, 0x0c, 0x45, 0xa0, 0x1b, 0x21, 0xd9, 0x01, - 0x45, 0x0c, 0x07, 0x22, 0xd9, 0x41, 0x45, 0xa0, 0x1b, 0x25, 0xd9, 0x01, - 0x45, 0x0c, 0x07, 0x26, 0xd9, 0x41, 0x18, 0x7d, 0x26, 0xcd, 0x04, 0xa2, - 0xad, 0x04, 0xa3, 0xbf, 0x03, 0x07, 0x3b, 0x01, 0xa1, 0x03, 0x08, 0xc8, - 0x1a, 0x86, 0x03, 0x05, 0x17, 0xe4, 0xb0, 0x02, 0x43, 0x20, 0x98, 0x69, - 0xda, 0x01, 0x05, 0x25, 0xe5, 0xd0, 0x01, 0x06, 0x0a, 0xdc, 0xb9, 0x01, - 0xb3, 0x88, 0x01, 0x07, 0xc8, 0x1c, 0x68, 0xb7, 0x17, 0x07, 0x11, 0x33, - 0x01, 0xff, 0x45, 0xa0, 0x1b, 0x7d, 0xd9, 0x01, 0x46, 0x19, 0x04, 0x7c, - 0xd9, 0x01, 0x45, 0x0c, 0x07, 0x7b, 0xd9, 0x41, 0x04, 0x8f, 0x22, 0x11, - 0x19, 0x87, 0x25, 0x01, 0xff, 0x46, 0x3b, 0x01, 0xf0, 0xd9, 0x01, 0x46, - 0x90, 0x09, 0xef, 0xd9, 0x41, 0x08, 0x93, 0x25, 0x15, 0x45, 0xa0, 0x1b, - 0xde, 0xd9, 0x01, 0xb3, 0x01, 0xff, 0x44, 0x0d, 0x07, 0xdd, 0xd9, 0x01, - 0x44, 0xa8, 0x2d, 0xdc, 0xd9, 0x41, 0x08, 0x0a, 0xc2, 0x11, 0x06, 0xd0, - 0x23, 0x01, 0xff, 0x45, 0xa0, 0x1b, 0xd1, 0xd9, 0x01, 0x45, 0x0c, 0x07, - 0xd0, 0xd9, 0x41, 0x45, 0xa0, 0x1b, 0xc2, 0xd9, 0x01, 0x45, 0x0c, 0x07, - 0xc1, 0xd9, 0x41, 0x0c, 0x6d, 0x8a, 0x0c, 0x51, 0x9e, 0x5c, 0x6f, 0xd9, - 0x01, 0x4a, 0x57, 0x96, 0x70, 0xd9, 0x41, 0x48, 0xa7, 0x5c, 0x71, 0xd9, - 0x01, 0x4a, 0x57, 0x96, 0x72, 0xd9, 0x41, 0x4f, 0x1c, 0x6c, 0xe2, 0xd9, - 0x01, 0x06, 0x91, 0x09, 0x01, 0xff, 0x09, 0xeb, 0x4b, 0x06, 0x4a, 0x57, - 0x96, 0x69, 0xd9, 0x41, 0x45, 0xa0, 0x1b, 0x67, 0xd9, 0x81, 0x0c, 0x46, - 0x19, 0x04, 0x66, 0xd9, 0x01, 0x45, 0x0c, 0x07, 0x65, 0xd9, 0x41, 0x42, - 0x60, 0x01, 0x68, 0xd9, 0x41, 0x45, 0xa0, 0x1b, 0x80, 0xd9, 0x01, 0x46, - 0x19, 0x04, 0x7f, 0xd9, 0x01, 0x45, 0x0c, 0x07, 0x7e, 0xd9, 0x41, 0x08, - 0x93, 0x25, 0x06, 0x45, 0x0c, 0x07, 0xdb, 0xd9, 0x41, 0x08, 0x0a, 0xc2, - 0x26, 0x06, 0xd0, 0x23, 0x01, 0xff, 0x06, 0xa0, 0x1b, 0x11, 0x06, 0x0c, - 0x07, 0x01, 0xff, 0x46, 0x3b, 0x01, 0xce, 0xd9, 0x01, 0x46, 0x90, 0x09, - 0xcc, 0xd9, 0x41, 0x46, 0x3b, 0x01, 0xcf, 0xd9, 0x01, 0x46, 0x90, 0x09, - 0xcd, 0xd9, 0x41, 0x06, 0xa0, 0x1b, 0x11, 0x06, 0x0c, 0x07, 0x01, 0xff, - 0x46, 0x3b, 0x01, 0xbf, 0xd9, 0x01, 0x46, 0x90, 0x09, 0xbd, 0xd9, 0x41, - 0x46, 0x3b, 0x01, 0xc0, 0xd9, 0x01, 0x46, 0x90, 0x09, 0xbe, 0xd9, 0x41, - 0x08, 0x93, 0x25, 0x06, 0x45, 0x0c, 0x07, 0xda, 0xd9, 0x41, 0x08, 0x0a, - 0xc2, 0x22, 0x06, 0xd0, 0x23, 0x01, 0xff, 0x4c, 0x11, 0x8f, 0xc9, 0xd9, - 0x01, 0x4c, 0x79, 0x93, 0xc8, 0xd9, 0x01, 0x07, 0xc8, 0x1c, 0x01, 0xff, - 0x4c, 0x1d, 0x8f, 0xcb, 0xd9, 0x01, 0x4c, 0x85, 0x93, 0xca, 0xd9, 0x41, - 0x06, 0xa0, 0x1b, 0x11, 0x06, 0x0c, 0x07, 0x01, 0xff, 0x46, 0x3b, 0x01, - 0xb9, 0xd9, 0x01, 0x46, 0xc8, 0x1c, 0xbb, 0xd9, 0x41, 0x46, 0x3b, 0x01, - 0xba, 0xd9, 0x01, 0x46, 0xc8, 0x1c, 0xbc, 0xd9, 0x41, 0x14, 0x8b, 0x42, - 0x06, 0x46, 0x41, 0xcd, 0x29, 0xd9, 0x41, 0x46, 0x3b, 0x01, 0xf4, 0xd9, - 0x01, 0x46, 0x90, 0x09, 0xf3, 0xd9, 0x41, 0x4b, 0xa8, 0x58, 0x6c, 0xd9, - 0x81, 0x0c, 0x48, 0xeb, 0x4b, 0x6a, 0xd9, 0x01, 0x4a, 0x57, 0x96, 0x6b, - 0xd9, 0x41, 0x4b, 0x56, 0x96, 0x6d, 0xd9, 0x41, 0x44, 0x1f, 0x14, 0x77, - 0xd9, 0x01, 0x06, 0xcf, 0x0a, 0x4f, 0x44, 0x47, 0x10, 0x6e, 0xd9, 0x01, - 0x05, 0x4d, 0x13, 0x01, 0xff, 0x48, 0x3a, 0xc2, 0xd9, 0xd9, 0x01, 0x08, - 0x93, 0x25, 0x19, 0x45, 0xa0, 0x1b, 0xd7, 0xd9, 0x81, 0x0c, 0x46, 0x19, - 0x04, 0xd6, 0xd9, 0x01, 0x45, 0x0c, 0x07, 0xd5, 0xd9, 0x41, 0x42, 0x60, - 0x01, 0xd8, 0xd9, 0x41, 0x08, 0x0a, 0xc2, 0x11, 0x06, 0xd0, 0x23, 0x01, - 0xff, 0x45, 0xa0, 0x1b, 0xc7, 0xd9, 0x01, 0x45, 0x0c, 0x07, 0xc6, 0xd9, - 0x41, 0x45, 0xa0, 0x1b, 0xb8, 0xd9, 0x01, 0x45, 0x0c, 0x07, 0xb7, 0xd9, - 0x41, 0x45, 0xa0, 0x1b, 0x76, 0xd9, 0x01, 0x46, 0x19, 0x04, 0x75, 0xd9, - 0x01, 0x45, 0x0c, 0x07, 0x74, 0xd9, 0x41, 0x43, 0x15, 0x05, 0x73, 0xd9, - 0x01, 0x03, 0xec, 0x39, 0x01, 0xff, 0x45, 0xa0, 0x1b, 0x7a, 0xd9, 0x01, - 0x46, 0x19, 0x04, 0x79, 0xd9, 0x01, 0x45, 0x0c, 0x07, 0x78, 0xd9, 0x41, - 0x06, 0xa0, 0x1b, 0x21, 0x07, 0x19, 0x04, 0x11, 0x06, 0x0c, 0x07, 0x01, - 0xff, 0x46, 0x3b, 0x01, 0xea, 0xd9, 0x01, 0x46, 0x90, 0x09, 0xe7, 0xd9, - 0x41, 0x46, 0x3b, 0x01, 0xeb, 0xd9, 0x01, 0x46, 0x90, 0x09, 0xe8, 0xd9, - 0x41, 0x46, 0x3b, 0x01, 0xec, 0xd9, 0x01, 0x46, 0x90, 0x09, 0xe9, 0xd9, - 0x41, 0x05, 0x7e, 0xe1, 0x5d, 0x08, 0x71, 0x09, 0x1e, 0x08, 0xfa, 0xc8, - 0x01, 0xff, 0x45, 0xa0, 0x1b, 0x5b, 0xd9, 0x81, 0x0c, 0x46, 0x19, 0x04, - 0x5a, 0xd9, 0x01, 0x45, 0x0c, 0x07, 0x59, 0xd9, 0x41, 0x42, 0x60, 0x01, - 0x5c, 0xd9, 0x41, 0x05, 0x7e, 0xe1, 0x1e, 0x08, 0xfa, 0xc8, 0x01, 0xff, - 0x45, 0xa0, 0x1b, 0x63, 0xd9, 0x81, 0x0c, 0x46, 0x19, 0x04, 0x62, 0xd9, - 0x01, 0x45, 0x0c, 0x07, 0x61, 0xd9, 0x41, 0x42, 0x60, 0x01, 0x64, 0xd9, - 0x41, 0x45, 0xa0, 0x1b, 0x5f, 0xd9, 0x81, 0x0c, 0x46, 0x19, 0x04, 0x5e, - 0xd9, 0x01, 0x45, 0x0c, 0x07, 0x5d, 0xd9, 0x41, 0x42, 0x60, 0x01, 0x60, - 0xd9, 0x41, 0x45, 0xa0, 0x1b, 0x57, 0xd9, 0x81, 0x0c, 0x46, 0x19, 0x04, - 0x56, 0xd9, 0x01, 0x45, 0x0c, 0x07, 0x55, 0xd9, 0x41, 0x42, 0x60, 0x01, - 0x58, 0xd9, 0x41, 0xa3, 0xac, 0x01, 0x45, 0x7d, 0x81, 0x41, 0xda, 0x81, - 0x95, 0x01, 0x44, 0x30, 0x72, 0x4d, 0xda, 0x81, 0x7f, 0x05, 0xcb, 0x04, - 0x3d, 0x45, 0xe7, 0xbe, 0x3e, 0xda, 0x81, 0x27, 0x45, 0x13, 0xe8, 0x50, - 0xda, 0x81, 0x11, 0x09, 0xda, 0xbe, 0x01, 0xff, 0x46, 0x3b, 0x01, 0x58, - 0xda, 0x01, 0x46, 0x90, 0x09, 0x57, 0xda, 0x41, 0x80, 0x01, 0xff, 0x47, - 0xa7, 0x30, 0x51, 0xda, 0x01, 0x46, 0x24, 0xdd, 0x52, 0xda, 0x41, 0x80, - 0x01, 0xff, 0x44, 0xcb, 0x04, 0x40, 0xda, 0x01, 0x48, 0xda, 0xc9, 0x3f, - 0xda, 0x41, 0x46, 0xe7, 0x02, 0x44, 0xda, 0x01, 0x47, 0xa7, 0x30, 0x45, - 0xda, 0x01, 0x44, 0x64, 0x45, 0x47, 0xda, 0x81, 0x1c, 0x49, 0x3a, 0x46, - 0x4a, 0xda, 0x81, 0x06, 0x48, 0xda, 0xc9, 0x46, 0xda, 0x41, 0x80, 0x01, - 0xff, 0x48, 0xda, 0xc9, 0x4b, 0xda, 0x01, 0x44, 0xea, 0xef, 0x4c, 0xda, - 0x41, 0x80, 0x01, 0xff, 0x48, 0xda, 0xc9, 0x48, 0xda, 0x01, 0x44, 0xea, - 0xef, 0x49, 0xda, 0x41, 0x80, 0x01, 0xff, 0x47, 0xa7, 0x30, 0x4e, 0xda, - 0x01, 0x48, 0xda, 0xc9, 0x4f, 0xda, 0x41, 0x80, 0x01, 0xff, 0x44, 0xcb, - 0x04, 0x43, 0xda, 0x01, 0x48, 0xda, 0xc9, 0x42, 0xda, 0x41, 0x06, 0xd9, - 0x1a, 0x06, 0x46, 0xbc, 0x18, 0x56, 0xda, 0x41, 0x47, 0x40, 0xcd, 0x3d, - 0xda, 0x01, 0x47, 0xa7, 0x30, 0x3c, 0xda, 0x01, 0x47, 0x8e, 0x8c, 0x3b, - 0xda, 0x41, 0xa9, 0x3e, 0x07, 0x79, 0x83, 0x01, 0xff, 0x80, 0x0f, 0x8d, - 0x01, 0xff, 0x50, 0xca, 0x61, 0x80, 0xda, 0x01, 0x4f, 0x24, 0x73, 0x7f, - 0xda, 0x41, 0x45, 0x7d, 0xe2, 0x83, 0xda, 0x01, 0x02, 0xb0, 0x01, 0x12, - 0x4c, 0x7d, 0x8f, 0x86, 0xda, 0x01, 0x45, 0x45, 0xe8, 0x85, 0xda, 0x01, - 0x45, 0xe0, 0x4e, 0x82, 0xda, 0x41, 0x47, 0xc6, 0xcb, 0x84, 0xda, 0x01, - 0x44, 0xc9, 0x00, 0x81, 0xda, 0x41, 0x03, 0x49, 0x13, 0x17, 0xb0, 0x01, - 0xff, 0x80, 0x06, 0x52, 0xc0, 0x53, 0x53, 0xda, 0x41, 0x50, 0x5a, 0x63, - 0x54, 0xda, 0x01, 0x50, 0xca, 0x66, 0x55, 0xda, 0x41, 0x4b, 0x24, 0x98, - 0x76, 0xda, 0x01, 0x07, 0xfc, 0xcf, 0x01, 0xff, 0xd1, 0x77, 0xda, 0x01, - 0xd2, 0x78, 0xda, 0x01, 0xd3, 0x79, 0xda, 0x01, 0xd4, 0x7a, 0xda, 0x01, - 0xd5, 0x7b, 0xda, 0x01, 0xd6, 0x7c, 0xda, 0x01, 0xd7, 0x7d, 0xda, 0x41, - 0xa1, 0x44, 0x43, 0xe7, 0x01, 0xff, 0xd9, 0xc1, 0x00, 0x80, 0x01, 0xff, - 0x08, 0xa7, 0x5c, 0x06, 0x43, 0x64, 0x1a, 0x00, 0xda, 0x41, 0x47, 0xe6, - 0x02, 0x06, 0xda, 0x01, 0x8d, 0x01, 0xff, 0x0b, 0x35, 0x48, 0x17, 0x0a, - 0x6b, 0x1d, 0x01, 0xff, 0x45, 0x4c, 0x13, 0x04, 0xda, 0x01, 0x48, 0xeb, - 0x4b, 0x01, 0xda, 0x01, 0x44, 0x2e, 0x05, 0x02, 0xda, 0x41, 0x45, 0x4c, - 0x13, 0x05, 0xda, 0x01, 0x48, 0xeb, 0x4b, 0x03, 0xda, 0x41, 0x42, 0x46, - 0x00, 0x6b, 0xda, 0x01, 0x03, 0x70, 0x18, 0x01, 0xff, 0x45, 0x04, 0x02, - 0x85, 0xd8, 0x81, 0xad, 0x0e, 0xa3, 0xe0, 0x0b, 0xa6, 0xee, 0x02, 0xa8, - 0x39, 0x44, 0x64, 0x45, 0x77, 0xd8, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x53, - 0x22, 0x48, 0x56, 0xd8, 0x01, 0x45, 0x40, 0x13, 0x03, 0xd8, 0x01, 0x49, - 0x1f, 0xb9, 0x95, 0xd8, 0x01, 0x48, 0x32, 0xc6, 0x79, 0xd8, 0x01, 0x4b, - 0x3d, 0x18, 0xb2, 0xd8, 0x01, 0x06, 0x46, 0x13, 0x01, 0xff, 0x47, 0xa7, - 0x30, 0x7a, 0xd8, 0x01, 0x44, 0x45, 0x0a, 0x78, 0xd8, 0x41, 0x44, 0x8a, - 0x09, 0x7d, 0xd8, 0x81, 0x4c, 0x43, 0x5e, 0x0e, 0x6b, 0xd8, 0xc1, 0x00, - 0x80, 0x01, 0xff, 0x48, 0x52, 0xc2, 0x6a, 0xd8, 0x01, 0x12, 0x27, 0x42, - 0x26, 0x07, 0x7d, 0x02, 0x06, 0x4a, 0x19, 0xae, 0xb9, 0xd8, 0x41, 0x55, - 0x3d, 0x18, 0xda, 0xd8, 0x81, 0x06, 0x45, 0x46, 0x13, 0xca, 0xd8, 0x41, - 0x80, 0x01, 0xff, 0x42, 0x9e, 0x01, 0xd9, 0xd8, 0x01, 0x43, 0xfd, 0x07, - 0xd8, 0xd8, 0x41, 0x42, 0x9e, 0x01, 0xbe, 0xd8, 0x01, 0x43, 0xfd, 0x07, - 0xbd, 0xd8, 0x01, 0x45, 0x4c, 0x1a, 0xbf, 0xd8, 0x41, 0x80, 0x01, 0xff, - 0xa6, 0xce, 0x01, 0x45, 0x40, 0x13, 0x04, 0xd8, 0x81, 0x7c, 0x46, 0x42, - 0x18, 0x8a, 0xd8, 0x81, 0x5f, 0x46, 0x7d, 0x02, 0xc5, 0xd8, 0x81, 0x52, - 0x48, 0x32, 0xc6, 0x82, 0xd8, 0x01, 0x44, 0xcb, 0x04, 0x7b, 0xd8, 0x81, - 0x2b, 0x44, 0xf7, 0x07, 0xa7, 0xd8, 0x81, 0x1e, 0x45, 0x0c, 0x07, 0x7e, - 0xd8, 0x01, 0x06, 0x46, 0x13, 0x01, 0xff, 0x53, 0x3e, 0x47, 0x84, 0xd8, - 0x01, 0x44, 0x45, 0x0a, 0x80, 0xd8, 0xc1, 0x00, 0x4f, 0x5c, 0x68, 0x83, - 0xd8, 0x41, 0x5d, 0x4e, 0x14, 0xac, 0xd8, 0x41, 0x80, 0x01, 0xff, 0x48, - 0x32, 0xc6, 0x81, 0xd8, 0x01, 0x06, 0x46, 0x13, 0x01, 0xff, 0x47, 0xa7, - 0x30, 0x7c, 0xd8, 0x01, 0x44, 0x45, 0x0a, 0x7f, 0xd8, 0x41, 0x4c, 0x3c, - 0x18, 0xd1, 0xd8, 0x41, 0x80, 0x01, 0xff, 0x45, 0x40, 0x13, 0xa2, 0xd8, - 0x81, 0x06, 0x45, 0x46, 0x13, 0x9b, 0xd8, 0x41, 0x46, 0x45, 0x13, 0x9d, - 0xd8, 0x41, 0x80, 0x01, 0xff, 0x46, 0xa4, 0x66, 0xdb, 0xd8, 0x01, 0x07, - 0x7d, 0x02, 0x2b, 0x4b, 0x3d, 0x18, 0xc1, 0xd8, 0x01, 0x45, 0x46, 0x13, - 0xf0, 0xd8, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x45, 0xa0, 0x1b, 0xef, 0xd8, - 0x01, 0x44, 0xcb, 0x04, 0xee, 0xd8, 0x01, 0xb3, 0x01, 0xff, 0x43, 0x03, - 0x00, 0xdd, 0xd8, 0x01, 0x44, 0x0d, 0x07, 0xf1, 0xd8, 0x41, 0x46, 0x42, - 0x18, 0xa6, 0xd8, 0x01, 0x44, 0xf7, 0x07, 0x88, 0xd8, 0xc1, 0x00, 0x4a, - 0x48, 0x18, 0x8d, 0xd8, 0x41, 0x57, 0x6f, 0x2e, 0x55, 0xd8, 0x01, 0x55, - 0xe4, 0x1a, 0x4b, 0xd8, 0x41, 0x43, 0xa3, 0x23, 0x03, 0xd9, 0x81, 0xc8, - 0x01, 0x43, 0xd9, 0x01, 0x5a, 0xd8, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x54, - 0xcf, 0x3f, 0x5b, 0xd8, 0x01, 0xa6, 0x61, 0x44, 0xdd, 0x12, 0x5c, 0xd8, - 0x81, 0x3b, 0x06, 0x69, 0xd5, 0x17, 0x06, 0x46, 0x13, 0x01, 0xff, 0x44, - 0xfa, 0x1a, 0x5f, 0xd8, 0x01, 0x47, 0xa7, 0x30, 0x60, 0xd8, 0x01, 0x44, - 0x45, 0x0a, 0x5d, 0xd8, 0x41, 0x46, 0x73, 0x02, 0x62, 0xd8, 0x81, 0x0c, - 0x50, 0x7a, 0x62, 0x61, 0xd8, 0x01, 0x46, 0x42, 0x18, 0x65, 0xd8, 0x41, - 0x4b, 0x39, 0x4e, 0x63, 0xd8, 0xc1, 0x00, 0x45, 0xf9, 0x1a, 0x64, 0xd8, - 0x41, 0x80, 0x01, 0xff, 0x53, 0x22, 0x48, 0x4d, 0xd8, 0x81, 0x06, 0x4a, - 0x3a, 0x4e, 0x5e, 0xd8, 0x41, 0x80, 0x01, 0xff, 0x44, 0xfa, 0x1a, 0x51, - 0xd8, 0x01, 0x49, 0xbb, 0xb6, 0x4f, 0xd8, 0x41, 0x52, 0x6f, 0x2e, 0x4c, - 0xd8, 0x81, 0x23, 0x4b, 0xe4, 0x1a, 0x44, 0xd8, 0xc1, 0x00, 0x80, 0x01, - 0xff, 0x44, 0xfa, 0x1a, 0x45, 0xd8, 0x01, 0x49, 0x49, 0x18, 0x47, 0xd8, - 0x81, 0x06, 0x46, 0xa4, 0x66, 0x46, 0xd8, 0x41, 0x46, 0x68, 0xd5, 0x48, - 0xd8, 0x41, 0x80, 0x01, 0xff, 0x44, 0xfa, 0x1a, 0x50, 0xd8, 0x01, 0x49, - 0xbb, 0xb6, 0x4e, 0xd8, 0x01, 0x46, 0xa4, 0x66, 0x57, 0xd8, 0x81, 0x06, - 0x4d, 0xa1, 0x30, 0x52, 0xd8, 0x41, 0x80, 0x01, 0xff, 0x48, 0x32, 0xc6, - 0x59, 0xd8, 0x01, 0x4a, 0x3a, 0x4e, 0x58, 0xd8, 0x41, 0x80, 0x01, 0xff, - 0x5b, 0xe3, 0x1a, 0x4a, 0xd8, 0x01, 0x44, 0xdd, 0x12, 0x04, 0xd9, 0x01, - 0x45, 0x40, 0x13, 0x00, 0xd8, 0x81, 0x85, 0x03, 0x07, 0x42, 0x18, 0xb2, - 0x02, 0x07, 0x7d, 0x02, 0xbd, 0x01, 0x05, 0xf7, 0x07, 0x7f, 0x45, 0x46, - 0x13, 0xf5, 0xd8, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x08, 0x71, 0x09, 0x58, - 0x47, 0xa7, 0x30, 0xfa, 0xd8, 0x01, 0x44, 0xdd, 0x12, 0xf6, 0xd8, 0x01, - 0x05, 0x16, 0x02, 0x3c, 0x05, 0x45, 0x0a, 0x26, 0x06, 0xc3, 0x24, 0x01, - 0xff, 0x4c, 0xe3, 0x1a, 0x01, 0xd9, 0x01, 0x4a, 0x7d, 0xa9, 0x08, 0xd8, - 0x01, 0x49, 0x1f, 0xb9, 0x93, 0xd8, 0x01, 0xb4, 0x01, 0xff, 0x4c, 0x09, - 0x8e, 0x00, 0xd9, 0x01, 0x4a, 0xba, 0xa1, 0xfe, 0xd8, 0x41, 0x44, 0xfa, - 0x1a, 0xf9, 0xd8, 0x01, 0x49, 0x49, 0x18, 0xf8, 0xd8, 0x01, 0x48, 0x42, - 0x25, 0xf7, 0xd8, 0x41, 0x54, 0x73, 0x41, 0x02, 0xd9, 0x01, 0x4b, 0xb9, - 0xa1, 0xff, 0xd8, 0x41, 0x4c, 0x51, 0x8e, 0xfb, 0xd8, 0x81, 0x0c, 0x4b, - 0x36, 0x18, 0xfc, 0xd8, 0x01, 0x4b, 0x3d, 0x18, 0xfd, 0xd8, 0x41, 0x49, - 0x44, 0x68, 0x2c, 0xd8, 0x41, 0x44, 0xa5, 0x01, 0xab, 0xd8, 0x01, 0x45, - 0x40, 0x13, 0xb7, 0xd8, 0x01, 0x46, 0x42, 0x18, 0xb0, 0xd8, 0x01, 0x46, - 0x7d, 0x02, 0xb4, 0xd8, 0x81, 0x12, 0x4e, 0x78, 0x41, 0xaf, 0xd8, 0x01, - 0x45, 0x46, 0x13, 0xb8, 0xd8, 0x01, 0x42, 0x50, 0x02, 0xae, 0xd8, 0x41, - 0x80, 0x01, 0xff, 0x49, 0x49, 0x18, 0xb5, 0xd8, 0x01, 0x4f, 0x78, 0x41, - 0xb6, 0xd8, 0x41, 0x4f, 0xa6, 0x69, 0x1c, 0xd8, 0x01, 0x44, 0xa5, 0x01, - 0xc4, 0xd8, 0x01, 0x46, 0x42, 0x18, 0xcc, 0xd8, 0x01, 0xb2, 0x50, 0x06, - 0x46, 0x13, 0x0d, 0x42, 0x50, 0x02, 0xc6, 0xd8, 0xc1, 0x00, 0x4b, 0x39, - 0x4e, 0xc9, 0xd8, 0x41, 0x07, 0x1a, 0xcc, 0x24, 0xa3, 0x0c, 0x4f, 0x58, - 0x6c, 0x30, 0xd8, 0x01, 0x46, 0x42, 0x18, 0xcb, 0xd8, 0x41, 0x0d, 0xcf, - 0x82, 0x06, 0x4e, 0xb2, 0x7c, 0x36, 0xd8, 0x41, 0x46, 0xa4, 0x66, 0x39, - 0xd8, 0x01, 0x42, 0x50, 0x02, 0x38, 0xd8, 0x41, 0x48, 0x5f, 0x6c, 0x42, - 0xd8, 0x01, 0x0a, 0xf7, 0xac, 0x01, 0xff, 0x47, 0x85, 0x1e, 0x41, 0xd8, - 0x01, 0x42, 0x50, 0x02, 0x40, 0xd8, 0x41, 0x4d, 0x79, 0x41, 0xc8, 0xd8, - 0x01, 0x4a, 0x3e, 0x18, 0xcd, 0xd8, 0x41, 0x44, 0xfa, 0x1a, 0x98, 0xd8, - 0x01, 0x44, 0xa5, 0x01, 0x8e, 0xd8, 0x81, 0x27, 0x45, 0x40, 0x13, 0xa0, - 0xd8, 0x81, 0x1a, 0x4e, 0x78, 0x41, 0x97, 0xd8, 0x01, 0xb4, 0x06, 0x42, - 0x50, 0x02, 0x92, 0xd8, 0x41, 0x44, 0x47, 0x13, 0x9a, 0xd8, 0x01, 0x4c, - 0xc9, 0x91, 0x99, 0xd8, 0x41, 0x46, 0x45, 0x13, 0x9c, 0xd8, 0x41, 0x80, - 0x01, 0xff, 0x4e, 0x5c, 0x79, 0x91, 0xd8, 0x01, 0x07, 0x87, 0xd2, 0x01, - 0xff, 0x46, 0x6f, 0x40, 0x90, 0xd8, 0x01, 0x48, 0xeb, 0x4b, 0x8f, 0xd8, - 0x41, 0x80, 0x01, 0xff, 0x44, 0xfa, 0x1a, 0x06, 0xd8, 0x81, 0xf2, 0x03, - 0x46, 0xe4, 0xd7, 0x0a, 0xd8, 0x01, 0x46, 0xa4, 0x66, 0x0b, 0xd8, 0x81, - 0xce, 0x03, 0x46, 0x7d, 0x02, 0x0e, 0xd8, 0x81, 0xcd, 0x01, 0xb2, 0xbe, - 0x01, 0x06, 0x46, 0x13, 0x18, 0x50, 0x9a, 0x66, 0x13, 0xd8, 0xc1, 0x00, - 0x07, 0x45, 0x13, 0x01, 0xff, 0x49, 0x49, 0x18, 0x25, 0xd8, 0x01, 0x44, - 0x45, 0x0a, 0x24, 0xd8, 0x41, 0x07, 0x1a, 0xcc, 0x91, 0x01, 0xa3, 0x5f, - 0x0e, 0x84, 0x76, 0x4f, 0x44, 0x5d, 0x0e, 0xe6, 0xd8, 0x81, 0x37, 0x44, - 0x45, 0x0a, 0xdc, 0xd8, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x49, 0x84, 0xb4, - 0xe2, 0xd8, 0x01, 0x06, 0x40, 0x13, 0x17, 0x06, 0x46, 0x13, 0x01, 0xff, - 0x44, 0xfa, 0x1a, 0xe0, 0xd8, 0x01, 0x49, 0x49, 0x18, 0xdf, 0xd8, 0x01, - 0x48, 0x42, 0x25, 0xde, 0xd8, 0x41, 0x44, 0xfa, 0x1a, 0xe1, 0xd8, 0x01, - 0x45, 0xa4, 0x66, 0xe3, 0xd8, 0x41, 0x0a, 0xea, 0x79, 0x01, 0xff, 0x46, - 0xa4, 0x66, 0x43, 0xd8, 0x01, 0x42, 0x50, 0x02, 0x31, 0xd8, 0x41, 0x44, - 0xfa, 0x1a, 0xe5, 0xd8, 0x01, 0x48, 0xeb, 0x4b, 0xe4, 0xd8, 0x41, 0x45, - 0xe8, 0x02, 0xeb, 0xd8, 0x81, 0x23, 0xb5, 0x01, 0xff, 0x4e, 0xe8, 0x79, - 0x37, 0xd8, 0x01, 0xb2, 0x01, 0xff, 0x45, 0x55, 0xc2, 0xe7, 0xd8, 0x01, - 0x09, 0x4f, 0x13, 0x01, 0xff, 0x46, 0x58, 0x13, 0xe8, 0xd8, 0x01, 0x45, - 0x4c, 0x1a, 0xea, 0xd8, 0x41, 0x4b, 0xeb, 0x79, 0x3c, 0xd8, 0x41, 0x4c, - 0x45, 0x8e, 0x3b, 0xd8, 0x01, 0x4d, 0x8d, 0x85, 0x3a, 0xd8, 0x41, 0x4d, - 0x79, 0x41, 0x09, 0xd8, 0x01, 0x4a, 0x3e, 0x18, 0xba, 0xd8, 0x41, 0x80, - 0x01, 0xff, 0x44, 0xfa, 0x1a, 0x10, 0xd8, 0x81, 0xe8, 0x01, 0xa3, 0x7d, - 0x46, 0xa4, 0x66, 0x12, 0xd8, 0x81, 0x70, 0x46, 0x42, 0x18, 0xa4, 0xd8, - 0x01, 0xb2, 0x4c, 0x53, 0xeb, 0x4b, 0x20, 0xd8, 0x01, 0x45, 0x46, 0x13, - 0x1e, 0xd8, 0x81, 0x06, 0x57, 0x97, 0x30, 0x27, 0xd8, 0x41, 0x80, 0x01, - 0xff, 0x46, 0xe0, 0x0b, 0x3f, 0xd8, 0x81, 0x29, 0x44, 0xfa, 0x1a, 0x22, - 0xd8, 0x01, 0xa3, 0x0f, 0xa8, 0x01, 0xff, 0x45, 0xa5, 0x66, 0x2b, 0xd8, - 0x01, 0x45, 0x59, 0x6c, 0x2a, 0xd8, 0x41, 0x46, 0xda, 0x14, 0x29, 0xd8, - 0x01, 0x4f, 0xaf, 0x6f, 0x3d, 0xd8, 0x01, 0x45, 0xb2, 0x7c, 0x28, 0xd8, - 0x41, 0x44, 0xc8, 0x10, 0x3e, 0xd8, 0x41, 0x4e, 0x79, 0x41, 0x11, 0xd8, - 0x01, 0x43, 0xa1, 0x01, 0x86, 0xd8, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x44, - 0xfa, 0x1a, 0x8b, 0xd8, 0x01, 0x49, 0x49, 0x18, 0x8c, 0xd8, 0x41, 0x52, - 0x32, 0x4e, 0x23, 0xd8, 0x41, 0x48, 0x4a, 0x18, 0x15, 0xd8, 0x81, 0x18, - 0x04, 0x47, 0x10, 0x01, 0xff, 0x47, 0x41, 0x18, 0xa9, 0xd8, 0x01, 0x42, - 0x05, 0x00, 0x1a, 0xd8, 0xc1, 0x00, 0x4b, 0x39, 0x4e, 0x33, 0xd8, 0x41, - 0x80, 0x01, 0xff, 0x46, 0xe4, 0xd7, 0x18, 0xd8, 0x81, 0x3a, 0x46, 0xa4, - 0x66, 0x19, 0xd8, 0x81, 0x2d, 0x4a, 0x7d, 0xa9, 0x16, 0xd8, 0x01, 0x4b, - 0x62, 0x9d, 0x17, 0xd8, 0x01, 0x06, 0x46, 0x13, 0x01, 0xff, 0x47, 0xa7, - 0x30, 0x34, 0xd8, 0x01, 0x44, 0x45, 0x0a, 0x2d, 0xd8, 0xc1, 0x00, 0x80, - 0x01, 0xff, 0x44, 0xfa, 0x1a, 0x2f, 0xd8, 0x01, 0x49, 0x49, 0x18, 0x2e, - 0xd8, 0x41, 0x4b, 0x39, 0x4e, 0x32, 0xd8, 0x41, 0x4e, 0xa0, 0x30, 0x35, - 0xd8, 0x41, 0x4f, 0x3e, 0x68, 0x21, 0xd8, 0x41, 0x80, 0x01, 0xff, 0x43, - 0x13, 0x01, 0x0c, 0xd8, 0x01, 0x49, 0xed, 0x79, 0x14, 0xd8, 0xc1, 0x00, - 0x4b, 0x39, 0x4e, 0x26, 0xd8, 0x41, 0x4c, 0xa1, 0x89, 0x1d, 0xd8, 0x41, - 0x45, 0xe8, 0x02, 0x76, 0xd8, 0x81, 0xca, 0x01, 0x43, 0xa3, 0xd1, 0x66, - 0xd8, 0x81, 0x8f, 0x01, 0xb5, 0x01, 0xff, 0xf0, 0x6d, 0xd8, 0x81, 0x1c, - 0x46, 0x54, 0xc2, 0x75, 0xd8, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x54, 0x27, - 0x42, 0xbc, 0xd8, 0x01, 0x55, 0x19, 0x3c, 0xcf, 0xd8, 0x01, 0x44, 0xcb, - 0x04, 0x74, 0xd8, 0x41, 0x80, 0x01, 0xff, 0x53, 0x22, 0x48, 0x53, 0xd8, - 0x81, 0x5b, 0x45, 0x40, 0x13, 0x02, 0xd8, 0x81, 0x3e, 0x52, 0x36, 0x18, - 0xd0, 0xd8, 0x01, 0x48, 0x32, 0xc6, 0x71, 0xd8, 0x01, 0x44, 0xcb, 0x04, - 0x6c, 0xd8, 0x81, 0x11, 0x06, 0x46, 0x13, 0x01, 0xff, 0x47, 0xa7, 0x30, - 0x73, 0xd8, 0x01, 0x44, 0x45, 0x0a, 0x6f, 0xd8, 0x41, 0x80, 0x01, 0xff, - 0x48, 0x32, 0xc6, 0x70, 0xd8, 0x01, 0x06, 0x46, 0x13, 0x01, 0xff, 0x47, - 0xa7, 0x30, 0x72, 0xd8, 0x01, 0x44, 0x45, 0x0a, 0x6e, 0xd8, 0x41, 0x80, - 0x01, 0xff, 0x4b, 0x3d, 0x18, 0xc0, 0xd8, 0x01, 0x45, 0x46, 0x13, 0xec, - 0xd8, 0xc1, 0x00, 0x45, 0xca, 0x04, 0xed, 0xd8, 0x41, 0x45, 0xca, 0x04, - 0x54, 0xd8, 0x41, 0x80, 0x01, 0xff, 0x56, 0xe3, 0x1a, 0x49, 0xd8, 0x01, - 0x5e, 0x40, 0x13, 0xe9, 0xd8, 0x01, 0x5c, 0x36, 0x18, 0xd6, 0xd8, 0x81, - 0x17, 0x48, 0x32, 0xc6, 0x68, 0xd8, 0x01, 0x06, 0x46, 0x13, 0x01, 0xff, - 0x47, 0xa7, 0x30, 0x69, 0xd8, 0x01, 0x44, 0x45, 0x0a, 0x67, 0xd8, 0x41, - 0x45, 0x5b, 0x3d, 0xd7, 0xd8, 0x41, 0x80, 0x01, 0xff, 0x45, 0x40, 0x13, - 0x01, 0xd8, 0x81, 0x2d, 0x07, 0x42, 0x18, 0x1d, 0x07, 0x7d, 0x02, 0x06, - 0x4b, 0x3d, 0x18, 0xb1, 0xd8, 0x41, 0x4b, 0x3d, 0x18, 0xce, 0xd8, 0x81, - 0x06, 0x42, 0x50, 0x02, 0xc7, 0xd8, 0x41, 0x45, 0xf9, 0x1a, 0xd5, 0xd8, - 0x41, 0x45, 0x40, 0x13, 0xa1, 0xd8, 0x01, 0x42, 0x50, 0x02, 0x94, 0xd8, - 0x41, 0x80, 0x01, 0xff, 0x44, 0xfa, 0x1a, 0x07, 0xd8, 0x01, 0x45, 0xa4, - 0x66, 0x0d, 0xd8, 0x01, 0x46, 0x7d, 0x02, 0x0f, 0xd8, 0x81, 0x06, 0x4b, - 0x3d, 0x18, 0xbb, 0xd8, 0x41, 0x80, 0x01, 0xff, 0x05, 0x46, 0x10, 0x12, - 0x46, 0x42, 0x18, 0xa5, 0xd8, 0x01, 0x44, 0xf7, 0x07, 0x87, 0xd8, 0x01, - 0x45, 0x46, 0x13, 0x1f, 0xd8, 0x41, 0x47, 0x41, 0x18, 0xaa, 0xd8, 0x01, - 0x42, 0x05, 0x00, 0x1b, 0xd8, 0x41, 0x80, 0x01, 0xff, 0x45, 0x40, 0x13, - 0x05, 0xd8, 0x81, 0x45, 0x07, 0x42, 0x18, 0x27, 0x52, 0x36, 0x18, 0xd4, - 0xd8, 0x81, 0x11, 0x05, 0xf7, 0x07, 0x01, 0xff, 0x5d, 0x19, 0x15, 0xad, - 0xd8, 0x01, 0x46, 0x42, 0x18, 0xb3, 0xd8, 0x41, 0x80, 0x01, 0xff, 0x42, - 0x9e, 0x01, 0xd3, 0xd8, 0x01, 0x43, 0xfd, 0x07, 0xd2, 0xd8, 0x41, 0x45, - 0x40, 0x13, 0xa3, 0xd8, 0x81, 0x06, 0x42, 0x50, 0x02, 0x96, 0xd8, 0x41, - 0x52, 0x44, 0x4e, 0x9f, 0xd8, 0xc1, 0x00, 0x44, 0xc8, 0x10, 0x9e, 0xd8, - 0x41, 0x80, 0x01, 0xff, 0x07, 0x7d, 0x02, 0x23, 0x4b, 0x3d, 0x18, 0xc3, - 0xd8, 0x81, 0x16, 0x45, 0x46, 0x13, 0xf4, 0xd8, 0xc1, 0x00, 0x80, 0x01, - 0xff, 0x42, 0x9e, 0x01, 0xf3, 0xd8, 0x01, 0x43, 0xfd, 0x07, 0xf2, 0xd8, - 0x41, 0x44, 0xc8, 0x10, 0xc2, 0xd8, 0x41, 0x46, 0x42, 0x18, 0xa8, 0xd8, - 0x01, 0x44, 0xf7, 0x07, 0x89, 0xd8, 0x41, 0x47, 0x71, 0x09, 0x0a, 0xd9, - 0x01, 0x48, 0x53, 0x43, 0x09, 0xd9, 0x01, 0x46, 0x90, 0x09, 0x08, 0xd9, - 0x41, 0x1c, 0x92, 0x16, 0x72, 0xa9, 0x52, 0xac, 0x1c, 0x08, 0xba, 0xc6, - 0x06, 0x48, 0x16, 0x16, 0x88, 0xda, 0x41, 0x47, 0x40, 0xcd, 0x12, 0xda, - 0x01, 0x47, 0x8e, 0x8c, 0x11, 0xda, 0x01, 0x48, 0xda, 0xc9, 0x13, 0xda, - 0x41, 0x04, 0xd3, 0x07, 0x06, 0x5a, 0xe2, 0x20, 0x70, 0xda, 0x41, 0x06, - 0xa0, 0x1b, 0x1a, 0xb3, 0x01, 0xff, 0x49, 0xba, 0x6a, 0x1f, 0xd9, 0x01, - 0x05, 0x0d, 0x07, 0x01, 0xff, 0x48, 0x53, 0x43, 0x1e, 0xd9, 0x01, 0x46, - 0x90, 0x09, 0x1c, 0xd9, 0x41, 0x48, 0x53, 0x43, 0x1d, 0xd9, 0x01, 0x46, - 0x90, 0x09, 0x1b, 0xd9, 0x41, 0x0c, 0xa1, 0x8f, 0x06, 0x44, 0x8b, 0x09, - 0x7e, 0xda, 0x41, 0xd2, 0x9b, 0xda, 0x01, 0xd3, 0x9c, 0xda, 0x01, 0xd4, - 0x9d, 0xda, 0x01, 0xd5, 0x9e, 0xda, 0x01, 0xd6, 0x9f, 0xda, 0x41, 0x4f, - 0x86, 0x6b, 0x07, 0xda, 0x01, 0x4a, 0x85, 0xb0, 0x08, 0xda, 0xc1, 0x00, - 0x48, 0xff, 0x0c, 0x09, 0xda, 0x41, 0x43, 0xed, 0x19, 0x30, 0xda, 0x01, - 0x49, 0xec, 0xbe, 0x6c, 0xda, 0x01, 0x02, 0x4d, 0x00, 0x01, 0xff, 0x80, - 0xb2, 0x01, 0x0f, 0xf1, 0x69, 0x9b, 0x01, 0x05, 0x81, 0xe3, 0x4e, 0x07, - 0xe0, 0xcf, 0x38, 0x02, 0x31, 0x01, 0x01, 0xff, 0x46, 0x53, 0x0d, 0x16, - 0xda, 0x01, 0x05, 0x22, 0x00, 0x1d, 0x44, 0xcb, 0x04, 0x14, 0xda, 0x01, - 0x48, 0x7a, 0xc8, 0x15, 0xda, 0x01, 0x04, 0x4e, 0x1b, 0x01, 0xff, 0x45, - 0xca, 0x04, 0x1a, 0xda, 0x01, 0x4d, 0xb0, 0x84, 0x1c, 0xda, 0x41, 0x46, - 0x53, 0x0d, 0x1b, 0xda, 0x01, 0x44, 0xcb, 0x04, 0x19, 0xda, 0x41, 0x44, - 0xa5, 0x01, 0x1f, 0xda, 0x01, 0x4a, 0x22, 0x46, 0x20, 0xda, 0x01, 0x42, - 0x50, 0x02, 0x1e, 0xda, 0x41, 0x0b, 0x35, 0x48, 0x29, 0x0a, 0x6b, 0x1d, - 0x01, 0xff, 0xa3, 0x16, 0x48, 0xeb, 0x4b, 0x21, 0xda, 0xc1, 0x00, 0x80, - 0x01, 0xff, 0x4b, 0xa8, 0x58, 0x23, 0xda, 0x01, 0x46, 0x3b, 0x01, 0x22, - 0xda, 0x41, 0x47, 0xdd, 0x0a, 0x29, 0xda, 0x01, 0x45, 0x37, 0x22, 0x27, - 0xda, 0x41, 0x46, 0x6f, 0x40, 0x28, 0xda, 0x01, 0x48, 0xeb, 0x4b, 0x24, - 0xda, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x4b, 0xa8, 0x58, 0x26, 0xda, 0x01, - 0x46, 0x3b, 0x01, 0x25, 0xda, 0x41, 0x44, 0xa5, 0x01, 0x0c, 0xda, 0x01, - 0x47, 0x8e, 0x8c, 0x0b, 0xda, 0x01, 0x42, 0x50, 0x02, 0x0a, 0xda, 0x41, - 0x06, 0x4e, 0xd7, 0x06, 0x44, 0xe2, 0xa2, 0x1d, 0xda, 0x41, 0x48, 0x53, - 0x43, 0x18, 0xda, 0x01, 0x46, 0x90, 0x09, 0x17, 0xda, 0x41, 0x0f, 0x9f, - 0x70, 0x48, 0x07, 0x12, 0xd5, 0x01, 0xff, 0x0a, 0x6c, 0x31, 0x33, 0x50, - 0x9a, 0x61, 0xfd, 0xd9, 0x01, 0x44, 0x7e, 0xec, 0xf7, 0xd9, 0x01, 0x47, - 0x89, 0xce, 0xfe, 0xd9, 0x01, 0x47, 0x5c, 0x42, 0xfa, 0xd9, 0x01, 0xb3, - 0x06, 0x45, 0x13, 0xe8, 0xf9, 0xd9, 0x41, 0x4b, 0x47, 0x9b, 0xfb, 0xd9, - 0x81, 0x06, 0x43, 0x13, 0x01, 0xf8, 0xd9, 0x41, 0x4c, 0xa7, 0x58, 0xfc, - 0xd9, 0x41, 0x45, 0xa0, 0x1b, 0xf6, 0xd9, 0x01, 0x45, 0x0c, 0x07, 0xf5, - 0xd9, 0x41, 0x4c, 0x89, 0x8c, 0x0e, 0xda, 0x01, 0x08, 0xe5, 0x90, 0x06, - 0x4a, 0x7b, 0xb0, 0x0f, 0xda, 0x41, 0x44, 0xa5, 0x01, 0x0d, 0xda, 0x01, - 0x42, 0x50, 0x02, 0x10, 0xda, 0x41, 0x06, 0x01, 0x9e, 0x0f, 0xaf, 0x01, - 0xff, 0x43, 0x03, 0x12, 0x8a, 0xda, 0x01, 0x43, 0xea, 0x04, 0x87, 0xda, - 0x41, 0x47, 0x8e, 0x8c, 0x2b, 0xda, 0x01, 0x46, 0x46, 0xdc, 0x2a, 0xda, - 0x01, 0x46, 0x24, 0xdd, 0x2c, 0xda, 0x41, 0x05, 0xaf, 0xe2, 0x17, 0x04, - 0x7e, 0xe7, 0x01, 0xff, 0x47, 0x71, 0x09, 0x10, 0xd9, 0x01, 0x48, 0x53, - 0x43, 0x0f, 0xd9, 0x01, 0x46, 0x90, 0x09, 0x0e, 0xd9, 0x41, 0x46, 0xaa, - 0xd8, 0x3a, 0xda, 0x01, 0x46, 0x06, 0xda, 0x39, 0xda, 0x41, 0x04, 0x09, - 0x8b, 0x11, 0x04, 0x24, 0xdd, 0x01, 0xff, 0x50, 0xea, 0x5e, 0x38, 0xda, - 0x01, 0x46, 0xda, 0x05, 0x36, 0xda, 0x41, 0x50, 0xea, 0x5e, 0x37, 0xda, - 0x01, 0x47, 0xff, 0x65, 0x35, 0xda, 0x41, 0x05, 0x87, 0xe2, 0x3e, 0x06, - 0xbe, 0x44, 0x01, 0xff, 0x06, 0xe1, 0x02, 0x1d, 0x06, 0xad, 0x02, 0x01, - 0xff, 0x53, 0xd6, 0x47, 0x9f, 0xf5, 0x01, 0x53, 0x9e, 0x49, 0x98, 0xf5, - 0x01, 0x54, 0x06, 0x22, 0x99, 0xf5, 0x01, 0x51, 0x59, 0x5d, 0x9e, 0xf5, - 0x41, 0x53, 0xd6, 0x47, 0xa1, 0xf5, 0x01, 0x53, 0x9e, 0x49, 0x9a, 0xf5, - 0x01, 0x54, 0x06, 0x22, 0x9b, 0xf5, 0x01, 0x51, 0x59, 0x5d, 0xa0, 0xf5, - 0x41, 0xa4, 0xb8, 0x04, 0x50, 0x3a, 0x61, 0xc9, 0x15, 0x01, 0x07, 0xc1, - 0x05, 0x86, 0x02, 0x10, 0xea, 0x64, 0xf5, 0x01, 0xb3, 0x43, 0x0b, 0xd1, - 0x75, 0x01, 0xff, 0xa1, 0x25, 0xe5, 0xb8, 0x15, 0x01, 0xe9, 0xb0, 0x15, - 0x81, 0x18, 0xef, 0xba, 0x15, 0x01, 0xf5, 0xb2, 0x15, 0x81, 0x0b, 0x49, - 0x9b, 0xbe, 0xb4, 0x15, 0xc1, 0x00, 0xf2, 0xb5, 0x15, 0x41, 0xf5, 0xb3, - 0x15, 0x41, 0xe9, 0xb1, 0x15, 0x41, 0xe1, 0xaf, 0x15, 0x01, 0xe9, 0xb9, - 0x15, 0x01, 0x4a, 0x2b, 0xab, 0xdc, 0x15, 0x81, 0x04, 0xf5, 0xbb, 0x15, - 0x41, 0xf5, 0xdd, 0x15, 0x41, 0xa5, 0x2e, 0x04, 0x30, 0x03, 0x01, 0xff, - 0x48, 0xd0, 0x15, 0xbd, 0x15, 0x01, 0x4b, 0x4f, 0x23, 0xbc, 0x15, 0x01, - 0x45, 0x5a, 0x3e, 0xc0, 0x15, 0x01, 0x47, 0x0c, 0xd3, 0xc1, 0x15, 0x01, - 0x02, 0x02, 0x00, 0x01, 0xff, 0x44, 0x5d, 0x23, 0xbf, 0x15, 0x01, 0x45, - 0xa3, 0x4a, 0xbe, 0x15, 0x41, 0x0b, 0x87, 0x98, 0x11, 0x08, 0x38, 0x20, - 0x01, 0xff, 0x43, 0x16, 0x00, 0xc5, 0x15, 0x01, 0x43, 0xd4, 0x09, 0xc4, - 0x15, 0x41, 0x4b, 0x21, 0x99, 0xcf, 0x15, 0x81, 0x5e, 0x05, 0x51, 0x00, - 0x01, 0xff, 0x0c, 0xa5, 0x8b, 0x43, 0x50, 0x8a, 0x60, 0xd1, 0x15, 0x01, - 0x53, 0xf4, 0x4a, 0xd3, 0x15, 0x01, 0x10, 0xca, 0x64, 0x21, 0x52, 0xd2, - 0x53, 0xd4, 0x15, 0x01, 0x03, 0x19, 0x01, 0x01, 0xff, 0x09, 0x53, 0xb5, - 0x06, 0x4d, 0xfa, 0x4a, 0xd2, 0x15, 0x41, 0x50, 0x7a, 0x60, 0xcb, 0x15, - 0x01, 0x52, 0xbc, 0x54, 0xca, 0x15, 0x41, 0x49, 0xfe, 0x4a, 0xcc, 0x15, - 0x01, 0x50, 0x8a, 0x60, 0xcd, 0x15, 0x01, 0x50, 0x4a, 0x66, 0xce, 0x15, - 0x41, 0x4f, 0xa4, 0x6b, 0xd7, 0x15, 0x01, 0x44, 0xca, 0x64, 0xd5, 0x15, - 0x01, 0x4e, 0x34, 0x7c, 0xd6, 0x15, 0x41, 0x4a, 0x83, 0x94, 0xd0, 0x15, - 0x41, 0xd1, 0xc6, 0x15, 0x01, 0xd2, 0xc7, 0x15, 0x01, 0xd3, 0xc8, 0x15, - 0x41, 0xe1, 0x80, 0x15, 0x81, 0x8f, 0x02, 0xa2, 0x82, 0x02, 0xa3, 0xf5, - 0x01, 0xa4, 0xdc, 0x01, 0xe5, 0x8a, 0x15, 0x01, 0xa7, 0xcb, 0x01, 0x42, - 0x22, 0x00, 0xae, 0x15, 0x01, 0xe9, 0x82, 0x15, 0x81, 0xbb, 0x01, 0xaa, - 0xae, 0x01, 0xab, 0xa1, 0x01, 0x42, 0x74, 0x00, 0xa9, 0x15, 0x01, 0x42, - 0x6c, 0x00, 0xa6, 0x15, 0x01, 0xae, 0x7d, 0xef, 0x8c, 0x15, 0x01, 0xb0, - 0x6d, 0x42, 0x71, 0x00, 0xa8, 0x15, 0x01, 0xb3, 0x55, 0xb4, 0x2c, 0xf5, - 0x84, 0x15, 0x81, 0x23, 0xb6, 0x06, 0x42, 0x34, 0x22, 0xa7, 0x15, 0x41, - 0xe1, 0xaa, 0x15, 0x01, 0x07, 0x9c, 0xbe, 0x01, 0xff, 0xec, 0x88, 0x15, - 0x81, 0x09, 0xf2, 0x86, 0x15, 0xc1, 0x00, 0xf2, 0x87, 0x15, 0x41, 0xec, - 0x89, 0x15, 0x41, 0xf5, 0x85, 0x15, 0x41, 0xe1, 0x9d, 0x15, 0x01, 0xa8, - 0x17, 0xb4, 0x0b, 0x55, 0x3b, 0x3e, 0xd9, 0x15, 0xc1, 0x00, 0xe9, 0xda, - 0x15, 0x41, 0xe1, 0x98, 0x15, 0x01, 0x42, 0x22, 0x00, 0x99, 0x15, 0x41, - 0xe1, 0x9e, 0x15, 0x01, 0x56, 0xf3, 0x35, 0xd8, 0x15, 0x41, 0xe1, 0xad, - 0x15, 0x01, 0x42, 0x22, 0x00, 0xab, 0x15, 0x01, 0x42, 0x15, 0x06, 0xac, - 0x15, 0x41, 0xe1, 0xa2, 0x15, 0x01, 0x42, 0x22, 0x00, 0xa3, 0x15, 0x41, - 0xe1, 0xa1, 0x15, 0x01, 0x42, 0x24, 0x02, 0x92, 0x15, 0x01, 0x42, 0xff, - 0x04, 0x9c, 0x15, 0x01, 0x42, 0x34, 0x22, 0x97, 0x15, 0x41, 0xe1, 0x8e, - 0x15, 0x01, 0x42, 0x22, 0x00, 0x8f, 0x15, 0x41, 0xe1, 0x95, 0x15, 0x01, - 0x42, 0x22, 0x00, 0x96, 0x15, 0x41, 0xe9, 0x83, 0x15, 0x41, 0xe1, 0x90, - 0x15, 0x01, 0x42, 0x22, 0x00, 0x91, 0x15, 0x41, 0xe1, 0x9f, 0x15, 0x01, - 0xa4, 0x06, 0x42, 0x22, 0x00, 0xa0, 0x15, 0x41, 0xe1, 0x9a, 0x15, 0x01, - 0x42, 0x22, 0x00, 0x9b, 0x15, 0x41, 0xe1, 0x93, 0x15, 0x01, 0x42, 0x22, - 0x00, 0x94, 0x15, 0x41, 0xe1, 0xa4, 0x15, 0x01, 0x42, 0x22, 0x00, 0xa5, - 0x15, 0x41, 0xe1, 0x81, 0x15, 0x01, 0xe9, 0x8b, 0x15, 0x01, 0x4a, 0x2b, - 0xab, 0xdb, 0x15, 0x01, 0xf5, 0x8d, 0x15, 0x41, 0x44, 0xd1, 0x1f, 0xc2, - 0x15, 0x01, 0x4b, 0xd8, 0x9e, 0xc3, 0x15, 0x41, 0xa1, 0xdd, 0x01, 0x43, - 0x26, 0x34, 0x11, 0xf4, 0x01, 0xa9, 0xb4, 0x01, 0xaf, 0x14, 0xb2, 0x06, - 0x4d, 0xc9, 0x87, 0xe2, 0x29, 0x40, 0x43, 0x6a, 0x1b, 0x90, 0xf9, 0x01, - 0x42, 0x83, 0x0e, 0x37, 0xf9, 0x41, 0x5d, 0xa5, 0x14, 0x2f, 0xf9, 0x01, - 0x4a, 0xd9, 0xac, 0x20, 0xf3, 0x01, 0x06, 0x44, 0x2f, 0x81, 0x01, 0x02, - 0x34, 0x00, 0x12, 0x50, 0x7a, 0x66, 0x7d, 0x23, 0x00, 0x43, 0xd7, 0x00, - 0x8f, 0xfa, 0x01, 0x43, 0x15, 0x01, 0xbf, 0xf6, 0x41, 0x80, 0x26, 0x44, - 0xbe, 0x2b, 0x70, 0xf3, 0x01, 0x0c, 0xd9, 0x8d, 0x04, 0xf3, 0x73, 0xfa, - 0x41, 0x52, 0x76, 0x4f, 0xa1, 0xbc, 0x01, 0x49, 0x80, 0xb5, 0xa2, 0xbc, - 0x01, 0x4e, 0x0c, 0x78, 0xa0, 0xbc, 0x01, 0x47, 0x0f, 0xd4, 0xa3, 0xbc, - 0x41, 0xa2, 0x35, 0x49, 0x20, 0x38, 0xdf, 0x2a, 0x80, 0x28, 0x49, 0xf2, - 0xb8, 0xde, 0x2a, 0x00, 0x66, 0x20, 0x07, 0x44, 0x29, 0x00, 0x53, 0xd8, - 0x4b, 0x4e, 0x2b, 0x00, 0x47, 0x16, 0xd4, 0xe0, 0x2a, 0xc0, 0x00, 0x80, - 0x01, 0xff, 0x55, 0x14, 0x38, 0xe9, 0x2a, 0x00, 0x4d, 0xc3, 0x5d, 0xe8, - 0x2a, 0x40, 0x4d, 0x71, 0x7e, 0xe7, 0x2a, 0x40, 0x56, 0xff, 0x31, 0x4f, - 0x2b, 0x00, 0x6c, 0x92, 0x01, 0x5f, 0x2b, 0x40, 0x44, 0x6a, 0x69, 0xcd, - 0xf6, 0x01, 0x47, 0xb4, 0xd3, 0xd2, 0xf6, 0x41, 0x43, 0x7a, 0x23, 0xe1, - 0xf6, 0x01, 0x03, 0xc5, 0x00, 0x0a, 0x4a, 0x2f, 0xac, 0xe9, 0x26, 0x00, - 0xf0, 0xa2, 0xf6, 0x41, 0x42, 0x9e, 0x01, 0x0f, 0x00, 0x00, 0x43, 0xfd, - 0x07, 0x0e, 0x00, 0x40, 0x0c, 0xa7, 0x02, 0xaf, 0x07, 0x49, 0x24, 0xae, - 0xe8, 0xfa, 0x01, 0x50, 0x4a, 0x63, 0x58, 0xf9, 0x01, 0x45, 0xac, 0xe5, - 0x18, 0x26, 0x00, 0xb2, 0xbb, 0x02, 0xb6, 0x01, 0xff, 0x46, 0x38, 0xd8, - 0x67, 0xf3, 0x01, 0x0b, 0x8e, 0x8b, 0x01, 0xff, 0xa1, 0xfc, 0x01, 0x43, - 0xa8, 0xf0, 0x5a, 0x04, 0x01, 0x46, 0xba, 0xd7, 0x57, 0x04, 0x01, 0x44, - 0x4e, 0xec, 0x5b, 0x04, 0x01, 0xa5, 0xd1, 0x01, 0x43, 0x31, 0x20, 0x53, - 0x04, 0x01, 0x43, 0x5b, 0xa8, 0x5c, 0x04, 0x01, 0xa8, 0xb6, 0x01, 0xa9, - 0xa3, 0x01, 0x45, 0x99, 0xe4, 0x61, 0x04, 0x01, 0x44, 0x9a, 0xed, 0x52, - 0x04, 0x01, 0x44, 0xce, 0xed, 0x64, 0x04, 0x01, 0xad, 0x82, 0x01, 0x43, - 0x54, 0x22, 0x6f, 0x04, 0x01, 0xaf, 0x5a, 0x44, 0xbe, 0xee, 0x50, 0x04, - 0x01, 0x44, 0x06, 0xef, 0x6e, 0x04, 0x01, 0xb3, 0x42, 0xb4, 0x2c, 0x42, - 0x50, 0x02, 0x73, 0x04, 0x01, 0x43, 0x6c, 0x38, 0x5d, 0x04, 0x01, 0x02, - 0x15, 0x02, 0x12, 0x02, 0x4d, 0x00, 0x06, 0x43, 0x92, 0xf1, 0x5f, 0x04, - 0x41, 0xe1, 0x58, 0x04, 0x01, 0xf7, 0x7f, 0x04, 0x41, 0xe5, 0x62, 0x04, - 0x01, 0x42, 0x36, 0x03, 0x6b, 0x04, 0x41, 0xa8, 0x06, 0x42, 0xf0, 0x04, - 0x51, 0x04, 0x41, 0x42, 0x3f, 0x1c, 0x5e, 0x04, 0x01, 0x43, 0x3f, 0x00, - 0x54, 0x04, 0x41, 0xef, 0x55, 0x04, 0x01, 0x43, 0x09, 0x18, 0x56, 0x04, - 0x41, 0x42, 0x6d, 0x00, 0x74, 0x04, 0x01, 0x42, 0x62, 0x01, 0x76, 0x04, - 0x01, 0xee, 0x6a, 0x04, 0x01, 0x43, 0x1a, 0x0a, 0x75, 0x04, 0x01, 0xf2, - 0x79, 0x04, 0x01, 0x42, 0xfe, 0x07, 0x6c, 0x04, 0x41, 0x46, 0x06, 0x18, - 0x60, 0x04, 0x01, 0x43, 0x29, 0x02, 0x65, 0x04, 0x41, 0x42, 0x1a, 0x00, - 0x7e, 0x04, 0x01, 0x42, 0x73, 0x02, 0x72, 0x04, 0x01, 0xe6, 0x66, 0x04, - 0x41, 0x44, 0xa6, 0xeb, 0x63, 0x04, 0x01, 0x43, 0x75, 0x44, 0x59, 0x04, - 0x41, 0xa1, 0x0c, 0x42, 0x15, 0x12, 0x67, 0x04, 0x01, 0x42, 0xcf, 0x00, - 0x7b, 0x04, 0x41, 0xf2, 0x7d, 0x04, 0x01, 0xf4, 0x70, 0x04, 0x41, 0x42, - 0x3b, 0x01, 0x69, 0x04, 0x01, 0x42, 0x8c, 0x09, 0x71, 0x04, 0x01, 0xe8, - 0x6d, 0x04, 0x01, 0x42, 0x46, 0x00, 0x7a, 0x04, 0x01, 0xb2, 0x0c, 0x42, - 0xa4, 0x02, 0x68, 0x04, 0x01, 0x42, 0x15, 0x01, 0x77, 0x04, 0x41, 0xe5, - 0x78, 0x04, 0x01, 0x43, 0xca, 0x64, 0x7c, 0x04, 0x41, 0x04, 0x8b, 0x4c, - 0x04, 0xeb, 0x88, 0xf9, 0x41, 0x51, 0x93, 0x56, 0xc7, 0x11, 0x01, 0x51, - 0xf8, 0x57, 0xdd, 0x11, 0x01, 0xa4, 0xf6, 0x03, 0xa5, 0xe7, 0x03, 0x4a, - 0x40, 0x5f, 0xdc, 0x11, 0x01, 0x07, 0xc1, 0x05, 0xc4, 0x01, 0x42, 0xe9, - 0x04, 0xc4, 0x11, 0x01, 0xb3, 0x55, 0x06, 0x6c, 0x38, 0x01, 0xff, 0x4d, - 0x6f, 0x84, 0xcb, 0x11, 0x01, 0x05, 0x2f, 0x03, 0x01, 0xff, 0xa1, 0x37, - 0xe5, 0xbc, 0x11, 0x01, 0xe9, 0xb4, 0x11, 0x81, 0x2a, 0xef, 0xbe, 0x11, - 0x01, 0x4f, 0x54, 0x70, 0xce, 0x11, 0x01, 0xf5, 0xb6, 0x11, 0x81, 0x17, - 0x08, 0x9b, 0xbe, 0x01, 0xff, 0xec, 0xba, 0x11, 0x81, 0x09, 0xf2, 0xb8, - 0x11, 0xc1, 0x00, 0xf2, 0xb9, 0x11, 0x41, 0xec, 0xbb, 0x11, 0x41, 0xf5, - 0xb7, 0x11, 0x41, 0xe9, 0xb5, 0x11, 0x41, 0xe1, 0xb3, 0x11, 0x01, 0xe9, - 0xbd, 0x11, 0x01, 0xf5, 0xbf, 0x11, 0x41, 0x4a, 0x81, 0xa5, 0xc9, 0x11, - 0x01, 0xa5, 0x4d, 0x04, 0x30, 0x03, 0x06, 0x49, 0x2f, 0xbe, 0xcd, 0x11, - 0x41, 0xa1, 0x35, 0x4b, 0x4f, 0x23, 0x80, 0x11, 0x01, 0x54, 0x77, 0x42, - 0xcf, 0x11, 0x01, 0x4b, 0xc0, 0x9b, 0xc2, 0x11, 0x01, 0x45, 0x5a, 0x3e, - 0xca, 0x11, 0x01, 0x47, 0x0c, 0xd3, 0xdb, 0x11, 0x01, 0x4b, 0x32, 0xa2, - 0xc3, 0x11, 0x01, 0x02, 0x02, 0x00, 0x01, 0xff, 0x44, 0x5d, 0x23, 0xc0, - 0x11, 0x01, 0x45, 0xa3, 0x4a, 0x82, 0x11, 0x41, 0x47, 0xd1, 0x15, 0x81, - 0x11, 0x01, 0x47, 0xf2, 0x86, 0xc1, 0x11, 0x41, 0x0b, 0x92, 0x98, 0x06, - 0x47, 0x38, 0x20, 0xc8, 0x11, 0x41, 0xd1, 0xde, 0x11, 0x01, 0xd2, 0xdf, - 0x11, 0x41, 0xe1, 0x83, 0x11, 0x81, 0x86, 0x02, 0xa2, 0xf9, 0x01, 0xa3, - 0xec, 0x01, 0xa4, 0xd3, 0x01, 0xe5, 0x8d, 0x11, 0x01, 0xa7, 0xc2, 0x01, - 0x42, 0x22, 0x00, 0xb2, 0x11, 0x01, 0xe9, 0x85, 0x11, 0x81, 0xb2, 0x01, - 0xaa, 0xa5, 0x01, 0xab, 0x98, 0x01, 0xac, 0x8b, 0x01, 0x42, 0x6c, 0x00, - 0xa9, 0x11, 0x01, 0xae, 0x6d, 0xef, 0x8f, 0x11, 0x01, 0xb0, 0x5d, 0x42, - 0x71, 0x00, 0xab, 0x11, 0x01, 0xb3, 0x45, 0xb4, 0x2c, 0xf5, 0x87, 0x11, - 0x81, 0x23, 0xb6, 0x06, 0x42, 0x34, 0x22, 0xaa, 0x11, 0x41, 0xe1, 0xae, - 0x11, 0x01, 0x07, 0x9c, 0xbe, 0x01, 0xff, 0xec, 0x8b, 0x11, 0x81, 0x09, - 0xf2, 0x89, 0x11, 0xc1, 0x00, 0xf2, 0x8a, 0x11, 0x41, 0xec, 0x8c, 0x11, - 0x41, 0xf5, 0x88, 0x11, 0x41, 0xe1, 0xa0, 0x11, 0x01, 0x42, 0x22, 0x00, - 0xa1, 0x11, 0x01, 0xb4, 0x01, 0xff, 0xe1, 0x9b, 0x11, 0x01, 0x42, 0x22, - 0x00, 0x9c, 0x11, 0x41, 0xe1, 0xb1, 0x11, 0x01, 0x42, 0x22, 0x00, 0xaf, - 0x11, 0x01, 0x42, 0x15, 0x06, 0xb0, 0x11, 0x41, 0xe1, 0xa5, 0x11, 0x01, - 0x42, 0x22, 0x00, 0xa6, 0x11, 0x41, 0xe1, 0xa4, 0x11, 0x01, 0x42, 0x24, - 0x02, 0x95, 0x11, 0x01, 0x42, 0xff, 0x04, 0x9f, 0x11, 0x01, 0x42, 0x34, - 0x22, 0x9a, 0x11, 0x41, 0xe1, 0xac, 0x11, 0x01, 0x42, 0x74, 0x00, 0xad, - 0x11, 0x41, 0xe1, 0x91, 0x11, 0x01, 0x42, 0x22, 0x00, 0x92, 0x11, 0x41, - 0xe1, 0x98, 0x11, 0x01, 0x42, 0x22, 0x00, 0x99, 0x11, 0x41, 0xe9, 0x86, - 0x11, 0x41, 0xe1, 0x93, 0x11, 0x01, 0x42, 0x22, 0x00, 0x94, 0x11, 0x41, - 0xe1, 0xa2, 0x11, 0x01, 0xa4, 0x06, 0x42, 0x22, 0x00, 0xa3, 0x11, 0x41, - 0xe1, 0x9d, 0x11, 0x01, 0x42, 0x22, 0x00, 0x9e, 0x11, 0x41, 0xe1, 0x96, - 0x11, 0x01, 0x42, 0x22, 0x00, 0x97, 0x11, 0x41, 0xe1, 0xa7, 0x11, 0x01, - 0x42, 0x22, 0x00, 0xa8, 0x11, 0x41, 0xe1, 0x84, 0x11, 0x01, 0xe9, 0x8e, - 0x11, 0x01, 0xf5, 0x90, 0x11, 0x41, 0x43, 0x8f, 0xb8, 0xda, 0x11, 0x01, - 0x55, 0x65, 0x3e, 0xcc, 0x11, 0x41, 0x44, 0xd1, 0x1f, 0xc5, 0x11, 0x01, - 0x05, 0xc5, 0x06, 0x06, 0x4b, 0xd8, 0x9e, 0xc6, 0x11, 0x41, 0x45, 0xc3, - 0x0a, 0xd8, 0x11, 0x01, 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0xd9, 0x11, 0x01, - 0x43, 0xbf, 0x0a, 0xd1, 0x11, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xa1, - 0x1d, 0xd0, 0x11, 0x41, 0x44, 0x25, 0x01, 0xd3, 0x11, 0x01, 0x42, 0x15, - 0x02, 0xd2, 0x11, 0x41, 0x44, 0x27, 0x1d, 0xd7, 0x11, 0x01, 0x42, 0x60, - 0x25, 0xd6, 0x11, 0x41, 0x43, 0xa7, 0x05, 0xd5, 0x11, 0x01, 0x43, 0xcb, - 0x06, 0xd4, 0x11, 0x41, 0x46, 0xe7, 0x02, 0x4d, 0x27, 0x00, 0x4b, 0x23, - 0x9c, 0x1e, 0x27, 0x00, 0x44, 0xe2, 0x12, 0x30, 0x27, 0x40, 0xa1, 0xc8, - 0x04, 0xa3, 0xb0, 0x04, 0x43, 0x10, 0x9d, 0xf2, 0x2b, 0x00, 0xa5, 0x9b, - 0x04, 0x45, 0x22, 0x2f, 0x13, 0x23, 0x80, 0xcc, 0x03, 0x44, 0xbe, 0xed, - 0x33, 0xf9, 0x01, 0x02, 0x7d, 0x02, 0xaf, 0x03, 0x08, 0x2a, 0xc7, 0x38, - 0xb2, 0x2a, 0xb3, 0x1c, 0x02, 0xc6, 0x00, 0x0c, 0x4b, 0xd7, 0xa2, 0xa1, - 0xfa, 0x01, 0x45, 0xf2, 0xd2, 0xb9, 0x26, 0x40, 0x45, 0xef, 0x1e, 0x16, - 0x22, 0x00, 0x4e, 0xe0, 0x7b, 0x93, 0x00, 0x40, 0x47, 0x51, 0xb6, 0x45, - 0xfe, 0x00, 0x4b, 0x5c, 0x9f, 0xbc, 0x26, 0x40, 0x65, 0xdc, 0x07, 0x2c, - 0xf9, 0x01, 0x49, 0x77, 0xbe, 0x20, 0x21, 0x40, 0x06, 0xd3, 0x69, 0x06, - 0x46, 0xeb, 0x07, 0xfb, 0x2b, 0x40, 0x09, 0xdd, 0xbb, 0xa1, 0x02, 0x08, - 0x1a, 0xc8, 0x01, 0xff, 0xd1, 0x51, 0xce, 0x81, 0x8b, 0x01, 0xd2, 0x52, - 0xce, 0x81, 0x43, 0xd3, 0x54, 0xce, 0x81, 0x1f, 0xd4, 0x58, 0xce, 0x81, - 0x0d, 0xd5, 0x60, 0xce, 0x81, 0x04, 0xd6, 0x70, 0xce, 0x41, 0xd6, 0x80, - 0xce, 0x41, 0xd5, 0x68, 0xce, 0x81, 0x04, 0xd6, 0x78, 0xce, 0x41, 0xd6, - 0x88, 0xce, 0x41, 0xd4, 0x5c, 0xce, 0x81, 0x0d, 0xd5, 0x64, 0xce, 0x81, - 0x04, 0xd6, 0x74, 0xce, 0x41, 0xd6, 0x84, 0xce, 0x41, 0xd5, 0x6c, 0xce, - 0x81, 0x04, 0xd6, 0x7c, 0xce, 0x41, 0xd6, 0x8c, 0xce, 0x41, 0xd3, 0x56, - 0xce, 0x81, 0x1f, 0xd4, 0x5a, 0xce, 0x81, 0x0d, 0xd5, 0x62, 0xce, 0x81, - 0x04, 0xd6, 0x72, 0xce, 0x41, 0xd6, 0x82, 0xce, 0x41, 0xd5, 0x6a, 0xce, - 0x81, 0x04, 0xd6, 0x7a, 0xce, 0x41, 0xd6, 0x8a, 0xce, 0x41, 0xd4, 0x5e, - 0xce, 0x81, 0x0d, 0xd5, 0x66, 0xce, 0x81, 0x04, 0xd6, 0x76, 0xce, 0x41, - 0xd6, 0x86, 0xce, 0x41, 0xd5, 0x6e, 0xce, 0x81, 0x04, 0xd6, 0x7e, 0xce, - 0x41, 0xd6, 0x8e, 0xce, 0x41, 0xd2, 0x53, 0xce, 0x81, 0x43, 0xd3, 0x55, - 0xce, 0x81, 0x1f, 0xd4, 0x59, 0xce, 0x81, 0x0d, 0xd5, 0x61, 0xce, 0x81, - 0x04, 0xd6, 0x71, 0xce, 0x41, 0xd6, 0x81, 0xce, 0x41, 0xd5, 0x69, 0xce, - 0x81, 0x04, 0xd6, 0x79, 0xce, 0x41, 0xd6, 0x89, 0xce, 0x41, 0xd4, 0x5d, - 0xce, 0x81, 0x0d, 0xd5, 0x65, 0xce, 0x81, 0x04, 0xd6, 0x75, 0xce, 0x41, - 0xd6, 0x85, 0xce, 0x41, 0xd5, 0x6d, 0xce, 0x81, 0x04, 0xd6, 0x7d, 0xce, - 0x41, 0xd6, 0x8d, 0xce, 0x41, 0xd3, 0x57, 0xce, 0x81, 0x1f, 0xd4, 0x5b, - 0xce, 0x81, 0x0d, 0xd5, 0x63, 0xce, 0x81, 0x04, 0xd6, 0x73, 0xce, 0x41, - 0xd6, 0x83, 0xce, 0x41, 0xd5, 0x6b, 0xce, 0x81, 0x04, 0xd6, 0x7b, 0xce, - 0x41, 0xd6, 0x8b, 0xce, 0x41, 0xd4, 0x5f, 0xce, 0x81, 0x0d, 0xd5, 0x67, - 0xce, 0x81, 0x04, 0xd6, 0x77, 0xce, 0x41, 0xd6, 0x87, 0xce, 0x41, 0xd5, - 0x6f, 0xce, 0x81, 0x04, 0xd6, 0x7f, 0xce, 0x41, 0xd6, 0x8f, 0xce, 0x41, - 0xd1, 0x21, 0xcc, 0x81, 0x1f, 0xd2, 0x22, 0xcc, 0x81, 0x0d, 0xd3, 0x24, - 0xcc, 0x81, 0x04, 0xd4, 0x28, 0xcc, 0x41, 0xd4, 0x2c, 0xcc, 0x41, 0xd3, - 0x26, 0xcc, 0x81, 0x04, 0xd4, 0x2a, 0xcc, 0x41, 0xd4, 0x2e, 0xcc, 0x41, - 0xd2, 0x23, 0xcc, 0x81, 0x0d, 0xd3, 0x25, 0xcc, 0x81, 0x04, 0xd4, 0x29, - 0xcc, 0x41, 0xd4, 0x2d, 0xcc, 0x41, 0xd3, 0x27, 0xcc, 0x81, 0x04, 0xd4, - 0x2b, 0xcc, 0x41, 0xd4, 0x2f, 0xcc, 0x41, 0x45, 0xc4, 0x3a, 0x3b, 0x00, - 0x00, 0x61, 0x38, 0x0d, 0x32, 0x2a, 0x00, 0x47, 0xf0, 0xd2, 0xba, 0x26, - 0x40, 0x09, 0xbf, 0xb5, 0x01, 0xff, 0x45, 0xc3, 0x0a, 0xf8, 0xfb, 0x01, - 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0xf9, 0xfb, 0x01, 0x43, 0xbf, 0x0a, 0xf1, - 0xfb, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xa1, 0x1d, 0xf0, 0xfb, 0x41, - 0x44, 0x25, 0x01, 0xf3, 0xfb, 0x01, 0x42, 0x15, 0x02, 0xf2, 0xfb, 0x41, - 0x44, 0x27, 0x1d, 0xf7, 0xfb, 0x01, 0x42, 0x60, 0x25, 0xf6, 0xfb, 0x41, - 0x43, 0xa7, 0x05, 0xf5, 0xfb, 0x01, 0x43, 0xcb, 0x06, 0xf4, 0xfb, 0x41, - 0x4f, 0xa7, 0x68, 0x48, 0xf6, 0x01, 0x45, 0x91, 0xe2, 0x31, 0xf3, 0x41, - 0x4f, 0xa0, 0x6f, 0x48, 0xf9, 0x01, 0xb4, 0x01, 0xff, 0x48, 0x96, 0x04, - 0xa7, 0x00, 0x00, 0x42, 0x0c, 0x00, 0x14, 0x23, 0x40, 0xec, 0xad, 0xf9, - 0x01, 0xf4, 0xba, 0xf4, 0x41, 0xa1, 0x8a, 0x01, 0x44, 0x29, 0xe2, 0xeb, - 0xf3, 0x81, 0x7d, 0xaf, 0x64, 0xb2, 0x01, 0xff, 0xa5, 0x53, 0x04, 0x4c, - 0x06, 0x0c, 0x43, 0x44, 0x20, 0xdc, 0xf4, 0x01, 0x44, 0xf9, 0x4a, 0x08, - 0x21, 0x40, 0x08, 0xb9, 0x05, 0x1b, 0x54, 0xfa, 0x1e, 0x70, 0xf6, 0x01, - 0x06, 0x0c, 0x07, 0x01, 0xff, 0xe5, 0x2f, 0x21, 0x00, 0xe7, 0x0a, 0x21, - 0x00, 0xec, 0x13, 0x21, 0x00, 0xef, 0x34, 0x21, 0x40, 0xe2, 0x2c, 0x21, - 0x00, 0xe5, 0x30, 0x21, 0x00, 0xe6, 0x31, 0x21, 0x00, 0xe8, 0x0b, 0x21, - 0x00, 0xe9, 0x10, 0x21, 0x00, 0xec, 0x12, 0x21, 0x00, 0xed, 0x33, 0x21, - 0x00, 0xf0, 0x18, 0x21, 0x00, 0xf2, 0x1b, 0x21, 0x40, 0x42, 0x92, 0x01, - 0xb5, 0xf5, 0x01, 0x47, 0xa2, 0xd4, 0x9b, 0xfa, 0x41, 0x44, 0xe5, 0xd2, - 0xf4, 0xf6, 0x01, 0x03, 0xeb, 0xd2, 0x01, 0xff, 0x42, 0x10, 0x00, 0x82, - 0xf9, 0x01, 0x42, 0xc4, 0x02, 0x4f, 0x26, 0x40, 0x48, 0x02, 0xc0, 0x92, - 0xf3, 0x41, 0x43, 0xec, 0x00, 0x96, 0x26, 0x00, 0x42, 0x6e, 0x1b, 0xe3, - 0xf9, 0x41, 0x05, 0x2b, 0x74, 0x81, 0x08, 0x49, 0xd6, 0xb6, 0x50, 0x26, - 0x00, 0x46, 0xdc, 0xd9, 0xf5, 0x26, 0x00, 0x51, 0xf6, 0x59, 0x76, 0xf3, - 0x01, 0xac, 0xd8, 0x07, 0x08, 0x20, 0x69, 0xcf, 0x04, 0xae, 0xa1, 0x04, - 0x42, 0x0d, 0x00, 0x7b, 0xf9, 0x01, 0xb4, 0x85, 0x04, 0x02, 0x42, 0x00, - 0x06, 0x47, 0xd3, 0xd4, 0xb7, 0xf3, 0x41, 0x07, 0x52, 0xcc, 0x06, 0x44, - 0x9a, 0xee, 0x95, 0xf9, 0x41, 0x54, 0x33, 0x40, 0xb4, 0xa8, 0x00, 0xa4, - 0x96, 0x03, 0x07, 0xc1, 0x05, 0x6f, 0x05, 0x2f, 0x03, 0x4e, 0x0b, 0xd1, - 0x75, 0x01, 0xff, 0xa1, 0x3b, 0xe5, 0xbe, 0xa8, 0x80, 0x32, 0xe9, 0xb6, - 0xa8, 0x80, 0x29, 0xef, 0xc1, 0xa8, 0x80, 0x20, 0xf5, 0xb8, 0xa8, 0x80, - 0x17, 0x08, 0x9b, 0xbe, 0x01, 0xff, 0xec, 0xbc, 0xa8, 0x80, 0x09, 0xf2, - 0xba, 0xa8, 0xc0, 0x00, 0xf2, 0xbb, 0xa8, 0x40, 0xec, 0xbd, 0xa8, 0x40, - 0xf5, 0xb9, 0xa8, 0x40, 0xef, 0xc2, 0xa8, 0x40, 0xe9, 0xb7, 0xa8, 0x40, - 0xe5, 0xbf, 0xa8, 0x40, 0xe1, 0xb5, 0xa8, 0x00, 0xe9, 0xc0, 0xa8, 0x00, - 0xf5, 0xc3, 0xa8, 0x40, 0x48, 0xd0, 0x15, 0x80, 0xa8, 0x00, 0x4b, 0x4f, - 0x23, 0xc5, 0xa8, 0x00, 0x02, 0x02, 0x00, 0x01, 0xff, 0x44, 0x5d, 0x23, - 0xc4, 0xa8, 0x00, 0x45, 0xa3, 0x4a, 0x81, 0xa8, 0x40, 0xe1, 0x82, 0xa8, - 0x80, 0x91, 0x02, 0xa2, 0x84, 0x02, 0xa3, 0xf7, 0x01, 0xa4, 0xde, 0x01, - 0xe5, 0x8c, 0xa8, 0x80, 0xd4, 0x01, 0xa7, 0xc7, 0x01, 0x42, 0x22, 0x00, - 0xb2, 0xa8, 0x00, 0xe9, 0x84, 0xa8, 0x80, 0xb7, 0x01, 0xaa, 0xaa, 0x01, - 0xab, 0x9d, 0x01, 0xac, 0x90, 0x01, 0x42, 0x6c, 0x00, 0xaa, 0xa8, 0x00, - 0xae, 0x72, 0xef, 0x8f, 0xa8, 0x80, 0x69, 0xb0, 0x5d, 0x42, 0x71, 0x00, - 0xac, 0xa8, 0x00, 0xb3, 0x45, 0xb4, 0x2c, 0xf5, 0x86, 0xa8, 0x80, 0x23, - 0xb6, 0x06, 0x42, 0x34, 0x22, 0xab, 0xa8, 0x40, 0xe1, 0xae, 0xa8, 0x00, - 0x07, 0x9c, 0xbe, 0x01, 0xff, 0xec, 0x8a, 0xa8, 0x80, 0x09, 0xf2, 0x88, - 0xa8, 0xc0, 0x00, 0xf2, 0x89, 0xa8, 0x40, 0xec, 0x8b, 0xa8, 0x40, 0xf5, - 0x87, 0xa8, 0x40, 0xe1, 0xa1, 0xa8, 0x00, 0x42, 0x22, 0x00, 0xa2, 0xa8, - 0x00, 0xb4, 0x01, 0xff, 0xe1, 0x9c, 0xa8, 0x00, 0x42, 0x22, 0x00, 0x9d, - 0xa8, 0x40, 0xe1, 0xb1, 0xa8, 0x00, 0x42, 0x22, 0x00, 0xaf, 0xa8, 0x00, - 0x42, 0x15, 0x06, 0xb0, 0xa8, 0x40, 0xe1, 0xa6, 0xa8, 0x00, 0x42, 0x22, - 0x00, 0xa7, 0xa8, 0x40, 0xef, 0x90, 0xa8, 0x40, 0xe1, 0xa5, 0xa8, 0x00, - 0x42, 0x24, 0x02, 0x96, 0xa8, 0x00, 0x42, 0xff, 0x04, 0xa0, 0xa8, 0x00, - 0x42, 0x34, 0x22, 0x9b, 0xa8, 0x40, 0xe1, 0xad, 0xa8, 0x00, 0x42, 0x74, - 0x00, 0xb3, 0xa8, 0x40, 0xe1, 0x92, 0xa8, 0x00, 0x42, 0x22, 0x00, 0x93, - 0xa8, 0x40, 0xe1, 0x99, 0xa8, 0x00, 0x42, 0x22, 0x00, 0x9a, 0xa8, 0x40, - 0xe9, 0x85, 0xa8, 0x40, 0xe1, 0x94, 0xa8, 0x00, 0x42, 0x22, 0x00, 0x95, - 0xa8, 0x40, 0xe5, 0x8d, 0xa8, 0x40, 0xe1, 0xa3, 0xa8, 0x00, 0xa4, 0x06, - 0x42, 0x22, 0x00, 0xa4, 0xa8, 0x40, 0xe1, 0x9e, 0xa8, 0x00, 0x42, 0x22, - 0x00, 0x9f, 0xa8, 0x40, 0xe1, 0x97, 0xa8, 0x00, 0x42, 0x22, 0x00, 0x98, - 0xa8, 0x40, 0xe1, 0xa8, 0xa8, 0x00, 0x42, 0x22, 0x00, 0xa9, 0xa8, 0x40, - 0xe1, 0x83, 0xa8, 0x00, 0xe9, 0x8e, 0xa8, 0x00, 0xf5, 0x91, 0xa8, 0x40, - 0x44, 0xd1, 0x1f, 0xce, 0xa8, 0x00, 0x05, 0xc5, 0x06, 0x06, 0x4b, 0xd8, - 0x9e, 0xcf, 0xa8, 0x40, 0x45, 0xc3, 0x0a, 0xd8, 0xa8, 0x00, 0xa6, 0x2e, - 0x44, 0x46, 0x2a, 0xd9, 0xa8, 0x00, 0x43, 0xbf, 0x0a, 0xd1, 0xa8, 0x00, - 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xa1, 0x1d, 0xd0, 0xa8, 0x40, 0x44, 0x25, - 0x01, 0xd3, 0xa8, 0x00, 0x42, 0x15, 0x02, 0xd2, 0xa8, 0x40, 0x44, 0x27, - 0x1d, 0xd7, 0xa8, 0x00, 0x42, 0x60, 0x25, 0xd6, 0xa8, 0x40, 0x43, 0xa7, - 0x05, 0xd5, 0xa8, 0x00, 0x43, 0xcb, 0x06, 0xd4, 0xa8, 0x40, 0x46, 0x4a, - 0xd8, 0xf0, 0xf6, 0x81, 0x06, 0x43, 0x5d, 0x01, 0x44, 0x26, 0x40, 0x48, - 0x6a, 0xbf, 0xe1, 0xf4, 0x41, 0x45, 0xa0, 0xe2, 0x6a, 0xf9, 0x01, 0x08, - 0xab, 0x15, 0x01, 0xff, 0x06, 0x01, 0x15, 0x06, 0x54, 0xb3, 0x15, 0x7a, - 0xf6, 0x41, 0x07, 0x3b, 0x01, 0x06, 0x68, 0xdd, 0x04, 0x78, 0xf6, 0x41, - 0x5d, 0xe8, 0x04, 0x77, 0xf6, 0x01, 0x64, 0xd8, 0x09, 0x76, 0xf6, 0x41, - 0x51, 0xb0, 0x4e, 0x36, 0x08, 0x00, 0x07, 0xc1, 0x05, 0xf3, 0x01, 0xad, - 0xb2, 0x01, 0x0c, 0x01, 0x16, 0x51, 0x0b, 0xd1, 0x75, 0x01, 0xff, 0xe1, - 0x23, 0x08, 0x80, 0x43, 0xe5, 0x1d, 0x08, 0x00, 0xe9, 0x2a, 0x08, 0x00, - 0x05, 0x68, 0x33, 0x22, 0xef, 0x2b, 0x08, 0x80, 0x12, 0xb3, 0x04, 0xf5, - 0x27, 0x08, 0x40, 0x46, 0x06, 0xd3, 0x25, 0x08, 0x00, 0x44, 0x00, 0xe8, - 0x2c, 0x08, 0x40, 0x49, 0x65, 0xbe, 0x21, 0x08, 0xc0, 0x00, 0xe1, 0x1e, - 0x08, 0x40, 0xe1, 0x22, 0x08, 0x80, 0x0c, 0xe5, 0x1c, 0x08, 0x00, 0xe9, - 0x29, 0x08, 0x00, 0xf5, 0x26, 0x08, 0x40, 0xe1, 0x1f, 0x08, 0x40, 0xe1, - 0x20, 0x08, 0x40, 0xa1, 0x3b, 0x43, 0x29, 0xb0, 0x33, 0x08, 0x00, 0x4d, - 0x14, 0x84, 0x37, 0x08, 0x00, 0x47, 0xa4, 0xd0, 0x30, 0x08, 0x00, 0x45, - 0x1c, 0x84, 0x39, 0x08, 0x00, 0xb3, 0x15, 0x44, 0x76, 0xef, 0x3b, 0x08, - 0x00, 0xba, 0x01, 0xff, 0x43, 0x93, 0xf0, 0x3a, 0x08, 0x00, 0x44, 0x66, - 0xed, 0x38, 0x08, 0x40, 0x49, 0x4b, 0xb7, 0x35, 0x08, 0x00, 0x4b, 0x54, - 0x9e, 0x3d, 0x08, 0x40, 0x45, 0x68, 0xe3, 0x31, 0x08, 0x00, 0xae, 0x0c, - 0x46, 0x9a, 0xdc, 0x3c, 0x08, 0x00, 0x45, 0x31, 0xe8, 0x34, 0x08, 0x40, - 0x43, 0x06, 0x12, 0x32, 0x08, 0x00, 0x44, 0x12, 0xee, 0x3e, 0x08, 0x40, - 0x04, 0xba, 0x00, 0x15, 0x0f, 0x2a, 0x0c, 0x01, 0xff, 0x4e, 0xf8, 0x75, - 0x1a, 0x08, 0x00, 0xe9, 0x28, 0x08, 0x00, 0x47, 0x05, 0xd3, 0x24, 0x08, - 0x40, 0x46, 0x4b, 0x6a, 0x19, 0x08, 0x00, 0x4e, 0xf8, 0x75, 0x1b, 0x08, - 0x00, 0x42, 0x9e, 0x01, 0x16, 0x08, 0x80, 0x0c, 0x47, 0xa4, 0xd0, 0x2d, - 0x08, 0x00, 0x49, 0x6c, 0xba, 0x18, 0x08, 0x40, 0x45, 0xdb, 0xde, 0x17, - 0x08, 0x40, 0x44, 0xdc, 0xde, 0x00, 0x08, 0x00, 0xa2, 0x72, 0x45, 0xef, - 0x52, 0x03, 0x08, 0x00, 0x42, 0xc8, 0x02, 0x10, 0x08, 0x00, 0x45, 0x7c, - 0xe3, 0x02, 0x08, 0x00, 0xa9, 0x52, 0x44, 0x7e, 0xed, 0x0a, 0x08, 0x00, - 0x45, 0xee, 0xe4, 0x0b, 0x08, 0x00, 0x43, 0xfb, 0x8e, 0x0c, 0x08, 0x00, - 0x43, 0x54, 0x22, 0x0d, 0x08, 0x00, 0x43, 0x4a, 0xf1, 0x12, 0x08, 0x00, - 0x44, 0xf6, 0x52, 0x13, 0x08, 0x00, 0xb3, 0x20, 0xb4, 0x0c, 0x43, 0x03, - 0x76, 0x09, 0x08, 0x00, 0x43, 0xfc, 0x09, 0x06, 0x08, 0x40, 0x43, 0x94, - 0xc0, 0x15, 0x08, 0x00, 0x42, 0x52, 0x00, 0x08, 0x08, 0x00, 0x46, 0xc4, - 0xdc, 0x11, 0x08, 0x40, 0x43, 0x90, 0x00, 0x14, 0x08, 0x00, 0x46, 0x00, - 0xda, 0x0e, 0x08, 0x40, 0xee, 0x0f, 0x08, 0x00, 0xf4, 0x07, 0x08, 0x00, - 0xf9, 0x04, 0x08, 0x40, 0x42, 0x31, 0x12, 0x05, 0x08, 0x00, 0x42, 0x52, - 0x00, 0x01, 0x08, 0x40, 0xb4, 0x06, 0x4a, 0x13, 0x92, 0xe1, 0xfa, 0x41, - 0x47, 0xca, 0xca, 0xc2, 0xf9, 0x01, 0x43, 0x39, 0x0d, 0x13, 0x26, 0x40, - 0x43, 0xd9, 0x12, 0xf7, 0xf9, 0x01, 0x44, 0x01, 0x5d, 0xba, 0xf9, 0x41, - 0xa1, 0x81, 0x21, 0xa5, 0xe4, 0x1a, 0x49, 0x42, 0xb7, 0x8f, 0xf9, 0x01, - 0xa9, 0xd4, 0x0a, 0xaf, 0x81, 0x07, 0xb5, 0x01, 0xff, 0x48, 0xa2, 0xc1, - 0xbd, 0x20, 0x00, 0x4c, 0x85, 0x8d, 0xc9, 0xf3, 0x01, 0x4a, 0x45, 0xaa, - 0xf4, 0x29, 0x00, 0x03, 0xdc, 0xce, 0xf3, 0x04, 0xae, 0x2f, 0x48, 0xf8, - 0x7e, 0xa8, 0x20, 0x00, 0x1a, 0x98, 0x21, 0x01, 0xff, 0x48, 0x9a, 0xc1, - 0xf6, 0x2b, 0x00, 0x46, 0x9c, 0xc1, 0xf4, 0x2b, 0x00, 0x48, 0x6a, 0xc7, - 0xf5, 0x2b, 0x00, 0x48, 0x12, 0xc8, 0xf7, 0x2b, 0x00, 0x49, 0x7b, 0xbd, - 0xf8, 0x2b, 0x00, 0x49, 0x80, 0xbe, 0xf3, 0x2b, 0x40, 0x03, 0x27, 0x03, - 0x0f, 0xae, 0x01, 0xff, 0x42, 0x33, 0x00, 0xc3, 0xf3, 0x01, 0x53, 0x19, - 0x49, 0xbd, 0xf3, 0x41, 0x4d, 0x41, 0x7f, 0xee, 0x16, 0x00, 0x4f, 0x88, - 0x69, 0xf0, 0x16, 0x00, 0x51, 0x1a, 0x58, 0xed, 0x16, 0x00, 0x07, 0xc1, - 0x05, 0x12, 0x54, 0x53, 0x43, 0xec, 0x16, 0x00, 0x52, 0x1a, 0x54, 0xeb, - 0x16, 0x00, 0x4f, 0x70, 0x72, 0xef, 0x16, 0x40, 0xa1, 0xec, 0x03, 0x58, - 0xad, 0x26, 0xd2, 0x16, 0x00, 0xe3, 0xcd, 0x16, 0x80, 0xc8, 0x03, 0xe4, - 0xd1, 0x16, 0x80, 0xab, 0x03, 0xe5, 0xc2, 0x16, 0x80, 0x8d, 0x03, 0xa6, - 0xe1, 0x02, 0xe7, 0xb5, 0x16, 0x80, 0xc8, 0x02, 0x02, 0x22, 0x00, 0xb7, - 0x02, 0xa9, 0x8f, 0x02, 0x47, 0x69, 0xcf, 0xc3, 0x16, 0x00, 0xeb, 0xf1, - 0x16, 0x80, 0xf4, 0x01, 0xac, 0xc8, 0x01, 0x4c, 0x19, 0x90, 0xd7, 0x16, - 0x00, 0x51, 0x06, 0x5b, 0xbe, 0x16, 0x00, 0xef, 0xae, 0x16, 0x80, 0x98, - 0x01, 0x4f, 0x36, 0x70, 0xc8, 0x16, 0x00, 0xf1, 0xe9, 0x16, 0x00, 0x50, - 0xba, 0x64, 0xb1, 0x16, 0x00, 0xb3, 0x34, 0xb4, 0x26, 0x49, 0x26, 0xbe, - 0xa2, 0x16, 0x00, 0xf6, 0xa1, 0x16, 0x00, 0xf7, 0xa5, 0x16, 0x80, 0x11, - 0xf8, 0xea, 0x16, 0x00, 0xf9, 0xa4, 0x16, 0x80, 0x04, 0xfa, 0xce, 0x16, - 0x40, 0xf2, 0xa3, 0x16, 0x40, 0x4b, 0x27, 0xa2, 0xb9, 0x16, 0x40, 0x53, - 0xba, 0x48, 0xa6, 0x16, 0x00, 0x4e, 0xb8, 0x77, 0xcf, 0x16, 0x40, 0xe8, - 0xf2, 0x16, 0x80, 0x12, 0x56, 0xa1, 0x33, 0xcb, 0x16, 0x00, 0x47, 0x84, - 0xd1, 0xca, 0x16, 0x00, 0x43, 0xaa, 0x0a, 0xe5, 0x16, 0x40, 0x09, 0x05, - 0xbb, 0x01, 0xff, 0x44, 0x17, 0x00, 0xc6, 0x16, 0x00, 0x49, 0xbc, 0x26, - 0xd3, 0x16, 0x00, 0x48, 0xfa, 0xc3, 0xbd, 0x16, 0x00, 0x46, 0xf6, 0xda, - 0xd9, 0x16, 0x00, 0x46, 0x11, 0x5b, 0xbf, 0x16, 0x00, 0x45, 0x75, 0x7a, - 0xad, 0x16, 0x00, 0x45, 0xb2, 0x33, 0xcc, 0x16, 0x00, 0x45, 0xc1, 0x77, - 0xd0, 0x16, 0x00, 0x42, 0x7d, 0x21, 0xe7, 0x16, 0x40, 0xe5, 0xaf, 0x16, - 0x00, 0xee, 0xb0, 0x16, 0x00, 0xef, 0xf3, 0x16, 0x00, 0x45, 0xb5, 0xe6, - 0xd5, 0x16, 0x00, 0x43, 0xf2, 0x01, 0xa9, 0x16, 0x00, 0x4e, 0x70, 0x7b, - 0xdf, 0x16, 0x40, 0x51, 0x0a, 0x57, 0xda, 0x16, 0x00, 0x0b, 0xa7, 0x33, - 0x01, 0xff, 0x45, 0x4c, 0xe1, 0xc5, 0x16, 0x00, 0x48, 0xfa, 0xc3, 0xbc, - 0x16, 0x00, 0x46, 0xf6, 0xda, 0xd8, 0x16, 0x00, 0x45, 0x75, 0x7a, 0xac, - 0x16, 0x00, 0x42, 0x7d, 0x21, 0xe6, 0x16, 0x40, 0x03, 0x74, 0x44, 0x01, - 0xff, 0x42, 0x44, 0x00, 0xb4, 0x16, 0x00, 0xe1, 0xb2, 0x16, 0x40, 0x4b, - 0xf8, 0x97, 0xe8, 0x16, 0x00, 0x42, 0x1d, 0x01, 0xdd, 0x16, 0x80, 0x12, - 0x42, 0x0c, 0x00, 0xe1, 0x16, 0x00, 0x4c, 0x3d, 0x93, 0xc1, 0x16, 0x00, - 0x47, 0x9b, 0xd4, 0xc7, 0x16, 0x40, 0x43, 0xb9, 0x77, 0xdc, 0x16, 0x40, - 0x45, 0xc8, 0xe2, 0xbb, 0x16, 0x00, 0x46, 0x1c, 0xd9, 0xba, 0x16, 0x40, - 0x42, 0x17, 0x00, 0xb8, 0x16, 0x00, 0xa5, 0x01, 0xff, 0x49, 0x7b, 0xb4, - 0xb7, 0x16, 0x00, 0xf2, 0xc4, 0x16, 0x40, 0x4d, 0xee, 0x80, 0xa0, 0x16, - 0x00, 0x0d, 0x02, 0x86, 0x01, 0xff, 0xa1, 0x12, 0x42, 0x4e, 0x00, 0xf6, - 0x16, 0x00, 0x42, 0x34, 0x03, 0xf5, 0x16, 0x00, 0x42, 0x55, 0x0d, 0xf4, - 0x16, 0x40, 0xe3, 0xf7, 0x16, 0x00, 0x43, 0xd8, 0x1e, 0xf8, 0x16, 0x40, - 0x42, 0x17, 0x00, 0xe0, 0x16, 0x00, 0x49, 0x6f, 0xb7, 0xd6, 0x16, 0x00, - 0x42, 0x1d, 0x01, 0xb6, 0x16, 0x00, 0x42, 0x53, 0x00, 0xa7, 0x16, 0x40, - 0x4b, 0xe5, 0x96, 0xde, 0x16, 0x00, 0x06, 0xa0, 0x7e, 0x01, 0xff, 0xec, - 0xdb, 0x16, 0x00, 0xee, 0xc0, 0x16, 0x00, 0xf0, 0xd4, 0x16, 0x40, 0x43, - 0x24, 0x6a, 0xe3, 0x16, 0x00, 0xa5, 0x06, 0x46, 0x26, 0xde, 0xe2, 0x16, - 0x40, 0x43, 0x24, 0x6a, 0xe4, 0x16, 0x00, 0xee, 0xb3, 0x16, 0x40, 0x43, - 0x3a, 0x1b, 0xaa, 0x16, 0x00, 0x43, 0xd8, 0x1e, 0xab, 0x16, 0x00, 0x4a, - 0x9f, 0xaa, 0xc9, 0x16, 0x00, 0x46, 0x8c, 0xdb, 0xa8, 0x16, 0x40, 0x06, - 0xc4, 0x06, 0xb2, 0x01, 0x09, 0xb3, 0x58, 0x91, 0x01, 0x07, 0x2f, 0x39, - 0x01, 0xff, 0x05, 0xc3, 0x0a, 0x7e, 0xa6, 0x5f, 0x04, 0x46, 0x2a, 0x4f, - 0x4b, 0x1e, 0x11, 0x72, 0x0e, 0x01, 0xb3, 0x26, 0xb4, 0x01, 0xff, 0x42, - 0x92, 0x01, 0x69, 0x0e, 0x01, 0xa8, 0x0f, 0xb7, 0x01, 0xff, 0x44, 0x29, - 0x1d, 0x6a, 0x0e, 0x01, 0x49, 0x1c, 0x1d, 0x73, 0x0e, 0x41, 0x44, 0x2c, - 0x11, 0x6b, 0x0e, 0x01, 0x4b, 0x8f, 0x17, 0x74, 0x0e, 0x41, 0x04, 0x27, - 0x1d, 0x11, 0x02, 0x60, 0x25, 0x01, 0xff, 0x48, 0x21, 0x11, 0x77, 0x0e, - 0x01, 0x42, 0x2e, 0x11, 0x6e, 0x0e, 0x41, 0x48, 0x21, 0x11, 0x78, 0x0e, - 0x01, 0x42, 0x2e, 0x11, 0x6f, 0x0e, 0x41, 0x48, 0x21, 0x11, 0x7a, 0x0e, - 0x01, 0x42, 0x2e, 0x11, 0x71, 0x0e, 0x41, 0xa9, 0x0f, 0xaf, 0x01, 0xff, - 0x43, 0x2d, 0x11, 0x6c, 0x0e, 0x01, 0x4a, 0xa3, 0xb0, 0x75, 0x0e, 0x41, - 0x43, 0x09, 0x4c, 0x6d, 0x0e, 0x01, 0x4a, 0xb2, 0x38, 0x76, 0x0e, 0x41, - 0x48, 0x21, 0x11, 0x79, 0x0e, 0x01, 0xf9, 0x70, 0x0e, 0x41, 0x04, 0xbf, - 0x0a, 0x06, 0x4a, 0x03, 0xb0, 0x7e, 0x0e, 0x41, 0x44, 0x22, 0x00, 0x7b, - 0x0e, 0x01, 0x47, 0x2a, 0x01, 0x7c, 0x0e, 0x01, 0x45, 0x63, 0x73, 0x7d, - 0x0e, 0x41, 0x45, 0xc3, 0x0a, 0x67, 0x0e, 0x01, 0xa6, 0x29, 0x44, 0x46, - 0x2a, 0x68, 0x0e, 0x01, 0x43, 0xbf, 0x0a, 0x60, 0x0e, 0x01, 0xb3, 0x0f, - 0xb4, 0x01, 0xff, 0x44, 0x25, 0x01, 0x62, 0x0e, 0x01, 0x42, 0x15, 0x02, - 0x61, 0x0e, 0x41, 0x44, 0x27, 0x1d, 0x66, 0x0e, 0x01, 0x42, 0x60, 0x25, - 0x65, 0x0e, 0x41, 0x43, 0xa7, 0x05, 0x64, 0x0e, 0x01, 0x43, 0xcb, 0x06, - 0x63, 0x0e, 0x41, 0x52, 0xe6, 0x4e, 0x60, 0xf3, 0x01, 0x48, 0xc2, 0xc1, - 0x16, 0xf9, 0x01, 0x42, 0x36, 0x01, 0xa8, 0xfa, 0x81, 0xb6, 0x03, 0x02, - 0x0f, 0x07, 0x8c, 0x03, 0x04, 0xd5, 0x17, 0x82, 0x01, 0xaf, 0x74, 0x42, - 0x1b, 0x03, 0x39, 0xf3, 0x81, 0x67, 0x06, 0x17, 0x21, 0x45, 0x03, 0xf3, - 0x0a, 0x06, 0x45, 0x17, 0xe9, 0xa3, 0xf6, 0x41, 0x80, 0x2d, 0x0e, 0xc0, - 0x75, 0x01, 0xff, 0x43, 0xb4, 0xf0, 0x65, 0xf2, 0x01, 0x42, 0x15, 0x16, - 0x60, 0xf2, 0x01, 0x42, 0x5b, 0x15, 0x61, 0xf2, 0x01, 0x02, 0xa4, 0x02, - 0x06, 0x42, 0x93, 0x0c, 0x63, 0xf2, 0x41, 0x42, 0x3c, 0x01, 0x62, 0xf2, - 0x01, 0x46, 0xc6, 0xdd, 0x64, 0xf2, 0x41, 0x47, 0x25, 0xd2, 0xcd, 0xf4, - 0x01, 0x46, 0x5a, 0xdd, 0x8b, 0xf7, 0x41, 0x49, 0xc3, 0xb4, 0x3a, 0x21, - 0x00, 0x53, 0x1d, 0x21, 0x67, 0x27, 0x00, 0x58, 0x5d, 0x28, 0x65, 0x27, - 0x00, 0x5d, 0x8d, 0x15, 0xcd, 0x2b, 0x00, 0x57, 0x0a, 0x31, 0xcf, 0x2b, - 0x40, 0x43, 0xc3, 0x05, 0xf5, 0xf3, 0x41, 0x44, 0xee, 0x0c, 0x13, 0xf4, - 0x01, 0x4b, 0xf3, 0xa0, 0xdc, 0xfa, 0x41, 0x47, 0x4b, 0xcc, 0x9a, 0x01, - 0x01, 0x4e, 0xd2, 0x74, 0x9b, 0x01, 0x01, 0xa4, 0xe4, 0x01, 0x08, 0xb5, - 0x5b, 0x33, 0x4e, 0x04, 0x7a, 0x97, 0x01, 0x01, 0xb3, 0x06, 0x4a, 0x9a, - 0x9d, 0x91, 0x01, 0x41, 0xa5, 0x06, 0x4b, 0x3c, 0x9b, 0x95, 0x01, 0x41, - 0x4b, 0x99, 0x9d, 0x92, 0x01, 0x01, 0x4d, 0x3a, 0x87, 0x98, 0x01, 0x01, - 0x02, 0xaf, 0x06, 0x01, 0xff, 0x48, 0xda, 0xc0, 0x90, 0x01, 0x01, 0x48, - 0xfe, 0x48, 0x93, 0x01, 0x41, 0xa5, 0x9e, 0x01, 0xa6, 0x68, 0x44, 0x46, - 0x2a, 0x68, 0x21, 0x00, 0x43, 0xbf, 0x0a, 0x60, 0x21, 0x80, 0x3e, 0x54, - 0x1b, 0x44, 0x83, 0x21, 0x00, 0xb3, 0x23, 0xb4, 0x01, 0xff, 0x42, 0x92, - 0x01, 0x69, 0x21, 0x80, 0x13, 0x44, 0x25, 0x01, 0x62, 0x21, 0x00, 0xb7, - 0x01, 0xff, 0x44, 0x46, 0x2b, 0x6b, 0x21, 0x00, 0xef, 0x61, 0x21, 0x40, - 0x49, 0xd4, 0x5c, 0x82, 0x21, 0x40, 0x44, 0x27, 0x1d, 0x66, 0x21, 0x00, - 0x42, 0x60, 0x25, 0x65, 0x21, 0xc0, 0x00, 0x4a, 0xa1, 0xa3, 0x85, 0x21, - 0x40, 0x80, 0x01, 0xff, 0x47, 0x22, 0x11, 0x6d, 0x21, 0x80, 0x0d, 0x48, - 0xd5, 0x5c, 0x6f, 0x21, 0xc0, 0x00, 0x44, 0x8a, 0xe9, 0x80, 0x21, 0x40, - 0x49, 0xd4, 0x5c, 0x88, 0x21, 0x40, 0xa9, 0x06, 0x43, 0xcb, 0x06, 0x63, - 0x21, 0x40, 0x43, 0x09, 0x4c, 0x6c, 0x21, 0x80, 0x16, 0x42, 0x32, 0x00, - 0x64, 0x21, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x47, 0x22, 0x11, 0x6e, 0x21, - 0x00, 0x48, 0xd5, 0x5c, 0x81, 0x21, 0x40, 0x80, 0x01, 0xff, 0x4a, 0x43, - 0xa7, 0x86, 0x21, 0x00, 0x48, 0xd5, 0x5c, 0x87, 0x21, 0x40, 0x44, 0xc9, - 0x00, 0x67, 0x21, 0x00, 0x45, 0x0b, 0x6e, 0x6a, 0x21, 0x40, 0x4c, 0xdd, - 0x8c, 0x96, 0x01, 0x01, 0x53, 0xf3, 0x48, 0x94, 0x01, 0x01, 0x4d, 0xe3, - 0x87, 0x99, 0x01, 0x41, 0x49, 0x17, 0xb2, 0xfb, 0xf9, 0x01, 0xa5, 0x06, - 0x59, 0xc5, 0x23, 0x23, 0xf9, 0x41, 0x4e, 0x26, 0x75, 0xde, 0xf5, 0x01, - 0x02, 0x18, 0x00, 0x01, 0xff, 0x47, 0x3f, 0x63, 0xa2, 0xf3, 0x01, 0x45, - 0xdc, 0xe7, 0xfc, 0xf6, 0x41, 0x42, 0xc2, 0x05, 0x80, 0xf6, 0x41, 0x47, - 0xed, 0x4a, 0xfc, 0xfd, 0x00, 0x44, 0x44, 0x84, 0x80, 0xf3, 0x81, 0xb3, - 0x0f, 0x03, 0xe3, 0x07, 0xa2, 0x0f, 0x43, 0xaa, 0x04, 0x46, 0xf9, 0x01, - 0x03, 0xca, 0x00, 0x4a, 0x42, 0x1d, 0x01, 0x8d, 0xf4, 0x81, 0x11, 0x17, - 0x52, 0x30, 0x01, 0xff, 0x50, 0xaa, 0x61, 0x2b, 0x29, 0x00, 0x50, 0x83, - 0x3f, 0x30, 0x29, 0x40, 0x80, 0x0c, 0x49, 0xc8, 0xb5, 0x90, 0xfa, 0x01, - 0x48, 0x72, 0xc4, 0x6d, 0xf5, 0x41, 0x45, 0x5c, 0x00, 0xda, 0x02, 0x00, - 0x44, 0x1a, 0xec, 0xdf, 0xf6, 0x01, 0x48, 0xa9, 0x0c, 0x57, 0x22, 0x00, - 0x4b, 0x52, 0x9b, 0x56, 0x22, 0x00, 0x48, 0xdc, 0x1c, 0x18, 0x22, 0x00, - 0x45, 0x9c, 0x01, 0x30, 0x2e, 0x40, 0x80, 0xc6, 0x08, 0x8d, 0xe3, 0x06, - 0x55, 0xc9, 0x3a, 0x3d, 0x2a, 0x00, 0x06, 0xa9, 0x01, 0x01, 0xff, 0x45, - 0xce, 0x00, 0x92, 0x21, 0x80, 0xba, 0x04, 0xa2, 0x9b, 0x04, 0x50, 0x0a, - 0x60, 0x3e, 0xf8, 0x01, 0xa4, 0xdb, 0x03, 0xa6, 0xcc, 0x03, 0xa8, 0xcb, - 0x02, 0x57, 0x86, 0x2e, 0xa7, 0xf8, 0x01, 0x51, 0x8e, 0x5b, 0xfe, 0x21, - 0x00, 0xb0, 0xb0, 0x02, 0x4f, 0x72, 0x70, 0x46, 0x2b, 0x00, 0xb2, 0x9b, - 0x02, 0xb3, 0x81, 0x02, 0xb4, 0x1f, 0xb7, 0x01, 0xff, 0x49, 0x21, 0xb4, - 0x9d, 0x21, 0x00, 0x4a, 0xfb, 0x0f, 0xe8, 0x21, 0xc0, 0x00, 0x80, 0x01, - 0xff, 0x49, 0xc4, 0xb6, 0xf0, 0x21, 0x00, 0x59, 0x25, 0x1e, 0x96, 0xf8, - 0x41, 0x55, 0x82, 0x3c, 0xa3, 0xf8, 0x01, 0x02, 0x0d, 0x00, 0x51, 0x02, - 0x15, 0x02, 0x01, 0xff, 0x4d, 0x16, 0x7e, 0xa0, 0x21, 0x00, 0x08, 0x09, - 0x02, 0x01, 0xff, 0x06, 0xce, 0x00, 0x06, 0x51, 0x26, 0x5d, 0x10, 0x29, - 0x40, 0x48, 0xfd, 0xb1, 0x05, 0x29, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, - 0x56, 0xc5, 0x32, 0x01, 0x29, 0x00, 0xb4, 0x06, 0x4f, 0xcc, 0x32, 0x00, - 0x29, 0x40, 0x43, 0x24, 0x17, 0x16, 0x29, 0x80, 0x06, 0x52, 0x04, 0x06, - 0xee, 0x2b, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x56, 0xc5, 0x32, 0x18, - 0x29, 0x00, 0x4f, 0xcc, 0x32, 0x17, 0x29, 0x40, 0x05, 0x04, 0x02, 0x11, - 0x04, 0xcb, 0x1c, 0x01, 0xff, 0x45, 0xce, 0x00, 0xdb, 0x21, 0x00, 0x4a, - 0x2d, 0x5d, 0x0f, 0x29, 0x40, 0x4a, 0xe0, 0x01, 0x92, 0xf8, 0x01, 0x08, - 0x09, 0x02, 0x01, 0xff, 0x45, 0xce, 0x00, 0x62, 0x2b, 0x80, 0x0c, 0x4c, - 0x05, 0x8c, 0x6c, 0x2b, 0x00, 0x4d, 0xa7, 0x85, 0x86, 0x2b, 0x40, 0x80, - 0x01, 0xff, 0x64, 0x48, 0x09, 0x82, 0x2b, 0x00, 0x46, 0x82, 0x14, 0x72, - 0x2b, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x4a, 0x17, 0xa6, 0x2a, 0xf8, - 0x01, 0x07, 0x3b, 0x01, 0x28, 0x4b, 0xef, 0x66, 0x2e, 0xf8, 0x01, 0x09, - 0x4c, 0xb9, 0x12, 0x4c, 0x3d, 0x90, 0x26, 0xf8, 0x01, 0x4c, 0xa9, 0x90, - 0x22, 0xf8, 0x01, 0x50, 0xea, 0x66, 0x32, 0xf8, 0x41, 0x49, 0xa5, 0x01, - 0xa7, 0x2b, 0x00, 0x47, 0x50, 0x02, 0xa5, 0x2b, 0x40, 0x51, 0x1c, 0x05, - 0x7c, 0x2b, 0x00, 0x4f, 0xcc, 0x32, 0x7c, 0x2b, 0x40, 0x4f, 0x6b, 0x65, - 0x52, 0xf8, 0x01, 0x02, 0x7c, 0x00, 0x01, 0xff, 0x4a, 0x2b, 0x92, 0x3a, - 0xf8, 0x01, 0x4b, 0x1f, 0x7b, 0xdd, 0x21, 0x40, 0x57, 0x2a, 0x2e, 0xa5, - 0xf8, 0x01, 0x45, 0x4d, 0xac, 0x6e, 0xf6, 0x41, 0x4c, 0xa8, 0x85, 0xc9, - 0x21, 0x00, 0x4b, 0x48, 0xa2, 0xf8, 0xfa, 0x41, 0xa1, 0x11, 0x05, 0x02, - 0x15, 0x01, 0xff, 0x45, 0xce, 0x00, 0x46, 0xf8, 0x01, 0x50, 0x0a, 0x60, - 0x42, 0xf8, 0x41, 0x42, 0x1b, 0x00, 0xf1, 0xfa, 0x01, 0x06, 0x67, 0x05, - 0x01, 0xff, 0x56, 0x17, 0x35, 0xcc, 0x21, 0x00, 0x0a, 0x6d, 0x05, 0x01, - 0xff, 0x04, 0xa5, 0x01, 0x31, 0x02, 0x50, 0x02, 0x01, 0xff, 0x80, 0x06, - 0x45, 0xa9, 0x01, 0xc0, 0x21, 0x40, 0x06, 0x5c, 0x00, 0x0c, 0x48, 0xfd, - 0xb1, 0x5b, 0x29, 0x00, 0x46, 0x82, 0x14, 0x53, 0x29, 0x40, 0xac, 0x06, - 0x61, 0x5a, 0x05, 0x64, 0x29, 0x40, 0x5d, 0x36, 0x15, 0x68, 0x29, 0x00, - 0x48, 0x9e, 0x69, 0x6c, 0x29, 0x40, 0x80, 0x06, 0x45, 0xa9, 0x01, 0xc1, - 0x21, 0x40, 0x66, 0x16, 0x06, 0x69, 0x29, 0x00, 0x4f, 0x97, 0x69, 0x6d, - 0x29, 0x00, 0x48, 0xfd, 0xb1, 0x5f, 0x29, 0x00, 0x46, 0x82, 0x14, 0x57, - 0x29, 0x40, 0x50, 0x92, 0x58, 0x36, 0xf8, 0x01, 0x60, 0xe5, 0x0f, 0xab, - 0xf8, 0x41, 0x4b, 0x06, 0x8c, 0xe2, 0x21, 0x00, 0x06, 0x3c, 0x01, 0x01, - 0xff, 0x45, 0xce, 0x00, 0xd2, 0x21, 0x80, 0x06, 0x4a, 0x2d, 0x5d, 0x0d, - 0x29, 0x40, 0x80, 0x06, 0x45, 0x22, 0x17, 0x1c, 0x29, 0x40, 0x48, 0xfd, - 0xb1, 0x07, 0x29, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x46, 0x27, 0x05, - 0xcf, 0x21, 0x00, 0x4f, 0xcc, 0x32, 0x03, 0x29, 0x40, 0x5f, 0x64, 0x10, - 0xa9, 0xf8, 0x01, 0x05, 0xe2, 0x02, 0x06, 0x58, 0xdd, 0x29, 0xa1, 0xf8, - 0x41, 0x45, 0xce, 0x00, 0x95, 0x2b, 0x00, 0x53, 0x8a, 0x47, 0x8a, 0x2b, - 0x40, 0x80, 0x06, 0x45, 0x22, 0x17, 0x1a, 0x29, 0x40, 0xa1, 0xdf, 0x01, - 0x05, 0x7f, 0x05, 0xc7, 0x01, 0x54, 0xb7, 0x43, 0xc4, 0x21, 0x00, 0xb4, - 0x99, 0x01, 0x05, 0x51, 0x00, 0x01, 0xff, 0x50, 0x2a, 0x60, 0xb4, 0x21, - 0x00, 0x02, 0x3b, 0x01, 0x7e, 0x55, 0xd5, 0x01, 0x16, 0xf8, 0x01, 0x44, - 0x5d, 0x0e, 0xaa, 0x21, 0x00, 0xac, 0x5b, 0x59, 0x5b, 0x24, 0x06, 0xf8, - 0x01, 0x4c, 0x21, 0x91, 0x9a, 0xf8, 0x01, 0x4a, 0x33, 0xad, 0x45, 0x29, - 0x00, 0xb3, 0x31, 0xb4, 0x06, 0x4f, 0xcc, 0x32, 0xf8, 0x21, 0x40, 0x43, - 0x24, 0x17, 0xa3, 0x21, 0x80, 0x11, 0x03, 0xfb, 0x0b, 0x01, 0xff, 0x49, - 0xa5, 0x01, 0x0e, 0x2b, 0x00, 0x47, 0x50, 0x02, 0x0f, 0x2b, 0x40, 0x06, - 0x50, 0x00, 0x01, 0xff, 0x56, 0xc5, 0x32, 0x15, 0x29, 0x00, 0x4f, 0xcc, - 0x32, 0x14, 0x29, 0x40, 0x05, 0x0d, 0x07, 0x06, 0x45, 0x28, 0x05, 0x9b, - 0x21, 0x40, 0x55, 0xd5, 0x01, 0x12, 0xf8, 0x01, 0x52, 0x03, 0x06, 0x02, - 0xf8, 0x41, 0x57, 0xd6, 0x28, 0x0a, 0xf8, 0x01, 0xaf, 0x01, 0xff, 0x42, - 0x1f, 0x00, 0xac, 0x21, 0x00, 0x48, 0x0f, 0xab, 0xb2, 0xf8, 0x41, 0x49, - 0x8d, 0xbd, 0x11, 0x29, 0x00, 0x54, 0xc7, 0x32, 0xfb, 0x21, 0x40, 0x07, - 0x8d, 0x2a, 0x11, 0x03, 0x83, 0x14, 0x01, 0xff, 0x42, 0x17, 0x00, 0xe5, - 0x21, 0x00, 0x4c, 0x10, 0x56, 0x1e, 0x29, 0x40, 0x4c, 0x87, 0x00, 0x43, - 0x2b, 0x00, 0x48, 0x8a, 0xc8, 0x44, 0x2b, 0x00, 0xf8, 0x47, 0x29, 0x40, - 0x43, 0x16, 0x00, 0xa6, 0x21, 0x80, 0x06, 0x4f, 0xe5, 0x0b, 0xc1, 0xf8, - 0x41, 0x51, 0x0b, 0x56, 0x20, 0x29, 0x40, 0x05, 0x5d, 0x00, 0x06, 0x63, - 0xac, 0x0a, 0xb6, 0xfb, 0x41, 0x4f, 0x10, 0x69, 0x75, 0x29, 0x00, 0x08, - 0xcc, 0x70, 0x0c, 0x55, 0x3f, 0x3d, 0x42, 0x29, 0x00, 0x4e, 0x93, 0x3d, - 0x74, 0x29, 0x40, 0x4f, 0x10, 0x69, 0x48, 0x2b, 0x00, 0x4e, 0x93, 0x3d, - 0x4c, 0x2b, 0x40, 0x07, 0xa0, 0x2d, 0x9c, 0x01, 0x5b, 0xfe, 0x1a, 0xe5, - 0x26, 0x00, 0x09, 0x9c, 0x01, 0x2b, 0xb3, 0x1d, 0x08, 0xf2, 0xc8, 0x01, - 0xff, 0x49, 0x07, 0xb6, 0x2b, 0x20, 0x00, 0x47, 0x34, 0x03, 0x67, 0x20, - 0x00, 0x44, 0xb9, 0x00, 0x0f, 0x20, 0x00, 0x48, 0x0a, 0xc7, 0x2e, 0x20, - 0x40, 0x5c, 0x72, 0x17, 0xa9, 0x27, 0x00, 0x57, 0x13, 0x2e, 0x38, 0x29, - 0x40, 0xa1, 0x59, 0x54, 0x6f, 0x40, 0xfd, 0x29, 0x00, 0xa4, 0x45, 0x4b, - 0x8f, 0x99, 0x7a, 0xcc, 0x01, 0x47, 0x7b, 0xce, 0x01, 0xcc, 0x01, 0x50, - 0x7a, 0x63, 0x0e, 0xf5, 0x01, 0xb2, 0x0c, 0x4c, 0xa9, 0x93, 0x03, 0xcc, - 0x01, 0x44, 0xd7, 0xc4, 0x9f, 0xcc, 0x41, 0x49, 0x40, 0xb3, 0x99, 0xcc, - 0x01, 0x44, 0x75, 0xaa, 0x67, 0xcc, 0x01, 0xaf, 0x01, 0xff, 0x05, 0x17, - 0x09, 0x06, 0x50, 0x3a, 0x63, 0xa3, 0xcc, 0x41, 0x47, 0xc9, 0xcc, 0xa1, - 0xcc, 0x01, 0x44, 0x6f, 0x20, 0x58, 0xcc, 0x41, 0x44, 0x5e, 0xed, 0x0f, - 0xcc, 0x01, 0x5a, 0x30, 0x21, 0xbb, 0x00, 0x40, 0x4c, 0xf0, 0x0e, 0x2a, - 0x23, 0x00, 0x4a, 0xb3, 0xaf, 0x62, 0xcc, 0x41, 0x56, 0x15, 0x32, 0x8d, - 0x05, 0x00, 0x48, 0x6a, 0xc1, 0x49, 0xcc, 0x01, 0x03, 0xbf, 0x59, 0x20, - 0xb3, 0x01, 0xff, 0x0f, 0xa8, 0x2d, 0x0d, 0x4a, 0xdf, 0xb0, 0xd5, 0x0f, - 0xc0, 0x00, 0x4a, 0xbb, 0x57, 0xd7, 0x0f, 0x40, 0x4c, 0xbd, 0x8b, 0x76, - 0xcc, 0x01, 0x4a, 0x9b, 0x28, 0x72, 0xcc, 0x41, 0xe8, 0x93, 0xcc, 0x81, - 0x04, 0xf4, 0x1c, 0xf9, 0x41, 0x50, 0x95, 0x28, 0x95, 0xcc, 0x41, 0xa1, - 0x93, 0x05, 0x06, 0xe1, 0x02, 0x82, 0x05, 0xa3, 0xd7, 0x04, 0x02, 0x3b, - 0x01, 0xa7, 0x04, 0xa6, 0x90, 0x04, 0x02, 0x22, 0x00, 0xa9, 0x03, 0x14, - 0xb3, 0x42, 0x98, 0x03, 0x56, 0xbf, 0x34, 0x1d, 0x2e, 0x00, 0x60, 0x85, - 0x0f, 0xca, 0x22, 0x00, 0xaf, 0xed, 0x02, 0x4b, 0x50, 0x21, 0x29, 0x00, - 0x80, 0xd0, 0x02, 0x57, 0x9a, 0x2f, 0x0d, 0x2e, 0x00, 0xb3, 0xb4, 0x01, - 0xb4, 0x4b, 0x09, 0x32, 0x00, 0x33, 0xb7, 0x01, 0xff, 0x05, 0xae, 0x02, - 0x06, 0x4b, 0x06, 0x95, 0xd9, 0x29, 0x40, 0xa3, 0x18, 0x52, 0xcb, 0x26, - 0x17, 0x30, 0x00, 0x4b, 0x50, 0x21, 0x86, 0x29, 0x00, 0x4e, 0x27, 0x26, - 0x1b, 0x30, 0x00, 0x56, 0x05, 0x09, 0x19, 0x30, 0x40, 0x4d, 0xb9, 0x67, - 0x0f, 0x30, 0x00, 0x4c, 0x24, 0x0b, 0x84, 0x29, 0x40, 0xa2, 0x06, 0x4d, - 0x1a, 0x2f, 0x06, 0xcc, 0x41, 0x4d, 0x1a, 0x7f, 0x21, 0x2e, 0x00, 0x47, - 0x92, 0xd1, 0xb9, 0x23, 0x40, 0x43, 0xe3, 0x02, 0xa2, 0x22, 0x00, 0xa8, - 0x27, 0x55, 0x06, 0x09, 0x15, 0x30, 0x00, 0xb2, 0x01, 0xff, 0x53, 0xdf, - 0x46, 0x0a, 0x2e, 0x00, 0x04, 0x1b, 0x01, 0x01, 0xff, 0x42, 0x68, 0x00, - 0xbf, 0x22, 0x80, 0x06, 0x56, 0x98, 0x1c, 0x6e, 0xfb, 0x41, 0x54, 0x8f, - 0x3e, 0xce, 0x29, 0x40, 0x04, 0x70, 0x87, 0x28, 0x4c, 0xd5, 0x91, 0xed, - 0xf5, 0x01, 0x04, 0x26, 0x01, 0x01, 0xff, 0x4d, 0xb8, 0x4b, 0x88, 0xfb, - 0x01, 0x09, 0x2a, 0x01, 0x01, 0xff, 0x45, 0x33, 0x01, 0x8a, 0xfb, 0x01, - 0x57, 0x9d, 0x2e, 0xa1, 0xce, 0x01, 0x57, 0xae, 0x30, 0xaa, 0xce, 0x41, - 0x48, 0x6a, 0xc4, 0x0d, 0xcc, 0x01, 0x5a, 0x00, 0x22, 0xc3, 0xfb, 0x41, - 0x55, 0xff, 0x37, 0xc6, 0x27, 0x00, 0xa5, 0x7f, 0xa9, 0x71, 0x02, 0x6f, - 0x02, 0x4f, 0x4d, 0x28, 0x26, 0x5d, 0x00, 0x80, 0x06, 0x53, 0x0a, 0x26, - 0x03, 0x2e, 0x40, 0x80, 0x01, 0xff, 0x49, 0x56, 0x57, 0xa5, 0x23, 0x00, - 0x4c, 0xb9, 0x8f, 0xa6, 0x23, 0x00, 0x4c, 0x99, 0x94, 0xa4, 0x23, 0x00, - 0x05, 0x51, 0x00, 0x01, 0xff, 0x4d, 0xa0, 0x80, 0x58, 0x2e, 0x00, 0x45, - 0x22, 0x7f, 0x46, 0x20, 0x00, 0x46, 0x27, 0x05, 0x56, 0x2e, 0x00, 0x08, - 0xda, 0xc8, 0x06, 0x48, 0x78, 0x58, 0x8c, 0x29, 0x40, 0x4d, 0xb6, 0x7f, - 0x8e, 0x29, 0x00, 0x4a, 0xbd, 0xaf, 0x90, 0x29, 0x40, 0x44, 0xf1, 0x26, - 0x68, 0xf5, 0x81, 0x06, 0x4a, 0x11, 0x7b, 0xe9, 0xf5, 0x41, 0x06, 0x50, - 0x00, 0x01, 0xff, 0x4e, 0xec, 0x78, 0x69, 0xf5, 0x01, 0x51, 0xf3, 0x5c, - 0x6a, 0xf5, 0x41, 0x50, 0x5a, 0x60, 0x27, 0x2e, 0x00, 0x53, 0x48, 0x0b, - 0x19, 0x20, 0x40, 0x50, 0x95, 0x0f, 0xcc, 0x22, 0x00, 0x51, 0xb4, 0x4b, - 0x8b, 0xfb, 0x41, 0x80, 0x01, 0xff, 0x49, 0x56, 0x57, 0x9f, 0x23, 0x00, - 0x4a, 0x0d, 0xab, 0xa0, 0x23, 0x00, 0x4a, 0x8f, 0xb0, 0x9e, 0x23, 0x40, - 0x03, 0xc4, 0x07, 0x0c, 0x4f, 0x18, 0x70, 0xbc, 0xfb, 0x01, 0x49, 0x02, - 0xad, 0xd6, 0x27, 0x40, 0x4c, 0xc3, 0x0a, 0x95, 0x25, 0x00, 0x4d, 0xa1, - 0x1c, 0x87, 0xfb, 0x41, 0x4c, 0xe1, 0x02, 0xe9, 0xfb, 0x01, 0x4c, 0xe3, - 0x10, 0xe1, 0xfb, 0x41, 0x03, 0x24, 0x00, 0x06, 0x55, 0x43, 0x3c, 0x7d, - 0xf5, 0x41, 0x5a, 0x58, 0x1e, 0x00, 0xce, 0x01, 0x02, 0x33, 0x01, 0x38, - 0xa6, 0x2a, 0x65, 0xb7, 0x07, 0x11, 0xce, 0x01, 0x57, 0x9d, 0x2e, 0xa0, - 0xce, 0x01, 0x4c, 0x19, 0x04, 0x8d, 0xfb, 0x01, 0x4b, 0x43, 0xa0, 0xb3, - 0xfb, 0x01, 0x56, 0xa3, 0x36, 0x0e, 0xce, 0x01, 0x57, 0xae, 0x30, 0xab, - 0xce, 0x01, 0x4d, 0xcd, 0x88, 0x0c, 0xce, 0x41, 0x4c, 0xe9, 0x8f, 0xa5, - 0xcc, 0x01, 0x45, 0x40, 0x64, 0xba, 0xfb, 0x41, 0x04, 0xe3, 0x02, 0x06, - 0x43, 0x35, 0x01, 0x90, 0x25, 0x40, 0x46, 0xe7, 0x02, 0xd7, 0x25, 0x00, - 0x44, 0xe2, 0x12, 0xe9, 0x2b, 0x40, 0xa9, 0x06, 0x44, 0xd1, 0x23, 0x0b, - 0x23, 0x40, 0x47, 0xab, 0xb6, 0x7d, 0x29, 0x00, 0x50, 0x62, 0x50, 0x89, - 0xfb, 0x41, 0x59, 0x04, 0x26, 0x05, 0x2e, 0x00, 0x05, 0x3d, 0x01, 0x01, - 0xff, 0xa1, 0x12, 0x4b, 0x50, 0x21, 0x29, 0x2e, 0x00, 0x4e, 0xee, 0x04, - 0x1d, 0x20, 0x00, 0x4c, 0x05, 0x95, 0xdb, 0x29, 0x40, 0x4c, 0xf0, 0x0e, - 0x0b, 0x30, 0x00, 0x56, 0x35, 0x36, 0x70, 0x29, 0x40, 0x46, 0x0b, 0xc2, - 0x09, 0x23, 0x00, 0x4d, 0xb9, 0x67, 0x0d, 0x30, 0x00, 0x4c, 0x24, 0x0b, - 0x7d, 0x00, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x4a, 0x0d, 0xab, 0xad, 0x23, - 0x00, 0x4c, 0x55, 0x90, 0xac, 0x23, 0x00, 0x4a, 0x8f, 0xb0, 0xab, 0x23, - 0x40, 0x52, 0xcb, 0x26, 0x11, 0x30, 0x00, 0x56, 0x05, 0x09, 0x98, 0x29, - 0x40, 0xae, 0x1a, 0xb2, 0x01, 0xff, 0x56, 0x40, 0x17, 0x94, 0x29, 0x00, - 0x09, 0xfa, 0x05, 0x01, 0xff, 0x4c, 0x99, 0x8b, 0xf4, 0x27, 0x00, 0x4c, - 0xd3, 0x14, 0xf4, 0x21, 0x40, 0x02, 0x06, 0x00, 0x43, 0xa7, 0x01, 0xff, - 0x49, 0x2b, 0xb6, 0xef, 0xf5, 0x01, 0x42, 0x68, 0x00, 0x1f, 0x22, 0xc0, - 0x00, 0x80, 0x01, 0xff, 0x47, 0x14, 0x09, 0x09, 0x30, 0x80, 0x23, 0x5a, - 0x28, 0x1f, 0x01, 0x2e, 0x00, 0x53, 0x2f, 0x1f, 0x00, 0x2e, 0x00, 0x53, - 0x2e, 0x4d, 0x9c, 0x29, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x43, 0x3e, - 0x17, 0xbe, 0x22, 0x00, 0x56, 0x07, 0x33, 0x7c, 0x23, 0x40, 0x49, 0xa5, - 0x3a, 0x92, 0x29, 0x40, 0x56, 0xb9, 0x0a, 0x7f, 0xfb, 0x01, 0x56, 0xfb, - 0x36, 0x7e, 0xfb, 0x41, 0x44, 0x46, 0x1c, 0x59, 0xf3, 0x01, 0x47, 0x4e, - 0xcd, 0x58, 0xf3, 0x41, 0x07, 0xcd, 0x00, 0x01, 0xff, 0x05, 0x4f, 0x14, - 0x31, 0x05, 0xc3, 0x00, 0x21, 0x06, 0xc8, 0x00, 0x11, 0x03, 0x11, 0x15, - 0x01, 0xff, 0x44, 0xc3, 0x00, 0xb2, 0x2b, 0x00, 0x45, 0xc8, 0x00, 0xb3, - 0x2b, 0x40, 0x44, 0xa5, 0x01, 0xb7, 0x2b, 0x00, 0x42, 0x50, 0x02, 0xb5, - 0x2b, 0x40, 0x44, 0xa5, 0x01, 0xb6, 0x2b, 0x00, 0x42, 0x50, 0x02, 0xb4, - 0x2b, 0x40, 0x44, 0xc3, 0x00, 0xb0, 0x2b, 0x00, 0x45, 0xc8, 0x00, 0xb1, - 0x2b, 0x40, 0xa3, 0xb8, 0x05, 0x02, 0x06, 0x00, 0xa7, 0x05, 0x4c, 0x31, - 0x8d, 0x3b, 0x20, 0x00, 0x02, 0xc6, 0x06, 0xaa, 0x04, 0x05, 0x8f, 0xe4, - 0xcb, 0x02, 0x4b, 0x76, 0x57, 0x0c, 0xf6, 0x01, 0x4d, 0x3b, 0x84, 0x97, - 0xf3, 0x01, 0x53, 0xe5, 0x1f, 0xfd, 0xff, 0x00, 0xb3, 0x99, 0x02, 0x05, - 0x7c, 0xe8, 0x82, 0x02, 0xb6, 0x01, 0xff, 0x04, 0x14, 0x04, 0x06, 0x4d, - 0x0b, 0x85, 0x9e, 0xf4, 0x41, 0x80, 0xa9, 0x01, 0x02, 0x06, 0x00, 0x01, - 0xff, 0x45, 0x04, 0x02, 0xa3, 0x29, 0x80, 0x96, 0x01, 0x45, 0xe8, 0x04, - 0x41, 0x2e, 0x00, 0x07, 0x3b, 0x01, 0x79, 0x49, 0x10, 0xb6, 0xb0, 0x29, - 0x00, 0x52, 0x72, 0x50, 0x11, 0x2e, 0x00, 0x60, 0x65, 0x0f, 0x95, 0xf5, - 0x01, 0x48, 0xff, 0x71, 0x10, 0x23, 0x00, 0xb0, 0x53, 0x4d, 0xd6, 0x33, - 0x2e, 0x2e, 0x00, 0xb2, 0x39, 0xb3, 0x2b, 0xb4, 0x06, 0x4c, 0xe1, 0x94, - 0x94, 0xf5, 0x41, 0x06, 0xa6, 0xd9, 0x13, 0x44, 0xae, 0x22, 0x3d, 0x22, - 0x80, 0x06, 0x4b, 0xeb, 0x9f, 0x37, 0x20, 0x40, 0x47, 0xf8, 0x12, 0xcd, - 0x22, 0x40, 0x49, 0x77, 0xb5, 0x93, 0xf5, 0x01, 0x47, 0x08, 0xd4, 0x92, - 0xf5, 0x41, 0x53, 0xcc, 0x46, 0x43, 0x21, 0x00, 0x48, 0x6f, 0x58, 0x4f, - 0x20, 0x40, 0x5f, 0x83, 0x10, 0x91, 0xf5, 0x01, 0x4a, 0x30, 0x44, 0xfe, - 0x2b, 0x00, 0x5a, 0x16, 0x21, 0x19, 0x26, 0x40, 0x4b, 0x31, 0x9b, 0x4b, - 0x20, 0x00, 0x44, 0x64, 0x1a, 0x35, 0x20, 0x40, 0x45, 0x63, 0x1a, 0x36, - 0x20, 0x80, 0x06, 0x4f, 0xf8, 0x71, 0xed, 0x2a, 0x40, 0x4f, 0xed, 0x04, - 0x1d, 0x30, 0x40, 0x4e, 0xc2, 0x5d, 0xa5, 0x29, 0x40, 0x4d, 0x1e, 0x14, - 0x7f, 0xf6, 0x01, 0x45, 0x40, 0x13, 0x8d, 0x00, 0x00, 0x02, 0xc3, 0x01, - 0x2d, 0x47, 0x69, 0x30, 0x5c, 0x00, 0x80, 0x11, 0x15, 0x93, 0x3d, 0x01, - 0xff, 0x4f, 0x37, 0x07, 0x41, 0x2b, 0x00, 0x50, 0xb3, 0x02, 0x47, 0x2b, - 0x40, 0x80, 0x01, 0xff, 0x48, 0xdc, 0x1c, 0xf5, 0x29, 0x00, 0x50, 0x6a, - 0x64, 0xc8, 0x27, 0x00, 0x56, 0x53, 0x37, 0xf7, 0x29, 0x40, 0x5e, 0xc8, - 0x12, 0xc8, 0xf7, 0x01, 0x47, 0x2e, 0x20, 0x8d, 0x00, 0x40, 0x44, 0xc3, - 0x00, 0x90, 0x2b, 0x00, 0x45, 0xc8, 0x00, 0x91, 0x2b, 0x00, 0x46, 0xeb, - 0x07, 0xce, 0x23, 0x40, 0x45, 0xe2, 0xe6, 0x1f, 0x21, 0x00, 0x02, 0x19, - 0x01, 0x01, 0xff, 0x11, 0x6e, 0x59, 0x06, 0x43, 0xba, 0x52, 0xbb, 0xf6, - 0x41, 0xd1, 0xe0, 0x26, 0x00, 0xd2, 0xe1, 0x26, 0x40, 0x0f, 0x6d, 0x32, - 0xc4, 0x01, 0x07, 0xc1, 0x05, 0x37, 0x4c, 0x57, 0x26, 0x5f, 0xa9, 0x00, - 0xb6, 0x01, 0xff, 0x45, 0x5c, 0x23, 0x53, 0xa9, 0x00, 0x0a, 0xd2, 0x75, - 0x01, 0xff, 0xa1, 0x19, 0xe5, 0x49, 0xa9, 0x80, 0x0c, 0xe9, 0x47, 0xa9, - 0x00, 0xef, 0x4b, 0xa9, 0x00, 0xf5, 0x48, 0xa9, 0x40, 0xe1, 0x4e, 0xa9, - 0x00, 0xf5, 0x4d, 0xa9, 0x40, 0xe9, 0x4a, 0xa9, 0x00, 0xf5, 0x4c, 0xa9, - 0x40, 0xe1, 0x46, 0xa9, 0x00, 0x42, 0x16, 0x00, 0x37, 0xa9, 0x00, 0x42, - 0x37, 0x00, 0x39, 0xa9, 0x00, 0x42, 0xa1, 0x10, 0x34, 0xa9, 0x00, 0x42, - 0x24, 0x02, 0x31, 0xa9, 0x00, 0x42, 0x22, 0x00, 0x41, 0xa9, 0x00, 0x42, - 0xbd, 0x26, 0x3a, 0xa9, 0x00, 0x42, 0x1b, 0x02, 0x30, 0xa9, 0x00, 0x42, - 0x74, 0x00, 0x3e, 0xa9, 0x00, 0xad, 0x49, 0xae, 0x24, 0x42, 0x6c, 0x09, - 0x36, 0xa9, 0x00, 0x42, 0x71, 0x00, 0x3d, 0xa9, 0x00, 0x42, 0x15, 0x06, - 0x3c, 0xa9, 0x00, 0x42, 0x12, 0x00, 0x33, 0xa9, 0x00, 0x42, 0xa9, 0x01, - 0x40, 0xa9, 0x00, 0x42, 0x34, 0x22, 0x3f, 0xa9, 0x40, 0xe1, 0x35, 0xa9, - 0x00, 0x42, 0xa1, 0x10, 0x44, 0xa9, 0x00, 0xa7, 0x0d, 0xb9, 0x01, 0xff, - 0xe1, 0x3b, 0xa9, 0x00, 0x42, 0xbd, 0x26, 0x45, 0xa9, 0x40, 0xe1, 0x32, - 0xa9, 0x00, 0x42, 0x24, 0x02, 0x43, 0xa9, 0x40, 0xe1, 0x38, 0xa9, 0x00, - 0x42, 0x16, 0x00, 0x42, 0xa9, 0x40, 0xe8, 0x52, 0xa9, 0x00, 0xee, 0x50, - 0xa9, 0x80, 0x04, 0xf2, 0x51, 0xa9, 0x40, 0xe7, 0x4f, 0xa9, 0x40, 0x1d, - 0xe4, 0x15, 0x06, 0x4b, 0xc7, 0xa0, 0xae, 0x00, 0x40, 0xe1, 0xe6, 0xf1, - 0x01, 0xe2, 0xe7, 0xf1, 0x01, 0xe3, 0xe8, 0xf1, 0x01, 0xe4, 0xe9, 0xf1, - 0x01, 0xe5, 0xea, 0xf1, 0x01, 0xe6, 0xeb, 0xf1, 0x01, 0xe7, 0xec, 0xf1, - 0x01, 0xe8, 0xed, 0xf1, 0x01, 0xe9, 0xee, 0xf1, 0x01, 0xea, 0xef, 0xf1, - 0x01, 0xeb, 0xf0, 0xf1, 0x01, 0xec, 0xf1, 0xf1, 0x01, 0xed, 0xf2, 0xf1, - 0x01, 0xee, 0xf3, 0xf1, 0x01, 0xef, 0xf4, 0xf1, 0x01, 0xf0, 0xf5, 0xf1, - 0x01, 0xf1, 0xf6, 0xf1, 0x01, 0xf2, 0xf7, 0xf1, 0x01, 0xf3, 0xf8, 0xf1, - 0x01, 0xf4, 0xf9, 0xf1, 0x01, 0xf5, 0xfa, 0xf1, 0x01, 0xf6, 0xfb, 0xf1, - 0x01, 0xf7, 0xfc, 0xf1, 0x01, 0xf8, 0xfd, 0xf1, 0x01, 0xf9, 0xfe, 0xf1, - 0x01, 0xfa, 0xff, 0xf1, 0x41, 0x45, 0x47, 0xe1, 0x4e, 0xf3, 0x01, 0x4d, - 0xbe, 0x81, 0xe7, 0xf9, 0x41, 0xa5, 0x51, 0x4d, 0xdd, 0x64, 0x1e, 0x00, - 0x00, 0x51, 0x16, 0x5c, 0x99, 0xf6, 0x01, 0x03, 0x99, 0x24, 0x01, 0xff, - 0x4f, 0x56, 0x29, 0x7c, 0x26, 0x00, 0x0f, 0xee, 0x6c, 0x01, 0xff, 0x51, - 0xd5, 0x58, 0x7a, 0x26, 0x00, 0x05, 0xa9, 0x20, 0x01, 0xff, 0x4a, 0x91, - 0xa4, 0x73, 0x26, 0x00, 0x4a, 0xa5, 0xa4, 0x74, 0x26, 0x00, 0x4a, 0xb9, - 0xa4, 0x75, 0x26, 0x00, 0x4a, 0xc3, 0xa4, 0x76, 0x26, 0x00, 0x4a, 0xcd, - 0xa4, 0x77, 0x26, 0x00, 0x4a, 0xd7, 0xa4, 0x78, 0x26, 0x00, 0x4a, 0xe1, - 0xa4, 0x79, 0x26, 0x40, 0x43, 0x4c, 0x06, 0xfe, 0xf9, 0x01, 0x46, 0x40, - 0xdc, 0x12, 0xcc, 0x41, 0x44, 0x02, 0xec, 0x07, 0xf4, 0x81, 0xcd, 0x01, - 0xa3, 0xb3, 0x01, 0x02, 0x00, 0x00, 0x97, 0x01, 0xa9, 0x15, 0xed, 0x0f, - 0xf4, 0x01, 0xf4, 0x00, 0xf4, 0x81, 0x06, 0x43, 0x95, 0xf1, 0x92, 0xfa, - 0x41, 0x42, 0xb5, 0x00, 0x36, 0x22, 0x40, 0x05, 0x34, 0xe5, 0x70, 0xee, - 0xc6, 0x26, 0x80, 0x65, 0x04, 0x1b, 0x03, 0x01, 0xff, 0x4c, 0xcd, 0x8a, - 0x1a, 0xf9, 0x01, 0x45, 0xe8, 0x04, 0x34, 0x2e, 0x00, 0x43, 0xd4, 0x09, - 0x33, 0x2e, 0x80, 0x47, 0x44, 0x3c, 0xc8, 0x0a, 0x27, 0x00, 0x44, 0x77, - 0x0d, 0x0b, 0x27, 0x80, 0x29, 0x54, 0xe9, 0x2a, 0x06, 0x2e, 0x00, 0xad, - 0x0f, 0xb3, 0x01, 0xff, 0x58, 0x7d, 0x29, 0xcc, 0xfb, 0x01, 0x45, 0xac, - 0x05, 0x0b, 0x2e, 0x40, 0x46, 0xc3, 0x62, 0x6a, 0xf1, 0x01, 0x46, 0x67, - 0x46, 0x6b, 0xf1, 0x01, 0x46, 0xe0, 0x0d, 0x6c, 0xf1, 0x41, 0x06, 0x50, - 0x00, 0x01, 0xff, 0x4f, 0x93, 0x10, 0x90, 0xf5, 0x01, 0x64, 0x6c, 0x09, - 0x96, 0xf5, 0x41, 0x58, 0xe5, 0x2a, 0x07, 0x2e, 0x40, 0x43, 0xc3, 0x7f, - 0x08, 0xf3, 0x41, 0x43, 0x47, 0x63, 0x83, 0xf6, 0x01, 0x45, 0x4f, 0xe8, - 0xe4, 0xf6, 0x41, 0x51, 0x81, 0x57, 0xb7, 0x23, 0x00, 0xef, 0xfb, 0xf4, - 0xc1, 0x00, 0x47, 0x61, 0xca, 0x18, 0xf5, 0x01, 0x4b, 0xb9, 0x96, 0x22, - 0x26, 0x40, 0x44, 0x2e, 0xec, 0x9d, 0xf9, 0x01, 0x04, 0xa1, 0x01, 0x01, - 0xff, 0x43, 0x47, 0x63, 0xce, 0xf3, 0x01, 0x4a, 0xc1, 0xab, 0xcd, 0xf3, - 0x41, 0x45, 0xe0, 0x07, 0x30, 0xf4, 0x41, 0xa1, 0x24, 0x06, 0xd8, 0x33, - 0x0c, 0x46, 0xf4, 0xd9, 0xbb, 0x26, 0x00, 0x4c, 0xf0, 0x04, 0x22, 0x00, - 0x40, 0x80, 0x06, 0x4b, 0xbf, 0x65, 0x5f, 0x22, 0x40, 0x50, 0xad, 0x00, - 0x48, 0x20, 0x00, 0x44, 0xb9, 0x00, 0x3f, 0x00, 0x40, 0x02, 0xd7, 0x0c, - 0x12, 0x43, 0x27, 0x14, 0x7e, 0xf7, 0x01, 0x49, 0x69, 0x53, 0x69, 0x26, - 0x00, 0x59, 0xeb, 0x25, 0x16, 0x2a, 0x40, 0x04, 0x2f, 0x0d, 0x11, 0x05, - 0xf9, 0x4a, 0x01, 0xff, 0x51, 0xf3, 0x25, 0x0c, 0x2a, 0x00, 0x45, 0x63, - 0x1a, 0x57, 0x20, 0x40, 0x06, 0x13, 0x01, 0x46, 0x06, 0x6d, 0x02, 0x01, - 0xff, 0x44, 0xc3, 0x00, 0x98, 0x25, 0x80, 0x14, 0x45, 0xc8, 0x00, 0x9d, - 0x25, 0xc0, 0x00, 0x4f, 0xd7, 0x38, 0x9e, 0x25, 0xc0, 0x00, 0x50, 0x2f, - 0x43, 0x9f, 0x25, 0x40, 0x05, 0x19, 0x00, 0x01, 0xff, 0x06, 0x13, 0x01, - 0x11, 0x16, 0x11, 0x37, 0x01, 0xff, 0x44, 0xc3, 0x00, 0x9b, 0x25, 0x00, - 0x45, 0xc8, 0x00, 0x9c, 0x25, 0x40, 0x54, 0x2b, 0x43, 0x99, 0x25, 0x00, - 0x45, 0xc8, 0x00, 0x9a, 0x25, 0x40, 0x44, 0xc3, 0x00, 0x96, 0x25, 0x00, - 0x45, 0xc8, 0x00, 0x97, 0x25, 0x40, 0xa1, 0x8e, 0x18, 0xa5, 0xfb, 0x15, - 0xa8, 0xe5, 0x0e, 0xa9, 0xde, 0x0d, 0xac, 0xf1, 0x07, 0x4d, 0xbd, 0x84, - 0x11, 0xcc, 0x01, 0xaf, 0x8c, 0x06, 0xb2, 0xfc, 0x01, 0x0f, 0x62, 0x71, - 0x33, 0xb5, 0x01, 0xff, 0x58, 0xdd, 0x26, 0xe2, 0xf4, 0x01, 0x04, 0xba, - 0x0b, 0x1a, 0xb2, 0x0c, 0x45, 0x27, 0xd2, 0xcc, 0xf4, 0x01, 0x5c, 0xc2, - 0x18, 0xae, 0xf6, 0x41, 0x49, 0xa7, 0xbb, 0x9c, 0xf4, 0x01, 0x42, 0x1b, - 0x03, 0x5b, 0xf4, 0x41, 0x4b, 0x5e, 0x97, 0x08, 0x20, 0x00, 0x4f, 0x44, - 0x71, 0x4e, 0x2e, 0x40, 0x0f, 0x95, 0x6b, 0xb4, 0x01, 0x07, 0xc1, 0x05, - 0x3f, 0x07, 0x2f, 0x39, 0x0c, 0x4c, 0x57, 0x26, 0x99, 0x0b, 0x01, 0x53, - 0x96, 0x4c, 0x9a, 0x0b, 0x41, 0x44, 0xca, 0x06, 0xac, 0x0b, 0x01, 0x43, - 0xbf, 0x0a, 0xa9, 0x0b, 0x81, 0x1c, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, - 0xad, 0x0b, 0x01, 0x44, 0x25, 0x01, 0xab, 0x0b, 0x01, 0xb7, 0x01, 0xff, - 0x44, 0x29, 0x1d, 0xae, 0x0b, 0x01, 0xef, 0xaa, 0x0b, 0x41, 0x48, 0x21, - 0x11, 0xaf, 0x0b, 0x41, 0x45, 0x58, 0xab, 0x80, 0x0b, 0x01, 0x44, 0x0a, - 0xec, 0x81, 0x0b, 0x01, 0x46, 0xda, 0x48, 0x83, 0x0b, 0x01, 0x45, 0xa1, - 0xa8, 0x82, 0x0b, 0x01, 0x42, 0xb0, 0x01, 0x84, 0x0b, 0x81, 0x4c, 0x44, - 0x8e, 0xed, 0x89, 0x0b, 0x01, 0x46, 0x9c, 0xda, 0x8a, 0x0b, 0x01, 0x48, - 0xaa, 0xc5, 0x8b, 0x0b, 0x01, 0x43, 0x54, 0x22, 0x8c, 0x0b, 0x01, 0x42, - 0x6f, 0x02, 0x8e, 0x0b, 0x01, 0xb3, 0x18, 0x43, 0x1e, 0xc2, 0x91, 0x0b, - 0x01, 0x4d, 0xc0, 0x88, 0x85, 0x0b, 0x01, 0x44, 0x58, 0x51, 0x88, 0x0b, - 0x01, 0x45, 0x52, 0x51, 0x86, 0x0b, 0x41, 0xa1, 0x06, 0x43, 0x0e, 0x16, - 0x90, 0x0b, 0x41, 0x43, 0x89, 0xe7, 0x8f, 0x0b, 0x01, 0x44, 0x39, 0xe1, - 0x8d, 0x0b, 0x41, 0x42, 0x53, 0x00, 0x87, 0x0b, 0x41, 0x45, 0x46, 0x10, - 0x9b, 0x0b, 0x01, 0x43, 0xd4, 0x09, 0x9c, 0x0b, 0x41, 0x4a, 0xe5, 0xa5, - 0xff, 0xf4, 0x01, 0xa5, 0x86, 0x01, 0xa9, 0x30, 0xaf, 0x01, 0xff, 0x49, - 0x57, 0xb4, 0xaf, 0xf9, 0x01, 0x4c, 0xfd, 0x8d, 0xc7, 0xf6, 0x01, 0x47, - 0x62, 0xcf, 0x05, 0x23, 0x00, 0xb0, 0x06, 0x47, 0xe9, 0xd2, 0xd8, 0x2b, - 0x40, 0x49, 0x3d, 0xb6, 0x4a, 0x21, 0x00, 0x46, 0xa6, 0x23, 0x37, 0x22, - 0xc0, 0x00, 0x45, 0xac, 0x0c, 0x1d, 0x22, 0x40, 0x42, 0x2a, 0x02, 0x32, - 0x20, 0x00, 0xae, 0x29, 0x02, 0xa6, 0x0a, 0x01, 0xff, 0x4a, 0xcb, 0xa6, - 0x9e, 0x00, 0x00, 0x06, 0x72, 0xdd, 0x01, 0xff, 0x80, 0x0b, 0x8d, 0x01, - 0xff, 0xd1, 0x91, 0x00, 0x00, 0xd2, 0x92, 0x00, 0x40, 0x43, 0xbf, 0x0a, - 0x91, 0x00, 0x00, 0x43, 0xd0, 0x09, 0x92, 0x00, 0x40, 0x42, 0x73, 0x02, - 0x34, 0xf9, 0x81, 0x16, 0xb4, 0x01, 0xff, 0x4e, 0x61, 0x58, 0x99, 0x23, - 0x00, 0x42, 0x33, 0x00, 0xa8, 0xf5, 0xc1, 0x00, 0x45, 0xae, 0xde, 0xb6, - 0xf5, 0x41, 0x42, 0xee, 0x00, 0x78, 0xf4, 0x41, 0x45, 0x45, 0xc7, 0x7a, - 0x22, 0x80, 0xa6, 0x02, 0x06, 0x22, 0xd9, 0x8f, 0x02, 0xb3, 0x0c, 0x44, - 0x7a, 0xef, 0x68, 0xf9, 0x01, 0x4a, 0x07, 0xb1, 0x97, 0x23, 0x40, 0x4d, - 0x04, 0x80, 0x1e, 0x21, 0x00, 0x1b, 0xad, 0x1a, 0x01, 0xff, 0x02, 0xe8, - 0x04, 0xe5, 0x01, 0xa5, 0xd0, 0x01, 0x53, 0x3a, 0x29, 0x19, 0xfe, 0x00, - 0x0c, 0xaa, 0x1f, 0xb9, 0x01, 0xac, 0x6a, 0x4d, 0xd6, 0x33, 0x16, 0xfe, - 0x00, 0x06, 0xc8, 0x00, 0x12, 0x49, 0xac, 0xbc, 0x14, 0xfe, 0x00, 0x4e, - 0x26, 0x7c, 0x30, 0xfe, 0x00, 0x4d, 0xa6, 0x88, 0x34, 0xfe, 0x40, 0x4d, - 0xef, 0x0e, 0x40, 0xfe, 0x00, 0x58, 0xc5, 0x26, 0x3c, 0xfe, 0x00, 0xa3, - 0x34, 0x54, 0x97, 0x40, 0x3e, 0xfe, 0x00, 0x4b, 0x50, 0x21, 0x36, 0xfe, - 0x00, 0x4e, 0x27, 0x26, 0x48, 0xfe, 0x00, 0x56, 0x05, 0x09, 0x3a, 0xfe, - 0x00, 0x06, 0xad, 0x02, 0x01, 0xff, 0x4e, 0xb8, 0x67, 0x44, 0xfe, 0x00, - 0x0e, 0xcb, 0x26, 0x01, 0xff, 0x44, 0x17, 0x09, 0x18, 0xfe, 0x00, 0x44, - 0x92, 0xed, 0x18, 0xfe, 0x40, 0x4d, 0xb9, 0x67, 0x42, 0xfe, 0x00, 0x4c, - 0x24, 0x0b, 0x38, 0xfe, 0x40, 0x04, 0xc4, 0x00, 0x06, 0x47, 0xac, 0x88, - 0x33, 0xfe, 0x40, 0x4d, 0xef, 0x0e, 0x3f, 0xfe, 0x00, 0x58, 0xc5, 0x26, - 0x3b, 0xfe, 0x00, 0xa3, 0x29, 0x54, 0x97, 0x40, 0x3d, 0xfe, 0x00, 0x4b, - 0x50, 0x21, 0x35, 0xfe, 0x00, 0x4e, 0x27, 0x26, 0x47, 0xfe, 0x00, 0x56, - 0x05, 0x09, 0x39, 0xfe, 0x00, 0x06, 0xad, 0x02, 0x01, 0xff, 0x4e, 0xb8, - 0x67, 0x43, 0xfe, 0x00, 0x52, 0xcb, 0x26, 0x17, 0xfe, 0x40, 0x4d, 0xb9, - 0x67, 0x41, 0xfe, 0x00, 0x4c, 0x24, 0x0b, 0x37, 0xfe, 0x40, 0x45, 0xe8, - 0x04, 0x11, 0xfe, 0x00, 0x49, 0x15, 0x16, 0x12, 0xfe, 0x40, 0x46, 0x3c, - 0xc0, 0x31, 0xfe, 0x00, 0x46, 0x20, 0xdb, 0x32, 0xfe, 0x00, 0x4f, 0xae, - 0x00, 0x15, 0xfe, 0x40, 0x43, 0x03, 0x12, 0x13, 0xfe, 0x00, 0x43, 0xea, - 0x04, 0x10, 0xfe, 0x40, 0x43, 0xd5, 0x17, 0xc3, 0xfa, 0x01, 0x46, 0x7c, - 0x1c, 0xc4, 0xfa, 0x01, 0x45, 0x62, 0x2c, 0x30, 0xf9, 0x41, 0x80, 0x01, - 0xff, 0x06, 0x5c, 0x00, 0x1c, 0x55, 0xfb, 0x38, 0xe8, 0x22, 0x00, 0x06, - 0x52, 0x28, 0x06, 0x4e, 0x7a, 0x7c, 0xb0, 0x22, 0x40, 0x45, 0xac, 0x0c, - 0x7c, 0x22, 0x00, 0x4a, 0x06, 0x39, 0x7e, 0x22, 0x40, 0x4f, 0x10, 0x69, - 0xb7, 0x2a, 0x00, 0x4b, 0xf9, 0x12, 0xb3, 0x2a, 0x00, 0x04, 0xe8, 0x22, - 0x11, 0x0c, 0x6d, 0x2a, 0x01, 0xff, 0x4b, 0xf9, 0x12, 0xaf, 0x2a, 0x00, - 0x4c, 0x79, 0x2a, 0xb1, 0x2a, 0x40, 0x4f, 0x10, 0x69, 0xb9, 0x2a, 0x00, - 0x48, 0xa9, 0x0c, 0xb5, 0x2a, 0x40, 0x4f, 0x1e, 0x6a, 0xa9, 0xf5, 0x01, - 0x05, 0x53, 0xad, 0xbe, 0x01, 0x44, 0x7a, 0xee, 0x29, 0xf4, 0x01, 0xb0, - 0x9f, 0x01, 0x4d, 0x77, 0x86, 0xfe, 0xf4, 0x01, 0xb3, 0x6b, 0xb4, 0x4f, - 0xb5, 0x24, 0x04, 0x15, 0x01, 0x01, 0xff, 0x02, 0x10, 0x00, 0x0f, 0xb3, - 0x01, 0xff, 0x4b, 0x5a, 0x9c, 0xfe, 0x23, 0x00, 0x45, 0xec, 0x07, 0xfb, - 0x23, 0x40, 0x47, 0xea, 0x07, 0xfd, 0x23, 0x00, 0x4b, 0x77, 0x96, 0xfc, - 0x23, 0x40, 0x42, 0x1e, 0x14, 0x5d, 0xf4, 0x01, 0x48, 0x62, 0xc5, 0x57, - 0xf3, 0x01, 0x47, 0x66, 0x46, 0xa3, 0x00, 0x00, 0x4b, 0xe0, 0x9f, 0xd7, - 0xfa, 0x01, 0x05, 0xa0, 0x01, 0x01, 0xff, 0x48, 0xc0, 0x1e, 0x3e, 0xf6, - 0x01, 0x44, 0xe1, 0x07, 0x21, 0xf6, 0x41, 0x48, 0x52, 0x63, 0x72, 0xf3, - 0x01, 0xa1, 0x06, 0x49, 0x3c, 0xbd, 0xb4, 0xfa, 0x41, 0x50, 0xf7, 0x43, - 0xb0, 0xf6, 0x01, 0x42, 0x1e, 0x00, 0x54, 0xf9, 0x41, 0x45, 0xcd, 0xe2, - 0xe7, 0x2b, 0x00, 0x4f, 0xab, 0x65, 0x16, 0x23, 0x00, 0xb4, 0x01, 0xff, - 0x03, 0x13, 0x00, 0x06, 0x43, 0xeb, 0x39, 0xee, 0xf4, 0x41, 0x44, 0xa8, - 0x2c, 0xef, 0xf4, 0x01, 0x44, 0xb9, 0x00, 0x12, 0x30, 0xc0, 0x00, 0x45, - 0xe0, 0x07, 0x20, 0x30, 0x40, 0x0d, 0x09, 0x7e, 0x06, 0x44, 0xbb, 0x18, - 0x7f, 0xf3, 0x41, 0x4a, 0x33, 0xa8, 0x2c, 0x20, 0x00, 0x47, 0x34, 0x03, - 0x69, 0x20, 0x40, 0x43, 0x47, 0x63, 0x93, 0xf6, 0x81, 0x06, 0x47, 0xea, - 0xd0, 0x6e, 0xf4, 0x41, 0x51, 0x5a, 0x5c, 0xa8, 0xf6, 0x41, 0xa1, 0x96, - 0x01, 0xb5, 0x01, 0xff, 0x44, 0x8b, 0x09, 0xa0, 0xfa, 0x01, 0xb3, 0x29, - 0x42, 0x1e, 0x00, 0x47, 0x26, 0xc0, 0x00, 0x06, 0xb5, 0x1a, 0x01, 0xff, - 0xa6, 0x0f, 0xb4, 0x01, 0xff, 0x44, 0x25, 0x01, 0xd4, 0x2b, 0x00, 0x42, - 0x15, 0x02, 0xd3, 0x2b, 0x40, 0x43, 0xa7, 0x05, 0xd6, 0x2b, 0x00, 0x43, - 0xcb, 0x06, 0xd5, 0x2b, 0x40, 0x45, 0x2e, 0x03, 0x2b, 0x00, 0x80, 0x06, - 0x4b, 0x6c, 0x96, 0xb1, 0x00, 0x40, 0x80, 0x01, 0xff, 0x51, 0xf3, 0x12, - 0x72, 0x2a, 0x00, 0x03, 0xb6, 0x05, 0x36, 0x05, 0x51, 0x00, 0x01, 0xff, - 0x4e, 0xc4, 0x69, 0x28, 0x2a, 0x00, 0x57, 0x16, 0x2d, 0x23, 0x2a, 0x00, - 0x49, 0x50, 0x12, 0x25, 0x2a, 0x00, 0xb3, 0x11, 0x06, 0xad, 0x22, 0x01, - 0xff, 0x45, 0x5c, 0x00, 0x24, 0x2a, 0x00, 0x45, 0xf5, 0x06, 0x26, 0x2a, - 0x40, 0x51, 0x2d, 0x54, 0x22, 0x2a, 0x00, 0x4c, 0x45, 0x94, 0x27, 0x2a, - 0x40, 0x50, 0x0a, 0x63, 0x2d, 0x2a, 0x00, 0x51, 0x38, 0x5c, 0x2e, 0x2a, - 0x00, 0x48, 0x01, 0x02, 0x39, 0x2a, 0x40, 0xa3, 0xb7, 0x04, 0x4c, 0xc1, - 0x90, 0x0e, 0x21, 0x80, 0xa9, 0x04, 0xb9, 0x01, 0xff, 0x4c, 0xa9, 0x8d, - 0xdd, 0xf6, 0x01, 0x09, 0x08, 0xb8, 0x01, 0xff, 0x07, 0xd5, 0x77, 0xfe, - 0x03, 0xa2, 0xef, 0x03, 0x09, 0xec, 0xb5, 0xd2, 0x03, 0xa6, 0x8d, 0x03, - 0x08, 0xb2, 0xc4, 0xf0, 0x02, 0xab, 0xb4, 0x02, 0x08, 0x1a, 0xc6, 0x97, - 0x02, 0x09, 0xe6, 0xbb, 0xfa, 0x01, 0x49, 0x25, 0xbc, 0xbf, 0xf0, 0x01, - 0xb3, 0xb8, 0x01, 0xb4, 0x06, 0x4b, 0xcc, 0xa2, 0xdf, 0xf0, 0x41, 0x06, - 0xe9, 0xbb, 0x93, 0x01, 0x08, 0x32, 0xc4, 0x77, 0x05, 0x78, 0xe7, 0x1d, - 0x06, 0x3e, 0xde, 0x01, 0xff, 0x45, 0x50, 0xe2, 0xd2, 0xf0, 0x01, 0x48, - 0x8a, 0xc2, 0xc2, 0xf0, 0x01, 0x46, 0x12, 0x85, 0xb2, 0xf0, 0x01, 0x46, - 0xee, 0xdc, 0xa2, 0xf0, 0x41, 0xd1, 0xe1, 0xf0, 0x81, 0x29, 0xd2, 0xe2, - 0xf0, 0x81, 0x1c, 0xd3, 0xe3, 0xf0, 0x01, 0xd4, 0xe4, 0xf0, 0x01, 0xd5, - 0xe5, 0xf0, 0x01, 0xd6, 0xe6, 0xf0, 0x01, 0xd7, 0xe7, 0xf0, 0x01, 0xd8, - 0xe8, 0xf0, 0x01, 0xd9, 0xe9, 0xf0, 0x41, 0xd0, 0xf4, 0xf0, 0x01, 0xd1, - 0xf5, 0xf0, 0x41, 0xd0, 0xea, 0xf0, 0x01, 0xd1, 0xeb, 0xf0, 0x01, 0xd2, - 0xec, 0xf0, 0x01, 0xd3, 0xed, 0xf0, 0x01, 0xd4, 0xee, 0xf0, 0x01, 0xd5, - 0xef, 0xf0, 0x01, 0xd6, 0xf0, 0xf0, 0x01, 0xd7, 0xf1, 0xf0, 0x01, 0xd8, - 0xf2, 0xf0, 0x01, 0xd9, 0xf3, 0xf0, 0x41, 0x45, 0x50, 0xe2, 0xd3, 0xf0, - 0x01, 0x48, 0x8a, 0xc2, 0xc3, 0xf0, 0x01, 0x46, 0x12, 0x85, 0xb3, 0xf0, - 0x01, 0x46, 0xee, 0xdc, 0xa3, 0xf0, 0x41, 0x45, 0x50, 0xe2, 0xda, 0xf0, - 0x01, 0x48, 0x8a, 0xc2, 0xca, 0xf0, 0x01, 0x46, 0x12, 0x85, 0xba, 0xf0, - 0x01, 0x46, 0xee, 0xdc, 0xaa, 0xf0, 0x41, 0x08, 0x72, 0xc3, 0x1d, 0x06, - 0x48, 0xda, 0x01, 0xff, 0x45, 0x50, 0xe2, 0xd6, 0xf0, 0x01, 0x48, 0x8a, - 0xc2, 0xc6, 0xf0, 0x01, 0x46, 0x12, 0x85, 0xb6, 0xf0, 0x01, 0x46, 0xee, - 0xdc, 0xa6, 0xf0, 0x41, 0x45, 0x50, 0xe2, 0xd7, 0xf0, 0x01, 0x48, 0x8a, - 0xc2, 0xc7, 0xf0, 0x01, 0x46, 0x12, 0x85, 0xb7, 0xf0, 0x01, 0x46, 0xee, - 0xdc, 0xa7, 0xf0, 0x41, 0x45, 0x50, 0xe2, 0xdd, 0xf0, 0x01, 0x48, 0x8a, - 0xc2, 0xcd, 0xf0, 0x01, 0x46, 0x12, 0x85, 0xbd, 0xf0, 0x01, 0x46, 0xee, - 0xdc, 0xad, 0xf0, 0x41, 0x45, 0x50, 0xe2, 0xd9, 0xf0, 0x01, 0x48, 0x8a, - 0xc2, 0xc9, 0xf0, 0x01, 0x46, 0x12, 0x85, 0xb9, 0xf0, 0x01, 0x46, 0xee, - 0xdc, 0xa9, 0xf0, 0x41, 0x07, 0x97, 0x38, 0x1d, 0x09, 0x12, 0xba, 0x01, - 0xff, 0x45, 0x50, 0xe2, 0xdc, 0xf0, 0x01, 0x48, 0x8a, 0xc2, 0xcc, 0xf0, - 0x01, 0x46, 0x12, 0x85, 0xbc, 0xf0, 0x01, 0x46, 0xee, 0xdc, 0xac, 0xf0, - 0x41, 0x45, 0x50, 0xe2, 0xde, 0xf0, 0x01, 0x48, 0x8a, 0xc2, 0xce, 0xf0, - 0x01, 0x46, 0x12, 0x85, 0xbe, 0xf0, 0x01, 0x46, 0xee, 0xdc, 0xae, 0xf0, - 0x41, 0x45, 0x50, 0xe2, 0xdb, 0xf0, 0x01, 0x48, 0x8a, 0xc2, 0xcb, 0xf0, - 0x01, 0x46, 0x12, 0x85, 0xbb, 0xf0, 0x01, 0x46, 0xee, 0xdc, 0xab, 0xf0, - 0x41, 0x07, 0x46, 0xcf, 0x26, 0xaf, 0x01, 0xff, 0x42, 0x36, 0x03, 0xe0, - 0xf0, 0x01, 0x06, 0x5b, 0xd1, 0x01, 0xff, 0x45, 0x50, 0xe2, 0xd4, 0xf0, - 0x01, 0x48, 0x8a, 0xc2, 0xc4, 0xf0, 0x01, 0x46, 0x12, 0x85, 0xb4, 0xf0, - 0x01, 0x46, 0xee, 0xdc, 0xa4, 0xf0, 0x41, 0x45, 0x50, 0xe2, 0xd5, 0xf0, - 0x01, 0x48, 0x8a, 0xc2, 0xc5, 0xf0, 0x01, 0x46, 0x12, 0x85, 0xb5, 0xf0, - 0x01, 0x46, 0xee, 0xdc, 0xa5, 0xf0, 0x41, 0x45, 0x50, 0xe2, 0xd8, 0xf0, - 0x01, 0x48, 0x8a, 0xc2, 0xc8, 0xf0, 0x01, 0x46, 0x12, 0x85, 0xb8, 0xf0, - 0x01, 0x46, 0xee, 0xdc, 0xa8, 0xf0, 0x41, 0x43, 0xe3, 0x02, 0xa0, 0xf0, - 0x01, 0x4a, 0x27, 0xaa, 0xcf, 0xf0, 0x41, 0x45, 0x50, 0xe2, 0xd1, 0xf0, - 0x01, 0x48, 0x8a, 0xc2, 0xc1, 0xf0, 0x01, 0x46, 0x12, 0x85, 0xb1, 0xf0, - 0x01, 0x46, 0xee, 0xdc, 0xa1, 0xf0, 0x41, 0x4c, 0xad, 0x89, 0x0f, 0x21, - 0x40, 0x43, 0xaa, 0x01, 0xa7, 0xfa, 0x01, 0x05, 0x17, 0x42, 0x01, 0xff, - 0x4d, 0x9b, 0x82, 0x18, 0x23, 0x00, 0x47, 0xcc, 0xd4, 0xd0, 0xf6, 0x41, - 0x42, 0x36, 0x01, 0xcf, 0x26, 0x80, 0x77, 0xe5, 0x67, 0xf9, 0x01, 0xe7, - 0x16, 0xf4, 0x81, 0x5f, 0xac, 0x4d, 0xae, 0x1b, 0xb3, 0x0d, 0x47, 0x75, - 0xd3, 0xd4, 0x22, 0xc0, 0x00, 0x4d, 0x7e, 0x7e, 0xda, 0x2a, 0x40, 0x43, - 0xe2, 0x7a, 0x53, 0x26, 0x00, 0x43, 0xed, 0x3b, 0x2b, 0xf5, 0x41, 0x43, - 0x6b, 0x18, 0x85, 0xfa, 0x01, 0x02, 0x1e, 0x14, 0x1a, 0xa5, 0x0c, 0x47, - 0x67, 0x28, 0x77, 0xfa, 0x01, 0x4a, 0xdc, 0x12, 0x2f, 0x27, 0x40, 0x4b, - 0x64, 0x95, 0x8d, 0xf3, 0x01, 0x45, 0x47, 0xe1, 0x4d, 0xf3, 0x41, 0x4a, - 0x6b, 0xa7, 0x0c, 0xf9, 0x01, 0x48, 0x6c, 0x2c, 0x0f, 0xf9, 0x41, 0x49, - 0x33, 0x9b, 0xb6, 0x00, 0x00, 0x48, 0xd2, 0xc2, 0xa9, 0xf4, 0x01, 0xec, - 0x8a, 0xf4, 0x41, 0x80, 0x01, 0xff, 0x44, 0xe1, 0x07, 0x37, 0xf4, 0x01, - 0x44, 0xa9, 0x16, 0x3d, 0xf4, 0x41, 0x48, 0x72, 0xc9, 0xfb, 0xf6, 0x41, - 0xa1, 0xde, 0x01, 0x09, 0xe4, 0xb7, 0xcd, 0x01, 0xaf, 0x01, 0xff, 0x08, - 0x12, 0xc3, 0x06, 0x43, 0xb8, 0x27, 0xdb, 0x2b, 0x40, 0x07, 0xc1, 0x05, - 0x33, 0x07, 0x2f, 0x39, 0x06, 0x4e, 0x68, 0x7d, 0x1f, 0x09, 0x41, 0x43, - 0xbf, 0x0a, 0x16, 0x09, 0x81, 0x1c, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, - 0x17, 0x09, 0x01, 0x44, 0x25, 0x01, 0x1b, 0x09, 0x01, 0xb7, 0x01, 0xff, - 0x44, 0x29, 0x1d, 0x18, 0x09, 0x01, 0xef, 0x1a, 0x09, 0x41, 0x48, 0x21, - 0x11, 0x19, 0x09, 0x41, 0xa1, 0x7b, 0x43, 0x71, 0x09, 0x01, 0x09, 0x01, - 0x44, 0x73, 0xe2, 0x03, 0x09, 0x01, 0x44, 0xa6, 0xec, 0x02, 0x09, 0x01, - 0x42, 0xb0, 0x01, 0x04, 0x09, 0x81, 0x5e, 0x43, 0x5e, 0x50, 0x0a, 0x09, - 0x01, 0x44, 0xfd, 0xe4, 0x0b, 0x09, 0x01, 0x43, 0x89, 0x05, 0x0c, 0x09, - 0x01, 0x43, 0x54, 0x22, 0x0d, 0x09, 0x01, 0x42, 0x6f, 0x02, 0x10, 0x09, - 0x01, 0x43, 0x44, 0xf1, 0x12, 0x09, 0x01, 0x44, 0x48, 0xb7, 0x13, 0x09, - 0x01, 0xb3, 0x20, 0xb4, 0x12, 0x43, 0x77, 0xf1, 0x05, 0x09, 0x01, 0x43, - 0x58, 0x51, 0x09, 0x09, 0x01, 0x43, 0x9c, 0x73, 0x06, 0x09, 0x41, 0x42, - 0xd7, 0x23, 0x15, 0x09, 0x01, 0x42, 0xc2, 0x05, 0x08, 0x09, 0x41, 0x43, - 0x0c, 0x02, 0x11, 0x09, 0x01, 0x43, 0x5d, 0x81, 0x0e, 0x09, 0x01, 0x43, - 0x0e, 0x16, 0x14, 0x09, 0x41, 0xf4, 0x07, 0x09, 0x41, 0x42, 0x9e, 0x01, - 0x0f, 0x09, 0x01, 0x42, 0x24, 0x00, 0x00, 0x09, 0x41, 0x52, 0xbe, 0x4f, - 0x36, 0x17, 0x00, 0x52, 0x1a, 0x54, 0x35, 0x17, 0x40, 0x06, 0x40, 0xd9, - 0xc7, 0x02, 0x10, 0xba, 0x62, 0x01, 0xff, 0x45, 0xce, 0x00, 0xd9, 0x01, - 0x01, 0xa2, 0x9a, 0x02, 0xa3, 0xe3, 0x01, 0x02, 0x3b, 0x01, 0xd2, 0x01, - 0x45, 0xaa, 0xe2, 0xee, 0x01, 0x01, 0x45, 0x5e, 0xe3, 0xf8, 0x01, 0x01, - 0xa7, 0xb7, 0x01, 0xa8, 0xa2, 0x01, 0x02, 0xc3, 0x01, 0x93, 0x01, 0x02, - 0x6c, 0x00, 0x82, 0x01, 0x47, 0x8b, 0xd1, 0xf7, 0x01, 0x01, 0xb0, 0x5f, - 0xb2, 0x51, 0xb3, 0x29, 0xb4, 0x15, 0x44, 0x89, 0xbe, 0xf3, 0x01, 0x01, - 0xb7, 0x01, 0xff, 0x48, 0x4a, 0xc1, 0xfc, 0x01, 0x01, 0x44, 0x63, 0x2c, - 0xd5, 0x01, 0x41, 0x4c, 0xc1, 0x8a, 0xd2, 0x01, 0x01, 0x44, 0x32, 0xed, - 0xd8, 0x01, 0x01, 0x44, 0x21, 0x5f, 0xf0, 0x01, 0x41, 0x42, 0x9a, 0x43, - 0xdf, 0x01, 0x01, 0x02, 0x49, 0x00, 0x12, 0x44, 0xe0, 0x0a, 0xe5, 0x01, - 0x01, 0x48, 0x7a, 0xc5, 0xfb, 0x01, 0x01, 0x47, 0xad, 0xd3, 0xfa, 0x01, - 0x41, 0x43, 0x7a, 0x23, 0xdb, 0x01, 0x01, 0xf0, 0xe8, 0x01, 0x41, 0x42, - 0x57, 0x00, 0xed, 0x01, 0x01, 0x46, 0xf2, 0xdb, 0xf5, 0x01, 0x41, 0x46, - 0xee, 0xd6, 0xf4, 0x01, 0x01, 0x49, 0x75, 0xa7, 0xd0, 0x01, 0x01, 0xac, - 0x01, 0xff, 0x48, 0xd2, 0xc0, 0xf2, 0x01, 0x01, 0x49, 0xc3, 0xbd, 0xd1, - 0x01, 0x41, 0x46, 0x32, 0xdb, 0xdd, 0x01, 0x01, 0x45, 0x6d, 0xe8, 0xde, - 0x01, 0x41, 0xe4, 0xe0, 0x01, 0x01, 0x42, 0x26, 0x0b, 0xf6, 0x01, 0x41, - 0x45, 0x6d, 0xc0, 0xd6, 0x01, 0x01, 0x43, 0x03, 0x00, 0xea, 0x01, 0x01, - 0x43, 0xfd, 0x04, 0xe9, 0x01, 0x41, 0x47, 0x7c, 0xcc, 0xd7, 0x01, 0x01, - 0x45, 0x63, 0x9f, 0xf9, 0x01, 0x41, 0x44, 0xc6, 0xed, 0xe3, 0x01, 0x01, - 0x42, 0x32, 0x00, 0xef, 0x01, 0x41, 0xa1, 0x22, 0x44, 0xdf, 0x48, 0xd4, - 0x01, 0x01, 0x43, 0xd7, 0x49, 0xdc, 0x01, 0x01, 0xaf, 0x01, 0xff, 0x44, - 0xda, 0xed, 0xe6, 0x01, 0x01, 0x42, 0x8b, 0x05, 0xe4, 0x01, 0xc1, 0x00, - 0x54, 0x3b, 0x42, 0xfd, 0x01, 0x41, 0x45, 0xb2, 0x70, 0xd3, 0x01, 0x01, - 0x4d, 0x5d, 0x86, 0xe2, 0x01, 0x01, 0xf4, 0xec, 0x01, 0x41, 0x42, 0x27, - 0x01, 0xf1, 0x01, 0x81, 0x12, 0xaf, 0x06, 0x48, 0x52, 0xc9, 0xeb, 0x01, - 0x41, 0x47, 0x06, 0xd1, 0xe1, 0x01, 0x01, 0xf7, 0xda, 0x01, 0x41, 0x44, - 0xf5, 0x82, 0xe7, 0x01, 0x41, 0x50, 0xaa, 0x60, 0x75, 0xa8, 0x00, 0x07, - 0xc1, 0x05, 0x38, 0x05, 0xb9, 0x00, 0x28, 0xb3, 0x01, 0xff, 0x4f, 0xfd, - 0x6c, 0x74, 0xa8, 0x00, 0xb5, 0x01, 0xff, 0x0f, 0x5b, 0x66, 0x06, 0x52, - 0x42, 0x53, 0x72, 0xa8, 0x40, 0x42, 0x71, 0x00, 0x71, 0xa8, 0x00, 0x42, - 0xa9, 0x01, 0x67, 0xa8, 0x00, 0x42, 0x34, 0x22, 0x68, 0xa8, 0x40, 0x4b, - 0x2c, 0x99, 0x77, 0xa8, 0x00, 0x44, 0xa4, 0x02, 0x76, 0xa8, 0x40, 0xe1, - 0x5d, 0xa8, 0x80, 0x92, 0x02, 0x42, 0x16, 0x00, 0x4e, 0xa8, 0x00, 0xa3, - 0xf8, 0x01, 0xa4, 0xe5, 0x01, 0xe5, 0x60, 0xa8, 0x80, 0xdb, 0x01, 0x42, - 0xe1, 0x07, 0x64, 0xa8, 0x00, 0xa7, 0xc8, 0x01, 0x42, 0x22, 0x00, 0x5c, - 0xa8, 0x00, 0xe9, 0x5e, 0xa8, 0x00, 0x42, 0xbd, 0x26, 0x46, 0xa8, 0x00, - 0xab, 0xab, 0x01, 0x42, 0x74, 0x00, 0x59, 0xa8, 0x00, 0x42, 0x6c, 0x00, - 0x4f, 0xa8, 0x00, 0xae, 0x86, 0x01, 0xef, 0x61, 0xa8, 0x00, 0xb0, 0x76, - 0x42, 0xf4, 0x13, 0x62, 0xa8, 0x00, 0x42, 0x71, 0x00, 0x58, 0xa8, 0x00, - 0xb3, 0x58, 0xb4, 0x33, 0xf5, 0x5f, 0xa8, 0x00, 0x05, 0x68, 0x1c, 0x1f, - 0x42, 0xa9, 0x01, 0x53, 0xa8, 0x00, 0x42, 0x4c, 0x26, 0x63, 0xa8, 0x00, - 0x42, 0x34, 0x22, 0x57, 0xa8, 0x00, 0xba, 0x01, 0xff, 0xe1, 0x55, 0xa8, - 0x00, 0x42, 0x22, 0x00, 0x54, 0xa8, 0x40, 0x44, 0x87, 0x10, 0x6f, 0xa8, - 0x00, 0x48, 0x0a, 0xc5, 0x6e, 0xa8, 0x40, 0xe1, 0x48, 0xa8, 0x00, 0x42, - 0x22, 0x00, 0x49, 0xa8, 0x00, 0xb3, 0x0d, 0xb4, 0x01, 0xff, 0xe1, 0x69, - 0xa8, 0x00, 0x42, 0x22, 0x00, 0x6a, 0xa8, 0x40, 0xe1, 0x50, 0xa8, 0x00, - 0x42, 0x22, 0x00, 0x51, 0xa8, 0x40, 0xe1, 0x5b, 0xa8, 0x00, 0x42, 0x22, - 0x00, 0x5a, 0xa8, 0x00, 0x46, 0xb5, 0x09, 0x56, 0xa8, 0x40, 0xe1, 0x4c, - 0xa8, 0x00, 0x42, 0x22, 0x00, 0x4d, 0xa8, 0x40, 0xe1, 0x4b, 0xa8, 0x00, - 0x42, 0x24, 0x02, 0x43, 0xa8, 0x00, 0x42, 0xff, 0x04, 0x6c, 0xa8, 0x00, - 0x42, 0x34, 0x22, 0x47, 0xa8, 0x40, 0xe1, 0x40, 0xa8, 0x00, 0x42, 0x22, - 0x00, 0x41, 0xa8, 0x40, 0xe1, 0x42, 0xa8, 0x00, 0x42, 0x24, 0x02, 0x65, - 0xa8, 0x40, 0xe5, 0x66, 0xa8, 0x40, 0xe1, 0x4a, 0xa8, 0x00, 0x42, 0xa1, - 0x10, 0x6b, 0xa8, 0x00, 0x42, 0x59, 0x00, 0x52, 0xa8, 0x40, 0xe1, 0x44, - 0xa8, 0x80, 0x06, 0x42, 0x22, 0x00, 0x45, 0xa8, 0x40, 0x49, 0x51, 0x23, - 0x73, 0xa8, 0x40, 0x4b, 0xf4, 0x9c, 0x6d, 0xa8, 0x00, 0x4b, 0xa6, 0xa0, - 0x70, 0xa8, 0x40, 0xa1, 0xeb, 0x01, 0x48, 0x76, 0xa7, 0xb6, 0xf6, 0x01, - 0xae, 0xc4, 0x01, 0x4c, 0x99, 0x91, 0xc2, 0xfa, 0x01, 0xb2, 0x14, 0xb3, - 0x06, 0x48, 0x02, 0xc9, 0xeb, 0xf9, 0x41, 0x48, 0x5a, 0xc3, 0xa7, 0x20, - 0x00, 0x46, 0xd1, 0xae, 0xb1, 0x20, 0x40, 0x80, 0x93, 0x01, 0x49, 0xc8, - 0x99, 0x25, 0x00, 0x00, 0x4c, 0x55, 0x8d, 0xad, 0xf3, 0x01, 0x51, 0xa0, - 0x5a, 0x7e, 0x26, 0x00, 0x4a, 0xf7, 0x8c, 0xc2, 0x27, 0x80, 0x74, 0xb3, - 0x01, 0xff, 0x4c, 0x0d, 0x8d, 0x23, 0xf6, 0x01, 0x02, 0x10, 0x00, 0x06, - 0x47, 0xca, 0xd1, 0x06, 0x23, 0x40, 0x80, 0x06, 0x4b, 0x27, 0x85, 0xbb, - 0xf4, 0x41, 0x4d, 0xc3, 0x7f, 0x47, 0xf6, 0x01, 0x48, 0x32, 0xc2, 0xd7, - 0xf9, 0x01, 0x4f, 0x96, 0x6a, 0x38, 0xf9, 0x01, 0x48, 0x7d, 0x81, 0x4d, - 0xf6, 0x01, 0x03, 0xb6, 0x05, 0x31, 0x61, 0x1f, 0x0e, 0x4c, 0xf6, 0x01, - 0x05, 0x51, 0x00, 0x01, 0xff, 0xa2, 0x18, 0x45, 0x55, 0xe2, 0xc5, 0xfa, - 0x01, 0x4c, 0x49, 0x8d, 0x4f, 0xf6, 0x01, 0x49, 0x27, 0xb7, 0xd5, 0xf9, - 0x01, 0x4c, 0x11, 0x92, 0x4e, 0xf6, 0x41, 0x43, 0x0e, 0x07, 0xf9, 0x26, - 0x00, 0x49, 0x43, 0xb9, 0x71, 0xf4, 0x41, 0x4e, 0x44, 0x78, 0xd8, 0xf9, - 0x01, 0x4b, 0xbc, 0xa0, 0xd6, 0xf9, 0x41, 0x47, 0x3e, 0x06, 0xe1, 0x2a, - 0x40, 0x4a, 0x85, 0xab, 0x30, 0x20, 0x00, 0x44, 0x2f, 0x03, 0x4c, 0x21, - 0x00, 0x51, 0xd1, 0x5c, 0x31, 0x20, 0x40, 0x56, 0x4f, 0x31, 0x86, 0xf5, - 0x01, 0x43, 0x80, 0xbd, 0x0f, 0x27, 0x00, 0x44, 0xda, 0xec, 0x27, 0xf4, - 0x01, 0x49, 0xc7, 0xbc, 0x14, 0xf6, 0x01, 0x46, 0x13, 0x1b, 0xe4, 0x26, - 0x40, 0x44, 0x2f, 0x9f, 0xdb, 0xfa, 0x01, 0xa3, 0x0a, 0x44, 0xf7, 0xe7, - 0x5c, 0xf9, 0x01, 0xf2, 0x50, 0xf3, 0x41, 0x48, 0xd6, 0x18, 0x2e, 0x26, - 0x00, 0xe8, 0x51, 0xf3, 0x01, 0x43, 0x35, 0x01, 0x9a, 0xf9, 0x41, 0x45, - 0x3c, 0xe2, 0xe6, 0xf4, 0x01, 0xa7, 0xfa, 0x13, 0x0b, 0x97, 0x9a, 0x96, - 0x0d, 0xac, 0x87, 0x0b, 0xae, 0xf8, 0x0a, 0x47, 0xcc, 0x80, 0xce, 0xf4, - 0x01, 0xb2, 0x96, 0x03, 0x02, 0xee, 0x00, 0xed, 0x02, 0x0a, 0x17, 0xb0, - 0x06, 0x48, 0xaa, 0xc9, 0x3e, 0xf4, 0x41, 0x4c, 0x2d, 0x28, 0xf5, 0x1a, - 0x81, 0xcc, 0x02, 0xac, 0x62, 0x4e, 0x8a, 0x78, 0xef, 0x1a, 0x81, 0x4c, - 0x4b, 0x4a, 0x65, 0xe6, 0x1a, 0x81, 0x2f, 0x07, 0xcd, 0xd2, 0x01, 0xff, - 0x4c, 0x2d, 0x28, 0xe7, 0x1a, 0x81, 0x1d, 0x44, 0x83, 0x2c, 0xec, 0x1a, - 0xc1, 0x00, 0x80, 0x01, 0xff, 0x45, 0x3d, 0x2c, 0xee, 0x1a, 0x01, 0x44, - 0x03, 0x12, 0xeb, 0x1a, 0xc1, 0x00, 0x46, 0x3c, 0x2c, 0xed, 0x1a, 0x41, - 0x46, 0x3c, 0x2c, 0xea, 0x1a, 0x41, 0x80, 0x01, 0xff, 0x45, 0x3d, 0x2c, - 0xe9, 0x1a, 0x01, 0x44, 0x03, 0x12, 0xe5, 0x1a, 0xc1, 0x00, 0x46, 0x3c, - 0x2c, 0xe8, 0x1a, 0x41, 0x80, 0x01, 0xff, 0x45, 0x3d, 0x2c, 0xf2, 0x1a, - 0x01, 0x4a, 0xef, 0xaa, 0xf1, 0x1a, 0x41, 0x06, 0xc2, 0x05, 0x1d, 0x4f, - 0xfa, 0x6f, 0xf4, 0x1a, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x45, 0x3d, 0x2c, - 0xf7, 0x1a, 0x01, 0x44, 0x03, 0x12, 0xf3, 0x1a, 0xc1, 0x00, 0x46, 0x3c, - 0x2c, 0xf6, 0x1a, 0x41, 0xe1, 0xd5, 0x1a, 0x01, 0x42, 0x16, 0x00, 0xcc, - 0x1a, 0x01, 0xa3, 0xb0, 0x01, 0x42, 0xa1, 0x10, 0xc4, 0x1a, 0x01, 0xe5, - 0xd6, 0x1a, 0x01, 0xa6, 0x76, 0x42, 0x24, 0x02, 0xc9, 0x1a, 0x01, 0x42, - 0x22, 0x00, 0xc8, 0x1a, 0x01, 0xe9, 0xd7, 0x1a, 0x81, 0x61, 0xab, 0x55, - 0x42, 0x74, 0x00, 0xc2, 0x1a, 0x01, 0x42, 0x6c, 0x00, 0xc3, 0x1a, 0x01, - 0xae, 0x3d, 0xef, 0xd8, 0x1a, 0x01, 0xb0, 0x2d, 0x42, 0x71, 0x00, 0xd2, - 0x1a, 0x01, 0x42, 0x15, 0x06, 0xcb, 0x1a, 0x01, 0xb4, 0x15, 0xf5, 0xd9, - 0x1a, 0x81, 0x0c, 0x42, 0xa6, 0x0a, 0xc6, 0x1a, 0x01, 0x42, 0x59, 0x00, - 0xc5, 0x1a, 0x41, 0xe1, 0xda, 0x1a, 0x41, 0xe1, 0xce, 0x1a, 0x01, 0x42, - 0x22, 0x00, 0xcf, 0x1a, 0x41, 0xe1, 0xc0, 0x1a, 0x01, 0x42, 0x22, 0x00, - 0xd1, 0x1a, 0x41, 0xe1, 0xd0, 0x1a, 0x01, 0x42, 0x24, 0x02, 0xc7, 0x1a, - 0x41, 0xe1, 0xc1, 0x1a, 0x01, 0x42, 0x22, 0x00, 0xca, 0x1a, 0x41, 0xe1, - 0xdb, 0x1a, 0x41, 0xe1, 0xd3, 0x1a, 0x01, 0x05, 0x47, 0x27, 0x01, 0xff, - 0xeb, 0xdd, 0x1a, 0x01, 0xec, 0xe1, 0x1a, 0x01, 0xed, 0xdf, 0x1a, 0x01, - 0xee, 0xe0, 0x1a, 0x81, 0x10, 0xf0, 0xdc, 0x1a, 0x01, 0xf4, 0xde, 0x1a, - 0x01, 0xf7, 0xe2, 0x1a, 0x01, 0xf9, 0xe4, 0x1a, 0x41, 0xe7, 0xe3, 0x1a, - 0x41, 0xe1, 0xcd, 0x1a, 0x01, 0x42, 0x22, 0x00, 0xd4, 0x1a, 0x41, 0x80, - 0x01, 0xff, 0x45, 0x3d, 0x2c, 0xf8, 0x1a, 0x01, 0x47, 0x1b, 0x4d, 0xf0, - 0x1a, 0x41, 0xa5, 0x16, 0x09, 0x62, 0xb8, 0x06, 0x4c, 0x05, 0x92, 0xc2, - 0xf6, 0x41, 0x52, 0xd0, 0x4f, 0x91, 0x23, 0x00, 0x50, 0xaa, 0x66, 0x92, - 0x23, 0x40, 0x48, 0xd6, 0x1f, 0xfd, 0x2b, 0x00, 0x49, 0xf7, 0xb9, 0xf3, - 0xf6, 0x41, 0xa1, 0x9e, 0x07, 0x0b, 0xa5, 0x99, 0x4a, 0x43, 0x03, 0x2c, - 0x9c, 0xf9, 0x01, 0xb4, 0x01, 0xff, 0x51, 0x94, 0x55, 0x3d, 0x30, 0x00, - 0x03, 0x3c, 0x0c, 0x0c, 0x4c, 0xd9, 0x90, 0x50, 0x32, 0x00, 0x48, 0xfa, - 0xc9, 0x89, 0xf3, 0x41, 0x80, 0x06, 0x58, 0x4d, 0x29, 0x7d, 0x26, 0x40, - 0x4c, 0x1f, 0x47, 0x02, 0x22, 0x00, 0x05, 0xc2, 0x07, 0x01, 0xff, 0x48, - 0x62, 0xc1, 0x8c, 0x00, 0x00, 0x44, 0xa5, 0x01, 0x8b, 0x00, 0x00, 0x47, - 0xa7, 0x30, 0x8b, 0x00, 0x00, 0x42, 0x50, 0x02, 0x8c, 0x00, 0x40, 0x06, - 0xc4, 0x06, 0x8e, 0x06, 0x07, 0x9e, 0xce, 0xc2, 0x04, 0x0a, 0x41, 0xa9, - 0xc3, 0x02, 0x12, 0xfe, 0x51, 0xb2, 0x02, 0x06, 0xb3, 0x05, 0x55, 0x07, - 0x2f, 0x39, 0x01, 0xff, 0xa5, 0x42, 0xa6, 0x34, 0x48, 0x7c, 0x52, 0x86, - 0x24, 0x00, 0xb3, 0x20, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0x7d, 0x24, - 0x00, 0x47, 0x2a, 0x59, 0x80, 0x24, 0x00, 0x02, 0x15, 0x01, 0x01, 0xff, - 0x43, 0x47, 0x2b, 0x7f, 0x24, 0x00, 0x43, 0x2a, 0x1d, 0x87, 0x24, 0x40, - 0x48, 0x3c, 0x50, 0x84, 0x24, 0x00, 0x46, 0x60, 0x25, 0x83, 0x24, 0x40, - 0x46, 0x9c, 0x17, 0x82, 0x24, 0x00, 0x47, 0x9f, 0x5b, 0x81, 0x24, 0x40, - 0x47, 0xca, 0x24, 0x85, 0x24, 0x00, 0x45, 0x0b, 0x6e, 0x7e, 0x24, 0x40, - 0x0f, 0xb9, 0x05, 0x6d, 0x0d, 0x4b, 0x08, 0x01, 0xff, 0xe1, 0x9c, 0x24, - 0x00, 0xe2, 0x9d, 0x24, 0x00, 0xe3, 0x9e, 0x24, 0x00, 0xe4, 0x9f, 0x24, - 0x00, 0xe5, 0xa0, 0x24, 0x00, 0xe6, 0xa1, 0x24, 0x00, 0xe7, 0xa2, 0x24, - 0x00, 0xe8, 0xa3, 0x24, 0x00, 0xe9, 0xa4, 0x24, 0x00, 0xea, 0xa5, 0x24, - 0x00, 0xeb, 0xa6, 0x24, 0x00, 0xec, 0xa7, 0x24, 0x00, 0xed, 0xa8, 0x24, - 0x00, 0xee, 0xa9, 0x24, 0x00, 0xef, 0xaa, 0x24, 0x00, 0xf0, 0xab, 0x24, - 0x00, 0xf1, 0xac, 0x24, 0x00, 0xf2, 0xad, 0x24, 0x00, 0xf3, 0xae, 0x24, - 0x00, 0xf4, 0xaf, 0x24, 0x00, 0xf5, 0xb0, 0x24, 0x00, 0xf6, 0xb1, 0x24, - 0x00, 0xf7, 0xb2, 0x24, 0x00, 0xf8, 0xb3, 0x24, 0x00, 0xf9, 0xb4, 0x24, - 0x00, 0xfa, 0xb5, 0x24, 0x40, 0xe1, 0x10, 0xf1, 0x01, 0xe2, 0x11, 0xf1, - 0x01, 0xe3, 0x12, 0xf1, 0x01, 0xe4, 0x13, 0xf1, 0x01, 0xe5, 0x14, 0xf1, - 0x01, 0xe6, 0x15, 0xf1, 0x01, 0xe7, 0x16, 0xf1, 0x01, 0xe8, 0x17, 0xf1, - 0x01, 0xe9, 0x18, 0xf1, 0x01, 0xea, 0x19, 0xf1, 0x01, 0xeb, 0x1a, 0xf1, - 0x01, 0xec, 0x1b, 0xf1, 0x01, 0xed, 0x1c, 0xf1, 0x01, 0xee, 0x1d, 0xf1, - 0x01, 0xef, 0x1e, 0xf1, 0x01, 0xf0, 0x1f, 0xf1, 0x01, 0xf1, 0x20, 0xf1, - 0x01, 0xf2, 0x21, 0xf1, 0x01, 0xf3, 0x22, 0xf1, 0x01, 0xf4, 0x23, 0xf1, - 0x01, 0xf5, 0x24, 0xf1, 0x01, 0xf6, 0x25, 0xf1, 0x01, 0xf7, 0x26, 0xf1, - 0x01, 0xf8, 0x27, 0xf1, 0x01, 0xf9, 0x28, 0xf1, 0x01, 0xfa, 0x29, 0xf1, - 0x41, 0x43, 0x21, 0x11, 0x1e, 0x32, 0x00, 0x44, 0x6e, 0xed, 0x1d, 0x32, - 0x40, 0x48, 0xba, 0xc0, 0x3f, 0x32, 0x00, 0xa3, 0xe5, 0x01, 0xa5, 0xd0, - 0x01, 0xa6, 0xad, 0x01, 0x44, 0xde, 0xec, 0x32, 0x32, 0x00, 0x45, 0xf3, - 0xe4, 0x38, 0x32, 0x00, 0xad, 0x92, 0x01, 0xae, 0x83, 0x01, 0x43, 0xbf, - 0x0a, 0x20, 0x32, 0x00, 0x02, 0x88, 0x00, 0x60, 0xb3, 0x23, 0xb4, 0x0f, - 0xb7, 0x01, 0xff, 0x44, 0x8a, 0x00, 0x2c, 0x32, 0x00, 0x43, 0xfc, 0x2c, - 0x2d, 0x32, 0x40, 0x42, 0x92, 0x01, 0x29, 0x32, 0x00, 0x44, 0x25, 0x01, - 0x22, 0x32, 0x00, 0x42, 0x15, 0x02, 0x21, 0x32, 0x40, 0xa5, 0x2d, 0x42, - 0x60, 0x25, 0x25, 0x32, 0x00, 0x46, 0xb0, 0xdb, 0x33, 0x32, 0x00, 0x46, - 0x10, 0xdc, 0x35, 0x32, 0x00, 0xb4, 0x0d, 0xb5, 0x01, 0xff, 0xee, 0x30, - 0x32, 0x00, 0x47, 0xdf, 0xd1, 0x3c, 0x32, 0x40, 0x43, 0x35, 0x01, 0x31, - 0x32, 0x00, 0x43, 0x59, 0xf1, 0x3b, 0x32, 0x40, 0x42, 0x24, 0x00, 0x42, - 0x32, 0x00, 0x43, 0x28, 0x1d, 0x26, 0x32, 0x40, 0x43, 0xd4, 0x2c, 0x43, - 0x32, 0x00, 0x47, 0x13, 0x7f, 0x39, 0x32, 0x00, 0xb3, 0x01, 0xff, 0x45, - 0x56, 0x5b, 0x3e, 0x32, 0x00, 0xf4, 0x41, 0x32, 0x40, 0x43, 0x00, 0x05, - 0x34, 0x32, 0x00, 0x43, 0xc3, 0x07, 0x28, 0x32, 0x40, 0x44, 0x45, 0x0f, - 0x2e, 0x32, 0x00, 0x43, 0x69, 0x05, 0x2a, 0x32, 0x40, 0x47, 0x12, 0xce, - 0x40, 0x32, 0x00, 0xa9, 0x06, 0x43, 0xcb, 0x06, 0x23, 0x32, 0x40, 0x47, - 0x96, 0xd0, 0x36, 0x32, 0x00, 0x42, 0x88, 0x00, 0x2b, 0x32, 0x00, 0x42, - 0x32, 0x00, 0x24, 0x32, 0x40, 0x44, 0xb9, 0x70, 0x2f, 0x32, 0x00, 0x44, - 0xc9, 0x00, 0x27, 0x32, 0x00, 0x49, 0x3f, 0xba, 0x3d, 0x32, 0x40, 0x43, - 0x0e, 0x07, 0x3a, 0x32, 0x00, 0x4d, 0x4c, 0x85, 0x37, 0x32, 0x40, 0xa3, - 0xa5, 0x01, 0x45, 0x35, 0xa3, 0x0d, 0x32, 0x80, 0x97, 0x01, 0x45, 0x68, - 0xc9, 0x07, 0x32, 0x80, 0x89, 0x01, 0xab, 0x6d, 0x45, 0x8e, 0xe5, 0x04, - 0x32, 0x80, 0x60, 0x45, 0xfc, 0xe5, 0x01, 0x32, 0x80, 0x53, 0xb0, 0x37, - 0x45, 0x41, 0xe7, 0x03, 0x32, 0x80, 0x2a, 0x44, 0xf0, 0xbc, 0x06, 0x32, - 0x80, 0x1d, 0xb4, 0x01, 0xff, 0x46, 0x8b, 0xd3, 0x0b, 0x32, 0x80, 0x0d, - 0x45, 0x20, 0xcb, 0x02, 0x32, 0xc0, 0x00, 0x42, 0x19, 0x00, 0x10, 0x32, - 0x40, 0x42, 0x19, 0x00, 0x19, 0x32, 0x40, 0x42, 0x19, 0x00, 0x14, 0x32, - 0x40, 0x42, 0x19, 0x00, 0x11, 0x32, 0x40, 0x46, 0x4c, 0xc0, 0x0c, 0x32, - 0x80, 0x0d, 0x44, 0x33, 0x83, 0x05, 0x32, 0xc0, 0x00, 0x42, 0x19, 0x00, - 0x13, 0x32, 0x40, 0x42, 0x19, 0x00, 0x1a, 0x32, 0x40, 0x42, 0x19, 0x00, - 0x0f, 0x32, 0x40, 0x42, 0x19, 0x00, 0x12, 0x32, 0x40, 0x46, 0x44, 0xc0, - 0x0a, 0x32, 0x80, 0x0d, 0x45, 0xb7, 0xa0, 0x00, 0x32, 0xc0, 0x00, 0x42, - 0x19, 0x00, 0x0e, 0x32, 0x40, 0x42, 0x19, 0x00, 0x18, 0x32, 0x40, 0x42, - 0x19, 0x00, 0x15, 0x32, 0x40, 0x42, 0x19, 0x00, 0x1b, 0x32, 0x40, 0x46, - 0x17, 0xcd, 0x09, 0x32, 0x80, 0x12, 0x44, 0x18, 0xcd, 0x08, 0x32, 0xc0, - 0x00, 0x80, 0x01, 0xff, 0xe1, 0x16, 0x32, 0x00, 0xf5, 0x1c, 0x32, 0x40, - 0x42, 0x19, 0x00, 0x17, 0x32, 0x40, 0x45, 0xc3, 0x0a, 0x7b, 0x24, 0x00, - 0xa6, 0x29, 0x44, 0x46, 0x2a, 0x7c, 0x24, 0x00, 0x43, 0xbf, 0x0a, 0x74, - 0x24, 0x00, 0xb3, 0x0f, 0xb4, 0x01, 0xff, 0x44, 0x25, 0x01, 0x76, 0x24, - 0x00, 0x42, 0x15, 0x02, 0x75, 0x24, 0x40, 0x44, 0x27, 0x1d, 0x7a, 0x24, - 0x00, 0x42, 0x60, 0x25, 0x79, 0x24, 0x40, 0x43, 0xa7, 0x05, 0x78, 0x24, - 0x00, 0x43, 0xcb, 0x06, 0x77, 0x24, 0x40, 0x45, 0x32, 0xe2, 0x82, 0xfa, - 0x01, 0x05, 0x32, 0x10, 0x1c, 0x05, 0xbc, 0x37, 0x01, 0xff, 0x42, 0x1e, - 0x00, 0x25, 0x22, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x51, 0x1c, 0x05, - 0xf2, 0x2a, 0x00, 0x4e, 0x93, 0x3d, 0xf3, 0x2a, 0x40, 0x4a, 0x35, 0x20, - 0x29, 0x20, 0x00, 0x42, 0x55, 0x0d, 0x0f, 0x2e, 0x00, 0x47, 0x4c, 0x71, - 0x4d, 0x2e, 0x40, 0x45, 0xd8, 0xe1, 0x5e, 0xf9, 0x01, 0x47, 0x5c, 0xcd, - 0x3c, 0xf4, 0x41, 0x43, 0xfa, 0x0d, 0xb4, 0x26, 0x00, 0xad, 0x01, 0xff, - 0x80, 0xe8, 0x01, 0x4d, 0x9e, 0x86, 0x32, 0xf9, 0x01, 0x06, 0x74, 0xde, - 0x01, 0xff, 0x02, 0x68, 0x00, 0x3a, 0x07, 0x2f, 0x39, 0x06, 0x56, 0x09, - 0x36, 0x78, 0x08, 0x41, 0xa6, 0x22, 0x43, 0xbf, 0x0a, 0x79, 0x08, 0x01, - 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0x7e, 0x08, 0x01, 0x44, 0x25, 0x01, - 0x7b, 0x08, 0x01, 0xb7, 0x01, 0xff, 0x44, 0x29, 0x1d, 0x7f, 0x08, 0x01, - 0xef, 0x7a, 0x08, 0x41, 0x43, 0xa7, 0x05, 0x7d, 0x08, 0x01, 0x43, 0xcb, - 0x06, 0x7c, 0x08, 0x41, 0x53, 0x48, 0x48, 0x77, 0x08, 0x01, 0x05, 0xc3, - 0x05, 0x01, 0xff, 0xa1, 0x85, 0x01, 0x44, 0x0a, 0xec, 0x61, 0x08, 0x01, - 0x46, 0xda, 0x48, 0x63, 0x08, 0x01, 0x49, 0xa0, 0xb6, 0x6d, 0x08, 0x01, - 0x45, 0xa1, 0xa8, 0x62, 0x08, 0x01, 0x42, 0xb0, 0x01, 0x64, 0x08, 0x81, - 0x60, 0x44, 0x8e, 0xed, 0x6a, 0x08, 0x01, 0x46, 0x9c, 0xda, 0x6b, 0x08, - 0x01, 0x43, 0x89, 0x05, 0x6c, 0x08, 0x01, 0x43, 0x54, 0x22, 0x6e, 0x08, - 0x01, 0x42, 0x6f, 0x02, 0x71, 0x08, 0x01, 0x44, 0xae, 0xc5, 0x73, 0x08, - 0x01, 0x44, 0xfa, 0x64, 0x74, 0x08, 0x01, 0xb3, 0x20, 0xb4, 0x12, 0x43, - 0xc0, 0x88, 0x65, 0x08, 0x01, 0x44, 0x58, 0x51, 0x69, 0x08, 0x01, 0x45, - 0x52, 0x51, 0x66, 0x08, 0x41, 0x42, 0x9a, 0x43, 0x76, 0x08, 0x01, 0x43, - 0x39, 0x25, 0x68, 0x08, 0x41, 0xa1, 0x06, 0x43, 0x0e, 0x16, 0x75, 0x08, - 0x41, 0x43, 0x89, 0xe7, 0x72, 0x08, 0x01, 0x44, 0x39, 0xe1, 0x6f, 0x08, - 0x41, 0x42, 0x53, 0x00, 0x67, 0x08, 0x41, 0x44, 0x48, 0x3c, 0x60, 0x08, - 0x01, 0x43, 0xf7, 0x19, 0x70, 0x08, 0x41, 0x46, 0xf1, 0x2e, 0x19, 0x2e, - 0x00, 0x49, 0x6e, 0xb5, 0xf3, 0xfa, 0x01, 0x44, 0xbe, 0x10, 0x34, 0xf3, - 0x01, 0x47, 0xfa, 0xd3, 0xf4, 0xfa, 0x41, 0xa3, 0xcf, 0x04, 0x06, 0xc4, - 0x06, 0x88, 0x04, 0x09, 0x82, 0xb9, 0xd4, 0x03, 0x07, 0x2f, 0x39, 0x9c, - 0x03, 0x05, 0x2f, 0x03, 0x93, 0x01, 0x07, 0x8d, 0xd4, 0x01, 0xff, 0xa1, - 0x5b, 0xa5, 0x47, 0xa9, 0x33, 0xaf, 0x1f, 0xb5, 0x0b, 0xb7, 0x01, 0xff, - 0xe2, 0x18, 0x6b, 0x01, 0xf6, 0x19, 0x6b, 0x41, 0xa1, 0x08, 0xe2, 0x06, - 0x6b, 0x01, 0xf6, 0x07, 0x6b, 0x41, 0xe2, 0x10, 0x6b, 0x01, 0xf6, 0x11, - 0x6b, 0x41, 0xe2, 0x12, 0x6b, 0x01, 0xaf, 0x04, 0xf6, 0x13, 0x6b, 0x41, - 0xe2, 0x0c, 0x6b, 0x01, 0xf6, 0x0d, 0x6b, 0x41, 0xa1, 0x08, 0xe2, 0x02, - 0x6b, 0x01, 0xf6, 0x03, 0x6b, 0x41, 0xe2, 0x14, 0x6b, 0x01, 0xf6, 0x15, - 0x6b, 0x41, 0xe2, 0x08, 0x6b, 0x01, 0xa5, 0x04, 0xf6, 0x09, 0x6b, 0x41, - 0xe2, 0x00, 0x6b, 0x01, 0xf6, 0x01, 0x6b, 0x41, 0xa1, 0x27, 0xe2, 0x16, - 0x6b, 0x01, 0xa9, 0x19, 0xb5, 0x0f, 0xf6, 0x17, 0x6b, 0x01, 0xb7, 0x01, - 0xff, 0xe2, 0x0e, 0x6b, 0x01, 0xf6, 0x0f, 0x6b, 0x41, 0xe2, 0x04, 0x6b, - 0x01, 0xf6, 0x05, 0x6b, 0x41, 0xe2, 0x0a, 0x6b, 0x01, 0xf6, 0x0b, 0x6b, - 0x41, 0xe2, 0x1a, 0x6b, 0x01, 0xf6, 0x1b, 0x6b, 0x41, 0x42, 0x04, 0x08, - 0x6c, 0x6b, 0x01, 0x04, 0x87, 0xb9, 0xc3, 0x01, 0xa8, 0xb4, 0x01, 0x46, - 0xc4, 0xd9, 0x43, 0x6b, 0x01, 0x43, 0x54, 0x0d, 0x70, 0x6b, 0x01, 0xad, - 0x8f, 0x01, 0xae, 0x80, 0x01, 0xb4, 0x6c, 0x04, 0xbe, 0xef, 0x39, 0xb8, - 0x06, 0x48, 0x52, 0xca, 0x67, 0x6b, 0x41, 0x43, 0xc0, 0x2e, 0x44, 0x6b, - 0x01, 0x43, 0x6b, 0x49, 0x6a, 0x6b, 0x01, 0xb9, 0x01, 0xff, 0x04, 0x7b, - 0x20, 0x06, 0x42, 0x69, 0x05, 0x64, 0x6b, 0x41, 0x44, 0x7a, 0xec, 0x3f, - 0x6b, 0x01, 0x45, 0x24, 0xe6, 0x3c, 0x6b, 0x01, 0x43, 0xa6, 0x48, 0x3d, - 0x6b, 0x01, 0x43, 0x47, 0x09, 0x3e, 0x6b, 0x41, 0x44, 0x82, 0xec, 0x3b, - 0x6b, 0x01, 0x43, 0xd7, 0x49, 0x63, 0x6b, 0x01, 0x44, 0x4e, 0xee, 0x42, - 0x6b, 0x01, 0x44, 0x3e, 0xef, 0x40, 0x6b, 0x01, 0xb4, 0x01, 0xff, 0xa8, - 0x06, 0x49, 0xbe, 0xbc, 0x38, 0x6b, 0x41, 0x43, 0x6b, 0x49, 0x3a, 0x6b, - 0x01, 0x42, 0xe9, 0x04, 0x37, 0x6b, 0x41, 0x42, 0xd7, 0x23, 0x6f, 0x6b, - 0x01, 0x4e, 0xd8, 0x76, 0x66, 0x6b, 0x01, 0x4a, 0x75, 0xb1, 0x6d, 0x6b, - 0x41, 0x43, 0x41, 0xf1, 0x69, 0x6b, 0x01, 0x43, 0x56, 0xf1, 0x6b, 0x6b, - 0x41, 0x04, 0x77, 0xb1, 0x06, 0x42, 0xc4, 0x02, 0x71, 0x6b, 0x41, 0x44, - 0x6a, 0xef, 0x41, 0x6b, 0x01, 0x45, 0x63, 0xe8, 0x6e, 0x6b, 0x41, 0x42, - 0xc3, 0x01, 0x65, 0x6b, 0x01, 0x43, 0x7f, 0x30, 0x68, 0x6b, 0x41, 0xa3, - 0x28, 0x52, 0xcc, 0x50, 0x72, 0x6b, 0x01, 0x48, 0x4a, 0xc6, 0x77, 0x6b, - 0x01, 0x48, 0x52, 0xc7, 0x76, 0x6b, 0x01, 0xb4, 0x01, 0xff, 0x47, 0x21, - 0xd3, 0x45, 0x6b, 0x01, 0x43, 0x86, 0xf1, 0x74, 0x6b, 0xc1, 0x00, 0x45, - 0x90, 0xde, 0x75, 0x6b, 0x41, 0x44, 0xde, 0x17, 0x39, 0x6b, 0x01, 0x4a, - 0x2b, 0xb0, 0x73, 0x6b, 0x41, 0x07, 0x22, 0x11, 0x25, 0x48, 0x25, 0x3b, - 0x5e, 0x6b, 0x01, 0xb4, 0x01, 0xff, 0x02, 0x92, 0x01, 0x06, 0x48, 0xba, - 0xc7, 0x61, 0x6b, 0x41, 0x80, 0x04, 0xf3, 0x5b, 0x6b, 0x41, 0x48, 0x92, - 0xc1, 0x60, 0x6b, 0x01, 0x49, 0x8c, 0x7b, 0x5d, 0x6b, 0x41, 0x49, 0x24, - 0x3b, 0x5f, 0x6b, 0x01, 0xf3, 0x5c, 0x6b, 0x41, 0x43, 0xce, 0xc8, 0x35, - 0x6b, 0x01, 0xab, 0x1b, 0xb3, 0x0f, 0xb4, 0x01, 0xff, 0x43, 0x52, 0xb0, - 0x36, 0x6b, 0x01, 0x42, 0x3d, 0x01, 0x30, 0x6b, 0x41, 0xef, 0x31, 0x6b, - 0x01, 0x43, 0x61, 0x74, 0x34, 0x6b, 0x41, 0x42, 0xed, 0x00, 0x32, 0x6b, - 0x01, 0x43, 0x9f, 0x4a, 0x33, 0x6b, 0x41, 0x45, 0xc3, 0x0a, 0x58, 0x6b, - 0x01, 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0x59, 0x6b, 0x01, 0x43, 0xbf, 0x0a, - 0x51, 0x6b, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xa1, 0x1d, 0x50, 0x6b, - 0x41, 0x44, 0x25, 0x01, 0x53, 0x6b, 0x01, 0x42, 0x15, 0x02, 0x52, 0x6b, - 0x41, 0x44, 0x27, 0x1d, 0x57, 0x6b, 0x01, 0x42, 0x60, 0x25, 0x56, 0x6b, - 0x41, 0x43, 0xa7, 0x05, 0x55, 0x6b, 0x01, 0x43, 0xcb, 0x06, 0x54, 0x6b, - 0x41, 0x09, 0xd7, 0xb8, 0x86, 0x01, 0x09, 0x58, 0x32, 0x01, 0xff, 0x42, - 0xd7, 0x23, 0x2d, 0x6b, 0x01, 0xa3, 0x6d, 0xa8, 0x59, 0x43, 0xd6, 0x23, - 0x1e, 0x6b, 0x01, 0x43, 0xfa, 0xdd, 0x26, 0x6b, 0x01, 0xae, 0x24, 0x45, - 0xc9, 0xe6, 0x2a, 0x6b, 0x01, 0x44, 0xea, 0xee, 0x23, 0x6b, 0x01, 0x43, - 0x09, 0x57, 0x21, 0x6b, 0x01, 0x43, 0x68, 0xf1, 0x1c, 0x6b, 0x01, 0x43, - 0x80, 0xf1, 0x2e, 0x6b, 0x01, 0x43, 0x67, 0x7f, 0x24, 0x6b, 0x41, 0x42, - 0xd7, 0x23, 0x2c, 0x6b, 0x01, 0x44, 0x2a, 0xec, 0x28, 0x6b, 0x01, 0x43, - 0x74, 0xcc, 0x22, 0x6b, 0x01, 0x43, 0xd6, 0x23, 0x20, 0x6b, 0x01, 0xb4, - 0x01, 0xff, 0x43, 0x6a, 0x7c, 0x2b, 0x6b, 0x01, 0x43, 0xef, 0x8f, 0x1d, - 0x6b, 0x41, 0x42, 0xd7, 0x23, 0x1f, 0x6b, 0x01, 0x43, 0xd6, 0x23, 0x25, - 0x6b, 0x01, 0x43, 0x06, 0x5b, 0x29, 0x6b, 0x41, 0x42, 0xd7, 0x23, 0x2f, - 0x6b, 0x01, 0x43, 0x6a, 0x7c, 0x27, 0x6b, 0x41, 0x43, 0xed, 0xf0, 0x8b, - 0x6b, 0x01, 0x02, 0x22, 0x00, 0x6e, 0xab, 0x5a, 0xac, 0x4c, 0x44, 0x02, - 0xee, 0x84, 0x6b, 0x01, 0x44, 0xc6, 0xee, 0x87, 0x6b, 0x01, 0xb4, 0x23, - 0xb6, 0x15, 0x45, 0x4e, 0xe9, 0x81, 0x6b, 0x01, 0xb9, 0x01, 0xff, 0x42, - 0x35, 0x22, 0x8c, 0x6b, 0x01, 0x43, 0xdb, 0xf0, 0x7e, 0x6b, 0x41, 0x42, - 0x35, 0x22, 0x8a, 0x6b, 0x01, 0x42, 0xc2, 0x02, 0x8f, 0x6b, 0x41, 0x43, - 0xfc, 0xf0, 0x85, 0x6b, 0x01, 0xb3, 0x01, 0xff, 0x42, 0x5c, 0x00, 0x86, - 0x6b, 0x01, 0x44, 0x76, 0xb1, 0x7d, 0x6b, 0x01, 0x42, 0xfa, 0x38, 0x8d, - 0x6b, 0x41, 0x43, 0x99, 0xf0, 0x80, 0x6b, 0x01, 0x42, 0x34, 0x03, 0x7f, - 0x6b, 0x41, 0x43, 0xe3, 0x8a, 0x88, 0x6b, 0x01, 0x42, 0x69, 0x05, 0x82, - 0x6b, 0x01, 0x42, 0xc1, 0x5a, 0x8e, 0x6b, 0x41, 0xed, 0x89, 0x6b, 0x01, - 0x42, 0xc2, 0x02, 0x83, 0x6b, 0x41, 0xe5, 0xcf, 0xf5, 0x81, 0x06, 0x43, - 0xd2, 0x7e, 0xd4, 0xf6, 0x41, 0x80, 0x08, 0xf2, 0xdf, 0xf4, 0x01, 0xf3, - 0xd0, 0xf5, 0x41, 0x49, 0x7c, 0xb6, 0xc4, 0xf4, 0x01, 0x06, 0x9f, 0x04, - 0x01, 0xff, 0x4b, 0x7e, 0x9b, 0xdf, 0xf5, 0x01, 0x43, 0x24, 0x0b, 0xc3, - 0xf4, 0x41, 0xa2, 0xaf, 0x2e, 0xa3, 0xcb, 0x2d, 0x43, 0xa0, 0x0a, 0x62, - 0xf3, 0x01, 0x4e, 0x68, 0x76, 0xe2, 0xf3, 0x01, 0xa7, 0xf2, 0x2b, 0x47, - 0x7b, 0xc6, 0x26, 0x21, 0x00, 0x47, 0x15, 0xcf, 0xe2, 0xf6, 0x01, 0x4b, - 0x6a, 0x91, 0x4c, 0xf4, 0x01, 0xac, 0xd1, 0x12, 0x48, 0xa3, 0xba, 0x49, - 0xf5, 0x01, 0xae, 0xf9, 0x11, 0xb0, 0xc8, 0x10, 0xb2, 0xb3, 0x0b, 0xb3, - 0xfd, 0x05, 0x02, 0xc3, 0x05, 0xab, 0x02, 0xb5, 0x46, 0x03, 0x32, 0x00, - 0x10, 0x42, 0x6a, 0x03, 0x89, 0xf9, 0x01, 0xf8, 0x02, 0xf4, 0x01, 0x45, - 0x67, 0xe9, 0xaa, 0xf9, 0x41, 0x4b, 0xa2, 0x9a, 0x75, 0xf9, 0x01, 0xac, - 0x01, 0xff, 0x42, 0xba, 0x05, 0xd7, 0xf5, 0x81, 0x06, 0x43, 0xc3, 0x07, - 0x3e, 0x20, 0x40, 0x05, 0x45, 0x2f, 0x01, 0xff, 0x4d, 0xdb, 0x56, 0xbc, - 0x2b, 0x00, 0x06, 0xad, 0x02, 0x01, 0xff, 0x51, 0xd7, 0x56, 0xbb, 0x2b, - 0x00, 0x47, 0xe1, 0x56, 0xba, 0x2b, 0x40, 0x48, 0xf2, 0xc5, 0x25, 0x21, - 0x00, 0xb4, 0x01, 0xff, 0x48, 0xca, 0xc1, 0xe4, 0xf4, 0x01, 0x06, 0xcc, - 0x10, 0x01, 0xff, 0x4a, 0x53, 0x2b, 0x2d, 0x27, 0x00, 0x06, 0xc4, 0x06, - 0x82, 0x01, 0x4b, 0x9f, 0x5f, 0x19, 0x27, 0x00, 0x07, 0xb3, 0x05, 0x06, - 0x4a, 0x96, 0x2d, 0x9d, 0x26, 0x40, 0x0e, 0xba, 0x05, 0x06, 0x44, 0x47, - 0x10, 0x1f, 0x27, 0x40, 0xe1, 0xd6, 0xcc, 0x01, 0xe2, 0xd7, 0xcc, 0x01, - 0xe3, 0xd8, 0xcc, 0x01, 0xe4, 0xd9, 0xcc, 0x01, 0xe5, 0xda, 0xcc, 0x01, - 0xe6, 0xdb, 0xcc, 0x01, 0xe7, 0xdc, 0xcc, 0x01, 0xe8, 0xdd, 0xcc, 0x01, - 0xe9, 0xde, 0xcc, 0x01, 0xea, 0xdf, 0xcc, 0x01, 0xeb, 0xe0, 0xcc, 0x01, - 0xec, 0xe1, 0xcc, 0x01, 0xed, 0xe2, 0xcc, 0x01, 0xee, 0xe3, 0xcc, 0x01, - 0xef, 0xe4, 0xcc, 0x01, 0xf0, 0xe5, 0xcc, 0x01, 0xf1, 0xe6, 0xcc, 0x01, - 0xf2, 0xe7, 0xcc, 0x01, 0xf3, 0xe8, 0xcc, 0x01, 0xf4, 0xe9, 0xcc, 0x01, - 0xf5, 0xea, 0xcc, 0x01, 0xf6, 0xeb, 0xcc, 0x01, 0xf7, 0xec, 0xcc, 0x01, - 0xf8, 0xed, 0xcc, 0x01, 0xf9, 0xee, 0xcc, 0x01, 0xfa, 0xef, 0xcc, 0x41, - 0x45, 0xc3, 0x0a, 0xf8, 0xcc, 0x01, 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0xf9, - 0xcc, 0x01, 0x43, 0xbf, 0x0a, 0xf1, 0xcc, 0x01, 0xb3, 0x14, 0xb4, 0x06, - 0x44, 0xa1, 0x1d, 0xf0, 0xcc, 0x41, 0x44, 0x25, 0x01, 0xf3, 0xcc, 0x01, - 0x42, 0x15, 0x02, 0xf2, 0xcc, 0x41, 0x44, 0x27, 0x1d, 0xf7, 0xcc, 0x01, - 0x42, 0x60, 0x25, 0xf6, 0xcc, 0x41, 0x43, 0xa7, 0x05, 0xf5, 0xcc, 0x01, - 0x43, 0xcb, 0x06, 0xf4, 0xcc, 0x41, 0x42, 0x33, 0x00, 0xa6, 0xf9, 0x01, - 0x0b, 0x80, 0x9e, 0x01, 0xff, 0x11, 0xb5, 0x56, 0xe4, 0x02, 0x0d, 0xb3, - 0x58, 0xd3, 0x02, 0x48, 0x92, 0xc5, 0x2e, 0xed, 0x01, 0x07, 0x2f, 0x39, - 0x01, 0xff, 0x45, 0xc3, 0x0a, 0x08, 0xed, 0x81, 0xa7, 0x02, 0xa6, 0xd9, - 0x01, 0x44, 0x46, 0x2a, 0x09, 0xed, 0x81, 0xb6, 0x01, 0x43, 0xbf, 0x0a, - 0x01, 0xed, 0x81, 0x9f, 0x01, 0xb3, 0x59, 0xb4, 0x01, 0xff, 0x42, 0x92, - 0x01, 0x0a, 0xed, 0x81, 0x49, 0xa8, 0x24, 0xb7, 0x01, 0xff, 0x44, 0x29, - 0x1d, 0x0b, 0xed, 0x81, 0x14, 0xef, 0x02, 0xed, 0xc1, 0x00, 0x80, 0x01, - 0xff, 0x47, 0x22, 0x11, 0x14, 0xed, 0x01, 0x48, 0xd5, 0x5c, 0x1d, 0xed, - 0x41, 0x49, 0xd4, 0x5c, 0x26, 0xed, 0x41, 0x44, 0x2c, 0x11, 0x0c, 0xed, - 0x81, 0x16, 0x43, 0x26, 0x01, 0x03, 0xed, 0xc1, 0x00, 0x80, 0x01, 0xff, - 0x47, 0x22, 0x11, 0x15, 0xed, 0x01, 0x48, 0xd5, 0x5c, 0x1e, 0xed, 0x41, - 0x49, 0xd4, 0x5c, 0x27, 0xed, 0x41, 0x49, 0xd4, 0x5c, 0x25, 0xed, 0x41, - 0x44, 0x27, 0x1d, 0x07, 0xed, 0x81, 0x22, 0x42, 0x60, 0x25, 0x06, 0xed, - 0xc1, 0x00, 0x80, 0x0d, 0x42, 0x2e, 0x11, 0x0f, 0xed, 0xc1, 0x00, 0x49, - 0xd4, 0x5c, 0x2a, 0xed, 0x41, 0x47, 0x22, 0x11, 0x18, 0xed, 0x01, 0x48, - 0xd5, 0x5c, 0x21, 0xed, 0x41, 0x80, 0x0d, 0x42, 0x2e, 0x11, 0x10, 0xed, - 0xc1, 0x00, 0x49, 0xd4, 0x5c, 0x2b, 0xed, 0x41, 0x47, 0x22, 0x11, 0x19, - 0xed, 0x01, 0x48, 0xd5, 0x5c, 0x22, 0xed, 0x41, 0x80, 0x01, 0xff, 0x47, - 0x22, 0x11, 0x13, 0xed, 0x01, 0x48, 0xd5, 0x5c, 0x1c, 0xed, 0x41, 0x80, - 0x0d, 0x42, 0x2e, 0x11, 0x12, 0xed, 0xc1, 0x00, 0x49, 0xd4, 0x5c, 0x2d, - 0xed, 0x41, 0x47, 0x22, 0x11, 0x1b, 0xed, 0x01, 0x48, 0xd5, 0x5c, 0x24, - 0xed, 0x41, 0xa9, 0x26, 0xaf, 0x01, 0xff, 0x43, 0x2d, 0x11, 0x0d, 0xed, - 0x81, 0x16, 0x42, 0x42, 0x00, 0x04, 0xed, 0xc1, 0x00, 0x80, 0x01, 0xff, - 0x47, 0x22, 0x11, 0x16, 0xed, 0x01, 0x48, 0xd5, 0x5c, 0x1f, 0xed, 0x41, - 0x49, 0xd4, 0x5c, 0x28, 0xed, 0x41, 0x43, 0x09, 0x4c, 0x0e, 0xed, 0x81, - 0x16, 0x42, 0x32, 0x00, 0x05, 0xed, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x47, - 0x22, 0x11, 0x17, 0xed, 0x01, 0x48, 0xd5, 0x5c, 0x20, 0xed, 0x41, 0x49, - 0xd4, 0x5c, 0x29, 0xed, 0x41, 0x80, 0x0b, 0xf9, 0x11, 0xed, 0xc1, 0x00, - 0x49, 0xd4, 0x5c, 0x2c, 0xed, 0x41, 0x47, 0x22, 0x11, 0x1a, 0xed, 0x01, - 0x48, 0xd5, 0x5c, 0x23, 0xed, 0x41, 0x44, 0x22, 0x00, 0x3c, 0xed, 0x01, - 0x45, 0xdc, 0xdc, 0x3d, 0xed, 0x41, 0x45, 0xc3, 0x0a, 0x35, 0xed, 0x01, - 0xa6, 0x3e, 0x44, 0x46, 0x2a, 0x36, 0xed, 0x01, 0xb3, 0x23, 0xb4, 0x01, - 0xff, 0x42, 0x92, 0x01, 0x37, 0xed, 0x81, 0x13, 0x44, 0x25, 0x01, 0x30, - 0xed, 0x01, 0x42, 0x15, 0x02, 0x2f, 0xed, 0xc1, 0x00, 0x49, 0xd4, 0x5c, - 0x3a, 0xed, 0x41, 0x49, 0xd4, 0x5c, 0x3b, 0xed, 0x41, 0x44, 0x27, 0x1d, - 0x34, 0xed, 0x01, 0x42, 0x60, 0x25, 0x33, 0xed, 0xc1, 0x00, 0x48, 0x21, - 0x11, 0x39, 0xed, 0x41, 0x43, 0xa7, 0x05, 0x32, 0xed, 0x01, 0x43, 0xcb, - 0x06, 0x31, 0xed, 0xc1, 0x00, 0x48, 0x21, 0x11, 0x38, 0xed, 0x41, 0x04, - 0x15, 0x42, 0xfe, 0x01, 0x06, 0x02, 0xdb, 0x01, 0xff, 0x06, 0xc4, 0x06, - 0xb2, 0x01, 0x07, 0xc1, 0x05, 0x01, 0xff, 0xe1, 0x96, 0x04, 0x81, 0x9d, - 0x01, 0x42, 0x16, 0x00, 0x81, 0x04, 0x01, 0x44, 0x26, 0xec, 0x8b, 0x04, - 0x01, 0xa4, 0x82, 0x01, 0xe5, 0x97, 0x04, 0x81, 0x79, 0x42, 0xe1, 0x07, - 0x8d, 0x04, 0x01, 0x42, 0x24, 0x02, 0x8c, 0x04, 0x01, 0x42, 0x22, 0x00, - 0x94, 0x04, 0x01, 0xe9, 0x98, 0x04, 0x01, 0x42, 0xbd, 0x26, 0x83, 0x04, - 0x01, 0xab, 0x4f, 0x44, 0xc8, 0xeb, 0x90, 0x04, 0x01, 0x44, 0xf2, 0xed, - 0x91, 0x04, 0x01, 0x44, 0x66, 0xee, 0x92, 0x04, 0x01, 0xef, 0x99, 0x04, - 0x81, 0x34, 0x44, 0xf6, 0xe6, 0x8e, 0x04, 0x01, 0x42, 0x71, 0x00, 0x87, - 0x04, 0x01, 0xb3, 0x1c, 0x42, 0x12, 0x00, 0x82, 0x04, 0x01, 0xf5, 0x9a, - 0x04, 0x01, 0x43, 0xc0, 0x88, 0x93, 0x04, 0x01, 0x42, 0x4c, 0x26, 0x84, - 0x04, 0x01, 0x42, 0x34, 0x22, 0x95, 0x04, 0x41, 0xe1, 0x88, 0x04, 0x01, - 0x44, 0x06, 0xed, 0x89, 0x04, 0x41, 0xef, 0x9d, 0x04, 0x41, 0x43, 0x94, - 0xc0, 0x8f, 0x04, 0x01, 0x42, 0x22, 0x00, 0x85, 0x04, 0x41, 0xe5, 0x9c, - 0x04, 0x41, 0x43, 0xde, 0x12, 0x86, 0x04, 0x01, 0x42, 0x22, 0x00, 0x8a, - 0x04, 0x41, 0xe1, 0x9b, 0x04, 0x01, 0x43, 0x68, 0x00, 0x80, 0x04, 0x41, - 0x45, 0xc3, 0x0a, 0xa8, 0x04, 0x01, 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0xa9, - 0x04, 0x01, 0x43, 0xbf, 0x0a, 0xa1, 0x04, 0x01, 0xb3, 0x14, 0xb4, 0x06, - 0x44, 0xa1, 0x1d, 0xa0, 0x04, 0x41, 0x44, 0x25, 0x01, 0xa3, 0x04, 0x01, - 0x42, 0x15, 0x02, 0xa2, 0x04, 0x41, 0x44, 0x27, 0x1d, 0xa7, 0x04, 0x01, - 0x42, 0x60, 0x25, 0xa6, 0x04, 0x41, 0x43, 0xa7, 0x05, 0xa5, 0x04, 0x01, - 0x43, 0xcb, 0x06, 0xa4, 0x04, 0x41, 0x0f, 0xb9, 0x05, 0xd8, 0x01, 0x0d, - 0x4b, 0x08, 0x01, 0xff, 0xe1, 0xd8, 0x04, 0x81, 0xc0, 0x01, 0x43, 0x14, - 0x09, 0xdc, 0x04, 0x01, 0x43, 0xef, 0x1f, 0xdd, 0x04, 0x01, 0x43, 0x9e, - 0x4a, 0xf5, 0x04, 0x01, 0xe5, 0xdf, 0x04, 0x81, 0x81, 0x01, 0x43, 0xf3, - 0x99, 0xf9, 0x04, 0x01, 0xa8, 0x6f, 0xe9, 0xe3, 0x04, 0x01, 0xab, 0x59, - 0x42, 0x74, 0x00, 0xe7, 0x04, 0x01, 0x42, 0x6c, 0x00, 0xe8, 0x04, 0x01, - 0x42, 0xff, 0x04, 0xe9, 0x04, 0x01, 0xef, 0xea, 0x04, 0x81, 0x3c, 0x42, - 0x6c, 0x09, 0xec, 0x04, 0x01, 0xb3, 0x2a, 0xb4, 0x17, 0xf5, 0xf6, 0x04, - 0x01, 0x42, 0xa9, 0x01, 0xf7, 0x04, 0x01, 0xba, 0x01, 0xff, 0xe1, 0xfa, - 0x04, 0x01, 0x42, 0x22, 0x00, 0xfb, 0x04, 0x41, 0xe1, 0xf0, 0x04, 0x01, - 0xb3, 0x01, 0xff, 0xe1, 0xf2, 0x04, 0x01, 0x42, 0x22, 0x00, 0xf4, 0x04, - 0x41, 0xe1, 0xee, 0x04, 0x01, 0x42, 0x22, 0x00, 0xef, 0x04, 0x41, 0x42, - 0x9e, 0x01, 0xeb, 0x04, 0x41, 0xe1, 0xe4, 0x04, 0x01, 0x42, 0x22, 0x00, - 0xf8, 0x04, 0x01, 0x42, 0x34, 0x22, 0xe6, 0x04, 0x41, 0xe1, 0xe1, 0x04, - 0x01, 0x42, 0x34, 0x22, 0xe2, 0x04, 0x41, 0xa8, 0x06, 0x42, 0x9e, 0x01, - 0xe0, 0x04, 0x41, 0x43, 0xef, 0x1f, 0xde, 0x04, 0x01, 0x42, 0x1b, 0x02, - 0xe5, 0x04, 0x01, 0x42, 0x6c, 0x09, 0xed, 0x04, 0x01, 0xb4, 0x01, 0xff, - 0xe1, 0xf1, 0x04, 0x01, 0x42, 0x15, 0x06, 0xf3, 0x04, 0x41, 0xe8, 0xdb, - 0x04, 0x01, 0xe9, 0xd9, 0x04, 0xc1, 0x00, 0xee, 0xda, 0x04, 0x41, 0xe1, - 0xb0, 0x04, 0x81, 0xc0, 0x01, 0x43, 0x14, 0x09, 0xb4, 0x04, 0x01, 0x43, - 0xef, 0x1f, 0xb5, 0x04, 0x01, 0x43, 0x9e, 0x4a, 0xcd, 0x04, 0x01, 0xe5, - 0xb7, 0x04, 0x81, 0x81, 0x01, 0x43, 0xf3, 0x99, 0xd1, 0x04, 0x01, 0xa8, - 0x6f, 0xe9, 0xbb, 0x04, 0x01, 0xab, 0x59, 0x42, 0x74, 0x00, 0xbf, 0x04, - 0x01, 0x42, 0x6c, 0x00, 0xc0, 0x04, 0x01, 0x42, 0xff, 0x04, 0xc1, 0x04, - 0x01, 0xef, 0xc2, 0x04, 0x81, 0x3c, 0x42, 0x6c, 0x09, 0xc4, 0x04, 0x01, - 0xb3, 0x2a, 0xb4, 0x17, 0xf5, 0xce, 0x04, 0x01, 0x42, 0xa9, 0x01, 0xcf, - 0x04, 0x01, 0xba, 0x01, 0xff, 0xe1, 0xd2, 0x04, 0x01, 0x42, 0x22, 0x00, - 0xd3, 0x04, 0x41, 0xe1, 0xc8, 0x04, 0x01, 0xb3, 0x01, 0xff, 0xe1, 0xca, - 0x04, 0x01, 0x42, 0x22, 0x00, 0xcc, 0x04, 0x41, 0xe1, 0xc6, 0x04, 0x01, - 0x42, 0x22, 0x00, 0xc7, 0x04, 0x41, 0x42, 0x9e, 0x01, 0xc3, 0x04, 0x41, - 0xe1, 0xbc, 0x04, 0x01, 0x42, 0x22, 0x00, 0xd0, 0x04, 0x01, 0x42, 0x34, - 0x22, 0xbe, 0x04, 0x41, 0xe1, 0xb9, 0x04, 0x01, 0x42, 0x34, 0x22, 0xba, - 0x04, 0x41, 0xa8, 0x06, 0x42, 0x9e, 0x01, 0xb8, 0x04, 0x41, 0x43, 0xef, - 0x1f, 0xb6, 0x04, 0x01, 0x42, 0x1b, 0x02, 0xbd, 0x04, 0x01, 0x42, 0x6c, - 0x09, 0xc5, 0x04, 0x01, 0xb4, 0x01, 0xff, 0xe1, 0xc9, 0x04, 0x01, 0x42, - 0x15, 0x06, 0xcb, 0x04, 0x41, 0xe8, 0xb3, 0x04, 0x01, 0xe9, 0xb1, 0x04, - 0xc1, 0x00, 0xee, 0xb2, 0x04, 0x41, 0x50, 0x2a, 0x5f, 0xc7, 0x27, 0x00, - 0x03, 0x1c, 0x01, 0xf1, 0x04, 0x43, 0xa6, 0x15, 0x7f, 0xf7, 0x01, 0xa9, - 0x21, 0x05, 0xa7, 0x11, 0x11, 0x03, 0xff, 0x07, 0x01, 0xff, 0x49, 0x89, - 0xb5, 0x26, 0x26, 0x00, 0x55, 0x01, 0x21, 0x42, 0xcc, 0x41, 0x50, 0xf7, - 0x23, 0x3e, 0xfd, 0x00, 0x51, 0x4a, 0x21, 0x3f, 0xfd, 0x40, 0x48, 0xfc, - 0x2e, 0xb6, 0x22, 0x00, 0x03, 0xd1, 0x31, 0x01, 0xff, 0xa1, 0xae, 0x04, - 0x06, 0xc4, 0x06, 0xe7, 0x03, 0x09, 0xb3, 0x58, 0xb5, 0x03, 0x46, 0x2a, - 0xda, 0x70, 0x0b, 0x00, 0x07, 0xc1, 0x05, 0x79, 0x05, 0x2f, 0x03, 0x44, - 0x0b, 0xd1, 0x75, 0x01, 0xff, 0xa1, 0x31, 0xe5, 0x47, 0x0b, 0x00, 0xe9, - 0x3f, 0x0b, 0x80, 0x24, 0xef, 0x4b, 0x0b, 0x00, 0xf5, 0x41, 0x0b, 0x80, - 0x17, 0x08, 0x9b, 0xbe, 0x01, 0xff, 0xec, 0x62, 0x0b, 0x80, 0x09, 0xf2, - 0x43, 0x0b, 0xc0, 0x00, 0xf2, 0x44, 0x0b, 0x40, 0xec, 0x63, 0x0b, 0x40, - 0xf5, 0x42, 0x0b, 0x40, 0xe9, 0x40, 0x0b, 0x40, 0xe1, 0x3e, 0x0b, 0x00, - 0xe9, 0x48, 0x0b, 0x00, 0xf5, 0x4c, 0x0b, 0x40, 0xa1, 0x23, 0x4b, 0x4f, - 0x23, 0x01, 0x0b, 0x00, 0x45, 0x5a, 0x3e, 0x3c, 0x0b, 0x00, 0x48, 0xb8, - 0x88, 0x55, 0x0b, 0x00, 0x02, 0x02, 0x00, 0x01, 0xff, 0x44, 0x5d, 0x23, - 0x4d, 0x0b, 0x00, 0x45, 0xa3, 0x4a, 0x03, 0x0b, 0x40, 0x47, 0xd1, 0x15, - 0x02, 0x0b, 0x00, 0x47, 0xf2, 0x86, 0x3d, 0x0b, 0x40, 0xe1, 0x05, 0x0b, - 0x80, 0xa0, 0x02, 0xa2, 0x93, 0x02, 0xa3, 0x86, 0x02, 0xa4, 0xed, 0x01, - 0xe5, 0x0f, 0x0b, 0x00, 0xa7, 0xdc, 0x01, 0x42, 0x22, 0x00, 0x39, 0x0b, - 0x00, 0xe9, 0x07, 0x0b, 0x80, 0xcc, 0x01, 0xaa, 0xbf, 0x01, 0xab, 0xb2, - 0x01, 0xac, 0xa5, 0x01, 0x42, 0x6c, 0x00, 0x2e, 0x0b, 0x00, 0xae, 0x86, - 0x01, 0xef, 0x13, 0x0b, 0x00, 0xb0, 0x76, 0xb2, 0x64, 0xb3, 0x52, 0xb4, - 0x39, 0xf5, 0x09, 0x0b, 0x80, 0x30, 0xb6, 0x13, 0x42, 0xa9, 0x01, 0x71, - 0x0b, 0x00, 0xb9, 0x01, 0xff, 0xe1, 0x2f, 0x0b, 0x00, 0x42, 0x34, 0x22, - 0x5f, 0x0b, 0x40, 0xe1, 0x35, 0x0b, 0x00, 0x07, 0x9c, 0xbe, 0x01, 0xff, - 0xec, 0x0c, 0x0b, 0x80, 0x09, 0xf2, 0x0b, 0x0b, 0xc0, 0x00, 0xf2, 0x60, - 0x0b, 0x40, 0xec, 0x61, 0x0b, 0x40, 0xf5, 0x0a, 0x0b, 0x40, 0xe1, 0x24, - 0x0b, 0x00, 0x42, 0x22, 0x00, 0x25, 0x0b, 0x00, 0xb4, 0x01, 0xff, 0xe1, - 0x1f, 0x0b, 0x00, 0x42, 0x22, 0x00, 0x20, 0x0b, 0x40, 0xe1, 0x38, 0x0b, - 0x00, 0x42, 0x22, 0x00, 0x36, 0x0b, 0x00, 0x42, 0x15, 0x06, 0x37, 0x0b, - 0x40, 0xe1, 0x30, 0x0b, 0x00, 0x42, 0x22, 0x00, 0x5d, 0x0b, 0x00, 0x42, - 0x71, 0x00, 0x5c, 0x0b, 0x40, 0xe1, 0x2a, 0x0b, 0x00, 0x42, 0x22, 0x00, - 0x2b, 0x0b, 0x40, 0xe1, 0x28, 0x0b, 0x00, 0x42, 0x24, 0x02, 0x19, 0x0b, - 0x00, 0x42, 0xff, 0x04, 0x23, 0x0b, 0x00, 0x42, 0x34, 0x22, 0x1e, 0x0b, - 0x40, 0xe1, 0x32, 0x0b, 0x00, 0x42, 0x74, 0x00, 0x33, 0x0b, 0x40, 0xe1, - 0x15, 0x0b, 0x00, 0x42, 0x22, 0x00, 0x16, 0x0b, 0x40, 0xe1, 0x1c, 0x0b, - 0x00, 0x42, 0x22, 0x00, 0x1d, 0x0b, 0x40, 0xe9, 0x08, 0x0b, 0x40, 0xe1, - 0x17, 0x0b, 0x00, 0x42, 0x22, 0x00, 0x18, 0x0b, 0x40, 0xe1, 0x26, 0x0b, - 0x00, 0xa4, 0x06, 0x42, 0x22, 0x00, 0x27, 0x0b, 0x40, 0xe1, 0x21, 0x0b, - 0x00, 0x42, 0x22, 0x00, 0x22, 0x0b, 0x40, 0xe1, 0x1a, 0x0b, 0x00, 0x42, - 0x22, 0x00, 0x1b, 0x0b, 0x40, 0xe1, 0x2c, 0x0b, 0x00, 0x42, 0x22, 0x00, - 0x2d, 0x0b, 0x40, 0xe1, 0x06, 0x0b, 0x00, 0xe9, 0x10, 0x0b, 0x00, 0xf5, - 0x14, 0x0b, 0x40, 0x04, 0xbf, 0x0a, 0x11, 0x06, 0x24, 0x01, 0x01, 0xff, - 0x48, 0x2a, 0x01, 0x74, 0x0b, 0x00, 0x4a, 0xc3, 0xae, 0x77, 0x0b, 0x40, - 0x46, 0xc3, 0x0a, 0x76, 0x0b, 0x00, 0x44, 0x22, 0x00, 0x73, 0x0b, 0x00, - 0x47, 0x2a, 0x01, 0x72, 0x0b, 0x00, 0x49, 0x5f, 0x25, 0x75, 0x0b, 0x40, - 0x45, 0xc3, 0x0a, 0x6e, 0x0b, 0x00, 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0x6f, - 0x0b, 0x00, 0x43, 0xbf, 0x0a, 0x67, 0x0b, 0x00, 0xb3, 0x14, 0xb4, 0x06, - 0x44, 0xa1, 0x1d, 0x66, 0x0b, 0x40, 0x44, 0x25, 0x01, 0x69, 0x0b, 0x00, - 0x42, 0x15, 0x02, 0x68, 0x0b, 0x40, 0x44, 0x27, 0x1d, 0x6d, 0x0b, 0x00, - 0x42, 0x60, 0x25, 0x6c, 0x0b, 0x40, 0x43, 0xa7, 0x05, 0x6b, 0x0b, 0x00, - 0x43, 0xcb, 0x06, 0x6a, 0x0b, 0x40, 0x4d, 0x39, 0x74, 0x56, 0x0b, 0x00, - 0x4d, 0x9b, 0x74, 0x57, 0x0b, 0x40, 0x02, 0x60, 0x00, 0x06, 0x44, 0x9e, - 0xef, 0xa7, 0xf9, 0x41, 0x44, 0x0e, 0xec, 0xd9, 0xf4, 0x01, 0x45, 0x24, - 0x21, 0xe1, 0xf9, 0x41, 0xa5, 0x24, 0x47, 0xc1, 0xce, 0xce, 0x26, 0x00, - 0x48, 0xa0, 0x16, 0x0d, 0x26, 0x00, 0x02, 0x35, 0x00, 0x01, 0xff, 0x48, - 0xf2, 0xc1, 0xbf, 0xf4, 0x81, 0x06, 0x46, 0xce, 0xdb, 0x25, 0x23, 0x40, - 0x45, 0xae, 0xde, 0xb8, 0xf5, 0x41, 0xae, 0x06, 0x55, 0xc1, 0x3c, 0x9d, - 0x00, 0x40, 0x80, 0x19, 0x8d, 0x01, 0xff, 0x0f, 0x0f, 0x6a, 0x06, 0x59, - 0xf1, 0x24, 0xbe, 0x27, 0x40, 0x4d, 0xe5, 0x81, 0x8f, 0x23, 0x00, 0x4d, - 0x37, 0x83, 0x90, 0x23, 0x40, 0x02, 0x5d, 0x00, 0x57, 0x07, 0x73, 0x02, - 0x3b, 0xa6, 0x2d, 0x4a, 0x22, 0x77, 0x50, 0xf4, 0x01, 0x44, 0x34, 0x01, - 0x13, 0xf5, 0x01, 0x0d, 0xc6, 0x83, 0x11, 0x02, 0x6f, 0x00, 0x01, 0xff, - 0x44, 0x4c, 0x12, 0xc3, 0x27, 0x00, 0x46, 0x59, 0x35, 0xc4, 0x27, 0x40, - 0x4c, 0xc5, 0x8f, 0xed, 0xf4, 0x01, 0x4b, 0x88, 0x9f, 0xec, 0xf4, 0x41, - 0x4a, 0x73, 0xa9, 0xc2, 0xf4, 0x01, 0x45, 0x40, 0x64, 0xc1, 0xf5, 0x41, - 0x48, 0xed, 0x0c, 0x32, 0x27, 0x00, 0x4a, 0x53, 0x2b, 0x2b, 0x27, 0x00, - 0x45, 0x46, 0x10, 0x1b, 0x27, 0x00, 0x58, 0xcd, 0x2a, 0x3c, 0x27, 0x40, - 0x42, 0x2a, 0x05, 0xd6, 0xf4, 0x01, 0xf8, 0x23, 0x24, 0x40, 0x72, 0xa7, - 0x00, 0x1b, 0xf5, 0x01, 0x07, 0x39, 0xcd, 0x27, 0xa5, 0x06, 0x43, 0xb5, - 0x00, 0xc5, 0xf9, 0x41, 0x80, 0x06, 0x4f, 0xb6, 0x68, 0x71, 0xfa, 0x41, - 0x4c, 0x45, 0x8b, 0xaf, 0xf5, 0x01, 0x04, 0xb4, 0x0b, 0x01, 0xff, 0x46, - 0x2e, 0x7c, 0x24, 0x20, 0x00, 0x59, 0xe3, 0x14, 0x2b, 0x2e, 0x40, 0x4a, - 0xdb, 0xa5, 0x98, 0xf6, 0x01, 0x43, 0xf5, 0x26, 0x8d, 0xf6, 0x01, 0x4b, - 0x08, 0x9a, 0xf1, 0xf6, 0x01, 0x4a, 0x51, 0xad, 0x94, 0xf6, 0x01, 0x44, - 0x82, 0xcc, 0x96, 0xf6, 0x41, 0x80, 0xf5, 0x14, 0xa4, 0x06, 0x43, 0xa7, + 0x1a, 0x41, 0x56, 0xbb, 0x35, 0x17, 0x21, 0x00, 0x03, 0x53, 0x00, 0x01, + 0xff, 0x05, 0xad, 0x23, 0x5c, 0x05, 0xbe, 0x1a, 0x01, 0xff, 0x45, 0xce, + 0x00, 0x99, 0x21, 0x80, 0x3b, 0x4b, 0xa5, 0x99, 0x0b, 0x2b, 0x00, 0x4c, + 0x2f, 0x8e, 0xd9, 0x21, 0x00, 0x09, 0x9c, 0x01, 0x19, 0x50, 0xe6, 0x66, + 0x57, 0xf8, 0x01, 0x55, 0x01, 0x02, 0x69, 0x2b, 0x80, 0x06, 0x4b, 0x49, + 0x10, 0x03, 0x2b, 0x40, 0x47, 0xd0, 0x14, 0x79, 0x2b, 0x40, 0x43, 0x7a, + 0xd0, 0x61, 0xf6, 0x01, 0x44, 0x39, 0x51, 0x51, 0xf6, 0x01, 0x49, 0x10, + 0xc1, 0x59, 0xf6, 0x41, 0x80, 0x01, 0xff, 0x54, 0x64, 0x40, 0x2a, 0x29, + 0x00, 0x48, 0x57, 0xb4, 0xbb, 0xf8, 0x01, 0x49, 0xa8, 0x24, 0x26, 0x29, + 0x40, 0x45, 0xce, 0x00, 0x98, 0x21, 0x80, 0x3b, 0x4b, 0xa5, 0x99, 0x0a, + 0x2b, 0x00, 0x4c, 0x2f, 0x8e, 0xd8, 0x21, 0x00, 0x09, 0x9c, 0x01, 0x19, + 0x50, 0xe6, 0x66, 0x56, 0xf8, 0x01, 0x55, 0x01, 0x02, 0x68, 0x2b, 0x80, + 0x06, 0x4b, 0x49, 0x10, 0x02, 0x2b, 0x40, 0x47, 0xd0, 0x14, 0x78, 0x2b, + 0x40, 0x43, 0x7a, 0xd0, 0x63, 0xf6, 0x01, 0x44, 0x39, 0x51, 0x53, 0xf6, + 0x01, 0x49, 0x10, 0xc1, 0x5b, 0xf6, 0x41, 0x80, 0x01, 0xff, 0x54, 0x8c, + 0x40, 0x29, 0x29, 0x00, 0x59, 0x9e, 0x23, 0x2d, 0x29, 0x00, 0x48, 0x57, + 0xb4, 0xba, 0xf8, 0x01, 0x49, 0xde, 0xbf, 0xf2, 0x21, 0x00, 0x49, 0xa8, + 0x24, 0x25, 0x29, 0x40, 0x06, 0xef, 0x06, 0x9d, 0x01, 0x07, 0xec, 0x05, + 0x01, 0xff, 0x42, 0x18, 0x0a, 0xe2, 0x10, 0x01, 0x43, 0x60, 0x4e, 0xd2, + 0x10, 0x01, 0x43, 0x04, 0xf4, 0xd3, 0x10, 0x01, 0x43, 0xcb, 0x2d, 0xd4, + 0x10, 0x01, 0xa5, 0x74, 0x43, 0x6f, 0xbc, 0xd5, 0x10, 0x01, 0x43, 0x26, + 0x21, 0xde, 0x10, 0x01, 0x42, 0xda, 0x2c, 0xe4, 0x10, 0x01, 0x43, 0x56, + 0x19, 0xe0, 0x10, 0x01, 0x43, 0x66, 0xd3, 0xdf, 0x10, 0x01, 0x43, 0x37, + 0x18, 0xd8, 0x10, 0x01, 0x02, 0x6c, 0x00, 0x44, 0xae, 0x30, 0x42, 0xfd, + 0x28, 0xe6, 0x10, 0x01, 0x43, 0xe2, 0x42, 0xdb, 0x10, 0x01, 0x43, 0x3e, + 0x18, 0xdd, 0x10, 0x01, 0x43, 0x86, 0xc6, 0xd0, 0x10, 0x01, 0x43, 0x17, + 0x0a, 0xd1, 0x10, 0x01, 0x42, 0x1c, 0x58, 0xe5, 0x10, 0x01, 0x43, 0x95, + 0xd5, 0xda, 0x10, 0x01, 0x43, 0xab, 0x4a, 0xdc, 0x10, 0x41, 0x42, 0x18, + 0x0a, 0xd9, 0x10, 0x01, 0x43, 0x6f, 0xbc, 0xd7, 0x10, 0x01, 0x43, 0xab, + 0x4a, 0xe1, 0x10, 0x41, 0xe5, 0xe8, 0x10, 0x01, 0xe8, 0xd6, 0x10, 0x41, + 0x42, 0x4e, 0x00, 0xe3, 0x10, 0x01, 0xe8, 0xe7, 0x10, 0x41, 0x45, 0x12, + 0x0b, 0xf8, 0x10, 0x01, 0xa6, 0x2e, 0x44, 0xcf, 0x2a, 0xf9, 0x10, 0x01, + 0x43, 0x0e, 0x0b, 0xf1, 0x10, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0x43, + 0x1e, 0xf0, 0x10, 0x41, 0x44, 0x25, 0x01, 0xf3, 0x10, 0x01, 0x42, 0x15, + 0x02, 0xf2, 0x10, 0x41, 0x44, 0xc9, 0x1d, 0xf7, 0x10, 0x01, 0x42, 0x01, + 0x26, 0xf6, 0x10, 0x41, 0x43, 0xd2, 0x05, 0xf5, 0x10, 0x01, 0x43, 0xf6, + 0x06, 0xf4, 0x10, 0x41, 0x56, 0xb4, 0x24, 0x6a, 0xf6, 0x81, 0x0d, 0x42, + 0xef, 0x02, 0x2f, 0x00, 0xc0, 0x00, 0x4d, 0xe0, 0x7f, 0xf6, 0x29, 0x40, + 0x50, 0x3e, 0x11, 0x6b, 0xf6, 0x41, 0x0a, 0x41, 0x59, 0xda, 0x01, 0x50, + 0xe6, 0x63, 0x45, 0x0f, 0x01, 0x07, 0xec, 0x05, 0x49, 0x07, 0xff, 0x39, + 0x29, 0x0c, 0x6d, 0x16, 0x01, 0xff, 0x4f, 0xad, 0x42, 0x57, 0x0f, 0x01, + 0x54, 0xa8, 0x42, 0x59, 0x0f, 0x01, 0x04, 0x1f, 0x0a, 0x01, 0xff, 0x51, + 0x1f, 0x59, 0x58, 0x0f, 0x01, 0x4d, 0x22, 0x8a, 0x55, 0x0f, 0xc1, 0x00, + 0x4a, 0x26, 0x59, 0x56, 0x0f, 0x41, 0x43, 0x0e, 0x0b, 0x51, 0x0f, 0x81, + 0x0f, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0x52, 0x0f, 0x01, 0x45, 0x7f, + 0x2c, 0x53, 0x0f, 0x41, 0x48, 0x70, 0x11, 0x54, 0x0f, 0x41, 0xa1, 0x79, + 0x44, 0x41, 0xef, 0x31, 0x0f, 0x01, 0x44, 0xc1, 0xef, 0x43, 0x0f, 0x01, + 0x45, 0xdd, 0xaa, 0x32, 0x0f, 0x01, 0x42, 0xb0, 0x01, 0x33, 0x0f, 0x81, + 0x5a, 0x44, 0xcd, 0xf0, 0x38, 0x0f, 0x01, 0xac, 0x46, 0x43, 0xb4, 0x05, + 0x3a, 0x0f, 0x01, 0x43, 0xdc, 0x22, 0x3b, 0x0f, 0x01, 0x42, 0x6f, 0x02, + 0x3e, 0x0f, 0x01, 0x49, 0x76, 0x66, 0x40, 0x0f, 0x01, 0xb3, 0x18, 0x43, + 0xa4, 0xc4, 0x42, 0x0f, 0x01, 0x43, 0x8a, 0x8a, 0x34, 0x0f, 0x01, 0x44, + 0xa1, 0x52, 0x37, 0x0f, 0x01, 0x45, 0x9b, 0x52, 0x35, 0x0f, 0x41, 0xa1, + 0x06, 0x43, 0x7a, 0x16, 0x41, 0x0f, 0x41, 0x43, 0xad, 0xea, 0x3f, 0x0f, + 0x01, 0x44, 0x49, 0xe4, 0x3c, 0x0f, 0x41, 0x45, 0x4b, 0xdc, 0x39, 0x0f, + 0x01, 0x43, 0x93, 0x5a, 0x44, 0x0f, 0x41, 0x42, 0x53, 0x00, 0x36, 0x0f, + 0x41, 0x44, 0x18, 0x3d, 0x30, 0x0f, 0x01, 0x43, 0x7e, 0x1a, 0x3d, 0x0f, + 0x41, 0x06, 0x9b, 0x13, 0x43, 0x04, 0x03, 0x0c, 0x33, 0x05, 0xaf, 0x14, + 0x23, 0x4f, 0xe1, 0x6f, 0x4e, 0x0f, 0x01, 0x4a, 0x19, 0xb0, 0x4f, 0x0f, + 0x01, 0x4c, 0xc5, 0x0e, 0x50, 0x0f, 0x01, 0x09, 0xf1, 0x0b, 0x01, 0xff, + 0x45, 0x5c, 0x00, 0x49, 0x0f, 0x01, 0x45, 0x20, 0x07, 0x47, 0x0f, 0x41, + 0x45, 0x5c, 0x00, 0x4c, 0x0f, 0x01, 0x45, 0x20, 0x07, 0x4d, 0x0f, 0x41, + 0x45, 0x5c, 0x00, 0x48, 0x0f, 0x01, 0x45, 0x20, 0x07, 0x46, 0x0f, 0x41, + 0x45, 0x5c, 0x00, 0x4a, 0x0f, 0x01, 0x45, 0x20, 0x07, 0x4b, 0x0f, 0x41, + 0x80, 0x0c, 0x44, 0xcd, 0x1c, 0x4e, 0xf9, 0x01, 0x54, 0xa4, 0x46, 0x94, + 0x23, 0x40, 0x46, 0x96, 0x63, 0xad, 0x00, 0x00, 0x49, 0xf6, 0xb9, 0x66, + 0xf3, 0x01, 0x51, 0x51, 0x39, 0xac, 0xf5, 0x41, 0x48, 0x98, 0xc4, 0xbd, + 0x26, 0x00, 0x42, 0x6e, 0x00, 0xe6, 0xf9, 0x41, 0xa1, 0x2a, 0x4b, 0x94, + 0x9b, 0x27, 0xf9, 0x01, 0x02, 0xd1, 0x00, 0x01, 0xff, 0x50, 0x16, 0x60, + 0xd4, 0xf3, 0x01, 0x47, 0x95, 0xcf, 0xc2, 0xf3, 0x01, 0x45, 0xdd, 0x2e, + 0x44, 0x27, 0x00, 0x43, 0x41, 0x18, 0x03, 0x26, 0xc0, 0x00, 0x4d, 0xfa, + 0x7f, 0xc4, 0x26, 0x40, 0x42, 0x62, 0x01, 0x0c, 0xf4, 0x01, 0x42, 0x37, + 0x01, 0x0d, 0xf4, 0xc1, 0x00, 0x47, 0x15, 0x08, 0xfa, 0xcc, 0x41, 0xa1, + 0x86, 0x01, 0xa9, 0x06, 0x4c, 0x63, 0x7c, 0xac, 0xf6, 0x41, 0xac, 0x06, + 0x4a, 0x73, 0xb0, 0x0f, 0xf6, 0x41, 0xe5, 0x23, 0x23, 0x00, 0x04, 0xa1, + 0x01, 0x01, 0xff, 0x0e, 0x62, 0x1f, 0x5d, 0x0a, 0x0c, 0x08, 0x01, 0xff, + 0xa8, 0x44, 0x4a, 0x3c, 0x29, 0x03, 0xf6, 0x81, 0x26, 0xb3, 0x06, 0x44, + 0x22, 0x0d, 0x72, 0xf9, 0x41, 0x4b, 0x71, 0x1f, 0x0a, 0xf6, 0x81, 0x06, + 0x49, 0x53, 0xc0, 0x0e, 0xf6, 0x41, 0x05, 0x19, 0x00, 0x01, 0xff, 0x53, + 0xca, 0x49, 0x2d, 0xf9, 0x01, 0x4c, 0xdf, 0x95, 0x70, 0xf9, 0x41, 0x05, + 0x19, 0x00, 0x01, 0xff, 0x4a, 0xf1, 0x75, 0x05, 0xf6, 0x01, 0x4c, 0x70, + 0x1f, 0x04, 0xf6, 0x01, 0x53, 0x93, 0x4d, 0x06, 0xf6, 0x41, 0x43, 0xc1, + 0x4d, 0x07, 0xf6, 0x01, 0x50, 0x85, 0x5a, 0x0d, 0xf6, 0x01, 0x44, 0x9b, + 0x7f, 0x08, 0xf6, 0x41, 0x51, 0x84, 0x5a, 0x3b, 0xf6, 0x01, 0x4a, 0x3c, + 0x29, 0x3a, 0xf6, 0x41, 0x02, 0x60, 0x07, 0x06, 0x4a, 0x29, 0x4f, 0x33, + 0x2a, 0x40, 0x80, 0x0d, 0x47, 0xde, 0xd0, 0xaa, 0x2a, 0xc0, 0x00, 0x4c, + 0xf2, 0x28, 0xac, 0x2a, 0x40, 0xa1, 0xfc, 0x02, 0x4c, 0xd3, 0x8c, 0x39, + 0xf5, 0x01, 0x02, 0x13, 0x05, 0xc1, 0x02, 0x4b, 0x10, 0x9b, 0x69, 0xfe, + 0x00, 0xa5, 0x8e, 0x02, 0x49, 0x81, 0x16, 0x52, 0xfe, 0x00, 0x51, 0x62, + 0x5a, 0x65, 0xfe, 0x00, 0x4c, 0xc7, 0x8f, 0x63, 0xfe, 0x00, 0x51, 0xea, + 0x5a, 0x51, 0xfe, 0x00, 0x02, 0x68, 0x00, 0xd5, 0x01, 0x4b, 0x43, 0xa0, + 0x5f, 0xfe, 0x00, 0x4e, 0x85, 0x7a, 0x38, 0xf5, 0x01, 0xb0, 0xba, 0x01, + 0x4d, 0xa6, 0x34, 0x56, 0xfe, 0x00, 0xb2, 0x20, 0x49, 0x21, 0xbf, 0x54, + 0xfe, 0x00, 0xb4, 0x0c, 0x54, 0x68, 0x46, 0xfa, 0xcd, 0x01, 0x51, 0x2a, + 0x5f, 0x61, 0x2a, 0x40, 0x44, 0x36, 0x23, 0xdc, 0x02, 0x00, 0x60, 0xf2, + 0x0b, 0x3b, 0x0b, 0x41, 0x4e, 0x67, 0x72, 0x68, 0xfe, 0x00, 0x05, 0xc9, + 0x00, 0x76, 0x0d, 0xd5, 0x86, 0x01, 0xff, 0xa5, 0x63, 0xa6, 0x46, 0x44, + 0xcf, 0x2a, 0x78, 0x21, 0x00, 0x43, 0x0e, 0x0b, 0x70, 0x21, 0x80, 0x2a, + 0xb3, 0x1c, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0x79, 0x21, 0x00, 0x44, + 0x25, 0x01, 0x72, 0x21, 0x00, 0xb7, 0x01, 0xff, 0x44, 0xe7, 0x2b, 0x7b, + 0x21, 0x00, 0xef, 0x71, 0x21, 0x40, 0x44, 0xc9, 0x1d, 0x76, 0x21, 0x00, + 0x42, 0x01, 0x26, 0x75, 0x21, 0x40, 0x80, 0x01, 0xff, 0x47, 0x71, 0x11, + 0x7d, 0x21, 0x00, 0x48, 0x40, 0x5e, 0x7f, 0x21, 0x40, 0xa9, 0x06, 0x43, + 0xf6, 0x06, 0x73, 0x21, 0x40, 0x43, 0x52, 0x4d, 0x7c, 0x21, 0x00, 0x42, + 0x32, 0x00, 0x74, 0x21, 0xc0, 0x00, 0x48, 0x70, 0x11, 0x7e, 0x21, 0x40, + 0x44, 0xc9, 0x00, 0x77, 0x21, 0x00, 0x45, 0xb4, 0x6f, 0x7a, 0x21, 0x40, + 0x4d, 0x72, 0x0b, 0x5c, 0xfe, 0x00, 0x4b, 0xd8, 0x21, 0x5a, 0xfe, 0x00, + 0x56, 0x54, 0x09, 0x5e, 0xfe, 0x40, 0x4b, 0xe1, 0x9b, 0x6a, 0xfe, 0x00, + 0x48, 0xe0, 0x71, 0x62, 0xfe, 0x40, 0x03, 0xc5, 0x00, 0x06, 0x4c, 0x67, + 0x95, 0x64, 0xfe, 0x40, 0x4d, 0x72, 0x0b, 0x5b, 0xfe, 0x00, 0x4b, 0xd8, + 0x21, 0x59, 0xfe, 0x00, 0x56, 0x54, 0x09, 0x5d, 0xfe, 0x40, 0x49, 0x52, + 0x92, 0x0a, 0x22, 0x80, 0x12, 0x46, 0xc2, 0xc2, 0x58, 0xfe, 0x00, 0x4a, + 0x49, 0x13, 0x66, 0xfe, 0x00, 0x4f, 0xae, 0x00, 0x57, 0xfe, 0x40, 0x06, + 0x50, 0x00, 0x01, 0xff, 0x47, 0xe6, 0x7f, 0xf7, 0x22, 0x00, 0x68, 0x30, + 0x05, 0xf4, 0x22, 0x40, 0x43, 0xd7, 0x02, 0x55, 0xfe, 0x00, 0x02, 0x15, + 0x05, 0x1c, 0x07, 0x78, 0x69, 0x01, 0xff, 0x49, 0x57, 0xb6, 0x0d, 0x22, + 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x47, 0xe6, 0x7f, 0xfe, 0x22, 0x00, + 0x68, 0x30, 0x05, 0xfc, 0x22, 0x40, 0xe1, 0x50, 0xfe, 0x00, 0x49, 0x85, + 0xb8, 0x6b, 0xfe, 0x40, 0x47, 0x12, 0x34, 0xe9, 0xf6, 0x01, 0x48, 0x13, + 0x3e, 0x60, 0xfe, 0x00, 0x47, 0x3d, 0x0d, 0x61, 0xfe, 0x40, 0xa1, 0x6c, + 0xa5, 0x40, 0xa9, 0x27, 0xaf, 0x01, 0xff, 0xb0, 0x0d, 0xb4, 0x01, 0xff, + 0x48, 0x7f, 0x48, 0xb0, 0xf3, 0x01, 0xe8, 0xa5, 0xf9, 0x41, 0xe5, 0x33, + 0x23, 0x00, 0x0a, 0xcd, 0xab, 0x01, 0xff, 0x43, 0x1a, 0x00, 0x58, 0x2a, + 0x00, 0x42, 0x0c, 0x00, 0x57, 0x2a, 0x40, 0x4b, 0xfd, 0x99, 0x55, 0xf3, + 0x01, 0x06, 0x8b, 0x79, 0x01, 0xff, 0x4d, 0x13, 0x83, 0x41, 0xf6, 0x01, + 0x4c, 0x5b, 0x95, 0x42, 0xf6, 0x41, 0xe4, 0xf7, 0xf6, 0x01, 0x02, 0xeb, + 0x0a, 0x06, 0x4a, 0x25, 0xb3, 0x75, 0xf5, 0x41, 0x04, 0xa1, 0x01, 0x06, + 0x46, 0x85, 0xd5, 0x2a, 0xf6, 0x41, 0x4d, 0x3b, 0x80, 0xcc, 0xf6, 0x01, + 0x44, 0x0c, 0x08, 0x34, 0xf6, 0x01, 0x46, 0x16, 0x08, 0xa4, 0xf4, 0x41, + 0x05, 0x76, 0x00, 0x06, 0x4e, 0x91, 0x7e, 0x73, 0xa6, 0x40, 0x0c, 0x86, + 0x28, 0x11, 0x13, 0xb8, 0x4b, 0x01, 0xff, 0x49, 0xea, 0xbc, 0x5a, 0x2b, + 0x00, 0x4d, 0xf3, 0x87, 0x5c, 0x2b, 0x40, 0x4c, 0x87, 0x00, 0x96, 0x2a, + 0x80, 0x0d, 0x49, 0xec, 0x00, 0x95, 0x2a, 0xc0, 0x00, 0x50, 0xa6, 0x60, + 0x97, 0x2a, 0x40, 0x50, 0xa6, 0x60, 0x98, 0x2a, 0x40, 0x48, 0xc0, 0xc3, + 0xf9, 0xf6, 0x01, 0xa9, 0x16, 0xb5, 0x01, 0xff, 0x42, 0x60, 0x07, 0x80, + 0xf4, 0x81, 0x06, 0x42, 0xb3, 0x25, 0xa8, 0xf9, 0x41, 0x4f, 0xc5, 0x4a, + 0x20, 0x26, 0x40, 0x4d, 0x1d, 0x7f, 0xbf, 0xf3, 0x01, 0x42, 0x33, 0x00, + 0xf7, 0x26, 0x40, 0xa4, 0xbc, 0x31, 0x02, 0x5c, 0x03, 0xf0, 0x07, 0x51, + 0xc7, 0x5b, 0xfe, 0xf5, 0x01, 0x06, 0xf7, 0xd1, 0xbe, 0x07, 0xae, 0x30, + 0xb8, 0x01, 0xff, 0x02, 0x9b, 0x01, 0x0c, 0x4d, 0x2e, 0x80, 0x06, 0x20, + 0x00, 0x55, 0x4e, 0x3e, 0x3a, 0x27, 0x40, 0x60, 0x94, 0x0f, 0x3e, 0x27, + 0x00, 0x07, 0x34, 0x08, 0x01, 0xff, 0x4a, 0xf4, 0x2b, 0x36, 0x27, 0x00, + 0x4d, 0x28, 0x13, 0xcd, 0xf7, 0x01, 0x54, 0x04, 0x46, 0x2f, 0xf5, 0x41, + 0x46, 0x12, 0xdb, 0x3f, 0x22, 0x00, 0x03, 0x06, 0x02, 0xc1, 0x06, 0x05, + 0xd2, 0xe6, 0x01, 0xff, 0x08, 0xa3, 0x80, 0xa4, 0x05, 0xac, 0xae, 0x01, + 0x56, 0x6b, 0x36, 0xf4, 0x0d, 0x00, 0x05, 0x5a, 0x03, 0x89, 0x01, 0x0b, + 0x40, 0x77, 0x01, 0xff, 0x4a, 0x26, 0x6c, 0xcf, 0x0d, 0x00, 0x05, 0x21, + 0x6c, 0x52, 0x02, 0x24, 0x02, 0x42, 0xab, 0x01, 0xff, 0x05, 0xbb, 0xb8, + 0x29, 0x04, 0x6e, 0xd2, 0x01, 0xff, 0x45, 0xaa, 0xe1, 0xdb, 0x0d, 0x00, + 0x42, 0xf5, 0x0a, 0xd9, 0x0d, 0xc0, 0x00, 0x05, 0xb9, 0xe1, 0x01, 0xff, + 0x4a, 0x26, 0x6c, 0xdc, 0x0d, 0x00, 0x4f, 0x21, 0x6c, 0xdd, 0x0d, 0x00, + 0x4b, 0x44, 0x9c, 0xde, 0x0d, 0x40, 0x4a, 0x77, 0xa7, 0xd0, 0x0d, 0x00, + 0x48, 0x40, 0xc7, 0xd2, 0x0d, 0x00, 0x49, 0xdd, 0xbd, 0xd4, 0x0d, 0x40, + 0x4a, 0x1f, 0xaa, 0xd8, 0x0d, 0x00, 0x49, 0x46, 0x9c, 0xdf, 0x0d, 0x40, + 0x4a, 0x77, 0xa7, 0xd1, 0x0d, 0x00, 0x02, 0x24, 0x02, 0x12, 0x48, 0x40, + 0xc7, 0xd3, 0x0d, 0x00, 0x47, 0x6d, 0xd2, 0xda, 0x0d, 0x00, 0x49, 0xdd, + 0xbd, 0xd6, 0x0d, 0x40, 0x4a, 0x1f, 0xaa, 0xf2, 0x0d, 0x00, 0x49, 0x46, + 0x9c, 0xf3, 0x0d, 0x40, 0xa1, 0x0c, 0x4b, 0xd7, 0x23, 0x81, 0x0d, 0x00, + 0x49, 0x19, 0xc1, 0x83, 0x0d, 0x40, 0x48, 0x88, 0xc7, 0xca, 0x0d, 0x00, + 0x49, 0xbd, 0xbc, 0x82, 0x0d, 0x40, 0x06, 0xed, 0x05, 0x47, 0x0a, 0x1d, + 0xac, 0x01, 0xff, 0x45, 0x12, 0x0b, 0xee, 0x0d, 0x00, 0xa6, 0x2e, 0x44, + 0xcf, 0x2a, 0xef, 0x0d, 0x00, 0x43, 0x0e, 0x0b, 0xe7, 0x0d, 0x00, 0xb3, + 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, 0xe6, 0x0d, 0x40, 0x44, 0x25, 0x01, + 0xe9, 0x0d, 0x00, 0x42, 0x15, 0x02, 0xe8, 0x0d, 0x40, 0x44, 0xc9, 0x1d, + 0xed, 0x0d, 0x00, 0x42, 0x01, 0x26, 0xec, 0x0d, 0x40, 0x43, 0xd2, 0x05, + 0xeb, 0x0d, 0x00, 0x43, 0xf6, 0x06, 0xea, 0x0d, 0x40, 0xa1, 0xb4, 0x02, + 0x08, 0x00, 0xc5, 0x9d, 0x02, 0xa5, 0x8e, 0x02, 0x47, 0x16, 0xd1, 0xc6, + 0x0d, 0x00, 0x47, 0x7f, 0xd1, 0xc4, 0x0d, 0x00, 0xa9, 0xd3, 0x01, 0x52, + 0x23, 0x53, 0x9e, 0x0d, 0x00, 0xad, 0x67, 0xaf, 0x59, 0x47, 0x30, 0xd5, + 0xbb, 0x0d, 0x00, 0x08, 0xa8, 0xca, 0x35, 0x08, 0x50, 0xcb, 0x1a, 0xb5, + 0x0c, 0x47, 0x2f, 0xd7, 0xc0, 0x0d, 0x00, 0x47, 0xd7, 0xd7, 0xba, 0x0d, + 0x40, 0x46, 0x12, 0xe1, 0x8c, 0x0d, 0x00, 0x45, 0x59, 0x69, 0x8b, 0x0d, + 0x40, 0x4a, 0x2b, 0x53, 0xa4, 0x0d, 0x00, 0x02, 0x40, 0x06, 0x01, 0xff, + 0x52, 0x0d, 0x54, 0xa5, 0x0d, 0x00, 0x45, 0x59, 0x69, 0xc1, 0x0d, 0x40, + 0xa4, 0x0c, 0x47, 0x39, 0xd1, 0x9f, 0x0d, 0x00, 0x47, 0x2e, 0xd2, 0xa6, + 0x0d, 0x40, 0x46, 0x4b, 0x9f, 0xb3, 0x0d, 0x00, 0x47, 0x44, 0xd0, 0xac, + 0x0d, 0x40, 0x46, 0x58, 0x69, 0x95, 0x0d, 0x00, 0x45, 0x59, 0x69, 0x94, + 0x0d, 0x40, 0xa1, 0x17, 0x09, 0xbf, 0xc0, 0x01, 0xff, 0x47, 0xba, 0xd2, + 0xc5, 0x0d, 0x00, 0x47, 0x70, 0xd3, 0xab, 0x0d, 0x00, 0x47, 0xae, 0xd5, + 0xc2, 0x0d, 0x40, 0x0a, 0x05, 0xab, 0x06, 0x45, 0x59, 0x69, 0xb8, 0x0d, + 0x40, 0x47, 0x4a, 0x9f, 0xb7, 0x0d, 0x00, 0x47, 0xd4, 0xcf, 0xa1, 0x0d, + 0x00, 0xa4, 0x27, 0x47, 0x39, 0xd1, 0x9d, 0x0d, 0x00, 0x47, 0x2e, 0xd2, + 0xa3, 0x0d, 0x00, 0x47, 0x51, 0xd2, 0x9b, 0x0d, 0x00, 0x47, 0x8f, 0xd4, + 0xb5, 0x0d, 0x00, 0xb4, 0x01, 0xff, 0x46, 0x4b, 0x9f, 0xae, 0x0d, 0x00, + 0x47, 0x3a, 0xd6, 0xa8, 0x0d, 0x40, 0x46, 0x4b, 0x9f, 0xb0, 0x0d, 0x00, + 0x47, 0x44, 0xd0, 0xaa, 0x0d, 0x40, 0x46, 0x4c, 0xdd, 0x8a, 0x0d, 0x00, + 0x02, 0xc7, 0x15, 0x16, 0x02, 0x3d, 0x00, 0x06, 0x45, 0x59, 0x69, 0x89, + 0x0d, 0x40, 0x46, 0x12, 0xe1, 0x8e, 0x0d, 0x00, 0x45, 0x59, 0x69, 0x8d, + 0x0d, 0x40, 0x46, 0x12, 0xe1, 0x90, 0x0d, 0x00, 0x45, 0x59, 0x69, 0x8f, + 0x0d, 0x40, 0x46, 0xa2, 0xdb, 0x92, 0x0d, 0x00, 0x45, 0x59, 0x69, 0x91, + 0x0d, 0x40, 0x47, 0xba, 0xd2, 0xbd, 0x0d, 0x00, 0x47, 0x70, 0xd3, 0xb1, + 0x0d, 0x00, 0x47, 0xae, 0xd5, 0xc3, 0x0d, 0x40, 0x46, 0x4b, 0x9f, 0x86, + 0x0d, 0x00, 0xa5, 0x5d, 0x46, 0x4c, 0xdd, 0x93, 0x0d, 0x00, 0x0a, 0x7b, + 0xad, 0x12, 0x4b, 0x46, 0x9f, 0xb9, 0x0d, 0x00, 0x46, 0x12, 0xe1, 0x96, + 0x0d, 0x00, 0x45, 0x59, 0x69, 0x85, 0x0d, 0x40, 0x47, 0x4a, 0x9f, 0xb6, + 0x0d, 0x00, 0x47, 0xd4, 0xcf, 0xa0, 0x0d, 0x00, 0xa4, 0x27, 0x47, 0x39, + 0xd1, 0x9c, 0x0d, 0x00, 0x47, 0x2e, 0xd2, 0xa2, 0x0d, 0x00, 0x47, 0x51, + 0xd2, 0x9a, 0x0d, 0x00, 0x47, 0x8f, 0xd4, 0xb4, 0x0d, 0x00, 0xb4, 0x01, + 0xff, 0x46, 0x4b, 0x9f, 0xad, 0x0d, 0x00, 0x47, 0x3a, 0xd6, 0xa7, 0x0d, + 0x40, 0x46, 0x4b, 0x9f, 0xaf, 0x0d, 0x00, 0x47, 0x44, 0xd0, 0xa9, 0x0d, + 0x40, 0x46, 0xa2, 0xdb, 0x88, 0x0d, 0x00, 0x45, 0x59, 0x69, 0x87, 0x0d, + 0x40, 0x06, 0xef, 0x06, 0x52, 0x07, 0xff, 0x39, 0x01, 0xff, 0x46, 0x30, + 0xdb, 0xf1, 0x11, 0x01, 0xa6, 0x39, 0x46, 0xac, 0x2c, 0xf2, 0x11, 0x01, + 0x04, 0x0e, 0x0b, 0x23, 0xb3, 0x15, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, + 0xea, 0x11, 0x01, 0x45, 0x7a, 0x11, 0xec, 0x11, 0x01, 0x45, 0x7f, 0x2c, + 0xeb, 0x11, 0x41, 0x46, 0xc9, 0x1d, 0xf0, 0x11, 0x01, 0x44, 0x46, 0xdd, + 0xef, 0x11, 0x41, 0x47, 0x71, 0x11, 0xf3, 0x11, 0x01, 0x48, 0x40, 0x5e, + 0xf4, 0x11, 0x41, 0x44, 0x51, 0x4d, 0xee, 0x11, 0x01, 0x44, 0xce, 0x51, + 0xed, 0x11, 0x41, 0x45, 0x12, 0x0b, 0xe8, 0x11, 0x01, 0xa6, 0x29, 0x44, + 0xcf, 0x2a, 0xe9, 0x11, 0x01, 0x43, 0x0e, 0x0b, 0xe1, 0x11, 0x01, 0xb3, + 0x0f, 0xb4, 0x01, 0xff, 0x44, 0x25, 0x01, 0xe3, 0x11, 0x01, 0x42, 0x15, + 0x02, 0xe2, 0x11, 0x41, 0x44, 0xc9, 0x1d, 0xe7, 0x11, 0x01, 0x42, 0x01, + 0x26, 0xe6, 0x11, 0x41, 0x43, 0xd2, 0x05, 0xe5, 0x11, 0x01, 0x43, 0xf6, + 0x06, 0xe4, 0x11, 0x41, 0x80, 0x0d, 0x07, 0xd5, 0xcd, 0x01, 0xff, 0xd2, + 0x8e, 0x00, 0x00, 0xd3, 0x8f, 0x00, 0x40, 0x54, 0x04, 0x41, 0x9a, 0x00, + 0x00, 0x5e, 0x53, 0x13, 0x1b, 0x20, 0x00, 0xac, 0x17, 0x63, 0x87, 0x0b, + 0x3a, 0x20, 0x00, 0x07, 0xca, 0xd5, 0x01, 0xff, 0x44, 0x25, 0x01, 0x8f, + 0x00, 0x00, 0x42, 0x15, 0x02, 0x8e, 0x00, 0x40, 0x61, 0xea, 0x0d, 0x39, + 0x20, 0x00, 0x53, 0x04, 0x4c, 0x1a, 0x20, 0x40, 0x06, 0x5c, 0x00, 0x17, + 0x4d, 0x05, 0x86, 0x6c, 0x2a, 0x00, 0x03, 0xc8, 0x07, 0x01, 0xff, 0x4c, + 0x87, 0x00, 0x9e, 0x2a, 0x00, 0x49, 0xec, 0x00, 0x9d, 0x2a, 0x40, 0x5e, + 0x35, 0x13, 0xa0, 0x2a, 0x00, 0x5b, 0x42, 0x1c, 0x9f, 0x2a, 0x40, 0x4d, + 0x92, 0x7f, 0x18, 0xf9, 0x01, 0x08, 0xa0, 0xcc, 0x01, 0xff, 0x04, 0x41, + 0x8d, 0x96, 0x29, 0x02, 0x63, 0x09, 0xea, 0x28, 0xa3, 0xc2, 0x28, 0xa4, + 0xd7, 0x27, 0xa5, 0xf8, 0x25, 0xa6, 0xec, 0x24, 0x06, 0x2c, 0xdc, 0xd5, + 0x24, 0xa8, 0xc7, 0x14, 0xac, 0xc2, 0x13, 0x02, 0xc3, 0x07, 0x8c, 0x06, + 0xae, 0xe3, 0x05, 0x4b, 0xd8, 0x21, 0x8b, 0xda, 0x01, 0xb2, 0xdf, 0x03, + 0xb3, 0xe1, 0x02, 0xb4, 0x0c, 0x62, 0x44, 0x0d, 0x75, 0xda, 0x01, 0x5b, + 0x0d, 0x1e, 0x6f, 0xda, 0x41, 0xa5, 0x84, 0x02, 0xaf, 0x92, 0x01, 0x06, + 0x74, 0xdf, 0x01, 0xff, 0x0b, 0x7e, 0x49, 0x52, 0x0a, 0x0d, 0x1e, 0x01, + 0xff, 0x0b, 0x21, 0x99, 0x37, 0x09, 0xe2, 0xbe, 0x06, 0x47, 0xc3, 0xd5, + 0x51, 0xd9, 0x41, 0x0b, 0x7e, 0x49, 0x17, 0x0a, 0x0d, 0x1e, 0x01, 0xff, + 0x4b, 0x13, 0x5a, 0x4d, 0xd9, 0x01, 0x46, 0x3b, 0x01, 0x4c, 0xd9, 0x01, + 0x46, 0xdf, 0x09, 0x4b, 0xd9, 0x41, 0x4b, 0x13, 0x5a, 0x50, 0xd9, 0x01, + 0x46, 0x3b, 0x01, 0x4f, 0xd9, 0x01, 0x46, 0xdf, 0x09, 0x4e, 0xd9, 0x41, + 0x46, 0x3b, 0x01, 0x53, 0xd9, 0x01, 0x46, 0xdf, 0x09, 0x52, 0xd9, 0x01, + 0x46, 0x6a, 0x1d, 0x54, 0xd9, 0x41, 0x09, 0xe2, 0xbe, 0x06, 0x47, 0xc3, + 0xd5, 0x87, 0xd9, 0x41, 0x0b, 0x7e, 0x49, 0x17, 0x0a, 0x0d, 0x1e, 0x01, + 0xff, 0x4b, 0x13, 0x5a, 0x86, 0xd9, 0x01, 0x46, 0x3b, 0x01, 0x85, 0xd9, + 0x01, 0x46, 0xdf, 0x09, 0x84, 0xd9, 0x41, 0x4b, 0x13, 0x5a, 0x83, 0xd9, + 0x01, 0x46, 0x3b, 0x01, 0x82, 0xd9, 0x01, 0x46, 0xdf, 0x09, 0x81, 0xd9, + 0x41, 0x05, 0x16, 0xe9, 0x32, 0x04, 0x6d, 0xf2, 0x17, 0x04, 0xd6, 0xe8, + 0x01, 0xff, 0x47, 0xc0, 0x09, 0x07, 0xd9, 0x01, 0x48, 0x60, 0x44, 0x06, + 0xd9, 0x01, 0x46, 0xdf, 0x09, 0x05, 0xd9, 0x41, 0x53, 0x7e, 0x49, 0x74, + 0xda, 0x01, 0x0a, 0x0d, 0x1e, 0x01, 0xff, 0x4b, 0xad, 0x9a, 0x73, 0xda, + 0x01, 0x50, 0x86, 0x67, 0x72, 0xda, 0x41, 0x07, 0x73, 0x02, 0x29, 0x54, + 0x5c, 0x43, 0x5d, 0xda, 0x01, 0x4c, 0x23, 0x91, 0x5a, 0xda, 0x01, 0x53, + 0x33, 0x4b, 0x5e, 0xda, 0x01, 0x50, 0x76, 0x67, 0x59, 0xda, 0x01, 0x04, + 0x49, 0x0c, 0x01, 0xff, 0x4c, 0xaf, 0x8c, 0x5b, 0xda, 0x01, 0x55, 0x8d, + 0x3e, 0x5c, 0xda, 0x41, 0x4c, 0x96, 0x3e, 0x60, 0xda, 0x01, 0x4c, 0x76, + 0x67, 0x5f, 0xda, 0x41, 0x43, 0xda, 0x25, 0x61, 0xda, 0x81, 0x17, 0x0b, + 0x2d, 0xa0, 0x01, 0xff, 0x44, 0x48, 0x0b, 0x2d, 0xda, 0x01, 0x43, 0x13, + 0x01, 0x2f, 0xda, 0x01, 0x46, 0x7d, 0x02, 0x2e, 0xda, 0x41, 0x80, 0x01, + 0xff, 0x49, 0xb1, 0xb6, 0x67, 0xda, 0x01, 0x48, 0x12, 0x5e, 0x62, 0xda, + 0x01, 0x03, 0xb6, 0x00, 0x01, 0xff, 0x44, 0x66, 0x1b, 0x65, 0xda, 0x81, + 0x0d, 0x46, 0xb0, 0x67, 0x63, 0xda, 0xc1, 0x00, 0x49, 0x11, 0x5e, 0x64, + 0xda, 0x41, 0x49, 0x11, 0x5e, 0x66, 0xda, 0x41, 0x48, 0xda, 0x59, 0x89, + 0xda, 0x01, 0x08, 0x18, 0x1e, 0x5b, 0x07, 0x06, 0xd5, 0x27, 0x06, 0xb2, + 0xe0, 0x11, 0x07, 0xf7, 0xd6, 0x01, 0xff, 0x47, 0xc0, 0x09, 0x15, 0xd9, + 0x01, 0x47, 0x16, 0x08, 0x14, 0xd9, 0x41, 0x47, 0xc0, 0x09, 0x0d, 0xd9, + 0x01, 0x48, 0x60, 0x44, 0x0c, 0xd9, 0x01, 0x46, 0xdf, 0x09, 0x0b, 0xd9, + 0x41, 0x51, 0x0d, 0x5a, 0x20, 0xd9, 0x01, 0x06, 0x27, 0x1c, 0x1a, 0xb3, + 0x01, 0xff, 0x49, 0x54, 0x6c, 0x1a, 0xd9, 0x01, 0x05, 0x5e, 0x07, 0x01, + 0xff, 0x48, 0x60, 0x44, 0x19, 0xd9, 0x01, 0x46, 0xdf, 0x09, 0x17, 0xd9, + 0x41, 0x48, 0x60, 0x44, 0x18, 0xd9, 0x01, 0x46, 0xdf, 0x09, 0x16, 0xd9, + 0x41, 0x04, 0x5c, 0x0d, 0x06, 0x52, 0xab, 0x55, 0x71, 0xda, 0x41, 0x49, + 0x1c, 0xbe, 0x6e, 0xda, 0x01, 0x45, 0x0a, 0xeb, 0x6d, 0xda, 0x41, 0x07, + 0x1b, 0x05, 0x17, 0x03, 0x76, 0x4d, 0x01, 0xff, 0x47, 0xc0, 0x09, 0x13, + 0xd9, 0x01, 0x48, 0x60, 0x44, 0x12, 0xd9, 0x01, 0x46, 0xdf, 0x09, 0x11, + 0xd9, 0x41, 0x0a, 0x55, 0x91, 0x9d, 0x01, 0x8d, 0x01, 0xff, 0x0b, 0x7e, + 0x49, 0x4e, 0x0a, 0x0d, 0x1e, 0x01, 0xff, 0x08, 0xf1, 0x11, 0x30, 0x46, + 0x3b, 0x01, 0xa3, 0xd9, 0x81, 0x18, 0x46, 0xdf, 0x09, 0xa2, 0xd9, 0xc1, + 0x00, 0x09, 0x33, 0x26, 0x01, 0xff, 0x45, 0x53, 0x99, 0xb1, 0xd9, 0x01, + 0x4a, 0x79, 0xaa, 0xaa, 0xd9, 0x41, 0x09, 0x33, 0x26, 0x01, 0xff, 0x45, + 0x53, 0x99, 0xb2, 0xd9, 0x01, 0x4a, 0x79, 0xaa, 0xab, 0xd9, 0x41, 0xe5, + 0xa4, 0xd9, 0x01, 0x0c, 0x27, 0x90, 0x01, 0xff, 0x45, 0x53, 0x99, 0xb3, + 0xd9, 0x01, 0x4a, 0x79, 0xaa, 0xac, 0xd9, 0x41, 0x4b, 0x13, 0x5a, 0xe1, + 0xd9, 0x81, 0x30, 0x46, 0x3b, 0x01, 0xe0, 0xd9, 0x81, 0x18, 0x46, 0xdf, + 0x09, 0xdf, 0xd9, 0xc1, 0x00, 0x09, 0x33, 0x26, 0x01, 0xff, 0x47, 0x90, + 0xc4, 0xc3, 0xd9, 0x01, 0x45, 0x58, 0x24, 0xd2, 0xd9, 0x41, 0x09, 0x33, + 0x26, 0x01, 0xff, 0x47, 0x90, 0xc4, 0xc4, 0xd9, 0x01, 0x45, 0x58, 0x24, + 0xd3, 0xd9, 0x41, 0x09, 0x33, 0x26, 0x01, 0xff, 0x47, 0x90, 0xc4, 0xc5, + 0xd9, 0x01, 0x45, 0x58, 0x24, 0xd4, 0xd9, 0x41, 0x91, 0x20, 0xd2, 0xa1, + 0xda, 0x01, 0xd3, 0xa2, 0xda, 0x01, 0xd4, 0xa3, 0xda, 0x01, 0xd5, 0xa4, + 0xda, 0x01, 0xd6, 0xa5, 0xda, 0x01, 0xd7, 0xa6, 0xda, 0x01, 0xd8, 0xa7, + 0xda, 0x01, 0xd9, 0xa8, 0xda, 0x41, 0xd0, 0xa9, 0xda, 0x01, 0xd1, 0xaa, + 0xda, 0x01, 0xd2, 0xab, 0xda, 0x01, 0xd3, 0xac, 0xda, 0x01, 0xd4, 0xad, + 0xda, 0x01, 0xd5, 0xae, 0xda, 0x01, 0xd6, 0xaf, 0xda, 0x41, 0x43, 0x6f, + 0x14, 0x6a, 0xda, 0x01, 0x04, 0x16, 0x17, 0x01, 0xff, 0x47, 0x13, 0xd0, + 0x32, 0xda, 0x01, 0x47, 0x4c, 0x8e, 0x31, 0xda, 0x01, 0xb7, 0x01, 0xff, + 0x46, 0xce, 0xdc, 0x34, 0xda, 0x01, 0x47, 0x62, 0xc1, 0x33, 0xda, 0x41, + 0x04, 0xa3, 0x20, 0xe1, 0x0b, 0x07, 0x3d, 0xd7, 0x01, 0xff, 0x09, 0xe3, + 0x25, 0xdd, 0x0a, 0x0b, 0x7e, 0x49, 0xd5, 0x05, 0x06, 0x86, 0xdc, 0x99, + 0x05, 0x0a, 0x0d, 0x1e, 0x01, 0xff, 0x0b, 0x1e, 0x27, 0xee, 0x04, 0xa2, + 0xbe, 0x04, 0xa3, 0x80, 0x03, 0x07, 0x3b, 0x01, 0xe2, 0x02, 0x08, 0x4f, + 0x1b, 0xc7, 0x02, 0x05, 0x27, 0xe7, 0xa0, 0x02, 0x43, 0x30, 0x9a, 0x68, + 0xda, 0x01, 0x05, 0x3a, 0xe8, 0xec, 0x01, 0x06, 0x08, 0xdf, 0xd5, 0x01, + 0xb3, 0xa4, 0x01, 0x07, 0x6a, 0x1d, 0x86, 0x01, 0xb7, 0x17, 0x07, 0xe1, + 0x33, 0x01, 0xff, 0x45, 0x27, 0x1c, 0x47, 0xd9, 0x01, 0x46, 0x44, 0x04, + 0x46, 0xd9, 0x01, 0x45, 0x5d, 0x07, 0x45, 0xd9, 0x41, 0x04, 0x17, 0x23, + 0x11, 0x12, 0xd3, 0x54, 0x01, 0xff, 0x46, 0x3b, 0x01, 0xee, 0xd9, 0x01, + 0x46, 0xdf, 0x09, 0xed, 0xd9, 0x41, 0x06, 0x9b, 0x13, 0x27, 0x0e, 0xdb, + 0x76, 0x11, 0x08, 0x34, 0x26, 0x01, 0xff, 0x45, 0x53, 0x99, 0xb0, 0xd9, + 0x01, 0x4a, 0x79, 0xaa, 0xa9, 0xd9, 0x41, 0x45, 0x27, 0x1c, 0xb6, 0xd9, + 0x01, 0x46, 0x44, 0x04, 0xb5, 0xd9, 0x01, 0x45, 0x5d, 0x07, 0xb4, 0xd9, + 0x41, 0x07, 0x3b, 0x01, 0x17, 0x07, 0x6a, 0x1d, 0x01, 0xff, 0x45, 0x27, + 0x1c, 0x9e, 0xd9, 0x01, 0x46, 0x44, 0x04, 0x9d, 0xd9, 0x01, 0x45, 0x5d, + 0x07, 0x9c, 0xd9, 0x41, 0x45, 0x27, 0x1c, 0x9b, 0xd9, 0x01, 0x46, 0x44, + 0x04, 0x9a, 0xd9, 0x01, 0x45, 0x5d, 0x07, 0x99, 0xd9, 0x41, 0x4b, 0x13, + 0x5a, 0x36, 0xd9, 0x81, 0x0c, 0x51, 0x09, 0x5e, 0x34, 0xd9, 0x01, 0x4a, + 0x51, 0x98, 0x35, 0xd9, 0x41, 0x4b, 0x50, 0x98, 0x37, 0xd9, 0x41, 0x46, + 0xc5, 0x6d, 0xa5, 0xd9, 0x01, 0x06, 0xe0, 0x09, 0x01, 0xff, 0x09, 0x34, + 0x4d, 0x06, 0x4a, 0x51, 0x98, 0x2e, 0xd9, 0x41, 0x45, 0x27, 0x1c, 0x2c, + 0xd9, 0x81, 0x0c, 0x46, 0x44, 0x04, 0x2b, 0xd9, 0x01, 0x45, 0x5d, 0x07, + 0x2a, 0xd9, 0x41, 0x42, 0x60, 0x01, 0x2d, 0xd9, 0x41, 0x45, 0x27, 0x1c, + 0x4a, 0xd9, 0x01, 0x46, 0x44, 0x04, 0x49, 0xd9, 0x01, 0x45, 0x5d, 0x07, + 0x48, 0xd9, 0x41, 0x08, 0x34, 0x26, 0x19, 0x45, 0x27, 0x1c, 0x97, 0xd9, + 0x01, 0x46, 0x44, 0x04, 0x96, 0xd9, 0x01, 0x45, 0x5d, 0x07, 0x95, 0xd9, + 0xc1, 0x00, 0x47, 0x3a, 0x01, 0x98, 0xd9, 0x41, 0x45, 0x53, 0x99, 0xaf, + 0xd9, 0x01, 0x4a, 0x79, 0xaa, 0xa8, 0xd9, 0x41, 0x08, 0x34, 0x26, 0x12, + 0x45, 0x27, 0x1c, 0x94, 0xd9, 0x01, 0x46, 0x44, 0x04, 0x93, 0xd9, 0x01, + 0x45, 0x5d, 0x07, 0x92, 0xd9, 0x41, 0x45, 0x53, 0x99, 0xae, 0xd9, 0x01, + 0x4a, 0x79, 0xaa, 0xa7, 0xd9, 0x41, 0x07, 0x98, 0x43, 0x06, 0x46, 0x14, + 0xd0, 0x28, 0xd9, 0x41, 0x46, 0x3b, 0x01, 0xf2, 0xd9, 0x01, 0x46, 0xdf, + 0x09, 0xf1, 0xd9, 0x41, 0x4b, 0x13, 0x5a, 0x31, 0xd9, 0x81, 0x0c, 0x48, + 0x34, 0x4d, 0x2f, 0xd9, 0x01, 0x4a, 0x51, 0x98, 0x30, 0xd9, 0x41, 0x4b, + 0x50, 0x98, 0x32, 0xd9, 0x41, 0x05, 0xa4, 0xa8, 0xa4, 0x01, 0x06, 0x1e, + 0x0b, 0x87, 0x01, 0x44, 0x96, 0x10, 0x33, 0xd9, 0x01, 0x04, 0x9c, 0x13, + 0x01, 0xff, 0x80, 0x11, 0x08, 0xf0, 0xc4, 0x01, 0xff, 0x46, 0x44, 0x04, + 0xa1, 0xd9, 0x01, 0x45, 0x5d, 0x07, 0xa0, 0xd9, 0x41, 0xa8, 0x39, 0x08, + 0x04, 0x03, 0x1c, 0x02, 0x53, 0x00, 0x01, 0xff, 0x4b, 0x9f, 0x9b, 0x9f, + 0xd9, 0x01, 0x13, 0x89, 0x4c, 0x01, 0xff, 0x46, 0x44, 0x04, 0x91, 0xd9, + 0x01, 0x45, 0x5d, 0x07, 0x90, 0xd9, 0x41, 0x45, 0x27, 0x1c, 0x8a, 0xd9, + 0x81, 0x0c, 0x46, 0x44, 0x04, 0x89, 0xd9, 0x01, 0x45, 0x5d, 0x07, 0x88, + 0xd9, 0x41, 0x42, 0x60, 0x01, 0x8b, 0xd9, 0x41, 0x0b, 0xc1, 0x2c, 0x11, + 0x07, 0x35, 0x26, 0x01, 0xff, 0x45, 0x53, 0x99, 0xad, 0xd9, 0x01, 0x4a, + 0x79, 0xaa, 0xa6, 0xd9, 0x41, 0x45, 0x27, 0x1c, 0x8e, 0xd9, 0x81, 0x0c, + 0x46, 0x44, 0x04, 0x8d, 0xd9, 0x01, 0x45, 0x5d, 0x07, 0x8c, 0xd9, 0x41, + 0x42, 0x60, 0x01, 0x8f, 0xd9, 0x41, 0x45, 0x27, 0x1c, 0x3d, 0xd9, 0x01, + 0x46, 0x44, 0x04, 0x3c, 0xd9, 0x01, 0x48, 0x6d, 0x60, 0x3e, 0xd9, 0x01, + 0x45, 0x5d, 0x07, 0x3b, 0xd9, 0x41, 0x45, 0x27, 0x1c, 0x41, 0xd9, 0x01, + 0x46, 0x44, 0x04, 0x40, 0xd9, 0x01, 0x45, 0x5d, 0x07, 0x3f, 0xd9, 0x41, + 0x04, 0x40, 0x05, 0x17, 0x03, 0xbc, 0x3a, 0x01, 0xff, 0x45, 0x27, 0x1c, + 0x44, 0xd9, 0x01, 0x46, 0x44, 0x04, 0x43, 0xd9, 0x01, 0x45, 0x5d, 0x07, + 0x42, 0xd9, 0x41, 0x45, 0x27, 0x1c, 0x3a, 0xd9, 0x01, 0x46, 0x44, 0x04, + 0x39, 0xd9, 0x01, 0x45, 0x5d, 0x07, 0x38, 0xd9, 0x41, 0x07, 0x44, 0x04, + 0x11, 0x06, 0x5d, 0x07, 0x01, 0xff, 0x46, 0x3b, 0x01, 0xe5, 0xd9, 0x01, + 0x46, 0xdf, 0x09, 0xe3, 0xd9, 0x41, 0x46, 0x3b, 0x01, 0xe6, 0xd9, 0x01, + 0x46, 0xdf, 0x09, 0xe4, 0xd9, 0x41, 0x4f, 0x4e, 0x6c, 0x24, 0xd9, 0x01, + 0x55, 0x39, 0x3e, 0x27, 0xd9, 0x01, 0x03, 0x7d, 0x15, 0x01, 0xff, 0x05, + 0x9e, 0x14, 0x06, 0x4a, 0x53, 0x6c, 0x23, 0xd9, 0x41, 0x0c, 0x2b, 0x8c, + 0x0c, 0x45, 0x27, 0x1c, 0x21, 0xd9, 0x01, 0x45, 0x5d, 0x07, 0x22, 0xd9, + 0x41, 0x45, 0x27, 0x1c, 0x25, 0xd9, 0x01, 0x45, 0x5d, 0x07, 0x26, 0xd9, + 0x41, 0x18, 0x1e, 0x27, 0xcd, 0x04, 0xa2, 0xad, 0x04, 0xa3, 0xbf, 0x03, + 0x07, 0x3b, 0x01, 0xa1, 0x03, 0x08, 0x4f, 0x1b, 0x86, 0x03, 0x05, 0x27, + 0xe7, 0xb0, 0x02, 0x43, 0x30, 0x9a, 0x69, 0xda, 0x01, 0x05, 0x3a, 0xe8, + 0xd0, 0x01, 0x06, 0x08, 0xdf, 0xb9, 0x01, 0xb3, 0x88, 0x01, 0x07, 0x6a, + 0x1d, 0x68, 0xb7, 0x17, 0x07, 0xe1, 0x33, 0x01, 0xff, 0x45, 0x27, 0x1c, + 0x7d, 0xd9, 0x01, 0x46, 0x44, 0x04, 0x7c, 0xd9, 0x01, 0x45, 0x5d, 0x07, + 0x7b, 0xd9, 0x41, 0x04, 0x17, 0x23, 0x11, 0x19, 0x28, 0x26, 0x01, 0xff, + 0x46, 0x3b, 0x01, 0xf0, 0xd9, 0x01, 0x46, 0xdf, 0x09, 0xef, 0xd9, 0x41, + 0x08, 0x34, 0x26, 0x15, 0x45, 0x27, 0x1c, 0xde, 0xd9, 0x01, 0xb3, 0x01, + 0xff, 0x44, 0x5e, 0x07, 0xdd, 0xd9, 0x01, 0x44, 0x77, 0x2e, 0xdc, 0xd9, + 0x41, 0x08, 0x90, 0xc4, 0x11, 0x06, 0x58, 0x24, 0x01, 0xff, 0x45, 0x27, + 0x1c, 0xd1, 0xd9, 0x01, 0x45, 0x5d, 0x07, 0xd0, 0xd9, 0x41, 0x45, 0x27, + 0x1c, 0xc2, 0xd9, 0x01, 0x45, 0x5d, 0x07, 0xc1, 0xd9, 0x41, 0x0c, 0x2b, + 0x8c, 0x0c, 0x51, 0x09, 0x5e, 0x6f, 0xd9, 0x01, 0x4a, 0x51, 0x98, 0x70, + 0xd9, 0x41, 0x48, 0x12, 0x5e, 0x71, 0xd9, 0x01, 0x4a, 0x51, 0x98, 0x72, + 0xd9, 0x41, 0x4f, 0xc5, 0x6d, 0xe2, 0xd9, 0x01, 0x06, 0xe0, 0x09, 0x01, + 0xff, 0x09, 0x34, 0x4d, 0x06, 0x4a, 0x51, 0x98, 0x69, 0xd9, 0x41, 0x45, + 0x27, 0x1c, 0x67, 0xd9, 0x81, 0x0c, 0x46, 0x44, 0x04, 0x66, 0xd9, 0x01, + 0x45, 0x5d, 0x07, 0x65, 0xd9, 0x41, 0x42, 0x60, 0x01, 0x68, 0xd9, 0x41, + 0x45, 0x27, 0x1c, 0x80, 0xd9, 0x01, 0x46, 0x44, 0x04, 0x7f, 0xd9, 0x01, + 0x45, 0x5d, 0x07, 0x7e, 0xd9, 0x41, 0x08, 0x34, 0x26, 0x06, 0x45, 0x5d, + 0x07, 0xdb, 0xd9, 0x41, 0x08, 0x90, 0xc4, 0x26, 0x06, 0x58, 0x24, 0x01, + 0xff, 0x06, 0x27, 0x1c, 0x11, 0x06, 0x5d, 0x07, 0x01, 0xff, 0x46, 0x3b, + 0x01, 0xce, 0xd9, 0x01, 0x46, 0xdf, 0x09, 0xcc, 0xd9, 0x41, 0x46, 0x3b, + 0x01, 0xcf, 0xd9, 0x01, 0x46, 0xdf, 0x09, 0xcd, 0xd9, 0x41, 0x06, 0x27, + 0x1c, 0x11, 0x06, 0x5d, 0x07, 0x01, 0xff, 0x46, 0x3b, 0x01, 0xbf, 0xd9, + 0x01, 0x46, 0xdf, 0x09, 0xbd, 0xd9, 0x41, 0x46, 0x3b, 0x01, 0xc0, 0xd9, + 0x01, 0x46, 0xdf, 0x09, 0xbe, 0xd9, 0x41, 0x08, 0x34, 0x26, 0x06, 0x45, + 0x5d, 0x07, 0xda, 0xd9, 0x41, 0x08, 0x90, 0xc4, 0x22, 0x06, 0x58, 0x24, + 0x01, 0xff, 0x4c, 0xc3, 0x90, 0xc9, 0xd9, 0x01, 0x4c, 0x43, 0x95, 0xc8, + 0xd9, 0x01, 0x07, 0x6a, 0x1d, 0x01, 0xff, 0x4c, 0xcf, 0x90, 0xcb, 0xd9, + 0x01, 0x4c, 0x4f, 0x95, 0xca, 0xd9, 0x41, 0x06, 0x27, 0x1c, 0x11, 0x06, + 0x5d, 0x07, 0x01, 0xff, 0x46, 0x3b, 0x01, 0xb9, 0xd9, 0x01, 0x46, 0x6a, + 0x1d, 0xbb, 0xd9, 0x41, 0x46, 0x3b, 0x01, 0xba, 0xd9, 0x01, 0x46, 0x6a, + 0x1d, 0xbc, 0xd9, 0x41, 0x14, 0x98, 0x43, 0x06, 0x46, 0x14, 0xd0, 0x29, + 0xd9, 0x41, 0x46, 0x3b, 0x01, 0xf4, 0xd9, 0x01, 0x46, 0xdf, 0x09, 0xf3, + 0xd9, 0x41, 0x4b, 0x13, 0x5a, 0x6c, 0xd9, 0x81, 0x0c, 0x48, 0x34, 0x4d, + 0x6a, 0xd9, 0x01, 0x4a, 0x51, 0x98, 0x6b, 0xd9, 0x41, 0x4b, 0x50, 0x98, + 0x6d, 0xd9, 0x41, 0x44, 0x6e, 0x14, 0x77, 0xd9, 0x01, 0x06, 0x1e, 0x0b, + 0x4f, 0x44, 0x96, 0x10, 0x6e, 0xd9, 0x01, 0x05, 0x9c, 0x13, 0x01, 0xff, + 0x48, 0xc0, 0xc4, 0xd9, 0xd9, 0x01, 0x08, 0x34, 0x26, 0x19, 0x45, 0x27, + 0x1c, 0xd7, 0xd9, 0x81, 0x0c, 0x46, 0x44, 0x04, 0xd6, 0xd9, 0x01, 0x45, + 0x5d, 0x07, 0xd5, 0xd9, 0x41, 0x42, 0x60, 0x01, 0xd8, 0xd9, 0x41, 0x08, + 0x90, 0xc4, 0x11, 0x06, 0x58, 0x24, 0x01, 0xff, 0x45, 0x27, 0x1c, 0xc7, + 0xd9, 0x01, 0x45, 0x5d, 0x07, 0xc6, 0xd9, 0x41, 0x45, 0x27, 0x1c, 0xb8, + 0xd9, 0x01, 0x45, 0x5d, 0x07, 0xb7, 0xd9, 0x41, 0x45, 0x27, 0x1c, 0x76, + 0xd9, 0x01, 0x46, 0x44, 0x04, 0x75, 0xd9, 0x01, 0x45, 0x5d, 0x07, 0x74, + 0xd9, 0x41, 0x43, 0x40, 0x05, 0x73, 0xd9, 0x01, 0x03, 0xbc, 0x3a, 0x01, + 0xff, 0x45, 0x27, 0x1c, 0x7a, 0xd9, 0x01, 0x46, 0x44, 0x04, 0x79, 0xd9, + 0x01, 0x45, 0x5d, 0x07, 0x78, 0xd9, 0x41, 0x06, 0x27, 0x1c, 0x21, 0x07, + 0x44, 0x04, 0x11, 0x06, 0x5d, 0x07, 0x01, 0xff, 0x46, 0x3b, 0x01, 0xea, + 0xd9, 0x01, 0x46, 0xdf, 0x09, 0xe7, 0xd9, 0x41, 0x46, 0x3b, 0x01, 0xeb, + 0xd9, 0x01, 0x46, 0xdf, 0x09, 0xe8, 0xd9, 0x41, 0x46, 0x3b, 0x01, 0xec, + 0xd9, 0x01, 0x46, 0xdf, 0x09, 0xe9, 0xd9, 0x41, 0x05, 0x93, 0xe4, 0x5d, + 0x08, 0xc0, 0x09, 0x1e, 0x08, 0xb0, 0xcb, 0x01, 0xff, 0x45, 0x27, 0x1c, + 0x5b, 0xd9, 0x81, 0x0c, 0x46, 0x44, 0x04, 0x5a, 0xd9, 0x01, 0x45, 0x5d, + 0x07, 0x59, 0xd9, 0x41, 0x42, 0x60, 0x01, 0x5c, 0xd9, 0x41, 0x05, 0x93, + 0xe4, 0x1e, 0x08, 0xb0, 0xcb, 0x01, 0xff, 0x45, 0x27, 0x1c, 0x63, 0xd9, + 0x81, 0x0c, 0x46, 0x44, 0x04, 0x62, 0xd9, 0x01, 0x45, 0x5d, 0x07, 0x61, + 0xd9, 0x41, 0x42, 0x60, 0x01, 0x64, 0xd9, 0x41, 0x45, 0x27, 0x1c, 0x5f, + 0xd9, 0x81, 0x0c, 0x46, 0x44, 0x04, 0x5e, 0xd9, 0x01, 0x45, 0x5d, 0x07, + 0x5d, 0xd9, 0x41, 0x42, 0x60, 0x01, 0x60, 0xd9, 0x41, 0x45, 0x27, 0x1c, + 0x57, 0xd9, 0x81, 0x0c, 0x46, 0x44, 0x04, 0x56, 0xd9, 0x01, 0x45, 0x5d, + 0x07, 0x55, 0xd9, 0x41, 0x42, 0x60, 0x01, 0x58, 0xd9, 0x41, 0xa3, 0xac, + 0x01, 0x45, 0x13, 0x83, 0x41, 0xda, 0x81, 0x95, 0x01, 0x44, 0xbb, 0x73, + 0x4d, 0xda, 0x81, 0x7f, 0x05, 0xf6, 0x04, 0x3d, 0x45, 0x6e, 0xc1, 0x3e, + 0xda, 0x81, 0x27, 0x45, 0x37, 0xeb, 0x50, 0xda, 0x81, 0x11, 0x09, 0x61, + 0xc1, 0x01, 0xff, 0x46, 0x3b, 0x01, 0x58, 0xda, 0x01, 0x46, 0xdf, 0x09, + 0x57, 0xda, 0x41, 0x80, 0x01, 0xff, 0x47, 0x8d, 0x31, 0x51, 0xda, 0x01, + 0x46, 0x2e, 0xe0, 0x52, 0xda, 0x41, 0x80, 0x01, 0xff, 0x44, 0xf6, 0x04, + 0x40, 0xda, 0x01, 0x48, 0x98, 0xcc, 0x3f, 0xda, 0x41, 0x46, 0x12, 0x03, + 0x44, 0xda, 0x01, 0x47, 0x8d, 0x31, 0x45, 0xda, 0x01, 0x44, 0x99, 0x46, + 0x47, 0xda, 0x81, 0x1c, 0x49, 0x83, 0x47, 0x4a, 0xda, 0x81, 0x06, 0x48, + 0x98, 0xcc, 0x46, 0xda, 0x41, 0x80, 0x01, 0xff, 0x48, 0x98, 0xcc, 0x4b, + 0xda, 0x01, 0x44, 0x39, 0xf3, 0x4c, 0xda, 0x41, 0x80, 0x01, 0xff, 0x48, + 0x98, 0xcc, 0x48, 0xda, 0x01, 0x44, 0x39, 0xf3, 0x49, 0xda, 0x41, 0x80, + 0x01, 0xff, 0x47, 0x8d, 0x31, 0x4e, 0xda, 0x01, 0x48, 0x98, 0xcc, 0x4f, + 0xda, 0x41, 0x80, 0x01, 0xff, 0x44, 0xf6, 0x04, 0x43, 0xda, 0x01, 0x48, + 0x98, 0xcc, 0x42, 0xda, 0x41, 0x06, 0x60, 0x1b, 0x06, 0x46, 0x28, 0x19, + 0x56, 0xda, 0x41, 0x47, 0x13, 0xd0, 0x3d, 0xda, 0x01, 0x47, 0x8d, 0x31, + 0x3c, 0xda, 0x01, 0x47, 0x4c, 0x8e, 0x3b, 0xda, 0x41, 0xa9, 0x3e, 0x07, + 0x29, 0x85, 0x01, 0xff, 0x80, 0x0f, 0x8d, 0x01, 0xff, 0x50, 0x46, 0x63, + 0x80, 0xda, 0x01, 0x4f, 0xaf, 0x74, 0x7f, 0xda, 0x41, 0x45, 0x88, 0xe5, + 0x83, 0xda, 0x01, 0x02, 0xb0, 0x01, 0x12, 0x4c, 0x2f, 0x91, 0x86, 0xda, + 0x01, 0x45, 0x69, 0xeb, 0x85, 0xda, 0x01, 0x45, 0x3b, 0x50, 0x82, 0xda, + 0x41, 0x47, 0x8b, 0xce, 0x84, 0xda, 0x01, 0x44, 0xc9, 0x00, 0x81, 0xda, + 0x41, 0x03, 0x98, 0x13, 0x17, 0xb0, 0x01, 0xff, 0x80, 0x06, 0x52, 0x09, + 0x55, 0x53, 0xda, 0x41, 0x50, 0xd6, 0x64, 0x54, 0xda, 0x01, 0x50, 0x46, + 0x68, 0x55, 0xda, 0x41, 0x4b, 0x34, 0x9a, 0x76, 0xda, 0x01, 0x07, 0xcf, + 0xd2, 0x01, 0xff, 0xd1, 0x77, 0xda, 0x01, 0xd2, 0x78, 0xda, 0x01, 0xd3, + 0x79, 0xda, 0x01, 0xd4, 0x7a, 0xda, 0x01, 0xd5, 0x7b, 0xda, 0x01, 0xd6, + 0x7c, 0xda, 0x01, 0xd7, 0x7d, 0xda, 0x41, 0xa1, 0x44, 0x43, 0xe7, 0x01, + 0xff, 0xd9, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x08, 0x12, 0x5e, 0x06, 0x43, + 0xeb, 0x1a, 0x00, 0xda, 0x41, 0x47, 0x11, 0x03, 0x06, 0xda, 0x01, 0x8d, + 0x01, 0xff, 0x0b, 0x7e, 0x49, 0x17, 0x0a, 0x0d, 0x1e, 0x01, 0xff, 0x45, + 0x9b, 0x13, 0x04, 0xda, 0x01, 0x48, 0x34, 0x4d, 0x01, 0xda, 0x01, 0x44, + 0x59, 0x05, 0x02, 0xda, 0x41, 0x45, 0x9b, 0x13, 0x05, 0xda, 0x01, 0x48, + 0x34, 0x4d, 0x03, 0xda, 0x41, 0x42, 0x46, 0x00, 0x6b, 0xda, 0x01, 0x03, + 0xdc, 0x18, 0x01, 0xff, 0x45, 0x04, 0x02, 0x85, 0xd8, 0x81, 0xad, 0x0e, + 0xa3, 0xe0, 0x0b, 0xa6, 0xee, 0x02, 0xa8, 0x39, 0x44, 0x99, 0x46, 0x77, + 0xd8, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x53, 0x6b, 0x49, 0x56, 0xd8, 0x01, + 0x45, 0x8f, 0x13, 0x03, 0xd8, 0x01, 0x49, 0x82, 0xbb, 0x95, 0xd8, 0x01, + 0x48, 0xd0, 0xc8, 0x79, 0xd8, 0x01, 0x4b, 0xa9, 0x18, 0xb2, 0xd8, 0x01, + 0x06, 0x95, 0x13, 0x01, 0xff, 0x47, 0x8d, 0x31, 0x7a, 0xd8, 0x01, 0x44, + 0x94, 0x0a, 0x78, 0xd8, 0x41, 0x44, 0xd9, 0x09, 0x7d, 0xd8, 0x81, 0x4c, + 0x43, 0xad, 0x0e, 0x6b, 0xd8, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x48, 0xd8, + 0xc4, 0x6a, 0xd8, 0x01, 0x12, 0x34, 0x43, 0x26, 0x07, 0x7d, 0x02, 0x06, + 0x4a, 0x69, 0xb0, 0xb9, 0xd8, 0x41, 0x55, 0xa9, 0x18, 0xda, 0xd8, 0x81, + 0x06, 0x45, 0x95, 0x13, 0xca, 0xd8, 0x41, 0x80, 0x01, 0xff, 0x42, 0x9e, + 0x01, 0xd9, 0xd8, 0x01, 0x43, 0x28, 0x08, 0xd8, 0xd8, 0x41, 0x42, 0x9e, + 0x01, 0xbe, 0xd8, 0x01, 0x43, 0x28, 0x08, 0xbd, 0xd8, 0x01, 0x45, 0xd3, + 0x1a, 0xbf, 0xd8, 0x41, 0x80, 0x01, 0xff, 0xa6, 0xce, 0x01, 0x45, 0x8f, + 0x13, 0x04, 0xd8, 0x81, 0x7c, 0x46, 0xae, 0x18, 0x8a, 0xd8, 0x81, 0x5f, + 0x46, 0x7d, 0x02, 0xc5, 0xd8, 0x81, 0x52, 0x48, 0xd0, 0xc8, 0x82, 0xd8, + 0x01, 0x44, 0xf6, 0x04, 0x7b, 0xd8, 0x81, 0x2b, 0x44, 0x22, 0x08, 0xa7, + 0xd8, 0x81, 0x1e, 0x45, 0x5d, 0x07, 0x7e, 0xd8, 0x01, 0x06, 0x95, 0x13, + 0x01, 0xff, 0x53, 0x87, 0x48, 0x84, 0xd8, 0x01, 0x44, 0x94, 0x0a, 0x80, + 0xd8, 0xc1, 0x00, 0x4f, 0xd8, 0x69, 0x83, 0xd8, 0x41, 0x5d, 0x9d, 0x14, + 0xac, 0xd8, 0x41, 0x80, 0x01, 0xff, 0x48, 0xd0, 0xc8, 0x81, 0xd8, 0x01, + 0x06, 0x95, 0x13, 0x01, 0xff, 0x47, 0x8d, 0x31, 0x7c, 0xd8, 0x01, 0x44, + 0x94, 0x0a, 0x7f, 0xd8, 0x41, 0x4c, 0xa8, 0x18, 0xd1, 0xd8, 0x41, 0x80, + 0x01, 0xff, 0x45, 0x8f, 0x13, 0xa2, 0xd8, 0x81, 0x06, 0x45, 0x95, 0x13, + 0x9b, 0xd8, 0x41, 0x46, 0x94, 0x13, 0x9d, 0xd8, 0x41, 0x80, 0x01, 0xff, + 0x46, 0x20, 0x68, 0xdb, 0xd8, 0x01, 0x07, 0x7d, 0x02, 0x2b, 0x4b, 0xa9, + 0x18, 0xc1, 0xd8, 0x01, 0x45, 0x95, 0x13, 0xf0, 0xd8, 0xc1, 0x00, 0x80, + 0x01, 0xff, 0x45, 0x27, 0x1c, 0xef, 0xd8, 0x01, 0x44, 0xf6, 0x04, 0xee, + 0xd8, 0x01, 0xb3, 0x01, 0xff, 0x43, 0x03, 0x00, 0xdd, 0xd8, 0x01, 0x44, + 0x5e, 0x07, 0xf1, 0xd8, 0x41, 0x46, 0xae, 0x18, 0xa6, 0xd8, 0x01, 0x44, + 0x22, 0x08, 0x88, 0xd8, 0xc1, 0x00, 0x4a, 0xb4, 0x18, 0x8d, 0xd8, 0x41, + 0x57, 0x55, 0x2f, 0x55, 0xd8, 0x01, 0x55, 0x6b, 0x1b, 0x4b, 0xd8, 0x41, + 0x43, 0x2b, 0x24, 0x03, 0xd9, 0x81, 0xc8, 0x01, 0x43, 0xd9, 0x01, 0x5a, + 0xd8, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x54, 0xc8, 0x40, 0x5b, 0xd8, 0x01, + 0xa6, 0x61, 0x44, 0x2c, 0x13, 0x5c, 0xd8, 0x81, 0x3b, 0x06, 0x43, 0xd8, + 0x17, 0x06, 0x95, 0x13, 0x01, 0xff, 0x44, 0x81, 0x1b, 0x5f, 0xd8, 0x01, + 0x47, 0x8d, 0x31, 0x60, 0xd8, 0x01, 0x44, 0x94, 0x0a, 0x5d, 0xd8, 0x41, + 0x46, 0x73, 0x02, 0x62, 0xd8, 0x81, 0x0c, 0x50, 0xf6, 0x63, 0x61, 0xd8, + 0x01, 0x46, 0xae, 0x18, 0x65, 0xd8, 0x41, 0x4b, 0x82, 0x4f, 0x63, 0xd8, + 0xc1, 0x00, 0x45, 0x80, 0x1b, 0x64, 0xd8, 0x41, 0x80, 0x01, 0xff, 0x53, + 0x6b, 0x49, 0x4d, 0xd8, 0x81, 0x06, 0x4a, 0x83, 0x4f, 0x5e, 0xd8, 0x41, + 0x80, 0x01, 0xff, 0x44, 0x81, 0x1b, 0x51, 0xd8, 0x01, 0x49, 0x15, 0xb9, + 0x4f, 0xd8, 0x41, 0x52, 0x55, 0x2f, 0x4c, 0xd8, 0x81, 0x23, 0x4b, 0x6b, + 0x1b, 0x44, 0xd8, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x44, 0x81, 0x1b, 0x45, + 0xd8, 0x01, 0x49, 0xb5, 0x18, 0x47, 0xd8, 0x81, 0x06, 0x46, 0x20, 0x68, + 0x46, 0xd8, 0x41, 0x46, 0x42, 0xd8, 0x48, 0xd8, 0x41, 0x80, 0x01, 0xff, + 0x44, 0x81, 0x1b, 0x50, 0xd8, 0x01, 0x49, 0x15, 0xb9, 0x4e, 0xd8, 0x01, + 0x46, 0x20, 0x68, 0x57, 0xd8, 0x81, 0x06, 0x4d, 0x87, 0x31, 0x52, 0xd8, + 0x41, 0x80, 0x01, 0xff, 0x48, 0xd0, 0xc8, 0x59, 0xd8, 0x01, 0x4a, 0x83, + 0x4f, 0x58, 0xd8, 0x41, 0x80, 0x01, 0xff, 0x5b, 0x6a, 0x1b, 0x4a, 0xd8, + 0x01, 0x44, 0x2c, 0x13, 0x04, 0xd9, 0x01, 0x45, 0x8f, 0x13, 0x00, 0xd8, + 0x81, 0x85, 0x03, 0x07, 0xae, 0x18, 0xb2, 0x02, 0x07, 0x7d, 0x02, 0xbd, + 0x01, 0x05, 0x22, 0x08, 0x7f, 0x45, 0x95, 0x13, 0xf5, 0xd8, 0xc1, 0x00, + 0x80, 0x01, 0xff, 0x08, 0xc0, 0x09, 0x58, 0x47, 0x8d, 0x31, 0xfa, 0xd8, + 0x01, 0x44, 0x2c, 0x13, 0xf6, 0xd8, 0x01, 0x05, 0x16, 0x02, 0x3c, 0x05, + 0x94, 0x0a, 0x26, 0x06, 0x4b, 0x25, 0x01, 0xff, 0x4c, 0x6a, 0x1b, 0x01, + 0xd9, 0x01, 0x4a, 0xb9, 0xab, 0x08, 0xd8, 0x01, 0x49, 0x82, 0xbb, 0x93, + 0xd8, 0x01, 0xb4, 0x01, 0xff, 0x4c, 0xbb, 0x8f, 0x00, 0xd9, 0x01, 0x4a, + 0xeb, 0xa3, 0xfe, 0xd8, 0x41, 0x44, 0x81, 0x1b, 0xf9, 0xd8, 0x01, 0x49, + 0xb5, 0x18, 0xf8, 0xd8, 0x01, 0x48, 0xe3, 0x25, 0xf7, 0xd8, 0x41, 0x54, + 0x80, 0x42, 0x02, 0xd9, 0x01, 0x4b, 0xea, 0xa3, 0xff, 0xd8, 0x41, 0x4c, + 0x03, 0x90, 0xfb, 0xd8, 0x81, 0x0c, 0x4b, 0xa2, 0x18, 0xfc, 0xd8, 0x01, + 0x4b, 0xa9, 0x18, 0xfd, 0xd8, 0x41, 0x49, 0xc0, 0x69, 0x2c, 0xd8, 0x41, + 0x44, 0xa5, 0x01, 0xab, 0xd8, 0x01, 0x45, 0x8f, 0x13, 0xb7, 0xd8, 0x01, + 0x46, 0xae, 0x18, 0xb0, 0xd8, 0x01, 0x46, 0x7d, 0x02, 0xb4, 0xd8, 0x81, + 0x12, 0x4e, 0x85, 0x42, 0xaf, 0xd8, 0x01, 0x45, 0x95, 0x13, 0xb8, 0xd8, + 0x01, 0x42, 0x50, 0x02, 0xae, 0xd8, 0x41, 0x80, 0x01, 0xff, 0x49, 0xb5, + 0x18, 0xb5, 0xd8, 0x01, 0x4f, 0x85, 0x42, 0xb6, 0xd8, 0x41, 0x4f, 0x40, + 0x6b, 0x1c, 0xd8, 0x01, 0x44, 0xa5, 0x01, 0xc4, 0xd8, 0x01, 0x46, 0xae, + 0x18, 0xcc, 0xd8, 0x01, 0xb2, 0x50, 0x06, 0x95, 0x13, 0x0d, 0x42, 0x50, + 0x02, 0xc6, 0xd8, 0xc1, 0x00, 0x4b, 0x82, 0x4f, 0xc9, 0xd8, 0x41, 0x07, + 0xdf, 0xce, 0x24, 0xa3, 0x0c, 0x4f, 0x01, 0x6e, 0x30, 0xd8, 0x01, 0x46, + 0xae, 0x18, 0xcb, 0xd8, 0x41, 0x0d, 0x72, 0x84, 0x06, 0x4e, 0x21, 0x7e, + 0x36, 0xd8, 0x41, 0x46, 0x20, 0x68, 0x39, 0xd8, 0x01, 0x42, 0x50, 0x02, + 0x38, 0xd8, 0x41, 0x48, 0x08, 0x6e, 0x42, 0xd8, 0x01, 0x0a, 0x47, 0xaf, + 0x01, 0xff, 0x47, 0x27, 0x1f, 0x41, 0xd8, 0x01, 0x42, 0x50, 0x02, 0x40, + 0xd8, 0x41, 0x4d, 0x86, 0x42, 0xc8, 0xd8, 0x01, 0x4a, 0xaa, 0x18, 0xcd, + 0xd8, 0x41, 0x44, 0x81, 0x1b, 0x98, 0xd8, 0x01, 0x44, 0xa5, 0x01, 0x8e, + 0xd8, 0x81, 0x27, 0x45, 0x8f, 0x13, 0xa0, 0xd8, 0x81, 0x1a, 0x4e, 0x85, + 0x42, 0x97, 0xd8, 0x01, 0xb4, 0x06, 0x42, 0x50, 0x02, 0x92, 0xd8, 0x41, + 0x44, 0x96, 0x13, 0x9a, 0xd8, 0x01, 0x4c, 0x7b, 0x93, 0x99, 0xd8, 0x41, + 0x46, 0x94, 0x13, 0x9c, 0xd8, 0x41, 0x80, 0x01, 0xff, 0x4e, 0xbd, 0x7a, + 0x91, 0xd8, 0x01, 0x07, 0x5a, 0xd5, 0x01, 0xff, 0x46, 0x68, 0x41, 0x90, + 0xd8, 0x01, 0x48, 0x34, 0x4d, 0x8f, 0xd8, 0x41, 0x80, 0x01, 0xff, 0x44, + 0x81, 0x1b, 0x06, 0xd8, 0x81, 0xf2, 0x03, 0x46, 0xca, 0xda, 0x0a, 0xd8, + 0x01, 0x46, 0x20, 0x68, 0x0b, 0xd8, 0x81, 0xce, 0x03, 0x46, 0x7d, 0x02, + 0x0e, 0xd8, 0x81, 0xcd, 0x01, 0xb2, 0xbe, 0x01, 0x06, 0x95, 0x13, 0x18, + 0x50, 0x16, 0x68, 0x13, 0xd8, 0xc1, 0x00, 0x07, 0x94, 0x13, 0x01, 0xff, + 0x49, 0xb5, 0x18, 0x25, 0xd8, 0x01, 0x44, 0x94, 0x0a, 0x24, 0xd8, 0x41, + 0x07, 0xdf, 0xce, 0x91, 0x01, 0xa3, 0x5f, 0x0e, 0xf3, 0x77, 0x4f, 0x44, + 0xac, 0x0e, 0xe6, 0xd8, 0x81, 0x37, 0x44, 0x94, 0x0a, 0xdc, 0xd8, 0xc1, + 0x00, 0x80, 0x01, 0xff, 0x49, 0xd5, 0xb6, 0xe2, 0xd8, 0x01, 0x06, 0x8f, + 0x13, 0x17, 0x06, 0x95, 0x13, 0x01, 0xff, 0x44, 0x81, 0x1b, 0xe0, 0xd8, + 0x01, 0x49, 0xb5, 0x18, 0xdf, 0xd8, 0x01, 0x48, 0xe3, 0x25, 0xde, 0xd8, + 0x41, 0x44, 0x81, 0x1b, 0xe1, 0xd8, 0x01, 0x45, 0x20, 0x68, 0xe3, 0xd8, + 0x41, 0x0a, 0x4b, 0x7b, 0x01, 0xff, 0x46, 0x20, 0x68, 0x43, 0xd8, 0x01, + 0x42, 0x50, 0x02, 0x31, 0xd8, 0x41, 0x44, 0x81, 0x1b, 0xe5, 0xd8, 0x01, + 0x48, 0x34, 0x4d, 0xe4, 0xd8, 0x41, 0x45, 0x13, 0x03, 0xeb, 0xd8, 0x81, + 0x23, 0xb5, 0x01, 0xff, 0x4e, 0x49, 0x7b, 0x37, 0xd8, 0x01, 0xb2, 0x01, + 0xff, 0x45, 0xdb, 0xc4, 0xe7, 0xd8, 0x01, 0x09, 0x9e, 0x13, 0x01, 0xff, + 0x46, 0xa7, 0x13, 0xe8, 0xd8, 0x01, 0x45, 0xd3, 0x1a, 0xea, 0xd8, 0x41, + 0x4b, 0x4c, 0x7b, 0x3c, 0xd8, 0x41, 0x4c, 0xf7, 0x8f, 0x3b, 0xd8, 0x01, + 0x4d, 0x4a, 0x87, 0x3a, 0xd8, 0x41, 0x4d, 0x86, 0x42, 0x09, 0xd8, 0x01, + 0x4a, 0xaa, 0x18, 0xba, 0xd8, 0x41, 0x80, 0x01, 0xff, 0x44, 0x81, 0x1b, + 0x10, 0xd8, 0x81, 0xe8, 0x01, 0xa3, 0x7d, 0x46, 0x20, 0x68, 0x12, 0xd8, + 0x81, 0x70, 0x46, 0xae, 0x18, 0xa4, 0xd8, 0x01, 0xb2, 0x4c, 0x53, 0x34, + 0x4d, 0x20, 0xd8, 0x01, 0x45, 0x95, 0x13, 0x1e, 0xd8, 0x81, 0x06, 0x57, + 0x7d, 0x31, 0x27, 0xd8, 0x41, 0x80, 0x01, 0xff, 0x46, 0x2f, 0x0c, 0x3f, + 0xd8, 0x81, 0x29, 0x44, 0x81, 0x1b, 0x22, 0xd8, 0x01, 0xa3, 0x0f, 0xa8, + 0x01, 0xff, 0x45, 0x21, 0x68, 0x2b, 0xd8, 0x01, 0x45, 0x02, 0x6e, 0x2a, + 0xd8, 0x41, 0x46, 0x46, 0x15, 0x29, 0xd8, 0x01, 0x4f, 0x49, 0x71, 0x3d, + 0xd8, 0x01, 0x45, 0x21, 0x7e, 0x28, 0xd8, 0x41, 0x44, 0x17, 0x11, 0x3e, + 0xd8, 0x41, 0x4e, 0x86, 0x42, 0x11, 0xd8, 0x01, 0x43, 0xa1, 0x01, 0x86, + 0xd8, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x44, 0x81, 0x1b, 0x8b, 0xd8, 0x01, + 0x49, 0xb5, 0x18, 0x8c, 0xd8, 0x41, 0x52, 0x7b, 0x4f, 0x23, 0xd8, 0x41, + 0x48, 0xb6, 0x18, 0x15, 0xd8, 0x81, 0x18, 0x04, 0x96, 0x10, 0x01, 0xff, + 0x47, 0xad, 0x18, 0xa9, 0xd8, 0x01, 0x42, 0x05, 0x00, 0x1a, 0xd8, 0xc1, + 0x00, 0x4b, 0x82, 0x4f, 0x33, 0xd8, 0x41, 0x80, 0x01, 0xff, 0x46, 0xca, + 0xda, 0x18, 0xd8, 0x81, 0x3a, 0x46, 0x20, 0x68, 0x19, 0xd8, 0x81, 0x2d, + 0x4a, 0xb9, 0xab, 0x16, 0xd8, 0x01, 0x4b, 0x88, 0x9f, 0x17, 0xd8, 0x01, + 0x06, 0x95, 0x13, 0x01, 0xff, 0x47, 0x8d, 0x31, 0x34, 0xd8, 0x01, 0x44, + 0x94, 0x0a, 0x2d, 0xd8, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x44, 0x81, 0x1b, + 0x2f, 0xd8, 0x01, 0x49, 0xb5, 0x18, 0x2e, 0xd8, 0x41, 0x4b, 0x82, 0x4f, + 0x32, 0xd8, 0x41, 0x4e, 0x86, 0x31, 0x35, 0xd8, 0x41, 0x4f, 0xba, 0x69, + 0x21, 0xd8, 0x41, 0x80, 0x01, 0xff, 0x43, 0x13, 0x01, 0x0c, 0xd8, 0x01, + 0x49, 0x4e, 0x7b, 0x14, 0xd8, 0xc1, 0x00, 0x4b, 0x82, 0x4f, 0x26, 0xd8, + 0x41, 0x4c, 0x6b, 0x8b, 0x1d, 0xd8, 0x41, 0x45, 0x13, 0x03, 0x76, 0xd8, + 0x81, 0xca, 0x01, 0x43, 0x76, 0xd4, 0x66, 0xd8, 0x81, 0x8f, 0x01, 0xb5, + 0x01, 0xff, 0xf0, 0x6d, 0xd8, 0x81, 0x1c, 0x46, 0xda, 0xc4, 0x75, 0xd8, + 0xc1, 0x00, 0x80, 0x01, 0xff, 0x54, 0x34, 0x43, 0xbc, 0xd8, 0x01, 0x55, + 0xe9, 0x3c, 0xcf, 0xd8, 0x01, 0x44, 0xf6, 0x04, 0x74, 0xd8, 0x41, 0x80, + 0x01, 0xff, 0x53, 0x6b, 0x49, 0x53, 0xd8, 0x81, 0x5b, 0x45, 0x8f, 0x13, + 0x02, 0xd8, 0x81, 0x3e, 0x52, 0xa2, 0x18, 0xd0, 0xd8, 0x01, 0x48, 0xd0, + 0xc8, 0x71, 0xd8, 0x01, 0x44, 0xf6, 0x04, 0x6c, 0xd8, 0x81, 0x11, 0x06, + 0x95, 0x13, 0x01, 0xff, 0x47, 0x8d, 0x31, 0x73, 0xd8, 0x01, 0x44, 0x94, + 0x0a, 0x6f, 0xd8, 0x41, 0x80, 0x01, 0xff, 0x48, 0xd0, 0xc8, 0x70, 0xd8, + 0x01, 0x06, 0x95, 0x13, 0x01, 0xff, 0x47, 0x8d, 0x31, 0x72, 0xd8, 0x01, + 0x44, 0x94, 0x0a, 0x6e, 0xd8, 0x41, 0x80, 0x01, 0xff, 0x4b, 0xa9, 0x18, + 0xc0, 0xd8, 0x01, 0x45, 0x95, 0x13, 0xec, 0xd8, 0xc1, 0x00, 0x45, 0xf5, + 0x04, 0xed, 0xd8, 0x41, 0x45, 0xf5, 0x04, 0x54, 0xd8, 0x41, 0x80, 0x01, + 0xff, 0x56, 0x6a, 0x1b, 0x49, 0xd8, 0x01, 0x5e, 0x8f, 0x13, 0xe9, 0xd8, + 0x01, 0x5c, 0xa2, 0x18, 0xd6, 0xd8, 0x81, 0x17, 0x48, 0xd0, 0xc8, 0x68, + 0xd8, 0x01, 0x06, 0x95, 0x13, 0x01, 0xff, 0x47, 0x8d, 0x31, 0x69, 0xd8, + 0x01, 0x44, 0x94, 0x0a, 0x67, 0xd8, 0x41, 0x45, 0x40, 0x3e, 0xd7, 0xd8, + 0x41, 0x80, 0x01, 0xff, 0x45, 0x8f, 0x13, 0x01, 0xd8, 0x81, 0x2d, 0x07, + 0xae, 0x18, 0x1d, 0x07, 0x7d, 0x02, 0x06, 0x4b, 0xa9, 0x18, 0xb1, 0xd8, + 0x41, 0x4b, 0xa9, 0x18, 0xce, 0xd8, 0x81, 0x06, 0x42, 0x50, 0x02, 0xc7, + 0xd8, 0x41, 0x45, 0x80, 0x1b, 0xd5, 0xd8, 0x41, 0x45, 0x8f, 0x13, 0xa1, + 0xd8, 0x01, 0x42, 0x50, 0x02, 0x94, 0xd8, 0x41, 0x80, 0x01, 0xff, 0x44, + 0x81, 0x1b, 0x07, 0xd8, 0x01, 0x45, 0x20, 0x68, 0x0d, 0xd8, 0x01, 0x46, + 0x7d, 0x02, 0x0f, 0xd8, 0x81, 0x06, 0x4b, 0xa9, 0x18, 0xbb, 0xd8, 0x41, + 0x80, 0x01, 0xff, 0x05, 0x95, 0x10, 0x12, 0x46, 0xae, 0x18, 0xa5, 0xd8, + 0x01, 0x44, 0x22, 0x08, 0x87, 0xd8, 0x01, 0x45, 0x95, 0x13, 0x1f, 0xd8, + 0x41, 0x47, 0xad, 0x18, 0xaa, 0xd8, 0x01, 0x42, 0x05, 0x00, 0x1b, 0xd8, + 0x41, 0x80, 0x01, 0xff, 0x45, 0x8f, 0x13, 0x05, 0xd8, 0x81, 0x45, 0x07, + 0xae, 0x18, 0x27, 0x52, 0xa2, 0x18, 0xd4, 0xd8, 0x81, 0x11, 0x05, 0x22, + 0x08, 0x01, 0xff, 0x5d, 0x85, 0x15, 0xad, 0xd8, 0x01, 0x46, 0xae, 0x18, + 0xb3, 0xd8, 0x41, 0x80, 0x01, 0xff, 0x42, 0x9e, 0x01, 0xd3, 0xd8, 0x01, + 0x43, 0x28, 0x08, 0xd2, 0xd8, 0x41, 0x45, 0x8f, 0x13, 0xa3, 0xd8, 0x81, + 0x06, 0x42, 0x50, 0x02, 0x96, 0xd8, 0x41, 0x52, 0x8d, 0x4f, 0x9f, 0xd8, + 0xc1, 0x00, 0x44, 0x17, 0x11, 0x9e, 0xd8, 0x41, 0x80, 0x01, 0xff, 0x07, + 0x7d, 0x02, 0x23, 0x4b, 0xa9, 0x18, 0xc3, 0xd8, 0x81, 0x16, 0x45, 0x95, + 0x13, 0xf4, 0xd8, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x42, 0x9e, 0x01, 0xf3, + 0xd8, 0x01, 0x43, 0x28, 0x08, 0xf2, 0xd8, 0x41, 0x44, 0x17, 0x11, 0xc2, + 0xd8, 0x41, 0x46, 0xae, 0x18, 0xa8, 0xd8, 0x01, 0x44, 0x22, 0x08, 0x89, + 0xd8, 0x41, 0x47, 0xc0, 0x09, 0x0a, 0xd9, 0x01, 0x48, 0x60, 0x44, 0x09, + 0xd9, 0x01, 0x46, 0xdf, 0x09, 0x08, 0xd9, 0x41, 0x1c, 0xfe, 0x16, 0x72, + 0xa9, 0x52, 0xac, 0x1c, 0x08, 0x60, 0xc9, 0x06, 0x48, 0x82, 0x16, 0x88, + 0xda, 0x41, 0x47, 0x13, 0xd0, 0x12, 0xda, 0x01, 0x47, 0x4c, 0x8e, 0x11, + 0xda, 0x01, 0x48, 0x98, 0xcc, 0x13, 0xda, 0x41, 0x04, 0xfe, 0x07, 0x06, + 0x5a, 0x6a, 0x21, 0x70, 0xda, 0x41, 0x06, 0x27, 0x1c, 0x1a, 0xb3, 0x01, + 0xff, 0x49, 0x54, 0x6c, 0x1f, 0xd9, 0x01, 0x05, 0x5e, 0x07, 0x01, 0xff, + 0x48, 0x60, 0x44, 0x1e, 0xd9, 0x01, 0x46, 0xdf, 0x09, 0x1c, 0xd9, 0x41, + 0x48, 0x60, 0x44, 0x1d, 0xd9, 0x01, 0x46, 0xdf, 0x09, 0x1b, 0xd9, 0x41, + 0x0c, 0x53, 0x91, 0x06, 0x44, 0xda, 0x09, 0x7e, 0xda, 0x41, 0xd2, 0x9b, + 0xda, 0x01, 0xd3, 0x9c, 0xda, 0x01, 0xd4, 0x9d, 0xda, 0x01, 0xd5, 0x9e, + 0xda, 0x01, 0xd6, 0x9f, 0xda, 0x41, 0x4f, 0x20, 0x6d, 0x07, 0xda, 0x01, + 0x4a, 0xd5, 0xb2, 0x08, 0xda, 0xc1, 0x00, 0x48, 0x4e, 0x0d, 0x09, 0xda, + 0x41, 0x43, 0x74, 0x1a, 0x30, 0xda, 0x01, 0x49, 0x73, 0xc1, 0x6c, 0xda, + 0x01, 0x02, 0x4d, 0x00, 0x01, 0xff, 0x80, 0xb2, 0x01, 0x0f, 0x8b, 0x6b, + 0x9b, 0x01, 0x05, 0x96, 0xe6, 0x4e, 0x07, 0xb3, 0xd2, 0x38, 0x02, 0x31, + 0x01, 0x01, 0xff, 0x46, 0xa2, 0x0d, 0x16, 0xda, 0x01, 0x05, 0x22, 0x00, + 0x1d, 0x44, 0xf6, 0x04, 0x14, 0xda, 0x01, 0x48, 0x28, 0xcb, 0x15, 0xda, + 0x01, 0x04, 0xd5, 0x1b, 0x01, 0xff, 0x45, 0xf5, 0x04, 0x1a, 0xda, 0x01, + 0x4d, 0x6d, 0x86, 0x1c, 0xda, 0x41, 0x46, 0xa2, 0x0d, 0x1b, 0xda, 0x01, + 0x44, 0xf6, 0x04, 0x19, 0xda, 0x41, 0x44, 0xa5, 0x01, 0x1f, 0xda, 0x01, + 0x4a, 0x6b, 0x47, 0x20, 0xda, 0x01, 0x42, 0x50, 0x02, 0x1e, 0xda, 0x41, + 0x0b, 0x7e, 0x49, 0x29, 0x0a, 0x0d, 0x1e, 0x01, 0xff, 0xa3, 0x16, 0x48, + 0x34, 0x4d, 0x21, 0xda, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x4b, 0x13, 0x5a, + 0x23, 0xda, 0x01, 0x46, 0x3b, 0x01, 0x22, 0xda, 0x41, 0x47, 0x2c, 0x0b, + 0x29, 0xda, 0x01, 0x45, 0xbf, 0x22, 0x27, 0xda, 0x41, 0x46, 0x68, 0x41, + 0x28, 0xda, 0x01, 0x48, 0x34, 0x4d, 0x24, 0xda, 0xc1, 0x00, 0x80, 0x01, + 0xff, 0x4b, 0x13, 0x5a, 0x26, 0xda, 0x01, 0x46, 0x3b, 0x01, 0x25, 0xda, + 0x41, 0x44, 0xa5, 0x01, 0x0c, 0xda, 0x01, 0x47, 0x4c, 0x8e, 0x0b, 0xda, + 0x01, 0x42, 0x50, 0x02, 0x0a, 0xda, 0x41, 0x06, 0x34, 0xda, 0x06, 0x44, + 0x1e, 0xa5, 0x1d, 0xda, 0x41, 0x48, 0x60, 0x44, 0x18, 0xda, 0x01, 0x46, + 0xdf, 0x09, 0x17, 0xda, 0x41, 0x0f, 0x39, 0x72, 0x48, 0x07, 0xec, 0xd7, + 0x01, 0xff, 0x0a, 0xd6, 0x3d, 0x33, 0x50, 0x16, 0x63, 0xfd, 0xd9, 0x01, + 0x44, 0xb5, 0xef, 0xf7, 0xd9, 0x01, 0x47, 0x63, 0xd1, 0xfe, 0xd9, 0x01, + 0x47, 0x69, 0x43, 0xfa, 0xd9, 0x01, 0xb3, 0x06, 0x45, 0x37, 0xeb, 0xf9, + 0xd9, 0x41, 0x4b, 0x6d, 0x9d, 0xfb, 0xd9, 0x81, 0x06, 0x43, 0x13, 0x01, + 0xf8, 0xd9, 0x41, 0x4c, 0x12, 0x5a, 0xfc, 0xd9, 0x41, 0x45, 0x27, 0x1c, + 0xf6, 0xd9, 0x01, 0x45, 0x5d, 0x07, 0xf5, 0xd9, 0x41, 0x4c, 0x47, 0x8e, + 0x0e, 0xda, 0x01, 0x08, 0x97, 0x92, 0x06, 0x4a, 0xcb, 0xb2, 0x0f, 0xda, + 0x41, 0x44, 0xa5, 0x01, 0x0d, 0xda, 0x01, 0x42, 0x50, 0x02, 0x10, 0xda, + 0x41, 0x06, 0x32, 0xa0, 0x0f, 0xaf, 0x01, 0xff, 0x43, 0xd7, 0x02, 0x8a, + 0xda, 0x01, 0x43, 0x15, 0x05, 0x87, 0xda, 0x41, 0x47, 0x4c, 0x8e, 0x2b, + 0xda, 0x01, 0x46, 0x4a, 0xdf, 0x2a, 0xda, 0x01, 0x46, 0x2e, 0xe0, 0x2c, + 0xda, 0x41, 0x05, 0xba, 0xe5, 0x17, 0x04, 0xa2, 0xea, 0x01, 0xff, 0x47, + 0xc0, 0x09, 0x10, 0xd9, 0x01, 0x48, 0x60, 0x44, 0x0f, 0xd9, 0x01, 0x46, + 0xdf, 0x09, 0x0e, 0xd9, 0x41, 0x46, 0x96, 0xdb, 0x3a, 0xda, 0x01, 0x46, + 0xf8, 0xdc, 0x39, 0xda, 0x41, 0x04, 0xc7, 0x8c, 0x11, 0x04, 0x2e, 0xe0, + 0x01, 0xff, 0x50, 0x66, 0x60, 0x38, 0xda, 0x01, 0x46, 0x05, 0x06, 0x36, + 0xda, 0x41, 0x50, 0x66, 0x60, 0x37, 0xda, 0x01, 0x47, 0x7b, 0x67, 0x35, + 0xda, 0x41, 0x05, 0x92, 0xe5, 0xb4, 0x01, 0xa5, 0x01, 0xff, 0x0c, 0xeb, + 0x95, 0x3e, 0x05, 0xf4, 0x45, 0x01, 0xff, 0x06, 0x0c, 0x03, 0x1d, 0x06, + 0xad, 0x02, 0x01, 0xff, 0x53, 0x1f, 0x49, 0x9f, 0xf5, 0x01, 0x53, 0xe7, + 0x4a, 0x98, 0xf5, 0x01, 0x54, 0x8e, 0x22, 0x99, 0xf5, 0x01, 0x51, 0xc4, + 0x5e, 0x9e, 0xf5, 0x41, 0x53, 0x1f, 0x49, 0xa1, 0xf5, 0x01, 0x53, 0xe7, + 0x4a, 0x9a, 0xf5, 0x01, 0x54, 0x8e, 0x22, 0x9b, 0xf5, 0x01, 0x51, 0xc4, + 0x5e, 0xa0, 0xf5, 0x41, 0x90, 0x49, 0x91, 0x1f, 0x92, 0x01, 0xff, 0xd0, + 0x53, 0x09, 0x01, 0xd1, 0x54, 0x09, 0x01, 0xd2, 0x55, 0x09, 0x01, 0xd3, + 0x56, 0x09, 0x01, 0xd4, 0x57, 0x09, 0x01, 0xd5, 0x58, 0x09, 0x01, 0xd6, + 0x59, 0x09, 0x41, 0xd0, 0x49, 0x09, 0x01, 0xd1, 0x4a, 0x09, 0x01, 0xd2, + 0x4b, 0x09, 0x01, 0xd3, 0x4c, 0x09, 0x01, 0xd4, 0x4d, 0x09, 0x01, 0xd5, + 0x4e, 0x09, 0x01, 0xd6, 0x4f, 0x09, 0x01, 0xd7, 0x50, 0x09, 0x01, 0xd8, + 0x51, 0x09, 0x01, 0xd9, 0x52, 0x09, 0x41, 0xd1, 0x40, 0x09, 0x01, 0xd2, + 0x41, 0x09, 0x01, 0xd3, 0x42, 0x09, 0x01, 0xd4, 0x43, 0x09, 0x01, 0xd5, + 0x44, 0x09, 0x01, 0xd6, 0x45, 0x09, 0x01, 0xd7, 0x46, 0x09, 0x01, 0xd8, + 0x47, 0x09, 0x01, 0xd9, 0x48, 0x09, 0x41, 0xa4, 0xb8, 0x04, 0x50, 0xb6, + 0x62, 0xc9, 0x15, 0x01, 0x07, 0xec, 0x05, 0x86, 0x02, 0x10, 0x66, 0x66, + 0xf5, 0x01, 0xb3, 0x43, 0x0b, 0x40, 0x77, 0x01, 0xff, 0xa1, 0x25, 0xe5, + 0xb8, 0x15, 0x01, 0xe9, 0xb0, 0x15, 0x81, 0x18, 0xef, 0xba, 0x15, 0x01, + 0xf5, 0xb2, 0x15, 0x81, 0x0b, 0x49, 0x22, 0xc1, 0xb4, 0x15, 0xc1, 0x00, + 0xf2, 0xb5, 0x15, 0x41, 0xf5, 0xb3, 0x15, 0x41, 0xe9, 0xb1, 0x15, 0x41, + 0xe1, 0xaf, 0x15, 0x01, 0xe9, 0xb9, 0x15, 0x01, 0x4a, 0x85, 0xad, 0xdc, + 0x15, 0x81, 0x04, 0xf5, 0xbb, 0x15, 0x41, 0xf5, 0xdd, 0x15, 0x41, 0xa5, + 0x2e, 0x04, 0x5b, 0x03, 0x01, 0xff, 0x48, 0x3c, 0x16, 0xbd, 0x15, 0x01, + 0x4b, 0xd7, 0x23, 0xbc, 0x15, 0x01, 0x45, 0x3f, 0x3f, 0xc0, 0x15, 0x01, + 0x47, 0xd8, 0xd5, 0xc1, 0x15, 0x01, 0x02, 0x02, 0x00, 0x01, 0xff, 0x44, + 0xe5, 0x23, 0xbf, 0x15, 0x01, 0x45, 0xec, 0x4b, 0xbe, 0x15, 0x41, 0x0b, + 0x97, 0x9a, 0x11, 0x08, 0xda, 0x20, 0x01, 0xff, 0x43, 0x16, 0x00, 0xc5, + 0x15, 0x01, 0x43, 0x23, 0x0a, 0xc4, 0x15, 0x41, 0x4b, 0x3c, 0x9b, 0xcf, + 0x15, 0x81, 0x5e, 0x05, 0x51, 0x00, 0x01, 0xff, 0x0c, 0x63, 0x8d, 0x43, + 0x50, 0x06, 0x62, 0xd1, 0x15, 0x01, 0x53, 0x3d, 0x4c, 0xd3, 0x15, 0x01, + 0x10, 0x46, 0x66, 0x21, 0x52, 0x1b, 0x55, 0xd4, 0x15, 0x01, 0x03, 0x19, + 0x01, 0x01, 0xff, 0x09, 0xa4, 0xb7, 0x06, 0x4d, 0x43, 0x4c, 0xd2, 0x15, + 0x41, 0x50, 0xf6, 0x61, 0xcb, 0x15, 0x01, 0x52, 0x05, 0x56, 0xca, 0x15, + 0x41, 0x49, 0x47, 0x4c, 0xcc, 0x15, 0x01, 0x50, 0x06, 0x62, 0xcd, 0x15, + 0x01, 0x50, 0xc6, 0x67, 0xce, 0x15, 0x41, 0x4f, 0x4d, 0x6d, 0xd7, 0x15, + 0x01, 0x44, 0x46, 0x66, 0xd5, 0x15, 0x01, 0x4e, 0xa3, 0x7d, 0xd6, 0x15, + 0x41, 0x4a, 0x71, 0x96, 0xd0, 0x15, 0x41, 0xd1, 0xc6, 0x15, 0x01, 0xd2, + 0xc7, 0x15, 0x01, 0xd3, 0xc8, 0x15, 0x41, 0xe1, 0x80, 0x15, 0x81, 0x8f, + 0x02, 0xa2, 0x82, 0x02, 0xa3, 0xf5, 0x01, 0xa4, 0xdc, 0x01, 0xe5, 0x8a, + 0x15, 0x01, 0xa7, 0xcb, 0x01, 0x42, 0x22, 0x00, 0xae, 0x15, 0x01, 0xe9, + 0x82, 0x15, 0x81, 0xbb, 0x01, 0xaa, 0xae, 0x01, 0xab, 0xa1, 0x01, 0x42, + 0x74, 0x00, 0xa9, 0x15, 0x01, 0x42, 0x6c, 0x00, 0xa6, 0x15, 0x01, 0xae, + 0x7d, 0xef, 0x8c, 0x15, 0x01, 0xb0, 0x6d, 0x42, 0x71, 0x00, 0xa8, 0x15, + 0x01, 0xb3, 0x55, 0xb4, 0x2c, 0xf5, 0x84, 0x15, 0x81, 0x23, 0xb6, 0x06, + 0x42, 0xbc, 0x22, 0xa7, 0x15, 0x41, 0xe1, 0xaa, 0x15, 0x01, 0x07, 0x23, + 0xc1, 0x01, 0xff, 0xec, 0x88, 0x15, 0x81, 0x09, 0xf2, 0x86, 0x15, 0xc1, + 0x00, 0xf2, 0x87, 0x15, 0x41, 0xec, 0x89, 0x15, 0x41, 0xf5, 0x85, 0x15, + 0x41, 0xe1, 0x9d, 0x15, 0x01, 0xa8, 0x17, 0xb4, 0x0b, 0x55, 0x20, 0x3f, + 0xd9, 0x15, 0xc1, 0x00, 0xe9, 0xda, 0x15, 0x41, 0xe1, 0x98, 0x15, 0x01, + 0x42, 0x22, 0x00, 0x99, 0x15, 0x41, 0xe1, 0x9e, 0x15, 0x01, 0x56, 0xc3, + 0x36, 0xd8, 0x15, 0x41, 0xe1, 0xad, 0x15, 0x01, 0x42, 0x22, 0x00, 0xab, + 0x15, 0x01, 0x42, 0x40, 0x06, 0xac, 0x15, 0x41, 0xe1, 0xa2, 0x15, 0x01, + 0x42, 0x22, 0x00, 0xa3, 0x15, 0x41, 0xe1, 0xa1, 0x15, 0x01, 0x42, 0x24, + 0x02, 0x92, 0x15, 0x01, 0x42, 0x2a, 0x05, 0x9c, 0x15, 0x01, 0x42, 0xbc, + 0x22, 0x97, 0x15, 0x41, 0xe1, 0x8e, 0x15, 0x01, 0x42, 0x22, 0x00, 0x8f, + 0x15, 0x41, 0xe1, 0x95, 0x15, 0x01, 0x42, 0x22, 0x00, 0x96, 0x15, 0x41, + 0xe9, 0x83, 0x15, 0x41, 0xe1, 0x90, 0x15, 0x01, 0x42, 0x22, 0x00, 0x91, + 0x15, 0x41, 0xe1, 0x9f, 0x15, 0x01, 0xa4, 0x06, 0x42, 0x22, 0x00, 0xa0, + 0x15, 0x41, 0xe1, 0x9a, 0x15, 0x01, 0x42, 0x22, 0x00, 0x9b, 0x15, 0x41, + 0xe1, 0x93, 0x15, 0x01, 0x42, 0x22, 0x00, 0x94, 0x15, 0x41, 0xe1, 0xa4, + 0x15, 0x01, 0x42, 0x22, 0x00, 0xa5, 0x15, 0x41, 0xe1, 0x81, 0x15, 0x01, + 0xe9, 0x8b, 0x15, 0x01, 0x4a, 0x85, 0xad, 0xdb, 0x15, 0x01, 0xf5, 0x8d, + 0x15, 0x41, 0x44, 0x73, 0x20, 0xc2, 0x15, 0x01, 0x4b, 0x09, 0xa1, 0xc3, + 0x15, 0x41, 0xa1, 0xf1, 0x01, 0x43, 0xf6, 0x34, 0x11, 0xf4, 0x01, 0xa9, + 0xc8, 0x01, 0xaf, 0x14, 0xb2, 0x06, 0x4d, 0x86, 0x89, 0xe2, 0x29, 0x40, + 0x43, 0xf1, 0x1b, 0x90, 0xf9, 0x01, 0x42, 0xd2, 0x0e, 0x37, 0xf9, 0x41, + 0x5d, 0x11, 0x15, 0x2f, 0xf9, 0x01, 0x4a, 0x29, 0xaf, 0x20, 0xf3, 0x01, + 0x06, 0x2a, 0x30, 0x95, 0x01, 0x02, 0x34, 0x00, 0x12, 0x50, 0xf6, 0x67, + 0x7d, 0x23, 0x00, 0x43, 0xd7, 0x00, 0x8f, 0xfa, 0x01, 0x43, 0x15, 0x01, + 0xbf, 0xf6, 0x41, 0x80, 0x26, 0x44, 0x5f, 0x2c, 0x70, 0xf3, 0x01, 0x0c, + 0x8b, 0x8f, 0x04, 0xf3, 0x73, 0xfa, 0x41, 0x52, 0xbf, 0x50, 0xa1, 0xbc, + 0x01, 0x49, 0xd1, 0xb7, 0xa2, 0xbc, 0x01, 0x4e, 0x6d, 0x79, 0xa0, 0xbc, + 0x01, 0x47, 0xe2, 0xd6, 0xa3, 0xbc, 0x41, 0xa2, 0x49, 0x49, 0xf0, 0x38, + 0xdf, 0x2a, 0x80, 0x3c, 0x04, 0xc3, 0x00, 0x2c, 0x0b, 0xb3, 0x02, 0x1c, + 0x53, 0x21, 0x4d, 0x4e, 0x2b, 0x00, 0x47, 0xe9, 0xd6, 0xe0, 0x2a, 0xc0, + 0x00, 0x80, 0x01, 0xff, 0x55, 0xe4, 0x38, 0xe9, 0x2a, 0x00, 0x4d, 0x2e, + 0x5f, 0xe8, 0x2a, 0x40, 0x5b, 0x41, 0x1a, 0x44, 0x29, 0x00, 0x64, 0x2b, + 0x09, 0xd3, 0xf8, 0x41, 0x45, 0xf4, 0x38, 0xde, 0x2a, 0x00, 0x6b, 0xc3, + 0x02, 0xd5, 0xf8, 0x41, 0x4d, 0xe0, 0x7f, 0xe7, 0x2a, 0x40, 0x56, 0xcf, + 0x32, 0x4f, 0x2b, 0x00, 0x6c, 0x92, 0x01, 0x5f, 0x2b, 0x40, 0x44, 0x04, + 0x6b, 0xcd, 0xf6, 0x01, 0x47, 0x80, 0xd6, 0xd2, 0xf6, 0x41, 0x43, 0x02, + 0x24, 0xe1, 0xf6, 0x01, 0x03, 0xc5, 0x00, 0x0a, 0x4a, 0x7f, 0xae, 0xe9, + 0x26, 0x00, 0xf0, 0xa2, 0xf6, 0x41, 0x42, 0x9e, 0x01, 0x0f, 0x00, 0x00, + 0x43, 0x28, 0x08, 0x0e, 0x00, 0x40, 0x0c, 0xa7, 0x02, 0xdc, 0x07, 0x49, + 0x74, 0xb0, 0xe8, 0xfa, 0x01, 0x50, 0xc6, 0x64, 0x58, 0xf9, 0x01, 0x45, + 0xcb, 0xe8, 0x18, 0x26, 0x00, 0xb2, 0xbb, 0x02, 0xb6, 0x01, 0xff, 0x46, + 0x24, 0xdb, 0x67, 0xf3, 0x01, 0x0b, 0x4c, 0x8d, 0x01, 0xff, 0xa1, 0xfc, + 0x01, 0x43, 0xfb, 0xf3, 0x5a, 0x04, 0x01, 0x46, 0xa0, 0xda, 0x57, 0x04, + 0x01, 0x44, 0x85, 0xef, 0x5b, 0x04, 0x01, 0xa5, 0xd1, 0x01, 0x43, 0xd3, + 0x20, 0x53, 0x04, 0x01, 0x43, 0x97, 0xaa, 0x5c, 0x04, 0x01, 0xa8, 0xb6, + 0x01, 0xa9, 0xa3, 0x01, 0x45, 0xae, 0xe7, 0x61, 0x04, 0x01, 0x44, 0xd9, + 0xf0, 0x52, 0x04, 0x01, 0x44, 0x11, 0xf1, 0x64, 0x04, 0x01, 0xad, 0x82, + 0x01, 0x43, 0xdc, 0x22, 0x6f, 0x04, 0x01, 0xaf, 0x5a, 0x44, 0x05, 0xf2, + 0x50, 0x04, 0x01, 0x44, 0x59, 0xf2, 0x6e, 0x04, 0x01, 0xb3, 0x42, 0xb4, + 0x2c, 0x42, 0x50, 0x02, 0x73, 0x04, 0x01, 0x43, 0x3c, 0x39, 0x5d, 0x04, + 0x01, 0x02, 0x15, 0x02, 0x12, 0x02, 0x4d, 0x00, 0x06, 0x43, 0xdc, 0xf4, + 0x5f, 0x04, 0x41, 0xe1, 0x58, 0x04, 0x01, 0xf7, 0x7f, 0x04, 0x41, 0xe5, + 0x62, 0x04, 0x01, 0x42, 0x61, 0x03, 0x6b, 0x04, 0x41, 0xa8, 0x06, 0x42, + 0x1b, 0x05, 0x51, 0x04, 0x41, 0x42, 0xc6, 0x1c, 0x5e, 0x04, 0x01, 0x43, + 0x3f, 0x00, 0x54, 0x04, 0x41, 0xef, 0x55, 0x04, 0x01, 0x43, 0x75, 0x18, + 0x56, 0x04, 0x41, 0x42, 0x6d, 0x00, 0x74, 0x04, 0x01, 0x42, 0x62, 0x01, + 0x76, 0x04, 0x01, 0xee, 0x6a, 0x04, 0x01, 0x43, 0x69, 0x0a, 0x75, 0x04, + 0x01, 0xf2, 0x79, 0x04, 0x01, 0x42, 0x29, 0x08, 0x6c, 0x04, 0x41, 0x46, + 0x72, 0x18, 0x60, 0x04, 0x01, 0x43, 0x29, 0x02, 0x65, 0x04, 0x41, 0x42, + 0x1a, 0x00, 0x7e, 0x04, 0x01, 0x42, 0x73, 0x02, 0x72, 0x04, 0x01, 0xe6, + 0x66, 0x04, 0x41, 0x44, 0xd9, 0xee, 0x63, 0x04, 0x01, 0x43, 0xaa, 0x45, + 0x59, 0x04, 0x41, 0xa1, 0x0c, 0x42, 0x64, 0x12, 0x67, 0x04, 0x01, 0x42, + 0xcf, 0x00, 0x7b, 0x04, 0x41, 0xf2, 0x7d, 0x04, 0x01, 0xf4, 0x70, 0x04, + 0x41, 0x42, 0x3b, 0x01, 0x69, 0x04, 0x01, 0x42, 0xdb, 0x09, 0x71, 0x04, + 0x01, 0xe8, 0x6d, 0x04, 0x01, 0x42, 0x46, 0x00, 0x7a, 0x04, 0x01, 0xb2, + 0x0c, 0x42, 0xa4, 0x02, 0x68, 0x04, 0x01, 0x42, 0x15, 0x01, 0x77, 0x04, + 0x41, 0xe5, 0x78, 0x04, 0x01, 0x43, 0x46, 0x66, 0x7c, 0x04, 0x41, 0x04, + 0xd4, 0x4d, 0x04, 0xeb, 0x88, 0xf9, 0x41, 0x51, 0xdc, 0x57, 0xc7, 0x11, + 0x01, 0x51, 0x63, 0x59, 0xdd, 0x11, 0x01, 0xa4, 0xa3, 0x04, 0xa5, 0x94, + 0x04, 0x4a, 0xbc, 0x60, 0xdc, 0x11, 0x01, 0x07, 0xec, 0x05, 0xf1, 0x01, + 0x42, 0x14, 0x05, 0xc4, 0x11, 0x01, 0xb3, 0x81, 0x01, 0x06, 0x3c, 0x39, + 0x01, 0xff, 0x4d, 0x2c, 0x86, 0xcb, 0x11, 0x01, 0x05, 0x5a, 0x03, 0x01, + 0xff, 0xa1, 0x63, 0x07, 0x36, 0x61, 0x57, 0xe5, 0xbc, 0x11, 0x01, 0xe9, + 0xb4, 0x11, 0x81, 0x4a, 0xef, 0xbe, 0x11, 0x81, 0x3b, 0x4f, 0xee, 0x71, + 0xce, 0x11, 0x01, 0x06, 0x33, 0x07, 0x29, 0xf5, 0xb6, 0x11, 0x81, 0x17, + 0x08, 0x22, 0xc1, 0x01, 0xff, 0xec, 0xba, 0x11, 0x81, 0x09, 0xf2, 0xb8, + 0x11, 0xc1, 0x00, 0xf2, 0xb9, 0x11, 0x41, 0xec, 0xbb, 0x11, 0x41, 0xe5, + 0x62, 0x1b, 0x01, 0xf5, 0xb7, 0x11, 0xc1, 0x00, 0xe5, 0x63, 0x1b, 0x41, + 0xe5, 0x64, 0x1b, 0x01, 0xef, 0x65, 0x1b, 0x41, 0xe5, 0x60, 0x1b, 0x01, + 0x42, 0x60, 0x51, 0x61, 0x1b, 0x41, 0xe9, 0xb5, 0x11, 0x41, 0xe5, 0x66, + 0x1b, 0x01, 0xef, 0x67, 0x1b, 0x41, 0xe1, 0xb3, 0x11, 0x01, 0xe9, 0xbd, + 0x11, 0x01, 0xf5, 0xbf, 0x11, 0x41, 0x4a, 0xbd, 0xa7, 0xc9, 0x11, 0x01, + 0xa5, 0x4d, 0x04, 0x5b, 0x03, 0x06, 0x49, 0xb6, 0xc0, 0xcd, 0x11, 0x41, + 0xa1, 0x35, 0x4b, 0xd7, 0x23, 0x80, 0x11, 0x01, 0x54, 0x84, 0x43, 0xcf, + 0x11, 0x01, 0x4b, 0xe6, 0x9d, 0xc2, 0x11, 0x01, 0x45, 0x3f, 0x3f, 0xca, + 0x11, 0x01, 0x47, 0xd8, 0xd5, 0xdb, 0x11, 0x01, 0x4b, 0x6e, 0xa4, 0xc3, + 0x11, 0x01, 0x02, 0x02, 0x00, 0x01, 0xff, 0x44, 0xe5, 0x23, 0xc0, 0x11, + 0x01, 0x45, 0xec, 0x4b, 0x82, 0x11, 0x41, 0x47, 0x3d, 0x16, 0x81, 0x11, + 0x01, 0x47, 0xaf, 0x88, 0xc1, 0x11, 0x41, 0x0b, 0xa2, 0x9a, 0x06, 0x47, + 0xda, 0x20, 0xc8, 0x11, 0x41, 0xd1, 0xde, 0x11, 0x01, 0xd2, 0xdf, 0x11, + 0x41, 0xe1, 0x83, 0x11, 0x81, 0x86, 0x02, 0xa2, 0xf9, 0x01, 0xa3, 0xec, + 0x01, 0xa4, 0xd3, 0x01, 0xe5, 0x8d, 0x11, 0x01, 0xa7, 0xc2, 0x01, 0x42, + 0x22, 0x00, 0xb2, 0x11, 0x01, 0xe9, 0x85, 0x11, 0x81, 0xb2, 0x01, 0xaa, + 0xa5, 0x01, 0xab, 0x98, 0x01, 0xac, 0x8b, 0x01, 0x42, 0x6c, 0x00, 0xa9, + 0x11, 0x01, 0xae, 0x6d, 0xef, 0x8f, 0x11, 0x01, 0xb0, 0x5d, 0x42, 0x71, + 0x00, 0xab, 0x11, 0x01, 0xb3, 0x45, 0xb4, 0x2c, 0xf5, 0x87, 0x11, 0x81, + 0x23, 0xb6, 0x06, 0x42, 0xbc, 0x22, 0xaa, 0x11, 0x41, 0xe1, 0xae, 0x11, + 0x01, 0x07, 0x23, 0xc1, 0x01, 0xff, 0xec, 0x8b, 0x11, 0x81, 0x09, 0xf2, + 0x89, 0x11, 0xc1, 0x00, 0xf2, 0x8a, 0x11, 0x41, 0xec, 0x8c, 0x11, 0x41, + 0xf5, 0x88, 0x11, 0x41, 0xe1, 0xa0, 0x11, 0x01, 0x42, 0x22, 0x00, 0xa1, + 0x11, 0x01, 0xb4, 0x01, 0xff, 0xe1, 0x9b, 0x11, 0x01, 0x42, 0x22, 0x00, + 0x9c, 0x11, 0x41, 0xe1, 0xb1, 0x11, 0x01, 0x42, 0x22, 0x00, 0xaf, 0x11, + 0x01, 0x42, 0x40, 0x06, 0xb0, 0x11, 0x41, 0xe1, 0xa5, 0x11, 0x01, 0x42, + 0x22, 0x00, 0xa6, 0x11, 0x41, 0xe1, 0xa4, 0x11, 0x01, 0x42, 0x24, 0x02, + 0x95, 0x11, 0x01, 0x42, 0x2a, 0x05, 0x9f, 0x11, 0x01, 0x42, 0xbc, 0x22, + 0x9a, 0x11, 0x41, 0xe1, 0xac, 0x11, 0x01, 0x42, 0x74, 0x00, 0xad, 0x11, + 0x41, 0xe1, 0x91, 0x11, 0x01, 0x42, 0x22, 0x00, 0x92, 0x11, 0x41, 0xe1, + 0x98, 0x11, 0x01, 0x42, 0x22, 0x00, 0x99, 0x11, 0x41, 0xe9, 0x86, 0x11, + 0x41, 0xe1, 0x93, 0x11, 0x01, 0x42, 0x22, 0x00, 0x94, 0x11, 0x41, 0xe1, + 0xa2, 0x11, 0x01, 0xa4, 0x06, 0x42, 0x22, 0x00, 0xa3, 0x11, 0x41, 0xe1, + 0x9d, 0x11, 0x01, 0x42, 0x22, 0x00, 0x9e, 0x11, 0x41, 0xe1, 0x96, 0x11, + 0x01, 0x42, 0x22, 0x00, 0x97, 0x11, 0x41, 0xe1, 0xa7, 0x11, 0x01, 0x42, + 0x22, 0x00, 0xa8, 0x11, 0x41, 0xe1, 0x84, 0x11, 0x01, 0xe9, 0x8e, 0x11, + 0x01, 0xf5, 0x90, 0x11, 0x41, 0x43, 0xfb, 0xba, 0xda, 0x11, 0x01, 0x55, + 0x4a, 0x3f, 0xcc, 0x11, 0x41, 0x44, 0x73, 0x20, 0xc5, 0x11, 0x01, 0x05, + 0xf0, 0x06, 0x06, 0x4b, 0x09, 0xa1, 0xc6, 0x11, 0x41, 0x45, 0x12, 0x0b, + 0xd8, 0x11, 0x01, 0xa6, 0x2e, 0x44, 0xcf, 0x2a, 0xd9, 0x11, 0x01, 0x43, + 0x0e, 0x0b, 0xd1, 0x11, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, + 0xd0, 0x11, 0x41, 0x44, 0x25, 0x01, 0xd3, 0x11, 0x01, 0x42, 0x15, 0x02, + 0xd2, 0x11, 0x41, 0x44, 0xc9, 0x1d, 0xd7, 0x11, 0x01, 0x42, 0x01, 0x26, + 0xd6, 0x11, 0x41, 0x43, 0xd2, 0x05, 0xd5, 0x11, 0x01, 0x43, 0xf6, 0x06, + 0xd4, 0x11, 0x41, 0x46, 0x12, 0x03, 0x4d, 0x27, 0x00, 0x4b, 0x49, 0x9e, + 0x1e, 0x27, 0x00, 0x44, 0x31, 0x13, 0x30, 0x27, 0x40, 0xa1, 0xc8, 0x04, + 0xa3, 0xb0, 0x04, 0x43, 0x36, 0x9f, 0xf2, 0x2b, 0x00, 0xa5, 0x9b, 0x04, + 0x45, 0x08, 0x30, 0x13, 0x23, 0x80, 0xcc, 0x03, 0x44, 0x01, 0xf1, 0x33, + 0xf9, 0x01, 0x02, 0x7d, 0x02, 0xaf, 0x03, 0x08, 0xd0, 0xc9, 0x38, 0xb2, + 0x2a, 0xb3, 0x1c, 0x02, 0xc6, 0x00, 0x0c, 0x4b, 0x13, 0xa5, 0xa1, 0xfa, + 0x01, 0x45, 0xbe, 0xd5, 0xb9, 0x26, 0x40, 0x45, 0x91, 0x1f, 0x16, 0x22, + 0x00, 0x4e, 0x4f, 0x7d, 0x93, 0x00, 0x40, 0x47, 0xa2, 0xb8, 0x45, 0xfe, + 0x00, 0x4b, 0x98, 0xa1, 0xbc, 0x26, 0x40, 0x65, 0x07, 0x08, 0x2c, 0xf9, + 0x01, 0x49, 0xfe, 0xc0, 0x20, 0x21, 0x40, 0x06, 0x6d, 0x6b, 0x06, 0x46, + 0x16, 0x08, 0xfb, 0x2b, 0x40, 0x09, 0x49, 0xbe, 0xa1, 0x02, 0x08, 0xc8, + 0xca, 0x01, 0xff, 0xd1, 0x51, 0xce, 0x81, 0x8b, 0x01, 0xd2, 0x52, 0xce, + 0x81, 0x43, 0xd3, 0x54, 0xce, 0x81, 0x1f, 0xd4, 0x58, 0xce, 0x81, 0x0d, + 0xd5, 0x60, 0xce, 0x81, 0x04, 0xd6, 0x70, 0xce, 0x41, 0xd6, 0x80, 0xce, + 0x41, 0xd5, 0x68, 0xce, 0x81, 0x04, 0xd6, 0x78, 0xce, 0x41, 0xd6, 0x88, + 0xce, 0x41, 0xd4, 0x5c, 0xce, 0x81, 0x0d, 0xd5, 0x64, 0xce, 0x81, 0x04, + 0xd6, 0x74, 0xce, 0x41, 0xd6, 0x84, 0xce, 0x41, 0xd5, 0x6c, 0xce, 0x81, + 0x04, 0xd6, 0x7c, 0xce, 0x41, 0xd6, 0x8c, 0xce, 0x41, 0xd3, 0x56, 0xce, + 0x81, 0x1f, 0xd4, 0x5a, 0xce, 0x81, 0x0d, 0xd5, 0x62, 0xce, 0x81, 0x04, + 0xd6, 0x72, 0xce, 0x41, 0xd6, 0x82, 0xce, 0x41, 0xd5, 0x6a, 0xce, 0x81, + 0x04, 0xd6, 0x7a, 0xce, 0x41, 0xd6, 0x8a, 0xce, 0x41, 0xd4, 0x5e, 0xce, + 0x81, 0x0d, 0xd5, 0x66, 0xce, 0x81, 0x04, 0xd6, 0x76, 0xce, 0x41, 0xd6, + 0x86, 0xce, 0x41, 0xd5, 0x6e, 0xce, 0x81, 0x04, 0xd6, 0x7e, 0xce, 0x41, + 0xd6, 0x8e, 0xce, 0x41, 0xd2, 0x53, 0xce, 0x81, 0x43, 0xd3, 0x55, 0xce, + 0x81, 0x1f, 0xd4, 0x59, 0xce, 0x81, 0x0d, 0xd5, 0x61, 0xce, 0x81, 0x04, + 0xd6, 0x71, 0xce, 0x41, 0xd6, 0x81, 0xce, 0x41, 0xd5, 0x69, 0xce, 0x81, + 0x04, 0xd6, 0x79, 0xce, 0x41, 0xd6, 0x89, 0xce, 0x41, 0xd4, 0x5d, 0xce, + 0x81, 0x0d, 0xd5, 0x65, 0xce, 0x81, 0x04, 0xd6, 0x75, 0xce, 0x41, 0xd6, + 0x85, 0xce, 0x41, 0xd5, 0x6d, 0xce, 0x81, 0x04, 0xd6, 0x7d, 0xce, 0x41, + 0xd6, 0x8d, 0xce, 0x41, 0xd3, 0x57, 0xce, 0x81, 0x1f, 0xd4, 0x5b, 0xce, + 0x81, 0x0d, 0xd5, 0x63, 0xce, 0x81, 0x04, 0xd6, 0x73, 0xce, 0x41, 0xd6, + 0x83, 0xce, 0x41, 0xd5, 0x6b, 0xce, 0x81, 0x04, 0xd6, 0x7b, 0xce, 0x41, + 0xd6, 0x8b, 0xce, 0x41, 0xd4, 0x5f, 0xce, 0x81, 0x0d, 0xd5, 0x67, 0xce, + 0x81, 0x04, 0xd6, 0x77, 0xce, 0x41, 0xd6, 0x87, 0xce, 0x41, 0xd5, 0x6f, + 0xce, 0x81, 0x04, 0xd6, 0x7f, 0xce, 0x41, 0xd6, 0x8f, 0xce, 0x41, 0xd1, + 0x21, 0xcc, 0x81, 0x1f, 0xd2, 0x22, 0xcc, 0x81, 0x0d, 0xd3, 0x24, 0xcc, + 0x81, 0x04, 0xd4, 0x28, 0xcc, 0x41, 0xd4, 0x2c, 0xcc, 0x41, 0xd3, 0x26, + 0xcc, 0x81, 0x04, 0xd4, 0x2a, 0xcc, 0x41, 0xd4, 0x2e, 0xcc, 0x41, 0xd2, + 0x23, 0xcc, 0x81, 0x0d, 0xd3, 0x25, 0xcc, 0x81, 0x04, 0xd4, 0x29, 0xcc, + 0x41, 0xd4, 0x2d, 0xcc, 0x41, 0xd3, 0x27, 0xcc, 0x81, 0x04, 0xd4, 0x2b, + 0xcc, 0x41, 0xd4, 0x2f, 0xcc, 0x41, 0x45, 0x94, 0x3b, 0x3b, 0x00, 0x00, + 0x61, 0x87, 0x0d, 0x32, 0x2a, 0x00, 0x47, 0xbc, 0xd5, 0xba, 0x26, 0x40, + 0x09, 0x10, 0xb8, 0x01, 0xff, 0x45, 0x12, 0x0b, 0xf8, 0xfb, 0x01, 0xa6, + 0x2e, 0x44, 0xcf, 0x2a, 0xf9, 0xfb, 0x01, 0x43, 0x0e, 0x0b, 0xf1, 0xfb, + 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, 0xf0, 0xfb, 0x41, 0x44, + 0x25, 0x01, 0xf3, 0xfb, 0x01, 0x42, 0x15, 0x02, 0xf2, 0xfb, 0x41, 0x44, + 0xc9, 0x1d, 0xf7, 0xfb, 0x01, 0x42, 0x01, 0x26, 0xf6, 0xfb, 0x41, 0x43, + 0xd2, 0x05, 0xf5, 0xfb, 0x01, 0x43, 0xf6, 0x06, 0xf4, 0xfb, 0x41, 0x4f, + 0x32, 0x6a, 0x48, 0xf6, 0x01, 0x45, 0x9c, 0xe5, 0x31, 0xf3, 0x41, 0x4f, + 0x3a, 0x71, 0x48, 0xf9, 0x01, 0xb4, 0x01, 0xff, 0x48, 0xc1, 0x04, 0xa7, + 0x00, 0x00, 0x42, 0x0c, 0x00, 0x14, 0x23, 0x40, 0xec, 0xad, 0xf9, 0x01, + 0xf4, 0xba, 0xf4, 0x41, 0xa1, 0x8a, 0x01, 0x44, 0x34, 0xe5, 0xeb, 0xf3, + 0x81, 0x7d, 0xaf, 0x64, 0xb2, 0x01, 0xff, 0xa5, 0x53, 0x04, 0x77, 0x06, + 0x0c, 0x43, 0xe6, 0x20, 0xdc, 0xf4, 0x01, 0x44, 0x42, 0x4c, 0x08, 0x21, + 0x40, 0x08, 0xe4, 0x05, 0x1b, 0x54, 0x9c, 0x1f, 0x70, 0xf6, 0x01, 0x06, + 0x5d, 0x07, 0x01, 0xff, 0xe5, 0x2f, 0x21, 0x00, 0xe7, 0x0a, 0x21, 0x00, + 0xec, 0x13, 0x21, 0x00, 0xef, 0x34, 0x21, 0x40, 0xe2, 0x2c, 0x21, 0x00, + 0xe5, 0x30, 0x21, 0x00, 0xe6, 0x31, 0x21, 0x00, 0xe8, 0x0b, 0x21, 0x00, + 0xe9, 0x10, 0x21, 0x00, 0xec, 0x12, 0x21, 0x00, 0xed, 0x33, 0x21, 0x00, + 0xf0, 0x18, 0x21, 0x00, 0xf2, 0x1b, 0x21, 0x40, 0x42, 0x92, 0x01, 0xb5, + 0xf5, 0x01, 0x47, 0x75, 0xd7, 0x9b, 0xfa, 0x41, 0x44, 0xb8, 0xd5, 0xf4, + 0xf6, 0x01, 0x03, 0x6f, 0x48, 0x01, 0xff, 0x42, 0x10, 0x00, 0x82, 0xf9, + 0x01, 0x42, 0xef, 0x02, 0x4f, 0x26, 0x40, 0x48, 0x80, 0xc2, 0x92, 0xf3, + 0x41, 0x43, 0xec, 0x00, 0x96, 0x26, 0x00, 0x42, 0xf5, 0x1b, 0xe3, 0xf9, + 0x41, 0x05, 0xb6, 0x75, 0x88, 0x08, 0x49, 0x30, 0xb9, 0x50, 0x26, 0x00, + 0x46, 0xd4, 0xdc, 0xf5, 0x26, 0x00, 0x51, 0x61, 0x5b, 0x76, 0xf3, 0x01, + 0xac, 0xdf, 0x07, 0x08, 0xba, 0x6a, 0xd6, 0x04, 0xae, 0xa8, 0x04, 0x42, + 0x0d, 0x00, 0x7b, 0xf9, 0x01, 0xb4, 0x8c, 0x04, 0xb5, 0x06, 0x47, 0xad, + 0xd7, 0xb7, 0xf3, 0x41, 0x4d, 0xdb, 0x81, 0xc1, 0x20, 0x00, 0xb2, 0x01, + 0xff, 0x07, 0x17, 0xcf, 0x06, 0x44, 0xdd, 0xf1, 0x95, 0xf9, 0x41, 0x54, + 0x2c, 0x41, 0xb4, 0xa8, 0x00, 0xa4, 0x96, 0x03, 0x07, 0xec, 0x05, 0x6f, + 0x05, 0x5a, 0x03, 0x4e, 0x0b, 0x40, 0x77, 0x01, 0xff, 0xa1, 0x3b, 0xe5, + 0xbe, 0xa8, 0x80, 0x32, 0xe9, 0xb6, 0xa8, 0x80, 0x29, 0xef, 0xc1, 0xa8, + 0x80, 0x20, 0xf5, 0xb8, 0xa8, 0x80, 0x17, 0x08, 0x22, 0xc1, 0x01, 0xff, + 0xec, 0xbc, 0xa8, 0x80, 0x09, 0xf2, 0xba, 0xa8, 0xc0, 0x00, 0xf2, 0xbb, + 0xa8, 0x40, 0xec, 0xbd, 0xa8, 0x40, 0xf5, 0xb9, 0xa8, 0x40, 0xef, 0xc2, + 0xa8, 0x40, 0xe9, 0xb7, 0xa8, 0x40, 0xe5, 0xbf, 0xa8, 0x40, 0xe1, 0xb5, + 0xa8, 0x00, 0xe9, 0xc0, 0xa8, 0x00, 0xf5, 0xc3, 0xa8, 0x40, 0x48, 0x3c, + 0x16, 0x80, 0xa8, 0x00, 0x4b, 0xd7, 0x23, 0xc5, 0xa8, 0x00, 0x02, 0x02, + 0x00, 0x01, 0xff, 0x44, 0xe5, 0x23, 0xc4, 0xa8, 0x00, 0x45, 0xec, 0x4b, + 0x81, 0xa8, 0x40, 0xe1, 0x82, 0xa8, 0x80, 0x91, 0x02, 0xa2, 0x84, 0x02, + 0xa3, 0xf7, 0x01, 0xa4, 0xde, 0x01, 0xe5, 0x8c, 0xa8, 0x80, 0xd4, 0x01, + 0xa7, 0xc7, 0x01, 0x42, 0x22, 0x00, 0xb2, 0xa8, 0x00, 0xe9, 0x84, 0xa8, + 0x80, 0xb7, 0x01, 0xaa, 0xaa, 0x01, 0xab, 0x9d, 0x01, 0xac, 0x90, 0x01, + 0x42, 0x6c, 0x00, 0xaa, 0xa8, 0x00, 0xae, 0x72, 0xef, 0x8f, 0xa8, 0x80, + 0x69, 0xb0, 0x5d, 0x42, 0x71, 0x00, 0xac, 0xa8, 0x00, 0xb3, 0x45, 0xb4, + 0x2c, 0xf5, 0x86, 0xa8, 0x80, 0x23, 0xb6, 0x06, 0x42, 0xbc, 0x22, 0xab, + 0xa8, 0x40, 0xe1, 0xae, 0xa8, 0x00, 0x07, 0x23, 0xc1, 0x01, 0xff, 0xec, + 0x8a, 0xa8, 0x80, 0x09, 0xf2, 0x88, 0xa8, 0xc0, 0x00, 0xf2, 0x89, 0xa8, + 0x40, 0xec, 0x8b, 0xa8, 0x40, 0xf5, 0x87, 0xa8, 0x40, 0xe1, 0xa1, 0xa8, + 0x00, 0x42, 0x22, 0x00, 0xa2, 0xa8, 0x00, 0xb4, 0x01, 0xff, 0xe1, 0x9c, + 0xa8, 0x00, 0x42, 0x22, 0x00, 0x9d, 0xa8, 0x40, 0xe1, 0xb1, 0xa8, 0x00, + 0x42, 0x22, 0x00, 0xaf, 0xa8, 0x00, 0x42, 0x40, 0x06, 0xb0, 0xa8, 0x40, + 0xe1, 0xa6, 0xa8, 0x00, 0x42, 0x22, 0x00, 0xa7, 0xa8, 0x40, 0xef, 0x90, + 0xa8, 0x40, 0xe1, 0xa5, 0xa8, 0x00, 0x42, 0x24, 0x02, 0x96, 0xa8, 0x00, + 0x42, 0x2a, 0x05, 0xa0, 0xa8, 0x00, 0x42, 0xbc, 0x22, 0x9b, 0xa8, 0x40, + 0xe1, 0xad, 0xa8, 0x00, 0x42, 0x74, 0x00, 0xb3, 0xa8, 0x40, 0xe1, 0x92, + 0xa8, 0x00, 0x42, 0x22, 0x00, 0x93, 0xa8, 0x40, 0xe1, 0x99, 0xa8, 0x00, + 0x42, 0x22, 0x00, 0x9a, 0xa8, 0x40, 0xe9, 0x85, 0xa8, 0x40, 0xe1, 0x94, + 0xa8, 0x00, 0x42, 0x22, 0x00, 0x95, 0xa8, 0x40, 0xe5, 0x8d, 0xa8, 0x40, + 0xe1, 0xa3, 0xa8, 0x00, 0xa4, 0x06, 0x42, 0x22, 0x00, 0xa4, 0xa8, 0x40, + 0xe1, 0x9e, 0xa8, 0x00, 0x42, 0x22, 0x00, 0x9f, 0xa8, 0x40, 0xe1, 0x97, + 0xa8, 0x00, 0x42, 0x22, 0x00, 0x98, 0xa8, 0x40, 0xe1, 0xa8, 0xa8, 0x00, + 0x42, 0x22, 0x00, 0xa9, 0xa8, 0x40, 0xe1, 0x83, 0xa8, 0x00, 0xe9, 0x8e, + 0xa8, 0x00, 0xf5, 0x91, 0xa8, 0x40, 0x44, 0x73, 0x20, 0xce, 0xa8, 0x00, + 0x05, 0xf0, 0x06, 0x06, 0x4b, 0x09, 0xa1, 0xcf, 0xa8, 0x40, 0x45, 0x12, + 0x0b, 0xd8, 0xa8, 0x00, 0xa6, 0x2e, 0x44, 0xcf, 0x2a, 0xd9, 0xa8, 0x00, + 0x43, 0x0e, 0x0b, 0xd1, 0xa8, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0x43, + 0x1e, 0xd0, 0xa8, 0x40, 0x44, 0x25, 0x01, 0xd3, 0xa8, 0x00, 0x42, 0x15, + 0x02, 0xd2, 0xa8, 0x40, 0x44, 0xc9, 0x1d, 0xd7, 0xa8, 0x00, 0x42, 0x01, + 0x26, 0xd6, 0xa8, 0x40, 0x43, 0xd2, 0x05, 0xd5, 0xa8, 0x00, 0x43, 0xf6, + 0x06, 0xd4, 0xa8, 0x40, 0x46, 0x36, 0xdb, 0xf0, 0xf6, 0x81, 0x06, 0x43, + 0x5d, 0x01, 0x44, 0x26, 0x40, 0x48, 0xe8, 0xc1, 0xe1, 0xf4, 0x41, 0x45, + 0xab, 0xe5, 0x6a, 0xf9, 0x01, 0x08, 0x17, 0x16, 0x01, 0xff, 0x06, 0x6d, + 0x15, 0x06, 0x54, 0x1f, 0x16, 0x7a, 0xf6, 0x41, 0x07, 0x3b, 0x01, 0x06, + 0x68, 0x08, 0x05, 0x78, 0xf6, 0x41, 0x5d, 0x13, 0x05, 0x77, 0xf6, 0x01, + 0x64, 0x27, 0x0a, 0x76, 0xf6, 0x41, 0x51, 0x0b, 0x50, 0x36, 0x08, 0x00, + 0x07, 0xec, 0x05, 0xf3, 0x01, 0xad, 0xb2, 0x01, 0x0c, 0x6d, 0x16, 0x51, + 0x0b, 0x40, 0x77, 0x01, 0xff, 0xe1, 0x23, 0x08, 0x80, 0x43, 0xe5, 0x1d, + 0x08, 0x00, 0xe9, 0x2a, 0x08, 0x00, 0x05, 0xd7, 0x02, 0x22, 0xef, 0x2b, + 0x08, 0x80, 0x12, 0xb3, 0x04, 0xf5, 0x27, 0x08, 0x40, 0x46, 0xd2, 0xd5, + 0x25, 0x08, 0x00, 0x44, 0x24, 0xeb, 0x2c, 0x08, 0x40, 0x49, 0xec, 0xc0, + 0x21, 0x08, 0xc0, 0x00, 0xe1, 0x1e, 0x08, 0x40, 0xe1, 0x22, 0x08, 0x80, + 0x0c, 0xe5, 0x1c, 0x08, 0x00, 0xe9, 0x29, 0x08, 0x00, 0xf5, 0x26, 0x08, + 0x40, 0xe1, 0x1f, 0x08, 0x40, 0xe1, 0x20, 0x08, 0x40, 0xa1, 0x3b, 0x43, + 0x79, 0xb2, 0x33, 0x08, 0x00, 0x4d, 0xd1, 0x85, 0x37, 0x08, 0x00, 0x47, + 0x77, 0xd3, 0x30, 0x08, 0x00, 0x45, 0xd9, 0x85, 0x39, 0x08, 0x00, 0xb3, + 0x15, 0x44, 0xc5, 0xf2, 0x3b, 0x08, 0x00, 0xba, 0x01, 0xff, 0x43, 0xe6, + 0xf3, 0x3a, 0x08, 0x00, 0x44, 0xa5, 0xf0, 0x38, 0x08, 0x40, 0x49, 0xae, + 0xb9, 0x35, 0x08, 0x00, 0x4b, 0x85, 0xa0, 0x3d, 0x08, 0x40, 0x45, 0x7d, + 0xe6, 0x31, 0x08, 0x00, 0xae, 0x0c, 0x46, 0x9e, 0xdf, 0x3c, 0x08, 0x00, + 0x45, 0x55, 0xeb, 0x34, 0x08, 0x40, 0x43, 0x55, 0x12, 0x32, 0x08, 0x00, + 0x44, 0x55, 0xf1, 0x3e, 0x08, 0x40, 0x04, 0xba, 0x00, 0x15, 0x0f, 0x79, + 0x0c, 0x01, 0xff, 0x4e, 0x67, 0x77, 0x1a, 0x08, 0x00, 0xe9, 0x28, 0x08, + 0x00, 0x47, 0xd1, 0xd5, 0x24, 0x08, 0x40, 0x46, 0xe5, 0x6b, 0x19, 0x08, + 0x00, 0x4e, 0x67, 0x77, 0x1b, 0x08, 0x00, 0x42, 0x9e, 0x01, 0x16, 0x08, + 0x80, 0x0c, 0x47, 0x77, 0xd3, 0x2d, 0x08, 0x00, 0x49, 0xcf, 0xbc, 0x18, + 0x08, 0x40, 0x45, 0xeb, 0xe1, 0x17, 0x08, 0x40, 0x44, 0xec, 0xe1, 0x00, + 0x08, 0x00, 0xa2, 0x72, 0x45, 0x38, 0x54, 0x03, 0x08, 0x00, 0x42, 0xf3, + 0x02, 0x10, 0x08, 0x00, 0x45, 0x91, 0xe6, 0x02, 0x08, 0x00, 0xa9, 0x52, + 0x44, 0xbd, 0xf0, 0x0a, 0x08, 0x00, 0x45, 0x03, 0xe8, 0x0b, 0x08, 0x00, + 0x43, 0xad, 0x90, 0x0c, 0x08, 0x00, 0x43, 0xdc, 0x22, 0x0d, 0x08, 0x00, + 0x43, 0x97, 0xf4, 0x12, 0x08, 0x00, 0x44, 0x3f, 0x54, 0x13, 0x08, 0x00, + 0xb3, 0x20, 0xb4, 0x0c, 0x43, 0x72, 0x77, 0x09, 0x08, 0x00, 0x43, 0x4b, + 0x0a, 0x06, 0x08, 0x40, 0x43, 0x1a, 0xc3, 0x15, 0x08, 0x00, 0x42, 0x52, + 0x00, 0x08, 0x08, 0x00, 0x46, 0xce, 0xdf, 0x11, 0x08, 0x40, 0x43, 0x90, + 0x00, 0x14, 0x08, 0x00, 0x46, 0xf2, 0xdc, 0x0e, 0x08, 0x40, 0xee, 0x0f, + 0x08, 0x00, 0xf4, 0x07, 0x08, 0x00, 0xf9, 0x04, 0x08, 0x40, 0x42, 0x80, + 0x12, 0x05, 0x08, 0x00, 0x42, 0x52, 0x00, 0x01, 0x08, 0x40, 0xb4, 0x06, + 0x4a, 0xc5, 0x93, 0xe1, 0xfa, 0x41, 0x47, 0x88, 0xcd, 0xc2, 0xf9, 0x01, + 0x43, 0x88, 0x0d, 0x13, 0x26, 0x40, 0x43, 0x28, 0x13, 0xf7, 0xf9, 0x01, + 0x44, 0x6c, 0x5e, 0xba, 0xf9, 0x41, 0xa1, 0x81, 0x21, 0xa5, 0xe4, 0x1a, + 0x49, 0xa5, 0xb9, 0x8f, 0xf9, 0x01, 0xa9, 0xd4, 0x0a, 0xaf, 0x81, 0x07, + 0xb5, 0x01, 0xff, 0x48, 0x28, 0xc4, 0xbd, 0x20, 0x00, 0x4c, 0x37, 0x8f, + 0xc9, 0xf3, 0x01, 0x4a, 0x95, 0xac, 0xf4, 0x29, 0x00, 0x03, 0xb6, 0xd1, + 0xf3, 0x04, 0xae, 0x2f, 0x48, 0x67, 0x80, 0xa8, 0x20, 0x00, 0x1a, 0x20, + 0x22, 0x01, 0xff, 0x48, 0x20, 0xc4, 0xf6, 0x2b, 0x00, 0x46, 0x22, 0xc4, + 0xf4, 0x2b, 0x00, 0x48, 0x10, 0xca, 0xf5, 0x2b, 0x00, 0x48, 0xc0, 0xca, + 0xf7, 0x2b, 0x00, 0x49, 0xf9, 0xbf, 0xf8, 0x2b, 0x00, 0x49, 0x07, 0xc1, + 0xf3, 0x2b, 0x40, 0x03, 0x52, 0x03, 0x0f, 0xae, 0x01, 0xff, 0x42, 0x33, + 0x00, 0xc3, 0xf3, 0x01, 0x53, 0x62, 0x4a, 0xbd, 0xf3, 0x41, 0x4d, 0xbd, + 0x80, 0xee, 0x16, 0x00, 0x4f, 0x22, 0x6b, 0xf0, 0x16, 0x00, 0x51, 0x85, + 0x59, 0xed, 0x16, 0x00, 0x07, 0xec, 0x05, 0x12, 0x54, 0x60, 0x44, 0xec, + 0x16, 0x00, 0x52, 0x63, 0x55, 0xeb, 0x16, 0x00, 0x4f, 0xfb, 0x73, 0xef, + 0x16, 0x40, 0xa1, 0xec, 0x03, 0x58, 0x4e, 0x27, 0xd2, 0x16, 0x00, 0xe3, + 0xcd, 0x16, 0x80, 0xc8, 0x03, 0xe4, 0xd1, 0x16, 0x80, 0xab, 0x03, 0xe5, + 0xc2, 0x16, 0x80, 0x8d, 0x03, 0xa6, 0xe1, 0x02, 0xe7, 0xb5, 0x16, 0x80, + 0xc8, 0x02, 0x02, 0x22, 0x00, 0xb7, 0x02, 0xa9, 0x8f, 0x02, 0x47, 0x3c, + 0xd2, 0xc3, 0x16, 0x00, 0xeb, 0xf1, 0x16, 0x80, 0xf4, 0x01, 0xac, 0xc8, + 0x01, 0x4c, 0xcb, 0x91, 0xd7, 0x16, 0x00, 0x51, 0x71, 0x5c, 0xbe, 0x16, + 0x00, 0xef, 0xae, 0x16, 0x80, 0x98, 0x01, 0x4f, 0xd0, 0x71, 0xc8, 0x16, + 0x00, 0xf1, 0xe9, 0x16, 0x00, 0x50, 0x36, 0x66, 0xb1, 0x16, 0x00, 0xb3, + 0x34, 0xb4, 0x26, 0x49, 0xad, 0xc0, 0xa2, 0x16, 0x00, 0xf6, 0xa1, 0x16, + 0x00, 0xf7, 0xa5, 0x16, 0x80, 0x11, 0xf8, 0xea, 0x16, 0x00, 0xf9, 0xa4, + 0x16, 0x80, 0x04, 0xfa, 0xce, 0x16, 0x40, 0xf2, 0xa3, 0x16, 0x40, 0x4b, + 0x63, 0xa4, 0xb9, 0x16, 0x40, 0x53, 0x03, 0x4a, 0xa6, 0x16, 0x00, 0x4e, + 0x19, 0x79, 0xcf, 0x16, 0x40, 0xe8, 0xf2, 0x16, 0x80, 0x12, 0x56, 0x71, + 0x34, 0xcb, 0x16, 0x00, 0x47, 0x57, 0xd4, 0xca, 0x16, 0x00, 0x43, 0xf9, + 0x0a, 0xe5, 0x16, 0x40, 0x09, 0x71, 0xbd, 0x01, 0xff, 0x44, 0x17, 0x00, + 0xc6, 0x16, 0x00, 0x49, 0x5d, 0x27, 0xd3, 0x16, 0x00, 0x48, 0x88, 0xc6, + 0xbd, 0x16, 0x00, 0x46, 0xee, 0xdd, 0xd9, 0x16, 0x00, 0x46, 0x7c, 0x5c, + 0xbf, 0x16, 0x00, 0x45, 0xd6, 0x7b, 0xad, 0x16, 0x00, 0x45, 0x82, 0x34, + 0xcc, 0x16, 0x00, 0x45, 0x22, 0x79, 0xd0, 0x16, 0x00, 0x42, 0x05, 0x22, + 0xe7, 0x16, 0x40, 0xe5, 0xaf, 0x16, 0x00, 0xee, 0xb0, 0x16, 0x00, 0xef, + 0xf3, 0x16, 0x00, 0x45, 0xd9, 0xe9, 0xd5, 0x16, 0x00, 0x43, 0xf2, 0x01, + 0xa9, 0x16, 0x00, 0x4e, 0xd1, 0x7c, 0xdf, 0x16, 0x40, 0x51, 0x75, 0x58, + 0xda, 0x16, 0x00, 0x0b, 0x77, 0x34, 0x01, 0xff, 0x45, 0x5c, 0xe4, 0xc5, + 0x16, 0x00, 0x48, 0x88, 0xc6, 0xbc, 0x16, 0x00, 0x46, 0xee, 0xdd, 0xd8, + 0x16, 0x00, 0x45, 0xd6, 0x7b, 0xac, 0x16, 0x00, 0x42, 0x05, 0x22, 0xe6, + 0x16, 0x40, 0x03, 0xa9, 0x45, 0x01, 0xff, 0x42, 0x44, 0x00, 0xb4, 0x16, + 0x00, 0xe1, 0xb2, 0x16, 0x40, 0x4b, 0x08, 0x9a, 0xe8, 0x16, 0x00, 0x42, + 0x1d, 0x01, 0xdd, 0x16, 0x80, 0x12, 0x42, 0x0c, 0x00, 0xe1, 0x16, 0x00, + 0x4c, 0x07, 0x95, 0xc1, 0x16, 0x00, 0x47, 0x6e, 0xd7, 0xc7, 0x16, 0x40, + 0x43, 0x1a, 0x79, 0xdc, 0x16, 0x40, 0x45, 0xd3, 0xe5, 0xbb, 0x16, 0x00, + 0x46, 0x0e, 0xdc, 0xba, 0x16, 0x40, 0x42, 0x17, 0x00, 0xb8, 0x16, 0x00, + 0xa5, 0x01, 0xff, 0x49, 0xcc, 0xb6, 0xb7, 0x16, 0x00, 0xf2, 0xc4, 0x16, + 0x40, 0x4d, 0x84, 0x82, 0xa0, 0x16, 0x00, 0x0d, 0xbf, 0x87, 0x01, 0xff, + 0xa1, 0x12, 0x42, 0x4e, 0x00, 0xf6, 0x16, 0x00, 0x42, 0x5f, 0x03, 0xf5, + 0x16, 0x00, 0x42, 0xa4, 0x0d, 0xf4, 0x16, 0x40, 0xe3, 0xf7, 0x16, 0x00, + 0x43, 0x7a, 0x1f, 0xf8, 0x16, 0x40, 0x42, 0x17, 0x00, 0xe0, 0x16, 0x00, + 0x49, 0xd2, 0xb9, 0xd6, 0x16, 0x00, 0x42, 0x1d, 0x01, 0xb6, 0x16, 0x00, + 0x42, 0x53, 0x00, 0xa7, 0x16, 0x40, 0x4b, 0xea, 0x98, 0xde, 0x16, 0x00, + 0x06, 0x0f, 0x80, 0x01, 0xff, 0xec, 0xdb, 0x16, 0x00, 0xee, 0xc0, 0x16, + 0x00, 0xf0, 0xd4, 0x16, 0x40, 0x43, 0xbe, 0x6b, 0xe3, 0x16, 0x00, 0xa5, + 0x06, 0x46, 0x36, 0xe1, 0xe2, 0x16, 0x40, 0x43, 0xbe, 0x6b, 0xe4, 0x16, + 0x00, 0xee, 0xb3, 0x16, 0x40, 0x43, 0xc1, 0x1b, 0xaa, 0x16, 0x00, 0x43, + 0x7a, 0x1f, 0xab, 0x16, 0x00, 0x4a, 0xef, 0xac, 0xc9, 0x16, 0x00, 0x46, + 0x84, 0xde, 0xa8, 0x16, 0x40, 0x06, 0xef, 0x06, 0xb2, 0x01, 0x09, 0x1e, + 0x5a, 0x91, 0x01, 0x07, 0xff, 0x39, 0x01, 0xff, 0x05, 0x12, 0x0b, 0x7e, + 0xa6, 0x5f, 0x04, 0xcf, 0x2a, 0x4f, 0x4b, 0x6d, 0x11, 0x72, 0x0e, 0x01, + 0xb3, 0x26, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0x69, 0x0e, 0x01, 0xa8, + 0x0f, 0xb7, 0x01, 0xff, 0x44, 0xcb, 0x1d, 0x6a, 0x0e, 0x01, 0x49, 0xbe, + 0x1d, 0x73, 0x0e, 0x41, 0x44, 0x7b, 0x11, 0x6b, 0x0e, 0x01, 0x4b, 0xfb, + 0x17, 0x74, 0x0e, 0x41, 0x04, 0xc9, 0x1d, 0x11, 0x02, 0x01, 0x26, 0x01, + 0xff, 0x48, 0x70, 0x11, 0x77, 0x0e, 0x01, 0x42, 0x7d, 0x11, 0x6e, 0x0e, + 0x41, 0x48, 0x70, 0x11, 0x78, 0x0e, 0x01, 0x42, 0x7d, 0x11, 0x6f, 0x0e, + 0x41, 0x48, 0x70, 0x11, 0x7a, 0x0e, 0x01, 0x42, 0x7d, 0x11, 0x71, 0x0e, + 0x41, 0xa9, 0x0f, 0xaf, 0x01, 0xff, 0x43, 0x7c, 0x11, 0x6c, 0x0e, 0x01, + 0x4a, 0xf3, 0xb2, 0x75, 0x0e, 0x41, 0x43, 0x52, 0x4d, 0x6d, 0x0e, 0x01, + 0x4a, 0x82, 0x39, 0x76, 0x0e, 0x41, 0x48, 0x70, 0x11, 0x79, 0x0e, 0x01, + 0xf9, 0x70, 0x0e, 0x41, 0x04, 0x0e, 0x0b, 0x06, 0x4a, 0x53, 0xb2, 0x7e, + 0x0e, 0x41, 0x44, 0x22, 0x00, 0x7b, 0x0e, 0x01, 0x47, 0x2a, 0x01, 0x7c, + 0x0e, 0x01, 0x45, 0xee, 0x74, 0x7d, 0x0e, 0x41, 0x45, 0x12, 0x0b, 0x67, + 0x0e, 0x01, 0xa6, 0x29, 0x44, 0xcf, 0x2a, 0x68, 0x0e, 0x01, 0x43, 0x0e, + 0x0b, 0x60, 0x0e, 0x01, 0xb3, 0x0f, 0xb4, 0x01, 0xff, 0x44, 0x25, 0x01, + 0x62, 0x0e, 0x01, 0x42, 0x15, 0x02, 0x61, 0x0e, 0x41, 0x44, 0xc9, 0x1d, + 0x66, 0x0e, 0x01, 0x42, 0x01, 0x26, 0x65, 0x0e, 0x41, 0x43, 0xd2, 0x05, + 0x64, 0x0e, 0x01, 0x43, 0xf6, 0x06, 0x63, 0x0e, 0x41, 0x52, 0x41, 0x50, + 0x60, 0xf3, 0x01, 0x48, 0x48, 0xc4, 0x16, 0xf9, 0x01, 0x42, 0x36, 0x01, + 0xa8, 0xfa, 0x81, 0xb6, 0x03, 0x02, 0x60, 0x07, 0x8c, 0x03, 0x04, 0x41, + 0x18, 0x82, 0x01, 0xaf, 0x74, 0x42, 0x46, 0x03, 0x39, 0xf3, 0x81, 0x67, + 0x06, 0x9f, 0x21, 0x45, 0x03, 0x42, 0x0b, 0x06, 0x45, 0x45, 0xec, 0xa3, + 0xf6, 0x41, 0x80, 0x2d, 0x0e, 0x2f, 0x77, 0x01, 0xff, 0x43, 0x07, 0xf4, + 0x65, 0xf2, 0x01, 0x42, 0x81, 0x16, 0x60, 0xf2, 0x01, 0x42, 0xc7, 0x15, + 0x61, 0xf2, 0x01, 0x02, 0xa4, 0x02, 0x06, 0x42, 0xe2, 0x0c, 0x63, 0xf2, + 0x41, 0x42, 0x3c, 0x01, 0x62, 0xf2, 0x01, 0x46, 0xd0, 0xe0, 0x64, 0xf2, + 0x41, 0x47, 0xf8, 0xd4, 0xcd, 0xf4, 0x01, 0x46, 0x64, 0xe0, 0x8b, 0xf7, + 0x41, 0x49, 0x14, 0xb7, 0x3a, 0x21, 0x00, 0x53, 0xa5, 0x21, 0x67, 0x27, + 0x00, 0x58, 0xfe, 0x28, 0x65, 0x27, 0x00, 0x5d, 0xf9, 0x15, 0xcd, 0x2b, + 0x00, 0x57, 0xf0, 0x31, 0xcf, 0x2b, 0x40, 0x43, 0xee, 0x05, 0xf5, 0xf3, + 0x41, 0x44, 0x3d, 0x0d, 0x13, 0xf4, 0x01, 0x4b, 0x19, 0xa3, 0xdc, 0xfa, + 0x41, 0x47, 0x10, 0xcf, 0x9a, 0x01, 0x01, 0x4e, 0x4f, 0x76, 0x9b, 0x01, + 0x01, 0xa4, 0xe4, 0x01, 0x08, 0x20, 0x5d, 0x33, 0x4e, 0x65, 0x7b, 0x97, + 0x01, 0x01, 0xb3, 0x06, 0x4a, 0xc0, 0x9f, 0x91, 0x01, 0x41, 0xa5, 0x06, + 0x4b, 0x62, 0x9d, 0x95, 0x01, 0x41, 0x4b, 0xbf, 0x9f, 0x92, 0x01, 0x01, + 0x4d, 0x04, 0x89, 0x98, 0x01, 0x01, 0x02, 0xda, 0x06, 0x01, 0xff, 0x48, + 0x60, 0xc3, 0x90, 0x01, 0x01, 0x48, 0x47, 0x4a, 0x93, 0x01, 0x41, 0xa5, + 0x9e, 0x01, 0xa6, 0x68, 0x44, 0xcf, 0x2a, 0x68, 0x21, 0x00, 0x43, 0x0e, + 0x0b, 0x60, 0x21, 0x80, 0x3e, 0x54, 0x3c, 0x45, 0x83, 0x21, 0x00, 0xb3, + 0x23, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0x69, 0x21, 0x80, 0x13, 0x44, + 0x25, 0x01, 0x62, 0x21, 0x00, 0xb7, 0x01, 0xff, 0x44, 0xe7, 0x2b, 0x6b, + 0x21, 0x00, 0xef, 0x61, 0x21, 0x40, 0x49, 0x3f, 0x5e, 0x82, 0x21, 0x40, + 0x44, 0xc9, 0x1d, 0x66, 0x21, 0x00, 0x42, 0x01, 0x26, 0x65, 0x21, 0xc0, + 0x00, 0x4a, 0xdd, 0xa5, 0x85, 0x21, 0x40, 0x80, 0x01, 0xff, 0x47, 0x71, + 0x11, 0x6d, 0x21, 0x80, 0x0d, 0x48, 0x40, 0x5e, 0x6f, 0x21, 0xc0, 0x00, + 0x44, 0xbd, 0xec, 0x80, 0x21, 0x40, 0x49, 0x3f, 0x5e, 0x88, 0x21, 0x40, + 0xa9, 0x06, 0x43, 0xf6, 0x06, 0x63, 0x21, 0x40, 0x43, 0x52, 0x4d, 0x6c, + 0x21, 0x80, 0x16, 0x42, 0x32, 0x00, 0x64, 0x21, 0xc0, 0x00, 0x80, 0x01, + 0xff, 0x47, 0x71, 0x11, 0x6e, 0x21, 0x00, 0x48, 0x40, 0x5e, 0x81, 0x21, + 0x40, 0x80, 0x01, 0xff, 0x4a, 0x7f, 0xa9, 0x86, 0x21, 0x00, 0x48, 0x40, + 0x5e, 0x87, 0x21, 0x40, 0x44, 0xc9, 0x00, 0x67, 0x21, 0x00, 0x45, 0xb4, + 0x6f, 0x6a, 0x21, 0x40, 0x4c, 0x8f, 0x8e, 0x96, 0x01, 0x01, 0x53, 0x3c, + 0x4a, 0x94, 0x01, 0x01, 0x4d, 0xa0, 0x89, 0x99, 0x01, 0x41, 0x49, 0x71, + 0xb4, 0xfb, 0xf9, 0x01, 0xa5, 0x06, 0x59, 0x4d, 0x24, 0x23, 0xf9, 0x41, + 0x4e, 0xa3, 0x76, 0xde, 0xf5, 0x01, 0x02, 0x18, 0x00, 0x01, 0xff, 0x47, + 0xbb, 0x64, 0xa2, 0xf3, 0x01, 0x45, 0x00, 0xeb, 0xfc, 0xf6, 0x41, 0x42, + 0xed, 0x05, 0x80, 0xf6, 0x41, 0x47, 0x36, 0x4c, 0xfc, 0xfd, 0x00, 0x44, + 0x01, 0x86, 0x80, 0xf3, 0x81, 0xb3, 0x0f, 0x03, 0x0e, 0x08, 0xa2, 0x0f, + 0x43, 0xd5, 0x04, 0x46, 0xf9, 0x01, 0x03, 0xca, 0x00, 0x4a, 0x42, 0x1d, + 0x01, 0x8d, 0xf4, 0x81, 0x11, 0x17, 0x38, 0x31, 0x01, 0xff, 0x50, 0x26, + 0x63, 0x2b, 0x29, 0x00, 0x50, 0x7c, 0x40, 0x30, 0x29, 0x40, 0x80, 0x0c, + 0x49, 0x19, 0xb8, 0x90, 0xfa, 0x01, 0x48, 0x10, 0xc7, 0x6d, 0xf5, 0x41, + 0x45, 0x5c, 0x00, 0xda, 0x02, 0x00, 0x44, 0x51, 0xef, 0xdf, 0xf6, 0x01, + 0x48, 0xf8, 0x0c, 0x57, 0x22, 0x00, 0x4b, 0x78, 0x9d, 0x56, 0x22, 0x00, + 0x48, 0x7e, 0x1d, 0x18, 0x22, 0x00, 0x45, 0x9c, 0x01, 0x30, 0x2e, 0x40, + 0x80, 0xc6, 0x08, 0x8d, 0xe3, 0x06, 0x55, 0x99, 0x3b, 0x3d, 0x2a, 0x00, + 0x06, 0xa9, 0x01, 0x01, 0xff, 0x45, 0xce, 0x00, 0x92, 0x21, 0x80, 0xba, + 0x04, 0xa2, 0x9b, 0x04, 0x50, 0x86, 0x61, 0x3e, 0xf8, 0x01, 0xa4, 0xdb, + 0x03, 0xa6, 0xcc, 0x03, 0xa8, 0xcb, 0x02, 0x57, 0x6c, 0x2f, 0xa7, 0xf8, + 0x01, 0x51, 0xf9, 0x5c, 0xfe, 0x21, 0x00, 0xb0, 0xb0, 0x02, 0x4f, 0x0c, + 0x72, 0x46, 0x2b, 0x00, 0xb2, 0x9b, 0x02, 0xb3, 0x81, 0x02, 0xb4, 0x1f, + 0xb7, 0x01, 0xff, 0x49, 0x72, 0xb6, 0x9d, 0x21, 0x00, 0x4a, 0x4a, 0x10, + 0xe8, 0x21, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x49, 0x1e, 0xb9, 0xf0, 0x21, + 0x00, 0x59, 0xc7, 0x1e, 0x96, 0xf8, 0x41, 0x55, 0x52, 0x3d, 0xa3, 0xf8, + 0x01, 0x02, 0x0d, 0x00, 0x51, 0x02, 0x15, 0x02, 0x01, 0xff, 0x4d, 0x85, + 0x7f, 0xa0, 0x21, 0x00, 0x08, 0x09, 0x02, 0x01, 0xff, 0x06, 0xce, 0x00, + 0x06, 0x51, 0x91, 0x5e, 0x10, 0x29, 0x40, 0x48, 0x57, 0xb4, 0x05, 0x29, + 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x56, 0x95, 0x33, 0x01, 0x29, 0x00, + 0xb4, 0x06, 0x4f, 0x9c, 0x33, 0x00, 0x29, 0x40, 0x43, 0x90, 0x17, 0x16, + 0x29, 0x80, 0x06, 0x52, 0x2f, 0x06, 0xee, 0x2b, 0x40, 0x06, 0x50, 0x00, + 0x01, 0xff, 0x56, 0x95, 0x33, 0x18, 0x29, 0x00, 0x4f, 0x9c, 0x33, 0x17, + 0x29, 0x40, 0x05, 0x04, 0x02, 0x11, 0x04, 0x6d, 0x1d, 0x01, 0xff, 0x45, + 0xce, 0x00, 0xdb, 0x21, 0x00, 0x4a, 0x98, 0x5e, 0x0f, 0x29, 0x40, 0x4a, + 0xe0, 0x01, 0x92, 0xf8, 0x01, 0x08, 0x09, 0x02, 0x01, 0xff, 0x45, 0xce, + 0x00, 0x62, 0x2b, 0x80, 0x0c, 0x4c, 0xc3, 0x8d, 0x6c, 0x2b, 0x00, 0x4d, + 0x64, 0x87, 0x86, 0x2b, 0x40, 0x80, 0x01, 0xff, 0x64, 0x97, 0x09, 0x82, + 0x2b, 0x00, 0x46, 0xd1, 0x14, 0x72, 0x2b, 0x00, 0x05, 0x51, 0x00, 0x01, + 0xff, 0x4a, 0x53, 0xa8, 0x2a, 0xf8, 0x01, 0x07, 0x3b, 0x01, 0x28, 0x4b, + 0x6b, 0x68, 0x2e, 0xf8, 0x01, 0x09, 0xaf, 0xbb, 0x12, 0x4c, 0xef, 0x91, + 0x26, 0xf8, 0x01, 0x4c, 0x5b, 0x92, 0x22, 0xf8, 0x01, 0x50, 0x66, 0x68, + 0x32, 0xf8, 0x41, 0x49, 0xa5, 0x01, 0xa7, 0x2b, 0x00, 0x47, 0x50, 0x02, + 0xa5, 0x2b, 0x40, 0x51, 0x47, 0x05, 0x7c, 0x2b, 0x00, 0x4f, 0x9c, 0x33, + 0x7c, 0x2b, 0x40, 0x4f, 0xe7, 0x66, 0x52, 0xf8, 0x01, 0x02, 0x7c, 0x00, + 0x01, 0xff, 0x4a, 0xe9, 0x93, 0x3a, 0xf8, 0x01, 0x4b, 0x80, 0x7c, 0xdd, + 0x21, 0x40, 0x57, 0x10, 0x2f, 0xa5, 0xf8, 0x01, 0x45, 0x9d, 0xae, 0x6e, + 0xf6, 0x41, 0x4c, 0x65, 0x87, 0xc9, 0x21, 0x00, 0x4b, 0x84, 0xa4, 0xf8, + 0xfa, 0x41, 0xa1, 0x11, 0x05, 0x6e, 0x15, 0x01, 0xff, 0x45, 0xce, 0x00, + 0x46, 0xf8, 0x01, 0x50, 0x86, 0x61, 0x42, 0xf8, 0x41, 0x42, 0x1b, 0x00, + 0xf1, 0xfa, 0x01, 0x06, 0xcb, 0x02, 0x01, 0xff, 0x56, 0xe7, 0x35, 0xcc, + 0x21, 0x00, 0x0a, 0x98, 0x05, 0x01, 0xff, 0x04, 0xa5, 0x01, 0x31, 0x02, + 0x50, 0x02, 0x01, 0xff, 0x80, 0x06, 0x45, 0xa9, 0x01, 0xc0, 0x21, 0x40, + 0x06, 0x5c, 0x00, 0x0c, 0x48, 0x57, 0xb4, 0x5b, 0x29, 0x00, 0x46, 0xd1, + 0x14, 0x53, 0x29, 0x40, 0xac, 0x06, 0x61, 0x85, 0x05, 0x64, 0x29, 0x40, + 0x5d, 0xa2, 0x15, 0x68, 0x29, 0x00, 0x48, 0x38, 0x6b, 0x6c, 0x29, 0x40, + 0x80, 0x06, 0x45, 0xa9, 0x01, 0xc1, 0x21, 0x40, 0x66, 0x41, 0x06, 0x69, + 0x29, 0x00, 0x4f, 0x31, 0x6b, 0x6d, 0x29, 0x00, 0x48, 0x57, 0xb4, 0x5f, + 0x29, 0x00, 0x46, 0xd1, 0x14, 0x57, 0x29, 0x40, 0x50, 0xfd, 0x59, 0x36, + 0xf8, 0x01, 0x60, 0x34, 0x10, 0xab, 0xf8, 0x41, 0x4b, 0xc4, 0x8d, 0xe2, + 0x21, 0x00, 0x06, 0x3c, 0x01, 0x01, 0xff, 0x45, 0xce, 0x00, 0xd2, 0x21, + 0x80, 0x06, 0x4a, 0x98, 0x5e, 0x0d, 0x29, 0x40, 0x80, 0x06, 0x45, 0x8e, + 0x17, 0x1c, 0x29, 0x40, 0x48, 0x57, 0xb4, 0x07, 0x29, 0x00, 0x05, 0x51, + 0x00, 0x01, 0xff, 0x46, 0x52, 0x05, 0xcf, 0x21, 0x00, 0x4f, 0x9c, 0x33, + 0x03, 0x29, 0x40, 0x5f, 0xb3, 0x10, 0xa9, 0xf8, 0x01, 0x05, 0x0d, 0x03, + 0x06, 0x58, 0x66, 0x2a, 0xa1, 0xf8, 0x41, 0x45, 0xce, 0x00, 0x95, 0x2b, + 0x00, 0x53, 0xd3, 0x48, 0x8a, 0x2b, 0x40, 0x80, 0x06, 0x45, 0x8e, 0x17, + 0x1a, 0x29, 0x40, 0xa1, 0xdf, 0x01, 0x05, 0xaa, 0x05, 0xc7, 0x01, 0x54, + 0xd8, 0x44, 0xc4, 0x21, 0x00, 0xb4, 0x99, 0x01, 0x05, 0x51, 0x00, 0x01, + 0xff, 0x50, 0xa6, 0x61, 0xb4, 0x21, 0x00, 0x02, 0x3b, 0x01, 0x7e, 0x55, + 0xd5, 0x01, 0x16, 0xf8, 0x01, 0x44, 0xac, 0x0e, 0xaa, 0x21, 0x00, 0xac, + 0x5b, 0x59, 0xe3, 0x24, 0x06, 0xf8, 0x01, 0x4c, 0xd3, 0x92, 0x9a, 0xf8, + 0x01, 0x4a, 0x83, 0xaf, 0x45, 0x29, 0x00, 0xb3, 0x31, 0xb4, 0x06, 0x4f, + 0x9c, 0x33, 0xf8, 0x21, 0x40, 0x43, 0x90, 0x17, 0xa3, 0x21, 0x80, 0x11, + 0x03, 0x4a, 0x0c, 0x01, 0xff, 0x49, 0xa5, 0x01, 0x0e, 0x2b, 0x00, 0x47, + 0x50, 0x02, 0x0f, 0x2b, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x56, 0x95, + 0x33, 0x15, 0x29, 0x00, 0x4f, 0x9c, 0x33, 0x14, 0x29, 0x40, 0x05, 0x5e, + 0x07, 0x06, 0x45, 0x53, 0x05, 0x9b, 0x21, 0x40, 0x55, 0xd5, 0x01, 0x12, + 0xf8, 0x01, 0x52, 0x2e, 0x06, 0x02, 0xf8, 0x41, 0x57, 0x77, 0x29, 0x0a, + 0xf8, 0x01, 0xaf, 0x01, 0xff, 0x42, 0x1f, 0x00, 0xac, 0x21, 0x00, 0x48, + 0x69, 0xad, 0xb2, 0xf8, 0x41, 0x49, 0x14, 0xc0, 0x11, 0x29, 0x00, 0x54, + 0x97, 0x33, 0xfb, 0x21, 0x40, 0x07, 0x16, 0x2b, 0x11, 0x03, 0xd2, 0x14, + 0x01, 0xff, 0x42, 0x17, 0x00, 0xe5, 0x21, 0x00, 0x4c, 0x59, 0x57, 0x1e, + 0x29, 0x40, 0x4c, 0x87, 0x00, 0x43, 0x2b, 0x00, 0x48, 0x38, 0xcb, 0x44, + 0x2b, 0x00, 0xf8, 0x47, 0x29, 0x40, 0x43, 0x16, 0x00, 0xa6, 0x21, 0x80, + 0x06, 0x4f, 0x34, 0x0c, 0xc1, 0xf8, 0x41, 0x51, 0x54, 0x57, 0x20, 0x29, + 0x40, 0x05, 0x5d, 0x00, 0x06, 0x63, 0xfb, 0x0a, 0xb6, 0xfb, 0x41, 0x4f, + 0xaa, 0x6a, 0x75, 0x29, 0x00, 0x08, 0x66, 0x72, 0x0c, 0x55, 0x24, 0x3e, + 0x42, 0x29, 0x00, 0x4e, 0x78, 0x3e, 0x74, 0x29, 0x40, 0x4f, 0xaa, 0x6a, + 0x48, 0x2b, 0x00, 0x4e, 0x78, 0x3e, 0x4c, 0x2b, 0x40, 0x07, 0x6f, 0x2e, + 0x9c, 0x01, 0x5b, 0x85, 0x1b, 0xe5, 0x26, 0x00, 0x09, 0x9c, 0x01, 0x2b, + 0xb3, 0x1d, 0x08, 0xa8, 0xcb, 0x01, 0xff, 0x49, 0x58, 0xb8, 0x2b, 0x20, + 0x00, 0x47, 0x5f, 0x03, 0x67, 0x20, 0x00, 0x44, 0xb9, 0x00, 0x0f, 0x20, + 0x00, 0x48, 0xb0, 0xc9, 0x2e, 0x20, 0x40, 0x5c, 0xde, 0x17, 0xa9, 0x27, + 0x00, 0x57, 0xf9, 0x2e, 0x38, 0x29, 0x40, 0xa1, 0x59, 0x54, 0x68, 0x41, + 0xfd, 0x29, 0x00, 0xa4, 0x45, 0x4b, 0xaa, 0x9b, 0x7a, 0xcc, 0x01, 0x47, + 0x55, 0xd1, 0x01, 0xcc, 0x01, 0x50, 0xf6, 0x64, 0x0e, 0xf5, 0x01, 0xb2, + 0x0c, 0x4c, 0x73, 0x95, 0x03, 0xcc, 0x01, 0x44, 0x75, 0xc7, 0x9f, 0xcc, + 0x41, 0x49, 0x9a, 0xb5, 0x99, 0xcc, 0x01, 0x44, 0xc5, 0xac, 0x67, 0xcc, + 0x01, 0xaf, 0x01, 0xff, 0x05, 0x66, 0x09, 0x06, 0x50, 0xb6, 0x64, 0xa3, + 0xcc, 0x41, 0x47, 0x9c, 0xcf, 0xa1, 0xcc, 0x01, 0x44, 0x11, 0x21, 0x58, + 0xcc, 0x41, 0x44, 0x9d, 0xf0, 0x0f, 0xcc, 0x01, 0x5a, 0xb8, 0x21, 0xbb, + 0x00, 0x40, 0x4c, 0x3f, 0x0f, 0x2a, 0x23, 0x00, 0x4a, 0x03, 0xb2, 0x62, + 0xcc, 0x41, 0x56, 0xe5, 0x32, 0x8d, 0x05, 0x00, 0x48, 0xf0, 0xc3, 0x49, + 0xcc, 0x01, 0x03, 0x2a, 0x5b, 0x20, 0xb3, 0x01, 0xff, 0x0f, 0x77, 0x2e, + 0x0d, 0x4a, 0x2f, 0xb3, 0xd5, 0x0f, 0xc0, 0x00, 0x4a, 0x26, 0x59, 0xd7, + 0x0f, 0x40, 0x4c, 0x7b, 0x8d, 0x76, 0xcc, 0x01, 0x4a, 0x3c, 0x29, 0x72, + 0xcc, 0x41, 0xe8, 0x93, 0xcc, 0x81, 0x04, 0xf4, 0x1c, 0xf9, 0x41, 0x50, + 0x36, 0x29, 0x95, 0xcc, 0x41, 0xa1, 0x93, 0x05, 0x06, 0x0c, 0x03, 0x82, + 0x05, 0xa3, 0xd7, 0x04, 0x02, 0x3b, 0x01, 0xa7, 0x04, 0xa6, 0x90, 0x04, + 0x02, 0x22, 0x00, 0xa9, 0x03, 0x14, 0xc0, 0x43, 0x98, 0x03, 0x56, 0x8f, + 0x35, 0x1d, 0x2e, 0x00, 0x60, 0xd4, 0x0f, 0xca, 0x22, 0x00, 0xaf, 0xed, + 0x02, 0x4b, 0xd8, 0x21, 0x29, 0x00, 0x80, 0xd0, 0x02, 0x57, 0x80, 0x30, + 0x0d, 0x2e, 0x00, 0xb3, 0xb4, 0x01, 0xb4, 0x4b, 0x09, 0x32, 0x00, 0x33, + 0xb7, 0x01, 0xff, 0x05, 0xae, 0x02, 0x06, 0x4b, 0xf4, 0x96, 0xd9, 0x29, + 0x40, 0xa3, 0x18, 0x52, 0x6c, 0x27, 0x17, 0x30, 0x00, 0x4b, 0xd8, 0x21, + 0x86, 0x29, 0x00, 0x4e, 0xc8, 0x26, 0x1b, 0x30, 0x00, 0x56, 0x54, 0x09, + 0x19, 0x30, 0x40, 0x4d, 0x35, 0x69, 0x0f, 0x30, 0x00, 0x4c, 0x73, 0x0b, + 0x84, 0x29, 0x40, 0xa2, 0x06, 0x4d, 0x00, 0x30, 0x06, 0xcc, 0x41, 0x4d, + 0x96, 0x80, 0x21, 0x2e, 0x00, 0x47, 0x65, 0xd4, 0xb9, 0x23, 0x40, 0x43, + 0x0e, 0x03, 0xa2, 0x22, 0x00, 0xa8, 0x27, 0x55, 0x55, 0x09, 0x15, 0x30, + 0x00, 0xb2, 0x01, 0xff, 0x53, 0x15, 0x48, 0x0a, 0x2e, 0x00, 0x04, 0x1b, + 0x01, 0x01, 0xff, 0x42, 0x68, 0x00, 0xbf, 0x22, 0x80, 0x06, 0x56, 0x3a, + 0x1d, 0x6e, 0xfb, 0x41, 0x54, 0x74, 0x3f, 0xce, 0x29, 0x40, 0x04, 0x3a, + 0x89, 0x28, 0x4c, 0x87, 0x93, 0xed, 0xf5, 0x01, 0x04, 0x26, 0x01, 0x01, + 0xff, 0x4d, 0x01, 0x4d, 0x88, 0xfb, 0x01, 0x09, 0x2a, 0x01, 0x01, 0xff, + 0x45, 0x33, 0x01, 0x8a, 0xfb, 0x01, 0x57, 0x83, 0x2f, 0xa1, 0xce, 0x01, + 0x57, 0x94, 0x31, 0xaa, 0xce, 0x41, 0x48, 0x08, 0xc7, 0x0d, 0xcc, 0x01, + 0x5a, 0x88, 0x22, 0xc3, 0xfb, 0x41, 0x55, 0xcf, 0x38, 0xc6, 0x27, 0x00, + 0xa5, 0x7f, 0xa9, 0x71, 0x02, 0x6f, 0x02, 0x4f, 0x4d, 0xc9, 0x26, 0x5d, + 0x00, 0x80, 0x06, 0x53, 0xab, 0x26, 0x03, 0x2e, 0x40, 0x80, 0x01, 0xff, + 0x49, 0xc1, 0x58, 0xa5, 0x23, 0x00, 0x4c, 0x6b, 0x91, 0xa6, 0x23, 0x00, + 0x4c, 0x87, 0x96, 0xa4, 0x23, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x4d, + 0x36, 0x82, 0x58, 0x2e, 0x00, 0x45, 0x9e, 0x80, 0x46, 0x20, 0x00, 0x46, + 0x52, 0x05, 0x56, 0x2e, 0x00, 0x08, 0x90, 0xcb, 0x06, 0x48, 0xe3, 0x59, + 0x8c, 0x29, 0x40, 0x4d, 0x32, 0x81, 0x8e, 0x29, 0x00, 0x4a, 0x0d, 0xb2, + 0x90, 0x29, 0x40, 0x44, 0x92, 0x27, 0x68, 0xf5, 0x81, 0x06, 0x4a, 0x72, + 0x7c, 0xe9, 0xf5, 0x41, 0x06, 0x50, 0x00, 0x01, 0xff, 0x4e, 0x4d, 0x7a, + 0x69, 0xf5, 0x01, 0x51, 0x5e, 0x5e, 0x6a, 0xf5, 0x41, 0x50, 0xd6, 0x61, + 0x27, 0x2e, 0x00, 0x53, 0x97, 0x0b, 0x19, 0x20, 0x40, 0x50, 0xe4, 0x0f, + 0xcc, 0x22, 0x00, 0x51, 0xfd, 0x4c, 0x8b, 0xfb, 0x41, 0x80, 0x01, 0xff, + 0x49, 0xc1, 0x58, 0x9f, 0x23, 0x00, 0x4a, 0x67, 0xad, 0xa0, 0x23, 0x00, + 0x4a, 0xdf, 0xb2, 0x9e, 0x23, 0x40, 0x03, 0xef, 0x07, 0x0c, 0x4f, 0xb2, + 0x71, 0xbc, 0xfb, 0x01, 0x49, 0x52, 0xaf, 0xd6, 0x27, 0x40, 0x4c, 0x12, + 0x0b, 0x95, 0x25, 0x00, 0x4d, 0x43, 0x1d, 0x87, 0xfb, 0x41, 0x4c, 0x0c, + 0x03, 0xe9, 0xfb, 0x01, 0x4c, 0x32, 0x11, 0xe1, 0xfb, 0x41, 0x03, 0x24, + 0x00, 0x06, 0x55, 0x13, 0x3d, 0x7d, 0xf5, 0x41, 0x5a, 0xfa, 0x1e, 0x00, + 0xce, 0x01, 0x02, 0x33, 0x01, 0x38, 0xa6, 0x2a, 0x65, 0xe2, 0x07, 0x11, + 0xce, 0x01, 0x57, 0x83, 0x2f, 0xa0, 0xce, 0x01, 0x4c, 0x44, 0x04, 0x8d, + 0xfb, 0x01, 0x4b, 0x69, 0xa2, 0xb3, 0xfb, 0x01, 0x56, 0x73, 0x37, 0x0e, + 0xce, 0x01, 0x57, 0x94, 0x31, 0xab, 0xce, 0x01, 0x4d, 0x97, 0x8a, 0x0c, + 0xce, 0x41, 0x4c, 0x9b, 0x91, 0xa5, 0xcc, 0x01, 0x45, 0xcc, 0x65, 0xba, + 0xfb, 0x41, 0x04, 0x0e, 0x03, 0x06, 0x43, 0x35, 0x01, 0x90, 0x25, 0x40, + 0x46, 0x12, 0x03, 0xd7, 0x25, 0x00, 0x44, 0x31, 0x13, 0xe9, 0x2b, 0x40, + 0xa9, 0x06, 0x44, 0x59, 0x24, 0x0b, 0x23, 0x40, 0x47, 0xfc, 0xb8, 0x7d, + 0x29, 0x00, 0x50, 0xab, 0x51, 0x89, 0xfb, 0x41, 0x59, 0xa5, 0x26, 0x05, + 0x2e, 0x00, 0x05, 0x3d, 0x01, 0x01, 0xff, 0xa1, 0x12, 0x4b, 0xd8, 0x21, + 0x29, 0x2e, 0x00, 0x4e, 0x19, 0x05, 0x1d, 0x20, 0x00, 0x4c, 0xf3, 0x96, + 0xdb, 0x29, 0x40, 0x4c, 0x3f, 0x0f, 0x0b, 0x30, 0x00, 0x56, 0x05, 0x37, + 0x70, 0x29, 0x40, 0x46, 0x91, 0xc4, 0x09, 0x23, 0x00, 0x4d, 0x35, 0x69, + 0x0d, 0x30, 0x00, 0x4c, 0x73, 0x0b, 0x7d, 0x00, 0xc0, 0x00, 0x80, 0x01, + 0xff, 0x4a, 0x67, 0xad, 0xad, 0x23, 0x00, 0x4c, 0x07, 0x92, 0xac, 0x23, + 0x00, 0x4a, 0xdf, 0xb2, 0xab, 0x23, 0x40, 0x52, 0x6c, 0x27, 0x11, 0x30, + 0x00, 0x56, 0x54, 0x09, 0x98, 0x29, 0x40, 0xae, 0x1a, 0xb2, 0x01, 0xff, + 0x56, 0xac, 0x17, 0x94, 0x29, 0x00, 0x09, 0x25, 0x06, 0x01, 0xff, 0x4c, + 0x57, 0x8d, 0xf4, 0x27, 0x00, 0x4c, 0x3f, 0x15, 0xf4, 0x21, 0x40, 0x02, + 0x06, 0x00, 0x43, 0xa7, 0x01, 0xff, 0x49, 0x7c, 0xb8, 0xef, 0xf5, 0x01, + 0x42, 0x68, 0x00, 0x1f, 0x22, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x47, 0x63, + 0x09, 0x09, 0x30, 0x80, 0x23, 0x5a, 0xca, 0x1f, 0x01, 0x2e, 0x00, 0x53, + 0xd1, 0x1f, 0x00, 0x2e, 0x00, 0x53, 0x77, 0x4e, 0x9c, 0x29, 0x00, 0x05, + 0x51, 0x00, 0x01, 0xff, 0x43, 0xaa, 0x17, 0xbe, 0x22, 0x00, 0x56, 0xd7, + 0x33, 0x7c, 0x23, 0x40, 0x49, 0x75, 0x3b, 0x92, 0x29, 0x40, 0x56, 0x08, + 0x0b, 0x7f, 0xfb, 0x01, 0x56, 0xcb, 0x37, 0x7e, 0xfb, 0x41, 0x44, 0xcd, + 0x1c, 0x59, 0xf3, 0x01, 0x47, 0x21, 0xd0, 0x58, 0xf3, 0x41, 0x07, 0xcd, + 0x00, 0x01, 0xff, 0x05, 0x9e, 0x14, 0x31, 0x05, 0xc3, 0x00, 0x21, 0x06, + 0xc8, 0x00, 0x11, 0x03, 0x7d, 0x15, 0x01, 0xff, 0x44, 0xc3, 0x00, 0xb2, + 0x2b, 0x00, 0x45, 0xc8, 0x00, 0xb3, 0x2b, 0x40, 0x44, 0xa5, 0x01, 0xb7, + 0x2b, 0x00, 0x42, 0x50, 0x02, 0xb5, 0x2b, 0x40, 0x44, 0xa5, 0x01, 0xb6, + 0x2b, 0x00, 0x42, 0x50, 0x02, 0xb4, 0x2b, 0x40, 0x44, 0xc3, 0x00, 0xb0, + 0x2b, 0x00, 0x45, 0xc8, 0x00, 0xb1, 0x2b, 0x40, 0xa3, 0xb8, 0x05, 0x02, + 0x06, 0x00, 0xa7, 0x05, 0x4c, 0xe3, 0x8e, 0x3b, 0x20, 0x00, 0x02, 0xf1, + 0x06, 0xaa, 0x04, 0x05, 0xa4, 0xe7, 0xcb, 0x02, 0x4b, 0xe1, 0x58, 0x0c, + 0xf6, 0x01, 0x4d, 0xf8, 0x85, 0x97, 0xf3, 0x01, 0x53, 0x87, 0x20, 0xfd, + 0xff, 0x00, 0xb3, 0x99, 0x02, 0x05, 0xa0, 0xeb, 0x82, 0x02, 0xb6, 0x01, + 0xff, 0x04, 0x3f, 0x04, 0x06, 0x4d, 0xc8, 0x86, 0x9e, 0xf4, 0x41, 0x80, + 0xa9, 0x01, 0x02, 0x06, 0x00, 0x01, 0xff, 0x45, 0x04, 0x02, 0xa3, 0x29, + 0x80, 0x96, 0x01, 0x45, 0x13, 0x05, 0x41, 0x2e, 0x00, 0x07, 0x3b, 0x01, + 0x79, 0x49, 0x61, 0xb8, 0xb0, 0x29, 0x00, 0x52, 0xbb, 0x51, 0x11, 0x2e, + 0x00, 0x60, 0xb4, 0x0f, 0x95, 0xf5, 0x01, 0x48, 0x8a, 0x73, 0x10, 0x23, + 0x00, 0xb0, 0x53, 0x4d, 0xa6, 0x34, 0x2e, 0x2e, 0x00, 0xb2, 0x39, 0xb3, + 0x2b, 0xb4, 0x06, 0x4c, 0xcf, 0x96, 0x94, 0xf5, 0x41, 0x06, 0x9e, 0xdc, + 0x13, 0x44, 0x36, 0x23, 0x3d, 0x22, 0x80, 0x06, 0x4b, 0x1c, 0xa2, 0x37, + 0x20, 0x40, 0x47, 0x47, 0x13, 0xcd, 0x22, 0x40, 0x49, 0xc8, 0xb7, 0x93, + 0xf5, 0x01, 0x47, 0xdb, 0xd6, 0x92, 0xf5, 0x41, 0x53, 0x02, 0x48, 0x43, + 0x21, 0x00, 0x48, 0xda, 0x59, 0x4f, 0x20, 0x40, 0x5f, 0xd2, 0x10, 0x91, + 0xf5, 0x01, 0x4a, 0x51, 0x45, 0xfe, 0x2b, 0x00, 0x5a, 0x9e, 0x21, 0x19, + 0x26, 0x40, 0x4b, 0x57, 0x9d, 0x4b, 0x20, 0x00, 0x44, 0xeb, 0x1a, 0x35, + 0x20, 0x40, 0x45, 0xea, 0x1a, 0x36, 0x20, 0x80, 0x06, 0x4f, 0x83, 0x73, + 0xed, 0x2a, 0x40, 0x4f, 0x18, 0x05, 0x1d, 0x30, 0x40, 0x4e, 0x2d, 0x5f, + 0xa5, 0x29, 0x40, 0x4d, 0x6d, 0x14, 0x7f, 0xf6, 0x01, 0x45, 0x8f, 0x13, + 0x8d, 0x00, 0x00, 0x02, 0xc3, 0x01, 0x2d, 0x47, 0x4f, 0x31, 0x5c, 0x00, + 0x80, 0x11, 0x15, 0x78, 0x3e, 0x01, 0xff, 0x4f, 0x4d, 0x1a, 0x41, 0x2b, + 0x00, 0x50, 0xb3, 0x02, 0x47, 0x2b, 0x40, 0x80, 0x01, 0xff, 0x48, 0x7e, + 0x1d, 0xf5, 0x29, 0x00, 0x50, 0xf6, 0x65, 0xc8, 0x27, 0x00, 0x56, 0x23, + 0x38, 0xf7, 0x29, 0x40, 0x5e, 0x17, 0x13, 0xc8, 0xf7, 0x01, 0x47, 0xd0, + 0x20, 0x8d, 0x00, 0x40, 0x44, 0xc3, 0x00, 0x90, 0x2b, 0x00, 0x45, 0xc8, + 0x00, 0x91, 0x2b, 0x00, 0x46, 0x16, 0x08, 0xce, 0x23, 0x40, 0x45, 0x06, + 0xea, 0x1f, 0x21, 0x00, 0x02, 0x19, 0x01, 0x01, 0xff, 0x11, 0xd9, 0x5a, + 0x06, 0x43, 0x03, 0x54, 0xbb, 0xf6, 0x41, 0xd1, 0xe0, 0x26, 0x00, 0xd2, + 0xe1, 0x26, 0x40, 0x0f, 0x3d, 0x33, 0xc4, 0x01, 0x07, 0xec, 0x05, 0x37, + 0x4c, 0xf8, 0x26, 0x5f, 0xa9, 0x00, 0xb6, 0x01, 0xff, 0x45, 0xe4, 0x23, + 0x53, 0xa9, 0x00, 0x0a, 0x41, 0x77, 0x01, 0xff, 0xa1, 0x19, 0xe5, 0x49, + 0xa9, 0x80, 0x0c, 0xe9, 0x47, 0xa9, 0x00, 0xef, 0x4b, 0xa9, 0x00, 0xf5, + 0x48, 0xa9, 0x40, 0xe1, 0x4e, 0xa9, 0x00, 0xf5, 0x4d, 0xa9, 0x40, 0xe9, + 0x4a, 0xa9, 0x00, 0xf5, 0x4c, 0xa9, 0x40, 0xe1, 0x46, 0xa9, 0x00, 0x42, + 0x16, 0x00, 0x37, 0xa9, 0x00, 0x42, 0x37, 0x00, 0x39, 0xa9, 0x00, 0x42, + 0xf0, 0x10, 0x34, 0xa9, 0x00, 0x42, 0x24, 0x02, 0x31, 0xa9, 0x00, 0x42, + 0x22, 0x00, 0x41, 0xa9, 0x00, 0x42, 0x56, 0x19, 0x3a, 0xa9, 0x00, 0x42, + 0x1b, 0x02, 0x30, 0xa9, 0x00, 0x42, 0x74, 0x00, 0x3e, 0xa9, 0x00, 0xad, + 0x49, 0xae, 0x24, 0x42, 0xbb, 0x09, 0x36, 0xa9, 0x00, 0x42, 0x71, 0x00, + 0x3d, 0xa9, 0x00, 0x42, 0x40, 0x06, 0x3c, 0xa9, 0x00, 0x42, 0x12, 0x00, + 0x33, 0xa9, 0x00, 0x42, 0xa9, 0x01, 0x40, 0xa9, 0x00, 0x42, 0xbc, 0x22, + 0x3f, 0xa9, 0x40, 0xe1, 0x35, 0xa9, 0x00, 0x42, 0xf0, 0x10, 0x44, 0xa9, + 0x00, 0xa7, 0x0d, 0xb9, 0x01, 0xff, 0xe1, 0x3b, 0xa9, 0x00, 0x42, 0x56, + 0x19, 0x45, 0xa9, 0x40, 0xe1, 0x32, 0xa9, 0x00, 0x42, 0x24, 0x02, 0x43, + 0xa9, 0x40, 0xe1, 0x38, 0xa9, 0x00, 0x42, 0x16, 0x00, 0x42, 0xa9, 0x40, + 0xe8, 0x52, 0xa9, 0x00, 0xee, 0x50, 0xa9, 0x80, 0x04, 0xf2, 0x51, 0xa9, + 0x40, 0xe7, 0x4f, 0xa9, 0x40, 0x1d, 0x50, 0x16, 0x06, 0x4b, 0xed, 0xa2, + 0xae, 0x00, 0x40, 0xe1, 0xe6, 0xf1, 0x01, 0xe2, 0xe7, 0xf1, 0x01, 0xe3, + 0xe8, 0xf1, 0x01, 0xe4, 0xe9, 0xf1, 0x01, 0xe5, 0xea, 0xf1, 0x01, 0xe6, + 0xeb, 0xf1, 0x01, 0xe7, 0xec, 0xf1, 0x01, 0xe8, 0xed, 0xf1, 0x01, 0xe9, + 0xee, 0xf1, 0x01, 0xea, 0xef, 0xf1, 0x01, 0xeb, 0xf0, 0xf1, 0x01, 0xec, + 0xf1, 0xf1, 0x01, 0xed, 0xf2, 0xf1, 0x01, 0xee, 0xf3, 0xf1, 0x01, 0xef, + 0xf4, 0xf1, 0x01, 0xf0, 0xf5, 0xf1, 0x01, 0xf1, 0xf6, 0xf1, 0x01, 0xf2, + 0xf7, 0xf1, 0x01, 0xf3, 0xf8, 0xf1, 0x01, 0xf4, 0xf9, 0xf1, 0x01, 0xf5, + 0xfa, 0xf1, 0x01, 0xf6, 0xfb, 0xf1, 0x01, 0xf7, 0xfc, 0xf1, 0x01, 0xf8, + 0xfd, 0xf1, 0x01, 0xf9, 0xfe, 0xf1, 0x01, 0xfa, 0xff, 0xf1, 0x41, 0x45, + 0x57, 0xe4, 0x4e, 0xf3, 0x01, 0x4d, 0x54, 0x83, 0xe7, 0xf9, 0x41, 0xa5, + 0x51, 0x4d, 0x59, 0x66, 0x1e, 0x00, 0x00, 0x51, 0x81, 0x5d, 0x99, 0xf6, + 0x01, 0x03, 0x21, 0x25, 0x01, 0xff, 0x4f, 0xdf, 0x29, 0x7c, 0x26, 0x00, + 0x0f, 0xa6, 0x6e, 0x01, 0xff, 0x51, 0x40, 0x5a, 0x7a, 0x26, 0x00, 0x05, + 0x4b, 0x21, 0x01, 0xff, 0x4a, 0xcd, 0xa6, 0x73, 0x26, 0x00, 0x4a, 0xe1, + 0xa6, 0x74, 0x26, 0x00, 0x4a, 0xf5, 0xa6, 0x75, 0x26, 0x00, 0x4a, 0xff, + 0xa6, 0x76, 0x26, 0x00, 0x4a, 0x09, 0xa7, 0x77, 0x26, 0x00, 0x4a, 0x13, + 0xa7, 0x78, 0x26, 0x00, 0x4a, 0x1d, 0xa7, 0x79, 0x26, 0x40, 0x43, 0x77, + 0x06, 0xfe, 0xf9, 0x01, 0x46, 0x44, 0xdf, 0x12, 0xcc, 0x41, 0x44, 0x39, + 0xef, 0x07, 0xf4, 0x81, 0xcd, 0x01, 0xa3, 0xb3, 0x01, 0x02, 0x00, 0x00, + 0x97, 0x01, 0xa9, 0x15, 0xed, 0x0f, 0xf4, 0x01, 0xf4, 0x00, 0xf4, 0x81, + 0x06, 0x43, 0xdf, 0xf4, 0x92, 0xfa, 0x41, 0x42, 0xb5, 0x00, 0x36, 0x22, + 0x40, 0x05, 0x49, 0xe8, 0x70, 0xee, 0xc6, 0x26, 0x80, 0x65, 0x04, 0x46, + 0x03, 0x01, 0xff, 0x4c, 0x8b, 0x8c, 0x1a, 0xf9, 0x01, 0x45, 0x13, 0x05, + 0x34, 0x2e, 0x00, 0x43, 0x23, 0x0a, 0x33, 0x2e, 0x80, 0x47, 0x44, 0xea, + 0xca, 0x0a, 0x27, 0x00, 0x44, 0xc6, 0x0d, 0x0b, 0x27, 0x80, 0x29, 0x54, + 0x8a, 0x2b, 0x06, 0x2e, 0x00, 0xad, 0x0f, 0xb3, 0x01, 0xff, 0x58, 0x06, + 0x2a, 0xcc, 0xfb, 0x01, 0x45, 0xd7, 0x05, 0x0b, 0x2e, 0x40, 0x46, 0x3f, + 0x64, 0x6a, 0xf1, 0x01, 0x46, 0xb0, 0x47, 0x6b, 0xf1, 0x01, 0x46, 0x2f, + 0x0e, 0x6c, 0xf1, 0x41, 0x06, 0x50, 0x00, 0x01, 0xff, 0x4f, 0xe2, 0x10, + 0x90, 0xf5, 0x01, 0x64, 0xbb, 0x09, 0x96, 0xf5, 0x41, 0x58, 0x86, 0x2b, + 0x07, 0x2e, 0x40, 0x43, 0x3f, 0x81, 0x08, 0xf3, 0x41, 0x43, 0xc3, 0x64, + 0x83, 0xf6, 0x01, 0x45, 0x73, 0xeb, 0xe4, 0xf6, 0x41, 0x51, 0xec, 0x58, + 0xb7, 0x23, 0x00, 0xef, 0xfb, 0xf4, 0xc1, 0x00, 0x47, 0x1f, 0xcd, 0x18, + 0xf5, 0x01, 0x4b, 0xbe, 0x98, 0x22, 0x26, 0x40, 0x44, 0x65, 0xef, 0x9d, + 0xf9, 0x01, 0x04, 0xa1, 0x01, 0x01, 0xff, 0x43, 0xc3, 0x64, 0xce, 0xf3, + 0x01, 0x4a, 0x1b, 0xae, 0xcd, 0xf3, 0x41, 0x45, 0x0b, 0x08, 0x30, 0xf4, + 0x41, 0xa1, 0x24, 0x06, 0xa8, 0x34, 0x0c, 0x46, 0xe6, 0xdc, 0xbb, 0x26, + 0x00, 0x4c, 0x1b, 0x05, 0x22, 0x00, 0x40, 0x80, 0x06, 0x4b, 0x3b, 0x67, + 0x5f, 0x22, 0x40, 0x50, 0xad, 0x00, 0x48, 0x20, 0x00, 0x44, 0xb9, 0x00, + 0x3f, 0x00, 0x40, 0x02, 0x26, 0x0d, 0x12, 0x43, 0x76, 0x14, 0x7e, 0xf7, + 0x01, 0x49, 0xb2, 0x54, 0x69, 0x26, 0x00, 0x59, 0x8c, 0x26, 0x16, 0x2a, + 0x40, 0x04, 0x7e, 0x0d, 0x11, 0x05, 0x42, 0x4c, 0x01, 0xff, 0x51, 0x94, + 0x26, 0x0c, 0x2a, 0x00, 0x45, 0xea, 0x1a, 0x57, 0x20, 0x40, 0x06, 0x13, + 0x01, 0x46, 0x06, 0x6d, 0x02, 0x01, 0xff, 0x44, 0xc3, 0x00, 0x98, 0x25, + 0x80, 0x14, 0x45, 0xc8, 0x00, 0x9d, 0x25, 0xc0, 0x00, 0x4f, 0xa7, 0x39, + 0x9e, 0x25, 0xc0, 0x00, 0x50, 0x3c, 0x44, 0x9f, 0x25, 0x40, 0x05, 0x19, + 0x00, 0x01, 0xff, 0x06, 0x13, 0x01, 0x11, 0x16, 0xe1, 0x37, 0x01, 0xff, + 0x44, 0xc3, 0x00, 0x9b, 0x25, 0x00, 0x45, 0xc8, 0x00, 0x9c, 0x25, 0x40, + 0x54, 0x38, 0x44, 0x99, 0x25, 0x00, 0x45, 0xc8, 0x00, 0x9a, 0x25, 0x40, + 0x44, 0xc3, 0x00, 0x96, 0x25, 0x00, 0x45, 0xc8, 0x00, 0x97, 0x25, 0x40, + 0xa1, 0x96, 0x18, 0xa5, 0x83, 0x16, 0xa8, 0xed, 0x0e, 0xa9, 0xe6, 0x0d, + 0xac, 0xf9, 0x07, 0x4d, 0x7a, 0x86, 0x11, 0xcc, 0x01, 0xaf, 0x94, 0x06, + 0xb2, 0x84, 0x02, 0xb3, 0x33, 0xb5, 0x01, 0xff, 0x58, 0x7e, 0x27, 0xe2, + 0xf4, 0x01, 0x04, 0x09, 0x0c, 0x1a, 0xb2, 0x0c, 0x45, 0xfa, 0xd4, 0xcc, + 0xf4, 0x01, 0x5c, 0x2e, 0x19, 0xae, 0xf6, 0x41, 0x49, 0x13, 0xbe, 0x9c, + 0xf4, 0x01, 0x42, 0x46, 0x03, 0x5b, 0xf4, 0x41, 0x4b, 0x6e, 0x99, 0x08, + 0x20, 0x00, 0x4f, 0xde, 0x72, 0x4e, 0x2e, 0x40, 0x0e, 0xd1, 0x75, 0x06, + 0x44, 0x3d, 0xf3, 0xc9, 0xce, 0x41, 0x0f, 0x3e, 0x6d, 0xb4, 0x01, 0x07, + 0xec, 0x05, 0x3f, 0x07, 0xff, 0x39, 0x0c, 0x4c, 0xf8, 0x26, 0x99, 0x0b, + 0x01, 0x53, 0xdf, 0x4d, 0x9a, 0x0b, 0x41, 0x44, 0xf5, 0x06, 0xac, 0x0b, + 0x01, 0x43, 0x0e, 0x0b, 0xa9, 0x0b, 0x81, 0x1c, 0xb4, 0x01, 0xff, 0x42, + 0x92, 0x01, 0xad, 0x0b, 0x01, 0x44, 0x25, 0x01, 0xab, 0x0b, 0x01, 0xb7, + 0x01, 0xff, 0x44, 0xcb, 0x1d, 0xae, 0x0b, 0x01, 0xef, 0xaa, 0x0b, 0x41, + 0x48, 0x70, 0x11, 0xaf, 0x0b, 0x41, 0x45, 0xb2, 0xad, 0x80, 0x0b, 0x01, + 0x44, 0x41, 0xef, 0x81, 0x0b, 0x01, 0x46, 0x23, 0x4a, 0x83, 0x0b, 0x01, + 0x45, 0xdd, 0xaa, 0x82, 0x0b, 0x01, 0x42, 0xb0, 0x01, 0x84, 0x0b, 0x81, + 0x4c, 0x44, 0xcd, 0xf0, 0x89, 0x0b, 0x01, 0x46, 0x94, 0xdd, 0x8a, 0x0b, + 0x01, 0x48, 0x48, 0xc8, 0x8b, 0x0b, 0x01, 0x43, 0xdc, 0x22, 0x8c, 0x0b, + 0x01, 0x42, 0x6f, 0x02, 0x8e, 0x0b, 0x01, 0xb3, 0x18, 0x43, 0xa4, 0xc4, + 0x91, 0x0b, 0x01, 0x4d, 0x8a, 0x8a, 0x85, 0x0b, 0x01, 0x44, 0xa1, 0x52, + 0x88, 0x0b, 0x01, 0x45, 0x9b, 0x52, 0x86, 0x0b, 0x41, 0xa1, 0x06, 0x43, + 0x7a, 0x16, 0x90, 0x0b, 0x41, 0x43, 0xad, 0xea, 0x8f, 0x0b, 0x01, 0x44, + 0x49, 0xe4, 0x8d, 0x0b, 0x41, 0x42, 0x53, 0x00, 0x87, 0x0b, 0x41, 0x45, + 0x95, 0x10, 0x9b, 0x0b, 0x01, 0x43, 0x23, 0x0a, 0x9c, 0x0b, 0x41, 0x4a, + 0x21, 0xa8, 0xff, 0xf4, 0x01, 0xa5, 0x86, 0x01, 0xa9, 0x30, 0xaf, 0x01, + 0xff, 0x49, 0xa8, 0xb6, 0xaf, 0xf9, 0x01, 0x4c, 0xaf, 0x8f, 0xc7, 0xf6, + 0x01, 0x47, 0x35, 0xd2, 0x05, 0x23, 0x00, 0xb0, 0x06, 0x47, 0x6d, 0x48, + 0xd8, 0x2b, 0x40, 0x49, 0x8e, 0xb8, 0x4a, 0x21, 0x00, 0x46, 0x2e, 0x24, + 0x37, 0x22, 0xc0, 0x00, 0x45, 0xfb, 0x0c, 0x1d, 0x22, 0x40, 0x42, 0x2a, + 0x02, 0x32, 0x20, 0x00, 0xae, 0x29, 0x02, 0xf5, 0x0a, 0x01, 0xff, 0x4a, + 0x07, 0xa9, 0x9e, 0x00, 0x00, 0x06, 0x7c, 0xe0, 0x01, 0xff, 0x80, 0x0b, + 0x8d, 0x01, 0xff, 0xd1, 0x91, 0x00, 0x00, 0xd2, 0x92, 0x00, 0x40, 0x43, + 0x0e, 0x0b, 0x91, 0x00, 0x00, 0x43, 0x1f, 0x0a, 0x92, 0x00, 0x40, 0x42, + 0x73, 0x02, 0x34, 0xf9, 0x81, 0x16, 0xb4, 0x01, 0xff, 0x4e, 0xcc, 0x59, + 0x99, 0x23, 0x00, 0x42, 0x33, 0x00, 0xa8, 0xf5, 0xc1, 0x00, 0x45, 0xbe, + 0xe1, 0xb6, 0xf5, 0x41, 0x42, 0xee, 0x00, 0x78, 0xf4, 0x41, 0x45, 0xeb, + 0xc9, 0x7a, 0x22, 0x80, 0xa6, 0x02, 0x06, 0x14, 0xdc, 0x8f, 0x02, 0xb3, + 0x0c, 0x44, 0xc9, 0xf2, 0x68, 0xf9, 0x01, 0x4a, 0x57, 0xb3, 0x97, 0x23, + 0x40, 0x4d, 0x8d, 0x81, 0x1e, 0x21, 0x00, 0x1b, 0x34, 0x1b, 0x01, 0xff, + 0x02, 0x13, 0x05, 0xe5, 0x01, 0xa5, 0xd0, 0x01, 0x53, 0xc3, 0x29, 0x19, + 0xfe, 0x00, 0x0c, 0x4c, 0x20, 0xb9, 0x01, 0xac, 0x6a, 0x4d, 0xa6, 0x34, + 0x16, 0xfe, 0x00, 0x06, 0xc8, 0x00, 0x12, 0x49, 0x21, 0xbf, 0x14, 0xfe, + 0x00, 0x4e, 0x95, 0x7d, 0x30, 0xfe, 0x00, 0x4d, 0x70, 0x8a, 0x34, 0xfe, + 0x40, 0x4d, 0x3e, 0x0f, 0x40, 0xfe, 0x00, 0x58, 0x66, 0x27, 0x3c, 0xfe, + 0x00, 0xa3, 0x34, 0x54, 0xa4, 0x41, 0x3e, 0xfe, 0x00, 0x4b, 0xd8, 0x21, + 0x36, 0xfe, 0x00, 0x4e, 0xc8, 0x26, 0x48, 0xfe, 0x00, 0x56, 0x54, 0x09, + 0x3a, 0xfe, 0x00, 0x06, 0xad, 0x02, 0x01, 0xff, 0x4e, 0x34, 0x69, 0x44, + 0xfe, 0x00, 0x0e, 0x6c, 0x27, 0x01, 0xff, 0x44, 0x66, 0x09, 0x18, 0xfe, + 0x00, 0x44, 0xd1, 0xf0, 0x18, 0xfe, 0x40, 0x4d, 0x35, 0x69, 0x42, 0xfe, + 0x00, 0x4c, 0x73, 0x0b, 0x38, 0xfe, 0x40, 0x04, 0xc4, 0x00, 0x06, 0x47, + 0x76, 0x8a, 0x33, 0xfe, 0x40, 0x4d, 0x3e, 0x0f, 0x3f, 0xfe, 0x00, 0x58, + 0x66, 0x27, 0x3b, 0xfe, 0x00, 0xa3, 0x29, 0x54, 0xa4, 0x41, 0x3d, 0xfe, + 0x00, 0x4b, 0xd8, 0x21, 0x35, 0xfe, 0x00, 0x4e, 0xc8, 0x26, 0x47, 0xfe, + 0x00, 0x56, 0x54, 0x09, 0x39, 0xfe, 0x00, 0x06, 0xad, 0x02, 0x01, 0xff, + 0x4e, 0x34, 0x69, 0x43, 0xfe, 0x00, 0x52, 0x6c, 0x27, 0x17, 0xfe, 0x40, + 0x4d, 0x35, 0x69, 0x41, 0xfe, 0x00, 0x4c, 0x73, 0x0b, 0x37, 0xfe, 0x40, + 0x45, 0x13, 0x05, 0x11, 0xfe, 0x00, 0x49, 0x81, 0x16, 0x12, 0xfe, 0x40, + 0x46, 0xc2, 0xc2, 0x31, 0xfe, 0x00, 0x46, 0x18, 0xde, 0x32, 0xfe, 0x00, + 0x4f, 0xae, 0x00, 0x15, 0xfe, 0x40, 0x43, 0xd7, 0x02, 0x13, 0xfe, 0x00, + 0x43, 0x15, 0x05, 0x10, 0xfe, 0x40, 0x43, 0x41, 0x18, 0xc3, 0xfa, 0x01, + 0x46, 0x1e, 0x1d, 0xc4, 0xfa, 0x01, 0x45, 0x1a, 0x2d, 0x30, 0xf9, 0x41, + 0x80, 0x01, 0xff, 0x06, 0x5c, 0x00, 0x1c, 0x55, 0xcb, 0x39, 0xe8, 0x22, + 0x00, 0x06, 0xf3, 0x28, 0x06, 0x4e, 0xe9, 0x7d, 0xb0, 0x22, 0x40, 0x45, + 0xfb, 0x0c, 0x7c, 0x22, 0x00, 0x4a, 0xd6, 0x39, 0x7e, 0x22, 0x40, 0x4f, + 0xaa, 0x6a, 0xb7, 0x2a, 0x00, 0x4b, 0x48, 0x13, 0xb3, 0x2a, 0x00, 0x04, + 0x70, 0x23, 0x11, 0x0c, 0xf6, 0x2a, 0x01, 0xff, 0x4b, 0x48, 0x13, 0xaf, + 0x2a, 0x00, 0x4c, 0x02, 0x2b, 0xb1, 0x2a, 0x40, 0x4f, 0xaa, 0x6a, 0xb9, + 0x2a, 0x00, 0x48, 0xf8, 0x0c, 0xb5, 0x2a, 0x40, 0x4f, 0xb8, 0x6b, 0xa9, + 0xf5, 0x01, 0x05, 0xa3, 0xaf, 0xbe, 0x01, 0x44, 0xbd, 0xf1, 0x29, 0xf4, + 0x01, 0xb0, 0x9f, 0x01, 0x4d, 0x34, 0x88, 0xfe, 0xf4, 0x01, 0xb3, 0x6b, + 0xb4, 0x4f, 0xb5, 0x24, 0x04, 0x15, 0x01, 0x01, 0xff, 0x02, 0x10, 0x00, + 0x0f, 0xb3, 0x01, 0xff, 0x4b, 0x80, 0x9e, 0xfe, 0x23, 0x00, 0x45, 0x17, + 0x08, 0xfb, 0x23, 0x40, 0x47, 0x15, 0x08, 0xfd, 0x23, 0x00, 0x4b, 0x71, + 0x98, 0xfc, 0x23, 0x40, 0x42, 0x6d, 0x14, 0x5d, 0xf4, 0x01, 0x48, 0x08, + 0xc8, 0x57, 0xf3, 0x01, 0x47, 0xaf, 0x47, 0xa3, 0x00, 0x00, 0x4b, 0x11, + 0xa2, 0xd7, 0xfa, 0x01, 0x05, 0xa0, 0x01, 0x01, 0xff, 0x48, 0x62, 0x1f, + 0x3e, 0xf6, 0x01, 0x44, 0x0c, 0x08, 0x21, 0xf6, 0x41, 0x48, 0xce, 0x64, + 0x72, 0xf3, 0x01, 0xa1, 0x06, 0x49, 0xb1, 0xbf, 0xb4, 0xfa, 0x41, 0x50, + 0x18, 0x45, 0xb0, 0xf6, 0x01, 0x42, 0x1e, 0x00, 0x54, 0xf9, 0x41, 0x45, + 0xd8, 0xe5, 0xe7, 0x2b, 0x00, 0x4f, 0x27, 0x67, 0x16, 0x23, 0x00, 0xb4, + 0x01, 0xff, 0x03, 0x13, 0x00, 0x06, 0x43, 0xbb, 0x3a, 0xee, 0xf4, 0x41, + 0x44, 0x60, 0x2d, 0xef, 0xf4, 0x01, 0x44, 0xb9, 0x00, 0x12, 0x30, 0xc0, + 0x00, 0x45, 0x0b, 0x08, 0x20, 0x30, 0x40, 0x0d, 0x78, 0x7f, 0x06, 0x44, + 0x27, 0x19, 0x7f, 0xf3, 0x41, 0x4a, 0x6f, 0xaa, 0x2c, 0x20, 0x00, 0x47, + 0x5f, 0x03, 0x69, 0x20, 0x40, 0x43, 0xc3, 0x64, 0x93, 0xf6, 0x81, 0x06, + 0x47, 0xbd, 0xd3, 0x6e, 0xf4, 0x41, 0x51, 0xc5, 0x5d, 0xa8, 0xf6, 0x41, + 0xa1, 0x96, 0x01, 0xb5, 0x01, 0xff, 0x44, 0xda, 0x09, 0xa0, 0xfa, 0x01, + 0xb3, 0x29, 0x42, 0x1e, 0x00, 0x47, 0x26, 0xc0, 0x00, 0x06, 0x3c, 0x1b, + 0x01, 0xff, 0xa6, 0x0f, 0xb4, 0x01, 0xff, 0x44, 0x25, 0x01, 0xd4, 0x2b, + 0x00, 0x42, 0x15, 0x02, 0xd3, 0x2b, 0x40, 0x43, 0xd2, 0x05, 0xd6, 0x2b, + 0x00, 0x43, 0xf6, 0x06, 0xd5, 0x2b, 0x40, 0x45, 0x59, 0x03, 0x2b, 0x00, + 0x80, 0x06, 0x4b, 0x66, 0x98, 0xb1, 0x00, 0x40, 0x80, 0x01, 0xff, 0x51, + 0x42, 0x13, 0x72, 0x2a, 0x00, 0x03, 0xe1, 0x05, 0x36, 0x05, 0x51, 0x00, + 0x01, 0xff, 0x4e, 0x5e, 0x6b, 0x28, 0x2a, 0x00, 0x57, 0xe5, 0x2d, 0x23, + 0x2a, 0x00, 0x49, 0x9f, 0x12, 0x25, 0x2a, 0x00, 0xb3, 0x11, 0x06, 0x35, + 0x23, 0x01, 0xff, 0x45, 0x5c, 0x00, 0x24, 0x2a, 0x00, 0x45, 0x20, 0x07, + 0x26, 0x2a, 0x40, 0x51, 0x76, 0x55, 0x22, 0x2a, 0x00, 0x4c, 0x27, 0x96, + 0x27, 0x2a, 0x40, 0x50, 0x86, 0x64, 0x2d, 0x2a, 0x00, 0x51, 0xa3, 0x5d, + 0x2e, 0x2a, 0x00, 0x48, 0x01, 0x02, 0x39, 0x2a, 0x40, 0xa3, 0xb7, 0x04, + 0x4c, 0x73, 0x92, 0x0e, 0x21, 0x80, 0xa9, 0x04, 0xb9, 0x01, 0xff, 0x4c, + 0x5b, 0x8f, 0xdd, 0xf6, 0x01, 0x09, 0x74, 0xba, 0x01, 0xff, 0x07, 0x36, + 0x79, 0xfe, 0x03, 0xa2, 0xef, 0x03, 0x09, 0x3d, 0xb8, 0xd2, 0x03, 0xa6, + 0x8d, 0x03, 0x08, 0x50, 0xc7, 0xf0, 0x02, 0xab, 0xb4, 0x02, 0x08, 0xb8, + 0xc8, 0x97, 0x02, 0x09, 0x52, 0xbe, 0xfa, 0x01, 0x49, 0x91, 0xbe, 0xbf, + 0xf0, 0x01, 0xb3, 0xb8, 0x01, 0xb4, 0x06, 0x4b, 0x08, 0xa5, 0xdf, 0xf0, + 0x41, 0x06, 0x55, 0xbe, 0x93, 0x01, 0x08, 0xc8, 0xc6, 0x77, 0x05, 0x9c, + 0xea, 0x1d, 0x06, 0x4e, 0xe1, 0x01, 0xff, 0x45, 0x5b, 0xe5, 0xd2, 0xf0, + 0x01, 0x48, 0x10, 0xc5, 0xc2, 0xf0, 0x01, 0x46, 0xcf, 0x86, 0xb2, 0xf0, + 0x01, 0x46, 0xf8, 0xdf, 0xa2, 0xf0, 0x41, 0xd1, 0xe1, 0xf0, 0x81, 0x29, + 0xd2, 0xe2, 0xf0, 0x81, 0x1c, 0xd3, 0xe3, 0xf0, 0x01, 0xd4, 0xe4, 0xf0, + 0x01, 0xd5, 0xe5, 0xf0, 0x01, 0xd6, 0xe6, 0xf0, 0x01, 0xd7, 0xe7, 0xf0, + 0x01, 0xd8, 0xe8, 0xf0, 0x01, 0xd9, 0xe9, 0xf0, 0x41, 0xd0, 0xf4, 0xf0, + 0x01, 0xd1, 0xf5, 0xf0, 0x41, 0xd0, 0xea, 0xf0, 0x01, 0xd1, 0xeb, 0xf0, + 0x01, 0xd2, 0xec, 0xf0, 0x01, 0xd3, 0xed, 0xf0, 0x01, 0xd4, 0xee, 0xf0, + 0x01, 0xd5, 0xef, 0xf0, 0x01, 0xd6, 0xf0, 0xf0, 0x01, 0xd7, 0xf1, 0xf0, + 0x01, 0xd8, 0xf2, 0xf0, 0x01, 0xd9, 0xf3, 0xf0, 0x41, 0x45, 0x5b, 0xe5, + 0xd3, 0xf0, 0x01, 0x48, 0x10, 0xc5, 0xc3, 0xf0, 0x01, 0x46, 0xcf, 0x86, + 0xb3, 0xf0, 0x01, 0x46, 0xf8, 0xdf, 0xa3, 0xf0, 0x41, 0x45, 0x5b, 0xe5, + 0xda, 0xf0, 0x01, 0x48, 0x10, 0xc5, 0xca, 0xf0, 0x01, 0x46, 0xcf, 0x86, + 0xba, 0xf0, 0x01, 0x46, 0xf8, 0xdf, 0xaa, 0xf0, 0x41, 0x08, 0x00, 0xc6, + 0x1d, 0x06, 0x40, 0xdd, 0x01, 0xff, 0x45, 0x5b, 0xe5, 0xd6, 0xf0, 0x01, + 0x48, 0x10, 0xc5, 0xc6, 0xf0, 0x01, 0x46, 0xcf, 0x86, 0xb6, 0xf0, 0x01, + 0x46, 0xf8, 0xdf, 0xa6, 0xf0, 0x41, 0x45, 0x5b, 0xe5, 0xd7, 0xf0, 0x01, + 0x48, 0x10, 0xc5, 0xc7, 0xf0, 0x01, 0x46, 0xcf, 0x86, 0xb7, 0xf0, 0x01, + 0x46, 0xf8, 0xdf, 0xa7, 0xf0, 0x41, 0x45, 0x5b, 0xe5, 0xdd, 0xf0, 0x01, + 0x48, 0x10, 0xc5, 0xcd, 0xf0, 0x01, 0x46, 0xcf, 0x86, 0xbd, 0xf0, 0x01, + 0x46, 0xf8, 0xdf, 0xad, 0xf0, 0x41, 0x45, 0x5b, 0xe5, 0xd9, 0xf0, 0x01, + 0x48, 0x10, 0xc5, 0xc9, 0xf0, 0x01, 0x46, 0xcf, 0x86, 0xb9, 0xf0, 0x01, + 0x46, 0xf8, 0xdf, 0xa9, 0xf0, 0x41, 0x07, 0x67, 0x39, 0x1d, 0x09, 0x75, + 0xbc, 0x01, 0xff, 0x45, 0x5b, 0xe5, 0xdc, 0xf0, 0x01, 0x48, 0x10, 0xc5, + 0xcc, 0xf0, 0x01, 0x46, 0xcf, 0x86, 0xbc, 0xf0, 0x01, 0x46, 0xf8, 0xdf, + 0xac, 0xf0, 0x41, 0x45, 0x5b, 0xe5, 0xde, 0xf0, 0x01, 0x48, 0x10, 0xc5, + 0xce, 0xf0, 0x01, 0x46, 0xcf, 0x86, 0xbe, 0xf0, 0x01, 0x46, 0xf8, 0xdf, + 0xae, 0xf0, 0x41, 0x45, 0x5b, 0xe5, 0xdb, 0xf0, 0x01, 0x48, 0x10, 0xc5, + 0xcb, 0xf0, 0x01, 0x46, 0xcf, 0x86, 0xbb, 0xf0, 0x01, 0x46, 0xf8, 0xdf, + 0xab, 0xf0, 0x41, 0x07, 0x19, 0xd2, 0x26, 0xaf, 0x01, 0xff, 0x42, 0x61, + 0x03, 0xe0, 0xf0, 0x01, 0x06, 0x2e, 0xd4, 0x01, 0xff, 0x45, 0x5b, 0xe5, + 0xd4, 0xf0, 0x01, 0x48, 0x10, 0xc5, 0xc4, 0xf0, 0x01, 0x46, 0xcf, 0x86, + 0xb4, 0xf0, 0x01, 0x46, 0xf8, 0xdf, 0xa4, 0xf0, 0x41, 0x45, 0x5b, 0xe5, + 0xd5, 0xf0, 0x01, 0x48, 0x10, 0xc5, 0xc5, 0xf0, 0x01, 0x46, 0xcf, 0x86, + 0xb5, 0xf0, 0x01, 0x46, 0xf8, 0xdf, 0xa5, 0xf0, 0x41, 0x45, 0x5b, 0xe5, + 0xd8, 0xf0, 0x01, 0x48, 0x10, 0xc5, 0xc8, 0xf0, 0x01, 0x46, 0xcf, 0x86, + 0xb8, 0xf0, 0x01, 0x46, 0xf8, 0xdf, 0xa8, 0xf0, 0x41, 0x43, 0x0e, 0x03, + 0xa0, 0xf0, 0x01, 0x4a, 0x77, 0xac, 0xcf, 0xf0, 0x41, 0x45, 0x5b, 0xe5, + 0xd1, 0xf0, 0x01, 0x48, 0x10, 0xc5, 0xc1, 0xf0, 0x01, 0x46, 0xcf, 0x86, + 0xb1, 0xf0, 0x01, 0x46, 0xf8, 0xdf, 0xa1, 0xf0, 0x41, 0x4c, 0x77, 0x8b, + 0x0f, 0x21, 0x40, 0x43, 0xaa, 0x01, 0xa7, 0xfa, 0x01, 0x05, 0x24, 0x43, + 0x01, 0xff, 0x4d, 0x3e, 0x84, 0x18, 0x23, 0x00, 0x47, 0x9f, 0xd7, 0xd0, + 0xf6, 0x41, 0x42, 0x36, 0x01, 0xcf, 0x26, 0x80, 0x77, 0xe5, 0x67, 0xf9, + 0x01, 0xe7, 0x16, 0xf4, 0x81, 0x5f, 0xac, 0x4d, 0xae, 0x1b, 0xb3, 0x0d, + 0x47, 0x41, 0xd6, 0xd4, 0x22, 0xc0, 0x00, 0x4d, 0xed, 0x7f, 0xda, 0x2a, + 0x40, 0x43, 0x43, 0x7c, 0x53, 0x26, 0x00, 0x43, 0xbd, 0x3c, 0x2b, 0xf5, + 0x41, 0x43, 0xd7, 0x18, 0x85, 0xfa, 0x01, 0x02, 0x6d, 0x14, 0x1a, 0xa5, + 0x0c, 0x47, 0x08, 0x29, 0x77, 0xfa, 0x01, 0x4a, 0x2b, 0x13, 0x2f, 0x27, + 0x40, 0x4b, 0x5e, 0x97, 0x8d, 0xf3, 0x01, 0x45, 0x57, 0xe4, 0x4d, 0xf3, + 0x41, 0x4a, 0xa7, 0xa9, 0x0c, 0xf9, 0x01, 0x48, 0x24, 0x2d, 0x0f, 0xf9, + 0x41, 0x49, 0x59, 0x9d, 0xb6, 0x00, 0x00, 0x48, 0x60, 0xc5, 0xa9, 0xf4, + 0x01, 0xec, 0x8a, 0xf4, 0x41, 0x80, 0x01, 0xff, 0x44, 0x0c, 0x08, 0x37, + 0xf4, 0x01, 0x44, 0x15, 0x17, 0x3d, 0xf4, 0x41, 0x48, 0x28, 0xcc, 0xfb, + 0xf6, 0x41, 0xa1, 0xde, 0x01, 0x09, 0x47, 0xba, 0xcd, 0x01, 0xaf, 0x01, + 0xff, 0x08, 0xa0, 0xc5, 0x06, 0x43, 0x59, 0x28, 0xdb, 0x2b, 0x40, 0x07, + 0xec, 0x05, 0x33, 0x07, 0xff, 0x39, 0x06, 0x4e, 0xd7, 0x7e, 0x1f, 0x09, + 0x41, 0x43, 0x0e, 0x0b, 0x16, 0x09, 0x81, 0x1c, 0xb4, 0x01, 0xff, 0x42, + 0x92, 0x01, 0x17, 0x09, 0x01, 0x44, 0x25, 0x01, 0x1b, 0x09, 0x01, 0xb7, + 0x01, 0xff, 0x44, 0xcb, 0x1d, 0x18, 0x09, 0x01, 0xef, 0x1a, 0x09, 0x41, + 0x48, 0x70, 0x11, 0x19, 0x09, 0x41, 0xa1, 0x7b, 0x43, 0xc0, 0x09, 0x01, + 0x09, 0x01, 0x44, 0x7e, 0xe5, 0x03, 0x09, 0x01, 0x44, 0xe5, 0xef, 0x02, + 0x09, 0x01, 0x42, 0xb0, 0x01, 0x04, 0x09, 0x81, 0x5e, 0x43, 0xa7, 0x51, + 0x0a, 0x09, 0x01, 0x44, 0x17, 0xe8, 0x0b, 0x09, 0x01, 0x43, 0xb4, 0x05, + 0x0c, 0x09, 0x01, 0x43, 0xdc, 0x22, 0x0d, 0x09, 0x01, 0x42, 0x6f, 0x02, + 0x10, 0x09, 0x01, 0x43, 0x91, 0xf4, 0x12, 0x09, 0x01, 0x44, 0xab, 0xb9, + 0x13, 0x09, 0x01, 0xb3, 0x20, 0xb4, 0x12, 0x43, 0x09, 0xa4, 0x05, 0x09, + 0x01, 0x43, 0xa1, 0x52, 0x09, 0x09, 0x01, 0x43, 0x27, 0x75, 0x06, 0x09, + 0x41, 0x42, 0x5f, 0x24, 0x15, 0x09, 0x01, 0x42, 0xed, 0x05, 0x08, 0x09, + 0x41, 0x43, 0x0c, 0x02, 0x11, 0x09, 0x01, 0x43, 0xf3, 0x82, 0x0e, 0x09, + 0x01, 0x43, 0x7a, 0x16, 0x14, 0x09, 0x41, 0xf4, 0x07, 0x09, 0x41, 0x42, + 0x9e, 0x01, 0x0f, 0x09, 0x01, 0x42, 0x24, 0x00, 0x00, 0x09, 0x41, 0x52, + 0x07, 0x51, 0x36, 0x17, 0x00, 0x52, 0x63, 0x55, 0x35, 0x17, 0x40, 0x06, + 0x32, 0xdc, 0xc7, 0x02, 0x10, 0x36, 0x64, 0x01, 0xff, 0x45, 0xce, 0x00, + 0xd9, 0x01, 0x01, 0xa2, 0x9a, 0x02, 0xa3, 0xe3, 0x01, 0x02, 0x3b, 0x01, + 0xd2, 0x01, 0x45, 0xb5, 0xe5, 0xee, 0x01, 0x01, 0x45, 0x73, 0xe6, 0xf8, + 0x01, 0x01, 0xa7, 0xb7, 0x01, 0xa8, 0xa2, 0x01, 0x02, 0xc3, 0x01, 0x93, + 0x01, 0x02, 0x6c, 0x00, 0x82, 0x01, 0x47, 0x5e, 0xd4, 0xf7, 0x01, 0x01, + 0xb0, 0x5f, 0xb2, 0x51, 0xb3, 0x29, 0xb4, 0x15, 0x44, 0x10, 0xc1, 0xf3, + 0x01, 0x01, 0xb7, 0x01, 0xff, 0x48, 0xd0, 0xc3, 0xfc, 0x01, 0x01, 0x44, + 0x1b, 0x2d, 0xd5, 0x01, 0x41, 0x4c, 0x7f, 0x8c, 0xd2, 0x01, 0x01, 0x44, + 0x71, 0xf0, 0xd8, 0x01, 0x01, 0x44, 0x9d, 0x60, 0xf0, 0x01, 0x41, 0x42, + 0xb7, 0x2d, 0xdf, 0x01, 0x01, 0x02, 0x49, 0x00, 0x12, 0x44, 0x2f, 0x0b, + 0xe5, 0x01, 0x01, 0x48, 0x18, 0xc8, 0xfb, 0x01, 0x01, 0x47, 0x79, 0xd6, + 0xfa, 0x01, 0x41, 0x43, 0x02, 0x24, 0xdb, 0x01, 0x01, 0xf0, 0xe8, 0x01, + 0x41, 0x42, 0x57, 0x00, 0xed, 0x01, 0x01, 0x46, 0xf0, 0xde, 0xf5, 0x01, + 0x41, 0x46, 0xd4, 0xd9, 0xf4, 0x01, 0x01, 0x49, 0xb1, 0xa9, 0xd0, 0x01, + 0x01, 0xac, 0x01, 0xff, 0x48, 0x58, 0xc3, 0xf2, 0x01, 0x01, 0x49, 0x4a, + 0xc0, 0xd1, 0x01, 0x41, 0x46, 0x2a, 0xde, 0xdd, 0x01, 0x01, 0x45, 0x91, + 0xeb, 0xde, 0x01, 0x41, 0xe4, 0xe0, 0x01, 0x01, 0x42, 0x75, 0x0b, 0xf6, + 0x01, 0x41, 0x45, 0xf3, 0xc2, 0xd6, 0x01, 0x01, 0x43, 0x03, 0x00, 0xea, + 0x01, 0x01, 0x43, 0x28, 0x05, 0xe9, 0x01, 0x41, 0x47, 0x41, 0xcf, 0xd7, + 0x01, 0x01, 0x45, 0x9f, 0xa1, 0xf9, 0x01, 0x41, 0x44, 0x09, 0xf1, 0xe3, + 0x01, 0x01, 0x42, 0x32, 0x00, 0xef, 0x01, 0x41, 0xa1, 0x22, 0x44, 0x28, + 0x4a, 0xd4, 0x01, 0x01, 0x43, 0x20, 0x4b, 0xdc, 0x01, 0x01, 0xaf, 0x01, + 0xff, 0x44, 0x1d, 0xf1, 0xe6, 0x01, 0x01, 0x42, 0xb6, 0x05, 0xe4, 0x01, + 0xc1, 0x00, 0x54, 0x48, 0x43, 0xfd, 0x01, 0x41, 0x45, 0x4c, 0x72, 0xd3, + 0x01, 0x01, 0x4d, 0x1a, 0x88, 0xe2, 0x01, 0x01, 0xf4, 0xec, 0x01, 0x41, + 0x42, 0x27, 0x01, 0xf1, 0x01, 0x81, 0x12, 0xaf, 0x06, 0x48, 0x08, 0xcc, + 0xeb, 0x01, 0x41, 0x47, 0xd9, 0xd3, 0xe1, 0x01, 0x01, 0xf7, 0xda, 0x01, + 0x41, 0x44, 0x98, 0x84, 0xe7, 0x01, 0x41, 0x50, 0x26, 0x62, 0x75, 0xa8, + 0x00, 0x07, 0xec, 0x05, 0x38, 0x05, 0xb9, 0x00, 0x28, 0xb3, 0x01, 0xff, + 0x4f, 0xb5, 0x6e, 0x74, 0xa8, 0x00, 0xb5, 0x01, 0xff, 0x0f, 0xd7, 0x67, + 0x06, 0x52, 0x8b, 0x54, 0x72, 0xa8, 0x40, 0x42, 0x71, 0x00, 0x71, 0xa8, + 0x00, 0x42, 0xa9, 0x01, 0x67, 0xa8, 0x00, 0x42, 0xbc, 0x22, 0x68, 0xa8, + 0x40, 0x4b, 0x47, 0x9b, 0x77, 0xa8, 0x00, 0x44, 0xa4, 0x02, 0x76, 0xa8, + 0x40, 0xe1, 0x5d, 0xa8, 0x80, 0x92, 0x02, 0x42, 0x16, 0x00, 0x4e, 0xa8, + 0x00, 0xa3, 0xf8, 0x01, 0xa4, 0xe5, 0x01, 0xe5, 0x60, 0xa8, 0x80, 0xdb, + 0x01, 0x42, 0x0c, 0x08, 0x64, 0xa8, 0x00, 0xa7, 0xc8, 0x01, 0x42, 0x22, + 0x00, 0x5c, 0xa8, 0x00, 0xe9, 0x5e, 0xa8, 0x00, 0x42, 0x56, 0x19, 0x46, + 0xa8, 0x00, 0xab, 0xab, 0x01, 0x42, 0x74, 0x00, 0x59, 0xa8, 0x00, 0x42, + 0x6c, 0x00, 0x4f, 0xa8, 0x00, 0xae, 0x86, 0x01, 0xef, 0x61, 0xa8, 0x00, + 0xb0, 0x76, 0x42, 0x43, 0x14, 0x62, 0xa8, 0x00, 0x42, 0x71, 0x00, 0x58, + 0xa8, 0x00, 0xb3, 0x58, 0xb4, 0x33, 0xf5, 0x5f, 0xa8, 0x00, 0x05, 0x0a, + 0x1d, 0x1f, 0x42, 0xa9, 0x01, 0x53, 0xa8, 0x00, 0x42, 0xed, 0x26, 0x63, + 0xa8, 0x00, 0x42, 0xbc, 0x22, 0x57, 0xa8, 0x00, 0xba, 0x01, 0xff, 0xe1, + 0x55, 0xa8, 0x00, 0x42, 0x22, 0x00, 0x54, 0xa8, 0x40, 0x44, 0xd6, 0x10, + 0x6f, 0xa8, 0x00, 0x48, 0xb0, 0xc7, 0x6e, 0xa8, 0x40, 0xe1, 0x48, 0xa8, + 0x00, 0x42, 0x22, 0x00, 0x49, 0xa8, 0x00, 0xb3, 0x0d, 0xb4, 0x01, 0xff, + 0xe1, 0x69, 0xa8, 0x00, 0x42, 0x22, 0x00, 0x6a, 0xa8, 0x40, 0xe1, 0x50, + 0xa8, 0x00, 0x42, 0x22, 0x00, 0x51, 0xa8, 0x40, 0xe1, 0x5b, 0xa8, 0x00, + 0x42, 0x22, 0x00, 0x5a, 0xa8, 0x00, 0x46, 0x04, 0x0a, 0x56, 0xa8, 0x40, + 0xe1, 0x4c, 0xa8, 0x00, 0x42, 0x22, 0x00, 0x4d, 0xa8, 0x40, 0xe1, 0x4b, + 0xa8, 0x00, 0x42, 0x24, 0x02, 0x43, 0xa8, 0x00, 0x42, 0x2a, 0x05, 0x6c, + 0xa8, 0x00, 0x42, 0xbc, 0x22, 0x47, 0xa8, 0x40, 0xe1, 0x40, 0xa8, 0x00, + 0x42, 0x22, 0x00, 0x41, 0xa8, 0x40, 0xe1, 0x42, 0xa8, 0x00, 0x42, 0x24, + 0x02, 0x65, 0xa8, 0x40, 0xe5, 0x66, 0xa8, 0x40, 0xe1, 0x4a, 0xa8, 0x00, + 0x42, 0xf0, 0x10, 0x6b, 0xa8, 0x00, 0x42, 0x59, 0x00, 0x52, 0xa8, 0x40, + 0xe1, 0x44, 0xa8, 0x80, 0x06, 0x42, 0x22, 0x00, 0x45, 0xa8, 0x40, 0x49, + 0xd9, 0x23, 0x73, 0xa8, 0x40, 0x4b, 0x1a, 0x9f, 0x6d, 0xa8, 0x00, 0x4b, + 0xcc, 0xa2, 0x70, 0xa8, 0x40, 0xa1, 0xeb, 0x01, 0x48, 0xb2, 0xa9, 0xb6, + 0xf6, 0x01, 0xae, 0xc4, 0x01, 0x4c, 0x4b, 0x93, 0xc2, 0xfa, 0x01, 0xb2, + 0x14, 0xb3, 0x06, 0x48, 0xb8, 0xcb, 0xeb, 0xf9, 0x41, 0x48, 0xe8, 0xc5, + 0xa7, 0x20, 0x00, 0x46, 0x21, 0xb1, 0xb1, 0x20, 0x40, 0x80, 0x93, 0x01, + 0x49, 0xe3, 0x9b, 0x25, 0x00, 0x00, 0x4c, 0x07, 0x8f, 0xad, 0xf3, 0x01, + 0x51, 0x0b, 0x5c, 0x7e, 0x26, 0x00, 0x4a, 0xa9, 0x8e, 0xc2, 0x27, 0x80, + 0x74, 0xb3, 0x01, 0xff, 0x4c, 0xbf, 0x8e, 0x23, 0xf6, 0x01, 0x02, 0x10, + 0x00, 0x06, 0x47, 0x9d, 0xd4, 0x06, 0x23, 0x40, 0x80, 0x06, 0x4b, 0xe4, + 0x86, 0xbb, 0xf4, 0x41, 0x4d, 0x3f, 0x81, 0x47, 0xf6, 0x01, 0x48, 0xb8, + 0xc4, 0xd7, 0xf9, 0x01, 0x4f, 0x30, 0x6c, 0x38, 0xf9, 0x01, 0x48, 0x13, + 0x83, 0x4d, 0xf6, 0x01, 0x03, 0xe1, 0x05, 0x31, 0x61, 0x6e, 0x0e, 0x4c, + 0xf6, 0x01, 0x05, 0x51, 0x00, 0x01, 0xff, 0xa2, 0x18, 0x45, 0x60, 0xe5, + 0xc5, 0xfa, 0x01, 0x4c, 0xfb, 0x8e, 0x4f, 0xf6, 0x01, 0x49, 0x8a, 0xb9, + 0xd5, 0xf9, 0x01, 0x4c, 0xc3, 0x93, 0x4e, 0xf6, 0x41, 0x43, 0x5f, 0x07, + 0xf9, 0x26, 0x00, 0x49, 0xa6, 0xbb, 0x71, 0xf4, 0x41, 0x4e, 0xa5, 0x79, + 0xd8, 0xf9, 0x01, 0x4b, 0xe2, 0xa2, 0xd6, 0xf9, 0x41, 0x47, 0x69, 0x06, + 0xe1, 0x2a, 0x40, 0x4a, 0xdf, 0xad, 0x30, 0x20, 0x00, 0x44, 0x5a, 0x03, + 0x4c, 0x21, 0x00, 0x51, 0x3c, 0x5e, 0x31, 0x20, 0x40, 0x56, 0x35, 0x32, + 0x86, 0xf5, 0x01, 0x43, 0xfe, 0xbf, 0x0f, 0x27, 0x00, 0x44, 0x19, 0xf0, + 0x27, 0xf4, 0x01, 0x49, 0x3c, 0xbf, 0x14, 0xf6, 0x01, 0x46, 0x9a, 0x1b, + 0xe4, 0x26, 0x40, 0x44, 0x60, 0xa1, 0xdb, 0xfa, 0x01, 0xa3, 0x0a, 0x44, + 0x1b, 0xeb, 0x5c, 0xf9, 0x01, 0xf2, 0x50, 0xf3, 0x41, 0x48, 0x42, 0x19, + 0x2e, 0x26, 0x00, 0xe8, 0x51, 0xf3, 0x01, 0x43, 0x35, 0x01, 0x9a, 0xf9, + 0x41, 0x45, 0x47, 0xe5, 0xe6, 0xf4, 0x01, 0xa7, 0x87, 0x14, 0x0b, 0xbd, + 0x9c, 0xa3, 0x0d, 0xac, 0x94, 0x0b, 0xae, 0x85, 0x0b, 0x47, 0x62, 0x82, + 0xce, 0xf4, 0x01, 0xb2, 0x96, 0x03, 0x02, 0xee, 0x00, 0xed, 0x02, 0x0a, + 0x67, 0xb2, 0x06, 0x48, 0x60, 0xcc, 0x3e, 0xf4, 0x41, 0x4c, 0xce, 0x28, + 0xf5, 0x1a, 0x81, 0xcc, 0x02, 0xac, 0x62, 0x4e, 0xeb, 0x79, 0xef, 0x1a, + 0x81, 0x4c, 0x4b, 0xc6, 0x66, 0xe6, 0x1a, 0x81, 0x2f, 0x07, 0xa0, 0xd5, + 0x01, 0xff, 0x4c, 0xce, 0x28, 0xe7, 0x1a, 0x81, 0x1d, 0x44, 0x3b, 0x2d, + 0xec, 0x1a, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x45, 0xf5, 0x2c, 0xee, 0x1a, + 0x01, 0x44, 0xd7, 0x02, 0xeb, 0x1a, 0xc1, 0x00, 0x46, 0xf4, 0x2c, 0xed, + 0x1a, 0x41, 0x46, 0xf4, 0x2c, 0xea, 0x1a, 0x41, 0x80, 0x01, 0xff, 0x45, + 0xf5, 0x2c, 0xe9, 0x1a, 0x01, 0x44, 0xd7, 0x02, 0xe5, 0x1a, 0xc1, 0x00, + 0x46, 0xf4, 0x2c, 0xe8, 0x1a, 0x41, 0x80, 0x01, 0xff, 0x45, 0xf5, 0x2c, + 0xf2, 0x1a, 0x01, 0x4a, 0x3f, 0xad, 0xf1, 0x1a, 0x41, 0x06, 0xed, 0x05, + 0x1d, 0x4f, 0x94, 0x71, 0xf4, 0x1a, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x45, + 0xf5, 0x2c, 0xf7, 0x1a, 0x01, 0x44, 0xd7, 0x02, 0xf3, 0x1a, 0xc1, 0x00, + 0x46, 0xf4, 0x2c, 0xf6, 0x1a, 0x41, 0xe1, 0xd5, 0x1a, 0x01, 0x42, 0x16, + 0x00, 0xcc, 0x1a, 0x01, 0xa3, 0xb0, 0x01, 0x42, 0xf0, 0x10, 0xc4, 0x1a, + 0x01, 0xe5, 0xd6, 0x1a, 0x01, 0xa6, 0x76, 0x42, 0x24, 0x02, 0xc9, 0x1a, + 0x01, 0x42, 0x22, 0x00, 0xc8, 0x1a, 0x01, 0xe9, 0xd7, 0x1a, 0x81, 0x61, + 0xab, 0x55, 0x42, 0x74, 0x00, 0xc2, 0x1a, 0x01, 0x42, 0x6c, 0x00, 0xc3, + 0x1a, 0x01, 0xae, 0x3d, 0xef, 0xd8, 0x1a, 0x01, 0xb0, 0x2d, 0x42, 0x71, + 0x00, 0xd2, 0x1a, 0x01, 0x42, 0x40, 0x06, 0xcb, 0x1a, 0x01, 0xb4, 0x15, + 0xf5, 0xd9, 0x1a, 0x81, 0x0c, 0x42, 0xf5, 0x0a, 0xc6, 0x1a, 0x01, 0x42, + 0x59, 0x00, 0xc5, 0x1a, 0x41, 0xe1, 0xda, 0x1a, 0x41, 0xe1, 0xce, 0x1a, + 0x01, 0x42, 0x22, 0x00, 0xcf, 0x1a, 0x41, 0xe1, 0xc0, 0x1a, 0x01, 0x42, + 0x22, 0x00, 0xd1, 0x1a, 0x41, 0xe1, 0xd0, 0x1a, 0x01, 0x42, 0x24, 0x02, + 0xc7, 0x1a, 0x41, 0xe1, 0xc1, 0x1a, 0x01, 0x42, 0x22, 0x00, 0xca, 0x1a, + 0x41, 0xe1, 0xdb, 0x1a, 0x41, 0xe1, 0xd3, 0x1a, 0x01, 0x05, 0xe8, 0x27, + 0x01, 0xff, 0xeb, 0xdd, 0x1a, 0x01, 0xec, 0xe1, 0x1a, 0x01, 0xed, 0xdf, + 0x1a, 0x01, 0xee, 0xe0, 0x1a, 0x81, 0x10, 0xf0, 0xdc, 0x1a, 0x01, 0xf4, + 0xde, 0x1a, 0x01, 0xf7, 0xe2, 0x1a, 0x01, 0xf9, 0xe4, 0x1a, 0x41, 0xe7, + 0xe3, 0x1a, 0x41, 0xe1, 0xcd, 0x1a, 0x01, 0x42, 0x22, 0x00, 0xd4, 0x1a, + 0x41, 0x80, 0x01, 0xff, 0x45, 0xf5, 0x2c, 0xf8, 0x1a, 0x01, 0x47, 0x64, + 0x4e, 0xf0, 0x1a, 0x41, 0xa5, 0x16, 0x09, 0xce, 0xba, 0x06, 0x4c, 0xb7, + 0x93, 0xc2, 0xf6, 0x41, 0x52, 0x19, 0x51, 0x91, 0x23, 0x00, 0x50, 0x26, + 0x68, 0x92, 0x23, 0x40, 0x48, 0x78, 0x20, 0xfd, 0x2b, 0x00, 0x49, 0x5a, + 0xbc, 0xf3, 0xf6, 0x41, 0xa1, 0xab, 0x07, 0x0b, 0xc0, 0x9b, 0x57, 0x43, + 0xa4, 0x2c, 0x9c, 0xf9, 0x01, 0xb4, 0x01, 0xff, 0x51, 0xdd, 0x56, 0x3d, + 0x30, 0x00, 0x46, 0x6e, 0xdc, 0xc4, 0xce, 0x81, 0x3b, 0x03, 0x8b, 0x0c, + 0x0c, 0x4c, 0x8b, 0x92, 0x50, 0x32, 0x00, 0x48, 0xb8, 0xcc, 0x89, 0xf3, + 0x41, 0x80, 0x06, 0x58, 0xd6, 0x29, 0x7d, 0x26, 0x40, 0x4c, 0x55, 0x48, + 0x02, 0x22, 0x00, 0x05, 0xed, 0x07, 0x01, 0xff, 0x48, 0xe8, 0xc3, 0x8c, + 0x00, 0x00, 0x44, 0xa5, 0x01, 0x8b, 0x00, 0x00, 0x47, 0x8d, 0x31, 0x8b, + 0x00, 0x00, 0x42, 0x50, 0x02, 0x8c, 0x00, 0x40, 0x49, 0x21, 0x2e, 0x7a, + 0xf7, 0x41, 0x06, 0xef, 0x06, 0x8e, 0x06, 0x07, 0x78, 0xd1, 0xc2, 0x04, + 0x0a, 0x7d, 0xab, 0xc3, 0x02, 0x12, 0x47, 0x53, 0xb2, 0x02, 0x06, 0xde, + 0x05, 0x55, 0x07, 0xff, 0x39, 0x01, 0xff, 0xa5, 0x42, 0xa6, 0x34, 0x48, + 0xc5, 0x53, 0x86, 0x24, 0x00, 0xb3, 0x20, 0xb4, 0x01, 0xff, 0x42, 0x92, + 0x01, 0x7d, 0x24, 0x00, 0x47, 0x95, 0x5a, 0x80, 0x24, 0x00, 0x02, 0x15, + 0x01, 0x01, 0xff, 0x43, 0xe8, 0x2b, 0x7f, 0x24, 0x00, 0x43, 0xcc, 0x1d, + 0x87, 0x24, 0x40, 0x48, 0x85, 0x51, 0x84, 0x24, 0x00, 0x46, 0x01, 0x26, + 0x83, 0x24, 0x40, 0x46, 0x08, 0x18, 0x82, 0x24, 0x00, 0x47, 0x0a, 0x5d, + 0x81, 0x24, 0x40, 0x47, 0x52, 0x25, 0x85, 0x24, 0x00, 0x45, 0xb4, 0x6f, + 0x7e, 0x24, 0x40, 0x0f, 0xe4, 0x05, 0x6d, 0x0d, 0x76, 0x08, 0x01, 0xff, + 0xe1, 0x9c, 0x24, 0x00, 0xe2, 0x9d, 0x24, 0x00, 0xe3, 0x9e, 0x24, 0x00, + 0xe4, 0x9f, 0x24, 0x00, 0xe5, 0xa0, 0x24, 0x00, 0xe6, 0xa1, 0x24, 0x00, + 0xe7, 0xa2, 0x24, 0x00, 0xe8, 0xa3, 0x24, 0x00, 0xe9, 0xa4, 0x24, 0x00, + 0xea, 0xa5, 0x24, 0x00, 0xeb, 0xa6, 0x24, 0x00, 0xec, 0xa7, 0x24, 0x00, + 0xed, 0xa8, 0x24, 0x00, 0xee, 0xa9, 0x24, 0x00, 0xef, 0xaa, 0x24, 0x00, + 0xf0, 0xab, 0x24, 0x00, 0xf1, 0xac, 0x24, 0x00, 0xf2, 0xad, 0x24, 0x00, + 0xf3, 0xae, 0x24, 0x00, 0xf4, 0xaf, 0x24, 0x00, 0xf5, 0xb0, 0x24, 0x00, + 0xf6, 0xb1, 0x24, 0x00, 0xf7, 0xb2, 0x24, 0x00, 0xf8, 0xb3, 0x24, 0x00, + 0xf9, 0xb4, 0x24, 0x00, 0xfa, 0xb5, 0x24, 0x40, 0xe1, 0x10, 0xf1, 0x01, + 0xe2, 0x11, 0xf1, 0x01, 0xe3, 0x12, 0xf1, 0x01, 0xe4, 0x13, 0xf1, 0x01, + 0xe5, 0x14, 0xf1, 0x01, 0xe6, 0x15, 0xf1, 0x01, 0xe7, 0x16, 0xf1, 0x01, + 0xe8, 0x17, 0xf1, 0x01, 0xe9, 0x18, 0xf1, 0x01, 0xea, 0x19, 0xf1, 0x01, + 0xeb, 0x1a, 0xf1, 0x01, 0xec, 0x1b, 0xf1, 0x01, 0xed, 0x1c, 0xf1, 0x01, + 0xee, 0x1d, 0xf1, 0x01, 0xef, 0x1e, 0xf1, 0x01, 0xf0, 0x1f, 0xf1, 0x01, + 0xf1, 0x20, 0xf1, 0x01, 0xf2, 0x21, 0xf1, 0x01, 0xf3, 0x22, 0xf1, 0x01, + 0xf4, 0x23, 0xf1, 0x01, 0xf5, 0x24, 0xf1, 0x01, 0xf6, 0x25, 0xf1, 0x01, + 0xf7, 0x26, 0xf1, 0x01, 0xf8, 0x27, 0xf1, 0x01, 0xf9, 0x28, 0xf1, 0x01, + 0xfa, 0x29, 0xf1, 0x41, 0x43, 0x70, 0x11, 0x1e, 0x32, 0x00, 0x44, 0xad, + 0xf0, 0x1d, 0x32, 0x40, 0x48, 0x40, 0xc3, 0x3f, 0x32, 0x00, 0xa3, 0xe5, + 0x01, 0xa5, 0xd0, 0x01, 0xa6, 0xad, 0x01, 0x44, 0x1d, 0xf0, 0x32, 0x32, + 0x00, 0x45, 0x08, 0xe8, 0x38, 0x32, 0x00, 0xad, 0x92, 0x01, 0xae, 0x83, + 0x01, 0x43, 0x0e, 0x0b, 0x20, 0x32, 0x00, 0x02, 0x88, 0x00, 0x60, 0xb3, + 0x23, 0xb4, 0x0f, 0xb7, 0x01, 0xff, 0x44, 0x8a, 0x00, 0x2c, 0x32, 0x00, + 0x43, 0xb4, 0x2d, 0x2d, 0x32, 0x40, 0x42, 0x92, 0x01, 0x29, 0x32, 0x00, + 0x44, 0x25, 0x01, 0x22, 0x32, 0x00, 0x42, 0x15, 0x02, 0x21, 0x32, 0x40, + 0xa5, 0x2d, 0x42, 0x01, 0x26, 0x25, 0x32, 0x00, 0x46, 0xa8, 0xde, 0x33, + 0x32, 0x00, 0x46, 0x0e, 0xdf, 0x35, 0x32, 0x00, 0xb4, 0x0d, 0xb5, 0x01, + 0xff, 0xee, 0x30, 0x32, 0x00, 0x47, 0xb2, 0xd4, 0x3c, 0x32, 0x40, 0x43, + 0x35, 0x01, 0x31, 0x32, 0x00, 0x43, 0xa6, 0xf4, 0x3b, 0x32, 0x40, 0x42, + 0x24, 0x00, 0x42, 0x32, 0x00, 0x43, 0xca, 0x1d, 0x26, 0x32, 0x40, 0x43, + 0x8c, 0x2d, 0x43, 0x32, 0x00, 0x47, 0x8f, 0x80, 0x39, 0x32, 0x00, 0xb3, + 0x01, 0xff, 0x45, 0xc1, 0x5c, 0x3e, 0x32, 0x00, 0xf4, 0x41, 0x32, 0x40, + 0x43, 0x2b, 0x05, 0x34, 0x32, 0x00, 0x43, 0xee, 0x07, 0x28, 0x32, 0x40, + 0x44, 0x94, 0x0f, 0x2e, 0x32, 0x00, 0x43, 0xcd, 0x02, 0x2a, 0x32, 0x40, + 0x47, 0xec, 0xd0, 0x40, 0x32, 0x00, 0xa9, 0x06, 0x43, 0xf6, 0x06, 0x23, + 0x32, 0x40, 0x47, 0x69, 0xd3, 0x36, 0x32, 0x00, 0x42, 0x88, 0x00, 0x2b, + 0x32, 0x00, 0x42, 0x32, 0x00, 0x24, 0x32, 0x40, 0x44, 0x53, 0x72, 0x2f, + 0x32, 0x00, 0x44, 0xc9, 0x00, 0x27, 0x32, 0x00, 0x49, 0xa2, 0xbc, 0x3d, + 0x32, 0x40, 0x43, 0x5f, 0x07, 0x3a, 0x32, 0x00, 0x4d, 0x09, 0x87, 0x37, + 0x32, 0x40, 0xa3, 0xa5, 0x01, 0x45, 0x71, 0xa5, 0x0d, 0x32, 0x80, 0x97, + 0x01, 0x45, 0x1e, 0xcc, 0x07, 0x32, 0x80, 0x89, 0x01, 0xab, 0x6d, 0x45, + 0xa8, 0xe8, 0x04, 0x32, 0x80, 0x60, 0x45, 0x1b, 0xe9, 0x01, 0x32, 0x80, + 0x53, 0xb0, 0x37, 0x45, 0x65, 0xea, 0x03, 0x32, 0x80, 0x2a, 0x44, 0x65, + 0xbf, 0x06, 0x32, 0x80, 0x1d, 0xb4, 0x01, 0xff, 0x46, 0x57, 0xd6, 0x0b, + 0x32, 0x80, 0x0d, 0x45, 0xe5, 0xcd, 0x02, 0x32, 0xc0, 0x00, 0x42, 0x19, + 0x00, 0x10, 0x32, 0x40, 0x42, 0x19, 0x00, 0x19, 0x32, 0x40, 0x42, 0x19, + 0x00, 0x14, 0x32, 0x40, 0x42, 0x19, 0x00, 0x11, 0x32, 0x40, 0x46, 0xd2, + 0xc2, 0x0c, 0x32, 0x80, 0x0d, 0x44, 0xe3, 0x84, 0x05, 0x32, 0xc0, 0x00, + 0x42, 0x19, 0x00, 0x13, 0x32, 0x40, 0x42, 0x19, 0x00, 0x1a, 0x32, 0x40, + 0x42, 0x19, 0x00, 0x0f, 0x32, 0x40, 0x42, 0x19, 0x00, 0x12, 0x32, 0x40, + 0x46, 0xca, 0xc2, 0x0a, 0x32, 0x80, 0x0d, 0x45, 0xdd, 0xa2, 0x00, 0x32, + 0xc0, 0x00, 0x42, 0x19, 0x00, 0x0e, 0x32, 0x40, 0x42, 0x19, 0x00, 0x18, + 0x32, 0x40, 0x42, 0x19, 0x00, 0x15, 0x32, 0x40, 0x42, 0x19, 0x00, 0x1b, + 0x32, 0x40, 0x46, 0xea, 0xcf, 0x09, 0x32, 0x80, 0x12, 0x44, 0xeb, 0xcf, + 0x08, 0x32, 0xc0, 0x00, 0x80, 0x01, 0xff, 0xe1, 0x16, 0x32, 0x00, 0xf5, + 0x1c, 0x32, 0x40, 0x42, 0x19, 0x00, 0x17, 0x32, 0x40, 0x45, 0x12, 0x0b, + 0x7b, 0x24, 0x00, 0xa6, 0x29, 0x44, 0xcf, 0x2a, 0x7c, 0x24, 0x00, 0x43, + 0x0e, 0x0b, 0x74, 0x24, 0x00, 0xb3, 0x0f, 0xb4, 0x01, 0xff, 0x44, 0x25, + 0x01, 0x76, 0x24, 0x00, 0x42, 0x15, 0x02, 0x75, 0x24, 0x40, 0x44, 0xc9, + 0x1d, 0x7a, 0x24, 0x00, 0x42, 0x01, 0x26, 0x79, 0x24, 0x40, 0x43, 0xd2, + 0x05, 0x78, 0x24, 0x00, 0x43, 0xf6, 0x06, 0x77, 0x24, 0x40, 0x45, 0x3d, + 0xe5, 0x82, 0xfa, 0x01, 0x05, 0x81, 0x10, 0x1c, 0x05, 0x8c, 0x38, 0x01, + 0xff, 0x42, 0x1e, 0x00, 0x25, 0x22, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, + 0x51, 0x47, 0x05, 0xf2, 0x2a, 0x00, 0x4e, 0x78, 0x3e, 0xf3, 0x2a, 0x40, + 0x4a, 0xd7, 0x20, 0x29, 0x20, 0x00, 0x42, 0xa4, 0x0d, 0x0f, 0x2e, 0x00, + 0x47, 0xe6, 0x72, 0x4d, 0x2e, 0x40, 0x45, 0xe8, 0xe4, 0x5e, 0xf9, 0x01, + 0x47, 0x2f, 0xd0, 0x3c, 0xf4, 0x41, 0x43, 0x49, 0x0e, 0xb4, 0x26, 0x00, + 0xad, 0x01, 0xff, 0x80, 0xe8, 0x01, 0x4d, 0x5b, 0x88, 0x32, 0xf9, 0x01, + 0x06, 0x84, 0xe1, 0x01, 0xff, 0x02, 0x68, 0x00, 0x3a, 0x07, 0xff, 0x39, + 0x06, 0x56, 0xd9, 0x36, 0x78, 0x08, 0x41, 0xa6, 0x22, 0x43, 0x0e, 0x0b, + 0x79, 0x08, 0x01, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0x7e, 0x08, 0x01, + 0x44, 0x25, 0x01, 0x7b, 0x08, 0x01, 0xb7, 0x01, 0xff, 0x44, 0xcb, 0x1d, + 0x7f, 0x08, 0x01, 0xef, 0x7a, 0x08, 0x41, 0x43, 0xd2, 0x05, 0x7d, 0x08, + 0x01, 0x43, 0xf6, 0x06, 0x7c, 0x08, 0x41, 0x53, 0x91, 0x49, 0x77, 0x08, + 0x01, 0x05, 0xee, 0x05, 0x01, 0xff, 0xa1, 0x85, 0x01, 0x44, 0x41, 0xef, + 0x61, 0x08, 0x01, 0x46, 0x23, 0x4a, 0x63, 0x08, 0x01, 0x49, 0xf1, 0xb8, + 0x6d, 0x08, 0x01, 0x45, 0xdd, 0xaa, 0x62, 0x08, 0x01, 0x42, 0xb0, 0x01, + 0x64, 0x08, 0x81, 0x60, 0x44, 0xcd, 0xf0, 0x6a, 0x08, 0x01, 0x46, 0x94, + 0xdd, 0x6b, 0x08, 0x01, 0x43, 0xb4, 0x05, 0x6c, 0x08, 0x01, 0x43, 0xdc, + 0x22, 0x6e, 0x08, 0x01, 0x42, 0x6f, 0x02, 0x71, 0x08, 0x01, 0x44, 0x4c, + 0xc8, 0x73, 0x08, 0x01, 0x44, 0x76, 0x66, 0x74, 0x08, 0x01, 0xb3, 0x20, + 0xb4, 0x12, 0x43, 0x8a, 0x8a, 0x65, 0x08, 0x01, 0x44, 0xa1, 0x52, 0x69, + 0x08, 0x01, 0x45, 0x9b, 0x52, 0x66, 0x08, 0x41, 0x42, 0xb7, 0x2d, 0x76, + 0x08, 0x01, 0x43, 0xda, 0x25, 0x68, 0x08, 0x41, 0xa1, 0x06, 0x43, 0x7a, + 0x16, 0x75, 0x08, 0x41, 0x43, 0xad, 0xea, 0x72, 0x08, 0x01, 0x44, 0x49, + 0xe4, 0x6f, 0x08, 0x41, 0x42, 0x53, 0x00, 0x67, 0x08, 0x41, 0x44, 0x18, + 0x3d, 0x60, 0x08, 0x01, 0x43, 0x7e, 0x1a, 0x70, 0x08, 0x41, 0x46, 0xd7, + 0x2f, 0x19, 0x2e, 0x00, 0x49, 0xbf, 0xb7, 0xf3, 0xfa, 0x01, 0x44, 0x0d, + 0x11, 0x34, 0xf3, 0x01, 0x47, 0xcd, 0xd6, 0xf4, 0xfa, 0x41, 0xa3, 0xcf, + 0x04, 0x06, 0xef, 0x06, 0x88, 0x04, 0x09, 0xe5, 0xbb, 0xd4, 0x03, 0x07, + 0xff, 0x39, 0x9c, 0x03, 0x05, 0x5a, 0x03, 0x93, 0x01, 0x07, 0x60, 0xd7, + 0x01, 0xff, 0xa1, 0x5b, 0xa5, 0x47, 0xa9, 0x33, 0xaf, 0x1f, 0xb5, 0x0b, + 0xb7, 0x01, 0xff, 0xe2, 0x18, 0x6b, 0x01, 0xf6, 0x19, 0x6b, 0x41, 0xa1, + 0x08, 0xe2, 0x06, 0x6b, 0x01, 0xf6, 0x07, 0x6b, 0x41, 0xe2, 0x10, 0x6b, + 0x01, 0xf6, 0x11, 0x6b, 0x41, 0xe2, 0x12, 0x6b, 0x01, 0xaf, 0x04, 0xf6, + 0x13, 0x6b, 0x41, 0xe2, 0x0c, 0x6b, 0x01, 0xf6, 0x0d, 0x6b, 0x41, 0xa1, + 0x08, 0xe2, 0x02, 0x6b, 0x01, 0xf6, 0x03, 0x6b, 0x41, 0xe2, 0x14, 0x6b, + 0x01, 0xf6, 0x15, 0x6b, 0x41, 0xe2, 0x08, 0x6b, 0x01, 0xa5, 0x04, 0xf6, + 0x09, 0x6b, 0x41, 0xe2, 0x00, 0x6b, 0x01, 0xf6, 0x01, 0x6b, 0x41, 0xa1, + 0x27, 0xe2, 0x16, 0x6b, 0x01, 0xa9, 0x19, 0xb5, 0x0f, 0xf6, 0x17, 0x6b, + 0x01, 0xb7, 0x01, 0xff, 0xe2, 0x0e, 0x6b, 0x01, 0xf6, 0x0f, 0x6b, 0x41, + 0xe2, 0x04, 0x6b, 0x01, 0xf6, 0x05, 0x6b, 0x41, 0xe2, 0x0a, 0x6b, 0x01, + 0xf6, 0x0b, 0x6b, 0x41, 0xe2, 0x1a, 0x6b, 0x01, 0xf6, 0x1b, 0x6b, 0x41, + 0x42, 0x2f, 0x08, 0x6c, 0x6b, 0x01, 0x04, 0xea, 0xbb, 0xc3, 0x01, 0xa8, + 0xb4, 0x01, 0x46, 0xbc, 0xdc, 0x43, 0x6b, 0x01, 0x43, 0xa3, 0x0d, 0x70, + 0x6b, 0x01, 0xad, 0x8f, 0x01, 0xae, 0x80, 0x01, 0xb4, 0x6c, 0x04, 0x0d, + 0xf3, 0x39, 0xb8, 0x06, 0x48, 0x10, 0xcd, 0x67, 0x6b, 0x41, 0x43, 0xa6, + 0x2f, 0x44, 0x6b, 0x01, 0x43, 0xb4, 0x4a, 0x6a, 0x6b, 0x01, 0xb9, 0x01, + 0xff, 0x04, 0x1d, 0x21, 0x06, 0x42, 0xcd, 0x02, 0x64, 0x6b, 0x41, 0x44, + 0xb1, 0xef, 0x3f, 0x6b, 0x01, 0x45, 0x48, 0xe9, 0x3c, 0x6b, 0x01, 0x43, + 0xef, 0x49, 0x3d, 0x6b, 0x01, 0x43, 0x96, 0x09, 0x3e, 0x6b, 0x41, 0x44, + 0xb9, 0xef, 0x3b, 0x6b, 0x01, 0x43, 0x20, 0x4b, 0x63, 0x6b, 0x01, 0x44, + 0x91, 0xf1, 0x42, 0x6b, 0x01, 0x44, 0x91, 0xf2, 0x40, 0x6b, 0x01, 0xb4, + 0x01, 0xff, 0xa8, 0x06, 0x49, 0x33, 0xbf, 0x38, 0x6b, 0x41, 0x43, 0xb4, + 0x4a, 0x3a, 0x6b, 0x01, 0x42, 0x14, 0x05, 0x37, 0x6b, 0x41, 0x42, 0x5f, + 0x24, 0x6f, 0x6b, 0x01, 0x4e, 0x47, 0x78, 0x66, 0x6b, 0x01, 0x4a, 0xc5, + 0xb3, 0x6d, 0x6b, 0x41, 0x43, 0x8e, 0xf4, 0x69, 0x6b, 0x01, 0x43, 0xa3, + 0xf4, 0x6b, 0x6b, 0x41, 0x04, 0xc7, 0xb3, 0x06, 0x42, 0xef, 0x02, 0x71, + 0x6b, 0x41, 0x44, 0xbd, 0xf2, 0x41, 0x6b, 0x01, 0x45, 0x87, 0xeb, 0x6e, + 0x6b, 0x41, 0x42, 0xc3, 0x01, 0x65, 0x6b, 0x01, 0x43, 0x65, 0x31, 0x68, + 0x6b, 0x41, 0xa3, 0x28, 0x52, 0x15, 0x52, 0x72, 0x6b, 0x01, 0x48, 0xe8, + 0xc8, 0x77, 0x6b, 0x01, 0x48, 0xf8, 0xc9, 0x76, 0x6b, 0x01, 0xb4, 0x01, + 0xff, 0x47, 0xed, 0xd5, 0x45, 0x6b, 0x01, 0x43, 0xd0, 0xf4, 0x74, 0x6b, + 0xc1, 0x00, 0x45, 0xa0, 0xe1, 0x75, 0x6b, 0x41, 0x44, 0x4a, 0x18, 0x39, + 0x6b, 0x01, 0x4a, 0x7b, 0xb2, 0x73, 0x6b, 0x41, 0x07, 0x71, 0x11, 0x25, + 0x48, 0xf5, 0x3b, 0x5e, 0x6b, 0x01, 0xb4, 0x01, 0xff, 0x02, 0x92, 0x01, + 0x06, 0x48, 0x68, 0xca, 0x61, 0x6b, 0x41, 0x80, 0x04, 0xf3, 0x5b, 0x6b, + 0x41, 0x48, 0x18, 0xc4, 0x60, 0x6b, 0x01, 0x49, 0xed, 0x7c, 0x5d, 0x6b, + 0x41, 0x49, 0xf4, 0x3b, 0x5f, 0x6b, 0x01, 0xf3, 0x5c, 0x6b, 0x41, 0x43, + 0x84, 0xcb, 0x35, 0x6b, 0x01, 0xab, 0x1b, 0xb3, 0x0f, 0xb4, 0x01, 0xff, + 0x43, 0xa2, 0xb2, 0x36, 0x6b, 0x01, 0x42, 0x3d, 0x01, 0x30, 0x6b, 0x41, + 0xef, 0x31, 0x6b, 0x01, 0x43, 0x7b, 0xb2, 0x34, 0x6b, 0x41, 0x42, 0xed, + 0x00, 0x32, 0x6b, 0x01, 0x43, 0xe8, 0x4b, 0x33, 0x6b, 0x41, 0x45, 0x12, + 0x0b, 0x58, 0x6b, 0x01, 0xa6, 0x2e, 0x44, 0xcf, 0x2a, 0x59, 0x6b, 0x01, + 0x43, 0x0e, 0x0b, 0x51, 0x6b, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0x43, + 0x1e, 0x50, 0x6b, 0x41, 0x44, 0x25, 0x01, 0x53, 0x6b, 0x01, 0x42, 0x15, + 0x02, 0x52, 0x6b, 0x41, 0x44, 0xc9, 0x1d, 0x57, 0x6b, 0x01, 0x42, 0x01, + 0x26, 0x56, 0x6b, 0x41, 0x43, 0xd2, 0x05, 0x55, 0x6b, 0x01, 0x43, 0xf6, + 0x06, 0x54, 0x6b, 0x41, 0x09, 0x43, 0xbb, 0x86, 0x01, 0x09, 0x28, 0x33, + 0x01, 0xff, 0x42, 0x5f, 0x24, 0x2d, 0x6b, 0x01, 0xa3, 0x6d, 0xa8, 0x59, + 0x43, 0x5e, 0x24, 0x1e, 0x6b, 0x01, 0x43, 0x0a, 0xe1, 0x26, 0x6b, 0x01, + 0xae, 0x24, 0x45, 0xed, 0xe9, 0x2a, 0x6b, 0x01, 0x44, 0x31, 0xf2, 0x23, + 0x6b, 0x01, 0x43, 0x74, 0x58, 0x21, 0x6b, 0x01, 0x43, 0xb5, 0xf4, 0x1c, + 0x6b, 0x01, 0x43, 0xca, 0xf4, 0x2e, 0x6b, 0x01, 0x43, 0xe3, 0x80, 0x24, + 0x6b, 0x41, 0x42, 0x5f, 0x24, 0x2c, 0x6b, 0x01, 0x44, 0x61, 0xef, 0x28, + 0x6b, 0x01, 0x43, 0x39, 0xcf, 0x22, 0x6b, 0x01, 0x43, 0x5e, 0x24, 0x20, + 0x6b, 0x01, 0xb4, 0x01, 0xff, 0x43, 0xd9, 0x7d, 0x2b, 0x6b, 0x01, 0x43, + 0xa1, 0x91, 0x1d, 0x6b, 0x41, 0x42, 0x5f, 0x24, 0x1f, 0x6b, 0x01, 0x43, + 0x5e, 0x24, 0x25, 0x6b, 0x01, 0x43, 0x71, 0x5c, 0x29, 0x6b, 0x41, 0x42, + 0x5f, 0x24, 0x2f, 0x6b, 0x01, 0x43, 0xd9, 0x7d, 0x27, 0x6b, 0x41, 0x43, + 0x40, 0xf4, 0x8b, 0x6b, 0x01, 0x02, 0x22, 0x00, 0x6e, 0xab, 0x5a, 0xac, + 0x4c, 0x44, 0x45, 0xf1, 0x84, 0x6b, 0x01, 0x44, 0x0d, 0xf2, 0x87, 0x6b, + 0x01, 0xb4, 0x23, 0xb6, 0x15, 0x45, 0x81, 0xec, 0x81, 0x6b, 0x01, 0xb9, + 0x01, 0xff, 0x42, 0x55, 0x19, 0x8c, 0x6b, 0x01, 0x43, 0x2e, 0xf4, 0x7e, + 0x6b, 0x41, 0x42, 0x55, 0x19, 0x8a, 0x6b, 0x01, 0x42, 0x11, 0xcd, 0x8f, + 0x6b, 0x41, 0x43, 0x4f, 0xf4, 0x85, 0x6b, 0x01, 0xb3, 0x01, 0xff, 0x42, + 0x5c, 0x00, 0x86, 0x6b, 0x01, 0x44, 0xc6, 0xb3, 0x7d, 0x6b, 0x01, 0x42, + 0x5b, 0x1a, 0x8d, 0x6b, 0x41, 0x43, 0xec, 0xf3, 0x80, 0x6b, 0x01, 0x42, + 0x5f, 0x03, 0x7f, 0x6b, 0x41, 0x43, 0xf3, 0x14, 0x88, 0x6b, 0x01, 0x42, + 0xcd, 0x02, 0x82, 0x6b, 0x01, 0x42, 0x2c, 0x5c, 0x8e, 0x6b, 0x41, 0xed, + 0x89, 0x6b, 0x01, 0x42, 0x11, 0xcd, 0x83, 0x6b, 0x41, 0xe5, 0xcf, 0xf5, + 0x81, 0x06, 0x43, 0xb5, 0x2d, 0xd4, 0xf6, 0x41, 0x80, 0x08, 0xf2, 0xdf, + 0xf4, 0x01, 0xf3, 0xd0, 0xf5, 0x41, 0x49, 0xcd, 0xb8, 0xc4, 0xf4, 0x01, + 0x06, 0xca, 0x04, 0x01, 0xff, 0x4b, 0xa4, 0x9d, 0xdf, 0xf5, 0x01, 0x43, + 0x73, 0x0b, 0xc3, 0xf4, 0x41, 0xa2, 0xbe, 0x2e, 0xa3, 0xda, 0x2d, 0x43, + 0xef, 0x0a, 0x62, 0xf3, 0x01, 0x4e, 0xd7, 0x77, 0xe2, 0xf3, 0x81, 0xc6, + 0x2d, 0xa7, 0xf9, 0x2b, 0x47, 0x19, 0xc9, 0x26, 0x21, 0x00, 0x47, 0xe8, + 0xd1, 0xe2, 0xf6, 0x01, 0x4b, 0x1c, 0x93, 0x4c, 0xf4, 0x01, 0xac, 0xd8, + 0x12, 0x48, 0x06, 0xbd, 0x49, 0xf5, 0x01, 0xae, 0x80, 0x12, 0xb0, 0xcf, + 0x10, 0xb2, 0xb3, 0x0b, 0xb3, 0xfd, 0x05, 0x02, 0xee, 0x05, 0xab, 0x02, + 0xb5, 0x46, 0x03, 0x32, 0x00, 0x10, 0x42, 0x95, 0x03, 0x89, 0xf9, 0x01, + 0xf8, 0x02, 0xf4, 0x01, 0x45, 0x9a, 0xec, 0xaa, 0xf9, 0x41, 0x4b, 0xc8, + 0x9c, 0x75, 0xf9, 0x01, 0xac, 0x01, 0xff, 0x42, 0xe5, 0x05, 0xd7, 0xf5, + 0x81, 0x06, 0x43, 0xee, 0x07, 0x3e, 0x20, 0x40, 0x05, 0x2b, 0x30, 0x01, + 0xff, 0x4d, 0x35, 0x58, 0xbc, 0x2b, 0x00, 0x06, 0xad, 0x02, 0x01, 0xff, + 0x51, 0x31, 0x58, 0xbb, 0x2b, 0x00, 0x47, 0x3b, 0x58, 0xba, 0x2b, 0x40, + 0x48, 0x90, 0xc8, 0x25, 0x21, 0x00, 0xb4, 0x01, 0xff, 0x48, 0x50, 0xc4, + 0xe4, 0xf4, 0x01, 0x06, 0x1b, 0x11, 0x01, 0xff, 0x4a, 0xf4, 0x2b, 0x2d, + 0x27, 0x00, 0x06, 0xef, 0x06, 0x82, 0x01, 0x4b, 0x1b, 0x61, 0x19, 0x27, + 0x00, 0x07, 0xde, 0x05, 0x06, 0x4a, 0x65, 0x2e, 0x9d, 0x26, 0x40, 0x0e, + 0xe5, 0x05, 0x06, 0x44, 0x96, 0x10, 0x1f, 0x27, 0x40, 0xe1, 0xd6, 0xcc, + 0x01, 0xe2, 0xd7, 0xcc, 0x01, 0xe3, 0xd8, 0xcc, 0x01, 0xe4, 0xd9, 0xcc, + 0x01, 0xe5, 0xda, 0xcc, 0x01, 0xe6, 0xdb, 0xcc, 0x01, 0xe7, 0xdc, 0xcc, + 0x01, 0xe8, 0xdd, 0xcc, 0x01, 0xe9, 0xde, 0xcc, 0x01, 0xea, 0xdf, 0xcc, + 0x01, 0xeb, 0xe0, 0xcc, 0x01, 0xec, 0xe1, 0xcc, 0x01, 0xed, 0xe2, 0xcc, + 0x01, 0xee, 0xe3, 0xcc, 0x01, 0xef, 0xe4, 0xcc, 0x01, 0xf0, 0xe5, 0xcc, + 0x01, 0xf1, 0xe6, 0xcc, 0x01, 0xf2, 0xe7, 0xcc, 0x01, 0xf3, 0xe8, 0xcc, + 0x01, 0xf4, 0xe9, 0xcc, 0x01, 0xf5, 0xea, 0xcc, 0x01, 0xf6, 0xeb, 0xcc, + 0x01, 0xf7, 0xec, 0xcc, 0x01, 0xf8, 0xed, 0xcc, 0x01, 0xf9, 0xee, 0xcc, + 0x01, 0xfa, 0xef, 0xcc, 0x41, 0x45, 0x12, 0x0b, 0xf8, 0xcc, 0x01, 0xa6, + 0x2e, 0x44, 0xcf, 0x2a, 0xf9, 0xcc, 0x01, 0x43, 0x0e, 0x0b, 0xf1, 0xcc, + 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, 0xf0, 0xcc, 0x41, 0x44, + 0x25, 0x01, 0xf3, 0xcc, 0x01, 0x42, 0x15, 0x02, 0xf2, 0xcc, 0x41, 0x44, + 0xc9, 0x1d, 0xf7, 0xcc, 0x01, 0x42, 0x01, 0x26, 0xf6, 0xcc, 0x41, 0x43, + 0xd2, 0x05, 0xf5, 0xcc, 0x01, 0x43, 0xf6, 0x06, 0xf4, 0xcc, 0x41, 0x42, + 0x33, 0x00, 0xa6, 0xf9, 0x01, 0x0b, 0xb1, 0xa0, 0x01, 0xff, 0x11, 0xfe, + 0x57, 0xe4, 0x02, 0x0d, 0x1e, 0x5a, 0xd3, 0x02, 0x48, 0x30, 0xc8, 0x2e, + 0xed, 0x01, 0x07, 0xff, 0x39, 0x01, 0xff, 0x45, 0x12, 0x0b, 0x08, 0xed, + 0x81, 0xa7, 0x02, 0xa6, 0xd9, 0x01, 0x44, 0xcf, 0x2a, 0x09, 0xed, 0x81, + 0xb6, 0x01, 0x43, 0x0e, 0x0b, 0x01, 0xed, 0x81, 0x9f, 0x01, 0xb3, 0x59, + 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0x0a, 0xed, 0x81, 0x49, 0xa8, 0x24, + 0xb7, 0x01, 0xff, 0x44, 0xcb, 0x1d, 0x0b, 0xed, 0x81, 0x14, 0xef, 0x02, + 0xed, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x47, 0x71, 0x11, 0x14, 0xed, 0x01, + 0x48, 0x40, 0x5e, 0x1d, 0xed, 0x41, 0x49, 0x3f, 0x5e, 0x26, 0xed, 0x41, + 0x44, 0x7b, 0x11, 0x0c, 0xed, 0x81, 0x16, 0x43, 0x26, 0x01, 0x03, 0xed, + 0xc1, 0x00, 0x80, 0x01, 0xff, 0x47, 0x71, 0x11, 0x15, 0xed, 0x01, 0x48, + 0x40, 0x5e, 0x1e, 0xed, 0x41, 0x49, 0x3f, 0x5e, 0x27, 0xed, 0x41, 0x49, + 0x3f, 0x5e, 0x25, 0xed, 0x41, 0x44, 0xc9, 0x1d, 0x07, 0xed, 0x81, 0x22, + 0x42, 0x01, 0x26, 0x06, 0xed, 0xc1, 0x00, 0x80, 0x0d, 0x42, 0x7d, 0x11, + 0x0f, 0xed, 0xc1, 0x00, 0x49, 0x3f, 0x5e, 0x2a, 0xed, 0x41, 0x47, 0x71, + 0x11, 0x18, 0xed, 0x01, 0x48, 0x40, 0x5e, 0x21, 0xed, 0x41, 0x80, 0x0d, + 0x42, 0x7d, 0x11, 0x10, 0xed, 0xc1, 0x00, 0x49, 0x3f, 0x5e, 0x2b, 0xed, + 0x41, 0x47, 0x71, 0x11, 0x19, 0xed, 0x01, 0x48, 0x40, 0x5e, 0x22, 0xed, + 0x41, 0x80, 0x01, 0xff, 0x47, 0x71, 0x11, 0x13, 0xed, 0x01, 0x48, 0x40, + 0x5e, 0x1c, 0xed, 0x41, 0x80, 0x0d, 0x42, 0x7d, 0x11, 0x12, 0xed, 0xc1, + 0x00, 0x49, 0x3f, 0x5e, 0x2d, 0xed, 0x41, 0x47, 0x71, 0x11, 0x1b, 0xed, + 0x01, 0x48, 0x40, 0x5e, 0x24, 0xed, 0x41, 0xa9, 0x26, 0xaf, 0x01, 0xff, + 0x43, 0x7c, 0x11, 0x0d, 0xed, 0x81, 0x16, 0x42, 0x42, 0x00, 0x04, 0xed, + 0xc1, 0x00, 0x80, 0x01, 0xff, 0x47, 0x71, 0x11, 0x16, 0xed, 0x01, 0x48, + 0x40, 0x5e, 0x1f, 0xed, 0x41, 0x49, 0x3f, 0x5e, 0x28, 0xed, 0x41, 0x43, + 0x52, 0x4d, 0x0e, 0xed, 0x81, 0x16, 0x42, 0x32, 0x00, 0x05, 0xed, 0xc1, + 0x00, 0x80, 0x01, 0xff, 0x47, 0x71, 0x11, 0x17, 0xed, 0x01, 0x48, 0x40, + 0x5e, 0x20, 0xed, 0x41, 0x49, 0x3f, 0x5e, 0x29, 0xed, 0x41, 0x80, 0x0b, + 0xf9, 0x11, 0xed, 0xc1, 0x00, 0x49, 0x3f, 0x5e, 0x2c, 0xed, 0x41, 0x47, + 0x71, 0x11, 0x1a, 0xed, 0x01, 0x48, 0x40, 0x5e, 0x23, 0xed, 0x41, 0x44, + 0x22, 0x00, 0x3c, 0xed, 0x01, 0x45, 0xe6, 0xdf, 0x3d, 0xed, 0x41, 0x45, + 0x12, 0x0b, 0x35, 0xed, 0x01, 0xa6, 0x3e, 0x44, 0xcf, 0x2a, 0x36, 0xed, + 0x01, 0xb3, 0x23, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0x37, 0xed, 0x81, + 0x13, 0x44, 0x25, 0x01, 0x30, 0xed, 0x01, 0x42, 0x15, 0x02, 0x2f, 0xed, + 0xc1, 0x00, 0x49, 0x3f, 0x5e, 0x3a, 0xed, 0x41, 0x49, 0x3f, 0x5e, 0x3b, + 0xed, 0x41, 0x44, 0xc9, 0x1d, 0x34, 0xed, 0x01, 0x42, 0x01, 0x26, 0x33, + 0xed, 0xc1, 0x00, 0x48, 0x70, 0x11, 0x39, 0xed, 0x41, 0x43, 0xd2, 0x05, + 0x32, 0xed, 0x01, 0x43, 0xf6, 0x06, 0x31, 0xed, 0xc1, 0x00, 0x48, 0x70, + 0x11, 0x38, 0xed, 0x41, 0x04, 0x22, 0x43, 0xfe, 0x01, 0x06, 0xfa, 0xdd, + 0x01, 0xff, 0x06, 0xef, 0x06, 0xb2, 0x01, 0x07, 0xec, 0x05, 0x01, 0xff, + 0xe1, 0x96, 0x04, 0x81, 0x9d, 0x01, 0x42, 0x16, 0x00, 0x81, 0x04, 0x01, + 0x44, 0x5d, 0xef, 0x8b, 0x04, 0x01, 0xa4, 0x82, 0x01, 0xe5, 0x97, 0x04, + 0x81, 0x79, 0x42, 0x0c, 0x08, 0x8d, 0x04, 0x01, 0x42, 0x24, 0x02, 0x8c, + 0x04, 0x01, 0x42, 0x22, 0x00, 0x94, 0x04, 0x01, 0xe9, 0x98, 0x04, 0x01, + 0x42, 0x56, 0x19, 0x83, 0x04, 0x01, 0xab, 0x4f, 0x44, 0xff, 0xee, 0x90, + 0x04, 0x01, 0x44, 0x35, 0xf1, 0x91, 0x04, 0x01, 0x44, 0xa9, 0xf1, 0x92, + 0x04, 0x01, 0xef, 0x99, 0x04, 0x81, 0x34, 0x44, 0x1a, 0xea, 0x8e, 0x04, + 0x01, 0x42, 0x71, 0x00, 0x87, 0x04, 0x01, 0xb3, 0x1c, 0x42, 0x12, 0x00, + 0x82, 0x04, 0x01, 0xf5, 0x9a, 0x04, 0x01, 0x43, 0x8a, 0x8a, 0x93, 0x04, + 0x01, 0x42, 0xed, 0x26, 0x84, 0x04, 0x01, 0x42, 0xbc, 0x22, 0x95, 0x04, + 0x41, 0xe1, 0x88, 0x04, 0x01, 0x44, 0x45, 0xf0, 0x89, 0x04, 0x41, 0xef, + 0x9d, 0x04, 0x41, 0x43, 0x1a, 0xc3, 0x8f, 0x04, 0x01, 0x42, 0x22, 0x00, + 0x85, 0x04, 0x41, 0xe5, 0x9c, 0x04, 0x41, 0x43, 0x2d, 0x13, 0x86, 0x04, + 0x01, 0x42, 0x22, 0x00, 0x8a, 0x04, 0x41, 0xe1, 0x9b, 0x04, 0x01, 0x43, + 0x68, 0x00, 0x80, 0x04, 0x41, 0x45, 0x12, 0x0b, 0xa8, 0x04, 0x01, 0xa6, + 0x2e, 0x44, 0xcf, 0x2a, 0xa9, 0x04, 0x01, 0x43, 0x0e, 0x0b, 0xa1, 0x04, + 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, 0xa0, 0x04, 0x41, 0x44, + 0x25, 0x01, 0xa3, 0x04, 0x01, 0x42, 0x15, 0x02, 0xa2, 0x04, 0x41, 0x44, + 0xc9, 0x1d, 0xa7, 0x04, 0x01, 0x42, 0x01, 0x26, 0xa6, 0x04, 0x41, 0x43, + 0xd2, 0x05, 0xa5, 0x04, 0x01, 0x43, 0xf6, 0x06, 0xa4, 0x04, 0x41, 0x0f, + 0xe4, 0x05, 0xd8, 0x01, 0x0d, 0x76, 0x08, 0x01, 0xff, 0xe1, 0xd8, 0x04, + 0x81, 0xc0, 0x01, 0x43, 0x63, 0x09, 0xdc, 0x04, 0x01, 0x43, 0x91, 0x20, + 0xdd, 0x04, 0x01, 0x43, 0xe7, 0x4b, 0xf5, 0x04, 0x01, 0xe5, 0xdf, 0x04, + 0x81, 0x81, 0x01, 0x43, 0x0e, 0x9c, 0xf9, 0x04, 0x01, 0xa8, 0x6f, 0xe9, + 0xe3, 0x04, 0x01, 0xab, 0x59, 0x42, 0x74, 0x00, 0xe7, 0x04, 0x01, 0x42, + 0x6c, 0x00, 0xe8, 0x04, 0x01, 0x42, 0x2a, 0x05, 0xe9, 0x04, 0x01, 0xef, + 0xea, 0x04, 0x81, 0x3c, 0x42, 0xbb, 0x09, 0xec, 0x04, 0x01, 0xb3, 0x2a, + 0xb4, 0x17, 0xf5, 0xf6, 0x04, 0x01, 0x42, 0xa9, 0x01, 0xf7, 0x04, 0x01, + 0xba, 0x01, 0xff, 0xe1, 0xfa, 0x04, 0x01, 0x42, 0x22, 0x00, 0xfb, 0x04, + 0x41, 0xe1, 0xf0, 0x04, 0x01, 0xb3, 0x01, 0xff, 0xe1, 0xf2, 0x04, 0x01, + 0x42, 0x22, 0x00, 0xf4, 0x04, 0x41, 0xe1, 0xee, 0x04, 0x01, 0x42, 0x22, + 0x00, 0xef, 0x04, 0x41, 0x42, 0x9e, 0x01, 0xeb, 0x04, 0x41, 0xe1, 0xe4, + 0x04, 0x01, 0x42, 0x22, 0x00, 0xf8, 0x04, 0x01, 0x42, 0xbc, 0x22, 0xe6, + 0x04, 0x41, 0xe1, 0xe1, 0x04, 0x01, 0x42, 0xbc, 0x22, 0xe2, 0x04, 0x41, + 0xa8, 0x06, 0x42, 0x9e, 0x01, 0xe0, 0x04, 0x41, 0x43, 0x91, 0x20, 0xde, + 0x04, 0x01, 0x42, 0x1b, 0x02, 0xe5, 0x04, 0x01, 0x42, 0xbb, 0x09, 0xed, + 0x04, 0x01, 0xb4, 0x01, 0xff, 0xe1, 0xf1, 0x04, 0x01, 0x42, 0x40, 0x06, + 0xf3, 0x04, 0x41, 0xe8, 0xdb, 0x04, 0x01, 0xe9, 0xd9, 0x04, 0xc1, 0x00, + 0xee, 0xda, 0x04, 0x41, 0xe1, 0xb0, 0x04, 0x81, 0xc0, 0x01, 0x43, 0x63, + 0x09, 0xb4, 0x04, 0x01, 0x43, 0x91, 0x20, 0xb5, 0x04, 0x01, 0x43, 0xe7, + 0x4b, 0xcd, 0x04, 0x01, 0xe5, 0xb7, 0x04, 0x81, 0x81, 0x01, 0x43, 0x0e, + 0x9c, 0xd1, 0x04, 0x01, 0xa8, 0x6f, 0xe9, 0xbb, 0x04, 0x01, 0xab, 0x59, + 0x42, 0x74, 0x00, 0xbf, 0x04, 0x01, 0x42, 0x6c, 0x00, 0xc0, 0x04, 0x01, + 0x42, 0x2a, 0x05, 0xc1, 0x04, 0x01, 0xef, 0xc2, 0x04, 0x81, 0x3c, 0x42, + 0xbb, 0x09, 0xc4, 0x04, 0x01, 0xb3, 0x2a, 0xb4, 0x17, 0xf5, 0xce, 0x04, + 0x01, 0x42, 0xa9, 0x01, 0xcf, 0x04, 0x01, 0xba, 0x01, 0xff, 0xe1, 0xd2, + 0x04, 0x01, 0x42, 0x22, 0x00, 0xd3, 0x04, 0x41, 0xe1, 0xc8, 0x04, 0x01, + 0xb3, 0x01, 0xff, 0xe1, 0xca, 0x04, 0x01, 0x42, 0x22, 0x00, 0xcc, 0x04, + 0x41, 0xe1, 0xc6, 0x04, 0x01, 0x42, 0x22, 0x00, 0xc7, 0x04, 0x41, 0x42, + 0x9e, 0x01, 0xc3, 0x04, 0x41, 0xe1, 0xbc, 0x04, 0x01, 0x42, 0x22, 0x00, + 0xd0, 0x04, 0x01, 0x42, 0xbc, 0x22, 0xbe, 0x04, 0x41, 0xe1, 0xb9, 0x04, + 0x01, 0x42, 0xbc, 0x22, 0xba, 0x04, 0x41, 0xa8, 0x06, 0x42, 0x9e, 0x01, + 0xb8, 0x04, 0x41, 0x43, 0x91, 0x20, 0xb6, 0x04, 0x01, 0x42, 0x1b, 0x02, + 0xbd, 0x04, 0x01, 0x42, 0xbb, 0x09, 0xc5, 0x04, 0x01, 0xb4, 0x01, 0xff, + 0xe1, 0xc9, 0x04, 0x01, 0x42, 0x40, 0x06, 0xcb, 0x04, 0x41, 0xe8, 0xb3, + 0x04, 0x01, 0xe9, 0xb1, 0x04, 0xc1, 0x00, 0xee, 0xb2, 0x04, 0x41, 0x50, + 0xa6, 0x60, 0xc7, 0x27, 0x00, 0x03, 0x1c, 0x01, 0xf8, 0x04, 0xa3, 0xeb, + 0x04, 0xa9, 0x21, 0x05, 0xf6, 0x11, 0x11, 0x03, 0x2a, 0x08, 0x01, 0xff, + 0x49, 0xda, 0xb7, 0x26, 0x26, 0x00, 0x55, 0x89, 0x21, 0x42, 0xcc, 0x41, + 0x50, 0x7f, 0x24, 0x3e, 0xfd, 0x00, 0x51, 0xd2, 0x21, 0x3f, 0xfd, 0x40, + 0x48, 0xe2, 0x2f, 0xb6, 0x22, 0x00, 0x03, 0xa1, 0x32, 0x01, 0xff, 0xa1, + 0xae, 0x04, 0x06, 0xef, 0x06, 0xe7, 0x03, 0x09, 0x1e, 0x5a, 0xb5, 0x03, + 0x46, 0x1c, 0xdd, 0x70, 0x0b, 0x00, 0x07, 0xec, 0x05, 0x79, 0x05, 0x5a, + 0x03, 0x44, 0x0b, 0x40, 0x77, 0x01, 0xff, 0xa1, 0x31, 0xe5, 0x47, 0x0b, + 0x00, 0xe9, 0x3f, 0x0b, 0x80, 0x24, 0xef, 0x4b, 0x0b, 0x00, 0xf5, 0x41, + 0x0b, 0x80, 0x17, 0x08, 0x22, 0xc1, 0x01, 0xff, 0xec, 0x62, 0x0b, 0x80, + 0x09, 0xf2, 0x43, 0x0b, 0xc0, 0x00, 0xf2, 0x44, 0x0b, 0x40, 0xec, 0x63, + 0x0b, 0x40, 0xf5, 0x42, 0x0b, 0x40, 0xe9, 0x40, 0x0b, 0x40, 0xe1, 0x3e, + 0x0b, 0x00, 0xe9, 0x48, 0x0b, 0x00, 0xf5, 0x4c, 0x0b, 0x40, 0xa1, 0x23, + 0x4b, 0xd7, 0x23, 0x01, 0x0b, 0x00, 0x45, 0x3f, 0x3f, 0x3c, 0x0b, 0x00, + 0x48, 0x82, 0x8a, 0x55, 0x0b, 0x00, 0x02, 0x02, 0x00, 0x01, 0xff, 0x44, + 0xe5, 0x23, 0x4d, 0x0b, 0x00, 0x45, 0xec, 0x4b, 0x03, 0x0b, 0x40, 0x47, + 0x3d, 0x16, 0x02, 0x0b, 0x00, 0x47, 0xaf, 0x88, 0x3d, 0x0b, 0x40, 0xe1, + 0x05, 0x0b, 0x80, 0xa0, 0x02, 0xa2, 0x93, 0x02, 0xa3, 0x86, 0x02, 0xa4, + 0xed, 0x01, 0xe5, 0x0f, 0x0b, 0x00, 0xa7, 0xdc, 0x01, 0x42, 0x22, 0x00, + 0x39, 0x0b, 0x00, 0xe9, 0x07, 0x0b, 0x80, 0xcc, 0x01, 0xaa, 0xbf, 0x01, + 0xab, 0xb2, 0x01, 0xac, 0xa5, 0x01, 0x42, 0x6c, 0x00, 0x2e, 0x0b, 0x00, + 0xae, 0x86, 0x01, 0xef, 0x13, 0x0b, 0x00, 0xb0, 0x76, 0xb2, 0x64, 0xb3, + 0x52, 0xb4, 0x39, 0xf5, 0x09, 0x0b, 0x80, 0x30, 0xb6, 0x13, 0x42, 0xa9, + 0x01, 0x71, 0x0b, 0x00, 0xb9, 0x01, 0xff, 0xe1, 0x2f, 0x0b, 0x00, 0x42, + 0xbc, 0x22, 0x5f, 0x0b, 0x40, 0xe1, 0x35, 0x0b, 0x00, 0x07, 0x23, 0xc1, + 0x01, 0xff, 0xec, 0x0c, 0x0b, 0x80, 0x09, 0xf2, 0x0b, 0x0b, 0xc0, 0x00, + 0xf2, 0x60, 0x0b, 0x40, 0xec, 0x61, 0x0b, 0x40, 0xf5, 0x0a, 0x0b, 0x40, + 0xe1, 0x24, 0x0b, 0x00, 0x42, 0x22, 0x00, 0x25, 0x0b, 0x00, 0xb4, 0x01, + 0xff, 0xe1, 0x1f, 0x0b, 0x00, 0x42, 0x22, 0x00, 0x20, 0x0b, 0x40, 0xe1, + 0x38, 0x0b, 0x00, 0x42, 0x22, 0x00, 0x36, 0x0b, 0x00, 0x42, 0x40, 0x06, + 0x37, 0x0b, 0x40, 0xe1, 0x30, 0x0b, 0x00, 0x42, 0x22, 0x00, 0x5d, 0x0b, + 0x00, 0x42, 0x71, 0x00, 0x5c, 0x0b, 0x40, 0xe1, 0x2a, 0x0b, 0x00, 0x42, + 0x22, 0x00, 0x2b, 0x0b, 0x40, 0xe1, 0x28, 0x0b, 0x00, 0x42, 0x24, 0x02, + 0x19, 0x0b, 0x00, 0x42, 0x2a, 0x05, 0x23, 0x0b, 0x00, 0x42, 0xbc, 0x22, + 0x1e, 0x0b, 0x40, 0xe1, 0x32, 0x0b, 0x00, 0x42, 0x74, 0x00, 0x33, 0x0b, + 0x40, 0xe1, 0x15, 0x0b, 0x00, 0x42, 0x22, 0x00, 0x16, 0x0b, 0x40, 0xe1, + 0x1c, 0x0b, 0x00, 0x42, 0x22, 0x00, 0x1d, 0x0b, 0x40, 0xe9, 0x08, 0x0b, + 0x40, 0xe1, 0x17, 0x0b, 0x00, 0x42, 0x22, 0x00, 0x18, 0x0b, 0x40, 0xe1, + 0x26, 0x0b, 0x00, 0xa4, 0x06, 0x42, 0x22, 0x00, 0x27, 0x0b, 0x40, 0xe1, + 0x21, 0x0b, 0x00, 0x42, 0x22, 0x00, 0x22, 0x0b, 0x40, 0xe1, 0x1a, 0x0b, + 0x00, 0x42, 0x22, 0x00, 0x1b, 0x0b, 0x40, 0xe1, 0x2c, 0x0b, 0x00, 0x42, + 0x22, 0x00, 0x2d, 0x0b, 0x40, 0xe1, 0x06, 0x0b, 0x00, 0xe9, 0x10, 0x0b, + 0x00, 0xf5, 0x14, 0x0b, 0x40, 0x04, 0x0e, 0x0b, 0x11, 0x06, 0x24, 0x01, + 0x01, 0xff, 0x48, 0x2a, 0x01, 0x74, 0x0b, 0x00, 0x4a, 0x13, 0xb1, 0x77, + 0x0b, 0x40, 0x46, 0x12, 0x0b, 0x76, 0x0b, 0x00, 0x44, 0x22, 0x00, 0x73, + 0x0b, 0x00, 0x47, 0x2a, 0x01, 0x72, 0x0b, 0x00, 0x49, 0x00, 0x26, 0x75, + 0x0b, 0x40, 0x45, 0x12, 0x0b, 0x6e, 0x0b, 0x00, 0xa6, 0x2e, 0x44, 0xcf, + 0x2a, 0x6f, 0x0b, 0x00, 0x43, 0x0e, 0x0b, 0x67, 0x0b, 0x00, 0xb3, 0x14, + 0xb4, 0x06, 0x44, 0x43, 0x1e, 0x66, 0x0b, 0x40, 0x44, 0x25, 0x01, 0x69, + 0x0b, 0x00, 0x42, 0x15, 0x02, 0x68, 0x0b, 0x40, 0x44, 0xc9, 0x1d, 0x6d, + 0x0b, 0x00, 0x42, 0x01, 0x26, 0x6c, 0x0b, 0x40, 0x43, 0xd2, 0x05, 0x6b, + 0x0b, 0x00, 0x43, 0xf6, 0x06, 0x6a, 0x0b, 0x40, 0x4d, 0xd6, 0x83, 0x56, + 0x0b, 0x00, 0x4d, 0x18, 0x76, 0x57, 0x0b, 0x40, 0xe1, 0xcd, 0xfa, 0x01, + 0x42, 0xef, 0x02, 0x7f, 0xf7, 0x41, 0x02, 0x60, 0x00, 0x06, 0x44, 0xed, + 0xf2, 0xa7, 0xf9, 0x41, 0x44, 0x45, 0xef, 0xd9, 0xf4, 0x01, 0x45, 0xac, + 0x21, 0xe1, 0xf9, 0x41, 0xa5, 0x24, 0x47, 0x9b, 0xd1, 0xce, 0x26, 0x00, + 0x48, 0x0c, 0x17, 0x0d, 0x26, 0x00, 0x02, 0x35, 0x00, 0x01, 0xff, 0x48, + 0x78, 0xc4, 0xbf, 0xf4, 0x81, 0x06, 0x46, 0xc6, 0xde, 0x25, 0x23, 0x40, + 0x45, 0xbe, 0xe1, 0xb8, 0xf5, 0x41, 0xae, 0x06, 0x55, 0x91, 0x3d, 0x9d, + 0x00, 0x40, 0x80, 0x19, 0x8d, 0x01, 0xff, 0x0f, 0xa9, 0x6b, 0x06, 0x59, + 0x79, 0x25, 0xbe, 0x27, 0x40, 0x4d, 0x7b, 0x83, 0x8f, 0x23, 0x00, 0x4d, + 0xe7, 0x84, 0x90, 0x23, 0x40, 0x02, 0x5d, 0x00, 0x57, 0x07, 0x73, 0x02, + 0x3b, 0xa6, 0x2d, 0x4a, 0x83, 0x78, 0x50, 0xf4, 0x01, 0x44, 0x34, 0x01, + 0x13, 0xf5, 0x01, 0x0d, 0x76, 0x85, 0x11, 0x02, 0x6f, 0x00, 0x01, 0xff, + 0x44, 0x9b, 0x12, 0xc3, 0x27, 0x00, 0x46, 0x29, 0x36, 0xc4, 0x27, 0x40, + 0x4c, 0x77, 0x91, 0xed, 0xf4, 0x01, 0x4b, 0xb9, 0xa1, 0xec, 0xf4, 0x41, + 0x4a, 0xaf, 0xab, 0xc2, 0xf4, 0x01, 0x45, 0xcc, 0x65, 0xc1, 0xf5, 0x41, + 0x48, 0x3c, 0x0d, 0x32, 0x27, 0x00, 0x4a, 0xf4, 0x2b, 0x2b, 0x27, 0x00, + 0x45, 0x95, 0x10, 0x1b, 0x27, 0x00, 0x58, 0x6e, 0x2b, 0x3c, 0x27, 0x40, + 0x42, 0x55, 0x05, 0xd6, 0xf4, 0x01, 0xf8, 0x23, 0x24, 0x40, 0x72, 0xa7, + 0x00, 0x1b, 0xf5, 0x01, 0x07, 0x0c, 0xd0, 0x27, 0xa5, 0x06, 0x43, 0xb5, + 0x00, 0xc5, 0xf9, 0x41, 0x80, 0x06, 0x4f, 0x41, 0x6a, 0x71, 0xfa, 0x41, + 0x4c, 0x03, 0x8d, 0xaf, 0xf5, 0x01, 0x04, 0x03, 0x0c, 0x01, 0xff, 0x46, + 0x9d, 0x7d, 0x24, 0x20, 0x00, 0x59, 0x4f, 0x15, 0x2b, 0x2e, 0x40, 0x4a, + 0x17, 0xa8, 0x98, 0xf6, 0x01, 0x43, 0x96, 0x27, 0x8d, 0xf6, 0x01, 0x4b, + 0x23, 0x9c, 0xf1, 0xf6, 0x01, 0x4a, 0xa1, 0xaf, 0x94, 0xf6, 0x01, 0x44, + 0x47, 0xcf, 0x96, 0xf6, 0x41, 0x80, 0xf5, 0x14, 0xa4, 0x06, 0x43, 0xd2, 0x05, 0xd2, 0xfa, 0x41, 0x80, 0x17, 0x03, 0x16, 0x01, 0x01, 0xff, 0x45, - 0x01, 0xe1, 0xd3, 0xf9, 0x01, 0x43, 0xd5, 0x17, 0x74, 0xf4, 0x01, 0x45, - 0x62, 0x2c, 0x75, 0xf4, 0x41, 0x08, 0x22, 0xc2, 0xc3, 0x14, 0x0a, 0x19, - 0xa9, 0x91, 0x10, 0x07, 0x38, 0xcf, 0xb2, 0x0e, 0x43, 0x81, 0x23, 0xdd, - 0xf5, 0x01, 0x0e, 0xb4, 0x78, 0xca, 0x0c, 0x03, 0x6f, 0x02, 0xa1, 0x08, - 0x02, 0x35, 0x03, 0x98, 0x04, 0x0e, 0x0a, 0x7c, 0xc3, 0x01, 0x07, 0x40, - 0xd4, 0x01, 0xff, 0x0a, 0xd6, 0x57, 0x98, 0x01, 0x07, 0xc1, 0x05, 0x22, - 0x0c, 0x01, 0x16, 0x01, 0xff, 0x43, 0x16, 0x00, 0x86, 0x0f, 0x01, 0x49, - 0x9c, 0x45, 0x89, 0x0f, 0x01, 0x04, 0xd0, 0x09, 0x01, 0xff, 0x44, 0xec, - 0x19, 0x87, 0x0f, 0x01, 0x44, 0xd4, 0x09, 0x88, 0x0f, 0x41, 0x45, 0x58, - 0xab, 0x70, 0x0f, 0x01, 0x44, 0x0a, 0xec, 0x71, 0x0f, 0x01, 0x4a, 0x1f, - 0xa8, 0x75, 0x0f, 0x01, 0x4a, 0xa1, 0xa8, 0x72, 0x0f, 0x01, 0x44, 0x8e, - 0xed, 0x77, 0x0f, 0x01, 0xac, 0x46, 0x43, 0x89, 0x05, 0x79, 0x0f, 0x01, - 0x43, 0x54, 0x22, 0x7a, 0x0f, 0x01, 0x42, 0x6f, 0x02, 0x7c, 0x0f, 0x01, - 0x44, 0xfa, 0x64, 0x7e, 0x0f, 0x01, 0xb3, 0x18, 0x43, 0x1e, 0xc2, 0x80, - 0x0f, 0x01, 0x43, 0xc0, 0x88, 0x73, 0x0f, 0x01, 0x44, 0x58, 0x51, 0x76, - 0x0f, 0x01, 0x45, 0x52, 0x51, 0x74, 0x0f, 0x41, 0xa1, 0x06, 0x43, 0x0e, - 0x16, 0x7f, 0x0f, 0x41, 0x43, 0x89, 0xe7, 0x7d, 0x0f, 0x01, 0x44, 0x39, - 0xe1, 0x7b, 0x0f, 0x41, 0x45, 0x59, 0xd9, 0x78, 0x0f, 0x01, 0x43, 0x28, - 0x59, 0x81, 0x0f, 0x41, 0x04, 0xb4, 0x0b, 0x11, 0x09, 0xa2, 0x0b, 0x01, - 0xff, 0x45, 0x5c, 0x00, 0x84, 0x0f, 0x01, 0x45, 0xf5, 0x06, 0x85, 0x0f, - 0x41, 0x45, 0x5c, 0x00, 0x82, 0x0f, 0x01, 0x45, 0xf5, 0x06, 0x83, 0x0f, - 0x41, 0x07, 0x3e, 0xd1, 0x92, 0x01, 0x08, 0x12, 0xca, 0x01, 0xff, 0xe1, + 0x0c, 0xe4, 0xd3, 0xf9, 0x01, 0x43, 0x41, 0x18, 0x74, 0xf4, 0x01, 0x45, + 0x1a, 0x2d, 0x75, 0xf4, 0x41, 0x08, 0xa8, 0xc4, 0xc3, 0x14, 0x0a, 0x55, + 0xab, 0x91, 0x10, 0x07, 0x0b, 0xd2, 0xb2, 0x0e, 0x43, 0x09, 0x24, 0xdd, + 0xf5, 0x01, 0x0e, 0x15, 0x7a, 0xca, 0x0c, 0x03, 0x6f, 0x02, 0xa1, 0x08, + 0x02, 0x60, 0x03, 0x98, 0x04, 0x0e, 0x79, 0x7d, 0xc3, 0x01, 0x07, 0x13, + 0xd7, 0x01, 0xff, 0x0a, 0x41, 0x59, 0x98, 0x01, 0x07, 0xec, 0x05, 0x22, + 0x0c, 0x6d, 0x16, 0x01, 0xff, 0x43, 0x16, 0x00, 0x86, 0x0f, 0x01, 0x49, + 0xd1, 0x46, 0x89, 0x0f, 0x01, 0x04, 0x1f, 0x0a, 0x01, 0xff, 0x44, 0x73, + 0x1a, 0x87, 0x0f, 0x01, 0x44, 0x23, 0x0a, 0x88, 0x0f, 0x41, 0x45, 0xb2, + 0xad, 0x70, 0x0f, 0x01, 0x44, 0x41, 0xef, 0x71, 0x0f, 0x01, 0x4a, 0x5b, + 0xaa, 0x75, 0x0f, 0x01, 0x4a, 0xdd, 0xaa, 0x72, 0x0f, 0x01, 0x44, 0xcd, + 0xf0, 0x77, 0x0f, 0x01, 0xac, 0x46, 0x43, 0xb4, 0x05, 0x79, 0x0f, 0x01, + 0x43, 0xdc, 0x22, 0x7a, 0x0f, 0x01, 0x42, 0x6f, 0x02, 0x7c, 0x0f, 0x01, + 0x44, 0x76, 0x66, 0x7e, 0x0f, 0x01, 0xb3, 0x18, 0x43, 0xa4, 0xc4, 0x80, + 0x0f, 0x01, 0x43, 0x8a, 0x8a, 0x73, 0x0f, 0x01, 0x44, 0xa1, 0x52, 0x76, + 0x0f, 0x01, 0x45, 0x9b, 0x52, 0x74, 0x0f, 0x41, 0xa1, 0x06, 0x43, 0x7a, + 0x16, 0x7f, 0x0f, 0x41, 0x43, 0xad, 0xea, 0x7d, 0x0f, 0x01, 0x44, 0x49, + 0xe4, 0x7b, 0x0f, 0x41, 0x45, 0x4b, 0xdc, 0x78, 0x0f, 0x01, 0x43, 0x93, + 0x5a, 0x81, 0x0f, 0x41, 0x04, 0x03, 0x0c, 0x11, 0x09, 0xf1, 0x0b, 0x01, + 0xff, 0x45, 0x5c, 0x00, 0x84, 0x0f, 0x01, 0x45, 0x20, 0x07, 0x85, 0x0f, + 0x41, 0x45, 0x5c, 0x00, 0x82, 0x0f, 0x01, 0x45, 0x20, 0x07, 0x83, 0x0f, + 0x41, 0x07, 0x11, 0xd4, 0x92, 0x01, 0x08, 0xd0, 0xcc, 0x01, 0xff, 0xe1, 0x01, 0x0c, 0x81, 0x3a, 0xe5, 0x05, 0x0c, 0x81, 0x19, 0xe9, 0x04, 0x0c, 0x81, 0x10, 0xaf, 0x01, 0xff, 0xe5, 0x08, 0x0c, 0x81, 0x04, 0xf1, 0x39, 0x0c, 0x41, 0xeb, 0x1d, 0x0c, 0x41, 0xf1, 0x37, 0x0c, 0x41, 0xe3, 0x33, @@ -6099,11 +6229,11 @@ static const unsigned char uname2c_tree[218382] = { 0x17, 0x0c, 0x41, 0xe2, 0x0c, 0x0c, 0x01, 0xe7, 0x10, 0x0c, 0x01, 0xeb, 0x1b, 0x0c, 0x01, 0xee, 0x25, 0x0c, 0x81, 0x08, 0xf4, 0x46, 0x0c, 0x01, 0xf9, 0x19, 0x0c, 0x41, 0xe7, 0x2e, 0x0c, 0x41, 0xe1, 0x00, 0x0c, 0x81, - 0x5d, 0x44, 0xfa, 0xeb, 0x48, 0x0c, 0x01, 0xa5, 0x27, 0xe9, 0x03, 0x0c, + 0x5d, 0x44, 0x31, 0xef, 0x48, 0x0c, 0x01, 0xa5, 0x27, 0xe9, 0x03, 0x0c, 0x81, 0x1a, 0xef, 0x06, 0x0c, 0xc1, 0x00, 0xe5, 0x07, 0x0c, 0x81, 0x0c, 0xf0, 0x30, 0x0c, 0x01, 0xf1, 0x38, 0x0c, 0x01, 0xf4, 0x47, 0x0c, 0x41, 0xeb, 0x1c, 0x0c, 0x41, 0xe3, 0x31, 0x0c, 0x01, 0xf1, 0x36, 0x0c, 0x41, - 0xe3, 0x32, 0x0c, 0x01, 0x42, 0x8d, 0x04, 0x21, 0x0c, 0x01, 0xed, 0x22, + 0xe3, 0x32, 0x0c, 0x01, 0x42, 0xb8, 0x04, 0x21, 0x0c, 0x01, 0xed, 0x22, 0x0c, 0x01, 0xae, 0x0e, 0xf0, 0x2f, 0x0c, 0x01, 0x42, 0xa4, 0x02, 0x41, 0x0c, 0x01, 0xfa, 0x14, 0x0c, 0x41, 0xe3, 0x28, 0x0c, 0x01, 0xe7, 0x2d, 0x0c, 0x01, 0xf4, 0x26, 0x0c, 0x01, 0xf9, 0x2a, 0x0c, 0x41, 0xe2, 0x09, @@ -6114,141 +6244,141 @@ static const unsigned char uname2c_tree[218382] = { 0x01, 0xe4, 0x13, 0x0c, 0x01, 0xe7, 0x0f, 0x0c, 0x01, 0xeb, 0x1a, 0x0c, 0x01, 0xec, 0x20, 0x0c, 0x01, 0xee, 0x24, 0x0c, 0x01, 0xf2, 0x3c, 0x0c, 0x01, 0xf3, 0x3e, 0x0c, 0x01, 0xf4, 0x45, 0x0c, 0x01, 0xf9, 0x18, 0x0c, - 0x41, 0x06, 0xf2, 0xd0, 0xea, 0x01, 0x0c, 0xb1, 0x94, 0x01, 0xff, 0x07, - 0xc1, 0x05, 0x1b, 0x03, 0x37, 0x37, 0x01, 0xff, 0x04, 0x8c, 0x05, 0x06, - 0x4e, 0x14, 0x76, 0x7f, 0x0a, 0x41, 0x45, 0x07, 0x4c, 0x7e, 0x0a, 0x01, - 0x43, 0xbf, 0x0a, 0x7d, 0x0a, 0x41, 0xa1, 0xb7, 0x01, 0x44, 0x0a, 0xec, - 0x68, 0x0a, 0x01, 0xa4, 0x97, 0x01, 0x42, 0xa0, 0x19, 0x70, 0x0a, 0x01, + 0x41, 0x06, 0xc5, 0xd3, 0xea, 0x01, 0x0c, 0x9f, 0x96, 0x01, 0xff, 0x07, + 0xec, 0x05, 0x1b, 0x03, 0x07, 0x38, 0x01, 0xff, 0x04, 0xb7, 0x05, 0x06, + 0x4e, 0x83, 0x77, 0x7f, 0x0a, 0x41, 0x45, 0x50, 0x4d, 0x7e, 0x0a, 0x01, + 0x43, 0x0e, 0x0b, 0x7d, 0x0a, 0x41, 0xa1, 0xb7, 0x01, 0x44, 0x41, 0xef, + 0x68, 0x0a, 0x01, 0xa4, 0x97, 0x01, 0x42, 0x0c, 0x1a, 0x70, 0x0a, 0x01, 0xa7, 0x82, 0x01, 0x42, 0xb0, 0x01, 0x60, 0x0a, 0x81, 0x75, 0xab, 0x67, - 0x46, 0x9c, 0xda, 0x61, 0x0a, 0x01, 0x43, 0x89, 0x05, 0x63, 0x0a, 0x01, - 0x43, 0x54, 0x22, 0x6c, 0x0a, 0x01, 0x44, 0xae, 0xc5, 0x64, 0x0a, 0x01, - 0x44, 0xfa, 0x64, 0x67, 0x0a, 0x01, 0xb3, 0x2f, 0xb4, 0x12, 0x43, 0xc0, - 0x88, 0x65, 0x0a, 0x01, 0x44, 0x58, 0x51, 0x7a, 0x0a, 0x01, 0x44, 0x06, - 0xf0, 0x78, 0x0a, 0x41, 0x42, 0x9a, 0x43, 0x69, 0x0a, 0x01, 0x43, 0x39, - 0x25, 0x77, 0x0a, 0x01, 0xa8, 0x01, 0xff, 0x42, 0x9a, 0x43, 0x7b, 0x0a, - 0x01, 0x43, 0x39, 0x25, 0x7c, 0x0a, 0x41, 0xa1, 0x06, 0x43, 0x0e, 0x16, - 0x66, 0x0a, 0x41, 0x43, 0x89, 0xe7, 0x6e, 0x0a, 0x01, 0x44, 0x39, 0xe1, - 0x6f, 0x0a, 0x01, 0xf4, 0x6a, 0x0a, 0x41, 0x43, 0x34, 0x10, 0x6b, 0x0a, - 0x01, 0x44, 0x25, 0xa8, 0x6d, 0x0a, 0x41, 0x42, 0x53, 0x00, 0x62, 0x0a, - 0x41, 0x44, 0xe2, 0xec, 0x76, 0x0a, 0x01, 0x44, 0xa2, 0xa8, 0x74, 0x0a, - 0x41, 0x45, 0xdb, 0x48, 0x75, 0x0a, 0x01, 0x02, 0x22, 0x00, 0x01, 0xff, - 0x43, 0x89, 0xe7, 0x73, 0x0a, 0x01, 0x44, 0xdc, 0x48, 0x79, 0x0a, 0x41, - 0x43, 0x68, 0x00, 0x71, 0x0a, 0x01, 0x42, 0x61, 0x1c, 0x72, 0x0a, 0x41, - 0x51, 0xb3, 0x58, 0x26, 0x0f, 0x01, 0xac, 0x44, 0x07, 0x2f, 0x39, 0x01, - 0xff, 0xa6, 0x31, 0x43, 0xbf, 0x0a, 0x1d, 0x0f, 0x81, 0x24, 0xb4, 0x01, + 0x46, 0x94, 0xdd, 0x61, 0x0a, 0x01, 0x43, 0xb4, 0x05, 0x63, 0x0a, 0x01, + 0x43, 0xdc, 0x22, 0x6c, 0x0a, 0x01, 0x44, 0x4c, 0xc8, 0x64, 0x0a, 0x01, + 0x44, 0x76, 0x66, 0x67, 0x0a, 0x01, 0xb3, 0x2f, 0xb4, 0x12, 0x43, 0x8a, + 0x8a, 0x65, 0x0a, 0x01, 0x44, 0xa1, 0x52, 0x7a, 0x0a, 0x01, 0x44, 0x59, + 0xf3, 0x78, 0x0a, 0x41, 0x42, 0xb7, 0x2d, 0x69, 0x0a, 0x01, 0x43, 0xda, + 0x25, 0x77, 0x0a, 0x01, 0xa8, 0x01, 0xff, 0x42, 0xb7, 0x2d, 0x7b, 0x0a, + 0x01, 0x43, 0xda, 0x25, 0x7c, 0x0a, 0x41, 0xa1, 0x06, 0x43, 0x7a, 0x16, + 0x66, 0x0a, 0x41, 0x43, 0xad, 0xea, 0x6e, 0x0a, 0x01, 0x44, 0x49, 0xe4, + 0x6f, 0x0a, 0x01, 0xf4, 0x6a, 0x0a, 0x41, 0x43, 0x83, 0x10, 0x6b, 0x0a, + 0x01, 0x44, 0x61, 0xaa, 0x6d, 0x0a, 0x41, 0x42, 0x53, 0x00, 0x62, 0x0a, + 0x41, 0x44, 0x21, 0xf0, 0x76, 0x0a, 0x01, 0x44, 0xde, 0xaa, 0x74, 0x0a, + 0x41, 0x45, 0x24, 0x4a, 0x75, 0x0a, 0x01, 0x02, 0x22, 0x00, 0x01, 0xff, + 0x43, 0xad, 0xea, 0x73, 0x0a, 0x01, 0x44, 0x25, 0x4a, 0x79, 0x0a, 0x41, + 0x43, 0x68, 0x00, 0x71, 0x0a, 0x01, 0x42, 0x03, 0x1d, 0x72, 0x0a, 0x41, + 0x51, 0x1e, 0x5a, 0x26, 0x0f, 0x01, 0xac, 0x44, 0x07, 0xff, 0x39, 0x01, + 0xff, 0xa6, 0x31, 0x43, 0x0e, 0x0b, 0x1d, 0x0f, 0x81, 0x24, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0x22, 0x0f, 0x01, 0xa8, 0x0d, 0xb7, 0x01, 0xff, - 0x44, 0x29, 0x1d, 0x23, 0x0f, 0x01, 0xef, 0x1e, 0x0f, 0x41, 0x44, 0x2c, - 0x11, 0x24, 0x0f, 0x01, 0x43, 0x26, 0x01, 0x1f, 0x0f, 0x41, 0x48, 0x21, - 0x11, 0x25, 0x0f, 0x41, 0x43, 0xa7, 0x05, 0x21, 0x0f, 0x01, 0x43, 0xcb, - 0x06, 0x20, 0x0f, 0x41, 0x06, 0xc2, 0x05, 0x06, 0x53, 0xcd, 0x48, 0x27, - 0x0f, 0x41, 0xa1, 0xa8, 0x01, 0x44, 0x0a, 0xec, 0x02, 0x0f, 0x01, 0x06, - 0x3d, 0x2c, 0x65, 0x45, 0xa1, 0xa8, 0x04, 0x0f, 0x01, 0x42, 0xb0, 0x01, - 0x05, 0x0f, 0x81, 0x52, 0x44, 0x8e, 0xed, 0x0b, 0x0f, 0x01, 0x46, 0x9c, - 0xda, 0x0c, 0x0f, 0x01, 0x43, 0x89, 0x05, 0x0d, 0x0f, 0x01, 0x43, 0x54, - 0x22, 0x0e, 0x0f, 0x01, 0x42, 0x6f, 0x02, 0x14, 0x0f, 0x01, 0x50, 0xfa, - 0x64, 0x18, 0x0f, 0x01, 0xb3, 0x18, 0x43, 0x1e, 0xc2, 0x1a, 0x0f, 0x01, - 0x43, 0xc0, 0x88, 0x07, 0x0f, 0x01, 0x44, 0x58, 0x51, 0x0a, 0x0f, 0x01, - 0x45, 0x52, 0x51, 0x08, 0x0f, 0x41, 0xa1, 0x06, 0x43, 0x0e, 0x16, 0x19, - 0x0f, 0x41, 0x43, 0x89, 0xe7, 0x15, 0x0f, 0x01, 0x44, 0x39, 0xe1, 0x11, - 0x0f, 0x41, 0x42, 0x53, 0x00, 0x09, 0x0f, 0x41, 0x45, 0x58, 0xab, 0x01, - 0x0f, 0x01, 0x44, 0x0a, 0xec, 0x03, 0x0f, 0x01, 0x42, 0xb0, 0x01, 0x06, - 0x0f, 0x01, 0x43, 0x54, 0x22, 0x0f, 0x0f, 0x81, 0x1a, 0x45, 0x87, 0xe7, - 0x16, 0x0f, 0x81, 0x0d, 0x43, 0x1e, 0xc2, 0x1b, 0x0f, 0xc1, 0x00, 0x53, - 0x80, 0x46, 0x1c, 0x0f, 0x41, 0x53, 0x80, 0x46, 0x17, 0x0f, 0x41, 0x53, - 0x80, 0x46, 0x10, 0x0f, 0x41, 0xac, 0x06, 0x43, 0xf7, 0x19, 0x12, 0x0f, - 0x41, 0x43, 0x49, 0x3c, 0x00, 0x0f, 0x01, 0x4c, 0xe5, 0x93, 0x13, 0x0f, - 0x41, 0x0b, 0x51, 0x5a, 0xbb, 0x02, 0xb3, 0x01, 0xff, 0x04, 0x6b, 0x08, - 0x0d, 0x4d, 0x25, 0x85, 0xb3, 0xf5, 0xc1, 0x00, 0x65, 0x92, 0x07, 0xb2, - 0xce, 0x41, 0x07, 0x2f, 0x39, 0x80, 0x02, 0x05, 0x2f, 0x03, 0x06, 0x4c, - 0xb3, 0x24, 0xd0, 0x03, 0x41, 0xe1, 0xa0, 0x03, 0x81, 0xdd, 0x01, 0xa2, + 0x44, 0xcb, 0x1d, 0x23, 0x0f, 0x01, 0xef, 0x1e, 0x0f, 0x41, 0x44, 0x7b, + 0x11, 0x24, 0x0f, 0x01, 0x43, 0x26, 0x01, 0x1f, 0x0f, 0x41, 0x48, 0x70, + 0x11, 0x25, 0x0f, 0x41, 0x43, 0xd2, 0x05, 0x21, 0x0f, 0x01, 0x43, 0xf6, + 0x06, 0x20, 0x0f, 0x41, 0x06, 0xed, 0x05, 0x06, 0x53, 0x16, 0x4a, 0x27, + 0x0f, 0x41, 0xa1, 0xa8, 0x01, 0x44, 0x41, 0xef, 0x02, 0x0f, 0x01, 0x06, + 0xf5, 0x2c, 0x65, 0x45, 0xdd, 0xaa, 0x04, 0x0f, 0x01, 0x42, 0xb0, 0x01, + 0x05, 0x0f, 0x81, 0x52, 0x44, 0xcd, 0xf0, 0x0b, 0x0f, 0x01, 0x46, 0x94, + 0xdd, 0x0c, 0x0f, 0x01, 0x43, 0xb4, 0x05, 0x0d, 0x0f, 0x01, 0x43, 0xdc, + 0x22, 0x0e, 0x0f, 0x01, 0x42, 0x6f, 0x02, 0x14, 0x0f, 0x01, 0x50, 0x76, + 0x66, 0x18, 0x0f, 0x01, 0xb3, 0x18, 0x43, 0xa4, 0xc4, 0x1a, 0x0f, 0x01, + 0x43, 0x8a, 0x8a, 0x07, 0x0f, 0x01, 0x44, 0xa1, 0x52, 0x0a, 0x0f, 0x01, + 0x45, 0x9b, 0x52, 0x08, 0x0f, 0x41, 0xa1, 0x06, 0x43, 0x7a, 0x16, 0x19, + 0x0f, 0x41, 0x43, 0xad, 0xea, 0x15, 0x0f, 0x01, 0x44, 0x49, 0xe4, 0x11, + 0x0f, 0x41, 0x42, 0x53, 0x00, 0x09, 0x0f, 0x41, 0x45, 0xb2, 0xad, 0x01, + 0x0f, 0x01, 0x44, 0x41, 0xef, 0x03, 0x0f, 0x01, 0x42, 0xb0, 0x01, 0x06, + 0x0f, 0x01, 0x43, 0xdc, 0x22, 0x0f, 0x0f, 0x81, 0x1a, 0x45, 0xab, 0xea, + 0x16, 0x0f, 0x81, 0x0d, 0x43, 0xa4, 0xc4, 0x1b, 0x0f, 0xc1, 0x00, 0x53, + 0xc9, 0x47, 0x1c, 0x0f, 0x41, 0x53, 0xc9, 0x47, 0x17, 0x0f, 0x41, 0x53, + 0xc9, 0x47, 0x10, 0x0f, 0x41, 0xac, 0x06, 0x43, 0x7e, 0x1a, 0x12, 0x0f, + 0x41, 0x43, 0x19, 0x3d, 0x00, 0x0f, 0x01, 0x4c, 0xbb, 0x95, 0x13, 0x0f, + 0x41, 0x0b, 0xbc, 0x5b, 0xbb, 0x02, 0xb3, 0x01, 0xff, 0x04, 0x96, 0x08, + 0x0d, 0x4d, 0xe2, 0x86, 0xb3, 0xf5, 0xc1, 0x00, 0x65, 0xbd, 0x07, 0xb2, + 0xce, 0x41, 0x07, 0xff, 0x39, 0x80, 0x02, 0x05, 0x5a, 0x03, 0x06, 0x4c, + 0x3b, 0x25, 0xd0, 0x03, 0x41, 0xe1, 0xa0, 0x03, 0x81, 0xdd, 0x01, 0xa2, 0xc9, 0x01, 0x42, 0x37, 0x00, 0xa8, 0x03, 0x01, 0xa4, 0xa6, 0x01, 0x42, - 0xe1, 0x07, 0xb3, 0x03, 0x01, 0xa7, 0x95, 0x01, 0x42, 0x22, 0x00, 0xc3, + 0x0c, 0x08, 0xb3, 0x03, 0x01, 0xa7, 0x95, 0x01, 0x42, 0x22, 0x00, 0xc3, 0x03, 0x01, 0xe9, 0xa1, 0x03, 0x01, 0xaa, 0x80, 0x01, 0xab, 0x76, 0x42, - 0x74, 0x00, 0xbe, 0x03, 0x01, 0xad, 0x62, 0xae, 0x58, 0x42, 0x6c, 0x09, + 0x74, 0x00, 0xbe, 0x03, 0x01, 0xad, 0x62, 0xae, 0x58, 0x42, 0xbb, 0x09, 0xb1, 0x03, 0x01, 0xb2, 0x48, 0xb3, 0x36, 0xb4, 0x26, 0xf5, 0xa2, 0x03, - 0x01, 0xb6, 0x18, 0xb8, 0x0c, 0x42, 0x34, 0x22, 0xb9, 0x03, 0x01, 0x42, - 0x59, 0x00, 0xc0, 0x03, 0x41, 0xe1, 0xa7, 0x03, 0x01, 0x4b, 0x64, 0xa0, + 0x01, 0xb6, 0x18, 0xb8, 0x0c, 0x42, 0xbc, 0x22, 0xb9, 0x03, 0x01, 0x42, + 0x59, 0x00, 0xc0, 0x03, 0x41, 0xe1, 0xa7, 0x03, 0x01, 0x4b, 0x8a, 0xa2, 0xcb, 0x03, 0x41, 0xe1, 0xba, 0x03, 0x01, 0xe9, 0xbb, 0x03, 0x41, 0xe1, 0xab, 0x03, 0x01, 0x42, 0x22, 0x00, 0xb0, 0x03, 0x01, 0xf5, 0xac, 0x03, 0x41, 0xe1, 0xbf, 0x03, 0x01, 0x42, 0x22, 0x00, 0xc1, 0x03, 0x01, 0x42, - 0x15, 0x06, 0xc2, 0x03, 0x41, 0xe1, 0xbc, 0x03, 0x01, 0xf5, 0xbd, 0x03, + 0x40, 0x06, 0xc2, 0x03, 0x41, 0xe1, 0xbc, 0x03, 0x01, 0xf5, 0xbd, 0x03, 0x41, 0xe1, 0xb4, 0x03, 0x01, 0xf5, 0xb5, 0x03, 0x41, 0xe1, 0xb6, 0x03, 0x01, 0xe9, 0xb7, 0x03, 0x01, 0xf5, 0xb8, 0x03, 0x41, 0xe1, 0xa3, 0x03, 0x01, 0xf5, 0xa4, 0x03, 0x41, 0xe1, 0xa9, 0x03, 0x01, 0xe9, 0xaa, 0x03, 0x41, 0xe1, 0xa5, 0x03, 0x01, 0xf5, 0xa6, 0x03, 0x41, 0xe1, 0xad, 0x03, - 0x81, 0x08, 0xe9, 0xae, 0x03, 0x01, 0xf5, 0xaf, 0x03, 0x41, 0x47, 0xcf, - 0xce, 0xcc, 0x03, 0xc1, 0x00, 0x42, 0x34, 0xf0, 0xcd, 0x03, 0x41, 0xe1, - 0xb2, 0x03, 0x81, 0x06, 0x46, 0xfc, 0xdd, 0xcf, 0x03, 0x41, 0x42, 0x24, - 0x02, 0xce, 0x03, 0x41, 0x49, 0x02, 0xbe, 0xc8, 0x03, 0xc1, 0x00, 0x42, - 0x34, 0xf0, 0xc9, 0x03, 0x01, 0x42, 0x22, 0x00, 0xca, 0x03, 0x41, 0x47, - 0x22, 0x11, 0xd5, 0x03, 0x01, 0x43, 0xbf, 0x0a, 0xd1, 0x03, 0x01, 0xb4, + 0x81, 0x08, 0xe9, 0xae, 0x03, 0x01, 0xf5, 0xaf, 0x03, 0x41, 0x47, 0xa9, + 0xd1, 0xcc, 0x03, 0xc1, 0x00, 0x42, 0x87, 0xf3, 0xcd, 0x03, 0x41, 0xe1, + 0xb2, 0x03, 0x81, 0x06, 0x46, 0x0c, 0xe1, 0xcf, 0x03, 0x41, 0x42, 0x24, + 0x02, 0xce, 0x03, 0x41, 0x49, 0x89, 0xc0, 0xc8, 0x03, 0xc1, 0x00, 0x42, + 0x87, 0xf3, 0xc9, 0x03, 0x01, 0x42, 0x22, 0x00, 0xca, 0x03, 0x41, 0x47, + 0x71, 0x11, 0xd5, 0x03, 0x01, 0x43, 0x0e, 0x0b, 0xd1, 0x03, 0x01, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0xd3, 0x03, 0x01, 0xb7, 0x01, 0xff, 0x44, - 0x29, 0x1d, 0xd4, 0x03, 0x01, 0xef, 0xd2, 0x03, 0x41, 0x42, 0x1a, 0x00, - 0x50, 0x03, 0x01, 0x43, 0x37, 0x35, 0x51, 0x03, 0x01, 0x45, 0x14, 0xe2, + 0xcb, 0x1d, 0xd4, 0x03, 0x01, 0xef, 0xd2, 0x03, 0x41, 0x42, 0x1a, 0x00, + 0x50, 0x03, 0x01, 0x43, 0x07, 0x36, 0x51, 0x03, 0x01, 0x45, 0x24, 0xe5, 0x64, 0x03, 0x01, 0xa4, 0xba, 0x01, 0xe5, 0x54, 0x03, 0x81, 0xb0, 0x01, - 0x43, 0xf1, 0x49, 0x52, 0x03, 0x01, 0x42, 0x22, 0x00, 0x6c, 0x03, 0x01, - 0xe9, 0x59, 0x03, 0x81, 0x96, 0x01, 0x44, 0xae, 0xed, 0x5a, 0x03, 0x01, - 0x43, 0x75, 0x42, 0x5b, 0x03, 0x01, 0x45, 0x75, 0xe5, 0x5c, 0x03, 0x01, - 0x45, 0xe8, 0xe5, 0x5d, 0x03, 0x01, 0xef, 0x69, 0x03, 0x81, 0x75, 0x44, - 0xba, 0xee, 0x5f, 0x03, 0x01, 0x43, 0xb8, 0x2e, 0x60, 0x03, 0x01, 0xb3, + 0x43, 0x3a, 0x4b, 0x52, 0x03, 0x01, 0x42, 0x22, 0x00, 0x6c, 0x03, 0x01, + 0xe9, 0x59, 0x03, 0x81, 0x96, 0x01, 0x44, 0xed, 0xf0, 0x5a, 0x03, 0x01, + 0x43, 0x82, 0x43, 0x5b, 0x03, 0x01, 0x45, 0x8f, 0xe8, 0x5c, 0x03, 0x01, + 0x45, 0x07, 0xe9, 0x5d, 0x03, 0x01, 0xef, 0x69, 0x03, 0x81, 0x75, 0x44, + 0x01, 0xf2, 0x5f, 0x03, 0x01, 0x43, 0x9e, 0x2f, 0x60, 0x03, 0x01, 0xb3, 0x53, 0xb4, 0x45, 0xf5, 0x63, 0x03, 0x01, 0xb6, 0x33, 0xb9, 0x0f, 0xba, - 0x01, 0xff, 0x43, 0x6b, 0x18, 0x57, 0x03, 0x01, 0x43, 0x9d, 0xd9, 0x55, + 0x01, 0xff, 0x43, 0xd7, 0x18, 0x57, 0x03, 0x01, 0x43, 0x95, 0xdc, 0x55, 0x03, 0x41, 0xe1, 0x74, 0x03, 0x81, 0x19, 0x42, 0x33, 0x00, 0x6f, 0x03, - 0x81, 0x0a, 0x42, 0x34, 0x0a, 0x67, 0x03, 0x01, 0xf5, 0x73, 0x03, 0x41, + 0x81, 0x0a, 0x42, 0x83, 0x0a, 0x67, 0x03, 0x01, 0xf5, 0x73, 0x03, 0x41, 0xe9, 0x70, 0x03, 0x01, 0xf5, 0x68, 0x03, 0x41, 0xf4, 0x71, 0x03, 0x41, - 0x42, 0x33, 0x00, 0x6e, 0x03, 0x01, 0x43, 0x25, 0xe2, 0x5e, 0x03, 0x41, - 0x42, 0x05, 0x07, 0x62, 0x03, 0x01, 0x43, 0x0b, 0xcd, 0x6d, 0x03, 0x41, - 0xa8, 0x06, 0x42, 0xb1, 0x27, 0x61, 0x03, 0x41, 0x45, 0x23, 0xe2, 0x66, - 0x03, 0x01, 0x43, 0x25, 0xe2, 0x65, 0x03, 0x41, 0xef, 0x6a, 0x03, 0x41, + 0x42, 0x33, 0x00, 0x6e, 0x03, 0x01, 0x43, 0x30, 0xe5, 0x5e, 0x03, 0x41, + 0x42, 0x56, 0x07, 0x62, 0x03, 0x01, 0x43, 0xde, 0xcf, 0x6d, 0x03, 0x41, + 0xa8, 0x06, 0x42, 0x52, 0x28, 0x61, 0x03, 0x41, 0x45, 0x2e, 0xe5, 0x66, + 0x03, 0x01, 0x43, 0x30, 0xe5, 0x65, 0x03, 0x41, 0xef, 0x6a, 0x03, 0x41, 0xe1, 0x75, 0x03, 0x01, 0xe5, 0x72, 0x03, 0x41, 0xe6, 0x6b, 0x03, 0x41, - 0x42, 0x9d, 0x01, 0x53, 0x03, 0x01, 0xba, 0x01, 0xff, 0x43, 0x9d, 0xd9, - 0x56, 0x03, 0x01, 0x43, 0xbc, 0x05, 0x58, 0x03, 0x41, 0x07, 0xc1, 0x05, - 0x1a, 0x07, 0x2f, 0x39, 0x01, 0xff, 0x43, 0xbf, 0x0a, 0x9d, 0x0a, 0x01, - 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0x9e, 0x0a, 0x01, 0x45, 0xde, 0x2b, - 0x9f, 0x0a, 0x41, 0xa1, 0xb0, 0x01, 0x43, 0xe5, 0x8a, 0x88, 0x0a, 0x01, - 0x02, 0xa1, 0x10, 0x9d, 0x01, 0x03, 0xb7, 0xd2, 0x8c, 0x01, 0x43, 0x85, - 0xb6, 0x90, 0x0a, 0x01, 0xa7, 0x78, 0xa8, 0x6a, 0xab, 0x5c, 0x43, 0xb0, - 0x00, 0x81, 0x0a, 0x01, 0x44, 0x7a, 0x20, 0x83, 0x0a, 0x01, 0x44, 0xc4, - 0x44, 0x8c, 0x0a, 0x01, 0x43, 0xf4, 0x13, 0x84, 0x0a, 0x01, 0x43, 0xee, - 0x50, 0x87, 0x0a, 0x01, 0x43, 0x30, 0x14, 0x8e, 0x0a, 0x01, 0xb4, 0x1b, - 0x43, 0xc0, 0x88, 0x85, 0x0a, 0x01, 0x43, 0x4d, 0x00, 0x9a, 0x0a, 0x01, + 0x42, 0x9d, 0x01, 0x53, 0x03, 0x01, 0xba, 0x01, 0xff, 0x43, 0x95, 0xdc, + 0x56, 0x03, 0x01, 0x43, 0xe7, 0x05, 0x58, 0x03, 0x41, 0x07, 0xec, 0x05, + 0x1a, 0x07, 0xff, 0x39, 0x01, 0xff, 0x43, 0x0e, 0x0b, 0x9d, 0x0a, 0x01, + 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0x9e, 0x0a, 0x01, 0x45, 0x7f, 0x2c, + 0x9f, 0x0a, 0x41, 0xa1, 0xb0, 0x01, 0x43, 0xa3, 0x8c, 0x88, 0x0a, 0x01, + 0x02, 0xf0, 0x10, 0x9d, 0x01, 0x03, 0x8a, 0xd5, 0x8c, 0x01, 0x43, 0xd6, + 0xb8, 0x90, 0x0a, 0x01, 0xa7, 0x78, 0xa8, 0x6a, 0xab, 0x5c, 0x43, 0xb0, + 0x00, 0x81, 0x0a, 0x01, 0x44, 0x1c, 0x21, 0x83, 0x0a, 0x01, 0x44, 0xf9, + 0x45, 0x8c, 0x0a, 0x01, 0x43, 0x43, 0x14, 0x84, 0x0a, 0x01, 0x43, 0x37, + 0x52, 0x87, 0x0a, 0x01, 0x43, 0x7f, 0x14, 0x8e, 0x0a, 0x01, 0xb4, 0x1b, + 0x43, 0x8a, 0x8a, 0x85, 0x0a, 0x01, 0x43, 0x4d, 0x00, 0x9a, 0x0a, 0x01, 0x02, 0x59, 0x00, 0x01, 0xff, 0xe8, 0x9c, 0x0a, 0x01, 0x42, 0x9e, 0x01, - 0x98, 0x0a, 0x41, 0x42, 0xc9, 0x09, 0x97, 0x0a, 0x01, 0x42, 0x4e, 0x00, + 0x98, 0x0a, 0x41, 0x42, 0x18, 0x0a, 0x97, 0x0a, 0x01, 0x42, 0x4e, 0x00, 0x89, 0x0a, 0x01, 0xa8, 0x01, 0xff, 0x42, 0x13, 0x00, 0x99, 0x0a, 0x01, - 0x42, 0x4e, 0x00, 0x9b, 0x0a, 0x41, 0x42, 0xf5, 0x13, 0x8b, 0x0a, 0x01, - 0x43, 0x84, 0x20, 0x8d, 0x0a, 0x41, 0x42, 0xc9, 0x09, 0x82, 0x0a, 0x01, - 0x42, 0x4e, 0x00, 0x80, 0x0a, 0x41, 0x43, 0xdf, 0x17, 0x94, 0x0a, 0x01, - 0x44, 0x4b, 0x9a, 0x96, 0x0a, 0x41, 0xd1, 0x8a, 0x0a, 0x01, 0xd2, 0x86, + 0x42, 0x4e, 0x00, 0x9b, 0x0a, 0x41, 0x42, 0x44, 0x14, 0x8b, 0x0a, 0x01, + 0x43, 0x26, 0x21, 0x8d, 0x0a, 0x41, 0x42, 0x18, 0x0a, 0x82, 0x0a, 0x01, + 0x42, 0x4e, 0x00, 0x80, 0x0a, 0x41, 0x43, 0x4b, 0x18, 0x94, 0x0a, 0x01, + 0x44, 0x66, 0x9c, 0x96, 0x0a, 0x41, 0xd1, 0x8a, 0x0a, 0x01, 0xd2, 0x86, 0x0a, 0x01, 0xd3, 0x8f, 0x0a, 0x41, 0xe4, 0x93, 0x0a, 0x01, 0xec, 0x95, 0x0a, 0x41, 0x42, 0x9e, 0x01, 0x92, 0x0a, 0x01, 0x43, 0x68, 0x00, 0x91, - 0x0a, 0x41, 0x07, 0xc1, 0x05, 0x21, 0x08, 0xb5, 0x5b, 0x01, 0xff, 0x02, - 0xc8, 0x02, 0x0c, 0x43, 0xbf, 0x0a, 0x20, 0x03, 0x01, 0x43, 0xb0, 0x06, - 0x22, 0x03, 0x41, 0x43, 0x09, 0x4c, 0x23, 0x03, 0x01, 0x42, 0x32, 0x00, - 0x21, 0x03, 0x41, 0xe1, 0x00, 0x03, 0x01, 0x42, 0x8c, 0x05, 0x01, 0x03, - 0x01, 0x43, 0x1e, 0x14, 0x1c, 0x03, 0x01, 0x42, 0x04, 0x00, 0x03, 0x03, + 0x0a, 0x41, 0x07, 0xec, 0x05, 0x21, 0x08, 0x20, 0x5d, 0x01, 0xff, 0x02, + 0xf3, 0x02, 0x0c, 0x43, 0x0e, 0x0b, 0x20, 0x03, 0x01, 0x43, 0xdb, 0x06, + 0x22, 0x03, 0x41, 0x43, 0x52, 0x4d, 0x23, 0x03, 0x01, 0x42, 0x32, 0x00, + 0x21, 0x03, 0x41, 0xe1, 0x00, 0x03, 0x01, 0x42, 0xb7, 0x05, 0x01, 0x03, + 0x01, 0x43, 0x6d, 0x14, 0x1c, 0x03, 0x01, 0x42, 0x04, 0x00, 0x03, 0x03, 0x01, 0xe5, 0x04, 0x03, 0x81, 0x6e, 0x42, 0xb0, 0x01, 0x07, 0x03, 0x01, - 0xe9, 0x09, 0x03, 0x81, 0x5f, 0xab, 0x4b, 0x4c, 0x09, 0x91, 0x2e, 0x03, + 0xe9, 0x09, 0x03, 0x81, 0x5f, 0xab, 0x4b, 0x4c, 0xbb, 0x92, 0x2e, 0x03, 0x01, 0xef, 0x0f, 0x03, 0x01, 0xb0, 0x35, 0xb3, 0x27, 0xb4, 0x1b, 0xf5, 0x16, 0x03, 0x81, 0x12, 0x42, 0x32, 0x00, 0x05, 0x03, 0x01, 0x42, 0x4d, - 0x00, 0x2d, 0x03, 0x01, 0x42, 0xfc, 0x09, 0x06, 0x03, 0x41, 0xf5, 0x1e, + 0x00, 0x2d, 0x03, 0x01, 0x42, 0x4b, 0x0a, 0x06, 0x03, 0x41, 0xf5, 0x1e, 0x03, 0x41, 0xe5, 0x15, 0x03, 0x01, 0x42, 0xb0, 0x01, 0x08, 0x03, 0x41, - 0x42, 0xb0, 0x01, 0x11, 0x03, 0x01, 0x4b, 0xee, 0x9e, 0x2f, 0x03, 0x41, + 0x42, 0xb0, 0x01, 0x11, 0x03, 0x01, 0x4b, 0x1f, 0xa1, 0x2f, 0x03, 0x41, 0xe5, 0x10, 0x03, 0x01, 0x42, 0xb0, 0x01, 0x18, 0x03, 0x41, 0xe1, 0x0a, 0x03, 0x01, 0xe5, 0x02, 0x03, 0x01, 0x42, 0xb0, 0x01, 0x19, 0x03, 0x01, 0xf5, 0x12, 0x03, 0x41, 0xe9, 0x1d, 0x03, 0x41, 0xe6, 0x1a, 0x03, 0x01, 0x42, 0x6e, 0x00, 0x17, 0x03, 0x01, 0xec, 0x0b, 0x03, 0x01, 0xed, 0x0c, 0x03, 0x01, 0xee, 0x0d, 0x03, 0x01, 0xf2, 0x13, 0x03, 0x81, 0x0d, 0xf3, 0x14, 0x03, 0xc1, 0x00, 0xe8, 0x0e, 0x03, 0x01, 0xf3, 0x1f, 0x03, 0x41, - 0xf3, 0x1b, 0x03, 0x41, 0x0f, 0xb9, 0x05, 0xaf, 0x02, 0x07, 0x2f, 0x39, - 0xfe, 0x01, 0x0d, 0x4b, 0x08, 0x01, 0xff, 0xe1, 0xc0, 0x0c, 0x81, 0xdf, - 0x01, 0x47, 0x2b, 0xcd, 0xca, 0x0c, 0x01, 0xe5, 0xc9, 0x0c, 0x81, 0x51, - 0xe9, 0xd0, 0x0c, 0x81, 0x48, 0x0b, 0xe6, 0x9d, 0x38, 0xef, 0xdb, 0x0c, - 0x81, 0x29, 0x0a, 0x5f, 0xae, 0x19, 0x48, 0x32, 0xc8, 0xe3, 0x0c, 0x01, - 0xf5, 0xea, 0x0c, 0xc1, 0x00, 0x42, 0x12, 0x25, 0xd5, 0x0c, 0x01, 0xf3, - 0xf2, 0x0c, 0x01, 0xf5, 0xeb, 0x0c, 0x41, 0x42, 0x17, 0x50, 0xde, 0x0c, - 0x01, 0x42, 0x87, 0x13, 0xed, 0x0c, 0x41, 0x42, 0x27, 0x01, 0xdf, 0x0c, - 0x01, 0xef, 0xdc, 0x0c, 0x41, 0x42, 0x17, 0x50, 0xdd, 0x0c, 0x01, 0x42, - 0x87, 0x13, 0xec, 0x0c, 0x41, 0xe9, 0xd1, 0x0c, 0x41, 0xe2, 0xc2, 0x0c, + 0xf3, 0x1b, 0x03, 0x41, 0x0f, 0xe4, 0x05, 0xaf, 0x02, 0x07, 0xff, 0x39, + 0xfe, 0x01, 0x0d, 0x76, 0x08, 0x01, 0xff, 0xe1, 0xc0, 0x0c, 0x81, 0xdf, + 0x01, 0x47, 0xfe, 0xcf, 0xca, 0x0c, 0x01, 0xe5, 0xc9, 0x0c, 0x81, 0x51, + 0xe9, 0xd0, 0x0c, 0x81, 0x48, 0x0b, 0x17, 0xa0, 0x38, 0xef, 0xdb, 0x0c, + 0x81, 0x29, 0x0a, 0xaf, 0xb0, 0x19, 0x48, 0xe0, 0xca, 0xe3, 0x0c, 0x01, + 0xf5, 0xea, 0x0c, 0xc1, 0x00, 0x42, 0xb3, 0x25, 0xd5, 0x0c, 0x01, 0xf3, + 0xf2, 0x0c, 0x01, 0xf5, 0xeb, 0x0c, 0x41, 0x42, 0x60, 0x51, 0xde, 0x0c, + 0x01, 0x42, 0xd6, 0x13, 0xed, 0x0c, 0x41, 0x42, 0x27, 0x01, 0xdf, 0x0c, + 0x01, 0xef, 0xdc, 0x0c, 0x41, 0x42, 0x60, 0x51, 0xdd, 0x0c, 0x01, 0x42, + 0xd6, 0x13, 0xec, 0x0c, 0x41, 0xe9, 0xd1, 0x0c, 0x41, 0xe2, 0xc2, 0x0c, 0x01, 0xe3, 0xc4, 0x0c, 0x81, 0x72, 0xe4, 0xc7, 0x0c, 0x01, 0xe5, 0xcb, 0x0c, 0x01, 0xe6, 0xcc, 0x0c, 0x01, 0xe7, 0xcd, 0x0c, 0x81, 0x5d, 0xe8, 0xcf, 0x0c, 0x01, 0xea, 0xd2, 0x0c, 0x01, 0xeb, 0xd3, 0x0c, 0x01, 0xec, @@ -6257,22 +6387,22 @@ static const unsigned char uname2c_tree[218382] = { 0x0c, 0x81, 0x16, 0xf4, 0xe6, 0x0c, 0x81, 0x0d, 0xf6, 0xee, 0x0c, 0x01, 0xfa, 0xef, 0x0c, 0xc1, 0x00, 0xf3, 0xf0, 0x0c, 0x41, 0xf9, 0xe8, 0x0c, 0x41, 0xfa, 0xe5, 0x0c, 0x41, 0xe3, 0xc5, 0x0c, 0x01, 0xf4, 0xe7, 0x0c, - 0x81, 0x04, 0xf9, 0xda, 0x0c, 0x41, 0x4c, 0x01, 0x8a, 0xf1, 0x0c, 0x41, + 0x81, 0x04, 0xf9, 0xda, 0x0c, 0x41, 0x4c, 0xcb, 0x8b, 0xf1, 0x0c, 0x41, 0xf0, 0xe1, 0x0c, 0x41, 0xf9, 0xd7, 0x0c, 0x41, 0xf9, 0xce, 0x0c, 0x41, 0xe8, 0xe9, 0x0c, 0x01, 0xf3, 0xc6, 0x0c, 0x41, 0xe1, 0xc1, 0x0c, 0x01, - 0xeb, 0xd4, 0x0c, 0x01, 0x42, 0x8b, 0x05, 0xc3, 0x0c, 0x01, 0x42, 0x1b, - 0x00, 0xc8, 0x0c, 0x41, 0x02, 0xc8, 0x02, 0x1c, 0x43, 0xbf, 0x0a, 0xfa, - 0x0c, 0x81, 0x06, 0x43, 0xb0, 0x06, 0xfc, 0x0c, 0x41, 0x80, 0x01, 0xff, - 0x47, 0x22, 0x11, 0xfe, 0x0c, 0x01, 0x48, 0xd5, 0x5c, 0xff, 0x0c, 0x41, - 0x43, 0x09, 0x4c, 0xfd, 0x0c, 0x01, 0x42, 0x32, 0x00, 0xfb, 0x0c, 0x41, - 0xe1, 0x80, 0x0c, 0x81, 0xdf, 0x01, 0x47, 0x2b, 0xcd, 0x8a, 0x0c, 0x01, - 0xe5, 0x89, 0x0c, 0x81, 0x51, 0xe9, 0x90, 0x0c, 0x81, 0x48, 0x0b, 0xe6, - 0x9d, 0x38, 0xef, 0x9b, 0x0c, 0x81, 0x29, 0x0a, 0x5f, 0xae, 0x19, 0x48, - 0x32, 0xc8, 0xa3, 0x0c, 0x01, 0xf5, 0xaa, 0x0c, 0xc1, 0x00, 0x42, 0x12, + 0xeb, 0xd4, 0x0c, 0x01, 0x42, 0xb6, 0x05, 0xc3, 0x0c, 0x01, 0x42, 0x1b, + 0x00, 0xc8, 0x0c, 0x41, 0x02, 0xf3, 0x02, 0x1c, 0x43, 0x0e, 0x0b, 0xfa, + 0x0c, 0x81, 0x06, 0x43, 0xdb, 0x06, 0xfc, 0x0c, 0x41, 0x80, 0x01, 0xff, + 0x47, 0x71, 0x11, 0xfe, 0x0c, 0x01, 0x48, 0x40, 0x5e, 0xff, 0x0c, 0x41, + 0x43, 0x52, 0x4d, 0xfd, 0x0c, 0x01, 0x42, 0x32, 0x00, 0xfb, 0x0c, 0x41, + 0xe1, 0x80, 0x0c, 0x81, 0xdf, 0x01, 0x47, 0xfe, 0xcf, 0x8a, 0x0c, 0x01, + 0xe5, 0x89, 0x0c, 0x81, 0x51, 0xe9, 0x90, 0x0c, 0x81, 0x48, 0x0b, 0x17, + 0xa0, 0x38, 0xef, 0x9b, 0x0c, 0x81, 0x29, 0x0a, 0xaf, 0xb0, 0x19, 0x48, + 0xe0, 0xca, 0xa3, 0x0c, 0x01, 0xf5, 0xaa, 0x0c, 0xc1, 0x00, 0x42, 0xb3, 0x25, 0x95, 0x0c, 0x01, 0xf3, 0xb2, 0x0c, 0x01, 0xf5, 0xab, 0x0c, 0x41, - 0x42, 0x17, 0x50, 0x9e, 0x0c, 0x01, 0x42, 0x87, 0x13, 0xad, 0x0c, 0x41, - 0x42, 0x27, 0x01, 0x9f, 0x0c, 0x01, 0xef, 0x9c, 0x0c, 0x41, 0x42, 0x17, - 0x50, 0x9d, 0x0c, 0x01, 0x42, 0x87, 0x13, 0xac, 0x0c, 0x41, 0xe9, 0x91, + 0x42, 0x60, 0x51, 0x9e, 0x0c, 0x01, 0x42, 0xd6, 0x13, 0xad, 0x0c, 0x41, + 0x42, 0x27, 0x01, 0x9f, 0x0c, 0x01, 0xef, 0x9c, 0x0c, 0x41, 0x42, 0x60, + 0x51, 0x9d, 0x0c, 0x01, 0x42, 0xd6, 0x13, 0xac, 0x0c, 0x41, 0xe9, 0x91, 0x0c, 0x41, 0xe2, 0x82, 0x0c, 0x01, 0xe3, 0x84, 0x0c, 0x81, 0x72, 0xe4, 0x87, 0x0c, 0x01, 0xe5, 0x8b, 0x0c, 0x01, 0xe6, 0x8c, 0x0c, 0x01, 0xe7, 0x8d, 0x0c, 0x81, 0x5d, 0xe8, 0x8f, 0x0c, 0x01, 0xea, 0x92, 0x0c, 0x01, @@ -6282,4093 +6412,4104 @@ static const unsigned char uname2c_tree[218382] = { 0x0d, 0xf6, 0xae, 0x0c, 0x01, 0xfa, 0xaf, 0x0c, 0xc1, 0x00, 0xf3, 0xb0, 0x0c, 0x41, 0xf9, 0xa8, 0x0c, 0x41, 0xfa, 0xa5, 0x0c, 0x41, 0xe3, 0x85, 0x0c, 0x01, 0xf4, 0xa7, 0x0c, 0x81, 0x04, 0xf9, 0x9a, 0x0c, 0x41, 0x4c, - 0x01, 0x8a, 0xb1, 0x0c, 0x41, 0xf0, 0xa1, 0x0c, 0x41, 0xf9, 0x97, 0x0c, + 0xcb, 0x8b, 0xb1, 0x0c, 0x41, 0xf0, 0xa1, 0x0c, 0x41, 0xf9, 0x97, 0x0c, 0x41, 0xf9, 0x8e, 0x0c, 0x41, 0xe8, 0xa9, 0x0c, 0x01, 0xf3, 0x86, 0x0c, - 0x41, 0xe1, 0x81, 0x0c, 0x01, 0xeb, 0x94, 0x0c, 0x01, 0x42, 0x8b, 0x05, - 0x83, 0x0c, 0x01, 0x42, 0x1b, 0x00, 0x88, 0x0c, 0x41, 0x49, 0x54, 0xb7, - 0xe2, 0x6f, 0x01, 0x4e, 0xb6, 0x1f, 0xe3, 0x6f, 0x41, 0x06, 0xa8, 0xd7, - 0xf5, 0x01, 0x05, 0xe4, 0x15, 0x01, 0xff, 0x51, 0x93, 0x56, 0xff, 0xe5, - 0x01, 0x06, 0xc4, 0x06, 0xa3, 0x01, 0x07, 0xc1, 0x05, 0x17, 0x05, 0x2f, - 0x03, 0x01, 0xff, 0x47, 0xc8, 0xce, 0xf0, 0xe5, 0x01, 0x44, 0x4a, 0xed, - 0xef, 0xe5, 0x01, 0x42, 0x57, 0x16, 0xee, 0xe5, 0x41, 0xe1, 0xd6, 0xe5, + 0x41, 0xe1, 0x81, 0x0c, 0x01, 0xeb, 0x94, 0x0c, 0x01, 0x42, 0xb6, 0x05, + 0x83, 0x0c, 0x01, 0x42, 0x1b, 0x00, 0x88, 0x0c, 0x41, 0x49, 0xb7, 0xb9, + 0xe2, 0x6f, 0x01, 0x4e, 0x58, 0x20, 0xe3, 0x6f, 0x41, 0x06, 0x8e, 0xda, + 0xf5, 0x01, 0x05, 0x50, 0x16, 0x01, 0xff, 0x51, 0xdc, 0x57, 0xff, 0xe5, + 0x01, 0x06, 0xef, 0x06, 0xa3, 0x01, 0x07, 0xec, 0x05, 0x17, 0x05, 0x5a, + 0x03, 0x01, 0xff, 0x47, 0xa2, 0xd1, 0xf0, 0xe5, 0x01, 0x44, 0x89, 0xf0, + 0xef, 0xe5, 0x01, 0x42, 0xc3, 0x16, 0xee, 0xe5, 0x41, 0xe1, 0xd6, 0xe5, 0x81, 0x6f, 0xe5, 0xe8, 0xe5, 0x81, 0x54, 0xe9, 0xdc, 0xe5, 0x81, 0x3a, 0xef, 0xd0, 0xe5, 0x81, 0x1d, 0xf5, 0xe2, 0xe5, 0xc1, 0x00, 0x42, 0x7f, 0x02, 0xe4, 0xe5, 0x01, 0xea, 0xe5, 0xe5, 0x01, 0xeb, 0xe3, 0xe5, 0x01, - 0x42, 0xf6, 0x19, 0xe6, 0xe5, 0x01, 0xf2, 0xe7, 0xe5, 0x41, 0xed, 0xd1, + 0x42, 0x7d, 0x1a, 0xe6, 0xe5, 0x01, 0xf2, 0xe7, 0xe5, 0x41, 0xed, 0xd1, 0xe5, 0x01, 0x42, 0x1d, 0x01, 0xd2, 0xe5, 0x01, 0xef, 0xd4, 0xe5, 0x01, 0x42, 0xcf, 0x00, 0xd3, 0xe5, 0x01, 0xf9, 0xd5, 0xe5, 0x41, 0xe4, 0xe0, 0xe5, 0x01, 0xee, 0xe1, 0xe5, 0x01, 0xf0, 0xde, 0xe5, 0x01, 0xf4, 0xdd, 0xe5, 0xc1, 0x00, 0xf4, 0xdf, 0xe5, 0x41, 0xe3, 0xeb, 0xe5, 0x01, 0xe7, - 0xed, 0xe5, 0x01, 0xe8, 0xea, 0xe5, 0x01, 0x42, 0xac, 0x1e, 0xec, 0xe5, + 0xed, 0xe5, 0x01, 0xe8, 0xea, 0xe5, 0x01, 0x42, 0x4e, 0x1f, 0xec, 0xe5, 0x01, 0xf3, 0xe9, 0xe5, 0x41, 0xe2, 0xd8, 0xe5, 0x01, 0xe4, 0xd7, 0xe5, 0x01, 0xe8, 0xd9, 0xe5, 0x01, 0xec, 0xda, 0xe5, 0x01, 0xf7, 0xdb, 0xe5, - 0x41, 0x45, 0xc3, 0x0a, 0xf9, 0xe5, 0x01, 0xa6, 0x2e, 0x44, 0x46, 0x2a, - 0xfa, 0xe5, 0x01, 0x43, 0xbf, 0x0a, 0xf2, 0xe5, 0x01, 0xb3, 0x14, 0xb4, - 0x06, 0x44, 0xa1, 0x1d, 0xf1, 0xe5, 0x41, 0x44, 0x25, 0x01, 0xf4, 0xe5, - 0x01, 0x42, 0x15, 0x02, 0xf3, 0xe5, 0x41, 0x44, 0x27, 0x1d, 0xf8, 0xe5, - 0x01, 0x42, 0x60, 0x25, 0xf7, 0xe5, 0x41, 0x43, 0xa7, 0x05, 0xf6, 0xe5, - 0x01, 0x43, 0xcb, 0x06, 0xf5, 0xe5, 0x41, 0x44, 0xb2, 0xeb, 0x7d, 0x1c, - 0x00, 0x06, 0xc4, 0x06, 0xcd, 0x01, 0x50, 0x50, 0x56, 0x79, 0x1c, 0x00, - 0x07, 0xc1, 0x05, 0x2f, 0x02, 0x57, 0x16, 0x1f, 0xb0, 0x06, 0x45, 0x2d, - 0xe7, 0x7b, 0x1c, 0x40, 0x47, 0x90, 0xce, 0x7c, 0x1c, 0x00, 0x0b, 0x02, - 0x16, 0x01, 0xff, 0x4d, 0x93, 0x80, 0x7f, 0x1c, 0x00, 0x46, 0x9a, 0x80, - 0x7e, 0x1c, 0x40, 0x48, 0x22, 0xc0, 0x78, 0x1c, 0x00, 0x51, 0x4f, 0x56, + 0x41, 0x45, 0x12, 0x0b, 0xf9, 0xe5, 0x01, 0xa6, 0x2e, 0x44, 0xcf, 0x2a, + 0xfa, 0xe5, 0x01, 0x43, 0x0e, 0x0b, 0xf2, 0xe5, 0x01, 0xb3, 0x14, 0xb4, + 0x06, 0x44, 0x43, 0x1e, 0xf1, 0xe5, 0x41, 0x44, 0x25, 0x01, 0xf4, 0xe5, + 0x01, 0x42, 0x15, 0x02, 0xf3, 0xe5, 0x41, 0x44, 0xc9, 0x1d, 0xf8, 0xe5, + 0x01, 0x42, 0x01, 0x26, 0xf7, 0xe5, 0x41, 0x43, 0xd2, 0x05, 0xf6, 0xe5, + 0x01, 0x43, 0xf6, 0x06, 0xf5, 0xe5, 0x41, 0x44, 0xe5, 0xee, 0x7d, 0x1c, + 0x00, 0x06, 0xef, 0x06, 0xcd, 0x01, 0x50, 0x99, 0x57, 0x79, 0x1c, 0x00, + 0x07, 0xec, 0x05, 0x2f, 0x02, 0xc3, 0x16, 0x1f, 0xb0, 0x06, 0x45, 0x51, + 0xea, 0x7b, 0x1c, 0x40, 0x47, 0x6a, 0xd1, 0x7c, 0x1c, 0x00, 0x0b, 0x6e, + 0x16, 0x01, 0xff, 0x4d, 0x29, 0x82, 0x7f, 0x1c, 0x00, 0x46, 0x30, 0x82, + 0x7e, 0x1c, 0x40, 0x48, 0xa0, 0xc2, 0x78, 0x1c, 0x00, 0x51, 0x98, 0x57, 0x7a, 0x1c, 0x40, 0xa1, 0x6e, 0xa5, 0x58, 0xa9, 0x44, 0xac, 0x29, 0xaf, 0x15, 0xb5, 0x01, 0xff, 0xe3, 0x6a, 0x1c, 0x00, 0xe4, 0x6b, 0x1c, 0x00, - 0x42, 0xac, 0x1e, 0x6c, 0x1c, 0x00, 0xf9, 0x6d, 0x1c, 0x40, 0xe2, 0x75, - 0x1c, 0x00, 0xe8, 0x77, 0x1c, 0x00, 0x42, 0xc3, 0x05, 0x74, 0x1c, 0x00, + 0x42, 0x4e, 0x1f, 0x6c, 0x1c, 0x00, 0xf9, 0x6d, 0x1c, 0x40, 0xe2, 0x75, + 0x1c, 0x00, 0xe8, 0x77, 0x1c, 0x00, 0x42, 0xee, 0x05, 0x74, 0x1c, 0x00, 0xf6, 0x76, 0x1c, 0x40, 0xe1, 0x5a, 0x1c, 0x80, 0x10, 0xe5, 0x6e, 0x1c, 0x00, 0xe9, 0x64, 0x1c, 0x00, 0xef, 0x73, 0x1c, 0x00, 0xf5, 0x69, 0x1c, - 0x40, 0xe1, 0x5f, 0x1c, 0x40, 0xe8, 0x66, 0x1c, 0x00, 0x42, 0xf6, 0x19, + 0x40, 0xe1, 0x5f, 0x1c, 0x40, 0xe8, 0x66, 0x1c, 0x00, 0x42, 0x7d, 0x1a, 0x67, 0x1c, 0x00, 0xf2, 0x68, 0x1c, 0x00, 0xf3, 0x65, 0x1c, 0x40, 0x42, 0x7f, 0x02, 0x70, 0x1c, 0x00, 0xee, 0x71, 0x1c, 0x00, 0xf0, 0x6f, 0x1c, 0x00, 0x42, 0xcf, 0x00, 0x72, 0x1c, 0x40, 0xa1, 0x12, 0xe7, 0x5c, 0x1c, 0x00, 0xec, 0x5e, 0x1c, 0x00, 0x42, 0x1d, 0x01, 0x5d, 0x1c, 0x00, 0xf4, 0x5b, 0x1c, 0x40, 0xea, 0x61, 0x1c, 0x00, 0xeb, 0x60, 0x1c, 0x00, 0xed, - 0x62, 0x1c, 0x00, 0xf7, 0x63, 0x1c, 0x40, 0x45, 0xc3, 0x0a, 0x58, 0x1c, - 0x00, 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0x59, 0x1c, 0x00, 0x43, 0xbf, 0x0a, - 0x51, 0x1c, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xa1, 0x1d, 0x50, 0x1c, + 0x62, 0x1c, 0x00, 0xf7, 0x63, 0x1c, 0x40, 0x45, 0x12, 0x0b, 0x58, 0x1c, + 0x00, 0xa6, 0x2e, 0x44, 0xcf, 0x2a, 0x59, 0x1c, 0x00, 0x43, 0x0e, 0x0b, + 0x51, 0x1c, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, 0x50, 0x1c, 0x40, 0x44, 0x25, 0x01, 0x53, 0x1c, 0x00, 0x42, 0x15, 0x02, 0x52, 0x1c, - 0x40, 0x44, 0x27, 0x1d, 0x57, 0x1c, 0x00, 0x42, 0x60, 0x25, 0x56, 0x1c, - 0x40, 0x43, 0xa7, 0x05, 0x55, 0x1c, 0x00, 0x43, 0xcb, 0x06, 0x54, 0x1c, - 0x40, 0x04, 0xff, 0x81, 0x06, 0x44, 0xc4, 0xdb, 0xdb, 0x02, 0x40, 0x4c, - 0xf4, 0x3c, 0x9b, 0x16, 0x00, 0x07, 0xc1, 0x05, 0x0c, 0x55, 0xeb, 0x3c, - 0x9c, 0x16, 0x00, 0x4a, 0xd7, 0xae, 0x80, 0x16, 0x40, 0x44, 0xb6, 0xeb, - 0x90, 0x16, 0x00, 0x45, 0xa1, 0xe1, 0x81, 0x16, 0x00, 0xa3, 0x8f, 0x01, - 0x44, 0x42, 0xec, 0x87, 0x16, 0x00, 0x02, 0x89, 0x00, 0x73, 0x45, 0x4f, - 0xe3, 0x83, 0x16, 0x00, 0x44, 0xce, 0xec, 0x8c, 0x16, 0x00, 0xa9, 0x59, - 0x44, 0xd6, 0xed, 0x82, 0x16, 0x00, 0x44, 0x06, 0xee, 0x8b, 0x16, 0x00, - 0xae, 0x3f, 0xaf, 0x33, 0x45, 0xab, 0xe6, 0x9a, 0x16, 0x00, 0x44, 0x22, - 0xef, 0x8f, 0x16, 0x00, 0xb3, 0x19, 0x45, 0x22, 0xe8, 0x88, 0x16, 0x00, - 0xb5, 0x01, 0xff, 0x43, 0x25, 0x0f, 0x86, 0x16, 0x00, 0x47, 0x1c, 0xcf, - 0x97, 0x16, 0x00, 0xf2, 0x92, 0x16, 0x40, 0x43, 0x24, 0x17, 0x84, 0x16, - 0x00, 0x45, 0x54, 0xe8, 0x8e, 0x16, 0x40, 0x42, 0xac, 0x1e, 0x91, 0x16, - 0x00, 0xf2, 0x96, 0x16, 0x40, 0x46, 0xf8, 0xd8, 0x8d, 0x16, 0x00, 0x43, - 0xb5, 0x00, 0x85, 0x16, 0x40, 0x43, 0x89, 0x09, 0x98, 0x16, 0x00, 0x46, - 0xb6, 0xdb, 0x94, 0x16, 0x40, 0x45, 0xab, 0xe1, 0x95, 0x16, 0x00, 0x45, - 0xb7, 0xdb, 0x93, 0x16, 0x00, 0x49, 0xa6, 0xb9, 0x99, 0x16, 0x40, 0x44, - 0x6e, 0xec, 0x8a, 0x16, 0x00, 0x43, 0x44, 0x20, 0x89, 0x16, 0x40, 0x49, - 0x38, 0xb5, 0x75, 0xf7, 0x01, 0x02, 0x18, 0x00, 0x0f, 0xb4, 0x01, 0xff, - 0x4b, 0xf0, 0x96, 0xd1, 0xf6, 0x01, 0x44, 0x9e, 0xee, 0x19, 0xf4, 0x41, - 0x4f, 0x2e, 0x69, 0x47, 0x24, 0x00, 0xa2, 0x2e, 0xa3, 0x20, 0xa4, 0x12, - 0x44, 0x72, 0x50, 0x42, 0x24, 0x00, 0x44, 0x5d, 0x0e, 0x40, 0x24, 0x00, - 0x4d, 0xa8, 0x82, 0x43, 0x24, 0x40, 0x43, 0xce, 0x03, 0x48, 0x24, 0x00, - 0x4f, 0xeb, 0x6f, 0x4a, 0x24, 0x40, 0x44, 0x71, 0x6d, 0x41, 0x24, 0x00, - 0x56, 0x27, 0x37, 0x49, 0x24, 0x40, 0x4a, 0xa7, 0xa7, 0x44, 0x24, 0x00, - 0x46, 0xf8, 0xdb, 0x45, 0x24, 0x00, 0x59, 0x0a, 0x25, 0x46, 0x24, 0x40, - 0x5a, 0xde, 0x1f, 0xfc, 0xff, 0x00, 0x06, 0x43, 0x42, 0x06, 0x51, 0x6b, - 0x5c, 0xff, 0x23, 0x40, 0x0e, 0x7e, 0x74, 0x06, 0x46, 0x1a, 0x62, 0x5d, - 0x2e, 0x40, 0x44, 0xa5, 0x01, 0xa7, 0x29, 0x00, 0x42, 0x50, 0x02, 0xa6, - 0x29, 0x40, 0x05, 0xc0, 0x6e, 0xd2, 0x24, 0xa1, 0xff, 0x1c, 0xa5, 0x9a, - 0x0d, 0xa9, 0x82, 0x0d, 0x03, 0x98, 0xd4, 0xe5, 0x09, 0xaf, 0xc0, 0x04, - 0x4d, 0xc1, 0x85, 0x10, 0xcc, 0x01, 0xb5, 0xb6, 0x03, 0x16, 0x95, 0x37, - 0x01, 0xff, 0x4a, 0x71, 0xa6, 0x4f, 0xe1, 0x01, 0x06, 0xc4, 0x06, 0xe4, - 0x02, 0xac, 0x55, 0xb3, 0x21, 0x05, 0x05, 0x31, 0x01, 0xff, 0xe2, 0x30, - 0xe1, 0x01, 0xe4, 0x36, 0xe1, 0x01, 0xe7, 0x35, 0xe1, 0x01, 0xea, 0x32, - 0xe1, 0x01, 0xed, 0x31, 0xe1, 0x01, 0xf3, 0x34, 0xe1, 0x01, 0xf6, 0x33, - 0xe1, 0x41, 0x04, 0x30, 0x03, 0x06, 0x52, 0x82, 0x55, 0x3d, 0xe1, 0x41, - 0x04, 0xbb, 0x1a, 0x06, 0x45, 0x49, 0xe9, 0x3c, 0xe1, 0x41, 0x46, 0xd6, - 0xd6, 0x3a, 0xe1, 0x01, 0x4c, 0xa5, 0x8e, 0x3b, 0xe1, 0x01, 0x48, 0x78, - 0x83, 0x39, 0xe1, 0x01, 0x46, 0x7c, 0x1c, 0x37, 0xe1, 0x01, 0x45, 0x18, - 0xe8, 0x38, 0xe1, 0x41, 0x06, 0xc2, 0x05, 0x06, 0x4c, 0x39, 0x91, 0x4e, - 0xe1, 0x41, 0xe1, 0x24, 0xe1, 0x81, 0xf9, 0x01, 0x42, 0x37, 0x00, 0x08, - 0xe1, 0x01, 0xa4, 0xe6, 0x01, 0xe5, 0x2a, 0xe1, 0x81, 0xdc, 0x01, 0x42, - 0xe1, 0x07, 0x15, 0xe1, 0x01, 0x42, 0x24, 0x02, 0x22, 0xe1, 0x01, 0x42, - 0x22, 0x00, 0x04, 0xe1, 0x81, 0xc4, 0x01, 0xe9, 0x26, 0xe1, 0x01, 0x42, - 0x1b, 0x02, 0x0e, 0xe1, 0x01, 0x42, 0x74, 0x00, 0x09, 0xe1, 0x01, 0xad, - 0xa7, 0x01, 0xae, 0x65, 0xef, 0x28, 0xe1, 0x81, 0x5c, 0xb0, 0x50, 0x42, - 0xf4, 0x13, 0x17, 0xe1, 0x01, 0xb2, 0x3e, 0x42, 0x15, 0x06, 0x0a, 0xe1, - 0x01, 0xb4, 0x26, 0xf5, 0x27, 0xe1, 0x01, 0x42, 0xa6, 0x0a, 0x12, 0xe1, - 0x01, 0xf7, 0x2c, 0xe1, 0x01, 0xb8, 0x0c, 0x42, 0x34, 0x22, 0x18, 0xe1, - 0x01, 0x42, 0x59, 0x00, 0x0b, 0xe1, 0x41, 0xe1, 0x06, 0xe1, 0x01, 0x42, - 0x34, 0x22, 0x1b, 0xe1, 0x41, 0xe1, 0x03, 0xe1, 0x01, 0x42, 0x15, 0x06, - 0x01, 0xe1, 0x01, 0x42, 0x4c, 0x26, 0x14, 0xe1, 0x41, 0xe1, 0x16, 0xe1, - 0x01, 0x42, 0x71, 0x00, 0x23, 0xe1, 0x41, 0xe1, 0x1a, 0xe1, 0x01, 0x42, - 0x74, 0x00, 0x21, 0xe1, 0x41, 0xef, 0x29, 0xe1, 0x41, 0xe1, 0x05, 0xe1, - 0x01, 0x42, 0x37, 0x00, 0x0c, 0xe1, 0x01, 0x42, 0x1b, 0x02, 0x07, 0xe1, - 0x01, 0xb0, 0x24, 0x42, 0xf4, 0x13, 0x19, 0xe1, 0x01, 0x42, 0x71, 0x00, - 0x11, 0xe1, 0x01, 0xb4, 0x06, 0x42, 0x34, 0x22, 0x10, 0xe1, 0x41, 0xe1, - 0x02, 0xe1, 0x01, 0x42, 0x15, 0x06, 0x0d, 0xe1, 0x01, 0x42, 0x4c, 0x26, - 0x13, 0xe1, 0x41, 0xe1, 0x1c, 0xe1, 0x01, 0x42, 0x74, 0x00, 0x1e, 0xe1, - 0x41, 0xe1, 0x00, 0xe1, 0x01, 0x42, 0x74, 0x00, 0x20, 0xe1, 0x41, 0xe8, - 0x1f, 0xe1, 0x41, 0xe5, 0x2b, 0xe1, 0x41, 0xe1, 0x0f, 0xe1, 0x01, 0x42, - 0x74, 0x00, 0x1d, 0xe1, 0x41, 0xe1, 0x25, 0xe1, 0x41, 0x45, 0xc3, 0x0a, - 0x48, 0xe1, 0x01, 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0x49, 0xe1, 0x01, 0x43, - 0xbf, 0x0a, 0x41, 0xe1, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xa1, 0x1d, - 0x40, 0xe1, 0x41, 0x44, 0x25, 0x01, 0x43, 0xe1, 0x01, 0x42, 0x15, 0x02, - 0x42, 0xe1, 0x41, 0x44, 0x27, 0x1d, 0x47, 0xe1, 0x01, 0x42, 0x60, 0x25, - 0x46, 0xe1, 0x41, 0x43, 0xa7, 0x05, 0x45, 0xe1, 0x01, 0x43, 0xcb, 0x06, - 0x44, 0xe1, 0x41, 0x42, 0x0f, 0x07, 0x00, 0x00, 0x00, 0xad, 0x16, 0x04, - 0x2f, 0x4e, 0x06, 0x4a, 0x3b, 0xaf, 0x29, 0xf5, 0x41, 0x4a, 0x5d, 0xa6, - 0x05, 0xd8, 0x00, 0x4e, 0xb6, 0x1f, 0xe1, 0x6f, 0x41, 0x04, 0x8c, 0x05, - 0x06, 0x48, 0x59, 0xbf, 0x16, 0x21, 0x40, 0xa5, 0x4b, 0xa6, 0x3d, 0x52, - 0x7c, 0x52, 0x9a, 0x24, 0x00, 0xb3, 0x20, 0xb4, 0x01, 0xff, 0x4c, 0x42, - 0x50, 0x91, 0x24, 0x00, 0x51, 0x2a, 0x59, 0x94, 0x24, 0x00, 0x02, 0x15, - 0x01, 0x01, 0xff, 0x4d, 0xac, 0x83, 0x93, 0x24, 0x00, 0x4d, 0xca, 0x84, - 0x9b, 0x24, 0x40, 0x52, 0x3c, 0x50, 0x98, 0x24, 0x00, 0xa9, 0x01, 0xff, - 0x42, 0x31, 0x03, 0x23, 0x00, 0x00, 0x4f, 0x6f, 0x73, 0x97, 0x24, 0x40, - 0x50, 0x3a, 0x62, 0x96, 0x24, 0x00, 0x51, 0x9f, 0x5b, 0x95, 0x24, 0x40, - 0x51, 0x90, 0x59, 0x99, 0x24, 0x00, 0x4f, 0x0b, 0x6e, 0x92, 0x24, 0x40, - 0x80, 0xe4, 0x04, 0x4c, 0x80, 0x4b, 0xa0, 0x00, 0x00, 0x02, 0x7d, 0x02, - 0xcd, 0x04, 0xae, 0xb6, 0x04, 0xf2, 0xbd, 0x22, 0x80, 0xd0, 0x01, 0x42, - 0x1b, 0x03, 0x43, 0xf4, 0x01, 0xb4, 0x01, 0xff, 0x80, 0x3e, 0x05, 0x18, - 0x91, 0x20, 0xe5, 0xc8, 0xf5, 0xc1, 0x00, 0x03, 0x9f, 0x0e, 0x0d, 0x44, - 0x0e, 0xec, 0xd3, 0xf4, 0xc1, 0x00, 0x56, 0xa7, 0x31, 0xd4, 0xf4, 0x41, - 0xe4, 0xca, 0xf5, 0x01, 0x42, 0x8c, 0x09, 0xc9, 0xf5, 0x41, 0xac, 0x0c, - 0x60, 0xc5, 0x0f, 0x44, 0xf5, 0x01, 0x6b, 0x98, 0x02, 0xb1, 0x27, 0x40, - 0x5e, 0xaa, 0x12, 0x43, 0xf5, 0x01, 0x6a, 0x95, 0x03, 0xaf, 0x27, 0x40, - 0xa1, 0x63, 0x4a, 0x67, 0xa6, 0x7b, 0x23, 0x00, 0x03, 0x7b, 0x00, 0x4d, - 0x4c, 0x87, 0x00, 0x6f, 0x22, 0x00, 0x4c, 0x21, 0x8e, 0x62, 0x22, 0x00, - 0x49, 0xec, 0x00, 0x6e, 0x22, 0x00, 0x52, 0xa0, 0x52, 0xea, 0x22, 0x80, - 0x2e, 0x4b, 0x41, 0x69, 0x26, 0x22, 0x00, 0xb3, 0x0f, 0xb4, 0x01, 0xff, - 0x44, 0xae, 0x22, 0x41, 0x22, 0x00, 0x43, 0xa0, 0x3a, 0xad, 0x22, 0x40, - 0x43, 0x30, 0x03, 0xac, 0x00, 0x00, 0x06, 0x34, 0x24, 0x01, 0xff, 0x54, - 0x13, 0x42, 0xe2, 0x22, 0x00, 0x57, 0xf9, 0x2e, 0xe3, 0x22, 0x40, 0x4c, - 0x51, 0x28, 0xec, 0x22, 0x40, 0x45, 0xac, 0x0c, 0x60, 0x22, 0x00, 0x4a, - 0x06, 0x39, 0x6d, 0x22, 0x40, 0x03, 0x43, 0x06, 0x12, 0x4e, 0x11, 0x69, - 0x49, 0x22, 0x00, 0x4c, 0x9d, 0x90, 0x09, 0x22, 0x00, 0x56, 0x8d, 0x36, - 0x44, 0x22, 0x40, 0x47, 0xe3, 0x3f, 0x84, 0x22, 0x00, 0x49, 0x59, 0x35, - 0x85, 0x22, 0x40, 0x4d, 0x5f, 0x80, 0xbb, 0x20, 0x00, 0x4f, 0xa3, 0x52, - 0xb2, 0x22, 0x80, 0xcc, 0x02, 0x02, 0x53, 0x00, 0x01, 0xff, 0x80, 0x06, - 0x56, 0x33, 0x33, 0xea, 0xf6, 0x41, 0x05, 0x25, 0x23, 0xcb, 0x01, 0x06, - 0xbe, 0x06, 0x7a, 0x05, 0x37, 0x1a, 0x01, 0xff, 0xa1, 0x3b, 0x4b, 0x95, - 0x97, 0x09, 0x2b, 0x00, 0x4c, 0x71, 0x8c, 0xd6, 0x21, 0x00, 0x09, 0x9c, - 0x01, 0x19, 0x50, 0x6a, 0x65, 0x54, 0xf8, 0x01, 0x55, 0x01, 0x02, 0x66, - 0x2b, 0x80, 0x06, 0x4b, 0xfa, 0x0f, 0x01, 0x2b, 0x40, 0x47, 0x81, 0x14, - 0x76, 0x2b, 0x40, 0x43, 0xa7, 0xcd, 0x60, 0xf6, 0x01, 0x44, 0xf0, 0x4f, - 0x50, 0xf6, 0x01, 0x49, 0x89, 0xbe, 0x58, 0xf6, 0x41, 0x53, 0x80, 0x3f, - 0x21, 0x29, 0x00, 0x44, 0xcf, 0x00, 0x96, 0x21, 0xc0, 0x00, 0x80, 0x01, - 0xff, 0x54, 0x57, 0x3f, 0x27, 0x29, 0x00, 0x59, 0x16, 0x23, 0x32, 0x29, - 0x00, 0x48, 0xfd, 0xb1, 0xb8, 0xf8, 0x01, 0x03, 0x7a, 0x02, 0x06, 0x49, - 0x20, 0x24, 0x23, 0x29, 0x40, 0x46, 0xbb, 0x18, 0xf1, 0x21, 0x00, 0x48, - 0x3a, 0xc5, 0xb8, 0x21, 0x40, 0x09, 0xb3, 0x58, 0x1c, 0x50, 0x3a, 0x64, - 0x37, 0xa8, 0x00, 0x03, 0x7c, 0x00, 0x06, 0x4a, 0x69, 0xae, 0x38, 0xa8, - 0x40, 0x4a, 0x25, 0xac, 0x39, 0xa8, 0x00, 0x49, 0x7f, 0xbc, 0x36, 0xa8, - 0x40, 0x04, 0xbf, 0x0a, 0x11, 0x06, 0x24, 0x01, 0x01, 0xff, 0x48, 0x2a, - 0x01, 0x32, 0xa8, 0x00, 0x4a, 0xc3, 0xae, 0x35, 0xa8, 0x40, 0x46, 0xc3, - 0x0a, 0x34, 0xa8, 0x00, 0x44, 0x22, 0x00, 0x31, 0xa8, 0x00, 0x47, 0x2a, - 0x01, 0x30, 0xa8, 0x00, 0x49, 0x5f, 0x25, 0x33, 0xa8, 0x40, 0xa1, 0x3b, - 0x4b, 0x95, 0x97, 0x08, 0x2b, 0x00, 0x4c, 0x71, 0x8c, 0xd7, 0x21, 0x00, - 0x09, 0x9c, 0x01, 0x19, 0x50, 0x6a, 0x65, 0x55, 0xf8, 0x01, 0x55, 0x01, - 0x02, 0x67, 0x2b, 0x80, 0x06, 0x4b, 0xfa, 0x0f, 0x00, 0x2b, 0x40, 0x47, - 0x81, 0x14, 0x77, 0x2b, 0x40, 0x43, 0xa7, 0xcd, 0x62, 0xf6, 0x01, 0x44, - 0xf0, 0x4f, 0x52, 0xf6, 0x01, 0x49, 0x89, 0xbe, 0x5a, 0xf6, 0x41, 0x53, - 0x94, 0x3f, 0x22, 0x29, 0x00, 0x44, 0xcf, 0x00, 0x97, 0x21, 0xc0, 0x00, - 0x80, 0x01, 0xff, 0x54, 0x7f, 0x3f, 0x28, 0x29, 0x00, 0x09, 0x46, 0x10, - 0x0c, 0x48, 0xfd, 0xb1, 0xb9, 0xf8, 0x01, 0x49, 0x20, 0x24, 0x24, 0x29, - 0x40, 0x50, 0x6f, 0x3f, 0x31, 0x29, 0x00, 0x50, 0x83, 0x3f, 0x2e, 0x29, - 0x40, 0x4c, 0x51, 0x28, 0xb4, 0x22, 0x40, 0x8d, 0x06, 0x47, 0x58, 0xce, - 0xdd, 0x2a, 0x40, 0x4f, 0xe2, 0x69, 0x11, 0x20, 0x00, 0x54, 0xf3, 0x43, - 0xb1, 0xf6, 0x41, 0x50, 0xba, 0x63, 0x6f, 0x20, 0x00, 0x48, 0x5a, 0xc8, - 0x8e, 0x01, 0x41, 0xa2, 0x2d, 0x45, 0x79, 0x59, 0xd4, 0x26, 0x80, 0x20, - 0x4d, 0x62, 0x84, 0xf5, 0xf4, 0x01, 0x59, 0xbf, 0x24, 0x1e, 0xf5, 0x01, - 0xb0, 0x06, 0x4e, 0x00, 0x7b, 0xad, 0xf6, 0x41, 0x4a, 0x75, 0xa7, 0xb7, - 0xf6, 0x01, 0x45, 0x7b, 0xe4, 0x72, 0xf5, 0x41, 0x45, 0x2e, 0x03, 0xab, - 0xf6, 0x41, 0x47, 0x00, 0xcf, 0xb3, 0xf6, 0x01, 0x49, 0x1c, 0xbc, 0x83, - 0x00, 0x40, 0x03, 0xe8, 0x04, 0xca, 0x02, 0xa4, 0xf5, 0x01, 0x50, 0xad, - 0x00, 0xf9, 0x07, 0x00, 0x54, 0xeb, 0x41, 0xf4, 0x07, 0x00, 0xac, 0x16, - 0x07, 0xf3, 0x15, 0x06, 0x4a, 0x4f, 0xaf, 0xff, 0x07, 0x40, 0x4a, 0x79, - 0xa8, 0xf7, 0x07, 0x00, 0x49, 0xe1, 0xba, 0xf6, 0x07, 0x40, 0x49, 0x7f, - 0xb3, 0xfa, 0x07, 0x00, 0x06, 0xc2, 0x05, 0x06, 0x52, 0x1e, 0x53, 0xf5, - 0x07, 0x40, 0xe1, 0xca, 0x07, 0x00, 0x42, 0x16, 0x00, 0xd3, 0x07, 0x00, - 0x43, 0xef, 0x1f, 0xd7, 0x07, 0x00, 0x42, 0xa1, 0x10, 0xd8, 0x07, 0x80, - 0xa3, 0x01, 0xe5, 0xcd, 0x07, 0x80, 0x99, 0x01, 0x42, 0xe1, 0x07, 0xdd, - 0x07, 0x00, 0x43, 0x79, 0xa8, 0xdc, 0x07, 0x00, 0x42, 0x22, 0x00, 0xe4, - 0x07, 0x00, 0xe9, 0xcc, 0x07, 0x00, 0xaa, 0x66, 0x42, 0x1b, 0x02, 0xde, - 0x07, 0x00, 0x42, 0x74, 0x00, 0xdf, 0x07, 0x00, 0x42, 0x6c, 0x00, 0xe1, - 0x07, 0x00, 0xee, 0xd2, 0x07, 0x80, 0x37, 0xef, 0xd0, 0x07, 0x80, 0x2e, - 0x42, 0x6c, 0x09, 0xd4, 0x07, 0x00, 0xb2, 0x1c, 0x42, 0x15, 0x06, 0xdb, - 0x07, 0x00, 0x42, 0x12, 0x00, 0xd5, 0x07, 0x00, 0xf5, 0xce, 0x07, 0x00, - 0x42, 0xa9, 0x01, 0xe5, 0x07, 0x00, 0x42, 0x34, 0x22, 0xe6, 0x07, 0x40, - 0xe1, 0xd9, 0x07, 0x00, 0x42, 0x71, 0x00, 0xda, 0x07, 0x40, 0xef, 0xcf, - 0x07, 0x40, 0xe1, 0xe3, 0x07, 0x80, 0x0d, 0x42, 0x34, 0x22, 0xe2, 0x07, - 0xc0, 0x00, 0x47, 0xed, 0xca, 0xe7, 0x07, 0x40, 0x47, 0xed, 0xca, 0xe0, - 0x07, 0x40, 0xe1, 0xd6, 0x07, 0x00, 0x04, 0x8a, 0xee, 0x01, 0xff, 0x43, - 0xef, 0x1f, 0xe9, 0x07, 0x00, 0x42, 0xbd, 0x26, 0xe8, 0x07, 0x00, 0x42, - 0x71, 0x00, 0xea, 0x07, 0x40, 0xe5, 0xcb, 0x07, 0x40, 0x48, 0xca, 0xc3, - 0xd1, 0x07, 0x40, 0x49, 0xd0, 0xb3, 0xfd, 0x07, 0x00, 0x05, 0xc5, 0x06, - 0x06, 0x4a, 0xb1, 0xac, 0xfe, 0x07, 0x40, 0x45, 0xc3, 0x0a, 0xc8, 0x07, - 0x00, 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0xc9, 0x07, 0x00, 0x43, 0xbf, 0x0a, - 0xc1, 0x07, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xa1, 0x1d, 0xc0, 0x07, - 0x40, 0x44, 0x25, 0x01, 0xc3, 0x07, 0x00, 0x42, 0x15, 0x02, 0xc2, 0x07, - 0x40, 0x44, 0x27, 0x1d, 0xc7, 0x07, 0x00, 0x42, 0x60, 0x25, 0xc6, 0x07, - 0x40, 0x43, 0xa7, 0x05, 0xc5, 0x07, 0x00, 0x43, 0xcb, 0x06, 0xc4, 0x07, - 0x40, 0x07, 0xc9, 0x15, 0x06, 0x42, 0x6c, 0x00, 0xf8, 0x07, 0x40, 0x50, - 0x9a, 0x60, 0xf3, 0x07, 0x00, 0x05, 0x68, 0x33, 0x1d, 0x51, 0xf5, 0x5a, - 0xf2, 0x07, 0x00, 0x06, 0x61, 0x36, 0x01, 0xff, 0x49, 0xeb, 0x41, 0xeb, - 0x07, 0x00, 0x48, 0xc3, 0xb2, 0xec, 0x07, 0x00, 0x4b, 0x4a, 0x65, 0xed, - 0x07, 0x40, 0x4f, 0x5a, 0x6a, 0xee, 0x07, 0x00, 0x49, 0xeb, 0x41, 0xef, - 0x07, 0x00, 0x48, 0xc3, 0xb2, 0xf0, 0x07, 0x00, 0x4b, 0x4a, 0x65, 0xf1, - 0x07, 0x40, 0x4e, 0xa0, 0x76, 0x03, 0xf3, 0x01, 0xae, 0x01, 0xff, 0x54, - 0xe7, 0x40, 0xd9, 0xf7, 0x01, 0x42, 0xbd, 0x26, 0x77, 0xf9, 0x41, 0x45, - 0x41, 0xe2, 0x54, 0xf4, 0x01, 0x03, 0xa4, 0x05, 0xa9, 0x0c, 0x06, 0x3c, - 0xda, 0xd7, 0x0b, 0x45, 0xf1, 0xe6, 0x46, 0x26, 0x80, 0xc9, 0x0b, 0x47, - 0x64, 0xd2, 0x13, 0xf9, 0x01, 0xb3, 0xab, 0x0b, 0x02, 0xfe, 0x07, 0xa5, - 0x09, 0xb7, 0x11, 0x03, 0x43, 0x61, 0x01, 0xff, 0x44, 0xc2, 0x07, 0x85, - 0x00, 0x00, 0x44, 0x3d, 0xa4, 0x98, 0x23, 0x40, 0x80, 0xfa, 0x04, 0x02, - 0x5a, 0x00, 0x16, 0x05, 0xc2, 0x07, 0x06, 0x46, 0x2e, 0x75, 0xf0, 0xf4, - 0x41, 0x44, 0xc3, 0x00, 0x92, 0x2b, 0x00, 0x45, 0xc8, 0x00, 0x93, 0x2b, - 0x40, 0x51, 0x93, 0x56, 0x4f, 0x14, 0x01, 0x45, 0xe8, 0x04, 0x4d, 0x14, - 0x01, 0xa4, 0xf4, 0x03, 0x4a, 0x1e, 0x9a, 0x4e, 0x14, 0x01, 0x4e, 0x3a, - 0x77, 0x5d, 0x14, 0x01, 0x07, 0xc1, 0x05, 0xa3, 0x01, 0x42, 0xe9, 0x04, - 0x49, 0x14, 0x01, 0x50, 0x3a, 0x64, 0x5b, 0x14, 0x01, 0xb3, 0x44, 0x0b, - 0xd1, 0x75, 0x01, 0xff, 0xa1, 0x31, 0xe5, 0x3e, 0x14, 0x01, 0xe9, 0x36, - 0x14, 0x81, 0x24, 0xef, 0x40, 0x14, 0x01, 0xf5, 0x38, 0x14, 0x81, 0x17, - 0x08, 0x9b, 0xbe, 0x01, 0xff, 0xec, 0x3c, 0x14, 0x81, 0x09, 0xf2, 0x3a, - 0x14, 0xc1, 0x00, 0xf2, 0x3b, 0x14, 0x41, 0xec, 0x3d, 0x14, 0x41, 0xf5, - 0x39, 0x14, 0x41, 0xe9, 0x37, 0x14, 0x41, 0xe1, 0x35, 0x14, 0x01, 0xe9, - 0x3f, 0x14, 0x01, 0xf5, 0x41, 0x14, 0x41, 0x4a, 0x81, 0xa5, 0x5e, 0x14, - 0x01, 0xa9, 0x01, 0xff, 0x44, 0x4a, 0xec, 0x4a, 0x14, 0x01, 0x03, 0x31, - 0x03, 0x01, 0xff, 0xa1, 0x2f, 0x4b, 0x4f, 0x23, 0x43, 0x14, 0x01, 0x4e, - 0x76, 0x76, 0x48, 0x14, 0x01, 0x4b, 0xc0, 0x9b, 0x60, 0x14, 0x01, 0x45, - 0x5a, 0x3e, 0x46, 0x14, 0x01, 0x4b, 0x32, 0xa2, 0x61, 0x14, 0x01, 0x02, - 0x02, 0x00, 0x01, 0xff, 0x44, 0x5d, 0x23, 0x42, 0x14, 0x01, 0x45, 0xa3, - 0x4a, 0x45, 0x14, 0x41, 0x47, 0xd1, 0x15, 0x44, 0x14, 0x01, 0x47, 0xf2, - 0x86, 0x47, 0x14, 0x41, 0xe1, 0x00, 0x14, 0x81, 0xae, 0x02, 0xa2, 0xa1, - 0x02, 0xa3, 0x94, 0x02, 0xa4, 0xfb, 0x01, 0xe5, 0x0a, 0x14, 0x01, 0xa7, - 0xea, 0x01, 0x42, 0x22, 0x00, 0x34, 0x14, 0x01, 0xe9, 0x02, 0x14, 0x81, - 0xda, 0x01, 0xaa, 0xcd, 0x01, 0xab, 0xc0, 0x01, 0xac, 0xb3, 0x01, 0xad, - 0xa6, 0x01, 0xae, 0x7b, 0xef, 0x0c, 0x14, 0x01, 0xb0, 0x6b, 0xb2, 0x5f, - 0xb3, 0x4d, 0xb4, 0x34, 0xf5, 0x04, 0x14, 0x81, 0x2b, 0xb6, 0x0c, 0x42, - 0xa9, 0x01, 0x30, 0x14, 0x01, 0x42, 0x34, 0x22, 0x2b, 0x14, 0x41, 0x4d, - 0xd4, 0x80, 0x5f, 0x14, 0x01, 0x07, 0x9c, 0xbe, 0x01, 0xff, 0xec, 0x08, - 0x14, 0x81, 0x09, 0xf2, 0x06, 0x14, 0xc1, 0x00, 0xf2, 0x07, 0x14, 0x41, - 0xec, 0x09, 0x14, 0x41, 0xf5, 0x05, 0x14, 0x41, 0xe1, 0x1f, 0x14, 0x01, - 0x42, 0x22, 0x00, 0x20, 0x14, 0x01, 0xb4, 0x01, 0xff, 0xe1, 0x1a, 0x14, - 0x01, 0x42, 0x22, 0x00, 0x1b, 0x14, 0x41, 0xe1, 0x33, 0x14, 0x01, 0x42, - 0x22, 0x00, 0x31, 0x14, 0x01, 0x42, 0x15, 0x06, 0x32, 0x14, 0x41, 0xe1, - 0x2c, 0x14, 0x01, 0x42, 0x22, 0x00, 0x2d, 0x14, 0x41, 0xe1, 0x25, 0x14, - 0x01, 0x42, 0x22, 0x00, 0x26, 0x14, 0x41, 0xe1, 0x23, 0x14, 0x01, 0xa7, - 0x19, 0x42, 0x22, 0x00, 0x24, 0x14, 0x01, 0x42, 0xff, 0x04, 0x1e, 0x14, - 0x01, 0xb9, 0x01, 0xff, 0xe1, 0x18, 0x14, 0x01, 0x42, 0x22, 0x00, 0x19, - 0x14, 0x41, 0xe1, 0x12, 0x14, 0x01, 0x42, 0x22, 0x00, 0x13, 0x14, 0x41, - 0xe1, 0x29, 0x14, 0x01, 0x42, 0x22, 0x00, 0x2a, 0x14, 0x41, 0xe1, 0x2e, - 0x14, 0x01, 0x42, 0x22, 0x00, 0x2f, 0x14, 0x41, 0xe1, 0x0e, 0x14, 0x01, - 0x42, 0x22, 0x00, 0x0f, 0x14, 0x41, 0xe1, 0x16, 0x14, 0x01, 0x42, 0x22, - 0x00, 0x17, 0x14, 0x41, 0xe9, 0x03, 0x14, 0x41, 0xe1, 0x10, 0x14, 0x01, - 0x42, 0x22, 0x00, 0x11, 0x14, 0x41, 0xe1, 0x21, 0x14, 0x01, 0xa4, 0x06, - 0x42, 0x22, 0x00, 0x22, 0x14, 0x41, 0xe1, 0x1c, 0x14, 0x01, 0x42, 0x22, - 0x00, 0x1d, 0x14, 0x41, 0xe1, 0x14, 0x14, 0x01, 0x42, 0x22, 0x00, 0x15, - 0x14, 0x41, 0xe1, 0x27, 0x14, 0x01, 0x42, 0x22, 0x00, 0x28, 0x14, 0x41, - 0xe1, 0x01, 0x14, 0x01, 0xe9, 0x0b, 0x14, 0x01, 0xf5, 0x0d, 0x14, 0x41, - 0x44, 0xd1, 0x1f, 0x4b, 0x14, 0x01, 0x05, 0xc5, 0x06, 0x11, 0x06, 0x3c, - 0x01, 0x01, 0xff, 0x45, 0xe8, 0x04, 0x5a, 0x14, 0x01, 0x45, 0x34, 0x94, - 0x4c, 0x14, 0x41, 0x45, 0xc3, 0x0a, 0x58, 0x14, 0x01, 0xa6, 0x2e, 0x44, - 0x46, 0x2a, 0x59, 0x14, 0x01, 0x43, 0xbf, 0x0a, 0x51, 0x14, 0x01, 0xb3, - 0x14, 0xb4, 0x06, 0x44, 0xa1, 0x1d, 0x50, 0x14, 0x41, 0x44, 0x25, 0x01, - 0x53, 0x14, 0x01, 0x42, 0x15, 0x02, 0x52, 0x14, 0x41, 0x44, 0x27, 0x1d, - 0x57, 0x14, 0x01, 0x42, 0x60, 0x25, 0x56, 0x14, 0x41, 0x43, 0xa7, 0x05, - 0x55, 0x14, 0x01, 0x43, 0xcb, 0x06, 0x54, 0x14, 0x41, 0x44, 0xc2, 0x07, - 0x0a, 0x00, 0x00, 0x05, 0x28, 0x1b, 0xfe, 0x03, 0x4b, 0x6f, 0xa0, 0xaa, - 0x20, 0x00, 0x08, 0xaa, 0xc8, 0x01, 0xff, 0x06, 0xc4, 0x06, 0xac, 0x03, - 0x07, 0xc1, 0x05, 0x74, 0x48, 0x42, 0xc8, 0xde, 0x19, 0x80, 0x69, 0xb4, - 0x54, 0x0b, 0xd1, 0x75, 0x01, 0xff, 0xa1, 0x3c, 0xe5, 0xb5, 0x19, 0x00, - 0xa9, 0x2e, 0xef, 0xb7, 0x19, 0x80, 0x1c, 0xf5, 0xb3, 0x19, 0x80, 0x06, - 0x4f, 0x15, 0x73, 0xb0, 0x19, 0x40, 0xe5, 0xb9, 0x19, 0x80, 0x08, 0xf5, - 0xb4, 0x19, 0x00, 0xf9, 0xbc, 0x19, 0x40, 0xf9, 0xbf, 0x19, 0x40, 0xe1, - 0xb8, 0x19, 0x80, 0x04, 0xf9, 0xbd, 0x19, 0x40, 0xf9, 0xbe, 0x19, 0x40, - 0xe9, 0xb2, 0x19, 0x00, 0xf9, 0xc0, 0x19, 0x40, 0xe1, 0xb1, 0x19, 0x80, - 0x08, 0xe5, 0xb6, 0x19, 0x00, 0xf9, 0xba, 0x19, 0x40, 0xf9, 0xbb, 0x19, - 0x40, 0x4d, 0xff, 0x81, 0xda, 0x19, 0x00, 0x09, 0xbd, 0xba, 0x01, 0xff, - 0xd1, 0xc8, 0x19, 0x00, 0xd2, 0xc9, 0x19, 0x40, 0xf6, 0xdf, 0x19, 0x40, - 0x06, 0x3d, 0x2c, 0x92, 0x02, 0x05, 0xf9, 0x0a, 0x89, 0x01, 0x04, 0xdd, - 0x04, 0x01, 0xff, 0x42, 0x16, 0x00, 0xa5, 0x19, 0x00, 0x42, 0xa1, 0x10, - 0xa4, 0x19, 0x00, 0x42, 0xe1, 0x07, 0x9d, 0x19, 0x00, 0x42, 0x22, 0x00, - 0xa3, 0x19, 0x00, 0xab, 0x60, 0x42, 0x74, 0x00, 0x9f, 0x19, 0x00, 0x42, - 0x6c, 0x00, 0x99, 0x19, 0x00, 0xae, 0x48, 0xb0, 0x3c, 0x42, 0xf4, 0x13, - 0x81, 0x19, 0x00, 0xb3, 0x2a, 0xb4, 0x18, 0x42, 0xa6, 0x0a, 0x9e, 0x19, - 0x00, 0xb8, 0x06, 0x42, 0x34, 0x22, 0x8d, 0x19, 0x40, 0xe1, 0x86, 0x19, - 0x00, 0x42, 0xa6, 0x0a, 0xa9, 0x19, 0x40, 0xe1, 0x91, 0x19, 0x00, 0x42, - 0x22, 0x00, 0x92, 0x19, 0x00, 0x42, 0x15, 0x06, 0x8b, 0x19, 0x40, 0xe1, - 0x8c, 0x19, 0x00, 0x42, 0x7d, 0x00, 0xab, 0x19, 0x40, 0xe1, 0x97, 0x19, - 0x00, 0x42, 0x22, 0x00, 0x98, 0x19, 0x40, 0xe1, 0x93, 0x19, 0x00, 0x42, - 0x24, 0x02, 0x87, 0x19, 0x40, 0xe1, 0x85, 0x19, 0x00, 0x42, 0xa6, 0x0a, - 0xa8, 0x19, 0x40, 0x42, 0x16, 0x00, 0xa2, 0x19, 0x00, 0x42, 0xa1, 0x10, - 0xa1, 0x19, 0x00, 0x42, 0xe1, 0x07, 0x9a, 0x19, 0x00, 0x42, 0x22, 0x00, - 0xa0, 0x19, 0x00, 0xab, 0x60, 0x42, 0x74, 0x00, 0x9c, 0x19, 0x00, 0x42, - 0x6c, 0x00, 0x96, 0x19, 0x00, 0xae, 0x48, 0xb0, 0x3c, 0x42, 0xf4, 0x13, - 0x80, 0x19, 0x00, 0xb3, 0x2a, 0xb4, 0x18, 0x42, 0xa6, 0x0a, 0x9b, 0x19, - 0x00, 0xb8, 0x06, 0x42, 0x34, 0x22, 0x8a, 0x19, 0x40, 0xe1, 0x83, 0x19, - 0x00, 0x42, 0xa6, 0x0a, 0xa7, 0x19, 0x40, 0xe1, 0x8e, 0x19, 0x00, 0x42, - 0x22, 0x00, 0x8f, 0x19, 0x00, 0x42, 0x15, 0x06, 0x88, 0x19, 0x40, 0xe1, - 0x89, 0x19, 0x00, 0x42, 0x7d, 0x00, 0xaa, 0x19, 0x40, 0xe1, 0x94, 0x19, - 0x00, 0x42, 0x22, 0x00, 0x95, 0x19, 0x40, 0xe1, 0x90, 0x19, 0x00, 0x42, - 0x24, 0x02, 0x84, 0x19, 0x40, 0xe1, 0x82, 0x19, 0x00, 0x42, 0xa6, 0x0a, - 0xa6, 0x19, 0x40, 0xe2, 0xc7, 0x19, 0x00, 0xe4, 0xc6, 0x19, 0x00, 0xeb, - 0xc5, 0x19, 0x00, 0xed, 0xc4, 0x19, 0x00, 0xee, 0xc3, 0x19, 0x80, 0x04, - 0xf6, 0xc1, 0x19, 0x40, 0xe7, 0xc2, 0x19, 0x40, 0x45, 0xc3, 0x0a, 0xd8, - 0x19, 0x00, 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0xd9, 0x19, 0x00, 0x43, 0xbf, - 0x0a, 0xd1, 0x19, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xa1, 0x1d, 0xd0, - 0x19, 0x40, 0x44, 0x25, 0x01, 0xd3, 0x19, 0x00, 0x42, 0x15, 0x02, 0xd2, - 0x19, 0x40, 0x44, 0x27, 0x1d, 0xd7, 0x19, 0x00, 0x42, 0x60, 0x25, 0xd6, - 0x19, 0x40, 0x43, 0xa7, 0x05, 0xd5, 0x19, 0x00, 0x43, 0xcb, 0x06, 0xd4, - 0x19, 0x40, 0x46, 0xeb, 0x07, 0x11, 0xf3, 0x01, 0x49, 0xc8, 0xbe, 0x1a, - 0xf3, 0x41, 0x42, 0x33, 0x00, 0xb2, 0x26, 0x00, 0x04, 0xdd, 0x01, 0x01, - 0xff, 0x06, 0xa2, 0xd7, 0x06, 0x44, 0xe1, 0x07, 0x10, 0xf6, 0x41, 0x46, - 0x48, 0xd7, 0x03, 0xfa, 0x81, 0xd3, 0x01, 0x4a, 0xd9, 0xa7, 0x4a, 0xfa, - 0x81, 0xc5, 0x01, 0xab, 0x73, 0x44, 0xb6, 0xee, 0x05, 0xfa, 0x81, 0x5b, - 0x45, 0xe6, 0xbb, 0x01, 0xfa, 0x81, 0x43, 0x44, 0x0a, 0xef, 0x02, 0xfa, - 0x81, 0x2b, 0x07, 0xd8, 0x09, 0x01, 0xff, 0x46, 0x48, 0xd7, 0x2d, 0xfa, - 0x01, 0xab, 0x12, 0x44, 0xb6, 0xee, 0x2f, 0xfa, 0x01, 0x45, 0xe6, 0xbb, - 0x2b, 0xfa, 0x01, 0x44, 0x0a, 0xef, 0x2c, 0xfa, 0x41, 0x43, 0xa1, 0x01, - 0x2a, 0xfa, 0x01, 0x45, 0xd5, 0x71, 0x2e, 0xfa, 0x41, 0x09, 0x02, 0x2c, - 0x01, 0xff, 0x4e, 0x0b, 0x2c, 0x17, 0xfa, 0x01, 0x5b, 0x1a, 0x1d, 0x41, - 0xfa, 0x41, 0x09, 0x02, 0x2c, 0x01, 0xff, 0x4e, 0x0b, 0x2c, 0x16, 0xfa, - 0x01, 0x5b, 0x1a, 0x1d, 0x40, 0xfa, 0x41, 0x09, 0x02, 0x2c, 0x01, 0xff, - 0x4e, 0x0b, 0x2c, 0x1a, 0xfa, 0x01, 0x5b, 0x1a, 0x1d, 0x44, 0xfa, 0x41, - 0x43, 0xa1, 0x01, 0x00, 0xfa, 0x81, 0x38, 0x45, 0xd5, 0x71, 0x04, 0xfa, - 0xc1, 0x00, 0x09, 0x02, 0x2c, 0x01, 0xff, 0x52, 0x84, 0x50, 0x08, 0xfa, - 0x01, 0x4e, 0x0b, 0x2c, 0x19, 0xfa, 0x01, 0x5f, 0x1e, 0x11, 0x1d, 0xfa, - 0x01, 0xb4, 0x01, 0xff, 0x5c, 0x8e, 0x17, 0x47, 0xfa, 0x01, 0x0b, 0x1b, - 0x1d, 0x01, 0xff, 0x4f, 0x26, 0x1d, 0x43, 0xfa, 0x01, 0x53, 0xa9, 0x4c, - 0x32, 0xfa, 0x41, 0x09, 0x02, 0x2c, 0x01, 0xff, 0x4e, 0x0b, 0x2c, 0x15, - 0xfa, 0x01, 0x5b, 0x1a, 0x1d, 0x3f, 0xfa, 0x41, 0x57, 0x02, 0x2c, 0x4d, - 0xfa, 0x41, 0x09, 0x02, 0x2c, 0x01, 0xff, 0x4e, 0x0b, 0x2c, 0x18, 0xfa, - 0x01, 0x5b, 0x1a, 0x1d, 0x42, 0xfa, 0x41, 0x43, 0x31, 0xd4, 0xdc, 0x2b, - 0x00, 0xb4, 0x01, 0xff, 0x4a, 0x23, 0xa4, 0xba, 0xfa, 0x01, 0x49, 0x11, - 0xb8, 0x86, 0xfa, 0x41, 0x49, 0x52, 0x2d, 0xc9, 0x2b, 0x40, 0xa1, 0x35, - 0x11, 0xe6, 0x58, 0x1b, 0x0e, 0xfe, 0x77, 0x01, 0xff, 0x03, 0x7b, 0x00, - 0x06, 0x4c, 0x87, 0x00, 0x78, 0x22, 0x40, 0x45, 0xac, 0x0c, 0x70, 0x22, - 0x00, 0x4a, 0x06, 0x39, 0x74, 0x22, 0x40, 0x03, 0x7b, 0x00, 0x06, 0x49, - 0xec, 0x00, 0x79, 0x22, 0x40, 0x45, 0xac, 0x0c, 0x71, 0x22, 0x00, 0x4a, - 0x06, 0x39, 0x75, 0x22, 0x40, 0x03, 0x43, 0x06, 0x06, 0x62, 0x8f, 0x0c, - 0x47, 0x22, 0x40, 0x54, 0xe3, 0x3f, 0x88, 0x22, 0x00, 0x56, 0x59, 0x35, - 0x89, 0x22, 0x40, 0x6d, 0x38, 0x01, 0xaf, 0x22, 0x00, 0x04, 0xa7, 0x05, - 0x01, 0xff, 0x4b, 0x9d, 0x50, 0x15, 0x00, 0x00, 0x08, 0x6d, 0x22, 0xcc, - 0x01, 0x09, 0x42, 0x25, 0xb5, 0x01, 0x08, 0xab, 0x05, 0x01, 0xff, 0x42, - 0x5c, 0x00, 0x8e, 0xf1, 0x01, 0x4a, 0xad, 0xa6, 0x4e, 0x27, 0x00, 0x4f, - 0xe5, 0x0b, 0xb7, 0xf8, 0x01, 0x42, 0x36, 0x00, 0x8b, 0xf1, 0x01, 0xac, - 0x24, 0x42, 0x6c, 0x09, 0x8c, 0xf1, 0x01, 0x4d, 0xd6, 0x33, 0xc4, 0xfb, - 0x01, 0x50, 0xb3, 0x02, 0xb6, 0xf8, 0x01, 0x42, 0x15, 0x06, 0x8d, 0xf1, - 0x01, 0x4d, 0x1f, 0x20, 0xb5, 0xf8, 0x01, 0x42, 0x40, 0x1a, 0x8f, 0xf1, - 0x41, 0x14, 0xb4, 0x05, 0x06, 0x4e, 0x38, 0x07, 0xb4, 0xf8, 0x41, 0xe1, - 0x70, 0xf1, 0x01, 0xe2, 0x71, 0xf1, 0x01, 0xe3, 0x72, 0xf1, 0x01, 0xe4, - 0x73, 0xf1, 0x01, 0xe5, 0x74, 0xf1, 0x01, 0xe6, 0x75, 0xf1, 0x01, 0xe7, - 0x76, 0xf1, 0x01, 0xe8, 0x77, 0xf1, 0x01, 0xe9, 0x78, 0xf1, 0x01, 0xea, - 0x79, 0xf1, 0x01, 0xeb, 0x7a, 0xf1, 0x01, 0xec, 0x7b, 0xf1, 0x01, 0xed, - 0x7c, 0xf1, 0x01, 0xee, 0x7d, 0xf1, 0x01, 0xef, 0x7e, 0xf1, 0x01, 0xf0, - 0x7f, 0xf1, 0x01, 0xf1, 0x80, 0xf1, 0x01, 0xf2, 0x81, 0xf1, 0x01, 0xf3, - 0x82, 0xf1, 0x01, 0xf4, 0x83, 0xf1, 0x01, 0xf5, 0x84, 0xf1, 0x01, 0xf6, - 0x85, 0xf1, 0x01, 0xf7, 0x86, 0xf1, 0x01, 0xf8, 0x87, 0xf1, 0x01, 0xf9, - 0x88, 0xf1, 0x01, 0xfa, 0x89, 0xf1, 0x41, 0x45, 0x46, 0x10, 0xbd, 0xfb, - 0x01, 0x47, 0x88, 0x43, 0xbf, 0xfb, 0x01, 0x5c, 0x09, 0x0f, 0xbe, 0xfb, - 0x41, 0x4a, 0x11, 0xa7, 0xff, 0x24, 0x00, 0x15, 0xb3, 0x05, 0x5a, 0x07, - 0x2f, 0x39, 0x0c, 0x46, 0xab, 0x05, 0xd8, 0xf7, 0x01, 0x48, 0x01, 0x02, - 0xd6, 0xf7, 0x41, 0xa5, 0x3c, 0xa6, 0x2e, 0x48, 0x7c, 0x52, 0xf3, 0x24, - 0x00, 0xb3, 0x1a, 0xb4, 0x01, 0xff, 0x47, 0x2a, 0x59, 0xed, 0x24, 0x00, - 0x02, 0x15, 0x01, 0x01, 0xff, 0x43, 0x47, 0x2b, 0xec, 0x24, 0x00, 0x43, - 0x2a, 0x1d, 0xf4, 0x24, 0x40, 0x48, 0x3c, 0x50, 0xf1, 0x24, 0x00, 0x46, - 0x60, 0x25, 0xf0, 0x24, 0x40, 0x46, 0x9c, 0x17, 0xef, 0x24, 0x00, 0x47, - 0x9f, 0x5b, 0xee, 0x24, 0x40, 0x47, 0xca, 0x24, 0xf2, 0x24, 0x00, 0x45, - 0x0b, 0x6e, 0xeb, 0x24, 0x40, 0xe1, 0x50, 0xf1, 0x01, 0xe2, 0x51, 0xf1, - 0x01, 0xe3, 0x52, 0xf1, 0x01, 0xe4, 0x53, 0xf1, 0x01, 0xe5, 0x54, 0xf1, - 0x01, 0xe6, 0x55, 0xf1, 0x01, 0xe7, 0x56, 0xf1, 0x01, 0xe8, 0x57, 0xf1, - 0x01, 0xe9, 0x58, 0xf1, 0x01, 0xea, 0x59, 0xf1, 0x01, 0xeb, 0x5a, 0xf1, - 0x01, 0xec, 0x5b, 0xf1, 0x01, 0xed, 0x5c, 0xf1, 0x01, 0xee, 0x5d, 0xf1, - 0x01, 0xef, 0x5e, 0xf1, 0x01, 0xf0, 0x5f, 0xf1, 0x01, 0xf1, 0x60, 0xf1, - 0x01, 0xf2, 0x61, 0xf1, 0x01, 0xf3, 0x62, 0xf1, 0x01, 0xf4, 0x63, 0xf1, - 0x01, 0xf5, 0x64, 0xf1, 0x01, 0xf6, 0x65, 0xf1, 0x01, 0xf7, 0x66, 0xf1, - 0x01, 0xf8, 0x67, 0xf1, 0x01, 0xf9, 0x68, 0xf1, 0x01, 0xfa, 0x69, 0xf1, - 0x41, 0xa2, 0xb5, 0x05, 0x0a, 0x51, 0xa8, 0xc6, 0x03, 0xa9, 0xb7, 0x03, - 0x48, 0x9a, 0xc5, 0xdb, 0xf4, 0x01, 0x42, 0x1b, 0x00, 0xbc, 0x22, 0x80, - 0x22, 0x53, 0x79, 0x4b, 0x2f, 0x20, 0x00, 0x07, 0x0f, 0x3a, 0x0c, 0x4c, - 0xa5, 0x94, 0x22, 0xf9, 0x01, 0x4a, 0xa7, 0xb1, 0xff, 0xf9, 0x41, 0x4c, - 0xbe, 0x63, 0x6e, 0x20, 0x00, 0x44, 0x85, 0xb2, 0xde, 0xf3, 0x41, 0x08, - 0x62, 0xc4, 0x01, 0xff, 0x4a, 0x40, 0x5f, 0xe3, 0x19, 0x01, 0x07, 0xc1, - 0x05, 0x67, 0x05, 0x2f, 0x03, 0x3e, 0x0b, 0xd1, 0x75, 0x01, 0xff, 0xa1, - 0x2b, 0xe5, 0xda, 0x19, 0x01, 0xe9, 0xd2, 0x19, 0x81, 0x1e, 0xef, 0xdc, - 0x19, 0x01, 0x4f, 0x54, 0x70, 0xe4, 0x19, 0x01, 0xf5, 0xd4, 0x19, 0x81, - 0x0b, 0x49, 0x9b, 0xbe, 0xd6, 0x19, 0xc1, 0x00, 0xf2, 0xd7, 0x19, 0x41, - 0xf5, 0xd5, 0x19, 0x41, 0xe9, 0xd3, 0x19, 0x41, 0xe1, 0xd1, 0x19, 0x01, - 0xe9, 0xdb, 0x19, 0x01, 0xf5, 0xdd, 0x19, 0x41, 0xa1, 0x17, 0x47, 0x0c, - 0xd3, 0xe2, 0x19, 0x01, 0x02, 0x02, 0x00, 0x01, 0xff, 0x44, 0x5d, 0x23, - 0xe0, 0x19, 0x01, 0x45, 0xa3, 0x4a, 0xdf, 0x19, 0x41, 0x47, 0xd1, 0x15, - 0xde, 0x19, 0x01, 0x47, 0xf2, 0x86, 0xe1, 0x19, 0x41, 0xe1, 0xa0, 0x19, - 0x81, 0x80, 0x02, 0xa2, 0xf3, 0x01, 0xa3, 0xe6, 0x01, 0xa4, 0xcd, 0x01, - 0xe5, 0xaa, 0x19, 0x01, 0xa7, 0xbc, 0x01, 0x42, 0x22, 0x00, 0xce, 0x19, - 0x01, 0xe9, 0xa2, 0x19, 0x81, 0xac, 0x01, 0xaa, 0x9f, 0x01, 0xab, 0x92, - 0x01, 0xac, 0x85, 0x01, 0x42, 0x6c, 0x00, 0xc6, 0x19, 0x01, 0xae, 0x67, - 0xef, 0xac, 0x19, 0x01, 0xb0, 0x57, 0xb2, 0x4b, 0xb3, 0x39, 0xb4, 0x20, - 0xf5, 0xa4, 0x19, 0x81, 0x17, 0xb6, 0x06, 0x42, 0x34, 0x22, 0xc7, 0x19, - 0x41, 0xe1, 0xca, 0x19, 0x01, 0x48, 0x9c, 0xbe, 0xa6, 0x19, 0xc1, 0x00, - 0xf2, 0xa7, 0x19, 0x41, 0xf5, 0xa5, 0x19, 0x41, 0xe1, 0xbd, 0x19, 0x01, - 0x42, 0x22, 0x00, 0xbe, 0x19, 0x01, 0xb4, 0x01, 0xff, 0xe1, 0xb8, 0x19, - 0x01, 0x42, 0x22, 0x00, 0xb9, 0x19, 0x41, 0xe1, 0xcd, 0x19, 0x01, 0x42, - 0x22, 0x00, 0xcb, 0x19, 0x01, 0x42, 0x15, 0x06, 0xcc, 0x19, 0x41, 0xe1, - 0xc8, 0x19, 0x01, 0x42, 0x71, 0x00, 0xd0, 0x19, 0x41, 0xe1, 0xc2, 0x19, - 0x01, 0x42, 0x22, 0x00, 0xc3, 0x19, 0x41, 0xe1, 0xc1, 0x19, 0x01, 0x42, - 0x24, 0x02, 0xb2, 0x19, 0x01, 0x42, 0xff, 0x04, 0xbc, 0x19, 0x01, 0x42, - 0x34, 0x22, 0xb7, 0x19, 0x41, 0xe1, 0xc9, 0x19, 0x01, 0x42, 0x74, 0x00, - 0xcf, 0x19, 0x41, 0xe1, 0xae, 0x19, 0x01, 0x42, 0x22, 0x00, 0xaf, 0x19, - 0x41, 0xe1, 0xb5, 0x19, 0x01, 0x42, 0x22, 0x00, 0xb6, 0x19, 0x41, 0xe9, - 0xa3, 0x19, 0x41, 0xe1, 0xb0, 0x19, 0x01, 0x42, 0x22, 0x00, 0xb1, 0x19, - 0x41, 0xe1, 0xbf, 0x19, 0x01, 0xa4, 0x06, 0x42, 0x22, 0x00, 0xc0, 0x19, - 0x41, 0xe1, 0xba, 0x19, 0x01, 0x42, 0x22, 0x00, 0xbb, 0x19, 0x41, 0xe1, - 0xb3, 0x19, 0x01, 0x42, 0x22, 0x00, 0xb4, 0x19, 0x41, 0xe1, 0xc4, 0x19, - 0x01, 0x42, 0x22, 0x00, 0xc5, 0x19, 0x41, 0xe1, 0xa1, 0x19, 0x01, 0xe9, - 0xab, 0x19, 0x01, 0xf5, 0xad, 0x19, 0x41, 0x48, 0xe2, 0xc4, 0x85, 0xf4, - 0x01, 0x47, 0xe2, 0x82, 0xa6, 0x20, 0x40, 0x06, 0xc4, 0x06, 0xa3, 0x01, - 0x07, 0xc1, 0x05, 0x23, 0x05, 0x2f, 0x03, 0x01, 0xff, 0x44, 0x4a, 0xed, - 0xee, 0xe4, 0x01, 0x45, 0xbb, 0xe5, 0xec, 0xe4, 0x01, 0x44, 0x86, 0xee, - 0xeb, 0xe4, 0x01, 0x45, 0x09, 0xe8, 0xef, 0xe4, 0x01, 0x45, 0x4a, 0xe8, - 0xed, 0xe4, 0x41, 0xe1, 0xd5, 0xe4, 0x81, 0x65, 0xe5, 0xe4, 0xe4, 0x81, - 0x43, 0xe9, 0xda, 0xe4, 0x81, 0x2c, 0xef, 0xd0, 0xe4, 0x81, 0x15, 0xf5, - 0xdf, 0xe4, 0xc1, 0x00, 0xe3, 0xe0, 0xe4, 0x01, 0xe4, 0xe1, 0xe4, 0x01, - 0xeb, 0xe2, 0xe4, 0x01, 0xf2, 0xe3, 0xe4, 0x41, 0xec, 0xd2, 0xe4, 0x01, - 0x42, 0x1d, 0x01, 0xd4, 0xe4, 0x01, 0xf0, 0xd1, 0xe4, 0x01, 0xf9, 0xd3, - 0xe4, 0x41, 0x42, 0x7f, 0x02, 0xdc, 0xe4, 0x01, 0xe8, 0xde, 0xe4, 0x01, - 0xf3, 0xdb, 0xe4, 0x01, 0xf4, 0xdd, 0xe4, 0x41, 0xe7, 0xe6, 0xe4, 0x01, - 0x42, 0x0f, 0x07, 0xea, 0xe4, 0x01, 0xed, 0xe7, 0xe4, 0x01, 0xee, 0xe8, - 0xe4, 0x81, 0x06, 0x42, 0xc3, 0x05, 0xe9, 0xe4, 0x41, 0xee, 0xe5, 0xe4, - 0x41, 0xe2, 0xd7, 0xe4, 0x01, 0xe8, 0xd9, 0xe4, 0x01, 0xea, 0xd6, 0xe4, - 0x01, 0x42, 0xf6, 0x19, 0xd8, 0xe4, 0x41, 0x45, 0xc3, 0x0a, 0xf8, 0xe4, - 0x01, 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0xf9, 0xe4, 0x01, 0x43, 0xbf, 0x0a, - 0xf1, 0xe4, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xa1, 0x1d, 0xf0, 0xe4, - 0x41, 0x44, 0x25, 0x01, 0xf3, 0xe4, 0x01, 0x42, 0x15, 0x02, 0xf2, 0xe4, - 0x41, 0x44, 0x27, 0x1d, 0xf7, 0xe4, 0x01, 0x42, 0x60, 0x25, 0xf6, 0xe4, - 0x41, 0x43, 0xa7, 0x05, 0xf5, 0xe4, 0x01, 0x43, 0xcb, 0x06, 0xf4, 0xe4, - 0x41, 0x07, 0x60, 0xcc, 0x06, 0x42, 0x74, 0x00, 0x07, 0x22, 0x40, 0x55, - 0x25, 0x39, 0xab, 0x08, 0x01, 0x07, 0xc1, 0x05, 0x3c, 0x07, 0x2f, 0x39, - 0x01, 0xff, 0xa6, 0x29, 0x43, 0xbf, 0x0a, 0xa7, 0x08, 0x81, 0x1c, 0xb4, - 0x01, 0xff, 0x42, 0x92, 0x01, 0xad, 0x08, 0x01, 0x44, 0x25, 0x01, 0xa9, - 0x08, 0x01, 0xb7, 0x01, 0xff, 0x44, 0x29, 0x1d, 0xae, 0x08, 0x01, 0xef, - 0xa8, 0x08, 0x41, 0x48, 0x21, 0x11, 0xaf, 0x08, 0x41, 0x43, 0xa7, 0x05, - 0xac, 0x08, 0x01, 0x43, 0xcb, 0x06, 0xaa, 0x08, 0x41, 0xa1, 0xb9, 0x01, - 0x44, 0x0a, 0xec, 0x83, 0x08, 0x01, 0x46, 0xda, 0x48, 0x85, 0x08, 0x01, - 0x06, 0x3d, 0x2c, 0x73, 0x45, 0xa1, 0xa8, 0x84, 0x08, 0x01, 0x42, 0xb0, - 0x01, 0x87, 0x08, 0x81, 0x60, 0x44, 0x8e, 0xed, 0x8f, 0x08, 0x01, 0x46, - 0x9c, 0xda, 0x91, 0x08, 0x01, 0x43, 0x89, 0x05, 0x93, 0x08, 0x01, 0x43, - 0x54, 0x22, 0x95, 0x08, 0x01, 0x42, 0x6f, 0x02, 0x98, 0x08, 0x01, 0x44, - 0xae, 0xc5, 0x9a, 0x08, 0x01, 0x44, 0xfa, 0x64, 0x9b, 0x08, 0x01, 0xb3, - 0x20, 0xb4, 0x12, 0x43, 0xc0, 0x88, 0x88, 0x08, 0x01, 0x44, 0x58, 0x51, - 0x8d, 0x08, 0x01, 0x45, 0x52, 0x51, 0x89, 0x08, 0x41, 0x42, 0x9a, 0x43, - 0x9e, 0x08, 0x01, 0x43, 0x39, 0x25, 0x8b, 0x08, 0x41, 0xa1, 0x06, 0x43, - 0x0e, 0x16, 0x9d, 0x08, 0x41, 0x43, 0x89, 0xe7, 0x99, 0x08, 0x01, 0x44, - 0x39, 0xe1, 0x96, 0x08, 0x41, 0x42, 0x53, 0x00, 0x8a, 0x08, 0x41, 0x45, - 0x58, 0xab, 0x80, 0x08, 0x01, 0x44, 0x0a, 0xec, 0x82, 0x08, 0x01, 0x42, - 0xb0, 0x01, 0x86, 0x08, 0x01, 0x44, 0x8e, 0xed, 0x8e, 0x08, 0x01, 0x46, - 0x9c, 0xda, 0x90, 0x08, 0x01, 0x43, 0x89, 0x05, 0x92, 0x08, 0x01, 0x43, - 0x54, 0x22, 0x94, 0x08, 0x01, 0x44, 0x2a, 0x49, 0x9c, 0x08, 0x01, 0x44, - 0x58, 0x51, 0x8c, 0x08, 0x41, 0x44, 0x48, 0x3c, 0x81, 0x08, 0x01, 0x43, - 0xf7, 0x19, 0x97, 0x08, 0x41, 0xa3, 0x58, 0x4c, 0x5a, 0x0a, 0xc2, 0x22, - 0x00, 0x08, 0xa3, 0x21, 0x42, 0x47, 0x3f, 0x0d, 0x0f, 0x22, 0x00, 0xb3, - 0x24, 0x4e, 0xb6, 0x7b, 0x09, 0x2a, 0x00, 0x45, 0xe1, 0x16, 0xc3, 0x22, - 0x80, 0x06, 0x52, 0x4c, 0x55, 0xff, 0x2a, 0x40, 0x0f, 0xe4, 0x67, 0x01, - 0xff, 0x43, 0xd4, 0x09, 0x03, 0x2a, 0x00, 0x44, 0xb7, 0x27, 0x04, 0x2a, - 0x40, 0x06, 0x34, 0x24, 0x06, 0x48, 0xc6, 0x6e, 0x11, 0x22, 0x40, 0x55, - 0x47, 0x3b, 0x05, 0x2a, 0x00, 0x4e, 0x88, 0x7c, 0x06, 0x2a, 0x40, 0x43, - 0x1a, 0x00, 0xc0, 0x22, 0x00, 0x42, 0x0c, 0x00, 0xc1, 0x22, 0x40, 0x07, - 0x6e, 0x22, 0x06, 0x48, 0x56, 0x2c, 0x10, 0x22, 0x40, 0x4c, 0x59, 0x8c, - 0x00, 0x2a, 0x00, 0x4d, 0xb4, 0x85, 0x01, 0x2a, 0x00, 0x4e, 0xb6, 0x7b, - 0x02, 0x2a, 0x40, 0xa1, 0xc3, 0x65, 0xa5, 0x96, 0x48, 0xa9, 0xc5, 0x3f, - 0xaf, 0xa9, 0x20, 0x03, 0xa3, 0x1d, 0x97, 0x1e, 0xb5, 0xf6, 0x0c, 0x07, - 0xf6, 0xd4, 0x01, 0xff, 0x0f, 0x6d, 0x32, 0xb1, 0x0c, 0x06, 0xc4, 0x06, - 0xea, 0x0b, 0x18, 0xcd, 0x27, 0xa3, 0x0b, 0xac, 0xa2, 0x05, 0x10, 0x29, - 0x0c, 0x91, 0x05, 0x0a, 0x15, 0xad, 0xca, 0x04, 0xb3, 0x8d, 0x02, 0xb4, - 0xb3, 0x01, 0x0b, 0xd1, 0x75, 0x01, 0xff, 0xa1, 0x97, 0x01, 0xe5, 0x31, - 0x10, 0x80, 0x8b, 0x01, 0x4c, 0x91, 0x8d, 0x71, 0x10, 0x00, 0xe9, 0x2d, - 0x10, 0x80, 0x7c, 0x06, 0x5a, 0xda, 0x68, 0x04, 0xc2, 0xc5, 0x5a, 0xb3, - 0x36, 0x47, 0x60, 0xd3, 0x2b, 0x10, 0x00, 0xf5, 0x2f, 0x10, 0x80, 0x27, - 0x08, 0x9b, 0xbe, 0x11, 0x12, 0xf3, 0x30, 0x01, 0xff, 0x42, 0x97, 0x02, - 0x67, 0x10, 0x00, 0x42, 0x87, 0x13, 0x68, 0x10, 0x40, 0xec, 0x58, 0x10, - 0x80, 0x09, 0xf2, 0x56, 0x10, 0xc0, 0x00, 0xf2, 0x57, 0x10, 0x40, 0xec, - 0x59, 0x10, 0x40, 0xf5, 0x30, 0x10, 0x40, 0x4c, 0x79, 0x8d, 0x62, 0x10, - 0x00, 0x04, 0x90, 0x00, 0x01, 0xff, 0x42, 0x31, 0x12, 0x83, 0x10, 0x00, - 0xe5, 0x84, 0x10, 0x80, 0x06, 0x47, 0x4a, 0xce, 0x86, 0x10, 0x40, 0x46, - 0x5b, 0x00, 0x85, 0x10, 0x40, 0x42, 0xb1, 0x27, 0x33, 0x10, 0x00, 0xef, - 0x34, 0x10, 0x40, 0x42, 0x27, 0x01, 0x74, 0x10, 0x00, 0x42, 0x17, 0x50, - 0x72, 0x10, 0x00, 0xf5, 0x73, 0x10, 0x40, 0xe9, 0x2e, 0x10, 0x40, 0x46, - 0x5b, 0x00, 0x35, 0x10, 0x40, 0xe1, 0x2c, 0x10, 0x00, 0xe9, 0x32, 0x10, - 0xc0, 0x00, 0x45, 0x36, 0xe8, 0x9c, 0x10, 0xc0, 0x00, 0xe9, 0x9d, 0x10, - 0x40, 0x0f, 0xe3, 0x68, 0x11, 0x14, 0x8f, 0x43, 0x01, 0xff, 0x45, 0xdb, - 0xe3, 0x63, 0x10, 0x00, 0x46, 0x60, 0xda, 0x64, 0x10, 0x40, 0x45, 0xc3, - 0x0a, 0xf8, 0xa9, 0x00, 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0xf9, 0xa9, 0x00, - 0x43, 0xbf, 0x0a, 0xf1, 0xa9, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xa1, - 0x1d, 0xf0, 0xa9, 0x40, 0x44, 0x25, 0x01, 0xf3, 0xa9, 0x00, 0x42, 0x15, - 0x02, 0xf2, 0xa9, 0x40, 0x44, 0x27, 0x1d, 0xf7, 0xa9, 0x00, 0x42, 0x60, - 0x25, 0xf6, 0xa9, 0x40, 0x43, 0xa7, 0x05, 0xf5, 0xa9, 0x00, 0x43, 0xcb, - 0x06, 0xf4, 0xa9, 0x40, 0x0a, 0xdd, 0xa8, 0xf3, 0x01, 0x04, 0x30, 0x03, - 0x47, 0x06, 0xf4, 0x15, 0x01, 0xff, 0xa1, 0x23, 0x49, 0x02, 0xb5, 0x4d, - 0x10, 0x00, 0x48, 0xd2, 0xc3, 0x4f, 0x10, 0x00, 0x48, 0x32, 0xc5, 0x4c, - 0x10, 0x00, 0x05, 0xf6, 0x53, 0x01, 0xff, 0x4b, 0xad, 0x00, 0x9f, 0x10, - 0x00, 0x43, 0xbf, 0x0a, 0x9e, 0x10, 0x40, 0x4d, 0x70, 0x81, 0x4e, 0x10, - 0x00, 0x05, 0x3f, 0xcf, 0x01, 0xff, 0x4b, 0xad, 0x00, 0x77, 0xaa, 0x00, - 0x43, 0xbf, 0x0a, 0x78, 0xaa, 0x00, 0x43, 0xd0, 0x09, 0x79, 0xaa, 0x40, - 0xa1, 0x99, 0x01, 0x49, 0x50, 0x12, 0x37, 0x10, 0x00, 0x0c, 0xed, 0x8e, - 0x86, 0x01, 0x4e, 0x36, 0x78, 0x4a, 0x10, 0x00, 0x4e, 0x94, 0x79, 0x7b, - 0xaa, 0x00, 0x54, 0x6b, 0x44, 0x8f, 0x10, 0x00, 0xb3, 0x35, 0x0f, 0x07, - 0x72, 0x29, 0x02, 0x02, 0x00, 0x19, 0x17, 0xf3, 0x30, 0x01, 0xff, 0xd1, - 0x69, 0x10, 0x00, 0xd2, 0x6a, 0x10, 0x00, 0xd3, 0x6b, 0x10, 0x00, 0xd4, - 0x6c, 0x10, 0x00, 0xd5, 0x6d, 0x10, 0x40, 0x44, 0x5d, 0x23, 0x39, 0x10, - 0x00, 0x45, 0xa3, 0x4a, 0x38, 0x10, 0x40, 0xd2, 0x7c, 0xaa, 0x00, 0xd5, - 0x7d, 0xaa, 0x40, 0x46, 0x60, 0x0a, 0x4b, 0x10, 0x00, 0x04, 0x90, 0x00, - 0x01, 0xff, 0x08, 0x42, 0xc2, 0x1b, 0x43, 0x5e, 0x51, 0xe5, 0xa9, 0x00, - 0x05, 0x05, 0x31, 0x01, 0xff, 0xd2, 0x87, 0x10, 0x00, 0xd3, 0x88, 0x10, - 0x00, 0xd5, 0x89, 0x10, 0x00, 0xd6, 0x8a, 0x10, 0x40, 0x4d, 0xfb, 0x80, - 0x8d, 0x10, 0x00, 0x05, 0x05, 0x31, 0x01, 0xff, 0xd2, 0x8b, 0x10, 0x00, - 0xd3, 0x8c, 0x10, 0x40, 0xd1, 0x9a, 0x10, 0x00, 0xd3, 0x9b, 0x10, 0x40, - 0x47, 0xd1, 0x15, 0x36, 0x10, 0x00, 0x43, 0xd0, 0x2c, 0x3a, 0x10, 0x40, - 0x45, 0xc3, 0x0a, 0x98, 0x10, 0x00, 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0x99, - 0x10, 0x00, 0x43, 0xbf, 0x0a, 0x91, 0x10, 0x00, 0xb3, 0x14, 0xb4, 0x06, - 0x44, 0xa1, 0x1d, 0x90, 0x10, 0x40, 0x44, 0x25, 0x01, 0x93, 0x10, 0x00, - 0x42, 0x15, 0x02, 0x92, 0x10, 0x40, 0x44, 0x27, 0x1d, 0x97, 0x10, 0x00, - 0x42, 0x60, 0x25, 0x96, 0x10, 0x40, 0x43, 0xa7, 0x05, 0x95, 0x10, 0x00, - 0x43, 0xcb, 0x06, 0x94, 0x10, 0x40, 0x45, 0xc3, 0x0a, 0xd8, 0x16, 0x01, - 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0xd9, 0x16, 0x01, 0x43, 0xbf, 0x0a, 0xd1, - 0x16, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xa1, 0x1d, 0xd0, 0x16, 0x41, - 0x44, 0x25, 0x01, 0xd3, 0x16, 0x01, 0x42, 0x15, 0x02, 0xd2, 0x16, 0x41, - 0x44, 0x27, 0x1d, 0xd7, 0x16, 0x01, 0x42, 0x60, 0x25, 0xd6, 0x16, 0x41, - 0x43, 0xa7, 0x05, 0xd5, 0x16, 0x01, 0x43, 0xcb, 0x06, 0xd4, 0x16, 0x41, - 0x54, 0xc7, 0x42, 0x70, 0xaa, 0x00, 0x52, 0xf6, 0x53, 0xe6, 0xa9, 0x40, - 0x06, 0xc2, 0x05, 0x17, 0x0f, 0x73, 0x6f, 0x01, 0xff, 0x42, 0x93, 0x0a, - 0x76, 0xaa, 0x00, 0x43, 0x2c, 0xf1, 0x74, 0xaa, 0x00, 0x42, 0xa3, 0xcf, - 0x75, 0xaa, 0x40, 0xe1, 0x21, 0x10, 0x80, 0xd3, 0x05, 0xa2, 0xc6, 0x05, - 0xa3, 0xb9, 0x05, 0xa4, 0xa0, 0x05, 0xe5, 0x27, 0x10, 0x80, 0x83, 0x05, - 0xa7, 0xf0, 0x04, 0x42, 0x22, 0x00, 0x1f, 0x10, 0x00, 0xe9, 0x23, 0x10, - 0x80, 0xe0, 0x04, 0xaa, 0xd3, 0x04, 0xab, 0xc4, 0x03, 0xac, 0xb7, 0x03, - 0xad, 0x8f, 0x03, 0xae, 0xf0, 0x02, 0xef, 0x29, 0x10, 0x00, 0xb0, 0xdf, - 0x02, 0xb2, 0xd2, 0x02, 0xb3, 0xb2, 0x01, 0xb4, 0x3c, 0xf5, 0x25, 0x10, - 0x80, 0x33, 0x08, 0x9b, 0xbe, 0x1d, 0xb7, 0x06, 0x42, 0x34, 0x22, 0x1a, - 0x10, 0x40, 0xe1, 0x1d, 0x10, 0x00, 0x11, 0xf4, 0x30, 0x01, 0xff, 0x43, - 0x51, 0x02, 0x66, 0x10, 0x00, 0x43, 0x8f, 0x00, 0x65, 0x10, 0x40, 0xec, - 0x54, 0x10, 0x80, 0x09, 0xf2, 0x52, 0x10, 0xc0, 0x00, 0xf2, 0x53, 0x10, - 0x40, 0xec, 0x55, 0x10, 0x40, 0xf5, 0x26, 0x10, 0x40, 0xe1, 0x10, 0x10, - 0x80, 0x13, 0x42, 0x22, 0x00, 0x11, 0x10, 0x00, 0xb4, 0x01, 0xff, 0xe1, - 0x0b, 0x10, 0x00, 0x42, 0x22, 0x00, 0x0c, 0x10, 0x40, 0x08, 0xe4, 0x68, - 0x01, 0xff, 0xa2, 0x4b, 0xa4, 0x33, 0x42, 0xe1, 0x07, 0xe8, 0xa9, 0x00, - 0xa7, 0x21, 0xaa, 0x15, 0x43, 0xdd, 0x0d, 0xfa, 0xa9, 0x00, 0xae, 0x01, - 0xff, 0x42, 0xff, 0x04, 0xef, 0xa9, 0x00, 0x42, 0x34, 0x22, 0xe7, 0xa9, - 0x40, 0xe1, 0xeb, 0xa9, 0x00, 0x42, 0x22, 0x00, 0xec, 0xa9, 0x40, 0xe1, - 0xe9, 0xa9, 0x00, 0x42, 0x22, 0x00, 0xea, 0xa9, 0x40, 0xe1, 0xfb, 0xa9, - 0x00, 0xa4, 0x06, 0x42, 0x22, 0x00, 0xfc, 0xa9, 0x40, 0xe1, 0xed, 0xa9, - 0x00, 0x42, 0x22, 0x00, 0xee, 0xa9, 0x40, 0xe1, 0xfd, 0xa9, 0x00, 0x42, - 0x22, 0x00, 0xfe, 0xa9, 0x40, 0xe1, 0x1e, 0x10, 0x00, 0x4d, 0xb1, 0x81, - 0x61, 0x10, 0x00, 0xa8, 0x06, 0x42, 0x15, 0x06, 0x51, 0x10, 0x40, 0xe1, - 0x50, 0x10, 0x80, 0x11, 0x0b, 0xc1, 0xa2, 0x01, 0xff, 0x43, 0xef, 0x1f, - 0x7e, 0xaa, 0x00, 0x43, 0xa4, 0x02, 0x7f, 0xaa, 0x40, 0x02, 0x92, 0x00, - 0x01, 0xff, 0xe1, 0x22, 0x10, 0x00, 0xa2, 0x60, 0xa3, 0x54, 0x42, 0xa1, - 0x10, 0x7b, 0x10, 0x00, 0x42, 0xe1, 0x07, 0x7e, 0x10, 0x00, 0xa7, 0x3c, - 0x42, 0x22, 0x00, 0x81, 0x10, 0x00, 0x43, 0x11, 0xf1, 0xe2, 0xa9, 0x00, - 0xab, 0x24, 0xae, 0x12, 0x43, 0x5d, 0x1c, 0x7d, 0x10, 0x00, 0x43, 0x8f, - 0x00, 0x80, 0x10, 0x00, 0x42, 0x59, 0x00, 0x79, 0x10, 0x40, 0xe1, 0x7c, - 0x10, 0x00, 0x42, 0xff, 0x04, 0xe3, 0xa9, 0x00, 0x42, 0x34, 0x22, 0x7a, - 0x10, 0x40, 0xe1, 0x75, 0x10, 0x00, 0x42, 0x22, 0x00, 0x76, 0x10, 0x40, - 0xe1, 0x77, 0x10, 0x00, 0x42, 0x22, 0x00, 0xe0, 0xa9, 0x40, 0xe1, 0x78, - 0x10, 0x00, 0x42, 0x22, 0x00, 0xe1, 0xa9, 0x40, 0xe1, 0x7f, 0x10, 0x00, - 0x42, 0x22, 0x00, 0xe4, 0xa9, 0x40, 0xe1, 0x1b, 0x10, 0x00, 0x4f, 0xca, - 0x72, 0x8e, 0x10, 0x40, 0xe1, 0x15, 0x10, 0x00, 0x42, 0x22, 0x00, 0x16, - 0x10, 0x40, 0xe1, 0x14, 0x10, 0x00, 0x42, 0x24, 0x02, 0x04, 0x10, 0x00, - 0xae, 0x06, 0x42, 0x34, 0x22, 0x09, 0x10, 0x40, 0xe1, 0x0f, 0x10, 0x00, - 0x42, 0x34, 0x22, 0x0a, 0x10, 0x40, 0xe1, 0x19, 0x10, 0x00, 0x03, 0xb6, - 0x00, 0x01, 0xff, 0x02, 0xc4, 0x26, 0x10, 0xe5, 0x28, 0x10, 0x00, 0x43, - 0x11, 0xf1, 0x5b, 0x10, 0x00, 0x43, 0x03, 0x47, 0x5a, 0x10, 0x40, 0xe1, - 0x5c, 0x10, 0x00, 0xe5, 0x5d, 0x10, 0x40, 0xe1, 0x1c, 0x10, 0x00, 0x42, - 0x74, 0x00, 0x20, 0x10, 0x40, 0xe1, 0x00, 0x10, 0x00, 0x42, 0x22, 0x00, - 0x01, 0x10, 0xc0, 0x00, 0x04, 0xca, 0x42, 0x01, 0xff, 0xa3, 0x70, 0xa4, - 0x5c, 0x42, 0xe1, 0x07, 0x6f, 0xaa, 0x00, 0x42, 0x24, 0x02, 0x60, 0xaa, - 0x00, 0xa8, 0x44, 0xaa, 0x38, 0x43, 0xdd, 0x0d, 0x6e, 0xaa, 0x00, 0xae, - 0x26, 0x42, 0x71, 0x00, 0x73, 0xaa, 0x00, 0x42, 0x15, 0x06, 0x6c, 0xaa, - 0x00, 0x02, 0xc3, 0x05, 0x0c, 0x42, 0x4c, 0x26, 0x71, 0xaa, 0x00, 0x42, - 0x59, 0x00, 0x72, 0xaa, 0x40, 0xe1, 0x66, 0xaa, 0x00, 0x42, 0x22, 0x00, - 0x67, 0xaa, 0x40, 0xe1, 0x6b, 0xaa, 0x00, 0x42, 0x34, 0x22, 0x65, 0xaa, - 0x40, 0xe1, 0x63, 0xaa, 0x00, 0x42, 0x22, 0x00, 0x64, 0xaa, 0x40, 0xe1, - 0x6d, 0xaa, 0x00, 0x42, 0x22, 0x00, 0x6e, 0xaa, 0x40, 0xa4, 0x06, 0x42, - 0x22, 0x00, 0x6a, 0xaa, 0x40, 0xe1, 0x68, 0xaa, 0x00, 0x42, 0x22, 0x00, - 0x69, 0xaa, 0x40, 0xe1, 0x61, 0xaa, 0x00, 0x42, 0x22, 0x00, 0x62, 0xaa, - 0x40, 0xe1, 0x07, 0x10, 0x00, 0x42, 0x22, 0x00, 0x08, 0x10, 0x40, 0xe9, - 0x24, 0x10, 0x40, 0xe1, 0x02, 0x10, 0x00, 0x42, 0x22, 0x00, 0x03, 0x10, - 0x00, 0x47, 0xf3, 0xc3, 0x3f, 0x10, 0x40, 0x11, 0xce, 0x27, 0x01, 0xff, - 0x44, 0xb6, 0xec, 0x70, 0x10, 0x00, 0x43, 0xcc, 0x44, 0x6e, 0x10, 0x00, - 0x43, 0xfe, 0xef, 0x6f, 0x10, 0x40, 0xe1, 0x12, 0x10, 0x00, 0xa4, 0x06, - 0x42, 0x22, 0x00, 0x13, 0x10, 0x40, 0xe1, 0x0d, 0x10, 0x00, 0x42, 0x22, - 0x00, 0x0e, 0x10, 0x40, 0xe1, 0x05, 0x10, 0x00, 0x42, 0x22, 0x00, 0x06, - 0x10, 0x40, 0xe1, 0x17, 0x10, 0x00, 0x42, 0x22, 0x00, 0x18, 0x10, 0x40, - 0x47, 0x3f, 0xcf, 0x7a, 0xaa, 0x00, 0xf5, 0x2a, 0x10, 0x40, 0x45, 0xc3, - 0x0a, 0xe2, 0x16, 0x01, 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0xe3, 0x16, 0x01, - 0x43, 0xbf, 0x0a, 0xdb, 0x16, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xa1, - 0x1d, 0xda, 0x16, 0x41, 0x44, 0x25, 0x01, 0xdd, 0x16, 0x01, 0x42, 0x15, - 0x02, 0xdc, 0x16, 0x41, 0x44, 0x27, 0x1d, 0xe1, 0x16, 0x01, 0x42, 0x60, - 0x25, 0xe0, 0x16, 0x41, 0x43, 0xa7, 0x05, 0xdf, 0x16, 0x01, 0x43, 0xcb, - 0x06, 0xde, 0x16, 0x41, 0x45, 0xc3, 0x0a, 0x48, 0x10, 0x00, 0xa6, 0x2e, - 0x44, 0x46, 0x2a, 0x49, 0x10, 0x00, 0x43, 0xbf, 0x0a, 0x41, 0x10, 0x00, - 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xa1, 0x1d, 0x40, 0x10, 0x40, 0x44, 0x25, - 0x01, 0x43, 0x10, 0x00, 0x42, 0x15, 0x02, 0x42, 0x10, 0x40, 0x44, 0x27, - 0x1d, 0x47, 0x10, 0x00, 0x42, 0x60, 0x25, 0x46, 0x10, 0x40, 0x43, 0xa7, - 0x05, 0x45, 0x10, 0x00, 0x43, 0xcb, 0x06, 0x44, 0x10, 0x40, 0xad, 0x06, - 0x4e, 0xac, 0x7a, 0x82, 0x10, 0x40, 0x06, 0x7d, 0x32, 0x17, 0x0a, 0x7f, - 0xac, 0x01, 0xff, 0x42, 0x74, 0x00, 0x60, 0x10, 0x00, 0x42, 0x6c, 0x00, - 0x5f, 0x10, 0x00, 0x42, 0xff, 0x04, 0x5e, 0x10, 0x40, 0x42, 0x22, 0x00, - 0x3e, 0x10, 0x00, 0x42, 0x71, 0x00, 0x3c, 0x10, 0x00, 0x42, 0xa9, 0x01, - 0x3d, 0x10, 0x00, 0x42, 0x34, 0x22, 0x3b, 0x10, 0x40, 0x03, 0x0f, 0x21, - 0x8d, 0x11, 0x02, 0x8d, 0x04, 0xb6, 0x0e, 0xb3, 0x01, 0xff, 0x45, 0x12, - 0xe4, 0x44, 0xf3, 0x81, 0xa5, 0x0e, 0x02, 0x36, 0x00, 0x01, 0xff, 0x80, - 0x8b, 0x0e, 0x03, 0x13, 0x00, 0x01, 0xff, 0x48, 0xd7, 0xa6, 0xb9, 0xf3, - 0x81, 0xf8, 0x0d, 0x44, 0x68, 0x27, 0xb5, 0xf3, 0x01, 0xb3, 0x01, 0xff, - 0x44, 0x32, 0xec, 0xbc, 0xf3, 0x01, 0x06, 0xf4, 0x15, 0x01, 0xff, 0x0b, - 0x32, 0x97, 0xd3, 0x0d, 0xa2, 0x86, 0x0d, 0xa3, 0xe0, 0x0a, 0xa4, 0x8b, - 0x0a, 0xa5, 0xd5, 0x09, 0xa6, 0xd2, 0x08, 0xa7, 0x83, 0x08, 0x02, 0x22, - 0x00, 0xe2, 0x07, 0x4d, 0xb5, 0x82, 0x98, 0xd1, 0x01, 0xab, 0x81, 0x07, - 0xac, 0xe2, 0x06, 0xad, 0x9c, 0x06, 0xae, 0xf7, 0x05, 0xaf, 0x98, 0x05, - 0xb0, 0xd5, 0x04, 0x02, 0x7c, 0x00, 0x9e, 0x04, 0xb2, 0xe9, 0x03, 0xb3, - 0xa4, 0x02, 0xb4, 0x30, 0xb6, 0x22, 0xb7, 0x0a, 0x4a, 0xb0, 0x62, 0x43, - 0xd1, 0x01, 0xfa, 0x8e, 0xd1, 0x41, 0x05, 0x30, 0xb1, 0x06, 0x4f, 0x57, - 0x6d, 0xb3, 0xd1, 0x41, 0x44, 0x68, 0x27, 0x5d, 0xd1, 0x01, 0x44, 0xa4, - 0x32, 0x3b, 0xd1, 0x41, 0x44, 0x53, 0x07, 0xd3, 0xd1, 0x01, 0x4c, 0x51, - 0x91, 0x57, 0xd1, 0x41, 0x06, 0x56, 0xd8, 0xb3, 0x01, 0xa8, 0x9a, 0x01, - 0x47, 0x30, 0xd1, 0xd8, 0xd1, 0x81, 0x8c, 0x01, 0xf2, 0x96, 0xd1, 0x81, - 0x1c, 0x43, 0x5d, 0x01, 0x97, 0xd1, 0x81, 0x06, 0x4d, 0xf4, 0x88, 0x17, - 0xd1, 0x41, 0x80, 0x01, 0xff, 0x45, 0xf9, 0x0d, 0x99, 0xd1, 0x01, 0x42, - 0x50, 0x02, 0x9a, 0xd1, 0x41, 0x06, 0x03, 0x02, 0x01, 0xff, 0x0a, 0xf0, - 0x37, 0x11, 0x15, 0xea, 0x37, 0x01, 0xff, 0x45, 0xe1, 0x02, 0x55, 0xd1, - 0x01, 0x45, 0xad, 0x02, 0x54, 0xd1, 0x41, 0x05, 0x4f, 0x14, 0x41, 0x05, - 0xc3, 0x00, 0x31, 0x06, 0xc8, 0x00, 0x21, 0x03, 0x11, 0x15, 0x01, 0xff, - 0x45, 0xe1, 0x02, 0x49, 0xd1, 0x01, 0x06, 0xc8, 0x00, 0x06, 0x45, 0xad, - 0x02, 0x48, 0xd1, 0x41, 0x45, 0xe1, 0x02, 0x51, 0xd1, 0x01, 0x45, 0xad, - 0x02, 0x50, 0xd1, 0x41, 0x45, 0xe1, 0x02, 0x4d, 0xd1, 0x01, 0x45, 0xad, - 0x02, 0x4c, 0xd1, 0x41, 0x45, 0xe1, 0x02, 0x4b, 0xd1, 0x01, 0x45, 0xad, - 0x02, 0x4a, 0xd1, 0x41, 0x45, 0xe1, 0x02, 0x4f, 0xd1, 0x01, 0x45, 0xad, - 0x02, 0x4e, 0xd1, 0x41, 0x4a, 0xd3, 0xa3, 0xdc, 0xd1, 0x41, 0x0c, 0xbd, - 0x8e, 0x06, 0x4e, 0x2e, 0x7a, 0x18, 0xd1, 0x41, 0x44, 0x68, 0x27, 0x62, - 0xd1, 0x01, 0x44, 0xa4, 0x32, 0x40, 0xd1, 0x41, 0x1b, 0x6a, 0x1b, 0x18, - 0x19, 0x6c, 0x1b, 0x01, 0xff, 0x4a, 0xdf, 0x6c, 0xc8, 0xd1, 0x01, 0x48, - 0xe1, 0x6c, 0xc7, 0xd1, 0xc1, 0x00, 0x4d, 0xfc, 0x7d, 0xc9, 0xd1, 0x41, - 0x4a, 0xdf, 0x6c, 0xcb, 0xd1, 0x81, 0x06, 0x48, 0xe1, 0x6c, 0xca, 0xd1, - 0x41, 0x0c, 0xfc, 0x7d, 0x01, 0xff, 0xd1, 0xcc, 0xd1, 0x01, 0xd2, 0xcd, - 0xd1, 0x01, 0xd3, 0xce, 0xd1, 0x41, 0x48, 0xfa, 0xc1, 0xd6, 0xd1, 0x81, - 0xb4, 0x01, 0xa5, 0x7a, 0xa8, 0x62, 0xa9, 0x25, 0x43, 0x0c, 0x00, 0xe9, - 0xd1, 0x01, 0x06, 0x34, 0x24, 0x06, 0x45, 0x8b, 0xe8, 0x8d, 0xd1, 0x41, - 0xe2, 0xd2, 0xd1, 0x01, 0x09, 0xf1, 0x37, 0x01, 0xff, 0x45, 0xe1, 0x02, - 0x47, 0xd1, 0x01, 0x45, 0xad, 0x02, 0x46, 0xd1, 0x41, 0x4c, 0xf1, 0x90, - 0x00, 0xd1, 0x01, 0xb8, 0x01, 0xff, 0x8d, 0x24, 0xb4, 0x01, 0xff, 0x06, - 0x63, 0x25, 0x11, 0x09, 0x07, 0xbf, 0x01, 0xff, 0x44, 0x68, 0x27, 0x63, - 0xd1, 0x01, 0x44, 0xa4, 0x32, 0x41, 0xd1, 0x41, 0x44, 0x68, 0x27, 0x61, - 0xd1, 0x01, 0x44, 0xa4, 0x32, 0x3f, 0xd1, 0x41, 0x4a, 0x32, 0x7a, 0x1b, - 0xd1, 0x01, 0x50, 0x1a, 0x66, 0x1c, 0xd1, 0x41, 0x04, 0xa7, 0xae, 0x06, - 0x4b, 0xc2, 0x9e, 0x05, 0xd1, 0x41, 0x44, 0xa5, 0x01, 0x31, 0xd1, 0x01, - 0x42, 0x50, 0x02, 0x30, 0xd1, 0x41, 0x43, 0xc6, 0x20, 0x0b, 0xd1, 0x01, - 0x02, 0x7d, 0x02, 0x01, 0xff, 0x07, 0xde, 0xcc, 0x17, 0x07, 0x7a, 0xd0, - 0x01, 0xff, 0x45, 0xe1, 0x02, 0xbe, 0xd1, 0x01, 0x44, 0xa4, 0x32, 0xc6, - 0xd1, 0x01, 0x45, 0xad, 0x02, 0xbd, 0xd1, 0x41, 0x45, 0xe1, 0x02, 0xba, - 0xd1, 0x01, 0x44, 0xa4, 0x32, 0xc4, 0xd1, 0x01, 0x45, 0xad, 0x02, 0xb9, - 0xd1, 0x41, 0x47, 0x6f, 0xca, 0xdb, 0xd1, 0x41, 0xa5, 0x0f, 0xa9, 0x01, - 0xff, 0x4f, 0xfe, 0x6b, 0x07, 0xd1, 0x01, 0x49, 0xdc, 0xb9, 0x8c, 0xd1, - 0x41, 0x04, 0x59, 0x69, 0x06, 0x53, 0x7a, 0x4d, 0x03, 0xd1, 0x41, 0x45, - 0xd3, 0x09, 0x08, 0xd1, 0x01, 0x0a, 0x61, 0xa7, 0x01, 0xff, 0xd1, 0x0d, - 0xd1, 0x01, 0xd2, 0x0e, 0xd1, 0x01, 0xd3, 0x0f, 0xd1, 0x41, 0x06, 0xdb, - 0x02, 0x11, 0x0b, 0x68, 0x9b, 0x01, 0xff, 0x44, 0xc2, 0xeb, 0x38, 0xd1, - 0x01, 0x45, 0x97, 0xe1, 0x39, 0xd1, 0x41, 0x44, 0x68, 0x27, 0x5f, 0xd1, - 0x01, 0x44, 0xa4, 0x32, 0x3d, 0xd1, 0x01, 0x05, 0x83, 0x2c, 0x01, 0xff, - 0x44, 0x60, 0x3a, 0x33, 0xd1, 0x01, 0x45, 0xa5, 0xae, 0x32, 0xd1, 0x41, - 0x53, 0x05, 0x47, 0x56, 0xd1, 0x01, 0xa5, 0x22, 0x44, 0x2e, 0xed, 0x8f, - 0xd1, 0x01, 0x4c, 0xdd, 0x8f, 0x44, 0xd1, 0x01, 0xaf, 0x01, 0xff, 0x45, - 0x69, 0xe2, 0xd4, 0xd1, 0x01, 0x47, 0xa3, 0xd2, 0xd9, 0xd1, 0xc1, 0x00, - 0x47, 0x6f, 0xca, 0xda, 0xd1, 0x41, 0x04, 0x2b, 0xad, 0x06, 0x4c, 0x31, - 0x93, 0xdd, 0xd1, 0x41, 0x44, 0xb9, 0x00, 0xae, 0xd1, 0x01, 0x47, 0x01, - 0xd4, 0xaf, 0xd1, 0x41, 0x02, 0xa2, 0x05, 0x42, 0x0f, 0x35, 0x71, 0x11, - 0x06, 0xbc, 0xbf, 0x01, 0xff, 0x44, 0xc2, 0xeb, 0x36, 0xd1, 0x01, 0x45, - 0x97, 0xe1, 0x37, 0xd1, 0x41, 0xd1, 0x9b, 0xd1, 0x81, 0x20, 0xd2, 0x9c, - 0xd1, 0x01, 0xd3, 0x9d, 0xd1, 0x01, 0xd4, 0x9e, 0xd1, 0x01, 0xd5, 0x9f, - 0xd1, 0x01, 0xd6, 0xa0, 0xd1, 0x01, 0xd7, 0xa1, 0xd1, 0x01, 0xd8, 0xa2, - 0xd1, 0x01, 0xd9, 0xa3, 0xd1, 0x41, 0xd0, 0xa4, 0xd1, 0x01, 0xd1, 0xa5, - 0xd1, 0x41, 0x17, 0xd4, 0x2b, 0x06, 0x4b, 0x31, 0x7a, 0x16, 0xd1, 0x41, - 0x44, 0x68, 0x27, 0x64, 0xd1, 0x01, 0x44, 0xa4, 0x32, 0x42, 0xd1, 0x41, - 0x07, 0xb6, 0x90, 0x12, 0x4a, 0x57, 0xa7, 0xa7, 0xd1, 0x01, 0x4d, 0x73, - 0x85, 0x58, 0xd1, 0x01, 0x4c, 0x69, 0x94, 0x59, 0xd1, 0x41, 0x44, 0xa5, - 0x01, 0x2f, 0xd1, 0x01, 0x42, 0x50, 0x02, 0x2e, 0xd1, 0x41, 0x45, 0x83, - 0xcc, 0xb6, 0xd1, 0x01, 0x44, 0x76, 0xec, 0x90, 0xd1, 0x01, 0x45, 0x7b, - 0xd0, 0xbb, 0xd1, 0x81, 0x21, 0x0d, 0x59, 0x85, 0x11, 0x04, 0x8c, 0x04, - 0x01, 0xff, 0x45, 0x55, 0x64, 0x3a, 0xd1, 0x01, 0x50, 0x4a, 0x64, 0x29, - 0xd1, 0x41, 0x45, 0xe1, 0x02, 0x53, 0xd1, 0x01, 0x45, 0xad, 0x02, 0x52, - 0xd1, 0x41, 0x80, 0x01, 0xff, 0x45, 0xe1, 0x02, 0xbc, 0xd1, 0x01, 0x44, - 0xa4, 0x32, 0xc5, 0xd1, 0x41, 0x4f, 0xff, 0x6a, 0x06, 0xd1, 0x01, 0x44, - 0x59, 0x48, 0xb7, 0xd1, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x4f, 0xdf, 0x6c, - 0xc2, 0xd1, 0x01, 0x4d, 0xe1, 0x6c, 0xc1, 0xd1, 0x41, 0x06, 0xd0, 0xd9, - 0x06, 0x44, 0x25, 0x1c, 0xea, 0xd1, 0x41, 0x46, 0x6c, 0xd7, 0xde, 0xd1, - 0x01, 0xa5, 0x30, 0xa6, 0x22, 0x49, 0xfa, 0xb6, 0xe3, 0xd1, 0x01, 0x12, - 0x66, 0x53, 0x0c, 0x4f, 0xbd, 0x70, 0xe1, 0xd1, 0x01, 0x4a, 0x2f, 0xb1, - 0xe2, 0xd1, 0x41, 0x44, 0xa5, 0x01, 0xe4, 0xd1, 0x01, 0x42, 0x50, 0x02, - 0xe5, 0xd1, 0x41, 0x49, 0xf6, 0xb7, 0xe0, 0xd1, 0x01, 0x48, 0xb3, 0xb6, - 0xe8, 0xd1, 0x41, 0x10, 0x4a, 0x62, 0x06, 0x4b, 0xd0, 0x9d, 0xdf, 0xd1, - 0x41, 0x44, 0xa5, 0x01, 0xe6, 0xd1, 0x01, 0x42, 0x50, 0x02, 0xe7, 0xd1, - 0x41, 0x03, 0x24, 0x00, 0x06, 0x49, 0xe7, 0xbd, 0xa6, 0xd1, 0x41, 0x44, - 0x68, 0x27, 0x5e, 0xd1, 0x01, 0x4a, 0x29, 0xad, 0xb0, 0xd1, 0x01, 0x44, - 0xa4, 0x32, 0x3c, 0xd1, 0x41, 0x45, 0x94, 0xbc, 0x1e, 0xd1, 0x81, 0x34, - 0x09, 0x16, 0xb9, 0x24, 0xb2, 0x01, 0xff, 0x09, 0x37, 0xb3, 0x11, 0x08, - 0xf2, 0xc2, 0x01, 0xff, 0x46, 0x6c, 0xd7, 0xd0, 0xd1, 0x01, 0x46, 0xbc, - 0xd8, 0xd1, 0xd1, 0x41, 0x48, 0x2a, 0xc6, 0x95, 0xd1, 0x01, 0x45, 0xf9, - 0x0d, 0x94, 0xd1, 0x41, 0x44, 0xa5, 0x01, 0xb2, 0xd1, 0x01, 0x42, 0x50, - 0x02, 0xb1, 0xd1, 0x41, 0x08, 0xba, 0xbf, 0x01, 0xff, 0x44, 0xc2, 0xeb, - 0x1f, 0xd1, 0x01, 0x45, 0x97, 0xe1, 0x20, 0xd1, 0x41, 0x45, 0x94, 0xbc, - 0x22, 0xd1, 0x81, 0x68, 0x46, 0x74, 0xd8, 0x10, 0xd1, 0x81, 0x5b, 0xa9, - 0x3a, 0x04, 0xb3, 0xb6, 0x2a, 0xaf, 0x11, 0x04, 0x96, 0xef, 0x01, 0xff, - 0x45, 0xe1, 0x02, 0xc0, 0xd1, 0x01, 0x45, 0xad, 0x02, 0xbf, 0xd1, 0x41, - 0x43, 0x2d, 0x01, 0x91, 0xd1, 0x01, 0x03, 0xf9, 0xbd, 0x01, 0xff, 0x4a, - 0x32, 0x7a, 0x19, 0xd1, 0x01, 0x50, 0x1a, 0x66, 0x1d, 0xd1, 0x41, 0x44, - 0xa5, 0x01, 0x2d, 0xd1, 0x01, 0x42, 0x50, 0x02, 0x2c, 0xd1, 0x41, 0xae, - 0x06, 0x4d, 0x31, 0x88, 0x1a, 0xd1, 0x41, 0x4a, 0x83, 0x4d, 0x02, 0xd1, - 0x01, 0x0e, 0x92, 0x76, 0x01, 0xff, 0xd1, 0x6a, 0xd1, 0x01, 0xd2, 0x6b, - 0xd1, 0x01, 0xd3, 0x6c, 0xd1, 0x41, 0x46, 0xf4, 0x06, 0x11, 0xd1, 0x41, - 0x08, 0xba, 0xbf, 0x01, 0xff, 0x44, 0xc2, 0xeb, 0x23, 0xd1, 0x01, 0x45, - 0x97, 0xe1, 0x24, 0xd1, 0x41, 0x06, 0xc4, 0x0a, 0x23, 0x03, 0x1b, 0x00, - 0x01, 0xff, 0x44, 0x2d, 0xbb, 0x74, 0xd1, 0x01, 0x49, 0x7e, 0xba, 0xa8, - 0xd1, 0x01, 0x46, 0xc7, 0x34, 0x7a, 0xd1, 0x01, 0x44, 0x5e, 0xef, 0x78, - 0xd1, 0x01, 0x43, 0x37, 0x25, 0x76, 0xd1, 0x41, 0x44, 0x68, 0x27, 0x60, - 0xd1, 0x01, 0x44, 0xa4, 0x32, 0x3e, 0xd1, 0x41, 0xa1, 0x31, 0xa5, 0x23, - 0x06, 0x3c, 0x01, 0x0d, 0x09, 0x91, 0xbc, 0x01, 0xff, 0xd1, 0x25, 0xd1, - 0x01, 0xd2, 0x26, 0xd1, 0x41, 0x47, 0x86, 0x4d, 0x01, 0xd1, 0x01, 0x44, - 0x60, 0x3a, 0x2b, 0xd1, 0x01, 0x45, 0xa5, 0xae, 0x2a, 0xd1, 0x41, 0x49, - 0x1d, 0xb5, 0x93, 0xd1, 0x01, 0x4a, 0xb5, 0xa8, 0xa9, 0xd1, 0x41, 0x45, - 0x8b, 0xde, 0x0a, 0xd1, 0x01, 0x47, 0xc4, 0xcf, 0x09, 0xd1, 0x01, 0x42, - 0x6b, 0x1b, 0xb4, 0xd1, 0x81, 0x06, 0x4c, 0x61, 0x93, 0x04, 0xd1, 0x41, - 0x44, 0x6b, 0x6a, 0xb5, 0xd1, 0x41, 0x45, 0x94, 0xbc, 0x21, 0xd1, 0x01, - 0x46, 0x9a, 0xd6, 0x13, 0xd1, 0x01, 0x50, 0xaa, 0x62, 0x45, 0xd1, 0x01, - 0xac, 0xef, 0x01, 0xaf, 0x14, 0xb2, 0x06, 0x47, 0x39, 0xd4, 0x35, 0xd1, - 0x41, 0x47, 0x1f, 0xb5, 0x92, 0xd1, 0x01, 0x43, 0x2f, 0xf1, 0xcf, 0xd1, - 0x41, 0x42, 0xa1, 0x10, 0x0c, 0xd1, 0x01, 0xad, 0x01, 0xff, 0x07, 0xc9, - 0x15, 0x06, 0x48, 0xc2, 0xc5, 0x34, 0xd1, 0x41, 0xa1, 0xb0, 0x01, 0x44, - 0xa4, 0x98, 0x89, 0xd1, 0x01, 0x02, 0x3b, 0x01, 0x93, 0x01, 0x02, 0xaa, - 0x04, 0x71, 0x48, 0x1a, 0xc4, 0xac, 0xd1, 0x01, 0x45, 0x2a, 0xe5, 0x82, - 0xd1, 0x01, 0x47, 0x50, 0xd0, 0x7f, 0xd1, 0x81, 0x58, 0x43, 0x4b, 0x06, - 0x86, 0xd1, 0x01, 0xb3, 0x27, 0xb4, 0x06, 0x46, 0xea, 0xdd, 0xab, 0xd1, - 0x41, 0x45, 0xcf, 0x7b, 0x7d, 0xd1, 0x01, 0xb2, 0x01, 0xff, 0x06, 0x9a, - 0x76, 0x06, 0x4b, 0x73, 0x9b, 0x8b, 0xd1, 0x41, 0xd1, 0x67, 0xd1, 0x01, - 0xd2, 0x68, 0xd1, 0x01, 0xd3, 0x69, 0xd1, 0x41, 0x44, 0x42, 0xa7, 0x88, - 0xd1, 0x01, 0x4d, 0x89, 0x84, 0xad, 0xd1, 0x01, 0x50, 0x7a, 0x64, 0x66, - 0xd1, 0x01, 0xb4, 0x01, 0xff, 0x05, 0xd7, 0xb2, 0x06, 0x42, 0x8a, 0x05, - 0x65, 0xd1, 0x41, 0x46, 0x30, 0xda, 0x7e, 0xd1, 0x01, 0xef, 0x7c, 0xd1, - 0x41, 0x49, 0xd4, 0xb2, 0x80, 0xd1, 0x41, 0x03, 0x5e, 0x56, 0x06, 0x42, - 0x8f, 0x04, 0x87, 0xd1, 0x41, 0xd1, 0x6e, 0xd1, 0x01, 0xd2, 0x6f, 0xd1, - 0x01, 0xd3, 0x70, 0xd1, 0x01, 0xd4, 0x71, 0xd1, 0x01, 0xd5, 0x72, 0xd1, - 0x41, 0x42, 0x52, 0x00, 0x85, 0xd1, 0x01, 0x4b, 0xda, 0xa1, 0x8a, 0xd1, - 0x01, 0x46, 0x32, 0xde, 0xaa, 0xd1, 0x41, 0x45, 0xb0, 0x04, 0x7b, 0xd1, - 0x81, 0x06, 0x4f, 0xac, 0x72, 0x6d, 0xd1, 0x41, 0x49, 0xd4, 0xb2, 0x81, - 0xd1, 0x41, 0xa9, 0x11, 0x0f, 0xe8, 0x72, 0x01, 0xff, 0x45, 0xe1, 0x02, - 0x5b, 0xd1, 0x01, 0x45, 0xad, 0x02, 0x5a, 0xd1, 0x41, 0x45, 0x48, 0xe5, - 0xd7, 0xd1, 0x01, 0x43, 0xf4, 0x31, 0xd5, 0xd1, 0x41, 0x05, 0xb9, 0x3e, - 0x2e, 0xb2, 0x01, 0xff, 0x02, 0xe3, 0x02, 0x1d, 0xa5, 0x01, 0xff, 0x48, - 0x42, 0xc1, 0x12, 0xd1, 0x01, 0xb6, 0x01, 0xff, 0xe5, 0x5c, 0xd1, 0x01, - 0x42, 0x34, 0x03, 0xb8, 0xd1, 0xc1, 0x00, 0x45, 0x55, 0x64, 0xc3, 0xd1, - 0x41, 0xe5, 0x14, 0xd1, 0x01, 0x43, 0x18, 0x09, 0x15, 0xd1, 0x41, 0x44, - 0x2d, 0xbb, 0x73, 0xd1, 0x01, 0x46, 0xc7, 0x34, 0x79, 0xd1, 0x01, 0x44, - 0x5e, 0xef, 0x77, 0xd1, 0x01, 0x43, 0x37, 0x25, 0x75, 0xd1, 0x41, 0x44, - 0xa5, 0x01, 0x84, 0xd1, 0x01, 0x42, 0x50, 0x02, 0x83, 0xd1, 0x41, 0x4b, - 0x1f, 0x96, 0x98, 0xf3, 0x41, 0x49, 0xb2, 0xb6, 0x6d, 0x26, 0x00, 0x4c, - 0xb5, 0x90, 0x6e, 0x26, 0x00, 0x4a, 0xa5, 0xae, 0x6f, 0x26, 0x40, 0x46, - 0xa8, 0x67, 0x64, 0xcc, 0x41, 0x04, 0xf5, 0x99, 0x69, 0xa9, 0x01, 0xff, - 0x43, 0x55, 0x6a, 0xb8, 0x22, 0x00, 0x02, 0x90, 0x04, 0x16, 0x43, 0x4d, - 0x12, 0x8c, 0x22, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x4e, 0x74, 0x24, 0x8d, - 0x22, 0x00, 0x45, 0xe1, 0x16, 0x8e, 0x22, 0x40, 0x4f, 0xe1, 0x6a, 0xb6, - 0xf3, 0x01, 0x08, 0x92, 0x04, 0x01, 0xff, 0x44, 0x2f, 0x03, 0xd7, 0x00, - 0x80, 0x04, 0xf8, 0x15, 0x27, 0x40, 0x80, 0x01, 0xff, 0x03, 0xb6, 0x05, - 0x11, 0x05, 0x51, 0x00, 0x01, 0xff, 0x49, 0x98, 0x1d, 0x30, 0x2a, 0x00, - 0x48, 0x78, 0x58, 0x31, 0x2a, 0x40, 0x4d, 0x79, 0x80, 0x37, 0x2a, 0x00, - 0x50, 0x0a, 0x63, 0x34, 0x2a, 0x00, 0x51, 0x38, 0x5c, 0x35, 0x2a, 0x00, - 0x48, 0x01, 0x02, 0x3b, 0x2a, 0x40, 0x07, 0xc1, 0x05, 0x06, 0x4c, 0x57, - 0x26, 0xa9, 0x12, 0x41, 0xe1, 0x80, 0x12, 0x01, 0xa2, 0xca, 0x01, 0xa3, - 0xbd, 0x01, 0xa4, 0x9e, 0x01, 0xe5, 0x83, 0x12, 0x01, 0xa7, 0x8d, 0x01, - 0x42, 0x22, 0x00, 0xa6, 0x12, 0x01, 0xe9, 0x81, 0x12, 0x01, 0xaa, 0x77, - 0xab, 0x6b, 0x42, 0x74, 0x00, 0xa3, 0x12, 0x01, 0x42, 0x6c, 0x00, 0xa0, - 0x12, 0x01, 0xae, 0x4d, 0xb0, 0x41, 0xb2, 0x2f, 0x42, 0x15, 0x06, 0xa5, - 0x12, 0x01, 0xb4, 0x10, 0xf5, 0x82, 0x12, 0x01, 0x42, 0xa6, 0x0a, 0xa4, - 0x12, 0x01, 0x42, 0x34, 0x22, 0xa1, 0x12, 0x41, 0xe1, 0x96, 0x12, 0x01, - 0x42, 0x22, 0x00, 0x97, 0x12, 0x01, 0xb4, 0x01, 0xff, 0xe1, 0x90, 0x12, - 0x01, 0x42, 0x22, 0x00, 0x91, 0x12, 0x41, 0xe1, 0xa2, 0x12, 0x01, 0x42, - 0x22, 0x00, 0xa8, 0x12, 0x01, 0x42, 0x71, 0x00, 0xa7, 0x12, 0x41, 0xe1, - 0x9b, 0x12, 0x01, 0x42, 0x22, 0x00, 0x9c, 0x12, 0x41, 0xe1, 0x9a, 0x12, - 0x01, 0x42, 0xff, 0x04, 0x95, 0x12, 0x01, 0x42, 0x34, 0x22, 0x8f, 0x12, - 0x41, 0xe1, 0x84, 0x12, 0x01, 0x42, 0x22, 0x00, 0x85, 0x12, 0x41, 0xe1, - 0x8c, 0x12, 0x01, 0x42, 0xbd, 0x26, 0x8d, 0x12, 0x41, 0xe1, 0x86, 0x12, - 0x01, 0x42, 0x22, 0x00, 0x88, 0x12, 0x41, 0xe1, 0x98, 0x12, 0x01, 0xa4, - 0x06, 0x42, 0x22, 0x00, 0x99, 0x12, 0x41, 0xe1, 0x92, 0x12, 0x01, 0x42, - 0xa1, 0x10, 0x93, 0x12, 0x01, 0x42, 0x22, 0x00, 0x94, 0x12, 0x41, 0xe1, - 0x8a, 0x12, 0x01, 0x42, 0x22, 0x00, 0x8b, 0x12, 0x41, 0xe1, 0x9d, 0x12, - 0x01, 0x42, 0x22, 0x00, 0x9f, 0x12, 0x41, 0x4c, 0x87, 0x00, 0x6b, 0x22, - 0x00, 0x49, 0xec, 0x00, 0x6a, 0x22, 0x40, 0xa4, 0xb8, 0x01, 0x07, 0xc1, - 0x05, 0x01, 0xff, 0xe1, 0x46, 0x6a, 0x01, 0x42, 0x16, 0x00, 0x44, 0x6a, - 0x01, 0x43, 0xa0, 0x37, 0x4b, 0x6a, 0x01, 0x42, 0xa1, 0x10, 0x45, 0x6a, - 0x81, 0x97, 0x01, 0xe5, 0x58, 0x6a, 0x81, 0x8d, 0x01, 0x02, 0x22, 0x00, - 0x80, 0x01, 0xab, 0x6e, 0x42, 0x74, 0x00, 0x5b, 0x6a, 0x81, 0x63, 0xad, - 0x55, 0xae, 0x47, 0xef, 0x52, 0x6a, 0x81, 0x3a, 0xb0, 0x2e, 0xb2, 0x24, - 0x43, 0x54, 0x0c, 0x54, 0x6a, 0x01, 0xb4, 0x0c, 0x42, 0xa9, 0x01, 0x57, - 0x6a, 0x01, 0x42, 0x60, 0x46, 0x42, 0x6a, 0x41, 0xe1, 0x40, 0x6a, 0x01, - 0x42, 0x69, 0x18, 0x5e, 0x6a, 0x01, 0x43, 0xe6, 0x01, 0x55, 0x6a, 0x41, - 0xe9, 0x5d, 0x6a, 0x01, 0xef, 0x53, 0x6a, 0x41, 0xe1, 0x50, 0x6a, 0x01, - 0x42, 0x49, 0x00, 0x47, 0x6a, 0x41, 0xec, 0x4d, 0x6a, 0x01, 0xef, 0x51, - 0x6a, 0x41, 0x42, 0xc6, 0x06, 0x41, 0x6a, 0x01, 0x42, 0x9e, 0x01, 0x4f, - 0x6a, 0x41, 0x43, 0xa4, 0x85, 0x4e, 0x6a, 0x01, 0x42, 0x29, 0x02, 0x43, - 0x6a, 0x41, 0xee, 0x5a, 0x6a, 0x41, 0x44, 0x5e, 0xec, 0x4c, 0x6a, 0x01, - 0x43, 0xcc, 0x50, 0x48, 0x6a, 0x01, 0xef, 0x59, 0x6a, 0x41, 0xe9, 0x5c, - 0x6a, 0x01, 0xef, 0x49, 0x6a, 0x41, 0xe1, 0x56, 0x6a, 0x41, 0xe9, 0x4a, - 0x6a, 0x41, 0x44, 0xd1, 0x1f, 0x6e, 0x6a, 0x01, 0x05, 0xc5, 0x06, 0x06, - 0x4b, 0xd8, 0x9e, 0x6f, 0x6a, 0x41, 0x45, 0xc3, 0x0a, 0x68, 0x6a, 0x01, - 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0x69, 0x6a, 0x01, 0x43, 0xbf, 0x0a, 0x61, - 0x6a, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xa1, 0x1d, 0x60, 0x6a, 0x41, - 0x44, 0x25, 0x01, 0x63, 0x6a, 0x01, 0x42, 0x15, 0x02, 0x62, 0x6a, 0x41, - 0x44, 0x27, 0x1d, 0x67, 0x6a, 0x01, 0x42, 0x60, 0x25, 0x66, 0x6a, 0x41, - 0x43, 0xa7, 0x05, 0x65, 0x6a, 0x01, 0x43, 0xcb, 0x06, 0x64, 0x6a, 0x41, - 0x4a, 0x06, 0x4a, 0xf1, 0xf4, 0x81, 0x82, 0x1f, 0xa4, 0xcb, 0x0a, 0xae, - 0xaa, 0x01, 0xaf, 0x85, 0x01, 0x03, 0xab, 0x05, 0x77, 0xb4, 0x50, 0xb5, - 0x0c, 0x4a, 0xfd, 0xb0, 0xa5, 0xf3, 0x01, 0x43, 0x0e, 0x77, 0xff, 0xf5, - 0x41, 0x02, 0x11, 0x00, 0x1c, 0x42, 0x1b, 0x03, 0x01, 0xf4, 0x81, 0x06, - 0x42, 0x53, 0x00, 0x44, 0xf4, 0x41, 0x80, 0x01, 0xff, 0x44, 0xe1, 0x07, - 0x2d, 0xf4, 0x01, 0x44, 0xa2, 0xdd, 0xa4, 0xfa, 0x41, 0x45, 0x9f, 0xde, - 0xfb, 0xf5, 0x01, 0x43, 0x05, 0x07, 0xf0, 0x26, 0xc0, 0x00, 0x80, 0x01, - 0xff, 0x49, 0x4e, 0xb4, 0xb5, 0xf6, 0x01, 0x48, 0xea, 0xc1, 0xa0, 0xf6, - 0x01, 0x47, 0x2f, 0x70, 0x9e, 0xf6, 0x41, 0x4d, 0x7f, 0x7b, 0x36, 0xf9, - 0x01, 0x02, 0x0c, 0x00, 0x01, 0xff, 0x80, 0x0c, 0x4f, 0x66, 0x6d, 0xbc, - 0xf9, 0x01, 0x43, 0x62, 0x1f, 0xe3, 0xf6, 0x41, 0x44, 0xde, 0xd9, 0xe5, - 0xf6, 0x01, 0x47, 0xe2, 0xd2, 0xf5, 0xf6, 0x41, 0xe5, 0x4c, 0xf5, 0x01, - 0x43, 0x9b, 0x07, 0x9f, 0xf9, 0x41, 0x48, 0x62, 0xc2, 0xf0, 0xf5, 0x01, - 0x02, 0x92, 0x00, 0x06, 0x42, 0x1b, 0x03, 0xce, 0xfa, 0x41, 0x44, 0xbe, - 0x2b, 0x6e, 0xf9, 0x01, 0x46, 0xa2, 0xda, 0xf5, 0xcd, 0x01, 0x50, 0xfa, - 0x66, 0x91, 0xf3, 0x41, 0x02, 0x3f, 0x1c, 0x85, 0x09, 0x07, 0x82, 0xce, - 0x35, 0x43, 0x81, 0x23, 0x12, 0xf4, 0x81, 0x28, 0xaf, 0x01, 0xff, 0x09, - 0x24, 0x94, 0x0c, 0x44, 0x1a, 0x4b, 0x9d, 0xf6, 0x01, 0x4d, 0x2d, 0x87, - 0x8d, 0x23, 0x40, 0x45, 0xb8, 0x70, 0x00, 0xd3, 0x01, 0xb9, 0x01, 0xff, - 0x43, 0x1c, 0x01, 0x8a, 0x26, 0x00, 0x42, 0x9e, 0x01, 0x8b, 0x26, 0x40, - 0x45, 0xe0, 0x07, 0x35, 0xf4, 0x41, 0x45, 0x52, 0x07, 0x00, 0x18, 0x80, - 0xb3, 0x08, 0x02, 0xe8, 0x04, 0xa2, 0x08, 0xa4, 0xd3, 0x07, 0x48, 0x45, - 0x29, 0x01, 0x18, 0x00, 0xa6, 0x9f, 0x07, 0x4e, 0x48, 0x77, 0x67, 0x16, - 0x81, 0x91, 0x07, 0x07, 0xc1, 0x05, 0x68, 0x07, 0x49, 0xd0, 0x58, 0x46, - 0x56, 0xdb, 0x0a, 0x18, 0x00, 0x4d, 0x50, 0x86, 0x61, 0x16, 0x81, 0x3a, - 0xb3, 0x1a, 0xb4, 0x06, 0x4f, 0x06, 0x73, 0x0e, 0x18, 0x40, 0x4f, 0x64, - 0x6f, 0x06, 0x18, 0x00, 0x59, 0x6e, 0x25, 0x63, 0x16, 0x01, 0x66, 0x46, - 0x07, 0x6c, 0x16, 0x41, 0x5c, 0xaa, 0x17, 0x07, 0x18, 0x00, 0x4a, 0x4d, - 0x07, 0x69, 0x16, 0xc1, 0x00, 0x06, 0x50, 0x00, 0x01, 0xff, 0x4f, 0x5d, - 0x07, 0x6b, 0x16, 0x01, 0x48, 0xfd, 0x04, 0x6a, 0x16, 0x41, 0x06, 0x50, - 0x00, 0x01, 0xff, 0x4f, 0x5d, 0x07, 0x66, 0x16, 0x01, 0x48, 0xfd, 0x04, - 0x65, 0x16, 0x41, 0x45, 0xe8, 0x04, 0x08, 0x18, 0x00, 0x49, 0x15, 0x16, - 0x09, 0x18, 0x40, 0xe1, 0x20, 0x18, 0x80, 0xef, 0x04, 0x42, 0x16, 0x00, - 0x2a, 0x18, 0x00, 0x02, 0x1e, 0x14, 0xd5, 0x04, 0x42, 0xa1, 0x10, 0x33, - 0x18, 0x00, 0xe5, 0x21, 0x18, 0x80, 0xc5, 0x04, 0x42, 0xe1, 0x07, 0x39, - 0x18, 0x00, 0x42, 0x24, 0x02, 0x2d, 0x18, 0x00, 0x43, 0x42, 0x40, 0x3e, - 0x18, 0x00, 0xe9, 0x22, 0x18, 0x00, 0x42, 0xbd, 0x26, 0x35, 0x18, 0x00, - 0xab, 0x9c, 0x04, 0xac, 0x8f, 0x04, 0x42, 0x6c, 0x00, 0x2e, 0x18, 0x80, - 0x8b, 0x03, 0x42, 0xff, 0x04, 0x28, 0x18, 0x00, 0xef, 0x23, 0x18, 0x80, - 0xfb, 0x02, 0x42, 0x6c, 0x09, 0x2b, 0x18, 0x00, 0x42, 0xf4, 0x13, 0x2c, - 0x18, 0x00, 0x42, 0x71, 0x00, 0x37, 0x18, 0x00, 0xb3, 0xdc, 0x01, 0xb4, - 0x28, 0xf5, 0x24, 0x18, 0x80, 0x1f, 0x42, 0xa9, 0x01, 0x38, 0x18, 0x00, - 0x42, 0x34, 0x22, 0x36, 0x18, 0x00, 0xba, 0x01, 0xff, 0xe1, 0x3d, 0x18, - 0x00, 0x42, 0x49, 0x00, 0x41, 0x18, 0x00, 0x42, 0x71, 0x00, 0x3f, 0x18, - 0x40, 0xe5, 0x26, 0x18, 0x40, 0xe1, 0x32, 0x18, 0x00, 0x04, 0x64, 0x6f, - 0x06, 0x42, 0x15, 0x06, 0x3c, 0x18, 0x40, 0xa1, 0x8b, 0x01, 0x42, 0x16, - 0x00, 0x4b, 0x18, 0x00, 0x43, 0xef, 0x1f, 0x52, 0x18, 0x00, 0xa4, 0x73, - 0xe5, 0x44, 0x18, 0x00, 0x42, 0x24, 0x02, 0x4e, 0x18, 0x80, 0x64, 0x43, - 0x42, 0x40, 0x59, 0x18, 0x00, 0xe9, 0x45, 0x18, 0x00, 0xaa, 0x4e, 0x42, - 0x1b, 0x02, 0x57, 0x18, 0x00, 0x4f, 0x47, 0x6e, 0x43, 0x18, 0x00, 0x42, - 0x6c, 0x00, 0x4f, 0x18, 0x00, 0x43, 0x6a, 0x08, 0x5b, 0x18, 0x00, 0xef, - 0x46, 0x18, 0x80, 0x2d, 0x42, 0x6c, 0x09, 0x4c, 0x18, 0x00, 0x42, 0xf4, - 0x13, 0x4d, 0x18, 0x00, 0xb4, 0x15, 0xf5, 0x47, 0x18, 0x80, 0x0c, 0x42, - 0xa9, 0x01, 0x56, 0x18, 0x00, 0x42, 0x34, 0x22, 0x55, 0x18, 0x40, 0xe5, - 0x49, 0x18, 0x40, 0xe1, 0x50, 0x18, 0x00, 0x42, 0x15, 0x06, 0x54, 0x18, - 0x40, 0xe5, 0x48, 0x18, 0x40, 0xe1, 0x53, 0x18, 0x00, 0x42, 0x1b, 0x01, - 0x5a, 0x18, 0x40, 0xe1, 0x58, 0x18, 0x40, 0xe1, 0x51, 0x18, 0x00, 0x42, - 0x59, 0x00, 0x5c, 0x18, 0x40, 0x08, 0x9b, 0xb3, 0x06, 0x42, 0x1d, 0x01, - 0x4a, 0x18, 0x40, 0x42, 0x12, 0x00, 0x98, 0x18, 0x00, 0x43, 0x44, 0xbe, - 0x99, 0x18, 0x40, 0xe1, 0x30, 0x18, 0x00, 0x42, 0x22, 0x00, 0x31, 0x18, - 0x00, 0x04, 0xaa, 0x17, 0x01, 0xff, 0x43, 0x1c, 0x01, 0x62, 0x18, 0x00, - 0x43, 0xef, 0x1f, 0x71, 0x18, 0x00, 0x42, 0xa1, 0x10, 0x69, 0x18, 0x00, - 0xe5, 0x5d, 0x18, 0x00, 0x42, 0xe1, 0x07, 0x6b, 0x18, 0x00, 0x42, 0x24, - 0x02, 0x64, 0x18, 0x80, 0x54, 0x42, 0x22, 0x00, 0x65, 0x18, 0x80, 0x49, - 0xe9, 0x5e, 0x18, 0x80, 0x40, 0x42, 0xbd, 0x26, 0x6a, 0x18, 0x00, 0x42, - 0x1b, 0x02, 0x63, 0x18, 0x00, 0x42, 0x6c, 0x09, 0x66, 0x18, 0x00, 0x43, - 0xcd, 0xa8, 0x70, 0x18, 0x00, 0x43, 0xa4, 0x02, 0x67, 0x18, 0x00, 0xb4, - 0x16, 0xf5, 0x61, 0x18, 0x80, 0x0d, 0xba, 0x01, 0xff, 0xe1, 0x6f, 0x18, - 0x00, 0x42, 0x22, 0x00, 0x72, 0x18, 0x40, 0xe5, 0x60, 0x18, 0x40, 0xe1, - 0x68, 0x18, 0x00, 0x42, 0x15, 0x06, 0x6e, 0x18, 0x40, 0xf9, 0x5f, 0x18, - 0x40, 0xe1, 0x6d, 0x18, 0x40, 0xe1, 0x6c, 0x18, 0x40, 0xe5, 0x25, 0x18, - 0x40, 0x05, 0x4b, 0xd0, 0x01, 0xff, 0x09, 0x9a, 0xb3, 0x1c, 0x42, 0xe1, - 0x07, 0x76, 0x18, 0x00, 0xe9, 0x73, 0x18, 0x00, 0x42, 0x1b, 0x02, 0x74, - 0x18, 0x00, 0x42, 0x71, 0x00, 0x75, 0x18, 0x00, 0x43, 0x44, 0xbe, 0x77, - 0x18, 0x40, 0x43, 0x50, 0x2a, 0xa8, 0x18, 0x00, 0xa3, 0x45, 0xa4, 0x37, - 0x43, 0xf3, 0x99, 0x9a, 0x18, 0x00, 0x43, 0x11, 0xf1, 0x9d, 0x18, 0x00, - 0x43, 0x80, 0x48, 0xaa, 0x18, 0x00, 0x43, 0x03, 0x47, 0x9b, 0x18, 0x00, - 0x43, 0x59, 0x20, 0xa2, 0x18, 0x00, 0xb4, 0x0d, 0xba, 0x01, 0xff, 0xe1, - 0xa5, 0x18, 0x00, 0x42, 0x22, 0x00, 0xa4, 0x18, 0x40, 0xe1, 0xa0, 0x18, - 0x00, 0x42, 0x12, 0x00, 0x9e, 0x18, 0x40, 0x43, 0x9e, 0x4a, 0x9f, 0x18, - 0x00, 0x42, 0x22, 0x00, 0xa1, 0x18, 0x40, 0xe1, 0x9c, 0x18, 0x00, 0x42, - 0x34, 0x22, 0xa3, 0x18, 0x40, 0xe1, 0x2f, 0x18, 0x00, 0x42, 0x22, 0x00, - 0x40, 0x18, 0x40, 0xe1, 0x3a, 0x18, 0x00, 0x42, 0x22, 0x00, 0x3b, 0x18, - 0x40, 0xe5, 0x27, 0x18, 0x40, 0xe1, 0x34, 0x18, 0x80, 0x04, 0xe9, 0x42, - 0x18, 0x40, 0x4e, 0x70, 0x19, 0x78, 0x18, 0x40, 0x08, 0x9b, 0xb3, 0x06, - 0x42, 0x1d, 0x01, 0x29, 0x18, 0x40, 0xe1, 0x87, 0x18, 0x80, 0x96, 0x01, - 0x46, 0xff, 0x9a, 0x85, 0x18, 0x00, 0x42, 0x37, 0x00, 0x8b, 0x18, 0x00, - 0xa4, 0x71, 0x05, 0x22, 0x00, 0x63, 0xe9, 0x88, 0x18, 0x80, 0x58, 0x42, - 0x1b, 0x02, 0x89, 0x18, 0x00, 0xae, 0x44, 0xb0, 0x38, 0x43, 0x59, 0x20, - 0x94, 0x18, 0x00, 0xb4, 0x19, 0x47, 0x4e, 0x6f, 0x83, 0x18, 0x00, 0x4b, - 0xa0, 0xa2, 0x81, 0x18, 0x00, 0xba, 0x01, 0xff, 0xe1, 0x96, 0x18, 0x00, - 0x42, 0x22, 0x00, 0x95, 0x18, 0x40, 0xe1, 0x90, 0x18, 0x00, 0x4b, 0xfa, - 0x9a, 0x86, 0x18, 0x00, 0xb4, 0x01, 0xff, 0xe1, 0x8c, 0x18, 0x00, 0x42, - 0x22, 0x00, 0x8d, 0x18, 0x40, 0xe1, 0x92, 0x18, 0x00, 0x42, 0x22, 0x00, - 0x93, 0x18, 0x40, 0x42, 0x24, 0x02, 0x8a, 0x18, 0x00, 0x42, 0xff, 0x04, - 0x8f, 0x18, 0x40, 0x4f, 0x46, 0x6f, 0x84, 0x18, 0x40, 0xf5, 0xa6, 0x18, - 0x00, 0x42, 0x34, 0x22, 0xa7, 0x18, 0x40, 0xe1, 0x91, 0x18, 0x80, 0x06, - 0x42, 0xa1, 0x10, 0x8e, 0x18, 0x40, 0x45, 0x72, 0xe3, 0xa9, 0x18, 0x00, - 0x44, 0xde, 0xed, 0x82, 0x18, 0x40, 0xe8, 0x97, 0x18, 0x00, 0x4b, 0x33, - 0x9e, 0x80, 0x18, 0x40, 0x55, 0x57, 0x07, 0x68, 0x16, 0x41, 0x48, 0x9d, - 0x45, 0x05, 0x18, 0x00, 0x17, 0xb1, 0x2f, 0x06, 0x48, 0x16, 0x16, 0x03, - 0x18, 0x40, 0x44, 0xca, 0x06, 0x0f, 0x18, 0x00, 0x43, 0xbf, 0x0a, 0x0b, - 0x18, 0x00, 0xb4, 0x01, 0xff, 0x44, 0x25, 0x01, 0x0d, 0x18, 0x00, 0x42, - 0x15, 0x02, 0x0c, 0x18, 0x40, 0x05, 0xc5, 0x06, 0x06, 0x59, 0xd8, 0x24, - 0x62, 0x16, 0x41, 0x45, 0xc3, 0x0a, 0x18, 0x18, 0x00, 0xa6, 0x2e, 0x44, - 0x46, 0x2a, 0x19, 0x18, 0x00, 0x43, 0xbf, 0x0a, 0x11, 0x18, 0x00, 0xb3, - 0x14, 0xb4, 0x06, 0x44, 0xa1, 0x1d, 0x10, 0x18, 0x40, 0x44, 0x25, 0x01, - 0x13, 0x18, 0x00, 0x42, 0x15, 0x02, 0x12, 0x18, 0x40, 0x44, 0x27, 0x1d, - 0x17, 0x18, 0x00, 0x42, 0x60, 0x25, 0x16, 0x18, 0x40, 0x43, 0xa7, 0x05, - 0x15, 0x18, 0x00, 0x43, 0xcb, 0x06, 0x14, 0x18, 0x40, 0x43, 0x03, 0x12, - 0x04, 0x18, 0x00, 0x43, 0xea, 0x04, 0x02, 0x18, 0x40, 0x06, 0x50, 0x00, - 0x01, 0xff, 0x4f, 0x5d, 0x07, 0x64, 0x16, 0x01, 0x48, 0xfd, 0x04, 0x60, - 0x16, 0x41, 0x80, 0x06, 0x4b, 0x9f, 0x62, 0x11, 0xf9, 0x41, 0x43, 0x07, - 0x38, 0xb0, 0xf4, 0x01, 0x4a, 0x57, 0xb1, 0xb8, 0xf4, 0x41, 0xa5, 0xa5, - 0x14, 0xa9, 0x06, 0x4b, 0x06, 0xa2, 0x0a, 0x2a, 0x40, 0x80, 0xb6, 0x10, - 0x05, 0x2d, 0x0c, 0x01, 0xff, 0x59, 0xcb, 0x22, 0x5b, 0xab, 0x00, 0x07, - 0xc1, 0x05, 0x01, 0xff, 0xa1, 0x91, 0x10, 0xa2, 0xf8, 0x0f, 0xa3, 0xa6, - 0x0c, 0xa4, 0xe3, 0x0b, 0xa5, 0x8a, 0x0b, 0xa7, 0xee, 0x0a, 0xa8, 0xc4, - 0x0a, 0xac, 0x9e, 0x09, 0xad, 0xd1, 0x08, 0x4a, 0xa7, 0xac, 0xfe, 0x02, - 0x00, 0xb0, 0xbc, 0x08, 0xb2, 0xda, 0x07, 0xb3, 0x47, 0xb4, 0x39, 0xb5, - 0x1d, 0xb6, 0x0f, 0xb9, 0x01, 0xff, 0x57, 0x75, 0x2c, 0xeb, 0x02, 0x00, - 0x56, 0xb7, 0x33, 0xea, 0x02, 0x40, 0x4c, 0x7f, 0x0b, 0xc8, 0x02, 0x00, - 0x46, 0x87, 0xd4, 0xec, 0x02, 0x40, 0x4a, 0xe9, 0xab, 0xed, 0x02, 0x00, - 0x02, 0x20, 0x00, 0x04, 0xf3, 0x70, 0xa7, 0x40, 0x49, 0xe1, 0x01, 0xc4, - 0x02, 0x00, 0x44, 0x25, 0x38, 0xd4, 0x02, 0x40, 0x4f, 0xba, 0x3a, 0xd0, - 0x02, 0x00, 0x4b, 0xd9, 0x09, 0xbb, 0x02, 0x40, 0xa8, 0x82, 0x07, 0x05, - 0x0d, 0x07, 0x21, 0x0a, 0xd1, 0xaf, 0x11, 0x0b, 0x45, 0x06, 0x01, 0xff, - 0x55, 0xb4, 0x3a, 0x82, 0x07, 0x01, 0x50, 0xb9, 0x3a, 0x81, 0x07, 0x41, - 0x49, 0xeb, 0x41, 0x20, 0xa7, 0x00, 0x48, 0xc3, 0xb2, 0x21, 0xa7, 0x40, - 0xe1, 0x43, 0x1d, 0x80, 0xc7, 0x06, 0xe2, 0x47, 0x1d, 0x80, 0xa9, 0x06, - 0xe3, 0x9c, 0x1d, 0x80, 0xb7, 0x05, 0xe4, 0x48, 0x1d, 0x80, 0xe7, 0x04, - 0xe5, 0x49, 0x1d, 0x80, 0xc9, 0x04, 0xe6, 0xa0, 0x1d, 0x80, 0xbd, 0x04, - 0xe7, 0x4d, 0x1d, 0x80, 0x9a, 0x04, 0xe8, 0xb0, 0x02, 0x80, 0xf7, 0x03, - 0xa9, 0xe8, 0x03, 0xea, 0xb2, 0x02, 0x80, 0xdc, 0x03, 0xeb, 0x4f, 0x1d, - 0x00, 0xec, 0xe1, 0x02, 0x80, 0x8a, 0x03, 0xed, 0x50, 0x1d, 0x80, 0xfe, - 0x02, 0x07, 0x9d, 0x04, 0xed, 0x02, 0xef, 0x52, 0x1d, 0x80, 0xd4, 0x02, - 0xf0, 0x56, 0x1d, 0x80, 0xc8, 0x02, 0xf1, 0xa5, 0x07, 0x01, 0xf2, 0xb3, - 0x02, 0x80, 0x93, 0x02, 0xf3, 0xe2, 0x02, 0x80, 0xe9, 0x01, 0xf4, 0x57, - 0x1d, 0x80, 0x51, 0xf5, 0x58, 0x1d, 0x80, 0x38, 0xf6, 0x5b, 0x1d, 0x80, - 0x22, 0xf7, 0xb7, 0x02, 0x00, 0xf8, 0xe3, 0x02, 0x00, 0xf9, 0xb8, 0x02, - 0x00, 0xfa, 0xbb, 0x1d, 0xc0, 0x00, 0x06, 0x50, 0x00, 0x01, 0xff, 0x44, - 0x23, 0x0b, 0xbd, 0x1d, 0x00, 0x4e, 0x53, 0x0e, 0xbc, 0x1d, 0x40, 0x06, - 0x50, 0x00, 0x01, 0xff, 0x44, 0x5d, 0x0e, 0xb9, 0x1d, 0x00, 0x4a, 0xfb, - 0xad, 0xb0, 0x07, 0x41, 0x80, 0x06, 0x46, 0x63, 0x15, 0xb7, 0x1d, 0x40, - 0x43, 0x16, 0x00, 0xb6, 0x1d, 0x00, 0x4e, 0x5a, 0x7d, 0x5f, 0xab, 0x40, - 0x06, 0x50, 0x00, 0x82, 0x01, 0x53, 0x64, 0x47, 0xab, 0x07, 0x01, 0x4b, - 0xd1, 0x99, 0xae, 0x07, 0x01, 0x44, 0xf2, 0x93, 0xbf, 0x1d, 0x00, 0x49, - 0xea, 0xba, 0x54, 0x1d, 0x00, 0x49, 0xa3, 0xbc, 0xac, 0x07, 0x81, 0x5d, - 0x06, 0x46, 0x07, 0x01, 0xff, 0xe1, 0x44, 0x1d, 0x80, 0x49, 0xe8, 0xa3, - 0x1d, 0x00, 0xe9, 0x4e, 0x1d, 0x00, 0xed, 0x5a, 0x1d, 0x80, 0x36, 0x46, - 0x7d, 0x28, 0x4c, 0x1d, 0x00, 0xf2, 0xb4, 0x02, 0x80, 0x13, 0xf6, 0xba, - 0x1d, 0x00, 0xf7, 0x69, 0xab, 0x00, 0xf9, 0xa0, 0x07, 0xc1, 0x00, 0x4a, - 0x19, 0xa4, 0xa1, 0x07, 0x41, 0x06, 0x50, 0x00, 0x01, 0xff, 0x44, 0x5d, - 0x0e, 0xb5, 0x02, 0x00, 0x48, 0x06, 0x74, 0xa6, 0x07, 0xc1, 0x00, 0x53, - 0x0e, 0x46, 0xa7, 0x07, 0x41, 0x4e, 0x00, 0x74, 0xad, 0x1d, 0x40, 0xe5, - 0x46, 0x1d, 0x00, 0x44, 0x2f, 0xe1, 0x9b, 0x1d, 0x40, 0x54, 0x4d, 0x0e, - 0xad, 0x07, 0x41, 0x4c, 0xaa, 0x55, 0xb5, 0x1d, 0x00, 0x4e, 0x53, 0x0e, - 0xaf, 0x07, 0x41, 0x06, 0x50, 0x00, 0x14, 0xa3, 0x06, 0x49, 0xa5, 0xb7, - 0x59, 0x1d, 0x40, 0x43, 0x55, 0x7a, 0x4a, 0x1d, 0x00, 0x46, 0x04, 0xc8, - 0xa2, 0x1d, 0x40, 0x44, 0x23, 0x0b, 0xba, 0x07, 0x01, 0x44, 0x5d, 0x0e, - 0xb3, 0x1d, 0x40, 0x06, 0x50, 0x00, 0x1b, 0x48, 0xc2, 0xc0, 0x91, 0x07, - 0x01, 0x08, 0x8f, 0x14, 0x01, 0xff, 0xe5, 0x8e, 0x07, 0x01, 0x4c, 0x2d, - 0x28, 0xe4, 0x02, 0x00, 0x46, 0x7d, 0x28, 0x9f, 0x1d, 0x40, 0x48, 0x97, - 0x70, 0xa9, 0x07, 0x01, 0x44, 0x23, 0x17, 0xa8, 0x07, 0x41, 0x42, 0x49, - 0x00, 0xb2, 0x1d, 0x40, 0x4c, 0x39, 0x28, 0xa2, 0x07, 0x01, 0x04, 0xcc, - 0x04, 0x01, 0xff, 0xe5, 0x4b, 0x1d, 0x00, 0xef, 0x53, 0x1d, 0x40, 0x49, - 0x68, 0x56, 0xae, 0x1d, 0x00, 0x4e, 0x53, 0x0e, 0xaf, 0x1d, 0x40, 0x4a, - 0x1f, 0x24, 0xac, 0x1d, 0x40, 0x06, 0x50, 0x00, 0x1f, 0x43, 0xe4, 0xf0, - 0x9e, 0x07, 0x81, 0x12, 0x4a, 0x5f, 0xa9, 0xf9, 0xa7, 0x00, 0x49, 0xa3, - 0xbc, 0x99, 0x07, 0x01, 0x49, 0x34, 0xbf, 0x9a, 0x07, 0x41, 0x54, 0x4d, - 0x0e, 0x9f, 0x07, 0x41, 0x44, 0x1f, 0xa4, 0x9b, 0x07, 0x01, 0x4f, 0x2a, - 0x6d, 0x5d, 0xab, 0x00, 0x4c, 0xa6, 0x22, 0x5e, 0xab, 0x00, 0x4c, 0xaa, - 0x55, 0xaa, 0x1d, 0x00, 0x4e, 0x53, 0x0e, 0xa9, 0x1d, 0xc0, 0x00, 0x49, - 0xcf, 0xb1, 0x9d, 0x07, 0x41, 0x52, 0x7a, 0x4e, 0xa8, 0x1d, 0x40, 0x4c, - 0x39, 0x28, 0xa4, 0x1d, 0x00, 0x43, 0xf0, 0x04, 0xa5, 0x1d, 0x40, 0x06, - 0x50, 0x00, 0x0d, 0x43, 0xfd, 0x09, 0x5c, 0xab, 0xc0, 0x00, 0x4a, 0x1f, - 0x24, 0x97, 0x07, 0x41, 0x44, 0x5d, 0x0e, 0xb1, 0x02, 0x00, 0x46, 0x27, - 0x05, 0x95, 0x07, 0x41, 0x4a, 0x1f, 0x24, 0x93, 0x07, 0x01, 0x44, 0x5e, - 0x20, 0xe0, 0x02, 0x00, 0x05, 0xb8, 0x2d, 0x01, 0xff, 0x45, 0xd2, 0x56, - 0x5e, 0x1d, 0x00, 0x43, 0xb1, 0x1f, 0x60, 0x1d, 0x40, 0x4b, 0x9a, 0x99, - 0x90, 0x07, 0x41, 0x42, 0x1d, 0x01, 0x51, 0x1d, 0x00, 0x42, 0xa4, 0x02, - 0xb4, 0x1d, 0x00, 0x42, 0x53, 0x00, 0x9e, 0x1d, 0x00, 0x42, 0xb3, 0x27, - 0xbe, 0x1d, 0x40, 0x06, 0x50, 0x00, 0x33, 0xa5, 0x25, 0x54, 0xa3, 0x43, - 0xa1, 0x1d, 0x80, 0x18, 0x49, 0x34, 0xbf, 0x87, 0x07, 0xc1, 0x00, 0x06, - 0x50, 0x00, 0x01, 0xff, 0x44, 0x23, 0x0b, 0x89, 0x07, 0x01, 0x4e, 0x53, - 0x0e, 0x88, 0x07, 0x41, 0x49, 0x38, 0x23, 0x98, 0x07, 0x41, 0x43, 0xef, - 0x94, 0x5f, 0x1d, 0x00, 0x4a, 0xbb, 0xb1, 0x8a, 0x07, 0x41, 0x44, 0x5d, - 0x0e, 0x8c, 0x07, 0x81, 0x06, 0x44, 0x23, 0x17, 0x8b, 0x07, 0x41, 0x49, - 0xe1, 0xb1, 0x8d, 0x07, 0x41, 0x4a, 0x6d, 0x47, 0x9d, 0x1d, 0x00, 0x07, - 0xba, 0x05, 0x17, 0x42, 0x49, 0x00, 0x61, 0x1d, 0x00, 0x06, 0xd9, 0x1a, - 0x01, 0xff, 0x45, 0xe8, 0xac, 0xa4, 0x07, 0x01, 0x4f, 0xdb, 0x70, 0x8f, - 0x07, 0x41, 0x42, 0x31, 0x12, 0x80, 0x07, 0x01, 0xe2, 0x84, 0x07, 0x01, - 0xe7, 0x92, 0x07, 0x81, 0x36, 0xe8, 0x96, 0x07, 0x01, 0xe9, 0xa6, 0x1d, - 0x80, 0x21, 0xec, 0xab, 0x1d, 0x80, 0x16, 0xee, 0xb0, 0x1d, 0x00, 0x42, - 0x17, 0x50, 0xa3, 0x07, 0x01, 0xf2, 0xaa, 0x07, 0x01, 0xf5, 0xb8, 0x1d, - 0x00, 0xf9, 0xb2, 0x07, 0x41, 0x4a, 0x19, 0xa4, 0x9c, 0x07, 0x41, 0x4c, - 0x39, 0x28, 0xa7, 0x1d, 0x00, 0x49, 0x63, 0xba, 0xb6, 0x02, 0x40, 0x4a, - 0x1f, 0x24, 0x94, 0x07, 0x41, 0x4a, 0x1f, 0x24, 0x85, 0x07, 0x01, 0x47, - 0x44, 0xcc, 0xb1, 0x1d, 0x00, 0x43, 0x45, 0x0f, 0x5d, 0x1d, 0x00, 0x4c, - 0xbd, 0x91, 0x55, 0x1d, 0x40, 0xe5, 0x83, 0x07, 0x01, 0x42, 0x9e, 0x01, - 0x5c, 0x1d, 0x00, 0x44, 0x2f, 0xe1, 0x45, 0x1d, 0x40, 0x43, 0x22, 0x78, - 0xfd, 0x02, 0x00, 0x4f, 0xdc, 0x6f, 0x8a, 0xa7, 0x40, 0x06, 0x83, 0x10, - 0x3d, 0xa5, 0x1d, 0x4a, 0x05, 0xa9, 0xde, 0x02, 0x00, 0x05, 0xc9, 0x00, - 0x01, 0xff, 0x49, 0xe1, 0x01, 0xc3, 0x02, 0x00, 0x49, 0xaf, 0x13, 0xbe, - 0x02, 0x00, 0x44, 0x25, 0x38, 0x6b, 0xab, 0x40, 0x61, 0x40, 0x0e, 0xb9, - 0x07, 0x01, 0x07, 0x90, 0x14, 0x01, 0xff, 0x45, 0xe8, 0x04, 0xbd, 0x02, - 0x00, 0x4c, 0x2d, 0x28, 0xc1, 0x02, 0xc0, 0x00, 0x4c, 0x39, 0x28, 0xb4, - 0x07, 0x41, 0x45, 0xc4, 0x3a, 0xf8, 0x02, 0x00, 0x4a, 0xbf, 0x40, 0x1c, - 0xa7, 0x00, 0x50, 0xad, 0x00, 0x1d, 0xa7, 0x00, 0x59, 0xde, 0x23, 0x1e, - 0xa7, 0x00, 0x48, 0xe0, 0x54, 0x1b, 0xa7, 0x40, 0x48, 0x46, 0x70, 0xd6, - 0x02, 0x00, 0x44, 0x64, 0x1a, 0xb9, 0x02, 0x40, 0x45, 0x05, 0x6f, 0xc9, - 0x02, 0x00, 0xa9, 0x01, 0xff, 0xa4, 0x06, 0x48, 0x0d, 0x6d, 0xd7, 0x02, - 0x40, 0x80, 0x1b, 0x04, 0x80, 0x02, 0x01, 0xff, 0x07, 0x3b, 0x01, 0x06, - 0x4c, 0x8d, 0x22, 0xf4, 0x02, 0x40, 0x4c, 0x3d, 0x8a, 0xf6, 0x02, 0x00, - 0x4c, 0x8d, 0x22, 0xf5, 0x02, 0x40, 0x07, 0x0e, 0x1f, 0x0c, 0x52, 0x22, - 0x52, 0x14, 0xa7, 0x00, 0x48, 0x2c, 0x52, 0xe7, 0x02, 0x40, 0x52, 0x22, - 0x52, 0x0f, 0xa7, 0x00, 0x48, 0x2c, 0x52, 0x0a, 0xa7, 0x40, 0x4c, 0x45, - 0x83, 0xb7, 0x07, 0x01, 0x04, 0xc4, 0x00, 0x86, 0x01, 0x02, 0xd1, 0x00, - 0x01, 0xff, 0x80, 0x06, 0x55, 0x36, 0x3a, 0x1a, 0xa7, 0x40, 0x4c, 0x3d, - 0x8a, 0xcf, 0x02, 0x00, 0x51, 0xa4, 0x04, 0x88, 0xa7, 0x00, 0x02, 0x3b, - 0x01, 0x53, 0x4c, 0x8d, 0x22, 0xce, 0x02, 0x00, 0x59, 0xde, 0x23, 0x1f, - 0xa7, 0x00, 0x04, 0xc3, 0x00, 0x30, 0x46, 0x04, 0x6f, 0xcd, 0x02, 0x00, - 0x02, 0x0d, 0x00, 0x1a, 0xb4, 0x0c, 0x4c, 0xe0, 0x54, 0xf0, 0x02, 0x00, - 0x4d, 0x7e, 0x0b, 0xcc, 0x02, 0x40, 0x44, 0xae, 0x22, 0xf7, 0x02, 0x00, - 0x47, 0x2d, 0x52, 0xe8, 0x02, 0x40, 0x4d, 0x68, 0x31, 0xf2, 0x02, 0x00, - 0x42, 0x1d, 0x01, 0xf3, 0x02, 0x40, 0x46, 0xcd, 0x00, 0xff, 0x02, 0x80, - 0x06, 0x4e, 0x26, 0x52, 0x15, 0xa7, 0x40, 0x44, 0xe6, 0x01, 0xf1, 0x02, - 0x40, 0x05, 0x10, 0x1f, 0x06, 0x4c, 0xc1, 0x40, 0xef, 0x02, 0x40, 0x52, - 0x22, 0x52, 0x10, 0xa7, 0x00, 0x48, 0x2c, 0x52, 0x0b, 0xa7, 0x40, 0x49, - 0xe1, 0x01, 0xc2, 0x02, 0x00, 0x49, 0xaf, 0x13, 0xbf, 0x02, 0x00, 0x44, - 0x25, 0x38, 0x6a, 0xab, 0x40, 0x54, 0xb5, 0x3a, 0xd1, 0x02, 0x00, 0x04, - 0xfa, 0x0a, 0x01, 0xff, 0x07, 0x0e, 0x1f, 0x0c, 0x52, 0x22, 0x52, 0x13, - 0xa7, 0x00, 0x48, 0x2c, 0x52, 0xe6, 0x02, 0x40, 0x52, 0x22, 0x52, 0x0e, - 0xa7, 0x00, 0x48, 0x2c, 0x52, 0x09, 0xa7, 0x40, 0x4b, 0xb0, 0x99, 0xfc, - 0x10, 0x00, 0x4b, 0x2e, 0x28, 0xc0, 0x02, 0x80, 0x06, 0x4b, 0x8e, 0x22, - 0xcb, 0x02, 0x40, 0x4c, 0x39, 0x28, 0xb3, 0x07, 0x41, 0x03, 0x1b, 0x00, - 0x46, 0x05, 0x44, 0xe9, 0x01, 0xff, 0x05, 0xf9, 0x0a, 0x21, 0x04, 0xdd, - 0x04, 0x01, 0xff, 0x07, 0x0e, 0x1f, 0x0c, 0x52, 0x22, 0x52, 0x16, 0xa7, - 0x00, 0x48, 0x2c, 0x52, 0xe9, 0x02, 0x40, 0x52, 0x22, 0x52, 0x11, 0xa7, - 0x00, 0x48, 0x2c, 0x52, 0x0c, 0xa7, 0x40, 0x07, 0x0e, 0x1f, 0x0c, 0x52, - 0x22, 0x52, 0x12, 0xa7, 0x00, 0x48, 0x2c, 0x52, 0xe5, 0x02, 0x40, 0x52, - 0x22, 0x52, 0x0d, 0xa7, 0x00, 0x48, 0x2c, 0x52, 0x08, 0xa7, 0x40, 0x49, - 0xeb, 0x41, 0xfa, 0x02, 0x00, 0x48, 0xc3, 0xb2, 0xfc, 0x02, 0x40, 0x4b, - 0x1e, 0x8c, 0xb6, 0x07, 0x01, 0xaf, 0x01, 0xff, 0x02, 0xc6, 0x00, 0x21, - 0x05, 0x3d, 0x01, 0x11, 0x03, 0x51, 0x14, 0x01, 0xff, 0x49, 0xe1, 0x01, - 0xc5, 0x02, 0x00, 0x44, 0x25, 0x38, 0xd5, 0x02, 0x40, 0x4a, 0x91, 0x35, - 0xee, 0x02, 0x00, 0x45, 0x63, 0x1a, 0xba, 0x02, 0x40, 0x4e, 0x0b, 0x00, - 0x19, 0xa7, 0x00, 0x45, 0xf9, 0x0d, 0x18, 0xa7, 0x00, 0x4c, 0x32, 0x00, - 0x17, 0xa7, 0x40, 0x07, 0xba, 0x05, 0xcc, 0x02, 0x07, 0x40, 0x67, 0xbb, - 0x02, 0x0d, 0x26, 0x82, 0xfd, 0x01, 0x50, 0xa5, 0x04, 0xc6, 0x02, 0x00, - 0x44, 0x02, 0x12, 0x89, 0xa7, 0x00, 0x4b, 0x2d, 0xa0, 0xdf, 0x02, 0x00, - 0x08, 0x3a, 0xca, 0x01, 0xff, 0x42, 0x92, 0x01, 0x78, 0x1d, 0x00, 0x49, - 0x1e, 0xb7, 0x9c, 0xa6, 0x00, 0xb3, 0x01, 0xff, 0x05, 0x0d, 0x07, 0x06, - 0x48, 0xd5, 0x8c, 0x9d, 0xa6, 0x40, 0xe1, 0x30, 0xe0, 0x01, 0xa2, 0xb6, - 0x01, 0x43, 0x1e, 0x14, 0x45, 0xe0, 0x01, 0xa4, 0xa3, 0x01, 0xe5, 0x48, - 0xe0, 0x81, 0x82, 0x01, 0x43, 0xdd, 0x50, 0x33, 0xe0, 0x01, 0x42, 0x22, - 0x00, 0x43, 0xe0, 0x01, 0xe9, 0x38, 0xe0, 0x81, 0x6d, 0x42, 0xde, 0x1f, - 0x4d, 0xe0, 0x01, 0x42, 0x1b, 0x02, 0x39, 0xe0, 0x01, 0xef, 0x3c, 0xe0, - 0x01, 0xb0, 0x51, 0xb3, 0x36, 0xb4, 0x2a, 0xf5, 0x41, 0xe0, 0x01, 0x42, - 0x32, 0x00, 0x32, 0xe0, 0x01, 0xb9, 0x0d, 0xba, 0x01, 0xff, 0xe5, 0x37, - 0xe0, 0x01, 0x42, 0xb0, 0x01, 0x36, 0xe0, 0x41, 0x43, 0xfb, 0x2a, 0x47, - 0xe0, 0x81, 0x04, 0xf5, 0x49, 0xe0, 0x41, 0x4e, 0xf2, 0x73, 0x6c, 0xe0, - 0x41, 0xe5, 0x40, 0xe0, 0x01, 0x42, 0x1b, 0x03, 0x44, 0xe0, 0x41, 0x44, - 0x54, 0x7a, 0x4b, 0xe0, 0x01, 0x42, 0x22, 0x00, 0x46, 0xe0, 0x01, 0x49, - 0x72, 0xbd, 0x4f, 0xe0, 0xc1, 0x00, 0x4c, 0x39, 0x28, 0x6d, 0xe0, 0x41, - 0x47, 0x23, 0xc7, 0x50, 0xe0, 0x01, 0xe5, 0x3d, 0xe0, 0x41, 0xe5, 0x35, - 0xe0, 0x41, 0xe6, 0x42, 0xe0, 0x01, 0xec, 0x3a, 0xe0, 0x01, 0xed, 0x3b, - 0xe0, 0x01, 0xf2, 0x3e, 0xe0, 0x01, 0xf3, 0x3f, 0xe0, 0xc1, 0x00, 0x4f, - 0x6b, 0x68, 0x6b, 0xe0, 0x41, 0xe5, 0x34, 0xe0, 0x01, 0x43, 0x9b, 0xf1, - 0x4a, 0xe0, 0x41, 0x47, 0x44, 0xcc, 0x4e, 0xe0, 0x01, 0xe5, 0x31, 0xe0, - 0x01, 0x57, 0x59, 0x08, 0x4c, 0xe0, 0x41, 0x04, 0xbb, 0x15, 0x1d, 0x03, - 0xb6, 0x05, 0x01, 0xff, 0x44, 0x45, 0x2f, 0x00, 0xa7, 0x00, 0x42, 0x7c, - 0x00, 0x04, 0xa7, 0x00, 0x42, 0x3d, 0x00, 0x06, 0xa7, 0x00, 0x45, 0xaf, - 0xe7, 0x02, 0xa7, 0x40, 0x44, 0x45, 0x2f, 0x01, 0xa7, 0x00, 0x42, 0x7c, - 0x00, 0x05, 0xa7, 0x00, 0x42, 0x3d, 0x00, 0x07, 0xa7, 0x00, 0x45, 0xaf, - 0xe7, 0x03, 0xa7, 0x40, 0x4e, 0xaa, 0x13, 0xd3, 0x02, 0x00, 0x4f, 0xea, - 0x70, 0xd2, 0x02, 0x40, 0xe1, 0x2c, 0x1d, 0x80, 0x75, 0xe2, 0x2e, 0x1d, - 0x80, 0x6a, 0xe3, 0xf2, 0xa7, 0x00, 0xe4, 0x30, 0x1d, 0x00, 0xe5, 0x31, - 0x1d, 0x00, 0xe6, 0xf3, 0xa7, 0x00, 0xe7, 0x33, 0x1d, 0x00, 0xe8, 0x34, - 0x1d, 0x80, 0x4b, 0xe9, 0x35, 0x1d, 0x00, 0xea, 0x36, 0x1d, 0x00, 0xeb, - 0x37, 0x1d, 0x00, 0xec, 0x38, 0x1d, 0x00, 0xed, 0x39, 0x1d, 0x00, 0xee, - 0x3a, 0x1d, 0x00, 0xef, 0x3c, 0x1d, 0x80, 0x2a, 0xf0, 0x3e, 0x1d, 0x00, - 0xf1, 0xf4, 0xa7, 0x00, 0xf2, 0x3f, 0x1d, 0x80, 0x10, 0xf4, 0x40, 0x1d, - 0x00, 0xf5, 0x41, 0x1d, 0x00, 0xf6, 0x7d, 0x2c, 0x00, 0xf7, 0x42, 0x1d, - 0x40, 0x08, 0x8f, 0x14, 0x01, 0xff, 0xe5, 0x32, 0x1d, 0x00, 0xee, 0x3b, - 0x1d, 0x40, 0xf5, 0x3d, 0x1d, 0x40, 0x4c, 0x39, 0x28, 0xf8, 0xa7, 0x40, - 0x47, 0x3d, 0xcc, 0x2f, 0x1d, 0x40, 0xe5, 0x2d, 0x1d, 0x40, 0x05, 0xb9, - 0x3e, 0x06, 0x4d, 0x74, 0x82, 0xb5, 0x07, 0x41, 0x49, 0xeb, 0x41, 0xf9, - 0x02, 0x00, 0x48, 0xc3, 0xb2, 0xfb, 0x02, 0x40, 0x4b, 0x3e, 0x8a, 0xca, - 0x02, 0x00, 0x4d, 0xb9, 0x83, 0xb8, 0x07, 0x01, 0x49, 0x92, 0x35, 0xbc, - 0x02, 0x40, 0x51, 0x93, 0x56, 0x43, 0x16, 0x01, 0xa4, 0x89, 0x03, 0x07, - 0xc1, 0x05, 0x6d, 0x05, 0x2f, 0x03, 0x44, 0x0b, 0xd1, 0x75, 0x01, 0xff, - 0xa1, 0x31, 0xe5, 0x39, 0x16, 0x01, 0xe9, 0x31, 0x16, 0x81, 0x24, 0xef, - 0x3b, 0x16, 0x01, 0xf5, 0x33, 0x16, 0x81, 0x17, 0x08, 0x9b, 0xbe, 0x01, - 0xff, 0xec, 0x37, 0x16, 0x81, 0x09, 0xf2, 0x35, 0x16, 0xc1, 0x00, 0xf2, - 0x36, 0x16, 0x41, 0xec, 0x38, 0x16, 0x41, 0xf5, 0x34, 0x16, 0x41, 0xe9, - 0x32, 0x16, 0x41, 0xe1, 0x30, 0x16, 0x01, 0xe9, 0x3a, 0x16, 0x01, 0xf5, - 0x3c, 0x16, 0x41, 0xa1, 0x17, 0x44, 0x26, 0xed, 0x44, 0x16, 0x01, 0x02, - 0x02, 0x00, 0x01, 0xff, 0x44, 0x5d, 0x23, 0x3f, 0x16, 0x01, 0x45, 0xa3, - 0x4a, 0x3e, 0x16, 0x41, 0x47, 0xd1, 0x15, 0x3d, 0x16, 0x01, 0x4a, 0xab, - 0xad, 0x40, 0x16, 0x41, 0xe1, 0x00, 0x16, 0x81, 0x86, 0x02, 0xa2, 0xf9, - 0x01, 0xa3, 0xec, 0x01, 0xa4, 0xd3, 0x01, 0xe5, 0x0a, 0x16, 0x01, 0xa7, - 0xc2, 0x01, 0x42, 0x22, 0x00, 0x2e, 0x16, 0x01, 0xe9, 0x02, 0x16, 0x81, - 0xb2, 0x01, 0xaa, 0xa5, 0x01, 0xab, 0x98, 0x01, 0xac, 0x8b, 0x01, 0x42, - 0x6c, 0x00, 0x26, 0x16, 0x01, 0xae, 0x6d, 0xef, 0x0c, 0x16, 0x01, 0xb0, - 0x5d, 0x42, 0x71, 0x00, 0x28, 0x16, 0x01, 0xb3, 0x45, 0xb4, 0x2c, 0xf5, - 0x04, 0x16, 0x81, 0x23, 0xb6, 0x06, 0x42, 0x34, 0x22, 0x27, 0x16, 0x41, - 0xe1, 0x2a, 0x16, 0x01, 0x07, 0x9c, 0xbe, 0x01, 0xff, 0xec, 0x08, 0x16, - 0x81, 0x09, 0xf2, 0x06, 0x16, 0xc1, 0x00, 0xf2, 0x07, 0x16, 0x41, 0xec, - 0x09, 0x16, 0x41, 0xf5, 0x05, 0x16, 0x41, 0xe1, 0x1d, 0x16, 0x01, 0x42, - 0x22, 0x00, 0x1e, 0x16, 0x01, 0xb4, 0x01, 0xff, 0xe1, 0x18, 0x16, 0x01, - 0x42, 0x22, 0x00, 0x19, 0x16, 0x41, 0xe1, 0x2d, 0x16, 0x01, 0x42, 0x22, - 0x00, 0x2b, 0x16, 0x01, 0x42, 0x15, 0x06, 0x2c, 0x16, 0x41, 0xe1, 0x22, - 0x16, 0x01, 0x42, 0x22, 0x00, 0x23, 0x16, 0x41, 0xe1, 0x21, 0x16, 0x01, - 0x42, 0x24, 0x02, 0x12, 0x16, 0x01, 0x42, 0xff, 0x04, 0x1c, 0x16, 0x01, - 0x42, 0x34, 0x22, 0x17, 0x16, 0x41, 0xe1, 0x29, 0x16, 0x01, 0x42, 0x74, - 0x00, 0x2f, 0x16, 0x41, 0xe1, 0x0e, 0x16, 0x01, 0x42, 0x22, 0x00, 0x0f, - 0x16, 0x41, 0xe1, 0x15, 0x16, 0x01, 0x42, 0x22, 0x00, 0x16, 0x16, 0x41, - 0xe9, 0x03, 0x16, 0x41, 0xe1, 0x10, 0x16, 0x01, 0x42, 0x22, 0x00, 0x11, - 0x16, 0x41, 0xe1, 0x1f, 0x16, 0x01, 0xa4, 0x06, 0x42, 0x22, 0x00, 0x20, - 0x16, 0x41, 0xe1, 0x1a, 0x16, 0x01, 0x42, 0x22, 0x00, 0x1b, 0x16, 0x41, - 0xe1, 0x13, 0x16, 0x01, 0x42, 0x22, 0x00, 0x14, 0x16, 0x41, 0xe1, 0x24, - 0x16, 0x01, 0x42, 0x22, 0x00, 0x25, 0x16, 0x41, 0xe1, 0x01, 0x16, 0x01, - 0xe9, 0x0b, 0x16, 0x01, 0xf5, 0x0d, 0x16, 0x41, 0x44, 0xd1, 0x1f, 0x41, - 0x16, 0x01, 0x05, 0xc5, 0x06, 0x06, 0x4b, 0xd8, 0x9e, 0x42, 0x16, 0x41, - 0x45, 0xc3, 0x0a, 0x58, 0x16, 0x01, 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0x59, - 0x16, 0x01, 0x43, 0xbf, 0x0a, 0x51, 0x16, 0x01, 0xb3, 0x14, 0xb4, 0x06, - 0x44, 0xa1, 0x1d, 0x50, 0x16, 0x41, 0x44, 0x25, 0x01, 0x53, 0x16, 0x01, - 0x42, 0x15, 0x02, 0x52, 0x16, 0x41, 0x44, 0x27, 0x1d, 0x57, 0x16, 0x01, - 0x42, 0x60, 0x25, 0x56, 0x16, 0x41, 0x43, 0xa7, 0x05, 0x55, 0x16, 0x01, - 0x43, 0xcb, 0x06, 0x54, 0x16, 0x41, 0x42, 0xf0, 0x07, 0xa7, 0x22, 0x00, - 0x4d, 0x43, 0x86, 0x3b, 0xf9, 0x41, 0x80, 0x01, 0xff, 0x43, 0xa6, 0x7e, - 0xf4, 0xf4, 0x01, 0x5d, 0x75, 0x16, 0xf2, 0xf4, 0x41, 0x03, 0x95, 0x79, - 0xe2, 0x01, 0x02, 0x4a, 0x06, 0xb4, 0x01, 0xa4, 0x84, 0x01, 0xac, 0x66, - 0xae, 0x0d, 0x44, 0x93, 0x51, 0x9e, 0xfa, 0xc1, 0x00, 0x45, 0x45, 0x1c, - 0xa9, 0xfa, 0x41, 0xa9, 0x43, 0x02, 0xc4, 0x02, 0x04, 0xf9, 0xff, 0x29, - 0x40, 0x80, 0x06, 0x4d, 0xb2, 0x7e, 0x13, 0x22, 0x40, 0x44, 0x2f, 0x03, - 0x12, 0x22, 0x80, 0x06, 0x45, 0xad, 0x22, 0x42, 0x22, 0x40, 0x80, 0x01, - 0xff, 0x4b, 0x29, 0x1e, 0x3a, 0x2a, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, - 0x4b, 0x70, 0x5d, 0x29, 0x2a, 0x00, 0x49, 0x50, 0x12, 0x2a, 0x2a, 0x00, - 0x4c, 0x19, 0x8d, 0x2b, 0x2a, 0x00, 0x4b, 0xf6, 0x9f, 0x2c, 0x2a, 0x40, - 0x43, 0xf5, 0x26, 0x90, 0xf6, 0x01, 0x44, 0xc0, 0x62, 0xbd, 0xf4, 0x01, - 0x44, 0x58, 0xde, 0xd5, 0xf5, 0x41, 0x06, 0xe7, 0x5a, 0x0c, 0x46, 0x8a, - 0xda, 0x0c, 0xf3, 0x01, 0x46, 0xee, 0x4a, 0xa5, 0x20, 0x40, 0x46, 0x6c, - 0xc0, 0x96, 0xfa, 0x01, 0x45, 0xaa, 0x6f, 0x96, 0xf3, 0x41, 0x04, 0x80, - 0x02, 0x06, 0x58, 0x35, 0x29, 0xef, 0x22, 0x40, 0x43, 0xd4, 0x09, 0xb7, - 0x00, 0x00, 0x56, 0x67, 0x34, 0xe6, 0xfb, 0x01, 0x57, 0xf6, 0x2f, 0xe7, - 0xfb, 0x01, 0x06, 0x6e, 0x87, 0x01, 0xff, 0x48, 0x6a, 0xc4, 0x0c, 0xcc, - 0x01, 0x5a, 0x00, 0x22, 0xc2, 0xfb, 0x41, 0x80, 0x1b, 0xaf, 0x01, 0xff, - 0x45, 0x2e, 0x03, 0xb5, 0x00, 0x00, 0x42, 0x8c, 0x05, 0xa0, 0xf9, 0x01, - 0x45, 0x4a, 0x3c, 0xa4, 0xf3, 0x01, 0x45, 0xd5, 0xc8, 0x2c, 0xf5, 0x41, - 0x4b, 0xb3, 0x98, 0x49, 0x24, 0x00, 0x4c, 0x75, 0x91, 0x48, 0x24, 0x40, - 0x07, 0xc1, 0x05, 0xbc, 0x02, 0x05, 0x2f, 0x03, 0x9a, 0x02, 0x05, 0x83, - 0x2c, 0xfd, 0x01, 0x0b, 0xd1, 0x75, 0x01, 0xff, 0xe1, 0x54, 0x6f, 0x81, - 0xce, 0x01, 0xe5, 0x5d, 0x6f, 0x81, 0xae, 0x01, 0xe9, 0x61, 0x6f, 0x81, - 0x7a, 0xee, 0x7d, 0x6f, 0x81, 0x71, 0xef, 0x59, 0x6f, 0x81, 0x56, 0x4a, - 0x4b, 0xae, 0x78, 0x6f, 0x81, 0x4b, 0xf5, 0x6a, 0x6f, 0x81, 0x1e, 0x42, - 0xd4, 0xf1, 0x83, 0x6f, 0x01, 0xf7, 0x5c, 0x6f, 0x81, 0x0f, 0xf9, 0x71, - 0x6f, 0xc1, 0x00, 0xe9, 0x72, 0x6f, 0x01, 0x42, 0x3e, 0x00, 0x80, 0x6f, - 0x41, 0xef, 0x5b, 0x6f, 0x41, 0xe1, 0x6b, 0x6f, 0x81, 0x1a, 0x42, 0xc3, - 0x0a, 0x6f, 0x6f, 0x01, 0xe9, 0x87, 0x6f, 0x01, 0x42, 0x1d, 0x01, 0x70, - 0x6f, 0x01, 0x42, 0x55, 0x18, 0x7f, 0x6f, 0x01, 0xf5, 0x6e, 0x6f, 0x41, - 0xee, 0x6c, 0x6f, 0xc1, 0x00, 0xe7, 0x6d, 0x6f, 0x41, 0xf2, 0x76, 0x6f, - 0x41, 0xa5, 0x0c, 0xe7, 0x81, 0x6f, 0x01, 0xef, 0x5a, 0x6f, 0x01, 0xf5, - 0x7c, 0x6f, 0x41, 0xf2, 0x82, 0x6f, 0x01, 0xf9, 0x60, 0x6f, 0x41, 0xe7, - 0x7e, 0x6f, 0x41, 0xe1, 0x62, 0x6f, 0x81, 0x21, 0xe5, 0x66, 0x6f, 0x01, - 0xe7, 0x84, 0x6f, 0x01, 0xe9, 0x67, 0x6f, 0x01, 0x42, 0x1d, 0x01, 0x69, - 0x6f, 0x01, 0xef, 0x65, 0x6f, 0x81, 0x04, 0xf5, 0x68, 0x6f, 0x41, 0x42, - 0x1d, 0x01, 0x86, 0x6f, 0x41, 0xee, 0x63, 0x6f, 0xc1, 0x00, 0xe7, 0x64, - 0x6f, 0x41, 0xe1, 0x85, 0x6f, 0x01, 0xe9, 0x7a, 0x6f, 0x01, 0xee, 0x5e, - 0x6f, 0x81, 0x09, 0xf2, 0x77, 0x6f, 0xc1, 0x00, 0xf2, 0x75, 0x6f, 0x41, - 0xe7, 0x5f, 0x6f, 0x41, 0xe1, 0x55, 0x6f, 0x01, 0xe5, 0x73, 0x6f, 0x81, - 0x17, 0x42, 0x93, 0x48, 0x56, 0x6f, 0x01, 0xe9, 0x79, 0x6f, 0x01, 0xee, - 0x57, 0x6f, 0x81, 0x04, 0xf5, 0x7b, 0x6f, 0x41, 0xe7, 0x58, 0x6f, 0x41, - 0xe5, 0x74, 0x6f, 0x41, 0x45, 0x5c, 0x00, 0x91, 0x6f, 0x01, 0x45, 0xf5, - 0x06, 0x92, 0x6f, 0x01, 0x45, 0xc8, 0x00, 0x8f, 0x6f, 0x01, 0x49, 0x52, - 0x72, 0x90, 0x6f, 0x41, 0x4a, 0xa9, 0xa5, 0x51, 0x6f, 0x01, 0x56, 0x57, - 0x32, 0x4f, 0x6f, 0x01, 0x09, 0x37, 0xbc, 0x01, 0xff, 0x4a, 0xa9, 0xa5, - 0x53, 0x6f, 0x01, 0x47, 0x86, 0xd4, 0x52, 0x6f, 0x41, 0xa1, 0x82, 0x04, - 0xa2, 0xf5, 0x03, 0xa4, 0xc1, 0x03, 0x42, 0xe1, 0x07, 0x07, 0x6f, 0x01, - 0xa7, 0xa7, 0x03, 0xa8, 0x9a, 0x03, 0x42, 0x1b, 0x02, 0x1e, 0x6f, 0x01, - 0xac, 0xfb, 0x02, 0xad, 0xee, 0x02, 0xae, 0xb5, 0x02, 0xb0, 0xa8, 0x02, - 0xb1, 0x9b, 0x02, 0xb2, 0xec, 0x01, 0xb3, 0xd3, 0x01, 0xb4, 0x7f, 0xb6, - 0x73, 0x42, 0xa9, 0x01, 0x42, 0x6f, 0x01, 0x42, 0x4c, 0x26, 0x27, 0x6f, - 0x01, 0x03, 0xc3, 0x78, 0x32, 0xba, 0x01, 0xff, 0xe1, 0x3b, 0x6f, 0x01, - 0x42, 0x22, 0x00, 0x35, 0x6f, 0x01, 0xb3, 0x19, 0xba, 0x01, 0xff, 0xe1, - 0x3d, 0x6f, 0x01, 0xb3, 0x06, 0x42, 0x34, 0x22, 0x40, 0x6f, 0x41, 0xe1, - 0x3e, 0x6f, 0x01, 0x42, 0x34, 0x22, 0x41, 0x6f, 0x41, 0xe1, 0x3c, 0x6f, - 0x01, 0x42, 0x22, 0x00, 0x36, 0x6f, 0x41, 0x44, 0x5a, 0xec, 0x31, 0x6f, - 0x01, 0x42, 0x1b, 0x02, 0x20, 0x6f, 0x01, 0x43, 0xcc, 0x44, 0x12, 0x6f, - 0x01, 0x42, 0x6c, 0x09, 0x02, 0x6f, 0x01, 0xb4, 0x01, 0xff, 0xe1, 0x0d, - 0x6f, 0x01, 0xb3, 0x06, 0x42, 0x12, 0x00, 0x0c, 0x6f, 0x41, 0xe1, 0x39, - 0x6f, 0x01, 0x42, 0x22, 0x00, 0x30, 0x6f, 0x41, 0xe1, 0x08, 0x6f, 0x01, - 0x42, 0xe1, 0x07, 0x09, 0x6f, 0x41, 0xe1, 0x0a, 0x6f, 0x01, 0xe5, 0x48, - 0x6f, 0x01, 0x02, 0xf1, 0x33, 0x3c, 0x04, 0x5e, 0x1f, 0x1c, 0xb3, 0x06, - 0x42, 0x12, 0x00, 0x0e, 0x6f, 0x41, 0xe1, 0x37, 0x6f, 0x01, 0xe5, 0x49, - 0x6f, 0x01, 0x42, 0x22, 0x00, 0x2e, 0x6f, 0x01, 0x42, 0x15, 0x06, 0x2a, - 0x6f, 0x41, 0xd2, 0x93, 0x6f, 0x01, 0xd3, 0x94, 0x6f, 0x01, 0xd4, 0x95, - 0x6f, 0x01, 0xd5, 0x96, 0x6f, 0x01, 0xd6, 0x97, 0x6f, 0x01, 0xd7, 0x98, - 0x6f, 0x01, 0xd8, 0x99, 0x6f, 0x41, 0xe1, 0x1a, 0x6f, 0x01, 0x42, 0x34, - 0x22, 0x1c, 0x6f, 0x41, 0xe1, 0x3a, 0x6f, 0x01, 0x42, 0x22, 0x00, 0x33, - 0x6f, 0x01, 0x42, 0x15, 0x06, 0x34, 0x6f, 0x01, 0x42, 0xf7, 0x19, 0x46, - 0x6f, 0x41, 0x09, 0xe3, 0xb5, 0x06, 0x42, 0x77, 0x00, 0x4a, 0x6f, 0x41, - 0x04, 0x5e, 0x1f, 0x06, 0x43, 0xa4, 0x02, 0x32, 0x6f, 0x41, 0xd1, 0x9a, - 0x6f, 0x01, 0xd2, 0x9b, 0x6f, 0x01, 0xd4, 0x9c, 0x6f, 0x01, 0xd5, 0x9d, - 0x6f, 0x01, 0xd6, 0x9e, 0x6f, 0x01, 0xd8, 0x9f, 0x6f, 0x41, 0xe1, 0x21, - 0x6f, 0x01, 0x42, 0x24, 0x02, 0x22, 0x6f, 0x41, 0xe1, 0x00, 0x6f, 0x01, - 0x42, 0x74, 0x00, 0x03, 0x6f, 0x41, 0xe1, 0x10, 0x6f, 0x81, 0x2b, 0xa7, - 0x1f, 0x42, 0x22, 0x00, 0x11, 0x6f, 0x01, 0xae, 0x0d, 0xb9, 0x01, 0xff, - 0xe1, 0x2c, 0x6f, 0x01, 0x42, 0x22, 0x00, 0x2d, 0x6f, 0x41, 0xe1, 0x14, - 0x6f, 0x01, 0x42, 0x22, 0x00, 0x15, 0x6f, 0x41, 0xe1, 0x23, 0x6f, 0x01, - 0x42, 0x22, 0x00, 0x24, 0x6f, 0x41, 0x4a, 0xf7, 0x5a, 0x50, 0x6f, 0x41, - 0xe1, 0x04, 0x6f, 0x01, 0x42, 0x22, 0x00, 0x05, 0x6f, 0x41, 0xe1, 0x16, - 0x6f, 0x01, 0xa8, 0x06, 0x42, 0x34, 0x22, 0x17, 0x6f, 0x41, 0xe1, 0x18, - 0x6f, 0x01, 0x42, 0x34, 0x22, 0x19, 0x6f, 0x41, 0xe1, 0x26, 0x6f, 0x01, - 0x42, 0x22, 0x00, 0x44, 0x6f, 0x41, 0xe1, 0x1f, 0x6f, 0x01, 0xa8, 0x01, - 0xff, 0xe1, 0x28, 0x6f, 0x01, 0x42, 0x22, 0x00, 0x29, 0x6f, 0x41, 0xe1, - 0x0b, 0x6f, 0x01, 0x42, 0xa1, 0x10, 0x0f, 0x6f, 0x01, 0x02, 0xf1, 0x33, - 0x19, 0xba, 0x01, 0xff, 0xe1, 0x38, 0x6f, 0x01, 0x42, 0x22, 0x00, 0x2f, - 0x6f, 0x01, 0x42, 0xf7, 0x19, 0x47, 0x6f, 0x01, 0x42, 0x59, 0x00, 0x2b, - 0x6f, 0x41, 0xe1, 0x1b, 0x6f, 0x01, 0x42, 0x34, 0x22, 0x1d, 0x6f, 0x41, - 0xe1, 0x01, 0x6f, 0x01, 0x42, 0x0d, 0x00, 0x45, 0x6f, 0x41, 0xe8, 0x43, - 0x6f, 0x01, 0x07, 0x28, 0x7f, 0x01, 0xff, 0x42, 0x6c, 0x00, 0x06, 0x6f, - 0x01, 0xae, 0x06, 0x43, 0xf5, 0x97, 0x3f, 0x6f, 0x41, 0xe1, 0x13, 0x6f, - 0x01, 0x42, 0x24, 0x02, 0x25, 0x6f, 0x41, 0xa1, 0xbb, 0x1c, 0x09, 0xd5, - 0xb4, 0xaa, 0x1c, 0xa4, 0xc4, 0x16, 0x0b, 0xdc, 0x99, 0xad, 0x12, 0xac, - 0x9e, 0x12, 0x42, 0x98, 0x07, 0xdd, 0xf4, 0x01, 0xae, 0xa1, 0x07, 0xb2, - 0x55, 0x4d, 0x20, 0x87, 0x95, 0x00, 0x00, 0x02, 0x19, 0x01, 0x01, 0xff, - 0x05, 0x36, 0x00, 0x04, 0xef, 0x87, 0xf6, 0x41, 0x45, 0xcb, 0x22, 0xd1, - 0x23, 0x00, 0x0a, 0xf9, 0xaa, 0x2c, 0x49, 0x95, 0xbb, 0xd9, 0x23, 0x00, - 0x4f, 0x80, 0x71, 0xd3, 0x23, 0x00, 0xb4, 0x01, 0xff, 0x48, 0x62, 0xc3, - 0xd8, 0x23, 0x00, 0x46, 0x94, 0xdc, 0xd7, 0x23, 0x00, 0x0a, 0x61, 0xb1, - 0x01, 0xff, 0x46, 0x4e, 0x0a, 0xd6, 0x23, 0x00, 0x49, 0x86, 0x71, 0xd5, - 0x23, 0x40, 0x45, 0x61, 0x36, 0xd2, 0x23, 0x00, 0x4a, 0xf9, 0xaf, 0xd4, - 0x23, 0x40, 0x44, 0x7c, 0x61, 0x3f, 0x26, 0x00, 0x06, 0xc8, 0xdb, 0x06, - 0x46, 0x7c, 0x1c, 0xdc, 0xf9, 0x41, 0x08, 0x5a, 0xc2, 0xc2, 0x01, 0x0d, - 0x19, 0x82, 0x01, 0xff, 0x07, 0xc1, 0x05, 0x0d, 0x4b, 0xdd, 0xa0, 0x9e, - 0x09, 0xc1, 0x00, 0x42, 0x34, 0xf0, 0x9f, 0x09, 0x41, 0xe1, 0x80, 0x09, - 0x01, 0x42, 0x16, 0x00, 0x86, 0x09, 0x81, 0x9a, 0x01, 0x42, 0xa1, 0x10, - 0x9d, 0x09, 0x01, 0xe5, 0x81, 0x09, 0x01, 0x43, 0xcb, 0x50, 0x92, 0x09, - 0x01, 0xe9, 0x82, 0x09, 0x01, 0xab, 0x7a, 0x42, 0x74, 0x00, 0x90, 0x09, - 0x01, 0x42, 0x6c, 0x00, 0x89, 0x09, 0x01, 0xae, 0x56, 0xef, 0x83, 0x09, - 0x01, 0x42, 0x6c, 0x09, 0x88, 0x09, 0x01, 0x42, 0xf4, 0x13, 0x97, 0x09, - 0x01, 0x42, 0x71, 0x00, 0x8e, 0x09, 0x81, 0x39, 0xb3, 0x28, 0xb4, 0x0c, - 0x42, 0xa9, 0x01, 0x85, 0x09, 0x01, 0x42, 0x34, 0x22, 0x84, 0x09, 0x41, - 0xe1, 0x98, 0x09, 0x81, 0x0f, 0xe5, 0x9a, 0x09, 0x81, 0x04, 0xef, 0x9c, - 0x09, 0x41, 0x42, 0x34, 0xf0, 0x9b, 0x09, 0x41, 0x42, 0x34, 0xf0, 0x99, - 0x09, 0x41, 0xe1, 0x93, 0x09, 0x81, 0x04, 0xe5, 0x95, 0x09, 0x41, 0x42, - 0x34, 0xf0, 0x94, 0x09, 0x41, 0x42, 0x34, 0xf0, 0x8f, 0x09, 0x41, 0xe1, - 0x8a, 0x09, 0x81, 0x0b, 0xe5, 0x8c, 0x09, 0xc1, 0x00, 0x42, 0x34, 0xf0, - 0x8d, 0x09, 0x41, 0x42, 0x34, 0xf0, 0x8b, 0x09, 0x41, 0xe1, 0x96, 0x09, - 0x01, 0x42, 0x22, 0x00, 0x91, 0x09, 0x41, 0x42, 0x34, 0xf0, 0x87, 0x09, - 0x41, 0x09, 0xb3, 0x58, 0x99, 0x04, 0xac, 0x80, 0x03, 0x07, 0x2f, 0x39, - 0x01, 0xff, 0x45, 0xc3, 0x0a, 0xc7, 0x09, 0x81, 0xd8, 0x02, 0xa6, 0xfc, - 0x01, 0x44, 0x46, 0x2a, 0xc8, 0x09, 0x81, 0xd9, 0x01, 0x43, 0xbf, 0x0a, - 0xc0, 0x09, 0x81, 0xbb, 0x01, 0xb3, 0x67, 0xb4, 0x01, 0xff, 0x42, 0x92, - 0x01, 0xc9, 0x09, 0x81, 0x57, 0xa8, 0x2b, 0xb7, 0x01, 0xff, 0x44, 0x29, - 0x1d, 0xca, 0x09, 0x81, 0x1b, 0xef, 0xc1, 0x09, 0xc1, 0x00, 0x80, 0x01, - 0xff, 0x47, 0x22, 0x11, 0xd3, 0x09, 0x81, 0x06, 0x48, 0xd5, 0x5c, 0xdc, - 0x09, 0x41, 0x49, 0xd4, 0x5c, 0xee, 0x09, 0x41, 0x49, 0xd4, 0x5c, 0xe5, - 0x09, 0x41, 0x44, 0x2c, 0x11, 0xcb, 0x09, 0x81, 0x1d, 0x43, 0x26, 0x01, - 0xc2, 0x09, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x47, 0x22, 0x11, 0xd4, 0x09, - 0x81, 0x06, 0x48, 0xd5, 0x5c, 0xdd, 0x09, 0x41, 0x49, 0xd4, 0x5c, 0xef, - 0x09, 0x41, 0x49, 0xd4, 0x5c, 0xe6, 0x09, 0x41, 0x49, 0xd4, 0x5c, 0xe4, - 0x09, 0x41, 0x44, 0x27, 0x1d, 0xc6, 0x09, 0x81, 0x29, 0x42, 0x60, 0x25, - 0xc5, 0x09, 0xc1, 0x00, 0x80, 0x0d, 0x42, 0x2e, 0x11, 0xce, 0x09, 0xc1, - 0x00, 0x49, 0xd4, 0x5c, 0xe9, 0x09, 0x41, 0x47, 0x22, 0x11, 0xd7, 0x09, - 0x81, 0x06, 0x48, 0xd5, 0x5c, 0xe0, 0x09, 0x41, 0x49, 0xd4, 0x5c, 0xf2, - 0x09, 0x41, 0x80, 0x0d, 0x42, 0x2e, 0x11, 0xcf, 0x09, 0xc1, 0x00, 0x49, - 0xd4, 0x5c, 0xea, 0x09, 0x41, 0x47, 0x22, 0x11, 0xd8, 0x09, 0x81, 0x06, - 0x48, 0xd5, 0x5c, 0xe1, 0x09, 0x41, 0x49, 0xd4, 0x5c, 0xf3, 0x09, 0x41, - 0x80, 0x01, 0xff, 0x47, 0x22, 0x11, 0xd2, 0x09, 0x81, 0x06, 0x48, 0xd5, - 0x5c, 0xdb, 0x09, 0x41, 0x49, 0xd4, 0x5c, 0xed, 0x09, 0x41, 0x80, 0x06, - 0x4b, 0xc4, 0xa1, 0xec, 0x09, 0x41, 0x47, 0x22, 0x11, 0xda, 0x09, 0x81, - 0x06, 0x48, 0xd5, 0x5c, 0xe3, 0x09, 0x41, 0x49, 0xd4, 0x5c, 0xf5, 0x09, - 0x41, 0xa9, 0x2d, 0xaf, 0x01, 0xff, 0x43, 0x2d, 0x11, 0xcc, 0x09, 0x81, - 0x1d, 0x42, 0x42, 0x00, 0xc3, 0x09, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x47, - 0x22, 0x11, 0xd5, 0x09, 0x81, 0x06, 0x48, 0xd5, 0x5c, 0xde, 0x09, 0x41, - 0x49, 0xd4, 0x5c, 0xf0, 0x09, 0x41, 0x49, 0xd4, 0x5c, 0xe7, 0x09, 0x41, - 0x43, 0x09, 0x4c, 0xcd, 0x09, 0x81, 0x1d, 0x42, 0x32, 0x00, 0xc4, 0x09, - 0xc1, 0x00, 0x80, 0x01, 0xff, 0x47, 0x22, 0x11, 0xd6, 0x09, 0x81, 0x06, - 0x48, 0xd5, 0x5c, 0xdf, 0x09, 0x41, 0x49, 0xd4, 0x5c, 0xf1, 0x09, 0x41, - 0x49, 0xd4, 0x5c, 0xe8, 0x09, 0x41, 0x80, 0x06, 0x4a, 0xc5, 0xa1, 0xeb, - 0x09, 0x41, 0x47, 0x22, 0x11, 0xd9, 0x09, 0x81, 0x06, 0x48, 0xd5, 0x5c, - 0xe2, 0x09, 0x41, 0x49, 0xd4, 0x5c, 0xf4, 0x09, 0x41, 0x06, 0xc2, 0x05, - 0x11, 0x08, 0xbf, 0x3e, 0x01, 0xff, 0x43, 0x05, 0xf1, 0xbf, 0x09, 0x01, - 0x43, 0xbe, 0x5c, 0xbe, 0x09, 0x41, 0xe1, 0xa0, 0x09, 0x81, 0x76, 0x42, - 0x16, 0x00, 0xa6, 0x09, 0x01, 0x42, 0xa1, 0x10, 0xb7, 0x09, 0x01, 0xe5, - 0xa1, 0x09, 0x01, 0x43, 0xcb, 0x50, 0xae, 0x09, 0x01, 0xe9, 0xa2, 0x09, - 0x01, 0xab, 0x50, 0x42, 0x74, 0x00, 0xac, 0x09, 0x01, 0x42, 0x6c, 0x00, - 0xa8, 0x09, 0x01, 0xae, 0x3a, 0xef, 0xa3, 0x09, 0x01, 0x42, 0x6c, 0x09, - 0xa7, 0x09, 0x01, 0x42, 0xf4, 0x13, 0xb3, 0x09, 0x01, 0x42, 0x71, 0x00, - 0xab, 0x09, 0x01, 0xb3, 0x1a, 0xb4, 0x0c, 0x42, 0xa9, 0x01, 0xa5, 0x09, - 0x01, 0x42, 0x34, 0x22, 0xa4, 0x09, 0x41, 0xe1, 0xb4, 0x09, 0x01, 0xe5, - 0xb5, 0x09, 0x01, 0xef, 0xb6, 0x09, 0x41, 0xe1, 0xaf, 0x09, 0x01, 0xe5, - 0xb1, 0x09, 0x41, 0xe1, 0xa9, 0x09, 0x01, 0xe5, 0xaa, 0x09, 0x41, 0xe1, - 0xb2, 0x09, 0x01, 0x42, 0x22, 0x00, 0xad, 0x09, 0x41, 0x49, 0x71, 0x92, - 0xb0, 0x09, 0x41, 0xa5, 0x47, 0xa6, 0x39, 0x4d, 0xa3, 0x84, 0xfe, 0x09, - 0x01, 0x04, 0xbf, 0x0a, 0x23, 0xb3, 0x15, 0xb4, 0x01, 0xff, 0x4b, 0x1d, - 0x78, 0xff, 0x09, 0x01, 0x4d, 0x33, 0x82, 0xf8, 0x09, 0x01, 0x4b, 0xf8, - 0xa2, 0xf7, 0x09, 0x41, 0x4d, 0x1b, 0x78, 0xfc, 0x09, 0x01, 0x4b, 0xaa, - 0x9b, 0xfb, 0x09, 0x41, 0x44, 0x22, 0x00, 0xbd, 0x09, 0x01, 0x47, 0x20, - 0x78, 0xf6, 0x09, 0x41, 0x4c, 0xc9, 0x8e, 0xfa, 0x09, 0x01, 0x4c, 0xe1, - 0x91, 0xf9, 0x09, 0x41, 0x4d, 0x67, 0x82, 0xfd, 0x09, 0x01, 0x4e, 0x1a, - 0x78, 0xbc, 0x09, 0x41, 0x0b, 0xbe, 0x98, 0x0c, 0x57, 0xe2, 0x2e, 0x4e, - 0xf5, 0x01, 0x48, 0x2e, 0x4a, 0xb9, 0xf6, 0x41, 0x11, 0xd6, 0x57, 0xad, - 0x0a, 0x06, 0xc4, 0x06, 0xeb, 0x09, 0x0a, 0x31, 0xaf, 0x01, 0xff, 0x90, - 0xf5, 0x04, 0x91, 0x01, 0xff, 0x90, 0xb3, 0x04, 0x91, 0xf4, 0x03, 0x92, - 0xb5, 0x03, 0x93, 0xf6, 0x02, 0x94, 0xb7, 0x02, 0x95, 0xf8, 0x01, 0x96, - 0xb9, 0x01, 0x97, 0x71, 0x98, 0x33, 0x99, 0x01, 0xff, 0x45, 0x03, 0xdf, - 0x86, 0xe8, 0x01, 0x46, 0xbc, 0xd5, 0xb1, 0xe8, 0x01, 0x45, 0x80, 0xdf, - 0xb6, 0xe8, 0x01, 0x45, 0xa8, 0xdf, 0x75, 0xe8, 0x01, 0x45, 0x02, 0xe0, - 0x0f, 0xe8, 0x01, 0x44, 0xa2, 0xea, 0x2c, 0xe8, 0x01, 0x45, 0x2f, 0xe0, - 0x35, 0xe8, 0x01, 0x45, 0x48, 0xe0, 0x61, 0xe8, 0x41, 0x45, 0xf4, 0xde, - 0x42, 0xe8, 0x01, 0x44, 0xd6, 0xe9, 0x43, 0xe8, 0x01, 0x44, 0x36, 0xea, - 0xb9, 0xe8, 0x01, 0x4b, 0x8d, 0x96, 0x82, 0xe8, 0x01, 0x46, 0xfe, 0xd5, - 0x89, 0xe8, 0x01, 0x44, 0xde, 0xea, 0xba, 0xe8, 0x01, 0x44, 0x22, 0xd6, - 0x6a, 0xe8, 0x01, 0x46, 0x46, 0xd6, 0x9b, 0xe8, 0x01, 0x46, 0x5e, 0xd6, - 0x97, 0xe8, 0x01, 0x46, 0x70, 0xd6, 0x1a, 0xe8, 0x41, 0x46, 0x9e, 0xd5, - 0xc2, 0xe8, 0x01, 0x44, 0xfa, 0xe9, 0xad, 0xe8, 0x01, 0x45, 0x71, 0xdf, - 0x99, 0xe8, 0x81, 0x2f, 0x45, 0xb7, 0xdf, 0xbc, 0xe8, 0x01, 0x45, 0xe4, - 0xdf, 0x9a, 0xe8, 0x81, 0x1e, 0x49, 0x1c, 0xb3, 0x52, 0xe8, 0x01, 0x44, - 0xfa, 0xea, 0x68, 0xe8, 0x01, 0x47, 0x9c, 0xcb, 0x8b, 0xe8, 0x01, 0x44, - 0x5a, 0xeb, 0x2d, 0xe8, 0x01, 0x45, 0xa7, 0xe0, 0x07, 0xe8, 0x41, 0xef, - 0x9a, 0xe8, 0x41, 0xef, 0x99, 0xe8, 0x41, 0x45, 0x12, 0xdf, 0x50, 0xe8, - 0x01, 0x4a, 0x87, 0xa4, 0x9c, 0xe8, 0x01, 0x45, 0x8f, 0xdf, 0x31, 0xe8, - 0x01, 0x44, 0x42, 0xea, 0x25, 0xe8, 0x01, 0x46, 0x0a, 0xd6, 0xc0, 0xe8, - 0x01, 0x44, 0xd2, 0xea, 0x27, 0xe8, 0x01, 0x46, 0x1c, 0xd6, 0x87, 0xe8, - 0x01, 0x46, 0x34, 0xd6, 0x88, 0xe8, 0x01, 0x44, 0x62, 0xeb, 0x85, 0xe8, - 0x01, 0x45, 0xc0, 0xe0, 0x67, 0xe8, 0x41, 0x45, 0xef, 0xde, 0x1e, 0xe8, - 0x01, 0x44, 0x0a, 0xea, 0xbb, 0xe8, 0x01, 0x45, 0x7b, 0xdf, 0xb5, 0xe8, - 0x01, 0x44, 0x8d, 0x96, 0x3c, 0xe8, 0x01, 0x46, 0xf8, 0xd5, 0x19, 0xe8, - 0x01, 0x44, 0xba, 0xea, 0x83, 0xe8, 0x01, 0x47, 0x8e, 0xcb, 0x7c, 0xe8, - 0x01, 0x45, 0x57, 0xe0, 0x4e, 0xe8, 0x01, 0x45, 0x84, 0xe0, 0xa5, 0xe8, - 0x01, 0x47, 0xaa, 0xcb, 0x7e, 0xe8, 0x41, 0x44, 0xa6, 0xe9, 0x6e, 0xe8, - 0x01, 0x45, 0x44, 0xdf, 0x58, 0xe8, 0x01, 0x4a, 0x9b, 0xa4, 0x9e, 0xe8, - 0x01, 0x45, 0xbc, 0xdf, 0x10, 0xe8, 0x01, 0x45, 0xf8, 0xdf, 0xbe, 0xe8, - 0x01, 0x45, 0x11, 0xe0, 0x93, 0xe8, 0x01, 0x46, 0x28, 0xd6, 0x7b, 0xe8, - 0x01, 0x43, 0x7b, 0xf0, 0x28, 0xe8, 0x01, 0x45, 0x7a, 0xe0, 0xa8, 0xe8, - 0x01, 0x46, 0x76, 0xd6, 0xb7, 0xe8, 0x41, 0x45, 0x08, 0xdf, 0x72, 0xe8, - 0x01, 0x44, 0xe6, 0xe9, 0x2a, 0xe8, 0x01, 0x45, 0x62, 0xdf, 0x9f, 0xe8, - 0x01, 0x45, 0x9e, 0xdf, 0x5f, 0xe8, 0x01, 0x46, 0x04, 0xd6, 0xb8, 0xe8, - 0x01, 0x44, 0xbe, 0xea, 0x2b, 0xe8, 0x01, 0x45, 0x34, 0xe0, 0x33, 0xe8, - 0x01, 0x44, 0x32, 0xeb, 0x29, 0xe8, 0x01, 0x44, 0x52, 0xeb, 0x21, 0xe8, - 0x01, 0x45, 0xd4, 0xe0, 0x13, 0xe8, 0x41, 0x46, 0x92, 0xd5, 0x7d, 0xe8, - 0x01, 0x44, 0x44, 0xdf, 0x59, 0xe8, 0x01, 0x45, 0x76, 0xdf, 0x95, 0xe8, - 0x01, 0x45, 0xad, 0xdf, 0xae, 0xe8, 0x01, 0x45, 0xd0, 0xdf, 0xa6, 0xe8, - 0x01, 0x45, 0x16, 0xe0, 0xb0, 0xe8, 0x01, 0x45, 0x3e, 0xe0, 0x0b, 0xe8, - 0x01, 0x47, 0x95, 0xcb, 0x7f, 0xe8, 0x01, 0x46, 0x58, 0xd6, 0x70, 0xe8, - 0x01, 0x45, 0xb6, 0xe0, 0xaf, 0xe8, 0x41, 0x49, 0xdd, 0xb2, 0x3d, 0xe8, - 0x01, 0x44, 0xde, 0xe9, 0x84, 0xe8, 0x01, 0x46, 0xc8, 0xd5, 0xa4, 0xe8, - 0x01, 0x44, 0x46, 0xea, 0x4f, 0xe8, 0x01, 0x45, 0xfd, 0xdf, 0x0d, 0xe8, - 0x01, 0x47, 0x87, 0xcb, 0x7a, 0xe8, 0x01, 0x44, 0x1e, 0xeb, 0x32, 0xe8, - 0x01, 0x45, 0x61, 0xe0, 0x66, 0xe8, 0x01, 0x44, 0x7a, 0xeb, 0x0c, 0xe8, - 0x01, 0x45, 0xbb, 0xe0, 0xb2, 0xe8, 0x41, 0x43, 0x1e, 0xf0, 0x26, 0xe8, - 0x01, 0x45, 0x2b, 0xdf, 0x62, 0xe8, 0x01, 0x45, 0x85, 0xdf, 0x91, 0xe8, - 0x01, 0x45, 0x99, 0xdf, 0x20, 0xe8, 0x01, 0x45, 0xf3, 0xdf, 0x49, 0xe8, - 0x01, 0x4b, 0x98, 0x96, 0x9d, 0xe8, 0x01, 0x4c, 0x19, 0x8a, 0x81, 0xe8, - 0x01, 0x45, 0x4d, 0xe0, 0xaa, 0xe8, 0x01, 0x45, 0x7f, 0xe0, 0xa3, 0xe8, - 0x01, 0x45, 0xd9, 0xe0, 0x56, 0xe8, 0x41, 0x90, 0xb5, 0x04, 0x91, 0xf6, - 0x03, 0x92, 0xb7, 0x03, 0x93, 0xf8, 0x02, 0x94, 0xb9, 0x02, 0x95, 0xfa, - 0x01, 0x96, 0xbb, 0x01, 0x97, 0x7d, 0x98, 0x3f, 0x99, 0x01, 0xff, 0x46, - 0x8c, 0xd5, 0x77, 0xe8, 0x01, 0x45, 0x35, 0xdf, 0x47, 0xe8, 0x01, 0x45, - 0x5d, 0xdf, 0xa0, 0xe8, 0x01, 0x46, 0xd4, 0xd5, 0xa9, 0xe8, 0x01, 0x45, - 0xe9, 0xdf, 0x18, 0xe8, 0x01, 0x44, 0x0c, 0xe0, 0x04, 0xe8, 0x01, 0x44, - 0xf6, 0xea, 0x6c, 0xe8, 0x01, 0x44, 0x26, 0xeb, 0x1f, 0xe8, 0x01, 0x46, - 0x6a, 0xd6, 0xc3, 0xe8, 0x01, 0x44, 0x82, 0xeb, 0x8d, 0xe8, 0x41, 0x44, - 0xc6, 0xe9, 0x57, 0xe8, 0x01, 0x45, 0x30, 0xdf, 0x8f, 0xe8, 0x01, 0x46, - 0xce, 0xd5, 0x79, 0xe8, 0x01, 0x46, 0xda, 0xd5, 0x6f, 0xe8, 0x01, 0x45, - 0xda, 0xdf, 0x39, 0xe8, 0x01, 0x44, 0xe2, 0xea, 0xbd, 0xe8, 0x01, 0x4b, - 0xa3, 0x96, 0x80, 0xe8, 0x01, 0x45, 0x52, 0xe0, 0x73, 0xe8, 0x01, 0x44, - 0x5e, 0xeb, 0x60, 0xe8, 0x01, 0x45, 0xa2, 0xe0, 0x41, 0xe8, 0x41, 0x45, - 0xfe, 0xde, 0xac, 0xe8, 0x01, 0x46, 0xaa, 0xd5, 0xab, 0xe8, 0x01, 0x45, - 0x6c, 0xdf, 0x98, 0xe8, 0x01, 0x44, 0x56, 0xea, 0x3a, 0xe8, 0x01, 0x45, - 0xd5, 0xdf, 0xa1, 0xe8, 0x01, 0x44, 0xb6, 0xea, 0x5e, 0xe8, 0x01, 0x45, - 0x25, 0xe0, 0x05, 0xe8, 0x01, 0x44, 0x4a, 0xeb, 0xbf, 0xe8, 0x01, 0x45, - 0x75, 0xe0, 0x5d, 0xe8, 0x01, 0x44, 0x92, 0xeb, 0x34, 0xe8, 0x41, 0x46, - 0x98, 0xd5, 0xc4, 0xe8, 0x01, 0x45, 0x3f, 0xdf, 0x11, 0xe8, 0x01, 0x45, - 0x67, 0xdf, 0x94, 0xe8, 0x01, 0x44, 0x4a, 0xea, 0x51, 0xe8, 0x01, 0x45, - 0xee, 0xdf, 0xb4, 0xe8, 0x01, 0x45, 0x0c, 0xe0, 0x03, 0xe8, 0x01, 0x44, - 0x12, 0xeb, 0x92, 0xe8, 0x01, 0x46, 0x4c, 0xd6, 0xb3, 0xe8, 0x01, 0x44, - 0x6e, 0xeb, 0x8c, 0xe8, 0x01, 0x44, 0x9a, 0xeb, 0x4a, 0xe8, 0x41, 0x44, - 0xb6, 0xe9, 0x8e, 0xe8, 0x01, 0x44, 0x30, 0xdf, 0x90, 0xe8, 0x01, 0x45, - 0x53, 0xdf, 0x74, 0xe8, 0x01, 0x45, 0xa3, 0xdf, 0x71, 0xe8, 0x01, 0x45, - 0xdf, 0xdf, 0x3b, 0xe8, 0x01, 0x44, 0xd6, 0xea, 0x48, 0xe8, 0x01, 0x45, - 0x20, 0xe0, 0xa7, 0xe8, 0x01, 0x46, 0x52, 0xd6, 0x8a, 0xe8, 0x01, 0x46, - 0x64, 0xd6, 0xc1, 0xe8, 0x01, 0x45, 0xac, 0xe0, 0x17, 0xe8, 0x41, 0x45, - 0x0d, 0xdf, 0x6b, 0xe8, 0x01, 0x44, 0xe2, 0xe9, 0x69, 0xe8, 0x01, 0x45, - 0x58, 0xdf, 0x6d, 0xe8, 0x01, 0x46, 0xe0, 0xd5, 0x78, 0xe8, 0x01, 0x46, - 0xf2, 0xd5, 0xa2, 0xe8, 0x01, 0x44, 0x16, 0xd6, 0x0e, 0xe8, 0x01, 0x46, - 0x22, 0xd6, 0x76, 0xe8, 0x01, 0x46, 0x40, 0xd6, 0x96, 0xe8, 0x01, 0x44, - 0x6a, 0xeb, 0x06, 0xe8, 0x01, 0x45, 0xcf, 0xe0, 0x12, 0xe8, 0x41, 0x44, - 0xaa, 0xe9, 0x4d, 0xe8, 0x01, 0x44, 0x0e, 0xea, 0x53, 0xe8, 0x01, 0x44, - 0x3a, 0xea, 0x54, 0xe8, 0x01, 0x44, 0x72, 0xea, 0x55, 0xe8, 0x01, 0x44, - 0x7a, 0xea, 0x5a, 0xe8, 0x01, 0x44, 0xb2, 0xea, 0x5b, 0xe8, 0x01, 0x44, - 0xf2, 0xea, 0x5c, 0xe8, 0x01, 0x45, 0x66, 0xe0, 0x63, 0xe8, 0x01, 0x45, - 0x8e, 0xe0, 0x64, 0xe8, 0x01, 0x45, 0xc5, 0xe0, 0x65, 0xe8, 0x41, 0x44, - 0xbe, 0xe9, 0x2f, 0xe8, 0x01, 0x44, 0x06, 0xea, 0x30, 0xe8, 0x01, 0x44, - 0xc6, 0x41, 0x44, 0xe8, 0x01, 0x44, 0x6e, 0xea, 0x45, 0xe8, 0x01, 0x44, - 0x8e, 0xea, 0x46, 0xe8, 0x01, 0x44, 0xc6, 0xea, 0x36, 0xe8, 0x01, 0x44, - 0x0a, 0xeb, 0x37, 0xe8, 0x01, 0x44, 0x3e, 0xeb, 0x38, 0xe8, 0x01, 0x44, - 0x66, 0xeb, 0x4b, 0xe8, 0x01, 0x44, 0x7e, 0xeb, 0x4c, 0xe8, 0x41, 0x44, - 0xa2, 0xe9, 0x1b, 0xe8, 0x01, 0x44, 0x62, 0xc0, 0x1c, 0xe8, 0x01, 0x44, - 0x16, 0xea, 0x1d, 0xe8, 0x01, 0x43, 0x51, 0xf0, 0x22, 0xe8, 0x01, 0x43, - 0xcb, 0xdf, 0x23, 0xe8, 0x01, 0x43, 0x63, 0xf0, 0x24, 0xe8, 0x01, 0x44, - 0xee, 0xea, 0x3e, 0xe8, 0x01, 0x44, 0x2a, 0xeb, 0x3f, 0xe8, 0x01, 0x44, - 0x56, 0xeb, 0x40, 0xe8, 0x01, 0x44, 0x8e, 0xeb, 0x2e, 0xe8, 0x41, 0x44, - 0xea, 0xe9, 0x00, 0xe8, 0x01, 0x44, 0x1a, 0xea, 0x01, 0xe8, 0x01, 0x44, - 0x4e, 0xea, 0x02, 0xe8, 0x01, 0x44, 0x96, 0xea, 0x08, 0xe8, 0x01, 0x44, - 0xe6, 0xea, 0x09, 0xe8, 0x01, 0x44, 0x22, 0xeb, 0x0a, 0xe8, 0x01, 0x45, - 0x5c, 0xe0, 0x14, 0xe8, 0x01, 0x45, 0x89, 0xe0, 0x15, 0xe8, 0x01, 0x45, - 0xb1, 0xe0, 0x16, 0xe8, 0x41, 0x45, 0xc3, 0x0a, 0xce, 0xe8, 0x01, 0xa6, - 0x29, 0x44, 0x46, 0x2a, 0xcf, 0xe8, 0x01, 0x43, 0xbf, 0x0a, 0xc7, 0xe8, - 0x01, 0xb3, 0x0f, 0xb4, 0x01, 0xff, 0x44, 0x25, 0x01, 0xc9, 0xe8, 0x01, - 0x42, 0x15, 0x02, 0xc8, 0xe8, 0x41, 0x44, 0x27, 0x1d, 0xcd, 0xe8, 0x01, - 0x42, 0x60, 0x25, 0xcc, 0xe8, 0x41, 0x43, 0xa7, 0x05, 0xcb, 0xe8, 0x01, - 0x43, 0xcb, 0x06, 0xca, 0xe8, 0x41, 0x07, 0x22, 0x11, 0x24, 0x48, 0x25, - 0x3b, 0xd6, 0xe8, 0x01, 0xb4, 0x01, 0xff, 0xa5, 0x06, 0x48, 0x26, 0x51, - 0xd3, 0xe8, 0x41, 0x43, 0x59, 0x57, 0xd0, 0xe8, 0x01, 0xae, 0x01, 0xff, - 0x4a, 0xf1, 0xa3, 0xd4, 0xe8, 0x01, 0xf3, 0xd1, 0xe8, 0x41, 0x4a, 0xf1, - 0xa3, 0xd5, 0xe8, 0x01, 0xf3, 0xd2, 0xe8, 0x41, 0x42, 0x10, 0x00, 0x48, - 0xf3, 0x01, 0x49, 0x8c, 0x28, 0xe0, 0xfa, 0x41, 0xa1, 0xfd, 0x03, 0x06, - 0x96, 0xd7, 0xec, 0x03, 0x06, 0xc4, 0x06, 0xa5, 0x03, 0xac, 0x6b, 0x58, - 0x9d, 0x2a, 0xf3, 0xaa, 0x00, 0xb6, 0x06, 0x54, 0xbf, 0x45, 0xf4, 0xaa, - 0x40, 0x45, 0x5c, 0x23, 0xf6, 0xaa, 0x00, 0x0a, 0xd2, 0x75, 0x01, 0xff, - 0xa1, 0x3c, 0x47, 0x0f, 0xcd, 0xe9, 0xab, 0x00, 0xa9, 0x2a, 0x44, 0x62, - 0xee, 0xea, 0xab, 0x00, 0x44, 0x88, 0x84, 0xe3, 0xab, 0x00, 0x46, 0xe8, - 0xdc, 0xe7, 0xab, 0x00, 0xb5, 0x0c, 0x47, 0xa1, 0x4a, 0xf5, 0xaa, 0x00, - 0x45, 0x5d, 0xe9, 0xe6, 0xab, 0x40, 0x43, 0x89, 0x84, 0xe8, 0xab, 0x00, - 0xf5, 0xec, 0xaa, 0x40, 0xe9, 0xeb, 0xaa, 0x00, 0x43, 0x89, 0x84, 0xe4, - 0xab, 0x40, 0xa1, 0x0a, 0x43, 0x89, 0x84, 0xe5, 0xab, 0x00, 0xf5, 0xee, - 0xaa, 0x40, 0xe9, 0xed, 0xaa, 0x00, 0xf5, 0xef, 0xaa, 0x40, 0x06, 0xc2, - 0x05, 0x06, 0x47, 0xec, 0xd3, 0xec, 0xab, 0x40, 0x45, 0x6f, 0xe1, 0xd1, - 0xab, 0x00, 0xa2, 0x9b, 0x02, 0x02, 0x1e, 0x14, 0x8c, 0x02, 0xa4, 0xf1, - 0x01, 0xe5, 0xe0, 0xaa, 0x00, 0xa7, 0xde, 0x01, 0x43, 0x71, 0xdb, 0xcd, - 0xab, 0x00, 0xe9, 0xcf, 0xab, 0x80, 0xcc, 0x01, 0xaa, 0xbd, 0x01, 0xab, - 0xa7, 0x01, 0x43, 0xf0, 0x0d, 0xc2, 0xab, 0x80, 0x99, 0x01, 0x43, 0xcb, - 0x2e, 0xc3, 0xab, 0x80, 0x8b, 0x01, 0xae, 0x65, 0xef, 0xe1, 0xaa, 0x00, - 0xb0, 0x4e, 0x43, 0xa7, 0x07, 0xd4, 0xab, 0x00, 0xb3, 0x34, 0xb4, 0x12, - 0x42, 0xf3, 0x0a, 0xce, 0xab, 0x00, 0x43, 0x82, 0x10, 0xcb, 0xab, 0x00, - 0x44, 0x86, 0xbb, 0xcc, 0xab, 0x40, 0x43, 0x76, 0x1d, 0xca, 0xab, 0x00, - 0x42, 0x62, 0x01, 0xc7, 0xab, 0x80, 0x0d, 0xb4, 0x01, 0xff, 0xe1, 0xe4, - 0xaa, 0x00, 0x42, 0x22, 0x00, 0xe5, 0xaa, 0x40, 0x47, 0x84, 0xca, 0xe0, - 0xab, 0x40, 0x42, 0x57, 0x00, 0xc1, 0xab, 0x00, 0x42, 0x22, 0x00, 0xe9, - 0xaa, 0x00, 0x42, 0x15, 0x06, 0xea, 0xaa, 0x40, 0xe1, 0xc4, 0xab, 0x80, - 0x06, 0x43, 0x56, 0x00, 0xd0, 0xab, 0x40, 0x47, 0x84, 0xca, 0xde, 0xab, - 0x40, 0xe1, 0xc5, 0xab, 0x80, 0x19, 0x43, 0xb5, 0xb0, 0xc9, 0xab, 0x80, - 0x0c, 0x42, 0xff, 0x04, 0xe8, 0xaa, 0x00, 0x42, 0x34, 0x22, 0xe3, 0xaa, - 0x40, 0x47, 0x84, 0xca, 0xe1, 0xab, 0x40, 0x47, 0x84, 0xca, 0xdf, 0xab, - 0x40, 0x47, 0x84, 0xca, 0xdd, 0xab, 0x40, 0x47, 0x84, 0xca, 0xdc, 0xab, - 0x40, 0x43, 0x76, 0x1d, 0xc8, 0xab, 0x00, 0x42, 0x2a, 0x05, 0xc0, 0xab, - 0xc0, 0x00, 0x47, 0x84, 0xca, 0xdb, 0xab, 0x40, 0x43, 0x56, 0x00, 0xd3, - 0xab, 0x00, 0x42, 0x62, 0x01, 0xd6, 0xab, 0x40, 0x47, 0x84, 0xca, 0xe2, - 0xab, 0x40, 0x43, 0x76, 0x1d, 0xd8, 0xab, 0x00, 0x42, 0x2a, 0x05, 0xd2, - 0xab, 0x40, 0xa4, 0x0c, 0x43, 0x76, 0x1d, 0xd9, 0xab, 0x00, 0x42, 0x62, - 0x01, 0xd7, 0xab, 0x40, 0xe1, 0xe6, 0xaa, 0x00, 0x42, 0x22, 0x00, 0xe7, - 0xaa, 0x40, 0xe1, 0xe2, 0xaa, 0x00, 0x42, 0x62, 0x01, 0xc6, 0xab, 0x40, - 0xe1, 0xd5, 0xab, 0x00, 0x43, 0x56, 0x00, 0xda, 0xab, 0x40, 0x45, 0xc3, - 0x0a, 0xf8, 0xab, 0x00, 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0xf9, 0xab, 0x00, - 0x43, 0xbf, 0x0a, 0xf1, 0xab, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xa1, - 0x1d, 0xf0, 0xab, 0x40, 0x44, 0x25, 0x01, 0xf3, 0xab, 0x00, 0x42, 0x15, - 0x02, 0xf2, 0xab, 0x40, 0x44, 0x27, 0x1d, 0xf7, 0xab, 0x00, 0x42, 0x60, - 0x25, 0xf6, 0xab, 0x40, 0x43, 0xa7, 0x05, 0xf5, 0xab, 0x00, 0x43, 0xcb, - 0x06, 0xf4, 0xab, 0x40, 0x42, 0x1a, 0x00, 0xf0, 0xaa, 0x00, 0x42, 0xc3, - 0x0a, 0xeb, 0xab, 0x40, 0x4b, 0x8c, 0x9a, 0xf1, 0xaa, 0x00, 0x43, 0x9d, - 0x85, 0xf2, 0xaa, 0x00, 0x48, 0x5a, 0xc7, 0xed, 0xab, 0x40, 0x09, 0xda, - 0xb5, 0xf0, 0x01, 0xa9, 0x01, 0xff, 0x05, 0x5a, 0x45, 0xd6, 0x01, 0x03, - 0x1d, 0x04, 0x01, 0xff, 0xa2, 0xc2, 0x01, 0x06, 0xe2, 0x13, 0xb1, 0x01, - 0xa6, 0x87, 0x01, 0x4b, 0x9f, 0x5f, 0xa3, 0xf7, 0x01, 0x04, 0xc3, 0x00, - 0x69, 0x52, 0x58, 0x52, 0x5f, 0x20, 0x00, 0x05, 0xc8, 0x00, 0x4b, 0xb3, - 0x27, 0x0e, 0xa8, 0x7b, 0x17, 0x4c, 0x32, 0x00, 0x59, 0x27, 0x00, 0x06, - 0xad, 0x02, 0x01, 0xff, 0x46, 0xe7, 0x02, 0xaa, 0x26, 0x00, 0x46, 0xab, - 0x05, 0x8f, 0xf7, 0x41, 0x4a, 0x53, 0x2b, 0xc1, 0xf7, 0x01, 0x4d, 0xd9, - 0x12, 0xc3, 0xf7, 0x41, 0x46, 0xa7, 0x18, 0xaa, 0xf7, 0x01, 0x44, 0x21, - 0x04, 0x92, 0x25, 0x00, 0x03, 0xb6, 0x51, 0x06, 0x51, 0x8f, 0x5a, 0xac, - 0x26, 0x40, 0x52, 0x4b, 0x2b, 0xcb, 0xf7, 0x01, 0x4f, 0x4e, 0x1c, 0xb6, - 0xf7, 0x41, 0x80, 0x06, 0x60, 0xe5, 0x0e, 0x6d, 0x27, 0x40, 0x56, 0x83, - 0x32, 0x75, 0x27, 0x00, 0x54, 0x50, 0x21, 0x69, 0x27, 0x40, 0x80, 0x06, - 0x60, 0xe5, 0x0e, 0x6c, 0x27, 0x40, 0x56, 0x83, 0x32, 0x74, 0x27, 0x00, - 0x54, 0x50, 0x21, 0x68, 0x27, 0x40, 0x53, 0x4c, 0x41, 0xb0, 0xf7, 0x01, - 0x09, 0x61, 0x3a, 0x11, 0x0c, 0xcd, 0x12, 0x01, 0xff, 0x4a, 0x53, 0x2b, - 0xc5, 0xf7, 0x01, 0x4d, 0xd9, 0x12, 0xc7, 0xf7, 0x41, 0x59, 0xf7, 0x23, - 0x6a, 0x27, 0x00, 0x5a, 0x4a, 0x21, 0x6b, 0x27, 0x40, 0x52, 0x4b, 0x2b, - 0xce, 0xf7, 0x01, 0x4f, 0x4e, 0x1c, 0xbc, 0xf7, 0x41, 0x4b, 0xe2, 0x02, - 0xab, 0x26, 0x00, 0x50, 0x0a, 0x64, 0x85, 0xf7, 0x41, 0x45, 0xe8, 0x04, - 0x4c, 0x2e, 0x00, 0x50, 0xad, 0x00, 0x53, 0x2e, 0x00, 0x4d, 0xd6, 0x33, - 0x54, 0x2e, 0x40, 0xa3, 0xd0, 0x02, 0x06, 0xc4, 0x06, 0xf4, 0x01, 0x4e, - 0x30, 0x76, 0x9a, 0x6e, 0x01, 0x49, 0x15, 0x16, 0x98, 0x6e, 0x01, 0x07, - 0x2f, 0x39, 0x9e, 0x01, 0xb3, 0x01, 0xff, 0x0c, 0x4c, 0x08, 0x06, 0x4a, - 0x93, 0xb1, 0x99, 0x6e, 0x41, 0xe1, 0x6d, 0x6e, 0x81, 0x81, 0x01, 0xe2, - 0x70, 0x6e, 0x01, 0xe3, 0x71, 0x6e, 0x01, 0xe4, 0x79, 0x6e, 0x01, 0xe5, - 0x6f, 0x6e, 0x01, 0xe6, 0x6a, 0x6e, 0x01, 0xe7, 0x69, 0x6e, 0x01, 0xe8, - 0x76, 0x6e, 0x81, 0x60, 0xe9, 0x6b, 0x6e, 0x01, 0xea, 0x6e, 0x6e, 0x01, - 0xeb, 0x6c, 0x6e, 0x81, 0x4f, 0xec, 0x74, 0x6e, 0x01, 0xed, 0x60, 0x6e, - 0x01, 0xee, 0x7b, 0x6e, 0x81, 0x3a, 0xef, 0x7d, 0x6e, 0x81, 0x31, 0xf0, - 0x67, 0x6e, 0x01, 0xf1, 0x75, 0x6e, 0x01, 0xf2, 0x7c, 0x6e, 0x01, 0xf3, - 0x61, 0x6e, 0x01, 0xf4, 0x68, 0x6e, 0x01, 0xf5, 0x72, 0x6e, 0x01, 0xf6, - 0x62, 0x6e, 0x01, 0xf7, 0x63, 0x6e, 0x01, 0xf8, 0x78, 0x6e, 0x01, 0xf9, - 0x7f, 0x6e, 0x81, 0x04, 0xfa, 0x65, 0x6e, 0x41, 0xf5, 0x73, 0x6e, 0x41, - 0xe5, 0x7a, 0x6e, 0x41, 0xe7, 0x77, 0x6e, 0x01, 0xf9, 0x77, 0x6e, 0x41, - 0xf0, 0x66, 0x6e, 0x41, 0xf0, 0x76, 0x6e, 0x41, 0xe9, 0x7e, 0x6e, 0x01, - 0x43, 0x3e, 0x87, 0x64, 0x6e, 0x41, 0xa5, 0x37, 0xa6, 0x29, 0x48, 0x7c, - 0x52, 0x93, 0x6e, 0x01, 0xb3, 0x15, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, - 0x8a, 0x6e, 0x01, 0x47, 0x2a, 0x59, 0x8d, 0x6e, 0x01, 0x45, 0x45, 0x2b, - 0x8c, 0x6e, 0x41, 0x48, 0x3c, 0x50, 0x91, 0x6e, 0x01, 0x46, 0x60, 0x25, - 0x90, 0x6e, 0x41, 0x46, 0x9c, 0x17, 0x8f, 0x6e, 0x01, 0x47, 0x9f, 0x5b, - 0x8e, 0x6e, 0x41, 0x47, 0xca, 0x24, 0x92, 0x6e, 0x01, 0x45, 0x0b, 0x6e, - 0x8b, 0x6e, 0x41, 0x45, 0xc3, 0x0a, 0x88, 0x6e, 0x01, 0xa6, 0x43, 0x44, - 0x46, 0x2a, 0x89, 0x6e, 0x01, 0x43, 0xbf, 0x0a, 0x81, 0x6e, 0x81, 0x30, - 0xb3, 0x22, 0xb4, 0x06, 0x44, 0xa1, 0x1d, 0x80, 0x6e, 0x41, 0x44, 0x25, - 0x01, 0x83, 0x6e, 0x81, 0x0d, 0x42, 0x15, 0x02, 0x82, 0x6e, 0xc1, 0x00, - 0x4f, 0x8a, 0x67, 0x95, 0x6e, 0x41, 0x4f, 0x8a, 0x67, 0x96, 0x6e, 0x41, - 0x44, 0x27, 0x1d, 0x87, 0x6e, 0x01, 0x42, 0x60, 0x25, 0x86, 0x6e, 0x41, - 0x4f, 0x8a, 0x67, 0x94, 0x6e, 0x41, 0x43, 0xa7, 0x05, 0x85, 0x6e, 0x01, - 0x43, 0xcb, 0x06, 0x84, 0x6e, 0x41, 0x0e, 0xba, 0x05, 0x06, 0x44, 0xe9, - 0x04, 0x97, 0x6e, 0x41, 0xe1, 0x4d, 0x6e, 0x81, 0x81, 0x01, 0xe2, 0x50, - 0x6e, 0x01, 0xe3, 0x51, 0x6e, 0x01, 0xe4, 0x59, 0x6e, 0x01, 0xe5, 0x4f, - 0x6e, 0x01, 0xe6, 0x4a, 0x6e, 0x01, 0xe7, 0x49, 0x6e, 0x01, 0xe8, 0x56, - 0x6e, 0x81, 0x60, 0xe9, 0x4b, 0x6e, 0x01, 0xea, 0x4e, 0x6e, 0x01, 0xeb, - 0x4c, 0x6e, 0x81, 0x4f, 0xec, 0x54, 0x6e, 0x01, 0xed, 0x40, 0x6e, 0x01, - 0xee, 0x5b, 0x6e, 0x81, 0x3a, 0xef, 0x5d, 0x6e, 0x81, 0x31, 0xf0, 0x47, - 0x6e, 0x01, 0xf1, 0x55, 0x6e, 0x01, 0xf2, 0x5c, 0x6e, 0x01, 0xf3, 0x41, - 0x6e, 0x01, 0xf4, 0x48, 0x6e, 0x01, 0xf5, 0x52, 0x6e, 0x01, 0xf6, 0x42, - 0x6e, 0x01, 0xf7, 0x43, 0x6e, 0x01, 0xf8, 0x58, 0x6e, 0x01, 0xf9, 0x5f, - 0x6e, 0x81, 0x04, 0xfa, 0x45, 0x6e, 0x41, 0xf5, 0x53, 0x6e, 0x41, 0xe5, - 0x5a, 0x6e, 0x41, 0xe7, 0x57, 0x6e, 0x01, 0xf9, 0x57, 0x6e, 0x41, 0xf0, - 0x46, 0x6e, 0x41, 0xf0, 0x56, 0x6e, 0x41, 0xe9, 0x5e, 0x6e, 0x01, 0x43, - 0x3e, 0x87, 0x44, 0x6e, 0x41, 0x43, 0xd3, 0x05, 0xbe, 0xf9, 0x01, 0x43, - 0xd2, 0x37, 0xbf, 0xf9, 0x41, 0x06, 0x30, 0xdd, 0x06, 0x49, 0x18, 0xbd, - 0x56, 0xf3, 0x41, 0x45, 0x04, 0x02, 0x21, 0x22, 0x80, 0x0c, 0x42, 0x08, - 0x00, 0x5e, 0x22, 0x00, 0x54, 0x2f, 0x44, 0x9d, 0x29, 0x40, 0x80, 0x01, - 0xff, 0x4c, 0x8d, 0x91, 0x9b, 0x29, 0x00, 0x27, 0xc9, 0x05, 0x01, 0xff, - 0x09, 0xc3, 0x47, 0x31, 0x09, 0x2b, 0x43, 0x21, 0x0a, 0x09, 0x01, 0x11, - 0x07, 0x48, 0x5d, 0x01, 0xff, 0x44, 0xc3, 0x00, 0xa9, 0x29, 0x00, 0x45, - 0xc8, 0x00, 0xa8, 0x29, 0x40, 0x44, 0xa5, 0x01, 0xae, 0x29, 0x00, 0x42, - 0x50, 0x02, 0xac, 0x29, 0x40, 0x44, 0xa5, 0x01, 0xaf, 0x29, 0x00, 0x42, - 0x50, 0x02, 0xad, 0x29, 0x40, 0x44, 0xc3, 0x00, 0xab, 0x29, 0x00, 0x45, - 0xc8, 0x00, 0xaa, 0x29, 0x40, 0x44, 0x06, 0x6f, 0xaf, 0x00, 0x00, 0xa7, - 0xf6, 0x42, 0xa8, 0x99, 0x3e, 0xab, 0xf7, 0x3c, 0xac, 0xe2, 0x36, 0x45, - 0xa2, 0xe5, 0xa3, 0xf9, 0x01, 0xee, 0x68, 0xf4, 0x81, 0x81, 0x32, 0xb0, - 0xf2, 0x31, 0xb2, 0xaf, 0x2e, 0xb3, 0xcd, 0x2a, 0xb4, 0x95, 0x01, 0x46, - 0x56, 0xde, 0xd6, 0xf5, 0x01, 0x0c, 0x29, 0x95, 0x01, 0xff, 0xa5, 0x75, - 0xa6, 0x58, 0x44, 0x46, 0x2a, 0xe9, 0xd2, 0x81, 0x4b, 0x43, 0xbf, 0x0a, - 0xe1, 0xd2, 0x01, 0xb3, 0x29, 0xb4, 0x06, 0x44, 0xa1, 0x1d, 0xe0, 0xd2, - 0x41, 0x42, 0x92, 0x01, 0xea, 0xd2, 0x01, 0xa8, 0x0d, 0xb7, 0x01, 0xff, - 0x44, 0x46, 0x2b, 0xec, 0xd2, 0x01, 0xef, 0xe2, 0xd2, 0x41, 0x46, 0x2b, - 0x59, 0xed, 0xd2, 0x01, 0x43, 0x26, 0x01, 0xe3, 0xd2, 0x41, 0x44, 0x27, - 0x1d, 0xe7, 0xd2, 0x81, 0x0d, 0x42, 0x60, 0x25, 0xe6, 0xd2, 0xc1, 0x00, - 0x44, 0x9e, 0x17, 0xf0, 0xd2, 0x41, 0x44, 0x9e, 0x17, 0xf1, 0xd2, 0x41, - 0x44, 0x9e, 0x17, 0xf3, 0xd2, 0x41, 0xa9, 0x0d, 0x43, 0xcb, 0x06, 0xe4, - 0xd2, 0xc1, 0x00, 0x44, 0x9e, 0x17, 0xee, 0xd2, 0x41, 0x45, 0x9d, 0x17, - 0xef, 0xd2, 0x01, 0x42, 0x32, 0x00, 0xe5, 0xd2, 0x41, 0x44, 0xc9, 0x00, - 0xe8, 0xd2, 0x81, 0x06, 0x45, 0x0b, 0x6e, 0xeb, 0xd2, 0x41, 0x43, 0x75, - 0x09, 0xf2, 0xd2, 0x41, 0x47, 0xb7, 0xcd, 0xc9, 0xf9, 0x01, 0x0a, 0x5b, - 0x52, 0x01, 0xff, 0x05, 0x9a, 0x5f, 0xb6, 0x1b, 0x0e, 0xa4, 0x75, 0xad, - 0x19, 0xa6, 0xda, 0x17, 0x07, 0x38, 0xcf, 0xe0, 0x12, 0x05, 0xc3, 0x00, - 0xb8, 0x12, 0x0a, 0xad, 0xab, 0x93, 0x10, 0x02, 0x0d, 0x00, 0xe1, 0x0f, - 0xb3, 0x01, 0xff, 0x0a, 0xcc, 0x46, 0xb2, 0x01, 0x06, 0x4a, 0x06, 0x01, - 0xff, 0x08, 0xb9, 0x05, 0x61, 0x06, 0x0c, 0x07, 0x01, 0xff, 0xe1, 0xb6, - 0xd4, 0x01, 0xe2, 0xb7, 0xd4, 0x01, 0xe3, 0xb8, 0xd4, 0x01, 0xe4, 0xb9, - 0xd4, 0x01, 0xe6, 0xbb, 0xd4, 0x01, 0xe8, 0xbd, 0xd4, 0x01, 0xe9, 0xbe, - 0xd4, 0x01, 0xea, 0xbf, 0xd4, 0x01, 0xeb, 0xc0, 0xd4, 0x01, 0xec, 0xc1, - 0xd4, 0x01, 0xed, 0xc2, 0xd4, 0x01, 0xee, 0xc3, 0xd4, 0x01, 0xf0, 0xc5, - 0xd4, 0x01, 0xf1, 0xc6, 0xd4, 0x01, 0xf2, 0xc7, 0xd4, 0x01, 0xf3, 0xc8, - 0xd4, 0x01, 0xf4, 0xc9, 0xd4, 0x01, 0xf5, 0xca, 0xd4, 0x01, 0xf6, 0xcb, - 0xd4, 0x01, 0xf7, 0xcc, 0xd4, 0x01, 0xf8, 0xcd, 0xd4, 0x01, 0xf9, 0xce, - 0xd4, 0x01, 0xfa, 0xcf, 0xd4, 0x41, 0xe1, 0x9c, 0xd4, 0x01, 0xe3, 0x9e, - 0xd4, 0x01, 0xe4, 0x9f, 0xd4, 0x01, 0xe7, 0xa2, 0xd4, 0x01, 0xea, 0xa5, - 0xd4, 0x01, 0xeb, 0xa6, 0xd4, 0x01, 0xee, 0xa9, 0xd4, 0x01, 0xef, 0xaa, - 0xd4, 0x01, 0xf0, 0xab, 0xd4, 0x01, 0xf1, 0xac, 0xd4, 0x01, 0xf3, 0xae, - 0xd4, 0x01, 0xf4, 0xaf, 0xd4, 0x01, 0xf5, 0xb0, 0xd4, 0x01, 0xf6, 0xb1, - 0xd4, 0x01, 0xf7, 0xb2, 0xd4, 0x01, 0xf8, 0xb3, 0xd4, 0x01, 0xf9, 0xb4, - 0xd4, 0x01, 0xfa, 0xb5, 0xd4, 0x41, 0x05, 0x9a, 0x5f, 0xfe, 0x03, 0x08, - 0xb9, 0x05, 0x91, 0x03, 0x06, 0xc4, 0x06, 0xca, 0x02, 0x07, 0x38, 0xcf, - 0x6d, 0x06, 0x0c, 0x07, 0x01, 0xff, 0xe1, 0xba, 0xd5, 0x01, 0xe2, 0xbb, - 0xd5, 0x01, 0xe3, 0xbc, 0xd5, 0x01, 0xe4, 0xbd, 0xd5, 0x01, 0xe5, 0xbe, - 0xd5, 0x01, 0xe6, 0xbf, 0xd5, 0x01, 0xe7, 0xc0, 0xd5, 0x01, 0xe8, 0xc1, - 0xd5, 0x01, 0xe9, 0xc2, 0xd5, 0x01, 0xea, 0xc3, 0xd5, 0x01, 0xeb, 0xc4, - 0xd5, 0x01, 0xec, 0xc5, 0xd5, 0x01, 0xed, 0xc6, 0xd5, 0x01, 0xee, 0xc7, - 0xd5, 0x01, 0xef, 0xc8, 0xd5, 0x01, 0xf0, 0xc9, 0xd5, 0x01, 0xf1, 0xca, - 0xd5, 0x01, 0xf2, 0xcb, 0xd5, 0x01, 0xf3, 0xcc, 0xd5, 0x01, 0xf4, 0xcd, - 0xd5, 0x01, 0xf5, 0xce, 0xd5, 0x01, 0xf6, 0xcf, 0xd5, 0x01, 0xf7, 0xd0, - 0xd5, 0x01, 0xf8, 0xd1, 0xd5, 0x01, 0xf9, 0xd2, 0xd5, 0x01, 0xfa, 0xd3, - 0xd5, 0x41, 0x08, 0xb9, 0x05, 0x6d, 0x06, 0x0c, 0x07, 0x01, 0xff, 0xe1, - 0x22, 0xd6, 0x01, 0xe2, 0x23, 0xd6, 0x01, 0xe3, 0x24, 0xd6, 0x01, 0xe4, - 0x25, 0xd6, 0x01, 0xe5, 0x26, 0xd6, 0x01, 0xe6, 0x27, 0xd6, 0x01, 0xe7, - 0x28, 0xd6, 0x01, 0xe8, 0x29, 0xd6, 0x01, 0xe9, 0x2a, 0xd6, 0x01, 0xea, - 0x2b, 0xd6, 0x01, 0xeb, 0x2c, 0xd6, 0x01, 0xec, 0x2d, 0xd6, 0x01, 0xed, - 0x2e, 0xd6, 0x01, 0xee, 0x2f, 0xd6, 0x01, 0xef, 0x30, 0xd6, 0x01, 0xf0, - 0x31, 0xd6, 0x01, 0xf1, 0x32, 0xd6, 0x01, 0xf2, 0x33, 0xd6, 0x01, 0xf3, - 0x34, 0xd6, 0x01, 0xf4, 0x35, 0xd6, 0x01, 0xf5, 0x36, 0xd6, 0x01, 0xf6, - 0x37, 0xd6, 0x01, 0xf7, 0x38, 0xd6, 0x01, 0xf8, 0x39, 0xd6, 0x01, 0xf9, - 0x3a, 0xd6, 0x01, 0xfa, 0x3b, 0xd6, 0x41, 0xe1, 0x08, 0xd6, 0x01, 0xe2, - 0x09, 0xd6, 0x01, 0xe3, 0x0a, 0xd6, 0x01, 0xe4, 0x0b, 0xd6, 0x01, 0xe5, - 0x0c, 0xd6, 0x01, 0xe6, 0x0d, 0xd6, 0x01, 0xe7, 0x0e, 0xd6, 0x01, 0xe8, - 0x0f, 0xd6, 0x01, 0xe9, 0x10, 0xd6, 0x01, 0xea, 0x11, 0xd6, 0x01, 0xeb, - 0x12, 0xd6, 0x01, 0xec, 0x13, 0xd6, 0x01, 0xed, 0x14, 0xd6, 0x01, 0xee, - 0x15, 0xd6, 0x01, 0xef, 0x16, 0xd6, 0x01, 0xf0, 0x17, 0xd6, 0x01, 0xf1, - 0x18, 0xd6, 0x01, 0xf2, 0x19, 0xd6, 0x01, 0xf3, 0x1a, 0xd6, 0x01, 0xf4, - 0x1b, 0xd6, 0x01, 0xf5, 0x1c, 0xd6, 0x01, 0xf6, 0x1d, 0xd6, 0x01, 0xf7, - 0x1e, 0xd6, 0x01, 0xf8, 0x1f, 0xd6, 0x01, 0xf9, 0x20, 0xd6, 0x01, 0xfa, - 0x21, 0xd6, 0x41, 0x45, 0xc3, 0x0a, 0xea, 0xd7, 0x01, 0xa6, 0x2e, 0x44, - 0x46, 0x2a, 0xeb, 0xd7, 0x01, 0x43, 0xbf, 0x0a, 0xe3, 0xd7, 0x01, 0xb3, - 0x14, 0xb4, 0x06, 0x44, 0xa1, 0x1d, 0xe2, 0xd7, 0x41, 0x44, 0x25, 0x01, - 0xe5, 0xd7, 0x01, 0x42, 0x15, 0x02, 0xe4, 0xd7, 0x41, 0x44, 0x27, 0x1d, - 0xe9, 0xd7, 0x01, 0x42, 0x60, 0x25, 0xe8, 0xd7, 0x41, 0x43, 0xa7, 0x05, - 0xe7, 0xd7, 0x01, 0x43, 0xcb, 0x06, 0xe6, 0xd7, 0x41, 0xe1, 0xa0, 0xd5, - 0x01, 0xe2, 0xa1, 0xd5, 0x01, 0xe3, 0xa2, 0xd5, 0x01, 0xe4, 0xa3, 0xd5, - 0x01, 0xe5, 0xa4, 0xd5, 0x01, 0xe6, 0xa5, 0xd5, 0x01, 0xe7, 0xa6, 0xd5, - 0x01, 0xe8, 0xa7, 0xd5, 0x01, 0xe9, 0xa8, 0xd5, 0x01, 0xea, 0xa9, 0xd5, - 0x01, 0xeb, 0xaa, 0xd5, 0x01, 0xec, 0xab, 0xd5, 0x01, 0xed, 0xac, 0xd5, - 0x01, 0xee, 0xad, 0xd5, 0x01, 0xef, 0xae, 0xd5, 0x01, 0xf0, 0xaf, 0xd5, - 0x01, 0xf1, 0xb0, 0xd5, 0x01, 0xf2, 0xb1, 0xd5, 0x01, 0xf3, 0xb2, 0xd5, - 0x01, 0xf4, 0xb3, 0xd5, 0x01, 0xf5, 0xb4, 0xd5, 0x01, 0xf6, 0xb5, 0xd5, - 0x01, 0xf7, 0xb6, 0xd5, 0x01, 0xf8, 0xb7, 0xd5, 0x01, 0xf9, 0xb8, 0xd5, - 0x01, 0xfa, 0xb9, 0xd5, 0x41, 0x08, 0xb9, 0x05, 0x87, 0x08, 0x06, 0xc4, - 0x06, 0xc0, 0x07, 0x4e, 0x62, 0x15, 0x8a, 0xd7, 0x01, 0x07, 0x38, 0xcf, - 0xc9, 0x02, 0x4c, 0xe1, 0x8e, 0x8c, 0xd7, 0x01, 0x45, 0xca, 0xe5, 0x6f, - 0xd7, 0x01, 0xb0, 0xa8, 0x02, 0x4a, 0xf1, 0xad, 0x8e, 0xd7, 0x01, 0x06, - 0x0c, 0x07, 0x06, 0x4c, 0xf1, 0x93, 0x8b, 0xd7, 0x41, 0xe1, 0xee, 0xd5, - 0x81, 0x8c, 0x02, 0xe2, 0xef, 0xd5, 0x81, 0x80, 0x02, 0xe3, 0xf0, 0xd5, - 0x81, 0xf4, 0x01, 0xe4, 0xf1, 0xd5, 0x81, 0xe8, 0x01, 0xe5, 0xf2, 0xd5, - 0x81, 0xd6, 0x01, 0xe6, 0xf3, 0xd5, 0x81, 0xca, 0x01, 0xe7, 0xf4, 0xd5, - 0x81, 0xbe, 0x01, 0xe8, 0xf5, 0xd5, 0x01, 0xe9, 0xf6, 0xd5, 0x81, 0xae, - 0x01, 0xea, 0xf7, 0xd5, 0x01, 0xeb, 0xf8, 0xd5, 0x81, 0x9e, 0x01, 0xec, - 0xf9, 0xd5, 0x81, 0x92, 0x01, 0xed, 0xfa, 0xd5, 0x81, 0x88, 0x01, 0xee, - 0xfb, 0xd5, 0x81, 0x7f, 0xef, 0xfc, 0xd5, 0x81, 0x6b, 0xf0, 0xfd, 0xd5, - 0x81, 0x56, 0xf1, 0xfe, 0xd5, 0x01, 0xf2, 0xff, 0xd5, 0x81, 0x47, 0xf3, - 0x00, 0xd6, 0x81, 0x3c, 0xf4, 0x01, 0xd6, 0x81, 0x2b, 0xf5, 0x02, 0xd6, - 0x81, 0x20, 0xf6, 0x03, 0xd6, 0x01, 0xf7, 0x04, 0xd6, 0x01, 0xf8, 0x05, - 0xd6, 0x81, 0x0f, 0xf9, 0x06, 0xd6, 0x01, 0xfa, 0x07, 0xd6, 0xc1, 0x00, - 0x43, 0x45, 0x0f, 0x75, 0xd7, 0x41, 0xe9, 0x7d, 0xd7, 0x41, 0x46, 0x63, - 0x15, 0x84, 0xd7, 0x41, 0x42, 0xd7, 0x23, 0x83, 0xd7, 0x01, 0x44, 0xf2, - 0x93, 0x77, 0xd7, 0x41, 0x44, 0x1d, 0x1f, 0x82, 0xd7, 0x41, 0x42, 0x0b, - 0x00, 0x80, 0xd7, 0x41, 0x42, 0x49, 0x00, 0x85, 0xd7, 0x01, 0xe9, 0x7f, - 0xd7, 0x01, 0x42, 0x2f, 0x03, 0x87, 0xd7, 0x41, 0xad, 0x01, 0xff, 0x43, - 0xa3, 0x05, 0x88, 0xd7, 0x01, 0x45, 0x3a, 0xe4, 0x7e, 0xd7, 0x41, 0xf5, - 0x7c, 0xd7, 0x41, 0xf5, 0x7b, 0xd7, 0x41, 0x44, 0xfe, 0xe4, 0x7a, 0xd7, - 0x41, 0x44, 0xe2, 0x8e, 0x79, 0xd7, 0x41, 0x43, 0xf0, 0x04, 0x78, 0xd7, - 0x41, 0x44, 0x5e, 0x20, 0x72, 0xd7, 0x41, 0x4a, 0xfe, 0x99, 0x81, 0xd7, - 0x41, 0x46, 0x63, 0x15, 0x74, 0xd7, 0x01, 0x42, 0x12, 0x00, 0x76, 0xd7, - 0x41, 0x44, 0x6c, 0xd3, 0x73, 0xd7, 0x41, 0x42, 0x49, 0x00, 0x86, 0xd7, - 0x41, 0x43, 0x45, 0x0f, 0x71, 0xd7, 0x41, 0x44, 0x2f, 0xe1, 0x70, 0xd7, - 0x41, 0x53, 0x18, 0x47, 0x89, 0xd7, 0x01, 0x49, 0x30, 0xb7, 0x8d, 0xd7, - 0x01, 0x48, 0x0b, 0xaa, 0x8f, 0xd7, 0x41, 0x08, 0xb9, 0x05, 0xcf, 0x02, - 0x4e, 0x62, 0x15, 0xc4, 0xd7, 0x01, 0x4c, 0xe1, 0x8e, 0xc6, 0xd7, 0x01, - 0x45, 0xca, 0xe5, 0xa9, 0xd7, 0x01, 0xb0, 0xa8, 0x02, 0x4a, 0xf1, 0xad, - 0xc8, 0xd7, 0x01, 0x06, 0x0c, 0x07, 0x06, 0x4c, 0xf1, 0x93, 0xc5, 0xd7, - 0x41, 0xe1, 0x56, 0xd6, 0x81, 0x8c, 0x02, 0xe2, 0x57, 0xd6, 0x81, 0x80, - 0x02, 0xe3, 0x58, 0xd6, 0x81, 0xf4, 0x01, 0xe4, 0x59, 0xd6, 0x81, 0xe8, - 0x01, 0xe5, 0x5a, 0xd6, 0x81, 0xd6, 0x01, 0xe6, 0x5b, 0xd6, 0x81, 0xca, - 0x01, 0xe7, 0x5c, 0xd6, 0x81, 0xbe, 0x01, 0xe8, 0x5d, 0xd6, 0x01, 0xe9, - 0x5e, 0xd6, 0x81, 0xae, 0x01, 0xea, 0x5f, 0xd6, 0x01, 0xeb, 0x60, 0xd6, - 0x81, 0x9e, 0x01, 0xec, 0x61, 0xd6, 0x81, 0x92, 0x01, 0xed, 0x62, 0xd6, - 0x81, 0x88, 0x01, 0xee, 0x63, 0xd6, 0x81, 0x7f, 0xef, 0x64, 0xd6, 0x81, - 0x6b, 0xf0, 0x65, 0xd6, 0x81, 0x56, 0xf1, 0x66, 0xd6, 0x01, 0xf2, 0x67, - 0xd6, 0x81, 0x47, 0xf3, 0x68, 0xd6, 0x81, 0x3c, 0xf4, 0x69, 0xd6, 0x81, - 0x2b, 0xf5, 0x6a, 0xd6, 0x81, 0x20, 0xf6, 0x6b, 0xd6, 0x01, 0xf7, 0x6c, - 0xd6, 0x01, 0xf8, 0x6d, 0xd6, 0x81, 0x0f, 0xf9, 0x6e, 0xd6, 0x01, 0xfa, - 0x6f, 0xd6, 0xc1, 0x00, 0x43, 0x45, 0x0f, 0xaf, 0xd7, 0x41, 0xe9, 0xb7, - 0xd7, 0x41, 0x46, 0x63, 0x15, 0xbe, 0xd7, 0x41, 0x42, 0xd7, 0x23, 0xbd, - 0xd7, 0x01, 0x44, 0xf2, 0x93, 0xb1, 0xd7, 0x41, 0x44, 0x1d, 0x1f, 0xbc, - 0xd7, 0x41, 0x42, 0x0b, 0x00, 0xba, 0xd7, 0x41, 0x42, 0x49, 0x00, 0xbf, - 0xd7, 0x01, 0xe9, 0xb9, 0xd7, 0x01, 0x42, 0x2f, 0x03, 0xc1, 0xd7, 0x41, - 0xad, 0x01, 0xff, 0x43, 0xa3, 0x05, 0xc2, 0xd7, 0x01, 0x45, 0x3a, 0xe4, - 0xb8, 0xd7, 0x41, 0xf5, 0xb6, 0xd7, 0x41, 0xf5, 0xb5, 0xd7, 0x41, 0x44, - 0xfe, 0xe4, 0xb4, 0xd7, 0x41, 0x44, 0xe2, 0x8e, 0xb3, 0xd7, 0x41, 0x43, - 0xf0, 0x04, 0xb2, 0xd7, 0x41, 0x44, 0x5e, 0x20, 0xac, 0xd7, 0x41, 0x4a, - 0xfe, 0x99, 0xbb, 0xd7, 0x41, 0x46, 0x63, 0x15, 0xae, 0xd7, 0x01, 0x42, - 0x12, 0x00, 0xb0, 0xd7, 0x41, 0x44, 0x6c, 0xd3, 0xad, 0xd7, 0x41, 0x42, - 0x49, 0x00, 0xc0, 0xd7, 0x41, 0x43, 0x45, 0x0f, 0xab, 0xd7, 0x41, 0x44, - 0x2f, 0xe1, 0xaa, 0xd7, 0x41, 0x53, 0x18, 0x47, 0xc3, 0xd7, 0x01, 0x49, - 0x30, 0xb7, 0xc7, 0xd7, 0x01, 0x48, 0x0b, 0xaa, 0xc9, 0xd7, 0x41, 0xe1, - 0x3c, 0xd6, 0x81, 0x8c, 0x02, 0xe2, 0x3d, 0xd6, 0x81, 0x80, 0x02, 0xe3, - 0x3e, 0xd6, 0x81, 0xf4, 0x01, 0xe4, 0x3f, 0xd6, 0x81, 0xe8, 0x01, 0xe5, - 0x40, 0xd6, 0x81, 0xd6, 0x01, 0xe6, 0x41, 0xd6, 0x01, 0xe7, 0x42, 0xd6, - 0x81, 0xc6, 0x01, 0xe8, 0x43, 0xd6, 0x01, 0xe9, 0x44, 0xd6, 0x81, 0xb6, - 0x01, 0xea, 0x45, 0xd6, 0x01, 0xeb, 0x46, 0xd6, 0x81, 0xa6, 0x01, 0xec, - 0x47, 0xd6, 0x81, 0x9a, 0x01, 0xed, 0x48, 0xd6, 0x81, 0x90, 0x01, 0xee, - 0x49, 0xd6, 0x81, 0x86, 0x01, 0xef, 0x4a, 0xd6, 0x81, 0x72, 0xf0, 0x4b, - 0xd6, 0x81, 0x5d, 0xf1, 0x4c, 0xd6, 0x01, 0xf2, 0x4d, 0xd6, 0x81, 0x4e, - 0xf3, 0x4e, 0xd6, 0x81, 0x43, 0xf4, 0x4f, 0xd6, 0x81, 0x2b, 0xf5, 0x50, - 0xd6, 0x81, 0x20, 0xf6, 0x51, 0xd6, 0x01, 0xf7, 0x52, 0xd6, 0x01, 0xf8, - 0x53, 0xd6, 0x81, 0x0f, 0xf9, 0x54, 0xd6, 0x01, 0xfa, 0x55, 0xd6, 0xc1, - 0x00, 0x43, 0x45, 0x0f, 0x95, 0xd7, 0x41, 0xe9, 0x9d, 0xd7, 0x41, 0x46, - 0x63, 0x15, 0xa4, 0xd7, 0x41, 0x42, 0xd7, 0x23, 0xa3, 0xd7, 0x01, 0x44, - 0xf2, 0x93, 0x97, 0xd7, 0xc1, 0x00, 0x47, 0xea, 0x07, 0xa1, 0xd7, 0x41, - 0x44, 0x1d, 0x1f, 0xa2, 0xd7, 0x41, 0x42, 0x0b, 0x00, 0xa0, 0xd7, 0x41, - 0x42, 0x49, 0x00, 0xa5, 0xd7, 0x01, 0xe9, 0x9f, 0xd7, 0x01, 0x42, 0x2f, - 0x03, 0xa7, 0xd7, 0x41, 0xad, 0x01, 0xff, 0x43, 0xa3, 0x05, 0xa8, 0xd7, - 0x01, 0x45, 0x3a, 0xe4, 0x9e, 0xd7, 0x41, 0xf5, 0x9c, 0xd7, 0x41, 0xf5, - 0x9b, 0xd7, 0x41, 0x44, 0xfe, 0xe4, 0x9a, 0xd7, 0x41, 0x44, 0xe2, 0x8e, - 0x99, 0xd7, 0x41, 0x43, 0xf0, 0x04, 0x98, 0xd7, 0x41, 0x44, 0x5e, 0x20, - 0x92, 0xd7, 0x41, 0x46, 0x63, 0x15, 0x94, 0xd7, 0x01, 0x42, 0x12, 0x00, - 0x96, 0xd7, 0x41, 0x44, 0x6c, 0xd3, 0x93, 0xd7, 0x41, 0x42, 0x49, 0x00, - 0xa6, 0xd7, 0x41, 0x43, 0x45, 0x0f, 0x91, 0xd7, 0x41, 0x44, 0x2f, 0xe1, - 0x90, 0xd7, 0x41, 0x45, 0xc3, 0x0a, 0xf4, 0xd7, 0x01, 0xa6, 0x2e, 0x44, - 0x46, 0x2a, 0xf5, 0xd7, 0x01, 0x43, 0xbf, 0x0a, 0xed, 0xd7, 0x01, 0xb3, - 0x14, 0xb4, 0x06, 0x44, 0xa1, 0x1d, 0xec, 0xd7, 0x41, 0x44, 0x25, 0x01, - 0xef, 0xd7, 0x01, 0x42, 0x15, 0x02, 0xee, 0xd7, 0x41, 0x44, 0x27, 0x1d, - 0xf3, 0xd7, 0x01, 0x42, 0x60, 0x25, 0xf2, 0xd7, 0x41, 0x43, 0xa7, 0x05, - 0xf1, 0xd7, 0x01, 0x43, 0xcb, 0x06, 0xf0, 0xd7, 0x41, 0xe1, 0xd4, 0xd5, - 0x81, 0x8c, 0x02, 0xe2, 0xd5, 0xd5, 0x81, 0x80, 0x02, 0xe3, 0xd6, 0xd5, - 0x81, 0xf4, 0x01, 0xe4, 0xd7, 0xd5, 0x81, 0xe8, 0x01, 0xe5, 0xd8, 0xd5, - 0x81, 0xd6, 0x01, 0xe6, 0xd9, 0xd5, 0x01, 0xe7, 0xda, 0xd5, 0x81, 0xc6, - 0x01, 0xe8, 0xdb, 0xd5, 0x01, 0xe9, 0xdc, 0xd5, 0x81, 0xb6, 0x01, 0xea, - 0xdd, 0xd5, 0x01, 0xeb, 0xde, 0xd5, 0x81, 0xa6, 0x01, 0xec, 0xdf, 0xd5, - 0x81, 0x9a, 0x01, 0xed, 0xe0, 0xd5, 0x81, 0x90, 0x01, 0xee, 0xe1, 0xd5, - 0x81, 0x86, 0x01, 0xef, 0xe2, 0xd5, 0x81, 0x72, 0xf0, 0xe3, 0xd5, 0x81, - 0x5d, 0xf1, 0xe4, 0xd5, 0x01, 0xf2, 0xe5, 0xd5, 0x81, 0x4e, 0xf3, 0xe6, - 0xd5, 0x81, 0x43, 0xf4, 0xe7, 0xd5, 0x81, 0x2b, 0xf5, 0xe8, 0xd5, 0x81, - 0x20, 0xf6, 0xe9, 0xd5, 0x01, 0xf7, 0xea, 0xd5, 0x01, 0xf8, 0xeb, 0xd5, - 0x81, 0x0f, 0xf9, 0xec, 0xd5, 0x01, 0xfa, 0xed, 0xd5, 0xc1, 0x00, 0x43, - 0x45, 0x0f, 0x5b, 0xd7, 0x41, 0xe9, 0x63, 0xd7, 0x41, 0x46, 0x63, 0x15, - 0x6a, 0xd7, 0x41, 0x42, 0xd7, 0x23, 0x69, 0xd7, 0x01, 0x44, 0xf2, 0x93, - 0x5d, 0xd7, 0xc1, 0x00, 0x47, 0xea, 0x07, 0x67, 0xd7, 0x41, 0x44, 0x1d, - 0x1f, 0x68, 0xd7, 0x41, 0x42, 0x0b, 0x00, 0x66, 0xd7, 0x41, 0x42, 0x49, - 0x00, 0x6b, 0xd7, 0x01, 0xe9, 0x65, 0xd7, 0x01, 0x42, 0x2f, 0x03, 0x6d, - 0xd7, 0x41, 0xad, 0x01, 0xff, 0x43, 0xa3, 0x05, 0x6e, 0xd7, 0x01, 0x45, - 0x3a, 0xe4, 0x64, 0xd7, 0x41, 0xf5, 0x62, 0xd7, 0x41, 0xf5, 0x61, 0xd7, - 0x41, 0x44, 0xfe, 0xe4, 0x60, 0xd7, 0x41, 0x44, 0xe2, 0x8e, 0x5f, 0xd7, - 0x41, 0x43, 0xf0, 0x04, 0x5e, 0xd7, 0x41, 0x44, 0x5e, 0x20, 0x58, 0xd7, - 0x41, 0x46, 0x63, 0x15, 0x5a, 0xd7, 0x01, 0x42, 0x12, 0x00, 0x5c, 0xd7, - 0x41, 0x44, 0x6c, 0xd3, 0x59, 0xd7, 0x41, 0x42, 0x49, 0x00, 0x6c, 0xd7, - 0x41, 0x43, 0x45, 0x0f, 0x57, 0xd7, 0x41, 0x44, 0x2f, 0xe1, 0x56, 0xd7, - 0x41, 0x04, 0xca, 0x00, 0x06, 0x4d, 0x52, 0x30, 0xcb, 0x27, 0x40, 0x4d, - 0xef, 0x0e, 0xe9, 0x27, 0x00, 0x54, 0x97, 0x40, 0xeb, 0x27, 0x00, 0x55, - 0x60, 0x3a, 0xef, 0x27, 0x00, 0x06, 0xad, 0x02, 0x01, 0xff, 0x4e, 0x27, - 0x26, 0xe7, 0x27, 0x00, 0x56, 0x05, 0x09, 0xed, 0x27, 0x40, 0x08, 0xb9, - 0x05, 0xb3, 0x01, 0x06, 0xc4, 0x06, 0x6d, 0x06, 0x0c, 0x07, 0x01, 0xff, - 0xe1, 0x8a, 0xd6, 0x01, 0xe2, 0x8b, 0xd6, 0x01, 0xe3, 0x8c, 0xd6, 0x01, - 0xe4, 0x8d, 0xd6, 0x01, 0xe5, 0x8e, 0xd6, 0x01, 0xe6, 0x8f, 0xd6, 0x01, - 0xe7, 0x90, 0xd6, 0x01, 0xe8, 0x91, 0xd6, 0x01, 0xe9, 0x92, 0xd6, 0x01, - 0xea, 0x93, 0xd6, 0x01, 0xeb, 0x94, 0xd6, 0x01, 0xec, 0x95, 0xd6, 0x01, - 0xed, 0x96, 0xd6, 0x01, 0xee, 0x97, 0xd6, 0x01, 0xef, 0x98, 0xd6, 0x01, - 0xf0, 0x99, 0xd6, 0x01, 0xf1, 0x9a, 0xd6, 0x01, 0xf2, 0x9b, 0xd6, 0x01, - 0xf3, 0x9c, 0xd6, 0x01, 0xf4, 0x9d, 0xd6, 0x01, 0xf5, 0x9e, 0xd6, 0x01, - 0xf6, 0x9f, 0xd6, 0x01, 0xf7, 0xa0, 0xd6, 0x01, 0xf8, 0xa1, 0xd6, 0x01, - 0xf9, 0xa2, 0xd6, 0x01, 0xfa, 0xa3, 0xd6, 0x41, 0x45, 0xc3, 0x0a, 0xfe, - 0xd7, 0x01, 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0xff, 0xd7, 0x01, 0x43, 0xbf, - 0x0a, 0xf7, 0xd7, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xa1, 0x1d, 0xf6, - 0xd7, 0x41, 0x44, 0x25, 0x01, 0xf9, 0xd7, 0x01, 0x42, 0x15, 0x02, 0xf8, - 0xd7, 0x41, 0x44, 0x27, 0x1d, 0xfd, 0xd7, 0x01, 0x42, 0x60, 0x25, 0xfc, - 0xd7, 0x41, 0x43, 0xa7, 0x05, 0xfb, 0xd7, 0x01, 0x43, 0xcb, 0x06, 0xfa, - 0xd7, 0x41, 0xe1, 0x70, 0xd6, 0x01, 0xe2, 0x71, 0xd6, 0x01, 0xe3, 0x72, - 0xd6, 0x01, 0xe4, 0x73, 0xd6, 0x01, 0xe5, 0x74, 0xd6, 0x01, 0xe6, 0x75, - 0xd6, 0x01, 0xe7, 0x76, 0xd6, 0x01, 0xe8, 0x77, 0xd6, 0x01, 0xe9, 0x78, - 0xd6, 0x01, 0xea, 0x79, 0xd6, 0x01, 0xeb, 0x7a, 0xd6, 0x01, 0xec, 0x7b, - 0xd6, 0x01, 0xed, 0x7c, 0xd6, 0x01, 0xee, 0x7d, 0xd6, 0x01, 0xef, 0x7e, - 0xd6, 0x01, 0xf0, 0x7f, 0xd6, 0x01, 0xf1, 0x80, 0xd6, 0x01, 0xf2, 0x81, - 0xd6, 0x01, 0xf3, 0x82, 0xd6, 0x01, 0xf4, 0x83, 0xd6, 0x01, 0xf5, 0x84, - 0xd6, 0x01, 0xf6, 0x85, 0xd6, 0x01, 0xf7, 0x86, 0xd6, 0x01, 0xf8, 0x87, - 0xd6, 0x01, 0xf9, 0x88, 0xd6, 0x01, 0xfa, 0x89, 0xd6, 0x41, 0x4d, 0xef, - 0x0e, 0xe8, 0x27, 0x00, 0x54, 0x97, 0x40, 0xea, 0x27, 0x00, 0x55, 0x60, - 0x3a, 0xee, 0x27, 0x00, 0x06, 0xad, 0x02, 0x01, 0xff, 0x4e, 0x27, 0x26, - 0xe6, 0x27, 0x00, 0x56, 0x05, 0x09, 0xec, 0x27, 0x40, 0x08, 0xb9, 0x05, - 0xd8, 0x02, 0x4e, 0x62, 0x15, 0x16, 0xd7, 0x01, 0x4c, 0xe1, 0x8e, 0x18, - 0xd7, 0x01, 0x45, 0xca, 0xe5, 0xfb, 0xd6, 0x01, 0xb0, 0xb1, 0x02, 0x4a, - 0xf1, 0xad, 0x1a, 0xd7, 0x01, 0x06, 0x0c, 0x07, 0x06, 0x4c, 0xf1, 0x93, - 0x17, 0xd7, 0x41, 0xe1, 0x4e, 0xd4, 0x81, 0x95, 0x02, 0xe2, 0x4f, 0xd4, - 0x81, 0x89, 0x02, 0xe3, 0x50, 0xd4, 0x81, 0xfd, 0x01, 0xe4, 0x51, 0xd4, - 0x81, 0xe4, 0x01, 0xe5, 0x52, 0xd4, 0x81, 0xd2, 0x01, 0xe6, 0x53, 0xd4, - 0x81, 0xc6, 0x01, 0xe7, 0x54, 0xd4, 0x81, 0xba, 0x01, 0xe9, 0x56, 0xd4, - 0x81, 0xae, 0x01, 0xea, 0x57, 0xd4, 0x01, 0xeb, 0x58, 0xd4, 0x81, 0x9e, - 0x01, 0xec, 0x59, 0xd4, 0x81, 0x92, 0x01, 0xed, 0x5a, 0xd4, 0x81, 0x88, - 0x01, 0xee, 0x5b, 0xd4, 0x81, 0x7f, 0xef, 0x5c, 0xd4, 0x81, 0x6b, 0xf0, - 0x5d, 0xd4, 0x81, 0x56, 0xf1, 0x5e, 0xd4, 0x01, 0xf2, 0x5f, 0xd4, 0x81, - 0x47, 0xf3, 0x60, 0xd4, 0x81, 0x3c, 0xf4, 0x61, 0xd4, 0x81, 0x2b, 0xf5, - 0x62, 0xd4, 0x81, 0x20, 0xf6, 0x63, 0xd4, 0x01, 0xf7, 0x64, 0xd4, 0x01, - 0xf8, 0x65, 0xd4, 0x81, 0x0f, 0xf9, 0x66, 0xd4, 0x01, 0xfa, 0x67, 0xd4, - 0xc1, 0x00, 0x43, 0x45, 0x0f, 0x01, 0xd7, 0x41, 0xe9, 0x09, 0xd7, 0x41, - 0x46, 0x63, 0x15, 0x10, 0xd7, 0x41, 0x42, 0xd7, 0x23, 0x0f, 0xd7, 0x01, - 0x44, 0xf2, 0x93, 0x03, 0xd7, 0x41, 0x44, 0x1d, 0x1f, 0x0e, 0xd7, 0x41, - 0x42, 0x0b, 0x00, 0x0c, 0xd7, 0x41, 0x42, 0x49, 0x00, 0x11, 0xd7, 0x01, - 0xe9, 0x0b, 0xd7, 0x01, 0x42, 0x2f, 0x03, 0x13, 0xd7, 0x41, 0xad, 0x01, - 0xff, 0x43, 0xa3, 0x05, 0x14, 0xd7, 0x01, 0x45, 0x3a, 0xe4, 0x0a, 0xd7, - 0x41, 0xf5, 0x08, 0xd7, 0x41, 0xf5, 0x07, 0xd7, 0x41, 0x44, 0xfe, 0xe4, - 0x06, 0xd7, 0x41, 0x44, 0xe2, 0x8e, 0x05, 0xd7, 0x41, 0x43, 0xf0, 0x04, - 0x04, 0xd7, 0x41, 0x44, 0x5e, 0x20, 0xfe, 0xd6, 0x41, 0x4a, 0xfe, 0x99, - 0x0d, 0xd7, 0x41, 0x46, 0x63, 0x15, 0x00, 0xd7, 0x01, 0x42, 0x12, 0x00, - 0x02, 0xd7, 0x41, 0x44, 0x6c, 0xd3, 0xff, 0xd6, 0x01, 0x07, 0x84, 0x40, - 0x01, 0xff, 0xe9, 0xa4, 0xd6, 0x01, 0xea, 0xa5, 0xd6, 0x41, 0x42, 0x49, - 0x00, 0x12, 0xd7, 0x41, 0x43, 0x45, 0x0f, 0xfd, 0xd6, 0x41, 0x44, 0x2f, - 0xe1, 0xfc, 0xd6, 0x41, 0x53, 0x18, 0x47, 0x15, 0xd7, 0x01, 0x49, 0x30, - 0xb7, 0x19, 0xd7, 0x01, 0x48, 0x0b, 0xaa, 0x1b, 0xd7, 0x41, 0xe1, 0x34, - 0xd4, 0x81, 0x8c, 0x02, 0xe2, 0x35, 0xd4, 0x81, 0x80, 0x02, 0xe3, 0x36, - 0xd4, 0x81, 0xf4, 0x01, 0xe4, 0x37, 0xd4, 0x81, 0xe8, 0x01, 0xe5, 0x38, - 0xd4, 0x81, 0xd6, 0x01, 0xe6, 0x39, 0xd4, 0x01, 0xe7, 0x3a, 0xd4, 0x81, - 0xc6, 0x01, 0xe8, 0x3b, 0xd4, 0x01, 0xe9, 0x3c, 0xd4, 0x81, 0xb6, 0x01, - 0xea, 0x3d, 0xd4, 0x01, 0xeb, 0x3e, 0xd4, 0x81, 0xa6, 0x01, 0xec, 0x3f, - 0xd4, 0x81, 0x9a, 0x01, 0xed, 0x40, 0xd4, 0x81, 0x90, 0x01, 0xee, 0x41, - 0xd4, 0x81, 0x86, 0x01, 0xef, 0x42, 0xd4, 0x81, 0x72, 0xf0, 0x43, 0xd4, - 0x81, 0x5d, 0xf1, 0x44, 0xd4, 0x01, 0xf2, 0x45, 0xd4, 0x81, 0x4e, 0xf3, - 0x46, 0xd4, 0x81, 0x43, 0xf4, 0x47, 0xd4, 0x81, 0x2b, 0xf5, 0x48, 0xd4, - 0x81, 0x20, 0xf6, 0x49, 0xd4, 0x01, 0xf7, 0x4a, 0xd4, 0x01, 0xf8, 0x4b, - 0xd4, 0x81, 0x0f, 0xf9, 0x4c, 0xd4, 0x01, 0xfa, 0x4d, 0xd4, 0xc1, 0x00, - 0x43, 0x45, 0x0f, 0xe7, 0xd6, 0x41, 0xe9, 0xef, 0xd6, 0x41, 0x46, 0x63, - 0x15, 0xf6, 0xd6, 0x41, 0x42, 0xd7, 0x23, 0xf5, 0xd6, 0x01, 0x44, 0xf2, - 0x93, 0xe9, 0xd6, 0xc1, 0x00, 0x47, 0xea, 0x07, 0xf3, 0xd6, 0x41, 0x44, - 0x1d, 0x1f, 0xf4, 0xd6, 0x41, 0x42, 0x0b, 0x00, 0xf2, 0xd6, 0x41, 0x42, - 0x49, 0x00, 0xf7, 0xd6, 0x01, 0xe9, 0xf1, 0xd6, 0x01, 0x42, 0x2f, 0x03, - 0xf9, 0xd6, 0x41, 0xad, 0x01, 0xff, 0x43, 0xa3, 0x05, 0xfa, 0xd6, 0x01, - 0x45, 0x3a, 0xe4, 0xf0, 0xd6, 0x41, 0xf5, 0xee, 0xd6, 0x41, 0xf5, 0xed, - 0xd6, 0x41, 0x44, 0xfe, 0xe4, 0xec, 0xd6, 0x41, 0x44, 0xe2, 0x8e, 0xeb, - 0xd6, 0x41, 0x43, 0xf0, 0x04, 0xea, 0xd6, 0x41, 0x44, 0x5e, 0x20, 0xe4, - 0xd6, 0x41, 0x46, 0x63, 0x15, 0xe6, 0xd6, 0x01, 0x42, 0x12, 0x00, 0xe8, - 0xd6, 0x41, 0x44, 0x6c, 0xd3, 0xe5, 0xd6, 0x41, 0x42, 0x49, 0x00, 0xf8, - 0xd6, 0x41, 0x43, 0x45, 0x0f, 0xe3, 0xd6, 0x41, 0x44, 0x2f, 0xe1, 0xe2, - 0xd6, 0x41, 0x4f, 0x53, 0x38, 0xcd, 0x27, 0x00, 0x07, 0xb3, 0xc3, 0x01, - 0xff, 0x08, 0xb9, 0x05, 0x6d, 0x06, 0x0c, 0x07, 0x01, 0xff, 0xe1, 0x1e, - 0xd5, 0x01, 0xe2, 0x1f, 0xd5, 0x01, 0xe3, 0x20, 0xd5, 0x01, 0xe4, 0x21, - 0xd5, 0x01, 0xe5, 0x22, 0xd5, 0x01, 0xe6, 0x23, 0xd5, 0x01, 0xe7, 0x24, - 0xd5, 0x01, 0xe8, 0x25, 0xd5, 0x01, 0xe9, 0x26, 0xd5, 0x01, 0xea, 0x27, - 0xd5, 0x01, 0xeb, 0x28, 0xd5, 0x01, 0xec, 0x29, 0xd5, 0x01, 0xed, 0x2a, - 0xd5, 0x01, 0xee, 0x2b, 0xd5, 0x01, 0xef, 0x2c, 0xd5, 0x01, 0xf0, 0x2d, - 0xd5, 0x01, 0xf1, 0x2e, 0xd5, 0x01, 0xf2, 0x2f, 0xd5, 0x01, 0xf3, 0x30, - 0xd5, 0x01, 0xf4, 0x31, 0xd5, 0x01, 0xf5, 0x32, 0xd5, 0x01, 0xf6, 0x33, - 0xd5, 0x01, 0xf7, 0x34, 0xd5, 0x01, 0xf8, 0x35, 0xd5, 0x01, 0xf9, 0x36, - 0xd5, 0x01, 0xfa, 0x37, 0xd5, 0x41, 0xe1, 0x04, 0xd5, 0x01, 0xe2, 0x05, - 0xd5, 0x01, 0xe4, 0x07, 0xd5, 0x01, 0xe5, 0x08, 0xd5, 0x01, 0xe6, 0x09, - 0xd5, 0x01, 0xe7, 0x0a, 0xd5, 0x01, 0xea, 0x0d, 0xd5, 0x01, 0xeb, 0x0e, - 0xd5, 0x01, 0xec, 0x0f, 0xd5, 0x01, 0xed, 0x10, 0xd5, 0x01, 0xee, 0x11, - 0xd5, 0x01, 0xef, 0x12, 0xd5, 0x01, 0xf0, 0x13, 0xd5, 0x01, 0xf1, 0x14, - 0xd5, 0x01, 0xf3, 0x16, 0xd5, 0x01, 0xf4, 0x17, 0xd5, 0x01, 0xf5, 0x18, - 0xd5, 0x01, 0xf6, 0x19, 0xd5, 0x01, 0xf7, 0x1a, 0xd5, 0x01, 0xf8, 0x1b, - 0xd5, 0x01, 0xf9, 0x1c, 0xd5, 0x41, 0x08, 0xb9, 0x05, 0xb3, 0x01, 0x06, - 0xc4, 0x06, 0x6d, 0x06, 0x0c, 0x07, 0x01, 0xff, 0xe1, 0x52, 0xd5, 0x01, - 0xe2, 0x53, 0xd5, 0x01, 0xe3, 0x54, 0xd5, 0x01, 0xe4, 0x55, 0xd5, 0x01, - 0xe5, 0x56, 0xd5, 0x01, 0xe6, 0x57, 0xd5, 0x01, 0xe7, 0x58, 0xd5, 0x01, - 0xe8, 0x59, 0xd5, 0x01, 0xe9, 0x5a, 0xd5, 0x01, 0xea, 0x5b, 0xd5, 0x01, - 0xeb, 0x5c, 0xd5, 0x01, 0xec, 0x5d, 0xd5, 0x01, 0xed, 0x5e, 0xd5, 0x01, - 0xee, 0x5f, 0xd5, 0x01, 0xef, 0x60, 0xd5, 0x01, 0xf0, 0x61, 0xd5, 0x01, - 0xf1, 0x62, 0xd5, 0x01, 0xf2, 0x63, 0xd5, 0x01, 0xf3, 0x64, 0xd5, 0x01, - 0xf4, 0x65, 0xd5, 0x01, 0xf5, 0x66, 0xd5, 0x01, 0xf6, 0x67, 0xd5, 0x01, - 0xf7, 0x68, 0xd5, 0x01, 0xf8, 0x69, 0xd5, 0x01, 0xf9, 0x6a, 0xd5, 0x01, - 0xfa, 0x6b, 0xd5, 0x41, 0x45, 0xc3, 0x0a, 0xe0, 0xd7, 0x01, 0xa6, 0x2e, - 0x44, 0x46, 0x2a, 0xe1, 0xd7, 0x01, 0x43, 0xbf, 0x0a, 0xd9, 0xd7, 0x01, - 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xa1, 0x1d, 0xd8, 0xd7, 0x41, 0x44, 0x25, - 0x01, 0xdb, 0xd7, 0x01, 0x42, 0x15, 0x02, 0xda, 0xd7, 0x41, 0x44, 0x27, - 0x1d, 0xdf, 0xd7, 0x01, 0x42, 0x60, 0x25, 0xde, 0xd7, 0x41, 0x43, 0xa7, - 0x05, 0xdd, 0xd7, 0x01, 0x43, 0xcb, 0x06, 0xdc, 0xd7, 0x41, 0xe1, 0x38, - 0xd5, 0x01, 0xe2, 0x39, 0xd5, 0x01, 0xe4, 0x3b, 0xd5, 0x01, 0xe5, 0x3c, - 0xd5, 0x01, 0xe6, 0x3d, 0xd5, 0x01, 0xe7, 0x3e, 0xd5, 0x01, 0xe9, 0x40, - 0xd5, 0x01, 0xea, 0x41, 0xd5, 0x01, 0xeb, 0x42, 0xd5, 0x01, 0xec, 0x43, - 0xd5, 0x01, 0xed, 0x44, 0xd5, 0x01, 0xef, 0x46, 0xd5, 0x01, 0xf3, 0x4a, - 0xd5, 0x01, 0xf4, 0x4b, 0xd5, 0x01, 0xf5, 0x4c, 0xd5, 0x01, 0xf6, 0x4d, - 0xd5, 0x01, 0xf7, 0x4e, 0xd5, 0x01, 0xf8, 0x4f, 0xd5, 0x01, 0xf9, 0x50, - 0xd5, 0x41, 0x08, 0xb9, 0x05, 0xcc, 0x0b, 0x06, 0xc4, 0x06, 0x85, 0x0b, - 0x4e, 0x62, 0x15, 0xdc, 0xd6, 0x01, 0x08, 0xb2, 0xc3, 0xa1, 0x09, 0x07, - 0x38, 0xcf, 0xb0, 0x04, 0x4c, 0xe1, 0x8e, 0xde, 0xd6, 0x01, 0x45, 0xca, - 0xe5, 0xc1, 0xd6, 0x01, 0xb0, 0x8f, 0x04, 0x4a, 0xf1, 0xad, 0xe0, 0xd6, - 0x01, 0xb3, 0x06, 0x4c, 0xf1, 0x93, 0xdd, 0xd6, 0x41, 0x06, 0x4a, 0x06, - 0xa3, 0x02, 0x05, 0x0d, 0x07, 0x01, 0xff, 0xe1, 0x1a, 0xd4, 0x81, 0x92, - 0x02, 0xe2, 0x1b, 0xd4, 0x81, 0x86, 0x02, 0xe3, 0x1c, 0xd4, 0x81, 0xfa, - 0x01, 0xe4, 0x1d, 0xd4, 0x81, 0xe8, 0x01, 0xe5, 0x1e, 0xd4, 0x81, 0xd6, - 0x01, 0xe6, 0x1f, 0xd4, 0x81, 0xca, 0x01, 0xe7, 0x20, 0xd4, 0x81, 0xbe, - 0x01, 0xe8, 0x21, 0xd4, 0x01, 0xe9, 0x22, 0xd4, 0x81, 0xae, 0x01, 0xea, - 0x23, 0xd4, 0x01, 0xeb, 0x24, 0xd4, 0x81, 0x9e, 0x01, 0xec, 0x25, 0xd4, - 0x81, 0x92, 0x01, 0xed, 0x26, 0xd4, 0x81, 0x88, 0x01, 0xee, 0x27, 0xd4, - 0x81, 0x7f, 0xef, 0x28, 0xd4, 0x81, 0x6b, 0xf0, 0x29, 0xd4, 0x81, 0x56, - 0xf1, 0x2a, 0xd4, 0x01, 0xf2, 0x2b, 0xd4, 0x81, 0x47, 0xf3, 0x2c, 0xd4, - 0x81, 0x3c, 0xf4, 0x2d, 0xd4, 0x81, 0x2b, 0xf5, 0x2e, 0xd4, 0x81, 0x20, - 0xf6, 0x2f, 0xd4, 0x01, 0xf7, 0x30, 0xd4, 0x01, 0xf8, 0x31, 0xd4, 0x81, - 0x0f, 0xf9, 0x32, 0xd4, 0x01, 0xfa, 0x33, 0xd4, 0xc1, 0x00, 0x43, 0x45, - 0x0f, 0xc7, 0xd6, 0x41, 0xe9, 0xcf, 0xd6, 0x41, 0x46, 0x63, 0x15, 0xd6, - 0xd6, 0x41, 0x42, 0xd7, 0x23, 0xd5, 0xd6, 0x01, 0x44, 0xf2, 0x93, 0xc9, - 0xd6, 0x41, 0x44, 0x1d, 0x1f, 0xd4, 0xd6, 0x41, 0x42, 0x0b, 0x00, 0xd2, - 0xd6, 0x41, 0x42, 0x49, 0x00, 0xd7, 0xd6, 0x01, 0xe9, 0xd1, 0xd6, 0x01, - 0x42, 0x2f, 0x03, 0xd9, 0xd6, 0x41, 0xad, 0x01, 0xff, 0x43, 0xa3, 0x05, - 0xda, 0xd6, 0x01, 0x45, 0x3a, 0xe4, 0xd0, 0xd6, 0x41, 0xf5, 0xce, 0xd6, - 0x41, 0xf5, 0xcd, 0xd6, 0x41, 0x44, 0xfe, 0xe4, 0xcc, 0xd6, 0x41, 0x44, - 0xe2, 0x8e, 0xcb, 0xd6, 0x41, 0x43, 0xf0, 0x04, 0xca, 0xd6, 0x41, 0x44, - 0x5e, 0x20, 0xc4, 0xd6, 0x41, 0x4a, 0xfe, 0x99, 0xd3, 0xd6, 0x41, 0x46, - 0x63, 0x15, 0xc6, 0xd6, 0x01, 0x42, 0x12, 0x00, 0xc8, 0xd6, 0x41, 0x44, - 0x6c, 0xd3, 0xc5, 0xd6, 0x01, 0x46, 0xd1, 0x56, 0xcb, 0xd7, 0x41, 0x42, - 0x49, 0x00, 0xd8, 0xd6, 0x41, 0x43, 0x45, 0x0f, 0xc3, 0xd6, 0x41, 0x44, - 0x2f, 0xe1, 0xc2, 0xd6, 0x41, 0x08, 0xb9, 0x05, 0x6d, 0x06, 0x0c, 0x07, - 0x01, 0xff, 0xe1, 0xea, 0xd4, 0x01, 0xe2, 0xeb, 0xd4, 0x01, 0xe3, 0xec, - 0xd4, 0x01, 0xe4, 0xed, 0xd4, 0x01, 0xe5, 0xee, 0xd4, 0x01, 0xe6, 0xef, - 0xd4, 0x01, 0xe7, 0xf0, 0xd4, 0x01, 0xe8, 0xf1, 0xd4, 0x01, 0xe9, 0xf2, - 0xd4, 0x01, 0xea, 0xf3, 0xd4, 0x01, 0xeb, 0xf4, 0xd4, 0x01, 0xec, 0xf5, - 0xd4, 0x01, 0xed, 0xf6, 0xd4, 0x01, 0xee, 0xf7, 0xd4, 0x01, 0xef, 0xf8, - 0xd4, 0x01, 0xf0, 0xf9, 0xd4, 0x01, 0xf1, 0xfa, 0xd4, 0x01, 0xf2, 0xfb, - 0xd4, 0x01, 0xf3, 0xfc, 0xd4, 0x01, 0xf4, 0xfd, 0xd4, 0x01, 0xf5, 0xfe, - 0xd4, 0x01, 0xf6, 0xff, 0xd4, 0x01, 0xf7, 0x00, 0xd5, 0x01, 0xf8, 0x01, - 0xd5, 0x01, 0xf9, 0x02, 0xd5, 0x01, 0xfa, 0x03, 0xd5, 0x41, 0xe1, 0xd0, - 0xd4, 0x01, 0xe2, 0xd1, 0xd4, 0x01, 0xe3, 0xd2, 0xd4, 0x01, 0xe4, 0xd3, - 0xd4, 0x01, 0xe5, 0xd4, 0xd4, 0x01, 0xe6, 0xd5, 0xd4, 0x01, 0xe7, 0xd6, - 0xd4, 0x01, 0xe8, 0xd7, 0xd4, 0x01, 0xe9, 0xd8, 0xd4, 0x01, 0xea, 0xd9, - 0xd4, 0x01, 0xeb, 0xda, 0xd4, 0x01, 0xec, 0xdb, 0xd4, 0x01, 0xed, 0xdc, - 0xd4, 0x01, 0xee, 0xdd, 0xd4, 0x01, 0xef, 0xde, 0xd4, 0x01, 0xf0, 0xdf, - 0xd4, 0x01, 0xf1, 0xe0, 0xd4, 0x01, 0xf2, 0xe1, 0xd4, 0x01, 0xf3, 0xe2, - 0xd4, 0x01, 0xf4, 0xe3, 0xd4, 0x01, 0xf5, 0xe4, 0xd4, 0x01, 0xf6, 0xe5, - 0xd4, 0x01, 0xf7, 0xe6, 0xd4, 0x01, 0xf8, 0xe7, 0xd4, 0x01, 0xf9, 0xe8, - 0xd4, 0x01, 0xfa, 0xe9, 0xd4, 0x41, 0x53, 0x18, 0x47, 0xdb, 0xd6, 0x01, - 0x49, 0x30, 0xb7, 0xdf, 0xd6, 0x01, 0x48, 0x0b, 0xaa, 0xe1, 0xd6, 0x41, - 0x08, 0xb9, 0x05, 0xcf, 0x02, 0x4e, 0x62, 0x15, 0x50, 0xd7, 0x01, 0x4c, - 0xe1, 0x8e, 0x52, 0xd7, 0x01, 0x45, 0xca, 0xe5, 0x35, 0xd7, 0x01, 0xb0, - 0xa8, 0x02, 0x4a, 0xf1, 0xad, 0x54, 0xd7, 0x01, 0x06, 0x0c, 0x07, 0x06, - 0x4c, 0xf1, 0x93, 0x51, 0xd7, 0x41, 0xe1, 0x82, 0xd4, 0x81, 0x8c, 0x02, - 0xe2, 0x83, 0xd4, 0x81, 0x80, 0x02, 0xe3, 0x84, 0xd4, 0x81, 0xf4, 0x01, - 0xe4, 0x85, 0xd4, 0x81, 0xe8, 0x01, 0xe5, 0x86, 0xd4, 0x81, 0xd6, 0x01, - 0xe6, 0x87, 0xd4, 0x81, 0xca, 0x01, 0xe7, 0x88, 0xd4, 0x81, 0xbe, 0x01, - 0xe8, 0x89, 0xd4, 0x01, 0xe9, 0x8a, 0xd4, 0x81, 0xae, 0x01, 0xea, 0x8b, - 0xd4, 0x01, 0xeb, 0x8c, 0xd4, 0x81, 0x9e, 0x01, 0xec, 0x8d, 0xd4, 0x81, - 0x92, 0x01, 0xed, 0x8e, 0xd4, 0x81, 0x88, 0x01, 0xee, 0x8f, 0xd4, 0x81, - 0x7f, 0xef, 0x90, 0xd4, 0x81, 0x6b, 0xf0, 0x91, 0xd4, 0x81, 0x56, 0xf1, - 0x92, 0xd4, 0x01, 0xf2, 0x93, 0xd4, 0x81, 0x47, 0xf3, 0x94, 0xd4, 0x81, - 0x3c, 0xf4, 0x95, 0xd4, 0x81, 0x2b, 0xf5, 0x96, 0xd4, 0x81, 0x20, 0xf6, - 0x97, 0xd4, 0x01, 0xf7, 0x98, 0xd4, 0x01, 0xf8, 0x99, 0xd4, 0x81, 0x0f, - 0xf9, 0x9a, 0xd4, 0x01, 0xfa, 0x9b, 0xd4, 0xc1, 0x00, 0x43, 0x45, 0x0f, - 0x3b, 0xd7, 0x41, 0xe9, 0x43, 0xd7, 0x41, 0x46, 0x63, 0x15, 0x4a, 0xd7, - 0x41, 0x42, 0xd7, 0x23, 0x49, 0xd7, 0x01, 0x44, 0xf2, 0x93, 0x3d, 0xd7, - 0x41, 0x44, 0x1d, 0x1f, 0x48, 0xd7, 0x41, 0x42, 0x0b, 0x00, 0x46, 0xd7, - 0x41, 0x42, 0x49, 0x00, 0x4b, 0xd7, 0x01, 0xe9, 0x45, 0xd7, 0x01, 0x42, - 0x2f, 0x03, 0x4d, 0xd7, 0x41, 0xad, 0x01, 0xff, 0x43, 0xa3, 0x05, 0x4e, - 0xd7, 0x01, 0x45, 0x3a, 0xe4, 0x44, 0xd7, 0x41, 0xf5, 0x42, 0xd7, 0x41, - 0xf5, 0x41, 0xd7, 0x41, 0x44, 0xfe, 0xe4, 0x40, 0xd7, 0x41, 0x44, 0xe2, - 0x8e, 0x3f, 0xd7, 0x41, 0x43, 0xf0, 0x04, 0x3e, 0xd7, 0x41, 0x44, 0x5e, - 0x20, 0x38, 0xd7, 0x41, 0x4a, 0xfe, 0x99, 0x47, 0xd7, 0x41, 0x46, 0x63, - 0x15, 0x3a, 0xd7, 0x01, 0x42, 0x12, 0x00, 0x3c, 0xd7, 0x41, 0x44, 0x6c, - 0xd3, 0x39, 0xd7, 0x41, 0x42, 0x49, 0x00, 0x4c, 0xd7, 0x41, 0x43, 0x45, - 0x0f, 0x37, 0xd7, 0x41, 0x44, 0x2f, 0xe1, 0x36, 0xd7, 0x41, 0x53, 0x18, - 0x47, 0x4f, 0xd7, 0x01, 0x49, 0x30, 0xb7, 0x53, 0xd7, 0x01, 0x48, 0x0b, - 0xaa, 0x55, 0xd7, 0x41, 0xe1, 0x68, 0xd4, 0x81, 0x8c, 0x02, 0xe2, 0x69, - 0xd4, 0x81, 0x80, 0x02, 0xe3, 0x6a, 0xd4, 0x81, 0xf4, 0x01, 0xe4, 0x6b, - 0xd4, 0x81, 0xe8, 0x01, 0xe5, 0x6c, 0xd4, 0x81, 0xd6, 0x01, 0xe6, 0x6d, - 0xd4, 0x01, 0xe7, 0x6e, 0xd4, 0x81, 0xc6, 0x01, 0xe8, 0x6f, 0xd4, 0x01, - 0xe9, 0x70, 0xd4, 0x81, 0xb6, 0x01, 0xea, 0x71, 0xd4, 0x01, 0xeb, 0x72, - 0xd4, 0x81, 0xa6, 0x01, 0xec, 0x73, 0xd4, 0x81, 0x9a, 0x01, 0xed, 0x74, - 0xd4, 0x81, 0x90, 0x01, 0xee, 0x75, 0xd4, 0x81, 0x86, 0x01, 0xef, 0x76, - 0xd4, 0x81, 0x72, 0xf0, 0x77, 0xd4, 0x81, 0x5d, 0xf1, 0x78, 0xd4, 0x01, - 0xf2, 0x79, 0xd4, 0x81, 0x4e, 0xf3, 0x7a, 0xd4, 0x81, 0x43, 0xf4, 0x7b, - 0xd4, 0x81, 0x2b, 0xf5, 0x7c, 0xd4, 0x81, 0x20, 0xf6, 0x7d, 0xd4, 0x01, - 0xf7, 0x7e, 0xd4, 0x01, 0xf8, 0x7f, 0xd4, 0x81, 0x0f, 0xf9, 0x80, 0xd4, - 0x01, 0xfa, 0x81, 0xd4, 0xc1, 0x00, 0x43, 0x45, 0x0f, 0x21, 0xd7, 0x41, - 0xe9, 0x29, 0xd7, 0x41, 0x46, 0x63, 0x15, 0x30, 0xd7, 0x41, 0x42, 0xd7, - 0x23, 0x2f, 0xd7, 0x01, 0x44, 0xf2, 0x93, 0x23, 0xd7, 0xc1, 0x00, 0x47, - 0xea, 0x07, 0x2d, 0xd7, 0x41, 0x44, 0x1d, 0x1f, 0x2e, 0xd7, 0x41, 0x42, - 0x0b, 0x00, 0x2c, 0xd7, 0x41, 0x42, 0x49, 0x00, 0x31, 0xd7, 0x01, 0xe9, - 0x2b, 0xd7, 0x01, 0x42, 0x2f, 0x03, 0x33, 0xd7, 0x41, 0xad, 0x01, 0xff, - 0x43, 0xa3, 0x05, 0x34, 0xd7, 0x01, 0x45, 0x3a, 0xe4, 0x2a, 0xd7, 0x41, - 0xf5, 0x28, 0xd7, 0x41, 0xf5, 0x27, 0xd7, 0x41, 0x44, 0xfe, 0xe4, 0x26, - 0xd7, 0x41, 0x44, 0xe2, 0x8e, 0x25, 0xd7, 0x41, 0x43, 0xf0, 0x04, 0x24, - 0xd7, 0x41, 0x44, 0x5e, 0x20, 0x1e, 0xd7, 0x41, 0x46, 0x63, 0x15, 0x20, - 0xd7, 0x01, 0x42, 0x12, 0x00, 0x22, 0xd7, 0x41, 0x44, 0x6c, 0xd3, 0x1f, - 0xd7, 0x41, 0x42, 0x49, 0x00, 0x32, 0xd7, 0x41, 0x43, 0x45, 0x0f, 0x1d, - 0xd7, 0x41, 0x44, 0x2f, 0xe1, 0x1c, 0xd7, 0x41, 0x08, 0xb9, 0x05, 0x6d, - 0x06, 0x0c, 0x07, 0x01, 0xff, 0xe1, 0x86, 0xd5, 0x01, 0xe2, 0x87, 0xd5, - 0x01, 0xe3, 0x88, 0xd5, 0x01, 0xe4, 0x89, 0xd5, 0x01, 0xe5, 0x8a, 0xd5, - 0x01, 0xe6, 0x8b, 0xd5, 0x01, 0xe7, 0x8c, 0xd5, 0x01, 0xe8, 0x8d, 0xd5, - 0x01, 0xe9, 0x8e, 0xd5, 0x01, 0xea, 0x8f, 0xd5, 0x01, 0xeb, 0x90, 0xd5, - 0x01, 0xec, 0x91, 0xd5, 0x01, 0xed, 0x92, 0xd5, 0x01, 0xee, 0x93, 0xd5, - 0x01, 0xef, 0x94, 0xd5, 0x01, 0xf0, 0x95, 0xd5, 0x01, 0xf1, 0x96, 0xd5, - 0x01, 0xf2, 0x97, 0xd5, 0x01, 0xf3, 0x98, 0xd5, 0x01, 0xf4, 0x99, 0xd5, - 0x01, 0xf5, 0x9a, 0xd5, 0x01, 0xf6, 0x9b, 0xd5, 0x01, 0xf7, 0x9c, 0xd5, - 0x01, 0xf8, 0x9d, 0xd5, 0x01, 0xf9, 0x9e, 0xd5, 0x01, 0xfa, 0x9f, 0xd5, - 0x41, 0xe1, 0x6c, 0xd5, 0x01, 0xe2, 0x6d, 0xd5, 0x01, 0xe3, 0x6e, 0xd5, - 0x01, 0xe4, 0x6f, 0xd5, 0x01, 0xe5, 0x70, 0xd5, 0x01, 0xe6, 0x71, 0xd5, - 0x01, 0xe7, 0x72, 0xd5, 0x01, 0xe8, 0x73, 0xd5, 0x01, 0xe9, 0x74, 0xd5, - 0x01, 0xea, 0x75, 0xd5, 0x01, 0xeb, 0x76, 0xd5, 0x01, 0xec, 0x77, 0xd5, - 0x01, 0xed, 0x78, 0xd5, 0x01, 0xee, 0x79, 0xd5, 0x01, 0xef, 0x7a, 0xd5, - 0x01, 0xf0, 0x7b, 0xd5, 0x01, 0xf1, 0x7c, 0xd5, 0x01, 0xf2, 0x7d, 0xd5, - 0x01, 0xf3, 0x7e, 0xd5, 0x01, 0xf4, 0x7f, 0xd5, 0x01, 0xf5, 0x80, 0xd5, - 0x01, 0xf6, 0x81, 0xd5, 0x01, 0xf7, 0x82, 0xd5, 0x01, 0xf8, 0x83, 0xd5, - 0x01, 0xf9, 0x84, 0xd5, 0x01, 0xfa, 0x85, 0xd5, 0x41, 0x45, 0xc3, 0x0a, - 0xd6, 0xd7, 0x01, 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0xd7, 0xd7, 0x01, 0x43, - 0xbf, 0x0a, 0xcf, 0xd7, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xa1, 0x1d, - 0xce, 0xd7, 0x41, 0x44, 0x25, 0x01, 0xd1, 0xd7, 0x01, 0x42, 0x15, 0x02, - 0xd0, 0xd7, 0x41, 0x44, 0x27, 0x1d, 0xd5, 0xd7, 0x01, 0x42, 0x60, 0x25, - 0xd4, 0xd7, 0x41, 0x43, 0xa7, 0x05, 0xd3, 0xd7, 0x01, 0x43, 0xcb, 0x06, - 0xd2, 0xd7, 0x41, 0xe1, 0x00, 0xd4, 0x81, 0x92, 0x02, 0xe2, 0x01, 0xd4, - 0x81, 0x86, 0x02, 0xe3, 0x02, 0xd4, 0x81, 0xfa, 0x01, 0xe4, 0x03, 0xd4, - 0x81, 0xe8, 0x01, 0xe5, 0x04, 0xd4, 0x81, 0xd6, 0x01, 0xe6, 0x05, 0xd4, - 0x01, 0xe7, 0x06, 0xd4, 0x81, 0xc6, 0x01, 0xe8, 0x07, 0xd4, 0x01, 0xe9, - 0x08, 0xd4, 0x81, 0xb6, 0x01, 0xea, 0x09, 0xd4, 0x01, 0xeb, 0x0a, 0xd4, - 0x81, 0xa6, 0x01, 0xec, 0x0b, 0xd4, 0x81, 0x9a, 0x01, 0xed, 0x0c, 0xd4, - 0x81, 0x90, 0x01, 0xee, 0x0d, 0xd4, 0x81, 0x86, 0x01, 0xef, 0x0e, 0xd4, - 0x81, 0x72, 0xf0, 0x0f, 0xd4, 0x81, 0x5d, 0xf1, 0x10, 0xd4, 0x01, 0xf2, - 0x11, 0xd4, 0x81, 0x4e, 0xf3, 0x12, 0xd4, 0x81, 0x43, 0xf4, 0x13, 0xd4, - 0x81, 0x2b, 0xf5, 0x14, 0xd4, 0x81, 0x20, 0xf6, 0x15, 0xd4, 0x01, 0xf7, - 0x16, 0xd4, 0x01, 0xf8, 0x17, 0xd4, 0x81, 0x0f, 0xf9, 0x18, 0xd4, 0x01, - 0xfa, 0x19, 0xd4, 0xc1, 0x00, 0x43, 0x45, 0x0f, 0xad, 0xd6, 0x41, 0xe9, - 0xb5, 0xd6, 0x41, 0x46, 0x63, 0x15, 0xbc, 0xd6, 0x41, 0x42, 0xd7, 0x23, - 0xbb, 0xd6, 0x01, 0x44, 0xf2, 0x93, 0xaf, 0xd6, 0xc1, 0x00, 0x47, 0xea, - 0x07, 0xb9, 0xd6, 0x41, 0x44, 0x1d, 0x1f, 0xba, 0xd6, 0x41, 0x42, 0x0b, - 0x00, 0xb8, 0xd6, 0x41, 0x42, 0x49, 0x00, 0xbd, 0xd6, 0x01, 0xe9, 0xb7, - 0xd6, 0x01, 0x42, 0x2f, 0x03, 0xbf, 0xd6, 0x41, 0xad, 0x01, 0xff, 0x43, - 0xa3, 0x05, 0xc0, 0xd6, 0x01, 0x45, 0x3a, 0xe4, 0xb6, 0xd6, 0x41, 0xf5, - 0xb4, 0xd6, 0x41, 0xf5, 0xb3, 0xd6, 0x41, 0x44, 0xfe, 0xe4, 0xb2, 0xd6, - 0x41, 0x44, 0xe2, 0x8e, 0xb1, 0xd6, 0x41, 0x43, 0xf0, 0x04, 0xb0, 0xd6, - 0x41, 0x44, 0x5e, 0x20, 0xaa, 0xd6, 0x41, 0x46, 0x63, 0x15, 0xac, 0xd6, - 0x01, 0x42, 0x12, 0x00, 0xae, 0xd6, 0x41, 0x44, 0x6c, 0xd3, 0xab, 0xd6, - 0x01, 0x46, 0xd1, 0x56, 0xca, 0xd7, 0x41, 0x42, 0x49, 0x00, 0xbe, 0xd6, - 0x41, 0x43, 0x45, 0x0f, 0xa9, 0xd6, 0x41, 0x44, 0x2f, 0xe1, 0xa8, 0xd6, - 0x41, 0x0b, 0x11, 0x97, 0x12, 0x58, 0x3d, 0x27, 0xba, 0x00, 0x00, 0x4d, - 0x1d, 0x83, 0xad, 0xf1, 0x01, 0x46, 0x6f, 0xcc, 0x3c, 0x30, 0x40, 0x06, - 0xc4, 0x06, 0x82, 0x03, 0x07, 0xc1, 0x05, 0x6c, 0xb2, 0x5e, 0x05, 0x2f, - 0x03, 0x3c, 0xb6, 0x01, 0xff, 0x45, 0x5c, 0x23, 0x45, 0x1d, 0x01, 0x0a, - 0xd2, 0x75, 0x01, 0xff, 0xa1, 0x20, 0xe5, 0x3a, 0x1d, 0x01, 0xe9, 0x32, - 0x1d, 0x81, 0x13, 0xef, 0x3d, 0x1d, 0x01, 0xf5, 0x34, 0x1d, 0x81, 0x06, - 0x49, 0x9b, 0xbe, 0x36, 0x1d, 0x41, 0xf5, 0x35, 0x1d, 0x41, 0xe9, 0x33, - 0x1d, 0x41, 0xe1, 0x31, 0x1d, 0x01, 0xe9, 0x3c, 0x1d, 0x01, 0xf5, 0x3f, - 0x1d, 0x41, 0x48, 0xd0, 0x15, 0x40, 0x1d, 0x01, 0x46, 0x4f, 0x23, 0x43, - 0x1d, 0x01, 0x47, 0x97, 0xce, 0x44, 0x1d, 0x01, 0x45, 0x5a, 0x3e, 0x42, - 0x1d, 0x01, 0x47, 0xa1, 0x4a, 0x41, 0x1d, 0x41, 0x46, 0x82, 0xd6, 0x47, - 0x1d, 0x01, 0x44, 0x04, 0xc3, 0x46, 0x1d, 0x41, 0xe1, 0x00, 0x1d, 0x81, - 0x80, 0x02, 0xa2, 0xf3, 0x01, 0xa3, 0xe6, 0x01, 0xa4, 0xcd, 0x01, 0xe5, - 0x06, 0x1d, 0x01, 0xa7, 0xbc, 0x01, 0x42, 0x22, 0x00, 0x2c, 0x1d, 0x01, - 0xe9, 0x02, 0x1d, 0x81, 0xac, 0x01, 0xaa, 0x99, 0x01, 0xab, 0x86, 0x01, - 0xac, 0x7a, 0x42, 0x6c, 0x00, 0x24, 0x1d, 0x01, 0xae, 0x5c, 0xef, 0x09, - 0x1d, 0x01, 0xb0, 0x4c, 0x42, 0x71, 0x00, 0x26, 0x1d, 0x01, 0xb3, 0x34, - 0xb4, 0x15, 0xf5, 0x04, 0x1d, 0x81, 0x0c, 0x42, 0xa6, 0x0a, 0x28, 0x1d, - 0x01, 0x42, 0x34, 0x22, 0x25, 0x1d, 0x41, 0xf5, 0x05, 0x1d, 0x41, 0xe1, - 0x1b, 0x1d, 0x01, 0x42, 0x22, 0x00, 0x1c, 0x1d, 0x01, 0x42, 0x71, 0x00, - 0x30, 0x1d, 0x01, 0xb4, 0x01, 0xff, 0xe1, 0x16, 0x1d, 0x01, 0x42, 0x22, - 0x00, 0x17, 0x1d, 0x41, 0xe1, 0x2b, 0x1d, 0x01, 0x42, 0x22, 0x00, 0x29, - 0x1d, 0x01, 0x42, 0x15, 0x06, 0x2a, 0x1d, 0x41, 0xe1, 0x20, 0x1d, 0x01, - 0x42, 0x22, 0x00, 0x21, 0x1d, 0x41, 0xe1, 0x1f, 0x1d, 0x01, 0x42, 0x24, - 0x02, 0x10, 0x1d, 0x01, 0x42, 0xff, 0x04, 0x1a, 0x1d, 0x01, 0x42, 0x34, - 0x22, 0x15, 0x1d, 0x41, 0xe1, 0x27, 0x1d, 0x01, 0x42, 0x74, 0x00, 0x2d, - 0x1d, 0x41, 0xe1, 0x0c, 0x1d, 0x01, 0x42, 0x22, 0x00, 0x0d, 0x1d, 0x01, - 0x43, 0x59, 0x20, 0x2e, 0x1d, 0x41, 0xe1, 0x13, 0x1d, 0x01, 0x42, 0x22, - 0x00, 0x14, 0x1d, 0x01, 0x43, 0xd6, 0x34, 0x2f, 0x1d, 0x41, 0xe9, 0x03, - 0x1d, 0x41, 0xe1, 0x0e, 0x1d, 0x01, 0x42, 0x22, 0x00, 0x0f, 0x1d, 0x41, - 0xe1, 0x1d, 0x1d, 0x01, 0xa4, 0x06, 0x42, 0x22, 0x00, 0x1e, 0x1d, 0x41, - 0xe1, 0x18, 0x1d, 0x01, 0x42, 0x22, 0x00, 0x19, 0x1d, 0x41, 0xe1, 0x11, - 0x1d, 0x01, 0x42, 0x22, 0x00, 0x12, 0x1d, 0x41, 0xe1, 0x22, 0x1d, 0x01, - 0x42, 0x22, 0x00, 0x23, 0x1d, 0x41, 0xe1, 0x01, 0x1d, 0x01, 0xe9, 0x08, - 0x1d, 0x01, 0xf5, 0x0b, 0x1d, 0x41, 0x45, 0xc3, 0x0a, 0x58, 0x1d, 0x01, - 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0x59, 0x1d, 0x01, 0x43, 0xbf, 0x0a, 0x51, - 0x1d, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xa1, 0x1d, 0x50, 0x1d, 0x41, - 0x44, 0x25, 0x01, 0x53, 0x1d, 0x01, 0x42, 0x15, 0x02, 0x52, 0x1d, 0x41, - 0x44, 0x27, 0x1d, 0x57, 0x1d, 0x01, 0x42, 0x60, 0x25, 0x56, 0x1d, 0x41, - 0x43, 0xa7, 0x05, 0x55, 0x1d, 0x01, 0x43, 0xcb, 0x06, 0x54, 0x1d, 0x41, - 0x44, 0xc9, 0x5f, 0x87, 0xfa, 0x01, 0x05, 0x09, 0x49, 0x0c, 0x4c, 0xa1, - 0x92, 0xad, 0x26, 0x00, 0x51, 0x04, 0x5d, 0x4b, 0xf9, 0x41, 0x49, 0x19, - 0x1b, 0x70, 0x1c, 0x01, 0x07, 0xc1, 0x05, 0xe9, 0x01, 0x49, 0x8b, 0xb9, - 0x71, 0x1c, 0x01, 0xb3, 0x1b, 0x0b, 0xd1, 0x75, 0x01, 0xff, 0x42, 0x31, - 0x12, 0xb0, 0x1c, 0x01, 0xe5, 0xb3, 0x1c, 0x01, 0xe9, 0xb1, 0x1c, 0x01, - 0xef, 0xb4, 0x1c, 0x01, 0xf5, 0xb2, 0x1c, 0x41, 0x04, 0x30, 0x03, 0xb5, - 0x01, 0x10, 0x5a, 0x66, 0x01, 0xff, 0xe1, 0xaf, 0x1c, 0x01, 0x42, 0x16, - 0x00, 0xa0, 0x1c, 0x01, 0xa3, 0x99, 0x01, 0xa4, 0x8c, 0x01, 0x42, 0x24, - 0x02, 0x94, 0x1c, 0x01, 0x42, 0x22, 0x00, 0xae, 0x1c, 0x01, 0x42, 0xbd, - 0x26, 0x98, 0x1c, 0x01, 0xab, 0x6e, 0x42, 0x74, 0x00, 0xab, 0x1c, 0x01, - 0x42, 0x6c, 0x00, 0xa1, 0x1c, 0x01, 0xae, 0x50, 0xb0, 0x44, 0x42, 0x71, - 0x00, 0xaa, 0x1c, 0x01, 0xb3, 0x32, 0xb4, 0x19, 0x42, 0xa9, 0x01, 0xa5, - 0x1c, 0x01, 0x42, 0x34, 0x22, 0xa9, 0x1c, 0x01, 0xba, 0x01, 0xff, 0xe1, - 0xa7, 0x1c, 0x01, 0x42, 0x22, 0x00, 0xa6, 0x1c, 0x41, 0xe1, 0x9a, 0x1c, - 0x01, 0x42, 0x22, 0x00, 0x9b, 0x1c, 0x01, 0xb3, 0x01, 0xff, 0xe1, 0xa2, - 0x1c, 0x01, 0x42, 0x22, 0x00, 0xa3, 0x1c, 0x41, 0xe1, 0xad, 0x1c, 0x01, - 0x42, 0x22, 0x00, 0xac, 0x1c, 0x41, 0xe1, 0x9e, 0x1c, 0x01, 0x42, 0x22, - 0x00, 0x9f, 0x1c, 0x41, 0xe1, 0x9d, 0x1c, 0x01, 0x42, 0x24, 0x02, 0x95, - 0x1c, 0x01, 0x42, 0x34, 0x22, 0x99, 0x1c, 0x41, 0xe1, 0x92, 0x1c, 0x01, - 0x42, 0x22, 0x00, 0x93, 0x1c, 0x41, 0xe1, 0x9c, 0x1c, 0x01, 0x42, 0x59, - 0x00, 0xa4, 0x1c, 0x41, 0xe1, 0x96, 0x1c, 0x01, 0x42, 0x22, 0x00, 0x97, - 0x1c, 0x41, 0x48, 0xd0, 0x15, 0xb5, 0x1c, 0x01, 0x4b, 0x4f, 0x23, 0xb6, - 0x1c, 0x41, 0x42, 0x2e, 0x25, 0x88, 0x1c, 0x01, 0xe1, 0x8f, 0x1c, 0x01, - 0x42, 0x16, 0x00, 0x80, 0x1c, 0x01, 0xa3, 0x99, 0x01, 0xa4, 0x8c, 0x01, - 0x42, 0x24, 0x02, 0x74, 0x1c, 0x01, 0x42, 0x22, 0x00, 0x8e, 0x1c, 0x01, - 0x42, 0xbd, 0x26, 0x78, 0x1c, 0x01, 0xab, 0x6e, 0x42, 0x74, 0x00, 0x8b, - 0x1c, 0x01, 0x42, 0x6c, 0x00, 0x81, 0x1c, 0x01, 0xae, 0x50, 0xb0, 0x44, - 0x42, 0x71, 0x00, 0x8a, 0x1c, 0x01, 0xb3, 0x32, 0xb4, 0x19, 0x42, 0xa9, - 0x01, 0x85, 0x1c, 0x01, 0x42, 0x34, 0x22, 0x89, 0x1c, 0x01, 0xba, 0x01, - 0xff, 0xe1, 0x87, 0x1c, 0x01, 0x42, 0x22, 0x00, 0x86, 0x1c, 0x41, 0xe1, - 0x7a, 0x1c, 0x01, 0x42, 0x22, 0x00, 0x7b, 0x1c, 0x01, 0xb3, 0x01, 0xff, - 0xe1, 0x82, 0x1c, 0x01, 0x42, 0x22, 0x00, 0x83, 0x1c, 0x41, 0xe1, 0x8d, - 0x1c, 0x01, 0x42, 0x22, 0x00, 0x8c, 0x1c, 0x41, 0xe1, 0x7e, 0x1c, 0x01, - 0x42, 0x22, 0x00, 0x7f, 0x1c, 0x41, 0xe1, 0x7d, 0x1c, 0x01, 0x42, 0x24, - 0x02, 0x75, 0x1c, 0x01, 0x42, 0x34, 0x22, 0x79, 0x1c, 0x41, 0xe1, 0x72, - 0x1c, 0x01, 0x42, 0x22, 0x00, 0x73, 0x1c, 0x41, 0xe1, 0x7c, 0x1c, 0x01, - 0x42, 0x59, 0x00, 0x84, 0x1c, 0x41, 0xe1, 0x76, 0x1c, 0x01, 0x42, 0x22, - 0x00, 0x77, 0x1c, 0x41, 0x56, 0x7b, 0x31, 0xef, 0x26, 0x00, 0x47, 0xee, - 0xcf, 0x41, 0xf3, 0x41, 0x80, 0xa5, 0x04, 0x47, 0x07, 0x6b, 0xbc, 0x20, - 0x00, 0x05, 0x64, 0xe2, 0x87, 0x03, 0x42, 0xb7, 0x13, 0x6d, 0xf9, 0x01, - 0x08, 0x42, 0xc4, 0x12, 0x46, 0xb8, 0xdc, 0x5e, 0xf4, 0x01, 0x4e, 0x38, - 0x7b, 0x70, 0xf5, 0x01, 0x4e, 0x50, 0x7c, 0xbd, 0xf9, 0x41, 0x12, 0xb0, - 0x4e, 0xda, 0x02, 0x07, 0xc1, 0x05, 0x5d, 0x07, 0x2f, 0x39, 0x37, 0x0c, - 0x01, 0x16, 0x06, 0x47, 0x13, 0xd3, 0xc8, 0x0a, 0x41, 0x02, 0x3b, 0x01, - 0x18, 0x47, 0x18, 0x36, 0xf1, 0x0a, 0x01, 0x4b, 0x9c, 0x9c, 0xf6, 0x0a, - 0x01, 0x44, 0xe2, 0x12, 0xf0, 0x0a, 0x01, 0x48, 0xd0, 0x09, 0xf5, 0x0a, - 0x41, 0xf4, 0xf4, 0x0a, 0x81, 0x06, 0x53, 0xbc, 0x4c, 0xf2, 0x0a, 0x41, - 0x4b, 0xc4, 0x4c, 0xf3, 0x0a, 0x41, 0x44, 0x31, 0x11, 0xec, 0x0a, 0x01, - 0x43, 0xbf, 0x0a, 0xeb, 0x0a, 0x81, 0x0f, 0xb4, 0x01, 0xff, 0x42, 0x92, - 0x01, 0xed, 0x0a, 0x01, 0x45, 0xde, 0x2b, 0xee, 0x0a, 0x41, 0x48, 0x21, - 0x11, 0xef, 0x0a, 0x41, 0xa1, 0xe4, 0x01, 0xa2, 0xd5, 0x01, 0xa4, 0xc6, - 0x01, 0x42, 0xa0, 0x19, 0xdc, 0x0a, 0x01, 0xa7, 0xb1, 0x01, 0x42, 0xb0, - 0x01, 0xc6, 0x0a, 0x81, 0xa3, 0x01, 0xaa, 0x94, 0x01, 0xab, 0x85, 0x01, - 0x46, 0x9c, 0xda, 0xd3, 0x0a, 0x01, 0x43, 0x89, 0x05, 0xd6, 0x0a, 0x01, - 0x43, 0x54, 0x22, 0xd7, 0x0a, 0x01, 0x42, 0x6f, 0x02, 0xdb, 0x0a, 0x01, - 0xb1, 0x5f, 0x44, 0xfa, 0x64, 0xe1, 0x0a, 0x01, 0xb3, 0x3d, 0xb4, 0x29, - 0x43, 0xc0, 0x88, 0xc7, 0x0a, 0x01, 0xb8, 0x15, 0x44, 0x58, 0x51, 0xcf, - 0x0a, 0x01, 0xba, 0x01, 0xff, 0x44, 0xd5, 0x48, 0xc9, 0x0a, 0x01, 0x45, - 0xe0, 0xe3, 0xca, 0x0a, 0x41, 0x43, 0x34, 0x10, 0xd1, 0x0a, 0x01, 0x43, - 0x97, 0x35, 0xdf, 0x0a, 0x41, 0x42, 0x9a, 0x43, 0xe4, 0x0a, 0x01, 0x43, - 0x39, 0x25, 0xce, 0x0a, 0x01, 0x46, 0x58, 0xd9, 0xd5, 0x0a, 0x41, 0xa1, - 0x0c, 0x43, 0x0e, 0x16, 0xe2, 0x0a, 0x01, 0x44, 0x2a, 0x49, 0xe3, 0x0a, - 0x41, 0x43, 0x89, 0xe7, 0xdd, 0x0a, 0x01, 0x44, 0x39, 0xe1, 0xd8, 0x0a, - 0x41, 0x44, 0x12, 0xed, 0xe0, 0x0a, 0x01, 0x43, 0x97, 0x35, 0xde, 0x0a, - 0x41, 0x43, 0x34, 0x10, 0xd0, 0x0a, 0x01, 0x44, 0xc2, 0xe4, 0xd2, 0x0a, - 0x41, 0x44, 0xd5, 0x48, 0xcb, 0x0a, 0x01, 0x45, 0xe0, 0xe3, 0xcc, 0x0a, - 0x41, 0x42, 0x53, 0x00, 0xcd, 0x0a, 0x41, 0x45, 0xef, 0xe3, 0xc4, 0x0a, - 0x01, 0x44, 0xa2, 0xa8, 0xc3, 0x0a, 0x41, 0x45, 0xdb, 0x48, 0xc5, 0x0a, - 0x01, 0x46, 0x58, 0xd9, 0xd4, 0x0a, 0x41, 0x43, 0x39, 0x25, 0xc1, 0x0a, - 0x01, 0x44, 0x25, 0xa8, 0xc2, 0x0a, 0x41, 0x44, 0xd5, 0x48, 0xda, 0x0a, - 0x01, 0x44, 0x48, 0x3c, 0xc0, 0x0a, 0x01, 0x43, 0xf7, 0x19, 0xd9, 0x0a, - 0x41, 0x45, 0x5c, 0x00, 0xe5, 0x0a, 0x01, 0x45, 0xf5, 0x06, 0xe6, 0x0a, - 0x41, 0x50, 0x5a, 0x5f, 0x59, 0x08, 0x00, 0x4f, 0xe0, 0x6b, 0x5b, 0x08, - 0x00, 0x07, 0xc1, 0x05, 0x0c, 0x4b, 0xb8, 0x0b, 0x5e, 0x08, 0x00, 0x51, - 0xe1, 0x5d, 0x5a, 0x08, 0x40, 0xa1, 0x22, 0x48, 0xba, 0xc2, 0x56, 0x08, - 0x00, 0x45, 0xc7, 0xe3, 0x40, 0x08, 0x00, 0xa9, 0x0c, 0x43, 0xbb, 0xa3, - 0x57, 0x08, 0x00, 0x47, 0xbb, 0xc2, 0x45, 0x08, 0x40, 0xee, 0x4f, 0x08, - 0x00, 0xf4, 0x47, 0x08, 0x40, 0xe2, 0x41, 0x08, 0x00, 0xe4, 0x43, 0x08, - 0x00, 0xe7, 0x42, 0x08, 0x00, 0xe8, 0x44, 0x08, 0x00, 0x42, 0x9e, 0x01, - 0x58, 0x08, 0x00, 0xeb, 0x4a, 0x08, 0x80, 0x32, 0xec, 0x4b, 0x08, 0x00, - 0xed, 0x4c, 0x08, 0x00, 0xee, 0x4d, 0x08, 0x00, 0xf0, 0x50, 0x08, 0x00, - 0xf1, 0x52, 0x08, 0x00, 0xf2, 0x53, 0x08, 0x00, 0xf3, 0x4e, 0x08, 0x80, - 0x0d, 0xf4, 0x55, 0x08, 0x80, 0x04, 0xfa, 0x46, 0x08, 0x40, 0xf4, 0x48, - 0x08, 0x40, 0xe8, 0x54, 0x08, 0x00, 0xfa, 0x51, 0x08, 0x40, 0x42, 0x15, - 0x06, 0x49, 0x08, 0x40, 0x57, 0x5e, 0x2c, 0x6b, 0xf4, 0x01, 0x47, 0x63, - 0xcd, 0x7a, 0xf5, 0x01, 0x03, 0xb6, 0x05, 0x11, 0x05, 0x51, 0x00, 0x01, - 0xff, 0x4a, 0xbf, 0xa8, 0x72, 0xf4, 0x01, 0x46, 0xae, 0xdd, 0x73, 0xf4, - 0x41, 0x58, 0xf5, 0x26, 0x74, 0xf5, 0x01, 0x46, 0xb4, 0xdd, 0x35, 0xf9, - 0x41, 0x07, 0x93, 0xb3, 0x27, 0x02, 0x60, 0x00, 0x06, 0x4a, 0x77, 0xaf, - 0x20, 0x27, 0x40, 0x4f, 0x6e, 0x26, 0xa5, 0x26, 0x00, 0x44, 0x2f, 0x03, - 0x42, 0x26, 0x00, 0x0c, 0x09, 0x3c, 0x01, 0xff, 0x58, 0x65, 0x26, 0xa7, - 0x26, 0x00, 0x44, 0x2f, 0x03, 0xa6, 0x26, 0x40, 0x4e, 0x9a, 0x74, 0x57, - 0x0d, 0x00, 0xa4, 0x91, 0x05, 0x09, 0xb3, 0x58, 0xb0, 0x04, 0x07, 0xc1, - 0x05, 0xad, 0x01, 0x07, 0x2f, 0x39, 0x92, 0x01, 0x05, 0x2f, 0x03, 0x4e, - 0x0b, 0xd1, 0x75, 0x01, 0xff, 0xa1, 0x3b, 0xe5, 0x46, 0x0d, 0x80, 0x32, - 0xe9, 0x3f, 0x0d, 0x80, 0x29, 0xef, 0x4a, 0x0d, 0x80, 0x20, 0xf5, 0x41, - 0x0d, 0x80, 0x17, 0x08, 0x9b, 0xbe, 0x01, 0xff, 0xec, 0x62, 0x0d, 0x80, - 0x09, 0xf2, 0x43, 0x0d, 0xc0, 0x00, 0xf2, 0x44, 0x0d, 0x40, 0xec, 0x63, - 0x0d, 0x40, 0xf5, 0x42, 0x0d, 0x40, 0xef, 0x4b, 0x0d, 0x40, 0xe9, 0x40, - 0x0d, 0x40, 0xe5, 0x47, 0x0d, 0x40, 0xe1, 0x3e, 0x0d, 0x00, 0xe9, 0x48, - 0x0d, 0x00, 0xf5, 0x4c, 0x0d, 0x40, 0xa1, 0x32, 0xa3, 0x1e, 0x44, 0x2e, - 0x10, 0x4f, 0x0d, 0x00, 0xb6, 0x01, 0xff, 0x52, 0x2a, 0x50, 0x3b, 0x0d, - 0x00, 0xa9, 0x01, 0xff, 0x44, 0x5d, 0x23, 0x4d, 0x0d, 0x00, 0x45, 0xa3, - 0x4a, 0x03, 0x0d, 0x40, 0x4a, 0x50, 0x23, 0x01, 0x0d, 0x00, 0x4e, 0x64, - 0x77, 0x3c, 0x0d, 0x00, 0x57, 0xc7, 0x15, 0x00, 0x0d, 0x40, 0x47, 0xd1, - 0x15, 0x02, 0x0d, 0x00, 0x47, 0xf2, 0x86, 0x3d, 0x0d, 0x40, 0x04, 0xbf, - 0x0a, 0x06, 0x43, 0xb0, 0x06, 0x70, 0x0d, 0x40, 0x47, 0x22, 0x11, 0x71, - 0x0d, 0x00, 0x48, 0xd5, 0x5c, 0x72, 0x0d, 0x40, 0xe1, 0x05, 0x0d, 0x80, - 0xe6, 0x02, 0xa2, 0xd9, 0x02, 0xa3, 0x9d, 0x02, 0xa4, 0xfe, 0x01, 0xe5, - 0x0e, 0x0d, 0x80, 0xf4, 0x01, 0xa7, 0xe7, 0x01, 0x42, 0x22, 0x00, 0x39, - 0x0d, 0x00, 0xe9, 0x07, 0x0d, 0x80, 0xd7, 0x01, 0xaa, 0xca, 0x01, 0xab, - 0xbd, 0x01, 0xac, 0xa9, 0x01, 0x42, 0x6c, 0x00, 0x2e, 0x0d, 0x00, 0xae, - 0x84, 0x01, 0xef, 0x12, 0x0d, 0x80, 0x7b, 0xb0, 0x6f, 0xb2, 0x63, 0xb3, - 0x51, 0xb4, 0x32, 0xf5, 0x09, 0x0d, 0x80, 0x29, 0xb6, 0x06, 0x42, 0x34, - 0x22, 0x2f, 0x0d, 0x40, 0xe1, 0x35, 0x0d, 0x00, 0x4d, 0xd4, 0x80, 0x04, - 0x0d, 0x00, 0x07, 0x9c, 0xbe, 0x01, 0xff, 0xec, 0x0c, 0x0d, 0x80, 0x09, - 0xf2, 0x0b, 0x0d, 0xc0, 0x00, 0xf2, 0x60, 0x0d, 0x40, 0xec, 0x61, 0x0d, - 0x40, 0xf5, 0x0a, 0x0d, 0x40, 0xe1, 0x24, 0x0d, 0x00, 0x42, 0x22, 0x00, - 0x25, 0x0d, 0x00, 0xb4, 0x01, 0xff, 0xe1, 0x1f, 0x0d, 0x00, 0x42, 0x22, - 0x00, 0x20, 0x0d, 0x00, 0x42, 0x12, 0x00, 0x3a, 0x0d, 0x40, 0xe1, 0x38, - 0x0d, 0x00, 0x42, 0x22, 0x00, 0x36, 0x0d, 0x00, 0x42, 0x15, 0x06, 0x37, - 0x0d, 0x40, 0xe1, 0x30, 0x0d, 0x00, 0x42, 0x71, 0x00, 0x31, 0x0d, 0x40, - 0xe1, 0x2a, 0x0d, 0x00, 0x42, 0x22, 0x00, 0x2b, 0x0d, 0x40, 0xef, 0x13, - 0x0d, 0x40, 0xe1, 0x28, 0x0d, 0x00, 0x42, 0x24, 0x02, 0x19, 0x0d, 0x00, - 0xae, 0x06, 0x42, 0x34, 0x22, 0x1e, 0x0d, 0x40, 0xe1, 0x23, 0x0d, 0x00, - 0x42, 0xff, 0x04, 0x29, 0x0d, 0x40, 0xe1, 0x32, 0x0d, 0x00, 0xac, 0x01, - 0xff, 0xe1, 0x33, 0x0d, 0x00, 0x42, 0x74, 0x00, 0x34, 0x0d, 0x40, 0xe1, - 0x15, 0x0d, 0x00, 0x42, 0x22, 0x00, 0x16, 0x0d, 0x40, 0xe1, 0x1c, 0x0d, - 0x00, 0x42, 0x22, 0x00, 0x1d, 0x0d, 0x40, 0xe9, 0x08, 0x0d, 0x40, 0xe1, - 0x17, 0x0d, 0x00, 0x42, 0x22, 0x00, 0x18, 0x0d, 0x40, 0xe5, 0x0f, 0x0d, - 0x40, 0xe1, 0x26, 0x0d, 0x00, 0xa4, 0x0c, 0x42, 0x22, 0x00, 0x27, 0x0d, - 0x00, 0x47, 0x53, 0xd1, 0x4e, 0x0d, 0x40, 0xe1, 0x21, 0x0d, 0x00, 0x42, - 0x22, 0x00, 0x22, 0x0d, 0x40, 0xe1, 0x1a, 0x0d, 0x00, 0xa8, 0x01, 0xff, - 0xe1, 0x1b, 0x0d, 0x00, 0x05, 0xa6, 0xbf, 0x01, 0xff, 0xeb, 0x7f, 0x0d, - 0x00, 0xec, 0x7d, 0x0d, 0x80, 0x17, 0xed, 0x54, 0x0d, 0x00, 0xee, 0x7b, - 0x0d, 0x80, 0x0a, 0x42, 0xcf, 0x00, 0x7c, 0x0d, 0x00, 0xf9, 0x55, 0x0d, - 0x40, 0xee, 0x7a, 0x0d, 0x40, 0xec, 0x7e, 0x0d, 0xc0, 0x00, 0xec, 0x56, - 0x0d, 0x40, 0xe1, 0x2c, 0x0d, 0x00, 0x42, 0x22, 0x00, 0x2d, 0x0d, 0x40, - 0xe1, 0x06, 0x0d, 0x00, 0xe9, 0x10, 0x0d, 0x00, 0x49, 0x01, 0xbc, 0x5f, - 0x0d, 0x00, 0xf5, 0x14, 0x0d, 0x40, 0x04, 0xbf, 0x0a, 0x1d, 0x06, 0x24, - 0x01, 0x01, 0xff, 0x4a, 0x9d, 0xa7, 0x5a, 0x0d, 0x00, 0x48, 0x2a, 0x01, - 0x75, 0x0d, 0x00, 0x4a, 0xc3, 0xae, 0x78, 0x0d, 0x00, 0x4a, 0xef, 0xaf, - 0x5d, 0x0d, 0x40, 0x46, 0xc3, 0x0a, 0x77, 0x0d, 0x00, 0xa6, 0x27, 0x44, - 0x22, 0x00, 0x74, 0x0d, 0x00, 0x58, 0xad, 0x29, 0x58, 0x0d, 0x00, 0x47, - 0x2a, 0x01, 0x73, 0x0d, 0x00, 0x49, 0x5f, 0x25, 0x76, 0x0d, 0x00, 0xb4, - 0x01, 0xff, 0x44, 0xfb, 0x1a, 0x5c, 0x0d, 0x00, 0x48, 0x34, 0x25, 0x5b, - 0x0d, 0x40, 0x44, 0xf2, 0xac, 0x5e, 0x0d, 0x00, 0x47, 0x45, 0xd1, 0x59, - 0x0d, 0x40, 0x48, 0x32, 0xc1, 0x79, 0x0d, 0x00, 0x05, 0xc5, 0x06, 0x01, - 0xff, 0x45, 0xc3, 0x0a, 0x6e, 0x0d, 0x00, 0xa6, 0x2e, 0x44, 0x46, 0x2a, - 0x6f, 0x0d, 0x00, 0x43, 0xbf, 0x0a, 0x67, 0x0d, 0x00, 0xb3, 0x14, 0xb4, - 0x06, 0x44, 0xa1, 0x1d, 0x66, 0x0d, 0x40, 0x44, 0x25, 0x01, 0x69, 0x0d, - 0x00, 0x42, 0x15, 0x02, 0x68, 0x0d, 0x40, 0x44, 0x27, 0x1d, 0x6d, 0x0d, - 0x00, 0x42, 0x60, 0x25, 0x6c, 0x0d, 0x40, 0x43, 0xa7, 0x05, 0x6b, 0x0d, - 0x00, 0x43, 0xcb, 0x06, 0x6a, 0x0d, 0x40, 0x05, 0x5b, 0xe1, 0x06, 0x45, - 0xdc, 0xe2, 0x7c, 0xf7, 0x41, 0x45, 0xd0, 0xd6, 0xf2, 0x1e, 0x01, 0x4e, - 0xdc, 0x75, 0xf8, 0x1e, 0x01, 0x07, 0xc1, 0x05, 0x1b, 0x4a, 0x1f, 0xad, - 0xf7, 0x1e, 0x01, 0x0b, 0xd1, 0x75, 0x01, 0xff, 0xe5, 0xf5, 0x1e, 0x01, - 0xe9, 0xf3, 0x1e, 0x01, 0xef, 0xf6, 0x1e, 0x01, 0xf5, 0xf4, 0x1e, 0x41, - 0xe1, 0xf1, 0x1e, 0x01, 0x42, 0x16, 0x00, 0xe4, 0x1e, 0x01, 0x42, 0x37, - 0x00, 0xe9, 0x1e, 0x01, 0x42, 0xa1, 0x10, 0xe7, 0x1e, 0x01, 0x42, 0x24, - 0x02, 0xe1, 0x1e, 0x01, 0x42, 0xbd, 0x26, 0xea, 0x1e, 0x01, 0x42, 0x1b, - 0x02, 0xe0, 0x1e, 0x01, 0x42, 0x74, 0x00, 0xee, 0x1e, 0x01, 0x42, 0x6c, - 0x00, 0xe5, 0x1e, 0x01, 0xae, 0x24, 0x42, 0x6c, 0x09, 0xe3, 0x1e, 0x01, - 0x42, 0x71, 0x00, 0xed, 0x1e, 0x01, 0x42, 0x15, 0x06, 0xf0, 0x1e, 0x01, - 0x42, 0x12, 0x00, 0xe6, 0x1e, 0x01, 0x42, 0xa6, 0x0a, 0xef, 0x1e, 0x01, - 0x42, 0x34, 0x22, 0xec, 0x1e, 0x41, 0xe1, 0xe8, 0x1e, 0x01, 0x42, 0x24, - 0x02, 0xe2, 0x1e, 0x01, 0x42, 0x34, 0x22, 0xeb, 0x1e, 0x41, 0x06, 0xb8, - 0xd6, 0xe7, 0x02, 0x0a, 0xeb, 0xa9, 0x01, 0xff, 0x46, 0x1e, 0xd7, 0x28, - 0xf0, 0x01, 0x02, 0x16, 0x00, 0xcb, 0x02, 0x4d, 0xdd, 0x7f, 0x25, 0xf0, - 0x01, 0xa5, 0xa2, 0x02, 0xa6, 0xec, 0x01, 0x4c, 0x9d, 0x8d, 0x05, 0xf0, - 0x01, 0x45, 0xd2, 0xa2, 0x2a, 0xf0, 0x01, 0xae, 0xbe, 0x01, 0xaf, 0x9c, - 0x01, 0x44, 0xd2, 0xee, 0x22, 0xf0, 0x01, 0x4a, 0xbf, 0xad, 0x04, 0xf0, - 0x01, 0xb3, 0x4a, 0xb4, 0x15, 0xb7, 0x01, 0xff, 0x48, 0x4a, 0xc3, 0x02, - 0xf0, 0x01, 0x4b, 0xce, 0x9a, 0x06, 0xf0, 0x01, 0x45, 0x5a, 0x0a, 0x29, - 0xf0, 0x41, 0x08, 0x32, 0xc4, 0x1a, 0x06, 0x3e, 0xde, 0x01, 0xff, 0x47, - 0x98, 0xcc, 0x11, 0xf0, 0x01, 0xa3, 0x01, 0xff, 0x49, 0x15, 0xb7, 0x08, - 0xf0, 0x01, 0x46, 0x8b, 0x42, 0x1a, 0xf0, 0x41, 0x47, 0x98, 0xcc, 0x12, - 0xf0, 0x01, 0xa3, 0x01, 0xff, 0x49, 0x15, 0xb7, 0x09, 0xf0, 0x01, 0x46, - 0x8b, 0x42, 0x1b, 0xf0, 0x41, 0x08, 0x72, 0xc3, 0x2b, 0x06, 0x48, 0xda, - 0x12, 0x49, 0x3b, 0xbb, 0x01, 0xf0, 0x01, 0x45, 0x5b, 0x11, 0x26, 0xf0, - 0x01, 0x45, 0xa9, 0xe8, 0x27, 0xf0, 0x41, 0x47, 0x98, 0xcc, 0x15, 0xf0, - 0x01, 0xa3, 0x01, 0xff, 0x49, 0x15, 0xb7, 0x0c, 0xf0, 0x01, 0x46, 0x8b, - 0x42, 0x1e, 0xf0, 0x41, 0x47, 0x98, 0xcc, 0x16, 0xf0, 0x01, 0xa3, 0x01, - 0xff, 0x49, 0x15, 0xb7, 0x0d, 0xf0, 0x01, 0x46, 0x8b, 0x42, 0x1f, 0xf0, - 0x41, 0x06, 0x1c, 0xc6, 0x06, 0x45, 0x14, 0xe7, 0x23, 0xf0, 0x41, 0x47, - 0x98, 0xcc, 0x10, 0xf0, 0x01, 0xa3, 0x01, 0xff, 0x49, 0x15, 0xb7, 0x07, - 0xf0, 0x01, 0x46, 0x8b, 0x42, 0x19, 0xf0, 0x41, 0x07, 0x1b, 0xc6, 0x06, - 0x49, 0x0e, 0xbb, 0x03, 0xf0, 0x41, 0x47, 0x98, 0xcc, 0x18, 0xf0, 0x01, - 0xa3, 0x01, 0xff, 0x49, 0x15, 0xb7, 0x0f, 0xf0, 0x01, 0x46, 0x8b, 0x42, - 0x21, 0xf0, 0x41, 0x07, 0x46, 0xcf, 0x1a, 0x07, 0x5a, 0xd1, 0x01, 0xff, - 0x47, 0x98, 0xcc, 0x13, 0xf0, 0x01, 0xa3, 0x01, 0xff, 0x49, 0x15, 0xb7, - 0x0a, 0xf0, 0x01, 0x46, 0x8b, 0x42, 0x1c, 0xf0, 0x41, 0x47, 0x98, 0xcc, - 0x14, 0xf0, 0x01, 0xa3, 0x01, 0xff, 0x49, 0x15, 0xb7, 0x0b, 0xf0, 0x01, - 0x46, 0x8b, 0x42, 0x1d, 0xf0, 0x41, 0x48, 0x1a, 0xc1, 0x00, 0xf0, 0x01, - 0x08, 0xed, 0xb5, 0x01, 0xff, 0x47, 0x98, 0xcc, 0x17, 0xf0, 0x01, 0xa3, - 0x01, 0xff, 0x49, 0x15, 0xb7, 0x0e, 0xf0, 0x01, 0x46, 0x8b, 0x42, 0x20, - 0xf0, 0x41, 0x42, 0x36, 0x01, 0x2b, 0xf0, 0x01, 0x44, 0x9f, 0x96, 0x24, - 0xf0, 0x41, 0x51, 0x93, 0x56, 0x74, 0x11, 0x01, 0xac, 0x0f, 0xb3, 0x01, - 0xff, 0x4b, 0x58, 0x26, 0x75, 0x11, 0x01, 0x49, 0xc0, 0xb7, 0x73, 0x11, - 0x41, 0x06, 0xc2, 0x05, 0x06, 0x4c, 0x2d, 0x8e, 0x76, 0x11, 0x41, 0xe1, - 0x50, 0x11, 0x01, 0xa2, 0xbc, 0x01, 0xa3, 0xaf, 0x01, 0xa4, 0x96, 0x01, - 0xe5, 0x53, 0x11, 0x01, 0xa7, 0x85, 0x01, 0x42, 0x22, 0x00, 0x71, 0x11, - 0x01, 0xe9, 0x51, 0x11, 0x01, 0xaa, 0x6f, 0xab, 0x63, 0x42, 0x74, 0x00, - 0x6e, 0x11, 0x01, 0x42, 0x6c, 0x00, 0x6c, 0x11, 0x01, 0xae, 0x45, 0xef, - 0x54, 0x11, 0x01, 0xb0, 0x35, 0xb2, 0x29, 0x42, 0x15, 0x06, 0x70, 0x11, - 0x01, 0xb4, 0x0a, 0xf5, 0x52, 0x11, 0x01, 0x42, 0xa6, 0x0a, 0x6f, 0x11, - 0x41, 0xe1, 0x63, 0x11, 0x01, 0x42, 0x22, 0x00, 0x64, 0x11, 0x01, 0xb4, - 0x01, 0xff, 0xe1, 0x5e, 0x11, 0x01, 0x42, 0x22, 0x00, 0x5f, 0x11, 0x41, - 0xe1, 0x6d, 0x11, 0x01, 0x42, 0x71, 0x00, 0x72, 0x11, 0x41, 0xe1, 0x68, - 0x11, 0x01, 0x42, 0x22, 0x00, 0x69, 0x11, 0x41, 0xe1, 0x67, 0x11, 0x01, - 0x42, 0xff, 0x04, 0x62, 0x11, 0x01, 0x42, 0x34, 0x22, 0x5d, 0x11, 0x41, - 0xe1, 0x55, 0x11, 0x01, 0x42, 0x22, 0x00, 0x56, 0x11, 0x41, 0xe1, 0x5b, - 0x11, 0x01, 0x42, 0x22, 0x00, 0x5c, 0x11, 0x41, 0xe1, 0x57, 0x11, 0x01, - 0x42, 0x22, 0x00, 0x58, 0x11, 0x41, 0xe1, 0x65, 0x11, 0x01, 0xa4, 0x06, - 0x42, 0x22, 0x00, 0x66, 0x11, 0x41, 0xe1, 0x60, 0x11, 0x01, 0x42, 0x22, - 0x00, 0x61, 0x11, 0x41, 0xe1, 0x59, 0x11, 0x01, 0x42, 0x22, 0x00, 0x5a, - 0x11, 0x41, 0xe1, 0x6a, 0x11, 0x01, 0x42, 0x22, 0x00, 0x6b, 0x11, 0x41, - 0xe5, 0xd9, 0xf9, 0x01, 0x47, 0xf2, 0xce, 0x84, 0xfa, 0x01, 0x43, 0x0d, - 0x2c, 0xf2, 0xf9, 0x41, 0x4d, 0xc8, 0x7d, 0x14, 0x21, 0x00, 0xa1, 0xc4, - 0x40, 0xa5, 0xf0, 0x2a, 0xa9, 0xb3, 0x0c, 0x44, 0xb0, 0x00, 0x99, 0xf9, - 0x01, 0xaf, 0x9d, 0x02, 0xb5, 0x85, 0x02, 0xb9, 0x01, 0xff, 0x0c, 0x8d, - 0x8b, 0x82, 0x01, 0x05, 0x4b, 0x5f, 0x06, 0x48, 0x8d, 0x28, 0x25, 0xf9, - 0x41, 0x07, 0xc1, 0x05, 0x06, 0x4f, 0x61, 0x72, 0x3f, 0x09, 0x41, 0xe1, - 0x20, 0x09, 0x81, 0x65, 0xe2, 0x21, 0x09, 0x01, 0xe3, 0x39, 0x09, 0x01, - 0xe4, 0x23, 0x09, 0x01, 0xe5, 0x24, 0x09, 0x81, 0x50, 0xe6, 0x31, 0x09, - 0x01, 0xe7, 0x22, 0x09, 0x01, 0xe9, 0x26, 0x09, 0x01, 0xeb, 0x28, 0x09, - 0x01, 0xec, 0x29, 0x09, 0x81, 0x37, 0xed, 0x2a, 0x09, 0x01, 0xee, 0x2b, - 0x09, 0x81, 0x2a, 0xef, 0x2c, 0x09, 0x01, 0xf1, 0x32, 0x09, 0x01, 0xf2, - 0x2d, 0x09, 0x01, 0xf3, 0x33, 0x09, 0x81, 0x15, 0xf4, 0x2f, 0x09, 0x81, - 0x0c, 0xf5, 0x30, 0x09, 0x01, 0xf6, 0x25, 0x09, 0x01, 0xf9, 0x27, 0x09, - 0x41, 0xf4, 0x34, 0x09, 0x41, 0xf3, 0x2e, 0x09, 0x41, 0xee, 0x38, 0x09, - 0x41, 0xf9, 0x37, 0x09, 0x41, 0xee, 0x36, 0x09, 0x41, 0xee, 0x35, 0x09, - 0x41, 0xe1, 0x80, 0x02, 0x81, 0x72, 0xe2, 0x82, 0x02, 0x81, 0x69, 0xe4, - 0x85, 0x02, 0x01, 0xe5, 0x81, 0x02, 0x81, 0x5c, 0xe7, 0x84, 0x02, 0x01, - 0xe8, 0x9b, 0x02, 0x01, 0xe9, 0x86, 0x02, 0x01, 0xea, 0x8a, 0x02, 0x01, - 0xeb, 0x8b, 0x02, 0x81, 0x43, 0xec, 0x8d, 0x02, 0x01, 0xed, 0x8e, 0x02, - 0x81, 0x36, 0xee, 0x8f, 0x02, 0x81, 0x2d, 0xf0, 0x93, 0x02, 0x01, 0xf1, - 0x8c, 0x02, 0x01, 0xf2, 0x95, 0x02, 0x01, 0xf3, 0x96, 0x02, 0x01, 0xf4, - 0x97, 0x02, 0x81, 0x10, 0xf5, 0x92, 0x02, 0x01, 0xf7, 0x87, 0x02, 0x01, - 0xf8, 0x9c, 0x02, 0x01, 0xfa, 0x88, 0x02, 0x41, 0xe8, 0x89, 0x02, 0x01, - 0xf4, 0x98, 0x02, 0x41, 0xee, 0x91, 0x02, 0x41, 0xed, 0x90, 0x02, 0x41, - 0xeb, 0x94, 0x02, 0x41, 0xee, 0x9a, 0x02, 0x41, 0xe8, 0x83, 0x02, 0x41, - 0xee, 0x99, 0x02, 0x41, 0x45, 0xdf, 0xdd, 0xf3, 0xf9, 0x01, 0xae, 0x01, - 0xff, 0x4a, 0x9f, 0xa5, 0x76, 0xf7, 0x01, 0x42, 0x6d, 0x11, 0xc1, 0xfa, - 0x41, 0x45, 0xce, 0xe1, 0x9e, 0xf9, 0x01, 0x42, 0x36, 0x01, 0x12, 0xf5, - 0x81, 0xe8, 0x09, 0x03, 0xa5, 0x21, 0xbc, 0x08, 0x46, 0xd2, 0xda, 0x6d, - 0xf3, 0x01, 0x03, 0xa2, 0x01, 0xac, 0x07, 0xb4, 0x97, 0x07, 0x50, 0x6a, - 0x66, 0x2d, 0xf6, 0x01, 0x03, 0x5f, 0x00, 0x80, 0x07, 0xb7, 0x0d, 0x45, - 0xfc, 0x09, 0xca, 0x25, 0xc0, 0x00, 0x5b, 0x84, 0x19, 0xe0, 0x27, 0x40, - 0x80, 0xc1, 0x06, 0x03, 0x16, 0x01, 0x01, 0xff, 0x4e, 0xc4, 0x74, 0x03, - 0x27, 0x00, 0x07, 0x73, 0x02, 0x8a, 0x06, 0x52, 0x60, 0x50, 0x85, 0x25, - 0x00, 0xa8, 0xc1, 0x05, 0x05, 0xc3, 0x00, 0xa0, 0x03, 0x07, 0x7d, 0x02, - 0xea, 0x02, 0x04, 0xbf, 0x0a, 0xd9, 0x02, 0x06, 0xc8, 0x00, 0x30, 0x53, - 0xb2, 0x4b, 0x87, 0x25, 0x00, 0xb4, 0x01, 0xff, 0x05, 0x25, 0x01, 0x06, - 0x5b, 0x93, 0x1c, 0x6f, 0xfb, 0x41, 0x4d, 0xb8, 0x4b, 0x83, 0x25, 0x00, - 0x09, 0x2a, 0x01, 0x01, 0xff, 0x45, 0x33, 0x01, 0x86, 0x25, 0x00, 0x56, - 0x67, 0x34, 0xa5, 0xce, 0x01, 0x57, 0xf6, 0x2f, 0xae, 0xce, 0x41, 0x0f, - 0xd3, 0x69, 0xbe, 0x01, 0x4f, 0x3c, 0x6a, 0xd3, 0x27, 0x00, 0x5a, 0x42, - 0x1f, 0x4f, 0x27, 0x00, 0x53, 0x5b, 0x25, 0x9f, 0xce, 0x01, 0x46, 0x16, - 0xdc, 0x0e, 0x27, 0x00, 0x03, 0x7c, 0x00, 0x38, 0x4d, 0x1a, 0x2f, 0x07, - 0xcc, 0x01, 0xb3, 0x19, 0xb4, 0x01, 0xff, 0x05, 0x1a, 0x01, 0x06, 0x4d, - 0x19, 0x7c, 0x3f, 0xcc, 0x41, 0x42, 0x68, 0x00, 0xff, 0x25, 0x00, 0x51, - 0x37, 0x5d, 0x9e, 0xfb, 0x41, 0x5b, 0x92, 0x1a, 0x3e, 0x29, 0x00, 0x0e, - 0xa5, 0x02, 0x01, 0xff, 0x46, 0xe7, 0x02, 0x3e, 0xf5, 0x01, 0x46, 0xab, - 0x05, 0x51, 0x27, 0x40, 0x06, 0x2d, 0x0d, 0x06, 0x4b, 0x47, 0x4b, 0x3a, - 0xcc, 0x41, 0xa3, 0x2e, 0xa6, 0x20, 0x4d, 0x2e, 0x84, 0xb9, 0xcc, 0x01, - 0x4c, 0xe5, 0x90, 0xad, 0xcc, 0x01, 0xb3, 0x06, 0x4a, 0x59, 0xaf, 0xb5, - 0xcc, 0x41, 0x4b, 0x92, 0x93, 0xab, 0xcc, 0x01, 0x4e, 0xcc, 0x71, 0xd5, - 0xcc, 0x41, 0x53, 0x92, 0x28, 0xaf, 0xcc, 0x01, 0x4c, 0x7e, 0x81, 0xb1, - 0xcc, 0x41, 0x05, 0x8e, 0x86, 0x06, 0x4b, 0x89, 0x9b, 0xde, 0x25, 0x40, - 0x46, 0x48, 0xd7, 0xc9, 0xcc, 0x01, 0xab, 0x12, 0x44, 0xb6, 0xee, 0xd1, - 0xcc, 0x01, 0x45, 0xe6, 0xbb, 0xc1, 0xcc, 0x01, 0x44, 0x0a, 0xef, 0xc5, - 0xcc, 0x41, 0x43, 0xa1, 0x01, 0xbd, 0xcc, 0x01, 0x45, 0xd5, 0x71, 0xcd, - 0xcc, 0x41, 0x06, 0x13, 0x01, 0x11, 0x1b, 0x50, 0x1d, 0x01, 0xff, 0x46, - 0x73, 0x02, 0x41, 0xfb, 0x01, 0x45, 0xc8, 0x00, 0x42, 0xfb, 0x41, 0x0a, - 0x73, 0x02, 0x32, 0x08, 0x84, 0x02, 0x17, 0x15, 0x56, 0x1d, 0x01, 0xff, - 0x46, 0x73, 0x02, 0x43, 0xfb, 0x01, 0x4c, 0x09, 0x0f, 0x46, 0xfb, 0x01, - 0x45, 0xc8, 0x00, 0x44, 0xfb, 0x41, 0x52, 0x46, 0x52, 0x48, 0xfb, 0x01, - 0x06, 0x6d, 0x02, 0x01, 0xff, 0x46, 0x73, 0x02, 0x45, 0xfb, 0x01, 0x4c, - 0x09, 0x0f, 0x4a, 0xfb, 0x41, 0x52, 0x46, 0x52, 0x47, 0xfb, 0x01, 0x06, - 0x6d, 0x02, 0x01, 0xff, 0x4c, 0x09, 0x0f, 0x49, 0xfb, 0x01, 0x45, 0xc8, - 0x00, 0x4b, 0xfb, 0x41, 0x4c, 0xc3, 0x0a, 0x81, 0x25, 0x00, 0x4d, 0xa1, - 0x1c, 0x82, 0x25, 0x40, 0x07, 0x73, 0x02, 0x21, 0x05, 0xc3, 0x00, 0x11, - 0x06, 0xc8, 0x00, 0x01, 0xff, 0x53, 0x5b, 0x25, 0x9b, 0xce, 0x01, 0x4e, - 0x18, 0x7c, 0x3b, 0xcc, 0x41, 0x53, 0x5b, 0x25, 0x98, 0xce, 0x01, 0x4e, - 0x18, 0x7c, 0x38, 0xcc, 0x41, 0x58, 0x05, 0x29, 0x99, 0xce, 0x01, 0x59, - 0x55, 0x25, 0x9a, 0xce, 0x41, 0xa2, 0xae, 0x01, 0x46, 0xd2, 0xd7, 0x8d, - 0xf5, 0x01, 0x4c, 0x61, 0x8d, 0x8b, 0xf5, 0x01, 0x53, 0x5b, 0x25, 0x9c, - 0xce, 0x01, 0xb0, 0x8d, 0x01, 0x03, 0x7c, 0x00, 0x1f, 0x60, 0x05, 0x10, - 0x3f, 0x29, 0x00, 0xb4, 0x01, 0xff, 0x05, 0x1a, 0x01, 0x06, 0x4d, 0x19, - 0x7c, 0x3c, 0xcc, 0x41, 0x42, 0x68, 0x00, 0xfa, 0x25, 0x00, 0x51, 0x37, - 0x5d, 0x9f, 0xfb, 0x41, 0x06, 0x2d, 0x0d, 0x06, 0x4b, 0x47, 0x4b, 0x39, - 0xcc, 0x41, 0xa3, 0x2e, 0xa6, 0x20, 0x4d, 0x2e, 0x84, 0xb8, 0xcc, 0x01, - 0x4c, 0xe5, 0x90, 0xac, 0xcc, 0x01, 0xb3, 0x06, 0x4a, 0x59, 0xaf, 0xb4, - 0xcc, 0x41, 0x4b, 0x92, 0x93, 0xaa, 0xcc, 0x01, 0x4e, 0xcc, 0x71, 0xd4, - 0xcc, 0x41, 0x53, 0x92, 0x28, 0xae, 0xcc, 0x01, 0x4c, 0x7e, 0x81, 0xb0, - 0xcc, 0x41, 0x05, 0x8e, 0x86, 0x06, 0x4b, 0x89, 0x9b, 0xdf, 0x25, 0x40, - 0x46, 0x48, 0xd7, 0xc8, 0xcc, 0x01, 0xab, 0x12, 0x44, 0xb6, 0xee, 0xd0, - 0xcc, 0x01, 0x45, 0xe6, 0xbb, 0xc0, 0xcc, 0x01, 0x44, 0x0a, 0xef, 0xc4, - 0xcc, 0x41, 0x43, 0xa1, 0x01, 0xbc, 0xcc, 0x01, 0x45, 0xd5, 0x71, 0xcc, - 0xcc, 0x41, 0x49, 0x6d, 0xb3, 0x8c, 0xf5, 0x01, 0x45, 0x17, 0xdc, 0x89, - 0xf5, 0x41, 0x4c, 0x55, 0x8a, 0x8a, 0xf5, 0x01, 0x0e, 0xd4, 0x69, 0x01, - 0xff, 0x1b, 0xf1, 0x1b, 0x50, 0x06, 0x6d, 0x02, 0x01, 0xff, 0x0a, 0x73, - 0x02, 0x31, 0x08, 0x84, 0x02, 0x17, 0x15, 0x7d, 0x02, 0x01, 0xff, 0x46, - 0x73, 0x02, 0x3e, 0xfb, 0x01, 0x4c, 0x09, 0x0f, 0x51, 0xfb, 0x01, 0x45, - 0xc8, 0x00, 0x3f, 0xfb, 0x41, 0x06, 0x13, 0x01, 0x06, 0x52, 0xf2, 0x54, - 0x4d, 0xfb, 0x41, 0x46, 0x73, 0x02, 0x40, 0xfb, 0x01, 0x4c, 0x09, 0x0f, - 0x4f, 0xfb, 0x41, 0x06, 0x13, 0x01, 0x06, 0x52, 0xf2, 0x54, 0x4c, 0xfb, - 0x41, 0x4c, 0x09, 0x0f, 0x4e, 0xfb, 0x01, 0x45, 0xc8, 0x00, 0x50, 0xfb, - 0x41, 0x46, 0x73, 0x02, 0x3c, 0xfb, 0x01, 0x45, 0xc8, 0x00, 0x3d, 0xfb, - 0x41, 0x04, 0x23, 0x00, 0x06, 0x57, 0x10, 0x2f, 0x05, 0xcc, 0x41, 0x5b, - 0xba, 0x19, 0x01, 0xce, 0x01, 0x45, 0x33, 0x01, 0x84, 0x25, 0x00, 0x46, - 0xe7, 0x02, 0xe1, 0x25, 0x00, 0x52, 0xde, 0x50, 0x04, 0xce, 0x01, 0x54, - 0x63, 0x42, 0xdb, 0x25, 0x00, 0x56, 0x67, 0x34, 0xa4, 0xce, 0x01, 0x4c, - 0x19, 0x04, 0x8f, 0xfb, 0x01, 0x57, 0xf6, 0x2f, 0xaf, 0xce, 0x01, 0x63, - 0x7e, 0x0b, 0x13, 0xce, 0x41, 0x05, 0xc3, 0x00, 0x17, 0x51, 0x9d, 0x1c, - 0xe5, 0xfb, 0x01, 0x06, 0xc8, 0x00, 0x01, 0xff, 0x53, 0x5b, 0x25, 0x9e, - 0xce, 0x01, 0x4e, 0x18, 0x7c, 0x3e, 0xcc, 0x41, 0x53, 0x5b, 0x25, 0x9d, - 0xce, 0x01, 0x4e, 0x18, 0x7c, 0x3d, 0xcc, 0x41, 0x48, 0xed, 0x0c, 0x4e, - 0x20, 0x00, 0xa2, 0x19, 0x5b, 0x5c, 0x1a, 0x1f, 0x30, 0x00, 0x46, 0xa4, - 0x4e, 0x47, 0x2e, 0x80, 0x06, 0x44, 0xc2, 0x07, 0x5f, 0x00, 0x40, 0x49, - 0xa5, 0x3a, 0x48, 0x2e, 0x40, 0x46, 0x12, 0xd7, 0xab, 0xfa, 0x01, 0x50, - 0x60, 0x57, 0x05, 0xf5, 0x41, 0x45, 0x0d, 0xe4, 0xe9, 0xf3, 0x01, 0x46, - 0xc1, 0x05, 0x8c, 0xf4, 0x41, 0x4b, 0x85, 0x95, 0x74, 0xf7, 0x01, 0x4a, - 0xb9, 0xa9, 0xf4, 0xf9, 0x01, 0x42, 0xc4, 0x02, 0xb7, 0xfa, 0x41, 0xa4, - 0x71, 0x04, 0xc3, 0x00, 0x30, 0x05, 0xc8, 0x00, 0x01, 0xff, 0x45, 0x24, - 0x38, 0xdd, 0x27, 0x00, 0x06, 0xa9, 0x01, 0x01, 0xff, 0x45, 0xce, 0x00, - 0xf6, 0x27, 0x80, 0x13, 0x4c, 0x71, 0x8c, 0xf9, 0x27, 0x80, 0x06, 0x4e, - 0x1c, 0x7b, 0xff, 0x27, 0x40, 0x49, 0xfc, 0xb1, 0xfe, 0x27, 0x40, 0x49, - 0xfc, 0xb1, 0xfc, 0x27, 0x40, 0x80, 0x25, 0x06, 0xa9, 0x01, 0x01, 0xff, - 0x45, 0xce, 0x00, 0xf5, 0x27, 0x80, 0x13, 0x4c, 0x71, 0x8c, 0xf8, 0x27, - 0x80, 0x06, 0x4e, 0x1c, 0x7b, 0x33, 0x2b, 0x40, 0x49, 0xfc, 0xb1, 0xfd, - 0x27, 0x40, 0x49, 0xfc, 0xb1, 0xfb, 0x27, 0x40, 0x06, 0xc8, 0x00, 0x06, - 0x44, 0x25, 0x38, 0xde, 0x27, 0x40, 0x45, 0xce, 0x00, 0xf7, 0x27, 0x00, - 0x4c, 0x71, 0x8c, 0xfa, 0x27, 0x40, 0x67, 0x7b, 0x05, 0xe6, 0x2a, 0x00, - 0x47, 0xf3, 0x31, 0xcc, 0x27, 0x00, 0x43, 0xe6, 0x1c, 0x98, 0xfa, 0x41, - 0x06, 0x3e, 0xd5, 0x7a, 0x03, 0x13, 0x00, 0x01, 0xff, 0x43, 0x1a, 0x00, - 0x27, 0x22, 0x80, 0x3c, 0x42, 0x0c, 0x00, 0x28, 0x22, 0xc0, 0x00, 0x80, - 0x01, 0xff, 0x57, 0x3e, 0x2f, 0x59, 0x2a, 0x00, 0x05, 0x51, 0x00, 0x01, - 0xff, 0x02, 0x3b, 0x01, 0x0c, 0x4f, 0x67, 0x6c, 0x5d, 0x2a, 0x00, 0x4b, - 0x78, 0x9d, 0x5b, 0x2a, 0x40, 0x47, 0x9a, 0x1d, 0x52, 0x2a, 0x00, 0x05, - 0x3d, 0x01, 0x01, 0xff, 0x47, 0x77, 0x7e, 0x62, 0x2a, 0x00, 0x48, 0x78, - 0x58, 0x63, 0x2a, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x02, 0x3b, 0x01, - 0x12, 0x4f, 0x67, 0x6c, 0x5c, 0x2a, 0x00, 0x4b, 0x78, 0x9d, 0x5a, 0x2a, - 0x00, 0x48, 0x78, 0x58, 0x5f, 0x2a, 0x40, 0x47, 0x9a, 0x1d, 0x51, 0x2a, - 0x00, 0x05, 0x3d, 0x01, 0x01, 0xff, 0x47, 0x77, 0x7e, 0x5e, 0x2a, 0x00, - 0x48, 0x78, 0x58, 0x60, 0x2a, 0x40, 0x43, 0x1a, 0x00, 0x16, 0xcc, 0x01, - 0x46, 0x60, 0xd7, 0x19, 0xcc, 0x81, 0x16, 0x09, 0xd6, 0x22, 0x06, 0x42, - 0x0c, 0x00, 0x15, 0xcc, 0x41, 0x46, 0x0c, 0xda, 0x17, 0xcc, 0x01, 0x46, - 0xd5, 0x4f, 0x18, 0xcc, 0x41, 0x54, 0x07, 0x3f, 0x1a, 0xcc, 0x41, 0x4d, - 0x57, 0x7e, 0x0f, 0xf5, 0x01, 0x0a, 0x9b, 0xa9, 0x01, 0xff, 0x43, 0xbf, - 0x0a, 0x0e, 0x00, 0x00, 0x44, 0xa1, 0x1d, 0x0f, 0x00, 0x40, 0x43, 0x14, - 0x09, 0x4e, 0x26, 0x00, 0xa7, 0x93, 0x1d, 0xad, 0xd3, 0x19, 0xae, 0xdd, - 0x02, 0x47, 0x0d, 0xd1, 0x81, 0xf9, 0x01, 0x42, 0x63, 0x15, 0xe2, 0xf5, - 0x81, 0xc9, 0x02, 0x47, 0xe2, 0x82, 0xa4, 0x20, 0x00, 0x03, 0xcb, 0x21, - 0x0c, 0x51, 0xf2, 0x5d, 0xb6, 0x20, 0x00, 0x44, 0x48, 0x91, 0x8e, 0xf9, - 0x41, 0x07, 0xc1, 0x05, 0x11, 0x0c, 0x01, 0x16, 0x01, 0xff, 0x45, 0xe8, - 0x04, 0xfe, 0xa4, 0x00, 0x49, 0x15, 0x16, 0xff, 0xa4, 0x40, 0xe1, 0xee, - 0xa4, 0x80, 0x94, 0x02, 0x42, 0x16, 0x00, 0xd0, 0xa4, 0x00, 0xa3, 0x81, - 0x02, 0xa4, 0xf4, 0x01, 0xe5, 0xf0, 0xa4, 0x80, 0xea, 0x01, 0x42, 0xe1, - 0x07, 0xe9, 0xa4, 0x00, 0xa7, 0xd7, 0x01, 0xa8, 0xca, 0x01, 0xe9, 0xf2, - 0xa4, 0x00, 0x42, 0xbd, 0x26, 0xd9, 0xa4, 0x00, 0xab, 0xb3, 0x01, 0x42, - 0x74, 0x00, 0xe1, 0xa4, 0x00, 0x42, 0x6c, 0x00, 0xdf, 0xa4, 0x00, 0xae, - 0x9a, 0x01, 0xef, 0xf3, 0xa4, 0x80, 0x90, 0x01, 0xb0, 0x83, 0x01, 0xb3, - 0x77, 0xb4, 0x32, 0xf5, 0xf4, 0xa4, 0x80, 0x25, 0x42, 0xa9, 0x01, 0xea, - 0xa4, 0x00, 0x42, 0x4c, 0x26, 0xe7, 0xa4, 0x00, 0xb9, 0x0d, 0xba, 0x01, - 0xff, 0xe1, 0xe4, 0xa4, 0x00, 0x42, 0x22, 0x00, 0xe3, 0xa4, 0x40, 0xe1, - 0xec, 0xa4, 0x00, 0x42, 0x22, 0x00, 0xb0, 0x1f, 0x41, 0xe5, 0xf5, 0xa4, - 0x00, 0xe8, 0xf6, 0xa4, 0x40, 0xe1, 0xd4, 0xa4, 0x00, 0x42, 0x22, 0x00, - 0xd5, 0xa4, 0x00, 0x04, 0xbf, 0x0a, 0x0d, 0xb3, 0x01, 0xff, 0xe1, 0xdd, - 0xa4, 0x00, 0x42, 0x22, 0x00, 0xde, 0xa4, 0x40, 0x04, 0xed, 0x60, 0x06, - 0x45, 0xc5, 0xe5, 0xf9, 0xa4, 0x40, 0x42, 0x5d, 0x00, 0xfb, 0xa4, 0x00, - 0x43, 0xbd, 0xf0, 0xfa, 0xa4, 0x00, 0x43, 0x0e, 0xf1, 0xfd, 0xa4, 0x00, - 0x42, 0xff, 0x04, 0xfc, 0xa4, 0x00, 0x42, 0x35, 0x00, 0xf8, 0xa4, 0x40, - 0xe1, 0xe2, 0xa4, 0x00, 0x42, 0x22, 0x00, 0xeb, 0xa4, 0x40, 0xe1, 0xd1, - 0xa4, 0x00, 0x42, 0x22, 0x00, 0xd2, 0xa4, 0x40, 0xe5, 0xf7, 0xa4, 0x40, - 0xe1, 0xe0, 0xa4, 0x00, 0x42, 0x24, 0x02, 0xe5, 0xa4, 0x40, 0xe1, 0xd7, - 0xa4, 0x00, 0x42, 0x22, 0x00, 0xd8, 0xa4, 0x40, 0xe1, 0xe6, 0xa4, 0x00, - 0x42, 0x22, 0x00, 0xe8, 0xa4, 0x40, 0xe1, 0xd6, 0xa4, 0x00, 0x42, 0x22, - 0x00, 0xed, 0xa4, 0x40, 0xf5, 0xf1, 0xa4, 0x40, 0xe1, 0xd3, 0xa4, 0x00, - 0x42, 0x59, 0x00, 0xdc, 0xa4, 0x40, 0xe1, 0xda, 0xa4, 0x00, 0x42, 0x22, - 0x00, 0xdb, 0xa4, 0x40, 0xe5, 0xef, 0xa4, 0x40, 0x44, 0xd2, 0x07, 0x84, - 0xf4, 0x41, 0xa5, 0x0f, 0xab, 0x01, 0xff, 0x47, 0xea, 0x07, 0x17, 0xf5, - 0x01, 0x4d, 0xc7, 0x80, 0x87, 0xf5, 0x41, 0x80, 0xab, 0x16, 0x03, 0x17, - 0x00, 0x01, 0xff, 0x08, 0x8a, 0xc0, 0xd5, 0x09, 0x02, 0x26, 0x02, 0x01, - 0xff, 0x09, 0x9c, 0xb7, 0xdd, 0x04, 0x0a, 0xa3, 0xab, 0xae, 0x04, 0x02, - 0xeb, 0x07, 0x01, 0xff, 0x09, 0x31, 0xb9, 0x4e, 0x07, 0x5e, 0xd0, 0x01, - 0xff, 0x91, 0x3f, 0x42, 0x21, 0xea, 0x52, 0x00, 0x01, 0x42, 0xa6, 0xf1, - 0x53, 0x00, 0x01, 0x94, 0x29, 0x42, 0x7a, 0xc0, 0x56, 0x00, 0x01, 0x96, - 0x19, 0x42, 0x1b, 0x3f, 0x59, 0x00, 0x01, 0x98, 0x01, 0xff, 0xd2, 0x5a, - 0x00, 0x01, 0xd3, 0x5b, 0x00, 0x01, 0xd6, 0x5c, 0x00, 0x01, 0xd9, 0x5d, - 0x00, 0x41, 0xd3, 0x57, 0x00, 0x01, 0xd4, 0x58, 0x00, 0x41, 0xd7, 0x54, - 0x00, 0x01, 0xd9, 0x55, 0x00, 0x41, 0xd8, 0x50, 0x00, 0x01, 0xd9, 0x51, - 0x00, 0x41, 0x90, 0x9e, 0x03, 0x91, 0xeb, 0x02, 0x92, 0xb2, 0x02, 0x93, - 0xff, 0x01, 0x94, 0xcc, 0x01, 0x95, 0x93, 0x01, 0x96, 0x61, 0x97, 0x29, - 0x98, 0x0f, 0x99, 0x01, 0xff, 0x45, 0xf9, 0xde, 0x44, 0x00, 0x01, 0x45, - 0x3a, 0xdf, 0x4d, 0x00, 0x41, 0x44, 0x17, 0xdf, 0x14, 0x00, 0x01, 0x44, - 0xee, 0xe9, 0x13, 0x00, 0x01, 0x44, 0xa6, 0xea, 0x42, 0x00, 0x01, 0x45, - 0x6b, 0xe0, 0x4c, 0x00, 0x41, 0x44, 0xae, 0xe9, 0x12, 0x00, 0x01, 0x45, - 0x26, 0xdf, 0x43, 0x00, 0x01, 0x44, 0x26, 0xea, 0x1f, 0x00, 0x01, 0x44, - 0x5e, 0xea, 0x16, 0x00, 0x01, 0x44, 0x9a, 0xea, 0x3d, 0x00, 0x01, 0x44, - 0xea, 0xea, 0x38, 0x00, 0x01, 0x45, 0x2a, 0xe0, 0x48, 0x00, 0x01, 0x44, - 0x3a, 0xd6, 0x0f, 0x00, 0x01, 0x44, 0x72, 0xeb, 0x24, 0x00, 0x41, 0x44, - 0xba, 0xe9, 0x28, 0x00, 0x01, 0x43, 0x1c, 0x74, 0x03, 0x00, 0x01, 0x45, - 0x8a, 0xdf, 0x47, 0x00, 0x01, 0x44, 0xc2, 0xea, 0x0e, 0x00, 0x01, 0x45, - 0x39, 0xe0, 0x4b, 0x00, 0x01, 0x44, 0x3a, 0xeb, 0x11, 0x00, 0x01, 0x45, - 0x98, 0xe0, 0x4a, 0x00, 0x01, 0x44, 0x9e, 0xeb, 0x36, 0x00, 0x41, 0x44, - 0xb6, 0xe9, 0x22, 0x00, 0x01, 0x44, 0xda, 0xe9, 0x09, 0x00, 0x01, 0x44, - 0x22, 0xea, 0x1c, 0x00, 0x01, 0x44, 0x6a, 0xea, 0x2a, 0x00, 0x01, 0x44, - 0x92, 0xea, 0x37, 0x00, 0x01, 0x44, 0xce, 0xea, 0x1d, 0x00, 0x01, 0x44, - 0x36, 0xeb, 0x0a, 0x00, 0x01, 0x44, 0x76, 0xeb, 0x31, 0x00, 0x01, 0x44, - 0x96, 0xeb, 0x32, 0x00, 0x41, 0x44, 0xc2, 0xe9, 0x39, 0x00, 0x01, 0x44, - 0x02, 0xea, 0x2f, 0x00, 0x01, 0x44, 0x48, 0xcb, 0x3a, 0x00, 0x01, 0x44, - 0x3e, 0xea, 0x41, 0x00, 0x01, 0x44, 0x7e, 0xea, 0x10, 0x00, 0x01, 0x44, - 0xae, 0xea, 0x06, 0x00, 0x01, 0x44, 0xfe, 0xea, 0x0b, 0x00, 0x01, 0x45, - 0x93, 0xe0, 0x45, 0x00, 0x41, 0x44, 0xb2, 0xe9, 0x1b, 0x00, 0x01, 0x44, - 0xfe, 0xe9, 0x2d, 0x00, 0x01, 0x44, 0x2a, 0xea, 0x26, 0x00, 0x01, 0x45, - 0xb2, 0xdf, 0x49, 0x00, 0x01, 0x44, 0x02, 0xeb, 0x0d, 0x00, 0x01, 0x44, - 0x46, 0xeb, 0x34, 0x00, 0x01, 0x43, 0x5a, 0xeb, 0x01, 0x00, 0x01, 0x44, - 0x86, 0xeb, 0x20, 0x00, 0x41, 0x44, 0xca, 0xe9, 0x3f, 0x00, 0x01, 0x44, - 0xf6, 0xe9, 0x25, 0x00, 0x01, 0x44, 0x62, 0xea, 0x18, 0x00, 0x01, 0x44, - 0x86, 0xea, 0x1a, 0x00, 0x01, 0x44, 0x9e, 0xea, 0x40, 0x00, 0x01, 0x44, - 0x1a, 0xeb, 0x2c, 0x00, 0x01, 0x44, 0x42, 0xeb, 0x29, 0x00, 0x01, 0x43, - 0x84, 0xf0, 0x02, 0x00, 0x01, 0x45, 0xca, 0xe0, 0x46, 0x00, 0x41, 0x43, - 0x21, 0xf0, 0x04, 0x00, 0x01, 0x44, 0xf2, 0xe9, 0x21, 0x00, 0x01, 0x44, - 0x32, 0xea, 0x30, 0x00, 0x01, 0x44, 0x5a, 0xea, 0x15, 0x00, 0x01, 0x44, - 0x76, 0xea, 0x08, 0x00, 0x01, 0x44, 0xca, 0xea, 0x17, 0x00, 0x01, 0x44, - 0x16, 0xeb, 0x23, 0x00, 0x01, 0x44, 0x4e, 0xeb, 0x3c, 0x00, 0x41, 0x44, - 0xd2, 0xe9, 0x05, 0x00, 0x01, 0x44, 0x2e, 0xea, 0x2b, 0x00, 0x01, 0x44, - 0x66, 0xea, 0x1e, 0x00, 0x01, 0x44, 0x8a, 0xea, 0x33, 0x00, 0x01, 0x44, - 0xda, 0xea, 0x35, 0x00, 0x01, 0x44, 0x0e, 0xeb, 0x19, 0x00, 0x01, 0x44, - 0xfa, 0xb2, 0x07, 0x00, 0x01, 0x43, 0x81, 0xf0, 0x00, 0x00, 0x01, 0x44, - 0x8a, 0xeb, 0x2e, 0x00, 0x41, 0x91, 0x06, 0x49, 0xf8, 0xb2, 0xd2, 0x00, - 0x41, 0x92, 0x14, 0x93, 0x06, 0x48, 0x7a, 0xc0, 0xa4, 0x00, 0x41, 0x47, - 0x56, 0xcb, 0x98, 0x00, 0x01, 0x46, 0x10, 0xd6, 0x99, 0x00, 0x41, 0x46, - 0x3a, 0xd6, 0x93, 0x00, 0x01, 0x48, 0x82, 0xc0, 0x94, 0x00, 0x41, 0xa2, - 0x87, 0x01, 0x08, 0x92, 0xc9, 0x01, 0xff, 0x43, 0x3c, 0xf0, 0xde, 0x00, - 0x01, 0x92, 0x06, 0x43, 0x57, 0xf0, 0xfa, 0x00, 0x41, 0x90, 0x4a, 0x91, - 0x20, 0x92, 0x06, 0x42, 0xd7, 0xcf, 0xf9, 0x00, 0x41, 0xd1, 0xf3, 0x00, - 0x01, 0xd2, 0xf4, 0x00, 0x01, 0xd6, 0xf5, 0x00, 0x01, 0xd7, 0xf6, 0x00, - 0x01, 0xd8, 0xf7, 0x00, 0x01, 0xd9, 0xf8, 0x00, 0x41, 0xd0, 0xe9, 0x00, - 0x01, 0xd1, 0xea, 0x00, 0x01, 0xd2, 0xeb, 0x00, 0x01, 0xd3, 0xec, 0x00, - 0x01, 0xd4, 0xed, 0x00, 0x01, 0xd5, 0xee, 0x00, 0x01, 0xd6, 0xef, 0x00, - 0x01, 0xd7, 0xf0, 0x00, 0x01, 0xd8, 0xf1, 0x00, 0x01, 0xd9, 0xf2, 0x00, - 0x41, 0xd0, 0xdf, 0x00, 0x01, 0xd1, 0xe0, 0x00, 0x01, 0xd2, 0xe1, 0x00, - 0x01, 0xd3, 0xe2, 0x00, 0x01, 0xd4, 0xe3, 0x00, 0x01, 0xd5, 0xe4, 0x00, - 0x01, 0xd6, 0xe5, 0x00, 0x01, 0xd7, 0xe6, 0x00, 0x01, 0xd8, 0xe7, 0x00, - 0x01, 0xd9, 0xe8, 0x00, 0x41, 0x91, 0x84, 0x01, 0x92, 0x01, 0xff, 0x92, - 0x73, 0x93, 0x53, 0x94, 0x29, 0x95, 0x01, 0xff, 0xd1, 0xd5, 0x00, 0x01, - 0xd2, 0xd6, 0x00, 0x01, 0xd3, 0xd7, 0x00, 0x01, 0x46, 0xe6, 0xd5, 0xd8, - 0x00, 0x01, 0xd5, 0xd9, 0x00, 0x01, 0xd6, 0xda, 0x00, 0x01, 0xd7, 0xdb, - 0x00, 0x01, 0xd8, 0xdc, 0x00, 0x01, 0xd9, 0xdd, 0x00, 0x41, 0x51, 0x71, - 0x56, 0xcc, 0x00, 0x01, 0x49, 0xe6, 0xb2, 0xcd, 0x00, 0x01, 0x4f, 0xc5, - 0x68, 0xce, 0x00, 0x01, 0x47, 0x80, 0xcb, 0xcf, 0x00, 0x01, 0xd5, 0xd0, - 0x00, 0x01, 0xd6, 0xd1, 0x00, 0x01, 0xd8, 0xd3, 0x00, 0x01, 0xd9, 0xd4, - 0x00, 0x41, 0x47, 0x2c, 0xcb, 0xc6, 0x00, 0x01, 0x47, 0x3a, 0xcb, 0xc7, - 0x00, 0x01, 0xd2, 0xc8, 0x00, 0x01, 0x47, 0x79, 0xcb, 0xc9, 0x00, 0x01, - 0xd4, 0xca, 0x00, 0x01, 0xd6, 0xcb, 0x00, 0x41, 0x4b, 0x82, 0x96, 0xc4, - 0x00, 0x01, 0x49, 0x0a, 0xb3, 0xc5, 0x00, 0x41, 0x90, 0xfb, 0x01, 0x92, - 0xda, 0x01, 0x93, 0xc7, 0x01, 0x94, 0xaa, 0x01, 0x95, 0x83, 0x01, 0x96, - 0x55, 0x97, 0x2b, 0x98, 0x0d, 0x99, 0x01, 0xff, 0xd0, 0xc2, 0x00, 0x01, - 0x48, 0x6a, 0xc0, 0xc3, 0x00, 0x41, 0xd0, 0xbb, 0x00, 0x01, 0xd1, 0xbc, - 0x00, 0x01, 0xd2, 0xbd, 0x00, 0x01, 0xd3, 0xbe, 0x00, 0x01, 0xd4, 0xbf, - 0x00, 0x01, 0xd5, 0xc0, 0x00, 0x01, 0xd9, 0xc1, 0x00, 0x41, 0xd0, 0xb2, - 0x00, 0x01, 0xd1, 0xb3, 0x00, 0x01, 0xd2, 0xb4, 0x00, 0x01, 0x47, 0x64, - 0xcb, 0xb5, 0x00, 0x01, 0xd4, 0xb6, 0x00, 0x01, 0x46, 0x2e, 0xd6, 0xb7, - 0x00, 0x01, 0xd7, 0xb8, 0x00, 0x01, 0xd8, 0xb9, 0x00, 0x01, 0xd9, 0xba, - 0x00, 0x41, 0xd0, 0xa8, 0x00, 0x01, 0xd1, 0xa9, 0x00, 0x01, 0x49, 0xef, - 0xb2, 0xaa, 0x00, 0x01, 0x48, 0x72, 0xc0, 0xab, 0x00, 0x01, 0xd4, 0xac, - 0x00, 0x01, 0xd5, 0xad, 0x00, 0x01, 0xd6, 0xae, 0x00, 0x01, 0xd7, 0xaf, - 0x00, 0x01, 0xd8, 0xb0, 0x00, 0x01, 0xd9, 0xb1, 0x00, 0x41, 0xd0, 0x9f, - 0x00, 0x01, 0x46, 0xb6, 0xd5, 0xa0, 0x00, 0x01, 0xd2, 0xa1, 0x00, 0x01, - 0xd3, 0xa2, 0x00, 0x01, 0xd4, 0xa3, 0x00, 0x01, 0xd7, 0xa5, 0x00, 0x01, - 0xd8, 0xa6, 0x00, 0x01, 0x47, 0xa3, 0xcb, 0xa7, 0x00, 0x41, 0x48, 0x5a, - 0xc0, 0x9a, 0x00, 0x01, 0x46, 0xb0, 0xd5, 0x9b, 0x00, 0x01, 0xd2, 0x9c, - 0x00, 0x01, 0x46, 0x16, 0xd6, 0x9d, 0x00, 0x01, 0xd6, 0x9e, 0x00, 0x41, - 0x45, 0x1c, 0xdf, 0x95, 0x00, 0x01, 0x46, 0xc2, 0xd5, 0x96, 0x00, 0x01, - 0xd2, 0x97, 0x00, 0x41, 0x47, 0x33, 0xcb, 0x8e, 0x00, 0x01, 0x48, 0x62, - 0xc0, 0x8f, 0x00, 0x01, 0x47, 0x41, 0xcb, 0x90, 0x00, 0x01, 0x47, 0x72, - 0xcb, 0x91, 0x00, 0x01, 0x49, 0x13, 0xb3, 0x92, 0x00, 0x41, 0x45, 0x17, - 0xdf, 0x80, 0x00, 0x01, 0x47, 0x48, 0xcb, 0x81, 0x00, 0x01, 0x46, 0xec, - 0xd5, 0x82, 0x00, 0x01, 0x95, 0x39, 0x96, 0x2b, 0x97, 0x1d, 0x98, 0x0f, - 0x99, 0x01, 0xff, 0x45, 0x36, 0xe3, 0x8c, 0x00, 0x01, 0x46, 0xea, 0xda, - 0x8d, 0x00, 0x41, 0x45, 0x40, 0xe3, 0x8a, 0x00, 0x01, 0x46, 0xe4, 0xda, - 0x8b, 0x00, 0x41, 0x4a, 0x01, 0xa8, 0x88, 0x00, 0x01, 0x49, 0x67, 0xb9, - 0x89, 0x00, 0x41, 0x45, 0x3b, 0xe3, 0x86, 0x00, 0x01, 0x45, 0x39, 0xe5, - 0x87, 0x00, 0x41, 0x46, 0x32, 0xd5, 0x83, 0x00, 0x01, 0x46, 0xc2, 0xd8, - 0x84, 0x00, 0x01, 0x4a, 0x3f, 0xab, 0x85, 0x00, 0x41, 0x44, 0xce, 0xe9, - 0x1b, 0x06, 0x01, 0x91, 0xb1, 0x0c, 0x93, 0xe8, 0x09, 0x94, 0xee, 0x08, - 0x95, 0x90, 0x06, 0x96, 0xac, 0x04, 0x97, 0x9b, 0x03, 0x02, 0xd9, 0xf0, - 0xf6, 0x02, 0xa2, 0x01, 0xff, 0x90, 0x3f, 0x91, 0x01, 0xff, 0x42, 0x4e, - 0xdf, 0x48, 0x06, 0x01, 0x92, 0x28, 0x02, 0x37, 0xe9, 0x1c, 0x42, 0xb8, - 0xf1, 0x50, 0x06, 0x01, 0x42, 0xa1, 0xf1, 0x51, 0x06, 0x01, 0x98, 0x06, - 0x42, 0x2c, 0xf0, 0x54, 0x06, 0x41, 0xd0, 0x52, 0x06, 0x01, 0xd8, 0x53, - 0x06, 0x41, 0xe1, 0x4d, 0x06, 0x01, 0xe2, 0x4e, 0x06, 0x41, 0xd0, 0x49, - 0x06, 0x01, 0xd2, 0x4b, 0x06, 0x01, 0xd3, 0x4c, 0x06, 0x41, 0x90, 0x8b, - 0x02, 0x91, 0xf4, 0x01, 0x92, 0xb6, 0x01, 0x93, 0x9b, 0x01, 0x94, 0x79, - 0x95, 0x53, 0x96, 0x39, 0x97, 0x1b, 0x98, 0x01, 0xff, 0xd0, 0x41, 0x06, - 0x01, 0xd1, 0x42, 0x06, 0x01, 0xd2, 0x43, 0x06, 0x01, 0xd5, 0x44, 0x06, - 0x01, 0xd6, 0x45, 0x06, 0x01, 0xd7, 0x46, 0x06, 0x41, 0xd0, 0x3a, 0x06, - 0x01, 0xd3, 0x3b, 0x06, 0x01, 0xd4, 0x3c, 0x06, 0x01, 0xd6, 0x3d, 0x06, - 0x01, 0xd7, 0x3e, 0x06, 0x01, 0xd8, 0x3f, 0x06, 0x01, 0xd9, 0x40, 0x06, - 0x41, 0xd0, 0x34, 0x06, 0x01, 0xd1, 0x35, 0x06, 0x01, 0xd5, 0x36, 0x06, - 0x01, 0xd6, 0x37, 0x06, 0x01, 0xd7, 0x38, 0x06, 0x01, 0xd9, 0x39, 0x06, - 0x41, 0xd0, 0x2b, 0x06, 0x01, 0xd1, 0x2c, 0x06, 0x01, 0xd3, 0x2d, 0x06, - 0x01, 0xd4, 0x2e, 0x06, 0x01, 0xd5, 0x2f, 0x06, 0x01, 0xd6, 0x30, 0x06, - 0x01, 0xd7, 0x31, 0x06, 0x01, 0xd8, 0x32, 0x06, 0x01, 0xd9, 0x33, 0x06, - 0x41, 0xd0, 0x23, 0x06, 0x01, 0xd1, 0x24, 0x06, 0x01, 0xd4, 0x25, 0x06, - 0x01, 0xd5, 0x26, 0x06, 0x01, 0xd6, 0x27, 0x06, 0x01, 0xd7, 0x28, 0x06, - 0x01, 0xd8, 0x29, 0x06, 0x01, 0xd9, 0x2a, 0x06, 0x41, 0xd0, 0x1d, 0x06, - 0x01, 0xd1, 0x1e, 0x06, 0x01, 0xd4, 0x1f, 0x06, 0x01, 0xd7, 0x20, 0x06, - 0x01, 0xd8, 0x21, 0x06, 0x01, 0xd9, 0x22, 0x06, 0x41, 0xd0, 0x0e, 0x06, - 0x01, 0xd1, 0x0f, 0x06, 0x81, 0x2a, 0xd2, 0x12, 0x06, 0x81, 0x1d, 0xd3, - 0x15, 0x06, 0x81, 0x14, 0xd4, 0x17, 0x06, 0x01, 0xd6, 0x18, 0x06, 0x01, - 0xd7, 0x19, 0x06, 0x01, 0xd8, 0x1a, 0x06, 0x01, 0xd9, 0x1c, 0x06, 0x41, - 0xed, 0x16, 0x06, 0x41, 0xe6, 0x13, 0x06, 0x01, 0xed, 0x14, 0x06, 0x41, - 0xe6, 0x10, 0x06, 0x01, 0xed, 0x11, 0x06, 0x41, 0xd0, 0x09, 0x06, 0x01, - 0xd1, 0x0a, 0x06, 0x01, 0xd3, 0x0b, 0x06, 0x01, 0xd6, 0x0c, 0x06, 0x01, - 0xd7, 0x0d, 0x06, 0x41, 0xd1, 0x00, 0x06, 0x01, 0xd2, 0x01, 0x06, 0x01, - 0xd3, 0x02, 0x06, 0x01, 0xd4, 0x03, 0x06, 0x01, 0xd5, 0x04, 0x06, 0x01, - 0xd6, 0x05, 0x06, 0x01, 0xd7, 0x06, 0x06, 0x01, 0xd8, 0x07, 0x06, 0x01, - 0xd9, 0x08, 0x06, 0x41, 0xd0, 0x60, 0x07, 0x01, 0xd1, 0x61, 0x07, 0x01, - 0xd2, 0x62, 0x07, 0x01, 0xd3, 0x63, 0x07, 0x01, 0xd4, 0x64, 0x07, 0x01, - 0xd5, 0x65, 0x07, 0x01, 0xd6, 0x66, 0x07, 0x01, 0xd7, 0x67, 0x07, 0x41, - 0x90, 0x38, 0x91, 0x0c, 0x47, 0x4f, 0xcb, 0x54, 0x07, 0x01, 0x45, 0xc6, - 0xdf, 0x55, 0x07, 0x41, 0x43, 0x71, 0x56, 0x4d, 0x07, 0x01, 0x43, 0x2d, - 0xf0, 0x4e, 0x07, 0x01, 0x43, 0x3a, 0xea, 0x4f, 0x07, 0x01, 0x47, 0x6b, - 0xcb, 0x50, 0x07, 0x01, 0x45, 0xcb, 0xdf, 0x51, 0x07, 0x01, 0x44, 0xaa, - 0xea, 0x52, 0x07, 0x01, 0x44, 0x2e, 0xeb, 0x53, 0x07, 0x41, 0x43, 0x3a, - 0xcb, 0x40, 0x07, 0x01, 0x43, 0x16, 0xea, 0x41, 0x07, 0x01, 0x43, 0x4e, - 0xf0, 0x42, 0x07, 0x01, 0x43, 0x5d, 0xf0, 0x43, 0x07, 0x01, 0x43, 0xb2, - 0xea, 0x44, 0x07, 0x01, 0x43, 0x22, 0xd6, 0x45, 0x07, 0x01, 0x43, 0x57, - 0xe0, 0x46, 0x07, 0x01, 0x43, 0x82, 0xc0, 0x47, 0x07, 0x01, 0x99, 0x01, - 0xff, 0x42, 0x73, 0x00, 0x48, 0x07, 0x01, 0x8d, 0x01, 0xff, 0x44, 0x1e, - 0xea, 0x49, 0x07, 0x01, 0x44, 0x52, 0xea, 0x4a, 0x07, 0x01, 0x44, 0x82, - 0xea, 0x4b, 0x07, 0x01, 0x44, 0x06, 0xeb, 0x4c, 0x07, 0x41, 0x90, 0xbe, - 0x01, 0x91, 0x93, 0x01, 0x92, 0x6d, 0x93, 0x5f, 0x94, 0x3d, 0x95, 0x17, - 0x96, 0x01, 0xff, 0xd0, 0x32, 0x07, 0x01, 0xd1, 0x33, 0x07, 0x01, 0xd2, - 0x34, 0x07, 0x01, 0xd3, 0x35, 0x07, 0x01, 0xd4, 0x36, 0x07, 0x41, 0xd1, - 0x29, 0x07, 0x01, 0xd2, 0x2a, 0x07, 0x01, 0xd3, 0x2b, 0x07, 0x01, 0xd4, - 0x2c, 0x07, 0x01, 0xd5, 0x2d, 0x07, 0x01, 0xd6, 0x2e, 0x07, 0x01, 0xd7, - 0x2f, 0x07, 0x01, 0xd8, 0x30, 0x07, 0x01, 0xd9, 0x31, 0x07, 0x41, 0xd0, - 0x21, 0x07, 0x01, 0xd2, 0x22, 0x07, 0x01, 0xd3, 0x23, 0x07, 0x01, 0xd4, - 0x24, 0x07, 0x01, 0xd5, 0x25, 0x07, 0x01, 0xd6, 0x26, 0x07, 0x01, 0xd8, - 0x27, 0x07, 0x01, 0xd9, 0x28, 0x07, 0x41, 0xd4, 0x1e, 0x07, 0x01, 0xd7, - 0x1f, 0x07, 0x01, 0xd8, 0x20, 0x07, 0x41, 0xd0, 0x15, 0x07, 0x01, 0xd1, - 0x16, 0x07, 0x01, 0xd2, 0x17, 0x07, 0x01, 0xd3, 0x18, 0x07, 0x01, 0xd4, - 0x19, 0x07, 0x01, 0xd6, 0x1a, 0x07, 0x01, 0xd7, 0x1b, 0x07, 0x01, 0xd8, - 0x1c, 0x07, 0x01, 0xd9, 0x1d, 0x07, 0x41, 0xd0, 0x0b, 0x07, 0x01, 0xd1, - 0x0c, 0x07, 0x01, 0xd2, 0x0d, 0x07, 0x01, 0xd3, 0x0e, 0x07, 0x01, 0xd4, - 0x0f, 0x07, 0x01, 0xd5, 0x10, 0x07, 0x01, 0xd6, 0x11, 0x07, 0x01, 0xd7, - 0x12, 0x07, 0x01, 0xd8, 0x13, 0x07, 0x01, 0xd9, 0x14, 0x07, 0x41, 0xd0, - 0x03, 0x07, 0x01, 0xd1, 0x04, 0x07, 0x01, 0xd2, 0x05, 0x07, 0x01, 0xd3, - 0x06, 0x07, 0x01, 0xd4, 0x07, 0x07, 0x01, 0xd6, 0x08, 0x07, 0x01, 0xd8, - 0x09, 0x07, 0x01, 0xd9, 0x0a, 0x07, 0x41, 0x90, 0xb8, 0x02, 0x91, 0x9d, - 0x02, 0x92, 0xf6, 0x01, 0x93, 0xcf, 0x01, 0x94, 0xb0, 0x01, 0x95, 0x89, - 0x01, 0x96, 0x6f, 0x97, 0x45, 0x98, 0x1b, 0x99, 0x01, 0xff, 0xd1, 0xfd, - 0x06, 0x01, 0xd2, 0xfe, 0x06, 0x01, 0xd4, 0xff, 0x06, 0x01, 0xd5, 0x00, - 0x07, 0x01, 0xd6, 0x01, 0x07, 0x01, 0xd8, 0x02, 0x07, 0x41, 0xd0, 0xf3, - 0x06, 0x01, 0xd1, 0xf4, 0x06, 0x01, 0xd2, 0xf5, 0x06, 0x01, 0xd3, 0xf6, - 0x06, 0x01, 0xd4, 0xf7, 0x06, 0x01, 0xd5, 0xf8, 0x06, 0x01, 0xd6, 0xf9, - 0x06, 0x01, 0xd7, 0xfa, 0x06, 0x01, 0xd8, 0xfb, 0x06, 0x01, 0xd9, 0xfc, - 0x06, 0x41, 0xd0, 0xe9, 0x06, 0x01, 0xd1, 0xea, 0x06, 0x01, 0xd2, 0xeb, - 0x06, 0x01, 0xd3, 0xec, 0x06, 0x01, 0xd4, 0xed, 0x06, 0x01, 0xd5, 0xee, - 0x06, 0x01, 0xd6, 0xef, 0x06, 0x01, 0xd7, 0xf0, 0x06, 0x01, 0xd8, 0xf1, - 0x06, 0x01, 0xd9, 0xf2, 0x06, 0x41, 0xd3, 0xe3, 0x06, 0x01, 0xd4, 0xe4, - 0x06, 0x01, 0xd5, 0xe5, 0x06, 0x01, 0xd6, 0xe6, 0x06, 0x01, 0xd8, 0xe7, - 0x06, 0x01, 0xd9, 0xe8, 0x06, 0x41, 0xd0, 0xda, 0x06, 0x01, 0xd1, 0xdb, - 0x06, 0x01, 0xd2, 0xdc, 0x06, 0x01, 0xd3, 0xdd, 0x06, 0x01, 0xd4, 0xde, - 0x06, 0x01, 0xd5, 0xdf, 0x06, 0x01, 0xd6, 0xe0, 0x06, 0x01, 0xd7, 0xe1, - 0x06, 0x01, 0xd9, 0xe2, 0x06, 0x41, 0xd0, 0xd3, 0x06, 0x01, 0xd1, 0xd4, - 0x06, 0x01, 0xd2, 0xd5, 0x06, 0x01, 0xd5, 0xd6, 0x06, 0x01, 0xd7, 0xd7, - 0x06, 0x01, 0xd8, 0xd8, 0x06, 0x01, 0xd9, 0xd9, 0x06, 0x41, 0xd0, 0xca, - 0x06, 0x01, 0xd1, 0xcb, 0x06, 0x01, 0xd2, 0xcc, 0x06, 0x01, 0xd4, 0xcd, - 0x06, 0x01, 0xd5, 0xce, 0x06, 0x01, 0xd6, 0xcf, 0x06, 0x01, 0xd7, 0xd0, - 0x06, 0x01, 0xd8, 0xd1, 0x06, 0x01, 0xd9, 0xd2, 0x06, 0x41, 0xd0, 0xc1, - 0x06, 0x01, 0xd1, 0xc2, 0x06, 0x01, 0xd3, 0xc3, 0x06, 0x01, 0xd4, 0xc4, - 0x06, 0x01, 0xd5, 0xc5, 0x06, 0x01, 0xd6, 0xc6, 0x06, 0x01, 0xd7, 0xc7, - 0x06, 0x01, 0xd8, 0xc8, 0x06, 0x01, 0xd9, 0xc9, 0x06, 0x41, 0xd0, 0xbb, - 0x06, 0x01, 0xd1, 0xbc, 0x06, 0x01, 0xd2, 0xbd, 0x06, 0x01, 0xd3, 0xbe, - 0x06, 0x01, 0xd5, 0xbf, 0x06, 0x01, 0xd6, 0xc0, 0x06, 0x41, 0xd1, 0xb3, - 0x06, 0x01, 0xd2, 0xb4, 0x06, 0x01, 0xd3, 0xb5, 0x06, 0x01, 0xd4, 0xb6, - 0x06, 0x01, 0xd5, 0xb7, 0x06, 0x01, 0xd6, 0xb8, 0x06, 0x01, 0xd8, 0xb9, - 0x06, 0x01, 0xd9, 0xba, 0x06, 0x41, 0x90, 0x39, 0x91, 0x01, 0xff, 0x45, - 0x21, 0xdf, 0xaa, 0x06, 0x01, 0x45, 0x49, 0xdf, 0xab, 0x06, 0x01, 0x45, - 0x94, 0xdf, 0xac, 0x06, 0x01, 0x45, 0xc1, 0xdf, 0xad, 0x06, 0x01, 0x45, - 0x07, 0xe0, 0xae, 0x06, 0x01, 0x45, 0x1b, 0xe0, 0xaf, 0x06, 0x01, 0x45, - 0x43, 0xe0, 0xb0, 0x06, 0x01, 0x45, 0x70, 0xe0, 0xb1, 0x06, 0x01, 0x45, - 0x9d, 0xe0, 0xb2, 0x06, 0x41, 0x45, 0x21, 0xdf, 0xa0, 0x06, 0x01, 0x45, - 0x49, 0xdf, 0xa1, 0x06, 0x01, 0x45, 0x94, 0xdf, 0xa2, 0x06, 0x01, 0x45, - 0xc1, 0xdf, 0xa3, 0x06, 0x01, 0x45, 0x07, 0xe0, 0xa4, 0x06, 0x01, 0x45, - 0x1b, 0xe0, 0xa5, 0x06, 0x01, 0x45, 0x43, 0xe0, 0xa6, 0x06, 0x01, 0x45, - 0x70, 0xe0, 0xa7, 0x06, 0x01, 0x45, 0x9d, 0xe0, 0xa8, 0x06, 0x01, 0x45, - 0xde, 0xe0, 0xa9, 0x06, 0x41, 0x90, 0x94, 0x02, 0x91, 0xdf, 0x01, 0x92, - 0xb4, 0x01, 0x93, 0x89, 0x01, 0x94, 0x5f, 0x95, 0x35, 0x96, 0x0b, 0x97, - 0x01, 0xff, 0xd0, 0x9e, 0x06, 0x01, 0xd1, 0x9f, 0x06, 0x41, 0xd0, 0x94, - 0x06, 0x01, 0xd1, 0x95, 0x06, 0x01, 0xd2, 0x96, 0x06, 0x01, 0xd3, 0x97, - 0x06, 0x01, 0xd4, 0x98, 0x06, 0x01, 0xd5, 0x99, 0x06, 0x01, 0xd6, 0x9a, - 0x06, 0x01, 0xd7, 0x9b, 0x06, 0x01, 0xd8, 0x9c, 0x06, 0x01, 0xd9, 0x9d, - 0x06, 0x41, 0xd0, 0x8a, 0x06, 0x01, 0xd1, 0x8b, 0x06, 0x01, 0xd2, 0x8c, - 0x06, 0x01, 0xd3, 0x8d, 0x06, 0x01, 0xd4, 0x8e, 0x06, 0x01, 0xd5, 0x8f, - 0x06, 0x01, 0xd6, 0x90, 0x06, 0x01, 0xd7, 0x91, 0x06, 0x01, 0xd8, 0x92, - 0x06, 0x01, 0xd9, 0x93, 0x06, 0x41, 0xd0, 0x80, 0x06, 0x01, 0xd1, 0x81, - 0x06, 0x01, 0xd2, 0x82, 0x06, 0x01, 0xd3, 0x83, 0x06, 0x01, 0xd4, 0x84, - 0x06, 0x01, 0xd5, 0x85, 0x06, 0x01, 0xd6, 0x86, 0x06, 0x01, 0xd7, 0x87, - 0x06, 0x01, 0xd8, 0x88, 0x06, 0x01, 0xd9, 0x89, 0x06, 0x41, 0xd0, 0x76, - 0x06, 0x01, 0xd1, 0x77, 0x06, 0x01, 0xd2, 0x78, 0x06, 0x01, 0xd3, 0x79, - 0x06, 0x01, 0xd4, 0x7a, 0x06, 0x01, 0xd5, 0x7b, 0x06, 0x01, 0xd6, 0x7c, - 0x06, 0x01, 0xd7, 0x7d, 0x06, 0x01, 0xd8, 0x7e, 0x06, 0x01, 0xd9, 0x7f, - 0x06, 0x41, 0xd0, 0x6c, 0x06, 0x01, 0xd1, 0x6d, 0x06, 0x01, 0xd2, 0x6e, - 0x06, 0x01, 0xd3, 0x6f, 0x06, 0x01, 0xd4, 0x70, 0x06, 0x01, 0xd5, 0x71, - 0x06, 0x01, 0xd6, 0x72, 0x06, 0x01, 0xd7, 0x73, 0x06, 0x01, 0xd8, 0x74, - 0x06, 0x01, 0xd9, 0x75, 0x06, 0x41, 0xd0, 0x60, 0x06, 0x01, 0xd1, 0x61, - 0x06, 0x01, 0xd2, 0x62, 0x06, 0x01, 0x93, 0x18, 0xd4, 0x66, 0x06, 0x01, - 0xd5, 0x67, 0x06, 0x01, 0xd6, 0x68, 0x06, 0x01, 0xd7, 0x69, 0x06, 0x01, - 0xd8, 0x6a, 0x06, 0x01, 0xd9, 0x6b, 0x06, 0x41, 0xe1, 0x63, 0x06, 0x01, - 0xe2, 0x64, 0x06, 0x01, 0xe3, 0x65, 0x06, 0x41, 0xd1, 0x55, 0x06, 0x01, - 0xd2, 0x56, 0x06, 0x01, 0xd3, 0x57, 0x06, 0x01, 0xd4, 0x58, 0x06, 0x01, - 0xd5, 0x59, 0x06, 0x01, 0xd6, 0x5a, 0x06, 0x01, 0xd7, 0x5b, 0x06, 0x01, - 0xd8, 0x5c, 0x06, 0x01, 0x99, 0x01, 0xff, 0xe1, 0x5d, 0x06, 0x01, 0xe2, - 0x5e, 0x06, 0x01, 0xe3, 0x5f, 0x06, 0x41, 0x46, 0xa4, 0xd5, 0x47, 0x06, - 0x01, 0x43, 0x45, 0xf0, 0x4a, 0x06, 0x01, 0x43, 0x5a, 0xf0, 0x4f, 0x06, - 0x41, 0x44, 0x31, 0x20, 0x0a, 0x00, 0x00, 0x0c, 0x8d, 0x8e, 0x13, 0x49, - 0x36, 0x20, 0x28, 0x20, 0x00, 0x4a, 0x13, 0x3b, 0x0b, 0x00, 0xc0, 0x00, - 0x44, 0x15, 0xb6, 0x8a, 0x00, 0x40, 0x56, 0x01, 0x35, 0x14, 0x2a, 0x00, - 0x05, 0x51, 0x00, 0x01, 0xff, 0x5c, 0x8a, 0x18, 0x12, 0x2a, 0x00, 0x5d, - 0x1e, 0x16, 0x13, 0x2a, 0x40, 0x03, 0xdf, 0xc6, 0x06, 0x53, 0x65, 0x49, - 0xcf, 0x32, 0x40, 0x06, 0xc4, 0x06, 0xec, 0x02, 0x50, 0xad, 0x00, 0x44, - 0x19, 0x00, 0x07, 0xc1, 0x05, 0xab, 0x01, 0x4d, 0xd6, 0x33, 0x45, 0x19, - 0x00, 0xb3, 0x36, 0x05, 0x6c, 0x38, 0x01, 0xff, 0x06, 0x2e, 0x03, 0x06, - 0x4f, 0x98, 0x68, 0x00, 0x19, 0x40, 0xe1, 0x20, 0x19, 0x80, 0x1a, 0xe5, - 0x27, 0x19, 0x80, 0x11, 0xe9, 0x21, 0x19, 0x00, 0xef, 0x28, 0x19, 0x80, - 0x04, 0xf5, 0x22, 0x19, 0x40, 0xef, 0x25, 0x19, 0x40, 0xe5, 0x23, 0x19, - 0x40, 0xe9, 0x24, 0x19, 0x00, 0xf5, 0x26, 0x19, 0x40, 0x04, 0x30, 0x03, - 0x51, 0x0c, 0x4c, 0x08, 0x17, 0x10, 0x5a, 0x66, 0x01, 0xff, 0x42, 0x71, - 0x00, 0x2a, 0x19, 0x00, 0x42, 0xa9, 0x01, 0x2b, 0x19, 0x00, 0x42, 0x34, - 0x22, 0x29, 0x19, 0x40, 0x48, 0xd0, 0x15, 0x32, 0x19, 0x00, 0x42, 0x1b, - 0x02, 0x30, 0x19, 0x00, 0x42, 0x74, 0x00, 0x38, 0x19, 0x00, 0x42, 0x6c, - 0x00, 0x36, 0x19, 0x00, 0xae, 0x12, 0x42, 0x6c, 0x09, 0x35, 0x19, 0x00, - 0x42, 0x71, 0x00, 0x37, 0x19, 0x00, 0x42, 0x12, 0x00, 0x33, 0x19, 0x40, - 0xe1, 0x34, 0x19, 0x00, 0x42, 0x24, 0x02, 0x31, 0x19, 0x40, 0x49, 0x98, - 0xb8, 0x3a, 0x19, 0x00, 0x43, 0x49, 0x1c, 0x40, 0x19, 0x00, 0x49, 0xb8, - 0xb9, 0x39, 0x19, 0x00, 0x44, 0x32, 0xef, 0x3b, 0x19, 0x40, 0xa2, 0xa9, - 0x01, 0xa3, 0x9c, 0x01, 0xa4, 0x8f, 0x01, 0xa7, 0x7d, 0x42, 0x22, 0x00, - 0x1c, 0x19, 0x00, 0xaa, 0x6b, 0xab, 0x5f, 0x42, 0x74, 0x00, 0x17, 0x19, - 0x00, 0x42, 0x6c, 0x00, 0x14, 0x19, 0x00, 0xae, 0x47, 0xb0, 0x3b, 0x42, - 0x71, 0x00, 0x16, 0x19, 0x00, 0xb3, 0x23, 0xb4, 0x11, 0x42, 0xa9, 0x01, - 0x18, 0x19, 0x00, 0x42, 0x34, 0x22, 0x15, 0x19, 0xc0, 0x00, 0xee, 0x0a, - 0x19, 0x40, 0xe1, 0x0b, 0x19, 0x00, 0x42, 0x22, 0x00, 0x0c, 0x19, 0x00, - 0x42, 0x71, 0x00, 0x1e, 0x19, 0x40, 0xe1, 0x1b, 0x19, 0x00, 0x42, 0x22, - 0x00, 0x19, 0x19, 0x00, 0x42, 0x15, 0x06, 0x1a, 0x19, 0x40, 0xe1, 0x10, - 0x19, 0x00, 0x42, 0x22, 0x00, 0x11, 0x19, 0x40, 0xe1, 0x0f, 0x19, 0x00, - 0x42, 0x24, 0x02, 0x05, 0x19, 0x40, 0xe1, 0x01, 0x19, 0x00, 0x42, 0x22, - 0x00, 0x02, 0x19, 0x40, 0xe1, 0x08, 0x19, 0x00, 0x42, 0x22, 0x00, 0x09, - 0x19, 0x40, 0xe1, 0x03, 0x19, 0x00, 0x42, 0x22, 0x00, 0x04, 0x19, 0x00, - 0x43, 0xe8, 0x34, 0x1d, 0x19, 0x40, 0xe1, 0x0d, 0x19, 0x00, 0x42, 0x22, - 0x00, 0x0e, 0x19, 0x40, 0xe1, 0x06, 0x19, 0x00, 0x42, 0x22, 0x00, 0x07, - 0x19, 0x40, 0xe1, 0x12, 0x19, 0x00, 0x42, 0x22, 0x00, 0x13, 0x19, 0x40, - 0x45, 0xc3, 0x0a, 0x4e, 0x19, 0x00, 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0x4f, - 0x19, 0x00, 0x43, 0xbf, 0x0a, 0x47, 0x19, 0x00, 0xb3, 0x14, 0xb4, 0x06, - 0x44, 0xa1, 0x1d, 0x46, 0x19, 0x40, 0x44, 0x25, 0x01, 0x49, 0x19, 0x00, - 0x42, 0x15, 0x02, 0x48, 0x19, 0x40, 0x44, 0x27, 0x1d, 0x4d, 0x19, 0x00, - 0x42, 0x60, 0x25, 0x4c, 0x19, 0x40, 0x43, 0xa7, 0x05, 0x4b, 0x19, 0x00, - 0x43, 0xcb, 0x06, 0x4a, 0x19, 0x40, 0x56, 0x77, 0x28, 0x72, 0xf6, 0x01, - 0x02, 0xcb, 0x00, 0x01, 0xff, 0x80, 0x14, 0x44, 0x07, 0x07, 0x07, 0x26, - 0xc0, 0x00, 0x45, 0xc7, 0xde, 0xf2, 0xf5, 0xc1, 0x00, 0x47, 0x14, 0x7b, - 0xf1, 0xf5, 0x41, 0x4a, 0x0d, 0xa6, 0x75, 0xfa, 0x01, 0x4a, 0x67, 0xa6, - 0xf8, 0xf5, 0x01, 0x55, 0xf7, 0x39, 0xbb, 0xf7, 0x01, 0xa6, 0x48, 0x4b, - 0x9f, 0x5f, 0xa2, 0xf7, 0x01, 0x64, 0x24, 0x09, 0x72, 0x27, 0x00, 0xb2, - 0x2e, 0xb3, 0x1a, 0xb4, 0x0c, 0x4c, 0x32, 0x00, 0x58, 0x27, 0x00, 0x4c, - 0x50, 0x1f, 0x8e, 0xf7, 0x41, 0x57, 0xe5, 0x2d, 0xc0, 0xf7, 0x01, 0x58, - 0x45, 0x2b, 0xd2, 0xf7, 0x41, 0x46, 0xa7, 0x18, 0xa9, 0xf7, 0x01, 0x44, - 0x21, 0x04, 0x91, 0x25, 0x00, 0x52, 0xb6, 0x51, 0xb5, 0xf7, 0x41, 0x43, - 0x24, 0x17, 0x88, 0xf6, 0x01, 0x64, 0x00, 0x09, 0x73, 0x27, 0x40, 0x04, - 0xa7, 0x05, 0x11, 0x12, 0x94, 0x15, 0x01, 0xff, 0x44, 0xa6, 0x15, 0xcc, - 0x2b, 0x00, 0x44, 0xe2, 0x12, 0xc4, 0xf7, 0x41, 0x52, 0x4b, 0x2b, 0xc9, - 0xf7, 0x01, 0x4f, 0x4e, 0x1c, 0xaf, 0xf7, 0x41, 0x02, 0xf5, 0x13, 0xba, - 0x15, 0x44, 0x52, 0xec, 0xd2, 0xf4, 0x01, 0x02, 0xc5, 0x00, 0xc6, 0x05, - 0xe7, 0xb5, 0xf9, 0x01, 0x43, 0x98, 0x07, 0x4b, 0xf3, 0x01, 0xef, 0x4c, - 0x26, 0x80, 0xb0, 0x05, 0x05, 0xa1, 0xe6, 0xd4, 0x01, 0x08, 0xee, 0x00, - 0x06, 0x4a, 0xe9, 0xb0, 0x9a, 0xf3, 0x41, 0xa1, 0x87, 0x01, 0x0b, 0xfb, - 0x38, 0x77, 0x4f, 0x2d, 0x6a, 0xa6, 0x2a, 0x80, 0x6a, 0x58, 0xe5, 0x27, - 0xda, 0x22, 0x00, 0xaf, 0x1d, 0x44, 0x2f, 0x03, 0x3c, 0x00, 0x00, 0x05, - 0x51, 0x00, 0x01, 0xff, 0x4d, 0xea, 0x7f, 0x79, 0x2a, 0x00, 0x43, 0xd4, - 0x09, 0xd6, 0x22, 0x00, 0x53, 0x07, 0x4b, 0x7b, 0x2a, 0x40, 0x02, 0x18, - 0x00, 0x06, 0x4c, 0xd5, 0x94, 0x66, 0x22, 0x40, 0x4b, 0x0e, 0x1e, 0x85, - 0x2a, 0x00, 0x03, 0x7b, 0x00, 0x25, 0x4c, 0x87, 0x00, 0x76, 0x22, 0x00, - 0x50, 0xba, 0x65, 0x7d, 0x2a, 0xc0, 0x00, 0x0a, 0xa5, 0x3a, 0x01, 0xff, - 0x45, 0x5c, 0x00, 0x81, 0x2a, 0x80, 0x06, 0x46, 0x58, 0x13, 0x7f, 0x2a, - 0x40, 0x46, 0xc7, 0x00, 0x83, 0x2a, 0x40, 0x45, 0xac, 0x0c, 0x64, 0x22, - 0x00, 0x4a, 0x06, 0x39, 0x72, 0x22, 0x40, 0x54, 0x93, 0x00, 0xa8, 0x2a, - 0x40, 0x45, 0xac, 0x0c, 0x68, 0x22, 0x00, 0x4a, 0x06, 0x39, 0xe6, 0x22, - 0x40, 0x05, 0x5d, 0x00, 0x11, 0x03, 0x1b, 0x00, 0x01, 0xff, 0x4f, 0x37, - 0x6f, 0x89, 0x2a, 0x00, 0x58, 0x6d, 0x2a, 0x87, 0x2a, 0x40, 0x64, 0xb8, - 0x08, 0x8b, 0x2a, 0x00, 0x64, 0xdc, 0x08, 0x91, 0x2a, 0x00, 0x4f, 0x37, - 0x07, 0x76, 0x29, 0x00, 0xb3, 0x01, 0xff, 0x07, 0x23, 0xcf, 0x06, 0x73, - 0x74, 0x00, 0x93, 0x2a, 0x40, 0x52, 0x81, 0x00, 0x8f, 0x2a, 0x00, 0x48, - 0x52, 0x28, 0x8d, 0x2a, 0x40, 0x0f, 0x6d, 0x32, 0xa8, 0x03, 0x06, 0xc4, - 0x06, 0xe1, 0x02, 0x07, 0xc1, 0x05, 0x6e, 0x0c, 0x01, 0x16, 0x48, 0xb3, - 0x25, 0x0b, 0xd1, 0x75, 0x01, 0xff, 0x42, 0x31, 0x12, 0x26, 0x1c, 0x00, - 0xe5, 0x2c, 0x1c, 0x00, 0xe9, 0x27, 0x1c, 0x00, 0xef, 0x28, 0x1c, 0x80, - 0x09, 0xf5, 0x2a, 0x1c, 0xc0, 0x00, 0xf5, 0x2b, 0x1c, 0x40, 0xef, 0x29, - 0x1c, 0x40, 0x04, 0x30, 0x03, 0x11, 0x10, 0x5a, 0x66, 0x01, 0xff, 0x42, - 0x71, 0x00, 0x25, 0x1c, 0x00, 0x42, 0x34, 0x22, 0x24, 0x1c, 0x40, 0x45, - 0x5a, 0x3e, 0x37, 0x1c, 0x00, 0x43, 0x24, 0x03, 0x36, 0x1c, 0x40, 0x46, - 0x69, 0xca, 0x3d, 0x1c, 0x00, 0x52, 0xb2, 0x52, 0x3c, 0x1c, 0x00, 0xb4, - 0x01, 0xff, 0x45, 0xbf, 0x52, 0x3b, 0x1c, 0x00, 0x45, 0xc8, 0xe7, 0x3f, - 0x1c, 0xc0, 0x00, 0x47, 0x68, 0xca, 0x3e, 0x1c, 0x40, 0xe1, 0x23, 0x1c, - 0x00, 0xa2, 0xde, 0x01, 0xa3, 0xd1, 0x01, 0xa4, 0xbe, 0x01, 0xa6, 0xb1, - 0x01, 0xa7, 0xa4, 0x01, 0xa8, 0x97, 0x01, 0x42, 0xbd, 0x26, 0x08, 0x1c, - 0x00, 0xab, 0x7f, 0x42, 0x74, 0x00, 0x1c, 0x1c, 0x00, 0xad, 0x6d, 0xae, - 0x5b, 0xb0, 0x49, 0x42, 0x71, 0x00, 0x1b, 0x1c, 0x00, 0xb3, 0x37, 0xb4, - 0x12, 0x42, 0xa6, 0x0a, 0x1f, 0x1c, 0x00, 0x42, 0xa9, 0x01, 0x22, 0x1c, - 0x00, 0x42, 0x34, 0x22, 0x1a, 0x1c, 0x40, 0xe1, 0x0a, 0x1c, 0x00, 0x42, - 0x22, 0x00, 0x0b, 0x1c, 0x00, 0xb3, 0x0d, 0xb4, 0x01, 0xff, 0xe1, 0x4d, - 0x1c, 0x00, 0x42, 0x22, 0x00, 0x4e, 0x1c, 0x40, 0xe1, 0x17, 0x1c, 0x00, - 0x42, 0x22, 0x00, 0x18, 0x1c, 0x40, 0xe1, 0x20, 0x1c, 0x00, 0x42, 0x22, - 0x00, 0x21, 0x1c, 0x40, 0xe1, 0x0e, 0x1c, 0x00, 0x42, 0x22, 0x00, 0x10, - 0x1c, 0x00, 0x42, 0x74, 0x00, 0x0f, 0x1c, 0x40, 0xe1, 0x0d, 0x1c, 0x00, - 0x42, 0x24, 0x02, 0x05, 0x1c, 0x00, 0x42, 0x34, 0x22, 0x09, 0x1c, 0x40, - 0xe1, 0x15, 0x1c, 0x00, 0x42, 0x74, 0x00, 0x16, 0x1c, 0x40, 0xe1, 0x00, - 0x1c, 0x00, 0x42, 0x22, 0x00, 0x02, 0x1c, 0x00, 0x42, 0x74, 0x00, 0x01, - 0x1c, 0x40, 0xe1, 0x1d, 0x1c, 0x00, 0x42, 0x74, 0x00, 0x1e, 0x1c, 0x40, - 0xe1, 0x03, 0x1c, 0x00, 0x42, 0x74, 0x00, 0x04, 0x1c, 0x40, 0xe1, 0x11, - 0x1c, 0x00, 0x42, 0x74, 0x00, 0x12, 0x1c, 0x40, 0xe1, 0x0c, 0x1c, 0x00, - 0x42, 0xa1, 0x10, 0x4f, 0x1c, 0x00, 0x42, 0x59, 0x00, 0x19, 0x1c, 0x40, - 0xe1, 0x06, 0x1c, 0x00, 0x42, 0x22, 0x00, 0x07, 0x1c, 0x40, 0xe1, 0x13, - 0x1c, 0x00, 0x42, 0x74, 0x00, 0x14, 0x1c, 0x40, 0x45, 0xc3, 0x0a, 0x48, - 0x1c, 0x00, 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0x49, 0x1c, 0x00, 0x43, 0xbf, - 0x0a, 0x41, 0x1c, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xa1, 0x1d, 0x40, - 0x1c, 0x40, 0x44, 0x25, 0x01, 0x43, 0x1c, 0x00, 0x42, 0x15, 0x02, 0x42, - 0x1c, 0x40, 0x44, 0x27, 0x1d, 0x47, 0x1c, 0x00, 0x42, 0x60, 0x25, 0x46, - 0x1c, 0x40, 0x43, 0xa7, 0x05, 0x45, 0x1c, 0x00, 0x43, 0xcb, 0x06, 0x44, - 0x1c, 0x40, 0xeb, 0x2d, 0x1c, 0x80, 0x1f, 0xec, 0x2f, 0x1c, 0x00, 0xed, - 0x2e, 0x1c, 0x00, 0xee, 0x30, 0x1c, 0x80, 0x0c, 0xf0, 0x31, 0x1c, 0x00, - 0xf2, 0x32, 0x1c, 0x00, 0xf4, 0x33, 0x1c, 0x40, 0x46, 0x68, 0xde, 0x34, - 0x1c, 0x40, 0x43, 0x1c, 0x01, 0x35, 0x1c, 0x40, 0x44, 0xb2, 0xee, 0x06, - 0xf4, 0x41, 0x80, 0xaf, 0x08, 0x8d, 0xcc, 0x06, 0x06, 0xa9, 0x01, 0x01, - 0xff, 0x45, 0xce, 0x00, 0x90, 0x21, 0x80, 0xb1, 0x04, 0xa2, 0x92, 0x04, - 0x50, 0x0a, 0x60, 0x3c, 0xf8, 0x01, 0xa4, 0xd2, 0x03, 0xa6, 0xc3, 0x03, - 0xa8, 0xc2, 0x02, 0x57, 0x86, 0x2e, 0xa4, 0xf8, 0x01, 0x51, 0x8e, 0x5b, - 0xfd, 0x21, 0x00, 0xb0, 0xa7, 0x02, 0x4f, 0x72, 0x70, 0x45, 0x2b, 0x00, - 0xb2, 0x92, 0x02, 0xb3, 0xf8, 0x01, 0xb4, 0x16, 0xb7, 0x01, 0xff, 0x49, - 0x21, 0xb4, 0x9c, 0x21, 0x00, 0x4a, 0xfb, 0x0f, 0xe6, 0x21, 0xc0, 0x00, - 0x5a, 0x24, 0x1e, 0x94, 0xf8, 0x41, 0x55, 0x82, 0x3c, 0xa2, 0xf8, 0x01, - 0x02, 0x0d, 0x00, 0x51, 0x02, 0x15, 0x02, 0x01, 0xff, 0x4d, 0x16, 0x7e, - 0x9e, 0x21, 0x00, 0x08, 0x09, 0x02, 0x01, 0xff, 0x06, 0xce, 0x00, 0x06, - 0x51, 0x26, 0x5d, 0x37, 0x2b, 0x40, 0x48, 0xfd, 0xb1, 0x36, 0x2b, 0x00, - 0x05, 0x51, 0x00, 0x01, 0xff, 0x56, 0xc5, 0x32, 0x35, 0x2b, 0x00, 0xb4, - 0x06, 0x4f, 0xcc, 0x32, 0x34, 0x2b, 0x40, 0x43, 0x24, 0x17, 0x3b, 0x2b, - 0x80, 0x06, 0x52, 0x04, 0x06, 0xec, 0x2b, 0x40, 0x06, 0x50, 0x00, 0x01, - 0xff, 0x56, 0xc5, 0x32, 0x3d, 0x2b, 0x00, 0x4f, 0xcc, 0x32, 0x3c, 0x2b, - 0x40, 0x05, 0x04, 0x02, 0x11, 0x04, 0xcb, 0x1c, 0x01, 0xff, 0x45, 0xce, - 0x00, 0xda, 0x21, 0x00, 0x4a, 0x2d, 0x5d, 0x0e, 0x29, 0x40, 0x4a, 0xe0, - 0x01, 0x90, 0xf8, 0x01, 0x08, 0x09, 0x02, 0x01, 0xff, 0x45, 0xce, 0x00, - 0x60, 0x2b, 0x80, 0x0c, 0x4c, 0x05, 0x8c, 0x6a, 0x2b, 0x00, 0x4d, 0xa7, - 0x85, 0x84, 0x2b, 0x40, 0x80, 0x01, 0xff, 0x65, 0x26, 0x08, 0x80, 0x2b, - 0x00, 0x46, 0x82, 0x14, 0x70, 0x2b, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, - 0x4a, 0x17, 0xa6, 0x28, 0xf8, 0x01, 0x07, 0x3b, 0x01, 0x28, 0x4b, 0xef, - 0x66, 0x2c, 0xf8, 0x01, 0x09, 0x4c, 0xb9, 0x12, 0x4c, 0x3d, 0x90, 0x24, - 0xf8, 0x01, 0x4c, 0xa9, 0x90, 0x20, 0xf8, 0x01, 0x50, 0xea, 0x66, 0x30, - 0xf8, 0x41, 0x49, 0xa5, 0x01, 0xa6, 0x2b, 0x00, 0x47, 0x50, 0x02, 0xa4, - 0x2b, 0x40, 0x51, 0x1c, 0x05, 0x7a, 0x2b, 0x00, 0x4f, 0xcc, 0x32, 0x7a, - 0x2b, 0x40, 0x4f, 0x6b, 0x65, 0x50, 0xf8, 0x01, 0x02, 0x7c, 0x00, 0x01, - 0xff, 0x4a, 0x2b, 0x92, 0x38, 0xf8, 0x01, 0x4b, 0x1f, 0x7b, 0xdc, 0x21, - 0x40, 0x57, 0x2a, 0x2e, 0xa6, 0xf8, 0x01, 0x45, 0x4d, 0xac, 0x6c, 0xf6, - 0x41, 0x4c, 0xa8, 0x85, 0xc7, 0x21, 0x00, 0x4b, 0x48, 0xa2, 0xf7, 0xfa, - 0x41, 0xa1, 0x11, 0x05, 0x02, 0x15, 0x01, 0xff, 0x45, 0xce, 0x00, 0x44, - 0xf8, 0x01, 0x50, 0x0a, 0x60, 0x40, 0xf8, 0x41, 0x42, 0x1b, 0x00, 0xf2, - 0xfa, 0x01, 0x06, 0x67, 0x05, 0x01, 0xff, 0x57, 0x27, 0x2f, 0xcb, 0x21, - 0x00, 0x0a, 0x6d, 0x05, 0x01, 0xff, 0x04, 0xa5, 0x01, 0x31, 0x02, 0x50, - 0x02, 0x01, 0xff, 0x80, 0x06, 0x45, 0xa9, 0x01, 0xbc, 0x21, 0x40, 0x06, - 0x5c, 0x00, 0x0c, 0x48, 0xfd, 0xb1, 0x5a, 0x29, 0x00, 0x46, 0x82, 0x14, - 0x52, 0x29, 0x40, 0xac, 0x06, 0x5f, 0x3d, 0x11, 0x66, 0x29, 0x40, 0x5f, - 0x1d, 0x06, 0x62, 0x29, 0x00, 0x48, 0x9e, 0x69, 0x6a, 0x29, 0x40, 0x80, - 0x06, 0x45, 0xa9, 0x01, 0xbd, 0x21, 0x40, 0x67, 0x54, 0x05, 0x67, 0x29, - 0x00, 0x4f, 0x97, 0x69, 0x6b, 0x29, 0x00, 0x48, 0xfd, 0xb1, 0x5e, 0x29, - 0x00, 0x46, 0x82, 0x14, 0x56, 0x29, 0x40, 0x50, 0x92, 0x58, 0x34, 0xf8, - 0x01, 0x60, 0xe5, 0x0f, 0xaa, 0xf8, 0x41, 0x4b, 0x06, 0x8c, 0xe0, 0x21, - 0x00, 0x06, 0x3c, 0x01, 0x01, 0xff, 0x45, 0xce, 0x00, 0xd0, 0x21, 0x80, - 0x06, 0x4a, 0x2d, 0x5d, 0x0c, 0x29, 0x40, 0x80, 0x06, 0x45, 0x22, 0x17, - 0x1b, 0x29, 0x40, 0x48, 0xfd, 0xb1, 0x06, 0x29, 0x00, 0x05, 0x51, 0x00, - 0x01, 0xff, 0x46, 0x27, 0x05, 0xcd, 0x21, 0x00, 0x4f, 0xcc, 0x32, 0x02, - 0x29, 0x40, 0x5f, 0x64, 0x10, 0xa8, 0xf8, 0x01, 0x05, 0xe2, 0x02, 0x06, - 0x58, 0xf5, 0x29, 0xa0, 0xf8, 0x41, 0x45, 0xce, 0x00, 0x05, 0x2b, 0x00, - 0x53, 0x8a, 0x47, 0x88, 0x2b, 0x40, 0x80, 0x06, 0x45, 0x22, 0x17, 0x19, - 0x29, 0x40, 0xa1, 0xd7, 0x01, 0x05, 0x7f, 0x05, 0xbf, 0x01, 0x55, 0x6c, - 0x14, 0xc6, 0x21, 0x00, 0xb4, 0x8a, 0x01, 0x05, 0x51, 0x00, 0x01, 0xff, - 0x02, 0x3b, 0x01, 0x75, 0x55, 0xd5, 0x01, 0x14, 0xf8, 0x01, 0x44, 0x5d, - 0x0e, 0xa9, 0x21, 0x00, 0xac, 0x5b, 0x59, 0x5b, 0x24, 0x04, 0xf8, 0x01, - 0x4c, 0x21, 0x91, 0x98, 0xf8, 0x01, 0x4a, 0x33, 0xad, 0x46, 0x29, 0x00, - 0xb3, 0x31, 0xb4, 0x06, 0x4f, 0xcc, 0x32, 0xf7, 0x21, 0x40, 0x43, 0x24, - 0x17, 0xa2, 0x21, 0x80, 0x11, 0x03, 0xfb, 0x0b, 0x01, 0xff, 0x49, 0xa5, - 0x01, 0x10, 0x2b, 0x00, 0x47, 0x50, 0x02, 0x11, 0x2b, 0x40, 0x06, 0x50, - 0x00, 0x01, 0xff, 0x56, 0xc5, 0x32, 0x3a, 0x2b, 0x00, 0x4f, 0xcc, 0x32, - 0x39, 0x2b, 0x40, 0x05, 0x0d, 0x07, 0x06, 0x45, 0x28, 0x05, 0x9a, 0x21, - 0x40, 0x55, 0xd5, 0x01, 0x10, 0xf8, 0x01, 0x52, 0x03, 0x06, 0x00, 0xf8, - 0x41, 0x57, 0xd6, 0x28, 0x08, 0xf8, 0x01, 0x43, 0x81, 0x4a, 0xab, 0x21, - 0x40, 0x49, 0x8d, 0xbd, 0x38, 0x2b, 0x00, 0x54, 0xc7, 0x32, 0xfa, 0x21, - 0x40, 0x07, 0x8d, 0x2a, 0x18, 0x03, 0x83, 0x14, 0x01, 0xff, 0x42, 0x17, - 0x00, 0xe4, 0x21, 0x80, 0x06, 0x4c, 0x10, 0x56, 0x1d, 0x29, 0x40, 0x5d, - 0x6b, 0x14, 0xb9, 0x21, 0x40, 0x49, 0xec, 0x00, 0x77, 0x29, 0x00, 0x46, - 0x4a, 0x12, 0x7a, 0x29, 0x00, 0xf8, 0x3e, 0x2b, 0x40, 0x43, 0x16, 0x00, - 0xa4, 0x21, 0x80, 0x06, 0x4f, 0xe5, 0x0b, 0xc0, 0xf8, 0x41, 0x51, 0x0b, - 0x56, 0x1f, 0x29, 0x40, 0x05, 0x5d, 0x00, 0x06, 0x63, 0xac, 0x0a, 0xb5, - 0xfb, 0x41, 0x4f, 0x10, 0x69, 0x4a, 0x2b, 0x00, 0x08, 0xcc, 0x70, 0x0c, - 0x56, 0x61, 0x36, 0x43, 0x29, 0x00, 0x4e, 0x93, 0x3d, 0x73, 0x29, 0x40, - 0x4f, 0x10, 0x69, 0x42, 0x2b, 0x00, 0x4e, 0x93, 0x3d, 0x4b, 0x2b, 0x40, - 0x07, 0xa0, 0x2d, 0x9c, 0x01, 0x5b, 0xfe, 0x1a, 0xe6, 0x26, 0x00, 0x09, - 0x9c, 0x01, 0x2b, 0xb3, 0x1d, 0x09, 0x44, 0x43, 0x01, 0xff, 0x49, 0x07, - 0xb6, 0x2a, 0x20, 0x00, 0x47, 0x34, 0x03, 0x66, 0x20, 0x00, 0x44, 0xb9, - 0x00, 0x0e, 0x20, 0x00, 0x48, 0x0a, 0xc7, 0x2d, 0x20, 0x40, 0x5c, 0x72, - 0x17, 0xaa, 0x27, 0x00, 0x5b, 0x34, 0x1b, 0x39, 0x29, 0x40, 0xa1, 0x53, - 0x54, 0x6f, 0x40, 0xfc, 0x29, 0x00, 0xa4, 0x3f, 0x4b, 0x8f, 0x99, 0x78, - 0xcc, 0x01, 0x50, 0x7a, 0x63, 0x0d, 0xf5, 0x01, 0xb2, 0x0c, 0x4c, 0xa9, - 0x93, 0x02, 0xcc, 0x01, 0x44, 0xd7, 0xc4, 0x9e, 0xcc, 0x41, 0x49, 0x40, - 0xb3, 0x97, 0xcc, 0x01, 0x44, 0x75, 0xaa, 0x65, 0xcc, 0x01, 0xaf, 0x01, - 0xff, 0x05, 0x17, 0x09, 0x06, 0x50, 0x3a, 0x63, 0xa2, 0xcc, 0x41, 0x47, - 0xc9, 0xcc, 0xa0, 0xcc, 0x01, 0x44, 0x6f, 0x20, 0x56, 0xcc, 0x41, 0x44, - 0x5e, 0xed, 0x0e, 0xcc, 0x01, 0x5a, 0x30, 0x21, 0xab, 0x00, 0x40, 0x47, - 0x42, 0x33, 0xf9, 0xcd, 0x01, 0x4c, 0xf0, 0x0e, 0x29, 0x23, 0x00, 0x4a, - 0xb3, 0xaf, 0x60, 0xcc, 0x41, 0x56, 0x15, 0x32, 0x8e, 0x05, 0x00, 0x48, - 0x6a, 0xc1, 0x48, 0xcc, 0x01, 0x03, 0xbf, 0x59, 0x20, 0xb3, 0x01, 0xff, - 0x0f, 0xa8, 0x2d, 0x0d, 0x4a, 0xdf, 0xb0, 0xd6, 0x0f, 0xc0, 0x00, 0x4a, - 0xbb, 0x57, 0xd8, 0x0f, 0x40, 0x4c, 0xbd, 0x8b, 0x74, 0xcc, 0x01, 0x4a, - 0x9b, 0x28, 0x70, 0xcc, 0x41, 0xe8, 0x92, 0xcc, 0x81, 0x04, 0xf4, 0x1b, - 0xf9, 0x41, 0x50, 0x95, 0x28, 0x94, 0xcc, 0x41, 0xa1, 0xbd, 0x06, 0xa2, - 0x84, 0x06, 0xa3, 0xd3, 0x05, 0x02, 0x3b, 0x01, 0xab, 0x05, 0xa6, 0x94, - 0x05, 0x02, 0x22, 0x00, 0x86, 0x04, 0x15, 0x9b, 0x3b, 0xf5, 0x03, 0xac, - 0xe6, 0x03, 0x48, 0xf0, 0x75, 0xdc, 0x27, 0x00, 0x60, 0x85, 0x0f, 0xc9, - 0x22, 0x00, 0xaf, 0xbb, 0x03, 0x4b, 0x50, 0x21, 0x28, 0x00, 0x80, 0x9e, - 0x03, 0xb2, 0xaa, 0x02, 0xb3, 0xb0, 0x01, 0xb4, 0x49, 0x0a, 0x32, 0x00, - 0x39, 0xb7, 0x01, 0xff, 0x05, 0xae, 0x02, 0x0c, 0x4b, 0x06, 0x95, 0xd8, - 0x29, 0x00, 0x4b, 0x01, 0xa0, 0x8e, 0xf5, 0x41, 0xa3, 0x18, 0x52, 0xcb, - 0x26, 0x16, 0x30, 0x00, 0x4b, 0x50, 0x21, 0x85, 0x29, 0x00, 0x4e, 0x27, - 0x26, 0x1a, 0x30, 0x00, 0x56, 0x05, 0x09, 0x18, 0x30, 0x40, 0x4d, 0xb9, - 0x67, 0x0e, 0x30, 0x00, 0x4c, 0x24, 0x0b, 0x83, 0x29, 0x40, 0x4d, 0x1a, - 0x7f, 0x20, 0x2e, 0x00, 0x47, 0x92, 0xd1, 0xb8, 0x23, 0x40, 0x43, 0xe3, - 0x02, 0xa3, 0x22, 0x00, 0xa8, 0x25, 0x55, 0x06, 0x09, 0x14, 0x30, 0x00, - 0xb2, 0x06, 0x4f, 0x60, 0x73, 0xce, 0xfb, 0x41, 0x53, 0xdf, 0x46, 0x09, - 0x2e, 0x00, 0x04, 0x1b, 0x01, 0x01, 0xff, 0x56, 0x51, 0x34, 0xcf, 0x29, - 0x00, 0x56, 0x98, 0x1c, 0x6c, 0xfb, 0x41, 0x04, 0x70, 0x87, 0x28, 0x4c, - 0xd5, 0x91, 0xec, 0xf5, 0x01, 0x04, 0x26, 0x01, 0x01, 0xff, 0x4d, 0xb8, - 0x4b, 0x8d, 0x25, 0x00, 0x09, 0x2a, 0x01, 0x01, 0xff, 0x45, 0x33, 0x01, - 0x8a, 0x25, 0x00, 0x57, 0x9d, 0x2e, 0xa2, 0xce, 0x01, 0x57, 0xae, 0x30, - 0xa9, 0xce, 0x41, 0x48, 0x6a, 0xc4, 0x0b, 0xcc, 0x01, 0x5a, 0x00, 0x22, - 0xc1, 0xfb, 0x41, 0x55, 0xff, 0x37, 0xc5, 0x27, 0x00, 0xa5, 0x63, 0xa9, - 0x55, 0x4c, 0x0f, 0x7b, 0xe8, 0xf5, 0x01, 0x4d, 0x28, 0x26, 0x5b, 0x00, - 0x80, 0x06, 0x53, 0x0a, 0x26, 0x02, 0x2e, 0x40, 0x80, 0x01, 0xff, 0x49, - 0x56, 0x57, 0xa2, 0x23, 0x00, 0x4c, 0xb9, 0x8f, 0xa3, 0x23, 0x00, 0x4c, - 0x99, 0x94, 0xa1, 0x23, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x4d, 0xa0, - 0x80, 0x57, 0x2e, 0x00, 0x45, 0x22, 0x7f, 0x45, 0x20, 0x00, 0x46, 0x27, - 0x05, 0x55, 0x2e, 0x00, 0x08, 0xda, 0xc8, 0x06, 0x48, 0x78, 0x58, 0x8b, - 0x29, 0x40, 0x4d, 0xb6, 0x7f, 0x8f, 0x29, 0x00, 0x4a, 0xbd, 0xaf, 0x8d, - 0x29, 0x40, 0x50, 0x5a, 0x60, 0x26, 0x2e, 0x00, 0x53, 0x48, 0x0b, 0x18, - 0x20, 0x40, 0x50, 0x95, 0x0f, 0xcb, 0x22, 0x00, 0x51, 0xb4, 0x4b, 0x89, - 0x25, 0x40, 0x56, 0x9b, 0x2f, 0x0c, 0x2e, 0x00, 0x05, 0xc9, 0x00, 0x01, - 0xff, 0x45, 0xce, 0x00, 0x94, 0x21, 0x80, 0x3f, 0x4b, 0x95, 0x97, 0x0c, - 0x2b, 0x00, 0x4c, 0x71, 0x8c, 0xd4, 0x21, 0x80, 0x21, 0x51, 0x8e, 0x5b, - 0xff, 0x21, 0x00, 0x50, 0x6a, 0x65, 0x58, 0xf8, 0x01, 0x55, 0x01, 0x02, - 0x64, 0x2b, 0x00, 0xb7, 0x01, 0xff, 0x49, 0x21, 0xb4, 0xad, 0x21, 0x00, - 0x4a, 0xfb, 0x0f, 0x04, 0x2b, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x46, - 0x27, 0x05, 0xce, 0x21, 0x00, 0x4f, 0xcc, 0x32, 0x04, 0x29, 0x40, 0x80, - 0x01, 0xff, 0x54, 0xe3, 0x44, 0x48, 0x29, 0x00, 0x05, 0x51, 0x00, 0x01, - 0xff, 0x56, 0xc5, 0x32, 0xfc, 0x21, 0x00, 0x46, 0x27, 0x05, 0xae, 0x21, - 0x00, 0x4f, 0xcc, 0x32, 0xf9, 0x21, 0x40, 0x80, 0x01, 0xff, 0x49, 0x56, - 0x57, 0x9c, 0x23, 0x00, 0x4a, 0x0d, 0xab, 0x9d, 0x23, 0x00, 0x4a, 0x8f, - 0xb0, 0x9b, 0x23, 0x40, 0x03, 0xc4, 0x07, 0x06, 0x49, 0x02, 0xad, 0xd5, - 0x27, 0x40, 0x4c, 0xc3, 0x0a, 0x8f, 0x25, 0x00, 0x4d, 0xa1, 0x1c, 0x8e, - 0x25, 0x00, 0x4b, 0x35, 0xa1, 0xcf, 0xfb, 0x41, 0x55, 0xc0, 0x34, 0x1c, - 0x2e, 0x00, 0x46, 0xde, 0xdd, 0xc5, 0xf6, 0x41, 0x4c, 0xe1, 0x02, 0xeb, - 0xfb, 0x01, 0x4c, 0xe3, 0x10, 0xe3, 0xfb, 0x41, 0x03, 0x24, 0x00, 0x06, - 0x55, 0x43, 0x3c, 0x7b, 0xf5, 0x41, 0x02, 0x33, 0x01, 0x65, 0x46, 0xe7, - 0x02, 0x07, 0xf9, 0x81, 0x3e, 0xa6, 0x30, 0x65, 0xb7, 0x07, 0x10, 0xce, - 0x01, 0x69, 0x11, 0x04, 0x94, 0xfb, 0x01, 0x57, 0x9d, 0x2e, 0xa3, 0xce, - 0x01, 0x4c, 0x19, 0x04, 0x8c, 0xfb, 0x01, 0x4b, 0x43, 0xa0, 0xb2, 0xfb, - 0x01, 0x56, 0xa3, 0x36, 0x0d, 0xce, 0x01, 0x57, 0xae, 0x30, 0xa8, 0xce, - 0x01, 0x4d, 0xcd, 0x88, 0x0b, 0xce, 0x41, 0x4c, 0xe9, 0x8f, 0xa4, 0xcc, - 0x01, 0x45, 0x40, 0x64, 0xb9, 0xfb, 0x41, 0x06, 0x50, 0x00, 0x01, 0xff, - 0x43, 0xd4, 0x09, 0x06, 0xf9, 0x01, 0x49, 0x9c, 0x45, 0x03, 0xf9, 0x01, - 0xb4, 0x01, 0xff, 0x49, 0xdc, 0x0f, 0x04, 0xf9, 0x01, 0x47, 0xd1, 0x09, - 0x05, 0xf9, 0x41, 0x04, 0xe3, 0x02, 0x06, 0x43, 0x35, 0x01, 0x8c, 0x25, - 0x40, 0x46, 0xe7, 0x02, 0xd6, 0x25, 0x00, 0x44, 0xe2, 0x12, 0xe8, 0x2b, - 0x40, 0xa9, 0x06, 0x44, 0xd1, 0x23, 0x0a, 0x23, 0x40, 0x47, 0xab, 0xb6, - 0x7c, 0x29, 0x00, 0x50, 0x62, 0x50, 0x8b, 0x25, 0x40, 0x59, 0x04, 0x26, - 0x04, 0x2e, 0x00, 0x05, 0x3d, 0x01, 0x01, 0xff, 0x4d, 0xef, 0x0e, 0x0a, - 0x30, 0x00, 0x4b, 0x50, 0x21, 0x28, 0x2e, 0x00, 0x4e, 0xee, 0x04, 0x1c, - 0x20, 0x00, 0x4c, 0x05, 0x95, 0xda, 0x29, 0x40, 0x46, 0x0b, 0xc2, 0x08, - 0x23, 0x00, 0x4b, 0xb2, 0x9c, 0xdc, 0x26, 0x00, 0x4d, 0xb9, 0x67, 0x0c, - 0x30, 0x00, 0x4c, 0x24, 0x0b, 0x7b, 0x00, 0xc0, 0x00, 0x80, 0x01, 0xff, - 0x4a, 0x0d, 0xab, 0xa9, 0x23, 0x00, 0x4c, 0x55, 0x90, 0xa8, 0x23, 0x00, - 0x4a, 0x8f, 0xb0, 0xa7, 0x23, 0x40, 0x04, 0x73, 0x05, 0x11, 0x05, 0xe2, - 0x02, 0x01, 0xff, 0x52, 0xcb, 0x26, 0x10, 0x30, 0x00, 0x56, 0x05, 0x09, - 0x97, 0x29, 0x40, 0x10, 0xda, 0x60, 0x11, 0x0e, 0xa4, 0x7c, 0x01, 0xff, - 0x4c, 0x7d, 0x8c, 0x4a, 0x29, 0x00, 0x4a, 0x71, 0xb0, 0x4e, 0x29, 0x40, - 0x4c, 0x7d, 0x8c, 0x50, 0x29, 0x00, 0x4a, 0x71, 0xb0, 0x4b, 0x29, 0x40, - 0xae, 0x1a, 0xb2, 0x01, 0xff, 0x53, 0xb6, 0x1c, 0x93, 0x29, 0x00, 0x09, - 0xfa, 0x05, 0x01, 0xff, 0x4c, 0x99, 0x8b, 0x32, 0x2b, 0x00, 0x4c, 0xd3, - 0x14, 0x30, 0x2b, 0x40, 0x02, 0x06, 0x00, 0x16, 0xa7, 0x01, 0xff, 0x49, - 0x2b, 0xb6, 0xee, 0xf5, 0x01, 0x4a, 0xf2, 0x0e, 0x08, 0x30, 0xc0, 0x00, - 0x49, 0xa5, 0x3a, 0x91, 0x29, 0x40, 0x06, 0x13, 0x01, 0x31, 0x06, 0xc8, - 0x00, 0x18, 0x06, 0x6d, 0x02, 0x01, 0xff, 0x69, 0xe8, 0x03, 0x6b, 0xfb, - 0x01, 0x50, 0xbf, 0x0a, 0x7d, 0xfb, 0xc1, 0x00, 0x5e, 0xd8, 0x11, 0x8e, - 0xcc, 0x41, 0x50, 0xba, 0x60, 0xda, 0x27, 0x00, 0xb4, 0x01, 0xff, 0x43, - 0xe3, 0x02, 0xdb, 0x27, 0x00, 0x54, 0xbe, 0x3d, 0x9b, 0xfb, 0x41, 0x69, - 0xe8, 0x03, 0x69, 0xfb, 0x01, 0x50, 0xbf, 0x0a, 0x7c, 0xfb, 0x41, 0x53, - 0x21, 0x46, 0x43, 0xf3, 0x01, 0x49, 0xfb, 0xb8, 0xbe, 0xfa, 0x01, 0x47, - 0xda, 0xd4, 0x6c, 0xf9, 0x41, 0xa2, 0xb8, 0x4b, 0x55, 0x10, 0x39, 0x4d, - 0xf9, 0x01, 0xa4, 0xa3, 0x4b, 0x4a, 0x11, 0xac, 0x01, 0x00, 0x0e, 0x02, - 0x7b, 0x02, 0xc1, 0x46, 0xb2, 0xbe, 0x41, 0x4f, 0xad, 0x71, 0x3e, 0x26, - 0x80, 0xa7, 0x41, 0x04, 0xb5, 0x05, 0x01, 0xff, 0xa3, 0xcc, 0x28, 0x12, - 0x18, 0x50, 0xa1, 0x28, 0x07, 0xc1, 0x05, 0x80, 0x25, 0xb3, 0x01, 0xff, - 0x05, 0x0d, 0x07, 0x50, 0x16, 0xe5, 0x36, 0x01, 0xff, 0xe1, 0x90, 0x20, - 0x00, 0xe5, 0x91, 0x20, 0x00, 0xe8, 0x95, 0x20, 0x00, 0xe9, 0x62, 0x1d, - 0x00, 0xea, 0x7c, 0x2c, 0x00, 0xeb, 0x96, 0x20, 0x00, 0xec, 0x97, 0x20, - 0x00, 0xed, 0x98, 0x20, 0x00, 0xee, 0x99, 0x20, 0x00, 0xef, 0x92, 0x20, - 0x00, 0xf0, 0x9a, 0x20, 0x00, 0xf2, 0x63, 0x1d, 0x00, 0xf3, 0x9b, 0x20, - 0x80, 0x10, 0xf4, 0x9c, 0x20, 0x00, 0xf5, 0x64, 0x1d, 0x00, 0xf6, 0x65, - 0x1d, 0x00, 0xf8, 0x93, 0x20, 0x40, 0x44, 0x54, 0x7a, 0x94, 0x20, 0x40, - 0x0f, 0xb9, 0x05, 0x98, 0x24, 0xac, 0x01, 0xff, 0x06, 0xc2, 0x05, 0x34, - 0x08, 0xfb, 0x1e, 0x01, 0xff, 0xa6, 0x18, 0x42, 0xc1, 0xc4, 0x33, 0x01, - 0x00, 0x48, 0x42, 0xc5, 0x05, 0xfb, 0x00, 0x42, 0x17, 0x50, 0x53, 0x01, - 0x00, 0x42, 0x60, 0x01, 0x06, 0xfb, 0x40, 0xe6, 0x00, 0xfb, 0x80, 0x08, - 0xe9, 0x01, 0xfb, 0x00, 0xec, 0x02, 0xfb, 0x40, 0xe9, 0x03, 0xfb, 0x00, - 0xec, 0x04, 0xfb, 0x40, 0xe1, 0x61, 0x00, 0x80, 0xa0, 0x21, 0xe2, 0x62, - 0x00, 0x80, 0x9d, 0x20, 0xe3, 0x63, 0x00, 0x80, 0xff, 0x1e, 0xe4, 0x64, - 0x00, 0x80, 0xfa, 0x1c, 0xe5, 0x65, 0x00, 0x80, 0x94, 0x1a, 0xe6, 0x66, - 0x00, 0x80, 0xdf, 0x19, 0xe7, 0x67, 0x00, 0x80, 0xee, 0x18, 0xe8, 0x68, - 0x00, 0x80, 0xfc, 0x17, 0xe9, 0x69, 0x00, 0x80, 0xb4, 0x16, 0xea, 0x6a, - 0x00, 0x80, 0x8f, 0x16, 0xeb, 0x6b, 0x00, 0x80, 0xb2, 0x15, 0xec, 0x6c, - 0x00, 0x80, 0xa6, 0x13, 0xed, 0x6d, 0x00, 0x80, 0xcf, 0x12, 0xee, 0x6e, - 0x00, 0x80, 0xb1, 0x11, 0xef, 0x6f, 0x00, 0x80, 0xc1, 0x0e, 0xf0, 0x70, - 0x00, 0x80, 0xf7, 0x0d, 0xf1, 0x71, 0x00, 0x80, 0xce, 0x0d, 0xf2, 0x72, - 0x00, 0x80, 0xc9, 0x0b, 0xf3, 0x73, 0x00, 0x80, 0xb7, 0x09, 0xf4, 0x74, - 0x00, 0x80, 0xe2, 0x05, 0xf5, 0x75, 0x00, 0x80, 0xb4, 0x03, 0xf6, 0x76, - 0x00, 0x80, 0xd8, 0x02, 0xf7, 0x77, 0x00, 0x80, 0x96, 0x02, 0xf8, 0x78, - 0x00, 0x80, 0xd7, 0x01, 0xf9, 0x79, 0x00, 0x80, 0x6a, 0xfa, 0x7a, 0x00, - 0xc0, 0x00, 0x06, 0x50, 0x00, 0x01, 0xff, 0x45, 0x29, 0x38, 0x7a, 0x01, - 0x00, 0xa3, 0x46, 0xa4, 0x2d, 0x44, 0x5d, 0x0e, 0x25, 0x02, 0x00, 0x4a, - 0xf4, 0x6b, 0x95, 0x1e, 0x00, 0x4c, 0xa6, 0x22, 0x76, 0x1d, 0x00, 0x4c, - 0xaa, 0x55, 0x8e, 0x1d, 0x00, 0x4e, 0x53, 0x0e, 0x90, 0x02, 0x00, 0xb3, - 0x01, 0xff, 0x45, 0x28, 0x05, 0xb6, 0x01, 0x00, 0x49, 0xb6, 0xbe, 0x40, - 0x02, 0x40, 0x48, 0x95, 0x2a, 0x6c, 0x2c, 0x00, 0x03, 0xb5, 0x0b, 0x01, - 0xff, 0x45, 0x5c, 0x00, 0x7c, 0x01, 0x00, 0x45, 0xf5, 0x06, 0x93, 0x1e, - 0x40, 0x44, 0x4d, 0x6b, 0x7e, 0x01, 0x00, 0x49, 0xa5, 0x04, 0x91, 0x1e, - 0x00, 0x43, 0x24, 0x0b, 0x91, 0x02, 0x40, 0x06, 0x50, 0x00, 0x06, 0x43, - 0xdc, 0x50, 0x1d, 0x02, 0x40, 0x45, 0x29, 0x38, 0xfd, 0x00, 0x00, 0x4a, - 0xa4, 0x04, 0x77, 0x01, 0x00, 0xa4, 0x39, 0x45, 0x8d, 0x22, 0xf3, 0x1e, - 0x00, 0x44, 0x5d, 0x0e, 0xb4, 0x01, 0x80, 0x26, 0x44, 0x92, 0x83, 0xff, - 0x1e, 0x00, 0x46, 0x04, 0x6f, 0x33, 0x02, 0x00, 0x4a, 0x0f, 0xae, 0x99, - 0x1e, 0x00, 0xb3, 0x06, 0x45, 0xad, 0x22, 0xf9, 0x1e, 0x40, 0x4e, 0xc7, - 0x37, 0x5a, 0xab, 0x00, 0x45, 0x28, 0x05, 0x4f, 0x02, 0x40, 0x46, 0x5b, - 0x00, 0xf7, 0x1e, 0x40, 0x48, 0x30, 0x23, 0xff, 0x00, 0x00, 0x03, 0xb5, - 0x0b, 0x01, 0xff, 0x45, 0x5c, 0x00, 0x8f, 0x1e, 0x00, 0x45, 0xf5, 0x06, - 0xf5, 0x1e, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0xa4, 0x26, 0x02, 0x13, - 0x01, 0x06, 0x4c, 0xaa, 0x55, 0x8d, 0x1d, 0x40, 0x4b, 0xdb, 0x9d, 0x57, - 0xab, 0x80, 0x06, 0x4c, 0xc8, 0x4e, 0x56, 0xab, 0x40, 0x80, 0x01, 0xff, - 0x52, 0xc2, 0x4e, 0x58, 0xab, 0x00, 0x4a, 0xb2, 0x28, 0x59, 0xab, 0x40, - 0x48, 0x30, 0x23, 0x8d, 0x1e, 0x00, 0x48, 0x99, 0x1d, 0x8b, 0x1e, 0x40, - 0x06, 0x50, 0x00, 0x01, 0xff, 0x45, 0x29, 0x38, 0x83, 0x1e, 0x00, 0x4a, - 0xa4, 0x04, 0x75, 0x01, 0x00, 0xa4, 0x12, 0x45, 0x8d, 0x22, 0x81, 0x1e, - 0x00, 0x44, 0x5d, 0x0e, 0x73, 0x2c, 0x00, 0x4a, 0x0f, 0xae, 0x98, 0x1e, - 0x40, 0x48, 0x30, 0x23, 0x85, 0x1e, 0x00, 0x03, 0xb5, 0x0b, 0x01, 0xff, - 0x45, 0x5c, 0x00, 0x87, 0x1e, 0x00, 0x45, 0xf5, 0x06, 0x89, 0x1e, 0x40, - 0x06, 0x50, 0x00, 0x26, 0x43, 0x15, 0x05, 0x69, 0xa7, 0x00, 0x4b, 0x94, - 0x9b, 0x63, 0xa7, 0x00, 0x07, 0xff, 0xd0, 0x04, 0xf9, 0x61, 0xa7, 0x40, - 0x42, 0x44, 0x0f, 0x9b, 0xa7, 0x00, 0x42, 0x17, 0x50, 0x9d, 0xa7, 0x00, - 0x42, 0x87, 0x13, 0x9f, 0xa7, 0x40, 0x44, 0x23, 0x0b, 0x74, 0x2c, 0x00, - 0xa4, 0x18, 0x44, 0x5d, 0x0e, 0x8b, 0x02, 0x00, 0x4c, 0xaa, 0x55, 0x8c, - 0x1d, 0x00, 0x4a, 0xfb, 0xad, 0x71, 0x2c, 0x00, 0x45, 0xad, 0x22, 0x7d, - 0x1e, 0x40, 0x4e, 0xa9, 0x3e, 0x5f, 0xa7, 0x00, 0x48, 0x51, 0x12, 0x7f, - 0x1e, 0x40, 0x80, 0x1d, 0xe5, 0x6b, 0x1d, 0x00, 0xe9, 0x50, 0xab, 0x00, - 0xed, 0x78, 0xa7, 0x00, 0xef, 0x63, 0xab, 0x00, 0x46, 0x63, 0x15, 0x8a, - 0x02, 0xc0, 0x00, 0x4c, 0x39, 0x28, 0x7f, 0x1d, 0x40, 0x43, 0x16, 0x00, - 0x89, 0x02, 0x80, 0xfb, 0x01, 0x05, 0x51, 0x00, 0x01, 0xff, 0x45, 0x29, - 0x38, 0xfa, 0x00, 0x00, 0x45, 0xcb, 0x22, 0x6d, 0x01, 0x00, 0xa3, 0xd4, - 0x01, 0xa4, 0x8b, 0x01, 0x45, 0x8d, 0x22, 0xf9, 0x00, 0x00, 0x02, 0x0b, - 0x00, 0x51, 0x4e, 0xd6, 0x22, 0x17, 0x02, 0x00, 0x49, 0x68, 0x56, 0x52, - 0xab, 0x00, 0x46, 0x04, 0x6f, 0x6b, 0x01, 0x80, 0x38, 0x46, 0xc2, 0xdb, - 0x73, 0x01, 0x00, 0xb2, 0x24, 0xb3, 0x16, 0x45, 0xad, 0x22, 0x69, 0x01, - 0xc0, 0x00, 0x80, 0x01, 0xff, 0x49, 0x5c, 0xa3, 0x79, 0x1e, 0x00, 0x45, - 0xf5, 0x06, 0x75, 0x1e, 0x40, 0x4e, 0xc7, 0x37, 0x4e, 0xab, 0x00, 0x45, - 0x28, 0x05, 0xb9, 0xa7, 0x40, 0x4d, 0x54, 0x0e, 0x99, 0x1d, 0x00, 0x49, - 0x10, 0xae, 0x6f, 0x01, 0x40, 0x4e, 0xba, 0x73, 0x7b, 0x1e, 0x40, 0x48, - 0xfd, 0xa8, 0xe7, 0x1e, 0x00, 0x42, 0x5e, 0x01, 0xb0, 0x01, 0xc0, 0x00, - 0x05, 0x19, 0x00, 0x01, 0xff, 0x45, 0x29, 0x38, 0xe9, 0x1e, 0x00, 0x49, - 0x50, 0x12, 0xf1, 0x1e, 0x00, 0x45, 0x8d, 0x22, 0xeb, 0x1e, 0x00, 0x4a, - 0xfb, 0xa8, 0xed, 0x1e, 0x00, 0x45, 0xad, 0x22, 0xef, 0x1e, 0x40, 0x48, - 0x30, 0x23, 0xfc, 0x00, 0x80, 0x1a, 0xaf, 0x01, 0xff, 0x47, 0x52, 0x12, - 0xe5, 0x1e, 0x00, 0x05, 0x3d, 0x01, 0x01, 0xff, 0x45, 0x29, 0x38, 0x71, - 0x01, 0x00, 0x45, 0x8d, 0x22, 0x15, 0x02, 0x40, 0x80, 0x01, 0xff, 0x04, - 0x1a, 0x00, 0x06, 0x45, 0xf5, 0x06, 0x73, 0x1e, 0x40, 0x45, 0x29, 0x38, - 0xd8, 0x01, 0x00, 0x45, 0xf9, 0x95, 0xda, 0x01, 0x00, 0x45, 0x8d, 0x22, - 0xdc, 0x01, 0x00, 0x46, 0x04, 0x6f, 0xd6, 0x01, 0x40, 0x44, 0x4d, 0x6b, - 0xd4, 0x01, 0x00, 0x49, 0xa5, 0x04, 0xfb, 0x00, 0xc0, 0x00, 0x46, 0xf4, - 0x06, 0x77, 0x1e, 0x40, 0x55, 0xc0, 0x37, 0x4f, 0xab, 0x40, 0x06, 0x50, - 0x00, 0xd2, 0x02, 0x4b, 0xfb, 0x96, 0x77, 0x2c, 0x00, 0x53, 0x64, 0x47, - 0xa8, 0x02, 0x00, 0x4b, 0xd1, 0x99, 0xa7, 0x02, 0x80, 0xad, 0x02, 0xa8, - 0x90, 0x02, 0xaf, 0xf1, 0x01, 0x47, 0x80, 0xd2, 0x2b, 0xa7, 0x00, 0x49, - 0xa3, 0xbc, 0xa6, 0x02, 0x80, 0xdd, 0x01, 0xb5, 0x04, 0xfa, 0x29, 0xa7, - 0x40, 0xed, 0x77, 0xa7, 0x00, 0x05, 0x47, 0x07, 0x01, 0xff, 0xe1, 0x50, - 0x02, 0x80, 0xbe, 0x01, 0x45, 0x73, 0xe2, 0x8d, 0x01, 0x00, 0xe5, 0xdd, - 0x01, 0x00, 0xe7, 0x77, 0x1d, 0x00, 0xe8, 0x65, 0x02, 0x80, 0x9d, 0x01, - 0xe9, 0x09, 0x1d, 0x80, 0x91, 0x01, 0xeb, 0x9e, 0x02, 0x00, 0xec, 0x81, - 0xa7, 0x00, 0xed, 0x6f, 0x02, 0x80, 0x7e, 0xaf, 0x53, 0xf2, 0x79, 0x02, - 0x80, 0x24, 0xf4, 0x87, 0x02, 0x80, 0x19, 0x42, 0x3e, 0x00, 0x51, 0xab, - 0x00, 0xf6, 0x8c, 0x02, 0x00, 0xf7, 0x8d, 0x02, 0x00, 0xf9, 0x8e, 0x02, - 0xc0, 0x00, 0x4a, 0x19, 0xa4, 0x06, 0xdf, 0x41, 0x4a, 0x6d, 0x47, 0x0d, - 0xdf, 0x41, 0x06, 0x50, 0x00, 0x01, 0xff, 0x44, 0x5d, 0x0e, 0x7b, 0x02, - 0x00, 0x48, 0x06, 0x74, 0x7a, 0x02, 0x80, 0x12, 0x4c, 0xa6, 0x22, 0x68, - 0xab, 0x00, 0x4c, 0xaa, 0x55, 0x15, 0xdf, 0x01, 0x44, 0x23, 0x17, 0x79, - 0x2c, 0x40, 0x53, 0x0e, 0x46, 0x08, 0xdf, 0x41, 0x47, 0xb5, 0xca, 0x43, - 0xab, 0x80, 0x1c, 0xe5, 0x14, 0x1d, 0x80, 0x06, 0x45, 0x7e, 0x28, 0x08, - 0x1d, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x51, 0x1c, 0x05, 0x42, 0xab, - 0x00, 0x46, 0x27, 0x05, 0x41, 0xab, 0x40, 0x4c, 0x39, 0x28, 0x44, 0xab, - 0x40, 0x4e, 0x00, 0x74, 0x70, 0x02, 0x40, 0x48, 0x6c, 0x6e, 0x7f, 0xa7, - 0x40, 0x4e, 0x91, 0x70, 0xae, 0x02, 0xc0, 0x00, 0x49, 0xe1, 0xb1, 0xaf, - 0x02, 0x40, 0xe5, 0x02, 0x1d, 0x00, 0x44, 0x2f, 0xe1, 0x52, 0x02, 0x40, - 0x54, 0x4d, 0x0e, 0x67, 0xab, 0x40, 0x03, 0xc4, 0x07, 0x06, 0x48, 0xeb, - 0xba, 0x16, 0x1d, 0x40, 0x44, 0x31, 0x11, 0xbd, 0x01, 0x00, 0x43, 0x5f, - 0x25, 0x85, 0x01, 0x00, 0x43, 0xd0, 0x09, 0xa8, 0x01, 0x40, 0x53, 0x6d, - 0x46, 0x7a, 0x1d, 0x00, 0x43, 0xfd, 0x04, 0xfe, 0x00, 0xc0, 0x00, 0x4c, - 0x39, 0x28, 0x65, 0xa7, 0xc0, 0x00, 0x52, 0x8b, 0x2a, 0x67, 0xa7, 0x40, - 0x06, 0x50, 0x00, 0x01, 0xff, 0x4c, 0xaa, 0x55, 0x17, 0xdf, 0x01, 0x4e, - 0x53, 0x0e, 0x1c, 0xdf, 0x41, 0xa3, 0x58, 0xa4, 0x35, 0x44, 0x5d, 0x0e, - 0xad, 0x01, 0x80, 0x28, 0x4a, 0xf4, 0x6b, 0x6f, 0x1e, 0x00, 0x03, 0x7d, - 0x02, 0x12, 0x4c, 0xaa, 0x55, 0xab, 0x01, 0x00, 0x4e, 0x53, 0x0e, 0x88, - 0x02, 0x00, 0x46, 0x27, 0x05, 0x67, 0x01, 0x40, 0x51, 0x60, 0x56, 0x2a, - 0xdf, 0x01, 0x49, 0xa9, 0x22, 0x75, 0x1d, 0x40, 0x53, 0x0e, 0x46, 0x09, - 0xdf, 0x41, 0x02, 0x1b, 0x01, 0x11, 0x03, 0xb5, 0x0b, 0x01, 0xff, 0x45, - 0x5c, 0x00, 0x6b, 0x1e, 0x00, 0x45, 0xf5, 0x06, 0x6d, 0x1e, 0x40, 0x46, - 0x32, 0x23, 0x97, 0x1e, 0x00, 0x4c, 0xab, 0x3e, 0x66, 0x2c, 0x40, 0x44, - 0x4d, 0x6b, 0x65, 0x01, 0x00, 0x46, 0x7c, 0xbf, 0x63, 0x01, 0x00, 0x4f, - 0x48, 0x6d, 0x71, 0x1e, 0x00, 0x4a, 0x75, 0xac, 0x1b, 0x02, 0x00, 0x43, - 0x24, 0x0b, 0x36, 0x02, 0x40, 0x06, 0x50, 0x00, 0x82, 0x01, 0xa1, 0x74, - 0xa3, 0x3f, 0x46, 0xa6, 0xae, 0xdf, 0x00, 0x00, 0xa9, 0x0c, 0x51, 0x05, - 0x5c, 0x85, 0x02, 0x00, 0x48, 0xe2, 0xc8, 0x45, 0xab, 0x40, 0x07, 0xbd, - 0x44, 0x06, 0x47, 0x53, 0xc4, 0xd9, 0xa7, 0x40, 0x4d, 0x52, 0x80, 0x1e, - 0x1d, 0x00, 0xef, 0x11, 0x1d, 0x80, 0x0a, 0x48, 0x22, 0xc9, 0x1f, 0x1d, - 0x00, 0xf5, 0x1d, 0x1d, 0x40, 0x4c, 0x39, 0x28, 0x13, 0x1d, 0x00, 0x45, - 0xb0, 0xe6, 0x12, 0x1d, 0x40, 0x43, 0x55, 0x7a, 0x59, 0x02, 0x80, 0x1b, - 0x05, 0x4b, 0x06, 0x01, 0xff, 0xe7, 0x61, 0x02, 0x80, 0x0b, 0xf2, 0x4b, - 0xab, 0xc0, 0x00, 0x4a, 0x55, 0xa4, 0x4c, 0xab, 0x40, 0x52, 0x7a, 0x4e, - 0x36, 0xab, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x44, 0x5d, 0x0e, 0x5a, - 0x02, 0x00, 0x4e, 0x53, 0x0e, 0x95, 0x1d, 0x40, 0x47, 0x8c, 0xcf, 0x60, - 0xab, 0x00, 0x46, 0xf1, 0xcb, 0x8c, 0xa7, 0x40, 0x45, 0x29, 0x38, 0x5b, - 0x01, 0x80, 0x78, 0xa3, 0x51, 0xa4, 0x31, 0x44, 0x5d, 0x0e, 0x82, 0x02, - 0x00, 0x03, 0x7d, 0x02, 0x1b, 0x4e, 0x41, 0x42, 0xa9, 0xa7, 0x00, 0x4c, - 0xaa, 0x55, 0x8a, 0x1d, 0x00, 0xb3, 0x01, 0xff, 0x53, 0xa7, 0x48, 0xca, - 0xa7, 0x00, 0x49, 0xb6, 0xbe, 0x3f, 0x02, 0x40, 0x51, 0x60, 0x56, 0x29, - 0xdf, 0x01, 0x49, 0xa9, 0x22, 0x74, 0x1d, 0x40, 0x4e, 0xa9, 0x3e, 0xcd, - 0xa7, 0x00, 0x03, 0xb5, 0x0b, 0x01, 0xff, 0x45, 0x5c, 0x00, 0x61, 0x1e, - 0x00, 0x45, 0xf5, 0x06, 0x63, 0x1e, 0xc0, 0x00, 0x4e, 0x93, 0x1d, 0x69, - 0x1e, 0x40, 0x44, 0x4d, 0x6b, 0x61, 0x01, 0x80, 0x18, 0x46, 0x7c, 0xbf, - 0x5f, 0x01, 0x00, 0x49, 0xa5, 0x04, 0x5d, 0x01, 0x00, 0x4a, 0x75, 0xac, - 0x19, 0x02, 0x00, 0x43, 0x24, 0x0b, 0x1e, 0xdf, 0x41, 0x4e, 0x93, 0x1d, - 0x67, 0x1e, 0x40, 0x4e, 0x93, 0x1d, 0x65, 0x1e, 0x40, 0x80, 0x5b, 0x48, - 0xc2, 0xc0, 0x64, 0x02, 0x00, 0x08, 0x8f, 0x14, 0x0d, 0x42, 0x1d, 0x04, - 0x75, 0xa7, 0xc0, 0x00, 0x48, 0x4b, 0xb0, 0x5d, 0xa7, 0x40, 0xe3, 0x84, - 0x21, 0x80, 0x39, 0xe5, 0x58, 0x02, 0x80, 0x2e, 0x46, 0x4c, 0xd9, 0xf6, - 0xa7, 0x00, 0xeb, 0x03, 0xdf, 0x01, 0x46, 0x7d, 0x28, 0x5c, 0x02, 0x80, - 0x0c, 0x4f, 0x90, 0x70, 0x7f, 0x02, 0x00, 0x48, 0x02, 0xc8, 0x01, 0xdf, - 0x41, 0x06, 0x50, 0x00, 0x01, 0xff, 0x44, 0x5d, 0x0e, 0x5d, 0x02, 0x00, - 0x4e, 0x53, 0x0e, 0x94, 0x1d, 0x40, 0x42, 0x1d, 0x01, 0x07, 0xdf, 0x41, - 0x49, 0xa5, 0x3a, 0x3f, 0xa7, 0x40, 0x47, 0x4c, 0xb0, 0x5b, 0xa7, 0x00, - 0x04, 0x51, 0x00, 0x01, 0xff, 0x80, 0x06, 0x4a, 0xb4, 0x4f, 0x47, 0xab, - 0x40, 0x45, 0x29, 0x38, 0x55, 0x01, 0x00, 0xa3, 0x75, 0x02, 0x3b, 0x01, - 0x54, 0x48, 0x97, 0x70, 0x7e, 0x02, 0x80, 0x3c, 0x4e, 0xd6, 0x22, 0x13, - 0x02, 0x00, 0xac, 0x28, 0x03, 0x7d, 0x02, 0x18, 0x4e, 0x41, 0x42, 0xa7, - 0xa7, 0x00, 0x4c, 0xaa, 0x55, 0x89, 0x1d, 0x00, 0x46, 0x27, 0x05, 0x4d, - 0x02, 0x00, 0x44, 0x23, 0x17, 0x7d, 0x02, 0x40, 0x51, 0x60, 0x56, 0x28, - 0xdf, 0x01, 0x49, 0xa9, 0x22, 0x72, 0x1d, 0x40, 0x49, 0xf5, 0x6b, 0x5f, - 0x1e, 0x00, 0x47, 0x07, 0x74, 0x7c, 0x02, 0x40, 0x05, 0x19, 0x00, 0x01, - 0xff, 0x4c, 0xa6, 0x22, 0x73, 0x1d, 0x00, 0x4c, 0xaa, 0x55, 0x16, 0xdf, - 0x41, 0x02, 0xc6, 0x00, 0x06, 0x4a, 0x88, 0x22, 0x11, 0x02, 0x40, 0x45, - 0x5c, 0x00, 0x59, 0x1e, 0x00, 0x45, 0xf5, 0x06, 0x5b, 0x1e, 0xc0, 0x00, - 0x4b, 0x59, 0x95, 0x5d, 0x1e, 0x40, 0x44, 0x4d, 0x6b, 0x59, 0x01, 0x00, - 0x46, 0x7c, 0xbf, 0x57, 0x01, 0x00, 0x4b, 0x81, 0x4e, 0x49, 0xab, 0x40, - 0x06, 0x50, 0x00, 0x06, 0x49, 0x5f, 0xbb, 0x39, 0x02, 0x40, 0x4f, 0xa8, - 0x3e, 0x59, 0xa7, 0x00, 0x44, 0x5d, 0x0e, 0xa0, 0x02, 0x80, 0x06, 0x58, - 0x85, 0x2a, 0x57, 0xa7, 0x40, 0x45, 0x8e, 0x46, 0x4b, 0x02, 0x40, 0x06, - 0x50, 0x00, 0x06, 0x42, 0x49, 0x00, 0x78, 0x02, 0x40, 0x45, 0x29, 0x38, - 0x55, 0x1e, 0x00, 0x49, 0x98, 0x1d, 0x57, 0x1e, 0x00, 0x48, 0xa2, 0xc3, - 0x53, 0xa7, 0x00, 0x44, 0x5d, 0x0e, 0xa5, 0x01, 0x00, 0x4c, 0xa6, 0x22, - 0x71, 0x1d, 0x00, 0x4c, 0xaa, 0x55, 0x88, 0x1d, 0x00, 0xb3, 0x01, 0xff, - 0x4c, 0x41, 0x92, 0x55, 0xa7, 0x00, 0x45, 0x28, 0x05, 0x7d, 0x1d, 0xc0, - 0x00, 0x52, 0x8b, 0x2a, 0x51, 0xa7, 0x40, 0x06, 0x50, 0x00, 0x40, 0xe9, - 0xa3, 0x01, 0x00, 0x4b, 0x39, 0x9c, 0xc1, 0xa7, 0x00, 0x44, 0x6b, 0x7a, - 0xb7, 0xa7, 0x00, 0xef, 0x4f, 0xa7, 0x00, 0x04, 0xcc, 0x04, 0x04, 0xf5, - 0x23, 0x02, 0x40, 0xe5, 0x5b, 0x02, 0x80, 0x19, 0xef, 0x54, 0x02, 0xc0, - 0x00, 0x06, 0x50, 0x00, 0x04, 0xe5, 0x62, 0xab, 0x40, 0x4e, 0x53, 0x0e, - 0x97, 0x1d, 0x00, 0x46, 0x27, 0x05, 0x3f, 0xab, 0x40, 0x54, 0x4d, 0x0e, - 0x93, 0x1d, 0x40, 0x45, 0x29, 0x38, 0xf3, 0x00, 0x00, 0x45, 0xcb, 0x22, - 0x4f, 0x01, 0x00, 0xa3, 0xe7, 0x01, 0xa4, 0xac, 0x01, 0x45, 0x8d, 0x22, - 0xf2, 0x00, 0x00, 0x02, 0x0b, 0x00, 0x72, 0x4e, 0xd6, 0x22, 0x0f, 0x02, - 0x00, 0x02, 0x13, 0x01, 0x56, 0x46, 0x04, 0x6f, 0x4d, 0x01, 0x80, 0x3e, - 0x46, 0xc2, 0xdb, 0xeb, 0x01, 0x80, 0x31, 0x4e, 0x53, 0x0e, 0x1b, 0xdf, - 0x01, 0x46, 0x27, 0x05, 0xf8, 0x00, 0x80, 0x1e, 0x45, 0xad, 0x22, 0xf5, - 0x00, 0xc0, 0x00, 0x05, 0x19, 0x00, 0x01, 0xff, 0x45, 0x29, 0x38, 0x4d, - 0x1e, 0x00, 0x49, 0x2f, 0x23, 0x4f, 0x1e, 0x00, 0x46, 0x04, 0x6f, 0x2d, - 0x02, 0x40, 0x4a, 0x5b, 0xa3, 0xff, 0x01, 0x40, 0x4b, 0x59, 0x95, 0xed, - 0x01, 0x40, 0x05, 0x19, 0x00, 0x01, 0xff, 0x45, 0x29, 0x38, 0x53, 0x1e, - 0x00, 0x45, 0x8d, 0x22, 0x51, 0x1e, 0x40, 0x51, 0x5b, 0x5b, 0x4b, 0xa7, - 0x00, 0x42, 0x1f, 0x00, 0x4d, 0xa7, 0x00, 0x4d, 0x99, 0x88, 0x7a, 0x2c, - 0x40, 0x48, 0xfd, 0xa8, 0xcf, 0x1e, 0x00, 0x42, 0x5e, 0x01, 0xa1, 0x01, - 0xc0, 0x00, 0x05, 0x19, 0x00, 0x01, 0xff, 0x45, 0x29, 0x38, 0xdb, 0x1e, - 0x00, 0x49, 0x50, 0x12, 0xe3, 0x1e, 0x00, 0x45, 0x8d, 0x22, 0xdd, 0x1e, - 0x00, 0x4a, 0xfb, 0xa8, 0xdf, 0x1e, 0x00, 0x45, 0xad, 0x22, 0xe1, 0x1e, - 0x40, 0x48, 0x30, 0x23, 0xf6, 0x00, 0x80, 0x2b, 0xaf, 0x01, 0xff, 0x02, - 0xc6, 0x00, 0x11, 0x05, 0x3d, 0x01, 0x01, 0xff, 0x45, 0x29, 0x38, 0x51, - 0x01, 0x00, 0x45, 0x8d, 0x22, 0x0d, 0x02, 0x40, 0x45, 0x5c, 0x00, 0x2f, - 0x02, 0x80, 0x06, 0x45, 0xf5, 0x06, 0xcd, 0x1e, 0x40, 0x4b, 0x59, 0x95, - 0x31, 0x02, 0x40, 0x4b, 0x59, 0x95, 0x2b, 0x02, 0x40, 0x44, 0x4d, 0x6b, - 0xd2, 0x01, 0x00, 0x49, 0xa5, 0x04, 0xf4, 0x00, 0xc0, 0x00, 0x05, 0x19, - 0x00, 0x01, 0xff, 0x45, 0x29, 0x38, 0xd1, 0x1e, 0x00, 0x49, 0x50, 0x12, - 0xd9, 0x1e, 0x00, 0x45, 0x8d, 0x22, 0xd3, 0x1e, 0x00, 0x4a, 0xfb, 0xa8, - 0xd5, 0x1e, 0x00, 0x45, 0xad, 0x22, 0xd7, 0x1e, 0x40, 0x80, 0x0a, 0xea, - 0xcc, 0x01, 0x00, 0x42, 0x1d, 0x04, 0x74, 0xa7, 0x40, 0x56, 0x85, 0x35, - 0x49, 0x01, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x45, 0x29, 0x38, 0x44, - 0x01, 0x00, 0xa3, 0x5b, 0xa4, 0x42, 0x45, 0x8d, 0x22, 0xf9, 0x01, 0x00, - 0xac, 0x28, 0x03, 0x7d, 0x02, 0x18, 0x4e, 0x41, 0x42, 0xa5, 0xa7, 0x00, - 0x4c, 0xaa, 0x55, 0x87, 0x1d, 0x00, 0x4e, 0x53, 0x0e, 0x73, 0x02, 0x00, - 0x45, 0xad, 0x22, 0xf1, 0x00, 0x40, 0x51, 0x60, 0x56, 0x27, 0xdf, 0x01, - 0x49, 0xa9, 0x22, 0x70, 0x1d, 0x40, 0x48, 0x69, 0x56, 0x72, 0x02, 0x00, - 0x49, 0xf5, 0x6b, 0x49, 0x1e, 0x00, 0x4d, 0x32, 0x85, 0x9e, 0x01, 0x40, - 0x48, 0x95, 0x2a, 0x91, 0xa7, 0x00, 0x03, 0xb5, 0x0b, 0x01, 0xff, 0x45, - 0x5c, 0x00, 0x45, 0x1e, 0x00, 0x45, 0xf5, 0x06, 0x47, 0x1e, 0x40, 0x44, - 0x4d, 0x6b, 0x48, 0x01, 0x00, 0x46, 0x7c, 0xbf, 0x46, 0x01, 0x00, 0x4f, - 0x48, 0x6d, 0x4b, 0x1e, 0x00, 0x4b, 0x81, 0x4e, 0x3b, 0xab, 0x00, 0x43, - 0x24, 0x0b, 0x35, 0x02, 0x40, 0x06, 0x50, 0x00, 0x1f, 0x05, 0x7e, 0x02, - 0x06, 0x42, 0x1d, 0x04, 0x73, 0xa7, 0x40, 0x48, 0x0a, 0xc0, 0xd7, 0xa7, - 0x00, 0x07, 0x25, 0xcb, 0x01, 0xff, 0x42, 0x0f, 0x07, 0xfb, 0x1e, 0x00, - 0xf6, 0xfd, 0x1e, 0x40, 0x45, 0x29, 0x38, 0x3f, 0x1e, 0x00, 0x4c, 0x80, - 0x4e, 0x3a, 0xab, 0x00, 0x04, 0xb4, 0x0b, 0x12, 0x44, 0x5d, 0x0e, 0x71, - 0x02, 0x00, 0x4c, 0xa6, 0x22, 0x6f, 0x1d, 0x00, 0x4c, 0xaa, 0x55, 0x86, - 0x1d, 0x40, 0x45, 0x5c, 0x00, 0x41, 0x1e, 0x00, 0x45, 0xf5, 0x06, 0x43, - 0x1e, 0x40, 0x06, 0x50, 0x00, 0x58, 0x45, 0x33, 0xe1, 0xdb, 0xa7, 0x80, - 0x4b, 0xa5, 0x36, 0xea, 0xc9, 0x01, 0x00, 0x45, 0xe4, 0xb9, 0x7f, 0x01, - 0x80, 0x12, 0x49, 0xa3, 0xbc, 0xaa, 0x02, 0x00, 0x42, 0x1d, 0x04, 0x72, - 0xa7, 0x00, 0x49, 0x34, 0xbf, 0xab, 0x02, 0x40, 0x06, 0x50, 0x00, 0x01, - 0xff, 0xa4, 0x06, 0x4b, 0xc3, 0x9a, 0x9d, 0x1e, 0x40, 0x4e, 0xa9, 0x3e, - 0x9c, 0x1e, 0x00, 0x48, 0x99, 0x1d, 0x9b, 0x1e, 0x40, 0x45, 0x06, 0xe6, - 0x35, 0xab, 0x00, 0x42, 0xb3, 0x27, 0x6e, 0x02, 0xc0, 0x00, 0x54, 0x4d, - 0x0e, 0x05, 0xdf, 0x41, 0x4c, 0x39, 0x28, 0x9b, 0x01, 0x40, 0x45, 0x29, - 0x38, 0x3a, 0x01, 0x00, 0xa2, 0x8e, 0x01, 0xa3, 0x74, 0x02, 0x3b, 0x01, - 0x52, 0x48, 0x97, 0x70, 0x11, 0xdf, 0x01, 0x4b, 0xc3, 0x9a, 0x49, 0xa7, - 0x00, 0x4f, 0x2a, 0x6d, 0x37, 0xab, 0x00, 0x4a, 0xf4, 0x6b, 0x3b, 0x1e, - 0x00, 0x03, 0x7d, 0x02, 0x19, 0x4c, 0xaa, 0x55, 0x85, 0x1d, 0x00, 0x4e, - 0x53, 0x0e, 0x6d, 0x02, 0x80, 0x06, 0x46, 0x27, 0x05, 0x42, 0x01, 0x40, - 0x49, 0xcf, 0xb1, 0x8e, 0xa7, 0x40, 0x51, 0x60, 0x56, 0x26, 0xdf, 0x01, - 0x04, 0x80, 0x02, 0x01, 0xff, 0x43, 0xd4, 0x09, 0x40, 0x01, 0x00, 0x44, - 0xf7, 0x07, 0x39, 0xab, 0x00, 0x45, 0xad, 0x22, 0x6b, 0x02, 0x40, 0x47, - 0x52, 0x12, 0x37, 0x1e, 0x80, 0x11, 0x05, 0x3d, 0x01, 0x01, 0xff, 0x43, - 0x16, 0x00, 0x61, 0x2c, 0x00, 0x4c, 0xa6, 0x22, 0x38, 0xab, 0x40, 0x4b, - 0x59, 0x95, 0x39, 0x1e, 0x40, 0x44, 0x4d, 0x6b, 0x3e, 0x01, 0x00, 0x46, - 0x7c, 0xbf, 0x3c, 0x01, 0x00, 0x4f, 0x48, 0x6d, 0x3d, 0x1e, 0x00, 0x43, - 0x24, 0x0b, 0x34, 0x02, 0x40, 0x42, 0x17, 0x00, 0x9a, 0x01, 0x00, 0x43, - 0xa1, 0xa1, 0x6c, 0x02, 0xc0, 0x00, 0x51, 0xa5, 0x55, 0x13, 0xdf, 0x41, - 0x06, 0x50, 0x00, 0x06, 0x42, 0x71, 0x00, 0x38, 0x01, 0x40, 0x45, 0x29, - 0x38, 0x31, 0x1e, 0x00, 0xa3, 0x39, 0xa4, 0x25, 0x44, 0x5d, 0x0e, 0x99, - 0x01, 0x00, 0x4a, 0xf4, 0x6b, 0x35, 0x1e, 0x00, 0x4e, 0x41, 0x42, 0xa3, - 0xa7, 0x00, 0x4c, 0xaa, 0x55, 0x84, 0x1d, 0x00, 0x46, 0x27, 0x05, 0x41, - 0xa7, 0xc0, 0x00, 0x54, 0xa3, 0x3e, 0x45, 0xa7, 0x40, 0x48, 0x95, 0x2a, - 0x6a, 0x2c, 0x00, 0x4e, 0xa9, 0x3e, 0x43, 0xa7, 0x00, 0x48, 0x51, 0x12, - 0x33, 0x1e, 0x40, 0x44, 0x4d, 0x6b, 0xe9, 0x01, 0x00, 0x46, 0x7c, 0xbf, - 0x37, 0x01, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0xa3, 0x06, 0x46, 0x27, - 0x05, 0x49, 0x02, 0x40, 0x44, 0x4d, 0x6b, 0xf0, 0x01, 0x00, 0x49, 0xa5, - 0x04, 0x35, 0x01, 0x00, 0x4b, 0x81, 0x4e, 0x9d, 0x02, 0x40, 0x06, 0x50, - 0x00, 0x48, 0xae, 0x19, 0x02, 0xf0, 0x04, 0x04, 0xf3, 0x6d, 0xa7, 0x40, - 0xe1, 0x69, 0x02, 0x80, 0x06, 0x47, 0x07, 0xcf, 0x61, 0xab, 0x40, 0x4c, - 0x39, 0x28, 0x7c, 0x1d, 0x40, 0x06, 0x6d, 0x6e, 0x11, 0x07, 0xd8, 0x22, - 0x01, 0xff, 0x45, 0x2e, 0xe1, 0x64, 0xab, 0x00, 0x42, 0x17, 0x50, 0x40, - 0xab, 0x40, 0xe4, 0x7a, 0xa7, 0x00, 0xe6, 0x7c, 0xa7, 0x00, 0xe7, 0x79, - 0x1d, 0x00, 0xf2, 0x83, 0xa7, 0x00, 0xf3, 0x85, 0xa7, 0x00, 0xf4, 0x87, - 0xa7, 0x40, 0x45, 0x29, 0x38, 0xed, 0x00, 0x00, 0x45, 0xcb, 0x22, 0x2d, - 0x01, 0x00, 0xa3, 0x5c, 0xa4, 0x3e, 0x45, 0x8d, 0x22, 0xec, 0x00, 0x00, - 0x4a, 0xfb, 0xa8, 0xc9, 0x1e, 0x00, 0x4e, 0xd6, 0x22, 0x0b, 0x02, 0x00, - 0x46, 0x04, 0x6f, 0x2b, 0x01, 0x00, 0x46, 0xc2, 0xdb, 0x2f, 0x01, 0x00, - 0x4e, 0x53, 0x0e, 0x96, 0x1d, 0x00, 0x46, 0x27, 0x05, 0x68, 0x02, 0x80, - 0x0d, 0x45, 0xad, 0x22, 0x29, 0x01, 0xc0, 0x00, 0x46, 0xf4, 0x06, 0x2d, - 0x1e, 0x40, 0x53, 0x0e, 0x46, 0x1a, 0xdf, 0x41, 0x48, 0x30, 0x23, 0xef, - 0x00, 0x80, 0x0f, 0xaf, 0x01, 0xff, 0x47, 0x52, 0x12, 0xcb, 0x1e, 0x00, - 0x4a, 0x88, 0x22, 0x09, 0x02, 0x40, 0x4a, 0x5b, 0xa3, 0x2f, 0x1e, 0x40, - 0x44, 0x4d, 0x6b, 0xd0, 0x01, 0x00, 0x49, 0xa5, 0x04, 0xee, 0x00, 0x40, - 0x06, 0x50, 0x00, 0x17, 0x45, 0x4d, 0xd9, 0x76, 0x2c, 0x00, 0x43, 0xfd, - 0x09, 0x27, 0xa7, 0x80, 0x04, 0xf6, 0x95, 0x01, 0x40, 0x4a, 0x1f, 0x24, - 0x67, 0x02, 0x40, 0x4b, 0xab, 0x97, 0x2b, 0x1e, 0x00, 0xa3, 0x37, 0xa4, - 0x18, 0x44, 0x5d, 0x0e, 0x66, 0x02, 0x00, 0x4a, 0xf4, 0x6b, 0x96, 0x1e, - 0x00, 0x4c, 0xaa, 0x55, 0x95, 0xa7, 0x00, 0x46, 0x27, 0x05, 0x27, 0x01, - 0x40, 0x48, 0x95, 0x2a, 0x68, 0x2c, 0x00, 0x48, 0x30, 0x23, 0x27, 0x1e, - 0x00, 0x03, 0xb5, 0x0b, 0x01, 0xff, 0x45, 0x5c, 0x00, 0x23, 0x1e, 0x00, - 0x45, 0xf5, 0x06, 0x25, 0x1e, 0x40, 0x44, 0x4d, 0x6b, 0x1f, 0x02, 0x00, - 0x46, 0x7c, 0xbf, 0x29, 0x1e, 0x00, 0x49, 0xa5, 0x04, 0x25, 0x01, 0x40, - 0x06, 0x50, 0x00, 0x23, 0x44, 0x5e, 0x20, 0x63, 0x02, 0x00, 0x42, 0x22, - 0x00, 0xa3, 0x01, 0x00, 0x07, 0x2e, 0x28, 0x01, 0xff, 0xe1, 0xbb, 0xa7, - 0x00, 0xe9, 0xbd, 0xa7, 0x00, 0x44, 0x2a, 0x03, 0x42, 0x02, 0x00, 0xf5, - 0xbf, 0xa7, 0x40, 0x45, 0x29, 0x38, 0xf5, 0x01, 0x00, 0x45, 0xcb, 0x22, - 0x1f, 0x01, 0x00, 0xa3, 0x24, 0x49, 0x98, 0x1d, 0x21, 0x01, 0x00, 0x44, - 0x5d, 0x0e, 0x60, 0x02, 0x00, 0x46, 0x04, 0x6f, 0x21, 0x1e, 0x00, 0x4e, - 0x41, 0x42, 0xa1, 0xa7, 0x00, 0x4c, 0xaa, 0x55, 0x83, 0x1d, 0x00, 0x46, - 0x27, 0x05, 0xe5, 0x01, 0x40, 0x44, 0x4d, 0x6b, 0xe7, 0x01, 0x00, 0x46, - 0x7c, 0xbf, 0x23, 0x01, 0x00, 0x49, 0xa5, 0x04, 0x1d, 0x01, 0x40, 0x06, - 0x50, 0x00, 0x0d, 0x4b, 0x9a, 0x99, 0xa9, 0x02, 0xc0, 0x00, 0x4b, 0x4b, - 0x96, 0x00, 0xdf, 0x41, 0x49, 0x98, 0x1d, 0x1f, 0x1e, 0x00, 0x44, 0x5d, - 0x0e, 0x92, 0x01, 0x00, 0x4c, 0xa6, 0x22, 0x6e, 0x1d, 0x00, 0x4c, 0xaa, - 0x55, 0x82, 0x1d, 0x00, 0x46, 0x27, 0x05, 0x99, 0xa7, 0x40, 0x06, 0x50, - 0x00, 0x92, 0x01, 0x0e, 0xbc, 0x76, 0x81, 0x01, 0x42, 0x1d, 0x01, 0x4b, - 0x01, 0x80, 0x69, 0x42, 0xa4, 0x02, 0x83, 0x02, 0x80, 0x3e, 0xf4, 0x6b, - 0xa7, 0x80, 0x35, 0x42, 0xb3, 0x27, 0x92, 0x02, 0xc0, 0x00, 0x80, 0x01, - 0xff, 0x48, 0x09, 0x13, 0xb9, 0x01, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, - 0xa3, 0x12, 0x4c, 0xaa, 0x55, 0x18, 0xdf, 0x01, 0x4e, 0x53, 0x0e, 0x9a, - 0x1d, 0x00, 0x44, 0x23, 0x17, 0xba, 0x01, 0x40, 0x44, 0x4d, 0x6b, 0xef, - 0x01, 0x00, 0x43, 0x24, 0x0b, 0x93, 0x02, 0x40, 0xe8, 0xf0, 0x00, 0x40, - 0x06, 0x50, 0x00, 0x01, 0xff, 0x44, 0x23, 0x0b, 0x86, 0x02, 0x00, 0x4a, - 0x25, 0xa7, 0x0b, 0xdf, 0x81, 0x0c, 0x4c, 0xaa, 0x55, 0x8b, 0x1d, 0x00, - 0x4e, 0x53, 0x0e, 0x98, 0x1d, 0x40, 0x49, 0xd8, 0xb1, 0x0c, 0xdf, 0x41, - 0x06, 0x50, 0x00, 0x01, 0xff, 0x4c, 0x80, 0x4e, 0x3c, 0xab, 0x00, 0x4c, - 0xaa, 0x55, 0x14, 0xdf, 0x41, 0x42, 0x9e, 0x01, 0x25, 0xa7, 0x00, 0x43, - 0x68, 0x00, 0x23, 0xa7, 0x40, 0x45, 0x29, 0x38, 0xe9, 0x00, 0x00, 0x45, - 0xcb, 0x22, 0x15, 0x01, 0x00, 0xa3, 0x76, 0xa4, 0x55, 0x48, 0xa2, 0xc3, - 0x34, 0xab, 0x00, 0x45, 0x8d, 0x22, 0xe8, 0x00, 0x00, 0x4a, 0xfb, 0xa8, - 0xbb, 0x1e, 0x00, 0x4e, 0xd6, 0x22, 0x07, 0x02, 0x00, 0x46, 0x04, 0x6f, - 0x13, 0x01, 0x80, 0x25, 0x45, 0xd8, 0x29, 0x78, 0x2c, 0x00, 0x46, 0xc2, - 0xdb, 0x19, 0x01, 0x00, 0x4e, 0x53, 0x0e, 0x92, 0x1d, 0x00, 0x46, 0x27, - 0x05, 0x47, 0x02, 0x00, 0x45, 0xad, 0x22, 0xbd, 0x1e, 0xc0, 0x00, 0x46, - 0xf4, 0x06, 0x1b, 0x1e, 0x40, 0x05, 0x19, 0x00, 0x01, 0xff, 0x45, 0x29, - 0x38, 0x17, 0x1e, 0x00, 0x45, 0x8d, 0x22, 0x15, 0x1e, 0x40, 0x48, 0x30, - 0x23, 0xeb, 0x00, 0x00, 0xaf, 0x01, 0xff, 0x02, 0xc6, 0x00, 0x06, 0x4a, - 0x88, 0x22, 0x05, 0x02, 0x40, 0x45, 0x5c, 0x00, 0x17, 0x01, 0x00, 0x45, - 0xf5, 0x06, 0xb9, 0x1e, 0x40, 0x44, 0x4d, 0x6b, 0x1b, 0x01, 0x00, 0x46, - 0x7c, 0xbf, 0x29, 0x02, 0x80, 0x32, 0x49, 0xa5, 0x04, 0xea, 0x00, 0xc0, - 0x00, 0x80, 0x01, 0xff, 0x04, 0x1a, 0x00, 0x06, 0x45, 0xf5, 0x06, 0x19, - 0x1e, 0x40, 0x45, 0x29, 0x38, 0xbf, 0x1e, 0x00, 0x49, 0x50, 0x12, 0xc7, - 0x1e, 0x00, 0x45, 0x8d, 0x22, 0xc1, 0x1e, 0x00, 0x4a, 0xfb, 0xa8, 0xc3, - 0x1e, 0x00, 0x45, 0xad, 0x22, 0xc5, 0x1e, 0x40, 0x4a, 0x6f, 0xa3, 0x1d, - 0x1e, 0x40, 0x06, 0x50, 0x00, 0x8a, 0x01, 0x49, 0x2a, 0xb4, 0x38, 0x02, - 0x00, 0xa5, 0x64, 0xaf, 0x2c, 0x42, 0x1d, 0x04, 0x71, 0xa7, 0x00, 0xfa, - 0xf3, 0x01, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x47, 0x66, 0x47, 0xa3, 0x02, - 0x80, 0x06, 0x4a, 0xf4, 0x95, 0xc6, 0x01, 0x40, 0x06, 0x50, 0x00, 0x01, - 0xff, 0x44, 0x23, 0x0b, 0xa5, 0x02, 0x00, 0x4e, 0x53, 0x0e, 0x66, 0xab, - 0x40, 0x06, 0x85, 0x40, 0x1c, 0x05, 0x3d, 0x01, 0x01, 0xff, 0xf2, 0x48, - 0xab, 0x80, 0x0c, 0x45, 0xc8, 0x48, 0xd3, 0xa7, 0x00, 0x44, 0x2c, 0xa2, - 0xd5, 0xa7, 0x40, 0x52, 0x7a, 0x4e, 0x4a, 0xab, 0x40, 0xe9, 0x31, 0x01, - 0x00, 0xea, 0x37, 0x02, 0xc0, 0x00, 0x4c, 0x39, 0x28, 0x5f, 0x02, 0xc0, - 0x00, 0x49, 0x38, 0x23, 0x84, 0x02, 0x40, 0x43, 0xef, 0x94, 0x9f, 0x1e, - 0x00, 0x4a, 0xbb, 0xb1, 0xa4, 0x02, 0xc0, 0x00, 0x06, 0x50, 0x00, 0x01, - 0xff, 0x4c, 0xaa, 0x55, 0x12, 0xdf, 0x01, 0x4e, 0x53, 0x0e, 0x19, 0xdf, - 0x41, 0xa3, 0x56, 0x04, 0xb4, 0x0b, 0x46, 0x44, 0x5d, 0x0e, 0x57, 0x02, - 0x80, 0x39, 0x4a, 0xf4, 0x6b, 0x0f, 0x1e, 0x00, 0x03, 0x7d, 0x02, 0x23, - 0x4c, 0xaa, 0x55, 0x81, 0x1d, 0x00, 0xb3, 0x0f, 0xb4, 0x01, 0xff, 0x43, - 0x24, 0x17, 0x56, 0x02, 0x00, 0x45, 0x9d, 0xdd, 0x8c, 0x01, 0x40, 0x53, - 0xa7, 0x48, 0xc8, 0xa7, 0x00, 0x45, 0x28, 0x05, 0x11, 0x01, 0x40, 0x51, - 0x60, 0x56, 0x25, 0xdf, 0x01, 0x49, 0xa9, 0x22, 0x6d, 0x1d, 0x40, 0x49, - 0xe1, 0xb1, 0x91, 0x1d, 0x40, 0x45, 0x5c, 0x00, 0x0b, 0x1e, 0x00, 0x45, - 0xf5, 0x06, 0x0d, 0x1e, 0x40, 0x44, 0x4d, 0x6b, 0x0f, 0x01, 0x00, 0x46, - 0x7c, 0xbf, 0x11, 0x1e, 0x00, 0x4f, 0x48, 0x6d, 0x13, 0x1e, 0x00, 0x43, - 0x24, 0x0b, 0x21, 0x02, 0x40, 0x06, 0x50, 0x00, 0x49, 0x42, 0x49, 0x00, - 0x53, 0xab, 0x80, 0x31, 0x06, 0xd9, 0x1a, 0x13, 0x42, 0x10, 0x00, 0x6f, - 0xa7, 0x00, 0x48, 0x32, 0xc9, 0x2d, 0xa7, 0xc0, 0x00, 0x4b, 0xfe, 0x95, - 0x2f, 0xa7, 0x40, 0x49, 0x6b, 0x6e, 0xd1, 0xa7, 0x00, 0xaf, 0x06, 0x4f, - 0xdb, 0x70, 0x5e, 0x02, 0x40, 0x44, 0x6b, 0x7a, 0x77, 0x02, 0x00, 0x45, - 0x7e, 0x28, 0x9a, 0x02, 0x40, 0x0a, 0x2d, 0xa4, 0x01, 0xff, 0x4a, 0x6d, - 0xaa, 0x55, 0xab, 0x00, 0x4a, 0xca, 0x4e, 0x54, 0xab, 0x40, 0x45, 0x29, - 0x38, 0x07, 0x01, 0x00, 0x43, 0x16, 0x00, 0x93, 0xa7, 0x00, 0xa3, 0x1e, - 0x49, 0x98, 0x1d, 0x0b, 0x01, 0x00, 0x44, 0x5d, 0x0e, 0x88, 0x01, 0x00, - 0x4c, 0xaa, 0x55, 0x94, 0xa7, 0x00, 0x4e, 0x53, 0x0e, 0x1d, 0xdf, 0x01, - 0x46, 0x27, 0x05, 0x3c, 0x02, 0x40, 0x44, 0x4d, 0x6b, 0x0d, 0x01, 0x00, - 0x46, 0x7c, 0xbf, 0xe7, 0x00, 0x80, 0x0c, 0x49, 0xa5, 0x04, 0x09, 0x01, - 0x00, 0x43, 0x24, 0x0b, 0x55, 0x02, 0x40, 0x4a, 0x5b, 0xa3, 0x09, 0x1e, - 0x40, 0x06, 0x50, 0x00, 0x3f, 0xa1, 0x25, 0x43, 0x45, 0x0f, 0xb5, 0xa7, - 0x00, 0x0b, 0x18, 0x9c, 0x0c, 0x4c, 0xbd, 0x91, 0x17, 0x1d, 0x00, 0x47, - 0x9c, 0xd2, 0x47, 0xa7, 0x40, 0xe5, 0x32, 0xab, 0x00, 0xef, 0x3d, 0xab, - 0xc0, 0x00, 0x4c, 0x39, 0x28, 0x3e, 0xab, 0x40, 0x05, 0x4f, 0x7f, 0x06, - 0x4a, 0x91, 0xae, 0x4d, 0xab, 0x40, 0x45, 0x2e, 0xe1, 0x30, 0xab, 0x00, - 0xe5, 0x33, 0xab, 0x00, 0xef, 0x75, 0x02, 0x40, 0x04, 0xb4, 0x0b, 0x2a, - 0x48, 0xa2, 0xc3, 0x97, 0xa7, 0x00, 0x44, 0x5d, 0x0e, 0x53, 0x02, 0x00, - 0x4a, 0xf4, 0x6b, 0x07, 0x1e, 0x00, 0x4c, 0xa6, 0x22, 0x6c, 0x1d, 0x00, - 0x4c, 0xaa, 0x55, 0x80, 0x1d, 0x00, 0x46, 0x27, 0x05, 0x80, 0x01, 0x00, - 0x46, 0x9c, 0xdd, 0x83, 0x01, 0x40, 0x45, 0x5c, 0x00, 0x03, 0x1e, 0x00, - 0x45, 0xf5, 0x06, 0x05, 0x1e, 0x40, 0x80, 0x44, 0xe1, 0x33, 0xa7, 0x00, - 0xe5, 0xe6, 0x00, 0x80, 0x2a, 0x44, 0x2f, 0xe1, 0x51, 0x02, 0x80, 0x1d, - 0x4a, 0x07, 0xac, 0xc3, 0xa7, 0x00, 0xef, 0x35, 0xa7, 0x00, 0xf5, 0x37, - 0xa7, 0x00, 0xf6, 0x39, 0xa7, 0x80, 0x04, 0xf9, 0x3d, 0xa7, 0x40, 0x54, - 0xf3, 0x3e, 0x3b, 0xa7, 0x40, 0x54, 0x4d, 0x0e, 0x90, 0x1d, 0x40, 0x06, - 0x50, 0x00, 0x01, 0xff, 0x45, 0x29, 0x38, 0xfd, 0x01, 0x00, 0x46, 0x04, - 0x6f, 0xe3, 0x01, 0x40, 0x4e, 0x4a, 0x7a, 0x31, 0xab, 0x00, 0x05, 0x51, - 0x00, 0x01, 0xff, 0x45, 0x29, 0x38, 0xe1, 0x00, 0x00, 0x45, 0xcb, 0x22, - 0x03, 0x01, 0x80, 0xb5, 0x01, 0xa3, 0x82, 0x01, 0xa4, 0x53, 0x45, 0x8d, - 0x22, 0xe0, 0x00, 0x00, 0x4a, 0xfb, 0xa8, 0xa3, 0x1e, 0x00, 0x4e, 0xd6, - 0x22, 0x03, 0x02, 0x00, 0x46, 0x04, 0x6f, 0x01, 0x01, 0x00, 0x46, 0xc2, - 0xdb, 0x05, 0x01, 0x00, 0xb2, 0x0c, 0x46, 0x27, 0x05, 0x65, 0x2c, 0x00, - 0x45, 0xad, 0x22, 0xe3, 0x00, 0x40, 0x4d, 0x54, 0x0e, 0x8f, 0x1d, 0x00, - 0xa9, 0x01, 0xff, 0x4d, 0xec, 0x70, 0x9a, 0x1e, 0x00, 0x03, 0xa2, 0x01, - 0x01, 0xff, 0x45, 0x5c, 0x00, 0xe5, 0x00, 0x80, 0x06, 0x45, 0xf5, 0x06, - 0x01, 0x1e, 0x40, 0x4a, 0x5b, 0xa3, 0xfb, 0x01, 0x40, 0x48, 0x30, 0x23, - 0xe4, 0x00, 0x80, 0x20, 0xaf, 0x01, 0xff, 0x02, 0xc6, 0x00, 0x06, 0x4a, - 0x88, 0x22, 0x01, 0x02, 0x40, 0x45, 0x5c, 0x00, 0x27, 0x02, 0x80, 0x06, - 0x45, 0xf5, 0x06, 0xa1, 0x1e, 0x40, 0x4b, 0x59, 0x95, 0xe1, 0x01, 0x40, - 0x4b, 0x59, 0x95, 0xdf, 0x01, 0x40, 0x44, 0x4d, 0x6b, 0xce, 0x01, 0x00, - 0x49, 0xa5, 0x04, 0xe2, 0x00, 0xc0, 0x00, 0x05, 0x19, 0x00, 0x01, 0xff, - 0x45, 0x29, 0x38, 0xa5, 0x1e, 0x00, 0x49, 0x50, 0x12, 0xad, 0x1e, 0x00, - 0x45, 0x8d, 0x22, 0xa7, 0x1e, 0x00, 0x4a, 0xfb, 0xa8, 0xa9, 0x1e, 0x00, - 0x45, 0xad, 0x22, 0xab, 0x1e, 0x40, 0x05, 0x19, 0x00, 0x01, 0xff, 0x45, - 0x29, 0x38, 0xaf, 0x1e, 0x00, 0x49, 0x50, 0x12, 0xb7, 0x1e, 0x00, 0x45, - 0x8d, 0x22, 0xb1, 0x1e, 0x00, 0x4a, 0xfb, 0xa8, 0xb3, 0x1e, 0x00, 0x45, - 0xad, 0x22, 0xb5, 0x1e, 0x40, 0x4d, 0x40, 0x82, 0x7b, 0x1d, 0x00, 0x4d, - 0xa2, 0x87, 0x7e, 0x1d, 0x40, 0xa1, 0x8d, 0x03, 0x02, 0xba, 0x06, 0xf1, - 0x02, 0x4c, 0x1d, 0x8c, 0xc0, 0x01, 0x00, 0x4c, 0x2d, 0x28, 0x94, 0x02, - 0x80, 0xdd, 0x02, 0x55, 0x71, 0x3b, 0x96, 0x02, 0x80, 0xc4, 0x02, 0x4d, - 0x44, 0x83, 0xc1, 0x01, 0x00, 0x5b, 0x5d, 0x1c, 0x95, 0x02, 0x00, 0x02, - 0x88, 0x00, 0x95, 0x02, 0xb3, 0x18, 0x4f, 0x7f, 0x72, 0xbb, 0x01, 0x00, - 0x58, 0x2d, 0x2b, 0x24, 0x1d, 0x00, 0x44, 0x2c, 0xa2, 0xbf, 0x01, 0x00, - 0x42, 0x7d, 0x21, 0xa6, 0x01, 0x40, 0x4e, 0x2c, 0x77, 0x8f, 0xa7, 0x00, - 0x0d, 0xf7, 0x3b, 0x0d, 0x4a, 0xdb, 0xaf, 0x97, 0x02, 0xc0, 0x00, 0x4a, - 0x6d, 0x47, 0x0f, 0xdf, 0x41, 0xe1, 0x00, 0x1d, 0x80, 0xda, 0x01, 0xe2, - 0x99, 0x02, 0x80, 0xce, 0x01, 0xe3, 0x04, 0x1d, 0x00, 0xe4, 0x05, 0x1d, - 0x00, 0xe5, 0x07, 0x1d, 0x80, 0xb4, 0x01, 0xe6, 0x30, 0xa7, 0x00, 0xe7, - 0x62, 0x02, 0x80, 0xa4, 0x01, 0xe8, 0x9c, 0x02, 0x00, 0xe9, 0x6a, 0x02, - 0x80, 0x94, 0x01, 0xea, 0x0a, 0x1d, 0x00, 0xeb, 0x0b, 0x1d, 0x00, 0xec, - 0x9f, 0x02, 0x80, 0x76, 0xed, 0x0d, 0x1d, 0x00, 0xee, 0x74, 0x02, 0x00, - 0xef, 0x0f, 0x1d, 0x80, 0x5b, 0xf0, 0x18, 0x1d, 0x00, 0xf1, 0xaf, 0xa7, - 0x00, 0xf2, 0x80, 0x02, 0x80, 0x36, 0xf3, 0x31, 0xa7, 0x00, 0xf4, 0x1b, - 0x1d, 0x80, 0x14, 0xf5, 0x1c, 0x1d, 0x00, 0xf6, 0x20, 0x1d, 0x00, 0xf7, - 0x21, 0x1d, 0x00, 0xf9, 0x8f, 0x02, 0x00, 0xfa, 0x22, 0x1d, 0x40, 0x06, - 0x46, 0x07, 0x01, 0xff, 0xe5, 0x7b, 0x2c, 0x00, 0xe7, 0x02, 0xdf, 0x01, - 0xeb, 0x10, 0xdf, 0x01, 0xed, 0xfa, 0xa7, 0x00, 0xf2, 0x1a, 0x1d, 0x40, - 0x4f, 0x89, 0x68, 0x46, 0xab, 0x00, 0x08, 0x8f, 0x14, 0x06, 0x42, 0x1d, - 0x04, 0x76, 0xa7, 0x40, 0xee, 0x0e, 0x1d, 0x00, 0xf2, 0x19, 0x1d, 0x40, - 0xe5, 0x76, 0x02, 0x00, 0x45, 0xb0, 0xe6, 0x10, 0x1d, 0x00, 0xf5, 0x15, - 0x1d, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x44, 0x1f, 0xa4, 0x04, 0xdf, - 0x01, 0x46, 0x27, 0x05, 0x0c, 0x1d, 0x40, 0x49, 0x63, 0xba, 0x81, 0x02, - 0x40, 0x4a, 0x1f, 0x24, 0x9b, 0x02, 0x40, 0x42, 0x53, 0x00, 0x06, 0x1d, - 0x00, 0x42, 0xb3, 0x27, 0x23, 0x1d, 0x40, 0x47, 0x3d, 0xcc, 0x03, 0x1d, - 0x40, 0xe5, 0x01, 0x1d, 0x40, 0x4d, 0x40, 0x0e, 0xc3, 0x01, 0x80, 0x11, - 0x07, 0x90, 0x14, 0x01, 0xff, 0x48, 0x42, 0xc3, 0xaa, 0x01, 0x00, 0x58, - 0x2d, 0x28, 0xa2, 0x02, 0x40, 0x54, 0x4d, 0x0e, 0x0a, 0xdf, 0x41, 0x06, - 0x50, 0x00, 0x01, 0xff, 0x44, 0x23, 0x0b, 0x0e, 0xdf, 0x01, 0x46, 0x27, - 0x05, 0xbe, 0x01, 0x40, 0x4c, 0x39, 0x28, 0xa1, 0x02, 0x40, 0x51, 0x4d, - 0x58, 0xad, 0x02, 0x00, 0x07, 0x75, 0x82, 0x01, 0xff, 0x45, 0x48, 0x0e, - 0x98, 0x02, 0x00, 0x4a, 0x54, 0x58, 0xac, 0x02, 0x40, 0x42, 0x9e, 0x01, - 0x25, 0x1d, 0x00, 0x4d, 0xb9, 0x83, 0xc2, 0x01, 0x40, 0x49, 0xeb, 0xb3, - 0xff, 0xa7, 0x00, 0xa9, 0x12, 0x09, 0x8e, 0x14, 0x06, 0x4a, 0xb9, 0xae, - 0xf7, 0xa7, 0x40, 0xe6, 0xfb, 0xa7, 0x00, 0xf0, 0xfc, 0xa7, 0x40, 0x46, - 0x50, 0xd5, 0xfe, 0xa7, 0x00, 0x49, 0xd5, 0x59, 0xfd, 0xa7, 0x40, 0x08, - 0xba, 0x05, 0x06, 0x44, 0x47, 0x10, 0x1d, 0x27, 0x40, 0x06, 0xc2, 0x05, - 0x11, 0x08, 0xfb, 0x1e, 0x01, 0xff, 0x42, 0xc1, 0xc4, 0x32, 0x01, 0x00, - 0x42, 0x17, 0x50, 0x52, 0x01, 0x40, 0xe1, 0x41, 0x00, 0x80, 0x94, 0x16, - 0xe2, 0x42, 0x00, 0x80, 0xd0, 0x15, 0xe3, 0x43, 0x00, 0x80, 0xe8, 0x14, - 0xe4, 0x44, 0x00, 0x80, 0x82, 0x14, 0xe5, 0x45, 0x00, 0x80, 0x86, 0x12, - 0xe6, 0x46, 0x00, 0x80, 0xe9, 0x11, 0xe7, 0x47, 0x00, 0x80, 0xfe, 0x10, - 0xe8, 0x48, 0x00, 0x80, 0x9d, 0x10, 0xe9, 0x49, 0x00, 0x80, 0xfa, 0x0e, - 0xea, 0x4a, 0x00, 0x80, 0xdb, 0x0e, 0xeb, 0x4b, 0x00, 0x80, 0x89, 0x0e, - 0xec, 0x4c, 0x00, 0x80, 0x84, 0x0d, 0xed, 0x4d, 0x00, 0x80, 0xc4, 0x0c, - 0xee, 0x4e, 0x00, 0x80, 0xd7, 0x0b, 0xef, 0x4f, 0x00, 0x80, 0x87, 0x09, - 0xf0, 0x50, 0x00, 0x80, 0xce, 0x08, 0xf1, 0x51, 0x00, 0x80, 0xb7, 0x08, - 0xf2, 0x52, 0x00, 0x80, 0xab, 0x07, 0xf3, 0x53, 0x00, 0x80, 0x87, 0x06, - 0xf4, 0x54, 0x00, 0x80, 0xd1, 0x04, 0xf5, 0x55, 0x00, 0x80, 0xd9, 0x02, - 0xf6, 0x56, 0x00, 0x80, 0x8f, 0x02, 0xf7, 0x57, 0x00, 0x80, 0xce, 0x01, - 0xf8, 0x58, 0x00, 0x80, 0xb7, 0x01, 0xf9, 0x59, 0x00, 0x80, 0x58, 0xfa, - 0x5a, 0x00, 0xc0, 0x00, 0x06, 0x50, 0x00, 0x01, 0xff, 0x45, 0x29, 0x38, - 0x79, 0x01, 0x00, 0xa3, 0x3a, 0xa4, 0x21, 0x44, 0x5d, 0x0e, 0x24, 0x02, - 0x00, 0x4a, 0xf4, 0x6b, 0x94, 0x1e, 0x00, 0x4c, 0xaa, 0x55, 0xc6, 0xa7, - 0x00, 0xb3, 0x01, 0xff, 0x45, 0x28, 0x05, 0xb5, 0x01, 0x00, 0x49, 0xb6, - 0xbe, 0x7f, 0x2c, 0x40, 0x48, 0x95, 0x2a, 0x6b, 0x2c, 0x00, 0x03, 0xb5, - 0x0b, 0x01, 0xff, 0x45, 0x5c, 0x00, 0x7b, 0x01, 0x00, 0x45, 0xf5, 0x06, - 0x92, 0x1e, 0x40, 0x44, 0x4d, 0x6b, 0x7d, 0x01, 0x00, 0x49, 0xa5, 0x04, - 0x90, 0x1e, 0x40, 0x06, 0x50, 0x00, 0x06, 0x43, 0xdc, 0x50, 0x1c, 0x02, - 0x40, 0x45, 0x29, 0x38, 0xdd, 0x00, 0x00, 0x4a, 0xa4, 0x04, 0x76, 0x01, - 0x00, 0xa4, 0x2b, 0x45, 0x8d, 0x22, 0xf2, 0x1e, 0x00, 0x44, 0x5d, 0x0e, - 0xb3, 0x01, 0x80, 0x18, 0x44, 0x92, 0x83, 0xfe, 0x1e, 0x00, 0x46, 0x04, - 0x6f, 0x32, 0x02, 0x00, 0x46, 0x27, 0x05, 0x4e, 0x02, 0x00, 0x45, 0xad, - 0x22, 0xf8, 0x1e, 0x40, 0x46, 0x5b, 0x00, 0xf6, 0x1e, 0x40, 0x48, 0x30, - 0x23, 0x78, 0x01, 0x00, 0x03, 0xb5, 0x0b, 0x01, 0xff, 0x45, 0x5c, 0x00, - 0x8e, 0x1e, 0x00, 0x45, 0xf5, 0x06, 0xf4, 0x1e, 0x40, 0x07, 0x57, 0x07, - 0x01, 0xff, 0x48, 0x30, 0x23, 0x8c, 0x1e, 0x00, 0x48, 0x99, 0x1d, 0x8a, - 0x1e, 0x40, 0x06, 0x50, 0x00, 0x06, 0x43, 0x2d, 0xa2, 0xf7, 0x01, 0x40, - 0x45, 0x29, 0x38, 0x82, 0x1e, 0x00, 0x4a, 0xa4, 0x04, 0x74, 0x01, 0x00, - 0xa4, 0x0c, 0x45, 0x8d, 0x22, 0x80, 0x1e, 0x00, 0x44, 0x5d, 0x0e, 0x72, - 0x2c, 0x40, 0x48, 0x30, 0x23, 0x84, 0x1e, 0x00, 0x03, 0xb5, 0x0b, 0x01, - 0xff, 0x45, 0x5c, 0x00, 0x86, 0x1e, 0x00, 0x45, 0xf5, 0x06, 0x88, 0x1e, - 0x40, 0x06, 0x50, 0x00, 0x26, 0x43, 0x15, 0x05, 0x68, 0xa7, 0x00, 0x4b, - 0x94, 0x9b, 0x62, 0xa7, 0x00, 0x07, 0xff, 0xd0, 0x04, 0xf9, 0x60, 0xa7, - 0x40, 0x42, 0x44, 0x0f, 0x9a, 0xa7, 0x00, 0x42, 0x17, 0x50, 0x9c, 0xa7, - 0x00, 0x42, 0x87, 0x13, 0x9e, 0xa7, 0x40, 0xa4, 0x0c, 0x44, 0x5d, 0x0e, - 0xb2, 0x01, 0x00, 0x45, 0xad, 0x22, 0x7c, 0x1e, 0x40, 0x4e, 0xa9, 0x3e, - 0x5e, 0xa7, 0x00, 0x48, 0x51, 0x12, 0x7e, 0x1e, 0x40, 0x80, 0x06, 0x46, - 0x63, 0x15, 0xb1, 0x01, 0x40, 0x43, 0x16, 0x00, 0x44, 0x02, 0x00, 0x05, - 0x51, 0x00, 0x01, 0xff, 0x45, 0x29, 0x38, 0xda, 0x00, 0x00, 0x45, 0xcb, - 0x22, 0x6c, 0x01, 0x00, 0xa3, 0xbd, 0x01, 0xa4, 0x75, 0x45, 0x8d, 0x22, - 0xd9, 0x00, 0x00, 0x02, 0x0b, 0x00, 0x3b, 0x4e, 0xd6, 0x22, 0x16, 0x02, - 0x00, 0x46, 0x04, 0x6f, 0x6a, 0x01, 0x80, 0x28, 0x46, 0xc2, 0xdb, 0x72, - 0x01, 0x00, 0x4a, 0x0f, 0xae, 0x6e, 0x01, 0x00, 0x46, 0x27, 0x05, 0xb8, - 0xa7, 0x00, 0x45, 0xad, 0x22, 0x68, 0x01, 0xc0, 0x00, 0x80, 0x01, 0xff, - 0x49, 0x5c, 0xa3, 0x78, 0x1e, 0x00, 0x45, 0xf5, 0x06, 0x74, 0x1e, 0x40, - 0x4e, 0xba, 0x73, 0x7a, 0x1e, 0x40, 0x48, 0xfd, 0xa8, 0xe6, 0x1e, 0x00, - 0x42, 0x5e, 0x01, 0xaf, 0x01, 0xc0, 0x00, 0x05, 0x19, 0x00, 0x01, 0xff, - 0x45, 0x29, 0x38, 0xe8, 0x1e, 0x00, 0x49, 0x50, 0x12, 0xf0, 0x1e, 0x00, - 0x45, 0x8d, 0x22, 0xea, 0x1e, 0x00, 0x4a, 0xfb, 0xa8, 0xec, 0x1e, 0x00, - 0x45, 0xad, 0x22, 0xee, 0x1e, 0x40, 0x48, 0x30, 0x23, 0xdc, 0x00, 0x80, - 0x1a, 0xaf, 0x01, 0xff, 0x47, 0x52, 0x12, 0xe4, 0x1e, 0x00, 0x05, 0x3d, - 0x01, 0x01, 0xff, 0x45, 0x29, 0x38, 0x70, 0x01, 0x00, 0x45, 0x8d, 0x22, - 0x14, 0x02, 0x40, 0x80, 0x01, 0xff, 0x04, 0x1a, 0x00, 0x06, 0x45, 0xf5, - 0x06, 0x72, 0x1e, 0x40, 0x45, 0x29, 0x38, 0xd7, 0x01, 0x00, 0x45, 0xf9, - 0x95, 0xd9, 0x01, 0x00, 0x45, 0x8d, 0x22, 0xdb, 0x01, 0x00, 0x46, 0x04, - 0x6f, 0xd5, 0x01, 0x40, 0x44, 0x4d, 0x6b, 0xd3, 0x01, 0x00, 0x49, 0xa5, - 0x04, 0xdb, 0x00, 0xc0, 0x00, 0x46, 0xf4, 0x06, 0x76, 0x1e, 0x40, 0x06, - 0x50, 0x00, 0x61, 0x44, 0xa8, 0x2c, 0xde, 0x00, 0x80, 0x4d, 0x04, 0xbf, - 0x0a, 0x37, 0x47, 0x80, 0xd2, 0x2a, 0xa7, 0x00, 0x06, 0x46, 0x07, 0x04, - 0xfa, 0x28, 0xa7, 0x40, 0xe1, 0x6f, 0x2c, 0x80, 0x1e, 0xe8, 0x8d, 0xa7, - 0x00, 0x49, 0x6b, 0x6e, 0x7e, 0xa7, 0x00, 0xeb, 0xb0, 0xa7, 0x00, 0xec, - 0x80, 0xa7, 0x00, 0xed, 0x9c, 0x01, 0x00, 0xf4, 0xb1, 0xa7, 0x00, 0xf6, - 0x45, 0x02, 0x40, 0x44, 0x2f, 0xe1, 0x70, 0x2c, 0x40, 0x44, 0x31, 0x11, - 0xbc, 0x01, 0x00, 0x43, 0x5f, 0x25, 0x84, 0x01, 0x00, 0x43, 0xd0, 0x09, - 0xa7, 0x01, 0x40, 0x4c, 0x39, 0x28, 0x64, 0xa7, 0xc0, 0x00, 0x52, 0x8b, - 0x2a, 0x66, 0xa7, 0x40, 0xa3, 0x31, 0xa4, 0x18, 0x44, 0x5d, 0x0e, 0xac, - 0x01, 0x00, 0x4a, 0xf4, 0x6b, 0x6e, 0x1e, 0x00, 0x4e, 0x53, 0x0e, 0xae, - 0x01, 0x00, 0x46, 0x27, 0x05, 0x66, 0x01, 0x40, 0x4e, 0xa9, 0x3e, 0x3e, - 0x02, 0x00, 0x03, 0xb5, 0x0b, 0x01, 0xff, 0x45, 0x5c, 0x00, 0x6a, 0x1e, - 0x00, 0x45, 0xf5, 0x06, 0x6c, 0x1e, 0x40, 0x44, 0x4d, 0x6b, 0x64, 0x01, - 0x00, 0x46, 0x7c, 0xbf, 0x62, 0x01, 0x00, 0x4f, 0x48, 0x6d, 0x70, 0x1e, - 0x00, 0x4a, 0x75, 0xac, 0x1a, 0x02, 0x40, 0x06, 0x50, 0x00, 0x31, 0x47, - 0xf0, 0xcb, 0x8b, 0xa7, 0x00, 0xa3, 0x1d, 0x46, 0xa6, 0xae, 0x9e, 0x1e, - 0x00, 0x48, 0x52, 0xc4, 0xd8, 0xa7, 0x00, 0x05, 0x0d, 0x07, 0x01, 0xff, - 0x49, 0xba, 0xb4, 0xae, 0xa7, 0x00, 0x50, 0x8a, 0x64, 0x4a, 0x02, 0x40, - 0x43, 0x55, 0x7a, 0x8f, 0x01, 0x00, 0x46, 0x04, 0xc8, 0xac, 0xa7, 0x40, - 0x45, 0x29, 0x38, 0x5a, 0x01, 0x80, 0x5c, 0xa3, 0x3b, 0xa4, 0x1b, 0x44, - 0x5d, 0x0e, 0xc5, 0xa7, 0x00, 0x4e, 0x41, 0x42, 0xa8, 0xa7, 0x00, 0xb3, - 0x01, 0xff, 0x53, 0xa7, 0x48, 0xc9, 0xa7, 0x00, 0x49, 0xb6, 0xbe, 0x7e, - 0x2c, 0x40, 0x4e, 0xa9, 0x3e, 0xcc, 0xa7, 0x00, 0x03, 0xb5, 0x0b, 0x01, - 0xff, 0x45, 0x5c, 0x00, 0x60, 0x1e, 0x00, 0x45, 0xf5, 0x06, 0x62, 0x1e, - 0xc0, 0x00, 0x4e, 0x93, 0x1d, 0x68, 0x1e, 0x40, 0x44, 0x4d, 0x6b, 0x60, - 0x01, 0x80, 0x12, 0x46, 0x7c, 0xbf, 0x5e, 0x01, 0x00, 0x49, 0xa5, 0x04, - 0x5c, 0x01, 0x00, 0x4a, 0x75, 0xac, 0x18, 0x02, 0x40, 0x4e, 0x93, 0x1d, - 0x66, 0x1e, 0x40, 0x4e, 0x93, 0x1d, 0x64, 0x1e, 0x40, 0x80, 0x26, 0x48, - 0xc2, 0xc0, 0xcb, 0xa7, 0x00, 0x08, 0x8f, 0x14, 0x06, 0x4a, 0x49, 0xb0, - 0x5c, 0xa7, 0x40, 0x4a, 0x35, 0xa6, 0x3e, 0xa7, 0x00, 0xe5, 0x8e, 0x01, - 0x00, 0x46, 0x4c, 0xd9, 0xf5, 0xa7, 0x00, 0x46, 0x7d, 0x28, 0xab, 0xa7, - 0x40, 0x47, 0x4c, 0xb0, 0x5a, 0xa7, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, - 0x45, 0x29, 0x38, 0x54, 0x01, 0x00, 0xa3, 0x3f, 0x02, 0x3b, 0x01, 0x1e, - 0x4e, 0xd6, 0x22, 0x12, 0x02, 0x00, 0x4a, 0xf4, 0x6b, 0x5e, 0x1e, 0x00, - 0x4e, 0x41, 0x42, 0xa6, 0xa7, 0x00, 0x46, 0x27, 0x05, 0x4c, 0x02, 0x00, - 0x44, 0x23, 0x17, 0x64, 0x2c, 0x40, 0x02, 0xc6, 0x00, 0x06, 0x4a, 0x88, - 0x22, 0x10, 0x02, 0x40, 0x45, 0x5c, 0x00, 0x58, 0x1e, 0x00, 0x45, 0xf5, - 0x06, 0x5a, 0x1e, 0xc0, 0x00, 0x4b, 0x59, 0x95, 0x5c, 0x1e, 0x40, 0x44, - 0x4d, 0x6b, 0x58, 0x01, 0x00, 0x46, 0x7c, 0xbf, 0x56, 0x01, 0x40, 0x06, - 0x50, 0x00, 0x01, 0xff, 0x4f, 0xa8, 0x3e, 0x58, 0xa7, 0x00, 0x58, 0x85, - 0x2a, 0x56, 0xa7, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x45, 0x29, 0x38, - 0x54, 0x1e, 0x00, 0x49, 0x98, 0x1d, 0x56, 0x1e, 0x00, 0x48, 0xa2, 0xc3, - 0x52, 0xa7, 0x00, 0x44, 0x5d, 0x0e, 0xa4, 0x01, 0x00, 0xb3, 0x01, 0xff, - 0x4c, 0x41, 0x92, 0x54, 0xa7, 0x00, 0x45, 0x28, 0x05, 0x63, 0x2c, 0xc0, - 0x00, 0x52, 0x8b, 0x2a, 0x50, 0xa7, 0x40, 0x06, 0x50, 0x00, 0x24, 0xe9, - 0xa2, 0x01, 0x00, 0x4b, 0x39, 0x9c, 0xc0, 0xa7, 0x00, 0x44, 0x6b, 0x7a, - 0xb6, 0xa7, 0x00, 0xef, 0x4e, 0xa7, 0x00, 0x04, 0xcc, 0x04, 0x04, 0xf5, - 0x22, 0x02, 0x40, 0xe5, 0x90, 0x01, 0x00, 0xef, 0x86, 0x01, 0x40, 0x45, - 0x29, 0x38, 0xd3, 0x00, 0x00, 0x45, 0xcb, 0x22, 0x4e, 0x01, 0x00, 0xa3, - 0xe3, 0x01, 0xa4, 0xa8, 0x01, 0x45, 0x8d, 0x22, 0xd2, 0x00, 0x00, 0x02, - 0x0b, 0x00, 0x6e, 0x4e, 0xd6, 0x22, 0x0e, 0x02, 0x00, 0x02, 0x13, 0x01, - 0x58, 0xad, 0x38, 0x46, 0xc2, 0xdb, 0xea, 0x01, 0x80, 0x2b, 0x46, 0x27, - 0x05, 0xd8, 0x00, 0x80, 0x1e, 0x45, 0xad, 0x22, 0xd5, 0x00, 0xc0, 0x00, - 0x05, 0x19, 0x00, 0x01, 0xff, 0x45, 0x29, 0x38, 0x4c, 0x1e, 0x00, 0x49, - 0x2f, 0x23, 0x4e, 0x1e, 0x00, 0x46, 0x04, 0x6f, 0x2c, 0x02, 0x40, 0x4a, - 0x5b, 0xa3, 0xfe, 0x01, 0x40, 0x4b, 0x59, 0x95, 0xec, 0x01, 0x40, 0x45, - 0x05, 0x6f, 0x4c, 0x01, 0x80, 0x06, 0x4b, 0xa7, 0x22, 0x9f, 0x01, 0x40, - 0x05, 0x19, 0x00, 0x01, 0xff, 0x45, 0x29, 0x38, 0x52, 0x1e, 0x00, 0x45, - 0x8d, 0x22, 0x50, 0x1e, 0x40, 0x51, 0x5b, 0x5b, 0x4a, 0xa7, 0x00, 0x42, - 0x1f, 0x00, 0x4c, 0xa7, 0x40, 0x48, 0xfd, 0xa8, 0xce, 0x1e, 0x00, 0x42, - 0x5e, 0x01, 0xa0, 0x01, 0xc0, 0x00, 0x05, 0x19, 0x00, 0x01, 0xff, 0x45, - 0x29, 0x38, 0xda, 0x1e, 0x00, 0x49, 0x50, 0x12, 0xe2, 0x1e, 0x00, 0x45, - 0x8d, 0x22, 0xdc, 0x1e, 0x00, 0x4a, 0xfb, 0xa8, 0xde, 0x1e, 0x00, 0x45, - 0xad, 0x22, 0xe0, 0x1e, 0x40, 0x48, 0x30, 0x23, 0xd6, 0x00, 0x80, 0x2b, - 0xaf, 0x01, 0xff, 0x02, 0xc6, 0x00, 0x11, 0x05, 0x3d, 0x01, 0x01, 0xff, - 0x45, 0x29, 0x38, 0x50, 0x01, 0x00, 0x45, 0x8d, 0x22, 0x0c, 0x02, 0x40, - 0x45, 0x5c, 0x00, 0x2e, 0x02, 0x80, 0x06, 0x45, 0xf5, 0x06, 0xcc, 0x1e, - 0x40, 0x4b, 0x59, 0x95, 0x30, 0x02, 0x40, 0x4b, 0x59, 0x95, 0x2a, 0x02, - 0x40, 0x44, 0x4d, 0x6b, 0xd1, 0x01, 0x00, 0x49, 0xa5, 0x04, 0xd4, 0x00, - 0xc0, 0x00, 0x05, 0x19, 0x00, 0x01, 0xff, 0x45, 0x29, 0x38, 0xd0, 0x1e, - 0x00, 0x49, 0x50, 0x12, 0xd8, 0x1e, 0x00, 0x45, 0x8d, 0x22, 0xd2, 0x1e, - 0x00, 0x4a, 0xfb, 0xa8, 0xd4, 0x1e, 0x00, 0x45, 0xad, 0x22, 0xd6, 0x1e, - 0x40, 0x06, 0x50, 0x00, 0x04, 0xea, 0xca, 0x01, 0x40, 0x45, 0x29, 0x38, - 0x43, 0x01, 0x00, 0xa3, 0x45, 0xa4, 0x2c, 0x45, 0x8d, 0x22, 0xf8, 0x01, - 0x00, 0xac, 0x12, 0x4e, 0x41, 0x42, 0xa4, 0xa7, 0x00, 0x4e, 0xf2, 0x7a, - 0xcb, 0x01, 0x00, 0x45, 0xad, 0x22, 0xd1, 0x00, 0x40, 0x48, 0x69, 0x56, - 0x9d, 0x01, 0x00, 0x49, 0xf5, 0x6b, 0x48, 0x1e, 0x00, 0x4d, 0x32, 0x85, - 0x20, 0x02, 0x40, 0x48, 0x95, 0x2a, 0x90, 0xa7, 0x00, 0x03, 0xb5, 0x0b, - 0x01, 0xff, 0x45, 0x5c, 0x00, 0x44, 0x1e, 0x00, 0x45, 0xf5, 0x06, 0x46, - 0x1e, 0x40, 0x44, 0x4d, 0x6b, 0x47, 0x01, 0x00, 0x46, 0x7c, 0xbf, 0x45, - 0x01, 0x00, 0x4f, 0x48, 0x6d, 0x4a, 0x1e, 0x40, 0x06, 0x50, 0x00, 0x1a, - 0x05, 0x7e, 0x02, 0x01, 0xff, 0x48, 0x0a, 0xc0, 0xd6, 0xa7, 0x00, 0x07, - 0x25, 0xcb, 0x01, 0xff, 0x42, 0x0f, 0x07, 0xfa, 0x1e, 0x00, 0xf6, 0xfc, - 0x1e, 0x40, 0x45, 0x29, 0x38, 0x3e, 0x1e, 0x00, 0x04, 0xb4, 0x0b, 0x06, - 0x44, 0x5d, 0x0e, 0x6e, 0x2c, 0x40, 0x45, 0x5c, 0x00, 0x40, 0x1e, 0x00, - 0x45, 0xf5, 0x06, 0x42, 0x1e, 0x40, 0x06, 0x50, 0x00, 0x11, 0x45, 0x33, - 0xe1, 0xda, 0xa7, 0x80, 0x04, 0xea, 0xc7, 0x01, 0x40, 0x4c, 0x39, 0x28, - 0xdc, 0xa7, 0x40, 0x45, 0x29, 0x38, 0x39, 0x01, 0x00, 0xa2, 0x56, 0xa3, - 0x42, 0x02, 0x3b, 0x01, 0x2b, 0x4b, 0xc3, 0x9a, 0x48, 0xa7, 0x00, 0x4a, - 0xf4, 0x6b, 0x3a, 0x1e, 0x00, 0x07, 0x7d, 0x02, 0x0f, 0xb3, 0x01, 0xff, - 0x4d, 0xf3, 0x7a, 0xc8, 0x01, 0x00, 0x45, 0x28, 0x05, 0x41, 0x01, 0x40, - 0x43, 0xd4, 0x09, 0x3f, 0x01, 0x00, 0x45, 0xad, 0x22, 0x62, 0x2c, 0x40, - 0x47, 0x52, 0x12, 0x36, 0x1e, 0x80, 0x06, 0x48, 0x27, 0xa7, 0x60, 0x2c, - 0x40, 0x4b, 0x59, 0x95, 0x38, 0x1e, 0x40, 0x44, 0x4d, 0x6b, 0x3d, 0x01, - 0x00, 0x46, 0x7c, 0xbf, 0x3b, 0x01, 0x00, 0x4f, 0x48, 0x6d, 0x3c, 0x1e, - 0x40, 0x42, 0x17, 0x00, 0x3d, 0x02, 0x00, 0x43, 0xa1, 0xa1, 0xad, 0xa7, - 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x45, 0x29, 0x38, 0x30, 0x1e, 0x00, - 0xa3, 0x33, 0xa4, 0x1f, 0x44, 0x5d, 0x0e, 0x98, 0x01, 0x00, 0x4a, 0xf4, - 0x6b, 0x34, 0x1e, 0x00, 0x4e, 0x41, 0x42, 0xa2, 0xa7, 0x00, 0x46, 0x27, - 0x05, 0x40, 0xa7, 0xc0, 0x00, 0x54, 0xa3, 0x3e, 0x44, 0xa7, 0x40, 0x48, - 0x95, 0x2a, 0x69, 0x2c, 0x00, 0x4e, 0xa9, 0x3e, 0x42, 0xa7, 0x00, 0x48, - 0x51, 0x12, 0x32, 0x1e, 0x40, 0x44, 0x4d, 0x6b, 0xe8, 0x01, 0x00, 0x46, - 0x7c, 0xbf, 0x36, 0x01, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0xa3, 0x06, - 0x46, 0x27, 0x05, 0x48, 0x02, 0x40, 0x49, 0xa5, 0x04, 0x34, 0x01, 0x00, - 0x4b, 0x81, 0x4e, 0xb2, 0xa7, 0x40, 0x06, 0x50, 0x00, 0x26, 0x07, 0x6c, - 0x6e, 0x0a, 0x43, 0xf0, 0x04, 0x96, 0x01, 0x00, 0xf3, 0x6c, 0xa7, 0x40, - 0xe4, 0x79, 0xa7, 0x00, 0xe6, 0x7b, 0xa7, 0x00, 0xe7, 0x7d, 0xa7, 0x00, - 0xf2, 0x82, 0xa7, 0x00, 0xf3, 0x84, 0xa7, 0x00, 0xf4, 0x86, 0xa7, 0x40, - 0x45, 0x29, 0x38, 0xcd, 0x00, 0x00, 0x45, 0xcb, 0x22, 0x2c, 0x01, 0x00, - 0xa3, 0x59, 0xa4, 0x31, 0x45, 0x8d, 0x22, 0xcc, 0x00, 0x00, 0x4a, 0xfb, - 0xa8, 0xc8, 0x1e, 0x00, 0x4e, 0xd6, 0x22, 0x0a, 0x02, 0x00, 0x46, 0x04, - 0x6f, 0x2a, 0x01, 0x00, 0x46, 0xc2, 0xdb, 0x2e, 0x01, 0x00, 0x46, 0x27, - 0x05, 0x97, 0x01, 0x00, 0x45, 0xad, 0x22, 0x28, 0x01, 0xc0, 0x00, 0x46, - 0xf4, 0x06, 0x2c, 0x1e, 0x40, 0x48, 0x30, 0x23, 0xcf, 0x00, 0x80, 0x19, - 0xaf, 0x01, 0xff, 0x02, 0xc6, 0x00, 0x06, 0x4a, 0x88, 0x22, 0x08, 0x02, - 0x40, 0x45, 0x5c, 0x00, 0x30, 0x01, 0x00, 0x45, 0xf5, 0x06, 0xca, 0x1e, - 0x40, 0x4a, 0x5b, 0xa3, 0x2e, 0x1e, 0x40, 0x44, 0x4d, 0x6b, 0xcf, 0x01, - 0x00, 0x49, 0xa5, 0x04, 0xce, 0x00, 0x40, 0x06, 0x50, 0x00, 0x12, 0x45, - 0x4d, 0xd9, 0x75, 0x2c, 0x00, 0x43, 0xfd, 0x09, 0x26, 0xa7, 0x00, 0x44, - 0xd2, 0xef, 0xf6, 0x01, 0x40, 0x4b, 0xab, 0x97, 0x2a, 0x1e, 0x00, 0xa3, - 0x2b, 0xa4, 0x0c, 0x44, 0x5d, 0x0e, 0xaa, 0xa7, 0x00, 0x46, 0x27, 0x05, - 0x26, 0x01, 0x40, 0x48, 0x95, 0x2a, 0x67, 0x2c, 0x00, 0x48, 0x30, 0x23, - 0x26, 0x1e, 0x00, 0x03, 0xb5, 0x0b, 0x01, 0xff, 0x45, 0x5c, 0x00, 0x22, - 0x1e, 0x00, 0x45, 0xf5, 0x06, 0x24, 0x1e, 0x40, 0x44, 0x4d, 0x6b, 0x1e, - 0x02, 0x00, 0x46, 0x7c, 0xbf, 0x28, 0x1e, 0x00, 0x49, 0xa5, 0x04, 0x24, - 0x01, 0x40, 0x06, 0x50, 0x00, 0x23, 0x44, 0x5e, 0x20, 0x94, 0x01, 0x00, - 0x42, 0x22, 0x00, 0xa2, 0x01, 0x00, 0x07, 0x2e, 0x28, 0x01, 0xff, 0xe1, - 0xba, 0xa7, 0x00, 0xe9, 0xbc, 0xa7, 0x00, 0x44, 0x2a, 0x03, 0x41, 0x02, - 0x00, 0xf5, 0xbe, 0xa7, 0x40, 0x45, 0x29, 0x38, 0xf4, 0x01, 0x00, 0x45, - 0xcb, 0x22, 0x1e, 0x01, 0x00, 0xa3, 0x1e, 0x49, 0x98, 0x1d, 0x20, 0x01, - 0x00, 0x44, 0x5d, 0x0e, 0x93, 0x01, 0x00, 0x46, 0x04, 0x6f, 0x20, 0x1e, - 0x00, 0x4e, 0x41, 0x42, 0xa0, 0xa7, 0x00, 0x46, 0x27, 0x05, 0xe4, 0x01, - 0x40, 0x44, 0x4d, 0x6b, 0xe6, 0x01, 0x00, 0x46, 0x7c, 0xbf, 0x22, 0x01, - 0x00, 0x49, 0xa5, 0x04, 0x1c, 0x01, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, - 0x49, 0x98, 0x1d, 0x1e, 0x1e, 0x00, 0x44, 0x5d, 0x0e, 0x91, 0x01, 0x00, - 0x46, 0x27, 0x05, 0x98, 0xa7, 0x40, 0x06, 0x50, 0x00, 0x3b, 0x0e, 0xbc, - 0x76, 0x2b, 0x42, 0x1d, 0x01, 0x4a, 0x01, 0x00, 0x42, 0xa4, 0x02, 0xa9, - 0x01, 0x00, 0xf4, 0x6a, 0xa7, 0x80, 0x16, 0x42, 0xb3, 0x27, 0xb7, 0x01, - 0xc0, 0x00, 0x80, 0x01, 0xff, 0x48, 0x09, 0x13, 0xb8, 0x01, 0x00, 0x4a, - 0xf4, 0x95, 0xee, 0x01, 0x40, 0xe8, 0xd0, 0x00, 0x40, 0x42, 0x9e, 0x01, - 0x24, 0xa7, 0x00, 0x43, 0x68, 0x00, 0x22, 0xa7, 0x40, 0x45, 0x29, 0x38, - 0xc9, 0x00, 0x00, 0x45, 0xcb, 0x22, 0x14, 0x01, 0x00, 0xa3, 0x64, 0xa4, - 0x43, 0x45, 0x8d, 0x22, 0xc8, 0x00, 0x00, 0x4a, 0xfb, 0xa8, 0xba, 0x1e, - 0x00, 0x4e, 0xd6, 0x22, 0x06, 0x02, 0x00, 0x46, 0x04, 0x6f, 0x12, 0x01, - 0x80, 0x19, 0x46, 0xc2, 0xdb, 0x18, 0x01, 0x00, 0x46, 0x27, 0x05, 0x46, - 0x02, 0x00, 0x45, 0xad, 0x22, 0xbc, 0x1e, 0xc0, 0x00, 0x46, 0xf4, 0x06, - 0x1a, 0x1e, 0x40, 0x05, 0x19, 0x00, 0x01, 0xff, 0x45, 0x29, 0x38, 0x16, - 0x1e, 0x00, 0x45, 0x8d, 0x22, 0x14, 0x1e, 0x40, 0x48, 0x30, 0x23, 0xcb, - 0x00, 0x00, 0xaf, 0x01, 0xff, 0x02, 0xc6, 0x00, 0x06, 0x4a, 0x88, 0x22, - 0x04, 0x02, 0x40, 0x45, 0x5c, 0x00, 0x16, 0x01, 0x00, 0x45, 0xf5, 0x06, - 0xb8, 0x1e, 0x40, 0x44, 0x4d, 0x6b, 0x1a, 0x01, 0x00, 0x46, 0x7c, 0xbf, - 0x28, 0x02, 0x80, 0x32, 0x49, 0xa5, 0x04, 0xca, 0x00, 0xc0, 0x00, 0x80, - 0x01, 0xff, 0x04, 0x1a, 0x00, 0x06, 0x45, 0xf5, 0x06, 0x18, 0x1e, 0x40, - 0x45, 0x29, 0x38, 0xbe, 0x1e, 0x00, 0x49, 0x50, 0x12, 0xc6, 0x1e, 0x00, - 0x45, 0x8d, 0x22, 0xc0, 0x1e, 0x00, 0x4a, 0xfb, 0xa8, 0xc2, 0x1e, 0x00, - 0x45, 0xad, 0x22, 0xc4, 0x1e, 0x40, 0x4a, 0x6f, 0xa3, 0x1c, 0x1e, 0x40, - 0x06, 0x50, 0x00, 0x0b, 0xfa, 0xf1, 0x01, 0xc0, 0x00, 0x4b, 0xf3, 0x95, - 0xc4, 0x01, 0x40, 0xa3, 0x3d, 0x04, 0xb4, 0x0b, 0x2d, 0x44, 0x5d, 0x0e, - 0x8a, 0x01, 0x00, 0x4a, 0xf4, 0x6b, 0x0e, 0x1e, 0x00, 0xb3, 0x06, 0x46, - 0x9c, 0xdd, 0x8b, 0x01, 0x40, 0x53, 0xa7, 0x48, 0xc7, 0xa7, 0x00, 0x4d, - 0xd3, 0x83, 0xf2, 0x01, 0x80, 0x06, 0x45, 0x28, 0x05, 0x10, 0x01, 0x40, - 0x4b, 0xf3, 0x95, 0xc5, 0x01, 0x40, 0x45, 0x5c, 0x00, 0x0a, 0x1e, 0x00, - 0x45, 0xf5, 0x06, 0x0c, 0x1e, 0x40, 0x44, 0x4d, 0x6b, 0x0e, 0x01, 0x00, - 0x46, 0x7c, 0xbf, 0x10, 0x1e, 0x00, 0x4f, 0x48, 0x6d, 0x12, 0x1e, 0x40, - 0x06, 0x50, 0x00, 0x1f, 0x42, 0x49, 0x00, 0xb3, 0xa7, 0x00, 0x4f, 0x65, - 0x6e, 0xd0, 0xa7, 0x00, 0x42, 0x10, 0x00, 0x6e, 0xa7, 0x00, 0x48, 0x32, - 0xc9, 0x2c, 0xa7, 0xc0, 0x00, 0x4b, 0xfe, 0x95, 0x2e, 0xa7, 0x40, 0x45, - 0x29, 0x38, 0x06, 0x01, 0x00, 0x43, 0x16, 0x00, 0x92, 0xa7, 0x00, 0xa3, - 0x18, 0x49, 0x98, 0x1d, 0x0a, 0x01, 0x00, 0x44, 0x5d, 0x0e, 0x87, 0x01, - 0x00, 0x4c, 0xaa, 0x55, 0xc4, 0xa7, 0x00, 0x46, 0x27, 0x05, 0x3b, 0x02, - 0x40, 0x44, 0x4d, 0x6b, 0x0c, 0x01, 0x00, 0x46, 0x7c, 0xbf, 0xc7, 0x00, - 0x80, 0x06, 0x49, 0xa5, 0x04, 0x08, 0x01, 0x40, 0x4a, 0x5b, 0xa3, 0x08, - 0x1e, 0x40, 0x06, 0x50, 0x00, 0x0c, 0x43, 0x45, 0x0f, 0xb4, 0xa7, 0x00, - 0x47, 0x9c, 0xd2, 0x46, 0xa7, 0x40, 0x04, 0xb4, 0x0b, 0x1e, 0x48, 0xa2, - 0xc3, 0x96, 0xa7, 0x00, 0x44, 0x5d, 0x0e, 0x81, 0x01, 0x00, 0x4a, 0xf4, - 0x6b, 0x06, 0x1e, 0x00, 0x46, 0x27, 0x05, 0x43, 0x02, 0x00, 0x46, 0x9c, - 0xdd, 0x82, 0x01, 0x40, 0x45, 0x5c, 0x00, 0x02, 0x1e, 0x00, 0x45, 0xf5, - 0x06, 0x04, 0x1e, 0x40, 0x06, 0x50, 0x00, 0x43, 0xe1, 0x32, 0xa7, 0x00, - 0xe5, 0xc6, 0x00, 0x80, 0x29, 0x48, 0xba, 0xc3, 0x89, 0x01, 0x00, 0x44, - 0x2f, 0xe1, 0x6d, 0x2c, 0x00, 0x4a, 0x07, 0xac, 0xc2, 0xa7, 0x00, 0xef, + 0x40, 0x44, 0xc9, 0x1d, 0x57, 0x1c, 0x00, 0x42, 0x01, 0x26, 0x56, 0x1c, + 0x40, 0x43, 0xd2, 0x05, 0x55, 0x1c, 0x00, 0x43, 0xf6, 0x06, 0x54, 0x1c, + 0x40, 0x04, 0x95, 0x83, 0x06, 0x44, 0xbc, 0xde, 0xdb, 0x02, 0x40, 0x4c, + 0xc4, 0x3d, 0x9b, 0x16, 0x00, 0x07, 0xec, 0x05, 0x0c, 0x55, 0xbb, 0x3d, + 0x9c, 0x16, 0x00, 0x4a, 0x27, 0xb1, 0x80, 0x16, 0x40, 0x44, 0xe9, 0xee, + 0x90, 0x16, 0x00, 0x45, 0xb6, 0xe4, 0x81, 0x16, 0x00, 0xa3, 0x8f, 0x01, + 0x44, 0x79, 0xef, 0x87, 0x16, 0x00, 0x02, 0x89, 0x00, 0x73, 0x45, 0x5f, + 0xe6, 0x83, 0x16, 0x00, 0x44, 0x0d, 0xf0, 0x8c, 0x16, 0x00, 0xa9, 0x59, + 0x44, 0x19, 0xf1, 0x82, 0x16, 0x00, 0x44, 0x49, 0xf1, 0x8b, 0x16, 0x00, + 0xae, 0x3f, 0xaf, 0x33, 0x45, 0xcf, 0xe9, 0x9a, 0x16, 0x00, 0x44, 0x75, + 0xf2, 0x8f, 0x16, 0x00, 0xb3, 0x19, 0x45, 0x46, 0xeb, 0x88, 0x16, 0x00, + 0xb5, 0x01, 0xff, 0x43, 0x74, 0x0f, 0x86, 0x16, 0x00, 0x47, 0xef, 0xd1, + 0x97, 0x16, 0x00, 0xf2, 0x92, 0x16, 0x40, 0x43, 0x90, 0x17, 0x84, 0x16, + 0x00, 0x45, 0x78, 0xeb, 0x8e, 0x16, 0x40, 0x42, 0x4e, 0x1f, 0x91, 0x16, + 0x00, 0xf2, 0x96, 0x16, 0x40, 0x46, 0xea, 0xdb, 0x8d, 0x16, 0x00, 0x43, + 0xb5, 0x00, 0x85, 0x16, 0x40, 0x43, 0xd8, 0x09, 0x98, 0x16, 0x00, 0x46, + 0xae, 0xde, 0x94, 0x16, 0x40, 0x45, 0xc0, 0xe4, 0x95, 0x16, 0x00, 0x45, + 0xaf, 0xde, 0x93, 0x16, 0x00, 0x49, 0x09, 0xbc, 0x99, 0x16, 0x40, 0x44, + 0xa5, 0xef, 0x8a, 0x16, 0x00, 0x43, 0xe6, 0x20, 0x89, 0x16, 0x40, 0x47, + 0x15, 0x08, 0xbb, 0xce, 0x41, 0x49, 0x92, 0xb7, 0x75, 0xf7, 0x01, 0x02, + 0x18, 0x00, 0x0f, 0xb4, 0x01, 0xff, 0x4b, 0xf5, 0x98, 0xd1, 0xf6, 0x01, + 0x44, 0xe1, 0xf1, 0x19, 0xf4, 0x41, 0x4f, 0xc8, 0x6a, 0x47, 0x24, 0x00, + 0xa2, 0x2e, 0xa3, 0x20, 0xa4, 0x12, 0x44, 0xbb, 0x51, 0x42, 0x24, 0x00, + 0x44, 0xac, 0x0e, 0x40, 0x24, 0x00, 0x4d, 0x4b, 0x84, 0x43, 0x24, 0x40, + 0x43, 0xf9, 0x03, 0x48, 0x24, 0x00, 0x4f, 0x85, 0x71, 0x4a, 0x24, 0x40, + 0x44, 0x1a, 0x6f, 0x41, 0x24, 0x00, 0x56, 0xf7, 0x37, 0x49, 0x24, 0x40, + 0x4a, 0xe3, 0xa9, 0x44, 0x24, 0x00, 0x46, 0xf6, 0xde, 0x45, 0x24, 0x00, + 0x59, 0xab, 0x25, 0x46, 0x24, 0x40, 0x5a, 0x80, 0x20, 0xfc, 0xff, 0x00, + 0x06, 0x50, 0x43, 0x06, 0x51, 0xd6, 0x5d, 0xff, 0x23, 0x40, 0x0e, 0xfb, + 0x75, 0x06, 0x46, 0x96, 0x63, 0x5d, 0x2e, 0x40, 0x44, 0xa5, 0x01, 0xa7, + 0x29, 0x00, 0x42, 0x50, 0x02, 0xa6, 0x29, 0x40, 0x05, 0x69, 0x70, 0xda, + 0x24, 0xa1, 0x87, 0x1d, 0xa5, 0xa2, 0x0d, 0xa9, 0x8a, 0x0d, 0x03, 0x6b, + 0xd7, 0xed, 0x09, 0xaf, 0xc0, 0x04, 0x4d, 0x7e, 0x87, 0x10, 0xcc, 0x01, + 0xb5, 0xb6, 0x03, 0x16, 0x65, 0x38, 0x01, 0xff, 0x4a, 0xad, 0xa8, 0x4f, + 0xe1, 0x01, 0x06, 0xef, 0x06, 0xe4, 0x02, 0xac, 0x55, 0xb3, 0x21, 0x05, + 0xeb, 0x31, 0x01, 0xff, 0xe2, 0x30, 0xe1, 0x01, 0xe4, 0x36, 0xe1, 0x01, + 0xe7, 0x35, 0xe1, 0x01, 0xea, 0x32, 0xe1, 0x01, 0xed, 0x31, 0xe1, 0x01, + 0xf3, 0x34, 0xe1, 0x01, 0xf6, 0x33, 0xe1, 0x41, 0x04, 0x5b, 0x03, 0x06, + 0x52, 0xcb, 0x56, 0x3d, 0xe1, 0x41, 0x04, 0x42, 0x1b, 0x06, 0x45, 0x7c, + 0xec, 0x3c, 0xe1, 0x41, 0x46, 0xbc, 0xd9, 0x3a, 0xe1, 0x01, 0x4c, 0x57, + 0x90, 0x3b, 0xe1, 0x01, 0x48, 0x28, 0x85, 0x39, 0xe1, 0x01, 0x46, 0x1e, + 0x1d, 0x37, 0xe1, 0x01, 0x45, 0x3c, 0xeb, 0x38, 0xe1, 0x41, 0x06, 0xed, + 0x05, 0x06, 0x4c, 0xeb, 0x92, 0x4e, 0xe1, 0x41, 0xe1, 0x24, 0xe1, 0x81, + 0xf9, 0x01, 0x42, 0x37, 0x00, 0x08, 0xe1, 0x01, 0xa4, 0xe6, 0x01, 0xe5, + 0x2a, 0xe1, 0x81, 0xdc, 0x01, 0x42, 0x0c, 0x08, 0x15, 0xe1, 0x01, 0x42, + 0x24, 0x02, 0x22, 0xe1, 0x01, 0x42, 0x22, 0x00, 0x04, 0xe1, 0x81, 0xc4, + 0x01, 0xe9, 0x26, 0xe1, 0x01, 0x42, 0x1b, 0x02, 0x0e, 0xe1, 0x01, 0x42, + 0x74, 0x00, 0x09, 0xe1, 0x01, 0xad, 0xa7, 0x01, 0xae, 0x65, 0xef, 0x28, + 0xe1, 0x81, 0x5c, 0xb0, 0x50, 0x42, 0x43, 0x14, 0x17, 0xe1, 0x01, 0xb2, + 0x3e, 0x42, 0x40, 0x06, 0x0a, 0xe1, 0x01, 0xb4, 0x26, 0xf5, 0x27, 0xe1, + 0x01, 0x42, 0xf5, 0x0a, 0x12, 0xe1, 0x01, 0xf7, 0x2c, 0xe1, 0x01, 0xb8, + 0x0c, 0x42, 0xbc, 0x22, 0x18, 0xe1, 0x01, 0x42, 0x59, 0x00, 0x0b, 0xe1, + 0x41, 0xe1, 0x06, 0xe1, 0x01, 0x42, 0xbc, 0x22, 0x1b, 0xe1, 0x41, 0xe1, + 0x03, 0xe1, 0x01, 0x42, 0x40, 0x06, 0x01, 0xe1, 0x01, 0x42, 0xed, 0x26, + 0x14, 0xe1, 0x41, 0xe1, 0x16, 0xe1, 0x01, 0x42, 0x71, 0x00, 0x23, 0xe1, + 0x41, 0xe1, 0x1a, 0xe1, 0x01, 0x42, 0x74, 0x00, 0x21, 0xe1, 0x41, 0xef, + 0x29, 0xe1, 0x41, 0xe1, 0x05, 0xe1, 0x01, 0x42, 0x37, 0x00, 0x0c, 0xe1, + 0x01, 0x42, 0x1b, 0x02, 0x07, 0xe1, 0x01, 0xb0, 0x24, 0x42, 0x43, 0x14, + 0x19, 0xe1, 0x01, 0x42, 0x71, 0x00, 0x11, 0xe1, 0x01, 0xb4, 0x06, 0x42, + 0xbc, 0x22, 0x10, 0xe1, 0x41, 0xe1, 0x02, 0xe1, 0x01, 0x42, 0x40, 0x06, + 0x0d, 0xe1, 0x01, 0x42, 0xed, 0x26, 0x13, 0xe1, 0x41, 0xe1, 0x1c, 0xe1, + 0x01, 0x42, 0x74, 0x00, 0x1e, 0xe1, 0x41, 0xe1, 0x00, 0xe1, 0x01, 0x42, + 0x74, 0x00, 0x20, 0xe1, 0x41, 0xe8, 0x1f, 0xe1, 0x41, 0xe5, 0x2b, 0xe1, + 0x41, 0xe1, 0x0f, 0xe1, 0x01, 0x42, 0x74, 0x00, 0x1d, 0xe1, 0x41, 0xe1, + 0x25, 0xe1, 0x41, 0x45, 0x12, 0x0b, 0x48, 0xe1, 0x01, 0xa6, 0x2e, 0x44, + 0xcf, 0x2a, 0x49, 0xe1, 0x01, 0x43, 0x0e, 0x0b, 0x41, 0xe1, 0x01, 0xb3, + 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, 0x40, 0xe1, 0x41, 0x44, 0x25, 0x01, + 0x43, 0xe1, 0x01, 0x42, 0x15, 0x02, 0x42, 0xe1, 0x41, 0x44, 0xc9, 0x1d, + 0x47, 0xe1, 0x01, 0x42, 0x01, 0x26, 0x46, 0xe1, 0x41, 0x43, 0xd2, 0x05, + 0x45, 0xe1, 0x01, 0x43, 0xf6, 0x06, 0x44, 0xe1, 0x41, 0x42, 0x60, 0x07, + 0x00, 0x00, 0x00, 0xad, 0x16, 0x04, 0x78, 0x4f, 0x06, 0x4a, 0x8b, 0xb1, + 0x29, 0xf5, 0x41, 0x4a, 0x99, 0xa8, 0x05, 0xd8, 0x00, 0x4e, 0x58, 0x20, + 0xe1, 0x6f, 0x41, 0x04, 0xb7, 0x05, 0x06, 0x48, 0xd7, 0xc1, 0x16, 0x21, + 0x40, 0xa5, 0x4b, 0xa6, 0x3d, 0x52, 0xc5, 0x53, 0x9a, 0x24, 0x00, 0xb3, + 0x20, 0xb4, 0x01, 0xff, 0x4c, 0x8b, 0x51, 0x91, 0x24, 0x00, 0x51, 0x95, + 0x5a, 0x94, 0x24, 0x00, 0x02, 0x15, 0x01, 0x01, 0xff, 0x4d, 0x5c, 0x85, + 0x93, 0x24, 0x00, 0x4d, 0x87, 0x86, 0x9b, 0x24, 0x40, 0x52, 0x85, 0x51, + 0x98, 0x24, 0x00, 0xa9, 0x01, 0xff, 0x42, 0x5c, 0x03, 0x23, 0x00, 0x00, + 0x4f, 0xfa, 0x74, 0x97, 0x24, 0x40, 0x50, 0xb6, 0x63, 0x96, 0x24, 0x00, + 0x51, 0x0a, 0x5d, 0x95, 0x24, 0x40, 0x51, 0xfb, 0x5a, 0x99, 0x24, 0x00, + 0x4f, 0xb4, 0x6f, 0x92, 0x24, 0x40, 0x80, 0xec, 0x04, 0x4c, 0xc9, 0x4c, + 0xa0, 0x00, 0x00, 0x02, 0x7d, 0x02, 0xd5, 0x04, 0xae, 0xbe, 0x04, 0xf2, + 0xbd, 0x22, 0x80, 0xd8, 0x01, 0x42, 0x46, 0x03, 0x43, 0xf4, 0x81, 0xca, + 0x01, 0xb4, 0x01, 0xff, 0x80, 0x3e, 0x05, 0xca, 0x92, 0x20, 0xe5, 0xc8, + 0xf5, 0xc1, 0x00, 0x03, 0xee, 0x0e, 0x0d, 0x44, 0x45, 0xef, 0xd3, 0xf4, + 0xc1, 0x00, 0x56, 0x77, 0x32, 0xd4, 0xf4, 0x41, 0xe4, 0xca, 0xf5, 0x01, + 0x42, 0xdb, 0x09, 0xc9, 0xf5, 0x41, 0xac, 0x0c, 0x60, 0x14, 0x10, 0x44, + 0xf5, 0x01, 0x6b, 0x98, 0x02, 0xb1, 0x27, 0x40, 0x5e, 0xf9, 0x12, 0x43, + 0xf5, 0x01, 0x6a, 0xc0, 0x03, 0xaf, 0x27, 0x40, 0xa1, 0x63, 0x4a, 0xa3, + 0xa8, 0x7b, 0x23, 0x00, 0x03, 0x7b, 0x00, 0x4d, 0x4c, 0x87, 0x00, 0x6f, + 0x22, 0x00, 0x4c, 0xd3, 0x8f, 0x62, 0x22, 0x00, 0x49, 0xec, 0x00, 0x6e, + 0x22, 0x00, 0x52, 0xe9, 0x53, 0xea, 0x22, 0x80, 0x2e, 0x4b, 0xdb, 0x6a, + 0x26, 0x22, 0x00, 0xb3, 0x0f, 0xb4, 0x01, 0xff, 0x44, 0x36, 0x23, 0x41, + 0x22, 0x00, 0x43, 0x70, 0x3b, 0xad, 0x22, 0x40, 0x43, 0x5b, 0x03, 0xac, + 0x00, 0x00, 0x06, 0xbc, 0x24, 0x01, 0xff, 0x54, 0x20, 0x43, 0xe2, 0x22, + 0x00, 0x57, 0xdf, 0x2f, 0xe3, 0x22, 0x40, 0x4c, 0xf2, 0x28, 0xec, 0x22, + 0x40, 0x45, 0xfb, 0x0c, 0x60, 0x22, 0x00, 0x4a, 0xd6, 0x39, 0x6d, 0x22, + 0x40, 0x03, 0x6e, 0x06, 0x12, 0x4e, 0xab, 0x6a, 0x49, 0x22, 0x00, 0x4c, + 0x4f, 0x92, 0x09, 0x22, 0x00, 0x56, 0x5d, 0x37, 0x44, 0x22, 0x40, 0x47, + 0xdc, 0x40, 0x84, 0x22, 0x00, 0x49, 0x29, 0x36, 0x85, 0x22, 0x40, 0x47, + 0x15, 0x08, 0xfc, 0xcc, 0x41, 0x4d, 0xf5, 0x81, 0xbb, 0x20, 0x00, 0x4f, + 0xec, 0x53, 0xb2, 0x22, 0x80, 0xcc, 0x02, 0x02, 0x53, 0x00, 0x01, 0xff, + 0x80, 0x06, 0x56, 0x03, 0x34, 0xea, 0xf6, 0x41, 0x05, 0xad, 0x23, 0xcb, + 0x01, 0x06, 0xe9, 0x06, 0x7a, 0x05, 0xbe, 0x1a, 0x01, 0xff, 0xa1, 0x3b, + 0x4b, 0xa5, 0x99, 0x09, 0x2b, 0x00, 0x4c, 0x2f, 0x8e, 0xd6, 0x21, 0x00, + 0x09, 0x9c, 0x01, 0x19, 0x50, 0xe6, 0x66, 0x54, 0xf8, 0x01, 0x55, 0x01, + 0x02, 0x66, 0x2b, 0x80, 0x06, 0x4b, 0x49, 0x10, 0x01, 0x2b, 0x40, 0x47, + 0xd0, 0x14, 0x76, 0x2b, 0x40, 0x43, 0x7a, 0xd0, 0x60, 0xf6, 0x01, 0x44, + 0x39, 0x51, 0x50, 0xf6, 0x01, 0x49, 0x10, 0xc1, 0x58, 0xf6, 0x41, 0x53, + 0x79, 0x40, 0x21, 0x29, 0x00, 0x44, 0xcf, 0x00, 0x96, 0x21, 0xc0, 0x00, + 0x80, 0x01, 0xff, 0x54, 0x50, 0x40, 0x27, 0x29, 0x00, 0x59, 0x9e, 0x23, + 0x32, 0x29, 0x00, 0x48, 0x57, 0xb4, 0xb8, 0xf8, 0x01, 0x03, 0x7a, 0x02, + 0x06, 0x49, 0xa8, 0x24, 0x23, 0x29, 0x40, 0x46, 0x27, 0x19, 0xf1, 0x21, + 0x00, 0x48, 0xe0, 0xc7, 0xb8, 0x21, 0x40, 0x09, 0x1e, 0x5a, 0x1c, 0x50, + 0xc6, 0x65, 0x37, 0xa8, 0x00, 0x03, 0x7c, 0x00, 0x06, 0x4a, 0xb9, 0xb0, + 0x38, 0xa8, 0x40, 0x4a, 0x75, 0xae, 0x39, 0xa8, 0x00, 0x49, 0xf4, 0xbe, + 0x36, 0xa8, 0x40, 0x04, 0x0e, 0x0b, 0x11, 0x06, 0x24, 0x01, 0x01, 0xff, + 0x48, 0x2a, 0x01, 0x32, 0xa8, 0x00, 0x4a, 0x13, 0xb1, 0x35, 0xa8, 0x40, + 0x46, 0x12, 0x0b, 0x34, 0xa8, 0x00, 0x44, 0x22, 0x00, 0x31, 0xa8, 0x00, + 0x47, 0x2a, 0x01, 0x30, 0xa8, 0x00, 0x49, 0x00, 0x26, 0x33, 0xa8, 0x40, + 0xa1, 0x3b, 0x4b, 0xa5, 0x99, 0x08, 0x2b, 0x00, 0x4c, 0x2f, 0x8e, 0xd7, + 0x21, 0x00, 0x09, 0x9c, 0x01, 0x19, 0x50, 0xe6, 0x66, 0x55, 0xf8, 0x01, + 0x55, 0x01, 0x02, 0x67, 0x2b, 0x80, 0x06, 0x4b, 0x49, 0x10, 0x00, 0x2b, + 0x40, 0x47, 0xd0, 0x14, 0x77, 0x2b, 0x40, 0x43, 0x7a, 0xd0, 0x62, 0xf6, + 0x01, 0x44, 0x39, 0x51, 0x52, 0xf6, 0x01, 0x49, 0x10, 0xc1, 0x5a, 0xf6, + 0x41, 0x53, 0x8d, 0x40, 0x22, 0x29, 0x00, 0x44, 0xcf, 0x00, 0x97, 0x21, + 0xc0, 0x00, 0x80, 0x01, 0xff, 0x54, 0x78, 0x40, 0x28, 0x29, 0x00, 0x09, + 0x95, 0x10, 0x0c, 0x48, 0x57, 0xb4, 0xb9, 0xf8, 0x01, 0x49, 0xa8, 0x24, + 0x24, 0x29, 0x40, 0x50, 0x68, 0x40, 0x31, 0x29, 0x00, 0x50, 0x7c, 0x40, + 0x2e, 0x29, 0x40, 0x4c, 0xf2, 0x28, 0xb4, 0x22, 0x40, 0x8d, 0x06, 0x47, + 0x32, 0xd1, 0xdd, 0x2a, 0x40, 0x4f, 0x7c, 0x6b, 0x11, 0x20, 0x00, 0x54, + 0x14, 0x45, 0xb1, 0xf6, 0x41, 0x50, 0x36, 0x65, 0x6f, 0x20, 0x00, 0x48, + 0x08, 0xcb, 0x8e, 0x01, 0x41, 0xa2, 0x2d, 0x45, 0xe4, 0x5a, 0xd4, 0x26, + 0x80, 0x20, 0x4d, 0x1f, 0x86, 0xf5, 0xf4, 0x01, 0x59, 0x47, 0x25, 0x1e, + 0xf5, 0x01, 0xb0, 0x06, 0x4e, 0x61, 0x7c, 0xad, 0xf6, 0x41, 0x4a, 0xb1, + 0xa9, 0xb7, 0xf6, 0x01, 0x45, 0x90, 0xe7, 0x72, 0xf5, 0x41, 0x45, 0x59, + 0x03, 0xab, 0xf6, 0x41, 0x47, 0xda, 0xd1, 0xb3, 0xf6, 0x01, 0x49, 0x88, + 0xbe, 0x83, 0x00, 0x40, 0x03, 0x13, 0x05, 0xca, 0x02, 0xa4, 0xf5, 0x01, + 0x50, 0xad, 0x00, 0xf9, 0x07, 0x00, 0x54, 0xe4, 0x42, 0xf4, 0x07, 0x00, + 0xac, 0x16, 0x07, 0x5f, 0x16, 0x06, 0x4a, 0x9f, 0xb1, 0xff, 0x07, 0x40, + 0x4a, 0xb5, 0xaa, 0xf7, 0x07, 0x00, 0x49, 0x4d, 0xbd, 0xf6, 0x07, 0x40, + 0x49, 0xd9, 0xb5, 0xfa, 0x07, 0x00, 0x06, 0xed, 0x05, 0x06, 0x52, 0x67, + 0x54, 0xf5, 0x07, 0x40, 0xe1, 0xca, 0x07, 0x00, 0x42, 0x16, 0x00, 0xd3, + 0x07, 0x00, 0x43, 0x91, 0x20, 0xd7, 0x07, 0x00, 0x42, 0xf0, 0x10, 0xd8, + 0x07, 0x80, 0xa3, 0x01, 0xe5, 0xcd, 0x07, 0x80, 0x99, 0x01, 0x42, 0x0c, + 0x08, 0xdd, 0x07, 0x00, 0x43, 0xb5, 0xaa, 0xdc, 0x07, 0x00, 0x42, 0x22, + 0x00, 0xe4, 0x07, 0x00, 0xe9, 0xcc, 0x07, 0x00, 0xaa, 0x66, 0x42, 0x1b, + 0x02, 0xde, 0x07, 0x00, 0x42, 0x74, 0x00, 0xdf, 0x07, 0x00, 0x42, 0x6c, + 0x00, 0xe1, 0x07, 0x00, 0xee, 0xd2, 0x07, 0x80, 0x37, 0xef, 0xd0, 0x07, + 0x80, 0x2e, 0x42, 0xbb, 0x09, 0xd4, 0x07, 0x00, 0xb2, 0x1c, 0x42, 0x40, + 0x06, 0xdb, 0x07, 0x00, 0x42, 0x12, 0x00, 0xd5, 0x07, 0x00, 0xf5, 0xce, + 0x07, 0x00, 0x42, 0xa9, 0x01, 0xe5, 0x07, 0x00, 0x42, 0xbc, 0x22, 0xe6, + 0x07, 0x40, 0xe1, 0xd9, 0x07, 0x00, 0x42, 0x71, 0x00, 0xda, 0x07, 0x40, + 0xef, 0xcf, 0x07, 0x40, 0xe1, 0xe3, 0x07, 0x80, 0x0d, 0x42, 0xbc, 0x22, + 0xe2, 0x07, 0xc0, 0x00, 0x47, 0xb2, 0xcd, 0xe7, 0x07, 0x40, 0x47, 0xb2, + 0xcd, 0xe0, 0x07, 0x40, 0xe1, 0xd6, 0x07, 0x00, 0x04, 0xcd, 0xf1, 0x01, + 0xff, 0x43, 0x91, 0x20, 0xe9, 0x07, 0x00, 0x42, 0x56, 0x19, 0xe8, 0x07, + 0x00, 0x42, 0x71, 0x00, 0xea, 0x07, 0x40, 0xe5, 0xcb, 0x07, 0x40, 0x48, + 0x58, 0xc6, 0xd1, 0x07, 0x40, 0x49, 0x2a, 0xb6, 0xfd, 0x07, 0x00, 0x05, + 0xf0, 0x06, 0x06, 0x4a, 0x01, 0xaf, 0xfe, 0x07, 0x40, 0x45, 0x12, 0x0b, + 0xc8, 0x07, 0x00, 0xa6, 0x2e, 0x44, 0xcf, 0x2a, 0xc9, 0x07, 0x00, 0x43, + 0x0e, 0x0b, 0xc1, 0x07, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, + 0xc0, 0x07, 0x40, 0x44, 0x25, 0x01, 0xc3, 0x07, 0x00, 0x42, 0x15, 0x02, + 0xc2, 0x07, 0x40, 0x44, 0xc9, 0x1d, 0xc7, 0x07, 0x00, 0x42, 0x01, 0x26, + 0xc6, 0x07, 0x40, 0x43, 0xd2, 0x05, 0xc5, 0x07, 0x00, 0x43, 0xf6, 0x06, + 0xc4, 0x07, 0x40, 0x07, 0x35, 0x16, 0x06, 0x42, 0x6c, 0x00, 0xf8, 0x07, + 0x40, 0x50, 0x16, 0x62, 0xf3, 0x07, 0x00, 0x05, 0xd7, 0x02, 0x1d, 0x51, + 0x60, 0x5c, 0xf2, 0x07, 0x00, 0x06, 0x33, 0x07, 0x01, 0xff, 0x49, 0xe4, + 0x42, 0xeb, 0x07, 0x00, 0x48, 0x1d, 0xb5, 0xec, 0x07, 0x00, 0x4b, 0xc6, + 0x66, 0xed, 0x07, 0x40, 0x4f, 0xf4, 0x6b, 0xee, 0x07, 0x00, 0x49, 0xe4, + 0x42, 0xef, 0x07, 0x00, 0x48, 0x1d, 0xb5, 0xf0, 0x07, 0x00, 0x4b, 0xc6, + 0x66, 0xf1, 0x07, 0x40, 0x4e, 0x0f, 0x78, 0x03, 0xf3, 0x01, 0xae, 0x01, + 0xff, 0x54, 0xf4, 0x41, 0xd9, 0xf7, 0x01, 0x42, 0x56, 0x19, 0x77, 0xf9, + 0x41, 0x45, 0x4c, 0xe5, 0x54, 0xf4, 0x01, 0x03, 0xcf, 0x05, 0xa9, 0x0c, + 0x06, 0x2e, 0xdd, 0xd7, 0x0b, 0x45, 0x15, 0xea, 0x46, 0x26, 0x80, 0xc9, + 0x0b, 0x47, 0x37, 0xd5, 0x13, 0xf9, 0x01, 0xb3, 0xab, 0x0b, 0x02, 0x29, + 0x08, 0xa5, 0x09, 0xb7, 0x11, 0x03, 0xbf, 0x62, 0x01, 0xff, 0x44, 0xed, + 0x07, 0x85, 0x00, 0x00, 0x44, 0x79, 0xa6, 0x98, 0x23, 0x40, 0x80, 0xfa, + 0x04, 0x02, 0x5a, 0x00, 0x16, 0x05, 0xed, 0x07, 0x06, 0x46, 0xab, 0x76, + 0xf0, 0xf4, 0x41, 0x44, 0xc3, 0x00, 0x92, 0x2b, 0x00, 0x45, 0xc8, 0x00, + 0x93, 0x2b, 0x40, 0x51, 0xdc, 0x57, 0x4f, 0x14, 0x01, 0x45, 0x13, 0x05, + 0x4d, 0x14, 0x01, 0xa4, 0xf4, 0x03, 0x4a, 0x39, 0x9c, 0x4e, 0x14, 0x01, + 0x4e, 0x9b, 0x78, 0x5d, 0x14, 0x01, 0x07, 0xec, 0x05, 0xa3, 0x01, 0x42, + 0x14, 0x05, 0x49, 0x14, 0x01, 0x50, 0xc6, 0x65, 0x5b, 0x14, 0x01, 0xb3, + 0x44, 0x0b, 0x40, 0x77, 0x01, 0xff, 0xa1, 0x31, 0xe5, 0x3e, 0x14, 0x01, + 0xe9, 0x36, 0x14, 0x81, 0x24, 0xef, 0x40, 0x14, 0x01, 0xf5, 0x38, 0x14, + 0x81, 0x17, 0x08, 0x22, 0xc1, 0x01, 0xff, 0xec, 0x3c, 0x14, 0x81, 0x09, + 0xf2, 0x3a, 0x14, 0xc1, 0x00, 0xf2, 0x3b, 0x14, 0x41, 0xec, 0x3d, 0x14, + 0x41, 0xf5, 0x39, 0x14, 0x41, 0xe9, 0x37, 0x14, 0x41, 0xe1, 0x35, 0x14, + 0x01, 0xe9, 0x3f, 0x14, 0x01, 0xf5, 0x41, 0x14, 0x41, 0x4a, 0xbd, 0xa7, + 0x5e, 0x14, 0x01, 0xa9, 0x01, 0xff, 0x44, 0x81, 0xef, 0x4a, 0x14, 0x01, + 0x03, 0x5c, 0x03, 0x01, 0xff, 0xa1, 0x2f, 0x4b, 0xd7, 0x23, 0x43, 0x14, + 0x01, 0x4e, 0xe5, 0x77, 0x48, 0x14, 0x01, 0x4b, 0xe6, 0x9d, 0x60, 0x14, + 0x01, 0x45, 0x3f, 0x3f, 0x46, 0x14, 0x01, 0x4b, 0x6e, 0xa4, 0x61, 0x14, + 0x01, 0x02, 0x02, 0x00, 0x01, 0xff, 0x44, 0xe5, 0x23, 0x42, 0x14, 0x01, + 0x45, 0xec, 0x4b, 0x45, 0x14, 0x41, 0x47, 0x3d, 0x16, 0x44, 0x14, 0x01, + 0x47, 0xaf, 0x88, 0x47, 0x14, 0x41, 0xe1, 0x00, 0x14, 0x81, 0xae, 0x02, + 0xa2, 0xa1, 0x02, 0xa3, 0x94, 0x02, 0xa4, 0xfb, 0x01, 0xe5, 0x0a, 0x14, + 0x01, 0xa7, 0xea, 0x01, 0x42, 0x22, 0x00, 0x34, 0x14, 0x01, 0xe9, 0x02, + 0x14, 0x81, 0xda, 0x01, 0xaa, 0xcd, 0x01, 0xab, 0xc0, 0x01, 0xac, 0xb3, + 0x01, 0xad, 0xa6, 0x01, 0xae, 0x7b, 0xef, 0x0c, 0x14, 0x01, 0xb0, 0x6b, + 0xb2, 0x5f, 0xb3, 0x4d, 0xb4, 0x34, 0xf5, 0x04, 0x14, 0x81, 0x2b, 0xb6, + 0x0c, 0x42, 0xa9, 0x01, 0x30, 0x14, 0x01, 0x42, 0xbc, 0x22, 0x2b, 0x14, + 0x41, 0x4d, 0x6a, 0x82, 0x5f, 0x14, 0x01, 0x07, 0x23, 0xc1, 0x01, 0xff, + 0xec, 0x08, 0x14, 0x81, 0x09, 0xf2, 0x06, 0x14, 0xc1, 0x00, 0xf2, 0x07, + 0x14, 0x41, 0xec, 0x09, 0x14, 0x41, 0xf5, 0x05, 0x14, 0x41, 0xe1, 0x1f, + 0x14, 0x01, 0x42, 0x22, 0x00, 0x20, 0x14, 0x01, 0xb4, 0x01, 0xff, 0xe1, + 0x1a, 0x14, 0x01, 0x42, 0x22, 0x00, 0x1b, 0x14, 0x41, 0xe1, 0x33, 0x14, + 0x01, 0x42, 0x22, 0x00, 0x31, 0x14, 0x01, 0x42, 0x40, 0x06, 0x32, 0x14, + 0x41, 0xe1, 0x2c, 0x14, 0x01, 0x42, 0x22, 0x00, 0x2d, 0x14, 0x41, 0xe1, + 0x25, 0x14, 0x01, 0x42, 0x22, 0x00, 0x26, 0x14, 0x41, 0xe1, 0x23, 0x14, + 0x01, 0xa7, 0x19, 0x42, 0x22, 0x00, 0x24, 0x14, 0x01, 0x42, 0x2a, 0x05, + 0x1e, 0x14, 0x01, 0xb9, 0x01, 0xff, 0xe1, 0x18, 0x14, 0x01, 0x42, 0x22, + 0x00, 0x19, 0x14, 0x41, 0xe1, 0x12, 0x14, 0x01, 0x42, 0x22, 0x00, 0x13, + 0x14, 0x41, 0xe1, 0x29, 0x14, 0x01, 0x42, 0x22, 0x00, 0x2a, 0x14, 0x41, + 0xe1, 0x2e, 0x14, 0x01, 0x42, 0x22, 0x00, 0x2f, 0x14, 0x41, 0xe1, 0x0e, + 0x14, 0x01, 0x42, 0x22, 0x00, 0x0f, 0x14, 0x41, 0xe1, 0x16, 0x14, 0x01, + 0x42, 0x22, 0x00, 0x17, 0x14, 0x41, 0xe9, 0x03, 0x14, 0x41, 0xe1, 0x10, + 0x14, 0x01, 0x42, 0x22, 0x00, 0x11, 0x14, 0x41, 0xe1, 0x21, 0x14, 0x01, + 0xa4, 0x06, 0x42, 0x22, 0x00, 0x22, 0x14, 0x41, 0xe1, 0x1c, 0x14, 0x01, + 0x42, 0x22, 0x00, 0x1d, 0x14, 0x41, 0xe1, 0x14, 0x14, 0x01, 0x42, 0x22, + 0x00, 0x15, 0x14, 0x41, 0xe1, 0x27, 0x14, 0x01, 0x42, 0x22, 0x00, 0x28, + 0x14, 0x41, 0xe1, 0x01, 0x14, 0x01, 0xe9, 0x0b, 0x14, 0x01, 0xf5, 0x0d, + 0x14, 0x41, 0x44, 0x73, 0x20, 0x4b, 0x14, 0x01, 0x05, 0xf0, 0x06, 0x11, + 0x06, 0x3c, 0x01, 0x01, 0xff, 0x45, 0x13, 0x05, 0x5a, 0x14, 0x01, 0x45, + 0x16, 0x96, 0x4c, 0x14, 0x41, 0x45, 0x12, 0x0b, 0x58, 0x14, 0x01, 0xa6, + 0x2e, 0x44, 0xcf, 0x2a, 0x59, 0x14, 0x01, 0x43, 0x0e, 0x0b, 0x51, 0x14, + 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, 0x50, 0x14, 0x41, 0x44, + 0x25, 0x01, 0x53, 0x14, 0x01, 0x42, 0x15, 0x02, 0x52, 0x14, 0x41, 0x44, + 0xc9, 0x1d, 0x57, 0x14, 0x01, 0x42, 0x01, 0x26, 0x56, 0x14, 0x41, 0x43, + 0xd2, 0x05, 0x55, 0x14, 0x01, 0x43, 0xf6, 0x06, 0x54, 0x14, 0x41, 0x44, + 0xed, 0x07, 0x0a, 0x00, 0x00, 0x05, 0xaf, 0x1b, 0xfe, 0x03, 0x4b, 0x95, + 0xa2, 0xaa, 0x20, 0x00, 0x08, 0x58, 0xcb, 0x01, 0xff, 0x06, 0xef, 0x06, + 0xac, 0x03, 0x07, 0xec, 0x05, 0x74, 0x48, 0xf0, 0xca, 0xde, 0x19, 0x80, + 0x69, 0xb4, 0x54, 0x0b, 0x40, 0x77, 0x01, 0xff, 0xa1, 0x3c, 0xe5, 0xb5, + 0x19, 0x00, 0xa9, 0x2e, 0xef, 0xb7, 0x19, 0x80, 0x1c, 0xf5, 0xb3, 0x19, + 0x80, 0x06, 0x4f, 0xa0, 0x74, 0xb0, 0x19, 0x40, 0xe5, 0xb9, 0x19, 0x80, + 0x08, 0xf5, 0xb4, 0x19, 0x00, 0xf9, 0xbc, 0x19, 0x40, 0xf9, 0xbf, 0x19, + 0x40, 0xe1, 0xb8, 0x19, 0x80, 0x04, 0xf9, 0xbd, 0x19, 0x40, 0xf9, 0xbe, + 0x19, 0x40, 0xe9, 0xb2, 0x19, 0x00, 0xf9, 0xc0, 0x19, 0x40, 0xe1, 0xb1, + 0x19, 0x80, 0x08, 0xe5, 0xb6, 0x19, 0x00, 0xf9, 0xba, 0x19, 0x40, 0xf9, + 0xbb, 0x19, 0x40, 0x4d, 0x95, 0x83, 0xda, 0x19, 0x00, 0x09, 0x20, 0xbd, + 0x01, 0xff, 0xd1, 0xc8, 0x19, 0x00, 0xd2, 0xc9, 0x19, 0x40, 0xf6, 0xdf, + 0x19, 0x40, 0x06, 0xf5, 0x2c, 0x92, 0x02, 0x05, 0x48, 0x0b, 0x89, 0x01, + 0x04, 0x08, 0x05, 0x01, 0xff, 0x42, 0x16, 0x00, 0xa5, 0x19, 0x00, 0x42, + 0xf0, 0x10, 0xa4, 0x19, 0x00, 0x42, 0x0c, 0x08, 0x9d, 0x19, 0x00, 0x42, + 0x22, 0x00, 0xa3, 0x19, 0x00, 0xab, 0x60, 0x42, 0x74, 0x00, 0x9f, 0x19, + 0x00, 0x42, 0x6c, 0x00, 0x99, 0x19, 0x00, 0xae, 0x48, 0xb0, 0x3c, 0x42, + 0x43, 0x14, 0x81, 0x19, 0x00, 0xb3, 0x2a, 0xb4, 0x18, 0x42, 0xf5, 0x0a, + 0x9e, 0x19, 0x00, 0xb8, 0x06, 0x42, 0xbc, 0x22, 0x8d, 0x19, 0x40, 0xe1, + 0x86, 0x19, 0x00, 0x42, 0xf5, 0x0a, 0xa9, 0x19, 0x40, 0xe1, 0x91, 0x19, + 0x00, 0x42, 0x22, 0x00, 0x92, 0x19, 0x00, 0x42, 0x40, 0x06, 0x8b, 0x19, + 0x40, 0xe1, 0x8c, 0x19, 0x00, 0x42, 0x7d, 0x00, 0xab, 0x19, 0x40, 0xe1, + 0x97, 0x19, 0x00, 0x42, 0x22, 0x00, 0x98, 0x19, 0x40, 0xe1, 0x93, 0x19, + 0x00, 0x42, 0x24, 0x02, 0x87, 0x19, 0x40, 0xe1, 0x85, 0x19, 0x00, 0x42, + 0xf5, 0x0a, 0xa8, 0x19, 0x40, 0x42, 0x16, 0x00, 0xa2, 0x19, 0x00, 0x42, + 0xf0, 0x10, 0xa1, 0x19, 0x00, 0x42, 0x0c, 0x08, 0x9a, 0x19, 0x00, 0x42, + 0x22, 0x00, 0xa0, 0x19, 0x00, 0xab, 0x60, 0x42, 0x74, 0x00, 0x9c, 0x19, + 0x00, 0x42, 0x6c, 0x00, 0x96, 0x19, 0x00, 0xae, 0x48, 0xb0, 0x3c, 0x42, + 0x43, 0x14, 0x80, 0x19, 0x00, 0xb3, 0x2a, 0xb4, 0x18, 0x42, 0xf5, 0x0a, + 0x9b, 0x19, 0x00, 0xb8, 0x06, 0x42, 0xbc, 0x22, 0x8a, 0x19, 0x40, 0xe1, + 0x83, 0x19, 0x00, 0x42, 0xf5, 0x0a, 0xa7, 0x19, 0x40, 0xe1, 0x8e, 0x19, + 0x00, 0x42, 0x22, 0x00, 0x8f, 0x19, 0x00, 0x42, 0x40, 0x06, 0x88, 0x19, + 0x40, 0xe1, 0x89, 0x19, 0x00, 0x42, 0x7d, 0x00, 0xaa, 0x19, 0x40, 0xe1, + 0x94, 0x19, 0x00, 0x42, 0x22, 0x00, 0x95, 0x19, 0x40, 0xe1, 0x90, 0x19, + 0x00, 0x42, 0x24, 0x02, 0x84, 0x19, 0x40, 0xe1, 0x82, 0x19, 0x00, 0x42, + 0xf5, 0x0a, 0xa6, 0x19, 0x40, 0xe2, 0xc7, 0x19, 0x00, 0xe4, 0xc6, 0x19, + 0x00, 0xeb, 0xc5, 0x19, 0x00, 0xed, 0xc4, 0x19, 0x00, 0xee, 0xc3, 0x19, + 0x80, 0x04, 0xf6, 0xc1, 0x19, 0x40, 0xe7, 0xc2, 0x19, 0x40, 0x45, 0x12, + 0x0b, 0xd8, 0x19, 0x00, 0xa6, 0x2e, 0x44, 0xcf, 0x2a, 0xd9, 0x19, 0x00, + 0x43, 0x0e, 0x0b, 0xd1, 0x19, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0x43, + 0x1e, 0xd0, 0x19, 0x40, 0x44, 0x25, 0x01, 0xd3, 0x19, 0x00, 0x42, 0x15, + 0x02, 0xd2, 0x19, 0x40, 0x44, 0xc9, 0x1d, 0xd7, 0x19, 0x00, 0x42, 0x01, + 0x26, 0xd6, 0x19, 0x40, 0x43, 0xd2, 0x05, 0xd5, 0x19, 0x00, 0x43, 0xf6, + 0x06, 0xd4, 0x19, 0x40, 0x46, 0x16, 0x08, 0x11, 0xf3, 0x01, 0x49, 0x4f, + 0xc1, 0x1a, 0xf3, 0x41, 0x42, 0x33, 0x00, 0xb2, 0x26, 0x00, 0x04, 0xdd, + 0x01, 0x01, 0xff, 0x06, 0x88, 0xda, 0x06, 0x44, 0x0c, 0x08, 0x10, 0xf6, + 0x41, 0x46, 0x2e, 0xda, 0x03, 0xfa, 0x81, 0xd3, 0x01, 0x4a, 0x15, 0xaa, + 0x4a, 0xfa, 0x81, 0xc5, 0x01, 0xab, 0x73, 0x44, 0xfd, 0xf1, 0x05, 0xfa, + 0x81, 0x5b, 0x45, 0x52, 0xbe, 0x01, 0xfa, 0x81, 0x43, 0x44, 0x5d, 0xf2, + 0x02, 0xfa, 0x81, 0x2b, 0x07, 0x27, 0x0a, 0x01, 0xff, 0x46, 0x2e, 0xda, + 0x2d, 0xfa, 0x01, 0xab, 0x12, 0x44, 0xfd, 0xf1, 0x2f, 0xfa, 0x01, 0x45, + 0x52, 0xbe, 0x2b, 0xfa, 0x01, 0x44, 0x5d, 0xf2, 0x2c, 0xfa, 0x41, 0x43, + 0xa1, 0x01, 0x2a, 0xfa, 0x01, 0x45, 0x4e, 0x09, 0x2e, 0xfa, 0x41, 0x09, + 0xa3, 0x2c, 0x01, 0xff, 0x4e, 0xac, 0x2c, 0x17, 0xfa, 0x01, 0x5b, 0xbc, + 0x1d, 0x41, 0xfa, 0x41, 0x09, 0xa3, 0x2c, 0x01, 0xff, 0x4e, 0xac, 0x2c, + 0x16, 0xfa, 0x01, 0x5b, 0xbc, 0x1d, 0x40, 0xfa, 0x41, 0x09, 0xa3, 0x2c, + 0x01, 0xff, 0x4e, 0xac, 0x2c, 0x1a, 0xfa, 0x01, 0x5b, 0xbc, 0x1d, 0x44, + 0xfa, 0x41, 0x43, 0xa1, 0x01, 0x00, 0xfa, 0x81, 0x38, 0x45, 0x4e, 0x09, + 0x04, 0xfa, 0xc1, 0x00, 0x09, 0xa3, 0x2c, 0x01, 0xff, 0x52, 0xcd, 0x51, + 0x08, 0xfa, 0x01, 0x4e, 0xac, 0x2c, 0x19, 0xfa, 0x01, 0x5f, 0x6d, 0x11, + 0x1d, 0xfa, 0x01, 0xb4, 0x01, 0xff, 0x5c, 0xfa, 0x17, 0x47, 0xfa, 0x01, + 0x0b, 0xbd, 0x1d, 0x01, 0xff, 0x4f, 0xc8, 0x1d, 0x43, 0xfa, 0x01, 0x53, + 0xf2, 0x4d, 0x32, 0xfa, 0x41, 0x09, 0xa3, 0x2c, 0x01, 0xff, 0x4e, 0xac, + 0x2c, 0x15, 0xfa, 0x01, 0x5b, 0xbc, 0x1d, 0x3f, 0xfa, 0x41, 0x57, 0xa3, + 0x2c, 0x4d, 0xfa, 0x41, 0x09, 0xa3, 0x2c, 0x01, 0xff, 0x4e, 0xac, 0x2c, + 0x18, 0xfa, 0x01, 0x5b, 0xbc, 0x1d, 0x42, 0xfa, 0x41, 0x43, 0x04, 0xd7, + 0xdc, 0x2b, 0x00, 0xb4, 0x01, 0xff, 0x4a, 0x5f, 0xa6, 0xba, 0xfa, 0x01, + 0x49, 0x7d, 0xba, 0x86, 0xfa, 0x41, 0x49, 0x21, 0x2e, 0xc9, 0x2b, 0x40, + 0xa1, 0x35, 0x11, 0x51, 0x5a, 0x1b, 0x0e, 0x5f, 0x79, 0x01, 0xff, 0x03, + 0x7b, 0x00, 0x06, 0x4c, 0x87, 0x00, 0x78, 0x22, 0x40, 0x45, 0xfb, 0x0c, + 0x70, 0x22, 0x00, 0x4a, 0xd6, 0x39, 0x74, 0x22, 0x40, 0x03, 0x7b, 0x00, + 0x06, 0x49, 0xec, 0x00, 0x79, 0x22, 0x40, 0x45, 0xfb, 0x0c, 0x71, 0x22, + 0x00, 0x4a, 0xd6, 0x39, 0x75, 0x22, 0x40, 0x03, 0x6e, 0x06, 0x06, 0x62, + 0xde, 0x0c, 0x47, 0x22, 0x40, 0x54, 0xdc, 0x40, 0x88, 0x22, 0x00, 0x56, + 0x29, 0x36, 0x89, 0x22, 0x40, 0x6d, 0x38, 0x01, 0xaf, 0x22, 0x00, 0x04, + 0xd2, 0x05, 0x01, 0xff, 0x4b, 0xe6, 0x51, 0x15, 0x00, 0x00, 0x08, 0xf5, + 0x22, 0xcc, 0x01, 0x09, 0xe3, 0x25, 0xb5, 0x01, 0x08, 0xd6, 0x05, 0x01, + 0xff, 0x42, 0x5c, 0x00, 0x8e, 0xf1, 0x01, 0x4a, 0xe9, 0xa8, 0x4e, 0x27, + 0x00, 0x4f, 0x34, 0x0c, 0xb7, 0xf8, 0x01, 0x42, 0x36, 0x00, 0x8b, 0xf1, + 0x01, 0xac, 0x24, 0x42, 0xbb, 0x09, 0x8c, 0xf1, 0x01, 0x4d, 0xa6, 0x34, + 0xc4, 0xfb, 0x01, 0x50, 0xb3, 0x02, 0xb6, 0xf8, 0x01, 0x42, 0x40, 0x06, + 0x8d, 0xf1, 0x01, 0x4d, 0xc1, 0x20, 0xb5, 0xf8, 0x01, 0x42, 0xc7, 0x1a, + 0x8f, 0xf1, 0x41, 0x14, 0xdf, 0x05, 0x06, 0x4e, 0x4e, 0x1a, 0xb4, 0xf8, + 0x41, 0xe1, 0x70, 0xf1, 0x01, 0xe2, 0x71, 0xf1, 0x01, 0xe3, 0x72, 0xf1, + 0x01, 0xe4, 0x73, 0xf1, 0x01, 0xe5, 0x74, 0xf1, 0x01, 0xe6, 0x75, 0xf1, + 0x01, 0xe7, 0x76, 0xf1, 0x01, 0xe8, 0x77, 0xf1, 0x01, 0xe9, 0x78, 0xf1, + 0x01, 0xea, 0x79, 0xf1, 0x01, 0xeb, 0x7a, 0xf1, 0x01, 0xec, 0x7b, 0xf1, + 0x01, 0xed, 0x7c, 0xf1, 0x01, 0xee, 0x7d, 0xf1, 0x01, 0xef, 0x7e, 0xf1, + 0x01, 0xf0, 0x7f, 0xf1, 0x01, 0xf1, 0x80, 0xf1, 0x01, 0xf2, 0x81, 0xf1, + 0x01, 0xf3, 0x82, 0xf1, 0x01, 0xf4, 0x83, 0xf1, 0x01, 0xf5, 0x84, 0xf1, + 0x01, 0xf6, 0x85, 0xf1, 0x01, 0xf7, 0x86, 0xf1, 0x01, 0xf8, 0x87, 0xf1, + 0x01, 0xf9, 0x88, 0xf1, 0x01, 0xfa, 0x89, 0xf1, 0x41, 0x45, 0x95, 0x10, + 0xbd, 0xfb, 0x01, 0x47, 0x95, 0x44, 0xbf, 0xfb, 0x01, 0x5c, 0x58, 0x0f, + 0xbe, 0xfb, 0x41, 0x4a, 0x4d, 0xa9, 0xff, 0x24, 0x00, 0x15, 0xde, 0x05, + 0x5a, 0x07, 0xff, 0x39, 0x0c, 0x46, 0xd6, 0x05, 0xd8, 0xf7, 0x01, 0x48, + 0x01, 0x02, 0xd6, 0xf7, 0x41, 0xa5, 0x3c, 0xa6, 0x2e, 0x48, 0xc5, 0x53, + 0xf3, 0x24, 0x00, 0xb3, 0x1a, 0xb4, 0x01, 0xff, 0x47, 0x95, 0x5a, 0xed, + 0x24, 0x00, 0x02, 0x15, 0x01, 0x01, 0xff, 0x43, 0xe8, 0x2b, 0xec, 0x24, + 0x00, 0x43, 0xcc, 0x1d, 0xf4, 0x24, 0x40, 0x48, 0x85, 0x51, 0xf1, 0x24, + 0x00, 0x46, 0x01, 0x26, 0xf0, 0x24, 0x40, 0x46, 0x08, 0x18, 0xef, 0x24, + 0x00, 0x47, 0x0a, 0x5d, 0xee, 0x24, 0x40, 0x47, 0x52, 0x25, 0xf2, 0x24, + 0x00, 0x45, 0xb4, 0x6f, 0xeb, 0x24, 0x40, 0xe1, 0x50, 0xf1, 0x01, 0xe2, + 0x51, 0xf1, 0x01, 0xe3, 0x52, 0xf1, 0x01, 0xe4, 0x53, 0xf1, 0x01, 0xe5, + 0x54, 0xf1, 0x01, 0xe6, 0x55, 0xf1, 0x01, 0xe7, 0x56, 0xf1, 0x01, 0xe8, + 0x57, 0xf1, 0x01, 0xe9, 0x58, 0xf1, 0x01, 0xea, 0x59, 0xf1, 0x01, 0xeb, + 0x5a, 0xf1, 0x01, 0xec, 0x5b, 0xf1, 0x01, 0xed, 0x5c, 0xf1, 0x01, 0xee, + 0x5d, 0xf1, 0x01, 0xef, 0x5e, 0xf1, 0x01, 0xf0, 0x5f, 0xf1, 0x01, 0xf1, + 0x60, 0xf1, 0x01, 0xf2, 0x61, 0xf1, 0x01, 0xf3, 0x62, 0xf1, 0x01, 0xf4, + 0x63, 0xf1, 0x01, 0xf5, 0x64, 0xf1, 0x01, 0xf6, 0x65, 0xf1, 0x01, 0xf7, + 0x66, 0xf1, 0x01, 0xf8, 0x67, 0xf1, 0x01, 0xf9, 0x68, 0xf1, 0x01, 0xfa, + 0x69, 0xf1, 0x41, 0xa2, 0xb5, 0x05, 0x0a, 0x8d, 0xaa, 0xc6, 0x03, 0xa9, + 0xb7, 0x03, 0x48, 0x38, 0xc8, 0xdb, 0xf4, 0x01, 0x42, 0x1b, 0x00, 0xbc, + 0x22, 0x80, 0x22, 0x53, 0xc2, 0x4c, 0x2f, 0x20, 0x00, 0x07, 0xdf, 0x3a, + 0x0c, 0x4c, 0x93, 0x96, 0x22, 0xf9, 0x01, 0x4a, 0x01, 0xb4, 0xff, 0xf9, + 0x41, 0x4c, 0x3a, 0x65, 0x6e, 0x20, 0x00, 0x44, 0xdf, 0xb4, 0xde, 0xf3, + 0x41, 0x08, 0x00, 0xc7, 0x01, 0xff, 0x4a, 0xbc, 0x60, 0xe3, 0x19, 0x01, + 0x07, 0xec, 0x05, 0x67, 0x05, 0x5a, 0x03, 0x3e, 0x0b, 0x40, 0x77, 0x01, + 0xff, 0xa1, 0x2b, 0xe5, 0xda, 0x19, 0x01, 0xe9, 0xd2, 0x19, 0x81, 0x1e, + 0xef, 0xdc, 0x19, 0x01, 0x4f, 0xee, 0x71, 0xe4, 0x19, 0x01, 0xf5, 0xd4, + 0x19, 0x81, 0x0b, 0x49, 0x22, 0xc1, 0xd6, 0x19, 0xc1, 0x00, 0xf2, 0xd7, + 0x19, 0x41, 0xf5, 0xd5, 0x19, 0x41, 0xe9, 0xd3, 0x19, 0x41, 0xe1, 0xd1, + 0x19, 0x01, 0xe9, 0xdb, 0x19, 0x01, 0xf5, 0xdd, 0x19, 0x41, 0xa1, 0x17, + 0x47, 0xd8, 0xd5, 0xe2, 0x19, 0x01, 0x02, 0x02, 0x00, 0x01, 0xff, 0x44, + 0xe5, 0x23, 0xe0, 0x19, 0x01, 0x45, 0xec, 0x4b, 0xdf, 0x19, 0x41, 0x47, + 0x3d, 0x16, 0xde, 0x19, 0x01, 0x47, 0xaf, 0x88, 0xe1, 0x19, 0x41, 0xe1, + 0xa0, 0x19, 0x81, 0x80, 0x02, 0xa2, 0xf3, 0x01, 0xa3, 0xe6, 0x01, 0xa4, + 0xcd, 0x01, 0xe5, 0xaa, 0x19, 0x01, 0xa7, 0xbc, 0x01, 0x42, 0x22, 0x00, + 0xce, 0x19, 0x01, 0xe9, 0xa2, 0x19, 0x81, 0xac, 0x01, 0xaa, 0x9f, 0x01, + 0xab, 0x92, 0x01, 0xac, 0x85, 0x01, 0x42, 0x6c, 0x00, 0xc6, 0x19, 0x01, + 0xae, 0x67, 0xef, 0xac, 0x19, 0x01, 0xb0, 0x57, 0xb2, 0x4b, 0xb3, 0x39, + 0xb4, 0x20, 0xf5, 0xa4, 0x19, 0x81, 0x17, 0xb6, 0x06, 0x42, 0xbc, 0x22, + 0xc7, 0x19, 0x41, 0xe1, 0xca, 0x19, 0x01, 0x48, 0x23, 0xc1, 0xa6, 0x19, + 0xc1, 0x00, 0xf2, 0xa7, 0x19, 0x41, 0xf5, 0xa5, 0x19, 0x41, 0xe1, 0xbd, + 0x19, 0x01, 0x42, 0x22, 0x00, 0xbe, 0x19, 0x01, 0xb4, 0x01, 0xff, 0xe1, + 0xb8, 0x19, 0x01, 0x42, 0x22, 0x00, 0xb9, 0x19, 0x41, 0xe1, 0xcd, 0x19, + 0x01, 0x42, 0x22, 0x00, 0xcb, 0x19, 0x01, 0x42, 0x40, 0x06, 0xcc, 0x19, + 0x41, 0xe1, 0xc8, 0x19, 0x01, 0x42, 0x71, 0x00, 0xd0, 0x19, 0x41, 0xe1, + 0xc2, 0x19, 0x01, 0x42, 0x22, 0x00, 0xc3, 0x19, 0x41, 0xe1, 0xc1, 0x19, + 0x01, 0x42, 0x24, 0x02, 0xb2, 0x19, 0x01, 0x42, 0x2a, 0x05, 0xbc, 0x19, + 0x01, 0x42, 0xbc, 0x22, 0xb7, 0x19, 0x41, 0xe1, 0xc9, 0x19, 0x01, 0x42, + 0x74, 0x00, 0xcf, 0x19, 0x41, 0xe1, 0xae, 0x19, 0x01, 0x42, 0x22, 0x00, + 0xaf, 0x19, 0x41, 0xe1, 0xb5, 0x19, 0x01, 0x42, 0x22, 0x00, 0xb6, 0x19, + 0x41, 0xe9, 0xa3, 0x19, 0x41, 0xe1, 0xb0, 0x19, 0x01, 0x42, 0x22, 0x00, + 0xb1, 0x19, 0x41, 0xe1, 0xbf, 0x19, 0x01, 0xa4, 0x06, 0x42, 0x22, 0x00, + 0xc0, 0x19, 0x41, 0xe1, 0xba, 0x19, 0x01, 0x42, 0x22, 0x00, 0xbb, 0x19, + 0x41, 0xe1, 0xb3, 0x19, 0x01, 0x42, 0x22, 0x00, 0xb4, 0x19, 0x41, 0xe1, + 0xc4, 0x19, 0x01, 0x42, 0x22, 0x00, 0xc5, 0x19, 0x41, 0xe1, 0xa1, 0x19, + 0x01, 0xe9, 0xab, 0x19, 0x01, 0xf5, 0xad, 0x19, 0x41, 0x48, 0x80, 0xc7, + 0x85, 0xf4, 0x01, 0x47, 0x85, 0x84, 0xa6, 0x20, 0x40, 0x06, 0xef, 0x06, + 0xa3, 0x01, 0x07, 0xec, 0x05, 0x23, 0x05, 0x5a, 0x03, 0x01, 0xff, 0x44, + 0x89, 0xf0, 0xee, 0xe4, 0x01, 0x45, 0xda, 0xe8, 0xec, 0xe4, 0x01, 0x44, + 0xc9, 0xf1, 0xeb, 0xe4, 0x01, 0x45, 0x2d, 0xeb, 0xef, 0xe4, 0x01, 0x45, + 0x6e, 0xeb, 0xed, 0xe4, 0x41, 0xe1, 0xd5, 0xe4, 0x81, 0x65, 0xe5, 0xe4, + 0xe4, 0x81, 0x43, 0xe9, 0xda, 0xe4, 0x81, 0x2c, 0xef, 0xd0, 0xe4, 0x81, + 0x15, 0xf5, 0xdf, 0xe4, 0xc1, 0x00, 0xe3, 0xe0, 0xe4, 0x01, 0xe4, 0xe1, + 0xe4, 0x01, 0xeb, 0xe2, 0xe4, 0x01, 0xf2, 0xe3, 0xe4, 0x41, 0xec, 0xd2, + 0xe4, 0x01, 0x42, 0x1d, 0x01, 0xd4, 0xe4, 0x01, 0xf0, 0xd1, 0xe4, 0x01, + 0xf9, 0xd3, 0xe4, 0x41, 0x42, 0x7f, 0x02, 0xdc, 0xe4, 0x01, 0xe8, 0xde, + 0xe4, 0x01, 0xf3, 0xdb, 0xe4, 0x01, 0xf4, 0xdd, 0xe4, 0x41, 0xe7, 0xe6, + 0xe4, 0x01, 0x42, 0x60, 0x07, 0xea, 0xe4, 0x01, 0xed, 0xe7, 0xe4, 0x01, + 0xee, 0xe8, 0xe4, 0x81, 0x06, 0x42, 0xee, 0x05, 0xe9, 0xe4, 0x41, 0xee, + 0xe5, 0xe4, 0x41, 0xe2, 0xd7, 0xe4, 0x01, 0xe8, 0xd9, 0xe4, 0x01, 0xea, + 0xd6, 0xe4, 0x01, 0x42, 0x7d, 0x1a, 0xd8, 0xe4, 0x41, 0x45, 0x12, 0x0b, + 0xf8, 0xe4, 0x01, 0xa6, 0x2e, 0x44, 0xcf, 0x2a, 0xf9, 0xe4, 0x01, 0x43, + 0x0e, 0x0b, 0xf1, 0xe4, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, + 0xf0, 0xe4, 0x41, 0x44, 0x25, 0x01, 0xf3, 0xe4, 0x01, 0x42, 0x15, 0x02, + 0xf2, 0xe4, 0x41, 0x44, 0xc9, 0x1d, 0xf7, 0xe4, 0x01, 0x42, 0x01, 0x26, + 0xf6, 0xe4, 0x41, 0x43, 0xd2, 0x05, 0xf5, 0xe4, 0x01, 0x43, 0xf6, 0x06, + 0xf4, 0xe4, 0x41, 0x07, 0x25, 0xcf, 0x06, 0x42, 0x74, 0x00, 0x07, 0x22, + 0x40, 0x55, 0xf5, 0x39, 0xab, 0x08, 0x01, 0x07, 0xec, 0x05, 0x3c, 0x07, + 0xff, 0x39, 0x01, 0xff, 0xa6, 0x29, 0x43, 0x0e, 0x0b, 0xa7, 0x08, 0x81, + 0x1c, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0xad, 0x08, 0x01, 0x44, 0x25, + 0x01, 0xa9, 0x08, 0x01, 0xb7, 0x01, 0xff, 0x44, 0xcb, 0x1d, 0xae, 0x08, + 0x01, 0xef, 0xa8, 0x08, 0x41, 0x48, 0x70, 0x11, 0xaf, 0x08, 0x41, 0x43, + 0xd2, 0x05, 0xac, 0x08, 0x01, 0x43, 0xf6, 0x06, 0xaa, 0x08, 0x41, 0xa1, + 0xb9, 0x01, 0x44, 0x41, 0xef, 0x83, 0x08, 0x01, 0x46, 0x23, 0x4a, 0x85, + 0x08, 0x01, 0x06, 0xf5, 0x2c, 0x73, 0x45, 0xdd, 0xaa, 0x84, 0x08, 0x01, + 0x42, 0xb0, 0x01, 0x87, 0x08, 0x81, 0x60, 0x44, 0xcd, 0xf0, 0x8f, 0x08, + 0x01, 0x46, 0x94, 0xdd, 0x91, 0x08, 0x01, 0x43, 0xb4, 0x05, 0x93, 0x08, + 0x01, 0x43, 0xdc, 0x22, 0x95, 0x08, 0x01, 0x42, 0x6f, 0x02, 0x98, 0x08, + 0x01, 0x44, 0x4c, 0xc8, 0x9a, 0x08, 0x01, 0x44, 0x76, 0x66, 0x9b, 0x08, + 0x01, 0xb3, 0x20, 0xb4, 0x12, 0x43, 0x8a, 0x8a, 0x88, 0x08, 0x01, 0x44, + 0xa1, 0x52, 0x8d, 0x08, 0x01, 0x45, 0x9b, 0x52, 0x89, 0x08, 0x41, 0x42, + 0xb7, 0x2d, 0x9e, 0x08, 0x01, 0x43, 0xda, 0x25, 0x8b, 0x08, 0x41, 0xa1, + 0x06, 0x43, 0x7a, 0x16, 0x9d, 0x08, 0x41, 0x43, 0xad, 0xea, 0x99, 0x08, + 0x01, 0x44, 0x49, 0xe4, 0x96, 0x08, 0x41, 0x42, 0x53, 0x00, 0x8a, 0x08, + 0x41, 0x45, 0xb2, 0xad, 0x80, 0x08, 0x01, 0x44, 0x41, 0xef, 0x82, 0x08, + 0x01, 0x42, 0xb0, 0x01, 0x86, 0x08, 0x01, 0x44, 0xcd, 0xf0, 0x8e, 0x08, + 0x01, 0x46, 0x94, 0xdd, 0x90, 0x08, 0x01, 0x43, 0xb4, 0x05, 0x92, 0x08, + 0x01, 0x43, 0xdc, 0x22, 0x94, 0x08, 0x01, 0x44, 0x73, 0x4a, 0x9c, 0x08, + 0x01, 0x44, 0xa1, 0x52, 0x8c, 0x08, 0x41, 0x44, 0x18, 0x3d, 0x81, 0x08, + 0x01, 0x43, 0x7e, 0x1a, 0x97, 0x08, 0x41, 0xa3, 0x58, 0x4c, 0xa9, 0x0a, + 0xc2, 0x22, 0x00, 0x08, 0x2b, 0x22, 0x42, 0x47, 0x8e, 0x0d, 0x0f, 0x22, + 0x00, 0xb3, 0x24, 0x4e, 0x17, 0x7d, 0x09, 0x2a, 0x00, 0x45, 0x4d, 0x17, + 0xc3, 0x22, 0x80, 0x06, 0x52, 0x95, 0x56, 0xff, 0x2a, 0x40, 0x0f, 0x60, + 0x69, 0x01, 0xff, 0x43, 0x23, 0x0a, 0x03, 0x2a, 0x00, 0x44, 0x58, 0x28, + 0x04, 0x2a, 0x40, 0x06, 0xbc, 0x24, 0x06, 0x48, 0x6f, 0x70, 0x11, 0x22, + 0x40, 0x55, 0x17, 0x3c, 0x05, 0x2a, 0x00, 0x4e, 0xf7, 0x7d, 0x06, 0x2a, + 0x40, 0x43, 0x1a, 0x00, 0xc0, 0x22, 0x00, 0x42, 0x0c, 0x00, 0xc1, 0x22, + 0x40, 0x07, 0xf6, 0x22, 0x06, 0x48, 0x0e, 0x2d, 0x10, 0x22, 0x40, 0x4c, + 0x17, 0x8e, 0x00, 0x2a, 0x00, 0x4d, 0x71, 0x87, 0x01, 0x2a, 0x00, 0x4e, + 0x17, 0x7d, 0x02, 0x2a, 0x40, 0xa1, 0xdb, 0x65, 0xa5, 0x9a, 0x48, 0xa9, + 0xc9, 0x3f, 0xaf, 0xa9, 0x20, 0x03, 0x45, 0x1e, 0x97, 0x1e, 0xb5, 0xf6, + 0x0c, 0x07, 0xd0, 0xd7, 0x01, 0xff, 0x0f, 0x3d, 0x33, 0xb1, 0x0c, 0x06, + 0xef, 0x06, 0xea, 0x0b, 0x18, 0x6e, 0x28, 0xa3, 0x0b, 0xac, 0xa2, 0x05, + 0x10, 0x78, 0x0c, 0x91, 0x05, 0x0a, 0x65, 0xaf, 0xca, 0x04, 0xb3, 0x8d, + 0x02, 0xb4, 0xb3, 0x01, 0x0b, 0x40, 0x77, 0x01, 0xff, 0xa1, 0x97, 0x01, + 0xe5, 0x31, 0x10, 0x80, 0x8b, 0x01, 0x4c, 0x43, 0x8f, 0x71, 0x10, 0x00, + 0xe9, 0x2d, 0x10, 0x80, 0x7c, 0x06, 0x52, 0xdd, 0x68, 0x04, 0x60, 0xc8, + 0x5a, 0xb3, 0x36, 0x47, 0x2c, 0xd6, 0x2b, 0x10, 0x00, 0xf5, 0x2f, 0x10, + 0x80, 0x27, 0x08, 0x22, 0xc1, 0x11, 0x12, 0xd9, 0x31, 0x01, 0xff, 0x42, + 0x97, 0x02, 0x67, 0x10, 0x00, 0x42, 0xd6, 0x13, 0x68, 0x10, 0x40, 0xec, + 0x58, 0x10, 0x80, 0x09, 0xf2, 0x56, 0x10, 0xc0, 0x00, 0xf2, 0x57, 0x10, + 0x40, 0xec, 0x59, 0x10, 0x40, 0xf5, 0x30, 0x10, 0x40, 0x4c, 0x2b, 0x8f, + 0x62, 0x10, 0x00, 0x04, 0x90, 0x00, 0x01, 0xff, 0x42, 0x80, 0x12, 0x83, + 0x10, 0x00, 0xe5, 0x84, 0x10, 0x80, 0x06, 0x47, 0x24, 0xd1, 0x86, 0x10, + 0x40, 0x46, 0x5b, 0x00, 0x85, 0x10, 0x40, 0x42, 0x52, 0x28, 0x33, 0x10, + 0x00, 0xef, 0x34, 0x10, 0x40, 0x42, 0x27, 0x01, 0x74, 0x10, 0x00, 0x42, + 0x60, 0x51, 0x72, 0x10, 0x00, 0xf5, 0x73, 0x10, 0x40, 0xe9, 0x2e, 0x10, + 0x40, 0x46, 0x5b, 0x00, 0x35, 0x10, 0x40, 0xe1, 0x2c, 0x10, 0x00, 0xe9, + 0x32, 0x10, 0xc0, 0x00, 0x45, 0x5a, 0xeb, 0x9c, 0x10, 0xc0, 0x00, 0xe9, + 0x9d, 0x10, 0x40, 0x0f, 0x6e, 0x6a, 0x11, 0x14, 0x9c, 0x44, 0x01, 0xff, + 0x45, 0xeb, 0xe6, 0x63, 0x10, 0x00, 0x46, 0x58, 0xdd, 0x64, 0x10, 0x40, + 0x45, 0x12, 0x0b, 0xf8, 0xa9, 0x00, 0xa6, 0x2e, 0x44, 0xcf, 0x2a, 0xf9, + 0xa9, 0x00, 0x43, 0x0e, 0x0b, 0xf1, 0xa9, 0x00, 0xb3, 0x14, 0xb4, 0x06, + 0x44, 0x43, 0x1e, 0xf0, 0xa9, 0x40, 0x44, 0x25, 0x01, 0xf3, 0xa9, 0x00, + 0x42, 0x15, 0x02, 0xf2, 0xa9, 0x40, 0x44, 0xc9, 0x1d, 0xf7, 0xa9, 0x00, + 0x42, 0x01, 0x26, 0xf6, 0xa9, 0x40, 0x43, 0xd2, 0x05, 0xf5, 0xa9, 0x00, + 0x43, 0xf6, 0x06, 0xf4, 0xa9, 0x40, 0x0a, 0x19, 0xab, 0xf3, 0x01, 0x04, + 0x5b, 0x03, 0x47, 0x06, 0x60, 0x16, 0x01, 0xff, 0xa1, 0x23, 0x49, 0x53, + 0xb7, 0x4d, 0x10, 0x00, 0x48, 0x60, 0xc6, 0x4f, 0x10, 0x00, 0x48, 0xd8, + 0xc7, 0x4c, 0x10, 0x00, 0x05, 0x3f, 0x55, 0x01, 0xff, 0x4b, 0xad, 0x00, + 0x9f, 0x10, 0x00, 0x43, 0x0e, 0x0b, 0x9e, 0x10, 0x40, 0x4d, 0x06, 0x83, + 0x4e, 0x10, 0x00, 0x05, 0x12, 0xd2, 0x01, 0xff, 0x4b, 0xad, 0x00, 0x77, + 0xaa, 0x00, 0x43, 0x0e, 0x0b, 0x78, 0xaa, 0x00, 0x43, 0x1f, 0x0a, 0x79, + 0xaa, 0x40, 0xa1, 0x99, 0x01, 0x49, 0x9f, 0x12, 0x37, 0x10, 0x00, 0x0c, + 0x9f, 0x90, 0x86, 0x01, 0x4e, 0x97, 0x79, 0x4a, 0x10, 0x00, 0x4e, 0xf5, + 0x7a, 0x7b, 0xaa, 0x00, 0x54, 0xa0, 0x45, 0x8f, 0x10, 0x00, 0xb3, 0x35, + 0x0f, 0x92, 0x73, 0x29, 0x02, 0x02, 0x00, 0x19, 0x17, 0xd9, 0x31, 0x01, + 0xff, 0xd1, 0x69, 0x10, 0x00, 0xd2, 0x6a, 0x10, 0x00, 0xd3, 0x6b, 0x10, + 0x00, 0xd4, 0x6c, 0x10, 0x00, 0xd5, 0x6d, 0x10, 0x40, 0x44, 0xe5, 0x23, + 0x39, 0x10, 0x00, 0x45, 0xec, 0x4b, 0x38, 0x10, 0x40, 0xd2, 0x7c, 0xaa, + 0x00, 0xd5, 0x7d, 0xaa, 0x40, 0x46, 0xaf, 0x0a, 0x4b, 0x10, 0x00, 0x04, + 0x90, 0x00, 0x01, 0xff, 0x08, 0xc8, 0xc4, 0x1b, 0x43, 0xa7, 0x52, 0xe5, + 0xa9, 0x00, 0x05, 0xeb, 0x31, 0x01, 0xff, 0xd2, 0x87, 0x10, 0x00, 0xd3, + 0x88, 0x10, 0x00, 0xd5, 0x89, 0x10, 0x00, 0xd6, 0x8a, 0x10, 0x40, 0x4d, + 0x91, 0x82, 0x8d, 0x10, 0x00, 0x05, 0xeb, 0x31, 0x01, 0xff, 0xd2, 0x8b, + 0x10, 0x00, 0xd3, 0x8c, 0x10, 0x40, 0xd1, 0x9a, 0x10, 0x00, 0xd3, 0x9b, + 0x10, 0x40, 0x47, 0x3d, 0x16, 0x36, 0x10, 0x00, 0x43, 0x88, 0x2d, 0x3a, + 0x10, 0x40, 0x45, 0x12, 0x0b, 0x98, 0x10, 0x00, 0xa6, 0x2e, 0x44, 0xcf, + 0x2a, 0x99, 0x10, 0x00, 0x43, 0x0e, 0x0b, 0x91, 0x10, 0x00, 0xb3, 0x14, + 0xb4, 0x06, 0x44, 0x43, 0x1e, 0x90, 0x10, 0x40, 0x44, 0x25, 0x01, 0x93, + 0x10, 0x00, 0x42, 0x15, 0x02, 0x92, 0x10, 0x40, 0x44, 0xc9, 0x1d, 0x97, + 0x10, 0x00, 0x42, 0x01, 0x26, 0x96, 0x10, 0x40, 0x43, 0xd2, 0x05, 0x95, + 0x10, 0x00, 0x43, 0xf6, 0x06, 0x94, 0x10, 0x40, 0x45, 0x12, 0x0b, 0xd8, + 0x16, 0x01, 0xa6, 0x2e, 0x44, 0xcf, 0x2a, 0xd9, 0x16, 0x01, 0x43, 0x0e, + 0x0b, 0xd1, 0x16, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, 0xd0, + 0x16, 0x41, 0x44, 0x25, 0x01, 0xd3, 0x16, 0x01, 0x42, 0x15, 0x02, 0xd2, + 0x16, 0x41, 0x44, 0xc9, 0x1d, 0xd7, 0x16, 0x01, 0x42, 0x01, 0x26, 0xd6, + 0x16, 0x41, 0x43, 0xd2, 0x05, 0xd5, 0x16, 0x01, 0x43, 0xf6, 0x06, 0xd4, + 0x16, 0x41, 0x54, 0xd4, 0x43, 0x70, 0xaa, 0x00, 0x52, 0x3f, 0x55, 0xe6, + 0xa9, 0x40, 0x06, 0xed, 0x05, 0x17, 0x0f, 0x0d, 0x71, 0x01, 0xff, 0x42, + 0xe2, 0x0a, 0x76, 0xaa, 0x00, 0x43, 0x79, 0xf4, 0x74, 0xaa, 0x00, 0x42, + 0x76, 0xd2, 0x75, 0xaa, 0x40, 0xe1, 0x21, 0x10, 0x80, 0xd3, 0x05, 0xa2, + 0xc6, 0x05, 0xa3, 0xb9, 0x05, 0xa4, 0xa0, 0x05, 0xe5, 0x27, 0x10, 0x80, + 0x83, 0x05, 0xa7, 0xf0, 0x04, 0x42, 0x22, 0x00, 0x1f, 0x10, 0x00, 0xe9, + 0x23, 0x10, 0x80, 0xe0, 0x04, 0xaa, 0xd3, 0x04, 0xab, 0xc4, 0x03, 0xac, + 0xb7, 0x03, 0xad, 0x8f, 0x03, 0xae, 0xf0, 0x02, 0xef, 0x29, 0x10, 0x00, + 0xb0, 0xdf, 0x02, 0xb2, 0xd2, 0x02, 0xb3, 0xb2, 0x01, 0xb4, 0x3c, 0xf5, + 0x25, 0x10, 0x80, 0x33, 0x08, 0x22, 0xc1, 0x1d, 0xb7, 0x06, 0x42, 0xbc, + 0x22, 0x1a, 0x10, 0x40, 0xe1, 0x1d, 0x10, 0x00, 0x11, 0xda, 0x31, 0x01, + 0xff, 0x43, 0x51, 0x02, 0x66, 0x10, 0x00, 0x43, 0x8f, 0x00, 0x65, 0x10, + 0x40, 0xec, 0x54, 0x10, 0x80, 0x09, 0xf2, 0x52, 0x10, 0xc0, 0x00, 0xf2, + 0x53, 0x10, 0x40, 0xec, 0x55, 0x10, 0x40, 0xf5, 0x26, 0x10, 0x40, 0xe1, + 0x10, 0x10, 0x80, 0x13, 0x42, 0x22, 0x00, 0x11, 0x10, 0x00, 0xb4, 0x01, + 0xff, 0xe1, 0x0b, 0x10, 0x00, 0x42, 0x22, 0x00, 0x0c, 0x10, 0x40, 0x08, + 0x6f, 0x6a, 0x01, 0xff, 0xa2, 0x4b, 0xa4, 0x33, 0x42, 0x0c, 0x08, 0xe8, + 0xa9, 0x00, 0xa7, 0x21, 0xaa, 0x15, 0x43, 0x2c, 0x0e, 0xfa, 0xa9, 0x00, + 0xae, 0x01, 0xff, 0x42, 0x2a, 0x05, 0xef, 0xa9, 0x00, 0x42, 0xbc, 0x22, + 0xe7, 0xa9, 0x40, 0xe1, 0xeb, 0xa9, 0x00, 0x42, 0x22, 0x00, 0xec, 0xa9, + 0x40, 0xe1, 0xe9, 0xa9, 0x00, 0x42, 0x22, 0x00, 0xea, 0xa9, 0x40, 0xe1, + 0xfb, 0xa9, 0x00, 0xa4, 0x06, 0x42, 0x22, 0x00, 0xfc, 0xa9, 0x40, 0xe1, + 0xed, 0xa9, 0x00, 0x42, 0x22, 0x00, 0xee, 0xa9, 0x40, 0xe1, 0xfd, 0xa9, + 0x00, 0x42, 0x22, 0x00, 0xfe, 0xa9, 0x40, 0xe1, 0x1e, 0x10, 0x00, 0x4d, + 0x47, 0x83, 0x61, 0x10, 0x00, 0xa8, 0x06, 0x42, 0x40, 0x06, 0x51, 0x10, + 0x40, 0xe1, 0x50, 0x10, 0x80, 0x11, 0x0b, 0xfd, 0xa4, 0x01, 0xff, 0x43, + 0x91, 0x20, 0x7e, 0xaa, 0x00, 0x43, 0xa4, 0x02, 0x7f, 0xaa, 0x40, 0x02, + 0x92, 0x00, 0x01, 0xff, 0xe1, 0x22, 0x10, 0x00, 0xa2, 0x60, 0xa3, 0x54, + 0x42, 0xf0, 0x10, 0x7b, 0x10, 0x00, 0x42, 0x0c, 0x08, 0x7e, 0x10, 0x00, + 0xa7, 0x3c, 0x42, 0x22, 0x00, 0x81, 0x10, 0x00, 0x43, 0x9c, 0x45, 0xe2, + 0xa9, 0x00, 0xab, 0x24, 0xae, 0x12, 0x43, 0xff, 0x1c, 0x7d, 0x10, 0x00, + 0x43, 0x8f, 0x00, 0x80, 0x10, 0x00, 0x42, 0x59, 0x00, 0x79, 0x10, 0x40, + 0xe1, 0x7c, 0x10, 0x00, 0x42, 0x2a, 0x05, 0xe3, 0xa9, 0x00, 0x42, 0xbc, + 0x22, 0x7a, 0x10, 0x40, 0xe1, 0x75, 0x10, 0x00, 0x42, 0x22, 0x00, 0x76, + 0x10, 0x40, 0xe1, 0x77, 0x10, 0x00, 0x42, 0x22, 0x00, 0xe0, 0xa9, 0x40, + 0xe1, 0x78, 0x10, 0x00, 0x42, 0x22, 0x00, 0xe1, 0xa9, 0x40, 0xe1, 0x7f, + 0x10, 0x00, 0x42, 0x22, 0x00, 0xe4, 0xa9, 0x40, 0xe1, 0x1b, 0x10, 0x00, + 0x4f, 0x55, 0x74, 0x8e, 0x10, 0x40, 0xe1, 0x15, 0x10, 0x00, 0x42, 0x22, + 0x00, 0x16, 0x10, 0x40, 0xe1, 0x14, 0x10, 0x00, 0x42, 0x24, 0x02, 0x04, + 0x10, 0x00, 0xae, 0x06, 0x42, 0xbc, 0x22, 0x09, 0x10, 0x40, 0xe1, 0x0f, + 0x10, 0x00, 0x42, 0xbc, 0x22, 0x0a, 0x10, 0x40, 0xe1, 0x19, 0x10, 0x00, + 0x03, 0xb6, 0x00, 0x01, 0xff, 0x02, 0x65, 0x27, 0x10, 0xe5, 0x28, 0x10, + 0x00, 0x43, 0x9c, 0x45, 0x5b, 0x10, 0x00, 0x43, 0x39, 0x48, 0x5a, 0x10, + 0x40, 0xe1, 0x5c, 0x10, 0x00, 0xe5, 0x5d, 0x10, 0x40, 0xe1, 0x1c, 0x10, + 0x00, 0x42, 0x74, 0x00, 0x20, 0x10, 0x40, 0xe1, 0x00, 0x10, 0x00, 0x42, + 0x22, 0x00, 0x01, 0x10, 0xc0, 0x00, 0x04, 0xd7, 0x43, 0x01, 0xff, 0xa3, + 0x70, 0xa4, 0x5c, 0x42, 0x0c, 0x08, 0x6f, 0xaa, 0x00, 0x42, 0x24, 0x02, + 0x60, 0xaa, 0x00, 0xa8, 0x44, 0xaa, 0x38, 0x43, 0x2c, 0x0e, 0x6e, 0xaa, + 0x00, 0xae, 0x26, 0x42, 0x71, 0x00, 0x73, 0xaa, 0x00, 0x42, 0x40, 0x06, + 0x6c, 0xaa, 0x00, 0x02, 0xee, 0x05, 0x0c, 0x42, 0xed, 0x26, 0x71, 0xaa, + 0x00, 0x42, 0x59, 0x00, 0x72, 0xaa, 0x40, 0xe1, 0x66, 0xaa, 0x00, 0x42, + 0x22, 0x00, 0x67, 0xaa, 0x40, 0xe1, 0x6b, 0xaa, 0x00, 0x42, 0xbc, 0x22, + 0x65, 0xaa, 0x40, 0xe1, 0x63, 0xaa, 0x00, 0x42, 0x22, 0x00, 0x64, 0xaa, + 0x40, 0xe1, 0x6d, 0xaa, 0x00, 0x42, 0x22, 0x00, 0x6e, 0xaa, 0x40, 0xa4, + 0x06, 0x42, 0x22, 0x00, 0x6a, 0xaa, 0x40, 0xe1, 0x68, 0xaa, 0x00, 0x42, + 0x22, 0x00, 0x69, 0xaa, 0x40, 0xe1, 0x61, 0xaa, 0x00, 0x42, 0x22, 0x00, + 0x62, 0xaa, 0x40, 0xe1, 0x07, 0x10, 0x00, 0x42, 0x22, 0x00, 0x08, 0x10, + 0x40, 0xe9, 0x24, 0x10, 0x40, 0xe1, 0x02, 0x10, 0x00, 0x42, 0x22, 0x00, + 0x03, 0x10, 0x00, 0x47, 0x81, 0xc6, 0x3f, 0x10, 0x40, 0x11, 0x6f, 0x28, + 0x01, 0xff, 0x44, 0xf5, 0xef, 0x70, 0x10, 0x00, 0x43, 0x01, 0x46, 0x6e, + 0x10, 0x00, 0x43, 0x51, 0xf3, 0x6f, 0x10, 0x40, 0xe1, 0x12, 0x10, 0x00, + 0xa4, 0x06, 0x42, 0x22, 0x00, 0x13, 0x10, 0x40, 0xe1, 0x0d, 0x10, 0x00, + 0x42, 0x22, 0x00, 0x0e, 0x10, 0x40, 0xe1, 0x05, 0x10, 0x00, 0x42, 0x22, + 0x00, 0x06, 0x10, 0x40, 0xe1, 0x17, 0x10, 0x00, 0x42, 0x22, 0x00, 0x18, + 0x10, 0x40, 0x47, 0x12, 0xd2, 0x7a, 0xaa, 0x00, 0xf5, 0x2a, 0x10, 0x40, + 0x45, 0x12, 0x0b, 0xe2, 0x16, 0x01, 0xa6, 0x2e, 0x44, 0xcf, 0x2a, 0xe3, + 0x16, 0x01, 0x43, 0x0e, 0x0b, 0xdb, 0x16, 0x01, 0xb3, 0x14, 0xb4, 0x06, + 0x44, 0x43, 0x1e, 0xda, 0x16, 0x41, 0x44, 0x25, 0x01, 0xdd, 0x16, 0x01, + 0x42, 0x15, 0x02, 0xdc, 0x16, 0x41, 0x44, 0xc9, 0x1d, 0xe1, 0x16, 0x01, + 0x42, 0x01, 0x26, 0xe0, 0x16, 0x41, 0x43, 0xd2, 0x05, 0xdf, 0x16, 0x01, + 0x43, 0xf6, 0x06, 0xde, 0x16, 0x41, 0x45, 0x12, 0x0b, 0x48, 0x10, 0x00, + 0xa6, 0x2e, 0x44, 0xcf, 0x2a, 0x49, 0x10, 0x00, 0x43, 0x0e, 0x0b, 0x41, + 0x10, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, 0x40, 0x10, 0x40, + 0x44, 0x25, 0x01, 0x43, 0x10, 0x00, 0x42, 0x15, 0x02, 0x42, 0x10, 0x40, + 0x44, 0xc9, 0x1d, 0x47, 0x10, 0x00, 0x42, 0x01, 0x26, 0x46, 0x10, 0x40, + 0x43, 0xd2, 0x05, 0x45, 0x10, 0x00, 0x43, 0xf6, 0x06, 0x44, 0x10, 0x40, + 0xad, 0x06, 0x4e, 0x0d, 0x7c, 0x82, 0x10, 0x40, 0x06, 0x4d, 0x33, 0x17, + 0x0a, 0xcf, 0xae, 0x01, 0xff, 0x42, 0x74, 0x00, 0x60, 0x10, 0x00, 0x42, + 0x6c, 0x00, 0x5f, 0x10, 0x00, 0x42, 0x2a, 0x05, 0x5e, 0x10, 0x40, 0x42, + 0x22, 0x00, 0x3e, 0x10, 0x00, 0x42, 0x71, 0x00, 0x3c, 0x10, 0x00, 0x42, + 0xa9, 0x01, 0x3d, 0x10, 0x00, 0x42, 0xbc, 0x22, 0x3b, 0x10, 0x40, 0x03, + 0x97, 0x21, 0x8d, 0x11, 0x02, 0xb8, 0x04, 0xb6, 0x0e, 0xb3, 0x01, 0xff, + 0x45, 0x22, 0xe7, 0x44, 0xf3, 0x81, 0xa5, 0x0e, 0x02, 0x36, 0x00, 0x01, + 0xff, 0x80, 0x8b, 0x0e, 0x03, 0x13, 0x00, 0x01, 0xff, 0x48, 0x13, 0xa9, + 0xb9, 0xf3, 0x81, 0xf8, 0x0d, 0x44, 0x09, 0x28, 0xb5, 0xf3, 0x01, 0xb3, + 0x01, 0xff, 0x44, 0x69, 0xef, 0xbc, 0xf3, 0x01, 0x06, 0x60, 0x16, 0x01, + 0xff, 0x0b, 0x37, 0x99, 0xd3, 0x0d, 0xa2, 0x86, 0x0d, 0xa3, 0xe0, 0x0a, + 0xa4, 0x8b, 0x0a, 0xa5, 0xd5, 0x09, 0xa6, 0xd2, 0x08, 0xa7, 0x83, 0x08, + 0x02, 0x22, 0x00, 0xe2, 0x07, 0x4d, 0x58, 0x84, 0x98, 0xd1, 0x01, 0xab, + 0x81, 0x07, 0xac, 0xe2, 0x06, 0xad, 0x9c, 0x06, 0xae, 0xf7, 0x05, 0xaf, + 0x98, 0x05, 0xb0, 0xd5, 0x04, 0x02, 0x7c, 0x00, 0x9e, 0x04, 0xb2, 0xe9, + 0x03, 0xb3, 0xa4, 0x02, 0xb4, 0x30, 0xb6, 0x22, 0xb7, 0x0a, 0x4a, 0x2c, + 0x64, 0x43, 0xd1, 0x01, 0xfa, 0x8e, 0xd1, 0x41, 0x05, 0x80, 0xb3, 0x06, + 0x4f, 0x00, 0x6f, 0xb3, 0xd1, 0x41, 0x44, 0x09, 0x28, 0x5d, 0xd1, 0x01, + 0x44, 0x74, 0x33, 0x3b, 0xd1, 0x41, 0x44, 0x7e, 0x07, 0xd3, 0xd1, 0x01, + 0x4c, 0x03, 0x93, 0x57, 0xd1, 0x41, 0x06, 0x42, 0xdb, 0xb3, 0x01, 0xa8, + 0x9a, 0x01, 0x47, 0x03, 0xd4, 0xd8, 0xd1, 0x81, 0x8c, 0x01, 0xf2, 0x96, + 0xd1, 0x81, 0x1c, 0x43, 0x5d, 0x01, 0x97, 0xd1, 0x81, 0x06, 0x4d, 0xbe, + 0x8a, 0x17, 0xd1, 0x41, 0x80, 0x01, 0xff, 0x45, 0x48, 0x0e, 0x99, 0xd1, + 0x01, 0x42, 0x50, 0x02, 0x9a, 0xd1, 0x41, 0x06, 0x03, 0x02, 0x01, 0xff, + 0x0a, 0xc0, 0x38, 0x11, 0x15, 0xba, 0x38, 0x01, 0xff, 0x45, 0x0c, 0x03, + 0x55, 0xd1, 0x01, 0x45, 0xad, 0x02, 0x54, 0xd1, 0x41, 0x05, 0x9e, 0x14, + 0x41, 0x05, 0xc3, 0x00, 0x31, 0x06, 0xc8, 0x00, 0x21, 0x03, 0x7d, 0x15, + 0x01, 0xff, 0x45, 0x0c, 0x03, 0x49, 0xd1, 0x01, 0x06, 0xc8, 0x00, 0x06, + 0x45, 0xad, 0x02, 0x48, 0xd1, 0x41, 0x45, 0x0c, 0x03, 0x51, 0xd1, 0x01, + 0x45, 0xad, 0x02, 0x50, 0xd1, 0x41, 0x45, 0x0c, 0x03, 0x4d, 0xd1, 0x01, + 0x45, 0xad, 0x02, 0x4c, 0xd1, 0x41, 0x45, 0x0c, 0x03, 0x4b, 0xd1, 0x01, + 0x45, 0xad, 0x02, 0x4a, 0xd1, 0x41, 0x45, 0x0c, 0x03, 0x4f, 0xd1, 0x01, + 0x45, 0xad, 0x02, 0x4e, 0xd1, 0x41, 0x4a, 0x0f, 0xa6, 0xdc, 0xd1, 0x41, + 0x0c, 0x6f, 0x90, 0x06, 0x4e, 0x8f, 0x7b, 0x18, 0xd1, 0x41, 0x44, 0x09, + 0x28, 0x62, 0xd1, 0x01, 0x44, 0x74, 0x33, 0x40, 0xd1, 0x41, 0x1b, 0xf1, + 0x1b, 0x18, 0x19, 0xf3, 0x1b, 0x01, 0xff, 0x4a, 0x97, 0x6e, 0xc8, 0xd1, + 0x01, 0x48, 0x99, 0x6e, 0xc7, 0xd1, 0xc1, 0x00, 0x4d, 0x6b, 0x7f, 0xc9, + 0xd1, 0x41, 0x4a, 0x97, 0x6e, 0xcb, 0xd1, 0x81, 0x06, 0x48, 0x99, 0x6e, + 0xca, 0xd1, 0x41, 0x0c, 0x6b, 0x7f, 0x01, 0xff, 0xd1, 0xcc, 0xd1, 0x01, + 0xd2, 0xcd, 0xd1, 0x01, 0xd3, 0xce, 0xd1, 0x41, 0x48, 0x80, 0xc4, 0xd6, + 0xd1, 0x81, 0xb4, 0x01, 0xa5, 0x7a, 0xa8, 0x62, 0xa9, 0x25, 0x43, 0x0c, + 0x00, 0xe9, 0xd1, 0x01, 0x06, 0xbc, 0x24, 0x06, 0x45, 0xaf, 0xeb, 0x8d, + 0xd1, 0x41, 0xe2, 0xd2, 0xd1, 0x01, 0x09, 0xc1, 0x38, 0x01, 0xff, 0x45, + 0x0c, 0x03, 0x47, 0xd1, 0x01, 0x45, 0xad, 0x02, 0x46, 0xd1, 0x41, 0x4c, + 0xa3, 0x92, 0x00, 0xd1, 0x01, 0xb8, 0x01, 0xff, 0x8d, 0x24, 0xb4, 0x01, + 0xff, 0x06, 0x04, 0x26, 0x11, 0x09, 0x85, 0xc1, 0x01, 0xff, 0x44, 0x09, + 0x28, 0x63, 0xd1, 0x01, 0x44, 0x74, 0x33, 0x41, 0xd1, 0x41, 0x44, 0x09, + 0x28, 0x61, 0xd1, 0x01, 0x44, 0x74, 0x33, 0x3f, 0xd1, 0x41, 0x4a, 0x93, + 0x7b, 0x1b, 0xd1, 0x01, 0x50, 0x96, 0x67, 0x1c, 0xd1, 0x41, 0x04, 0xf7, + 0xb0, 0x06, 0x4b, 0xf3, 0xa0, 0x05, 0xd1, 0x41, 0x44, 0xa5, 0x01, 0x31, + 0xd1, 0x01, 0x42, 0x50, 0x02, 0x30, 0xd1, 0x41, 0x43, 0x68, 0x21, 0x0b, + 0xd1, 0x01, 0x02, 0x7d, 0x02, 0x01, 0xff, 0x07, 0xb1, 0xcf, 0x17, 0x07, + 0x4d, 0xd3, 0x01, 0xff, 0x45, 0x0c, 0x03, 0xbe, 0xd1, 0x01, 0x44, 0x74, + 0x33, 0xc6, 0xd1, 0x01, 0x45, 0xad, 0x02, 0xbd, 0xd1, 0x41, 0x45, 0x0c, + 0x03, 0xba, 0xd1, 0x01, 0x44, 0x74, 0x33, 0xc4, 0xd1, 0x01, 0x45, 0xad, + 0x02, 0xb9, 0xd1, 0x41, 0x47, 0x2d, 0xcd, 0xdb, 0xd1, 0x41, 0xa5, 0x0f, + 0xa9, 0x01, 0xff, 0x4f, 0xa7, 0x6d, 0x07, 0xd1, 0x01, 0x49, 0x3f, 0xbc, + 0x8c, 0xd1, 0x41, 0x04, 0xf3, 0x6a, 0x06, 0x53, 0xc3, 0x4e, 0x03, 0xd1, + 0x41, 0x45, 0x22, 0x0a, 0x08, 0xd1, 0x01, 0x0a, 0x9d, 0xa9, 0x01, 0xff, + 0xd1, 0x0d, 0xd1, 0x01, 0xd2, 0x0e, 0xd1, 0x01, 0xd3, 0x0f, 0xd1, 0x41, + 0x06, 0x06, 0x03, 0x11, 0x0b, 0x8e, 0x9d, 0x01, 0xff, 0x44, 0xf9, 0xee, + 0x38, 0xd1, 0x01, 0x45, 0xac, 0xe4, 0x39, 0xd1, 0x41, 0x44, 0x09, 0x28, + 0x5f, 0xd1, 0x01, 0x44, 0x74, 0x33, 0x3d, 0xd1, 0x01, 0x05, 0x3b, 0x2d, + 0x01, 0xff, 0x44, 0x30, 0x3b, 0x33, 0xd1, 0x01, 0x45, 0xf5, 0xb0, 0x32, + 0xd1, 0x41, 0x53, 0x3b, 0x48, 0x56, 0xd1, 0x01, 0xa5, 0x22, 0x44, 0x6d, + 0xf0, 0x8f, 0xd1, 0x01, 0x4c, 0x8f, 0x91, 0x44, 0xd1, 0x01, 0xaf, 0x01, + 0xff, 0x45, 0x74, 0xe5, 0xd4, 0xd1, 0x01, 0x47, 0x76, 0xd5, 0xd9, 0xd1, + 0xc1, 0x00, 0x47, 0x2d, 0xcd, 0xda, 0xd1, 0x41, 0x04, 0x7b, 0xaf, 0x06, + 0x4c, 0xfb, 0x94, 0xdd, 0xd1, 0x41, 0x44, 0xb9, 0x00, 0xae, 0xd1, 0x01, + 0x47, 0xd4, 0xd6, 0xaf, 0xd1, 0x41, 0x02, 0xcd, 0x05, 0x42, 0x0f, 0xcf, + 0x72, 0x11, 0x06, 0x3a, 0xc2, 0x01, 0xff, 0x44, 0xf9, 0xee, 0x36, 0xd1, + 0x01, 0x45, 0xac, 0xe4, 0x37, 0xd1, 0x41, 0xd1, 0x9b, 0xd1, 0x81, 0x20, + 0xd2, 0x9c, 0xd1, 0x01, 0xd3, 0x9d, 0xd1, 0x01, 0xd4, 0x9e, 0xd1, 0x01, + 0xd5, 0x9f, 0xd1, 0x01, 0xd6, 0xa0, 0xd1, 0x01, 0xd7, 0xa1, 0xd1, 0x01, + 0xd8, 0xa2, 0xd1, 0x01, 0xd9, 0xa3, 0xd1, 0x41, 0xd0, 0xa4, 0xd1, 0x01, + 0xd1, 0xa5, 0xd1, 0x41, 0x17, 0x75, 0x2c, 0x06, 0x4b, 0x92, 0x7b, 0x16, + 0xd1, 0x41, 0x44, 0x09, 0x28, 0x64, 0xd1, 0x01, 0x44, 0x74, 0x33, 0x42, + 0xd1, 0x41, 0x07, 0x68, 0x92, 0x12, 0x4a, 0x93, 0xa9, 0xa7, 0xd1, 0x01, + 0x4d, 0x30, 0x87, 0x58, 0xd1, 0x01, 0x4c, 0x57, 0x96, 0x59, 0xd1, 0x41, + 0x44, 0xa5, 0x01, 0x2f, 0xd1, 0x01, 0x42, 0x50, 0x02, 0x2e, 0xd1, 0x41, + 0x45, 0x48, 0xcf, 0xb6, 0xd1, 0x01, 0x44, 0xad, 0xef, 0x90, 0xd1, 0x01, + 0x45, 0x4e, 0xd3, 0xbb, 0xd1, 0x81, 0x21, 0x0d, 0x16, 0x87, 0x11, 0x04, + 0xb7, 0x04, 0x01, 0xff, 0x45, 0xe1, 0x65, 0x3a, 0xd1, 0x01, 0x50, 0xd6, + 0x65, 0x29, 0xd1, 0x41, 0x45, 0x0c, 0x03, 0x53, 0xd1, 0x01, 0x45, 0xad, + 0x02, 0x52, 0xd1, 0x41, 0x80, 0x01, 0xff, 0x45, 0x0c, 0x03, 0xbc, 0xd1, + 0x01, 0x44, 0x74, 0x33, 0xc5, 0xd1, 0x41, 0x4f, 0x99, 0x6c, 0x06, 0xd1, + 0x01, 0x44, 0xa2, 0x49, 0xb7, 0xd1, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x4f, + 0x97, 0x6e, 0xc2, 0xd1, 0x01, 0x4d, 0x99, 0x6e, 0xc1, 0xd1, 0x41, 0x06, + 0xc8, 0xdc, 0x06, 0x44, 0xac, 0x1c, 0xea, 0xd1, 0x41, 0x46, 0x52, 0xda, + 0xde, 0xd1, 0x01, 0xa5, 0x30, 0xa6, 0x22, 0x49, 0x5d, 0xb9, 0xe3, 0xd1, + 0x01, 0x12, 0xaf, 0x54, 0x0c, 0x4f, 0x57, 0x72, 0xe1, 0xd1, 0x01, 0x4a, + 0x7f, 0xb3, 0xe2, 0xd1, 0x41, 0x44, 0xa5, 0x01, 0xe4, 0xd1, 0x01, 0x42, + 0x50, 0x02, 0xe5, 0xd1, 0x41, 0x49, 0x59, 0xba, 0xe0, 0xd1, 0x01, 0x48, + 0x04, 0xb9, 0xe8, 0xd1, 0x41, 0x10, 0xc6, 0x63, 0x06, 0x4b, 0xf6, 0x9f, + 0xdf, 0xd1, 0x41, 0x44, 0xa5, 0x01, 0xe6, 0xd1, 0x01, 0x42, 0x50, 0x02, + 0xe7, 0xd1, 0x41, 0x03, 0x24, 0x00, 0x06, 0x49, 0x6e, 0xc0, 0xa6, 0xd1, + 0x41, 0x44, 0x09, 0x28, 0x5e, 0xd1, 0x01, 0x4a, 0x79, 0xaf, 0xb0, 0xd1, + 0x01, 0x44, 0x74, 0x33, 0x3c, 0xd1, 0x41, 0x45, 0x09, 0xbf, 0x1e, 0xd1, + 0x81, 0x34, 0x09, 0x79, 0xbb, 0x24, 0xb2, 0x01, 0xff, 0x09, 0x91, 0xb5, + 0x11, 0x08, 0x80, 0xc5, 0x01, 0xff, 0x46, 0x52, 0xda, 0xd0, 0xd1, 0x01, + 0x46, 0xa8, 0xdb, 0xd1, 0xd1, 0x41, 0x48, 0xc8, 0xc8, 0x95, 0xd1, 0x01, + 0x45, 0x48, 0x0e, 0x94, 0xd1, 0x41, 0x44, 0xa5, 0x01, 0xb2, 0xd1, 0x01, + 0x42, 0x50, 0x02, 0xb1, 0xd1, 0x41, 0x08, 0x38, 0xc2, 0x01, 0xff, 0x44, + 0xf9, 0xee, 0x1f, 0xd1, 0x01, 0x45, 0xac, 0xe4, 0x20, 0xd1, 0x41, 0x45, + 0x09, 0xbf, 0x22, 0xd1, 0x81, 0x68, 0x46, 0x60, 0xdb, 0x10, 0xd1, 0x81, + 0x5b, 0xa9, 0x3a, 0x04, 0x04, 0xb9, 0x2a, 0xaf, 0x11, 0x04, 0xe5, 0xf2, + 0x01, 0xff, 0x45, 0x0c, 0x03, 0xc0, 0xd1, 0x01, 0x45, 0xad, 0x02, 0xbf, + 0xd1, 0x41, 0x43, 0x2d, 0x01, 0x91, 0xd1, 0x01, 0x03, 0x80, 0xc0, 0x01, + 0xff, 0x4a, 0x93, 0x7b, 0x19, 0xd1, 0x01, 0x50, 0x96, 0x67, 0x1d, 0xd1, + 0x41, 0x44, 0xa5, 0x01, 0x2d, 0xd1, 0x01, 0x42, 0x50, 0x02, 0x2c, 0xd1, + 0x41, 0xae, 0x06, 0x4d, 0xee, 0x89, 0x1a, 0xd1, 0x41, 0x4a, 0xcc, 0x4e, + 0x02, 0xd1, 0x01, 0x0e, 0x01, 0x78, 0x01, 0xff, 0xd1, 0x6a, 0xd1, 0x01, + 0xd2, 0x6b, 0xd1, 0x01, 0xd3, 0x6c, 0xd1, 0x41, 0x46, 0x1f, 0x07, 0x11, + 0xd1, 0x41, 0x08, 0x38, 0xc2, 0x01, 0xff, 0x44, 0xf9, 0xee, 0x23, 0xd1, + 0x01, 0x45, 0xac, 0xe4, 0x24, 0xd1, 0x41, 0x06, 0x13, 0x0b, 0x23, 0x03, + 0x1b, 0x00, 0x01, 0xff, 0x44, 0x99, 0xbd, 0x74, 0xd1, 0x01, 0x49, 0xe1, + 0xbc, 0xa8, 0xd1, 0x01, 0x46, 0x97, 0x35, 0x7a, 0xd1, 0x01, 0x44, 0xb1, + 0xf2, 0x78, 0xd1, 0x01, 0x43, 0xd8, 0x25, 0x76, 0xd1, 0x41, 0x44, 0x09, + 0x28, 0x60, 0xd1, 0x01, 0x44, 0x74, 0x33, 0x3e, 0xd1, 0x41, 0xa1, 0x31, + 0xa5, 0x23, 0x06, 0x3c, 0x01, 0x0d, 0x09, 0x06, 0xbf, 0x01, 0xff, 0xd1, + 0x25, 0xd1, 0x01, 0xd2, 0x26, 0xd1, 0x41, 0x47, 0xcf, 0x4e, 0x01, 0xd1, + 0x01, 0x44, 0x30, 0x3b, 0x2b, 0xd1, 0x01, 0x45, 0xf5, 0xb0, 0x2a, 0xd1, + 0x41, 0x49, 0x77, 0xb7, 0x93, 0xd1, 0x01, 0x4a, 0xf1, 0xaa, 0xa9, 0xd1, + 0x41, 0x45, 0x9b, 0xe1, 0x0a, 0xd1, 0x01, 0x47, 0x97, 0xd2, 0x09, 0xd1, + 0x01, 0x42, 0xf2, 0x1b, 0xb4, 0xd1, 0x81, 0x06, 0x4c, 0x2b, 0x95, 0x04, + 0xd1, 0x41, 0x44, 0xbd, 0x2d, 0xb5, 0xd1, 0x41, 0x45, 0x09, 0xbf, 0x21, + 0xd1, 0x01, 0x46, 0x80, 0xd9, 0x13, 0xd1, 0x01, 0x50, 0x26, 0x64, 0x45, + 0xd1, 0x01, 0xac, 0xef, 0x01, 0xaf, 0x14, 0xb2, 0x06, 0x47, 0x0c, 0xd7, + 0x35, 0xd1, 0x41, 0x47, 0x79, 0xb7, 0x92, 0xd1, 0x01, 0x43, 0x7c, 0xf4, + 0xcf, 0xd1, 0x41, 0x42, 0xf0, 0x10, 0x0c, 0xd1, 0x01, 0xad, 0x01, 0xff, + 0x07, 0x35, 0x16, 0x06, 0x48, 0x60, 0xc8, 0x34, 0xd1, 0x41, 0xa1, 0xb0, + 0x01, 0x44, 0xb4, 0x9a, 0x89, 0xd1, 0x01, 0x02, 0x3b, 0x01, 0x93, 0x01, + 0x02, 0xd5, 0x04, 0x71, 0x48, 0xa8, 0xc6, 0xac, 0xd1, 0x01, 0x45, 0x3f, + 0xe8, 0x82, 0xd1, 0x01, 0x47, 0x23, 0xd3, 0x7f, 0xd1, 0x81, 0x58, 0x43, + 0x76, 0x06, 0x86, 0xd1, 0x01, 0xb3, 0x27, 0xb4, 0x06, 0x46, 0xf4, 0xe0, + 0xab, 0xd1, 0x41, 0x45, 0x30, 0x7d, 0x7d, 0xd1, 0x01, 0xb2, 0x01, 0xff, + 0x06, 0x09, 0x78, 0x06, 0x4b, 0x99, 0x9d, 0x8b, 0xd1, 0x41, 0xd1, 0x67, + 0xd1, 0x01, 0xd2, 0x68, 0xd1, 0x01, 0xd3, 0x69, 0xd1, 0x41, 0x44, 0x7e, + 0xa9, 0x88, 0xd1, 0x01, 0x4d, 0x46, 0x86, 0xad, 0xd1, 0x01, 0x50, 0x06, + 0x66, 0x66, 0xd1, 0x01, 0xb4, 0x01, 0xff, 0x05, 0x31, 0xb5, 0x06, 0x42, + 0xb5, 0x05, 0x65, 0xd1, 0x41, 0x46, 0x22, 0xdd, 0x7e, 0xd1, 0x01, 0xef, + 0x7c, 0xd1, 0x41, 0x49, 0x2e, 0xb5, 0x80, 0xd1, 0x41, 0x03, 0xa7, 0x57, + 0x06, 0x42, 0xba, 0x04, 0x87, 0xd1, 0x41, 0xd1, 0x6e, 0xd1, 0x01, 0xd2, + 0x6f, 0xd1, 0x01, 0xd3, 0x70, 0xd1, 0x01, 0xd4, 0x71, 0xd1, 0x01, 0xd5, + 0x72, 0xd1, 0x41, 0x42, 0x52, 0x00, 0x85, 0xd1, 0x01, 0x4b, 0x16, 0xa4, + 0x8a, 0xd1, 0x01, 0x46, 0x42, 0xe1, 0xaa, 0xd1, 0x41, 0x45, 0xdb, 0x04, + 0x7b, 0xd1, 0x81, 0x06, 0x4f, 0x37, 0x74, 0x6d, 0xd1, 0x41, 0x49, 0x2e, + 0xb5, 0x81, 0xd1, 0x41, 0xa9, 0x11, 0x0f, 0x73, 0x74, 0x01, 0xff, 0x45, + 0x0c, 0x03, 0x5b, 0xd1, 0x01, 0x45, 0xad, 0x02, 0x5a, 0xd1, 0x41, 0x45, + 0x5d, 0xe8, 0xd7, 0xd1, 0x01, 0x43, 0xc4, 0x32, 0xd5, 0xd1, 0x41, 0x05, + 0x9e, 0x3f, 0x2e, 0xb2, 0x01, 0xff, 0x02, 0x0e, 0x03, 0x1d, 0xa5, 0x01, + 0xff, 0x48, 0xc8, 0xc3, 0x12, 0xd1, 0x01, 0xb6, 0x01, 0xff, 0xe5, 0x5c, + 0xd1, 0x01, 0x42, 0x5f, 0x03, 0xb8, 0xd1, 0xc1, 0x00, 0x45, 0xe1, 0x65, + 0xc3, 0xd1, 0x41, 0xe5, 0x14, 0xd1, 0x01, 0x43, 0x67, 0x09, 0x15, 0xd1, + 0x41, 0x44, 0x99, 0xbd, 0x73, 0xd1, 0x01, 0x46, 0x97, 0x35, 0x79, 0xd1, + 0x01, 0x44, 0xb1, 0xf2, 0x77, 0xd1, 0x01, 0x43, 0xd8, 0x25, 0x75, 0xd1, + 0x41, 0x44, 0xa5, 0x01, 0x84, 0xd1, 0x01, 0x42, 0x50, 0x02, 0x83, 0xd1, + 0x41, 0x4b, 0x0e, 0x98, 0x98, 0xf3, 0x41, 0x49, 0x03, 0xb9, 0x6d, 0x26, + 0x00, 0x4c, 0x67, 0x92, 0x6e, 0x26, 0x00, 0x4a, 0xf5, 0xb0, 0x6f, 0x26, + 0x40, 0x46, 0x24, 0x69, 0x64, 0xcc, 0x41, 0x04, 0x10, 0x9c, 0x69, 0xa9, + 0x01, 0xff, 0x43, 0xef, 0x6b, 0xb8, 0x22, 0x00, 0x02, 0xbb, 0x04, 0x16, + 0x43, 0x9c, 0x12, 0x8c, 0x22, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x4e, 0xfc, + 0x24, 0x8d, 0x22, 0x00, 0x45, 0x4d, 0x17, 0x8e, 0x22, 0x40, 0x4f, 0x7b, + 0x6c, 0xb6, 0xf3, 0x01, 0x08, 0xbd, 0x04, 0x01, 0xff, 0x44, 0x5a, 0x03, + 0xd7, 0x00, 0x80, 0x04, 0xf8, 0x15, 0x27, 0x40, 0x80, 0x01, 0xff, 0x03, + 0xe1, 0x05, 0x11, 0x05, 0x51, 0x00, 0x01, 0xff, 0x49, 0x3a, 0x1e, 0x30, + 0x2a, 0x00, 0x48, 0xe3, 0x59, 0x31, 0x2a, 0x40, 0x4d, 0x0f, 0x82, 0x37, + 0x2a, 0x00, 0x50, 0x86, 0x64, 0x34, 0x2a, 0x00, 0x51, 0xa3, 0x5d, 0x35, + 0x2a, 0x00, 0x48, 0x01, 0x02, 0x3b, 0x2a, 0x40, 0x07, 0xec, 0x05, 0x06, + 0x4c, 0xf8, 0x26, 0xa9, 0x12, 0x41, 0xe1, 0x80, 0x12, 0x01, 0xa2, 0xca, + 0x01, 0xa3, 0xbd, 0x01, 0xa4, 0x9e, 0x01, 0xe5, 0x83, 0x12, 0x01, 0xa7, + 0x8d, 0x01, 0x42, 0x22, 0x00, 0xa6, 0x12, 0x01, 0xe9, 0x81, 0x12, 0x01, + 0xaa, 0x77, 0xab, 0x6b, 0x42, 0x74, 0x00, 0xa3, 0x12, 0x01, 0x42, 0x6c, + 0x00, 0xa0, 0x12, 0x01, 0xae, 0x4d, 0xb0, 0x41, 0xb2, 0x2f, 0x42, 0x40, + 0x06, 0xa5, 0x12, 0x01, 0xb4, 0x10, 0xf5, 0x82, 0x12, 0x01, 0x42, 0xf5, + 0x0a, 0xa4, 0x12, 0x01, 0x42, 0xbc, 0x22, 0xa1, 0x12, 0x41, 0xe1, 0x96, + 0x12, 0x01, 0x42, 0x22, 0x00, 0x97, 0x12, 0x01, 0xb4, 0x01, 0xff, 0xe1, + 0x90, 0x12, 0x01, 0x42, 0x22, 0x00, 0x91, 0x12, 0x41, 0xe1, 0xa2, 0x12, + 0x01, 0x42, 0x22, 0x00, 0xa8, 0x12, 0x01, 0x42, 0x71, 0x00, 0xa7, 0x12, + 0x41, 0xe1, 0x9b, 0x12, 0x01, 0x42, 0x22, 0x00, 0x9c, 0x12, 0x41, 0xe1, + 0x9a, 0x12, 0x01, 0x42, 0x2a, 0x05, 0x95, 0x12, 0x01, 0x42, 0xbc, 0x22, + 0x8f, 0x12, 0x41, 0xe1, 0x84, 0x12, 0x01, 0x42, 0x22, 0x00, 0x85, 0x12, + 0x41, 0xe1, 0x8c, 0x12, 0x01, 0x42, 0x56, 0x19, 0x8d, 0x12, 0x41, 0xe1, + 0x86, 0x12, 0x01, 0x42, 0x22, 0x00, 0x88, 0x12, 0x41, 0xe1, 0x98, 0x12, + 0x01, 0xa4, 0x06, 0x42, 0x22, 0x00, 0x99, 0x12, 0x41, 0xe1, 0x92, 0x12, + 0x01, 0x42, 0xf0, 0x10, 0x93, 0x12, 0x01, 0x42, 0x22, 0x00, 0x94, 0x12, + 0x41, 0xe1, 0x8a, 0x12, 0x01, 0x42, 0x22, 0x00, 0x8b, 0x12, 0x41, 0xe1, + 0x9d, 0x12, 0x01, 0x42, 0x22, 0x00, 0x9f, 0x12, 0x41, 0x4c, 0x87, 0x00, + 0x6b, 0x22, 0x00, 0x49, 0xec, 0x00, 0x6a, 0x22, 0x40, 0xa4, 0xb8, 0x01, + 0x07, 0xec, 0x05, 0x01, 0xff, 0xe1, 0x46, 0x6a, 0x01, 0x42, 0x16, 0x00, + 0x44, 0x6a, 0x01, 0x43, 0x70, 0x38, 0x4b, 0x6a, 0x01, 0x42, 0xf0, 0x10, + 0x45, 0x6a, 0x81, 0x97, 0x01, 0xe5, 0x58, 0x6a, 0x81, 0x8d, 0x01, 0x02, + 0x22, 0x00, 0x80, 0x01, 0xab, 0x6e, 0x42, 0x74, 0x00, 0x5b, 0x6a, 0x81, + 0x63, 0xad, 0x55, 0xae, 0x47, 0xef, 0x52, 0x6a, 0x81, 0x3a, 0xb0, 0x2e, + 0xb2, 0x24, 0x43, 0xa3, 0x0c, 0x54, 0x6a, 0x01, 0xb4, 0x0c, 0x42, 0xa9, + 0x01, 0x57, 0x6a, 0x01, 0x42, 0xa9, 0x47, 0x42, 0x6a, 0x41, 0xe1, 0x40, + 0x6a, 0x01, 0x42, 0xd5, 0x18, 0x5e, 0x6a, 0x01, 0x43, 0xe6, 0x01, 0x55, + 0x6a, 0x41, 0xe9, 0x5d, 0x6a, 0x01, 0xef, 0x53, 0x6a, 0x41, 0xe1, 0x50, + 0x6a, 0x01, 0x42, 0x49, 0x00, 0x47, 0x6a, 0x41, 0xec, 0x4d, 0x6a, 0x01, + 0xef, 0x51, 0x6a, 0x41, 0x42, 0xf1, 0x06, 0x41, 0x6a, 0x01, 0x42, 0x9e, + 0x01, 0x4f, 0x6a, 0x41, 0x43, 0x61, 0x87, 0x4e, 0x6a, 0x01, 0x42, 0x29, + 0x02, 0x43, 0x6a, 0x41, 0xee, 0x5a, 0x6a, 0x41, 0x44, 0x95, 0xef, 0x4c, + 0x6a, 0x01, 0x43, 0x15, 0x52, 0x48, 0x6a, 0x01, 0xef, 0x59, 0x6a, 0x41, + 0xe9, 0x5c, 0x6a, 0x01, 0xef, 0x49, 0x6a, 0x41, 0xe1, 0x56, 0x6a, 0x41, + 0xe9, 0x4a, 0x6a, 0x41, 0x44, 0x73, 0x20, 0x6e, 0x6a, 0x01, 0x05, 0xf0, + 0x06, 0x06, 0x4b, 0x09, 0xa1, 0x6f, 0x6a, 0x41, 0x45, 0x12, 0x0b, 0x68, + 0x6a, 0x01, 0xa6, 0x2e, 0x44, 0xcf, 0x2a, 0x69, 0x6a, 0x01, 0x43, 0x0e, + 0x0b, 0x61, 0x6a, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, 0x60, + 0x6a, 0x41, 0x44, 0x25, 0x01, 0x63, 0x6a, 0x01, 0x42, 0x15, 0x02, 0x62, + 0x6a, 0x41, 0x44, 0xc9, 0x1d, 0x67, 0x6a, 0x01, 0x42, 0x01, 0x26, 0x66, + 0x6a, 0x41, 0x43, 0xd2, 0x05, 0x65, 0x6a, 0x01, 0x43, 0xf6, 0x06, 0x64, + 0x6a, 0x41, 0x4a, 0x4f, 0x4b, 0xf1, 0xf4, 0x81, 0x86, 0x1f, 0xa4, 0xcb, + 0x0a, 0xae, 0xaa, 0x01, 0xaf, 0x85, 0x01, 0x03, 0xd6, 0x05, 0x77, 0xb4, + 0x50, 0xb5, 0x0c, 0x4a, 0x4d, 0xb3, 0xa5, 0xf3, 0x01, 0x43, 0x7d, 0x78, + 0xff, 0xf5, 0x41, 0x02, 0x11, 0x00, 0x1c, 0x42, 0x46, 0x03, 0x01, 0xf4, + 0x81, 0x06, 0x42, 0x53, 0x00, 0x44, 0xf4, 0x41, 0x80, 0x01, 0xff, 0x44, + 0x0c, 0x08, 0x2d, 0xf4, 0x01, 0x44, 0xac, 0xe0, 0xa4, 0xfa, 0x41, 0x45, + 0xaf, 0xe1, 0xfb, 0xf5, 0x01, 0x43, 0x56, 0x07, 0xf0, 0x26, 0xc0, 0x00, + 0x80, 0x01, 0xff, 0x49, 0x9f, 0xb6, 0xb5, 0xf6, 0x01, 0x48, 0x70, 0xc4, + 0xa0, 0xf6, 0x01, 0x47, 0xc9, 0x71, 0x9e, 0xf6, 0x41, 0x4d, 0xe0, 0x7c, + 0x36, 0xf9, 0x01, 0x02, 0x0c, 0x00, 0x01, 0xff, 0x80, 0x0c, 0x4f, 0x0f, + 0x6f, 0xbc, 0xf9, 0x01, 0x43, 0x04, 0x20, 0xe3, 0xf6, 0x41, 0x44, 0xd6, + 0xdc, 0xe5, 0xf6, 0x01, 0x47, 0xb5, 0xd5, 0xf5, 0xf6, 0x41, 0xe5, 0x4c, + 0xf5, 0x01, 0x43, 0xc6, 0x07, 0x9f, 0xf9, 0x41, 0x48, 0xe8, 0xc4, 0xf0, + 0xf5, 0x01, 0x02, 0x92, 0x00, 0x06, 0x42, 0x46, 0x03, 0xce, 0xfa, 0x41, + 0x44, 0x5f, 0x2c, 0x6e, 0xf9, 0x01, 0x46, 0x9a, 0xdd, 0xf5, 0xcd, 0x01, + 0x50, 0x76, 0x68, 0x91, 0xf3, 0x41, 0x02, 0xc6, 0x1c, 0x85, 0x09, 0x07, + 0x5c, 0xd1, 0x35, 0x43, 0x09, 0x24, 0x12, 0xf4, 0x81, 0x28, 0xaf, 0x01, + 0xff, 0x09, 0x06, 0x96, 0x0c, 0x44, 0x63, 0x4c, 0x9d, 0xf6, 0x01, 0x4d, + 0xf7, 0x88, 0x8d, 0x23, 0x40, 0x45, 0x52, 0x72, 0x00, 0xd3, 0x01, 0xb9, + 0x01, 0xff, 0x43, 0x1c, 0x01, 0x8a, 0x26, 0x00, 0x42, 0x9e, 0x01, 0x8b, + 0x26, 0x40, 0x45, 0x0b, 0x08, 0x35, 0xf4, 0x41, 0x45, 0x7d, 0x07, 0x00, + 0x18, 0x80, 0xb3, 0x08, 0x02, 0x13, 0x05, 0xa2, 0x08, 0xa4, 0xd3, 0x07, + 0x48, 0xce, 0x29, 0x01, 0x18, 0x00, 0xa6, 0x9f, 0x07, 0x4e, 0xa9, 0x78, + 0x67, 0x16, 0x81, 0x91, 0x07, 0x07, 0xec, 0x05, 0x68, 0x07, 0x1c, 0xd3, + 0x58, 0x46, 0x4e, 0xde, 0x0a, 0x18, 0x00, 0x4d, 0x0d, 0x88, 0x61, 0x16, + 0x81, 0x3a, 0xb3, 0x1a, 0xb4, 0x06, 0x4f, 0x91, 0x74, 0x0e, 0x18, 0x40, + 0x4f, 0xfe, 0x70, 0x06, 0x18, 0x00, 0x59, 0x0f, 0x26, 0x63, 0x16, 0x01, + 0x66, 0x71, 0x07, 0x6c, 0x16, 0x41, 0x5c, 0x16, 0x18, 0x07, 0x18, 0x00, + 0x4a, 0x78, 0x07, 0x69, 0x16, 0xc1, 0x00, 0x06, 0x50, 0x00, 0x01, 0xff, + 0x4f, 0x88, 0x07, 0x6b, 0x16, 0x01, 0x48, 0x28, 0x05, 0x6a, 0x16, 0x41, + 0x06, 0x50, 0x00, 0x01, 0xff, 0x4f, 0x88, 0x07, 0x66, 0x16, 0x01, 0x48, + 0x28, 0x05, 0x65, 0x16, 0x41, 0x45, 0x13, 0x05, 0x08, 0x18, 0x00, 0x49, + 0x81, 0x16, 0x09, 0x18, 0x40, 0xe1, 0x20, 0x18, 0x80, 0xef, 0x04, 0x42, + 0x16, 0x00, 0x2a, 0x18, 0x00, 0x02, 0x6d, 0x14, 0xd5, 0x04, 0x42, 0xf0, + 0x10, 0x33, 0x18, 0x00, 0xe5, 0x21, 0x18, 0x80, 0xc5, 0x04, 0x42, 0x0c, + 0x08, 0x39, 0x18, 0x00, 0x42, 0x24, 0x02, 0x2d, 0x18, 0x00, 0x43, 0x3b, + 0x41, 0x3e, 0x18, 0x00, 0xe9, 0x22, 0x18, 0x00, 0x42, 0x56, 0x19, 0x35, + 0x18, 0x00, 0xab, 0x9c, 0x04, 0xac, 0x8f, 0x04, 0x42, 0x6c, 0x00, 0x2e, + 0x18, 0x80, 0x8b, 0x03, 0x42, 0x2a, 0x05, 0x28, 0x18, 0x00, 0xef, 0x23, + 0x18, 0x80, 0xfb, 0x02, 0x42, 0xbb, 0x09, 0x2b, 0x18, 0x00, 0x42, 0x43, + 0x14, 0x2c, 0x18, 0x00, 0x42, 0x71, 0x00, 0x37, 0x18, 0x00, 0xb3, 0xdc, + 0x01, 0xb4, 0x28, 0xf5, 0x24, 0x18, 0x80, 0x1f, 0x42, 0xa9, 0x01, 0x38, + 0x18, 0x00, 0x42, 0xbc, 0x22, 0x36, 0x18, 0x00, 0xba, 0x01, 0xff, 0xe1, + 0x3d, 0x18, 0x00, 0x42, 0x49, 0x00, 0x41, 0x18, 0x00, 0x42, 0x71, 0x00, + 0x3f, 0x18, 0x40, 0xe5, 0x26, 0x18, 0x40, 0xe1, 0x32, 0x18, 0x00, 0x04, + 0xfe, 0x70, 0x06, 0x42, 0x40, 0x06, 0x3c, 0x18, 0x40, 0xa1, 0x8b, 0x01, + 0x42, 0x16, 0x00, 0x4b, 0x18, 0x00, 0x43, 0x91, 0x20, 0x52, 0x18, 0x00, + 0xa4, 0x73, 0xe5, 0x44, 0x18, 0x00, 0x42, 0x24, 0x02, 0x4e, 0x18, 0x80, + 0x64, 0x43, 0x3b, 0x41, 0x59, 0x18, 0x00, 0xe9, 0x45, 0x18, 0x00, 0xaa, + 0x4e, 0x42, 0x1b, 0x02, 0x57, 0x18, 0x00, 0x4f, 0xf0, 0x6f, 0x43, 0x18, + 0x00, 0x42, 0x6c, 0x00, 0x4f, 0x18, 0x00, 0x43, 0x4a, 0x07, 0x5b, 0x18, + 0x00, 0xef, 0x46, 0x18, 0x80, 0x2d, 0x42, 0xbb, 0x09, 0x4c, 0x18, 0x00, + 0x42, 0x43, 0x14, 0x4d, 0x18, 0x00, 0xb4, 0x15, 0xf5, 0x47, 0x18, 0x80, + 0x0c, 0x42, 0xa9, 0x01, 0x56, 0x18, 0x00, 0x42, 0xbc, 0x22, 0x55, 0x18, + 0x40, 0xe5, 0x49, 0x18, 0x40, 0xe1, 0x50, 0x18, 0x00, 0x42, 0x40, 0x06, + 0x54, 0x18, 0x40, 0xe5, 0x48, 0x18, 0x40, 0xe1, 0x53, 0x18, 0x00, 0x42, + 0x1b, 0x01, 0x5a, 0x18, 0x40, 0xe1, 0x58, 0x18, 0x40, 0xe1, 0x51, 0x18, + 0x00, 0x42, 0x59, 0x00, 0x5c, 0x18, 0x40, 0x08, 0xf5, 0xb5, 0x06, 0x42, + 0x1d, 0x01, 0x4a, 0x18, 0x40, 0x42, 0x12, 0x00, 0x98, 0x18, 0x00, 0x43, + 0xcb, 0xc0, 0x99, 0x18, 0x40, 0xe1, 0x30, 0x18, 0x00, 0x42, 0x22, 0x00, + 0x31, 0x18, 0x00, 0x04, 0x16, 0x18, 0x01, 0xff, 0x43, 0x1c, 0x01, 0x62, + 0x18, 0x00, 0x43, 0x91, 0x20, 0x71, 0x18, 0x00, 0x42, 0xf0, 0x10, 0x69, + 0x18, 0x00, 0xe5, 0x5d, 0x18, 0x00, 0x42, 0x0c, 0x08, 0x6b, 0x18, 0x00, + 0x42, 0x24, 0x02, 0x64, 0x18, 0x80, 0x54, 0x42, 0x22, 0x00, 0x65, 0x18, + 0x80, 0x49, 0xe9, 0x5e, 0x18, 0x80, 0x40, 0x42, 0x56, 0x19, 0x6a, 0x18, + 0x00, 0x42, 0x1b, 0x02, 0x63, 0x18, 0x00, 0x42, 0xbb, 0x09, 0x66, 0x18, + 0x00, 0x43, 0x8f, 0x95, 0x70, 0x18, 0x00, 0x43, 0xa4, 0x02, 0x67, 0x18, + 0x00, 0xb4, 0x16, 0xf5, 0x61, 0x18, 0x80, 0x0d, 0xba, 0x01, 0xff, 0xe1, + 0x6f, 0x18, 0x00, 0x42, 0x22, 0x00, 0x72, 0x18, 0x40, 0xe5, 0x60, 0x18, + 0x40, 0xe1, 0x68, 0x18, 0x00, 0x42, 0x40, 0x06, 0x6e, 0x18, 0x40, 0xf9, + 0x5f, 0x18, 0x40, 0xe1, 0x6d, 0x18, 0x40, 0xe1, 0x6c, 0x18, 0x40, 0xe5, + 0x25, 0x18, 0x40, 0x05, 0x1e, 0xd3, 0x01, 0xff, 0x09, 0xf4, 0xb5, 0x1c, + 0x42, 0x0c, 0x08, 0x76, 0x18, 0x00, 0xe9, 0x73, 0x18, 0x00, 0x42, 0x1b, + 0x02, 0x74, 0x18, 0x00, 0x42, 0x71, 0x00, 0x75, 0x18, 0x00, 0x43, 0xcb, + 0xc0, 0x77, 0x18, 0x40, 0x43, 0xd9, 0x2a, 0xa8, 0x18, 0x00, 0xa3, 0x45, + 0xa4, 0x37, 0x43, 0x0e, 0x9c, 0x9a, 0x18, 0x00, 0x43, 0x9c, 0x45, 0x9d, + 0x18, 0x00, 0x43, 0x2a, 0x09, 0xaa, 0x18, 0x00, 0x43, 0x39, 0x48, 0x9b, + 0x18, 0x00, 0x43, 0xfb, 0x20, 0xa2, 0x18, 0x00, 0xb4, 0x0d, 0xba, 0x01, + 0xff, 0xe1, 0xa5, 0x18, 0x00, 0x42, 0x22, 0x00, 0xa4, 0x18, 0x40, 0xe1, + 0xa0, 0x18, 0x00, 0x42, 0x12, 0x00, 0x9e, 0x18, 0x40, 0x43, 0xe7, 0x4b, + 0x9f, 0x18, 0x00, 0x42, 0x22, 0x00, 0xa1, 0x18, 0x40, 0xe1, 0x9c, 0x18, + 0x00, 0x42, 0xbc, 0x22, 0xa3, 0x18, 0x40, 0xe1, 0x2f, 0x18, 0x00, 0x42, + 0x22, 0x00, 0x40, 0x18, 0x40, 0xe1, 0x3a, 0x18, 0x00, 0x42, 0x22, 0x00, + 0x3b, 0x18, 0x40, 0xe5, 0x27, 0x18, 0x40, 0xe1, 0x34, 0x18, 0x80, 0x04, + 0xe9, 0x42, 0x18, 0x40, 0x4e, 0xdc, 0x19, 0x78, 0x18, 0x40, 0x08, 0xf5, + 0xb5, 0x06, 0x42, 0x1d, 0x01, 0x29, 0x18, 0x40, 0xe1, 0x87, 0x18, 0x80, + 0x96, 0x01, 0x46, 0x25, 0x9d, 0x85, 0x18, 0x00, 0x42, 0x37, 0x00, 0x8b, + 0x18, 0x00, 0xa4, 0x71, 0x05, 0x22, 0x00, 0x63, 0xe9, 0x88, 0x18, 0x80, + 0x58, 0x42, 0x1b, 0x02, 0x89, 0x18, 0x00, 0xae, 0x44, 0xb0, 0x38, 0x43, + 0xfb, 0x20, 0x94, 0x18, 0x00, 0xb4, 0x19, 0x47, 0xe8, 0x70, 0x83, 0x18, + 0x00, 0x4b, 0xdc, 0xa4, 0x81, 0x18, 0x00, 0xba, 0x01, 0xff, 0xe1, 0x96, + 0x18, 0x00, 0x42, 0x22, 0x00, 0x95, 0x18, 0x40, 0xe1, 0x90, 0x18, 0x00, + 0x4b, 0x20, 0x9d, 0x86, 0x18, 0x00, 0xb4, 0x01, 0xff, 0xe1, 0x8c, 0x18, + 0x00, 0x42, 0x22, 0x00, 0x8d, 0x18, 0x40, 0xe1, 0x92, 0x18, 0x00, 0x42, + 0x22, 0x00, 0x93, 0x18, 0x40, 0x42, 0x24, 0x02, 0x8a, 0x18, 0x00, 0x42, + 0x2a, 0x05, 0x8f, 0x18, 0x40, 0x4f, 0xe0, 0x70, 0x84, 0x18, 0x40, 0xf5, + 0xa6, 0x18, 0x00, 0x42, 0xbc, 0x22, 0xa7, 0x18, 0x40, 0xe1, 0x91, 0x18, + 0x80, 0x06, 0x42, 0xf0, 0x10, 0x8e, 0x18, 0x40, 0x45, 0x87, 0xe6, 0xa9, + 0x18, 0x00, 0x44, 0x21, 0xf1, 0x82, 0x18, 0x40, 0xe8, 0x97, 0x18, 0x00, + 0x4b, 0x64, 0xa0, 0x80, 0x18, 0x40, 0x55, 0x82, 0x07, 0x68, 0x16, 0x41, + 0x48, 0xd2, 0x46, 0x05, 0x18, 0x00, 0x17, 0x97, 0x30, 0x06, 0x48, 0x82, + 0x16, 0x03, 0x18, 0x40, 0x44, 0xf5, 0x06, 0x0f, 0x18, 0x00, 0x43, 0x0e, + 0x0b, 0x0b, 0x18, 0x00, 0xb4, 0x01, 0xff, 0x44, 0x25, 0x01, 0x0d, 0x18, + 0x00, 0x42, 0x15, 0x02, 0x0c, 0x18, 0x40, 0x05, 0xf0, 0x06, 0x06, 0x59, + 0x60, 0x25, 0x62, 0x16, 0x41, 0x45, 0x12, 0x0b, 0x18, 0x18, 0x00, 0xa6, + 0x2e, 0x44, 0xcf, 0x2a, 0x19, 0x18, 0x00, 0x43, 0x0e, 0x0b, 0x11, 0x18, + 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, 0x10, 0x18, 0x40, 0x44, + 0x25, 0x01, 0x13, 0x18, 0x00, 0x42, 0x15, 0x02, 0x12, 0x18, 0x40, 0x44, + 0xc9, 0x1d, 0x17, 0x18, 0x00, 0x42, 0x01, 0x26, 0x16, 0x18, 0x40, 0x43, + 0xd2, 0x05, 0x15, 0x18, 0x00, 0x43, 0xf6, 0x06, 0x14, 0x18, 0x40, 0x43, + 0xd7, 0x02, 0x04, 0x18, 0x00, 0x43, 0x15, 0x05, 0x02, 0x18, 0x40, 0x06, + 0x50, 0x00, 0x01, 0xff, 0x4f, 0x88, 0x07, 0x64, 0x16, 0x01, 0x48, 0x28, + 0x05, 0x60, 0x16, 0x41, 0x80, 0x06, 0x4b, 0x1b, 0x64, 0x11, 0xf9, 0x41, + 0x43, 0xd7, 0x38, 0xb0, 0xf4, 0x01, 0x4a, 0xa7, 0xb3, 0xb8, 0xf4, 0x41, + 0xa5, 0xa9, 0x14, 0xa9, 0x06, 0x4b, 0x42, 0xa4, 0x0a, 0x2a, 0x40, 0x80, + 0xba, 0x10, 0x05, 0x7c, 0x0c, 0x01, 0xff, 0x59, 0x53, 0x23, 0x5b, 0xab, + 0x00, 0x07, 0xec, 0x05, 0x01, 0xff, 0xa1, 0x95, 0x10, 0xa2, 0xfc, 0x0f, + 0xa3, 0xa6, 0x0c, 0xa4, 0xe3, 0x0b, 0xa5, 0x8a, 0x0b, 0xa7, 0xee, 0x0a, + 0xa8, 0xc4, 0x0a, 0xac, 0x9e, 0x09, 0xad, 0xd1, 0x08, 0x4a, 0xf7, 0xae, + 0xfe, 0x02, 0x00, 0xb0, 0xbc, 0x08, 0xb2, 0xda, 0x07, 0xb3, 0x47, 0xb4, + 0x39, 0xb5, 0x1d, 0xb6, 0x0f, 0xb9, 0x01, 0xff, 0x57, 0x2d, 0x2d, 0xeb, + 0x02, 0x00, 0x56, 0x87, 0x34, 0xea, 0x02, 0x40, 0x4c, 0xce, 0x0b, 0xc8, + 0x02, 0x00, 0x46, 0x5a, 0xd7, 0xec, 0x02, 0x40, 0x4a, 0x43, 0xae, 0xed, + 0x02, 0x00, 0x02, 0x20, 0x00, 0x04, 0xf3, 0x70, 0xa7, 0x40, 0x49, 0xe1, + 0x01, 0xc4, 0x02, 0x00, 0x44, 0xf5, 0x38, 0xd4, 0x02, 0x40, 0x4f, 0x8a, + 0x3b, 0xd0, 0x02, 0x00, 0x4b, 0x28, 0x0a, 0xbb, 0x02, 0x40, 0xa8, 0x82, + 0x07, 0x05, 0x5e, 0x07, 0x21, 0x0a, 0x21, 0xb2, 0x11, 0x0b, 0x70, 0x06, + 0x01, 0xff, 0x55, 0x84, 0x3b, 0x82, 0x07, 0x01, 0x50, 0x89, 0x3b, 0x81, + 0x07, 0x41, 0x49, 0xe4, 0x42, 0x20, 0xa7, 0x00, 0x48, 0x1d, 0xb5, 0x21, + 0xa7, 0x40, 0xe1, 0x43, 0x1d, 0x80, 0xc7, 0x06, 0xe2, 0x47, 0x1d, 0x80, + 0xa9, 0x06, 0xe3, 0x9c, 0x1d, 0x80, 0xb7, 0x05, 0xe4, 0x48, 0x1d, 0x80, + 0xe7, 0x04, 0xe5, 0x49, 0x1d, 0x80, 0xc9, 0x04, 0xe6, 0xa0, 0x1d, 0x80, + 0xbd, 0x04, 0xe7, 0x4d, 0x1d, 0x80, 0x9a, 0x04, 0xe8, 0xb0, 0x02, 0x80, + 0xf7, 0x03, 0xa9, 0xe8, 0x03, 0xea, 0xb2, 0x02, 0x80, 0xdc, 0x03, 0xeb, + 0x4f, 0x1d, 0x00, 0xec, 0xe1, 0x02, 0x80, 0x8a, 0x03, 0xed, 0x50, 0x1d, + 0x80, 0xfe, 0x02, 0x07, 0xc8, 0x04, 0xed, 0x02, 0xef, 0x52, 0x1d, 0x80, + 0xd4, 0x02, 0xf0, 0x56, 0x1d, 0x80, 0xc8, 0x02, 0xf1, 0xa5, 0x07, 0x01, + 0xf2, 0xb3, 0x02, 0x80, 0x93, 0x02, 0xf3, 0xe2, 0x02, 0x80, 0xe9, 0x01, + 0xf4, 0x57, 0x1d, 0x80, 0x51, 0xf5, 0x58, 0x1d, 0x80, 0x38, 0xf6, 0x5b, + 0x1d, 0x80, 0x22, 0xf7, 0xb7, 0x02, 0x00, 0xf8, 0xe3, 0x02, 0x00, 0xf9, + 0xb8, 0x02, 0x00, 0xfa, 0xbb, 0x1d, 0xc0, 0x00, 0x06, 0x50, 0x00, 0x01, + 0xff, 0x44, 0x72, 0x0b, 0xbd, 0x1d, 0x00, 0x4e, 0xa2, 0x0e, 0xbc, 0x1d, + 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x44, 0xac, 0x0e, 0xb9, 0x1d, 0x00, + 0x4a, 0x4b, 0xb0, 0xb0, 0x07, 0x41, 0x80, 0x06, 0x46, 0xcf, 0x15, 0xb7, + 0x1d, 0x40, 0x43, 0x16, 0x00, 0xb6, 0x1d, 0x00, 0x4e, 0xc9, 0x7e, 0x5f, + 0xab, 0x40, 0x06, 0x50, 0x00, 0x82, 0x01, 0x53, 0xad, 0x48, 0xab, 0x07, + 0x01, 0x4b, 0xec, 0x9b, 0xae, 0x07, 0x01, 0x44, 0xc8, 0x95, 0xbf, 0x1d, + 0x00, 0x49, 0x56, 0xbd, 0x54, 0x1d, 0x00, 0x49, 0x18, 0xbf, 0xac, 0x07, + 0x81, 0x5d, 0x06, 0x71, 0x07, 0x01, 0xff, 0xe1, 0x44, 0x1d, 0x80, 0x49, + 0xe8, 0xa3, 0x1d, 0x00, 0xe9, 0x4e, 0x1d, 0x00, 0xed, 0x5a, 0x1d, 0x80, + 0x36, 0x46, 0x1e, 0x29, 0x4c, 0x1d, 0x00, 0xf2, 0xb4, 0x02, 0x80, 0x13, + 0xf6, 0xba, 0x1d, 0x00, 0xf7, 0x69, 0xab, 0x00, 0xf9, 0xa0, 0x07, 0xc1, + 0x00, 0x4a, 0x55, 0xa6, 0xa1, 0x07, 0x41, 0x06, 0x50, 0x00, 0x01, 0xff, + 0x44, 0xac, 0x0e, 0xb5, 0x02, 0x00, 0x48, 0x91, 0x75, 0xa6, 0x07, 0xc1, + 0x00, 0x53, 0x57, 0x47, 0xa7, 0x07, 0x41, 0x4e, 0x8b, 0x75, 0xad, 0x1d, + 0x40, 0xe5, 0x46, 0x1d, 0x00, 0x44, 0x3f, 0xe4, 0x9b, 0x1d, 0x40, 0x54, + 0x9c, 0x0e, 0xad, 0x07, 0x41, 0x4c, 0xf3, 0x56, 0xb5, 0x1d, 0x00, 0x4e, + 0xa2, 0x0e, 0xaf, 0x07, 0x41, 0x06, 0x50, 0x00, 0x14, 0xa3, 0x06, 0x49, + 0x08, 0xba, 0x59, 0x1d, 0x40, 0x43, 0xb6, 0x7b, 0x4a, 0x1d, 0x00, 0x46, + 0xb2, 0xca, 0xa2, 0x1d, 0x40, 0x44, 0x72, 0x0b, 0xba, 0x07, 0x01, 0x44, + 0xac, 0x0e, 0xb3, 0x1d, 0x40, 0x06, 0x50, 0x00, 0x1b, 0x48, 0x48, 0xc3, + 0x91, 0x07, 0x01, 0x08, 0xde, 0x14, 0x01, 0xff, 0xe5, 0x8e, 0x07, 0x01, + 0x4c, 0xce, 0x28, 0xe4, 0x02, 0x00, 0x46, 0x1e, 0x29, 0x9f, 0x1d, 0x40, + 0x48, 0x31, 0x72, 0xa9, 0x07, 0x01, 0x44, 0x8f, 0x17, 0xa8, 0x07, 0x41, + 0x42, 0x49, 0x00, 0xb2, 0x1d, 0x40, 0x4c, 0xda, 0x28, 0xa2, 0x07, 0x01, + 0x04, 0xf7, 0x04, 0x01, 0xff, 0xe5, 0x4b, 0x1d, 0x00, 0xef, 0x53, 0x1d, + 0x40, 0x49, 0xb1, 0x57, 0xae, 0x1d, 0x00, 0x4e, 0xa2, 0x0e, 0xaf, 0x1d, + 0x40, 0x4a, 0xa7, 0x24, 0xac, 0x1d, 0x40, 0x06, 0x50, 0x00, 0x1f, 0x43, + 0x37, 0xf4, 0x9e, 0x07, 0x81, 0x12, 0x4a, 0x9b, 0xab, 0xf9, 0xa7, 0x00, + 0x49, 0x18, 0xbf, 0x99, 0x07, 0x01, 0x49, 0xb2, 0xc1, 0x9a, 0x07, 0x41, + 0x54, 0x9c, 0x0e, 0x9f, 0x07, 0x41, 0x44, 0x5b, 0xa6, 0x9b, 0x07, 0x01, + 0x4f, 0xd3, 0x6e, 0x5d, 0xab, 0x00, 0x4c, 0x2e, 0x23, 0x5e, 0xab, 0x00, + 0x4c, 0xf3, 0x56, 0xaa, 0x1d, 0x00, 0x4e, 0xa2, 0x0e, 0xa9, 0x1d, 0xc0, + 0x00, 0x49, 0x29, 0xb4, 0x9d, 0x07, 0x41, 0x52, 0xc3, 0x4f, 0xa8, 0x1d, + 0x40, 0x4c, 0xda, 0x28, 0xa4, 0x1d, 0x00, 0x43, 0x1b, 0x05, 0xa5, 0x1d, + 0x40, 0x06, 0x50, 0x00, 0x0d, 0x43, 0x4c, 0x0a, 0x5c, 0xab, 0xc0, 0x00, + 0x4a, 0xa7, 0x24, 0x97, 0x07, 0x41, 0x44, 0xac, 0x0e, 0xb1, 0x02, 0x00, + 0x46, 0x52, 0x05, 0x95, 0x07, 0x41, 0x4a, 0xa7, 0x24, 0x93, 0x07, 0x01, + 0x44, 0x00, 0x21, 0xe0, 0x02, 0x00, 0x05, 0x87, 0x2e, 0x01, 0xff, 0x45, + 0x2c, 0x58, 0x5e, 0x1d, 0x00, 0x43, 0x53, 0x20, 0x60, 0x1d, 0x40, 0x4b, + 0xb5, 0x9b, 0x90, 0x07, 0x41, 0x42, 0x1d, 0x01, 0x51, 0x1d, 0x00, 0x42, + 0xa4, 0x02, 0xb4, 0x1d, 0x00, 0x42, 0x53, 0x00, 0x9e, 0x1d, 0x00, 0x42, + 0x54, 0x28, 0xbe, 0x1d, 0x40, 0x06, 0x50, 0x00, 0x33, 0xa5, 0x25, 0x54, + 0xc4, 0x44, 0xa1, 0x1d, 0x80, 0x18, 0x49, 0xb2, 0xc1, 0x87, 0x07, 0xc1, + 0x00, 0x06, 0x50, 0x00, 0x01, 0xff, 0x44, 0x72, 0x0b, 0x89, 0x07, 0x01, + 0x4e, 0xa2, 0x0e, 0x88, 0x07, 0x41, 0x49, 0xc0, 0x23, 0x98, 0x07, 0x41, + 0x43, 0x49, 0x19, 0x5f, 0x1d, 0x00, 0x4a, 0x15, 0xb4, 0x8a, 0x07, 0x41, + 0x44, 0xac, 0x0e, 0x8c, 0x07, 0x81, 0x06, 0x44, 0x8f, 0x17, 0x8b, 0x07, + 0x41, 0x49, 0x3b, 0xb4, 0x8d, 0x07, 0x41, 0x4a, 0xb6, 0x48, 0x9d, 0x1d, + 0x00, 0x07, 0xe5, 0x05, 0x17, 0x42, 0x49, 0x00, 0x61, 0x1d, 0x00, 0x06, + 0x60, 0x1b, 0x01, 0xff, 0x45, 0x38, 0xaf, 0xa4, 0x07, 0x01, 0x4f, 0x75, + 0x72, 0x8f, 0x07, 0x41, 0x42, 0x80, 0x12, 0x80, 0x07, 0x01, 0xe2, 0x84, + 0x07, 0x01, 0xe7, 0x92, 0x07, 0x81, 0x36, 0xe8, 0x96, 0x07, 0x01, 0xe9, + 0xa6, 0x1d, 0x80, 0x21, 0xec, 0xab, 0x1d, 0x80, 0x16, 0xee, 0xb0, 0x1d, + 0x00, 0x42, 0x60, 0x51, 0xa3, 0x07, 0x01, 0xf2, 0xaa, 0x07, 0x01, 0xf5, + 0xb8, 0x1d, 0x00, 0xf9, 0xb2, 0x07, 0x41, 0x4a, 0x55, 0xa6, 0x9c, 0x07, + 0x41, 0x4c, 0xda, 0x28, 0xa7, 0x1d, 0x00, 0x49, 0xc6, 0xbc, 0xb6, 0x02, + 0x40, 0x4a, 0xa7, 0x24, 0x94, 0x07, 0x41, 0x4a, 0xa7, 0x24, 0x85, 0x07, + 0x01, 0x47, 0x09, 0xcf, 0xb1, 0x1d, 0x00, 0x43, 0x94, 0x0f, 0x5d, 0x1d, + 0x00, 0x4c, 0x6f, 0x93, 0x55, 0x1d, 0x40, 0xe5, 0x83, 0x07, 0x01, 0x42, + 0x9e, 0x01, 0x5c, 0x1d, 0x00, 0x44, 0x3f, 0xe4, 0x45, 0x1d, 0x40, 0x43, + 0x83, 0x79, 0xfd, 0x02, 0x00, 0x4f, 0x76, 0x71, 0x8a, 0xa7, 0x40, 0x06, + 0xd2, 0x10, 0x3d, 0xa5, 0x1d, 0x4a, 0x41, 0xab, 0xde, 0x02, 0x00, 0x05, + 0xc9, 0x00, 0x01, 0xff, 0x49, 0xe1, 0x01, 0xc3, 0x02, 0x00, 0x49, 0xfe, + 0x13, 0xbe, 0x02, 0x00, 0x44, 0xf5, 0x38, 0x6b, 0xab, 0x40, 0x61, 0x8f, + 0x0e, 0xb9, 0x07, 0x01, 0x07, 0xdf, 0x14, 0x01, 0xff, 0x45, 0x13, 0x05, + 0xbd, 0x02, 0x00, 0x4c, 0xce, 0x28, 0xc1, 0x02, 0xc0, 0x00, 0x4c, 0xda, + 0x28, 0xb4, 0x07, 0x41, 0x45, 0x94, 0x3b, 0xf8, 0x02, 0x00, 0x4a, 0xcc, + 0x41, 0x1c, 0xa7, 0x00, 0x50, 0xad, 0x00, 0x1d, 0xa7, 0x00, 0x59, 0x66, + 0x24, 0x1e, 0xa7, 0x00, 0x48, 0x29, 0x56, 0x1b, 0xa7, 0x40, 0x48, 0xe0, + 0x71, 0xd6, 0x02, 0x00, 0x44, 0xeb, 0x1a, 0xb9, 0x02, 0x40, 0x45, 0xae, + 0x70, 0xc9, 0x02, 0x00, 0xa9, 0x01, 0xff, 0xa4, 0x06, 0x48, 0x69, 0x98, + 0xd7, 0x02, 0x40, 0x80, 0x1b, 0x04, 0x80, 0x02, 0x01, 0xff, 0x07, 0x3b, + 0x01, 0x06, 0x4c, 0x15, 0x23, 0xf4, 0x02, 0x40, 0x4c, 0xfb, 0x8b, 0xf6, + 0x02, 0x00, 0x4c, 0x15, 0x23, 0xf5, 0x02, 0x40, 0x07, 0xb0, 0x1f, 0x0c, + 0x52, 0x6b, 0x53, 0x14, 0xa7, 0x00, 0x48, 0x75, 0x53, 0xe7, 0x02, 0x40, + 0x52, 0x6b, 0x53, 0x0f, 0xa7, 0x00, 0x48, 0x75, 0x53, 0x0a, 0xa7, 0x40, + 0x4c, 0xf5, 0x84, 0xb7, 0x07, 0x01, 0x04, 0xc4, 0x00, 0x86, 0x01, 0x02, + 0xd1, 0x00, 0x01, 0xff, 0x80, 0x06, 0x55, 0x06, 0x3b, 0x1a, 0xa7, 0x40, + 0x4c, 0xfb, 0x8b, 0xcf, 0x02, 0x00, 0x51, 0xcf, 0x04, 0x88, 0xa7, 0x00, + 0x02, 0x3b, 0x01, 0x53, 0x4c, 0x15, 0x23, 0xce, 0x02, 0x00, 0x59, 0x66, + 0x24, 0x1f, 0xa7, 0x00, 0x04, 0xc3, 0x00, 0x30, 0x46, 0xad, 0x70, 0xcd, + 0x02, 0x00, 0x02, 0x0d, 0x00, 0x1a, 0xb4, 0x0c, 0x4c, 0x29, 0x56, 0xf0, + 0x02, 0x00, 0x4d, 0xcd, 0x0b, 0xcc, 0x02, 0x40, 0x44, 0x36, 0x23, 0xf7, + 0x02, 0x00, 0x47, 0x76, 0x53, 0xe8, 0x02, 0x40, 0x4d, 0xd2, 0x3d, 0xf2, + 0x02, 0x00, 0x42, 0x1d, 0x01, 0xf3, 0x02, 0x40, 0x46, 0xcd, 0x00, 0xff, + 0x02, 0x80, 0x06, 0x4e, 0x6f, 0x53, 0x15, 0xa7, 0x40, 0x44, 0xe6, 0x01, + 0xf1, 0x02, 0x40, 0x05, 0xb2, 0x1f, 0x06, 0x4c, 0xce, 0x41, 0xef, 0x02, + 0x40, 0x52, 0x6b, 0x53, 0x10, 0xa7, 0x00, 0x48, 0x75, 0x53, 0x0b, 0xa7, + 0x40, 0x49, 0xe1, 0x01, 0xc2, 0x02, 0x00, 0x49, 0xfe, 0x13, 0xbf, 0x02, + 0x00, 0x44, 0xf5, 0x38, 0x6a, 0xab, 0x40, 0x54, 0x85, 0x3b, 0xd1, 0x02, + 0x00, 0x04, 0x49, 0x0b, 0x01, 0xff, 0x07, 0xb0, 0x1f, 0x0c, 0x52, 0x6b, + 0x53, 0x13, 0xa7, 0x00, 0x48, 0x75, 0x53, 0xe6, 0x02, 0x40, 0x52, 0x6b, + 0x53, 0x0e, 0xa7, 0x00, 0x48, 0x75, 0x53, 0x09, 0xa7, 0x40, 0x4b, 0xcb, + 0x9b, 0xfc, 0x10, 0x00, 0x4b, 0xcf, 0x28, 0xc0, 0x02, 0x80, 0x06, 0x4b, + 0x16, 0x23, 0xcb, 0x02, 0x40, 0x4c, 0xda, 0x28, 0xb3, 0x07, 0x41, 0x03, + 0x1b, 0x00, 0x46, 0x05, 0x77, 0xec, 0x01, 0xff, 0x05, 0x48, 0x0b, 0x21, + 0x04, 0x08, 0x05, 0x01, 0xff, 0x07, 0xb0, 0x1f, 0x0c, 0x52, 0x6b, 0x53, + 0x16, 0xa7, 0x00, 0x48, 0x75, 0x53, 0xe9, 0x02, 0x40, 0x52, 0x6b, 0x53, + 0x11, 0xa7, 0x00, 0x48, 0x75, 0x53, 0x0c, 0xa7, 0x40, 0x07, 0xb0, 0x1f, + 0x0c, 0x52, 0x6b, 0x53, 0x12, 0xa7, 0x00, 0x48, 0x75, 0x53, 0xe5, 0x02, + 0x40, 0x52, 0x6b, 0x53, 0x0d, 0xa7, 0x00, 0x48, 0x75, 0x53, 0x08, 0xa7, + 0x40, 0x49, 0xe4, 0x42, 0xfa, 0x02, 0x00, 0x48, 0x1d, 0xb5, 0xfc, 0x02, + 0x40, 0x4b, 0xdc, 0x8d, 0xb6, 0x07, 0x01, 0xaf, 0x01, 0xff, 0x02, 0xc6, + 0x00, 0x21, 0x05, 0x3d, 0x01, 0x11, 0x03, 0xa0, 0x14, 0x01, 0xff, 0x49, + 0xe1, 0x01, 0xc5, 0x02, 0x00, 0x44, 0xf5, 0x38, 0xd5, 0x02, 0x40, 0x4a, + 0x61, 0x36, 0xee, 0x02, 0x00, 0x45, 0xea, 0x1a, 0xba, 0x02, 0x40, 0x4e, + 0x0b, 0x00, 0x19, 0xa7, 0x00, 0x45, 0x48, 0x0e, 0x18, 0xa7, 0x00, 0x4c, + 0x32, 0x00, 0x17, 0xa7, 0x40, 0x07, 0xe5, 0x05, 0xcc, 0x02, 0x07, 0xbc, + 0x68, 0xbb, 0x02, 0x0d, 0xbc, 0x83, 0xfd, 0x01, 0x50, 0xd0, 0x04, 0xc6, + 0x02, 0x00, 0x44, 0x51, 0x12, 0x89, 0xa7, 0x00, 0x4b, 0x5e, 0xa2, 0xdf, + 0x02, 0x00, 0x08, 0xf8, 0xcc, 0x01, 0xff, 0x42, 0x92, 0x01, 0x78, 0x1d, + 0x00, 0x49, 0x81, 0xb9, 0x9c, 0xa6, 0x00, 0xb3, 0x01, 0xff, 0x05, 0x5e, + 0x07, 0x06, 0x48, 0x87, 0x8e, 0x9d, 0xa6, 0x40, 0xe1, 0x30, 0xe0, 0x01, + 0xa2, 0xb6, 0x01, 0x43, 0x6d, 0x14, 0x45, 0xe0, 0x01, 0xa4, 0xa3, 0x01, + 0xe5, 0x48, 0xe0, 0x81, 0x82, 0x01, 0x43, 0x26, 0x52, 0x33, 0xe0, 0x01, + 0x42, 0x22, 0x00, 0x43, 0xe0, 0x01, 0xe9, 0x38, 0xe0, 0x81, 0x6d, 0x42, + 0x80, 0x20, 0x4d, 0xe0, 0x01, 0x42, 0x1b, 0x02, 0x39, 0xe0, 0x01, 0xef, + 0x3c, 0xe0, 0x01, 0xb0, 0x51, 0xb3, 0x36, 0xb4, 0x2a, 0xf5, 0x41, 0xe0, + 0x01, 0x42, 0x32, 0x00, 0x32, 0xe0, 0x01, 0xb9, 0x0d, 0xba, 0x01, 0xff, + 0xe5, 0x37, 0xe0, 0x01, 0x42, 0xb0, 0x01, 0x36, 0xe0, 0x41, 0x43, 0x9c, + 0x2b, 0x47, 0xe0, 0x81, 0x04, 0xf5, 0x49, 0xe0, 0x41, 0x4e, 0x7d, 0x75, + 0x6c, 0xe0, 0x41, 0xe5, 0x40, 0xe0, 0x01, 0x42, 0x46, 0x03, 0x44, 0xe0, + 0x41, 0x44, 0xb5, 0x7b, 0x4b, 0xe0, 0x01, 0x42, 0x22, 0x00, 0x46, 0xe0, + 0x01, 0x49, 0xf0, 0xbf, 0x4f, 0xe0, 0xc1, 0x00, 0x4c, 0xda, 0x28, 0x6d, + 0xe0, 0x41, 0x47, 0xc9, 0xc9, 0x50, 0xe0, 0x01, 0xe5, 0x3d, 0xe0, 0x41, + 0xe5, 0x35, 0xe0, 0x41, 0xe6, 0x42, 0xe0, 0x01, 0xec, 0x3a, 0xe0, 0x01, + 0xed, 0x3b, 0xe0, 0x01, 0xf2, 0x3e, 0xe0, 0x01, 0xf3, 0x3f, 0xe0, 0xc1, + 0x00, 0x4f, 0xe7, 0x69, 0x6b, 0xe0, 0x41, 0xe5, 0x34, 0xe0, 0x01, 0x43, + 0xe5, 0xf4, 0x4a, 0xe0, 0x41, 0x47, 0x09, 0xcf, 0x4e, 0xe0, 0x01, 0xe5, + 0x31, 0xe0, 0x01, 0x57, 0x84, 0x08, 0x4c, 0xe0, 0x41, 0x04, 0x27, 0x16, + 0x1d, 0x03, 0xe1, 0x05, 0x01, 0xff, 0x44, 0x2b, 0x30, 0x00, 0xa7, 0x00, + 0x42, 0x7c, 0x00, 0x04, 0xa7, 0x00, 0x42, 0x3d, 0x00, 0x06, 0xa7, 0x00, + 0x45, 0xd3, 0xea, 0x02, 0xa7, 0x40, 0x44, 0x2b, 0x30, 0x01, 0xa7, 0x00, + 0x42, 0x7c, 0x00, 0x05, 0xa7, 0x00, 0x42, 0x3d, 0x00, 0x07, 0xa7, 0x00, + 0x45, 0xd3, 0xea, 0x03, 0xa7, 0x40, 0x4e, 0xf9, 0x13, 0xd3, 0x02, 0x00, + 0x4f, 0x84, 0x72, 0xd2, 0x02, 0x40, 0xe1, 0x2c, 0x1d, 0x80, 0x79, 0xe2, + 0x2e, 0x1d, 0x80, 0x6e, 0xe3, 0xf2, 0xa7, 0x00, 0xe4, 0x30, 0x1d, 0x00, + 0xe5, 0x31, 0x1d, 0x00, 0xe6, 0xf3, 0xa7, 0x00, 0xe7, 0x33, 0x1d, 0x00, + 0xe8, 0x34, 0x1d, 0x80, 0x4f, 0xe9, 0x35, 0x1d, 0x00, 0xea, 0x36, 0x1d, + 0x00, 0xeb, 0x37, 0x1d, 0x00, 0xec, 0x38, 0x1d, 0x00, 0xed, 0x39, 0x1d, + 0x00, 0xee, 0x3a, 0x1d, 0x00, 0xef, 0x3c, 0x1d, 0x80, 0x2e, 0xf0, 0x3e, + 0x1d, 0x00, 0xf1, 0xf4, 0xa7, 0x00, 0xf2, 0x3f, 0x1d, 0x80, 0x14, 0xf3, + 0xf1, 0xa7, 0x00, 0xf4, 0x40, 0x1d, 0x00, 0xf5, 0x41, 0x1d, 0x00, 0xf6, + 0x7d, 0x2c, 0x00, 0xf7, 0x42, 0x1d, 0x40, 0x08, 0xde, 0x14, 0x01, 0xff, + 0xe5, 0x32, 0x1d, 0x00, 0xee, 0x3b, 0x1d, 0x40, 0xf5, 0x3d, 0x1d, 0x40, + 0x4c, 0xda, 0x28, 0xf8, 0xa7, 0x40, 0x47, 0x02, 0xcf, 0x2f, 0x1d, 0x40, + 0xe5, 0x2d, 0x1d, 0x40, 0x05, 0x9e, 0x3f, 0x06, 0x4d, 0x17, 0x84, 0xb5, + 0x07, 0x41, 0x49, 0xe4, 0x42, 0xf9, 0x02, 0x00, 0x48, 0x1d, 0xb5, 0xfb, + 0x02, 0x40, 0x4b, 0xfc, 0x8b, 0xca, 0x02, 0x00, 0x4d, 0x69, 0x85, 0xb8, + 0x07, 0x01, 0x49, 0x62, 0x36, 0xbc, 0x02, 0x40, 0x51, 0xdc, 0x57, 0x43, + 0x16, 0x01, 0xa4, 0x89, 0x03, 0x07, 0xec, 0x05, 0x6d, 0x05, 0x5a, 0x03, + 0x44, 0x0b, 0x40, 0x77, 0x01, 0xff, 0xa1, 0x31, 0xe5, 0x39, 0x16, 0x01, + 0xe9, 0x31, 0x16, 0x81, 0x24, 0xef, 0x3b, 0x16, 0x01, 0xf5, 0x33, 0x16, + 0x81, 0x17, 0x08, 0x22, 0xc1, 0x01, 0xff, 0xec, 0x37, 0x16, 0x81, 0x09, + 0xf2, 0x35, 0x16, 0xc1, 0x00, 0xf2, 0x36, 0x16, 0x41, 0xec, 0x38, 0x16, + 0x41, 0xf5, 0x34, 0x16, 0x41, 0xe9, 0x32, 0x16, 0x41, 0xe1, 0x30, 0x16, + 0x01, 0xe9, 0x3a, 0x16, 0x01, 0xf5, 0x3c, 0x16, 0x41, 0xa1, 0x17, 0x44, + 0x65, 0xf0, 0x44, 0x16, 0x01, 0x02, 0x02, 0x00, 0x01, 0xff, 0x44, 0xe5, + 0x23, 0x3f, 0x16, 0x01, 0x45, 0xec, 0x4b, 0x3e, 0x16, 0x41, 0x47, 0x3d, + 0x16, 0x3d, 0x16, 0x01, 0x4a, 0xfb, 0xaf, 0x40, 0x16, 0x41, 0xe1, 0x00, + 0x16, 0x81, 0x86, 0x02, 0xa2, 0xf9, 0x01, 0xa3, 0xec, 0x01, 0xa4, 0xd3, + 0x01, 0xe5, 0x0a, 0x16, 0x01, 0xa7, 0xc2, 0x01, 0x42, 0x22, 0x00, 0x2e, + 0x16, 0x01, 0xe9, 0x02, 0x16, 0x81, 0xb2, 0x01, 0xaa, 0xa5, 0x01, 0xab, + 0x98, 0x01, 0xac, 0x8b, 0x01, 0x42, 0x6c, 0x00, 0x26, 0x16, 0x01, 0xae, + 0x6d, 0xef, 0x0c, 0x16, 0x01, 0xb0, 0x5d, 0x42, 0x71, 0x00, 0x28, 0x16, + 0x01, 0xb3, 0x45, 0xb4, 0x2c, 0xf5, 0x04, 0x16, 0x81, 0x23, 0xb6, 0x06, + 0x42, 0xbc, 0x22, 0x27, 0x16, 0x41, 0xe1, 0x2a, 0x16, 0x01, 0x07, 0x23, + 0xc1, 0x01, 0xff, 0xec, 0x08, 0x16, 0x81, 0x09, 0xf2, 0x06, 0x16, 0xc1, + 0x00, 0xf2, 0x07, 0x16, 0x41, 0xec, 0x09, 0x16, 0x41, 0xf5, 0x05, 0x16, + 0x41, 0xe1, 0x1d, 0x16, 0x01, 0x42, 0x22, 0x00, 0x1e, 0x16, 0x01, 0xb4, + 0x01, 0xff, 0xe1, 0x18, 0x16, 0x01, 0x42, 0x22, 0x00, 0x19, 0x16, 0x41, + 0xe1, 0x2d, 0x16, 0x01, 0x42, 0x22, 0x00, 0x2b, 0x16, 0x01, 0x42, 0x40, + 0x06, 0x2c, 0x16, 0x41, 0xe1, 0x22, 0x16, 0x01, 0x42, 0x22, 0x00, 0x23, + 0x16, 0x41, 0xe1, 0x21, 0x16, 0x01, 0x42, 0x24, 0x02, 0x12, 0x16, 0x01, + 0x42, 0x2a, 0x05, 0x1c, 0x16, 0x01, 0x42, 0xbc, 0x22, 0x17, 0x16, 0x41, + 0xe1, 0x29, 0x16, 0x01, 0x42, 0x74, 0x00, 0x2f, 0x16, 0x41, 0xe1, 0x0e, + 0x16, 0x01, 0x42, 0x22, 0x00, 0x0f, 0x16, 0x41, 0xe1, 0x15, 0x16, 0x01, + 0x42, 0x22, 0x00, 0x16, 0x16, 0x41, 0xe9, 0x03, 0x16, 0x41, 0xe1, 0x10, + 0x16, 0x01, 0x42, 0x22, 0x00, 0x11, 0x16, 0x41, 0xe1, 0x1f, 0x16, 0x01, + 0xa4, 0x06, 0x42, 0x22, 0x00, 0x20, 0x16, 0x41, 0xe1, 0x1a, 0x16, 0x01, + 0x42, 0x22, 0x00, 0x1b, 0x16, 0x41, 0xe1, 0x13, 0x16, 0x01, 0x42, 0x22, + 0x00, 0x14, 0x16, 0x41, 0xe1, 0x24, 0x16, 0x01, 0x42, 0x22, 0x00, 0x25, + 0x16, 0x41, 0xe1, 0x01, 0x16, 0x01, 0xe9, 0x0b, 0x16, 0x01, 0xf5, 0x0d, + 0x16, 0x41, 0x44, 0x73, 0x20, 0x41, 0x16, 0x01, 0x05, 0xf0, 0x06, 0x06, + 0x4b, 0x09, 0xa1, 0x42, 0x16, 0x41, 0x45, 0x12, 0x0b, 0x58, 0x16, 0x01, + 0xa6, 0x2e, 0x44, 0xcf, 0x2a, 0x59, 0x16, 0x01, 0x43, 0x0e, 0x0b, 0x51, + 0x16, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, 0x50, 0x16, 0x41, + 0x44, 0x25, 0x01, 0x53, 0x16, 0x01, 0x42, 0x15, 0x02, 0x52, 0x16, 0x41, + 0x44, 0xc9, 0x1d, 0x57, 0x16, 0x01, 0x42, 0x01, 0x26, 0x56, 0x16, 0x41, + 0x43, 0xd2, 0x05, 0x55, 0x16, 0x01, 0x43, 0xf6, 0x06, 0x54, 0x16, 0x41, + 0x42, 0x1b, 0x08, 0xa7, 0x22, 0x00, 0x4d, 0x00, 0x88, 0x3b, 0xf9, 0x41, + 0x80, 0x01, 0xff, 0x43, 0x15, 0x80, 0xf4, 0xf4, 0x01, 0x5d, 0xe1, 0x16, + 0xf2, 0xf4, 0x41, 0x03, 0xf6, 0x7a, 0xe2, 0x01, 0x02, 0x75, 0x06, 0xb4, + 0x01, 0xa4, 0x84, 0x01, 0xac, 0x66, 0xae, 0x0d, 0x44, 0xdc, 0x52, 0x9e, + 0xfa, 0xc1, 0x00, 0x45, 0xcc, 0x1c, 0xa9, 0xfa, 0x41, 0xa9, 0x43, 0x02, + 0xef, 0x02, 0x04, 0xf9, 0xff, 0x29, 0x40, 0x80, 0x06, 0x4d, 0x21, 0x80, + 0x13, 0x22, 0x40, 0x44, 0x5a, 0x03, 0x12, 0x22, 0x80, 0x06, 0x45, 0x35, + 0x23, 0x42, 0x22, 0x40, 0x80, 0x01, 0xff, 0x4b, 0xcb, 0x1e, 0x3a, 0x2a, + 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x4b, 0xdb, 0x5e, 0x29, 0x2a, 0x00, + 0x49, 0x9f, 0x12, 0x2a, 0x2a, 0x00, 0x4c, 0xcb, 0x8e, 0x2b, 0x2a, 0x00, + 0x4b, 0x27, 0xa2, 0x2c, 0x2a, 0x40, 0x43, 0x96, 0x27, 0x90, 0xf6, 0x01, + 0x44, 0x3c, 0x64, 0xbd, 0xf4, 0x01, 0x44, 0x68, 0xe1, 0xd5, 0xf5, 0x41, + 0x06, 0x52, 0x5c, 0x0c, 0x46, 0x82, 0xdd, 0x0c, 0xf3, 0x01, 0x46, 0x37, + 0x4c, 0xa5, 0x20, 0x40, 0x46, 0xf2, 0xc2, 0x96, 0xfa, 0x01, 0x45, 0x44, + 0x71, 0x96, 0xf3, 0x41, 0x04, 0x80, 0x02, 0x06, 0x58, 0xbe, 0x29, 0xef, + 0x22, 0x40, 0x43, 0x23, 0x0a, 0xb7, 0x00, 0x00, 0x56, 0x37, 0x35, 0xe6, + 0xfb, 0x01, 0x57, 0xdc, 0x30, 0xe7, 0xfb, 0x01, 0x06, 0x38, 0x89, 0x01, + 0xff, 0x48, 0x08, 0xc7, 0x0c, 0xcc, 0x01, 0x5a, 0x88, 0x22, 0xc2, 0xfb, + 0x41, 0x80, 0x1b, 0xaf, 0x01, 0xff, 0x45, 0x59, 0x03, 0xb5, 0x00, 0x00, + 0x42, 0xb7, 0x05, 0xa0, 0xf9, 0x01, 0x45, 0x1a, 0x3d, 0xa4, 0xf3, 0x01, + 0x45, 0x8b, 0xcb, 0x2c, 0xf5, 0x41, 0x4b, 0xc3, 0x9a, 0x49, 0x24, 0x00, + 0x4c, 0x27, 0x93, 0x48, 0x24, 0x40, 0x07, 0xec, 0x05, 0xbc, 0x02, 0x05, + 0x5a, 0x03, 0x9a, 0x02, 0x05, 0x3b, 0x2d, 0xfd, 0x01, 0x0b, 0x40, 0x77, + 0x01, 0xff, 0xe1, 0x54, 0x6f, 0x81, 0xce, 0x01, 0xe5, 0x5d, 0x6f, 0x81, + 0xae, 0x01, 0xe9, 0x61, 0x6f, 0x81, 0x7a, 0xee, 0x7d, 0x6f, 0x81, 0x71, + 0xef, 0x59, 0x6f, 0x81, 0x56, 0x4a, 0x9b, 0xb0, 0x78, 0x6f, 0x81, 0x4b, + 0xf5, 0x6a, 0x6f, 0x81, 0x1e, 0x42, 0x1e, 0xf5, 0x83, 0x6f, 0x01, 0xf7, + 0x5c, 0x6f, 0x81, 0x0f, 0xf9, 0x71, 0x6f, 0xc1, 0x00, 0xe9, 0x72, 0x6f, + 0x01, 0x42, 0x3e, 0x00, 0x80, 0x6f, 0x41, 0xef, 0x5b, 0x6f, 0x41, 0xe1, + 0x6b, 0x6f, 0x81, 0x1a, 0x42, 0x12, 0x0b, 0x6f, 0x6f, 0x01, 0xe9, 0x87, + 0x6f, 0x01, 0x42, 0x1d, 0x01, 0x70, 0x6f, 0x01, 0x42, 0xc1, 0x18, 0x7f, + 0x6f, 0x01, 0xf5, 0x6e, 0x6f, 0x41, 0xee, 0x6c, 0x6f, 0xc1, 0x00, 0xe7, + 0x6d, 0x6f, 0x41, 0xf2, 0x76, 0x6f, 0x41, 0xa5, 0x0c, 0xe7, 0x81, 0x6f, + 0x01, 0xef, 0x5a, 0x6f, 0x01, 0xf5, 0x7c, 0x6f, 0x41, 0xf2, 0x82, 0x6f, + 0x01, 0xf9, 0x60, 0x6f, 0x41, 0xe7, 0x7e, 0x6f, 0x41, 0xe1, 0x62, 0x6f, + 0x81, 0x21, 0xe5, 0x66, 0x6f, 0x01, 0xe7, 0x84, 0x6f, 0x01, 0xe9, 0x67, + 0x6f, 0x01, 0x42, 0x1d, 0x01, 0x69, 0x6f, 0x01, 0xef, 0x65, 0x6f, 0x81, + 0x04, 0xf5, 0x68, 0x6f, 0x41, 0x42, 0x1d, 0x01, 0x86, 0x6f, 0x41, 0xee, + 0x63, 0x6f, 0xc1, 0x00, 0xe7, 0x64, 0x6f, 0x41, 0xe1, 0x85, 0x6f, 0x01, + 0xe9, 0x7a, 0x6f, 0x01, 0xee, 0x5e, 0x6f, 0x81, 0x09, 0xf2, 0x77, 0x6f, + 0xc1, 0x00, 0xf2, 0x75, 0x6f, 0x41, 0xe7, 0x5f, 0x6f, 0x41, 0xe1, 0x55, + 0x6f, 0x01, 0xe5, 0x73, 0x6f, 0x81, 0x17, 0x42, 0xdc, 0x49, 0x56, 0x6f, + 0x01, 0xe9, 0x79, 0x6f, 0x01, 0xee, 0x57, 0x6f, 0x81, 0x04, 0xf5, 0x7b, + 0x6f, 0x41, 0xe7, 0x58, 0x6f, 0x41, 0xe5, 0x74, 0x6f, 0x41, 0x45, 0x5c, + 0x00, 0x91, 0x6f, 0x01, 0x45, 0x20, 0x07, 0x92, 0x6f, 0x01, 0x45, 0xc8, + 0x00, 0x8f, 0x6f, 0x01, 0x49, 0xdd, 0x73, 0x90, 0x6f, 0x41, 0x4a, 0xe5, + 0xa7, 0x51, 0x6f, 0x01, 0x56, 0x27, 0x33, 0x4f, 0x6f, 0x01, 0x09, 0xa3, + 0xbe, 0x01, 0xff, 0x4a, 0xe5, 0xa7, 0x53, 0x6f, 0x01, 0x47, 0x59, 0xd7, + 0x52, 0x6f, 0x41, 0xa1, 0x82, 0x04, 0xa2, 0xf5, 0x03, 0xa4, 0xc1, 0x03, + 0x42, 0x0c, 0x08, 0x07, 0x6f, 0x01, 0xa7, 0xa7, 0x03, 0xa8, 0x9a, 0x03, + 0x42, 0x1b, 0x02, 0x1e, 0x6f, 0x01, 0xac, 0xfb, 0x02, 0xad, 0xee, 0x02, + 0xae, 0xb5, 0x02, 0xb0, 0xa8, 0x02, 0xb1, 0x9b, 0x02, 0xb2, 0xec, 0x01, + 0xb3, 0xd3, 0x01, 0xb4, 0x7f, 0xb6, 0x73, 0x42, 0xa9, 0x01, 0x42, 0x6f, + 0x01, 0x42, 0xed, 0x26, 0x27, 0x6f, 0x01, 0x03, 0x24, 0x7a, 0x32, 0xba, + 0x01, 0xff, 0xe1, 0x3b, 0x6f, 0x01, 0x42, 0x22, 0x00, 0x35, 0x6f, 0x01, + 0xb3, 0x19, 0xba, 0x01, 0xff, 0xe1, 0x3d, 0x6f, 0x01, 0xb3, 0x06, 0x42, + 0xbc, 0x22, 0x40, 0x6f, 0x41, 0xe1, 0x3e, 0x6f, 0x01, 0x42, 0xbc, 0x22, + 0x41, 0x6f, 0x41, 0xe1, 0x3c, 0x6f, 0x01, 0x42, 0x22, 0x00, 0x36, 0x6f, + 0x41, 0x44, 0x91, 0xef, 0x31, 0x6f, 0x01, 0x42, 0x1b, 0x02, 0x20, 0x6f, + 0x01, 0x43, 0x01, 0x46, 0x12, 0x6f, 0x01, 0x42, 0xbb, 0x09, 0x02, 0x6f, + 0x01, 0xb4, 0x01, 0xff, 0xe1, 0x0d, 0x6f, 0x01, 0xb3, 0x06, 0x42, 0x12, + 0x00, 0x0c, 0x6f, 0x41, 0xe1, 0x39, 0x6f, 0x01, 0x42, 0x22, 0x00, 0x30, + 0x6f, 0x41, 0xe1, 0x08, 0x6f, 0x01, 0x42, 0x0c, 0x08, 0x09, 0x6f, 0x41, + 0xe1, 0x0a, 0x6f, 0x01, 0xe5, 0x48, 0x6f, 0x01, 0x02, 0x2a, 0x09, 0x3c, + 0x04, 0x00, 0x20, 0x1c, 0xb3, 0x06, 0x42, 0x12, 0x00, 0x0e, 0x6f, 0x41, + 0xe1, 0x37, 0x6f, 0x01, 0xe5, 0x49, 0x6f, 0x01, 0x42, 0x22, 0x00, 0x2e, + 0x6f, 0x01, 0x42, 0x40, 0x06, 0x2a, 0x6f, 0x41, 0xd2, 0x93, 0x6f, 0x01, + 0xd3, 0x94, 0x6f, 0x01, 0xd4, 0x95, 0x6f, 0x01, 0xd5, 0x96, 0x6f, 0x01, + 0xd6, 0x97, 0x6f, 0x01, 0xd7, 0x98, 0x6f, 0x01, 0xd8, 0x99, 0x6f, 0x41, + 0xe1, 0x1a, 0x6f, 0x01, 0x42, 0xbc, 0x22, 0x1c, 0x6f, 0x41, 0xe1, 0x3a, + 0x6f, 0x01, 0x42, 0x22, 0x00, 0x33, 0x6f, 0x01, 0x42, 0x40, 0x06, 0x34, + 0x6f, 0x01, 0x42, 0x7e, 0x1a, 0x46, 0x6f, 0x41, 0x09, 0x34, 0xb8, 0x06, + 0x42, 0x77, 0x00, 0x4a, 0x6f, 0x41, 0x04, 0x00, 0x20, 0x06, 0x43, 0xa4, + 0x02, 0x32, 0x6f, 0x41, 0xd1, 0x9a, 0x6f, 0x01, 0xd2, 0x9b, 0x6f, 0x01, + 0xd4, 0x9c, 0x6f, 0x01, 0xd5, 0x9d, 0x6f, 0x01, 0xd6, 0x9e, 0x6f, 0x01, + 0xd8, 0x9f, 0x6f, 0x41, 0xe1, 0x21, 0x6f, 0x01, 0x42, 0x24, 0x02, 0x22, + 0x6f, 0x41, 0xe1, 0x00, 0x6f, 0x01, 0x42, 0x74, 0x00, 0x03, 0x6f, 0x41, + 0xe1, 0x10, 0x6f, 0x81, 0x2b, 0xa7, 0x1f, 0x42, 0x22, 0x00, 0x11, 0x6f, + 0x01, 0xae, 0x0d, 0xb9, 0x01, 0xff, 0xe1, 0x2c, 0x6f, 0x01, 0x42, 0x22, + 0x00, 0x2d, 0x6f, 0x41, 0xe1, 0x14, 0x6f, 0x01, 0x42, 0x22, 0x00, 0x15, + 0x6f, 0x41, 0xe1, 0x23, 0x6f, 0x01, 0x42, 0x22, 0x00, 0x24, 0x6f, 0x41, + 0x4a, 0x62, 0x5c, 0x50, 0x6f, 0x41, 0xe1, 0x04, 0x6f, 0x01, 0x42, 0x22, + 0x00, 0x05, 0x6f, 0x41, 0xe1, 0x16, 0x6f, 0x01, 0xa8, 0x06, 0x42, 0xbc, + 0x22, 0x17, 0x6f, 0x41, 0xe1, 0x18, 0x6f, 0x01, 0x42, 0xbc, 0x22, 0x19, + 0x6f, 0x41, 0xe1, 0x26, 0x6f, 0x01, 0x42, 0x22, 0x00, 0x44, 0x6f, 0x41, + 0xe1, 0x1f, 0x6f, 0x01, 0xa8, 0x01, 0xff, 0xe1, 0x28, 0x6f, 0x01, 0x42, + 0x22, 0x00, 0x29, 0x6f, 0x41, 0xe1, 0x0b, 0x6f, 0x01, 0x42, 0xf0, 0x10, + 0x0f, 0x6f, 0x01, 0x02, 0x2a, 0x09, 0x19, 0xba, 0x01, 0xff, 0xe1, 0x38, + 0x6f, 0x01, 0x42, 0x22, 0x00, 0x2f, 0x6f, 0x01, 0x42, 0x7e, 0x1a, 0x47, + 0x6f, 0x01, 0x42, 0x59, 0x00, 0x2b, 0x6f, 0x41, 0xe1, 0x1b, 0x6f, 0x01, + 0x42, 0xbc, 0x22, 0x1d, 0x6f, 0x41, 0xe1, 0x01, 0x6f, 0x01, 0x42, 0x0d, + 0x00, 0x45, 0x6f, 0x41, 0xe8, 0x43, 0x6f, 0x01, 0x07, 0xa4, 0x80, 0x01, + 0xff, 0x42, 0x6c, 0x00, 0x06, 0x6f, 0x01, 0xae, 0x06, 0x43, 0x05, 0x9a, + 0x3f, 0x6f, 0x41, 0xe1, 0x13, 0x6f, 0x01, 0x42, 0x24, 0x02, 0x25, 0x6f, + 0x41, 0xa1, 0xcf, 0x1c, 0x09, 0x26, 0xb7, 0xbe, 0x1c, 0xa4, 0xd1, 0x16, + 0x0b, 0xf7, 0x9b, 0xba, 0x12, 0xac, 0xa5, 0x12, 0x42, 0xc3, 0x07, 0xdd, + 0xf4, 0x01, 0xae, 0xa8, 0x07, 0xb2, 0x5c, 0x4d, 0xea, 0x88, 0x95, 0x00, + 0x00, 0xb4, 0x01, 0xff, 0x42, 0x5f, 0x03, 0xc3, 0xce, 0x01, 0xb2, 0x01, + 0xff, 0x05, 0x36, 0x00, 0x04, 0xef, 0x87, 0xf6, 0x41, 0x45, 0x53, 0x23, + 0xd1, 0x23, 0x00, 0x0a, 0x49, 0xad, 0x2c, 0x49, 0x01, 0xbe, 0xd9, 0x23, + 0x00, 0x4f, 0x0b, 0x73, 0xd3, 0x23, 0x00, 0xb4, 0x01, 0xff, 0x48, 0xf0, + 0xc5, 0xd8, 0x23, 0x00, 0x46, 0x98, 0xdf, 0xd7, 0x23, 0x00, 0x0a, 0xb1, + 0xb3, 0x01, 0xff, 0x46, 0x9d, 0x0a, 0xd6, 0x23, 0x00, 0x49, 0xe4, 0x1c, + 0xd5, 0x23, 0x40, 0x45, 0x33, 0x07, 0xd2, 0x23, 0x00, 0x4a, 0x49, 0xb2, + 0xd4, 0x23, 0x40, 0x44, 0xf8, 0x62, 0x3f, 0x26, 0x00, 0x06, 0xc0, 0xde, + 0x06, 0x46, 0x1e, 0x1d, 0xdc, 0xf9, 0x41, 0x08, 0xe0, 0xc4, 0xc2, 0x01, + 0x0d, 0xaf, 0x83, 0x01, 0xff, 0x07, 0xec, 0x05, 0x0d, 0x4b, 0x03, 0xa3, + 0x9e, 0x09, 0xc1, 0x00, 0x42, 0x87, 0xf3, 0x9f, 0x09, 0x41, 0xe1, 0x80, + 0x09, 0x01, 0x42, 0x16, 0x00, 0x86, 0x09, 0x81, 0x9a, 0x01, 0x42, 0xf0, + 0x10, 0x9d, 0x09, 0x01, 0xe5, 0x81, 0x09, 0x01, 0x43, 0x14, 0x52, 0x92, + 0x09, 0x01, 0xe9, 0x82, 0x09, 0x01, 0xab, 0x7a, 0x42, 0x74, 0x00, 0x90, + 0x09, 0x01, 0x42, 0x6c, 0x00, 0x89, 0x09, 0x01, 0xae, 0x56, 0xef, 0x83, + 0x09, 0x01, 0x42, 0xbb, 0x09, 0x88, 0x09, 0x01, 0x42, 0x43, 0x14, 0x97, + 0x09, 0x01, 0x42, 0x71, 0x00, 0x8e, 0x09, 0x81, 0x39, 0xb3, 0x28, 0xb4, + 0x0c, 0x42, 0xa9, 0x01, 0x85, 0x09, 0x01, 0x42, 0xbc, 0x22, 0x84, 0x09, + 0x41, 0xe1, 0x98, 0x09, 0x81, 0x0f, 0xe5, 0x9a, 0x09, 0x81, 0x04, 0xef, + 0x9c, 0x09, 0x41, 0x42, 0x87, 0xf3, 0x9b, 0x09, 0x41, 0x42, 0x87, 0xf3, + 0x99, 0x09, 0x41, 0xe1, 0x93, 0x09, 0x81, 0x04, 0xe5, 0x95, 0x09, 0x41, + 0x42, 0x87, 0xf3, 0x94, 0x09, 0x41, 0x42, 0x87, 0xf3, 0x8f, 0x09, 0x41, + 0xe1, 0x8a, 0x09, 0x81, 0x0b, 0xe5, 0x8c, 0x09, 0xc1, 0x00, 0x42, 0x87, + 0xf3, 0x8d, 0x09, 0x41, 0x42, 0x87, 0xf3, 0x8b, 0x09, 0x41, 0xe1, 0x96, + 0x09, 0x01, 0x42, 0x22, 0x00, 0x91, 0x09, 0x41, 0x42, 0x87, 0xf3, 0x87, + 0x09, 0x41, 0x09, 0x1e, 0x5a, 0x99, 0x04, 0xac, 0x80, 0x03, 0x07, 0xff, + 0x39, 0x01, 0xff, 0x45, 0x12, 0x0b, 0xc7, 0x09, 0x81, 0xd8, 0x02, 0xa6, + 0xfc, 0x01, 0x44, 0xcf, 0x2a, 0xc8, 0x09, 0x81, 0xd9, 0x01, 0x43, 0x0e, + 0x0b, 0xc0, 0x09, 0x81, 0xbb, 0x01, 0xb3, 0x67, 0xb4, 0x01, 0xff, 0x42, + 0x92, 0x01, 0xc9, 0x09, 0x81, 0x57, 0xa8, 0x2b, 0xb7, 0x01, 0xff, 0x44, + 0xcb, 0x1d, 0xca, 0x09, 0x81, 0x1b, 0xef, 0xc1, 0x09, 0xc1, 0x00, 0x80, + 0x01, 0xff, 0x47, 0x71, 0x11, 0xd3, 0x09, 0x81, 0x06, 0x48, 0x40, 0x5e, + 0xdc, 0x09, 0x41, 0x49, 0x3f, 0x5e, 0xee, 0x09, 0x41, 0x49, 0x3f, 0x5e, + 0xe5, 0x09, 0x41, 0x44, 0x7b, 0x11, 0xcb, 0x09, 0x81, 0x1d, 0x43, 0x26, + 0x01, 0xc2, 0x09, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x47, 0x71, 0x11, 0xd4, + 0x09, 0x81, 0x06, 0x48, 0x40, 0x5e, 0xdd, 0x09, 0x41, 0x49, 0x3f, 0x5e, + 0xef, 0x09, 0x41, 0x49, 0x3f, 0x5e, 0xe6, 0x09, 0x41, 0x49, 0x3f, 0x5e, + 0xe4, 0x09, 0x41, 0x44, 0xc9, 0x1d, 0xc6, 0x09, 0x81, 0x29, 0x42, 0x01, + 0x26, 0xc5, 0x09, 0xc1, 0x00, 0x80, 0x0d, 0x42, 0x7d, 0x11, 0xce, 0x09, + 0xc1, 0x00, 0x49, 0x3f, 0x5e, 0xe9, 0x09, 0x41, 0x47, 0x71, 0x11, 0xd7, + 0x09, 0x81, 0x06, 0x48, 0x40, 0x5e, 0xe0, 0x09, 0x41, 0x49, 0x3f, 0x5e, + 0xf2, 0x09, 0x41, 0x80, 0x0d, 0x42, 0x7d, 0x11, 0xcf, 0x09, 0xc1, 0x00, + 0x49, 0x3f, 0x5e, 0xea, 0x09, 0x41, 0x47, 0x71, 0x11, 0xd8, 0x09, 0x81, + 0x06, 0x48, 0x40, 0x5e, 0xe1, 0x09, 0x41, 0x49, 0x3f, 0x5e, 0xf3, 0x09, + 0x41, 0x80, 0x01, 0xff, 0x47, 0x71, 0x11, 0xd2, 0x09, 0x81, 0x06, 0x48, + 0x40, 0x5e, 0xdb, 0x09, 0x41, 0x49, 0x3f, 0x5e, 0xed, 0x09, 0x41, 0x80, + 0x06, 0x4b, 0xf5, 0xa3, 0xec, 0x09, 0x41, 0x47, 0x71, 0x11, 0xda, 0x09, + 0x81, 0x06, 0x48, 0x40, 0x5e, 0xe3, 0x09, 0x41, 0x49, 0x3f, 0x5e, 0xf5, + 0x09, 0x41, 0xa9, 0x2d, 0xaf, 0x01, 0xff, 0x43, 0x7c, 0x11, 0xcc, 0x09, + 0x81, 0x1d, 0x42, 0x42, 0x00, 0xc3, 0x09, 0xc1, 0x00, 0x80, 0x01, 0xff, + 0x47, 0x71, 0x11, 0xd5, 0x09, 0x81, 0x06, 0x48, 0x40, 0x5e, 0xde, 0x09, + 0x41, 0x49, 0x3f, 0x5e, 0xf0, 0x09, 0x41, 0x49, 0x3f, 0x5e, 0xe7, 0x09, + 0x41, 0x43, 0x52, 0x4d, 0xcd, 0x09, 0x81, 0x1d, 0x42, 0x32, 0x00, 0xc4, + 0x09, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x47, 0x71, 0x11, 0xd6, 0x09, 0x81, + 0x06, 0x48, 0x40, 0x5e, 0xdf, 0x09, 0x41, 0x49, 0x3f, 0x5e, 0xf1, 0x09, + 0x41, 0x49, 0x3f, 0x5e, 0xe8, 0x09, 0x41, 0x80, 0x06, 0x4a, 0xf6, 0xa3, + 0xeb, 0x09, 0x41, 0x47, 0x71, 0x11, 0xd9, 0x09, 0x81, 0x06, 0x48, 0x40, + 0x5e, 0xe2, 0x09, 0x41, 0x49, 0x3f, 0x5e, 0xf4, 0x09, 0x41, 0x06, 0xed, + 0x05, 0x11, 0x08, 0xa4, 0x3f, 0x01, 0xff, 0x43, 0x58, 0xf4, 0xbf, 0x09, + 0x01, 0x43, 0x29, 0x5e, 0xbe, 0x09, 0x41, 0xe1, 0xa0, 0x09, 0x81, 0x76, + 0x42, 0x16, 0x00, 0xa6, 0x09, 0x01, 0x42, 0xf0, 0x10, 0xb7, 0x09, 0x01, + 0xe5, 0xa1, 0x09, 0x01, 0x43, 0x14, 0x52, 0xae, 0x09, 0x01, 0xe9, 0xa2, + 0x09, 0x01, 0xab, 0x50, 0x42, 0x74, 0x00, 0xac, 0x09, 0x01, 0x42, 0x6c, + 0x00, 0xa8, 0x09, 0x01, 0xae, 0x3a, 0xef, 0xa3, 0x09, 0x01, 0x42, 0xbb, + 0x09, 0xa7, 0x09, 0x01, 0x42, 0x43, 0x14, 0xb3, 0x09, 0x01, 0x42, 0x71, + 0x00, 0xab, 0x09, 0x01, 0xb3, 0x1a, 0xb4, 0x0c, 0x42, 0xa9, 0x01, 0xa5, + 0x09, 0x01, 0x42, 0xbc, 0x22, 0xa4, 0x09, 0x41, 0xe1, 0xb4, 0x09, 0x01, + 0xe5, 0xb5, 0x09, 0x01, 0xef, 0xb6, 0x09, 0x41, 0xe1, 0xaf, 0x09, 0x01, + 0xe5, 0xb1, 0x09, 0x41, 0xe1, 0xa9, 0x09, 0x01, 0xe5, 0xaa, 0x09, 0x41, + 0xe1, 0xb2, 0x09, 0x01, 0x42, 0x22, 0x00, 0xad, 0x09, 0x41, 0x49, 0x2f, + 0x94, 0xb0, 0x09, 0x41, 0xa5, 0x47, 0xa6, 0x39, 0x4d, 0x60, 0x86, 0xfe, + 0x09, 0x01, 0x04, 0x0e, 0x0b, 0x23, 0xb3, 0x15, 0xb4, 0x01, 0xff, 0x4b, + 0x7e, 0x79, 0xff, 0x09, 0x01, 0x4d, 0xc9, 0x83, 0xf8, 0x09, 0x01, 0x4b, + 0x34, 0xa5, 0xf7, 0x09, 0x41, 0x4d, 0x7c, 0x79, 0xfc, 0x09, 0x01, 0x4b, + 0xd0, 0x9d, 0xfb, 0x09, 0x41, 0x44, 0x22, 0x00, 0xbd, 0x09, 0x01, 0x47, + 0x81, 0x79, 0xf6, 0x09, 0x41, 0x4c, 0x7b, 0x90, 0xfa, 0x09, 0x01, 0x4c, + 0x93, 0x93, 0xf9, 0x09, 0x41, 0x4d, 0x0a, 0x84, 0xfd, 0x09, 0x01, 0x4e, + 0x7b, 0x79, 0xbc, 0x09, 0x41, 0x0b, 0xce, 0x9a, 0x0c, 0x57, 0xc8, 0x2f, + 0x4e, 0xf5, 0x01, 0x48, 0x77, 0x4b, 0xb9, 0xf6, 0x41, 0x11, 0x41, 0x59, + 0xad, 0x0a, 0x06, 0xef, 0x06, 0xeb, 0x09, 0x0a, 0x81, 0xb1, 0x01, 0xff, + 0x90, 0xf5, 0x04, 0x91, 0x01, 0xff, 0x90, 0xb3, 0x04, 0x91, 0xf4, 0x03, + 0x92, 0xb5, 0x03, 0x93, 0xf6, 0x02, 0x94, 0xb7, 0x02, 0x95, 0xf8, 0x01, + 0x96, 0xb9, 0x01, 0x97, 0x71, 0x98, 0x33, 0x99, 0x01, 0xff, 0x45, 0x0e, + 0xe2, 0x86, 0xe8, 0x01, 0x46, 0xa2, 0xd8, 0xb1, 0xe8, 0x01, 0x45, 0x8b, + 0xe2, 0xb6, 0xe8, 0x01, 0x45, 0xb3, 0xe2, 0x75, 0xe8, 0x01, 0x45, 0x0d, + 0xe3, 0x0f, 0xe8, 0x01, 0x44, 0xd5, 0xed, 0x2c, 0xe8, 0x01, 0x45, 0x3a, + 0xe3, 0x35, 0xe8, 0x01, 0x45, 0x53, 0xe3, 0x61, 0xe8, 0x41, 0x45, 0xff, + 0xe1, 0x42, 0xe8, 0x01, 0x44, 0x09, 0xed, 0x43, 0xe8, 0x01, 0x44, 0x69, + 0xed, 0xb9, 0xe8, 0x01, 0x4b, 0x87, 0x98, 0x82, 0xe8, 0x01, 0x46, 0xe4, + 0xd8, 0x89, 0xe8, 0x01, 0x44, 0x11, 0xee, 0xba, 0xe8, 0x01, 0x44, 0x08, + 0xd9, 0x6a, 0xe8, 0x01, 0x46, 0x2c, 0xd9, 0x9b, 0xe8, 0x01, 0x46, 0x44, + 0xd9, 0x97, 0xe8, 0x01, 0x46, 0x56, 0xd9, 0x1a, 0xe8, 0x41, 0x46, 0x84, + 0xd8, 0xc2, 0xe8, 0x01, 0x44, 0x2d, 0xed, 0xad, 0xe8, 0x01, 0x45, 0x7c, + 0xe2, 0x99, 0xe8, 0x81, 0x2f, 0x45, 0xc2, 0xe2, 0xbc, 0xe8, 0x01, 0x45, + 0xef, 0xe2, 0x9a, 0xe8, 0x81, 0x1e, 0x49, 0x76, 0xb5, 0x52, 0xe8, 0x01, + 0x44, 0x2d, 0xee, 0x68, 0xe8, 0x01, 0x47, 0x61, 0xce, 0x8b, 0xe8, 0x01, + 0x44, 0x8d, 0xee, 0x2d, 0xe8, 0x01, 0x45, 0xb2, 0xe3, 0x07, 0xe8, 0x41, + 0xef, 0x9a, 0xe8, 0x41, 0xef, 0x99, 0xe8, 0x41, 0x45, 0x1d, 0xe2, 0x50, + 0xe8, 0x01, 0x4a, 0xc3, 0xa6, 0x9c, 0xe8, 0x01, 0x45, 0x9a, 0xe2, 0x31, + 0xe8, 0x01, 0x44, 0x75, 0xed, 0x25, 0xe8, 0x01, 0x46, 0xf0, 0xd8, 0xc0, + 0xe8, 0x01, 0x44, 0x05, 0xee, 0x27, 0xe8, 0x01, 0x46, 0x02, 0xd9, 0x87, + 0xe8, 0x01, 0x46, 0x1a, 0xd9, 0x88, 0xe8, 0x01, 0x44, 0x95, 0xee, 0x85, + 0xe8, 0x01, 0x45, 0xcb, 0xe3, 0x67, 0xe8, 0x41, 0x45, 0xfa, 0xe1, 0x1e, + 0xe8, 0x01, 0x44, 0x3d, 0xed, 0xbb, 0xe8, 0x01, 0x45, 0x86, 0xe2, 0xb5, + 0xe8, 0x01, 0x44, 0x87, 0x98, 0x3c, 0xe8, 0x01, 0x46, 0xde, 0xd8, 0x19, + 0xe8, 0x01, 0x44, 0xed, 0xed, 0x83, 0xe8, 0x01, 0x47, 0x53, 0xce, 0x7c, + 0xe8, 0x01, 0x45, 0x62, 0xe3, 0x4e, 0xe8, 0x01, 0x45, 0x8f, 0xe3, 0xa5, + 0xe8, 0x01, 0x47, 0x6f, 0xce, 0x7e, 0xe8, 0x41, 0x44, 0xd9, 0xec, 0x6e, + 0xe8, 0x01, 0x45, 0x4f, 0xe2, 0x58, 0xe8, 0x01, 0x4a, 0xd7, 0xa6, 0x9e, + 0xe8, 0x01, 0x45, 0xc7, 0xe2, 0x10, 0xe8, 0x01, 0x45, 0x03, 0xe3, 0xbe, + 0xe8, 0x01, 0x45, 0x1c, 0xe3, 0x93, 0xe8, 0x01, 0x46, 0x0e, 0xd9, 0x7b, + 0xe8, 0x01, 0x43, 0xce, 0xf3, 0x28, 0xe8, 0x01, 0x45, 0x85, 0xe3, 0xa8, + 0xe8, 0x01, 0x46, 0x5c, 0xd9, 0xb7, 0xe8, 0x41, 0x45, 0x13, 0xe2, 0x72, + 0xe8, 0x01, 0x44, 0x19, 0xed, 0x2a, 0xe8, 0x01, 0x45, 0x6d, 0xe2, 0x9f, + 0xe8, 0x01, 0x45, 0xa9, 0xe2, 0x5f, 0xe8, 0x01, 0x46, 0xea, 0xd8, 0xb8, + 0xe8, 0x01, 0x44, 0xf1, 0xed, 0x2b, 0xe8, 0x01, 0x45, 0x3f, 0xe3, 0x33, + 0xe8, 0x01, 0x44, 0x65, 0xee, 0x29, 0xe8, 0x01, 0x44, 0x85, 0xee, 0x21, + 0xe8, 0x01, 0x45, 0xdf, 0xe3, 0x13, 0xe8, 0x41, 0x46, 0x78, 0xd8, 0x7d, + 0xe8, 0x01, 0x44, 0x4f, 0xe2, 0x59, 0xe8, 0x01, 0x45, 0x81, 0xe2, 0x95, + 0xe8, 0x01, 0x45, 0xb8, 0xe2, 0xae, 0xe8, 0x01, 0x45, 0xdb, 0xe2, 0xa6, + 0xe8, 0x01, 0x45, 0x21, 0xe3, 0xb0, 0xe8, 0x01, 0x45, 0x49, 0xe3, 0x0b, + 0xe8, 0x01, 0x47, 0x5a, 0xce, 0x7f, 0xe8, 0x01, 0x46, 0x3e, 0xd9, 0x70, + 0xe8, 0x01, 0x45, 0xc1, 0xe3, 0xaf, 0xe8, 0x41, 0x49, 0x37, 0xb5, 0x3d, + 0xe8, 0x01, 0x44, 0x11, 0xed, 0x84, 0xe8, 0x01, 0x46, 0xae, 0xd8, 0xa4, + 0xe8, 0x01, 0x44, 0x79, 0xed, 0x4f, 0xe8, 0x01, 0x45, 0x08, 0xe3, 0x0d, + 0xe8, 0x01, 0x47, 0x4c, 0xce, 0x7a, 0xe8, 0x01, 0x44, 0x51, 0xee, 0x32, + 0xe8, 0x01, 0x45, 0x6c, 0xe3, 0x66, 0xe8, 0x01, 0x44, 0xad, 0xee, 0x0c, + 0xe8, 0x01, 0x45, 0xc6, 0xe3, 0xb2, 0xe8, 0x41, 0x43, 0x71, 0xf3, 0x26, + 0xe8, 0x01, 0x45, 0x36, 0xe2, 0x62, 0xe8, 0x01, 0x45, 0x90, 0xe2, 0x91, + 0xe8, 0x01, 0x45, 0xa4, 0xe2, 0x20, 0xe8, 0x01, 0x45, 0xfe, 0xe2, 0x49, + 0xe8, 0x01, 0x4b, 0x92, 0x98, 0x9d, 0xe8, 0x01, 0x4c, 0xe3, 0x8b, 0x81, + 0xe8, 0x01, 0x45, 0x58, 0xe3, 0xaa, 0xe8, 0x01, 0x45, 0x8a, 0xe3, 0xa3, + 0xe8, 0x01, 0x45, 0xe4, 0xe3, 0x56, 0xe8, 0x41, 0x90, 0xb5, 0x04, 0x91, + 0xf6, 0x03, 0x92, 0xb7, 0x03, 0x93, 0xf8, 0x02, 0x94, 0xb9, 0x02, 0x95, + 0xfa, 0x01, 0x96, 0xbb, 0x01, 0x97, 0x7d, 0x98, 0x3f, 0x99, 0x01, 0xff, + 0x46, 0x72, 0xd8, 0x77, 0xe8, 0x01, 0x45, 0x40, 0xe2, 0x47, 0xe8, 0x01, + 0x45, 0x68, 0xe2, 0xa0, 0xe8, 0x01, 0x46, 0xba, 0xd8, 0xa9, 0xe8, 0x01, + 0x45, 0xf4, 0xe2, 0x18, 0xe8, 0x01, 0x44, 0x17, 0xe3, 0x04, 0xe8, 0x01, + 0x44, 0x29, 0xee, 0x6c, 0xe8, 0x01, 0x44, 0x59, 0xee, 0x1f, 0xe8, 0x01, + 0x46, 0x50, 0xd9, 0xc3, 0xe8, 0x01, 0x44, 0xb5, 0xee, 0x8d, 0xe8, 0x41, + 0x44, 0xf9, 0xec, 0x57, 0xe8, 0x01, 0x45, 0x3b, 0xe2, 0x8f, 0xe8, 0x01, + 0x46, 0xb4, 0xd8, 0x79, 0xe8, 0x01, 0x46, 0xc0, 0xd8, 0x6f, 0xe8, 0x01, + 0x45, 0xe5, 0xe2, 0x39, 0xe8, 0x01, 0x44, 0x15, 0xee, 0xbd, 0xe8, 0x01, + 0x4b, 0x9d, 0x98, 0x80, 0xe8, 0x01, 0x45, 0x5d, 0xe3, 0x73, 0xe8, 0x01, + 0x44, 0x91, 0xee, 0x60, 0xe8, 0x01, 0x45, 0xad, 0xe3, 0x41, 0xe8, 0x41, + 0x45, 0x09, 0xe2, 0xac, 0xe8, 0x01, 0x46, 0x90, 0xd8, 0xab, 0xe8, 0x01, + 0x45, 0x77, 0xe2, 0x98, 0xe8, 0x01, 0x44, 0x89, 0xed, 0x3a, 0xe8, 0x01, + 0x45, 0xe0, 0xe2, 0xa1, 0xe8, 0x01, 0x44, 0xe9, 0xed, 0x5e, 0xe8, 0x01, + 0x45, 0x30, 0xe3, 0x05, 0xe8, 0x01, 0x44, 0x7d, 0xee, 0xbf, 0xe8, 0x01, + 0x45, 0x80, 0xe3, 0x5d, 0xe8, 0x01, 0x44, 0xc5, 0xee, 0x34, 0xe8, 0x41, + 0x46, 0x7e, 0xd8, 0xc4, 0xe8, 0x01, 0x45, 0x4a, 0xe2, 0x11, 0xe8, 0x01, + 0x45, 0x72, 0xe2, 0x94, 0xe8, 0x01, 0x44, 0x7d, 0xed, 0x51, 0xe8, 0x01, + 0x45, 0xf9, 0xe2, 0xb4, 0xe8, 0x01, 0x45, 0x17, 0xe3, 0x03, 0xe8, 0x01, + 0x44, 0x45, 0xee, 0x92, 0xe8, 0x01, 0x46, 0x32, 0xd9, 0xb3, 0xe8, 0x01, + 0x44, 0xa1, 0xee, 0x8c, 0xe8, 0x01, 0x44, 0xcd, 0xee, 0x4a, 0xe8, 0x41, + 0x44, 0xe9, 0xec, 0x8e, 0xe8, 0x01, 0x44, 0x3b, 0xe2, 0x90, 0xe8, 0x01, + 0x45, 0x5e, 0xe2, 0x74, 0xe8, 0x01, 0x45, 0xae, 0xe2, 0x71, 0xe8, 0x01, + 0x45, 0xea, 0xe2, 0x3b, 0xe8, 0x01, 0x44, 0x09, 0xee, 0x48, 0xe8, 0x01, + 0x45, 0x2b, 0xe3, 0xa7, 0xe8, 0x01, 0x46, 0x38, 0xd9, 0x8a, 0xe8, 0x01, + 0x46, 0x4a, 0xd9, 0xc1, 0xe8, 0x01, 0x45, 0xb7, 0xe3, 0x17, 0xe8, 0x41, + 0x45, 0x18, 0xe2, 0x6b, 0xe8, 0x01, 0x44, 0x15, 0xed, 0x69, 0xe8, 0x01, + 0x45, 0x63, 0xe2, 0x6d, 0xe8, 0x01, 0x46, 0xc6, 0xd8, 0x78, 0xe8, 0x01, + 0x46, 0xd8, 0xd8, 0xa2, 0xe8, 0x01, 0x44, 0xfc, 0xd8, 0x0e, 0xe8, 0x01, + 0x46, 0x08, 0xd9, 0x76, 0xe8, 0x01, 0x46, 0x26, 0xd9, 0x96, 0xe8, 0x01, + 0x44, 0x9d, 0xee, 0x06, 0xe8, 0x01, 0x45, 0xda, 0xe3, 0x12, 0xe8, 0x41, + 0x44, 0xdd, 0xec, 0x4d, 0xe8, 0x01, 0x44, 0x41, 0xed, 0x53, 0xe8, 0x01, + 0x44, 0x6d, 0xed, 0x54, 0xe8, 0x01, 0x44, 0xa5, 0xed, 0x55, 0xe8, 0x01, + 0x44, 0xad, 0xed, 0x5a, 0xe8, 0x01, 0x44, 0xe5, 0xed, 0x5b, 0xe8, 0x01, + 0x44, 0x25, 0xee, 0x5c, 0xe8, 0x01, 0x45, 0x71, 0xe3, 0x63, 0xe8, 0x01, + 0x45, 0x99, 0xe3, 0x64, 0xe8, 0x01, 0x45, 0xd0, 0xe3, 0x65, 0xe8, 0x41, + 0x44, 0xf1, 0xec, 0x2f, 0xe8, 0x01, 0x44, 0x39, 0xed, 0x30, 0xe8, 0x01, + 0x44, 0xbf, 0x42, 0x44, 0xe8, 0x01, 0x44, 0xa1, 0xed, 0x45, 0xe8, 0x01, + 0x44, 0xc1, 0xed, 0x46, 0xe8, 0x01, 0x44, 0xf9, 0xed, 0x36, 0xe8, 0x01, + 0x44, 0x3d, 0xee, 0x37, 0xe8, 0x01, 0x44, 0x71, 0xee, 0x38, 0xe8, 0x01, + 0x44, 0x99, 0xee, 0x4b, 0xe8, 0x01, 0x44, 0xb1, 0xee, 0x4c, 0xe8, 0x41, + 0x44, 0xd5, 0xec, 0x1b, 0xe8, 0x01, 0x44, 0xe8, 0xc2, 0x1c, 0xe8, 0x01, + 0x44, 0x49, 0xed, 0x1d, 0xe8, 0x01, 0x43, 0xa4, 0xf3, 0x22, 0xe8, 0x01, + 0x43, 0xd6, 0xe2, 0x23, 0xe8, 0x01, 0x43, 0xb6, 0xf3, 0x24, 0xe8, 0x01, + 0x44, 0x21, 0xee, 0x3e, 0xe8, 0x01, 0x44, 0x5d, 0xee, 0x3f, 0xe8, 0x01, + 0x44, 0x89, 0xee, 0x40, 0xe8, 0x01, 0x44, 0xc1, 0xee, 0x2e, 0xe8, 0x41, + 0x44, 0x1d, 0xed, 0x00, 0xe8, 0x01, 0x44, 0x4d, 0xed, 0x01, 0xe8, 0x01, + 0x44, 0x81, 0xed, 0x02, 0xe8, 0x01, 0x44, 0xc9, 0xed, 0x08, 0xe8, 0x01, + 0x44, 0x19, 0xee, 0x09, 0xe8, 0x01, 0x44, 0x55, 0xee, 0x0a, 0xe8, 0x01, + 0x45, 0x67, 0xe3, 0x14, 0xe8, 0x01, 0x45, 0x94, 0xe3, 0x15, 0xe8, 0x01, + 0x45, 0xbc, 0xe3, 0x16, 0xe8, 0x41, 0x45, 0x12, 0x0b, 0xce, 0xe8, 0x01, + 0xa6, 0x29, 0x44, 0xcf, 0x2a, 0xcf, 0xe8, 0x01, 0x43, 0x0e, 0x0b, 0xc7, + 0xe8, 0x01, 0xb3, 0x0f, 0xb4, 0x01, 0xff, 0x44, 0x25, 0x01, 0xc9, 0xe8, + 0x01, 0x42, 0x15, 0x02, 0xc8, 0xe8, 0x41, 0x44, 0xc9, 0x1d, 0xcd, 0xe8, + 0x01, 0x42, 0x01, 0x26, 0xcc, 0xe8, 0x41, 0x43, 0xd2, 0x05, 0xcb, 0xe8, + 0x01, 0x43, 0xf6, 0x06, 0xca, 0xe8, 0x41, 0x07, 0x71, 0x11, 0x24, 0x48, + 0xf5, 0x3b, 0xd6, 0xe8, 0x01, 0xb4, 0x01, 0xff, 0xa5, 0x06, 0x48, 0x6f, + 0x52, 0xd3, 0xe8, 0x41, 0x43, 0xc4, 0x58, 0xd0, 0xe8, 0x01, 0xae, 0x01, + 0xff, 0x4a, 0x2d, 0xa6, 0xd4, 0xe8, 0x01, 0xf3, 0xd1, 0xe8, 0x41, 0x4a, + 0x2d, 0xa6, 0xd5, 0xe8, 0x01, 0xf3, 0xd2, 0xe8, 0x41, 0x42, 0x10, 0x00, + 0x48, 0xf3, 0x01, 0x46, 0x38, 0xdf, 0xcb, 0xce, 0x01, 0x49, 0x2d, 0x29, + 0xe0, 0xfa, 0x41, 0xa1, 0xfd, 0x03, 0x06, 0x7c, 0xda, 0xec, 0x03, 0x06, + 0xef, 0x06, 0xa5, 0x03, 0xac, 0x6b, 0x58, 0x26, 0x2b, 0xf3, 0xaa, 0x00, + 0xb6, 0x06, 0x54, 0x08, 0x47, 0xf4, 0xaa, 0x40, 0x45, 0xe4, 0x23, 0xf6, + 0xaa, 0x00, 0x0a, 0x41, 0x77, 0x01, 0xff, 0xa1, 0x3c, 0x47, 0xe2, 0xcf, + 0xe9, 0xab, 0x00, 0xa9, 0x2a, 0x44, 0xa5, 0xf1, 0xea, 0xab, 0x00, 0x44, + 0x45, 0x86, 0xe3, 0xab, 0x00, 0x46, 0xf2, 0xdf, 0xe7, 0xab, 0x00, 0xb5, + 0x0c, 0x47, 0xea, 0x4b, 0xf5, 0xaa, 0x00, 0x45, 0x90, 0xec, 0xe6, 0xab, + 0x40, 0x43, 0x46, 0x86, 0xe8, 0xab, 0x00, 0xf5, 0xec, 0xaa, 0x40, 0xe9, + 0xeb, 0xaa, 0x00, 0x43, 0x46, 0x86, 0xe4, 0xab, 0x40, 0xa1, 0x0a, 0x43, + 0x46, 0x86, 0xe5, 0xab, 0x00, 0xf5, 0xee, 0xaa, 0x40, 0xe9, 0xed, 0xaa, + 0x00, 0xf5, 0xef, 0xaa, 0x40, 0x06, 0xed, 0x05, 0x06, 0x47, 0xbf, 0xd6, + 0xec, 0xab, 0x40, 0x45, 0x84, 0xe4, 0xd1, 0xab, 0x00, 0xa2, 0x9b, 0x02, + 0x02, 0x6d, 0x14, 0x8c, 0x02, 0xa4, 0xf1, 0x01, 0xe5, 0xe0, 0xaa, 0x00, + 0xa7, 0xde, 0x01, 0x43, 0x69, 0xde, 0xcd, 0xab, 0x00, 0xe9, 0xcf, 0xab, + 0x80, 0xcc, 0x01, 0xaa, 0xbd, 0x01, 0xab, 0xa7, 0x01, 0x43, 0x3f, 0x0e, + 0xc2, 0xab, 0x80, 0x99, 0x01, 0x43, 0xb1, 0x2f, 0xc3, 0xab, 0x80, 0x8b, + 0x01, 0xae, 0x65, 0xef, 0xe1, 0xaa, 0x00, 0xb0, 0x4e, 0x43, 0xd2, 0x07, + 0xd4, 0xab, 0x00, 0xb3, 0x34, 0xb4, 0x12, 0x42, 0x42, 0x0b, 0xce, 0xab, + 0x00, 0x43, 0xd1, 0x10, 0xcb, 0xab, 0x00, 0x44, 0xf2, 0xbd, 0xcc, 0xab, + 0x40, 0x43, 0x18, 0x1e, 0xca, 0xab, 0x00, 0x42, 0x62, 0x01, 0xc7, 0xab, + 0x80, 0x0d, 0xb4, 0x01, 0xff, 0xe1, 0xe4, 0xaa, 0x00, 0x42, 0x22, 0x00, + 0xe5, 0xaa, 0x40, 0x47, 0x42, 0xcd, 0xe0, 0xab, 0x40, 0x42, 0x57, 0x00, + 0xc1, 0xab, 0x00, 0x42, 0x22, 0x00, 0xe9, 0xaa, 0x00, 0x42, 0x40, 0x06, + 0xea, 0xaa, 0x40, 0xe1, 0xc4, 0xab, 0x80, 0x06, 0x43, 0x56, 0x00, 0xd0, + 0xab, 0x40, 0x47, 0x42, 0xcd, 0xde, 0xab, 0x40, 0xe1, 0xc5, 0xab, 0x80, + 0x19, 0x43, 0x05, 0xb3, 0xc9, 0xab, 0x80, 0x0c, 0x42, 0x2a, 0x05, 0xe8, + 0xaa, 0x00, 0x42, 0xbc, 0x22, 0xe3, 0xaa, 0x40, 0x47, 0x42, 0xcd, 0xe1, + 0xab, 0x40, 0x47, 0x42, 0xcd, 0xdf, 0xab, 0x40, 0x47, 0x42, 0xcd, 0xdd, + 0xab, 0x40, 0x47, 0x42, 0xcd, 0xdc, 0xab, 0x40, 0x43, 0x18, 0x1e, 0xc8, + 0xab, 0x00, 0x42, 0x55, 0x05, 0xc0, 0xab, 0xc0, 0x00, 0x47, 0x42, 0xcd, + 0xdb, 0xab, 0x40, 0x43, 0x56, 0x00, 0xd3, 0xab, 0x00, 0x42, 0x62, 0x01, + 0xd6, 0xab, 0x40, 0x47, 0x42, 0xcd, 0xe2, 0xab, 0x40, 0x43, 0x18, 0x1e, + 0xd8, 0xab, 0x00, 0x42, 0x55, 0x05, 0xd2, 0xab, 0x40, 0xa4, 0x0c, 0x43, + 0x18, 0x1e, 0xd9, 0xab, 0x00, 0x42, 0x62, 0x01, 0xd7, 0xab, 0x40, 0xe1, + 0xe6, 0xaa, 0x00, 0x42, 0x22, 0x00, 0xe7, 0xaa, 0x40, 0xe1, 0xe2, 0xaa, + 0x00, 0x42, 0x62, 0x01, 0xc6, 0xab, 0x40, 0xe1, 0xd5, 0xab, 0x00, 0x43, + 0x56, 0x00, 0xda, 0xab, 0x40, 0x45, 0x12, 0x0b, 0xf8, 0xab, 0x00, 0xa6, + 0x2e, 0x44, 0xcf, 0x2a, 0xf9, 0xab, 0x00, 0x43, 0x0e, 0x0b, 0xf1, 0xab, + 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, 0xf0, 0xab, 0x40, 0x44, + 0x25, 0x01, 0xf3, 0xab, 0x00, 0x42, 0x15, 0x02, 0xf2, 0xab, 0x40, 0x44, + 0xc9, 0x1d, 0xf7, 0xab, 0x00, 0x42, 0x01, 0x26, 0xf6, 0xab, 0x40, 0x43, + 0xd2, 0x05, 0xf5, 0xab, 0x00, 0x43, 0xf6, 0x06, 0xf4, 0xab, 0x40, 0x42, + 0x1a, 0x00, 0xf0, 0xaa, 0x00, 0x42, 0x12, 0x0b, 0xeb, 0xab, 0x40, 0x4b, + 0xb2, 0x9c, 0xf1, 0xaa, 0x00, 0x43, 0x5a, 0x87, 0xf2, 0xaa, 0x00, 0x48, + 0x00, 0xca, 0xed, 0xab, 0x40, 0x09, 0x2b, 0xb8, 0xf7, 0x01, 0xa9, 0x01, + 0xff, 0x05, 0x8f, 0x46, 0xdd, 0x01, 0x03, 0x48, 0x04, 0x01, 0xff, 0xa2, + 0xc9, 0x01, 0x06, 0x31, 0x14, 0xb8, 0x01, 0xa6, 0x8e, 0x01, 0x4b, 0x1b, + 0x61, 0xa3, 0xf7, 0x01, 0x04, 0xc3, 0x00, 0x70, 0x52, 0xa1, 0x53, 0x5f, + 0x20, 0x00, 0x05, 0xc8, 0x00, 0x52, 0xb3, 0x27, 0x0e, 0x09, 0x7d, 0x17, + 0x4c, 0x32, 0x00, 0x59, 0x27, 0x00, 0x06, 0xad, 0x02, 0x01, 0xff, 0x46, + 0x12, 0x03, 0xaa, 0x26, 0x00, 0x46, 0xd6, 0x05, 0x8f, 0xf7, 0x41, 0x4a, + 0xf4, 0x2b, 0xc1, 0xf7, 0x01, 0x4d, 0x28, 0x13, 0xc3, 0xf7, 0x41, 0x46, + 0x13, 0x19, 0xaa, 0xf7, 0x01, 0x44, 0x4c, 0x04, 0x92, 0x25, 0x00, 0x03, + 0xff, 0x52, 0x0d, 0x51, 0xfa, 0x5b, 0xac, 0x26, 0xc0, 0x00, 0x54, 0xec, + 0x3f, 0xf0, 0xce, 0x41, 0x52, 0xec, 0x2b, 0xcb, 0xf7, 0x01, 0x4f, 0xd5, + 0x1c, 0xb6, 0xf7, 0x41, 0x80, 0x06, 0x60, 0x34, 0x0f, 0x6d, 0x27, 0x40, + 0x56, 0x53, 0x33, 0x75, 0x27, 0x00, 0x54, 0xd8, 0x21, 0x69, 0x27, 0x40, + 0x80, 0x06, 0x60, 0x34, 0x0f, 0x6c, 0x27, 0x40, 0x56, 0x53, 0x33, 0x74, + 0x27, 0x00, 0x54, 0xd8, 0x21, 0x68, 0x27, 0x40, 0x53, 0x59, 0x42, 0xb0, + 0xf7, 0x01, 0x09, 0x31, 0x3b, 0x11, 0x0c, 0x1c, 0x13, 0x01, 0xff, 0x4a, + 0xf4, 0x2b, 0xc5, 0xf7, 0x01, 0x4d, 0x28, 0x13, 0xc7, 0xf7, 0x41, 0x59, + 0x7f, 0x24, 0x6a, 0x27, 0x00, 0x5a, 0xd2, 0x21, 0x6b, 0x27, 0x40, 0x52, + 0xec, 0x2b, 0xce, 0xf7, 0x01, 0x4f, 0xd5, 0x1c, 0xbc, 0xf7, 0x41, 0x4b, + 0x0d, 0x03, 0xab, 0x26, 0x00, 0x50, 0x96, 0x65, 0x85, 0xf7, 0x41, 0x45, + 0x13, 0x05, 0x4c, 0x2e, 0x00, 0x50, 0xad, 0x00, 0x53, 0x2e, 0x00, 0x4d, + 0xa6, 0x34, 0x54, 0x2e, 0x40, 0xa3, 0xd0, 0x02, 0x06, 0xef, 0x06, 0xf4, + 0x01, 0x4e, 0x9f, 0x77, 0x9a, 0x6e, 0x01, 0x49, 0x81, 0x16, 0x98, 0x6e, + 0x01, 0x07, 0xff, 0x39, 0x9e, 0x01, 0xb3, 0x01, 0xff, 0x0c, 0x77, 0x08, + 0x06, 0x4a, 0xed, 0xb3, 0x99, 0x6e, 0x41, 0xe1, 0x6d, 0x6e, 0x81, 0x81, + 0x01, 0xe2, 0x70, 0x6e, 0x01, 0xe3, 0x71, 0x6e, 0x01, 0xe4, 0x79, 0x6e, + 0x01, 0xe5, 0x6f, 0x6e, 0x01, 0xe6, 0x6a, 0x6e, 0x01, 0xe7, 0x69, 0x6e, + 0x01, 0xe8, 0x76, 0x6e, 0x81, 0x60, 0xe9, 0x6b, 0x6e, 0x01, 0xea, 0x6e, + 0x6e, 0x01, 0xeb, 0x6c, 0x6e, 0x81, 0x4f, 0xec, 0x74, 0x6e, 0x01, 0xed, + 0x60, 0x6e, 0x01, 0xee, 0x7b, 0x6e, 0x81, 0x3a, 0xef, 0x7d, 0x6e, 0x81, + 0x31, 0xf0, 0x67, 0x6e, 0x01, 0xf1, 0x75, 0x6e, 0x01, 0xf2, 0x7c, 0x6e, + 0x01, 0xf3, 0x61, 0x6e, 0x01, 0xf4, 0x68, 0x6e, 0x01, 0xf5, 0x72, 0x6e, + 0x01, 0xf6, 0x62, 0x6e, 0x01, 0xf7, 0x63, 0x6e, 0x01, 0xf8, 0x78, 0x6e, + 0x01, 0xf9, 0x7f, 0x6e, 0x81, 0x04, 0xfa, 0x65, 0x6e, 0x41, 0xf5, 0x73, + 0x6e, 0x41, 0xe5, 0x7a, 0x6e, 0x41, 0xe7, 0x77, 0x6e, 0x01, 0xf9, 0x77, + 0x6e, 0x41, 0xf0, 0x66, 0x6e, 0x41, 0xf0, 0x76, 0x6e, 0x41, 0xe9, 0x7e, + 0x6e, 0x01, 0x43, 0x08, 0x89, 0x64, 0x6e, 0x41, 0xa5, 0x37, 0xa6, 0x29, + 0x48, 0xc5, 0x53, 0x93, 0x6e, 0x01, 0xb3, 0x15, 0xb4, 0x01, 0xff, 0x42, + 0x92, 0x01, 0x8a, 0x6e, 0x01, 0x47, 0x95, 0x5a, 0x8d, 0x6e, 0x01, 0x45, + 0xe6, 0x2b, 0x8c, 0x6e, 0x41, 0x48, 0x85, 0x51, 0x91, 0x6e, 0x01, 0x46, + 0x01, 0x26, 0x90, 0x6e, 0x41, 0x46, 0x08, 0x18, 0x8f, 0x6e, 0x01, 0x47, + 0x0a, 0x5d, 0x8e, 0x6e, 0x41, 0x47, 0x52, 0x25, 0x92, 0x6e, 0x01, 0x45, + 0xb4, 0x6f, 0x8b, 0x6e, 0x41, 0x45, 0x12, 0x0b, 0x88, 0x6e, 0x01, 0xa6, + 0x43, 0x44, 0xcf, 0x2a, 0x89, 0x6e, 0x01, 0x43, 0x0e, 0x0b, 0x81, 0x6e, + 0x81, 0x30, 0xb3, 0x22, 0xb4, 0x06, 0x44, 0x43, 0x1e, 0x80, 0x6e, 0x41, + 0x44, 0x25, 0x01, 0x83, 0x6e, 0x81, 0x0d, 0x42, 0x15, 0x02, 0x82, 0x6e, + 0xc1, 0x00, 0x4f, 0x06, 0x69, 0x95, 0x6e, 0x41, 0x4f, 0x06, 0x69, 0x96, + 0x6e, 0x41, 0x44, 0xc9, 0x1d, 0x87, 0x6e, 0x01, 0x42, 0x01, 0x26, 0x86, + 0x6e, 0x41, 0x4f, 0x06, 0x69, 0x94, 0x6e, 0x41, 0x43, 0xd2, 0x05, 0x85, + 0x6e, 0x01, 0x43, 0xf6, 0x06, 0x84, 0x6e, 0x41, 0x0e, 0xe5, 0x05, 0x06, + 0x44, 0x14, 0x05, 0x97, 0x6e, 0x41, 0xe1, 0x4d, 0x6e, 0x81, 0x81, 0x01, + 0xe2, 0x50, 0x6e, 0x01, 0xe3, 0x51, 0x6e, 0x01, 0xe4, 0x59, 0x6e, 0x01, + 0xe5, 0x4f, 0x6e, 0x01, 0xe6, 0x4a, 0x6e, 0x01, 0xe7, 0x49, 0x6e, 0x01, + 0xe8, 0x56, 0x6e, 0x81, 0x60, 0xe9, 0x4b, 0x6e, 0x01, 0xea, 0x4e, 0x6e, + 0x01, 0xeb, 0x4c, 0x6e, 0x81, 0x4f, 0xec, 0x54, 0x6e, 0x01, 0xed, 0x40, + 0x6e, 0x01, 0xee, 0x5b, 0x6e, 0x81, 0x3a, 0xef, 0x5d, 0x6e, 0x81, 0x31, + 0xf0, 0x47, 0x6e, 0x01, 0xf1, 0x55, 0x6e, 0x01, 0xf2, 0x5c, 0x6e, 0x01, + 0xf3, 0x41, 0x6e, 0x01, 0xf4, 0x48, 0x6e, 0x01, 0xf5, 0x52, 0x6e, 0x01, + 0xf6, 0x42, 0x6e, 0x01, 0xf7, 0x43, 0x6e, 0x01, 0xf8, 0x58, 0x6e, 0x01, + 0xf9, 0x5f, 0x6e, 0x81, 0x04, 0xfa, 0x45, 0x6e, 0x41, 0xf5, 0x53, 0x6e, + 0x41, 0xe5, 0x5a, 0x6e, 0x41, 0xe7, 0x57, 0x6e, 0x01, 0xf9, 0x57, 0x6e, + 0x41, 0xf0, 0x46, 0x6e, 0x41, 0xf0, 0x56, 0x6e, 0x41, 0xe9, 0x5e, 0x6e, + 0x01, 0x43, 0x08, 0x89, 0x44, 0x6e, 0x41, 0x43, 0xfe, 0x05, 0xbe, 0xf9, + 0x01, 0x43, 0xa2, 0x38, 0xbf, 0xf9, 0x41, 0x06, 0x3a, 0xe0, 0x06, 0x49, + 0x8d, 0xbf, 0x56, 0xf3, 0x41, 0x45, 0x04, 0x02, 0x21, 0x22, 0x80, 0x0c, + 0x42, 0x08, 0x00, 0x5e, 0x22, 0x00, 0x54, 0x50, 0x45, 0x9d, 0x29, 0x40, + 0x80, 0x01, 0xff, 0x4c, 0x3f, 0x93, 0x9b, 0x29, 0x00, 0x27, 0xf4, 0x05, + 0x01, 0xff, 0x09, 0x0c, 0x49, 0x31, 0x09, 0x38, 0x44, 0x21, 0x0a, 0x09, + 0x01, 0x11, 0x07, 0xb3, 0x5e, 0x01, 0xff, 0x44, 0xc3, 0x00, 0xa9, 0x29, + 0x00, 0x45, 0xc8, 0x00, 0xa8, 0x29, 0x40, 0x44, 0xa5, 0x01, 0xae, 0x29, + 0x00, 0x42, 0x50, 0x02, 0xac, 0x29, 0x40, 0x44, 0xa5, 0x01, 0xaf, 0x29, + 0x00, 0x42, 0x50, 0x02, 0xad, 0x29, 0x40, 0x44, 0xc3, 0x00, 0xab, 0x29, + 0x00, 0x45, 0xc8, 0x00, 0xaa, 0x29, 0x40, 0x44, 0xaf, 0x70, 0xaf, 0x00, + 0x00, 0xa7, 0xf6, 0x42, 0xa8, 0x99, 0x3e, 0xab, 0xf7, 0x3c, 0xac, 0xe2, + 0x36, 0x45, 0xbc, 0xe8, 0xa3, 0xf9, 0x01, 0xee, 0x68, 0xf4, 0x81, 0x81, + 0x32, 0xb0, 0xf2, 0x31, 0xb2, 0xaf, 0x2e, 0xb3, 0xcd, 0x2a, 0xb4, 0x95, + 0x01, 0x46, 0x66, 0xe1, 0xd6, 0xf5, 0x01, 0x0c, 0x17, 0x97, 0x01, 0xff, + 0xa5, 0x75, 0xa6, 0x58, 0x44, 0xcf, 0x2a, 0xe9, 0xd2, 0x81, 0x4b, 0x43, + 0x0e, 0x0b, 0xe1, 0xd2, 0x01, 0xb3, 0x29, 0xb4, 0x06, 0x44, 0x43, 0x1e, + 0xe0, 0xd2, 0x41, 0x42, 0x92, 0x01, 0xea, 0xd2, 0x01, 0xa8, 0x0d, 0xb7, + 0x01, 0xff, 0x44, 0xe7, 0x2b, 0xec, 0xd2, 0x01, 0xef, 0xe2, 0xd2, 0x41, + 0x46, 0x96, 0x5a, 0xed, 0xd2, 0x01, 0x43, 0x26, 0x01, 0xe3, 0xd2, 0x41, + 0x44, 0xc9, 0x1d, 0xe7, 0xd2, 0x81, 0x0d, 0x42, 0x01, 0x26, 0xe6, 0xd2, + 0xc1, 0x00, 0x44, 0x0a, 0x18, 0xf0, 0xd2, 0x41, 0x44, 0x0a, 0x18, 0xf1, + 0xd2, 0x41, 0x44, 0x0a, 0x18, 0xf3, 0xd2, 0x41, 0xa9, 0x0d, 0x43, 0xf6, + 0x06, 0xe4, 0xd2, 0xc1, 0x00, 0x44, 0x0a, 0x18, 0xee, 0xd2, 0x41, 0x45, + 0x09, 0x18, 0xef, 0xd2, 0x01, 0x42, 0x32, 0x00, 0xe5, 0xd2, 0x41, 0x44, + 0xc9, 0x00, 0xe8, 0xd2, 0x81, 0x06, 0x45, 0xb4, 0x6f, 0xeb, 0xd2, 0x41, + 0x43, 0xc4, 0x09, 0xf2, 0xd2, 0x41, 0x47, 0x8a, 0xd0, 0xc9, 0xf9, 0x01, + 0x0a, 0xa4, 0x53, 0x01, 0xff, 0x05, 0x16, 0x61, 0xb6, 0x1b, 0x0e, 0x13, + 0x77, 0xad, 0x19, 0xa6, 0xda, 0x17, 0x07, 0x0b, 0xd2, 0xe0, 0x12, 0x05, + 0xc3, 0x00, 0xb8, 0x12, 0x0a, 0x07, 0xae, 0x93, 0x10, 0x02, 0x0d, 0x00, + 0xe1, 0x0f, 0xb3, 0x01, 0xff, 0x0a, 0x02, 0x48, 0xb2, 0x01, 0x06, 0x75, + 0x06, 0x01, 0xff, 0x08, 0xe4, 0x05, 0x61, 0x06, 0x5d, 0x07, 0x01, 0xff, + 0xe1, 0xb6, 0xd4, 0x01, 0xe2, 0xb7, 0xd4, 0x01, 0xe3, 0xb8, 0xd4, 0x01, + 0xe4, 0xb9, 0xd4, 0x01, 0xe6, 0xbb, 0xd4, 0x01, 0xe8, 0xbd, 0xd4, 0x01, + 0xe9, 0xbe, 0xd4, 0x01, 0xea, 0xbf, 0xd4, 0x01, 0xeb, 0xc0, 0xd4, 0x01, + 0xec, 0xc1, 0xd4, 0x01, 0xed, 0xc2, 0xd4, 0x01, 0xee, 0xc3, 0xd4, 0x01, + 0xf0, 0xc5, 0xd4, 0x01, 0xf1, 0xc6, 0xd4, 0x01, 0xf2, 0xc7, 0xd4, 0x01, + 0xf3, 0xc8, 0xd4, 0x01, 0xf4, 0xc9, 0xd4, 0x01, 0xf5, 0xca, 0xd4, 0x01, + 0xf6, 0xcb, 0xd4, 0x01, 0xf7, 0xcc, 0xd4, 0x01, 0xf8, 0xcd, 0xd4, 0x01, + 0xf9, 0xce, 0xd4, 0x01, 0xfa, 0xcf, 0xd4, 0x41, 0xe1, 0x9c, 0xd4, 0x01, + 0xe3, 0x9e, 0xd4, 0x01, 0xe4, 0x9f, 0xd4, 0x01, 0xe7, 0xa2, 0xd4, 0x01, + 0xea, 0xa5, 0xd4, 0x01, 0xeb, 0xa6, 0xd4, 0x01, 0xee, 0xa9, 0xd4, 0x01, + 0xef, 0xaa, 0xd4, 0x01, 0xf0, 0xab, 0xd4, 0x01, 0xf1, 0xac, 0xd4, 0x01, + 0xf3, 0xae, 0xd4, 0x01, 0xf4, 0xaf, 0xd4, 0x01, 0xf5, 0xb0, 0xd4, 0x01, + 0xf6, 0xb1, 0xd4, 0x01, 0xf7, 0xb2, 0xd4, 0x01, 0xf8, 0xb3, 0xd4, 0x01, + 0xf9, 0xb4, 0xd4, 0x01, 0xfa, 0xb5, 0xd4, 0x41, 0x05, 0x16, 0x61, 0xfe, + 0x03, 0x08, 0xe4, 0x05, 0x91, 0x03, 0x06, 0xef, 0x06, 0xca, 0x02, 0x07, + 0x0b, 0xd2, 0x6d, 0x06, 0x5d, 0x07, 0x01, 0xff, 0xe1, 0xba, 0xd5, 0x01, + 0xe2, 0xbb, 0xd5, 0x01, 0xe3, 0xbc, 0xd5, 0x01, 0xe4, 0xbd, 0xd5, 0x01, + 0xe5, 0xbe, 0xd5, 0x01, 0xe6, 0xbf, 0xd5, 0x01, 0xe7, 0xc0, 0xd5, 0x01, + 0xe8, 0xc1, 0xd5, 0x01, 0xe9, 0xc2, 0xd5, 0x01, 0xea, 0xc3, 0xd5, 0x01, + 0xeb, 0xc4, 0xd5, 0x01, 0xec, 0xc5, 0xd5, 0x01, 0xed, 0xc6, 0xd5, 0x01, + 0xee, 0xc7, 0xd5, 0x01, 0xef, 0xc8, 0xd5, 0x01, 0xf0, 0xc9, 0xd5, 0x01, + 0xf1, 0xca, 0xd5, 0x01, 0xf2, 0xcb, 0xd5, 0x01, 0xf3, 0xcc, 0xd5, 0x01, + 0xf4, 0xcd, 0xd5, 0x01, 0xf5, 0xce, 0xd5, 0x01, 0xf6, 0xcf, 0xd5, 0x01, + 0xf7, 0xd0, 0xd5, 0x01, 0xf8, 0xd1, 0xd5, 0x01, 0xf9, 0xd2, 0xd5, 0x01, + 0xfa, 0xd3, 0xd5, 0x41, 0x08, 0xe4, 0x05, 0x6d, 0x06, 0x5d, 0x07, 0x01, + 0xff, 0xe1, 0x22, 0xd6, 0x01, 0xe2, 0x23, 0xd6, 0x01, 0xe3, 0x24, 0xd6, + 0x01, 0xe4, 0x25, 0xd6, 0x01, 0xe5, 0x26, 0xd6, 0x01, 0xe6, 0x27, 0xd6, + 0x01, 0xe7, 0x28, 0xd6, 0x01, 0xe8, 0x29, 0xd6, 0x01, 0xe9, 0x2a, 0xd6, + 0x01, 0xea, 0x2b, 0xd6, 0x01, 0xeb, 0x2c, 0xd6, 0x01, 0xec, 0x2d, 0xd6, + 0x01, 0xed, 0x2e, 0xd6, 0x01, 0xee, 0x2f, 0xd6, 0x01, 0xef, 0x30, 0xd6, + 0x01, 0xf0, 0x31, 0xd6, 0x01, 0xf1, 0x32, 0xd6, 0x01, 0xf2, 0x33, 0xd6, + 0x01, 0xf3, 0x34, 0xd6, 0x01, 0xf4, 0x35, 0xd6, 0x01, 0xf5, 0x36, 0xd6, + 0x01, 0xf6, 0x37, 0xd6, 0x01, 0xf7, 0x38, 0xd6, 0x01, 0xf8, 0x39, 0xd6, + 0x01, 0xf9, 0x3a, 0xd6, 0x01, 0xfa, 0x3b, 0xd6, 0x41, 0xe1, 0x08, 0xd6, + 0x01, 0xe2, 0x09, 0xd6, 0x01, 0xe3, 0x0a, 0xd6, 0x01, 0xe4, 0x0b, 0xd6, + 0x01, 0xe5, 0x0c, 0xd6, 0x01, 0xe6, 0x0d, 0xd6, 0x01, 0xe7, 0x0e, 0xd6, + 0x01, 0xe8, 0x0f, 0xd6, 0x01, 0xe9, 0x10, 0xd6, 0x01, 0xea, 0x11, 0xd6, + 0x01, 0xeb, 0x12, 0xd6, 0x01, 0xec, 0x13, 0xd6, 0x01, 0xed, 0x14, 0xd6, + 0x01, 0xee, 0x15, 0xd6, 0x01, 0xef, 0x16, 0xd6, 0x01, 0xf0, 0x17, 0xd6, + 0x01, 0xf1, 0x18, 0xd6, 0x01, 0xf2, 0x19, 0xd6, 0x01, 0xf3, 0x1a, 0xd6, + 0x01, 0xf4, 0x1b, 0xd6, 0x01, 0xf5, 0x1c, 0xd6, 0x01, 0xf6, 0x1d, 0xd6, + 0x01, 0xf7, 0x1e, 0xd6, 0x01, 0xf8, 0x1f, 0xd6, 0x01, 0xf9, 0x20, 0xd6, + 0x01, 0xfa, 0x21, 0xd6, 0x41, 0x45, 0x12, 0x0b, 0xea, 0xd7, 0x01, 0xa6, + 0x2e, 0x44, 0xcf, 0x2a, 0xeb, 0xd7, 0x01, 0x43, 0x0e, 0x0b, 0xe3, 0xd7, + 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, 0xe2, 0xd7, 0x41, 0x44, + 0x25, 0x01, 0xe5, 0xd7, 0x01, 0x42, 0x15, 0x02, 0xe4, 0xd7, 0x41, 0x44, + 0xc9, 0x1d, 0xe9, 0xd7, 0x01, 0x42, 0x01, 0x26, 0xe8, 0xd7, 0x41, 0x43, + 0xd2, 0x05, 0xe7, 0xd7, 0x01, 0x43, 0xf6, 0x06, 0xe6, 0xd7, 0x41, 0xe1, + 0xa0, 0xd5, 0x01, 0xe2, 0xa1, 0xd5, 0x01, 0xe3, 0xa2, 0xd5, 0x01, 0xe4, + 0xa3, 0xd5, 0x01, 0xe5, 0xa4, 0xd5, 0x01, 0xe6, 0xa5, 0xd5, 0x01, 0xe7, + 0xa6, 0xd5, 0x01, 0xe8, 0xa7, 0xd5, 0x01, 0xe9, 0xa8, 0xd5, 0x01, 0xea, + 0xa9, 0xd5, 0x01, 0xeb, 0xaa, 0xd5, 0x01, 0xec, 0xab, 0xd5, 0x01, 0xed, + 0xac, 0xd5, 0x01, 0xee, 0xad, 0xd5, 0x01, 0xef, 0xae, 0xd5, 0x01, 0xf0, + 0xaf, 0xd5, 0x01, 0xf1, 0xb0, 0xd5, 0x01, 0xf2, 0xb1, 0xd5, 0x01, 0xf3, + 0xb2, 0xd5, 0x01, 0xf4, 0xb3, 0xd5, 0x01, 0xf5, 0xb4, 0xd5, 0x01, 0xf6, + 0xb5, 0xd5, 0x01, 0xf7, 0xb6, 0xd5, 0x01, 0xf8, 0xb7, 0xd5, 0x01, 0xf9, + 0xb8, 0xd5, 0x01, 0xfa, 0xb9, 0xd5, 0x41, 0x08, 0xe4, 0x05, 0x87, 0x08, + 0x06, 0xef, 0x06, 0xc0, 0x07, 0x4e, 0xce, 0x15, 0x8a, 0xd7, 0x01, 0x07, + 0x0b, 0xd2, 0xc9, 0x02, 0x4c, 0x93, 0x90, 0x8c, 0xd7, 0x01, 0x45, 0xe9, + 0xe8, 0x6f, 0xd7, 0x01, 0xb0, 0xa8, 0x02, 0x4a, 0x41, 0xb0, 0x8e, 0xd7, + 0x01, 0x06, 0x5d, 0x07, 0x06, 0x4c, 0xc7, 0x95, 0x8b, 0xd7, 0x41, 0xe1, + 0xee, 0xd5, 0x81, 0x8c, 0x02, 0xe2, 0xef, 0xd5, 0x81, 0x80, 0x02, 0xe3, + 0xf0, 0xd5, 0x81, 0xf4, 0x01, 0xe4, 0xf1, 0xd5, 0x81, 0xe8, 0x01, 0xe5, + 0xf2, 0xd5, 0x81, 0xd6, 0x01, 0xe6, 0xf3, 0xd5, 0x81, 0xca, 0x01, 0xe7, + 0xf4, 0xd5, 0x81, 0xbe, 0x01, 0xe8, 0xf5, 0xd5, 0x01, 0xe9, 0xf6, 0xd5, + 0x81, 0xae, 0x01, 0xea, 0xf7, 0xd5, 0x01, 0xeb, 0xf8, 0xd5, 0x81, 0x9e, + 0x01, 0xec, 0xf9, 0xd5, 0x81, 0x92, 0x01, 0xed, 0xfa, 0xd5, 0x81, 0x88, + 0x01, 0xee, 0xfb, 0xd5, 0x81, 0x7f, 0xef, 0xfc, 0xd5, 0x81, 0x6b, 0xf0, + 0xfd, 0xd5, 0x81, 0x56, 0xf1, 0xfe, 0xd5, 0x01, 0xf2, 0xff, 0xd5, 0x81, + 0x47, 0xf3, 0x00, 0xd6, 0x81, 0x3c, 0xf4, 0x01, 0xd6, 0x81, 0x2b, 0xf5, + 0x02, 0xd6, 0x81, 0x20, 0xf6, 0x03, 0xd6, 0x01, 0xf7, 0x04, 0xd6, 0x01, + 0xf8, 0x05, 0xd6, 0x81, 0x0f, 0xf9, 0x06, 0xd6, 0x01, 0xfa, 0x07, 0xd6, + 0xc1, 0x00, 0x43, 0x94, 0x0f, 0x75, 0xd7, 0x41, 0xe9, 0x7d, 0xd7, 0x41, + 0x46, 0xcf, 0x15, 0x84, 0xd7, 0x41, 0x42, 0x5f, 0x24, 0x83, 0xd7, 0x01, + 0x44, 0xc8, 0x95, 0x77, 0xd7, 0x41, 0x44, 0xbf, 0x1f, 0x82, 0xd7, 0x41, + 0x42, 0x0b, 0x00, 0x80, 0xd7, 0x41, 0x42, 0x49, 0x00, 0x85, 0xd7, 0x01, + 0xe9, 0x7f, 0xd7, 0x01, 0x42, 0x5a, 0x03, 0x87, 0xd7, 0x41, 0xad, 0x01, + 0xff, 0x43, 0xce, 0x05, 0x88, 0xd7, 0x01, 0x45, 0x4a, 0xe7, 0x7e, 0xd7, + 0x41, 0xf5, 0x7c, 0xd7, 0x41, 0xf5, 0x7b, 0xd7, 0x41, 0x44, 0x18, 0xe8, + 0x7a, 0xd7, 0x41, 0x44, 0x94, 0x90, 0x79, 0xd7, 0x41, 0x43, 0x1b, 0x05, + 0x78, 0xd7, 0x41, 0x44, 0x00, 0x21, 0x72, 0xd7, 0x41, 0x4a, 0x19, 0x9c, + 0x81, 0xd7, 0x41, 0x46, 0xcf, 0x15, 0x74, 0xd7, 0x01, 0x42, 0x12, 0x00, + 0x76, 0xd7, 0x41, 0x44, 0x38, 0xd6, 0x73, 0xd7, 0x41, 0x42, 0x49, 0x00, + 0x86, 0xd7, 0x41, 0x43, 0x94, 0x0f, 0x71, 0xd7, 0x41, 0x44, 0x3f, 0xe4, + 0x70, 0xd7, 0x41, 0x53, 0x4e, 0x48, 0x89, 0xd7, 0x01, 0x49, 0x93, 0xb9, + 0x8d, 0xd7, 0x01, 0x48, 0x5b, 0xac, 0x8f, 0xd7, 0x41, 0x08, 0xe4, 0x05, + 0xcf, 0x02, 0x4e, 0xce, 0x15, 0xc4, 0xd7, 0x01, 0x4c, 0x93, 0x90, 0xc6, + 0xd7, 0x01, 0x45, 0xe9, 0xe8, 0xa9, 0xd7, 0x01, 0xb0, 0xa8, 0x02, 0x4a, + 0x41, 0xb0, 0xc8, 0xd7, 0x01, 0x06, 0x5d, 0x07, 0x06, 0x4c, 0xc7, 0x95, + 0xc5, 0xd7, 0x41, 0xe1, 0x56, 0xd6, 0x81, 0x8c, 0x02, 0xe2, 0x57, 0xd6, + 0x81, 0x80, 0x02, 0xe3, 0x58, 0xd6, 0x81, 0xf4, 0x01, 0xe4, 0x59, 0xd6, + 0x81, 0xe8, 0x01, 0xe5, 0x5a, 0xd6, 0x81, 0xd6, 0x01, 0xe6, 0x5b, 0xd6, + 0x81, 0xca, 0x01, 0xe7, 0x5c, 0xd6, 0x81, 0xbe, 0x01, 0xe8, 0x5d, 0xd6, + 0x01, 0xe9, 0x5e, 0xd6, 0x81, 0xae, 0x01, 0xea, 0x5f, 0xd6, 0x01, 0xeb, + 0x60, 0xd6, 0x81, 0x9e, 0x01, 0xec, 0x61, 0xd6, 0x81, 0x92, 0x01, 0xed, + 0x62, 0xd6, 0x81, 0x88, 0x01, 0xee, 0x63, 0xd6, 0x81, 0x7f, 0xef, 0x64, + 0xd6, 0x81, 0x6b, 0xf0, 0x65, 0xd6, 0x81, 0x56, 0xf1, 0x66, 0xd6, 0x01, + 0xf2, 0x67, 0xd6, 0x81, 0x47, 0xf3, 0x68, 0xd6, 0x81, 0x3c, 0xf4, 0x69, + 0xd6, 0x81, 0x2b, 0xf5, 0x6a, 0xd6, 0x81, 0x20, 0xf6, 0x6b, 0xd6, 0x01, + 0xf7, 0x6c, 0xd6, 0x01, 0xf8, 0x6d, 0xd6, 0x81, 0x0f, 0xf9, 0x6e, 0xd6, + 0x01, 0xfa, 0x6f, 0xd6, 0xc1, 0x00, 0x43, 0x94, 0x0f, 0xaf, 0xd7, 0x41, + 0xe9, 0xb7, 0xd7, 0x41, 0x46, 0xcf, 0x15, 0xbe, 0xd7, 0x41, 0x42, 0x5f, + 0x24, 0xbd, 0xd7, 0x01, 0x44, 0xc8, 0x95, 0xb1, 0xd7, 0x41, 0x44, 0xbf, + 0x1f, 0xbc, 0xd7, 0x41, 0x42, 0x0b, 0x00, 0xba, 0xd7, 0x41, 0x42, 0x49, + 0x00, 0xbf, 0xd7, 0x01, 0xe9, 0xb9, 0xd7, 0x01, 0x42, 0x5a, 0x03, 0xc1, + 0xd7, 0x41, 0xad, 0x01, 0xff, 0x43, 0xce, 0x05, 0xc2, 0xd7, 0x01, 0x45, + 0x4a, 0xe7, 0xb8, 0xd7, 0x41, 0xf5, 0xb6, 0xd7, 0x41, 0xf5, 0xb5, 0xd7, + 0x41, 0x44, 0x18, 0xe8, 0xb4, 0xd7, 0x41, 0x44, 0x94, 0x90, 0xb3, 0xd7, + 0x41, 0x43, 0x1b, 0x05, 0xb2, 0xd7, 0x41, 0x44, 0x00, 0x21, 0xac, 0xd7, + 0x41, 0x4a, 0x19, 0x9c, 0xbb, 0xd7, 0x41, 0x46, 0xcf, 0x15, 0xae, 0xd7, + 0x01, 0x42, 0x12, 0x00, 0xb0, 0xd7, 0x41, 0x44, 0x38, 0xd6, 0xad, 0xd7, + 0x41, 0x42, 0x49, 0x00, 0xc0, 0xd7, 0x41, 0x43, 0x94, 0x0f, 0xab, 0xd7, + 0x41, 0x44, 0x3f, 0xe4, 0xaa, 0xd7, 0x41, 0x53, 0x4e, 0x48, 0xc3, 0xd7, + 0x01, 0x49, 0x93, 0xb9, 0xc7, 0xd7, 0x01, 0x48, 0x5b, 0xac, 0xc9, 0xd7, + 0x41, 0xe1, 0x3c, 0xd6, 0x81, 0x8c, 0x02, 0xe2, 0x3d, 0xd6, 0x81, 0x80, + 0x02, 0xe3, 0x3e, 0xd6, 0x81, 0xf4, 0x01, 0xe4, 0x3f, 0xd6, 0x81, 0xe8, + 0x01, 0xe5, 0x40, 0xd6, 0x81, 0xd6, 0x01, 0xe6, 0x41, 0xd6, 0x01, 0xe7, + 0x42, 0xd6, 0x81, 0xc6, 0x01, 0xe8, 0x43, 0xd6, 0x01, 0xe9, 0x44, 0xd6, + 0x81, 0xb6, 0x01, 0xea, 0x45, 0xd6, 0x01, 0xeb, 0x46, 0xd6, 0x81, 0xa6, + 0x01, 0xec, 0x47, 0xd6, 0x81, 0x9a, 0x01, 0xed, 0x48, 0xd6, 0x81, 0x90, + 0x01, 0xee, 0x49, 0xd6, 0x81, 0x86, 0x01, 0xef, 0x4a, 0xd6, 0x81, 0x72, + 0xf0, 0x4b, 0xd6, 0x81, 0x5d, 0xf1, 0x4c, 0xd6, 0x01, 0xf2, 0x4d, 0xd6, + 0x81, 0x4e, 0xf3, 0x4e, 0xd6, 0x81, 0x43, 0xf4, 0x4f, 0xd6, 0x81, 0x2b, + 0xf5, 0x50, 0xd6, 0x81, 0x20, 0xf6, 0x51, 0xd6, 0x01, 0xf7, 0x52, 0xd6, + 0x01, 0xf8, 0x53, 0xd6, 0x81, 0x0f, 0xf9, 0x54, 0xd6, 0x01, 0xfa, 0x55, + 0xd6, 0xc1, 0x00, 0x43, 0x94, 0x0f, 0x95, 0xd7, 0x41, 0xe9, 0x9d, 0xd7, + 0x41, 0x46, 0xcf, 0x15, 0xa4, 0xd7, 0x41, 0x42, 0x5f, 0x24, 0xa3, 0xd7, + 0x01, 0x44, 0xc8, 0x95, 0x97, 0xd7, 0xc1, 0x00, 0x47, 0x15, 0x08, 0xa1, + 0xd7, 0x41, 0x44, 0xbf, 0x1f, 0xa2, 0xd7, 0x41, 0x42, 0x0b, 0x00, 0xa0, + 0xd7, 0x41, 0x42, 0x49, 0x00, 0xa5, 0xd7, 0x01, 0xe9, 0x9f, 0xd7, 0x01, + 0x42, 0x5a, 0x03, 0xa7, 0xd7, 0x41, 0xad, 0x01, 0xff, 0x43, 0xce, 0x05, + 0xa8, 0xd7, 0x01, 0x45, 0x4a, 0xe7, 0x9e, 0xd7, 0x41, 0xf5, 0x9c, 0xd7, + 0x41, 0xf5, 0x9b, 0xd7, 0x41, 0x44, 0x18, 0xe8, 0x9a, 0xd7, 0x41, 0x44, + 0x94, 0x90, 0x99, 0xd7, 0x41, 0x43, 0x1b, 0x05, 0x98, 0xd7, 0x41, 0x44, + 0x00, 0x21, 0x92, 0xd7, 0x41, 0x46, 0xcf, 0x15, 0x94, 0xd7, 0x01, 0x42, + 0x12, 0x00, 0x96, 0xd7, 0x41, 0x44, 0x38, 0xd6, 0x93, 0xd7, 0x41, 0x42, + 0x49, 0x00, 0xa6, 0xd7, 0x41, 0x43, 0x94, 0x0f, 0x91, 0xd7, 0x41, 0x44, + 0x3f, 0xe4, 0x90, 0xd7, 0x41, 0x45, 0x12, 0x0b, 0xf4, 0xd7, 0x01, 0xa6, + 0x2e, 0x44, 0xcf, 0x2a, 0xf5, 0xd7, 0x01, 0x43, 0x0e, 0x0b, 0xed, 0xd7, + 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, 0xec, 0xd7, 0x41, 0x44, + 0x25, 0x01, 0xef, 0xd7, 0x01, 0x42, 0x15, 0x02, 0xee, 0xd7, 0x41, 0x44, + 0xc9, 0x1d, 0xf3, 0xd7, 0x01, 0x42, 0x01, 0x26, 0xf2, 0xd7, 0x41, 0x43, + 0xd2, 0x05, 0xf1, 0xd7, 0x01, 0x43, 0xf6, 0x06, 0xf0, 0xd7, 0x41, 0xe1, + 0xd4, 0xd5, 0x81, 0x8c, 0x02, 0xe2, 0xd5, 0xd5, 0x81, 0x80, 0x02, 0xe3, + 0xd6, 0xd5, 0x81, 0xf4, 0x01, 0xe4, 0xd7, 0xd5, 0x81, 0xe8, 0x01, 0xe5, + 0xd8, 0xd5, 0x81, 0xd6, 0x01, 0xe6, 0xd9, 0xd5, 0x01, 0xe7, 0xda, 0xd5, + 0x81, 0xc6, 0x01, 0xe8, 0xdb, 0xd5, 0x01, 0xe9, 0xdc, 0xd5, 0x81, 0xb6, + 0x01, 0xea, 0xdd, 0xd5, 0x01, 0xeb, 0xde, 0xd5, 0x81, 0xa6, 0x01, 0xec, + 0xdf, 0xd5, 0x81, 0x9a, 0x01, 0xed, 0xe0, 0xd5, 0x81, 0x90, 0x01, 0xee, + 0xe1, 0xd5, 0x81, 0x86, 0x01, 0xef, 0xe2, 0xd5, 0x81, 0x72, 0xf0, 0xe3, + 0xd5, 0x81, 0x5d, 0xf1, 0xe4, 0xd5, 0x01, 0xf2, 0xe5, 0xd5, 0x81, 0x4e, + 0xf3, 0xe6, 0xd5, 0x81, 0x43, 0xf4, 0xe7, 0xd5, 0x81, 0x2b, 0xf5, 0xe8, + 0xd5, 0x81, 0x20, 0xf6, 0xe9, 0xd5, 0x01, 0xf7, 0xea, 0xd5, 0x01, 0xf8, + 0xeb, 0xd5, 0x81, 0x0f, 0xf9, 0xec, 0xd5, 0x01, 0xfa, 0xed, 0xd5, 0xc1, + 0x00, 0x43, 0x94, 0x0f, 0x5b, 0xd7, 0x41, 0xe9, 0x63, 0xd7, 0x41, 0x46, + 0xcf, 0x15, 0x6a, 0xd7, 0x41, 0x42, 0x5f, 0x24, 0x69, 0xd7, 0x01, 0x44, + 0xc8, 0x95, 0x5d, 0xd7, 0xc1, 0x00, 0x47, 0x15, 0x08, 0x67, 0xd7, 0x41, + 0x44, 0xbf, 0x1f, 0x68, 0xd7, 0x41, 0x42, 0x0b, 0x00, 0x66, 0xd7, 0x41, + 0x42, 0x49, 0x00, 0x6b, 0xd7, 0x01, 0xe9, 0x65, 0xd7, 0x01, 0x42, 0x5a, + 0x03, 0x6d, 0xd7, 0x41, 0xad, 0x01, 0xff, 0x43, 0xce, 0x05, 0x6e, 0xd7, + 0x01, 0x45, 0x4a, 0xe7, 0x64, 0xd7, 0x41, 0xf5, 0x62, 0xd7, 0x41, 0xf5, + 0x61, 0xd7, 0x41, 0x44, 0x18, 0xe8, 0x60, 0xd7, 0x41, 0x44, 0x94, 0x90, + 0x5f, 0xd7, 0x41, 0x43, 0x1b, 0x05, 0x5e, 0xd7, 0x41, 0x44, 0x00, 0x21, + 0x58, 0xd7, 0x41, 0x46, 0xcf, 0x15, 0x5a, 0xd7, 0x01, 0x42, 0x12, 0x00, + 0x5c, 0xd7, 0x41, 0x44, 0x38, 0xd6, 0x59, 0xd7, 0x41, 0x42, 0x49, 0x00, + 0x6c, 0xd7, 0x41, 0x43, 0x94, 0x0f, 0x57, 0xd7, 0x41, 0x44, 0x3f, 0xe4, + 0x56, 0xd7, 0x41, 0x04, 0xca, 0x00, 0x06, 0x4d, 0x38, 0x31, 0xcb, 0x27, + 0x40, 0x4d, 0x3e, 0x0f, 0xe9, 0x27, 0x00, 0x54, 0xa4, 0x41, 0xeb, 0x27, + 0x00, 0x55, 0x30, 0x3b, 0xef, 0x27, 0x00, 0x06, 0xad, 0x02, 0x01, 0xff, + 0x4e, 0xc8, 0x26, 0xe7, 0x27, 0x00, 0x56, 0x54, 0x09, 0xed, 0x27, 0x40, + 0x08, 0xe4, 0x05, 0xb3, 0x01, 0x06, 0xef, 0x06, 0x6d, 0x06, 0x5d, 0x07, + 0x01, 0xff, 0xe1, 0x8a, 0xd6, 0x01, 0xe2, 0x8b, 0xd6, 0x01, 0xe3, 0x8c, + 0xd6, 0x01, 0xe4, 0x8d, 0xd6, 0x01, 0xe5, 0x8e, 0xd6, 0x01, 0xe6, 0x8f, + 0xd6, 0x01, 0xe7, 0x90, 0xd6, 0x01, 0xe8, 0x91, 0xd6, 0x01, 0xe9, 0x92, + 0xd6, 0x01, 0xea, 0x93, 0xd6, 0x01, 0xeb, 0x94, 0xd6, 0x01, 0xec, 0x95, + 0xd6, 0x01, 0xed, 0x96, 0xd6, 0x01, 0xee, 0x97, 0xd6, 0x01, 0xef, 0x98, + 0xd6, 0x01, 0xf0, 0x99, 0xd6, 0x01, 0xf1, 0x9a, 0xd6, 0x01, 0xf2, 0x9b, + 0xd6, 0x01, 0xf3, 0x9c, 0xd6, 0x01, 0xf4, 0x9d, 0xd6, 0x01, 0xf5, 0x9e, + 0xd6, 0x01, 0xf6, 0x9f, 0xd6, 0x01, 0xf7, 0xa0, 0xd6, 0x01, 0xf8, 0xa1, + 0xd6, 0x01, 0xf9, 0xa2, 0xd6, 0x01, 0xfa, 0xa3, 0xd6, 0x41, 0x45, 0x12, + 0x0b, 0xfe, 0xd7, 0x01, 0xa6, 0x2e, 0x44, 0xcf, 0x2a, 0xff, 0xd7, 0x01, + 0x43, 0x0e, 0x0b, 0xf7, 0xd7, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0x43, + 0x1e, 0xf6, 0xd7, 0x41, 0x44, 0x25, 0x01, 0xf9, 0xd7, 0x01, 0x42, 0x15, + 0x02, 0xf8, 0xd7, 0x41, 0x44, 0xc9, 0x1d, 0xfd, 0xd7, 0x01, 0x42, 0x01, + 0x26, 0xfc, 0xd7, 0x41, 0x43, 0xd2, 0x05, 0xfb, 0xd7, 0x01, 0x43, 0xf6, + 0x06, 0xfa, 0xd7, 0x41, 0xe1, 0x70, 0xd6, 0x01, 0xe2, 0x71, 0xd6, 0x01, + 0xe3, 0x72, 0xd6, 0x01, 0xe4, 0x73, 0xd6, 0x01, 0xe5, 0x74, 0xd6, 0x01, + 0xe6, 0x75, 0xd6, 0x01, 0xe7, 0x76, 0xd6, 0x01, 0xe8, 0x77, 0xd6, 0x01, + 0xe9, 0x78, 0xd6, 0x01, 0xea, 0x79, 0xd6, 0x01, 0xeb, 0x7a, 0xd6, 0x01, + 0xec, 0x7b, 0xd6, 0x01, 0xed, 0x7c, 0xd6, 0x01, 0xee, 0x7d, 0xd6, 0x01, + 0xef, 0x7e, 0xd6, 0x01, 0xf0, 0x7f, 0xd6, 0x01, 0xf1, 0x80, 0xd6, 0x01, + 0xf2, 0x81, 0xd6, 0x01, 0xf3, 0x82, 0xd6, 0x01, 0xf4, 0x83, 0xd6, 0x01, + 0xf5, 0x84, 0xd6, 0x01, 0xf6, 0x85, 0xd6, 0x01, 0xf7, 0x86, 0xd6, 0x01, + 0xf8, 0x87, 0xd6, 0x01, 0xf9, 0x88, 0xd6, 0x01, 0xfa, 0x89, 0xd6, 0x41, + 0x4d, 0x3e, 0x0f, 0xe8, 0x27, 0x00, 0x54, 0xa4, 0x41, 0xea, 0x27, 0x00, + 0x55, 0x30, 0x3b, 0xee, 0x27, 0x00, 0x06, 0xad, 0x02, 0x01, 0xff, 0x4e, + 0xc8, 0x26, 0xe6, 0x27, 0x00, 0x56, 0x54, 0x09, 0xec, 0x27, 0x40, 0x08, + 0xe4, 0x05, 0xd8, 0x02, 0x4e, 0xce, 0x15, 0x16, 0xd7, 0x01, 0x4c, 0x93, + 0x90, 0x18, 0xd7, 0x01, 0x45, 0xe9, 0xe8, 0xfb, 0xd6, 0x01, 0xb0, 0xb1, + 0x02, 0x4a, 0x41, 0xb0, 0x1a, 0xd7, 0x01, 0x06, 0x5d, 0x07, 0x06, 0x4c, + 0xc7, 0x95, 0x17, 0xd7, 0x41, 0xe1, 0x4e, 0xd4, 0x81, 0x95, 0x02, 0xe2, + 0x4f, 0xd4, 0x81, 0x89, 0x02, 0xe3, 0x50, 0xd4, 0x81, 0xfd, 0x01, 0xe4, + 0x51, 0xd4, 0x81, 0xe4, 0x01, 0xe5, 0x52, 0xd4, 0x81, 0xd2, 0x01, 0xe6, + 0x53, 0xd4, 0x81, 0xc6, 0x01, 0xe7, 0x54, 0xd4, 0x81, 0xba, 0x01, 0xe9, + 0x56, 0xd4, 0x81, 0xae, 0x01, 0xea, 0x57, 0xd4, 0x01, 0xeb, 0x58, 0xd4, + 0x81, 0x9e, 0x01, 0xec, 0x59, 0xd4, 0x81, 0x92, 0x01, 0xed, 0x5a, 0xd4, + 0x81, 0x88, 0x01, 0xee, 0x5b, 0xd4, 0x81, 0x7f, 0xef, 0x5c, 0xd4, 0x81, + 0x6b, 0xf0, 0x5d, 0xd4, 0x81, 0x56, 0xf1, 0x5e, 0xd4, 0x01, 0xf2, 0x5f, + 0xd4, 0x81, 0x47, 0xf3, 0x60, 0xd4, 0x81, 0x3c, 0xf4, 0x61, 0xd4, 0x81, + 0x2b, 0xf5, 0x62, 0xd4, 0x81, 0x20, 0xf6, 0x63, 0xd4, 0x01, 0xf7, 0x64, + 0xd4, 0x01, 0xf8, 0x65, 0xd4, 0x81, 0x0f, 0xf9, 0x66, 0xd4, 0x01, 0xfa, + 0x67, 0xd4, 0xc1, 0x00, 0x43, 0x94, 0x0f, 0x01, 0xd7, 0x41, 0xe9, 0x09, + 0xd7, 0x41, 0x46, 0xcf, 0x15, 0x10, 0xd7, 0x41, 0x42, 0x5f, 0x24, 0x0f, + 0xd7, 0x01, 0x44, 0xc8, 0x95, 0x03, 0xd7, 0x41, 0x44, 0xbf, 0x1f, 0x0e, + 0xd7, 0x41, 0x42, 0x0b, 0x00, 0x0c, 0xd7, 0x41, 0x42, 0x49, 0x00, 0x11, + 0xd7, 0x01, 0xe9, 0x0b, 0xd7, 0x01, 0x42, 0x5a, 0x03, 0x13, 0xd7, 0x41, + 0xad, 0x01, 0xff, 0x43, 0xce, 0x05, 0x14, 0xd7, 0x01, 0x45, 0x4a, 0xe7, + 0x0a, 0xd7, 0x41, 0xf5, 0x08, 0xd7, 0x41, 0xf5, 0x07, 0xd7, 0x41, 0x44, + 0x18, 0xe8, 0x06, 0xd7, 0x41, 0x44, 0x94, 0x90, 0x05, 0xd7, 0x41, 0x43, + 0x1b, 0x05, 0x04, 0xd7, 0x41, 0x44, 0x00, 0x21, 0xfe, 0xd6, 0x41, 0x4a, + 0x19, 0x9c, 0x0d, 0xd7, 0x41, 0x46, 0xcf, 0x15, 0x00, 0xd7, 0x01, 0x42, + 0x12, 0x00, 0x02, 0xd7, 0x41, 0x44, 0x38, 0xd6, 0xff, 0xd6, 0x01, 0x07, + 0x91, 0x41, 0x01, 0xff, 0xe9, 0xa4, 0xd6, 0x01, 0xea, 0xa5, 0xd6, 0x41, + 0x42, 0x49, 0x00, 0x12, 0xd7, 0x41, 0x43, 0x94, 0x0f, 0xfd, 0xd6, 0x41, + 0x44, 0x3f, 0xe4, 0xfc, 0xd6, 0x41, 0x53, 0x4e, 0x48, 0x15, 0xd7, 0x01, + 0x49, 0x93, 0xb9, 0x19, 0xd7, 0x01, 0x48, 0x5b, 0xac, 0x1b, 0xd7, 0x41, + 0xe1, 0x34, 0xd4, 0x81, 0x8c, 0x02, 0xe2, 0x35, 0xd4, 0x81, 0x80, 0x02, + 0xe3, 0x36, 0xd4, 0x81, 0xf4, 0x01, 0xe4, 0x37, 0xd4, 0x81, 0xe8, 0x01, + 0xe5, 0x38, 0xd4, 0x81, 0xd6, 0x01, 0xe6, 0x39, 0xd4, 0x01, 0xe7, 0x3a, + 0xd4, 0x81, 0xc6, 0x01, 0xe8, 0x3b, 0xd4, 0x01, 0xe9, 0x3c, 0xd4, 0x81, + 0xb6, 0x01, 0xea, 0x3d, 0xd4, 0x01, 0xeb, 0x3e, 0xd4, 0x81, 0xa6, 0x01, + 0xec, 0x3f, 0xd4, 0x81, 0x9a, 0x01, 0xed, 0x40, 0xd4, 0x81, 0x90, 0x01, + 0xee, 0x41, 0xd4, 0x81, 0x86, 0x01, 0xef, 0x42, 0xd4, 0x81, 0x72, 0xf0, + 0x43, 0xd4, 0x81, 0x5d, 0xf1, 0x44, 0xd4, 0x01, 0xf2, 0x45, 0xd4, 0x81, + 0x4e, 0xf3, 0x46, 0xd4, 0x81, 0x43, 0xf4, 0x47, 0xd4, 0x81, 0x2b, 0xf5, + 0x48, 0xd4, 0x81, 0x20, 0xf6, 0x49, 0xd4, 0x01, 0xf7, 0x4a, 0xd4, 0x01, + 0xf8, 0x4b, 0xd4, 0x81, 0x0f, 0xf9, 0x4c, 0xd4, 0x01, 0xfa, 0x4d, 0xd4, + 0xc1, 0x00, 0x43, 0x94, 0x0f, 0xe7, 0xd6, 0x41, 0xe9, 0xef, 0xd6, 0x41, + 0x46, 0xcf, 0x15, 0xf6, 0xd6, 0x41, 0x42, 0x5f, 0x24, 0xf5, 0xd6, 0x01, + 0x44, 0xc8, 0x95, 0xe9, 0xd6, 0xc1, 0x00, 0x47, 0x15, 0x08, 0xf3, 0xd6, + 0x41, 0x44, 0xbf, 0x1f, 0xf4, 0xd6, 0x41, 0x42, 0x0b, 0x00, 0xf2, 0xd6, + 0x41, 0x42, 0x49, 0x00, 0xf7, 0xd6, 0x01, 0xe9, 0xf1, 0xd6, 0x01, 0x42, + 0x5a, 0x03, 0xf9, 0xd6, 0x41, 0xad, 0x01, 0xff, 0x43, 0xce, 0x05, 0xfa, + 0xd6, 0x01, 0x45, 0x4a, 0xe7, 0xf0, 0xd6, 0x41, 0xf5, 0xee, 0xd6, 0x41, + 0xf5, 0xed, 0xd6, 0x41, 0x44, 0x18, 0xe8, 0xec, 0xd6, 0x41, 0x44, 0x94, + 0x90, 0xeb, 0xd6, 0x41, 0x43, 0x1b, 0x05, 0xea, 0xd6, 0x41, 0x44, 0x00, + 0x21, 0xe4, 0xd6, 0x41, 0x46, 0xcf, 0x15, 0xe6, 0xd6, 0x01, 0x42, 0x12, + 0x00, 0xe8, 0xd6, 0x41, 0x44, 0x38, 0xd6, 0xe5, 0xd6, 0x41, 0x42, 0x49, + 0x00, 0xf8, 0xd6, 0x41, 0x43, 0x94, 0x0f, 0xe3, 0xd6, 0x41, 0x44, 0x3f, + 0xe4, 0xe2, 0xd6, 0x41, 0x4f, 0x23, 0x39, 0xcd, 0x27, 0x00, 0x07, 0x41, + 0xc6, 0x01, 0xff, 0x08, 0xe4, 0x05, 0x6d, 0x06, 0x5d, 0x07, 0x01, 0xff, + 0xe1, 0x1e, 0xd5, 0x01, 0xe2, 0x1f, 0xd5, 0x01, 0xe3, 0x20, 0xd5, 0x01, + 0xe4, 0x21, 0xd5, 0x01, 0xe5, 0x22, 0xd5, 0x01, 0xe6, 0x23, 0xd5, 0x01, + 0xe7, 0x24, 0xd5, 0x01, 0xe8, 0x25, 0xd5, 0x01, 0xe9, 0x26, 0xd5, 0x01, + 0xea, 0x27, 0xd5, 0x01, 0xeb, 0x28, 0xd5, 0x01, 0xec, 0x29, 0xd5, 0x01, + 0xed, 0x2a, 0xd5, 0x01, 0xee, 0x2b, 0xd5, 0x01, 0xef, 0x2c, 0xd5, 0x01, + 0xf0, 0x2d, 0xd5, 0x01, 0xf1, 0x2e, 0xd5, 0x01, 0xf2, 0x2f, 0xd5, 0x01, + 0xf3, 0x30, 0xd5, 0x01, 0xf4, 0x31, 0xd5, 0x01, 0xf5, 0x32, 0xd5, 0x01, + 0xf6, 0x33, 0xd5, 0x01, 0xf7, 0x34, 0xd5, 0x01, 0xf8, 0x35, 0xd5, 0x01, + 0xf9, 0x36, 0xd5, 0x01, 0xfa, 0x37, 0xd5, 0x41, 0xe1, 0x04, 0xd5, 0x01, + 0xe2, 0x05, 0xd5, 0x01, 0xe4, 0x07, 0xd5, 0x01, 0xe5, 0x08, 0xd5, 0x01, + 0xe6, 0x09, 0xd5, 0x01, 0xe7, 0x0a, 0xd5, 0x01, 0xea, 0x0d, 0xd5, 0x01, + 0xeb, 0x0e, 0xd5, 0x01, 0xec, 0x0f, 0xd5, 0x01, 0xed, 0x10, 0xd5, 0x01, + 0xee, 0x11, 0xd5, 0x01, 0xef, 0x12, 0xd5, 0x01, 0xf0, 0x13, 0xd5, 0x01, + 0xf1, 0x14, 0xd5, 0x01, 0xf3, 0x16, 0xd5, 0x01, 0xf4, 0x17, 0xd5, 0x01, + 0xf5, 0x18, 0xd5, 0x01, 0xf6, 0x19, 0xd5, 0x01, 0xf7, 0x1a, 0xd5, 0x01, + 0xf8, 0x1b, 0xd5, 0x01, 0xf9, 0x1c, 0xd5, 0x41, 0x08, 0xe4, 0x05, 0xb3, + 0x01, 0x06, 0xef, 0x06, 0x6d, 0x06, 0x5d, 0x07, 0x01, 0xff, 0xe1, 0x52, + 0xd5, 0x01, 0xe2, 0x53, 0xd5, 0x01, 0xe3, 0x54, 0xd5, 0x01, 0xe4, 0x55, + 0xd5, 0x01, 0xe5, 0x56, 0xd5, 0x01, 0xe6, 0x57, 0xd5, 0x01, 0xe7, 0x58, + 0xd5, 0x01, 0xe8, 0x59, 0xd5, 0x01, 0xe9, 0x5a, 0xd5, 0x01, 0xea, 0x5b, + 0xd5, 0x01, 0xeb, 0x5c, 0xd5, 0x01, 0xec, 0x5d, 0xd5, 0x01, 0xed, 0x5e, + 0xd5, 0x01, 0xee, 0x5f, 0xd5, 0x01, 0xef, 0x60, 0xd5, 0x01, 0xf0, 0x61, + 0xd5, 0x01, 0xf1, 0x62, 0xd5, 0x01, 0xf2, 0x63, 0xd5, 0x01, 0xf3, 0x64, + 0xd5, 0x01, 0xf4, 0x65, 0xd5, 0x01, 0xf5, 0x66, 0xd5, 0x01, 0xf6, 0x67, + 0xd5, 0x01, 0xf7, 0x68, 0xd5, 0x01, 0xf8, 0x69, 0xd5, 0x01, 0xf9, 0x6a, + 0xd5, 0x01, 0xfa, 0x6b, 0xd5, 0x41, 0x45, 0x12, 0x0b, 0xe0, 0xd7, 0x01, + 0xa6, 0x2e, 0x44, 0xcf, 0x2a, 0xe1, 0xd7, 0x01, 0x43, 0x0e, 0x0b, 0xd9, + 0xd7, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, 0xd8, 0xd7, 0x41, + 0x44, 0x25, 0x01, 0xdb, 0xd7, 0x01, 0x42, 0x15, 0x02, 0xda, 0xd7, 0x41, + 0x44, 0xc9, 0x1d, 0xdf, 0xd7, 0x01, 0x42, 0x01, 0x26, 0xde, 0xd7, 0x41, + 0x43, 0xd2, 0x05, 0xdd, 0xd7, 0x01, 0x43, 0xf6, 0x06, 0xdc, 0xd7, 0x41, + 0xe1, 0x38, 0xd5, 0x01, 0xe2, 0x39, 0xd5, 0x01, 0xe4, 0x3b, 0xd5, 0x01, + 0xe5, 0x3c, 0xd5, 0x01, 0xe6, 0x3d, 0xd5, 0x01, 0xe7, 0x3e, 0xd5, 0x01, + 0xe9, 0x40, 0xd5, 0x01, 0xea, 0x41, 0xd5, 0x01, 0xeb, 0x42, 0xd5, 0x01, + 0xec, 0x43, 0xd5, 0x01, 0xed, 0x44, 0xd5, 0x01, 0xef, 0x46, 0xd5, 0x01, + 0xf3, 0x4a, 0xd5, 0x01, 0xf4, 0x4b, 0xd5, 0x01, 0xf5, 0x4c, 0xd5, 0x01, + 0xf6, 0x4d, 0xd5, 0x01, 0xf7, 0x4e, 0xd5, 0x01, 0xf8, 0x4f, 0xd5, 0x01, + 0xf9, 0x50, 0xd5, 0x41, 0x08, 0xe4, 0x05, 0xcc, 0x0b, 0x06, 0xef, 0x06, + 0x85, 0x0b, 0x4e, 0xce, 0x15, 0xdc, 0xd6, 0x01, 0x08, 0x40, 0xc6, 0xa1, + 0x09, 0x07, 0x0b, 0xd2, 0xb0, 0x04, 0x4c, 0x93, 0x90, 0xde, 0xd6, 0x01, + 0x45, 0xe9, 0xe8, 0xc1, 0xd6, 0x01, 0xb0, 0x8f, 0x04, 0x4a, 0x41, 0xb0, + 0xe0, 0xd6, 0x01, 0xb3, 0x06, 0x4c, 0xc7, 0x95, 0xdd, 0xd6, 0x41, 0x06, + 0x75, 0x06, 0xa3, 0x02, 0x05, 0x5e, 0x07, 0x01, 0xff, 0xe1, 0x1a, 0xd4, + 0x81, 0x92, 0x02, 0xe2, 0x1b, 0xd4, 0x81, 0x86, 0x02, 0xe3, 0x1c, 0xd4, + 0x81, 0xfa, 0x01, 0xe4, 0x1d, 0xd4, 0x81, 0xe8, 0x01, 0xe5, 0x1e, 0xd4, + 0x81, 0xd6, 0x01, 0xe6, 0x1f, 0xd4, 0x81, 0xca, 0x01, 0xe7, 0x20, 0xd4, + 0x81, 0xbe, 0x01, 0xe8, 0x21, 0xd4, 0x01, 0xe9, 0x22, 0xd4, 0x81, 0xae, + 0x01, 0xea, 0x23, 0xd4, 0x01, 0xeb, 0x24, 0xd4, 0x81, 0x9e, 0x01, 0xec, + 0x25, 0xd4, 0x81, 0x92, 0x01, 0xed, 0x26, 0xd4, 0x81, 0x88, 0x01, 0xee, + 0x27, 0xd4, 0x81, 0x7f, 0xef, 0x28, 0xd4, 0x81, 0x6b, 0xf0, 0x29, 0xd4, + 0x81, 0x56, 0xf1, 0x2a, 0xd4, 0x01, 0xf2, 0x2b, 0xd4, 0x81, 0x47, 0xf3, + 0x2c, 0xd4, 0x81, 0x3c, 0xf4, 0x2d, 0xd4, 0x81, 0x2b, 0xf5, 0x2e, 0xd4, + 0x81, 0x20, 0xf6, 0x2f, 0xd4, 0x01, 0xf7, 0x30, 0xd4, 0x01, 0xf8, 0x31, + 0xd4, 0x81, 0x0f, 0xf9, 0x32, 0xd4, 0x01, 0xfa, 0x33, 0xd4, 0xc1, 0x00, + 0x43, 0x94, 0x0f, 0xc7, 0xd6, 0x41, 0xe9, 0xcf, 0xd6, 0x41, 0x46, 0xcf, + 0x15, 0xd6, 0xd6, 0x41, 0x42, 0x5f, 0x24, 0xd5, 0xd6, 0x01, 0x44, 0xc8, + 0x95, 0xc9, 0xd6, 0x41, 0x44, 0xbf, 0x1f, 0xd4, 0xd6, 0x41, 0x42, 0x0b, + 0x00, 0xd2, 0xd6, 0x41, 0x42, 0x49, 0x00, 0xd7, 0xd6, 0x01, 0xe9, 0xd1, + 0xd6, 0x01, 0x42, 0x5a, 0x03, 0xd9, 0xd6, 0x41, 0xad, 0x01, 0xff, 0x43, + 0xce, 0x05, 0xda, 0xd6, 0x01, 0x45, 0x4a, 0xe7, 0xd0, 0xd6, 0x41, 0xf5, + 0xce, 0xd6, 0x41, 0xf5, 0xcd, 0xd6, 0x41, 0x44, 0x18, 0xe8, 0xcc, 0xd6, + 0x41, 0x44, 0x94, 0x90, 0xcb, 0xd6, 0x41, 0x43, 0x1b, 0x05, 0xca, 0xd6, + 0x41, 0x44, 0x00, 0x21, 0xc4, 0xd6, 0x41, 0x4a, 0x19, 0x9c, 0xd3, 0xd6, + 0x41, 0x46, 0xcf, 0x15, 0xc6, 0xd6, 0x01, 0x42, 0x12, 0x00, 0xc8, 0xd6, + 0x41, 0x44, 0x38, 0xd6, 0xc5, 0xd6, 0x01, 0x46, 0x2b, 0x58, 0xcb, 0xd7, + 0x41, 0x42, 0x49, 0x00, 0xd8, 0xd6, 0x41, 0x43, 0x94, 0x0f, 0xc3, 0xd6, + 0x41, 0x44, 0x3f, 0xe4, 0xc2, 0xd6, 0x41, 0x08, 0xe4, 0x05, 0x6d, 0x06, + 0x5d, 0x07, 0x01, 0xff, 0xe1, 0xea, 0xd4, 0x01, 0xe2, 0xeb, 0xd4, 0x01, + 0xe3, 0xec, 0xd4, 0x01, 0xe4, 0xed, 0xd4, 0x01, 0xe5, 0xee, 0xd4, 0x01, + 0xe6, 0xef, 0xd4, 0x01, 0xe7, 0xf0, 0xd4, 0x01, 0xe8, 0xf1, 0xd4, 0x01, + 0xe9, 0xf2, 0xd4, 0x01, 0xea, 0xf3, 0xd4, 0x01, 0xeb, 0xf4, 0xd4, 0x01, + 0xec, 0xf5, 0xd4, 0x01, 0xed, 0xf6, 0xd4, 0x01, 0xee, 0xf7, 0xd4, 0x01, + 0xef, 0xf8, 0xd4, 0x01, 0xf0, 0xf9, 0xd4, 0x01, 0xf1, 0xfa, 0xd4, 0x01, + 0xf2, 0xfb, 0xd4, 0x01, 0xf3, 0xfc, 0xd4, 0x01, 0xf4, 0xfd, 0xd4, 0x01, + 0xf5, 0xfe, 0xd4, 0x01, 0xf6, 0xff, 0xd4, 0x01, 0xf7, 0x00, 0xd5, 0x01, + 0xf8, 0x01, 0xd5, 0x01, 0xf9, 0x02, 0xd5, 0x01, 0xfa, 0x03, 0xd5, 0x41, + 0xe1, 0xd0, 0xd4, 0x01, 0xe2, 0xd1, 0xd4, 0x01, 0xe3, 0xd2, 0xd4, 0x01, + 0xe4, 0xd3, 0xd4, 0x01, 0xe5, 0xd4, 0xd4, 0x01, 0xe6, 0xd5, 0xd4, 0x01, + 0xe7, 0xd6, 0xd4, 0x01, 0xe8, 0xd7, 0xd4, 0x01, 0xe9, 0xd8, 0xd4, 0x01, + 0xea, 0xd9, 0xd4, 0x01, 0xeb, 0xda, 0xd4, 0x01, 0xec, 0xdb, 0xd4, 0x01, + 0xed, 0xdc, 0xd4, 0x01, 0xee, 0xdd, 0xd4, 0x01, 0xef, 0xde, 0xd4, 0x01, + 0xf0, 0xdf, 0xd4, 0x01, 0xf1, 0xe0, 0xd4, 0x01, 0xf2, 0xe1, 0xd4, 0x01, + 0xf3, 0xe2, 0xd4, 0x01, 0xf4, 0xe3, 0xd4, 0x01, 0xf5, 0xe4, 0xd4, 0x01, + 0xf6, 0xe5, 0xd4, 0x01, 0xf7, 0xe6, 0xd4, 0x01, 0xf8, 0xe7, 0xd4, 0x01, + 0xf9, 0xe8, 0xd4, 0x01, 0xfa, 0xe9, 0xd4, 0x41, 0x53, 0x4e, 0x48, 0xdb, + 0xd6, 0x01, 0x49, 0x93, 0xb9, 0xdf, 0xd6, 0x01, 0x48, 0x5b, 0xac, 0xe1, + 0xd6, 0x41, 0x08, 0xe4, 0x05, 0xcf, 0x02, 0x4e, 0xce, 0x15, 0x50, 0xd7, + 0x01, 0x4c, 0x93, 0x90, 0x52, 0xd7, 0x01, 0x45, 0xe9, 0xe8, 0x35, 0xd7, + 0x01, 0xb0, 0xa8, 0x02, 0x4a, 0x41, 0xb0, 0x54, 0xd7, 0x01, 0x06, 0x5d, + 0x07, 0x06, 0x4c, 0xc7, 0x95, 0x51, 0xd7, 0x41, 0xe1, 0x82, 0xd4, 0x81, + 0x8c, 0x02, 0xe2, 0x83, 0xd4, 0x81, 0x80, 0x02, 0xe3, 0x84, 0xd4, 0x81, + 0xf4, 0x01, 0xe4, 0x85, 0xd4, 0x81, 0xe8, 0x01, 0xe5, 0x86, 0xd4, 0x81, + 0xd6, 0x01, 0xe6, 0x87, 0xd4, 0x81, 0xca, 0x01, 0xe7, 0x88, 0xd4, 0x81, + 0xbe, 0x01, 0xe8, 0x89, 0xd4, 0x01, 0xe9, 0x8a, 0xd4, 0x81, 0xae, 0x01, + 0xea, 0x8b, 0xd4, 0x01, 0xeb, 0x8c, 0xd4, 0x81, 0x9e, 0x01, 0xec, 0x8d, + 0xd4, 0x81, 0x92, 0x01, 0xed, 0x8e, 0xd4, 0x81, 0x88, 0x01, 0xee, 0x8f, + 0xd4, 0x81, 0x7f, 0xef, 0x90, 0xd4, 0x81, 0x6b, 0xf0, 0x91, 0xd4, 0x81, + 0x56, 0xf1, 0x92, 0xd4, 0x01, 0xf2, 0x93, 0xd4, 0x81, 0x47, 0xf3, 0x94, + 0xd4, 0x81, 0x3c, 0xf4, 0x95, 0xd4, 0x81, 0x2b, 0xf5, 0x96, 0xd4, 0x81, + 0x20, 0xf6, 0x97, 0xd4, 0x01, 0xf7, 0x98, 0xd4, 0x01, 0xf8, 0x99, 0xd4, + 0x81, 0x0f, 0xf9, 0x9a, 0xd4, 0x01, 0xfa, 0x9b, 0xd4, 0xc1, 0x00, 0x43, + 0x94, 0x0f, 0x3b, 0xd7, 0x41, 0xe9, 0x43, 0xd7, 0x41, 0x46, 0xcf, 0x15, + 0x4a, 0xd7, 0x41, 0x42, 0x5f, 0x24, 0x49, 0xd7, 0x01, 0x44, 0xc8, 0x95, + 0x3d, 0xd7, 0x41, 0x44, 0xbf, 0x1f, 0x48, 0xd7, 0x41, 0x42, 0x0b, 0x00, + 0x46, 0xd7, 0x41, 0x42, 0x49, 0x00, 0x4b, 0xd7, 0x01, 0xe9, 0x45, 0xd7, + 0x01, 0x42, 0x5a, 0x03, 0x4d, 0xd7, 0x41, 0xad, 0x01, 0xff, 0x43, 0xce, + 0x05, 0x4e, 0xd7, 0x01, 0x45, 0x4a, 0xe7, 0x44, 0xd7, 0x41, 0xf5, 0x42, + 0xd7, 0x41, 0xf5, 0x41, 0xd7, 0x41, 0x44, 0x18, 0xe8, 0x40, 0xd7, 0x41, + 0x44, 0x94, 0x90, 0x3f, 0xd7, 0x41, 0x43, 0x1b, 0x05, 0x3e, 0xd7, 0x41, + 0x44, 0x00, 0x21, 0x38, 0xd7, 0x41, 0x4a, 0x19, 0x9c, 0x47, 0xd7, 0x41, + 0x46, 0xcf, 0x15, 0x3a, 0xd7, 0x01, 0x42, 0x12, 0x00, 0x3c, 0xd7, 0x41, + 0x44, 0x38, 0xd6, 0x39, 0xd7, 0x41, 0x42, 0x49, 0x00, 0x4c, 0xd7, 0x41, + 0x43, 0x94, 0x0f, 0x37, 0xd7, 0x41, 0x44, 0x3f, 0xe4, 0x36, 0xd7, 0x41, + 0x53, 0x4e, 0x48, 0x4f, 0xd7, 0x01, 0x49, 0x93, 0xb9, 0x53, 0xd7, 0x01, + 0x48, 0x5b, 0xac, 0x55, 0xd7, 0x41, 0xe1, 0x68, 0xd4, 0x81, 0x8c, 0x02, + 0xe2, 0x69, 0xd4, 0x81, 0x80, 0x02, 0xe3, 0x6a, 0xd4, 0x81, 0xf4, 0x01, + 0xe4, 0x6b, 0xd4, 0x81, 0xe8, 0x01, 0xe5, 0x6c, 0xd4, 0x81, 0xd6, 0x01, + 0xe6, 0x6d, 0xd4, 0x01, 0xe7, 0x6e, 0xd4, 0x81, 0xc6, 0x01, 0xe8, 0x6f, + 0xd4, 0x01, 0xe9, 0x70, 0xd4, 0x81, 0xb6, 0x01, 0xea, 0x71, 0xd4, 0x01, + 0xeb, 0x72, 0xd4, 0x81, 0xa6, 0x01, 0xec, 0x73, 0xd4, 0x81, 0x9a, 0x01, + 0xed, 0x74, 0xd4, 0x81, 0x90, 0x01, 0xee, 0x75, 0xd4, 0x81, 0x86, 0x01, + 0xef, 0x76, 0xd4, 0x81, 0x72, 0xf0, 0x77, 0xd4, 0x81, 0x5d, 0xf1, 0x78, + 0xd4, 0x01, 0xf2, 0x79, 0xd4, 0x81, 0x4e, 0xf3, 0x7a, 0xd4, 0x81, 0x43, + 0xf4, 0x7b, 0xd4, 0x81, 0x2b, 0xf5, 0x7c, 0xd4, 0x81, 0x20, 0xf6, 0x7d, + 0xd4, 0x01, 0xf7, 0x7e, 0xd4, 0x01, 0xf8, 0x7f, 0xd4, 0x81, 0x0f, 0xf9, + 0x80, 0xd4, 0x01, 0xfa, 0x81, 0xd4, 0xc1, 0x00, 0x43, 0x94, 0x0f, 0x21, + 0xd7, 0x41, 0xe9, 0x29, 0xd7, 0x41, 0x46, 0xcf, 0x15, 0x30, 0xd7, 0x41, + 0x42, 0x5f, 0x24, 0x2f, 0xd7, 0x01, 0x44, 0xc8, 0x95, 0x23, 0xd7, 0xc1, + 0x00, 0x47, 0x15, 0x08, 0x2d, 0xd7, 0x41, 0x44, 0xbf, 0x1f, 0x2e, 0xd7, + 0x41, 0x42, 0x0b, 0x00, 0x2c, 0xd7, 0x41, 0x42, 0x49, 0x00, 0x31, 0xd7, + 0x01, 0xe9, 0x2b, 0xd7, 0x01, 0x42, 0x5a, 0x03, 0x33, 0xd7, 0x41, 0xad, + 0x01, 0xff, 0x43, 0xce, 0x05, 0x34, 0xd7, 0x01, 0x45, 0x4a, 0xe7, 0x2a, + 0xd7, 0x41, 0xf5, 0x28, 0xd7, 0x41, 0xf5, 0x27, 0xd7, 0x41, 0x44, 0x18, + 0xe8, 0x26, 0xd7, 0x41, 0x44, 0x94, 0x90, 0x25, 0xd7, 0x41, 0x43, 0x1b, + 0x05, 0x24, 0xd7, 0x41, 0x44, 0x00, 0x21, 0x1e, 0xd7, 0x41, 0x46, 0xcf, + 0x15, 0x20, 0xd7, 0x01, 0x42, 0x12, 0x00, 0x22, 0xd7, 0x41, 0x44, 0x38, + 0xd6, 0x1f, 0xd7, 0x41, 0x42, 0x49, 0x00, 0x32, 0xd7, 0x41, 0x43, 0x94, + 0x0f, 0x1d, 0xd7, 0x41, 0x44, 0x3f, 0xe4, 0x1c, 0xd7, 0x41, 0x08, 0xe4, + 0x05, 0x6d, 0x06, 0x5d, 0x07, 0x01, 0xff, 0xe1, 0x86, 0xd5, 0x01, 0xe2, + 0x87, 0xd5, 0x01, 0xe3, 0x88, 0xd5, 0x01, 0xe4, 0x89, 0xd5, 0x01, 0xe5, + 0x8a, 0xd5, 0x01, 0xe6, 0x8b, 0xd5, 0x01, 0xe7, 0x8c, 0xd5, 0x01, 0xe8, + 0x8d, 0xd5, 0x01, 0xe9, 0x8e, 0xd5, 0x01, 0xea, 0x8f, 0xd5, 0x01, 0xeb, + 0x90, 0xd5, 0x01, 0xec, 0x91, 0xd5, 0x01, 0xed, 0x92, 0xd5, 0x01, 0xee, + 0x93, 0xd5, 0x01, 0xef, 0x94, 0xd5, 0x01, 0xf0, 0x95, 0xd5, 0x01, 0xf1, + 0x96, 0xd5, 0x01, 0xf2, 0x97, 0xd5, 0x01, 0xf3, 0x98, 0xd5, 0x01, 0xf4, + 0x99, 0xd5, 0x01, 0xf5, 0x9a, 0xd5, 0x01, 0xf6, 0x9b, 0xd5, 0x01, 0xf7, + 0x9c, 0xd5, 0x01, 0xf8, 0x9d, 0xd5, 0x01, 0xf9, 0x9e, 0xd5, 0x01, 0xfa, + 0x9f, 0xd5, 0x41, 0xe1, 0x6c, 0xd5, 0x01, 0xe2, 0x6d, 0xd5, 0x01, 0xe3, + 0x6e, 0xd5, 0x01, 0xe4, 0x6f, 0xd5, 0x01, 0xe5, 0x70, 0xd5, 0x01, 0xe6, + 0x71, 0xd5, 0x01, 0xe7, 0x72, 0xd5, 0x01, 0xe8, 0x73, 0xd5, 0x01, 0xe9, + 0x74, 0xd5, 0x01, 0xea, 0x75, 0xd5, 0x01, 0xeb, 0x76, 0xd5, 0x01, 0xec, + 0x77, 0xd5, 0x01, 0xed, 0x78, 0xd5, 0x01, 0xee, 0x79, 0xd5, 0x01, 0xef, + 0x7a, 0xd5, 0x01, 0xf0, 0x7b, 0xd5, 0x01, 0xf1, 0x7c, 0xd5, 0x01, 0xf2, + 0x7d, 0xd5, 0x01, 0xf3, 0x7e, 0xd5, 0x01, 0xf4, 0x7f, 0xd5, 0x01, 0xf5, + 0x80, 0xd5, 0x01, 0xf6, 0x81, 0xd5, 0x01, 0xf7, 0x82, 0xd5, 0x01, 0xf8, + 0x83, 0xd5, 0x01, 0xf9, 0x84, 0xd5, 0x01, 0xfa, 0x85, 0xd5, 0x41, 0x45, + 0x12, 0x0b, 0xd6, 0xd7, 0x01, 0xa6, 0x2e, 0x44, 0xcf, 0x2a, 0xd7, 0xd7, + 0x01, 0x43, 0x0e, 0x0b, 0xcf, 0xd7, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, + 0x43, 0x1e, 0xce, 0xd7, 0x41, 0x44, 0x25, 0x01, 0xd1, 0xd7, 0x01, 0x42, + 0x15, 0x02, 0xd0, 0xd7, 0x41, 0x44, 0xc9, 0x1d, 0xd5, 0xd7, 0x01, 0x42, + 0x01, 0x26, 0xd4, 0xd7, 0x41, 0x43, 0xd2, 0x05, 0xd3, 0xd7, 0x01, 0x43, + 0xf6, 0x06, 0xd2, 0xd7, 0x41, 0xe1, 0x00, 0xd4, 0x81, 0x92, 0x02, 0xe2, + 0x01, 0xd4, 0x81, 0x86, 0x02, 0xe3, 0x02, 0xd4, 0x81, 0xfa, 0x01, 0xe4, + 0x03, 0xd4, 0x81, 0xe8, 0x01, 0xe5, 0x04, 0xd4, 0x81, 0xd6, 0x01, 0xe6, + 0x05, 0xd4, 0x01, 0xe7, 0x06, 0xd4, 0x81, 0xc6, 0x01, 0xe8, 0x07, 0xd4, + 0x01, 0xe9, 0x08, 0xd4, 0x81, 0xb6, 0x01, 0xea, 0x09, 0xd4, 0x01, 0xeb, + 0x0a, 0xd4, 0x81, 0xa6, 0x01, 0xec, 0x0b, 0xd4, 0x81, 0x9a, 0x01, 0xed, + 0x0c, 0xd4, 0x81, 0x90, 0x01, 0xee, 0x0d, 0xd4, 0x81, 0x86, 0x01, 0xef, + 0x0e, 0xd4, 0x81, 0x72, 0xf0, 0x0f, 0xd4, 0x81, 0x5d, 0xf1, 0x10, 0xd4, + 0x01, 0xf2, 0x11, 0xd4, 0x81, 0x4e, 0xf3, 0x12, 0xd4, 0x81, 0x43, 0xf4, + 0x13, 0xd4, 0x81, 0x2b, 0xf5, 0x14, 0xd4, 0x81, 0x20, 0xf6, 0x15, 0xd4, + 0x01, 0xf7, 0x16, 0xd4, 0x01, 0xf8, 0x17, 0xd4, 0x81, 0x0f, 0xf9, 0x18, + 0xd4, 0x01, 0xfa, 0x19, 0xd4, 0xc1, 0x00, 0x43, 0x94, 0x0f, 0xad, 0xd6, + 0x41, 0xe9, 0xb5, 0xd6, 0x41, 0x46, 0xcf, 0x15, 0xbc, 0xd6, 0x41, 0x42, + 0x5f, 0x24, 0xbb, 0xd6, 0x01, 0x44, 0xc8, 0x95, 0xaf, 0xd6, 0xc1, 0x00, + 0x47, 0x15, 0x08, 0xb9, 0xd6, 0x41, 0x44, 0xbf, 0x1f, 0xba, 0xd6, 0x41, + 0x42, 0x0b, 0x00, 0xb8, 0xd6, 0x41, 0x42, 0x49, 0x00, 0xbd, 0xd6, 0x01, + 0xe9, 0xb7, 0xd6, 0x01, 0x42, 0x5a, 0x03, 0xbf, 0xd6, 0x41, 0xad, 0x01, + 0xff, 0x43, 0xce, 0x05, 0xc0, 0xd6, 0x01, 0x45, 0x4a, 0xe7, 0xb6, 0xd6, + 0x41, 0xf5, 0xb4, 0xd6, 0x41, 0xf5, 0xb3, 0xd6, 0x41, 0x44, 0x18, 0xe8, + 0xb2, 0xd6, 0x41, 0x44, 0x94, 0x90, 0xb1, 0xd6, 0x41, 0x43, 0x1b, 0x05, + 0xb0, 0xd6, 0x41, 0x44, 0x00, 0x21, 0xaa, 0xd6, 0x41, 0x46, 0xcf, 0x15, + 0xac, 0xd6, 0x01, 0x42, 0x12, 0x00, 0xae, 0xd6, 0x41, 0x44, 0x38, 0xd6, + 0xab, 0xd6, 0x01, 0x46, 0x2b, 0x58, 0xca, 0xd7, 0x41, 0x42, 0x49, 0x00, + 0xbe, 0xd6, 0x41, 0x43, 0x94, 0x0f, 0xa9, 0xd6, 0x41, 0x44, 0x3f, 0xe4, + 0xa8, 0xd6, 0x41, 0x0b, 0x16, 0x99, 0x12, 0x58, 0xde, 0x27, 0xba, 0x00, + 0x00, 0x4d, 0xcd, 0x84, 0xad, 0xf1, 0x01, 0x46, 0x34, 0xcf, 0x3c, 0x30, + 0x40, 0x06, 0xef, 0x06, 0x82, 0x03, 0x07, 0xec, 0x05, 0x6c, 0xb2, 0x5e, + 0x05, 0x5a, 0x03, 0x3c, 0xb6, 0x01, 0xff, 0x45, 0xe4, 0x23, 0x45, 0x1d, + 0x01, 0x0a, 0x41, 0x77, 0x01, 0xff, 0xa1, 0x20, 0xe5, 0x3a, 0x1d, 0x01, + 0xe9, 0x32, 0x1d, 0x81, 0x13, 0xef, 0x3d, 0x1d, 0x01, 0xf5, 0x34, 0x1d, + 0x81, 0x06, 0x49, 0x22, 0xc1, 0x36, 0x1d, 0x41, 0xf5, 0x35, 0x1d, 0x41, + 0xe9, 0x33, 0x1d, 0x41, 0xe1, 0x31, 0x1d, 0x01, 0xe9, 0x3c, 0x1d, 0x01, + 0xf5, 0x3f, 0x1d, 0x41, 0x48, 0x3c, 0x16, 0x40, 0x1d, 0x01, 0x46, 0xd7, + 0x23, 0x43, 0x1d, 0x01, 0x47, 0x71, 0xd1, 0x44, 0x1d, 0x01, 0x45, 0x3f, + 0x3f, 0x42, 0x1d, 0x01, 0x47, 0xea, 0x4b, 0x41, 0x1d, 0x41, 0x46, 0x68, + 0xd9, 0x47, 0x1d, 0x01, 0x44, 0x92, 0xc5, 0x46, 0x1d, 0x41, 0xe1, 0x00, + 0x1d, 0x81, 0x80, 0x02, 0xa2, 0xf3, 0x01, 0xa3, 0xe6, 0x01, 0xa4, 0xcd, + 0x01, 0xe5, 0x06, 0x1d, 0x01, 0xa7, 0xbc, 0x01, 0x42, 0x22, 0x00, 0x2c, + 0x1d, 0x01, 0xe9, 0x02, 0x1d, 0x81, 0xac, 0x01, 0xaa, 0x99, 0x01, 0xab, + 0x86, 0x01, 0xac, 0x7a, 0x42, 0x6c, 0x00, 0x24, 0x1d, 0x01, 0xae, 0x5c, + 0xef, 0x09, 0x1d, 0x01, 0xb0, 0x4c, 0x42, 0x71, 0x00, 0x26, 0x1d, 0x01, + 0xb3, 0x34, 0xb4, 0x15, 0xf5, 0x04, 0x1d, 0x81, 0x0c, 0x42, 0xf5, 0x0a, + 0x28, 0x1d, 0x01, 0x42, 0xbc, 0x22, 0x25, 0x1d, 0x41, 0xf5, 0x05, 0x1d, + 0x41, 0xe1, 0x1b, 0x1d, 0x01, 0x42, 0x22, 0x00, 0x1c, 0x1d, 0x01, 0x42, + 0x71, 0x00, 0x30, 0x1d, 0x01, 0xb4, 0x01, 0xff, 0xe1, 0x16, 0x1d, 0x01, + 0x42, 0x22, 0x00, 0x17, 0x1d, 0x41, 0xe1, 0x2b, 0x1d, 0x01, 0x42, 0x22, + 0x00, 0x29, 0x1d, 0x01, 0x42, 0x40, 0x06, 0x2a, 0x1d, 0x41, 0xe1, 0x20, + 0x1d, 0x01, 0x42, 0x22, 0x00, 0x21, 0x1d, 0x41, 0xe1, 0x1f, 0x1d, 0x01, + 0x42, 0x24, 0x02, 0x10, 0x1d, 0x01, 0x42, 0x2a, 0x05, 0x1a, 0x1d, 0x01, + 0x42, 0xbc, 0x22, 0x15, 0x1d, 0x41, 0xe1, 0x27, 0x1d, 0x01, 0x42, 0x74, + 0x00, 0x2d, 0x1d, 0x41, 0xe1, 0x0c, 0x1d, 0x01, 0x42, 0x22, 0x00, 0x0d, + 0x1d, 0x01, 0x43, 0xfb, 0x20, 0x2e, 0x1d, 0x41, 0xe1, 0x13, 0x1d, 0x01, + 0x42, 0x22, 0x00, 0x14, 0x1d, 0x01, 0x43, 0xa6, 0x35, 0x2f, 0x1d, 0x41, + 0xe9, 0x03, 0x1d, 0x41, 0xe1, 0x0e, 0x1d, 0x01, 0x42, 0x22, 0x00, 0x0f, + 0x1d, 0x41, 0xe1, 0x1d, 0x1d, 0x01, 0xa4, 0x06, 0x42, 0x22, 0x00, 0x1e, + 0x1d, 0x41, 0xe1, 0x18, 0x1d, 0x01, 0x42, 0x22, 0x00, 0x19, 0x1d, 0x41, + 0xe1, 0x11, 0x1d, 0x01, 0x42, 0x22, 0x00, 0x12, 0x1d, 0x41, 0xe1, 0x22, + 0x1d, 0x01, 0x42, 0x22, 0x00, 0x23, 0x1d, 0x41, 0xe1, 0x01, 0x1d, 0x01, + 0xe9, 0x08, 0x1d, 0x01, 0xf5, 0x0b, 0x1d, 0x41, 0x45, 0x12, 0x0b, 0x58, + 0x1d, 0x01, 0xa6, 0x2e, 0x44, 0xcf, 0x2a, 0x59, 0x1d, 0x01, 0x43, 0x0e, + 0x0b, 0x51, 0x1d, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, 0x50, + 0x1d, 0x41, 0x44, 0x25, 0x01, 0x53, 0x1d, 0x01, 0x42, 0x15, 0x02, 0x52, + 0x1d, 0x41, 0x44, 0xc9, 0x1d, 0x57, 0x1d, 0x01, 0x42, 0x01, 0x26, 0x56, + 0x1d, 0x41, 0x43, 0xd2, 0x05, 0x55, 0x1d, 0x01, 0x43, 0xf6, 0x06, 0x54, + 0x1d, 0x41, 0x44, 0x45, 0x61, 0x87, 0xfa, 0x01, 0x05, 0x52, 0x4a, 0x0c, + 0x4c, 0x6b, 0x94, 0xad, 0x26, 0x00, 0x51, 0x6f, 0x5e, 0x4b, 0xf9, 0x41, + 0x49, 0xa0, 0x1b, 0x70, 0x1c, 0x01, 0x07, 0xec, 0x05, 0xe9, 0x01, 0x49, + 0xee, 0xbb, 0x71, 0x1c, 0x01, 0xb3, 0x1b, 0x0b, 0x40, 0x77, 0x01, 0xff, + 0x42, 0x80, 0x12, 0xb0, 0x1c, 0x01, 0xe5, 0xb3, 0x1c, 0x01, 0xe9, 0xb1, + 0x1c, 0x01, 0xef, 0xb4, 0x1c, 0x01, 0xf5, 0xb2, 0x1c, 0x41, 0x04, 0x5b, + 0x03, 0xb5, 0x01, 0x10, 0xd6, 0x67, 0x01, 0xff, 0xe1, 0xaf, 0x1c, 0x01, + 0x42, 0x16, 0x00, 0xa0, 0x1c, 0x01, 0xa3, 0x99, 0x01, 0xa4, 0x8c, 0x01, + 0x42, 0x24, 0x02, 0x94, 0x1c, 0x01, 0x42, 0x22, 0x00, 0xae, 0x1c, 0x01, + 0x42, 0x56, 0x19, 0x98, 0x1c, 0x01, 0xab, 0x6e, 0x42, 0x74, 0x00, 0xab, + 0x1c, 0x01, 0x42, 0x6c, 0x00, 0xa1, 0x1c, 0x01, 0xae, 0x50, 0xb0, 0x44, + 0x42, 0x71, 0x00, 0xaa, 0x1c, 0x01, 0xb3, 0x32, 0xb4, 0x19, 0x42, 0xa9, + 0x01, 0xa5, 0x1c, 0x01, 0x42, 0xbc, 0x22, 0xa9, 0x1c, 0x01, 0xba, 0x01, + 0xff, 0xe1, 0xa7, 0x1c, 0x01, 0x42, 0x22, 0x00, 0xa6, 0x1c, 0x41, 0xe1, + 0x9a, 0x1c, 0x01, 0x42, 0x22, 0x00, 0x9b, 0x1c, 0x01, 0xb3, 0x01, 0xff, + 0xe1, 0xa2, 0x1c, 0x01, 0x42, 0x22, 0x00, 0xa3, 0x1c, 0x41, 0xe1, 0xad, + 0x1c, 0x01, 0x42, 0x22, 0x00, 0xac, 0x1c, 0x41, 0xe1, 0x9e, 0x1c, 0x01, + 0x42, 0x22, 0x00, 0x9f, 0x1c, 0x41, 0xe1, 0x9d, 0x1c, 0x01, 0x42, 0x24, + 0x02, 0x95, 0x1c, 0x01, 0x42, 0xbc, 0x22, 0x99, 0x1c, 0x41, 0xe1, 0x92, + 0x1c, 0x01, 0x42, 0x22, 0x00, 0x93, 0x1c, 0x41, 0xe1, 0x9c, 0x1c, 0x01, + 0x42, 0x59, 0x00, 0xa4, 0x1c, 0x41, 0xe1, 0x96, 0x1c, 0x01, 0x42, 0x22, + 0x00, 0x97, 0x1c, 0x41, 0x48, 0x3c, 0x16, 0xb5, 0x1c, 0x01, 0x4b, 0xd7, + 0x23, 0xb6, 0x1c, 0x41, 0x42, 0xcf, 0x25, 0x88, 0x1c, 0x01, 0xe1, 0x8f, + 0x1c, 0x01, 0x42, 0x16, 0x00, 0x80, 0x1c, 0x01, 0xa3, 0x99, 0x01, 0xa4, + 0x8c, 0x01, 0x42, 0x24, 0x02, 0x74, 0x1c, 0x01, 0x42, 0x22, 0x00, 0x8e, + 0x1c, 0x01, 0x42, 0x56, 0x19, 0x78, 0x1c, 0x01, 0xab, 0x6e, 0x42, 0x74, + 0x00, 0x8b, 0x1c, 0x01, 0x42, 0x6c, 0x00, 0x81, 0x1c, 0x01, 0xae, 0x50, + 0xb0, 0x44, 0x42, 0x71, 0x00, 0x8a, 0x1c, 0x01, 0xb3, 0x32, 0xb4, 0x19, + 0x42, 0xa9, 0x01, 0x85, 0x1c, 0x01, 0x42, 0xbc, 0x22, 0x89, 0x1c, 0x01, + 0xba, 0x01, 0xff, 0xe1, 0x87, 0x1c, 0x01, 0x42, 0x22, 0x00, 0x86, 0x1c, + 0x41, 0xe1, 0x7a, 0x1c, 0x01, 0x42, 0x22, 0x00, 0x7b, 0x1c, 0x01, 0xb3, + 0x01, 0xff, 0xe1, 0x82, 0x1c, 0x01, 0x42, 0x22, 0x00, 0x83, 0x1c, 0x41, + 0xe1, 0x8d, 0x1c, 0x01, 0x42, 0x22, 0x00, 0x8c, 0x1c, 0x41, 0xe1, 0x7e, + 0x1c, 0x01, 0x42, 0x22, 0x00, 0x7f, 0x1c, 0x41, 0xe1, 0x7d, 0x1c, 0x01, + 0x42, 0x24, 0x02, 0x75, 0x1c, 0x01, 0x42, 0xbc, 0x22, 0x79, 0x1c, 0x41, + 0xe1, 0x72, 0x1c, 0x01, 0x42, 0x22, 0x00, 0x73, 0x1c, 0x41, 0xe1, 0x7c, + 0x1c, 0x01, 0x42, 0x59, 0x00, 0x84, 0x1c, 0x41, 0xe1, 0x76, 0x1c, 0x01, + 0x42, 0x22, 0x00, 0x77, 0x1c, 0x41, 0x56, 0x4b, 0x32, 0xef, 0x26, 0x00, + 0x47, 0xc1, 0xd2, 0x41, 0xf3, 0x41, 0x80, 0xa5, 0x04, 0x47, 0xa1, 0x6c, + 0xbc, 0x20, 0x00, 0x05, 0x6f, 0xe5, 0x87, 0x03, 0x42, 0x06, 0x14, 0x6d, + 0xf9, 0x01, 0x08, 0xe0, 0xc6, 0x12, 0x46, 0xc2, 0xdf, 0x5e, 0xf4, 0x01, + 0x4e, 0x99, 0x7c, 0x70, 0xf5, 0x01, 0x4e, 0xbf, 0x7d, 0xbd, 0xf9, 0x41, + 0x12, 0x0b, 0x50, 0xda, 0x02, 0x07, 0xec, 0x05, 0x5d, 0x07, 0xff, 0x39, + 0x37, 0x0c, 0x6d, 0x16, 0x06, 0x47, 0xdf, 0xd5, 0xc8, 0x0a, 0x41, 0x02, + 0x3b, 0x01, 0x18, 0x47, 0xe8, 0x36, 0xf1, 0x0a, 0x01, 0x4b, 0xc2, 0x9e, + 0xf6, 0x0a, 0x01, 0x44, 0x31, 0x13, 0xf0, 0x0a, 0x01, 0x48, 0x1f, 0x0a, + 0xf5, 0x0a, 0x41, 0xf4, 0xf4, 0x0a, 0x81, 0x06, 0x53, 0x05, 0x4e, 0xf2, + 0x0a, 0x41, 0x4b, 0x0d, 0x4e, 0xf3, 0x0a, 0x41, 0x44, 0x80, 0x11, 0xec, + 0x0a, 0x01, 0x43, 0x0e, 0x0b, 0xeb, 0x0a, 0x81, 0x0f, 0xb4, 0x01, 0xff, + 0x42, 0x92, 0x01, 0xed, 0x0a, 0x01, 0x45, 0x7f, 0x2c, 0xee, 0x0a, 0x41, + 0x48, 0x70, 0x11, 0xef, 0x0a, 0x41, 0xa1, 0xe4, 0x01, 0xa2, 0xd5, 0x01, + 0xa4, 0xc6, 0x01, 0x42, 0x0c, 0x1a, 0xdc, 0x0a, 0x01, 0xa7, 0xb1, 0x01, + 0x42, 0xb0, 0x01, 0xc6, 0x0a, 0x81, 0xa3, 0x01, 0xaa, 0x94, 0x01, 0xab, + 0x85, 0x01, 0x46, 0x94, 0xdd, 0xd3, 0x0a, 0x01, 0x43, 0xb4, 0x05, 0xd6, + 0x0a, 0x01, 0x43, 0xdc, 0x22, 0xd7, 0x0a, 0x01, 0x42, 0x6f, 0x02, 0xdb, + 0x0a, 0x01, 0xb1, 0x5f, 0x44, 0x76, 0x66, 0xe1, 0x0a, 0x01, 0xb3, 0x3d, + 0xb4, 0x29, 0x43, 0x8a, 0x8a, 0xc7, 0x0a, 0x01, 0xb8, 0x15, 0x44, 0xa1, + 0x52, 0xcf, 0x0a, 0x01, 0xba, 0x01, 0xff, 0x44, 0x1e, 0x4a, 0xc9, 0x0a, + 0x01, 0x45, 0xf0, 0xe6, 0xca, 0x0a, 0x41, 0x43, 0x83, 0x10, 0xd1, 0x0a, + 0x01, 0x43, 0x67, 0x36, 0xdf, 0x0a, 0x41, 0x42, 0xb7, 0x2d, 0xe4, 0x0a, + 0x01, 0x43, 0xda, 0x25, 0xce, 0x0a, 0x01, 0x46, 0x4a, 0xdc, 0xd5, 0x0a, + 0x41, 0xa1, 0x0c, 0x43, 0x7a, 0x16, 0xe2, 0x0a, 0x01, 0x44, 0x73, 0x4a, + 0xe3, 0x0a, 0x41, 0x43, 0xad, 0xea, 0xdd, 0x0a, 0x01, 0x44, 0x49, 0xe4, + 0xd8, 0x0a, 0x41, 0x44, 0x51, 0xf0, 0xe0, 0x0a, 0x01, 0x43, 0x67, 0x36, + 0xde, 0x0a, 0x41, 0x43, 0x83, 0x10, 0xd0, 0x0a, 0x01, 0x44, 0xd7, 0xe7, + 0xd2, 0x0a, 0x41, 0x44, 0x1e, 0x4a, 0xcb, 0x0a, 0x01, 0x45, 0xf0, 0xe6, + 0xcc, 0x0a, 0x41, 0x42, 0x53, 0x00, 0xcd, 0x0a, 0x41, 0x45, 0xff, 0xe6, + 0xc4, 0x0a, 0x01, 0x44, 0xde, 0xaa, 0xc3, 0x0a, 0x41, 0x45, 0x24, 0x4a, + 0xc5, 0x0a, 0x01, 0x46, 0x4a, 0xdc, 0xd4, 0x0a, 0x41, 0x43, 0xda, 0x25, + 0xc1, 0x0a, 0x01, 0x44, 0x61, 0xaa, 0xc2, 0x0a, 0x41, 0x44, 0x1e, 0x4a, + 0xda, 0x0a, 0x01, 0x44, 0x18, 0x3d, 0xc0, 0x0a, 0x01, 0x43, 0x7e, 0x1a, + 0xd9, 0x0a, 0x41, 0x45, 0x5c, 0x00, 0xe5, 0x0a, 0x01, 0x45, 0x20, 0x07, + 0xe6, 0x0a, 0x41, 0x50, 0xd6, 0x60, 0x59, 0x08, 0x00, 0x4f, 0x89, 0x6d, + 0x5b, 0x08, 0x00, 0x07, 0xec, 0x05, 0x0c, 0x4b, 0x07, 0x0c, 0x5e, 0x08, + 0x00, 0x51, 0x4c, 0x5f, 0x5a, 0x08, 0x40, 0xa1, 0x22, 0x48, 0x40, 0xc5, + 0x56, 0x08, 0x00, 0x45, 0xd7, 0xe6, 0x40, 0x08, 0x00, 0xa9, 0x0c, 0x43, + 0xf7, 0xa5, 0x57, 0x08, 0x00, 0x47, 0x41, 0xc5, 0x45, 0x08, 0x40, 0xee, + 0x4f, 0x08, 0x00, 0xf4, 0x47, 0x08, 0x40, 0xe2, 0x41, 0x08, 0x00, 0xe4, + 0x43, 0x08, 0x00, 0xe7, 0x42, 0x08, 0x00, 0xe8, 0x44, 0x08, 0x00, 0x42, + 0x9e, 0x01, 0x58, 0x08, 0x00, 0xeb, 0x4a, 0x08, 0x80, 0x32, 0xec, 0x4b, + 0x08, 0x00, 0xed, 0x4c, 0x08, 0x00, 0xee, 0x4d, 0x08, 0x00, 0xf0, 0x50, + 0x08, 0x00, 0xf1, 0x52, 0x08, 0x00, 0xf2, 0x53, 0x08, 0x00, 0xf3, 0x4e, + 0x08, 0x80, 0x0d, 0xf4, 0x55, 0x08, 0x80, 0x04, 0xfa, 0x46, 0x08, 0x40, + 0xf4, 0x48, 0x08, 0x40, 0xe8, 0x54, 0x08, 0x00, 0xfa, 0x51, 0x08, 0x40, + 0x42, 0x40, 0x06, 0x49, 0x08, 0x40, 0x57, 0x16, 0x2d, 0x6b, 0xf4, 0x01, + 0x47, 0x36, 0xd0, 0x7a, 0xf5, 0x01, 0x03, 0xe1, 0x05, 0x11, 0x05, 0x51, + 0x00, 0x01, 0xff, 0x4a, 0xfb, 0xaa, 0x72, 0xf4, 0x01, 0x46, 0xb8, 0xe0, + 0x73, 0xf4, 0x41, 0x58, 0x96, 0x27, 0x74, 0xf5, 0x01, 0x46, 0xbe, 0xe0, + 0x35, 0xf9, 0x41, 0x07, 0xed, 0xb5, 0x27, 0x02, 0x60, 0x00, 0x06, 0x4a, + 0xc7, 0xb1, 0x20, 0x27, 0x40, 0x4f, 0x0f, 0x27, 0xa5, 0x26, 0x00, 0x44, + 0x5a, 0x03, 0x42, 0x26, 0x00, 0x0c, 0xd9, 0x3c, 0x01, 0xff, 0x58, 0x06, + 0x27, 0xa7, 0x26, 0x00, 0x44, 0x5a, 0x03, 0xa6, 0x26, 0x40, 0x4e, 0x17, + 0x76, 0x57, 0x0d, 0x00, 0xa4, 0x91, 0x05, 0x09, 0x1e, 0x5a, 0xb0, 0x04, + 0x07, 0xec, 0x05, 0xad, 0x01, 0x07, 0xff, 0x39, 0x92, 0x01, 0x05, 0x5a, + 0x03, 0x4e, 0x0b, 0x40, 0x77, 0x01, 0xff, 0xa1, 0x3b, 0xe5, 0x46, 0x0d, + 0x80, 0x32, 0xe9, 0x3f, 0x0d, 0x80, 0x29, 0xef, 0x4a, 0x0d, 0x80, 0x20, + 0xf5, 0x41, 0x0d, 0x80, 0x17, 0x08, 0x22, 0xc1, 0x01, 0xff, 0xec, 0x62, + 0x0d, 0x80, 0x09, 0xf2, 0x43, 0x0d, 0xc0, 0x00, 0xf2, 0x44, 0x0d, 0x40, + 0xec, 0x63, 0x0d, 0x40, 0xf5, 0x42, 0x0d, 0x40, 0xef, 0x4b, 0x0d, 0x40, + 0xe9, 0x40, 0x0d, 0x40, 0xe5, 0x47, 0x0d, 0x40, 0xe1, 0x3e, 0x0d, 0x00, + 0xe9, 0x48, 0x0d, 0x00, 0xf5, 0x4c, 0x0d, 0x40, 0xa1, 0x32, 0xa3, 0x1e, + 0x44, 0x7d, 0x10, 0x4f, 0x0d, 0x00, 0xb6, 0x01, 0xff, 0x52, 0x73, 0x51, + 0x3b, 0x0d, 0x00, 0xa9, 0x01, 0xff, 0x44, 0xe5, 0x23, 0x4d, 0x0d, 0x00, + 0x45, 0xec, 0x4b, 0x03, 0x0d, 0x40, 0x4a, 0xd8, 0x23, 0x01, 0x0d, 0x00, + 0x4e, 0xc5, 0x78, 0x3c, 0x0d, 0x00, 0x57, 0x33, 0x16, 0x00, 0x0d, 0x40, + 0x47, 0x3d, 0x16, 0x02, 0x0d, 0x00, 0x47, 0xaf, 0x88, 0x3d, 0x0d, 0x40, + 0x04, 0x0e, 0x0b, 0x06, 0x43, 0xdb, 0x06, 0x70, 0x0d, 0x40, 0x47, 0x71, + 0x11, 0x71, 0x0d, 0x00, 0x48, 0x40, 0x5e, 0x72, 0x0d, 0x40, 0xe1, 0x05, + 0x0d, 0x80, 0xe6, 0x02, 0xa2, 0xd9, 0x02, 0xa3, 0x9d, 0x02, 0xa4, 0xfe, + 0x01, 0xe5, 0x0e, 0x0d, 0x80, 0xf4, 0x01, 0xa7, 0xe7, 0x01, 0x42, 0x22, + 0x00, 0x39, 0x0d, 0x00, 0xe9, 0x07, 0x0d, 0x80, 0xd7, 0x01, 0xaa, 0xca, + 0x01, 0xab, 0xbd, 0x01, 0xac, 0xa9, 0x01, 0x42, 0x6c, 0x00, 0x2e, 0x0d, + 0x00, 0xae, 0x84, 0x01, 0xef, 0x12, 0x0d, 0x80, 0x7b, 0xb0, 0x6f, 0xb2, + 0x63, 0xb3, 0x51, 0xb4, 0x32, 0xf5, 0x09, 0x0d, 0x80, 0x29, 0xb6, 0x06, + 0x42, 0xbc, 0x22, 0x2f, 0x0d, 0x40, 0xe1, 0x35, 0x0d, 0x00, 0x4d, 0x6a, + 0x82, 0x04, 0x0d, 0x00, 0x07, 0x23, 0xc1, 0x01, 0xff, 0xec, 0x0c, 0x0d, + 0x80, 0x09, 0xf2, 0x0b, 0x0d, 0xc0, 0x00, 0xf2, 0x60, 0x0d, 0x40, 0xec, + 0x61, 0x0d, 0x40, 0xf5, 0x0a, 0x0d, 0x40, 0xe1, 0x24, 0x0d, 0x00, 0x42, + 0x22, 0x00, 0x25, 0x0d, 0x00, 0xb4, 0x01, 0xff, 0xe1, 0x1f, 0x0d, 0x00, + 0x42, 0x22, 0x00, 0x20, 0x0d, 0x00, 0x42, 0x12, 0x00, 0x3a, 0x0d, 0x40, + 0xe1, 0x38, 0x0d, 0x00, 0x42, 0x22, 0x00, 0x36, 0x0d, 0x00, 0x42, 0x40, + 0x06, 0x37, 0x0d, 0x40, 0xe1, 0x30, 0x0d, 0x00, 0x42, 0x71, 0x00, 0x31, + 0x0d, 0x40, 0xe1, 0x2a, 0x0d, 0x00, 0x42, 0x22, 0x00, 0x2b, 0x0d, 0x40, + 0xef, 0x13, 0x0d, 0x40, 0xe1, 0x28, 0x0d, 0x00, 0x42, 0x24, 0x02, 0x19, + 0x0d, 0x00, 0xae, 0x06, 0x42, 0xbc, 0x22, 0x1e, 0x0d, 0x40, 0xe1, 0x23, + 0x0d, 0x00, 0x42, 0x2a, 0x05, 0x29, 0x0d, 0x40, 0xe1, 0x32, 0x0d, 0x00, + 0xac, 0x01, 0xff, 0xe1, 0x33, 0x0d, 0x00, 0x42, 0x74, 0x00, 0x34, 0x0d, + 0x40, 0xe1, 0x15, 0x0d, 0x00, 0x42, 0x22, 0x00, 0x16, 0x0d, 0x40, 0xe1, + 0x1c, 0x0d, 0x00, 0x42, 0x22, 0x00, 0x1d, 0x0d, 0x40, 0xe9, 0x08, 0x0d, + 0x40, 0xe1, 0x17, 0x0d, 0x00, 0x42, 0x22, 0x00, 0x18, 0x0d, 0x40, 0xe5, + 0x0f, 0x0d, 0x40, 0xe1, 0x26, 0x0d, 0x00, 0xa4, 0x0c, 0x42, 0x22, 0x00, + 0x27, 0x0d, 0x00, 0x47, 0x26, 0xd4, 0x4e, 0x0d, 0x40, 0xe1, 0x21, 0x0d, + 0x00, 0x42, 0x22, 0x00, 0x22, 0x0d, 0x40, 0xe1, 0x1a, 0x0d, 0x00, 0xa8, + 0x01, 0xff, 0xe1, 0x1b, 0x0d, 0x00, 0x05, 0x24, 0xc2, 0x01, 0xff, 0xeb, + 0x7f, 0x0d, 0x00, 0xec, 0x7d, 0x0d, 0x80, 0x17, 0xed, 0x54, 0x0d, 0x00, + 0xee, 0x7b, 0x0d, 0x80, 0x0a, 0x42, 0xcf, 0x00, 0x7c, 0x0d, 0x00, 0xf9, + 0x55, 0x0d, 0x40, 0xee, 0x7a, 0x0d, 0x40, 0xec, 0x7e, 0x0d, 0xc0, 0x00, + 0xec, 0x56, 0x0d, 0x40, 0xe1, 0x2c, 0x0d, 0x00, 0x42, 0x22, 0x00, 0x2d, + 0x0d, 0x40, 0xe1, 0x06, 0x0d, 0x00, 0xe9, 0x10, 0x0d, 0x00, 0x49, 0x6d, + 0xbe, 0x5f, 0x0d, 0x00, 0xf5, 0x14, 0x0d, 0x40, 0x04, 0x0e, 0x0b, 0x1d, + 0x06, 0x24, 0x01, 0x01, 0xff, 0x4a, 0xd9, 0xa9, 0x5a, 0x0d, 0x00, 0x48, + 0x2a, 0x01, 0x75, 0x0d, 0x00, 0x4a, 0x13, 0xb1, 0x78, 0x0d, 0x00, 0x4a, + 0x3f, 0xb2, 0x5d, 0x0d, 0x40, 0x46, 0x12, 0x0b, 0x77, 0x0d, 0x00, 0xa6, + 0x27, 0x44, 0x22, 0x00, 0x74, 0x0d, 0x00, 0x58, 0x36, 0x2a, 0x58, 0x0d, + 0x00, 0x47, 0x2a, 0x01, 0x73, 0x0d, 0x00, 0x49, 0x00, 0x26, 0x76, 0x0d, + 0x00, 0xb4, 0x01, 0xff, 0x44, 0x82, 0x1b, 0x5c, 0x0d, 0x00, 0x48, 0xd5, + 0x25, 0x5b, 0x0d, 0x40, 0x44, 0x42, 0xaf, 0x5e, 0x0d, 0x00, 0x47, 0x18, + 0xd4, 0x59, 0x0d, 0x40, 0x48, 0xb8, 0xc3, 0x79, 0x0d, 0x00, 0x05, 0xf0, + 0x06, 0x01, 0xff, 0x45, 0x12, 0x0b, 0x6e, 0x0d, 0x00, 0xa6, 0x2e, 0x44, + 0xcf, 0x2a, 0x6f, 0x0d, 0x00, 0x43, 0x0e, 0x0b, 0x67, 0x0d, 0x00, 0xb3, + 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, 0x66, 0x0d, 0x40, 0x44, 0x25, 0x01, + 0x69, 0x0d, 0x00, 0x42, 0x15, 0x02, 0x68, 0x0d, 0x40, 0x44, 0xc9, 0x1d, + 0x6d, 0x0d, 0x00, 0x42, 0x01, 0x26, 0x6c, 0x0d, 0x40, 0x43, 0xd2, 0x05, + 0x6b, 0x0d, 0x00, 0x43, 0xf6, 0x06, 0x6a, 0x0d, 0x40, 0x05, 0x70, 0xe4, + 0x06, 0x45, 0xe7, 0xe5, 0x7c, 0xf7, 0x41, 0x45, 0xb6, 0xd9, 0xf2, 0x1e, + 0x01, 0x4e, 0x4b, 0x77, 0xf8, 0x1e, 0x01, 0x07, 0xec, 0x05, 0x1b, 0x4a, + 0x6f, 0xaf, 0xf7, 0x1e, 0x01, 0x0b, 0x40, 0x77, 0x01, 0xff, 0xe5, 0xf5, + 0x1e, 0x01, 0xe9, 0xf3, 0x1e, 0x01, 0xef, 0xf6, 0x1e, 0x01, 0xf5, 0xf4, + 0x1e, 0x41, 0xe1, 0xf1, 0x1e, 0x01, 0x42, 0x16, 0x00, 0xe4, 0x1e, 0x01, + 0x42, 0x37, 0x00, 0xe9, 0x1e, 0x01, 0x42, 0xf0, 0x10, 0xe7, 0x1e, 0x01, + 0x42, 0x24, 0x02, 0xe1, 0x1e, 0x01, 0x42, 0x56, 0x19, 0xea, 0x1e, 0x01, + 0x42, 0x1b, 0x02, 0xe0, 0x1e, 0x01, 0x42, 0x74, 0x00, 0xee, 0x1e, 0x01, + 0x42, 0x6c, 0x00, 0xe5, 0x1e, 0x01, 0xae, 0x24, 0x42, 0xbb, 0x09, 0xe3, + 0x1e, 0x01, 0x42, 0x71, 0x00, 0xed, 0x1e, 0x01, 0x42, 0x40, 0x06, 0xf0, + 0x1e, 0x01, 0x42, 0x12, 0x00, 0xe6, 0x1e, 0x01, 0x42, 0xf5, 0x0a, 0xef, + 0x1e, 0x01, 0x42, 0xbc, 0x22, 0xec, 0x1e, 0x41, 0xe1, 0xe8, 0x1e, 0x01, + 0x42, 0x24, 0x02, 0xe2, 0x1e, 0x01, 0x42, 0xbc, 0x22, 0xeb, 0x1e, 0x41, + 0x06, 0x9e, 0xd9, 0xe7, 0x02, 0x0a, 0x3b, 0xac, 0x01, 0xff, 0x46, 0x04, + 0xda, 0x28, 0xf0, 0x01, 0x02, 0x16, 0x00, 0xcb, 0x02, 0x4d, 0x66, 0x81, + 0x25, 0xf0, 0x01, 0xa5, 0xa2, 0x02, 0xa6, 0xec, 0x01, 0x4c, 0x4f, 0x8f, + 0x05, 0xf0, 0x01, 0x45, 0x0e, 0xa5, 0x2a, 0xf0, 0x01, 0xae, 0xbe, 0x01, + 0xaf, 0x9c, 0x01, 0x44, 0x19, 0xf2, 0x22, 0xf0, 0x01, 0x4a, 0x0f, 0xb0, + 0x04, 0xf0, 0x01, 0xb3, 0x4a, 0xb4, 0x15, 0xb7, 0x01, 0xff, 0x48, 0xd8, + 0xc5, 0x02, 0xf0, 0x01, 0x4b, 0xf4, 0x9c, 0x06, 0xf0, 0x01, 0x45, 0xa9, + 0x0a, 0x29, 0xf0, 0x41, 0x08, 0xc8, 0xc6, 0x1a, 0x06, 0x4e, 0xe1, 0x01, + 0xff, 0x47, 0x5d, 0xcf, 0x11, 0xf0, 0x01, 0xa3, 0x01, 0xff, 0x49, 0x78, + 0xb9, 0x08, 0xf0, 0x01, 0x46, 0x98, 0x43, 0x1a, 0xf0, 0x41, 0x47, 0x5d, + 0xcf, 0x12, 0xf0, 0x01, 0xa3, 0x01, 0xff, 0x49, 0x78, 0xb9, 0x09, 0xf0, + 0x01, 0x46, 0x98, 0x43, 0x1b, 0xf0, 0x41, 0x08, 0x00, 0xc6, 0x2b, 0x06, + 0x40, 0xdd, 0x12, 0x49, 0xa7, 0xbd, 0x01, 0xf0, 0x01, 0x45, 0xaa, 0x11, + 0x26, 0xf0, 0x01, 0x45, 0xcd, 0xeb, 0x27, 0xf0, 0x41, 0x47, 0x5d, 0xcf, + 0x15, 0xf0, 0x01, 0xa3, 0x01, 0xff, 0x49, 0x78, 0xb9, 0x0c, 0xf0, 0x01, + 0x46, 0x98, 0x43, 0x1e, 0xf0, 0x41, 0x47, 0x5d, 0xcf, 0x16, 0xf0, 0x01, + 0xa3, 0x01, 0xff, 0x49, 0x78, 0xb9, 0x0d, 0xf0, 0x01, 0x46, 0x98, 0x43, + 0x1f, 0xf0, 0x41, 0x06, 0xba, 0xc8, 0x06, 0x45, 0x38, 0xea, 0x23, 0xf0, + 0x41, 0x47, 0x5d, 0xcf, 0x10, 0xf0, 0x01, 0xa3, 0x01, 0xff, 0x49, 0x78, + 0xb9, 0x07, 0xf0, 0x01, 0x46, 0x98, 0x43, 0x19, 0xf0, 0x41, 0x07, 0xb9, + 0xc8, 0x06, 0x49, 0x7a, 0xbd, 0x03, 0xf0, 0x41, 0x47, 0x5d, 0xcf, 0x18, + 0xf0, 0x01, 0xa3, 0x01, 0xff, 0x49, 0x78, 0xb9, 0x0f, 0xf0, 0x01, 0x46, + 0x98, 0x43, 0x21, 0xf0, 0x41, 0x07, 0x19, 0xd2, 0x1a, 0x07, 0x2d, 0xd4, + 0x01, 0xff, 0x47, 0x5d, 0xcf, 0x13, 0xf0, 0x01, 0xa3, 0x01, 0xff, 0x49, + 0x78, 0xb9, 0x0a, 0xf0, 0x01, 0x46, 0x98, 0x43, 0x1c, 0xf0, 0x41, 0x47, + 0x5d, 0xcf, 0x14, 0xf0, 0x01, 0xa3, 0x01, 0xff, 0x49, 0x78, 0xb9, 0x0b, + 0xf0, 0x01, 0x46, 0x98, 0x43, 0x1d, 0xf0, 0x41, 0x48, 0xa0, 0xc3, 0x00, + 0xf0, 0x01, 0x08, 0x3e, 0xb8, 0x01, 0xff, 0x47, 0x5d, 0xcf, 0x17, 0xf0, + 0x01, 0xa3, 0x01, 0xff, 0x49, 0x78, 0xb9, 0x0e, 0xf0, 0x01, 0x46, 0x98, + 0x43, 0x20, 0xf0, 0x41, 0x42, 0x36, 0x01, 0x2b, 0xf0, 0x01, 0x44, 0x99, + 0x98, 0x24, 0xf0, 0x41, 0x51, 0xdc, 0x57, 0x74, 0x11, 0x01, 0xac, 0x0f, + 0xb3, 0x01, 0xff, 0x4b, 0xf9, 0x26, 0x75, 0x11, 0x01, 0x49, 0x23, 0xba, + 0x73, 0x11, 0x41, 0x06, 0xed, 0x05, 0x06, 0x4c, 0xdf, 0x8f, 0x76, 0x11, + 0x41, 0xe1, 0x50, 0x11, 0x01, 0xa2, 0xbc, 0x01, 0xa3, 0xaf, 0x01, 0xa4, + 0x96, 0x01, 0xe5, 0x53, 0x11, 0x01, 0xa7, 0x85, 0x01, 0x42, 0x22, 0x00, + 0x71, 0x11, 0x01, 0xe9, 0x51, 0x11, 0x01, 0xaa, 0x6f, 0xab, 0x63, 0x42, + 0x74, 0x00, 0x6e, 0x11, 0x01, 0x42, 0x6c, 0x00, 0x6c, 0x11, 0x01, 0xae, + 0x45, 0xef, 0x54, 0x11, 0x01, 0xb0, 0x35, 0xb2, 0x29, 0x42, 0x40, 0x06, + 0x70, 0x11, 0x01, 0xb4, 0x0a, 0xf5, 0x52, 0x11, 0x01, 0x42, 0xf5, 0x0a, + 0x6f, 0x11, 0x41, 0xe1, 0x63, 0x11, 0x01, 0x42, 0x22, 0x00, 0x64, 0x11, + 0x01, 0xb4, 0x01, 0xff, 0xe1, 0x5e, 0x11, 0x01, 0x42, 0x22, 0x00, 0x5f, + 0x11, 0x41, 0xe1, 0x6d, 0x11, 0x01, 0x42, 0x71, 0x00, 0x72, 0x11, 0x41, + 0xe1, 0x68, 0x11, 0x01, 0x42, 0x22, 0x00, 0x69, 0x11, 0x41, 0xe1, 0x67, + 0x11, 0x01, 0x42, 0x2a, 0x05, 0x62, 0x11, 0x01, 0x42, 0xbc, 0x22, 0x5d, + 0x11, 0x41, 0xe1, 0x55, 0x11, 0x01, 0x42, 0x22, 0x00, 0x56, 0x11, 0x41, + 0xe1, 0x5b, 0x11, 0x01, 0x42, 0x22, 0x00, 0x5c, 0x11, 0x41, 0xe1, 0x57, + 0x11, 0x01, 0x42, 0x22, 0x00, 0x58, 0x11, 0x41, 0xe1, 0x65, 0x11, 0x01, + 0xa4, 0x06, 0x42, 0x22, 0x00, 0x66, 0x11, 0x41, 0xe1, 0x60, 0x11, 0x01, + 0x42, 0x22, 0x00, 0x61, 0x11, 0x41, 0xe1, 0x59, 0x11, 0x01, 0x42, 0x22, + 0x00, 0x5a, 0x11, 0x41, 0xe1, 0x6a, 0x11, 0x01, 0x42, 0x22, 0x00, 0x6b, + 0x11, 0x41, 0xe5, 0xd9, 0xf9, 0x01, 0x47, 0xcc, 0xd1, 0x84, 0xfa, 0x01, + 0x43, 0xae, 0x2c, 0xf2, 0xf9, 0x41, 0x4d, 0x37, 0x7f, 0x14, 0x21, 0x00, + 0xa1, 0xfd, 0x40, 0xa5, 0xa3, 0x2b, 0xa9, 0xe6, 0x0c, 0x44, 0xb0, 0x00, + 0x99, 0xf9, 0x01, 0xaf, 0x9d, 0x02, 0xb5, 0x85, 0x02, 0xb9, 0x01, 0xff, + 0x0c, 0x4b, 0x8d, 0x82, 0x01, 0x05, 0xc7, 0x60, 0x06, 0x48, 0x2e, 0x29, + 0x25, 0xf9, 0x41, 0x07, 0xec, 0x05, 0x06, 0x4f, 0xec, 0x73, 0x3f, 0x09, + 0x41, 0xe1, 0x20, 0x09, 0x81, 0x65, 0xe2, 0x21, 0x09, 0x01, 0xe3, 0x39, + 0x09, 0x01, 0xe4, 0x23, 0x09, 0x01, 0xe5, 0x24, 0x09, 0x81, 0x50, 0xe6, + 0x31, 0x09, 0x01, 0xe7, 0x22, 0x09, 0x01, 0xe9, 0x26, 0x09, 0x01, 0xeb, + 0x28, 0x09, 0x01, 0xec, 0x29, 0x09, 0x81, 0x37, 0xed, 0x2a, 0x09, 0x01, + 0xee, 0x2b, 0x09, 0x81, 0x2a, 0xef, 0x2c, 0x09, 0x01, 0xf1, 0x32, 0x09, + 0x01, 0xf2, 0x2d, 0x09, 0x01, 0xf3, 0x33, 0x09, 0x81, 0x15, 0xf4, 0x2f, + 0x09, 0x81, 0x0c, 0xf5, 0x30, 0x09, 0x01, 0xf6, 0x25, 0x09, 0x01, 0xf9, + 0x27, 0x09, 0x41, 0xf4, 0x34, 0x09, 0x41, 0xf3, 0x2e, 0x09, 0x41, 0xee, + 0x38, 0x09, 0x41, 0xf9, 0x37, 0x09, 0x41, 0xee, 0x36, 0x09, 0x41, 0xee, + 0x35, 0x09, 0x41, 0xe1, 0x80, 0x02, 0x81, 0x72, 0xe2, 0x82, 0x02, 0x81, + 0x69, 0xe4, 0x85, 0x02, 0x01, 0xe5, 0x81, 0x02, 0x81, 0x5c, 0xe7, 0x84, + 0x02, 0x01, 0xe8, 0x9b, 0x02, 0x01, 0xe9, 0x86, 0x02, 0x01, 0xea, 0x8a, + 0x02, 0x01, 0xeb, 0x8b, 0x02, 0x81, 0x43, 0xec, 0x8d, 0x02, 0x01, 0xed, + 0x8e, 0x02, 0x81, 0x36, 0xee, 0x8f, 0x02, 0x81, 0x2d, 0xf0, 0x93, 0x02, + 0x01, 0xf1, 0x8c, 0x02, 0x01, 0xf2, 0x95, 0x02, 0x01, 0xf3, 0x96, 0x02, + 0x01, 0xf4, 0x97, 0x02, 0x81, 0x10, 0xf5, 0x92, 0x02, 0x01, 0xf7, 0x87, + 0x02, 0x01, 0xf8, 0x9c, 0x02, 0x01, 0xfa, 0x88, 0x02, 0x41, 0xe8, 0x89, + 0x02, 0x01, 0xf4, 0x98, 0x02, 0x41, 0xee, 0x91, 0x02, 0x41, 0xed, 0x90, + 0x02, 0x41, 0xeb, 0x94, 0x02, 0x41, 0xee, 0x9a, 0x02, 0x41, 0xe8, 0x83, + 0x02, 0x41, 0xee, 0x99, 0x02, 0x41, 0x45, 0xef, 0xe0, 0xf3, 0xf9, 0x01, + 0xae, 0x01, 0xff, 0x4a, 0xdb, 0xa7, 0x76, 0xf7, 0x01, 0x42, 0xbc, 0x11, + 0xc1, 0xfa, 0x41, 0x45, 0xde, 0xe4, 0x9e, 0xf9, 0x01, 0x42, 0x36, 0x01, + 0x12, 0xf5, 0x81, 0x9b, 0x0a, 0x03, 0x2d, 0x22, 0xef, 0x08, 0x46, 0xca, + 0xdd, 0x6d, 0xf3, 0x01, 0x03, 0xa2, 0x01, 0xac, 0x07, 0xb4, 0x97, 0x07, + 0x50, 0xe6, 0x67, 0x2d, 0xf6, 0x01, 0x03, 0x5f, 0x00, 0x80, 0x07, 0xb7, + 0x0d, 0x45, 0x4b, 0x0a, 0xca, 0x25, 0xc0, 0x00, 0x5b, 0xf0, 0x19, 0xe0, + 0x27, 0x40, 0x80, 0xc1, 0x06, 0x03, 0x16, 0x01, 0x01, 0xff, 0x4e, 0x41, + 0x76, 0x03, 0x27, 0x00, 0x07, 0x73, 0x02, 0x8a, 0x06, 0x52, 0xa9, 0x51, + 0x85, 0x25, 0x00, 0xa8, 0xc1, 0x05, 0x05, 0xc3, 0x00, 0xa0, 0x03, 0x07, + 0x7d, 0x02, 0xea, 0x02, 0x04, 0x0e, 0x0b, 0xd9, 0x02, 0x06, 0xc8, 0x00, + 0x30, 0x53, 0xfb, 0x4c, 0x87, 0x25, 0x00, 0xb4, 0x01, 0xff, 0x05, 0x25, + 0x01, 0x06, 0x5b, 0x35, 0x1d, 0x6f, 0xfb, 0x41, 0x4d, 0x01, 0x4d, 0x83, + 0x25, 0x00, 0x09, 0x2a, 0x01, 0x01, 0xff, 0x45, 0x33, 0x01, 0x86, 0x25, + 0x00, 0x56, 0x37, 0x35, 0xa5, 0xce, 0x01, 0x57, 0xdc, 0x30, 0xae, 0xce, + 0x41, 0x0f, 0x6d, 0x6b, 0xbe, 0x01, 0x4f, 0xd6, 0x6b, 0xd3, 0x27, 0x00, + 0x5a, 0xe4, 0x1f, 0x4f, 0x27, 0x00, 0x53, 0xfc, 0x25, 0x9f, 0xce, 0x01, + 0x46, 0x14, 0xdf, 0x0e, 0x27, 0x00, 0x03, 0x7c, 0x00, 0x38, 0x4d, 0x00, + 0x30, 0x07, 0xcc, 0x01, 0xb3, 0x19, 0xb4, 0x01, 0xff, 0x05, 0x1a, 0x01, + 0x06, 0x4d, 0x88, 0x7d, 0x3f, 0xcc, 0x41, 0x42, 0x68, 0x00, 0xff, 0x25, + 0x00, 0x51, 0xa2, 0x5e, 0x9e, 0xfb, 0x41, 0x5b, 0x19, 0x1b, 0x3e, 0x29, + 0x00, 0x0e, 0xa5, 0x02, 0x01, 0xff, 0x46, 0x12, 0x03, 0x3e, 0xf5, 0x01, + 0x46, 0xd6, 0x05, 0x51, 0x27, 0x40, 0x06, 0x7c, 0x0d, 0x06, 0x4b, 0x90, + 0x4c, 0x3a, 0xcc, 0x41, 0xa3, 0x2e, 0xa6, 0x20, 0x4d, 0xeb, 0x85, 0xb9, + 0xcc, 0x01, 0x4c, 0x97, 0x92, 0xad, 0xcc, 0x01, 0xb3, 0x06, 0x4a, 0xa9, + 0xb1, 0xb5, 0xcc, 0x41, 0x4b, 0x5c, 0x95, 0xab, 0xcc, 0x01, 0x4e, 0x57, + 0x73, 0xd5, 0xcc, 0x41, 0x53, 0x33, 0x29, 0xaf, 0xcc, 0x01, 0x4c, 0x14, + 0x83, 0xb1, 0xcc, 0x41, 0x05, 0x4b, 0x88, 0x06, 0x4b, 0xaf, 0x9d, 0xde, + 0x25, 0x40, 0x46, 0x2e, 0xda, 0xc9, 0xcc, 0x01, 0xab, 0x12, 0x44, 0xfd, + 0xf1, 0xd1, 0xcc, 0x01, 0x45, 0x52, 0xbe, 0xc1, 0xcc, 0x01, 0x44, 0x5d, + 0xf2, 0xc5, 0xcc, 0x41, 0x43, 0xa1, 0x01, 0xbd, 0xcc, 0x01, 0x45, 0x4e, + 0x09, 0xcd, 0xcc, 0x41, 0x06, 0x13, 0x01, 0x11, 0x1b, 0xf2, 0x1d, 0x01, + 0xff, 0x46, 0x73, 0x02, 0x41, 0xfb, 0x01, 0x45, 0xc8, 0x00, 0x42, 0xfb, + 0x41, 0x0a, 0x73, 0x02, 0x32, 0x08, 0x84, 0x02, 0x17, 0x15, 0xf8, 0x1d, + 0x01, 0xff, 0x46, 0x73, 0x02, 0x43, 0xfb, 0x01, 0x4c, 0x58, 0x0f, 0x46, + 0xfb, 0x01, 0x45, 0xc8, 0x00, 0x44, 0xfb, 0x41, 0x52, 0x8f, 0x53, 0x48, + 0xfb, 0x01, 0x06, 0x6d, 0x02, 0x01, 0xff, 0x46, 0x73, 0x02, 0x45, 0xfb, + 0x01, 0x4c, 0x58, 0x0f, 0x4a, 0xfb, 0x41, 0x52, 0x8f, 0x53, 0x47, 0xfb, + 0x01, 0x06, 0x6d, 0x02, 0x01, 0xff, 0x4c, 0x58, 0x0f, 0x49, 0xfb, 0x01, + 0x45, 0xc8, 0x00, 0x4b, 0xfb, 0x41, 0x4c, 0x12, 0x0b, 0x81, 0x25, 0x00, + 0x4d, 0x43, 0x1d, 0x82, 0x25, 0x40, 0x07, 0x73, 0x02, 0x21, 0x05, 0xc3, + 0x00, 0x11, 0x06, 0xc8, 0x00, 0x01, 0xff, 0x53, 0xfc, 0x25, 0x9b, 0xce, + 0x01, 0x4e, 0x87, 0x7d, 0x3b, 0xcc, 0x41, 0x53, 0xfc, 0x25, 0x98, 0xce, + 0x01, 0x4e, 0x87, 0x7d, 0x38, 0xcc, 0x41, 0x58, 0xa6, 0x29, 0x99, 0xce, + 0x01, 0x59, 0xf6, 0x25, 0x9a, 0xce, 0x41, 0xa2, 0xae, 0x01, 0x46, 0xb8, + 0xda, 0x8d, 0xf5, 0x01, 0x4c, 0x13, 0x8f, 0x8b, 0xf5, 0x01, 0x53, 0xfc, + 0x25, 0x9c, 0xce, 0x01, 0xb0, 0x8d, 0x01, 0x03, 0x7c, 0x00, 0x1f, 0x60, + 0x54, 0x10, 0x3f, 0x29, 0x00, 0xb4, 0x01, 0xff, 0x05, 0x1a, 0x01, 0x06, + 0x4d, 0x88, 0x7d, 0x3c, 0xcc, 0x41, 0x42, 0x68, 0x00, 0xfa, 0x25, 0x00, + 0x51, 0xa2, 0x5e, 0x9f, 0xfb, 0x41, 0x06, 0x7c, 0x0d, 0x06, 0x4b, 0x90, + 0x4c, 0x39, 0xcc, 0x41, 0xa3, 0x2e, 0xa6, 0x20, 0x4d, 0xeb, 0x85, 0xb8, + 0xcc, 0x01, 0x4c, 0x97, 0x92, 0xac, 0xcc, 0x01, 0xb3, 0x06, 0x4a, 0xa9, + 0xb1, 0xb4, 0xcc, 0x41, 0x4b, 0x5c, 0x95, 0xaa, 0xcc, 0x01, 0x4e, 0x57, + 0x73, 0xd4, 0xcc, 0x41, 0x53, 0x33, 0x29, 0xae, 0xcc, 0x01, 0x4c, 0x14, + 0x83, 0xb0, 0xcc, 0x41, 0x05, 0x4b, 0x88, 0x06, 0x4b, 0xaf, 0x9d, 0xdf, + 0x25, 0x40, 0x46, 0x2e, 0xda, 0xc8, 0xcc, 0x01, 0xab, 0x12, 0x44, 0xfd, + 0xf1, 0xd0, 0xcc, 0x01, 0x45, 0x52, 0xbe, 0xc0, 0xcc, 0x01, 0x44, 0x5d, + 0xf2, 0xc4, 0xcc, 0x41, 0x43, 0xa1, 0x01, 0xbc, 0xcc, 0x01, 0x45, 0x4e, + 0x09, 0xcc, 0xcc, 0x41, 0x49, 0xc7, 0xb5, 0x8c, 0xf5, 0x01, 0x45, 0x15, + 0xdf, 0x89, 0xf5, 0x41, 0x4c, 0x13, 0x8c, 0x8a, 0xf5, 0x01, 0x0e, 0x6e, + 0x6b, 0x01, 0xff, 0x1b, 0x78, 0x1c, 0x50, 0x06, 0x6d, 0x02, 0x01, 0xff, + 0x0a, 0x73, 0x02, 0x31, 0x08, 0x84, 0x02, 0x17, 0x15, 0x7d, 0x02, 0x01, + 0xff, 0x46, 0x73, 0x02, 0x3e, 0xfb, 0x01, 0x4c, 0x58, 0x0f, 0x51, 0xfb, + 0x01, 0x45, 0xc8, 0x00, 0x3f, 0xfb, 0x41, 0x06, 0x13, 0x01, 0x06, 0x52, + 0x3b, 0x56, 0x4d, 0xfb, 0x41, 0x46, 0x73, 0x02, 0x40, 0xfb, 0x01, 0x4c, + 0x58, 0x0f, 0x4f, 0xfb, 0x41, 0x06, 0x13, 0x01, 0x06, 0x52, 0x3b, 0x56, + 0x4c, 0xfb, 0x41, 0x4c, 0x58, 0x0f, 0x4e, 0xfb, 0x01, 0x45, 0xc8, 0x00, + 0x50, 0xfb, 0x41, 0x46, 0x73, 0x02, 0x3c, 0xfb, 0x01, 0x45, 0xc8, 0x00, + 0x3d, 0xfb, 0x41, 0x04, 0x23, 0x00, 0x06, 0x57, 0xf6, 0x2f, 0x05, 0xcc, + 0x41, 0x5b, 0x26, 0x1a, 0x01, 0xce, 0x01, 0x45, 0x33, 0x01, 0x84, 0x25, + 0x00, 0x46, 0x12, 0x03, 0xe1, 0x25, 0x00, 0x52, 0x27, 0x52, 0x04, 0xce, + 0x01, 0x54, 0x70, 0x43, 0xdb, 0x25, 0x00, 0x56, 0x37, 0x35, 0xa4, 0xce, + 0x01, 0x4c, 0x44, 0x04, 0x8f, 0xfb, 0x01, 0x57, 0xdc, 0x30, 0xaf, 0xce, + 0x01, 0x63, 0xcd, 0x0b, 0x13, 0xce, 0x41, 0x05, 0xc3, 0x00, 0x17, 0x51, + 0x3f, 0x1d, 0xe5, 0xfb, 0x01, 0x06, 0xc8, 0x00, 0x01, 0xff, 0x53, 0xfc, + 0x25, 0x9e, 0xce, 0x01, 0x4e, 0x87, 0x7d, 0x3e, 0xcc, 0x41, 0x53, 0xfc, + 0x25, 0x9d, 0xce, 0x01, 0x4e, 0x87, 0x7d, 0x3d, 0xcc, 0x41, 0x48, 0x3c, + 0x0d, 0x4e, 0x20, 0x00, 0xa2, 0x19, 0x5b, 0xe3, 0x1a, 0x1f, 0x30, 0x00, + 0x46, 0xed, 0x4f, 0x47, 0x2e, 0x80, 0x06, 0x44, 0xed, 0x07, 0x5f, 0x00, + 0x40, 0x49, 0x75, 0x3b, 0x48, 0x2e, 0x40, 0x46, 0xf8, 0xd9, 0xab, 0xfa, + 0x01, 0x50, 0xcb, 0x58, 0x05, 0xf5, 0x41, 0x45, 0x1d, 0xe7, 0xe9, 0xf3, + 0x01, 0x46, 0xec, 0x05, 0x8c, 0xf4, 0x41, 0x4b, 0x7f, 0x97, 0x74, 0xf7, + 0x01, 0x4a, 0xff, 0xab, 0xf4, 0xf9, 0x01, 0x42, 0xef, 0x02, 0xb7, 0xfa, + 0x41, 0xa4, 0xa3, 0x01, 0x04, 0xc3, 0x00, 0x55, 0x05, 0xc8, 0x00, 0x01, + 0xff, 0x45, 0xf4, 0x38, 0xdd, 0x27, 0x00, 0x06, 0xa9, 0x01, 0x01, 0xff, + 0x45, 0xce, 0x00, 0xf6, 0x27, 0x80, 0x23, 0x4c, 0x2f, 0x8e, 0xf9, 0x27, + 0x80, 0x16, 0x08, 0xc9, 0x02, 0x06, 0x4e, 0x7d, 0x7c, 0xff, 0x27, 0x40, + 0x5d, 0xf4, 0x14, 0xd2, 0xf8, 0x01, 0x5b, 0xe4, 0x1c, 0xd1, 0xf8, 0x41, + 0x49, 0x56, 0xb4, 0xfe, 0x27, 0x40, 0x80, 0x01, 0xff, 0x48, 0x57, 0xb4, + 0xfc, 0x27, 0x00, 0x59, 0x92, 0x25, 0xd0, 0xf8, 0x01, 0x49, 0xc3, 0xbf, + 0xd6, 0xf8, 0x01, 0x51, 0x90, 0x5f, 0xd7, 0xf8, 0x41, 0x80, 0x2b, 0x06, + 0xa9, 0x01, 0x01, 0xff, 0x45, 0xce, 0x00, 0xf5, 0x27, 0x80, 0x19, 0x4c, + 0x2f, 0x8e, 0xf8, 0x27, 0x80, 0x0c, 0x66, 0x25, 0x07, 0xd4, 0xf8, 0x01, + 0x4e, 0x7d, 0x7c, 0x33, 0x2b, 0x40, 0x49, 0x56, 0xb4, 0xfd, 0x27, 0x40, + 0x49, 0x56, 0xb4, 0xfb, 0x27, 0x40, 0x06, 0xc8, 0x00, 0x06, 0x44, 0xf5, + 0x38, 0xde, 0x27, 0x40, 0x45, 0xce, 0x00, 0xf7, 0x27, 0x80, 0x06, 0x4c, + 0x2f, 0x8e, 0xfa, 0x27, 0x40, 0x54, 0xd8, 0x3f, 0xd8, 0xf8, 0x41, 0x67, + 0xa6, 0x05, 0xe6, 0x2a, 0x00, 0x47, 0xc3, 0x32, 0xcc, 0x27, 0x00, 0x43, + 0x88, 0x1d, 0x98, 0xfa, 0x41, 0x06, 0x18, 0xd8, 0x7a, 0x03, 0x13, 0x00, + 0x01, 0xff, 0x43, 0x1a, 0x00, 0x27, 0x22, 0x80, 0x3c, 0x42, 0x0c, 0x00, + 0x28, 0x22, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x57, 0x24, 0x30, 0x59, 0x2a, + 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x02, 0x3b, 0x01, 0x0c, 0x4f, 0x10, + 0x6e, 0x5d, 0x2a, 0x00, 0x4b, 0x9e, 0x9f, 0x5b, 0x2a, 0x40, 0x47, 0x3c, + 0x1e, 0x52, 0x2a, 0x00, 0x05, 0x3d, 0x01, 0x01, 0xff, 0x47, 0xe6, 0x7f, + 0x62, 0x2a, 0x00, 0x48, 0xe3, 0x59, 0x63, 0x2a, 0x40, 0x06, 0x50, 0x00, + 0x01, 0xff, 0x02, 0x3b, 0x01, 0x12, 0x4f, 0x10, 0x6e, 0x5c, 0x2a, 0x00, + 0x4b, 0x9e, 0x9f, 0x5a, 0x2a, 0x00, 0x48, 0xe3, 0x59, 0x5f, 0x2a, 0x40, + 0x47, 0x3c, 0x1e, 0x51, 0x2a, 0x00, 0x05, 0x3d, 0x01, 0x01, 0xff, 0x47, + 0xe6, 0x7f, 0x5e, 0x2a, 0x00, 0x48, 0xe3, 0x59, 0x60, 0x2a, 0x40, 0x43, + 0x1a, 0x00, 0x16, 0xcc, 0x01, 0x46, 0x46, 0xda, 0x19, 0xcc, 0x81, 0x16, + 0x09, 0x5e, 0x23, 0x06, 0x42, 0x0c, 0x00, 0x15, 0xcc, 0x41, 0x46, 0xfe, + 0xdc, 0x17, 0xcc, 0x01, 0x46, 0x1e, 0x51, 0x18, 0xcc, 0x41, 0x54, 0x00, + 0x40, 0x1a, 0xcc, 0x41, 0x4d, 0xc6, 0x7f, 0x0f, 0xf5, 0x01, 0x0a, 0xd7, + 0xab, 0x01, 0xff, 0x43, 0x0e, 0x0b, 0x0e, 0x00, 0x00, 0x44, 0x43, 0x1e, + 0x0f, 0x00, 0x40, 0x43, 0x63, 0x09, 0x4e, 0x26, 0x00, 0xa7, 0x93, 0x1d, + 0xad, 0xd3, 0x19, 0xae, 0xdd, 0x02, 0x47, 0xe0, 0xd3, 0x81, 0xf9, 0x01, + 0x42, 0xcf, 0x15, 0xe2, 0xf5, 0x81, 0xc9, 0x02, 0x47, 0x85, 0x84, 0xa4, + 0x20, 0x00, 0x03, 0x53, 0x22, 0x0c, 0x51, 0x5d, 0x5f, 0xb6, 0x20, 0x00, + 0x44, 0xfa, 0x92, 0x8e, 0xf9, 0x41, 0x07, 0xec, 0x05, 0x11, 0x0c, 0x6d, + 0x16, 0x01, 0xff, 0x45, 0x13, 0x05, 0xfe, 0xa4, 0x00, 0x49, 0x81, 0x16, + 0xff, 0xa4, 0x40, 0xe1, 0xee, 0xa4, 0x80, 0x94, 0x02, 0x42, 0x16, 0x00, + 0xd0, 0xa4, 0x00, 0xa3, 0x81, 0x02, 0xa4, 0xf4, 0x01, 0xe5, 0xf0, 0xa4, + 0x80, 0xea, 0x01, 0x42, 0x0c, 0x08, 0xe9, 0xa4, 0x00, 0xa7, 0xd7, 0x01, + 0xa8, 0xca, 0x01, 0xe9, 0xf2, 0xa4, 0x00, 0x42, 0x56, 0x19, 0xd9, 0xa4, + 0x00, 0xab, 0xb3, 0x01, 0x42, 0x74, 0x00, 0xe1, 0xa4, 0x00, 0x42, 0x6c, + 0x00, 0xdf, 0xa4, 0x00, 0xae, 0x9a, 0x01, 0xef, 0xf3, 0xa4, 0x80, 0x90, + 0x01, 0xb0, 0x83, 0x01, 0xb3, 0x77, 0xb4, 0x32, 0xf5, 0xf4, 0xa4, 0x80, + 0x25, 0x42, 0xa9, 0x01, 0xea, 0xa4, 0x00, 0x42, 0xed, 0x26, 0xe7, 0xa4, + 0x00, 0xb9, 0x0d, 0xba, 0x01, 0xff, 0xe1, 0xe4, 0xa4, 0x00, 0x42, 0x22, + 0x00, 0xe3, 0xa4, 0x40, 0xe1, 0xec, 0xa4, 0x00, 0x42, 0x22, 0x00, 0xb0, + 0x1f, 0x41, 0xe5, 0xf5, 0xa4, 0x00, 0xe8, 0xf6, 0xa4, 0x40, 0xe1, 0xd4, + 0xa4, 0x00, 0x42, 0x22, 0x00, 0xd5, 0xa4, 0x00, 0x04, 0x0e, 0x0b, 0x0d, + 0xb3, 0x01, 0xff, 0xe1, 0xdd, 0xa4, 0x00, 0x42, 0x22, 0x00, 0xde, 0xa4, + 0x40, 0x04, 0x69, 0x62, 0x06, 0x45, 0xe4, 0xe8, 0xf9, 0xa4, 0x40, 0x42, + 0x5d, 0x00, 0xfb, 0xa4, 0x00, 0x43, 0x10, 0xf4, 0xfa, 0xa4, 0x00, 0x43, + 0x5e, 0xf4, 0xfd, 0xa4, 0x00, 0x42, 0x2a, 0x05, 0xfc, 0xa4, 0x00, 0x42, + 0x35, 0x00, 0xf8, 0xa4, 0x40, 0xe1, 0xe2, 0xa4, 0x00, 0x42, 0x22, 0x00, + 0xeb, 0xa4, 0x40, 0xe1, 0xd1, 0xa4, 0x00, 0x42, 0x22, 0x00, 0xd2, 0xa4, + 0x40, 0xe5, 0xf7, 0xa4, 0x40, 0xe1, 0xe0, 0xa4, 0x00, 0x42, 0x24, 0x02, + 0xe5, 0xa4, 0x40, 0xe1, 0xd7, 0xa4, 0x00, 0x42, 0x22, 0x00, 0xd8, 0xa4, + 0x40, 0xe1, 0xe6, 0xa4, 0x00, 0x42, 0x22, 0x00, 0xe8, 0xa4, 0x40, 0xe1, + 0xd6, 0xa4, 0x00, 0x42, 0x22, 0x00, 0xed, 0xa4, 0x40, 0xf5, 0xf1, 0xa4, + 0x40, 0xe1, 0xd3, 0xa4, 0x00, 0x42, 0x59, 0x00, 0xdc, 0xa4, 0x40, 0xe1, + 0xda, 0xa4, 0x00, 0x42, 0x22, 0x00, 0xdb, 0xa4, 0x40, 0xe5, 0xef, 0xa4, + 0x40, 0x44, 0xfd, 0x07, 0x84, 0xf4, 0x41, 0xa5, 0x0f, 0xab, 0x01, 0xff, + 0x47, 0x15, 0x08, 0x17, 0xf5, 0x01, 0x4d, 0x5d, 0x82, 0x87, 0xf5, 0x41, + 0x80, 0xab, 0x16, 0x03, 0x17, 0x00, 0x01, 0xff, 0x08, 0x10, 0xc3, 0xd5, + 0x09, 0x02, 0x26, 0x02, 0x01, 0xff, 0x09, 0xff, 0xb9, 0xdd, 0x04, 0x0a, + 0xfd, 0xad, 0xae, 0x04, 0x02, 0x16, 0x08, 0x01, 0xff, 0x09, 0x94, 0xbb, + 0x4e, 0x07, 0x31, 0xd3, 0x01, 0xff, 0x91, 0x3f, 0x42, 0x54, 0xed, 0x52, + 0x00, 0x01, 0x42, 0xf0, 0xf4, 0x53, 0x00, 0x01, 0x94, 0x29, 0x42, 0x00, + 0xc3, 0x56, 0x00, 0x01, 0x96, 0x19, 0x42, 0x14, 0x40, 0x59, 0x00, 0x01, + 0x98, 0x01, 0xff, 0xd2, 0x5a, 0x00, 0x01, 0xd3, 0x5b, 0x00, 0x01, 0xd6, + 0x5c, 0x00, 0x01, 0xd9, 0x5d, 0x00, 0x41, 0xd3, 0x57, 0x00, 0x01, 0xd4, + 0x58, 0x00, 0x41, 0xd7, 0x54, 0x00, 0x01, 0xd9, 0x55, 0x00, 0x41, 0xd8, + 0x50, 0x00, 0x01, 0xd9, 0x51, 0x00, 0x41, 0x90, 0x9e, 0x03, 0x91, 0xeb, + 0x02, 0x92, 0xb2, 0x02, 0x93, 0xff, 0x01, 0x94, 0xcc, 0x01, 0x95, 0x93, + 0x01, 0x96, 0x61, 0x97, 0x29, 0x98, 0x0f, 0x99, 0x01, 0xff, 0x45, 0x04, + 0xe2, 0x44, 0x00, 0x01, 0x45, 0x45, 0xe2, 0x4d, 0x00, 0x41, 0x44, 0x22, + 0xe2, 0x14, 0x00, 0x01, 0x44, 0x21, 0xed, 0x13, 0x00, 0x01, 0x44, 0xd9, + 0xed, 0x42, 0x00, 0x01, 0x45, 0x76, 0xe3, 0x4c, 0x00, 0x41, 0x44, 0xe1, + 0xec, 0x12, 0x00, 0x01, 0x45, 0x31, 0xe2, 0x43, 0x00, 0x01, 0x44, 0x59, + 0xed, 0x1f, 0x00, 0x01, 0x44, 0x91, 0xed, 0x16, 0x00, 0x01, 0x44, 0xcd, + 0xed, 0x3d, 0x00, 0x01, 0x44, 0x1d, 0xee, 0x38, 0x00, 0x01, 0x45, 0x35, + 0xe3, 0x48, 0x00, 0x01, 0x44, 0x20, 0xd9, 0x0f, 0x00, 0x01, 0x44, 0xa5, + 0xee, 0x24, 0x00, 0x41, 0x44, 0xed, 0xec, 0x28, 0x00, 0x01, 0x43, 0xa7, + 0x75, 0x03, 0x00, 0x01, 0x45, 0x95, 0xe2, 0x47, 0x00, 0x01, 0x44, 0xf5, + 0xed, 0x0e, 0x00, 0x01, 0x45, 0x44, 0xe3, 0x4b, 0x00, 0x01, 0x44, 0x6d, + 0xee, 0x11, 0x00, 0x01, 0x45, 0xa3, 0xe3, 0x4a, 0x00, 0x01, 0x44, 0xd1, + 0xee, 0x36, 0x00, 0x41, 0x44, 0xe9, 0xec, 0x22, 0x00, 0x01, 0x44, 0x0d, + 0xed, 0x09, 0x00, 0x01, 0x44, 0x55, 0xed, 0x1c, 0x00, 0x01, 0x44, 0x9d, + 0xed, 0x2a, 0x00, 0x01, 0x44, 0xc5, 0xed, 0x37, 0x00, 0x01, 0x44, 0x01, + 0xee, 0x1d, 0x00, 0x01, 0x44, 0x69, 0xee, 0x0a, 0x00, 0x01, 0x44, 0xa9, + 0xee, 0x31, 0x00, 0x01, 0x44, 0xc9, 0xee, 0x32, 0x00, 0x41, 0x44, 0xf5, + 0xec, 0x39, 0x00, 0x01, 0x44, 0x35, 0xed, 0x2f, 0x00, 0x01, 0x44, 0x0d, + 0xce, 0x3a, 0x00, 0x01, 0x44, 0x71, 0xed, 0x41, 0x00, 0x01, 0x44, 0xb1, + 0xed, 0x10, 0x00, 0x01, 0x44, 0xe1, 0xed, 0x06, 0x00, 0x01, 0x44, 0x31, + 0xee, 0x0b, 0x00, 0x01, 0x45, 0x9e, 0xe3, 0x45, 0x00, 0x41, 0x44, 0xe5, + 0xec, 0x1b, 0x00, 0x01, 0x44, 0x31, 0xed, 0x2d, 0x00, 0x01, 0x44, 0x5d, + 0xed, 0x26, 0x00, 0x01, 0x45, 0xbd, 0xe2, 0x49, 0x00, 0x01, 0x44, 0x35, + 0xee, 0x0d, 0x00, 0x01, 0x44, 0x79, 0xee, 0x34, 0x00, 0x01, 0x43, 0x8d, + 0xee, 0x01, 0x00, 0x01, 0x44, 0xb9, 0xee, 0x20, 0x00, 0x41, 0x44, 0xfd, + 0xec, 0x3f, 0x00, 0x01, 0x44, 0x29, 0xed, 0x25, 0x00, 0x01, 0x44, 0x95, + 0xed, 0x18, 0x00, 0x01, 0x44, 0xb9, 0xed, 0x1a, 0x00, 0x01, 0x44, 0xd1, + 0xed, 0x40, 0x00, 0x01, 0x44, 0x4d, 0xee, 0x2c, 0x00, 0x01, 0x44, 0x75, + 0xee, 0x29, 0x00, 0x01, 0x43, 0xd7, 0xf3, 0x02, 0x00, 0x01, 0x45, 0xd5, + 0xe3, 0x46, 0x00, 0x41, 0x43, 0x74, 0xf3, 0x04, 0x00, 0x01, 0x44, 0x25, + 0xed, 0x21, 0x00, 0x01, 0x44, 0x65, 0xed, 0x30, 0x00, 0x01, 0x44, 0x8d, + 0xed, 0x15, 0x00, 0x01, 0x44, 0xa9, 0xed, 0x08, 0x00, 0x01, 0x44, 0xfd, + 0xed, 0x17, 0x00, 0x01, 0x44, 0x49, 0xee, 0x23, 0x00, 0x01, 0x44, 0x81, + 0xee, 0x3c, 0x00, 0x41, 0x44, 0x05, 0xed, 0x05, 0x00, 0x01, 0x44, 0x61, + 0xed, 0x2b, 0x00, 0x01, 0x44, 0x99, 0xed, 0x1e, 0x00, 0x01, 0x44, 0xbd, + 0xed, 0x33, 0x00, 0x01, 0x44, 0x0d, 0xee, 0x35, 0x00, 0x01, 0x44, 0x41, + 0xee, 0x19, 0x00, 0x01, 0x44, 0x54, 0xb5, 0x07, 0x00, 0x01, 0x43, 0xd4, + 0xf3, 0x00, 0x00, 0x01, 0x44, 0xbd, 0xee, 0x2e, 0x00, 0x41, 0x91, 0x06, + 0x49, 0x52, 0xb5, 0xd2, 0x00, 0x41, 0x92, 0x14, 0x93, 0x06, 0x48, 0x00, + 0xc3, 0xa4, 0x00, 0x41, 0x47, 0x1b, 0xce, 0x98, 0x00, 0x01, 0x46, 0xf6, + 0xd8, 0x99, 0x00, 0x41, 0x46, 0x20, 0xd9, 0x93, 0x00, 0x01, 0x48, 0x08, + 0xc3, 0x94, 0x00, 0x41, 0xa2, 0x87, 0x01, 0x08, 0x48, 0xcc, 0x01, 0xff, + 0x43, 0x8f, 0xf3, 0xde, 0x00, 0x01, 0x92, 0x06, 0x43, 0xaa, 0xf3, 0xfa, + 0x00, 0x41, 0x90, 0x4a, 0x91, 0x20, 0x92, 0x06, 0x42, 0xaa, 0xd2, 0xf9, + 0x00, 0x41, 0xd1, 0xf3, 0x00, 0x01, 0xd2, 0xf4, 0x00, 0x01, 0xd6, 0xf5, + 0x00, 0x01, 0xd7, 0xf6, 0x00, 0x01, 0xd8, 0xf7, 0x00, 0x01, 0xd9, 0xf8, + 0x00, 0x41, 0xd0, 0xe9, 0x00, 0x01, 0xd1, 0xea, 0x00, 0x01, 0xd2, 0xeb, + 0x00, 0x01, 0xd3, 0xec, 0x00, 0x01, 0xd4, 0xed, 0x00, 0x01, 0xd5, 0xee, + 0x00, 0x01, 0xd6, 0xef, 0x00, 0x01, 0xd7, 0xf0, 0x00, 0x01, 0xd8, 0xf1, + 0x00, 0x01, 0xd9, 0xf2, 0x00, 0x41, 0xd0, 0xdf, 0x00, 0x01, 0xd1, 0xe0, + 0x00, 0x01, 0xd2, 0xe1, 0x00, 0x01, 0xd3, 0xe2, 0x00, 0x01, 0xd4, 0xe3, + 0x00, 0x01, 0xd5, 0xe4, 0x00, 0x01, 0xd6, 0xe5, 0x00, 0x01, 0xd7, 0xe6, + 0x00, 0x01, 0xd8, 0xe7, 0x00, 0x01, 0xd9, 0xe8, 0x00, 0x41, 0x91, 0x84, + 0x01, 0x92, 0x01, 0xff, 0x92, 0x73, 0x93, 0x53, 0x94, 0x29, 0x95, 0x01, + 0xff, 0xd1, 0xd5, 0x00, 0x01, 0xd2, 0xd6, 0x00, 0x01, 0xd3, 0xd7, 0x00, + 0x01, 0x46, 0xcc, 0xd8, 0xd8, 0x00, 0x01, 0xd5, 0xd9, 0x00, 0x01, 0xd6, + 0xda, 0x00, 0x01, 0xd7, 0xdb, 0x00, 0x01, 0xd8, 0xdc, 0x00, 0x01, 0xd9, + 0xdd, 0x00, 0x41, 0x51, 0xba, 0x57, 0xcc, 0x00, 0x01, 0x49, 0x40, 0xb5, + 0xcd, 0x00, 0x01, 0x4f, 0x50, 0x6a, 0xce, 0x00, 0x01, 0x47, 0x45, 0xce, + 0xcf, 0x00, 0x01, 0xd5, 0xd0, 0x00, 0x01, 0xd6, 0xd1, 0x00, 0x01, 0xd8, + 0xd3, 0x00, 0x01, 0xd9, 0xd4, 0x00, 0x41, 0x47, 0xf1, 0xcd, 0xc6, 0x00, + 0x01, 0x47, 0xff, 0xcd, 0xc7, 0x00, 0x01, 0xd2, 0xc8, 0x00, 0x01, 0x47, + 0x3e, 0xce, 0xc9, 0x00, 0x01, 0xd4, 0xca, 0x00, 0x01, 0xd6, 0xcb, 0x00, + 0x41, 0x4b, 0x7c, 0x98, 0xc4, 0x00, 0x01, 0x49, 0x64, 0xb5, 0xc5, 0x00, + 0x41, 0x90, 0xfb, 0x01, 0x92, 0xda, 0x01, 0x93, 0xc7, 0x01, 0x94, 0xaa, + 0x01, 0x95, 0x83, 0x01, 0x96, 0x55, 0x97, 0x2b, 0x98, 0x0d, 0x99, 0x01, + 0xff, 0xd0, 0xc2, 0x00, 0x01, 0x48, 0xf0, 0xc2, 0xc3, 0x00, 0x41, 0xd0, + 0xbb, 0x00, 0x01, 0xd1, 0xbc, 0x00, 0x01, 0xd2, 0xbd, 0x00, 0x01, 0xd3, + 0xbe, 0x00, 0x01, 0xd4, 0xbf, 0x00, 0x01, 0xd5, 0xc0, 0x00, 0x01, 0xd9, + 0xc1, 0x00, 0x41, 0xd0, 0xb2, 0x00, 0x01, 0xd1, 0xb3, 0x00, 0x01, 0xd2, + 0xb4, 0x00, 0x01, 0x47, 0x29, 0xce, 0xb5, 0x00, 0x01, 0xd4, 0xb6, 0x00, + 0x01, 0x46, 0x14, 0xd9, 0xb7, 0x00, 0x01, 0xd7, 0xb8, 0x00, 0x01, 0xd8, + 0xb9, 0x00, 0x01, 0xd9, 0xba, 0x00, 0x41, 0xd0, 0xa8, 0x00, 0x01, 0xd1, + 0xa9, 0x00, 0x01, 0x49, 0x49, 0xb5, 0xaa, 0x00, 0x01, 0x48, 0xf8, 0xc2, + 0xab, 0x00, 0x01, 0xd4, 0xac, 0x00, 0x01, 0xd5, 0xad, 0x00, 0x01, 0xd6, + 0xae, 0x00, 0x01, 0xd7, 0xaf, 0x00, 0x01, 0xd8, 0xb0, 0x00, 0x01, 0xd9, + 0xb1, 0x00, 0x41, 0xd0, 0x9f, 0x00, 0x01, 0x46, 0x9c, 0xd8, 0xa0, 0x00, + 0x01, 0xd2, 0xa1, 0x00, 0x01, 0xd3, 0xa2, 0x00, 0x01, 0xd4, 0xa3, 0x00, + 0x01, 0xd7, 0xa5, 0x00, 0x01, 0xd8, 0xa6, 0x00, 0x01, 0x47, 0x68, 0xce, + 0xa7, 0x00, 0x41, 0x48, 0xe0, 0xc2, 0x9a, 0x00, 0x01, 0x46, 0x96, 0xd8, + 0x9b, 0x00, 0x01, 0xd2, 0x9c, 0x00, 0x01, 0x46, 0xfc, 0xd8, 0x9d, 0x00, + 0x01, 0xd6, 0x9e, 0x00, 0x41, 0x45, 0x27, 0xe2, 0x95, 0x00, 0x01, 0x46, + 0xa8, 0xd8, 0x96, 0x00, 0x01, 0xd2, 0x97, 0x00, 0x41, 0x47, 0xf8, 0xcd, + 0x8e, 0x00, 0x01, 0x48, 0xe8, 0xc2, 0x8f, 0x00, 0x01, 0x47, 0x06, 0xce, + 0x90, 0x00, 0x01, 0x47, 0x37, 0xce, 0x91, 0x00, 0x01, 0x49, 0x6d, 0xb5, + 0x92, 0x00, 0x41, 0x45, 0x22, 0xe2, 0x80, 0x00, 0x01, 0x47, 0x0d, 0xce, + 0x81, 0x00, 0x01, 0x46, 0xd2, 0xd8, 0x82, 0x00, 0x01, 0x95, 0x39, 0x96, + 0x2b, 0x97, 0x1d, 0x98, 0x0f, 0x99, 0x01, 0xff, 0x45, 0x46, 0xe6, 0x8c, + 0x00, 0x01, 0x46, 0xe2, 0xdd, 0x8d, 0x00, 0x41, 0x45, 0x50, 0xe6, 0x8a, + 0x00, 0x01, 0x46, 0xdc, 0xdd, 0x8b, 0x00, 0x41, 0x4a, 0x3d, 0xaa, 0x88, + 0x00, 0x01, 0x49, 0xca, 0xbb, 0x89, 0x00, 0x41, 0x45, 0x4b, 0xe6, 0x86, + 0x00, 0x01, 0x45, 0x4e, 0xe8, 0x87, 0x00, 0x41, 0x46, 0x0c, 0xd8, 0x83, + 0x00, 0x01, 0x46, 0xae, 0xdb, 0x84, 0x00, 0x01, 0x4a, 0x99, 0xad, 0x85, + 0x00, 0x41, 0x44, 0x01, 0xed, 0x1b, 0x06, 0x01, 0x91, 0xb1, 0x0c, 0x93, + 0xe8, 0x09, 0x94, 0xee, 0x08, 0x95, 0x90, 0x06, 0x96, 0xac, 0x04, 0x97, + 0x9b, 0x03, 0x02, 0x2c, 0xf4, 0xf6, 0x02, 0xa2, 0x01, 0xff, 0x90, 0x3f, + 0x91, 0x01, 0xff, 0x42, 0x59, 0xe2, 0x48, 0x06, 0x01, 0x92, 0x28, 0x02, + 0x6a, 0xec, 0x1c, 0x42, 0x02, 0xf5, 0x50, 0x06, 0x01, 0x42, 0xeb, 0xf4, + 0x51, 0x06, 0x01, 0x98, 0x06, 0x42, 0x7f, 0xf3, 0x54, 0x06, 0x41, 0xd0, + 0x52, 0x06, 0x01, 0xd8, 0x53, 0x06, 0x41, 0xe1, 0x4d, 0x06, 0x01, 0xe2, + 0x4e, 0x06, 0x41, 0xd0, 0x49, 0x06, 0x01, 0xd2, 0x4b, 0x06, 0x01, 0xd3, + 0x4c, 0x06, 0x41, 0x90, 0x8b, 0x02, 0x91, 0xf4, 0x01, 0x92, 0xb6, 0x01, + 0x93, 0x9b, 0x01, 0x94, 0x79, 0x95, 0x53, 0x96, 0x39, 0x97, 0x1b, 0x98, + 0x01, 0xff, 0xd0, 0x41, 0x06, 0x01, 0xd1, 0x42, 0x06, 0x01, 0xd2, 0x43, + 0x06, 0x01, 0xd5, 0x44, 0x06, 0x01, 0xd6, 0x45, 0x06, 0x01, 0xd7, 0x46, + 0x06, 0x41, 0xd0, 0x3a, 0x06, 0x01, 0xd3, 0x3b, 0x06, 0x01, 0xd4, 0x3c, + 0x06, 0x01, 0xd6, 0x3d, 0x06, 0x01, 0xd7, 0x3e, 0x06, 0x01, 0xd8, 0x3f, + 0x06, 0x01, 0xd9, 0x40, 0x06, 0x41, 0xd0, 0x34, 0x06, 0x01, 0xd1, 0x35, + 0x06, 0x01, 0xd5, 0x36, 0x06, 0x01, 0xd6, 0x37, 0x06, 0x01, 0xd7, 0x38, + 0x06, 0x01, 0xd9, 0x39, 0x06, 0x41, 0xd0, 0x2b, 0x06, 0x01, 0xd1, 0x2c, + 0x06, 0x01, 0xd3, 0x2d, 0x06, 0x01, 0xd4, 0x2e, 0x06, 0x01, 0xd5, 0x2f, + 0x06, 0x01, 0xd6, 0x30, 0x06, 0x01, 0xd7, 0x31, 0x06, 0x01, 0xd8, 0x32, + 0x06, 0x01, 0xd9, 0x33, 0x06, 0x41, 0xd0, 0x23, 0x06, 0x01, 0xd1, 0x24, + 0x06, 0x01, 0xd4, 0x25, 0x06, 0x01, 0xd5, 0x26, 0x06, 0x01, 0xd6, 0x27, + 0x06, 0x01, 0xd7, 0x28, 0x06, 0x01, 0xd8, 0x29, 0x06, 0x01, 0xd9, 0x2a, + 0x06, 0x41, 0xd0, 0x1d, 0x06, 0x01, 0xd1, 0x1e, 0x06, 0x01, 0xd4, 0x1f, + 0x06, 0x01, 0xd7, 0x20, 0x06, 0x01, 0xd8, 0x21, 0x06, 0x01, 0xd9, 0x22, + 0x06, 0x41, 0xd0, 0x0e, 0x06, 0x01, 0xd1, 0x0f, 0x06, 0x81, 0x2a, 0xd2, + 0x12, 0x06, 0x81, 0x1d, 0xd3, 0x15, 0x06, 0x81, 0x14, 0xd4, 0x17, 0x06, + 0x01, 0xd6, 0x18, 0x06, 0x01, 0xd7, 0x19, 0x06, 0x01, 0xd8, 0x1a, 0x06, + 0x01, 0xd9, 0x1c, 0x06, 0x41, 0xed, 0x16, 0x06, 0x41, 0xe6, 0x13, 0x06, + 0x01, 0xed, 0x14, 0x06, 0x41, 0xe6, 0x10, 0x06, 0x01, 0xed, 0x11, 0x06, + 0x41, 0xd0, 0x09, 0x06, 0x01, 0xd1, 0x0a, 0x06, 0x01, 0xd3, 0x0b, 0x06, + 0x01, 0xd6, 0x0c, 0x06, 0x01, 0xd7, 0x0d, 0x06, 0x41, 0xd1, 0x00, 0x06, + 0x01, 0xd2, 0x01, 0x06, 0x01, 0xd3, 0x02, 0x06, 0x01, 0xd4, 0x03, 0x06, + 0x01, 0xd5, 0x04, 0x06, 0x01, 0xd6, 0x05, 0x06, 0x01, 0xd7, 0x06, 0x06, + 0x01, 0xd8, 0x07, 0x06, 0x01, 0xd9, 0x08, 0x06, 0x41, 0xd0, 0x60, 0x07, + 0x01, 0xd1, 0x61, 0x07, 0x01, 0xd2, 0x62, 0x07, 0x01, 0xd3, 0x63, 0x07, + 0x01, 0xd4, 0x64, 0x07, 0x01, 0xd5, 0x65, 0x07, 0x01, 0xd6, 0x66, 0x07, + 0x01, 0xd7, 0x67, 0x07, 0x41, 0x90, 0x38, 0x91, 0x0c, 0x47, 0x14, 0xce, + 0x54, 0x07, 0x01, 0x45, 0xd1, 0xe2, 0x55, 0x07, 0x41, 0x43, 0xba, 0x57, + 0x4d, 0x07, 0x01, 0x43, 0x80, 0xf3, 0x4e, 0x07, 0x01, 0x43, 0x6d, 0xed, + 0x4f, 0x07, 0x01, 0x47, 0x30, 0xce, 0x50, 0x07, 0x01, 0x45, 0xd6, 0xe2, + 0x51, 0x07, 0x01, 0x44, 0xdd, 0xed, 0x52, 0x07, 0x01, 0x44, 0x61, 0xee, + 0x53, 0x07, 0x41, 0x43, 0xff, 0xcd, 0x40, 0x07, 0x01, 0x43, 0x49, 0xed, + 0x41, 0x07, 0x01, 0x43, 0xa1, 0xf3, 0x42, 0x07, 0x01, 0x43, 0xb0, 0xf3, + 0x43, 0x07, 0x01, 0x43, 0xe5, 0xed, 0x44, 0x07, 0x01, 0x43, 0x08, 0xd9, + 0x45, 0x07, 0x01, 0x43, 0x62, 0xe3, 0x46, 0x07, 0x01, 0x43, 0x08, 0xc3, + 0x47, 0x07, 0x01, 0x99, 0x01, 0xff, 0x42, 0x73, 0x00, 0x48, 0x07, 0x01, + 0x8d, 0x01, 0xff, 0x44, 0x51, 0xed, 0x49, 0x07, 0x01, 0x44, 0x85, 0xed, + 0x4a, 0x07, 0x01, 0x44, 0xb5, 0xed, 0x4b, 0x07, 0x01, 0x44, 0x39, 0xee, + 0x4c, 0x07, 0x41, 0x90, 0xbe, 0x01, 0x91, 0x93, 0x01, 0x92, 0x6d, 0x93, + 0x5f, 0x94, 0x3d, 0x95, 0x17, 0x96, 0x01, 0xff, 0xd0, 0x32, 0x07, 0x01, + 0xd1, 0x33, 0x07, 0x01, 0xd2, 0x34, 0x07, 0x01, 0xd3, 0x35, 0x07, 0x01, + 0xd4, 0x36, 0x07, 0x41, 0xd1, 0x29, 0x07, 0x01, 0xd2, 0x2a, 0x07, 0x01, + 0xd3, 0x2b, 0x07, 0x01, 0xd4, 0x2c, 0x07, 0x01, 0xd5, 0x2d, 0x07, 0x01, + 0xd6, 0x2e, 0x07, 0x01, 0xd7, 0x2f, 0x07, 0x01, 0xd8, 0x30, 0x07, 0x01, + 0xd9, 0x31, 0x07, 0x41, 0xd0, 0x21, 0x07, 0x01, 0xd2, 0x22, 0x07, 0x01, + 0xd3, 0x23, 0x07, 0x01, 0xd4, 0x24, 0x07, 0x01, 0xd5, 0x25, 0x07, 0x01, + 0xd6, 0x26, 0x07, 0x01, 0xd8, 0x27, 0x07, 0x01, 0xd9, 0x28, 0x07, 0x41, + 0xd4, 0x1e, 0x07, 0x01, 0xd7, 0x1f, 0x07, 0x01, 0xd8, 0x20, 0x07, 0x41, + 0xd0, 0x15, 0x07, 0x01, 0xd1, 0x16, 0x07, 0x01, 0xd2, 0x17, 0x07, 0x01, + 0xd3, 0x18, 0x07, 0x01, 0xd4, 0x19, 0x07, 0x01, 0xd6, 0x1a, 0x07, 0x01, + 0xd7, 0x1b, 0x07, 0x01, 0xd8, 0x1c, 0x07, 0x01, 0xd9, 0x1d, 0x07, 0x41, + 0xd0, 0x0b, 0x07, 0x01, 0xd1, 0x0c, 0x07, 0x01, 0xd2, 0x0d, 0x07, 0x01, + 0xd3, 0x0e, 0x07, 0x01, 0xd4, 0x0f, 0x07, 0x01, 0xd5, 0x10, 0x07, 0x01, + 0xd6, 0x11, 0x07, 0x01, 0xd7, 0x12, 0x07, 0x01, 0xd8, 0x13, 0x07, 0x01, + 0xd9, 0x14, 0x07, 0x41, 0xd0, 0x03, 0x07, 0x01, 0xd1, 0x04, 0x07, 0x01, + 0xd2, 0x05, 0x07, 0x01, 0xd3, 0x06, 0x07, 0x01, 0xd4, 0x07, 0x07, 0x01, + 0xd6, 0x08, 0x07, 0x01, 0xd8, 0x09, 0x07, 0x01, 0xd9, 0x0a, 0x07, 0x41, + 0x90, 0xb8, 0x02, 0x91, 0x9d, 0x02, 0x92, 0xf6, 0x01, 0x93, 0xcf, 0x01, + 0x94, 0xb0, 0x01, 0x95, 0x89, 0x01, 0x96, 0x6f, 0x97, 0x45, 0x98, 0x1b, + 0x99, 0x01, 0xff, 0xd1, 0xfd, 0x06, 0x01, 0xd2, 0xfe, 0x06, 0x01, 0xd4, + 0xff, 0x06, 0x01, 0xd5, 0x00, 0x07, 0x01, 0xd6, 0x01, 0x07, 0x01, 0xd8, + 0x02, 0x07, 0x41, 0xd0, 0xf3, 0x06, 0x01, 0xd1, 0xf4, 0x06, 0x01, 0xd2, + 0xf5, 0x06, 0x01, 0xd3, 0xf6, 0x06, 0x01, 0xd4, 0xf7, 0x06, 0x01, 0xd5, + 0xf8, 0x06, 0x01, 0xd6, 0xf9, 0x06, 0x01, 0xd7, 0xfa, 0x06, 0x01, 0xd8, + 0xfb, 0x06, 0x01, 0xd9, 0xfc, 0x06, 0x41, 0xd0, 0xe9, 0x06, 0x01, 0xd1, + 0xea, 0x06, 0x01, 0xd2, 0xeb, 0x06, 0x01, 0xd3, 0xec, 0x06, 0x01, 0xd4, + 0xed, 0x06, 0x01, 0xd5, 0xee, 0x06, 0x01, 0xd6, 0xef, 0x06, 0x01, 0xd7, + 0xf0, 0x06, 0x01, 0xd8, 0xf1, 0x06, 0x01, 0xd9, 0xf2, 0x06, 0x41, 0xd3, + 0xe3, 0x06, 0x01, 0xd4, 0xe4, 0x06, 0x01, 0xd5, 0xe5, 0x06, 0x01, 0xd6, + 0xe6, 0x06, 0x01, 0xd8, 0xe7, 0x06, 0x01, 0xd9, 0xe8, 0x06, 0x41, 0xd0, + 0xda, 0x06, 0x01, 0xd1, 0xdb, 0x06, 0x01, 0xd2, 0xdc, 0x06, 0x01, 0xd3, + 0xdd, 0x06, 0x01, 0xd4, 0xde, 0x06, 0x01, 0xd5, 0xdf, 0x06, 0x01, 0xd6, + 0xe0, 0x06, 0x01, 0xd7, 0xe1, 0x06, 0x01, 0xd9, 0xe2, 0x06, 0x41, 0xd0, + 0xd3, 0x06, 0x01, 0xd1, 0xd4, 0x06, 0x01, 0xd2, 0xd5, 0x06, 0x01, 0xd5, + 0xd6, 0x06, 0x01, 0xd7, 0xd7, 0x06, 0x01, 0xd8, 0xd8, 0x06, 0x01, 0xd9, + 0xd9, 0x06, 0x41, 0xd0, 0xca, 0x06, 0x01, 0xd1, 0xcb, 0x06, 0x01, 0xd2, + 0xcc, 0x06, 0x01, 0xd4, 0xcd, 0x06, 0x01, 0xd5, 0xce, 0x06, 0x01, 0xd6, + 0xcf, 0x06, 0x01, 0xd7, 0xd0, 0x06, 0x01, 0xd8, 0xd1, 0x06, 0x01, 0xd9, + 0xd2, 0x06, 0x41, 0xd0, 0xc1, 0x06, 0x01, 0xd1, 0xc2, 0x06, 0x01, 0xd3, + 0xc3, 0x06, 0x01, 0xd4, 0xc4, 0x06, 0x01, 0xd5, 0xc5, 0x06, 0x01, 0xd6, + 0xc6, 0x06, 0x01, 0xd7, 0xc7, 0x06, 0x01, 0xd8, 0xc8, 0x06, 0x01, 0xd9, + 0xc9, 0x06, 0x41, 0xd0, 0xbb, 0x06, 0x01, 0xd1, 0xbc, 0x06, 0x01, 0xd2, + 0xbd, 0x06, 0x01, 0xd3, 0xbe, 0x06, 0x01, 0xd5, 0xbf, 0x06, 0x01, 0xd6, + 0xc0, 0x06, 0x41, 0xd1, 0xb3, 0x06, 0x01, 0xd2, 0xb4, 0x06, 0x01, 0xd3, + 0xb5, 0x06, 0x01, 0xd4, 0xb6, 0x06, 0x01, 0xd5, 0xb7, 0x06, 0x01, 0xd6, + 0xb8, 0x06, 0x01, 0xd8, 0xb9, 0x06, 0x01, 0xd9, 0xba, 0x06, 0x41, 0x90, + 0x39, 0x91, 0x01, 0xff, 0x45, 0x2c, 0xe2, 0xaa, 0x06, 0x01, 0x45, 0x54, + 0xe2, 0xab, 0x06, 0x01, 0x45, 0x9f, 0xe2, 0xac, 0x06, 0x01, 0x45, 0xcc, + 0xe2, 0xad, 0x06, 0x01, 0x45, 0x12, 0xe3, 0xae, 0x06, 0x01, 0x45, 0x26, + 0xe3, 0xaf, 0x06, 0x01, 0x45, 0x4e, 0xe3, 0xb0, 0x06, 0x01, 0x45, 0x7b, + 0xe3, 0xb1, 0x06, 0x01, 0x45, 0xa8, 0xe3, 0xb2, 0x06, 0x41, 0x45, 0x2c, + 0xe2, 0xa0, 0x06, 0x01, 0x45, 0x54, 0xe2, 0xa1, 0x06, 0x01, 0x45, 0x9f, + 0xe2, 0xa2, 0x06, 0x01, 0x45, 0xcc, 0xe2, 0xa3, 0x06, 0x01, 0x45, 0x12, + 0xe3, 0xa4, 0x06, 0x01, 0x45, 0x26, 0xe3, 0xa5, 0x06, 0x01, 0x45, 0x4e, + 0xe3, 0xa6, 0x06, 0x01, 0x45, 0x7b, 0xe3, 0xa7, 0x06, 0x01, 0x45, 0xa8, + 0xe3, 0xa8, 0x06, 0x01, 0x45, 0xe9, 0xe3, 0xa9, 0x06, 0x41, 0x90, 0x94, + 0x02, 0x91, 0xdf, 0x01, 0x92, 0xb4, 0x01, 0x93, 0x89, 0x01, 0x94, 0x5f, + 0x95, 0x35, 0x96, 0x0b, 0x97, 0x01, 0xff, 0xd0, 0x9e, 0x06, 0x01, 0xd1, + 0x9f, 0x06, 0x41, 0xd0, 0x94, 0x06, 0x01, 0xd1, 0x95, 0x06, 0x01, 0xd2, + 0x96, 0x06, 0x01, 0xd3, 0x97, 0x06, 0x01, 0xd4, 0x98, 0x06, 0x01, 0xd5, + 0x99, 0x06, 0x01, 0xd6, 0x9a, 0x06, 0x01, 0xd7, 0x9b, 0x06, 0x01, 0xd8, + 0x9c, 0x06, 0x01, 0xd9, 0x9d, 0x06, 0x41, 0xd0, 0x8a, 0x06, 0x01, 0xd1, + 0x8b, 0x06, 0x01, 0xd2, 0x8c, 0x06, 0x01, 0xd3, 0x8d, 0x06, 0x01, 0xd4, + 0x8e, 0x06, 0x01, 0xd5, 0x8f, 0x06, 0x01, 0xd6, 0x90, 0x06, 0x01, 0xd7, + 0x91, 0x06, 0x01, 0xd8, 0x92, 0x06, 0x01, 0xd9, 0x93, 0x06, 0x41, 0xd0, + 0x80, 0x06, 0x01, 0xd1, 0x81, 0x06, 0x01, 0xd2, 0x82, 0x06, 0x01, 0xd3, + 0x83, 0x06, 0x01, 0xd4, 0x84, 0x06, 0x01, 0xd5, 0x85, 0x06, 0x01, 0xd6, + 0x86, 0x06, 0x01, 0xd7, 0x87, 0x06, 0x01, 0xd8, 0x88, 0x06, 0x01, 0xd9, + 0x89, 0x06, 0x41, 0xd0, 0x76, 0x06, 0x01, 0xd1, 0x77, 0x06, 0x01, 0xd2, + 0x78, 0x06, 0x01, 0xd3, 0x79, 0x06, 0x01, 0xd4, 0x7a, 0x06, 0x01, 0xd5, + 0x7b, 0x06, 0x01, 0xd6, 0x7c, 0x06, 0x01, 0xd7, 0x7d, 0x06, 0x01, 0xd8, + 0x7e, 0x06, 0x01, 0xd9, 0x7f, 0x06, 0x41, 0xd0, 0x6c, 0x06, 0x01, 0xd1, + 0x6d, 0x06, 0x01, 0xd2, 0x6e, 0x06, 0x01, 0xd3, 0x6f, 0x06, 0x01, 0xd4, + 0x70, 0x06, 0x01, 0xd5, 0x71, 0x06, 0x01, 0xd6, 0x72, 0x06, 0x01, 0xd7, + 0x73, 0x06, 0x01, 0xd8, 0x74, 0x06, 0x01, 0xd9, 0x75, 0x06, 0x41, 0xd0, + 0x60, 0x06, 0x01, 0xd1, 0x61, 0x06, 0x01, 0xd2, 0x62, 0x06, 0x01, 0x93, + 0x18, 0xd4, 0x66, 0x06, 0x01, 0xd5, 0x67, 0x06, 0x01, 0xd6, 0x68, 0x06, + 0x01, 0xd7, 0x69, 0x06, 0x01, 0xd8, 0x6a, 0x06, 0x01, 0xd9, 0x6b, 0x06, + 0x41, 0xe1, 0x63, 0x06, 0x01, 0xe2, 0x64, 0x06, 0x01, 0xe3, 0x65, 0x06, + 0x41, 0xd1, 0x55, 0x06, 0x01, 0xd2, 0x56, 0x06, 0x01, 0xd3, 0x57, 0x06, + 0x01, 0xd4, 0x58, 0x06, 0x01, 0xd5, 0x59, 0x06, 0x01, 0xd6, 0x5a, 0x06, + 0x01, 0xd7, 0x5b, 0x06, 0x01, 0xd8, 0x5c, 0x06, 0x01, 0x99, 0x01, 0xff, + 0xe1, 0x5d, 0x06, 0x01, 0xe2, 0x5e, 0x06, 0x01, 0xe3, 0x5f, 0x06, 0x41, + 0x46, 0x8a, 0xd8, 0x47, 0x06, 0x01, 0x43, 0x98, 0xf3, 0x4a, 0x06, 0x01, + 0x43, 0xad, 0xf3, 0x4f, 0x06, 0x41, 0x44, 0xd3, 0x20, 0x0a, 0x00, 0x00, + 0x0c, 0x3f, 0x90, 0x13, 0x49, 0xd8, 0x20, 0x28, 0x20, 0x00, 0x4a, 0xe3, + 0x3b, 0x0b, 0x00, 0xc0, 0x00, 0x44, 0x66, 0xb8, 0x8a, 0x00, 0x40, 0x56, + 0xd1, 0x35, 0x14, 0x2a, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x5c, 0xf6, + 0x18, 0x12, 0x2a, 0x00, 0x5d, 0x8a, 0x16, 0x13, 0x2a, 0x40, 0x03, 0x85, + 0xc9, 0x06, 0x53, 0xae, 0x4a, 0xcf, 0x32, 0x40, 0x06, 0xef, 0x06, 0xec, + 0x02, 0x50, 0xad, 0x00, 0x44, 0x19, 0x00, 0x07, 0xec, 0x05, 0xab, 0x01, + 0x4d, 0xa6, 0x34, 0x45, 0x19, 0x00, 0xb3, 0x36, 0x05, 0x3c, 0x39, 0x01, + 0xff, 0x06, 0x59, 0x03, 0x06, 0x4f, 0x23, 0x6a, 0x00, 0x19, 0x40, 0xe1, + 0x20, 0x19, 0x80, 0x1a, 0xe5, 0x27, 0x19, 0x80, 0x11, 0xe9, 0x21, 0x19, + 0x00, 0xef, 0x28, 0x19, 0x80, 0x04, 0xf5, 0x22, 0x19, 0x40, 0xef, 0x25, + 0x19, 0x40, 0xe5, 0x23, 0x19, 0x40, 0xe9, 0x24, 0x19, 0x00, 0xf5, 0x26, + 0x19, 0x40, 0x04, 0x5b, 0x03, 0x51, 0x0c, 0x77, 0x08, 0x17, 0x10, 0xd6, + 0x67, 0x01, 0xff, 0x42, 0x71, 0x00, 0x2a, 0x19, 0x00, 0x42, 0xa9, 0x01, + 0x2b, 0x19, 0x00, 0x42, 0xbc, 0x22, 0x29, 0x19, 0x40, 0x48, 0x3c, 0x16, + 0x32, 0x19, 0x00, 0x42, 0x1b, 0x02, 0x30, 0x19, 0x00, 0x42, 0x74, 0x00, + 0x38, 0x19, 0x00, 0x42, 0x6c, 0x00, 0x36, 0x19, 0x00, 0xae, 0x12, 0x42, + 0xbb, 0x09, 0x35, 0x19, 0x00, 0x42, 0x71, 0x00, 0x37, 0x19, 0x00, 0x42, + 0x12, 0x00, 0x33, 0x19, 0x40, 0xe1, 0x34, 0x19, 0x00, 0x42, 0x24, 0x02, + 0x31, 0x19, 0x40, 0x49, 0x04, 0xbb, 0x3a, 0x19, 0x00, 0x43, 0xd0, 0x1c, + 0x40, 0x19, 0x00, 0x49, 0x1b, 0xbc, 0x39, 0x19, 0x00, 0x44, 0x85, 0xf2, + 0x3b, 0x19, 0x40, 0xa2, 0xa9, 0x01, 0xa3, 0x9c, 0x01, 0xa4, 0x8f, 0x01, + 0xa7, 0x7d, 0x42, 0x22, 0x00, 0x1c, 0x19, 0x00, 0xaa, 0x6b, 0xab, 0x5f, + 0x42, 0x74, 0x00, 0x17, 0x19, 0x00, 0x42, 0x6c, 0x00, 0x14, 0x19, 0x00, + 0xae, 0x47, 0xb0, 0x3b, 0x42, 0x71, 0x00, 0x16, 0x19, 0x00, 0xb3, 0x23, + 0xb4, 0x11, 0x42, 0xa9, 0x01, 0x18, 0x19, 0x00, 0x42, 0xbc, 0x22, 0x15, + 0x19, 0xc0, 0x00, 0xee, 0x0a, 0x19, 0x40, 0xe1, 0x0b, 0x19, 0x00, 0x42, + 0x22, 0x00, 0x0c, 0x19, 0x00, 0x42, 0x71, 0x00, 0x1e, 0x19, 0x40, 0xe1, + 0x1b, 0x19, 0x00, 0x42, 0x22, 0x00, 0x19, 0x19, 0x00, 0x42, 0x40, 0x06, + 0x1a, 0x19, 0x40, 0xe1, 0x10, 0x19, 0x00, 0x42, 0x22, 0x00, 0x11, 0x19, + 0x40, 0xe1, 0x0f, 0x19, 0x00, 0x42, 0x24, 0x02, 0x05, 0x19, 0x40, 0xe1, + 0x01, 0x19, 0x00, 0x42, 0x22, 0x00, 0x02, 0x19, 0x40, 0xe1, 0x08, 0x19, + 0x00, 0x42, 0x22, 0x00, 0x09, 0x19, 0x40, 0xe1, 0x03, 0x19, 0x00, 0x42, + 0x22, 0x00, 0x04, 0x19, 0x00, 0x43, 0xb8, 0x35, 0x1d, 0x19, 0x40, 0xe1, + 0x0d, 0x19, 0x00, 0x42, 0x22, 0x00, 0x0e, 0x19, 0x40, 0xe1, 0x06, 0x19, + 0x00, 0x42, 0x22, 0x00, 0x07, 0x19, 0x40, 0xe1, 0x12, 0x19, 0x00, 0x42, + 0x22, 0x00, 0x13, 0x19, 0x40, 0x45, 0x12, 0x0b, 0x4e, 0x19, 0x00, 0xa6, + 0x2e, 0x44, 0xcf, 0x2a, 0x4f, 0x19, 0x00, 0x43, 0x0e, 0x0b, 0x47, 0x19, + 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, 0x46, 0x19, 0x40, 0x44, + 0x25, 0x01, 0x49, 0x19, 0x00, 0x42, 0x15, 0x02, 0x48, 0x19, 0x40, 0x44, + 0xc9, 0x1d, 0x4d, 0x19, 0x00, 0x42, 0x01, 0x26, 0x4c, 0x19, 0x40, 0x43, + 0xd2, 0x05, 0x4b, 0x19, 0x00, 0x43, 0xf6, 0x06, 0x4a, 0x19, 0x40, 0x56, + 0x18, 0x29, 0x72, 0xf6, 0x01, 0x02, 0xcb, 0x00, 0x01, 0xff, 0x80, 0x14, + 0x44, 0x58, 0x07, 0x07, 0x26, 0xc0, 0x00, 0x45, 0xd7, 0xe1, 0xf2, 0xf5, + 0xc1, 0x00, 0x47, 0x75, 0x7c, 0xf1, 0xf5, 0x41, 0x4a, 0x49, 0xa8, 0x75, + 0xfa, 0x01, 0x4a, 0xa3, 0xa8, 0xf8, 0xf5, 0x01, 0x55, 0xc7, 0x3a, 0xbb, + 0xf7, 0x01, 0xa6, 0x48, 0x4b, 0x1b, 0x61, 0xa2, 0xf7, 0x01, 0x64, 0x73, + 0x09, 0x72, 0x27, 0x00, 0xb2, 0x2e, 0xb3, 0x1a, 0xb4, 0x0c, 0x4c, 0x32, + 0x00, 0x58, 0x27, 0x00, 0x4c, 0xf2, 0x1f, 0x8e, 0xf7, 0x41, 0x57, 0xb4, + 0x2e, 0xc0, 0xf7, 0x01, 0x58, 0xe6, 0x2b, 0xd2, 0xf7, 0x41, 0x46, 0x13, + 0x19, 0xa9, 0xf7, 0x01, 0x44, 0x4c, 0x04, 0x91, 0x25, 0x00, 0x52, 0xff, + 0x52, 0xb5, 0xf7, 0x41, 0x43, 0x90, 0x17, 0x88, 0xf6, 0x01, 0x64, 0x4f, + 0x09, 0x73, 0x27, 0x40, 0x04, 0xd2, 0x05, 0x11, 0x12, 0x00, 0x16, 0x01, + 0xff, 0x44, 0x12, 0x16, 0xcc, 0x2b, 0x00, 0x44, 0x31, 0x13, 0xc4, 0xf7, + 0x41, 0x52, 0xec, 0x2b, 0xc9, 0xf7, 0x01, 0x4f, 0xd5, 0x1c, 0xaf, 0xf7, + 0x41, 0x02, 0x44, 0x14, 0xc0, 0x15, 0x44, 0x89, 0xef, 0xd2, 0xf4, 0x01, + 0x02, 0xc5, 0x00, 0xcc, 0x05, 0xe7, 0xb5, 0xf9, 0x01, 0x43, 0xc3, 0x07, + 0x4b, 0xf3, 0x01, 0xef, 0x4c, 0x26, 0x80, 0xb6, 0x05, 0x05, 0xc5, 0xe9, + 0xda, 0x01, 0x08, 0xee, 0x00, 0x0c, 0x47, 0xb8, 0xd6, 0xd0, 0xce, 0x01, + 0x4a, 0x39, 0xb3, 0x9a, 0xf3, 0x41, 0xa1, 0x87, 0x01, 0x0b, 0xcb, 0x39, + 0x77, 0x4f, 0xc7, 0x6b, 0xa6, 0x2a, 0x80, 0x6a, 0x58, 0x86, 0x28, 0xda, + 0x22, 0x00, 0xaf, 0x1d, 0x44, 0x5a, 0x03, 0x3c, 0x00, 0x00, 0x05, 0x51, + 0x00, 0x01, 0xff, 0x4d, 0x73, 0x81, 0x79, 0x2a, 0x00, 0x43, 0x23, 0x0a, + 0xd6, 0x22, 0x00, 0x53, 0x50, 0x4c, 0x7b, 0x2a, 0x40, 0x02, 0x18, 0x00, + 0x06, 0x4c, 0xc3, 0x96, 0x66, 0x22, 0x40, 0x4b, 0xb0, 0x1e, 0x85, 0x2a, + 0x00, 0x03, 0x7b, 0x00, 0x25, 0x4c, 0x87, 0x00, 0x76, 0x22, 0x00, 0x50, + 0x36, 0x67, 0x7d, 0x2a, 0xc0, 0x00, 0x0a, 0x75, 0x3b, 0x01, 0xff, 0x45, + 0x5c, 0x00, 0x81, 0x2a, 0x80, 0x06, 0x46, 0xa7, 0x13, 0x7f, 0x2a, 0x40, + 0x46, 0xc7, 0x00, 0x83, 0x2a, 0x40, 0x45, 0xfb, 0x0c, 0x64, 0x22, 0x00, + 0x4a, 0xd6, 0x39, 0x72, 0x22, 0x40, 0x54, 0x93, 0x00, 0xa8, 0x2a, 0x40, + 0x45, 0xfb, 0x0c, 0x68, 0x22, 0x00, 0x4a, 0xd6, 0x39, 0xe6, 0x22, 0x40, + 0x05, 0x5d, 0x00, 0x11, 0x03, 0x1b, 0x00, 0x01, 0xff, 0x4f, 0xd1, 0x70, + 0x89, 0x2a, 0x00, 0x58, 0xf6, 0x2a, 0x87, 0x2a, 0x40, 0x64, 0xe3, 0x08, + 0x8b, 0x2a, 0x00, 0x64, 0x07, 0x09, 0x91, 0x2a, 0x00, 0x4f, 0x4d, 0x1a, + 0x76, 0x29, 0x00, 0xb3, 0x01, 0xff, 0x07, 0xf6, 0xd1, 0x06, 0x73, 0x74, + 0x00, 0x93, 0x2a, 0x40, 0x52, 0x81, 0x00, 0x8f, 0x2a, 0x00, 0x48, 0xf3, + 0x28, 0x8d, 0x2a, 0x40, 0x0f, 0x3d, 0x33, 0xa8, 0x03, 0x06, 0xef, 0x06, + 0xe1, 0x02, 0x07, 0xec, 0x05, 0x6e, 0x0c, 0x6d, 0x16, 0x48, 0xb3, 0x25, + 0x0b, 0x40, 0x77, 0x01, 0xff, 0x42, 0x80, 0x12, 0x26, 0x1c, 0x00, 0xe5, + 0x2c, 0x1c, 0x00, 0xe9, 0x27, 0x1c, 0x00, 0xef, 0x28, 0x1c, 0x80, 0x09, + 0xf5, 0x2a, 0x1c, 0xc0, 0x00, 0xf5, 0x2b, 0x1c, 0x40, 0xef, 0x29, 0x1c, + 0x40, 0x04, 0x5b, 0x03, 0x11, 0x10, 0xd6, 0x67, 0x01, 0xff, 0x42, 0x71, + 0x00, 0x25, 0x1c, 0x00, 0x42, 0xbc, 0x22, 0x24, 0x1c, 0x40, 0x45, 0x3f, + 0x3f, 0x37, 0x1c, 0x00, 0x43, 0x4f, 0x03, 0x36, 0x1c, 0x40, 0x46, 0x27, + 0xcd, 0x3d, 0x1c, 0x00, 0x52, 0xfb, 0x53, 0x3c, 0x1c, 0x00, 0xb4, 0x01, + 0xff, 0x45, 0x08, 0x54, 0x3b, 0x1c, 0x00, 0x45, 0xec, 0xea, 0x3f, 0x1c, + 0xc0, 0x00, 0x47, 0x26, 0xcd, 0x3e, 0x1c, 0x40, 0xe1, 0x23, 0x1c, 0x00, + 0xa2, 0xde, 0x01, 0xa3, 0xd1, 0x01, 0xa4, 0xbe, 0x01, 0xa6, 0xb1, 0x01, + 0xa7, 0xa4, 0x01, 0xa8, 0x97, 0x01, 0x42, 0x56, 0x19, 0x08, 0x1c, 0x00, + 0xab, 0x7f, 0x42, 0x74, 0x00, 0x1c, 0x1c, 0x00, 0xad, 0x6d, 0xae, 0x5b, + 0xb0, 0x49, 0x42, 0x71, 0x00, 0x1b, 0x1c, 0x00, 0xb3, 0x37, 0xb4, 0x12, + 0x42, 0xf5, 0x0a, 0x1f, 0x1c, 0x00, 0x42, 0xa9, 0x01, 0x22, 0x1c, 0x00, + 0x42, 0xbc, 0x22, 0x1a, 0x1c, 0x40, 0xe1, 0x0a, 0x1c, 0x00, 0x42, 0x22, + 0x00, 0x0b, 0x1c, 0x00, 0xb3, 0x0d, 0xb4, 0x01, 0xff, 0xe1, 0x4d, 0x1c, + 0x00, 0x42, 0x22, 0x00, 0x4e, 0x1c, 0x40, 0xe1, 0x17, 0x1c, 0x00, 0x42, + 0x22, 0x00, 0x18, 0x1c, 0x40, 0xe1, 0x20, 0x1c, 0x00, 0x42, 0x22, 0x00, + 0x21, 0x1c, 0x40, 0xe1, 0x0e, 0x1c, 0x00, 0x42, 0x22, 0x00, 0x10, 0x1c, + 0x00, 0x42, 0x74, 0x00, 0x0f, 0x1c, 0x40, 0xe1, 0x0d, 0x1c, 0x00, 0x42, + 0x24, 0x02, 0x05, 0x1c, 0x00, 0x42, 0xbc, 0x22, 0x09, 0x1c, 0x40, 0xe1, + 0x15, 0x1c, 0x00, 0x42, 0x74, 0x00, 0x16, 0x1c, 0x40, 0xe1, 0x00, 0x1c, + 0x00, 0x42, 0x22, 0x00, 0x02, 0x1c, 0x00, 0x42, 0x74, 0x00, 0x01, 0x1c, + 0x40, 0xe1, 0x1d, 0x1c, 0x00, 0x42, 0x74, 0x00, 0x1e, 0x1c, 0x40, 0xe1, + 0x03, 0x1c, 0x00, 0x42, 0x74, 0x00, 0x04, 0x1c, 0x40, 0xe1, 0x11, 0x1c, + 0x00, 0x42, 0x74, 0x00, 0x12, 0x1c, 0x40, 0xe1, 0x0c, 0x1c, 0x00, 0x42, + 0xf0, 0x10, 0x4f, 0x1c, 0x00, 0x42, 0x59, 0x00, 0x19, 0x1c, 0x40, 0xe1, + 0x06, 0x1c, 0x00, 0x42, 0x22, 0x00, 0x07, 0x1c, 0x40, 0xe1, 0x13, 0x1c, + 0x00, 0x42, 0x74, 0x00, 0x14, 0x1c, 0x40, 0x45, 0x12, 0x0b, 0x48, 0x1c, + 0x00, 0xa6, 0x2e, 0x44, 0xcf, 0x2a, 0x49, 0x1c, 0x00, 0x43, 0x0e, 0x0b, + 0x41, 0x1c, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, 0x40, 0x1c, + 0x40, 0x44, 0x25, 0x01, 0x43, 0x1c, 0x00, 0x42, 0x15, 0x02, 0x42, 0x1c, + 0x40, 0x44, 0xc9, 0x1d, 0x47, 0x1c, 0x00, 0x42, 0x01, 0x26, 0x46, 0x1c, + 0x40, 0x43, 0xd2, 0x05, 0x45, 0x1c, 0x00, 0x43, 0xf6, 0x06, 0x44, 0x1c, + 0x40, 0xeb, 0x2d, 0x1c, 0x80, 0x1f, 0xec, 0x2f, 0x1c, 0x00, 0xed, 0x2e, + 0x1c, 0x00, 0xee, 0x30, 0x1c, 0x80, 0x0c, 0xf0, 0x31, 0x1c, 0x00, 0xf2, + 0x32, 0x1c, 0x00, 0xf4, 0x33, 0x1c, 0x40, 0x46, 0x78, 0xe1, 0x34, 0x1c, + 0x40, 0x43, 0x1c, 0x01, 0x35, 0x1c, 0x40, 0x44, 0xf9, 0xf1, 0x06, 0xf4, + 0x41, 0x80, 0xaf, 0x08, 0x8d, 0xcc, 0x06, 0x06, 0xa9, 0x01, 0x01, 0xff, + 0x45, 0xce, 0x00, 0x90, 0x21, 0x80, 0xb1, 0x04, 0xa2, 0x92, 0x04, 0x50, + 0x86, 0x61, 0x3c, 0xf8, 0x01, 0xa4, 0xd2, 0x03, 0xa6, 0xc3, 0x03, 0xa8, + 0xc2, 0x02, 0x57, 0x6c, 0x2f, 0xa4, 0xf8, 0x01, 0x51, 0xf9, 0x5c, 0xfd, + 0x21, 0x00, 0xb0, 0xa7, 0x02, 0x4f, 0x0c, 0x72, 0x45, 0x2b, 0x00, 0xb2, + 0x92, 0x02, 0xb3, 0xf8, 0x01, 0xb4, 0x16, 0xb7, 0x01, 0xff, 0x49, 0x72, + 0xb6, 0x9c, 0x21, 0x00, 0x4a, 0x4a, 0x10, 0xe6, 0x21, 0xc0, 0x00, 0x5a, + 0xc6, 0x1e, 0x94, 0xf8, 0x41, 0x55, 0x52, 0x3d, 0xa2, 0xf8, 0x01, 0x02, + 0x0d, 0x00, 0x51, 0x02, 0x15, 0x02, 0x01, 0xff, 0x4d, 0x85, 0x7f, 0x9e, + 0x21, 0x00, 0x08, 0x09, 0x02, 0x01, 0xff, 0x06, 0xce, 0x00, 0x06, 0x51, + 0x91, 0x5e, 0x37, 0x2b, 0x40, 0x48, 0x57, 0xb4, 0x36, 0x2b, 0x00, 0x05, + 0x51, 0x00, 0x01, 0xff, 0x56, 0x95, 0x33, 0x35, 0x2b, 0x00, 0xb4, 0x06, + 0x4f, 0x9c, 0x33, 0x34, 0x2b, 0x40, 0x43, 0x90, 0x17, 0x3b, 0x2b, 0x80, + 0x06, 0x52, 0x2f, 0x06, 0xec, 0x2b, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, + 0x56, 0x95, 0x33, 0x3d, 0x2b, 0x00, 0x4f, 0x9c, 0x33, 0x3c, 0x2b, 0x40, + 0x05, 0x04, 0x02, 0x11, 0x04, 0x6d, 0x1d, 0x01, 0xff, 0x45, 0xce, 0x00, + 0xda, 0x21, 0x00, 0x4a, 0x98, 0x5e, 0x0e, 0x29, 0x40, 0x4a, 0xe0, 0x01, + 0x90, 0xf8, 0x01, 0x08, 0x09, 0x02, 0x01, 0xff, 0x45, 0xce, 0x00, 0x60, + 0x2b, 0x80, 0x0c, 0x4c, 0xc3, 0x8d, 0x6a, 0x2b, 0x00, 0x4d, 0x64, 0x87, + 0x84, 0x2b, 0x40, 0x80, 0x01, 0xff, 0x65, 0x51, 0x08, 0x80, 0x2b, 0x00, + 0x46, 0xd1, 0x14, 0x70, 0x2b, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x4a, + 0x53, 0xa8, 0x28, 0xf8, 0x01, 0x07, 0x3b, 0x01, 0x28, 0x4b, 0x6b, 0x68, + 0x2c, 0xf8, 0x01, 0x09, 0xaf, 0xbb, 0x12, 0x4c, 0xef, 0x91, 0x24, 0xf8, + 0x01, 0x4c, 0x5b, 0x92, 0x20, 0xf8, 0x01, 0x50, 0x66, 0x68, 0x30, 0xf8, + 0x41, 0x49, 0xa5, 0x01, 0xa6, 0x2b, 0x00, 0x47, 0x50, 0x02, 0xa4, 0x2b, + 0x40, 0x51, 0x47, 0x05, 0x7a, 0x2b, 0x00, 0x4f, 0x9c, 0x33, 0x7a, 0x2b, + 0x40, 0x4f, 0xe7, 0x66, 0x50, 0xf8, 0x01, 0x02, 0x7c, 0x00, 0x01, 0xff, + 0x4a, 0xe9, 0x93, 0x38, 0xf8, 0x01, 0x4b, 0x80, 0x7c, 0xdc, 0x21, 0x40, + 0x57, 0x10, 0x2f, 0xa6, 0xf8, 0x01, 0x45, 0x9d, 0xae, 0x6c, 0xf6, 0x41, + 0x4c, 0x65, 0x87, 0xc7, 0x21, 0x00, 0x4b, 0x84, 0xa4, 0xf7, 0xfa, 0x41, + 0xa1, 0x11, 0x05, 0x6e, 0x15, 0x01, 0xff, 0x45, 0xce, 0x00, 0x44, 0xf8, + 0x01, 0x50, 0x86, 0x61, 0x40, 0xf8, 0x41, 0x42, 0x1b, 0x00, 0xf2, 0xfa, + 0x01, 0x06, 0xcb, 0x02, 0x01, 0xff, 0x57, 0x0d, 0x30, 0xcb, 0x21, 0x00, + 0x0a, 0x98, 0x05, 0x01, 0xff, 0x04, 0xa5, 0x01, 0x31, 0x02, 0x50, 0x02, + 0x01, 0xff, 0x80, 0x06, 0x45, 0xa9, 0x01, 0xbc, 0x21, 0x40, 0x06, 0x5c, + 0x00, 0x0c, 0x48, 0x57, 0xb4, 0x5a, 0x29, 0x00, 0x46, 0xd1, 0x14, 0x52, + 0x29, 0x40, 0xac, 0x06, 0x5f, 0x8c, 0x11, 0x66, 0x29, 0x40, 0x5f, 0x48, + 0x06, 0x62, 0x29, 0x00, 0x48, 0x38, 0x6b, 0x6a, 0x29, 0x40, 0x80, 0x06, + 0x45, 0xa9, 0x01, 0xbd, 0x21, 0x40, 0x67, 0x7f, 0x05, 0x67, 0x29, 0x00, + 0x4f, 0x31, 0x6b, 0x6b, 0x29, 0x00, 0x48, 0x57, 0xb4, 0x5e, 0x29, 0x00, + 0x46, 0xd1, 0x14, 0x56, 0x29, 0x40, 0x50, 0xfd, 0x59, 0x34, 0xf8, 0x01, + 0x60, 0x34, 0x10, 0xaa, 0xf8, 0x41, 0x4b, 0xc4, 0x8d, 0xe0, 0x21, 0x00, + 0x06, 0x3c, 0x01, 0x01, 0xff, 0x45, 0xce, 0x00, 0xd0, 0x21, 0x80, 0x06, + 0x4a, 0x98, 0x5e, 0x0c, 0x29, 0x40, 0x80, 0x06, 0x45, 0x8e, 0x17, 0x1b, + 0x29, 0x40, 0x48, 0x57, 0xb4, 0x06, 0x29, 0x00, 0x05, 0x51, 0x00, 0x01, + 0xff, 0x46, 0x52, 0x05, 0xcd, 0x21, 0x00, 0x4f, 0x9c, 0x33, 0x02, 0x29, + 0x40, 0x5f, 0xb3, 0x10, 0xa8, 0xf8, 0x01, 0x05, 0x0d, 0x03, 0x06, 0x58, + 0x7e, 0x2a, 0xa0, 0xf8, 0x41, 0x45, 0xce, 0x00, 0x05, 0x2b, 0x00, 0x53, + 0xd3, 0x48, 0x88, 0x2b, 0x40, 0x80, 0x06, 0x45, 0x8e, 0x17, 0x19, 0x29, + 0x40, 0xa1, 0xd7, 0x01, 0x05, 0xaa, 0x05, 0xbf, 0x01, 0x55, 0xbb, 0x14, + 0xc6, 0x21, 0x00, 0xb4, 0x8a, 0x01, 0x05, 0x51, 0x00, 0x01, 0xff, 0x02, + 0x3b, 0x01, 0x75, 0x55, 0xd5, 0x01, 0x14, 0xf8, 0x01, 0x44, 0xac, 0x0e, + 0xa9, 0x21, 0x00, 0xac, 0x5b, 0x59, 0xe3, 0x24, 0x04, 0xf8, 0x01, 0x4c, + 0xd3, 0x92, 0x98, 0xf8, 0x01, 0x4a, 0x83, 0xaf, 0x46, 0x29, 0x00, 0xb3, + 0x31, 0xb4, 0x06, 0x4f, 0x9c, 0x33, 0xf7, 0x21, 0x40, 0x43, 0x90, 0x17, + 0xa2, 0x21, 0x80, 0x11, 0x03, 0x4a, 0x0c, 0x01, 0xff, 0x49, 0xa5, 0x01, + 0x10, 0x2b, 0x00, 0x47, 0x50, 0x02, 0x11, 0x2b, 0x40, 0x06, 0x50, 0x00, + 0x01, 0xff, 0x56, 0x95, 0x33, 0x3a, 0x2b, 0x00, 0x4f, 0x9c, 0x33, 0x39, + 0x2b, 0x40, 0x05, 0x5e, 0x07, 0x06, 0x45, 0x53, 0x05, 0x9a, 0x21, 0x40, + 0x55, 0xd5, 0x01, 0x10, 0xf8, 0x01, 0x52, 0x2e, 0x06, 0x00, 0xf8, 0x41, + 0x57, 0x77, 0x29, 0x08, 0xf8, 0x01, 0x43, 0xca, 0x4b, 0xab, 0x21, 0x40, + 0x49, 0x14, 0xc0, 0x38, 0x2b, 0x00, 0x54, 0x97, 0x33, 0xfa, 0x21, 0x40, + 0x07, 0x16, 0x2b, 0x18, 0x03, 0xd2, 0x14, 0x01, 0xff, 0x42, 0x17, 0x00, + 0xe4, 0x21, 0x80, 0x06, 0x4c, 0x59, 0x57, 0x1d, 0x29, 0x40, 0x5d, 0xba, + 0x14, 0xb9, 0x21, 0x40, 0x49, 0xec, 0x00, 0x77, 0x29, 0x00, 0x46, 0x99, + 0x12, 0x7a, 0x29, 0x00, 0xf8, 0x3e, 0x2b, 0x40, 0x43, 0x16, 0x00, 0xa4, + 0x21, 0x80, 0x06, 0x4f, 0x34, 0x0c, 0xc0, 0xf8, 0x41, 0x51, 0x54, 0x57, + 0x1f, 0x29, 0x40, 0x05, 0x5d, 0x00, 0x06, 0x63, 0xfb, 0x0a, 0xb5, 0xfb, + 0x41, 0x4f, 0xaa, 0x6a, 0x4a, 0x2b, 0x00, 0x08, 0x66, 0x72, 0x0c, 0x56, + 0x31, 0x37, 0x43, 0x29, 0x00, 0x4e, 0x78, 0x3e, 0x73, 0x29, 0x40, 0x4f, + 0xaa, 0x6a, 0x42, 0x2b, 0x00, 0x4e, 0x78, 0x3e, 0x4b, 0x2b, 0x40, 0x07, + 0x6f, 0x2e, 0x9c, 0x01, 0x5b, 0x85, 0x1b, 0xe6, 0x26, 0x00, 0x09, 0x9c, + 0x01, 0x2b, 0xb3, 0x1d, 0x09, 0x51, 0x44, 0x01, 0xff, 0x49, 0x58, 0xb8, + 0x2a, 0x20, 0x00, 0x47, 0x5f, 0x03, 0x66, 0x20, 0x00, 0x44, 0xb9, 0x00, + 0x0e, 0x20, 0x00, 0x48, 0xb0, 0xc9, 0x2d, 0x20, 0x40, 0x5c, 0xde, 0x17, + 0xaa, 0x27, 0x00, 0x5b, 0xbb, 0x1b, 0x39, 0x29, 0x40, 0xa1, 0x53, 0x54, + 0x68, 0x41, 0xfc, 0x29, 0x00, 0xa4, 0x3f, 0x4b, 0xaa, 0x9b, 0x78, 0xcc, + 0x01, 0x50, 0xf6, 0x64, 0x0d, 0xf5, 0x01, 0xb2, 0x0c, 0x4c, 0x73, 0x95, + 0x02, 0xcc, 0x01, 0x44, 0x75, 0xc7, 0x9e, 0xcc, 0x41, 0x49, 0x9a, 0xb5, + 0x97, 0xcc, 0x01, 0x44, 0xc5, 0xac, 0x65, 0xcc, 0x01, 0xaf, 0x01, 0xff, + 0x05, 0x66, 0x09, 0x06, 0x50, 0xb6, 0x64, 0xa2, 0xcc, 0x41, 0x47, 0x9c, + 0xcf, 0xa0, 0xcc, 0x01, 0x44, 0x11, 0x21, 0x56, 0xcc, 0x41, 0x44, 0x9d, + 0xf0, 0x0e, 0xcc, 0x01, 0x5a, 0xb8, 0x21, 0xab, 0x00, 0x40, 0x47, 0x12, + 0x34, 0xf9, 0xcd, 0x01, 0x4c, 0x3f, 0x0f, 0x29, 0x23, 0x00, 0x4a, 0x03, + 0xb2, 0x60, 0xcc, 0x41, 0x56, 0xe5, 0x32, 0x8e, 0x05, 0x00, 0x48, 0xf0, + 0xc3, 0x48, 0xcc, 0x01, 0x03, 0x2a, 0x5b, 0x20, 0xb3, 0x01, 0xff, 0x0f, + 0x77, 0x2e, 0x0d, 0x4a, 0x2f, 0xb3, 0xd6, 0x0f, 0xc0, 0x00, 0x4a, 0x26, + 0x59, 0xd8, 0x0f, 0x40, 0x4c, 0x7b, 0x8d, 0x74, 0xcc, 0x01, 0x4a, 0x3c, + 0x29, 0x70, 0xcc, 0x41, 0xe8, 0x92, 0xcc, 0x81, 0x04, 0xf4, 0x1b, 0xf9, + 0x41, 0x50, 0x36, 0x29, 0x94, 0xcc, 0x41, 0xa1, 0xbd, 0x06, 0xa2, 0x84, + 0x06, 0xa3, 0xd3, 0x05, 0x02, 0x3b, 0x01, 0xab, 0x05, 0xa6, 0x94, 0x05, + 0x02, 0x22, 0x00, 0x86, 0x04, 0x15, 0x6b, 0x3c, 0xf5, 0x03, 0xac, 0xe6, + 0x03, 0x48, 0x5f, 0x77, 0xdc, 0x27, 0x00, 0x60, 0xd4, 0x0f, 0xc9, 0x22, + 0x00, 0xaf, 0xbb, 0x03, 0x4b, 0xd8, 0x21, 0x28, 0x00, 0x80, 0x9e, 0x03, + 0xb2, 0xaa, 0x02, 0xb3, 0xb0, 0x01, 0xb4, 0x49, 0x0a, 0x32, 0x00, 0x39, + 0xb7, 0x01, 0xff, 0x05, 0xae, 0x02, 0x0c, 0x4b, 0xf4, 0x96, 0xd8, 0x29, + 0x00, 0x4b, 0x32, 0xa2, 0x8e, 0xf5, 0x41, 0xa3, 0x18, 0x52, 0x6c, 0x27, + 0x16, 0x30, 0x00, 0x4b, 0xd8, 0x21, 0x85, 0x29, 0x00, 0x4e, 0xc8, 0x26, + 0x1a, 0x30, 0x00, 0x56, 0x54, 0x09, 0x18, 0x30, 0x40, 0x4d, 0x35, 0x69, + 0x0e, 0x30, 0x00, 0x4c, 0x73, 0x0b, 0x83, 0x29, 0x40, 0x4d, 0x96, 0x80, + 0x20, 0x2e, 0x00, 0x47, 0x65, 0xd4, 0xb8, 0x23, 0x40, 0x43, 0x0e, 0x03, + 0xa3, 0x22, 0x00, 0xa8, 0x25, 0x55, 0x55, 0x09, 0x14, 0x30, 0x00, 0xb2, + 0x06, 0x4f, 0xeb, 0x74, 0xce, 0xfb, 0x41, 0x53, 0x15, 0x48, 0x09, 0x2e, + 0x00, 0x04, 0x1b, 0x01, 0x01, 0xff, 0x56, 0x21, 0x35, 0xcf, 0x29, 0x00, + 0x56, 0x3a, 0x1d, 0x6c, 0xfb, 0x41, 0x04, 0x3a, 0x89, 0x28, 0x4c, 0x87, + 0x93, 0xec, 0xf5, 0x01, 0x04, 0x26, 0x01, 0x01, 0xff, 0x4d, 0x01, 0x4d, + 0x8d, 0x25, 0x00, 0x09, 0x2a, 0x01, 0x01, 0xff, 0x45, 0x33, 0x01, 0x8a, + 0x25, 0x00, 0x57, 0x83, 0x2f, 0xa2, 0xce, 0x01, 0x57, 0x94, 0x31, 0xa9, + 0xce, 0x41, 0x48, 0x08, 0xc7, 0x0b, 0xcc, 0x01, 0x5a, 0x88, 0x22, 0xc1, + 0xfb, 0x41, 0x55, 0xcf, 0x38, 0xc5, 0x27, 0x00, 0xa5, 0x63, 0xa9, 0x55, + 0x4c, 0x70, 0x7c, 0xe8, 0xf5, 0x01, 0x4d, 0xc9, 0x26, 0x5b, 0x00, 0x80, + 0x06, 0x53, 0xab, 0x26, 0x02, 0x2e, 0x40, 0x80, 0x01, 0xff, 0x49, 0xc1, + 0x58, 0xa2, 0x23, 0x00, 0x4c, 0x6b, 0x91, 0xa3, 0x23, 0x00, 0x4c, 0x87, + 0x96, 0xa1, 0x23, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x4d, 0x36, 0x82, + 0x57, 0x2e, 0x00, 0x45, 0x9e, 0x80, 0x45, 0x20, 0x00, 0x46, 0x52, 0x05, + 0x55, 0x2e, 0x00, 0x08, 0x90, 0xcb, 0x06, 0x48, 0xe3, 0x59, 0x8b, 0x29, + 0x40, 0x4d, 0x32, 0x81, 0x8f, 0x29, 0x00, 0x4a, 0x0d, 0xb2, 0x8d, 0x29, + 0x40, 0x50, 0xd6, 0x61, 0x26, 0x2e, 0x00, 0x53, 0x97, 0x0b, 0x18, 0x20, + 0x40, 0x50, 0xe4, 0x0f, 0xcb, 0x22, 0x00, 0x51, 0xfd, 0x4c, 0x89, 0x25, + 0x40, 0x56, 0x81, 0x30, 0x0c, 0x2e, 0x00, 0x05, 0xc9, 0x00, 0x01, 0xff, + 0x45, 0xce, 0x00, 0x94, 0x21, 0x80, 0x3f, 0x4b, 0xa5, 0x99, 0x0c, 0x2b, + 0x00, 0x4c, 0x2f, 0x8e, 0xd4, 0x21, 0x80, 0x21, 0x51, 0xf9, 0x5c, 0xff, + 0x21, 0x00, 0x50, 0xe6, 0x66, 0x58, 0xf8, 0x01, 0x55, 0x01, 0x02, 0x64, + 0x2b, 0x00, 0xb7, 0x01, 0xff, 0x49, 0x72, 0xb6, 0xad, 0x21, 0x00, 0x4a, + 0x4a, 0x10, 0x04, 0x2b, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x46, 0x52, + 0x05, 0xce, 0x21, 0x00, 0x4f, 0x9c, 0x33, 0x04, 0x29, 0x40, 0x80, 0x01, + 0xff, 0x54, 0x18, 0x46, 0x48, 0x29, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, + 0x56, 0x95, 0x33, 0xfc, 0x21, 0x00, 0x46, 0x52, 0x05, 0xae, 0x21, 0x00, + 0x4f, 0x9c, 0x33, 0xf9, 0x21, 0x40, 0x80, 0x01, 0xff, 0x49, 0xc1, 0x58, + 0x9c, 0x23, 0x00, 0x4a, 0x67, 0xad, 0x9d, 0x23, 0x00, 0x4a, 0xdf, 0xb2, + 0x9b, 0x23, 0x40, 0x03, 0xef, 0x07, 0x06, 0x49, 0x52, 0xaf, 0xd5, 0x27, + 0x40, 0x4c, 0x12, 0x0b, 0x8f, 0x25, 0x00, 0x4d, 0x43, 0x1d, 0x8e, 0x25, + 0x00, 0x4b, 0x66, 0xa3, 0xcf, 0xfb, 0x41, 0x55, 0x90, 0x35, 0x1c, 0x2e, + 0x00, 0x46, 0xee, 0xe0, 0xc5, 0xf6, 0x41, 0x4c, 0x0c, 0x03, 0xeb, 0xfb, + 0x01, 0x4c, 0x32, 0x11, 0xe3, 0xfb, 0x41, 0x03, 0x24, 0x00, 0x06, 0x55, + 0x13, 0x3d, 0x7b, 0xf5, 0x41, 0x02, 0x33, 0x01, 0x65, 0x46, 0x12, 0x03, + 0x07, 0xf9, 0x81, 0x3e, 0xa6, 0x30, 0x65, 0xe2, 0x07, 0x10, 0xce, 0x01, + 0x69, 0x3c, 0x04, 0x94, 0xfb, 0x01, 0x57, 0x83, 0x2f, 0xa3, 0xce, 0x01, + 0x4c, 0x44, 0x04, 0x8c, 0xfb, 0x01, 0x4b, 0x69, 0xa2, 0xb2, 0xfb, 0x01, + 0x56, 0x73, 0x37, 0x0d, 0xce, 0x01, 0x57, 0x94, 0x31, 0xa8, 0xce, 0x01, + 0x4d, 0x97, 0x8a, 0x0b, 0xce, 0x41, 0x4c, 0x9b, 0x91, 0xa4, 0xcc, 0x01, + 0x45, 0xcc, 0x65, 0xb9, 0xfb, 0x41, 0x06, 0x50, 0x00, 0x01, 0xff, 0x43, + 0x23, 0x0a, 0x06, 0xf9, 0x01, 0x49, 0xd1, 0x46, 0x03, 0xf9, 0x01, 0xb4, + 0x01, 0xff, 0x49, 0x2b, 0x10, 0x04, 0xf9, 0x01, 0x47, 0x20, 0x0a, 0x05, + 0xf9, 0x41, 0x04, 0x0e, 0x03, 0x06, 0x43, 0x35, 0x01, 0x8c, 0x25, 0x40, + 0x46, 0x12, 0x03, 0xd6, 0x25, 0x00, 0x44, 0x31, 0x13, 0xe8, 0x2b, 0x40, + 0xa9, 0x06, 0x44, 0x59, 0x24, 0x0a, 0x23, 0x40, 0x47, 0xfc, 0xb8, 0x7c, + 0x29, 0x00, 0x50, 0xab, 0x51, 0x8b, 0x25, 0x40, 0x59, 0xa5, 0x26, 0x04, + 0x2e, 0x00, 0x05, 0x3d, 0x01, 0x01, 0xff, 0x4d, 0x3e, 0x0f, 0x0a, 0x30, + 0x00, 0x4b, 0xd8, 0x21, 0x28, 0x2e, 0x00, 0x4e, 0x19, 0x05, 0x1c, 0x20, + 0x00, 0x4c, 0xf3, 0x96, 0xda, 0x29, 0x40, 0x46, 0x91, 0xc4, 0x08, 0x23, + 0x00, 0x4b, 0xd8, 0x9e, 0xdc, 0x26, 0x00, 0x4d, 0x35, 0x69, 0x0c, 0x30, + 0x00, 0x4c, 0x73, 0x0b, 0x7b, 0x00, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x4a, + 0x67, 0xad, 0xa9, 0x23, 0x00, 0x4c, 0x07, 0x92, 0xa8, 0x23, 0x00, 0x4a, + 0xdf, 0xb2, 0xa7, 0x23, 0x40, 0x04, 0x9e, 0x05, 0x11, 0x05, 0x0d, 0x03, + 0x01, 0xff, 0x52, 0x6c, 0x27, 0x10, 0x30, 0x00, 0x56, 0x54, 0x09, 0x97, + 0x29, 0x40, 0x10, 0x56, 0x62, 0x11, 0x0e, 0x13, 0x7e, 0x01, 0xff, 0x4c, + 0x3b, 0x8e, 0x4a, 0x29, 0x00, 0x4a, 0xc1, 0xb2, 0x4e, 0x29, 0x40, 0x4c, + 0x3b, 0x8e, 0x50, 0x29, 0x00, 0x4a, 0xc1, 0xb2, 0x4b, 0x29, 0x40, 0xae, + 0x1a, 0xb2, 0x01, 0xff, 0x53, 0x58, 0x1d, 0x93, 0x29, 0x00, 0x09, 0x25, + 0x06, 0x01, 0xff, 0x4c, 0x57, 0x8d, 0x32, 0x2b, 0x00, 0x4c, 0x3f, 0x15, + 0x30, 0x2b, 0x40, 0x02, 0x06, 0x00, 0x16, 0xa7, 0x01, 0xff, 0x49, 0x7c, + 0xb8, 0xee, 0xf5, 0x01, 0x4a, 0x41, 0x0f, 0x08, 0x30, 0xc0, 0x00, 0x49, + 0x75, 0x3b, 0x91, 0x29, 0x40, 0x06, 0x13, 0x01, 0x31, 0x06, 0xc8, 0x00, + 0x18, 0x06, 0x6d, 0x02, 0x01, 0xff, 0x69, 0x13, 0x04, 0x6b, 0xfb, 0x01, + 0x50, 0x0e, 0x0b, 0x7d, 0xfb, 0xc1, 0x00, 0x5e, 0x27, 0x12, 0x8e, 0xcc, + 0x41, 0x50, 0x36, 0x62, 0xda, 0x27, 0x00, 0xb4, 0x01, 0xff, 0x43, 0x0e, + 0x03, 0xdb, 0x27, 0x00, 0x54, 0xa3, 0x3e, 0x9b, 0xfb, 0x41, 0x69, 0x13, + 0x04, 0x69, 0xfb, 0x01, 0x50, 0x0e, 0x0b, 0x7c, 0xfb, 0x41, 0x53, 0x6a, + 0x47, 0x43, 0xf3, 0x01, 0x49, 0x5e, 0xbb, 0xbe, 0xfa, 0x01, 0x47, 0xb4, + 0xd7, 0x6c, 0xf9, 0x41, 0xa2, 0xdd, 0x4b, 0x55, 0xe0, 0x39, 0x4d, 0xf9, + 0x01, 0xa4, 0xc8, 0x4b, 0xae, 0xb9, 0x4b, 0x02, 0x7b, 0x02, 0xdd, 0x46, + 0xb2, 0xda, 0x41, 0x4f, 0x38, 0x73, 0x3e, 0x26, 0x80, 0xc3, 0x41, 0x04, + 0xe0, 0x05, 0x01, 0xff, 0xa3, 0xd3, 0x28, 0x12, 0x61, 0x51, 0xa8, 0x28, + 0x07, 0xec, 0x05, 0x87, 0x25, 0xb3, 0x01, 0xff, 0x05, 0x5e, 0x07, 0x50, + 0x16, 0xb5, 0x37, 0x01, 0xff, 0xe1, 0x90, 0x20, 0x00, 0xe5, 0x91, 0x20, + 0x00, 0xe8, 0x95, 0x20, 0x00, 0xe9, 0x62, 0x1d, 0x00, 0xea, 0x7c, 0x2c, + 0x00, 0xeb, 0x96, 0x20, 0x00, 0xec, 0x97, 0x20, 0x00, 0xed, 0x98, 0x20, + 0x00, 0xee, 0x99, 0x20, 0x00, 0xef, 0x92, 0x20, 0x00, 0xf0, 0x9a, 0x20, + 0x00, 0xf2, 0x63, 0x1d, 0x00, 0xf3, 0x9b, 0x20, 0x80, 0x10, 0xf4, 0x9c, + 0x20, 0x00, 0xf5, 0x64, 0x1d, 0x00, 0xf6, 0x65, 0x1d, 0x00, 0xf8, 0x93, + 0x20, 0x40, 0x44, 0xb5, 0x7b, 0x94, 0x20, 0x40, 0x0f, 0xe4, 0x05, 0x9f, + 0x24, 0xac, 0x01, 0xff, 0x06, 0xed, 0x05, 0x34, 0x08, 0x9d, 0x1f, 0x01, + 0xff, 0xa6, 0x18, 0x42, 0x5f, 0xc7, 0x33, 0x01, 0x00, 0x48, 0xe8, 0xc7, + 0x05, 0xfb, 0x00, 0x42, 0x60, 0x51, 0x53, 0x01, 0x00, 0x42, 0x60, 0x01, + 0x06, 0xfb, 0x40, 0xe6, 0x00, 0xfb, 0x80, 0x08, 0xe9, 0x01, 0xfb, 0x00, + 0xec, 0x02, 0xfb, 0x40, 0xe9, 0x03, 0xfb, 0x00, 0xec, 0x04, 0xfb, 0x40, + 0xe1, 0x61, 0x00, 0x80, 0xa7, 0x21, 0xe2, 0x62, 0x00, 0x80, 0xa4, 0x20, + 0xe3, 0x63, 0x00, 0x80, 0x86, 0x1f, 0xe4, 0x64, 0x00, 0x80, 0x81, 0x1d, + 0xe5, 0x65, 0x00, 0x80, 0x9b, 0x1a, 0xe6, 0x66, 0x00, 0x80, 0xe6, 0x19, + 0xe7, 0x67, 0x00, 0x80, 0xf5, 0x18, 0xe8, 0x68, 0x00, 0x80, 0x83, 0x18, + 0xe9, 0x69, 0x00, 0x80, 0xbb, 0x16, 0xea, 0x6a, 0x00, 0x80, 0x96, 0x16, + 0xeb, 0x6b, 0x00, 0x80, 0xb9, 0x15, 0xec, 0x6c, 0x00, 0x80, 0xad, 0x13, + 0xed, 0x6d, 0x00, 0x80, 0xd6, 0x12, 0xee, 0x6e, 0x00, 0x80, 0xb8, 0x11, + 0xef, 0x6f, 0x00, 0x80, 0xc8, 0x0e, 0xf0, 0x70, 0x00, 0x80, 0xf7, 0x0d, + 0xf1, 0x71, 0x00, 0x80, 0xce, 0x0d, 0xf2, 0x72, 0x00, 0x80, 0xc9, 0x0b, + 0xf3, 0x73, 0x00, 0x80, 0xb7, 0x09, 0xf4, 0x74, 0x00, 0x80, 0xe2, 0x05, + 0xf5, 0x75, 0x00, 0x80, 0xb4, 0x03, 0xf6, 0x76, 0x00, 0x80, 0xd8, 0x02, + 0xf7, 0x77, 0x00, 0x80, 0x96, 0x02, 0xf8, 0x78, 0x00, 0x80, 0xd7, 0x01, + 0xf9, 0x79, 0x00, 0x80, 0x6a, 0xfa, 0x7a, 0x00, 0xc0, 0x00, 0x06, 0x50, + 0x00, 0x01, 0xff, 0x45, 0xf9, 0x38, 0x7a, 0x01, 0x00, 0xa3, 0x46, 0xa4, + 0x2d, 0x44, 0xac, 0x0e, 0x25, 0x02, 0x00, 0x4a, 0x9d, 0x6d, 0x95, 0x1e, + 0x00, 0x4c, 0x2e, 0x23, 0x76, 0x1d, 0x00, 0x4c, 0xf3, 0x56, 0x8e, 0x1d, + 0x00, 0x4e, 0xa2, 0x0e, 0x90, 0x02, 0x00, 0xb3, 0x01, 0xff, 0x45, 0x53, + 0x05, 0xb6, 0x01, 0x00, 0x49, 0x3d, 0xc1, 0x40, 0x02, 0x40, 0x48, 0x1e, + 0x2b, 0x6c, 0x2c, 0x00, 0x03, 0x04, 0x0c, 0x01, 0xff, 0x45, 0x5c, 0x00, + 0x7c, 0x01, 0x00, 0x45, 0x20, 0x07, 0x93, 0x1e, 0x40, 0x44, 0xe7, 0x6c, + 0x7e, 0x01, 0x00, 0x49, 0xd0, 0x04, 0x91, 0x1e, 0x00, 0x43, 0x73, 0x0b, + 0x91, 0x02, 0x40, 0x06, 0x50, 0x00, 0x06, 0x43, 0x25, 0x52, 0x1d, 0x02, + 0x40, 0x45, 0xf9, 0x38, 0xfd, 0x00, 0x00, 0x4a, 0xcf, 0x04, 0x77, 0x01, + 0x00, 0xa4, 0x39, 0x45, 0x15, 0x23, 0xf3, 0x1e, 0x00, 0x44, 0xac, 0x0e, + 0xb4, 0x01, 0x80, 0x26, 0x44, 0x42, 0x85, 0xff, 0x1e, 0x00, 0x46, 0xad, + 0x70, 0x33, 0x02, 0x00, 0x4a, 0x5f, 0xb0, 0x99, 0x1e, 0x00, 0xb3, 0x06, + 0x45, 0x35, 0x23, 0xf9, 0x1e, 0x40, 0x4e, 0x97, 0x38, 0x5a, 0xab, 0x00, + 0x45, 0x53, 0x05, 0x4f, 0x02, 0x40, 0x46, 0x5b, 0x00, 0xf7, 0x1e, 0x40, + 0x48, 0xb8, 0x23, 0xff, 0x00, 0x00, 0x03, 0x04, 0x0c, 0x01, 0xff, 0x45, + 0x5c, 0x00, 0x8f, 0x1e, 0x00, 0x45, 0x20, 0x07, 0xf5, 0x1e, 0x40, 0x06, + 0x50, 0x00, 0x01, 0xff, 0xa4, 0x26, 0x02, 0x13, 0x01, 0x06, 0x4c, 0xf3, + 0x56, 0x8d, 0x1d, 0x40, 0x4b, 0x0c, 0xa0, 0x57, 0xab, 0x80, 0x06, 0x4c, + 0x23, 0x50, 0x56, 0xab, 0x40, 0x80, 0x01, 0xff, 0x52, 0x1d, 0x50, 0x58, + 0xab, 0x00, 0x4a, 0x53, 0x29, 0x59, 0xab, 0x40, 0x48, 0xb8, 0x23, 0x8d, + 0x1e, 0x00, 0x48, 0x3b, 0x1e, 0x8b, 0x1e, 0x40, 0x06, 0x50, 0x00, 0x01, + 0xff, 0x45, 0xf9, 0x38, 0x83, 0x1e, 0x00, 0x4a, 0xcf, 0x04, 0x75, 0x01, + 0x00, 0xa4, 0x12, 0x45, 0x15, 0x23, 0x81, 0x1e, 0x00, 0x44, 0xac, 0x0e, + 0x73, 0x2c, 0x00, 0x4a, 0x5f, 0xb0, 0x98, 0x1e, 0x40, 0x48, 0xb8, 0x23, + 0x85, 0x1e, 0x00, 0x03, 0x04, 0x0c, 0x01, 0xff, 0x45, 0x5c, 0x00, 0x87, + 0x1e, 0x00, 0x45, 0x20, 0x07, 0x89, 0x1e, 0x40, 0x06, 0x50, 0x00, 0x26, + 0x43, 0x40, 0x05, 0x69, 0xa7, 0x00, 0x4b, 0xba, 0x9d, 0x63, 0xa7, 0x00, + 0x07, 0xd2, 0xd3, 0x04, 0xf9, 0x61, 0xa7, 0x40, 0x42, 0x93, 0x0f, 0x9b, + 0xa7, 0x00, 0x42, 0x60, 0x51, 0x9d, 0xa7, 0x00, 0x42, 0xd6, 0x13, 0x9f, + 0xa7, 0x40, 0x44, 0x72, 0x0b, 0x74, 0x2c, 0x00, 0xa4, 0x18, 0x44, 0xac, + 0x0e, 0x8b, 0x02, 0x00, 0x4c, 0xf3, 0x56, 0x8c, 0x1d, 0x00, 0x4a, 0x4b, + 0xb0, 0x71, 0x2c, 0x00, 0x45, 0x35, 0x23, 0x7d, 0x1e, 0x40, 0x4e, 0x8e, + 0x3f, 0x5f, 0xa7, 0x00, 0x48, 0xa0, 0x12, 0x7f, 0x1e, 0x40, 0x80, 0x1d, + 0xe5, 0x6b, 0x1d, 0x00, 0xe9, 0x50, 0xab, 0x00, 0xed, 0x78, 0xa7, 0x00, + 0xef, 0x63, 0xab, 0x00, 0x46, 0xcf, 0x15, 0x8a, 0x02, 0xc0, 0x00, 0x4c, + 0xda, 0x28, 0x7f, 0x1d, 0x40, 0x43, 0x16, 0x00, 0x89, 0x02, 0x80, 0xfb, + 0x01, 0x05, 0x51, 0x00, 0x01, 0xff, 0x45, 0xf9, 0x38, 0xfa, 0x00, 0x00, + 0x45, 0x53, 0x23, 0x6d, 0x01, 0x00, 0xa3, 0xd4, 0x01, 0xa4, 0x8b, 0x01, + 0x45, 0x15, 0x23, 0xf9, 0x00, 0x00, 0x02, 0x0b, 0x00, 0x51, 0x4e, 0x5e, + 0x23, 0x17, 0x02, 0x00, 0x49, 0xb1, 0x57, 0x52, 0xab, 0x00, 0x46, 0xad, + 0x70, 0x6b, 0x01, 0x80, 0x38, 0x46, 0xba, 0xde, 0x73, 0x01, 0x00, 0xb2, + 0x24, 0xb3, 0x16, 0x45, 0x35, 0x23, 0x69, 0x01, 0xc0, 0x00, 0x80, 0x01, + 0xff, 0x49, 0x98, 0xa5, 0x79, 0x1e, 0x00, 0x45, 0x20, 0x07, 0x75, 0x1e, + 0x40, 0x4e, 0x97, 0x38, 0x4e, 0xab, 0x00, 0x45, 0x53, 0x05, 0xb9, 0xa7, + 0x40, 0x4d, 0xa3, 0x0e, 0x99, 0x1d, 0x00, 0x49, 0x60, 0xb0, 0x6f, 0x01, + 0x40, 0x4e, 0x45, 0x75, 0x7b, 0x1e, 0x40, 0x48, 0x39, 0xab, 0xe7, 0x1e, + 0x00, 0x42, 0x5e, 0x01, 0xb0, 0x01, 0xc0, 0x00, 0x05, 0x19, 0x00, 0x01, + 0xff, 0x45, 0xf9, 0x38, 0xe9, 0x1e, 0x00, 0x49, 0x9f, 0x12, 0xf1, 0x1e, + 0x00, 0x45, 0x15, 0x23, 0xeb, 0x1e, 0x00, 0x4a, 0x37, 0xab, 0xed, 0x1e, + 0x00, 0x45, 0x35, 0x23, 0xef, 0x1e, 0x40, 0x48, 0xb8, 0x23, 0xfc, 0x00, + 0x80, 0x1a, 0xaf, 0x01, 0xff, 0x47, 0xa1, 0x12, 0xe5, 0x1e, 0x00, 0x05, + 0x3d, 0x01, 0x01, 0xff, 0x45, 0xf9, 0x38, 0x71, 0x01, 0x00, 0x45, 0x15, + 0x23, 0x15, 0x02, 0x40, 0x80, 0x01, 0xff, 0x04, 0x1a, 0x00, 0x06, 0x45, + 0x20, 0x07, 0x73, 0x1e, 0x40, 0x45, 0xf9, 0x38, 0xd8, 0x01, 0x00, 0x45, + 0xe8, 0x97, 0xda, 0x01, 0x00, 0x45, 0x15, 0x23, 0xdc, 0x01, 0x00, 0x46, + 0xad, 0x70, 0xd6, 0x01, 0x40, 0x44, 0xe7, 0x6c, 0xd4, 0x01, 0x00, 0x49, + 0xd0, 0x04, 0xfb, 0x00, 0xc0, 0x00, 0x46, 0x1f, 0x07, 0x77, 0x1e, 0x40, + 0x55, 0x90, 0x38, 0x4f, 0xab, 0x40, 0x06, 0x50, 0x00, 0xd2, 0x02, 0x4b, + 0x00, 0x99, 0x77, 0x2c, 0x00, 0x53, 0xad, 0x48, 0xa8, 0x02, 0x00, 0x4b, + 0xec, 0x9b, 0xa7, 0x02, 0x80, 0xad, 0x02, 0xa8, 0x90, 0x02, 0xaf, 0xf1, + 0x01, 0x47, 0x53, 0xd5, 0x2b, 0xa7, 0x00, 0x49, 0x18, 0xbf, 0xa6, 0x02, + 0x80, 0xdd, 0x01, 0xb5, 0x04, 0xfa, 0x29, 0xa7, 0x40, 0xed, 0x77, 0xa7, + 0x00, 0x05, 0x72, 0x07, 0x01, 0xff, 0xe1, 0x50, 0x02, 0x80, 0xbe, 0x01, + 0x45, 0x7e, 0xe5, 0x8d, 0x01, 0x00, 0xe5, 0xdd, 0x01, 0x00, 0xe7, 0x77, + 0x1d, 0x00, 0xe8, 0x65, 0x02, 0x80, 0x9d, 0x01, 0xe9, 0x09, 0x1d, 0x80, + 0x91, 0x01, 0xeb, 0x9e, 0x02, 0x00, 0xec, 0x81, 0xa7, 0x00, 0xed, 0x6f, + 0x02, 0x80, 0x7e, 0xaf, 0x53, 0xf2, 0x79, 0x02, 0x80, 0x24, 0xf4, 0x87, + 0x02, 0x80, 0x19, 0x42, 0x3e, 0x00, 0x51, 0xab, 0x00, 0xf6, 0x8c, 0x02, + 0x00, 0xf7, 0x8d, 0x02, 0x00, 0xf9, 0x8e, 0x02, 0xc0, 0x00, 0x4a, 0x55, + 0xa6, 0x06, 0xdf, 0x41, 0x4a, 0xb6, 0x48, 0x0d, 0xdf, 0x41, 0x06, 0x50, + 0x00, 0x01, 0xff, 0x44, 0xac, 0x0e, 0x7b, 0x02, 0x00, 0x48, 0x91, 0x75, + 0x7a, 0x02, 0x80, 0x12, 0x4c, 0x2e, 0x23, 0x68, 0xab, 0x00, 0x4c, 0xf3, + 0x56, 0x15, 0xdf, 0x01, 0x44, 0x8f, 0x17, 0x79, 0x2c, 0x40, 0x53, 0x57, + 0x47, 0x08, 0xdf, 0x41, 0x47, 0x73, 0xcd, 0x43, 0xab, 0x80, 0x1c, 0xe5, + 0x14, 0x1d, 0x80, 0x06, 0x45, 0x1f, 0x29, 0x08, 0x1d, 0x40, 0x06, 0x50, + 0x00, 0x01, 0xff, 0x51, 0x47, 0x05, 0x42, 0xab, 0x00, 0x46, 0x52, 0x05, + 0x41, 0xab, 0x40, 0x4c, 0xda, 0x28, 0x44, 0xab, 0x40, 0x4e, 0x8b, 0x75, + 0x70, 0x02, 0x40, 0x48, 0x15, 0x70, 0x7f, 0xa7, 0x40, 0x4e, 0x2b, 0x72, + 0xae, 0x02, 0xc0, 0x00, 0x49, 0x3b, 0xb4, 0xaf, 0x02, 0x40, 0xe5, 0x02, + 0x1d, 0x00, 0x44, 0x3f, 0xe4, 0x52, 0x02, 0x40, 0x54, 0x9c, 0x0e, 0x67, + 0xab, 0x40, 0x03, 0xef, 0x07, 0x06, 0x48, 0x57, 0xbd, 0x16, 0x1d, 0x40, + 0x44, 0x80, 0x11, 0xbd, 0x01, 0x00, 0x43, 0x00, 0x26, 0x85, 0x01, 0x00, + 0x43, 0x1f, 0x0a, 0xa8, 0x01, 0x40, 0x53, 0xb6, 0x47, 0x7a, 0x1d, 0x00, + 0x43, 0x28, 0x05, 0xfe, 0x00, 0xc0, 0x00, 0x4c, 0xda, 0x28, 0x65, 0xa7, + 0xc0, 0x00, 0x52, 0x14, 0x2b, 0x67, 0xa7, 0x40, 0x06, 0x50, 0x00, 0x01, + 0xff, 0x4c, 0xf3, 0x56, 0x17, 0xdf, 0x01, 0x4e, 0xa2, 0x0e, 0x1c, 0xdf, + 0x41, 0xa3, 0x58, 0xa4, 0x35, 0x44, 0xac, 0x0e, 0xad, 0x01, 0x80, 0x28, + 0x4a, 0x9d, 0x6d, 0x6f, 0x1e, 0x00, 0x03, 0x7d, 0x02, 0x12, 0x4c, 0xf3, + 0x56, 0xab, 0x01, 0x00, 0x4e, 0xa2, 0x0e, 0x88, 0x02, 0x00, 0x46, 0x52, + 0x05, 0x67, 0x01, 0x40, 0x51, 0xa9, 0x57, 0x2a, 0xdf, 0x01, 0x49, 0x31, + 0x23, 0x75, 0x1d, 0x40, 0x53, 0x57, 0x47, 0x09, 0xdf, 0x41, 0x02, 0x1b, + 0x01, 0x11, 0x03, 0x04, 0x0c, 0x01, 0xff, 0x45, 0x5c, 0x00, 0x6b, 0x1e, + 0x00, 0x45, 0x20, 0x07, 0x6d, 0x1e, 0x40, 0x46, 0xba, 0x23, 0x97, 0x1e, + 0x00, 0x4c, 0x90, 0x3f, 0x66, 0x2c, 0x40, 0x44, 0xe7, 0x6c, 0x65, 0x01, + 0x00, 0x46, 0xfa, 0xc1, 0x63, 0x01, 0x00, 0x4f, 0xf1, 0x6e, 0x71, 0x1e, + 0x00, 0x4a, 0xc5, 0xae, 0x1b, 0x02, 0x00, 0x43, 0x73, 0x0b, 0x36, 0x02, + 0x40, 0x06, 0x50, 0x00, 0x82, 0x01, 0xa1, 0x74, 0xa3, 0x3f, 0x46, 0xf6, + 0xb0, 0xdf, 0x00, 0x00, 0xa9, 0x0c, 0x51, 0x70, 0x5d, 0x85, 0x02, 0x00, + 0x48, 0x98, 0xcb, 0x45, 0xab, 0x40, 0x07, 0xf2, 0x45, 0x06, 0x47, 0xf1, + 0xc6, 0xd9, 0xa7, 0x40, 0x4d, 0xe8, 0x81, 0x1e, 0x1d, 0x00, 0xef, 0x11, + 0x1d, 0x80, 0x0a, 0x48, 0xd8, 0xcb, 0x1f, 0x1d, 0x00, 0xf5, 0x1d, 0x1d, + 0x40, 0x4c, 0xda, 0x28, 0x13, 0x1d, 0x00, 0x45, 0xd4, 0xe9, 0x12, 0x1d, + 0x40, 0x43, 0xb6, 0x7b, 0x59, 0x02, 0x80, 0x1b, 0x05, 0x76, 0x06, 0x01, + 0xff, 0xe7, 0x61, 0x02, 0x80, 0x0b, 0xf2, 0x4b, 0xab, 0xc0, 0x00, 0x4a, + 0x91, 0xa6, 0x4c, 0xab, 0x40, 0x52, 0xc3, 0x4f, 0x36, 0xab, 0x40, 0x06, + 0x50, 0x00, 0x01, 0xff, 0x44, 0xac, 0x0e, 0x5a, 0x02, 0x00, 0x4e, 0xa2, + 0x0e, 0x95, 0x1d, 0x40, 0x47, 0x5f, 0xd2, 0x60, 0xab, 0x00, 0x46, 0xb6, + 0xce, 0x8c, 0xa7, 0x40, 0x45, 0xf9, 0x38, 0x5b, 0x01, 0x80, 0x78, 0xa3, + 0x51, 0xa4, 0x31, 0x44, 0xac, 0x0e, 0x82, 0x02, 0x00, 0x03, 0x7d, 0x02, + 0x1b, 0x4e, 0x4e, 0x43, 0xa9, 0xa7, 0x00, 0x4c, 0xf3, 0x56, 0x8a, 0x1d, + 0x00, 0xb3, 0x01, 0xff, 0x53, 0xf0, 0x49, 0xca, 0xa7, 0x00, 0x49, 0x3d, + 0xc1, 0x3f, 0x02, 0x40, 0x51, 0xa9, 0x57, 0x29, 0xdf, 0x01, 0x49, 0x31, + 0x23, 0x74, 0x1d, 0x40, 0x4e, 0x8e, 0x3f, 0xcd, 0xa7, 0x00, 0x03, 0x04, + 0x0c, 0x01, 0xff, 0x45, 0x5c, 0x00, 0x61, 0x1e, 0x00, 0x45, 0x20, 0x07, + 0x63, 0x1e, 0xc0, 0x00, 0x4e, 0x35, 0x1e, 0x69, 0x1e, 0x40, 0x44, 0xe7, + 0x6c, 0x61, 0x01, 0x80, 0x18, 0x46, 0xfa, 0xc1, 0x5f, 0x01, 0x00, 0x49, + 0xd0, 0x04, 0x5d, 0x01, 0x00, 0x4a, 0xc5, 0xae, 0x19, 0x02, 0x00, 0x43, + 0x73, 0x0b, 0x1e, 0xdf, 0x41, 0x4e, 0x35, 0x1e, 0x67, 0x1e, 0x40, 0x4e, + 0x35, 0x1e, 0x65, 0x1e, 0x40, 0x80, 0x5b, 0x48, 0x48, 0xc3, 0x64, 0x02, + 0x00, 0x08, 0xde, 0x14, 0x0d, 0x42, 0x48, 0x04, 0x75, 0xa7, 0xc0, 0x00, + 0x48, 0x9b, 0xb2, 0x5d, 0xa7, 0x40, 0xe3, 0x84, 0x21, 0x80, 0x39, 0xe5, + 0x58, 0x02, 0x80, 0x2e, 0x46, 0x3e, 0xdc, 0xf6, 0xa7, 0x00, 0xeb, 0x03, + 0xdf, 0x01, 0x46, 0x1e, 0x29, 0x5c, 0x02, 0x80, 0x0c, 0x4f, 0x2a, 0x72, + 0x7f, 0x02, 0x00, 0x48, 0xb0, 0xca, 0x01, 0xdf, 0x41, 0x06, 0x50, 0x00, + 0x01, 0xff, 0x44, 0xac, 0x0e, 0x5d, 0x02, 0x00, 0x4e, 0xa2, 0x0e, 0x94, + 0x1d, 0x40, 0x42, 0x1d, 0x01, 0x07, 0xdf, 0x41, 0x49, 0x75, 0x3b, 0x3f, + 0xa7, 0x40, 0x47, 0x9c, 0xb2, 0x5b, 0xa7, 0x00, 0x04, 0x51, 0x00, 0x01, + 0xff, 0x80, 0x06, 0x4a, 0xfd, 0x50, 0x47, 0xab, 0x40, 0x45, 0xf9, 0x38, + 0x55, 0x01, 0x00, 0xa3, 0x75, 0x02, 0x3b, 0x01, 0x54, 0x48, 0x31, 0x72, + 0x7e, 0x02, 0x80, 0x3c, 0x4e, 0x5e, 0x23, 0x13, 0x02, 0x00, 0xac, 0x28, + 0x03, 0x7d, 0x02, 0x18, 0x4e, 0x4e, 0x43, 0xa7, 0xa7, 0x00, 0x4c, 0xf3, + 0x56, 0x89, 0x1d, 0x00, 0x46, 0x52, 0x05, 0x4d, 0x02, 0x00, 0x44, 0x8f, + 0x17, 0x7d, 0x02, 0x40, 0x51, 0xa9, 0x57, 0x28, 0xdf, 0x01, 0x49, 0x31, + 0x23, 0x72, 0x1d, 0x40, 0x49, 0x9e, 0x6d, 0x5f, 0x1e, 0x00, 0x47, 0x92, + 0x75, 0x7c, 0x02, 0x40, 0x05, 0x19, 0x00, 0x01, 0xff, 0x4c, 0x2e, 0x23, + 0x73, 0x1d, 0x00, 0x4c, 0xf3, 0x56, 0x16, 0xdf, 0x41, 0x02, 0xc6, 0x00, + 0x06, 0x4a, 0x10, 0x23, 0x11, 0x02, 0x40, 0x45, 0x5c, 0x00, 0x59, 0x1e, + 0x00, 0x45, 0x20, 0x07, 0x5b, 0x1e, 0xc0, 0x00, 0x4b, 0x53, 0x97, 0x5d, + 0x1e, 0x40, 0x44, 0xe7, 0x6c, 0x59, 0x01, 0x00, 0x46, 0xfa, 0xc1, 0x57, + 0x01, 0x00, 0x4b, 0xca, 0x4f, 0x49, 0xab, 0x40, 0x06, 0x50, 0x00, 0x06, + 0x49, 0xcb, 0xbd, 0x39, 0x02, 0x40, 0x4f, 0x8d, 0x3f, 0x59, 0xa7, 0x00, + 0x44, 0xac, 0x0e, 0xa0, 0x02, 0x80, 0x06, 0x58, 0x0e, 0x2b, 0x57, 0xa7, + 0x40, 0x45, 0xd7, 0x47, 0x4b, 0x02, 0x40, 0x06, 0x50, 0x00, 0x0d, 0xa8, + 0x01, 0xff, 0x59, 0x01, 0x1d, 0xcf, 0xa7, 0x00, 0xe9, 0x78, 0x02, 0x40, + 0x45, 0xf9, 0x38, 0x55, 0x1e, 0x00, 0x49, 0x3a, 0x1e, 0x57, 0x1e, 0x00, + 0x48, 0x30, 0xc6, 0x53, 0xa7, 0x00, 0x44, 0xac, 0x0e, 0xa5, 0x01, 0x00, + 0x4c, 0x2e, 0x23, 0x71, 0x1d, 0x00, 0x4c, 0xf3, 0x56, 0x88, 0x1d, 0x00, + 0xb3, 0x01, 0xff, 0x4c, 0xff, 0x93, 0x55, 0xa7, 0x00, 0x45, 0x53, 0x05, + 0x7d, 0x1d, 0xc0, 0x00, 0x52, 0x14, 0x2b, 0x51, 0xa7, 0x40, 0x06, 0x50, + 0x00, 0x40, 0xe9, 0xa3, 0x01, 0x00, 0x4b, 0x5f, 0x9e, 0xc1, 0xa7, 0x00, + 0x44, 0xcc, 0x7b, 0xb7, 0xa7, 0x00, 0xef, 0x4f, 0xa7, 0x00, 0x04, 0xf7, + 0x04, 0x04, 0xf5, 0x23, 0x02, 0x40, 0xe5, 0x5b, 0x02, 0x80, 0x19, 0xef, + 0x54, 0x02, 0xc0, 0x00, 0x06, 0x50, 0x00, 0x04, 0xe5, 0x62, 0xab, 0x40, + 0x4e, 0xa2, 0x0e, 0x97, 0x1d, 0x00, 0x46, 0x52, 0x05, 0x3f, 0xab, 0x40, + 0x54, 0x9c, 0x0e, 0x93, 0x1d, 0x40, 0x45, 0xf9, 0x38, 0xf3, 0x00, 0x00, + 0x45, 0x53, 0x23, 0x4f, 0x01, 0x00, 0xa3, 0xe7, 0x01, 0xa4, 0xac, 0x01, + 0x45, 0x15, 0x23, 0xf2, 0x00, 0x00, 0x02, 0x0b, 0x00, 0x72, 0x4e, 0x5e, + 0x23, 0x0f, 0x02, 0x00, 0x02, 0x13, 0x01, 0x56, 0x46, 0xad, 0x70, 0x4d, + 0x01, 0x80, 0x3e, 0x46, 0xba, 0xde, 0xeb, 0x01, 0x80, 0x31, 0x4e, 0xa2, + 0x0e, 0x1b, 0xdf, 0x01, 0x46, 0x52, 0x05, 0xf8, 0x00, 0x80, 0x1e, 0x45, + 0x35, 0x23, 0xf5, 0x00, 0xc0, 0x00, 0x05, 0x19, 0x00, 0x01, 0xff, 0x45, + 0xf9, 0x38, 0x4d, 0x1e, 0x00, 0x49, 0xb7, 0x23, 0x4f, 0x1e, 0x00, 0x46, + 0xad, 0x70, 0x2d, 0x02, 0x40, 0x4a, 0x97, 0xa5, 0xff, 0x01, 0x40, 0x4b, + 0x53, 0x97, 0xed, 0x01, 0x40, 0x05, 0x19, 0x00, 0x01, 0xff, 0x45, 0xf9, + 0x38, 0x53, 0x1e, 0x00, 0x45, 0x15, 0x23, 0x51, 0x1e, 0x40, 0x51, 0xc6, + 0x5c, 0x4b, 0xa7, 0x00, 0x42, 0x1f, 0x00, 0x4d, 0xa7, 0x00, 0x4d, 0x63, + 0x8a, 0x7a, 0x2c, 0x40, 0x48, 0x39, 0xab, 0xcf, 0x1e, 0x00, 0x42, 0x5e, + 0x01, 0xa1, 0x01, 0xc0, 0x00, 0x05, 0x19, 0x00, 0x01, 0xff, 0x45, 0xf9, + 0x38, 0xdb, 0x1e, 0x00, 0x49, 0x9f, 0x12, 0xe3, 0x1e, 0x00, 0x45, 0x15, + 0x23, 0xdd, 0x1e, 0x00, 0x4a, 0x37, 0xab, 0xdf, 0x1e, 0x00, 0x45, 0x35, + 0x23, 0xe1, 0x1e, 0x40, 0x48, 0xb8, 0x23, 0xf6, 0x00, 0x80, 0x2b, 0xaf, + 0x01, 0xff, 0x02, 0xc6, 0x00, 0x11, 0x05, 0x3d, 0x01, 0x01, 0xff, 0x45, + 0xf9, 0x38, 0x51, 0x01, 0x00, 0x45, 0x15, 0x23, 0x0d, 0x02, 0x40, 0x45, + 0x5c, 0x00, 0x2f, 0x02, 0x80, 0x06, 0x45, 0x20, 0x07, 0xcd, 0x1e, 0x40, + 0x4b, 0x53, 0x97, 0x31, 0x02, 0x40, 0x4b, 0x53, 0x97, 0x2b, 0x02, 0x40, + 0x44, 0xe7, 0x6c, 0xd2, 0x01, 0x00, 0x49, 0xd0, 0x04, 0xf4, 0x00, 0xc0, + 0x00, 0x05, 0x19, 0x00, 0x01, 0xff, 0x45, 0xf9, 0x38, 0xd1, 0x1e, 0x00, + 0x49, 0x9f, 0x12, 0xd9, 0x1e, 0x00, 0x45, 0x15, 0x23, 0xd3, 0x1e, 0x00, + 0x4a, 0x37, 0xab, 0xd5, 0x1e, 0x00, 0x45, 0x35, 0x23, 0xd7, 0x1e, 0x40, + 0x80, 0x0a, 0xea, 0xcc, 0x01, 0x00, 0x42, 0x48, 0x04, 0x74, 0xa7, 0x40, + 0x56, 0x55, 0x36, 0x49, 0x01, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x45, + 0xf9, 0x38, 0x44, 0x01, 0x00, 0xa3, 0x5b, 0xa4, 0x42, 0x45, 0x15, 0x23, + 0xf9, 0x01, 0x00, 0xac, 0x28, 0x03, 0x7d, 0x02, 0x18, 0x4e, 0x4e, 0x43, + 0xa5, 0xa7, 0x00, 0x4c, 0xf3, 0x56, 0x87, 0x1d, 0x00, 0x4e, 0xa2, 0x0e, + 0x73, 0x02, 0x00, 0x45, 0x35, 0x23, 0xf1, 0x00, 0x40, 0x51, 0xa9, 0x57, + 0x27, 0xdf, 0x01, 0x49, 0x31, 0x23, 0x70, 0x1d, 0x40, 0x48, 0xb2, 0x57, + 0x72, 0x02, 0x00, 0x49, 0x9e, 0x6d, 0x49, 0x1e, 0x00, 0x4d, 0xef, 0x86, + 0x9e, 0x01, 0x40, 0x48, 0x1e, 0x2b, 0x91, 0xa7, 0x00, 0x03, 0x04, 0x0c, + 0x01, 0xff, 0x45, 0x5c, 0x00, 0x45, 0x1e, 0x00, 0x45, 0x20, 0x07, 0x47, + 0x1e, 0x40, 0x44, 0xe7, 0x6c, 0x48, 0x01, 0x00, 0x46, 0xfa, 0xc1, 0x46, + 0x01, 0x00, 0x4f, 0xf1, 0x6e, 0x4b, 0x1e, 0x00, 0x4b, 0xca, 0x4f, 0x3b, + 0xab, 0x00, 0x43, 0x73, 0x0b, 0x35, 0x02, 0x40, 0x06, 0x50, 0x00, 0x1f, + 0x05, 0x7e, 0x02, 0x06, 0x42, 0x48, 0x04, 0x73, 0xa7, 0x40, 0x48, 0x88, + 0xc2, 0xd7, 0xa7, 0x00, 0x07, 0xea, 0xcd, 0x01, 0xff, 0x42, 0x60, 0x07, + 0xfb, 0x1e, 0x00, 0xf6, 0xfd, 0x1e, 0x40, 0x45, 0xf9, 0x38, 0x3f, 0x1e, + 0x00, 0x4c, 0xc9, 0x4f, 0x3a, 0xab, 0x00, 0x04, 0x03, 0x0c, 0x12, 0x44, + 0xac, 0x0e, 0x71, 0x02, 0x00, 0x4c, 0x2e, 0x23, 0x6f, 0x1d, 0x00, 0x4c, + 0xf3, 0x56, 0x86, 0x1d, 0x40, 0x45, 0x5c, 0x00, 0x41, 0x1e, 0x00, 0x45, + 0x20, 0x07, 0x43, 0x1e, 0x40, 0x06, 0x50, 0x00, 0x58, 0x45, 0x43, 0xe4, + 0xdb, 0xa7, 0x80, 0x4b, 0xa5, 0x36, 0xea, 0xc9, 0x01, 0x00, 0x45, 0x54, + 0xad, 0x7f, 0x01, 0x80, 0x12, 0x49, 0x18, 0xbf, 0xaa, 0x02, 0x00, 0x42, + 0x48, 0x04, 0x72, 0xa7, 0x00, 0x49, 0xb2, 0xc1, 0xab, 0x02, 0x40, 0x06, + 0x50, 0x00, 0x01, 0xff, 0xa4, 0x06, 0x4b, 0xe9, 0x9c, 0x9d, 0x1e, 0x40, + 0x4e, 0x8e, 0x3f, 0x9c, 0x1e, 0x00, 0x48, 0x3b, 0x1e, 0x9b, 0x1e, 0x40, + 0x45, 0x25, 0xe9, 0x35, 0xab, 0x00, 0x42, 0x54, 0x28, 0x6e, 0x02, 0xc0, + 0x00, 0x54, 0x9c, 0x0e, 0x05, 0xdf, 0x41, 0x4c, 0xda, 0x28, 0x9b, 0x01, + 0x40, 0x45, 0xf9, 0x38, 0x3a, 0x01, 0x00, 0xa2, 0x8e, 0x01, 0xa3, 0x74, + 0x02, 0x3b, 0x01, 0x52, 0x48, 0x31, 0x72, 0x11, 0xdf, 0x01, 0x4b, 0xe9, + 0x9c, 0x49, 0xa7, 0x00, 0x4f, 0xd3, 0x6e, 0x37, 0xab, 0x00, 0x4a, 0x9d, + 0x6d, 0x3b, 0x1e, 0x00, 0x03, 0x7d, 0x02, 0x19, 0x4c, 0xf3, 0x56, 0x85, + 0x1d, 0x00, 0x4e, 0xa2, 0x0e, 0x6d, 0x02, 0x80, 0x06, 0x46, 0x52, 0x05, + 0x42, 0x01, 0x40, 0x49, 0x29, 0xb4, 0x8e, 0xa7, 0x40, 0x51, 0xa9, 0x57, + 0x26, 0xdf, 0x01, 0x04, 0x80, 0x02, 0x01, 0xff, 0x43, 0x23, 0x0a, 0x40, + 0x01, 0x00, 0x44, 0x22, 0x08, 0x39, 0xab, 0x00, 0x45, 0x35, 0x23, 0x6b, + 0x02, 0x40, 0x47, 0xa1, 0x12, 0x37, 0x1e, 0x80, 0x11, 0x05, 0x3d, 0x01, + 0x01, 0xff, 0x43, 0x16, 0x00, 0x61, 0x2c, 0x00, 0x4c, 0x2e, 0x23, 0x38, + 0xab, 0x40, 0x4b, 0x53, 0x97, 0x39, 0x1e, 0x40, 0x44, 0xe7, 0x6c, 0x3e, + 0x01, 0x00, 0x46, 0xfa, 0xc1, 0x3c, 0x01, 0x00, 0x4f, 0xf1, 0x6e, 0x3d, + 0x1e, 0x00, 0x43, 0x73, 0x0b, 0x34, 0x02, 0x40, 0x42, 0x17, 0x00, 0x9a, + 0x01, 0x00, 0x43, 0xdd, 0xa3, 0x6c, 0x02, 0xc0, 0x00, 0x51, 0xee, 0x56, + 0x13, 0xdf, 0x41, 0x06, 0x50, 0x00, 0x06, 0x42, 0x71, 0x00, 0x38, 0x01, + 0x40, 0x45, 0xf9, 0x38, 0x31, 0x1e, 0x00, 0xa3, 0x39, 0xa4, 0x25, 0x44, + 0xac, 0x0e, 0x99, 0x01, 0x00, 0x4a, 0x9d, 0x6d, 0x35, 0x1e, 0x00, 0x4e, + 0x4e, 0x43, 0xa3, 0xa7, 0x00, 0x4c, 0xf3, 0x56, 0x84, 0x1d, 0x00, 0x46, + 0x52, 0x05, 0x41, 0xa7, 0xc0, 0x00, 0x54, 0x88, 0x3f, 0x45, 0xa7, 0x40, + 0x48, 0x1e, 0x2b, 0x6a, 0x2c, 0x00, 0x4e, 0x8e, 0x3f, 0x43, 0xa7, 0x00, + 0x48, 0xa0, 0x12, 0x33, 0x1e, 0x40, 0x44, 0xe7, 0x6c, 0xe9, 0x01, 0x00, + 0x46, 0xfa, 0xc1, 0x37, 0x01, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0xa3, + 0x06, 0x46, 0x52, 0x05, 0x49, 0x02, 0x40, 0x44, 0xe7, 0x6c, 0xf0, 0x01, + 0x00, 0x49, 0xd0, 0x04, 0x35, 0x01, 0x00, 0x4b, 0xca, 0x4f, 0x9d, 0x02, + 0x40, 0x06, 0x50, 0x00, 0x48, 0xae, 0x19, 0x02, 0x1b, 0x05, 0x04, 0xf3, + 0x6d, 0xa7, 0x40, 0xe1, 0x69, 0x02, 0x80, 0x06, 0x47, 0xd5, 0x88, 0x61, + 0xab, 0x40, 0x4c, 0xda, 0x28, 0x7c, 0x1d, 0x40, 0x06, 0x16, 0x70, 0x11, + 0x07, 0x60, 0x23, 0x01, 0xff, 0x45, 0x3e, 0xe4, 0x64, 0xab, 0x00, 0x42, + 0x60, 0x51, 0x40, 0xab, 0x40, 0xe4, 0x7a, 0xa7, 0x00, 0xe6, 0x7c, 0xa7, + 0x00, 0xe7, 0x79, 0x1d, 0x00, 0xf2, 0x83, 0xa7, 0x00, 0xf3, 0x85, 0xa7, + 0x00, 0xf4, 0x87, 0xa7, 0x40, 0x45, 0xf9, 0x38, 0xed, 0x00, 0x00, 0x45, + 0x53, 0x23, 0x2d, 0x01, 0x00, 0xa3, 0x5c, 0xa4, 0x3e, 0x45, 0x15, 0x23, + 0xec, 0x00, 0x00, 0x4a, 0x37, 0xab, 0xc9, 0x1e, 0x00, 0x4e, 0x5e, 0x23, + 0x0b, 0x02, 0x00, 0x46, 0xad, 0x70, 0x2b, 0x01, 0x00, 0x46, 0xba, 0xde, + 0x2f, 0x01, 0x00, 0x4e, 0xa2, 0x0e, 0x96, 0x1d, 0x00, 0x46, 0x52, 0x05, + 0x68, 0x02, 0x80, 0x0d, 0x45, 0x35, 0x23, 0x29, 0x01, 0xc0, 0x00, 0x46, + 0x1f, 0x07, 0x2d, 0x1e, 0x40, 0x53, 0x57, 0x47, 0x1a, 0xdf, 0x41, 0x48, + 0xb8, 0x23, 0xef, 0x00, 0x80, 0x0f, 0xaf, 0x01, 0xff, 0x47, 0xa1, 0x12, + 0xcb, 0x1e, 0x00, 0x4a, 0x10, 0x23, 0x09, 0x02, 0x40, 0x4a, 0x97, 0xa5, + 0x2f, 0x1e, 0x40, 0x44, 0xe7, 0x6c, 0xd0, 0x01, 0x00, 0x49, 0xd0, 0x04, + 0xee, 0x00, 0x40, 0x06, 0x50, 0x00, 0x17, 0x45, 0x3f, 0xdc, 0x76, 0x2c, + 0x00, 0x43, 0x4c, 0x0a, 0x27, 0xa7, 0x80, 0x04, 0xf6, 0x95, 0x01, 0x40, + 0x4a, 0xa7, 0x24, 0x67, 0x02, 0x40, 0x4b, 0xbb, 0x99, 0x2b, 0x1e, 0x00, + 0xa3, 0x37, 0xa4, 0x18, 0x44, 0xac, 0x0e, 0x66, 0x02, 0x00, 0x4a, 0x9d, + 0x6d, 0x96, 0x1e, 0x00, 0x4c, 0xf3, 0x56, 0x95, 0xa7, 0x00, 0x46, 0x52, + 0x05, 0x27, 0x01, 0x40, 0x48, 0x1e, 0x2b, 0x68, 0x2c, 0x00, 0x48, 0xb8, + 0x23, 0x27, 0x1e, 0x00, 0x03, 0x04, 0x0c, 0x01, 0xff, 0x45, 0x5c, 0x00, + 0x23, 0x1e, 0x00, 0x45, 0x20, 0x07, 0x25, 0x1e, 0x40, 0x44, 0xe7, 0x6c, + 0x1f, 0x02, 0x00, 0x46, 0xfa, 0xc1, 0x29, 0x1e, 0x00, 0x49, 0xd0, 0x04, + 0x25, 0x01, 0x40, 0x06, 0x50, 0x00, 0x23, 0x44, 0x00, 0x21, 0x63, 0x02, + 0x00, 0x42, 0x22, 0x00, 0xa3, 0x01, 0x00, 0x07, 0xcf, 0x28, 0x01, 0xff, + 0xe1, 0xbb, 0xa7, 0x00, 0xe9, 0xbd, 0xa7, 0x00, 0x44, 0x55, 0x03, 0x42, + 0x02, 0x00, 0xf5, 0xbf, 0xa7, 0x40, 0x45, 0xf9, 0x38, 0xf5, 0x01, 0x00, + 0x45, 0x53, 0x23, 0x1f, 0x01, 0x00, 0xa3, 0x24, 0x49, 0x3a, 0x1e, 0x21, + 0x01, 0x00, 0x44, 0xac, 0x0e, 0x60, 0x02, 0x00, 0x46, 0xad, 0x70, 0x21, + 0x1e, 0x00, 0x4e, 0x4e, 0x43, 0xa1, 0xa7, 0x00, 0x4c, 0xf3, 0x56, 0x83, + 0x1d, 0x00, 0x46, 0x52, 0x05, 0xe5, 0x01, 0x40, 0x44, 0xe7, 0x6c, 0xe7, + 0x01, 0x00, 0x46, 0xfa, 0xc1, 0x23, 0x01, 0x00, 0x49, 0xd0, 0x04, 0x1d, + 0x01, 0x40, 0x06, 0x50, 0x00, 0x0d, 0x4b, 0xb5, 0x9b, 0xa9, 0x02, 0xc0, + 0x00, 0x4b, 0x45, 0x98, 0x00, 0xdf, 0x41, 0x49, 0x3a, 0x1e, 0x1f, 0x1e, + 0x00, 0x44, 0xac, 0x0e, 0x92, 0x01, 0x00, 0x4c, 0x2e, 0x23, 0x6e, 0x1d, + 0x00, 0x4c, 0xf3, 0x56, 0x82, 0x1d, 0x00, 0x46, 0x52, 0x05, 0x99, 0xa7, + 0x40, 0x06, 0x50, 0x00, 0x92, 0x01, 0x0e, 0x2b, 0x78, 0x81, 0x01, 0x42, + 0x1d, 0x01, 0x4b, 0x01, 0x80, 0x69, 0x42, 0xa4, 0x02, 0x83, 0x02, 0x80, + 0x3e, 0xf4, 0x6b, 0xa7, 0x80, 0x35, 0x42, 0x54, 0x28, 0x92, 0x02, 0xc0, + 0x00, 0x80, 0x01, 0xff, 0x48, 0x58, 0x13, 0xb9, 0x01, 0x00, 0x05, 0x51, + 0x00, 0x01, 0xff, 0xa3, 0x12, 0x4c, 0xf3, 0x56, 0x18, 0xdf, 0x01, 0x4e, + 0xa2, 0x0e, 0x9a, 0x1d, 0x00, 0x44, 0x8f, 0x17, 0xba, 0x01, 0x40, 0x44, + 0xe7, 0x6c, 0xef, 0x01, 0x00, 0x43, 0x73, 0x0b, 0x93, 0x02, 0x40, 0xe8, + 0xf0, 0x00, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x44, 0x72, 0x0b, 0x86, + 0x02, 0x00, 0x4a, 0x61, 0xa9, 0x0b, 0xdf, 0x81, 0x0c, 0x4c, 0xf3, 0x56, + 0x8b, 0x1d, 0x00, 0x4e, 0xa2, 0x0e, 0x98, 0x1d, 0x40, 0x49, 0x32, 0xb4, + 0x0c, 0xdf, 0x41, 0x06, 0x50, 0x00, 0x01, 0xff, 0x4c, 0xc9, 0x4f, 0x3c, + 0xab, 0x00, 0x4c, 0xf3, 0x56, 0x14, 0xdf, 0x41, 0x42, 0x9e, 0x01, 0x25, + 0xa7, 0x00, 0x43, 0x68, 0x00, 0x23, 0xa7, 0x40, 0x45, 0xf9, 0x38, 0xe9, + 0x00, 0x00, 0x45, 0x53, 0x23, 0x15, 0x01, 0x00, 0xa3, 0x76, 0xa4, 0x55, + 0x48, 0x30, 0xc6, 0x34, 0xab, 0x00, 0x45, 0x15, 0x23, 0xe8, 0x00, 0x00, + 0x4a, 0x37, 0xab, 0xbb, 0x1e, 0x00, 0x4e, 0x5e, 0x23, 0x07, 0x02, 0x00, + 0x46, 0xad, 0x70, 0x13, 0x01, 0x80, 0x25, 0x45, 0x61, 0x2a, 0x78, 0x2c, + 0x00, 0x46, 0xba, 0xde, 0x19, 0x01, 0x00, 0x4e, 0xa2, 0x0e, 0x92, 0x1d, + 0x00, 0x46, 0x52, 0x05, 0x47, 0x02, 0x00, 0x45, 0x35, 0x23, 0xbd, 0x1e, + 0xc0, 0x00, 0x46, 0x1f, 0x07, 0x1b, 0x1e, 0x40, 0x05, 0x19, 0x00, 0x01, + 0xff, 0x45, 0xf9, 0x38, 0x17, 0x1e, 0x00, 0x45, 0x15, 0x23, 0x15, 0x1e, + 0x40, 0x48, 0xb8, 0x23, 0xeb, 0x00, 0x00, 0xaf, 0x01, 0xff, 0x02, 0xc6, + 0x00, 0x06, 0x4a, 0x10, 0x23, 0x05, 0x02, 0x40, 0x45, 0x5c, 0x00, 0x17, + 0x01, 0x00, 0x45, 0x20, 0x07, 0xb9, 0x1e, 0x40, 0x44, 0xe7, 0x6c, 0x1b, + 0x01, 0x00, 0x46, 0xfa, 0xc1, 0x29, 0x02, 0x80, 0x32, 0x49, 0xd0, 0x04, + 0xea, 0x00, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x04, 0x1a, 0x00, 0x06, 0x45, + 0x20, 0x07, 0x19, 0x1e, 0x40, 0x45, 0xf9, 0x38, 0xbf, 0x1e, 0x00, 0x49, + 0x9f, 0x12, 0xc7, 0x1e, 0x00, 0x45, 0x15, 0x23, 0xc1, 0x1e, 0x00, 0x4a, + 0x37, 0xab, 0xc3, 0x1e, 0x00, 0x45, 0x35, 0x23, 0xc5, 0x1e, 0x40, 0x4a, + 0xab, 0xa5, 0x1d, 0x1e, 0x40, 0x06, 0x50, 0x00, 0x8a, 0x01, 0x49, 0x7b, + 0xb6, 0x38, 0x02, 0x00, 0xa5, 0x64, 0xaf, 0x2c, 0x42, 0x48, 0x04, 0x71, + 0xa7, 0x00, 0xfa, 0xf3, 0x01, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x47, 0xaf, + 0x48, 0xa3, 0x02, 0x80, 0x06, 0x4a, 0xe3, 0x97, 0xc6, 0x01, 0x40, 0x06, + 0x50, 0x00, 0x01, 0xff, 0x44, 0x72, 0x0b, 0xa5, 0x02, 0x00, 0x4e, 0xa2, + 0x0e, 0x66, 0xab, 0x40, 0x06, 0x92, 0x41, 0x1c, 0x05, 0x3d, 0x01, 0x01, + 0xff, 0xf2, 0x48, 0xab, 0x80, 0x0c, 0x45, 0x11, 0x4a, 0xd3, 0xa7, 0x00, + 0x44, 0x68, 0xa4, 0xd5, 0xa7, 0x40, 0x52, 0xc3, 0x4f, 0x4a, 0xab, 0x40, + 0xe9, 0x31, 0x01, 0x00, 0xea, 0x37, 0x02, 0xc0, 0x00, 0x4c, 0xda, 0x28, + 0x5f, 0x02, 0xc0, 0x00, 0x49, 0xc0, 0x23, 0x84, 0x02, 0x40, 0x43, 0x49, + 0x19, 0x9f, 0x1e, 0x00, 0x4a, 0x15, 0xb4, 0xa4, 0x02, 0xc0, 0x00, 0x06, + 0x50, 0x00, 0x01, 0xff, 0x4c, 0xf3, 0x56, 0x12, 0xdf, 0x01, 0x4e, 0xa2, + 0x0e, 0x19, 0xdf, 0x41, 0xa3, 0x56, 0x04, 0x03, 0x0c, 0x46, 0x44, 0xac, + 0x0e, 0x57, 0x02, 0x80, 0x39, 0x4a, 0x9d, 0x6d, 0x0f, 0x1e, 0x00, 0x03, + 0x7d, 0x02, 0x23, 0x4c, 0xf3, 0x56, 0x81, 0x1d, 0x00, 0xb3, 0x0f, 0xb4, + 0x01, 0xff, 0x43, 0x90, 0x17, 0x56, 0x02, 0x00, 0x45, 0xa7, 0xe0, 0x8c, + 0x01, 0x40, 0x53, 0xf0, 0x49, 0xc8, 0xa7, 0x00, 0x45, 0x53, 0x05, 0x11, + 0x01, 0x40, 0x51, 0xa9, 0x57, 0x25, 0xdf, 0x01, 0x49, 0x31, 0x23, 0x6d, + 0x1d, 0x40, 0x49, 0x3b, 0xb4, 0x91, 0x1d, 0x40, 0x45, 0x5c, 0x00, 0x0b, + 0x1e, 0x00, 0x45, 0x20, 0x07, 0x0d, 0x1e, 0x40, 0x44, 0xe7, 0x6c, 0x0f, + 0x01, 0x00, 0x46, 0xfa, 0xc1, 0x11, 0x1e, 0x00, 0x4f, 0xf1, 0x6e, 0x13, + 0x1e, 0x00, 0x43, 0x73, 0x0b, 0x21, 0x02, 0x40, 0x06, 0x50, 0x00, 0x49, + 0x42, 0x49, 0x00, 0x53, 0xab, 0x80, 0x31, 0x06, 0x60, 0x1b, 0x13, 0x42, + 0x10, 0x00, 0x6f, 0xa7, 0x00, 0x48, 0xe8, 0xcb, 0x2d, 0xa7, 0xc0, 0x00, + 0x4b, 0xed, 0x97, 0x2f, 0xa7, 0x40, 0x49, 0x14, 0x70, 0xd1, 0xa7, 0x00, + 0xaf, 0x06, 0x4f, 0x75, 0x72, 0x5e, 0x02, 0x40, 0x44, 0xcc, 0x7b, 0x77, + 0x02, 0x00, 0x45, 0x1f, 0x29, 0x9a, 0x02, 0x40, 0x0a, 0x69, 0xa6, 0x01, + 0xff, 0x4a, 0xbd, 0xac, 0x55, 0xab, 0x00, 0x4a, 0x25, 0x50, 0x54, 0xab, + 0x40, 0x45, 0xf9, 0x38, 0x07, 0x01, 0x00, 0x43, 0x16, 0x00, 0x93, 0xa7, + 0x00, 0xa3, 0x1e, 0x49, 0x3a, 0x1e, 0x0b, 0x01, 0x00, 0x44, 0xac, 0x0e, + 0x88, 0x01, 0x00, 0x4c, 0xf3, 0x56, 0x94, 0xa7, 0x00, 0x4e, 0xa2, 0x0e, + 0x1d, 0xdf, 0x01, 0x46, 0x52, 0x05, 0x3c, 0x02, 0x40, 0x44, 0xe7, 0x6c, + 0x0d, 0x01, 0x00, 0x46, 0xfa, 0xc1, 0xe7, 0x00, 0x80, 0x0c, 0x49, 0xd0, + 0x04, 0x09, 0x01, 0x00, 0x43, 0x73, 0x0b, 0x55, 0x02, 0x40, 0x4a, 0x97, + 0xa5, 0x09, 0x1e, 0x40, 0x06, 0x50, 0x00, 0x3f, 0xa1, 0x25, 0x43, 0x94, + 0x0f, 0xb5, 0xa7, 0x00, 0x0b, 0x3e, 0x9e, 0x0c, 0x4c, 0x6f, 0x93, 0x17, + 0x1d, 0x00, 0x47, 0x6f, 0xd5, 0x47, 0xa7, 0x40, 0xe5, 0x32, 0xab, 0x00, + 0xef, 0x3d, 0xab, 0xc0, 0x00, 0x4c, 0xda, 0x28, 0x3e, 0xab, 0x40, 0x05, + 0xcb, 0x80, 0x06, 0x4a, 0xe1, 0xb0, 0x4d, 0xab, 0x40, 0x45, 0x3e, 0xe4, + 0x30, 0xab, 0x00, 0xe5, 0x33, 0xab, 0x00, 0xef, 0x75, 0x02, 0x40, 0x04, + 0x03, 0x0c, 0x2a, 0x48, 0x30, 0xc6, 0x97, 0xa7, 0x00, 0x44, 0xac, 0x0e, + 0x53, 0x02, 0x00, 0x4a, 0x9d, 0x6d, 0x07, 0x1e, 0x00, 0x4c, 0x2e, 0x23, + 0x6c, 0x1d, 0x00, 0x4c, 0xf3, 0x56, 0x80, 0x1d, 0x00, 0x46, 0x52, 0x05, + 0x80, 0x01, 0x00, 0x46, 0xa6, 0xe0, 0x83, 0x01, 0x40, 0x45, 0x5c, 0x00, + 0x03, 0x1e, 0x00, 0x45, 0x20, 0x07, 0x05, 0x1e, 0x40, 0x80, 0x44, 0xe1, + 0x33, 0xa7, 0x00, 0xe5, 0xe6, 0x00, 0x80, 0x2a, 0x44, 0x3f, 0xe4, 0x51, + 0x02, 0x80, 0x1d, 0x4a, 0x61, 0xae, 0xc3, 0xa7, 0x00, 0xef, 0x35, 0xa7, + 0x00, 0xf5, 0x37, 0xa7, 0x00, 0xf6, 0x39, 0xa7, 0x80, 0x04, 0xf9, 0x3d, + 0xa7, 0x40, 0x54, 0xec, 0x3f, 0x3b, 0xa7, 0x40, 0x54, 0x9c, 0x0e, 0x90, + 0x1d, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x45, 0xf9, 0x38, 0xfd, 0x01, + 0x00, 0x46, 0xad, 0x70, 0xe3, 0x01, 0x40, 0x4e, 0xab, 0x7b, 0x31, 0xab, + 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x45, 0xf9, 0x38, 0xe1, 0x00, 0x00, + 0x45, 0x53, 0x23, 0x03, 0x01, 0x80, 0xb5, 0x01, 0xa3, 0x82, 0x01, 0xa4, + 0x53, 0x45, 0x15, 0x23, 0xe0, 0x00, 0x00, 0x4a, 0x37, 0xab, 0xa3, 0x1e, + 0x00, 0x4e, 0x5e, 0x23, 0x03, 0x02, 0x00, 0x46, 0xad, 0x70, 0x01, 0x01, + 0x00, 0x46, 0xba, 0xde, 0x05, 0x01, 0x00, 0xb2, 0x0c, 0x46, 0x52, 0x05, + 0x65, 0x2c, 0x00, 0x45, 0x35, 0x23, 0xe3, 0x00, 0x40, 0x4d, 0xa3, 0x0e, + 0x8f, 0x1d, 0x00, 0xa9, 0x01, 0xff, 0x4d, 0x86, 0x72, 0x9a, 0x1e, 0x00, + 0x03, 0xa2, 0x01, 0x01, 0xff, 0x45, 0x5c, 0x00, 0xe5, 0x00, 0x80, 0x06, + 0x45, 0x20, 0x07, 0x01, 0x1e, 0x40, 0x4a, 0x97, 0xa5, 0xfb, 0x01, 0x40, + 0x48, 0xb8, 0x23, 0xe4, 0x00, 0x80, 0x20, 0xaf, 0x01, 0xff, 0x02, 0xc6, + 0x00, 0x06, 0x4a, 0x10, 0x23, 0x01, 0x02, 0x40, 0x45, 0x5c, 0x00, 0x27, + 0x02, 0x80, 0x06, 0x45, 0x20, 0x07, 0xa1, 0x1e, 0x40, 0x4b, 0x53, 0x97, + 0xe1, 0x01, 0x40, 0x4b, 0x53, 0x97, 0xdf, 0x01, 0x40, 0x44, 0xe7, 0x6c, + 0xce, 0x01, 0x00, 0x49, 0xd0, 0x04, 0xe2, 0x00, 0xc0, 0x00, 0x05, 0x19, + 0x00, 0x01, 0xff, 0x45, 0xf9, 0x38, 0xa5, 0x1e, 0x00, 0x49, 0x9f, 0x12, + 0xad, 0x1e, 0x00, 0x45, 0x15, 0x23, 0xa7, 0x1e, 0x00, 0x4a, 0x37, 0xab, + 0xa9, 0x1e, 0x00, 0x45, 0x35, 0x23, 0xab, 0x1e, 0x40, 0x05, 0x19, 0x00, + 0x01, 0xff, 0x45, 0xf9, 0x38, 0xaf, 0x1e, 0x00, 0x49, 0x9f, 0x12, 0xb7, + 0x1e, 0x00, 0x45, 0x15, 0x23, 0xb1, 0x1e, 0x00, 0x4a, 0x37, 0xab, 0xb3, + 0x1e, 0x00, 0x45, 0x35, 0x23, 0xb5, 0x1e, 0x40, 0x4d, 0xe3, 0x83, 0x7b, + 0x1d, 0x00, 0x4d, 0x6c, 0x89, 0x7e, 0x1d, 0x40, 0xa1, 0x8d, 0x03, 0x02, + 0xe5, 0x06, 0xf1, 0x02, 0x4c, 0xdb, 0x8d, 0xc0, 0x01, 0x00, 0x4c, 0xce, + 0x28, 0x94, 0x02, 0x80, 0xdd, 0x02, 0x55, 0x41, 0x3c, 0x96, 0x02, 0x80, + 0xc4, 0x02, 0x4d, 0xf4, 0x84, 0xc1, 0x01, 0x00, 0x5b, 0xff, 0x1c, 0x95, + 0x02, 0x00, 0x02, 0x88, 0x00, 0x95, 0x02, 0xb3, 0x18, 0x4f, 0x0a, 0x74, + 0xbb, 0x01, 0x00, 0x58, 0xce, 0x2b, 0x24, 0x1d, 0x00, 0x44, 0x68, 0xa4, + 0xbf, 0x01, 0x00, 0x42, 0x05, 0x22, 0xa6, 0x01, 0x40, 0x4e, 0x8d, 0x78, + 0x8f, 0xa7, 0x00, 0x0d, 0xc7, 0x3c, 0x0d, 0x4a, 0x2b, 0xb2, 0x97, 0x02, + 0xc0, 0x00, 0x4a, 0xb6, 0x48, 0x0f, 0xdf, 0x41, 0xe1, 0x00, 0x1d, 0x80, + 0xda, 0x01, 0xe2, 0x99, 0x02, 0x80, 0xce, 0x01, 0xe3, 0x04, 0x1d, 0x00, + 0xe4, 0x05, 0x1d, 0x00, 0xe5, 0x07, 0x1d, 0x80, 0xb4, 0x01, 0xe6, 0x30, + 0xa7, 0x00, 0xe7, 0x62, 0x02, 0x80, 0xa4, 0x01, 0xe8, 0x9c, 0x02, 0x00, + 0xe9, 0x6a, 0x02, 0x80, 0x94, 0x01, 0xea, 0x0a, 0x1d, 0x00, 0xeb, 0x0b, + 0x1d, 0x00, 0xec, 0x9f, 0x02, 0x80, 0x76, 0xed, 0x0d, 0x1d, 0x00, 0xee, + 0x74, 0x02, 0x00, 0xef, 0x0f, 0x1d, 0x80, 0x5b, 0xf0, 0x18, 0x1d, 0x00, + 0xf1, 0xaf, 0xa7, 0x00, 0xf2, 0x80, 0x02, 0x80, 0x36, 0xf3, 0x31, 0xa7, + 0x00, 0xf4, 0x1b, 0x1d, 0x80, 0x14, 0xf5, 0x1c, 0x1d, 0x00, 0xf6, 0x20, + 0x1d, 0x00, 0xf7, 0x21, 0x1d, 0x00, 0xf9, 0x8f, 0x02, 0x00, 0xfa, 0x22, + 0x1d, 0x40, 0x06, 0x71, 0x07, 0x01, 0xff, 0xe5, 0x7b, 0x2c, 0x00, 0xe7, + 0x02, 0xdf, 0x01, 0xeb, 0x10, 0xdf, 0x01, 0xed, 0xfa, 0xa7, 0x00, 0xf2, + 0x1a, 0x1d, 0x40, 0x4f, 0x05, 0x6a, 0x46, 0xab, 0x00, 0x08, 0xde, 0x14, + 0x06, 0x42, 0x48, 0x04, 0x76, 0xa7, 0x40, 0xee, 0x0e, 0x1d, 0x00, 0xf2, + 0x19, 0x1d, 0x40, 0xe5, 0x76, 0x02, 0x00, 0x45, 0xd4, 0xe9, 0x10, 0x1d, + 0x00, 0xf5, 0x15, 0x1d, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x44, 0x5b, + 0xa6, 0x04, 0xdf, 0x01, 0x46, 0x52, 0x05, 0x0c, 0x1d, 0x40, 0x49, 0xc6, + 0xbc, 0x81, 0x02, 0x40, 0x4a, 0xa7, 0x24, 0x9b, 0x02, 0x40, 0x42, 0x53, + 0x00, 0x06, 0x1d, 0x00, 0x42, 0x54, 0x28, 0x23, 0x1d, 0x40, 0x47, 0x02, + 0xcf, 0x03, 0x1d, 0x40, 0xe5, 0x01, 0x1d, 0x40, 0x4d, 0x8f, 0x0e, 0xc3, + 0x01, 0x80, 0x11, 0x07, 0xdf, 0x14, 0x01, 0xff, 0x48, 0xd0, 0xc5, 0xaa, + 0x01, 0x00, 0x58, 0xce, 0x28, 0xa2, 0x02, 0x40, 0x54, 0x9c, 0x0e, 0x0a, + 0xdf, 0x41, 0x06, 0x50, 0x00, 0x01, 0xff, 0x44, 0x72, 0x0b, 0x0e, 0xdf, + 0x01, 0x46, 0x52, 0x05, 0xbe, 0x01, 0x40, 0x4c, 0xda, 0x28, 0xa1, 0x02, + 0x40, 0x51, 0xb8, 0x59, 0xad, 0x02, 0x00, 0x07, 0x18, 0x84, 0x01, 0xff, + 0x45, 0x97, 0x0e, 0x98, 0x02, 0x00, 0x4a, 0xbf, 0x59, 0xac, 0x02, 0x40, + 0x42, 0x9e, 0x01, 0x25, 0x1d, 0x00, 0x4d, 0x69, 0x85, 0xc2, 0x01, 0x40, + 0x49, 0x45, 0xb6, 0xff, 0xa7, 0x00, 0xa9, 0x12, 0x09, 0xdd, 0x14, 0x06, + 0x4a, 0x09, 0xb1, 0xf7, 0xa7, 0x40, 0xe6, 0xfb, 0xa7, 0x00, 0xf0, 0xfc, + 0xa7, 0x40, 0x46, 0x2a, 0xd8, 0xfe, 0xa7, 0x00, 0x49, 0x40, 0x5b, 0xfd, + 0xa7, 0x40, 0x08, 0xe5, 0x05, 0x06, 0x44, 0x96, 0x10, 0x1d, 0x27, 0x40, + 0x06, 0xed, 0x05, 0x11, 0x08, 0x9d, 0x1f, 0x01, 0xff, 0x42, 0x5f, 0xc7, + 0x32, 0x01, 0x00, 0x42, 0x60, 0x51, 0x52, 0x01, 0x40, 0xe1, 0x41, 0x00, + 0x80, 0xa9, 0x16, 0xe2, 0x42, 0x00, 0x80, 0xe5, 0x15, 0xe3, 0x43, 0x00, + 0x80, 0xfd, 0x14, 0xe4, 0x44, 0x00, 0x80, 0x87, 0x14, 0xe5, 0x45, 0x00, + 0x80, 0x8b, 0x12, 0xe6, 0x46, 0x00, 0x80, 0xee, 0x11, 0xe7, 0x47, 0x00, + 0x80, 0x83, 0x11, 0xe8, 0x48, 0x00, 0x80, 0xa2, 0x10, 0xe9, 0x49, 0x00, + 0x80, 0xff, 0x0e, 0xea, 0x4a, 0x00, 0x80, 0xe0, 0x0e, 0xeb, 0x4b, 0x00, + 0x80, 0x8e, 0x0e, 0xec, 0x4c, 0x00, 0x80, 0x89, 0x0d, 0xed, 0x4d, 0x00, + 0x80, 0xc9, 0x0c, 0xee, 0x4e, 0x00, 0x80, 0xdc, 0x0b, 0xef, 0x4f, 0x00, + 0x80, 0x8c, 0x09, 0xf0, 0x50, 0x00, 0x80, 0xce, 0x08, 0xf1, 0x51, 0x00, + 0x80, 0xb7, 0x08, 0xf2, 0x52, 0x00, 0x80, 0xab, 0x07, 0xf3, 0x53, 0x00, + 0x80, 0x87, 0x06, 0xf4, 0x54, 0x00, 0x80, 0xd1, 0x04, 0xf5, 0x55, 0x00, + 0x80, 0xd9, 0x02, 0xf6, 0x56, 0x00, 0x80, 0x8f, 0x02, 0xf7, 0x57, 0x00, + 0x80, 0xce, 0x01, 0xf8, 0x58, 0x00, 0x80, 0xb7, 0x01, 0xf9, 0x59, 0x00, + 0x80, 0x58, 0xfa, 0x5a, 0x00, 0xc0, 0x00, 0x06, 0x50, 0x00, 0x01, 0xff, + 0x45, 0xf9, 0x38, 0x79, 0x01, 0x00, 0xa3, 0x3a, 0xa4, 0x21, 0x44, 0xac, + 0x0e, 0x24, 0x02, 0x00, 0x4a, 0x9d, 0x6d, 0x94, 0x1e, 0x00, 0x4c, 0xf3, + 0x56, 0xc6, 0xa7, 0x00, 0xb3, 0x01, 0xff, 0x45, 0x53, 0x05, 0xb5, 0x01, + 0x00, 0x49, 0x3d, 0xc1, 0x7f, 0x2c, 0x40, 0x48, 0x1e, 0x2b, 0x6b, 0x2c, + 0x00, 0x03, 0x04, 0x0c, 0x01, 0xff, 0x45, 0x5c, 0x00, 0x7b, 0x01, 0x00, + 0x45, 0x20, 0x07, 0x92, 0x1e, 0x40, 0x44, 0xe7, 0x6c, 0x7d, 0x01, 0x00, + 0x49, 0xd0, 0x04, 0x90, 0x1e, 0x40, 0x06, 0x50, 0x00, 0x06, 0x43, 0x25, + 0x52, 0x1c, 0x02, 0x40, 0x45, 0xf9, 0x38, 0xdd, 0x00, 0x00, 0x4a, 0xcf, + 0x04, 0x76, 0x01, 0x00, 0xa4, 0x2b, 0x45, 0x15, 0x23, 0xf2, 0x1e, 0x00, + 0x44, 0xac, 0x0e, 0xb3, 0x01, 0x80, 0x18, 0x44, 0x42, 0x85, 0xfe, 0x1e, + 0x00, 0x46, 0xad, 0x70, 0x32, 0x02, 0x00, 0x46, 0x52, 0x05, 0x4e, 0x02, + 0x00, 0x45, 0x35, 0x23, 0xf8, 0x1e, 0x40, 0x46, 0x5b, 0x00, 0xf6, 0x1e, + 0x40, 0x48, 0xb8, 0x23, 0x78, 0x01, 0x00, 0x03, 0x04, 0x0c, 0x01, 0xff, + 0x45, 0x5c, 0x00, 0x8e, 0x1e, 0x00, 0x45, 0x20, 0x07, 0xf4, 0x1e, 0x40, + 0x07, 0x82, 0x07, 0x01, 0xff, 0x48, 0xb8, 0x23, 0x8c, 0x1e, 0x00, 0x48, + 0x3b, 0x1e, 0x8a, 0x1e, 0x40, 0x06, 0x50, 0x00, 0x06, 0x43, 0x69, 0xa4, + 0xf7, 0x01, 0x40, 0x45, 0xf9, 0x38, 0x82, 0x1e, 0x00, 0x4a, 0xcf, 0x04, + 0x74, 0x01, 0x00, 0xa4, 0x0c, 0x45, 0x15, 0x23, 0x80, 0x1e, 0x00, 0x44, + 0xac, 0x0e, 0x72, 0x2c, 0x40, 0x48, 0xb8, 0x23, 0x84, 0x1e, 0x00, 0x03, + 0x04, 0x0c, 0x01, 0xff, 0x45, 0x5c, 0x00, 0x86, 0x1e, 0x00, 0x45, 0x20, + 0x07, 0x88, 0x1e, 0x40, 0x06, 0x50, 0x00, 0x26, 0x43, 0x40, 0x05, 0x68, + 0xa7, 0x00, 0x4b, 0xba, 0x9d, 0x62, 0xa7, 0x00, 0x07, 0xd2, 0xd3, 0x04, + 0xf9, 0x60, 0xa7, 0x40, 0x42, 0x93, 0x0f, 0x9a, 0xa7, 0x00, 0x42, 0x60, + 0x51, 0x9c, 0xa7, 0x00, 0x42, 0xd6, 0x13, 0x9e, 0xa7, 0x40, 0xa4, 0x0c, + 0x44, 0xac, 0x0e, 0xb2, 0x01, 0x00, 0x45, 0x35, 0x23, 0x7c, 0x1e, 0x40, + 0x4e, 0x8e, 0x3f, 0x5e, 0xa7, 0x00, 0x48, 0xa0, 0x12, 0x7e, 0x1e, 0x40, + 0x80, 0x06, 0x46, 0xcf, 0x15, 0xb1, 0x01, 0x40, 0x43, 0x16, 0x00, 0x44, + 0x02, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x45, 0xf9, 0x38, 0xda, 0x00, + 0x00, 0x45, 0x53, 0x23, 0x6c, 0x01, 0x00, 0xa3, 0xbd, 0x01, 0xa4, 0x75, + 0x45, 0x15, 0x23, 0xd9, 0x00, 0x00, 0x02, 0x0b, 0x00, 0x3b, 0x4e, 0x5e, + 0x23, 0x16, 0x02, 0x00, 0x46, 0xad, 0x70, 0x6a, 0x01, 0x80, 0x28, 0x46, + 0xba, 0xde, 0x72, 0x01, 0x00, 0x4a, 0x5f, 0xb0, 0x6e, 0x01, 0x00, 0x46, + 0x52, 0x05, 0xb8, 0xa7, 0x00, 0x45, 0x35, 0x23, 0x68, 0x01, 0xc0, 0x00, + 0x80, 0x01, 0xff, 0x49, 0x98, 0xa5, 0x78, 0x1e, 0x00, 0x45, 0x20, 0x07, + 0x74, 0x1e, 0x40, 0x4e, 0x45, 0x75, 0x7a, 0x1e, 0x40, 0x48, 0x39, 0xab, + 0xe6, 0x1e, 0x00, 0x42, 0x5e, 0x01, 0xaf, 0x01, 0xc0, 0x00, 0x05, 0x19, + 0x00, 0x01, 0xff, 0x45, 0xf9, 0x38, 0xe8, 0x1e, 0x00, 0x49, 0x9f, 0x12, + 0xf0, 0x1e, 0x00, 0x45, 0x15, 0x23, 0xea, 0x1e, 0x00, 0x4a, 0x37, 0xab, + 0xec, 0x1e, 0x00, 0x45, 0x35, 0x23, 0xee, 0x1e, 0x40, 0x48, 0xb8, 0x23, + 0xdc, 0x00, 0x80, 0x1a, 0xaf, 0x01, 0xff, 0x47, 0xa1, 0x12, 0xe4, 0x1e, + 0x00, 0x05, 0x3d, 0x01, 0x01, 0xff, 0x45, 0xf9, 0x38, 0x70, 0x01, 0x00, + 0x45, 0x15, 0x23, 0x14, 0x02, 0x40, 0x80, 0x01, 0xff, 0x04, 0x1a, 0x00, + 0x06, 0x45, 0x20, 0x07, 0x72, 0x1e, 0x40, 0x45, 0xf9, 0x38, 0xd7, 0x01, + 0x00, 0x45, 0xe8, 0x97, 0xd9, 0x01, 0x00, 0x45, 0x15, 0x23, 0xdb, 0x01, + 0x00, 0x46, 0xad, 0x70, 0xd5, 0x01, 0x40, 0x44, 0xe7, 0x6c, 0xd3, 0x01, + 0x00, 0x49, 0xd0, 0x04, 0xdb, 0x00, 0xc0, 0x00, 0x46, 0x1f, 0x07, 0x76, + 0x1e, 0x40, 0x06, 0x50, 0x00, 0x61, 0x44, 0x60, 0x2d, 0xde, 0x00, 0x80, + 0x4d, 0x04, 0x0e, 0x0b, 0x37, 0x47, 0x53, 0xd5, 0x2a, 0xa7, 0x00, 0x06, + 0x71, 0x07, 0x04, 0xfa, 0x28, 0xa7, 0x40, 0xe1, 0x6f, 0x2c, 0x80, 0x1e, + 0xe8, 0x8d, 0xa7, 0x00, 0x49, 0x14, 0x70, 0x7e, 0xa7, 0x00, 0xeb, 0xb0, + 0xa7, 0x00, 0xec, 0x80, 0xa7, 0x00, 0xed, 0x9c, 0x01, 0x00, 0xf4, 0xb1, + 0xa7, 0x00, 0xf6, 0x45, 0x02, 0x40, 0x44, 0x3f, 0xe4, 0x70, 0x2c, 0x40, + 0x44, 0x80, 0x11, 0xbc, 0x01, 0x00, 0x43, 0x00, 0x26, 0x84, 0x01, 0x00, + 0x43, 0x1f, 0x0a, 0xa7, 0x01, 0x40, 0x4c, 0xda, 0x28, 0x64, 0xa7, 0xc0, + 0x00, 0x52, 0x14, 0x2b, 0x66, 0xa7, 0x40, 0xa3, 0x31, 0xa4, 0x18, 0x44, + 0xac, 0x0e, 0xac, 0x01, 0x00, 0x4a, 0x9d, 0x6d, 0x6e, 0x1e, 0x00, 0x4e, + 0xa2, 0x0e, 0xae, 0x01, 0x00, 0x46, 0x52, 0x05, 0x66, 0x01, 0x40, 0x4e, + 0x8e, 0x3f, 0x3e, 0x02, 0x00, 0x03, 0x04, 0x0c, 0x01, 0xff, 0x45, 0x5c, + 0x00, 0x6a, 0x1e, 0x00, 0x45, 0x20, 0x07, 0x6c, 0x1e, 0x40, 0x44, 0xe7, + 0x6c, 0x64, 0x01, 0x00, 0x46, 0xfa, 0xc1, 0x62, 0x01, 0x00, 0x4f, 0xf1, + 0x6e, 0x70, 0x1e, 0x00, 0x4a, 0xc5, 0xae, 0x1a, 0x02, 0x40, 0x06, 0x50, + 0x00, 0x31, 0x47, 0xb5, 0xce, 0x8b, 0xa7, 0x00, 0xa3, 0x1d, 0x46, 0xf6, + 0xb0, 0x9e, 0x1e, 0x00, 0x48, 0xf0, 0xc6, 0xd8, 0xa7, 0x00, 0x05, 0x5e, + 0x07, 0x01, 0xff, 0x49, 0x0b, 0xb7, 0xae, 0xa7, 0x00, 0x50, 0x16, 0x66, + 0x4a, 0x02, 0x40, 0x43, 0xb6, 0x7b, 0x8f, 0x01, 0x00, 0x46, 0xb2, 0xca, + 0xac, 0xa7, 0x40, 0x45, 0xf9, 0x38, 0x5a, 0x01, 0x80, 0x5c, 0xa3, 0x3b, + 0xa4, 0x1b, 0x44, 0xac, 0x0e, 0xc5, 0xa7, 0x00, 0x4e, 0x4e, 0x43, 0xa8, + 0xa7, 0x00, 0xb3, 0x01, 0xff, 0x53, 0xf0, 0x49, 0xc9, 0xa7, 0x00, 0x49, + 0x3d, 0xc1, 0x7e, 0x2c, 0x40, 0x4e, 0x8e, 0x3f, 0xcc, 0xa7, 0x00, 0x03, + 0x04, 0x0c, 0x01, 0xff, 0x45, 0x5c, 0x00, 0x60, 0x1e, 0x00, 0x45, 0x20, + 0x07, 0x62, 0x1e, 0xc0, 0x00, 0x4e, 0x35, 0x1e, 0x68, 0x1e, 0x40, 0x44, + 0xe7, 0x6c, 0x60, 0x01, 0x80, 0x12, 0x46, 0xfa, 0xc1, 0x5e, 0x01, 0x00, + 0x49, 0xd0, 0x04, 0x5c, 0x01, 0x00, 0x4a, 0xc5, 0xae, 0x18, 0x02, 0x40, + 0x4e, 0x35, 0x1e, 0x66, 0x1e, 0x40, 0x4e, 0x35, 0x1e, 0x64, 0x1e, 0x40, + 0x80, 0x26, 0x48, 0x48, 0xc3, 0xcb, 0xa7, 0x00, 0x08, 0xde, 0x14, 0x06, + 0x4a, 0x99, 0xb2, 0x5c, 0xa7, 0x40, 0x4a, 0x71, 0xa8, 0x3e, 0xa7, 0x00, + 0xe5, 0x8e, 0x01, 0x00, 0x46, 0x3e, 0xdc, 0xf5, 0xa7, 0x00, 0x46, 0x1e, + 0x29, 0xab, 0xa7, 0x40, 0x47, 0x9c, 0xb2, 0x5a, 0xa7, 0x00, 0x05, 0x51, + 0x00, 0x01, 0xff, 0x45, 0xf9, 0x38, 0x54, 0x01, 0x00, 0xa3, 0x3f, 0x02, + 0x3b, 0x01, 0x1e, 0x4e, 0x5e, 0x23, 0x12, 0x02, 0x00, 0x4a, 0x9d, 0x6d, + 0x5e, 0x1e, 0x00, 0x4e, 0x4e, 0x43, 0xa6, 0xa7, 0x00, 0x46, 0x52, 0x05, + 0x4c, 0x02, 0x00, 0x44, 0x8f, 0x17, 0x64, 0x2c, 0x40, 0x02, 0xc6, 0x00, + 0x06, 0x4a, 0x10, 0x23, 0x10, 0x02, 0x40, 0x45, 0x5c, 0x00, 0x58, 0x1e, + 0x00, 0x45, 0x20, 0x07, 0x5a, 0x1e, 0xc0, 0x00, 0x4b, 0x53, 0x97, 0x5c, + 0x1e, 0x40, 0x44, 0xe7, 0x6c, 0x58, 0x01, 0x00, 0x46, 0xfa, 0xc1, 0x56, + 0x01, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x4f, 0x8d, 0x3f, 0x58, 0xa7, + 0x00, 0x58, 0x0e, 0x2b, 0x56, 0xa7, 0x40, 0x06, 0x50, 0x00, 0x06, 0x5a, + 0x00, 0x1d, 0xce, 0xa7, 0x40, 0x45, 0xf9, 0x38, 0x54, 0x1e, 0x00, 0x49, + 0x3a, 0x1e, 0x56, 0x1e, 0x00, 0x48, 0x30, 0xc6, 0x52, 0xa7, 0x00, 0x44, + 0xac, 0x0e, 0xa4, 0x01, 0x00, 0xb3, 0x01, 0xff, 0x4c, 0xff, 0x93, 0x54, + 0xa7, 0x00, 0x45, 0x53, 0x05, 0x63, 0x2c, 0xc0, 0x00, 0x52, 0x14, 0x2b, + 0x50, 0xa7, 0x40, 0x06, 0x50, 0x00, 0x24, 0xe9, 0xa2, 0x01, 0x00, 0x4b, + 0x5f, 0x9e, 0xc0, 0xa7, 0x00, 0x44, 0xcc, 0x7b, 0xb6, 0xa7, 0x00, 0xef, + 0x4e, 0xa7, 0x00, 0x04, 0xf7, 0x04, 0x04, 0xf5, 0x22, 0x02, 0x40, 0xe5, + 0x90, 0x01, 0x00, 0xef, 0x86, 0x01, 0x40, 0x45, 0xf9, 0x38, 0xd3, 0x00, + 0x00, 0x45, 0x53, 0x23, 0x4e, 0x01, 0x00, 0xa3, 0xe3, 0x01, 0xa4, 0xa8, + 0x01, 0x45, 0x15, 0x23, 0xd2, 0x00, 0x00, 0x02, 0x0b, 0x00, 0x6e, 0x4e, + 0x5e, 0x23, 0x0e, 0x02, 0x00, 0x02, 0x13, 0x01, 0x58, 0xad, 0x38, 0x46, + 0xba, 0xde, 0xea, 0x01, 0x80, 0x2b, 0x46, 0x52, 0x05, 0xd8, 0x00, 0x80, + 0x1e, 0x45, 0x35, 0x23, 0xd5, 0x00, 0xc0, 0x00, 0x05, 0x19, 0x00, 0x01, + 0xff, 0x45, 0xf9, 0x38, 0x4c, 0x1e, 0x00, 0x49, 0xb7, 0x23, 0x4e, 0x1e, + 0x00, 0x46, 0xad, 0x70, 0x2c, 0x02, 0x40, 0x4a, 0x97, 0xa5, 0xfe, 0x01, + 0x40, 0x4b, 0x53, 0x97, 0xec, 0x01, 0x40, 0x45, 0xae, 0x70, 0x4c, 0x01, + 0x80, 0x06, 0x4b, 0x2f, 0x23, 0x9f, 0x01, 0x40, 0x05, 0x19, 0x00, 0x01, + 0xff, 0x45, 0xf9, 0x38, 0x52, 0x1e, 0x00, 0x45, 0x15, 0x23, 0x50, 0x1e, + 0x40, 0x51, 0xc6, 0x5c, 0x4a, 0xa7, 0x00, 0x42, 0x1f, 0x00, 0x4c, 0xa7, + 0x40, 0x48, 0x39, 0xab, 0xce, 0x1e, 0x00, 0x42, 0x5e, 0x01, 0xa0, 0x01, + 0xc0, 0x00, 0x05, 0x19, 0x00, 0x01, 0xff, 0x45, 0xf9, 0x38, 0xda, 0x1e, + 0x00, 0x49, 0x9f, 0x12, 0xe2, 0x1e, 0x00, 0x45, 0x15, 0x23, 0xdc, 0x1e, + 0x00, 0x4a, 0x37, 0xab, 0xde, 0x1e, 0x00, 0x45, 0x35, 0x23, 0xe0, 0x1e, + 0x40, 0x48, 0xb8, 0x23, 0xd6, 0x00, 0x80, 0x2b, 0xaf, 0x01, 0xff, 0x02, + 0xc6, 0x00, 0x11, 0x05, 0x3d, 0x01, 0x01, 0xff, 0x45, 0xf9, 0x38, 0x50, + 0x01, 0x00, 0x45, 0x15, 0x23, 0x0c, 0x02, 0x40, 0x45, 0x5c, 0x00, 0x2e, + 0x02, 0x80, 0x06, 0x45, 0x20, 0x07, 0xcc, 0x1e, 0x40, 0x4b, 0x53, 0x97, + 0x30, 0x02, 0x40, 0x4b, 0x53, 0x97, 0x2a, 0x02, 0x40, 0x44, 0xe7, 0x6c, + 0xd1, 0x01, 0x00, 0x49, 0xd0, 0x04, 0xd4, 0x00, 0xc0, 0x00, 0x05, 0x19, + 0x00, 0x01, 0xff, 0x45, 0xf9, 0x38, 0xd0, 0x1e, 0x00, 0x49, 0x9f, 0x12, + 0xd8, 0x1e, 0x00, 0x45, 0x15, 0x23, 0xd2, 0x1e, 0x00, 0x4a, 0x37, 0xab, + 0xd4, 0x1e, 0x00, 0x45, 0x35, 0x23, 0xd6, 0x1e, 0x40, 0x06, 0x50, 0x00, + 0x04, 0xea, 0xca, 0x01, 0x40, 0x45, 0xf9, 0x38, 0x43, 0x01, 0x00, 0xa3, + 0x45, 0xa4, 0x2c, 0x45, 0x15, 0x23, 0xf8, 0x01, 0x00, 0xac, 0x12, 0x4e, + 0x4e, 0x43, 0xa4, 0xa7, 0x00, 0x4e, 0x53, 0x7c, 0xcb, 0x01, 0x00, 0x45, + 0x35, 0x23, 0xd1, 0x00, 0x40, 0x48, 0xb2, 0x57, 0x9d, 0x01, 0x00, 0x49, + 0x9e, 0x6d, 0x48, 0x1e, 0x00, 0x4d, 0xef, 0x86, 0x20, 0x02, 0x40, 0x48, + 0x1e, 0x2b, 0x90, 0xa7, 0x00, 0x03, 0x04, 0x0c, 0x01, 0xff, 0x45, 0x5c, + 0x00, 0x44, 0x1e, 0x00, 0x45, 0x20, 0x07, 0x46, 0x1e, 0x40, 0x44, 0xe7, + 0x6c, 0x47, 0x01, 0x00, 0x46, 0xfa, 0xc1, 0x45, 0x01, 0x00, 0x4f, 0xf1, + 0x6e, 0x4a, 0x1e, 0x40, 0x06, 0x50, 0x00, 0x1a, 0x05, 0x7e, 0x02, 0x01, + 0xff, 0x48, 0x88, 0xc2, 0xd6, 0xa7, 0x00, 0x07, 0xea, 0xcd, 0x01, 0xff, + 0x42, 0x60, 0x07, 0xfa, 0x1e, 0x00, 0xf6, 0xfc, 0x1e, 0x40, 0x45, 0xf9, + 0x38, 0x3e, 0x1e, 0x00, 0x04, 0x03, 0x0c, 0x06, 0x44, 0xac, 0x0e, 0x6e, + 0x2c, 0x40, 0x45, 0x5c, 0x00, 0x40, 0x1e, 0x00, 0x45, 0x20, 0x07, 0x42, + 0x1e, 0x40, 0x06, 0x50, 0x00, 0x11, 0x45, 0x43, 0xe4, 0xda, 0xa7, 0x80, + 0x04, 0xea, 0xc7, 0x01, 0x40, 0x4c, 0xda, 0x28, 0xdc, 0xa7, 0x40, 0x45, + 0xf9, 0x38, 0x39, 0x01, 0x00, 0xa2, 0x56, 0xa3, 0x42, 0x02, 0x3b, 0x01, + 0x2b, 0x4b, 0xe9, 0x9c, 0x48, 0xa7, 0x00, 0x4a, 0x9d, 0x6d, 0x3a, 0x1e, + 0x00, 0x07, 0x7d, 0x02, 0x0f, 0xb3, 0x01, 0xff, 0x4d, 0x54, 0x7c, 0xc8, + 0x01, 0x00, 0x45, 0x53, 0x05, 0x41, 0x01, 0x40, 0x43, 0x23, 0x0a, 0x3f, + 0x01, 0x00, 0x45, 0x35, 0x23, 0x62, 0x2c, 0x40, 0x47, 0xa1, 0x12, 0x36, + 0x1e, 0x80, 0x06, 0x48, 0x63, 0xa9, 0x60, 0x2c, 0x40, 0x4b, 0x53, 0x97, + 0x38, 0x1e, 0x40, 0x44, 0xe7, 0x6c, 0x3d, 0x01, 0x00, 0x46, 0xfa, 0xc1, + 0x3b, 0x01, 0x00, 0x4f, 0xf1, 0x6e, 0x3c, 0x1e, 0x40, 0x42, 0x17, 0x00, + 0x3d, 0x02, 0x00, 0x43, 0xdd, 0xa3, 0xad, 0xa7, 0x40, 0x06, 0x50, 0x00, + 0x01, 0xff, 0x45, 0xf9, 0x38, 0x30, 0x1e, 0x00, 0xa3, 0x33, 0xa4, 0x1f, + 0x44, 0xac, 0x0e, 0x98, 0x01, 0x00, 0x4a, 0x9d, 0x6d, 0x34, 0x1e, 0x00, + 0x4e, 0x4e, 0x43, 0xa2, 0xa7, 0x00, 0x46, 0x52, 0x05, 0x40, 0xa7, 0xc0, + 0x00, 0x54, 0x88, 0x3f, 0x44, 0xa7, 0x40, 0x48, 0x1e, 0x2b, 0x69, 0x2c, + 0x00, 0x4e, 0x8e, 0x3f, 0x42, 0xa7, 0x00, 0x48, 0xa0, 0x12, 0x32, 0x1e, + 0x40, 0x44, 0xe7, 0x6c, 0xe8, 0x01, 0x00, 0x46, 0xfa, 0xc1, 0x36, 0x01, + 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0xa3, 0x06, 0x46, 0x52, 0x05, 0x48, + 0x02, 0x40, 0x49, 0xd0, 0x04, 0x34, 0x01, 0x00, 0x4b, 0xca, 0x4f, 0xb2, + 0xa7, 0x40, 0x06, 0x50, 0x00, 0x26, 0x07, 0x15, 0x70, 0x0a, 0x43, 0x1b, + 0x05, 0x96, 0x01, 0x00, 0xf3, 0x6c, 0xa7, 0x40, 0xe4, 0x79, 0xa7, 0x00, + 0xe6, 0x7b, 0xa7, 0x00, 0xe7, 0x7d, 0xa7, 0x00, 0xf2, 0x82, 0xa7, 0x00, + 0xf3, 0x84, 0xa7, 0x00, 0xf4, 0x86, 0xa7, 0x40, 0x45, 0xf9, 0x38, 0xcd, + 0x00, 0x00, 0x45, 0x53, 0x23, 0x2c, 0x01, 0x00, 0xa3, 0x59, 0xa4, 0x31, + 0x45, 0x15, 0x23, 0xcc, 0x00, 0x00, 0x4a, 0x37, 0xab, 0xc8, 0x1e, 0x00, + 0x4e, 0x5e, 0x23, 0x0a, 0x02, 0x00, 0x46, 0xad, 0x70, 0x2a, 0x01, 0x00, + 0x46, 0xba, 0xde, 0x2e, 0x01, 0x00, 0x46, 0x52, 0x05, 0x97, 0x01, 0x00, + 0x45, 0x35, 0x23, 0x28, 0x01, 0xc0, 0x00, 0x46, 0x1f, 0x07, 0x2c, 0x1e, + 0x40, 0x48, 0xb8, 0x23, 0xcf, 0x00, 0x80, 0x19, 0xaf, 0x01, 0xff, 0x02, + 0xc6, 0x00, 0x06, 0x4a, 0x10, 0x23, 0x08, 0x02, 0x40, 0x45, 0x5c, 0x00, + 0x30, 0x01, 0x00, 0x45, 0x20, 0x07, 0xca, 0x1e, 0x40, 0x4a, 0x97, 0xa5, + 0x2e, 0x1e, 0x40, 0x44, 0xe7, 0x6c, 0xcf, 0x01, 0x00, 0x49, 0xd0, 0x04, + 0xce, 0x00, 0x40, 0x06, 0x50, 0x00, 0x12, 0x45, 0x3f, 0xdc, 0x75, 0x2c, + 0x00, 0x43, 0x4c, 0x0a, 0x26, 0xa7, 0x00, 0x44, 0x21, 0xf3, 0xf6, 0x01, + 0x40, 0x4b, 0xbb, 0x99, 0x2a, 0x1e, 0x00, 0xa3, 0x2b, 0xa4, 0x0c, 0x44, + 0xac, 0x0e, 0xaa, 0xa7, 0x00, 0x46, 0x52, 0x05, 0x26, 0x01, 0x40, 0x48, + 0x1e, 0x2b, 0x67, 0x2c, 0x00, 0x48, 0xb8, 0x23, 0x26, 0x1e, 0x00, 0x03, + 0x04, 0x0c, 0x01, 0xff, 0x45, 0x5c, 0x00, 0x22, 0x1e, 0x00, 0x45, 0x20, + 0x07, 0x24, 0x1e, 0x40, 0x44, 0xe7, 0x6c, 0x1e, 0x02, 0x00, 0x46, 0xfa, + 0xc1, 0x28, 0x1e, 0x00, 0x49, 0xd0, 0x04, 0x24, 0x01, 0x40, 0x06, 0x50, + 0x00, 0x23, 0x44, 0x00, 0x21, 0x94, 0x01, 0x00, 0x42, 0x22, 0x00, 0xa2, + 0x01, 0x00, 0x07, 0xcf, 0x28, 0x01, 0xff, 0xe1, 0xba, 0xa7, 0x00, 0xe9, + 0xbc, 0xa7, 0x00, 0x44, 0x55, 0x03, 0x41, 0x02, 0x00, 0xf5, 0xbe, 0xa7, + 0x40, 0x45, 0xf9, 0x38, 0xf4, 0x01, 0x00, 0x45, 0x53, 0x23, 0x1e, 0x01, + 0x00, 0xa3, 0x1e, 0x49, 0x3a, 0x1e, 0x20, 0x01, 0x00, 0x44, 0xac, 0x0e, + 0x93, 0x01, 0x00, 0x46, 0xad, 0x70, 0x20, 0x1e, 0x00, 0x4e, 0x4e, 0x43, + 0xa0, 0xa7, 0x00, 0x46, 0x52, 0x05, 0xe4, 0x01, 0x40, 0x44, 0xe7, 0x6c, + 0xe6, 0x01, 0x00, 0x46, 0xfa, 0xc1, 0x22, 0x01, 0x00, 0x49, 0xd0, 0x04, + 0x1c, 0x01, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x49, 0x3a, 0x1e, 0x1e, + 0x1e, 0x00, 0x44, 0xac, 0x0e, 0x91, 0x01, 0x00, 0x46, 0x52, 0x05, 0x98, + 0xa7, 0x40, 0x06, 0x50, 0x00, 0x3b, 0x0e, 0x2b, 0x78, 0x2b, 0x42, 0x1d, + 0x01, 0x4a, 0x01, 0x00, 0x42, 0xa4, 0x02, 0xa9, 0x01, 0x00, 0xf4, 0x6a, + 0xa7, 0x80, 0x16, 0x42, 0x54, 0x28, 0xb7, 0x01, 0xc0, 0x00, 0x80, 0x01, + 0xff, 0x48, 0x58, 0x13, 0xb8, 0x01, 0x00, 0x4a, 0xe3, 0x97, 0xee, 0x01, + 0x40, 0xe8, 0xd0, 0x00, 0x40, 0x42, 0x9e, 0x01, 0x24, 0xa7, 0x00, 0x43, + 0x68, 0x00, 0x22, 0xa7, 0x40, 0x45, 0xf9, 0x38, 0xc9, 0x00, 0x00, 0x45, + 0x53, 0x23, 0x14, 0x01, 0x00, 0xa3, 0x64, 0xa4, 0x43, 0x45, 0x15, 0x23, + 0xc8, 0x00, 0x00, 0x4a, 0x37, 0xab, 0xba, 0x1e, 0x00, 0x4e, 0x5e, 0x23, + 0x06, 0x02, 0x00, 0x46, 0xad, 0x70, 0x12, 0x01, 0x80, 0x19, 0x46, 0xba, + 0xde, 0x18, 0x01, 0x00, 0x46, 0x52, 0x05, 0x46, 0x02, 0x00, 0x45, 0x35, + 0x23, 0xbc, 0x1e, 0xc0, 0x00, 0x46, 0x1f, 0x07, 0x1a, 0x1e, 0x40, 0x05, + 0x19, 0x00, 0x01, 0xff, 0x45, 0xf9, 0x38, 0x16, 0x1e, 0x00, 0x45, 0x15, + 0x23, 0x14, 0x1e, 0x40, 0x48, 0xb8, 0x23, 0xcb, 0x00, 0x00, 0xaf, 0x01, + 0xff, 0x02, 0xc6, 0x00, 0x06, 0x4a, 0x10, 0x23, 0x04, 0x02, 0x40, 0x45, + 0x5c, 0x00, 0x16, 0x01, 0x00, 0x45, 0x20, 0x07, 0xb8, 0x1e, 0x40, 0x44, + 0xe7, 0x6c, 0x1a, 0x01, 0x00, 0x46, 0xfa, 0xc1, 0x28, 0x02, 0x80, 0x32, + 0x49, 0xd0, 0x04, 0xca, 0x00, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x04, 0x1a, + 0x00, 0x06, 0x45, 0x20, 0x07, 0x18, 0x1e, 0x40, 0x45, 0xf9, 0x38, 0xbe, + 0x1e, 0x00, 0x49, 0x9f, 0x12, 0xc6, 0x1e, 0x00, 0x45, 0x15, 0x23, 0xc0, + 0x1e, 0x00, 0x4a, 0x37, 0xab, 0xc2, 0x1e, 0x00, 0x45, 0x35, 0x23, 0xc4, + 0x1e, 0x40, 0x4a, 0xab, 0xa5, 0x1c, 0x1e, 0x40, 0x06, 0x50, 0x00, 0x1b, + 0x06, 0x3c, 0x01, 0x0b, 0xfa, 0xf1, 0x01, 0xc0, 0x00, 0x4b, 0xe2, 0x97, + 0xc4, 0x01, 0x40, 0x45, 0x11, 0x4a, 0xd2, 0xa7, 0x00, 0x44, 0x68, 0xa4, + 0xd4, 0xa7, 0x40, 0xa3, 0x3d, 0x04, 0x03, 0x0c, 0x2d, 0x44, 0xac, 0x0e, + 0x8a, 0x01, 0x00, 0x4a, 0x9d, 0x6d, 0x0e, 0x1e, 0x00, 0xb3, 0x06, 0x46, + 0xa6, 0xe0, 0x8b, 0x01, 0x40, 0x53, 0xf0, 0x49, 0xc7, 0xa7, 0x00, 0x4d, + 0x83, 0x85, 0xf2, 0x01, 0x80, 0x06, 0x45, 0x53, 0x05, 0x10, 0x01, 0x40, + 0x4b, 0xe2, 0x97, 0xc5, 0x01, 0x40, 0x45, 0x5c, 0x00, 0x0a, 0x1e, 0x00, + 0x45, 0x20, 0x07, 0x0c, 0x1e, 0x40, 0x44, 0xe7, 0x6c, 0x0e, 0x01, 0x00, + 0x46, 0xfa, 0xc1, 0x10, 0x1e, 0x00, 0x4f, 0xf1, 0x6e, 0x12, 0x1e, 0x40, + 0x06, 0x50, 0x00, 0x1f, 0x42, 0x49, 0x00, 0xb3, 0xa7, 0x00, 0x4f, 0x0e, + 0x70, 0xd0, 0xa7, 0x00, 0x42, 0x10, 0x00, 0x6e, 0xa7, 0x00, 0x48, 0xe8, + 0xcb, 0x2c, 0xa7, 0xc0, 0x00, 0x4b, 0xed, 0x97, 0x2e, 0xa7, 0x40, 0x45, + 0xf9, 0x38, 0x06, 0x01, 0x00, 0x43, 0x16, 0x00, 0x92, 0xa7, 0x00, 0xa3, + 0x18, 0x49, 0x3a, 0x1e, 0x0a, 0x01, 0x00, 0x44, 0xac, 0x0e, 0x87, 0x01, + 0x00, 0x4c, 0xf3, 0x56, 0xc4, 0xa7, 0x00, 0x46, 0x52, 0x05, 0x3b, 0x02, + 0x40, 0x44, 0xe7, 0x6c, 0x0c, 0x01, 0x00, 0x46, 0xfa, 0xc1, 0xc7, 0x00, + 0x80, 0x06, 0x49, 0xd0, 0x04, 0x08, 0x01, 0x40, 0x4a, 0x97, 0xa5, 0x08, + 0x1e, 0x40, 0x06, 0x50, 0x00, 0x0c, 0x43, 0x94, 0x0f, 0xb4, 0xa7, 0x00, + 0x47, 0x6f, 0xd5, 0x46, 0xa7, 0x40, 0x04, 0x03, 0x0c, 0x1e, 0x48, 0x30, + 0xc6, 0x96, 0xa7, 0x00, 0x44, 0xac, 0x0e, 0x81, 0x01, 0x00, 0x4a, 0x9d, + 0x6d, 0x06, 0x1e, 0x00, 0x46, 0x52, 0x05, 0x43, 0x02, 0x00, 0x46, 0xa6, + 0xe0, 0x82, 0x01, 0x40, 0x45, 0x5c, 0x00, 0x02, 0x1e, 0x00, 0x45, 0x20, + 0x07, 0x04, 0x1e, 0x40, 0x06, 0x50, 0x00, 0x43, 0xe1, 0x32, 0xa7, 0x00, + 0xe5, 0xc6, 0x00, 0x80, 0x29, 0x48, 0x48, 0xc6, 0x89, 0x01, 0x00, 0x44, + 0x3f, 0xe4, 0x6d, 0x2c, 0x00, 0x4a, 0x61, 0xae, 0xc2, 0xa7, 0x00, 0xef, 0x34, 0xa7, 0x00, 0xf5, 0x36, 0xa7, 0x00, 0xf6, 0x38, 0xa7, 0x80, 0x04, - 0xf9, 0x3c, 0xa7, 0x40, 0x54, 0xf3, 0x3e, 0x3a, 0xa7, 0x40, 0x06, 0x50, - 0x00, 0x01, 0xff, 0x45, 0x29, 0x38, 0xfc, 0x01, 0x00, 0x46, 0x04, 0x6f, - 0xe2, 0x01, 0x40, 0x45, 0x29, 0x38, 0xc1, 0x00, 0x00, 0x45, 0xcb, 0x22, - 0x02, 0x01, 0x80, 0xa2, 0x01, 0xa3, 0x70, 0xa4, 0x41, 0x45, 0x8d, 0x22, - 0xc0, 0x00, 0x00, 0x4a, 0xfb, 0xa8, 0xa2, 0x1e, 0x00, 0x4e, 0xd6, 0x22, - 0x02, 0x02, 0x00, 0x46, 0x04, 0x6f, 0x00, 0x01, 0x00, 0x46, 0xc2, 0xdb, - 0x04, 0x01, 0x00, 0x05, 0xf7, 0x07, 0x0c, 0x46, 0x27, 0x05, 0x3a, 0x02, - 0x00, 0x45, 0xad, 0x22, 0xc3, 0x00, 0x40, 0x45, 0x5c, 0x00, 0xc5, 0x00, - 0x80, 0x06, 0x45, 0xf5, 0x06, 0x00, 0x1e, 0x40, 0x4a, 0x5b, 0xa3, 0xfa, - 0x01, 0x40, 0x48, 0x30, 0x23, 0xc4, 0x00, 0x80, 0x20, 0xaf, 0x01, 0xff, - 0x02, 0xc6, 0x00, 0x06, 0x4a, 0x88, 0x22, 0x00, 0x02, 0x40, 0x45, 0x5c, - 0x00, 0x26, 0x02, 0x80, 0x06, 0x45, 0xf5, 0x06, 0xa0, 0x1e, 0x40, 0x4b, - 0x59, 0x95, 0xe0, 0x01, 0x40, 0x4b, 0x59, 0x95, 0xde, 0x01, 0x40, 0x44, - 0x4d, 0x6b, 0xcd, 0x01, 0x00, 0x49, 0xa5, 0x04, 0xc2, 0x00, 0xc0, 0x00, - 0x05, 0x19, 0x00, 0x01, 0xff, 0x45, 0x29, 0x38, 0xa4, 0x1e, 0x00, 0x49, - 0x50, 0x12, 0xac, 0x1e, 0x00, 0x45, 0x8d, 0x22, 0xa6, 0x1e, 0x00, 0x4a, - 0xfb, 0xa8, 0xa8, 0x1e, 0x00, 0x45, 0xad, 0x22, 0xaa, 0x1e, 0x40, 0x05, - 0x19, 0x00, 0x01, 0xff, 0x45, 0x29, 0x38, 0xae, 0x1e, 0x00, 0x49, 0x50, - 0x12, 0xb6, 0x1e, 0x00, 0x45, 0x8d, 0x22, 0xb0, 0x1e, 0x00, 0x4a, 0xfb, - 0xa8, 0xb2, 0x1e, 0x00, 0x45, 0xad, 0x22, 0xb4, 0x1e, 0x40, 0x80, 0x01, - 0xff, 0x46, 0xeb, 0x07, 0x17, 0xf3, 0x01, 0x49, 0xc8, 0xbe, 0x1c, 0xf3, - 0x41, 0x02, 0x8c, 0x09, 0x06, 0x46, 0xf7, 0x99, 0xbe, 0x20, 0x40, 0x80, - 0x0d, 0x46, 0x05, 0xce, 0xab, 0x2a, 0xc0, 0x00, 0x4c, 0x51, 0x28, 0xad, - 0x2a, 0x40, 0xa2, 0xbd, 0x04, 0x46, 0xe7, 0x02, 0xef, 0x25, 0x00, 0x49, - 0x20, 0x38, 0xd9, 0x27, 0x00, 0x06, 0x4e, 0x88, 0xa0, 0x04, 0x56, 0x7d, - 0x34, 0x1e, 0x2a, 0x00, 0xaf, 0xf0, 0x03, 0x07, 0x1e, 0xd2, 0xdf, 0x03, - 0x04, 0xaf, 0x05, 0xce, 0x03, 0xb4, 0x17, 0x47, 0x16, 0xd4, 0xd8, 0x27, - 0x00, 0x07, 0x04, 0xd5, 0x01, 0xff, 0x46, 0xe7, 0x02, 0xe1, 0xf7, 0x01, - 0x46, 0xab, 0x05, 0xe8, 0xf7, 0x41, 0x5b, 0xc9, 0x1c, 0xfc, 0x2a, 0x00, - 0x03, 0xd1, 0x09, 0x9e, 0x03, 0x0a, 0x9d, 0xb1, 0x01, 0xff, 0xa3, 0xe8, - 0x02, 0x09, 0x42, 0x25, 0xb4, 0x02, 0xac, 0xcb, 0x01, 0xb2, 0xbc, 0x01, - 0xb3, 0x4e, 0x06, 0x6d, 0x02, 0x06, 0x4b, 0x95, 0xa2, 0x41, 0xce, 0x41, - 0x0f, 0x3a, 0x6c, 0x38, 0x05, 0xc3, 0x00, 0x1f, 0x06, 0xc8, 0x00, 0x06, - 0x48, 0x66, 0x78, 0x1c, 0xce, 0x41, 0x43, 0x3e, 0x17, 0x24, 0xce, 0x01, - 0xa3, 0x01, 0xff, 0x45, 0xcf, 0x0a, 0x27, 0xce, 0x01, 0x45, 0x5a, 0xe7, - 0x26, 0xce, 0x41, 0x43, 0x3e, 0x17, 0x1a, 0xce, 0x01, 0xa3, 0x01, 0xff, - 0x45, 0xcf, 0x0a, 0x1b, 0xce, 0x01, 0x45, 0x5a, 0xe7, 0x1d, 0xce, 0x41, - 0xed, 0x21, 0xce, 0x01, 0xf7, 0x31, 0xce, 0x41, 0x05, 0x75, 0x33, 0x5c, - 0x43, 0x2a, 0x10, 0x29, 0xce, 0xc1, 0x00, 0x06, 0x50, 0x00, 0x35, 0x8d, - 0x01, 0xff, 0x42, 0x36, 0xf0, 0x50, 0xce, 0x81, 0x25, 0xd2, 0x4f, 0xce, + 0xf9, 0x3c, 0xa7, 0x40, 0x54, 0xec, 0x3f, 0x3a, 0xa7, 0x40, 0x06, 0x50, + 0x00, 0x01, 0xff, 0x45, 0xf9, 0x38, 0xfc, 0x01, 0x00, 0x46, 0xad, 0x70, + 0xe2, 0x01, 0x40, 0x45, 0xf9, 0x38, 0xc1, 0x00, 0x00, 0x45, 0x53, 0x23, + 0x02, 0x01, 0x80, 0xa2, 0x01, 0xa3, 0x70, 0xa4, 0x41, 0x45, 0x15, 0x23, + 0xc0, 0x00, 0x00, 0x4a, 0x37, 0xab, 0xa2, 0x1e, 0x00, 0x4e, 0x5e, 0x23, + 0x02, 0x02, 0x00, 0x46, 0xad, 0x70, 0x00, 0x01, 0x00, 0x46, 0xba, 0xde, + 0x04, 0x01, 0x00, 0x05, 0x22, 0x08, 0x0c, 0x46, 0x52, 0x05, 0x3a, 0x02, + 0x00, 0x45, 0x35, 0x23, 0xc3, 0x00, 0x40, 0x45, 0x5c, 0x00, 0xc5, 0x00, + 0x80, 0x06, 0x45, 0x20, 0x07, 0x00, 0x1e, 0x40, 0x4a, 0x97, 0xa5, 0xfa, + 0x01, 0x40, 0x48, 0xb8, 0x23, 0xc4, 0x00, 0x80, 0x20, 0xaf, 0x01, 0xff, + 0x02, 0xc6, 0x00, 0x06, 0x4a, 0x10, 0x23, 0x00, 0x02, 0x40, 0x45, 0x5c, + 0x00, 0x26, 0x02, 0x80, 0x06, 0x45, 0x20, 0x07, 0xa0, 0x1e, 0x40, 0x4b, + 0x53, 0x97, 0xe0, 0x01, 0x40, 0x4b, 0x53, 0x97, 0xde, 0x01, 0x40, 0x44, + 0xe7, 0x6c, 0xcd, 0x01, 0x00, 0x49, 0xd0, 0x04, 0xc2, 0x00, 0xc0, 0x00, + 0x05, 0x19, 0x00, 0x01, 0xff, 0x45, 0xf9, 0x38, 0xa4, 0x1e, 0x00, 0x49, + 0x9f, 0x12, 0xac, 0x1e, 0x00, 0x45, 0x15, 0x23, 0xa6, 0x1e, 0x00, 0x4a, + 0x37, 0xab, 0xa8, 0x1e, 0x00, 0x45, 0x35, 0x23, 0xaa, 0x1e, 0x40, 0x05, + 0x19, 0x00, 0x01, 0xff, 0x45, 0xf9, 0x38, 0xae, 0x1e, 0x00, 0x49, 0x9f, + 0x12, 0xb6, 0x1e, 0x00, 0x45, 0x15, 0x23, 0xb0, 0x1e, 0x00, 0x4a, 0x37, + 0xab, 0xb2, 0x1e, 0x00, 0x45, 0x35, 0x23, 0xb4, 0x1e, 0x40, 0x80, 0x01, + 0xff, 0x46, 0x16, 0x08, 0x17, 0xf3, 0x01, 0x49, 0x4f, 0xc1, 0x1c, 0xf3, + 0x41, 0x02, 0xdb, 0x09, 0x06, 0x46, 0x12, 0x9c, 0xbe, 0x20, 0x40, 0x80, + 0x0d, 0x46, 0xdf, 0xd0, 0xab, 0x2a, 0xc0, 0x00, 0x4c, 0xf2, 0x28, 0xad, + 0x2a, 0x40, 0xa2, 0xbd, 0x04, 0x46, 0x12, 0x03, 0xef, 0x25, 0x00, 0x49, + 0xf0, 0x38, 0xd9, 0x27, 0x00, 0x06, 0x0b, 0x8a, 0xa0, 0x04, 0x56, 0x4d, + 0x35, 0x1e, 0x2a, 0x00, 0xaf, 0xf0, 0x03, 0x07, 0xf1, 0xd4, 0xdf, 0x03, + 0x04, 0xda, 0x05, 0xce, 0x03, 0xb4, 0x17, 0x47, 0xe9, 0xd6, 0xd8, 0x27, + 0x00, 0x07, 0xde, 0xd7, 0x01, 0xff, 0x46, 0x12, 0x03, 0xe1, 0xf7, 0x01, + 0x46, 0xd6, 0x05, 0xe8, 0xf7, 0x41, 0x5b, 0x6b, 0x1d, 0xfc, 0x2a, 0x00, + 0x03, 0x20, 0x0a, 0x9e, 0x03, 0x0a, 0xf7, 0xb3, 0x01, 0xff, 0xa3, 0xe8, + 0x02, 0x09, 0xe3, 0x25, 0xb4, 0x02, 0xac, 0xcb, 0x01, 0xb2, 0xbc, 0x01, + 0xb3, 0x4e, 0x06, 0x6d, 0x02, 0x06, 0x4b, 0xd1, 0xa4, 0x41, 0xce, 0x41, + 0x0f, 0xe3, 0x6d, 0x38, 0x05, 0xc3, 0x00, 0x1f, 0x06, 0xc8, 0x00, 0x06, + 0x48, 0xc7, 0x79, 0x1c, 0xce, 0x41, 0x43, 0xaa, 0x17, 0x24, 0xce, 0x01, + 0xa3, 0x01, 0xff, 0x45, 0x1e, 0x0b, 0x27, 0xce, 0x01, 0x45, 0x7e, 0xea, + 0x26, 0xce, 0x41, 0x43, 0xaa, 0x17, 0x1a, 0xce, 0x01, 0xa3, 0x01, 0xff, + 0x45, 0x1e, 0x0b, 0x1b, 0xce, 0x01, 0x45, 0x7e, 0xea, 0x1d, 0xce, 0x41, + 0xed, 0x21, 0xce, 0x01, 0xf7, 0x31, 0xce, 0x41, 0x05, 0x34, 0x07, 0x5c, + 0x43, 0x79, 0x10, 0x29, 0xce, 0xc1, 0x00, 0x06, 0x50, 0x00, 0x35, 0x8d, + 0x01, 0xff, 0x42, 0x89, 0xf3, 0x50, 0xce, 0x81, 0x25, 0xd2, 0x4f, 0xce, 0x81, 0x12, 0xd3, 0x4d, 0xce, 0x81, 0x09, 0xd4, 0x49, 0xce, 0xc1, 0x00, 0xd5, 0x47, 0xce, 0x41, 0xd4, 0x4a, 0xce, 0x41, 0xd3, 0x4e, 0xce, 0xc1, - 0x00, 0xd4, 0x4b, 0xce, 0xc1, 0x00, 0xd5, 0x48, 0xce, 0x41, 0x42, 0xa6, - 0xf1, 0x4c, 0xce, 0x41, 0x48, 0x94, 0x73, 0x3a, 0xce, 0x01, 0x05, 0xc3, - 0x00, 0x06, 0x4e, 0x58, 0x7a, 0x28, 0xce, 0x41, 0x48, 0x94, 0x73, 0x36, - 0xce, 0x01, 0x45, 0x11, 0x0d, 0x39, 0xce, 0x41, 0x4e, 0x60, 0x78, 0x2d, - 0xce, 0x01, 0x4e, 0xc0, 0x7c, 0x23, 0xce, 0x41, 0x54, 0x43, 0x3f, 0x35, - 0xce, 0x01, 0x48, 0x4a, 0xc4, 0x25, 0xce, 0x41, 0x47, 0xe1, 0xcd, 0x1e, - 0xce, 0x01, 0x05, 0x14, 0x01, 0x01, 0xff, 0x0f, 0x3a, 0x6c, 0x4f, 0x05, - 0xc3, 0x00, 0x2e, 0x06, 0xc8, 0x00, 0x06, 0x48, 0x66, 0x78, 0x3c, 0xce, - 0x41, 0xa1, 0x0f, 0xa3, 0x01, 0xff, 0x45, 0xcf, 0x0a, 0x44, 0xce, 0x01, - 0x45, 0x5a, 0xe7, 0x46, 0xce, 0x41, 0x52, 0x6a, 0x52, 0x37, 0xce, 0x01, - 0x42, 0xe9, 0x02, 0x43, 0xce, 0xc1, 0x00, 0x4a, 0x5f, 0xa4, 0x45, 0xce, - 0x41, 0xa1, 0x0f, 0xa3, 0x01, 0xff, 0x45, 0xcf, 0x0a, 0x3d, 0xce, 0x01, - 0x45, 0x5a, 0xe7, 0x3f, 0xce, 0x41, 0x51, 0x17, 0x5b, 0x2e, 0xce, 0x01, - 0x42, 0xe9, 0x02, 0x3e, 0xce, 0x41, 0xed, 0x30, 0xce, 0x01, 0xf7, 0x42, + 0x00, 0xd4, 0x4b, 0xce, 0xc1, 0x00, 0xd5, 0x48, 0xce, 0x41, 0x42, 0xf0, + 0xf4, 0x4c, 0xce, 0x41, 0x48, 0x1f, 0x75, 0x3a, 0xce, 0x01, 0x05, 0xc3, + 0x00, 0x06, 0x4e, 0xb9, 0x7b, 0x28, 0xce, 0x41, 0x48, 0x1f, 0x75, 0x36, + 0xce, 0x01, 0x45, 0x60, 0x0d, 0x39, 0xce, 0x41, 0x4e, 0xc1, 0x79, 0x2d, + 0xce, 0x01, 0x4e, 0x2f, 0x7e, 0x23, 0xce, 0x41, 0x54, 0x3c, 0x40, 0x35, + 0xce, 0x01, 0x48, 0xe8, 0xc6, 0x25, 0xce, 0x41, 0x47, 0xbb, 0xd0, 0x1e, + 0xce, 0x01, 0x05, 0x14, 0x01, 0x01, 0xff, 0x0f, 0xe3, 0x6d, 0x4f, 0x05, + 0xc3, 0x00, 0x2e, 0x06, 0xc8, 0x00, 0x06, 0x48, 0xc7, 0x79, 0x3c, 0xce, + 0x41, 0xa1, 0x0f, 0xa3, 0x01, 0xff, 0x45, 0x1e, 0x0b, 0x44, 0xce, 0x01, + 0x45, 0x7e, 0xea, 0x46, 0xce, 0x41, 0x52, 0xb3, 0x53, 0x37, 0xce, 0x01, + 0x42, 0x14, 0x03, 0x43, 0xce, 0xc1, 0x00, 0x4a, 0x9b, 0xa6, 0x45, 0xce, + 0x41, 0xa1, 0x0f, 0xa3, 0x01, 0xff, 0x45, 0x1e, 0x0b, 0x3d, 0xce, 0x01, + 0x45, 0x7e, 0xea, 0x3f, 0xce, 0x41, 0x51, 0x82, 0x5c, 0x2e, 0xce, 0x01, + 0x42, 0x14, 0x03, 0x3e, 0xce, 0x41, 0xed, 0x30, 0xce, 0x01, 0xf7, 0x42, 0xce, 0x41, 0x06, 0x13, 0x01, 0x1f, 0x06, 0x6d, 0x02, 0x01, 0xff, 0x44, 0xc3, 0x00, 0x3b, 0xce, 0x81, 0x0d, 0x45, 0xc8, 0x00, 0x2b, 0xce, 0xc1, - 0x00, 0x50, 0x2f, 0x43, 0x2a, 0xce, 0x41, 0x4f, 0xd7, 0x38, 0x38, 0xce, + 0x00, 0x50, 0x3c, 0x44, 0x2a, 0xce, 0x41, 0x4f, 0xa7, 0x39, 0x38, 0xce, 0x41, 0x44, 0xc3, 0x00, 0x22, 0xce, 0x01, 0x45, 0xc8, 0x00, 0x2c, 0xce, - 0x41, 0x09, 0x19, 0xb6, 0x18, 0x47, 0x95, 0x73, 0x1f, 0xce, 0xc1, 0x00, - 0x06, 0x50, 0x00, 0x01, 0xff, 0x4a, 0x17, 0xab, 0x20, 0xce, 0x01, 0x4a, - 0x99, 0xb0, 0x40, 0xce, 0x41, 0xeb, 0x2f, 0xce, 0x01, 0xf8, 0x32, 0xce, - 0x01, 0xf9, 0x33, 0xce, 0x01, 0x4f, 0x8d, 0x73, 0x34, 0xce, 0x41, 0x5d, - 0xa6, 0x0b, 0x3c, 0x0b, 0x01, 0x5f, 0x7b, 0x11, 0x3e, 0x0b, 0x41, 0x46, - 0xe7, 0x02, 0x34, 0xf5, 0x01, 0x46, 0xab, 0x05, 0xe5, 0xf7, 0x41, 0x46, - 0xe7, 0x02, 0xe3, 0xf7, 0x01, 0x46, 0xab, 0x05, 0xea, 0xf7, 0x41, 0x03, - 0xc4, 0x07, 0x17, 0x06, 0x18, 0x1c, 0x01, 0xff, 0x46, 0xe7, 0x02, 0xe0, - 0xf7, 0x01, 0x47, 0x88, 0x43, 0x36, 0xf5, 0x01, 0x46, 0xab, 0x05, 0xe7, - 0xf7, 0x41, 0x5d, 0xdf, 0x14, 0x3d, 0x0b, 0x01, 0x5f, 0x5c, 0x11, 0x3f, - 0x0b, 0x41, 0x46, 0xe7, 0x02, 0xe2, 0xf7, 0x01, 0x46, 0xab, 0x05, 0xe9, - 0xf7, 0x41, 0x04, 0x16, 0x8b, 0x11, 0x05, 0x5f, 0xe7, 0x01, 0xff, 0x46, - 0xe7, 0x02, 0xe4, 0xf7, 0x01, 0x46, 0xab, 0x05, 0xeb, 0xf7, 0x41, 0x46, - 0xe7, 0x02, 0x35, 0xf5, 0x01, 0x47, 0x88, 0x43, 0x37, 0xf5, 0x01, 0x46, - 0xab, 0x05, 0xe6, 0xf7, 0x41, 0x51, 0x92, 0x57, 0xcc, 0x0e, 0x00, 0x06, - 0xc4, 0x06, 0x8a, 0x04, 0x48, 0x45, 0x29, 0xaf, 0x0e, 0x00, 0x03, 0x3a, - 0x70, 0xf3, 0x03, 0x45, 0xcb, 0xe4, 0xc6, 0x0e, 0x00, 0x07, 0xc1, 0x05, - 0x92, 0x01, 0x49, 0x09, 0xba, 0xcd, 0x0e, 0x00, 0xb3, 0x74, 0x09, 0x69, - 0xbd, 0x57, 0x0b, 0xd1, 0x75, 0x06, 0x48, 0x02, 0xca, 0xce, 0x0e, 0x40, + 0x41, 0x09, 0x6a, 0xb8, 0x18, 0x47, 0x20, 0x75, 0x1f, 0xce, 0xc1, 0x00, + 0x06, 0x50, 0x00, 0x01, 0xff, 0x4a, 0x71, 0xad, 0x20, 0xce, 0x01, 0x4a, + 0xe9, 0xb2, 0x40, 0xce, 0x41, 0xeb, 0x2f, 0xce, 0x01, 0xf8, 0x32, 0xce, + 0x01, 0xf9, 0x33, 0xce, 0x01, 0x4f, 0x18, 0x75, 0x34, 0xce, 0x41, 0x5d, + 0xf5, 0x0b, 0x3c, 0x0b, 0x01, 0x5f, 0xca, 0x11, 0x3e, 0x0b, 0x41, 0x46, + 0x12, 0x03, 0x34, 0xf5, 0x01, 0x46, 0xd6, 0x05, 0xe5, 0xf7, 0x41, 0x46, + 0x12, 0x03, 0xe3, 0xf7, 0x01, 0x46, 0xd6, 0x05, 0xea, 0xf7, 0x41, 0x03, + 0xef, 0x07, 0x17, 0x06, 0x9f, 0x1c, 0x01, 0xff, 0x46, 0x12, 0x03, 0xe0, + 0xf7, 0x01, 0x47, 0x95, 0x44, 0x36, 0xf5, 0x01, 0x46, 0xd6, 0x05, 0xe7, + 0xf7, 0x41, 0x5d, 0x4b, 0x15, 0x3d, 0x0b, 0x01, 0x5f, 0xab, 0x11, 0x3f, + 0x0b, 0x41, 0x46, 0x12, 0x03, 0xe2, 0xf7, 0x01, 0x46, 0xd6, 0x05, 0xe9, + 0xf7, 0x41, 0x04, 0xd4, 0x8c, 0x11, 0x05, 0x83, 0xea, 0x01, 0xff, 0x46, + 0x12, 0x03, 0xe4, 0xf7, 0x01, 0x46, 0xd6, 0x05, 0xeb, 0xf7, 0x41, 0x46, + 0x12, 0x03, 0x35, 0xf5, 0x01, 0x47, 0x95, 0x44, 0x37, 0xf5, 0x01, 0x46, + 0xd6, 0x05, 0xe6, 0xf7, 0x41, 0x51, 0xfd, 0x58, 0xcc, 0x0e, 0x00, 0x06, + 0xef, 0x06, 0x8a, 0x04, 0x48, 0xce, 0x29, 0xaf, 0x0e, 0x00, 0x03, 0xd4, + 0x71, 0xf3, 0x03, 0x45, 0xe0, 0xe7, 0xc6, 0x0e, 0x00, 0x07, 0xec, 0x05, + 0x92, 0x01, 0x49, 0x6c, 0xbc, 0xcd, 0x0e, 0x00, 0xb3, 0x74, 0x09, 0xe7, + 0xbf, 0x57, 0x0b, 0x40, 0x77, 0x06, 0x48, 0xc0, 0xcc, 0xce, 0x0e, 0x40, 0xe1, 0xb0, 0x0e, 0x80, 0x38, 0xe5, 0xc0, 0x0e, 0x80, 0x2f, 0xe9, 0xb4, - 0x0e, 0x80, 0x26, 0x05, 0x52, 0xe5, 0x16, 0xef, 0xc2, 0x0e, 0x00, 0xf5, + 0x0e, 0x80, 0x26, 0x05, 0x67, 0xe8, 0x16, 0xef, 0xc2, 0x0e, 0x00, 0xf5, 0xb8, 0x0e, 0x80, 0x09, 0xf9, 0xb6, 0x0e, 0xc0, 0x00, 0xf9, 0xb7, 0x0e, 0x40, 0xf5, 0xb9, 0x0e, 0x40, 0x42, 0x1a, 0x00, 0xb1, 0x0e, 0x00, 0x42, 0x10, 0x00, 0xbb, 0x0e, 0x40, 0xe9, 0xb5, 0x0e, 0x40, 0xe9, 0xc1, 0x0e, 0x40, 0xe1, 0xb2, 0x0e, 0x00, 0xe9, 0xc4, 0x0e, 0x00, 0xed, 0xb3, 0x0e, - 0x00, 0xf9, 0xc3, 0x0e, 0x40, 0x46, 0x7e, 0xd7, 0xcb, 0x0e, 0x00, 0x42, - 0x69, 0x18, 0xc8, 0x0e, 0x00, 0xb4, 0x01, 0xff, 0x42, 0x0b, 0x00, 0xc9, - 0x0e, 0x00, 0xe9, 0xca, 0x0e, 0x40, 0x0e, 0xce, 0x75, 0x06, 0x4f, 0xc1, - 0x6c, 0xba, 0x0e, 0x40, 0x42, 0x13, 0x01, 0xbc, 0x0e, 0x00, 0x43, 0xc4, - 0x52, 0xbd, 0x0e, 0x40, 0x42, 0x5d, 0x00, 0x9a, 0x0e, 0x00, 0x42, 0xe8, - 0x04, 0x88, 0x0e, 0x00, 0x42, 0x3b, 0x01, 0x94, 0x0e, 0x00, 0x03, 0xf8, - 0xd1, 0xa5, 0x02, 0x03, 0x3a, 0x70, 0x94, 0x02, 0xab, 0xea, 0x01, 0x42, - 0x13, 0x01, 0xa5, 0x0e, 0x80, 0xd1, 0x01, 0x42, 0x98, 0x07, 0xa1, 0x0e, + 0x00, 0xf9, 0xc3, 0x0e, 0x40, 0x46, 0x64, 0xda, 0xcb, 0x0e, 0x00, 0x42, + 0xd5, 0x18, 0xc8, 0x0e, 0x00, 0xb4, 0x01, 0xff, 0x42, 0x0b, 0x00, 0xc9, + 0x0e, 0x00, 0xe9, 0xca, 0x0e, 0x40, 0x0e, 0x3d, 0x77, 0x06, 0x4f, 0x79, + 0x6e, 0xba, 0x0e, 0x40, 0x42, 0x13, 0x01, 0xbc, 0x0e, 0x00, 0x43, 0x0d, + 0x54, 0xbd, 0x0e, 0x40, 0x42, 0x5d, 0x00, 0x9a, 0x0e, 0x00, 0x42, 0x13, + 0x05, 0x88, 0x0e, 0x00, 0x42, 0x3b, 0x01, 0x94, 0x0e, 0x00, 0x03, 0xcb, + 0xd4, 0xa5, 0x02, 0x03, 0xd4, 0x71, 0x94, 0x02, 0xab, 0xea, 0x01, 0x42, + 0x13, 0x01, 0xa5, 0x0e, 0x80, 0xd1, 0x01, 0x42, 0xc3, 0x07, 0xa1, 0x0e, 0x00, 0xae, 0xb8, 0x01, 0xef, 0xad, 0x0e, 0x00, 0xb0, 0x4b, 0x42, 0xd0, 0x00, 0xa3, 0x0e, 0x00, 0xb3, 0x22, 0xb4, 0x0c, 0x42, 0x15, 0x02, 0xa7, - 0x0e, 0x00, 0x42, 0x60, 0x46, 0xa2, 0x0e, 0x40, 0x03, 0x3a, 0x70, 0x04, - 0xef, 0x95, 0x0e, 0x40, 0x44, 0xd4, 0xbd, 0x96, 0x0e, 0x00, 0x43, 0x56, - 0x31, 0x97, 0x0e, 0x40, 0x09, 0xc7, 0xb3, 0x11, 0x02, 0x7b, 0x02, 0x01, - 0xff, 0x44, 0xd4, 0xbd, 0xaa, 0x0e, 0x00, 0x43, 0x56, 0x31, 0x8a, 0x0e, - 0x40, 0x42, 0x22, 0x00, 0xa8, 0x0e, 0x00, 0x42, 0x15, 0x06, 0xa9, 0x0e, - 0x40, 0x04, 0xc6, 0x6c, 0x14, 0x03, 0x3a, 0x70, 0x04, 0xef, 0x9b, 0x0e, - 0x40, 0x44, 0xd4, 0xbd, 0x9c, 0x0e, 0x00, 0x43, 0x56, 0x31, 0x9e, 0x0e, - 0x40, 0x43, 0x50, 0x2a, 0xa0, 0x0e, 0x00, 0x43, 0xef, 0x1f, 0x89, 0x0e, - 0x00, 0xa4, 0x2f, 0x43, 0xf3, 0x99, 0x86, 0x0e, 0x00, 0x43, 0x11, 0xf1, - 0x8c, 0x0e, 0x00, 0x43, 0xdd, 0x0d, 0xac, 0x0e, 0x00, 0xae, 0x0f, 0x02, - 0xc3, 0x05, 0x01, 0xff, 0xe1, 0x8f, 0x0e, 0x00, 0x42, 0x22, 0x00, 0x90, - 0x0e, 0x40, 0x42, 0xff, 0x04, 0x93, 0x0e, 0x00, 0x42, 0x34, 0x22, 0x8e, + 0x0e, 0x00, 0x42, 0xa9, 0x47, 0xa2, 0x0e, 0x40, 0x03, 0xd4, 0x71, 0x04, + 0xef, 0x95, 0x0e, 0x40, 0x44, 0x5b, 0xc0, 0x96, 0x0e, 0x00, 0x43, 0x3c, + 0x32, 0x97, 0x0e, 0x40, 0x09, 0x21, 0xb6, 0x11, 0x02, 0x7b, 0x02, 0x01, + 0xff, 0x44, 0x5b, 0xc0, 0xaa, 0x0e, 0x00, 0x43, 0x3c, 0x32, 0x8a, 0x0e, + 0x40, 0x42, 0x22, 0x00, 0xa8, 0x0e, 0x00, 0x42, 0x40, 0x06, 0xa9, 0x0e, + 0x40, 0x04, 0x7e, 0x6e, 0x14, 0x03, 0xd4, 0x71, 0x04, 0xef, 0x9b, 0x0e, + 0x40, 0x44, 0x5b, 0xc0, 0x9c, 0x0e, 0x00, 0x43, 0x3c, 0x32, 0x9e, 0x0e, + 0x40, 0x43, 0xd9, 0x2a, 0xa0, 0x0e, 0x00, 0x43, 0x91, 0x20, 0x89, 0x0e, + 0x00, 0xa4, 0x2f, 0x43, 0x0e, 0x9c, 0x86, 0x0e, 0x00, 0x43, 0x9c, 0x45, + 0x8c, 0x0e, 0x00, 0x43, 0x2c, 0x0e, 0xac, 0x0e, 0x00, 0xae, 0x0f, 0x02, + 0xee, 0x05, 0x01, 0xff, 0xe1, 0x8f, 0x0e, 0x00, 0x42, 0x22, 0x00, 0x90, + 0x0e, 0x40, 0x42, 0x2a, 0x05, 0x93, 0x0e, 0x00, 0x42, 0xbc, 0x22, 0x8e, 0x0e, 0x40, 0xa4, 0x06, 0x42, 0x22, 0x00, 0x98, 0x0e, 0x40, 0xe1, 0x91, - 0x0e, 0x00, 0x42, 0x22, 0x00, 0x92, 0x0e, 0x40, 0x42, 0xb7, 0x13, 0x87, - 0x0e, 0x00, 0xef, 0x99, 0x0e, 0x00, 0x42, 0x60, 0x46, 0x8d, 0x0e, 0x40, + 0x0e, 0x00, 0x42, 0x22, 0x00, 0x92, 0x0e, 0x40, 0x42, 0x06, 0x14, 0x87, + 0x0e, 0x00, 0xef, 0x99, 0x0e, 0x00, 0x42, 0xa9, 0x47, 0x8d, 0x0e, 0x40, 0x02, 0x73, 0x00, 0x01, 0xff, 0x43, 0xa1, 0x01, 0xa3, 0x0e, 0x00, 0x43, - 0x25, 0x6b, 0xa5, 0x0e, 0x40, 0xa8, 0x04, 0xef, 0x81, 0x0e, 0x40, 0x03, - 0xa1, 0x87, 0x11, 0x02, 0x7b, 0x02, 0x01, 0xff, 0x44, 0xd4, 0xbd, 0x82, - 0x0e, 0x00, 0x43, 0x56, 0x31, 0x84, 0x0e, 0x40, 0x42, 0xb7, 0x13, 0xde, - 0x0e, 0x00, 0x43, 0xc4, 0x52, 0xdf, 0x0e, 0x40, 0x44, 0xd4, 0xbd, 0xab, - 0x0e, 0x00, 0x43, 0x56, 0x31, 0xae, 0x0e, 0x40, 0xa6, 0x0c, 0x44, 0xd4, - 0xbd, 0x9f, 0x0e, 0x00, 0x43, 0x56, 0x31, 0x9d, 0x0e, 0x40, 0x42, 0x9e, - 0x10, 0x9f, 0x0e, 0x00, 0x42, 0x10, 0x00, 0x9d, 0x0e, 0x40, 0x42, 0x98, - 0x07, 0xdd, 0x0e, 0x00, 0x42, 0xb4, 0x01, 0xdc, 0x0e, 0x40, 0x45, 0xc3, - 0x0a, 0xd8, 0x0e, 0x00, 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0xd9, 0x0e, 0x00, - 0x43, 0xbf, 0x0a, 0xd1, 0x0e, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xa1, - 0x1d, 0xd0, 0x0e, 0x40, 0x44, 0x25, 0x01, 0xd3, 0x0e, 0x00, 0x42, 0x15, - 0x02, 0xd2, 0x0e, 0x40, 0x44, 0x27, 0x1d, 0xd7, 0x0e, 0x00, 0x42, 0x60, - 0x25, 0xd6, 0x0e, 0x40, 0x43, 0xa7, 0x05, 0xd5, 0x0e, 0x00, 0x43, 0xcb, - 0x06, 0xd4, 0x0e, 0x40, 0x43, 0x4e, 0x1a, 0x9c, 0xfa, 0x01, 0x48, 0xf2, - 0xc9, 0x1e, 0xf4, 0x41, 0x45, 0x95, 0xde, 0x7c, 0xf9, 0x01, 0x42, 0xd8, + 0xbf, 0x6c, 0xa5, 0x0e, 0x40, 0xa8, 0x04, 0xef, 0x81, 0x0e, 0x40, 0x03, + 0x6b, 0x89, 0x11, 0x02, 0x7b, 0x02, 0x01, 0xff, 0x44, 0x5b, 0xc0, 0x82, + 0x0e, 0x00, 0x43, 0x3c, 0x32, 0x84, 0x0e, 0x40, 0x42, 0x06, 0x14, 0xde, + 0x0e, 0x00, 0x43, 0x0d, 0x54, 0xdf, 0x0e, 0x40, 0x44, 0x5b, 0xc0, 0xab, + 0x0e, 0x00, 0x43, 0x3c, 0x32, 0xae, 0x0e, 0x40, 0xa6, 0x0c, 0x44, 0x5b, + 0xc0, 0x9f, 0x0e, 0x00, 0x43, 0x3c, 0x32, 0x9d, 0x0e, 0x40, 0x42, 0xed, + 0x10, 0x9f, 0x0e, 0x00, 0x42, 0x10, 0x00, 0x9d, 0x0e, 0x40, 0x42, 0xc3, + 0x07, 0xdd, 0x0e, 0x00, 0x42, 0xb4, 0x01, 0xdc, 0x0e, 0x40, 0x45, 0x12, + 0x0b, 0xd8, 0x0e, 0x00, 0xa6, 0x2e, 0x44, 0xcf, 0x2a, 0xd9, 0x0e, 0x00, + 0x43, 0x0e, 0x0b, 0xd1, 0x0e, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0x43, + 0x1e, 0xd0, 0x0e, 0x40, 0x44, 0x25, 0x01, 0xd3, 0x0e, 0x00, 0x42, 0x15, + 0x02, 0xd2, 0x0e, 0x40, 0x44, 0xc9, 0x1d, 0xd7, 0x0e, 0x00, 0x42, 0x01, + 0x26, 0xd6, 0x0e, 0x40, 0x43, 0xd2, 0x05, 0xd5, 0x0e, 0x00, 0x43, 0xf6, + 0x06, 0xd4, 0x0e, 0x40, 0x46, 0x00, 0xdb, 0xd8, 0xf6, 0x01, 0x49, 0x4b, + 0xb9, 0x01, 0x00, 0x4e, 0x43, 0xd5, 0x1a, 0x9c, 0xfa, 0x01, 0x48, 0xb0, + 0xcc, 0x1e, 0xf4, 0x41, 0x45, 0xa5, 0xe1, 0x7c, 0xf9, 0x01, 0x42, 0xd8, 0x00, 0xf7, 0xf3, 0x41, 0xa1, 0x8f, 0x16, 0xa5, 0xe8, 0x15, 0xa8, 0xdf, - 0x03, 0xa9, 0x22, 0xae, 0x14, 0xaf, 0x06, 0x45, 0x55, 0xe7, 0xe3, 0x2b, - 0x40, 0x43, 0xe0, 0x18, 0x28, 0xf4, 0x01, 0x54, 0x07, 0x44, 0x7f, 0x32, - 0x40, 0x4d, 0xe1, 0x80, 0xce, 0xf9, 0x01, 0x42, 0xf0, 0x04, 0xa2, 0xfa, - 0x41, 0x44, 0x52, 0x18, 0x58, 0xf4, 0x01, 0x46, 0x2d, 0x03, 0xad, 0x20, - 0x00, 0x08, 0x82, 0xc7, 0x3c, 0x42, 0xee, 0x00, 0x8f, 0xf4, 0x81, 0x0c, - 0x42, 0x77, 0x00, 0x81, 0xfa, 0x01, 0x47, 0xa9, 0xd4, 0x5d, 0xf9, 0x41, + 0x03, 0xa9, 0x22, 0xae, 0x14, 0xaf, 0x06, 0x45, 0x79, 0xea, 0xe3, 0x2b, + 0x40, 0x43, 0x4d, 0x19, 0x28, 0xf4, 0x01, 0x54, 0x28, 0x45, 0x7f, 0x32, + 0x40, 0x4d, 0x77, 0x82, 0xce, 0xf9, 0x01, 0x42, 0x1b, 0x05, 0xa2, 0xfa, + 0x41, 0x44, 0xbe, 0x18, 0x58, 0xf4, 0x01, 0x46, 0x58, 0x03, 0xad, 0x20, + 0x00, 0x08, 0x30, 0xca, 0x3c, 0x42, 0xee, 0x00, 0x8f, 0xf4, 0x81, 0x0c, + 0x42, 0x77, 0x00, 0x81, 0xfa, 0x01, 0x47, 0x7c, 0xd7, 0x5d, 0xf9, 0x41, 0x45, 0xb8, 0x00, 0x8b, 0xf4, 0x01, 0x04, 0xa1, 0x01, 0x01, 0xff, 0x59, - 0xfd, 0x22, 0x3d, 0xf6, 0x01, 0x44, 0xe1, 0x07, 0x17, 0xf6, 0xc1, 0x00, - 0x06, 0x50, 0x00, 0x01, 0xff, 0x4b, 0x0b, 0x23, 0x1a, 0xf6, 0x01, 0x4c, - 0xce, 0x1e, 0x19, 0xf6, 0x41, 0xa4, 0x9a, 0x02, 0x07, 0xc1, 0x05, 0x54, - 0x05, 0x2f, 0x03, 0x28, 0x0b, 0xd1, 0x75, 0x01, 0xff, 0xa1, 0x15, 0xe5, + 0x85, 0x23, 0x3d, 0xf6, 0x01, 0x44, 0x0c, 0x08, 0x17, 0xf6, 0xc1, 0x00, + 0x06, 0x50, 0x00, 0x01, 0xff, 0x4b, 0x93, 0x23, 0x1a, 0xf6, 0x01, 0x4c, + 0x70, 0x1f, 0x19, 0xf6, 0x41, 0xa4, 0x9a, 0x02, 0x07, 0xec, 0x05, 0x54, + 0x05, 0x5a, 0x03, 0x28, 0x0b, 0x40, 0x77, 0x01, 0xff, 0xa1, 0x15, 0xe5, 0x67, 0x6d, 0x01, 0xe9, 0x64, 0x6d, 0x01, 0xef, 0x69, 0x6d, 0x01, 0xf5, 0x65, 0x6d, 0xc1, 0x00, 0xe5, 0x66, 0x6d, 0x41, 0xe1, 0x63, 0x6d, 0x01, - 0xe9, 0x68, 0x6d, 0x01, 0xf5, 0x6a, 0x6d, 0x41, 0x48, 0xd0, 0x15, 0x40, - 0x6d, 0x01, 0x44, 0x36, 0xef, 0x6c, 0x6d, 0x01, 0x45, 0x3b, 0xe8, 0x41, - 0x6d, 0x01, 0x02, 0x02, 0x00, 0x06, 0x44, 0xfa, 0xef, 0x6d, 0x6d, 0x41, - 0x44, 0x5d, 0x23, 0x6b, 0x6d, 0x01, 0x45, 0xa3, 0x4a, 0x42, 0x6d, 0x41, + 0xe9, 0x68, 0x6d, 0x01, 0xf5, 0x6a, 0x6d, 0x41, 0x48, 0x3c, 0x16, 0x40, + 0x6d, 0x01, 0x44, 0x89, 0xf2, 0x6c, 0x6d, 0x01, 0x45, 0x5f, 0xeb, 0x41, + 0x6d, 0x01, 0x02, 0x02, 0x00, 0x06, 0x44, 0x4d, 0xf3, 0x6d, 0x6d, 0x41, + 0x44, 0xe5, 0x23, 0x6b, 0x6d, 0x01, 0x45, 0xec, 0x4b, 0x42, 0x6d, 0x41, 0xe1, 0x43, 0x6d, 0x01, 0xa2, 0xb1, 0x01, 0xa3, 0xa4, 0x01, 0xa4, 0x8b, 0x01, 0xa7, 0x7f, 0x42, 0x22, 0x00, 0x62, 0x6d, 0x01, 0xaa, 0x6d, 0xab, 0x61, 0x42, 0x74, 0x00, 0x5e, 0x6d, 0x01, 0x42, 0x6c, 0x00, 0x5b, 0x6d, 0x01, 0xae, 0x43, 0xb0, 0x37, 0x42, 0x71, 0x00, 0x5d, 0x6d, 0x01, 0xb3, - 0x25, 0xb4, 0x0c, 0x42, 0xa6, 0x0a, 0x5f, 0x6d, 0x01, 0x42, 0x34, 0x22, + 0x25, 0xb4, 0x0c, 0x42, 0xf5, 0x0a, 0x5f, 0x6d, 0x01, 0x42, 0xbc, 0x22, 0x5c, 0x6d, 0x41, 0xe1, 0x52, 0x6d, 0x01, 0x42, 0x22, 0x00, 0x53, 0x6d, 0x01, 0xb4, 0x01, 0xff, 0xe1, 0x4e, 0x6d, 0x01, 0x42, 0x22, 0x00, 0x4f, 0x6d, 0x41, 0xe1, 0x60, 0x6d, 0x01, 0x42, 0x22, 0x00, 0x61, 0x6d, 0x41, 0xe1, 0x57, 0x6d, 0x01, 0x42, 0x22, 0x00, 0x58, 0x6d, 0x41, 0xe1, 0x56, - 0x6d, 0x01, 0x42, 0x24, 0x02, 0x48, 0x6d, 0x01, 0x42, 0x34, 0x22, 0x4d, + 0x6d, 0x01, 0x42, 0x24, 0x02, 0x48, 0x6d, 0x01, 0x42, 0xbc, 0x22, 0x4d, 0x6d, 0x41, 0xe1, 0x44, 0x6d, 0x01, 0x42, 0x22, 0x00, 0x45, 0x6d, 0x41, 0xe1, 0x4b, 0x6d, 0x01, 0x42, 0x22, 0x00, 0x4c, 0x6d, 0x41, 0xe1, 0x46, 0x6d, 0x01, 0x42, 0x22, 0x00, 0x47, 0x6d, 0x41, 0xe1, 0x54, 0x6d, 0x01, 0xa4, 0x06, 0x42, 0x22, 0x00, 0x55, 0x6d, 0x41, 0xe1, 0x50, 0x6d, 0x01, 0x42, 0x22, 0x00, 0x51, 0x6d, 0x41, 0xe1, 0x49, 0x6d, 0x01, 0x42, 0x22, 0x00, 0x4a, 0x6d, 0x41, 0xe1, 0x59, 0x6d, 0x01, 0x42, 0x22, 0x00, 0x5a, - 0x6d, 0x41, 0x44, 0xd1, 0x1f, 0x6e, 0x6d, 0x01, 0x05, 0xc5, 0x06, 0x06, - 0x4b, 0xd8, 0x9e, 0x6f, 0x6d, 0x41, 0x45, 0xc3, 0x0a, 0x78, 0x6d, 0x01, - 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0x79, 0x6d, 0x01, 0x43, 0xbf, 0x0a, 0x71, - 0x6d, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xa1, 0x1d, 0x70, 0x6d, 0x41, + 0x6d, 0x41, 0x44, 0x73, 0x20, 0x6e, 0x6d, 0x01, 0x05, 0xf0, 0x06, 0x06, + 0x4b, 0x09, 0xa1, 0x6f, 0x6d, 0x41, 0x45, 0x12, 0x0b, 0x78, 0x6d, 0x01, + 0xa6, 0x2e, 0x44, 0xcf, 0x2a, 0x79, 0x6d, 0x01, 0x43, 0x0e, 0x0b, 0x71, + 0x6d, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, 0x70, 0x6d, 0x41, 0x44, 0x25, 0x01, 0x73, 0x6d, 0x01, 0x42, 0x15, 0x02, 0x72, 0x6d, 0x41, - 0x44, 0x27, 0x1d, 0x77, 0x6d, 0x01, 0x42, 0x60, 0x25, 0x76, 0x6d, 0x41, - 0x43, 0xa7, 0x05, 0x75, 0x6d, 0x01, 0x43, 0xcb, 0x06, 0x74, 0x6d, 0x41, - 0xa1, 0xaa, 0x0e, 0x12, 0xa4, 0x51, 0x92, 0x0e, 0x04, 0x2b, 0x37, 0xb3, - 0x06, 0x05, 0x56, 0xe6, 0xa4, 0x03, 0x08, 0x42, 0xc9, 0x01, 0xff, 0x06, - 0xc4, 0x06, 0xd8, 0x02, 0x07, 0xc1, 0x05, 0x43, 0x05, 0x2f, 0x03, 0x2d, - 0x0b, 0xd1, 0x75, 0x01, 0xff, 0xa1, 0x1a, 0xe5, 0xe5, 0x12, 0x01, 0xe9, + 0x44, 0xc9, 0x1d, 0x77, 0x6d, 0x01, 0x42, 0x01, 0x26, 0x76, 0x6d, 0x41, + 0x43, 0xd2, 0x05, 0x75, 0x6d, 0x01, 0x43, 0xf6, 0x06, 0x74, 0x6d, 0x41, + 0xa1, 0xaa, 0x0e, 0x12, 0xed, 0x52, 0x92, 0x0e, 0x04, 0xfb, 0x37, 0xb3, + 0x06, 0x05, 0x7a, 0xe9, 0xa4, 0x03, 0x08, 0xf8, 0xcb, 0x01, 0xff, 0x06, + 0xef, 0x06, 0xd8, 0x02, 0x07, 0xec, 0x05, 0x43, 0x05, 0x5a, 0x03, 0x2d, + 0x0b, 0x40, 0x77, 0x01, 0xff, 0xa1, 0x1a, 0xe5, 0xe5, 0x12, 0x01, 0xe9, 0xe1, 0x12, 0x81, 0x0d, 0xef, 0xe7, 0x12, 0x01, 0xf5, 0xe3, 0x12, 0xc1, 0x00, 0xf5, 0xe4, 0x12, 0x41, 0xe9, 0xe2, 0x12, 0x41, 0xe1, 0xe0, 0x12, - 0x01, 0xe9, 0xe6, 0x12, 0x01, 0xf5, 0xe8, 0x12, 0x41, 0x48, 0xd0, 0x15, - 0xdf, 0x12, 0x01, 0x45, 0x5a, 0x3e, 0xe9, 0x12, 0x01, 0x46, 0x5b, 0x23, + 0x01, 0xe9, 0xe6, 0x12, 0x01, 0xf5, 0xe8, 0x12, 0x41, 0x48, 0x3c, 0x16, + 0xdf, 0x12, 0x01, 0x45, 0x3f, 0x3f, 0xe9, 0x12, 0x01, 0x46, 0xe3, 0x23, 0xea, 0x12, 0x41, 0xe1, 0xb0, 0x12, 0x81, 0xff, 0x01, 0xa2, 0xec, 0x01, 0xa3, 0xdf, 0x01, 0xa4, 0xc0, 0x01, 0xe5, 0xb6, 0x12, 0x01, 0xa7, 0xa9, 0x01, 0x42, 0x22, 0x00, 0xde, 0x12, 0x01, 0xe9, 0xb2, 0x12, 0x81, 0x99, 0x01, 0xaa, 0x86, 0x01, 0xab, 0x7a, 0x42, 0x74, 0x00, 0xda, 0x12, 0x01, 0x42, 0x6c, 0x00, 0xd7, 0x12, 0x01, 0xae, 0x56, 0xef, 0xb8, 0x12, 0x01, 0xb0, 0x46, 0xb2, 0x3a, 0xb3, 0x2e, 0xb4, 0x15, 0xf5, 0xb4, 0x12, 0x81, - 0x0c, 0x42, 0xa6, 0x0a, 0xdb, 0x12, 0x01, 0x42, 0x34, 0x22, 0xd8, 0x12, + 0x0c, 0x42, 0xf5, 0x0a, 0xdb, 0x12, 0x01, 0x42, 0xbc, 0x22, 0xd8, 0x12, 0x41, 0xf5, 0xb5, 0x12, 0x41, 0xe1, 0xcd, 0x12, 0x01, 0x42, 0x22, 0x00, 0xce, 0x12, 0x01, 0xb4, 0x01, 0xff, 0xe1, 0xc6, 0x12, 0x01, 0x42, 0x22, 0x00, 0xc7, 0x12, 0x41, 0xe1, 0xdd, 0x12, 0x01, 0x42, 0x22, 0x00, 0xdc, 0x12, 0x41, 0xe1, 0xd9, 0x12, 0x01, 0x42, 0x71, 0x00, 0xca, 0x12, 0x41, 0xe1, 0xd2, 0x12, 0x01, 0x42, 0x22, 0x00, 0xd3, 0x12, 0x41, 0xe1, 0xd1, - 0x12, 0x01, 0x42, 0x24, 0x02, 0xbf, 0x12, 0x01, 0x42, 0xff, 0x04, 0xcc, - 0x12, 0x01, 0x42, 0x34, 0x22, 0xc5, 0x12, 0x41, 0xe1, 0xba, 0x12, 0x01, + 0x12, 0x01, 0x42, 0x24, 0x02, 0xbf, 0x12, 0x01, 0x42, 0x2a, 0x05, 0xcc, + 0x12, 0x01, 0x42, 0xbc, 0x22, 0xc5, 0x12, 0x41, 0xe1, 0xba, 0x12, 0x01, 0x42, 0x22, 0x00, 0xbb, 0x12, 0x41, 0xe1, 0xc2, 0x12, 0x01, 0x42, 0x22, - 0x00, 0xc4, 0x12, 0x01, 0x42, 0xbd, 0x26, 0xc3, 0x12, 0x41, 0xe9, 0xb3, + 0x00, 0xc4, 0x12, 0x01, 0x42, 0x56, 0x19, 0xc3, 0x12, 0x41, 0xe9, 0xb3, 0x12, 0x41, 0xe1, 0xbc, 0x12, 0x01, 0x42, 0x24, 0x02, 0xbd, 0x12, 0x01, 0x42, 0x22, 0x00, 0xbe, 0x12, 0x41, 0xe1, 0xcf, 0x12, 0x01, 0xa4, 0x06, - 0x42, 0x22, 0x00, 0xd0, 0x12, 0x41, 0xe1, 0xc8, 0x12, 0x01, 0x42, 0xa1, + 0x42, 0x22, 0x00, 0xd0, 0x12, 0x41, 0xe1, 0xc8, 0x12, 0x01, 0x42, 0xf0, 0x10, 0xc9, 0x12, 0x01, 0x42, 0x22, 0x00, 0xcb, 0x12, 0x41, 0xe1, 0xc0, 0x12, 0x01, 0x42, 0x22, 0x00, 0xc1, 0x12, 0x41, 0xe1, 0xd4, 0x12, 0x01, 0x42, 0x16, 0x00, 0xd5, 0x12, 0x01, 0x42, 0x22, 0x00, 0xd6, 0x12, 0x41, 0xe1, 0xb1, 0x12, 0x01, 0xe9, 0xb7, 0x12, 0x01, 0xf5, 0xb9, 0x12, 0x41, - 0x45, 0xc3, 0x0a, 0xf8, 0x12, 0x01, 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0xf9, - 0x12, 0x01, 0x43, 0xbf, 0x0a, 0xf1, 0x12, 0x01, 0xb3, 0x14, 0xb4, 0x06, - 0x44, 0xa1, 0x1d, 0xf0, 0x12, 0x41, 0x44, 0x25, 0x01, 0xf3, 0x12, 0x01, - 0x42, 0x15, 0x02, 0xf2, 0x12, 0x41, 0x44, 0x27, 0x1d, 0xf7, 0x12, 0x01, - 0x42, 0x60, 0x25, 0xf6, 0x12, 0x41, 0x43, 0xa7, 0x05, 0xf5, 0x12, 0x01, - 0x43, 0xcb, 0x06, 0xf4, 0x12, 0x41, 0x51, 0x93, 0x56, 0x3d, 0x12, 0x01, - 0xa4, 0xea, 0x02, 0x07, 0xc1, 0x05, 0x60, 0xb3, 0x33, 0x0b, 0xd1, 0x75, - 0x06, 0x4e, 0x68, 0x7d, 0x3a, 0x12, 0x41, 0xa1, 0x1b, 0xe5, 0x30, 0x12, + 0x45, 0x12, 0x0b, 0xf8, 0x12, 0x01, 0xa6, 0x2e, 0x44, 0xcf, 0x2a, 0xf9, + 0x12, 0x01, 0x43, 0x0e, 0x0b, 0xf1, 0x12, 0x01, 0xb3, 0x14, 0xb4, 0x06, + 0x44, 0x43, 0x1e, 0xf0, 0x12, 0x41, 0x44, 0x25, 0x01, 0xf3, 0x12, 0x01, + 0x42, 0x15, 0x02, 0xf2, 0x12, 0x41, 0x44, 0xc9, 0x1d, 0xf7, 0x12, 0x01, + 0x42, 0x01, 0x26, 0xf6, 0x12, 0x41, 0x43, 0xd2, 0x05, 0xf5, 0x12, 0x01, + 0x43, 0xf6, 0x06, 0xf4, 0x12, 0x41, 0x51, 0xdc, 0x57, 0x3d, 0x12, 0x01, + 0xa4, 0xea, 0x02, 0x07, 0xec, 0x05, 0x60, 0xb3, 0x33, 0x0b, 0x40, 0x77, + 0x06, 0x4e, 0xd7, 0x7e, 0x3a, 0x12, 0x41, 0xa1, 0x1b, 0xe5, 0x30, 0x12, 0x01, 0xe9, 0x2d, 0x12, 0x81, 0x0e, 0xef, 0x32, 0x12, 0x01, 0xf5, 0x2f, - 0x12, 0x01, 0x49, 0x9b, 0xbe, 0x41, 0x12, 0x41, 0xe9, 0x2e, 0x12, 0x41, + 0x12, 0x01, 0x49, 0x22, 0xc1, 0x41, 0x12, 0x41, 0xe9, 0x2e, 0x12, 0x41, 0xe1, 0x2c, 0x12, 0x01, 0xe9, 0x31, 0x12, 0x01, 0xf5, 0x33, 0x12, 0x41, - 0x4b, 0x58, 0x26, 0x3b, 0x12, 0x01, 0x04, 0x30, 0x03, 0x01, 0xff, 0x48, - 0xd0, 0x15, 0x34, 0x12, 0x01, 0x45, 0x5a, 0x3e, 0x36, 0x12, 0x01, 0xb3, - 0x06, 0x46, 0x5b, 0x23, 0x35, 0x12, 0x41, 0x45, 0xb8, 0xe3, 0x37, 0x12, - 0x01, 0x44, 0x00, 0xe8, 0x3e, 0x12, 0x41, 0xe1, 0x00, 0x12, 0x81, 0xf4, + 0x4b, 0xf9, 0x26, 0x3b, 0x12, 0x01, 0x04, 0x5b, 0x03, 0x01, 0xff, 0x48, + 0x3c, 0x16, 0x34, 0x12, 0x01, 0x45, 0x3f, 0x3f, 0x36, 0x12, 0x01, 0xb3, + 0x06, 0x46, 0xe3, 0x23, 0x35, 0x12, 0x41, 0x45, 0xc8, 0xe6, 0x37, 0x12, + 0x01, 0x44, 0x24, 0xeb, 0x3e, 0x12, 0x41, 0xe1, 0x00, 0x12, 0x81, 0xf4, 0x01, 0xa2, 0xe1, 0x01, 0xa3, 0xd4, 0x01, 0xa4, 0xb5, 0x01, 0xe5, 0x04, 0x12, 0x01, 0xa7, 0x9e, 0x01, 0x42, 0x22, 0x00, 0x2a, 0x12, 0x01, 0xe9, 0x02, 0x12, 0x01, 0xaa, 0x87, 0x01, 0xab, 0x7b, 0xac, 0x6f, 0x42, 0x6c, 0x00, 0x24, 0x12, 0x01, 0xae, 0x51, 0xef, 0x06, 0x12, 0x01, 0xb0, 0x41, - 0x42, 0xf4, 0x13, 0x3f, 0x12, 0x01, 0x42, 0x71, 0x00, 0x26, 0x12, 0x01, - 0xb3, 0x29, 0xb4, 0x10, 0xf5, 0x03, 0x12, 0x01, 0x42, 0xa6, 0x0a, 0x28, - 0x12, 0x01, 0x42, 0x34, 0x22, 0x25, 0x12, 0x41, 0xe1, 0x19, 0x12, 0x01, + 0x42, 0x43, 0x14, 0x3f, 0x12, 0x01, 0x42, 0x71, 0x00, 0x26, 0x12, 0x01, + 0xb3, 0x29, 0xb4, 0x10, 0xf5, 0x03, 0x12, 0x01, 0x42, 0xf5, 0x0a, 0x28, + 0x12, 0x01, 0x42, 0xbc, 0x22, 0x25, 0x12, 0x41, 0xe1, 0x19, 0x12, 0x01, 0x42, 0x22, 0x00, 0x1a, 0x12, 0x01, 0xb4, 0x01, 0xff, 0xe1, 0x14, 0x12, 0x01, 0x42, 0x22, 0x00, 0x15, 0x12, 0x41, 0xe1, 0x29, 0x12, 0x01, 0x46, - 0xa0, 0xd9, 0x40, 0x12, 0x41, 0xe1, 0x1f, 0x12, 0x01, 0x42, 0x22, 0x00, + 0x98, 0xdc, 0x40, 0x12, 0x41, 0xe1, 0x1f, 0x12, 0x01, 0x42, 0x22, 0x00, 0x20, 0x12, 0x41, 0xe1, 0x1e, 0x12, 0x01, 0x42, 0x24, 0x02, 0x0d, 0x12, - 0x01, 0x42, 0xff, 0x04, 0x18, 0x12, 0x01, 0x42, 0x34, 0x22, 0x13, 0x12, + 0x01, 0x42, 0x2a, 0x05, 0x18, 0x12, 0x01, 0x42, 0xbc, 0x22, 0x13, 0x12, 0x41, 0xe1, 0x27, 0x12, 0x01, 0x42, 0x74, 0x00, 0x2b, 0x12, 0x41, 0xe1, 0x08, 0x12, 0x01, 0x42, 0x22, 0x00, 0x09, 0x12, 0x41, 0xe1, 0x10, 0x12, - 0x01, 0x42, 0xbd, 0x26, 0x11, 0x12, 0x41, 0xe1, 0x0a, 0x12, 0x01, 0x42, + 0x01, 0x42, 0x56, 0x19, 0x11, 0x12, 0x41, 0xe1, 0x0a, 0x12, 0x01, 0x42, 0x24, 0x02, 0x0b, 0x12, 0x01, 0x42, 0x22, 0x00, 0x0c, 0x12, 0x41, 0xe1, 0x1b, 0x12, 0x01, 0xa4, 0x06, 0x42, 0x22, 0x00, 0x1d, 0x12, 0x41, 0xe1, - 0x16, 0x12, 0x01, 0x42, 0xa1, 0x10, 0x1c, 0x12, 0x01, 0x42, 0x22, 0x00, + 0x16, 0x12, 0x01, 0x42, 0xf0, 0x10, 0x1c, 0x12, 0x01, 0x42, 0x22, 0x00, 0x17, 0x12, 0x41, 0xe1, 0x0e, 0x12, 0x01, 0x42, 0x22, 0x00, 0x0f, 0x12, 0x41, 0xe1, 0x21, 0x12, 0x01, 0x42, 0x16, 0x00, 0x22, 0x12, 0x01, 0x42, 0x22, 0x00, 0x23, 0x12, 0x41, 0xe1, 0x01, 0x12, 0x01, 0xe9, 0x05, 0x12, - 0x01, 0xf5, 0x07, 0x12, 0x41, 0x44, 0xd1, 0x1f, 0x38, 0x12, 0x01, 0x06, - 0x3c, 0x01, 0x01, 0xff, 0x45, 0x34, 0x94, 0x39, 0x12, 0x01, 0x4c, 0x57, - 0x26, 0x3c, 0x12, 0x41, 0x54, 0x5b, 0x40, 0xdb, 0x17, 0x00, 0x06, 0xc4, - 0x06, 0x8d, 0x07, 0x12, 0x80, 0x51, 0xaf, 0x06, 0x07, 0xc1, 0x05, 0xe6, - 0x04, 0xb3, 0x5d, 0x06, 0x6c, 0x38, 0x01, 0xff, 0x0a, 0xa5, 0xa9, 0x4c, - 0x05, 0x2f, 0x03, 0x01, 0xff, 0xa1, 0x35, 0xe5, 0xc1, 0x17, 0x00, 0xe9, + 0x01, 0xf5, 0x07, 0x12, 0x41, 0x44, 0x73, 0x20, 0x38, 0x12, 0x01, 0x06, + 0x3c, 0x01, 0x01, 0xff, 0x45, 0x16, 0x96, 0x39, 0x12, 0x01, 0x4c, 0xf8, + 0x26, 0x3c, 0x12, 0x41, 0x54, 0x54, 0x41, 0xdb, 0x17, 0x00, 0x06, 0xef, + 0x06, 0x8d, 0x07, 0x12, 0xc9, 0x52, 0xaf, 0x06, 0x07, 0xec, 0x05, 0xe6, + 0x04, 0xb3, 0x5d, 0x06, 0x3c, 0x39, 0x01, 0xff, 0x0a, 0xe1, 0xab, 0x4c, + 0x05, 0x5a, 0x03, 0x01, 0xff, 0xa1, 0x35, 0xe5, 0xc1, 0x17, 0x00, 0xe9, 0xb7, 0x17, 0x80, 0x24, 0xaf, 0x1a, 0xf5, 0xbb, 0x17, 0x80, 0x0d, 0xf9, 0xb9, 0x17, 0xc0, 0x00, 0xe1, 0xbf, 0x17, 0x00, 0xf9, 0xba, 0x17, 0x40, 0xe1, 0xbd, 0x17, 0x00, 0xf5, 0xbc, 0x17, 0x40, 0xe5, 0xbe, 0x17, 0x00, 0xef, 0xc4, 0x17, 0x40, 0xe5, 0xc0, 0x17, 0x00, 0xe9, 0xb8, 0x17, 0x40, 0xe1, 0xb6, 0x17, 0x00, 0xe5, 0xc2, 0x17, 0x00, 0xe9, 0xc3, 0x17, 0x00, 0xf5, 0xc5, 0x17, 0x40, 0xe1, 0xb5, 0x17, 0x00, 0xf1, 0xb4, 0x17, 0x40, - 0x04, 0x30, 0x03, 0xe9, 0x02, 0x06, 0xf4, 0x15, 0x01, 0xff, 0xa2, 0xc0, - 0x02, 0x03, 0x27, 0xee, 0xd3, 0x01, 0x0a, 0x81, 0xaa, 0x88, 0x01, 0x05, - 0xc0, 0xe5, 0x78, 0xb0, 0x06, 0x49, 0x9f, 0xbd, 0xf0, 0x19, 0x40, 0x49, - 0x0f, 0xb4, 0xe0, 0x19, 0x00, 0x03, 0x69, 0x74, 0x5a, 0x03, 0x57, 0x18, - 0x01, 0xff, 0x80, 0x47, 0x8d, 0x01, 0xff, 0xa2, 0x21, 0x05, 0xc0, 0xe5, - 0x11, 0x04, 0x68, 0x74, 0x01, 0xff, 0x44, 0xaa, 0xed, 0xe7, 0x19, 0x00, - 0x43, 0x57, 0x3c, 0xf7, 0x19, 0x40, 0x44, 0xaa, 0xed, 0xe6, 0x19, 0x00, - 0x43, 0x57, 0x3c, 0xf6, 0x19, 0x40, 0x03, 0x8a, 0x33, 0x11, 0x04, 0x8e, - 0xef, 0x01, 0xff, 0x44, 0xaa, 0xed, 0xe9, 0x19, 0x00, 0x43, 0x57, 0x3c, - 0xf9, 0x19, 0x40, 0x44, 0xaa, 0xed, 0xe8, 0x19, 0x00, 0x43, 0x57, 0x3c, - 0xf8, 0x19, 0x40, 0x44, 0xaa, 0xed, 0xe5, 0x19, 0x00, 0x43, 0x57, 0x3c, - 0xf5, 0x19, 0x40, 0x44, 0xaa, 0xed, 0xe2, 0x19, 0x00, 0x43, 0x57, 0x3c, - 0xf2, 0x19, 0x40, 0x44, 0xaa, 0xed, 0xe1, 0x19, 0x00, 0x43, 0x57, 0x3c, - 0xf1, 0x19, 0x40, 0xa2, 0x38, 0x44, 0xc0, 0xe5, 0xf1, 0x17, 0x00, 0xb0, - 0x06, 0x43, 0x7f, 0x1c, 0xf0, 0x17, 0x40, 0x42, 0xb1, 0x27, 0xf2, 0x17, - 0x00, 0x43, 0x57, 0x18, 0xf5, 0x17, 0xc0, 0x00, 0x8d, 0x01, 0xff, 0xa2, - 0x0c, 0x44, 0xc0, 0xe5, 0xf6, 0x17, 0x00, 0x43, 0x68, 0x74, 0xf7, 0x17, - 0x40, 0x42, 0xc3, 0x0a, 0xf8, 0x17, 0x00, 0x43, 0x8e, 0xef, 0xf9, 0x17, - 0x40, 0x42, 0xc3, 0x0a, 0xf3, 0x17, 0x00, 0x43, 0x8e, 0xef, 0xf4, 0x17, - 0x40, 0x80, 0x5a, 0x8d, 0x01, 0xff, 0xa2, 0x34, 0x05, 0xc0, 0xe5, 0x24, - 0xb0, 0x01, 0xff, 0x03, 0x69, 0x74, 0x11, 0x04, 0x2a, 0x29, 0x01, 0xff, - 0x44, 0xaa, 0xed, 0xef, 0x19, 0x00, 0x43, 0x57, 0x3c, 0xff, 0x19, 0x40, - 0x44, 0xaa, 0xed, 0xec, 0x19, 0x00, 0x43, 0x57, 0x3c, 0xfc, 0x19, 0x40, - 0x44, 0xaa, 0xed, 0xeb, 0x19, 0x00, 0x43, 0x57, 0x3c, 0xfb, 0x19, 0x40, - 0x03, 0x8a, 0x33, 0x11, 0x04, 0x8e, 0xef, 0x01, 0xff, 0x44, 0xaa, 0xed, - 0xee, 0x19, 0x00, 0x43, 0x57, 0x3c, 0xfe, 0x19, 0x40, 0x44, 0xaa, 0xed, - 0xed, 0x19, 0x00, 0x43, 0x57, 0x3c, 0xfd, 0x19, 0x40, 0x44, 0xaa, 0xed, - 0xea, 0x19, 0x00, 0x43, 0x57, 0x3c, 0xfa, 0x19, 0x40, 0x03, 0x8a, 0x33, - 0x11, 0x04, 0x8e, 0xef, 0x01, 0xff, 0x44, 0xaa, 0xed, 0xe4, 0x19, 0x00, - 0x43, 0x57, 0x3c, 0xf4, 0x19, 0x40, 0x44, 0xaa, 0xed, 0xe3, 0x19, 0x00, - 0x43, 0x57, 0x3c, 0xf3, 0x19, 0x40, 0xa1, 0x84, 0x01, 0xa2, 0x68, 0xa3, - 0x5a, 0xab, 0x46, 0x47, 0xf5, 0xcf, 0xd7, 0x17, 0x00, 0x4b, 0xa4, 0x9d, - 0xc9, 0x17, 0x00, 0x47, 0xb9, 0xd0, 0xc6, 0x17, 0x00, 0x4b, 0x1a, 0x9f, - 0xd9, 0x17, 0x00, 0xb2, 0x20, 0x4d, 0xb8, 0x86, 0xd0, 0x17, 0x00, 0xb4, - 0x0c, 0x46, 0x1a, 0xde, 0xd1, 0x17, 0x00, 0x4d, 0x1b, 0x89, 0xc8, 0x17, - 0x40, 0x4a, 0x43, 0xac, 0xcd, 0x17, 0x00, 0x46, 0x8e, 0xdc, 0xca, 0x17, - 0x40, 0x46, 0x2c, 0xd8, 0xc7, 0x17, 0x00, 0x44, 0x72, 0xee, 0xcc, 0x17, - 0x40, 0x46, 0xc4, 0xd6, 0xce, 0x17, 0x00, 0x43, 0x90, 0x00, 0xd4, 0x17, - 0x00, 0x46, 0xda, 0xdb, 0xda, 0x17, 0x40, 0x4e, 0x62, 0x74, 0xd6, 0x17, - 0x00, 0x44, 0xeb, 0xe5, 0xd2, 0x17, 0x40, 0xa1, 0x06, 0x45, 0x31, 0xe3, - 0xd8, 0x17, 0x40, 0x44, 0x5e, 0xee, 0xcb, 0x17, 0x00, 0x48, 0xc2, 0xc7, - 0xd5, 0x17, 0x00, 0x48, 0x10, 0xb4, 0xd3, 0x17, 0x40, 0x44, 0x16, 0xed, - 0xcf, 0x17, 0x00, 0x47, 0xc9, 0xd3, 0xdd, 0x17, 0x00, 0x4c, 0xc9, 0x94, + 0x04, 0x5b, 0x03, 0xe9, 0x02, 0x06, 0x60, 0x16, 0x01, 0xff, 0xa2, 0xc0, + 0x02, 0x03, 0x6a, 0xf1, 0xd3, 0x01, 0x0a, 0xd1, 0xac, 0x88, 0x01, 0x05, + 0xdf, 0xe8, 0x78, 0xb0, 0x06, 0x49, 0x26, 0xc0, 0xf0, 0x19, 0x40, 0x49, + 0x60, 0xb6, 0xe0, 0x19, 0x00, 0x03, 0xe6, 0x75, 0x5a, 0x03, 0xc3, 0x18, + 0x01, 0xff, 0x80, 0x47, 0x8d, 0x01, 0xff, 0xa2, 0x21, 0x05, 0xdf, 0xe8, + 0x11, 0x04, 0xe5, 0x75, 0x01, 0xff, 0x44, 0xe9, 0xf0, 0xe7, 0x19, 0x00, + 0x43, 0x27, 0x3d, 0xf7, 0x19, 0x40, 0x44, 0xe9, 0xf0, 0xe6, 0x19, 0x00, + 0x43, 0x27, 0x3d, 0xf6, 0x19, 0x40, 0x03, 0x5a, 0x34, 0x11, 0x04, 0xdd, + 0xf2, 0x01, 0xff, 0x44, 0xe9, 0xf0, 0xe9, 0x19, 0x00, 0x43, 0x27, 0x3d, + 0xf9, 0x19, 0x40, 0x44, 0xe9, 0xf0, 0xe8, 0x19, 0x00, 0x43, 0x27, 0x3d, + 0xf8, 0x19, 0x40, 0x44, 0xe9, 0xf0, 0xe5, 0x19, 0x00, 0x43, 0x27, 0x3d, + 0xf5, 0x19, 0x40, 0x44, 0xe9, 0xf0, 0xe2, 0x19, 0x00, 0x43, 0x27, 0x3d, + 0xf2, 0x19, 0x40, 0x44, 0xe9, 0xf0, 0xe1, 0x19, 0x00, 0x43, 0x27, 0x3d, + 0xf1, 0x19, 0x40, 0xa2, 0x38, 0x44, 0xdf, 0xe8, 0xf1, 0x17, 0x00, 0xb0, + 0x06, 0x43, 0x21, 0x1d, 0xf0, 0x17, 0x40, 0x42, 0x52, 0x28, 0xf2, 0x17, + 0x00, 0x43, 0xc3, 0x18, 0xf5, 0x17, 0xc0, 0x00, 0x8d, 0x01, 0xff, 0xa2, + 0x0c, 0x44, 0xdf, 0xe8, 0xf6, 0x17, 0x00, 0x43, 0xe5, 0x75, 0xf7, 0x17, + 0x40, 0x42, 0x12, 0x0b, 0xf8, 0x17, 0x00, 0x43, 0xdd, 0xf2, 0xf9, 0x17, + 0x40, 0x42, 0x12, 0x0b, 0xf3, 0x17, 0x00, 0x43, 0xdd, 0xf2, 0xf4, 0x17, + 0x40, 0x80, 0x5a, 0x8d, 0x01, 0xff, 0xa2, 0x34, 0x05, 0xdf, 0xe8, 0x24, + 0xb0, 0x01, 0xff, 0x03, 0xe6, 0x75, 0x11, 0x04, 0xee, 0x2e, 0x01, 0xff, + 0x44, 0xe9, 0xf0, 0xef, 0x19, 0x00, 0x43, 0x27, 0x3d, 0xff, 0x19, 0x40, + 0x44, 0xe9, 0xf0, 0xec, 0x19, 0x00, 0x43, 0x27, 0x3d, 0xfc, 0x19, 0x40, + 0x44, 0xe9, 0xf0, 0xeb, 0x19, 0x00, 0x43, 0x27, 0x3d, 0xfb, 0x19, 0x40, + 0x03, 0x5a, 0x34, 0x11, 0x04, 0xdd, 0xf2, 0x01, 0xff, 0x44, 0xe9, 0xf0, + 0xee, 0x19, 0x00, 0x43, 0x27, 0x3d, 0xfe, 0x19, 0x40, 0x44, 0xe9, 0xf0, + 0xed, 0x19, 0x00, 0x43, 0x27, 0x3d, 0xfd, 0x19, 0x40, 0x44, 0xe9, 0xf0, + 0xea, 0x19, 0x00, 0x43, 0x27, 0x3d, 0xfa, 0x19, 0x40, 0x03, 0x5a, 0x34, + 0x11, 0x04, 0xdd, 0xf2, 0x01, 0xff, 0x44, 0xe9, 0xf0, 0xe4, 0x19, 0x00, + 0x43, 0x27, 0x3d, 0xf4, 0x19, 0x40, 0x44, 0xe9, 0xf0, 0xe3, 0x19, 0x00, + 0x43, 0x27, 0x3d, 0xf3, 0x19, 0x40, 0xa1, 0x84, 0x01, 0xa2, 0x68, 0xa3, + 0x5a, 0xab, 0x46, 0x47, 0xc8, 0xd2, 0xd7, 0x17, 0x00, 0x4b, 0xca, 0x9f, + 0xc9, 0x17, 0x00, 0x47, 0x8c, 0xd3, 0xc6, 0x17, 0x00, 0x4b, 0x4b, 0xa1, + 0xd9, 0x17, 0x00, 0xb2, 0x20, 0x4d, 0x75, 0x88, 0xd0, 0x17, 0x00, 0xb4, + 0x0c, 0x46, 0x2a, 0xe1, 0xd1, 0x17, 0x00, 0x4d, 0xe5, 0x8a, 0xc8, 0x17, + 0x40, 0x4a, 0x93, 0xae, 0xcd, 0x17, 0x00, 0x46, 0x92, 0xdf, 0xca, 0x17, + 0x40, 0x46, 0x18, 0xdb, 0xc7, 0x17, 0x00, 0x44, 0xb5, 0xf1, 0xcc, 0x17, + 0x40, 0x46, 0xaa, 0xd9, 0xce, 0x17, 0x00, 0x43, 0x90, 0x00, 0xd4, 0x17, + 0x00, 0x46, 0xd2, 0xde, 0xda, 0x17, 0x40, 0x4e, 0xdf, 0x75, 0xd6, 0x17, + 0x00, 0x44, 0x0a, 0xe9, 0xd2, 0x17, 0x40, 0xa1, 0x06, 0x45, 0x41, 0xe6, + 0xd8, 0x17, 0x40, 0x44, 0xa1, 0xf1, 0xcb, 0x17, 0x00, 0x48, 0x70, 0xca, + 0xd5, 0x17, 0x00, 0x48, 0x61, 0xb6, 0xd3, 0x17, 0x40, 0x44, 0x55, 0xf0, + 0xcf, 0x17, 0x00, 0x47, 0x95, 0xd6, 0xdd, 0x17, 0x00, 0x4c, 0xb7, 0x96, 0xdc, 0x17, 0x40, 0x42, 0x16, 0x00, 0x94, 0x17, 0x00, 0xa3, 0xa9, 0x01, 0xa4, 0x9e, 0x01, 0x42, 0x22, 0x00, 0xa0, 0x17, 0x00, 0xab, 0x83, 0x01, - 0xac, 0x79, 0x42, 0x98, 0x07, 0x98, 0x17, 0x00, 0xae, 0x5b, 0xb0, 0x4b, - 0x42, 0xf4, 0x13, 0xa2, 0x17, 0x00, 0x42, 0xd0, 0x00, 0x9a, 0x17, 0x00, - 0xb3, 0x2d, 0xb4, 0x0c, 0x42, 0x68, 0x1c, 0x9c, 0x17, 0x00, 0x42, 0x60, - 0x46, 0x99, 0x17, 0x40, 0xe1, 0x8f, 0x17, 0x00, 0xa8, 0x11, 0xef, 0x91, + 0xac, 0x79, 0x42, 0xc3, 0x07, 0x98, 0x17, 0x00, 0xae, 0x5b, 0xb0, 0x4b, + 0x42, 0x43, 0x14, 0xa2, 0x17, 0x00, 0x42, 0xd0, 0x00, 0x9a, 0x17, 0x00, + 0xb3, 0x2d, 0xb4, 0x0c, 0x42, 0x0a, 0x1d, 0x9c, 0x17, 0x00, 0x42, 0xa9, + 0x47, 0x99, 0x17, 0x40, 0xe1, 0x8f, 0x17, 0x00, 0xa8, 0x11, 0xef, 0x91, 0x17, 0x00, 0x02, 0x53, 0x00, 0x01, 0xff, 0xe1, 0x8b, 0x17, 0x00, 0xef, 0x8d, 0x17, 0x40, 0xe1, 0x90, 0x17, 0x00, 0xef, 0x92, 0x17, 0x40, 0xe1, - 0x9f, 0x17, 0x00, 0x42, 0x22, 0x00, 0x9d, 0x17, 0x00, 0x42, 0x35, 0x03, + 0x9f, 0x17, 0x00, 0x42, 0x22, 0x00, 0x9d, 0x17, 0x00, 0x42, 0x60, 0x03, 0x9e, 0x17, 0x40, 0xa8, 0x04, 0xef, 0x96, 0x17, 0x40, 0xe1, 0x95, 0x17, - 0x00, 0xef, 0x97, 0x17, 0x40, 0x42, 0xb7, 0x13, 0x84, 0x17, 0x00, 0x42, - 0xb4, 0x01, 0x8e, 0x17, 0x00, 0xef, 0x93, 0x17, 0x00, 0x42, 0x60, 0x46, + 0x00, 0xef, 0x97, 0x17, 0x40, 0x42, 0x06, 0x14, 0x84, 0x17, 0x00, 0x42, + 0xb4, 0x01, 0x8e, 0x17, 0x00, 0xef, 0x93, 0x17, 0x00, 0x42, 0xa9, 0x47, 0x89, 0x17, 0x40, 0xe1, 0xa1, 0x17, 0x00, 0xef, 0x9b, 0x17, 0x40, 0xe1, 0x80, 0x17, 0x00, 0xa8, 0x04, 0xef, 0x82, 0x17, 0x40, 0xe1, 0x81, 0x17, 0x00, 0xef, 0x83, 0x17, 0x40, 0xe1, 0x8a, 0x17, 0x00, 0xef, 0x8c, 0x17, 0x40, 0xe1, 0x85, 0x17, 0x00, 0xa8, 0x04, 0xef, 0x87, 0x17, 0x40, 0xe1, - 0x86, 0x17, 0x00, 0xef, 0x88, 0x17, 0x40, 0x42, 0x26, 0x0b, 0xad, 0x17, - 0x80, 0x4e, 0xb1, 0x0b, 0x42, 0x34, 0x0a, 0xab, 0x17, 0xc0, 0x00, 0xf9, + 0x86, 0x17, 0x00, 0xef, 0x88, 0x17, 0x40, 0x42, 0x75, 0x0b, 0xad, 0x17, + 0x80, 0x4e, 0xb1, 0x0b, 0x42, 0x83, 0x0a, 0xab, 0x17, 0xc0, 0x00, 0xf9, 0xac, 0x17, 0x40, 0xa1, 0x2f, 0xe5, 0xaf, 0x17, 0x00, 0xe9, 0xa5, 0x17, - 0x80, 0x22, 0x08, 0xb2, 0xc6, 0x12, 0xf5, 0xa7, 0x17, 0xc0, 0x00, 0xeb, + 0x80, 0x22, 0x08, 0x58, 0xc9, 0x12, 0xf5, 0xa7, 0x17, 0xc0, 0x00, 0xeb, 0xa8, 0x17, 0x00, 0xf5, 0xa9, 0x17, 0xc0, 0x00, 0xf6, 0xaa, 0x17, 0x40, - 0x43, 0xbf, 0x0a, 0xb1, 0x17, 0x00, 0x43, 0xd0, 0x09, 0xb2, 0x17, 0x40, + 0x43, 0x0e, 0x0b, 0xb1, 0x17, 0x00, 0x43, 0x1f, 0x0a, 0xb2, 0x17, 0x40, 0xe9, 0xa6, 0x17, 0x40, 0xe1, 0xa4, 0x17, 0x00, 0xe9, 0xb0, 0x17, 0x00, 0xf1, 0xa3, 0x17, 0x00, 0xf5, 0xb3, 0x17, 0x40, 0xf9, 0xae, 0x17, 0x40, - 0x45, 0xc3, 0x0a, 0xe8, 0x17, 0x00, 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0xe9, - 0x17, 0x00, 0x43, 0xbf, 0x0a, 0xe1, 0x17, 0x00, 0xb3, 0x14, 0xb4, 0x06, - 0x44, 0xa1, 0x1d, 0xe0, 0x17, 0x40, 0x44, 0x25, 0x01, 0xe3, 0x17, 0x00, - 0x42, 0x15, 0x02, 0xe2, 0x17, 0x40, 0x44, 0x27, 0x1d, 0xe7, 0x17, 0x00, - 0x42, 0x60, 0x25, 0xe6, 0x17, 0x40, 0x43, 0xa7, 0x05, 0xe5, 0x17, 0x00, - 0x43, 0xcb, 0x06, 0xe4, 0x17, 0x40, 0x4a, 0x5d, 0xa6, 0x04, 0xd8, 0x80, - 0x06, 0x46, 0x11, 0x81, 0xe4, 0x6f, 0x41, 0x45, 0x4e, 0xdf, 0xff, 0x8c, - 0x41, 0x43, 0xba, 0x17, 0xaf, 0xfa, 0x01, 0x08, 0xca, 0xc7, 0x01, 0xff, - 0x06, 0xc4, 0x06, 0xae, 0x03, 0x51, 0xb3, 0x58, 0x48, 0x0a, 0x01, 0x07, - 0xc1, 0x05, 0xc0, 0x01, 0x07, 0x2f, 0x39, 0x9c, 0x01, 0x0c, 0x01, 0x16, - 0x5b, 0x05, 0x2f, 0x03, 0x2f, 0xb6, 0x01, 0xff, 0x45, 0x5c, 0x23, 0x3f, - 0x0a, 0x01, 0x05, 0x6d, 0x38, 0x01, 0xff, 0x4b, 0x72, 0x38, 0x0c, 0x0a, - 0x01, 0x05, 0x2f, 0x03, 0x01, 0xff, 0xe5, 0x05, 0x0a, 0x01, 0xe9, 0x01, - 0x0a, 0x01, 0xef, 0x06, 0x0a, 0x01, 0xf5, 0x02, 0x0a, 0x01, 0x49, 0x9b, - 0xbe, 0x03, 0x0a, 0x41, 0x48, 0xd0, 0x15, 0x0e, 0x0a, 0x01, 0x49, 0x2b, - 0x32, 0x38, 0x0a, 0x01, 0x45, 0xec, 0xe1, 0x39, 0x0a, 0x01, 0x02, 0x3b, - 0x01, 0x06, 0x47, 0xa1, 0x4a, 0x0f, 0x0a, 0x41, 0x47, 0x52, 0x12, 0x3a, - 0x0a, 0x01, 0x4f, 0x9d, 0x72, 0x0d, 0x0a, 0x41, 0xa3, 0x2f, 0xa4, 0x1a, - 0xac, 0x0c, 0x48, 0x8a, 0xc5, 0x54, 0x0a, 0x01, 0x4c, 0xd3, 0x14, 0x51, - 0x0a, 0x41, 0x44, 0xf8, 0x26, 0x58, 0x0a, 0x01, 0x44, 0x45, 0x78, 0x55, - 0x0a, 0x41, 0x44, 0xd1, 0x1f, 0x56, 0x0a, 0x01, 0xaf, 0x01, 0xff, 0xf4, - 0x50, 0x0a, 0x01, 0x4a, 0xd9, 0x9e, 0x57, 0x0a, 0x41, 0x45, 0xe8, 0x02, - 0x52, 0x0a, 0x01, 0x4b, 0xca, 0x8b, 0x53, 0x0a, 0x41, 0x04, 0xbf, 0x0a, - 0x0f, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0x44, 0x0a, 0x01, 0x45, 0xde, - 0x2b, 0x45, 0x0a, 0x41, 0x47, 0x22, 0x11, 0x46, 0x0a, 0x01, 0x48, 0xd5, - 0x5c, 0x47, 0x0a, 0x41, 0xe1, 0x00, 0x0a, 0x01, 0xa2, 0xd2, 0x01, 0xa3, + 0x45, 0x12, 0x0b, 0xe8, 0x17, 0x00, 0xa6, 0x2e, 0x44, 0xcf, 0x2a, 0xe9, + 0x17, 0x00, 0x43, 0x0e, 0x0b, 0xe1, 0x17, 0x00, 0xb3, 0x14, 0xb4, 0x06, + 0x44, 0x43, 0x1e, 0xe0, 0x17, 0x40, 0x44, 0x25, 0x01, 0xe3, 0x17, 0x00, + 0x42, 0x15, 0x02, 0xe2, 0x17, 0x40, 0x44, 0xc9, 0x1d, 0xe7, 0x17, 0x00, + 0x42, 0x01, 0x26, 0xe6, 0x17, 0x40, 0x43, 0xd2, 0x05, 0xe5, 0x17, 0x00, + 0x43, 0xf6, 0x06, 0xe4, 0x17, 0x40, 0x4a, 0x99, 0xa8, 0x04, 0xd8, 0x80, + 0x06, 0x46, 0xa7, 0x82, 0xe4, 0x6f, 0x41, 0x45, 0x59, 0xe2, 0xff, 0x8c, + 0x41, 0x43, 0x26, 0x18, 0xaf, 0xfa, 0x01, 0x08, 0x78, 0xca, 0x01, 0xff, + 0x06, 0xef, 0x06, 0xae, 0x03, 0x51, 0x1e, 0x5a, 0x48, 0x0a, 0x01, 0x07, + 0xec, 0x05, 0xc0, 0x01, 0x07, 0xff, 0x39, 0x9c, 0x01, 0x0c, 0x6d, 0x16, + 0x5b, 0x05, 0x5a, 0x03, 0x2f, 0xb6, 0x01, 0xff, 0x45, 0xe4, 0x23, 0x3f, + 0x0a, 0x01, 0x05, 0x3d, 0x39, 0x01, 0xff, 0x4b, 0x42, 0x39, 0x0c, 0x0a, + 0x01, 0x05, 0x5a, 0x03, 0x01, 0xff, 0xe5, 0x05, 0x0a, 0x01, 0xe9, 0x01, + 0x0a, 0x01, 0xef, 0x06, 0x0a, 0x01, 0xf5, 0x02, 0x0a, 0x01, 0x49, 0x22, + 0xc1, 0x03, 0x0a, 0x41, 0x48, 0x3c, 0x16, 0x0e, 0x0a, 0x01, 0x49, 0xfb, + 0x32, 0x38, 0x0a, 0x01, 0x45, 0xfc, 0xe4, 0x39, 0x0a, 0x01, 0x02, 0x3b, + 0x01, 0x06, 0x47, 0xea, 0x4b, 0x0f, 0x0a, 0x41, 0x47, 0xa1, 0x12, 0x3a, + 0x0a, 0x01, 0x4f, 0x28, 0x74, 0x0d, 0x0a, 0x41, 0xa3, 0x2f, 0xa4, 0x1a, + 0xac, 0x0c, 0x48, 0x28, 0xc8, 0x54, 0x0a, 0x01, 0x4c, 0x3f, 0x15, 0x51, + 0x0a, 0x41, 0x44, 0x99, 0x27, 0x58, 0x0a, 0x01, 0x44, 0xa6, 0x79, 0x55, + 0x0a, 0x41, 0x44, 0x73, 0x20, 0x56, 0x0a, 0x01, 0xaf, 0x01, 0xff, 0xf4, + 0x50, 0x0a, 0x01, 0x4a, 0x0a, 0xa1, 0x57, 0x0a, 0x41, 0x45, 0x13, 0x03, + 0x52, 0x0a, 0x01, 0x4b, 0x88, 0x8d, 0x53, 0x0a, 0x41, 0x04, 0x0e, 0x0b, + 0x0f, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0x44, 0x0a, 0x01, 0x45, 0x7f, + 0x2c, 0x45, 0x0a, 0x41, 0x47, 0x71, 0x11, 0x46, 0x0a, 0x01, 0x48, 0x40, + 0x5e, 0x47, 0x0a, 0x41, 0xe1, 0x00, 0x0a, 0x01, 0xa2, 0xd2, 0x01, 0xa3, 0xc5, 0x01, 0xa4, 0xac, 0x01, 0xa7, 0x9f, 0x01, 0x42, 0x22, 0x00, 0x31, - 0x0a, 0x01, 0x42, 0xbd, 0x26, 0x17, 0x0a, 0x01, 0xab, 0x80, 0x01, 0x42, + 0x0a, 0x01, 0x42, 0x56, 0x19, 0x17, 0x0a, 0x01, 0xab, 0x80, 0x01, 0x42, 0x74, 0x00, 0x2b, 0x0a, 0x01, 0x42, 0x6c, 0x00, 0x28, 0x0a, 0x01, 0xae, 0x62, 0xb0, 0x56, 0x42, 0x71, 0x00, 0x2a, 0x0a, 0x01, 0xb3, 0x3e, 0xb4, - 0x18, 0xb6, 0x0c, 0x42, 0x34, 0x22, 0x29, 0x0a, 0x01, 0x42, 0x59, 0x00, + 0x18, 0xb6, 0x0c, 0x42, 0xbc, 0x22, 0x29, 0x0a, 0x01, 0x42, 0x59, 0x00, 0x30, 0x0a, 0x41, 0xe1, 0x2c, 0x0a, 0x01, 0x42, 0x22, 0x00, 0x35, 0x0a, 0x41, 0xe1, 0x1f, 0x0a, 0x01, 0x42, 0x22, 0x00, 0x20, 0x0a, 0x01, 0xb4, 0x01, 0xff, 0xe1, 0x1a, 0x0a, 0x01, 0x42, 0x22, 0x00, 0x1b, 0x0a, 0x01, 0xb4, 0x01, 0xff, 0xe1, 0x34, 0x0a, 0x01, 0x42, 0x22, 0x00, 0x33, 0x0a, 0x41, 0xe1, 0x2f, 0x0a, 0x01, 0x42, 0x22, 0x00, 0x2d, 0x0a, 0x01, 0x42, - 0x15, 0x06, 0x2e, 0x0a, 0x41, 0xe1, 0x24, 0x0a, 0x01, 0x42, 0x22, 0x00, - 0x25, 0x0a, 0x41, 0xe1, 0x23, 0x0a, 0x01, 0x42, 0xff, 0x04, 0x1e, 0x0a, - 0x01, 0x42, 0x34, 0x22, 0x19, 0x0a, 0x41, 0xe1, 0x10, 0x0a, 0x01, 0x42, + 0x40, 0x06, 0x2e, 0x0a, 0x41, 0xe1, 0x24, 0x0a, 0x01, 0x42, 0x22, 0x00, + 0x25, 0x0a, 0x41, 0xe1, 0x23, 0x0a, 0x01, 0x42, 0x2a, 0x05, 0x1e, 0x0a, + 0x01, 0x42, 0xbc, 0x22, 0x19, 0x0a, 0x41, 0xe1, 0x10, 0x0a, 0x01, 0x42, 0x22, 0x00, 0x11, 0x0a, 0x01, 0x42, 0x1b, 0x02, 0x32, 0x0a, 0x41, 0xe1, 0x12, 0x0a, 0x01, 0x42, 0x22, 0x00, 0x13, 0x0a, 0x41, 0xe1, 0x21, 0x0a, 0x01, 0xa4, 0x06, 0x42, 0x22, 0x00, 0x22, 0x0a, 0x41, 0xe1, 0x1c, 0x0a, 0x01, 0x42, 0x22, 0x00, 0x1d, 0x0a, 0x41, 0xe1, 0x15, 0x0a, 0x01, 0x42, 0x22, 0x00, 0x16, 0x0a, 0x41, 0xe1, 0x26, 0x0a, 0x01, 0x42, 0x22, 0x00, - 0x27, 0x0a, 0x41, 0x44, 0xca, 0x06, 0x43, 0x0a, 0x01, 0x43, 0xbf, 0x0a, + 0x27, 0x0a, 0x41, 0x44, 0xf5, 0x06, 0x43, 0x0a, 0x01, 0x43, 0x0e, 0x0b, 0x40, 0x0a, 0x01, 0xb4, 0x01, 0xff, 0x44, 0x25, 0x01, 0x42, 0x0a, 0x01, - 0x42, 0x15, 0x02, 0x41, 0x0a, 0x41, 0x49, 0x5e, 0xb9, 0x2a, 0x21, 0x00, - 0xf9, 0x11, 0xf5, 0xc1, 0x00, 0x45, 0x26, 0x14, 0x28, 0x23, 0x80, 0x0c, - 0x47, 0xfa, 0xcc, 0x1f, 0xf5, 0x01, 0x44, 0x10, 0x20, 0xb1, 0xce, 0x41, - 0x4a, 0x83, 0xa3, 0xa6, 0xf5, 0x41, 0x43, 0x3f, 0x4f, 0x4b, 0xf5, 0x01, - 0x05, 0x85, 0xe4, 0x90, 0x1d, 0x0f, 0x84, 0x6d, 0x81, 0x1c, 0xae, 0xf2, - 0x0b, 0x06, 0x3a, 0x66, 0xda, 0x06, 0x03, 0xc0, 0xde, 0xb4, 0x02, 0x07, - 0xef, 0xd4, 0x01, 0xff, 0x06, 0xc4, 0x06, 0xe8, 0x01, 0x07, 0xc1, 0x05, - 0x42, 0x05, 0x2f, 0x03, 0x32, 0x05, 0x83, 0x2c, 0x1b, 0x06, 0x6c, 0x38, + 0x42, 0x15, 0x02, 0x41, 0x0a, 0x41, 0x49, 0xc1, 0xbb, 0x2a, 0x21, 0x00, + 0xf9, 0x11, 0xf5, 0xc1, 0x00, 0x45, 0x75, 0x14, 0x28, 0x23, 0x80, 0x0c, + 0x47, 0xcd, 0xcf, 0x1f, 0xf5, 0x01, 0x44, 0xb2, 0x20, 0xb1, 0xce, 0x41, + 0x4a, 0xbf, 0xa5, 0xa6, 0xf5, 0x41, 0x43, 0xe8, 0x60, 0x4b, 0xf5, 0x01, + 0x05, 0x9a, 0xe7, 0x99, 0x1d, 0x0f, 0x2d, 0x6f, 0x8a, 0x1c, 0xae, 0xf2, + 0x0b, 0x06, 0xb6, 0x67, 0xda, 0x06, 0x03, 0xd0, 0xe1, 0xb4, 0x02, 0x07, + 0xc9, 0xd7, 0x01, 0xff, 0x06, 0xef, 0x06, 0xe8, 0x01, 0x07, 0xec, 0x05, + 0x42, 0x05, 0x5a, 0x03, 0x32, 0x05, 0x3b, 0x2d, 0x1b, 0x06, 0x3c, 0x39, 0x01, 0xff, 0xe5, 0x27, 0xa9, 0x80, 0x0d, 0xef, 0x2a, 0xa9, 0x00, 0xf5, 0x28, 0xa9, 0xc0, 0x00, 0xe5, 0x26, 0xa9, 0x40, 0xe5, 0x29, 0xa9, 0x40, - 0x45, 0xe2, 0xe1, 0x2c, 0xa9, 0x80, 0x06, 0x46, 0xbd, 0xca, 0x2b, 0xa9, - 0x40, 0x47, 0xbc, 0xca, 0x2d, 0xa9, 0x40, 0x43, 0xba, 0xf0, 0x2e, 0xa9, - 0x00, 0x44, 0x4e, 0xef, 0x2f, 0xa9, 0x40, 0xe1, 0x22, 0xa9, 0x00, 0x42, + 0x45, 0xf2, 0xe4, 0x2c, 0xa9, 0x80, 0x06, 0x46, 0x7b, 0xcd, 0x2b, 0xa9, + 0x40, 0x47, 0x7a, 0xcd, 0x2d, 0xa9, 0x40, 0x43, 0x0d, 0xf4, 0x2e, 0xa9, + 0x00, 0x44, 0xa5, 0xf2, 0x2f, 0xa9, 0x40, 0xe1, 0x22, 0xa9, 0x00, 0x42, 0x16, 0x00, 0x19, 0xa9, 0x00, 0x42, 0x37, 0x00, 0x21, 0xa9, 0x00, 0x42, - 0xa1, 0x10, 0x18, 0xa9, 0x00, 0x42, 0x24, 0x02, 0x0c, 0xa9, 0x00, 0xa8, + 0xf0, 0x10, 0x18, 0xa9, 0x00, 0x42, 0x24, 0x02, 0x0c, 0xa9, 0x00, 0xa8, 0x7a, 0xe9, 0x24, 0xa9, 0x00, 0xab, 0x6a, 0x42, 0x74, 0x00, 0x1c, 0xa9, 0x00, 0x42, 0x6c, 0x00, 0x17, 0xa9, 0x00, 0xae, 0x4c, 0xaf, 0x42, 0xb0, 0x36, 0x42, 0x71, 0x00, 0x1a, 0xa9, 0x00, 0xb3, 0x24, 0xb4, 0x18, 0x42, - 0xa6, 0x0a, 0x20, 0xa9, 0x00, 0x42, 0xa9, 0x01, 0x1d, 0xa9, 0x00, 0x42, - 0x34, 0x22, 0x1b, 0xa9, 0x00, 0x42, 0x59, 0x00, 0x10, 0xa9, 0x40, 0xe1, + 0xf5, 0x0a, 0x20, 0xa9, 0x00, 0x42, 0xa9, 0x01, 0x1d, 0xa9, 0x00, 0x42, + 0xbc, 0x22, 0x1b, 0xa9, 0x00, 0x42, 0x59, 0x00, 0x10, 0xa9, 0x40, 0xe1, 0x12, 0xa9, 0x00, 0x42, 0x22, 0x00, 0x1e, 0xa9, 0x40, 0xe1, 0x0e, 0xa9, 0x00, 0x42, 0x22, 0x00, 0x0f, 0xa9, 0x40, 0xe1, 0x15, 0xa9, 0x00, 0x42, 0x22, 0x00, 0x16, 0xa9, 0x40, 0xe5, 0x23, 0xa9, 0x00, 0xef, 0x25, 0xa9, 0x40, 0xe1, 0x14, 0xa9, 0x00, 0x42, 0x24, 0x02, 0x0d, 0xa9, 0x00, 0x42, - 0x34, 0x22, 0x11, 0xa9, 0x40, 0xe1, 0x0a, 0xa9, 0x00, 0x42, 0x22, 0x00, + 0xbc, 0x22, 0x11, 0xa9, 0x40, 0xe1, 0x0a, 0xa9, 0x00, 0x42, 0x22, 0x00, 0x0b, 0xa9, 0x40, 0xe1, 0x1f, 0xa9, 0x00, 0x42, 0x12, 0x00, 0x13, 0xa9, - 0x40, 0x45, 0xc3, 0x0a, 0x08, 0xa9, 0x00, 0xa6, 0x2e, 0x44, 0x46, 0x2a, - 0x09, 0xa9, 0x00, 0x43, 0xbf, 0x0a, 0x01, 0xa9, 0x00, 0xb3, 0x14, 0xb4, - 0x06, 0x44, 0xa1, 0x1d, 0x00, 0xa9, 0x40, 0x44, 0x25, 0x01, 0x03, 0xa9, - 0x00, 0x42, 0x15, 0x02, 0x02, 0xa9, 0x40, 0x44, 0x27, 0x1d, 0x07, 0xa9, - 0x00, 0x42, 0x60, 0x25, 0x06, 0xa9, 0x40, 0x43, 0xa7, 0x05, 0x05, 0xa9, - 0x00, 0x43, 0xcb, 0x06, 0x04, 0xa9, 0x40, 0x49, 0x0b, 0xb5, 0x42, 0x1f, - 0x01, 0xa4, 0xc6, 0x03, 0x07, 0xc1, 0x05, 0xaf, 0x01, 0x0c, 0x01, 0x16, - 0x5e, 0x05, 0x2f, 0x03, 0x36, 0x0b, 0xd1, 0x75, 0x01, 0xff, 0xa1, 0x21, + 0x40, 0x45, 0x12, 0x0b, 0x08, 0xa9, 0x00, 0xa6, 0x2e, 0x44, 0xcf, 0x2a, + 0x09, 0xa9, 0x00, 0x43, 0x0e, 0x0b, 0x01, 0xa9, 0x00, 0xb3, 0x14, 0xb4, + 0x06, 0x44, 0x43, 0x1e, 0x00, 0xa9, 0x40, 0x44, 0x25, 0x01, 0x03, 0xa9, + 0x00, 0x42, 0x15, 0x02, 0x02, 0xa9, 0x40, 0x44, 0xc9, 0x1d, 0x07, 0xa9, + 0x00, 0x42, 0x01, 0x26, 0x06, 0xa9, 0x40, 0x43, 0xd2, 0x05, 0x05, 0xa9, + 0x00, 0x43, 0xf6, 0x06, 0x04, 0xa9, 0x40, 0x49, 0x5c, 0xb7, 0x42, 0x1f, + 0x01, 0xa4, 0xc6, 0x03, 0x07, 0xec, 0x05, 0xaf, 0x01, 0x0c, 0x6d, 0x16, + 0x5e, 0x05, 0x5a, 0x03, 0x36, 0x0b, 0x40, 0x77, 0x01, 0xff, 0xa1, 0x21, 0xe5, 0x3e, 0x1f, 0x81, 0x18, 0xe9, 0x36, 0x1f, 0x81, 0x0f, 0xf5, 0x38, - 0x1f, 0x81, 0x06, 0x49, 0x9b, 0xbe, 0x3a, 0x1f, 0x41, 0xf5, 0x39, 0x1f, + 0x1f, 0x81, 0x06, 0x49, 0x22, 0xc1, 0x3a, 0x1f, 0x41, 0xf5, 0x39, 0x1f, 0x41, 0xe9, 0x37, 0x1f, 0x41, 0xf5, 0x40, 0x1f, 0x41, 0xe1, 0x34, 0x1f, - 0x01, 0xe9, 0x3f, 0x1f, 0x01, 0x4b, 0xe9, 0x9c, 0x35, 0x1f, 0x41, 0x48, - 0xd0, 0x15, 0x01, 0x1f, 0x01, 0x4b, 0x4f, 0x23, 0x00, 0x1f, 0x01, 0x46, - 0x6c, 0xda, 0x41, 0x1f, 0x01, 0x45, 0x5a, 0x3e, 0x5a, 0x1f, 0x01, 0x45, - 0x32, 0xe7, 0x02, 0x1f, 0x01, 0x47, 0xa1, 0x4a, 0x03, 0x1f, 0x41, 0x58, - 0x4d, 0x26, 0x46, 0x1f, 0x01, 0xa3, 0x39, 0x02, 0x3b, 0x01, 0x2b, 0xa6, - 0x1d, 0xb3, 0x06, 0x4a, 0xe5, 0xaf, 0x4b, 0x1f, 0x41, 0x4d, 0x58, 0x26, - 0x45, 0x1f, 0x01, 0xb0, 0x01, 0xff, 0x4a, 0x1d, 0xa5, 0x48, 0x1f, 0x01, - 0x44, 0xa8, 0x83, 0x4e, 0x1f, 0x41, 0x4c, 0x39, 0x8e, 0x4d, 0x1f, 0x01, - 0x45, 0x13, 0x01, 0x47, 0x1f, 0x41, 0xf4, 0x49, 0x1f, 0x01, 0x48, 0xad, - 0x40, 0x4a, 0x1f, 0x41, 0x45, 0xe8, 0x02, 0x4c, 0x1f, 0x01, 0x4d, 0x9f, - 0x83, 0x4f, 0x1f, 0x41, 0xe1, 0x04, 0x1f, 0x81, 0x84, 0x02, 0xa2, 0xf7, + 0x01, 0xe9, 0x3f, 0x1f, 0x01, 0x4b, 0x0f, 0x9f, 0x35, 0x1f, 0x41, 0x48, + 0x3c, 0x16, 0x01, 0x1f, 0x01, 0x4b, 0xd7, 0x23, 0x00, 0x1f, 0x01, 0x46, + 0x64, 0xdd, 0x41, 0x1f, 0x01, 0x45, 0x3f, 0x3f, 0x5a, 0x1f, 0x01, 0x45, + 0x56, 0xea, 0x02, 0x1f, 0x01, 0x47, 0xea, 0x4b, 0x03, 0x1f, 0x41, 0x58, + 0xee, 0x26, 0x46, 0x1f, 0x01, 0xa3, 0x39, 0x02, 0x3b, 0x01, 0x2b, 0xa6, + 0x1d, 0xb3, 0x06, 0x4a, 0x35, 0xb2, 0x4b, 0x1f, 0x41, 0x4d, 0xf9, 0x26, + 0x45, 0x1f, 0x01, 0xb0, 0x01, 0xff, 0x4a, 0x59, 0xa7, 0x48, 0x1f, 0x01, + 0x44, 0x58, 0x85, 0x4e, 0x1f, 0x41, 0x4c, 0xeb, 0x8f, 0x4d, 0x1f, 0x01, + 0x45, 0x13, 0x01, 0x47, 0x1f, 0x41, 0xf4, 0x49, 0x1f, 0x01, 0x48, 0xba, + 0x41, 0x4a, 0x1f, 0x41, 0x45, 0x13, 0x03, 0x4c, 0x1f, 0x01, 0x4d, 0x4f, + 0x85, 0x4f, 0x1f, 0x41, 0xe1, 0x04, 0x1f, 0x81, 0x84, 0x02, 0xa2, 0xf7, 0x01, 0xa3, 0xea, 0x01, 0xa4, 0xd1, 0x01, 0xe5, 0x0e, 0x1f, 0x01, 0xa7, 0xc0, 0x01, 0x42, 0x22, 0x00, 0x32, 0x1f, 0x01, 0xe9, 0x06, 0x1f, 0x81, 0xb0, 0x01, 0xaa, 0x9d, 0x01, 0xab, 0x90, 0x01, 0x42, 0x74, 0x00, 0x2d, 0x1f, 0x01, 0x42, 0x6c, 0x00, 0x2a, 0x1f, 0x01, 0xae, 0x6c, 0xef, 0x10, 0x1f, 0x01, 0xb0, 0x5c, 0x42, 0x71, 0x00, 0x2c, 0x1f, 0x01, 0xb3, 0x44, - 0xb4, 0x2b, 0xf5, 0x08, 0x1f, 0x81, 0x22, 0x08, 0x9b, 0xbe, 0x0c, 0x42, - 0xa9, 0x01, 0x2e, 0x1f, 0x01, 0x42, 0x34, 0x22, 0x2b, 0x1f, 0x41, 0xec, + 0xb4, 0x2b, 0xf5, 0x08, 0x1f, 0x81, 0x22, 0x08, 0x22, 0xc1, 0x0c, 0x42, + 0xa9, 0x01, 0x2e, 0x1f, 0x01, 0x42, 0xbc, 0x22, 0x2b, 0x1f, 0x41, 0xec, 0x0c, 0x1f, 0x81, 0x09, 0xf2, 0x0a, 0x1f, 0xc1, 0x00, 0xf2, 0x0b, 0x1f, 0x41, 0xec, 0x0d, 0x1f, 0x41, 0xf5, 0x09, 0x1f, 0x41, 0xe1, 0x21, 0x1f, 0x01, 0x42, 0x22, 0x00, 0x22, 0x1f, 0x01, 0xb4, 0x01, 0xff, 0xe1, 0x1c, 0x1f, 0x01, 0x42, 0x22, 0x00, 0x1d, 0x1f, 0x41, 0xe1, 0x31, 0x1f, 0x01, - 0x42, 0x22, 0x00, 0x2f, 0x1f, 0x01, 0x42, 0x15, 0x06, 0x30, 0x1f, 0x41, + 0x42, 0x22, 0x00, 0x2f, 0x1f, 0x01, 0x42, 0x40, 0x06, 0x30, 0x1f, 0x41, 0xe1, 0x26, 0x1f, 0x01, 0x42, 0x22, 0x00, 0x27, 0x1f, 0x41, 0xe1, 0x25, - 0x1f, 0x01, 0x42, 0x24, 0x02, 0x16, 0x1f, 0x01, 0x42, 0xff, 0x04, 0x20, - 0x1f, 0x01, 0x42, 0x34, 0x22, 0x1b, 0x1f, 0x41, 0xe1, 0x12, 0x1f, 0x01, + 0x1f, 0x01, 0x42, 0x24, 0x02, 0x16, 0x1f, 0x01, 0x42, 0x2a, 0x05, 0x20, + 0x1f, 0x01, 0x42, 0xbc, 0x22, 0x1b, 0x1f, 0x41, 0xe1, 0x12, 0x1f, 0x01, 0x42, 0x22, 0x00, 0x13, 0x1f, 0x41, 0xe1, 0x19, 0x1f, 0x01, 0x42, 0x22, - 0x00, 0x1a, 0x1f, 0x01, 0x43, 0xd6, 0x34, 0x33, 0x1f, 0x41, 0xe9, 0x07, + 0x00, 0x1a, 0x1f, 0x01, 0x43, 0xa6, 0x35, 0x33, 0x1f, 0x41, 0xe9, 0x07, 0x1f, 0x41, 0xe1, 0x14, 0x1f, 0x01, 0x42, 0x22, 0x00, 0x15, 0x1f, 0x41, 0xe1, 0x23, 0x1f, 0x01, 0xa4, 0x06, 0x42, 0x22, 0x00, 0x24, 0x1f, 0x41, 0xe1, 0x1e, 0x1f, 0x01, 0x42, 0x22, 0x00, 0x1f, 0x1f, 0x41, 0xe1, 0x17, 0x1f, 0x01, 0x42, 0x22, 0x00, 0x18, 0x1f, 0x41, 0xe1, 0x28, 0x1f, 0x01, 0x42, 0x22, 0x00, 0x29, 0x1f, 0x41, 0xe1, 0x05, 0x1f, 0x01, 0xe9, 0x0f, - 0x1f, 0x41, 0x44, 0xd1, 0x1f, 0x43, 0x1f, 0x01, 0x05, 0xc5, 0x06, 0x06, - 0x4b, 0xd8, 0x9e, 0x44, 0x1f, 0x41, 0x45, 0xc3, 0x0a, 0x58, 0x1f, 0x01, - 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0x59, 0x1f, 0x01, 0x43, 0xbf, 0x0a, 0x51, - 0x1f, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xa1, 0x1d, 0x50, 0x1f, 0x41, + 0x1f, 0x41, 0x44, 0x73, 0x20, 0x43, 0x1f, 0x01, 0x05, 0xf0, 0x06, 0x06, + 0x4b, 0x09, 0xa1, 0x44, 0x1f, 0x41, 0x45, 0x12, 0x0b, 0x58, 0x1f, 0x01, + 0xa6, 0x2e, 0x44, 0xcf, 0x2a, 0x59, 0x1f, 0x01, 0x43, 0x0e, 0x0b, 0x51, + 0x1f, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, 0x50, 0x1f, 0x41, 0x44, 0x25, 0x01, 0x53, 0x1f, 0x01, 0x42, 0x15, 0x02, 0x52, 0x1f, 0x41, - 0x44, 0x27, 0x1d, 0x57, 0x1f, 0x01, 0x42, 0x60, 0x25, 0x56, 0x1f, 0x41, - 0x43, 0xa7, 0x05, 0x55, 0x1f, 0x01, 0x43, 0xcb, 0x06, 0x54, 0x1f, 0x41, - 0x80, 0x1d, 0x0a, 0xf6, 0x11, 0x01, 0xff, 0x4d, 0x86, 0x80, 0xa0, 0x30, - 0x00, 0x54, 0x00, 0x12, 0xfc, 0x30, 0x00, 0x56, 0x4b, 0x36, 0x9c, 0x30, - 0x00, 0x51, 0x50, 0x36, 0x9b, 0x30, 0x40, 0x4c, 0x41, 0x8c, 0xff, 0x30, - 0x00, 0x4e, 0xb6, 0x1f, 0xfd, 0x30, 0x00, 0x07, 0xc1, 0x05, 0x0c, 0x4a, - 0xb1, 0x44, 0xfb, 0x30, 0x00, 0x55, 0x11, 0x3e, 0xfe, 0x30, 0x40, 0xe1, + 0x44, 0xc9, 0x1d, 0x57, 0x1f, 0x01, 0x42, 0x01, 0x26, 0x56, 0x1f, 0x41, + 0x43, 0xd2, 0x05, 0x55, 0x1f, 0x01, 0x43, 0xf6, 0x06, 0x54, 0x1f, 0x41, + 0x80, 0x1d, 0x0a, 0x45, 0x12, 0x01, 0xff, 0x4d, 0x1c, 0x82, 0xa0, 0x30, + 0x00, 0x54, 0x4f, 0x12, 0xfc, 0x30, 0x00, 0x56, 0x1b, 0x37, 0x9c, 0x30, + 0x00, 0x51, 0x20, 0x37, 0x9b, 0x30, 0x40, 0x4c, 0xff, 0x8d, 0xff, 0x30, + 0x00, 0x4e, 0x58, 0x20, 0xfd, 0x30, 0x00, 0x07, 0xec, 0x05, 0x0c, 0x4a, + 0xe6, 0x45, 0xfb, 0x30, 0x00, 0x55, 0xf6, 0x3e, 0xfe, 0x30, 0x40, 0xe1, 0xa2, 0x30, 0x80, 0xb8, 0x04, 0xa2, 0xa1, 0x04, 0xa4, 0x8a, 0x04, 0xe5, 0xa8, 0x30, 0x00, 0xa7, 0xef, 0x03, 0xa8, 0xd8, 0x03, 0xe9, 0xa4, 0x30, 0x00, 0xab, 0xbd, 0x03, 0xad, 0xe3, 0x02, 0xee, 0xf3, 0x30, 0x80, 0xc9, @@ -10382,10 +10523,10 @@ static const unsigned char uname2c_tree[218382] = { 0xe9, 0xf8, 0x30, 0x00, 0xef, 0xfa, 0x30, 0x00, 0xf5, 0xf4, 0x30, 0x40, 0xe1, 0xbf, 0x30, 0x00, 0xe5, 0xc6, 0x30, 0x00, 0xe9, 0xc1, 0x30, 0x00, 0xef, 0xc8, 0x30, 0x00, 0xf5, 0xc4, 0x30, 0x40, 0xe1, 0xb5, 0x30, 0x00, - 0xe5, 0xbb, 0x30, 0x00, 0xe9, 0xb7, 0x30, 0x00, 0x05, 0x0d, 0x07, 0x08, + 0xe5, 0xbb, 0x30, 0x00, 0xe9, 0xb7, 0x30, 0x00, 0x05, 0x5e, 0x07, 0x08, 0xef, 0xbd, 0x30, 0x00, 0xf5, 0xb9, 0x30, 0x40, 0xe1, 0xa1, 0x30, 0x00, 0xe5, 0xa7, 0x30, 0x00, 0xa8, 0x78, 0xe9, 0xa3, 0x30, 0x00, 0xab, 0x62, - 0x42, 0x57, 0x16, 0xfa, 0x31, 0x00, 0xee, 0x67, 0xb1, 0x81, 0x53, 0xef, + 0x42, 0xc3, 0x16, 0xfa, 0x31, 0x00, 0xee, 0x67, 0xb1, 0x81, 0x53, 0xef, 0xa9, 0x30, 0x00, 0xb2, 0x39, 0xb3, 0x2f, 0xb4, 0x25, 0xf5, 0xa5, 0x30, 0x00, 0xb7, 0x0f, 0xb9, 0x01, 0xff, 0xe1, 0xe3, 0x30, 0x00, 0xef, 0xe7, 0x30, 0x00, 0xf5, 0xe5, 0x30, 0x40, 0xe1, 0xee, 0x30, 0x00, 0xe5, 0x65, @@ -10403,7 +10544,7 @@ static const unsigned char uname2c_tree[218382] = { 0x30, 0x00, 0xe9, 0xcb, 0x30, 0x00, 0xef, 0xce, 0x30, 0x00, 0xf5, 0xcc, 0x30, 0x40, 0xe1, 0xde, 0x30, 0x00, 0xe5, 0xe1, 0x30, 0x00, 0xe9, 0xdf, 0x30, 0x80, 0x08, 0xef, 0xe2, 0x30, 0x00, 0xf5, 0xe0, 0x30, 0x40, 0x05, - 0x0b, 0xe6, 0x01, 0xff, 0x0f, 0xdd, 0x6e, 0x1d, 0x05, 0x05, 0x31, 0x01, + 0x2a, 0xe9, 0x01, 0xff, 0x0f, 0x86, 0x70, 0x1d, 0x05, 0xeb, 0x31, 0x01, 0xff, 0xd2, 0xf0, 0xaf, 0x01, 0xd3, 0xf1, 0xaf, 0x01, 0xd4, 0xf2, 0xaf, 0x01, 0xd5, 0xf3, 0xaf, 0x01, 0xd7, 0xf5, 0xaf, 0x01, 0xd8, 0xf6, 0xaf, 0x41, 0xd1, 0xf7, 0xaf, 0x01, 0xd2, 0xf8, 0xaf, 0x01, 0xd3, 0xf9, 0xaf, @@ -10416,8223 +10557,8326 @@ static const unsigned char uname2c_tree[218382] = { 0x00, 0xf5, 0xb0, 0x30, 0x40, 0xe1, 0xc0, 0x30, 0x00, 0xe5, 0xc7, 0x30, 0x00, 0xe9, 0xc2, 0x30, 0x00, 0xef, 0xc9, 0x30, 0x00, 0xf5, 0xc5, 0x30, 0x40, 0xe1, 0xd0, 0x30, 0x00, 0xe5, 0xd9, 0x30, 0x00, 0xe9, 0xd3, 0x30, - 0x00, 0xef, 0xdc, 0x30, 0x00, 0xf5, 0xd6, 0x30, 0x40, 0x07, 0x28, 0x7f, - 0x01, 0xff, 0xe5, 0x00, 0xb0, 0x01, 0x42, 0x45, 0x07, 0x22, 0xb1, 0x01, + 0x00, 0xef, 0xdc, 0x30, 0x00, 0xf5, 0xd6, 0x30, 0x40, 0x07, 0xa4, 0x80, + 0x01, 0xff, 0xe5, 0x00, 0xb0, 0x01, 0x42, 0x7c, 0x31, 0x22, 0xb1, 0x01, 0xb9, 0x01, 0xff, 0xe5, 0x21, 0xb1, 0x01, 0xe9, 0x20, 0xb1, 0x41, 0xa7, - 0xbe, 0x04, 0x05, 0xcf, 0xe5, 0x01, 0xff, 0x4e, 0x38, 0x74, 0xd6, 0x0c, - 0x00, 0x06, 0xc4, 0x06, 0xec, 0x03, 0x02, 0x68, 0x00, 0x9f, 0x01, 0x05, - 0x2f, 0x03, 0x4e, 0x0b, 0xd1, 0x75, 0x01, 0xff, 0xa1, 0x3b, 0xe5, 0xc6, - 0x0c, 0x80, 0x32, 0xe9, 0xbf, 0x0c, 0x80, 0x29, 0xef, 0xca, 0x0c, 0x80, - 0x20, 0xf5, 0xc1, 0x0c, 0x80, 0x17, 0x08, 0x9b, 0xbe, 0x01, 0xff, 0xec, - 0xe2, 0x0c, 0x80, 0x09, 0xf2, 0xc3, 0x0c, 0xc0, 0x00, 0xf2, 0xc4, 0x0c, - 0x40, 0xec, 0xe3, 0x0c, 0x40, 0xf5, 0xc2, 0x0c, 0x40, 0xef, 0xcb, 0x0c, - 0x40, 0xe9, 0xc0, 0x0c, 0x40, 0xe5, 0xc7, 0x0c, 0x40, 0xe1, 0xbe, 0x0c, - 0x00, 0xe9, 0xc8, 0x0c, 0x00, 0xf5, 0xcc, 0x0c, 0x40, 0xa1, 0x3f, 0xa3, - 0x31, 0x4b, 0xc0, 0x9b, 0xf1, 0x0c, 0x00, 0x45, 0x5a, 0x3e, 0xbc, 0x0c, - 0x00, 0xb3, 0x17, 0x4b, 0x32, 0xa2, 0xf2, 0x0c, 0x00, 0x02, 0x02, 0x00, - 0x01, 0xff, 0x44, 0x5d, 0x23, 0xcd, 0x0c, 0x00, 0x45, 0xa3, 0x4a, 0x83, - 0x0c, 0x40, 0x46, 0x0d, 0xd3, 0x84, 0x0c, 0x00, 0x52, 0x30, 0x53, 0x80, - 0x0c, 0x40, 0x4a, 0x50, 0x23, 0x81, 0x0c, 0x00, 0x5d, 0xc7, 0x15, 0xf3, - 0x0c, 0x40, 0x47, 0xd1, 0x15, 0x82, 0x0c, 0x00, 0x47, 0xf2, 0x86, 0xbd, - 0x0c, 0x40, 0x49, 0x74, 0x38, 0xd5, 0x0c, 0x00, 0x05, 0xc3, 0x05, 0x01, - 0xff, 0xe1, 0x85, 0x0c, 0x80, 0xab, 0x02, 0xa2, 0x9e, 0x02, 0xa3, 0x91, - 0x02, 0xa4, 0xf8, 0x01, 0xe5, 0x8e, 0x0c, 0x80, 0xee, 0x01, 0x42, 0xe1, - 0x07, 0xde, 0x0c, 0x00, 0xa7, 0xdb, 0x01, 0x42, 0x22, 0x00, 0xb9, 0x0c, - 0x00, 0xe9, 0x87, 0x0c, 0x80, 0xcb, 0x01, 0xaa, 0xbe, 0x01, 0xab, 0xb1, - 0x01, 0xac, 0x9d, 0x01, 0x42, 0x6c, 0x00, 0xae, 0x0c, 0x00, 0xae, 0x78, - 0xef, 0x92, 0x0c, 0x80, 0x6f, 0xb0, 0x63, 0xb2, 0x57, 0xb3, 0x45, 0xb4, - 0x2c, 0xf5, 0x89, 0x0c, 0x80, 0x23, 0xb6, 0x06, 0x42, 0x34, 0x22, 0xaf, - 0x0c, 0x40, 0xe1, 0xb5, 0x0c, 0x00, 0x07, 0x9c, 0xbe, 0x01, 0xff, 0xec, - 0x8c, 0x0c, 0x80, 0x09, 0xf2, 0x8b, 0x0c, 0xc0, 0x00, 0xf2, 0xe0, 0x0c, - 0x40, 0xec, 0xe1, 0x0c, 0x40, 0xf5, 0x8a, 0x0c, 0x40, 0xe1, 0xa4, 0x0c, - 0x00, 0x42, 0x22, 0x00, 0xa5, 0x0c, 0x00, 0xb4, 0x01, 0xff, 0xe1, 0x9f, - 0x0c, 0x00, 0x42, 0x22, 0x00, 0xa0, 0x0c, 0x40, 0xe1, 0xb8, 0x0c, 0x00, - 0x42, 0x22, 0x00, 0xb6, 0x0c, 0x00, 0x42, 0x15, 0x06, 0xb7, 0x0c, 0x40, - 0xe1, 0xb0, 0x0c, 0x00, 0x42, 0x71, 0x00, 0xb1, 0x0c, 0x40, 0xe1, 0xaa, - 0x0c, 0x00, 0x42, 0x22, 0x00, 0xab, 0x0c, 0x40, 0xef, 0x93, 0x0c, 0x40, - 0xe1, 0xa8, 0x0c, 0x80, 0x12, 0x42, 0x24, 0x02, 0x99, 0x0c, 0x00, 0x42, - 0xff, 0x04, 0xa3, 0x0c, 0x00, 0x42, 0x34, 0x22, 0x9e, 0x0c, 0x40, 0x4b, - 0xd6, 0x9b, 0xdd, 0x0c, 0x40, 0xe1, 0xb2, 0x0c, 0x00, 0xac, 0x01, 0xff, - 0xe1, 0xb3, 0x0c, 0x00, 0x42, 0x74, 0x00, 0xde, 0x0c, 0x40, 0xe1, 0x95, - 0x0c, 0x00, 0x42, 0x22, 0x00, 0x96, 0x0c, 0x40, 0xe1, 0x9c, 0x0c, 0x00, - 0x42, 0x22, 0x00, 0x9d, 0x0c, 0x40, 0xe9, 0x88, 0x0c, 0x40, 0xe1, 0x97, - 0x0c, 0x00, 0x42, 0x22, 0x00, 0x98, 0x0c, 0x40, 0xe5, 0x8f, 0x0c, 0x40, - 0xe1, 0xa6, 0x0c, 0x00, 0xa4, 0x06, 0x42, 0x22, 0x00, 0xa7, 0x0c, 0x40, - 0xe1, 0xa1, 0x0c, 0x00, 0x42, 0x22, 0x00, 0xa2, 0x0c, 0x40, 0xe1, 0x9a, - 0x0c, 0x00, 0x42, 0x22, 0x00, 0x9b, 0x0c, 0x40, 0xe1, 0xac, 0x0c, 0x00, - 0x42, 0x22, 0x00, 0xad, 0x0c, 0x40, 0xe1, 0x86, 0x0c, 0x00, 0xe9, 0x90, - 0x0c, 0x00, 0xf5, 0x94, 0x0c, 0x40, 0x45, 0xc3, 0x0a, 0xee, 0x0c, 0x00, - 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0xef, 0x0c, 0x00, 0x43, 0xbf, 0x0a, 0xe7, - 0x0c, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xa1, 0x1d, 0xe6, 0x0c, 0x40, - 0x44, 0x25, 0x01, 0xe9, 0x0c, 0x00, 0x42, 0x15, 0x02, 0xe8, 0x0c, 0x40, - 0x44, 0x27, 0x1d, 0xed, 0x0c, 0x00, 0x42, 0x60, 0x25, 0xec, 0x0c, 0x40, - 0x43, 0xa7, 0x05, 0xeb, 0x0c, 0x00, 0x43, 0xcb, 0x06, 0xea, 0x0c, 0x40, - 0x44, 0xe2, 0xeb, 0x98, 0xf9, 0x01, 0x0b, 0x19, 0xa3, 0x01, 0xff, 0xa1, - 0x9b, 0x0b, 0xa2, 0xab, 0x0a, 0xa3, 0xd1, 0x09, 0xa4, 0xdf, 0x08, 0xa5, - 0x9e, 0x08, 0xa6, 0xc1, 0x07, 0xa7, 0x90, 0x07, 0xa8, 0xc1, 0x06, 0xa9, - 0xa9, 0x06, 0x02, 0xbd, 0x26, 0x9a, 0x06, 0x45, 0x7e, 0xa3, 0x11, 0x2f, - 0x00, 0xac, 0xca, 0x05, 0xad, 0xf9, 0x04, 0xae, 0xe3, 0x04, 0xaf, 0xbe, - 0x04, 0xb0, 0x9a, 0x04, 0xb2, 0xe1, 0x03, 0xb3, 0xdf, 0x01, 0xb4, 0x76, - 0x43, 0x1a, 0x03, 0x64, 0x2f, 0x00, 0xb6, 0x62, 0xb7, 0x06, 0x46, 0x04, - 0xd5, 0xc8, 0x2f, 0x40, 0xa1, 0x45, 0xa5, 0x37, 0xa8, 0x29, 0x02, 0x9e, - 0x01, 0x1d, 0xaf, 0x0f, 0xb2, 0x01, 0xff, 0x42, 0xba, 0x05, 0x13, 0x2f, - 0x00, 0x43, 0x63, 0x0e, 0xae, 0x2f, 0x40, 0x43, 0xd5, 0x17, 0x25, 0x2f, - 0x00, 0x42, 0xbb, 0x00, 0x2f, 0x2f, 0x40, 0xe4, 0xb5, 0x2f, 0x00, 0xe5, - 0xa3, 0x2f, 0x40, 0x43, 0x89, 0x00, 0xc6, 0x2f, 0x00, 0x43, 0xaf, 0x02, - 0x69, 0x2f, 0x40, 0x44, 0xd6, 0xeb, 0x4e, 0x2f, 0x00, 0x42, 0x60, 0x01, - 0x91, 0x2f, 0x40, 0x42, 0xf5, 0x59, 0xa1, 0x2f, 0x80, 0x06, 0x43, 0x8b, - 0x00, 0x54, 0x2f, 0x40, 0x4a, 0x20, 0x67, 0x8f, 0x2f, 0x40, 0x45, 0x1f, - 0xe1, 0x95, 0x2f, 0x00, 0x46, 0xe2, 0xd9, 0xa5, 0x2f, 0x40, 0xa1, 0x53, - 0x42, 0x92, 0x01, 0x17, 0x2f, 0x00, 0xa9, 0x3f, 0xaf, 0x31, 0xb2, 0x1d, - 0x02, 0x42, 0x00, 0x0d, 0x42, 0x15, 0x02, 0x06, 0x2f, 0xc0, 0x00, 0x46, - 0x2b, 0x0e, 0x36, 0x2f, 0x40, 0x43, 0xba, 0x15, 0x31, 0x2f, 0x00, 0x43, - 0xbd, 0x01, 0xd4, 0x2f, 0x40, 0x43, 0xe3, 0x02, 0x71, 0x2f, 0x00, 0x42, - 0x27, 0x01, 0x4a, 0x2f, 0x00, 0x44, 0x62, 0xed, 0xcd, 0x2f, 0x40, 0x44, - 0x36, 0x66, 0x86, 0x2f, 0x00, 0x43, 0x28, 0x0e, 0xd2, 0x2f, 0x40, 0x43, - 0x8c, 0x09, 0x8c, 0x2f, 0x00, 0x42, 0x68, 0x00, 0x61, 0x2f, 0x40, 0x43, - 0x3e, 0x01, 0x0f, 0x2f, 0x00, 0x42, 0x0f, 0x07, 0xbc, 0x2f, 0x00, 0x4c, - 0x01, 0x7f, 0xb1, 0x2f, 0x40, 0xa1, 0xec, 0x01, 0xa3, 0xdd, 0x01, 0xa5, - 0xc4, 0x01, 0xa8, 0x99, 0x01, 0xa9, 0x8a, 0x01, 0x43, 0x10, 0x04, 0x6a, - 0x2f, 0x00, 0xac, 0x6e, 0x44, 0x0d, 0x07, 0x29, 0x2f, 0x00, 0x44, 0x0a, - 0xad, 0x39, 0x2f, 0x00, 0x44, 0xf2, 0x0a, 0xb3, 0x2f, 0x00, 0xb0, 0x3a, - 0x45, 0xac, 0x05, 0x45, 0x2f, 0x00, 0xb4, 0x0c, 0x42, 0xf3, 0x0a, 0x47, - 0x2f, 0x00, 0x44, 0xed, 0x4e, 0x62, 0x2f, 0x40, 0x43, 0x1a, 0x00, 0x74, - 0x2f, 0x00, 0xa5, 0x14, 0xaf, 0x01, 0xff, 0x42, 0xa2, 0x05, 0x6f, 0x2f, - 0x00, 0xf0, 0x4c, 0x2f, 0xc0, 0x00, 0x44, 0x45, 0x2f, 0x89, 0x2f, 0x40, - 0x42, 0x57, 0x00, 0x53, 0x2f, 0x00, 0xf0, 0x3b, 0x2f, 0x40, 0xa5, 0x12, - 0x44, 0xe4, 0xbc, 0x70, 0x2f, 0x00, 0x43, 0x69, 0x05, 0x14, 0x2f, 0x00, - 0x44, 0x0e, 0xef, 0x2c, 0x2f, 0x40, 0x42, 0x17, 0x00, 0x6d, 0x2f, 0x00, - 0x43, 0x0a, 0x40, 0x94, 0x2f, 0x40, 0xa1, 0x06, 0x43, 0x6a, 0x1c, 0x5a, - 0x2f, 0x40, 0x42, 0xa4, 0x02, 0x03, 0x2f, 0x00, 0x42, 0x32, 0x00, 0xaa, - 0x2f, 0x40, 0x46, 0xc0, 0xd7, 0x67, 0x2f, 0x00, 0x42, 0xf5, 0x59, 0x77, - 0x2f, 0x40, 0xa5, 0x1a, 0xaf, 0x01, 0xff, 0x42, 0xf0, 0x04, 0x37, 0x2f, - 0x00, 0x04, 0x1e, 0xef, 0x01, 0xff, 0x4a, 0x45, 0xa5, 0xab, 0x2f, 0x00, - 0x45, 0xfd, 0x9b, 0x33, 0x2f, 0x40, 0x42, 0x9c, 0x0a, 0x7a, 0x2f, 0x00, - 0x42, 0x0f, 0x07, 0x99, 0x2f, 0x40, 0x42, 0x13, 0x00, 0x19, 0x2f, 0x00, - 0x44, 0x84, 0x7a, 0x04, 0x2f, 0x00, 0xe5, 0x92, 0x2f, 0x00, 0x42, 0x24, - 0x00, 0x83, 0x2f, 0x40, 0x45, 0x08, 0xe4, 0x20, 0x2f, 0x00, 0x44, 0x4b, - 0x06, 0x42, 0x2f, 0x40, 0x4e, 0x18, 0x75, 0xbf, 0x2f, 0x00, 0x42, 0x8d, - 0x04, 0xc4, 0x2f, 0x00, 0xf9, 0x48, 0x2f, 0x40, 0xa1, 0x26, 0x42, 0x05, - 0x00, 0x9a, 0x2f, 0x00, 0xa9, 0x0c, 0x43, 0x54, 0xc6, 0x27, 0x2f, 0x00, - 0x42, 0xf3, 0x0a, 0x9b, 0x2f, 0x40, 0x42, 0x73, 0x02, 0x76, 0x2f, 0x00, - 0x4c, 0x75, 0x3a, 0x15, 0x2f, 0x00, 0x43, 0x32, 0x00, 0x2e, 0x2f, 0x40, - 0x42, 0x9e, 0x01, 0xac, 0x2f, 0x00, 0xf0, 0x41, 0x2f, 0x00, 0xf4, 0xcf, - 0x2f, 0x40, 0x42, 0x3f, 0x00, 0x97, 0x2f, 0x00, 0x43, 0x13, 0x01, 0x7e, - 0x2f, 0x00, 0x44, 0x14, 0x01, 0x12, 0x2f, 0x00, 0xb2, 0x01, 0xff, 0x45, - 0xa0, 0xd3, 0x1b, 0x2f, 0x00, 0x46, 0xbc, 0xdb, 0x5e, 0x2f, 0x40, 0x42, - 0x5b, 0x1a, 0x7c, 0x2f, 0x00, 0x42, 0xa2, 0x05, 0x00, 0x2f, 0x80, 0x0f, - 0xb0, 0x01, 0xff, 0x46, 0xe8, 0x39, 0x10, 0x2f, 0x00, 0x44, 0xdc, 0x87, - 0x87, 0x2f, 0x40, 0x44, 0x42, 0xef, 0x30, 0x2f, 0x40, 0x42, 0xc2, 0x05, - 0x79, 0x2f, 0x00, 0xaf, 0x01, 0xff, 0x42, 0x1b, 0x03, 0xd0, 0x2f, 0x00, - 0xf4, 0x46, 0x2f, 0x40, 0x42, 0x1a, 0x00, 0x08, 0x2f, 0x00, 0xa5, 0x3a, - 0xa9, 0x2c, 0xaf, 0x01, 0xff, 0x42, 0x10, 0x00, 0x49, 0x2f, 0x00, 0xb2, - 0x15, 0xb5, 0x01, 0xff, 0xae, 0x06, 0x42, 0x53, 0x00, 0x1d, 0x2f, 0x40, - 0xe4, 0xa9, 0x2f, 0x00, 0x44, 0x04, 0x07, 0x2d, 0x2f, 0x40, 0x44, 0x07, - 0x07, 0xa0, 0x2f, 0x00, 0x43, 0xe3, 0x12, 0x85, 0x2f, 0x40, 0x44, 0x2c, - 0x21, 0xc9, 0x2f, 0x00, 0x46, 0x5c, 0xdb, 0x82, 0x2f, 0x40, 0x42, 0x8a, - 0x00, 0x81, 0x2f, 0x00, 0x43, 0x03, 0x12, 0x60, 0x2f, 0x40, 0xa1, 0x39, - 0xa5, 0x1f, 0xa9, 0x0d, 0x43, 0x63, 0x0e, 0xa7, 0x2f, 0xc0, 0x00, 0x47, - 0xd8, 0xca, 0x35, 0x2f, 0x40, 0xe4, 0x07, 0x2f, 0x00, 0x42, 0xa0, 0x19, - 0x63, 0x2f, 0x00, 0x42, 0xa2, 0x05, 0x01, 0x2f, 0x40, 0xa1, 0x0c, 0x42, - 0x69, 0x18, 0xb2, 0x2f, 0x00, 0x42, 0x6d, 0x11, 0x09, 0x2f, 0x40, 0xe6, - 0xb4, 0x2f, 0x00, 0x44, 0xa3, 0x19, 0xb0, 0x2f, 0x40, 0x42, 0x36, 0x01, - 0x4b, 0x2f, 0x00, 0x42, 0x2a, 0x02, 0x2a, 0x2f, 0x40, 0x42, 0x04, 0x00, - 0x5f, 0x2f, 0x00, 0xf2, 0x78, 0x2f, 0x40, 0x42, 0x73, 0x02, 0x0e, 0x2f, - 0x00, 0xae, 0x01, 0xff, 0x42, 0x1e, 0x14, 0x28, 0x2f, 0x00, 0x44, 0x5f, - 0x0a, 0x8d, 0x2f, 0x40, 0xa1, 0x30, 0xa5, 0x1c, 0x4f, 0xb2, 0x6c, 0x16, - 0x2f, 0x00, 0xaf, 0x01, 0xff, 0x42, 0x2a, 0x05, 0x05, 0x2f, 0x00, 0xb2, - 0x01, 0xff, 0xee, 0x93, 0x2f, 0x00, 0x42, 0x1b, 0x03, 0xba, 0x2f, 0x40, - 0xa1, 0x06, 0x42, 0x6b, 0x1b, 0xc7, 0x2f, 0x40, 0xe4, 0xb8, 0x2f, 0x00, - 0x42, 0x34, 0x00, 0x3c, 0x2f, 0x40, 0x42, 0x46, 0x00, 0xbd, 0x2f, 0x00, - 0xac, 0x06, 0x42, 0x1b, 0x00, 0x3f, 0x2f, 0x40, 0x44, 0x06, 0xec, 0x3d, - 0x2f, 0x00, 0x4c, 0x48, 0x74, 0x59, 0x2f, 0x40, 0x43, 0x8a, 0x00, 0xa8, - 0x2f, 0x00, 0x44, 0x5f, 0x7b, 0xc1, 0x2f, 0x00, 0xef, 0x21, 0x2f, 0x80, - 0x11, 0x02, 0x71, 0x00, 0x01, 0xff, 0x42, 0x9e, 0x01, 0x72, 0x2f, 0x00, - 0x42, 0xee, 0x00, 0x8b, 0x2f, 0x40, 0x47, 0xd1, 0xca, 0x22, 0x2f, 0x00, - 0x42, 0x5b, 0x1a, 0xa6, 0x2f, 0x40, 0xa1, 0x46, 0x46, 0xa1, 0x19, 0x7b, - 0x2f, 0x00, 0xa9, 0x26, 0xac, 0x1a, 0x43, 0x25, 0x6b, 0x9c, 0x2f, 0x00, - 0xb2, 0x06, 0x42, 0x42, 0x00, 0x51, 0x2f, 0x40, 0x46, 0xac, 0xd6, 0xb9, - 0x2f, 0x00, 0x42, 0x55, 0x18, 0xcc, 0x2f, 0x40, 0x43, 0x2b, 0x38, 0xd5, - 0x2f, 0x00, 0xf9, 0xb6, 0x2f, 0x40, 0x43, 0x7a, 0x23, 0x65, 0x2f, 0x00, - 0x43, 0xca, 0x00, 0xbe, 0x2f, 0x00, 0x42, 0x88, 0x00, 0x55, 0x2f, 0x00, - 0x42, 0xa4, 0x02, 0xc2, 0x2f, 0x40, 0x42, 0x73, 0x02, 0xaf, 0x2f, 0x00, - 0x42, 0x1d, 0x01, 0x5b, 0x2f, 0x00, 0x44, 0xa3, 0x19, 0x57, 0x2f, 0x40, - 0xa1, 0x2d, 0x44, 0xc9, 0x00, 0x0b, 0x2f, 0x00, 0x49, 0x94, 0xb9, 0xcb, - 0x2f, 0x00, 0xae, 0x13, 0x43, 0x28, 0x1d, 0xd1, 0x2f, 0x80, 0x06, 0x42, - 0x4d, 0x00, 0x6c, 0x2f, 0x40, 0x43, 0xa1, 0x01, 0x23, 0x2f, 0x40, 0x47, - 0x23, 0x67, 0x1e, 0x2f, 0x00, 0x43, 0x8b, 0x00, 0x0a, 0x2f, 0x40, 0xf2, - 0x7f, 0x2f, 0x80, 0x04, 0xf4, 0xb7, 0x2f, 0x40, 0x42, 0x53, 0x00, 0x1f, - 0x2f, 0x40, 0xa5, 0x61, 0xa9, 0x47, 0xaf, 0x13, 0xb2, 0x01, 0xff, 0x44, - 0x44, 0x25, 0xd3, 0x2f, 0x00, 0x42, 0x1d, 0x04, 0xce, 0x2f, 0x00, 0xf9, - 0x32, 0x2f, 0x40, 0x44, 0xee, 0x1c, 0x4f, 0x2f, 0x00, 0xe7, 0x5d, 0x2f, - 0x00, 0x42, 0x0c, 0x00, 0x3e, 0x2f, 0x00, 0xf4, 0x02, 0x2f, 0x80, 0x0c, - 0x46, 0xcc, 0xdd, 0x58, 0x2f, 0x00, 0x46, 0x38, 0xde, 0x0c, 0x2f, 0x40, - 0x04, 0x77, 0x00, 0x01, 0xff, 0x45, 0x46, 0xe2, 0x34, 0x2f, 0x00, 0x44, - 0x01, 0x60, 0x68, 0x2f, 0x40, 0x44, 0x6e, 0x02, 0x43, 0x2f, 0x00, 0xb3, - 0x06, 0x48, 0x6c, 0xb8, 0x18, 0x2f, 0x40, 0xe8, 0x6b, 0x2f, 0x00, 0x48, - 0x25, 0xa3, 0xa4, 0x2f, 0x40, 0x43, 0x25, 0x0f, 0x4d, 0x2f, 0x00, 0x42, - 0x33, 0x00, 0xc5, 0x2f, 0x40, 0xa1, 0x43, 0x44, 0xdf, 0x48, 0x26, 0x2f, - 0x00, 0x43, 0x17, 0x27, 0xa2, 0x2f, 0x00, 0xac, 0x1f, 0xaf, 0x01, 0xff, - 0x43, 0x5b, 0x08, 0x8a, 0x2f, 0x00, 0x45, 0xa7, 0xe5, 0x50, 0x2f, 0x00, - 0x44, 0x12, 0xef, 0x2b, 0x2f, 0x00, 0x43, 0x32, 0x00, 0x0d, 0x2f, 0x00, - 0xf7, 0x5c, 0x2f, 0x40, 0xa1, 0x0c, 0x43, 0x20, 0x47, 0x1a, 0x2f, 0x00, - 0x45, 0x8c, 0x86, 0x90, 0x2f, 0x40, 0xee, 0x52, 0x2f, 0x00, 0xf7, 0x56, - 0x2f, 0x40, 0x42, 0x34, 0x00, 0x9e, 0x2f, 0x00, 0x46, 0x76, 0xcc, 0xc0, - 0x2f, 0x00, 0x42, 0x32, 0x00, 0x73, 0x2f, 0x40, 0xa1, 0x5f, 0x43, 0x71, - 0x1e, 0x96, 0x2f, 0x00, 0xa9, 0x47, 0xac, 0x33, 0xaf, 0x15, 0xb2, 0x01, - 0xff, 0x44, 0x0b, 0x25, 0x40, 0x2f, 0x00, 0x45, 0x80, 0xe4, 0x3a, 0x2f, - 0x00, 0x43, 0xcf, 0x7a, 0x80, 0x2f, 0x40, 0x42, 0x8a, 0x00, 0x88, 0x2f, - 0x00, 0x42, 0xfd, 0x0c, 0x9d, 0x2f, 0x00, 0x4b, 0xd3, 0x9c, 0x66, 0x2f, - 0x00, 0x42, 0xa2, 0x05, 0xbb, 0x2f, 0x00, 0xf7, 0x38, 0x2f, 0x40, 0x43, - 0xe3, 0x02, 0xca, 0x2f, 0x00, 0x43, 0xfc, 0x2c, 0x8e, 0x2f, 0x00, 0x42, - 0x87, 0x13, 0xad, 0x2f, 0x40, 0xe7, 0x24, 0x2f, 0x00, 0x42, 0xab, 0x01, - 0xc3, 0x2f, 0x00, 0x44, 0xc3, 0x05, 0x9f, 0x2f, 0x40, 0x44, 0x52, 0xec, - 0x98, 0x2f, 0x00, 0x44, 0x9f, 0x96, 0x75, 0x2f, 0x40, 0x44, 0xf1, 0x49, - 0x1c, 0x2f, 0x00, 0x42, 0x1b, 0x00, 0x7d, 0x2f, 0x00, 0x02, 0xcf, 0x00, - 0x06, 0x42, 0x60, 0x42, 0x44, 0x2f, 0x40, 0x43, 0xa7, 0x05, 0x84, 0x2f, - 0x00, 0x42, 0xd1, 0x00, 0x6e, 0x2f, 0x40, 0xa5, 0x75, 0xa6, 0x58, 0x44, - 0x46, 0x2a, 0xc9, 0xd2, 0x81, 0x4b, 0x43, 0xbf, 0x0a, 0xc1, 0xd2, 0x01, - 0xb3, 0x29, 0xb4, 0x06, 0x44, 0xa1, 0x1d, 0xc0, 0xd2, 0x41, 0x42, 0x92, - 0x01, 0xca, 0xd2, 0x01, 0xa8, 0x0d, 0xb7, 0x01, 0xff, 0x44, 0x46, 0x2b, - 0xcc, 0xd2, 0x01, 0xef, 0xc2, 0xd2, 0x41, 0x46, 0x2b, 0x59, 0xcd, 0xd2, - 0x01, 0x43, 0x26, 0x01, 0xc3, 0xd2, 0x41, 0x44, 0x27, 0x1d, 0xc7, 0xd2, - 0x81, 0x0d, 0x42, 0x60, 0x25, 0xc6, 0xd2, 0xc1, 0x00, 0x44, 0x9e, 0x17, - 0xd0, 0xd2, 0x41, 0x44, 0x9e, 0x17, 0xd1, 0xd2, 0x41, 0x44, 0x9e, 0x17, - 0xd3, 0xd2, 0x41, 0xa9, 0x0d, 0x43, 0xcb, 0x06, 0xc4, 0xd2, 0xc1, 0x00, - 0x44, 0x9e, 0x17, 0xce, 0xd2, 0x41, 0x45, 0x9d, 0x17, 0xcf, 0xd2, 0x01, - 0x42, 0x32, 0x00, 0xc5, 0xd2, 0x41, 0x44, 0xc9, 0x00, 0xc8, 0xd2, 0x81, - 0x06, 0x45, 0x0b, 0x6e, 0xcb, 0xd2, 0x41, 0x43, 0x75, 0x09, 0xd2, 0xd2, - 0x41, 0x51, 0x93, 0x56, 0xbb, 0x10, 0x01, 0xa4, 0x80, 0x03, 0x50, 0x5a, - 0x61, 0xbc, 0x10, 0x01, 0x07, 0xc1, 0x05, 0x70, 0x4b, 0x12, 0x9e, 0xbd, - 0x10, 0x81, 0x63, 0xb3, 0x33, 0x0b, 0xd1, 0x75, 0x01, 0xff, 0xa1, 0x20, - 0xe5, 0xb5, 0x10, 0x01, 0xe9, 0xb1, 0x10, 0x81, 0x13, 0xef, 0xb7, 0x10, - 0x01, 0xf5, 0xb3, 0x10, 0x81, 0x06, 0x49, 0x9b, 0xbe, 0xc2, 0x10, 0x41, - 0xf5, 0xb4, 0x10, 0x41, 0xe9, 0xb2, 0x10, 0x41, 0xe1, 0xb0, 0x10, 0x01, - 0xe9, 0xb6, 0x10, 0x01, 0xf5, 0xb8, 0x10, 0x41, 0x4b, 0x58, 0x26, 0xbe, - 0x10, 0x01, 0x04, 0x30, 0x03, 0x01, 0xff, 0x48, 0xd0, 0x15, 0x81, 0x10, - 0x01, 0x4b, 0x4f, 0x23, 0x80, 0x10, 0x01, 0x45, 0x5a, 0x3e, 0xba, 0x10, - 0x01, 0x02, 0x02, 0x00, 0x01, 0xff, 0x44, 0x5d, 0x23, 0xb9, 0x10, 0x01, - 0x45, 0xa3, 0x4a, 0x82, 0x10, 0x41, 0x46, 0x5b, 0x00, 0xcd, 0x10, 0x41, - 0xe1, 0x83, 0x10, 0x81, 0xf4, 0x01, 0xa2, 0xe7, 0x01, 0xa3, 0xda, 0x01, - 0xa4, 0xbb, 0x01, 0xe5, 0x89, 0x10, 0x01, 0xa7, 0xaa, 0x01, 0x42, 0x22, - 0x00, 0xaf, 0x10, 0x01, 0xe9, 0x85, 0x10, 0x81, 0x9a, 0x01, 0xaa, 0x8d, - 0x01, 0xab, 0x80, 0x01, 0x42, 0x74, 0x00, 0xaa, 0x10, 0x01, 0x42, 0x6c, - 0x00, 0xa7, 0x10, 0x01, 0xae, 0x5c, 0xef, 0x8b, 0x10, 0x01, 0xb0, 0x4c, - 0xb2, 0x40, 0xb3, 0x2e, 0xb4, 0x15, 0xf5, 0x87, 0x10, 0x81, 0x0c, 0x42, - 0xa6, 0x0a, 0xab, 0x10, 0x01, 0x42, 0x34, 0x22, 0xa8, 0x10, 0x41, 0xf5, - 0x88, 0x10, 0x41, 0xe1, 0x9e, 0x10, 0x01, 0x42, 0x22, 0x00, 0x9f, 0x10, - 0x01, 0xb4, 0x01, 0xff, 0xe1, 0x97, 0x10, 0x01, 0x42, 0x22, 0x00, 0x98, - 0x10, 0x41, 0xe1, 0xae, 0x10, 0x01, 0x42, 0x22, 0x00, 0xac, 0x10, 0x01, - 0x42, 0x15, 0x06, 0xad, 0x10, 0x41, 0xe1, 0xa9, 0x10, 0x01, 0x42, 0x22, - 0x00, 0x9c, 0x10, 0x41, 0xe1, 0xa3, 0x10, 0x01, 0x42, 0x22, 0x00, 0xa4, - 0x10, 0x41, 0xe1, 0xa2, 0x10, 0x01, 0x42, 0x24, 0x02, 0x91, 0x10, 0x01, - 0x42, 0xff, 0x04, 0x9d, 0x10, 0x01, 0x42, 0x34, 0x22, 0x96, 0x10, 0x41, - 0xe1, 0x8d, 0x10, 0x01, 0x42, 0x22, 0x00, 0x8e, 0x10, 0x41, 0xe1, 0x94, - 0x10, 0x01, 0x42, 0x22, 0x00, 0x95, 0x10, 0x41, 0xe9, 0x86, 0x10, 0x41, - 0xe1, 0x8f, 0x10, 0x01, 0x42, 0x22, 0x00, 0x90, 0x10, 0x41, 0xe1, 0xa0, - 0x10, 0x01, 0xa4, 0x06, 0x42, 0x22, 0x00, 0xa1, 0x10, 0x41, 0xe1, 0x99, - 0x10, 0x01, 0x43, 0x9e, 0x4a, 0x9a, 0x10, 0x01, 0x42, 0x22, 0x00, 0x9b, - 0x10, 0x41, 0xe1, 0x92, 0x10, 0x01, 0x42, 0x22, 0x00, 0x93, 0x10, 0x41, - 0xe1, 0xa5, 0x10, 0x01, 0x42, 0x22, 0x00, 0xa6, 0x10, 0x41, 0xe1, 0x84, - 0x10, 0x01, 0xe9, 0x8a, 0x10, 0x01, 0xf5, 0x8c, 0x10, 0x41, 0x44, 0xd1, - 0x1f, 0xc0, 0x10, 0x01, 0x06, 0x3c, 0x01, 0x01, 0xff, 0x45, 0x34, 0x94, - 0xc1, 0x10, 0x01, 0x4c, 0x57, 0x26, 0xbf, 0x10, 0x41, 0xa1, 0x37, 0xa5, - 0x29, 0x52, 0x5c, 0x51, 0xe9, 0xf9, 0x01, 0xaf, 0x15, 0xb5, 0x01, 0xff, - 0x46, 0x04, 0xd9, 0x39, 0xf9, 0x01, 0x42, 0xb4, 0x01, 0xb5, 0x26, 0x00, - 0x45, 0xc4, 0xe6, 0x43, 0x26, 0x40, 0x42, 0x9e, 0x01, 0x1d, 0x2a, 0x00, - 0x46, 0x7a, 0xde, 0x79, 0xf5, 0x41, 0x43, 0x0d, 0x45, 0x56, 0xf4, 0x01, - 0x47, 0x26, 0xd0, 0xbc, 0xfa, 0x41, 0x4c, 0xb1, 0x8b, 0x83, 0xf3, 0x01, - 0x07, 0xa7, 0xd1, 0x83, 0x05, 0xf2, 0xd9, 0xfa, 0x01, 0x07, 0x47, 0xd4, - 0x01, 0xff, 0x0f, 0x6d, 0x32, 0xe3, 0x04, 0x06, 0xc4, 0x06, 0x9c, 0x04, - 0x02, 0x68, 0x00, 0xdb, 0x01, 0x02, 0x6c, 0x09, 0x70, 0x4f, 0xf9, 0x70, - 0xc2, 0xa9, 0x00, 0x05, 0x2f, 0x03, 0x47, 0x53, 0x83, 0x4c, 0xcd, 0xa9, - 0x00, 0x0b, 0xd1, 0x75, 0x01, 0xff, 0x4a, 0x1b, 0xa7, 0xbb, 0xa9, 0x00, - 0x45, 0xba, 0xe6, 0xbc, 0xa9, 0x00, 0x44, 0x3d, 0xd3, 0xb8, 0xa9, 0x80, - 0x23, 0xb4, 0x0d, 0x44, 0xde, 0xef, 0xb6, 0xa9, 0xc0, 0x00, 0x46, 0x56, - 0xd5, 0xb7, 0xa9, 0x40, 0xa1, 0x06, 0x45, 0x02, 0x12, 0xb5, 0xa9, 0x40, - 0x44, 0xe0, 0x0a, 0xba, 0xa9, 0x00, 0x44, 0xad, 0xe8, 0xb4, 0xa9, 0x40, - 0x47, 0x92, 0xca, 0xb9, 0xa9, 0x40, 0x45, 0x00, 0xe2, 0x81, 0xa9, 0x80, - 0x12, 0x45, 0x07, 0xe5, 0x82, 0xa9, 0x00, 0x49, 0x83, 0xbb, 0x80, 0xa9, - 0x00, 0x47, 0xb0, 0xd4, 0x83, 0xa9, 0x40, 0x45, 0xd6, 0xde, 0xb3, 0xa9, - 0x40, 0x03, 0xf2, 0x19, 0x11, 0x02, 0x1d, 0x01, 0x01, 0xff, 0x43, 0x78, - 0x6e, 0xc0, 0xa9, 0x00, 0x47, 0x4f, 0xd2, 0xcf, 0xa9, 0x40, 0xa1, 0x3d, - 0x49, 0x50, 0xb8, 0xdf, 0xa9, 0x00, 0xac, 0x20, 0x45, 0x4d, 0xe5, 0xc4, - 0xa9, 0x00, 0xb0, 0x0c, 0x4d, 0x7b, 0x87, 0xde, 0xa9, 0x00, 0x45, 0x26, - 0xe9, 0xc6, 0xa9, 0x40, 0x46, 0xd0, 0xd6, 0xc7, 0xa9, 0x00, 0x46, 0x90, - 0x4c, 0xcc, 0xa9, 0x40, 0x45, 0x62, 0xe4, 0xc8, 0xa9, 0x00, 0xb5, 0x01, - 0xff, 0x43, 0x41, 0x00, 0xc5, 0xa9, 0x00, 0x44, 0x8d, 0x71, 0xc9, 0xa9, - 0x40, 0x43, 0x36, 0x11, 0xca, 0xa9, 0x80, 0x06, 0x44, 0x26, 0xee, 0xc3, - 0xa9, 0x40, 0x45, 0x4d, 0xb3, 0xcb, 0xa9, 0x40, 0x4c, 0x6d, 0x8d, 0xc1, - 0xa9, 0x00, 0x05, 0xc3, 0x05, 0x01, 0xff, 0xe1, 0x84, 0xa9, 0x80, 0xa7, - 0x02, 0x42, 0x16, 0x00, 0xa7, 0xa9, 0x80, 0x99, 0x02, 0x42, 0x37, 0x00, - 0x95, 0xa9, 0x80, 0x8b, 0x02, 0xa4, 0xf0, 0x01, 0xe5, 0x8c, 0xa9, 0x00, - 0x42, 0x24, 0x02, 0x92, 0xa9, 0x80, 0xde, 0x01, 0x42, 0x22, 0x00, 0xb2, - 0xa9, 0x00, 0xe9, 0x86, 0xa9, 0x80, 0xc8, 0x01, 0x42, 0xbd, 0x26, 0x97, - 0xa9, 0x80, 0xba, 0x01, 0x42, 0x1b, 0x02, 0x8f, 0xa9, 0x80, 0xa3, 0x01, - 0x42, 0x74, 0x00, 0xad, 0xa9, 0x00, 0x42, 0x6c, 0x00, 0xa9, 0xa9, 0x00, - 0xae, 0x69, 0xef, 0x8e, 0xa9, 0x00, 0x42, 0x6c, 0x09, 0xa5, 0xa9, 0x80, - 0x4f, 0x42, 0x71, 0x00, 0xab, 0xa9, 0x80, 0x42, 0x42, 0x15, 0x06, 0xb1, - 0xa9, 0x80, 0x2a, 0xb4, 0x10, 0xf5, 0x88, 0xa9, 0x00, 0x42, 0xa9, 0x01, - 0xae, 0xa9, 0x00, 0x42, 0x34, 0x22, 0xaa, 0xa9, 0x40, 0xe1, 0xa0, 0xa9, - 0x80, 0x0d, 0x42, 0x12, 0x00, 0x9b, 0xa9, 0xc0, 0x00, 0x4a, 0xb5, 0x6e, - 0x9c, 0xa9, 0x40, 0x46, 0x5c, 0xd5, 0xa1, 0xa9, 0x40, 0x02, 0x6b, 0x00, - 0x01, 0xff, 0x48, 0xb7, 0x6e, 0xb0, 0xa9, 0x00, 0x44, 0xb1, 0x6e, 0xaf, - 0xa9, 0x40, 0x46, 0x20, 0xd5, 0xac, 0xa9, 0x40, 0x80, 0x01, 0xff, 0x45, - 0x0a, 0xe2, 0x89, 0xa9, 0x00, 0x45, 0xb0, 0x6e, 0xa6, 0xa9, 0x40, 0xe1, - 0xa4, 0xa9, 0x80, 0x21, 0x42, 0x24, 0x02, 0x94, 0xa9, 0x80, 0x0d, 0x42, - 0x34, 0x22, 0x9a, 0xa9, 0xc0, 0x00, 0x46, 0x5c, 0xd5, 0x98, 0xa9, 0x40, - 0x46, 0x4a, 0xd5, 0x8a, 0xa9, 0xc0, 0x00, 0x48, 0xfa, 0xbf, 0x8b, 0xa9, - 0x40, 0x46, 0x5c, 0xd5, 0x9f, 0xa9, 0x40, 0x80, 0x01, 0xff, 0x45, 0xb0, - 0x6e, 0x91, 0xa9, 0x00, 0x45, 0xee, 0xa0, 0x90, 0xa9, 0x40, 0x4a, 0xb5, - 0x6e, 0x99, 0xa9, 0x40, 0x45, 0xbd, 0xde, 0x85, 0xa9, 0x00, 0xe9, 0x87, - 0xa9, 0x40, 0x46, 0x5c, 0xd5, 0x93, 0xa9, 0x40, 0xe1, 0xa2, 0xa9, 0x80, - 0x0d, 0x42, 0xa1, 0x10, 0x9d, 0xa9, 0xc0, 0x00, 0x4a, 0xb5, 0x6e, 0x9e, - 0xa9, 0x40, 0x4a, 0xb5, 0x6e, 0xa3, 0xa9, 0x40, 0x46, 0x5c, 0xd5, 0x96, - 0xa9, 0x40, 0x46, 0x5c, 0xd5, 0xa8, 0xa9, 0x40, 0xe9, 0x8d, 0xa9, 0x40, - 0x45, 0xc3, 0x0a, 0xd8, 0xa9, 0x00, 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0xd9, - 0xa9, 0x00, 0x43, 0xbf, 0x0a, 0xd1, 0xa9, 0x00, 0xb3, 0x14, 0xb4, 0x06, - 0x44, 0xa1, 0x1d, 0xd0, 0xa9, 0x40, 0x44, 0x25, 0x01, 0xd3, 0xa9, 0x00, - 0x42, 0x15, 0x02, 0xd2, 0xa9, 0x40, 0x44, 0x27, 0x1d, 0xd7, 0xa9, 0x00, - 0x42, 0x60, 0x25, 0xd6, 0xa9, 0x40, 0x43, 0xa7, 0x05, 0xd5, 0xa9, 0x00, - 0x43, 0xcb, 0x06, 0xd4, 0xa9, 0x40, 0x45, 0xdd, 0xe1, 0xbf, 0xa9, 0x00, - 0x45, 0xb7, 0xe4, 0xbd, 0xa9, 0x00, 0x47, 0xd8, 0xd1, 0xbe, 0xa9, 0x40, - 0x4b, 0x74, 0x97, 0xfb, 0x26, 0x00, 0x46, 0x78, 0xd7, 0xef, 0xf3, 0x01, - 0x45, 0x15, 0xb8, 0x8e, 0xf3, 0x01, 0x46, 0x2e, 0xd9, 0x7a, 0xf4, 0x01, - 0x5a, 0xc4, 0x1f, 0x04, 0x30, 0x00, 0x44, 0x96, 0xd2, 0x79, 0xf4, 0x01, - 0x4b, 0x3b, 0x9f, 0xe3, 0xf3, 0x01, 0x53, 0x11, 0x4c, 0x30, 0xf5, 0x41, - 0x53, 0x5a, 0x46, 0x1f, 0xf9, 0x01, 0x03, 0xe3, 0x07, 0xd7, 0x14, 0x02, - 0x04, 0x00, 0xb6, 0x0d, 0xad, 0xc7, 0x0b, 0xae, 0x06, 0x4e, 0xa0, 0x7d, - 0xee, 0xf3, 0x41, 0x48, 0xca, 0xc1, 0xe5, 0xf4, 0x01, 0xa3, 0x8b, 0x0b, - 0xa4, 0xf5, 0x06, 0xa6, 0xb2, 0x06, 0x06, 0x82, 0xd9, 0xa1, 0x06, 0x0f, - 0x63, 0x70, 0xfa, 0x05, 0xb3, 0xdb, 0x02, 0x02, 0x77, 0x00, 0x9a, 0x01, - 0xb6, 0x01, 0xff, 0x02, 0x33, 0x00, 0x17, 0x07, 0x31, 0xcf, 0x01, 0xff, - 0x44, 0xb7, 0x27, 0x64, 0x20, 0x00, 0x49, 0x36, 0x20, 0x63, 0x20, 0x00, - 0x45, 0x28, 0x02, 0x62, 0x20, 0x40, 0x03, 0x16, 0x04, 0x3e, 0x04, 0x77, - 0x00, 0x01, 0xff, 0x50, 0xad, 0x00, 0xa1, 0x00, 0x00, 0x4b, 0xb3, 0x15, - 0x18, 0x2e, 0x00, 0xac, 0x18, 0x48, 0x7a, 0xc6, 0x27, 0x21, 0x00, 0x49, - 0x10, 0x1b, 0xe7, 0x26, 0x00, 0x4d, 0xd6, 0x33, 0xbf, 0x00, 0x00, 0x48, - 0x62, 0xc9, 0x54, 0x20, 0x40, 0x45, 0x34, 0x6d, 0x3e, 0x22, 0x00, 0x49, - 0x56, 0xbb, 0x45, 0x2e, 0xc0, 0x00, 0x52, 0x9e, 0x4e, 0x46, 0x2e, 0x40, - 0xa2, 0x22, 0x05, 0x1e, 0x14, 0x12, 0x62, 0xe5, 0x0b, 0xb4, 0xfb, 0x01, - 0x4c, 0x19, 0x04, 0x90, 0xfb, 0x01, 0x4c, 0xe3, 0x10, 0xd9, 0x25, 0x40, - 0x45, 0xb8, 0x00, 0xb1, 0xfb, 0x01, 0x4d, 0x08, 0x81, 0x96, 0xfb, 0x41, - 0x05, 0xe2, 0x02, 0x06, 0x45, 0x2b, 0x21, 0xd8, 0x25, 0x40, 0x47, 0x88, - 0x43, 0x8d, 0xcc, 0x01, 0x4c, 0x37, 0x0a, 0x8f, 0xcc, 0x41, 0x44, 0xf7, - 0x25, 0x2b, 0x22, 0x80, 0x6a, 0xb2, 0x01, 0xff, 0x46, 0x72, 0xd7, 0xba, - 0x22, 0x00, 0x4b, 0xd3, 0x3a, 0x3c, 0x2a, 0x00, 0xac, 0x3d, 0x46, 0xb8, - 0x15, 0x3d, 0x20, 0x00, 0x47, 0x5f, 0x0a, 0x29, 0x22, 0xc0, 0x00, 0x80, - 0x01, 0xff, 0x06, 0x5c, 0x00, 0x1d, 0x63, 0x43, 0x0a, 0x4b, 0x2a, 0x00, - 0x05, 0x51, 0x00, 0x01, 0xff, 0x43, 0xd4, 0x09, 0x40, 0x2a, 0x00, 0x4b, - 0x4a, 0x2f, 0x44, 0x2a, 0x00, 0x47, 0x77, 0x7e, 0x43, 0x2a, 0x40, 0x4f, - 0x79, 0x69, 0x49, 0x2a, 0x00, 0x45, 0xe1, 0x16, 0x47, 0x2a, 0x40, 0x11, - 0xa1, 0x59, 0x06, 0x5a, 0xae, 0x20, 0xa4, 0x26, 0x40, 0x46, 0xca, 0xd6, - 0xf9, 0xff, 0x00, 0x49, 0x36, 0x20, 0xfa, 0xff, 0x00, 0x4a, 0x99, 0x84, - 0xfb, 0xff, 0x40, 0x80, 0x01, 0xff, 0xa1, 0x3a, 0x49, 0x56, 0x57, 0xae, - 0x23, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x4d, 0xa0, 0x80, 0x0e, 0x2a, - 0x00, 0x4c, 0x5a, 0x0a, 0x19, 0x2a, 0x00, 0x59, 0x10, 0x24, 0x17, 0x2a, - 0x00, 0x47, 0x77, 0x7e, 0x1b, 0x2a, 0x00, 0x4a, 0x9f, 0xaf, 0x18, 0x2a, - 0x00, 0x02, 0xf3, 0x0a, 0x01, 0xff, 0x46, 0x7a, 0x58, 0x1c, 0x2a, 0x00, - 0x43, 0xb5, 0x00, 0x1a, 0x2a, 0x40, 0x56, 0x1f, 0x36, 0x15, 0x2a, 0x00, - 0x51, 0xd0, 0x5d, 0x0f, 0x2a, 0x40, 0x0d, 0x11, 0x80, 0x06, 0x4d, 0x15, - 0x81, 0x80, 0x23, 0x40, 0x06, 0x6b, 0x71, 0xd3, 0x01, 0x07, 0xaa, 0xd2, - 0x01, 0xff, 0x07, 0xc1, 0x05, 0x3d, 0x07, 0x2f, 0x39, 0x01, 0xff, 0x44, - 0xca, 0x06, 0x5b, 0x0b, 0x01, 0x43, 0xbf, 0x0a, 0x58, 0x0b, 0x81, 0x1c, - 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0x5c, 0x0b, 0x01, 0x44, 0x25, 0x01, - 0x5a, 0x0b, 0x01, 0xb7, 0x01, 0xff, 0x44, 0x29, 0x1d, 0x5d, 0x0b, 0x01, - 0xef, 0x59, 0x0b, 0x41, 0x80, 0x01, 0xff, 0x47, 0x22, 0x11, 0x5e, 0x0b, - 0x01, 0x48, 0xd5, 0x5c, 0x5f, 0x0b, 0x41, 0xa1, 0x7f, 0x44, 0x0a, 0xec, - 0x41, 0x0b, 0x01, 0x46, 0xda, 0x48, 0x43, 0x0b, 0x01, 0x45, 0xa1, 0xa8, - 0x42, 0x0b, 0x01, 0x42, 0xb0, 0x01, 0x44, 0x0b, 0x81, 0x60, 0x44, 0x8e, - 0xed, 0x4a, 0x0b, 0x01, 0x46, 0x9c, 0xda, 0x4b, 0x0b, 0x01, 0x43, 0x89, - 0x05, 0x4c, 0x0b, 0x01, 0x43, 0x54, 0x22, 0x4d, 0x0b, 0x01, 0x42, 0x6f, - 0x02, 0x50, 0x0b, 0x01, 0x44, 0xae, 0xc5, 0x52, 0x0b, 0x01, 0x44, 0xfa, - 0x64, 0x53, 0x0b, 0x01, 0xb3, 0x20, 0xb4, 0x12, 0x43, 0xc0, 0x88, 0x45, - 0x0b, 0x01, 0x44, 0x58, 0x51, 0x49, 0x0b, 0x01, 0x45, 0x52, 0x51, 0x46, - 0x0b, 0x41, 0x42, 0x9a, 0x43, 0x55, 0x0b, 0x01, 0x43, 0x39, 0x25, 0x48, - 0x0b, 0x41, 0xa1, 0x06, 0x43, 0x0e, 0x16, 0x54, 0x0b, 0x41, 0x43, 0x89, - 0xe7, 0x51, 0x0b, 0x01, 0x44, 0x39, 0xe1, 0x4e, 0x0b, 0x41, 0x42, 0x53, - 0x00, 0x47, 0x0b, 0x41, 0x44, 0x48, 0x3c, 0x40, 0x0b, 0x01, 0x43, 0xf7, - 0x19, 0x4f, 0x0b, 0x41, 0x07, 0xc1, 0x05, 0x3d, 0x07, 0x2f, 0x39, 0x01, - 0xff, 0x44, 0xca, 0x06, 0x7b, 0x0b, 0x01, 0x43, 0xbf, 0x0a, 0x78, 0x0b, - 0x81, 0x1c, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0x7c, 0x0b, 0x01, 0x44, - 0x25, 0x01, 0x7a, 0x0b, 0x01, 0xb7, 0x01, 0xff, 0x44, 0x29, 0x1d, 0x7d, - 0x0b, 0x01, 0xef, 0x79, 0x0b, 0x41, 0x80, 0x01, 0xff, 0x47, 0x22, 0x11, - 0x7e, 0x0b, 0x01, 0x48, 0xd5, 0x5c, 0x7f, 0x0b, 0x41, 0x45, 0x58, 0xab, - 0x60, 0x0b, 0x01, 0x44, 0x0a, 0xec, 0x61, 0x0b, 0x01, 0x46, 0xda, 0x48, - 0x63, 0x0b, 0x01, 0x45, 0xa1, 0xa8, 0x62, 0x0b, 0x01, 0x42, 0xb0, 0x01, - 0x64, 0x0b, 0x81, 0x54, 0x44, 0x8e, 0xed, 0x6a, 0x0b, 0x01, 0x46, 0x9c, - 0xda, 0x6b, 0x0b, 0x01, 0x48, 0xaa, 0xc5, 0x6c, 0x0b, 0x01, 0x43, 0x54, - 0x22, 0x6d, 0x0b, 0x01, 0x42, 0x6f, 0x02, 0x6f, 0x0b, 0x01, 0xb3, 0x20, - 0xb4, 0x12, 0x4d, 0xc0, 0x88, 0x65, 0x0b, 0x01, 0x44, 0x58, 0x51, 0x69, - 0x0b, 0x01, 0x45, 0x52, 0x51, 0x66, 0x0b, 0x41, 0x42, 0x9a, 0x43, 0x72, - 0x0b, 0x01, 0x43, 0x39, 0x25, 0x68, 0x0b, 0x41, 0xa1, 0x06, 0x43, 0x0e, - 0x16, 0x71, 0x0b, 0x41, 0x43, 0x89, 0xe7, 0x70, 0x0b, 0x01, 0x44, 0x39, - 0xe1, 0x6e, 0x0b, 0x41, 0x42, 0x53, 0x00, 0x67, 0x0b, 0x41, 0x06, 0xb3, - 0x05, 0x0c, 0x47, 0xc7, 0xd0, 0x22, 0xf5, 0x01, 0x47, 0xeb, 0x07, 0x23, - 0xf5, 0x41, 0x4f, 0x00, 0x6a, 0x20, 0xf5, 0x01, 0x47, 0x08, 0x6a, 0x24, - 0xf5, 0x01, 0x4d, 0x13, 0x87, 0x21, 0xf5, 0x41, 0x53, 0xf2, 0x46, 0x6c, - 0x20, 0x00, 0x52, 0x50, 0x54, 0x6a, 0x20, 0x40, 0x45, 0xfa, 0x6a, 0x1e, - 0x22, 0x80, 0x33, 0x09, 0x4c, 0x5b, 0x01, 0xff, 0x4b, 0xd4, 0x98, 0x81, - 0xf4, 0x01, 0xb3, 0x01, 0xff, 0x09, 0x37, 0x20, 0x06, 0x45, 0x56, 0x5b, - 0x39, 0x21, 0x40, 0x44, 0xca, 0x06, 0x1c, 0x00, 0x00, 0x43, 0xbf, 0x0a, - 0x1f, 0x00, 0x00, 0xb4, 0x01, 0xff, 0x44, 0x25, 0x01, 0x1d, 0x00, 0x00, - 0x42, 0x15, 0x02, 0x1e, 0x00, 0x40, 0x5a, 0xf0, 0x1d, 0xde, 0x29, 0x40, - 0x42, 0xad, 0x00, 0x84, 0x00, 0x80, 0x85, 0x04, 0xa9, 0x01, 0xff, 0x4d, - 0xf3, 0x7e, 0xb9, 0x20, 0x00, 0x08, 0xe2, 0xc1, 0x01, 0xff, 0x53, 0xb9, - 0x46, 0xb4, 0xec, 0x01, 0x09, 0xb3, 0x58, 0xd6, 0x03, 0x49, 0xc3, 0x46, - 0xa0, 0xec, 0x01, 0x07, 0x2f, 0x39, 0x0c, 0x4b, 0x3a, 0x64, 0xac, 0xec, - 0x01, 0x4a, 0x69, 0xae, 0xb0, 0xec, 0x41, 0x0a, 0xa2, 0x11, 0xa6, 0x03, - 0x45, 0xc3, 0x0a, 0x78, 0xec, 0x81, 0x85, 0x03, 0xa6, 0xb7, 0x02, 0x45, - 0xad, 0xe4, 0xa1, 0xec, 0x81, 0xa9, 0x02, 0x44, 0xc3, 0x46, 0x9e, 0xec, - 0x81, 0x9b, 0x02, 0x44, 0x46, 0x2a, 0x79, 0xec, 0x81, 0xf8, 0x01, 0x43, - 0xbf, 0x0a, 0x71, 0xec, 0x81, 0xe1, 0x01, 0x09, 0xe1, 0x4a, 0x9f, 0x01, - 0xb3, 0x59, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0x7a, 0xec, 0x81, 0x49, - 0xa8, 0x24, 0xb7, 0x01, 0xff, 0x44, 0x29, 0x1d, 0x7b, 0xec, 0x81, 0x14, - 0xef, 0x72, 0xec, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x47, 0x22, 0x11, 0x84, - 0xec, 0x01, 0x48, 0xd5, 0x5c, 0x8d, 0xec, 0x41, 0x49, 0xd4, 0x5c, 0x96, - 0xec, 0x41, 0x44, 0x2c, 0x11, 0x7c, 0xec, 0x81, 0x16, 0x43, 0x26, 0x01, - 0x73, 0xec, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x47, 0x22, 0x11, 0x85, 0xec, - 0x01, 0x48, 0xd5, 0x5c, 0x8e, 0xec, 0x41, 0x49, 0xd4, 0x5c, 0x97, 0xec, - 0x41, 0x49, 0xd4, 0x5c, 0x95, 0xec, 0x41, 0x44, 0x27, 0x1d, 0x77, 0xec, - 0x81, 0x22, 0x42, 0x60, 0x25, 0x76, 0xec, 0xc1, 0x00, 0x80, 0x0d, 0x42, - 0x2e, 0x11, 0x7f, 0xec, 0xc1, 0x00, 0x49, 0xd4, 0x5c, 0x9a, 0xec, 0x41, - 0x47, 0x22, 0x11, 0x88, 0xec, 0x01, 0x48, 0xd5, 0x5c, 0x91, 0xec, 0x41, - 0x80, 0x0d, 0x42, 0x2e, 0x11, 0x80, 0xec, 0xc1, 0x00, 0x49, 0xd4, 0x5c, - 0x9b, 0xec, 0x41, 0x47, 0x22, 0x11, 0x89, 0xec, 0x01, 0x48, 0xd5, 0x5c, - 0x92, 0xec, 0x41, 0x45, 0xc3, 0x0a, 0xaa, 0xec, 0x01, 0xa6, 0x29, 0x44, - 0x46, 0x2a, 0xab, 0xec, 0x01, 0x43, 0xbf, 0x0a, 0xa3, 0xec, 0x01, 0xb3, - 0x0f, 0xb4, 0x01, 0xff, 0x44, 0x25, 0x01, 0xa5, 0xec, 0x01, 0x42, 0x15, - 0x02, 0xa4, 0xec, 0x41, 0x44, 0x27, 0x1d, 0xa9, 0xec, 0x01, 0x42, 0x60, - 0x25, 0xa8, 0xec, 0x41, 0x43, 0xa7, 0x05, 0xa7, 0xec, 0x01, 0x43, 0xcb, - 0x06, 0xa6, 0xec, 0x41, 0x80, 0x01, 0xff, 0x47, 0x22, 0x11, 0x83, 0xec, - 0x01, 0x48, 0xd5, 0x5c, 0x8c, 0xec, 0x41, 0x80, 0x0d, 0x42, 0x2e, 0x11, - 0x82, 0xec, 0xc1, 0x00, 0x49, 0xd4, 0x5c, 0x9d, 0xec, 0x41, 0x47, 0x22, - 0x11, 0x8b, 0xec, 0x01, 0x48, 0xd5, 0x5c, 0x94, 0xec, 0x41, 0x42, 0x1a, - 0x00, 0x9f, 0xec, 0x41, 0x42, 0x1a, 0x00, 0xa2, 0xec, 0x41, 0xa9, 0x26, - 0xaf, 0x01, 0xff, 0x43, 0x2d, 0x11, 0x7d, 0xec, 0x81, 0x16, 0x42, 0x42, - 0x00, 0x74, 0xec, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x47, 0x22, 0x11, 0x86, - 0xec, 0x01, 0x48, 0xd5, 0x5c, 0x8f, 0xec, 0x41, 0x49, 0xd4, 0x5c, 0x98, - 0xec, 0x41, 0x43, 0x09, 0x4c, 0x7e, 0xec, 0x81, 0x16, 0x42, 0x32, 0x00, - 0x75, 0xec, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x47, 0x22, 0x11, 0x87, 0xec, - 0x01, 0x48, 0xd5, 0x5c, 0x90, 0xec, 0x41, 0x49, 0xd4, 0x5c, 0x99, 0xec, - 0x41, 0x80, 0x0b, 0xf9, 0x81, 0xec, 0xc1, 0x00, 0x49, 0xd4, 0x5c, 0x9c, - 0xec, 0x41, 0x47, 0x22, 0x11, 0x8a, 0xec, 0x01, 0x48, 0xd5, 0x5c, 0x93, - 0xec, 0x41, 0x43, 0xbf, 0x0a, 0xb1, 0xec, 0x01, 0xb4, 0x01, 0xff, 0x4b, - 0xd2, 0x5c, 0xb3, 0xec, 0x01, 0x42, 0x15, 0x02, 0xb2, 0xec, 0x41, 0x04, - 0xbf, 0x0a, 0x06, 0x4e, 0x24, 0x01, 0xaf, 0xec, 0x41, 0x44, 0x22, 0x00, - 0xae, 0xec, 0x01, 0x47, 0x2a, 0x01, 0xad, 0xec, 0x41, 0x57, 0xeb, 0x2b, - 0xf5, 0xfa, 0x41, 0x02, 0xe9, 0x04, 0x1b, 0x02, 0x88, 0x00, 0x01, 0xff, - 0x03, 0xca, 0x34, 0x06, 0x44, 0x01, 0x05, 0x06, 0x22, 0x40, 0x51, 0xcc, - 0x35, 0xda, 0xf5, 0x01, 0x44, 0xcc, 0x03, 0xe1, 0x29, 0x40, 0x4c, 0x5d, - 0x8e, 0xe8, 0xf4, 0x01, 0x4e, 0xcc, 0x79, 0xdc, 0x29, 0x40, 0x46, 0x15, - 0x42, 0xb7, 0x22, 0x80, 0xde, 0x01, 0xf0, 0x7f, 0xf4, 0xc1, 0x00, 0x0e, - 0x06, 0x76, 0x01, 0xff, 0x07, 0xc1, 0x05, 0x43, 0x07, 0x2f, 0x39, 0x06, - 0x4c, 0x49, 0x93, 0x57, 0x08, 0x41, 0x43, 0xbf, 0x0a, 0x58, 0x08, 0x81, - 0x23, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0x5b, 0x08, 0x81, 0x13, 0x44, - 0x25, 0x01, 0x5a, 0x08, 0x01, 0xb7, 0x01, 0xff, 0x44, 0x29, 0x1d, 0x5c, - 0x08, 0x01, 0xef, 0x59, 0x08, 0x41, 0x49, 0xd4, 0x5c, 0x5f, 0x08, 0x41, - 0x80, 0x01, 0xff, 0x47, 0x22, 0x11, 0x5d, 0x08, 0x01, 0x48, 0xd5, 0x5c, - 0x5e, 0x08, 0x41, 0xa1, 0x7f, 0x44, 0x0a, 0xec, 0x41, 0x08, 0x01, 0x46, - 0xda, 0x48, 0x43, 0x08, 0x01, 0x45, 0xa1, 0xa8, 0x42, 0x08, 0x01, 0x42, - 0xb0, 0x01, 0x44, 0x08, 0x81, 0x60, 0x44, 0x8e, 0xed, 0x4a, 0x08, 0x01, - 0x46, 0x9c, 0xda, 0x4b, 0x08, 0x01, 0x43, 0x89, 0x05, 0x4c, 0x08, 0x01, - 0x43, 0x54, 0x22, 0x4d, 0x08, 0x01, 0x42, 0x6f, 0x02, 0x50, 0x08, 0x01, - 0x44, 0xae, 0xc5, 0x52, 0x08, 0x01, 0x44, 0xfa, 0x64, 0x53, 0x08, 0x01, - 0xb3, 0x20, 0xb4, 0x12, 0x43, 0xc0, 0x88, 0x45, 0x08, 0x01, 0x44, 0x58, - 0x51, 0x49, 0x08, 0x01, 0x45, 0x52, 0x51, 0x46, 0x08, 0x41, 0x42, 0x9a, - 0x43, 0x55, 0x08, 0x01, 0x43, 0x39, 0x25, 0x48, 0x08, 0x41, 0xa1, 0x06, - 0x43, 0x0e, 0x16, 0x54, 0x08, 0x41, 0x43, 0x89, 0xe7, 0x51, 0x08, 0x01, - 0x44, 0x39, 0xe1, 0x4e, 0x08, 0x41, 0x42, 0x53, 0x00, 0x47, 0x08, 0x41, - 0x44, 0x48, 0x3c, 0x40, 0x08, 0x01, 0x43, 0xf7, 0x19, 0x4f, 0x08, 0x41, - 0x5a, 0x0a, 0x1e, 0x53, 0x22, 0x40, 0x03, 0x9f, 0x01, 0xfa, 0x06, 0x09, - 0xad, 0x1f, 0x01, 0xff, 0x0b, 0xa7, 0x59, 0x82, 0x06, 0xa3, 0xf3, 0x05, - 0x02, 0x04, 0x00, 0xdf, 0x04, 0x52, 0xf4, 0x4f, 0x2d, 0x30, 0x00, 0x49, - 0x15, 0x16, 0x02, 0x30, 0x00, 0x4f, 0x2b, 0x6c, 0x3f, 0x30, 0x00, 0x4e, - 0xb6, 0x1f, 0x05, 0x30, 0x00, 0x4f, 0xfc, 0x6d, 0x2a, 0x30, 0x00, 0x4b, - 0x1d, 0x9e, 0x07, 0x30, 0x00, 0x50, 0x4a, 0x65, 0x2b, 0x30, 0x00, 0x45, - 0x87, 0x4b, 0x00, 0x30, 0x00, 0xb4, 0x06, 0x53, 0x41, 0x4d, 0x3e, 0x30, - 0x40, 0x0a, 0x77, 0xa5, 0xff, 0x03, 0x09, 0xf5, 0xb5, 0x01, 0xff, 0x5a, - 0x2c, 0x20, 0x37, 0x30, 0x00, 0x0b, 0xd1, 0x20, 0x01, 0xff, 0xa1, 0xe0, - 0x03, 0xa4, 0xf3, 0x01, 0x48, 0x8a, 0xc3, 0xc1, 0x32, 0x00, 0x05, 0x59, - 0xd1, 0x37, 0xaa, 0x20, 0x02, 0x6c, 0x00, 0x12, 0x48, 0x42, 0xc6, 0xca, - 0x32, 0x00, 0x47, 0xdc, 0xd0, 0xc9, 0x32, 0x00, 0x49, 0xb5, 0xbc, 0xc8, - 0x32, 0x40, 0x43, 0x1e, 0x40, 0xc2, 0x32, 0x00, 0xf9, 0xc4, 0x32, 0x40, - 0x46, 0xdc, 0xd6, 0xc0, 0x32, 0x00, 0xb5, 0x01, 0xff, 0x42, 0x26, 0x0b, - 0xc6, 0x32, 0x00, 0x42, 0xa2, 0x05, 0xc5, 0x32, 0x40, 0xa5, 0x9c, 0x01, - 0xa6, 0x7f, 0x44, 0x46, 0x2a, 0x61, 0x33, 0x80, 0x72, 0x43, 0xbf, 0x0a, - 0x59, 0x33, 0x00, 0xb3, 0x50, 0xb4, 0x06, 0x44, 0xa1, 0x1d, 0x58, 0x33, - 0x40, 0x42, 0x92, 0x01, 0x62, 0x33, 0x00, 0xa8, 0x34, 0xb7, 0x01, 0xff, - 0xa5, 0x04, 0xef, 0x5a, 0x33, 0x40, 0x43, 0x47, 0x2b, 0x64, 0x33, 0x00, - 0x43, 0x2a, 0x1d, 0x6c, 0x33, 0xc0, 0x00, 0x8d, 0x01, 0xff, 0x44, 0xca, - 0x06, 0x70, 0x33, 0x00, 0x43, 0xbf, 0x0a, 0x6d, 0x33, 0x00, 0xb4, 0x01, - 0xff, 0x44, 0x25, 0x01, 0x6f, 0x33, 0x00, 0x42, 0x15, 0x02, 0x6e, 0x33, - 0x40, 0x46, 0x2b, 0x59, 0x65, 0x33, 0x00, 0x43, 0x26, 0x01, 0x5b, 0x33, - 0x40, 0x44, 0x27, 0x1d, 0x5f, 0x33, 0x80, 0x0d, 0x42, 0x60, 0x25, 0x5e, - 0x33, 0xc0, 0x00, 0x44, 0x9e, 0x17, 0x68, 0x33, 0x40, 0x44, 0x9e, 0x17, - 0x69, 0x33, 0x40, 0x44, 0x9e, 0x17, 0x6b, 0x33, 0x40, 0xa9, 0x0d, 0x43, - 0xcb, 0x06, 0x5c, 0x33, 0xc0, 0x00, 0x44, 0x9e, 0x17, 0x66, 0x33, 0x40, - 0x45, 0x9d, 0x17, 0x67, 0x33, 0x00, 0x42, 0x32, 0x00, 0x5d, 0x33, 0x40, - 0x44, 0xc9, 0x00, 0x60, 0x33, 0x80, 0x06, 0x45, 0x0b, 0x6e, 0x63, 0x33, - 0x40, 0x43, 0x75, 0x09, 0x6a, 0x33, 0x40, 0x03, 0x63, 0x1f, 0x06, 0x47, - 0xd3, 0xcd, 0xcb, 0x32, 0x40, 0xa5, 0xca, 0x01, 0xa6, 0xac, 0x01, 0x44, - 0x46, 0x2a, 0xe8, 0x33, 0x80, 0x9e, 0x01, 0x43, 0xbf, 0x0a, 0xe0, 0x33, - 0x00, 0xb3, 0x7c, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0xe9, 0x33, 0x00, - 0xa8, 0x56, 0xb7, 0x01, 0xff, 0xa5, 0x04, 0xef, 0xe1, 0x33, 0x40, 0x43, - 0x47, 0x2b, 0xeb, 0x33, 0x00, 0x43, 0x2a, 0x1d, 0xf3, 0x33, 0xc0, 0x00, - 0x8d, 0x01, 0xff, 0x45, 0xc3, 0x0a, 0xfb, 0x33, 0x00, 0xa6, 0x29, 0x44, - 0x46, 0x2a, 0xfc, 0x33, 0x00, 0x43, 0xbf, 0x0a, 0xf4, 0x33, 0x00, 0xb3, - 0x0f, 0xb4, 0x01, 0xff, 0x44, 0x25, 0x01, 0xf6, 0x33, 0x00, 0x42, 0x15, - 0x02, 0xf5, 0x33, 0x40, 0x44, 0x27, 0x1d, 0xfa, 0x33, 0x00, 0x42, 0x60, - 0x25, 0xf9, 0x33, 0x40, 0x43, 0xa7, 0x05, 0xf8, 0x33, 0x00, 0x43, 0xcb, - 0x06, 0xf7, 0x33, 0x40, 0x03, 0x2c, 0x11, 0x06, 0x43, 0x26, 0x01, 0xe2, - 0x33, 0x40, 0x43, 0x75, 0x09, 0xec, 0x33, 0x00, 0xf9, 0xfd, 0x33, 0xc0, - 0x00, 0x44, 0xc5, 0xba, 0xfe, 0x33, 0x40, 0x44, 0x27, 0x1d, 0xe6, 0x33, - 0x80, 0x0d, 0x42, 0x60, 0x25, 0xe5, 0x33, 0xc0, 0x00, 0x44, 0x9e, 0x17, - 0xef, 0x33, 0x40, 0x44, 0x9e, 0x17, 0xf0, 0x33, 0x40, 0x44, 0x9e, 0x17, - 0xf2, 0x33, 0x40, 0xa9, 0x0d, 0x43, 0xcb, 0x06, 0xe3, 0x33, 0xc0, 0x00, - 0x44, 0x9e, 0x17, 0xed, 0x33, 0x40, 0x45, 0x9d, 0x17, 0xee, 0x33, 0x00, - 0x42, 0x32, 0x00, 0xe4, 0x33, 0x40, 0x44, 0xc9, 0x00, 0xe7, 0x33, 0x80, - 0x06, 0x45, 0x0b, 0x6e, 0xea, 0x33, 0x40, 0x43, 0x75, 0x09, 0xf1, 0x33, - 0x40, 0x44, 0xde, 0xee, 0xc3, 0x32, 0x00, 0x45, 0x9f, 0xe8, 0xc7, 0x32, - 0x40, 0xa6, 0x15, 0x43, 0xbf, 0x0a, 0x72, 0xd3, 0x01, 0xb4, 0x01, 0xff, - 0x44, 0x25, 0x01, 0x74, 0xd3, 0x01, 0x42, 0x15, 0x02, 0x73, 0xd3, 0x41, - 0x43, 0xa7, 0x05, 0x76, 0xd3, 0x01, 0x43, 0xcb, 0x06, 0x75, 0xd3, 0x41, - 0x51, 0x7b, 0x2c, 0x2c, 0x30, 0x00, 0x14, 0x7f, 0x44, 0x01, 0xff, 0x09, - 0x2e, 0xb3, 0x74, 0x4d, 0x97, 0x81, 0xf4, 0x2f, 0x00, 0x55, 0xf3, 0x3a, - 0xfe, 0x2f, 0x00, 0x08, 0x84, 0x02, 0x58, 0x48, 0xec, 0x0d, 0xfb, 0x2f, - 0x00, 0x48, 0xf1, 0x5e, 0xff, 0x2f, 0x00, 0x02, 0x6f, 0x00, 0x01, 0xff, - 0x49, 0x96, 0xb4, 0xef, 0x31, 0x00, 0x0c, 0x19, 0x93, 0x01, 0xff, 0x45, - 0x5c, 0x00, 0xf5, 0x2f, 0x00, 0x45, 0xf5, 0x06, 0xf6, 0x2f, 0x00, 0xac, - 0x17, 0x45, 0xc8, 0x00, 0xfc, 0x2f, 0x00, 0x06, 0x6d, 0x02, 0x01, 0xff, - 0x44, 0xc3, 0x00, 0xf8, 0x2f, 0x00, 0x45, 0xc8, 0x00, 0xf9, 0x2f, 0x40, - 0x43, 0xc4, 0x00, 0xf7, 0x2f, 0x00, 0x05, 0x14, 0x01, 0x01, 0xff, 0x44, - 0xc3, 0x00, 0xfa, 0x2f, 0x00, 0x45, 0xc8, 0x00, 0xfd, 0x2f, 0x40, 0x50, - 0xaa, 0x63, 0xf2, 0x2f, 0x00, 0x45, 0xc8, 0x00, 0xf0, 0x2f, 0x40, 0x45, - 0xf5, 0x06, 0xf1, 0x2f, 0x00, 0x50, 0x9a, 0x63, 0xf3, 0x2f, 0x40, 0x4b, - 0xbd, 0x9c, 0x06, 0x30, 0x00, 0x44, 0xe9, 0x04, 0x01, 0x30, 0x40, 0x4b, - 0xa0, 0x97, 0x98, 0x31, 0x00, 0x4a, 0x4d, 0xa7, 0x9e, 0x31, 0x00, 0xa6, - 0x49, 0x4b, 0xad, 0x9a, 0x9d, 0x31, 0x00, 0x4c, 0x95, 0x8f, 0x90, 0x31, - 0x00, 0xad, 0x2f, 0x48, 0x84, 0x2c, 0x92, 0x31, 0x00, 0x4c, 0x95, 0x92, - 0x91, 0x31, 0x00, 0x4b, 0x59, 0xa0, 0x9a, 0x31, 0x00, 0xb4, 0x01, 0xff, - 0xa8, 0x0c, 0x47, 0x29, 0xd1, 0x96, 0x31, 0x00, 0x47, 0xbe, 0xd4, 0x93, - 0x31, 0x40, 0x48, 0x8a, 0xc4, 0x9b, 0x31, 0x00, 0x48, 0xaa, 0xc7, 0x94, - 0x31, 0x40, 0x47, 0xfe, 0xcb, 0x9f, 0x31, 0x00, 0x4a, 0x37, 0xa9, 0x97, - 0x31, 0x40, 0x49, 0x47, 0xb8, 0x99, 0x31, 0x00, 0x03, 0xcb, 0x06, 0x01, - 0xff, 0x45, 0xb8, 0x00, 0x95, 0x31, 0x00, 0x47, 0x76, 0x38, 0x9c, 0x31, - 0x40, 0x04, 0x37, 0x00, 0x06, 0x4d, 0x3c, 0x81, 0xaa, 0xfa, 0x41, 0x42, - 0x1e, 0x00, 0x61, 0x22, 0x80, 0x06, 0x4e, 0xa6, 0x3a, 0x67, 0x2a, 0x40, - 0x55, 0xab, 0x37, 0xe5, 0x29, 0x40, 0xa3, 0x0c, 0x55, 0xde, 0x3a, 0xd2, - 0xf3, 0x01, 0x45, 0xdc, 0xe7, 0xf8, 0x26, 0x40, 0x44, 0x4b, 0x60, 0x68, - 0xf3, 0x01, 0x43, 0xce, 0x3f, 0xca, 0xf9, 0x41, 0xa1, 0xdc, 0x25, 0xa5, - 0xe2, 0x07, 0xa9, 0xcf, 0x03, 0xaf, 0x5c, 0x4b, 0x4e, 0xa0, 0xb4, 0x20, - 0x00, 0xb5, 0x3e, 0xb9, 0x01, 0xff, 0x46, 0x8e, 0xd6, 0xbb, 0xfa, 0x01, - 0x44, 0xc2, 0xec, 0xda, 0x2b, 0x00, 0xb0, 0x06, 0x4f, 0xe9, 0x71, 0x8e, - 0x23, 0x40, 0x43, 0xb0, 0x01, 0x10, 0x20, 0x80, 0x06, 0x49, 0x75, 0xba, - 0x12, 0x2e, 0x40, 0x80, 0x0c, 0x46, 0x1b, 0x8e, 0x2d, 0x00, 0x00, 0x4b, - 0x53, 0x97, 0x27, 0x20, 0x40, 0x46, 0x2a, 0x21, 0x43, 0x20, 0x00, 0x4e, - 0x7b, 0x68, 0x1a, 0x2e, 0x40, 0x4a, 0x83, 0xa8, 0x17, 0xf9, 0x01, 0x53, - 0x23, 0x4a, 0xaf, 0xf4, 0x01, 0x49, 0x84, 0x91, 0x2f, 0xf6, 0x01, 0xf4, - 0xd6, 0xf6, 0x41, 0x43, 0xdb, 0x29, 0x2a, 0xf5, 0x01, 0xac, 0xd7, 0x02, - 0x48, 0x98, 0x78, 0x3b, 0x22, 0x00, 0x03, 0xfc, 0x27, 0xc0, 0x02, 0x42, - 0x2a, 0x05, 0x9d, 0xfa, 0x01, 0xb2, 0x53, 0x46, 0xfa, 0xdc, 0xe5, 0xf3, - 0x01, 0xb4, 0x2b, 0xb5, 0x01, 0xff, 0x46, 0x2c, 0xd4, 0x1b, 0x23, 0x80, - 0x1b, 0x42, 0x1b, 0x03, 0x02, 0x23, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x48, - 0xe3, 0x3c, 0xe0, 0xf3, 0x81, 0x06, 0x4b, 0xed, 0xa2, 0xe1, 0xf3, 0x41, - 0xf3, 0xd8, 0xf3, 0x41, 0x52, 0x8c, 0x4e, 0xf3, 0x23, 0x40, 0x80, 0x06, - 0x42, 0xd8, 0x00, 0xe8, 0xf3, 0x41, 0x48, 0x82, 0xc1, 0x15, 0x26, 0x00, - 0x43, 0xf9, 0xd7, 0x2d, 0xf3, 0x01, 0x46, 0x1c, 0xdc, 0x36, 0xf3, 0x01, - 0x47, 0x28, 0xd3, 0x68, 0x26, 0x40, 0x08, 0x0e, 0x00, 0x16, 0x42, 0x1b, - 0x03, 0x0e, 0xf4, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x44, 0xe1, 0x07, 0x34, - 0xf4, 0x01, 0x46, 0x64, 0xdc, 0xc7, 0xf3, 0x41, 0xa2, 0xb1, 0x01, 0x49, - 0xa8, 0xb4, 0x13, 0xcc, 0x01, 0x48, 0x45, 0x29, 0x26, 0x20, 0x00, 0xac, - 0x78, 0x55, 0x04, 0x3c, 0xa9, 0x26, 0x00, 0x11, 0x6c, 0x5b, 0x50, 0xb2, - 0x42, 0x0a, 0x7d, 0xae, 0x2e, 0xb4, 0x06, 0x4b, 0x45, 0xa3, 0xb0, 0xce, - 0x41, 0x02, 0x5c, 0x00, 0x06, 0x4c, 0x4d, 0x92, 0xa5, 0xf6, 0x41, 0x44, - 0x9c, 0x44, 0x7e, 0x2b, 0x00, 0x47, 0x16, 0x3b, 0x09, 0x00, 0xc0, 0x00, - 0x80, 0x01, 0xff, 0x43, 0x4d, 0x12, 0x88, 0x00, 0x00, 0x52, 0x5e, 0x55, - 0x89, 0x00, 0x40, 0xd1, 0xba, 0x23, 0x00, 0xd3, 0xbb, 0x23, 0x00, 0xd7, - 0xbc, 0x23, 0x00, 0xd9, 0xbd, 0x23, 0x40, 0x49, 0x40, 0xb3, 0x9b, 0xcc, - 0x01, 0x4f, 0x3b, 0x6b, 0x09, 0xcc, 0x41, 0x44, 0x12, 0xea, 0x81, 0xfb, - 0x01, 0xd2, 0x76, 0xfb, 0x01, 0xd3, 0x77, 0xfb, 0x01, 0xd4, 0x78, 0xfb, - 0x01, 0xd5, 0x79, 0xfb, 0x01, 0xd6, 0x7a, 0xfb, 0x01, 0xd7, 0x7b, 0xfb, - 0x41, 0x45, 0xfc, 0xe0, 0x85, 0xcc, 0x01, 0x04, 0xc3, 0x07, 0x01, 0xff, - 0x49, 0x56, 0x57, 0xaf, 0x23, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x4f, - 0xb3, 0x6b, 0x91, 0xcc, 0x01, 0xb4, 0x01, 0xff, 0x4f, 0xcd, 0x07, 0x12, - 0xce, 0x01, 0x48, 0xd3, 0x07, 0x0f, 0xce, 0x41, 0x42, 0x17, 0x00, 0x15, - 0x20, 0x00, 0x05, 0xe2, 0x02, 0x01, 0xff, 0x47, 0xb3, 0xce, 0x23, 0x2b, - 0x00, 0x47, 0xce, 0xd0, 0xc3, 0x2b, 0x40, 0x44, 0xf1, 0x4e, 0x6f, 0xf3, - 0x01, 0x43, 0x3c, 0xb4, 0x1d, 0xf4, 0x41, 0xe5, 0x73, 0xf5, 0x01, 0x59, - 0x29, 0x24, 0x68, 0xf6, 0xc1, 0x00, 0x50, 0xef, 0x10, 0x69, 0xf6, 0x41, - 0x46, 0x42, 0xd7, 0x3a, 0xf3, 0x01, 0x02, 0x40, 0x00, 0xe1, 0x03, 0x49, - 0xa1, 0xb8, 0x7e, 0xf9, 0x01, 0x4a, 0xfd, 0xab, 0xd5, 0xf6, 0x01, 0x4a, - 0x6f, 0xad, 0x9b, 0xf9, 0x01, 0x07, 0xf9, 0x11, 0x06, 0x4b, 0xd2, 0xa0, - 0xec, 0x26, 0x40, 0x4c, 0x4d, 0x8c, 0x9f, 0x30, 0x00, 0x4e, 0xb6, 0x1f, - 0x9d, 0x30, 0x00, 0x07, 0xc1, 0x05, 0x06, 0x55, 0x11, 0x3e, 0x9e, 0x30, - 0x40, 0xe1, 0x42, 0x30, 0x80, 0x98, 0x03, 0xa2, 0x81, 0x03, 0xa4, 0xea, - 0x02, 0xe5, 0x48, 0x30, 0x00, 0xa7, 0xcf, 0x02, 0xa8, 0xb8, 0x02, 0xe9, - 0x44, 0x30, 0x00, 0xab, 0x9d, 0x02, 0xad, 0x86, 0x02, 0xee, 0x93, 0x30, - 0x80, 0xec, 0x01, 0xef, 0x4a, 0x30, 0x00, 0xb0, 0xd1, 0x01, 0xb2, 0xba, - 0x01, 0xb3, 0x57, 0xb4, 0x41, 0xf5, 0x46, 0x30, 0x00, 0x42, 0xeb, 0x60, - 0x94, 0x30, 0x00, 0xb7, 0x25, 0xb9, 0x17, 0xba, 0x01, 0xff, 0xe1, 0x56, - 0x30, 0x00, 0xe5, 0x5c, 0x30, 0x00, 0xe9, 0x58, 0x30, 0x00, 0xef, 0x5e, - 0x30, 0x00, 0xf5, 0x5a, 0x30, 0x40, 0xe1, 0x84, 0x30, 0x00, 0xef, 0x88, - 0x30, 0x00, 0xf5, 0x86, 0x30, 0x40, 0xe1, 0x8f, 0x30, 0x00, 0xe5, 0x91, - 0x30, 0x00, 0xe9, 0x90, 0x30, 0x00, 0xef, 0x92, 0x30, 0x40, 0xe1, 0x5f, - 0x30, 0x00, 0xe5, 0x66, 0x30, 0x00, 0xe9, 0x61, 0x30, 0x00, 0xef, 0x68, - 0x30, 0x00, 0xf5, 0x64, 0x30, 0x40, 0xe1, 0x55, 0x30, 0x00, 0xe5, 0x5b, - 0x30, 0x00, 0xe9, 0x57, 0x30, 0x00, 0x05, 0x0d, 0x07, 0x08, 0xef, 0x5d, - 0x30, 0x00, 0xf5, 0x59, 0x30, 0x40, 0xe1, 0x41, 0x30, 0x00, 0xe5, 0x47, - 0x30, 0x00, 0xe9, 0x43, 0x30, 0x00, 0xab, 0x2f, 0xef, 0x49, 0x30, 0x00, - 0x42, 0x5c, 0x01, 0x63, 0x30, 0x00, 0xf5, 0x45, 0x30, 0x00, 0xb7, 0x0f, - 0xb9, 0x01, 0xff, 0xe1, 0x83, 0x30, 0x00, 0xef, 0x87, 0x30, 0x00, 0xf5, - 0x85, 0x30, 0x40, 0xe1, 0x8e, 0x30, 0x00, 0xe5, 0x51, 0xb1, 0x01, 0xe9, - 0x50, 0xb1, 0x01, 0xef, 0x52, 0xb1, 0x41, 0xe1, 0x95, 0x30, 0x00, 0xe5, - 0x96, 0x30, 0x00, 0xef, 0x32, 0xb1, 0x41, 0xe1, 0x89, 0x30, 0x00, 0xe5, - 0x8c, 0x30, 0x00, 0xe9, 0x8a, 0x30, 0x00, 0xef, 0x8d, 0x30, 0x00, 0xf5, - 0x8b, 0x30, 0x40, 0xe1, 0x71, 0x30, 0x00, 0xe5, 0x7a, 0x30, 0x00, 0xe9, - 0x74, 0x30, 0x00, 0xef, 0x7d, 0x30, 0x00, 0xf5, 0x77, 0x30, 0x40, 0xe1, - 0x6a, 0x30, 0x00, 0xe5, 0x6d, 0x30, 0x00, 0xe9, 0x6b, 0x30, 0x00, 0xef, - 0x6e, 0x30, 0x00, 0xf5, 0x6c, 0x30, 0x40, 0xe1, 0x7e, 0x30, 0x00, 0xe5, - 0x81, 0x30, 0x00, 0xe9, 0x7f, 0x30, 0x00, 0xef, 0x82, 0x30, 0x00, 0xf5, - 0x80, 0x30, 0x40, 0xe1, 0x4b, 0x30, 0x00, 0xe5, 0x51, 0x30, 0x00, 0xe9, - 0x4d, 0x30, 0x00, 0xef, 0x53, 0x30, 0x00, 0xf5, 0x4f, 0x30, 0x40, 0xe1, - 0x6f, 0x30, 0x00, 0xe5, 0x78, 0x30, 0x00, 0xe9, 0x72, 0x30, 0x00, 0xef, - 0x7b, 0x30, 0x00, 0xf5, 0x75, 0x30, 0x40, 0xe1, 0x4c, 0x30, 0x00, 0xe5, - 0x52, 0x30, 0x00, 0xe9, 0x4e, 0x30, 0x00, 0xef, 0x54, 0x30, 0x00, 0xf5, - 0x50, 0x30, 0x40, 0xe1, 0x60, 0x30, 0x00, 0xe5, 0x67, 0x30, 0x00, 0xe9, - 0x62, 0x30, 0x00, 0xef, 0x69, 0x30, 0x00, 0xf5, 0x65, 0x30, 0x40, 0xe1, - 0x70, 0x30, 0x00, 0xe5, 0x79, 0x30, 0x00, 0xe9, 0x73, 0x30, 0x00, 0xef, - 0x7c, 0x30, 0x00, 0xf5, 0x76, 0x30, 0x40, 0x07, 0x28, 0x7f, 0x01, 0xff, - 0x42, 0x45, 0x07, 0x1f, 0xb1, 0x01, 0x42, 0x4d, 0x00, 0x01, 0xb0, 0x41, - 0x80, 0x16, 0x8d, 0x01, 0xff, 0x4b, 0xb8, 0x9a, 0x60, 0xf4, 0x01, 0x4b, - 0x9b, 0xa0, 0x84, 0xf6, 0xc1, 0x00, 0x51, 0x1c, 0x56, 0x85, 0xf6, 0x41, - 0x51, 0x5f, 0x57, 0x06, 0xf5, 0x01, 0x4c, 0xed, 0x94, 0xa1, 0x26, 0x40, - 0xa1, 0x83, 0x17, 0x05, 0xc9, 0xe1, 0x8f, 0x0f, 0x46, 0x02, 0xd8, 0x94, - 0xf9, 0x01, 0xac, 0xeb, 0x0e, 0x10, 0xda, 0x63, 0xf0, 0x03, 0xb2, 0xe3, - 0x03, 0x0b, 0x03, 0xa3, 0x01, 0xff, 0xa1, 0xc9, 0x03, 0xa2, 0xb4, 0x03, - 0x02, 0xe8, 0x04, 0x9a, 0x03, 0xa4, 0xe9, 0x02, 0x4a, 0xc5, 0xa7, 0xcf, - 0x4d, 0x00, 0xa6, 0xd4, 0x02, 0xa7, 0xa1, 0x02, 0x50, 0x0a, 0x62, 0xc7, - 0x4d, 0x00, 0x02, 0x9e, 0x01, 0xfb, 0x01, 0x4a, 0xc7, 0xaa, 0xfb, 0x4d, - 0x00, 0x02, 0x98, 0x07, 0xe4, 0x01, 0xaf, 0xca, 0x01, 0xb0, 0xb5, 0x01, - 0x02, 0x88, 0x00, 0x9c, 0x01, 0xb3, 0x7e, 0xb4, 0x14, 0xb7, 0x06, 0x4e, - 0x84, 0x7d, 0xc3, 0x4d, 0x40, 0x46, 0x27, 0x87, 0xc4, 0x4d, 0x00, 0x52, - 0xd6, 0x52, 0xd1, 0x4d, 0x40, 0x03, 0x76, 0x0b, 0x06, 0x47, 0xac, 0x11, - 0xc9, 0x4d, 0x40, 0xa1, 0x47, 0xa3, 0x33, 0x46, 0xc8, 0xd8, 0xe4, 0x4d, - 0x00, 0x4b, 0x3f, 0x9a, 0xf8, 0x4d, 0x00, 0x4b, 0xcb, 0x9b, 0xf9, 0x4d, - 0x00, 0x56, 0x25, 0x34, 0xf3, 0x4d, 0x00, 0x4f, 0x83, 0x6e, 0xf5, 0x4d, - 0x00, 0x4f, 0xae, 0x70, 0xc1, 0x4d, 0x00, 0xb7, 0x01, 0xff, 0x47, 0x0c, - 0xcc, 0xf7, 0x4d, 0x00, 0x43, 0x10, 0x09, 0xef, 0x4d, 0x40, 0x47, 0x75, - 0xcc, 0xf1, 0x4d, 0x00, 0x4c, 0x89, 0x8f, 0xdd, 0x4d, 0x00, 0x4e, 0x20, - 0x7a, 0xc0, 0x4d, 0x40, 0x4c, 0x51, 0x8b, 0xdc, 0x4d, 0x00, 0xb2, 0x01, - 0xff, 0x42, 0x38, 0x57, 0xc6, 0x4d, 0x00, 0x4e, 0x78, 0x79, 0xf2, 0x4d, - 0x40, 0x05, 0x0d, 0x07, 0x0c, 0x4e, 0xda, 0x79, 0xd6, 0x4d, 0x00, 0x49, - 0x33, 0xbd, 0xcb, 0x4d, 0x40, 0x4d, 0xdb, 0x85, 0xfd, 0x4d, 0x00, 0x46, - 0x54, 0xdd, 0xc8, 0x4d, 0x40, 0xb4, 0x06, 0x48, 0x9a, 0xc9, 0xf0, 0x4d, - 0x40, 0x44, 0x88, 0x00, 0xe0, 0x4d, 0x00, 0x43, 0x5d, 0x01, 0xd7, 0x4d, - 0x40, 0x44, 0x91, 0xa2, 0xca, 0x4d, 0x00, 0x47, 0x95, 0xd2, 0xe2, 0x4d, - 0x00, 0x4d, 0x17, 0x88, 0xed, 0x4d, 0x40, 0x4a, 0x2b, 0xa6, 0xe6, 0x4d, - 0x00, 0x02, 0x6e, 0x02, 0x01, 0xff, 0x47, 0xa1, 0x16, 0xe5, 0x4d, 0x00, - 0x47, 0x0a, 0x65, 0xee, 0x4d, 0x40, 0x45, 0x82, 0xe2, 0xce, 0x4d, 0x00, - 0x4b, 0x53, 0xa2, 0xda, 0x4d, 0x40, 0x46, 0xd8, 0xd7, 0xe9, 0x4d, 0x00, - 0x47, 0x51, 0xce, 0xde, 0x4d, 0x00, 0xae, 0x01, 0xff, 0x48, 0x22, 0xc3, - 0xfc, 0x4d, 0x00, 0x46, 0xaa, 0xdb, 0xd8, 0x4d, 0x40, 0x51, 0xf9, 0x56, - 0xec, 0x4d, 0x00, 0xb2, 0x01, 0xff, 0x43, 0xe2, 0x07, 0xd5, 0x4d, 0x00, - 0x04, 0x10, 0x54, 0x01, 0xff, 0xb0, 0x06, 0x46, 0x54, 0xdd, 0xd9, 0x4d, - 0x40, 0xaf, 0x06, 0x4c, 0xdc, 0x85, 0xdb, 0x4d, 0x40, 0x48, 0x73, 0x51, - 0xcd, 0x4d, 0x00, 0x43, 0x15, 0x01, 0xe1, 0x4d, 0x40, 0x49, 0xfe, 0xb5, - 0xcc, 0x4d, 0x00, 0x48, 0x82, 0xc6, 0xd0, 0x4d, 0x40, 0x55, 0x92, 0x38, - 0xe3, 0x4d, 0x00, 0xa5, 0x14, 0xa9, 0x06, 0x47, 0x1d, 0xd4, 0xdf, 0x4d, - 0x40, 0x59, 0xac, 0x23, 0xc2, 0x4d, 0x00, 0x48, 0x72, 0xc8, 0xfa, 0x4d, - 0x40, 0x46, 0xd8, 0xd7, 0xe8, 0x4d, 0x00, 0x49, 0x28, 0xb9, 0xe7, 0x4d, - 0x00, 0x49, 0x53, 0xbe, 0xf4, 0x4d, 0x40, 0x4c, 0x61, 0x90, 0xeb, 0x4d, - 0x00, 0xae, 0x01, 0xff, 0x45, 0x59, 0xe3, 0xc5, 0x4d, 0x00, 0x4a, 0x63, - 0xaf, 0xd3, 0x4d, 0x40, 0x50, 0x1a, 0x61, 0xff, 0x4d, 0x00, 0x4d, 0xe9, - 0x82, 0xd4, 0x4d, 0x00, 0x4b, 0xa9, 0x9f, 0xea, 0x4d, 0x40, 0x48, 0xda, - 0xc1, 0xf6, 0x4d, 0x00, 0x4f, 0xd1, 0x6b, 0xfe, 0x4d, 0x00, 0x47, 0x02, - 0xd2, 0xd2, 0x4d, 0x40, 0xe2, 0x3f, 0xf3, 0x01, 0x57, 0xcb, 0x2e, 0xb9, - 0x22, 0x40, 0x02, 0xf2, 0x18, 0xdf, 0x0a, 0x02, 0x08, 0x02, 0xc2, 0x0a, - 0xa8, 0x99, 0x09, 0x02, 0x4e, 0x36, 0x84, 0x09, 0xab, 0xd3, 0x07, 0xad, - 0xcd, 0x06, 0xae, 0xa4, 0x05, 0x02, 0x22, 0x31, 0x93, 0x05, 0xb2, 0x8f, - 0x04, 0xb3, 0xef, 0x02, 0xb4, 0xd2, 0x01, 0x02, 0xed, 0x38, 0xb9, 0x01, - 0xb7, 0x52, 0xb9, 0x01, 0xff, 0x02, 0xf2, 0x18, 0x31, 0x02, 0x22, 0x31, - 0x15, 0x02, 0xed, 0x38, 0x01, 0xff, 0xd1, 0xe3, 0xb0, 0x01, 0xd2, 0xe4, - 0xb0, 0x01, 0xd3, 0xe5, 0xb0, 0x01, 0xd4, 0xe6, 0xb0, 0x41, 0xd1, 0xe7, - 0xb0, 0x01, 0xd2, 0xe8, 0xb0, 0x01, 0xd3, 0xe9, 0xb0, 0x01, 0xd4, 0xea, - 0xb0, 0x01, 0xd5, 0xeb, 0xb0, 0x01, 0xd6, 0xec, 0xb0, 0x41, 0xd1, 0xdd, - 0xb0, 0x01, 0xd2, 0xde, 0xb0, 0x01, 0xd3, 0xdf, 0xb0, 0x01, 0xd4, 0xe0, - 0xb0, 0x01, 0xd5, 0xe1, 0xb0, 0x01, 0x42, 0x60, 0x46, 0xe2, 0xb0, 0x41, - 0x02, 0xf2, 0x18, 0x4d, 0x02, 0x08, 0x02, 0x39, 0x02, 0x4e, 0x36, 0x21, - 0x02, 0x22, 0x31, 0x01, 0xff, 0xd1, 0x16, 0xb1, 0x01, 0xd2, 0x17, 0xb1, - 0x01, 0xd3, 0x18, 0xb1, 0x01, 0xd4, 0x19, 0xb1, 0x01, 0xd5, 0x1a, 0xb1, - 0x01, 0xd6, 0x1b, 0xb1, 0x01, 0xd7, 0x1c, 0xb1, 0x41, 0xd1, 0x0d, 0xb1, - 0x01, 0xd2, 0x0e, 0xb1, 0x01, 0xd3, 0x0f, 0xb1, 0x01, 0xd4, 0x10, 0xb1, - 0x01, 0xd5, 0x11, 0xb1, 0x41, 0xd1, 0x12, 0xb1, 0x01, 0xd2, 0x13, 0xb1, - 0x01, 0xd3, 0x14, 0xb1, 0x01, 0xd4, 0x15, 0xb1, 0x41, 0xd1, 0x08, 0xb1, - 0x01, 0xd2, 0x09, 0xb1, 0x01, 0xd3, 0x0a, 0xb1, 0x01, 0xd4, 0x0b, 0xb1, - 0x01, 0xd5, 0x0c, 0xb1, 0x41, 0xd1, 0x0a, 0xb0, 0x01, 0xd2, 0x0b, 0xb0, - 0x01, 0xd3, 0x0c, 0xb0, 0x01, 0xd4, 0x0d, 0xb0, 0x01, 0xd5, 0x0e, 0xb0, - 0x41, 0x02, 0xf2, 0x18, 0x85, 0x01, 0x02, 0x08, 0x02, 0x5d, 0x02, 0x4e, - 0x36, 0x3d, 0x02, 0x22, 0x31, 0x1b, 0x02, 0xed, 0x38, 0x01, 0xff, 0xd1, - 0x69, 0xb0, 0x01, 0xd2, 0x6a, 0xb0, 0x01, 0xd3, 0x6b, 0xb0, 0x01, 0xd4, - 0x6c, 0xb0, 0x01, 0x42, 0x1e, 0x00, 0x6d, 0xb0, 0x41, 0xd1, 0x77, 0xb0, - 0x01, 0xd2, 0x78, 0xb0, 0x01, 0xd3, 0x79, 0xb0, 0x01, 0xd4, 0x7a, 0xb0, - 0x01, 0xd5, 0x7b, 0xb0, 0x01, 0xd6, 0x7c, 0xb0, 0x01, 0x42, 0x71, 0x00, - 0x7d, 0xb0, 0x41, 0xd1, 0x62, 0xb0, 0x01, 0xd2, 0x63, 0xb0, 0x01, 0xd3, - 0x64, 0xb0, 0x01, 0xd4, 0x65, 0xb0, 0x01, 0xd5, 0x66, 0xb0, 0x01, 0xd6, - 0x67, 0xb0, 0x01, 0xd7, 0x68, 0xb0, 0x41, 0xd1, 0x6e, 0xb0, 0x01, 0xd2, - 0x6f, 0xb0, 0x01, 0xd3, 0x70, 0xb0, 0x01, 0xd4, 0x71, 0xb0, 0x01, 0xd5, - 0x72, 0xb0, 0x01, 0xd6, 0x73, 0xb0, 0x01, 0xd7, 0x74, 0xb0, 0x01, 0xd8, - 0x75, 0xb0, 0x01, 0xd9, 0x76, 0xb0, 0x41, 0xd1, 0x5e, 0xb0, 0x01, 0xd2, - 0x5f, 0xb0, 0x01, 0xd3, 0x60, 0xb0, 0x01, 0xd4, 0x61, 0xb0, 0x41, 0x02, - 0xf2, 0x18, 0x79, 0x02, 0x08, 0x02, 0x61, 0x02, 0x4e, 0x36, 0x45, 0x02, - 0x22, 0x31, 0x25, 0x02, 0xed, 0x38, 0x01, 0xff, 0xd1, 0x4a, 0xb0, 0x01, - 0xd2, 0x4b, 0xb0, 0x01, 0xd3, 0x4c, 0xb0, 0x01, 0xd4, 0x4d, 0xb0, 0x01, - 0xd5, 0x4e, 0xb0, 0x01, 0xd6, 0x4f, 0xb0, 0x01, 0xd7, 0x50, 0xb0, 0x01, - 0xd8, 0x51, 0xb0, 0x41, 0xd1, 0x57, 0xb0, 0x01, 0xd2, 0x58, 0xb0, 0x01, - 0xd3, 0x59, 0xb0, 0x01, 0xd4, 0x5a, 0xb0, 0x01, 0xd5, 0x5b, 0xb0, 0x01, - 0xd6, 0x5c, 0xb0, 0x01, 0xd7, 0x5d, 0xb0, 0x41, 0xd1, 0x44, 0xb0, 0x01, - 0xd2, 0x45, 0xb0, 0x01, 0xd3, 0x46, 0xb0, 0x01, 0xd4, 0x47, 0xb0, 0x01, - 0xd5, 0x48, 0xb0, 0x01, 0xd6, 0x49, 0xb0, 0x41, 0xd1, 0x52, 0xb0, 0x01, - 0xd2, 0x53, 0xb0, 0x01, 0xd3, 0x54, 0xb0, 0x01, 0xd4, 0x55, 0xb0, 0x01, - 0xd5, 0x56, 0xb0, 0x41, 0xd1, 0x3c, 0xb0, 0x01, 0xd2, 0x3d, 0xb0, 0x01, - 0xd3, 0x3e, 0xb0, 0x01, 0xd4, 0x3f, 0xb0, 0x01, 0xd5, 0x40, 0xb0, 0x01, - 0xd6, 0x41, 0xb0, 0x01, 0xd7, 0x42, 0xb0, 0x01, 0xd8, 0x43, 0xb0, 0x41, - 0x02, 0xf2, 0x18, 0x6d, 0x02, 0x08, 0x02, 0x59, 0x02, 0x4e, 0x36, 0x39, - 0x02, 0x22, 0x31, 0x1d, 0x02, 0xed, 0x38, 0x01, 0xff, 0xd1, 0xf8, 0xb0, - 0x01, 0xd2, 0xf9, 0xb0, 0x01, 0xd3, 0xfa, 0xb0, 0x01, 0xd4, 0xfb, 0xb0, - 0x01, 0xd5, 0xfc, 0xb0, 0x01, 0xd6, 0xfd, 0xb0, 0x41, 0xd1, 0x02, 0xb1, - 0x01, 0xd2, 0x03, 0xb1, 0x01, 0xd3, 0x04, 0xb1, 0x01, 0xd4, 0x05, 0xb1, - 0x01, 0xd5, 0x06, 0xb1, 0x01, 0xd6, 0x07, 0xb1, 0x41, 0xd1, 0xf1, 0xb0, - 0x01, 0xd2, 0xf2, 0xb0, 0x01, 0xd3, 0xf3, 0xb0, 0x01, 0xd4, 0xf4, 0xb0, - 0x01, 0xd5, 0xf5, 0xb0, 0x01, 0xd6, 0xf6, 0xb0, 0x01, 0xd7, 0xf7, 0xb0, - 0x41, 0xd1, 0xfe, 0xb0, 0x01, 0xd2, 0xff, 0xb0, 0x01, 0xd3, 0x00, 0xb1, - 0x01, 0xd4, 0x01, 0xb1, 0x41, 0xd1, 0xed, 0xb0, 0x01, 0xd2, 0xee, 0xb0, - 0x01, 0xd3, 0xef, 0xb0, 0x01, 0xd4, 0xf0, 0xb0, 0x41, 0xd1, 0x14, 0xb0, - 0x01, 0xd2, 0x15, 0xb0, 0x01, 0xd3, 0x16, 0xb0, 0x41, 0x07, 0x09, 0xcb, - 0x99, 0x01, 0x02, 0xf2, 0x18, 0x71, 0x02, 0x08, 0x02, 0x4f, 0x02, 0x4e, - 0x36, 0x29, 0x02, 0x22, 0x31, 0x11, 0x02, 0xed, 0x38, 0x01, 0xff, 0xd1, - 0x8f, 0xb0, 0x01, 0xd2, 0x90, 0xb0, 0x01, 0xd3, 0x91, 0xb0, 0x41, 0xd1, - 0x99, 0xb0, 0x01, 0xd2, 0x9a, 0xb0, 0x01, 0xd3, 0x9b, 0xb0, 0x01, 0xd4, - 0x9c, 0xb0, 0x01, 0xd5, 0x9d, 0xb0, 0x41, 0xd1, 0x87, 0xb0, 0x01, 0xd2, - 0x88, 0xb0, 0x01, 0xd3, 0x89, 0xb0, 0x01, 0xd4, 0x8a, 0xb0, 0x01, 0xd5, - 0x8b, 0xb0, 0x01, 0xd6, 0x8c, 0xb0, 0x01, 0xd7, 0x8d, 0xb0, 0x01, 0x42, - 0x77, 0x00, 0x8e, 0xb0, 0x41, 0xd1, 0x92, 0xb0, 0x01, 0xd2, 0x93, 0xb0, - 0x01, 0xd3, 0x94, 0xb0, 0x01, 0xd4, 0x95, 0xb0, 0x01, 0xd5, 0x96, 0xb0, - 0x01, 0xd6, 0x97, 0xb0, 0x01, 0x42, 0x22, 0x03, 0x98, 0xb0, 0x41, 0xd1, - 0x7e, 0xb0, 0x01, 0xd2, 0x7f, 0xb0, 0x01, 0xd3, 0x80, 0xb0, 0x01, 0xd4, - 0x81, 0xb0, 0x01, 0xd5, 0x82, 0xb0, 0x01, 0xd6, 0x83, 0xb0, 0x01, 0xd7, - 0x84, 0xb0, 0x01, 0xd8, 0x85, 0xb0, 0x01, 0xd9, 0x86, 0xb0, 0x41, 0xd1, - 0x1d, 0xb1, 0x01, 0xd2, 0x1e, 0xb1, 0x41, 0x02, 0xf2, 0x18, 0x63, 0x02, - 0x08, 0x02, 0x51, 0x02, 0x4e, 0x36, 0x31, 0x02, 0x22, 0x31, 0x15, 0x02, - 0xed, 0x38, 0x01, 0xff, 0xd1, 0xd0, 0xb0, 0x01, 0xd2, 0xd1, 0xb0, 0x01, - 0xd3, 0xd2, 0xb0, 0x01, 0xd4, 0xd3, 0xb0, 0x41, 0xd1, 0xd7, 0xb0, 0x01, - 0xd2, 0xd8, 0xb0, 0x01, 0xd3, 0xd9, 0xb0, 0x01, 0xd4, 0xda, 0xb0, 0x01, - 0xd5, 0xdb, 0xb0, 0x01, 0xd6, 0xdc, 0xb0, 0x41, 0xd1, 0xc9, 0xb0, 0x01, - 0xd2, 0xca, 0xb0, 0x01, 0xd3, 0xcb, 0xb0, 0x01, 0xd4, 0xcc, 0xb0, 0x01, - 0xd5, 0xcd, 0xb0, 0x01, 0xd6, 0xce, 0xb0, 0x01, 0xd7, 0xcf, 0xb0, 0x41, - 0xd1, 0xd4, 0xb0, 0x01, 0xd2, 0xd5, 0xb0, 0x01, 0x42, 0x6c, 0x00, 0xd6, - 0xb0, 0x41, 0xd1, 0xc2, 0xb0, 0x01, 0xd2, 0xc3, 0xb0, 0x01, 0xd3, 0xc4, - 0xb0, 0x01, 0xd4, 0xc5, 0xb0, 0x01, 0xd5, 0xc6, 0xb0, 0x01, 0xd6, 0xc7, - 0xb0, 0x01, 0xd7, 0xc8, 0xb0, 0x41, 0x02, 0xf2, 0x18, 0x77, 0x02, 0x08, - 0x02, 0x5b, 0x02, 0x4e, 0x36, 0x37, 0x02, 0x22, 0x31, 0x21, 0x02, 0xed, - 0x38, 0x01, 0xff, 0xd1, 0x2b, 0xb0, 0x01, 0xd2, 0x2c, 0xb0, 0x01, 0xd3, - 0x2d, 0xb0, 0x01, 0xd4, 0x2e, 0xb0, 0x01, 0xd5, 0x2f, 0xb0, 0x01, 0xd6, - 0x30, 0xb0, 0x01, 0xd7, 0x31, 0xb0, 0x41, 0xd1, 0x38, 0xb0, 0x01, 0xd2, - 0x39, 0xb0, 0x01, 0xd3, 0x3a, 0xb0, 0x01, 0x42, 0x45, 0x00, 0x3b, 0xb0, - 0x41, 0xd1, 0x23, 0xb0, 0x01, 0xd2, 0x24, 0xb0, 0x01, 0xd3, 0x25, 0xb0, - 0x01, 0xd4, 0x26, 0xb0, 0x01, 0xd5, 0x27, 0xb0, 0x01, 0xd6, 0x28, 0xb0, - 0x01, 0xd7, 0x29, 0xb0, 0x01, 0xd8, 0x2a, 0xb0, 0x41, 0xd1, 0x32, 0xb0, - 0x01, 0xd2, 0x33, 0xb0, 0x01, 0xd3, 0x34, 0xb0, 0x01, 0xd4, 0x35, 0xb0, - 0x01, 0xd5, 0x36, 0xb0, 0x01, 0xd6, 0x37, 0xb0, 0x41, 0xd1, 0x17, 0xb0, - 0x81, 0x26, 0xd2, 0x18, 0xb0, 0x01, 0xd3, 0x19, 0xb0, 0x01, 0xd4, 0x1a, - 0xb0, 0x01, 0xd5, 0x1b, 0xb0, 0x01, 0xd6, 0x1c, 0xb0, 0x01, 0xd7, 0x1d, - 0xb0, 0x01, 0xd8, 0x1e, 0xb0, 0x01, 0xd9, 0x1f, 0xb0, 0x01, 0x42, 0x37, - 0x01, 0x22, 0xb0, 0x41, 0xd0, 0x20, 0xb0, 0x01, 0xd1, 0x21, 0xb0, 0x41, - 0xd1, 0x06, 0xb0, 0x01, 0xd2, 0x07, 0xb0, 0x01, 0xd3, 0x08, 0xb0, 0x01, - 0xd4, 0x09, 0xb0, 0x41, 0x02, 0xf2, 0x18, 0x75, 0x02, 0x08, 0x02, 0x55, - 0x02, 0x4e, 0x36, 0x35, 0x02, 0x22, 0x31, 0x11, 0x02, 0xed, 0x38, 0x01, - 0xff, 0xd1, 0xb0, 0xb0, 0x01, 0xd2, 0xb1, 0xb0, 0x01, 0xd3, 0xb2, 0xb0, - 0x41, 0xd1, 0xba, 0xb0, 0x01, 0xd2, 0xbb, 0xb0, 0x01, 0xd3, 0xbc, 0xb0, - 0x01, 0xd4, 0xbd, 0xb0, 0x01, 0xd5, 0xbe, 0xb0, 0x01, 0xd6, 0xbf, 0xb0, - 0x01, 0xd7, 0xc0, 0xb0, 0x01, 0xd8, 0xc1, 0xb0, 0x41, 0xd1, 0xa9, 0xb0, - 0x01, 0xd2, 0xaa, 0xb0, 0x01, 0xd3, 0xab, 0xb0, 0x01, 0xd4, 0xac, 0xb0, - 0x01, 0xd5, 0xad, 0xb0, 0x01, 0xd6, 0xae, 0xb0, 0x01, 0xd7, 0xaf, 0xb0, - 0x41, 0xd1, 0xb3, 0xb0, 0x01, 0xd2, 0xb4, 0xb0, 0x01, 0xd3, 0xb5, 0xb0, - 0x01, 0xd4, 0xb6, 0xb0, 0x01, 0xd5, 0xb7, 0xb0, 0x01, 0xd6, 0xb8, 0xb0, - 0x01, 0xd7, 0xb9, 0xb0, 0x41, 0xd1, 0x9e, 0xb0, 0x81, 0x20, 0xd2, 0x9f, - 0xb0, 0x01, 0xd3, 0xa0, 0xb0, 0x01, 0xd4, 0xa1, 0xb0, 0x01, 0xd5, 0xa2, - 0xb0, 0x01, 0xd6, 0xa3, 0xb0, 0x01, 0xd7, 0xa4, 0xb0, 0x01, 0xd8, 0xa5, - 0xb0, 0x01, 0xd9, 0xa6, 0xb0, 0x41, 0xd0, 0xa7, 0xb0, 0x01, 0xd1, 0xa8, - 0xb0, 0x41, 0xd1, 0x01, 0xb0, 0x01, 0xd2, 0x0f, 0xb0, 0x01, 0xd3, 0x10, - 0xb0, 0x01, 0xd4, 0x11, 0xb0, 0x01, 0xd5, 0x12, 0xb0, 0x01, 0xd6, 0x13, - 0xb0, 0x41, 0xd1, 0x02, 0xb0, 0x01, 0xd2, 0x03, 0xb0, 0x01, 0xd3, 0x04, - 0xb0, 0x01, 0x42, 0x15, 0x02, 0x05, 0xb0, 0x41, 0x47, 0xf9, 0xce, 0x81, - 0xf6, 0x01, 0x57, 0xb4, 0x2e, 0xff, 0x2b, 0x00, 0xad, 0x01, 0xff, 0x47, - 0xea, 0x07, 0x88, 0x23, 0x00, 0x53, 0xfc, 0x47, 0xd1, 0x26, 0x40, 0x07, - 0x93, 0x22, 0x8a, 0x06, 0xac, 0xd0, 0x01, 0x05, 0xb9, 0x00, 0xb9, 0x01, - 0xb0, 0x06, 0x4c, 0x41, 0x95, 0xef, 0x05, 0x40, 0x05, 0x5d, 0x17, 0x2d, - 0x0b, 0x02, 0x16, 0x01, 0xff, 0x03, 0x8c, 0x09, 0x18, 0x45, 0x61, 0xe5, - 0xbe, 0x05, 0x00, 0x4b, 0x28, 0x9e, 0xc6, 0x05, 0x00, 0x45, 0x97, 0xe6, - 0xc0, 0x05, 0x00, 0x49, 0xd9, 0xbc, 0xc3, 0x05, 0x40, 0x43, 0x28, 0x59, - 0xf3, 0x05, 0x00, 0x46, 0xca, 0xdc, 0xf4, 0x05, 0x40, 0x4f, 0x4b, 0x6a, - 0xbc, 0x05, 0x00, 0xa8, 0x4f, 0x54, 0x9f, 0x42, 0x1e, 0xfb, 0x00, 0x45, - 0x7f, 0xe5, 0xbd, 0x05, 0x00, 0x45, 0x16, 0x89, 0xb7, 0x05, 0x00, 0xb1, - 0x28, 0x44, 0xf2, 0xee, 0xbf, 0x05, 0x00, 0xb3, 0x06, 0x45, 0x68, 0xe8, - 0xb5, 0x05, 0x40, 0x44, 0xa6, 0xe7, 0xb6, 0x05, 0x00, 0xa8, 0x06, 0x46, - 0xc9, 0x4c, 0xc2, 0x05, 0x40, 0x43, 0x5a, 0x45, 0xb0, 0x05, 0x00, 0x46, - 0xc9, 0x4c, 0xc1, 0x05, 0x40, 0x45, 0x53, 0xdc, 0xb8, 0x05, 0x80, 0x06, - 0x45, 0x95, 0xe8, 0xbb, 0x05, 0x40, 0x46, 0x62, 0xd5, 0xc7, 0x05, 0x40, - 0x05, 0x6a, 0xe1, 0x13, 0x44, 0xf5, 0xe3, 0xb4, 0x05, 0x00, 0x44, 0x04, - 0xe4, 0xb9, 0x05, 0xc0, 0x00, 0x4e, 0xe4, 0x73, 0xba, 0x05, 0x40, 0x45, - 0x16, 0x89, 0xb2, 0x05, 0x00, 0x46, 0x52, 0xdc, 0xb3, 0x05, 0x00, 0x45, - 0xa5, 0xe7, 0xb1, 0x05, 0x40, 0x49, 0x55, 0xb9, 0xc5, 0x05, 0x00, 0x4d, - 0xfa, 0x83, 0xaf, 0x05, 0x00, 0x49, 0xde, 0xbd, 0xc4, 0x05, 0x40, 0x06, - 0xc2, 0x05, 0x2c, 0x08, 0xfb, 0x1e, 0x01, 0xff, 0x4a, 0x59, 0xa5, 0x4f, - 0xfb, 0x00, 0x08, 0x2a, 0xca, 0x01, 0xff, 0x07, 0x3b, 0x01, 0x0c, 0x47, - 0x55, 0xd4, 0xf1, 0x05, 0x00, 0x4d, 0x0e, 0x89, 0x1f, 0xfb, 0x40, 0x43, - 0x2a, 0x0f, 0xf0, 0x05, 0x00, 0x43, 0x58, 0x51, 0xf2, 0x05, 0x40, 0xa1, - 0xcd, 0x03, 0x43, 0x71, 0x09, 0xd1, 0x05, 0x80, 0xb4, 0x03, 0x45, 0xda, - 0x48, 0xd3, 0x05, 0x80, 0xa6, 0x03, 0x06, 0x3d, 0x2c, 0xf5, 0x02, 0x45, - 0xa1, 0xa8, 0xd2, 0x05, 0x80, 0xe7, 0x02, 0x42, 0xb0, 0x01, 0xd4, 0x05, - 0x80, 0xd5, 0x02, 0x43, 0x5e, 0x50, 0xdb, 0x05, 0x80, 0xbc, 0x02, 0x45, - 0x5e, 0xa5, 0xdc, 0x05, 0x80, 0xae, 0x02, 0x43, 0x89, 0x05, 0xde, 0x05, - 0x80, 0xa0, 0x02, 0x43, 0x54, 0x22, 0xe0, 0x05, 0x80, 0x92, 0x02, 0x42, - 0x6f, 0x02, 0xe4, 0x05, 0x80, 0xf9, 0x01, 0x43, 0x44, 0xf1, 0xe7, 0x05, - 0x80, 0xeb, 0x01, 0x44, 0xfa, 0x64, 0xe8, 0x05, 0x80, 0xdd, 0x01, 0xb3, - 0x9a, 0x01, 0xb4, 0x71, 0x43, 0x2a, 0x0f, 0xd5, 0x05, 0x80, 0x59, 0x05, - 0x21, 0xe9, 0x25, 0x43, 0x58, 0x51, 0xd9, 0x05, 0x80, 0x0d, 0x45, 0x52, - 0x51, 0xd6, 0x05, 0xc0, 0x00, 0x4c, 0xc5, 0x89, 0x36, 0xfb, 0x40, 0x06, - 0x50, 0x00, 0x01, 0xff, 0x46, 0x4b, 0x6a, 0x39, 0xfb, 0x00, 0x45, 0xf4, - 0xe3, 0x1d, 0xfb, 0x40, 0x44, 0x67, 0x00, 0x21, 0xfb, 0x00, 0x45, 0xda, - 0x48, 0x22, 0xfb, 0x00, 0x49, 0x8e, 0xb6, 0x26, 0xfb, 0x00, 0x42, 0xb0, - 0x01, 0x23, 0xfb, 0x00, 0x43, 0x5e, 0x50, 0x24, 0xfb, 0x00, 0x45, 0x5e, - 0xa5, 0x25, 0xfb, 0x00, 0x44, 0xfa, 0x64, 0x27, 0xfb, 0x00, 0x43, 0x96, - 0x29, 0x28, 0xfb, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x46, 0x4b, 0x6a, - 0x35, 0xfb, 0x00, 0x45, 0x03, 0xe4, 0x4b, 0xfb, 0x40, 0x42, 0x04, 0x08, - 0xea, 0x05, 0x80, 0x1a, 0x42, 0xc2, 0x05, 0xd8, 0x05, 0x80, 0x0d, 0x44, - 0x5f, 0xe8, 0xe6, 0x05, 0xc0, 0x00, 0x4c, 0xc5, 0x89, 0x46, 0xfb, 0x40, - 0x4c, 0xc5, 0x89, 0x38, 0xfb, 0x40, 0x4c, 0xc5, 0x89, 0x4a, 0xfb, 0x40, - 0x45, 0x38, 0xe1, 0xe1, 0x05, 0x80, 0x33, 0x43, 0x0e, 0x16, 0xe9, 0x05, - 0xc0, 0x00, 0x06, 0x50, 0x00, 0x01, 0xff, 0x46, 0x4b, 0x6a, 0x49, 0xfb, - 0x80, 0x0f, 0xb3, 0x01, 0xff, 0x47, 0xc8, 0x4c, 0x2a, 0xfb, 0x00, 0x46, - 0xc9, 0x4c, 0x2b, 0xfb, 0x40, 0x06, 0x8a, 0x13, 0x01, 0xff, 0x47, 0xc8, - 0x4c, 0x2c, 0xfb, 0x00, 0x46, 0xc9, 0x4c, 0x2d, 0xfb, 0x40, 0x4c, 0xc5, - 0x89, 0x41, 0xfb, 0x40, 0x4c, 0xc5, 0x89, 0x48, 0xfb, 0x40, 0x4c, 0xc5, - 0x89, 0x47, 0xfb, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x46, 0x4b, 0x6a, - 0x44, 0xfb, 0x00, 0x44, 0xf2, 0xee, 0x4e, 0xfb, 0x40, 0x4c, 0xc5, 0x89, - 0x40, 0xfb, 0x40, 0x4c, 0xc5, 0x89, 0x3e, 0xfb, 0x40, 0x4c, 0xc5, 0x89, - 0x3c, 0xfb, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x46, 0x4b, 0x6a, 0x3b, - 0xfb, 0x00, 0x44, 0xf2, 0xee, 0x4d, 0xfb, 0x40, 0x4b, 0x2a, 0x96, 0x34, - 0xfb, 0x00, 0xf4, 0xd7, 0x05, 0x40, 0x4c, 0xc5, 0x89, 0x32, 0xfb, 0x40, - 0x43, 0x5e, 0x50, 0xda, 0x05, 0x80, 0x1f, 0x43, 0x89, 0x05, 0xdd, 0x05, - 0x00, 0x43, 0x54, 0x22, 0xdf, 0x05, 0x00, 0x42, 0x6f, 0x02, 0xe3, 0x05, - 0x80, 0x06, 0x45, 0x5e, 0xe8, 0xe5, 0x05, 0x40, 0x4c, 0xc5, 0x89, 0x43, - 0xfb, 0x40, 0x4c, 0xc5, 0x89, 0x3a, 0xfb, 0x40, 0x4c, 0xc5, 0x89, 0x33, - 0xfb, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x46, 0x4b, 0x6a, 0x31, 0xfb, - 0x00, 0x44, 0xf2, 0xee, 0x4c, 0xfb, 0x40, 0xac, 0x06, 0x43, 0xf7, 0x19, - 0xe2, 0x05, 0x40, 0x42, 0x69, 0x00, 0xd0, 0x05, 0x80, 0x11, 0x0a, 0x6d, - 0xaf, 0x01, 0xff, 0x44, 0xd5, 0x48, 0x20, 0xfb, 0x00, 0x49, 0x45, 0x70, - 0x29, 0xfb, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x45, 0x55, 0x6a, 0x30, - 0xfb, 0x00, 0x45, 0x16, 0x89, 0x2e, 0xfb, 0x00, 0x46, 0x52, 0xdc, 0x2f, - 0xfb, 0x40, 0x4c, 0xb5, 0x8a, 0xa2, 0x05, 0x00, 0xa4, 0xcb, 0x01, 0x47, - 0x19, 0xce, 0x91, 0x05, 0x00, 0x03, 0x8c, 0x09, 0xad, 0x01, 0x44, 0x4e, - 0xed, 0xac, 0x05, 0x00, 0xad, 0x8b, 0x01, 0x43, 0x6e, 0x15, 0xab, 0x05, - 0x00, 0x02, 0x6c, 0x09, 0x75, 0x02, 0xf4, 0x13, 0x65, 0x45, 0xb3, 0x4e, - 0x97, 0x05, 0x00, 0xb3, 0x51, 0xb4, 0x31, 0x02, 0x4d, 0x00, 0x21, 0xba, - 0x01, 0xff, 0xa1, 0x06, 0x44, 0x56, 0xed, 0xae, 0x05, 0x40, 0x04, 0xe6, - 0xee, 0x06, 0x43, 0xf3, 0x13, 0x98, 0x05, 0x40, 0x45, 0x6d, 0xe3, 0x95, - 0x05, 0x00, 0x45, 0x63, 0xd5, 0x94, 0x05, 0x40, 0x4c, 0x59, 0x92, 0xaa, - 0x05, 0x00, 0x43, 0xa6, 0x05, 0x9a, 0x05, 0x40, 0xa5, 0x06, 0x45, 0x71, - 0xe4, 0x96, 0x05, 0x40, 0x06, 0xc6, 0xda, 0x06, 0x43, 0x5b, 0x23, 0x9b, - 0x05, 0x40, 0x46, 0xfe, 0xd8, 0xa0, 0x05, 0x00, 0x46, 0x58, 0xdc, 0xa9, - 0x05, 0x40, 0x44, 0xa6, 0xe7, 0x92, 0x05, 0x00, 0x49, 0x0c, 0xb7, 0x93, - 0x05, 0x40, 0x43, 0x53, 0xb3, 0xa8, 0x05, 0x00, 0x49, 0x52, 0xbc, 0x9f, - 0x05, 0x40, 0x44, 0x4a, 0xef, 0x99, 0x05, 0x00, 0x43, 0xa1, 0x1d, 0xa1, - 0x05, 0x40, 0x47, 0xdb, 0xcb, 0xa4, 0x05, 0x00, 0x45, 0x0e, 0xe3, 0xa5, - 0x05, 0x80, 0x06, 0x44, 0xd9, 0xcb, 0xa3, 0x05, 0x40, 0x47, 0x7d, 0xca, - 0xa6, 0x05, 0x40, 0x43, 0x28, 0x59, 0x9c, 0x05, 0x80, 0x06, 0x46, 0xca, - 0xdc, 0x9e, 0x05, 0x40, 0x47, 0xa7, 0xca, 0x9d, 0x05, 0x40, 0x44, 0xa4, - 0x4a, 0xa7, 0x05, 0x00, 0x43, 0xef, 0x50, 0xad, 0x05, 0x40, 0xa4, 0xdb, - 0x06, 0xb2, 0xaa, 0x06, 0x03, 0x04, 0x15, 0x01, 0xff, 0xa1, 0xf6, 0x05, - 0xa2, 0xb9, 0x05, 0xa3, 0x83, 0x05, 0xa4, 0xca, 0x04, 0xa5, 0x8a, 0x04, - 0xa6, 0xf1, 0x03, 0x4b, 0x9f, 0x5f, 0x1a, 0x27, 0x00, 0xa8, 0xdc, 0x03, - 0x54, 0xb3, 0x15, 0x79, 0xf6, 0x01, 0xac, 0x81, 0x03, 0xad, 0xf2, 0x02, - 0x06, 0xb4, 0x01, 0xc1, 0x02, 0xaf, 0xac, 0x02, 0x49, 0x45, 0x70, 0x95, - 0x27, 0x00, 0xb2, 0xf1, 0x01, 0xb3, 0x81, 0x01, 0xb4, 0x4d, 0x02, 0x50, - 0x02, 0x32, 0x4c, 0x32, 0x00, 0x5a, 0x27, 0x00, 0xb7, 0x01, 0xff, 0x5c, - 0x1e, 0x17, 0xbd, 0x27, 0x00, 0x05, 0xae, 0x02, 0x06, 0x5b, 0x4f, 0x1b, - 0x94, 0x27, 0x40, 0x46, 0xe7, 0x02, 0x87, 0xf7, 0x01, 0x56, 0xf1, 0x32, - 0xdb, 0x26, 0x00, 0x46, 0xab, 0x05, 0x91, 0xf7, 0xc1, 0x00, 0x63, 0x20, - 0x0a, 0x05, 0xce, 0x41, 0x69, 0x9a, 0x02, 0xae, 0x27, 0x00, 0x11, 0xe9, - 0x0b, 0x01, 0xff, 0x55, 0xd5, 0x01, 0x19, 0xf8, 0x01, 0x5b, 0xa0, 0x1b, - 0x1d, 0xf8, 0x41, 0x09, 0xd4, 0x0c, 0x17, 0x5f, 0x69, 0x06, 0x9e, 0x27, - 0x00, 0x0e, 0x45, 0x2b, 0x01, 0xff, 0x4a, 0x53, 0x2b, 0xd3, 0xf7, 0x01, - 0x4d, 0xd9, 0x12, 0xd4, 0xf7, 0x41, 0x57, 0xce, 0x2d, 0xbb, 0x27, 0x00, - 0x06, 0xdd, 0x0c, 0x01, 0xff, 0x48, 0xed, 0x0c, 0x3d, 0x27, 0x00, 0x51, - 0xc1, 0x5b, 0x43, 0x27, 0x40, 0xa1, 0x5f, 0x5a, 0xf4, 0x1e, 0x71, 0xf6, - 0x01, 0xa9, 0x36, 0x05, 0x00, 0x20, 0x06, 0x46, 0x85, 0xb2, 0x48, 0x27, - 0x40, 0x05, 0x25, 0x23, 0x11, 0x0e, 0x3a, 0x55, 0x01, 0xff, 0x43, 0xa7, - 0xcd, 0x65, 0xf6, 0x01, 0x49, 0x89, 0xbe, 0x5d, 0xf6, 0x41, 0x45, 0xce, - 0x00, 0x98, 0x27, 0x00, 0x09, 0x9c, 0x01, 0x01, 0xff, 0x43, 0xa7, 0xcd, - 0x67, 0xf6, 0x01, 0x49, 0x89, 0xbe, 0x5f, 0xf6, 0x41, 0x05, 0x07, 0x06, - 0x11, 0x02, 0xad, 0x04, 0x01, 0xff, 0x52, 0x4b, 0x2b, 0xcc, 0xf7, 0x01, - 0x4f, 0x4e, 0x1c, 0xb8, 0xf7, 0x41, 0x5d, 0xe8, 0x04, 0x5c, 0x27, 0x00, - 0x64, 0xd8, 0x09, 0x5b, 0x27, 0x40, 0x45, 0xa8, 0x18, 0xac, 0xf7, 0x01, - 0x5d, 0xaa, 0x15, 0x7b, 0xf6, 0x41, 0x04, 0xc9, 0x00, 0x06, 0x5c, 0x6e, - 0x18, 0x9c, 0x27, 0x40, 0x10, 0x3d, 0x0b, 0x18, 0x4b, 0xb8, 0x02, 0x99, - 0x27, 0xc0, 0x00, 0x06, 0x50, 0x00, 0x01, 0xff, 0x55, 0xd5, 0x01, 0x1a, - 0xf8, 0x01, 0x5b, 0xa0, 0x1b, 0x1e, 0xf8, 0x41, 0x50, 0x14, 0x09, 0x71, - 0x27, 0x00, 0x57, 0xee, 0x04, 0x6f, 0x27, 0x40, 0x50, 0x2a, 0x64, 0x1c, - 0x27, 0x00, 0x52, 0x04, 0x55, 0x2e, 0x27, 0x00, 0x54, 0x5b, 0x45, 0x56, - 0x2b, 0x40, 0x05, 0x25, 0x23, 0x11, 0x0e, 0x3a, 0x55, 0x01, 0xff, 0x43, - 0xa7, 0xcd, 0x64, 0xf6, 0x01, 0x49, 0x89, 0xbe, 0x5c, 0xf6, 0x41, 0x45, - 0xce, 0x00, 0x9a, 0x27, 0x00, 0x09, 0x9c, 0x01, 0x01, 0xff, 0x43, 0xa7, - 0xcd, 0x66, 0xf6, 0x01, 0x49, 0x89, 0xbe, 0x5e, 0xf6, 0x41, 0x49, 0x0c, - 0x6d, 0x96, 0x27, 0x00, 0x4f, 0xbb, 0x72, 0x16, 0x27, 0x40, 0xa1, 0x44, - 0x03, 0xc4, 0x00, 0x1f, 0x58, 0x75, 0x28, 0x73, 0xf6, 0x01, 0x02, 0xd1, - 0x00, 0x01, 0xff, 0x80, 0x06, 0x68, 0x9b, 0x02, 0xad, 0x27, 0x40, 0x64, - 0xe1, 0x04, 0x60, 0x27, 0x00, 0x64, 0x90, 0x09, 0x5f, 0x27, 0x40, 0x10, - 0x3d, 0x0b, 0x11, 0x11, 0xe9, 0x0b, 0x01, 0xff, 0x55, 0xd5, 0x01, 0x18, - 0xf8, 0x01, 0x5b, 0xa0, 0x1b, 0x1c, 0xf8, 0x41, 0x50, 0x14, 0x09, 0x70, - 0x27, 0x00, 0x57, 0xee, 0x04, 0x6e, 0x27, 0x40, 0x4a, 0xdd, 0xad, 0x55, - 0x2b, 0x00, 0x49, 0x25, 0x9c, 0x47, 0xf5, 0x41, 0x5e, 0x8c, 0x12, 0x63, - 0x27, 0x00, 0x4e, 0x77, 0x6c, 0x97, 0xfb, 0x41, 0x04, 0xa7, 0x05, 0x06, - 0x5b, 0x42, 0x1c, 0x24, 0x27, 0x40, 0x52, 0x4b, 0x2b, 0xca, 0xf7, 0x01, - 0x4f, 0x4e, 0x1c, 0xb2, 0xf7, 0x41, 0x05, 0xc9, 0x00, 0x17, 0x4a, 0xfa, - 0x12, 0xf0, 0xf7, 0x01, 0x10, 0xae, 0x00, 0x01, 0xff, 0x48, 0xfd, 0x04, - 0x62, 0x27, 0x00, 0x46, 0xeb, 0x07, 0x57, 0x27, 0x40, 0x08, 0x08, 0x08, - 0x0c, 0x4f, 0x4e, 0x1c, 0xbe, 0xf7, 0x01, 0x62, 0xd3, 0x0c, 0x4b, 0x27, - 0x40, 0x4a, 0x53, 0x2b, 0xcf, 0xf7, 0x01, 0x4d, 0xd9, 0x12, 0xd1, 0xf7, - 0x01, 0x56, 0xdd, 0x35, 0x38, 0x27, 0x40, 0x66, 0x62, 0x06, 0xa0, 0x27, - 0x00, 0x4c, 0xf3, 0x31, 0x97, 0x27, 0x00, 0xaf, 0x01, 0xff, 0x49, 0xdd, - 0x0d, 0xb2, 0xf4, 0x01, 0x05, 0x3d, 0x01, 0x11, 0x13, 0xe7, 0x0b, 0x01, - 0xff, 0x55, 0xd5, 0x01, 0x1b, 0xf8, 0x01, 0x5b, 0xa0, 0x1b, 0x1f, 0xf8, - 0x41, 0x5d, 0xe8, 0x04, 0x5e, 0x27, 0x00, 0x64, 0xd8, 0x09, 0x5d, 0x27, - 0x40, 0x02, 0xb0, 0x01, 0x23, 0x45, 0xe8, 0x02, 0x58, 0x2b, 0x80, 0x06, - 0x65, 0x01, 0x08, 0xa8, 0x27, 0x40, 0x06, 0x50, 0x00, 0x06, 0x49, 0x41, - 0xb5, 0x59, 0x2b, 0x40, 0x4d, 0xea, 0x7f, 0x57, 0x2b, 0x00, 0x59, 0xb9, - 0x25, 0xe3, 0x26, 0x40, 0x47, 0xd4, 0x07, 0x14, 0x27, 0x00, 0x4e, 0x30, - 0x7d, 0x46, 0x27, 0x40, 0x47, 0xe9, 0xcb, 0x18, 0x27, 0x00, 0x04, 0xe2, - 0x02, 0x01, 0xff, 0x80, 0x17, 0x0b, 0x9f, 0x19, 0x01, 0xff, 0x50, 0x1f, - 0x23, 0xb9, 0x27, 0x00, 0x50, 0xb3, 0x02, 0xb8, 0x27, 0x00, 0x50, 0x83, - 0x3f, 0xb7, 0x27, 0x40, 0x07, 0x6f, 0x40, 0x06, 0x45, 0x24, 0x21, 0x64, - 0x27, 0x40, 0x5e, 0x6e, 0x12, 0xa5, 0x27, 0x00, 0x5c, 0x32, 0x19, 0xa6, - 0x27, 0x40, 0x51, 0x2e, 0x3d, 0x74, 0xf6, 0x01, 0x11, 0xd5, 0x4e, 0x06, - 0x47, 0xee, 0x0c, 0x31, 0x27, 0x40, 0x43, 0xbf, 0x0a, 0x9c, 0xf8, 0x81, - 0x06, 0x4a, 0x03, 0xb0, 0x9d, 0xf8, 0x41, 0x80, 0x01, 0xff, 0x44, 0x22, - 0x00, 0x9e, 0xf8, 0x01, 0x45, 0x63, 0x73, 0x9f, 0xf8, 0x41, 0x4f, 0xa7, - 0x68, 0x49, 0xf6, 0x01, 0x02, 0xc6, 0x00, 0x01, 0xff, 0x4a, 0x65, 0x95, - 0x9f, 0xf4, 0x01, 0x45, 0x2c, 0x0e, 0xf6, 0xfa, 0x01, 0x05, 0x51, 0x00, - 0x01, 0xff, 0x45, 0xce, 0x00, 0x98, 0xf4, 0x01, 0x46, 0x42, 0x84, 0x9d, - 0xf4, 0x01, 0x4f, 0x43, 0x72, 0x94, 0xf3, 0x41, 0x45, 0x4a, 0x3c, 0xa7, - 0xf3, 0x01, 0x45, 0x30, 0xb8, 0xa6, 0xfa, 0xc1, 0x00, 0x51, 0xb6, 0x55, - 0xfc, 0x26, 0x40, 0x43, 0x55, 0x27, 0xe1, 0x2b, 0x00, 0x02, 0x46, 0x00, - 0x9a, 0x24, 0x08, 0x22, 0xc5, 0xe1, 0x1e, 0xad, 0xad, 0x1e, 0xae, 0xd8, - 0x01, 0x5b, 0x78, 0x1c, 0x4b, 0xf6, 0x01, 0xb2, 0xc5, 0x01, 0xb4, 0x06, - 0x44, 0x41, 0xa7, 0x7b, 0xf7, 0x41, 0x4b, 0x0e, 0x98, 0x23, 0xf4, 0x01, - 0x04, 0x6b, 0xcf, 0x01, 0xff, 0x07, 0xc1, 0x05, 0x27, 0x07, 0x2f, 0x39, - 0x01, 0xff, 0x44, 0x31, 0x11, 0xfc, 0x08, 0x01, 0x43, 0xbf, 0x0a, 0xfb, - 0x08, 0x81, 0x0f, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0xfd, 0x08, 0x01, - 0x45, 0xde, 0x2b, 0xfe, 0x08, 0x41, 0x48, 0x21, 0x11, 0xff, 0x08, 0x41, - 0xa1, 0x79, 0x44, 0x0a, 0xec, 0xe1, 0x08, 0x01, 0x4b, 0xa8, 0x98, 0xe3, - 0x08, 0x01, 0x45, 0xa1, 0xa8, 0xe2, 0x08, 0x01, 0x42, 0xb0, 0x01, 0xe4, - 0x08, 0x81, 0x5a, 0x44, 0x8e, 0xed, 0xea, 0x08, 0x01, 0x46, 0x9c, 0xda, - 0xeb, 0x08, 0x01, 0x43, 0x89, 0x05, 0xec, 0x08, 0x01, 0x43, 0x54, 0x22, - 0xed, 0x08, 0x01, 0x42, 0x6f, 0x02, 0xf0, 0x08, 0x01, 0x44, 0xae, 0xc5, - 0xf2, 0x08, 0x01, 0xb3, 0x20, 0xb4, 0x12, 0x43, 0xc0, 0x88, 0xe5, 0x08, - 0x01, 0x44, 0x58, 0x51, 0xe9, 0x08, 0x01, 0x44, 0x06, 0xf0, 0xe6, 0x08, - 0x41, 0x42, 0x9a, 0x43, 0xf5, 0x08, 0x01, 0x43, 0x39, 0x25, 0xe8, 0x08, - 0x41, 0xa1, 0x06, 0x43, 0x0e, 0x16, 0xf4, 0x08, 0x41, 0x43, 0x89, 0xe7, - 0xf1, 0x08, 0x01, 0x44, 0x39, 0xe1, 0xee, 0x08, 0x41, 0x42, 0x53, 0x00, - 0xe7, 0x08, 0x41, 0x44, 0x48, 0x3c, 0xe0, 0x08, 0x01, 0x42, 0x61, 0x1c, - 0xef, 0x08, 0x41, 0x46, 0xea, 0xd7, 0xb4, 0xf5, 0x01, 0xf0, 0x89, 0xfa, - 0x41, 0xa4, 0xab, 0x1c, 0xa7, 0xce, 0x03, 0x0d, 0x5a, 0x82, 0x82, 0x01, - 0x05, 0xb8, 0xe8, 0x01, 0xff, 0x07, 0xc1, 0x05, 0x13, 0x4d, 0xf9, 0x86, - 0x34, 0x17, 0x00, 0x0b, 0xd1, 0x75, 0x01, 0xff, 0xe9, 0x32, 0x17, 0x00, - 0xf5, 0x33, 0x17, 0x40, 0xe1, 0x20, 0x17, 0x00, 0x42, 0x16, 0x00, 0x2a, - 0x17, 0x00, 0x42, 0xa1, 0x10, 0x27, 0x17, 0x00, 0x42, 0x24, 0x02, 0x24, - 0x17, 0x00, 0x42, 0x22, 0x00, 0x31, 0x17, 0x00, 0xe9, 0x21, 0x17, 0x00, - 0x42, 0x1b, 0x02, 0x23, 0x17, 0x00, 0x42, 0x74, 0x00, 0x2e, 0x17, 0x00, - 0x42, 0x6c, 0x00, 0x2b, 0x17, 0x00, 0xae, 0x28, 0x42, 0x6c, 0x09, 0x29, - 0x17, 0x00, 0x42, 0x71, 0x00, 0x2d, 0x17, 0x00, 0x42, 0x15, 0x06, 0x30, - 0x17, 0x00, 0x42, 0x12, 0x00, 0x26, 0x17, 0x00, 0xf5, 0x22, 0x17, 0x00, - 0x42, 0xa9, 0x01, 0x2f, 0x17, 0x00, 0x42, 0x34, 0x22, 0x2c, 0x17, 0x40, - 0xe1, 0x28, 0x17, 0x00, 0x42, 0x24, 0x02, 0x25, 0x17, 0x40, 0x06, 0xc4, - 0x06, 0x80, 0x02, 0x07, 0xc1, 0x05, 0x4a, 0x05, 0xb9, 0x00, 0x3a, 0x05, - 0x2f, 0x03, 0x19, 0x06, 0x6c, 0x38, 0x01, 0xff, 0xe1, 0x1d, 0x0d, 0x01, - 0xe5, 0x20, 0x0d, 0x01, 0xe9, 0x1e, 0x0d, 0x01, 0xef, 0x21, 0x0d, 0x01, - 0xf5, 0x1f, 0x0d, 0x41, 0x48, 0x12, 0xc4, 0x24, 0x0d, 0x01, 0x02, 0x12, - 0x00, 0x01, 0xff, 0x44, 0x71, 0x7b, 0x25, 0x0d, 0x01, 0x42, 0xff, 0x04, - 0x26, 0x0d, 0x01, 0x43, 0x5f, 0x08, 0x27, 0x0d, 0x41, 0x49, 0xc1, 0xb9, - 0x23, 0x0d, 0x01, 0x45, 0x8c, 0xe7, 0x22, 0x0d, 0x41, 0xe1, 0x00, 0x0d, - 0x01, 0x42, 0x16, 0x00, 0x01, 0x0d, 0x01, 0x42, 0x37, 0x00, 0x06, 0x0d, - 0x01, 0xa4, 0x95, 0x01, 0x42, 0xe1, 0x07, 0x09, 0x0d, 0x01, 0x42, 0x24, - 0x02, 0x12, 0x0d, 0x01, 0x42, 0x22, 0x00, 0x07, 0x0d, 0x01, 0x42, 0xbd, - 0x26, 0x05, 0x0d, 0x01, 0xab, 0x60, 0x42, 0x74, 0x00, 0x13, 0x0d, 0x01, - 0x42, 0x6c, 0x00, 0x14, 0x0d, 0x01, 0xae, 0x42, 0x42, 0x6c, 0x09, 0x02, - 0x0d, 0x01, 0xb2, 0x30, 0xb3, 0x24, 0xb4, 0x18, 0x42, 0xa6, 0x0a, 0x1c, - 0x0d, 0x01, 0x42, 0xa9, 0x01, 0x16, 0x0d, 0x01, 0x42, 0x34, 0x22, 0x18, - 0x0d, 0x01, 0x42, 0x59, 0x00, 0x0e, 0x0d, 0x41, 0xe1, 0x03, 0x0d, 0x01, - 0x42, 0x12, 0x00, 0x04, 0x0d, 0x41, 0xe1, 0x0f, 0x0d, 0x01, 0x42, 0x22, - 0x00, 0x10, 0x0d, 0x41, 0xe1, 0x0c, 0x0d, 0x01, 0x42, 0x71, 0x00, 0x0d, - 0x0d, 0x41, 0xe1, 0x15, 0x0d, 0x01, 0x42, 0x24, 0x02, 0x1a, 0x0d, 0x01, - 0x42, 0x34, 0x22, 0x1b, 0x0d, 0x41, 0xe1, 0x11, 0x0d, 0x01, 0x42, 0x22, - 0x00, 0x08, 0x0d, 0x01, 0x05, 0x67, 0xe4, 0x01, 0xff, 0x42, 0xa9, 0x01, - 0x17, 0x0d, 0x01, 0x42, 0x34, 0x22, 0x19, 0x0d, 0x41, 0xe1, 0x0a, 0x0d, - 0x01, 0x42, 0xa1, 0x10, 0x0b, 0x0d, 0x41, 0x45, 0xc3, 0x0a, 0x38, 0x0d, - 0x01, 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0x39, 0x0d, 0x01, 0x43, 0xbf, 0x0a, - 0x31, 0x0d, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xa1, 0x1d, 0x30, 0x0d, - 0x41, 0x44, 0x25, 0x01, 0x33, 0x0d, 0x01, 0x42, 0x15, 0x02, 0x32, 0x0d, - 0x41, 0x44, 0x27, 0x1d, 0x37, 0x0d, 0x01, 0x42, 0x60, 0x25, 0x36, 0x0d, - 0x41, 0x43, 0xa7, 0x05, 0x35, 0x0d, 0x01, 0x43, 0xcb, 0x06, 0x34, 0x0d, - 0x41, 0x03, 0x40, 0x54, 0x57, 0x0d, 0x28, 0x89, 0x01, 0xff, 0x45, 0xc3, - 0x0a, 0x28, 0x30, 0x00, 0xa6, 0x3e, 0x44, 0x46, 0x2a, 0x29, 0x30, 0x00, - 0x43, 0xbf, 0x0a, 0x21, 0x30, 0x00, 0xb3, 0x24, 0xb4, 0x01, 0xff, 0x42, - 0x92, 0x01, 0x38, 0x30, 0x00, 0xa8, 0x0d, 0xb7, 0x01, 0xff, 0x44, 0x29, - 0x1d, 0x39, 0x30, 0x00, 0xef, 0x22, 0x30, 0x40, 0x44, 0x2c, 0x11, 0x3a, - 0x30, 0x00, 0x43, 0x26, 0x01, 0x23, 0x30, 0x40, 0x44, 0x27, 0x1d, 0x27, - 0x30, 0x00, 0x42, 0x60, 0x25, 0x26, 0x30, 0x40, 0x43, 0xa7, 0x05, 0x25, - 0x30, 0x00, 0x43, 0xcb, 0x06, 0x24, 0x30, 0x40, 0x09, 0xe7, 0xb4, 0xf4, - 0x10, 0x54, 0xab, 0x40, 0x2f, 0x30, 0x00, 0x46, 0x11, 0x81, 0x64, 0x31, - 0x00, 0xaa, 0xef, 0x04, 0x07, 0xc1, 0x05, 0x0f, 0xb3, 0x01, 0xff, 0x53, - 0x2c, 0x49, 0x2e, 0x30, 0x00, 0x48, 0xaf, 0x17, 0x00, 0xd8, 0x40, 0xe1, - 0x4f, 0x31, 0x80, 0xc7, 0x04, 0xa3, 0xb8, 0x04, 0xe5, 0x54, 0x31, 0x80, - 0xaa, 0x04, 0x45, 0x35, 0xa3, 0x4e, 0x31, 0x00, 0xe9, 0x63, 0x31, 0x80, - 0x98, 0x04, 0xab, 0xe4, 0x03, 0x45, 0x8e, 0xe5, 0x41, 0x31, 0x80, 0xc5, - 0x03, 0x45, 0xfc, 0xe5, 0x34, 0x31, 0x80, 0x9c, 0x03, 0xef, 0x57, 0x31, - 0x80, 0x92, 0x03, 0xb0, 0xc8, 0x02, 0x45, 0x41, 0xe7, 0x39, 0x31, 0x80, - 0xef, 0x01, 0xb3, 0x8f, 0x01, 0xb4, 0x80, 0x01, 0xf5, 0x5c, 0x31, 0x00, - 0xb7, 0x64, 0xb9, 0x01, 0xff, 0xe1, 0x51, 0x31, 0x80, 0x58, 0xe5, 0x56, - 0x31, 0x80, 0x32, 0xe9, 0x62, 0x31, 0x00, 0xef, 0x5b, 0x31, 0x80, 0x17, - 0xf5, 0x60, 0x31, 0xc0, 0x00, 0x8d, 0x01, 0xff, 0xe9, 0x8c, 0x31, 0x00, - 0x42, 0x4d, 0x00, 0x8b, 0x31, 0xc0, 0x00, 0xef, 0x8a, 0x31, 0x40, 0x8d, - 0x01, 0xff, 0xe9, 0x89, 0x31, 0x00, 0x42, 0x34, 0x22, 0x87, 0x31, 0xc0, - 0x00, 0xe5, 0x88, 0x31, 0x40, 0xef, 0x55, 0x31, 0x80, 0x16, 0x46, 0x24, - 0xca, 0x81, 0x31, 0xc0, 0x00, 0x8d, 0x01, 0xff, 0x47, 0xae, 0xd1, 0x83, - 0x31, 0x00, 0x44, 0xf0, 0xbc, 0x82, 0x31, 0x40, 0x48, 0x32, 0xa3, 0x86, - 0x31, 0x40, 0xe5, 0x52, 0x31, 0x40, 0xe1, 0x58, 0x31, 0x80, 0x0d, 0xe5, - 0x5e, 0x31, 0x80, 0x04, 0xe9, 0x5f, 0x31, 0x40, 0xef, 0x5d, 0x31, 0x40, - 0xe5, 0x59, 0x31, 0x40, 0x46, 0x8b, 0xd3, 0x4c, 0x31, 0x00, 0x45, 0x20, - 0xcb, 0x37, 0x31, 0x40, 0x43, 0x16, 0x41, 0x45, 0x31, 0x80, 0x35, 0x04, - 0x74, 0x2c, 0x01, 0xff, 0x45, 0x37, 0xe2, 0x49, 0x31, 0x00, 0x45, 0x35, - 0xa3, 0x85, 0x31, 0x00, 0x45, 0x68, 0xc9, 0x80, 0x31, 0x00, 0x46, 0xb6, - 0xa0, 0x32, 0x31, 0x00, 0x45, 0xfc, 0xe5, 0x65, 0x31, 0x00, 0x45, 0x32, - 0x83, 0x43, 0x31, 0x00, 0x44, 0xf0, 0xbc, 0x46, 0x31, 0x00, 0x46, 0x1f, - 0xcb, 0x38, 0x31, 0x40, 0x8d, 0x01, 0xff, 0x45, 0x37, 0xe2, 0x7e, 0x31, - 0x00, 0x46, 0xb6, 0xa0, 0x7a, 0x31, 0x00, 0x45, 0xfc, 0xe5, 0x7b, 0x31, - 0x00, 0x45, 0x32, 0x83, 0x7d, 0x31, 0x00, 0x46, 0x1f, 0xcb, 0x7c, 0x31, - 0x40, 0x8d, 0x01, 0xff, 0x45, 0x35, 0xa3, 0x40, 0x31, 0x00, 0x46, 0xb6, - 0xa0, 0x3a, 0x31, 0x80, 0x3b, 0x45, 0x8e, 0xe5, 0x3b, 0x31, 0x00, 0xb0, - 0x1a, 0x44, 0xf0, 0xbc, 0x3d, 0x31, 0x00, 0xb4, 0x06, 0x4b, 0x2f, 0xa3, - 0x6d, 0x31, 0x40, 0x46, 0x8b, 0xd3, 0x3e, 0x31, 0x00, 0x45, 0x20, 0xcb, - 0x6a, 0x31, 0x40, 0x46, 0xaf, 0xd1, 0x6c, 0x31, 0x00, 0x46, 0x4c, 0xc0, - 0x3f, 0x31, 0x00, 0x44, 0x33, 0x83, 0x3c, 0x31, 0xc0, 0x00, 0x45, 0xea, - 0xde, 0x6b, 0x31, 0x40, 0x45, 0xea, 0xde, 0x69, 0x31, 0x40, 0x46, 0xaf, - 0xd1, 0x7f, 0x31, 0x00, 0x46, 0x4c, 0xc0, 0x4d, 0x31, 0x00, 0x44, 0x33, - 0x83, 0x42, 0x31, 0xc0, 0x00, 0x8d, 0x01, 0xff, 0x45, 0x37, 0xe2, 0x76, - 0x31, 0x00, 0x46, 0xb6, 0xa0, 0x72, 0x31, 0x00, 0x44, 0xf0, 0xbc, 0x44, - 0x31, 0x80, 0x0f, 0xb4, 0x01, 0xff, 0x46, 0x8b, 0xd3, 0x77, 0x31, 0x00, - 0x45, 0x20, 0xcb, 0x73, 0x31, 0x40, 0x8d, 0x01, 0xff, 0x46, 0xb6, 0xa0, - 0x74, 0x31, 0x00, 0x46, 0x1f, 0xcb, 0x75, 0x31, 0x40, 0xe5, 0x5a, 0x31, - 0x40, 0x8d, 0x01, 0xff, 0x45, 0x37, 0xe2, 0x35, 0x31, 0x00, 0x45, 0x35, - 0xa3, 0x36, 0x31, 0x00, 0x47, 0xae, 0xd1, 0x68, 0x31, 0x00, 0x44, 0xf0, - 0xbc, 0x67, 0x31, 0x00, 0x46, 0x1f, 0xcb, 0x66, 0x31, 0x40, 0x8d, 0x01, - 0xff, 0xb0, 0x06, 0x44, 0xf0, 0xbc, 0x6f, 0x31, 0x40, 0x46, 0xaf, 0xd1, - 0x70, 0x31, 0x00, 0x44, 0x33, 0x83, 0x6e, 0x31, 0x40, 0x07, 0x2b, 0x83, - 0x13, 0x46, 0x44, 0xc0, 0x4b, 0x31, 0x00, 0x45, 0xb7, 0xa0, 0x31, 0x31, - 0xc0, 0x00, 0x45, 0xea, 0xde, 0x33, 0x31, 0x40, 0x45, 0x8e, 0xe5, 0x71, - 0x31, 0x00, 0xb0, 0x06, 0x4a, 0xf5, 0xae, 0x79, 0x31, 0x40, 0x46, 0x4c, - 0xc0, 0x84, 0x31, 0x00, 0x44, 0x33, 0x83, 0x78, 0x31, 0x40, 0x44, 0x69, - 0xc9, 0x47, 0x31, 0x40, 0xef, 0x53, 0x31, 0x00, 0xf5, 0x61, 0x31, 0x40, - 0x46, 0x17, 0xcd, 0x4a, 0x31, 0x00, 0x44, 0x18, 0xcd, 0x48, 0x31, 0x40, - 0xe5, 0x50, 0x31, 0x00, 0x44, 0xf1, 0xae, 0x8d, 0x31, 0xc0, 0x00, 0xe5, - 0x8e, 0x31, 0x40, 0x09, 0xd8, 0xba, 0xfb, 0x03, 0x09, 0xd5, 0xbd, 0x01, - 0xff, 0xe1, 0x61, 0x11, 0x80, 0xbd, 0x03, 0xe5, 0x66, 0x11, 0x80, 0x80, - 0x03, 0x46, 0x11, 0x81, 0x60, 0x11, 0x00, 0xe9, 0x75, 0x11, 0x80, 0xaa, - 0x02, 0xef, 0x69, 0x11, 0x80, 0xf1, 0x01, 0x4a, 0xeb, 0xae, 0xa2, 0x11, - 0x00, 0xf5, 0x6e, 0x11, 0x80, 0xbe, 0x01, 0xb7, 0xa5, 0x01, 0xb9, 0x01, - 0xff, 0xe1, 0x63, 0x11, 0x80, 0x88, 0x01, 0xe5, 0x68, 0x11, 0x80, 0x6d, - 0xe9, 0x74, 0x11, 0x80, 0x62, 0xef, 0x6d, 0x11, 0x80, 0x31, 0xf5, 0x72, - 0x11, 0xc0, 0x00, 0x8d, 0x01, 0xff, 0xe1, 0x8e, 0x11, 0x80, 0x20, 0xe5, - 0x90, 0x11, 0x80, 0x17, 0xe9, 0x94, 0x11, 0x00, 0xef, 0xb8, 0xd7, 0x00, - 0xf5, 0x93, 0x11, 0x00, 0x42, 0x4d, 0x00, 0x92, 0x11, 0xc0, 0x00, 0xef, - 0x91, 0x11, 0x40, 0xef, 0x8f, 0x11, 0x40, 0xe5, 0xb7, 0xd7, 0x40, 0x8d, - 0x01, 0xff, 0xe1, 0xb2, 0xd7, 0x80, 0x20, 0x42, 0xf1, 0x0a, 0xb4, 0xd7, - 0x00, 0xe9, 0x88, 0x11, 0x00, 0xef, 0x87, 0x11, 0x00, 0xb9, 0x01, 0xff, - 0xe1, 0x84, 0x11, 0x80, 0x06, 0x42, 0xf1, 0x0a, 0x86, 0x11, 0x40, 0xe5, - 0x85, 0x11, 0x40, 0xe5, 0xb3, 0xd7, 0x40, 0x42, 0x64, 0x08, 0x97, 0x11, - 0x40, 0xef, 0x67, 0x11, 0xc0, 0x00, 0x8d, 0x01, 0xff, 0xef, 0x7d, 0x11, - 0x00, 0xf5, 0x7e, 0x11, 0x00, 0x42, 0x34, 0x22, 0xa5, 0x11, 0x40, 0x8d, - 0x04, 0xe5, 0x64, 0x11, 0x40, 0xef, 0x78, 0x11, 0x00, 0xf5, 0xa4, 0x11, - 0x00, 0x42, 0x60, 0x46, 0x79, 0x11, 0x40, 0xe1, 0x6a, 0x11, 0x80, 0x0d, - 0xe5, 0x70, 0x11, 0x80, 0x04, 0xe9, 0x71, 0x11, 0x40, 0xef, 0x6f, 0x11, - 0x40, 0xe5, 0x6b, 0x11, 0x40, 0x8d, 0x01, 0xff, 0xe1, 0x89, 0x11, 0x80, - 0x1b, 0x45, 0xff, 0xe2, 0x8b, 0x11, 0x00, 0x43, 0x02, 0xf1, 0xb6, 0xd7, - 0x00, 0xf5, 0x8d, 0x11, 0x00, 0x42, 0x4d, 0x00, 0x8c, 0x11, 0xc0, 0x00, - 0xef, 0xb5, 0xd7, 0x40, 0xe5, 0x8a, 0x11, 0x40, 0x8d, 0x04, 0xe5, 0x6c, - 0x11, 0x40, 0xe5, 0x80, 0x11, 0x80, 0x24, 0xef, 0x82, 0x11, 0x80, 0x19, - 0xf5, 0x83, 0x11, 0x00, 0xb9, 0x01, 0xff, 0xe1, 0xa6, 0x11, 0x80, 0x09, - 0xe5, 0x81, 0x11, 0xc0, 0x00, 0xef, 0xb0, 0xd7, 0x40, 0xe5, 0xa7, 0x11, - 0x40, 0x42, 0xbd, 0x06, 0xb1, 0xd7, 0x40, 0xef, 0x7f, 0x11, 0x40, 0x8d, - 0x01, 0xff, 0xe1, 0x98, 0x11, 0x80, 0x3c, 0x42, 0x97, 0x02, 0x9c, 0x11, - 0x00, 0xe9, 0xc4, 0xd7, 0x00, 0xef, 0x9a, 0x11, 0x80, 0x27, 0xf5, 0x9b, - 0x11, 0x00, 0xb9, 0x01, 0xff, 0xe1, 0x99, 0x11, 0x80, 0x11, 0xe5, 0xc0, - 0xd7, 0x80, 0x08, 0xef, 0xc2, 0xd7, 0x00, 0xf5, 0xc3, 0xd7, 0x40, 0xef, - 0xbf, 0xd7, 0x40, 0x42, 0xad, 0x20, 0xbd, 0xd7, 0x00, 0xe5, 0xbe, 0xd7, - 0x40, 0x42, 0xbd, 0x06, 0xc1, 0xd7, 0x40, 0x44, 0xf1, 0xae, 0x9d, 0x11, - 0x40, 0xef, 0x65, 0x11, 0x80, 0x21, 0xf5, 0x73, 0x11, 0xc0, 0x00, 0x8d, - 0x01, 0xff, 0xe1, 0xb9, 0xd7, 0x00, 0xe5, 0xbb, 0xd7, 0x80, 0x08, 0xef, - 0xbc, 0xd7, 0x00, 0xf5, 0x95, 0x11, 0x40, 0xef, 0xba, 0xd7, 0x00, 0xf5, - 0x96, 0x11, 0x40, 0x8d, 0x01, 0xff, 0x42, 0x97, 0x02, 0x7c, 0x11, 0x00, - 0xef, 0x7a, 0x11, 0x00, 0xf5, 0x7b, 0x11, 0x40, 0x8d, 0x23, 0xe5, 0x62, - 0x11, 0x00, 0x44, 0xf1, 0xae, 0x9e, 0x11, 0xc0, 0x00, 0x8d, 0x01, 0xff, - 0xe1, 0xc5, 0xd7, 0x00, 0xe5, 0xc6, 0xd7, 0x80, 0x08, 0xe9, 0xa1, 0x11, - 0x00, 0xf5, 0xa0, 0x11, 0x40, 0xef, 0x9f, 0x11, 0x40, 0x42, 0x97, 0x02, - 0xa3, 0x11, 0x00, 0xef, 0x76, 0x11, 0x00, 0xf5, 0x77, 0x11, 0x40, 0xa3, - 0xd7, 0x07, 0x45, 0x35, 0xa3, 0xc2, 0x11, 0x80, 0xb4, 0x07, 0x45, 0x68, - 0xc9, 0xbc, 0x11, 0x80, 0x95, 0x07, 0xab, 0xb3, 0x06, 0x45, 0x8e, 0xe5, - 0xb7, 0x11, 0x80, 0xd3, 0x05, 0x45, 0xfc, 0xe5, 0xab, 0x11, 0x80, 0x8d, - 0x05, 0xb0, 0x8e, 0x04, 0x45, 0x41, 0xe7, 0xaf, 0x11, 0x80, 0xc0, 0x02, - 0xb3, 0x89, 0x01, 0xb4, 0x44, 0x02, 0x4d, 0x00, 0x01, 0xff, 0x49, 0x31, - 0xa3, 0xf9, 0x11, 0x00, 0x46, 0x24, 0xca, 0xf0, 0x11, 0xc0, 0x00, 0x8d, - 0x01, 0xff, 0x45, 0x35, 0xa3, 0xf6, 0xd7, 0x00, 0xab, 0x1b, 0x45, 0x8e, - 0xe5, 0xf5, 0xd7, 0x00, 0x47, 0xae, 0xd1, 0xf2, 0x11, 0x00, 0xb3, 0x01, - 0xff, 0x43, 0x16, 0x41, 0xf1, 0x11, 0x00, 0x4a, 0xb2, 0xa0, 0xed, 0x11, - 0x40, 0x46, 0x44, 0xc0, 0xef, 0x11, 0x00, 0x45, 0xb7, 0xa0, 0xec, 0x11, - 0x40, 0x46, 0x8b, 0xd3, 0xc0, 0x11, 0x00, 0x45, 0x20, 0xcb, 0xae, 0x11, - 0xc0, 0x00, 0x8d, 0x01, 0xff, 0xa3, 0x25, 0x46, 0xb6, 0xa0, 0xca, 0x11, - 0x00, 0x45, 0x32, 0x83, 0xcf, 0xd7, 0x00, 0x45, 0x41, 0xe7, 0xcb, 0x11, - 0x00, 0x44, 0xf0, 0xbc, 0xd0, 0xd7, 0x80, 0x06, 0x47, 0x8a, 0xd3, 0xd4, - 0xd7, 0x40, 0x47, 0xfb, 0xca, 0xd1, 0xd7, 0x40, 0x46, 0x17, 0xcd, 0xd3, - 0xd7, 0x00, 0x44, 0x18, 0xcd, 0xd2, 0xd7, 0x40, 0x43, 0x16, 0x41, 0xba, - 0x11, 0x80, 0x5f, 0x04, 0x74, 0x2c, 0x01, 0xff, 0x45, 0x37, 0xe2, 0xf9, - 0xd7, 0x00, 0x45, 0x68, 0xc9, 0xee, 0x11, 0x00, 0x46, 0xb6, 0xa0, 0xa9, - 0x11, 0x00, 0x45, 0x8e, 0xe5, 0xe0, 0xd7, 0x00, 0x45, 0xfc, 0xe5, 0xff, - 0x11, 0x00, 0x45, 0x32, 0x83, 0xe6, 0xd7, 0x00, 0x45, 0x41, 0xe7, 0xd0, - 0x11, 0x80, 0x29, 0x44, 0xf0, 0xbc, 0xbb, 0x11, 0x80, 0x13, 0x46, 0x1f, - 0xcb, 0xcd, 0xd7, 0x80, 0x06, 0x48, 0x22, 0xca, 0xee, 0x11, 0x40, 0x46, - 0x86, 0xd5, 0xce, 0xd7, 0x40, 0x8d, 0x01, 0xff, 0x46, 0xb6, 0xa0, 0xec, - 0xd7, 0x00, 0x46, 0x1f, 0xcb, 0xed, 0xd7, 0x40, 0x48, 0x42, 0xc0, 0xd7, - 0xd7, 0x40, 0x8d, 0x01, 0xff, 0xa3, 0x3d, 0x45, 0x35, 0xa3, 0xf2, 0xd7, - 0x00, 0xab, 0x29, 0x45, 0x8e, 0xe5, 0xea, 0xd7, 0x00, 0xb0, 0x15, 0x45, - 0x41, 0xe7, 0xe9, 0x11, 0x00, 0xb4, 0x01, 0xff, 0x46, 0x8b, 0xd3, 0xf1, - 0xd7, 0x00, 0x45, 0x20, 0xcb, 0xe8, 0x11, 0x40, 0x46, 0xaf, 0xd1, 0xee, - 0xd7, 0x00, 0x44, 0x33, 0x83, 0xea, 0x11, 0x40, 0x4c, 0x2b, 0x83, 0xeb, - 0xd7, 0x00, 0x45, 0xb7, 0xa0, 0xe7, 0x11, 0x40, 0x46, 0x17, 0xcd, 0xf0, - 0xd7, 0x00, 0x44, 0x18, 0xcd, 0xef, 0xd7, 0x40, 0x8d, 0x01, 0xff, 0x45, - 0x35, 0xa3, 0xb6, 0x11, 0x00, 0xab, 0x98, 0x01, 0x45, 0x8e, 0xe5, 0xb1, - 0x11, 0x80, 0x7c, 0x45, 0xfc, 0xe5, 0xcd, 0x11, 0x00, 0xb0, 0x46, 0xb3, - 0x2d, 0xb4, 0x18, 0x02, 0x4d, 0x00, 0x01, 0xff, 0x49, 0x31, 0xa3, 0xd9, - 0x11, 0x80, 0x06, 0x46, 0x24, 0xca, 0xdb, 0xd7, 0x40, 0x46, 0x7a, 0xd5, - 0xdc, 0xd7, 0x40, 0x46, 0x8b, 0xd3, 0xb4, 0x11, 0x00, 0x45, 0x20, 0xcb, - 0xce, 0x11, 0xc0, 0x00, 0x46, 0x7a, 0xd5, 0xcf, 0x11, 0x40, 0x43, 0x16, - 0x41, 0xb3, 0x11, 0x00, 0x04, 0x74, 0x2c, 0x01, 0xff, 0x46, 0xb6, 0xa0, - 0xd5, 0xd7, 0x00, 0x44, 0xf0, 0xbc, 0xd6, 0x11, 0x40, 0x46, 0xaf, 0xd1, - 0xd7, 0x11, 0x00, 0x46, 0x4c, 0xc0, 0xb5, 0x11, 0x00, 0x44, 0x33, 0x83, - 0xb2, 0x11, 0xc0, 0x00, 0x8d, 0x01, 0xff, 0x45, 0x35, 0xa3, 0xd4, 0x11, - 0x00, 0x47, 0x4b, 0xc0, 0xda, 0xd7, 0x00, 0x44, 0xf0, 0xbc, 0xd3, 0x11, - 0x00, 0x46, 0x1f, 0xcb, 0xd9, 0xd7, 0x40, 0x8d, 0x01, 0xff, 0x45, 0x35, - 0xa3, 0xd8, 0xd7, 0x00, 0x46, 0xb6, 0xa0, 0xd1, 0x11, 0x00, 0x44, 0xf0, - 0xbc, 0xd2, 0x11, 0x40, 0x4c, 0x2b, 0x83, 0xd5, 0x11, 0x00, 0x46, 0x44, - 0xc0, 0xd8, 0x11, 0x00, 0x45, 0xb7, 0xa0, 0xb0, 0x11, 0xc0, 0x00, 0x8d, - 0x01, 0xff, 0x45, 0x35, 0xa3, 0xd6, 0xd7, 0x00, 0x44, 0xf0, 0xbc, 0xcc, - 0x11, 0x40, 0x46, 0xaf, 0xd1, 0xeb, 0x11, 0x80, 0x66, 0x46, 0x4c, 0xc0, - 0xc1, 0x11, 0x80, 0x4a, 0x44, 0x33, 0x83, 0xb8, 0x11, 0xc0, 0x00, 0x8d, - 0x01, 0xff, 0xa3, 0x32, 0x45, 0x35, 0xa3, 0xe5, 0x11, 0x00, 0x45, 0x8e, - 0xe5, 0xe5, 0xd7, 0x00, 0x47, 0x4b, 0xc0, 0xe4, 0x11, 0x00, 0x45, 0x41, - 0xe7, 0xe3, 0x11, 0x80, 0x13, 0x44, 0xf0, 0xbc, 0xb9, 0x11, 0x80, 0x06, - 0x46, 0x1f, 0xcb, 0xe3, 0xd7, 0x40, 0x47, 0x1e, 0xcb, 0xe7, 0xd7, 0x40, - 0x48, 0x4a, 0xc0, 0xe4, 0xd7, 0x40, 0x46, 0x17, 0xcd, 0xe9, 0xd7, 0x00, - 0x44, 0x18, 0xcd, 0xe8, 0xd7, 0x40, 0x8d, 0x01, 0xff, 0x45, 0x32, 0x83, - 0xf3, 0x11, 0x00, 0x44, 0xf0, 0xbc, 0xfa, 0xd7, 0x00, 0x47, 0x8a, 0xd3, - 0xfb, 0xd7, 0x40, 0x8d, 0x01, 0xff, 0x4d, 0x2a, 0x83, 0xf4, 0xd7, 0x00, - 0x45, 0x32, 0x83, 0xf3, 0xd7, 0x40, 0x8d, 0x01, 0xff, 0xa3, 0x2d, 0x45, - 0x35, 0xa3, 0xad, 0x11, 0x00, 0x46, 0xb6, 0xa0, 0xc5, 0x11, 0x00, 0x47, - 0xae, 0xd1, 0xc8, 0x11, 0x00, 0x45, 0x41, 0xe7, 0xcb, 0xd7, 0x00, 0x44, - 0xf0, 0xbc, 0xc7, 0x11, 0x00, 0xb4, 0x01, 0xff, 0x46, 0x8b, 0xd3, 0xc9, - 0x11, 0x00, 0x45, 0x20, 0xcb, 0xc6, 0x11, 0x40, 0x46, 0x17, 0xcd, 0xcc, - 0xd7, 0x00, 0x44, 0x18, 0xcd, 0xac, 0x11, 0x40, 0x8d, 0x01, 0xff, 0xa3, - 0x47, 0x45, 0x35, 0xa3, 0xe1, 0x11, 0x00, 0x46, 0xb6, 0xa0, 0xda, 0x11, - 0x00, 0x45, 0xfc, 0xe5, 0xde, 0xd7, 0x00, 0xb0, 0x20, 0x45, 0x41, 0xe7, - 0xdb, 0x11, 0x00, 0xb3, 0x01, 0xff, 0x43, 0x16, 0x41, 0xdd, 0x11, 0x00, - 0x04, 0x74, 0x2c, 0x01, 0xff, 0x45, 0xfc, 0xe5, 0xdf, 0xd7, 0x00, 0x44, - 0xf0, 0xbc, 0xde, 0x11, 0x40, 0x46, 0xaf, 0xd1, 0xdf, 0x11, 0x00, 0x44, - 0x33, 0x83, 0xdc, 0x11, 0xc0, 0x00, 0x45, 0xea, 0xde, 0xe1, 0xd7, 0x40, - 0x46, 0x17, 0xcd, 0xe0, 0x11, 0x00, 0x44, 0x18, 0xcd, 0xe2, 0xd7, 0x40, - 0x07, 0x2b, 0x83, 0x41, 0x46, 0x44, 0xc0, 0xbf, 0x11, 0x00, 0x45, 0xb7, - 0xa0, 0xa8, 0x11, 0xc0, 0x00, 0x8d, 0x01, 0xff, 0x47, 0x16, 0xcd, 0xfc, - 0x11, 0x00, 0x45, 0x35, 0xa3, 0xfe, 0x11, 0x00, 0x47, 0x43, 0xc0, 0xfd, - 0x11, 0x00, 0x45, 0xfc, 0xe5, 0xfa, 0x11, 0x00, 0x45, 0x32, 0x83, 0xfb, - 0x11, 0x00, 0x45, 0x41, 0xe7, 0xc3, 0x11, 0x00, 0x44, 0xf0, 0xbc, 0xaa, - 0x11, 0xc0, 0x00, 0x47, 0xfb, 0xca, 0xc4, 0x11, 0x40, 0x45, 0x8e, 0xe5, - 0xe2, 0x11, 0x00, 0xb0, 0x06, 0x45, 0x41, 0xe7, 0xdd, 0xd7, 0x40, 0x46, - 0x4c, 0xc0, 0xf4, 0x11, 0x00, 0x44, 0x33, 0x83, 0xe6, 0x11, 0x40, 0x8d, - 0x01, 0xff, 0xab, 0x06, 0x4b, 0xb1, 0xa0, 0xed, 0x11, 0x40, 0x46, 0x44, - 0xc0, 0xef, 0x11, 0x00, 0x45, 0xb7, 0xa0, 0xec, 0x11, 0x40, 0x8d, 0x01, - 0xff, 0x45, 0x8e, 0xe5, 0xf7, 0x11, 0x00, 0x45, 0xfc, 0xe5, 0xf5, 0x11, - 0x00, 0x45, 0x32, 0x83, 0xf8, 0x11, 0x00, 0x45, 0x41, 0xe7, 0xf6, 0x11, - 0x40, 0x46, 0x17, 0xcd, 0xbe, 0x11, 0x00, 0x44, 0x18, 0xcd, 0xbd, 0x11, - 0xc0, 0x00, 0x8d, 0x01, 0xff, 0x45, 0x32, 0x83, 0xf7, 0xd7, 0x00, 0x4a, - 0xf5, 0xae, 0xf8, 0xd7, 0x40, 0xa3, 0x83, 0x06, 0x46, 0x11, 0x81, 0x5f, - 0x11, 0x00, 0x45, 0x35, 0xa3, 0x12, 0x11, 0x80, 0xef, 0x05, 0x45, 0x68, - 0xc9, 0x0b, 0x11, 0x80, 0x95, 0x05, 0xab, 0xdb, 0x04, 0x45, 0x8e, 0xe5, - 0x06, 0x11, 0x80, 0xb8, 0x04, 0x45, 0xfc, 0xe5, 0x02, 0x11, 0x80, 0x89, - 0x04, 0xb0, 0xf0, 0x02, 0x45, 0x41, 0xe7, 0x05, 0x11, 0x80, 0x8e, 0x02, - 0xb3, 0x47, 0xb4, 0x11, 0x02, 0x4d, 0x00, 0x01, 0xff, 0x49, 0x31, 0xa3, - 0x59, 0x11, 0x00, 0x46, 0x24, 0xca, 0x4c, 0x11, 0x40, 0x46, 0x8b, 0xd3, - 0x10, 0x11, 0x00, 0x45, 0x20, 0xcb, 0x03, 0x11, 0xc0, 0x00, 0x8d, 0x01, - 0xff, 0x45, 0x37, 0xe2, 0x63, 0xa9, 0x00, 0x46, 0xb6, 0xa0, 0x17, 0x11, - 0x00, 0x45, 0x8e, 0xe5, 0x60, 0xa9, 0x00, 0x45, 0x32, 0x83, 0x61, 0xa9, - 0x00, 0x45, 0x41, 0xe7, 0x5e, 0x11, 0x00, 0x44, 0xf0, 0xbc, 0x62, 0xa9, - 0x40, 0x43, 0x16, 0x41, 0x09, 0x11, 0x80, 0x57, 0x04, 0x74, 0x2c, 0x01, - 0xff, 0x45, 0x37, 0xe2, 0x0d, 0x11, 0x80, 0x45, 0x45, 0x35, 0xa3, 0x58, - 0x11, 0x00, 0x45, 0x68, 0xc9, 0x47, 0x11, 0x00, 0x46, 0xb6, 0xa0, 0x01, - 0x11, 0x00, 0x45, 0xfc, 0xe5, 0x14, 0x11, 0x00, 0x45, 0x32, 0x83, 0x08, - 0x11, 0x00, 0x45, 0x41, 0xe7, 0x19, 0x11, 0x00, 0x44, 0xf0, 0xbc, 0x0a, - 0x11, 0x80, 0x14, 0xb4, 0x06, 0x4b, 0x2f, 0xa3, 0x7c, 0xa9, 0x40, 0x46, - 0x8b, 0xd3, 0x79, 0xa9, 0x00, 0x45, 0x20, 0xcb, 0x04, 0x11, 0x40, 0x46, - 0x86, 0xd5, 0x75, 0xa9, 0x40, 0x46, 0x7a, 0xd5, 0x78, 0xa9, 0x40, 0x8d, - 0x01, 0xff, 0xa3, 0x56, 0x45, 0x35, 0xa3, 0x3b, 0x11, 0x00, 0x45, 0x68, - 0xc9, 0x35, 0x11, 0x00, 0xab, 0x3c, 0x45, 0x8e, 0xe5, 0x31, 0x11, 0x00, - 0x45, 0xfc, 0xe5, 0x2e, 0x11, 0x00, 0xb0, 0x1b, 0x45, 0x41, 0xe7, 0x30, - 0x11, 0x00, 0x49, 0xeb, 0xbc, 0x34, 0x11, 0x00, 0xb4, 0x01, 0xff, 0x46, - 0x8b, 0xd3, 0x39, 0x11, 0x00, 0x45, 0x20, 0xcb, 0x2f, 0x11, 0x40, 0x46, - 0x4c, 0xc0, 0x3a, 0x11, 0x00, 0x44, 0x33, 0x83, 0x32, 0x11, 0xc0, 0x00, - 0x47, 0xfb, 0xca, 0x33, 0x11, 0x40, 0x46, 0x44, 0xc0, 0x38, 0x11, 0x00, - 0x45, 0xb7, 0xa0, 0x2d, 0x11, 0x40, 0x46, 0x17, 0xcd, 0x37, 0x11, 0x00, - 0x44, 0x18, 0xcd, 0x36, 0x11, 0x40, 0x8d, 0x01, 0xff, 0x45, 0x37, 0xe2, - 0x6d, 0xa9, 0x00, 0x45, 0x35, 0xa3, 0x1a, 0x11, 0x00, 0xab, 0x37, 0x45, - 0x8e, 0xe5, 0x68, 0xa9, 0x00, 0x45, 0xfc, 0xe5, 0x18, 0x11, 0x00, 0x45, - 0x32, 0x83, 0x69, 0xa9, 0x00, 0xb3, 0x06, 0x46, 0x1f, 0xcb, 0x66, 0xa9, - 0x40, 0x43, 0x16, 0x41, 0x6c, 0xa9, 0x00, 0x04, 0x74, 0x2c, 0x01, 0xff, - 0x46, 0xb6, 0xa0, 0x65, 0xa9, 0x00, 0x45, 0x32, 0x83, 0x6a, 0xa9, 0x00, - 0x46, 0x1f, 0xcb, 0x67, 0xa9, 0x40, 0x4c, 0x2b, 0x83, 0x6b, 0xa9, 0x00, - 0x46, 0x44, 0xc0, 0x6e, 0xa9, 0x00, 0x45, 0xb7, 0xa0, 0x64, 0xa9, 0x40, - 0x46, 0xaf, 0xd1, 0x40, 0x11, 0x00, 0x46, 0x4c, 0xc0, 0x11, 0x11, 0x80, - 0x7a, 0x44, 0x33, 0x83, 0x07, 0x11, 0xc0, 0x00, 0x8d, 0x01, 0xff, 0xa3, - 0x62, 0x45, 0x35, 0xa3, 0x74, 0xa9, 0x00, 0xab, 0x4e, 0x45, 0xfc, 0xe5, - 0x1f, 0x11, 0x00, 0x47, 0x4b, 0xc0, 0x2a, 0x11, 0x00, 0xb3, 0x0f, 0xb4, - 0x01, 0xff, 0x46, 0x8b, 0xd3, 0x29, 0x11, 0x00, 0x45, 0x20, 0xcb, 0x20, - 0x11, 0x40, 0x43, 0x16, 0x41, 0x21, 0x11, 0x80, 0x06, 0x48, 0xec, 0xbc, - 0x25, 0x11, 0x40, 0x8d, 0x01, 0xff, 0x45, 0x37, 0xe2, 0x26, 0x11, 0x00, - 0x46, 0xb6, 0xa0, 0x22, 0x11, 0x00, 0x45, 0x32, 0x83, 0x24, 0x11, 0x00, - 0xb4, 0x01, 0xff, 0x46, 0x8b, 0xd3, 0x72, 0xa9, 0x00, 0x45, 0x20, 0xcb, - 0x23, 0x11, 0x40, 0x46, 0x44, 0xc0, 0x73, 0xa9, 0x00, 0x45, 0xb7, 0xa0, - 0x1e, 0x11, 0x40, 0x46, 0x17, 0xcd, 0x28, 0x11, 0x00, 0x44, 0x18, 0xcd, - 0x27, 0x11, 0x40, 0x8d, 0x01, 0xff, 0x45, 0x35, 0xa3, 0x7a, 0xa9, 0x00, - 0x45, 0x32, 0x83, 0x56, 0x11, 0x40, 0x8d, 0x01, 0xff, 0x45, 0x37, 0xe2, - 0x5c, 0x11, 0x00, 0x45, 0x35, 0xa3, 0x5d, 0x11, 0x00, 0x46, 0xb6, 0xa0, - 0x13, 0x11, 0x00, 0x45, 0x32, 0x83, 0x16, 0x11, 0x00, 0x44, 0xf0, 0xbc, - 0x5b, 0x11, 0x00, 0x46, 0x1f, 0xcb, 0x15, 0x11, 0x40, 0x8d, 0x01, 0xff, - 0x46, 0xb6, 0xa0, 0x6f, 0xa9, 0x00, 0x45, 0x32, 0x83, 0x1c, 0x11, 0x00, - 0x44, 0xf0, 0xbc, 0x71, 0xa9, 0x00, 0x46, 0x1f, 0xcb, 0x70, 0xa9, 0x40, - 0x07, 0x2b, 0x83, 0x13, 0x46, 0x44, 0xc0, 0x0f, 0x11, 0x00, 0x45, 0xb7, - 0xa0, 0x00, 0x11, 0xc0, 0x00, 0x47, 0x1e, 0xcb, 0x5a, 0x11, 0x40, 0x45, - 0x8e, 0xe5, 0x1d, 0x11, 0x00, 0xb0, 0x0c, 0x45, 0x41, 0xe7, 0x1b, 0x11, - 0x00, 0x4a, 0xf5, 0xae, 0x2c, 0x11, 0x40, 0x46, 0x4c, 0xc0, 0x57, 0x11, - 0x00, 0x44, 0x33, 0x83, 0x2b, 0x11, 0x40, 0x8d, 0x01, 0xff, 0xa3, 0x41, - 0x45, 0x35, 0xa3, 0x77, 0xa9, 0x00, 0x46, 0xb6, 0xa0, 0x41, 0x11, 0x00, - 0x45, 0x8e, 0xe5, 0x43, 0x11, 0x00, 0xb0, 0x1b, 0x45, 0x41, 0xe7, 0x76, - 0xa9, 0x00, 0x44, 0xf0, 0xbc, 0x45, 0x11, 0x00, 0xb4, 0x01, 0xff, 0x46, - 0x8b, 0xd3, 0x4a, 0x11, 0x00, 0x45, 0x20, 0xcb, 0x42, 0x11, 0x40, 0x46, - 0xaf, 0xd1, 0x46, 0x11, 0x00, 0x46, 0x4c, 0xc0, 0x4b, 0x11, 0x00, 0x44, - 0x33, 0x83, 0x44, 0x11, 0x40, 0x46, 0x17, 0xcd, 0x49, 0x11, 0x00, 0x44, - 0x18, 0xcd, 0x48, 0x11, 0x40, 0x45, 0xea, 0xde, 0x7b, 0xa9, 0x40, 0x0a, - 0xcf, 0xa7, 0x54, 0x02, 0x49, 0x00, 0x0d, 0x44, 0x18, 0xcd, 0x0c, 0x11, - 0xc0, 0x00, 0x46, 0x80, 0xd5, 0x4d, 0x11, 0x40, 0x44, 0x19, 0xcd, 0x0e, - 0x11, 0x80, 0x2d, 0x05, 0x77, 0xe8, 0x01, 0xff, 0xa3, 0x1a, 0xb3, 0x01, - 0xff, 0x43, 0x16, 0x41, 0x3c, 0x11, 0x00, 0x04, 0x74, 0x2c, 0x01, 0xff, - 0x45, 0x37, 0xe2, 0x4f, 0x11, 0x00, 0x44, 0xf0, 0xbc, 0x3d, 0x11, 0x40, - 0x46, 0x17, 0xcd, 0x54, 0x11, 0x00, 0x44, 0x18, 0xcd, 0x4e, 0x11, 0x40, - 0x8d, 0x01, 0xff, 0x45, 0x35, 0xa3, 0x53, 0x11, 0x00, 0x47, 0x43, 0xc0, - 0x52, 0x11, 0x40, 0xa3, 0x1a, 0xb3, 0x01, 0xff, 0x43, 0x16, 0x41, 0x3e, - 0x11, 0x00, 0x04, 0x74, 0x2c, 0x01, 0xff, 0x45, 0x37, 0xe2, 0x51, 0x11, - 0x00, 0x44, 0xf0, 0xbc, 0x3f, 0x11, 0x40, 0x46, 0x17, 0xcd, 0x55, 0x11, - 0x00, 0x44, 0x18, 0xcd, 0x50, 0x11, 0x40, 0x0c, 0xd1, 0x89, 0x14, 0x02, - 0x16, 0x00, 0x06, 0x45, 0xcb, 0xca, 0x1d, 0xf9, 0x41, 0xe7, 0x5c, 0xf4, - 0x01, 0x42, 0x0f, 0x07, 0x3e, 0xf9, 0x41, 0x5a, 0x72, 0x1e, 0x1e, 0xf9, - 0x01, 0x58, 0x15, 0x28, 0xf0, 0xfa, 0x41, 0x46, 0x66, 0xd7, 0x54, 0xf3, - 0x01, 0x43, 0x2b, 0x37, 0x28, 0xf5, 0x81, 0x0d, 0xb3, 0x01, 0xff, 0xe1, - 0xac, 0xfa, 0x01, 0x48, 0xba, 0xc8, 0x39, 0xf4, 0x41, 0x05, 0x19, 0x00, - 0x01, 0xff, 0x44, 0x22, 0xdc, 0x92, 0x26, 0x00, 0x46, 0xd6, 0xdc, 0x2d, - 0x26, 0x00, 0x46, 0x4a, 0xde, 0xe0, 0xf6, 0x41, 0x4c, 0xf3, 0x10, 0xed, - 0xff, 0x00, 0x4f, 0xe5, 0x0b, 0xec, 0xff, 0x00, 0x54, 0x5f, 0x41, 0xe8, - 0xff, 0x00, 0x07, 0x9e, 0xce, 0xda, 0x02, 0x0c, 0xaa, 0x1f, 0xc9, 0x02, - 0x08, 0xda, 0xc4, 0x2c, 0x04, 0xc3, 0x00, 0x1c, 0x05, 0xc8, 0x00, 0x0c, - 0x4d, 0x1f, 0x20, 0xea, 0xff, 0x00, 0x4c, 0xe3, 0x10, 0xee, 0xff, 0x40, - 0x4f, 0xb7, 0x67, 0x63, 0xff, 0x00, 0x4b, 0xb8, 0x02, 0xeb, 0xff, 0x40, - 0x4f, 0xb7, 0x67, 0x62, 0xff, 0x00, 0x4b, 0xb8, 0x02, 0xe9, 0xff, 0x40, - 0x80, 0x06, 0x5e, 0xf6, 0x11, 0x70, 0xff, 0x40, 0x07, 0xc1, 0x05, 0x12, - 0x4a, 0xb1, 0x44, 0x65, 0xff, 0x00, 0x56, 0x4b, 0x36, 0x9f, 0xff, 0x00, - 0x51, 0x50, 0x36, 0x9e, 0xff, 0x40, 0xe1, 0x71, 0xff, 0x00, 0xe5, 0x74, - 0xff, 0x00, 0xa8, 0xdc, 0x01, 0xe9, 0x72, 0xff, 0x00, 0xab, 0xc1, 0x01, - 0xad, 0xaa, 0x01, 0xee, 0x9d, 0xff, 0x80, 0x90, 0x01, 0xef, 0x75, 0xff, - 0x00, 0xb2, 0x76, 0xb3, 0x33, 0xb4, 0x1d, 0xf5, 0x73, 0xff, 0x00, 0xb7, - 0x0f, 0xb9, 0x01, 0xff, 0xe1, 0x94, 0xff, 0x00, 0xef, 0x96, 0xff, 0x00, - 0xf5, 0x95, 0xff, 0x40, 0xe1, 0x9c, 0xff, 0x00, 0xef, 0x66, 0xff, 0x40, - 0xe1, 0x80, 0xff, 0x00, 0xe5, 0x83, 0xff, 0x00, 0xe9, 0x81, 0xff, 0x00, - 0xef, 0x84, 0xff, 0x00, 0xf5, 0x82, 0xff, 0x40, 0xe1, 0x7b, 0xff, 0x00, - 0xe5, 0x7e, 0xff, 0x00, 0xe9, 0x7c, 0xff, 0x00, 0x05, 0x0d, 0x07, 0x08, - 0xef, 0x7f, 0xff, 0x00, 0xf5, 0x7d, 0xff, 0x40, 0xe1, 0x67, 0xff, 0x00, - 0xe5, 0x6a, 0xff, 0x00, 0xe9, 0x68, 0xff, 0x00, 0xef, 0x6b, 0xff, 0x00, - 0x42, 0x5c, 0x01, 0x6f, 0xff, 0x00, 0xf5, 0x69, 0xff, 0x00, 0xb9, 0x01, - 0xff, 0xe1, 0x6c, 0xff, 0x00, 0xef, 0x6e, 0xff, 0x00, 0xf5, 0x6d, 0xff, - 0x40, 0xe1, 0x97, 0xff, 0x00, 0xe5, 0x9a, 0xff, 0x00, 0xe9, 0x98, 0xff, - 0x00, 0xef, 0x9b, 0xff, 0x00, 0xf5, 0x99, 0xff, 0x40, 0xe1, 0x85, 0xff, - 0x00, 0xe5, 0x88, 0xff, 0x00, 0xe9, 0x86, 0xff, 0x00, 0xef, 0x89, 0xff, - 0x00, 0xf5, 0x87, 0xff, 0x40, 0xe1, 0x8f, 0xff, 0x00, 0xe5, 0x92, 0xff, - 0x00, 0xe9, 0x90, 0xff, 0x00, 0xef, 0x93, 0xff, 0x00, 0xf5, 0x91, 0xff, - 0x40, 0xe1, 0x76, 0xff, 0x00, 0xe5, 0x79, 0xff, 0x00, 0xe9, 0x77, 0xff, - 0x00, 0xef, 0x7a, 0xff, 0x00, 0xf5, 0x78, 0xff, 0x40, 0xe1, 0x8a, 0xff, - 0x00, 0xe5, 0x8d, 0xff, 0x00, 0xe9, 0x8b, 0xff, 0x00, 0xef, 0x8e, 0xff, - 0x00, 0xf5, 0x8c, 0xff, 0x40, 0x45, 0xe8, 0x04, 0x64, 0xff, 0x00, 0x49, - 0x15, 0x16, 0x61, 0xff, 0x40, 0x46, 0x11, 0x81, 0xa0, 0xff, 0x00, 0x07, - 0xc1, 0x05, 0x01, 0xff, 0xe1, 0xc2, 0xff, 0x80, 0xae, 0x02, 0xa3, 0x9f, - 0x02, 0xe5, 0xc7, 0xff, 0x80, 0x91, 0x02, 0x45, 0x35, 0xa3, 0xbe, 0xff, - 0x00, 0xe9, 0xdc, 0xff, 0x80, 0xff, 0x01, 0xab, 0xe9, 0x01, 0x45, 0x8e, - 0xe5, 0xb1, 0xff, 0x00, 0x45, 0xfc, 0xe5, 0xa4, 0xff, 0x80, 0xcc, 0x01, - 0xef, 0xcc, 0xff, 0x80, 0xc2, 0x01, 0xb0, 0xac, 0x01, 0x45, 0x41, 0xe7, - 0xa9, 0xff, 0x80, 0x76, 0xb3, 0x4b, 0xb4, 0x3d, 0xf5, 0xd3, 0xff, 0x00, - 0xb7, 0x21, 0xb9, 0x01, 0xff, 0xe1, 0xc4, 0xff, 0x80, 0x15, 0xe5, 0xcb, - 0xff, 0x80, 0x0c, 0xe9, 0xdb, 0xff, 0x00, 0xef, 0xd2, 0xff, 0x00, 0xf5, - 0xd7, 0xff, 0x40, 0xef, 0xca, 0xff, 0x40, 0xe5, 0xc5, 0xff, 0x40, 0xe1, - 0xcd, 0xff, 0x80, 0x0d, 0xe5, 0xd5, 0xff, 0x80, 0x04, 0xe9, 0xd6, 0xff, - 0x40, 0xef, 0xd4, 0xff, 0x40, 0xe5, 0xce, 0xff, 0x40, 0x46, 0x8b, 0xd3, - 0xbc, 0xff, 0x00, 0x45, 0x20, 0xcb, 0xa7, 0xff, 0x40, 0x43, 0x16, 0x41, - 0xb5, 0xff, 0x00, 0x04, 0x74, 0x2c, 0x01, 0xff, 0x45, 0x37, 0xe2, 0xb9, - 0xff, 0x00, 0x46, 0xb6, 0xa0, 0xa2, 0xff, 0x00, 0x45, 0x32, 0x83, 0xb3, - 0xff, 0x00, 0x44, 0xf0, 0xbc, 0xb6, 0xff, 0x00, 0x46, 0x1f, 0xcb, 0xa8, - 0xff, 0x40, 0x8d, 0x01, 0xff, 0x45, 0x35, 0xa3, 0xb0, 0xff, 0x00, 0x46, - 0xb6, 0xa0, 0xaa, 0xff, 0x00, 0x45, 0x8e, 0xe5, 0xab, 0xff, 0x00, 0xb0, - 0x0c, 0x44, 0xf0, 0xbc, 0xad, 0xff, 0x00, 0x47, 0x8a, 0xd3, 0xae, 0xff, - 0x40, 0x46, 0x4c, 0xc0, 0xaf, 0xff, 0x00, 0x44, 0x33, 0x83, 0xac, 0xff, - 0x40, 0x46, 0x4c, 0xc0, 0xbd, 0xff, 0x00, 0x44, 0x33, 0x83, 0xb2, 0xff, - 0xc0, 0x00, 0x45, 0xea, 0xde, 0xb4, 0xff, 0x40, 0xe5, 0xcf, 0xff, 0x40, - 0x8d, 0x01, 0xff, 0x45, 0x37, 0xe2, 0xa5, 0xff, 0x00, 0x45, 0x35, 0xa3, - 0xa6, 0xff, 0x40, 0x46, 0x44, 0xc0, 0xbb, 0xff, 0x00, 0x45, 0xb7, 0xa0, - 0xa1, 0xff, 0xc0, 0x00, 0x45, 0xea, 0xde, 0xa3, 0xff, 0x40, 0x44, 0x69, - 0xc9, 0xb7, 0xff, 0x40, 0xef, 0xc6, 0xff, 0x00, 0xf5, 0xda, 0xff, 0x40, - 0x46, 0x17, 0xcd, 0xba, 0xff, 0x00, 0x44, 0x18, 0xcd, 0xb8, 0xff, 0x40, - 0xe5, 0xc3, 0xff, 0x40, 0x80, 0x06, 0x43, 0x2a, 0x27, 0x87, 0xf4, 0x41, - 0x44, 0x22, 0xdc, 0xae, 0xfa, 0x01, 0x45, 0x87, 0x4b, 0x0a, 0x20, 0x40, - 0xa1, 0xd6, 0x42, 0xa5, 0xfa, 0x38, 0x44, 0x5f, 0x7b, 0x7b, 0xf4, 0x01, - 0xa9, 0xd1, 0x38, 0xac, 0x9b, 0x33, 0xaf, 0xb6, 0x31, 0xb2, 0xd7, 0x0e, - 0xb5, 0x01, 0xff, 0x02, 0x17, 0x00, 0xc3, 0x0e, 0xa9, 0xb4, 0x0e, 0x07, - 0x54, 0xcf, 0xf9, 0x09, 0x0c, 0xfd, 0x90, 0xef, 0x06, 0xb2, 0x01, 0xff, - 0x06, 0x1a, 0xdb, 0xf4, 0x02, 0x0a, 0x5d, 0xb0, 0x01, 0xff, 0x16, 0x6d, - 0x32, 0xd2, 0x02, 0x06, 0xc4, 0x06, 0x8b, 0x02, 0x07, 0xc1, 0x05, 0x52, - 0x05, 0x2f, 0x03, 0x42, 0x06, 0x6c, 0x38, 0x01, 0xff, 0x4b, 0x72, 0x38, - 0x29, 0x61, 0x01, 0x05, 0x2f, 0x03, 0x01, 0xff, 0xa1, 0x24, 0xe5, 0x23, - 0x61, 0x81, 0x1b, 0xe9, 0x1f, 0x61, 0x81, 0x12, 0xef, 0x26, 0x61, 0x81, - 0x09, 0xf5, 0x21, 0x61, 0xc1, 0x00, 0xf5, 0x22, 0x61, 0x41, 0xef, 0x27, - 0x61, 0x41, 0xe9, 0x20, 0x61, 0x41, 0xe5, 0x24, 0x61, 0x41, 0xe1, 0x1e, - 0x61, 0x01, 0xe9, 0x25, 0x61, 0x01, 0xf5, 0x28, 0x61, 0x41, 0x48, 0xd0, - 0x15, 0x2d, 0x61, 0x01, 0x48, 0xca, 0xc8, 0x2f, 0x61, 0x41, 0xe1, 0x00, - 0x61, 0x01, 0xa2, 0xa4, 0x01, 0xa3, 0x97, 0x01, 0xa4, 0x7f, 0xa7, 0x73, - 0x42, 0x22, 0x00, 0x0a, 0x61, 0x01, 0xaa, 0x61, 0xab, 0x55, 0x42, 0x74, - 0x00, 0x1c, 0x61, 0x01, 0x42, 0x6c, 0x00, 0x19, 0x61, 0x01, 0xae, 0x3d, - 0xb0, 0x31, 0x42, 0x71, 0x00, 0x1b, 0x61, 0x01, 0x42, 0x15, 0x06, 0x1d, - 0x61, 0x01, 0xb4, 0x0c, 0x42, 0xa6, 0x0a, 0x0f, 0x61, 0x01, 0x42, 0x34, - 0x22, 0x1a, 0x61, 0x41, 0xe1, 0x10, 0x61, 0x01, 0x42, 0x22, 0x00, 0x11, - 0x61, 0x01, 0xb4, 0x01, 0xff, 0xe1, 0x0b, 0x61, 0x01, 0x42, 0x22, 0x00, - 0x0c, 0x61, 0x41, 0xe1, 0x15, 0x61, 0x01, 0x42, 0x22, 0x00, 0x16, 0x61, - 0x41, 0xe1, 0x14, 0x61, 0x01, 0x42, 0x24, 0x02, 0x05, 0x61, 0x41, 0xe1, - 0x01, 0x61, 0x01, 0x42, 0x22, 0x00, 0x02, 0x61, 0x41, 0xe1, 0x08, 0x61, - 0x01, 0x42, 0x22, 0x00, 0x09, 0x61, 0x41, 0xe1, 0x03, 0x61, 0x01, 0x42, - 0x22, 0x00, 0x04, 0x61, 0x41, 0xe1, 0x12, 0x61, 0x01, 0xa4, 0x06, 0x42, - 0x22, 0x00, 0x13, 0x61, 0x41, 0xe1, 0x0d, 0x61, 0x01, 0x42, 0x22, 0x00, - 0x0e, 0x61, 0x41, 0xe1, 0x06, 0x61, 0x01, 0x42, 0x22, 0x00, 0x07, 0x61, - 0x41, 0xe1, 0x17, 0x61, 0x01, 0x42, 0x22, 0x00, 0x18, 0x61, 0x41, 0x45, - 0xc3, 0x0a, 0x38, 0x61, 0x01, 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0x39, 0x61, - 0x01, 0x43, 0xbf, 0x0a, 0x31, 0x61, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, - 0xa1, 0x1d, 0x30, 0x61, 0x41, 0x44, 0x25, 0x01, 0x33, 0x61, 0x01, 0x42, - 0x15, 0x02, 0x32, 0x61, 0x41, 0x44, 0x27, 0x1d, 0x37, 0x61, 0x01, 0x42, - 0x60, 0x25, 0x36, 0x61, 0x41, 0x43, 0xa7, 0x05, 0x35, 0x61, 0x01, 0x43, - 0xcb, 0x06, 0x34, 0x61, 0x41, 0x42, 0x22, 0x00, 0x2c, 0x61, 0x01, 0x42, - 0x71, 0x00, 0x2e, 0x61, 0x01, 0x42, 0xa6, 0x0a, 0x2b, 0x61, 0x01, 0x42, - 0x34, 0x22, 0x2a, 0x61, 0x41, 0xa1, 0xe4, 0x03, 0x06, 0xc4, 0x06, 0x9d, - 0x03, 0x48, 0xfa, 0xc2, 0x74, 0x0a, 0x00, 0x43, 0x95, 0x0a, 0x72, 0x0a, - 0x00, 0x07, 0xc1, 0x05, 0x6f, 0x05, 0x2f, 0x03, 0x3d, 0x45, 0x27, 0xe8, - 0x70, 0x0a, 0x00, 0x43, 0x70, 0x00, 0x73, 0x0a, 0x00, 0x0b, 0xd1, 0x75, - 0x01, 0xff, 0xa1, 0x1e, 0x42, 0x27, 0x01, 0x47, 0x0a, 0x00, 0xe9, 0x3f, - 0x0a, 0x80, 0x0f, 0x42, 0x69, 0x05, 0x4b, 0x0a, 0x00, 0xf5, 0x41, 0x0a, - 0xc0, 0x00, 0xf5, 0x42, 0x0a, 0x40, 0xe9, 0x40, 0x0a, 0x40, 0xe1, 0x3e, - 0x0a, 0x00, 0xe9, 0x48, 0x0a, 0x00, 0xf5, 0x4c, 0x0a, 0x40, 0x4a, 0x27, - 0xa5, 0x01, 0x0a, 0x00, 0x45, 0xb5, 0x69, 0x02, 0x0a, 0x00, 0x45, 0x5a, - 0x3e, 0x3c, 0x0a, 0x00, 0x45, 0x9a, 0xe8, 0x51, 0x0a, 0x00, 0x02, 0x02, - 0x00, 0x06, 0x46, 0x62, 0xde, 0x75, 0x0a, 0x40, 0x44, 0x5d, 0x23, 0x4d, - 0x0a, 0x00, 0x45, 0xa3, 0x4a, 0x03, 0x0a, 0x40, 0xe1, 0x05, 0x0a, 0x80, - 0x8c, 0x02, 0xa2, 0xff, 0x01, 0xa3, 0xf2, 0x01, 0xa4, 0xd9, 0x01, 0x42, - 0x27, 0x01, 0x0f, 0x0a, 0x00, 0x42, 0xe1, 0x07, 0x5e, 0x0a, 0x00, 0xa7, - 0xb9, 0x01, 0x42, 0x22, 0x00, 0x39, 0x0a, 0x00, 0xe9, 0x07, 0x0a, 0x80, - 0xa9, 0x01, 0xaa, 0x9c, 0x01, 0xab, 0x88, 0x01, 0xac, 0x7c, 0x42, 0x6c, - 0x00, 0x2e, 0x0a, 0x00, 0xae, 0x5e, 0x42, 0x69, 0x05, 0x13, 0x0a, 0x00, - 0xb0, 0x4c, 0xb2, 0x40, 0xb3, 0x34, 0xb4, 0x1b, 0xf5, 0x09, 0x0a, 0x80, - 0x12, 0x42, 0xa6, 0x0a, 0x35, 0x0a, 0x00, 0x42, 0x34, 0x22, 0x2f, 0x0a, - 0x00, 0x42, 0x59, 0x00, 0x5b, 0x0a, 0x40, 0xf5, 0x0a, 0x0a, 0x40, 0xe1, - 0x24, 0x0a, 0x00, 0x42, 0x22, 0x00, 0x25, 0x0a, 0x00, 0xb4, 0x01, 0xff, - 0xe1, 0x1f, 0x0a, 0x00, 0x42, 0x22, 0x00, 0x20, 0x0a, 0x40, 0xe1, 0x38, - 0x0a, 0x00, 0x42, 0x22, 0x00, 0x36, 0x0a, 0x40, 0xe1, 0x30, 0x0a, 0x00, - 0x42, 0x71, 0x00, 0x5c, 0x0a, 0x40, 0xe1, 0x2a, 0x0a, 0x00, 0x42, 0x22, - 0x00, 0x2b, 0x0a, 0x40, 0xe1, 0x28, 0x0a, 0x00, 0x42, 0x24, 0x02, 0x19, - 0x0a, 0x00, 0x42, 0xff, 0x04, 0x23, 0x0a, 0x00, 0x42, 0x34, 0x22, 0x1e, - 0x0a, 0x40, 0xe1, 0x32, 0x0a, 0x00, 0x42, 0x74, 0x00, 0x33, 0x0a, 0x40, - 0xe1, 0x15, 0x0a, 0x00, 0xa8, 0x01, 0xff, 0xe1, 0x16, 0x0a, 0x00, 0x42, - 0x22, 0x00, 0x59, 0x0a, 0x40, 0xe1, 0x1c, 0x0a, 0x00, 0x42, 0x22, 0x00, - 0x1d, 0x0a, 0x40, 0xe9, 0x08, 0x0a, 0x40, 0xe1, 0x17, 0x0a, 0x00, 0xa8, - 0x01, 0xff, 0xe1, 0x18, 0x0a, 0x00, 0x42, 0x22, 0x00, 0x5a, 0x0a, 0x40, - 0xe1, 0x26, 0x0a, 0x00, 0xa4, 0x06, 0x42, 0x22, 0x00, 0x27, 0x0a, 0x40, - 0xe1, 0x21, 0x0a, 0x00, 0x42, 0x22, 0x00, 0x22, 0x0a, 0x40, 0xe1, 0x1a, - 0x0a, 0x00, 0x42, 0x22, 0x00, 0x1b, 0x0a, 0x40, 0xe1, 0x2c, 0x0a, 0x00, - 0x42, 0x22, 0x00, 0x2d, 0x0a, 0x40, 0xe1, 0x06, 0x0a, 0x00, 0xe9, 0x10, - 0x0a, 0x00, 0xf5, 0x14, 0x0a, 0x40, 0x45, 0xc3, 0x0a, 0x6e, 0x0a, 0x00, - 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0x6f, 0x0a, 0x00, 0x43, 0xbf, 0x0a, 0x67, - 0x0a, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xa1, 0x1d, 0x66, 0x0a, 0x40, - 0x44, 0x25, 0x01, 0x69, 0x0a, 0x00, 0x42, 0x15, 0x02, 0x68, 0x0a, 0x40, - 0x44, 0x27, 0x1d, 0x6d, 0x0a, 0x00, 0x42, 0x60, 0x25, 0x6c, 0x0a, 0x40, - 0x43, 0xa7, 0x05, 0x6b, 0x0a, 0x00, 0x43, 0xcb, 0x06, 0x6a, 0x0a, 0x40, - 0x50, 0x94, 0x56, 0x76, 0x0a, 0x00, 0x44, 0x46, 0xec, 0x71, 0x0a, 0x40, - 0x06, 0xc4, 0x06, 0xbe, 0x02, 0x07, 0xc1, 0x05, 0x50, 0x42, 0xe9, 0x04, - 0x98, 0x1d, 0x01, 0x05, 0x2f, 0x03, 0x3a, 0xb6, 0x01, 0xff, 0x45, 0x5c, - 0x23, 0x97, 0x1d, 0x01, 0x0a, 0xd2, 0x75, 0x01, 0xff, 0xa1, 0x1e, 0x42, - 0x27, 0x01, 0x90, 0x1d, 0x01, 0xe9, 0x8b, 0x1d, 0x81, 0x0f, 0x42, 0x69, - 0x05, 0x93, 0x1d, 0x01, 0xf5, 0x8d, 0x1d, 0xc1, 0x00, 0xf5, 0x8e, 0x1d, - 0x41, 0xe9, 0x8c, 0x1d, 0x41, 0xe1, 0x8a, 0x1d, 0x01, 0xe9, 0x91, 0x1d, - 0x01, 0xf5, 0x94, 0x1d, 0x41, 0x48, 0xd0, 0x15, 0x95, 0x1d, 0x01, 0x47, - 0xa1, 0x4a, 0x96, 0x1d, 0x41, 0xe1, 0x60, 0x1d, 0x81, 0xd8, 0x01, 0xa2, - 0xcb, 0x01, 0xa3, 0xbe, 0x01, 0xa4, 0xa5, 0x01, 0x42, 0x27, 0x01, 0x67, - 0x1d, 0x01, 0xa7, 0x92, 0x01, 0x42, 0x22, 0x00, 0x87, 0x1d, 0x01, 0xe9, - 0x62, 0x1d, 0x81, 0x82, 0x01, 0xaa, 0x76, 0xab, 0x6a, 0xac, 0x5e, 0x42, - 0x6c, 0x00, 0x70, 0x1d, 0x01, 0xae, 0x4c, 0x42, 0x69, 0x05, 0x6a, 0x1d, - 0x01, 0xb0, 0x3a, 0x42, 0x71, 0x00, 0x88, 0x1d, 0x01, 0x42, 0x15, 0x06, - 0x89, 0x1d, 0x01, 0xb4, 0x15, 0xf5, 0x64, 0x1d, 0x81, 0x0c, 0x42, 0xa6, - 0x0a, 0x6d, 0x1d, 0x01, 0x42, 0x34, 0x22, 0x6c, 0x1d, 0x41, 0xf5, 0x65, - 0x1d, 0x41, 0xe1, 0x73, 0x1d, 0x01, 0x42, 0x22, 0x00, 0x74, 0x1d, 0x01, - 0xb4, 0x01, 0xff, 0xe1, 0x7d, 0x1d, 0x01, 0x42, 0x22, 0x00, 0x7e, 0x1d, - 0x41, 0xe1, 0x85, 0x1d, 0x01, 0x42, 0x22, 0x00, 0x86, 0x1d, 0x41, 0xe1, - 0x7a, 0x1d, 0x01, 0x42, 0x24, 0x02, 0x84, 0x1d, 0x41, 0xe1, 0x75, 0x1d, - 0x01, 0x42, 0x74, 0x00, 0x7f, 0x1d, 0x41, 0xe1, 0x71, 0x1d, 0x01, 0x42, - 0x22, 0x00, 0x72, 0x1d, 0x41, 0xe1, 0x80, 0x1d, 0x01, 0x42, 0x22, 0x00, - 0x81, 0x1d, 0x41, 0xe9, 0x63, 0x1d, 0x41, 0xe1, 0x76, 0x1d, 0x01, 0x42, - 0x22, 0x00, 0x77, 0x1d, 0x41, 0xe1, 0x78, 0x1d, 0x01, 0xa4, 0x06, 0x42, - 0x22, 0x00, 0x79, 0x1d, 0x41, 0xe1, 0x82, 0x1d, 0x01, 0x42, 0x22, 0x00, - 0x83, 0x1d, 0x41, 0xe1, 0x7b, 0x1d, 0x01, 0x42, 0x22, 0x00, 0x7c, 0x1d, - 0x41, 0xe1, 0x6e, 0x1d, 0x01, 0x42, 0x22, 0x00, 0x6f, 0x1d, 0x41, 0xe1, - 0x61, 0x1d, 0x01, 0xe9, 0x68, 0x1d, 0x01, 0xf5, 0x6b, 0x1d, 0x41, 0x45, - 0xc3, 0x0a, 0xa8, 0x1d, 0x01, 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0xa9, 0x1d, - 0x01, 0x43, 0xbf, 0x0a, 0xa1, 0x1d, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, - 0xa1, 0x1d, 0xa0, 0x1d, 0x41, 0x44, 0x25, 0x01, 0xa3, 0x1d, 0x01, 0x42, - 0x15, 0x02, 0xa2, 0x1d, 0x41, 0x44, 0x27, 0x1d, 0xa7, 0x1d, 0x01, 0x42, - 0x60, 0x25, 0xa6, 0x1d, 0x41, 0x43, 0xa7, 0x05, 0xa5, 0x1d, 0x01, 0x43, - 0xcb, 0x06, 0xa4, 0x1d, 0x41, 0x51, 0x93, 0x56, 0xf0, 0x0a, 0x00, 0x06, - 0xc4, 0x06, 0xe9, 0x03, 0x07, 0xc1, 0x05, 0xc6, 0x01, 0x42, 0xe9, 0x04, - 0xd0, 0x0a, 0x00, 0x4a, 0xf6, 0x7e, 0xf1, 0x0a, 0x00, 0x05, 0x2f, 0x03, - 0x61, 0x06, 0x6c, 0x38, 0x01, 0xff, 0x07, 0xba, 0x5f, 0x50, 0x05, 0x2f, - 0x03, 0x01, 0xff, 0xa1, 0x3d, 0x07, 0xba, 0x5f, 0x31, 0xe5, 0xc7, 0x0a, - 0x00, 0xe9, 0xbf, 0x0a, 0x80, 0x24, 0xef, 0xcb, 0x0a, 0x00, 0xf5, 0xc1, - 0x0a, 0x80, 0x17, 0x08, 0x9b, 0xbe, 0x01, 0xff, 0xec, 0xe2, 0x0a, 0x80, - 0x09, 0xf2, 0xc3, 0x0a, 0xc0, 0x00, 0xf2, 0xc4, 0x0a, 0x40, 0xec, 0xe3, - 0x0a, 0x40, 0xf5, 0xc2, 0x0a, 0x40, 0xe9, 0xc0, 0x0a, 0x40, 0xe5, 0xc5, - 0x0a, 0x00, 0xef, 0xc9, 0x0a, 0x40, 0xe1, 0xbe, 0x0a, 0x00, 0xe9, 0xc8, - 0x0a, 0x00, 0xf5, 0xcc, 0x0a, 0x40, 0xe5, 0x8d, 0x0a, 0x00, 0xef, 0x91, - 0x0a, 0x40, 0xa1, 0x47, 0xa3, 0x39, 0x46, 0xf0, 0xda, 0xfc, 0x0a, 0x00, - 0x45, 0x5a, 0x3e, 0xbc, 0x0a, 0x00, 0xb3, 0x1f, 0xb4, 0x11, 0x02, 0x02, - 0x00, 0x01, 0xff, 0x44, 0x5d, 0x23, 0xcd, 0x0a, 0x00, 0x45, 0xa3, 0x4a, - 0x83, 0x0a, 0x40, 0x54, 0xff, 0x41, 0xfd, 0x0a, 0x00, 0x55, 0x50, 0x3e, - 0xff, 0x0a, 0x40, 0x45, 0xb8, 0xe3, 0xfb, 0x0a, 0x00, 0x44, 0x00, 0xe8, - 0xfa, 0x0a, 0x40, 0x4a, 0x50, 0x23, 0x81, 0x0a, 0x00, 0x51, 0x54, 0x3e, - 0xfe, 0x0a, 0x40, 0x47, 0xd1, 0x15, 0x82, 0x0a, 0x00, 0x47, 0xf2, 0x86, - 0xbd, 0x0a, 0x40, 0xe1, 0x85, 0x0a, 0x80, 0x8c, 0x02, 0xa2, 0xff, 0x01, - 0xa3, 0xf2, 0x01, 0xa4, 0xd9, 0x01, 0xe5, 0x8f, 0x0a, 0x00, 0xa7, 0xc8, - 0x01, 0x42, 0x22, 0x00, 0xb9, 0x0a, 0x00, 0xe9, 0x87, 0x0a, 0x80, 0xb8, - 0x01, 0xaa, 0xab, 0x01, 0xab, 0x9e, 0x01, 0xac, 0x91, 0x01, 0x42, 0x6c, - 0x00, 0xae, 0x0a, 0x00, 0xae, 0x73, 0xef, 0x93, 0x0a, 0x00, 0xb0, 0x63, - 0x42, 0x71, 0x00, 0xb0, 0x0a, 0x00, 0xb3, 0x4b, 0xb4, 0x32, 0xf5, 0x89, - 0x0a, 0x80, 0x29, 0xb6, 0x0c, 0x42, 0x34, 0x22, 0xaf, 0x0a, 0x00, 0x43, - 0x44, 0xbe, 0xf9, 0x0a, 0x40, 0xe1, 0xb5, 0x0a, 0x00, 0x07, 0x9c, 0xbe, - 0x01, 0xff, 0xec, 0x8c, 0x0a, 0x80, 0x09, 0xf2, 0x8b, 0x0a, 0xc0, 0x00, - 0xf2, 0xe0, 0x0a, 0x40, 0xec, 0xe1, 0x0a, 0x40, 0xf5, 0x8a, 0x0a, 0x40, - 0xe1, 0xa4, 0x0a, 0x00, 0x42, 0x22, 0x00, 0xa5, 0x0a, 0x00, 0xb4, 0x01, - 0xff, 0xe1, 0x9f, 0x0a, 0x00, 0x42, 0x22, 0x00, 0xa0, 0x0a, 0x40, 0xe1, - 0xb8, 0x0a, 0x00, 0x42, 0x22, 0x00, 0xb6, 0x0a, 0x00, 0x42, 0x15, 0x06, - 0xb7, 0x0a, 0x40, 0xe1, 0xaa, 0x0a, 0x00, 0x42, 0x22, 0x00, 0xab, 0x0a, - 0x40, 0xe1, 0xa8, 0x0a, 0x00, 0x42, 0x24, 0x02, 0x99, 0x0a, 0x00, 0x42, - 0xff, 0x04, 0xa3, 0x0a, 0x00, 0x42, 0x34, 0x22, 0x9e, 0x0a, 0x40, 0xe1, - 0xb2, 0x0a, 0x00, 0x42, 0x74, 0x00, 0xb3, 0x0a, 0x40, 0xe1, 0x95, 0x0a, - 0x00, 0x42, 0x22, 0x00, 0x96, 0x0a, 0x40, 0xe1, 0x9c, 0x0a, 0x00, 0x42, - 0x22, 0x00, 0x9d, 0x0a, 0x40, 0xe9, 0x88, 0x0a, 0x40, 0xe1, 0x97, 0x0a, - 0x00, 0x42, 0x22, 0x00, 0x98, 0x0a, 0x40, 0xe1, 0xa6, 0x0a, 0x00, 0xa4, - 0x06, 0x42, 0x22, 0x00, 0xa7, 0x0a, 0x40, 0xe1, 0xa1, 0x0a, 0x00, 0x42, - 0x22, 0x00, 0xa2, 0x0a, 0x40, 0xe1, 0x9a, 0x0a, 0x00, 0x42, 0x22, 0x00, - 0x9b, 0x0a, 0x40, 0xe1, 0xac, 0x0a, 0x00, 0x42, 0x22, 0x00, 0xad, 0x0a, - 0x40, 0xe1, 0x86, 0x0a, 0x00, 0xe9, 0x90, 0x0a, 0x00, 0xf5, 0x94, 0x0a, - 0x40, 0x45, 0xc3, 0x0a, 0xee, 0x0a, 0x00, 0xa6, 0x2e, 0x44, 0x46, 0x2a, - 0xef, 0x0a, 0x00, 0x43, 0xbf, 0x0a, 0xe7, 0x0a, 0x00, 0xb3, 0x14, 0xb4, - 0x06, 0x44, 0xa1, 0x1d, 0xe6, 0x0a, 0x40, 0x44, 0x25, 0x01, 0xe9, 0x0a, - 0x00, 0x42, 0x15, 0x02, 0xe8, 0x0a, 0x40, 0x44, 0x27, 0x1d, 0xed, 0x0a, - 0x00, 0x42, 0x60, 0x25, 0xec, 0x0a, 0x40, 0x43, 0xa7, 0x05, 0xeb, 0x0a, - 0x00, 0x43, 0xcb, 0x06, 0xea, 0x0a, 0x40, 0x46, 0xf6, 0xd7, 0xae, 0xf9, - 0x01, 0x43, 0xe3, 0x12, 0xb8, 0xf3, 0x41, 0x48, 0xf5, 0x99, 0xb2, 0x20, - 0x00, 0x45, 0x9b, 0xe2, 0x82, 0xf4, 0x41, 0xa1, 0x81, 0x1f, 0xa5, 0x4d, - 0xa9, 0x19, 0xaf, 0x01, 0xff, 0x03, 0x11, 0x15, 0x06, 0x4a, 0x39, 0xb1, - 0x97, 0xf4, 0x41, 0x44, 0xb9, 0x00, 0xd2, 0x2b, 0x00, 0x49, 0x36, 0x20, - 0x1d, 0x00, 0x40, 0x4b, 0x15, 0x9d, 0x2c, 0xf6, 0x01, 0x06, 0x45, 0xa0, - 0x01, 0xff, 0x5a, 0xc0, 0x1e, 0x38, 0xf6, 0x01, 0x44, 0xe1, 0x07, 0x00, - 0xf6, 0xc1, 0x00, 0x06, 0x50, 0x00, 0x01, 0xff, 0x5b, 0x27, 0x1c, 0x2a, - 0xf9, 0x01, 0xb3, 0x01, 0xff, 0x4b, 0xcf, 0x1e, 0x01, 0xf6, 0x01, 0x48, - 0xb2, 0xc8, 0x29, 0xf9, 0x41, 0x0a, 0x8a, 0x00, 0xce, 0x1c, 0xa5, 0x06, - 0x47, 0xe1, 0xd4, 0x76, 0xfa, 0x41, 0x02, 0xbc, 0x00, 0x1d, 0x02, 0x92, - 0x00, 0x01, 0xff, 0x45, 0x47, 0xe1, 0x4f, 0xf3, 0x01, 0x44, 0x0e, 0xec, - 0xd7, 0xf4, 0x01, 0x45, 0x24, 0x21, 0x9a, 0xf4, 0x01, 0x45, 0x96, 0xe7, - 0x57, 0xf9, 0x41, 0xa1, 0xde, 0x18, 0x4b, 0x8a, 0x97, 0xd0, 0x03, 0x00, - 0x08, 0xb9, 0x05, 0xbe, 0x10, 0xa4, 0xf7, 0x0f, 0xa6, 0xe8, 0x0f, 0x4b, - 0x55, 0x9a, 0x88, 0x01, 0x01, 0x02, 0x9e, 0x01, 0xb8, 0x0e, 0xab, 0x9b, - 0x0e, 0xac, 0xa9, 0x0d, 0xad, 0x9a, 0x0d, 0x4c, 0xb5, 0x5b, 0x74, 0x03, - 0x00, 0xaf, 0xe8, 0x0c, 0xb0, 0xaf, 0x0c, 0x4d, 0xd6, 0x33, 0x7e, 0x03, - 0x00, 0xb2, 0x8f, 0x0c, 0xb3, 0xf4, 0x01, 0xb4, 0xb5, 0x01, 0x0d, 0xf0, - 0x87, 0x9e, 0x01, 0xb6, 0x1a, 0x4b, 0x0e, 0xa3, 0x85, 0x01, 0x01, 0xb9, - 0x06, 0x49, 0x58, 0xbf, 0x8a, 0x01, 0x41, 0x48, 0x1a, 0xbf, 0x79, 0x01, - 0x01, 0x4c, 0xf0, 0x4d, 0x7a, 0x03, 0x40, 0x44, 0xb6, 0x2f, 0xef, 0x1f, - 0x00, 0x15, 0x58, 0x3c, 0x01, 0xff, 0xd1, 0x00, 0xd2, 0x81, 0x4a, 0xd2, - 0x01, 0xd2, 0x81, 0x31, 0xd3, 0x02, 0xd2, 0x01, 0xd4, 0x03, 0xd2, 0x01, - 0xd5, 0x04, 0xd2, 0x81, 0x10, 0xd6, 0x05, 0xd2, 0x01, 0xd7, 0x06, 0xd2, - 0x01, 0xd8, 0x07, 0xd2, 0x01, 0xd9, 0x08, 0xd2, 0x41, 0xd0, 0x18, 0xd2, - 0x01, 0xd1, 0x19, 0xd2, 0x01, 0xd2, 0x1a, 0xd2, 0x01, 0xd3, 0x1b, 0xd2, - 0x01, 0xd4, 0x1c, 0xd2, 0x41, 0xd0, 0x13, 0xd2, 0x01, 0xd1, 0x14, 0xd2, - 0x01, 0xd2, 0x15, 0xd2, 0x01, 0xd3, 0x16, 0xd2, 0x01, 0xd4, 0x17, 0xd2, - 0x41, 0xd0, 0x09, 0xd2, 0x01, 0xd1, 0x0a, 0xd2, 0x01, 0xd2, 0x0b, 0xd2, - 0x01, 0xd3, 0x0c, 0xd2, 0x01, 0xd4, 0x0d, 0xd2, 0x01, 0xd5, 0x0e, 0xd2, - 0x01, 0xd6, 0x0f, 0xd2, 0x01, 0xd7, 0x10, 0xd2, 0x01, 0xd8, 0x11, 0xd2, - 0x01, 0xd9, 0x12, 0xd2, 0x41, 0x55, 0x29, 0x38, 0xd3, 0x03, 0x00, 0x59, - 0x2f, 0x23, 0xd4, 0x03, 0x00, 0x4b, 0x3d, 0x23, 0xd2, 0x03, 0x40, 0x4a, - 0x6d, 0xa5, 0x7a, 0x01, 0x01, 0xa8, 0x1d, 0x44, 0x83, 0x6a, 0x84, 0x03, - 0x00, 0x51, 0x49, 0x5c, 0x89, 0x01, 0x01, 0x03, 0xd1, 0x09, 0x01, 0xff, - 0x4a, 0xae, 0x77, 0x7d, 0x01, 0x01, 0x4b, 0x40, 0xa1, 0x77, 0x01, 0x41, - 0x4a, 0xf3, 0x93, 0xd1, 0x03, 0x00, 0x04, 0x26, 0x01, 0x01, 0xff, 0x4a, - 0xae, 0x77, 0x7e, 0x01, 0x01, 0x4d, 0xe8, 0x85, 0x78, 0x01, 0x41, 0x4c, - 0x99, 0x8e, 0x8c, 0x01, 0x01, 0x05, 0x0d, 0x07, 0x28, 0x16, 0xe5, 0x36, - 0x06, 0x4d, 0x01, 0x89, 0xa0, 0x01, 0x41, 0x44, 0x8a, 0x97, 0x66, 0x1d, - 0x00, 0x43, 0x0d, 0x16, 0x6a, 0x1d, 0x00, 0x45, 0xd2, 0x56, 0x67, 0x1d, - 0x00, 0x43, 0xb1, 0x1f, 0x69, 0x1d, 0x00, 0x43, 0xa6, 0x48, 0x68, 0x1d, - 0x40, 0x5a, 0x0e, 0x1f, 0x7c, 0x03, 0x00, 0x07, 0xc1, 0x05, 0x11, 0x09, - 0x8e, 0x14, 0x01, 0xff, 0x5a, 0x0e, 0x1f, 0x7d, 0x03, 0x00, 0x53, 0x15, - 0x1f, 0x7b, 0x03, 0x40, 0xa1, 0xf6, 0x07, 0x44, 0x8a, 0x97, 0xb2, 0x03, - 0x00, 0x43, 0x0d, 0x16, 0xc7, 0x03, 0x00, 0xa4, 0xdb, 0x07, 0xa5, 0xd6, - 0x05, 0x4b, 0xfd, 0x99, 0xc2, 0x03, 0x00, 0x45, 0xd2, 0x56, 0xb3, 0x03, - 0x00, 0x44, 0xf2, 0x93, 0x71, 0x03, 0x00, 0x44, 0xca, 0x2d, 0xb9, 0x03, - 0x80, 0xac, 0x04, 0xab, 0x9d, 0x04, 0x45, 0xfd, 0xe4, 0xbb, 0x03, 0x00, - 0x42, 0x57, 0x16, 0xbc, 0x03, 0x00, 0x42, 0xd1, 0x15, 0xbd, 0x03, 0x00, - 0x02, 0xe9, 0x04, 0x85, 0x02, 0xb0, 0xec, 0x01, 0x43, 0xa6, 0x48, 0xc1, - 0x03, 0x80, 0xd3, 0x01, 0xb3, 0xb2, 0x01, 0xb4, 0xa3, 0x01, 0x47, 0xf0, - 0x87, 0xc5, 0x03, 0x80, 0x0c, 0x42, 0x93, 0x0c, 0xbe, 0x03, 0x00, 0x44, - 0x0e, 0xf0, 0xb6, 0x03, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0xa4, 0x47, - 0x46, 0x04, 0x6f, 0xe1, 0x1f, 0x00, 0x44, 0xae, 0xee, 0x7b, 0x1f, 0x00, - 0xb0, 0x15, 0x45, 0x82, 0x6a, 0xcd, 0x03, 0x00, 0xb6, 0x01, 0xff, 0x44, - 0xb6, 0x2f, 0x7a, 0x1f, 0x00, 0x45, 0x05, 0xe7, 0xe0, 0x1f, 0x40, 0x4a, - 0x10, 0x9f, 0xe6, 0x1f, 0x00, 0x44, 0x06, 0x87, 0x50, 0x1f, 0xc0, 0x00, - 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, 0xae, 0xee, 0x54, 0x1f, 0x00, 0x4b, - 0x0f, 0x9f, 0x56, 0x1f, 0x00, 0x45, 0xb5, 0x2f, 0x52, 0x1f, 0x40, 0x44, - 0xcb, 0x5f, 0x51, 0x1f, 0x80, 0x24, 0x48, 0x79, 0x6a, 0xcb, 0x03, 0xc0, - 0x00, 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, 0xae, 0xee, 0xe3, 0x1f, 0x00, - 0x4b, 0x0f, 0x9f, 0xe7, 0x1f, 0x00, 0x45, 0x82, 0x6a, 0xb0, 0x03, 0x00, - 0x45, 0xb5, 0x2f, 0xe2, 0x1f, 0x40, 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, - 0xae, 0xee, 0x55, 0x1f, 0x00, 0x4b, 0x0f, 0x9f, 0x57, 0x1f, 0x00, 0x45, - 0xb5, 0x2f, 0x53, 0x1f, 0x40, 0x42, 0xd7, 0x23, 0xc4, 0x03, 0x00, 0x44, - 0xf2, 0x93, 0xb8, 0x03, 0x40, 0xa1, 0x12, 0x42, 0x0b, 0x00, 0xf8, 0x03, - 0x00, 0x44, 0x1d, 0x1f, 0xc3, 0x03, 0x00, 0x45, 0x1d, 0xe8, 0xdb, 0x03, - 0x40, 0x43, 0x7a, 0x92, 0xe1, 0x03, 0x00, 0xee, 0xfb, 0x03, 0x40, 0x06, - 0x50, 0x00, 0x01, 0xff, 0x45, 0x34, 0x75, 0xe5, 0x1f, 0x00, 0x45, 0xec, - 0xe6, 0xe4, 0x1f, 0x40, 0x51, 0xc6, 0x56, 0x77, 0x03, 0x00, 0x42, 0x49, - 0x00, 0xc6, 0x03, 0x00, 0xe9, 0xc0, 0x03, 0x00, 0x42, 0x2f, 0x03, 0xc8, - 0x03, 0x40, 0x43, 0xa3, 0x05, 0xc9, 0x03, 0x80, 0x4e, 0x45, 0x3a, 0xe4, - 0xbf, 0x03, 0xc0, 0x00, 0x06, 0x50, 0x00, 0x01, 0xff, 0x45, 0x34, 0x75, - 0x41, 0x1f, 0x80, 0x2a, 0x44, 0xae, 0xee, 0x79, 0x1f, 0x00, 0x45, 0xec, - 0xe6, 0x40, 0x1f, 0x80, 0x0c, 0x45, 0x82, 0x6a, 0xcc, 0x03, 0x00, 0x45, - 0xb5, 0x2f, 0x78, 0x1f, 0x40, 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, 0xae, - 0xee, 0x44, 0x1f, 0x00, 0x45, 0xb5, 0x2f, 0x42, 0x1f, 0x40, 0x05, 0x19, - 0x00, 0x01, 0xff, 0x44, 0xae, 0xee, 0x45, 0x1f, 0x00, 0x45, 0xb5, 0x2f, - 0x43, 0x1f, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x45, 0x34, 0x75, 0x61, - 0x1f, 0x80, 0x6e, 0x44, 0xae, 0xee, 0x7d, 0x1f, 0x80, 0x61, 0xb0, 0x19, - 0x45, 0x82, 0x6a, 0xce, 0x03, 0x00, 0x45, 0xb5, 0x2f, 0x7c, 0x1f, 0x80, - 0x06, 0x4d, 0xef, 0x4d, 0xf3, 0x1f, 0x40, 0x52, 0xea, 0x4d, 0xf2, 0x1f, - 0x40, 0x4a, 0x10, 0x9f, 0xf6, 0x1f, 0x80, 0x39, 0x44, 0x06, 0x87, 0x60, - 0x1f, 0xc0, 0x00, 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, 0xae, 0xee, 0x64, - 0x1f, 0x80, 0x20, 0x4b, 0x0f, 0x9f, 0x66, 0x1f, 0x80, 0x13, 0x45, 0xb5, - 0x2f, 0x62, 0x1f, 0x80, 0x06, 0x4d, 0xef, 0x4d, 0xa0, 0x1f, 0x40, 0x52, - 0xea, 0x4d, 0xa2, 0x1f, 0x40, 0x52, 0xea, 0x4d, 0xa6, 0x1f, 0x40, 0x52, - 0xea, 0x4d, 0xa4, 0x1f, 0x40, 0x52, 0xea, 0x4d, 0xf7, 0x1f, 0x40, 0x52, - 0xea, 0x4d, 0xf4, 0x1f, 0x40, 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, 0xae, - 0xee, 0x65, 0x1f, 0x80, 0x20, 0x4b, 0x0f, 0x9f, 0x67, 0x1f, 0x80, 0x13, - 0x45, 0xb5, 0x2f, 0x63, 0x1f, 0x80, 0x06, 0x4d, 0xef, 0x4d, 0xa1, 0x1f, - 0x40, 0x52, 0xea, 0x4d, 0xa3, 0x1f, 0x40, 0x52, 0xea, 0x4d, 0xa7, 0x1f, - 0x40, 0x52, 0xea, 0x4d, 0xa5, 0x1f, 0x40, 0x44, 0xe2, 0x8e, 0xba, 0x03, - 0x00, 0x44, 0x30, 0x7f, 0xdf, 0x03, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, - 0xa4, 0x47, 0x46, 0x04, 0x6f, 0xd1, 0x1f, 0x00, 0x44, 0xae, 0xee, 0x77, - 0x1f, 0x00, 0xb0, 0x15, 0x45, 0x82, 0x6a, 0xaf, 0x03, 0x00, 0xb6, 0x01, - 0xff, 0x44, 0xb6, 0x2f, 0x76, 0x1f, 0x00, 0x45, 0x05, 0xe7, 0xd0, 0x1f, - 0x40, 0x4a, 0x10, 0x9f, 0xd6, 0x1f, 0x00, 0x44, 0x06, 0x87, 0x30, 0x1f, - 0xc0, 0x00, 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, 0xae, 0xee, 0x34, 0x1f, - 0x00, 0x4b, 0x0f, 0x9f, 0x36, 0x1f, 0x00, 0x45, 0xb5, 0x2f, 0x32, 0x1f, - 0x40, 0x44, 0xcb, 0x5f, 0x31, 0x1f, 0x80, 0x24, 0x48, 0x79, 0x6a, 0xca, - 0x03, 0xc0, 0x00, 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, 0xae, 0xee, 0xd3, - 0x1f, 0x00, 0x4b, 0x0f, 0x9f, 0xd7, 0x1f, 0x00, 0x45, 0x82, 0x6a, 0x90, - 0x03, 0x00, 0x45, 0xb5, 0x2f, 0xd2, 0x1f, 0x40, 0x05, 0x19, 0x00, 0x01, - 0xff, 0x44, 0xae, 0xee, 0x35, 0x1f, 0x00, 0x4b, 0x0f, 0x9f, 0x37, 0x1f, - 0x00, 0x45, 0xb5, 0x2f, 0x33, 0x1f, 0x40, 0x46, 0x63, 0x15, 0xb5, 0x03, - 0x80, 0xb3, 0x01, 0x42, 0x12, 0x00, 0xb7, 0x03, 0xc0, 0x00, 0x06, 0x50, - 0x00, 0x01, 0xff, 0x45, 0x34, 0x75, 0x21, 0x1f, 0x80, 0x6e, 0x44, 0xae, - 0xee, 0x75, 0x1f, 0x80, 0x61, 0xb0, 0x19, 0x45, 0x82, 0x6a, 0xae, 0x03, - 0x00, 0x45, 0xb5, 0x2f, 0x74, 0x1f, 0x80, 0x06, 0x4d, 0xef, 0x4d, 0xc3, - 0x1f, 0x40, 0x52, 0xea, 0x4d, 0xc2, 0x1f, 0x40, 0x4a, 0x10, 0x9f, 0xc6, - 0x1f, 0x80, 0x39, 0x44, 0x06, 0x87, 0x20, 0x1f, 0xc0, 0x00, 0x05, 0x19, - 0x00, 0x01, 0xff, 0x44, 0xae, 0xee, 0x24, 0x1f, 0x80, 0x20, 0x4b, 0x0f, - 0x9f, 0x26, 0x1f, 0x80, 0x13, 0x45, 0xb5, 0x2f, 0x22, 0x1f, 0x80, 0x06, - 0x4d, 0xef, 0x4d, 0x90, 0x1f, 0x40, 0x52, 0xea, 0x4d, 0x92, 0x1f, 0x40, - 0x52, 0xea, 0x4d, 0x96, 0x1f, 0x40, 0x52, 0xea, 0x4d, 0x94, 0x1f, 0x40, - 0x52, 0xea, 0x4d, 0xc7, 0x1f, 0x40, 0x52, 0xea, 0x4d, 0xc4, 0x1f, 0x40, - 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, 0xae, 0xee, 0x25, 0x1f, 0x80, 0x20, - 0x4b, 0x0f, 0x9f, 0x27, 0x1f, 0x80, 0x13, 0x45, 0xb5, 0x2f, 0x23, 0x1f, - 0x80, 0x06, 0x4d, 0xef, 0x4d, 0x91, 0x1f, 0x40, 0x52, 0xea, 0x4d, 0x93, - 0x1f, 0x40, 0x52, 0xea, 0x4d, 0x97, 0x1f, 0x40, 0x52, 0xea, 0x4d, 0x95, - 0x1f, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x45, 0x34, 0x75, 0x11, 0x1f, - 0x80, 0x2a, 0x44, 0xae, 0xee, 0x73, 0x1f, 0x00, 0x45, 0xec, 0xe6, 0x10, - 0x1f, 0x80, 0x0c, 0x45, 0x82, 0x6a, 0xad, 0x03, 0x00, 0x45, 0xb5, 0x2f, - 0x72, 0x1f, 0x40, 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, 0xae, 0xee, 0x14, - 0x1f, 0x00, 0x45, 0xb5, 0x2f, 0x12, 0x1f, 0x40, 0x05, 0x19, 0x00, 0x01, - 0xff, 0x44, 0xae, 0xee, 0x15, 0x1f, 0x00, 0x45, 0xb5, 0x2f, 0x13, 0x1f, - 0x40, 0x44, 0x6c, 0xd3, 0xb4, 0x03, 0x00, 0x46, 0xd1, 0x56, 0xdd, 0x03, - 0x40, 0x44, 0x2f, 0xe1, 0xb1, 0x03, 0x80, 0x11, 0x07, 0x28, 0x7f, 0x01, - 0xff, 0x45, 0x2f, 0x7f, 0xd9, 0x03, 0x00, 0x45, 0x78, 0x92, 0x73, 0x03, - 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x45, 0x34, 0x75, 0x01, 0x1f, 0x80, - 0x7c, 0x46, 0x04, 0x6f, 0xb1, 0x1f, 0x00, 0x44, 0xae, 0xee, 0x71, 0x1f, - 0x80, 0x69, 0xb0, 0x21, 0x45, 0x82, 0x6a, 0xac, 0x03, 0x00, 0xb6, 0x06, - 0x4d, 0xef, 0x4d, 0xb3, 0x1f, 0x40, 0x44, 0xb6, 0x2f, 0x70, 0x1f, 0x80, - 0x06, 0x45, 0x05, 0xe7, 0xb0, 0x1f, 0x40, 0x52, 0xea, 0x4d, 0xb2, 0x1f, - 0x40, 0x4a, 0x10, 0x9f, 0xb6, 0x1f, 0x80, 0x39, 0x44, 0x06, 0x87, 0x00, - 0x1f, 0xc0, 0x00, 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, 0xae, 0xee, 0x04, - 0x1f, 0x80, 0x20, 0x4b, 0x0f, 0x9f, 0x06, 0x1f, 0x80, 0x13, 0x45, 0xb5, - 0x2f, 0x02, 0x1f, 0x80, 0x06, 0x4d, 0xef, 0x4d, 0x80, 0x1f, 0x40, 0x52, - 0xea, 0x4d, 0x82, 0x1f, 0x40, 0x52, 0xea, 0x4d, 0x86, 0x1f, 0x40, 0x52, - 0xea, 0x4d, 0x84, 0x1f, 0x40, 0x52, 0xea, 0x4d, 0xb7, 0x1f, 0x40, 0x52, - 0xea, 0x4d, 0xb4, 0x1f, 0x40, 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, 0xae, - 0xee, 0x05, 0x1f, 0x80, 0x20, 0x4b, 0x0f, 0x9f, 0x07, 0x1f, 0x80, 0x13, - 0x45, 0xb5, 0x2f, 0x03, 0x1f, 0x80, 0x06, 0x4d, 0xef, 0x4d, 0x81, 0x1f, - 0x40, 0x52, 0xea, 0x4d, 0x83, 0x1f, 0x40, 0x52, 0xea, 0x4d, 0x87, 0x1f, - 0x40, 0x52, 0xea, 0x4d, 0x85, 0x1f, 0x40, 0x5d, 0x53, 0x15, 0xf6, 0x03, - 0x00, 0x03, 0x3a, 0x70, 0x01, 0xff, 0x46, 0xeb, 0x07, 0xf1, 0x03, 0x00, - 0x52, 0x70, 0x55, 0xfc, 0x03, 0x40, 0x4a, 0x10, 0x9f, 0xc0, 0x1f, 0x00, - 0x49, 0x30, 0xb7, 0xd5, 0x03, 0x00, 0x48, 0x0b, 0xaa, 0xd6, 0x03, 0x00, - 0x4d, 0x01, 0x46, 0xbe, 0x1f, 0x00, 0x44, 0x06, 0x87, 0xbf, 0x1f, 0xc0, - 0x00, 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, 0xae, 0xee, 0xce, 0x1f, 0x00, - 0x4b, 0x0f, 0x9f, 0xcf, 0x1f, 0x00, 0x45, 0xb5, 0x2f, 0xcd, 0x1f, 0x40, - 0x48, 0xba, 0xc1, 0x7c, 0x01, 0x01, 0x03, 0xc4, 0x07, 0x0c, 0x4a, 0x67, - 0xb0, 0x84, 0x01, 0x01, 0x43, 0x12, 0x4a, 0xfd, 0x1f, 0x40, 0x49, 0x03, - 0xb7, 0x75, 0x01, 0x81, 0x06, 0x4c, 0x35, 0x92, 0x8b, 0x01, 0x41, 0x4f, - 0x8a, 0x67, 0x76, 0x01, 0x41, 0x4c, 0x01, 0x8d, 0x81, 0x01, 0x01, 0x4d, - 0x24, 0x88, 0x45, 0xd2, 0x41, 0x06, 0xc2, 0x05, 0x1d, 0x49, 0x59, 0xb8, - 0x83, 0x01, 0x01, 0x51, 0xb0, 0x5b, 0x75, 0x03, 0x00, 0x06, 0x5c, 0x15, - 0x01, 0xff, 0x4e, 0x62, 0x15, 0xf5, 0x03, 0x00, 0x4c, 0x1c, 0x1f, 0xf2, - 0x03, 0x40, 0x4d, 0x27, 0x7f, 0xd8, 0x03, 0x00, 0x47, 0xd0, 0x56, 0xdc, - 0x03, 0x00, 0x45, 0x2f, 0x7f, 0xde, 0x03, 0x00, 0xb3, 0x06, 0x43, 0x8c, - 0xf1, 0xf3, 0x03, 0x40, 0x44, 0x79, 0x92, 0xe0, 0x03, 0x00, 0x0d, 0xf7, - 0x3b, 0x06, 0x45, 0x1d, 0xe8, 0xda, 0x03, 0x40, 0x45, 0xd2, 0x56, 0x26, - 0x1d, 0x00, 0x45, 0xfd, 0xe4, 0x27, 0x1d, 0x00, 0x45, 0xe8, 0xac, 0x65, - 0xab, 0x00, 0xb0, 0x06, 0x43, 0xa6, 0x48, 0x29, 0x1d, 0x40, 0xe9, 0x28, - 0x1d, 0x00, 0x42, 0x2f, 0x03, 0x2a, 0x1d, 0x40, 0xa1, 0x0c, 0x46, 0x74, - 0x60, 0xbd, 0x1f, 0x00, 0x50, 0x6a, 0x67, 0x82, 0x01, 0x41, 0x48, 0x0b, - 0xaa, 0xd7, 0x03, 0x00, 0x4a, 0xe3, 0x8e, 0xf0, 0x03, 0x40, 0x4c, 0x35, - 0x8c, 0x8d, 0x01, 0x01, 0x1b, 0xe4, 0x1c, 0x01, 0xff, 0xd1, 0x1d, 0xd2, - 0x81, 0x79, 0xd2, 0x1e, 0xd2, 0x81, 0x5c, 0x93, 0x42, 0xd4, 0x1f, 0xd2, - 0x81, 0x21, 0xd5, 0x20, 0xd2, 0x81, 0x08, 0xd7, 0x21, 0xd2, 0x01, 0xd8, - 0x22, 0xd2, 0x41, 0xd0, 0x3d, 0xd2, 0x01, 0xd1, 0x3e, 0xd2, 0x01, 0xd2, - 0x3f, 0xd2, 0x01, 0xd3, 0x40, 0xd2, 0x01, 0xd4, 0x41, 0xd2, 0x41, 0xd0, - 0x36, 0xd2, 0x01, 0xd2, 0x37, 0xd2, 0x01, 0xd3, 0x38, 0xd2, 0x01, 0xd5, - 0x39, 0xd2, 0x01, 0xd7, 0x3a, 0xd2, 0x01, 0xd8, 0x3b, 0xd2, 0x01, 0xd9, - 0x3c, 0xd2, 0x41, 0xd0, 0x30, 0xd2, 0x01, 0xd2, 0x31, 0xd2, 0x01, 0xd6, - 0x32, 0xd2, 0x01, 0xd7, 0x33, 0xd2, 0x01, 0xd8, 0x34, 0xd2, 0x01, 0xd9, - 0x35, 0xd2, 0x41, 0xd3, 0x2a, 0xd2, 0x01, 0xd4, 0x2b, 0xd2, 0x01, 0xd5, - 0x2c, 0xd2, 0x01, 0xd6, 0x2d, 0xd2, 0x01, 0xd7, 0x2e, 0xd2, 0x01, 0xd9, - 0x2f, 0xd2, 0x41, 0xd1, 0x23, 0xd2, 0x01, 0xd2, 0x24, 0xd2, 0x01, 0xd3, - 0x25, 0xd2, 0x01, 0xd4, 0x26, 0xd2, 0x01, 0xd7, 0x27, 0xd2, 0x01, 0xd8, - 0x28, 0xd2, 0x01, 0xd9, 0x29, 0xd2, 0x41, 0x4e, 0xaa, 0x77, 0x80, 0x01, - 0x01, 0x4e, 0x6a, 0x79, 0x7f, 0x01, 0x41, 0x44, 0xcb, 0x5f, 0xfe, 0x1f, - 0x80, 0x26, 0x09, 0x79, 0x6a, 0x06, 0x4b, 0x72, 0x9f, 0x7b, 0x01, 0x41, - 0x04, 0x1a, 0x00, 0x06, 0x45, 0x82, 0x6a, 0x85, 0x03, 0x40, 0x44, 0xae, - 0xee, 0xee, 0x1f, 0x00, 0x4b, 0x0f, 0x9f, 0xc1, 0x1f, 0x00, 0x45, 0xb5, - 0x2f, 0xed, 0x1f, 0x40, 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, 0xae, 0xee, - 0xde, 0x1f, 0x00, 0x4b, 0x0f, 0x9f, 0xdf, 0x1f, 0x00, 0x45, 0xb5, 0x2f, - 0xdd, 0x1f, 0x40, 0x5a, 0x0e, 0x1f, 0xfe, 0x03, 0x00, 0x4a, 0x09, 0xaa, - 0xcf, 0x03, 0x00, 0xac, 0x16, 0x09, 0x8e, 0x14, 0x06, 0x4c, 0xf1, 0x93, - 0xf4, 0x03, 0x40, 0x5a, 0x0e, 0x1f, 0xff, 0x03, 0x00, 0x53, 0x15, 0x1f, - 0xfd, 0x03, 0x40, 0x06, 0xc2, 0x05, 0x06, 0x52, 0x16, 0x1f, 0xf9, 0x03, - 0x40, 0xa1, 0xb3, 0x06, 0x44, 0x8a, 0x97, 0x92, 0x03, 0x00, 0x43, 0x0d, - 0x16, 0xa7, 0x03, 0x00, 0x45, 0x73, 0xe2, 0x94, 0x03, 0x00, 0xa5, 0xb3, - 0x04, 0x45, 0xd2, 0x56, 0x93, 0x03, 0x00, 0x44, 0xf2, 0x93, 0x70, 0x03, - 0x00, 0x44, 0xca, 0x2d, 0x99, 0x03, 0x80, 0xb5, 0x03, 0x45, 0xe1, 0x8e, - 0x9a, 0x03, 0x00, 0x45, 0xfd, 0xe4, 0x9b, 0x03, 0x00, 0x42, 0x57, 0x16, - 0x9c, 0x03, 0x00, 0x42, 0xd1, 0x15, 0x9d, 0x03, 0x00, 0x02, 0xe9, 0x04, - 0xae, 0x01, 0xb0, 0x95, 0x01, 0x43, 0xa6, 0x48, 0xa1, 0x03, 0x80, 0x87, - 0x01, 0xb3, 0x73, 0xb4, 0x65, 0x47, 0xf0, 0x87, 0xa5, 0x03, 0x80, 0x12, - 0x42, 0x93, 0x0c, 0x9e, 0x03, 0x00, 0x43, 0x8c, 0xf1, 0x7f, 0x03, 0x00, - 0x44, 0x0e, 0xf0, 0x96, 0x03, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0xa4, - 0x21, 0x46, 0x04, 0x6f, 0xe9, 0x1f, 0x00, 0x44, 0xae, 0xee, 0xeb, 0x1f, - 0x00, 0x45, 0x82, 0x6a, 0x8e, 0x03, 0x00, 0xb6, 0x01, 0xff, 0x44, 0xb6, - 0x2f, 0xea, 0x1f, 0x00, 0x45, 0x05, 0xe7, 0xe8, 0x1f, 0x40, 0x44, 0xcb, - 0x5f, 0x59, 0x1f, 0x80, 0x06, 0x48, 0x79, 0x6a, 0xab, 0x03, 0x40, 0x05, - 0x19, 0x00, 0x01, 0xff, 0x44, 0xae, 0xee, 0x5d, 0x1f, 0x00, 0x4b, 0x0f, - 0x9f, 0x5f, 0x1f, 0x00, 0x45, 0xb5, 0x2f, 0x5b, 0x1f, 0x40, 0x42, 0xd7, - 0x23, 0xa4, 0x03, 0x00, 0x44, 0xf2, 0x93, 0x98, 0x03, 0x40, 0x42, 0x1a, - 0x00, 0xfa, 0x03, 0x00, 0x42, 0x0b, 0x00, 0xf7, 0x03, 0x00, 0x44, 0x1d, - 0x1f, 0xa3, 0x03, 0x40, 0x4b, 0x09, 0x96, 0xec, 0x1f, 0x40, 0x51, 0xc6, - 0x56, 0x76, 0x03, 0x00, 0x42, 0x49, 0x00, 0xa6, 0x03, 0x00, 0xe9, 0xa0, - 0x03, 0x00, 0x42, 0x2f, 0x03, 0xa8, 0x03, 0x40, 0x43, 0xa3, 0x05, 0xa9, - 0x03, 0x80, 0x4e, 0x45, 0x3a, 0xe4, 0x9f, 0x03, 0xc0, 0x00, 0x06, 0x50, - 0x00, 0x01, 0xff, 0x45, 0x34, 0x75, 0x49, 0x1f, 0x80, 0x2a, 0x44, 0xae, - 0xee, 0xf9, 0x1f, 0x00, 0x45, 0xec, 0xe6, 0x48, 0x1f, 0x80, 0x0c, 0x45, - 0x82, 0x6a, 0x8c, 0x03, 0x00, 0x45, 0xb5, 0x2f, 0xf8, 0x1f, 0x40, 0x05, - 0x19, 0x00, 0x01, 0xff, 0x44, 0xae, 0xee, 0x4c, 0x1f, 0x00, 0x45, 0xb5, - 0x2f, 0x4a, 0x1f, 0x40, 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, 0xae, 0xee, - 0x4d, 0x1f, 0x00, 0x45, 0xb5, 0x2f, 0x4b, 0x1f, 0x40, 0x06, 0x50, 0x00, - 0x01, 0xff, 0x45, 0x34, 0x75, 0x69, 0x1f, 0x80, 0x55, 0x44, 0xae, 0xee, - 0xfb, 0x1f, 0x00, 0xb0, 0x0c, 0x45, 0x82, 0x6a, 0x8f, 0x03, 0x00, 0x45, - 0xb5, 0x2f, 0xfa, 0x1f, 0x40, 0x4d, 0x01, 0x46, 0xfc, 0x1f, 0x00, 0x44, - 0x06, 0x87, 0x68, 0x1f, 0xc0, 0x00, 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, - 0xae, 0xee, 0x6c, 0x1f, 0x80, 0x22, 0xb0, 0x0d, 0x45, 0xb5, 0x2f, 0x6a, - 0x1f, 0xc0, 0x00, 0x53, 0xfb, 0x45, 0xaa, 0x1f, 0x40, 0x4a, 0x10, 0x9f, - 0x6e, 0x1f, 0x80, 0x06, 0x4d, 0x01, 0x46, 0xa8, 0x1f, 0x40, 0x53, 0xfb, - 0x45, 0xae, 0x1f, 0x40, 0x53, 0xfb, 0x45, 0xac, 0x1f, 0x40, 0x05, 0x19, - 0x00, 0x01, 0xff, 0x44, 0xae, 0xee, 0x6d, 0x1f, 0x80, 0x22, 0xb0, 0x0d, - 0x45, 0xb5, 0x2f, 0x6b, 0x1f, 0xc0, 0x00, 0x53, 0xfb, 0x45, 0xab, 0x1f, - 0x40, 0x4a, 0x10, 0x9f, 0x6f, 0x1f, 0x80, 0x06, 0x4d, 0x01, 0x46, 0xa9, - 0x1f, 0x40, 0x53, 0xfb, 0x45, 0xaf, 0x1f, 0x40, 0x53, 0xfb, 0x45, 0xad, - 0x1f, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0xa4, 0x3f, 0x46, 0x04, 0x6f, - 0xd9, 0x1f, 0x00, 0x44, 0xae, 0xee, 0xdb, 0x1f, 0x00, 0x45, 0xec, 0xe6, - 0x38, 0x1f, 0x80, 0x15, 0x45, 0x82, 0x6a, 0x8a, 0x03, 0x00, 0xb6, 0x01, - 0xff, 0x44, 0xb6, 0x2f, 0xda, 0x1f, 0x00, 0x45, 0x05, 0xe7, 0xd8, 0x1f, - 0x40, 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, 0xae, 0xee, 0x3c, 0x1f, 0x00, - 0x4b, 0x0f, 0x9f, 0x3e, 0x1f, 0x00, 0x45, 0xb5, 0x2f, 0x3a, 0x1f, 0x40, - 0x44, 0xcb, 0x5f, 0x39, 0x1f, 0x80, 0x06, 0x48, 0x79, 0x6a, 0xaa, 0x03, - 0x40, 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, 0xae, 0xee, 0x3d, 0x1f, 0x00, - 0x4b, 0x0f, 0x9f, 0x3f, 0x1f, 0x00, 0x45, 0xb5, 0x2f, 0x3b, 0x1f, 0x40, - 0x46, 0x63, 0x15, 0x95, 0x03, 0x80, 0x9c, 0x01, 0x42, 0x12, 0x00, 0x97, - 0x03, 0xc0, 0x00, 0x06, 0x50, 0x00, 0x01, 0xff, 0x45, 0x34, 0x75, 0x29, - 0x1f, 0x80, 0x55, 0x44, 0xae, 0xee, 0xcb, 0x1f, 0x00, 0xb0, 0x0c, 0x45, - 0x82, 0x6a, 0x89, 0x03, 0x00, 0x45, 0xb5, 0x2f, 0xca, 0x1f, 0x40, 0x4d, - 0x01, 0x46, 0xcc, 0x1f, 0x00, 0x44, 0x06, 0x87, 0x28, 0x1f, 0xc0, 0x00, - 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, 0xae, 0xee, 0x2c, 0x1f, 0x80, 0x22, - 0xb0, 0x0d, 0x45, 0xb5, 0x2f, 0x2a, 0x1f, 0xc0, 0x00, 0x53, 0xfb, 0x45, - 0x9a, 0x1f, 0x40, 0x4a, 0x10, 0x9f, 0x2e, 0x1f, 0x80, 0x06, 0x4d, 0x01, - 0x46, 0x98, 0x1f, 0x40, 0x53, 0xfb, 0x45, 0x9e, 0x1f, 0x40, 0x53, 0xfb, - 0x45, 0x9c, 0x1f, 0x40, 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, 0xae, 0xee, - 0x2d, 0x1f, 0x80, 0x22, 0xb0, 0x0d, 0x45, 0xb5, 0x2f, 0x2b, 0x1f, 0xc0, - 0x00, 0x53, 0xfb, 0x45, 0x9b, 0x1f, 0x40, 0x4a, 0x10, 0x9f, 0x2f, 0x1f, - 0x80, 0x06, 0x4d, 0x01, 0x46, 0x99, 0x1f, 0x40, 0x53, 0xfb, 0x45, 0x9f, - 0x1f, 0x40, 0x53, 0xfb, 0x45, 0x9d, 0x1f, 0x40, 0x06, 0x50, 0x00, 0x01, - 0xff, 0x45, 0x34, 0x75, 0x19, 0x1f, 0x80, 0x2a, 0x44, 0xae, 0xee, 0xc9, - 0x1f, 0x00, 0x45, 0xec, 0xe6, 0x18, 0x1f, 0x80, 0x0c, 0x45, 0x82, 0x6a, - 0x88, 0x03, 0x00, 0x45, 0xb5, 0x2f, 0xc8, 0x1f, 0x40, 0x05, 0x19, 0x00, - 0x01, 0xff, 0x44, 0xae, 0xee, 0x1c, 0x1f, 0x00, 0x45, 0xb5, 0x2f, 0x1a, - 0x1f, 0x40, 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, 0xae, 0xee, 0x1d, 0x1f, - 0x00, 0x45, 0xb5, 0x2f, 0x1b, 0x1f, 0x40, 0x44, 0x2f, 0xe1, 0x91, 0x03, - 0x80, 0x06, 0x4c, 0x71, 0x92, 0x72, 0x03, 0x40, 0x06, 0x50, 0x00, 0x01, - 0xff, 0x45, 0x34, 0x75, 0x09, 0x1f, 0x80, 0x64, 0x46, 0x04, 0x6f, 0xb9, - 0x1f, 0x00, 0x44, 0xae, 0xee, 0xbb, 0x1f, 0x00, 0xb0, 0x15, 0x45, 0x82, - 0x6a, 0x86, 0x03, 0x00, 0xb6, 0x01, 0xff, 0x44, 0xb6, 0x2f, 0xba, 0x1f, - 0x00, 0x45, 0x05, 0xe7, 0xb8, 0x1f, 0x40, 0x4d, 0x01, 0x46, 0xbc, 0x1f, - 0x00, 0x44, 0x06, 0x87, 0x08, 0x1f, 0xc0, 0x00, 0x05, 0x19, 0x00, 0x01, - 0xff, 0x44, 0xae, 0xee, 0x0c, 0x1f, 0x80, 0x22, 0xb0, 0x0d, 0x45, 0xb5, - 0x2f, 0x0a, 0x1f, 0xc0, 0x00, 0x53, 0xfb, 0x45, 0x8a, 0x1f, 0x40, 0x4a, - 0x10, 0x9f, 0x0e, 0x1f, 0x80, 0x06, 0x4d, 0x01, 0x46, 0x88, 0x1f, 0x40, - 0x53, 0xfb, 0x45, 0x8e, 0x1f, 0x40, 0x53, 0xfb, 0x45, 0x8c, 0x1f, 0x40, - 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, 0xae, 0xee, 0x0d, 0x1f, 0x80, 0x22, - 0xb0, 0x0d, 0x45, 0xb5, 0x2f, 0x0b, 0x1f, 0xc0, 0x00, 0x53, 0xfb, 0x45, - 0x8b, 0x1f, 0x40, 0x4a, 0x10, 0x9f, 0x0f, 0x1f, 0x80, 0x06, 0x4d, 0x01, - 0x46, 0x89, 0x1f, 0x40, 0x53, 0xfb, 0x45, 0x8f, 0x1f, 0x40, 0x53, 0xfb, - 0x45, 0x8d, 0x1f, 0x40, 0x0a, 0xa3, 0xa6, 0x15, 0x49, 0x2d, 0xba, 0x87, - 0x03, 0x00, 0xb2, 0x01, 0xff, 0x49, 0x20, 0xbb, 0x87, 0x01, 0x01, 0x49, - 0x21, 0xbd, 0x86, 0x01, 0x41, 0x06, 0x18, 0xd7, 0xe6, 0x01, 0xa3, 0xd7, - 0x01, 0x51, 0x3c, 0x58, 0x73, 0x01, 0x01, 0x0b, 0xbb, 0x99, 0xb9, 0x01, - 0x03, 0xa4, 0x19, 0x97, 0x01, 0x4d, 0x21, 0x84, 0x63, 0x01, 0x01, 0x53, - 0x10, 0x4a, 0x70, 0x01, 0x01, 0x53, 0xfe, 0x4b, 0x74, 0x01, 0x01, 0xb4, - 0x01, 0xff, 0x08, 0x22, 0xc4, 0x30, 0x0a, 0x37, 0xae, 0x01, 0xff, 0x02, - 0xc8, 0x02, 0x0d, 0x43, 0xb0, 0x06, 0x60, 0x01, 0xc1, 0x00, 0x4f, 0x8a, - 0x67, 0x61, 0x01, 0x41, 0x43, 0x09, 0x4c, 0x66, 0x01, 0x81, 0x0d, 0x42, - 0x32, 0x00, 0x5f, 0x01, 0xc1, 0x00, 0x48, 0x21, 0x11, 0x6d, 0x01, 0x41, - 0x4f, 0x8a, 0x67, 0x67, 0x01, 0x41, 0x02, 0xc8, 0x02, 0x33, 0x43, 0xbf, - 0x0a, 0x59, 0x01, 0x81, 0x1d, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0x64, - 0x01, 0x01, 0xa8, 0x06, 0x42, 0x15, 0x02, 0x5c, 0x01, 0x41, 0x44, 0x2c, - 0x11, 0x65, 0x01, 0x01, 0x4b, 0x8f, 0x17, 0x6b, 0x01, 0x41, 0x80, 0x01, - 0xff, 0x47, 0x22, 0x11, 0x6a, 0x01, 0x01, 0x48, 0xd5, 0x5c, 0x71, 0x01, - 0x41, 0x43, 0x09, 0x4c, 0x69, 0x01, 0x01, 0x03, 0x5f, 0x00, 0x01, 0xff, - 0x47, 0x22, 0x11, 0x6e, 0x01, 0x01, 0x48, 0xd5, 0x5c, 0x72, 0x01, 0x41, - 0x51, 0xa4, 0x56, 0x58, 0x01, 0x01, 0x08, 0xb2, 0xc5, 0x01, 0xff, 0x45, - 0x07, 0x4c, 0x68, 0x01, 0x01, 0x43, 0xbf, 0x0a, 0x5a, 0x01, 0x01, 0x43, - 0xb0, 0x06, 0x62, 0x01, 0x41, 0x4c, 0xb0, 0x38, 0x6c, 0x01, 0x01, 0x43, - 0xd0, 0x09, 0x5b, 0x01, 0xc1, 0x00, 0x49, 0xf2, 0x45, 0x5e, 0x01, 0x41, - 0x55, 0xa7, 0x38, 0x6f, 0x01, 0x01, 0x54, 0xe7, 0x45, 0x5d, 0x01, 0x41, - 0x02, 0xc8, 0x02, 0x5a, 0x04, 0xbf, 0x0a, 0x20, 0x04, 0xd1, 0x5c, 0x01, - 0xff, 0x44, 0x0d, 0x4c, 0x57, 0x01, 0x01, 0x47, 0x8d, 0x6c, 0x50, 0x01, - 0x01, 0xb4, 0x01, 0xff, 0x46, 0x1c, 0xc0, 0x49, 0x01, 0x01, 0x4f, 0x85, - 0x6c, 0x55, 0x01, 0x41, 0x47, 0xf3, 0x45, 0x42, 0x01, 0x01, 0xa8, 0x17, - 0x47, 0x2a, 0x01, 0x40, 0x01, 0x01, 0x09, 0xd5, 0x5c, 0x01, 0xff, 0x47, - 0x8d, 0x6c, 0x54, 0x01, 0x01, 0x47, 0x1b, 0xc0, 0x4d, 0x01, 0x41, 0x43, - 0x23, 0x00, 0x41, 0x01, 0x01, 0x07, 0x23, 0x11, 0x01, 0xff, 0x47, 0x8d, - 0x6c, 0x52, 0x01, 0x01, 0x47, 0x1b, 0xc0, 0x4b, 0x01, 0x41, 0x43, 0x09, - 0x4c, 0x44, 0x01, 0x81, 0x3c, 0x42, 0x32, 0x00, 0x43, 0x01, 0xc1, 0x00, - 0x80, 0x01, 0xff, 0x47, 0x22, 0x11, 0x45, 0x01, 0x81, 0x1c, 0x47, 0x8d, - 0x6c, 0x4f, 0x01, 0x01, 0xb4, 0x01, 0xff, 0x46, 0x1c, 0xc0, 0x48, 0x01, - 0x01, 0x47, 0x1d, 0x3b, 0x46, 0x01, 0xc1, 0x00, 0x48, 0x1a, 0xc0, 0x4e, - 0x01, 0x41, 0x80, 0x01, 0xff, 0x47, 0x8d, 0x6c, 0x53, 0x01, 0x01, 0x47, - 0x1b, 0xc0, 0x4c, 0x01, 0x41, 0x80, 0x01, 0xff, 0x47, 0x8d, 0x6c, 0x51, - 0x01, 0x01, 0xb4, 0x01, 0xff, 0x46, 0x1c, 0xc0, 0x4a, 0x01, 0x01, 0x47, - 0x1d, 0x3b, 0x47, 0x01, 0xc1, 0x00, 0x48, 0x8c, 0x6c, 0x56, 0x01, 0x41, - 0xa1, 0x9c, 0x01, 0xa2, 0x82, 0x01, 0x4f, 0x2d, 0x6a, 0xa7, 0x2a, 0x80, - 0x75, 0x55, 0x21, 0x3a, 0xdb, 0x22, 0x00, 0xaf, 0x1d, 0x44, 0x2f, 0x03, - 0x3e, 0x00, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x4d, 0xea, 0x7f, 0x7a, - 0x2a, 0x00, 0x43, 0xd4, 0x09, 0xd7, 0x22, 0x00, 0x53, 0x07, 0x4b, 0x7c, - 0x2a, 0x40, 0x02, 0x18, 0x00, 0x11, 0x03, 0x32, 0x00, 0x01, 0xff, 0x49, - 0xa8, 0x0c, 0x67, 0x22, 0x00, 0x51, 0x3a, 0x5a, 0xa4, 0x2a, 0x40, 0x4b, - 0x0e, 0x1e, 0x86, 0x2a, 0x00, 0x03, 0x7b, 0x00, 0x25, 0x49, 0xec, 0x00, - 0x77, 0x22, 0x00, 0x50, 0xba, 0x65, 0x7e, 0x2a, 0xc0, 0x00, 0x0a, 0xa5, - 0x3a, 0x01, 0xff, 0x45, 0x5c, 0x00, 0x82, 0x2a, 0x80, 0x06, 0x46, 0x58, - 0x13, 0x80, 0x2a, 0x40, 0x45, 0xc2, 0x00, 0x84, 0x2a, 0x40, 0x45, 0xac, - 0x0c, 0x65, 0x22, 0x00, 0x4a, 0x06, 0x39, 0x73, 0x22, 0x40, 0x54, 0x93, - 0x00, 0xa9, 0x2a, 0x40, 0x4f, 0x2c, 0x6b, 0xa5, 0x2a, 0x00, 0x0a, 0xfc, - 0x38, 0x01, 0xff, 0x45, 0xac, 0x0c, 0x69, 0x22, 0x00, 0x4a, 0x06, 0x39, - 0xe7, 0x22, 0x40, 0x05, 0x5d, 0x00, 0x11, 0x03, 0x1b, 0x00, 0x01, 0xff, - 0x4f, 0x37, 0x6f, 0x8a, 0x2a, 0x00, 0x58, 0x6d, 0x2a, 0x88, 0x2a, 0x40, - 0x61, 0x59, 0x0d, 0x8c, 0x2a, 0x00, 0x61, 0xbc, 0x0d, 0x92, 0x2a, 0x00, - 0x50, 0xb3, 0x02, 0x78, 0x29, 0x00, 0xb3, 0x01, 0xff, 0x07, 0x23, 0xcf, - 0x06, 0x70, 0xd9, 0x00, 0x94, 0x2a, 0x40, 0x4f, 0xe6, 0x00, 0x90, 0x2a, - 0x00, 0x48, 0x52, 0x28, 0x8e, 0x2a, 0x40, 0x4b, 0x37, 0x99, 0x93, 0xf3, - 0x01, 0x05, 0x1f, 0xe6, 0x0c, 0x43, 0xc7, 0x63, 0x47, 0xf3, 0x01, 0x49, - 0x90, 0x22, 0x60, 0x00, 0x40, 0x4e, 0x9a, 0x74, 0x57, 0x13, 0x01, 0x07, - 0xc1, 0x05, 0x8b, 0x01, 0x42, 0xe9, 0x04, 0x50, 0x13, 0x01, 0x05, 0x2f, - 0x03, 0x48, 0x0b, 0xd1, 0x75, 0x01, 0xff, 0xa1, 0x35, 0x42, 0x27, 0x01, - 0x47, 0x13, 0x01, 0xe9, 0x3f, 0x13, 0x81, 0x26, 0x42, 0x69, 0x05, 0x4b, - 0x13, 0x01, 0xf5, 0x41, 0x13, 0x81, 0x17, 0x08, 0x9b, 0xbe, 0x01, 0xff, - 0xec, 0x62, 0x13, 0x81, 0x09, 0xf2, 0x43, 0x13, 0xc1, 0x00, 0xf2, 0x44, - 0x13, 0x41, 0xec, 0x63, 0x13, 0x41, 0xf5, 0x42, 0x13, 0x41, 0xe9, 0x40, - 0x13, 0x41, 0xe1, 0x3e, 0x13, 0x01, 0xe9, 0x48, 0x13, 0x01, 0xf5, 0x4c, - 0x13, 0x41, 0xa1, 0x2b, 0xa3, 0x1d, 0x45, 0x5a, 0x3e, 0x3c, 0x13, 0x01, - 0x45, 0xce, 0xe6, 0x5d, 0x13, 0x01, 0x02, 0x02, 0x00, 0x01, 0xff, 0x44, - 0x5d, 0x23, 0x4d, 0x13, 0x01, 0x45, 0xa3, 0x4a, 0x03, 0x13, 0x41, 0x4a, - 0x50, 0x23, 0x01, 0x13, 0x01, 0x57, 0xc7, 0x15, 0x00, 0x13, 0x41, 0x47, - 0xd1, 0x15, 0x02, 0x13, 0x01, 0x47, 0xf2, 0x86, 0x3d, 0x13, 0x41, 0xe1, - 0x05, 0x13, 0x81, 0x9a, 0x02, 0xa2, 0x8d, 0x02, 0xa3, 0x80, 0x02, 0xa4, - 0xe7, 0x01, 0x42, 0x27, 0x01, 0x0f, 0x13, 0x01, 0xa7, 0xd4, 0x01, 0x42, - 0x22, 0x00, 0x39, 0x13, 0x01, 0xe9, 0x07, 0x13, 0x81, 0xc4, 0x01, 0xaa, - 0xb7, 0x01, 0xab, 0xaa, 0x01, 0xac, 0x9d, 0x01, 0x42, 0x6c, 0x00, 0x2e, - 0x13, 0x01, 0xae, 0x7f, 0x42, 0x69, 0x05, 0x13, 0x13, 0x01, 0xb0, 0x6d, - 0x42, 0x71, 0x00, 0x30, 0x13, 0x01, 0xb3, 0x55, 0xb4, 0x3c, 0xf5, 0x09, - 0x13, 0x81, 0x33, 0xb6, 0x06, 0x42, 0x34, 0x22, 0x2f, 0x13, 0x41, 0xe1, - 0x35, 0x13, 0x01, 0x05, 0x8b, 0x0a, 0x17, 0x07, 0x9c, 0xbe, 0x01, 0xff, - 0xec, 0x0c, 0x13, 0x81, 0x09, 0xf2, 0x0b, 0x13, 0xc1, 0x00, 0xf2, 0x60, - 0x13, 0x41, 0xec, 0x61, 0x13, 0x41, 0x48, 0xd0, 0x15, 0x5e, 0x13, 0x01, - 0x4f, 0xe6, 0x16, 0x5f, 0x13, 0x41, 0xf5, 0x0a, 0x13, 0x41, 0xe1, 0x24, - 0x13, 0x01, 0x42, 0x22, 0x00, 0x25, 0x13, 0x01, 0xb4, 0x01, 0xff, 0xe1, - 0x1f, 0x13, 0x01, 0x42, 0x22, 0x00, 0x20, 0x13, 0x41, 0xe1, 0x38, 0x13, - 0x01, 0x42, 0x22, 0x00, 0x36, 0x13, 0x01, 0x42, 0x15, 0x06, 0x37, 0x13, - 0x41, 0xe1, 0x2a, 0x13, 0x01, 0x42, 0x22, 0x00, 0x2b, 0x13, 0x41, 0xe1, - 0x28, 0x13, 0x01, 0x42, 0x24, 0x02, 0x19, 0x13, 0x01, 0x42, 0xff, 0x04, - 0x23, 0x13, 0x01, 0x42, 0x34, 0x22, 0x1e, 0x13, 0x41, 0xe1, 0x32, 0x13, - 0x01, 0x42, 0x74, 0x00, 0x33, 0x13, 0x41, 0xe1, 0x15, 0x13, 0x01, 0x42, - 0x22, 0x00, 0x16, 0x13, 0x41, 0xe1, 0x1c, 0x13, 0x01, 0x42, 0x22, 0x00, - 0x1d, 0x13, 0x41, 0xe9, 0x08, 0x13, 0x41, 0xe1, 0x17, 0x13, 0x01, 0x42, - 0x22, 0x00, 0x18, 0x13, 0x41, 0xe1, 0x26, 0x13, 0x01, 0xa4, 0x06, 0x42, - 0x22, 0x00, 0x27, 0x13, 0x41, 0xe1, 0x21, 0x13, 0x01, 0x42, 0x22, 0x00, - 0x22, 0x13, 0x41, 0xe1, 0x1a, 0x13, 0x01, 0x42, 0x22, 0x00, 0x1b, 0x13, - 0x41, 0xe1, 0x2c, 0x13, 0x01, 0x42, 0x22, 0x00, 0x2d, 0x13, 0x41, 0xe1, - 0x06, 0x13, 0x01, 0xe9, 0x10, 0x13, 0x01, 0xf5, 0x14, 0x13, 0x41, 0xa1, - 0xd5, 0x01, 0x45, 0xd7, 0xd9, 0x7d, 0xf9, 0x01, 0x44, 0xba, 0xed, 0xcc, - 0xf3, 0x01, 0x46, 0x50, 0xdb, 0x7d, 0xf7, 0x01, 0x43, 0x55, 0x0d, 0xbf, - 0xfa, 0x01, 0x45, 0x46, 0xe7, 0x8d, 0xf9, 0x01, 0x0c, 0xfd, 0x93, 0x01, - 0xff, 0xa1, 0xa3, 0x01, 0x47, 0x91, 0xcc, 0x31, 0x03, 0x01, 0x44, 0x3e, - 0xec, 0x33, 0x03, 0x01, 0x43, 0xc2, 0xa9, 0x39, 0x03, 0x01, 0x45, 0x4a, - 0xe3, 0x46, 0x03, 0x01, 0x44, 0xba, 0xec, 0x32, 0x03, 0x01, 0xa8, 0x77, - 0xa9, 0x69, 0x43, 0x74, 0xb8, 0x3e, 0x03, 0x01, 0x45, 0xda, 0xe4, 0x3a, - 0x03, 0x01, 0x45, 0xf8, 0xe4, 0x3b, 0x03, 0x01, 0x45, 0x19, 0x90, 0x3c, - 0x03, 0x01, 0xae, 0x38, 0x45, 0x88, 0xe6, 0x49, 0x03, 0x01, 0x48, 0x12, - 0xc7, 0x40, 0x03, 0x01, 0x48, 0x62, 0xc7, 0x35, 0x03, 0x01, 0x45, 0x0a, - 0xe7, 0x42, 0x03, 0x01, 0x45, 0xa0, 0xe7, 0x43, 0x03, 0x01, 0xb4, 0x0c, - 0x44, 0x92, 0xef, 0x3f, 0x03, 0x01, 0x45, 0x2b, 0xe9, 0x45, 0x03, 0x41, - 0x44, 0x72, 0xec, 0x44, 0x03, 0x01, 0x45, 0xfe, 0xe3, 0x38, 0x03, 0x41, - 0x45, 0x74, 0xe1, 0x3d, 0x03, 0x01, 0x03, 0xc3, 0x07, 0x01, 0xff, 0x48, - 0x21, 0x11, 0x4a, 0x03, 0x01, 0x42, 0x2e, 0x11, 0x41, 0x03, 0x41, 0x44, - 0xae, 0xec, 0x47, 0x03, 0x01, 0x43, 0xa6, 0xc8, 0x36, 0x03, 0x41, 0x43, - 0xcf, 0x8f, 0x37, 0x03, 0x01, 0x44, 0xd2, 0xef, 0x48, 0x03, 0x41, 0x43, - 0x77, 0xe1, 0x30, 0x03, 0x01, 0x45, 0x3f, 0xe4, 0x34, 0x03, 0x41, 0x45, - 0xe4, 0xe4, 0x45, 0xf9, 0x01, 0xf4, 0x10, 0xf4, 0x41, 0xa1, 0x1b, 0x4a, - 0x93, 0xa7, 0xe6, 0x29, 0x00, 0xaf, 0x01, 0xff, 0x51, 0x1b, 0x57, 0x10, - 0xf3, 0x01, 0x43, 0xec, 0x49, 0xe4, 0xf9, 0x01, 0x49, 0xbf, 0xbe, 0x1f, - 0xf3, 0x41, 0x08, 0x1a, 0x5a, 0x06, 0x4a, 0xe1, 0xae, 0x5b, 0xf9, 0x41, - 0x0f, 0xb9, 0x05, 0xc6, 0x02, 0x0d, 0x4b, 0x08, 0x01, 0xff, 0x43, 0x9f, - 0xf0, 0x30, 0x2c, 0x00, 0xa2, 0xac, 0x02, 0xa3, 0x9d, 0x02, 0xa4, 0x88, - 0x02, 0xa6, 0xf9, 0x01, 0x47, 0x74, 0xce, 0x33, 0x2c, 0x00, 0x44, 0xee, - 0xec, 0x48, 0x2c, 0x00, 0xe9, 0x3b, 0x2c, 0x80, 0xc2, 0x01, 0x44, 0x86, - 0xed, 0x3d, 0x2c, 0x00, 0xac, 0xad, 0x01, 0x47, 0x63, 0x69, 0x3f, 0x2c, - 0x00, 0x45, 0xd4, 0xe5, 0x40, 0x2c, 0x00, 0xaf, 0x92, 0x01, 0xb0, 0x85, - 0x01, 0x45, 0x4b, 0xe7, 0x43, 0x2c, 0x00, 0xb3, 0x51, 0xb4, 0x3d, 0x43, - 0x3e, 0xd3, 0x46, 0x2c, 0x00, 0x44, 0xa6, 0xef, 0x32, 0x2c, 0x00, 0xb9, - 0x0f, 0xba, 0x01, 0xff, 0x45, 0xe6, 0xe2, 0x38, 0x2c, 0x00, 0x46, 0x94, - 0xd9, 0x36, 0x2c, 0x40, 0x43, 0xb3, 0x00, 0x51, 0x2c, 0x00, 0xa5, 0x08, - 0xef, 0x56, 0x2c, 0x00, 0xf5, 0x53, 0x2c, 0x40, 0xb2, 0x06, 0x43, 0xd7, - 0x09, 0x35, 0x2c, 0x40, 0xe9, 0x50, 0x2c, 0x00, 0xf5, 0x4f, 0x2c, 0x40, - 0x4b, 0x0c, 0xa0, 0x5d, 0x2c, 0x00, 0x42, 0x2f, 0x03, 0x4c, 0x2c, 0x00, - 0x45, 0xfe, 0xe8, 0x45, 0x2c, 0x40, 0xa8, 0x19, 0x44, 0xd2, 0xed, 0x44, - 0x2c, 0x00, 0x48, 0xd1, 0xbc, 0x54, 0x2c, 0x80, 0x06, 0x49, 0x9e, 0xbb, - 0x52, 0x2c, 0x40, 0x4a, 0x5f, 0xa4, 0x55, 0x2c, 0x40, 0xe1, 0x4e, 0x2c, - 0x00, 0x42, 0x12, 0x00, 0x4b, 0x2c, 0xc0, 0x00, 0x43, 0x3a, 0x89, 0x5c, - 0x2c, 0x40, 0xe5, 0x4a, 0x2c, 0x00, 0x45, 0x35, 0xdc, 0x42, 0x2c, 0x40, - 0x42, 0xd1, 0x15, 0x41, 0x2c, 0x00, 0x42, 0x5c, 0x01, 0x49, 0x2c, 0x40, - 0x4f, 0x5b, 0x69, 0x5e, 0x2c, 0x00, 0x46, 0x20, 0xd0, 0x3e, 0x2c, 0x40, - 0x4b, 0xf1, 0x9d, 0x3a, 0x2c, 0x00, 0x07, 0x16, 0x21, 0x0f, 0x02, 0xb3, - 0x27, 0x01, 0xff, 0xe5, 0x39, 0x2c, 0x00, 0x44, 0x1d, 0x84, 0x5b, 0x2c, - 0x40, 0x47, 0xb4, 0xcc, 0x59, 0x2c, 0x00, 0x49, 0xd0, 0xbc, 0x57, 0x2c, - 0x40, 0x43, 0xbc, 0x05, 0x5a, 0x2c, 0x00, 0x44, 0xe5, 0xbc, 0x47, 0x2c, - 0x40, 0x45, 0x94, 0xe4, 0x3c, 0x2c, 0x00, 0x44, 0x76, 0xee, 0x34, 0x2c, - 0x00, 0x44, 0x0a, 0xf0, 0x37, 0x2c, 0x40, 0x4d, 0x68, 0x7f, 0x5f, 0x2c, - 0x00, 0x45, 0x70, 0x7f, 0x4d, 0x2c, 0x40, 0x46, 0xb5, 0xcc, 0x58, 0x2c, - 0x00, 0x43, 0xbc, 0xcf, 0x31, 0x2c, 0x40, 0x43, 0x9f, 0xf0, 0x00, 0x2c, - 0x00, 0xa2, 0xac, 0x02, 0xa3, 0x9d, 0x02, 0xa4, 0x88, 0x02, 0xa6, 0xf9, - 0x01, 0x47, 0x74, 0xce, 0x03, 0x2c, 0x00, 0x44, 0xee, 0xec, 0x18, 0x2c, - 0x00, 0xe9, 0x0b, 0x2c, 0x80, 0xc2, 0x01, 0x44, 0x86, 0xed, 0x0d, 0x2c, - 0x00, 0xac, 0xad, 0x01, 0x47, 0x63, 0x69, 0x0f, 0x2c, 0x00, 0x45, 0xd4, - 0xe5, 0x10, 0x2c, 0x00, 0xaf, 0x92, 0x01, 0xb0, 0x85, 0x01, 0x45, 0x4b, - 0xe7, 0x13, 0x2c, 0x00, 0xb3, 0x51, 0xb4, 0x3d, 0x43, 0x3e, 0xd3, 0x16, - 0x2c, 0x00, 0x44, 0xa6, 0xef, 0x02, 0x2c, 0x00, 0xb9, 0x0f, 0xba, 0x01, - 0xff, 0x45, 0xe6, 0xe2, 0x08, 0x2c, 0x00, 0x46, 0x94, 0xd9, 0x06, 0x2c, - 0x40, 0x43, 0xb3, 0x00, 0x21, 0x2c, 0x00, 0xa5, 0x08, 0xef, 0x26, 0x2c, - 0x00, 0xf5, 0x23, 0x2c, 0x40, 0xb2, 0x06, 0x43, 0xd7, 0x09, 0x05, 0x2c, - 0x40, 0xe9, 0x20, 0x2c, 0x00, 0xf5, 0x1f, 0x2c, 0x40, 0x4b, 0x0c, 0xa0, - 0x2d, 0x2c, 0x00, 0x42, 0x2f, 0x03, 0x1c, 0x2c, 0x00, 0x45, 0xfe, 0xe8, - 0x15, 0x2c, 0x40, 0xa8, 0x19, 0x44, 0xd2, 0xed, 0x14, 0x2c, 0x00, 0x48, - 0xd1, 0xbc, 0x24, 0x2c, 0x80, 0x06, 0x49, 0x9e, 0xbb, 0x22, 0x2c, 0x40, - 0x4a, 0x5f, 0xa4, 0x25, 0x2c, 0x40, 0xe1, 0x1e, 0x2c, 0x00, 0x42, 0x12, - 0x00, 0x1b, 0x2c, 0xc0, 0x00, 0x43, 0x3a, 0x89, 0x2c, 0x2c, 0x40, 0xe5, - 0x1a, 0x2c, 0x00, 0x45, 0x35, 0xdc, 0x12, 0x2c, 0x40, 0x42, 0xd1, 0x15, - 0x11, 0x2c, 0x00, 0x42, 0x5c, 0x01, 0x19, 0x2c, 0x40, 0x4f, 0x5b, 0x69, - 0x2e, 0x2c, 0x00, 0x46, 0x20, 0xd0, 0x0e, 0x2c, 0x40, 0x4b, 0xf1, 0x9d, - 0x0a, 0x2c, 0x00, 0x07, 0x16, 0x21, 0x0f, 0x02, 0xb3, 0x27, 0x01, 0xff, - 0xe5, 0x09, 0x2c, 0x00, 0x44, 0x1d, 0x84, 0x2b, 0x2c, 0x40, 0x47, 0xb4, - 0xcc, 0x29, 0x2c, 0x00, 0x49, 0xd0, 0xbc, 0x27, 0x2c, 0x40, 0x43, 0xbc, - 0x05, 0x2a, 0x2c, 0x00, 0x44, 0xe5, 0xbc, 0x17, 0x2c, 0x40, 0x45, 0x94, - 0xe4, 0x0c, 0x2c, 0x00, 0x44, 0x76, 0xee, 0x04, 0x2c, 0x00, 0x44, 0x0a, - 0xf0, 0x07, 0x2c, 0x40, 0x4d, 0x68, 0x7f, 0x2f, 0x2c, 0x00, 0x45, 0x70, - 0x7f, 0x1d, 0x2c, 0x40, 0x46, 0xb5, 0xcc, 0x28, 0x2c, 0x00, 0x43, 0xbc, - 0xcf, 0x01, 0x2c, 0x40, 0x4a, 0x7b, 0xab, 0x37, 0x21, 0x00, 0x49, 0xee, - 0xb9, 0xda, 0xfa, 0x01, 0xb2, 0x01, 0xff, 0x49, 0x64, 0xb3, 0x92, 0xf9, - 0x01, 0xec, 0x67, 0xf4, 0xc1, 0x00, 0x48, 0x2e, 0x4a, 0xca, 0xf6, 0x41, - 0x42, 0x17, 0x00, 0x99, 0x26, 0x80, 0xc0, 0x09, 0xad, 0xb1, 0x09, 0x43, - 0xde, 0x7c, 0xde, 0xf9, 0x01, 0xaf, 0x0c, 0x4f, 0x26, 0x71, 0xb0, 0x20, - 0x00, 0x47, 0x52, 0xd3, 0x13, 0x30, 0x40, 0x06, 0x53, 0x54, 0x81, 0x09, - 0x06, 0xb2, 0x99, 0x01, 0xff, 0x0f, 0xb9, 0x05, 0xf3, 0x06, 0x07, 0xc1, - 0x05, 0xc1, 0x04, 0x18, 0x95, 0x29, 0x8f, 0x02, 0x53, 0xce, 0x4a, 0xfb, - 0x10, 0x00, 0x0d, 0x4b, 0x08, 0x01, 0xff, 0xa1, 0xf7, 0x01, 0x43, 0xba, - 0x15, 0x01, 0x2d, 0x00, 0xa3, 0xd4, 0x01, 0x43, 0x1d, 0x11, 0x03, 0x2d, - 0x00, 0x42, 0x92, 0x01, 0x04, 0x2d, 0x00, 0xa7, 0xb9, 0x01, 0xa8, 0x9c, - 0x01, 0x42, 0x9e, 0x01, 0x08, 0x2d, 0x00, 0xaa, 0x87, 0x01, 0xab, 0x79, - 0x43, 0xfa, 0x0d, 0x0a, 0x2d, 0x00, 0x43, 0xd5, 0x17, 0x0b, 0x2d, 0x00, - 0x43, 0x7c, 0x26, 0x0c, 0x2d, 0x00, 0x42, 0x10, 0x00, 0x0d, 0x2d, 0x00, - 0xb0, 0x53, 0x43, 0x3b, 0xf1, 0x17, 0x2d, 0x00, 0x43, 0xdf, 0x80, 0x10, - 0x2d, 0x00, 0xb3, 0x39, 0x02, 0x12, 0x00, 0x2d, 0x42, 0xf3, 0x0a, 0x13, - 0x2d, 0x00, 0x43, 0x68, 0x2a, 0x05, 0x2d, 0x00, 0x42, 0x15, 0x01, 0x23, - 0x2d, 0x00, 0x43, 0xcd, 0xeb, 0x1e, 0x2d, 0x00, 0x42, 0x61, 0x1c, 0x27, - 0x2d, 0x00, 0xba, 0x01, 0xff, 0x42, 0x92, 0x01, 0x06, 0x2d, 0x00, 0x43, - 0x65, 0x05, 0x0f, 0x2d, 0x40, 0xee, 0x07, 0x2d, 0x00, 0xf2, 0x12, 0x2d, - 0x40, 0x42, 0x1a, 0x00, 0x11, 0x2d, 0x00, 0x43, 0x0e, 0x16, 0x18, 0x2d, - 0x40, 0x42, 0x17, 0x00, 0x0e, 0x2d, 0x00, 0x43, 0x65, 0x05, 0x14, 0x2d, - 0x40, 0x42, 0x1a, 0x00, 0x09, 0x2d, 0x00, 0x43, 0x65, 0x05, 0x15, 0x2d, - 0x40, 0x43, 0x90, 0x00, 0x1f, 0x2d, 0x00, 0x42, 0x62, 0x01, 0x1b, 0x2d, - 0x40, 0xa1, 0x10, 0xe5, 0x21, 0x2d, 0x00, 0x42, 0xc9, 0x02, 0x22, 0x2d, - 0x00, 0x42, 0x17, 0x50, 0x25, 0x2d, 0x40, 0xe5, 0x20, 0x2d, 0x00, 0xf2, - 0x24, 0x2d, 0x40, 0x42, 0x1a, 0x00, 0x02, 0x2d, 0x00, 0x43, 0x90, 0x00, - 0x16, 0x2d, 0x40, 0x42, 0x1a, 0x00, 0x1a, 0x2d, 0x00, 0xa8, 0x06, 0x42, - 0x62, 0x01, 0x1c, 0x2d, 0x40, 0x42, 0x17, 0x00, 0x1d, 0x2d, 0x00, 0x42, - 0x9e, 0x01, 0x19, 0x2d, 0x40, 0x42, 0x92, 0x01, 0x2d, 0x2d, 0x00, 0xee, - 0x00, 0x2d, 0x40, 0xa1, 0x9a, 0x02, 0x43, 0xba, 0x15, 0x91, 0x1c, 0x00, - 0xa3, 0xf7, 0x01, 0x43, 0x1d, 0x11, 0x93, 0x1c, 0x00, 0xa5, 0xe4, 0x01, - 0x42, 0xc8, 0x02, 0xb6, 0x1c, 0x00, 0xa7, 0xcf, 0x01, 0xa8, 0xab, 0x01, - 0x42, 0x9e, 0x01, 0x98, 0x1c, 0x00, 0xaa, 0x96, 0x01, 0xab, 0x87, 0x01, - 0x02, 0x74, 0x00, 0x79, 0x43, 0xd5, 0x17, 0x9b, 0x1c, 0x00, 0x43, 0x7c, - 0x26, 0x9c, 0x1c, 0x00, 0x42, 0x10, 0x00, 0x9d, 0x1c, 0x00, 0xb0, 0x59, - 0x43, 0x3b, 0xf1, 0xa7, 0x1c, 0x00, 0x43, 0xdf, 0x80, 0xa0, 0x1c, 0x00, - 0xb3, 0x3f, 0xb4, 0x2d, 0x42, 0xf3, 0x0a, 0xa3, 0x1c, 0x00, 0x43, 0x68, - 0x2a, 0x95, 0x1c, 0x00, 0x42, 0x15, 0x01, 0xb3, 0x1c, 0x00, 0x43, 0xcd, - 0xeb, 0xae, 0x1c, 0x00, 0x42, 0x61, 0x1c, 0xb7, 0x1c, 0x00, 0xba, 0x01, - 0xff, 0x42, 0x92, 0x01, 0x96, 0x1c, 0x00, 0x43, 0x65, 0x05, 0x9f, 0x1c, - 0x40, 0xa1, 0x06, 0x49, 0x1d, 0xbe, 0xb9, 0x1c, 0x40, 0xee, 0x97, 0x1c, - 0x00, 0xf2, 0xa2, 0x1c, 0x40, 0x42, 0x1a, 0x00, 0xa1, 0x1c, 0x00, 0x43, - 0x0e, 0x16, 0xa8, 0x1c, 0x40, 0x42, 0x17, 0x00, 0x9e, 0x1c, 0x00, 0x43, - 0x65, 0x05, 0xa4, 0x1c, 0x40, 0x49, 0x45, 0xb4, 0xbf, 0x1c, 0x00, 0xf3, - 0x9a, 0x1c, 0x40, 0x42, 0x1a, 0x00, 0x99, 0x1c, 0x00, 0x43, 0x65, 0x05, - 0xa5, 0x1c, 0x40, 0x43, 0x90, 0x00, 0xaf, 0x1c, 0x00, 0x42, 0x62, 0x01, - 0xab, 0x1c, 0x40, 0xa1, 0x10, 0xe5, 0xb1, 0x1c, 0x00, 0x42, 0xc9, 0x02, - 0xb2, 0x1c, 0x00, 0x42, 0x17, 0x50, 0xb5, 0x1c, 0x40, 0xe5, 0xb0, 0x1c, - 0x00, 0xf2, 0xb4, 0x1c, 0xc0, 0x00, 0x46, 0x67, 0x46, 0xbe, 0x1c, 0x40, - 0x42, 0x1a, 0x00, 0x92, 0x1c, 0x00, 0x43, 0x90, 0x00, 0xa6, 0x1c, 0x40, - 0x44, 0x12, 0x8a, 0xb8, 0x1c, 0x00, 0xee, 0x94, 0x1c, 0x40, 0x42, 0x1a, - 0x00, 0xaa, 0x1c, 0x00, 0xa8, 0x06, 0x42, 0x62, 0x01, 0xac, 0x1c, 0x40, - 0x42, 0x17, 0x00, 0xad, 0x1c, 0x00, 0x42, 0x9e, 0x01, 0xa9, 0x1c, 0x40, - 0x42, 0x92, 0x01, 0xbd, 0x1c, 0x00, 0x42, 0x9e, 0x01, 0xba, 0x1c, 0x00, - 0xee, 0x90, 0x1c, 0x40, 0xa1, 0x9a, 0x02, 0x43, 0xba, 0x15, 0xd1, 0x10, - 0x00, 0xa3, 0xf7, 0x01, 0x43, 0x1d, 0x11, 0xd3, 0x10, 0x00, 0xa5, 0xe4, - 0x01, 0x42, 0xc8, 0x02, 0xf6, 0x10, 0x00, 0xa7, 0xcf, 0x01, 0xa8, 0xab, - 0x01, 0x42, 0x9e, 0x01, 0xd8, 0x10, 0x00, 0xaa, 0x96, 0x01, 0xab, 0x87, - 0x01, 0x02, 0x74, 0x00, 0x79, 0x43, 0xd5, 0x17, 0xdb, 0x10, 0x00, 0x43, - 0x7c, 0x26, 0xdc, 0x10, 0x00, 0x42, 0x10, 0x00, 0xdd, 0x10, 0x00, 0xb0, - 0x59, 0x43, 0x3b, 0xf1, 0xe7, 0x10, 0x00, 0x43, 0xdf, 0x80, 0xe0, 0x10, - 0x00, 0xb3, 0x3f, 0xb4, 0x2d, 0x42, 0xf3, 0x0a, 0xe3, 0x10, 0x00, 0x43, - 0x68, 0x2a, 0xd5, 0x10, 0x00, 0x42, 0x15, 0x01, 0xf3, 0x10, 0x00, 0x43, - 0xcd, 0xeb, 0xee, 0x10, 0x00, 0x42, 0x61, 0x1c, 0xf7, 0x10, 0x00, 0xba, - 0x01, 0xff, 0x42, 0x92, 0x01, 0xd6, 0x10, 0x00, 0x43, 0x65, 0x05, 0xdf, - 0x10, 0x40, 0xa1, 0x06, 0x49, 0x1d, 0xbe, 0xf9, 0x10, 0x40, 0xee, 0xd7, - 0x10, 0x00, 0xf2, 0xe2, 0x10, 0x40, 0x42, 0x1a, 0x00, 0xe1, 0x10, 0x00, - 0x43, 0x0e, 0x16, 0xe8, 0x10, 0x40, 0x42, 0x17, 0x00, 0xde, 0x10, 0x00, - 0x43, 0x65, 0x05, 0xe4, 0x10, 0x40, 0x49, 0x45, 0xb4, 0xff, 0x10, 0x00, - 0xf3, 0xda, 0x10, 0x40, 0x42, 0x1a, 0x00, 0xd9, 0x10, 0x00, 0x43, 0x65, - 0x05, 0xe5, 0x10, 0x40, 0x43, 0x90, 0x00, 0xef, 0x10, 0x00, 0x42, 0x62, - 0x01, 0xeb, 0x10, 0x40, 0xa1, 0x10, 0xe5, 0xf1, 0x10, 0x00, 0x42, 0xc9, - 0x02, 0xf2, 0x10, 0x00, 0x42, 0x17, 0x50, 0xf5, 0x10, 0x40, 0xe5, 0xf0, - 0x10, 0x00, 0xf2, 0xf4, 0x10, 0xc0, 0x00, 0x46, 0x67, 0x46, 0xfe, 0x10, - 0x40, 0x42, 0x1a, 0x00, 0xd2, 0x10, 0x00, 0x43, 0x90, 0x00, 0xe6, 0x10, - 0x40, 0x44, 0x12, 0x8a, 0xf8, 0x10, 0x00, 0xee, 0xd4, 0x10, 0x40, 0x42, - 0x1a, 0x00, 0xea, 0x10, 0x00, 0xa8, 0x06, 0x42, 0x62, 0x01, 0xec, 0x10, - 0x40, 0x42, 0x17, 0x00, 0xed, 0x10, 0x00, 0x42, 0x9e, 0x01, 0xe9, 0x10, - 0x40, 0x42, 0x92, 0x01, 0xfd, 0x10, 0x00, 0x42, 0x9e, 0x01, 0xfa, 0x10, - 0x00, 0xee, 0xd0, 0x10, 0x40, 0xa1, 0xf7, 0x01, 0x43, 0xba, 0x15, 0xa1, - 0x10, 0x00, 0xa3, 0xd4, 0x01, 0x43, 0x1d, 0x11, 0xa3, 0x10, 0x00, 0x42, - 0x92, 0x01, 0xa4, 0x10, 0x00, 0xa7, 0xb9, 0x01, 0xa8, 0x9c, 0x01, 0x42, - 0x9e, 0x01, 0xa8, 0x10, 0x00, 0xaa, 0x87, 0x01, 0xab, 0x79, 0x43, 0xfa, - 0x0d, 0xaa, 0x10, 0x00, 0x43, 0xd5, 0x17, 0xab, 0x10, 0x00, 0x43, 0x7c, - 0x26, 0xac, 0x10, 0x00, 0x42, 0x10, 0x00, 0xad, 0x10, 0x00, 0xb0, 0x53, - 0x43, 0x3b, 0xf1, 0xb7, 0x10, 0x00, 0x43, 0xdf, 0x80, 0xb0, 0x10, 0x00, - 0xb3, 0x39, 0x02, 0x12, 0x00, 0x2d, 0x42, 0xf3, 0x0a, 0xb3, 0x10, 0x00, - 0x43, 0x68, 0x2a, 0xa5, 0x10, 0x00, 0x42, 0x15, 0x01, 0xc3, 0x10, 0x00, - 0x43, 0xcd, 0xeb, 0xbe, 0x10, 0x00, 0x42, 0x61, 0x1c, 0xc7, 0x10, 0x00, - 0xba, 0x01, 0xff, 0x42, 0x92, 0x01, 0xa6, 0x10, 0x00, 0x43, 0x65, 0x05, - 0xaf, 0x10, 0x40, 0xee, 0xa7, 0x10, 0x00, 0xf2, 0xb2, 0x10, 0x40, 0x42, - 0x1a, 0x00, 0xb1, 0x10, 0x00, 0x43, 0x0e, 0x16, 0xb8, 0x10, 0x40, 0x42, - 0x17, 0x00, 0xae, 0x10, 0x00, 0x43, 0x65, 0x05, 0xb4, 0x10, 0x40, 0x42, - 0x1a, 0x00, 0xa9, 0x10, 0x00, 0x43, 0x65, 0x05, 0xb5, 0x10, 0x40, 0x43, - 0x90, 0x00, 0xbf, 0x10, 0x00, 0x42, 0x62, 0x01, 0xbb, 0x10, 0x40, 0xa1, - 0x10, 0xe5, 0xc1, 0x10, 0x00, 0x42, 0xc9, 0x02, 0xc2, 0x10, 0x00, 0x42, - 0x17, 0x50, 0xc5, 0x10, 0x40, 0xe5, 0xc0, 0x10, 0x00, 0xf2, 0xc4, 0x10, - 0x40, 0x42, 0x1a, 0x00, 0xa2, 0x10, 0x00, 0x43, 0x90, 0x00, 0xb6, 0x10, - 0x40, 0x42, 0x1a, 0x00, 0xba, 0x10, 0x00, 0xa8, 0x06, 0x42, 0x62, 0x01, - 0xbc, 0x10, 0x40, 0x42, 0x17, 0x00, 0xbd, 0x10, 0x00, 0x42, 0x9e, 0x01, - 0xb9, 0x10, 0x40, 0x42, 0x92, 0x01, 0xcd, 0x10, 0x00, 0xee, 0xa0, 0x10, - 0x40, 0x4b, 0xbc, 0x95, 0x3a, 0x22, 0x00, 0x08, 0xa4, 0x0c, 0x01, 0xff, - 0x45, 0xac, 0x0c, 0x51, 0x22, 0x00, 0x4a, 0x06, 0x39, 0x4e, 0x22, 0x40, - 0x46, 0x2f, 0xb8, 0x8e, 0xf4, 0x01, 0x43, 0x06, 0x07, 0x4a, 0x26, 0x40, - 0x05, 0x50, 0x00, 0x01, 0xff, 0x48, 0x8a, 0xbf, 0xee, 0x26, 0x00, 0x47, - 0x61, 0xd1, 0xed, 0x26, 0x40, 0x46, 0x08, 0xdb, 0xb2, 0xf3, 0x01, 0xb2, - 0x01, 0xff, 0x03, 0x63, 0x1f, 0x06, 0x43, 0x91, 0x04, 0xc4, 0xf9, 0x41, - 0xa3, 0x96, 0x02, 0x06, 0xc4, 0x06, 0xcf, 0x01, 0x46, 0x1a, 0x62, 0x6e, - 0x0d, 0x01, 0x4a, 0x6d, 0x96, 0x8f, 0x0d, 0x01, 0x49, 0x45, 0x70, 0x8e, - 0x0d, 0x01, 0x52, 0x78, 0x53, 0x6f, 0x0d, 0x01, 0xb3, 0x25, 0x06, 0x6c, - 0x38, 0x01, 0xff, 0x4b, 0x72, 0x38, 0x4e, 0x0d, 0x01, 0x05, 0x2f, 0x03, - 0x01, 0xff, 0xe1, 0x4a, 0x0d, 0x01, 0xe5, 0x69, 0x0d, 0x81, 0x08, 0xe9, - 0x4b, 0x0d, 0x01, 0xef, 0x4c, 0x0d, 0x41, 0xe5, 0x4d, 0x0d, 0x41, 0x0c, - 0x4c, 0x08, 0x06, 0x44, 0x00, 0xe8, 0x4f, 0x0d, 0x41, 0xe1, 0x70, 0x0d, - 0x01, 0x42, 0x16, 0x00, 0x74, 0x0d, 0x01, 0x42, 0x37, 0x00, 0x71, 0x0d, - 0x01, 0x42, 0xa1, 0x10, 0x7a, 0x0d, 0x01, 0x42, 0xe1, 0x07, 0x80, 0x0d, - 0x01, 0x42, 0x24, 0x02, 0x79, 0x0d, 0x01, 0x42, 0x22, 0x00, 0x83, 0x0d, - 0x01, 0x42, 0xbd, 0x26, 0x75, 0x0d, 0x01, 0x42, 0x1b, 0x02, 0x73, 0x0d, - 0x01, 0x42, 0x74, 0x00, 0x78, 0x0d, 0x01, 0x42, 0x6c, 0x00, 0x72, 0x0d, - 0x01, 0xae, 0x3a, 0x04, 0xa6, 0x24, 0x2a, 0x42, 0x6c, 0x09, 0x82, 0x0d, - 0x01, 0x42, 0x71, 0x00, 0x7e, 0x0d, 0x01, 0x42, 0x15, 0x06, 0x76, 0x0d, - 0x01, 0x42, 0x12, 0x00, 0x7d, 0x0d, 0x01, 0x42, 0xa9, 0x01, 0x77, 0x0d, - 0x01, 0x42, 0x4c, 0x26, 0x7b, 0x0d, 0x01, 0x42, 0x34, 0x22, 0x7c, 0x0d, - 0x41, 0x42, 0x1b, 0x02, 0x84, 0x0d, 0x01, 0x42, 0xff, 0x04, 0x85, 0x0d, - 0x41, 0xe1, 0x81, 0x0d, 0x01, 0x42, 0x34, 0x22, 0x7f, 0x0d, 0x41, 0x45, - 0xc3, 0x0a, 0x48, 0x0d, 0x01, 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0x49, 0x0d, - 0x01, 0x43, 0xbf, 0x0a, 0x41, 0x0d, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, - 0xa1, 0x1d, 0x40, 0x0d, 0x41, 0x44, 0x25, 0x01, 0x43, 0x0d, 0x01, 0x42, - 0x15, 0x02, 0x42, 0x0d, 0x41, 0x44, 0x27, 0x1d, 0x47, 0x0d, 0x01, 0x42, - 0x60, 0x25, 0x46, 0x0d, 0x41, 0x43, 0xa7, 0x05, 0x45, 0x0d, 0x01, 0x43, - 0xcb, 0x06, 0x44, 0x0d, 0x41, 0x0e, 0xba, 0x05, 0x24, 0xaf, 0x01, 0xff, - 0x0a, 0x5d, 0xab, 0x11, 0x08, 0x59, 0x32, 0x01, 0xff, 0x4f, 0xe0, 0x6b, - 0x6a, 0x0d, 0x01, 0x51, 0xf5, 0x5a, 0x6d, 0x0d, 0x41, 0x47, 0x9a, 0x1d, - 0x6b, 0x0d, 0x01, 0x4e, 0x9c, 0x60, 0x6c, 0x0d, 0x41, 0xe1, 0x50, 0x0d, - 0x01, 0x42, 0x16, 0x00, 0x54, 0x0d, 0x01, 0x42, 0x37, 0x00, 0x51, 0x0d, - 0x01, 0x42, 0xa1, 0x10, 0x5a, 0x0d, 0x01, 0x42, 0xe1, 0x07, 0x60, 0x0d, - 0x01, 0x42, 0x24, 0x02, 0x59, 0x0d, 0x01, 0x42, 0x22, 0x00, 0x63, 0x0d, - 0x01, 0x42, 0xbd, 0x26, 0x55, 0x0d, 0x01, 0x42, 0x1b, 0x02, 0x53, 0x0d, - 0x01, 0x42, 0x74, 0x00, 0x58, 0x0d, 0x01, 0x42, 0x6c, 0x00, 0x52, 0x0d, - 0x01, 0xae, 0x3a, 0x04, 0xa6, 0x24, 0x2a, 0x42, 0x6c, 0x09, 0x62, 0x0d, - 0x01, 0x42, 0x71, 0x00, 0x5e, 0x0d, 0x01, 0x42, 0x15, 0x06, 0x56, 0x0d, - 0x01, 0x42, 0x12, 0x00, 0x5d, 0x0d, 0x01, 0x42, 0xa9, 0x01, 0x57, 0x0d, - 0x01, 0x42, 0x4c, 0x26, 0x5b, 0x0d, 0x01, 0x42, 0x34, 0x22, 0x5c, 0x0d, - 0x41, 0x42, 0x1b, 0x02, 0x64, 0x0d, 0x01, 0x42, 0xff, 0x04, 0x65, 0x0d, - 0x41, 0xe1, 0x61, 0x0d, 0x01, 0x42, 0x34, 0x22, 0x5f, 0x0d, 0x41, 0xa1, - 0xf0, 0x0a, 0xa5, 0xbc, 0x0a, 0xa9, 0xe6, 0x08, 0xac, 0xca, 0x07, 0xaf, - 0x8c, 0x06, 0xb2, 0x9b, 0x05, 0xb5, 0x01, 0xff, 0x47, 0xef, 0xcd, 0xfd, - 0x26, 0x00, 0x02, 0x0f, 0x07, 0x1a, 0xae, 0x06, 0x42, 0x1b, 0x03, 0xdb, - 0x23, 0x40, 0x51, 0x2b, 0x58, 0x61, 0x20, 0x00, 0x48, 0x2a, 0xc3, 0xb1, - 0x26, 0x00, 0x43, 0x50, 0xc5, 0x08, 0xce, 0x41, 0x80, 0xcf, 0x04, 0x06, - 0xe0, 0x4e, 0x01, 0xff, 0xa1, 0xb5, 0x04, 0x4a, 0x21, 0xa6, 0xe4, 0xff, - 0x00, 0xa3, 0x88, 0x04, 0xa4, 0xb9, 0x03, 0xa5, 0xaa, 0x03, 0x49, 0x15, - 0x16, 0x0e, 0xff, 0x00, 0x02, 0x87, 0x00, 0x93, 0x03, 0x4c, 0x15, 0x8e, - 0x0d, 0xff, 0x00, 0xac, 0x83, 0x01, 0x46, 0x04, 0x6f, 0xe3, 0xff, 0x00, - 0xae, 0x6f, 0xb0, 0x5b, 0x02, 0x7c, 0x00, 0x4b, 0xb2, 0x26, 0xb3, 0x18, - 0x45, 0xad, 0x22, 0x5e, 0xff, 0x00, 0x4d, 0x7e, 0x0b, 0x5c, 0xff, 0x00, - 0x48, 0xd2, 0xc9, 0xe6, 0xff, 0x00, 0x48, 0xc0, 0x7d, 0xe5, 0xff, 0x40, - 0x48, 0x6f, 0x58, 0x1b, 0xff, 0x00, 0x46, 0x6a, 0x30, 0x0f, 0xff, 0x40, - 0x4e, 0xcd, 0x70, 0x3c, 0xff, 0x00, 0x05, 0xc9, 0x00, 0x01, 0xff, 0x4d, - 0x23, 0x0b, 0x5d, 0xff, 0x00, 0x4b, 0x50, 0x21, 0x09, 0xff, 0x00, 0x4e, - 0x27, 0x26, 0x3d, 0xff, 0x00, 0x51, 0x03, 0x5e, 0x60, 0xff, 0x40, 0x4b, - 0xd8, 0x33, 0x1f, 0xff, 0x00, 0x4c, 0xf0, 0x04, 0x02, 0xff, 0x40, 0x4b, - 0xc6, 0x99, 0x05, 0xff, 0x00, 0x48, 0x46, 0x70, 0x0b, 0xff, 0x00, 0x49, - 0x5c, 0xad, 0xe1, 0xff, 0x40, 0x47, 0x00, 0x72, 0xe2, 0xff, 0x00, 0x4a, - 0x8a, 0x66, 0x03, 0xff, 0x40, 0x05, 0xb4, 0x05, 0x2a, 0xa5, 0x06, 0x47, - 0xac, 0x88, 0x3f, 0xff, 0x40, 0x03, 0xc5, 0x00, 0x06, 0x4c, 0x9d, 0x93, - 0x1c, 0xff, 0x40, 0x4d, 0x23, 0x0b, 0x5b, 0xff, 0x00, 0x4b, 0x50, 0x21, - 0x08, 0xff, 0x00, 0x4e, 0x27, 0x26, 0x3b, 0xff, 0x00, 0x51, 0x03, 0x5e, - 0x5f, 0xff, 0x40, 0x0f, 0xb9, 0x05, 0x6d, 0x0d, 0x4b, 0x08, 0x01, 0xff, - 0xe1, 0x41, 0xff, 0x00, 0xe2, 0x42, 0xff, 0x00, 0xe3, 0x43, 0xff, 0x00, - 0xe4, 0x44, 0xff, 0x00, 0xe5, 0x45, 0xff, 0x00, 0xe6, 0x46, 0xff, 0x00, - 0xe7, 0x47, 0xff, 0x00, 0xe8, 0x48, 0xff, 0x00, 0xe9, 0x49, 0xff, 0x00, - 0xea, 0x4a, 0xff, 0x00, 0xeb, 0x4b, 0xff, 0x00, 0xec, 0x4c, 0xff, 0x00, - 0xed, 0x4d, 0xff, 0x00, 0xee, 0x4e, 0xff, 0x00, 0xef, 0x4f, 0xff, 0x00, - 0xf0, 0x50, 0xff, 0x00, 0xf1, 0x51, 0xff, 0x00, 0xf2, 0x52, 0xff, 0x00, - 0xf3, 0x53, 0xff, 0x00, 0xf4, 0x54, 0xff, 0x00, 0xf5, 0x55, 0xff, 0x00, - 0xf6, 0x56, 0xff, 0x00, 0xf7, 0x57, 0xff, 0x00, 0xf8, 0x58, 0xff, 0x00, - 0xf9, 0x59, 0xff, 0x00, 0xfa, 0x5a, 0xff, 0x40, 0xe1, 0x21, 0xff, 0x00, - 0xe2, 0x22, 0xff, 0x00, 0xe3, 0x23, 0xff, 0x00, 0xe4, 0x24, 0xff, 0x00, - 0xe5, 0x25, 0xff, 0x00, 0xe6, 0x26, 0xff, 0x00, 0xe7, 0x27, 0xff, 0x00, - 0xe8, 0x28, 0xff, 0x00, 0xe9, 0x29, 0xff, 0x00, 0xea, 0x2a, 0xff, 0x00, - 0xeb, 0x2b, 0xff, 0x00, 0xec, 0x2c, 0xff, 0x00, 0xed, 0x2d, 0xff, 0x00, - 0xee, 0x2e, 0xff, 0x00, 0xef, 0x2f, 0xff, 0x00, 0xf0, 0x30, 0xff, 0x00, - 0xf1, 0x31, 0xff, 0x00, 0xf2, 0x32, 0xff, 0x00, 0xf3, 0x33, 0xff, 0x00, - 0xf4, 0x34, 0xff, 0x00, 0xf5, 0x35, 0xff, 0x00, 0xf6, 0x36, 0xff, 0x00, - 0xf7, 0x37, 0xff, 0x00, 0xf8, 0x38, 0xff, 0x00, 0xf9, 0x39, 0xff, 0x00, - 0xfa, 0x3a, 0xff, 0x40, 0x4a, 0x8f, 0x22, 0x40, 0xff, 0x00, 0x4f, 0xf9, - 0x58, 0x1e, 0xff, 0x40, 0x4a, 0xfa, 0x12, 0x1d, 0xff, 0x00, 0x4f, 0xae, - 0x00, 0x01, 0xff, 0x40, 0x05, 0xc5, 0x06, 0x06, 0x4a, 0xf6, 0x98, 0x04, - 0xff, 0x40, 0x45, 0xc3, 0x0a, 0x18, 0xff, 0x00, 0xa6, 0x2e, 0x44, 0x46, - 0x2a, 0x19, 0xff, 0x00, 0x43, 0xbf, 0x0a, 0x11, 0xff, 0x00, 0xb3, 0x14, - 0xb4, 0x06, 0x44, 0xa1, 0x1d, 0x10, 0xff, 0x40, 0x44, 0x25, 0x01, 0x13, - 0xff, 0x00, 0x42, 0x15, 0x02, 0x12, 0xff, 0x40, 0x44, 0x27, 0x1d, 0x17, - 0xff, 0x00, 0x42, 0x60, 0x25, 0x16, 0xff, 0x40, 0x43, 0xa7, 0x05, 0x15, - 0xff, 0x00, 0x43, 0xcb, 0x06, 0x14, 0xff, 0x40, 0x48, 0xc9, 0x99, 0xe0, - 0xff, 0x00, 0x50, 0xa5, 0x04, 0x3e, 0xff, 0x00, 0xaf, 0x01, 0xff, 0x43, - 0x03, 0x12, 0x1a, 0xff, 0x00, 0x02, 0xea, 0x04, 0x01, 0xff, 0xe1, 0x0c, - 0xff, 0x00, 0x49, 0x34, 0xb6, 0x20, 0xff, 0x40, 0x48, 0x2e, 0x3d, 0x06, - 0xff, 0x00, 0x49, 0x92, 0x35, 0x07, 0xff, 0x00, 0x47, 0xee, 0x0c, 0x0a, - 0xff, 0x40, 0x45, 0x33, 0x01, 0x88, 0x25, 0x00, 0x05, 0x28, 0x1b, 0x0c, - 0x4a, 0x01, 0xad, 0xd7, 0x27, 0x00, 0x44, 0x2a, 0x03, 0x2e, 0x00, 0x40, - 0x46, 0xeb, 0x07, 0x15, 0xf3, 0x01, 0x49, 0xc8, 0xbe, 0x1d, 0xf3, 0x41, - 0xa1, 0x45, 0xa5, 0x2c, 0x4a, 0x4b, 0xa9, 0x64, 0xf3, 0x01, 0xaf, 0x01, - 0xff, 0x46, 0x8f, 0x28, 0x38, 0xf4, 0x01, 0x03, 0xe7, 0x0f, 0x0d, 0x42, - 0xa7, 0x01, 0x22, 0x23, 0xc0, 0x00, 0x58, 0x8d, 0x28, 0x26, 0xf6, 0x41, - 0x51, 0x80, 0x58, 0x25, 0xf4, 0x01, 0x66, 0x2e, 0x05, 0xac, 0x27, 0x40, - 0x4a, 0x7a, 0x99, 0x76, 0xf9, 0x01, 0x06, 0x38, 0xdb, 0x01, 0xff, 0x48, - 0xca, 0xc0, 0xa3, 0x20, 0x00, 0x43, 0xee, 0x9b, 0x5f, 0xf3, 0x41, 0x06, - 0x9a, 0x16, 0x17, 0x08, 0xa2, 0xc5, 0x01, 0xff, 0x44, 0xca, 0xeb, 0xbe, - 0xf5, 0x01, 0x47, 0x3a, 0x89, 0xbc, 0xf5, 0x01, 0x45, 0xf3, 0xd2, 0xbd, - 0xf5, 0x41, 0x4d, 0xd7, 0x84, 0x5f, 0x21, 0x00, 0x45, 0xf9, 0x0d, 0x44, - 0x20, 0x40, 0xe7, 0x2b, 0xf3, 0x81, 0xaf, 0x01, 0x02, 0x5b, 0x1a, 0x9e, - 0x01, 0x44, 0x2a, 0xee, 0xd5, 0xfa, 0x01, 0x42, 0xf0, 0x04, 0xb6, 0xf9, - 0x81, 0x8a, 0x01, 0xb2, 0x55, 0xb5, 0x06, 0x46, 0x50, 0xde, 0x8a, 0xf9, - 0x41, 0x45, 0x03, 0x07, 0xf2, 0x26, 0x00, 0xb2, 0x01, 0xff, 0x80, 0x0c, - 0x4d, 0xbf, 0x7e, 0x05, 0x20, 0x00, 0x47, 0x17, 0x9a, 0x1c, 0x22, 0x40, - 0x57, 0x46, 0x1c, 0x23, 0x27, 0x00, 0xa3, 0x22, 0x04, 0xb4, 0x0b, 0x12, - 0x4b, 0x4f, 0x9c, 0x40, 0xf3, 0x01, 0x52, 0x4b, 0x2b, 0xc6, 0xf7, 0x01, - 0x58, 0xcd, 0x2a, 0x22, 0x27, 0x40, 0x44, 0xb9, 0x00, 0x5b, 0x20, 0x00, - 0x4b, 0xb8, 0x0b, 0x58, 0x20, 0x40, 0x53, 0xd7, 0x49, 0x25, 0x27, 0x00, - 0x63, 0xcf, 0x0a, 0x94, 0x2b, 0x40, 0x44, 0x6b, 0x6a, 0x00, 0x22, 0x00, - 0x43, 0xe2, 0x7a, 0xa9, 0x22, 0x00, 0xab, 0x0c, 0x46, 0xc4, 0xc6, 0x0c, - 0x00, 0x00, 0x4b, 0xae, 0xa1, 0x60, 0xf9, 0x41, 0x4a, 0x79, 0xa3, 0x74, - 0xf3, 0x81, 0x0c, 0x4e, 0x76, 0x50, 0x10, 0x2e, 0x00, 0x43, 0xa1, 0x01, - 0xdc, 0x2a, 0x40, 0x4b, 0x35, 0x96, 0x7d, 0xf3, 0x41, 0x46, 0xac, 0xc9, - 0x63, 0xf4, 0x41, 0x42, 0x33, 0x00, 0xc0, 0xf5, 0x01, 0x4c, 0x69, 0x8e, - 0xad, 0xfa, 0x41, 0x42, 0xe7, 0x34, 0x01, 0xf3, 0x41, 0xa1, 0x70, 0xa5, - 0x62, 0xaf, 0x3c, 0xb5, 0x2e, 0xf9, 0xb0, 0xfa, 0xc1, 0x00, 0x04, 0xa1, - 0x01, 0x01, 0xff, 0x44, 0xc0, 0x62, 0x4f, 0xf9, 0x01, 0x48, 0x5d, 0x31, - 0x85, 0xf5, 0x01, 0x46, 0xef, 0x8f, 0xf8, 0xf6, 0xc1, 0x00, 0x05, 0x50, - 0x00, 0x01, 0xff, 0x46, 0x2c, 0xbb, 0x4a, 0xcc, 0x01, 0x49, 0x29, 0xbb, - 0x4b, 0xcc, 0x41, 0x49, 0x84, 0x91, 0x33, 0xf6, 0x01, 0x42, 0x77, 0x00, - 0x88, 0xfa, 0x41, 0x48, 0x8a, 0x38, 0xbe, 0xf4, 0x01, 0x49, 0x20, 0x21, - 0x66, 0x27, 0x00, 0x43, 0x15, 0x01, 0x98, 0x26, 0xc0, 0x00, 0x02, 0x9b, - 0x01, 0x01, 0xff, 0x4c, 0x35, 0x8f, 0xb4, 0xf3, 0x01, 0x4f, 0x89, 0x21, - 0x55, 0x20, 0x40, 0x49, 0xf9, 0xbd, 0x9c, 0x26, 0x00, 0x4a, 0x6b, 0xb1, - 0xaa, 0xf4, 0x41, 0x49, 0xcd, 0xb6, 0xf3, 0x26, 0x00, 0x45, 0x98, 0xe5, - 0xa9, 0xf9, 0x01, 0x4a, 0x65, 0xad, 0x96, 0xcc, 0x01, 0xb4, 0x01, 0xff, - 0x45, 0xd2, 0x95, 0x7f, 0xf9, 0x01, 0x45, 0x63, 0x76, 0xd3, 0xfa, 0x01, - 0x44, 0x9a, 0x23, 0xe5, 0x23, 0x40, 0x59, 0x7a, 0x23, 0xd1, 0xf3, 0x01, - 0x05, 0xa9, 0xe3, 0xbc, 0x01, 0xac, 0x92, 0x01, 0xae, 0x83, 0x01, 0xb2, - 0x30, 0xb3, 0x11, 0x07, 0x63, 0xd4, 0x01, 0xff, 0x44, 0xb9, 0x00, 0x2d, - 0x2e, 0x00, 0x4b, 0xb8, 0x0b, 0x59, 0x20, 0x40, 0xe8, 0x1f, 0xf4, 0x81, - 0x06, 0x4d, 0x61, 0x87, 0x4a, 0xf4, 0x41, 0x57, 0xbd, 0x2b, 0x65, 0xf3, - 0x01, 0x43, 0x3f, 0x1c, 0xc9, 0x25, 0x00, 0x51, 0xb2, 0x59, 0xa3, 0xf3, - 0x41, 0xe5, 0x25, 0xf5, 0x81, 0x27, 0x03, 0x10, 0x18, 0x01, 0xff, 0x4b, - 0xa4, 0x6f, 0x47, 0xf9, 0x01, 0x4c, 0xb0, 0x71, 0x3d, 0x26, 0x80, 0x06, - 0x4e, 0x2a, 0x7b, 0x68, 0x20, 0x40, 0x80, 0x01, 0xff, 0x46, 0xeb, 0x07, - 0x13, 0xf3, 0x01, 0x49, 0xc8, 0xbe, 0x1b, 0xf3, 0x41, 0x02, 0x7a, 0x00, - 0x15, 0x47, 0x4e, 0xcd, 0xe8, 0xf9, 0x01, 0x04, 0x4c, 0x4a, 0x01, 0xff, - 0x49, 0x83, 0xb2, 0x87, 0xf3, 0x01, 0xf3, 0x86, 0xf3, 0x41, 0x45, 0x0e, - 0x9a, 0x92, 0xf6, 0x01, 0x4b, 0x24, 0xa3, 0xef, 0xf9, 0x41, 0x48, 0xda, - 0xc3, 0xc6, 0xfa, 0x01, 0x51, 0xe5, 0x59, 0x0d, 0x2a, 0x40, 0x02, 0x60, - 0x00, 0x11, 0x02, 0x1e, 0x04, 0x01, 0xff, 0x46, 0xe6, 0xd8, 0x9e, 0xf3, - 0x01, 0x49, 0xcb, 0xbb, 0xfd, 0xf4, 0x41, 0x47, 0xf3, 0xcc, 0xc4, 0xf5, - 0x01, 0x46, 0x77, 0xa9, 0xc1, 0xf4, 0x01, 0x49, 0x36, 0x20, 0x1c, 0x00, - 0x40, 0x44, 0x40, 0x12, 0x12, 0x20, 0x00, 0x45, 0x87, 0x4b, 0x07, 0x20, - 0x40, 0xa1, 0x23, 0xad, 0x15, 0x44, 0x22, 0xee, 0x3a, 0xf9, 0x01, 0x02, - 0xcf, 0x00, 0x01, 0xff, 0x48, 0x9a, 0xc4, 0xa1, 0xf3, 0x01, 0xf9, 0xf4, - 0x26, 0x40, 0x48, 0xc0, 0x20, 0x40, 0x26, 0x00, 0x57, 0x41, 0x2e, 0xaa, - 0x00, 0x40, 0x49, 0x40, 0xbc, 0x28, 0xf6, 0x01, 0x44, 0xa3, 0x19, 0xb6, - 0xfa, 0x41, 0xa3, 0x55, 0x43, 0x97, 0xdd, 0xda, 0xf9, 0x01, 0xac, 0x23, - 0x44, 0xca, 0xd8, 0x6a, 0xf4, 0x01, 0x4a, 0x55, 0xae, 0x2b, 0x26, 0x00, - 0x4e, 0x7e, 0x7b, 0x85, 0xf3, 0x01, 0x02, 0xad, 0x04, 0x01, 0xff, 0x44, - 0xaf, 0xde, 0xb7, 0xf5, 0x01, 0x47, 0x37, 0x47, 0xe0, 0xf4, 0x41, 0x44, - 0xae, 0xeb, 0xc6, 0xf9, 0x01, 0xac, 0x01, 0xff, 0x47, 0xf6, 0xcd, 0x42, - 0xf3, 0x01, 0x0d, 0x53, 0x30, 0x01, 0xff, 0x09, 0x46, 0x10, 0x06, 0x5f, - 0xe0, 0x10, 0xde, 0x26, 0x40, 0x50, 0x1f, 0x23, 0x2f, 0x29, 0x00, 0x4f, - 0x15, 0x3d, 0x2c, 0x29, 0x40, 0x02, 0x60, 0x00, 0x0c, 0x4b, 0x7a, 0xa0, - 0x3b, 0x21, 0x00, 0x44, 0xe4, 0x94, 0xed, 0xf3, 0x41, 0x52, 0x02, 0x51, - 0x79, 0xf9, 0x01, 0x47, 0x57, 0xd0, 0x86, 0xf4, 0x01, 0x44, 0xd7, 0x3f, - 0x26, 0xf9, 0x01, 0xb3, 0xcb, 0x01, 0x4f, 0x25, 0x72, 0x18, 0xf6, 0x01, - 0x04, 0x51, 0x00, 0x01, 0xff, 0x80, 0x06, 0x49, 0x32, 0xbb, 0x36, 0xf6, - 0x41, 0x4f, 0x6a, 0x69, 0xe9, 0xfa, 0x01, 0x02, 0xe8, 0x04, 0xa1, 0x01, - 0x4e, 0x5e, 0x75, 0xe4, 0xfa, 0x01, 0x5b, 0xc8, 0x1a, 0x2b, 0xf9, 0x01, - 0x4c, 0xf1, 0x8d, 0x15, 0xf9, 0x01, 0x4f, 0x56, 0x6e, 0x24, 0xf6, 0x01, - 0xad, 0x7b, 0x4f, 0x0a, 0x6f, 0x45, 0xf6, 0x01, 0xaf, 0x46, 0xb0, 0x32, - 0x4c, 0x01, 0x93, 0x44, 0xf6, 0x01, 0x50, 0x2a, 0x66, 0x1b, 0xf6, 0x81, - 0x14, 0xb4, 0x06, 0x5a, 0xe6, 0x21, 0x74, 0xf9, 0x41, 0x4b, 0xda, 0x93, - 0x02, 0xf6, 0x01, 0x4a, 0xf1, 0xa8, 0x12, 0xf9, 0x41, 0x05, 0x19, 0x00, - 0x01, 0xff, 0x53, 0x4a, 0x4c, 0x1d, 0xf6, 0x01, 0x4b, 0xe2, 0xa2, 0x1c, - 0xf6, 0x41, 0x57, 0xa3, 0x2c, 0x73, 0xf9, 0x01, 0x4a, 0x89, 0xa7, 0xe3, - 0xfa, 0x01, 0x4c, 0x41, 0x8f, 0x7a, 0xf9, 0x41, 0x49, 0x7d, 0xb8, 0x46, - 0xf6, 0x01, 0x51, 0x28, 0x5b, 0x28, 0xf9, 0x01, 0x04, 0xcc, 0x04, 0x01, - 0xff, 0x58, 0xfd, 0x27, 0xe2, 0xfa, 0x01, 0x45, 0xfc, 0x07, 0x2e, 0xf6, - 0xc1, 0x00, 0x80, 0x01, 0xff, 0x4e, 0x70, 0x74, 0x30, 0xf6, 0x01, 0x48, - 0xa2, 0xc9, 0x2e, 0xf9, 0x41, 0x4b, 0x6e, 0x99, 0x37, 0xf6, 0x01, 0x46, - 0xd4, 0xdb, 0xd0, 0xf9, 0x41, 0x48, 0x76, 0x74, 0x13, 0xf6, 0x01, 0x48, - 0xba, 0xc9, 0x20, 0xf9, 0x41, 0x57, 0xe8, 0x2c, 0x0b, 0xf6, 0x01, 0x50, - 0x4a, 0x60, 0x31, 0xf6, 0x41, 0x4c, 0xf5, 0x89, 0xe7, 0xf4, 0x01, 0xa1, - 0xa9, 0x48, 0x50, 0x6a, 0x60, 0x0e, 0x2e, 0x00, 0xa7, 0xb1, 0x20, 0x04, - 0xc9, 0x00, 0xe9, 0x1f, 0x4b, 0xb5, 0x9b, 0xcf, 0x23, 0x00, 0xac, 0xdf, - 0x1b, 0xad, 0xab, 0x1a, 0xae, 0xa4, 0x19, 0x02, 0x7c, 0x00, 0xee, 0x17, - 0xb2, 0x99, 0x17, 0xb3, 0x81, 0x17, 0x08, 0xc2, 0xc8, 0x84, 0x02, 0xb5, - 0xd9, 0x01, 0x4d, 0x4b, 0x88, 0x32, 0xf3, 0x01, 0xb8, 0x11, 0x42, 0x4d, - 0x00, 0x41, 0xf4, 0xc1, 0x00, 0x47, 0xce, 0xbd, 0x53, 0xf4, 0x01, 0xf3, - 0x40, 0xf4, 0x41, 0xa3, 0xa6, 0x01, 0xb0, 0x82, 0x01, 0xb4, 0x01, 0xff, - 0x19, 0xb1, 0x06, 0x39, 0xb2, 0x01, 0xff, 0x52, 0x0a, 0x4f, 0x7d, 0xf4, - 0x01, 0x0c, 0xc5, 0x8c, 0x01, 0xff, 0x54, 0x4b, 0x41, 0xb4, 0xf7, 0x01, - 0x4b, 0x9f, 0x5f, 0xa7, 0xf7, 0x01, 0xb3, 0x11, 0x06, 0xad, 0x02, 0x01, - 0xff, 0x46, 0xe7, 0x02, 0x89, 0xf7, 0x01, 0x46, 0xab, 0x05, 0x93, 0xf7, - 0x41, 0x46, 0xa7, 0x18, 0xae, 0xf7, 0x01, 0x52, 0xb6, 0x51, 0xba, 0xf7, - 0x41, 0x45, 0xc3, 0x0a, 0xf8, 0x06, 0x00, 0xa6, 0x2e, 0x44, 0x46, 0x2a, - 0xf9, 0x06, 0x00, 0x43, 0xbf, 0x0a, 0xf1, 0x06, 0x00, 0xb3, 0x14, 0xb4, - 0x06, 0x44, 0xa1, 0x1d, 0xf0, 0x06, 0x40, 0x44, 0x25, 0x01, 0xf3, 0x06, - 0x00, 0x42, 0x15, 0x02, 0xf2, 0x06, 0x40, 0x44, 0x27, 0x1d, 0xf7, 0x06, - 0x00, 0x42, 0x60, 0x25, 0xf6, 0x06, 0x40, 0x43, 0xa7, 0x05, 0xf5, 0x06, - 0x00, 0x43, 0xcb, 0x06, 0xf4, 0x06, 0x40, 0x07, 0x2d, 0xd0, 0x06, 0x50, - 0x0a, 0x65, 0x11, 0xf6, 0x41, 0x4a, 0xbd, 0xa5, 0x02, 0xce, 0x01, 0x06, - 0xfd, 0x42, 0x01, 0xff, 0xd1, 0xfd, 0xcd, 0x01, 0xd2, 0xfe, 0xcd, 0x01, - 0xd3, 0xff, 0xcd, 0x41, 0x43, 0xed, 0x00, 0x39, 0x22, 0x00, 0x09, 0xb0, - 0x00, 0x01, 0xff, 0x44, 0xb9, 0x00, 0x21, 0x00, 0x00, 0x4d, 0xd6, 0x33, - 0x49, 0x20, 0x40, 0x4c, 0x65, 0x8f, 0x07, 0x21, 0x00, 0x02, 0xd0, 0x00, - 0x01, 0xff, 0x45, 0x2e, 0x03, 0xac, 0x20, 0x00, 0x4e, 0x0e, 0x74, 0xa0, - 0x20, 0x00, 0x05, 0xa6, 0xe6, 0x01, 0xff, 0x46, 0x78, 0xd7, 0xf0, 0xf3, - 0x01, 0x4b, 0x3b, 0x9f, 0xe4, 0xf3, 0x41, 0x02, 0xe8, 0x04, 0xca, 0x14, - 0x06, 0xc4, 0x06, 0x88, 0x14, 0x49, 0x15, 0x16, 0x62, 0x13, 0x00, 0x07, - 0x2f, 0x39, 0xb3, 0x13, 0xb0, 0xa4, 0x13, 0x4d, 0xd6, 0x33, 0x67, 0x13, - 0x00, 0xb3, 0x4b, 0x0b, 0x6c, 0xa1, 0x06, 0x49, 0xd1, 0xbe, 0x61, 0x13, - 0x40, 0x46, 0xae, 0xd7, 0x96, 0x13, 0x00, 0xa4, 0x26, 0x45, 0x75, 0xd5, - 0x97, 0x13, 0x00, 0xab, 0x12, 0x46, 0x73, 0x93, 0x92, 0x13, 0x00, 0x4c, - 0x6d, 0x93, 0x93, 0x13, 0x00, 0x45, 0x62, 0xe9, 0x90, 0x13, 0x40, 0x44, - 0x1a, 0x4f, 0x95, 0x13, 0x00, 0x43, 0xa0, 0x5b, 0x99, 0x13, 0x40, 0x44, - 0xe1, 0xa7, 0x91, 0x13, 0x80, 0x06, 0x44, 0x3a, 0xed, 0x94, 0x13, 0x40, - 0x46, 0x74, 0xd5, 0x98, 0x13, 0x40, 0xa5, 0xc2, 0x12, 0x08, 0xaf, 0x17, - 0x01, 0xff, 0xa2, 0xe3, 0x11, 0xa3, 0xab, 0x10, 0xa4, 0x98, 0x0f, 0xa6, - 0xde, 0x0e, 0xa7, 0x9c, 0x0c, 0xa8, 0xa2, 0x0b, 0xaa, 0xf6, 0x0a, 0xab, - 0xdc, 0x09, 0xac, 0xb0, 0x09, 0xad, 0xf1, 0x08, 0xae, 0x99, 0x08, 0xb0, - 0x91, 0x07, 0xb1, 0xf7, 0x05, 0xb2, 0xc5, 0x05, 0xb3, 0x89, 0x04, 0xb4, - 0xc4, 0x02, 0xb6, 0x9d, 0x02, 0xb7, 0xf7, 0x01, 0xb8, 0x98, 0x01, 0xb9, - 0x73, 0xba, 0x01, 0xff, 0xe1, 0xd8, 0x12, 0x80, 0x67, 0xe5, 0xdd, 0x12, - 0x80, 0x5e, 0xa8, 0x38, 0xe9, 0xda, 0x12, 0x00, 0xef, 0xde, 0x12, 0x80, - 0x2b, 0xf5, 0xd9, 0x12, 0x00, 0x42, 0xa9, 0x01, 0xdf, 0x12, 0x00, 0xba, - 0x01, 0xff, 0xe1, 0xb0, 0x2d, 0x80, 0x15, 0xe5, 0xb5, 0x2d, 0x80, 0x0c, - 0xe9, 0xb2, 0x2d, 0x00, 0xef, 0xb6, 0x2d, 0x00, 0xf5, 0xb1, 0x2d, 0x40, - 0xe5, 0xb4, 0x2d, 0x40, 0xe1, 0xb3, 0x2d, 0x40, 0xe1, 0x8b, 0x2d, 0x40, - 0xe1, 0xe0, 0x12, 0x80, 0x1b, 0xe5, 0xe5, 0x12, 0x80, 0x12, 0xe9, 0xe2, - 0x12, 0x00, 0xef, 0xe6, 0x12, 0x00, 0xf5, 0xe1, 0x12, 0x00, 0x42, 0xa9, - 0x01, 0xe7, 0x12, 0x40, 0xe5, 0xe4, 0x12, 0x40, 0xe1, 0xe3, 0x12, 0x40, - 0xe5, 0xdc, 0x12, 0x40, 0xe1, 0xdb, 0x12, 0x40, 0xe1, 0xe8, 0x12, 0x80, - 0x1a, 0xe5, 0xed, 0x12, 0x80, 0x11, 0xe9, 0xea, 0x12, 0x00, 0xef, 0xee, - 0x12, 0x80, 0x04, 0xf5, 0xe9, 0x12, 0x40, 0xe1, 0xef, 0x12, 0x40, 0xe5, - 0xec, 0x12, 0x40, 0xe1, 0xeb, 0x12, 0x40, 0xe1, 0x80, 0x12, 0x80, 0x53, - 0xe5, 0x85, 0x12, 0x80, 0x4a, 0xe9, 0x82, 0x12, 0x00, 0xef, 0x86, 0x12, - 0x80, 0x3d, 0xf5, 0x81, 0x12, 0x00, 0xb7, 0x21, 0xb9, 0x01, 0xff, 0xe1, - 0xd0, 0x2d, 0x80, 0x15, 0xe5, 0xd5, 0x2d, 0x80, 0x0c, 0xe9, 0xd2, 0x2d, - 0x00, 0xef, 0xd6, 0x2d, 0x00, 0xf5, 0xd1, 0x2d, 0x40, 0xe5, 0xd4, 0x2d, - 0x40, 0xe1, 0xd3, 0x2d, 0x40, 0xe1, 0x88, 0x12, 0x80, 0x0d, 0xe5, 0x8d, - 0x12, 0x80, 0x04, 0xe9, 0x8a, 0x12, 0x40, 0xe5, 0x8c, 0x12, 0x40, 0xe1, - 0x8b, 0x12, 0x40, 0xe1, 0x87, 0x12, 0x40, 0xe5, 0x84, 0x12, 0x40, 0xe1, - 0x83, 0x12, 0x40, 0xe1, 0xc8, 0x12, 0x80, 0x1a, 0xe5, 0xcd, 0x12, 0x80, - 0x11, 0xe9, 0xca, 0x12, 0x00, 0xef, 0xce, 0x12, 0x80, 0x04, 0xf5, 0xc9, - 0x12, 0x40, 0xe1, 0xcf, 0x12, 0x40, 0xe5, 0xcc, 0x12, 0x40, 0xe1, 0xcb, - 0x12, 0x40, 0xe1, 0x68, 0x12, 0x80, 0x1b, 0xe5, 0x6d, 0x12, 0x80, 0x12, - 0xe9, 0x6a, 0x12, 0x00, 0xef, 0x6e, 0x12, 0x00, 0xf5, 0x69, 0x12, 0x00, - 0x42, 0xa9, 0x01, 0x6f, 0x12, 0x40, 0xe5, 0x6c, 0x12, 0x40, 0xe1, 0x6b, - 0x12, 0x40, 0xe1, 0x70, 0x12, 0x80, 0xb8, 0x01, 0xe5, 0x75, 0x12, 0x80, - 0xae, 0x01, 0xa8, 0x82, 0x01, 0xe9, 0x72, 0x12, 0x00, 0xef, 0x76, 0x12, - 0x80, 0x75, 0xb3, 0x4f, 0x02, 0x53, 0x00, 0x30, 0xf5, 0x71, 0x12, 0x00, - 0x42, 0xa9, 0x01, 0x77, 0x12, 0x00, 0xba, 0x01, 0xff, 0xe1, 0x40, 0x13, - 0x80, 0x1a, 0xe5, 0x45, 0x13, 0x80, 0x11, 0xe9, 0x42, 0x13, 0x00, 0xef, - 0x46, 0x13, 0x80, 0x04, 0xf5, 0x41, 0x13, 0x40, 0xe1, 0x47, 0x13, 0x40, - 0xe5, 0x44, 0x13, 0x40, 0xe1, 0x43, 0x13, 0x40, 0x42, 0x31, 0x12, 0x03, - 0xab, 0x00, 0xe5, 0x05, 0xab, 0x80, 0x0c, 0xe9, 0x02, 0xab, 0x00, 0xef, - 0x06, 0xab, 0x00, 0xf5, 0x01, 0xab, 0x40, 0xe5, 0x04, 0xab, 0x40, 0xe1, - 0x38, 0x13, 0x80, 0x1b, 0xe5, 0x3d, 0x13, 0x80, 0x12, 0xe9, 0x3a, 0x13, - 0x00, 0xef, 0x3e, 0x13, 0x00, 0xf5, 0x39, 0x13, 0x00, 0x42, 0xa9, 0x01, - 0x3f, 0x13, 0x40, 0xe5, 0x3c, 0x13, 0x40, 0xe1, 0x3b, 0x13, 0x40, 0xe1, - 0x86, 0x2d, 0x40, 0xe1, 0x20, 0x13, 0x80, 0x20, 0xe5, 0x25, 0x13, 0x80, - 0x17, 0xe9, 0x22, 0x13, 0x00, 0xef, 0x26, 0x13, 0x80, 0x0a, 0xf5, 0x21, - 0x13, 0x00, 0x42, 0xa9, 0x01, 0x27, 0x13, 0x40, 0xe1, 0x8f, 0x2d, 0x40, - 0xe5, 0x24, 0x13, 0x40, 0xe1, 0x23, 0x13, 0x40, 0xe5, 0x74, 0x12, 0x40, - 0xe1, 0x73, 0x12, 0x40, 0xe1, 0x30, 0x12, 0x80, 0xaf, 0x01, 0xe5, 0x35, - 0x12, 0x80, 0x89, 0x01, 0xa8, 0x5e, 0xe9, 0x32, 0x12, 0x00, 0xef, 0x36, - 0x12, 0x80, 0x51, 0xb3, 0x31, 0xf5, 0x31, 0x12, 0x00, 0x42, 0xa9, 0x01, - 0x37, 0x12, 0x00, 0xba, 0x01, 0xff, 0xe1, 0x20, 0x12, 0x80, 0x1b, 0xe5, - 0x25, 0x12, 0x80, 0x12, 0xe9, 0x22, 0x12, 0x00, 0xef, 0x26, 0x12, 0x00, - 0xf5, 0x21, 0x12, 0x00, 0x42, 0xa9, 0x01, 0x27, 0x12, 0x40, 0xe5, 0x24, - 0x12, 0x40, 0xe1, 0x23, 0x12, 0x40, 0xe1, 0xa0, 0x2d, 0x80, 0x15, 0xe5, - 0xa5, 0x2d, 0x80, 0x0c, 0xe9, 0xa2, 0x2d, 0x00, 0xef, 0xa6, 0x2d, 0x00, - 0xf5, 0xa1, 0x2d, 0x40, 0xe5, 0xa4, 0x2d, 0x40, 0xe1, 0xa3, 0x2d, 0x40, - 0xe1, 0x83, 0x2d, 0x40, 0xe1, 0x38, 0x12, 0x80, 0x20, 0xe5, 0x3d, 0x12, - 0x80, 0x17, 0xe9, 0x3a, 0x12, 0x00, 0xef, 0x3e, 0x12, 0x80, 0x0a, 0xf5, - 0x39, 0x12, 0x00, 0x42, 0xa9, 0x01, 0x3f, 0x12, 0x40, 0xe1, 0x84, 0x2d, - 0x40, 0xe5, 0x3c, 0x12, 0x40, 0xe1, 0x3b, 0x12, 0x40, 0x08, 0x72, 0xc1, - 0x04, 0xe5, 0x34, 0x12, 0x40, 0x43, 0x72, 0xcf, 0x84, 0x13, 0x00, 0x43, - 0x9e, 0xec, 0x88, 0x13, 0x00, 0x43, 0xb5, 0x92, 0x80, 0x13, 0x00, 0x43, - 0x51, 0x02, 0x8c, 0x13, 0x40, 0xe1, 0x33, 0x12, 0x40, 0xe1, 0x28, 0x12, - 0x80, 0x26, 0xe5, 0x2d, 0x12, 0x80, 0x1d, 0xe9, 0x2a, 0x12, 0x00, 0xef, - 0x2e, 0x12, 0x80, 0x10, 0xf5, 0x29, 0x12, 0x00, 0x42, 0xa9, 0x01, 0x2f, - 0x12, 0x00, 0x42, 0x34, 0x22, 0x58, 0x13, 0x40, 0xe1, 0x82, 0x2d, 0x40, - 0xe5, 0x2c, 0x12, 0x40, 0xe1, 0x2b, 0x12, 0x40, 0xe1, 0x40, 0x12, 0x80, - 0x8d, 0x01, 0xe5, 0x45, 0x12, 0x80, 0x83, 0x01, 0xa8, 0x4a, 0xe9, 0x42, - 0x12, 0x00, 0xef, 0x46, 0x12, 0x80, 0x3d, 0xf5, 0x41, 0x12, 0x00, 0xb7, - 0x21, 0xb9, 0x01, 0xff, 0xe1, 0xc0, 0x2d, 0x80, 0x15, 0xe5, 0xc5, 0x2d, - 0x80, 0x0c, 0xe9, 0xc2, 0x2d, 0x00, 0xef, 0xc6, 0x2d, 0x00, 0xf5, 0xc1, - 0x2d, 0x40, 0xe5, 0xc4, 0x2d, 0x40, 0xe1, 0xc3, 0x2d, 0x40, 0xe1, 0x48, - 0x12, 0x80, 0x0d, 0xe5, 0x4d, 0x12, 0x80, 0x04, 0xe9, 0x4a, 0x12, 0x40, - 0xe5, 0x4c, 0x12, 0x40, 0xe1, 0x4b, 0x12, 0x40, 0xe1, 0x47, 0x12, 0x40, - 0xe1, 0x50, 0x12, 0x80, 0x2e, 0xe5, 0x55, 0x12, 0x80, 0x25, 0xe9, 0x52, - 0x12, 0x00, 0xef, 0x56, 0x12, 0x00, 0xf5, 0x51, 0x12, 0x00, 0xb7, 0x01, - 0xff, 0xe1, 0x58, 0x12, 0x80, 0x0d, 0xe5, 0x5d, 0x12, 0x80, 0x04, 0xe9, - 0x5a, 0x12, 0x40, 0xe5, 0x5c, 0x12, 0x40, 0xe1, 0x5b, 0x12, 0x40, 0xe5, - 0x54, 0x12, 0x40, 0xe1, 0x53, 0x12, 0x40, 0xe5, 0x44, 0x12, 0x40, 0xe1, - 0x43, 0x12, 0x40, 0xe1, 0x50, 0x13, 0x80, 0x7c, 0xe5, 0x55, 0x13, 0x80, - 0x73, 0xa8, 0x25, 0xe9, 0x52, 0x13, 0x00, 0xef, 0x56, 0x13, 0x80, 0x18, - 0xf5, 0x51, 0x13, 0x00, 0xb7, 0x01, 0xff, 0xe1, 0x57, 0x13, 0x00, 0xe5, - 0x8f, 0x13, 0x80, 0x04, 0xe9, 0x8d, 0x13, 0x40, 0xe5, 0x8e, 0x13, 0x40, - 0xe1, 0x92, 0x2d, 0x40, 0xe1, 0x30, 0x13, 0x80, 0x20, 0xe5, 0x35, 0x13, - 0x80, 0x17, 0xe9, 0x32, 0x13, 0x00, 0xef, 0x36, 0x13, 0x80, 0x0a, 0xf5, - 0x31, 0x13, 0x00, 0x42, 0xa9, 0x01, 0x37, 0x13, 0x40, 0xe1, 0x91, 0x2d, - 0x40, 0xe5, 0x34, 0x13, 0x40, 0xe1, 0x33, 0x13, 0x00, 0x08, 0x60, 0x1c, - 0x01, 0xff, 0xe1, 0xd0, 0x12, 0x80, 0x15, 0xe5, 0xd5, 0x12, 0x80, 0x0c, - 0xe9, 0xd2, 0x12, 0x00, 0xef, 0xd6, 0x12, 0x00, 0xf5, 0xd1, 0x12, 0x40, - 0xe5, 0xd4, 0x12, 0x40, 0xe1, 0xd3, 0x12, 0x40, 0xe5, 0x54, 0x13, 0x40, - 0xe1, 0x53, 0x13, 0x40, 0xe1, 0x90, 0x12, 0x80, 0x4c, 0xe5, 0x95, 0x12, - 0x80, 0x43, 0xe9, 0x92, 0x12, 0x00, 0xef, 0x96, 0x12, 0x80, 0x36, 0xf5, - 0x91, 0x12, 0x00, 0x42, 0xa9, 0x01, 0x97, 0x12, 0x00, 0xb9, 0x01, 0xff, - 0xe1, 0x98, 0x12, 0x80, 0x20, 0xe5, 0x9d, 0x12, 0x80, 0x17, 0xe9, 0x9a, - 0x12, 0x00, 0xef, 0x9e, 0x12, 0x80, 0x0a, 0xf5, 0x99, 0x12, 0x00, 0x42, - 0xa9, 0x01, 0x9f, 0x12, 0x40, 0xe1, 0x89, 0x2d, 0x40, 0xe5, 0x9c, 0x12, - 0x40, 0xe1, 0x9b, 0x12, 0x40, 0xe1, 0x88, 0x2d, 0x40, 0xe5, 0x94, 0x12, - 0x40, 0xe1, 0x93, 0x12, 0x40, 0xe1, 0x18, 0x12, 0x80, 0x33, 0xe5, 0x1d, - 0x12, 0x80, 0x2a, 0xe9, 0x1a, 0x12, 0x00, 0xef, 0x1e, 0x12, 0x80, 0x1d, - 0xf5, 0x19, 0x12, 0x00, 0xb7, 0x06, 0x42, 0x34, 0x22, 0x59, 0x13, 0x40, - 0xe1, 0x1f, 0x12, 0x00, 0xe5, 0x83, 0x13, 0x80, 0x04, 0xe9, 0x81, 0x13, - 0x40, 0xe5, 0x82, 0x13, 0x40, 0xe1, 0x81, 0x2d, 0x40, 0xe5, 0x1c, 0x12, - 0x40, 0xe1, 0x1b, 0x12, 0x40, 0xe1, 0x08, 0x12, 0x80, 0x20, 0xe5, 0x0d, - 0x12, 0x80, 0x17, 0xe9, 0x0a, 0x12, 0x00, 0xef, 0x0e, 0x12, 0x80, 0x0a, - 0xf5, 0x09, 0x12, 0x00, 0x42, 0xa9, 0x01, 0x0f, 0x12, 0x40, 0xe1, 0x80, - 0x2d, 0x40, 0xe5, 0x0c, 0x12, 0x40, 0xe1, 0x0b, 0x12, 0x40, 0xe1, 0xa8, - 0x12, 0x80, 0x8d, 0x01, 0xe5, 0xad, 0x12, 0x80, 0x83, 0x01, 0xe9, 0xaa, - 0x12, 0x00, 0xef, 0xae, 0x12, 0x80, 0x76, 0xf5, 0xa9, 0x12, 0x00, 0xb7, - 0x5a, 0xb8, 0x21, 0xb9, 0x01, 0xff, 0xe1, 0xc8, 0x2d, 0x80, 0x15, 0xe5, - 0xcd, 0x2d, 0x80, 0x0c, 0xe9, 0xca, 0x2d, 0x00, 0xef, 0xce, 0x2d, 0x00, - 0xf5, 0xc9, 0x2d, 0x40, 0xe5, 0xcc, 0x2d, 0x40, 0xe1, 0xcb, 0x2d, 0x40, - 0xe1, 0xb8, 0x12, 0x80, 0x2e, 0xe5, 0xbd, 0x12, 0x80, 0x25, 0xe9, 0xba, - 0x12, 0x00, 0xef, 0xbe, 0x12, 0x00, 0xf5, 0xb9, 0x12, 0x00, 0xb7, 0x01, - 0xff, 0xe1, 0xc0, 0x12, 0x80, 0x0d, 0xe5, 0xc5, 0x12, 0x80, 0x04, 0xe9, - 0xc2, 0x12, 0x40, 0xe5, 0xc4, 0x12, 0x40, 0xe1, 0xc3, 0x12, 0x40, 0xe5, - 0xbc, 0x12, 0x40, 0xe1, 0xbb, 0x12, 0x40, 0xe1, 0xb0, 0x12, 0x80, 0x0d, - 0xe5, 0xb5, 0x12, 0x80, 0x04, 0xe9, 0xb2, 0x12, 0x40, 0xe5, 0xb4, 0x12, - 0x40, 0xe1, 0xb3, 0x12, 0x40, 0xe1, 0xaf, 0x12, 0x40, 0xe5, 0xac, 0x12, - 0x40, 0xe1, 0xab, 0x12, 0x40, 0xe1, 0x00, 0x13, 0x80, 0x20, 0xe5, 0x05, - 0x13, 0x80, 0x17, 0xe9, 0x02, 0x13, 0x00, 0xef, 0x06, 0x13, 0x80, 0x0a, - 0xf5, 0x01, 0x13, 0x00, 0x42, 0xa9, 0x01, 0x07, 0x13, 0x40, 0xe1, 0x8e, - 0x2d, 0x40, 0xe5, 0x04, 0x13, 0x40, 0xe1, 0x03, 0x13, 0x40, 0xe1, 0x00, - 0x12, 0x80, 0x6e, 0xe5, 0x05, 0x12, 0x80, 0x65, 0xa8, 0x11, 0xe9, 0x02, - 0x12, 0x00, 0xef, 0x06, 0x12, 0x80, 0x04, 0xf5, 0x01, 0x12, 0x40, 0xe1, - 0x07, 0x12, 0x40, 0xe1, 0x10, 0x12, 0x80, 0x49, 0xe5, 0x15, 0x12, 0x80, - 0x40, 0xe9, 0x12, 0x12, 0x00, 0xef, 0x16, 0x12, 0x00, 0xf5, 0x11, 0x12, - 0x00, 0xb7, 0x21, 0xb9, 0x01, 0xff, 0xe1, 0xe0, 0xe7, 0x81, 0x15, 0xe5, - 0xe5, 0xe7, 0x81, 0x0c, 0xe9, 0xe2, 0xe7, 0x01, 0xef, 0xe6, 0xe7, 0x01, - 0xf5, 0xe1, 0xe7, 0x41, 0xe5, 0xe4, 0xe7, 0x41, 0xe1, 0xe3, 0xe7, 0x41, - 0xe1, 0x17, 0x12, 0x00, 0xe5, 0xeb, 0xe7, 0x81, 0x04, 0xe9, 0xe9, 0xe7, - 0x41, 0xe5, 0xea, 0xe7, 0x41, 0xe5, 0x14, 0x12, 0x40, 0xe1, 0x13, 0x12, - 0x40, 0xe5, 0x04, 0x12, 0x40, 0xe1, 0x03, 0x12, 0x40, 0xe1, 0x08, 0x13, - 0x80, 0xb5, 0x02, 0xe5, 0x0d, 0x13, 0x80, 0xab, 0x02, 0xa7, 0xf1, 0x01, - 0xe9, 0x0a, 0x13, 0x00, 0x07, 0x2e, 0x28, 0xbf, 0x01, 0xef, 0x0e, 0x13, - 0x80, 0xb5, 0x01, 0xf5, 0x09, 0x13, 0x80, 0x39, 0xb7, 0x21, 0xb9, 0x01, - 0xff, 0xe1, 0xd8, 0x2d, 0x80, 0x15, 0xe5, 0xdd, 0x2d, 0x80, 0x0c, 0xe9, - 0xda, 0x2d, 0x00, 0xef, 0xde, 0x2d, 0x00, 0xf5, 0xd9, 0x2d, 0x40, 0xe5, - 0xdc, 0x2d, 0x40, 0xe1, 0xdb, 0x2d, 0x40, 0xe1, 0x10, 0x13, 0x80, 0x0d, - 0xe5, 0x15, 0x13, 0x80, 0x04, 0xe9, 0x12, 0x13, 0x40, 0xe5, 0x14, 0x13, - 0x40, 0xe1, 0x13, 0x13, 0x40, 0x05, 0xd2, 0x5d, 0x01, 0xff, 0x02, 0x72, - 0xcf, 0x64, 0x02, 0x4b, 0x55, 0x56, 0x02, 0x24, 0xb1, 0x45, 0x44, 0xfe, - 0xec, 0xe8, 0xe7, 0x01, 0x02, 0xed, 0x0a, 0x2e, 0x02, 0x52, 0x37, 0x20, - 0x02, 0x51, 0x02, 0x12, 0x02, 0xc5, 0xef, 0x01, 0xff, 0xe5, 0xf2, 0xe7, - 0x81, 0x04, 0xe9, 0xf0, 0xe7, 0x41, 0xe5, 0xf1, 0xe7, 0x41, 0x42, 0x27, - 0x01, 0xfe, 0xe7, 0x01, 0xe9, 0xfd, 0xe7, 0x41, 0x42, 0x27, 0x01, 0xee, - 0xe7, 0x01, 0xe9, 0xed, 0xe7, 0x41, 0xe5, 0xf7, 0xe7, 0x81, 0x04, 0xe9, - 0xf5, 0xe7, 0x41, 0xe5, 0xf6, 0xe7, 0x41, 0xe5, 0xfa, 0xe7, 0x81, 0x04, - 0xe9, 0xf8, 0xe7, 0x41, 0xe5, 0xf9, 0xe7, 0x41, 0x42, 0x27, 0x01, 0xfc, - 0xe7, 0x01, 0xe9, 0xfb, 0xe7, 0x41, 0x42, 0x27, 0x01, 0xf4, 0xe7, 0x01, - 0xe9, 0xf3, 0xe7, 0x41, 0xe1, 0x0f, 0x13, 0x40, 0xe1, 0xa0, 0x12, 0x80, - 0x20, 0xe5, 0xa5, 0x12, 0x80, 0x17, 0xe9, 0xa2, 0x12, 0x00, 0xef, 0xa6, - 0x12, 0x80, 0x0a, 0xf5, 0xa1, 0x12, 0x00, 0x42, 0xa9, 0x01, 0xa7, 0x12, - 0x40, 0xe1, 0x8a, 0x2d, 0x40, 0xe5, 0xa4, 0x12, 0x40, 0xe1, 0xa3, 0x12, - 0x40, 0xe1, 0x18, 0x13, 0x80, 0x2e, 0xe5, 0x1d, 0x13, 0x80, 0x25, 0xe9, - 0x1a, 0x13, 0x00, 0xef, 0x1e, 0x13, 0x00, 0xf5, 0x19, 0x13, 0x00, 0xb7, - 0x01, 0xff, 0xe1, 0x93, 0x2d, 0x80, 0x0d, 0xe5, 0x96, 0x2d, 0x80, 0x04, - 0xe9, 0x94, 0x2d, 0x40, 0xe5, 0x95, 0x2d, 0x40, 0xe1, 0x1f, 0x13, 0x40, - 0xe5, 0x1c, 0x13, 0x40, 0xe1, 0x1b, 0x13, 0x40, 0xe5, 0x0c, 0x13, 0x40, - 0xe1, 0x0b, 0x13, 0x40, 0xe1, 0x48, 0x13, 0x80, 0x2e, 0xe5, 0x4d, 0x13, - 0x80, 0x25, 0xe9, 0x4a, 0x13, 0x00, 0xef, 0x4e, 0x13, 0x00, 0xf5, 0x49, - 0x13, 0x00, 0xb7, 0x06, 0x42, 0x34, 0x22, 0x5a, 0x13, 0x40, 0xe1, 0x4f, - 0x13, 0x00, 0xe5, 0x8b, 0x13, 0x80, 0x04, 0xe9, 0x89, 0x13, 0x40, 0xe5, - 0x8a, 0x13, 0x40, 0xe5, 0x4c, 0x13, 0x40, 0xe1, 0x4b, 0x13, 0x40, 0xe1, - 0xf0, 0x12, 0x80, 0x86, 0x01, 0xa4, 0x3e, 0xe5, 0xf5, 0x12, 0x80, 0x35, - 0xe9, 0xf2, 0x12, 0x00, 0xef, 0xf6, 0x12, 0x80, 0x28, 0xf5, 0xf1, 0x12, - 0x00, 0x42, 0xa9, 0x01, 0xf7, 0x12, 0x00, 0xba, 0x01, 0xff, 0x42, 0x31, - 0x12, 0x13, 0xab, 0x00, 0xe5, 0x15, 0xab, 0x80, 0x0c, 0xe9, 0x12, 0xab, - 0x00, 0xef, 0x16, 0xab, 0x00, 0xf5, 0x11, 0xab, 0x40, 0xe5, 0x14, 0xab, - 0x40, 0xe1, 0x8c, 0x2d, 0x40, 0xe5, 0xf4, 0x12, 0x40, 0xe1, 0xf8, 0x12, - 0x80, 0x3d, 0xe5, 0xfd, 0x12, 0x80, 0x34, 0xa8, 0x17, 0xe9, 0xfa, 0x12, - 0x00, 0xef, 0xfe, 0x12, 0x80, 0x0a, 0xf5, 0xf9, 0x12, 0x00, 0x42, 0xa9, - 0x01, 0xff, 0x12, 0x40, 0xe1, 0x8d, 0x2d, 0x40, 0x42, 0x31, 0x12, 0x0b, - 0xab, 0x00, 0xe5, 0x0d, 0xab, 0x80, 0x0c, 0xe9, 0x0a, 0xab, 0x00, 0xef, - 0x0e, 0xab, 0x00, 0xf5, 0x09, 0xab, 0x40, 0xe5, 0x0c, 0xab, 0x40, 0xe5, - 0xfc, 0x12, 0x40, 0xe1, 0xfb, 0x12, 0x40, 0xe1, 0xf3, 0x12, 0x40, 0xe1, - 0x78, 0x12, 0x80, 0xab, 0x01, 0xa3, 0x4b, 0xe5, 0x7d, 0x12, 0x80, 0x42, - 0xa8, 0x17, 0xe9, 0x7a, 0x12, 0x00, 0xef, 0x7e, 0x12, 0x80, 0x0a, 0xf5, - 0x79, 0x12, 0x00, 0x42, 0xa9, 0x01, 0x7f, 0x12, 0x40, 0xe1, 0x87, 0x2d, - 0x40, 0xe1, 0x28, 0x13, 0x80, 0x20, 0xe5, 0x2d, 0x13, 0x80, 0x17, 0xe9, - 0x2a, 0x13, 0x00, 0xef, 0x2e, 0x13, 0x80, 0x0a, 0xf5, 0x29, 0x13, 0x00, - 0x42, 0xa9, 0x01, 0x2f, 0x13, 0x40, 0xe1, 0x90, 0x2d, 0x40, 0xe5, 0x2c, - 0x13, 0x40, 0xe1, 0x2b, 0x13, 0x40, 0xe5, 0x7c, 0x12, 0x40, 0xe1, 0xa8, - 0x2d, 0x80, 0x55, 0xe5, 0xad, 0x2d, 0x80, 0x4c, 0xa8, 0x0c, 0xe9, 0xaa, - 0x2d, 0x00, 0xef, 0xae, 0x2d, 0x00, 0xf5, 0xa9, 0x2d, 0x40, 0xe1, 0xb8, - 0x2d, 0x80, 0x35, 0xe5, 0xbd, 0x2d, 0x80, 0x2c, 0xa8, 0x0c, 0xe9, 0xba, - 0x2d, 0x00, 0xef, 0xbe, 0x2d, 0x00, 0xf5, 0xb9, 0x2d, 0x40, 0xe1, 0x20, - 0xab, 0x80, 0x15, 0xe5, 0x25, 0xab, 0x80, 0x0c, 0xe9, 0x22, 0xab, 0x00, - 0xef, 0x26, 0xab, 0x00, 0xf5, 0x21, 0xab, 0x40, 0xe5, 0x24, 0xab, 0x40, - 0xe1, 0x23, 0xab, 0x40, 0xe5, 0xbc, 0x2d, 0x40, 0xe1, 0xbb, 0x2d, 0x40, - 0xe5, 0xac, 0x2d, 0x40, 0xe1, 0xab, 0x2d, 0x40, 0xe1, 0x7b, 0x12, 0x40, - 0xe1, 0x60, 0x12, 0x80, 0x4e, 0xa2, 0x2e, 0xe5, 0x65, 0x12, 0x80, 0x25, - 0xe9, 0x62, 0x12, 0x00, 0xef, 0x66, 0x12, 0x80, 0x18, 0xf5, 0x61, 0x12, - 0x00, 0xb7, 0x01, 0xff, 0xe1, 0x67, 0x12, 0x00, 0xe5, 0x87, 0x13, 0x80, - 0x04, 0xe9, 0x85, 0x13, 0x40, 0xe5, 0x86, 0x13, 0x40, 0xe1, 0x85, 0x2d, - 0x40, 0xe5, 0x64, 0x12, 0x40, 0xe1, 0x28, 0xab, 0x80, 0x15, 0xe5, 0x2d, - 0xab, 0x80, 0x0c, 0xe9, 0x2a, 0xab, 0x00, 0xef, 0x2e, 0xab, 0x00, 0xf5, - 0x29, 0xab, 0x40, 0xe5, 0x2c, 0xab, 0x40, 0xe1, 0x2b, 0xab, 0x40, 0xe1, - 0x63, 0x12, 0x40, 0x4a, 0x59, 0x26, 0x60, 0x13, 0x00, 0x47, 0x70, 0x58, - 0x64, 0x13, 0x40, 0x52, 0xcf, 0x4a, 0x68, 0x13, 0x00, 0x4c, 0x7d, 0x92, - 0x66, 0x13, 0x40, 0x46, 0x44, 0xd8, 0x79, 0x13, 0x00, 0xa6, 0x36, 0x47, - 0x22, 0x11, 0x7b, 0x13, 0x00, 0x46, 0x0b, 0x2c, 0x7a, 0x13, 0x00, 0xb3, - 0x1c, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0x72, 0x13, 0x80, 0x0c, 0x45, - 0x2b, 0x11, 0x74, 0x13, 0x00, 0x45, 0xde, 0x2b, 0x73, 0x13, 0x40, 0x49, - 0xd4, 0x5c, 0x7c, 0x13, 0x40, 0x46, 0x27, 0x1d, 0x78, 0x13, 0x00, 0x44, - 0x4e, 0xda, 0x77, 0x13, 0x40, 0x44, 0x08, 0x4c, 0x76, 0x13, 0x00, 0x44, - 0x85, 0x50, 0x75, 0x13, 0x40, 0x45, 0xc3, 0x0a, 0x70, 0x13, 0x00, 0xa6, - 0x29, 0x44, 0x46, 0x2a, 0x71, 0x13, 0x00, 0x43, 0xbf, 0x0a, 0x69, 0x13, - 0x00, 0xb3, 0x0f, 0xb4, 0x01, 0xff, 0x44, 0x25, 0x01, 0x6b, 0x13, 0x00, - 0x42, 0x15, 0x02, 0x6a, 0x13, 0x40, 0x44, 0x27, 0x1d, 0x6f, 0x13, 0x00, - 0x42, 0x60, 0x25, 0x6e, 0x13, 0x40, 0x43, 0xa7, 0x05, 0x6d, 0x13, 0x00, - 0x43, 0xcb, 0x06, 0x6c, 0x13, 0x40, 0x43, 0x03, 0x12, 0x65, 0x13, 0x00, - 0xad, 0x01, 0xff, 0x07, 0xc9, 0x15, 0x06, 0x42, 0x6c, 0x00, 0x63, 0x13, - 0x40, 0x0b, 0xe0, 0x6b, 0x06, 0x51, 0x6c, 0x38, 0x5e, 0x13, 0x40, 0x55, - 0x68, 0x38, 0x5d, 0x13, 0x00, 0x44, 0xb9, 0x00, 0x5f, 0x13, 0x40, 0x44, - 0x57, 0x69, 0x1b, 0x00, 0x00, 0x06, 0x90, 0xdd, 0x01, 0xff, 0x48, 0xd6, - 0x1f, 0x2e, 0x21, 0x00, 0xf3, 0x59, 0x22, 0x40, 0x0b, 0x3d, 0x97, 0x42, - 0x08, 0x92, 0xc4, 0x32, 0x0b, 0x22, 0xa0, 0x01, 0xff, 0x06, 0xe1, 0x02, - 0x17, 0x06, 0xad, 0x02, 0x01, 0xff, 0x46, 0xe7, 0x02, 0xf2, 0x29, 0x00, - 0x47, 0x88, 0x43, 0xf0, 0x29, 0x00, 0x46, 0xab, 0x05, 0xee, 0x29, 0x40, - 0x46, 0xe7, 0x02, 0xf3, 0x29, 0x00, 0x47, 0x88, 0x43, 0xf1, 0x29, 0x00, - 0x46, 0xab, 0x05, 0xef, 0x29, 0x40, 0x43, 0xbf, 0x0a, 0xf0, 0x2b, 0x00, - 0x43, 0xd0, 0x09, 0xf1, 0x2b, 0x40, 0x44, 0xc3, 0x00, 0x2b, 0x23, 0x00, - 0x45, 0xc8, 0x00, 0x26, 0x23, 0x40, 0x02, 0x13, 0x00, 0x1a, 0xa9, 0x01, - 0xff, 0x4a, 0x95, 0xa5, 0x5a, 0x22, 0x00, 0x07, 0x07, 0x39, 0x01, 0xff, - 0x42, 0x1e, 0x00, 0x4d, 0x22, 0x00, 0x54, 0x97, 0x45, 0x78, 0x2a, 0x40, - 0x80, 0x63, 0x02, 0x31, 0x01, 0x01, 0xff, 0x45, 0xc4, 0x3a, 0x55, 0x22, - 0x00, 0x44, 0x2f, 0x03, 0x3d, 0x00, 0x80, 0x06, 0x4d, 0xda, 0x88, 0x6e, - 0x2a, 0x40, 0x80, 0x01, 0xff, 0xa1, 0x1d, 0x05, 0x51, 0x00, 0x01, 0xff, - 0x4b, 0xb6, 0x97, 0xae, 0x2a, 0x00, 0x49, 0x50, 0x12, 0x66, 0x2a, 0x00, - 0x4e, 0x10, 0x77, 0xf9, 0x2b, 0x00, 0x61, 0xa3, 0x0e, 0x77, 0x2a, 0x40, - 0x05, 0x5d, 0x00, 0x0d, 0x53, 0xad, 0x37, 0xe3, 0x29, 0xc0, 0x00, 0x51, - 0x3e, 0x56, 0xe4, 0x29, 0x40, 0x4f, 0x37, 0x07, 0x40, 0x2b, 0x00, 0x49, - 0x45, 0x70, 0x71, 0x2a, 0x00, 0x50, 0xb3, 0x02, 0x71, 0x29, 0x00, 0x4e, - 0x93, 0x3d, 0x73, 0x2a, 0x40, 0x4f, 0x3d, 0x69, 0xd5, 0x22, 0x00, 0x03, - 0x7a, 0x02, 0x01, 0xff, 0x4d, 0xd0, 0x7f, 0x5d, 0x22, 0x00, 0x03, 0x9d, - 0x07, 0x01, 0xff, 0x4c, 0x87, 0x00, 0xdd, 0x22, 0x00, 0x49, 0xec, 0x00, - 0xdc, 0x22, 0x00, 0x48, 0x42, 0xc7, 0xde, 0x22, 0x00, 0x48, 0x82, 0xc8, - 0xdf, 0x22, 0x40, 0x80, 0x70, 0x02, 0x06, 0x00, 0x24, 0x45, 0xfb, 0xe6, - 0x05, 0x00, 0x00, 0x4a, 0xfd, 0x43, 0x86, 0x23, 0x00, 0x46, 0x5f, 0x31, - 0x09, 0x27, 0xc0, 0x00, 0x06, 0x50, 0x00, 0x01, 0xff, 0x55, 0xb8, 0x39, - 0xe9, 0xf4, 0x01, 0x49, 0x04, 0xb9, 0x84, 0xf5, 0x41, 0x03, 0xf4, 0x01, - 0x06, 0x5a, 0x1a, 0x22, 0x1a, 0xf5, 0x41, 0x4c, 0xb5, 0x8d, 0x97, 0x00, - 0x00, 0x44, 0xc2, 0x07, 0x0a, 0x00, 0x00, 0x46, 0x19, 0x04, 0x19, 0x00, - 0x00, 0x03, 0x90, 0x0c, 0x1c, 0x4d, 0xc5, 0x86, 0x87, 0x00, 0x00, 0xb4, - 0x01, 0xff, 0x43, 0xae, 0x06, 0x03, 0x00, 0x00, 0x4b, 0x93, 0x9f, 0x04, - 0x00, 0xc0, 0x00, 0x46, 0x32, 0x01, 0x17, 0x00, 0x40, 0x42, 0xf4, 0x01, - 0x0e, 0x22, 0x00, 0x4b, 0xf9, 0x79, 0x97, 0x00, 0x40, 0x44, 0x40, 0x12, - 0x13, 0x20, 0x00, 0x44, 0x2a, 0x0d, 0x00, 0x20, 0x00, 0x45, 0x87, 0x4b, - 0x02, 0x20, 0x40, 0x80, 0x9c, 0x01, 0x04, 0x82, 0xee, 0x61, 0xb0, 0x01, - 0xff, 0x4c, 0xe5, 0x8d, 0x83, 0x23, 0x00, 0x03, 0x2b, 0x1d, 0x01, 0xff, - 0x48, 0xaa, 0xc2, 0xcb, 0xf5, 0x01, 0xae, 0x2f, 0x44, 0x3d, 0xa4, 0xcc, - 0xf5, 0x81, 0x24, 0x43, 0x4d, 0x12, 0x05, 0x22, 0xc0, 0x00, 0x06, 0x50, - 0x00, 0x01, 0xff, 0x50, 0xfa, 0x62, 0xb4, 0x29, 0x00, 0x47, 0x77, 0x7e, - 0xb1, 0x29, 0x00, 0x51, 0xc8, 0x00, 0xb3, 0x29, 0x00, 0x52, 0x2c, 0x54, - 0xb2, 0x29, 0x40, 0xf3, 0xcd, 0xf5, 0x41, 0x43, 0x38, 0x1a, 0xb9, 0xfa, - 0x01, 0x43, 0x69, 0x27, 0xc5, 0xf5, 0xc1, 0x00, 0x03, 0x9f, 0x0e, 0x01, - 0xff, 0xe4, 0xc7, 0xf5, 0x01, 0x42, 0x8c, 0x09, 0xc6, 0xf5, 0x41, 0x0a, - 0x8f, 0xa6, 0x1b, 0x1a, 0x94, 0x20, 0x01, 0xff, 0x43, 0x33, 0xf0, 0xfb, - 0xf3, 0x01, 0xd3, 0xfc, 0xf3, 0x01, 0xd4, 0xfd, 0xf3, 0x01, 0xd5, 0xfe, - 0xf3, 0x01, 0xd6, 0xff, 0xf3, 0x41, 0x44, 0xf6, 0xeb, 0xb2, 0xf9, 0x01, - 0x4a, 0xc1, 0xa6, 0xb1, 0xf9, 0x01, 0x48, 0xa2, 0xc7, 0xb0, 0xf9, 0x01, - 0x4a, 0x25, 0xb1, 0xb3, 0xf9, 0x41, 0x44, 0x40, 0x12, 0x14, 0x20, 0x00, - 0x44, 0x2a, 0x0d, 0x01, 0x20, 0x00, 0x45, 0x87, 0x4b, 0x03, 0x20, 0x40, - 0x0d, 0x9c, 0x7f, 0x96, 0x02, 0xa5, 0xa0, 0x01, 0xe6, 0xdd, 0xf9, 0x01, - 0x07, 0x0b, 0xd5, 0x01, 0xff, 0x06, 0xc2, 0x05, 0x06, 0x52, 0x4a, 0x51, - 0xf6, 0x0f, 0x41, 0xa1, 0x7f, 0x44, 0x0a, 0xec, 0xe1, 0x0f, 0x01, 0x46, - 0xda, 0x48, 0xe3, 0x0f, 0x01, 0x45, 0xa1, 0xa8, 0xe2, 0x0f, 0x01, 0x42, - 0xb0, 0x01, 0xe4, 0x0f, 0x81, 0x60, 0x44, 0x8e, 0xed, 0xea, 0x0f, 0x01, - 0x46, 0x9c, 0xda, 0xeb, 0x0f, 0x01, 0x43, 0x89, 0x05, 0xec, 0x0f, 0x01, - 0x43, 0x54, 0x22, 0xed, 0x0f, 0x01, 0x42, 0x6f, 0x02, 0xf0, 0x0f, 0x01, - 0x44, 0xae, 0xc5, 0xf2, 0x0f, 0x01, 0x44, 0xfa, 0x64, 0xf3, 0x0f, 0x01, - 0xb3, 0x20, 0xb4, 0x12, 0x43, 0xc0, 0x88, 0xe5, 0x0f, 0x01, 0x44, 0x58, - 0x51, 0xe9, 0x0f, 0x01, 0x45, 0x52, 0x51, 0xe6, 0x0f, 0x41, 0x42, 0x9a, - 0x43, 0xf5, 0x0f, 0x01, 0x43, 0x39, 0x25, 0xe8, 0x0f, 0x41, 0xa1, 0x06, - 0x43, 0x0e, 0x16, 0xf4, 0x0f, 0x41, 0x43, 0x89, 0xe7, 0xf1, 0x0f, 0x01, - 0x44, 0x39, 0xe1, 0xee, 0x0f, 0x41, 0x42, 0x53, 0x00, 0xe7, 0x0f, 0x41, - 0x44, 0x48, 0x3c, 0xe0, 0x0f, 0x01, 0x43, 0xf7, 0x19, 0xef, 0x0f, 0x41, - 0x05, 0x5a, 0xe2, 0x4f, 0x47, 0xa2, 0x90, 0x08, 0x22, 0x80, 0x0c, 0x45, - 0x05, 0xc3, 0x18, 0xf4, 0x01, 0x45, 0xef, 0xe8, 0xd7, 0xf6, 0x41, 0x80, - 0x01, 0xff, 0x08, 0x84, 0x74, 0x29, 0x05, 0x51, 0x00, 0x01, 0xff, 0x49, - 0x98, 0x1d, 0xf5, 0x22, 0x00, 0x56, 0xa9, 0x34, 0xf2, 0x22, 0x00, 0x47, - 0x77, 0x7e, 0xf6, 0x22, 0x00, 0x56, 0x5b, 0x0b, 0xf9, 0x22, 0x00, 0x48, - 0x78, 0x58, 0xf8, 0x22, 0x00, 0x68, 0x05, 0x05, 0xf3, 0x22, 0x40, 0x49, - 0xa5, 0x01, 0xd9, 0x2a, 0x00, 0x47, 0x50, 0x02, 0xd2, 0x27, 0x40, 0x80, - 0x06, 0x4f, 0x44, 0x3b, 0xe7, 0x23, 0x40, 0x45, 0xce, 0x00, 0x01, 0x23, - 0x00, 0x4a, 0xbd, 0xaa, 0xa1, 0xf4, 0x01, 0x44, 0xce, 0xee, 0x0c, 0xf5, - 0x01, 0x45, 0x40, 0xe8, 0x26, 0xf5, 0x41, 0xe1, 0x00, 0x05, 0x01, 0x42, - 0x8c, 0x05, 0x01, 0x05, 0x01, 0xa3, 0xcf, 0x01, 0xa4, 0xc2, 0x01, 0xe5, - 0x08, 0x05, 0x81, 0xb8, 0x01, 0x42, 0xa0, 0x19, 0x09, 0x05, 0x01, 0xa7, - 0x99, 0x01, 0x42, 0xb0, 0x01, 0x0c, 0x05, 0x01, 0xe9, 0x0d, 0x05, 0x01, - 0x42, 0xde, 0x1f, 0x0e, 0x05, 0x01, 0xab, 0x7d, 0xac, 0x71, 0x42, 0x2a, - 0x02, 0x12, 0x05, 0x01, 0xae, 0x55, 0xef, 0x16, 0x05, 0x01, 0x42, 0x6f, - 0x02, 0x17, 0x05, 0x01, 0x42, 0x72, 0xa0, 0x18, 0x05, 0x01, 0xb2, 0x39, - 0xb3, 0x2d, 0xb4, 0x21, 0xf5, 0x1f, 0x05, 0x01, 0x42, 0x32, 0x00, 0x20, - 0x05, 0x01, 0x42, 0x60, 0x42, 0x21, 0x05, 0x01, 0xf9, 0x22, 0x05, 0x01, - 0xba, 0x01, 0xff, 0xe5, 0x23, 0x05, 0x01, 0x42, 0xb0, 0x01, 0x24, 0x05, - 0x41, 0xe5, 0x1d, 0x05, 0x01, 0x42, 0xb0, 0x01, 0x1e, 0x05, 0x41, 0xe5, - 0x1b, 0x05, 0x01, 0x42, 0xb0, 0x01, 0x1c, 0x05, 0x41, 0xe5, 0x19, 0x05, - 0x01, 0x42, 0x88, 0x00, 0x1a, 0x05, 0x41, 0xe1, 0x14, 0x05, 0x01, 0x42, - 0x04, 0x00, 0x05, 0x05, 0x01, 0xe5, 0x13, 0x05, 0x01, 0x42, 0xde, 0x1f, - 0x15, 0x05, 0x41, 0xe5, 0x10, 0x05, 0x01, 0x42, 0x68, 0x00, 0x11, 0x05, - 0x41, 0xe5, 0x0f, 0x05, 0x01, 0x42, 0xb0, 0x01, 0x27, 0x05, 0x41, 0xe5, - 0x0a, 0x05, 0x01, 0xa8, 0x06, 0x42, 0xde, 0x1f, 0x0b, 0x05, 0x41, 0x44, - 0x5e, 0x20, 0x26, 0x05, 0x01, 0xe5, 0x25, 0x05, 0x41, 0xe9, 0x07, 0x05, - 0x41, 0xe5, 0x04, 0x05, 0x01, 0x42, 0xb0, 0x01, 0x06, 0x05, 0x41, 0xe5, - 0x02, 0x05, 0x01, 0x42, 0xb0, 0x01, 0x03, 0x05, 0x41, 0x80, 0x06, 0x46, - 0x4e, 0x62, 0x6a, 0x26, 0x40, 0xb0, 0x1c, 0x05, 0xca, 0x64, 0x0c, 0x4f, - 0x4e, 0x1c, 0x33, 0x27, 0x00, 0x62, 0xd3, 0x0c, 0x4a, 0x27, 0x40, 0x46, - 0x18, 0xda, 0x69, 0xcc, 0x01, 0x47, 0x68, 0xd1, 0x6a, 0xcc, 0x41, 0x5f, - 0xc1, 0x10, 0x41, 0x27, 0x00, 0x07, 0x09, 0x08, 0x01, 0xff, 0x4a, 0x53, - 0x2b, 0x34, 0x27, 0x00, 0x4d, 0xd9, 0x12, 0x35, 0x27, 0x00, 0x56, 0xdd, - 0x35, 0x37, 0x27, 0x40, 0xe7, 0x5a, 0xf9, 0x01, 0x11, 0x69, 0x5e, 0x01, - 0xff, 0x80, 0x04, 0xcd, 0x02, 0xd8, 0x40, 0xa1, 0xe6, 0x23, 0xa2, 0x9f, - 0x23, 0x02, 0xc4, 0xf1, 0xa1, 0x22, 0x02, 0xc6, 0xf1, 0x8e, 0x1f, 0xa5, - 0xb1, 0x1d, 0xa6, 0x88, 0x1b, 0x02, 0xc8, 0xf1, 0xeb, 0x18, 0xa8, 0xa9, - 0x18, 0xa9, 0x98, 0x17, 0x03, 0x14, 0xf1, 0xf3, 0x16, 0xac, 0xbc, 0x16, - 0xad, 0x9f, 0x13, 0xae, 0xe7, 0x0f, 0xaf, 0x93, 0x0d, 0x02, 0x8b, 0xd5, - 0xd3, 0x0c, 0x03, 0x38, 0xf1, 0xb2, 0x0c, 0x02, 0x32, 0xcb, 0x9a, 0x0b, - 0x02, 0xee, 0xde, 0xaa, 0x09, 0xb4, 0xdd, 0x07, 0x02, 0xad, 0xe9, 0x8c, - 0x06, 0xb6, 0xaf, 0x03, 0xb7, 0x96, 0x02, 0x03, 0x7d, 0xf1, 0xde, 0x01, - 0x03, 0x89, 0xf1, 0xb4, 0x01, 0x02, 0xd6, 0xf1, 0x01, 0xff, 0x90, 0x65, - 0x91, 0x01, 0xff, 0xd0, 0xf5, 0x33, 0x01, 0xd1, 0xf6, 0x33, 0x01, 0xd2, - 0xf7, 0x33, 0x01, 0xd3, 0xf8, 0x33, 0x01, 0xd4, 0xf9, 0x33, 0x01, 0xd5, - 0xfa, 0x33, 0x81, 0x25, 0xd6, 0x04, 0x34, 0xc1, 0x00, 0xe1, 0x05, 0x34, - 0x01, 0xe2, 0x06, 0x34, 0x01, 0xe3, 0x07, 0x34, 0x01, 0xe4, 0x08, 0x34, - 0x01, 0xe5, 0x09, 0x34, 0x01, 0xe6, 0x0a, 0x34, 0x01, 0xe7, 0x0b, 0x34, - 0x01, 0xe8, 0x0c, 0x34, 0x41, 0xe1, 0xfb, 0x33, 0x01, 0xe2, 0xfc, 0x33, - 0x01, 0xe3, 0xfd, 0x33, 0x01, 0xe4, 0xfe, 0x33, 0x01, 0xe5, 0xff, 0x33, - 0x01, 0xe6, 0x00, 0x34, 0x01, 0xe7, 0x01, 0x34, 0x01, 0xe8, 0x02, 0x34, - 0x01, 0xe9, 0x03, 0x34, 0x41, 0xd1, 0xe4, 0x33, 0x01, 0xd2, 0xe5, 0x33, - 0x81, 0x2f, 0xd3, 0xea, 0x33, 0x81, 0x22, 0xd4, 0xed, 0x33, 0x81, 0x19, - 0xd5, 0xef, 0x33, 0x81, 0x10, 0xd6, 0xf1, 0x33, 0x01, 0xd7, 0xf2, 0x33, - 0x01, 0xd8, 0xf3, 0x33, 0x01, 0xd9, 0xf4, 0x33, 0x41, 0xe1, 0xf0, 0x33, - 0x41, 0xe1, 0xee, 0x33, 0x41, 0xe1, 0xeb, 0x33, 0x01, 0xe2, 0xec, 0x33, - 0x41, 0xe1, 0xe6, 0x33, 0x01, 0xe2, 0xe7, 0x33, 0x01, 0xe3, 0xe8, 0x33, - 0x01, 0xe4, 0xe9, 0x33, 0x41, 0xd1, 0xdb, 0x33, 0x81, 0x1c, 0xd2, 0xdd, - 0x33, 0x01, 0xd3, 0xde, 0x33, 0x01, 0xd4, 0xdf, 0x33, 0x01, 0xd5, 0xe0, - 0x33, 0x01, 0xd6, 0xe1, 0x33, 0x01, 0xd7, 0xe2, 0x33, 0x01, 0xd8, 0xe3, - 0x33, 0x41, 0xe1, 0xdc, 0x33, 0x41, 0xd1, 0xcf, 0x33, 0x01, 0xd2, 0xd0, - 0x33, 0x01, 0xd3, 0xd1, 0x33, 0x01, 0xd4, 0xd2, 0x33, 0x81, 0x1a, 0xd5, - 0xd5, 0x33, 0x01, 0xd6, 0xd6, 0x33, 0x81, 0x0d, 0xd7, 0xd8, 0x33, 0x01, - 0xd8, 0xd9, 0x33, 0xc1, 0x00, 0xe1, 0xda, 0x33, 0x41, 0xe1, 0xd7, 0x33, - 0x41, 0xe1, 0xd3, 0x33, 0x01, 0xe2, 0xd4, 0x33, 0x41, 0x90, 0x06, 0x4d, - 0x4d, 0x82, 0x46, 0x34, 0x41, 0x90, 0x5e, 0x91, 0x20, 0x92, 0x01, 0xff, - 0xd0, 0xc8, 0x33, 0x01, 0xd1, 0xc9, 0x33, 0x01, 0xd2, 0xca, 0x33, 0x01, - 0xd3, 0xcb, 0x33, 0x01, 0xd4, 0xcc, 0x33, 0x81, 0x04, 0xd5, 0xce, 0x33, - 0x41, 0xe1, 0xcd, 0x33, 0x41, 0xd0, 0xba, 0x33, 0x81, 0x33, 0xd1, 0xbc, - 0x33, 0x01, 0xd2, 0xbd, 0x33, 0x01, 0xd3, 0xbe, 0x33, 0x01, 0xd4, 0xbf, - 0x33, 0x81, 0x1e, 0xd5, 0xc1, 0x33, 0x01, 0xd6, 0xc2, 0x33, 0x01, 0xd7, - 0xc3, 0x33, 0x81, 0x0d, 0xd8, 0xc5, 0x33, 0x81, 0x04, 0xd9, 0xc7, 0x33, - 0x41, 0xe1, 0xc6, 0x33, 0x41, 0xe1, 0xc4, 0x33, 0x41, 0xe1, 0xc0, 0x33, - 0x41, 0xe1, 0xbb, 0x33, 0x41, 0xd1, 0xaf, 0x33, 0x01, 0xd2, 0xb0, 0x33, - 0x01, 0xd3, 0xb1, 0x33, 0x81, 0x1d, 0xd4, 0xb3, 0x33, 0x01, 0xd5, 0xb4, - 0x33, 0x01, 0xd6, 0xb5, 0x33, 0x01, 0xd7, 0xb6, 0x33, 0x01, 0xd8, 0xb7, - 0x33, 0x01, 0xd9, 0xb8, 0x33, 0xc1, 0x00, 0xe1, 0xb9, 0x33, 0x41, 0xe1, - 0xb2, 0x33, 0x41, 0x90, 0x06, 0x4e, 0x22, 0x76, 0x30, 0x34, 0x41, 0x90, - 0xf8, 0x01, 0x91, 0xb3, 0x01, 0x92, 0x49, 0x93, 0x0b, 0x42, 0xae, 0xf1, - 0xad, 0x33, 0xc1, 0x00, 0xe1, 0xae, 0x33, 0x41, 0xd0, 0x9f, 0x33, 0x81, - 0x33, 0xd1, 0xa1, 0x33, 0x81, 0x2a, 0xd2, 0xa3, 0x33, 0x01, 0xd3, 0xa4, - 0x33, 0x81, 0x1d, 0xd4, 0xa6, 0x33, 0x01, 0xd5, 0xa7, 0x33, 0x01, 0xd6, - 0xa8, 0x33, 0x01, 0xd7, 0xa9, 0x33, 0x81, 0x08, 0xd8, 0xab, 0x33, 0x01, - 0xd9, 0xac, 0x33, 0x41, 0xe1, 0xaa, 0x33, 0x41, 0xe1, 0xa5, 0x33, 0x41, - 0xe1, 0xa2, 0x33, 0x41, 0xe1, 0xa0, 0x33, 0x41, 0xd0, 0x86, 0x33, 0x81, - 0x33, 0xd1, 0x93, 0x33, 0x01, 0xd2, 0x94, 0x33, 0x01, 0xd3, 0x95, 0x33, - 0x81, 0x22, 0xd4, 0x97, 0x33, 0x01, 0xd5, 0x98, 0x33, 0x01, 0xd6, 0x99, - 0x33, 0x01, 0xd7, 0x9a, 0x33, 0x01, 0xd8, 0x9b, 0x33, 0x81, 0x09, 0xd9, - 0x9d, 0x33, 0xc1, 0x00, 0xe1, 0x9e, 0x33, 0x41, 0xe1, 0x9c, 0x33, 0x41, - 0xe1, 0x96, 0x33, 0x41, 0xe1, 0x87, 0x33, 0x01, 0xe2, 0x88, 0x33, 0x01, - 0xe3, 0x89, 0x33, 0x01, 0xe4, 0x8a, 0x33, 0x01, 0xe5, 0x8b, 0x33, 0x01, - 0xe6, 0x8c, 0x33, 0x01, 0xe7, 0x8d, 0x33, 0x01, 0xe8, 0x8e, 0x33, 0x01, - 0xe9, 0x8f, 0x33, 0x01, 0xea, 0x90, 0x33, 0x01, 0xeb, 0x91, 0x33, 0x01, - 0xec, 0x92, 0x33, 0x41, 0xd0, 0x77, 0x33, 0x01, 0xd1, 0x78, 0x33, 0x81, - 0x29, 0xd2, 0x7c, 0x33, 0x81, 0x1c, 0xd3, 0x7f, 0x33, 0x01, 0xd4, 0x80, - 0x33, 0x01, 0xd5, 0x81, 0x33, 0x01, 0xd6, 0x82, 0x33, 0x01, 0xd7, 0x83, - 0x33, 0x01, 0xd8, 0x84, 0x33, 0x01, 0xd9, 0x85, 0x33, 0x41, 0xe1, 0x7d, - 0x33, 0x01, 0xe2, 0x7e, 0x33, 0x41, 0xe1, 0x79, 0x33, 0x01, 0xe2, 0x7a, - 0x33, 0x01, 0xe3, 0x7b, 0x33, 0x01, 0xe4, 0x2f, 0x34, 0x41, 0xd1, 0x62, - 0x33, 0x81, 0x2e, 0xd2, 0x6c, 0x33, 0x81, 0x25, 0xd3, 0x6e, 0x33, 0x01, - 0xd4, 0x6f, 0x33, 0x01, 0xd5, 0x70, 0x33, 0x01, 0xd6, 0x71, 0x33, 0x01, - 0xd7, 0x72, 0x33, 0x81, 0x08, 0xd8, 0x75, 0x33, 0x01, 0xd9, 0x76, 0x33, - 0x41, 0xe1, 0x73, 0x33, 0x01, 0xe2, 0x74, 0x33, 0x41, 0xe1, 0x6d, 0x33, - 0x41, 0xe1, 0x63, 0x33, 0x01, 0xe2, 0x64, 0x33, 0x01, 0xe3, 0x65, 0x33, - 0x01, 0xe4, 0x66, 0x33, 0x01, 0xe5, 0x67, 0x33, 0x01, 0xe6, 0x68, 0x33, - 0x01, 0xe7, 0x69, 0x33, 0x01, 0xe8, 0x6a, 0x33, 0x01, 0xe9, 0x6b, 0x33, - 0x41, 0x90, 0x9c, 0x01, 0x91, 0x72, 0x92, 0x3e, 0x93, 0x0f, 0x94, 0x01, - 0xff, 0xd0, 0x5f, 0x33, 0x01, 0xd1, 0x60, 0x33, 0x01, 0xd2, 0x61, 0x33, - 0x41, 0xd0, 0x54, 0x33, 0x01, 0xd1, 0x55, 0x33, 0x01, 0xd2, 0x56, 0x33, - 0x81, 0x1c, 0xd3, 0x58, 0x33, 0x01, 0xd4, 0x59, 0x33, 0x01, 0xd5, 0x5a, - 0x33, 0x01, 0xd6, 0x5b, 0x33, 0x01, 0xd7, 0x5c, 0x33, 0x01, 0xd8, 0x5d, - 0x33, 0x01, 0xd9, 0x5e, 0x33, 0x41, 0xe1, 0x57, 0x33, 0x41, 0xd0, 0x48, - 0x33, 0x01, 0xd1, 0x49, 0x33, 0x01, 0xd2, 0x4a, 0x33, 0x01, 0xd3, 0x4b, - 0x33, 0x81, 0x1d, 0xd4, 0x4d, 0x33, 0x01, 0xd5, 0x4e, 0x33, 0x01, 0xd6, - 0x4f, 0x33, 0x01, 0xd7, 0x50, 0x33, 0x01, 0xd8, 0x51, 0x33, 0x01, 0xd9, - 0x52, 0x33, 0xc1, 0x00, 0xe1, 0x53, 0x33, 0x41, 0xe1, 0x4c, 0x33, 0x41, - 0xd0, 0x3e, 0x33, 0x01, 0xd1, 0x3f, 0x33, 0x01, 0xd2, 0x40, 0x33, 0x01, - 0xd3, 0x41, 0x33, 0x01, 0xd4, 0x42, 0x33, 0x01, 0xd5, 0x43, 0x33, 0x01, - 0xd6, 0x44, 0x33, 0x01, 0xd7, 0x45, 0x33, 0x01, 0xd8, 0x46, 0x33, 0x01, - 0xd9, 0x47, 0x33, 0x41, 0xd1, 0x33, 0x33, 0x01, 0xd2, 0x34, 0x33, 0x01, - 0xd3, 0x35, 0x33, 0x01, 0xd4, 0x36, 0x33, 0x01, 0xd5, 0x37, 0x33, 0x01, - 0xd6, 0x38, 0x33, 0x81, 0x0c, 0xd7, 0x3b, 0x33, 0x01, 0xd8, 0x3c, 0x33, - 0x01, 0xd9, 0x3d, 0x33, 0x41, 0xe1, 0x39, 0x33, 0x01, 0xe2, 0x3a, 0x33, - 0x41, 0x90, 0x06, 0x4d, 0xd9, 0x7e, 0x45, 0x34, 0x41, 0x90, 0x87, 0x01, - 0x91, 0x53, 0x92, 0x29, 0x93, 0x01, 0xff, 0xd0, 0x2a, 0x33, 0x01, 0xd1, - 0x2b, 0x33, 0x01, 0xd2, 0x2c, 0x33, 0x81, 0x15, 0xd3, 0x2e, 0x33, 0x81, - 0x0c, 0xd4, 0x30, 0x33, 0x01, 0xd5, 0x31, 0x33, 0x01, 0xd6, 0x32, 0x33, - 0x41, 0xe1, 0x2f, 0x33, 0x41, 0xe1, 0x2d, 0x33, 0x41, 0xd0, 0x20, 0x33, - 0x01, 0xd1, 0x21, 0x33, 0x01, 0xd2, 0x22, 0x33, 0x01, 0xd3, 0x23, 0x33, - 0x01, 0xd4, 0x24, 0x33, 0x01, 0xd5, 0x25, 0x33, 0x01, 0xd6, 0x26, 0x33, - 0x01, 0xd7, 0x27, 0x33, 0x01, 0xd8, 0x28, 0x33, 0x01, 0xd9, 0x29, 0x33, - 0x41, 0xd0, 0x14, 0x33, 0x01, 0xd1, 0x15, 0x33, 0x81, 0x25, 0xd2, 0x17, - 0x33, 0x01, 0xd3, 0x18, 0x33, 0x01, 0xd4, 0x19, 0x33, 0x01, 0xd5, 0x1a, - 0x33, 0x01, 0xd6, 0x1b, 0x33, 0x81, 0x0c, 0xd7, 0x1d, 0x33, 0x01, 0xd8, - 0x1e, 0x33, 0x01, 0xd9, 0x1f, 0x33, 0x41, 0xe1, 0x1c, 0x33, 0x41, 0xe1, - 0x16, 0x33, 0x41, 0xd1, 0x07, 0x33, 0x01, 0xd2, 0x08, 0x33, 0x01, 0xd3, - 0x09, 0x33, 0x81, 0x27, 0xd4, 0x0b, 0x33, 0x01, 0xd5, 0x0c, 0x33, 0x01, - 0xd6, 0x0d, 0x33, 0x01, 0xd7, 0x0e, 0x33, 0x81, 0x12, 0xd8, 0x10, 0x33, - 0x81, 0x09, 0xd9, 0x12, 0x33, 0xc1, 0x00, 0xe1, 0x13, 0x33, 0x41, 0xe1, - 0x11, 0x33, 0x41, 0xe1, 0x0f, 0x33, 0x41, 0xe1, 0x0a, 0x33, 0x41, 0x90, - 0xba, 0x01, 0x91, 0x81, 0x01, 0x92, 0x4e, 0x93, 0x1f, 0x94, 0x01, 0xff, - 0xd0, 0x00, 0x33, 0x01, 0xd1, 0x01, 0x33, 0x01, 0xd2, 0x02, 0x33, 0x01, - 0xd3, 0x03, 0x33, 0x01, 0xd4, 0x04, 0x33, 0x01, 0xd5, 0x05, 0x33, 0x01, - 0xd6, 0x06, 0x33, 0x41, 0xd0, 0xf5, 0x32, 0x01, 0xd1, 0xf6, 0x32, 0x01, - 0xd2, 0xf7, 0x32, 0x01, 0xd3, 0xf8, 0x32, 0x01, 0xd4, 0xf9, 0x32, 0x01, - 0xd5, 0xfa, 0x32, 0x81, 0x10, 0xd6, 0xfc, 0x32, 0x01, 0xd7, 0xfd, 0x32, - 0x01, 0xd8, 0xfe, 0x32, 0x01, 0xd9, 0xff, 0x32, 0x41, 0xe1, 0xfb, 0x32, - 0x41, 0xd0, 0xe9, 0x32, 0x01, 0xd1, 0xea, 0x32, 0x01, 0xd2, 0xeb, 0x32, - 0x01, 0xd3, 0xec, 0x32, 0x01, 0xd4, 0xed, 0x32, 0x01, 0xd5, 0xee, 0x32, - 0x01, 0xd6, 0xef, 0x32, 0x81, 0x0c, 0xd7, 0xf2, 0x32, 0x01, 0xd8, 0xf3, - 0x32, 0x01, 0xd9, 0xf4, 0x32, 0x41, 0xe1, 0xf0, 0x32, 0x01, 0xe2, 0xf1, - 0x32, 0x41, 0xd0, 0xdc, 0x32, 0x01, 0xd1, 0xdd, 0x32, 0x01, 0xd2, 0xde, - 0x32, 0x01, 0xd3, 0xdf, 0x32, 0x01, 0xd4, 0xe0, 0x32, 0x81, 0x19, 0xd5, - 0xe3, 0x32, 0x01, 0xd6, 0xe4, 0x32, 0x01, 0xd7, 0xe5, 0x32, 0x81, 0x08, - 0xd8, 0xe7, 0x32, 0x01, 0xd9, 0xe8, 0x32, 0x41, 0xe1, 0xe6, 0x32, 0x41, - 0xe1, 0xe1, 0x32, 0x01, 0xe2, 0xe2, 0x32, 0x41, 0xd1, 0xd1, 0x32, 0x01, - 0xd2, 0xd2, 0x32, 0x81, 0x21, 0xd3, 0xd4, 0x32, 0x01, 0xd4, 0xd5, 0x32, - 0x01, 0xd5, 0xd6, 0x32, 0x01, 0xd6, 0xd7, 0x32, 0x81, 0x0c, 0xd7, 0xd9, - 0x32, 0x01, 0xd8, 0xda, 0x32, 0x01, 0xd9, 0xdb, 0x32, 0x41, 0xe1, 0xd8, - 0x32, 0x41, 0xe1, 0xd3, 0x32, 0x41, 0x90, 0x5f, 0x91, 0x2b, 0x92, 0x01, - 0xff, 0xd0, 0xc7, 0x32, 0x01, 0xd1, 0xc8, 0x32, 0x01, 0xd2, 0xc9, 0x32, - 0x01, 0xd3, 0xca, 0x32, 0x01, 0xd4, 0xcb, 0x32, 0x01, 0xd5, 0xcc, 0x32, - 0x01, 0xd6, 0xcd, 0x32, 0x01, 0xd7, 0xce, 0x32, 0x01, 0xd8, 0xcf, 0x32, - 0x01, 0xd9, 0xd0, 0x32, 0x41, 0xd0, 0xbb, 0x32, 0x81, 0x29, 0xd1, 0xbd, - 0x32, 0x01, 0xd2, 0xbe, 0x32, 0x01, 0xd3, 0xbf, 0x32, 0x01, 0xd4, 0xc0, - 0x32, 0x01, 0xd5, 0xc1, 0x32, 0x01, 0xd6, 0xc2, 0x32, 0x81, 0x0c, 0xd7, - 0xc4, 0x32, 0x01, 0xd8, 0xc5, 0x32, 0x01, 0xd9, 0xc6, 0x32, 0x41, 0xe1, - 0xc3, 0x32, 0x41, 0xe1, 0xbc, 0x32, 0x41, 0xd1, 0xaf, 0x32, 0x01, 0xd2, - 0xb0, 0x32, 0x81, 0x25, 0xd3, 0xb2, 0x32, 0x81, 0x18, 0xd4, 0xb5, 0x32, - 0x01, 0xd5, 0xb6, 0x32, 0x01, 0xd6, 0xb7, 0x32, 0x01, 0xd7, 0xb8, 0x32, - 0x01, 0xd8, 0xb9, 0x32, 0x01, 0xd9, 0xba, 0x32, 0x41, 0xe1, 0xb3, 0x32, - 0x01, 0xe2, 0xb4, 0x32, 0x41, 0xe1, 0xb1, 0x32, 0x41, 0xd1, 0xa8, 0x32, - 0x01, 0xd2, 0xa9, 0x32, 0x01, 0xd3, 0xaa, 0x32, 0x01, 0xd4, 0xab, 0x32, - 0x01, 0xd5, 0xac, 0x32, 0x01, 0xd6, 0xad, 0x32, 0x01, 0xd7, 0xae, 0x32, - 0x41, 0x90, 0x0b, 0x91, 0x01, 0xff, 0xd0, 0xa6, 0x32, 0x01, 0xd1, 0xa7, - 0x32, 0x41, 0xd1, 0x9b, 0x32, 0x81, 0x25, 0xd2, 0x9d, 0x32, 0x01, 0xd3, - 0x9e, 0x32, 0x81, 0x18, 0xd4, 0xa0, 0x32, 0x01, 0xd5, 0xa1, 0x32, 0x01, - 0xd6, 0xa2, 0x32, 0x01, 0xd7, 0xa3, 0x32, 0x01, 0xd8, 0xa4, 0x32, 0x01, - 0xd9, 0xa5, 0x32, 0x41, 0xe1, 0x9f, 0x32, 0x41, 0xe1, 0x9c, 0x32, 0x41, - 0x90, 0x06, 0x4d, 0x58, 0x88, 0x36, 0x34, 0x41, 0x90, 0xff, 0x01, 0x91, - 0xc2, 0x01, 0x92, 0x83, 0x01, 0x93, 0x3e, 0x94, 0x14, 0x95, 0x01, 0xff, - 0xd0, 0x97, 0x32, 0x81, 0x04, 0xd1, 0x9a, 0x32, 0x41, 0xe1, 0x98, 0x32, - 0x01, 0xe2, 0x99, 0x32, 0x41, 0xd0, 0x8d, 0x32, 0x01, 0xd1, 0x8e, 0x32, - 0x01, 0xd2, 0x8f, 0x32, 0x01, 0xd3, 0x90, 0x32, 0x01, 0xd4, 0x91, 0x32, - 0x01, 0xd5, 0x92, 0x32, 0x01, 0xd6, 0x93, 0x32, 0x01, 0xd7, 0x94, 0x32, - 0x01, 0xd8, 0x95, 0x32, 0x01, 0xd9, 0x96, 0x32, 0x41, 0xd0, 0x7d, 0x32, - 0x81, 0x3a, 0xd1, 0x7f, 0x32, 0x01, 0xd2, 0x80, 0x32, 0x01, 0xd3, 0x81, - 0x32, 0x81, 0x29, 0xd4, 0x83, 0x32, 0x01, 0xd5, 0x84, 0x32, 0x01, 0xd6, - 0x85, 0x32, 0x81, 0x0c, 0xd7, 0x8a, 0x32, 0x01, 0xd8, 0x8b, 0x32, 0x01, - 0xd9, 0x8c, 0x32, 0x41, 0xe1, 0x86, 0x32, 0x01, 0xe2, 0x87, 0x32, 0x01, - 0xe3, 0x88, 0x32, 0x01, 0xe4, 0x89, 0x32, 0x41, 0xe1, 0x82, 0x32, 0x41, - 0xe1, 0x7e, 0x32, 0x41, 0xd0, 0x6f, 0x32, 0x81, 0x33, 0xd1, 0x71, 0x32, - 0x01, 0xd2, 0x72, 0x32, 0x01, 0xd3, 0x73, 0x32, 0x01, 0xd4, 0x74, 0x32, - 0x81, 0x1e, 0xd5, 0x76, 0x32, 0x81, 0x15, 0xd6, 0x78, 0x32, 0x01, 0xd7, - 0x79, 0x32, 0x01, 0xd8, 0x7a, 0x32, 0x01, 0xd9, 0x7b, 0x32, 0xc1, 0x00, - 0xe1, 0x7c, 0x32, 0x41, 0xe1, 0x77, 0x32, 0x41, 0xe1, 0x75, 0x32, 0x41, - 0xe1, 0x70, 0x32, 0x41, 0xd0, 0x61, 0x32, 0x81, 0x29, 0xd1, 0x65, 0x32, - 0x01, 0xd2, 0x66, 0x32, 0x01, 0xd3, 0x67, 0x32, 0x01, 0xd4, 0x68, 0x32, - 0x01, 0xd5, 0x69, 0x32, 0x01, 0xd6, 0x6a, 0x32, 0x01, 0xd7, 0x6b, 0x32, - 0x01, 0xd8, 0x6c, 0x32, 0x01, 0xd9, 0x6d, 0x32, 0xc1, 0x00, 0xe1, 0x6e, - 0x32, 0x41, 0xe1, 0x62, 0x32, 0x01, 0xe2, 0x63, 0x32, 0x01, 0xe3, 0x64, - 0x32, 0x41, 0xd1, 0x50, 0x32, 0x81, 0x3e, 0xd2, 0x52, 0x32, 0x01, 0xd3, - 0x53, 0x32, 0x01, 0xd4, 0x54, 0x32, 0x01, 0xd5, 0x55, 0x32, 0x81, 0x29, - 0xd6, 0x57, 0x32, 0x81, 0x0c, 0xd7, 0x5e, 0x32, 0x01, 0xd8, 0x5f, 0x32, - 0x01, 0xd9, 0x60, 0x32, 0x41, 0xe1, 0x58, 0x32, 0x01, 0xe2, 0x59, 0x32, - 0x01, 0xe3, 0x5a, 0x32, 0x01, 0xe4, 0x5b, 0x32, 0x01, 0xe5, 0x5c, 0x32, - 0x01, 0xe6, 0x5d, 0x32, 0x41, 0xe1, 0x56, 0x32, 0x41, 0xe1, 0x51, 0x32, - 0x41, 0x90, 0xdc, 0x01, 0x02, 0x81, 0x96, 0x78, 0x02, 0xad, 0xe9, 0x01, - 0xff, 0x90, 0x4d, 0x91, 0x14, 0x92, 0x01, 0xff, 0xd0, 0x4c, 0x32, 0x01, - 0xd1, 0x4d, 0x32, 0x01, 0xd2, 0x4e, 0x32, 0xc1, 0x00, 0xe1, 0x4f, 0x32, - 0x41, 0xd0, 0x3f, 0x32, 0x81, 0x2e, 0xd1, 0x41, 0x32, 0x81, 0x25, 0xd2, - 0x43, 0x32, 0x01, 0xd3, 0x44, 0x32, 0x01, 0xd4, 0x45, 0x32, 0x01, 0xd5, - 0x46, 0x32, 0x01, 0xd6, 0x47, 0x32, 0x01, 0xd7, 0x48, 0x32, 0x01, 0xd8, - 0x49, 0x32, 0x81, 0x04, 0xd9, 0x4b, 0x32, 0x41, 0xe1, 0x4a, 0x32, 0x41, - 0xe1, 0x42, 0x32, 0x41, 0xe1, 0x40, 0x32, 0x41, 0xd1, 0x36, 0x32, 0x01, - 0xd2, 0x37, 0x32, 0x01, 0xd3, 0x38, 0x32, 0x01, 0xd4, 0x39, 0x32, 0x01, - 0xd5, 0x3a, 0x32, 0x01, 0xd6, 0x3b, 0x32, 0x01, 0xd7, 0x3c, 0x32, 0x01, - 0xd8, 0x3d, 0x32, 0x01, 0xd9, 0x3e, 0x32, 0x41, 0x90, 0x35, 0x91, 0x06, - 0x42, 0xab, 0xe4, 0x35, 0x32, 0x41, 0xd0, 0x2a, 0x32, 0x01, 0xd1, 0x2b, - 0x32, 0x01, 0xd2, 0x2c, 0x32, 0x01, 0xd3, 0x2d, 0x32, 0x01, 0xd4, 0x2e, - 0x32, 0x01, 0xd5, 0x2f, 0x32, 0x01, 0xd6, 0x30, 0x32, 0x01, 0xd7, 0x31, - 0x32, 0x81, 0x08, 0xd8, 0x33, 0x32, 0x01, 0xd9, 0x34, 0x32, 0x41, 0xe1, - 0x32, 0x32, 0x41, 0xd1, 0x20, 0x32, 0x01, 0xd2, 0x21, 0x32, 0x01, 0xd3, - 0x22, 0x32, 0x01, 0xd4, 0x23, 0x32, 0x01, 0xd5, 0x24, 0x32, 0x81, 0x10, - 0xd6, 0x26, 0x32, 0x01, 0xd7, 0x27, 0x32, 0x01, 0xd8, 0x28, 0x32, 0x01, - 0xd9, 0x29, 0x32, 0x41, 0xe1, 0x25, 0x32, 0x41, 0x90, 0xaf, 0x01, 0x91, - 0x7c, 0x92, 0x4d, 0x93, 0x0f, 0x94, 0x01, 0xff, 0xd0, 0x1d, 0x32, 0x01, - 0xd1, 0x1e, 0x32, 0x01, 0xd2, 0x1f, 0x32, 0x41, 0xd0, 0x0f, 0x32, 0x01, - 0xd1, 0x10, 0x32, 0x01, 0xd2, 0x11, 0x32, 0x01, 0xd3, 0x12, 0x32, 0x81, - 0x27, 0xd4, 0x14, 0x32, 0x81, 0x1e, 0xd5, 0x16, 0x32, 0x81, 0x15, 0xd6, - 0x18, 0x32, 0x01, 0xd7, 0x19, 0x32, 0x81, 0x08, 0xd8, 0x1b, 0x32, 0x01, - 0xd9, 0x1c, 0x32, 0x41, 0xe1, 0x1a, 0x32, 0x41, 0xe1, 0x17, 0x32, 0x41, - 0xe1, 0x15, 0x32, 0x41, 0xe1, 0x13, 0x32, 0x41, 0xd0, 0x04, 0x32, 0x01, - 0xd1, 0x05, 0x32, 0x01, 0xd2, 0x06, 0x32, 0x01, 0xd3, 0x07, 0x32, 0x01, - 0xd4, 0x08, 0x32, 0x01, 0xd5, 0x09, 0x32, 0x81, 0x10, 0xd6, 0x0b, 0x32, - 0x01, 0xd7, 0x0c, 0x32, 0x01, 0xd8, 0x0d, 0x32, 0x01, 0xd9, 0x0e, 0x32, - 0x41, 0xe1, 0x0a, 0x32, 0x41, 0xd0, 0xf8, 0x31, 0x01, 0xd1, 0xf9, 0x31, - 0x01, 0xd2, 0xfa, 0x31, 0x01, 0xd3, 0xfb, 0x31, 0x01, 0xd4, 0xfc, 0x31, - 0x01, 0xd5, 0xfd, 0x31, 0x01, 0xd6, 0xfe, 0x31, 0x01, 0xd7, 0xff, 0x31, - 0x01, 0xd8, 0x00, 0x32, 0x81, 0x04, 0xd9, 0x03, 0x32, 0x41, 0xe1, 0x01, - 0x32, 0x01, 0xe2, 0x02, 0x32, 0x41, 0xd1, 0xef, 0x31, 0x01, 0xd2, 0xf0, - 0x31, 0x01, 0xd3, 0xf1, 0x31, 0x01, 0xd4, 0xf2, 0x31, 0x01, 0xd5, 0xf3, - 0x31, 0x01, 0xd6, 0xf4, 0x31, 0x01, 0xd7, 0xf5, 0x31, 0x01, 0xd8, 0xf6, - 0x31, 0x01, 0xd9, 0xf7, 0x31, 0x41, 0x90, 0x76, 0x52, 0x92, 0x51, 0x40, - 0x34, 0x01, 0x4f, 0x55, 0x6f, 0x55, 0x34, 0xc1, 0x00, 0x04, 0x11, 0x05, - 0x01, 0xff, 0x46, 0x66, 0x0a, 0x50, 0x34, 0x81, 0x41, 0x43, 0x15, 0x05, - 0x52, 0x34, 0x01, 0x45, 0xeb, 0xe7, 0x49, 0x34, 0x81, 0x23, 0x43, 0x1e, - 0x00, 0x4b, 0x34, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x47, 0x05, 0xcc, 0x53, - 0x34, 0x01, 0x43, 0x15, 0x05, 0x4a, 0x34, 0x01, 0x45, 0xeb, 0xe7, 0x47, - 0x34, 0xc1, 0x00, 0x4f, 0x99, 0x67, 0x4f, 0x34, 0x41, 0x05, 0x19, 0x00, - 0x01, 0xff, 0x46, 0x66, 0x0a, 0x51, 0x34, 0x01, 0x43, 0x1e, 0x00, 0x4d, - 0x34, 0x41, 0x80, 0x01, 0xff, 0x47, 0x05, 0xcc, 0x54, 0x34, 0x01, 0x43, - 0x15, 0x05, 0x4e, 0x34, 0x01, 0x45, 0xeb, 0xe7, 0x48, 0x34, 0xc1, 0x00, - 0x4c, 0x41, 0x89, 0x4c, 0x34, 0x41, 0x90, 0xed, 0x01, 0x91, 0x8d, 0x01, - 0x92, 0x54, 0x93, 0x1c, 0x94, 0x01, 0xff, 0xd0, 0xe9, 0x31, 0x81, 0x10, - 0xd1, 0xeb, 0x31, 0x01, 0xd2, 0xec, 0x31, 0x01, 0xd3, 0xed, 0x31, 0x01, - 0xd4, 0xee, 0x31, 0x41, 0xe1, 0xea, 0x31, 0x41, 0xd0, 0xdc, 0x31, 0x01, - 0xd1, 0xdd, 0x31, 0x81, 0x29, 0xd2, 0xdf, 0x31, 0x01, 0xd3, 0xe0, 0x31, - 0x81, 0x18, 0xd4, 0xe3, 0x31, 0x01, 0xd5, 0xe4, 0x31, 0x01, 0xd6, 0xe5, - 0x31, 0x01, 0xd7, 0xe6, 0x31, 0x01, 0xd8, 0xe7, 0x31, 0x01, 0xd9, 0xe8, - 0x31, 0x41, 0xe1, 0xe1, 0x31, 0x01, 0xe2, 0xe2, 0x31, 0x41, 0xe1, 0xde, - 0x31, 0x41, 0xd0, 0xcf, 0x31, 0x01, 0xd1, 0xd0, 0x31, 0x01, 0xd2, 0xd1, - 0x31, 0x81, 0x26, 0xd3, 0xd3, 0x31, 0x01, 0xd4, 0xd4, 0x31, 0x81, 0x19, - 0xd5, 0xd6, 0x31, 0x01, 0xd6, 0xd7, 0x31, 0x01, 0xd7, 0xd8, 0x31, 0x01, - 0xd8, 0xd9, 0x31, 0x81, 0x04, 0xd9, 0xdb, 0x31, 0x41, 0xe1, 0xda, 0x31, - 0x41, 0xe1, 0xd5, 0x31, 0x41, 0xe1, 0xd2, 0x31, 0x41, 0xd0, 0xb9, 0x31, - 0x81, 0x54, 0xd1, 0xbb, 0x31, 0x01, 0xd2, 0xbc, 0x31, 0x81, 0x2b, 0xd3, - 0xc5, 0x31, 0x01, 0xd4, 0xc6, 0x31, 0x01, 0xd5, 0xc7, 0x31, 0x81, 0x1a, - 0xd6, 0xc9, 0x31, 0x81, 0x11, 0xd7, 0xcb, 0x31, 0x81, 0x08, 0xd8, 0xcd, - 0x31, 0x01, 0xd9, 0xce, 0x31, 0x41, 0xe1, 0xcc, 0x31, 0x41, 0xe1, 0xca, - 0x31, 0x41, 0xe1, 0xc8, 0x31, 0x41, 0xe1, 0xbd, 0x31, 0x01, 0xe2, 0xbe, - 0x31, 0x01, 0xe3, 0xbf, 0x31, 0x01, 0xe4, 0xc0, 0x31, 0x01, 0xe5, 0xc1, - 0x31, 0x01, 0xe6, 0xc2, 0x31, 0x01, 0xe7, 0xc3, 0x31, 0x01, 0xe8, 0xc4, - 0x31, 0x41, 0xe1, 0xba, 0x31, 0x41, 0xd1, 0xad, 0x31, 0x81, 0x25, 0xd2, - 0xb0, 0x31, 0x01, 0xd3, 0xb1, 0x31, 0x81, 0x18, 0xd4, 0xb3, 0x31, 0x01, - 0xd5, 0xb4, 0x31, 0x01, 0xd6, 0xb5, 0x31, 0x01, 0xd7, 0xb6, 0x31, 0x01, - 0xd8, 0xb7, 0x31, 0x01, 0xd9, 0xb8, 0x31, 0x41, 0xe1, 0xb2, 0x31, 0x41, - 0xe1, 0xae, 0x31, 0x01, 0xe2, 0xaf, 0x31, 0x41, 0x02, 0xa4, 0xd5, 0x06, - 0x48, 0xde, 0x7e, 0x43, 0x34, 0x41, 0xd1, 0xa3, 0x31, 0x01, 0xd2, 0xa4, - 0x31, 0x81, 0x1d, 0xd3, 0xa6, 0x31, 0x01, 0xd4, 0xa7, 0x31, 0x01, 0xd5, - 0xa8, 0x31, 0x01, 0xd6, 0xa9, 0x31, 0x81, 0x08, 0xd7, 0xab, 0x31, 0x01, - 0xd8, 0xac, 0x31, 0x41, 0xe1, 0xaa, 0x31, 0x41, 0xe1, 0xa5, 0x31, 0x41, - 0xd1, 0x9b, 0x31, 0x01, 0xd2, 0x9c, 0x31, 0x01, 0xd3, 0x9d, 0x31, 0x01, - 0xd4, 0x9e, 0x31, 0x01, 0xd5, 0x9f, 0x31, 0x01, 0xd6, 0xa0, 0x31, 0x01, - 0xd7, 0xa1, 0x31, 0x01, 0xd8, 0xa2, 0x31, 0x41, 0x90, 0x37, 0x09, 0x36, - 0xba, 0x01, 0xff, 0x46, 0x66, 0x0a, 0x3b, 0x34, 0x81, 0x1c, 0x46, 0x7d, - 0x02, 0x39, 0x34, 0x01, 0x43, 0x1e, 0x00, 0x3a, 0x34, 0xc1, 0x00, 0x80, - 0x01, 0xff, 0x43, 0x15, 0x05, 0x34, 0x34, 0x01, 0x45, 0xeb, 0xe7, 0x32, - 0x34, 0x41, 0x80, 0x01, 0xff, 0x43, 0x15, 0x05, 0x35, 0x34, 0x01, 0x45, - 0xeb, 0xe7, 0x33, 0x34, 0x41, 0x90, 0x25, 0x91, 0x01, 0xff, 0xd0, 0x93, - 0x31, 0x81, 0x19, 0xd1, 0x95, 0x31, 0x81, 0x10, 0xd2, 0x97, 0x31, 0x01, - 0xd3, 0x98, 0x31, 0x01, 0xd4, 0x99, 0x31, 0x01, 0xd5, 0x9a, 0x31, 0x41, - 0xe1, 0x96, 0x31, 0x41, 0xe1, 0x94, 0x31, 0x41, 0xd1, 0x88, 0x31, 0x01, - 0xd2, 0x89, 0x31, 0x01, 0xd3, 0x8a, 0x31, 0x01, 0xd4, 0x8b, 0x31, 0x01, - 0xd5, 0x8c, 0x31, 0x81, 0x15, 0xd6, 0x8e, 0x31, 0x01, 0xd7, 0x8f, 0x31, - 0x01, 0xd8, 0x90, 0x31, 0x01, 0xd9, 0x91, 0x31, 0xc1, 0x00, 0xe1, 0x92, - 0x31, 0x41, 0xe1, 0x8d, 0x31, 0x41, 0x02, 0xa4, 0xd5, 0x16, 0x04, 0x23, - 0x00, 0x06, 0x50, 0x1a, 0x64, 0x31, 0x34, 0x41, 0x45, 0xbe, 0xbd, 0x42, - 0x34, 0x01, 0x49, 0xdd, 0x7e, 0x44, 0x34, 0x41, 0xd1, 0x7f, 0x31, 0x01, - 0xd2, 0x80, 0x31, 0x01, 0xd3, 0x81, 0x31, 0x01, 0xd4, 0x82, 0x31, 0x01, - 0xd5, 0x83, 0x31, 0x01, 0xd6, 0x84, 0x31, 0x81, 0x08, 0xd7, 0x86, 0x31, - 0x01, 0xd8, 0x87, 0x31, 0x41, 0xe1, 0x85, 0x31, 0x41, 0x90, 0xe3, 0x01, - 0x91, 0xb3, 0x01, 0x92, 0x7f, 0x93, 0x4b, 0x94, 0x17, 0x95, 0x01, 0xff, - 0xd0, 0x7a, 0x31, 0x01, 0xd1, 0x7b, 0x31, 0x01, 0xd2, 0x7c, 0x31, 0x01, - 0xd3, 0x7d, 0x31, 0x01, 0xd4, 0x7e, 0x31, 0x41, 0xd0, 0x6e, 0x31, 0x01, - 0xd1, 0x6f, 0x31, 0x01, 0xd2, 0x70, 0x31, 0x01, 0xd3, 0x71, 0x31, 0x81, - 0x1d, 0xd4, 0x73, 0x31, 0x01, 0xd5, 0x74, 0x31, 0x81, 0x10, 0xd6, 0x76, - 0x31, 0x01, 0xd7, 0x77, 0x31, 0x01, 0xd8, 0x78, 0x31, 0x01, 0xd9, 0x79, - 0x31, 0x41, 0xe1, 0x75, 0x31, 0x41, 0xe1, 0x72, 0x31, 0x41, 0xd0, 0x62, - 0x31, 0x01, 0xd1, 0x63, 0x31, 0x01, 0xd2, 0x64, 0x31, 0x01, 0xd3, 0x65, - 0x31, 0x01, 0xd4, 0x66, 0x31, 0x01, 0xd5, 0x67, 0x31, 0x01, 0xd6, 0x68, - 0x31, 0x81, 0x11, 0xd7, 0x6a, 0x31, 0x81, 0x08, 0xd8, 0x6c, 0x31, 0x01, - 0xd9, 0x6d, 0x31, 0x41, 0xe1, 0x6b, 0x31, 0x41, 0xe1, 0x69, 0x31, 0x41, - 0xd0, 0x56, 0x31, 0x81, 0x29, 0xd1, 0x58, 0x31, 0x01, 0xd2, 0x59, 0x31, - 0x01, 0xd3, 0x5a, 0x31, 0x01, 0xd4, 0x5b, 0x31, 0x01, 0xd5, 0x5c, 0x31, - 0x01, 0xd6, 0x5d, 0x31, 0x81, 0x0c, 0xd7, 0x5f, 0x31, 0x01, 0xd8, 0x60, - 0x31, 0x01, 0xd9, 0x61, 0x31, 0x41, 0xe1, 0x5e, 0x31, 0x41, 0xe1, 0x57, - 0x31, 0x41, 0xd0, 0x4b, 0x31, 0x01, 0xd1, 0x4c, 0x31, 0x81, 0x20, 0xd2, - 0x4e, 0x31, 0x01, 0xd3, 0x4f, 0x31, 0x01, 0xd4, 0x50, 0x31, 0x01, 0xd5, - 0x51, 0x31, 0x01, 0xd6, 0x52, 0x31, 0x01, 0xd7, 0x53, 0x31, 0x01, 0xd8, - 0x54, 0x31, 0x01, 0xd9, 0x55, 0x31, 0x41, 0xe1, 0x4d, 0x31, 0x41, 0xd1, - 0x3f, 0x31, 0x01, 0xd2, 0x40, 0x31, 0x01, 0xd3, 0x41, 0x31, 0x01, 0xd4, - 0x42, 0x31, 0x01, 0xd5, 0x43, 0x31, 0x01, 0xd6, 0x44, 0x31, 0x81, 0x15, - 0xd7, 0x46, 0x31, 0x81, 0x08, 0xd8, 0x49, 0x31, 0x01, 0xd9, 0x4a, 0x31, - 0x41, 0xe1, 0x47, 0x31, 0x01, 0xe2, 0x48, 0x31, 0x41, 0xe1, 0x45, 0x31, - 0x41, 0x90, 0x06, 0x49, 0xba, 0xbd, 0x41, 0x34, 0x41, 0x90, 0xf2, 0x01, - 0x91, 0xc2, 0x01, 0x92, 0x92, 0x01, 0x93, 0x59, 0x94, 0x20, 0x95, 0x01, - 0xff, 0xd0, 0x38, 0x31, 0x01, 0xd1, 0x39, 0x31, 0x81, 0x08, 0xd2, 0x3d, - 0x31, 0x01, 0xd3, 0x3e, 0x31, 0x41, 0xe1, 0x3a, 0x31, 0x01, 0xe2, 0x3b, - 0x31, 0x01, 0xe3, 0x3c, 0x31, 0x41, 0xd0, 0x2b, 0x31, 0x01, 0xd1, 0x2c, - 0x31, 0x01, 0xd2, 0x2d, 0x31, 0x01, 0xd3, 0x2e, 0x31, 0x01, 0xd4, 0x2f, - 0x31, 0x01, 0xd5, 0x30, 0x31, 0x81, 0x1a, 0xd6, 0x32, 0x31, 0x81, 0x11, - 0xd7, 0x34, 0x31, 0x81, 0x08, 0xd8, 0x36, 0x31, 0x01, 0xd9, 0x37, 0x31, - 0x41, 0xe1, 0x35, 0x31, 0x41, 0xe1, 0x33, 0x31, 0x41, 0xe1, 0x31, 0x31, - 0x41, 0xd0, 0x1e, 0x31, 0x01, 0xd1, 0x1f, 0x31, 0x81, 0x2a, 0xd2, 0x21, - 0x31, 0x01, 0xd3, 0x22, 0x31, 0x01, 0xd4, 0x23, 0x31, 0x01, 0xd5, 0x24, - 0x31, 0x01, 0xd6, 0x25, 0x31, 0x01, 0xd7, 0x26, 0x31, 0x81, 0x0d, 0xd8, - 0x28, 0x31, 0x81, 0x04, 0xd9, 0x2a, 0x31, 0x41, 0xe1, 0x29, 0x31, 0x41, - 0xe1, 0x27, 0x31, 0x41, 0xe1, 0x20, 0x31, 0x41, 0xd0, 0x13, 0x31, 0x01, - 0xd1, 0x14, 0x31, 0x81, 0x20, 0xd2, 0x16, 0x31, 0x01, 0xd3, 0x17, 0x31, - 0x01, 0xd4, 0x18, 0x31, 0x01, 0xd5, 0x19, 0x31, 0x01, 0xd6, 0x1a, 0x31, - 0x01, 0xd7, 0x1b, 0x31, 0x01, 0xd8, 0x1c, 0x31, 0x01, 0xd9, 0x1d, 0x31, - 0x41, 0xe1, 0x15, 0x31, 0x41, 0xd0, 0x08, 0x31, 0x01, 0xd1, 0x09, 0x31, - 0x01, 0xd2, 0x0a, 0x31, 0x01, 0xd3, 0x0b, 0x31, 0x81, 0x18, 0xd4, 0x0d, - 0x31, 0x01, 0xd5, 0x0e, 0x31, 0x01, 0xd6, 0x0f, 0x31, 0x01, 0xd7, 0x10, - 0x31, 0x01, 0xd8, 0x11, 0x31, 0x01, 0xd9, 0x12, 0x31, 0x41, 0xe1, 0x0c, - 0x31, 0x41, 0xd1, 0xfe, 0x30, 0x81, 0x20, 0xd2, 0x00, 0x31, 0x01, 0xd3, - 0x01, 0x31, 0x01, 0xd4, 0x02, 0x31, 0x01, 0xd5, 0x03, 0x31, 0x01, 0xd6, - 0x04, 0x31, 0x01, 0xd7, 0x05, 0x31, 0x01, 0xd8, 0x06, 0x31, 0x01, 0xd9, - 0x07, 0x31, 0x41, 0xe1, 0xff, 0x30, 0x41, 0x90, 0x17, 0x03, 0x1b, 0x00, - 0x01, 0xff, 0x49, 0x21, 0x67, 0x3d, 0x34, 0x01, 0x47, 0x20, 0x2f, 0x38, - 0x34, 0x01, 0x50, 0x1a, 0x67, 0x3f, 0x34, 0x41, 0x90, 0x90, 0x01, 0x91, - 0x5c, 0x92, 0x28, 0x93, 0x01, 0xff, 0xd0, 0xf5, 0x30, 0x01, 0xd1, 0xf6, - 0x30, 0x01, 0xd2, 0xf7, 0x30, 0x01, 0xd3, 0xf8, 0x30, 0x01, 0xd4, 0xf9, - 0x30, 0x81, 0x0c, 0xd6, 0xfb, 0x30, 0x01, 0xd7, 0xfc, 0x30, 0x01, 0xd8, - 0xfd, 0x30, 0x41, 0xe1, 0xfa, 0x30, 0x41, 0xd0, 0xe9, 0x30, 0x81, 0x29, - 0xd1, 0xeb, 0x30, 0x01, 0xd2, 0xec, 0x30, 0x01, 0xd3, 0xed, 0x30, 0x01, - 0xd4, 0xee, 0x30, 0x01, 0xd5, 0xef, 0x30, 0x01, 0xd6, 0xf0, 0x30, 0x01, - 0xd7, 0xf1, 0x30, 0x01, 0xd8, 0xf2, 0x30, 0x81, 0x04, 0xd9, 0xf4, 0x30, - 0x41, 0xe1, 0xf3, 0x30, 0x41, 0xe1, 0xea, 0x30, 0x41, 0xd0, 0xdd, 0x30, - 0x01, 0xd1, 0xde, 0x30, 0x01, 0xd2, 0xdf, 0x30, 0x01, 0xd3, 0xe0, 0x30, - 0x01, 0xd4, 0xe1, 0x30, 0x01, 0xd5, 0xe2, 0x30, 0x01, 0xd6, 0xe3, 0x30, - 0x81, 0x11, 0xd7, 0xe5, 0x30, 0x81, 0x08, 0xd8, 0xe7, 0x30, 0x01, 0xd9, - 0xe8, 0x30, 0x41, 0xe1, 0xe6, 0x30, 0x41, 0xe1, 0xe4, 0x30, 0x41, 0xd1, - 0xd2, 0x30, 0x01, 0xd2, 0xd3, 0x30, 0x01, 0xd3, 0xd4, 0x30, 0x01, 0xd4, - 0xd5, 0x30, 0x01, 0xd5, 0xd6, 0x30, 0x01, 0xd6, 0xd7, 0x30, 0x01, 0xd7, - 0xd8, 0x30, 0x01, 0xd8, 0xd9, 0x30, 0x81, 0x09, 0xd9, 0xdb, 0x30, 0xc1, - 0x00, 0xe1, 0xdc, 0x30, 0x41, 0xe1, 0xda, 0x30, 0x41, 0x90, 0xe2, 0x02, - 0x91, 0xb7, 0x02, 0x92, 0x87, 0x02, 0x93, 0xd2, 0x01, 0x94, 0x9d, 0x01, - 0x95, 0x44, 0x96, 0x01, 0xff, 0xd0, 0xc2, 0x30, 0x01, 0xd1, 0xc3, 0x30, - 0x01, 0xd2, 0xc4, 0x30, 0x01, 0xd3, 0xc5, 0x30, 0x01, 0xd4, 0xc6, 0x30, - 0x01, 0xd5, 0xc7, 0x30, 0x01, 0xd6, 0xc8, 0x30, 0x01, 0xd7, 0xc9, 0x30, - 0xc1, 0x00, 0xe1, 0xca, 0x30, 0x01, 0xe2, 0xcb, 0x30, 0x01, 0xe3, 0xcc, - 0x30, 0x01, 0xe4, 0xcd, 0x30, 0x01, 0xe5, 0xce, 0x30, 0x01, 0xe6, 0xcf, - 0x30, 0x01, 0xe7, 0xd0, 0x30, 0x01, 0xe8, 0xd1, 0x30, 0x41, 0xd0, 0xad, - 0x30, 0x81, 0x2e, 0xd1, 0xb7, 0x30, 0x01, 0xd2, 0xb8, 0x30, 0x81, 0x21, - 0xd3, 0xba, 0x30, 0x01, 0xd4, 0xbb, 0x30, 0x81, 0x14, 0xd5, 0xbd, 0x30, - 0x01, 0xd6, 0xbe, 0x30, 0x01, 0xd7, 0xbf, 0x30, 0x01, 0xd8, 0xc0, 0x30, - 0x01, 0xd9, 0xc1, 0x30, 0x41, 0xe1, 0xbc, 0x30, 0x41, 0xe1, 0xb9, 0x30, - 0x41, 0xe1, 0xae, 0x30, 0x01, 0xe2, 0xaf, 0x30, 0x01, 0xe3, 0xb0, 0x30, - 0x01, 0xe4, 0xb1, 0x30, 0x01, 0xe5, 0xb2, 0x30, 0x01, 0xe6, 0xb3, 0x30, - 0x01, 0xe7, 0xb4, 0x30, 0x01, 0xe8, 0xb5, 0x30, 0x01, 0xe9, 0xb6, 0x30, - 0x41, 0xd0, 0xa1, 0x30, 0x01, 0xd1, 0xa2, 0x30, 0x01, 0xd2, 0xa3, 0x30, - 0x01, 0xd3, 0xa4, 0x30, 0x01, 0xd4, 0xa5, 0x30, 0x01, 0xd5, 0xa6, 0x30, - 0x01, 0xd6, 0xa7, 0x30, 0x81, 0x11, 0xd7, 0xa9, 0x30, 0x01, 0xd8, 0xaa, - 0x30, 0x81, 0x04, 0xd9, 0xac, 0x30, 0x41, 0xe1, 0xab, 0x30, 0x41, 0xe1, - 0xa8, 0x30, 0x41, 0xd0, 0x95, 0x30, 0x01, 0xd1, 0x96, 0x30, 0x81, 0x25, - 0xd2, 0x98, 0x30, 0x01, 0xd3, 0x99, 0x30, 0x01, 0xd4, 0x9a, 0x30, 0x81, - 0x14, 0xd5, 0x9c, 0x30, 0x01, 0xd6, 0x9d, 0x30, 0x01, 0xd7, 0x9e, 0x30, - 0x01, 0xd8, 0x9f, 0x30, 0x01, 0xd9, 0xa0, 0x30, 0x41, 0xe1, 0x9b, 0x30, - 0x41, 0xe1, 0x97, 0x30, 0x41, 0xd0, 0x8a, 0x30, 0x01, 0xd1, 0x8b, 0x30, - 0x01, 0xd2, 0x8c, 0x30, 0x01, 0xd3, 0x8d, 0x30, 0x01, 0xd4, 0x8e, 0x30, - 0x01, 0xd5, 0x8f, 0x30, 0x01, 0xd6, 0x90, 0x30, 0x01, 0xd7, 0x91, 0x30, - 0x81, 0x08, 0xd8, 0x93, 0x30, 0x01, 0xd9, 0x94, 0x30, 0x41, 0xe1, 0x92, - 0x30, 0x41, 0xd0, 0x80, 0x30, 0x01, 0xd1, 0x81, 0x30, 0x01, 0xd2, 0x82, - 0x30, 0x01, 0xd3, 0x83, 0x30, 0x01, 0xd4, 0x84, 0x30, 0x01, 0xd5, 0x85, - 0x30, 0x01, 0xd6, 0x86, 0x30, 0x01, 0xd7, 0x87, 0x30, 0x01, 0xd8, 0x88, - 0x30, 0x01, 0xd9, 0x89, 0x30, 0x41, 0xd1, 0x76, 0x30, 0x01, 0xd2, 0x77, - 0x30, 0x01, 0xd3, 0x78, 0x30, 0x01, 0xd4, 0x79, 0x30, 0x01, 0xd5, 0x7a, - 0x30, 0x01, 0xd6, 0x7b, 0x30, 0x01, 0xd7, 0x7c, 0x30, 0x01, 0xd8, 0x7d, - 0x30, 0x81, 0x04, 0xd9, 0x7f, 0x30, 0x41, 0xe1, 0x7e, 0x30, 0x41, 0x90, - 0x46, 0x91, 0x17, 0x92, 0x01, 0xff, 0xd0, 0x71, 0x30, 0x01, 0xd1, 0x72, - 0x30, 0x01, 0xd2, 0x73, 0x30, 0x01, 0xd3, 0x74, 0x30, 0x01, 0xd4, 0x75, - 0x30, 0x41, 0xd0, 0x66, 0x30, 0x81, 0x24, 0xd1, 0x68, 0x30, 0x01, 0xd2, - 0x69, 0x30, 0x01, 0xd3, 0x6a, 0x30, 0x01, 0xd4, 0x6b, 0x30, 0x01, 0xd5, - 0x6c, 0x30, 0x01, 0xd6, 0x6d, 0x30, 0x01, 0xd7, 0x6e, 0x30, 0x01, 0xd8, - 0x6f, 0x30, 0x01, 0xd9, 0x70, 0x30, 0x41, 0xe1, 0x67, 0x30, 0x41, 0xd1, - 0x5a, 0x30, 0x01, 0xd2, 0x5b, 0x30, 0x81, 0x1c, 0xd3, 0x5f, 0x30, 0x01, - 0xd4, 0x60, 0x30, 0x01, 0xd5, 0x61, 0x30, 0x01, 0xd6, 0x62, 0x30, 0x01, - 0xd7, 0x63, 0x30, 0x01, 0xd8, 0x64, 0x30, 0x01, 0xd9, 0x65, 0x30, 0x41, - 0xe1, 0x5c, 0x30, 0x01, 0xe2, 0x5d, 0x30, 0x01, 0xe3, 0x5e, 0x30, 0x41, - 0x02, 0xa4, 0xd5, 0x17, 0x05, 0xb9, 0x3e, 0x01, 0xff, 0x49, 0x21, 0x67, - 0x3c, 0x34, 0x01, 0x47, 0x20, 0x2f, 0x37, 0x34, 0x01, 0x50, 0x1a, 0x67, - 0x3e, 0x34, 0x41, 0xd1, 0x50, 0x30, 0x01, 0xd2, 0x51, 0x30, 0x01, 0xd3, - 0x52, 0x30, 0x01, 0xd4, 0x53, 0x30, 0x01, 0xd5, 0x54, 0x30, 0x81, 0x10, - 0xd6, 0x56, 0x30, 0x01, 0xd7, 0x57, 0x30, 0x01, 0xd8, 0x58, 0x30, 0x01, - 0xd9, 0x59, 0x30, 0x41, 0xe1, 0x55, 0x30, 0x41, 0x90, 0x97, 0x01, 0x02, - 0xbd, 0xe9, 0x01, 0xff, 0x90, 0x63, 0x91, 0x39, 0x92, 0x0f, 0x93, 0x01, - 0xff, 0xd0, 0x2c, 0x34, 0x01, 0xd1, 0x2d, 0x34, 0x01, 0xd2, 0x2e, 0x34, - 0x41, 0xd0, 0x22, 0x34, 0x01, 0xd1, 0x23, 0x34, 0x01, 0xd2, 0x24, 0x34, - 0x01, 0xd3, 0x25, 0x34, 0x01, 0xd4, 0x26, 0x34, 0x01, 0xd5, 0x27, 0x34, - 0x01, 0xd6, 0x28, 0x34, 0x01, 0xd7, 0x29, 0x34, 0x01, 0xd8, 0x2a, 0x34, - 0x01, 0xd9, 0x2b, 0x34, 0x41, 0xd0, 0x18, 0x34, 0x01, 0xd1, 0x19, 0x34, - 0x01, 0xd2, 0x1a, 0x34, 0x01, 0xd3, 0x1b, 0x34, 0x01, 0xd4, 0x1c, 0x34, - 0x01, 0xd5, 0x1d, 0x34, 0x01, 0xd6, 0x1e, 0x34, 0x01, 0xd7, 0x1f, 0x34, - 0x01, 0xd8, 0x20, 0x34, 0x01, 0xd9, 0x21, 0x34, 0x41, 0xd1, 0x0d, 0x34, - 0x01, 0xd2, 0x0e, 0x34, 0x01, 0xd3, 0x0f, 0x34, 0x01, 0xd4, 0x10, 0x34, - 0x01, 0xd5, 0x11, 0x34, 0x01, 0xd6, 0x12, 0x34, 0x01, 0xd7, 0x13, 0x34, - 0x81, 0x08, 0xd8, 0x16, 0x34, 0x01, 0xd9, 0x17, 0x34, 0x41, 0xe1, 0x14, - 0x34, 0x01, 0xe2, 0x15, 0x34, 0x41, 0x90, 0xa8, 0x02, 0x91, 0xf3, 0x01, - 0x92, 0xc8, 0x01, 0x93, 0x98, 0x01, 0x94, 0x5a, 0x95, 0x30, 0x96, 0x06, - 0x42, 0xc4, 0xf0, 0x4f, 0x30, 0x41, 0xd0, 0x45, 0x30, 0x01, 0xd1, 0x46, - 0x30, 0x01, 0xd2, 0x47, 0x30, 0x01, 0xd3, 0x48, 0x30, 0x01, 0xd4, 0x49, - 0x30, 0x01, 0xd5, 0x4a, 0x30, 0x01, 0xd6, 0x4b, 0x30, 0x01, 0xd7, 0x4c, - 0x30, 0x01, 0xd8, 0x4d, 0x30, 0x01, 0xd9, 0x4e, 0x30, 0x41, 0xd0, 0x3b, - 0x30, 0x01, 0xd1, 0x3c, 0x30, 0x01, 0xd2, 0x3d, 0x30, 0x01, 0xd3, 0x3e, - 0x30, 0x01, 0xd4, 0x3f, 0x30, 0x01, 0xd5, 0x40, 0x30, 0x01, 0xd6, 0x41, - 0x30, 0x01, 0xd7, 0x42, 0x30, 0x01, 0xd8, 0x43, 0x30, 0x01, 0xd9, 0x44, - 0x30, 0x41, 0xd0, 0x2d, 0x30, 0x81, 0x33, 0xd1, 0x2f, 0x30, 0x01, 0xd2, - 0x30, 0x30, 0x81, 0x26, 0xd3, 0x32, 0x30, 0x81, 0x1d, 0xd4, 0x34, 0x30, - 0x01, 0xd5, 0x35, 0x30, 0x81, 0x10, 0xd6, 0x37, 0x30, 0x01, 0xd7, 0x38, - 0x30, 0x01, 0xd8, 0x39, 0x30, 0x01, 0xd9, 0x3a, 0x30, 0x41, 0xe1, 0x36, - 0x30, 0x41, 0xe1, 0x33, 0x30, 0x41, 0xe1, 0x31, 0x30, 0x41, 0xe1, 0x2e, - 0x30, 0x41, 0xd0, 0x22, 0x30, 0x01, 0xd1, 0x23, 0x30, 0x01, 0xd2, 0x24, - 0x30, 0x81, 0x1c, 0xd3, 0x26, 0x30, 0x01, 0xd4, 0x27, 0x30, 0x01, 0xd5, - 0x28, 0x30, 0x01, 0xd6, 0x29, 0x30, 0x01, 0xd7, 0x2a, 0x30, 0x01, 0xd8, - 0x2b, 0x30, 0x01, 0xd9, 0x2c, 0x30, 0x41, 0xe1, 0x25, 0x30, 0x41, 0xd0, - 0x18, 0x30, 0x01, 0xd1, 0x19, 0x30, 0x01, 0xd2, 0x1a, 0x30, 0x01, 0xd3, - 0x1b, 0x30, 0x01, 0xd4, 0x1c, 0x30, 0x01, 0xd5, 0x1d, 0x30, 0x01, 0xd6, - 0x1e, 0x30, 0x01, 0xd7, 0x1f, 0x30, 0x01, 0xd8, 0x20, 0x30, 0x01, 0xd9, - 0x21, 0x30, 0x41, 0xd0, 0x0c, 0x30, 0x01, 0xd1, 0x0d, 0x30, 0x01, 0xd2, - 0x0e, 0x30, 0x01, 0xd3, 0x0f, 0x30, 0x01, 0xd4, 0x10, 0x30, 0x81, 0x19, - 0xd5, 0x12, 0x30, 0x01, 0xd6, 0x13, 0x30, 0x01, 0xd7, 0x14, 0x30, 0x81, - 0x08, 0xd8, 0x16, 0x30, 0x01, 0xd9, 0x17, 0x30, 0x41, 0xe1, 0x15, 0x30, - 0x41, 0xe1, 0x11, 0x30, 0x41, 0xd1, 0x00, 0x30, 0x01, 0xd2, 0x01, 0x30, - 0x01, 0xd3, 0x02, 0x30, 0x01, 0xd4, 0x03, 0x30, 0x01, 0xd5, 0x04, 0x30, - 0x81, 0x19, 0xd6, 0x06, 0x30, 0x81, 0x0c, 0xd7, 0x09, 0x30, 0x01, 0xd8, - 0x0a, 0x30, 0x01, 0xd9, 0x0b, 0x30, 0x41, 0xe1, 0x07, 0x30, 0x01, 0xe2, - 0x08, 0x30, 0x41, 0xe1, 0x05, 0x30, 0x41, 0x43, 0x06, 0x02, 0x85, 0xf9, - 0x01, 0xf2, 0x42, 0xf4, 0x81, 0x06, 0x4f, 0xbc, 0x71, 0x71, 0x26, 0x40, - 0x80, 0x2a, 0x42, 0x53, 0x00, 0x41, 0x26, 0xc0, 0x00, 0x02, 0x86, 0x00, - 0x01, 0xff, 0x05, 0x1b, 0xe5, 0x06, 0x45, 0x31, 0x16, 0xda, 0x23, 0x40, - 0xa1, 0x06, 0x4d, 0x22, 0x81, 0x0d, 0xf3, 0x41, 0x47, 0x6c, 0xd0, 0x0e, - 0xf3, 0x01, 0x4d, 0xdf, 0x86, 0x0f, 0xf3, 0x41, 0x03, 0xf4, 0x01, 0x06, - 0x50, 0x4a, 0x67, 0xbb, 0xf9, 0x41, 0x45, 0x57, 0xe5, 0x3d, 0xf3, 0x01, - 0x44, 0x85, 0xb1, 0x3e, 0xf3, 0x41, 0xa1, 0xba, 0x31, 0xa5, 0xf0, 0x23, - 0xa9, 0xfd, 0x19, 0x4f, 0xce, 0x6e, 0xec, 0xf9, 0x01, 0xaf, 0xb0, 0x07, - 0xb2, 0xe3, 0x06, 0xb5, 0x06, 0x42, 0xd2, 0xf1, 0xc0, 0xf4, 0x41, 0x42, - 0x36, 0x01, 0x86, 0xf9, 0x01, 0x46, 0x14, 0xdb, 0x5f, 0xf9, 0x01, 0x07, - 0xed, 0xd1, 0x01, 0xff, 0x06, 0xa0, 0xd6, 0xe3, 0x04, 0x4b, 0x16, 0x99, - 0x9e, 0xbc, 0x01, 0x07, 0xc1, 0x05, 0x12, 0x5d, 0x01, 0x16, 0x9f, 0xbc, - 0x01, 0x51, 0x7c, 0x5c, 0x9c, 0xbc, 0x01, 0x55, 0x7e, 0x3d, 0x9d, 0xbc, - 0x41, 0xe1, 0x41, 0xbc, 0x81, 0xbb, 0x04, 0xe2, 0x07, 0xbc, 0x01, 0xe4, - 0x08, 0xbc, 0x81, 0xa7, 0x04, 0xe5, 0x47, 0xbc, 0x81, 0x99, 0x04, 0xe6, - 0x04, 0xbc, 0x81, 0x8d, 0x04, 0xe7, 0x0a, 0xbc, 0x81, 0x81, 0x04, 0xe8, - 0x00, 0xbc, 0x81, 0xf7, 0x03, 0xe9, 0x46, 0xbc, 0x81, 0xed, 0x03, 0xea, - 0x1b, 0xbc, 0x81, 0xb6, 0x03, 0xeb, 0x05, 0xbc, 0x81, 0xa0, 0x03, 0xec, - 0x06, 0xbc, 0x81, 0x89, 0x03, 0xed, 0x19, 0xbc, 0x81, 0xeb, 0x02, 0xee, - 0x1a, 0xbc, 0x81, 0xb9, 0x02, 0xef, 0x44, 0xbc, 0x81, 0xa1, 0x02, 0xf0, - 0x02, 0xbc, 0x81, 0x88, 0x02, 0xf2, 0x0b, 0xbc, 0x81, 0xeb, 0x01, 0xf3, - 0x1c, 0xbc, 0x81, 0x68, 0xf4, 0x03, 0xbc, 0x81, 0x53, 0xf5, 0x51, 0xbc, - 0x81, 0x40, 0xf6, 0x09, 0xbc, 0x81, 0x35, 0xf7, 0x38, 0xbc, 0x81, 0x0f, - 0xf8, 0x01, 0xbc, 0x81, 0x06, 0x42, 0x4d, 0x00, 0x50, 0xbc, 0x41, 0xf7, - 0x53, 0xbc, 0x41, 0x42, 0xc7, 0x00, 0x3a, 0xbc, 0x01, 0xe1, 0x5c, 0xbc, - 0x01, 0x42, 0xc3, 0x0a, 0x5f, 0xbc, 0x01, 0xe8, 0x39, 0xbc, 0x01, 0xe9, - 0x5e, 0xbc, 0x01, 0xef, 0x5d, 0xbc, 0xc1, 0x00, 0xf7, 0x60, 0xbc, 0x41, - 0x48, 0x5a, 0xc6, 0x6a, 0xbc, 0x41, 0x42, 0xb3, 0x01, 0x54, 0xbc, 0x01, - 0xe8, 0x57, 0xbc, 0x01, 0xe9, 0x4a, 0xbc, 0x41, 0x80, 0x04, 0xe8, 0x11, - 0xbc, 0x41, 0x43, 0x5c, 0x0c, 0x37, 0xbc, 0x01, 0xf3, 0x36, 0xbc, 0x41, - 0x80, 0x37, 0x46, 0xa0, 0xd9, 0x49, 0xbc, 0x01, 0x05, 0x16, 0xe5, 0x01, - 0xff, 0x42, 0x1a, 0x00, 0x68, 0xbc, 0x01, 0x42, 0x9e, 0x4a, 0x12, 0xbc, - 0x01, 0xa5, 0x12, 0xea, 0x15, 0xbc, 0x01, 0xaf, 0x04, 0xf5, 0x58, 0xbc, - 0x41, 0xee, 0x69, 0xbc, 0x01, 0xf7, 0x42, 0xbc, 0x41, 0xe5, 0x4e, 0xbc, - 0x01, 0xe8, 0x4c, 0xbc, 0x01, 0xee, 0x67, 0xbc, 0x41, 0xea, 0x20, 0xbc, - 0x81, 0x3a, 0xeb, 0x3f, 0xbc, 0x81, 0x2f, 0xed, 0x3c, 0xbc, 0x01, 0xee, - 0x3b, 0xbc, 0x01, 0xf0, 0x34, 0xbc, 0x81, 0x1c, 0xf3, 0x2a, 0xbc, 0x01, - 0xf4, 0x32, 0xbc, 0x81, 0x0d, 0x48, 0xa6, 0x3a, 0x25, 0xbc, 0xc1, 0x00, - 0x46, 0xf4, 0x06, 0x26, 0xbc, 0x41, 0x42, 0xc7, 0x00, 0x33, 0xbc, 0x41, - 0x42, 0xc7, 0x00, 0x35, 0xbc, 0x41, 0x42, 0xc7, 0x00, 0x40, 0xbc, 0x41, - 0x42, 0x99, 0x00, 0x2e, 0xbc, 0x41, 0x42, 0x99, 0x00, 0x10, 0xbc, 0x01, - 0xe8, 0x18, 0xbc, 0x01, 0x08, 0x92, 0xc6, 0x01, 0xff, 0xe9, 0x4d, 0xbc, - 0x01, 0xf5, 0x56, 0xbc, 0x41, 0x42, 0xb3, 0x01, 0x0c, 0xbc, 0x01, 0x07, - 0x0b, 0xce, 0x01, 0xff, 0xed, 0x66, 0xbc, 0x01, 0xee, 0x65, 0xbc, 0x41, - 0xe1, 0x43, 0xbc, 0x01, 0x42, 0x5c, 0x28, 0x59, 0xbc, 0x01, 0xf5, 0x5b, - 0xbc, 0x01, 0xf7, 0x5a, 0xbc, 0x41, 0x80, 0x15, 0x05, 0xeb, 0x4a, 0x01, - 0xff, 0xe1, 0x64, 0xbc, 0x01, 0xe9, 0x63, 0xbc, 0x01, 0xef, 0x62, 0xbc, - 0x01, 0xf5, 0x61, 0xbc, 0x41, 0xed, 0x1e, 0xbc, 0x81, 0x0a, 0xf3, 0x28, - 0xbc, 0x01, 0x48, 0xa6, 0x3a, 0x22, 0xbc, 0x41, 0x42, 0x99, 0x00, 0x2c, - 0xbc, 0x41, 0x80, 0x01, 0xff, 0xee, 0x1d, 0xbc, 0x81, 0x0a, 0xf3, 0x27, - 0xbc, 0x01, 0x48, 0xa6, 0x3a, 0x21, 0xbc, 0x41, 0x42, 0x99, 0x00, 0x2b, - 0xbc, 0x41, 0xe8, 0x17, 0xbc, 0x01, 0x04, 0x63, 0x0e, 0x01, 0xff, 0xe9, - 0x4f, 0xbc, 0x01, 0xf5, 0x55, 0xbc, 0x41, 0x80, 0x04, 0xeb, 0x14, 0xbc, - 0x41, 0xed, 0x0f, 0xbc, 0x01, 0x43, 0x5c, 0x0c, 0x3d, 0xbc, 0x41, 0x80, - 0x01, 0xff, 0xed, 0x1f, 0xbc, 0x81, 0x23, 0xee, 0x30, 0xbc, 0x81, 0x18, - 0xf3, 0x29, 0xbc, 0x81, 0x0d, 0x48, 0xa6, 0x3a, 0x23, 0xbc, 0xc1, 0x00, - 0x52, 0xae, 0x53, 0x24, 0xbc, 0x41, 0x49, 0xa5, 0x3a, 0x2f, 0xbc, 0x41, - 0x42, 0x99, 0x00, 0x31, 0xbc, 0x41, 0x42, 0x99, 0x00, 0x2d, 0xbc, 0x41, - 0xe5, 0x48, 0xbc, 0x41, 0xec, 0x16, 0xbc, 0x41, 0x44, 0x92, 0xe9, 0x3e, - 0xbc, 0x41, 0x42, 0xb3, 0x01, 0x0e, 0xbc, 0x41, 0xe5, 0x4b, 0xbc, 0x01, - 0xf5, 0x52, 0xbc, 0x41, 0x42, 0x99, 0x00, 0x0d, 0xbc, 0x01, 0xe8, 0x13, - 0xbc, 0x41, 0x42, 0x3c, 0x01, 0x45, 0xbc, 0x41, 0x09, 0x18, 0xb4, 0xad, - 0x01, 0x05, 0xf9, 0x0a, 0x6a, 0xac, 0x16, 0x04, 0xcc, 0xb2, 0x06, 0x57, - 0xdf, 0x2f, 0x72, 0xbc, 0x41, 0x51, 0xe5, 0x2f, 0x71, 0xbc, 0x01, 0x4f, - 0xf7, 0x72, 0x74, 0xbc, 0x41, 0x55, 0xcd, 0x39, 0x70, 0xbc, 0x01, 0x03, - 0xd1, 0x00, 0x01, 0xff, 0xa1, 0x39, 0x46, 0xe7, 0x02, 0x95, 0xbc, 0x01, - 0x43, 0xd4, 0x09, 0x94, 0xbc, 0x01, 0x45, 0x8d, 0x22, 0x92, 0xbc, 0x01, - 0xac, 0x19, 0x4b, 0x61, 0xa1, 0x91, 0xbc, 0x01, 0x48, 0x32, 0x00, 0x98, - 0xbc, 0x81, 0x06, 0x44, 0x39, 0x56, 0x97, 0xbc, 0x41, 0x47, 0xef, 0x2f, - 0x73, 0xbc, 0x41, 0x43, 0xc3, 0x07, 0x96, 0xbc, 0x01, 0x49, 0xcf, 0xba, - 0x93, 0xbc, 0x41, 0x44, 0x2a, 0x38, 0x90, 0xbc, 0x01, 0x44, 0xcf, 0x00, - 0x99, 0xbc, 0x41, 0x45, 0x29, 0x38, 0x80, 0xbc, 0x01, 0x46, 0xe7, 0x02, - 0x85, 0xbc, 0x01, 0x43, 0xd4, 0x09, 0x84, 0xbc, 0x01, 0x45, 0x8d, 0x22, - 0x82, 0xbc, 0x01, 0xac, 0x19, 0x4b, 0x61, 0xa1, 0x81, 0xbc, 0x01, 0x48, - 0x32, 0x00, 0x88, 0xbc, 0x81, 0x06, 0x44, 0x39, 0x56, 0x87, 0xbc, 0x41, - 0x47, 0xef, 0x2f, 0x75, 0xbc, 0x41, 0x43, 0xc3, 0x07, 0x86, 0xbc, 0x01, - 0x49, 0xcf, 0xba, 0x83, 0xbc, 0x41, 0x46, 0x72, 0x9d, 0x7a, 0xbc, 0x01, - 0x46, 0xb2, 0xd9, 0x7b, 0xbc, 0x01, 0x54, 0x3f, 0x43, 0x77, 0xbc, 0x01, - 0x46, 0xf0, 0x2f, 0x76, 0xbc, 0x01, 0x02, 0x12, 0x00, 0x01, 0xff, 0x42, - 0x62, 0x01, 0x79, 0xbc, 0x01, 0x45, 0xed, 0xe5, 0x78, 0xbc, 0xc1, 0x00, - 0x45, 0x5c, 0x0e, 0x7c, 0xbc, 0x41, 0xa1, 0x2f, 0x43, 0xed, 0x00, 0x57, - 0xf4, 0x01, 0x4d, 0x03, 0x83, 0xda, 0x26, 0x00, 0xaf, 0x06, 0x52, 0xce, - 0x54, 0x41, 0xf9, 0x41, 0x4c, 0x31, 0x90, 0x2a, 0xf4, 0x01, 0x4a, 0x61, - 0xac, 0x24, 0xf9, 0x01, 0xb0, 0x01, 0xff, 0x49, 0x0e, 0xb2, 0x78, 0xfa, - 0x01, 0x43, 0xc1, 0x05, 0xa7, 0xf4, 0x41, 0x49, 0x74, 0x9f, 0xaf, 0x20, - 0x00, 0x5c, 0x56, 0x17, 0x9b, 0x27, 0x00, 0x43, 0xb7, 0x13, 0x09, 0xf4, - 0xc1, 0x00, 0x45, 0xe0, 0x07, 0x32, 0xf4, 0x41, 0x52, 0x0e, 0x4e, 0xaf, - 0xf6, 0x01, 0x46, 0xac, 0xc2, 0xce, 0xf5, 0x81, 0x9e, 0x12, 0x42, 0x3b, - 0x01, 0xa4, 0xf9, 0x01, 0x07, 0x98, 0x75, 0xc5, 0x11, 0xe7, 0x15, 0xf4, - 0x81, 0xd1, 0x0e, 0xac, 0xc2, 0x0e, 0x0a, 0x8f, 0xab, 0xd5, 0x0a, 0xae, - 0xc6, 0x0a, 0x42, 0x0c, 0x00, 0xaa, 0xf6, 0x01, 0xb4, 0xe4, 0x09, 0xb5, - 0x89, 0x05, 0x4b, 0x8a, 0xa2, 0x4a, 0xf5, 0x01, 0x02, 0xa7, 0x01, 0x01, - 0xff, 0x80, 0xdc, 0x04, 0x8d, 0xf1, 0x03, 0x04, 0xa9, 0x01, 0x01, 0xff, - 0x08, 0x82, 0xbf, 0xcd, 0x03, 0x02, 0x31, 0x01, 0x01, 0xff, 0xa1, 0xcd, - 0x02, 0x06, 0xe1, 0x02, 0xb5, 0x02, 0x50, 0x0a, 0x60, 0x3f, 0xf8, 0x01, - 0xa4, 0xa0, 0x02, 0x51, 0x91, 0x58, 0x37, 0xf8, 0x01, 0xa8, 0xc1, 0x01, - 0x4d, 0xa7, 0x85, 0xca, 0x21, 0x00, 0x4f, 0x72, 0x70, 0xf1, 0x27, 0x00, - 0x46, 0xa0, 0xdc, 0x6f, 0xf6, 0x01, 0xb3, 0xa0, 0x01, 0xb4, 0x13, 0x4b, - 0xfa, 0x0f, 0xe9, 0x21, 0x80, 0x06, 0x4c, 0x11, 0x33, 0xaf, 0x21, 0x40, - 0x5a, 0x24, 0x1e, 0x97, 0xf8, 0x41, 0x02, 0x0d, 0x00, 0x11, 0x02, 0x15, - 0x02, 0x01, 0xff, 0x4d, 0x16, 0x7e, 0xa1, 0x21, 0x00, 0x66, 0xf0, 0x05, - 0xef, 0x2b, 0x40, 0x05, 0x04, 0x02, 0x06, 0x49, 0x78, 0x70, 0x0b, 0x29, - 0x40, 0x4a, 0xe0, 0x01, 0x93, 0xf8, 0x01, 0x08, 0x09, 0x02, 0x01, 0xff, - 0x45, 0xce, 0x00, 0x63, 0x2b, 0x80, 0x12, 0x4c, 0x05, 0x8c, 0x6d, 0x2b, - 0x00, 0x4d, 0xa7, 0x85, 0x87, 0x2b, 0x00, 0x4c, 0x11, 0x33, 0x4d, 0x2b, - 0x40, 0x80, 0x01, 0xff, 0x6a, 0x41, 0x03, 0x83, 0x2b, 0x00, 0x46, 0x82, - 0x14, 0x73, 0x2b, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x4a, 0x17, 0xa6, - 0x2b, 0xf8, 0x01, 0x58, 0x85, 0x27, 0x7d, 0x2b, 0x00, 0x4b, 0xef, 0x66, - 0x2f, 0xf8, 0x01, 0x09, 0x4c, 0xb9, 0x12, 0x4c, 0x3d, 0x90, 0x27, 0xf8, - 0x01, 0x4c, 0xa9, 0x90, 0x23, 0xf8, 0x01, 0x50, 0xea, 0x66, 0x33, 0xf8, - 0x41, 0x49, 0xea, 0x01, 0xa0, 0x2b, 0x00, 0x4a, 0xb3, 0x02, 0xa1, 0x2b, - 0x40, 0x4f, 0x6b, 0x65, 0x53, 0xf8, 0x01, 0x4c, 0x29, 0x92, 0x3b, 0xf8, - 0x41, 0x11, 0x66, 0x05, 0x11, 0x05, 0x02, 0x15, 0x01, 0xff, 0x45, 0xce, - 0x00, 0x47, 0xf8, 0x01, 0x50, 0x0a, 0x60, 0x43, 0xf8, 0x41, 0x04, 0xc3, - 0x00, 0x19, 0x05, 0xc8, 0x00, 0x01, 0xff, 0x80, 0x06, 0x45, 0xa9, 0x01, - 0xc2, 0x21, 0x40, 0x48, 0xfd, 0xb1, 0x5d, 0x29, 0x00, 0x46, 0x82, 0x14, - 0x55, 0x29, 0x40, 0x80, 0x06, 0x45, 0xa9, 0x01, 0xc3, 0x21, 0x40, 0x07, - 0x43, 0x0a, 0x0c, 0x48, 0xfd, 0xb1, 0x61, 0x29, 0x00, 0x46, 0x82, 0x14, - 0x59, 0x29, 0x40, 0x61, 0x7a, 0x0d, 0x65, 0x29, 0x00, 0x5f, 0xb9, 0x11, - 0x6f, 0x29, 0x40, 0x4b, 0x06, 0x8c, 0xe3, 0x21, 0x00, 0x4b, 0x72, 0x8c, - 0xd3, 0x21, 0x40, 0x45, 0xce, 0x00, 0x07, 0x2b, 0x80, 0x06, 0x53, 0x8a, - 0x47, 0x8b, 0x2b, 0x40, 0x47, 0x81, 0x14, 0xb3, 0xf8, 0x41, 0x45, 0xd9, - 0xe5, 0x14, 0x2e, 0x00, 0x44, 0xcf, 0x00, 0x93, 0x21, 0xc0, 0x00, 0x80, - 0x01, 0xff, 0x5a, 0x8c, 0x1e, 0xb7, 0xfb, 0x01, 0x48, 0xfd, 0xb1, 0xa7, - 0x21, 0x00, 0x5a, 0x12, 0x20, 0xf5, 0x21, 0x00, 0x46, 0x82, 0x14, 0x13, - 0x29, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x50, 0x3a, 0x60, 0xb5, 0x21, - 0x00, 0x4d, 0xa0, 0x80, 0xdf, 0x21, 0x00, 0x55, 0xd5, 0x01, 0x17, 0xf8, - 0x01, 0x51, 0x1c, 0x05, 0x08, 0x29, 0x00, 0x58, 0xd5, 0x28, 0x0b, 0xf8, - 0x01, 0x59, 0x5b, 0x24, 0x07, 0xf8, 0x01, 0x4c, 0x21, 0x91, 0x9b, 0xf8, - 0x01, 0x06, 0x0c, 0x07, 0x11, 0x04, 0xfa, 0x0b, 0x01, 0xff, 0x49, 0xea, - 0x01, 0xb2, 0x21, 0x00, 0x4a, 0xb3, 0x02, 0xb3, 0x21, 0x40, 0x55, 0xd5, - 0x01, 0x13, 0xf8, 0x01, 0x52, 0x03, 0x06, 0x03, 0xf8, 0x41, 0x44, 0x5d, - 0x0e, 0x08, 0xf9, 0x81, 0x0d, 0x4c, 0x15, 0x91, 0x09, 0xf9, 0xc1, 0x00, - 0x49, 0xa5, 0x3a, 0x0b, 0xf9, 0x41, 0x49, 0xa5, 0x3a, 0x0a, 0xf9, 0x41, - 0x17, 0xa0, 0x2d, 0x58, 0x09, 0x9c, 0x01, 0x01, 0xff, 0xa1, 0x45, 0x4b, - 0x8f, 0x99, 0x7b, 0xcc, 0x01, 0x44, 0x9a, 0xec, 0xfc, 0xcd, 0x01, 0xb2, - 0x1f, 0xb3, 0x11, 0x0e, 0xfc, 0x7b, 0x01, 0xff, 0x4f, 0xcf, 0x6d, 0xe8, - 0x29, 0x00, 0x50, 0x3a, 0x65, 0xe9, 0x29, 0x40, 0x51, 0x7e, 0x5a, 0x3d, - 0xf5, 0x01, 0x4b, 0xaa, 0x93, 0x04, 0xcc, 0x41, 0x49, 0x40, 0xb3, 0x9a, - 0xcc, 0x01, 0x4b, 0x65, 0x06, 0x3b, 0xf5, 0x01, 0x44, 0x75, 0xaa, 0x68, - 0xcc, 0x01, 0x4a, 0x4d, 0xac, 0x59, 0xcc, 0x41, 0x47, 0x42, 0x33, 0xf8, - 0xcd, 0x01, 0x4a, 0xb3, 0xaf, 0x63, 0xcc, 0x41, 0x4c, 0xbd, 0x8b, 0x77, - 0xcc, 0x01, 0x4a, 0x9b, 0x28, 0x73, 0xcc, 0x41, 0x49, 0xe1, 0x01, 0x04, - 0x23, 0x00, 0x49, 0xa9, 0xb6, 0x7f, 0x29, 0x00, 0x57, 0xc8, 0x2f, 0xf1, - 0x22, 0x00, 0x44, 0x25, 0x38, 0xa4, 0x22, 0xc0, 0x00, 0x52, 0x68, 0x4e, - 0xf1, 0x2a, 0x40, 0x03, 0x3e, 0x01, 0x06, 0x45, 0x90, 0xe3, 0x69, 0xf3, - 0x41, 0x80, 0xba, 0x01, 0x8d, 0x17, 0x02, 0x06, 0x00, 0x01, 0xff, 0x4b, - 0x72, 0x26, 0xa2, 0x26, 0x00, 0x49, 0xbf, 0x20, 0xa3, 0x26, 0x00, 0x46, - 0xeb, 0x07, 0xfc, 0x2b, 0x40, 0x4e, 0xea, 0x75, 0xdf, 0x29, 0x00, 0x05, - 0xc2, 0x07, 0x66, 0x07, 0xab, 0x75, 0x01, 0xff, 0x08, 0xb9, 0x05, 0x36, - 0x07, 0x38, 0xcf, 0x17, 0x4f, 0xbf, 0x6e, 0x40, 0x21, 0x00, 0x06, 0x0c, - 0x07, 0x01, 0xff, 0x45, 0xd2, 0x56, 0x3d, 0x21, 0x00, 0x42, 0xbb, 0x05, - 0x3c, 0x21, 0x40, 0x49, 0xb1, 0xb4, 0x45, 0x21, 0x00, 0x06, 0x0c, 0x07, - 0x01, 0xff, 0xe4, 0x46, 0x21, 0x00, 0xe5, 0x47, 0x21, 0x00, 0xe9, 0x48, - 0x21, 0x00, 0xea, 0x49, 0x21, 0x40, 0xe3, 0x02, 0x21, 0x00, 0x45, 0xd2, - 0x56, 0x3e, 0x21, 0x00, 0xe8, 0x0d, 0x21, 0x00, 0xee, 0x15, 0x21, 0x00, - 0xf0, 0x19, 0x21, 0x80, 0x0c, 0xf1, 0x1a, 0x21, 0x00, 0xf2, 0x1d, 0x21, - 0x00, 0xfa, 0x24, 0x21, 0x40, 0xe9, 0x3f, 0x21, 0x40, 0x0c, 0xe5, 0x27, - 0x21, 0x08, 0x9a, 0x00, 0x01, 0xff, 0x0c, 0xe5, 0x27, 0x0c, 0x58, 0x45, - 0x28, 0xfa, 0x2a, 0x00, 0x55, 0xda, 0x3b, 0xf9, 0x2a, 0x40, 0x4c, 0x87, - 0x00, 0x9c, 0x2a, 0x00, 0x49, 0xec, 0x00, 0x9b, 0x2a, 0x40, 0x4c, 0x87, - 0x00, 0x9a, 0x2a, 0x00, 0x49, 0xec, 0x00, 0x99, 0x2a, 0x40, 0x4c, 0x3d, - 0x8a, 0xdd, 0x02, 0x00, 0xa3, 0xb1, 0x02, 0xa4, 0xa2, 0x02, 0x50, 0xad, - 0x00, 0x3c, 0x20, 0x00, 0xa8, 0x8d, 0x02, 0x04, 0x0a, 0x08, 0xfc, 0x01, - 0xac, 0xc8, 0x01, 0x07, 0xab, 0xd0, 0xb0, 0x01, 0x4e, 0xd0, 0x78, 0x17, - 0x2e, 0x00, 0xb0, 0x8b, 0x01, 0x4d, 0xd6, 0x33, 0x47, 0x20, 0x00, 0x5b, - 0xae, 0x1c, 0x96, 0x29, 0x00, 0xb3, 0x3e, 0xb5, 0x30, 0x09, 0x32, 0x00, - 0x06, 0x4d, 0xb3, 0x88, 0x4c, 0xfe, 0x40, 0x43, 0x16, 0x00, 0xf8, 0x23, - 0x80, 0x06, 0x44, 0xc2, 0x07, 0x16, 0x20, 0x40, 0x80, 0x01, 0xff, 0x07, - 0x3b, 0x01, 0x06, 0x4e, 0x80, 0x39, 0xe3, 0x2a, 0x40, 0x4e, 0x80, 0x39, - 0xe5, 0x2a, 0x00, 0x4f, 0x56, 0x01, 0xab, 0x22, 0x40, 0x44, 0xe2, 0x16, - 0xd3, 0x22, 0x00, 0x46, 0x17, 0xd4, 0xeb, 0x2a, 0x40, 0x4f, 0x82, 0x6f, - 0xfd, 0x2a, 0x00, 0x06, 0x34, 0x24, 0x29, 0xb4, 0x1b, 0xb5, 0x01, 0xff, - 0x44, 0x4c, 0x12, 0xd0, 0x22, 0x00, 0x46, 0x84, 0xc8, 0xbc, 0x2a, 0x00, - 0x46, 0x59, 0x35, 0xd1, 0x22, 0x00, 0x4d, 0xcf, 0x7c, 0x44, 0x2e, 0x40, - 0x4b, 0xae, 0x96, 0x49, 0x2e, 0x00, 0x4d, 0xfa, 0x71, 0xec, 0x2a, 0x40, - 0x4c, 0x5a, 0x0a, 0x4e, 0x2a, 0x00, 0x45, 0xe1, 0x16, 0x4f, 0x2a, 0x40, - 0x43, 0xb8, 0x27, 0xfa, 0x29, 0x00, 0xb2, 0x01, 0xff, 0x46, 0x44, 0xc7, - 0xbb, 0x2a, 0x00, 0x43, 0x29, 0x02, 0x33, 0x20, 0xc0, 0x00, 0x4f, 0xed, - 0x04, 0x1e, 0x30, 0x40, 0x4c, 0x87, 0x00, 0xa2, 0x2a, 0x00, 0x49, 0xec, - 0x00, 0xa1, 0x2a, 0xc0, 0x00, 0x4e, 0xc2, 0x5d, 0xa3, 0x2a, 0x40, 0x5c, - 0x3a, 0x17, 0x95, 0x29, 0x00, 0xaf, 0x01, 0xff, 0x06, 0xa5, 0x21, 0x18, - 0xb7, 0x01, 0xff, 0x45, 0xc1, 0x07, 0x17, 0x20, 0x00, 0x8d, 0x01, 0xff, - 0x50, 0x12, 0x13, 0x1e, 0x20, 0x00, 0x59, 0x09, 0x13, 0x42, 0x2e, 0x40, - 0x43, 0x1a, 0x00, 0x53, 0x2a, 0x00, 0x42, 0x0c, 0x00, 0x54, 0x2a, 0x40, - 0x44, 0xf7, 0x25, 0x2c, 0x22, 0x00, 0x48, 0x5e, 0x0a, 0xd2, 0x22, 0x40, - 0x5d, 0x05, 0x13, 0x1f, 0x20, 0x00, 0x45, 0x1b, 0x62, 0x40, 0x2e, 0x40, - 0x45, 0xf1, 0xd7, 0x21, 0x20, 0x00, 0x48, 0x21, 0x38, 0xea, 0x2a, 0x40, - 0x07, 0x6e, 0x22, 0x0c, 0x4a, 0x6b, 0xac, 0x74, 0x2a, 0x00, 0x49, 0x0b, - 0xbe, 0xbf, 0x27, 0x40, 0x06, 0xc4, 0x06, 0x06, 0x4a, 0x39, 0xac, 0xfe, - 0x24, 0x40, 0x45, 0xc3, 0x0a, 0xfc, 0x24, 0x00, 0xa6, 0x29, 0x44, 0x46, - 0x2a, 0xfd, 0x24, 0x00, 0x43, 0xbf, 0x0a, 0xf5, 0x24, 0x00, 0xb3, 0x0f, - 0xb4, 0x01, 0xff, 0x44, 0x25, 0x01, 0xf7, 0x24, 0x00, 0x42, 0x15, 0x02, - 0xf6, 0x24, 0x40, 0x44, 0x27, 0x1d, 0xfb, 0x24, 0x00, 0x42, 0x60, 0x25, - 0xfa, 0x24, 0x40, 0x43, 0xa7, 0x05, 0xf9, 0x24, 0x00, 0x43, 0xcb, 0x06, - 0xf8, 0x24, 0x40, 0x80, 0x3f, 0x04, 0x77, 0x00, 0x01, 0xff, 0xa3, 0x2c, - 0x45, 0x0c, 0x95, 0x99, 0x29, 0x00, 0x49, 0x0d, 0xb9, 0xe5, 0xfa, 0x01, - 0x46, 0xa4, 0xdb, 0x13, 0x2e, 0x00, 0x54, 0x38, 0x0b, 0x16, 0x2e, 0x00, - 0xb3, 0x06, 0x54, 0x0b, 0x45, 0x08, 0x2e, 0x40, 0x46, 0x6a, 0x30, 0x4a, - 0x2e, 0x00, 0x45, 0xac, 0x05, 0x1a, 0x2b, 0x40, 0x45, 0xe8, 0x02, 0xcc, - 0x25, 0x00, 0x44, 0x47, 0x10, 0x5c, 0x20, 0x40, 0x45, 0x5c, 0x00, 0xd9, - 0x02, 0x00, 0x45, 0xef, 0x1e, 0x38, 0x22, 0x00, 0x48, 0xdc, 0x1c, 0xc5, - 0x22, 0x00, 0x44, 0xb7, 0x27, 0x14, 0x22, 0x40, 0x46, 0x27, 0xba, 0xab, - 0x20, 0x00, 0x43, 0x81, 0x23, 0xcf, 0xfa, 0x41, 0x0a, 0x0b, 0x00, 0xf4, - 0x01, 0x08, 0x32, 0x00, 0x01, 0xff, 0x45, 0xf4, 0x0d, 0x62, 0xf0, 0x01, - 0x02, 0x26, 0x3f, 0x01, 0xff, 0x03, 0x24, 0xf0, 0xc3, 0x01, 0x03, 0x30, - 0xf0, 0xa2, 0x01, 0x03, 0x42, 0xf0, 0x81, 0x01, 0x03, 0x54, 0xf0, 0x61, - 0x03, 0x60, 0xf0, 0x41, 0x03, 0x66, 0xf0, 0x21, 0x03, 0x72, 0xf0, 0x01, - 0xff, 0xd0, 0x8d, 0xf0, 0x01, 0xd1, 0x8e, 0xf0, 0x01, 0xd2, 0x8f, 0xf0, - 0x01, 0xd3, 0x90, 0xf0, 0x01, 0xd4, 0x91, 0xf0, 0x01, 0xd5, 0x92, 0xf0, - 0x01, 0xd6, 0x93, 0xf0, 0x41, 0xd0, 0x86, 0xf0, 0x01, 0xd1, 0x87, 0xf0, - 0x01, 0xd2, 0x88, 0xf0, 0x01, 0xd3, 0x89, 0xf0, 0x01, 0xd4, 0x8a, 0xf0, - 0x01, 0xd5, 0x8b, 0xf0, 0x01, 0xd6, 0x8c, 0xf0, 0x41, 0xd0, 0x7f, 0xf0, - 0x01, 0xd1, 0x80, 0xf0, 0x01, 0xd2, 0x81, 0xf0, 0x01, 0xd3, 0x82, 0xf0, - 0x01, 0xd4, 0x83, 0xf0, 0x01, 0xd5, 0x84, 0xf0, 0x01, 0xd6, 0x85, 0xf0, - 0x41, 0xd0, 0x78, 0xf0, 0x01, 0xd1, 0x79, 0xf0, 0x01, 0xd2, 0x7a, 0xf0, - 0x01, 0xd3, 0x7b, 0xf0, 0x01, 0xd4, 0x7c, 0xf0, 0x01, 0xd5, 0x7d, 0xf0, - 0x01, 0xd6, 0x7e, 0xf0, 0x41, 0xd0, 0x71, 0xf0, 0x01, 0xd1, 0x72, 0xf0, - 0x01, 0xd2, 0x73, 0xf0, 0x01, 0xd3, 0x74, 0xf0, 0x01, 0xd4, 0x75, 0xf0, - 0x01, 0xd5, 0x76, 0xf0, 0x01, 0xd6, 0x77, 0xf0, 0x41, 0xd0, 0x6a, 0xf0, - 0x01, 0xd1, 0x6b, 0xf0, 0x01, 0xd2, 0x6c, 0xf0, 0x01, 0xd3, 0x6d, 0xf0, - 0x01, 0xd4, 0x6e, 0xf0, 0x01, 0xd5, 0x6f, 0xf0, 0x01, 0xd6, 0x70, 0xf0, - 0x41, 0xd0, 0x63, 0xf0, 0x01, 0xd1, 0x64, 0xf0, 0x01, 0xd2, 0x65, 0xf0, - 0x01, 0xd3, 0x66, 0xf0, 0x01, 0xd4, 0x67, 0xf0, 0x01, 0xd5, 0x68, 0xf0, - 0x01, 0xd6, 0x69, 0xf0, 0x41, 0x45, 0xf4, 0x0d, 0x30, 0xf0, 0x01, 0x02, - 0x26, 0x3f, 0x01, 0xff, 0x03, 0x24, 0xf0, 0xc3, 0x01, 0x03, 0x30, 0xf0, - 0xa2, 0x01, 0x03, 0x42, 0xf0, 0x81, 0x01, 0x03, 0x54, 0xf0, 0x61, 0x03, - 0x60, 0xf0, 0x41, 0x03, 0x66, 0xf0, 0x21, 0x03, 0x72, 0xf0, 0x01, 0xff, - 0xd0, 0x5b, 0xf0, 0x01, 0xd1, 0x5c, 0xf0, 0x01, 0xd2, 0x5d, 0xf0, 0x01, - 0xd3, 0x5e, 0xf0, 0x01, 0xd4, 0x5f, 0xf0, 0x01, 0xd5, 0x60, 0xf0, 0x01, - 0xd6, 0x61, 0xf0, 0x41, 0xd0, 0x54, 0xf0, 0x01, 0xd1, 0x55, 0xf0, 0x01, - 0xd2, 0x56, 0xf0, 0x01, 0xd3, 0x57, 0xf0, 0x01, 0xd4, 0x58, 0xf0, 0x01, - 0xd5, 0x59, 0xf0, 0x01, 0xd6, 0x5a, 0xf0, 0x41, 0xd0, 0x4d, 0xf0, 0x01, - 0xd1, 0x4e, 0xf0, 0x01, 0xd2, 0x4f, 0xf0, 0x01, 0xd3, 0x50, 0xf0, 0x01, - 0xd4, 0x51, 0xf0, 0x01, 0xd5, 0x52, 0xf0, 0x01, 0xd6, 0x53, 0xf0, 0x41, - 0xd0, 0x46, 0xf0, 0x01, 0xd1, 0x47, 0xf0, 0x01, 0xd2, 0x48, 0xf0, 0x01, - 0xd3, 0x49, 0xf0, 0x01, 0xd4, 0x4a, 0xf0, 0x01, 0xd5, 0x4b, 0xf0, 0x01, - 0xd6, 0x4c, 0xf0, 0x41, 0xd0, 0x3f, 0xf0, 0x01, 0xd1, 0x40, 0xf0, 0x01, - 0xd2, 0x41, 0xf0, 0x01, 0xd3, 0x42, 0xf0, 0x01, 0xd4, 0x43, 0xf0, 0x01, - 0xd5, 0x44, 0xf0, 0x01, 0xd6, 0x45, 0xf0, 0x41, 0xd0, 0x38, 0xf0, 0x01, - 0xd1, 0x39, 0xf0, 0x01, 0xd2, 0x3a, 0xf0, 0x01, 0xd3, 0x3b, 0xf0, 0x01, - 0xd4, 0x3c, 0xf0, 0x01, 0xd5, 0x3d, 0xf0, 0x01, 0xd6, 0x3e, 0xf0, 0x41, - 0xd0, 0x31, 0xf0, 0x01, 0xd1, 0x32, 0xf0, 0x01, 0xd2, 0x33, 0xf0, 0x01, - 0xd3, 0x34, 0xf0, 0x01, 0xd4, 0x35, 0xf0, 0x01, 0xd5, 0x36, 0xf0, 0x01, - 0xd6, 0x37, 0xf0, 0x41, 0x48, 0xde, 0x0d, 0x24, 0x00, 0x00, 0x44, 0xca, - 0xee, 0x2c, 0xf4, 0x41, 0x45, 0xe0, 0x07, 0x36, 0xf4, 0x01, 0x03, 0x71, - 0x00, 0x01, 0xff, 0x51, 0x93, 0x56, 0x3b, 0x18, 0x01, 0x07, 0xc1, 0x05, - 0x59, 0x05, 0x2f, 0x03, 0x38, 0x0b, 0xd1, 0x75, 0x01, 0xff, 0xa1, 0x25, - 0xe5, 0x33, 0x18, 0x01, 0xe9, 0x2d, 0x18, 0x81, 0x18, 0xef, 0x35, 0x18, - 0x01, 0xf5, 0x2f, 0x18, 0x81, 0x0b, 0x49, 0x9b, 0xbe, 0x31, 0x18, 0xc1, - 0x00, 0xf2, 0x32, 0x18, 0x41, 0xf5, 0x30, 0x18, 0x41, 0xe9, 0x2e, 0x18, - 0x41, 0xe1, 0x2c, 0x18, 0x01, 0xe9, 0x34, 0x18, 0x01, 0xf5, 0x36, 0x18, - 0x41, 0x48, 0xd0, 0x15, 0x37, 0x18, 0x01, 0x45, 0x5a, 0x3e, 0x3a, 0x18, - 0x01, 0x02, 0x02, 0x00, 0x01, 0xff, 0x44, 0x5d, 0x23, 0x39, 0x18, 0x01, - 0x45, 0xa3, 0x4a, 0x38, 0x18, 0x41, 0xe1, 0x00, 0x18, 0x81, 0xee, 0x01, - 0xa2, 0xe1, 0x01, 0xa3, 0xd4, 0x01, 0xa4, 0xbb, 0x01, 0xe5, 0x06, 0x18, - 0x01, 0xa7, 0xaa, 0x01, 0x42, 0x22, 0x00, 0x2a, 0x18, 0x01, 0xe9, 0x02, - 0x18, 0x81, 0x9a, 0x01, 0xaa, 0x8d, 0x01, 0xab, 0x80, 0x01, 0x42, 0x74, - 0x00, 0x25, 0x18, 0x01, 0x42, 0x6c, 0x00, 0x22, 0x18, 0x01, 0xae, 0x5c, - 0xef, 0x08, 0x18, 0x01, 0xb0, 0x4c, 0xb2, 0x40, 0xb3, 0x2e, 0xb4, 0x15, - 0xf5, 0x04, 0x18, 0x81, 0x0c, 0x42, 0xa6, 0x0a, 0x26, 0x18, 0x01, 0x42, - 0x34, 0x22, 0x23, 0x18, 0x41, 0xf5, 0x05, 0x18, 0x41, 0xe1, 0x19, 0x18, - 0x01, 0x42, 0x22, 0x00, 0x1a, 0x18, 0x01, 0xb4, 0x01, 0xff, 0xe1, 0x14, - 0x18, 0x01, 0x42, 0x22, 0x00, 0x15, 0x18, 0x41, 0xe1, 0x29, 0x18, 0x01, - 0x42, 0x22, 0x00, 0x27, 0x18, 0x01, 0x42, 0x15, 0x06, 0x28, 0x18, 0x41, - 0xe1, 0x24, 0x18, 0x01, 0x42, 0x71, 0x00, 0x2b, 0x18, 0x41, 0xe1, 0x1e, - 0x18, 0x01, 0x42, 0x22, 0x00, 0x1f, 0x18, 0x41, 0xe1, 0x1d, 0x18, 0x01, - 0x42, 0x24, 0x02, 0x0e, 0x18, 0x01, 0x42, 0xff, 0x04, 0x18, 0x18, 0x01, - 0x42, 0x34, 0x22, 0x13, 0x18, 0x41, 0xe1, 0x0a, 0x18, 0x01, 0x42, 0x22, - 0x00, 0x0b, 0x18, 0x41, 0xe1, 0x11, 0x18, 0x01, 0x42, 0x22, 0x00, 0x12, - 0x18, 0x41, 0xe9, 0x03, 0x18, 0x41, 0xe1, 0x0c, 0x18, 0x01, 0x42, 0x22, - 0x00, 0x0d, 0x18, 0x41, 0xe1, 0x1b, 0x18, 0x01, 0xa4, 0x06, 0x42, 0x22, - 0x00, 0x1c, 0x18, 0x41, 0xe1, 0x16, 0x18, 0x01, 0x42, 0x22, 0x00, 0x17, - 0x18, 0x41, 0xe1, 0x0f, 0x18, 0x01, 0x42, 0x22, 0x00, 0x10, 0x18, 0x41, - 0xe1, 0x20, 0x18, 0x01, 0x42, 0x22, 0x00, 0x21, 0x18, 0x41, 0xe1, 0x01, - 0x18, 0x01, 0xe9, 0x07, 0x18, 0x01, 0xf5, 0x09, 0x18, 0x41, 0x0b, 0x3a, - 0x98, 0x37, 0x46, 0x00, 0x00, 0x24, 0x22, 0x80, 0x2a, 0x45, 0x63, 0xe3, - 0xae, 0x22, 0x00, 0x02, 0x90, 0x0c, 0x0d, 0x47, 0x82, 0xc8, 0x81, 0x22, - 0xc0, 0x00, 0x49, 0x51, 0x28, 0xe1, 0x22, 0x40, 0x45, 0x87, 0x35, 0x80, - 0x22, 0x80, 0x06, 0x43, 0x5e, 0x00, 0xac, 0x22, 0x40, 0x49, 0x51, 0x28, - 0xe0, 0x22, 0x40, 0x5d, 0x88, 0x14, 0xee, 0x2a, 0x40, 0x46, 0x89, 0x05, - 0x0c, 0x22, 0x00, 0x4f, 0xa0, 0x52, 0xeb, 0x22, 0xc0, 0x00, 0x49, 0x51, - 0x28, 0xed, 0x22, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x47, 0x3a, 0x89, - 0xbb, 0xf5, 0x01, 0x44, 0x96, 0x2f, 0xb9, 0xf5, 0xc1, 0x00, 0x4c, 0x35, - 0x89, 0xba, 0xf5, 0x41, 0xa1, 0xa4, 0x09, 0xa5, 0xff, 0x08, 0x50, 0xba, - 0x61, 0x4f, 0x22, 0x00, 0xa7, 0xc1, 0x06, 0x4e, 0x7c, 0x78, 0x31, 0x23, - 0x00, 0x06, 0x4a, 0xdb, 0xc8, 0x04, 0x05, 0x3a, 0x0d, 0xb7, 0x04, 0xb3, - 0x8f, 0x04, 0x48, 0x1a, 0xc9, 0x03, 0x30, 0x00, 0xb6, 0x17, 0x47, 0xe8, - 0xd4, 0x94, 0xfa, 0x01, 0x04, 0x1a, 0xf0, 0x01, 0xff, 0x44, 0xe1, 0x07, - 0x35, 0xf6, 0x01, 0x46, 0xeb, 0x07, 0xab, 0xf4, 0x41, 0x09, 0x46, 0xb6, - 0x2d, 0xa9, 0x06, 0x4b, 0xb7, 0x9e, 0xae, 0x26, 0x40, 0x43, 0x55, 0x27, - 0x23, 0x22, 0x00, 0x47, 0xb2, 0xd0, 0x3f, 0xf9, 0x01, 0x05, 0xa5, 0x2f, - 0x01, 0xff, 0xb3, 0x06, 0x45, 0x28, 0x02, 0xc7, 0x22, 0x40, 0x43, 0x30, - 0x03, 0xf7, 0x00, 0x00, 0x44, 0xfa, 0x0d, 0x15, 0x22, 0x40, 0xa4, 0xf0, - 0x02, 0x50, 0x3a, 0x61, 0x46, 0x19, 0x01, 0x4a, 0x1e, 0x9a, 0x45, 0x19, - 0x01, 0x4a, 0xaf, 0xa9, 0x41, 0x19, 0x01, 0x07, 0xc1, 0x05, 0x64, 0x07, - 0x7c, 0x32, 0x54, 0x53, 0xe1, 0x4a, 0x3f, 0x19, 0x01, 0x05, 0x2f, 0x03, - 0x32, 0xb6, 0x01, 0xff, 0x45, 0x5c, 0x23, 0x3e, 0x19, 0x01, 0x0a, 0xd2, - 0x75, 0x01, 0xff, 0xa1, 0x1a, 0xe5, 0x35, 0x19, 0x01, 0xe9, 0x31, 0x19, - 0x81, 0x0d, 0xef, 0x38, 0x19, 0x01, 0xf5, 0x33, 0x19, 0xc1, 0x00, 0xf5, - 0x34, 0x19, 0x41, 0xe9, 0x32, 0x19, 0x41, 0xe1, 0x30, 0x19, 0x01, 0xe9, - 0x37, 0x19, 0x41, 0x48, 0xd0, 0x15, 0x3b, 0x19, 0x01, 0x4b, 0x4f, 0x23, - 0x3c, 0x19, 0x01, 0x47, 0x97, 0xce, 0x3d, 0x19, 0x01, 0x45, 0x5a, 0x3e, - 0x43, 0x19, 0x41, 0x42, 0x71, 0x00, 0x42, 0x19, 0x01, 0x42, 0x34, 0x22, - 0x40, 0x19, 0x41, 0xe1, 0x00, 0x19, 0x81, 0xec, 0x01, 0xa2, 0xdf, 0x01, - 0xa3, 0xd2, 0x01, 0xa4, 0xb9, 0x01, 0xe5, 0x06, 0x19, 0x01, 0xa7, 0xa8, - 0x01, 0x42, 0x22, 0x00, 0x2d, 0x19, 0x01, 0xe9, 0x02, 0x19, 0x81, 0x98, - 0x01, 0x42, 0xbd, 0x26, 0x13, 0x19, 0x01, 0xab, 0x85, 0x01, 0xac, 0x79, - 0x42, 0x6c, 0x00, 0x24, 0x19, 0x01, 0xae, 0x5b, 0xef, 0x09, 0x19, 0x01, - 0xb0, 0x4b, 0x42, 0x71, 0x00, 0x27, 0x19, 0x01, 0xb3, 0x33, 0xb4, 0x21, - 0xf5, 0x04, 0x19, 0x81, 0x18, 0x42, 0xa6, 0x0a, 0x29, 0x19, 0x01, 0xb9, - 0x06, 0x42, 0x59, 0x00, 0x2f, 0x19, 0x41, 0xe1, 0x25, 0x19, 0x01, 0x42, - 0x34, 0x22, 0x26, 0x19, 0x41, 0xf5, 0x05, 0x19, 0x41, 0xe1, 0x1b, 0x19, - 0x01, 0x42, 0x22, 0x00, 0x1c, 0x19, 0x01, 0x42, 0x12, 0x00, 0x16, 0x19, - 0x41, 0xe1, 0x2c, 0x19, 0x01, 0x42, 0x22, 0x00, 0x2a, 0x19, 0x01, 0x42, - 0x15, 0x06, 0x2b, 0x19, 0x41, 0xe1, 0x20, 0x19, 0x01, 0x42, 0x22, 0x00, - 0x21, 0x19, 0x41, 0xe1, 0x1f, 0x19, 0x01, 0x42, 0x24, 0x02, 0x10, 0x19, - 0x01, 0x42, 0xff, 0x04, 0x1a, 0x19, 0x01, 0x42, 0x34, 0x22, 0x15, 0x19, - 0x41, 0xe1, 0x28, 0x19, 0x01, 0x42, 0x74, 0x00, 0x2e, 0x19, 0x41, 0xe1, - 0x0c, 0x19, 0x01, 0x42, 0x22, 0x00, 0x0d, 0x19, 0x41, 0xe9, 0x03, 0x19, - 0x41, 0xe1, 0x0e, 0x19, 0x01, 0x42, 0x22, 0x00, 0x0f, 0x19, 0x41, 0xe1, - 0x1d, 0x19, 0x01, 0xa4, 0x06, 0x42, 0x22, 0x00, 0x1e, 0x19, 0x41, 0xe1, - 0x18, 0x19, 0x01, 0x42, 0x22, 0x00, 0x19, 0x19, 0x41, 0xe1, 0x11, 0x19, - 0x01, 0x42, 0x22, 0x00, 0x12, 0x19, 0x41, 0xe1, 0x22, 0x19, 0x01, 0x42, - 0x22, 0x00, 0x23, 0x19, 0x41, 0xe1, 0x01, 0x19, 0x41, 0x05, 0xc5, 0x06, - 0x06, 0x4b, 0xd8, 0x9e, 0x44, 0x19, 0x41, 0x45, 0xc3, 0x0a, 0x58, 0x19, - 0x01, 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0x59, 0x19, 0x01, 0x43, 0xbf, 0x0a, - 0x51, 0x19, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xa1, 0x1d, 0x50, 0x19, - 0x41, 0x44, 0x25, 0x01, 0x53, 0x19, 0x01, 0x42, 0x15, 0x02, 0x52, 0x19, - 0x41, 0x44, 0x27, 0x1d, 0x57, 0x19, 0x01, 0x42, 0x60, 0x25, 0x56, 0x19, - 0x41, 0x43, 0xa7, 0x05, 0x55, 0x19, 0x01, 0x43, 0xcb, 0x06, 0x54, 0x19, - 0x41, 0xa1, 0x0c, 0x5b, 0x41, 0x1a, 0x82, 0x23, 0x00, 0x4b, 0x76, 0x9a, - 0x78, 0xf9, 0x41, 0x48, 0xaa, 0xc1, 0xcd, 0x26, 0x00, 0x09, 0xb9, 0xbb, - 0x01, 0xff, 0x51, 0x70, 0x57, 0x25, 0xf6, 0x01, 0x44, 0xe1, 0x07, 0x1e, - 0xf6, 0x41, 0x57, 0x44, 0x2d, 0x93, 0x23, 0x00, 0x43, 0xae, 0x02, 0xaf, - 0xf3, 0x41, 0x13, 0x77, 0x47, 0x9d, 0x01, 0x11, 0x39, 0x5b, 0x01, 0xff, - 0x06, 0xc4, 0x06, 0x57, 0x4a, 0x39, 0xac, 0x7f, 0x27, 0x00, 0x0b, 0x7f, - 0x47, 0x01, 0xff, 0x06, 0xc4, 0x06, 0x06, 0x4a, 0x39, 0xac, 0x93, 0x27, - 0x40, 0x45, 0xc3, 0x0a, 0x91, 0x27, 0x00, 0xa6, 0x2e, 0x44, 0x46, 0x2a, - 0x92, 0x27, 0x00, 0x43, 0xbf, 0x0a, 0x8a, 0x27, 0x00, 0xb3, 0x14, 0xb4, - 0x06, 0x44, 0xa1, 0x1d, 0x0c, 0xf1, 0x41, 0x44, 0x25, 0x01, 0x8c, 0x27, - 0x00, 0x42, 0x15, 0x02, 0x8b, 0x27, 0x40, 0x44, 0x27, 0x1d, 0x90, 0x27, - 0x00, 0x42, 0x60, 0x25, 0x8f, 0x27, 0x40, 0x43, 0xa7, 0x05, 0x8e, 0x27, - 0x00, 0x43, 0xcb, 0x06, 0x8d, 0x27, 0x40, 0x45, 0xc3, 0x0a, 0x7d, 0x27, - 0x00, 0xa6, 0x29, 0x44, 0x46, 0x2a, 0x7e, 0x27, 0x00, 0x43, 0xbf, 0x0a, - 0x76, 0x27, 0x00, 0xb3, 0x0f, 0xb4, 0x01, 0xff, 0x44, 0x25, 0x01, 0x78, - 0x27, 0x00, 0x42, 0x15, 0x02, 0x77, 0x27, 0x40, 0x44, 0x27, 0x1d, 0x7c, - 0x27, 0x00, 0x42, 0x60, 0x25, 0x7b, 0x27, 0x40, 0x43, 0xa7, 0x05, 0x7a, - 0x27, 0x00, 0x43, 0xcb, 0x06, 0x79, 0x27, 0x40, 0x06, 0xc4, 0x06, 0x06, - 0x4a, 0x39, 0xac, 0x89, 0x27, 0x40, 0x45, 0xc3, 0x0a, 0x87, 0x27, 0x00, - 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0x88, 0x27, 0x00, 0x43, 0xbf, 0x0a, 0x80, - 0x27, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xa1, 0x1d, 0x0b, 0xf1, 0x41, - 0x44, 0x25, 0x01, 0x82, 0x27, 0x00, 0x42, 0x15, 0x02, 0x81, 0x27, 0x40, - 0x44, 0x27, 0x1d, 0x86, 0x27, 0x00, 0x42, 0x60, 0x25, 0x85, 0x27, 0x40, - 0x43, 0xa7, 0x05, 0x84, 0x27, 0x00, 0x43, 0xcb, 0x06, 0x83, 0x27, 0x40, - 0x03, 0xc7, 0x06, 0x4c, 0x08, 0x25, 0x94, 0x01, 0xff, 0x45, 0xb8, 0x70, - 0x05, 0xd3, 0x81, 0x2f, 0x09, 0xdf, 0xb6, 0x1f, 0xa8, 0x11, 0x08, 0x12, - 0xc5, 0x01, 0xff, 0x43, 0x1c, 0x01, 0x8e, 0x26, 0x00, 0x42, 0x9e, 0x01, - 0x8d, 0x26, 0x40, 0x4d, 0xba, 0x80, 0x01, 0xd3, 0x01, 0x4a, 0x53, 0xb0, - 0x02, 0xd3, 0x41, 0x43, 0x1c, 0x01, 0x8c, 0x26, 0x00, 0x42, 0x9e, 0x01, - 0x8f, 0x26, 0x40, 0x04, 0xc8, 0x8c, 0x01, 0xff, 0x45, 0x29, 0x7a, 0x03, - 0xd3, 0x01, 0x44, 0x11, 0xa2, 0x04, 0xd3, 0x41, 0x45, 0xc3, 0x0a, 0x38, - 0x00, 0x80, 0xce, 0x01, 0xa6, 0x9f, 0x01, 0x44, 0x46, 0x2a, 0x39, 0x00, - 0x80, 0x88, 0x01, 0x43, 0xbf, 0x0a, 0x31, 0x00, 0x80, 0x72, 0xb3, 0x44, - 0xb4, 0x16, 0x44, 0xa1, 0x1d, 0x30, 0x00, 0xc0, 0x00, 0x80, 0x01, 0xff, - 0x45, 0xe8, 0x04, 0x01, 0xf1, 0x01, 0x49, 0x15, 0x16, 0x00, 0xf1, 0x41, - 0x44, 0x25, 0x01, 0x33, 0x00, 0x80, 0x16, 0x42, 0x15, 0x02, 0x32, 0x00, - 0xc0, 0x00, 0x80, 0x01, 0xff, 0x45, 0xe8, 0x04, 0x03, 0xf1, 0x01, 0x49, - 0x15, 0x16, 0x89, 0x24, 0x40, 0x80, 0x01, 0xff, 0x45, 0xe8, 0x04, 0x04, - 0xf1, 0x01, 0x49, 0x15, 0x16, 0x8a, 0x24, 0x40, 0x44, 0x27, 0x1d, 0x37, - 0x00, 0x80, 0x16, 0x42, 0x60, 0x25, 0x36, 0x00, 0xc0, 0x00, 0x80, 0x01, - 0xff, 0x45, 0xe8, 0x04, 0x07, 0xf1, 0x01, 0x49, 0x15, 0x16, 0x8d, 0x24, - 0x40, 0x80, 0x01, 0xff, 0x45, 0xe8, 0x04, 0x08, 0xf1, 0x01, 0x49, 0x15, - 0x16, 0x8e, 0x24, 0x40, 0x80, 0x01, 0xff, 0x45, 0xe8, 0x04, 0x02, 0xf1, - 0x01, 0x49, 0x15, 0x16, 0x88, 0x24, 0x40, 0x80, 0x01, 0xff, 0x45, 0xe8, - 0x04, 0x0a, 0xf1, 0x01, 0x49, 0x15, 0x16, 0x90, 0x24, 0x40, 0x43, 0xa7, - 0x05, 0x35, 0x00, 0x80, 0x16, 0x43, 0xcb, 0x06, 0x34, 0x00, 0xc0, 0x00, - 0x80, 0x01, 0xff, 0x45, 0xe8, 0x04, 0x05, 0xf1, 0x01, 0x49, 0x15, 0x16, - 0x8b, 0x24, 0x40, 0x80, 0x01, 0xff, 0x45, 0xe8, 0x04, 0x06, 0xf1, 0x01, - 0x49, 0x15, 0x16, 0x8c, 0x24, 0x40, 0x80, 0x01, 0xff, 0x45, 0xe8, 0x04, - 0x09, 0xf1, 0x01, 0x49, 0x15, 0x16, 0x8f, 0x24, 0x40, 0x06, 0x38, 0xd5, - 0x06, 0x4e, 0x90, 0x7a, 0xf2, 0xf6, 0x41, 0xd1, 0x80, 0x26, 0x00, 0xd2, - 0x81, 0x26, 0x00, 0xd3, 0x82, 0x26, 0x00, 0xd4, 0x83, 0x26, 0x00, 0xd5, - 0x84, 0x26, 0x00, 0xd6, 0x85, 0x26, 0x40, 0x46, 0x32, 0x23, 0xa8, 0x00, - 0x00, 0x55, 0x01, 0x21, 0x43, 0xcc, 0x01, 0xad, 0x01, 0xff, 0x49, 0x58, - 0xb6, 0x00, 0x23, 0x00, 0x04, 0x19, 0x56, 0x01, 0xff, 0x48, 0xdc, 0x1c, - 0xc4, 0x22, 0x00, 0x57, 0x3b, 0x30, 0xa0, 0xf4, 0x01, 0x46, 0x5a, 0xdd, - 0x9c, 0xf7, 0x01, 0x05, 0x51, 0x00, 0x01, 0xff, 0x51, 0x3d, 0x57, 0x19, - 0x2b, 0x00, 0x4f, 0xcf, 0x6d, 0x16, 0x2b, 0x00, 0x50, 0x3a, 0x65, 0x17, - 0x2b, 0x00, 0x4e, 0xd2, 0x7b, 0x18, 0x2b, 0x40, 0x49, 0x5b, 0xb3, 0xcf, - 0xf9, 0x01, 0xa3, 0x9f, 0x0d, 0x42, 0x33, 0x00, 0x8c, 0xf9, 0x01, 0x05, - 0xb5, 0xa8, 0x82, 0x0d, 0xac, 0xed, 0x0c, 0xae, 0xd8, 0x0b, 0x4e, 0xa2, - 0x79, 0xec, 0xf3, 0x01, 0x55, 0xd6, 0x3c, 0xda, 0xf3, 0x01, 0xb3, 0xe5, - 0x07, 0xb6, 0x01, 0xff, 0x08, 0x4b, 0xbe, 0x26, 0x0c, 0x80, 0x88, 0x01, - 0xff, 0x44, 0xca, 0x06, 0x14, 0x00, 0x00, 0x43, 0xbf, 0x0a, 0x11, 0x00, - 0x00, 0x46, 0x1a, 0x66, 0x90, 0x00, 0x00, 0xb4, 0x01, 0xff, 0x44, 0x25, - 0x01, 0x13, 0x00, 0x00, 0x42, 0x15, 0x02, 0x12, 0x00, 0x40, 0xa1, 0xa9, - 0x07, 0x45, 0xf7, 0x7b, 0xfa, 0xa8, 0x00, 0xa4, 0xce, 0x06, 0xa7, 0xbf, - 0x06, 0x04, 0xe6, 0x01, 0xa7, 0x06, 0x47, 0x4d, 0xcf, 0xfd, 0xa8, 0x00, - 0x07, 0xc1, 0x05, 0xc9, 0x02, 0x42, 0xe9, 0x04, 0x50, 0x09, 0x00, 0xb3, - 0x84, 0x01, 0x0b, 0xd1, 0x75, 0x01, 0xff, 0xa1, 0x69, 0x07, 0xba, 0x5f, - 0x57, 0xe5, 0x47, 0x09, 0x00, 0xe9, 0x3f, 0x09, 0x80, 0x4a, 0xef, 0x4b, - 0x09, 0x80, 0x3b, 0x4f, 0x54, 0x70, 0x4e, 0x09, 0x00, 0x06, 0x61, 0x36, - 0x29, 0xf5, 0x41, 0x09, 0x80, 0x17, 0x08, 0x9b, 0xbe, 0x01, 0xff, 0xec, - 0x62, 0x09, 0x80, 0x09, 0xf2, 0x43, 0x09, 0xc0, 0x00, 0xf2, 0x44, 0x09, - 0x40, 0xec, 0x63, 0x09, 0x40, 0xe5, 0x56, 0x09, 0x00, 0xf5, 0x42, 0x09, - 0xc0, 0x00, 0xe5, 0x57, 0x09, 0x40, 0xe5, 0x46, 0x09, 0x00, 0xef, 0x4a, - 0x09, 0x40, 0xe5, 0x3a, 0x09, 0x00, 0x42, 0x17, 0x50, 0x3b, 0x09, 0x40, - 0xe9, 0x40, 0x09, 0x40, 0xe5, 0x45, 0x09, 0x00, 0x46, 0xde, 0xda, 0x55, - 0x09, 0x00, 0xef, 0x49, 0x09, 0x40, 0xe1, 0x3e, 0x09, 0x00, 0xe9, 0x48, - 0x09, 0x00, 0xf5, 0x4c, 0x09, 0x00, 0xf7, 0x4f, 0x09, 0x00, 0xf9, 0xff, - 0xa8, 0x40, 0x04, 0x30, 0x03, 0x11, 0x0b, 0x82, 0xa1, 0x01, 0xff, 0x48, - 0x68, 0x7b, 0x52, 0x09, 0x00, 0x46, 0x6a, 0x7b, 0x51, 0x09, 0x40, 0xa1, - 0x98, 0x01, 0x45, 0x50, 0x2a, 0x02, 0x1b, 0x81, 0x8a, 0x01, 0x4b, 0x4f, - 0x23, 0x01, 0x09, 0x80, 0x66, 0x59, 0x48, 0x23, 0xf4, 0xa8, 0x00, 0x4e, - 0x3e, 0x76, 0x04, 0x1b, 0x81, 0x53, 0x50, 0xea, 0x61, 0x71, 0x09, 0x00, - 0x54, 0x77, 0x42, 0x00, 0x09, 0x00, 0x45, 0x93, 0xe5, 0x09, 0x1b, 0x01, - 0x45, 0x5a, 0x3e, 0x3c, 0x09, 0x00, 0x48, 0xce, 0x7a, 0xf8, 0xa8, 0x00, - 0x58, 0x3d, 0x2a, 0x08, 0x1b, 0x01, 0xb3, 0x21, 0x02, 0x02, 0x00, 0x11, - 0x08, 0xf3, 0x30, 0x01, 0xff, 0x4f, 0x77, 0x6b, 0x06, 0x1b, 0x01, 0x4f, - 0x46, 0x2a, 0x07, 0x1b, 0x41, 0x44, 0x5d, 0x23, 0x4d, 0x09, 0x00, 0x45, - 0xa3, 0x4a, 0x03, 0x09, 0x40, 0x46, 0x0d, 0xd3, 0xfc, 0xa8, 0x00, 0x52, - 0x30, 0x53, 0xf2, 0xa8, 0x40, 0x4a, 0x1f, 0x24, 0x05, 0x1b, 0x41, 0x80, - 0x01, 0xff, 0x48, 0xf1, 0x86, 0xf7, 0xa8, 0x00, 0xb4, 0x06, 0x46, 0x5b, - 0x23, 0xf3, 0xa8, 0x40, 0x44, 0x25, 0x01, 0xf6, 0xa8, 0x00, 0x42, 0x15, - 0x02, 0xf5, 0xa8, 0x40, 0x4a, 0x1f, 0x24, 0x03, 0x1b, 0x41, 0x47, 0xd1, - 0x15, 0x02, 0x09, 0x00, 0x47, 0xf2, 0x86, 0x3d, 0x09, 0x40, 0xe1, 0x05, - 0x09, 0x80, 0xb9, 0x03, 0xa2, 0xa6, 0x03, 0xa3, 0x87, 0x03, 0xa4, 0xe2, - 0x02, 0xe5, 0x0f, 0x09, 0x00, 0x42, 0xe1, 0x07, 0x5e, 0x09, 0x00, 0xa7, - 0xb9, 0x02, 0xa8, 0xac, 0x02, 0xe9, 0x07, 0x09, 0x80, 0xa2, 0x02, 0xaa, - 0x8f, 0x02, 0xab, 0xfb, 0x01, 0xac, 0xe7, 0x01, 0x42, 0x6c, 0x00, 0x2e, - 0x09, 0x80, 0xd9, 0x01, 0xae, 0xba, 0x01, 0xef, 0x13, 0x09, 0x80, 0xaa, - 0x01, 0xb0, 0x9d, 0x01, 0x42, 0xf4, 0x13, 0x58, 0x09, 0x00, 0xb2, 0x84, - 0x01, 0xb3, 0x61, 0xb4, 0x48, 0xf5, 0x09, 0x09, 0x80, 0x36, 0xb6, 0x19, - 0xb9, 0x0d, 0xba, 0x01, 0xff, 0xe1, 0x5b, 0x09, 0x00, 0x42, 0x22, 0x00, - 0x79, 0x09, 0x40, 0xe1, 0x2f, 0x09, 0x00, 0x42, 0x34, 0x22, 0x5f, 0x09, - 0x40, 0xe1, 0x35, 0x09, 0x00, 0x07, 0x9c, 0xbe, 0x01, 0xff, 0xec, 0x0c, - 0x09, 0x80, 0x09, 0xf2, 0x0b, 0x09, 0xc0, 0x00, 0xf2, 0x60, 0x09, 0x40, - 0xec, 0x61, 0x09, 0x40, 0xe5, 0x76, 0x09, 0x00, 0xf5, 0x0a, 0x09, 0xc0, - 0x00, 0xe5, 0x77, 0x09, 0x40, 0xe1, 0x24, 0x09, 0x00, 0x42, 0x22, 0x00, - 0x25, 0x09, 0x00, 0xb4, 0x01, 0xff, 0xe1, 0x1f, 0x09, 0x00, 0x42, 0x22, - 0x00, 0x20, 0x09, 0x40, 0xe1, 0x38, 0x09, 0x00, 0xa8, 0x06, 0x42, 0x15, - 0x06, 0x37, 0x09, 0x40, 0xe1, 0x36, 0x09, 0x00, 0x04, 0x76, 0x33, 0x01, - 0xff, 0xe1, 0x04, 0x09, 0x00, 0xe5, 0x0e, 0x09, 0x00, 0xef, 0x12, 0x09, - 0x40, 0xe1, 0x30, 0x09, 0x00, 0x42, 0x22, 0x00, 0x5d, 0x09, 0x00, 0x42, - 0x71, 0x00, 0x31, 0x09, 0x40, 0xe1, 0x2a, 0x09, 0x00, 0x42, 0x22, 0x00, - 0x2b, 0x09, 0x40, 0xe5, 0x73, 0x09, 0x00, 0x42, 0x17, 0x50, 0x74, 0x09, - 0x40, 0xe1, 0x28, 0x09, 0x00, 0x42, 0x24, 0x02, 0x19, 0x09, 0x00, 0xae, - 0x06, 0x42, 0x34, 0x22, 0x1e, 0x09, 0x40, 0xe1, 0x23, 0x09, 0x00, 0x42, - 0xff, 0x04, 0x29, 0x09, 0x40, 0x49, 0x9a, 0xbc, 0x78, 0x09, 0x40, 0xe1, - 0x32, 0x09, 0x00, 0xac, 0x01, 0xff, 0xe1, 0x33, 0x09, 0x00, 0x42, 0x74, - 0x00, 0x34, 0x09, 0x40, 0xe1, 0x15, 0x09, 0x00, 0xa8, 0x01, 0xff, 0xe1, - 0x16, 0x09, 0x00, 0x42, 0x22, 0x00, 0x59, 0x09, 0x40, 0xe1, 0x1c, 0x09, - 0x00, 0x42, 0x22, 0x00, 0x1d, 0x09, 0x00, 0x42, 0xbd, 0x26, 0x7c, 0x09, - 0x40, 0xe9, 0x08, 0x09, 0x40, 0xe1, 0x39, 0x09, 0x00, 0x47, 0xcc, 0xcd, - 0x7a, 0x09, 0x40, 0xe1, 0x17, 0x09, 0x00, 0x42, 0x24, 0x02, 0x7b, 0x09, - 0x00, 0xa8, 0x06, 0x4b, 0x2e, 0x28, 0x7d, 0x09, 0x40, 0xe1, 0x18, 0x09, - 0x00, 0x42, 0x22, 0x00, 0x5a, 0x09, 0x40, 0xe1, 0x26, 0x09, 0x00, 0xa4, - 0x06, 0x42, 0x22, 0x00, 0x27, 0x09, 0x40, 0xe1, 0x21, 0x09, 0x00, 0xa4, - 0x06, 0x42, 0x22, 0x00, 0x22, 0x09, 0x40, 0xe1, 0x7e, 0x09, 0x00, 0x42, - 0x22, 0x00, 0x5c, 0x09, 0x40, 0xe1, 0x1a, 0x09, 0x80, 0x06, 0x42, 0x22, - 0x00, 0x1b, 0x09, 0x40, 0x05, 0xbc, 0x5f, 0x01, 0xff, 0xe1, 0x72, 0x09, - 0x00, 0xe5, 0x0d, 0x09, 0x00, 0xef, 0x11, 0x09, 0x40, 0xe1, 0x2c, 0x09, - 0x00, 0x42, 0x16, 0x00, 0x7f, 0x09, 0x00, 0x42, 0x22, 0x00, 0x2d, 0x09, - 0x40, 0xe1, 0x06, 0x09, 0x00, 0xe9, 0x10, 0x09, 0x00, 0xf5, 0x14, 0x09, - 0x00, 0xf7, 0x75, 0x09, 0x00, 0xf9, 0xfe, 0xa8, 0x40, 0x45, 0xb8, 0x00, - 0x00, 0x1b, 0x81, 0x06, 0x46, 0x27, 0x05, 0xfb, 0xa8, 0x40, 0x50, 0x3a, - 0x5f, 0x01, 0x1b, 0x41, 0x49, 0x1f, 0x9a, 0xf9, 0xa8, 0x00, 0x4b, 0x8e, - 0x22, 0x53, 0x09, 0x40, 0x44, 0xd1, 0x1f, 0x64, 0x09, 0x00, 0x05, 0xc5, - 0x06, 0x06, 0x4b, 0xd8, 0x9e, 0x65, 0x09, 0x40, 0x45, 0xc3, 0x0a, 0x6e, - 0x09, 0x00, 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0x6f, 0x09, 0x00, 0x43, 0xbf, - 0x0a, 0x67, 0x09, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xa1, 0x1d, 0x66, - 0x09, 0x40, 0x44, 0x25, 0x01, 0x69, 0x09, 0x00, 0x42, 0x15, 0x02, 0x68, - 0x09, 0x40, 0x44, 0x27, 0x1d, 0x6d, 0x09, 0x00, 0x42, 0x60, 0x25, 0x6c, - 0x09, 0x40, 0x43, 0xa7, 0x05, 0x6b, 0x09, 0x00, 0x43, 0xcb, 0x06, 0x6a, - 0x09, 0x40, 0x50, 0x94, 0x56, 0x70, 0x09, 0x00, 0x4b, 0x3e, 0x8a, 0x54, - 0x09, 0x40, 0x4c, 0x75, 0x8b, 0x0b, 0x26, 0x00, 0x02, 0x33, 0x00, 0x11, - 0x05, 0xd0, 0xe4, 0x01, 0xff, 0x48, 0x53, 0x4a, 0xa5, 0xf5, 0x01, 0x46, - 0x2c, 0xde, 0xd4, 0xf5, 0x41, 0x03, 0x19, 0x09, 0x0b, 0xf4, 0xdc, 0xf3, - 0xc1, 0x00, 0x47, 0x76, 0xca, 0xdd, 0xf3, 0x41, 0x0f, 0xb9, 0x05, 0xdd, - 0x01, 0x0d, 0x4b, 0x08, 0x01, 0xff, 0x42, 0x9e, 0x10, 0x34, 0x04, 0x01, - 0x43, 0x3c, 0xb4, 0x3a, 0x04, 0x01, 0x44, 0xf8, 0x49, 0x3d, 0x04, 0x01, - 0x43, 0xca, 0x7f, 0x3c, 0x04, 0x01, 0xa5, 0x91, 0x01, 0x43, 0x29, 0x9a, - 0x40, 0x04, 0x01, 0xe8, 0x38, 0x04, 0x01, 0x43, 0x6e, 0x37, 0x3e, 0x04, - 0x01, 0x43, 0xa2, 0x7d, 0x3f, 0x04, 0x01, 0x05, 0x68, 0x33, 0x5d, 0xaf, - 0x53, 0x43, 0x0f, 0x7b, 0x39, 0x04, 0x01, 0x06, 0x61, 0x36, 0x2f, 0xb4, - 0x21, 0x43, 0xd2, 0x06, 0x42, 0x04, 0x01, 0x42, 0x45, 0x07, 0x36, 0x04, - 0x01, 0x43, 0x91, 0xa7, 0x37, 0x04, 0x01, 0xba, 0x01, 0xff, 0x42, 0x27, - 0x01, 0x46, 0x04, 0x01, 0x43, 0xdd, 0x12, 0x48, 0x04, 0x41, 0x42, 0x27, - 0x01, 0x3b, 0x04, 0x01, 0x43, 0xdd, 0x12, 0x44, 0x04, 0x41, 0xe1, 0x30, - 0x04, 0x81, 0x11, 0xe5, 0x2f, 0x04, 0x01, 0xe9, 0x2e, 0x04, 0x01, 0xef, - 0x32, 0x04, 0xc1, 0x00, 0xef, 0x33, 0x04, 0x41, 0xe8, 0x31, 0x04, 0x41, - 0xe9, 0x4e, 0x04, 0x01, 0xf7, 0x35, 0x04, 0x41, 0xe1, 0x2a, 0x04, 0x81, - 0x11, 0xe5, 0x29, 0x04, 0x01, 0xe9, 0x28, 0x04, 0x01, 0xef, 0x2c, 0x04, - 0xc1, 0x00, 0xef, 0x2d, 0x04, 0x41, 0xe8, 0x2b, 0x04, 0x41, 0xe6, 0x41, - 0x04, 0x01, 0xec, 0x4a, 0x04, 0x01, 0xed, 0x4b, 0x04, 0x01, 0xee, 0x4c, - 0x04, 0x81, 0x17, 0xf2, 0x49, 0x04, 0x01, 0xf3, 0x45, 0x04, 0x81, 0x0a, - 0x42, 0x53, 0x00, 0x43, 0x04, 0x01, 0xf7, 0x4f, 0x04, 0x41, 0xe8, 0x47, - 0x04, 0x41, 0xe7, 0x4d, 0x04, 0x41, 0x42, 0x9e, 0x10, 0x0c, 0x04, 0x01, - 0x43, 0x3c, 0xb4, 0x12, 0x04, 0x01, 0x44, 0xf8, 0x49, 0x15, 0x04, 0x01, - 0x43, 0xca, 0x7f, 0x14, 0x04, 0x01, 0xa5, 0x91, 0x01, 0x43, 0x29, 0x9a, - 0x18, 0x04, 0x01, 0xe8, 0x10, 0x04, 0x01, 0x43, 0x6e, 0x37, 0x16, 0x04, - 0x01, 0x43, 0xa2, 0x7d, 0x17, 0x04, 0x01, 0x05, 0x68, 0x33, 0x5d, 0xaf, - 0x53, 0x43, 0x0f, 0x7b, 0x11, 0x04, 0x01, 0x06, 0x61, 0x36, 0x2f, 0xb4, - 0x21, 0x43, 0xd2, 0x06, 0x1a, 0x04, 0x01, 0x42, 0x45, 0x07, 0x0e, 0x04, - 0x01, 0x43, 0x91, 0xa7, 0x0f, 0x04, 0x01, 0xba, 0x01, 0xff, 0x42, 0x27, - 0x01, 0x1e, 0x04, 0x01, 0x43, 0xdd, 0x12, 0x20, 0x04, 0x41, 0x42, 0x27, - 0x01, 0x13, 0x04, 0x01, 0x43, 0xdd, 0x12, 0x1c, 0x04, 0x41, 0xe1, 0x08, - 0x04, 0x81, 0x11, 0xe5, 0x07, 0x04, 0x01, 0xe9, 0x06, 0x04, 0x01, 0xef, - 0x0a, 0x04, 0xc1, 0x00, 0xef, 0x0b, 0x04, 0x41, 0xe8, 0x09, 0x04, 0x41, - 0xe9, 0x26, 0x04, 0x01, 0xf7, 0x0d, 0x04, 0x41, 0xe1, 0x02, 0x04, 0x81, - 0x11, 0xe5, 0x01, 0x04, 0x01, 0xe9, 0x00, 0x04, 0x01, 0xef, 0x04, 0x04, - 0xc1, 0x00, 0xef, 0x05, 0x04, 0x41, 0xe8, 0x03, 0x04, 0x41, 0xe6, 0x19, - 0x04, 0x01, 0xec, 0x22, 0x04, 0x01, 0xed, 0x23, 0x04, 0x01, 0xee, 0x24, - 0x04, 0x81, 0x17, 0xf2, 0x21, 0x04, 0x01, 0xf3, 0x1d, 0x04, 0x81, 0x0a, - 0x42, 0x53, 0x00, 0x1b, 0x04, 0x01, 0xf7, 0x27, 0x04, 0x41, 0xe8, 0x1f, - 0x04, 0x41, 0xe7, 0x25, 0x04, 0x41, 0x03, 0x16, 0x04, 0x81, 0x01, 0x14, - 0xf7, 0x44, 0x01, 0xff, 0x53, 0xc3, 0x47, 0xc9, 0x23, 0x80, 0x5e, 0x51, - 0x48, 0x5d, 0xca, 0x23, 0x80, 0x40, 0x09, 0x32, 0x00, 0x01, 0xff, 0x04, - 0x1a, 0x00, 0x11, 0x05, 0x51, 0x00, 0x01, 0xff, 0x46, 0xe7, 0x02, 0xc0, - 0x23, 0x00, 0x48, 0x01, 0x02, 0xc3, 0x23, 0x40, 0x07, 0x4c, 0x0d, 0x16, - 0x04, 0x1e, 0x00, 0x06, 0x44, 0x39, 0x56, 0xc6, 0x23, 0x40, 0x44, 0xc3, - 0x00, 0xcb, 0x23, 0x00, 0x45, 0xc8, 0x00, 0xbe, 0x23, 0x40, 0x44, 0xc3, - 0x00, 0xcc, 0x23, 0x00, 0x45, 0xc8, 0x00, 0xbf, 0x23, 0x40, 0x06, 0x50, - 0x00, 0x01, 0xff, 0x46, 0xe7, 0x02, 0xc2, 0x23, 0x00, 0x48, 0x01, 0x02, - 0xc5, 0x23, 0x00, 0x44, 0x39, 0x56, 0xc8, 0x23, 0x40, 0x06, 0x50, 0x00, - 0x01, 0xff, 0x46, 0xe7, 0x02, 0xc1, 0x23, 0x00, 0x48, 0x01, 0x02, 0xc4, - 0x23, 0x00, 0x44, 0x39, 0x56, 0xc7, 0x23, 0x40, 0x4f, 0x76, 0x6c, 0x45, - 0xcc, 0x01, 0x4d, 0x72, 0x88, 0x44, 0xcc, 0x41, 0x43, 0x36, 0x30, 0x7f, - 0x00, 0x00, 0x4b, 0x9f, 0x9b, 0x9a, 0xf6, 0x01, 0x4b, 0xfe, 0xa0, 0x5c, - 0x22, 0x40, 0x47, 0x08, 0xcd, 0x03, 0x21, 0x00, 0x4a, 0x0b, 0xa8, 0x09, - 0x21, 0x00, 0x44, 0x2f, 0x03, 0xb0, 0x00, 0x40, 0xa9, 0x06, 0x56, 0xc7, - 0x35, 0xdb, 0xf5, 0x41, 0x4a, 0x2f, 0xa7, 0x33, 0xf3, 0x01, 0x04, 0x88, - 0x0f, 0x01, 0xff, 0x4f, 0x68, 0x6b, 0xe8, 0x23, 0x00, 0x54, 0x93, 0x44, - 0x96, 0x23, 0x40, 0x44, 0xf2, 0xd7, 0x20, 0x20, 0x80, 0x53, 0x4a, 0x95, - 0xaa, 0x38, 0x21, 0x00, 0xae, 0x3f, 0x04, 0x95, 0x43, 0x2f, 0x02, 0xa4, - 0x02, 0x06, 0x4e, 0x4d, 0x69, 0x10, 0x00, 0x40, 0x80, 0x17, 0x03, 0x05, - 0x00, 0x01, 0xff, 0x48, 0xab, 0x88, 0x4d, 0xfe, 0x00, 0x48, 0xb8, 0x88, - 0x49, 0xfe, 0x00, 0x60, 0x68, 0x06, 0x9f, 0x27, 0x40, 0x46, 0xeb, 0x07, - 0xa8, 0xf4, 0x01, 0x50, 0x5a, 0x67, 0x43, 0x2e, 0x40, 0x44, 0x21, 0x04, - 0x93, 0x25, 0x00, 0x49, 0xcc, 0xbd, 0x76, 0xf5, 0x41, 0x43, 0x75, 0x1f, - 0x83, 0xf4, 0x01, 0x42, 0xb7, 0x13, 0x61, 0xf3, 0x41, 0x80, 0x01, 0xff, - 0x45, 0x7e, 0xa3, 0xe1, 0xf5, 0x01, 0x05, 0x51, 0x00, 0x01, 0xff, 0x4a, - 0x4f, 0xaa, 0x36, 0x2e, 0x00, 0x4b, 0xbf, 0x9f, 0x37, 0x2e, 0x40, 0xa1, - 0x83, 0xad, 0x01, 0xa5, 0xbd, 0xac, 0x01, 0xa8, 0xbd, 0x9b, 0x01, 0xa9, - 0x8a, 0x8c, 0x01, 0x03, 0x42, 0x32, 0xd2, 0x83, 0x01, 0xac, 0xd5, 0x7f, - 0xaf, 0x84, 0x5c, 0xb2, 0xcb, 0x5a, 0xb5, 0xaf, 0x1b, 0xb9, 0x01, 0xff, - 0x45, 0x4b, 0xe2, 0x00, 0xf3, 0x01, 0x4a, 0xd1, 0xaa, 0x2d, 0x23, 0x00, - 0x02, 0x90, 0x0c, 0xe0, 0x15, 0x07, 0x3b, 0xca, 0x01, 0xff, 0x09, 0xb9, - 0x05, 0xf2, 0x0b, 0x46, 0xa4, 0x4e, 0x7e, 0xa6, 0x00, 0x07, 0xc1, 0x05, - 0xd5, 0x0b, 0x47, 0xc3, 0xd1, 0x7f, 0xa6, 0x00, 0xb3, 0x06, 0x4e, 0x9a, - 0x7b, 0x82, 0x04, 0x40, 0x06, 0x4c, 0x08, 0x99, 0x01, 0x16, 0xe5, 0x36, - 0x01, 0xff, 0xe1, 0x51, 0xe0, 0x01, 0xa2, 0x83, 0x01, 0x43, 0x1e, 0x14, - 0x63, 0xe0, 0x01, 0xa4, 0x6a, 0xa5, 0x5c, 0x43, 0xdd, 0x50, 0x54, 0xe0, - 0x81, 0x4f, 0x42, 0x22, 0x00, 0x61, 0xe0, 0x81, 0x42, 0xe9, 0x59, 0xe0, - 0x81, 0x39, 0x42, 0x1b, 0x02, 0x5a, 0xe0, 0x01, 0xef, 0x5c, 0xe0, 0x01, - 0x42, 0x6f, 0x02, 0x5d, 0xe0, 0x01, 0x43, 0xa4, 0x02, 0x64, 0xe0, 0x01, - 0x43, 0x6a, 0x5c, 0x62, 0xe0, 0x01, 0xf5, 0x5f, 0xe0, 0x01, 0x42, 0x32, - 0x00, 0x53, 0xe0, 0x01, 0x44, 0x35, 0xd4, 0x66, 0xe0, 0x01, 0xba, 0x01, - 0xff, 0xe5, 0x58, 0xe0, 0x01, 0x42, 0xb0, 0x01, 0x57, 0xe0, 0x41, 0xe5, - 0x56, 0xe0, 0x41, 0x47, 0x4a, 0x91, 0x65, 0xe0, 0x41, 0x4c, 0xdd, 0x89, - 0x67, 0xe0, 0x41, 0xe6, 0x60, 0xe0, 0x01, 0xec, 0x5b, 0xe0, 0x01, 0xf3, - 0x5e, 0xe0, 0x41, 0xe5, 0x55, 0xe0, 0x01, 0xba, 0x01, 0xff, 0xe5, 0x69, - 0xe0, 0x01, 0x42, 0xb0, 0x01, 0x6a, 0xe0, 0x41, 0xe5, 0x52, 0xe0, 0x01, - 0x57, 0x59, 0x08, 0x68, 0xe0, 0x41, 0x06, 0xc2, 0x05, 0x17, 0x08, 0xfb, - 0x1e, 0x01, 0xff, 0x44, 0xa2, 0xeb, 0xd5, 0x04, 0x00, 0x46, 0x5c, 0xd8, - 0xa5, 0x04, 0x00, 0x46, 0x6c, 0xdd, 0xb5, 0x04, 0x40, 0xe1, 0x30, 0x04, - 0x80, 0xd5, 0x09, 0xa2, 0x99, 0x09, 0xa3, 0xe4, 0x08, 0xa4, 0x8f, 0x08, - 0xe5, 0x4d, 0x04, 0x80, 0x94, 0x07, 0x44, 0x96, 0xec, 0x73, 0x04, 0x00, - 0xa7, 0xda, 0x06, 0xa8, 0xb0, 0x06, 0xe9, 0x38, 0x04, 0x80, 0xc0, 0x05, - 0x42, 0xde, 0x1f, 0x58, 0x04, 0x00, 0xab, 0xc7, 0x04, 0xac, 0xac, 0x04, - 0x04, 0x52, 0x18, 0x9b, 0x04, 0xae, 0x86, 0x04, 0xef, 0x3e, 0x04, 0x80, - 0xe9, 0x03, 0xb0, 0xc4, 0x03, 0x42, 0xf4, 0x13, 0x1b, 0x05, 0x00, 0xb2, - 0x88, 0x03, 0xb3, 0x99, 0x02, 0xb4, 0xba, 0x01, 0xf5, 0x43, 0x04, 0x80, - 0x8b, 0x01, 0x42, 0x32, 0x00, 0x32, 0x04, 0x00, 0xb7, 0x79, 0xb9, 0x46, - 0xba, 0x01, 0xff, 0xe5, 0x37, 0x04, 0x80, 0x28, 0xa8, 0x01, 0xff, 0xe5, - 0x36, 0x04, 0x80, 0x06, 0x42, 0x15, 0x01, 0x85, 0xa6, 0x40, 0x06, 0x50, - 0x00, 0x01, 0xff, 0x45, 0xcb, 0x22, 0xc2, 0x04, 0x00, 0xa4, 0x01, 0xff, - 0x48, 0x95, 0x2a, 0x97, 0x04, 0x00, 0x48, 0x30, 0x23, 0xdd, 0x04, 0x40, - 0x07, 0x57, 0x07, 0x06, 0x44, 0xf6, 0xed, 0x41, 0xa6, 0x40, 0x48, 0x95, - 0x2a, 0x99, 0x04, 0x00, 0x48, 0x30, 0x23, 0xdf, 0x04, 0x40, 0xe1, 0x4f, - 0x04, 0x80, 0x24, 0x43, 0xfb, 0x2a, 0x4b, 0x04, 0x80, 0x0c, 0xe9, 0x57, - 0x04, 0x00, 0xee, 0x5f, 0xa6, 0x00, 0xf5, 0x4e, 0x04, 0x40, 0x06, 0x50, - 0x00, 0x01, 0xff, 0x48, 0xf8, 0x73, 0x51, 0xa6, 0x00, 0x49, 0x2f, 0x23, - 0xf9, 0x04, 0x40, 0xe5, 0x19, 0x05, 0x00, 0xf4, 0x63, 0x04, 0x40, 0xe5, - 0x1d, 0x05, 0x00, 0x46, 0xca, 0xd9, 0x83, 0x1c, 0x40, 0x06, 0x50, 0x00, - 0x11, 0xeb, 0x79, 0x04, 0x80, 0x06, 0x4b, 0xba, 0x9d, 0x88, 0x1c, 0x40, - 0x4a, 0xe2, 0x9b, 0x54, 0x04, 0x40, 0xa4, 0x06, 0x46, 0x04, 0x6f, 0xef, - 0x04, 0x40, 0x48, 0x30, 0x23, 0xf1, 0x04, 0x00, 0x4b, 0xcd, 0x9e, 0xf3, - 0x04, 0x40, 0x04, 0x0e, 0x07, 0x46, 0x43, 0x1e, 0x14, 0x93, 0xa6, 0x00, - 0xe5, 0x42, 0x04, 0x80, 0x2a, 0x4e, 0xe6, 0x76, 0x85, 0x1c, 0x00, 0x42, - 0xde, 0x1f, 0x8a, 0x1c, 0x00, 0xb3, 0x06, 0x42, 0x15, 0x01, 0x8d, 0xa6, - 0x40, 0xe5, 0x46, 0x04, 0x00, 0x42, 0xb0, 0x01, 0x5b, 0x04, 0x00, 0x42, - 0x1b, 0x03, 0x91, 0xa6, 0x00, 0x42, 0x15, 0x01, 0x8f, 0xa6, 0x40, 0x06, - 0x50, 0x00, 0x01, 0xff, 0x49, 0x94, 0x2a, 0xad, 0x04, 0x00, 0x4b, 0x6d, - 0x9d, 0x8b, 0xa6, 0x40, 0x49, 0x1e, 0xb7, 0x86, 0x1c, 0x00, 0x42, 0x77, - 0x00, 0x84, 0x1c, 0x00, 0x43, 0xcd, 0x31, 0x87, 0x1c, 0x40, 0x44, 0x54, - 0x7a, 0xd9, 0x04, 0x80, 0x5f, 0x4c, 0xd1, 0x8c, 0x8d, 0x04, 0x00, 0xa8, - 0x27, 0x04, 0x69, 0x6f, 0x0d, 0x49, 0x72, 0xbd, 0xaf, 0x04, 0xc0, 0x00, - 0x4c, 0x39, 0x28, 0xb1, 0x04, 0x40, 0x42, 0x04, 0x00, 0x63, 0xa6, 0x00, - 0xa5, 0x06, 0x44, 0x2f, 0x03, 0x4c, 0x04, 0x40, 0xec, 0x65, 0xa6, 0x00, - 0xed, 0x67, 0xa6, 0x40, 0xe1, 0x48, 0x04, 0x00, 0x43, 0xef, 0x1f, 0x49, - 0x04, 0x00, 0x42, 0x22, 0x00, 0xbb, 0x04, 0x80, 0x19, 0x04, 0x76, 0x33, - 0x06, 0x42, 0x15, 0x01, 0x97, 0xa6, 0x40, 0xe9, 0x39, 0x04, 0x80, 0x04, - 0xf5, 0x5e, 0x04, 0x40, 0x4a, 0x5f, 0xa4, 0x8b, 0x04, 0x40, 0x4f, 0x6b, - 0x68, 0x27, 0x05, 0x40, 0x4f, 0x7a, 0x68, 0xdb, 0x04, 0x40, 0x08, 0x8f, - 0x14, 0x17, 0x42, 0x22, 0x00, 0x17, 0x05, 0x00, 0x04, 0xf2, 0x0a, 0x01, - 0xff, 0x46, 0xe7, 0xac, 0x7b, 0x04, 0x00, 0x45, 0xbd, 0x16, 0x80, 0x1c, - 0x40, 0x43, 0xd5, 0xf0, 0x45, 0xa6, 0x00, 0x43, 0x6a, 0x5c, 0x61, 0xa6, - 0x00, 0x42, 0xe1, 0x4c, 0x55, 0xa6, 0x00, 0x42, 0xfc, 0x09, 0x11, 0x05, - 0x40, 0x47, 0x23, 0xc7, 0xcf, 0x04, 0x00, 0xe5, 0x3f, 0x04, 0x80, 0x06, - 0x42, 0x2f, 0x03, 0x71, 0x04, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x49, - 0x94, 0x2a, 0x25, 0x05, 0x00, 0x4b, 0x6d, 0x9d, 0xa7, 0x04, 0x40, 0x4f, - 0x7a, 0x68, 0xe7, 0x04, 0x00, 0x44, 0x6b, 0x7a, 0x61, 0x04, 0x80, 0x04, - 0xf4, 0x7f, 0x04, 0x40, 0x4b, 0x40, 0x96, 0x7d, 0x04, 0x40, 0x47, 0xba, - 0x03, 0x82, 0x1c, 0x00, 0x4a, 0xed, 0xa7, 0x4f, 0xa6, 0x00, 0x42, 0xde, - 0x1f, 0x5a, 0x04, 0x40, 0x47, 0x82, 0x84, 0x69, 0xa6, 0x00, 0x48, 0x71, - 0x90, 0x4b, 0xa6, 0x40, 0x42, 0x22, 0x00, 0x15, 0x05, 0x00, 0x49, 0xcd, - 0x57, 0x67, 0x04, 0x00, 0x42, 0xde, 0x1f, 0x59, 0x04, 0x00, 0x4d, 0x3f, - 0x85, 0x81, 0x1c, 0x40, 0xe1, 0x3a, 0x04, 0x80, 0x4e, 0x4d, 0xf2, 0x81, - 0xcc, 0x04, 0x00, 0x42, 0xde, 0x1f, 0x5c, 0x04, 0x00, 0xaf, 0x06, 0x42, - 0x2f, 0x03, 0x6f, 0x04, 0x40, 0x03, 0xdc, 0xce, 0x06, 0x43, 0x31, 0x7f, - 0x81, 0x04, 0x40, 0xa4, 0x1e, 0x43, 0xdd, 0x1f, 0x09, 0x05, 0x00, 0x43, - 0x0f, 0x83, 0x0b, 0x05, 0x00, 0x43, 0xb4, 0x9b, 0x0d, 0x05, 0x00, 0x43, - 0x53, 0xf1, 0x0f, 0x05, 0x00, 0x43, 0x8f, 0xf1, 0x05, 0x05, 0x40, 0xe5, - 0x01, 0x05, 0x00, 0x42, 0xde, 0x1f, 0x03, 0x05, 0x00, 0x43, 0x8f, 0xf1, - 0x07, 0x05, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x49, 0x94, 0x2a, 0x9b, - 0x04, 0x00, 0x44, 0x5d, 0x0e, 0xc4, 0x04, 0x00, 0x46, 0x27, 0x05, 0x9f, - 0x04, 0x00, 0x4f, 0xcc, 0x32, 0x9d, 0x04, 0x40, 0x06, 0x50, 0x00, 0x54, - 0xe5, 0x35, 0x04, 0x80, 0x3e, 0xef, 0x51, 0x04, 0x80, 0x0d, 0x46, 0x80, - 0xde, 0x75, 0x04, 0xc0, 0x00, 0x59, 0x80, 0x22, 0x77, 0x04, 0x40, 0xb4, - 0x01, 0xff, 0xe1, 0x47, 0xa6, 0x00, 0x06, 0xc7, 0x02, 0x01, 0xff, 0xe1, - 0x57, 0xa6, 0x00, 0x47, 0xb4, 0xcc, 0x6d, 0x04, 0x00, 0x51, 0xc5, 0x57, - 0x5d, 0xa6, 0x00, 0xe5, 0x65, 0x04, 0x00, 0x4a, 0xcc, 0x57, 0x69, 0x04, - 0x00, 0x43, 0xcd, 0x31, 0x53, 0xa6, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, - 0x45, 0xcb, 0x22, 0xd7, 0x04, 0x00, 0x45, 0x8d, 0x22, 0x50, 0x04, 0x40, - 0x49, 0x2f, 0x23, 0xe5, 0x04, 0x00, 0x45, 0x8d, 0x22, 0x5d, 0x04, 0x00, - 0x46, 0x04, 0x6f, 0xe3, 0x04, 0x40, 0xe1, 0x45, 0x04, 0x80, 0x06, 0x42, - 0x15, 0x01, 0x95, 0xa6, 0x40, 0x06, 0x50, 0x00, 0x06, 0x47, 0x4a, 0x91, - 0x4a, 0x04, 0x40, 0x49, 0x94, 0x2a, 0xb3, 0x04, 0x00, 0x44, 0x5d, 0x0e, - 0xfd, 0x04, 0x00, 0x46, 0x27, 0x05, 0xff, 0x04, 0x40, 0x42, 0xb0, 0x01, - 0x33, 0x04, 0x80, 0x06, 0x42, 0xde, 0x1f, 0x53, 0x04, 0x40, 0x06, 0x50, - 0x00, 0x01, 0xff, 0x49, 0x94, 0x2a, 0xf7, 0x04, 0x00, 0x4b, 0x6d, 0x9d, - 0x95, 0x04, 0x00, 0x46, 0x27, 0x05, 0x93, 0x04, 0x80, 0x06, 0x46, 0x64, - 0x67, 0x91, 0x04, 0x40, 0x49, 0x38, 0x23, 0xfb, 0x04, 0x40, 0x4f, 0x7a, - 0x68, 0xed, 0x04, 0x00, 0xe6, 0x44, 0x04, 0x00, 0xec, 0x3b, 0x04, 0x80, - 0x49, 0xed, 0x3c, 0x04, 0x80, 0x3e, 0xee, 0x3d, 0x04, 0x80, 0x16, 0xf2, - 0x40, 0x04, 0x80, 0x0b, 0xf3, 0x41, 0x04, 0xc0, 0x00, 0x4f, 0x6b, 0x68, - 0xab, 0x04, 0x40, 0x4a, 0x69, 0xa4, 0x8f, 0x04, 0x40, 0x06, 0x50, 0x00, - 0x01, 0xff, 0x49, 0x94, 0x2a, 0xa3, 0x04, 0x00, 0x44, 0x5d, 0x0e, 0xc8, - 0x04, 0x00, 0x49, 0x68, 0x56, 0x29, 0x05, 0x00, 0x4b, 0x6d, 0x9d, 0x23, - 0x05, 0x00, 0x44, 0x23, 0x17, 0xca, 0x04, 0x40, 0x4a, 0x5f, 0xa4, 0xce, - 0x04, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x49, 0x94, 0x2a, 0x2f, 0x05, - 0x00, 0x44, 0x5d, 0x0e, 0x13, 0x05, 0x00, 0x4b, 0x6d, 0x9d, 0x21, 0x05, - 0x00, 0x44, 0x23, 0x17, 0xc6, 0x04, 0x40, 0x43, 0x1e, 0x14, 0x2d, 0x05, - 0x00, 0xe5, 0x34, 0x04, 0x00, 0x42, 0xde, 0x1f, 0x52, 0x04, 0x80, 0x3b, - 0x06, 0x3c, 0x01, 0x2d, 0x42, 0x15, 0x01, 0x81, 0xa6, 0x00, 0xba, 0x01, - 0xff, 0xe5, 0x55, 0x04, 0x80, 0x19, 0x42, 0xb0, 0x01, 0x5f, 0x04, 0x00, - 0x42, 0x15, 0x01, 0x83, 0xa6, 0x00, 0xba, 0x01, 0xff, 0xe5, 0x89, 0xa6, - 0x00, 0x42, 0xb0, 0x01, 0x2b, 0x05, 0x40, 0x42, 0x13, 0x01, 0x43, 0xa6, - 0x40, 0x4b, 0x83, 0x9d, 0x6d, 0xa6, 0x00, 0xef, 0x99, 0xa6, 0x40, 0x42, - 0x29, 0x0f, 0x49, 0xa6, 0x40, 0x43, 0x1e, 0x14, 0x87, 0xa6, 0x00, 0x42, - 0xb0, 0x01, 0x47, 0x04, 0x80, 0x0c, 0x50, 0xc6, 0x57, 0x59, 0xa6, 0x00, - 0x48, 0xd2, 0xc7, 0x9b, 0xa6, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0xa4, - 0x06, 0x4f, 0xcc, 0x32, 0xb9, 0x04, 0x40, 0x48, 0x95, 0x2a, 0xb7, 0x04, - 0x00, 0x48, 0x30, 0x23, 0xf5, 0x04, 0x40, 0xa1, 0x24, 0xe5, 0x31, 0x04, - 0x00, 0xa9, 0x12, 0x4a, 0x8b, 0xaa, 0x5b, 0xa6, 0x00, 0x4a, 0x2d, 0xae, - 0x4d, 0xa6, 0x00, 0x57, 0x59, 0x08, 0x56, 0x04, 0x40, 0x45, 0xb6, 0xcc, - 0x6b, 0x04, 0x00, 0x49, 0x85, 0x9d, 0x6b, 0xa6, 0x40, 0x46, 0x45, 0xcc, - 0xe9, 0x04, 0x80, 0x06, 0x48, 0x22, 0xc8, 0xa1, 0x04, 0x40, 0x4f, 0x7a, - 0x68, 0xeb, 0x04, 0x40, 0x06, 0x50, 0x00, 0x23, 0x09, 0x69, 0xb4, 0x06, - 0x47, 0x03, 0xd0, 0x1f, 0x05, 0x40, 0x43, 0x1e, 0x14, 0xbd, 0x04, 0x80, - 0x0c, 0x43, 0xd5, 0xf0, 0xe1, 0x04, 0x00, 0x42, 0x22, 0x00, 0xa9, 0x04, - 0x40, 0x4f, 0x6b, 0x68, 0xbf, 0x04, 0x40, 0x45, 0xcb, 0x22, 0xd1, 0x04, - 0x00, 0x49, 0x2f, 0x23, 0xd3, 0x04, 0x40, 0x4d, 0x7c, 0x84, 0x6e, 0xa6, - 0x00, 0x48, 0x22, 0xc7, 0xc0, 0x04, 0x00, 0x50, 0xca, 0x65, 0x2b, 0x1d, - 0x40, 0x06, 0xc2, 0x05, 0x17, 0x08, 0xfb, 0x1e, 0x01, 0xff, 0x44, 0xa2, - 0xeb, 0xd4, 0x04, 0x00, 0x46, 0x5c, 0xd8, 0xa4, 0x04, 0x00, 0x46, 0x6c, - 0xdd, 0xb4, 0x04, 0x40, 0xe1, 0x10, 0x04, 0x80, 0x90, 0x09, 0xa2, 0xd4, - 0x08, 0xa3, 0x9f, 0x08, 0xa4, 0xca, 0x07, 0xe5, 0x2d, 0x04, 0x80, 0xcf, - 0x06, 0x44, 0x96, 0xec, 0x72, 0x04, 0x00, 0xa7, 0x95, 0x06, 0xa8, 0xeb, - 0x05, 0xe9, 0x18, 0x04, 0x80, 0xfb, 0x04, 0x42, 0xde, 0x1f, 0x08, 0x04, - 0x00, 0xab, 0x82, 0x04, 0xac, 0xed, 0x03, 0x04, 0x52, 0x18, 0xdc, 0x03, - 0xae, 0xcd, 0x03, 0xef, 0x1e, 0x04, 0x80, 0xb0, 0x03, 0xb0, 0x91, 0x03, - 0x42, 0xf4, 0x13, 0x1a, 0x05, 0x00, 0xb2, 0xe0, 0x02, 0xb3, 0xf1, 0x01, - 0xb4, 0xae, 0x01, 0xf5, 0x23, 0x04, 0x80, 0x85, 0x01, 0x42, 0x32, 0x00, - 0x12, 0x04, 0x00, 0x42, 0x15, 0x01, 0x1c, 0x05, 0x00, 0xb9, 0x46, 0xba, - 0x01, 0xff, 0xe5, 0x17, 0x04, 0x80, 0x28, 0xa8, 0x01, 0xff, 0xe5, 0x16, - 0x04, 0x80, 0x06, 0x42, 0x15, 0x01, 0x84, 0xa6, 0x40, 0x06, 0x50, 0x00, - 0x01, 0xff, 0x45, 0xcb, 0x22, 0xc1, 0x04, 0x00, 0xa4, 0x01, 0xff, 0x48, - 0x95, 0x2a, 0x96, 0x04, 0x00, 0x48, 0x30, 0x23, 0xdc, 0x04, 0x40, 0x07, - 0x57, 0x07, 0x06, 0x44, 0xf6, 0xed, 0x40, 0xa6, 0x40, 0x48, 0x95, 0x2a, - 0x98, 0x04, 0x00, 0x48, 0x30, 0x23, 0xde, 0x04, 0x40, 0xe1, 0x2f, 0x04, - 0x80, 0x24, 0x43, 0xfb, 0x2a, 0x2b, 0x04, 0x80, 0x0c, 0xe9, 0x07, 0x04, - 0x00, 0xee, 0x5e, 0xa6, 0x00, 0xf5, 0x2e, 0x04, 0x40, 0x06, 0x50, 0x00, - 0x01, 0xff, 0x48, 0xf8, 0x73, 0x50, 0xa6, 0x00, 0x49, 0x2f, 0x23, 0xf8, - 0x04, 0x40, 0xe5, 0x18, 0x05, 0x00, 0xf4, 0x62, 0x04, 0x40, 0x06, 0x50, - 0x00, 0x0b, 0xeb, 0x78, 0x04, 0xc0, 0x00, 0x4a, 0xe2, 0x9b, 0x04, 0x04, - 0x40, 0xa4, 0x06, 0x46, 0x04, 0x6f, 0xee, 0x04, 0x40, 0x48, 0x30, 0x23, - 0xf0, 0x04, 0x00, 0x4b, 0xcd, 0x9e, 0xf2, 0x04, 0x40, 0x43, 0x1e, 0x14, - 0x92, 0xa6, 0x00, 0xe5, 0x22, 0x04, 0x80, 0x24, 0x42, 0xde, 0x1f, 0x89, - 0x1c, 0x00, 0xb3, 0x06, 0x42, 0x15, 0x01, 0x8c, 0xa6, 0x40, 0xe5, 0x26, - 0x04, 0x00, 0x42, 0xb0, 0x01, 0x0b, 0x04, 0x00, 0x42, 0x1b, 0x03, 0x90, - 0xa6, 0x00, 0x42, 0x15, 0x01, 0x8e, 0xa6, 0x40, 0x06, 0x50, 0x00, 0x01, - 0xff, 0x49, 0x94, 0x2a, 0xac, 0x04, 0x00, 0x4b, 0x6d, 0x9d, 0x8a, 0xa6, - 0x40, 0x44, 0x54, 0x7a, 0xd8, 0x04, 0x80, 0x5f, 0x4c, 0xd1, 0x8c, 0x8c, - 0x04, 0x00, 0xa8, 0x27, 0x04, 0x69, 0x6f, 0x0d, 0x49, 0x72, 0xbd, 0xae, - 0x04, 0xc0, 0x00, 0x4c, 0x39, 0x28, 0xb0, 0x04, 0x40, 0x42, 0x04, 0x00, - 0x62, 0xa6, 0x00, 0xa5, 0x06, 0x44, 0x2f, 0x03, 0x2c, 0x04, 0x40, 0xec, - 0x64, 0xa6, 0x00, 0xed, 0x66, 0xa6, 0x40, 0xe1, 0x28, 0x04, 0x00, 0x43, - 0xef, 0x1f, 0x29, 0x04, 0x00, 0x42, 0x22, 0x00, 0xba, 0x04, 0x80, 0x19, - 0x04, 0x76, 0x33, 0x06, 0x42, 0x15, 0x01, 0x96, 0xa6, 0x40, 0xe9, 0x19, - 0x04, 0x80, 0x04, 0xf5, 0x0e, 0x04, 0x40, 0x4a, 0x5f, 0xa4, 0x8a, 0x04, - 0x40, 0x4f, 0x6b, 0x68, 0x26, 0x05, 0x40, 0x4f, 0x7a, 0x68, 0xda, 0x04, - 0x40, 0x08, 0x8f, 0x14, 0x0c, 0x42, 0x22, 0x00, 0x16, 0x05, 0x00, 0x4a, - 0xe3, 0xac, 0x7a, 0x04, 0x40, 0x43, 0xd5, 0xf0, 0x44, 0xa6, 0x00, 0x43, - 0x6a, 0x5c, 0x60, 0xa6, 0x00, 0x42, 0xe1, 0x4c, 0x54, 0xa6, 0x00, 0x42, - 0xfc, 0x09, 0x10, 0x05, 0x40, 0xe5, 0x1f, 0x04, 0x80, 0x06, 0x42, 0x2f, - 0x03, 0x70, 0x04, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x49, 0x94, 0x2a, - 0x24, 0x05, 0x00, 0x4b, 0x6d, 0x9d, 0xa6, 0x04, 0x40, 0x4f, 0x7a, 0x68, - 0xe6, 0x04, 0x00, 0x44, 0x6b, 0x7a, 0x60, 0x04, 0x80, 0x04, 0xf4, 0x7e, - 0x04, 0x40, 0x4b, 0x40, 0x96, 0x7c, 0x04, 0x40, 0x4a, 0xed, 0xa7, 0x4e, - 0xa6, 0x00, 0x42, 0xde, 0x1f, 0x0a, 0x04, 0x40, 0x47, 0x82, 0x84, 0x68, - 0xa6, 0x00, 0x48, 0x71, 0x90, 0x4a, 0xa6, 0x40, 0x42, 0x22, 0x00, 0x14, - 0x05, 0x00, 0x49, 0xcd, 0x57, 0x66, 0x04, 0x00, 0x42, 0xde, 0x1f, 0x09, - 0x04, 0x40, 0xe1, 0x1a, 0x04, 0x80, 0x4e, 0x4d, 0xf2, 0x81, 0xcb, 0x04, - 0x00, 0x42, 0xde, 0x1f, 0x0c, 0x04, 0x00, 0xaf, 0x06, 0x42, 0x2f, 0x03, - 0x6e, 0x04, 0x40, 0x03, 0xdc, 0xce, 0x06, 0x43, 0x31, 0x7f, 0x80, 0x04, - 0x40, 0xa4, 0x1e, 0x43, 0xdd, 0x1f, 0x08, 0x05, 0x00, 0x43, 0x0f, 0x83, - 0x0a, 0x05, 0x00, 0x43, 0xb4, 0x9b, 0x0c, 0x05, 0x00, 0x43, 0x53, 0xf1, - 0x0e, 0x05, 0x00, 0x43, 0x8f, 0xf1, 0x04, 0x05, 0x40, 0xe5, 0x00, 0x05, - 0x00, 0x42, 0xde, 0x1f, 0x02, 0x05, 0x00, 0x43, 0x8f, 0xf1, 0x06, 0x05, - 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x49, 0x94, 0x2a, 0x9a, 0x04, 0x00, - 0x44, 0x5d, 0x0e, 0xc3, 0x04, 0x00, 0x46, 0x27, 0x05, 0x9e, 0x04, 0x00, - 0x4f, 0xcc, 0x32, 0x9c, 0x04, 0x40, 0x06, 0x50, 0x00, 0x54, 0xe5, 0x15, - 0x04, 0x80, 0x3e, 0xef, 0x01, 0x04, 0x80, 0x0d, 0x46, 0x80, 0xde, 0x74, - 0x04, 0xc0, 0x00, 0x59, 0x80, 0x22, 0x76, 0x04, 0x40, 0xb4, 0x01, 0xff, - 0xe1, 0x46, 0xa6, 0x00, 0x06, 0xc7, 0x02, 0x01, 0xff, 0xe1, 0x56, 0xa6, - 0x00, 0x47, 0xb4, 0xcc, 0x6c, 0x04, 0x00, 0x51, 0xc5, 0x57, 0x5c, 0xa6, - 0x00, 0xe5, 0x64, 0x04, 0x00, 0x4a, 0xcc, 0x57, 0x68, 0x04, 0x00, 0x43, - 0xcd, 0x31, 0x52, 0xa6, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x45, 0xcb, - 0x22, 0xd6, 0x04, 0x00, 0x45, 0x8d, 0x22, 0x00, 0x04, 0x40, 0x49, 0x2f, - 0x23, 0xe4, 0x04, 0x00, 0x45, 0x8d, 0x22, 0x0d, 0x04, 0x00, 0x46, 0x04, - 0x6f, 0xe2, 0x04, 0x40, 0xe1, 0x25, 0x04, 0x80, 0x06, 0x42, 0x15, 0x01, - 0x94, 0xa6, 0x40, 0x06, 0x50, 0x00, 0x06, 0x47, 0x4a, 0x91, 0x2a, 0x04, - 0x40, 0x49, 0x94, 0x2a, 0xb2, 0x04, 0x00, 0x44, 0x5d, 0x0e, 0xfc, 0x04, - 0x00, 0x46, 0x27, 0x05, 0xfe, 0x04, 0x40, 0x42, 0xb0, 0x01, 0x13, 0x04, - 0x80, 0x06, 0x42, 0xde, 0x1f, 0x03, 0x04, 0x40, 0x06, 0x50, 0x00, 0x01, - 0xff, 0x49, 0x94, 0x2a, 0xf6, 0x04, 0x00, 0x4b, 0x6d, 0x9d, 0x94, 0x04, - 0x00, 0x46, 0x27, 0x05, 0x92, 0x04, 0x80, 0x06, 0x46, 0x64, 0x67, 0x90, - 0x04, 0x40, 0x49, 0x38, 0x23, 0xfa, 0x04, 0x40, 0x4f, 0x7a, 0x68, 0xec, - 0x04, 0x00, 0xe6, 0x24, 0x04, 0x00, 0xec, 0x1b, 0x04, 0x80, 0x49, 0xed, - 0x1c, 0x04, 0x80, 0x3e, 0xee, 0x1d, 0x04, 0x80, 0x16, 0xf2, 0x20, 0x04, - 0x80, 0x0b, 0xf3, 0x21, 0x04, 0xc0, 0x00, 0x4f, 0x6b, 0x68, 0xaa, 0x04, - 0x40, 0x4a, 0x69, 0xa4, 0x8e, 0x04, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, - 0x49, 0x94, 0x2a, 0xa2, 0x04, 0x00, 0x44, 0x5d, 0x0e, 0xc7, 0x04, 0x00, - 0x49, 0x68, 0x56, 0x28, 0x05, 0x00, 0x4b, 0x6d, 0x9d, 0x22, 0x05, 0x00, - 0x44, 0x23, 0x17, 0xc9, 0x04, 0x40, 0x4a, 0x5f, 0xa4, 0xcd, 0x04, 0x40, - 0x06, 0x50, 0x00, 0x01, 0xff, 0x49, 0x94, 0x2a, 0x2e, 0x05, 0x00, 0x44, - 0x5d, 0x0e, 0x12, 0x05, 0x00, 0x4b, 0x6d, 0x9d, 0x20, 0x05, 0x00, 0x44, - 0x23, 0x17, 0xc5, 0x04, 0x40, 0x43, 0x1e, 0x14, 0x2c, 0x05, 0x00, 0xe5, - 0x14, 0x04, 0x00, 0x42, 0xde, 0x1f, 0x02, 0x04, 0x80, 0x3b, 0x06, 0x3c, - 0x01, 0x2d, 0x42, 0x15, 0x01, 0x80, 0xa6, 0x00, 0xba, 0x01, 0xff, 0xe5, - 0x05, 0x04, 0x80, 0x19, 0x42, 0xb0, 0x01, 0x0f, 0x04, 0x00, 0x42, 0x15, - 0x01, 0x82, 0xa6, 0x00, 0xba, 0x01, 0xff, 0xe5, 0x88, 0xa6, 0x00, 0x42, - 0xb0, 0x01, 0x2a, 0x05, 0x40, 0x42, 0x13, 0x01, 0x42, 0xa6, 0x40, 0x4b, - 0x83, 0x9d, 0x6c, 0xa6, 0x00, 0xef, 0x98, 0xa6, 0x40, 0x42, 0x29, 0x0f, - 0x48, 0xa6, 0x40, 0x43, 0x1e, 0x14, 0x86, 0xa6, 0x00, 0x42, 0xb0, 0x01, - 0x27, 0x04, 0x80, 0x0c, 0x50, 0xc6, 0x57, 0x58, 0xa6, 0x00, 0x48, 0xd2, - 0xc7, 0x9a, 0xa6, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0xa4, 0x06, 0x4f, - 0xcc, 0x32, 0xb8, 0x04, 0x40, 0x48, 0x95, 0x2a, 0xb6, 0x04, 0x00, 0x48, - 0x30, 0x23, 0xf4, 0x04, 0x40, 0xa1, 0x24, 0xe5, 0x11, 0x04, 0x00, 0xa9, - 0x12, 0x4a, 0x8b, 0xaa, 0x5a, 0xa6, 0x00, 0x4a, 0x2d, 0xae, 0x4c, 0xa6, - 0x00, 0x57, 0x59, 0x08, 0x06, 0x04, 0x40, 0x45, 0xb6, 0xcc, 0x6a, 0x04, - 0x00, 0x49, 0x85, 0x9d, 0x6a, 0xa6, 0x40, 0x46, 0x45, 0xcc, 0xe8, 0x04, - 0x80, 0x06, 0x48, 0x22, 0xc8, 0xa0, 0x04, 0x40, 0x4f, 0x7a, 0x68, 0xea, - 0x04, 0x40, 0x06, 0x50, 0x00, 0x23, 0x09, 0x69, 0xb4, 0x06, 0x47, 0x03, - 0xd0, 0x1e, 0x05, 0x40, 0x43, 0x1e, 0x14, 0xbc, 0x04, 0x80, 0x0c, 0x43, - 0xd5, 0xf0, 0xe0, 0x04, 0x00, 0x42, 0x22, 0x00, 0xa8, 0x04, 0x40, 0x4f, - 0x6b, 0x68, 0xbe, 0x04, 0x40, 0x45, 0xcb, 0x22, 0xd0, 0x04, 0x00, 0x49, - 0x2f, 0x23, 0xd2, 0x04, 0x40, 0x0d, 0xc2, 0x82, 0xbc, 0x03, 0x10, 0xea, - 0x63, 0x01, 0xff, 0x90, 0x44, 0x91, 0x0d, 0x02, 0x57, 0xf0, 0x01, 0xff, - 0xd1, 0xf1, 0x2f, 0x01, 0xd2, 0xf2, 0x2f, 0x41, 0x90, 0x0f, 0x91, 0x01, - 0xff, 0xd0, 0xee, 0x2f, 0x01, 0xd2, 0xef, 0x2f, 0x01, 0xd4, 0xf0, 0x2f, - 0x41, 0xd0, 0xe5, 0x2f, 0x01, 0xd1, 0xe6, 0x2f, 0x01, 0xd2, 0xe7, 0x2f, - 0x01, 0xd3, 0xe8, 0x2f, 0x01, 0xd4, 0xe9, 0x2f, 0x01, 0xd5, 0xea, 0x2f, - 0x01, 0xd7, 0xeb, 0x2f, 0x01, 0xd8, 0xec, 0x2f, 0x01, 0xd9, 0xed, 0x2f, - 0x41, 0x90, 0xce, 0x02, 0x91, 0xaa, 0x02, 0x92, 0x87, 0x02, 0x93, 0xe4, - 0x01, 0x94, 0xc9, 0x01, 0x95, 0xa2, 0x01, 0x96, 0x7c, 0x97, 0x51, 0x98, - 0x27, 0x99, 0x01, 0xff, 0xd0, 0xdc, 0x2f, 0x01, 0xd1, 0xdd, 0x2f, 0x01, - 0xd2, 0xde, 0x2f, 0x01, 0xd4, 0xdf, 0x2f, 0x01, 0xd5, 0xe0, 0x2f, 0x01, - 0xd6, 0xe1, 0x2f, 0x01, 0xd7, 0xe2, 0x2f, 0x01, 0xd8, 0xe3, 0x2f, 0x01, - 0xd9, 0xe4, 0x2f, 0x41, 0xd0, 0xd2, 0x2f, 0x01, 0xd1, 0xd3, 0x2f, 0x01, - 0xd2, 0xd4, 0x2f, 0x01, 0xd3, 0xd5, 0x2f, 0x01, 0xd4, 0xd6, 0x2f, 0x01, - 0xd5, 0xd7, 0x2f, 0x01, 0xd6, 0xd8, 0x2f, 0x01, 0xd7, 0xd9, 0x2f, 0x01, - 0xd8, 0xda, 0x2f, 0x01, 0xd9, 0xdb, 0x2f, 0x41, 0xd0, 0xc8, 0x2f, 0x01, - 0xd1, 0xc9, 0x2f, 0x01, 0xd2, 0xca, 0x2f, 0x01, 0xd3, 0xcb, 0x2f, 0x01, - 0xd4, 0xcc, 0x2f, 0x01, 0xd5, 0xcd, 0x2f, 0x81, 0x0c, 0xd6, 0xcf, 0x2f, - 0x01, 0xd8, 0xd0, 0x2f, 0x01, 0xd9, 0xd1, 0x2f, 0x41, 0xe2, 0xce, 0x2f, - 0x41, 0xd0, 0xbf, 0x2f, 0x01, 0xd1, 0xc0, 0x2f, 0x01, 0xd2, 0xc1, 0x2f, - 0x01, 0xd3, 0xc2, 0x2f, 0x01, 0xd4, 0xc3, 0x2f, 0x01, 0xd6, 0xc4, 0x2f, - 0x01, 0xd7, 0xc5, 0x2f, 0x01, 0xd8, 0xc6, 0x2f, 0x01, 0xd9, 0xc7, 0x2f, - 0x41, 0xd0, 0xb6, 0x2f, 0x01, 0xd1, 0xb7, 0x2f, 0x01, 0xd2, 0xb8, 0x2f, - 0x01, 0xd3, 0xb9, 0x2f, 0x01, 0xd4, 0xba, 0x2f, 0x01, 0xd5, 0xbb, 0x2f, - 0x01, 0xd6, 0xbc, 0x2f, 0x01, 0xd8, 0xbd, 0x2f, 0x01, 0xd9, 0xbe, 0x2f, - 0x41, 0xd0, 0xb0, 0x2f, 0x01, 0xd1, 0xb1, 0x2f, 0x01, 0xd4, 0xb2, 0x2f, - 0x01, 0xd6, 0xb3, 0x2f, 0x01, 0xd7, 0xb4, 0x2f, 0x01, 0xd9, 0xb5, 0x2f, - 0x41, 0xd0, 0xa8, 0x2f, 0x01, 0xd3, 0xa9, 0x2f, 0x01, 0xd4, 0xaa, 0x2f, - 0x01, 0xd5, 0xab, 0x2f, 0x01, 0xd6, 0xac, 0x2f, 0x01, 0xd7, 0xad, 0x2f, - 0x01, 0xd8, 0xae, 0x2f, 0x01, 0xd9, 0xaf, 0x2f, 0x41, 0xd1, 0xa0, 0x2f, - 0x01, 0xd3, 0xa1, 0x2f, 0x01, 0xd4, 0xa2, 0x2f, 0x01, 0xd5, 0xa3, 0x2f, - 0x01, 0xd6, 0xa4, 0x2f, 0x01, 0xd7, 0xa5, 0x2f, 0x01, 0xd8, 0xa6, 0x2f, - 0x01, 0xd9, 0xa7, 0x2f, 0x41, 0xd0, 0x98, 0x2f, 0x01, 0xd1, 0x99, 0x2f, - 0x01, 0xd2, 0x9a, 0x2f, 0x81, 0x10, 0xd3, 0x9c, 0x2f, 0x01, 0xd5, 0x9d, - 0x2f, 0x01, 0xd7, 0x9e, 0x2f, 0x01, 0xd9, 0x9f, 0x2f, 0x41, 0xe2, 0x9b, - 0x2f, 0x41, 0xd1, 0x90, 0x2f, 0x01, 0xd2, 0x91, 0x2f, 0x01, 0xd4, 0x92, - 0x2f, 0x01, 0xd5, 0x93, 0x2f, 0x01, 0xd6, 0x94, 0x2f, 0x01, 0xd7, 0x95, - 0x2f, 0x01, 0xd8, 0x96, 0x2f, 0x01, 0xd9, 0x97, 0x2f, 0x41, 0xe1, 0x00, - 0x08, 0x01, 0xe5, 0x01, 0x08, 0x01, 0xe9, 0x02, 0x08, 0x01, 0xaa, 0xe3, - 0x01, 0xab, 0xcc, 0x01, 0xac, 0xb5, 0x01, 0xad, 0x9e, 0x01, 0xae, 0x87, - 0x01, 0xef, 0x03, 0x08, 0x01, 0xb0, 0x6d, 0xb2, 0x57, 0xb3, 0x41, 0xb4, - 0x2b, 0xf5, 0x04, 0x08, 0x01, 0xb7, 0x15, 0xb8, 0x0b, 0xba, 0x01, 0xff, - 0xe1, 0x3c, 0x08, 0x01, 0xef, 0x3f, 0x08, 0x41, 0xe1, 0x37, 0x08, 0x01, - 0xe5, 0x38, 0x08, 0x41, 0xe1, 0x32, 0x08, 0x01, 0xe5, 0x33, 0x08, 0x01, - 0xe9, 0x34, 0x08, 0x01, 0xef, 0x35, 0x08, 0x41, 0xe1, 0x2d, 0x08, 0x01, - 0xe5, 0x2e, 0x08, 0x01, 0xe9, 0x2f, 0x08, 0x01, 0xef, 0x30, 0x08, 0x01, - 0xf5, 0x31, 0x08, 0x41, 0xe1, 0x28, 0x08, 0x01, 0xe5, 0x29, 0x08, 0x01, - 0xe9, 0x2a, 0x08, 0x01, 0xef, 0x2b, 0x08, 0x01, 0xf5, 0x2c, 0x08, 0x41, - 0xe1, 0x23, 0x08, 0x01, 0xe5, 0x24, 0x08, 0x01, 0xe9, 0x25, 0x08, 0x01, - 0xef, 0x26, 0x08, 0x01, 0xf5, 0x27, 0x08, 0x41, 0xe1, 0x1e, 0x08, 0x01, - 0xe5, 0x1f, 0x08, 0x01, 0xe9, 0x20, 0x08, 0x01, 0xef, 0x21, 0x08, 0x01, - 0xf5, 0x22, 0x08, 0x41, 0xe1, 0x19, 0x08, 0x01, 0xe5, 0x1a, 0x08, 0x01, - 0xe9, 0x1b, 0x08, 0x01, 0xef, 0x1c, 0x08, 0x01, 0xf5, 0x1d, 0x08, 0x41, - 0xe1, 0x14, 0x08, 0x01, 0xe5, 0x15, 0x08, 0x01, 0xe9, 0x16, 0x08, 0x01, - 0xef, 0x17, 0x08, 0x01, 0xf5, 0x18, 0x08, 0x41, 0xe1, 0x0f, 0x08, 0x01, - 0xe5, 0x10, 0x08, 0x01, 0xe9, 0x11, 0x08, 0x01, 0xef, 0x12, 0x08, 0x01, - 0xf5, 0x13, 0x08, 0x41, 0xe1, 0x0a, 0x08, 0x01, 0xe5, 0x0b, 0x08, 0x01, - 0xe9, 0x0c, 0x08, 0x01, 0xef, 0x0d, 0x08, 0x01, 0xf5, 0x0e, 0x08, 0x41, - 0xe1, 0x05, 0x08, 0x01, 0xef, 0x08, 0x08, 0x41, 0x47, 0x31, 0xb5, 0x1b, - 0x22, 0x00, 0x46, 0xde, 0xd7, 0x52, 0xf9, 0x01, 0x08, 0x02, 0xc6, 0x80, - 0x01, 0xb0, 0x64, 0xb2, 0x16, 0x02, 0x60, 0x01, 0x06, 0x49, 0x0f, 0xbd, - 0x69, 0xf9, 0x41, 0x43, 0xaa, 0x01, 0x6e, 0xf3, 0x01, 0x43, 0x88, 0x65, - 0xc3, 0xf6, 0x41, 0xac, 0x1e, 0xb2, 0x06, 0x60, 0x25, 0x10, 0x61, 0x27, - 0x40, 0x05, 0x5f, 0x40, 0x06, 0x4a, 0x7f, 0xb1, 0x5b, 0xf3, 0x41, 0x48, - 0x82, 0xc3, 0xb1, 0xf4, 0x01, 0x44, 0x2f, 0x03, 0xa4, 0x00, 0x40, 0x49, - 0x2c, 0xb8, 0x4c, 0xf9, 0x01, 0x02, 0x09, 0x00, 0x01, 0xff, 0x51, 0x4e, - 0x57, 0xaa, 0x23, 0x00, 0x02, 0x13, 0x01, 0x01, 0xff, 0x06, 0xa5, 0x21, - 0x06, 0x42, 0x1f, 0x00, 0xb0, 0x27, 0x40, 0x43, 0x1a, 0x00, 0xcf, 0x22, - 0x00, 0x42, 0x0c, 0x00, 0xce, 0x22, 0x40, 0x80, 0x0c, 0x44, 0xbe, 0x2b, - 0xc1, 0xf9, 0x01, 0x43, 0xbc, 0x64, 0xe0, 0x2b, 0x40, 0x4f, 0x49, 0x5e, - 0xfe, 0x26, 0x00, 0x4a, 0x4d, 0xb1, 0x64, 0xf9, 0x41, 0x0d, 0xe4, 0x84, - 0xfa, 0x37, 0x11, 0xf4, 0x5b, 0xd3, 0x37, 0x05, 0x2f, 0x03, 0x01, 0xff, - 0xe1, 0x00, 0x20, 0x81, 0xf8, 0x33, 0xa2, 0xd1, 0x32, 0xa4, 0x9b, 0x2e, - 0xe5, 0x8a, 0x20, 0x81, 0x9f, 0x2b, 0xa7, 0xe1, 0x23, 0xa8, 0xc2, 0x22, - 0xe9, 0x3f, 0x21, 0x81, 0xb3, 0x21, 0xab, 0xad, 0x1c, 0xac, 0x86, 0x13, - 0xad, 0xab, 0x11, 0xae, 0xaa, 0x0d, 0xb0, 0xa0, 0x0c, 0xb2, 0x8c, 0x0c, - 0xb3, 0x95, 0x07, 0xb4, 0xb2, 0x05, 0xf5, 0x0b, 0x23, 0x81, 0x77, 0xba, - 0x01, 0xff, 0xe1, 0x5d, 0x23, 0x81, 0x53, 0x42, 0x58, 0x99, 0x62, 0x23, - 0x01, 0xe9, 0x63, 0x23, 0x81, 0x29, 0xf5, 0x6a, 0x23, 0xc1, 0x00, 0x51, - 0xe9, 0x55, 0x42, 0x25, 0x01, 0xd5, 0x6b, 0x23, 0x81, 0x0a, 0x43, 0x37, - 0x35, 0x6d, 0x23, 0x01, 0xed, 0x6e, 0x23, 0x41, 0x07, 0x27, 0x02, 0x01, - 0xff, 0xe1, 0x6c, 0x23, 0x01, 0x4f, 0x16, 0x72, 0x43, 0x25, 0x41, 0x48, - 0xd2, 0xbf, 0x64, 0x23, 0x01, 0xd3, 0x65, 0x23, 0x01, 0xe2, 0x66, 0x23, - 0x81, 0x0a, 0xe7, 0x68, 0x23, 0x01, 0x42, 0x18, 0xf0, 0x69, 0x23, 0x41, - 0x4a, 0x97, 0xa3, 0x67, 0x23, 0x41, 0x80, 0x0e, 0xd7, 0x41, 0x25, 0x01, - 0xe7, 0x60, 0x23, 0x01, 0x42, 0x60, 0xf1, 0x61, 0x23, 0x41, 0x51, 0x8d, - 0x5c, 0x5f, 0x23, 0x01, 0x44, 0x06, 0x5f, 0x5e, 0x23, 0x41, 0x80, 0x8c, - 0x04, 0xd2, 0x11, 0x23, 0x01, 0xe2, 0x12, 0x23, 0x01, 0xe4, 0x13, 0x23, - 0x81, 0xbf, 0x03, 0xed, 0x1d, 0x23, 0x81, 0xfa, 0x02, 0xee, 0x26, 0x23, - 0x81, 0xee, 0x02, 0xf2, 0x28, 0x23, 0x81, 0x46, 0x42, 0xa4, 0x02, 0x51, - 0x23, 0x81, 0x18, 0x44, 0x72, 0xef, 0x59, 0x23, 0x01, 0xba, 0x01, 0xff, - 0xd3, 0x5a, 0x23, 0x81, 0x04, 0xf5, 0x5c, 0x23, 0x41, 0x4d, 0x3d, 0x7e, - 0x5b, 0x23, 0x41, 0x07, 0x27, 0x02, 0x0e, 0xd2, 0x57, 0x23, 0x01, 0x43, - 0x5f, 0xf1, 0x58, 0x23, 0x01, 0xf8, 0x56, 0x23, 0x41, 0xe1, 0x52, 0x23, - 0x01, 0x42, 0xd3, 0x03, 0x53, 0x23, 0x81, 0x06, 0x44, 0xef, 0x43, 0x55, - 0x23, 0x41, 0xf2, 0x54, 0x23, 0x41, 0x80, 0x94, 0x02, 0xd2, 0x2b, 0x23, - 0x81, 0xc1, 0x01, 0xd4, 0x34, 0x23, 0x01, 0xe9, 0x35, 0x23, 0x81, 0xb3, - 0x01, 0xf5, 0x37, 0x23, 0xc1, 0x00, 0x07, 0x27, 0x02, 0x0d, 0x42, 0xa1, - 0x10, 0x4f, 0x23, 0xc1, 0x00, 0x48, 0x27, 0x02, 0x50, 0x23, 0x41, 0xe1, - 0x38, 0x23, 0x81, 0x91, 0x01, 0x43, 0x16, 0x00, 0x3a, 0x23, 0x01, 0xa4, - 0x7d, 0xa7, 0x64, 0x42, 0x22, 0x00, 0x41, 0x23, 0x01, 0xa9, 0x4c, 0x42, - 0x45, 0x00, 0x45, 0x23, 0x01, 0xac, 0x33, 0x43, 0x7c, 0x13, 0x47, 0x23, - 0x01, 0x42, 0x6c, 0x09, 0x48, 0x23, 0x01, 0xb3, 0x19, 0x42, 0x5c, 0x01, - 0x4b, 0x23, 0x01, 0xb5, 0x01, 0xff, 0x49, 0x3b, 0xb2, 0x4c, 0x23, 0x01, - 0xe4, 0x4d, 0x23, 0x01, 0x44, 0x41, 0xc9, 0x4e, 0x23, 0x41, 0x42, 0xb0, - 0x01, 0x49, 0x23, 0x01, 0x43, 0x09, 0x68, 0x4a, 0x23, 0x41, 0x46, 0xbe, - 0xd6, 0x3f, 0x25, 0x01, 0xb5, 0x01, 0xff, 0xd3, 0x40, 0x25, 0x01, 0xed, - 0x46, 0x23, 0x41, 0x42, 0xc6, 0x06, 0x42, 0x23, 0x01, 0xed, 0x43, 0x23, - 0x01, 0x42, 0xa4, 0x02, 0x44, 0x23, 0x41, 0xe1, 0x3c, 0x23, 0x81, 0x04, - 0xf5, 0x40, 0x23, 0x41, 0xec, 0x3d, 0x23, 0x01, 0x47, 0x13, 0x5f, 0x3e, - 0x23, 0x01, 0xf2, 0x3f, 0x23, 0x41, 0x44, 0xda, 0xeb, 0x3e, 0x25, 0x01, - 0x42, 0xf3, 0x0a, 0x3b, 0x23, 0x41, 0x45, 0x07, 0xd7, 0x39, 0x23, 0x41, - 0xd3, 0x36, 0x23, 0x41, 0x80, 0x01, 0xff, 0x48, 0xd6, 0x22, 0x3c, 0x25, - 0x01, 0x06, 0x28, 0x02, 0x01, 0xff, 0xa1, 0x29, 0x42, 0x22, 0x00, 0x2f, - 0x23, 0x01, 0x43, 0x54, 0x22, 0x30, 0x23, 0x01, 0xb5, 0x01, 0xff, 0xd2, - 0x31, 0x23, 0x81, 0x04, 0xe4, 0x3d, 0x25, 0x41, 0x06, 0xb6, 0x27, 0x01, - 0xff, 0x43, 0xce, 0x03, 0x32, 0x23, 0x01, 0x42, 0xba, 0x06, 0x33, 0x23, - 0x41, 0x06, 0xb6, 0x27, 0x04, 0xec, 0x2e, 0x23, 0x41, 0x42, 0x22, 0x00, - 0x2c, 0x23, 0x01, 0x42, 0xff, 0x04, 0x2d, 0x23, 0x41, 0x4b, 0x7c, 0x98, - 0x29, 0x23, 0x01, 0x47, 0xba, 0x7a, 0x2a, 0x23, 0x41, 0x45, 0xd6, 0x3e, - 0x27, 0x23, 0x41, 0x07, 0x27, 0x02, 0x1e, 0x43, 0xc9, 0x15, 0x22, 0x23, - 0x01, 0x42, 0x1d, 0x04, 0x23, 0x23, 0xc1, 0x00, 0x07, 0x27, 0x02, 0x01, - 0xff, 0x46, 0x1b, 0x02, 0x24, 0x23, 0x01, 0x42, 0x6c, 0x09, 0x25, 0x23, - 0x41, 0x45, 0x22, 0x02, 0x1e, 0x23, 0x01, 0x42, 0x2a, 0x02, 0x98, 0x23, - 0x81, 0x0a, 0x44, 0x00, 0x56, 0x20, 0x23, 0x01, 0xf5, 0x21, 0x23, 0x41, - 0x48, 0x8b, 0x56, 0x1f, 0x23, 0x41, 0x80, 0x06, 0x42, 0x83, 0x0e, 0x1c, - 0x23, 0x41, 0x44, 0xd7, 0x3e, 0x19, 0x23, 0x01, 0x46, 0x84, 0xda, 0x14, - 0x23, 0x01, 0x47, 0xba, 0x7a, 0x1a, 0x23, 0x81, 0x1e, 0x06, 0x28, 0x02, - 0x01, 0xff, 0x43, 0x4f, 0x6f, 0x15, 0x23, 0x01, 0x42, 0x7d, 0x02, 0x16, - 0x23, 0x01, 0x4f, 0x8e, 0x72, 0x17, 0x23, 0xc1, 0x00, 0x45, 0xd6, 0x3e, - 0x18, 0x23, 0x41, 0x4a, 0x06, 0x9b, 0x1b, 0x23, 0x41, 0x43, 0x8b, 0x79, - 0x0c, 0x23, 0x01, 0x07, 0xd7, 0x21, 0x0b, 0xf5, 0x99, 0x23, 0xc1, 0x00, - 0x42, 0x2d, 0x02, 0x0d, 0x23, 0x41, 0x57, 0x6c, 0x2f, 0x0e, 0x23, 0x01, - 0x4c, 0xb5, 0x93, 0x0f, 0x23, 0x01, 0x5a, 0xcc, 0x21, 0x10, 0x23, 0x41, - 0xe1, 0xeb, 0x22, 0x81, 0x69, 0xe5, 0xfc, 0x22, 0x81, 0x5e, 0xe9, 0xfe, - 0x22, 0x81, 0x30, 0xf5, 0x05, 0x23, 0xc1, 0x00, 0x42, 0x84, 0x0e, 0x06, - 0x23, 0x01, 0xeb, 0x07, 0x23, 0x01, 0xed, 0x08, 0x23, 0x81, 0x0b, 0xf2, - 0x09, 0x23, 0xc1, 0x00, 0x54, 0xdf, 0x3e, 0x0a, 0x23, 0x41, 0x07, 0x27, - 0x02, 0x01, 0xff, 0x49, 0x11, 0x5f, 0x3a, 0x25, 0x01, 0x4a, 0x16, 0x72, - 0x3b, 0x25, 0x41, 0x45, 0x05, 0x5f, 0xff, 0x22, 0x01, 0xd2, 0x97, 0x23, - 0x01, 0xec, 0x00, 0x23, 0x01, 0xf2, 0x01, 0x23, 0xc1, 0x00, 0x80, 0x01, - 0xff, 0x48, 0x02, 0xc7, 0x03, 0x23, 0x81, 0x06, 0x4a, 0xe9, 0x43, 0x02, - 0x23, 0x41, 0x5a, 0xbc, 0x1d, 0x04, 0x23, 0x41, 0x45, 0xd6, 0x3e, 0xfd, - 0x22, 0x41, 0x80, 0x53, 0xe2, 0xf0, 0x22, 0x81, 0x3f, 0xe7, 0xf3, 0x22, - 0x81, 0x11, 0x42, 0xf1, 0x43, 0xfa, 0x22, 0x81, 0x04, 0xf2, 0xfb, 0x22, - 0x41, 0x49, 0x56, 0xb2, 0x39, 0x25, 0x41, 0x07, 0x27, 0x02, 0x01, 0xff, - 0x42, 0xba, 0x06, 0xf4, 0x22, 0x01, 0x43, 0x8b, 0x79, 0xf5, 0x22, 0x01, - 0x02, 0xa4, 0x02, 0x0c, 0x44, 0x82, 0x0e, 0xf8, 0x22, 0x01, 0x42, 0x63, - 0x0c, 0xf9, 0x22, 0x41, 0xe5, 0xf6, 0x22, 0x01, 0xf5, 0xf7, 0x22, 0x41, - 0x80, 0x01, 0xff, 0x62, 0x6d, 0x0c, 0xf1, 0x22, 0x01, 0x47, 0xab, 0x05, - 0xf2, 0x22, 0x41, 0x48, 0xed, 0x0c, 0xec, 0x22, 0x01, 0x44, 0xd7, 0x3e, - 0xef, 0x22, 0x01, 0x06, 0x28, 0x02, 0x01, 0xff, 0x42, 0x49, 0x00, 0xed, - 0x22, 0x01, 0x42, 0x7d, 0x02, 0xee, 0x22, 0x41, 0xe1, 0x93, 0x22, 0x81, - 0xb3, 0x03, 0xa8, 0x5d, 0xe9, 0xdb, 0x22, 0x81, 0x2e, 0xf5, 0xe2, 0x22, - 0xc1, 0x00, 0x48, 0xb8, 0x93, 0xe3, 0x22, 0x01, 0xe4, 0xe4, 0x22, 0x81, - 0x1a, 0x43, 0x41, 0x00, 0xe6, 0x22, 0x01, 0xed, 0xe7, 0x22, 0x81, 0x09, - 0xf2, 0xe9, 0x22, 0xc1, 0x00, 0xd9, 0xea, 0x22, 0x41, 0x43, 0xce, 0x03, - 0xe8, 0x22, 0x41, 0xd2, 0xe5, 0x22, 0x41, 0x80, 0x1c, 0xe7, 0xdd, 0x22, - 0x81, 0x0c, 0x42, 0xf5, 0xa9, 0xe0, 0x22, 0x01, 0x43, 0xd9, 0xe7, 0xe1, - 0x22, 0x41, 0xd4, 0xde, 0x22, 0xc1, 0x00, 0x4f, 0x02, 0x68, 0xdf, 0x22, - 0x41, 0x44, 0xd7, 0x3e, 0xdc, 0x22, 0x01, 0x4a, 0xe9, 0x43, 0x38, 0x25, - 0x41, 0xe1, 0xad, 0x22, 0x81, 0x80, 0x02, 0xe5, 0xba, 0x22, 0x81, 0xaa, - 0x01, 0xa9, 0x27, 0xf5, 0xd7, 0x22, 0xc1, 0x00, 0x52, 0x20, 0x4e, 0xd8, - 0x22, 0x01, 0xd2, 0xd9, 0x22, 0x81, 0x06, 0x43, 0x37, 0x35, 0xda, 0x22, - 0x41, 0x06, 0xb6, 0x27, 0x01, 0xff, 0x4c, 0x95, 0x8c, 0x36, 0x25, 0x01, - 0x4b, 0x58, 0x99, 0x37, 0x25, 0x41, 0xe4, 0xc3, 0x22, 0x81, 0x6d, 0xed, - 0xc6, 0x22, 0x81, 0x20, 0x43, 0xa0, 0x33, 0xd2, 0x22, 0x01, 0xf2, 0xd3, - 0x22, 0x81, 0x06, 0x42, 0x12, 0x00, 0xd6, 0x22, 0x41, 0x80, 0x01, 0xff, - 0x56, 0x43, 0x35, 0xd5, 0x22, 0x01, 0x44, 0x06, 0x5f, 0xd4, 0x22, 0x41, - 0x07, 0x27, 0x02, 0x01, 0xff, 0xe1, 0xc7, 0x22, 0x01, 0xa2, 0x31, 0x43, - 0xd9, 0x05, 0xca, 0x22, 0x01, 0x43, 0xca, 0x1d, 0xcb, 0x22, 0x01, 0x43, - 0xc5, 0x06, 0xcc, 0x22, 0x81, 0x18, 0x46, 0x84, 0xda, 0xce, 0x22, 0x01, - 0x43, 0x26, 0xf1, 0xcf, 0x22, 0x01, 0x43, 0x41, 0xb4, 0xd0, 0x22, 0x01, - 0x43, 0x16, 0x0d, 0xd1, 0x22, 0x41, 0x45, 0xd6, 0x3e, 0xcd, 0x22, 0x41, - 0x42, 0x13, 0x00, 0xc8, 0x22, 0x01, 0x44, 0x97, 0x95, 0xc9, 0x22, 0x41, - 0x07, 0x27, 0x02, 0x01, 0xff, 0xe1, 0xc4, 0x22, 0x01, 0x42, 0x29, 0x02, - 0xc5, 0x22, 0x41, 0x80, 0x1b, 0x42, 0xcc, 0xf1, 0xbe, 0x22, 0x01, 0xee, - 0xbf, 0x22, 0x01, 0x42, 0xa4, 0x02, 0xc0, 0x22, 0xc1, 0x00, 0xd2, 0xc1, - 0x22, 0x01, 0x43, 0xb0, 0x00, 0xc2, 0x22, 0x41, 0x42, 0x41, 0x00, 0xbb, - 0x22, 0x01, 0x48, 0xfa, 0xc6, 0x32, 0x25, 0x81, 0x17, 0x05, 0xb7, 0x27, - 0x01, 0xff, 0x44, 0x1e, 0xed, 0x33, 0x25, 0x01, 0x44, 0x1a, 0xee, 0x34, - 0x25, 0x01, 0x43, 0xa3, 0x4a, 0x35, 0x25, 0x41, 0x80, 0x01, 0xff, 0x59, - 0xbd, 0x1d, 0xbc, 0x22, 0x01, 0x59, 0xd2, 0x25, 0xbd, 0x22, 0x41, 0xd3, - 0xae, 0x22, 0x81, 0x17, 0xd6, 0xb7, 0x22, 0x81, 0x0c, 0x42, 0x70, 0xf0, - 0xb8, 0x22, 0x01, 0x42, 0xc5, 0x41, 0xb9, 0x22, 0x41, 0x45, 0x05, 0x5f, - 0x31, 0x25, 0x41, 0x07, 0x27, 0x02, 0x01, 0xff, 0xe1, 0xaf, 0x22, 0x01, - 0x43, 0x4f, 0x6f, 0xb0, 0x22, 0x01, 0x44, 0xe4, 0x43, 0xb1, 0x22, 0x01, - 0x42, 0xa2, 0x05, 0xb2, 0x22, 0x01, 0x44, 0x8a, 0x65, 0xb3, 0x22, 0x01, - 0x43, 0x5c, 0x01, 0xb4, 0x22, 0x01, 0xf5, 0xb5, 0x22, 0xc1, 0x00, 0x47, - 0xb6, 0x27, 0xb6, 0x22, 0x41, 0xe7, 0x95, 0x22, 0x81, 0x15, 0xec, 0xa9, - 0x22, 0x81, 0x0a, 0x44, 0x36, 0xee, 0xab, 0x22, 0x01, 0xf2, 0xac, 0x22, - 0x41, 0x51, 0xc7, 0x55, 0xaa, 0x22, 0x41, 0x80, 0x01, 0xff, 0x44, 0xd7, - 0x3e, 0xa8, 0x22, 0x81, 0x90, 0x01, 0x47, 0xa3, 0xbf, 0x94, 0x22, 0x01, - 0x48, 0xf2, 0xc6, 0xa7, 0x22, 0x01, 0x06, 0x28, 0x02, 0x01, 0xff, 0xe1, - 0x96, 0x22, 0x01, 0x42, 0x6c, 0x02, 0x97, 0x22, 0x81, 0x70, 0x42, 0x92, - 0x01, 0x2e, 0x25, 0x01, 0x42, 0x22, 0x00, 0x99, 0x22, 0x01, 0x48, 0x54, - 0x68, 0x96, 0x23, 0x01, 0xab, 0x50, 0x43, 0x2f, 0xb2, 0x9c, 0x22, 0x01, - 0x42, 0x7d, 0x02, 0x9d, 0x22, 0x01, 0x43, 0x54, 0x22, 0x9e, 0x22, 0x01, - 0xb3, 0x27, 0x02, 0x12, 0x00, 0x19, 0xb5, 0x01, 0xff, 0xd2, 0xa2, 0x22, - 0x01, 0xe2, 0xa3, 0x22, 0x01, 0xed, 0xa4, 0x22, 0x01, 0xf2, 0xa5, 0x22, - 0x01, 0x42, 0xa4, 0x02, 0xa6, 0x22, 0x41, 0xe2, 0xa1, 0x22, 0x01, 0x42, - 0xf1, 0x43, 0x30, 0x25, 0x41, 0x42, 0x13, 0x00, 0x9f, 0x22, 0x01, 0xa8, - 0x01, 0xff, 0x49, 0xa4, 0xb5, 0x2f, 0x25, 0x01, 0x42, 0x03, 0x00, 0xa0, - 0x22, 0x41, 0x42, 0x6d, 0x00, 0x9a, 0x22, 0x01, 0x42, 0x42, 0x00, 0x9b, - 0x22, 0x41, 0xe2, 0x98, 0x22, 0x41, 0x49, 0x95, 0xb2, 0x2d, 0x25, 0x41, - 0xe1, 0x8f, 0x22, 0x81, 0x08, 0xe9, 0x91, 0x22, 0x01, 0xf5, 0x92, 0x22, - 0x41, 0xe2, 0x90, 0x22, 0x41, 0xe1, 0x7a, 0x22, 0x81, 0x76, 0x44, 0xe0, - 0x73, 0x7e, 0x22, 0x81, 0x69, 0xe9, 0x7f, 0x22, 0xc1, 0x00, 0x80, 0x2e, - 0xb2, 0x01, 0xff, 0xd2, 0x95, 0x23, 0x01, 0x42, 0x3f, 0x00, 0x8a, 0x22, - 0xc1, 0x00, 0x80, 0x01, 0xff, 0x4e, 0x16, 0x79, 0x8e, 0x22, 0x01, 0x06, - 0x28, 0x02, 0x01, 0xff, 0x43, 0x1e, 0x02, 0x8b, 0x22, 0x01, 0x42, 0x63, - 0x0c, 0x8c, 0x22, 0x01, 0x42, 0x59, 0x00, 0x8d, 0x22, 0x41, 0x4b, 0x71, - 0x98, 0x89, 0x22, 0x01, 0x06, 0x28, 0x02, 0x01, 0xff, 0xe1, 0x80, 0x22, - 0x81, 0x20, 0xa2, 0x16, 0xe5, 0x84, 0x22, 0x01, 0xe9, 0x85, 0x22, 0x81, - 0x09, 0xf5, 0x87, 0x22, 0xc1, 0x00, 0xd2, 0x88, 0x22, 0x41, 0xe2, 0x86, - 0x22, 0x41, 0xe9, 0x82, 0x22, 0x01, 0xf5, 0x83, 0x22, 0x41, 0xe2, 0x81, - 0x22, 0x41, 0x49, 0xec, 0x0c, 0x94, 0x23, 0x41, 0xe4, 0x7b, 0x22, 0x01, - 0xee, 0x7c, 0x22, 0x01, 0xf0, 0x7d, 0x22, 0x41, 0xe1, 0x3e, 0x22, 0x81, - 0xc2, 0x03, 0xe5, 0x48, 0x22, 0x81, 0xa4, 0x03, 0xe9, 0x4c, 0x22, 0x81, - 0xbc, 0x01, 0xf5, 0x61, 0x22, 0xc1, 0x00, 0x42, 0x34, 0x35, 0x62, 0x22, - 0x81, 0x9a, 0x01, 0xee, 0x63, 0x22, 0xc1, 0x00, 0x80, 0x57, 0x42, 0x63, - 0x51, 0x6d, 0x22, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x0a, 0x09, 0xa5, 0x0d, - 0x4f, 0x75, 0x6d, 0x78, 0x22, 0xc1, 0x00, 0x42, 0x2d, 0x02, 0x79, 0x22, - 0x41, 0x46, 0x06, 0xd7, 0x6e, 0x22, 0x01, 0x42, 0xba, 0x06, 0x6f, 0x22, - 0x01, 0x43, 0x95, 0x8c, 0x70, 0x22, 0x01, 0x43, 0x8b, 0x79, 0x71, 0x22, - 0x01, 0x48, 0x54, 0x68, 0x72, 0x22, 0x01, 0x44, 0x82, 0xed, 0x73, 0x22, - 0x01, 0x42, 0x74, 0x00, 0x74, 0x22, 0x01, 0x42, 0xa2, 0x05, 0x75, 0x22, - 0x01, 0x45, 0xd7, 0xe7, 0x76, 0x22, 0x01, 0x42, 0x8c, 0x65, 0x77, 0x22, - 0x41, 0x4c, 0xf9, 0x8b, 0x6b, 0x22, 0x81, 0x2f, 0x0c, 0x58, 0x22, 0x0c, - 0x48, 0x4f, 0x22, 0x6a, 0x22, 0x01, 0x44, 0x06, 0x5f, 0x69, 0x22, 0x41, - 0x43, 0xca, 0x1d, 0x64, 0x22, 0x01, 0x44, 0x61, 0x06, 0x65, 0x22, 0x01, - 0x43, 0x16, 0x0d, 0x66, 0x22, 0x81, 0x06, 0x43, 0xcf, 0x7a, 0x68, 0x22, - 0x41, 0x59, 0x4e, 0x22, 0x67, 0x22, 0x41, 0x51, 0xd8, 0x55, 0x6c, 0x22, - 0x41, 0x80, 0x01, 0xff, 0x56, 0x2d, 0x35, 0xd5, 0x22, 0x01, 0x56, 0x03, - 0x2c, 0x93, 0x23, 0x01, 0x44, 0x06, 0x5f, 0xd4, 0x22, 0x41, 0x48, 0xe8, - 0x95, 0x4d, 0x22, 0x01, 0xd2, 0x4e, 0x22, 0x01, 0xed, 0x4f, 0x22, 0x81, - 0xc1, 0x01, 0xee, 0x8f, 0x23, 0x81, 0x06, 0x43, 0x21, 0x87, 0x60, 0x22, - 0x41, 0xd9, 0x90, 0x23, 0x01, 0x43, 0xc6, 0xf0, 0x52, 0x22, 0xc1, 0x00, - 0x07, 0x27, 0x02, 0x01, 0xff, 0xa1, 0x92, 0x01, 0x43, 0x46, 0x1c, 0x91, - 0x23, 0x01, 0x48, 0x9a, 0xc2, 0x22, 0x25, 0x01, 0xa7, 0x6e, 0x42, 0x49, - 0x00, 0x25, 0x25, 0x01, 0x45, 0xbc, 0xe4, 0x26, 0x25, 0x01, 0x47, 0xd2, - 0xcf, 0x27, 0x25, 0x01, 0xad, 0x4e, 0xae, 0x42, 0x4c, 0xac, 0x3c, 0x29, - 0x25, 0x01, 0x43, 0x63, 0x06, 0x5a, 0x22, 0x81, 0x1d, 0xf5, 0x2a, 0x25, - 0xc1, 0x00, 0x47, 0x8f, 0x72, 0x2b, 0x25, 0x01, 0x4a, 0xaf, 0xa4, 0x5e, - 0x22, 0x01, 0x44, 0x41, 0xc9, 0x2c, 0x25, 0x01, 0x42, 0xa4, 0x02, 0x5f, - 0x22, 0x41, 0x07, 0xb6, 0x27, 0x01, 0xff, 0x43, 0x19, 0x00, 0x5b, 0x22, - 0x01, 0x42, 0xa4, 0x02, 0x5c, 0x22, 0xc1, 0x00, 0x49, 0xcf, 0x4b, 0x5d, - 0x22, 0x41, 0xe5, 0x58, 0x22, 0x01, 0x42, 0xf3, 0x0a, 0x59, 0x22, 0x41, - 0x43, 0xce, 0x03, 0x28, 0x25, 0x01, 0x50, 0xfa, 0x60, 0x57, 0x22, 0x41, - 0xe9, 0x92, 0x23, 0x81, 0x0b, 0xb5, 0x01, 0xff, 0xe4, 0x56, 0x22, 0x01, - 0xec, 0x24, 0x25, 0x41, 0x42, 0xa4, 0x02, 0x23, 0x25, 0x41, 0xee, 0x53, - 0x22, 0x01, 0x42, 0xa4, 0x02, 0x54, 0x22, 0xc1, 0x00, 0x49, 0xcf, 0x4b, - 0x55, 0x22, 0x41, 0x09, 0xc7, 0x41, 0x01, 0xff, 0x47, 0x13, 0x5f, 0x50, - 0x22, 0x01, 0x50, 0xaa, 0x64, 0x51, 0x22, 0x41, 0x80, 0x01, 0xff, 0x47, - 0xba, 0x7a, 0x4b, 0x22, 0x01, 0x06, 0x28, 0x02, 0x01, 0xff, 0xe1, 0x49, - 0x22, 0x01, 0x42, 0x63, 0x0c, 0x4a, 0x22, 0x41, 0xd2, 0x3f, 0x22, 0x01, - 0xd4, 0x8e, 0x23, 0x01, 0x42, 0x24, 0x02, 0x40, 0x22, 0x81, 0x0f, 0xed, - 0x46, 0x22, 0xc1, 0x00, 0x48, 0xa2, 0xbf, 0x45, 0x22, 0x01, 0xd2, 0x47, - 0x22, 0x41, 0x80, 0x04, 0xf2, 0x44, 0x22, 0x41, 0x48, 0xd6, 0x22, 0x41, - 0x22, 0x01, 0x4d, 0x66, 0x85, 0x43, 0x22, 0x01, 0x4e, 0xc4, 0x7b, 0x42, - 0x22, 0x41, 0xe1, 0x20, 0x22, 0x81, 0xad, 0x01, 0xe5, 0x28, 0x22, 0x81, - 0x9e, 0x01, 0xe9, 0x2a, 0x22, 0x81, 0x8e, 0x01, 0xf5, 0x2c, 0x22, 0xc1, - 0x00, 0x48, 0xca, 0xbf, 0x2d, 0x22, 0x01, 0xe7, 0x2e, 0x22, 0x81, 0x78, - 0x44, 0x56, 0xee, 0x30, 0x22, 0x01, 0x44, 0xfa, 0xee, 0x31, 0x22, 0x01, - 0x42, 0xa4, 0x02, 0x32, 0x22, 0xc1, 0x00, 0x80, 0x2a, 0xd3, 0x39, 0x22, - 0xc1, 0x00, 0x80, 0x01, 0xff, 0x44, 0xd7, 0x3e, 0x3d, 0x22, 0x01, 0x06, - 0x28, 0x02, 0x01, 0xff, 0xe1, 0x3a, 0x22, 0x81, 0x0c, 0x42, 0x00, 0x00, - 0x3c, 0x22, 0x01, 0x42, 0x59, 0x00, 0x8d, 0x23, 0x41, 0x48, 0xda, 0xbf, - 0x3b, 0x22, 0x41, 0x4d, 0x38, 0x80, 0x38, 0x22, 0x01, 0x49, 0x4d, 0xbb, - 0x36, 0x22, 0x81, 0x15, 0x06, 0x28, 0x02, 0x01, 0xff, 0xe1, 0x33, 0x22, - 0x01, 0x43, 0x9b, 0x5c, 0x34, 0x22, 0x01, 0x42, 0x59, 0x00, 0x35, 0x22, - 0x41, 0x07, 0x27, 0x02, 0x01, 0xff, 0x49, 0x25, 0xb3, 0x37, 0x22, 0x01, - 0x42, 0x24, 0x02, 0x20, 0x25, 0x01, 0x43, 0xe0, 0x5e, 0x21, 0x25, 0x41, - 0x45, 0xd6, 0x3e, 0x2f, 0x22, 0x41, 0x49, 0x68, 0xb2, 0x1f, 0x25, 0x01, - 0xee, 0x2b, 0x22, 0x41, 0xf3, 0x29, 0x22, 0xc1, 0x00, 0xe8, 0x8c, 0x23, - 0x41, 0x80, 0x17, 0xd2, 0x23, 0x22, 0x01, 0xe8, 0x24, 0x22, 0x01, 0xf2, - 0x25, 0x22, 0x01, 0x42, 0xa4, 0x02, 0x26, 0x22, 0xc1, 0x00, 0xd2, 0x27, - 0x22, 0x41, 0x44, 0xd7, 0x3e, 0x22, 0x22, 0x01, 0x4a, 0xe9, 0x43, 0x21, - 0x22, 0x41, 0xe1, 0xb7, 0x21, 0x81, 0xca, 0x02, 0xe9, 0xf7, 0x21, 0x81, - 0xb4, 0x02, 0xf5, 0xfb, 0x21, 0xc1, 0x00, 0x4a, 0x06, 0x9b, 0xfc, 0x21, - 0x01, 0xd2, 0xfd, 0x21, 0x81, 0x3c, 0xd3, 0x16, 0x22, 0x01, 0x43, 0xce, - 0x41, 0x17, 0x22, 0x81, 0x1a, 0xe8, 0x1b, 0x22, 0x01, 0xec, 0x1c, 0x22, - 0x01, 0xed, 0x1d, 0x22, 0xc1, 0x00, 0x49, 0x29, 0xb2, 0x1e, 0x22, 0xc1, - 0x00, 0x4d, 0xc9, 0x1d, 0x1f, 0x22, 0x41, 0x80, 0x01, 0xff, 0xaf, 0x06, - 0x47, 0xba, 0x7a, 0x1a, 0x22, 0x41, 0x4d, 0xce, 0x85, 0x19, 0x22, 0x01, - 0x49, 0x5c, 0xbe, 0x18, 0x22, 0x41, 0x80, 0x01, 0xff, 0x4c, 0xed, 0x8b, - 0x12, 0x22, 0x01, 0x4e, 0xae, 0x76, 0x19, 0x25, 0x01, 0x4c, 0xa5, 0x91, - 0x13, 0x22, 0x01, 0xb3, 0xbd, 0x01, 0xb4, 0x01, 0xff, 0x43, 0x07, 0x5f, - 0x11, 0x22, 0x01, 0x05, 0x29, 0x02, 0x01, 0xff, 0x42, 0x13, 0x00, 0xfe, - 0x21, 0x01, 0x43, 0x4f, 0x6f, 0xff, 0x21, 0x01, 0x44, 0x81, 0x0c, 0x1a, - 0x25, 0x01, 0x44, 0xe0, 0x73, 0x00, 0x22, 0x81, 0x86, 0x01, 0x49, 0x11, - 0x5f, 0x02, 0x22, 0x01, 0xa8, 0x72, 0x42, 0x29, 0x02, 0x04, 0x22, 0x01, - 0xab, 0x53, 0x02, 0x74, 0x00, 0x43, 0x4a, 0x67, 0xab, 0x0b, 0x22, 0x01, - 0xae, 0x33, 0x43, 0xa0, 0x0e, 0x1c, 0x25, 0x81, 0x26, 0xb3, 0x0f, 0xb4, - 0x01, 0xff, 0x43, 0xf0, 0x43, 0x1e, 0x25, 0x01, 0x43, 0x83, 0x0e, 0x10, - 0x22, 0x41, 0x42, 0x41, 0x00, 0x8b, 0x23, 0x01, 0xa9, 0x01, 0xff, 0x49, - 0xcf, 0x4b, 0x0e, 0x22, 0x01, 0x4a, 0xf5, 0xa9, 0x0f, 0x22, 0x41, 0x52, - 0xaf, 0x3c, 0x1d, 0x25, 0x41, 0xe5, 0x0c, 0x22, 0x01, 0xf5, 0x0d, 0x22, - 0x41, 0x49, 0xcf, 0x4b, 0x09, 0x22, 0x01, 0x43, 0x24, 0x02, 0x0a, 0x22, - 0x41, 0x02, 0xe8, 0x01, 0x04, 0xe9, 0x08, 0x22, 0x41, 0xd2, 0x05, 0x22, - 0x01, 0xd3, 0x06, 0x22, 0xc1, 0x00, 0x49, 0xcf, 0x4b, 0x07, 0x22, 0x41, - 0x42, 0x13, 0x00, 0x1b, 0x25, 0x01, 0x4b, 0x05, 0x9b, 0x03, 0x22, 0x41, - 0x80, 0x01, 0xff, 0x48, 0x4e, 0xb2, 0x8a, 0x23, 0x01, 0x44, 0x06, 0x5f, - 0x01, 0x22, 0x41, 0x46, 0xbb, 0x7a, 0x15, 0x22, 0x81, 0x06, 0x46, 0xac, - 0x05, 0x14, 0x22, 0x41, 0x4a, 0x06, 0x9b, 0x89, 0x23, 0x41, 0xec, 0xf8, - 0x21, 0x01, 0x44, 0xfa, 0xed, 0xf9, 0x21, 0x01, 0x42, 0xa4, 0x02, 0xfa, - 0x21, 0x41, 0x02, 0x24, 0x02, 0xd0, 0x03, 0x44, 0x1a, 0xed, 0xf1, 0x21, - 0x01, 0x02, 0x66, 0x10, 0x1d, 0xec, 0xf2, 0x21, 0x81, 0x12, 0xed, 0xf4, - 0x21, 0xc1, 0x00, 0x4a, 0x94, 0x5c, 0xf5, 0x21, 0xc1, 0x00, 0x48, 0xea, - 0xbf, 0xf6, 0x21, 0x41, 0x4a, 0x03, 0x9c, 0xf3, 0x21, 0x41, 0x90, 0xe8, - 0x02, 0x91, 0xd9, 0x02, 0x92, 0xad, 0x02, 0x93, 0x8c, 0x02, 0x94, 0xae, - 0x01, 0x43, 0x69, 0xf0, 0xff, 0x24, 0x01, 0x96, 0x0f, 0x97, 0x01, 0xff, - 0x42, 0xf8, 0xb2, 0x17, 0x25, 0x01, 0x42, 0xb2, 0xf1, 0x18, 0x25, 0x41, - 0x42, 0x27, 0x74, 0x00, 0x25, 0x01, 0x42, 0xa0, 0xf1, 0x01, 0x25, 0x81, - 0x4a, 0x42, 0xa8, 0xf1, 0x0c, 0x25, 0x01, 0x42, 0xb0, 0xf1, 0x0d, 0x25, - 0xc1, 0x00, 0x07, 0x27, 0x02, 0x01, 0xff, 0x43, 0xd2, 0xf0, 0x0e, 0x25, - 0x01, 0x42, 0x24, 0x02, 0x0f, 0x25, 0x01, 0x43, 0xc5, 0x06, 0x10, 0x25, - 0x81, 0x1f, 0x42, 0x26, 0x03, 0x12, 0x25, 0x01, 0x55, 0xac, 0x3c, 0x13, - 0x25, 0x01, 0x4d, 0xd2, 0x86, 0x14, 0x25, 0x01, 0xb5, 0x01, 0xff, 0xe4, - 0x15, 0x25, 0x01, 0x44, 0x41, 0xc9, 0x16, 0x25, 0x41, 0x45, 0xd6, 0x3e, - 0x11, 0x25, 0x41, 0x07, 0x27, 0x02, 0x01, 0xff, 0x43, 0xce, 0x03, 0x02, - 0x25, 0x01, 0x43, 0x4f, 0x6f, 0x03, 0x25, 0x01, 0x4e, 0xb2, 0x75, 0x04, - 0x25, 0x01, 0x43, 0x4a, 0xb2, 0x05, 0x25, 0x01, 0x42, 0x74, 0x00, 0x06, - 0x25, 0x01, 0xb4, 0x11, 0xb5, 0x01, 0xff, 0xd2, 0x09, 0x25, 0x01, 0xe4, - 0x0a, 0x25, 0x01, 0x44, 0x41, 0xc9, 0x0b, 0x25, 0x41, 0x42, 0x17, 0x00, - 0x07, 0x25, 0x01, 0xe5, 0x08, 0x25, 0x41, 0x94, 0x29, 0x95, 0x1f, 0x42, - 0xc4, 0xf0, 0xf9, 0x24, 0x01, 0x42, 0xab, 0xf1, 0xfa, 0x24, 0x01, 0x99, - 0x01, 0xff, 0xd0, 0xfb, 0x24, 0x01, 0xd2, 0xfc, 0x24, 0x01, 0xd3, 0xfd, - 0x24, 0x01, 0xd5, 0xfe, 0x24, 0x41, 0xd0, 0xf7, 0x24, 0x01, 0xd7, 0xf8, - 0x24, 0x41, 0xd1, 0xf0, 0x24, 0x01, 0xd9, 0xf1, 0x24, 0xc1, 0x00, 0x07, - 0x27, 0x02, 0x01, 0xff, 0x42, 0x1e, 0x01, 0xf2, 0x24, 0x01, 0x43, 0xc5, - 0x06, 0xf3, 0x24, 0x01, 0x09, 0xac, 0x3c, 0x06, 0x4a, 0x21, 0xb0, 0xf6, - 0x24, 0x41, 0x43, 0xbe, 0x3c, 0xf4, 0x24, 0x01, 0x4c, 0xb5, 0x3c, 0xf5, - 0x24, 0x41, 0x94, 0x10, 0x98, 0x06, 0x42, 0xbc, 0xf1, 0xef, 0x24, 0x41, - 0xd3, 0xed, 0x24, 0x01, 0xd4, 0xee, 0x24, 0x41, 0xd3, 0xea, 0x24, 0x01, - 0xd7, 0xeb, 0x24, 0x01, 0xd8, 0xec, 0x24, 0x41, 0x91, 0x1f, 0x92, 0x11, - 0x42, 0xaa, 0xf1, 0xe7, 0x24, 0x01, 0x96, 0x01, 0xff, 0xd5, 0xe8, 0x24, - 0x01, 0xd6, 0xe9, 0x24, 0x41, 0xd0, 0xe4, 0x24, 0x01, 0xd5, 0xe5, 0x24, - 0x01, 0xd8, 0xe6, 0x24, 0x41, 0xd0, 0xe2, 0x24, 0x01, 0xd9, 0xe3, 0x24, - 0x41, 0x42, 0x57, 0xf0, 0xe0, 0x24, 0x01, 0x42, 0xc1, 0xf0, 0xe1, 0x24, - 0x41, 0x42, 0x56, 0xf0, 0xd5, 0x24, 0x01, 0x92, 0x2e, 0x42, 0x57, 0xf0, - 0xd8, 0x24, 0x01, 0x95, 0x1e, 0x42, 0x75, 0xf0, 0xdb, 0x24, 0x01, 0x54, - 0x1b, 0x3f, 0xdc, 0x24, 0x01, 0x98, 0x06, 0x42, 0xbe, 0xf1, 0xdf, 0x24, - 0x41, 0xd0, 0xdd, 0x24, 0x01, 0x4e, 0x1c, 0x74, 0xde, 0x24, 0x41, 0xd0, - 0xd9, 0x24, 0x01, 0xd1, 0xda, 0x24, 0x41, 0xd1, 0xd6, 0x24, 0x01, 0xd5, - 0xd7, 0x24, 0x41, 0xe2, 0xb8, 0x21, 0x81, 0x22, 0xf2, 0xec, 0x21, 0xc1, - 0x00, 0x80, 0x01, 0xff, 0x44, 0xd7, 0x3e, 0xef, 0x21, 0x81, 0x0d, 0x49, - 0xfc, 0xa3, 0xed, 0x21, 0xc1, 0x00, 0x49, 0x3a, 0xa7, 0xee, 0x21, 0x41, - 0x54, 0xcb, 0x3e, 0xf0, 0x21, 0x41, 0x80, 0x01, 0xff, 0x47, 0xab, 0x05, - 0xeb, 0x21, 0x01, 0x06, 0x28, 0x02, 0x01, 0xff, 0xe1, 0xb9, 0x21, 0x81, - 0xa0, 0x02, 0xa2, 0x93, 0x02, 0x43, 0xbb, 0x17, 0xc2, 0x21, 0x01, 0x42, - 0x92, 0x01, 0xc3, 0x21, 0x01, 0xa7, 0xea, 0x01, 0xa8, 0xd8, 0x01, 0xa9, - 0xb9, 0x01, 0xab, 0x9b, 0x01, 0xac, 0x83, 0x01, 0xad, 0x70, 0x42, 0xa2, - 0x05, 0xdb, 0x21, 0x01, 0xb3, 0x3d, 0xb4, 0x29, 0xf5, 0xe5, 0x21, 0x81, - 0x06, 0x4a, 0xc5, 0xb1, 0xd4, 0x24, 0x41, 0x06, 0xb6, 0x27, 0x10, 0x4a, - 0xaf, 0xa4, 0xe8, 0x21, 0x01, 0xe4, 0xe9, 0x21, 0x01, 0x42, 0xa4, 0x02, - 0xea, 0x21, 0x41, 0xe1, 0xe6, 0x21, 0x01, 0x48, 0x8e, 0x72, 0xe7, 0x21, - 0x41, 0xa1, 0x06, 0x58, 0xb5, 0x27, 0xe4, 0x21, 0x41, 0xe7, 0xe2, 0x21, - 0x01, 0x42, 0xf1, 0x43, 0xe3, 0x21, 0x41, 0xa8, 0x06, 0x42, 0x1d, 0x04, - 0xe1, 0x21, 0x41, 0x4a, 0x39, 0xa7, 0xdc, 0x21, 0x01, 0x0e, 0x8e, 0x77, - 0x0d, 0x42, 0x8c, 0x65, 0xdf, 0x21, 0xc1, 0x00, 0x4a, 0xbf, 0xa3, 0xe0, - 0x21, 0x41, 0x4a, 0x3d, 0xad, 0xdd, 0x21, 0x01, 0x44, 0x06, 0x5f, 0xde, - 0x21, 0x41, 0xe5, 0xd8, 0x21, 0x81, 0x06, 0x43, 0xcf, 0x7a, 0xda, 0x21, - 0x41, 0x48, 0x69, 0xab, 0xd9, 0x21, 0x41, 0x44, 0x23, 0x02, 0xd4, 0x21, - 0x01, 0x43, 0x82, 0x0c, 0xd5, 0x21, 0x01, 0xf5, 0xd6, 0x21, 0xc1, 0x00, - 0xec, 0xd7, 0x21, 0x41, 0xe9, 0xcf, 0x21, 0x81, 0x12, 0xb5, 0x01, 0xff, - 0xd3, 0xd1, 0x21, 0x01, 0xec, 0xd2, 0x21, 0xc1, 0x00, 0x4f, 0x20, 0x68, - 0xd3, 0x21, 0x41, 0xee, 0xd0, 0x21, 0x41, 0x47, 0x55, 0x68, 0xcb, 0x21, - 0x01, 0xed, 0xcc, 0x21, 0xc1, 0x00, 0x06, 0xb6, 0x27, 0x01, 0xff, 0x42, - 0x22, 0x00, 0xcd, 0x21, 0x01, 0x42, 0x5b, 0x15, 0xce, 0x21, 0x41, 0xe1, - 0xc8, 0x21, 0x81, 0x06, 0x4b, 0x10, 0x9b, 0xca, 0x21, 0x41, 0xec, 0xc9, - 0x21, 0x41, 0xe1, 0xc4, 0x21, 0x81, 0x11, 0xe9, 0x88, 0x23, 0x01, 0x42, - 0x63, 0x0c, 0xc6, 0x21, 0xc1, 0x00, 0x49, 0x3b, 0xb2, 0xc7, 0x21, 0x41, - 0xf2, 0xc5, 0x21, 0x41, 0x42, 0xe8, 0x01, 0xc0, 0x21, 0x01, 0xe9, 0xc1, - 0x21, 0x41, 0x06, 0xb6, 0x27, 0x0e, 0xec, 0xbd, 0x21, 0x01, 0xee, 0xbe, - 0x21, 0x01, 0x4c, 0x55, 0x93, 0xbf, 0x21, 0x41, 0x4a, 0xe9, 0xa6, 0xba, - 0x21, 0x01, 0x43, 0xca, 0x1d, 0xbb, 0x21, 0x01, 0x43, 0x47, 0x20, 0xbc, - 0x21, 0x41, 0xe1, 0x57, 0x21, 0x81, 0x84, 0x01, 0x44, 0xe0, 0x73, 0x9f, - 0x21, 0x01, 0xe9, 0xa0, 0x21, 0x81, 0x44, 0xf5, 0xaa, 0x21, 0x81, 0x06, - 0x45, 0x35, 0xe9, 0xb6, 0x21, 0x41, 0x69, 0xbf, 0x03, 0xab, 0x21, 0x01, - 0xd3, 0xac, 0x21, 0x01, 0xd4, 0xad, 0x21, 0x81, 0x24, 0xd7, 0xaf, 0x21, - 0x01, 0xec, 0xb0, 0x21, 0x81, 0x15, 0xee, 0xb2, 0x21, 0x01, 0xf2, 0xb3, - 0x21, 0x81, 0x06, 0x44, 0x8a, 0x65, 0xb5, 0x21, 0x41, 0x4d, 0x30, 0x7e, - 0xb4, 0x21, 0x41, 0x45, 0xd6, 0x3e, 0xb1, 0x21, 0x41, 0x4d, 0x4a, 0x7e, - 0xae, 0x21, 0x41, 0x07, 0x27, 0x02, 0x22, 0xe4, 0xa4, 0x21, 0x01, 0xee, - 0xa5, 0x21, 0x01, 0xb3, 0x01, 0xff, 0x42, 0x13, 0x00, 0xa6, 0x21, 0x01, - 0xe8, 0xa7, 0x21, 0x01, 0x43, 0x78, 0x6d, 0xa8, 0x21, 0xc1, 0x00, 0x4c, - 0x95, 0x89, 0xa9, 0x21, 0x41, 0x43, 0x4f, 0x6f, 0xa1, 0x21, 0x01, 0xf5, - 0xa2, 0x21, 0xc1, 0x00, 0xe4, 0xa3, 0x21, 0x41, 0x07, 0x27, 0x02, 0x72, - 0xd2, 0x8d, 0x21, 0x81, 0x67, 0xe2, 0x8f, 0x21, 0x01, 0xa4, 0x4a, 0xeb, - 0x95, 0x21, 0x81, 0x3f, 0xec, 0x97, 0x21, 0x81, 0x26, 0xad, 0x1c, 0x49, - 0x68, 0xbb, 0x6f, 0x23, 0x01, 0x44, 0x1d, 0x02, 0x9c, 0x21, 0xc1, 0x00, - 0x80, 0x01, 0xff, 0x60, 0x22, 0x02, 0x9d, 0x21, 0x01, 0x6c, 0x16, 0x02, - 0x9e, 0x21, 0x41, 0xd2, 0x9a, 0x21, 0x01, 0xd4, 0x9b, 0x21, 0x41, 0x80, - 0x06, 0x42, 0x57, 0x00, 0x27, 0x23, 0x41, 0x4c, 0xe1, 0x8b, 0x99, 0x21, - 0x01, 0x49, 0x07, 0x9b, 0x98, 0x21, 0x41, 0x4f, 0x4d, 0x68, 0x96, 0x21, - 0x41, 0xd2, 0x90, 0x21, 0x01, 0xd3, 0x91, 0x21, 0x01, 0xd4, 0x92, 0x21, - 0x01, 0xd5, 0x93, 0x21, 0xc1, 0x00, 0x4a, 0xb5, 0xa3, 0x94, 0x21, 0x41, - 0x4d, 0xef, 0x7d, 0x8e, 0x21, 0x41, 0xe1, 0x58, 0x21, 0x81, 0xdf, 0x02, - 0xa2, 0xc4, 0x02, 0xa5, 0xb5, 0x02, 0xa7, 0xe8, 0x01, 0x4d, 0xc5, 0x03, - 0x82, 0x23, 0x01, 0xa9, 0xd5, 0x01, 0xab, 0xc0, 0x01, 0xac, 0xb0, 0x01, - 0xad, 0x86, 0x01, 0xae, 0x7a, 0xb0, 0x70, 0x42, 0x3d, 0x00, 0x7d, 0x21, - 0x01, 0xb3, 0x3a, 0xb4, 0x2e, 0xf5, 0x87, 0x21, 0x81, 0x06, 0x42, 0x11, - 0x33, 0x8c, 0x21, 0x41, 0x44, 0x87, 0xe8, 0xd2, 0x24, 0x01, 0xd2, 0x88, - 0x21, 0x01, 0xe4, 0x89, 0x21, 0x01, 0x4c, 0x91, 0x90, 0x8a, 0x21, 0x01, - 0xf2, 0xd3, 0x24, 0x81, 0x06, 0x42, 0xa4, 0x02, 0x8b, 0x21, 0x41, 0xd2, - 0x87, 0x23, 0x41, 0x42, 0x17, 0x00, 0x86, 0x21, 0x01, 0xf5, 0x86, 0x23, - 0x41, 0xe1, 0x7e, 0x21, 0x81, 0x25, 0xa8, 0x0c, 0x42, 0x3f, 0x00, 0x84, - 0x21, 0x01, 0x44, 0x82, 0xef, 0x85, 0x21, 0x41, 0xe1, 0x80, 0x21, 0x01, - 0xe5, 0x81, 0x21, 0x01, 0x42, 0x03, 0x00, 0x82, 0x21, 0x01, 0xf5, 0x83, - 0x21, 0xc1, 0x00, 0xec, 0x85, 0x23, 0x41, 0xf2, 0x7f, 0x21, 0x41, 0xe1, - 0x84, 0x23, 0x01, 0xe9, 0x7c, 0x21, 0x41, 0xe5, 0x7a, 0x21, 0x01, 0x42, - 0xf3, 0x0a, 0x7b, 0x21, 0x41, 0xe5, 0x74, 0x21, 0x81, 0x0b, 0xe9, 0x78, - 0x21, 0xc1, 0x00, 0x4b, 0xb1, 0x95, 0x79, 0x21, 0x41, 0x06, 0xb6, 0x27, - 0x01, 0xff, 0x42, 0x6c, 0x02, 0x75, 0x21, 0x01, 0x42, 0xc6, 0x06, 0x76, - 0x21, 0x01, 0x42, 0x77, 0x00, 0x77, 0x21, 0x41, 0xe9, 0x72, 0x21, 0x01, - 0xf5, 0x73, 0x21, 0xc1, 0x00, 0xed, 0x83, 0x23, 0x41, 0xe1, 0xd1, 0x24, - 0x81, 0x09, 0xe9, 0x70, 0x21, 0xc1, 0x00, 0xe4, 0x71, 0x21, 0x41, 0xeb, - 0x6f, 0x21, 0x41, 0x42, 0xc6, 0x06, 0x6d, 0x21, 0x01, 0xed, 0x6e, 0x21, - 0x41, 0xe1, 0x62, 0x21, 0x81, 0x30, 0xe9, 0x67, 0x21, 0x81, 0x0f, 0xf5, - 0x6b, 0x21, 0xc1, 0x00, 0xe4, 0x81, 0x23, 0x01, 0x42, 0xd0, 0xf1, 0x6c, - 0x21, 0x41, 0x42, 0xc5, 0x41, 0x68, 0x21, 0x01, 0x42, 0xa4, 0x02, 0x80, - 0x23, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x4d, 0xbf, 0x50, 0x6a, 0x21, 0x01, - 0x48, 0xf2, 0x55, 0x69, 0x21, 0x41, 0xec, 0x63, 0x21, 0x01, 0x47, 0x13, - 0x5f, 0x64, 0x21, 0x01, 0xf2, 0x65, 0x21, 0xc1, 0x00, 0x51, 0xfa, 0x55, - 0x66, 0x21, 0x41, 0x44, 0x43, 0xad, 0x60, 0x21, 0x01, 0x43, 0xcf, 0x03, - 0x61, 0x21, 0x41, 0xa1, 0x08, 0xe9, 0x5f, 0x21, 0x01, 0xf5, 0xd0, 0x24, - 0x41, 0xe4, 0x5c, 0x21, 0x01, 0x43, 0x22, 0x02, 0x5d, 0x21, 0x01, 0xf2, - 0x5e, 0x21, 0x41, 0xe4, 0x59, 0x21, 0x81, 0x13, 0x44, 0x52, 0xee, 0x7e, - 0x23, 0x01, 0x02, 0xa4, 0x02, 0x01, 0xff, 0xd2, 0x5b, 0x21, 0x01, 0xd3, - 0x7f, 0x23, 0x41, 0x49, 0x44, 0xb2, 0x5a, 0x21, 0x41, 0x42, 0x19, 0x00, - 0x40, 0x21, 0x01, 0xe2, 0x41, 0x21, 0x01, 0x43, 0xfd, 0x7d, 0x42, 0x21, - 0x81, 0x67, 0xe7, 0x45, 0x21, 0x81, 0x42, 0xec, 0x4b, 0x21, 0x81, 0x33, - 0xed, 0x4e, 0x21, 0x81, 0x0e, 0xee, 0x54, 0x21, 0x01, 0xf2, 0x55, 0x21, - 0x01, 0x42, 0xa4, 0x02, 0x56, 0x21, 0x41, 0x80, 0x06, 0x42, 0x9e, 0x01, - 0x53, 0x21, 0x41, 0x4b, 0x66, 0x98, 0x50, 0x21, 0x01, 0x4b, 0xa1, 0x9e, - 0x51, 0x21, 0x01, 0x47, 0xab, 0x05, 0x52, 0x21, 0x01, 0x4a, 0xe9, 0x43, - 0x4f, 0x21, 0x41, 0x50, 0x0a, 0x5f, 0x4c, 0x21, 0x01, 0xd2, 0x4d, 0x21, - 0x41, 0xe9, 0x46, 0x21, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x43, 0xcc, 0xf0, - 0x47, 0x21, 0x01, 0x44, 0xd7, 0x3e, 0x4a, 0x21, 0x01, 0x62, 0x4b, 0x0c, - 0x49, 0x21, 0x01, 0x42, 0x0d, 0x00, 0x48, 0x21, 0x41, 0x0b, 0x9b, 0x95, - 0x01, 0xff, 0x43, 0x37, 0x35, 0x43, 0x21, 0x01, 0x47, 0xab, 0x05, 0x44, - 0x21, 0x41, 0xe1, 0x29, 0x21, 0x81, 0x7e, 0xe9, 0x2d, 0x21, 0x81, 0x3b, - 0xf5, 0x37, 0x21, 0xc1, 0x00, 0x42, 0x8a, 0x5f, 0x38, 0x21, 0x81, 0x0c, - 0x42, 0x20, 0xea, 0x3e, 0x21, 0x01, 0x42, 0xa4, 0x02, 0x7d, 0x23, 0x41, - 0x07, 0x27, 0x02, 0x01, 0xff, 0x42, 0x1a, 0x00, 0x39, 0x21, 0x01, 0x43, - 0x22, 0x00, 0x3a, 0x21, 0x01, 0x46, 0x1b, 0x02, 0x3b, 0x21, 0x01, 0x44, - 0x29, 0x90, 0x3c, 0x21, 0x01, 0x42, 0x63, 0x0c, 0x3d, 0x21, 0x41, 0x07, - 0x27, 0x02, 0x01, 0xff, 0x43, 0xce, 0x03, 0x2e, 0x21, 0x81, 0x28, 0x43, - 0x4f, 0x6f, 0x30, 0x21, 0x01, 0x44, 0x81, 0x0c, 0x31, 0x21, 0x01, 0x43, - 0xbd, 0x1d, 0x32, 0x21, 0x01, 0x43, 0x10, 0x04, 0x33, 0x21, 0x01, 0x43, - 0x54, 0x22, 0x34, 0x21, 0x01, 0x43, 0x63, 0x06, 0x35, 0x21, 0x01, 0xf5, - 0x36, 0x21, 0x41, 0x52, 0xbf, 0x03, 0xcf, 0x24, 0x01, 0xd2, 0x2f, 0x21, - 0x41, 0x80, 0x04, 0xec, 0x2c, 0x21, 0x41, 0x44, 0xd7, 0x3e, 0x2b, 0x21, - 0x01, 0x44, 0x06, 0x5f, 0x2a, 0x21, 0xc1, 0x00, 0x45, 0xd6, 0x3e, 0xce, - 0x24, 0x41, 0xe1, 0xb5, 0x20, 0x81, 0xcc, 0x02, 0xa5, 0xad, 0x02, 0xe9, - 0x00, 0x21, 0x81, 0x87, 0x01, 0xf5, 0x16, 0x21, 0xc1, 0x00, 0x4c, 0x4d, - 0x89, 0x17, 0x21, 0x01, 0xd2, 0x18, 0x21, 0x81, 0x4a, 0xe4, 0x1e, 0x21, - 0x81, 0x25, 0xec, 0x22, 0x21, 0x01, 0xed, 0x23, 0x21, 0x81, 0x16, 0xf2, - 0x25, 0x21, 0xc1, 0x00, 0xd7, 0x26, 0x21, 0x01, 0xb5, 0x01, 0xff, 0xee, - 0x27, 0x21, 0x01, 0x42, 0xa4, 0x02, 0x28, 0x21, 0x41, 0x4a, 0xfb, 0xa3, - 0x24, 0x21, 0x41, 0x80, 0x01, 0xff, 0x4e, 0x86, 0x79, 0x21, 0x21, 0x01, - 0x54, 0xdf, 0x43, 0xcd, 0x24, 0x01, 0x06, 0x28, 0x02, 0x01, 0xff, 0x4a, - 0xf5, 0xa4, 0x1f, 0x21, 0x01, 0x43, 0x9b, 0x5c, 0x20, 0x21, 0x41, 0x80, - 0x01, 0xff, 0x44, 0xd7, 0x3e, 0x1d, 0x21, 0x01, 0x06, 0x28, 0x02, 0x01, - 0xff, 0x48, 0x54, 0x68, 0xcc, 0x24, 0x01, 0x43, 0xe0, 0x5e, 0x19, 0x21, - 0x81, 0x0c, 0x43, 0x54, 0x22, 0x1b, 0x21, 0x01, 0x4d, 0xab, 0x86, 0x1c, - 0x21, 0x41, 0x4f, 0x4d, 0x68, 0x1a, 0x21, 0x41, 0x80, 0x8a, 0x01, 0xd4, - 0x04, 0x21, 0x81, 0x76, 0x43, 0xfd, 0x7d, 0x07, 0x21, 0x01, 0xe7, 0x7c, - 0x23, 0x01, 0xb2, 0x37, 0xb3, 0x01, 0xff, 0x42, 0x13, 0x00, 0x10, 0x21, - 0x01, 0xe8, 0x11, 0x21, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x4d, 0xbf, 0x50, - 0x12, 0x21, 0x01, 0xb4, 0x01, 0xff, 0x43, 0x07, 0x5f, 0x15, 0x21, 0x01, - 0x05, 0x29, 0x02, 0x01, 0xff, 0x43, 0x4f, 0x6f, 0x13, 0x21, 0x01, 0x52, - 0xba, 0x50, 0xcb, 0x24, 0x01, 0x44, 0xef, 0x43, 0x14, 0x21, 0x41, 0xd2, - 0x08, 0x21, 0x81, 0x28, 0xd3, 0x0a, 0x21, 0xc1, 0x00, 0x07, 0x27, 0x02, - 0x01, 0xff, 0x4a, 0xeb, 0xa4, 0x0b, 0x21, 0x01, 0x49, 0x11, 0x5f, 0x0c, - 0x21, 0x01, 0x43, 0xc5, 0x06, 0x0d, 0x21, 0x01, 0x4b, 0xff, 0x9c, 0x0e, - 0x21, 0x01, 0x42, 0x6c, 0x09, 0x0f, 0x21, 0x41, 0x45, 0xd6, 0x3e, 0x09, - 0x21, 0x41, 0x80, 0x01, 0xff, 0x4c, 0xd5, 0x8b, 0x06, 0x21, 0x01, 0x48, - 0xea, 0xc6, 0x05, 0x21, 0x41, 0x4b, 0xbf, 0x50, 0x03, 0x21, 0x01, 0x06, - 0x28, 0x02, 0x01, 0xff, 0xe5, 0x01, 0x21, 0x01, 0xf5, 0x02, 0x21, 0x41, - 0x42, 0x21, 0xea, 0x7b, 0x23, 0x01, 0x45, 0xcd, 0xe7, 0xfe, 0x20, 0xc1, - 0x00, 0x07, 0x27, 0x02, 0x01, 0xff, 0x43, 0x9b, 0x5c, 0xff, 0x20, 0x01, - 0xf5, 0xca, 0x24, 0x41, 0x45, 0xd6, 0x3e, 0xb6, 0x20, 0x01, 0xd2, 0xb7, - 0x20, 0x81, 0x64, 0x42, 0x16, 0x00, 0xee, 0x20, 0x81, 0x4e, 0xe4, 0xf0, - 0x20, 0x81, 0x43, 0xec, 0xf2, 0x20, 0x81, 0x32, 0xed, 0xf5, 0x20, 0x01, - 0xee, 0xf6, 0x20, 0x81, 0x0f, 0xf2, 0xfb, 0x20, 0x81, 0x06, 0x44, 0x66, - 0x38, 0xfd, 0x20, 0x41, 0xd3, 0xfc, 0x20, 0x41, 0xd2, 0xf7, 0x20, 0xc1, - 0x00, 0x80, 0x01, 0xff, 0x4d, 0x2b, 0x80, 0xfa, 0x20, 0x01, 0x49, 0x44, - 0xbb, 0xf9, 0x20, 0x01, 0x44, 0x06, 0x5f, 0xf8, 0x20, 0x41, 0x5a, 0xbc, - 0x1d, 0xf3, 0x20, 0x01, 0x42, 0x57, 0x00, 0xf4, 0x20, 0x41, 0x56, 0xc0, - 0x1d, 0xf1, 0x20, 0x41, 0x80, 0x01, 0xff, 0x4d, 0x1e, 0x80, 0xef, 0x20, - 0x01, 0x56, 0x03, 0x2c, 0xc9, 0x24, 0x41, 0x80, 0x01, 0xff, 0x48, 0xe2, - 0xc6, 0xed, 0x20, 0x01, 0x06, 0x28, 0x02, 0x01, 0xff, 0xa1, 0xb0, 0x03, - 0xa2, 0x8e, 0x03, 0xa4, 0xd9, 0x02, 0xa5, 0xba, 0x02, 0xa7, 0x80, 0x02, - 0xa8, 0xd6, 0x01, 0xa9, 0xc7, 0x01, 0xab, 0x9c, 0x01, 0xac, 0x83, 0x01, - 0xad, 0x71, 0xae, 0x4c, 0x42, 0x6c, 0x09, 0xe2, 0x20, 0x01, 0xb3, 0x1c, - 0x44, 0xef, 0x43, 0xe9, 0x20, 0x01, 0xf5, 0xea, 0x20, 0x81, 0x06, 0x44, - 0x16, 0xf0, 0xc8, 0x24, 0x41, 0xe4, 0xeb, 0x20, 0xc1, 0x00, 0x48, 0xe2, - 0xbf, 0xec, 0x20, 0x41, 0xa1, 0x1e, 0xa8, 0x06, 0x42, 0x1d, 0x04, 0xe8, - 0x20, 0x41, 0xe5, 0xe5, 0x20, 0x81, 0x0b, 0xa9, 0x01, 0xff, 0xe4, 0xe7, - 0x20, 0x01, 0xed, 0xc7, 0x24, 0x41, 0x49, 0x5f, 0xb2, 0xe6, 0x20, 0x41, - 0xec, 0xe3, 0x20, 0x01, 0xf2, 0xe4, 0x20, 0x41, 0xe5, 0xc4, 0x24, 0x81, - 0x0d, 0x42, 0xf3, 0x0a, 0xe0, 0x20, 0xc1, 0x00, 0x49, 0x4e, 0x22, 0xe1, - 0x20, 0x41, 0x06, 0xb6, 0x27, 0x01, 0xff, 0x42, 0x58, 0x99, 0xc5, 0x24, - 0x01, 0x42, 0xc6, 0x06, 0xc6, 0x24, 0x41, 0x49, 0x68, 0xab, 0xde, 0x20, - 0x01, 0xe9, 0xdf, 0x20, 0x01, 0x43, 0xcf, 0x7a, 0xc3, 0x24, 0x41, 0xe1, - 0xdd, 0x20, 0x81, 0x06, 0x42, 0x5e, 0x74, 0xc2, 0x24, 0x41, 0xed, 0xc0, - 0x24, 0xc1, 0x00, 0x4a, 0x94, 0x5c, 0xc1, 0x24, 0x41, 0xa1, 0x1c, 0x42, - 0x03, 0x00, 0xda, 0x20, 0x81, 0x0f, 0xb5, 0x01, 0xff, 0x49, 0x01, 0xb3, - 0xdc, 0x20, 0x01, 0x50, 0x8a, 0x65, 0xbf, 0x24, 0x41, 0x49, 0x4d, 0xb2, - 0xdb, 0x20, 0x41, 0xeb, 0xd8, 0x20, 0x01, 0x44, 0x1d, 0x02, 0xd9, 0x20, - 0x41, 0x47, 0x55, 0x68, 0xd6, 0x20, 0x01, 0x53, 0xc5, 0x4b, 0xd7, 0x20, - 0x41, 0xa1, 0x0c, 0x49, 0x78, 0xb7, 0xd4, 0x20, 0x01, 0x43, 0x1f, 0xed, - 0xd5, 0x20, 0x41, 0x06, 0xb6, 0x27, 0x0b, 0xec, 0xd2, 0x20, 0xc1, 0x00, - 0x48, 0x4d, 0xb2, 0xd3, 0x20, 0x41, 0xe1, 0xbe, 0x24, 0x01, 0x4c, 0xd1, - 0x8f, 0xd1, 0x20, 0x41, 0xe1, 0xbb, 0x24, 0x81, 0x16, 0xe9, 0xcd, 0x20, - 0xc1, 0x00, 0xd4, 0xce, 0x20, 0x81, 0x06, 0x4a, 0x8d, 0xad, 0xd0, 0x20, - 0x41, 0x47, 0xb6, 0x27, 0xcf, 0x20, 0x41, 0x47, 0x13, 0x5f, 0xcb, 0x20, - 0x01, 0xf2, 0xcc, 0x20, 0xc1, 0x00, 0x06, 0xb6, 0x27, 0x01, 0xff, 0x42, - 0x00, 0x00, 0xbc, 0x24, 0x01, 0x42, 0xa2, 0x05, 0xbd, 0x24, 0x41, 0xec, - 0xc7, 0x20, 0x81, 0x11, 0xee, 0xc9, 0x20, 0x81, 0x06, 0x43, 0x52, 0x21, - 0xba, 0x24, 0x41, 0x50, 0x0a, 0x5f, 0xca, 0x20, 0x41, 0x48, 0x4d, 0xb2, - 0xc8, 0x20, 0x41, 0xe1, 0xc3, 0x20, 0x01, 0xe9, 0xc4, 0x20, 0x81, 0x18, - 0xb5, 0x01, 0xff, 0xe2, 0xc6, 0x20, 0x01, 0x08, 0xc0, 0x7a, 0x01, 0xff, - 0x48, 0x54, 0x68, 0xb8, 0x24, 0x01, 0x46, 0x1b, 0x02, 0xb9, 0x24, 0x41, - 0x02, 0x1e, 0x04, 0x01, 0xff, 0x44, 0xd7, 0x3e, 0xb7, 0x24, 0x01, 0x49, - 0xfc, 0xa3, 0xc5, 0x20, 0x41, 0xa1, 0x0d, 0x42, 0x42, 0x00, 0xc1, 0x20, - 0xc1, 0x00, 0x48, 0xf9, 0xbb, 0xc2, 0x20, 0x41, 0xe4, 0xbf, 0x20, 0x01, - 0x44, 0xc3, 0x41, 0xb6, 0x24, 0x01, 0x49, 0xf8, 0xbb, 0xc0, 0x20, 0x41, - 0x06, 0xb6, 0x27, 0x23, 0x50, 0x8a, 0x5f, 0xbb, 0x20, 0x01, 0xee, 0xbc, - 0x20, 0x81, 0x12, 0x42, 0xa4, 0x02, 0xbd, 0x20, 0xc1, 0x00, 0xd2, 0x7a, - 0x23, 0xc1, 0x00, 0x49, 0x32, 0xb2, 0xbe, 0x20, 0x41, 0x50, 0xda, 0x5e, - 0x79, 0x23, 0x41, 0x4a, 0xe9, 0xa6, 0xb8, 0x20, 0x01, 0x42, 0x22, 0x00, - 0xb9, 0x20, 0x01, 0x43, 0xc5, 0x06, 0xba, 0x20, 0x41, 0x80, 0xe7, 0x02, - 0xd2, 0x8d, 0x20, 0x81, 0xac, 0x02, 0x43, 0xd9, 0x05, 0x94, 0x20, 0x01, - 0x43, 0x7a, 0xe4, 0x95, 0x20, 0x01, 0xec, 0x96, 0x20, 0x01, 0xee, 0x97, - 0x20, 0x81, 0xe9, 0x01, 0xb2, 0xd3, 0x01, 0x43, 0xcf, 0x03, 0xa0, 0x20, - 0x81, 0xc5, 0x01, 0x43, 0xfc, 0x09, 0xa1, 0x20, 0xc1, 0x00, 0x80, 0x01, - 0xff, 0x0e, 0xba, 0x7a, 0x88, 0x01, 0x06, 0x28, 0x02, 0x01, 0xff, 0xe1, - 0xa2, 0x20, 0x81, 0x6d, 0x43, 0x4f, 0x6f, 0xa6, 0x20, 0x01, 0x49, 0xb2, - 0x75, 0xa7, 0x20, 0x81, 0x5a, 0x43, 0x8b, 0x79, 0x77, 0x23, 0x01, 0x42, - 0x22, 0x00, 0xa9, 0x20, 0x81, 0x47, 0x48, 0x54, 0x68, 0xab, 0x20, 0x01, - 0xab, 0x2c, 0xac, 0x17, 0xb3, 0x0b, 0xb5, 0x01, 0xff, 0xd2, 0xb3, 0x20, - 0x01, 0xe4, 0xb4, 0x20, 0x41, 0x42, 0xb0, 0x01, 0x78, 0x23, 0x01, 0xf5, - 0xb5, 0x24, 0x41, 0xe1, 0xaf, 0x20, 0x81, 0x08, 0xe9, 0xb1, 0x20, 0x01, - 0xf5, 0xb2, 0x20, 0x41, 0x4b, 0x02, 0x9c, 0xb0, 0x20, 0x41, 0x45, 0x1c, - 0x02, 0xac, 0x20, 0x81, 0x06, 0x42, 0xbf, 0x3c, 0xae, 0x20, 0x41, 0x48, - 0xaa, 0x05, 0xad, 0x20, 0x41, 0x45, 0xd6, 0x3e, 0xaa, 0x20, 0x41, 0x45, - 0xd6, 0x3e, 0xa8, 0x20, 0x41, 0x49, 0x4d, 0xb2, 0xa3, 0x20, 0x81, 0x04, - 0xee, 0xa5, 0x20, 0x41, 0x4a, 0x03, 0x9c, 0xa4, 0x20, 0x41, 0x43, 0xce, - 0x03, 0xad, 0x24, 0x01, 0x42, 0x49, 0x00, 0xae, 0x24, 0x01, 0x48, 0x54, - 0x68, 0xaf, 0x24, 0x01, 0x42, 0x74, 0x00, 0xb0, 0x24, 0x81, 0x11, 0x42, - 0x2a, 0x02, 0xb2, 0x24, 0x81, 0x06, 0x42, 0x6f, 0x00, 0xb4, 0x24, 0x41, - 0xf3, 0xb3, 0x24, 0x41, 0xec, 0xb1, 0x24, 0x41, 0x4e, 0xd6, 0x73, 0xac, - 0x24, 0x41, 0x42, 0x92, 0x01, 0x9e, 0x20, 0x01, 0x43, 0x44, 0xad, 0x9f, - 0x20, 0xc1, 0x00, 0x42, 0xaf, 0x62, 0xab, 0x24, 0x41, 0x80, 0x01, 0xff, - 0x4b, 0x5b, 0x98, 0x9b, 0x20, 0x01, 0x4b, 0x96, 0x9e, 0x9c, 0x20, 0x01, - 0x47, 0xab, 0x05, 0x9d, 0x20, 0x01, 0x06, 0x28, 0x02, 0x01, 0xff, 0x44, - 0x11, 0x5f, 0x98, 0x20, 0x81, 0x06, 0x42, 0x2a, 0x02, 0x9a, 0x20, 0x41, - 0x45, 0x05, 0x5f, 0x99, 0x20, 0x41, 0x07, 0x27, 0x02, 0x01, 0xff, 0x51, - 0x82, 0x56, 0x8e, 0x20, 0x01, 0x43, 0xca, 0x1d, 0x8f, 0x20, 0x01, 0x43, - 0x9b, 0x5c, 0xa9, 0x24, 0x01, 0x42, 0x7d, 0x02, 0x90, 0x20, 0x01, 0x43, - 0xa0, 0x0e, 0xaa, 0x24, 0x01, 0xb3, 0x04, 0xf5, 0x93, 0x20, 0x41, 0x42, - 0x13, 0x00, 0x91, 0x20, 0x01, 0x42, 0xb0, 0x01, 0x92, 0x20, 0x41, 0x53, - 0xa8, 0x4a, 0x8c, 0x20, 0x01, 0x49, 0x57, 0xbd, 0x8b, 0x20, 0x41, 0xe1, - 0x55, 0x20, 0x81, 0xe6, 0x02, 0xe9, 0x72, 0x20, 0x81, 0x9e, 0x02, 0xf5, - 0x7a, 0x20, 0xc1, 0x00, 0x80, 0x84, 0x02, 0xe2, 0x7e, 0x20, 0x81, 0xea, - 0x01, 0xe7, 0x81, 0x20, 0x81, 0x25, 0xe8, 0x83, 0x20, 0x01, 0xee, 0x84, - 0x20, 0x81, 0x06, 0x42, 0xc5, 0x41, 0x89, 0x20, 0x41, 0xd3, 0x85, 0x20, - 0x81, 0x04, 0xd4, 0x88, 0x20, 0x41, 0x45, 0xd6, 0x3e, 0x86, 0x20, 0xc1, - 0x00, 0x45, 0xd6, 0x3e, 0x87, 0x20, 0x41, 0x07, 0x27, 0x02, 0x06, 0x42, - 0x63, 0x0c, 0x82, 0x20, 0x41, 0xa1, 0xa0, 0x01, 0xa4, 0x91, 0x01, 0x45, - 0x42, 0xad, 0x92, 0x24, 0x01, 0xa7, 0x74, 0xa8, 0x6a, 0x48, 0x54, 0x68, - 0x99, 0x24, 0x01, 0xab, 0x48, 0xac, 0x2d, 0xad, 0x1b, 0x42, 0x26, 0x03, - 0xa5, 0x24, 0x01, 0x42, 0xbb, 0x05, 0xa6, 0x24, 0x01, 0xb3, 0x01, 0xff, - 0x42, 0xb0, 0x01, 0xa7, 0x24, 0x01, 0x46, 0x56, 0x68, 0xa8, 0x24, 0x41, - 0x43, 0xce, 0x03, 0xa2, 0x24, 0x01, 0x42, 0xed, 0x00, 0xa3, 0x24, 0x01, - 0xe9, 0xa4, 0x24, 0x41, 0xa1, 0x06, 0x4c, 0x5d, 0x94, 0xa1, 0x24, 0x41, - 0x45, 0xa8, 0xe4, 0x9e, 0x24, 0x01, 0xed, 0x9f, 0x24, 0xc1, 0x00, 0x4a, - 0x94, 0x5c, 0xa0, 0x24, 0x41, 0x45, 0x1c, 0x02, 0x9a, 0x24, 0x01, 0xb5, - 0x01, 0xff, 0xf2, 0x9b, 0x24, 0x01, 0x44, 0x8a, 0x65, 0x9c, 0x24, 0xc1, - 0x00, 0x4c, 0x8e, 0x65, 0x9d, 0x24, 0x41, 0xe1, 0x97, 0x24, 0x01, 0xe9, - 0x98, 0x24, 0x41, 0xe1, 0x93, 0x24, 0x01, 0xe9, 0x94, 0x24, 0xc1, 0x00, - 0x47, 0x3a, 0xd2, 0x95, 0x24, 0x01, 0x42, 0xa4, 0x02, 0x96, 0x24, 0x41, - 0x42, 0x9e, 0x01, 0x90, 0x24, 0x01, 0x42, 0xf3, 0x0a, 0x91, 0x24, 0x41, - 0x44, 0x52, 0xee, 0x8d, 0x24, 0x01, 0x42, 0xa4, 0x02, 0x8e, 0x24, 0xc1, - 0x00, 0x48, 0x8a, 0x16, 0x8f, 0x24, 0x41, 0x07, 0x27, 0x02, 0x04, 0xd2, - 0x80, 0x20, 0x41, 0x44, 0xe0, 0x73, 0x7f, 0x20, 0x01, 0x43, 0x63, 0x06, - 0x76, 0x23, 0x41, 0x44, 0xd7, 0x3e, 0x7c, 0x20, 0x01, 0x47, 0x76, 0xd1, - 0x7b, 0x20, 0x01, 0x47, 0xba, 0x7a, 0x7d, 0x20, 0x41, 0xe2, 0x73, 0x20, - 0x01, 0xed, 0x74, 0x20, 0x81, 0x18, 0xee, 0x77, 0x20, 0x81, 0x0d, 0x42, - 0xa4, 0x02, 0x79, 0x20, 0xc1, 0x00, 0x49, 0xbf, 0xa3, 0x75, 0x23, 0x41, - 0x53, 0x47, 0x46, 0x78, 0x20, 0x41, 0x07, 0x27, 0x02, 0x0b, 0xd2, 0x76, - 0x20, 0xc1, 0x00, 0x49, 0x9e, 0xb2, 0x8c, 0x24, 0x41, 0x43, 0xc5, 0x06, - 0x8a, 0x24, 0x01, 0x43, 0x63, 0x06, 0x75, 0x20, 0x01, 0x45, 0x86, 0xe8, - 0x8b, 0x24, 0x41, 0x4b, 0xe8, 0x43, 0x88, 0x24, 0x01, 0xe7, 0x56, 0x20, - 0x81, 0x14, 0xed, 0x6e, 0x20, 0x01, 0xf2, 0x6f, 0x20, 0xc1, 0x00, 0xa1, - 0x01, 0xff, 0xd3, 0x70, 0x20, 0x01, 0xd4, 0x71, 0x20, 0x41, 0x80, 0x04, - 0xd3, 0x74, 0x23, 0x41, 0x0d, 0x75, 0x6d, 0x06, 0x49, 0x95, 0x5c, 0x89, - 0x24, 0x41, 0xa1, 0x89, 0x01, 0xa2, 0x7d, 0xa7, 0x5f, 0x42, 0x22, 0x00, - 0x60, 0x20, 0x01, 0x42, 0x46, 0x00, 0x61, 0x20, 0x81, 0x4c, 0x43, 0xe0, - 0x5e, 0x63, 0x20, 0x01, 0xac, 0x31, 0x42, 0xa2, 0x05, 0x68, 0x20, 0x01, - 0x4c, 0xac, 0x3c, 0x69, 0x20, 0x01, 0x42, 0x2f, 0x03, 0x6a, 0x20, 0x01, - 0x44, 0xef, 0x43, 0x6b, 0x20, 0x01, 0xb5, 0x01, 0xff, 0x07, 0x8d, 0x65, - 0x06, 0x42, 0xa4, 0x02, 0x6d, 0x20, 0x41, 0x44, 0xc6, 0xec, 0x6c, 0x20, - 0x01, 0x44, 0x61, 0x06, 0x73, 0x23, 0x41, 0xe1, 0x64, 0x20, 0x01, 0xf5, - 0x65, 0x20, 0xc1, 0x00, 0x4b, 0xa6, 0x95, 0x66, 0x20, 0x01, 0xed, 0x67, - 0x20, 0x41, 0x48, 0xb8, 0x3c, 0x62, 0x20, 0x41, 0xe1, 0x5b, 0x20, 0x81, - 0x11, 0xe9, 0x5d, 0x20, 0x81, 0x06, 0x42, 0x63, 0x0c, 0x5f, 0x20, 0x41, - 0x42, 0xc5, 0x41, 0x5e, 0x20, 0x41, 0x4a, 0xa6, 0x95, 0x5c, 0x20, 0x41, - 0x44, 0x8e, 0xe1, 0x59, 0x20, 0x01, 0xe9, 0x5a, 0x20, 0x41, 0x4a, 0xa6, - 0x95, 0x57, 0x20, 0x01, 0x43, 0xb9, 0x00, 0x58, 0x20, 0x41, 0xe1, 0x40, - 0x20, 0x81, 0x54, 0xe9, 0x49, 0x20, 0x81, 0x3a, 0xf5, 0x4d, 0x20, 0xc1, - 0x00, 0x80, 0x16, 0x43, 0x8f, 0x79, 0x51, 0x20, 0x81, 0x09, 0xf2, 0x53, - 0x20, 0xc1, 0x00, 0xd2, 0x54, 0x20, 0x41, 0x4b, 0x90, 0x95, 0x52, 0x20, - 0x41, 0x4b, 0x50, 0x98, 0x50, 0x20, 0x01, 0x08, 0xda, 0xc6, 0x01, 0xff, - 0x42, 0x5c, 0x00, 0x4e, 0x20, 0x01, 0x49, 0x4e, 0xbd, 0x87, 0x24, 0x01, - 0x42, 0xf3, 0x0a, 0x4f, 0x20, 0x41, 0x07, 0x27, 0x02, 0x01, 0xff, 0xe1, - 0x4a, 0x20, 0x01, 0x43, 0xca, 0x1d, 0x4b, 0x20, 0x01, 0x48, 0x54, 0x68, - 0x4c, 0x20, 0x41, 0xe4, 0x41, 0x20, 0x81, 0x40, 0x42, 0xca, 0xf1, 0x42, - 0x20, 0x01, 0x44, 0xc3, 0x41, 0x43, 0x20, 0x81, 0x1c, 0xec, 0x44, 0x20, - 0x81, 0x0b, 0xf2, 0x47, 0x20, 0xc1, 0x00, 0x42, 0xfa, 0x7d, 0x48, 0x20, - 0x41, 0x49, 0x20, 0xb2, 0x45, 0x20, 0x01, 0x42, 0x23, 0x02, 0x46, 0x20, - 0x41, 0x07, 0x27, 0x02, 0x01, 0xff, 0x43, 0x09, 0xa5, 0x84, 0x24, 0x01, - 0x42, 0x26, 0x03, 0x85, 0x24, 0x01, 0x42, 0x59, 0x00, 0x86, 0x24, 0x41, - 0x50, 0xfa, 0x5e, 0x83, 0x24, 0x41, 0x07, 0x27, 0x02, 0x9d, 0x03, 0xd2, - 0x09, 0x20, 0x01, 0xe2, 0x0a, 0x20, 0x81, 0x83, 0x02, 0xe4, 0x1c, 0x20, - 0x81, 0xf7, 0x01, 0xeb, 0x1d, 0x20, 0x81, 0xe0, 0x01, 0xec, 0x20, 0x20, - 0x81, 0x9a, 0x01, 0x43, 0xb9, 0x00, 0x2b, 0x20, 0x81, 0x81, 0x01, 0xee, - 0x2d, 0x20, 0x81, 0x58, 0x43, 0xd9, 0x12, 0x33, 0x20, 0x01, 0xb2, 0x3d, - 0xb3, 0x01, 0xff, 0x43, 0x96, 0xf0, 0x37, 0x20, 0x01, 0xe8, 0x38, 0x20, - 0xc1, 0x00, 0x80, 0x0a, 0xd2, 0x3e, 0x20, 0x01, 0x43, 0x24, 0x02, 0x3f, - 0x20, 0x41, 0x49, 0x98, 0xa3, 0x3a, 0x20, 0x01, 0x09, 0x53, 0x10, 0x06, - 0x49, 0x58, 0x93, 0x39, 0x20, 0x41, 0x48, 0x53, 0x10, 0x3c, 0x20, 0x81, - 0x06, 0x61, 0x82, 0x0e, 0x3b, 0x20, 0x41, 0x5f, 0x45, 0x10, 0x3d, 0x20, - 0x41, 0x42, 0xe8, 0x01, 0x34, 0x20, 0x81, 0x06, 0x43, 0xf4, 0x9b, 0x36, - 0x20, 0x41, 0x4a, 0x94, 0x5c, 0x35, 0x20, 0x41, 0x80, 0x06, 0x43, 0x63, - 0x06, 0x32, 0x20, 0x41, 0x47, 0x6f, 0xd1, 0x2e, 0x20, 0x01, 0x0a, 0x47, - 0xad, 0x06, 0x4b, 0x4b, 0xa1, 0x2f, 0x20, 0x41, 0x55, 0x97, 0x3c, 0x30, - 0x20, 0x01, 0x47, 0xab, 0x05, 0x31, 0x20, 0x41, 0x07, 0x27, 0x02, 0x01, - 0xff, 0x43, 0x1d, 0xf1, 0x72, 0x23, 0x01, 0x43, 0x63, 0x06, 0x2c, 0x20, - 0x41, 0x07, 0x27, 0x02, 0x0c, 0x42, 0x1a, 0x00, 0x29, 0x20, 0x01, 0x43, - 0x49, 0x3c, 0x2a, 0x20, 0x41, 0x42, 0x13, 0x00, 0x21, 0x20, 0x01, 0x44, - 0x56, 0xec, 0x22, 0x20, 0x01, 0x44, 0xe4, 0x43, 0x23, 0x20, 0x01, 0x42, - 0x22, 0x00, 0x24, 0x20, 0x01, 0xab, 0x0c, 0x43, 0x63, 0x06, 0x27, 0x20, - 0x01, 0x43, 0xcf, 0x7a, 0x28, 0x20, 0x41, 0x43, 0x83, 0xed, 0x25, 0x20, - 0x01, 0xe9, 0x26, 0x20, 0x41, 0x07, 0x27, 0x02, 0x01, 0xff, 0x45, 0x42, - 0xad, 0x1e, 0x20, 0x01, 0x4f, 0x71, 0x71, 0x1f, 0x20, 0x41, 0x4b, 0xe8, - 0x95, 0x82, 0x24, 0x41, 0x80, 0x2c, 0xd2, 0x16, 0x20, 0xc1, 0x00, 0x07, - 0x27, 0x02, 0x01, 0xff, 0xe1, 0x71, 0x23, 0x01, 0x45, 0x8d, 0xe1, 0x17, - 0x20, 0x01, 0x49, 0x11, 0x5f, 0x18, 0x20, 0x01, 0x4a, 0x67, 0xab, 0x19, - 0x20, 0x01, 0x44, 0x00, 0x56, 0x1a, 0x20, 0x01, 0x44, 0xef, 0x43, 0x1b, - 0x20, 0x41, 0x44, 0xd7, 0x3e, 0x15, 0x20, 0x01, 0x06, 0x28, 0x02, 0x01, - 0xff, 0x44, 0xce, 0x03, 0x0b, 0x20, 0x01, 0x49, 0xb2, 0x75, 0x0c, 0x20, - 0x01, 0x02, 0x24, 0x02, 0x3d, 0x42, 0x22, 0x00, 0x0f, 0x20, 0x01, 0xa9, - 0x29, 0x45, 0x22, 0x02, 0x12, 0x20, 0x01, 0x43, 0x54, 0x22, 0x70, 0x23, - 0x81, 0x16, 0x02, 0xa4, 0x02, 0x06, 0x4f, 0x8e, 0x72, 0x14, 0x20, 0x41, - 0x43, 0x28, 0x59, 0x13, 0x20, 0x01, 0x42, 0x8c, 0x65, 0x81, 0x24, 0x41, - 0x45, 0x05, 0x5f, 0x80, 0x24, 0x41, 0x47, 0x55, 0x68, 0x10, 0x20, 0x01, - 0x43, 0x7c, 0x13, 0x11, 0x20, 0x41, 0xec, 0x0d, 0x20, 0x01, 0x47, 0x13, - 0x5f, 0x0e, 0x20, 0x41, 0xe1, 0x01, 0x20, 0x01, 0x43, 0x4f, 0x6f, 0x02, - 0x20, 0x01, 0x49, 0x11, 0x5f, 0x03, 0x20, 0x01, 0x42, 0x22, 0x00, 0x04, - 0x20, 0x01, 0x43, 0xc5, 0x06, 0x05, 0x20, 0x01, 0x4a, 0xd1, 0x3e, 0x06, - 0x20, 0x01, 0x44, 0x41, 0x80, 0x07, 0x20, 0x01, 0x43, 0x21, 0x87, 0x08, - 0x20, 0x41, 0x09, 0x42, 0x25, 0x0c, 0x59, 0xa6, 0x24, 0x70, 0x24, 0x01, - 0x4e, 0xf8, 0x7c, 0x71, 0x24, 0x41, 0x45, 0xc4, 0x3a, 0x72, 0x24, 0x01, - 0x49, 0xd4, 0xbb, 0x74, 0x24, 0x01, 0x48, 0x0a, 0xc9, 0x73, 0x24, 0x41, - 0xa5, 0xb5, 0x05, 0xa6, 0xf6, 0x03, 0x02, 0x26, 0x03, 0xa4, 0x03, 0xaf, - 0xb7, 0x02, 0xb3, 0xb5, 0x01, 0xb4, 0x01, 0xff, 0x05, 0x25, 0x01, 0x4f, - 0x03, 0xd1, 0x09, 0x01, 0xff, 0x43, 0xce, 0x03, 0x00, 0x24, 0x81, 0x3d, - 0xa2, 0x2f, 0x45, 0x13, 0xe3, 0x59, 0x24, 0x01, 0x04, 0x4d, 0x6a, 0x1d, - 0x04, 0xa5, 0xae, 0x11, 0x07, 0x63, 0x73, 0x01, 0xff, 0x44, 0x81, 0x0c, - 0x5b, 0x24, 0x01, 0x4e, 0x8c, 0x5d, 0x5e, 0x24, 0x41, 0xd2, 0x23, 0x24, - 0x01, 0xf5, 0x2d, 0x24, 0x41, 0xd2, 0x16, 0x24, 0x01, 0xf5, 0x1f, 0x24, - 0x41, 0x43, 0x12, 0x5f, 0x50, 0x24, 0x01, 0x43, 0x7d, 0xa8, 0x35, 0x24, - 0x41, 0x45, 0x05, 0x5f, 0x4a, 0x24, 0x41, 0x43, 0xce, 0x03, 0x01, 0x24, - 0x81, 0x52, 0xa2, 0x3d, 0x44, 0x81, 0x0c, 0x08, 0x24, 0x01, 0x04, 0x4d, - 0x6a, 0x2b, 0x04, 0xa5, 0xae, 0x11, 0x10, 0xda, 0x66, 0x01, 0xff, 0x42, - 0x9e, 0xf1, 0x3a, 0x24, 0x01, 0x42, 0xa9, 0xd5, 0x3b, 0x24, 0x41, 0xd2, - 0x24, 0x24, 0x81, 0x0b, 0xf5, 0x2e, 0x24, 0xc1, 0x00, 0x4d, 0x4a, 0x7e, - 0x2f, 0x24, 0x41, 0x4d, 0x4a, 0x7e, 0x25, 0x24, 0x41, 0xd2, 0x17, 0x24, - 0x01, 0xf5, 0x20, 0x24, 0x41, 0x43, 0x12, 0x5f, 0x51, 0x24, 0x01, 0x43, - 0x7d, 0xa8, 0x36, 0x24, 0xc1, 0x00, 0x4d, 0x4a, 0x7e, 0x37, 0x24, 0x41, - 0x45, 0x05, 0x5f, 0x4b, 0x24, 0x41, 0x05, 0xe8, 0x21, 0x45, 0x14, 0xc3, - 0x41, 0x35, 0x03, 0xb6, 0x51, 0x01, 0xff, 0x43, 0xce, 0x03, 0x04, 0x24, - 0x81, 0x23, 0x44, 0x81, 0x0c, 0x0b, 0x24, 0x01, 0x45, 0x8b, 0xe3, 0x1a, - 0x24, 0x01, 0x45, 0xb4, 0xe7, 0x28, 0x24, 0x01, 0xf5, 0x11, 0x24, 0x81, - 0x06, 0x51, 0x8c, 0x5d, 0x40, 0x24, 0x41, 0x4d, 0x4a, 0x7e, 0x6b, 0x24, - 0x41, 0x45, 0x05, 0x5f, 0x4e, 0x24, 0x41, 0x44, 0x81, 0x0c, 0x32, 0x24, - 0x01, 0x43, 0x7c, 0x13, 0x33, 0x24, 0x41, 0x43, 0xce, 0x03, 0x05, 0x24, - 0x01, 0x44, 0x81, 0x0c, 0x0c, 0x24, 0x01, 0x45, 0x8b, 0xe3, 0x1b, 0x24, - 0x01, 0x45, 0xb4, 0xe7, 0x29, 0x24, 0x01, 0xf5, 0x12, 0x24, 0x81, 0x13, - 0x11, 0x9d, 0x5d, 0x01, 0xff, 0x80, 0x04, 0xd3, 0x41, 0x24, 0x41, 0xe1, - 0x42, 0x24, 0x01, 0xe2, 0x43, 0x24, 0x41, 0x4d, 0x4a, 0x7e, 0x6c, 0x24, - 0x41, 0x10, 0xea, 0x62, 0x5a, 0x03, 0xc4, 0x07, 0x01, 0xff, 0xa2, 0x47, - 0xa5, 0x39, 0x04, 0x4d, 0x6a, 0x2d, 0x48, 0x02, 0xc4, 0x64, 0x24, 0x01, - 0x08, 0xd9, 0x02, 0x17, 0x45, 0xbe, 0xe7, 0x2c, 0x24, 0x01, 0x06, 0x6e, - 0x87, 0x01, 0xff, 0x44, 0x81, 0x0c, 0x5a, 0x24, 0x01, 0x4e, 0x8c, 0x5d, - 0x5d, 0x24, 0x41, 0x43, 0xce, 0x03, 0x60, 0x24, 0x01, 0x43, 0xb1, 0x93, - 0x63, 0x24, 0x41, 0xd2, 0x15, 0x24, 0x01, 0xf5, 0x1e, 0x24, 0x41, 0x49, - 0xb7, 0xb7, 0x5f, 0x24, 0x01, 0x44, 0x14, 0xe3, 0x58, 0x24, 0x41, 0x43, - 0x12, 0x5f, 0x4f, 0x24, 0x01, 0x43, 0x7d, 0xa8, 0x34, 0x24, 0x41, 0x47, - 0x2a, 0x01, 0x62, 0x24, 0x01, 0x45, 0xdc, 0xdc, 0x61, 0x24, 0x41, 0x04, - 0xbe, 0xec, 0x3d, 0x03, 0xc4, 0x07, 0x01, 0xff, 0x43, 0xce, 0x03, 0x07, - 0x24, 0x01, 0x44, 0x81, 0x0c, 0x0e, 0x24, 0x01, 0x45, 0x8b, 0xe3, 0x1d, - 0x24, 0x01, 0x45, 0xb4, 0xe7, 0x2b, 0x24, 0x01, 0xf5, 0x14, 0x24, 0x81, - 0x15, 0x53, 0x1b, 0x4d, 0x46, 0x24, 0xc1, 0x00, 0x42, 0x19, 0x00, 0x49, - 0x24, 0x01, 0xd3, 0x47, 0x24, 0x01, 0xd4, 0x48, 0x24, 0x41, 0x4d, 0x4a, - 0x7e, 0x6e, 0x24, 0x41, 0x43, 0x28, 0x59, 0x57, 0x24, 0x01, 0x43, 0x7c, - 0x13, 0x56, 0x24, 0x41, 0x04, 0xa7, 0x05, 0x65, 0x04, 0xcb, 0x06, 0x01, - 0xff, 0x43, 0xce, 0x03, 0x02, 0x24, 0x81, 0x53, 0xa2, 0x3e, 0x44, 0x81, - 0x0c, 0x09, 0x24, 0x01, 0x04, 0x4d, 0x6a, 0x2c, 0x04, 0xa5, 0xae, 0x20, - 0xf5, 0x0f, 0x24, 0x81, 0x15, 0x52, 0x16, 0x55, 0x3c, 0x24, 0xc1, 0x00, - 0x80, 0x04, 0xd4, 0x3d, 0x24, 0x41, 0xe1, 0x3e, 0x24, 0x01, 0xe2, 0x3f, - 0x24, 0x41, 0x4d, 0x4a, 0x7e, 0x69, 0x24, 0x41, 0xd2, 0x26, 0x24, 0x01, - 0xf5, 0x30, 0x24, 0x41, 0xd2, 0x18, 0x24, 0x01, 0xf5, 0x21, 0x24, 0x41, - 0x43, 0x12, 0x5f, 0x52, 0x24, 0x81, 0x06, 0x43, 0x7d, 0xa8, 0x38, 0x24, - 0x41, 0x4d, 0x4a, 0x7e, 0x53, 0x24, 0x41, 0x45, 0x05, 0x5f, 0x4c, 0x24, - 0x41, 0x43, 0xce, 0x03, 0x03, 0x24, 0x81, 0x46, 0xa2, 0x31, 0x44, 0x81, - 0x0c, 0x0a, 0x24, 0x01, 0x04, 0x4d, 0x6a, 0x1f, 0xb3, 0x0b, 0xf5, 0x10, - 0x24, 0xc1, 0x00, 0x4d, 0x4a, 0x7e, 0x6a, 0x24, 0x41, 0x03, 0x65, 0x05, - 0x06, 0x4a, 0xe1, 0xa9, 0x5c, 0x24, 0x41, 0xd2, 0x27, 0x24, 0x01, 0xf5, - 0x31, 0x24, 0x41, 0xd2, 0x19, 0x24, 0x01, 0xf5, 0x22, 0x24, 0x41, 0x43, - 0x12, 0x5f, 0x54, 0x24, 0x81, 0x06, 0x43, 0x7d, 0xa8, 0x39, 0x24, 0x41, - 0x4d, 0x4a, 0x7e, 0x55, 0x24, 0x41, 0x45, 0x05, 0x5f, 0x4d, 0x24, 0x41, - 0x05, 0xc9, 0x00, 0x1f, 0x07, 0xd9, 0xcf, 0x01, 0xff, 0xa6, 0x0c, 0x49, - 0xc6, 0xba, 0x65, 0x24, 0x01, 0x4a, 0x03, 0xb0, 0x66, 0x24, 0x41, 0x44, - 0x08, 0x4c, 0x68, 0x24, 0x01, 0x44, 0x85, 0x50, 0x67, 0x24, 0x41, 0x43, - 0xce, 0x03, 0x06, 0x24, 0x01, 0x44, 0x81, 0x0c, 0x0d, 0x24, 0x01, 0x45, - 0x8b, 0xe3, 0x1c, 0x24, 0x01, 0x45, 0xb4, 0xe7, 0x2a, 0x24, 0x01, 0xf5, - 0x13, 0x24, 0x81, 0x0b, 0x51, 0xae, 0x5d, 0x44, 0x24, 0xc1, 0x00, 0xd3, - 0x45, 0x24, 0x41, 0x4d, 0x4a, 0x7e, 0x6d, 0x24, 0x41, 0x42, 0x5c, 0x00, - 0x80, 0xf9, 0x01, 0xa5, 0xa1, 0x01, 0x45, 0x88, 0x77, 0x97, 0xf9, 0x81, - 0x93, 0x01, 0xaf, 0x27, 0xb5, 0x19, 0xb9, 0x01, 0xff, 0x04, 0xa1, 0x01, - 0x06, 0x49, 0xf4, 0xbc, 0x2e, 0xf5, 0x41, 0x48, 0xc0, 0x1e, 0x3f, 0xf6, - 0x01, 0x44, 0xe1, 0x07, 0x22, 0xf6, 0x41, 0x43, 0x0e, 0x21, 0x7c, 0xfa, - 0x01, 0x4a, 0xb1, 0xb1, 0xa2, 0x20, 0x40, 0x46, 0xcc, 0xd7, 0x0a, 0xf4, - 0x01, 0x46, 0x24, 0xda, 0x50, 0xf9, 0x01, 0x02, 0xee, 0x00, 0x06, 0x42, - 0xa7, 0x01, 0x51, 0xf4, 0x41, 0x80, 0x1c, 0x03, 0x05, 0x00, 0x06, 0x49, - 0x23, 0xb8, 0xcc, 0x26, 0x40, 0x45, 0x54, 0xe3, 0x8c, 0xf3, 0x01, 0x67, - 0xa2, 0x05, 0x8a, 0xf1, 0x01, 0x46, 0x36, 0xdd, 0x94, 0x26, 0x40, 0x44, - 0xb9, 0x00, 0x4c, 0x27, 0x00, 0x03, 0xf4, 0x01, 0x20, 0xb0, 0x01, 0xff, - 0x0a, 0xd1, 0xa5, 0x0d, 0x45, 0x3b, 0xdc, 0x42, 0xf5, 0xc1, 0x00, 0x57, - 0x19, 0x2c, 0x41, 0xf5, 0x41, 0x4d, 0x51, 0x83, 0x51, 0x2e, 0x00, 0x4e, - 0x58, 0x7a, 0x50, 0x2e, 0x40, 0x49, 0x74, 0xb8, 0x29, 0x26, 0x00, 0x48, - 0x4a, 0xc5, 0x28, 0x26, 0x40, 0x4d, 0xd5, 0x7d, 0xcf, 0xf3, 0x41, 0x48, - 0xa2, 0xc2, 0xb3, 0xf4, 0x01, 0x4a, 0x4a, 0x40, 0x19, 0xf3, 0x41, 0x42, - 0x8a, 0x00, 0xe5, 0xf9, 0x01, 0xa3, 0xb1, 0x23, 0x44, 0x8e, 0xec, 0xb0, - 0x26, 0x00, 0x42, 0x9e, 0x01, 0x99, 0xfa, 0x01, 0xac, 0x86, 0x23, 0xad, - 0xbd, 0x0c, 0xae, 0xad, 0x0b, 0x02, 0x2a, 0x05, 0x95, 0x0b, 0xb0, 0xcb, - 0x01, 0xb2, 0xb6, 0x01, 0xb5, 0x0b, 0xf7, 0x04, 0xf4, 0xc1, 0x00, 0x45, - 0xe0, 0x07, 0x2e, 0xf4, 0x41, 0x4b, 0x03, 0x98, 0xcb, 0xf6, 0x01, 0x02, - 0x11, 0x00, 0x06, 0x4e, 0xbe, 0x79, 0x91, 0xf4, 0x41, 0x02, 0x33, 0x00, - 0x88, 0x01, 0x08, 0x82, 0xc4, 0x01, 0xff, 0x0b, 0x09, 0xa1, 0x42, 0x0b, - 0x1c, 0xa2, 0x01, 0xff, 0x45, 0xc3, 0x0a, 0x67, 0xd3, 0x01, 0xa6, 0x29, - 0x44, 0x46, 0x2a, 0x68, 0xd3, 0x01, 0x43, 0xbf, 0x0a, 0x60, 0xd3, 0x01, - 0xb3, 0x0f, 0xb4, 0x01, 0xff, 0x44, 0x25, 0x01, 0x62, 0xd3, 0x01, 0x42, - 0x15, 0x02, 0x61, 0xd3, 0x41, 0x44, 0x27, 0x1d, 0x66, 0xd3, 0x01, 0x42, - 0x60, 0x25, 0x65, 0xd3, 0x41, 0x43, 0xa7, 0x05, 0x64, 0xd3, 0x01, 0x43, - 0xcb, 0x06, 0x63, 0xd3, 0x41, 0x45, 0xc3, 0x0a, 0x70, 0xd3, 0x01, 0xa6, - 0x29, 0x44, 0x46, 0x2a, 0x71, 0xd3, 0x01, 0x43, 0xbf, 0x0a, 0x69, 0xd3, - 0x01, 0xb3, 0x0f, 0xb4, 0x01, 0xff, 0x44, 0x25, 0x01, 0x6b, 0xd3, 0x01, - 0x42, 0x15, 0x02, 0x6a, 0xd3, 0x41, 0x44, 0x27, 0x1d, 0x6f, 0xd3, 0x01, - 0x42, 0x60, 0x25, 0x6e, 0xd3, 0x41, 0x43, 0xa7, 0x05, 0x6d, 0xd3, 0x01, - 0x43, 0xcb, 0x06, 0x6c, 0xd3, 0x41, 0x44, 0x12, 0xec, 0x34, 0x23, 0x00, - 0x44, 0x5a, 0xef, 0x35, 0x23, 0x40, 0x42, 0x13, 0x00, 0xb8, 0xfa, 0x01, - 0x52, 0x8e, 0x52, 0x4f, 0x2e, 0x00, 0x4b, 0xb4, 0x9f, 0x58, 0x22, 0x40, - 0x04, 0x84, 0x1f, 0x0f, 0xb9, 0x01, 0xff, 0x4b, 0x7b, 0x9c, 0x2f, 0xf1, - 0x01, 0x4a, 0x05, 0xae, 0xa9, 0x00, 0x40, 0xa3, 0xed, 0x05, 0x06, 0x6e, - 0xd8, 0x90, 0x04, 0xa6, 0x81, 0x04, 0x55, 0x2e, 0x3c, 0xff, 0x2c, 0x00, - 0x0b, 0x6a, 0x9e, 0xde, 0x03, 0xb3, 0x01, 0xff, 0x0c, 0x4c, 0x08, 0x33, - 0x06, 0xf4, 0x15, 0x01, 0xff, 0xab, 0x20, 0x45, 0x89, 0xe5, 0xe5, 0x2c, - 0x00, 0x45, 0xbf, 0xe6, 0xe6, 0x2c, 0x00, 0xb3, 0x06, 0x46, 0x60, 0xdd, - 0xe8, 0x2c, 0x40, 0x49, 0x39, 0xb7, 0xea, 0x2c, 0x00, 0x46, 0x66, 0xdd, - 0xe7, 0x2c, 0x40, 0x42, 0x05, 0x07, 0xe4, 0x2c, 0x00, 0x45, 0xcf, 0xc7, - 0xe9, 0x2c, 0x40, 0xa1, 0x95, 0x03, 0x4d, 0xa9, 0x7f, 0xf3, 0x2c, 0x00, - 0x02, 0x4a, 0x06, 0xe7, 0x02, 0xa4, 0xbb, 0x02, 0x43, 0xde, 0xf0, 0x89, - 0x2c, 0x00, 0xa6, 0xa8, 0x02, 0x02, 0x24, 0x02, 0x97, 0x02, 0xa8, 0x88, - 0x02, 0x45, 0x30, 0xe4, 0x93, 0x2c, 0x00, 0xab, 0xe7, 0x01, 0xac, 0xd8, - 0x01, 0x42, 0x7d, 0x02, 0x99, 0x2c, 0x00, 0x42, 0x26, 0x03, 0x9b, 0x2c, - 0x00, 0xef, 0x9f, 0x2c, 0x80, 0x54, 0xb0, 0x48, 0x42, 0xd0, 0x00, 0xa3, - 0x2c, 0x00, 0xb3, 0x20, 0xb4, 0x12, 0x42, 0x7d, 0x00, 0xa9, 0x2c, 0x00, - 0x44, 0xb6, 0xef, 0x83, 0x2c, 0x00, 0x44, 0x02, 0xf0, 0x8d, 0x2c, 0x40, - 0x42, 0xd7, 0x23, 0xa7, 0x2c, 0x00, 0x45, 0xea, 0xe3, 0x91, 0x2c, 0x40, - 0x44, 0x79, 0x92, 0xc1, 0x2c, 0x00, 0xa8, 0x0c, 0x43, 0x94, 0x0c, 0xa5, - 0x2c, 0x00, 0x42, 0x3c, 0x01, 0x8b, 0x2c, 0x40, 0x42, 0xc3, 0x0a, 0xe3, - 0x03, 0x00, 0x43, 0x94, 0x0c, 0xed, 0x03, 0x40, 0xe9, 0xa1, 0x2c, 0x00, - 0x42, 0x2f, 0x03, 0xaf, 0x2c, 0x40, 0x03, 0x7b, 0x23, 0x06, 0x42, 0x3c, - 0x01, 0xb1, 0x2c, 0x40, 0x07, 0x47, 0xcd, 0x1f, 0x07, 0x6e, 0x9e, 0x01, - 0xff, 0xae, 0x0c, 0x45, 0xc3, 0xe7, 0xdd, 0x2c, 0x00, 0x43, 0x77, 0xf1, - 0xe3, 0x2c, 0x40, 0x42, 0xc6, 0x06, 0xdf, 0x2c, 0x00, 0x42, 0xf7, 0x19, - 0xe1, 0x2c, 0x40, 0x43, 0x05, 0x07, 0xb5, 0x2c, 0x00, 0x43, 0xcf, 0xf0, - 0xd9, 0x2c, 0x00, 0x43, 0x28, 0x59, 0xc7, 0x2c, 0x00, 0x46, 0xec, 0xd8, - 0xd7, 0x2c, 0x00, 0xa8, 0x17, 0x43, 0xc8, 0x91, 0xbf, 0x2c, 0x00, 0x02, - 0xa4, 0x02, 0x01, 0xff, 0x42, 0xc3, 0x0a, 0xc5, 0x2c, 0x00, 0x43, 0x94, - 0x0c, 0xdb, 0x2c, 0x40, 0xe1, 0xcf, 0x2c, 0x80, 0x0c, 0x42, 0xc3, 0x0a, - 0xd3, 0x2c, 0x00, 0x43, 0x0c, 0x00, 0xcd, 0x2c, 0x40, 0xf4, 0xd5, 0x2c, - 0x40, 0x4a, 0x7d, 0xa4, 0xd1, 0x2c, 0x00, 0x44, 0xf2, 0xeb, 0x97, 0x2c, - 0x40, 0x43, 0xab, 0x3c, 0x95, 0x2c, 0x00, 0xa8, 0x06, 0x42, 0x2f, 0x03, - 0x9d, 0x2c, 0x40, 0x42, 0xc3, 0x0a, 0xe7, 0x03, 0x00, 0xe9, 0xad, 0x2c, - 0x40, 0x43, 0x8a, 0x00, 0x8f, 0x2c, 0x00, 0x43, 0x0c, 0x00, 0xe9, 0x03, - 0x40, 0x43, 0xea, 0x04, 0x85, 0x2c, 0x00, 0x44, 0xee, 0xd8, 0xeb, 0x03, - 0x40, 0x42, 0xc3, 0x0a, 0xe5, 0x03, 0x00, 0xe9, 0xab, 0x2c, 0x40, 0x44, - 0xbe, 0xeb, 0x87, 0x2c, 0x00, 0x42, 0xc3, 0x0a, 0xef, 0x03, 0x00, 0x09, - 0x8a, 0xb7, 0x01, 0xff, 0x44, 0x67, 0x00, 0xb3, 0x2c, 0x00, 0x44, 0x0b, - 0x00, 0xcb, 0x2c, 0x00, 0x44, 0x28, 0xc7, 0xb9, 0x2c, 0x00, 0x42, 0x26, - 0x03, 0xbb, 0x2c, 0x40, 0x4a, 0xc5, 0xac, 0xc3, 0x2c, 0x00, 0x0c, 0x4c, - 0x24, 0x01, 0xff, 0x43, 0xde, 0xf0, 0xb7, 0x2c, 0x00, 0x46, 0xec, 0xd8, - 0xee, 0x2c, 0x00, 0x42, 0x26, 0x03, 0xbd, 0x2c, 0x00, 0x44, 0xcb, 0xac, - 0xec, 0x2c, 0x40, 0x4c, 0xf9, 0x8e, 0xc9, 0x2c, 0x00, 0x43, 0x20, 0xf1, - 0x81, 0x2c, 0x40, 0x54, 0xcf, 0x33, 0xfa, 0x2c, 0x00, 0x49, 0x15, 0x16, - 0xf9, 0x2c, 0x00, 0x56, 0xcd, 0x33, 0xfb, 0x2c, 0x00, 0x4d, 0x93, 0x52, - 0xfc, 0x2c, 0x40, 0x50, 0xb4, 0x58, 0xfd, 0x2c, 0x00, 0x48, 0x16, 0x16, - 0xfe, 0x2c, 0x40, 0x06, 0xc4, 0x06, 0x96, 0x01, 0x07, 0x2f, 0x39, 0x06, - 0x4e, 0x8c, 0x7b, 0xe0, 0x02, 0x41, 0x05, 0xc3, 0x0a, 0x7e, 0xa6, 0x5f, - 0x04, 0x46, 0x2a, 0x4f, 0x4b, 0x1e, 0x11, 0xf3, 0x02, 0x01, 0xb3, 0x26, - 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0xea, 0x02, 0x01, 0xa8, 0x0f, 0xb7, - 0x01, 0xff, 0x44, 0x29, 0x1d, 0xeb, 0x02, 0x01, 0x49, 0x1c, 0x1d, 0xf4, - 0x02, 0x41, 0x44, 0x2c, 0x11, 0xec, 0x02, 0x01, 0x4b, 0x8f, 0x17, 0xf5, - 0x02, 0x41, 0x04, 0x27, 0x1d, 0x11, 0x02, 0x60, 0x25, 0x01, 0xff, 0x48, - 0x21, 0x11, 0xf8, 0x02, 0x01, 0x42, 0x2e, 0x11, 0xef, 0x02, 0x41, 0x48, - 0x21, 0x11, 0xf9, 0x02, 0x01, 0x42, 0x2e, 0x11, 0xf0, 0x02, 0x41, 0x48, - 0x21, 0x11, 0xfb, 0x02, 0x01, 0x42, 0x2e, 0x11, 0xf2, 0x02, 0x41, 0xa9, - 0x0f, 0xaf, 0x01, 0xff, 0x43, 0x2d, 0x11, 0xed, 0x02, 0x01, 0x4a, 0xa3, - 0xb0, 0xf6, 0x02, 0x41, 0x43, 0x09, 0x4c, 0xee, 0x02, 0x01, 0x4a, 0xb2, - 0x38, 0xf7, 0x02, 0x41, 0x48, 0x21, 0x11, 0xfa, 0x02, 0x01, 0xf9, 0xf1, - 0x02, 0x41, 0x45, 0xc3, 0x0a, 0xe8, 0x02, 0x01, 0xa6, 0x29, 0x44, 0x46, - 0x2a, 0xe9, 0x02, 0x01, 0x43, 0xbf, 0x0a, 0xe1, 0x02, 0x01, 0xb3, 0x0f, - 0xb4, 0x01, 0xff, 0x44, 0x25, 0x01, 0xe3, 0x02, 0x01, 0x42, 0x15, 0x02, - 0xe2, 0x02, 0x41, 0x44, 0x27, 0x1d, 0xe7, 0x02, 0x01, 0x42, 0x60, 0x25, - 0xe6, 0x02, 0x41, 0x43, 0xa7, 0x05, 0xe5, 0x02, 0x01, 0x43, 0xcb, 0x06, - 0xe4, 0x02, 0x41, 0x0e, 0xba, 0x05, 0x1c, 0x09, 0xc7, 0x15, 0x01, 0xff, - 0x48, 0x12, 0xc6, 0xef, 0x2c, 0x00, 0x09, 0xe2, 0xbc, 0x01, 0xff, 0x45, - 0x65, 0xe1, 0xf0, 0x2c, 0x00, 0x45, 0x11, 0xe5, 0xf1, 0x2c, 0x40, 0xa1, - 0x95, 0x03, 0x4d, 0xa9, 0x7f, 0xf2, 0x2c, 0x00, 0x02, 0x4a, 0x06, 0xe7, - 0x02, 0xa4, 0xbb, 0x02, 0x43, 0xde, 0xf0, 0x88, 0x2c, 0x00, 0xa6, 0xa8, - 0x02, 0x02, 0x24, 0x02, 0x97, 0x02, 0xa8, 0x88, 0x02, 0x45, 0x30, 0xe4, - 0x92, 0x2c, 0x00, 0xab, 0xe7, 0x01, 0xac, 0xd8, 0x01, 0x42, 0x7d, 0x02, - 0x98, 0x2c, 0x00, 0x42, 0x26, 0x03, 0x9a, 0x2c, 0x00, 0xef, 0x9e, 0x2c, - 0x80, 0x54, 0xb0, 0x48, 0x42, 0xd0, 0x00, 0xa2, 0x2c, 0x00, 0xb3, 0x20, - 0xb4, 0x12, 0x42, 0x7d, 0x00, 0xa8, 0x2c, 0x00, 0x44, 0xb6, 0xef, 0x82, - 0x2c, 0x00, 0x44, 0x02, 0xf0, 0x8c, 0x2c, 0x40, 0x42, 0xd7, 0x23, 0xa6, - 0x2c, 0x00, 0x45, 0xea, 0xe3, 0x90, 0x2c, 0x40, 0x44, 0x79, 0x92, 0xc0, - 0x2c, 0x00, 0xa8, 0x0c, 0x43, 0x94, 0x0c, 0xa4, 0x2c, 0x00, 0x42, 0x3c, - 0x01, 0x8a, 0x2c, 0x40, 0x42, 0xc3, 0x0a, 0xe2, 0x03, 0x00, 0x43, 0x94, - 0x0c, 0xec, 0x03, 0x40, 0xe9, 0xa0, 0x2c, 0x00, 0x42, 0x2f, 0x03, 0xae, - 0x2c, 0x40, 0x03, 0x7b, 0x23, 0x06, 0x42, 0x3c, 0x01, 0xb0, 0x2c, 0x40, - 0x07, 0x47, 0xcd, 0x1f, 0x07, 0x6e, 0x9e, 0x01, 0xff, 0xae, 0x0c, 0x45, - 0xc3, 0xe7, 0xdc, 0x2c, 0x00, 0x43, 0x77, 0xf1, 0xe2, 0x2c, 0x40, 0x42, - 0xc6, 0x06, 0xde, 0x2c, 0x00, 0x42, 0xf7, 0x19, 0xe0, 0x2c, 0x40, 0x43, - 0x05, 0x07, 0xb4, 0x2c, 0x00, 0x43, 0xcf, 0xf0, 0xd8, 0x2c, 0x00, 0x43, - 0x28, 0x59, 0xc6, 0x2c, 0x00, 0x46, 0xec, 0xd8, 0xd6, 0x2c, 0x00, 0xa8, - 0x17, 0x43, 0xc8, 0x91, 0xbe, 0x2c, 0x00, 0x02, 0xa4, 0x02, 0x01, 0xff, - 0x42, 0xc3, 0x0a, 0xc4, 0x2c, 0x00, 0x43, 0x94, 0x0c, 0xda, 0x2c, 0x40, - 0xe1, 0xce, 0x2c, 0x80, 0x0c, 0x42, 0xc3, 0x0a, 0xd2, 0x2c, 0x00, 0x43, - 0x0c, 0x00, 0xcc, 0x2c, 0x40, 0xf4, 0xd4, 0x2c, 0x40, 0x4a, 0x7d, 0xa4, - 0xd0, 0x2c, 0x00, 0x44, 0xf2, 0xeb, 0x96, 0x2c, 0x40, 0x43, 0xab, 0x3c, - 0x94, 0x2c, 0x00, 0xa8, 0x06, 0x42, 0x2f, 0x03, 0x9c, 0x2c, 0x40, 0x42, - 0xc3, 0x0a, 0xe6, 0x03, 0x00, 0xe9, 0xac, 0x2c, 0x40, 0x43, 0x8a, 0x00, - 0x8e, 0x2c, 0x00, 0x43, 0x0c, 0x00, 0xe8, 0x03, 0x40, 0x43, 0xea, 0x04, - 0x84, 0x2c, 0x00, 0x44, 0xee, 0xd8, 0xea, 0x03, 0x40, 0x42, 0xc3, 0x0a, - 0xe4, 0x03, 0x00, 0xe9, 0xaa, 0x2c, 0x40, 0x44, 0xbe, 0xeb, 0x86, 0x2c, - 0x00, 0x42, 0xc3, 0x0a, 0xee, 0x03, 0x00, 0x09, 0x8a, 0xb7, 0x01, 0xff, - 0x44, 0x67, 0x00, 0xb2, 0x2c, 0x00, 0x44, 0x0b, 0x00, 0xca, 0x2c, 0x00, - 0x44, 0x28, 0xc7, 0xb8, 0x2c, 0x00, 0x42, 0x26, 0x03, 0xba, 0x2c, 0x40, - 0x4a, 0xc5, 0xac, 0xc2, 0x2c, 0x00, 0x0c, 0x4c, 0x24, 0x01, 0xff, 0x43, - 0xde, 0xf0, 0xb6, 0x2c, 0x00, 0x46, 0xec, 0xd8, 0xed, 0x2c, 0x00, 0x42, - 0x26, 0x03, 0xbc, 0x2c, 0x00, 0x44, 0xcb, 0xac, 0xeb, 0x2c, 0x40, 0x4c, - 0xf9, 0x8e, 0xc8, 0x2c, 0x00, 0x43, 0x20, 0xf1, 0x80, 0x2c, 0x40, 0x47, - 0xda, 0xcd, 0x5a, 0xf3, 0x01, 0xa9, 0x01, 0xff, 0xe5, 0x6a, 0xf3, 0x01, - 0x42, 0x1d, 0x01, 0x73, 0xf3, 0x41, 0xa6, 0x79, 0x55, 0x9f, 0x3a, 0x6d, - 0x2a, 0x00, 0x4a, 0x2d, 0xa9, 0x32, 0x23, 0x00, 0x48, 0xc2, 0xc4, 0x0c, - 0x26, 0x00, 0x0a, 0x27, 0xaf, 0x57, 0xb4, 0x06, 0x4e, 0xdc, 0x7c, 0xea, - 0xf3, 0x41, 0x05, 0xfe, 0x67, 0x1d, 0x57, 0x45, 0x1a, 0x81, 0x23, 0x00, - 0x4c, 0xc1, 0x6f, 0x2e, 0x22, 0x00, 0x04, 0x88, 0x88, 0x01, 0xff, 0x45, - 0xc6, 0xe4, 0x9b, 0xf3, 0x01, 0x53, 0x9f, 0x4b, 0x9b, 0x00, 0x40, 0x03, - 0x1f, 0x03, 0x17, 0x05, 0x51, 0x00, 0x01, 0xff, 0x56, 0xa9, 0x34, 0xfa, - 0x22, 0x00, 0x47, 0x77, 0x7e, 0xfd, 0x22, 0x00, 0x68, 0x05, 0x05, 0xfb, - 0x22, 0x40, 0x46, 0x89, 0x05, 0x0b, 0x22, 0x00, 0x4f, 0xa0, 0x52, 0xb3, - 0x22, 0xc0, 0x00, 0x4c, 0x51, 0x28, 0xb5, 0x22, 0x40, 0x44, 0x2f, 0x03, - 0xa7, 0xf6, 0x01, 0x46, 0x44, 0xde, 0x77, 0xf4, 0x41, 0x49, 0x6a, 0xb6, - 0x8a, 0xf3, 0x01, 0x4b, 0xe3, 0x9e, 0x16, 0xf6, 0x01, 0x49, 0x08, 0x97, - 0x15, 0xf6, 0x41, 0x07, 0xc9, 0x15, 0x38, 0x42, 0xc2, 0x05, 0x04, 0x26, - 0x00, 0xad, 0x1b, 0xb0, 0x01, 0xff, 0x43, 0x7b, 0x1f, 0xed, 0xf9, 0x01, - 0x46, 0xa0, 0x90, 0x01, 0x22, 0x00, 0x4e, 0x40, 0x79, 0x84, 0x23, 0x00, - 0x47, 0x0a, 0x65, 0xdc, 0xf5, 0x41, 0xe1, 0x2c, 0x00, 0x00, 0x07, 0x34, - 0xb6, 0x01, 0xff, 0x42, 0x8a, 0x00, 0x40, 0x00, 0x00, 0x4a, 0x6d, 0x96, - 0x52, 0x20, 0x40, 0xa1, 0xa5, 0x15, 0xa2, 0xf5, 0x14, 0xa3, 0xa5, 0x11, - 0xa4, 0x89, 0x0e, 0xa5, 0xcf, 0x0d, 0xa6, 0xc0, 0x0d, 0xa7, 0x81, 0x0a, - 0x02, 0x0b, 0x00, 0xea, 0x09, 0xa9, 0xac, 0x09, 0x02, 0x1b, 0x02, 0x86, - 0x09, 0xac, 0xfb, 0x04, 0xad, 0xb4, 0x04, 0xae, 0xa5, 0x04, 0xaf, 0xe7, - 0x03, 0xb0, 0xb4, 0x03, 0xb2, 0x8b, 0x02, 0xb3, 0xc8, 0x01, 0xb4, 0x81, - 0x01, 0xb5, 0x5b, 0x09, 0x32, 0x00, 0x41, 0x02, 0x51, 0x00, 0x27, 0xb8, - 0x11, 0x07, 0x11, 0x33, 0x01, 0xff, 0x45, 0x5c, 0x00, 0x5b, 0x03, 0x00, - 0x45, 0xf5, 0x06, 0xcf, 0x1d, 0x40, 0x80, 0x06, 0x48, 0x52, 0xc0, 0xb5, - 0x1a, 0x40, 0x45, 0x5c, 0x00, 0x3d, 0x03, 0x00, 0x45, 0xf5, 0x06, 0x53, - 0x03, 0x40, 0x03, 0x23, 0x04, 0x06, 0x4f, 0xef, 0x6b, 0xb6, 0x1a, 0x40, - 0x4c, 0x2d, 0x8b, 0xe9, 0x20, 0x00, 0x55, 0x5c, 0x3b, 0xf9, 0x1d, 0x40, - 0x05, 0xc2, 0x07, 0x06, 0x45, 0xad, 0x22, 0x3e, 0x03, 0x40, 0x45, 0x5c, - 0x00, 0x0d, 0x03, 0x00, 0x45, 0xf5, 0x06, 0x29, 0x03, 0x40, 0xb0, 0x0c, - 0x47, 0xcd, 0x06, 0xd1, 0x1d, 0x00, 0x47, 0xaa, 0x0e, 0xd2, 0x1d, 0x40, - 0x06, 0xdd, 0x95, 0x06, 0x51, 0x8a, 0x41, 0x4e, 0x03, 0x40, 0x45, 0x5c, - 0x00, 0xf5, 0x1d, 0x00, 0x45, 0xf5, 0x06, 0x1d, 0x03, 0x40, 0x4f, 0x5f, - 0x12, 0xdb, 0x20, 0x00, 0x44, 0xae, 0x22, 0x03, 0x03, 0x80, 0x1c, 0x06, - 0xc9, 0x1c, 0x06, 0x51, 0x6a, 0x5d, 0x12, 0x03, 0x40, 0x4c, 0x3d, 0x8a, - 0xcb, 0x1a, 0x00, 0x43, 0xd4, 0x09, 0xb4, 0x1a, 0x00, 0x48, 0x5a, 0xc9, - 0xe8, 0x20, 0x40, 0x80, 0x01, 0xff, 0x45, 0xf5, 0x06, 0x30, 0x03, 0x00, - 0x4f, 0xc0, 0x6d, 0x29, 0xfe, 0x00, 0x47, 0x79, 0x22, 0x34, 0x03, 0x00, - 0x50, 0x2a, 0x65, 0x2a, 0xfe, 0x40, 0x4c, 0xa1, 0x8c, 0x3c, 0x03, 0x00, - 0x05, 0x75, 0x33, 0x22, 0x4a, 0xd5, 0xab, 0xc2, 0x1d, 0x00, 0x07, 0x28, - 0x26, 0x0c, 0x61, 0x61, 0x0e, 0xba, 0x1a, 0x00, 0x4e, 0xce, 0x7c, 0xc3, - 0x1d, 0x40, 0x44, 0xf6, 0x06, 0x3b, 0x03, 0x00, 0x4d, 0xf5, 0x85, 0xc5, - 0x1a, 0x40, 0xb3, 0x06, 0x55, 0xe7, 0x3d, 0xd3, 0x20, 0x40, 0x4e, 0xb7, - 0x32, 0x37, 0x03, 0x00, 0x4d, 0xad, 0x48, 0x35, 0x03, 0x40, 0xa5, 0x8c, - 0x01, 0xa9, 0x01, 0xff, 0x03, 0xca, 0x00, 0x17, 0x03, 0xa2, 0x01, 0x01, - 0xff, 0x45, 0x5c, 0x00, 0x0a, 0x03, 0x00, 0x45, 0xf5, 0x06, 0x25, 0x03, - 0x00, 0x47, 0x79, 0x22, 0xd8, 0x20, 0x40, 0x80, 0x06, 0x61, 0xc4, 0x0e, - 0xec, 0x20, 0x40, 0x05, 0xce, 0x00, 0x30, 0x02, 0x22, 0x00, 0x16, 0x0c, - 0x50, 0x21, 0x06, 0x4a, 0xde, 0x95, 0x19, 0x03, 0x40, 0x4b, 0x54, 0x05, - 0xc2, 0x1a, 0x00, 0x4b, 0x7f, 0x97, 0xc4, 0x1a, 0x40, 0x08, 0x1a, 0xc5, - 0x06, 0x4b, 0x38, 0xa0, 0xd1, 0x20, 0x40, 0x45, 0x5c, 0x00, 0x57, 0x03, - 0x00, 0x45, 0xf5, 0x06, 0x39, 0x03, 0x40, 0x80, 0x24, 0x05, 0x19, 0x1b, - 0x01, 0xff, 0xa1, 0x06, 0x45, 0xf5, 0x06, 0x55, 0x03, 0x40, 0x44, 0x5d, - 0x00, 0x50, 0x03, 0x00, 0x03, 0x1b, 0x00, 0x01, 0xff, 0x54, 0xbf, 0x40, - 0xff, 0x1d, 0x00, 0x52, 0xe0, 0x54, 0x56, 0x03, 0x40, 0x45, 0x5c, 0x00, - 0xd7, 0x20, 0x00, 0x45, 0xf5, 0x06, 0xef, 0x20, 0x40, 0x52, 0x98, 0x54, - 0x22, 0x03, 0x00, 0x05, 0x13, 0x04, 0x01, 0xff, 0x50, 0xb5, 0x32, 0xe5, - 0x20, 0x00, 0x4d, 0x6e, 0x5d, 0x14, 0x03, 0x40, 0xa1, 0x11, 0x09, 0x46, - 0x70, 0x01, 0xff, 0x45, 0x5c, 0x00, 0xc8, 0x1a, 0x00, 0x45, 0xf5, 0x06, - 0x1f, 0x03, 0x40, 0x54, 0x03, 0x43, 0x21, 0x03, 0x00, 0x0a, 0x7b, 0x5f, - 0x01, 0xff, 0x45, 0x5c, 0x00, 0xbb, 0x1a, 0x00, 0x45, 0xf5, 0x06, 0xbd, - 0x1a, 0x00, 0x47, 0x79, 0x22, 0xbe, 0x1a, 0x40, 0x45, 0xc3, 0xdb, 0x28, - 0x03, 0x80, 0x2e, 0x11, 0x4b, 0x5a, 0x0c, 0x4e, 0xb0, 0x79, 0xb7, 0x1a, - 0x00, 0x47, 0xb9, 0x88, 0x05, 0x03, 0x40, 0x42, 0x1a, 0x00, 0x76, 0x03, - 0x01, 0x43, 0x96, 0x6a, 0x77, 0x03, 0x01, 0x45, 0xe8, 0xe5, 0x79, 0x03, - 0x01, 0x43, 0x4d, 0xf1, 0x7a, 0x03, 0x01, 0x44, 0x02, 0xf0, 0x78, 0x03, - 0x41, 0x46, 0x5b, 0x00, 0xce, 0x1d, 0x40, 0x4e, 0x4e, 0x79, 0x4a, 0x03, - 0x00, 0x50, 0x8a, 0x66, 0xc6, 0x1a, 0x40, 0x45, 0x05, 0x6f, 0x04, 0x03, - 0x80, 0x06, 0x4f, 0x0c, 0x6d, 0x20, 0x03, 0x40, 0x80, 0x15, 0x8d, 0x01, - 0xff, 0x45, 0x29, 0x38, 0xc4, 0x1d, 0x00, 0x45, 0xcb, 0x22, 0xcc, 0x1d, - 0x00, 0x45, 0x8d, 0x22, 0xc6, 0x1d, 0x40, 0x45, 0xf5, 0x06, 0x31, 0x03, - 0x00, 0x49, 0xaa, 0x13, 0x24, 0xfe, 0x80, 0x0d, 0x4a, 0x2a, 0x04, 0x25, - 0xfe, 0xc0, 0x00, 0x46, 0xf4, 0x06, 0x2c, 0xfe, 0x40, 0x46, 0xf4, 0x06, - 0x2b, 0xfe, 0x40, 0x05, 0xb4, 0x05, 0xdc, 0x01, 0x03, 0xc4, 0x00, 0x4f, - 0x02, 0x3f, 0x00, 0x27, 0xaf, 0x01, 0xff, 0x03, 0xa2, 0x01, 0x06, 0x46, - 0xad, 0x88, 0x32, 0x03, 0x40, 0x56, 0xaf, 0x32, 0xeb, 0x20, 0x00, 0xb3, - 0x06, 0x55, 0xe7, 0x3d, 0xd2, 0x20, 0x40, 0x4e, 0xb7, 0x32, 0x38, 0x03, - 0x00, 0x4d, 0xad, 0x48, 0x36, 0x03, 0x40, 0x06, 0xfd, 0x1e, 0x06, 0x5e, - 0x22, 0x13, 0xb9, 0x1a, 0x40, 0x49, 0xaa, 0x13, 0x20, 0xfe, 0x80, 0x0d, - 0x4a, 0x2a, 0x04, 0x21, 0xfe, 0xc0, 0x00, 0x46, 0xf4, 0x06, 0x28, 0xfe, - 0x40, 0x46, 0xf4, 0x06, 0x27, 0xfe, 0x40, 0x80, 0x11, 0x06, 0xa9, 0x01, - 0x01, 0xff, 0x4d, 0x5b, 0x7f, 0xea, 0x20, 0x00, 0x5b, 0xca, 0x0e, 0xed, - 0x20, 0x40, 0xa1, 0x40, 0x02, 0x22, 0x00, 0x26, 0x0c, 0x50, 0x21, 0x16, - 0x0c, 0xc8, 0x00, 0x06, 0x4a, 0xde, 0x95, 0x18, 0x03, 0x40, 0x45, 0x5c, - 0x00, 0xe1, 0x20, 0x00, 0x45, 0xf5, 0x06, 0x4d, 0x03, 0x40, 0x4a, 0x16, - 0x06, 0xc1, 0x1a, 0x00, 0x4a, 0xf9, 0xa5, 0xc3, 0x1a, 0x40, 0x08, 0x1a, - 0xc5, 0x06, 0x4b, 0x38, 0xa0, 0xd0, 0x20, 0x40, 0x45, 0x5c, 0x00, 0x51, - 0x03, 0x00, 0x45, 0xf5, 0x06, 0x1c, 0x03, 0x40, 0x05, 0x07, 0x06, 0x24, - 0x04, 0xcf, 0x00, 0x01, 0xff, 0x80, 0x11, 0x05, 0x19, 0x1b, 0x01, 0xff, - 0x45, 0x5c, 0x00, 0xfe, 0x1d, 0x00, 0x45, 0xf5, 0x06, 0x54, 0x03, 0x40, - 0x45, 0x5c, 0x00, 0xd6, 0x20, 0x00, 0x45, 0xf5, 0x06, 0xee, 0x20, 0x40, - 0x45, 0x5c, 0x00, 0x1a, 0x03, 0x00, 0x45, 0xf5, 0x06, 0x49, 0x03, 0x40, - 0x15, 0xef, 0x3b, 0x8e, 0x02, 0x0d, 0x4b, 0x08, 0x01, 0xff, 0xe1, 0x63, - 0x03, 0x80, 0xeb, 0x01, 0xe2, 0xe8, 0x1d, 0x80, 0xdf, 0x01, 0xe3, 0x68, - 0x03, 0x80, 0xd3, 0x01, 0xe4, 0x69, 0x03, 0x00, 0xe5, 0x64, 0x03, 0x80, - 0xbd, 0x01, 0xe6, 0xeb, 0x1d, 0x80, 0xb1, 0x01, 0xe7, 0xda, 0x1d, 0x00, - 0xe8, 0x6a, 0x03, 0x00, 0xe9, 0x65, 0x03, 0x80, 0x8e, 0x01, 0xeb, 0xdc, - 0x1d, 0x00, 0xec, 0xdd, 0x1d, 0x80, 0x79, 0xed, 0x6b, 0x03, 0x00, 0xee, - 0xe0, 0x1d, 0x00, 0xef, 0x66, 0x03, 0x80, 0x5b, 0xf0, 0xee, 0x1d, 0x00, - 0xf2, 0x6c, 0x03, 0x80, 0x43, 0xf3, 0xe4, 0x1d, 0x80, 0x38, 0xf4, 0x6d, - 0x03, 0x80, 0x2d, 0xf5, 0x67, 0x03, 0x80, 0x17, 0xf6, 0x6e, 0x03, 0x00, - 0xf7, 0xf1, 0x1d, 0x80, 0x08, 0xf8, 0x6f, 0x03, 0x00, 0xfa, 0xe6, 0x1d, - 0x40, 0x46, 0xf4, 0x06, 0xbf, 0x1a, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, - 0x49, 0x2f, 0x23, 0xf4, 0x1d, 0x00, 0x5b, 0xd6, 0x1b, 0xf0, 0x1d, 0x40, - 0x4d, 0x0a, 0x88, 0xc0, 0x1a, 0x40, 0x44, 0x54, 0x7a, 0xea, 0x1d, 0x40, - 0x80, 0x01, 0xff, 0x45, 0xf5, 0x06, 0xca, 0x1d, 0x00, 0x47, 0x4c, 0xb0, - 0xe3, 0x1d, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x49, 0x2f, 0x23, 0xf3, - 0x1d, 0x00, 0x5b, 0xd6, 0x1b, 0xed, 0x1d, 0x40, 0x59, 0x99, 0x22, 0xec, - 0x1d, 0x00, 0x45, 0xe4, 0xb9, 0xe5, 0x1d, 0x40, 0x07, 0x6c, 0x6e, 0x01, - 0xff, 0xe4, 0xd8, 0x1d, 0x00, 0xe7, 0xcc, 0x1a, 0x00, 0xf2, 0xcd, 0x1a, - 0x00, 0xf4, 0xce, 0x1a, 0x40, 0x55, 0xc5, 0x3b, 0xd3, 0x1d, 0x40, 0x42, - 0xa4, 0x02, 0xef, 0x1d, 0x00, 0x42, 0x53, 0x00, 0xd9, 0x1d, 0x40, 0x48, - 0x7a, 0xbf, 0xd7, 0x1d, 0x40, 0x43, 0x45, 0x0f, 0xe9, 0x1d, 0x40, 0x4f, - 0x7a, 0x68, 0xf2, 0x1d, 0x00, 0xe5, 0xd4, 0x1d, 0x00, 0x44, 0x2f, 0xe1, - 0xe7, 0x1d, 0x00, 0xef, 0xd5, 0x1d, 0x00, 0xf6, 0xd6, 0x1d, 0x40, 0xe7, - 0xdb, 0x1d, 0x00, 0xec, 0xde, 0x1d, 0x00, 0xed, 0xdf, 0x1d, 0x00, 0xee, - 0xe1, 0x1d, 0x00, 0xf2, 0xe2, 0x1d, 0x40, 0x10, 0x3a, 0x66, 0x11, 0x0b, - 0xab, 0xa2, 0x01, 0xff, 0x44, 0xc3, 0x00, 0xf7, 0x1d, 0x00, 0x45, 0xc8, - 0x00, 0xf6, 0x1d, 0x40, 0x56, 0x4b, 0x36, 0x9a, 0x30, 0x00, 0x51, 0x50, - 0x36, 0x99, 0x30, 0x40, 0xae, 0x06, 0x47, 0xbd, 0x0e, 0xd0, 0x1d, 0x40, - 0x46, 0xf9, 0x6a, 0xb2, 0x1a, 0x00, 0x07, 0xd8, 0x22, 0x01, 0xff, 0x02, - 0x14, 0x09, 0x11, 0x0c, 0x65, 0x8c, 0x01, 0xff, 0x45, 0x5c, 0x00, 0xc7, - 0x1a, 0x00, 0x45, 0xf5, 0x06, 0x2b, 0x03, 0x40, 0x43, 0x0a, 0x13, 0x11, - 0x03, 0x80, 0x06, 0x4a, 0x67, 0x3b, 0x3a, 0x03, 0x40, 0x46, 0xf4, 0x06, - 0x2f, 0x03, 0x40, 0x4e, 0x98, 0x78, 0x4b, 0x03, 0x00, 0x48, 0xfd, 0xa8, - 0x09, 0x03, 0x00, 0x42, 0x5e, 0x01, 0x1b, 0x03, 0x40, 0x11, 0x18, 0x5a, - 0xc1, 0x01, 0xb2, 0x01, 0xff, 0xa1, 0x36, 0x04, 0xb9, 0x2d, 0x01, 0xff, - 0x4f, 0x78, 0x6a, 0x44, 0x03, 0x00, 0x47, 0xa8, 0xcf, 0x43, 0x03, 0x00, - 0x08, 0x60, 0x27, 0x0c, 0x4b, 0x0f, 0x9f, 0x42, 0x03, 0x00, 0x4d, 0xef, - 0x4d, 0x45, 0x03, 0x40, 0x49, 0x95, 0xbb, 0x44, 0xd2, 0x01, 0xb4, 0x01, - 0xff, 0x48, 0x62, 0xc3, 0x43, 0xd2, 0x01, 0x46, 0x94, 0xdc, 0x42, 0xd2, - 0x41, 0x05, 0x1f, 0xe6, 0x2f, 0x4c, 0xed, 0x91, 0x4f, 0x03, 0x00, 0x02, - 0x32, 0x00, 0x01, 0xff, 0x80, 0x0f, 0x8d, 0x01, 0xff, 0x4b, 0xc4, 0x96, - 0xc8, 0x1d, 0x00, 0x46, 0x04, 0x6f, 0xc5, 0x1d, 0x40, 0x46, 0xaf, 0x04, - 0x00, 0x03, 0x80, 0x06, 0x49, 0x83, 0x2c, 0x40, 0x03, 0x40, 0x46, 0xf4, - 0x06, 0x16, 0x03, 0x40, 0x06, 0xc4, 0x06, 0x21, 0x07, 0xc1, 0x05, 0x01, - 0xff, 0xe1, 0x70, 0x13, 0x01, 0x42, 0x1b, 0x02, 0x71, 0x13, 0x01, 0x42, - 0xff, 0x04, 0x72, 0x13, 0x01, 0x42, 0x6c, 0x09, 0x74, 0x13, 0x01, 0x42, - 0x02, 0x00, 0x73, 0x13, 0x41, 0xa6, 0x20, 0x43, 0xbf, 0x0a, 0x67, 0x13, - 0x01, 0x43, 0x5f, 0x25, 0x6c, 0x13, 0x01, 0xb4, 0x06, 0x44, 0xa1, 0x1d, - 0x66, 0x13, 0x41, 0x44, 0x25, 0x01, 0x69, 0x13, 0x01, 0x42, 0x15, 0x02, - 0x68, 0x13, 0x41, 0x43, 0xa7, 0x05, 0x6b, 0x13, 0x01, 0x43, 0xcb, 0x06, - 0x6a, 0x13, 0x41, 0x43, 0x9f, 0xf0, 0x00, 0xe0, 0x01, 0xa2, 0xe1, 0x01, - 0x46, 0x6f, 0x7f, 0x1d, 0xe0, 0x01, 0xa4, 0xcc, 0x01, 0xa6, 0xbd, 0x01, - 0x47, 0x74, 0xce, 0x03, 0xe0, 0x01, 0x44, 0xee, 0xec, 0x18, 0xe0, 0x01, - 0xe9, 0x0b, 0xe0, 0x81, 0x8f, 0x01, 0x44, 0x86, 0xed, 0x0d, 0xe0, 0x01, - 0x47, 0x1f, 0xd0, 0x0e, 0xe0, 0x01, 0x47, 0x63, 0x69, 0x0f, 0xe0, 0x01, - 0x45, 0xd4, 0xe5, 0x10, 0xe0, 0x01, 0x43, 0x7e, 0x30, 0x11, 0xe0, 0x01, - 0x46, 0x34, 0xdc, 0x12, 0xe0, 0x01, 0x45, 0x4b, 0xe7, 0x13, 0xe0, 0x01, - 0xb3, 0x4b, 0xb4, 0x3d, 0x43, 0x3e, 0xd3, 0x16, 0xe0, 0x01, 0x44, 0xa6, - 0xef, 0x02, 0xe0, 0x01, 0xb9, 0x0f, 0xba, 0x01, 0xff, 0x45, 0xe6, 0xe2, - 0x08, 0xe0, 0x01, 0x46, 0x94, 0xd9, 0x06, 0xe0, 0x41, 0x43, 0xb3, 0x00, - 0x21, 0xe0, 0x01, 0xa5, 0x08, 0xef, 0x26, 0xe0, 0x01, 0xf5, 0x23, 0xe0, - 0x41, 0xb2, 0x06, 0x43, 0xd7, 0x09, 0x05, 0xe0, 0x41, 0xe9, 0x20, 0xe0, - 0x01, 0xf5, 0x1f, 0xe0, 0x41, 0x42, 0x2f, 0x03, 0x1c, 0xe0, 0x01, 0x45, - 0xfe, 0xe8, 0x15, 0xe0, 0x41, 0xa8, 0x0c, 0x44, 0xd2, 0xed, 0x14, 0xe0, - 0x01, 0x48, 0xd1, 0xbc, 0x24, 0xe0, 0x41, 0xe1, 0x1e, 0xe0, 0x01, 0x42, - 0x12, 0x00, 0x1b, 0xe0, 0x41, 0x4b, 0xf1, 0x9d, 0x0a, 0xe0, 0x01, 0x07, - 0x16, 0x21, 0x06, 0x43, 0xb3, 0x27, 0x09, 0xe0, 0x41, 0x47, 0xb4, 0xcc, - 0x29, 0xe0, 0x01, 0x49, 0xd0, 0xbc, 0x27, 0xe0, 0x41, 0x43, 0xbc, 0x05, - 0x2a, 0xe0, 0x01, 0x44, 0xe5, 0xbc, 0x17, 0xe0, 0x41, 0x45, 0x94, 0xe4, - 0x0c, 0xe0, 0x01, 0x44, 0x76, 0xee, 0x04, 0xe0, 0x41, 0x46, 0xb5, 0xcc, - 0x28, 0xe0, 0x01, 0x43, 0xbc, 0xcf, 0x01, 0xe0, 0x41, 0x46, 0x74, 0xd8, - 0x52, 0x03, 0x00, 0x4e, 0x9d, 0x45, 0xdc, 0x20, 0x40, 0x09, 0xca, 0xb9, - 0x06, 0x50, 0x9a, 0x64, 0x47, 0x03, 0x40, 0x46, 0xe7, 0x02, 0xdd, 0x20, - 0x80, 0x20, 0x47, 0x88, 0x43, 0xdf, 0x20, 0x00, 0x46, 0x66, 0xda, 0xe3, - 0x20, 0x00, 0xb3, 0x06, 0x58, 0x15, 0x2b, 0xe4, 0x20, 0x40, 0x45, 0x63, - 0x58, 0xe2, 0x20, 0x00, 0x45, 0xac, 0x05, 0xde, 0x20, 0x40, 0x4a, 0xf4, - 0x0d, 0xe0, 0x20, 0x40, 0xa5, 0x95, 0x02, 0x48, 0x30, 0x23, 0x08, 0x03, - 0x80, 0x81, 0x02, 0xaf, 0x01, 0xff, 0xb4, 0xc5, 0x01, 0x04, 0x3d, 0x01, - 0x11, 0x02, 0xa7, 0x01, 0x01, 0xff, 0x4b, 0xdd, 0x95, 0x1e, 0x03, 0x00, - 0x4b, 0xb8, 0x02, 0xb3, 0x1a, 0x40, 0x80, 0x06, 0x53, 0x9d, 0x47, 0xb0, - 0x1a, 0x40, 0x4c, 0x3d, 0x8a, 0x0b, 0x03, 0x00, 0x45, 0xcb, 0x22, 0x5d, - 0x03, 0x80, 0x94, 0x01, 0x50, 0x97, 0x31, 0xcd, 0x1d, 0x00, 0x4c, 0x8d, - 0x22, 0x0f, 0x03, 0x00, 0x4e, 0xd6, 0x22, 0x61, 0x03, 0x80, 0x7b, 0x48, - 0xab, 0x88, 0x33, 0x03, 0x00, 0x46, 0x04, 0x6f, 0x5e, 0x03, 0x80, 0x68, - 0xaf, 0x5a, 0xb0, 0x41, 0x02, 0x0d, 0x00, 0x31, 0x45, 0xad, 0x22, 0x60, - 0x03, 0x80, 0x1b, 0x09, 0x32, 0x00, 0x01, 0xff, 0x05, 0xc2, 0x07, 0x06, - 0x4e, 0xac, 0x48, 0xe6, 0x20, 0x40, 0x45, 0x5c, 0x00, 0x0e, 0x03, 0x00, - 0x45, 0xf5, 0x06, 0x48, 0x03, 0x40, 0x80, 0x01, 0xff, 0x49, 0xaa, 0x13, - 0x22, 0xfe, 0x00, 0x4a, 0x2a, 0x04, 0x23, 0xfe, 0x40, 0x54, 0x87, 0x41, - 0x62, 0x03, 0x00, 0x48, 0xa4, 0x72, 0x5a, 0x03, 0x40, 0x50, 0x7a, 0x5f, - 0xbc, 0x1a, 0x00, 0x09, 0x46, 0x70, 0x01, 0xff, 0x45, 0x5c, 0x00, 0xc9, - 0x1a, 0x00, 0x45, 0xf5, 0x06, 0xca, 0x1a, 0x40, 0x4e, 0xb0, 0x79, 0xb8, - 0x1a, 0x00, 0x47, 0xb9, 0x88, 0x3f, 0x03, 0x40, 0x46, 0xf4, 0x06, 0x5f, - 0x03, 0x40, 0x46, 0xf4, 0x06, 0xfc, 0x1d, 0x40, 0x46, 0xf4, 0x06, 0x5c, - 0x03, 0x40, 0x80, 0x11, 0x04, 0x77, 0x00, 0x01, 0xff, 0x4c, 0x3d, 0x8a, - 0xc1, 0x1d, 0x00, 0x4c, 0x8d, 0x22, 0xc0, 0x1d, 0x40, 0x45, 0x5c, 0x00, - 0x07, 0x03, 0x80, 0x0d, 0x45, 0xf5, 0x06, 0x23, 0x03, 0xc0, 0x00, 0x45, - 0xc2, 0x00, 0xfa, 0x1d, 0x40, 0x80, 0x01, 0xff, 0x44, 0xc3, 0x00, 0xf8, - 0x1d, 0x00, 0x45, 0xc8, 0x00, 0x58, 0x03, 0x40, 0x46, 0xf4, 0x06, 0x24, - 0x03, 0x00, 0x45, 0xe5, 0xde, 0xb1, 0x1a, 0x40, 0x4b, 0x86, 0x9c, 0xfb, - 0x1d, 0x00, 0x09, 0x4a, 0xbe, 0x01, 0xff, 0x06, 0xc4, 0x06, 0x30, 0x07, - 0xc1, 0x05, 0x06, 0x4d, 0xec, 0x86, 0xf1, 0xa8, 0x40, 0xe1, 0xea, 0xa8, - 0x00, 0x42, 0x1b, 0x02, 0xec, 0xa8, 0x00, 0x42, 0xff, 0x04, 0xed, 0xa8, - 0x00, 0x42, 0x6c, 0x09, 0xee, 0xa8, 0x00, 0x42, 0x71, 0x00, 0xef, 0xa8, - 0x00, 0xf5, 0xeb, 0xa8, 0x00, 0x42, 0x02, 0x00, 0xf0, 0xa8, 0x40, 0x45, - 0xc3, 0x0a, 0xe8, 0xa8, 0x00, 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0xe9, 0xa8, - 0x00, 0x43, 0xbf, 0x0a, 0xe1, 0xa8, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, - 0xa1, 0x1d, 0xe0, 0xa8, 0x40, 0x44, 0x25, 0x01, 0xe3, 0xa8, 0x00, 0x42, - 0x15, 0x02, 0xe2, 0xa8, 0x40, 0x44, 0x27, 0x1d, 0xe7, 0xa8, 0x00, 0x42, - 0x60, 0x25, 0xe6, 0xa8, 0x40, 0x43, 0xa7, 0x05, 0xe5, 0xa8, 0x00, 0x43, - 0xcb, 0x06, 0xe4, 0xa8, 0x40, 0xa1, 0xb7, 0x03, 0x46, 0x7c, 0xbf, 0x27, - 0x03, 0x00, 0x50, 0xa5, 0x04, 0x02, 0x03, 0x80, 0xa3, 0x03, 0x09, 0x17, - 0x10, 0x92, 0x03, 0xaf, 0xeb, 0x02, 0x08, 0x3a, 0xca, 0x01, 0xff, 0x4e, - 0x34, 0x75, 0x85, 0x04, 0x00, 0x08, 0x22, 0x11, 0xcf, 0x02, 0x46, 0xa4, - 0x4e, 0x7c, 0xa6, 0x00, 0x07, 0xc1, 0x05, 0x52, 0x4d, 0x25, 0x3b, 0x89, - 0x04, 0x00, 0xb0, 0x30, 0x65, 0x4b, 0x08, 0x8f, 0xe0, 0x01, 0xb4, 0x06, - 0x45, 0x03, 0xe9, 0x6f, 0xa6, 0x40, 0x50, 0x2a, 0x61, 0x70, 0xa6, 0x00, - 0x55, 0x1d, 0x3b, 0x72, 0xa6, 0x00, 0x44, 0x47, 0x96, 0x83, 0x04, 0xc0, - 0x00, 0x80, 0x01, 0xff, 0x49, 0xaa, 0x13, 0x2e, 0xfe, 0x00, 0x4a, 0x2a, - 0x04, 0x2f, 0xfe, 0x40, 0xa1, 0x0c, 0x47, 0xf8, 0xd0, 0x87, 0x04, 0x00, - 0x4d, 0x06, 0x87, 0x86, 0x04, 0x40, 0x4c, 0x29, 0x8f, 0x84, 0x04, 0x00, - 0x45, 0xc5, 0xd1, 0x7d, 0xa6, 0x40, 0xe1, 0xf6, 0x2d, 0x00, 0xa2, 0xe2, - 0x01, 0x43, 0x1e, 0x14, 0xf1, 0x2d, 0x00, 0xa4, 0xcf, 0x01, 0xa5, 0xad, - 0x01, 0x44, 0x96, 0xec, 0xf4, 0x2d, 0x00, 0x43, 0xdd, 0x50, 0xe2, 0x2d, - 0x00, 0x42, 0x22, 0x00, 0xef, 0x2d, 0x80, 0x93, 0x01, 0xe9, 0x75, 0xa6, - 0x80, 0x77, 0x42, 0x1b, 0x02, 0xe6, 0x2d, 0x00, 0x4a, 0xcc, 0x57, 0xfd, - 0x2d, 0x00, 0x4c, 0x6d, 0x90, 0xf9, 0x2d, 0x00, 0xef, 0xea, 0x2d, 0x80, - 0x5a, 0x42, 0x6f, 0x02, 0xeb, 0x2d, 0x00, 0xb3, 0x40, 0xb4, 0x34, 0xf5, - 0x77, 0xa6, 0x80, 0x29, 0x42, 0x32, 0x00, 0xe1, 0x2d, 0x00, 0xb9, 0x0d, - 0xba, 0x01, 0xff, 0xe5, 0xe5, 0x2d, 0x00, 0x42, 0xb0, 0x01, 0xe4, 0x2d, - 0x40, 0x42, 0x8a, 0x00, 0xfa, 0x2d, 0x00, 0x43, 0xfb, 0x2a, 0x79, 0xa6, - 0x00, 0xe9, 0x76, 0xa6, 0x00, 0xf5, 0xfb, 0x2d, 0x40, 0x4b, 0xe1, 0x9b, - 0x74, 0xa6, 0x40, 0xe5, 0xee, 0x2d, 0x00, 0x42, 0x1b, 0x03, 0xf0, 0x2d, - 0x40, 0xa8, 0x06, 0x48, 0xd5, 0x8c, 0x7a, 0xa6, 0x40, 0xe1, 0xf2, 0x2d, - 0x00, 0x43, 0xef, 0x1f, 0xf3, 0x2d, 0x40, 0x44, 0x6b, 0x7a, 0x7b, 0xa6, - 0x40, 0xe5, 0xf7, 0x2d, 0x00, 0x08, 0xd2, 0xc6, 0x01, 0xff, 0xe1, 0xfc, - 0x2d, 0x00, 0x47, 0xb4, 0xcc, 0xff, 0x2d, 0x00, 0xe5, 0x9f, 0xa6, 0x40, - 0x47, 0x4a, 0x91, 0x78, 0xa6, 0x40, 0xe6, 0x9e, 0xa6, 0x00, 0xec, 0xe7, - 0x2d, 0x00, 0xed, 0xe8, 0x2d, 0x00, 0xee, 0xe9, 0x2d, 0x00, 0xf2, 0xec, - 0x2d, 0x00, 0xf3, 0xed, 0x2d, 0xc0, 0x00, 0x43, 0x53, 0x7b, 0xf5, 0x2d, - 0x40, 0xe5, 0xe3, 0x2d, 0x00, 0x44, 0x94, 0xe4, 0xf8, 0x2d, 0x40, 0xe5, - 0xe0, 0x2d, 0x00, 0x46, 0xb5, 0xcc, 0xfe, 0x2d, 0x40, 0x4d, 0x25, 0x3b, - 0x71, 0xa6, 0x00, 0x4e, 0x9a, 0x7b, 0x88, 0x04, 0x40, 0x04, 0xea, 0x04, - 0x0d, 0x4f, 0xfb, 0x6e, 0x26, 0xfe, 0xc0, 0x00, 0x46, 0xf4, 0x06, 0x2d, - 0xfe, 0x40, 0x45, 0x5c, 0x00, 0x13, 0x03, 0x80, 0x06, 0x45, 0xf5, 0x06, - 0x26, 0x03, 0x40, 0x46, 0xc7, 0x00, 0x15, 0x03, 0x40, 0x4b, 0xce, 0x00, - 0xd5, 0x20, 0x00, 0x4c, 0xd1, 0x92, 0xd9, 0x20, 0x40, 0x46, 0xf4, 0x06, - 0x2d, 0x03, 0x40, 0x49, 0x51, 0x23, 0x10, 0x03, 0x00, 0x43, 0x62, 0x0e, - 0x0c, 0x03, 0xc0, 0x00, 0x46, 0xf4, 0x06, 0x2c, 0x03, 0x40, 0x4a, 0x87, - 0xa9, 0x3b, 0x13, 0x01, 0xb2, 0x01, 0xff, 0x43, 0x0a, 0x13, 0x06, 0x03, - 0x80, 0x11, 0x05, 0x67, 0x3b, 0x01, 0xff, 0x45, 0x5c, 0x00, 0x46, 0x03, - 0x00, 0x45, 0xf5, 0x06, 0x2a, 0x03, 0x40, 0x46, 0xf4, 0x06, 0x2e, 0x03, - 0x00, 0x47, 0x02, 0xcb, 0xcb, 0x1d, 0x40, 0x04, 0x2a, 0x38, 0x3a, 0x0f, - 0x29, 0x6e, 0x2a, 0xae, 0x11, 0x08, 0xea, 0x65, 0x01, 0xff, 0x45, 0x5c, - 0x00, 0xf0, 0x20, 0x00, 0x45, 0xf5, 0x06, 0x59, 0x03, 0x40, 0x4c, 0x2d, - 0x91, 0xe7, 0x20, 0x00, 0x0c, 0x14, 0x10, 0x01, 0xff, 0x4b, 0xce, 0x00, - 0xd4, 0x20, 0x00, 0x4c, 0xd1, 0x92, 0xda, 0x20, 0x40, 0x45, 0x5c, 0x00, - 0x4c, 0x03, 0x00, 0x45, 0xf5, 0x06, 0xfd, 0x1d, 0x40, 0x80, 0x0f, 0x8d, - 0x01, 0xff, 0x4b, 0x60, 0x9a, 0xc9, 0x1d, 0x00, 0x46, 0x04, 0x6f, 0xc7, - 0x1d, 0x40, 0x46, 0xaf, 0x04, 0x01, 0x03, 0x80, 0x06, 0x49, 0x83, 0x2c, - 0x41, 0x03, 0x40, 0x46, 0xf4, 0x06, 0x17, 0x03, 0x40, 0x4d, 0x6b, 0x83, - 0xa5, 0xf4, 0x01, 0x42, 0x10, 0x00, 0x3a, 0x00, 0xc0, 0x00, 0x80, 0x01, - 0xff, 0x46, 0xf9, 0x12, 0x54, 0x22, 0x00, 0x44, 0x2f, 0x03, 0xa1, 0x20, - 0x40, 0xab, 0x06, 0x44, 0x8e, 0xee, 0x65, 0xf9, 0x41, 0x45, 0x04, 0xd2, - 0xb3, 0xfa, 0x01, 0x4a, 0x45, 0xaf, 0x78, 0xf3, 0x41, 0xa1, 0xdb, 0x03, - 0x51, 0x5e, 0x58, 0x9a, 0x23, 0x00, 0xa9, 0xbc, 0x03, 0xaf, 0x01, 0xff, - 0x02, 0x36, 0x01, 0x8f, 0x01, 0x02, 0x1b, 0x03, 0x2a, 0x42, 0x63, 0x0c, - 0x01, 0x26, 0x80, 0x06, 0x47, 0xdd, 0x7a, 0x21, 0xf9, 0x41, 0x06, 0x50, - 0x00, 0x01, 0xff, 0x49, 0x04, 0xb9, 0x29, 0xf3, 0x01, 0x44, 0x67, 0x08, - 0x27, 0xf3, 0x01, 0x44, 0x0a, 0x2e, 0x28, 0xf3, 0x01, 0x47, 0xa6, 0xd3, - 0x2a, 0xf3, 0x41, 0x43, 0x4f, 0x02, 0x50, 0x20, 0x00, 0x02, 0x06, 0x00, - 0x01, 0xff, 0x44, 0x0e, 0xec, 0xd5, 0xf4, 0x01, 0x58, 0xa5, 0x28, 0x4d, - 0x2a, 0x00, 0x4d, 0x85, 0x83, 0x10, 0xf5, 0x01, 0x0d, 0xc6, 0x83, 0x34, - 0x02, 0x6f, 0x00, 0x16, 0xb5, 0x01, 0xff, 0x47, 0xe3, 0x5f, 0x02, 0xf3, - 0x01, 0x50, 0xca, 0x63, 0x4c, 0x2a, 0xc0, 0x00, 0x52, 0xd8, 0x4d, 0x50, - 0x2a, 0x40, 0x44, 0x4c, 0x12, 0xcf, 0x2a, 0x80, 0x0d, 0x46, 0x59, 0x35, - 0xd0, 0x2a, 0xc0, 0x00, 0x4c, 0x51, 0x28, 0xd2, 0x2a, 0x40, 0x4c, 0x51, - 0x28, 0xd1, 0x2a, 0x40, 0x4c, 0xc5, 0x8f, 0xea, 0xf4, 0x01, 0x4b, 0x88, - 0x9f, 0xeb, 0xf4, 0x41, 0x06, 0xe0, 0x07, 0x51, 0x05, 0x1b, 0x10, 0x01, - 0xff, 0xa3, 0x3e, 0x68, 0xb5, 0x04, 0x03, 0xf5, 0x01, 0x53, 0x5b, 0x48, - 0xf3, 0x27, 0x00, 0x48, 0xf3, 0x25, 0x31, 0x22, 0x00, 0x51, 0xcb, 0x04, - 0xbb, 0x21, 0x00, 0x05, 0xc8, 0x00, 0x0f, 0xb4, 0x01, 0xff, 0x53, 0x82, - 0x4a, 0xb7, 0x21, 0x00, 0x60, 0xa5, 0x0f, 0x6e, 0x2b, 0x40, 0x5b, 0x4e, - 0x19, 0xd8, 0xf5, 0x01, 0x66, 0x6c, 0x07, 0x01, 0xf5, 0xc1, 0x00, 0x59, - 0x67, 0x22, 0x02, 0xf5, 0x41, 0x52, 0x34, 0x52, 0x41, 0x29, 0x00, 0x4f, - 0xbe, 0x6f, 0x32, 0x22, 0x40, 0xa5, 0xac, 0x01, 0xa6, 0x88, 0x01, 0x04, - 0x46, 0x2a, 0x78, 0x03, 0xbf, 0x0a, 0x68, 0xb3, 0x45, 0xb4, 0x01, 0xff, - 0x02, 0x92, 0x01, 0x32, 0x04, 0x25, 0x01, 0x22, 0xb7, 0x01, 0xff, 0x04, - 0x46, 0x2b, 0x0f, 0xaf, 0x01, 0xff, 0x47, 0xae, 0xca, 0x51, 0xf5, 0x01, - 0x47, 0x17, 0xcb, 0x5d, 0xf5, 0x41, 0x47, 0xae, 0xca, 0x5b, 0xf5, 0x01, - 0x47, 0x17, 0xcb, 0x67, 0xf5, 0x41, 0x47, 0xae, 0xca, 0x52, 0xf5, 0x01, - 0x47, 0x17, 0xcb, 0x5e, 0xf5, 0x41, 0x47, 0xae, 0xca, 0x59, 0xf5, 0x01, - 0x47, 0x17, 0xcb, 0x65, 0xf5, 0x41, 0x04, 0x27, 0x1d, 0x11, 0x02, 0x60, - 0x25, 0x01, 0xff, 0x47, 0xae, 0xca, 0x55, 0xf5, 0x01, 0x47, 0x17, 0xcb, - 0x61, 0xf5, 0x41, 0x47, 0xae, 0xca, 0x56, 0xf5, 0x01, 0x47, 0x17, 0xcb, - 0x62, 0xf5, 0x41, 0x47, 0xae, 0xca, 0x50, 0xf5, 0x01, 0x47, 0x17, 0xcb, - 0x5c, 0xf5, 0x41, 0x47, 0xae, 0xca, 0x58, 0xf5, 0x01, 0x47, 0x17, 0xcb, - 0x64, 0xf5, 0x41, 0x03, 0xa7, 0x05, 0x11, 0x03, 0xcb, 0x06, 0x01, 0xff, - 0x47, 0xae, 0xca, 0x53, 0xf5, 0x01, 0x47, 0x17, 0xcb, 0x5f, 0xf5, 0x41, - 0x47, 0xae, 0xca, 0x54, 0xf5, 0x01, 0x47, 0x17, 0xcb, 0x60, 0xf5, 0x41, - 0x04, 0xc9, 0x00, 0x11, 0x05, 0x0b, 0x6e, 0x01, 0xff, 0x47, 0xae, 0xca, - 0x5a, 0xf5, 0x01, 0x47, 0x17, 0xcb, 0x66, 0xf5, 0x41, 0x47, 0xae, 0xca, - 0x57, 0xf5, 0x01, 0x47, 0x17, 0xcb, 0x63, 0xf5, 0x41, 0x06, 0x97, 0x8f, - 0x06, 0x46, 0x04, 0xdc, 0xcb, 0xf4, 0x41, 0x49, 0x3c, 0xb4, 0x7b, 0xf3, - 0x01, 0x47, 0xce, 0xbd, 0x42, 0xf9, 0x41, 0x53, 0xfd, 0x49, 0x81, 0xf5, - 0x01, 0x02, 0x6e, 0x02, 0x06, 0x4f, 0x9e, 0x71, 0xdb, 0xf3, 0x41, 0x48, - 0x23, 0x14, 0xac, 0xf3, 0x01, 0x4e, 0x1e, 0x77, 0x4f, 0xf4, 0x41, 0x58, - 0x0d, 0x27, 0x06, 0xd8, 0x00, 0x08, 0x1c, 0xa3, 0xbb, 0x01, 0x07, 0x76, - 0x0e, 0x06, 0x52, 0x45, 0x32, 0x01, 0xd8, 0x40, 0x43, 0xab, 0xf0, 0xc3, - 0x31, 0x00, 0xe4, 0xd4, 0x31, 0x00, 0xe8, 0xd0, 0x31, 0x80, 0x5f, 0xee, - 0xcf, 0x31, 0x00, 0xf0, 0xd2, 0x31, 0x80, 0x4a, 0xf1, 0xe3, 0x31, 0x00, - 0xf3, 0xd1, 0x31, 0x80, 0x15, 0xf4, 0xc0, 0x31, 0x80, 0x0c, 0x42, 0x9a, - 0x41, 0xc1, 0x31, 0x00, 0x42, 0xac, 0xf0, 0xc2, 0x31, 0x40, 0xee, 0xdd, - 0x31, 0x40, 0xe7, 0xda, 0x31, 0x00, 0xf0, 0xd3, 0x31, 0x00, 0xf4, 0xd9, - 0x31, 0x00, 0xf7, 0xc4, 0x31, 0x80, 0x13, 0xfa, 0xd7, 0x31, 0xc0, 0x00, - 0xf0, 0xe5, 0x31, 0x00, 0x42, 0x9a, 0x41, 0xc9, 0x31, 0x00, 0xfa, 0xde, - 0x31, 0x40, 0xe7, 0xdf, 0x31, 0x00, 0xfa, 0xd8, 0x31, 0x40, 0xe4, 0xdb, - 0x31, 0x00, 0xe7, 0xe2, 0x31, 0x00, 0xfa, 0xdc, 0x31, 0x40, 0xe7, 0xd6, - 0x31, 0x00, 0xf0, 0xc7, 0x31, 0x80, 0x34, 0xb8, 0x28, 0xfa, 0xd5, 0x31, - 0xc0, 0x00, 0xe7, 0xc6, 0x31, 0x00, 0xf4, 0xca, 0x31, 0x00, 0xf7, 0xcd, - 0x31, 0x80, 0x12, 0xfa, 0xc5, 0x31, 0xc0, 0x00, 0xf0, 0xcb, 0x31, 0x00, - 0xfa, 0xce, 0x31, 0xc0, 0x00, 0xe7, 0xe1, 0x31, 0x40, 0xe7, 0xc8, 0x31, - 0x40, 0xe7, 0xe4, 0x31, 0x00, 0x42, 0x9a, 0x41, 0xe0, 0x31, 0x40, 0x42, - 0x9a, 0x41, 0xcc, 0x31, 0x40, 0xa2, 0xba, 0x06, 0xa3, 0xfb, 0x04, 0xa4, - 0xe6, 0x04, 0xa5, 0xbe, 0x04, 0xa6, 0xaf, 0x04, 0xa7, 0x8c, 0x04, 0xa8, - 0xe4, 0x03, 0xaa, 0xbc, 0x03, 0x06, 0x7e, 0xa3, 0xab, 0x03, 0xac, 0xf8, - 0x02, 0xad, 0xc1, 0x02, 0x04, 0xfb, 0x47, 0xa1, 0x02, 0x43, 0x5a, 0x1a, - 0xb9, 0x2e, 0x00, 0xb0, 0x82, 0x02, 0xb2, 0xe9, 0x01, 0xb3, 0x51, 0xb4, - 0x37, 0xb7, 0x01, 0xff, 0xa1, 0x11, 0x04, 0x38, 0x1a, 0x01, 0xff, 0x43, - 0xbf, 0x0a, 0xc3, 0x2e, 0x00, 0x43, 0xd0, 0x09, 0xc4, 0x2e, 0x40, 0x03, - 0x23, 0xf1, 0x11, 0x04, 0xdd, 0x02, 0x01, 0xff, 0x43, 0xbf, 0x0a, 0xa1, - 0x2e, 0x00, 0x43, 0xd0, 0x09, 0xa2, 0x2e, 0x40, 0x43, 0xbf, 0x0a, 0xcd, - 0x2e, 0x00, 0x43, 0xd0, 0x09, 0xce, 0x2e, 0x40, 0x44, 0xb2, 0x17, 0x87, - 0x2e, 0x00, 0x45, 0xfd, 0x9b, 0x93, 0x2e, 0x00, 0x44, 0x3e, 0xed, 0xc1, - 0x2e, 0x00, 0x45, 0xcc, 0xe8, 0xf1, 0x2e, 0x40, 0xa5, 0x74, 0x44, 0xe6, - 0xec, 0xb6, 0x2e, 0x00, 0xa9, 0x3f, 0x05, 0x0d, 0x07, 0x2f, 0xae, 0x16, - 0x06, 0x2e, 0xdc, 0x06, 0x42, 0xf3, 0x0a, 0x9c, 0x2e, 0x40, 0x43, 0xbf, - 0x0a, 0xac, 0x2e, 0x00, 0x43, 0xd0, 0x09, 0xad, 0x2e, 0x40, 0x43, 0xf1, - 0x26, 0x92, 0x2e, 0x00, 0x04, 0xb4, 0x4f, 0x01, 0xff, 0x43, 0xbf, 0x0a, - 0x94, 0x2e, 0x00, 0x43, 0xd0, 0x09, 0x95, 0x2e, 0x40, 0x43, 0xbf, 0x0a, - 0x8c, 0x2e, 0x00, 0x43, 0xd0, 0x09, 0x8d, 0x2e, 0x40, 0x42, 0xf5, 0x59, - 0xaf, 0x2e, 0x00, 0x09, 0x10, 0x8a, 0x01, 0xff, 0xa8, 0x14, 0xb7, 0x06, - 0x46, 0x04, 0xd5, 0xe9, 0x2e, 0x40, 0x43, 0xf4, 0x59, 0xcc, 0x2e, 0x00, - 0x44, 0xa2, 0x9a, 0xe8, 0x2e, 0x40, 0x4e, 0x46, 0x74, 0xa6, 0x2e, 0x00, - 0x43, 0xfd, 0x04, 0xc6, 0x2e, 0x40, 0x42, 0x13, 0x00, 0x8b, 0x2e, 0x00, - 0x05, 0x84, 0x7a, 0x01, 0xff, 0x43, 0xbf, 0x0a, 0x82, 0x2e, 0x00, 0xb4, - 0x01, 0xff, 0x44, 0x25, 0x01, 0x84, 0x2e, 0x00, 0x42, 0x15, 0x02, 0x83, - 0x2e, 0x40, 0xa1, 0x06, 0x45, 0x04, 0x6b, 0x80, 0x2e, 0x40, 0x42, 0x9e, - 0x01, 0xd7, 0x2e, 0x00, 0xed, 0xb7, 0x2e, 0x00, 0xf0, 0x99, 0x2e, 0x40, - 0x03, 0x9a, 0x43, 0x06, 0x45, 0x7d, 0x1c, 0x85, 0x2e, 0x40, 0x43, 0xbf, - 0x0a, 0xa4, 0x2e, 0x00, 0x43, 0xd0, 0x09, 0xa5, 0x2e, 0x40, 0x44, 0xca, - 0x06, 0xb4, 0x2e, 0x00, 0x43, 0xbf, 0x0a, 0xb1, 0x2e, 0x00, 0xb4, 0x01, - 0xff, 0x44, 0x25, 0x01, 0xb3, 0x2e, 0x00, 0x42, 0x15, 0x02, 0xb2, 0x2e, - 0x40, 0xa5, 0x26, 0xaf, 0x01, 0xff, 0x42, 0x10, 0x00, 0x9d, 0x2e, 0x00, - 0x44, 0x23, 0x4c, 0xbd, 0x2e, 0x00, 0x44, 0xa3, 0x19, 0x9f, 0x2e, 0x00, - 0x04, 0x0c, 0x12, 0x01, 0xff, 0x43, 0xbf, 0x0a, 0xd5, 0x2e, 0x00, 0x43, - 0xd0, 0x09, 0xd6, 0x2e, 0x40, 0x42, 0x8a, 0x00, 0xbc, 0x2e, 0x00, 0x42, - 0xa4, 0x02, 0xb5, 0x2e, 0x40, 0x04, 0x51, 0xb6, 0x11, 0x04, 0x63, 0x0e, - 0x01, 0xff, 0x43, 0xbf, 0x0a, 0xd1, 0x2e, 0x00, 0x43, 0xd0, 0x09, 0xd2, - 0x2e, 0x40, 0x44, 0xca, 0x06, 0x91, 0x2e, 0x00, 0x43, 0xbf, 0x0a, 0x8e, - 0x2e, 0x00, 0xb4, 0x01, 0xff, 0x44, 0x25, 0x01, 0x90, 0x2e, 0x00, 0x42, - 0x15, 0x02, 0x8f, 0x2e, 0x40, 0x43, 0xbf, 0x0a, 0x88, 0x2e, 0x00, 0x43, - 0xd0, 0x09, 0x89, 0x2e, 0x40, 0x0c, 0x0d, 0x8a, 0x06, 0x43, 0x0c, 0x02, - 0xa9, 0x2e, 0x40, 0x46, 0xa3, 0x8d, 0xef, 0x2e, 0x00, 0x44, 0x27, 0x1d, - 0xeb, 0x2e, 0x00, 0xb4, 0x01, 0xff, 0x44, 0x96, 0xee, 0xed, 0x2e, 0x00, - 0x45, 0xcc, 0xe8, 0xf2, 0x2e, 0x40, 0x43, 0x1a, 0x00, 0x98, 0x2e, 0x00, - 0x02, 0x89, 0x00, 0x06, 0x43, 0xfd, 0x04, 0xc7, 0x2e, 0x40, 0xe4, 0xe1, - 0x2e, 0x00, 0x03, 0x6e, 0x09, 0x01, 0xff, 0x43, 0xbf, 0x0a, 0x96, 0x2e, - 0x00, 0x43, 0xd0, 0x09, 0x97, 0x2e, 0x40, 0x44, 0x5f, 0x7b, 0xe4, 0x2e, - 0x00, 0x05, 0x7a, 0x1f, 0x01, 0xff, 0x43, 0xbf, 0x0a, 0xbe, 0x2e, 0x00, - 0xb4, 0x01, 0xff, 0x44, 0x25, 0x01, 0xc0, 0x2e, 0x00, 0x42, 0x15, 0x02, - 0xbf, 0x2e, 0x40, 0x43, 0x39, 0x0d, 0xa3, 0x2e, 0x00, 0x43, 0x25, 0x6b, - 0xca, 0x2e, 0x40, 0x03, 0x12, 0x05, 0x0c, 0x42, 0x15, 0x01, 0xb8, 0x2e, - 0x00, 0x42, 0x4d, 0x00, 0xab, 0x2e, 0x40, 0x43, 0xbf, 0x0a, 0xdd, 0x2e, - 0x00, 0xb4, 0x01, 0xff, 0x44, 0x25, 0x01, 0xdf, 0x2e, 0x00, 0x42, 0x15, - 0x02, 0xde, 0x2e, 0x40, 0x44, 0x24, 0x0f, 0x9e, 0x2e, 0x00, 0x49, 0x6b, - 0xb8, 0x8a, 0x2e, 0x00, 0x42, 0x55, 0x18, 0xa8, 0x2e, 0x40, 0x0c, 0x0d, - 0x8a, 0x28, 0x44, 0x64, 0xda, 0x9b, 0x2e, 0x00, 0xa9, 0x14, 0xac, 0x06, - 0x42, 0xd1, 0x00, 0xa7, 0x2e, 0x40, 0x43, 0x20, 0x47, 0x81, 0x2e, 0x00, - 0x45, 0x8c, 0x86, 0xc2, 0x2e, 0x40, 0x42, 0x2e, 0x11, 0xcf, 0x2e, 0x00, - 0x46, 0x14, 0xde, 0xa0, 0x2e, 0x40, 0x44, 0x4b, 0xa5, 0xe6, 0x2e, 0x00, - 0x44, 0x9c, 0x6a, 0xcb, 0x2e, 0x00, 0x46, 0xa3, 0x8d, 0xf0, 0x2e, 0x00, - 0xa5, 0x70, 0xa6, 0x5c, 0xa7, 0x4e, 0x45, 0xd0, 0xb0, 0xe2, 0x2e, 0x00, - 0xac, 0x3a, 0xb3, 0x1a, 0xb4, 0x06, 0x44, 0x3f, 0x13, 0xdb, 0x2e, 0x40, - 0x4d, 0x00, 0x7f, 0xd9, 0x2e, 0x00, 0x44, 0x96, 0xee, 0xee, 0x2e, 0x00, - 0x45, 0xcc, 0xe8, 0xf3, 0x2e, 0x40, 0x43, 0xa2, 0x11, 0xe7, 0x2e, 0x00, - 0x42, 0x27, 0x01, 0xc5, 0x2e, 0x00, 0x44, 0x0f, 0x09, 0xc9, 0x2e, 0x00, - 0x43, 0xe8, 0xae, 0xb0, 0x2e, 0x00, 0x45, 0x0f, 0x7b, 0xc8, 0x2e, 0x40, - 0x43, 0xf1, 0x4f, 0xda, 0x2e, 0x00, 0x43, 0x63, 0x0e, 0xd3, 0x2e, 0x40, - 0x43, 0x8a, 0x00, 0xd4, 0x2e, 0x00, 0x43, 0x5a, 0x1a, 0xd0, 0x2e, 0x40, - 0x43, 0x82, 0x0c, 0xe5, 0x2e, 0x00, 0x42, 0x26, 0x0b, 0xdc, 0x2e, 0x00, - 0x43, 0x27, 0x29, 0xea, 0x2e, 0x40, 0x42, 0x8a, 0x00, 0xe0, 0x2e, 0x00, - 0x43, 0x28, 0x1d, 0xec, 0x2e, 0x40, 0x45, 0x99, 0xcc, 0xae, 0x2e, 0x00, - 0x43, 0x16, 0x8b, 0xd8, 0x2e, 0x00, 0xaf, 0x11, 0x05, 0x7d, 0xe7, 0x01, - 0xff, 0x43, 0xbf, 0x0a, 0xba, 0x2e, 0x00, 0x43, 0xd0, 0x09, 0xbb, 0x2e, - 0x40, 0x4b, 0xd3, 0x9c, 0xaa, 0x2e, 0x00, 0x42, 0xa2, 0x05, 0xe3, 0x2e, - 0x00, 0xf8, 0x86, 0x2e, 0x40, 0x44, 0x2e, 0xee, 0xa6, 0xf3, 0x01, 0x02, - 0xe9, 0x02, 0x0d, 0x47, 0xd7, 0xd3, 0xd9, 0xf3, 0xc1, 0x00, 0x48, 0x72, - 0xbf, 0x06, 0xf3, 0x41, 0x02, 0x68, 0x00, 0x15, 0xb5, 0x01, 0xff, 0x4f, - 0x93, 0x6d, 0x10, 0x2a, 0x00, 0x4c, 0xa9, 0x04, 0x5e, 0x00, 0x00, 0x46, - 0xbe, 0xdc, 0xaa, 0xf3, 0x41, 0x80, 0xa7, 0x0e, 0x02, 0x06, 0x00, 0x01, - 0xff, 0xa1, 0x89, 0x0e, 0xa2, 0xfa, 0x0d, 0xa3, 0xbe, 0x0d, 0xa4, 0xcd, - 0x0c, 0x46, 0xf9, 0x12, 0x9c, 0x22, 0x00, 0x4c, 0x87, 0x00, 0xc1, 0x29, - 0x00, 0xa8, 0xe1, 0x0a, 0xa9, 0xc7, 0x07, 0xab, 0xdd, 0x05, 0xac, 0xf7, - 0x03, 0xad, 0xe8, 0x03, 0x07, 0x2f, 0x39, 0x6f, 0x5e, 0xd6, 0x13, 0x42, - 0x27, 0x00, 0xb0, 0x4f, 0xb2, 0x41, 0x46, 0xab, 0x05, 0xd7, 0xf7, 0x01, - 0xb4, 0x26, 0x4c, 0x32, 0x00, 0xb6, 0x29, 0x00, 0xb7, 0x0a, 0xf8, 0xbe, - 0x2b, 0x00, 0x4f, 0xab, 0x73, 0x0d, 0xf1, 0x41, 0x05, 0xae, 0x02, 0x04, - 0xfa, 0x2e, 0xf1, 0x41, 0x46, 0x2a, 0x21, 0xbe, 0x29, 0x00, 0x44, 0xe2, - 0x12, 0x2a, 0x27, 0x40, 0x44, 0x29, 0x02, 0x97, 0x22, 0x00, 0x47, 0x02, - 0x02, 0xd5, 0xf7, 0xc1, 0x00, 0x45, 0xa4, 0x01, 0x8a, 0x23, 0x40, 0x4e, - 0xcd, 0x70, 0xb8, 0x29, 0x00, 0x4c, 0x81, 0x8e, 0x9a, 0x22, 0x40, 0x47, - 0xb9, 0x37, 0xb7, 0x29, 0x00, 0x4c, 0xf5, 0x8c, 0xb9, 0x29, 0x00, 0x43, - 0xb8, 0x27, 0x95, 0x22, 0x00, 0x4a, 0xcf, 0xac, 0x36, 0x30, 0x40, 0xa5, - 0xdc, 0x02, 0xa6, 0xec, 0x01, 0x48, 0x7c, 0x52, 0x72, 0x24, 0x00, 0xb3, - 0xc2, 0x01, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0x69, 0x24, 0x80, 0xb1, - 0x01, 0x04, 0x2b, 0x11, 0x5a, 0x02, 0x15, 0x01, 0x01, 0xff, 0x43, 0x47, - 0x2b, 0x6b, 0x24, 0x00, 0x43, 0x2a, 0x1d, 0x73, 0x24, 0xc0, 0x00, 0x80, - 0x01, 0xff, 0x45, 0xc3, 0x0a, 0x58, 0x32, 0x00, 0xa6, 0x31, 0x44, 0x46, - 0x2a, 0x59, 0x32, 0x00, 0x02, 0x10, 0x00, 0x1d, 0xb3, 0x0f, 0xb4, 0x01, - 0xff, 0x44, 0x25, 0x01, 0x53, 0x32, 0x00, 0x42, 0x15, 0x02, 0x52, 0x32, - 0x40, 0x44, 0x27, 0x1d, 0x57, 0x32, 0x00, 0x42, 0x60, 0x25, 0x56, 0x32, - 0x40, 0x4d, 0xf2, 0x10, 0x49, 0x32, 0x00, 0xe5, 0x51, 0x32, 0x40, 0x43, - 0xa7, 0x05, 0x55, 0x32, 0x00, 0x43, 0xcb, 0x06, 0x54, 0x32, 0x40, 0x43, - 0x75, 0x09, 0x6c, 0x24, 0x00, 0xf9, 0x5a, 0x32, 0xc0, 0x00, 0x80, 0x01, - 0xff, 0x45, 0xc3, 0x0a, 0xb3, 0x32, 0x00, 0xa6, 0x31, 0x44, 0x46, 0x2a, - 0xb4, 0x32, 0x00, 0x02, 0x10, 0x00, 0x1d, 0xb3, 0x0f, 0xb4, 0x01, 0xff, - 0x44, 0x25, 0x01, 0x5d, 0x32, 0x00, 0x42, 0x15, 0x02, 0x5c, 0x32, 0x40, - 0x44, 0x27, 0x1d, 0xb2, 0x32, 0x00, 0x42, 0x60, 0x25, 0xb1, 0x32, 0x40, - 0x4d, 0xf2, 0x10, 0x4a, 0x32, 0x00, 0xe5, 0x5b, 0x32, 0x40, 0x43, 0xa7, - 0x05, 0x5f, 0x32, 0x00, 0x43, 0xcb, 0x06, 0x5e, 0x32, 0x40, 0x50, 0x48, - 0x5e, 0x48, 0x32, 0x40, 0x05, 0x27, 0x1d, 0x11, 0x03, 0x60, 0x25, 0x01, - 0xff, 0x43, 0x75, 0x09, 0x6f, 0x24, 0x00, 0x51, 0x47, 0x5e, 0x4d, 0x32, - 0x40, 0x43, 0x75, 0x09, 0x70, 0x24, 0x00, 0x51, 0x47, 0x5e, 0x4e, 0x32, - 0x40, 0x03, 0x9c, 0x17, 0x58, 0xaf, 0x01, 0xff, 0x43, 0x2d, 0x11, 0xb5, - 0x32, 0x80, 0x06, 0x46, 0xa0, 0x5b, 0x6d, 0x24, 0x40, 0x80, 0x01, 0xff, - 0x45, 0xc3, 0x0a, 0xbd, 0x32, 0x00, 0xa6, 0x31, 0x44, 0x46, 0x2a, 0xbe, + 0xc7, 0x04, 0x05, 0xee, 0xe8, 0x01, 0xff, 0xa1, 0xb3, 0x04, 0x06, 0xef, + 0x06, 0xec, 0x03, 0x02, 0x68, 0x00, 0x9f, 0x01, 0x05, 0x5a, 0x03, 0x4e, + 0x0b, 0x40, 0x77, 0x01, 0xff, 0xa1, 0x3b, 0xe5, 0xc6, 0x0c, 0x80, 0x32, + 0xe9, 0xbf, 0x0c, 0x80, 0x29, 0xef, 0xca, 0x0c, 0x80, 0x20, 0xf5, 0xc1, + 0x0c, 0x80, 0x17, 0x08, 0x22, 0xc1, 0x01, 0xff, 0xec, 0xe2, 0x0c, 0x80, + 0x09, 0xf2, 0xc3, 0x0c, 0xc0, 0x00, 0xf2, 0xc4, 0x0c, 0x40, 0xec, 0xe3, + 0x0c, 0x40, 0xf5, 0xc2, 0x0c, 0x40, 0xef, 0xcb, 0x0c, 0x40, 0xe9, 0xc0, + 0x0c, 0x40, 0xe5, 0xc7, 0x0c, 0x40, 0xe1, 0xbe, 0x0c, 0x00, 0xe9, 0xc8, + 0x0c, 0x00, 0xf5, 0xcc, 0x0c, 0x40, 0xa1, 0x3f, 0xa3, 0x31, 0x4b, 0xe6, + 0x9d, 0xf1, 0x0c, 0x00, 0x45, 0x3f, 0x3f, 0xbc, 0x0c, 0x00, 0xb3, 0x17, + 0x4b, 0x6e, 0xa4, 0xf2, 0x0c, 0x00, 0x02, 0x02, 0x00, 0x01, 0xff, 0x44, + 0xe5, 0x23, 0xcd, 0x0c, 0x00, 0x45, 0xec, 0x4b, 0x83, 0x0c, 0x40, 0x46, + 0xd9, 0xd5, 0x84, 0x0c, 0x00, 0x52, 0x79, 0x54, 0x80, 0x0c, 0x40, 0x4a, + 0xd8, 0x23, 0x81, 0x0c, 0x00, 0x5d, 0x33, 0x16, 0xf3, 0x0c, 0x40, 0x47, + 0x3d, 0x16, 0x82, 0x0c, 0x00, 0x47, 0xaf, 0x88, 0xbd, 0x0c, 0x40, 0x49, + 0x44, 0x39, 0xd5, 0x0c, 0x00, 0x05, 0xee, 0x05, 0x01, 0xff, 0xe1, 0x85, + 0x0c, 0x80, 0xab, 0x02, 0xa2, 0x9e, 0x02, 0xa3, 0x91, 0x02, 0xa4, 0xf8, + 0x01, 0xe5, 0x8e, 0x0c, 0x80, 0xee, 0x01, 0x42, 0x0c, 0x08, 0xde, 0x0c, + 0x00, 0xa7, 0xdb, 0x01, 0x42, 0x22, 0x00, 0xb9, 0x0c, 0x00, 0xe9, 0x87, + 0x0c, 0x80, 0xcb, 0x01, 0xaa, 0xbe, 0x01, 0xab, 0xb1, 0x01, 0xac, 0x9d, + 0x01, 0x42, 0x6c, 0x00, 0xae, 0x0c, 0x00, 0xae, 0x78, 0xef, 0x92, 0x0c, + 0x80, 0x6f, 0xb0, 0x63, 0xb2, 0x57, 0xb3, 0x45, 0xb4, 0x2c, 0xf5, 0x89, + 0x0c, 0x80, 0x23, 0xb6, 0x06, 0x42, 0xbc, 0x22, 0xaf, 0x0c, 0x40, 0xe1, + 0xb5, 0x0c, 0x00, 0x07, 0x23, 0xc1, 0x01, 0xff, 0xec, 0x8c, 0x0c, 0x80, + 0x09, 0xf2, 0x8b, 0x0c, 0xc0, 0x00, 0xf2, 0xe0, 0x0c, 0x40, 0xec, 0xe1, + 0x0c, 0x40, 0xf5, 0x8a, 0x0c, 0x40, 0xe1, 0xa4, 0x0c, 0x00, 0x42, 0x22, + 0x00, 0xa5, 0x0c, 0x00, 0xb4, 0x01, 0xff, 0xe1, 0x9f, 0x0c, 0x00, 0x42, + 0x22, 0x00, 0xa0, 0x0c, 0x40, 0xe1, 0xb8, 0x0c, 0x00, 0x42, 0x22, 0x00, + 0xb6, 0x0c, 0x00, 0x42, 0x40, 0x06, 0xb7, 0x0c, 0x40, 0xe1, 0xb0, 0x0c, + 0x00, 0x42, 0x71, 0x00, 0xb1, 0x0c, 0x40, 0xe1, 0xaa, 0x0c, 0x00, 0x42, + 0x22, 0x00, 0xab, 0x0c, 0x40, 0xef, 0x93, 0x0c, 0x40, 0xe1, 0xa8, 0x0c, + 0x80, 0x12, 0x42, 0x24, 0x02, 0x99, 0x0c, 0x00, 0x42, 0x2a, 0x05, 0xa3, + 0x0c, 0x00, 0x42, 0xbc, 0x22, 0x9e, 0x0c, 0x40, 0x4b, 0xfc, 0x9d, 0xdd, + 0x0c, 0x40, 0xe1, 0xb2, 0x0c, 0x00, 0xac, 0x01, 0xff, 0xe1, 0xb3, 0x0c, + 0x00, 0x42, 0x74, 0x00, 0xde, 0x0c, 0x40, 0xe1, 0x95, 0x0c, 0x00, 0x42, + 0x22, 0x00, 0x96, 0x0c, 0x40, 0xe1, 0x9c, 0x0c, 0x00, 0x42, 0x22, 0x00, + 0x9d, 0x0c, 0x40, 0xe9, 0x88, 0x0c, 0x40, 0xe1, 0x97, 0x0c, 0x00, 0x42, + 0x22, 0x00, 0x98, 0x0c, 0x40, 0xe5, 0x8f, 0x0c, 0x40, 0xe1, 0xa6, 0x0c, + 0x00, 0xa4, 0x06, 0x42, 0x22, 0x00, 0xa7, 0x0c, 0x40, 0xe1, 0xa1, 0x0c, + 0x00, 0x42, 0x22, 0x00, 0xa2, 0x0c, 0x40, 0xe1, 0x9a, 0x0c, 0x00, 0x42, + 0x22, 0x00, 0x9b, 0x0c, 0x40, 0xe1, 0xac, 0x0c, 0x00, 0x42, 0x22, 0x00, + 0xad, 0x0c, 0x40, 0xe1, 0x86, 0x0c, 0x00, 0xe9, 0x90, 0x0c, 0x00, 0xf5, + 0x94, 0x0c, 0x40, 0x45, 0x12, 0x0b, 0xee, 0x0c, 0x00, 0xa6, 0x2e, 0x44, + 0xcf, 0x2a, 0xef, 0x0c, 0x00, 0x43, 0x0e, 0x0b, 0xe7, 0x0c, 0x00, 0xb3, + 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, 0xe6, 0x0c, 0x40, 0x44, 0x25, 0x01, + 0xe9, 0x0c, 0x00, 0x42, 0x15, 0x02, 0xe8, 0x0c, 0x40, 0x44, 0xc9, 0x1d, + 0xed, 0x0c, 0x00, 0x42, 0x01, 0x26, 0xec, 0x0c, 0x40, 0x43, 0xd2, 0x05, + 0xeb, 0x0c, 0x00, 0x43, 0xf6, 0x06, 0xea, 0x0c, 0x40, 0x4d, 0xd6, 0x83, + 0xd6, 0x0c, 0x00, 0x4c, 0x3b, 0x94, 0xdc, 0x0c, 0x40, 0x44, 0x19, 0xef, + 0x98, 0xf9, 0x01, 0x0b, 0x55, 0xa5, 0x01, 0xff, 0xa1, 0x9b, 0x0b, 0xa2, + 0xab, 0x0a, 0xa3, 0xd1, 0x09, 0xa4, 0xdf, 0x08, 0xa5, 0x9e, 0x08, 0xa6, + 0xc1, 0x07, 0xa7, 0x90, 0x07, 0xa8, 0xc1, 0x06, 0xa9, 0xa9, 0x06, 0x02, + 0x56, 0x19, 0x9a, 0x06, 0x45, 0xba, 0xa5, 0x11, 0x2f, 0x00, 0xac, 0xca, + 0x05, 0xad, 0xf9, 0x04, 0xae, 0xe3, 0x04, 0xaf, 0xbe, 0x04, 0xb0, 0x9a, + 0x04, 0xb2, 0xe1, 0x03, 0xb3, 0xdf, 0x01, 0xb4, 0x76, 0x43, 0x45, 0x03, + 0x64, 0x2f, 0x00, 0xb6, 0x62, 0xb7, 0x06, 0x46, 0xde, 0xd7, 0xc8, 0x2f, + 0x40, 0xa1, 0x45, 0xa5, 0x37, 0xa8, 0x29, 0x02, 0x9e, 0x01, 0x1d, 0xaf, + 0x0f, 0xb2, 0x01, 0xff, 0x42, 0xe5, 0x05, 0x13, 0x2f, 0x00, 0x43, 0xd8, + 0x02, 0xae, 0x2f, 0x40, 0x43, 0x41, 0x18, 0x25, 0x2f, 0x00, 0x42, 0xbb, + 0x00, 0x2f, 0x2f, 0x40, 0xe4, 0xb5, 0x2f, 0x00, 0xe5, 0xa3, 0x2f, 0x40, + 0x43, 0x89, 0x00, 0xc6, 0x2f, 0x00, 0x43, 0xaf, 0x02, 0x69, 0x2f, 0x40, + 0x44, 0x0d, 0xef, 0x4e, 0x2f, 0x00, 0x42, 0x60, 0x01, 0x91, 0x2f, 0x40, + 0x42, 0x60, 0x5b, 0xa1, 0x2f, 0x80, 0x06, 0x43, 0x8b, 0x00, 0x54, 0x2f, + 0x40, 0x4a, 0x9c, 0x68, 0x8f, 0x2f, 0x40, 0x45, 0x2f, 0xe4, 0x95, 0x2f, + 0x00, 0x46, 0xda, 0xdc, 0xa5, 0x2f, 0x40, 0xa1, 0x53, 0x42, 0x92, 0x01, + 0x17, 0x2f, 0x00, 0xa9, 0x3f, 0xaf, 0x31, 0xb2, 0x1d, 0x02, 0x42, 0x00, + 0x0d, 0x42, 0x15, 0x02, 0x06, 0x2f, 0xc0, 0x00, 0x46, 0x7a, 0x0e, 0x36, + 0x2f, 0x40, 0x43, 0x26, 0x16, 0x31, 0x2f, 0x00, 0x43, 0xbd, 0x01, 0xd4, + 0x2f, 0x40, 0x43, 0x0e, 0x03, 0x71, 0x2f, 0x00, 0x42, 0x27, 0x01, 0x4a, + 0x2f, 0x00, 0x44, 0xa1, 0xf0, 0xcd, 0x2f, 0x40, 0x44, 0xb2, 0x67, 0x86, + 0x2f, 0x00, 0x43, 0x77, 0x0e, 0xd2, 0x2f, 0x40, 0x43, 0xdb, 0x09, 0x8c, + 0x2f, 0x00, 0x42, 0x68, 0x00, 0x61, 0x2f, 0x40, 0x43, 0x3e, 0x01, 0x0f, + 0x2f, 0x00, 0x42, 0x60, 0x07, 0xbc, 0x2f, 0x00, 0x4c, 0x70, 0x80, 0xb1, + 0x2f, 0x40, 0xa1, 0xec, 0x01, 0xa3, 0xdd, 0x01, 0xa5, 0xc4, 0x01, 0xa8, + 0x99, 0x01, 0xa9, 0x8a, 0x01, 0x43, 0x3b, 0x04, 0x6a, 0x2f, 0x00, 0xac, + 0x6e, 0x44, 0x5e, 0x07, 0x29, 0x2f, 0x00, 0x44, 0x5a, 0xaf, 0x39, 0x2f, + 0x00, 0x44, 0x41, 0x0b, 0xb3, 0x2f, 0x00, 0xb0, 0x3a, 0x45, 0xd7, 0x05, + 0x45, 0x2f, 0x00, 0xb4, 0x0c, 0x42, 0x42, 0x0b, 0x47, 0x2f, 0x00, 0x44, + 0x48, 0x50, 0x62, 0x2f, 0x40, 0x43, 0x1a, 0x00, 0x74, 0x2f, 0x00, 0xa5, + 0x14, 0xaf, 0x01, 0xff, 0x42, 0xcd, 0x05, 0x6f, 0x2f, 0x00, 0xf0, 0x4c, + 0x2f, 0xc0, 0x00, 0x44, 0x2b, 0x30, 0x89, 0x2f, 0x40, 0x42, 0x57, 0x00, + 0x53, 0x2f, 0x00, 0xf0, 0x3b, 0x2f, 0x40, 0xa5, 0x12, 0x44, 0x59, 0xbf, + 0x70, 0x2f, 0x00, 0x43, 0xcd, 0x02, 0x14, 0x2f, 0x00, 0x44, 0x61, 0xf2, + 0x2c, 0x2f, 0x40, 0x42, 0x17, 0x00, 0x6d, 0x2f, 0x00, 0x43, 0x03, 0x41, + 0x94, 0x2f, 0x40, 0xa1, 0x06, 0x43, 0x0c, 0x1d, 0x5a, 0x2f, 0x40, 0x42, + 0xa4, 0x02, 0x03, 0x2f, 0x00, 0x42, 0x32, 0x00, 0xaa, 0x2f, 0x40, 0x46, + 0xa6, 0xda, 0x67, 0x2f, 0x00, 0x42, 0x60, 0x5b, 0x77, 0x2f, 0x40, 0xa5, + 0x1a, 0xaf, 0x01, 0xff, 0x42, 0x1b, 0x05, 0x37, 0x2f, 0x00, 0x04, 0x71, + 0xf2, 0x01, 0xff, 0x4a, 0x81, 0xa7, 0xab, 0x2f, 0x00, 0x45, 0x23, 0x9e, + 0x33, 0x2f, 0x40, 0x42, 0xeb, 0x0a, 0x7a, 0x2f, 0x00, 0x42, 0x60, 0x07, + 0x99, 0x2f, 0x40, 0x42, 0x13, 0x00, 0x19, 0x2f, 0x00, 0x44, 0xe5, 0x7b, + 0x04, 0x2f, 0x00, 0xe5, 0x92, 0x2f, 0x00, 0x42, 0x24, 0x00, 0x83, 0x2f, + 0x40, 0x45, 0x18, 0xe7, 0x20, 0x2f, 0x00, 0x44, 0x76, 0x06, 0x42, 0x2f, + 0x40, 0x4e, 0x95, 0x76, 0xbf, 0x2f, 0x00, 0x42, 0xb8, 0x04, 0xc4, 0x2f, + 0x00, 0xf9, 0x48, 0x2f, 0x40, 0xa1, 0x26, 0x42, 0x05, 0x00, 0x9a, 0x2f, + 0x00, 0xa9, 0x0c, 0x43, 0xf2, 0xc8, 0x27, 0x2f, 0x00, 0x42, 0x42, 0x0b, + 0x9b, 0x2f, 0x40, 0x42, 0x73, 0x02, 0x76, 0x2f, 0x00, 0x4c, 0x45, 0x3b, + 0x15, 0x2f, 0x00, 0x43, 0x32, 0x00, 0x2e, 0x2f, 0x40, 0x42, 0x9e, 0x01, + 0xac, 0x2f, 0x00, 0xf0, 0x41, 0x2f, 0x00, 0xf4, 0xcf, 0x2f, 0x40, 0x42, + 0x3f, 0x00, 0x97, 0x2f, 0x00, 0x43, 0x13, 0x01, 0x7e, 0x2f, 0x00, 0x44, + 0x14, 0x01, 0x12, 0x2f, 0x00, 0xb2, 0x01, 0xff, 0x45, 0x6c, 0xd6, 0x1b, + 0x2f, 0x00, 0x46, 0xb4, 0xde, 0x5e, 0x2f, 0x40, 0x42, 0xe2, 0x1a, 0x7c, + 0x2f, 0x00, 0x42, 0xcd, 0x05, 0x00, 0x2f, 0x80, 0x0f, 0xb0, 0x01, 0xff, + 0x46, 0xb8, 0x3a, 0x10, 0x2f, 0x00, 0x44, 0x99, 0x89, 0x87, 0x2f, 0x40, + 0x44, 0x99, 0xf2, 0x30, 0x2f, 0x40, 0x42, 0xed, 0x05, 0x79, 0x2f, 0x00, + 0xaf, 0x01, 0xff, 0x42, 0x46, 0x03, 0xd0, 0x2f, 0x00, 0xf4, 0x46, 0x2f, + 0x40, 0x42, 0x1a, 0x00, 0x08, 0x2f, 0x00, 0xa5, 0x3a, 0xa9, 0x2c, 0xaf, + 0x01, 0xff, 0x42, 0x10, 0x00, 0x49, 0x2f, 0x00, 0xb2, 0x15, 0xb5, 0x01, + 0xff, 0xae, 0x06, 0x42, 0x53, 0x00, 0x1d, 0x2f, 0x40, 0xe4, 0xa9, 0x2f, + 0x00, 0x44, 0x55, 0x07, 0x2d, 0x2f, 0x40, 0x44, 0x58, 0x07, 0xa0, 0x2f, + 0x00, 0x43, 0x32, 0x13, 0x85, 0x2f, 0x40, 0x44, 0xb4, 0x21, 0xc9, 0x2f, + 0x00, 0x46, 0x54, 0xde, 0x82, 0x2f, 0x40, 0x42, 0x8a, 0x00, 0x81, 0x2f, + 0x00, 0x43, 0xd7, 0x02, 0x60, 0x2f, 0x40, 0xa1, 0x39, 0xa5, 0x1f, 0xa9, + 0x0d, 0x43, 0xd8, 0x02, 0xa7, 0x2f, 0xc0, 0x00, 0x47, 0x96, 0xcd, 0x35, + 0x2f, 0x40, 0xe4, 0x07, 0x2f, 0x00, 0x42, 0x0c, 0x1a, 0x63, 0x2f, 0x00, + 0x42, 0xcd, 0x05, 0x01, 0x2f, 0x40, 0xa1, 0x0c, 0x42, 0xd5, 0x18, 0xb2, + 0x2f, 0x00, 0x42, 0xbc, 0x11, 0x09, 0x2f, 0x40, 0xe6, 0xb4, 0x2f, 0x00, + 0x44, 0x0f, 0x1a, 0xb0, 0x2f, 0x40, 0x42, 0x36, 0x01, 0x4b, 0x2f, 0x00, + 0x42, 0x2a, 0x02, 0x2a, 0x2f, 0x40, 0x42, 0x04, 0x00, 0x5f, 0x2f, 0x00, + 0xf2, 0x78, 0x2f, 0x40, 0x42, 0x73, 0x02, 0x0e, 0x2f, 0x00, 0xae, 0x01, + 0xff, 0x42, 0x6d, 0x14, 0x28, 0x2f, 0x00, 0x44, 0xae, 0x0a, 0x8d, 0x2f, + 0x40, 0xa1, 0x30, 0xa5, 0x1c, 0x4f, 0x6a, 0x6e, 0x16, 0x2f, 0x00, 0xaf, + 0x01, 0xff, 0x42, 0x55, 0x05, 0x05, 0x2f, 0x00, 0xb2, 0x01, 0xff, 0xee, + 0x93, 0x2f, 0x00, 0x42, 0x46, 0x03, 0xba, 0x2f, 0x40, 0xa1, 0x06, 0x42, + 0xf2, 0x1b, 0xc7, 0x2f, 0x40, 0xe4, 0xb8, 0x2f, 0x00, 0x42, 0x34, 0x00, + 0x3c, 0x2f, 0x40, 0x42, 0x46, 0x00, 0xbd, 0x2f, 0x00, 0xac, 0x06, 0x42, + 0x1b, 0x00, 0x3f, 0x2f, 0x40, 0x44, 0x3d, 0xef, 0x3d, 0x2f, 0x00, 0x4c, + 0xc5, 0x75, 0x59, 0x2f, 0x40, 0x43, 0x8a, 0x00, 0xa8, 0x2f, 0x00, 0x44, + 0xc0, 0x7c, 0xc1, 0x2f, 0x00, 0xef, 0x21, 0x2f, 0x80, 0x11, 0x02, 0x71, + 0x00, 0x01, 0xff, 0x42, 0x9e, 0x01, 0x72, 0x2f, 0x00, 0x42, 0xee, 0x00, + 0x8b, 0x2f, 0x40, 0x47, 0x8f, 0xcd, 0x22, 0x2f, 0x00, 0x42, 0xe2, 0x1a, + 0xa6, 0x2f, 0x40, 0xa1, 0x46, 0x46, 0x0d, 0x1a, 0x7b, 0x2f, 0x00, 0xa9, + 0x26, 0xac, 0x1a, 0x43, 0xbf, 0x6c, 0x9c, 0x2f, 0x00, 0xb2, 0x06, 0x42, + 0x42, 0x00, 0x51, 0x2f, 0x40, 0x46, 0x92, 0xd9, 0xb9, 0x2f, 0x00, 0x42, + 0xc1, 0x18, 0xcc, 0x2f, 0x40, 0x43, 0xfb, 0x38, 0xd5, 0x2f, 0x00, 0xf9, + 0xb6, 0x2f, 0x40, 0x43, 0x02, 0x24, 0x65, 0x2f, 0x00, 0x43, 0xca, 0x00, + 0xbe, 0x2f, 0x00, 0x42, 0x88, 0x00, 0x55, 0x2f, 0x00, 0x42, 0xa4, 0x02, + 0xc2, 0x2f, 0x40, 0x42, 0x73, 0x02, 0xaf, 0x2f, 0x00, 0x42, 0x1d, 0x01, + 0x5b, 0x2f, 0x00, 0x44, 0x0f, 0x1a, 0x57, 0x2f, 0x40, 0xa1, 0x2d, 0x44, + 0xc9, 0x00, 0x0b, 0x2f, 0x00, 0x49, 0xf7, 0xbb, 0xcb, 0x2f, 0x00, 0xae, + 0x13, 0x43, 0xca, 0x1d, 0xd1, 0x2f, 0x80, 0x06, 0x42, 0x4d, 0x00, 0x6c, + 0x2f, 0x40, 0x43, 0xa1, 0x01, 0x23, 0x2f, 0x40, 0x47, 0x9f, 0x68, 0x1e, + 0x2f, 0x00, 0x43, 0x8b, 0x00, 0x0a, 0x2f, 0x40, 0xf2, 0x7f, 0x2f, 0x80, + 0x04, 0xf4, 0xb7, 0x2f, 0x40, 0x42, 0x53, 0x00, 0x1f, 0x2f, 0x40, 0xa5, + 0x61, 0xa9, 0x47, 0xaf, 0x13, 0xb2, 0x01, 0xff, 0x44, 0xe5, 0x25, 0xd3, + 0x2f, 0x00, 0x42, 0x48, 0x04, 0xce, 0x2f, 0x00, 0xf9, 0x32, 0x2f, 0x40, + 0x44, 0x90, 0x1d, 0x4f, 0x2f, 0x00, 0xe7, 0x5d, 0x2f, 0x00, 0x42, 0x0c, + 0x00, 0x3e, 0x2f, 0x00, 0xf4, 0x02, 0x2f, 0x80, 0x0c, 0x46, 0xd6, 0xe0, + 0x58, 0x2f, 0x00, 0x46, 0x48, 0xe1, 0x0c, 0x2f, 0x40, 0x04, 0x77, 0x00, + 0x01, 0xff, 0x45, 0x51, 0xe5, 0x34, 0x2f, 0x00, 0x44, 0x7d, 0x61, 0x68, + 0x2f, 0x40, 0x44, 0x6e, 0x02, 0x43, 0x2f, 0x00, 0xb3, 0x06, 0x48, 0xd8, + 0xba, 0x18, 0x2f, 0x40, 0xe8, 0x6b, 0x2f, 0x00, 0x48, 0x61, 0xa5, 0xa4, + 0x2f, 0x40, 0x43, 0x74, 0x0f, 0x4d, 0x2f, 0x00, 0x42, 0x33, 0x00, 0xc5, + 0x2f, 0x40, 0xa1, 0x43, 0x44, 0x28, 0x4a, 0x26, 0x2f, 0x00, 0x43, 0xb8, + 0x27, 0xa2, 0x2f, 0x00, 0xac, 0x1f, 0xaf, 0x01, 0xff, 0x43, 0x86, 0x08, + 0x8a, 0x2f, 0x00, 0x45, 0xc1, 0xe8, 0x50, 0x2f, 0x00, 0x44, 0x65, 0xf2, + 0x2b, 0x2f, 0x00, 0x43, 0x32, 0x00, 0x0d, 0x2f, 0x00, 0xf7, 0x5c, 0x2f, + 0x40, 0xa1, 0x0c, 0x43, 0x56, 0x48, 0x1a, 0x2f, 0x00, 0x45, 0x49, 0x88, + 0x90, 0x2f, 0x40, 0xee, 0x52, 0x2f, 0x00, 0xf7, 0x56, 0x2f, 0x40, 0x42, + 0x34, 0x00, 0x9e, 0x2f, 0x00, 0x46, 0x3b, 0xcf, 0xc0, 0x2f, 0x00, 0x42, + 0x32, 0x00, 0x73, 0x2f, 0x40, 0xa1, 0x5f, 0x43, 0x13, 0x1f, 0x96, 0x2f, + 0x00, 0xa9, 0x47, 0xac, 0x33, 0xaf, 0x15, 0xb2, 0x01, 0xff, 0x44, 0xac, + 0x25, 0x40, 0x2f, 0x00, 0x45, 0x95, 0xe7, 0x3a, 0x2f, 0x00, 0x43, 0x30, + 0x7c, 0x80, 0x2f, 0x40, 0x42, 0x8a, 0x00, 0x88, 0x2f, 0x00, 0x42, 0x4c, + 0x0d, 0x9d, 0x2f, 0x00, 0x4b, 0xf9, 0x9e, 0x66, 0x2f, 0x00, 0x42, 0xcd, + 0x05, 0xbb, 0x2f, 0x00, 0xf7, 0x38, 0x2f, 0x40, 0x43, 0x0e, 0x03, 0xca, + 0x2f, 0x00, 0x43, 0xb4, 0x2d, 0x8e, 0x2f, 0x00, 0x42, 0xd6, 0x13, 0xad, + 0x2f, 0x40, 0xe7, 0x24, 0x2f, 0x00, 0x42, 0xab, 0x01, 0xc3, 0x2f, 0x00, + 0x44, 0xee, 0x05, 0x9f, 0x2f, 0x40, 0x44, 0x89, 0xef, 0x98, 0x2f, 0x00, + 0x44, 0x99, 0x98, 0x75, 0x2f, 0x40, 0x44, 0x3a, 0x4b, 0x1c, 0x2f, 0x00, + 0x42, 0x1b, 0x00, 0x7d, 0x2f, 0x00, 0x02, 0xcf, 0x00, 0x06, 0x42, 0x6d, + 0x43, 0x44, 0x2f, 0x40, 0x43, 0xd2, 0x05, 0x84, 0x2f, 0x00, 0x42, 0xd1, + 0x00, 0x6e, 0x2f, 0x40, 0xa5, 0x75, 0xa6, 0x58, 0x44, 0xcf, 0x2a, 0xc9, + 0xd2, 0x81, 0x4b, 0x43, 0x0e, 0x0b, 0xc1, 0xd2, 0x01, 0xb3, 0x29, 0xb4, + 0x06, 0x44, 0x43, 0x1e, 0xc0, 0xd2, 0x41, 0x42, 0x92, 0x01, 0xca, 0xd2, + 0x01, 0xa8, 0x0d, 0xb7, 0x01, 0xff, 0x44, 0xe7, 0x2b, 0xcc, 0xd2, 0x01, + 0xef, 0xc2, 0xd2, 0x41, 0x46, 0x96, 0x5a, 0xcd, 0xd2, 0x01, 0x43, 0x26, + 0x01, 0xc3, 0xd2, 0x41, 0x44, 0xc9, 0x1d, 0xc7, 0xd2, 0x81, 0x0d, 0x42, + 0x01, 0x26, 0xc6, 0xd2, 0xc1, 0x00, 0x44, 0x0a, 0x18, 0xd0, 0xd2, 0x41, + 0x44, 0x0a, 0x18, 0xd1, 0xd2, 0x41, 0x44, 0x0a, 0x18, 0xd3, 0xd2, 0x41, + 0xa9, 0x0d, 0x43, 0xf6, 0x06, 0xc4, 0xd2, 0xc1, 0x00, 0x44, 0x0a, 0x18, + 0xce, 0xd2, 0x41, 0x45, 0x09, 0x18, 0xcf, 0xd2, 0x01, 0x42, 0x32, 0x00, + 0xc5, 0xd2, 0x41, 0x44, 0xc9, 0x00, 0xc8, 0xd2, 0x81, 0x06, 0x45, 0xb4, + 0x6f, 0xcb, 0xd2, 0x41, 0x43, 0xc4, 0x09, 0xd2, 0xd2, 0x41, 0x51, 0xdc, + 0x57, 0xbb, 0x10, 0x01, 0xa4, 0x80, 0x03, 0x50, 0xd6, 0x62, 0xbc, 0x10, + 0x01, 0x07, 0xec, 0x05, 0x70, 0x4b, 0x43, 0xa0, 0xbd, 0x10, 0x81, 0x63, + 0xb3, 0x33, 0x0b, 0x40, 0x77, 0x01, 0xff, 0xa1, 0x20, 0xe5, 0xb5, 0x10, + 0x01, 0xe9, 0xb1, 0x10, 0x81, 0x13, 0xef, 0xb7, 0x10, 0x01, 0xf5, 0xb3, + 0x10, 0x81, 0x06, 0x49, 0x22, 0xc1, 0xc2, 0x10, 0x41, 0xf5, 0xb4, 0x10, + 0x41, 0xe9, 0xb2, 0x10, 0x41, 0xe1, 0xb0, 0x10, 0x01, 0xe9, 0xb6, 0x10, + 0x01, 0xf5, 0xb8, 0x10, 0x41, 0x4b, 0xf9, 0x26, 0xbe, 0x10, 0x01, 0x04, + 0x5b, 0x03, 0x01, 0xff, 0x48, 0x3c, 0x16, 0x81, 0x10, 0x01, 0x4b, 0xd7, + 0x23, 0x80, 0x10, 0x01, 0x45, 0x3f, 0x3f, 0xba, 0x10, 0x01, 0x02, 0x02, + 0x00, 0x01, 0xff, 0x44, 0xe5, 0x23, 0xb9, 0x10, 0x01, 0x45, 0xec, 0x4b, + 0x82, 0x10, 0x41, 0x46, 0x5b, 0x00, 0xcd, 0x10, 0x41, 0xe1, 0x83, 0x10, + 0x81, 0xf4, 0x01, 0xa2, 0xe7, 0x01, 0xa3, 0xda, 0x01, 0xa4, 0xbb, 0x01, + 0xe5, 0x89, 0x10, 0x01, 0xa7, 0xaa, 0x01, 0x42, 0x22, 0x00, 0xaf, 0x10, + 0x01, 0xe9, 0x85, 0x10, 0x81, 0x9a, 0x01, 0xaa, 0x8d, 0x01, 0xab, 0x80, + 0x01, 0x42, 0x74, 0x00, 0xaa, 0x10, 0x01, 0x42, 0x6c, 0x00, 0xa7, 0x10, + 0x01, 0xae, 0x5c, 0xef, 0x8b, 0x10, 0x01, 0xb0, 0x4c, 0xb2, 0x40, 0xb3, + 0x2e, 0xb4, 0x15, 0xf5, 0x87, 0x10, 0x81, 0x0c, 0x42, 0xf5, 0x0a, 0xab, + 0x10, 0x01, 0x42, 0xbc, 0x22, 0xa8, 0x10, 0x41, 0xf5, 0x88, 0x10, 0x41, + 0xe1, 0x9e, 0x10, 0x01, 0x42, 0x22, 0x00, 0x9f, 0x10, 0x01, 0xb4, 0x01, + 0xff, 0xe1, 0x97, 0x10, 0x01, 0x42, 0x22, 0x00, 0x98, 0x10, 0x41, 0xe1, + 0xae, 0x10, 0x01, 0x42, 0x22, 0x00, 0xac, 0x10, 0x01, 0x42, 0x40, 0x06, + 0xad, 0x10, 0x41, 0xe1, 0xa9, 0x10, 0x01, 0x42, 0x22, 0x00, 0x9c, 0x10, + 0x41, 0xe1, 0xa3, 0x10, 0x01, 0x42, 0x22, 0x00, 0xa4, 0x10, 0x41, 0xe1, + 0xa2, 0x10, 0x01, 0x42, 0x24, 0x02, 0x91, 0x10, 0x01, 0x42, 0x2a, 0x05, + 0x9d, 0x10, 0x01, 0x42, 0xbc, 0x22, 0x96, 0x10, 0x41, 0xe1, 0x8d, 0x10, + 0x01, 0x42, 0x22, 0x00, 0x8e, 0x10, 0x41, 0xe1, 0x94, 0x10, 0x01, 0x42, + 0x22, 0x00, 0x95, 0x10, 0x41, 0xe9, 0x86, 0x10, 0x41, 0xe1, 0x8f, 0x10, + 0x01, 0x42, 0x22, 0x00, 0x90, 0x10, 0x41, 0xe1, 0xa0, 0x10, 0x01, 0xa4, + 0x06, 0x42, 0x22, 0x00, 0xa1, 0x10, 0x41, 0xe1, 0x99, 0x10, 0x01, 0x43, + 0xe7, 0x4b, 0x9a, 0x10, 0x01, 0x42, 0x22, 0x00, 0x9b, 0x10, 0x41, 0xe1, + 0x92, 0x10, 0x01, 0x42, 0x22, 0x00, 0x93, 0x10, 0x41, 0xe1, 0xa5, 0x10, + 0x01, 0x42, 0x22, 0x00, 0xa6, 0x10, 0x41, 0xe1, 0x84, 0x10, 0x01, 0xe9, + 0x8a, 0x10, 0x01, 0xf5, 0x8c, 0x10, 0x41, 0x44, 0x73, 0x20, 0xc0, 0x10, + 0x01, 0x06, 0x3c, 0x01, 0x01, 0xff, 0x45, 0x16, 0x96, 0xc1, 0x10, 0x01, + 0x4c, 0xf8, 0x26, 0xbf, 0x10, 0x41, 0xa1, 0x37, 0xa5, 0x29, 0x52, 0xa5, + 0x52, 0xe9, 0xf9, 0x01, 0xaf, 0x15, 0xb5, 0x01, 0xff, 0x46, 0xf6, 0xdb, + 0x39, 0xf9, 0x01, 0x42, 0xb4, 0x01, 0xb5, 0x26, 0x00, 0x45, 0xe8, 0xe9, + 0x43, 0x26, 0x40, 0x42, 0x9e, 0x01, 0x1d, 0x2a, 0x00, 0x46, 0x8a, 0xe1, + 0x79, 0xf5, 0x41, 0x43, 0x42, 0x46, 0x56, 0xf4, 0x01, 0x47, 0xf9, 0xd2, + 0xbc, 0xfa, 0x41, 0x4c, 0x6f, 0x8d, 0x83, 0xf3, 0x01, 0x07, 0x7a, 0xd4, + 0x83, 0x05, 0xf2, 0xd9, 0xfa, 0x01, 0x07, 0x1a, 0xd7, 0x01, 0xff, 0x0f, + 0x3d, 0x33, 0xe3, 0x04, 0x06, 0xef, 0x06, 0x9c, 0x04, 0x02, 0x68, 0x00, + 0xdb, 0x01, 0x02, 0xbb, 0x09, 0x70, 0x4f, 0x93, 0x72, 0xc2, 0xa9, 0x00, + 0x05, 0x5a, 0x03, 0x47, 0x53, 0xcc, 0x4d, 0xcd, 0xa9, 0x00, 0x0b, 0x40, + 0x77, 0x01, 0xff, 0x4a, 0x57, 0xa9, 0xbb, 0xa9, 0x00, 0x45, 0xde, 0xe9, + 0xbc, 0xa9, 0x00, 0x44, 0x09, 0xd6, 0xb8, 0xa9, 0x80, 0x23, 0xb4, 0x0d, + 0x44, 0x2d, 0xf3, 0xb6, 0xa9, 0xc0, 0x00, 0x46, 0x30, 0xd8, 0xb7, 0xa9, + 0x40, 0xa1, 0x06, 0x45, 0x51, 0x12, 0xb5, 0xa9, 0x40, 0x44, 0x2f, 0x0b, + 0xba, 0xa9, 0x00, 0x44, 0xd1, 0xeb, 0xb4, 0xa9, 0x40, 0x47, 0x50, 0xcd, + 0xb9, 0xa9, 0x40, 0x45, 0x10, 0xe5, 0x81, 0xa9, 0x80, 0x12, 0x45, 0x21, + 0xe8, 0x82, 0xa9, 0x00, 0x49, 0xef, 0xbd, 0x80, 0xa9, 0x00, 0x47, 0x83, + 0xd7, 0x83, 0xa9, 0x40, 0x45, 0xe6, 0xe1, 0xb3, 0xa9, 0x40, 0x03, 0x79, + 0x1a, 0x11, 0x02, 0x1d, 0x01, 0x01, 0xff, 0x43, 0x21, 0x70, 0xc0, 0xa9, + 0x00, 0x47, 0x22, 0xd5, 0xcf, 0xa9, 0x40, 0xa1, 0x3d, 0x49, 0xbc, 0xba, + 0xdf, 0xa9, 0x00, 0xac, 0x20, 0x45, 0x62, 0xe8, 0xc4, 0xa9, 0x00, 0xb0, + 0x0c, 0x4d, 0x45, 0x89, 0xde, 0xa9, 0x00, 0x45, 0x59, 0xec, 0xc6, 0xa9, + 0x40, 0x46, 0xb6, 0xd9, 0xc7, 0xa9, 0x00, 0x46, 0xd9, 0x4d, 0xcc, 0xa9, + 0x40, 0x45, 0x77, 0xe7, 0xc8, 0xa9, 0x00, 0xb5, 0x01, 0xff, 0x43, 0x41, + 0x00, 0xc5, 0xa9, 0x00, 0x44, 0x18, 0x73, 0xc9, 0xa9, 0x40, 0x43, 0x85, + 0x11, 0xca, 0xa9, 0x80, 0x06, 0x44, 0x69, 0xf1, 0xc3, 0xa9, 0x40, 0x45, + 0xa7, 0xb5, 0xcb, 0xa9, 0x40, 0x4c, 0x1f, 0x8f, 0xc1, 0xa9, 0x00, 0x05, + 0xee, 0x05, 0x01, 0xff, 0xe1, 0x84, 0xa9, 0x80, 0xa7, 0x02, 0x42, 0x16, + 0x00, 0xa7, 0xa9, 0x80, 0x99, 0x02, 0x42, 0x37, 0x00, 0x95, 0xa9, 0x80, + 0x8b, 0x02, 0xa4, 0xf0, 0x01, 0xe5, 0x8c, 0xa9, 0x00, 0x42, 0x24, 0x02, + 0x92, 0xa9, 0x80, 0xde, 0x01, 0x42, 0x22, 0x00, 0xb2, 0xa9, 0x00, 0xe9, + 0x86, 0xa9, 0x80, 0xc8, 0x01, 0x42, 0x56, 0x19, 0x97, 0xa9, 0x80, 0xba, + 0x01, 0x42, 0x1b, 0x02, 0x8f, 0xa9, 0x80, 0xa3, 0x01, 0x42, 0x74, 0x00, + 0xad, 0xa9, 0x00, 0x42, 0x6c, 0x00, 0xa9, 0xa9, 0x00, 0xae, 0x69, 0xef, + 0x8e, 0xa9, 0x00, 0x42, 0xbb, 0x09, 0xa5, 0xa9, 0x80, 0x4f, 0x42, 0x71, + 0x00, 0xab, 0xa9, 0x80, 0x42, 0x42, 0x40, 0x06, 0xb1, 0xa9, 0x80, 0x2a, + 0xb4, 0x10, 0xf5, 0x88, 0xa9, 0x00, 0x42, 0xa9, 0x01, 0xae, 0xa9, 0x00, + 0x42, 0xbc, 0x22, 0xaa, 0xa9, 0x40, 0xe1, 0xa0, 0xa9, 0x80, 0x0d, 0x42, + 0x12, 0x00, 0x9b, 0xa9, 0xc0, 0x00, 0x4a, 0x5e, 0x70, 0x9c, 0xa9, 0x40, + 0x46, 0x36, 0xd8, 0xa1, 0xa9, 0x40, 0x02, 0x6b, 0x00, 0x01, 0xff, 0x48, + 0x60, 0x70, 0xb0, 0xa9, 0x00, 0x44, 0x5a, 0x70, 0xaf, 0xa9, 0x40, 0x46, + 0xfa, 0xd7, 0xac, 0xa9, 0x40, 0x80, 0x01, 0xff, 0x45, 0x1a, 0xe5, 0x89, + 0xa9, 0x00, 0x45, 0x59, 0x70, 0xa6, 0xa9, 0x40, 0xe1, 0xa4, 0xa9, 0x80, + 0x21, 0x42, 0x24, 0x02, 0x94, 0xa9, 0x80, 0x0d, 0x42, 0xbc, 0x22, 0x9a, + 0xa9, 0xc0, 0x00, 0x46, 0x36, 0xd8, 0x98, 0xa9, 0x40, 0x46, 0x24, 0xd8, + 0x8a, 0xa9, 0xc0, 0x00, 0x48, 0x78, 0xc2, 0x8b, 0xa9, 0x40, 0x46, 0x36, + 0xd8, 0x9f, 0xa9, 0x40, 0x80, 0x01, 0xff, 0x45, 0x59, 0x70, 0x91, 0xa9, + 0x00, 0x45, 0x14, 0xa3, 0x90, 0xa9, 0x40, 0x4a, 0x5e, 0x70, 0x99, 0xa9, + 0x40, 0x45, 0xcd, 0xe1, 0x85, 0xa9, 0x00, 0xe9, 0x87, 0xa9, 0x40, 0x46, + 0x36, 0xd8, 0x93, 0xa9, 0x40, 0xe1, 0xa2, 0xa9, 0x80, 0x0d, 0x42, 0xf0, + 0x10, 0x9d, 0xa9, 0xc0, 0x00, 0x4a, 0x5e, 0x70, 0x9e, 0xa9, 0x40, 0x4a, + 0x5e, 0x70, 0xa3, 0xa9, 0x40, 0x46, 0x36, 0xd8, 0x96, 0xa9, 0x40, 0x46, + 0x36, 0xd8, 0xa8, 0xa9, 0x40, 0xe9, 0x8d, 0xa9, 0x40, 0x45, 0x12, 0x0b, + 0xd8, 0xa9, 0x00, 0xa6, 0x2e, 0x44, 0xcf, 0x2a, 0xd9, 0xa9, 0x00, 0x43, + 0x0e, 0x0b, 0xd1, 0xa9, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, + 0xd0, 0xa9, 0x40, 0x44, 0x25, 0x01, 0xd3, 0xa9, 0x00, 0x42, 0x15, 0x02, + 0xd2, 0xa9, 0x40, 0x44, 0xc9, 0x1d, 0xd7, 0xa9, 0x00, 0x42, 0x01, 0x26, + 0xd6, 0xa9, 0x40, 0x43, 0xd2, 0x05, 0xd5, 0xa9, 0x00, 0x43, 0xf6, 0x06, + 0xd4, 0xa9, 0x40, 0x45, 0xed, 0xe4, 0xbf, 0xa9, 0x00, 0x45, 0xcc, 0xe7, + 0xbd, 0xa9, 0x00, 0x47, 0xab, 0xd4, 0xbe, 0xa9, 0x40, 0x4b, 0x79, 0x99, + 0xfb, 0x26, 0x00, 0x46, 0x5e, 0xda, 0xef, 0xf3, 0x01, 0x45, 0x81, 0xba, + 0x8e, 0xf3, 0x01, 0x46, 0x20, 0xdc, 0x7a, 0xf4, 0x01, 0x5a, 0x66, 0x20, + 0x04, 0x30, 0x00, 0x44, 0x69, 0xd5, 0x79, 0xf4, 0x01, 0x4b, 0x6c, 0xa1, + 0xe3, 0xf3, 0x01, 0x53, 0x5a, 0x4d, 0x30, 0xf5, 0x41, 0x53, 0xa3, 0x47, + 0x1f, 0xf9, 0x01, 0x03, 0x0e, 0x08, 0xe5, 0x14, 0x02, 0x04, 0x00, 0xc4, + 0x0d, 0xad, 0xd5, 0x0b, 0xae, 0x14, 0xb2, 0x06, 0x4e, 0x0f, 0x7f, 0xee, + 0xf3, 0x41, 0x43, 0x21, 0x24, 0xc7, 0xce, 0x01, 0x42, 0x5f, 0x03, 0xc1, + 0xce, 0x41, 0x48, 0x50, 0xc4, 0xe5, 0xf4, 0x01, 0xa3, 0x8b, 0x0b, 0xa4, + 0xf5, 0x06, 0xa6, 0xb2, 0x06, 0x06, 0x80, 0xdc, 0xa1, 0x06, 0x0f, 0xfd, + 0x71, 0xfa, 0x05, 0xb3, 0xdb, 0x02, 0x02, 0x77, 0x00, 0x9a, 0x01, 0xb6, + 0x01, 0xff, 0x02, 0x33, 0x00, 0x17, 0x07, 0x04, 0xd2, 0x01, 0xff, 0x44, + 0x58, 0x28, 0x64, 0x20, 0x00, 0x49, 0xd8, 0x20, 0x63, 0x20, 0x00, 0x45, + 0x28, 0x02, 0x62, 0x20, 0x40, 0x03, 0x41, 0x04, 0x3e, 0x04, 0x77, 0x00, + 0x01, 0xff, 0x50, 0xad, 0x00, 0xa1, 0x00, 0x00, 0x4b, 0x1f, 0x16, 0x18, + 0x2e, 0x00, 0xac, 0x18, 0x48, 0x18, 0xc9, 0x27, 0x21, 0x00, 0x49, 0x97, + 0x1b, 0xe7, 0x26, 0x00, 0x4d, 0xa6, 0x34, 0xbf, 0x00, 0x00, 0x48, 0x18, + 0xcc, 0x54, 0x20, 0x40, 0x45, 0xdd, 0x6e, 0x3e, 0x22, 0x00, 0x49, 0xc2, + 0xbd, 0x45, 0x2e, 0xc0, 0x00, 0x52, 0xe7, 0x4f, 0x46, 0x2e, 0x40, 0xa2, + 0x22, 0x05, 0x6d, 0x14, 0x12, 0x62, 0x34, 0x0c, 0xb4, 0xfb, 0x01, 0x4c, + 0x44, 0x04, 0x90, 0xfb, 0x01, 0x4c, 0x32, 0x11, 0xd9, 0x25, 0x40, 0x45, + 0xb8, 0x00, 0xb1, 0xfb, 0x01, 0x4d, 0x9e, 0x82, 0x96, 0xfb, 0x41, 0x05, + 0x0d, 0x03, 0x06, 0x45, 0xb3, 0x21, 0xd8, 0x25, 0x40, 0x47, 0x95, 0x44, + 0x8d, 0xcc, 0x01, 0x4c, 0x86, 0x0a, 0x8f, 0xcc, 0x41, 0x44, 0x98, 0x26, + 0x2b, 0x22, 0x80, 0x6a, 0xb2, 0x01, 0xff, 0x46, 0x58, 0xda, 0xba, 0x22, + 0x00, 0x4b, 0xa3, 0x3b, 0x3c, 0x2a, 0x00, 0xac, 0x3d, 0x46, 0x24, 0x16, + 0x3d, 0x20, 0x00, 0x47, 0xae, 0x0a, 0x29, 0x22, 0xc0, 0x00, 0x80, 0x01, + 0xff, 0x06, 0x5c, 0x00, 0x1d, 0x63, 0x92, 0x0a, 0x4b, 0x2a, 0x00, 0x05, + 0x51, 0x00, 0x01, 0xff, 0x43, 0x23, 0x0a, 0x40, 0x2a, 0x00, 0x4b, 0x30, + 0x30, 0x44, 0x2a, 0x00, 0x47, 0xe6, 0x7f, 0x43, 0x2a, 0x40, 0x4f, 0x13, + 0x6b, 0x49, 0x2a, 0x00, 0x45, 0x4d, 0x17, 0x47, 0x2a, 0x40, 0x11, 0x0c, + 0x5b, 0x06, 0x5a, 0x50, 0x21, 0xa4, 0x26, 0x40, 0x46, 0xb0, 0xd9, 0xf9, + 0xff, 0x00, 0x49, 0xd8, 0x20, 0xfa, 0xff, 0x00, 0x4a, 0x56, 0x86, 0xfb, + 0xff, 0x40, 0x80, 0x01, 0xff, 0xa1, 0x3a, 0x49, 0xc1, 0x58, 0xae, 0x23, + 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x4d, 0x36, 0x82, 0x0e, 0x2a, 0x00, + 0x4c, 0xa9, 0x0a, 0x19, 0x2a, 0x00, 0x59, 0x98, 0x24, 0x17, 0x2a, 0x00, + 0x47, 0xe6, 0x7f, 0x1b, 0x2a, 0x00, 0x4a, 0xef, 0xb1, 0x18, 0x2a, 0x00, + 0x02, 0x42, 0x0b, 0x01, 0xff, 0x46, 0xe5, 0x59, 0x1c, 0x2a, 0x00, 0x43, + 0xb5, 0x00, 0x1a, 0x2a, 0x40, 0x56, 0xef, 0x36, 0x15, 0x2a, 0x00, 0x51, + 0x3b, 0x5f, 0x0f, 0x2a, 0x40, 0x0d, 0x9a, 0x81, 0x06, 0x4d, 0xab, 0x82, + 0x80, 0x23, 0x40, 0x06, 0xd9, 0x75, 0xd3, 0x01, 0x07, 0x7d, 0xd5, 0x01, + 0xff, 0x07, 0xec, 0x05, 0x3d, 0x07, 0xff, 0x39, 0x01, 0xff, 0x44, 0xf5, + 0x06, 0x5b, 0x0b, 0x01, 0x43, 0x0e, 0x0b, 0x58, 0x0b, 0x81, 0x1c, 0xb4, + 0x01, 0xff, 0x42, 0x92, 0x01, 0x5c, 0x0b, 0x01, 0x44, 0x25, 0x01, 0x5a, + 0x0b, 0x01, 0xb7, 0x01, 0xff, 0x44, 0xcb, 0x1d, 0x5d, 0x0b, 0x01, 0xef, + 0x59, 0x0b, 0x41, 0x80, 0x01, 0xff, 0x47, 0x71, 0x11, 0x5e, 0x0b, 0x01, + 0x48, 0x40, 0x5e, 0x5f, 0x0b, 0x41, 0xa1, 0x7f, 0x44, 0x41, 0xef, 0x41, + 0x0b, 0x01, 0x46, 0x23, 0x4a, 0x43, 0x0b, 0x01, 0x45, 0xdd, 0xaa, 0x42, + 0x0b, 0x01, 0x42, 0xb0, 0x01, 0x44, 0x0b, 0x81, 0x60, 0x44, 0xcd, 0xf0, + 0x4a, 0x0b, 0x01, 0x46, 0x94, 0xdd, 0x4b, 0x0b, 0x01, 0x43, 0xb4, 0x05, + 0x4c, 0x0b, 0x01, 0x43, 0xdc, 0x22, 0x4d, 0x0b, 0x01, 0x42, 0x6f, 0x02, + 0x50, 0x0b, 0x01, 0x44, 0x4c, 0xc8, 0x52, 0x0b, 0x01, 0x44, 0x76, 0x66, + 0x53, 0x0b, 0x01, 0xb3, 0x20, 0xb4, 0x12, 0x43, 0x8a, 0x8a, 0x45, 0x0b, + 0x01, 0x44, 0xa1, 0x52, 0x49, 0x0b, 0x01, 0x45, 0x9b, 0x52, 0x46, 0x0b, + 0x41, 0x42, 0xb7, 0x2d, 0x55, 0x0b, 0x01, 0x43, 0xda, 0x25, 0x48, 0x0b, + 0x41, 0xa1, 0x06, 0x43, 0x7a, 0x16, 0x54, 0x0b, 0x41, 0x43, 0xad, 0xea, + 0x51, 0x0b, 0x01, 0x44, 0x49, 0xe4, 0x4e, 0x0b, 0x41, 0x42, 0x53, 0x00, + 0x47, 0x0b, 0x41, 0x44, 0x18, 0x3d, 0x40, 0x0b, 0x01, 0x43, 0x7e, 0x1a, + 0x4f, 0x0b, 0x41, 0x07, 0xec, 0x05, 0x3d, 0x07, 0xff, 0x39, 0x01, 0xff, + 0x44, 0xf5, 0x06, 0x7b, 0x0b, 0x01, 0x43, 0x0e, 0x0b, 0x78, 0x0b, 0x81, + 0x1c, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0x7c, 0x0b, 0x01, 0x44, 0x25, + 0x01, 0x7a, 0x0b, 0x01, 0xb7, 0x01, 0xff, 0x44, 0xcb, 0x1d, 0x7d, 0x0b, + 0x01, 0xef, 0x79, 0x0b, 0x41, 0x80, 0x01, 0xff, 0x47, 0x71, 0x11, 0x7e, + 0x0b, 0x01, 0x48, 0x40, 0x5e, 0x7f, 0x0b, 0x41, 0x45, 0xb2, 0xad, 0x60, + 0x0b, 0x01, 0x44, 0x41, 0xef, 0x61, 0x0b, 0x01, 0x46, 0x23, 0x4a, 0x63, + 0x0b, 0x01, 0x45, 0xdd, 0xaa, 0x62, 0x0b, 0x01, 0x42, 0xb0, 0x01, 0x64, + 0x0b, 0x81, 0x54, 0x44, 0xcd, 0xf0, 0x6a, 0x0b, 0x01, 0x46, 0x94, 0xdd, + 0x6b, 0x0b, 0x01, 0x48, 0x48, 0xc8, 0x6c, 0x0b, 0x01, 0x43, 0xdc, 0x22, + 0x6d, 0x0b, 0x01, 0x42, 0x6f, 0x02, 0x6f, 0x0b, 0x01, 0xb3, 0x20, 0xb4, + 0x12, 0x4d, 0x8a, 0x8a, 0x65, 0x0b, 0x01, 0x44, 0xa1, 0x52, 0x69, 0x0b, + 0x01, 0x45, 0x9b, 0x52, 0x66, 0x0b, 0x41, 0x42, 0xb7, 0x2d, 0x72, 0x0b, + 0x01, 0x43, 0xda, 0x25, 0x68, 0x0b, 0x41, 0xa1, 0x06, 0x43, 0x7a, 0x16, + 0x71, 0x0b, 0x41, 0x43, 0xad, 0xea, 0x70, 0x0b, 0x01, 0x44, 0x49, 0xe4, + 0x6e, 0x0b, 0x41, 0x42, 0x53, 0x00, 0x67, 0x0b, 0x41, 0x06, 0xde, 0x05, + 0x0c, 0x47, 0x9a, 0xd3, 0x22, 0xf5, 0x01, 0x47, 0x16, 0x08, 0x23, 0xf5, + 0x41, 0x4f, 0x9a, 0x6b, 0x20, 0xf5, 0x01, 0x47, 0xa2, 0x6b, 0x24, 0xf5, + 0x01, 0x4d, 0xdd, 0x88, 0x21, 0xf5, 0x41, 0x53, 0x28, 0x48, 0x6c, 0x20, + 0x00, 0x52, 0x99, 0x55, 0x6a, 0x20, 0x40, 0x45, 0x94, 0x6c, 0x1e, 0x22, + 0x80, 0x33, 0x09, 0xb7, 0x5c, 0x01, 0xff, 0x4b, 0xe4, 0x9a, 0x81, 0xf4, + 0x01, 0xb3, 0x01, 0xff, 0x09, 0xd9, 0x20, 0x06, 0x45, 0xc1, 0x5c, 0x39, + 0x21, 0x40, 0x44, 0xf5, 0x06, 0x1c, 0x00, 0x00, 0x43, 0x0e, 0x0b, 0x1f, + 0x00, 0x00, 0xb4, 0x01, 0xff, 0x44, 0x25, 0x01, 0x1d, 0x00, 0x00, 0x42, + 0x15, 0x02, 0x1e, 0x00, 0x40, 0x5a, 0x92, 0x1e, 0xde, 0x29, 0x40, 0x42, + 0xad, 0x00, 0x84, 0x00, 0x80, 0x85, 0x04, 0xa9, 0x01, 0xff, 0x4d, 0x62, + 0x80, 0xb9, 0x20, 0x00, 0x08, 0x68, 0xc4, 0x01, 0xff, 0x53, 0xef, 0x47, + 0xb4, 0xec, 0x01, 0x09, 0x1e, 0x5a, 0xd6, 0x03, 0x49, 0xf9, 0x47, 0xa0, + 0xec, 0x01, 0x07, 0xff, 0x39, 0x0c, 0x4b, 0xc6, 0x65, 0xac, 0xec, 0x01, + 0x4a, 0xb9, 0xb0, 0xb0, 0xec, 0x41, 0x0a, 0xf1, 0x11, 0xa6, 0x03, 0x45, + 0x12, 0x0b, 0x78, 0xec, 0x81, 0x85, 0x03, 0xa6, 0xb7, 0x02, 0x45, 0xc2, + 0xe7, 0xa1, 0xec, 0x81, 0xa9, 0x02, 0x44, 0xf9, 0x47, 0x9e, 0xec, 0x81, + 0x9b, 0x02, 0x44, 0xcf, 0x2a, 0x79, 0xec, 0x81, 0xf8, 0x01, 0x43, 0x0e, + 0x0b, 0x71, 0xec, 0x81, 0xe1, 0x01, 0x09, 0x2a, 0x4c, 0x9f, 0x01, 0xb3, + 0x59, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0x7a, 0xec, 0x81, 0x49, 0xa8, + 0x24, 0xb7, 0x01, 0xff, 0x44, 0xcb, 0x1d, 0x7b, 0xec, 0x81, 0x14, 0xef, + 0x72, 0xec, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x47, 0x71, 0x11, 0x84, 0xec, + 0x01, 0x48, 0x40, 0x5e, 0x8d, 0xec, 0x41, 0x49, 0x3f, 0x5e, 0x96, 0xec, + 0x41, 0x44, 0x7b, 0x11, 0x7c, 0xec, 0x81, 0x16, 0x43, 0x26, 0x01, 0x73, + 0xec, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x47, 0x71, 0x11, 0x85, 0xec, 0x01, + 0x48, 0x40, 0x5e, 0x8e, 0xec, 0x41, 0x49, 0x3f, 0x5e, 0x97, 0xec, 0x41, + 0x49, 0x3f, 0x5e, 0x95, 0xec, 0x41, 0x44, 0xc9, 0x1d, 0x77, 0xec, 0x81, + 0x22, 0x42, 0x01, 0x26, 0x76, 0xec, 0xc1, 0x00, 0x80, 0x0d, 0x42, 0x7d, + 0x11, 0x7f, 0xec, 0xc1, 0x00, 0x49, 0x3f, 0x5e, 0x9a, 0xec, 0x41, 0x47, + 0x71, 0x11, 0x88, 0xec, 0x01, 0x48, 0x40, 0x5e, 0x91, 0xec, 0x41, 0x80, + 0x0d, 0x42, 0x7d, 0x11, 0x80, 0xec, 0xc1, 0x00, 0x49, 0x3f, 0x5e, 0x9b, + 0xec, 0x41, 0x47, 0x71, 0x11, 0x89, 0xec, 0x01, 0x48, 0x40, 0x5e, 0x92, + 0xec, 0x41, 0x45, 0x12, 0x0b, 0xaa, 0xec, 0x01, 0xa6, 0x29, 0x44, 0xcf, + 0x2a, 0xab, 0xec, 0x01, 0x43, 0x0e, 0x0b, 0xa3, 0xec, 0x01, 0xb3, 0x0f, + 0xb4, 0x01, 0xff, 0x44, 0x25, 0x01, 0xa5, 0xec, 0x01, 0x42, 0x15, 0x02, + 0xa4, 0xec, 0x41, 0x44, 0xc9, 0x1d, 0xa9, 0xec, 0x01, 0x42, 0x01, 0x26, + 0xa8, 0xec, 0x41, 0x43, 0xd2, 0x05, 0xa7, 0xec, 0x01, 0x43, 0xf6, 0x06, + 0xa6, 0xec, 0x41, 0x80, 0x01, 0xff, 0x47, 0x71, 0x11, 0x83, 0xec, 0x01, + 0x48, 0x40, 0x5e, 0x8c, 0xec, 0x41, 0x80, 0x0d, 0x42, 0x7d, 0x11, 0x82, + 0xec, 0xc1, 0x00, 0x49, 0x3f, 0x5e, 0x9d, 0xec, 0x41, 0x47, 0x71, 0x11, + 0x8b, 0xec, 0x01, 0x48, 0x40, 0x5e, 0x94, 0xec, 0x41, 0x42, 0x1a, 0x00, + 0x9f, 0xec, 0x41, 0x42, 0x1a, 0x00, 0xa2, 0xec, 0x41, 0xa9, 0x26, 0xaf, + 0x01, 0xff, 0x43, 0x7c, 0x11, 0x7d, 0xec, 0x81, 0x16, 0x42, 0x42, 0x00, + 0x74, 0xec, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x47, 0x71, 0x11, 0x86, 0xec, + 0x01, 0x48, 0x40, 0x5e, 0x8f, 0xec, 0x41, 0x49, 0x3f, 0x5e, 0x98, 0xec, + 0x41, 0x43, 0x52, 0x4d, 0x7e, 0xec, 0x81, 0x16, 0x42, 0x32, 0x00, 0x75, + 0xec, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x47, 0x71, 0x11, 0x87, 0xec, 0x01, + 0x48, 0x40, 0x5e, 0x90, 0xec, 0x41, 0x49, 0x3f, 0x5e, 0x99, 0xec, 0x41, + 0x80, 0x0b, 0xf9, 0x81, 0xec, 0xc1, 0x00, 0x49, 0x3f, 0x5e, 0x9c, 0xec, + 0x41, 0x47, 0x71, 0x11, 0x8a, 0xec, 0x01, 0x48, 0x40, 0x5e, 0x93, 0xec, + 0x41, 0x43, 0x0e, 0x0b, 0xb1, 0xec, 0x01, 0xb4, 0x01, 0xff, 0x4b, 0x3d, + 0x5e, 0xb3, 0xec, 0x01, 0x42, 0x15, 0x02, 0xb2, 0xec, 0x41, 0x04, 0x0e, + 0x0b, 0x06, 0x4e, 0x24, 0x01, 0xaf, 0xec, 0x41, 0x44, 0x22, 0x00, 0xae, + 0xec, 0x01, 0x47, 0x2a, 0x01, 0xad, 0xec, 0x41, 0x57, 0x8c, 0x2c, 0xf5, + 0xfa, 0x41, 0x02, 0x14, 0x05, 0x1b, 0x02, 0x88, 0x00, 0x01, 0xff, 0x03, + 0x9a, 0x35, 0x06, 0x44, 0x2c, 0x05, 0x06, 0x22, 0x40, 0x51, 0x9c, 0x36, + 0xda, 0xf5, 0x01, 0x44, 0xf7, 0x03, 0xe1, 0x29, 0x40, 0x4c, 0x0f, 0x90, + 0xe8, 0xf4, 0x01, 0x4e, 0x2d, 0x7b, 0xdc, 0x29, 0x40, 0x46, 0x22, 0x43, + 0xb7, 0x22, 0x80, 0xde, 0x01, 0xf0, 0x7f, 0xf4, 0xc1, 0x00, 0x0e, 0x75, + 0x77, 0x01, 0xff, 0x07, 0xec, 0x05, 0x43, 0x07, 0xff, 0x39, 0x06, 0x4c, + 0x13, 0x95, 0x57, 0x08, 0x41, 0x43, 0x0e, 0x0b, 0x58, 0x08, 0x81, 0x23, + 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0x5b, 0x08, 0x81, 0x13, 0x44, 0x25, + 0x01, 0x5a, 0x08, 0x01, 0xb7, 0x01, 0xff, 0x44, 0xcb, 0x1d, 0x5c, 0x08, + 0x01, 0xef, 0x59, 0x08, 0x41, 0x49, 0x3f, 0x5e, 0x5f, 0x08, 0x41, 0x80, + 0x01, 0xff, 0x47, 0x71, 0x11, 0x5d, 0x08, 0x01, 0x48, 0x40, 0x5e, 0x5e, + 0x08, 0x41, 0xa1, 0x7f, 0x44, 0x41, 0xef, 0x41, 0x08, 0x01, 0x46, 0x23, + 0x4a, 0x43, 0x08, 0x01, 0x45, 0xdd, 0xaa, 0x42, 0x08, 0x01, 0x42, 0xb0, + 0x01, 0x44, 0x08, 0x81, 0x60, 0x44, 0xcd, 0xf0, 0x4a, 0x08, 0x01, 0x46, + 0x94, 0xdd, 0x4b, 0x08, 0x01, 0x43, 0xb4, 0x05, 0x4c, 0x08, 0x01, 0x43, + 0xdc, 0x22, 0x4d, 0x08, 0x01, 0x42, 0x6f, 0x02, 0x50, 0x08, 0x01, 0x44, + 0x4c, 0xc8, 0x52, 0x08, 0x01, 0x44, 0x76, 0x66, 0x53, 0x08, 0x01, 0xb3, + 0x20, 0xb4, 0x12, 0x43, 0x8a, 0x8a, 0x45, 0x08, 0x01, 0x44, 0xa1, 0x52, + 0x49, 0x08, 0x01, 0x45, 0x9b, 0x52, 0x46, 0x08, 0x41, 0x42, 0xb7, 0x2d, + 0x55, 0x08, 0x01, 0x43, 0xda, 0x25, 0x48, 0x08, 0x41, 0xa1, 0x06, 0x43, + 0x7a, 0x16, 0x54, 0x08, 0x41, 0x43, 0xad, 0xea, 0x51, 0x08, 0x01, 0x44, + 0x49, 0xe4, 0x4e, 0x08, 0x41, 0x42, 0x53, 0x00, 0x47, 0x08, 0x41, 0x44, + 0x18, 0x3d, 0x40, 0x08, 0x01, 0x43, 0x7e, 0x1a, 0x4f, 0x08, 0x41, 0x5a, + 0xac, 0x1e, 0x53, 0x22, 0x40, 0x03, 0x9f, 0x01, 0xfa, 0x06, 0x09, 0x4f, + 0x20, 0x01, 0xff, 0x0b, 0x12, 0x5b, 0x82, 0x06, 0xa3, 0xf3, 0x05, 0x02, + 0x04, 0x00, 0xdf, 0x04, 0x52, 0x3d, 0x51, 0x2d, 0x30, 0x00, 0x49, 0x81, + 0x16, 0x02, 0x30, 0x00, 0x4f, 0xd4, 0x6d, 0x3f, 0x30, 0x00, 0x4e, 0x58, + 0x20, 0x05, 0x30, 0x00, 0x4f, 0xa5, 0x6f, 0x2a, 0x30, 0x00, 0x4b, 0x4e, + 0xa0, 0x07, 0x30, 0x00, 0x50, 0xc6, 0x66, 0x2b, 0x30, 0x00, 0x45, 0xd0, + 0x4c, 0x00, 0x30, 0x00, 0xb4, 0x06, 0x53, 0x8a, 0x4e, 0x3e, 0x30, 0x40, + 0x0a, 0xb3, 0xa7, 0xff, 0x03, 0x09, 0x46, 0xb8, 0x01, 0xff, 0x5a, 0xce, + 0x20, 0x37, 0x30, 0x00, 0x0b, 0x4c, 0x32, 0x01, 0xff, 0xa1, 0xe0, 0x03, + 0xa4, 0xf3, 0x01, 0x48, 0x18, 0xc6, 0xc1, 0x32, 0x00, 0x05, 0x2c, 0xd4, + 0x37, 0xaa, 0x20, 0x02, 0x6c, 0x00, 0x12, 0x48, 0xe0, 0xc8, 0xca, 0x32, + 0x00, 0x47, 0xaf, 0xd3, 0xc9, 0x32, 0x00, 0x49, 0x2a, 0xbf, 0xc8, 0x32, + 0x40, 0x43, 0x17, 0x41, 0xc2, 0x32, 0x00, 0xf9, 0xc4, 0x32, 0x40, 0x46, + 0xc2, 0xd9, 0xc0, 0x32, 0x00, 0xb5, 0x01, 0xff, 0x42, 0x75, 0x0b, 0xc6, + 0x32, 0x00, 0x42, 0xcd, 0x05, 0xc5, 0x32, 0x40, 0xa5, 0x9c, 0x01, 0xa6, + 0x7f, 0x44, 0xcf, 0x2a, 0x61, 0x33, 0x80, 0x72, 0x43, 0x0e, 0x0b, 0x59, + 0x33, 0x00, 0xb3, 0x50, 0xb4, 0x06, 0x44, 0x43, 0x1e, 0x58, 0x33, 0x40, + 0x42, 0x92, 0x01, 0x62, 0x33, 0x00, 0xa8, 0x34, 0xb7, 0x01, 0xff, 0xa5, + 0x04, 0xef, 0x5a, 0x33, 0x40, 0x43, 0xe8, 0x2b, 0x64, 0x33, 0x00, 0x43, + 0xcc, 0x1d, 0x6c, 0x33, 0xc0, 0x00, 0x8d, 0x01, 0xff, 0x44, 0xf5, 0x06, + 0x70, 0x33, 0x00, 0x43, 0x0e, 0x0b, 0x6d, 0x33, 0x00, 0xb4, 0x01, 0xff, + 0x44, 0x25, 0x01, 0x6f, 0x33, 0x00, 0x42, 0x15, 0x02, 0x6e, 0x33, 0x40, + 0x46, 0x96, 0x5a, 0x65, 0x33, 0x00, 0x43, 0x26, 0x01, 0x5b, 0x33, 0x40, + 0x44, 0xc9, 0x1d, 0x5f, 0x33, 0x80, 0x0d, 0x42, 0x01, 0x26, 0x5e, 0x33, + 0xc0, 0x00, 0x44, 0x0a, 0x18, 0x68, 0x33, 0x40, 0x44, 0x0a, 0x18, 0x69, + 0x33, 0x40, 0x44, 0x0a, 0x18, 0x6b, 0x33, 0x40, 0xa9, 0x0d, 0x43, 0xf6, + 0x06, 0x5c, 0x33, 0xc0, 0x00, 0x44, 0x0a, 0x18, 0x66, 0x33, 0x40, 0x45, + 0x09, 0x18, 0x67, 0x33, 0x00, 0x42, 0x32, 0x00, 0x5d, 0x33, 0x40, 0x44, + 0xc9, 0x00, 0x60, 0x33, 0x80, 0x06, 0x45, 0xb4, 0x6f, 0x63, 0x33, 0x40, + 0x43, 0xc4, 0x09, 0x6a, 0x33, 0x40, 0x03, 0x05, 0x20, 0x06, 0x47, 0xad, + 0xd0, 0xcb, 0x32, 0x40, 0xa5, 0xca, 0x01, 0xa6, 0xac, 0x01, 0x44, 0xcf, + 0x2a, 0xe8, 0x33, 0x80, 0x9e, 0x01, 0x43, 0x0e, 0x0b, 0xe0, 0x33, 0x00, + 0xb3, 0x7c, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0xe9, 0x33, 0x00, 0xa8, + 0x56, 0xb7, 0x01, 0xff, 0xa5, 0x04, 0xef, 0xe1, 0x33, 0x40, 0x43, 0xe8, + 0x2b, 0xeb, 0x33, 0x00, 0x43, 0xcc, 0x1d, 0xf3, 0x33, 0xc0, 0x00, 0x8d, + 0x01, 0xff, 0x45, 0x12, 0x0b, 0xfb, 0x33, 0x00, 0xa6, 0x29, 0x44, 0xcf, + 0x2a, 0xfc, 0x33, 0x00, 0x43, 0x0e, 0x0b, 0xf4, 0x33, 0x00, 0xb3, 0x0f, + 0xb4, 0x01, 0xff, 0x44, 0x25, 0x01, 0xf6, 0x33, 0x00, 0x42, 0x15, 0x02, + 0xf5, 0x33, 0x40, 0x44, 0xc9, 0x1d, 0xfa, 0x33, 0x00, 0x42, 0x01, 0x26, + 0xf9, 0x33, 0x40, 0x43, 0xd2, 0x05, 0xf8, 0x33, 0x00, 0x43, 0xf6, 0x06, + 0xf7, 0x33, 0x40, 0x03, 0x7b, 0x11, 0x06, 0x43, 0x26, 0x01, 0xe2, 0x33, + 0x40, 0x43, 0xc4, 0x09, 0xec, 0x33, 0x00, 0xf9, 0xfd, 0x33, 0xc0, 0x00, + 0x44, 0x28, 0xbd, 0xfe, 0x33, 0x40, 0x44, 0xc9, 0x1d, 0xe6, 0x33, 0x80, + 0x0d, 0x42, 0x01, 0x26, 0xe5, 0x33, 0xc0, 0x00, 0x44, 0x0a, 0x18, 0xef, + 0x33, 0x40, 0x44, 0x0a, 0x18, 0xf0, 0x33, 0x40, 0x44, 0x0a, 0x18, 0xf2, + 0x33, 0x40, 0xa9, 0x0d, 0x43, 0xf6, 0x06, 0xe3, 0x33, 0xc0, 0x00, 0x44, + 0x0a, 0x18, 0xed, 0x33, 0x40, 0x45, 0x09, 0x18, 0xee, 0x33, 0x00, 0x42, + 0x32, 0x00, 0xe4, 0x33, 0x40, 0x44, 0xc9, 0x00, 0xe7, 0x33, 0x80, 0x06, + 0x45, 0xb4, 0x6f, 0xea, 0x33, 0x40, 0x43, 0xc4, 0x09, 0xf1, 0x33, 0x40, + 0x44, 0x25, 0xf2, 0xc3, 0x32, 0x00, 0x45, 0xc3, 0xeb, 0xc7, 0x32, 0x40, + 0xa6, 0x15, 0x43, 0x0e, 0x0b, 0x72, 0xd3, 0x01, 0xb4, 0x01, 0xff, 0x44, + 0x25, 0x01, 0x74, 0xd3, 0x01, 0x42, 0x15, 0x02, 0x73, 0xd3, 0x41, 0x43, + 0xd2, 0x05, 0x76, 0xd3, 0x01, 0x43, 0xf6, 0x06, 0x75, 0xd3, 0x41, 0x51, + 0x33, 0x2d, 0x2c, 0x30, 0x00, 0x14, 0xb4, 0x45, 0x01, 0xff, 0x09, 0x88, + 0xb5, 0x74, 0x4d, 0x2d, 0x83, 0xf4, 0x2f, 0x00, 0x55, 0xc3, 0x3b, 0xfe, + 0x2f, 0x00, 0x08, 0x84, 0x02, 0x58, 0x48, 0x3b, 0x0e, 0xfb, 0x2f, 0x00, + 0x48, 0x6d, 0x60, 0xff, 0x2f, 0x00, 0x02, 0x6f, 0x00, 0x01, 0xff, 0x49, + 0xe7, 0xb6, 0xef, 0x31, 0x00, 0x0c, 0xe3, 0x94, 0x01, 0xff, 0x45, 0x5c, + 0x00, 0xf5, 0x2f, 0x00, 0x45, 0x20, 0x07, 0xf6, 0x2f, 0x00, 0xac, 0x17, + 0x45, 0xc8, 0x00, 0xfc, 0x2f, 0x00, 0x06, 0x6d, 0x02, 0x01, 0xff, 0x44, + 0xc3, 0x00, 0xf8, 0x2f, 0x00, 0x45, 0xc8, 0x00, 0xf9, 0x2f, 0x40, 0x43, + 0xc4, 0x00, 0xf7, 0x2f, 0x00, 0x05, 0x14, 0x01, 0x01, 0xff, 0x44, 0xc3, + 0x00, 0xfa, 0x2f, 0x00, 0x45, 0xc8, 0x00, 0xfd, 0x2f, 0x40, 0x50, 0x26, + 0x65, 0xf2, 0x2f, 0x00, 0x45, 0xc8, 0x00, 0xf0, 0x2f, 0x40, 0x45, 0x20, + 0x07, 0xf1, 0x2f, 0x00, 0x50, 0x16, 0x65, 0xf3, 0x2f, 0x40, 0x4b, 0xe3, + 0x9e, 0x06, 0x30, 0x00, 0x44, 0x14, 0x05, 0x01, 0x30, 0x40, 0x4b, 0xb0, + 0x99, 0x98, 0x31, 0x00, 0x4a, 0x89, 0xa9, 0x9e, 0x31, 0x00, 0xa6, 0x49, + 0x4b, 0xd3, 0x9c, 0x9d, 0x31, 0x00, 0x4c, 0x47, 0x91, 0x90, 0x31, 0x00, + 0xad, 0x2f, 0x48, 0x3c, 0x2d, 0x92, 0x31, 0x00, 0x4c, 0x5f, 0x94, 0x91, + 0x31, 0x00, 0x4b, 0x7f, 0xa2, 0x9a, 0x31, 0x00, 0xb4, 0x01, 0xff, 0xa8, + 0x0c, 0x47, 0xfc, 0xd3, 0x96, 0x31, 0x00, 0x47, 0x91, 0xd7, 0x93, 0x31, + 0x40, 0x48, 0x28, 0xc7, 0x9b, 0x31, 0x00, 0x48, 0x58, 0xca, 0x94, 0x31, + 0x40, 0x47, 0xc3, 0xce, 0x9f, 0x31, 0x00, 0x4a, 0x73, 0xab, 0x97, 0x31, + 0x40, 0x49, 0xb3, 0xba, 0x99, 0x31, 0x00, 0x03, 0xf6, 0x06, 0x01, 0xff, + 0x45, 0xb8, 0x00, 0x95, 0x31, 0x00, 0x47, 0x46, 0x39, 0x9c, 0x31, 0x40, + 0x04, 0x37, 0x00, 0x06, 0x4d, 0xd2, 0x82, 0xaa, 0xfa, 0x41, 0x42, 0x1e, + 0x00, 0x61, 0x22, 0x80, 0x06, 0x4e, 0x76, 0x3b, 0x67, 0x2a, 0x40, 0x55, + 0x7b, 0x38, 0xe5, 0x29, 0x40, 0xa3, 0x0c, 0x55, 0xae, 0x3b, 0xd2, 0xf3, + 0x01, 0x45, 0x00, 0xeb, 0xf8, 0x26, 0x40, 0x44, 0xc7, 0x61, 0x68, 0xf3, + 0x01, 0x43, 0xc7, 0x40, 0xca, 0xf9, 0x41, 0xa1, 0xea, 0x25, 0xa5, 0xe9, + 0x07, 0xa9, 0xd6, 0x03, 0xaf, 0x63, 0x4b, 0x74, 0xa2, 0xb4, 0x20, 0x00, + 0xb5, 0x45, 0xb9, 0x01, 0xff, 0x46, 0x74, 0xd9, 0xbb, 0xfa, 0x01, 0x44, + 0x01, 0xf0, 0xda, 0x2b, 0x80, 0x2f, 0xb0, 0x06, 0x4f, 0x74, 0x73, 0x8e, + 0x23, 0x40, 0x43, 0xb0, 0x01, 0x10, 0x20, 0x80, 0x06, 0x49, 0xd8, 0xbc, + 0x12, 0x2e, 0x40, 0x80, 0x0c, 0x46, 0xcd, 0x8f, 0x2d, 0x00, 0x00, 0x4b, + 0x63, 0x99, 0x27, 0x20, 0x40, 0x46, 0xb2, 0x21, 0x43, 0x20, 0x00, 0x4e, + 0xf7, 0x69, 0x1a, 0x2e, 0x40, 0x49, 0x21, 0x2e, 0x79, 0xf7, 0x41, 0x4a, + 0xbf, 0xaa, 0x17, 0xf9, 0x01, 0x53, 0x6c, 0x4b, 0xaf, 0xf4, 0x01, 0x49, + 0x36, 0x93, 0x2f, 0xf6, 0x01, 0xf4, 0xd6, 0xf6, 0x41, 0x43, 0x64, 0x2a, + 0x2a, 0xf5, 0x01, 0xac, 0xd7, 0x02, 0x48, 0xf9, 0x79, 0x3b, 0x22, 0x00, + 0x03, 0x9d, 0x28, 0xc0, 0x02, 0x42, 0x55, 0x05, 0x9d, 0xfa, 0x01, 0xb2, + 0x53, 0x46, 0x04, 0xe0, 0xe5, 0xf3, 0x01, 0xb4, 0x2b, 0xb5, 0x01, 0xff, + 0x46, 0xff, 0xd6, 0x1b, 0x23, 0x80, 0x1b, 0x42, 0x46, 0x03, 0x02, 0x23, + 0xc0, 0x00, 0x80, 0x01, 0xff, 0x48, 0xb3, 0x3d, 0xe0, 0xf3, 0x81, 0x06, + 0x4b, 0x29, 0xa5, 0xe1, 0xf3, 0x41, 0xf3, 0xd8, 0xf3, 0x41, 0x52, 0xd5, + 0x4f, 0xf3, 0x23, 0x40, 0x80, 0x06, 0x42, 0xd8, 0x00, 0xe8, 0xf3, 0x41, + 0x48, 0x08, 0xc4, 0x15, 0x26, 0x00, 0x43, 0xdf, 0xda, 0x2d, 0xf3, 0x01, + 0x46, 0x1a, 0xdf, 0x36, 0xf3, 0x01, 0x47, 0xf4, 0xd5, 0x68, 0x26, 0x40, + 0x08, 0x0e, 0x00, 0x16, 0x42, 0x46, 0x03, 0x0e, 0xf4, 0xc1, 0x00, 0x80, + 0x01, 0xff, 0x44, 0x0c, 0x08, 0x34, 0xf4, 0x01, 0x46, 0x68, 0xdf, 0xc7, + 0xf3, 0x41, 0xa2, 0xb1, 0x01, 0x49, 0xf9, 0xb6, 0x13, 0xcc, 0x01, 0x48, + 0xce, 0x29, 0x26, 0x20, 0x00, 0xac, 0x78, 0x55, 0xd4, 0x3c, 0xa9, 0x26, + 0x00, 0x11, 0xd7, 0x5c, 0x50, 0xb2, 0x42, 0x0a, 0xcd, 0xb0, 0x2e, 0xb4, + 0x06, 0x4b, 0x81, 0xa5, 0xb0, 0xce, 0x41, 0x02, 0x5c, 0x00, 0x06, 0x4c, + 0x0b, 0x94, 0xa5, 0xf6, 0x41, 0x44, 0xd1, 0x45, 0x7e, 0x2b, 0x00, 0x47, + 0xe6, 0x3b, 0x09, 0x00, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x43, 0x9c, 0x12, + 0x88, 0x00, 0x00, 0x52, 0xa7, 0x56, 0x89, 0x00, 0x40, 0xd1, 0xba, 0x23, + 0x00, 0xd3, 0xbb, 0x23, 0x00, 0xd7, 0xbc, 0x23, 0x00, 0xd9, 0xbd, 0x23, + 0x40, 0x49, 0x9a, 0xb5, 0x9b, 0xcc, 0x01, 0x4f, 0xd5, 0x6c, 0x09, 0xcc, + 0x41, 0x44, 0x45, 0xed, 0x81, 0xfb, 0x01, 0xd2, 0x76, 0xfb, 0x01, 0xd3, + 0x77, 0xfb, 0x01, 0xd4, 0x78, 0xfb, 0x01, 0xd5, 0x79, 0xfb, 0x01, 0xd6, + 0x7a, 0xfb, 0x01, 0xd7, 0x7b, 0xfb, 0x41, 0x45, 0x07, 0xe4, 0x85, 0xcc, + 0x01, 0x04, 0xee, 0x07, 0x01, 0xff, 0x49, 0xc1, 0x58, 0xaf, 0x23, 0x00, + 0x05, 0x51, 0x00, 0x01, 0xff, 0x4f, 0x5c, 0x6d, 0x91, 0xcc, 0x01, 0xb4, + 0x01, 0xff, 0x4f, 0xf8, 0x07, 0x12, 0xce, 0x01, 0x48, 0xfe, 0x07, 0x0f, + 0xce, 0x41, 0x42, 0x17, 0x00, 0x15, 0x20, 0x00, 0x05, 0x0d, 0x03, 0x01, + 0xff, 0x47, 0x8d, 0xd1, 0x23, 0x2b, 0x00, 0x47, 0xa1, 0xd3, 0xc3, 0x2b, + 0x40, 0x44, 0x4c, 0x50, 0x6f, 0xf3, 0x01, 0x43, 0x8d, 0xb6, 0x1d, 0xf4, + 0x41, 0xe5, 0x73, 0xf5, 0x01, 0x59, 0xb1, 0x24, 0x68, 0xf6, 0xc1, 0x00, + 0x50, 0x3e, 0x11, 0x69, 0xf6, 0x41, 0x46, 0x28, 0xda, 0x3a, 0xf3, 0x01, + 0x02, 0x40, 0x00, 0xe1, 0x03, 0x49, 0x0d, 0xbb, 0x7e, 0xf9, 0x01, 0x4a, + 0x57, 0xae, 0xd5, 0xf6, 0x01, 0x4a, 0xbf, 0xaf, 0x9b, 0xf9, 0x01, 0x07, + 0x48, 0x12, 0x06, 0x4b, 0xf8, 0xa2, 0xec, 0x26, 0x40, 0x4c, 0x0b, 0x8e, + 0x9f, 0x30, 0x00, 0x4e, 0x58, 0x20, 0x9d, 0x30, 0x00, 0x07, 0xec, 0x05, + 0x06, 0x55, 0xf6, 0x3e, 0x9e, 0x30, 0x40, 0xe1, 0x42, 0x30, 0x80, 0x98, + 0x03, 0xa2, 0x81, 0x03, 0xa4, 0xea, 0x02, 0xe5, 0x48, 0x30, 0x00, 0xa7, + 0xcf, 0x02, 0xa8, 0xb8, 0x02, 0xe9, 0x44, 0x30, 0x00, 0xab, 0x9d, 0x02, + 0xad, 0x86, 0x02, 0xee, 0x93, 0x30, 0x80, 0xec, 0x01, 0xef, 0x4a, 0x30, + 0x00, 0xb0, 0xd1, 0x01, 0xb2, 0xba, 0x01, 0xb3, 0x57, 0xb4, 0x41, 0xf5, + 0x46, 0x30, 0x00, 0x42, 0x67, 0x62, 0x94, 0x30, 0x00, 0xb7, 0x25, 0xb9, + 0x17, 0xba, 0x01, 0xff, 0xe1, 0x56, 0x30, 0x00, 0xe5, 0x5c, 0x30, 0x00, + 0xe9, 0x58, 0x30, 0x00, 0xef, 0x5e, 0x30, 0x00, 0xf5, 0x5a, 0x30, 0x40, + 0xe1, 0x84, 0x30, 0x00, 0xef, 0x88, 0x30, 0x00, 0xf5, 0x86, 0x30, 0x40, + 0xe1, 0x8f, 0x30, 0x00, 0xe5, 0x91, 0x30, 0x00, 0xe9, 0x90, 0x30, 0x00, + 0xef, 0x92, 0x30, 0x40, 0xe1, 0x5f, 0x30, 0x00, 0xe5, 0x66, 0x30, 0x00, + 0xe9, 0x61, 0x30, 0x00, 0xef, 0x68, 0x30, 0x00, 0xf5, 0x64, 0x30, 0x40, + 0xe1, 0x55, 0x30, 0x00, 0xe5, 0x5b, 0x30, 0x00, 0xe9, 0x57, 0x30, 0x00, + 0x05, 0x5e, 0x07, 0x08, 0xef, 0x5d, 0x30, 0x00, 0xf5, 0x59, 0x30, 0x40, + 0xe1, 0x41, 0x30, 0x00, 0xe5, 0x47, 0x30, 0x00, 0xe9, 0x43, 0x30, 0x00, + 0xab, 0x2f, 0xef, 0x49, 0x30, 0x00, 0x42, 0x5c, 0x01, 0x63, 0x30, 0x00, + 0xf5, 0x45, 0x30, 0x00, 0xb7, 0x0f, 0xb9, 0x01, 0xff, 0xe1, 0x83, 0x30, + 0x00, 0xef, 0x87, 0x30, 0x00, 0xf5, 0x85, 0x30, 0x40, 0xe1, 0x8e, 0x30, + 0x00, 0xe5, 0x51, 0xb1, 0x01, 0xe9, 0x50, 0xb1, 0x01, 0xef, 0x52, 0xb1, + 0x41, 0xe1, 0x95, 0x30, 0x00, 0xe5, 0x96, 0x30, 0x00, 0xef, 0x32, 0xb1, + 0x41, 0xe1, 0x89, 0x30, 0x00, 0xe5, 0x8c, 0x30, 0x00, 0xe9, 0x8a, 0x30, + 0x00, 0xef, 0x8d, 0x30, 0x00, 0xf5, 0x8b, 0x30, 0x40, 0xe1, 0x71, 0x30, + 0x00, 0xe5, 0x7a, 0x30, 0x00, 0xe9, 0x74, 0x30, 0x00, 0xef, 0x7d, 0x30, + 0x00, 0xf5, 0x77, 0x30, 0x40, 0xe1, 0x6a, 0x30, 0x00, 0xe5, 0x6d, 0x30, + 0x00, 0xe9, 0x6b, 0x30, 0x00, 0xef, 0x6e, 0x30, 0x00, 0xf5, 0x6c, 0x30, + 0x40, 0xe1, 0x7e, 0x30, 0x00, 0xe5, 0x81, 0x30, 0x00, 0xe9, 0x7f, 0x30, + 0x00, 0xef, 0x82, 0x30, 0x00, 0xf5, 0x80, 0x30, 0x40, 0xe1, 0x4b, 0x30, + 0x00, 0xe5, 0x51, 0x30, 0x00, 0xe9, 0x4d, 0x30, 0x00, 0xef, 0x53, 0x30, + 0x00, 0xf5, 0x4f, 0x30, 0x40, 0xe1, 0x6f, 0x30, 0x00, 0xe5, 0x78, 0x30, + 0x00, 0xe9, 0x72, 0x30, 0x00, 0xef, 0x7b, 0x30, 0x00, 0xf5, 0x75, 0x30, + 0x40, 0xe1, 0x4c, 0x30, 0x00, 0xe5, 0x52, 0x30, 0x00, 0xe9, 0x4e, 0x30, + 0x00, 0xef, 0x54, 0x30, 0x00, 0xf5, 0x50, 0x30, 0x40, 0xe1, 0x60, 0x30, + 0x00, 0xe5, 0x67, 0x30, 0x00, 0xe9, 0x62, 0x30, 0x00, 0xef, 0x69, 0x30, + 0x00, 0xf5, 0x65, 0x30, 0x40, 0xe1, 0x70, 0x30, 0x00, 0xe5, 0x79, 0x30, + 0x00, 0xe9, 0x73, 0x30, 0x00, 0xef, 0x7c, 0x30, 0x00, 0xf5, 0x76, 0x30, + 0x40, 0x07, 0xa4, 0x80, 0x01, 0xff, 0x42, 0x7c, 0x31, 0x1f, 0xb1, 0x01, + 0x42, 0x4d, 0x00, 0x01, 0xb0, 0x41, 0x80, 0x16, 0x8d, 0x01, 0xff, 0x4b, + 0xde, 0x9c, 0x60, 0xf4, 0x01, 0x4b, 0xc1, 0xa2, 0x84, 0xf6, 0xc1, 0x00, + 0x51, 0x65, 0x57, 0x85, 0xf6, 0x41, 0x51, 0xca, 0x58, 0x06, 0xf5, 0x01, + 0x4c, 0xdb, 0x96, 0xa1, 0x26, 0x40, 0xa1, 0x8a, 0x17, 0xa2, 0x8f, 0x0f, + 0x46, 0xe8, 0xda, 0x94, 0xf9, 0x01, 0xac, 0xeb, 0x0e, 0x10, 0x66, 0x65, + 0xf0, 0x03, 0xb2, 0xe3, 0x03, 0x0b, 0x3f, 0xa5, 0x01, 0xff, 0xa1, 0xc9, + 0x03, 0xa2, 0xb4, 0x03, 0x02, 0x13, 0x05, 0x9a, 0x03, 0xa4, 0xe9, 0x02, + 0x4a, 0x01, 0xaa, 0xcf, 0x4d, 0x00, 0xa6, 0xd4, 0x02, 0xa7, 0xa1, 0x02, + 0x50, 0x86, 0x63, 0xc7, 0x4d, 0x00, 0x02, 0x9e, 0x01, 0xfb, 0x01, 0x4a, + 0x17, 0xad, 0xfb, 0x4d, 0x00, 0x02, 0xc3, 0x07, 0xe4, 0x01, 0xaf, 0xca, + 0x01, 0xb0, 0xb5, 0x01, 0x02, 0x88, 0x00, 0x9c, 0x01, 0xb3, 0x7e, 0xb4, + 0x14, 0xb7, 0x06, 0x4e, 0xf3, 0x7e, 0xc3, 0x4d, 0x40, 0x46, 0xf1, 0x88, + 0xc4, 0x4d, 0x00, 0x52, 0x1f, 0x54, 0xd1, 0x4d, 0x40, 0x03, 0xc5, 0x0b, + 0x06, 0x47, 0xfb, 0x11, 0xc9, 0x4d, 0x40, 0xa1, 0x47, 0xa3, 0x33, 0x46, + 0xb4, 0xdb, 0xe4, 0x4d, 0x00, 0x4b, 0x5a, 0x9c, 0xf8, 0x4d, 0x00, 0x4b, + 0xf1, 0x9d, 0xf9, 0x4d, 0x00, 0x56, 0xf5, 0x34, 0xf3, 0x4d, 0x00, 0x4f, + 0x2c, 0x70, 0xf5, 0x4d, 0x00, 0x4f, 0x48, 0x72, 0xc1, 0x4d, 0x00, 0xb7, + 0x01, 0xff, 0x47, 0xd1, 0xce, 0xf7, 0x4d, 0x00, 0x43, 0x5f, 0x09, 0xef, + 0x4d, 0x40, 0x47, 0x3a, 0xcf, 0xf1, 0x4d, 0x00, 0x4c, 0x3b, 0x91, 0xdd, + 0x4d, 0x00, 0x4e, 0x81, 0x7b, 0xc0, 0x4d, 0x40, 0x4c, 0x0f, 0x8d, 0xdc, + 0x4d, 0x00, 0xb2, 0x01, 0xff, 0x42, 0xa3, 0x58, 0xc6, 0x4d, 0x00, 0x4e, + 0xd9, 0x7a, 0xf2, 0x4d, 0x40, 0x05, 0x5e, 0x07, 0x0c, 0x4e, 0x3b, 0x7b, + 0xd6, 0x4d, 0x00, 0x49, 0xa8, 0xbf, 0xcb, 0x4d, 0x40, 0x4d, 0x98, 0x87, + 0xfd, 0x4d, 0x00, 0x46, 0x5e, 0xe0, 0xc8, 0x4d, 0x40, 0xb4, 0x06, 0x48, + 0x50, 0xcc, 0xf0, 0x4d, 0x40, 0x44, 0x88, 0x00, 0xe0, 0x4d, 0x00, 0x43, + 0x5d, 0x01, 0xd7, 0x4d, 0x40, 0x44, 0xcd, 0xa4, 0xca, 0x4d, 0x00, 0x47, + 0x68, 0xd5, 0xe2, 0x4d, 0x00, 0x4d, 0xd4, 0x89, 0xed, 0x4d, 0x40, 0x4a, + 0x67, 0xa8, 0xe6, 0x4d, 0x00, 0x02, 0x6e, 0x02, 0x01, 0xff, 0x47, 0x0d, + 0x17, 0xe5, 0x4d, 0x00, 0x47, 0x86, 0x66, 0xee, 0x4d, 0x40, 0x45, 0x8d, + 0xe5, 0xce, 0x4d, 0x00, 0x4b, 0x8f, 0xa4, 0xda, 0x4d, 0x40, 0x46, 0xbe, + 0xda, 0xe9, 0x4d, 0x00, 0x47, 0x2b, 0xd1, 0xde, 0x4d, 0x00, 0xae, 0x01, + 0xff, 0x48, 0xb0, 0xc5, 0xfc, 0x4d, 0x00, 0x46, 0xa2, 0xde, 0xd8, 0x4d, + 0x40, 0x51, 0x64, 0x58, 0xec, 0x4d, 0x00, 0xb2, 0x01, 0xff, 0x43, 0x0d, + 0x08, 0xd5, 0x4d, 0x00, 0x04, 0x59, 0x55, 0x01, 0xff, 0xb0, 0x06, 0x46, + 0x5e, 0xe0, 0xd9, 0x4d, 0x40, 0xaf, 0x06, 0x4c, 0x99, 0x87, 0xdb, 0x4d, + 0x40, 0x48, 0xbc, 0x52, 0xcd, 0x4d, 0x00, 0x43, 0x15, 0x01, 0xe1, 0x4d, + 0x40, 0x49, 0x4f, 0xb8, 0xcc, 0x4d, 0x00, 0x48, 0x20, 0xc9, 0xd0, 0x4d, + 0x40, 0x55, 0x62, 0x39, 0xe3, 0x4d, 0x00, 0xa5, 0x14, 0xa9, 0x06, 0x47, + 0xf0, 0xd6, 0xdf, 0x4d, 0x40, 0x59, 0x34, 0x24, 0xc2, 0x4d, 0x00, 0x48, + 0x20, 0xcb, 0xfa, 0x4d, 0x40, 0x46, 0xbe, 0xda, 0xe8, 0x4d, 0x00, 0x49, + 0x8b, 0xbb, 0xe7, 0x4d, 0x00, 0x49, 0xda, 0xc0, 0xf4, 0x4d, 0x40, 0x4c, + 0x13, 0x92, 0xeb, 0x4d, 0x00, 0xae, 0x01, 0xff, 0x45, 0x6e, 0xe6, 0xc5, + 0x4d, 0x00, 0x4a, 0xb3, 0xb1, 0xd3, 0x4d, 0x40, 0x50, 0x96, 0x62, 0xff, + 0x4d, 0x00, 0x4d, 0x8c, 0x84, 0xd4, 0x4d, 0x00, 0x4b, 0xda, 0xa1, 0xea, + 0x4d, 0x40, 0x48, 0x60, 0xc4, 0xf6, 0x4d, 0x00, 0x4f, 0x7a, 0x6d, 0xfe, + 0x4d, 0x00, 0x47, 0xd5, 0xd4, 0xd2, 0x4d, 0x40, 0xe2, 0x3f, 0xf3, 0x01, + 0x57, 0xb1, 0x2f, 0xb9, 0x22, 0x40, 0x02, 0x66, 0x2b, 0xdf, 0x0a, 0x02, + 0x08, 0x02, 0xc2, 0x0a, 0xa8, 0x99, 0x09, 0x02, 0x1e, 0x37, 0x84, 0x09, + 0xab, 0xd3, 0x07, 0xad, 0xcd, 0x06, 0xae, 0xa4, 0x05, 0x02, 0x08, 0x32, + 0x93, 0x05, 0xb2, 0x8f, 0x04, 0xb3, 0xef, 0x02, 0xb4, 0xd2, 0x01, 0x02, + 0xbd, 0x39, 0xb9, 0x01, 0xb7, 0x52, 0xb9, 0x01, 0xff, 0x02, 0x66, 0x2b, + 0x31, 0x02, 0x08, 0x32, 0x15, 0x02, 0xbd, 0x39, 0x01, 0xff, 0xd1, 0xe3, + 0xb0, 0x01, 0xd2, 0xe4, 0xb0, 0x01, 0xd3, 0xe5, 0xb0, 0x01, 0xd4, 0xe6, + 0xb0, 0x41, 0xd1, 0xe7, 0xb0, 0x01, 0xd2, 0xe8, 0xb0, 0x01, 0xd3, 0xe9, + 0xb0, 0x01, 0xd4, 0xea, 0xb0, 0x01, 0xd5, 0xeb, 0xb0, 0x01, 0xd6, 0xec, + 0xb0, 0x41, 0xd1, 0xdd, 0xb0, 0x01, 0xd2, 0xde, 0xb0, 0x01, 0xd3, 0xdf, + 0xb0, 0x01, 0xd4, 0xe0, 0xb0, 0x01, 0xd5, 0xe1, 0xb0, 0x01, 0x42, 0xa9, + 0x47, 0xe2, 0xb0, 0x41, 0x02, 0x66, 0x2b, 0x4d, 0x02, 0x08, 0x02, 0x39, + 0x02, 0x1e, 0x37, 0x21, 0x02, 0x08, 0x32, 0x01, 0xff, 0xd1, 0x16, 0xb1, + 0x01, 0xd2, 0x17, 0xb1, 0x01, 0xd3, 0x18, 0xb1, 0x01, 0xd4, 0x19, 0xb1, + 0x01, 0xd5, 0x1a, 0xb1, 0x01, 0xd6, 0x1b, 0xb1, 0x01, 0xd7, 0x1c, 0xb1, + 0x41, 0xd1, 0x0d, 0xb1, 0x01, 0xd2, 0x0e, 0xb1, 0x01, 0xd3, 0x0f, 0xb1, + 0x01, 0xd4, 0x10, 0xb1, 0x01, 0xd5, 0x11, 0xb1, 0x41, 0xd1, 0x12, 0xb1, + 0x01, 0xd2, 0x13, 0xb1, 0x01, 0xd3, 0x14, 0xb1, 0x01, 0xd4, 0x15, 0xb1, + 0x41, 0xd1, 0x08, 0xb1, 0x01, 0xd2, 0x09, 0xb1, 0x01, 0xd3, 0x0a, 0xb1, + 0x01, 0xd4, 0x0b, 0xb1, 0x01, 0xd5, 0x0c, 0xb1, 0x41, 0xd1, 0x0a, 0xb0, + 0x01, 0xd2, 0x0b, 0xb0, 0x01, 0xd3, 0x0c, 0xb0, 0x01, 0xd4, 0x0d, 0xb0, + 0x01, 0xd5, 0x0e, 0xb0, 0x41, 0x02, 0x66, 0x2b, 0x85, 0x01, 0x02, 0x08, + 0x02, 0x5d, 0x02, 0x1e, 0x37, 0x3d, 0x02, 0x08, 0x32, 0x1b, 0x02, 0xbd, + 0x39, 0x01, 0xff, 0xd1, 0x69, 0xb0, 0x01, 0xd2, 0x6a, 0xb0, 0x01, 0xd3, + 0x6b, 0xb0, 0x01, 0xd4, 0x6c, 0xb0, 0x01, 0x42, 0x1e, 0x00, 0x6d, 0xb0, + 0x41, 0xd1, 0x77, 0xb0, 0x01, 0xd2, 0x78, 0xb0, 0x01, 0xd3, 0x79, 0xb0, + 0x01, 0xd4, 0x7a, 0xb0, 0x01, 0xd5, 0x7b, 0xb0, 0x01, 0xd6, 0x7c, 0xb0, + 0x01, 0x42, 0x71, 0x00, 0x7d, 0xb0, 0x41, 0xd1, 0x62, 0xb0, 0x01, 0xd2, + 0x63, 0xb0, 0x01, 0xd3, 0x64, 0xb0, 0x01, 0xd4, 0x65, 0xb0, 0x01, 0xd5, + 0x66, 0xb0, 0x01, 0xd6, 0x67, 0xb0, 0x01, 0xd7, 0x68, 0xb0, 0x41, 0xd1, + 0x6e, 0xb0, 0x01, 0xd2, 0x6f, 0xb0, 0x01, 0xd3, 0x70, 0xb0, 0x01, 0xd4, + 0x71, 0xb0, 0x01, 0xd5, 0x72, 0xb0, 0x01, 0xd6, 0x73, 0xb0, 0x01, 0xd7, + 0x74, 0xb0, 0x01, 0xd8, 0x75, 0xb0, 0x01, 0xd9, 0x76, 0xb0, 0x41, 0xd1, + 0x5e, 0xb0, 0x01, 0xd2, 0x5f, 0xb0, 0x01, 0xd3, 0x60, 0xb0, 0x01, 0xd4, + 0x61, 0xb0, 0x41, 0x02, 0x66, 0x2b, 0x79, 0x02, 0x08, 0x02, 0x61, 0x02, + 0x1e, 0x37, 0x45, 0x02, 0x08, 0x32, 0x25, 0x02, 0xbd, 0x39, 0x01, 0xff, + 0xd1, 0x4a, 0xb0, 0x01, 0xd2, 0x4b, 0xb0, 0x01, 0xd3, 0x4c, 0xb0, 0x01, + 0xd4, 0x4d, 0xb0, 0x01, 0xd5, 0x4e, 0xb0, 0x01, 0xd6, 0x4f, 0xb0, 0x01, + 0xd7, 0x50, 0xb0, 0x01, 0xd8, 0x51, 0xb0, 0x41, 0xd1, 0x57, 0xb0, 0x01, + 0xd2, 0x58, 0xb0, 0x01, 0xd3, 0x59, 0xb0, 0x01, 0xd4, 0x5a, 0xb0, 0x01, + 0xd5, 0x5b, 0xb0, 0x01, 0xd6, 0x5c, 0xb0, 0x01, 0xd7, 0x5d, 0xb0, 0x41, + 0xd1, 0x44, 0xb0, 0x01, 0xd2, 0x45, 0xb0, 0x01, 0xd3, 0x46, 0xb0, 0x01, + 0xd4, 0x47, 0xb0, 0x01, 0xd5, 0x48, 0xb0, 0x01, 0xd6, 0x49, 0xb0, 0x41, + 0xd1, 0x52, 0xb0, 0x01, 0xd2, 0x53, 0xb0, 0x01, 0xd3, 0x54, 0xb0, 0x01, + 0xd4, 0x55, 0xb0, 0x01, 0xd5, 0x56, 0xb0, 0x41, 0xd1, 0x3c, 0xb0, 0x01, + 0xd2, 0x3d, 0xb0, 0x01, 0xd3, 0x3e, 0xb0, 0x01, 0xd4, 0x3f, 0xb0, 0x01, + 0xd5, 0x40, 0xb0, 0x01, 0xd6, 0x41, 0xb0, 0x01, 0xd7, 0x42, 0xb0, 0x01, + 0xd8, 0x43, 0xb0, 0x41, 0x02, 0x66, 0x2b, 0x6d, 0x02, 0x08, 0x02, 0x59, + 0x02, 0x1e, 0x37, 0x39, 0x02, 0x08, 0x32, 0x1d, 0x02, 0xbd, 0x39, 0x01, + 0xff, 0xd1, 0xf8, 0xb0, 0x01, 0xd2, 0xf9, 0xb0, 0x01, 0xd3, 0xfa, 0xb0, + 0x01, 0xd4, 0xfb, 0xb0, 0x01, 0xd5, 0xfc, 0xb0, 0x01, 0xd6, 0xfd, 0xb0, + 0x41, 0xd1, 0x02, 0xb1, 0x01, 0xd2, 0x03, 0xb1, 0x01, 0xd3, 0x04, 0xb1, + 0x01, 0xd4, 0x05, 0xb1, 0x01, 0xd5, 0x06, 0xb1, 0x01, 0xd6, 0x07, 0xb1, + 0x41, 0xd1, 0xf1, 0xb0, 0x01, 0xd2, 0xf2, 0xb0, 0x01, 0xd3, 0xf3, 0xb0, + 0x01, 0xd4, 0xf4, 0xb0, 0x01, 0xd5, 0xf5, 0xb0, 0x01, 0xd6, 0xf6, 0xb0, + 0x01, 0xd7, 0xf7, 0xb0, 0x41, 0xd1, 0xfe, 0xb0, 0x01, 0xd2, 0xff, 0xb0, + 0x01, 0xd3, 0x00, 0xb1, 0x01, 0xd4, 0x01, 0xb1, 0x41, 0xd1, 0xed, 0xb0, + 0x01, 0xd2, 0xee, 0xb0, 0x01, 0xd3, 0xef, 0xb0, 0x01, 0xd4, 0xf0, 0xb0, + 0x41, 0xd1, 0x14, 0xb0, 0x01, 0xd2, 0x15, 0xb0, 0x01, 0xd3, 0x16, 0xb0, + 0x41, 0x07, 0xce, 0xcd, 0x99, 0x01, 0x02, 0x66, 0x2b, 0x71, 0x02, 0x08, + 0x02, 0x4f, 0x02, 0x1e, 0x37, 0x29, 0x02, 0x08, 0x32, 0x11, 0x02, 0xbd, + 0x39, 0x01, 0xff, 0xd1, 0x8f, 0xb0, 0x01, 0xd2, 0x90, 0xb0, 0x01, 0xd3, + 0x91, 0xb0, 0x41, 0xd1, 0x99, 0xb0, 0x01, 0xd2, 0x9a, 0xb0, 0x01, 0xd3, + 0x9b, 0xb0, 0x01, 0xd4, 0x9c, 0xb0, 0x01, 0xd5, 0x9d, 0xb0, 0x41, 0xd1, + 0x87, 0xb0, 0x01, 0xd2, 0x88, 0xb0, 0x01, 0xd3, 0x89, 0xb0, 0x01, 0xd4, + 0x8a, 0xb0, 0x01, 0xd5, 0x8b, 0xb0, 0x01, 0xd6, 0x8c, 0xb0, 0x01, 0xd7, + 0x8d, 0xb0, 0x01, 0x42, 0x77, 0x00, 0x8e, 0xb0, 0x41, 0xd1, 0x92, 0xb0, + 0x01, 0xd2, 0x93, 0xb0, 0x01, 0xd3, 0x94, 0xb0, 0x01, 0xd4, 0x95, 0xb0, + 0x01, 0xd5, 0x96, 0xb0, 0x01, 0xd6, 0x97, 0xb0, 0x01, 0x42, 0x4d, 0x03, + 0x98, 0xb0, 0x41, 0xd1, 0x7e, 0xb0, 0x01, 0xd2, 0x7f, 0xb0, 0x01, 0xd3, + 0x80, 0xb0, 0x01, 0xd4, 0x81, 0xb0, 0x01, 0xd5, 0x82, 0xb0, 0x01, 0xd6, + 0x83, 0xb0, 0x01, 0xd7, 0x84, 0xb0, 0x01, 0xd8, 0x85, 0xb0, 0x01, 0xd9, + 0x86, 0xb0, 0x41, 0xd1, 0x1d, 0xb1, 0x01, 0xd2, 0x1e, 0xb1, 0x41, 0x02, + 0x66, 0x2b, 0x63, 0x02, 0x08, 0x02, 0x51, 0x02, 0x1e, 0x37, 0x31, 0x02, + 0x08, 0x32, 0x15, 0x02, 0xbd, 0x39, 0x01, 0xff, 0xd1, 0xd0, 0xb0, 0x01, + 0xd2, 0xd1, 0xb0, 0x01, 0xd3, 0xd2, 0xb0, 0x01, 0xd4, 0xd3, 0xb0, 0x41, + 0xd1, 0xd7, 0xb0, 0x01, 0xd2, 0xd8, 0xb0, 0x01, 0xd3, 0xd9, 0xb0, 0x01, + 0xd4, 0xda, 0xb0, 0x01, 0xd5, 0xdb, 0xb0, 0x01, 0xd6, 0xdc, 0xb0, 0x41, + 0xd1, 0xc9, 0xb0, 0x01, 0xd2, 0xca, 0xb0, 0x01, 0xd3, 0xcb, 0xb0, 0x01, + 0xd4, 0xcc, 0xb0, 0x01, 0xd5, 0xcd, 0xb0, 0x01, 0xd6, 0xce, 0xb0, 0x01, + 0xd7, 0xcf, 0xb0, 0x41, 0xd1, 0xd4, 0xb0, 0x01, 0xd2, 0xd5, 0xb0, 0x01, + 0x42, 0x6c, 0x00, 0xd6, 0xb0, 0x41, 0xd1, 0xc2, 0xb0, 0x01, 0xd2, 0xc3, + 0xb0, 0x01, 0xd3, 0xc4, 0xb0, 0x01, 0xd4, 0xc5, 0xb0, 0x01, 0xd5, 0xc6, + 0xb0, 0x01, 0xd6, 0xc7, 0xb0, 0x01, 0xd7, 0xc8, 0xb0, 0x41, 0x02, 0x66, + 0x2b, 0x77, 0x02, 0x08, 0x02, 0x5b, 0x02, 0x1e, 0x37, 0x37, 0x02, 0x08, + 0x32, 0x21, 0x02, 0xbd, 0x39, 0x01, 0xff, 0xd1, 0x2b, 0xb0, 0x01, 0xd2, + 0x2c, 0xb0, 0x01, 0xd3, 0x2d, 0xb0, 0x01, 0xd4, 0x2e, 0xb0, 0x01, 0xd5, + 0x2f, 0xb0, 0x01, 0xd6, 0x30, 0xb0, 0x01, 0xd7, 0x31, 0xb0, 0x41, 0xd1, + 0x38, 0xb0, 0x01, 0xd2, 0x39, 0xb0, 0x01, 0xd3, 0x3a, 0xb0, 0x01, 0x42, + 0x45, 0x00, 0x3b, 0xb0, 0x41, 0xd1, 0x23, 0xb0, 0x01, 0xd2, 0x24, 0xb0, + 0x01, 0xd3, 0x25, 0xb0, 0x01, 0xd4, 0x26, 0xb0, 0x01, 0xd5, 0x27, 0xb0, + 0x01, 0xd6, 0x28, 0xb0, 0x01, 0xd7, 0x29, 0xb0, 0x01, 0xd8, 0x2a, 0xb0, + 0x41, 0xd1, 0x32, 0xb0, 0x01, 0xd2, 0x33, 0xb0, 0x01, 0xd3, 0x34, 0xb0, + 0x01, 0xd4, 0x35, 0xb0, 0x01, 0xd5, 0x36, 0xb0, 0x01, 0xd6, 0x37, 0xb0, + 0x41, 0xd1, 0x17, 0xb0, 0x81, 0x26, 0xd2, 0x18, 0xb0, 0x01, 0xd3, 0x19, + 0xb0, 0x01, 0xd4, 0x1a, 0xb0, 0x01, 0xd5, 0x1b, 0xb0, 0x01, 0xd6, 0x1c, + 0xb0, 0x01, 0xd7, 0x1d, 0xb0, 0x01, 0xd8, 0x1e, 0xb0, 0x01, 0xd9, 0x1f, + 0xb0, 0x01, 0x42, 0x37, 0x01, 0x22, 0xb0, 0x41, 0xd0, 0x20, 0xb0, 0x01, + 0xd1, 0x21, 0xb0, 0x41, 0xd1, 0x06, 0xb0, 0x01, 0xd2, 0x07, 0xb0, 0x01, + 0xd3, 0x08, 0xb0, 0x01, 0xd4, 0x09, 0xb0, 0x41, 0x02, 0x66, 0x2b, 0x75, + 0x02, 0x08, 0x02, 0x55, 0x02, 0x1e, 0x37, 0x35, 0x02, 0x08, 0x32, 0x11, + 0x02, 0xbd, 0x39, 0x01, 0xff, 0xd1, 0xb0, 0xb0, 0x01, 0xd2, 0xb1, 0xb0, + 0x01, 0xd3, 0xb2, 0xb0, 0x41, 0xd1, 0xba, 0xb0, 0x01, 0xd2, 0xbb, 0xb0, + 0x01, 0xd3, 0xbc, 0xb0, 0x01, 0xd4, 0xbd, 0xb0, 0x01, 0xd5, 0xbe, 0xb0, + 0x01, 0xd6, 0xbf, 0xb0, 0x01, 0xd7, 0xc0, 0xb0, 0x01, 0xd8, 0xc1, 0xb0, + 0x41, 0xd1, 0xa9, 0xb0, 0x01, 0xd2, 0xaa, 0xb0, 0x01, 0xd3, 0xab, 0xb0, + 0x01, 0xd4, 0xac, 0xb0, 0x01, 0xd5, 0xad, 0xb0, 0x01, 0xd6, 0xae, 0xb0, + 0x01, 0xd7, 0xaf, 0xb0, 0x41, 0xd1, 0xb3, 0xb0, 0x01, 0xd2, 0xb4, 0xb0, + 0x01, 0xd3, 0xb5, 0xb0, 0x01, 0xd4, 0xb6, 0xb0, 0x01, 0xd5, 0xb7, 0xb0, + 0x01, 0xd6, 0xb8, 0xb0, 0x01, 0xd7, 0xb9, 0xb0, 0x41, 0xd1, 0x9e, 0xb0, + 0x81, 0x20, 0xd2, 0x9f, 0xb0, 0x01, 0xd3, 0xa0, 0xb0, 0x01, 0xd4, 0xa1, + 0xb0, 0x01, 0xd5, 0xa2, 0xb0, 0x01, 0xd6, 0xa3, 0xb0, 0x01, 0xd7, 0xa4, + 0xb0, 0x01, 0xd8, 0xa5, 0xb0, 0x01, 0xd9, 0xa6, 0xb0, 0x41, 0xd0, 0xa7, + 0xb0, 0x01, 0xd1, 0xa8, 0xb0, 0x41, 0xd1, 0x01, 0xb0, 0x01, 0xd2, 0x0f, + 0xb0, 0x01, 0xd3, 0x10, 0xb0, 0x01, 0xd4, 0x11, 0xb0, 0x01, 0xd5, 0x12, + 0xb0, 0x01, 0xd6, 0x13, 0xb0, 0x41, 0xd1, 0x02, 0xb0, 0x01, 0xd2, 0x03, + 0xb0, 0x01, 0xd3, 0x04, 0xb0, 0x01, 0x42, 0x15, 0x02, 0x05, 0xb0, 0x41, + 0x47, 0xd3, 0xd1, 0x81, 0xf6, 0x01, 0x57, 0x9a, 0x2f, 0xff, 0x2b, 0x00, + 0xad, 0x01, 0xff, 0x47, 0x15, 0x08, 0x88, 0x23, 0x00, 0x53, 0x45, 0x49, + 0xd1, 0x26, 0x40, 0xe5, 0xc0, 0xce, 0x01, 0x04, 0x45, 0xf2, 0x01, 0xff, + 0x07, 0x1b, 0x23, 0x8a, 0x06, 0xac, 0xd0, 0x01, 0x05, 0xb9, 0x00, 0xb9, + 0x01, 0xb0, 0x06, 0x4c, 0x3b, 0x97, 0xef, 0x05, 0x40, 0x05, 0xc9, 0x17, + 0x2d, 0x0b, 0x6e, 0x16, 0x01, 0xff, 0x03, 0xdb, 0x09, 0x18, 0x45, 0x76, + 0xe8, 0xbe, 0x05, 0x00, 0x4b, 0x59, 0xa0, 0xc6, 0x05, 0x00, 0x45, 0xbb, + 0xe9, 0xc0, 0x05, 0x00, 0x49, 0x4e, 0xbf, 0xc3, 0x05, 0x40, 0x43, 0x93, + 0x5a, 0xf3, 0x05, 0x00, 0x46, 0xd4, 0xdf, 0xf4, 0x05, 0x40, 0x4f, 0xe5, + 0x6b, 0xbc, 0x05, 0x00, 0xa8, 0x4f, 0x54, 0xac, 0x43, 0x1e, 0xfb, 0x00, + 0x45, 0x99, 0xe8, 0xbd, 0x05, 0x00, 0x45, 0xe0, 0x8a, 0xb7, 0x05, 0x00, + 0xb1, 0x28, 0x44, 0x39, 0xf2, 0xbf, 0x05, 0x00, 0xb3, 0x06, 0x45, 0x8c, + 0xeb, 0xb5, 0x05, 0x40, 0x44, 0xca, 0xea, 0xb6, 0x05, 0x00, 0xa8, 0x06, + 0x46, 0x12, 0x4e, 0xc2, 0x05, 0x40, 0x43, 0x8f, 0x46, 0xb0, 0x05, 0x00, + 0x46, 0x12, 0x4e, 0xc1, 0x05, 0x40, 0x45, 0x57, 0xdf, 0xb8, 0x05, 0x80, + 0x06, 0x45, 0xb9, 0xeb, 0xbb, 0x05, 0x40, 0x46, 0x3c, 0xd8, 0xc7, 0x05, + 0x40, 0x05, 0x7f, 0xe4, 0x13, 0x44, 0x05, 0xe7, 0xb4, 0x05, 0x00, 0x44, + 0x14, 0xe7, 0xb9, 0x05, 0xc0, 0x00, 0x4e, 0x6f, 0x75, 0xba, 0x05, 0x40, + 0x45, 0xe0, 0x8a, 0xb2, 0x05, 0x00, 0x46, 0x56, 0xdf, 0xb3, 0x05, 0x00, + 0x45, 0xc9, 0xea, 0xb1, 0x05, 0x40, 0x49, 0xb8, 0xbb, 0xc5, 0x05, 0x00, + 0x4d, 0xaa, 0x85, 0xaf, 0x05, 0x00, 0x49, 0x65, 0xc0, 0xc4, 0x05, 0x40, + 0x06, 0xed, 0x05, 0x2c, 0x08, 0x9d, 0x1f, 0x01, 0xff, 0x4a, 0x95, 0xa7, + 0x4f, 0xfb, 0x00, 0x08, 0xe8, 0xcc, 0x01, 0xff, 0x07, 0x3b, 0x01, 0x0c, + 0x47, 0x28, 0xd7, 0xf1, 0x05, 0x00, 0x4d, 0xd8, 0x8a, 0x1f, 0xfb, 0x40, + 0x43, 0x79, 0x0f, 0xf0, 0x05, 0x00, 0x43, 0xa1, 0x52, 0xf2, 0x05, 0x40, + 0xa1, 0xcd, 0x03, 0x43, 0xc0, 0x09, 0xd1, 0x05, 0x80, 0xb4, 0x03, 0x45, + 0x23, 0x4a, 0xd3, 0x05, 0x80, 0xa6, 0x03, 0x06, 0xf5, 0x2c, 0xf5, 0x02, + 0x45, 0xdd, 0xaa, 0xd2, 0x05, 0x80, 0xe7, 0x02, 0x42, 0xb0, 0x01, 0xd4, + 0x05, 0x80, 0xd5, 0x02, 0x43, 0xa7, 0x51, 0xdb, 0x05, 0x80, 0xbc, 0x02, + 0x45, 0x9a, 0xa7, 0xdc, 0x05, 0x80, 0xae, 0x02, 0x43, 0xb4, 0x05, 0xde, + 0x05, 0x80, 0xa0, 0x02, 0x43, 0xdc, 0x22, 0xe0, 0x05, 0x80, 0x92, 0x02, + 0x42, 0x6f, 0x02, 0xe4, 0x05, 0x80, 0xf9, 0x01, 0x43, 0x91, 0xf4, 0xe7, + 0x05, 0x80, 0xeb, 0x01, 0x44, 0x76, 0x66, 0xe8, 0x05, 0x80, 0xdd, 0x01, + 0xb3, 0x9a, 0x01, 0xb4, 0x71, 0x43, 0x79, 0x0f, 0xd5, 0x05, 0x80, 0x59, + 0x05, 0x54, 0xec, 0x25, 0x43, 0xa1, 0x52, 0xd9, 0x05, 0x80, 0x0d, 0x45, + 0x9b, 0x52, 0xd6, 0x05, 0xc0, 0x00, 0x4c, 0x8f, 0x8b, 0x36, 0xfb, 0x40, + 0x06, 0x50, 0x00, 0x01, 0xff, 0x46, 0xe5, 0x6b, 0x39, 0xfb, 0x00, 0x45, + 0x04, 0xe7, 0x1d, 0xfb, 0x40, 0x44, 0x67, 0x00, 0x21, 0xfb, 0x00, 0x45, + 0x23, 0x4a, 0x22, 0xfb, 0x00, 0x49, 0xdf, 0xb8, 0x26, 0xfb, 0x00, 0x42, + 0xb0, 0x01, 0x23, 0xfb, 0x00, 0x43, 0xa7, 0x51, 0x24, 0xfb, 0x00, 0x45, + 0x9a, 0xa7, 0x25, 0xfb, 0x00, 0x44, 0x76, 0x66, 0x27, 0xfb, 0x00, 0x43, + 0x1f, 0x2a, 0x28, 0xfb, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x46, 0xe5, + 0x6b, 0x35, 0xfb, 0x00, 0x45, 0x13, 0xe7, 0x4b, 0xfb, 0x40, 0x42, 0x2f, + 0x08, 0xea, 0x05, 0x80, 0x1a, 0x42, 0xed, 0x05, 0xd8, 0x05, 0x80, 0x0d, + 0x44, 0x83, 0xeb, 0xe6, 0x05, 0xc0, 0x00, 0x4c, 0x8f, 0x8b, 0x46, 0xfb, + 0x40, 0x4c, 0x8f, 0x8b, 0x38, 0xfb, 0x40, 0x4c, 0x8f, 0x8b, 0x4a, 0xfb, + 0x40, 0x45, 0x48, 0xe4, 0xe1, 0x05, 0x80, 0x33, 0x43, 0x7a, 0x16, 0xe9, + 0x05, 0xc0, 0x00, 0x06, 0x50, 0x00, 0x01, 0xff, 0x46, 0xe5, 0x6b, 0x49, + 0xfb, 0x80, 0x0f, 0xb3, 0x01, 0xff, 0x47, 0x11, 0x4e, 0x2a, 0xfb, 0x00, + 0x46, 0x12, 0x4e, 0x2b, 0xfb, 0x40, 0x06, 0xd9, 0x13, 0x01, 0xff, 0x47, + 0x11, 0x4e, 0x2c, 0xfb, 0x00, 0x46, 0x12, 0x4e, 0x2d, 0xfb, 0x40, 0x4c, + 0x8f, 0x8b, 0x41, 0xfb, 0x40, 0x4c, 0x8f, 0x8b, 0x48, 0xfb, 0x40, 0x4c, + 0x8f, 0x8b, 0x47, 0xfb, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x46, 0xe5, + 0x6b, 0x44, 0xfb, 0x00, 0x44, 0x39, 0xf2, 0x4e, 0xfb, 0x40, 0x4c, 0x8f, + 0x8b, 0x40, 0xfb, 0x40, 0x4c, 0x8f, 0x8b, 0x3e, 0xfb, 0x40, 0x4c, 0x8f, + 0x8b, 0x3c, 0xfb, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x46, 0xe5, 0x6b, + 0x3b, 0xfb, 0x00, 0x44, 0x39, 0xf2, 0x4d, 0xfb, 0x40, 0x4b, 0x24, 0x98, + 0x34, 0xfb, 0x00, 0xf4, 0xd7, 0x05, 0x40, 0x4c, 0x8f, 0x8b, 0x32, 0xfb, + 0x40, 0x43, 0xa7, 0x51, 0xda, 0x05, 0x80, 0x1f, 0x43, 0xb4, 0x05, 0xdd, + 0x05, 0x00, 0x43, 0xdc, 0x22, 0xdf, 0x05, 0x00, 0x42, 0x6f, 0x02, 0xe3, + 0x05, 0x80, 0x06, 0x45, 0x82, 0xeb, 0xe5, 0x05, 0x40, 0x4c, 0x8f, 0x8b, + 0x43, 0xfb, 0x40, 0x4c, 0x8f, 0x8b, 0x3a, 0xfb, 0x40, 0x4c, 0x8f, 0x8b, + 0x33, 0xfb, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x46, 0xe5, 0x6b, 0x31, + 0xfb, 0x00, 0x44, 0x39, 0xf2, 0x4c, 0xfb, 0x40, 0xac, 0x06, 0x43, 0x7e, + 0x1a, 0xe2, 0x05, 0x40, 0x42, 0x69, 0x00, 0xd0, 0x05, 0x80, 0x11, 0x0a, + 0xbd, 0xb1, 0x01, 0xff, 0x44, 0x1e, 0x4a, 0x20, 0xfb, 0x00, 0x49, 0xdf, + 0x71, 0x29, 0xfb, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x45, 0xef, 0x6b, + 0x30, 0xfb, 0x00, 0x45, 0xe0, 0x8a, 0x2e, 0xfb, 0x00, 0x46, 0x56, 0xdf, + 0x2f, 0xfb, 0x40, 0x4c, 0x73, 0x8c, 0xa2, 0x05, 0x00, 0xa4, 0xcb, 0x01, + 0x47, 0xf3, 0xd0, 0x91, 0x05, 0x00, 0x03, 0xdb, 0x09, 0xad, 0x01, 0x44, + 0x8d, 0xf0, 0xac, 0x05, 0x00, 0xad, 0x8b, 0x01, 0x43, 0xda, 0x15, 0xab, + 0x05, 0x00, 0x02, 0xbb, 0x09, 0x75, 0x02, 0x43, 0x14, 0x65, 0x45, 0x0e, + 0x50, 0x97, 0x05, 0x00, 0xb3, 0x51, 0xb4, 0x31, 0x02, 0x4d, 0x00, 0x21, + 0xba, 0x01, 0xff, 0xa1, 0x06, 0x44, 0x95, 0xf0, 0xae, 0x05, 0x40, 0x04, + 0x2d, 0xf2, 0x06, 0x43, 0x42, 0x14, 0x98, 0x05, 0x40, 0x45, 0x82, 0xe6, + 0x95, 0x05, 0x00, 0x45, 0x3d, 0xd8, 0x94, 0x05, 0x40, 0x4c, 0x17, 0x94, + 0xaa, 0x05, 0x00, 0x43, 0xd1, 0x05, 0x9a, 0x05, 0x40, 0xa5, 0x06, 0x45, + 0x86, 0xe7, 0x96, 0x05, 0x40, 0x06, 0xbe, 0xdd, 0x06, 0x43, 0xe3, 0x23, + 0x9b, 0x05, 0x40, 0x46, 0xf0, 0xdb, 0xa0, 0x05, 0x00, 0x46, 0x5c, 0xdf, + 0xa9, 0x05, 0x40, 0x44, 0xca, 0xea, 0x92, 0x05, 0x00, 0x49, 0x6f, 0xb9, + 0x93, 0x05, 0x40, 0x43, 0xad, 0xb5, 0xa8, 0x05, 0x00, 0x49, 0xc7, 0xbe, + 0x9f, 0x05, 0x40, 0x44, 0xa1, 0xf2, 0x99, 0x05, 0x00, 0x43, 0x43, 0x1e, + 0xa1, 0x05, 0x40, 0x47, 0xa0, 0xce, 0xa4, 0x05, 0x00, 0x45, 0x19, 0xe6, + 0xa5, 0x05, 0x80, 0x06, 0x44, 0x9e, 0xce, 0xa3, 0x05, 0x40, 0x47, 0x3b, + 0xcd, 0xa6, 0x05, 0x40, 0x43, 0x93, 0x5a, 0x9c, 0x05, 0x80, 0x06, 0x46, + 0xd4, 0xdf, 0x9e, 0x05, 0x40, 0x47, 0x65, 0xcd, 0x9d, 0x05, 0x40, 0x44, + 0xed, 0x4b, 0xa7, 0x05, 0x00, 0x43, 0x38, 0x52, 0xad, 0x05, 0x40, 0xa4, + 0xdb, 0x06, 0xb2, 0xaa, 0x06, 0x03, 0x70, 0x15, 0x01, 0xff, 0xa1, 0xf6, + 0x05, 0xa2, 0xb9, 0x05, 0xa3, 0x83, 0x05, 0xa4, 0xca, 0x04, 0xa5, 0x8a, + 0x04, 0xa6, 0xf1, 0x03, 0x4b, 0x1b, 0x61, 0x1a, 0x27, 0x00, 0xa8, 0xdc, + 0x03, 0x54, 0x1f, 0x16, 0x79, 0xf6, 0x01, 0xac, 0x81, 0x03, 0xad, 0xf2, + 0x02, 0x06, 0xb4, 0x01, 0xc1, 0x02, 0xaf, 0xac, 0x02, 0x49, 0xdf, 0x71, + 0x95, 0x27, 0x00, 0xb2, 0xf1, 0x01, 0xb3, 0x81, 0x01, 0xb4, 0x4d, 0x02, + 0x50, 0x02, 0x32, 0x4c, 0x32, 0x00, 0x5a, 0x27, 0x00, 0xb7, 0x01, 0xff, + 0x5c, 0x8a, 0x17, 0xbd, 0x27, 0x00, 0x05, 0xae, 0x02, 0x06, 0x5b, 0xd6, + 0x1b, 0x94, 0x27, 0x40, 0x46, 0x12, 0x03, 0x87, 0xf7, 0x01, 0x56, 0xc1, + 0x33, 0xdb, 0x26, 0x00, 0x46, 0xd6, 0x05, 0x91, 0xf7, 0xc1, 0x00, 0x63, + 0x6f, 0x0a, 0x05, 0xce, 0x41, 0x69, 0x9a, 0x02, 0xae, 0x27, 0x00, 0x11, + 0x38, 0x0c, 0x01, 0xff, 0x55, 0xd5, 0x01, 0x19, 0xf8, 0x01, 0x5b, 0x27, + 0x1c, 0x1d, 0xf8, 0x41, 0x09, 0x23, 0x0d, 0x17, 0x5f, 0x94, 0x06, 0x9e, + 0x27, 0x00, 0x0e, 0xe6, 0x2b, 0x01, 0xff, 0x4a, 0xf4, 0x2b, 0xd3, 0xf7, + 0x01, 0x4d, 0x28, 0x13, 0xd4, 0xf7, 0x41, 0x57, 0x9d, 0x2e, 0xbb, 0x27, + 0x00, 0x06, 0x2c, 0x0d, 0x01, 0xff, 0x48, 0x3c, 0x0d, 0x3d, 0x27, 0x00, + 0x51, 0x2c, 0x5d, 0x43, 0x27, 0x40, 0xa1, 0x5f, 0x5a, 0x96, 0x1f, 0x71, + 0xf6, 0x01, 0xa9, 0x36, 0x05, 0xa2, 0x20, 0x06, 0x46, 0xdf, 0xb4, 0x48, + 0x27, 0x40, 0x05, 0xad, 0x23, 0x11, 0x0e, 0x83, 0x56, 0x01, 0xff, 0x43, + 0x7a, 0xd0, 0x65, 0xf6, 0x01, 0x49, 0x10, 0xc1, 0x5d, 0xf6, 0x41, 0x45, + 0xce, 0x00, 0x98, 0x27, 0x00, 0x09, 0x9c, 0x01, 0x01, 0xff, 0x43, 0x7a, + 0xd0, 0x67, 0xf6, 0x01, 0x49, 0x10, 0xc1, 0x5f, 0xf6, 0x41, 0x05, 0x32, + 0x06, 0x11, 0x02, 0xd8, 0x04, 0x01, 0xff, 0x52, 0xec, 0x2b, 0xcc, 0xf7, + 0x01, 0x4f, 0xd5, 0x1c, 0xb8, 0xf7, 0x41, 0x5d, 0x13, 0x05, 0x5c, 0x27, + 0x00, 0x64, 0x27, 0x0a, 0x5b, 0x27, 0x40, 0x45, 0x14, 0x19, 0xac, 0xf7, + 0x01, 0x5d, 0x16, 0x16, 0x7b, 0xf6, 0x41, 0x04, 0xc9, 0x00, 0x06, 0x5c, + 0xda, 0x18, 0x9c, 0x27, 0x40, 0x10, 0x8c, 0x0b, 0x18, 0x4b, 0xb8, 0x02, + 0x99, 0x27, 0xc0, 0x00, 0x06, 0x50, 0x00, 0x01, 0xff, 0x55, 0xd5, 0x01, + 0x1a, 0xf8, 0x01, 0x5b, 0x27, 0x1c, 0x1e, 0xf8, 0x41, 0x50, 0x63, 0x09, + 0x71, 0x27, 0x00, 0x57, 0x19, 0x05, 0x6f, 0x27, 0x40, 0x50, 0xb6, 0x65, + 0x1c, 0x27, 0x00, 0x52, 0x4d, 0x56, 0x2e, 0x27, 0x00, 0x54, 0x90, 0x46, + 0x56, 0x2b, 0x40, 0x05, 0xad, 0x23, 0x11, 0x0e, 0x83, 0x56, 0x01, 0xff, + 0x43, 0x7a, 0xd0, 0x64, 0xf6, 0x01, 0x49, 0x10, 0xc1, 0x5c, 0xf6, 0x41, + 0x45, 0xce, 0x00, 0x9a, 0x27, 0x00, 0x09, 0x9c, 0x01, 0x01, 0xff, 0x43, + 0x7a, 0xd0, 0x66, 0xf6, 0x01, 0x49, 0x10, 0xc1, 0x5e, 0xf6, 0x41, 0x49, + 0x68, 0x98, 0x96, 0x27, 0x00, 0x4f, 0x46, 0x74, 0x16, 0x27, 0x40, 0xa1, + 0x44, 0x03, 0xc4, 0x00, 0x1f, 0x58, 0x16, 0x29, 0x73, 0xf6, 0x01, 0x02, + 0xd1, 0x00, 0x01, 0xff, 0x80, 0x06, 0x68, 0x9b, 0x02, 0xad, 0x27, 0x40, + 0x64, 0x0c, 0x05, 0x60, 0x27, 0x00, 0x64, 0xdf, 0x09, 0x5f, 0x27, 0x40, + 0x10, 0x8c, 0x0b, 0x11, 0x11, 0x38, 0x0c, 0x01, 0xff, 0x55, 0xd5, 0x01, + 0x18, 0xf8, 0x01, 0x5b, 0x27, 0x1c, 0x1c, 0xf8, 0x41, 0x50, 0x63, 0x09, + 0x70, 0x27, 0x00, 0x57, 0x19, 0x05, 0x6e, 0x27, 0x40, 0x4a, 0x2d, 0xb0, + 0x55, 0x2b, 0x00, 0x49, 0x4b, 0x9e, 0x47, 0xf5, 0x41, 0x5e, 0xdb, 0x12, + 0x63, 0x27, 0x00, 0x4e, 0x20, 0x6e, 0x97, 0xfb, 0x41, 0x04, 0xd2, 0x05, + 0x06, 0x5b, 0xc9, 0x1c, 0x24, 0x27, 0x40, 0x52, 0xec, 0x2b, 0xca, 0xf7, + 0x01, 0x4f, 0xd5, 0x1c, 0xb2, 0xf7, 0x41, 0x05, 0xc9, 0x00, 0x17, 0x4a, + 0x49, 0x13, 0xf0, 0xf7, 0x01, 0x10, 0xae, 0x00, 0x01, 0xff, 0x48, 0x28, + 0x05, 0x62, 0x27, 0x00, 0x46, 0x16, 0x08, 0x57, 0x27, 0x40, 0x08, 0x33, + 0x08, 0x0c, 0x4f, 0xd5, 0x1c, 0xbe, 0xf7, 0x01, 0x62, 0x22, 0x0d, 0x4b, + 0x27, 0x40, 0x4a, 0xf4, 0x2b, 0xcf, 0xf7, 0x01, 0x4d, 0x28, 0x13, 0xd1, + 0xf7, 0x01, 0x56, 0xad, 0x36, 0x38, 0x27, 0x40, 0x66, 0x8d, 0x06, 0xa0, + 0x27, 0x00, 0x4c, 0xc3, 0x32, 0x97, 0x27, 0x00, 0xaf, 0x01, 0xff, 0x49, + 0x2c, 0x0e, 0xb2, 0xf4, 0x01, 0x05, 0x3d, 0x01, 0x11, 0x13, 0x36, 0x0c, + 0x01, 0xff, 0x55, 0xd5, 0x01, 0x1b, 0xf8, 0x01, 0x5b, 0x27, 0x1c, 0x1f, + 0xf8, 0x41, 0x5d, 0x13, 0x05, 0x5e, 0x27, 0x00, 0x64, 0x27, 0x0a, 0x5d, + 0x27, 0x40, 0x02, 0xb0, 0x01, 0x23, 0x45, 0x13, 0x03, 0x58, 0x2b, 0x80, + 0x06, 0x65, 0x2c, 0x08, 0xa8, 0x27, 0x40, 0x06, 0x50, 0x00, 0x06, 0x49, + 0x9b, 0xb7, 0x59, 0x2b, 0x40, 0x4d, 0x73, 0x81, 0x57, 0x2b, 0x00, 0x59, + 0x5a, 0x26, 0xe3, 0x26, 0x40, 0x47, 0xff, 0x07, 0x14, 0x27, 0x00, 0x4e, + 0x9f, 0x7e, 0x46, 0x27, 0x40, 0x47, 0xae, 0xce, 0x18, 0x27, 0x00, 0x04, + 0x0d, 0x03, 0x01, 0xff, 0x80, 0x17, 0x0b, 0x0b, 0x1a, 0x01, 0xff, 0x50, + 0xa7, 0x23, 0xb9, 0x27, 0x00, 0x50, 0xb3, 0x02, 0xb8, 0x27, 0x00, 0x50, + 0x7c, 0x40, 0xb7, 0x27, 0x40, 0x07, 0x68, 0x41, 0x06, 0x45, 0xac, 0x21, + 0x64, 0x27, 0x40, 0x5e, 0xbd, 0x12, 0xa5, 0x27, 0x00, 0x5c, 0x9e, 0x19, + 0xa6, 0x27, 0x40, 0x51, 0x13, 0x3e, 0x74, 0xf6, 0x01, 0x11, 0x30, 0x50, + 0x06, 0x47, 0x3d, 0x0d, 0x31, 0x27, 0x40, 0x43, 0x0e, 0x0b, 0x9c, 0xf8, + 0x81, 0x06, 0x4a, 0x53, 0xb2, 0x9d, 0xf8, 0x41, 0x80, 0x01, 0xff, 0x44, + 0x22, 0x00, 0x9e, 0xf8, 0x01, 0x45, 0xee, 0x74, 0x9f, 0xf8, 0x41, 0x4f, + 0x32, 0x6a, 0x49, 0xf6, 0x01, 0x02, 0xc6, 0x00, 0x01, 0xff, 0x4a, 0x5f, + 0x97, 0x9f, 0xf4, 0x01, 0x45, 0x7b, 0x0e, 0xf6, 0xfa, 0x01, 0x05, 0x51, + 0x00, 0x01, 0xff, 0x45, 0xce, 0x00, 0x98, 0xf4, 0x01, 0x46, 0xff, 0x85, + 0x9d, 0xf4, 0x01, 0x4f, 0xce, 0x73, 0x94, 0xf3, 0x41, 0x45, 0x1a, 0x3d, + 0xa7, 0xf3, 0x01, 0x45, 0x9c, 0xba, 0xa6, 0xfa, 0xc1, 0x00, 0x51, 0xff, + 0x56, 0xfc, 0x26, 0x40, 0x43, 0xf6, 0x27, 0xe1, 0x2b, 0x00, 0x02, 0x46, + 0x00, 0x9a, 0x24, 0x08, 0xc8, 0xc7, 0xe1, 0x1e, 0xad, 0xad, 0x1e, 0xae, + 0xd8, 0x01, 0x5b, 0x1a, 0x1d, 0x4b, 0xf6, 0x01, 0xb2, 0xc5, 0x01, 0xb4, + 0x06, 0x44, 0x7d, 0xa9, 0x7b, 0xf7, 0x41, 0x4b, 0x1e, 0x9a, 0x23, 0xf4, + 0x01, 0x04, 0x3e, 0xd2, 0x01, 0xff, 0x07, 0xec, 0x05, 0x27, 0x07, 0xff, + 0x39, 0x01, 0xff, 0x44, 0x80, 0x11, 0xfc, 0x08, 0x01, 0x43, 0x0e, 0x0b, + 0xfb, 0x08, 0x81, 0x0f, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0xfd, 0x08, + 0x01, 0x45, 0x7f, 0x2c, 0xfe, 0x08, 0x41, 0x48, 0x70, 0x11, 0xff, 0x08, + 0x41, 0xa1, 0x79, 0x44, 0x41, 0xef, 0xe1, 0x08, 0x01, 0x4b, 0xb8, 0x9a, + 0xe3, 0x08, 0x01, 0x45, 0xdd, 0xaa, 0xe2, 0x08, 0x01, 0x42, 0xb0, 0x01, + 0xe4, 0x08, 0x81, 0x5a, 0x44, 0xcd, 0xf0, 0xea, 0x08, 0x01, 0x46, 0x94, + 0xdd, 0xeb, 0x08, 0x01, 0x43, 0xb4, 0x05, 0xec, 0x08, 0x01, 0x43, 0xdc, + 0x22, 0xed, 0x08, 0x01, 0x42, 0x6f, 0x02, 0xf0, 0x08, 0x01, 0x44, 0x4c, + 0xc8, 0xf2, 0x08, 0x01, 0xb3, 0x20, 0xb4, 0x12, 0x43, 0x8a, 0x8a, 0xe5, + 0x08, 0x01, 0x44, 0xa1, 0x52, 0xe9, 0x08, 0x01, 0x44, 0x59, 0xf3, 0xe6, + 0x08, 0x41, 0x42, 0xb7, 0x2d, 0xf5, 0x08, 0x01, 0x43, 0xda, 0x25, 0xe8, + 0x08, 0x41, 0xa1, 0x06, 0x43, 0x7a, 0x16, 0xf4, 0x08, 0x41, 0x43, 0xad, + 0xea, 0xf1, 0x08, 0x01, 0x44, 0x49, 0xe4, 0xee, 0x08, 0x41, 0x42, 0x53, + 0x00, 0xe7, 0x08, 0x41, 0x44, 0x18, 0x3d, 0xe0, 0x08, 0x01, 0x42, 0x03, + 0x1d, 0xef, 0x08, 0x41, 0x46, 0xd0, 0xda, 0xb4, 0xf5, 0x01, 0xf0, 0x89, + 0xfa, 0x41, 0xa4, 0xab, 0x1c, 0xa7, 0xce, 0x03, 0x0d, 0xfd, 0x83, 0x82, + 0x01, 0x05, 0xe1, 0xeb, 0x01, 0xff, 0x07, 0xec, 0x05, 0x13, 0x4d, 0xb6, + 0x88, 0x34, 0x17, 0x00, 0x0b, 0x40, 0x77, 0x01, 0xff, 0xe9, 0x32, 0x17, + 0x00, 0xf5, 0x33, 0x17, 0x40, 0xe1, 0x20, 0x17, 0x00, 0x42, 0x16, 0x00, + 0x2a, 0x17, 0x00, 0x42, 0xf0, 0x10, 0x27, 0x17, 0x00, 0x42, 0x24, 0x02, + 0x24, 0x17, 0x00, 0x42, 0x22, 0x00, 0x31, 0x17, 0x00, 0xe9, 0x21, 0x17, + 0x00, 0x42, 0x1b, 0x02, 0x23, 0x17, 0x00, 0x42, 0x74, 0x00, 0x2e, 0x17, + 0x00, 0x42, 0x6c, 0x00, 0x2b, 0x17, 0x00, 0xae, 0x28, 0x42, 0xbb, 0x09, + 0x29, 0x17, 0x00, 0x42, 0x71, 0x00, 0x2d, 0x17, 0x00, 0x42, 0x40, 0x06, + 0x30, 0x17, 0x00, 0x42, 0x12, 0x00, 0x26, 0x17, 0x00, 0xf5, 0x22, 0x17, + 0x00, 0x42, 0xa9, 0x01, 0x2f, 0x17, 0x00, 0x42, 0xbc, 0x22, 0x2c, 0x17, + 0x40, 0xe1, 0x28, 0x17, 0x00, 0x42, 0x24, 0x02, 0x25, 0x17, 0x40, 0x06, + 0xef, 0x06, 0x80, 0x02, 0x07, 0xec, 0x05, 0x4a, 0x05, 0xb9, 0x00, 0x3a, + 0x05, 0x5a, 0x03, 0x19, 0x06, 0x3c, 0x39, 0x01, 0xff, 0xe1, 0x1d, 0x0d, + 0x01, 0xe5, 0x20, 0x0d, 0x01, 0xe9, 0x1e, 0x0d, 0x01, 0xef, 0x21, 0x0d, + 0x01, 0xf5, 0x1f, 0x0d, 0x41, 0x48, 0xa0, 0xc6, 0x24, 0x0d, 0x01, 0x02, + 0x12, 0x00, 0x01, 0xff, 0x44, 0xd2, 0x7c, 0x25, 0x0d, 0x01, 0x42, 0x2a, + 0x05, 0x26, 0x0d, 0x01, 0x43, 0x8a, 0x08, 0x27, 0x0d, 0x41, 0x49, 0x24, + 0xbc, 0x23, 0x0d, 0x01, 0x45, 0xb0, 0xea, 0x22, 0x0d, 0x41, 0xe1, 0x00, + 0x0d, 0x01, 0x42, 0x16, 0x00, 0x01, 0x0d, 0x01, 0x42, 0x37, 0x00, 0x06, + 0x0d, 0x01, 0xa4, 0x95, 0x01, 0x42, 0x0c, 0x08, 0x09, 0x0d, 0x01, 0x42, + 0x24, 0x02, 0x12, 0x0d, 0x01, 0x42, 0x22, 0x00, 0x07, 0x0d, 0x01, 0x42, + 0x56, 0x19, 0x05, 0x0d, 0x01, 0xab, 0x60, 0x42, 0x74, 0x00, 0x13, 0x0d, + 0x01, 0x42, 0x6c, 0x00, 0x14, 0x0d, 0x01, 0xae, 0x42, 0x42, 0xbb, 0x09, + 0x02, 0x0d, 0x01, 0xb2, 0x30, 0xb3, 0x24, 0xb4, 0x18, 0x42, 0xf5, 0x0a, + 0x1c, 0x0d, 0x01, 0x42, 0xa9, 0x01, 0x16, 0x0d, 0x01, 0x42, 0xbc, 0x22, + 0x18, 0x0d, 0x01, 0x42, 0x59, 0x00, 0x0e, 0x0d, 0x41, 0xe1, 0x03, 0x0d, + 0x01, 0x42, 0x12, 0x00, 0x04, 0x0d, 0x41, 0xe1, 0x0f, 0x0d, 0x01, 0x42, + 0x22, 0x00, 0x10, 0x0d, 0x41, 0xe1, 0x0c, 0x0d, 0x01, 0x42, 0x71, 0x00, + 0x0d, 0x0d, 0x41, 0xe1, 0x15, 0x0d, 0x01, 0x42, 0x24, 0x02, 0x1a, 0x0d, + 0x01, 0x42, 0xbc, 0x22, 0x1b, 0x0d, 0x41, 0xe1, 0x11, 0x0d, 0x01, 0x42, + 0x22, 0x00, 0x08, 0x0d, 0x01, 0x05, 0x7c, 0xe7, 0x01, 0xff, 0x42, 0xa9, + 0x01, 0x17, 0x0d, 0x01, 0x42, 0xbc, 0x22, 0x19, 0x0d, 0x41, 0xe1, 0x0a, + 0x0d, 0x01, 0x42, 0xf0, 0x10, 0x0b, 0x0d, 0x41, 0x45, 0x12, 0x0b, 0x38, + 0x0d, 0x01, 0xa6, 0x2e, 0x44, 0xcf, 0x2a, 0x39, 0x0d, 0x01, 0x43, 0x0e, + 0x0b, 0x31, 0x0d, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, 0x30, + 0x0d, 0x41, 0x44, 0x25, 0x01, 0x33, 0x0d, 0x01, 0x42, 0x15, 0x02, 0x32, + 0x0d, 0x41, 0x44, 0xc9, 0x1d, 0x37, 0x0d, 0x01, 0x42, 0x01, 0x26, 0x36, + 0x0d, 0x41, 0x43, 0xd2, 0x05, 0x35, 0x0d, 0x01, 0x43, 0xf6, 0x06, 0x34, + 0x0d, 0x41, 0x03, 0x89, 0x55, 0x57, 0x0d, 0xf2, 0x8a, 0x01, 0xff, 0x45, + 0x12, 0x0b, 0x28, 0x30, 0x00, 0xa6, 0x3e, 0x44, 0xcf, 0x2a, 0x29, 0x30, + 0x00, 0x43, 0x0e, 0x0b, 0x21, 0x30, 0x00, 0xb3, 0x24, 0xb4, 0x01, 0xff, + 0x42, 0x92, 0x01, 0x38, 0x30, 0x00, 0xa8, 0x0d, 0xb7, 0x01, 0xff, 0x44, + 0xcb, 0x1d, 0x39, 0x30, 0x00, 0xef, 0x22, 0x30, 0x40, 0x44, 0x7b, 0x11, + 0x3a, 0x30, 0x00, 0x43, 0x26, 0x01, 0x23, 0x30, 0x40, 0x44, 0xc9, 0x1d, + 0x27, 0x30, 0x00, 0x42, 0x01, 0x26, 0x26, 0x30, 0x40, 0x43, 0xd2, 0x05, + 0x25, 0x30, 0x00, 0x43, 0xf6, 0x06, 0x24, 0x30, 0x40, 0x09, 0x38, 0xb7, + 0xf4, 0x10, 0x54, 0xb8, 0x41, 0x2f, 0x30, 0x00, 0x46, 0xa7, 0x82, 0x64, + 0x31, 0x00, 0xaa, 0xef, 0x04, 0x07, 0xec, 0x05, 0x0f, 0xb3, 0x01, 0xff, + 0x53, 0x75, 0x4a, 0x2e, 0x30, 0x00, 0x48, 0x1b, 0x18, 0x00, 0xd8, 0x40, + 0xe1, 0x4f, 0x31, 0x80, 0xc7, 0x04, 0xa3, 0xb8, 0x04, 0xe5, 0x54, 0x31, + 0x80, 0xaa, 0x04, 0x45, 0x71, 0xa5, 0x4e, 0x31, 0x00, 0xe9, 0x63, 0x31, + 0x80, 0x98, 0x04, 0xab, 0xe4, 0x03, 0x45, 0xa8, 0xe8, 0x41, 0x31, 0x80, + 0xc5, 0x03, 0x45, 0x1b, 0xe9, 0x34, 0x31, 0x80, 0x9c, 0x03, 0xef, 0x57, + 0x31, 0x80, 0x92, 0x03, 0xb0, 0xc8, 0x02, 0x45, 0x65, 0xea, 0x39, 0x31, + 0x80, 0xef, 0x01, 0xb3, 0x8f, 0x01, 0xb4, 0x80, 0x01, 0xf5, 0x5c, 0x31, + 0x00, 0xb7, 0x64, 0xb9, 0x01, 0xff, 0xe1, 0x51, 0x31, 0x80, 0x58, 0xe5, + 0x56, 0x31, 0x80, 0x32, 0xe9, 0x62, 0x31, 0x00, 0xef, 0x5b, 0x31, 0x80, + 0x17, 0xf5, 0x60, 0x31, 0xc0, 0x00, 0x8d, 0x01, 0xff, 0xe9, 0x8c, 0x31, + 0x00, 0x42, 0x4d, 0x00, 0x8b, 0x31, 0xc0, 0x00, 0xef, 0x8a, 0x31, 0x40, + 0x8d, 0x01, 0xff, 0xe9, 0x89, 0x31, 0x00, 0x42, 0xbc, 0x22, 0x87, 0x31, + 0xc0, 0x00, 0xe5, 0x88, 0x31, 0x40, 0xef, 0x55, 0x31, 0x80, 0x16, 0x46, + 0xe2, 0xcc, 0x81, 0x31, 0xc0, 0x00, 0x8d, 0x01, 0xff, 0x47, 0x81, 0xd4, + 0x83, 0x31, 0x00, 0x44, 0x65, 0xbf, 0x82, 0x31, 0x40, 0x48, 0x6e, 0xa5, + 0x86, 0x31, 0x40, 0xe5, 0x52, 0x31, 0x40, 0xe1, 0x58, 0x31, 0x80, 0x0d, + 0xe5, 0x5e, 0x31, 0x80, 0x04, 0xe9, 0x5f, 0x31, 0x40, 0xef, 0x5d, 0x31, + 0x40, 0xe5, 0x59, 0x31, 0x40, 0x46, 0x57, 0xd6, 0x4c, 0x31, 0x00, 0x45, + 0xe5, 0xcd, 0x37, 0x31, 0x40, 0x43, 0x23, 0x42, 0x45, 0x31, 0x80, 0x35, + 0x04, 0x2c, 0x2d, 0x01, 0xff, 0x45, 0x42, 0xe5, 0x49, 0x31, 0x00, 0x45, + 0x71, 0xa5, 0x85, 0x31, 0x00, 0x45, 0x1e, 0xcc, 0x80, 0x31, 0x00, 0x46, + 0xdc, 0xa2, 0x32, 0x31, 0x00, 0x45, 0x1b, 0xe9, 0x65, 0x31, 0x00, 0x45, + 0xe2, 0x84, 0x43, 0x31, 0x00, 0x44, 0x65, 0xbf, 0x46, 0x31, 0x00, 0x46, + 0xe4, 0xcd, 0x38, 0x31, 0x40, 0x8d, 0x01, 0xff, 0x45, 0x42, 0xe5, 0x7e, + 0x31, 0x00, 0x46, 0xdc, 0xa2, 0x7a, 0x31, 0x00, 0x45, 0x1b, 0xe9, 0x7b, + 0x31, 0x00, 0x45, 0xe2, 0x84, 0x7d, 0x31, 0x00, 0x46, 0xe4, 0xcd, 0x7c, + 0x31, 0x40, 0x8d, 0x01, 0xff, 0x45, 0x71, 0xa5, 0x40, 0x31, 0x00, 0x46, + 0xdc, 0xa2, 0x3a, 0x31, 0x80, 0x3b, 0x45, 0xa8, 0xe8, 0x3b, 0x31, 0x00, + 0xb0, 0x1a, 0x44, 0x65, 0xbf, 0x3d, 0x31, 0x00, 0xb4, 0x06, 0x4b, 0x6b, + 0xa5, 0x6d, 0x31, 0x40, 0x46, 0x57, 0xd6, 0x3e, 0x31, 0x00, 0x45, 0xe5, + 0xcd, 0x6a, 0x31, 0x40, 0x46, 0x82, 0xd4, 0x6c, 0x31, 0x00, 0x46, 0xd2, + 0xc2, 0x3f, 0x31, 0x00, 0x44, 0xe3, 0x84, 0x3c, 0x31, 0xc0, 0x00, 0x45, + 0xf5, 0xe1, 0x6b, 0x31, 0x40, 0x45, 0xf5, 0xe1, 0x69, 0x31, 0x40, 0x46, + 0x82, 0xd4, 0x7f, 0x31, 0x00, 0x46, 0xd2, 0xc2, 0x4d, 0x31, 0x00, 0x44, + 0xe3, 0x84, 0x42, 0x31, 0xc0, 0x00, 0x8d, 0x01, 0xff, 0x45, 0x42, 0xe5, + 0x76, 0x31, 0x00, 0x46, 0xdc, 0xa2, 0x72, 0x31, 0x00, 0x44, 0x65, 0xbf, + 0x44, 0x31, 0x80, 0x0f, 0xb4, 0x01, 0xff, 0x46, 0x57, 0xd6, 0x77, 0x31, + 0x00, 0x45, 0xe5, 0xcd, 0x73, 0x31, 0x40, 0x8d, 0x01, 0xff, 0x46, 0xdc, + 0xa2, 0x74, 0x31, 0x00, 0x46, 0xe4, 0xcd, 0x75, 0x31, 0x40, 0xe5, 0x5a, + 0x31, 0x40, 0x8d, 0x01, 0xff, 0x45, 0x42, 0xe5, 0x35, 0x31, 0x00, 0x45, + 0x71, 0xa5, 0x36, 0x31, 0x00, 0x47, 0x81, 0xd4, 0x68, 0x31, 0x00, 0x44, + 0x65, 0xbf, 0x67, 0x31, 0x00, 0x46, 0xe4, 0xcd, 0x66, 0x31, 0x40, 0x8d, + 0x01, 0xff, 0xb0, 0x06, 0x44, 0x65, 0xbf, 0x6f, 0x31, 0x40, 0x46, 0x82, + 0xd4, 0x70, 0x31, 0x00, 0x44, 0xe3, 0x84, 0x6e, 0x31, 0x40, 0x07, 0xdb, + 0x84, 0x13, 0x46, 0xca, 0xc2, 0x4b, 0x31, 0x00, 0x45, 0xdd, 0xa2, 0x31, + 0x31, 0xc0, 0x00, 0x45, 0xf5, 0xe1, 0x33, 0x31, 0x40, 0x45, 0xa8, 0xe8, + 0x71, 0x31, 0x00, 0xb0, 0x06, 0x4a, 0x45, 0xb1, 0x79, 0x31, 0x40, 0x46, + 0xd2, 0xc2, 0x84, 0x31, 0x00, 0x44, 0xe3, 0x84, 0x78, 0x31, 0x40, 0x44, + 0x1f, 0xcc, 0x47, 0x31, 0x40, 0xef, 0x53, 0x31, 0x00, 0xf5, 0x61, 0x31, + 0x40, 0x46, 0xea, 0xcf, 0x4a, 0x31, 0x00, 0x44, 0xeb, 0xcf, 0x48, 0x31, + 0x40, 0xe5, 0x50, 0x31, 0x00, 0x44, 0x41, 0xb1, 0x8d, 0x31, 0xc0, 0x00, + 0xe5, 0x8e, 0x31, 0x40, 0x09, 0x3b, 0xbd, 0xfb, 0x03, 0x09, 0x5c, 0xc0, + 0x01, 0xff, 0xe1, 0x61, 0x11, 0x80, 0xbd, 0x03, 0xe5, 0x66, 0x11, 0x80, + 0x80, 0x03, 0x46, 0xa7, 0x82, 0x60, 0x11, 0x00, 0xe9, 0x75, 0x11, 0x80, + 0xaa, 0x02, 0xef, 0x69, 0x11, 0x80, 0xf1, 0x01, 0x4a, 0x3b, 0xb1, 0xa2, + 0x11, 0x00, 0xf5, 0x6e, 0x11, 0x80, 0xbe, 0x01, 0xb7, 0xa5, 0x01, 0xb9, + 0x01, 0xff, 0xe1, 0x63, 0x11, 0x80, 0x88, 0x01, 0xe5, 0x68, 0x11, 0x80, + 0x6d, 0xe9, 0x74, 0x11, 0x80, 0x62, 0xef, 0x6d, 0x11, 0x80, 0x31, 0xf5, + 0x72, 0x11, 0xc0, 0x00, 0x8d, 0x01, 0xff, 0xe1, 0x8e, 0x11, 0x80, 0x20, + 0xe5, 0x90, 0x11, 0x80, 0x17, 0xe9, 0x94, 0x11, 0x00, 0xef, 0xb8, 0xd7, + 0x00, 0xf5, 0x93, 0x11, 0x00, 0x42, 0x4d, 0x00, 0x92, 0x11, 0xc0, 0x00, + 0xef, 0x91, 0x11, 0x40, 0xef, 0x8f, 0x11, 0x40, 0xe5, 0xb7, 0xd7, 0x40, + 0x8d, 0x01, 0xff, 0xe1, 0xb2, 0xd7, 0x80, 0x20, 0x42, 0x40, 0x0b, 0xb4, + 0xd7, 0x00, 0xe9, 0x88, 0x11, 0x00, 0xef, 0x87, 0x11, 0x00, 0xb9, 0x01, + 0xff, 0xe1, 0x84, 0x11, 0x80, 0x06, 0x42, 0x40, 0x0b, 0x86, 0x11, 0x40, + 0xe5, 0x85, 0x11, 0x40, 0xe5, 0xb3, 0xd7, 0x40, 0x42, 0x8f, 0x08, 0x97, + 0x11, 0x40, 0xef, 0x67, 0x11, 0xc0, 0x00, 0x8d, 0x01, 0xff, 0xef, 0x7d, + 0x11, 0x00, 0xf5, 0x7e, 0x11, 0x00, 0x42, 0xbc, 0x22, 0xa5, 0x11, 0x40, + 0x8d, 0x04, 0xe5, 0x64, 0x11, 0x40, 0xef, 0x78, 0x11, 0x00, 0xf5, 0xa4, + 0x11, 0x00, 0x42, 0xa9, 0x47, 0x79, 0x11, 0x40, 0xe1, 0x6a, 0x11, 0x80, + 0x0d, 0xe5, 0x70, 0x11, 0x80, 0x04, 0xe9, 0x71, 0x11, 0x40, 0xef, 0x6f, + 0x11, 0x40, 0xe5, 0x6b, 0x11, 0x40, 0x8d, 0x01, 0xff, 0xe1, 0x89, 0x11, + 0x80, 0x1b, 0x45, 0x0a, 0xe6, 0x8b, 0x11, 0x00, 0x43, 0x55, 0xf4, 0xb6, + 0xd7, 0x00, 0xf5, 0x8d, 0x11, 0x00, 0x42, 0x4d, 0x00, 0x8c, 0x11, 0xc0, + 0x00, 0xef, 0xb5, 0xd7, 0x40, 0xe5, 0x8a, 0x11, 0x40, 0x8d, 0x04, 0xe5, + 0x6c, 0x11, 0x40, 0xe5, 0x80, 0x11, 0x80, 0x24, 0xef, 0x82, 0x11, 0x80, + 0x19, 0xf5, 0x83, 0x11, 0x00, 0xb9, 0x01, 0xff, 0xe1, 0xa6, 0x11, 0x80, + 0x09, 0xe5, 0x81, 0x11, 0xc0, 0x00, 0xef, 0xb0, 0xd7, 0x40, 0xe5, 0xa7, + 0x11, 0x40, 0x42, 0xe8, 0x06, 0xb1, 0xd7, 0x40, 0xef, 0x7f, 0x11, 0x40, + 0x8d, 0x01, 0xff, 0xe1, 0x98, 0x11, 0x80, 0x3c, 0x42, 0x97, 0x02, 0x9c, + 0x11, 0x00, 0xe9, 0xc4, 0xd7, 0x00, 0xef, 0x9a, 0x11, 0x80, 0x27, 0xf5, + 0x9b, 0x11, 0x00, 0xb9, 0x01, 0xff, 0xe1, 0x99, 0x11, 0x80, 0x11, 0xe5, + 0xc0, 0xd7, 0x80, 0x08, 0xef, 0xc2, 0xd7, 0x00, 0xf5, 0xc3, 0xd7, 0x40, + 0xef, 0xbf, 0xd7, 0x40, 0x42, 0x4f, 0x21, 0xbd, 0xd7, 0x00, 0xe5, 0xbe, + 0xd7, 0x40, 0x42, 0xe8, 0x06, 0xc1, 0xd7, 0x40, 0x44, 0x41, 0xb1, 0x9d, + 0x11, 0x40, 0xef, 0x65, 0x11, 0x80, 0x21, 0xf5, 0x73, 0x11, 0xc0, 0x00, + 0x8d, 0x01, 0xff, 0xe1, 0xb9, 0xd7, 0x00, 0xe5, 0xbb, 0xd7, 0x80, 0x08, + 0xef, 0xbc, 0xd7, 0x00, 0xf5, 0x95, 0x11, 0x40, 0xef, 0xba, 0xd7, 0x00, + 0xf5, 0x96, 0x11, 0x40, 0x8d, 0x01, 0xff, 0x42, 0x97, 0x02, 0x7c, 0x11, + 0x00, 0xef, 0x7a, 0x11, 0x00, 0xf5, 0x7b, 0x11, 0x40, 0x8d, 0x23, 0xe5, + 0x62, 0x11, 0x00, 0x44, 0x41, 0xb1, 0x9e, 0x11, 0xc0, 0x00, 0x8d, 0x01, + 0xff, 0xe1, 0xc5, 0xd7, 0x00, 0xe5, 0xc6, 0xd7, 0x80, 0x08, 0xe9, 0xa1, + 0x11, 0x00, 0xf5, 0xa0, 0x11, 0x40, 0xef, 0x9f, 0x11, 0x40, 0x42, 0x97, + 0x02, 0xa3, 0x11, 0x00, 0xef, 0x76, 0x11, 0x00, 0xf5, 0x77, 0x11, 0x40, + 0xa3, 0xd7, 0x07, 0x45, 0x71, 0xa5, 0xc2, 0x11, 0x80, 0xb4, 0x07, 0x45, + 0x1e, 0xcc, 0xbc, 0x11, 0x80, 0x95, 0x07, 0xab, 0xb3, 0x06, 0x45, 0xa8, + 0xe8, 0xb7, 0x11, 0x80, 0xd3, 0x05, 0x45, 0x1b, 0xe9, 0xab, 0x11, 0x80, + 0x8d, 0x05, 0xb0, 0x8e, 0x04, 0x45, 0x65, 0xea, 0xaf, 0x11, 0x80, 0xc0, + 0x02, 0xb3, 0x89, 0x01, 0xb4, 0x44, 0x02, 0x4d, 0x00, 0x01, 0xff, 0x49, + 0x6d, 0xa5, 0xf9, 0x11, 0x00, 0x46, 0xe2, 0xcc, 0xf0, 0x11, 0xc0, 0x00, + 0x8d, 0x01, 0xff, 0x45, 0x71, 0xa5, 0xf6, 0xd7, 0x00, 0xab, 0x1b, 0x45, + 0xa8, 0xe8, 0xf5, 0xd7, 0x00, 0x47, 0x81, 0xd4, 0xf2, 0x11, 0x00, 0xb3, + 0x01, 0xff, 0x43, 0x23, 0x42, 0xf1, 0x11, 0x00, 0x4a, 0xd8, 0xa2, 0xed, + 0x11, 0x40, 0x46, 0xca, 0xc2, 0xef, 0x11, 0x00, 0x45, 0xdd, 0xa2, 0xec, + 0x11, 0x40, 0x46, 0x57, 0xd6, 0xc0, 0x11, 0x00, 0x45, 0xe5, 0xcd, 0xae, + 0x11, 0xc0, 0x00, 0x8d, 0x01, 0xff, 0xa3, 0x25, 0x46, 0xdc, 0xa2, 0xca, + 0x11, 0x00, 0x45, 0xe2, 0x84, 0xcf, 0xd7, 0x00, 0x45, 0x65, 0xea, 0xcb, + 0x11, 0x00, 0x44, 0x65, 0xbf, 0xd0, 0xd7, 0x80, 0x06, 0x47, 0x56, 0xd6, + 0xd4, 0xd7, 0x40, 0x47, 0xc0, 0xcd, 0xd1, 0xd7, 0x40, 0x46, 0xea, 0xcf, + 0xd3, 0xd7, 0x00, 0x44, 0xeb, 0xcf, 0xd2, 0xd7, 0x40, 0x43, 0x23, 0x42, + 0xba, 0x11, 0x80, 0x5f, 0x04, 0x2c, 0x2d, 0x01, 0xff, 0x45, 0x42, 0xe5, + 0xf9, 0xd7, 0x00, 0x45, 0x1e, 0xcc, 0xee, 0x11, 0x00, 0x46, 0xdc, 0xa2, + 0xa9, 0x11, 0x00, 0x45, 0xa8, 0xe8, 0xe0, 0xd7, 0x00, 0x45, 0x1b, 0xe9, + 0xff, 0x11, 0x00, 0x45, 0xe2, 0x84, 0xe6, 0xd7, 0x00, 0x45, 0x65, 0xea, + 0xd0, 0x11, 0x80, 0x29, 0x44, 0x65, 0xbf, 0xbb, 0x11, 0x80, 0x13, 0x46, + 0xe4, 0xcd, 0xcd, 0xd7, 0x80, 0x06, 0x48, 0xe0, 0xcc, 0xee, 0x11, 0x40, + 0x46, 0x6c, 0xd8, 0xce, 0xd7, 0x40, 0x8d, 0x01, 0xff, 0x46, 0xdc, 0xa2, + 0xec, 0xd7, 0x00, 0x46, 0xe4, 0xcd, 0xed, 0xd7, 0x40, 0x48, 0xc8, 0xc2, + 0xd7, 0xd7, 0x40, 0x8d, 0x01, 0xff, 0xa3, 0x3d, 0x45, 0x71, 0xa5, 0xf2, + 0xd7, 0x00, 0xab, 0x29, 0x45, 0xa8, 0xe8, 0xea, 0xd7, 0x00, 0xb0, 0x15, + 0x45, 0x65, 0xea, 0xe9, 0x11, 0x00, 0xb4, 0x01, 0xff, 0x46, 0x57, 0xd6, + 0xf1, 0xd7, 0x00, 0x45, 0xe5, 0xcd, 0xe8, 0x11, 0x40, 0x46, 0x82, 0xd4, + 0xee, 0xd7, 0x00, 0x44, 0xe3, 0x84, 0xea, 0x11, 0x40, 0x4c, 0xdb, 0x84, + 0xeb, 0xd7, 0x00, 0x45, 0xdd, 0xa2, 0xe7, 0x11, 0x40, 0x46, 0xea, 0xcf, + 0xf0, 0xd7, 0x00, 0x44, 0xeb, 0xcf, 0xef, 0xd7, 0x40, 0x8d, 0x01, 0xff, + 0x45, 0x71, 0xa5, 0xb6, 0x11, 0x00, 0xab, 0x98, 0x01, 0x45, 0xa8, 0xe8, + 0xb1, 0x11, 0x80, 0x7c, 0x45, 0x1b, 0xe9, 0xcd, 0x11, 0x00, 0xb0, 0x46, + 0xb3, 0x2d, 0xb4, 0x18, 0x02, 0x4d, 0x00, 0x01, 0xff, 0x49, 0x6d, 0xa5, + 0xd9, 0x11, 0x80, 0x06, 0x46, 0xe2, 0xcc, 0xdb, 0xd7, 0x40, 0x46, 0x5a, + 0xd8, 0xdc, 0xd7, 0x40, 0x46, 0x57, 0xd6, 0xb4, 0x11, 0x00, 0x45, 0xe5, + 0xcd, 0xce, 0x11, 0xc0, 0x00, 0x46, 0x5a, 0xd8, 0xcf, 0x11, 0x40, 0x43, + 0x23, 0x42, 0xb3, 0x11, 0x00, 0x04, 0x2c, 0x2d, 0x01, 0xff, 0x46, 0xdc, + 0xa2, 0xd5, 0xd7, 0x00, 0x44, 0x65, 0xbf, 0xd6, 0x11, 0x40, 0x46, 0x82, + 0xd4, 0xd7, 0x11, 0x00, 0x46, 0xd2, 0xc2, 0xb5, 0x11, 0x00, 0x44, 0xe3, + 0x84, 0xb2, 0x11, 0xc0, 0x00, 0x8d, 0x01, 0xff, 0x45, 0x71, 0xa5, 0xd4, + 0x11, 0x00, 0x47, 0xd1, 0xc2, 0xda, 0xd7, 0x00, 0x44, 0x65, 0xbf, 0xd3, + 0x11, 0x00, 0x46, 0xe4, 0xcd, 0xd9, 0xd7, 0x40, 0x8d, 0x01, 0xff, 0x45, + 0x71, 0xa5, 0xd8, 0xd7, 0x00, 0x46, 0xdc, 0xa2, 0xd1, 0x11, 0x00, 0x44, + 0x65, 0xbf, 0xd2, 0x11, 0x40, 0x4c, 0xdb, 0x84, 0xd5, 0x11, 0x00, 0x46, + 0xca, 0xc2, 0xd8, 0x11, 0x00, 0x45, 0xdd, 0xa2, 0xb0, 0x11, 0xc0, 0x00, + 0x8d, 0x01, 0xff, 0x45, 0x71, 0xa5, 0xd6, 0xd7, 0x00, 0x44, 0x65, 0xbf, + 0xcc, 0x11, 0x40, 0x46, 0x82, 0xd4, 0xeb, 0x11, 0x80, 0x66, 0x46, 0xd2, + 0xc2, 0xc1, 0x11, 0x80, 0x4a, 0x44, 0xe3, 0x84, 0xb8, 0x11, 0xc0, 0x00, + 0x8d, 0x01, 0xff, 0xa3, 0x32, 0x45, 0x71, 0xa5, 0xe5, 0x11, 0x00, 0x45, + 0xa8, 0xe8, 0xe5, 0xd7, 0x00, 0x47, 0xd1, 0xc2, 0xe4, 0x11, 0x00, 0x45, + 0x65, 0xea, 0xe3, 0x11, 0x80, 0x13, 0x44, 0x65, 0xbf, 0xb9, 0x11, 0x80, + 0x06, 0x46, 0xe4, 0xcd, 0xe3, 0xd7, 0x40, 0x47, 0xe3, 0xcd, 0xe7, 0xd7, + 0x40, 0x48, 0xd0, 0xc2, 0xe4, 0xd7, 0x40, 0x46, 0xea, 0xcf, 0xe9, 0xd7, + 0x00, 0x44, 0xeb, 0xcf, 0xe8, 0xd7, 0x40, 0x8d, 0x01, 0xff, 0x45, 0xe2, + 0x84, 0xf3, 0x11, 0x00, 0x44, 0x65, 0xbf, 0xfa, 0xd7, 0x00, 0x47, 0x56, + 0xd6, 0xfb, 0xd7, 0x40, 0x8d, 0x01, 0xff, 0x4d, 0xda, 0x84, 0xf4, 0xd7, + 0x00, 0x45, 0xe2, 0x84, 0xf3, 0xd7, 0x40, 0x8d, 0x01, 0xff, 0xa3, 0x2d, + 0x45, 0x71, 0xa5, 0xad, 0x11, 0x00, 0x46, 0xdc, 0xa2, 0xc5, 0x11, 0x00, + 0x47, 0x81, 0xd4, 0xc8, 0x11, 0x00, 0x45, 0x65, 0xea, 0xcb, 0xd7, 0x00, + 0x44, 0x65, 0xbf, 0xc7, 0x11, 0x00, 0xb4, 0x01, 0xff, 0x46, 0x57, 0xd6, + 0xc9, 0x11, 0x00, 0x45, 0xe5, 0xcd, 0xc6, 0x11, 0x40, 0x46, 0xea, 0xcf, + 0xcc, 0xd7, 0x00, 0x44, 0xeb, 0xcf, 0xac, 0x11, 0x40, 0x8d, 0x01, 0xff, + 0xa3, 0x47, 0x45, 0x71, 0xa5, 0xe1, 0x11, 0x00, 0x46, 0xdc, 0xa2, 0xda, + 0x11, 0x00, 0x45, 0x1b, 0xe9, 0xde, 0xd7, 0x00, 0xb0, 0x20, 0x45, 0x65, + 0xea, 0xdb, 0x11, 0x00, 0xb3, 0x01, 0xff, 0x43, 0x23, 0x42, 0xdd, 0x11, + 0x00, 0x04, 0x2c, 0x2d, 0x01, 0xff, 0x45, 0x1b, 0xe9, 0xdf, 0xd7, 0x00, + 0x44, 0x65, 0xbf, 0xde, 0x11, 0x40, 0x46, 0x82, 0xd4, 0xdf, 0x11, 0x00, + 0x44, 0xe3, 0x84, 0xdc, 0x11, 0xc0, 0x00, 0x45, 0xf5, 0xe1, 0xe1, 0xd7, + 0x40, 0x46, 0xea, 0xcf, 0xe0, 0x11, 0x00, 0x44, 0xeb, 0xcf, 0xe2, 0xd7, + 0x40, 0x07, 0xdb, 0x84, 0x41, 0x46, 0xca, 0xc2, 0xbf, 0x11, 0x00, 0x45, + 0xdd, 0xa2, 0xa8, 0x11, 0xc0, 0x00, 0x8d, 0x01, 0xff, 0x47, 0xe9, 0xcf, + 0xfc, 0x11, 0x00, 0x45, 0x71, 0xa5, 0xfe, 0x11, 0x00, 0x47, 0xc9, 0xc2, + 0xfd, 0x11, 0x00, 0x45, 0x1b, 0xe9, 0xfa, 0x11, 0x00, 0x45, 0xe2, 0x84, + 0xfb, 0x11, 0x00, 0x45, 0x65, 0xea, 0xc3, 0x11, 0x00, 0x44, 0x65, 0xbf, + 0xaa, 0x11, 0xc0, 0x00, 0x47, 0xc0, 0xcd, 0xc4, 0x11, 0x40, 0x45, 0xa8, + 0xe8, 0xe2, 0x11, 0x00, 0xb0, 0x06, 0x45, 0x65, 0xea, 0xdd, 0xd7, 0x40, + 0x46, 0xd2, 0xc2, 0xf4, 0x11, 0x00, 0x44, 0xe3, 0x84, 0xe6, 0x11, 0x40, + 0x8d, 0x01, 0xff, 0xab, 0x06, 0x4b, 0xd7, 0xa2, 0xed, 0x11, 0x40, 0x46, + 0xca, 0xc2, 0xef, 0x11, 0x00, 0x45, 0xdd, 0xa2, 0xec, 0x11, 0x40, 0x8d, + 0x01, 0xff, 0x45, 0xa8, 0xe8, 0xf7, 0x11, 0x00, 0x45, 0x1b, 0xe9, 0xf5, + 0x11, 0x00, 0x45, 0xe2, 0x84, 0xf8, 0x11, 0x00, 0x45, 0x65, 0xea, 0xf6, + 0x11, 0x40, 0x46, 0xea, 0xcf, 0xbe, 0x11, 0x00, 0x44, 0xeb, 0xcf, 0xbd, + 0x11, 0xc0, 0x00, 0x8d, 0x01, 0xff, 0x45, 0xe2, 0x84, 0xf7, 0xd7, 0x00, + 0x4a, 0x45, 0xb1, 0xf8, 0xd7, 0x40, 0xa3, 0x83, 0x06, 0x46, 0xa7, 0x82, + 0x5f, 0x11, 0x00, 0x45, 0x71, 0xa5, 0x12, 0x11, 0x80, 0xef, 0x05, 0x45, + 0x1e, 0xcc, 0x0b, 0x11, 0x80, 0x95, 0x05, 0xab, 0xdb, 0x04, 0x45, 0xa8, + 0xe8, 0x06, 0x11, 0x80, 0xb8, 0x04, 0x45, 0x1b, 0xe9, 0x02, 0x11, 0x80, + 0x89, 0x04, 0xb0, 0xf0, 0x02, 0x45, 0x65, 0xea, 0x05, 0x11, 0x80, 0x8e, + 0x02, 0xb3, 0x47, 0xb4, 0x11, 0x02, 0x4d, 0x00, 0x01, 0xff, 0x49, 0x6d, + 0xa5, 0x59, 0x11, 0x00, 0x46, 0xe2, 0xcc, 0x4c, 0x11, 0x40, 0x46, 0x57, + 0xd6, 0x10, 0x11, 0x00, 0x45, 0xe5, 0xcd, 0x03, 0x11, 0xc0, 0x00, 0x8d, + 0x01, 0xff, 0x45, 0x42, 0xe5, 0x63, 0xa9, 0x00, 0x46, 0xdc, 0xa2, 0x17, + 0x11, 0x00, 0x45, 0xa8, 0xe8, 0x60, 0xa9, 0x00, 0x45, 0xe2, 0x84, 0x61, + 0xa9, 0x00, 0x45, 0x65, 0xea, 0x5e, 0x11, 0x00, 0x44, 0x65, 0xbf, 0x62, + 0xa9, 0x40, 0x43, 0x23, 0x42, 0x09, 0x11, 0x80, 0x57, 0x04, 0x2c, 0x2d, + 0x01, 0xff, 0x45, 0x42, 0xe5, 0x0d, 0x11, 0x80, 0x45, 0x45, 0x71, 0xa5, + 0x58, 0x11, 0x00, 0x45, 0x1e, 0xcc, 0x47, 0x11, 0x00, 0x46, 0xdc, 0xa2, + 0x01, 0x11, 0x00, 0x45, 0x1b, 0xe9, 0x14, 0x11, 0x00, 0x45, 0xe2, 0x84, + 0x08, 0x11, 0x00, 0x45, 0x65, 0xea, 0x19, 0x11, 0x00, 0x44, 0x65, 0xbf, + 0x0a, 0x11, 0x80, 0x14, 0xb4, 0x06, 0x4b, 0x6b, 0xa5, 0x7c, 0xa9, 0x40, + 0x46, 0x57, 0xd6, 0x79, 0xa9, 0x00, 0x45, 0xe5, 0xcd, 0x04, 0x11, 0x40, + 0x46, 0x6c, 0xd8, 0x75, 0xa9, 0x40, 0x46, 0x5a, 0xd8, 0x78, 0xa9, 0x40, + 0x8d, 0x01, 0xff, 0xa3, 0x56, 0x45, 0x71, 0xa5, 0x3b, 0x11, 0x00, 0x45, + 0x1e, 0xcc, 0x35, 0x11, 0x00, 0xab, 0x3c, 0x45, 0xa8, 0xe8, 0x31, 0x11, + 0x00, 0x45, 0x1b, 0xe9, 0x2e, 0x11, 0x00, 0xb0, 0x1b, 0x45, 0x65, 0xea, + 0x30, 0x11, 0x00, 0x49, 0x60, 0xbf, 0x34, 0x11, 0x00, 0xb4, 0x01, 0xff, + 0x46, 0x57, 0xd6, 0x39, 0x11, 0x00, 0x45, 0xe5, 0xcd, 0x2f, 0x11, 0x40, + 0x46, 0xd2, 0xc2, 0x3a, 0x11, 0x00, 0x44, 0xe3, 0x84, 0x32, 0x11, 0xc0, + 0x00, 0x47, 0xc0, 0xcd, 0x33, 0x11, 0x40, 0x46, 0xca, 0xc2, 0x38, 0x11, + 0x00, 0x45, 0xdd, 0xa2, 0x2d, 0x11, 0x40, 0x46, 0xea, 0xcf, 0x37, 0x11, + 0x00, 0x44, 0xeb, 0xcf, 0x36, 0x11, 0x40, 0x8d, 0x01, 0xff, 0x45, 0x42, + 0xe5, 0x6d, 0xa9, 0x00, 0x45, 0x71, 0xa5, 0x1a, 0x11, 0x00, 0xab, 0x37, + 0x45, 0xa8, 0xe8, 0x68, 0xa9, 0x00, 0x45, 0x1b, 0xe9, 0x18, 0x11, 0x00, + 0x45, 0xe2, 0x84, 0x69, 0xa9, 0x00, 0xb3, 0x06, 0x46, 0xe4, 0xcd, 0x66, + 0xa9, 0x40, 0x43, 0x23, 0x42, 0x6c, 0xa9, 0x00, 0x04, 0x2c, 0x2d, 0x01, + 0xff, 0x46, 0xdc, 0xa2, 0x65, 0xa9, 0x00, 0x45, 0xe2, 0x84, 0x6a, 0xa9, + 0x00, 0x46, 0xe4, 0xcd, 0x67, 0xa9, 0x40, 0x4c, 0xdb, 0x84, 0x6b, 0xa9, + 0x00, 0x46, 0xca, 0xc2, 0x6e, 0xa9, 0x00, 0x45, 0xdd, 0xa2, 0x64, 0xa9, + 0x40, 0x46, 0x82, 0xd4, 0x40, 0x11, 0x00, 0x46, 0xd2, 0xc2, 0x11, 0x11, + 0x80, 0x7a, 0x44, 0xe3, 0x84, 0x07, 0x11, 0xc0, 0x00, 0x8d, 0x01, 0xff, + 0xa3, 0x62, 0x45, 0x71, 0xa5, 0x74, 0xa9, 0x00, 0xab, 0x4e, 0x45, 0x1b, + 0xe9, 0x1f, 0x11, 0x00, 0x47, 0xd1, 0xc2, 0x2a, 0x11, 0x00, 0xb3, 0x0f, + 0xb4, 0x01, 0xff, 0x46, 0x57, 0xd6, 0x29, 0x11, 0x00, 0x45, 0xe5, 0xcd, + 0x20, 0x11, 0x40, 0x43, 0x23, 0x42, 0x21, 0x11, 0x80, 0x06, 0x48, 0x61, + 0xbf, 0x25, 0x11, 0x40, 0x8d, 0x01, 0xff, 0x45, 0x42, 0xe5, 0x26, 0x11, + 0x00, 0x46, 0xdc, 0xa2, 0x22, 0x11, 0x00, 0x45, 0xe2, 0x84, 0x24, 0x11, + 0x00, 0xb4, 0x01, 0xff, 0x46, 0x57, 0xd6, 0x72, 0xa9, 0x00, 0x45, 0xe5, + 0xcd, 0x23, 0x11, 0x40, 0x46, 0xca, 0xc2, 0x73, 0xa9, 0x00, 0x45, 0xdd, + 0xa2, 0x1e, 0x11, 0x40, 0x46, 0xea, 0xcf, 0x28, 0x11, 0x00, 0x44, 0xeb, + 0xcf, 0x27, 0x11, 0x40, 0x8d, 0x01, 0xff, 0x45, 0x71, 0xa5, 0x7a, 0xa9, + 0x00, 0x45, 0xe2, 0x84, 0x56, 0x11, 0x40, 0x8d, 0x01, 0xff, 0x45, 0x42, + 0xe5, 0x5c, 0x11, 0x00, 0x45, 0x71, 0xa5, 0x5d, 0x11, 0x00, 0x46, 0xdc, + 0xa2, 0x13, 0x11, 0x00, 0x45, 0xe2, 0x84, 0x16, 0x11, 0x00, 0x44, 0x65, + 0xbf, 0x5b, 0x11, 0x00, 0x46, 0xe4, 0xcd, 0x15, 0x11, 0x40, 0x8d, 0x01, + 0xff, 0x46, 0xdc, 0xa2, 0x6f, 0xa9, 0x00, 0x45, 0xe2, 0x84, 0x1c, 0x11, + 0x00, 0x44, 0x65, 0xbf, 0x71, 0xa9, 0x00, 0x46, 0xe4, 0xcd, 0x70, 0xa9, + 0x40, 0x07, 0xdb, 0x84, 0x13, 0x46, 0xca, 0xc2, 0x0f, 0x11, 0x00, 0x45, + 0xdd, 0xa2, 0x00, 0x11, 0xc0, 0x00, 0x47, 0xe3, 0xcd, 0x5a, 0x11, 0x40, + 0x45, 0xa8, 0xe8, 0x1d, 0x11, 0x00, 0xb0, 0x0c, 0x45, 0x65, 0xea, 0x1b, + 0x11, 0x00, 0x4a, 0x45, 0xb1, 0x2c, 0x11, 0x40, 0x46, 0xd2, 0xc2, 0x57, + 0x11, 0x00, 0x44, 0xe3, 0x84, 0x2b, 0x11, 0x40, 0x8d, 0x01, 0xff, 0xa3, + 0x41, 0x45, 0x71, 0xa5, 0x77, 0xa9, 0x00, 0x46, 0xdc, 0xa2, 0x41, 0x11, + 0x00, 0x45, 0xa8, 0xe8, 0x43, 0x11, 0x00, 0xb0, 0x1b, 0x45, 0x65, 0xea, + 0x76, 0xa9, 0x00, 0x44, 0x65, 0xbf, 0x45, 0x11, 0x00, 0xb4, 0x01, 0xff, + 0x46, 0x57, 0xd6, 0x4a, 0x11, 0x00, 0x45, 0xe5, 0xcd, 0x42, 0x11, 0x40, + 0x46, 0x82, 0xd4, 0x46, 0x11, 0x00, 0x46, 0xd2, 0xc2, 0x4b, 0x11, 0x00, + 0x44, 0xe3, 0x84, 0x44, 0x11, 0x40, 0x46, 0xea, 0xcf, 0x49, 0x11, 0x00, + 0x44, 0xeb, 0xcf, 0x48, 0x11, 0x40, 0x45, 0xf5, 0xe1, 0x7b, 0xa9, 0x40, + 0x0a, 0x0b, 0xaa, 0x54, 0x02, 0x49, 0x00, 0x0d, 0x44, 0xeb, 0xcf, 0x0c, + 0x11, 0xc0, 0x00, 0x46, 0x60, 0xd8, 0x4d, 0x11, 0x40, 0x44, 0xec, 0xcf, + 0x0e, 0x11, 0x80, 0x2d, 0x05, 0x9b, 0xeb, 0x01, 0xff, 0xa3, 0x1a, 0xb3, + 0x01, 0xff, 0x43, 0x23, 0x42, 0x3c, 0x11, 0x00, 0x04, 0x2c, 0x2d, 0x01, + 0xff, 0x45, 0x42, 0xe5, 0x4f, 0x11, 0x00, 0x44, 0x65, 0xbf, 0x3d, 0x11, + 0x40, 0x46, 0xea, 0xcf, 0x54, 0x11, 0x00, 0x44, 0xeb, 0xcf, 0x4e, 0x11, + 0x40, 0x8d, 0x01, 0xff, 0x45, 0x71, 0xa5, 0x53, 0x11, 0x00, 0x47, 0xc9, + 0xc2, 0x52, 0x11, 0x40, 0xa3, 0x1a, 0xb3, 0x01, 0xff, 0x43, 0x23, 0x42, + 0x3e, 0x11, 0x00, 0x04, 0x2c, 0x2d, 0x01, 0xff, 0x45, 0x42, 0xe5, 0x51, + 0x11, 0x00, 0x44, 0x65, 0xbf, 0x3f, 0x11, 0x40, 0x46, 0xea, 0xcf, 0x55, + 0x11, 0x00, 0x44, 0xeb, 0xcf, 0x50, 0x11, 0x40, 0x0c, 0x9b, 0x8b, 0x14, + 0x02, 0x16, 0x00, 0x06, 0x45, 0x89, 0xcd, 0x1d, 0xf9, 0x41, 0xe7, 0x5c, + 0xf4, 0x01, 0x42, 0x60, 0x07, 0x3e, 0xf9, 0x41, 0x5a, 0x14, 0x1f, 0x1e, + 0xf9, 0x01, 0x58, 0xb6, 0x28, 0xf0, 0xfa, 0x41, 0x46, 0x4c, 0xda, 0x54, + 0xf3, 0x01, 0x43, 0xfb, 0x37, 0x28, 0xf5, 0x81, 0x0d, 0xb3, 0x01, 0xff, + 0xe1, 0xac, 0xfa, 0x01, 0x48, 0x70, 0xcb, 0x39, 0xf4, 0x41, 0x05, 0x19, + 0x00, 0x01, 0xff, 0x44, 0x20, 0xdf, 0x92, 0x26, 0x00, 0x46, 0xe0, 0xdf, + 0x2d, 0x26, 0x00, 0x46, 0x5a, 0xe1, 0xe0, 0xf6, 0x41, 0x4c, 0x42, 0x11, + 0xed, 0xff, 0x00, 0x4f, 0x34, 0x0c, 0xec, 0xff, 0x00, 0x54, 0x6c, 0x42, + 0xe8, 0xff, 0x00, 0x07, 0x78, 0xd1, 0xda, 0x02, 0x0c, 0x4c, 0x20, 0xc9, + 0x02, 0x08, 0x78, 0xc7, 0x2c, 0x04, 0xc3, 0x00, 0x1c, 0x05, 0xc8, 0x00, + 0x0c, 0x4d, 0xc1, 0x20, 0xea, 0xff, 0x00, 0x4c, 0x32, 0x11, 0xee, 0xff, + 0x40, 0x4f, 0x33, 0x69, 0x63, 0xff, 0x00, 0x4b, 0xb8, 0x02, 0xeb, 0xff, + 0x40, 0x4f, 0x33, 0x69, 0x62, 0xff, 0x00, 0x4b, 0xb8, 0x02, 0xe9, 0xff, + 0x40, 0x80, 0x06, 0x5e, 0x45, 0x12, 0x70, 0xff, 0x40, 0x07, 0xec, 0x05, + 0x12, 0x4a, 0xe6, 0x45, 0x65, 0xff, 0x00, 0x56, 0x1b, 0x37, 0x9f, 0xff, + 0x00, 0x51, 0x20, 0x37, 0x9e, 0xff, 0x40, 0xe1, 0x71, 0xff, 0x00, 0xe5, + 0x74, 0xff, 0x00, 0xa8, 0xdc, 0x01, 0xe9, 0x72, 0xff, 0x00, 0xab, 0xc1, + 0x01, 0xad, 0xaa, 0x01, 0xee, 0x9d, 0xff, 0x80, 0x90, 0x01, 0xef, 0x75, + 0xff, 0x00, 0xb2, 0x76, 0xb3, 0x33, 0xb4, 0x1d, 0xf5, 0x73, 0xff, 0x00, + 0xb7, 0x0f, 0xb9, 0x01, 0xff, 0xe1, 0x94, 0xff, 0x00, 0xef, 0x96, 0xff, + 0x00, 0xf5, 0x95, 0xff, 0x40, 0xe1, 0x9c, 0xff, 0x00, 0xef, 0x66, 0xff, + 0x40, 0xe1, 0x80, 0xff, 0x00, 0xe5, 0x83, 0xff, 0x00, 0xe9, 0x81, 0xff, + 0x00, 0xef, 0x84, 0xff, 0x00, 0xf5, 0x82, 0xff, 0x40, 0xe1, 0x7b, 0xff, + 0x00, 0xe5, 0x7e, 0xff, 0x00, 0xe9, 0x7c, 0xff, 0x00, 0x05, 0x5e, 0x07, + 0x08, 0xef, 0x7f, 0xff, 0x00, 0xf5, 0x7d, 0xff, 0x40, 0xe1, 0x67, 0xff, + 0x00, 0xe5, 0x6a, 0xff, 0x00, 0xe9, 0x68, 0xff, 0x00, 0xef, 0x6b, 0xff, + 0x00, 0x42, 0x5c, 0x01, 0x6f, 0xff, 0x00, 0xf5, 0x69, 0xff, 0x00, 0xb9, + 0x01, 0xff, 0xe1, 0x6c, 0xff, 0x00, 0xef, 0x6e, 0xff, 0x00, 0xf5, 0x6d, + 0xff, 0x40, 0xe1, 0x97, 0xff, 0x00, 0xe5, 0x9a, 0xff, 0x00, 0xe9, 0x98, + 0xff, 0x00, 0xef, 0x9b, 0xff, 0x00, 0xf5, 0x99, 0xff, 0x40, 0xe1, 0x85, + 0xff, 0x00, 0xe5, 0x88, 0xff, 0x00, 0xe9, 0x86, 0xff, 0x00, 0xef, 0x89, + 0xff, 0x00, 0xf5, 0x87, 0xff, 0x40, 0xe1, 0x8f, 0xff, 0x00, 0xe5, 0x92, + 0xff, 0x00, 0xe9, 0x90, 0xff, 0x00, 0xef, 0x93, 0xff, 0x00, 0xf5, 0x91, + 0xff, 0x40, 0xe1, 0x76, 0xff, 0x00, 0xe5, 0x79, 0xff, 0x00, 0xe9, 0x77, + 0xff, 0x00, 0xef, 0x7a, 0xff, 0x00, 0xf5, 0x78, 0xff, 0x40, 0xe1, 0x8a, + 0xff, 0x00, 0xe5, 0x8d, 0xff, 0x00, 0xe9, 0x8b, 0xff, 0x00, 0xef, 0x8e, + 0xff, 0x00, 0xf5, 0x8c, 0xff, 0x40, 0x45, 0x13, 0x05, 0x64, 0xff, 0x00, + 0x49, 0x81, 0x16, 0x61, 0xff, 0x40, 0x46, 0xa7, 0x82, 0xa0, 0xff, 0x00, + 0x07, 0xec, 0x05, 0x01, 0xff, 0xe1, 0xc2, 0xff, 0x80, 0xae, 0x02, 0xa3, + 0x9f, 0x02, 0xe5, 0xc7, 0xff, 0x80, 0x91, 0x02, 0x45, 0x71, 0xa5, 0xbe, + 0xff, 0x00, 0xe9, 0xdc, 0xff, 0x80, 0xff, 0x01, 0xab, 0xe9, 0x01, 0x45, + 0xa8, 0xe8, 0xb1, 0xff, 0x00, 0x45, 0x1b, 0xe9, 0xa4, 0xff, 0x80, 0xcc, + 0x01, 0xef, 0xcc, 0xff, 0x80, 0xc2, 0x01, 0xb0, 0xac, 0x01, 0x45, 0x65, + 0xea, 0xa9, 0xff, 0x80, 0x76, 0xb3, 0x4b, 0xb4, 0x3d, 0xf5, 0xd3, 0xff, + 0x00, 0xb7, 0x21, 0xb9, 0x01, 0xff, 0xe1, 0xc4, 0xff, 0x80, 0x15, 0xe5, + 0xcb, 0xff, 0x80, 0x0c, 0xe9, 0xdb, 0xff, 0x00, 0xef, 0xd2, 0xff, 0x00, + 0xf5, 0xd7, 0xff, 0x40, 0xef, 0xca, 0xff, 0x40, 0xe5, 0xc5, 0xff, 0x40, + 0xe1, 0xcd, 0xff, 0x80, 0x0d, 0xe5, 0xd5, 0xff, 0x80, 0x04, 0xe9, 0xd6, + 0xff, 0x40, 0xef, 0xd4, 0xff, 0x40, 0xe5, 0xce, 0xff, 0x40, 0x46, 0x57, + 0xd6, 0xbc, 0xff, 0x00, 0x45, 0xe5, 0xcd, 0xa7, 0xff, 0x40, 0x43, 0x23, + 0x42, 0xb5, 0xff, 0x00, 0x04, 0x2c, 0x2d, 0x01, 0xff, 0x45, 0x42, 0xe5, + 0xb9, 0xff, 0x00, 0x46, 0xdc, 0xa2, 0xa2, 0xff, 0x00, 0x45, 0xe2, 0x84, + 0xb3, 0xff, 0x00, 0x44, 0x65, 0xbf, 0xb6, 0xff, 0x00, 0x46, 0xe4, 0xcd, + 0xa8, 0xff, 0x40, 0x8d, 0x01, 0xff, 0x45, 0x71, 0xa5, 0xb0, 0xff, 0x00, + 0x46, 0xdc, 0xa2, 0xaa, 0xff, 0x00, 0x45, 0xa8, 0xe8, 0xab, 0xff, 0x00, + 0xb0, 0x0c, 0x44, 0x65, 0xbf, 0xad, 0xff, 0x00, 0x47, 0x56, 0xd6, 0xae, + 0xff, 0x40, 0x46, 0xd2, 0xc2, 0xaf, 0xff, 0x00, 0x44, 0xe3, 0x84, 0xac, + 0xff, 0x40, 0x46, 0xd2, 0xc2, 0xbd, 0xff, 0x00, 0x44, 0xe3, 0x84, 0xb2, + 0xff, 0xc0, 0x00, 0x45, 0xf5, 0xe1, 0xb4, 0xff, 0x40, 0xe5, 0xcf, 0xff, + 0x40, 0x8d, 0x01, 0xff, 0x45, 0x42, 0xe5, 0xa5, 0xff, 0x00, 0x45, 0x71, + 0xa5, 0xa6, 0xff, 0x40, 0x46, 0xca, 0xc2, 0xbb, 0xff, 0x00, 0x45, 0xdd, + 0xa2, 0xa1, 0xff, 0xc0, 0x00, 0x45, 0xf5, 0xe1, 0xa3, 0xff, 0x40, 0x44, + 0x1f, 0xcc, 0xb7, 0xff, 0x40, 0xef, 0xc6, 0xff, 0x00, 0xf5, 0xda, 0xff, + 0x40, 0x46, 0xea, 0xcf, 0xba, 0xff, 0x00, 0x44, 0xeb, 0xcf, 0xb8, 0xff, + 0x40, 0xe5, 0xc3, 0xff, 0x40, 0x80, 0x0c, 0x43, 0xcb, 0x27, 0x87, 0xf4, + 0x01, 0x4a, 0xd9, 0xb3, 0xc8, 0xfa, 0x41, 0x44, 0x20, 0xdf, 0xae, 0xfa, + 0x01, 0x45, 0xd0, 0x4c, 0x0a, 0x20, 0x40, 0xa1, 0xcc, 0x43, 0xa5, 0xfa, + 0x38, 0x44, 0xc0, 0x7c, 0x7b, 0xf4, 0x01, 0xa9, 0xd1, 0x38, 0xac, 0x9b, + 0x33, 0xaf, 0xb6, 0x31, 0xb2, 0xd7, 0x0e, 0xb5, 0x01, 0xff, 0x02, 0x17, + 0x00, 0xc3, 0x0e, 0xa9, 0xb4, 0x0e, 0x07, 0x27, 0xd2, 0xf9, 0x09, 0x0c, + 0xaf, 0x92, 0xef, 0x06, 0xb2, 0x01, 0xff, 0x06, 0x12, 0xde, 0xf4, 0x02, + 0x0a, 0xad, 0xb2, 0x01, 0xff, 0x16, 0x3d, 0x33, 0xd2, 0x02, 0x06, 0xef, + 0x06, 0x8b, 0x02, 0x07, 0xec, 0x05, 0x52, 0x05, 0x5a, 0x03, 0x42, 0x06, + 0x3c, 0x39, 0x01, 0xff, 0x4b, 0x42, 0x39, 0x29, 0x61, 0x01, 0x05, 0x5a, + 0x03, 0x01, 0xff, 0xa1, 0x24, 0xe5, 0x23, 0x61, 0x81, 0x1b, 0xe9, 0x1f, + 0x61, 0x81, 0x12, 0xef, 0x26, 0x61, 0x81, 0x09, 0xf5, 0x21, 0x61, 0xc1, + 0x00, 0xf5, 0x22, 0x61, 0x41, 0xef, 0x27, 0x61, 0x41, 0xe9, 0x20, 0x61, + 0x41, 0xe5, 0x24, 0x61, 0x41, 0xe1, 0x1e, 0x61, 0x01, 0xe9, 0x25, 0x61, + 0x01, 0xf5, 0x28, 0x61, 0x41, 0x48, 0x3c, 0x16, 0x2d, 0x61, 0x01, 0x48, + 0x80, 0xcb, 0x2f, 0x61, 0x41, 0xe1, 0x00, 0x61, 0x01, 0xa2, 0xa4, 0x01, + 0xa3, 0x97, 0x01, 0xa4, 0x7f, 0xa7, 0x73, 0x42, 0x22, 0x00, 0x0a, 0x61, + 0x01, 0xaa, 0x61, 0xab, 0x55, 0x42, 0x74, 0x00, 0x1c, 0x61, 0x01, 0x42, + 0x6c, 0x00, 0x19, 0x61, 0x01, 0xae, 0x3d, 0xb0, 0x31, 0x42, 0x71, 0x00, + 0x1b, 0x61, 0x01, 0x42, 0x40, 0x06, 0x1d, 0x61, 0x01, 0xb4, 0x0c, 0x42, + 0xf5, 0x0a, 0x0f, 0x61, 0x01, 0x42, 0xbc, 0x22, 0x1a, 0x61, 0x41, 0xe1, + 0x10, 0x61, 0x01, 0x42, 0x22, 0x00, 0x11, 0x61, 0x01, 0xb4, 0x01, 0xff, + 0xe1, 0x0b, 0x61, 0x01, 0x42, 0x22, 0x00, 0x0c, 0x61, 0x41, 0xe1, 0x15, + 0x61, 0x01, 0x42, 0x22, 0x00, 0x16, 0x61, 0x41, 0xe1, 0x14, 0x61, 0x01, + 0x42, 0x24, 0x02, 0x05, 0x61, 0x41, 0xe1, 0x01, 0x61, 0x01, 0x42, 0x22, + 0x00, 0x02, 0x61, 0x41, 0xe1, 0x08, 0x61, 0x01, 0x42, 0x22, 0x00, 0x09, + 0x61, 0x41, 0xe1, 0x03, 0x61, 0x01, 0x42, 0x22, 0x00, 0x04, 0x61, 0x41, + 0xe1, 0x12, 0x61, 0x01, 0xa4, 0x06, 0x42, 0x22, 0x00, 0x13, 0x61, 0x41, + 0xe1, 0x0d, 0x61, 0x01, 0x42, 0x22, 0x00, 0x0e, 0x61, 0x41, 0xe1, 0x06, + 0x61, 0x01, 0x42, 0x22, 0x00, 0x07, 0x61, 0x41, 0xe1, 0x17, 0x61, 0x01, + 0x42, 0x22, 0x00, 0x18, 0x61, 0x41, 0x45, 0x12, 0x0b, 0x38, 0x61, 0x01, + 0xa6, 0x2e, 0x44, 0xcf, 0x2a, 0x39, 0x61, 0x01, 0x43, 0x0e, 0x0b, 0x31, + 0x61, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, 0x30, 0x61, 0x41, + 0x44, 0x25, 0x01, 0x33, 0x61, 0x01, 0x42, 0x15, 0x02, 0x32, 0x61, 0x41, + 0x44, 0xc9, 0x1d, 0x37, 0x61, 0x01, 0x42, 0x01, 0x26, 0x36, 0x61, 0x41, + 0x43, 0xd2, 0x05, 0x35, 0x61, 0x01, 0x43, 0xf6, 0x06, 0x34, 0x61, 0x41, + 0x42, 0x22, 0x00, 0x2c, 0x61, 0x01, 0x42, 0x71, 0x00, 0x2e, 0x61, 0x01, + 0x42, 0xf5, 0x0a, 0x2b, 0x61, 0x01, 0x42, 0xbc, 0x22, 0x2a, 0x61, 0x41, + 0xa1, 0xe4, 0x03, 0x06, 0xef, 0x06, 0x9d, 0x03, 0x48, 0x88, 0xc5, 0x74, + 0x0a, 0x00, 0x43, 0xe4, 0x0a, 0x72, 0x0a, 0x00, 0x07, 0xec, 0x05, 0x6f, + 0x05, 0x5a, 0x03, 0x3d, 0x45, 0x4b, 0xeb, 0x70, 0x0a, 0x00, 0x43, 0x70, + 0x00, 0x73, 0x0a, 0x00, 0x0b, 0x40, 0x77, 0x01, 0xff, 0xa1, 0x1e, 0x42, + 0x27, 0x01, 0x47, 0x0a, 0x00, 0xe9, 0x3f, 0x0a, 0x80, 0x0f, 0x42, 0xcd, + 0x02, 0x4b, 0x0a, 0x00, 0xf5, 0x41, 0x0a, 0xc0, 0x00, 0xf5, 0x42, 0x0a, + 0x40, 0xe9, 0x40, 0x0a, 0x40, 0xe1, 0x3e, 0x0a, 0x00, 0xe9, 0x48, 0x0a, + 0x00, 0xf5, 0x4c, 0x0a, 0x40, 0x4a, 0x63, 0xa7, 0x01, 0x0a, 0x00, 0x45, + 0x4f, 0x6b, 0x02, 0x0a, 0x00, 0x45, 0x3f, 0x3f, 0x3c, 0x0a, 0x00, 0x45, + 0xbe, 0xeb, 0x51, 0x0a, 0x00, 0x02, 0x02, 0x00, 0x06, 0x46, 0x72, 0xe1, + 0x75, 0x0a, 0x40, 0x44, 0xe5, 0x23, 0x4d, 0x0a, 0x00, 0x45, 0xec, 0x4b, + 0x03, 0x0a, 0x40, 0xe1, 0x05, 0x0a, 0x80, 0x8c, 0x02, 0xa2, 0xff, 0x01, + 0xa3, 0xf2, 0x01, 0xa4, 0xd9, 0x01, 0x42, 0x27, 0x01, 0x0f, 0x0a, 0x00, + 0x42, 0x0c, 0x08, 0x5e, 0x0a, 0x00, 0xa7, 0xb9, 0x01, 0x42, 0x22, 0x00, + 0x39, 0x0a, 0x00, 0xe9, 0x07, 0x0a, 0x80, 0xa9, 0x01, 0xaa, 0x9c, 0x01, + 0xab, 0x88, 0x01, 0xac, 0x7c, 0x42, 0x6c, 0x00, 0x2e, 0x0a, 0x00, 0xae, + 0x5e, 0x42, 0xcd, 0x02, 0x13, 0x0a, 0x00, 0xb0, 0x4c, 0xb2, 0x40, 0xb3, + 0x34, 0xb4, 0x1b, 0xf5, 0x09, 0x0a, 0x80, 0x12, 0x42, 0xf5, 0x0a, 0x35, + 0x0a, 0x00, 0x42, 0xbc, 0x22, 0x2f, 0x0a, 0x00, 0x42, 0x59, 0x00, 0x5b, + 0x0a, 0x40, 0xf5, 0x0a, 0x0a, 0x40, 0xe1, 0x24, 0x0a, 0x00, 0x42, 0x22, + 0x00, 0x25, 0x0a, 0x00, 0xb4, 0x01, 0xff, 0xe1, 0x1f, 0x0a, 0x00, 0x42, + 0x22, 0x00, 0x20, 0x0a, 0x40, 0xe1, 0x38, 0x0a, 0x00, 0x42, 0x22, 0x00, + 0x36, 0x0a, 0x40, 0xe1, 0x30, 0x0a, 0x00, 0x42, 0x71, 0x00, 0x5c, 0x0a, + 0x40, 0xe1, 0x2a, 0x0a, 0x00, 0x42, 0x22, 0x00, 0x2b, 0x0a, 0x40, 0xe1, + 0x28, 0x0a, 0x00, 0x42, 0x24, 0x02, 0x19, 0x0a, 0x00, 0x42, 0x2a, 0x05, + 0x23, 0x0a, 0x00, 0x42, 0xbc, 0x22, 0x1e, 0x0a, 0x40, 0xe1, 0x32, 0x0a, + 0x00, 0x42, 0x74, 0x00, 0x33, 0x0a, 0x40, 0xe1, 0x15, 0x0a, 0x00, 0xa8, + 0x01, 0xff, 0xe1, 0x16, 0x0a, 0x00, 0x42, 0x22, 0x00, 0x59, 0x0a, 0x40, + 0xe1, 0x1c, 0x0a, 0x00, 0x42, 0x22, 0x00, 0x1d, 0x0a, 0x40, 0xe9, 0x08, + 0x0a, 0x40, 0xe1, 0x17, 0x0a, 0x00, 0xa8, 0x01, 0xff, 0xe1, 0x18, 0x0a, + 0x00, 0x42, 0x22, 0x00, 0x5a, 0x0a, 0x40, 0xe1, 0x26, 0x0a, 0x00, 0xa4, + 0x06, 0x42, 0x22, 0x00, 0x27, 0x0a, 0x40, 0xe1, 0x21, 0x0a, 0x00, 0x42, + 0x22, 0x00, 0x22, 0x0a, 0x40, 0xe1, 0x1a, 0x0a, 0x00, 0x42, 0x22, 0x00, + 0x1b, 0x0a, 0x40, 0xe1, 0x2c, 0x0a, 0x00, 0x42, 0x22, 0x00, 0x2d, 0x0a, + 0x40, 0xe1, 0x06, 0x0a, 0x00, 0xe9, 0x10, 0x0a, 0x00, 0xf5, 0x14, 0x0a, + 0x40, 0x45, 0x12, 0x0b, 0x6e, 0x0a, 0x00, 0xa6, 0x2e, 0x44, 0xcf, 0x2a, + 0x6f, 0x0a, 0x00, 0x43, 0x0e, 0x0b, 0x67, 0x0a, 0x00, 0xb3, 0x14, 0xb4, + 0x06, 0x44, 0x43, 0x1e, 0x66, 0x0a, 0x40, 0x44, 0x25, 0x01, 0x69, 0x0a, + 0x00, 0x42, 0x15, 0x02, 0x68, 0x0a, 0x40, 0x44, 0xc9, 0x1d, 0x6d, 0x0a, + 0x00, 0x42, 0x01, 0x26, 0x6c, 0x0a, 0x40, 0x43, 0xd2, 0x05, 0x6b, 0x0a, + 0x00, 0x43, 0xf6, 0x06, 0x6a, 0x0a, 0x40, 0x50, 0xdd, 0x57, 0x76, 0x0a, + 0x00, 0x44, 0x7d, 0xef, 0x71, 0x0a, 0x40, 0x06, 0xef, 0x06, 0xbe, 0x02, + 0x07, 0xec, 0x05, 0x50, 0x42, 0x14, 0x05, 0x98, 0x1d, 0x01, 0x05, 0x5a, + 0x03, 0x3a, 0xb6, 0x01, 0xff, 0x45, 0xe4, 0x23, 0x97, 0x1d, 0x01, 0x0a, + 0x41, 0x77, 0x01, 0xff, 0xa1, 0x1e, 0x42, 0x27, 0x01, 0x90, 0x1d, 0x01, + 0xe9, 0x8b, 0x1d, 0x81, 0x0f, 0x42, 0xcd, 0x02, 0x93, 0x1d, 0x01, 0xf5, + 0x8d, 0x1d, 0xc1, 0x00, 0xf5, 0x8e, 0x1d, 0x41, 0xe9, 0x8c, 0x1d, 0x41, + 0xe1, 0x8a, 0x1d, 0x01, 0xe9, 0x91, 0x1d, 0x01, 0xf5, 0x94, 0x1d, 0x41, + 0x48, 0x3c, 0x16, 0x95, 0x1d, 0x01, 0x47, 0xea, 0x4b, 0x96, 0x1d, 0x41, + 0xe1, 0x60, 0x1d, 0x81, 0xd8, 0x01, 0xa2, 0xcb, 0x01, 0xa3, 0xbe, 0x01, + 0xa4, 0xa5, 0x01, 0x42, 0x27, 0x01, 0x67, 0x1d, 0x01, 0xa7, 0x92, 0x01, + 0x42, 0x22, 0x00, 0x87, 0x1d, 0x01, 0xe9, 0x62, 0x1d, 0x81, 0x82, 0x01, + 0xaa, 0x76, 0xab, 0x6a, 0xac, 0x5e, 0x42, 0x6c, 0x00, 0x70, 0x1d, 0x01, + 0xae, 0x4c, 0x42, 0xcd, 0x02, 0x6a, 0x1d, 0x01, 0xb0, 0x3a, 0x42, 0x71, + 0x00, 0x88, 0x1d, 0x01, 0x42, 0x40, 0x06, 0x89, 0x1d, 0x01, 0xb4, 0x15, + 0xf5, 0x64, 0x1d, 0x81, 0x0c, 0x42, 0xf5, 0x0a, 0x6d, 0x1d, 0x01, 0x42, + 0xbc, 0x22, 0x6c, 0x1d, 0x41, 0xf5, 0x65, 0x1d, 0x41, 0xe1, 0x73, 0x1d, + 0x01, 0x42, 0x22, 0x00, 0x74, 0x1d, 0x01, 0xb4, 0x01, 0xff, 0xe1, 0x7d, + 0x1d, 0x01, 0x42, 0x22, 0x00, 0x7e, 0x1d, 0x41, 0xe1, 0x85, 0x1d, 0x01, + 0x42, 0x22, 0x00, 0x86, 0x1d, 0x41, 0xe1, 0x7a, 0x1d, 0x01, 0x42, 0x24, + 0x02, 0x84, 0x1d, 0x41, 0xe1, 0x75, 0x1d, 0x01, 0x42, 0x74, 0x00, 0x7f, + 0x1d, 0x41, 0xe1, 0x71, 0x1d, 0x01, 0x42, 0x22, 0x00, 0x72, 0x1d, 0x41, + 0xe1, 0x80, 0x1d, 0x01, 0x42, 0x22, 0x00, 0x81, 0x1d, 0x41, 0xe9, 0x63, + 0x1d, 0x41, 0xe1, 0x76, 0x1d, 0x01, 0x42, 0x22, 0x00, 0x77, 0x1d, 0x41, + 0xe1, 0x78, 0x1d, 0x01, 0xa4, 0x06, 0x42, 0x22, 0x00, 0x79, 0x1d, 0x41, + 0xe1, 0x82, 0x1d, 0x01, 0x42, 0x22, 0x00, 0x83, 0x1d, 0x41, 0xe1, 0x7b, + 0x1d, 0x01, 0x42, 0x22, 0x00, 0x7c, 0x1d, 0x41, 0xe1, 0x6e, 0x1d, 0x01, + 0x42, 0x22, 0x00, 0x6f, 0x1d, 0x41, 0xe1, 0x61, 0x1d, 0x01, 0xe9, 0x68, + 0x1d, 0x01, 0xf5, 0x6b, 0x1d, 0x41, 0x45, 0x12, 0x0b, 0xa8, 0x1d, 0x01, + 0xa6, 0x2e, 0x44, 0xcf, 0x2a, 0xa9, 0x1d, 0x01, 0x43, 0x0e, 0x0b, 0xa1, + 0x1d, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, 0xa0, 0x1d, 0x41, + 0x44, 0x25, 0x01, 0xa3, 0x1d, 0x01, 0x42, 0x15, 0x02, 0xa2, 0x1d, 0x41, + 0x44, 0xc9, 0x1d, 0xa7, 0x1d, 0x01, 0x42, 0x01, 0x26, 0xa6, 0x1d, 0x41, + 0x43, 0xd2, 0x05, 0xa5, 0x1d, 0x01, 0x43, 0xf6, 0x06, 0xa4, 0x1d, 0x41, + 0x51, 0xdc, 0x57, 0xf0, 0x0a, 0x00, 0x06, 0xef, 0x06, 0xe9, 0x03, 0x07, + 0xec, 0x05, 0xc6, 0x01, 0x42, 0x14, 0x05, 0xd0, 0x0a, 0x00, 0x4a, 0x65, + 0x80, 0xf1, 0x0a, 0x00, 0x05, 0x5a, 0x03, 0x61, 0x06, 0x3c, 0x39, 0x01, + 0xff, 0x07, 0x36, 0x61, 0x50, 0x05, 0x5a, 0x03, 0x01, 0xff, 0xa1, 0x3d, + 0x07, 0x36, 0x61, 0x31, 0xe5, 0xc7, 0x0a, 0x00, 0xe9, 0xbf, 0x0a, 0x80, + 0x24, 0xef, 0xcb, 0x0a, 0x00, 0xf5, 0xc1, 0x0a, 0x80, 0x17, 0x08, 0x22, + 0xc1, 0x01, 0xff, 0xec, 0xe2, 0x0a, 0x80, 0x09, 0xf2, 0xc3, 0x0a, 0xc0, + 0x00, 0xf2, 0xc4, 0x0a, 0x40, 0xec, 0xe3, 0x0a, 0x40, 0xf5, 0xc2, 0x0a, + 0x40, 0xe9, 0xc0, 0x0a, 0x40, 0xe5, 0xc5, 0x0a, 0x00, 0xef, 0xc9, 0x0a, + 0x40, 0xe1, 0xbe, 0x0a, 0x00, 0xe9, 0xc8, 0x0a, 0x00, 0xf5, 0xcc, 0x0a, + 0x40, 0xe5, 0x8d, 0x0a, 0x00, 0xef, 0x91, 0x0a, 0x40, 0xa1, 0x47, 0xa3, + 0x39, 0x46, 0xe8, 0xdd, 0xfc, 0x0a, 0x00, 0x45, 0x3f, 0x3f, 0xbc, 0x0a, + 0x00, 0xb3, 0x1f, 0xb4, 0x11, 0x02, 0x02, 0x00, 0x01, 0xff, 0x44, 0xe5, + 0x23, 0xcd, 0x0a, 0x00, 0x45, 0xec, 0x4b, 0x83, 0x0a, 0x40, 0x54, 0xf8, + 0x42, 0xfd, 0x0a, 0x00, 0x55, 0x35, 0x3f, 0xff, 0x0a, 0x40, 0x45, 0xc8, + 0xe6, 0xfb, 0x0a, 0x00, 0x44, 0x24, 0xeb, 0xfa, 0x0a, 0x40, 0x4a, 0xd8, + 0x23, 0x81, 0x0a, 0x00, 0x51, 0x39, 0x3f, 0xfe, 0x0a, 0x40, 0x47, 0x3d, + 0x16, 0x82, 0x0a, 0x00, 0x47, 0xaf, 0x88, 0xbd, 0x0a, 0x40, 0xe1, 0x85, + 0x0a, 0x80, 0x8c, 0x02, 0xa2, 0xff, 0x01, 0xa3, 0xf2, 0x01, 0xa4, 0xd9, + 0x01, 0xe5, 0x8f, 0x0a, 0x00, 0xa7, 0xc8, 0x01, 0x42, 0x22, 0x00, 0xb9, + 0x0a, 0x00, 0xe9, 0x87, 0x0a, 0x80, 0xb8, 0x01, 0xaa, 0xab, 0x01, 0xab, + 0x9e, 0x01, 0xac, 0x91, 0x01, 0x42, 0x6c, 0x00, 0xae, 0x0a, 0x00, 0xae, + 0x73, 0xef, 0x93, 0x0a, 0x00, 0xb0, 0x63, 0x42, 0x71, 0x00, 0xb0, 0x0a, + 0x00, 0xb3, 0x4b, 0xb4, 0x32, 0xf5, 0x89, 0x0a, 0x80, 0x29, 0xb6, 0x0c, + 0x42, 0xbc, 0x22, 0xaf, 0x0a, 0x00, 0x43, 0xcb, 0xc0, 0xf9, 0x0a, 0x40, + 0xe1, 0xb5, 0x0a, 0x00, 0x07, 0x23, 0xc1, 0x01, 0xff, 0xec, 0x8c, 0x0a, + 0x80, 0x09, 0xf2, 0x8b, 0x0a, 0xc0, 0x00, 0xf2, 0xe0, 0x0a, 0x40, 0xec, + 0xe1, 0x0a, 0x40, 0xf5, 0x8a, 0x0a, 0x40, 0xe1, 0xa4, 0x0a, 0x00, 0x42, + 0x22, 0x00, 0xa5, 0x0a, 0x00, 0xb4, 0x01, 0xff, 0xe1, 0x9f, 0x0a, 0x00, + 0x42, 0x22, 0x00, 0xa0, 0x0a, 0x40, 0xe1, 0xb8, 0x0a, 0x00, 0x42, 0x22, + 0x00, 0xb6, 0x0a, 0x00, 0x42, 0x40, 0x06, 0xb7, 0x0a, 0x40, 0xe1, 0xaa, + 0x0a, 0x00, 0x42, 0x22, 0x00, 0xab, 0x0a, 0x40, 0xe1, 0xa8, 0x0a, 0x00, + 0x42, 0x24, 0x02, 0x99, 0x0a, 0x00, 0x42, 0x2a, 0x05, 0xa3, 0x0a, 0x00, + 0x42, 0xbc, 0x22, 0x9e, 0x0a, 0x40, 0xe1, 0xb2, 0x0a, 0x00, 0x42, 0x74, + 0x00, 0xb3, 0x0a, 0x40, 0xe1, 0x95, 0x0a, 0x00, 0x42, 0x22, 0x00, 0x96, + 0x0a, 0x40, 0xe1, 0x9c, 0x0a, 0x00, 0x42, 0x22, 0x00, 0x9d, 0x0a, 0x40, + 0xe9, 0x88, 0x0a, 0x40, 0xe1, 0x97, 0x0a, 0x00, 0x42, 0x22, 0x00, 0x98, + 0x0a, 0x40, 0xe1, 0xa6, 0x0a, 0x00, 0xa4, 0x06, 0x42, 0x22, 0x00, 0xa7, + 0x0a, 0x40, 0xe1, 0xa1, 0x0a, 0x00, 0x42, 0x22, 0x00, 0xa2, 0x0a, 0x40, + 0xe1, 0x9a, 0x0a, 0x00, 0x42, 0x22, 0x00, 0x9b, 0x0a, 0x40, 0xe1, 0xac, + 0x0a, 0x00, 0x42, 0x22, 0x00, 0xad, 0x0a, 0x40, 0xe1, 0x86, 0x0a, 0x00, + 0xe9, 0x90, 0x0a, 0x00, 0xf5, 0x94, 0x0a, 0x40, 0x45, 0x12, 0x0b, 0xee, + 0x0a, 0x00, 0xa6, 0x2e, 0x44, 0xcf, 0x2a, 0xef, 0x0a, 0x00, 0x43, 0x0e, + 0x0b, 0xe7, 0x0a, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, 0xe6, + 0x0a, 0x40, 0x44, 0x25, 0x01, 0xe9, 0x0a, 0x00, 0x42, 0x15, 0x02, 0xe8, + 0x0a, 0x40, 0x44, 0xc9, 0x1d, 0xed, 0x0a, 0x00, 0x42, 0x01, 0x26, 0xec, + 0x0a, 0x40, 0x43, 0xd2, 0x05, 0xeb, 0x0a, 0x00, 0x43, 0xf6, 0x06, 0xea, + 0x0a, 0x40, 0x46, 0xdc, 0xda, 0xae, 0xf9, 0x01, 0x43, 0x32, 0x13, 0xb8, + 0xf3, 0x41, 0x48, 0x10, 0x9c, 0xb2, 0x20, 0x00, 0x45, 0xa6, 0xe5, 0x82, + 0xf4, 0x41, 0xa1, 0x81, 0x1f, 0xa5, 0x4d, 0xa9, 0x19, 0xaf, 0x01, 0xff, + 0x03, 0x7d, 0x15, 0x06, 0x4a, 0x89, 0xb3, 0x97, 0xf4, 0x41, 0x44, 0xb9, + 0x00, 0xd2, 0x2b, 0x00, 0x49, 0xd8, 0x20, 0x1d, 0x00, 0x40, 0x4b, 0x3b, + 0x9f, 0x2c, 0xf6, 0x01, 0x06, 0x6b, 0xa2, 0x01, 0xff, 0x5a, 0x62, 0x1f, + 0x38, 0xf6, 0x01, 0x44, 0x0c, 0x08, 0x00, 0xf6, 0xc1, 0x00, 0x06, 0x50, + 0x00, 0x01, 0xff, 0x5b, 0xae, 0x1c, 0x2a, 0xf9, 0x01, 0xb3, 0x01, 0xff, + 0x4b, 0x71, 0x1f, 0x01, 0xf6, 0x01, 0x48, 0x60, 0xcb, 0x29, 0xf9, 0x41, + 0x0a, 0x8a, 0x00, 0xce, 0x1c, 0xa5, 0x06, 0x47, 0xbb, 0xd7, 0x76, 0xfa, + 0x41, 0x02, 0xbc, 0x00, 0x1d, 0x02, 0x92, 0x00, 0x01, 0xff, 0x45, 0x57, + 0xe4, 0x4f, 0xf3, 0x01, 0x44, 0x45, 0xef, 0xd7, 0xf4, 0x01, 0x45, 0xac, + 0x21, 0x9a, 0xf4, 0x01, 0x45, 0xba, 0xea, 0x57, 0xf9, 0x41, 0xa1, 0xde, + 0x18, 0x4b, 0x9a, 0x99, 0xd0, 0x03, 0x00, 0x08, 0xe4, 0x05, 0xbe, 0x10, + 0xa4, 0xf7, 0x0f, 0xa6, 0xe8, 0x0f, 0x4b, 0x7b, 0x9c, 0x88, 0x01, 0x01, + 0x02, 0x9e, 0x01, 0xb8, 0x0e, 0xab, 0x9b, 0x0e, 0xac, 0xa9, 0x0d, 0xad, + 0x9a, 0x0d, 0x4c, 0x20, 0x5d, 0x74, 0x03, 0x00, 0xaf, 0xe8, 0x0c, 0xb0, + 0xaf, 0x0c, 0x4d, 0xa6, 0x34, 0x7e, 0x03, 0x00, 0xb2, 0x8f, 0x0c, 0xb3, + 0xf4, 0x01, 0xb4, 0xb5, 0x01, 0x0d, 0xad, 0x89, 0x9e, 0x01, 0xb6, 0x1a, + 0x4b, 0x4a, 0xa5, 0x85, 0x01, 0x01, 0xb9, 0x06, 0x49, 0xd6, 0xc1, 0x8a, + 0x01, 0x41, 0x48, 0x98, 0xc1, 0x79, 0x01, 0x01, 0x4c, 0x39, 0x4f, 0x7a, + 0x03, 0x40, 0x44, 0x9c, 0x30, 0xef, 0x1f, 0x00, 0x15, 0x28, 0x3d, 0x01, + 0xff, 0xd1, 0x00, 0xd2, 0x81, 0x4a, 0xd2, 0x01, 0xd2, 0x81, 0x31, 0xd3, + 0x02, 0xd2, 0x01, 0xd4, 0x03, 0xd2, 0x01, 0xd5, 0x04, 0xd2, 0x81, 0x10, + 0xd6, 0x05, 0xd2, 0x01, 0xd7, 0x06, 0xd2, 0x01, 0xd8, 0x07, 0xd2, 0x01, + 0xd9, 0x08, 0xd2, 0x41, 0xd0, 0x18, 0xd2, 0x01, 0xd1, 0x19, 0xd2, 0x01, + 0xd2, 0x1a, 0xd2, 0x01, 0xd3, 0x1b, 0xd2, 0x01, 0xd4, 0x1c, 0xd2, 0x41, + 0xd0, 0x13, 0xd2, 0x01, 0xd1, 0x14, 0xd2, 0x01, 0xd2, 0x15, 0xd2, 0x01, + 0xd3, 0x16, 0xd2, 0x01, 0xd4, 0x17, 0xd2, 0x41, 0xd0, 0x09, 0xd2, 0x01, + 0xd1, 0x0a, 0xd2, 0x01, 0xd2, 0x0b, 0xd2, 0x01, 0xd3, 0x0c, 0xd2, 0x01, + 0xd4, 0x0d, 0xd2, 0x01, 0xd5, 0x0e, 0xd2, 0x01, 0xd6, 0x0f, 0xd2, 0x01, + 0xd7, 0x10, 0xd2, 0x01, 0xd8, 0x11, 0xd2, 0x01, 0xd9, 0x12, 0xd2, 0x41, + 0x55, 0xf9, 0x38, 0xd3, 0x03, 0x00, 0x59, 0xb7, 0x23, 0xd4, 0x03, 0x00, + 0x4b, 0xc5, 0x23, 0xd2, 0x03, 0x40, 0x4a, 0xa9, 0xa7, 0x7a, 0x01, 0x01, + 0xa8, 0x1d, 0x44, 0x1d, 0x6c, 0x84, 0x03, 0x00, 0x51, 0xb4, 0x5d, 0x89, + 0x01, 0x01, 0x03, 0x20, 0x0a, 0x01, 0xff, 0x4a, 0x0f, 0x79, 0x7d, 0x01, + 0x01, 0x4b, 0x71, 0xa3, 0x77, 0x01, 0x41, 0x4a, 0xc9, 0x95, 0xd1, 0x03, + 0x00, 0x04, 0x26, 0x01, 0x01, 0xff, 0x4a, 0x0f, 0x79, 0x7e, 0x01, 0x01, + 0x4d, 0xa5, 0x87, 0x78, 0x01, 0x41, 0x4c, 0x4b, 0x90, 0x8c, 0x01, 0x01, + 0x05, 0x5e, 0x07, 0x28, 0x16, 0xb5, 0x37, 0x06, 0x4d, 0xcb, 0x8a, 0xa0, + 0x01, 0x41, 0x44, 0x9a, 0x99, 0x66, 0x1d, 0x00, 0x43, 0x79, 0x16, 0x6a, + 0x1d, 0x00, 0x45, 0x2c, 0x58, 0x67, 0x1d, 0x00, 0x43, 0x53, 0x20, 0x69, + 0x1d, 0x00, 0x43, 0xef, 0x49, 0x68, 0x1d, 0x40, 0x5a, 0xb0, 0x1f, 0x7c, + 0x03, 0x00, 0x07, 0xec, 0x05, 0x11, 0x09, 0xdd, 0x14, 0x01, 0xff, 0x5a, + 0xb0, 0x1f, 0x7d, 0x03, 0x00, 0x53, 0xb7, 0x1f, 0x7b, 0x03, 0x40, 0xa1, + 0xf6, 0x07, 0x44, 0x9a, 0x99, 0xb2, 0x03, 0x00, 0x43, 0x79, 0x16, 0xc7, + 0x03, 0x00, 0xa4, 0xdb, 0x07, 0xa5, 0xd6, 0x05, 0x4b, 0x18, 0x9c, 0xc2, + 0x03, 0x00, 0x45, 0x2c, 0x58, 0xb3, 0x03, 0x00, 0x44, 0xc8, 0x95, 0x71, + 0x03, 0x00, 0x44, 0x99, 0x2e, 0xb9, 0x03, 0x80, 0xac, 0x04, 0xab, 0x9d, + 0x04, 0x45, 0x17, 0xe8, 0xbb, 0x03, 0x00, 0x42, 0xc3, 0x16, 0xbc, 0x03, + 0x00, 0x42, 0x3d, 0x16, 0xbd, 0x03, 0x00, 0x02, 0x14, 0x05, 0x85, 0x02, + 0xb0, 0xec, 0x01, 0x43, 0xef, 0x49, 0xc1, 0x03, 0x80, 0xd3, 0x01, 0xb3, + 0xb2, 0x01, 0xb4, 0xa3, 0x01, 0x47, 0xad, 0x89, 0xc5, 0x03, 0x80, 0x0c, + 0x42, 0xe2, 0x0c, 0xbe, 0x03, 0x00, 0x44, 0x61, 0xf3, 0xb6, 0x03, 0x40, + 0x06, 0x50, 0x00, 0x01, 0xff, 0xa4, 0x47, 0x46, 0xad, 0x70, 0xe1, 0x1f, + 0x00, 0x44, 0xf5, 0xf1, 0x7b, 0x1f, 0x00, 0xb0, 0x15, 0x45, 0x1c, 0x6c, + 0xcd, 0x03, 0x00, 0xb6, 0x01, 0xff, 0x44, 0x9c, 0x30, 0x7a, 0x1f, 0x00, + 0x45, 0x29, 0xea, 0xe0, 0x1f, 0x40, 0x4a, 0x41, 0xa1, 0xe6, 0x1f, 0x00, + 0x44, 0xc3, 0x88, 0x50, 0x1f, 0xc0, 0x00, 0x05, 0x19, 0x00, 0x01, 0xff, + 0x44, 0xf5, 0xf1, 0x54, 0x1f, 0x00, 0x4b, 0x40, 0xa1, 0x56, 0x1f, 0x00, + 0x45, 0x9b, 0x30, 0x52, 0x1f, 0x40, 0x44, 0x47, 0x61, 0x51, 0x1f, 0x80, + 0x24, 0x48, 0x13, 0x6c, 0xcb, 0x03, 0xc0, 0x00, 0x05, 0x19, 0x00, 0x01, + 0xff, 0x44, 0xf5, 0xf1, 0xe3, 0x1f, 0x00, 0x4b, 0x40, 0xa1, 0xe7, 0x1f, + 0x00, 0x45, 0x1c, 0x6c, 0xb0, 0x03, 0x00, 0x45, 0x9b, 0x30, 0xe2, 0x1f, + 0x40, 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, 0xf5, 0xf1, 0x55, 0x1f, 0x00, + 0x4b, 0x40, 0xa1, 0x57, 0x1f, 0x00, 0x45, 0x9b, 0x30, 0x53, 0x1f, 0x40, + 0x42, 0x5f, 0x24, 0xc4, 0x03, 0x00, 0x44, 0xc8, 0x95, 0xb8, 0x03, 0x40, + 0xa1, 0x12, 0x42, 0x0b, 0x00, 0xf8, 0x03, 0x00, 0x44, 0xbf, 0x1f, 0xc3, + 0x03, 0x00, 0x45, 0x41, 0xeb, 0xdb, 0x03, 0x40, 0x43, 0x38, 0x94, 0xe1, + 0x03, 0x00, 0xee, 0xfb, 0x03, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x45, + 0xb1, 0x76, 0xe5, 0x1f, 0x00, 0x45, 0x10, 0xea, 0xe4, 0x1f, 0x40, 0x51, + 0x20, 0x58, 0x77, 0x03, 0x00, 0x42, 0x49, 0x00, 0xc6, 0x03, 0x00, 0xe9, + 0xc0, 0x03, 0x00, 0x42, 0x5a, 0x03, 0xc8, 0x03, 0x40, 0x43, 0xce, 0x05, + 0xc9, 0x03, 0x80, 0x4e, 0x45, 0x4a, 0xe7, 0xbf, 0x03, 0xc0, 0x00, 0x06, + 0x50, 0x00, 0x01, 0xff, 0x45, 0xb1, 0x76, 0x41, 0x1f, 0x80, 0x2a, 0x44, + 0xf5, 0xf1, 0x79, 0x1f, 0x00, 0x45, 0x10, 0xea, 0x40, 0x1f, 0x80, 0x0c, + 0x45, 0x1c, 0x6c, 0xcc, 0x03, 0x00, 0x45, 0x9b, 0x30, 0x78, 0x1f, 0x40, + 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, 0xf5, 0xf1, 0x44, 0x1f, 0x00, 0x45, + 0x9b, 0x30, 0x42, 0x1f, 0x40, 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, 0xf5, + 0xf1, 0x45, 0x1f, 0x00, 0x45, 0x9b, 0x30, 0x43, 0x1f, 0x40, 0x06, 0x50, + 0x00, 0x01, 0xff, 0x45, 0xb1, 0x76, 0x61, 0x1f, 0x80, 0x6e, 0x44, 0xf5, + 0xf1, 0x7d, 0x1f, 0x80, 0x61, 0xb0, 0x19, 0x45, 0x1c, 0x6c, 0xce, 0x03, + 0x00, 0x45, 0x9b, 0x30, 0x7c, 0x1f, 0x80, 0x06, 0x4d, 0x38, 0x4f, 0xf3, + 0x1f, 0x40, 0x52, 0x33, 0x4f, 0xf2, 0x1f, 0x40, 0x4a, 0x41, 0xa1, 0xf6, + 0x1f, 0x80, 0x39, 0x44, 0xc3, 0x88, 0x60, 0x1f, 0xc0, 0x00, 0x05, 0x19, + 0x00, 0x01, 0xff, 0x44, 0xf5, 0xf1, 0x64, 0x1f, 0x80, 0x20, 0x4b, 0x40, + 0xa1, 0x66, 0x1f, 0x80, 0x13, 0x45, 0x9b, 0x30, 0x62, 0x1f, 0x80, 0x06, + 0x4d, 0x38, 0x4f, 0xa0, 0x1f, 0x40, 0x52, 0x33, 0x4f, 0xa2, 0x1f, 0x40, + 0x52, 0x33, 0x4f, 0xa6, 0x1f, 0x40, 0x52, 0x33, 0x4f, 0xa4, 0x1f, 0x40, + 0x52, 0x33, 0x4f, 0xf7, 0x1f, 0x40, 0x52, 0x33, 0x4f, 0xf4, 0x1f, 0x40, + 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, 0xf5, 0xf1, 0x65, 0x1f, 0x80, 0x20, + 0x4b, 0x40, 0xa1, 0x67, 0x1f, 0x80, 0x13, 0x45, 0x9b, 0x30, 0x63, 0x1f, + 0x80, 0x06, 0x4d, 0x38, 0x4f, 0xa1, 0x1f, 0x40, 0x52, 0x33, 0x4f, 0xa3, + 0x1f, 0x40, 0x52, 0x33, 0x4f, 0xa7, 0x1f, 0x40, 0x52, 0x33, 0x4f, 0xa5, + 0x1f, 0x40, 0x44, 0x94, 0x90, 0xba, 0x03, 0x00, 0x44, 0xac, 0x80, 0xdf, + 0x03, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0xa4, 0x47, 0x46, 0xad, 0x70, + 0xd1, 0x1f, 0x00, 0x44, 0xf5, 0xf1, 0x77, 0x1f, 0x00, 0xb0, 0x15, 0x45, + 0x1c, 0x6c, 0xaf, 0x03, 0x00, 0xb6, 0x01, 0xff, 0x44, 0x9c, 0x30, 0x76, + 0x1f, 0x00, 0x45, 0x29, 0xea, 0xd0, 0x1f, 0x40, 0x4a, 0x41, 0xa1, 0xd6, + 0x1f, 0x00, 0x44, 0xc3, 0x88, 0x30, 0x1f, 0xc0, 0x00, 0x05, 0x19, 0x00, + 0x01, 0xff, 0x44, 0xf5, 0xf1, 0x34, 0x1f, 0x00, 0x4b, 0x40, 0xa1, 0x36, + 0x1f, 0x00, 0x45, 0x9b, 0x30, 0x32, 0x1f, 0x40, 0x44, 0x47, 0x61, 0x31, + 0x1f, 0x80, 0x24, 0x48, 0x13, 0x6c, 0xca, 0x03, 0xc0, 0x00, 0x05, 0x19, + 0x00, 0x01, 0xff, 0x44, 0xf5, 0xf1, 0xd3, 0x1f, 0x00, 0x4b, 0x40, 0xa1, + 0xd7, 0x1f, 0x00, 0x45, 0x1c, 0x6c, 0x90, 0x03, 0x00, 0x45, 0x9b, 0x30, + 0xd2, 0x1f, 0x40, 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, 0xf5, 0xf1, 0x35, + 0x1f, 0x00, 0x4b, 0x40, 0xa1, 0x37, 0x1f, 0x00, 0x45, 0x9b, 0x30, 0x33, + 0x1f, 0x40, 0x46, 0xcf, 0x15, 0xb5, 0x03, 0x80, 0xb3, 0x01, 0x42, 0x12, + 0x00, 0xb7, 0x03, 0xc0, 0x00, 0x06, 0x50, 0x00, 0x01, 0xff, 0x45, 0xb1, + 0x76, 0x21, 0x1f, 0x80, 0x6e, 0x44, 0xf5, 0xf1, 0x75, 0x1f, 0x80, 0x61, + 0xb0, 0x19, 0x45, 0x1c, 0x6c, 0xae, 0x03, 0x00, 0x45, 0x9b, 0x30, 0x74, + 0x1f, 0x80, 0x06, 0x4d, 0x38, 0x4f, 0xc3, 0x1f, 0x40, 0x52, 0x33, 0x4f, + 0xc2, 0x1f, 0x40, 0x4a, 0x41, 0xa1, 0xc6, 0x1f, 0x80, 0x39, 0x44, 0xc3, + 0x88, 0x20, 0x1f, 0xc0, 0x00, 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, 0xf5, + 0xf1, 0x24, 0x1f, 0x80, 0x20, 0x4b, 0x40, 0xa1, 0x26, 0x1f, 0x80, 0x13, + 0x45, 0x9b, 0x30, 0x22, 0x1f, 0x80, 0x06, 0x4d, 0x38, 0x4f, 0x90, 0x1f, + 0x40, 0x52, 0x33, 0x4f, 0x92, 0x1f, 0x40, 0x52, 0x33, 0x4f, 0x96, 0x1f, + 0x40, 0x52, 0x33, 0x4f, 0x94, 0x1f, 0x40, 0x52, 0x33, 0x4f, 0xc7, 0x1f, + 0x40, 0x52, 0x33, 0x4f, 0xc4, 0x1f, 0x40, 0x05, 0x19, 0x00, 0x01, 0xff, + 0x44, 0xf5, 0xf1, 0x25, 0x1f, 0x80, 0x20, 0x4b, 0x40, 0xa1, 0x27, 0x1f, + 0x80, 0x13, 0x45, 0x9b, 0x30, 0x23, 0x1f, 0x80, 0x06, 0x4d, 0x38, 0x4f, + 0x91, 0x1f, 0x40, 0x52, 0x33, 0x4f, 0x93, 0x1f, 0x40, 0x52, 0x33, 0x4f, + 0x97, 0x1f, 0x40, 0x52, 0x33, 0x4f, 0x95, 0x1f, 0x40, 0x06, 0x50, 0x00, + 0x01, 0xff, 0x45, 0xb1, 0x76, 0x11, 0x1f, 0x80, 0x2a, 0x44, 0xf5, 0xf1, + 0x73, 0x1f, 0x00, 0x45, 0x10, 0xea, 0x10, 0x1f, 0x80, 0x0c, 0x45, 0x1c, + 0x6c, 0xad, 0x03, 0x00, 0x45, 0x9b, 0x30, 0x72, 0x1f, 0x40, 0x05, 0x19, + 0x00, 0x01, 0xff, 0x44, 0xf5, 0xf1, 0x14, 0x1f, 0x00, 0x45, 0x9b, 0x30, + 0x12, 0x1f, 0x40, 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, 0xf5, 0xf1, 0x15, + 0x1f, 0x00, 0x45, 0x9b, 0x30, 0x13, 0x1f, 0x40, 0x44, 0x38, 0xd6, 0xb4, + 0x03, 0x00, 0x46, 0x2b, 0x58, 0xdd, 0x03, 0x40, 0x44, 0x3f, 0xe4, 0xb1, + 0x03, 0x80, 0x11, 0x07, 0xa4, 0x80, 0x01, 0xff, 0x45, 0xab, 0x80, 0xd9, + 0x03, 0x00, 0x45, 0x36, 0x94, 0x73, 0x03, 0x40, 0x06, 0x50, 0x00, 0x01, + 0xff, 0x45, 0xb1, 0x76, 0x01, 0x1f, 0x80, 0x7c, 0x46, 0xad, 0x70, 0xb1, + 0x1f, 0x00, 0x44, 0xf5, 0xf1, 0x71, 0x1f, 0x80, 0x69, 0xb0, 0x21, 0x45, + 0x1c, 0x6c, 0xac, 0x03, 0x00, 0xb6, 0x06, 0x4d, 0x38, 0x4f, 0xb3, 0x1f, + 0x40, 0x44, 0x9c, 0x30, 0x70, 0x1f, 0x80, 0x06, 0x45, 0x29, 0xea, 0xb0, + 0x1f, 0x40, 0x52, 0x33, 0x4f, 0xb2, 0x1f, 0x40, 0x4a, 0x41, 0xa1, 0xb6, + 0x1f, 0x80, 0x39, 0x44, 0xc3, 0x88, 0x00, 0x1f, 0xc0, 0x00, 0x05, 0x19, + 0x00, 0x01, 0xff, 0x44, 0xf5, 0xf1, 0x04, 0x1f, 0x80, 0x20, 0x4b, 0x40, + 0xa1, 0x06, 0x1f, 0x80, 0x13, 0x45, 0x9b, 0x30, 0x02, 0x1f, 0x80, 0x06, + 0x4d, 0x38, 0x4f, 0x80, 0x1f, 0x40, 0x52, 0x33, 0x4f, 0x82, 0x1f, 0x40, + 0x52, 0x33, 0x4f, 0x86, 0x1f, 0x40, 0x52, 0x33, 0x4f, 0x84, 0x1f, 0x40, + 0x52, 0x33, 0x4f, 0xb7, 0x1f, 0x40, 0x52, 0x33, 0x4f, 0xb4, 0x1f, 0x40, + 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, 0xf5, 0xf1, 0x05, 0x1f, 0x80, 0x20, + 0x4b, 0x40, 0xa1, 0x07, 0x1f, 0x80, 0x13, 0x45, 0x9b, 0x30, 0x03, 0x1f, + 0x80, 0x06, 0x4d, 0x38, 0x4f, 0x81, 0x1f, 0x40, 0x52, 0x33, 0x4f, 0x83, + 0x1f, 0x40, 0x52, 0x33, 0x4f, 0x87, 0x1f, 0x40, 0x52, 0x33, 0x4f, 0x85, + 0x1f, 0x40, 0x5d, 0xbf, 0x15, 0xf6, 0x03, 0x00, 0x03, 0xd4, 0x71, 0x01, + 0xff, 0x46, 0x16, 0x08, 0xf1, 0x03, 0x00, 0x52, 0xb9, 0x56, 0xfc, 0x03, + 0x40, 0x4a, 0x41, 0xa1, 0xc0, 0x1f, 0x00, 0x49, 0x93, 0xb9, 0xd5, 0x03, + 0x00, 0x48, 0x5b, 0xac, 0xd6, 0x03, 0x00, 0x4d, 0x4a, 0x47, 0xbe, 0x1f, + 0x00, 0x44, 0xc3, 0x88, 0xbf, 0x1f, 0xc0, 0x00, 0x05, 0x19, 0x00, 0x01, + 0xff, 0x44, 0xf5, 0xf1, 0xce, 0x1f, 0x00, 0x4b, 0x40, 0xa1, 0xcf, 0x1f, + 0x00, 0x45, 0x9b, 0x30, 0xcd, 0x1f, 0x40, 0x48, 0x40, 0xc4, 0x7c, 0x01, + 0x01, 0x03, 0xef, 0x07, 0x0c, 0x4a, 0xb7, 0xb2, 0x84, 0x01, 0x01, 0x43, + 0x5b, 0x4b, 0xfd, 0x1f, 0x40, 0x49, 0x66, 0xb9, 0x75, 0x01, 0x81, 0x06, + 0x4c, 0xf3, 0x93, 0x8b, 0x01, 0x41, 0x4f, 0x06, 0x69, 0x76, 0x01, 0x41, + 0x4c, 0xb3, 0x8e, 0x81, 0x01, 0x01, 0x4d, 0xe1, 0x89, 0x45, 0xd2, 0x41, + 0x06, 0xed, 0x05, 0x1d, 0x49, 0xc5, 0xba, 0x83, 0x01, 0x01, 0x51, 0x1b, + 0x5d, 0x75, 0x03, 0x00, 0x06, 0xc8, 0x15, 0x01, 0xff, 0x4e, 0xce, 0x15, + 0xf5, 0x03, 0x00, 0x4c, 0xbe, 0x1f, 0xf2, 0x03, 0x40, 0x4d, 0xa3, 0x80, + 0xd8, 0x03, 0x00, 0x47, 0x2a, 0x58, 0xdc, 0x03, 0x00, 0x45, 0xab, 0x80, + 0xde, 0x03, 0x00, 0xb3, 0x06, 0x43, 0xd6, 0xf4, 0xf3, 0x03, 0x40, 0x44, + 0x37, 0x94, 0xe0, 0x03, 0x00, 0x0d, 0xc7, 0x3c, 0x06, 0x45, 0x41, 0xeb, + 0xda, 0x03, 0x40, 0x45, 0x2c, 0x58, 0x26, 0x1d, 0x00, 0x45, 0x17, 0xe8, + 0x27, 0x1d, 0x00, 0x45, 0x38, 0xaf, 0x65, 0xab, 0x00, 0xb0, 0x06, 0x43, + 0xef, 0x49, 0x29, 0x1d, 0x40, 0xe9, 0x28, 0x1d, 0x00, 0x42, 0x5a, 0x03, + 0x2a, 0x1d, 0x40, 0xa1, 0x0c, 0x46, 0xf0, 0x61, 0xbd, 0x1f, 0x00, 0x50, + 0xe6, 0x68, 0x82, 0x01, 0x41, 0x48, 0x5b, 0xac, 0xd7, 0x03, 0x00, 0x4a, + 0x95, 0x90, 0xf0, 0x03, 0x40, 0x4c, 0xf3, 0x8d, 0x8d, 0x01, 0x01, 0x1b, + 0x86, 0x1d, 0x01, 0xff, 0xd1, 0x1d, 0xd2, 0x81, 0x79, 0xd2, 0x1e, 0xd2, + 0x81, 0x5c, 0x93, 0x42, 0xd4, 0x1f, 0xd2, 0x81, 0x21, 0xd5, 0x20, 0xd2, + 0x81, 0x08, 0xd7, 0x21, 0xd2, 0x01, 0xd8, 0x22, 0xd2, 0x41, 0xd0, 0x3d, + 0xd2, 0x01, 0xd1, 0x3e, 0xd2, 0x01, 0xd2, 0x3f, 0xd2, 0x01, 0xd3, 0x40, + 0xd2, 0x01, 0xd4, 0x41, 0xd2, 0x41, 0xd0, 0x36, 0xd2, 0x01, 0xd2, 0x37, + 0xd2, 0x01, 0xd3, 0x38, 0xd2, 0x01, 0xd5, 0x39, 0xd2, 0x01, 0xd7, 0x3a, + 0xd2, 0x01, 0xd8, 0x3b, 0xd2, 0x01, 0xd9, 0x3c, 0xd2, 0x41, 0xd0, 0x30, + 0xd2, 0x01, 0xd2, 0x31, 0xd2, 0x01, 0xd6, 0x32, 0xd2, 0x01, 0xd7, 0x33, + 0xd2, 0x01, 0xd8, 0x34, 0xd2, 0x01, 0xd9, 0x35, 0xd2, 0x41, 0xd3, 0x2a, + 0xd2, 0x01, 0xd4, 0x2b, 0xd2, 0x01, 0xd5, 0x2c, 0xd2, 0x01, 0xd6, 0x2d, + 0xd2, 0x01, 0xd7, 0x2e, 0xd2, 0x01, 0xd9, 0x2f, 0xd2, 0x41, 0xd1, 0x23, + 0xd2, 0x01, 0xd2, 0x24, 0xd2, 0x01, 0xd3, 0x25, 0xd2, 0x01, 0xd4, 0x26, + 0xd2, 0x01, 0xd7, 0x27, 0xd2, 0x01, 0xd8, 0x28, 0xd2, 0x01, 0xd9, 0x29, + 0xd2, 0x41, 0x4e, 0x0b, 0x79, 0x80, 0x01, 0x01, 0x4e, 0xcb, 0x7a, 0x7f, + 0x01, 0x41, 0x44, 0x47, 0x61, 0xfe, 0x1f, 0x80, 0x26, 0x09, 0x13, 0x6c, + 0x06, 0x4b, 0xae, 0xa1, 0x7b, 0x01, 0x41, 0x04, 0x1a, 0x00, 0x06, 0x45, + 0x1c, 0x6c, 0x85, 0x03, 0x40, 0x44, 0xf5, 0xf1, 0xee, 0x1f, 0x00, 0x4b, + 0x40, 0xa1, 0xc1, 0x1f, 0x00, 0x45, 0x9b, 0x30, 0xed, 0x1f, 0x40, 0x05, + 0x19, 0x00, 0x01, 0xff, 0x44, 0xf5, 0xf1, 0xde, 0x1f, 0x00, 0x4b, 0x40, + 0xa1, 0xdf, 0x1f, 0x00, 0x45, 0x9b, 0x30, 0xdd, 0x1f, 0x40, 0x5a, 0xb0, + 0x1f, 0xfe, 0x03, 0x00, 0x4a, 0x59, 0xac, 0xcf, 0x03, 0x00, 0xac, 0x16, + 0x09, 0xdd, 0x14, 0x06, 0x4c, 0xc7, 0x95, 0xf4, 0x03, 0x40, 0x5a, 0xb0, + 0x1f, 0xff, 0x03, 0x00, 0x53, 0xb7, 0x1f, 0xfd, 0x03, 0x40, 0x06, 0xed, + 0x05, 0x06, 0x52, 0xb8, 0x1f, 0xf9, 0x03, 0x40, 0xa1, 0xb3, 0x06, 0x44, + 0x9a, 0x99, 0x92, 0x03, 0x00, 0x43, 0x79, 0x16, 0xa7, 0x03, 0x00, 0x45, + 0x7e, 0xe5, 0x94, 0x03, 0x00, 0xa5, 0xb3, 0x04, 0x45, 0x2c, 0x58, 0x93, + 0x03, 0x00, 0x44, 0xc8, 0x95, 0x70, 0x03, 0x00, 0x44, 0x99, 0x2e, 0x99, + 0x03, 0x80, 0xb5, 0x03, 0x45, 0x93, 0x90, 0x9a, 0x03, 0x00, 0x45, 0x17, + 0xe8, 0x9b, 0x03, 0x00, 0x42, 0xc3, 0x16, 0x9c, 0x03, 0x00, 0x42, 0x3d, + 0x16, 0x9d, 0x03, 0x00, 0x02, 0x14, 0x05, 0xae, 0x01, 0xb0, 0x95, 0x01, + 0x43, 0xef, 0x49, 0xa1, 0x03, 0x80, 0x87, 0x01, 0xb3, 0x73, 0xb4, 0x65, + 0x47, 0xad, 0x89, 0xa5, 0x03, 0x80, 0x12, 0x42, 0xe2, 0x0c, 0x9e, 0x03, + 0x00, 0x43, 0xd6, 0xf4, 0x7f, 0x03, 0x00, 0x44, 0x61, 0xf3, 0x96, 0x03, + 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0xa4, 0x21, 0x46, 0xad, 0x70, 0xe9, + 0x1f, 0x00, 0x44, 0xf5, 0xf1, 0xeb, 0x1f, 0x00, 0x45, 0x1c, 0x6c, 0x8e, + 0x03, 0x00, 0xb6, 0x01, 0xff, 0x44, 0x9c, 0x30, 0xea, 0x1f, 0x00, 0x45, + 0x29, 0xea, 0xe8, 0x1f, 0x40, 0x44, 0x47, 0x61, 0x59, 0x1f, 0x80, 0x06, + 0x48, 0x13, 0x6c, 0xab, 0x03, 0x40, 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, + 0xf5, 0xf1, 0x5d, 0x1f, 0x00, 0x4b, 0x40, 0xa1, 0x5f, 0x1f, 0x00, 0x45, + 0x9b, 0x30, 0x5b, 0x1f, 0x40, 0x42, 0x5f, 0x24, 0xa4, 0x03, 0x00, 0x44, + 0xc8, 0x95, 0x98, 0x03, 0x40, 0x42, 0x1a, 0x00, 0xfa, 0x03, 0x00, 0x42, + 0x0b, 0x00, 0xf7, 0x03, 0x00, 0x44, 0xbf, 0x1f, 0xa3, 0x03, 0x40, 0x4b, + 0xf8, 0x97, 0xec, 0x1f, 0x40, 0x51, 0x20, 0x58, 0x76, 0x03, 0x00, 0x42, + 0x49, 0x00, 0xa6, 0x03, 0x00, 0xe9, 0xa0, 0x03, 0x00, 0x42, 0x5a, 0x03, + 0xa8, 0x03, 0x40, 0x43, 0xce, 0x05, 0xa9, 0x03, 0x80, 0x4e, 0x45, 0x4a, + 0xe7, 0x9f, 0x03, 0xc0, 0x00, 0x06, 0x50, 0x00, 0x01, 0xff, 0x45, 0xb1, + 0x76, 0x49, 0x1f, 0x80, 0x2a, 0x44, 0xf5, 0xf1, 0xf9, 0x1f, 0x00, 0x45, + 0x10, 0xea, 0x48, 0x1f, 0x80, 0x0c, 0x45, 0x1c, 0x6c, 0x8c, 0x03, 0x00, + 0x45, 0x9b, 0x30, 0xf8, 0x1f, 0x40, 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, + 0xf5, 0xf1, 0x4c, 0x1f, 0x00, 0x45, 0x9b, 0x30, 0x4a, 0x1f, 0x40, 0x05, + 0x19, 0x00, 0x01, 0xff, 0x44, 0xf5, 0xf1, 0x4d, 0x1f, 0x00, 0x45, 0x9b, + 0x30, 0x4b, 0x1f, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x45, 0xb1, 0x76, + 0x69, 0x1f, 0x80, 0x55, 0x44, 0xf5, 0xf1, 0xfb, 0x1f, 0x00, 0xb0, 0x0c, + 0x45, 0x1c, 0x6c, 0x8f, 0x03, 0x00, 0x45, 0x9b, 0x30, 0xfa, 0x1f, 0x40, + 0x4d, 0x4a, 0x47, 0xfc, 0x1f, 0x00, 0x44, 0xc3, 0x88, 0x68, 0x1f, 0xc0, + 0x00, 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, 0xf5, 0xf1, 0x6c, 0x1f, 0x80, + 0x22, 0xb0, 0x0d, 0x45, 0x9b, 0x30, 0x6a, 0x1f, 0xc0, 0x00, 0x53, 0x44, + 0x47, 0xaa, 0x1f, 0x40, 0x4a, 0x41, 0xa1, 0x6e, 0x1f, 0x80, 0x06, 0x4d, + 0x4a, 0x47, 0xa8, 0x1f, 0x40, 0x53, 0x44, 0x47, 0xae, 0x1f, 0x40, 0x53, + 0x44, 0x47, 0xac, 0x1f, 0x40, 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, 0xf5, + 0xf1, 0x6d, 0x1f, 0x80, 0x22, 0xb0, 0x0d, 0x45, 0x9b, 0x30, 0x6b, 0x1f, + 0xc0, 0x00, 0x53, 0x44, 0x47, 0xab, 0x1f, 0x40, 0x4a, 0x41, 0xa1, 0x6f, + 0x1f, 0x80, 0x06, 0x4d, 0x4a, 0x47, 0xa9, 0x1f, 0x40, 0x53, 0x44, 0x47, + 0xaf, 0x1f, 0x40, 0x53, 0x44, 0x47, 0xad, 0x1f, 0x40, 0x06, 0x50, 0x00, + 0x01, 0xff, 0xa4, 0x3f, 0x46, 0xad, 0x70, 0xd9, 0x1f, 0x00, 0x44, 0xf5, + 0xf1, 0xdb, 0x1f, 0x00, 0x45, 0x10, 0xea, 0x38, 0x1f, 0x80, 0x15, 0x45, + 0x1c, 0x6c, 0x8a, 0x03, 0x00, 0xb6, 0x01, 0xff, 0x44, 0x9c, 0x30, 0xda, + 0x1f, 0x00, 0x45, 0x29, 0xea, 0xd8, 0x1f, 0x40, 0x05, 0x19, 0x00, 0x01, + 0xff, 0x44, 0xf5, 0xf1, 0x3c, 0x1f, 0x00, 0x4b, 0x40, 0xa1, 0x3e, 0x1f, + 0x00, 0x45, 0x9b, 0x30, 0x3a, 0x1f, 0x40, 0x44, 0x47, 0x61, 0x39, 0x1f, + 0x80, 0x06, 0x48, 0x13, 0x6c, 0xaa, 0x03, 0x40, 0x05, 0x19, 0x00, 0x01, + 0xff, 0x44, 0xf5, 0xf1, 0x3d, 0x1f, 0x00, 0x4b, 0x40, 0xa1, 0x3f, 0x1f, + 0x00, 0x45, 0x9b, 0x30, 0x3b, 0x1f, 0x40, 0x46, 0xcf, 0x15, 0x95, 0x03, + 0x80, 0x9c, 0x01, 0x42, 0x12, 0x00, 0x97, 0x03, 0xc0, 0x00, 0x06, 0x50, + 0x00, 0x01, 0xff, 0x45, 0xb1, 0x76, 0x29, 0x1f, 0x80, 0x55, 0x44, 0xf5, + 0xf1, 0xcb, 0x1f, 0x00, 0xb0, 0x0c, 0x45, 0x1c, 0x6c, 0x89, 0x03, 0x00, + 0x45, 0x9b, 0x30, 0xca, 0x1f, 0x40, 0x4d, 0x4a, 0x47, 0xcc, 0x1f, 0x00, + 0x44, 0xc3, 0x88, 0x28, 0x1f, 0xc0, 0x00, 0x05, 0x19, 0x00, 0x01, 0xff, + 0x44, 0xf5, 0xf1, 0x2c, 0x1f, 0x80, 0x22, 0xb0, 0x0d, 0x45, 0x9b, 0x30, + 0x2a, 0x1f, 0xc0, 0x00, 0x53, 0x44, 0x47, 0x9a, 0x1f, 0x40, 0x4a, 0x41, + 0xa1, 0x2e, 0x1f, 0x80, 0x06, 0x4d, 0x4a, 0x47, 0x98, 0x1f, 0x40, 0x53, + 0x44, 0x47, 0x9e, 0x1f, 0x40, 0x53, 0x44, 0x47, 0x9c, 0x1f, 0x40, 0x05, + 0x19, 0x00, 0x01, 0xff, 0x44, 0xf5, 0xf1, 0x2d, 0x1f, 0x80, 0x22, 0xb0, + 0x0d, 0x45, 0x9b, 0x30, 0x2b, 0x1f, 0xc0, 0x00, 0x53, 0x44, 0x47, 0x9b, + 0x1f, 0x40, 0x4a, 0x41, 0xa1, 0x2f, 0x1f, 0x80, 0x06, 0x4d, 0x4a, 0x47, + 0x99, 0x1f, 0x40, 0x53, 0x44, 0x47, 0x9f, 0x1f, 0x40, 0x53, 0x44, 0x47, + 0x9d, 0x1f, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x45, 0xb1, 0x76, 0x19, + 0x1f, 0x80, 0x2a, 0x44, 0xf5, 0xf1, 0xc9, 0x1f, 0x00, 0x45, 0x10, 0xea, + 0x18, 0x1f, 0x80, 0x0c, 0x45, 0x1c, 0x6c, 0x88, 0x03, 0x00, 0x45, 0x9b, + 0x30, 0xc8, 0x1f, 0x40, 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, 0xf5, 0xf1, + 0x1c, 0x1f, 0x00, 0x45, 0x9b, 0x30, 0x1a, 0x1f, 0x40, 0x05, 0x19, 0x00, + 0x01, 0xff, 0x44, 0xf5, 0xf1, 0x1d, 0x1f, 0x00, 0x45, 0x9b, 0x30, 0x1b, + 0x1f, 0x40, 0x44, 0x3f, 0xe4, 0x91, 0x03, 0x80, 0x06, 0x4c, 0x2f, 0x94, + 0x72, 0x03, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x45, 0xb1, 0x76, 0x09, + 0x1f, 0x80, 0x64, 0x46, 0xad, 0x70, 0xb9, 0x1f, 0x00, 0x44, 0xf5, 0xf1, + 0xbb, 0x1f, 0x00, 0xb0, 0x15, 0x45, 0x1c, 0x6c, 0x86, 0x03, 0x00, 0xb6, + 0x01, 0xff, 0x44, 0x9c, 0x30, 0xba, 0x1f, 0x00, 0x45, 0x29, 0xea, 0xb8, + 0x1f, 0x40, 0x4d, 0x4a, 0x47, 0xbc, 0x1f, 0x00, 0x44, 0xc3, 0x88, 0x08, + 0x1f, 0xc0, 0x00, 0x05, 0x19, 0x00, 0x01, 0xff, 0x44, 0xf5, 0xf1, 0x0c, + 0x1f, 0x80, 0x22, 0xb0, 0x0d, 0x45, 0x9b, 0x30, 0x0a, 0x1f, 0xc0, 0x00, + 0x53, 0x44, 0x47, 0x8a, 0x1f, 0x40, 0x4a, 0x41, 0xa1, 0x0e, 0x1f, 0x80, + 0x06, 0x4d, 0x4a, 0x47, 0x88, 0x1f, 0x40, 0x53, 0x44, 0x47, 0x8e, 0x1f, + 0x40, 0x53, 0x44, 0x47, 0x8c, 0x1f, 0x40, 0x05, 0x19, 0x00, 0x01, 0xff, + 0x44, 0xf5, 0xf1, 0x0d, 0x1f, 0x80, 0x22, 0xb0, 0x0d, 0x45, 0x9b, 0x30, + 0x0b, 0x1f, 0xc0, 0x00, 0x53, 0x44, 0x47, 0x8b, 0x1f, 0x40, 0x4a, 0x41, + 0xa1, 0x0f, 0x1f, 0x80, 0x06, 0x4d, 0x4a, 0x47, 0x89, 0x1f, 0x40, 0x53, + 0x44, 0x47, 0x8f, 0x1f, 0x40, 0x53, 0x44, 0x47, 0x8d, 0x1f, 0x40, 0x0a, + 0xdf, 0xa8, 0x15, 0x49, 0x90, 0xbc, 0x87, 0x03, 0x00, 0xb2, 0x01, 0xff, + 0x49, 0x8c, 0xbd, 0x87, 0x01, 0x01, 0x49, 0x96, 0xbf, 0x86, 0x01, 0x41, + 0x06, 0xfe, 0xd9, 0xe6, 0x01, 0xa3, 0xd7, 0x01, 0x51, 0xa7, 0x59, 0x73, + 0x01, 0x01, 0x0b, 0xd6, 0x9b, 0xb9, 0x01, 0x03, 0x10, 0x1a, 0x97, 0x01, + 0x4d, 0xde, 0x85, 0x63, 0x01, 0x01, 0x53, 0x59, 0x4b, 0x70, 0x01, 0x01, + 0x53, 0x47, 0x4d, 0x74, 0x01, 0x01, 0xb4, 0x01, 0xff, 0x08, 0xb0, 0xc6, + 0x30, 0x0a, 0x87, 0xb0, 0x01, 0xff, 0x02, 0xf3, 0x02, 0x0d, 0x43, 0xdb, + 0x06, 0x60, 0x01, 0xc1, 0x00, 0x4f, 0x06, 0x69, 0x61, 0x01, 0x41, 0x43, + 0x52, 0x4d, 0x66, 0x01, 0x81, 0x0d, 0x42, 0x32, 0x00, 0x5f, 0x01, 0xc1, + 0x00, 0x48, 0x70, 0x11, 0x6d, 0x01, 0x41, 0x4f, 0x06, 0x69, 0x67, 0x01, + 0x41, 0x02, 0xf3, 0x02, 0x33, 0x43, 0x0e, 0x0b, 0x59, 0x01, 0x81, 0x1d, + 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0x64, 0x01, 0x01, 0xa8, 0x06, 0x42, + 0x15, 0x02, 0x5c, 0x01, 0x41, 0x44, 0x7b, 0x11, 0x65, 0x01, 0x01, 0x4b, + 0xfb, 0x17, 0x6b, 0x01, 0x41, 0x80, 0x01, 0xff, 0x47, 0x71, 0x11, 0x6a, + 0x01, 0x01, 0x48, 0x40, 0x5e, 0x71, 0x01, 0x41, 0x43, 0x52, 0x4d, 0x69, + 0x01, 0x01, 0x03, 0x5f, 0x00, 0x01, 0xff, 0x47, 0x71, 0x11, 0x6e, 0x01, + 0x01, 0x48, 0x40, 0x5e, 0x72, 0x01, 0x41, 0x51, 0xed, 0x57, 0x58, 0x01, + 0x01, 0x08, 0x50, 0xc8, 0x01, 0xff, 0x45, 0x50, 0x4d, 0x68, 0x01, 0x01, + 0x43, 0x0e, 0x0b, 0x5a, 0x01, 0x01, 0x43, 0xdb, 0x06, 0x62, 0x01, 0x41, + 0x4c, 0x80, 0x39, 0x6c, 0x01, 0x01, 0x43, 0x1f, 0x0a, 0x5b, 0x01, 0xc1, + 0x00, 0x49, 0x3b, 0x47, 0x5e, 0x01, 0x41, 0x55, 0x77, 0x39, 0x6f, 0x01, + 0x01, 0x54, 0x30, 0x47, 0x5d, 0x01, 0x41, 0x02, 0xf3, 0x02, 0x5a, 0x04, + 0x0e, 0x0b, 0x20, 0x04, 0x3c, 0x5e, 0x01, 0xff, 0x44, 0x56, 0x4d, 0x57, + 0x01, 0x01, 0x47, 0x36, 0x6e, 0x50, 0x01, 0x01, 0xb4, 0x01, 0xff, 0x46, + 0x9a, 0xc2, 0x49, 0x01, 0x01, 0x4f, 0x2e, 0x6e, 0x55, 0x01, 0x41, 0x47, + 0x3c, 0x47, 0x42, 0x01, 0x01, 0xa8, 0x17, 0x47, 0x2a, 0x01, 0x40, 0x01, + 0x01, 0x09, 0x40, 0x5e, 0x01, 0xff, 0x47, 0x36, 0x6e, 0x54, 0x01, 0x01, + 0x47, 0x99, 0xc2, 0x4d, 0x01, 0x41, 0x43, 0x23, 0x00, 0x41, 0x01, 0x01, + 0x07, 0x72, 0x11, 0x01, 0xff, 0x47, 0x36, 0x6e, 0x52, 0x01, 0x01, 0x47, + 0x99, 0xc2, 0x4b, 0x01, 0x41, 0x43, 0x52, 0x4d, 0x44, 0x01, 0x81, 0x3c, + 0x42, 0x32, 0x00, 0x43, 0x01, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x47, 0x71, + 0x11, 0x45, 0x01, 0x81, 0x1c, 0x47, 0x36, 0x6e, 0x4f, 0x01, 0x01, 0xb4, + 0x01, 0xff, 0x46, 0x9a, 0xc2, 0x48, 0x01, 0x01, 0x47, 0xed, 0x3b, 0x46, + 0x01, 0xc1, 0x00, 0x48, 0x98, 0xc2, 0x4e, 0x01, 0x41, 0x80, 0x01, 0xff, + 0x47, 0x36, 0x6e, 0x53, 0x01, 0x01, 0x47, 0x99, 0xc2, 0x4c, 0x01, 0x41, + 0x80, 0x01, 0xff, 0x47, 0x36, 0x6e, 0x51, 0x01, 0x01, 0xb4, 0x01, 0xff, + 0x46, 0x9a, 0xc2, 0x4a, 0x01, 0x01, 0x47, 0xed, 0x3b, 0x47, 0x01, 0xc1, + 0x00, 0x48, 0x35, 0x6e, 0x56, 0x01, 0x41, 0xa1, 0x9c, 0x01, 0xa2, 0x82, + 0x01, 0x4f, 0xc7, 0x6b, 0xa7, 0x2a, 0x80, 0x75, 0x55, 0xf1, 0x3a, 0xdb, + 0x22, 0x00, 0xaf, 0x1d, 0x44, 0x5a, 0x03, 0x3e, 0x00, 0x00, 0x05, 0x51, + 0x00, 0x01, 0xff, 0x4d, 0x73, 0x81, 0x7a, 0x2a, 0x00, 0x43, 0x23, 0x0a, + 0xd7, 0x22, 0x00, 0x53, 0x50, 0x4c, 0x7c, 0x2a, 0x40, 0x02, 0x18, 0x00, + 0x11, 0x03, 0x32, 0x00, 0x01, 0xff, 0x49, 0xf7, 0x0c, 0x67, 0x22, 0x00, + 0x51, 0xa5, 0x5b, 0xa4, 0x2a, 0x40, 0x4b, 0xb0, 0x1e, 0x86, 0x2a, 0x00, + 0x03, 0x7b, 0x00, 0x25, 0x49, 0xec, 0x00, 0x77, 0x22, 0x00, 0x50, 0x36, + 0x67, 0x7e, 0x2a, 0xc0, 0x00, 0x0a, 0x75, 0x3b, 0x01, 0xff, 0x45, 0x5c, + 0x00, 0x82, 0x2a, 0x80, 0x06, 0x46, 0xa7, 0x13, 0x80, 0x2a, 0x40, 0x45, + 0xc2, 0x00, 0x84, 0x2a, 0x40, 0x45, 0xfb, 0x0c, 0x65, 0x22, 0x00, 0x4a, + 0xd6, 0x39, 0x73, 0x22, 0x40, 0x54, 0x93, 0x00, 0xa9, 0x2a, 0x40, 0x4f, + 0xc6, 0x6c, 0xa5, 0x2a, 0x00, 0x0a, 0xcc, 0x39, 0x01, 0xff, 0x45, 0xfb, + 0x0c, 0x69, 0x22, 0x00, 0x4a, 0xd6, 0x39, 0xe7, 0x22, 0x40, 0x05, 0x5d, + 0x00, 0x11, 0x03, 0x1b, 0x00, 0x01, 0xff, 0x4f, 0xd1, 0x70, 0x8a, 0x2a, + 0x00, 0x58, 0xf6, 0x2a, 0x88, 0x2a, 0x40, 0x61, 0xa8, 0x0d, 0x8c, 0x2a, + 0x00, 0x61, 0x0b, 0x0e, 0x92, 0x2a, 0x00, 0x50, 0xb3, 0x02, 0x78, 0x29, + 0x00, 0xb3, 0x01, 0xff, 0x07, 0xf6, 0xd1, 0x06, 0x70, 0xd9, 0x00, 0x94, + 0x2a, 0x40, 0x4f, 0xe6, 0x00, 0x90, 0x2a, 0x00, 0x48, 0xf3, 0x28, 0x8e, + 0x2a, 0x40, 0x4b, 0x52, 0x9b, 0x93, 0xf3, 0x01, 0x05, 0x43, 0xe9, 0x0c, + 0x43, 0x43, 0x65, 0x47, 0xf3, 0x01, 0x49, 0x18, 0x23, 0x60, 0x00, 0x40, + 0x4e, 0x17, 0x76, 0x57, 0x13, 0x01, 0x07, 0xec, 0x05, 0x8b, 0x01, 0x42, + 0x14, 0x05, 0x50, 0x13, 0x01, 0x05, 0x5a, 0x03, 0x48, 0x0b, 0x40, 0x77, + 0x01, 0xff, 0xa1, 0x35, 0x42, 0x27, 0x01, 0x47, 0x13, 0x01, 0xe9, 0x3f, + 0x13, 0x81, 0x26, 0x42, 0xcd, 0x02, 0x4b, 0x13, 0x01, 0xf5, 0x41, 0x13, + 0x81, 0x17, 0x08, 0x22, 0xc1, 0x01, 0xff, 0xec, 0x62, 0x13, 0x81, 0x09, + 0xf2, 0x43, 0x13, 0xc1, 0x00, 0xf2, 0x44, 0x13, 0x41, 0xec, 0x63, 0x13, + 0x41, 0xf5, 0x42, 0x13, 0x41, 0xe9, 0x40, 0x13, 0x41, 0xe1, 0x3e, 0x13, + 0x01, 0xe9, 0x48, 0x13, 0x01, 0xf5, 0x4c, 0x13, 0x41, 0xa1, 0x2b, 0xa3, + 0x1d, 0x45, 0x3f, 0x3f, 0x3c, 0x13, 0x01, 0x45, 0xf2, 0xe9, 0x5d, 0x13, + 0x01, 0x02, 0x02, 0x00, 0x01, 0xff, 0x44, 0xe5, 0x23, 0x4d, 0x13, 0x01, + 0x45, 0xec, 0x4b, 0x03, 0x13, 0x41, 0x4a, 0xd8, 0x23, 0x01, 0x13, 0x01, + 0x57, 0x33, 0x16, 0x00, 0x13, 0x41, 0x47, 0x3d, 0x16, 0x02, 0x13, 0x01, + 0x47, 0xaf, 0x88, 0x3d, 0x13, 0x41, 0xe1, 0x05, 0x13, 0x81, 0x9a, 0x02, + 0xa2, 0x8d, 0x02, 0xa3, 0x80, 0x02, 0xa4, 0xe7, 0x01, 0x42, 0x27, 0x01, + 0x0f, 0x13, 0x01, 0xa7, 0xd4, 0x01, 0x42, 0x22, 0x00, 0x39, 0x13, 0x01, + 0xe9, 0x07, 0x13, 0x81, 0xc4, 0x01, 0xaa, 0xb7, 0x01, 0xab, 0xaa, 0x01, + 0xac, 0x9d, 0x01, 0x42, 0x6c, 0x00, 0x2e, 0x13, 0x01, 0xae, 0x7f, 0x42, + 0xcd, 0x02, 0x13, 0x13, 0x01, 0xb0, 0x6d, 0x42, 0x71, 0x00, 0x30, 0x13, + 0x01, 0xb3, 0x55, 0xb4, 0x3c, 0xf5, 0x09, 0x13, 0x81, 0x33, 0xb6, 0x06, + 0x42, 0xbc, 0x22, 0x2f, 0x13, 0x41, 0xe1, 0x35, 0x13, 0x01, 0x05, 0xda, + 0x0a, 0x17, 0x07, 0x23, 0xc1, 0x01, 0xff, 0xec, 0x0c, 0x13, 0x81, 0x09, + 0xf2, 0x0b, 0x13, 0xc1, 0x00, 0xf2, 0x60, 0x13, 0x41, 0xec, 0x61, 0x13, + 0x41, 0x48, 0x3c, 0x16, 0x5e, 0x13, 0x01, 0x4f, 0x52, 0x17, 0x5f, 0x13, + 0x41, 0xf5, 0x0a, 0x13, 0x41, 0xe1, 0x24, 0x13, 0x01, 0x42, 0x22, 0x00, + 0x25, 0x13, 0x01, 0xb4, 0x01, 0xff, 0xe1, 0x1f, 0x13, 0x01, 0x42, 0x22, + 0x00, 0x20, 0x13, 0x41, 0xe1, 0x38, 0x13, 0x01, 0x42, 0x22, 0x00, 0x36, + 0x13, 0x01, 0x42, 0x40, 0x06, 0x37, 0x13, 0x41, 0xe1, 0x2a, 0x13, 0x01, + 0x42, 0x22, 0x00, 0x2b, 0x13, 0x41, 0xe1, 0x28, 0x13, 0x01, 0x42, 0x24, + 0x02, 0x19, 0x13, 0x01, 0x42, 0x2a, 0x05, 0x23, 0x13, 0x01, 0x42, 0xbc, + 0x22, 0x1e, 0x13, 0x41, 0xe1, 0x32, 0x13, 0x01, 0x42, 0x74, 0x00, 0x33, + 0x13, 0x41, 0xe1, 0x15, 0x13, 0x01, 0x42, 0x22, 0x00, 0x16, 0x13, 0x41, + 0xe1, 0x1c, 0x13, 0x01, 0x42, 0x22, 0x00, 0x1d, 0x13, 0x41, 0xe9, 0x08, + 0x13, 0x41, 0xe1, 0x17, 0x13, 0x01, 0x42, 0x22, 0x00, 0x18, 0x13, 0x41, + 0xe1, 0x26, 0x13, 0x01, 0xa4, 0x06, 0x42, 0x22, 0x00, 0x27, 0x13, 0x41, + 0xe1, 0x21, 0x13, 0x01, 0x42, 0x22, 0x00, 0x22, 0x13, 0x41, 0xe1, 0x1a, + 0x13, 0x01, 0x42, 0x22, 0x00, 0x1b, 0x13, 0x41, 0xe1, 0x2c, 0x13, 0x01, + 0x42, 0x22, 0x00, 0x2d, 0x13, 0x41, 0xe1, 0x06, 0x13, 0x01, 0xe9, 0x10, + 0x13, 0x01, 0xf5, 0x14, 0x13, 0x41, 0xa1, 0xd5, 0x01, 0x45, 0xcf, 0xdc, + 0x7d, 0xf9, 0x01, 0x44, 0xfd, 0xf0, 0xcc, 0xf3, 0x01, 0x46, 0x48, 0xde, + 0x7d, 0xf7, 0x01, 0x43, 0xa4, 0x0d, 0xbf, 0xfa, 0x01, 0x45, 0x6a, 0xea, + 0x8d, 0xf9, 0x01, 0x0c, 0xd3, 0x95, 0x01, 0xff, 0xa1, 0xa3, 0x01, 0x47, + 0x56, 0xcf, 0x31, 0x03, 0x01, 0x44, 0x75, 0xef, 0x33, 0x03, 0x01, 0x43, + 0x08, 0xac, 0x39, 0x03, 0x01, 0x45, 0x5a, 0xe6, 0x46, 0x03, 0x01, 0x44, + 0xf9, 0xef, 0x32, 0x03, 0x01, 0xa8, 0x77, 0xa9, 0x69, 0x43, 0xe0, 0xba, + 0x3e, 0x03, 0x01, 0x45, 0xef, 0xe7, 0x3a, 0x03, 0x01, 0x45, 0x0d, 0xe8, + 0x3b, 0x03, 0x01, 0x45, 0xcb, 0x91, 0x3c, 0x03, 0x01, 0xae, 0x38, 0x45, + 0xac, 0xe9, 0x49, 0x03, 0x01, 0x48, 0xb8, 0xc9, 0x40, 0x03, 0x01, 0x48, + 0x08, 0xca, 0x35, 0x03, 0x01, 0x45, 0x2e, 0xea, 0x42, 0x03, 0x01, 0x45, + 0xc4, 0xea, 0x43, 0x03, 0x01, 0xb4, 0x0c, 0x44, 0xe1, 0xf2, 0x3f, 0x03, + 0x01, 0x45, 0x5e, 0xec, 0x45, 0x03, 0x41, 0x44, 0xa9, 0xef, 0x44, 0x03, + 0x01, 0x45, 0x0e, 0xe7, 0x38, 0x03, 0x41, 0x45, 0x89, 0xe4, 0x3d, 0x03, + 0x01, 0x03, 0xee, 0x07, 0x01, 0xff, 0x48, 0x70, 0x11, 0x4a, 0x03, 0x01, + 0x42, 0x7d, 0x11, 0x41, 0x03, 0x41, 0x44, 0xed, 0xef, 0x47, 0x03, 0x01, + 0x43, 0x54, 0xcb, 0x36, 0x03, 0x41, 0x43, 0x81, 0x91, 0x37, 0x03, 0x01, + 0x44, 0x21, 0xf3, 0x48, 0x03, 0x41, 0x43, 0x8c, 0xe4, 0x30, 0x03, 0x01, + 0x45, 0x4f, 0xe7, 0x34, 0x03, 0x41, 0x45, 0xf9, 0xe7, 0x45, 0xf9, 0x01, + 0xf4, 0x10, 0xf4, 0x41, 0xa1, 0x1b, 0x4a, 0xcf, 0xa9, 0xe6, 0x29, 0x00, + 0xaf, 0x01, 0xff, 0x51, 0x86, 0x58, 0x10, 0xf3, 0x01, 0x43, 0x35, 0x4b, + 0xe4, 0xf9, 0x01, 0x49, 0x46, 0xc1, 0x1f, 0xf3, 0x41, 0x08, 0x85, 0x5b, + 0x06, 0x4a, 0x31, 0xb1, 0x5b, 0xf9, 0x41, 0x0f, 0xe4, 0x05, 0xc6, 0x02, + 0x0d, 0x76, 0x08, 0x01, 0xff, 0x43, 0xf2, 0xf3, 0x30, 0x2c, 0x00, 0xa2, + 0xac, 0x02, 0xa3, 0x9d, 0x02, 0xa4, 0x88, 0x02, 0xa6, 0xf9, 0x01, 0x47, + 0x4e, 0xd1, 0x33, 0x2c, 0x00, 0x44, 0x2d, 0xf0, 0x48, 0x2c, 0x00, 0xe9, + 0x3b, 0x2c, 0x80, 0xc2, 0x01, 0x44, 0xc5, 0xf0, 0x3d, 0x2c, 0x00, 0xac, + 0xad, 0x01, 0x47, 0xfd, 0x6a, 0x3f, 0x2c, 0x00, 0x45, 0xf3, 0xe8, 0x40, + 0x2c, 0x00, 0xaf, 0x92, 0x01, 0xb0, 0x85, 0x01, 0x45, 0x6f, 0xea, 0x43, + 0x2c, 0x00, 0xb3, 0x51, 0xb4, 0x3d, 0x43, 0x0a, 0xd6, 0x46, 0x2c, 0x00, + 0x44, 0xf5, 0xf2, 0x32, 0x2c, 0x00, 0xb9, 0x0f, 0xba, 0x01, 0xff, 0x45, + 0xf1, 0xe5, 0x38, 0x2c, 0x00, 0x46, 0x8c, 0xdc, 0x36, 0x2c, 0x40, 0x43, + 0xb3, 0x00, 0x51, 0x2c, 0x00, 0xa5, 0x08, 0xef, 0x56, 0x2c, 0x00, 0xf5, + 0x53, 0x2c, 0x40, 0xb2, 0x06, 0x43, 0x26, 0x0a, 0x35, 0x2c, 0x40, 0xe9, + 0x50, 0x2c, 0x00, 0xf5, 0x4f, 0x2c, 0x40, 0x4b, 0x3d, 0xa2, 0x5d, 0x2c, + 0x00, 0x42, 0x5a, 0x03, 0x4c, 0x2c, 0x00, 0x45, 0x27, 0xec, 0x45, 0x2c, + 0x40, 0xa8, 0x19, 0x44, 0x15, 0xf1, 0x44, 0x2c, 0x00, 0x48, 0x46, 0xbf, + 0x54, 0x2c, 0x80, 0x06, 0x49, 0x0a, 0xbe, 0x52, 0x2c, 0x40, 0x4a, 0x9b, + 0xa6, 0x55, 0x2c, 0x40, 0xe1, 0x4e, 0x2c, 0x00, 0x42, 0x12, 0x00, 0x4b, + 0x2c, 0xc0, 0x00, 0x43, 0x04, 0x8b, 0x5c, 0x2c, 0x40, 0xe5, 0x4a, 0x2c, + 0x00, 0x45, 0x33, 0xdf, 0x42, 0x2c, 0x40, 0x42, 0x3d, 0x16, 0x41, 0x2c, + 0x00, 0x42, 0x5c, 0x01, 0x49, 0x2c, 0x40, 0x4f, 0xf5, 0x6a, 0x5e, 0x2c, + 0x00, 0x46, 0xf3, 0xd2, 0x3e, 0x2c, 0x40, 0x4b, 0x22, 0xa0, 0x3a, 0x2c, + 0x00, 0x07, 0x9e, 0x21, 0x0f, 0x02, 0x54, 0x28, 0x01, 0xff, 0xe5, 0x39, + 0x2c, 0x00, 0x44, 0xda, 0x85, 0x5b, 0x2c, 0x40, 0x47, 0x80, 0xcf, 0x59, + 0x2c, 0x00, 0x49, 0x45, 0xbf, 0x57, 0x2c, 0x40, 0x43, 0xe7, 0x05, 0x5a, + 0x2c, 0x00, 0x44, 0x5a, 0xbf, 0x47, 0x2c, 0x40, 0x45, 0xa9, 0xe7, 0x3c, + 0x2c, 0x00, 0x44, 0xb9, 0xf1, 0x34, 0x2c, 0x00, 0x44, 0x5d, 0xf3, 0x37, + 0x2c, 0x40, 0x4d, 0xe4, 0x80, 0x5f, 0x2c, 0x00, 0x45, 0xec, 0x80, 0x4d, + 0x2c, 0x40, 0x46, 0x81, 0xcf, 0x58, 0x2c, 0x00, 0x43, 0x8f, 0xd2, 0x31, + 0x2c, 0x40, 0x43, 0xf2, 0xf3, 0x00, 0x2c, 0x00, 0xa2, 0xac, 0x02, 0xa3, + 0x9d, 0x02, 0xa4, 0x88, 0x02, 0xa6, 0xf9, 0x01, 0x47, 0x4e, 0xd1, 0x03, + 0x2c, 0x00, 0x44, 0x2d, 0xf0, 0x18, 0x2c, 0x00, 0xe9, 0x0b, 0x2c, 0x80, + 0xc2, 0x01, 0x44, 0xc5, 0xf0, 0x0d, 0x2c, 0x00, 0xac, 0xad, 0x01, 0x47, + 0xfd, 0x6a, 0x0f, 0x2c, 0x00, 0x45, 0xf3, 0xe8, 0x10, 0x2c, 0x00, 0xaf, + 0x92, 0x01, 0xb0, 0x85, 0x01, 0x45, 0x6f, 0xea, 0x13, 0x2c, 0x00, 0xb3, + 0x51, 0xb4, 0x3d, 0x43, 0x0a, 0xd6, 0x16, 0x2c, 0x00, 0x44, 0xf5, 0xf2, + 0x02, 0x2c, 0x00, 0xb9, 0x0f, 0xba, 0x01, 0xff, 0x45, 0xf1, 0xe5, 0x08, + 0x2c, 0x00, 0x46, 0x8c, 0xdc, 0x06, 0x2c, 0x40, 0x43, 0xb3, 0x00, 0x21, + 0x2c, 0x00, 0xa5, 0x08, 0xef, 0x26, 0x2c, 0x00, 0xf5, 0x23, 0x2c, 0x40, + 0xb2, 0x06, 0x43, 0x26, 0x0a, 0x05, 0x2c, 0x40, 0xe9, 0x20, 0x2c, 0x00, + 0xf5, 0x1f, 0x2c, 0x40, 0x4b, 0x3d, 0xa2, 0x2d, 0x2c, 0x00, 0x42, 0x5a, + 0x03, 0x1c, 0x2c, 0x00, 0x45, 0x27, 0xec, 0x15, 0x2c, 0x40, 0xa8, 0x19, + 0x44, 0x15, 0xf1, 0x14, 0x2c, 0x00, 0x48, 0x46, 0xbf, 0x24, 0x2c, 0x80, + 0x06, 0x49, 0x0a, 0xbe, 0x22, 0x2c, 0x40, 0x4a, 0x9b, 0xa6, 0x25, 0x2c, + 0x40, 0xe1, 0x1e, 0x2c, 0x00, 0x42, 0x12, 0x00, 0x1b, 0x2c, 0xc0, 0x00, + 0x43, 0x04, 0x8b, 0x2c, 0x2c, 0x40, 0xe5, 0x1a, 0x2c, 0x00, 0x45, 0x33, + 0xdf, 0x12, 0x2c, 0x40, 0x42, 0x3d, 0x16, 0x11, 0x2c, 0x00, 0x42, 0x5c, + 0x01, 0x19, 0x2c, 0x40, 0x4f, 0xf5, 0x6a, 0x2e, 0x2c, 0x00, 0x46, 0xf3, + 0xd2, 0x0e, 0x2c, 0x40, 0x4b, 0x22, 0xa0, 0x0a, 0x2c, 0x00, 0x07, 0x9e, + 0x21, 0x0f, 0x02, 0x54, 0x28, 0x01, 0xff, 0xe5, 0x09, 0x2c, 0x00, 0x44, + 0xda, 0x85, 0x2b, 0x2c, 0x40, 0x47, 0x80, 0xcf, 0x29, 0x2c, 0x00, 0x49, + 0x45, 0xbf, 0x27, 0x2c, 0x40, 0x43, 0xe7, 0x05, 0x2a, 0x2c, 0x00, 0x44, + 0x5a, 0xbf, 0x17, 0x2c, 0x40, 0x45, 0xa9, 0xe7, 0x0c, 0x2c, 0x00, 0x44, + 0xb9, 0xf1, 0x04, 0x2c, 0x00, 0x44, 0x5d, 0xf3, 0x07, 0x2c, 0x40, 0x4d, + 0xe4, 0x80, 0x2f, 0x2c, 0x00, 0x45, 0xec, 0x80, 0x1d, 0x2c, 0x40, 0x46, + 0x81, 0xcf, 0x28, 0x2c, 0x00, 0x43, 0x8f, 0xd2, 0x01, 0x2c, 0x40, 0x4a, + 0xd5, 0xad, 0x37, 0x21, 0x00, 0x49, 0x51, 0xbc, 0xda, 0xfa, 0x01, 0xb2, + 0x01, 0xff, 0x49, 0xbe, 0xb5, 0x92, 0xf9, 0x01, 0xec, 0x67, 0xf4, 0xc1, + 0x00, 0x48, 0x77, 0x4b, 0xca, 0xf6, 0x41, 0x42, 0x17, 0x00, 0x99, 0x26, + 0x80, 0xb6, 0x0a, 0xad, 0xa7, 0x0a, 0x43, 0x4d, 0x7e, 0xde, 0xf9, 0x01, + 0xaf, 0x0c, 0x4f, 0xc0, 0x72, 0xb0, 0x20, 0x00, 0x47, 0x1e, 0xd6, 0x13, + 0x30, 0x40, 0xad, 0x81, 0x09, 0x06, 0xcd, 0x9b, 0x01, 0xff, 0x0f, 0xe4, + 0x05, 0xf3, 0x06, 0x07, 0xec, 0x05, 0xc1, 0x04, 0x18, 0x1e, 0x2a, 0x8f, + 0x02, 0x53, 0x17, 0x4c, 0xfb, 0x10, 0x00, 0x0d, 0x76, 0x08, 0x01, 0xff, + 0xa1, 0xf7, 0x01, 0x43, 0x26, 0x16, 0x01, 0x2d, 0x00, 0xa3, 0xd4, 0x01, + 0x43, 0x6c, 0x11, 0x03, 0x2d, 0x00, 0x42, 0x92, 0x01, 0x04, 0x2d, 0x00, + 0xa7, 0xb9, 0x01, 0xa8, 0x9c, 0x01, 0x42, 0x9e, 0x01, 0x08, 0x2d, 0x00, + 0xaa, 0x87, 0x01, 0xab, 0x79, 0x43, 0x49, 0x0e, 0x0a, 0x2d, 0x00, 0x43, + 0x41, 0x18, 0x0b, 0x2d, 0x00, 0x43, 0x1d, 0x27, 0x0c, 0x2d, 0x00, 0x42, + 0x10, 0x00, 0x0d, 0x2d, 0x00, 0xb0, 0x53, 0x43, 0x88, 0xf4, 0x17, 0x2d, + 0x00, 0x43, 0x75, 0x82, 0x10, 0x2d, 0x00, 0xb3, 0x39, 0x02, 0x12, 0x00, + 0x2d, 0x42, 0x42, 0x0b, 0x13, 0x2d, 0x00, 0x43, 0xf1, 0x2a, 0x05, 0x2d, + 0x00, 0x42, 0x15, 0x01, 0x23, 0x2d, 0x00, 0x43, 0x04, 0xef, 0x1e, 0x2d, + 0x00, 0x42, 0x03, 0x1d, 0x27, 0x2d, 0x00, 0xba, 0x01, 0xff, 0x42, 0x92, + 0x01, 0x06, 0x2d, 0x00, 0x43, 0xc9, 0x02, 0x0f, 0x2d, 0x40, 0xee, 0x07, + 0x2d, 0x00, 0xf2, 0x12, 0x2d, 0x40, 0x42, 0x1a, 0x00, 0x11, 0x2d, 0x00, + 0x43, 0x7a, 0x16, 0x18, 0x2d, 0x40, 0x42, 0x17, 0x00, 0x0e, 0x2d, 0x00, + 0x43, 0xc9, 0x02, 0x14, 0x2d, 0x40, 0x42, 0x1a, 0x00, 0x09, 0x2d, 0x00, + 0x43, 0xc9, 0x02, 0x15, 0x2d, 0x40, 0x43, 0x90, 0x00, 0x1f, 0x2d, 0x00, + 0x42, 0x62, 0x01, 0x1b, 0x2d, 0x40, 0xa1, 0x10, 0xe5, 0x21, 0x2d, 0x00, + 0x42, 0xf4, 0x02, 0x22, 0x2d, 0x00, 0x42, 0x60, 0x51, 0x25, 0x2d, 0x40, + 0xe5, 0x20, 0x2d, 0x00, 0xf2, 0x24, 0x2d, 0x40, 0x42, 0x1a, 0x00, 0x02, + 0x2d, 0x00, 0x43, 0x90, 0x00, 0x16, 0x2d, 0x40, 0x42, 0x1a, 0x00, 0x1a, + 0x2d, 0x00, 0xa8, 0x06, 0x42, 0x62, 0x01, 0x1c, 0x2d, 0x40, 0x42, 0x17, + 0x00, 0x1d, 0x2d, 0x00, 0x42, 0x9e, 0x01, 0x19, 0x2d, 0x40, 0x42, 0x92, + 0x01, 0x2d, 0x2d, 0x00, 0xee, 0x00, 0x2d, 0x40, 0xa1, 0x9a, 0x02, 0x43, + 0x26, 0x16, 0x91, 0x1c, 0x00, 0xa3, 0xf7, 0x01, 0x43, 0x6c, 0x11, 0x93, + 0x1c, 0x00, 0xa5, 0xe4, 0x01, 0x42, 0xf3, 0x02, 0xb6, 0x1c, 0x00, 0xa7, + 0xcf, 0x01, 0xa8, 0xab, 0x01, 0x42, 0x9e, 0x01, 0x98, 0x1c, 0x00, 0xaa, + 0x96, 0x01, 0xab, 0x87, 0x01, 0x02, 0x74, 0x00, 0x79, 0x43, 0x41, 0x18, + 0x9b, 0x1c, 0x00, 0x43, 0x1d, 0x27, 0x9c, 0x1c, 0x00, 0x42, 0x10, 0x00, + 0x9d, 0x1c, 0x00, 0xb0, 0x59, 0x43, 0x88, 0xf4, 0xa7, 0x1c, 0x00, 0x43, + 0x75, 0x82, 0xa0, 0x1c, 0x00, 0xb3, 0x3f, 0xb4, 0x2d, 0x42, 0x42, 0x0b, + 0xa3, 0x1c, 0x00, 0x43, 0xf1, 0x2a, 0x95, 0x1c, 0x00, 0x42, 0x15, 0x01, + 0xb3, 0x1c, 0x00, 0x43, 0x04, 0xef, 0xae, 0x1c, 0x00, 0x42, 0x03, 0x1d, + 0xb7, 0x1c, 0x00, 0xba, 0x01, 0xff, 0x42, 0x92, 0x01, 0x96, 0x1c, 0x00, + 0x43, 0xc9, 0x02, 0x9f, 0x1c, 0x40, 0xa1, 0x06, 0x49, 0xa4, 0xc0, 0xb9, + 0x1c, 0x40, 0xee, 0x97, 0x1c, 0x00, 0xf2, 0xa2, 0x1c, 0x40, 0x42, 0x1a, + 0x00, 0xa1, 0x1c, 0x00, 0x43, 0x7a, 0x16, 0xa8, 0x1c, 0x40, 0x42, 0x17, + 0x00, 0x9e, 0x1c, 0x00, 0x43, 0xc9, 0x02, 0xa4, 0x1c, 0x40, 0x49, 0x96, + 0xb6, 0xbf, 0x1c, 0x00, 0xf3, 0x9a, 0x1c, 0x40, 0x42, 0x1a, 0x00, 0x99, + 0x1c, 0x00, 0x43, 0xc9, 0x02, 0xa5, 0x1c, 0x40, 0x43, 0x90, 0x00, 0xaf, + 0x1c, 0x00, 0x42, 0x62, 0x01, 0xab, 0x1c, 0x40, 0xa1, 0x10, 0xe5, 0xb1, + 0x1c, 0x00, 0x42, 0xf4, 0x02, 0xb2, 0x1c, 0x00, 0x42, 0x60, 0x51, 0xb5, + 0x1c, 0x40, 0xe5, 0xb0, 0x1c, 0x00, 0xf2, 0xb4, 0x1c, 0xc0, 0x00, 0x46, + 0xb0, 0x47, 0xbe, 0x1c, 0x40, 0x42, 0x1a, 0x00, 0x92, 0x1c, 0x00, 0x43, + 0x90, 0x00, 0xa6, 0x1c, 0x40, 0x44, 0xd4, 0x88, 0xb8, 0x1c, 0x00, 0xee, + 0x94, 0x1c, 0x40, 0x42, 0x1a, 0x00, 0xaa, 0x1c, 0x00, 0xa8, 0x06, 0x42, + 0x62, 0x01, 0xac, 0x1c, 0x40, 0x42, 0x17, 0x00, 0xad, 0x1c, 0x00, 0x42, + 0x9e, 0x01, 0xa9, 0x1c, 0x40, 0x42, 0x92, 0x01, 0xbd, 0x1c, 0x00, 0x42, + 0x9e, 0x01, 0xba, 0x1c, 0x00, 0xee, 0x90, 0x1c, 0x40, 0xa1, 0x9a, 0x02, + 0x43, 0x26, 0x16, 0xd1, 0x10, 0x00, 0xa3, 0xf7, 0x01, 0x43, 0x6c, 0x11, + 0xd3, 0x10, 0x00, 0xa5, 0xe4, 0x01, 0x42, 0xf3, 0x02, 0xf6, 0x10, 0x00, + 0xa7, 0xcf, 0x01, 0xa8, 0xab, 0x01, 0x42, 0x9e, 0x01, 0xd8, 0x10, 0x00, + 0xaa, 0x96, 0x01, 0xab, 0x87, 0x01, 0x02, 0x74, 0x00, 0x79, 0x43, 0x41, + 0x18, 0xdb, 0x10, 0x00, 0x43, 0x1d, 0x27, 0xdc, 0x10, 0x00, 0x42, 0x10, + 0x00, 0xdd, 0x10, 0x00, 0xb0, 0x59, 0x43, 0x88, 0xf4, 0xe7, 0x10, 0x00, + 0x43, 0x75, 0x82, 0xe0, 0x10, 0x00, 0xb3, 0x3f, 0xb4, 0x2d, 0x42, 0x42, + 0x0b, 0xe3, 0x10, 0x00, 0x43, 0xf1, 0x2a, 0xd5, 0x10, 0x00, 0x42, 0x15, + 0x01, 0xf3, 0x10, 0x00, 0x43, 0x04, 0xef, 0xee, 0x10, 0x00, 0x42, 0x03, + 0x1d, 0xf7, 0x10, 0x00, 0xba, 0x01, 0xff, 0x42, 0x92, 0x01, 0xd6, 0x10, + 0x00, 0x43, 0xc9, 0x02, 0xdf, 0x10, 0x40, 0xa1, 0x06, 0x49, 0xa4, 0xc0, + 0xf9, 0x10, 0x40, 0xee, 0xd7, 0x10, 0x00, 0xf2, 0xe2, 0x10, 0x40, 0x42, + 0x1a, 0x00, 0xe1, 0x10, 0x00, 0x43, 0x7a, 0x16, 0xe8, 0x10, 0x40, 0x42, + 0x17, 0x00, 0xde, 0x10, 0x00, 0x43, 0xc9, 0x02, 0xe4, 0x10, 0x40, 0x49, + 0x96, 0xb6, 0xff, 0x10, 0x00, 0xf3, 0xda, 0x10, 0x40, 0x42, 0x1a, 0x00, + 0xd9, 0x10, 0x00, 0x43, 0xc9, 0x02, 0xe5, 0x10, 0x40, 0x43, 0x90, 0x00, + 0xef, 0x10, 0x00, 0x42, 0x62, 0x01, 0xeb, 0x10, 0x40, 0xa1, 0x10, 0xe5, + 0xf1, 0x10, 0x00, 0x42, 0xf4, 0x02, 0xf2, 0x10, 0x00, 0x42, 0x60, 0x51, + 0xf5, 0x10, 0x40, 0xe5, 0xf0, 0x10, 0x00, 0xf2, 0xf4, 0x10, 0xc0, 0x00, + 0x46, 0xb0, 0x47, 0xfe, 0x10, 0x40, 0x42, 0x1a, 0x00, 0xd2, 0x10, 0x00, + 0x43, 0x90, 0x00, 0xe6, 0x10, 0x40, 0x44, 0xd4, 0x88, 0xf8, 0x10, 0x00, + 0xee, 0xd4, 0x10, 0x40, 0x42, 0x1a, 0x00, 0xea, 0x10, 0x00, 0xa8, 0x06, + 0x42, 0x62, 0x01, 0xec, 0x10, 0x40, 0x42, 0x17, 0x00, 0xed, 0x10, 0x00, + 0x42, 0x9e, 0x01, 0xe9, 0x10, 0x40, 0x42, 0x92, 0x01, 0xfd, 0x10, 0x00, + 0x42, 0x9e, 0x01, 0xfa, 0x10, 0x00, 0xee, 0xd0, 0x10, 0x40, 0xa1, 0xf7, + 0x01, 0x43, 0x26, 0x16, 0xa1, 0x10, 0x00, 0xa3, 0xd4, 0x01, 0x43, 0x6c, + 0x11, 0xa3, 0x10, 0x00, 0x42, 0x92, 0x01, 0xa4, 0x10, 0x00, 0xa7, 0xb9, + 0x01, 0xa8, 0x9c, 0x01, 0x42, 0x9e, 0x01, 0xa8, 0x10, 0x00, 0xaa, 0x87, + 0x01, 0xab, 0x79, 0x43, 0x49, 0x0e, 0xaa, 0x10, 0x00, 0x43, 0x41, 0x18, + 0xab, 0x10, 0x00, 0x43, 0x1d, 0x27, 0xac, 0x10, 0x00, 0x42, 0x10, 0x00, + 0xad, 0x10, 0x00, 0xb0, 0x53, 0x43, 0x88, 0xf4, 0xb7, 0x10, 0x00, 0x43, + 0x75, 0x82, 0xb0, 0x10, 0x00, 0xb3, 0x39, 0x02, 0x12, 0x00, 0x2d, 0x42, + 0x42, 0x0b, 0xb3, 0x10, 0x00, 0x43, 0xf1, 0x2a, 0xa5, 0x10, 0x00, 0x42, + 0x15, 0x01, 0xc3, 0x10, 0x00, 0x43, 0x04, 0xef, 0xbe, 0x10, 0x00, 0x42, + 0x03, 0x1d, 0xc7, 0x10, 0x00, 0xba, 0x01, 0xff, 0x42, 0x92, 0x01, 0xa6, + 0x10, 0x00, 0x43, 0xc9, 0x02, 0xaf, 0x10, 0x40, 0xee, 0xa7, 0x10, 0x00, + 0xf2, 0xb2, 0x10, 0x40, 0x42, 0x1a, 0x00, 0xb1, 0x10, 0x00, 0x43, 0x7a, + 0x16, 0xb8, 0x10, 0x40, 0x42, 0x17, 0x00, 0xae, 0x10, 0x00, 0x43, 0xc9, + 0x02, 0xb4, 0x10, 0x40, 0x42, 0x1a, 0x00, 0xa9, 0x10, 0x00, 0x43, 0xc9, + 0x02, 0xb5, 0x10, 0x40, 0x43, 0x90, 0x00, 0xbf, 0x10, 0x00, 0x42, 0x62, + 0x01, 0xbb, 0x10, 0x40, 0xa1, 0x10, 0xe5, 0xc1, 0x10, 0x00, 0x42, 0xf4, + 0x02, 0xc2, 0x10, 0x00, 0x42, 0x60, 0x51, 0xc5, 0x10, 0x40, 0xe5, 0xc0, + 0x10, 0x00, 0xf2, 0xc4, 0x10, 0x40, 0x42, 0x1a, 0x00, 0xa2, 0x10, 0x00, + 0x43, 0x90, 0x00, 0xb6, 0x10, 0x40, 0x42, 0x1a, 0x00, 0xba, 0x10, 0x00, + 0xa8, 0x06, 0x42, 0x62, 0x01, 0xbc, 0x10, 0x40, 0x42, 0x17, 0x00, 0xbd, + 0x10, 0x00, 0x42, 0x9e, 0x01, 0xb9, 0x10, 0x40, 0x42, 0x92, 0x01, 0xcd, + 0x10, 0x00, 0xee, 0xa0, 0x10, 0x40, 0x0d, 0x7c, 0x80, 0x1c, 0x05, 0x9d, + 0x55, 0x01, 0xff, 0x4b, 0xb6, 0x97, 0x3a, 0x22, 0x00, 0x08, 0xf3, 0x0c, + 0x01, 0xff, 0x45, 0xfb, 0x0c, 0x51, 0x22, 0x00, 0x4a, 0xd6, 0x39, 0x4e, + 0x22, 0x40, 0xa1, 0x5b, 0xa3, 0x3f, 0x09, 0x0c, 0xb9, 0x2f, 0x48, 0x98, + 0xc7, 0xe8, 0xce, 0x01, 0xb0, 0x12, 0x46, 0xbc, 0xdf, 0xe4, 0xce, 0x01, + 0x49, 0x0b, 0xc0, 0xe1, 0xce, 0x01, 0x43, 0x10, 0x50, 0xef, 0xce, 0x41, + 0x46, 0xea, 0xde, 0xe0, 0xce, 0x01, 0x02, 0xd6, 0x13, 0x01, 0xff, 0x43, + 0x2c, 0x0e, 0xeb, 0xce, 0x01, 0xf2, 0xed, 0xce, 0x41, 0x44, 0xed, 0xee, + 0xe3, 0xce, 0x01, 0x44, 0x95, 0xf0, 0xec, 0xce, 0x41, 0xa1, 0x06, 0x49, + 0x44, 0xbd, 0xe6, 0xce, 0x41, 0x4c, 0xdb, 0x93, 0xe7, 0xce, 0x01, 0x44, + 0x3d, 0xf2, 0xe9, 0xce, 0x01, 0x4c, 0x33, 0x96, 0xee, 0xce, 0x41, 0x49, + 0x6e, 0xb7, 0xe5, 0xce, 0x01, 0x44, 0xf9, 0xf0, 0xe2, 0xce, 0x01, 0x46, + 0x88, 0x30, 0xea, 0xce, 0x41, 0x46, 0x9b, 0xba, 0x8e, 0xf4, 0x01, 0x43, + 0x57, 0x07, 0x4a, 0x26, 0x40, 0x05, 0x50, 0x00, 0x01, 0xff, 0x48, 0x08, + 0xc2, 0xee, 0x26, 0x00, 0x47, 0x34, 0xd4, 0xed, 0x26, 0x40, 0x46, 0x00, + 0xde, 0xb2, 0xf3, 0x01, 0xb2, 0x01, 0xff, 0x03, 0x05, 0x20, 0x06, 0x43, + 0xbc, 0x04, 0xc4, 0xf9, 0x41, 0xa3, 0x96, 0x02, 0x06, 0xef, 0x06, 0xcf, + 0x01, 0x46, 0x96, 0x63, 0x6e, 0x0d, 0x01, 0x4a, 0x67, 0x98, 0x8f, 0x0d, + 0x01, 0x49, 0xdf, 0x71, 0x8e, 0x0d, 0x01, 0x52, 0xc1, 0x54, 0x6f, 0x0d, + 0x01, 0xb3, 0x25, 0x06, 0x3c, 0x39, 0x01, 0xff, 0x4b, 0x42, 0x39, 0x4e, + 0x0d, 0x01, 0x05, 0x5a, 0x03, 0x01, 0xff, 0xe1, 0x4a, 0x0d, 0x01, 0xe5, + 0x69, 0x0d, 0x81, 0x08, 0xe9, 0x4b, 0x0d, 0x01, 0xef, 0x4c, 0x0d, 0x41, + 0xe5, 0x4d, 0x0d, 0x41, 0x0c, 0x77, 0x08, 0x06, 0x44, 0x24, 0xeb, 0x4f, + 0x0d, 0x41, 0xe1, 0x70, 0x0d, 0x01, 0x42, 0x16, 0x00, 0x74, 0x0d, 0x01, + 0x42, 0x37, 0x00, 0x71, 0x0d, 0x01, 0x42, 0xf0, 0x10, 0x7a, 0x0d, 0x01, + 0x42, 0x0c, 0x08, 0x80, 0x0d, 0x01, 0x42, 0x24, 0x02, 0x79, 0x0d, 0x01, + 0x42, 0x22, 0x00, 0x83, 0x0d, 0x01, 0x42, 0x56, 0x19, 0x75, 0x0d, 0x01, + 0x42, 0x1b, 0x02, 0x73, 0x0d, 0x01, 0x42, 0x74, 0x00, 0x78, 0x0d, 0x01, + 0x42, 0x6c, 0x00, 0x72, 0x0d, 0x01, 0xae, 0x3a, 0x04, 0x2e, 0x25, 0x2a, + 0x42, 0xbb, 0x09, 0x82, 0x0d, 0x01, 0x42, 0x71, 0x00, 0x7e, 0x0d, 0x01, + 0x42, 0x40, 0x06, 0x76, 0x0d, 0x01, 0x42, 0x12, 0x00, 0x7d, 0x0d, 0x01, + 0x42, 0xa9, 0x01, 0x77, 0x0d, 0x01, 0x42, 0xed, 0x26, 0x7b, 0x0d, 0x01, + 0x42, 0xbc, 0x22, 0x7c, 0x0d, 0x41, 0x42, 0x1b, 0x02, 0x84, 0x0d, 0x01, + 0x42, 0x2a, 0x05, 0x85, 0x0d, 0x41, 0xe1, 0x81, 0x0d, 0x01, 0x42, 0xbc, + 0x22, 0x7f, 0x0d, 0x41, 0x45, 0x12, 0x0b, 0x48, 0x0d, 0x01, 0xa6, 0x2e, + 0x44, 0xcf, 0x2a, 0x49, 0x0d, 0x01, 0x43, 0x0e, 0x0b, 0x41, 0x0d, 0x01, + 0xb3, 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, 0x40, 0x0d, 0x41, 0x44, 0x25, + 0x01, 0x43, 0x0d, 0x01, 0x42, 0x15, 0x02, 0x42, 0x0d, 0x41, 0x44, 0xc9, + 0x1d, 0x47, 0x0d, 0x01, 0x42, 0x01, 0x26, 0x46, 0x0d, 0x41, 0x43, 0xd2, + 0x05, 0x45, 0x0d, 0x01, 0x43, 0xf6, 0x06, 0x44, 0x0d, 0x41, 0x0e, 0xe5, + 0x05, 0x24, 0xaf, 0x01, 0xff, 0x0a, 0xb7, 0xad, 0x11, 0x08, 0x29, 0x33, + 0x01, 0xff, 0x4f, 0x89, 0x6d, 0x6a, 0x0d, 0x01, 0x51, 0x60, 0x5c, 0x6d, + 0x0d, 0x41, 0x47, 0x3c, 0x1e, 0x6b, 0x0d, 0x01, 0x4e, 0x18, 0x62, 0x6c, + 0x0d, 0x41, 0xe1, 0x50, 0x0d, 0x01, 0x42, 0x16, 0x00, 0x54, 0x0d, 0x01, + 0x42, 0x37, 0x00, 0x51, 0x0d, 0x01, 0x42, 0xf0, 0x10, 0x5a, 0x0d, 0x01, + 0x42, 0x0c, 0x08, 0x60, 0x0d, 0x01, 0x42, 0x24, 0x02, 0x59, 0x0d, 0x01, + 0x42, 0x22, 0x00, 0x63, 0x0d, 0x01, 0x42, 0x56, 0x19, 0x55, 0x0d, 0x01, + 0x42, 0x1b, 0x02, 0x53, 0x0d, 0x01, 0x42, 0x74, 0x00, 0x58, 0x0d, 0x01, + 0x42, 0x6c, 0x00, 0x52, 0x0d, 0x01, 0xae, 0x3a, 0x04, 0x2e, 0x25, 0x2a, + 0x42, 0xbb, 0x09, 0x62, 0x0d, 0x01, 0x42, 0x71, 0x00, 0x5e, 0x0d, 0x01, + 0x42, 0x40, 0x06, 0x56, 0x0d, 0x01, 0x42, 0x12, 0x00, 0x5d, 0x0d, 0x01, + 0x42, 0xa9, 0x01, 0x57, 0x0d, 0x01, 0x42, 0xed, 0x26, 0x5b, 0x0d, 0x01, + 0x42, 0xbc, 0x22, 0x5c, 0x0d, 0x41, 0x42, 0x1b, 0x02, 0x64, 0x0d, 0x01, + 0x42, 0x2a, 0x05, 0x65, 0x0d, 0x41, 0xe1, 0x61, 0x0d, 0x01, 0x42, 0xbc, + 0x22, 0x5f, 0x0d, 0x41, 0xa1, 0x99, 0x0b, 0xa5, 0xe5, 0x0a, 0xa9, 0x86, + 0x09, 0xac, 0xd9, 0x07, 0xaf, 0x92, 0x06, 0xb2, 0x9b, 0x05, 0xb5, 0x01, + 0xff, 0x47, 0xc9, 0xd0, 0xfd, 0x26, 0x00, 0x02, 0x60, 0x07, 0x1a, 0xae, + 0x06, 0x42, 0x46, 0x03, 0xdb, 0x23, 0x40, 0x51, 0x96, 0x59, 0x61, 0x20, + 0x00, 0x48, 0xb8, 0xc5, 0xb1, 0x26, 0x00, 0x43, 0xf6, 0xc7, 0x08, 0xce, + 0x41, 0x80, 0xcf, 0x04, 0x06, 0x3b, 0x50, 0x01, 0xff, 0xa1, 0xb5, 0x04, + 0x4a, 0x5d, 0xa8, 0xe4, 0xff, 0x00, 0xa3, 0x88, 0x04, 0xa4, 0xb9, 0x03, + 0xa5, 0xaa, 0x03, 0x49, 0x81, 0x16, 0x0e, 0xff, 0x00, 0x02, 0x87, 0x00, + 0x93, 0x03, 0x4c, 0xc7, 0x8f, 0x0d, 0xff, 0x00, 0xac, 0x83, 0x01, 0x46, + 0xad, 0x70, 0xe3, 0xff, 0x00, 0xae, 0x6f, 0xb0, 0x5b, 0x02, 0x7c, 0x00, + 0x4b, 0xb2, 0x26, 0xb3, 0x18, 0x45, 0x35, 0x23, 0x5e, 0xff, 0x00, 0x4d, + 0xcd, 0x0b, 0x5c, 0xff, 0x00, 0x48, 0x90, 0xcc, 0xe6, 0xff, 0x00, 0x48, + 0x2f, 0x7f, 0xe5, 0xff, 0x40, 0x48, 0xda, 0x59, 0x1b, 0xff, 0x00, 0x46, + 0x50, 0x31, 0x0f, 0xff, 0x40, 0x4e, 0x67, 0x72, 0x3c, 0xff, 0x00, 0x05, + 0xc9, 0x00, 0x01, 0xff, 0x4d, 0x72, 0x0b, 0x5d, 0xff, 0x00, 0x4b, 0xd8, + 0x21, 0x09, 0xff, 0x00, 0x4e, 0xc8, 0x26, 0x3d, 0xff, 0x00, 0x51, 0x6e, + 0x5f, 0x60, 0xff, 0x40, 0x4b, 0xa8, 0x34, 0x1f, 0xff, 0x00, 0x4c, 0x1b, + 0x05, 0x02, 0xff, 0x40, 0x4b, 0xe1, 0x9b, 0x05, 0xff, 0x00, 0x48, 0xe0, + 0x71, 0x0b, 0xff, 0x00, 0x49, 0xac, 0xaf, 0xe1, 0xff, 0x40, 0x47, 0x8b, + 0x73, 0xe2, 0xff, 0x00, 0x4a, 0x06, 0x68, 0x03, 0xff, 0x40, 0x05, 0xdf, + 0x05, 0x2a, 0xa5, 0x06, 0x47, 0x76, 0x8a, 0x3f, 0xff, 0x40, 0x03, 0xc5, + 0x00, 0x06, 0x4c, 0x67, 0x95, 0x1c, 0xff, 0x40, 0x4d, 0x72, 0x0b, 0x5b, + 0xff, 0x00, 0x4b, 0xd8, 0x21, 0x08, 0xff, 0x00, 0x4e, 0xc8, 0x26, 0x3b, + 0xff, 0x00, 0x51, 0x6e, 0x5f, 0x5f, 0xff, 0x40, 0x0f, 0xe4, 0x05, 0x6d, + 0x0d, 0x76, 0x08, 0x01, 0xff, 0xe1, 0x41, 0xff, 0x00, 0xe2, 0x42, 0xff, + 0x00, 0xe3, 0x43, 0xff, 0x00, 0xe4, 0x44, 0xff, 0x00, 0xe5, 0x45, 0xff, + 0x00, 0xe6, 0x46, 0xff, 0x00, 0xe7, 0x47, 0xff, 0x00, 0xe8, 0x48, 0xff, + 0x00, 0xe9, 0x49, 0xff, 0x00, 0xea, 0x4a, 0xff, 0x00, 0xeb, 0x4b, 0xff, + 0x00, 0xec, 0x4c, 0xff, 0x00, 0xed, 0x4d, 0xff, 0x00, 0xee, 0x4e, 0xff, + 0x00, 0xef, 0x4f, 0xff, 0x00, 0xf0, 0x50, 0xff, 0x00, 0xf1, 0x51, 0xff, + 0x00, 0xf2, 0x52, 0xff, 0x00, 0xf3, 0x53, 0xff, 0x00, 0xf4, 0x54, 0xff, + 0x00, 0xf5, 0x55, 0xff, 0x00, 0xf6, 0x56, 0xff, 0x00, 0xf7, 0x57, 0xff, + 0x00, 0xf8, 0x58, 0xff, 0x00, 0xf9, 0x59, 0xff, 0x00, 0xfa, 0x5a, 0xff, + 0x40, 0xe1, 0x21, 0xff, 0x00, 0xe2, 0x22, 0xff, 0x00, 0xe3, 0x23, 0xff, + 0x00, 0xe4, 0x24, 0xff, 0x00, 0xe5, 0x25, 0xff, 0x00, 0xe6, 0x26, 0xff, + 0x00, 0xe7, 0x27, 0xff, 0x00, 0xe8, 0x28, 0xff, 0x00, 0xe9, 0x29, 0xff, + 0x00, 0xea, 0x2a, 0xff, 0x00, 0xeb, 0x2b, 0xff, 0x00, 0xec, 0x2c, 0xff, + 0x00, 0xed, 0x2d, 0xff, 0x00, 0xee, 0x2e, 0xff, 0x00, 0xef, 0x2f, 0xff, + 0x00, 0xf0, 0x30, 0xff, 0x00, 0xf1, 0x31, 0xff, 0x00, 0xf2, 0x32, 0xff, + 0x00, 0xf3, 0x33, 0xff, 0x00, 0xf4, 0x34, 0xff, 0x00, 0xf5, 0x35, 0xff, + 0x00, 0xf6, 0x36, 0xff, 0x00, 0xf7, 0x37, 0xff, 0x00, 0xf8, 0x38, 0xff, + 0x00, 0xf9, 0x39, 0xff, 0x00, 0xfa, 0x3a, 0xff, 0x40, 0x4a, 0x17, 0x23, + 0x40, 0xff, 0x00, 0x4f, 0x64, 0x5a, 0x1e, 0xff, 0x40, 0x4a, 0x49, 0x13, + 0x1d, 0xff, 0x00, 0x4f, 0xae, 0x00, 0x01, 0xff, 0x40, 0x05, 0xf0, 0x06, + 0x06, 0x4a, 0x11, 0x9b, 0x04, 0xff, 0x40, 0x45, 0x12, 0x0b, 0x18, 0xff, + 0x00, 0xa6, 0x2e, 0x44, 0xcf, 0x2a, 0x19, 0xff, 0x00, 0x43, 0x0e, 0x0b, + 0x11, 0xff, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, 0x10, 0xff, + 0x40, 0x44, 0x25, 0x01, 0x13, 0xff, 0x00, 0x42, 0x15, 0x02, 0x12, 0xff, + 0x40, 0x44, 0xc9, 0x1d, 0x17, 0xff, 0x00, 0x42, 0x01, 0x26, 0x16, 0xff, + 0x40, 0x43, 0xd2, 0x05, 0x15, 0xff, 0x00, 0x43, 0xf6, 0x06, 0x14, 0xff, + 0x40, 0x48, 0xe4, 0x9b, 0xe0, 0xff, 0x00, 0x50, 0xd0, 0x04, 0x3e, 0xff, + 0x00, 0xaf, 0x01, 0xff, 0x43, 0xd7, 0x02, 0x1a, 0xff, 0x00, 0x02, 0x15, + 0x05, 0x01, 0xff, 0xe1, 0x0c, 0xff, 0x00, 0x49, 0x85, 0xb8, 0x20, 0xff, + 0x40, 0x48, 0x13, 0x3e, 0x06, 0xff, 0x00, 0x49, 0x62, 0x36, 0x07, 0xff, + 0x00, 0x47, 0x3d, 0x0d, 0x0a, 0xff, 0x40, 0x45, 0x33, 0x01, 0x88, 0x25, + 0x00, 0x05, 0xaf, 0x1b, 0x0c, 0x4a, 0x51, 0xaf, 0xd7, 0x27, 0x00, 0x44, + 0x55, 0x03, 0x2e, 0x00, 0x40, 0x46, 0x16, 0x08, 0x15, 0xf3, 0x01, 0x49, + 0x4f, 0xc1, 0x1d, 0xf3, 0x41, 0xa1, 0x45, 0xa5, 0x2c, 0x4a, 0x87, 0xab, + 0x64, 0xf3, 0x01, 0xaf, 0x01, 0xff, 0x46, 0x30, 0x29, 0x38, 0xf4, 0x01, + 0x03, 0x36, 0x10, 0x0d, 0x42, 0xa7, 0x01, 0x22, 0x23, 0xc0, 0x00, 0x58, + 0x2e, 0x29, 0x26, 0xf6, 0x41, 0x51, 0xeb, 0x59, 0x25, 0xf4, 0x01, 0x66, + 0x59, 0x05, 0xac, 0x27, 0x40, 0x4a, 0x95, 0x9b, 0x76, 0xf9, 0x01, 0x06, + 0x30, 0xde, 0x01, 0xff, 0x48, 0x50, 0xc3, 0xa3, 0x20, 0x00, 0x43, 0x14, + 0x9e, 0x5f, 0xf3, 0x41, 0x06, 0x06, 0x17, 0x1d, 0x4b, 0x70, 0x9c, 0xba, + 0xce, 0x01, 0x08, 0x40, 0xc8, 0x01, 0xff, 0x44, 0x01, 0xef, 0xbe, 0xf5, + 0x01, 0x47, 0x04, 0x8b, 0xbc, 0xf5, 0x01, 0x45, 0xbf, 0xd5, 0xbd, 0xf5, + 0x41, 0x4d, 0x94, 0x86, 0x5f, 0x21, 0x00, 0x45, 0x48, 0x0e, 0x44, 0x20, + 0x40, 0xe7, 0x2b, 0xf3, 0x81, 0xb8, 0x01, 0x02, 0xe2, 0x1a, 0xa7, 0x01, + 0x44, 0x6d, 0xf1, 0xd5, 0xfa, 0x01, 0x42, 0x1b, 0x05, 0xb6, 0xf9, 0x81, + 0x93, 0x01, 0xb2, 0x55, 0xb5, 0x06, 0x46, 0x60, 0xe1, 0x8a, 0xf9, 0x41, + 0x45, 0x54, 0x07, 0xf2, 0x26, 0x00, 0xb2, 0x01, 0xff, 0x80, 0x0c, 0x4d, + 0x2e, 0x80, 0x05, 0x20, 0x00, 0x47, 0x32, 0x9c, 0x1c, 0x22, 0x40, 0x57, + 0xcd, 0x1c, 0x23, 0x27, 0x00, 0xa3, 0x22, 0x04, 0x03, 0x0c, 0x12, 0x4b, + 0x75, 0x9e, 0x40, 0xf3, 0x01, 0x52, 0xec, 0x2b, 0xc6, 0xf7, 0x01, 0x58, + 0x6e, 0x2b, 0x22, 0x27, 0x40, 0x44, 0xb9, 0x00, 0x5b, 0x20, 0x00, 0x4b, + 0x07, 0x0c, 0x58, 0x20, 0x40, 0x53, 0x20, 0x4b, 0x25, 0x27, 0x00, 0x63, + 0x1e, 0x0b, 0x94, 0x2b, 0x40, 0x44, 0xbd, 0x2d, 0x00, 0x22, 0x00, 0x43, + 0x43, 0x7c, 0xa9, 0x22, 0x00, 0xab, 0x15, 0x46, 0x6a, 0xc9, 0x0c, 0x00, + 0x00, 0x03, 0x86, 0x97, 0x01, 0xff, 0xe1, 0xcc, 0xce, 0x01, 0x48, 0x58, + 0xc5, 0x60, 0xf9, 0x41, 0x4a, 0xb5, 0xa5, 0x74, 0xf3, 0x81, 0x0c, 0x4e, + 0xbf, 0x51, 0x10, 0x2e, 0x00, 0x43, 0xa1, 0x01, 0xdc, 0x2a, 0x40, 0x4b, + 0x2f, 0x98, 0x7d, 0xf3, 0x41, 0x46, 0x62, 0xcc, 0x63, 0xf4, 0x41, 0x42, + 0x33, 0x00, 0xc0, 0xf5, 0x01, 0x4c, 0x1b, 0x90, 0xad, 0xfa, 0x41, 0x42, + 0xb7, 0x35, 0x01, 0xf3, 0x41, 0xa1, 0x80, 0x01, 0xa5, 0x72, 0xaf, 0x45, + 0xb5, 0x37, 0xf9, 0xb0, 0xfa, 0xc1, 0x00, 0x04, 0xa1, 0x01, 0x01, 0xff, + 0x44, 0x3c, 0x64, 0x4f, 0xf9, 0x01, 0x48, 0x43, 0x32, 0x85, 0xf5, 0x01, + 0x46, 0xa1, 0x91, 0xf8, 0xf6, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x46, 0x16, + 0x08, 0xfb, 0xcc, 0x01, 0x04, 0x51, 0x00, 0x01, 0xff, 0x46, 0x98, 0xbd, + 0x4a, 0xcc, 0x01, 0x49, 0x95, 0xbd, 0x4b, 0xcc, 0x41, 0x49, 0x36, 0x93, + 0x33, 0xf6, 0x01, 0x42, 0x77, 0x00, 0x88, 0xfa, 0x41, 0x48, 0x5a, 0x39, + 0xbe, 0xf4, 0x01, 0x42, 0x71, 0x00, 0xc2, 0xce, 0x81, 0x18, 0x43, 0x15, + 0x01, 0x98, 0x26, 0xc0, 0x00, 0x02, 0x9b, 0x01, 0x01, 0xff, 0x4c, 0xe7, + 0x90, 0xb4, 0xf3, 0x01, 0x4f, 0x11, 0x22, 0x55, 0x20, 0x40, 0x47, 0xaa, + 0x21, 0x66, 0x27, 0x40, 0x49, 0x80, 0xc0, 0x9c, 0x26, 0x00, 0x4a, 0xbb, + 0xb3, 0xaa, 0xf4, 0x41, 0x49, 0x27, 0xb9, 0xf3, 0x26, 0x00, 0x45, 0xb2, + 0xe8, 0xa9, 0xf9, 0x01, 0x4a, 0xb5, 0xaf, 0x96, 0xcc, 0x01, 0xb4, 0x01, + 0xff, 0x45, 0xcc, 0x97, 0x7f, 0xf9, 0x01, 0x45, 0xd2, 0x77, 0xd3, 0xfa, + 0x01, 0x44, 0x22, 0x24, 0xe5, 0x23, 0x40, 0x59, 0x02, 0x24, 0xd1, 0xf3, + 0x01, 0xa7, 0xbc, 0x01, 0xac, 0x92, 0x01, 0xae, 0x83, 0x01, 0xb2, 0x30, + 0xb3, 0x11, 0x07, 0x36, 0xd7, 0x01, 0xff, 0x44, 0xb9, 0x00, 0x2d, 0x2e, + 0x00, 0x4b, 0x07, 0x0c, 0x59, 0x20, 0x40, 0xe8, 0x1f, 0xf4, 0x81, 0x06, + 0x4d, 0x2b, 0x89, 0x4a, 0xf4, 0x41, 0x57, 0x5e, 0x2c, 0x65, 0xf3, 0x01, + 0x43, 0xc6, 0x1c, 0xc9, 0x25, 0x00, 0x51, 0x1d, 0x5b, 0xa3, 0xf3, 0x41, + 0xe5, 0x25, 0xf5, 0x81, 0x27, 0x03, 0x7c, 0x18, 0x01, 0xff, 0x4b, 0x3e, + 0x71, 0x47, 0xf9, 0x01, 0x4c, 0x3b, 0x73, 0x3d, 0x26, 0x80, 0x06, 0x4e, + 0x8b, 0x7c, 0x68, 0x20, 0x40, 0x80, 0x01, 0xff, 0x46, 0x16, 0x08, 0x13, + 0xf3, 0x01, 0x49, 0x4f, 0xc1, 0x1b, 0xf3, 0x41, 0x02, 0x7a, 0x00, 0x15, + 0x47, 0x21, 0xd0, 0xe8, 0xf9, 0x01, 0x04, 0x95, 0x4b, 0x01, 0xff, 0x49, + 0xdd, 0xb4, 0x87, 0xf3, 0x01, 0xf3, 0x86, 0xf3, 0x41, 0x45, 0x29, 0x9c, + 0x92, 0xf6, 0x01, 0x4b, 0x60, 0xa5, 0xef, 0xf9, 0x41, 0x48, 0x68, 0xc6, + 0xc6, 0xfa, 0x01, 0x51, 0x50, 0x5b, 0x0d, 0x2a, 0x40, 0x02, 0x60, 0x00, + 0x11, 0x02, 0x49, 0x04, 0x01, 0xff, 0x46, 0xd8, 0xdb, 0x9e, 0xf3, 0x01, + 0x49, 0x37, 0xbe, 0xfd, 0xf4, 0x41, 0x47, 0xc6, 0xcf, 0xc4, 0xf5, 0x01, + 0x46, 0xb3, 0xab, 0xc1, 0xf4, 0x01, 0x49, 0xd8, 0x20, 0x1c, 0x00, 0x40, + 0x48, 0xd0, 0xc6, 0xef, 0xfa, 0x01, 0x04, 0x75, 0x18, 0x01, 0xff, 0x44, + 0x8f, 0x12, 0x12, 0x20, 0x00, 0x45, 0xd0, 0x4c, 0x07, 0x20, 0x40, 0xa1, + 0x23, 0xad, 0x15, 0x44, 0x65, 0xf1, 0x3a, 0xf9, 0x01, 0x02, 0xcf, 0x00, + 0x01, 0xff, 0x48, 0x38, 0xc7, 0xa1, 0xf3, 0x01, 0xf9, 0xf4, 0x26, 0x40, + 0x48, 0x62, 0x21, 0x40, 0x26, 0x00, 0x57, 0x27, 0x2f, 0xaa, 0x00, 0x40, + 0x49, 0xac, 0xbe, 0x28, 0xf6, 0x01, 0x44, 0x0f, 0x1a, 0xb6, 0xfa, 0x41, + 0xa3, 0x55, 0x43, 0xa1, 0xe0, 0xda, 0xf9, 0x01, 0xac, 0x23, 0x44, 0xb6, + 0xdb, 0x6a, 0xf4, 0x01, 0x4a, 0xa5, 0xb0, 0x2b, 0x26, 0x00, 0x4e, 0xdf, + 0x7c, 0x85, 0xf3, 0x01, 0x02, 0xd8, 0x04, 0x01, 0xff, 0x44, 0xbf, 0xe1, + 0xb7, 0xf5, 0x01, 0x47, 0x80, 0x48, 0xe0, 0xf4, 0x41, 0x44, 0xe1, 0xee, + 0xc6, 0xf9, 0x01, 0xac, 0x01, 0xff, 0x47, 0xd0, 0xd0, 0x42, 0xf3, 0x01, + 0x0d, 0x39, 0x31, 0x01, 0xff, 0x09, 0x95, 0x10, 0x06, 0x5f, 0x2f, 0x11, + 0xde, 0x26, 0x40, 0x50, 0xa7, 0x23, 0x2f, 0x29, 0x00, 0x4f, 0xfa, 0x3d, + 0x2c, 0x29, 0x40, 0x02, 0x60, 0x00, 0x0c, 0x4b, 0xa0, 0xa2, 0x3b, 0x21, + 0x00, 0x44, 0xd2, 0x96, 0xed, 0xf3, 0x41, 0x52, 0x4b, 0x52, 0x79, 0xf9, + 0x01, 0x47, 0x2a, 0xd3, 0x86, 0xf4, 0x01, 0x44, 0xd0, 0x40, 0x26, 0xf9, + 0x01, 0xb3, 0xcb, 0x01, 0x4f, 0xb0, 0x73, 0x18, 0xf6, 0x01, 0x04, 0x51, + 0x00, 0x01, 0xff, 0x80, 0x06, 0x49, 0x9e, 0xbd, 0x36, 0xf6, 0x41, 0x4f, + 0x04, 0x6b, 0xe9, 0xfa, 0x01, 0x02, 0x13, 0x05, 0xa1, 0x01, 0x4e, 0xcd, + 0x76, 0xe4, 0xfa, 0x01, 0x5b, 0x4f, 0x1b, 0x2b, 0xf9, 0x01, 0x4c, 0xa3, + 0x8f, 0x15, 0xf9, 0x01, 0x4f, 0xff, 0x6f, 0x24, 0xf6, 0x01, 0xad, 0x7b, + 0x4f, 0xb3, 0x70, 0x45, 0xf6, 0x01, 0xaf, 0x46, 0xb0, 0x32, 0x4c, 0xcb, + 0x94, 0x44, 0xf6, 0x01, 0x50, 0xa6, 0x67, 0x1b, 0xf6, 0x81, 0x14, 0xb4, + 0x06, 0x5a, 0x6e, 0x22, 0x74, 0xf9, 0x41, 0x4b, 0xb0, 0x95, 0x02, 0xf6, + 0x01, 0x4a, 0x2d, 0xab, 0x12, 0xf9, 0x41, 0x05, 0x19, 0x00, 0x01, 0xff, + 0x53, 0x93, 0x4d, 0x1d, 0xf6, 0x01, 0x4b, 0x1e, 0xa5, 0x1c, 0xf6, 0x41, + 0x57, 0x5b, 0x2d, 0x73, 0xf9, 0x01, 0x4a, 0xc5, 0xa9, 0xe3, 0xfa, 0x01, + 0x4c, 0xf3, 0x90, 0x7a, 0xf9, 0x41, 0x49, 0xe9, 0xba, 0x46, 0xf6, 0x01, + 0x51, 0x93, 0x5c, 0x28, 0xf9, 0x01, 0x04, 0xf7, 0x04, 0x01, 0xff, 0x58, + 0x9e, 0x28, 0xe2, 0xfa, 0x01, 0x45, 0x27, 0x08, 0x2e, 0xf6, 0xc1, 0x00, + 0x80, 0x01, 0xff, 0x4e, 0xed, 0x75, 0x30, 0xf6, 0x01, 0x48, 0x58, 0xcc, + 0x2e, 0xf9, 0x41, 0x4b, 0x89, 0x9b, 0x37, 0xf6, 0x01, 0x46, 0xcc, 0xde, + 0xd0, 0xf9, 0x41, 0x48, 0xf3, 0x75, 0x13, 0xf6, 0x01, 0x48, 0x70, 0xcc, + 0x20, 0xf9, 0x41, 0x57, 0xa0, 0x2d, 0x0b, 0xf6, 0x01, 0x50, 0xc6, 0x61, + 0x31, 0xf6, 0x41, 0x4c, 0xbf, 0x8b, 0xe7, 0xf4, 0x01, 0xa1, 0xbf, 0x48, + 0x50, 0xe6, 0x61, 0x0e, 0x2e, 0x00, 0xa7, 0xc1, 0x20, 0x04, 0xc9, 0x00, + 0xf9, 0x1f, 0x4b, 0xdb, 0x9d, 0xcf, 0x23, 0x00, 0xac, 0xef, 0x1b, 0xad, + 0xbb, 0x1a, 0xae, 0xb4, 0x19, 0x02, 0x7c, 0x00, 0xf4, 0x17, 0xb2, 0x9f, + 0x17, 0xb3, 0x87, 0x17, 0x08, 0x78, 0xcb, 0x8a, 0x02, 0xb5, 0xd9, 0x01, + 0x4d, 0x08, 0x8a, 0x32, 0xf3, 0x01, 0xb8, 0x11, 0x42, 0x4d, 0x00, 0x41, + 0xf4, 0xc1, 0x00, 0x47, 0x55, 0xc0, 0x53, 0xf4, 0x01, 0xf3, 0x40, 0xf4, + 0x41, 0xa3, 0xa6, 0x01, 0xb0, 0x82, 0x01, 0xb4, 0x01, 0xff, 0x19, 0xdc, + 0x06, 0x39, 0xb2, 0x01, 0xff, 0x52, 0x65, 0x50, 0x7d, 0xf4, 0x01, 0x0c, + 0x77, 0x8e, 0x01, 0xff, 0x54, 0x58, 0x42, 0xb4, 0xf7, 0x01, 0x4b, 0x1b, + 0x61, 0xa7, 0xf7, 0x01, 0xb3, 0x11, 0x06, 0xad, 0x02, 0x01, 0xff, 0x46, + 0x12, 0x03, 0x89, 0xf7, 0x01, 0x46, 0xd6, 0x05, 0x93, 0xf7, 0x41, 0x46, + 0x13, 0x19, 0xae, 0xf7, 0x01, 0x52, 0xff, 0x52, 0xba, 0xf7, 0x41, 0x45, + 0x12, 0x0b, 0xf8, 0x06, 0x00, 0xa6, 0x2e, 0x44, 0xcf, 0x2a, 0xf9, 0x06, + 0x00, 0x43, 0x0e, 0x0b, 0xf1, 0x06, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, + 0x43, 0x1e, 0xf0, 0x06, 0x40, 0x44, 0x25, 0x01, 0xf3, 0x06, 0x00, 0x42, + 0x15, 0x02, 0xf2, 0x06, 0x40, 0x44, 0xc9, 0x1d, 0xf7, 0x06, 0x00, 0x42, + 0x01, 0x26, 0xf6, 0x06, 0x40, 0x43, 0xd2, 0x05, 0xf5, 0x06, 0x00, 0x43, + 0xf6, 0x06, 0xf4, 0x06, 0x40, 0x07, 0x00, 0xd3, 0x06, 0x50, 0x86, 0x66, + 0x11, 0xf6, 0x41, 0x4a, 0xf9, 0xa7, 0x02, 0xce, 0x01, 0x06, 0x0a, 0x44, + 0x01, 0xff, 0xd1, 0xfd, 0xcd, 0x01, 0xd2, 0xfe, 0xcd, 0x01, 0xd3, 0xff, + 0xcd, 0x41, 0x43, 0xed, 0x00, 0x39, 0x22, 0x00, 0x09, 0xb0, 0x00, 0x01, + 0xff, 0x44, 0xb9, 0x00, 0x21, 0x00, 0x00, 0x4d, 0xa6, 0x34, 0x49, 0x20, + 0x40, 0x4c, 0x17, 0x91, 0x07, 0x21, 0x00, 0x45, 0x2f, 0xe9, 0xc8, 0xce, + 0x01, 0x02, 0xd0, 0x00, 0x01, 0xff, 0x45, 0x59, 0x03, 0xac, 0x20, 0x00, + 0x4e, 0x99, 0x75, 0xa0, 0x20, 0x00, 0x05, 0xca, 0xe9, 0x01, 0xff, 0x46, + 0x5e, 0xda, 0xf0, 0xf3, 0x01, 0x4b, 0x6c, 0xa1, 0xe4, 0xf3, 0x41, 0x02, + 0x13, 0x05, 0xca, 0x14, 0x06, 0xef, 0x06, 0x88, 0x14, 0x49, 0x81, 0x16, + 0x62, 0x13, 0x00, 0x07, 0xff, 0x39, 0xb3, 0x13, 0xb0, 0xa4, 0x13, 0x4d, + 0xa6, 0x34, 0x67, 0x13, 0x00, 0xb3, 0x4b, 0x0b, 0x9d, 0xa3, 0x06, 0x49, + 0x58, 0xc1, 0x61, 0x13, 0x40, 0x46, 0x94, 0xda, 0x96, 0x13, 0x00, 0xa4, + 0x26, 0x45, 0x55, 0xd8, 0x97, 0x13, 0x00, 0xab, 0x12, 0x46, 0x3d, 0x95, + 0x92, 0x13, 0x00, 0x4c, 0x37, 0x95, 0x93, 0x13, 0x00, 0x45, 0x95, 0xec, + 0x90, 0x13, 0x40, 0x44, 0x75, 0x50, 0x95, 0x13, 0x00, 0x43, 0x0b, 0x5d, + 0x99, 0x13, 0x40, 0x44, 0x1d, 0xaa, 0x91, 0x13, 0x80, 0x06, 0x44, 0x79, + 0xf0, 0x94, 0x13, 0x40, 0x46, 0x54, 0xd8, 0x98, 0x13, 0x40, 0xa5, 0xc2, + 0x12, 0x08, 0x1b, 0x18, 0x01, 0xff, 0xa2, 0xe3, 0x11, 0xa3, 0xab, 0x10, + 0xa4, 0x98, 0x0f, 0xa6, 0xde, 0x0e, 0xa7, 0x9c, 0x0c, 0xa8, 0xa2, 0x0b, + 0xaa, 0xf6, 0x0a, 0xab, 0xdc, 0x09, 0xac, 0xb0, 0x09, 0xad, 0xf1, 0x08, + 0xae, 0x99, 0x08, 0xb0, 0x91, 0x07, 0xb1, 0xf7, 0x05, 0xb2, 0xc5, 0x05, + 0xb3, 0x89, 0x04, 0xb4, 0xc4, 0x02, 0xb6, 0x9d, 0x02, 0xb7, 0xf7, 0x01, + 0xb8, 0x98, 0x01, 0xb9, 0x73, 0xba, 0x01, 0xff, 0xe1, 0xd8, 0x12, 0x80, + 0x67, 0xe5, 0xdd, 0x12, 0x80, 0x5e, 0xa8, 0x38, 0xe9, 0xda, 0x12, 0x00, + 0xef, 0xde, 0x12, 0x80, 0x2b, 0xf5, 0xd9, 0x12, 0x00, 0x42, 0xa9, 0x01, + 0xdf, 0x12, 0x00, 0xba, 0x01, 0xff, 0xe1, 0xb0, 0x2d, 0x80, 0x15, 0xe5, + 0xb5, 0x2d, 0x80, 0x0c, 0xe9, 0xb2, 0x2d, 0x00, 0xef, 0xb6, 0x2d, 0x00, + 0xf5, 0xb1, 0x2d, 0x40, 0xe5, 0xb4, 0x2d, 0x40, 0xe1, 0xb3, 0x2d, 0x40, + 0xe1, 0x8b, 0x2d, 0x40, 0xe1, 0xe0, 0x12, 0x80, 0x1b, 0xe5, 0xe5, 0x12, + 0x80, 0x12, 0xe9, 0xe2, 0x12, 0x00, 0xef, 0xe6, 0x12, 0x00, 0xf5, 0xe1, + 0x12, 0x00, 0x42, 0xa9, 0x01, 0xe7, 0x12, 0x40, 0xe5, 0xe4, 0x12, 0x40, + 0xe1, 0xe3, 0x12, 0x40, 0xe5, 0xdc, 0x12, 0x40, 0xe1, 0xdb, 0x12, 0x40, + 0xe1, 0xe8, 0x12, 0x80, 0x1a, 0xe5, 0xed, 0x12, 0x80, 0x11, 0xe9, 0xea, + 0x12, 0x00, 0xef, 0xee, 0x12, 0x80, 0x04, 0xf5, 0xe9, 0x12, 0x40, 0xe1, + 0xef, 0x12, 0x40, 0xe5, 0xec, 0x12, 0x40, 0xe1, 0xeb, 0x12, 0x40, 0xe1, + 0x80, 0x12, 0x80, 0x53, 0xe5, 0x85, 0x12, 0x80, 0x4a, 0xe9, 0x82, 0x12, + 0x00, 0xef, 0x86, 0x12, 0x80, 0x3d, 0xf5, 0x81, 0x12, 0x00, 0xb7, 0x21, + 0xb9, 0x01, 0xff, 0xe1, 0xd0, 0x2d, 0x80, 0x15, 0xe5, 0xd5, 0x2d, 0x80, + 0x0c, 0xe9, 0xd2, 0x2d, 0x00, 0xef, 0xd6, 0x2d, 0x00, 0xf5, 0xd1, 0x2d, + 0x40, 0xe5, 0xd4, 0x2d, 0x40, 0xe1, 0xd3, 0x2d, 0x40, 0xe1, 0x88, 0x12, + 0x80, 0x0d, 0xe5, 0x8d, 0x12, 0x80, 0x04, 0xe9, 0x8a, 0x12, 0x40, 0xe5, + 0x8c, 0x12, 0x40, 0xe1, 0x8b, 0x12, 0x40, 0xe1, 0x87, 0x12, 0x40, 0xe5, + 0x84, 0x12, 0x40, 0xe1, 0x83, 0x12, 0x40, 0xe1, 0xc8, 0x12, 0x80, 0x1a, + 0xe5, 0xcd, 0x12, 0x80, 0x11, 0xe9, 0xca, 0x12, 0x00, 0xef, 0xce, 0x12, + 0x80, 0x04, 0xf5, 0xc9, 0x12, 0x40, 0xe1, 0xcf, 0x12, 0x40, 0xe5, 0xcc, + 0x12, 0x40, 0xe1, 0xcb, 0x12, 0x40, 0xe1, 0x68, 0x12, 0x80, 0x1b, 0xe5, + 0x6d, 0x12, 0x80, 0x12, 0xe9, 0x6a, 0x12, 0x00, 0xef, 0x6e, 0x12, 0x00, + 0xf5, 0x69, 0x12, 0x00, 0x42, 0xa9, 0x01, 0x6f, 0x12, 0x40, 0xe5, 0x6c, + 0x12, 0x40, 0xe1, 0x6b, 0x12, 0x40, 0xe1, 0x70, 0x12, 0x80, 0xb8, 0x01, + 0xe5, 0x75, 0x12, 0x80, 0xae, 0x01, 0xa8, 0x82, 0x01, 0xe9, 0x72, 0x12, + 0x00, 0xef, 0x76, 0x12, 0x80, 0x75, 0xb3, 0x4f, 0x02, 0x53, 0x00, 0x30, + 0xf5, 0x71, 0x12, 0x00, 0x42, 0xa9, 0x01, 0x77, 0x12, 0x00, 0xba, 0x01, + 0xff, 0xe1, 0x40, 0x13, 0x80, 0x1a, 0xe5, 0x45, 0x13, 0x80, 0x11, 0xe9, + 0x42, 0x13, 0x00, 0xef, 0x46, 0x13, 0x80, 0x04, 0xf5, 0x41, 0x13, 0x40, + 0xe1, 0x47, 0x13, 0x40, 0xe5, 0x44, 0x13, 0x40, 0xe1, 0x43, 0x13, 0x40, + 0x42, 0x80, 0x12, 0x03, 0xab, 0x00, 0xe5, 0x05, 0xab, 0x80, 0x0c, 0xe9, + 0x02, 0xab, 0x00, 0xef, 0x06, 0xab, 0x00, 0xf5, 0x01, 0xab, 0x40, 0xe5, + 0x04, 0xab, 0x40, 0xe1, 0x38, 0x13, 0x80, 0x1b, 0xe5, 0x3d, 0x13, 0x80, + 0x12, 0xe9, 0x3a, 0x13, 0x00, 0xef, 0x3e, 0x13, 0x00, 0xf5, 0x39, 0x13, + 0x00, 0x42, 0xa9, 0x01, 0x3f, 0x13, 0x40, 0xe5, 0x3c, 0x13, 0x40, 0xe1, + 0x3b, 0x13, 0x40, 0xe1, 0x86, 0x2d, 0x40, 0xe1, 0x20, 0x13, 0x80, 0x20, + 0xe5, 0x25, 0x13, 0x80, 0x17, 0xe9, 0x22, 0x13, 0x00, 0xef, 0x26, 0x13, + 0x80, 0x0a, 0xf5, 0x21, 0x13, 0x00, 0x42, 0xa9, 0x01, 0x27, 0x13, 0x40, + 0xe1, 0x8f, 0x2d, 0x40, 0xe5, 0x24, 0x13, 0x40, 0xe1, 0x23, 0x13, 0x40, + 0xe5, 0x74, 0x12, 0x40, 0xe1, 0x73, 0x12, 0x40, 0xe1, 0x30, 0x12, 0x80, + 0xaf, 0x01, 0xe5, 0x35, 0x12, 0x80, 0x89, 0x01, 0xa8, 0x5e, 0xe9, 0x32, + 0x12, 0x00, 0xef, 0x36, 0x12, 0x80, 0x51, 0xb3, 0x31, 0xf5, 0x31, 0x12, + 0x00, 0x42, 0xa9, 0x01, 0x37, 0x12, 0x00, 0xba, 0x01, 0xff, 0xe1, 0x20, + 0x12, 0x80, 0x1b, 0xe5, 0x25, 0x12, 0x80, 0x12, 0xe9, 0x22, 0x12, 0x00, + 0xef, 0x26, 0x12, 0x00, 0xf5, 0x21, 0x12, 0x00, 0x42, 0xa9, 0x01, 0x27, + 0x12, 0x40, 0xe5, 0x24, 0x12, 0x40, 0xe1, 0x23, 0x12, 0x40, 0xe1, 0xa0, + 0x2d, 0x80, 0x15, 0xe5, 0xa5, 0x2d, 0x80, 0x0c, 0xe9, 0xa2, 0x2d, 0x00, + 0xef, 0xa6, 0x2d, 0x00, 0xf5, 0xa1, 0x2d, 0x40, 0xe5, 0xa4, 0x2d, 0x40, + 0xe1, 0xa3, 0x2d, 0x40, 0xe1, 0x83, 0x2d, 0x40, 0xe1, 0x38, 0x12, 0x80, + 0x20, 0xe5, 0x3d, 0x12, 0x80, 0x17, 0xe9, 0x3a, 0x12, 0x00, 0xef, 0x3e, + 0x12, 0x80, 0x0a, 0xf5, 0x39, 0x12, 0x00, 0x42, 0xa9, 0x01, 0x3f, 0x12, + 0x40, 0xe1, 0x84, 0x2d, 0x40, 0xe5, 0x3c, 0x12, 0x40, 0xe1, 0x3b, 0x12, + 0x40, 0x08, 0xf8, 0xc3, 0x04, 0xe5, 0x34, 0x12, 0x40, 0x43, 0x45, 0xd2, + 0x84, 0x13, 0x00, 0x43, 0xd9, 0xef, 0x88, 0x13, 0x00, 0x43, 0x7f, 0x94, + 0x80, 0x13, 0x00, 0x43, 0x51, 0x02, 0x8c, 0x13, 0x40, 0xe1, 0x33, 0x12, + 0x40, 0xe1, 0x28, 0x12, 0x80, 0x26, 0xe5, 0x2d, 0x12, 0x80, 0x1d, 0xe9, + 0x2a, 0x12, 0x00, 0xef, 0x2e, 0x12, 0x80, 0x10, 0xf5, 0x29, 0x12, 0x00, + 0x42, 0xa9, 0x01, 0x2f, 0x12, 0x00, 0x42, 0xbc, 0x22, 0x58, 0x13, 0x40, + 0xe1, 0x82, 0x2d, 0x40, 0xe5, 0x2c, 0x12, 0x40, 0xe1, 0x2b, 0x12, 0x40, + 0xe1, 0x40, 0x12, 0x80, 0x8d, 0x01, 0xe5, 0x45, 0x12, 0x80, 0x83, 0x01, + 0xa8, 0x4a, 0xe9, 0x42, 0x12, 0x00, 0xef, 0x46, 0x12, 0x80, 0x3d, 0xf5, + 0x41, 0x12, 0x00, 0xb7, 0x21, 0xb9, 0x01, 0xff, 0xe1, 0xc0, 0x2d, 0x80, + 0x15, 0xe5, 0xc5, 0x2d, 0x80, 0x0c, 0xe9, 0xc2, 0x2d, 0x00, 0xef, 0xc6, + 0x2d, 0x00, 0xf5, 0xc1, 0x2d, 0x40, 0xe5, 0xc4, 0x2d, 0x40, 0xe1, 0xc3, + 0x2d, 0x40, 0xe1, 0x48, 0x12, 0x80, 0x0d, 0xe5, 0x4d, 0x12, 0x80, 0x04, + 0xe9, 0x4a, 0x12, 0x40, 0xe5, 0x4c, 0x12, 0x40, 0xe1, 0x4b, 0x12, 0x40, + 0xe1, 0x47, 0x12, 0x40, 0xe1, 0x50, 0x12, 0x80, 0x2e, 0xe5, 0x55, 0x12, + 0x80, 0x25, 0xe9, 0x52, 0x12, 0x00, 0xef, 0x56, 0x12, 0x00, 0xf5, 0x51, + 0x12, 0x00, 0xb7, 0x01, 0xff, 0xe1, 0x58, 0x12, 0x80, 0x0d, 0xe5, 0x5d, + 0x12, 0x80, 0x04, 0xe9, 0x5a, 0x12, 0x40, 0xe5, 0x5c, 0x12, 0x40, 0xe1, + 0x5b, 0x12, 0x40, 0xe5, 0x54, 0x12, 0x40, 0xe1, 0x53, 0x12, 0x40, 0xe5, + 0x44, 0x12, 0x40, 0xe1, 0x43, 0x12, 0x40, 0xe1, 0x50, 0x13, 0x80, 0x7c, + 0xe5, 0x55, 0x13, 0x80, 0x73, 0xa8, 0x25, 0xe9, 0x52, 0x13, 0x00, 0xef, + 0x56, 0x13, 0x80, 0x18, 0xf5, 0x51, 0x13, 0x00, 0xb7, 0x01, 0xff, 0xe1, + 0x57, 0x13, 0x00, 0xe5, 0x8f, 0x13, 0x80, 0x04, 0xe9, 0x8d, 0x13, 0x40, + 0xe5, 0x8e, 0x13, 0x40, 0xe1, 0x92, 0x2d, 0x40, 0xe1, 0x30, 0x13, 0x80, + 0x20, 0xe5, 0x35, 0x13, 0x80, 0x17, 0xe9, 0x32, 0x13, 0x00, 0xef, 0x36, + 0x13, 0x80, 0x0a, 0xf5, 0x31, 0x13, 0x00, 0x42, 0xa9, 0x01, 0x37, 0x13, + 0x40, 0xe1, 0x91, 0x2d, 0x40, 0xe5, 0x34, 0x13, 0x40, 0xe1, 0x33, 0x13, + 0x00, 0x08, 0x02, 0x1d, 0x01, 0xff, 0xe1, 0xd0, 0x12, 0x80, 0x15, 0xe5, + 0xd5, 0x12, 0x80, 0x0c, 0xe9, 0xd2, 0x12, 0x00, 0xef, 0xd6, 0x12, 0x00, + 0xf5, 0xd1, 0x12, 0x40, 0xe5, 0xd4, 0x12, 0x40, 0xe1, 0xd3, 0x12, 0x40, + 0xe5, 0x54, 0x13, 0x40, 0xe1, 0x53, 0x13, 0x40, 0xe1, 0x90, 0x12, 0x80, + 0x4c, 0xe5, 0x95, 0x12, 0x80, 0x43, 0xe9, 0x92, 0x12, 0x00, 0xef, 0x96, + 0x12, 0x80, 0x36, 0xf5, 0x91, 0x12, 0x00, 0x42, 0xa9, 0x01, 0x97, 0x12, + 0x00, 0xb9, 0x01, 0xff, 0xe1, 0x98, 0x12, 0x80, 0x20, 0xe5, 0x9d, 0x12, + 0x80, 0x17, 0xe9, 0x9a, 0x12, 0x00, 0xef, 0x9e, 0x12, 0x80, 0x0a, 0xf5, + 0x99, 0x12, 0x00, 0x42, 0xa9, 0x01, 0x9f, 0x12, 0x40, 0xe1, 0x89, 0x2d, + 0x40, 0xe5, 0x9c, 0x12, 0x40, 0xe1, 0x9b, 0x12, 0x40, 0xe1, 0x88, 0x2d, + 0x40, 0xe5, 0x94, 0x12, 0x40, 0xe1, 0x93, 0x12, 0x40, 0xe1, 0x18, 0x12, + 0x80, 0x33, 0xe5, 0x1d, 0x12, 0x80, 0x2a, 0xe9, 0x1a, 0x12, 0x00, 0xef, + 0x1e, 0x12, 0x80, 0x1d, 0xf5, 0x19, 0x12, 0x00, 0xb7, 0x06, 0x42, 0xbc, + 0x22, 0x59, 0x13, 0x40, 0xe1, 0x1f, 0x12, 0x00, 0xe5, 0x83, 0x13, 0x80, + 0x04, 0xe9, 0x81, 0x13, 0x40, 0xe5, 0x82, 0x13, 0x40, 0xe1, 0x81, 0x2d, + 0x40, 0xe5, 0x1c, 0x12, 0x40, 0xe1, 0x1b, 0x12, 0x40, 0xe1, 0x08, 0x12, + 0x80, 0x20, 0xe5, 0x0d, 0x12, 0x80, 0x17, 0xe9, 0x0a, 0x12, 0x00, 0xef, + 0x0e, 0x12, 0x80, 0x0a, 0xf5, 0x09, 0x12, 0x00, 0x42, 0xa9, 0x01, 0x0f, + 0x12, 0x40, 0xe1, 0x80, 0x2d, 0x40, 0xe5, 0x0c, 0x12, 0x40, 0xe1, 0x0b, + 0x12, 0x40, 0xe1, 0xa8, 0x12, 0x80, 0x8d, 0x01, 0xe5, 0xad, 0x12, 0x80, + 0x83, 0x01, 0xe9, 0xaa, 0x12, 0x00, 0xef, 0xae, 0x12, 0x80, 0x76, 0xf5, + 0xa9, 0x12, 0x00, 0xb7, 0x5a, 0xb8, 0x21, 0xb9, 0x01, 0xff, 0xe1, 0xc8, + 0x2d, 0x80, 0x15, 0xe5, 0xcd, 0x2d, 0x80, 0x0c, 0xe9, 0xca, 0x2d, 0x00, + 0xef, 0xce, 0x2d, 0x00, 0xf5, 0xc9, 0x2d, 0x40, 0xe5, 0xcc, 0x2d, 0x40, + 0xe1, 0xcb, 0x2d, 0x40, 0xe1, 0xb8, 0x12, 0x80, 0x2e, 0xe5, 0xbd, 0x12, + 0x80, 0x25, 0xe9, 0xba, 0x12, 0x00, 0xef, 0xbe, 0x12, 0x00, 0xf5, 0xb9, + 0x12, 0x00, 0xb7, 0x01, 0xff, 0xe1, 0xc0, 0x12, 0x80, 0x0d, 0xe5, 0xc5, + 0x12, 0x80, 0x04, 0xe9, 0xc2, 0x12, 0x40, 0xe5, 0xc4, 0x12, 0x40, 0xe1, + 0xc3, 0x12, 0x40, 0xe5, 0xbc, 0x12, 0x40, 0xe1, 0xbb, 0x12, 0x40, 0xe1, + 0xb0, 0x12, 0x80, 0x0d, 0xe5, 0xb5, 0x12, 0x80, 0x04, 0xe9, 0xb2, 0x12, + 0x40, 0xe5, 0xb4, 0x12, 0x40, 0xe1, 0xb3, 0x12, 0x40, 0xe1, 0xaf, 0x12, + 0x40, 0xe5, 0xac, 0x12, 0x40, 0xe1, 0xab, 0x12, 0x40, 0xe1, 0x00, 0x13, + 0x80, 0x20, 0xe5, 0x05, 0x13, 0x80, 0x17, 0xe9, 0x02, 0x13, 0x00, 0xef, + 0x06, 0x13, 0x80, 0x0a, 0xf5, 0x01, 0x13, 0x00, 0x42, 0xa9, 0x01, 0x07, + 0x13, 0x40, 0xe1, 0x8e, 0x2d, 0x40, 0xe5, 0x04, 0x13, 0x40, 0xe1, 0x03, + 0x13, 0x40, 0xe1, 0x00, 0x12, 0x80, 0x6e, 0xe5, 0x05, 0x12, 0x80, 0x65, + 0xa8, 0x11, 0xe9, 0x02, 0x12, 0x00, 0xef, 0x06, 0x12, 0x80, 0x04, 0xf5, + 0x01, 0x12, 0x40, 0xe1, 0x07, 0x12, 0x40, 0xe1, 0x10, 0x12, 0x80, 0x49, + 0xe5, 0x15, 0x12, 0x80, 0x40, 0xe9, 0x12, 0x12, 0x00, 0xef, 0x16, 0x12, + 0x00, 0xf5, 0x11, 0x12, 0x00, 0xb7, 0x21, 0xb9, 0x01, 0xff, 0xe1, 0xe0, + 0xe7, 0x81, 0x15, 0xe5, 0xe5, 0xe7, 0x81, 0x0c, 0xe9, 0xe2, 0xe7, 0x01, + 0xef, 0xe6, 0xe7, 0x01, 0xf5, 0xe1, 0xe7, 0x41, 0xe5, 0xe4, 0xe7, 0x41, + 0xe1, 0xe3, 0xe7, 0x41, 0xe1, 0x17, 0x12, 0x00, 0xe5, 0xeb, 0xe7, 0x81, + 0x04, 0xe9, 0xe9, 0xe7, 0x41, 0xe5, 0xea, 0xe7, 0x41, 0xe5, 0x14, 0x12, + 0x40, 0xe1, 0x13, 0x12, 0x40, 0xe5, 0x04, 0x12, 0x40, 0xe1, 0x03, 0x12, + 0x40, 0xe1, 0x08, 0x13, 0x80, 0xb5, 0x02, 0xe5, 0x0d, 0x13, 0x80, 0xab, + 0x02, 0xa7, 0xf1, 0x01, 0xe9, 0x0a, 0x13, 0x00, 0x07, 0xcf, 0x28, 0xbf, + 0x01, 0xef, 0x0e, 0x13, 0x80, 0xb5, 0x01, 0xf5, 0x09, 0x13, 0x80, 0x39, + 0xb7, 0x21, 0xb9, 0x01, 0xff, 0xe1, 0xd8, 0x2d, 0x80, 0x15, 0xe5, 0xdd, + 0x2d, 0x80, 0x0c, 0xe9, 0xda, 0x2d, 0x00, 0xef, 0xde, 0x2d, 0x00, 0xf5, + 0xd9, 0x2d, 0x40, 0xe5, 0xdc, 0x2d, 0x40, 0xe1, 0xdb, 0x2d, 0x40, 0xe1, + 0x10, 0x13, 0x80, 0x0d, 0xe5, 0x15, 0x13, 0x80, 0x04, 0xe9, 0x12, 0x13, + 0x40, 0xe5, 0x14, 0x13, 0x40, 0xe1, 0x13, 0x13, 0x40, 0x05, 0x3d, 0x5f, + 0x01, 0xff, 0x02, 0x45, 0xd2, 0x64, 0x02, 0x94, 0x56, 0x56, 0x02, 0x74, + 0xb3, 0x45, 0x44, 0x3d, 0xf0, 0xe8, 0xe7, 0x01, 0x02, 0x3c, 0x0b, 0x2e, + 0x02, 0x22, 0x38, 0x20, 0x02, 0x51, 0x02, 0x12, 0x02, 0x14, 0xf3, 0x01, + 0xff, 0xe5, 0xf2, 0xe7, 0x81, 0x04, 0xe9, 0xf0, 0xe7, 0x41, 0xe5, 0xf1, + 0xe7, 0x41, 0x42, 0x27, 0x01, 0xfe, 0xe7, 0x01, 0xe9, 0xfd, 0xe7, 0x41, + 0x42, 0x27, 0x01, 0xee, 0xe7, 0x01, 0xe9, 0xed, 0xe7, 0x41, 0xe5, 0xf7, + 0xe7, 0x81, 0x04, 0xe9, 0xf5, 0xe7, 0x41, 0xe5, 0xf6, 0xe7, 0x41, 0xe5, + 0xfa, 0xe7, 0x81, 0x04, 0xe9, 0xf8, 0xe7, 0x41, 0xe5, 0xf9, 0xe7, 0x41, + 0x42, 0x27, 0x01, 0xfc, 0xe7, 0x01, 0xe9, 0xfb, 0xe7, 0x41, 0x42, 0x27, + 0x01, 0xf4, 0xe7, 0x01, 0xe9, 0xf3, 0xe7, 0x41, 0xe1, 0x0f, 0x13, 0x40, + 0xe1, 0xa0, 0x12, 0x80, 0x20, 0xe5, 0xa5, 0x12, 0x80, 0x17, 0xe9, 0xa2, + 0x12, 0x00, 0xef, 0xa6, 0x12, 0x80, 0x0a, 0xf5, 0xa1, 0x12, 0x00, 0x42, + 0xa9, 0x01, 0xa7, 0x12, 0x40, 0xe1, 0x8a, 0x2d, 0x40, 0xe5, 0xa4, 0x12, + 0x40, 0xe1, 0xa3, 0x12, 0x40, 0xe1, 0x18, 0x13, 0x80, 0x2e, 0xe5, 0x1d, + 0x13, 0x80, 0x25, 0xe9, 0x1a, 0x13, 0x00, 0xef, 0x1e, 0x13, 0x00, 0xf5, + 0x19, 0x13, 0x00, 0xb7, 0x01, 0xff, 0xe1, 0x93, 0x2d, 0x80, 0x0d, 0xe5, + 0x96, 0x2d, 0x80, 0x04, 0xe9, 0x94, 0x2d, 0x40, 0xe5, 0x95, 0x2d, 0x40, + 0xe1, 0x1f, 0x13, 0x40, 0xe5, 0x1c, 0x13, 0x40, 0xe1, 0x1b, 0x13, 0x40, + 0xe5, 0x0c, 0x13, 0x40, 0xe1, 0x0b, 0x13, 0x40, 0xe1, 0x48, 0x13, 0x80, + 0x2e, 0xe5, 0x4d, 0x13, 0x80, 0x25, 0xe9, 0x4a, 0x13, 0x00, 0xef, 0x4e, + 0x13, 0x00, 0xf5, 0x49, 0x13, 0x00, 0xb7, 0x06, 0x42, 0xbc, 0x22, 0x5a, + 0x13, 0x40, 0xe1, 0x4f, 0x13, 0x00, 0xe5, 0x8b, 0x13, 0x80, 0x04, 0xe9, + 0x89, 0x13, 0x40, 0xe5, 0x8a, 0x13, 0x40, 0xe5, 0x4c, 0x13, 0x40, 0xe1, + 0x4b, 0x13, 0x40, 0xe1, 0xf0, 0x12, 0x80, 0x86, 0x01, 0xa4, 0x3e, 0xe5, + 0xf5, 0x12, 0x80, 0x35, 0xe9, 0xf2, 0x12, 0x00, 0xef, 0xf6, 0x12, 0x80, + 0x28, 0xf5, 0xf1, 0x12, 0x00, 0x42, 0xa9, 0x01, 0xf7, 0x12, 0x00, 0xba, + 0x01, 0xff, 0x42, 0x80, 0x12, 0x13, 0xab, 0x00, 0xe5, 0x15, 0xab, 0x80, + 0x0c, 0xe9, 0x12, 0xab, 0x00, 0xef, 0x16, 0xab, 0x00, 0xf5, 0x11, 0xab, + 0x40, 0xe5, 0x14, 0xab, 0x40, 0xe1, 0x8c, 0x2d, 0x40, 0xe5, 0xf4, 0x12, + 0x40, 0xe1, 0xf8, 0x12, 0x80, 0x3d, 0xe5, 0xfd, 0x12, 0x80, 0x34, 0xa8, + 0x17, 0xe9, 0xfa, 0x12, 0x00, 0xef, 0xfe, 0x12, 0x80, 0x0a, 0xf5, 0xf9, + 0x12, 0x00, 0x42, 0xa9, 0x01, 0xff, 0x12, 0x40, 0xe1, 0x8d, 0x2d, 0x40, + 0x42, 0x80, 0x12, 0x0b, 0xab, 0x00, 0xe5, 0x0d, 0xab, 0x80, 0x0c, 0xe9, + 0x0a, 0xab, 0x00, 0xef, 0x0e, 0xab, 0x00, 0xf5, 0x09, 0xab, 0x40, 0xe5, + 0x0c, 0xab, 0x40, 0xe5, 0xfc, 0x12, 0x40, 0xe1, 0xfb, 0x12, 0x40, 0xe1, + 0xf3, 0x12, 0x40, 0xe1, 0x78, 0x12, 0x80, 0xab, 0x01, 0xa3, 0x4b, 0xe5, + 0x7d, 0x12, 0x80, 0x42, 0xa8, 0x17, 0xe9, 0x7a, 0x12, 0x00, 0xef, 0x7e, + 0x12, 0x80, 0x0a, 0xf5, 0x79, 0x12, 0x00, 0x42, 0xa9, 0x01, 0x7f, 0x12, + 0x40, 0xe1, 0x87, 0x2d, 0x40, 0xe1, 0x28, 0x13, 0x80, 0x20, 0xe5, 0x2d, + 0x13, 0x80, 0x17, 0xe9, 0x2a, 0x13, 0x00, 0xef, 0x2e, 0x13, 0x80, 0x0a, + 0xf5, 0x29, 0x13, 0x00, 0x42, 0xa9, 0x01, 0x2f, 0x13, 0x40, 0xe1, 0x90, + 0x2d, 0x40, 0xe5, 0x2c, 0x13, 0x40, 0xe1, 0x2b, 0x13, 0x40, 0xe5, 0x7c, + 0x12, 0x40, 0xe1, 0xa8, 0x2d, 0x80, 0x55, 0xe5, 0xad, 0x2d, 0x80, 0x4c, + 0xa8, 0x0c, 0xe9, 0xaa, 0x2d, 0x00, 0xef, 0xae, 0x2d, 0x00, 0xf5, 0xa9, + 0x2d, 0x40, 0xe1, 0xb8, 0x2d, 0x80, 0x35, 0xe5, 0xbd, 0x2d, 0x80, 0x2c, + 0xa8, 0x0c, 0xe9, 0xba, 0x2d, 0x00, 0xef, 0xbe, 0x2d, 0x00, 0xf5, 0xb9, + 0x2d, 0x40, 0xe1, 0x20, 0xab, 0x80, 0x15, 0xe5, 0x25, 0xab, 0x80, 0x0c, + 0xe9, 0x22, 0xab, 0x00, 0xef, 0x26, 0xab, 0x00, 0xf5, 0x21, 0xab, 0x40, + 0xe5, 0x24, 0xab, 0x40, 0xe1, 0x23, 0xab, 0x40, 0xe5, 0xbc, 0x2d, 0x40, + 0xe1, 0xbb, 0x2d, 0x40, 0xe5, 0xac, 0x2d, 0x40, 0xe1, 0xab, 0x2d, 0x40, + 0xe1, 0x7b, 0x12, 0x40, 0xe1, 0x60, 0x12, 0x80, 0x4e, 0xa2, 0x2e, 0xe5, + 0x65, 0x12, 0x80, 0x25, 0xe9, 0x62, 0x12, 0x00, 0xef, 0x66, 0x12, 0x80, + 0x18, 0xf5, 0x61, 0x12, 0x00, 0xb7, 0x01, 0xff, 0xe1, 0x67, 0x12, 0x00, + 0xe5, 0x87, 0x13, 0x80, 0x04, 0xe9, 0x85, 0x13, 0x40, 0xe5, 0x86, 0x13, + 0x40, 0xe1, 0x85, 0x2d, 0x40, 0xe5, 0x64, 0x12, 0x40, 0xe1, 0x28, 0xab, + 0x80, 0x15, 0xe5, 0x2d, 0xab, 0x80, 0x0c, 0xe9, 0x2a, 0xab, 0x00, 0xef, + 0x2e, 0xab, 0x00, 0xf5, 0x29, 0xab, 0x40, 0xe5, 0x2c, 0xab, 0x40, 0xe1, + 0x2b, 0xab, 0x40, 0xe1, 0x63, 0x12, 0x40, 0x4a, 0xfa, 0x26, 0x60, 0x13, + 0x00, 0x47, 0xdb, 0x59, 0x64, 0x13, 0x40, 0x52, 0x18, 0x4c, 0x68, 0x13, + 0x00, 0x4c, 0x47, 0x94, 0x66, 0x13, 0x40, 0x46, 0x30, 0xdb, 0x79, 0x13, + 0x00, 0xa6, 0x36, 0x47, 0x71, 0x11, 0x7b, 0x13, 0x00, 0x46, 0xac, 0x2c, + 0x7a, 0x13, 0x00, 0xb3, 0x1c, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0x72, + 0x13, 0x80, 0x0c, 0x45, 0x7a, 0x11, 0x74, 0x13, 0x00, 0x45, 0x7f, 0x2c, + 0x73, 0x13, 0x40, 0x49, 0x3f, 0x5e, 0x7c, 0x13, 0x40, 0x46, 0xc9, 0x1d, + 0x78, 0x13, 0x00, 0x44, 0x46, 0xdd, 0x77, 0x13, 0x40, 0x44, 0x51, 0x4d, + 0x76, 0x13, 0x00, 0x44, 0xce, 0x51, 0x75, 0x13, 0x40, 0x45, 0x12, 0x0b, + 0x70, 0x13, 0x00, 0xa6, 0x29, 0x44, 0xcf, 0x2a, 0x71, 0x13, 0x00, 0x43, + 0x0e, 0x0b, 0x69, 0x13, 0x00, 0xb3, 0x0f, 0xb4, 0x01, 0xff, 0x44, 0x25, + 0x01, 0x6b, 0x13, 0x00, 0x42, 0x15, 0x02, 0x6a, 0x13, 0x40, 0x44, 0xc9, + 0x1d, 0x6f, 0x13, 0x00, 0x42, 0x01, 0x26, 0x6e, 0x13, 0x40, 0x43, 0xd2, + 0x05, 0x6d, 0x13, 0x00, 0x43, 0xf6, 0x06, 0x6c, 0x13, 0x40, 0x43, 0xd7, + 0x02, 0x65, 0x13, 0x00, 0xad, 0x01, 0xff, 0x07, 0x35, 0x16, 0x06, 0x42, + 0x6c, 0x00, 0x63, 0x13, 0x40, 0x0b, 0x89, 0x6d, 0x06, 0x51, 0x3c, 0x39, + 0x5e, 0x13, 0x40, 0x55, 0x38, 0x39, 0x5d, 0x13, 0x00, 0x44, 0xb9, 0x00, + 0x5f, 0x13, 0x40, 0x44, 0xf1, 0x6a, 0x1b, 0x00, 0x00, 0x06, 0x9a, 0xe0, + 0x01, 0xff, 0x48, 0x78, 0x20, 0x2e, 0x21, 0x00, 0xf3, 0x59, 0x22, 0x40, + 0x0b, 0x42, 0x99, 0x42, 0x08, 0x30, 0xc7, 0x32, 0x0b, 0x53, 0xa2, 0x01, + 0xff, 0x06, 0x0c, 0x03, 0x17, 0x06, 0xad, 0x02, 0x01, 0xff, 0x46, 0x12, + 0x03, 0xf2, 0x29, 0x00, 0x47, 0x95, 0x44, 0xf0, 0x29, 0x00, 0x46, 0xd6, + 0x05, 0xee, 0x29, 0x40, 0x46, 0x12, 0x03, 0xf3, 0x29, 0x00, 0x47, 0x95, + 0x44, 0xf1, 0x29, 0x00, 0x46, 0xd6, 0x05, 0xef, 0x29, 0x40, 0x43, 0x0e, + 0x0b, 0xf0, 0x2b, 0x00, 0x43, 0x1f, 0x0a, 0xf1, 0x2b, 0x40, 0x44, 0xc3, + 0x00, 0x2b, 0x23, 0x00, 0x45, 0xc8, 0x00, 0x26, 0x23, 0x40, 0x02, 0x13, + 0x00, 0x1a, 0xa9, 0x01, 0xff, 0x4a, 0xd1, 0xa7, 0x5a, 0x22, 0x00, 0x07, + 0xd7, 0x39, 0x01, 0xff, 0x42, 0x1e, 0x00, 0x4d, 0x22, 0x00, 0x54, 0xcc, + 0x46, 0x78, 0x2a, 0x40, 0x80, 0x6d, 0x02, 0x31, 0x01, 0x01, 0xff, 0x45, + 0x94, 0x3b, 0x55, 0x22, 0x00, 0x44, 0x5a, 0x03, 0x3d, 0x00, 0x80, 0x06, + 0x4d, 0xa4, 0x8a, 0x6e, 0x2a, 0x40, 0x80, 0x01, 0xff, 0xa1, 0x27, 0x05, + 0x51, 0x00, 0x01, 0xff, 0x4b, 0xc6, 0x99, 0xae, 0x2a, 0x00, 0x49, 0x9f, + 0x12, 0x66, 0x2a, 0x00, 0x09, 0x6b, 0xba, 0x06, 0x61, 0xf2, 0x0e, 0x77, + 0x2a, 0x40, 0x45, 0x5c, 0x00, 0x96, 0x2b, 0x00, 0x45, 0x20, 0x07, 0xf9, + 0x2b, 0x40, 0x05, 0x5d, 0x00, 0x0d, 0x53, 0x7d, 0x38, 0xe3, 0x29, 0xc0, + 0x00, 0x51, 0x87, 0x57, 0xe4, 0x29, 0x40, 0x4f, 0x4d, 0x1a, 0x40, 0x2b, + 0x00, 0x49, 0xdf, 0x71, 0x71, 0x2a, 0x00, 0x50, 0xb3, 0x02, 0x71, 0x29, + 0x00, 0x4e, 0x78, 0x3e, 0x73, 0x2a, 0x40, 0x4f, 0xd7, 0x6a, 0xd5, 0x22, + 0x00, 0x03, 0x7a, 0x02, 0x01, 0xff, 0x4d, 0x4c, 0x81, 0x5d, 0x22, 0x00, + 0x03, 0xc8, 0x07, 0x01, 0xff, 0x4c, 0x87, 0x00, 0xdd, 0x22, 0x00, 0x49, + 0xec, 0x00, 0xdc, 0x22, 0x00, 0x48, 0xe8, 0xc9, 0xde, 0x22, 0x00, 0x48, + 0x30, 0xcb, 0xdf, 0x22, 0x40, 0x80, 0x70, 0x02, 0x06, 0x00, 0x24, 0x45, + 0x1f, 0xea, 0x05, 0x00, 0x00, 0x4a, 0x1e, 0x45, 0x86, 0x23, 0x00, 0x46, + 0x45, 0x32, 0x09, 0x27, 0xc0, 0x00, 0x06, 0x50, 0x00, 0x01, 0xff, 0x55, + 0x88, 0x3a, 0xe9, 0xf4, 0x01, 0x49, 0x67, 0xbb, 0x84, 0xf5, 0x41, 0x03, + 0xf4, 0x01, 0x06, 0x5a, 0xa2, 0x22, 0x1a, 0xf5, 0x41, 0x4c, 0x67, 0x8f, + 0x97, 0x00, 0x00, 0x44, 0xed, 0x07, 0x0a, 0x00, 0x00, 0x46, 0x44, 0x04, + 0x19, 0x00, 0x00, 0x03, 0xdf, 0x0c, 0x1c, 0x4d, 0x82, 0x88, 0x87, 0x00, + 0x00, 0xb4, 0x01, 0xff, 0x43, 0xd9, 0x06, 0x03, 0x00, 0x00, 0x4b, 0xc4, + 0xa1, 0x04, 0x00, 0xc0, 0x00, 0x46, 0x32, 0x01, 0x17, 0x00, 0x40, 0x42, + 0xf4, 0x01, 0x0e, 0x22, 0x00, 0x4b, 0x5a, 0x7b, 0x97, 0x00, 0x40, 0x44, + 0x8f, 0x12, 0x13, 0x20, 0x00, 0x44, 0x79, 0x0d, 0x00, 0x20, 0x00, 0x45, + 0xd0, 0x4c, 0x02, 0x20, 0x40, 0x80, 0x9c, 0x01, 0x04, 0xc5, 0xf1, 0x61, + 0xb0, 0x01, 0xff, 0x4c, 0x97, 0x8f, 0x83, 0x23, 0x00, 0x03, 0xcd, 0x1d, + 0x01, 0xff, 0x48, 0x30, 0xc5, 0xcb, 0xf5, 0x01, 0xae, 0x2f, 0x44, 0x79, + 0xa6, 0xcc, 0xf5, 0x81, 0x24, 0x43, 0x9c, 0x12, 0x05, 0x22, 0xc0, 0x00, + 0x06, 0x50, 0x00, 0x01, 0xff, 0x50, 0x76, 0x64, 0xb4, 0x29, 0x00, 0x47, + 0xe6, 0x7f, 0xb1, 0x29, 0x00, 0x51, 0xc8, 0x00, 0xb3, 0x29, 0x00, 0x52, + 0x75, 0x55, 0xb2, 0x29, 0x40, 0xf3, 0xcd, 0xf5, 0x41, 0x43, 0xbf, 0x1a, + 0xb9, 0xfa, 0x01, 0x43, 0x0a, 0x28, 0xc5, 0xf5, 0xc1, 0x00, 0x03, 0xee, + 0x0e, 0x01, 0xff, 0xe4, 0xc7, 0xf5, 0x01, 0x42, 0xdb, 0x09, 0xc6, 0xf5, + 0x41, 0x0a, 0xcb, 0xa8, 0x1b, 0x1a, 0x36, 0x21, 0x01, 0xff, 0x43, 0x86, + 0xf3, 0xfb, 0xf3, 0x01, 0xd3, 0xfc, 0xf3, 0x01, 0xd4, 0xfd, 0xf3, 0x01, + 0xd5, 0xfe, 0xf3, 0x01, 0xd6, 0xff, 0xf3, 0x41, 0x44, 0x2d, 0xef, 0xb2, + 0xf9, 0x01, 0x4a, 0xfd, 0xa8, 0xb1, 0xf9, 0x01, 0x48, 0x50, 0xca, 0xb0, + 0xf9, 0x01, 0x4a, 0x75, 0xb3, 0xb3, 0xf9, 0x41, 0x44, 0x8f, 0x12, 0x14, + 0x20, 0x00, 0x44, 0x79, 0x0d, 0x01, 0x20, 0x00, 0x45, 0xd0, 0x4c, 0x03, + 0x20, 0x40, 0x0d, 0x18, 0x81, 0x96, 0x02, 0xa5, 0xa0, 0x01, 0xe6, 0xdd, + 0xf9, 0x01, 0x07, 0xe5, 0xd7, 0x01, 0xff, 0x06, 0xed, 0x05, 0x06, 0x52, + 0x93, 0x52, 0xf6, 0x0f, 0x41, 0xa1, 0x7f, 0x44, 0x41, 0xef, 0xe1, 0x0f, + 0x01, 0x46, 0x23, 0x4a, 0xe3, 0x0f, 0x01, 0x45, 0xdd, 0xaa, 0xe2, 0x0f, + 0x01, 0x42, 0xb0, 0x01, 0xe4, 0x0f, 0x81, 0x60, 0x44, 0xcd, 0xf0, 0xea, + 0x0f, 0x01, 0x46, 0x94, 0xdd, 0xeb, 0x0f, 0x01, 0x43, 0xb4, 0x05, 0xec, + 0x0f, 0x01, 0x43, 0xdc, 0x22, 0xed, 0x0f, 0x01, 0x42, 0x6f, 0x02, 0xf0, + 0x0f, 0x01, 0x44, 0x4c, 0xc8, 0xf2, 0x0f, 0x01, 0x44, 0x76, 0x66, 0xf3, + 0x0f, 0x01, 0xb3, 0x20, 0xb4, 0x12, 0x43, 0x8a, 0x8a, 0xe5, 0x0f, 0x01, + 0x44, 0xa1, 0x52, 0xe9, 0x0f, 0x01, 0x45, 0x9b, 0x52, 0xe6, 0x0f, 0x41, + 0x42, 0xb7, 0x2d, 0xf5, 0x0f, 0x01, 0x43, 0xda, 0x25, 0xe8, 0x0f, 0x41, + 0xa1, 0x06, 0x43, 0x7a, 0x16, 0xf4, 0x0f, 0x41, 0x43, 0xad, 0xea, 0xf1, + 0x0f, 0x01, 0x44, 0x49, 0xe4, 0xee, 0x0f, 0x41, 0x42, 0x53, 0x00, 0xe7, + 0x0f, 0x41, 0x44, 0x18, 0x3d, 0xe0, 0x0f, 0x01, 0x43, 0x7e, 0x1a, 0xef, + 0x0f, 0x41, 0x05, 0x65, 0xe5, 0x4f, 0x47, 0x54, 0x92, 0x08, 0x22, 0x80, + 0x0c, 0x45, 0x93, 0xc5, 0x18, 0xf4, 0x01, 0x45, 0x18, 0xec, 0xd7, 0xf6, + 0x41, 0x80, 0x01, 0xff, 0x08, 0x01, 0x76, 0x29, 0x05, 0x51, 0x00, 0x01, + 0xff, 0x49, 0x3a, 0x1e, 0xf5, 0x22, 0x00, 0x56, 0x79, 0x35, 0xf2, 0x22, + 0x00, 0x47, 0xe6, 0x7f, 0xf6, 0x22, 0x00, 0x56, 0xaa, 0x0b, 0xf9, 0x22, + 0x00, 0x48, 0xe3, 0x59, 0xf8, 0x22, 0x00, 0x68, 0x30, 0x05, 0xf3, 0x22, + 0x40, 0x49, 0xa5, 0x01, 0xd9, 0x2a, 0x00, 0x47, 0x50, 0x02, 0xd2, 0x27, + 0x40, 0x80, 0x06, 0x4f, 0x14, 0x3c, 0xe7, 0x23, 0x40, 0x45, 0xce, 0x00, + 0x01, 0x23, 0x00, 0x4a, 0x0d, 0xad, 0xa1, 0xf4, 0x01, 0x44, 0x15, 0xf2, + 0x0c, 0xf5, 0x01, 0x45, 0x64, 0xeb, 0x26, 0xf5, 0x41, 0xe1, 0x00, 0x05, + 0x01, 0x42, 0xb7, 0x05, 0x01, 0x05, 0x01, 0xa3, 0xcf, 0x01, 0xa4, 0xc2, + 0x01, 0xe5, 0x08, 0x05, 0x81, 0xb8, 0x01, 0x42, 0x0c, 0x1a, 0x09, 0x05, + 0x01, 0xa7, 0x99, 0x01, 0x42, 0xb0, 0x01, 0x0c, 0x05, 0x01, 0xe9, 0x0d, + 0x05, 0x01, 0x42, 0x80, 0x20, 0x0e, 0x05, 0x01, 0xab, 0x7d, 0xac, 0x71, + 0x42, 0x2a, 0x02, 0x12, 0x05, 0x01, 0xae, 0x55, 0xef, 0x16, 0x05, 0x01, + 0x42, 0x6f, 0x02, 0x17, 0x05, 0x01, 0x42, 0x98, 0xa2, 0x18, 0x05, 0x01, + 0xb2, 0x39, 0xb3, 0x2d, 0xb4, 0x21, 0xf5, 0x1f, 0x05, 0x01, 0x42, 0x32, + 0x00, 0x20, 0x05, 0x01, 0x42, 0x6d, 0x43, 0x21, 0x05, 0x01, 0xf9, 0x22, + 0x05, 0x01, 0xba, 0x01, 0xff, 0xe5, 0x23, 0x05, 0x01, 0x42, 0xb0, 0x01, + 0x24, 0x05, 0x41, 0xe5, 0x1d, 0x05, 0x01, 0x42, 0xb0, 0x01, 0x1e, 0x05, + 0x41, 0xe5, 0x1b, 0x05, 0x01, 0x42, 0xb0, 0x01, 0x1c, 0x05, 0x41, 0xe5, + 0x19, 0x05, 0x01, 0x42, 0x88, 0x00, 0x1a, 0x05, 0x41, 0xe1, 0x14, 0x05, + 0x01, 0x42, 0x04, 0x00, 0x05, 0x05, 0x01, 0xe5, 0x13, 0x05, 0x01, 0x42, + 0x80, 0x20, 0x15, 0x05, 0x41, 0xe5, 0x10, 0x05, 0x01, 0x42, 0x68, 0x00, + 0x11, 0x05, 0x41, 0xe5, 0x0f, 0x05, 0x01, 0x42, 0xb0, 0x01, 0x27, 0x05, + 0x41, 0xe5, 0x0a, 0x05, 0x01, 0xa8, 0x06, 0x42, 0x80, 0x20, 0x0b, 0x05, + 0x41, 0x44, 0x00, 0x21, 0x26, 0x05, 0x01, 0xe5, 0x25, 0x05, 0x41, 0xe9, + 0x07, 0x05, 0x41, 0xe5, 0x04, 0x05, 0x01, 0x42, 0xb0, 0x01, 0x06, 0x05, + 0x41, 0xe5, 0x02, 0x05, 0x01, 0x42, 0xb0, 0x01, 0x03, 0x05, 0x41, 0x80, + 0x06, 0x46, 0xca, 0x63, 0x6a, 0x26, 0x40, 0xb0, 0x1c, 0x05, 0x46, 0x66, + 0x0c, 0x4f, 0xd5, 0x1c, 0x33, 0x27, 0x00, 0x62, 0x22, 0x0d, 0x4a, 0x27, + 0x40, 0x46, 0x0a, 0xdd, 0x69, 0xcc, 0x01, 0x47, 0x3b, 0xd4, 0x6a, 0xcc, + 0x41, 0x5f, 0x10, 0x11, 0x41, 0x27, 0x00, 0x07, 0x34, 0x08, 0x01, 0xff, + 0x4a, 0xf4, 0x2b, 0x34, 0x27, 0x00, 0x4d, 0x28, 0x13, 0x35, 0x27, 0x00, + 0x56, 0xad, 0x36, 0x37, 0x27, 0x40, 0x44, 0x4b, 0x5a, 0xc6, 0xce, 0x01, + 0xe7, 0x5a, 0xf9, 0x01, 0x11, 0xe5, 0x5f, 0x01, 0xff, 0x80, 0x04, 0xcd, + 0x02, 0xd8, 0x40, 0xa1, 0xe6, 0x23, 0xa2, 0x9f, 0x23, 0x02, 0x0e, 0xf5, + 0xa1, 0x22, 0x02, 0x10, 0xf5, 0x8e, 0x1f, 0xa5, 0xb1, 0x1d, 0xa6, 0x88, + 0x1b, 0x02, 0x12, 0xf5, 0xeb, 0x18, 0xa8, 0xa9, 0x18, 0xa9, 0x98, 0x17, + 0x03, 0x61, 0xf4, 0xf3, 0x16, 0xac, 0xbc, 0x16, 0xad, 0x9f, 0x13, 0xae, + 0xe7, 0x0f, 0xaf, 0x93, 0x0d, 0x02, 0x71, 0xd8, 0xd3, 0x0c, 0x03, 0x85, + 0xf4, 0xb2, 0x0c, 0x02, 0xf7, 0xcd, 0x9a, 0x0b, 0x02, 0xf9, 0xe1, 0xaa, + 0x09, 0xb4, 0xdd, 0x07, 0x02, 0xe0, 0xec, 0x8c, 0x06, 0xb6, 0xaf, 0x03, + 0xb7, 0x96, 0x02, 0x03, 0xc7, 0xf4, 0xde, 0x01, 0x03, 0xd3, 0xf4, 0xb4, + 0x01, 0x02, 0x20, 0xf5, 0x01, 0xff, 0x90, 0x65, 0x91, 0x01, 0xff, 0xd0, + 0xf5, 0x33, 0x01, 0xd1, 0xf6, 0x33, 0x01, 0xd2, 0xf7, 0x33, 0x01, 0xd3, + 0xf8, 0x33, 0x01, 0xd4, 0xf9, 0x33, 0x01, 0xd5, 0xfa, 0x33, 0x81, 0x25, + 0xd6, 0x04, 0x34, 0xc1, 0x00, 0xe1, 0x05, 0x34, 0x01, 0xe2, 0x06, 0x34, + 0x01, 0xe3, 0x07, 0x34, 0x01, 0xe4, 0x08, 0x34, 0x01, 0xe5, 0x09, 0x34, + 0x01, 0xe6, 0x0a, 0x34, 0x01, 0xe7, 0x0b, 0x34, 0x01, 0xe8, 0x0c, 0x34, + 0x41, 0xe1, 0xfb, 0x33, 0x01, 0xe2, 0xfc, 0x33, 0x01, 0xe3, 0xfd, 0x33, + 0x01, 0xe4, 0xfe, 0x33, 0x01, 0xe5, 0xff, 0x33, 0x01, 0xe6, 0x00, 0x34, + 0x01, 0xe7, 0x01, 0x34, 0x01, 0xe8, 0x02, 0x34, 0x01, 0xe9, 0x03, 0x34, + 0x41, 0xd1, 0xe4, 0x33, 0x01, 0xd2, 0xe5, 0x33, 0x81, 0x2f, 0xd3, 0xea, + 0x33, 0x81, 0x22, 0xd4, 0xed, 0x33, 0x81, 0x19, 0xd5, 0xef, 0x33, 0x81, + 0x10, 0xd6, 0xf1, 0x33, 0x01, 0xd7, 0xf2, 0x33, 0x01, 0xd8, 0xf3, 0x33, + 0x01, 0xd9, 0xf4, 0x33, 0x41, 0xe1, 0xf0, 0x33, 0x41, 0xe1, 0xee, 0x33, + 0x41, 0xe1, 0xeb, 0x33, 0x01, 0xe2, 0xec, 0x33, 0x41, 0xe1, 0xe6, 0x33, + 0x01, 0xe2, 0xe7, 0x33, 0x01, 0xe3, 0xe8, 0x33, 0x01, 0xe4, 0xe9, 0x33, + 0x41, 0xd1, 0xdb, 0x33, 0x81, 0x1c, 0xd2, 0xdd, 0x33, 0x01, 0xd3, 0xde, + 0x33, 0x01, 0xd4, 0xdf, 0x33, 0x01, 0xd5, 0xe0, 0x33, 0x01, 0xd6, 0xe1, + 0x33, 0x01, 0xd7, 0xe2, 0x33, 0x01, 0xd8, 0xe3, 0x33, 0x41, 0xe1, 0xdc, + 0x33, 0x41, 0xd1, 0xcf, 0x33, 0x01, 0xd2, 0xd0, 0x33, 0x01, 0xd3, 0xd1, + 0x33, 0x01, 0xd4, 0xd2, 0x33, 0x81, 0x1a, 0xd5, 0xd5, 0x33, 0x01, 0xd6, + 0xd6, 0x33, 0x81, 0x0d, 0xd7, 0xd8, 0x33, 0x01, 0xd8, 0xd9, 0x33, 0xc1, + 0x00, 0xe1, 0xda, 0x33, 0x41, 0xe1, 0xd7, 0x33, 0x41, 0xe1, 0xd3, 0x33, + 0x01, 0xe2, 0xd4, 0x33, 0x41, 0x90, 0x06, 0x4d, 0xf0, 0x83, 0x46, 0x34, + 0x41, 0x90, 0x5e, 0x91, 0x20, 0x92, 0x01, 0xff, 0xd0, 0xc8, 0x33, 0x01, + 0xd1, 0xc9, 0x33, 0x01, 0xd2, 0xca, 0x33, 0x01, 0xd3, 0xcb, 0x33, 0x01, + 0xd4, 0xcc, 0x33, 0x81, 0x04, 0xd5, 0xce, 0x33, 0x41, 0xe1, 0xcd, 0x33, + 0x41, 0xd0, 0xba, 0x33, 0x81, 0x33, 0xd1, 0xbc, 0x33, 0x01, 0xd2, 0xbd, + 0x33, 0x01, 0xd3, 0xbe, 0x33, 0x01, 0xd4, 0xbf, 0x33, 0x81, 0x1e, 0xd5, + 0xc1, 0x33, 0x01, 0xd6, 0xc2, 0x33, 0x01, 0xd7, 0xc3, 0x33, 0x81, 0x0d, + 0xd8, 0xc5, 0x33, 0x81, 0x04, 0xd9, 0xc7, 0x33, 0x41, 0xe1, 0xc6, 0x33, + 0x41, 0xe1, 0xc4, 0x33, 0x41, 0xe1, 0xc0, 0x33, 0x41, 0xe1, 0xbb, 0x33, + 0x41, 0xd1, 0xaf, 0x33, 0x01, 0xd2, 0xb0, 0x33, 0x01, 0xd3, 0xb1, 0x33, + 0x81, 0x1d, 0xd4, 0xb3, 0x33, 0x01, 0xd5, 0xb4, 0x33, 0x01, 0xd6, 0xb5, + 0x33, 0x01, 0xd7, 0xb6, 0x33, 0x01, 0xd8, 0xb7, 0x33, 0x01, 0xd9, 0xb8, + 0x33, 0xc1, 0x00, 0xe1, 0xb9, 0x33, 0x41, 0xe1, 0xb2, 0x33, 0x41, 0x90, + 0x06, 0x4e, 0x91, 0x77, 0x30, 0x34, 0x41, 0x90, 0xf8, 0x01, 0x91, 0xb3, + 0x01, 0x92, 0x49, 0x93, 0x0b, 0x42, 0xf8, 0xf4, 0xad, 0x33, 0xc1, 0x00, + 0xe1, 0xae, 0x33, 0x41, 0xd0, 0x9f, 0x33, 0x81, 0x33, 0xd1, 0xa1, 0x33, + 0x81, 0x2a, 0xd2, 0xa3, 0x33, 0x01, 0xd3, 0xa4, 0x33, 0x81, 0x1d, 0xd4, + 0xa6, 0x33, 0x01, 0xd5, 0xa7, 0x33, 0x01, 0xd6, 0xa8, 0x33, 0x01, 0xd7, + 0xa9, 0x33, 0x81, 0x08, 0xd8, 0xab, 0x33, 0x01, 0xd9, 0xac, 0x33, 0x41, + 0xe1, 0xaa, 0x33, 0x41, 0xe1, 0xa5, 0x33, 0x41, 0xe1, 0xa2, 0x33, 0x41, + 0xe1, 0xa0, 0x33, 0x41, 0xd0, 0x86, 0x33, 0x81, 0x33, 0xd1, 0x93, 0x33, + 0x01, 0xd2, 0x94, 0x33, 0x01, 0xd3, 0x95, 0x33, 0x81, 0x22, 0xd4, 0x97, + 0x33, 0x01, 0xd5, 0x98, 0x33, 0x01, 0xd6, 0x99, 0x33, 0x01, 0xd7, 0x9a, + 0x33, 0x01, 0xd8, 0x9b, 0x33, 0x81, 0x09, 0xd9, 0x9d, 0x33, 0xc1, 0x00, + 0xe1, 0x9e, 0x33, 0x41, 0xe1, 0x9c, 0x33, 0x41, 0xe1, 0x96, 0x33, 0x41, + 0xe1, 0x87, 0x33, 0x01, 0xe2, 0x88, 0x33, 0x01, 0xe3, 0x89, 0x33, 0x01, + 0xe4, 0x8a, 0x33, 0x01, 0xe5, 0x8b, 0x33, 0x01, 0xe6, 0x8c, 0x33, 0x01, + 0xe7, 0x8d, 0x33, 0x01, 0xe8, 0x8e, 0x33, 0x01, 0xe9, 0x8f, 0x33, 0x01, + 0xea, 0x90, 0x33, 0x01, 0xeb, 0x91, 0x33, 0x01, 0xec, 0x92, 0x33, 0x41, + 0xd0, 0x77, 0x33, 0x01, 0xd1, 0x78, 0x33, 0x81, 0x29, 0xd2, 0x7c, 0x33, + 0x81, 0x1c, 0xd3, 0x7f, 0x33, 0x01, 0xd4, 0x80, 0x33, 0x01, 0xd5, 0x81, + 0x33, 0x01, 0xd6, 0x82, 0x33, 0x01, 0xd7, 0x83, 0x33, 0x01, 0xd8, 0x84, + 0x33, 0x01, 0xd9, 0x85, 0x33, 0x41, 0xe1, 0x7d, 0x33, 0x01, 0xe2, 0x7e, + 0x33, 0x41, 0xe1, 0x79, 0x33, 0x01, 0xe2, 0x7a, 0x33, 0x01, 0xe3, 0x7b, + 0x33, 0x01, 0xe4, 0x2f, 0x34, 0x41, 0xd1, 0x62, 0x33, 0x81, 0x2e, 0xd2, + 0x6c, 0x33, 0x81, 0x25, 0xd3, 0x6e, 0x33, 0x01, 0xd4, 0x6f, 0x33, 0x01, + 0xd5, 0x70, 0x33, 0x01, 0xd6, 0x71, 0x33, 0x01, 0xd7, 0x72, 0x33, 0x81, + 0x08, 0xd8, 0x75, 0x33, 0x01, 0xd9, 0x76, 0x33, 0x41, 0xe1, 0x73, 0x33, + 0x01, 0xe2, 0x74, 0x33, 0x41, 0xe1, 0x6d, 0x33, 0x41, 0xe1, 0x63, 0x33, + 0x01, 0xe2, 0x64, 0x33, 0x01, 0xe3, 0x65, 0x33, 0x01, 0xe4, 0x66, 0x33, + 0x01, 0xe5, 0x67, 0x33, 0x01, 0xe6, 0x68, 0x33, 0x01, 0xe7, 0x69, 0x33, + 0x01, 0xe8, 0x6a, 0x33, 0x01, 0xe9, 0x6b, 0x33, 0x41, 0x90, 0x9c, 0x01, + 0x91, 0x72, 0x92, 0x3e, 0x93, 0x0f, 0x94, 0x01, 0xff, 0xd0, 0x5f, 0x33, + 0x01, 0xd1, 0x60, 0x33, 0x01, 0xd2, 0x61, 0x33, 0x41, 0xd0, 0x54, 0x33, + 0x01, 0xd1, 0x55, 0x33, 0x01, 0xd2, 0x56, 0x33, 0x81, 0x1c, 0xd3, 0x58, + 0x33, 0x01, 0xd4, 0x59, 0x33, 0x01, 0xd5, 0x5a, 0x33, 0x01, 0xd6, 0x5b, + 0x33, 0x01, 0xd7, 0x5c, 0x33, 0x01, 0xd8, 0x5d, 0x33, 0x01, 0xd9, 0x5e, + 0x33, 0x41, 0xe1, 0x57, 0x33, 0x41, 0xd0, 0x48, 0x33, 0x01, 0xd1, 0x49, + 0x33, 0x01, 0xd2, 0x4a, 0x33, 0x01, 0xd3, 0x4b, 0x33, 0x81, 0x1d, 0xd4, + 0x4d, 0x33, 0x01, 0xd5, 0x4e, 0x33, 0x01, 0xd6, 0x4f, 0x33, 0x01, 0xd7, + 0x50, 0x33, 0x01, 0xd8, 0x51, 0x33, 0x01, 0xd9, 0x52, 0x33, 0xc1, 0x00, + 0xe1, 0x53, 0x33, 0x41, 0xe1, 0x4c, 0x33, 0x41, 0xd0, 0x3e, 0x33, 0x01, + 0xd1, 0x3f, 0x33, 0x01, 0xd2, 0x40, 0x33, 0x01, 0xd3, 0x41, 0x33, 0x01, + 0xd4, 0x42, 0x33, 0x01, 0xd5, 0x43, 0x33, 0x01, 0xd6, 0x44, 0x33, 0x01, + 0xd7, 0x45, 0x33, 0x01, 0xd8, 0x46, 0x33, 0x01, 0xd9, 0x47, 0x33, 0x41, + 0xd1, 0x33, 0x33, 0x01, 0xd2, 0x34, 0x33, 0x01, 0xd3, 0x35, 0x33, 0x01, + 0xd4, 0x36, 0x33, 0x01, 0xd5, 0x37, 0x33, 0x01, 0xd6, 0x38, 0x33, 0x81, + 0x0c, 0xd7, 0x3b, 0x33, 0x01, 0xd8, 0x3c, 0x33, 0x01, 0xd9, 0x3d, 0x33, + 0x41, 0xe1, 0x39, 0x33, 0x01, 0xe2, 0x3a, 0x33, 0x41, 0x90, 0x06, 0x4d, + 0x48, 0x80, 0x45, 0x34, 0x41, 0x90, 0x87, 0x01, 0x91, 0x53, 0x92, 0x29, + 0x93, 0x01, 0xff, 0xd0, 0x2a, 0x33, 0x01, 0xd1, 0x2b, 0x33, 0x01, 0xd2, + 0x2c, 0x33, 0x81, 0x15, 0xd3, 0x2e, 0x33, 0x81, 0x0c, 0xd4, 0x30, 0x33, + 0x01, 0xd5, 0x31, 0x33, 0x01, 0xd6, 0x32, 0x33, 0x41, 0xe1, 0x2f, 0x33, + 0x41, 0xe1, 0x2d, 0x33, 0x41, 0xd0, 0x20, 0x33, 0x01, 0xd1, 0x21, 0x33, + 0x01, 0xd2, 0x22, 0x33, 0x01, 0xd3, 0x23, 0x33, 0x01, 0xd4, 0x24, 0x33, + 0x01, 0xd5, 0x25, 0x33, 0x01, 0xd6, 0x26, 0x33, 0x01, 0xd7, 0x27, 0x33, + 0x01, 0xd8, 0x28, 0x33, 0x01, 0xd9, 0x29, 0x33, 0x41, 0xd0, 0x14, 0x33, + 0x01, 0xd1, 0x15, 0x33, 0x81, 0x25, 0xd2, 0x17, 0x33, 0x01, 0xd3, 0x18, + 0x33, 0x01, 0xd4, 0x19, 0x33, 0x01, 0xd5, 0x1a, 0x33, 0x01, 0xd6, 0x1b, + 0x33, 0x81, 0x0c, 0xd7, 0x1d, 0x33, 0x01, 0xd8, 0x1e, 0x33, 0x01, 0xd9, + 0x1f, 0x33, 0x41, 0xe1, 0x1c, 0x33, 0x41, 0xe1, 0x16, 0x33, 0x41, 0xd1, + 0x07, 0x33, 0x01, 0xd2, 0x08, 0x33, 0x01, 0xd3, 0x09, 0x33, 0x81, 0x27, + 0xd4, 0x0b, 0x33, 0x01, 0xd5, 0x0c, 0x33, 0x01, 0xd6, 0x0d, 0x33, 0x01, + 0xd7, 0x0e, 0x33, 0x81, 0x12, 0xd8, 0x10, 0x33, 0x81, 0x09, 0xd9, 0x12, + 0x33, 0xc1, 0x00, 0xe1, 0x13, 0x33, 0x41, 0xe1, 0x11, 0x33, 0x41, 0xe1, + 0x0f, 0x33, 0x41, 0xe1, 0x0a, 0x33, 0x41, 0x90, 0xba, 0x01, 0x91, 0x81, + 0x01, 0x92, 0x4e, 0x93, 0x1f, 0x94, 0x01, 0xff, 0xd0, 0x00, 0x33, 0x01, + 0xd1, 0x01, 0x33, 0x01, 0xd2, 0x02, 0x33, 0x01, 0xd3, 0x03, 0x33, 0x01, + 0xd4, 0x04, 0x33, 0x01, 0xd5, 0x05, 0x33, 0x01, 0xd6, 0x06, 0x33, 0x41, + 0xd0, 0xf5, 0x32, 0x01, 0xd1, 0xf6, 0x32, 0x01, 0xd2, 0xf7, 0x32, 0x01, + 0xd3, 0xf8, 0x32, 0x01, 0xd4, 0xf9, 0x32, 0x01, 0xd5, 0xfa, 0x32, 0x81, + 0x10, 0xd6, 0xfc, 0x32, 0x01, 0xd7, 0xfd, 0x32, 0x01, 0xd8, 0xfe, 0x32, + 0x01, 0xd9, 0xff, 0x32, 0x41, 0xe1, 0xfb, 0x32, 0x41, 0xd0, 0xe9, 0x32, + 0x01, 0xd1, 0xea, 0x32, 0x01, 0xd2, 0xeb, 0x32, 0x01, 0xd3, 0xec, 0x32, + 0x01, 0xd4, 0xed, 0x32, 0x01, 0xd5, 0xee, 0x32, 0x01, 0xd6, 0xef, 0x32, + 0x81, 0x0c, 0xd7, 0xf2, 0x32, 0x01, 0xd8, 0xf3, 0x32, 0x01, 0xd9, 0xf4, + 0x32, 0x41, 0xe1, 0xf0, 0x32, 0x01, 0xe2, 0xf1, 0x32, 0x41, 0xd0, 0xdc, + 0x32, 0x01, 0xd1, 0xdd, 0x32, 0x01, 0xd2, 0xde, 0x32, 0x01, 0xd3, 0xdf, + 0x32, 0x01, 0xd4, 0xe0, 0x32, 0x81, 0x19, 0xd5, 0xe3, 0x32, 0x01, 0xd6, + 0xe4, 0x32, 0x01, 0xd7, 0xe5, 0x32, 0x81, 0x08, 0xd8, 0xe7, 0x32, 0x01, + 0xd9, 0xe8, 0x32, 0x41, 0xe1, 0xe6, 0x32, 0x41, 0xe1, 0xe1, 0x32, 0x01, + 0xe2, 0xe2, 0x32, 0x41, 0xd1, 0xd1, 0x32, 0x01, 0xd2, 0xd2, 0x32, 0x81, + 0x21, 0xd3, 0xd4, 0x32, 0x01, 0xd4, 0xd5, 0x32, 0x01, 0xd5, 0xd6, 0x32, + 0x01, 0xd6, 0xd7, 0x32, 0x81, 0x0c, 0xd7, 0xd9, 0x32, 0x01, 0xd8, 0xda, + 0x32, 0x01, 0xd9, 0xdb, 0x32, 0x41, 0xe1, 0xd8, 0x32, 0x41, 0xe1, 0xd3, + 0x32, 0x41, 0x90, 0x5f, 0x91, 0x2b, 0x92, 0x01, 0xff, 0xd0, 0xc7, 0x32, + 0x01, 0xd1, 0xc8, 0x32, 0x01, 0xd2, 0xc9, 0x32, 0x01, 0xd3, 0xca, 0x32, + 0x01, 0xd4, 0xcb, 0x32, 0x01, 0xd5, 0xcc, 0x32, 0x01, 0xd6, 0xcd, 0x32, + 0x01, 0xd7, 0xce, 0x32, 0x01, 0xd8, 0xcf, 0x32, 0x01, 0xd9, 0xd0, 0x32, + 0x41, 0xd0, 0xbb, 0x32, 0x81, 0x29, 0xd1, 0xbd, 0x32, 0x01, 0xd2, 0xbe, + 0x32, 0x01, 0xd3, 0xbf, 0x32, 0x01, 0xd4, 0xc0, 0x32, 0x01, 0xd5, 0xc1, + 0x32, 0x01, 0xd6, 0xc2, 0x32, 0x81, 0x0c, 0xd7, 0xc4, 0x32, 0x01, 0xd8, + 0xc5, 0x32, 0x01, 0xd9, 0xc6, 0x32, 0x41, 0xe1, 0xc3, 0x32, 0x41, 0xe1, + 0xbc, 0x32, 0x41, 0xd1, 0xaf, 0x32, 0x01, 0xd2, 0xb0, 0x32, 0x81, 0x25, + 0xd3, 0xb2, 0x32, 0x81, 0x18, 0xd4, 0xb5, 0x32, 0x01, 0xd5, 0xb6, 0x32, + 0x01, 0xd6, 0xb7, 0x32, 0x01, 0xd7, 0xb8, 0x32, 0x01, 0xd8, 0xb9, 0x32, + 0x01, 0xd9, 0xba, 0x32, 0x41, 0xe1, 0xb3, 0x32, 0x01, 0xe2, 0xb4, 0x32, + 0x41, 0xe1, 0xb1, 0x32, 0x41, 0xd1, 0xa8, 0x32, 0x01, 0xd2, 0xa9, 0x32, + 0x01, 0xd3, 0xaa, 0x32, 0x01, 0xd4, 0xab, 0x32, 0x01, 0xd5, 0xac, 0x32, + 0x01, 0xd6, 0xad, 0x32, 0x01, 0xd7, 0xae, 0x32, 0x41, 0x90, 0x0b, 0x91, + 0x01, 0xff, 0xd0, 0xa6, 0x32, 0x01, 0xd1, 0xa7, 0x32, 0x41, 0xd1, 0x9b, + 0x32, 0x81, 0x25, 0xd2, 0x9d, 0x32, 0x01, 0xd3, 0x9e, 0x32, 0x81, 0x18, + 0xd4, 0xa0, 0x32, 0x01, 0xd5, 0xa1, 0x32, 0x01, 0xd6, 0xa2, 0x32, 0x01, + 0xd7, 0xa3, 0x32, 0x01, 0xd8, 0xa4, 0x32, 0x01, 0xd9, 0xa5, 0x32, 0x41, + 0xe1, 0x9f, 0x32, 0x41, 0xe1, 0x9c, 0x32, 0x41, 0x90, 0x06, 0x4d, 0x15, + 0x8a, 0x36, 0x34, 0x41, 0x90, 0xff, 0x01, 0x91, 0xc2, 0x01, 0x92, 0x83, + 0x01, 0x93, 0x3e, 0x94, 0x14, 0x95, 0x01, 0xff, 0xd0, 0x97, 0x32, 0x81, + 0x04, 0xd1, 0x9a, 0x32, 0x41, 0xe1, 0x98, 0x32, 0x01, 0xe2, 0x99, 0x32, + 0x41, 0xd0, 0x8d, 0x32, 0x01, 0xd1, 0x8e, 0x32, 0x01, 0xd2, 0x8f, 0x32, + 0x01, 0xd3, 0x90, 0x32, 0x01, 0xd4, 0x91, 0x32, 0x01, 0xd5, 0x92, 0x32, + 0x01, 0xd6, 0x93, 0x32, 0x01, 0xd7, 0x94, 0x32, 0x01, 0xd8, 0x95, 0x32, + 0x01, 0xd9, 0x96, 0x32, 0x41, 0xd0, 0x7d, 0x32, 0x81, 0x3a, 0xd1, 0x7f, + 0x32, 0x01, 0xd2, 0x80, 0x32, 0x01, 0xd3, 0x81, 0x32, 0x81, 0x29, 0xd4, + 0x83, 0x32, 0x01, 0xd5, 0x84, 0x32, 0x01, 0xd6, 0x85, 0x32, 0x81, 0x0c, + 0xd7, 0x8a, 0x32, 0x01, 0xd8, 0x8b, 0x32, 0x01, 0xd9, 0x8c, 0x32, 0x41, + 0xe1, 0x86, 0x32, 0x01, 0xe2, 0x87, 0x32, 0x01, 0xe3, 0x88, 0x32, 0x01, + 0xe4, 0x89, 0x32, 0x41, 0xe1, 0x82, 0x32, 0x41, 0xe1, 0x7e, 0x32, 0x41, + 0xd0, 0x6f, 0x32, 0x81, 0x33, 0xd1, 0x71, 0x32, 0x01, 0xd2, 0x72, 0x32, + 0x01, 0xd3, 0x73, 0x32, 0x01, 0xd4, 0x74, 0x32, 0x81, 0x1e, 0xd5, 0x76, + 0x32, 0x81, 0x15, 0xd6, 0x78, 0x32, 0x01, 0xd7, 0x79, 0x32, 0x01, 0xd8, + 0x7a, 0x32, 0x01, 0xd9, 0x7b, 0x32, 0xc1, 0x00, 0xe1, 0x7c, 0x32, 0x41, + 0xe1, 0x77, 0x32, 0x41, 0xe1, 0x75, 0x32, 0x41, 0xe1, 0x70, 0x32, 0x41, + 0xd0, 0x61, 0x32, 0x81, 0x29, 0xd1, 0x65, 0x32, 0x01, 0xd2, 0x66, 0x32, + 0x01, 0xd3, 0x67, 0x32, 0x01, 0xd4, 0x68, 0x32, 0x01, 0xd5, 0x69, 0x32, + 0x01, 0xd6, 0x6a, 0x32, 0x01, 0xd7, 0x6b, 0x32, 0x01, 0xd8, 0x6c, 0x32, + 0x01, 0xd9, 0x6d, 0x32, 0xc1, 0x00, 0xe1, 0x6e, 0x32, 0x41, 0xe1, 0x62, + 0x32, 0x01, 0xe2, 0x63, 0x32, 0x01, 0xe3, 0x64, 0x32, 0x41, 0xd1, 0x50, + 0x32, 0x81, 0x3e, 0xd2, 0x52, 0x32, 0x01, 0xd3, 0x53, 0x32, 0x01, 0xd4, + 0x54, 0x32, 0x01, 0xd5, 0x55, 0x32, 0x81, 0x29, 0xd6, 0x57, 0x32, 0x81, + 0x0c, 0xd7, 0x5e, 0x32, 0x01, 0xd8, 0x5f, 0x32, 0x01, 0xd9, 0x60, 0x32, + 0x41, 0xe1, 0x58, 0x32, 0x01, 0xe2, 0x59, 0x32, 0x01, 0xe3, 0x5a, 0x32, + 0x01, 0xe4, 0x5b, 0x32, 0x01, 0xe5, 0x5c, 0x32, 0x01, 0xe6, 0x5d, 0x32, + 0x41, 0xe1, 0x56, 0x32, 0x41, 0xe1, 0x51, 0x32, 0x41, 0x90, 0xdc, 0x01, + 0x02, 0x7b, 0x98, 0x78, 0x02, 0xe0, 0xec, 0x01, 0xff, 0x90, 0x4d, 0x91, + 0x14, 0x92, 0x01, 0xff, 0xd0, 0x4c, 0x32, 0x01, 0xd1, 0x4d, 0x32, 0x01, + 0xd2, 0x4e, 0x32, 0xc1, 0x00, 0xe1, 0x4f, 0x32, 0x41, 0xd0, 0x3f, 0x32, + 0x81, 0x2e, 0xd1, 0x41, 0x32, 0x81, 0x25, 0xd2, 0x43, 0x32, 0x01, 0xd3, + 0x44, 0x32, 0x01, 0xd4, 0x45, 0x32, 0x01, 0xd5, 0x46, 0x32, 0x01, 0xd6, + 0x47, 0x32, 0x01, 0xd7, 0x48, 0x32, 0x01, 0xd8, 0x49, 0x32, 0x81, 0x04, + 0xd9, 0x4b, 0x32, 0x41, 0xe1, 0x4a, 0x32, 0x41, 0xe1, 0x42, 0x32, 0x41, + 0xe1, 0x40, 0x32, 0x41, 0xd1, 0x36, 0x32, 0x01, 0xd2, 0x37, 0x32, 0x01, + 0xd3, 0x38, 0x32, 0x01, 0xd4, 0x39, 0x32, 0x01, 0xd5, 0x3a, 0x32, 0x01, + 0xd6, 0x3b, 0x32, 0x01, 0xd7, 0x3c, 0x32, 0x01, 0xd8, 0x3d, 0x32, 0x01, + 0xd9, 0x3e, 0x32, 0x41, 0x90, 0x35, 0x91, 0x06, 0x42, 0xc0, 0xe7, 0x35, + 0x32, 0x41, 0xd0, 0x2a, 0x32, 0x01, 0xd1, 0x2b, 0x32, 0x01, 0xd2, 0x2c, + 0x32, 0x01, 0xd3, 0x2d, 0x32, 0x01, 0xd4, 0x2e, 0x32, 0x01, 0xd5, 0x2f, + 0x32, 0x01, 0xd6, 0x30, 0x32, 0x01, 0xd7, 0x31, 0x32, 0x81, 0x08, 0xd8, + 0x33, 0x32, 0x01, 0xd9, 0x34, 0x32, 0x41, 0xe1, 0x32, 0x32, 0x41, 0xd1, + 0x20, 0x32, 0x01, 0xd2, 0x21, 0x32, 0x01, 0xd3, 0x22, 0x32, 0x01, 0xd4, + 0x23, 0x32, 0x01, 0xd5, 0x24, 0x32, 0x81, 0x10, 0xd6, 0x26, 0x32, 0x01, + 0xd7, 0x27, 0x32, 0x01, 0xd8, 0x28, 0x32, 0x01, 0xd9, 0x29, 0x32, 0x41, + 0xe1, 0x25, 0x32, 0x41, 0x90, 0xaf, 0x01, 0x91, 0x7c, 0x92, 0x4d, 0x93, + 0x0f, 0x94, 0x01, 0xff, 0xd0, 0x1d, 0x32, 0x01, 0xd1, 0x1e, 0x32, 0x01, + 0xd2, 0x1f, 0x32, 0x41, 0xd0, 0x0f, 0x32, 0x01, 0xd1, 0x10, 0x32, 0x01, + 0xd2, 0x11, 0x32, 0x01, 0xd3, 0x12, 0x32, 0x81, 0x27, 0xd4, 0x14, 0x32, + 0x81, 0x1e, 0xd5, 0x16, 0x32, 0x81, 0x15, 0xd6, 0x18, 0x32, 0x01, 0xd7, + 0x19, 0x32, 0x81, 0x08, 0xd8, 0x1b, 0x32, 0x01, 0xd9, 0x1c, 0x32, 0x41, + 0xe1, 0x1a, 0x32, 0x41, 0xe1, 0x17, 0x32, 0x41, 0xe1, 0x15, 0x32, 0x41, + 0xe1, 0x13, 0x32, 0x41, 0xd0, 0x04, 0x32, 0x01, 0xd1, 0x05, 0x32, 0x01, + 0xd2, 0x06, 0x32, 0x01, 0xd3, 0x07, 0x32, 0x01, 0xd4, 0x08, 0x32, 0x01, + 0xd5, 0x09, 0x32, 0x81, 0x10, 0xd6, 0x0b, 0x32, 0x01, 0xd7, 0x0c, 0x32, + 0x01, 0xd8, 0x0d, 0x32, 0x01, 0xd9, 0x0e, 0x32, 0x41, 0xe1, 0x0a, 0x32, + 0x41, 0xd0, 0xf8, 0x31, 0x01, 0xd1, 0xf9, 0x31, 0x01, 0xd2, 0xfa, 0x31, + 0x01, 0xd3, 0xfb, 0x31, 0x01, 0xd4, 0xfc, 0x31, 0x01, 0xd5, 0xfd, 0x31, + 0x01, 0xd6, 0xfe, 0x31, 0x01, 0xd7, 0xff, 0x31, 0x01, 0xd8, 0x00, 0x32, + 0x81, 0x04, 0xd9, 0x03, 0x32, 0x41, 0xe1, 0x01, 0x32, 0x01, 0xe2, 0x02, + 0x32, 0x41, 0xd1, 0xef, 0x31, 0x01, 0xd2, 0xf0, 0x31, 0x01, 0xd3, 0xf1, + 0x31, 0x01, 0xd4, 0xf2, 0x31, 0x01, 0xd5, 0xf3, 0x31, 0x01, 0xd6, 0xf4, + 0x31, 0x01, 0xd7, 0xf5, 0x31, 0x01, 0xd8, 0xf6, 0x31, 0x01, 0xd9, 0xf7, + 0x31, 0x41, 0x90, 0x76, 0x52, 0xdb, 0x52, 0x40, 0x34, 0x01, 0x4f, 0xef, + 0x70, 0x55, 0x34, 0xc1, 0x00, 0x04, 0x3c, 0x05, 0x01, 0xff, 0x46, 0xb5, + 0x0a, 0x50, 0x34, 0x81, 0x41, 0x43, 0x40, 0x05, 0x52, 0x34, 0x01, 0x45, + 0x0f, 0xeb, 0x49, 0x34, 0x81, 0x23, 0x43, 0x1e, 0x00, 0x4b, 0x34, 0xc1, + 0x00, 0x80, 0x01, 0xff, 0x47, 0xca, 0xce, 0x53, 0x34, 0x01, 0x43, 0x40, + 0x05, 0x4a, 0x34, 0x01, 0x45, 0x0f, 0xeb, 0x47, 0x34, 0xc1, 0x00, 0x4f, + 0x15, 0x69, 0x4f, 0x34, 0x41, 0x05, 0x19, 0x00, 0x01, 0xff, 0x46, 0xb5, + 0x0a, 0x51, 0x34, 0x01, 0x43, 0x1e, 0x00, 0x4d, 0x34, 0x41, 0x80, 0x01, + 0xff, 0x47, 0xca, 0xce, 0x54, 0x34, 0x01, 0x43, 0x40, 0x05, 0x4e, 0x34, + 0x01, 0x45, 0x0f, 0xeb, 0x48, 0x34, 0xc1, 0x00, 0x4c, 0x0b, 0x8b, 0x4c, + 0x34, 0x41, 0x90, 0xed, 0x01, 0x91, 0x8d, 0x01, 0x92, 0x54, 0x93, 0x1c, + 0x94, 0x01, 0xff, 0xd0, 0xe9, 0x31, 0x81, 0x10, 0xd1, 0xeb, 0x31, 0x01, + 0xd2, 0xec, 0x31, 0x01, 0xd3, 0xed, 0x31, 0x01, 0xd4, 0xee, 0x31, 0x41, + 0xe1, 0xea, 0x31, 0x41, 0xd0, 0xdc, 0x31, 0x01, 0xd1, 0xdd, 0x31, 0x81, + 0x29, 0xd2, 0xdf, 0x31, 0x01, 0xd3, 0xe0, 0x31, 0x81, 0x18, 0xd4, 0xe3, + 0x31, 0x01, 0xd5, 0xe4, 0x31, 0x01, 0xd6, 0xe5, 0x31, 0x01, 0xd7, 0xe6, + 0x31, 0x01, 0xd8, 0xe7, 0x31, 0x01, 0xd9, 0xe8, 0x31, 0x41, 0xe1, 0xe1, + 0x31, 0x01, 0xe2, 0xe2, 0x31, 0x41, 0xe1, 0xde, 0x31, 0x41, 0xd0, 0xcf, + 0x31, 0x01, 0xd1, 0xd0, 0x31, 0x01, 0xd2, 0xd1, 0x31, 0x81, 0x26, 0xd3, + 0xd3, 0x31, 0x01, 0xd4, 0xd4, 0x31, 0x81, 0x19, 0xd5, 0xd6, 0x31, 0x01, + 0xd6, 0xd7, 0x31, 0x01, 0xd7, 0xd8, 0x31, 0x01, 0xd8, 0xd9, 0x31, 0x81, + 0x04, 0xd9, 0xdb, 0x31, 0x41, 0xe1, 0xda, 0x31, 0x41, 0xe1, 0xd5, 0x31, + 0x41, 0xe1, 0xd2, 0x31, 0x41, 0xd0, 0xb9, 0x31, 0x81, 0x54, 0xd1, 0xbb, + 0x31, 0x01, 0xd2, 0xbc, 0x31, 0x81, 0x2b, 0xd3, 0xc5, 0x31, 0x01, 0xd4, + 0xc6, 0x31, 0x01, 0xd5, 0xc7, 0x31, 0x81, 0x1a, 0xd6, 0xc9, 0x31, 0x81, + 0x11, 0xd7, 0xcb, 0x31, 0x81, 0x08, 0xd8, 0xcd, 0x31, 0x01, 0xd9, 0xce, + 0x31, 0x41, 0xe1, 0xcc, 0x31, 0x41, 0xe1, 0xca, 0x31, 0x41, 0xe1, 0xc8, + 0x31, 0x41, 0xe1, 0xbd, 0x31, 0x01, 0xe2, 0xbe, 0x31, 0x01, 0xe3, 0xbf, + 0x31, 0x01, 0xe4, 0xc0, 0x31, 0x01, 0xe5, 0xc1, 0x31, 0x01, 0xe6, 0xc2, + 0x31, 0x01, 0xe7, 0xc3, 0x31, 0x01, 0xe8, 0xc4, 0x31, 0x41, 0xe1, 0xba, + 0x31, 0x41, 0xd1, 0xad, 0x31, 0x81, 0x25, 0xd2, 0xb0, 0x31, 0x01, 0xd3, + 0xb1, 0x31, 0x81, 0x18, 0xd4, 0xb3, 0x31, 0x01, 0xd5, 0xb4, 0x31, 0x01, + 0xd6, 0xb5, 0x31, 0x01, 0xd7, 0xb6, 0x31, 0x01, 0xd8, 0xb7, 0x31, 0x01, + 0xd9, 0xb8, 0x31, 0x41, 0xe1, 0xb2, 0x31, 0x41, 0xe1, 0xae, 0x31, 0x01, + 0xe2, 0xaf, 0x31, 0x41, 0x02, 0x8a, 0xd8, 0x06, 0x48, 0x4d, 0x80, 0x43, + 0x34, 0x41, 0xd1, 0xa3, 0x31, 0x01, 0xd2, 0xa4, 0x31, 0x81, 0x1d, 0xd3, + 0xa6, 0x31, 0x01, 0xd4, 0xa7, 0x31, 0x01, 0xd5, 0xa8, 0x31, 0x01, 0xd6, + 0xa9, 0x31, 0x81, 0x08, 0xd7, 0xab, 0x31, 0x01, 0xd8, 0xac, 0x31, 0x41, + 0xe1, 0xaa, 0x31, 0x41, 0xe1, 0xa5, 0x31, 0x41, 0xd1, 0x9b, 0x31, 0x01, + 0xd2, 0x9c, 0x31, 0x01, 0xd3, 0x9d, 0x31, 0x01, 0xd4, 0x9e, 0x31, 0x01, + 0xd5, 0x9f, 0x31, 0x01, 0xd6, 0xa0, 0x31, 0x01, 0xd7, 0xa1, 0x31, 0x01, + 0xd8, 0xa2, 0x31, 0x41, 0x90, 0x37, 0x09, 0x99, 0xbc, 0x01, 0xff, 0x46, + 0xb5, 0x0a, 0x3b, 0x34, 0x81, 0x1c, 0x46, 0x7d, 0x02, 0x39, 0x34, 0x01, + 0x43, 0x1e, 0x00, 0x3a, 0x34, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x43, 0x40, + 0x05, 0x34, 0x34, 0x01, 0x45, 0x0f, 0xeb, 0x32, 0x34, 0x41, 0x80, 0x01, + 0xff, 0x43, 0x40, 0x05, 0x35, 0x34, 0x01, 0x45, 0x0f, 0xeb, 0x33, 0x34, + 0x41, 0x90, 0x25, 0x91, 0x01, 0xff, 0xd0, 0x93, 0x31, 0x81, 0x19, 0xd1, + 0x95, 0x31, 0x81, 0x10, 0xd2, 0x97, 0x31, 0x01, 0xd3, 0x98, 0x31, 0x01, + 0xd4, 0x99, 0x31, 0x01, 0xd5, 0x9a, 0x31, 0x41, 0xe1, 0x96, 0x31, 0x41, + 0xe1, 0x94, 0x31, 0x41, 0xd1, 0x88, 0x31, 0x01, 0xd2, 0x89, 0x31, 0x01, + 0xd3, 0x8a, 0x31, 0x01, 0xd4, 0x8b, 0x31, 0x01, 0xd5, 0x8c, 0x31, 0x81, + 0x15, 0xd6, 0x8e, 0x31, 0x01, 0xd7, 0x8f, 0x31, 0x01, 0xd8, 0x90, 0x31, + 0x01, 0xd9, 0x91, 0x31, 0xc1, 0x00, 0xe1, 0x92, 0x31, 0x41, 0xe1, 0x8d, + 0x31, 0x41, 0x02, 0x8a, 0xd8, 0x16, 0x04, 0x23, 0x00, 0x06, 0x50, 0xa6, + 0x65, 0x31, 0x34, 0x41, 0x45, 0x45, 0xc0, 0x42, 0x34, 0x01, 0x49, 0x4c, + 0x80, 0x44, 0x34, 0x41, 0xd1, 0x7f, 0x31, 0x01, 0xd2, 0x80, 0x31, 0x01, + 0xd3, 0x81, 0x31, 0x01, 0xd4, 0x82, 0x31, 0x01, 0xd5, 0x83, 0x31, 0x01, + 0xd6, 0x84, 0x31, 0x81, 0x08, 0xd7, 0x86, 0x31, 0x01, 0xd8, 0x87, 0x31, + 0x41, 0xe1, 0x85, 0x31, 0x41, 0x90, 0xe3, 0x01, 0x91, 0xb3, 0x01, 0x92, + 0x7f, 0x93, 0x4b, 0x94, 0x17, 0x95, 0x01, 0xff, 0xd0, 0x7a, 0x31, 0x01, + 0xd1, 0x7b, 0x31, 0x01, 0xd2, 0x7c, 0x31, 0x01, 0xd3, 0x7d, 0x31, 0x01, + 0xd4, 0x7e, 0x31, 0x41, 0xd0, 0x6e, 0x31, 0x01, 0xd1, 0x6f, 0x31, 0x01, + 0xd2, 0x70, 0x31, 0x01, 0xd3, 0x71, 0x31, 0x81, 0x1d, 0xd4, 0x73, 0x31, + 0x01, 0xd5, 0x74, 0x31, 0x81, 0x10, 0xd6, 0x76, 0x31, 0x01, 0xd7, 0x77, + 0x31, 0x01, 0xd8, 0x78, 0x31, 0x01, 0xd9, 0x79, 0x31, 0x41, 0xe1, 0x75, + 0x31, 0x41, 0xe1, 0x72, 0x31, 0x41, 0xd0, 0x62, 0x31, 0x01, 0xd1, 0x63, + 0x31, 0x01, 0xd2, 0x64, 0x31, 0x01, 0xd3, 0x65, 0x31, 0x01, 0xd4, 0x66, + 0x31, 0x01, 0xd5, 0x67, 0x31, 0x01, 0xd6, 0x68, 0x31, 0x81, 0x11, 0xd7, + 0x6a, 0x31, 0x81, 0x08, 0xd8, 0x6c, 0x31, 0x01, 0xd9, 0x6d, 0x31, 0x41, + 0xe1, 0x6b, 0x31, 0x41, 0xe1, 0x69, 0x31, 0x41, 0xd0, 0x56, 0x31, 0x81, + 0x29, 0xd1, 0x58, 0x31, 0x01, 0xd2, 0x59, 0x31, 0x01, 0xd3, 0x5a, 0x31, + 0x01, 0xd4, 0x5b, 0x31, 0x01, 0xd5, 0x5c, 0x31, 0x01, 0xd6, 0x5d, 0x31, + 0x81, 0x0c, 0xd7, 0x5f, 0x31, 0x01, 0xd8, 0x60, 0x31, 0x01, 0xd9, 0x61, + 0x31, 0x41, 0xe1, 0x5e, 0x31, 0x41, 0xe1, 0x57, 0x31, 0x41, 0xd0, 0x4b, + 0x31, 0x01, 0xd1, 0x4c, 0x31, 0x81, 0x20, 0xd2, 0x4e, 0x31, 0x01, 0xd3, + 0x4f, 0x31, 0x01, 0xd4, 0x50, 0x31, 0x01, 0xd5, 0x51, 0x31, 0x01, 0xd6, + 0x52, 0x31, 0x01, 0xd7, 0x53, 0x31, 0x01, 0xd8, 0x54, 0x31, 0x01, 0xd9, + 0x55, 0x31, 0x41, 0xe1, 0x4d, 0x31, 0x41, 0xd1, 0x3f, 0x31, 0x01, 0xd2, + 0x40, 0x31, 0x01, 0xd3, 0x41, 0x31, 0x01, 0xd4, 0x42, 0x31, 0x01, 0xd5, + 0x43, 0x31, 0x01, 0xd6, 0x44, 0x31, 0x81, 0x15, 0xd7, 0x46, 0x31, 0x81, + 0x08, 0xd8, 0x49, 0x31, 0x01, 0xd9, 0x4a, 0x31, 0x41, 0xe1, 0x47, 0x31, + 0x01, 0xe2, 0x48, 0x31, 0x41, 0xe1, 0x45, 0x31, 0x41, 0x90, 0x06, 0x49, + 0x41, 0xc0, 0x41, 0x34, 0x41, 0x90, 0xf2, 0x01, 0x91, 0xc2, 0x01, 0x92, + 0x92, 0x01, 0x93, 0x59, 0x94, 0x20, 0x95, 0x01, 0xff, 0xd0, 0x38, 0x31, + 0x01, 0xd1, 0x39, 0x31, 0x81, 0x08, 0xd2, 0x3d, 0x31, 0x01, 0xd3, 0x3e, + 0x31, 0x41, 0xe1, 0x3a, 0x31, 0x01, 0xe2, 0x3b, 0x31, 0x01, 0xe3, 0x3c, + 0x31, 0x41, 0xd0, 0x2b, 0x31, 0x01, 0xd1, 0x2c, 0x31, 0x01, 0xd2, 0x2d, + 0x31, 0x01, 0xd3, 0x2e, 0x31, 0x01, 0xd4, 0x2f, 0x31, 0x01, 0xd5, 0x30, + 0x31, 0x81, 0x1a, 0xd6, 0x32, 0x31, 0x81, 0x11, 0xd7, 0x34, 0x31, 0x81, + 0x08, 0xd8, 0x36, 0x31, 0x01, 0xd9, 0x37, 0x31, 0x41, 0xe1, 0x35, 0x31, + 0x41, 0xe1, 0x33, 0x31, 0x41, 0xe1, 0x31, 0x31, 0x41, 0xd0, 0x1e, 0x31, + 0x01, 0xd1, 0x1f, 0x31, 0x81, 0x2a, 0xd2, 0x21, 0x31, 0x01, 0xd3, 0x22, + 0x31, 0x01, 0xd4, 0x23, 0x31, 0x01, 0xd5, 0x24, 0x31, 0x01, 0xd6, 0x25, + 0x31, 0x01, 0xd7, 0x26, 0x31, 0x81, 0x0d, 0xd8, 0x28, 0x31, 0x81, 0x04, + 0xd9, 0x2a, 0x31, 0x41, 0xe1, 0x29, 0x31, 0x41, 0xe1, 0x27, 0x31, 0x41, + 0xe1, 0x20, 0x31, 0x41, 0xd0, 0x13, 0x31, 0x01, 0xd1, 0x14, 0x31, 0x81, + 0x20, 0xd2, 0x16, 0x31, 0x01, 0xd3, 0x17, 0x31, 0x01, 0xd4, 0x18, 0x31, + 0x01, 0xd5, 0x19, 0x31, 0x01, 0xd6, 0x1a, 0x31, 0x01, 0xd7, 0x1b, 0x31, + 0x01, 0xd8, 0x1c, 0x31, 0x01, 0xd9, 0x1d, 0x31, 0x41, 0xe1, 0x15, 0x31, + 0x41, 0xd0, 0x08, 0x31, 0x01, 0xd1, 0x09, 0x31, 0x01, 0xd2, 0x0a, 0x31, + 0x01, 0xd3, 0x0b, 0x31, 0x81, 0x18, 0xd4, 0x0d, 0x31, 0x01, 0xd5, 0x0e, + 0x31, 0x01, 0xd6, 0x0f, 0x31, 0x01, 0xd7, 0x10, 0x31, 0x01, 0xd8, 0x11, + 0x31, 0x01, 0xd9, 0x12, 0x31, 0x41, 0xe1, 0x0c, 0x31, 0x41, 0xd1, 0xfe, + 0x30, 0x81, 0x20, 0xd2, 0x00, 0x31, 0x01, 0xd3, 0x01, 0x31, 0x01, 0xd4, + 0x02, 0x31, 0x01, 0xd5, 0x03, 0x31, 0x01, 0xd6, 0x04, 0x31, 0x01, 0xd7, + 0x05, 0x31, 0x01, 0xd8, 0x06, 0x31, 0x01, 0xd9, 0x07, 0x31, 0x41, 0xe1, + 0xff, 0x30, 0x41, 0x90, 0x17, 0x03, 0x1b, 0x00, 0x01, 0xff, 0x49, 0x9d, + 0x68, 0x3d, 0x34, 0x01, 0x47, 0x06, 0x30, 0x38, 0x34, 0x01, 0x50, 0x96, + 0x68, 0x3f, 0x34, 0x41, 0x90, 0x90, 0x01, 0x91, 0x5c, 0x92, 0x28, 0x93, + 0x01, 0xff, 0xd0, 0xf5, 0x30, 0x01, 0xd1, 0xf6, 0x30, 0x01, 0xd2, 0xf7, + 0x30, 0x01, 0xd3, 0xf8, 0x30, 0x01, 0xd4, 0xf9, 0x30, 0x81, 0x0c, 0xd6, + 0xfb, 0x30, 0x01, 0xd7, 0xfc, 0x30, 0x01, 0xd8, 0xfd, 0x30, 0x41, 0xe1, + 0xfa, 0x30, 0x41, 0xd0, 0xe9, 0x30, 0x81, 0x29, 0xd1, 0xeb, 0x30, 0x01, + 0xd2, 0xec, 0x30, 0x01, 0xd3, 0xed, 0x30, 0x01, 0xd4, 0xee, 0x30, 0x01, + 0xd5, 0xef, 0x30, 0x01, 0xd6, 0xf0, 0x30, 0x01, 0xd7, 0xf1, 0x30, 0x01, + 0xd8, 0xf2, 0x30, 0x81, 0x04, 0xd9, 0xf4, 0x30, 0x41, 0xe1, 0xf3, 0x30, + 0x41, 0xe1, 0xea, 0x30, 0x41, 0xd0, 0xdd, 0x30, 0x01, 0xd1, 0xde, 0x30, + 0x01, 0xd2, 0xdf, 0x30, 0x01, 0xd3, 0xe0, 0x30, 0x01, 0xd4, 0xe1, 0x30, + 0x01, 0xd5, 0xe2, 0x30, 0x01, 0xd6, 0xe3, 0x30, 0x81, 0x11, 0xd7, 0xe5, + 0x30, 0x81, 0x08, 0xd8, 0xe7, 0x30, 0x01, 0xd9, 0xe8, 0x30, 0x41, 0xe1, + 0xe6, 0x30, 0x41, 0xe1, 0xe4, 0x30, 0x41, 0xd1, 0xd2, 0x30, 0x01, 0xd2, + 0xd3, 0x30, 0x01, 0xd3, 0xd4, 0x30, 0x01, 0xd4, 0xd5, 0x30, 0x01, 0xd5, + 0xd6, 0x30, 0x01, 0xd6, 0xd7, 0x30, 0x01, 0xd7, 0xd8, 0x30, 0x01, 0xd8, + 0xd9, 0x30, 0x81, 0x09, 0xd9, 0xdb, 0x30, 0xc1, 0x00, 0xe1, 0xdc, 0x30, + 0x41, 0xe1, 0xda, 0x30, 0x41, 0x90, 0xe2, 0x02, 0x91, 0xb7, 0x02, 0x92, + 0x87, 0x02, 0x93, 0xd2, 0x01, 0x94, 0x9d, 0x01, 0x95, 0x44, 0x96, 0x01, + 0xff, 0xd0, 0xc2, 0x30, 0x01, 0xd1, 0xc3, 0x30, 0x01, 0xd2, 0xc4, 0x30, + 0x01, 0xd3, 0xc5, 0x30, 0x01, 0xd4, 0xc6, 0x30, 0x01, 0xd5, 0xc7, 0x30, + 0x01, 0xd6, 0xc8, 0x30, 0x01, 0xd7, 0xc9, 0x30, 0xc1, 0x00, 0xe1, 0xca, + 0x30, 0x01, 0xe2, 0xcb, 0x30, 0x01, 0xe3, 0xcc, 0x30, 0x01, 0xe4, 0xcd, + 0x30, 0x01, 0xe5, 0xce, 0x30, 0x01, 0xe6, 0xcf, 0x30, 0x01, 0xe7, 0xd0, + 0x30, 0x01, 0xe8, 0xd1, 0x30, 0x41, 0xd0, 0xad, 0x30, 0x81, 0x2e, 0xd1, + 0xb7, 0x30, 0x01, 0xd2, 0xb8, 0x30, 0x81, 0x21, 0xd3, 0xba, 0x30, 0x01, + 0xd4, 0xbb, 0x30, 0x81, 0x14, 0xd5, 0xbd, 0x30, 0x01, 0xd6, 0xbe, 0x30, + 0x01, 0xd7, 0xbf, 0x30, 0x01, 0xd8, 0xc0, 0x30, 0x01, 0xd9, 0xc1, 0x30, + 0x41, 0xe1, 0xbc, 0x30, 0x41, 0xe1, 0xb9, 0x30, 0x41, 0xe1, 0xae, 0x30, + 0x01, 0xe2, 0xaf, 0x30, 0x01, 0xe3, 0xb0, 0x30, 0x01, 0xe4, 0xb1, 0x30, + 0x01, 0xe5, 0xb2, 0x30, 0x01, 0xe6, 0xb3, 0x30, 0x01, 0xe7, 0xb4, 0x30, + 0x01, 0xe8, 0xb5, 0x30, 0x01, 0xe9, 0xb6, 0x30, 0x41, 0xd0, 0xa1, 0x30, + 0x01, 0xd1, 0xa2, 0x30, 0x01, 0xd2, 0xa3, 0x30, 0x01, 0xd3, 0xa4, 0x30, + 0x01, 0xd4, 0xa5, 0x30, 0x01, 0xd5, 0xa6, 0x30, 0x01, 0xd6, 0xa7, 0x30, + 0x81, 0x11, 0xd7, 0xa9, 0x30, 0x01, 0xd8, 0xaa, 0x30, 0x81, 0x04, 0xd9, + 0xac, 0x30, 0x41, 0xe1, 0xab, 0x30, 0x41, 0xe1, 0xa8, 0x30, 0x41, 0xd0, + 0x95, 0x30, 0x01, 0xd1, 0x96, 0x30, 0x81, 0x25, 0xd2, 0x98, 0x30, 0x01, + 0xd3, 0x99, 0x30, 0x01, 0xd4, 0x9a, 0x30, 0x81, 0x14, 0xd5, 0x9c, 0x30, + 0x01, 0xd6, 0x9d, 0x30, 0x01, 0xd7, 0x9e, 0x30, 0x01, 0xd8, 0x9f, 0x30, + 0x01, 0xd9, 0xa0, 0x30, 0x41, 0xe1, 0x9b, 0x30, 0x41, 0xe1, 0x97, 0x30, + 0x41, 0xd0, 0x8a, 0x30, 0x01, 0xd1, 0x8b, 0x30, 0x01, 0xd2, 0x8c, 0x30, + 0x01, 0xd3, 0x8d, 0x30, 0x01, 0xd4, 0x8e, 0x30, 0x01, 0xd5, 0x8f, 0x30, + 0x01, 0xd6, 0x90, 0x30, 0x01, 0xd7, 0x91, 0x30, 0x81, 0x08, 0xd8, 0x93, + 0x30, 0x01, 0xd9, 0x94, 0x30, 0x41, 0xe1, 0x92, 0x30, 0x41, 0xd0, 0x80, + 0x30, 0x01, 0xd1, 0x81, 0x30, 0x01, 0xd2, 0x82, 0x30, 0x01, 0xd3, 0x83, + 0x30, 0x01, 0xd4, 0x84, 0x30, 0x01, 0xd5, 0x85, 0x30, 0x01, 0xd6, 0x86, + 0x30, 0x01, 0xd7, 0x87, 0x30, 0x01, 0xd8, 0x88, 0x30, 0x01, 0xd9, 0x89, + 0x30, 0x41, 0xd1, 0x76, 0x30, 0x01, 0xd2, 0x77, 0x30, 0x01, 0xd3, 0x78, + 0x30, 0x01, 0xd4, 0x79, 0x30, 0x01, 0xd5, 0x7a, 0x30, 0x01, 0xd6, 0x7b, + 0x30, 0x01, 0xd7, 0x7c, 0x30, 0x01, 0xd8, 0x7d, 0x30, 0x81, 0x04, 0xd9, + 0x7f, 0x30, 0x41, 0xe1, 0x7e, 0x30, 0x41, 0x90, 0x46, 0x91, 0x17, 0x92, + 0x01, 0xff, 0xd0, 0x71, 0x30, 0x01, 0xd1, 0x72, 0x30, 0x01, 0xd2, 0x73, + 0x30, 0x01, 0xd3, 0x74, 0x30, 0x01, 0xd4, 0x75, 0x30, 0x41, 0xd0, 0x66, + 0x30, 0x81, 0x24, 0xd1, 0x68, 0x30, 0x01, 0xd2, 0x69, 0x30, 0x01, 0xd3, + 0x6a, 0x30, 0x01, 0xd4, 0x6b, 0x30, 0x01, 0xd5, 0x6c, 0x30, 0x01, 0xd6, + 0x6d, 0x30, 0x01, 0xd7, 0x6e, 0x30, 0x01, 0xd8, 0x6f, 0x30, 0x01, 0xd9, + 0x70, 0x30, 0x41, 0xe1, 0x67, 0x30, 0x41, 0xd1, 0x5a, 0x30, 0x01, 0xd2, + 0x5b, 0x30, 0x81, 0x1c, 0xd3, 0x5f, 0x30, 0x01, 0xd4, 0x60, 0x30, 0x01, + 0xd5, 0x61, 0x30, 0x01, 0xd6, 0x62, 0x30, 0x01, 0xd7, 0x63, 0x30, 0x01, + 0xd8, 0x64, 0x30, 0x01, 0xd9, 0x65, 0x30, 0x41, 0xe1, 0x5c, 0x30, 0x01, + 0xe2, 0x5d, 0x30, 0x01, 0xe3, 0x5e, 0x30, 0x41, 0x02, 0x8a, 0xd8, 0x17, + 0x05, 0x9e, 0x3f, 0x01, 0xff, 0x49, 0x9d, 0x68, 0x3c, 0x34, 0x01, 0x47, + 0x06, 0x30, 0x37, 0x34, 0x01, 0x50, 0x96, 0x68, 0x3e, 0x34, 0x41, 0xd1, + 0x50, 0x30, 0x01, 0xd2, 0x51, 0x30, 0x01, 0xd3, 0x52, 0x30, 0x01, 0xd4, + 0x53, 0x30, 0x01, 0xd5, 0x54, 0x30, 0x81, 0x10, 0xd6, 0x56, 0x30, 0x01, + 0xd7, 0x57, 0x30, 0x01, 0xd8, 0x58, 0x30, 0x01, 0xd9, 0x59, 0x30, 0x41, + 0xe1, 0x55, 0x30, 0x41, 0x90, 0x97, 0x01, 0x02, 0xf0, 0xec, 0x01, 0xff, + 0x90, 0x63, 0x91, 0x39, 0x92, 0x0f, 0x93, 0x01, 0xff, 0xd0, 0x2c, 0x34, + 0x01, 0xd1, 0x2d, 0x34, 0x01, 0xd2, 0x2e, 0x34, 0x41, 0xd0, 0x22, 0x34, + 0x01, 0xd1, 0x23, 0x34, 0x01, 0xd2, 0x24, 0x34, 0x01, 0xd3, 0x25, 0x34, + 0x01, 0xd4, 0x26, 0x34, 0x01, 0xd5, 0x27, 0x34, 0x01, 0xd6, 0x28, 0x34, + 0x01, 0xd7, 0x29, 0x34, 0x01, 0xd8, 0x2a, 0x34, 0x01, 0xd9, 0x2b, 0x34, + 0x41, 0xd0, 0x18, 0x34, 0x01, 0xd1, 0x19, 0x34, 0x01, 0xd2, 0x1a, 0x34, + 0x01, 0xd3, 0x1b, 0x34, 0x01, 0xd4, 0x1c, 0x34, 0x01, 0xd5, 0x1d, 0x34, + 0x01, 0xd6, 0x1e, 0x34, 0x01, 0xd7, 0x1f, 0x34, 0x01, 0xd8, 0x20, 0x34, + 0x01, 0xd9, 0x21, 0x34, 0x41, 0xd1, 0x0d, 0x34, 0x01, 0xd2, 0x0e, 0x34, + 0x01, 0xd3, 0x0f, 0x34, 0x01, 0xd4, 0x10, 0x34, 0x01, 0xd5, 0x11, 0x34, + 0x01, 0xd6, 0x12, 0x34, 0x01, 0xd7, 0x13, 0x34, 0x81, 0x08, 0xd8, 0x16, + 0x34, 0x01, 0xd9, 0x17, 0x34, 0x41, 0xe1, 0x14, 0x34, 0x01, 0xe2, 0x15, + 0x34, 0x41, 0x90, 0xa8, 0x02, 0x91, 0xf3, 0x01, 0x92, 0xc8, 0x01, 0x93, + 0x98, 0x01, 0x94, 0x5a, 0x95, 0x30, 0x96, 0x06, 0x42, 0x17, 0xf4, 0x4f, + 0x30, 0x41, 0xd0, 0x45, 0x30, 0x01, 0xd1, 0x46, 0x30, 0x01, 0xd2, 0x47, + 0x30, 0x01, 0xd3, 0x48, 0x30, 0x01, 0xd4, 0x49, 0x30, 0x01, 0xd5, 0x4a, + 0x30, 0x01, 0xd6, 0x4b, 0x30, 0x01, 0xd7, 0x4c, 0x30, 0x01, 0xd8, 0x4d, + 0x30, 0x01, 0xd9, 0x4e, 0x30, 0x41, 0xd0, 0x3b, 0x30, 0x01, 0xd1, 0x3c, + 0x30, 0x01, 0xd2, 0x3d, 0x30, 0x01, 0xd3, 0x3e, 0x30, 0x01, 0xd4, 0x3f, + 0x30, 0x01, 0xd5, 0x40, 0x30, 0x01, 0xd6, 0x41, 0x30, 0x01, 0xd7, 0x42, + 0x30, 0x01, 0xd8, 0x43, 0x30, 0x01, 0xd9, 0x44, 0x30, 0x41, 0xd0, 0x2d, + 0x30, 0x81, 0x33, 0xd1, 0x2f, 0x30, 0x01, 0xd2, 0x30, 0x30, 0x81, 0x26, + 0xd3, 0x32, 0x30, 0x81, 0x1d, 0xd4, 0x34, 0x30, 0x01, 0xd5, 0x35, 0x30, + 0x81, 0x10, 0xd6, 0x37, 0x30, 0x01, 0xd7, 0x38, 0x30, 0x01, 0xd8, 0x39, + 0x30, 0x01, 0xd9, 0x3a, 0x30, 0x41, 0xe1, 0x36, 0x30, 0x41, 0xe1, 0x33, + 0x30, 0x41, 0xe1, 0x31, 0x30, 0x41, 0xe1, 0x2e, 0x30, 0x41, 0xd0, 0x22, + 0x30, 0x01, 0xd1, 0x23, 0x30, 0x01, 0xd2, 0x24, 0x30, 0x81, 0x1c, 0xd3, + 0x26, 0x30, 0x01, 0xd4, 0x27, 0x30, 0x01, 0xd5, 0x28, 0x30, 0x01, 0xd6, + 0x29, 0x30, 0x01, 0xd7, 0x2a, 0x30, 0x01, 0xd8, 0x2b, 0x30, 0x01, 0xd9, + 0x2c, 0x30, 0x41, 0xe1, 0x25, 0x30, 0x41, 0xd0, 0x18, 0x30, 0x01, 0xd1, + 0x19, 0x30, 0x01, 0xd2, 0x1a, 0x30, 0x01, 0xd3, 0x1b, 0x30, 0x01, 0xd4, + 0x1c, 0x30, 0x01, 0xd5, 0x1d, 0x30, 0x01, 0xd6, 0x1e, 0x30, 0x01, 0xd7, + 0x1f, 0x30, 0x01, 0xd8, 0x20, 0x30, 0x01, 0xd9, 0x21, 0x30, 0x41, 0xd0, + 0x0c, 0x30, 0x01, 0xd1, 0x0d, 0x30, 0x01, 0xd2, 0x0e, 0x30, 0x01, 0xd3, + 0x0f, 0x30, 0x01, 0xd4, 0x10, 0x30, 0x81, 0x19, 0xd5, 0x12, 0x30, 0x01, + 0xd6, 0x13, 0x30, 0x01, 0xd7, 0x14, 0x30, 0x81, 0x08, 0xd8, 0x16, 0x30, + 0x01, 0xd9, 0x17, 0x30, 0x41, 0xe1, 0x15, 0x30, 0x41, 0xe1, 0x11, 0x30, + 0x41, 0xd1, 0x00, 0x30, 0x01, 0xd2, 0x01, 0x30, 0x01, 0xd3, 0x02, 0x30, + 0x01, 0xd4, 0x03, 0x30, 0x01, 0xd5, 0x04, 0x30, 0x81, 0x19, 0xd6, 0x06, + 0x30, 0x81, 0x0c, 0xd7, 0x09, 0x30, 0x01, 0xd8, 0x0a, 0x30, 0x01, 0xd9, + 0x0b, 0x30, 0x41, 0xe1, 0x07, 0x30, 0x01, 0xe2, 0x08, 0x30, 0x41, 0xe1, + 0x05, 0x30, 0x41, 0x43, 0x06, 0x02, 0x85, 0xf9, 0x01, 0xf2, 0x42, 0xf4, + 0x81, 0x06, 0x4f, 0x47, 0x73, 0x71, 0x26, 0x40, 0x80, 0x2a, 0x42, 0x53, + 0x00, 0x41, 0x26, 0xc0, 0x00, 0x02, 0x86, 0x00, 0x01, 0xff, 0x05, 0xe8, + 0x3f, 0x06, 0x45, 0x9d, 0x16, 0xda, 0x23, 0x40, 0xa1, 0x06, 0x4d, 0xb8, + 0x82, 0x0d, 0xf3, 0x41, 0x47, 0x3f, 0xd3, 0x0e, 0xf3, 0x01, 0x4d, 0x9c, + 0x88, 0x0f, 0xf3, 0x41, 0x03, 0xf4, 0x01, 0x06, 0x50, 0xc6, 0x68, 0xbb, + 0xf9, 0x41, 0x45, 0x6c, 0xe8, 0x3d, 0xf3, 0x01, 0x44, 0xd5, 0xb3, 0x3e, + 0xf3, 0x41, 0xa1, 0xc0, 0x31, 0xa5, 0xf6, 0x23, 0xa9, 0xfd, 0x19, 0x4f, + 0x77, 0x70, 0xec, 0xf9, 0x01, 0xaf, 0xb0, 0x07, 0xb2, 0xe3, 0x06, 0xb5, + 0x06, 0x42, 0x1c, 0xf5, 0xc0, 0xf4, 0x41, 0x42, 0x36, 0x01, 0x86, 0xf9, + 0x01, 0x46, 0x0c, 0xde, 0x5f, 0xf9, 0x01, 0x07, 0xc0, 0xd4, 0x01, 0xff, + 0x06, 0x86, 0xd9, 0xe3, 0x04, 0x4b, 0x31, 0x9b, 0x9e, 0xbc, 0x01, 0x07, + 0xec, 0x05, 0x12, 0x5d, 0x6d, 0x16, 0x9f, 0xbc, 0x01, 0x51, 0xe7, 0x5d, + 0x9c, 0xbc, 0x01, 0x55, 0x63, 0x3e, 0x9d, 0xbc, 0x41, 0xe1, 0x41, 0xbc, + 0x81, 0xbb, 0x04, 0xe2, 0x07, 0xbc, 0x01, 0xe4, 0x08, 0xbc, 0x81, 0xa7, + 0x04, 0xe5, 0x47, 0xbc, 0x81, 0x99, 0x04, 0xe6, 0x04, 0xbc, 0x81, 0x8d, + 0x04, 0xe7, 0x0a, 0xbc, 0x81, 0x81, 0x04, 0xe8, 0x00, 0xbc, 0x81, 0xf7, + 0x03, 0xe9, 0x46, 0xbc, 0x81, 0xed, 0x03, 0xea, 0x1b, 0xbc, 0x81, 0xb6, + 0x03, 0xeb, 0x05, 0xbc, 0x81, 0xa0, 0x03, 0xec, 0x06, 0xbc, 0x81, 0x89, + 0x03, 0xed, 0x19, 0xbc, 0x81, 0xeb, 0x02, 0xee, 0x1a, 0xbc, 0x81, 0xb9, + 0x02, 0xef, 0x44, 0xbc, 0x81, 0xa1, 0x02, 0xf0, 0x02, 0xbc, 0x81, 0x88, + 0x02, 0xf2, 0x0b, 0xbc, 0x81, 0xeb, 0x01, 0xf3, 0x1c, 0xbc, 0x81, 0x68, + 0xf4, 0x03, 0xbc, 0x81, 0x53, 0xf5, 0x51, 0xbc, 0x81, 0x40, 0xf6, 0x09, + 0xbc, 0x81, 0x35, 0xf7, 0x38, 0xbc, 0x81, 0x0f, 0xf8, 0x01, 0xbc, 0x81, + 0x06, 0x42, 0x4d, 0x00, 0x50, 0xbc, 0x41, 0xf7, 0x53, 0xbc, 0x41, 0x42, + 0xc7, 0x00, 0x3a, 0xbc, 0x01, 0xe1, 0x5c, 0xbc, 0x01, 0x42, 0x12, 0x0b, + 0x5f, 0xbc, 0x01, 0xe8, 0x39, 0xbc, 0x01, 0xe9, 0x5e, 0xbc, 0x01, 0xef, + 0x5d, 0xbc, 0xc1, 0x00, 0xf7, 0x60, 0xbc, 0x41, 0x48, 0xf8, 0xc8, 0x6a, + 0xbc, 0x41, 0x42, 0xb3, 0x01, 0x54, 0xbc, 0x01, 0xe8, 0x57, 0xbc, 0x01, + 0xe9, 0x4a, 0xbc, 0x41, 0x80, 0x04, 0xe8, 0x11, 0xbc, 0x41, 0x43, 0xab, + 0x0c, 0x37, 0xbc, 0x01, 0xf3, 0x36, 0xbc, 0x41, 0x80, 0x37, 0x46, 0x98, + 0xdc, 0x49, 0xbc, 0x01, 0x05, 0x30, 0xe8, 0x01, 0xff, 0x42, 0x1a, 0x00, + 0x68, 0xbc, 0x01, 0x42, 0xe7, 0x4b, 0x12, 0xbc, 0x01, 0xa5, 0x12, 0xea, + 0x15, 0xbc, 0x01, 0xaf, 0x04, 0xf5, 0x58, 0xbc, 0x41, 0xee, 0x69, 0xbc, + 0x01, 0xf7, 0x42, 0xbc, 0x41, 0xe5, 0x4e, 0xbc, 0x01, 0xe8, 0x4c, 0xbc, + 0x01, 0xee, 0x67, 0xbc, 0x41, 0xea, 0x20, 0xbc, 0x81, 0x3a, 0xeb, 0x3f, + 0xbc, 0x81, 0x2f, 0xed, 0x3c, 0xbc, 0x01, 0xee, 0x3b, 0xbc, 0x01, 0xf0, + 0x34, 0xbc, 0x81, 0x1c, 0xf3, 0x2a, 0xbc, 0x01, 0xf4, 0x32, 0xbc, 0x81, + 0x0d, 0x48, 0x76, 0x3b, 0x25, 0xbc, 0xc1, 0x00, 0x46, 0x1f, 0x07, 0x26, + 0xbc, 0x41, 0x42, 0xc7, 0x00, 0x33, 0xbc, 0x41, 0x42, 0xc7, 0x00, 0x35, + 0xbc, 0x41, 0x42, 0xc7, 0x00, 0x40, 0xbc, 0x41, 0x42, 0x99, 0x00, 0x2e, + 0xbc, 0x41, 0x42, 0x99, 0x00, 0x10, 0xbc, 0x01, 0xe8, 0x18, 0xbc, 0x01, + 0x08, 0x30, 0xc9, 0x01, 0xff, 0xe9, 0x4d, 0xbc, 0x01, 0xf5, 0x56, 0xbc, + 0x41, 0x42, 0xb3, 0x01, 0x0c, 0xbc, 0x01, 0x07, 0xe5, 0xd0, 0x01, 0xff, + 0xed, 0x66, 0xbc, 0x01, 0xee, 0x65, 0xbc, 0x41, 0xe1, 0x43, 0xbc, 0x01, + 0x42, 0xfd, 0x28, 0x59, 0xbc, 0x01, 0xf5, 0x5b, 0xbc, 0x01, 0xf7, 0x5a, + 0xbc, 0x41, 0x80, 0x15, 0x05, 0x34, 0x4c, 0x01, 0xff, 0xe1, 0x64, 0xbc, + 0x01, 0xe9, 0x63, 0xbc, 0x01, 0xef, 0x62, 0xbc, 0x01, 0xf5, 0x61, 0xbc, + 0x41, 0xed, 0x1e, 0xbc, 0x81, 0x0a, 0xf3, 0x28, 0xbc, 0x01, 0x48, 0x76, + 0x3b, 0x22, 0xbc, 0x41, 0x42, 0x99, 0x00, 0x2c, 0xbc, 0x41, 0x80, 0x01, + 0xff, 0xee, 0x1d, 0xbc, 0x81, 0x0a, 0xf3, 0x27, 0xbc, 0x01, 0x48, 0x76, + 0x3b, 0x21, 0xbc, 0x41, 0x42, 0x99, 0x00, 0x2b, 0xbc, 0x41, 0xe8, 0x17, + 0xbc, 0x01, 0x04, 0xd8, 0x02, 0x01, 0xff, 0xe9, 0x4f, 0xbc, 0x01, 0xf5, + 0x55, 0xbc, 0x41, 0x80, 0x04, 0xeb, 0x14, 0xbc, 0x41, 0xed, 0x0f, 0xbc, + 0x01, 0x43, 0xab, 0x0c, 0x3d, 0xbc, 0x41, 0x80, 0x01, 0xff, 0xed, 0x1f, + 0xbc, 0x81, 0x23, 0xee, 0x30, 0xbc, 0x81, 0x18, 0xf3, 0x29, 0xbc, 0x81, + 0x0d, 0x48, 0x76, 0x3b, 0x23, 0xbc, 0xc1, 0x00, 0x52, 0xf7, 0x54, 0x24, + 0xbc, 0x41, 0x49, 0x75, 0x3b, 0x2f, 0xbc, 0x41, 0x42, 0x99, 0x00, 0x31, + 0xbc, 0x41, 0x42, 0x99, 0x00, 0x2d, 0xbc, 0x41, 0xe5, 0x48, 0xbc, 0x41, + 0xec, 0x16, 0xbc, 0x41, 0x44, 0xc5, 0xec, 0x3e, 0xbc, 0x41, 0x42, 0xb3, + 0x01, 0x0e, 0xbc, 0x41, 0xe5, 0x4b, 0xbc, 0x01, 0xf5, 0x52, 0xbc, 0x41, + 0x42, 0x99, 0x00, 0x0d, 0xbc, 0x01, 0xe8, 0x13, 0xbc, 0x41, 0x42, 0x3c, + 0x01, 0x45, 0xbc, 0x41, 0x09, 0x69, 0xb6, 0xad, 0x01, 0x05, 0x48, 0x0b, + 0x6a, 0xac, 0x16, 0x04, 0x26, 0xb5, 0x06, 0x57, 0xc5, 0x30, 0x72, 0xbc, + 0x41, 0x51, 0xcb, 0x30, 0x71, 0xbc, 0x01, 0x4f, 0x82, 0x74, 0x74, 0xbc, + 0x41, 0x55, 0x9d, 0x3a, 0x70, 0xbc, 0x01, 0x03, 0xd1, 0x00, 0x01, 0xff, + 0xa1, 0x39, 0x46, 0x12, 0x03, 0x95, 0xbc, 0x01, 0x43, 0x23, 0x0a, 0x94, + 0xbc, 0x01, 0x45, 0x15, 0x23, 0x92, 0xbc, 0x01, 0xac, 0x19, 0x4b, 0x92, + 0xa3, 0x91, 0xbc, 0x01, 0x48, 0x32, 0x00, 0x98, 0xbc, 0x81, 0x06, 0x44, + 0x82, 0x57, 0x97, 0xbc, 0x41, 0x47, 0xd5, 0x30, 0x73, 0xbc, 0x41, 0x43, + 0xee, 0x07, 0x96, 0xbc, 0x01, 0x49, 0x32, 0xbd, 0x93, 0xbc, 0x41, 0x44, + 0xfa, 0x38, 0x90, 0xbc, 0x01, 0x44, 0xcf, 0x00, 0x99, 0xbc, 0x41, 0x45, + 0xf9, 0x38, 0x80, 0xbc, 0x01, 0x46, 0x12, 0x03, 0x85, 0xbc, 0x01, 0x43, + 0x23, 0x0a, 0x84, 0xbc, 0x01, 0x45, 0x15, 0x23, 0x82, 0xbc, 0x01, 0xac, + 0x19, 0x4b, 0x92, 0xa3, 0x81, 0xbc, 0x01, 0x48, 0x32, 0x00, 0x88, 0xbc, + 0x81, 0x06, 0x44, 0x82, 0x57, 0x87, 0xbc, 0x41, 0x47, 0xd5, 0x30, 0x75, + 0xbc, 0x41, 0x43, 0xee, 0x07, 0x86, 0xbc, 0x01, 0x49, 0x32, 0xbd, 0x83, + 0xbc, 0x41, 0x46, 0x98, 0x9f, 0x7a, 0xbc, 0x01, 0x46, 0xaa, 0xdc, 0x7b, + 0xbc, 0x01, 0x54, 0x4c, 0x44, 0x77, 0xbc, 0x01, 0x46, 0xd6, 0x30, 0x76, + 0xbc, 0x01, 0x02, 0x12, 0x00, 0x01, 0xff, 0x42, 0x62, 0x01, 0x79, 0xbc, + 0x01, 0x45, 0x0c, 0xe9, 0x78, 0xbc, 0xc1, 0x00, 0x45, 0xab, 0x0e, 0x7c, + 0xbc, 0x41, 0xa1, 0x2f, 0x43, 0xed, 0x00, 0x57, 0xf4, 0x01, 0x4d, 0xa6, + 0x84, 0xda, 0x26, 0x00, 0xaf, 0x06, 0x52, 0x17, 0x56, 0x41, 0xf9, 0x41, + 0x4c, 0xe3, 0x91, 0x2a, 0xf4, 0x01, 0x4a, 0xb1, 0xae, 0x24, 0xf9, 0x01, + 0xb0, 0x01, 0xff, 0x49, 0x68, 0xb4, 0x78, 0xfa, 0x01, 0x43, 0xec, 0x05, + 0xa7, 0xf4, 0x41, 0x49, 0xb0, 0xa1, 0xaf, 0x20, 0x00, 0x5c, 0xc2, 0x17, + 0x9b, 0x27, 0x00, 0x43, 0x06, 0x14, 0x09, 0xf4, 0xc1, 0x00, 0x45, 0x0b, + 0x08, 0x32, 0xf4, 0x41, 0x52, 0x57, 0x4f, 0xaf, 0xf6, 0x01, 0x46, 0x32, + 0xc5, 0xce, 0xf5, 0x81, 0x9e, 0x12, 0x42, 0x3b, 0x01, 0xa4, 0xf9, 0x01, + 0x07, 0x07, 0x77, 0xc5, 0x11, 0xe7, 0x15, 0xf4, 0x81, 0xd1, 0x0e, 0xac, + 0xc2, 0x0e, 0x0a, 0xe9, 0xad, 0xd5, 0x0a, 0xae, 0xc6, 0x0a, 0x42, 0x0c, + 0x00, 0xaa, 0xf6, 0x01, 0xb4, 0xe4, 0x09, 0xb5, 0x89, 0x05, 0x4b, 0xc6, + 0xa4, 0x4a, 0xf5, 0x01, 0x02, 0xa7, 0x01, 0x01, 0xff, 0x80, 0xdc, 0x04, + 0x8d, 0xf1, 0x03, 0x04, 0xa9, 0x01, 0x01, 0xff, 0x08, 0x00, 0xc2, 0xcd, + 0x03, 0x02, 0x31, 0x01, 0x01, 0xff, 0xa1, 0xcd, 0x02, 0x06, 0x0c, 0x03, + 0xb5, 0x02, 0x50, 0x86, 0x61, 0x3f, 0xf8, 0x01, 0xa4, 0xa0, 0x02, 0x51, + 0xfc, 0x59, 0x37, 0xf8, 0x01, 0xa8, 0xc1, 0x01, 0x4d, 0x64, 0x87, 0xca, + 0x21, 0x00, 0x4f, 0x0c, 0x72, 0xf1, 0x27, 0x00, 0x46, 0xa4, 0xdf, 0x6f, + 0xf6, 0x01, 0xb3, 0xa0, 0x01, 0xb4, 0x13, 0x4b, 0x49, 0x10, 0xe9, 0x21, + 0x80, 0x06, 0x4c, 0xe1, 0x33, 0xaf, 0x21, 0x40, 0x5a, 0xc6, 0x1e, 0x97, + 0xf8, 0x41, 0x02, 0x0d, 0x00, 0x11, 0x02, 0x15, 0x02, 0x01, 0xff, 0x4d, + 0x85, 0x7f, 0xa1, 0x21, 0x00, 0x66, 0x1b, 0x06, 0xef, 0x2b, 0x40, 0x05, + 0x04, 0x02, 0x06, 0x49, 0x12, 0x72, 0x0b, 0x29, 0x40, 0x4a, 0xe0, 0x01, + 0x93, 0xf8, 0x01, 0x08, 0x09, 0x02, 0x01, 0xff, 0x45, 0xce, 0x00, 0x63, + 0x2b, 0x80, 0x12, 0x4c, 0xc3, 0x8d, 0x6d, 0x2b, 0x00, 0x4d, 0x64, 0x87, + 0x87, 0x2b, 0x00, 0x4c, 0xe1, 0x33, 0x4d, 0x2b, 0x40, 0x80, 0x01, 0xff, + 0x6a, 0x6c, 0x03, 0x83, 0x2b, 0x00, 0x46, 0xd1, 0x14, 0x73, 0x2b, 0x00, + 0x05, 0x51, 0x00, 0x01, 0xff, 0x4a, 0x53, 0xa8, 0x2b, 0xf8, 0x01, 0x58, + 0x26, 0x28, 0x7d, 0x2b, 0x00, 0x4b, 0x6b, 0x68, 0x2f, 0xf8, 0x01, 0x09, + 0xaf, 0xbb, 0x12, 0x4c, 0xef, 0x91, 0x27, 0xf8, 0x01, 0x4c, 0x5b, 0x92, + 0x23, 0xf8, 0x01, 0x50, 0x66, 0x68, 0x33, 0xf8, 0x41, 0x49, 0xea, 0x01, + 0xa0, 0x2b, 0x00, 0x4a, 0xb3, 0x02, 0xa1, 0x2b, 0x40, 0x4f, 0xe7, 0x66, + 0x53, 0xf8, 0x01, 0x4c, 0xe7, 0x93, 0x3b, 0xf8, 0x41, 0x11, 0x91, 0x05, + 0x11, 0x05, 0x6e, 0x15, 0x01, 0xff, 0x45, 0xce, 0x00, 0x47, 0xf8, 0x01, + 0x50, 0x86, 0x61, 0x43, 0xf8, 0x41, 0x04, 0xc3, 0x00, 0x19, 0x05, 0xc8, + 0x00, 0x01, 0xff, 0x80, 0x06, 0x45, 0xa9, 0x01, 0xc2, 0x21, 0x40, 0x48, + 0x57, 0xb4, 0x5d, 0x29, 0x00, 0x46, 0xd1, 0x14, 0x55, 0x29, 0x40, 0x80, + 0x06, 0x45, 0xa9, 0x01, 0xc3, 0x21, 0x40, 0x07, 0x92, 0x0a, 0x0c, 0x48, + 0x57, 0xb4, 0x61, 0x29, 0x00, 0x46, 0xd1, 0x14, 0x59, 0x29, 0x40, 0x61, + 0xc9, 0x0d, 0x65, 0x29, 0x00, 0x5f, 0x08, 0x12, 0x6f, 0x29, 0x40, 0x4b, + 0xc4, 0x8d, 0xe3, 0x21, 0x00, 0x4b, 0x30, 0x8e, 0xd3, 0x21, 0x40, 0x45, + 0xce, 0x00, 0x07, 0x2b, 0x80, 0x06, 0x53, 0xd3, 0x48, 0x8b, 0x2b, 0x40, + 0x47, 0xd0, 0x14, 0xb3, 0xf8, 0x41, 0x45, 0xf8, 0xe8, 0x14, 0x2e, 0x00, + 0x44, 0xcf, 0x00, 0x93, 0x21, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x5a, 0x2e, + 0x1f, 0xb7, 0xfb, 0x01, 0x48, 0x57, 0xb4, 0xa7, 0x21, 0x00, 0x5a, 0xb4, + 0x20, 0xf5, 0x21, 0x00, 0x46, 0xd1, 0x14, 0x13, 0x29, 0x00, 0x05, 0x51, + 0x00, 0x01, 0xff, 0x50, 0xb6, 0x61, 0xb5, 0x21, 0x00, 0x4d, 0x36, 0x82, + 0xdf, 0x21, 0x00, 0x55, 0xd5, 0x01, 0x17, 0xf8, 0x01, 0x51, 0x47, 0x05, + 0x08, 0x29, 0x00, 0x58, 0x76, 0x29, 0x0b, 0xf8, 0x01, 0x59, 0xe3, 0x24, + 0x07, 0xf8, 0x01, 0x4c, 0xd3, 0x92, 0x9b, 0xf8, 0x01, 0x06, 0x5d, 0x07, + 0x11, 0x04, 0x49, 0x0c, 0x01, 0xff, 0x49, 0xea, 0x01, 0xb2, 0x21, 0x00, + 0x4a, 0xb3, 0x02, 0xb3, 0x21, 0x40, 0x55, 0xd5, 0x01, 0x13, 0xf8, 0x01, + 0x52, 0x2e, 0x06, 0x03, 0xf8, 0x41, 0x44, 0xac, 0x0e, 0x08, 0xf9, 0x81, + 0x0d, 0x4c, 0xc7, 0x92, 0x09, 0xf9, 0xc1, 0x00, 0x49, 0x75, 0x3b, 0x0b, + 0xf9, 0x41, 0x49, 0x75, 0x3b, 0x0a, 0xf9, 0x41, 0x17, 0x6f, 0x2e, 0x58, + 0x09, 0x9c, 0x01, 0x01, 0xff, 0xa1, 0x45, 0x4b, 0xaa, 0x9b, 0x7b, 0xcc, + 0x01, 0x44, 0xd5, 0xef, 0xfc, 0xcd, 0x01, 0xb2, 0x1f, 0xb3, 0x11, 0x0e, + 0x6b, 0x7d, 0x01, 0xff, 0x4f, 0x78, 0x6f, 0xe8, 0x29, 0x00, 0x50, 0xb6, + 0x66, 0xe9, 0x29, 0x40, 0x51, 0xe9, 0x5b, 0x3d, 0xf5, 0x01, 0x4b, 0x74, + 0x95, 0x04, 0xcc, 0x41, 0x49, 0x9a, 0xb5, 0x9a, 0xcc, 0x01, 0x4b, 0x90, + 0x06, 0x3b, 0xf5, 0x01, 0x44, 0xc5, 0xac, 0x68, 0xcc, 0x01, 0x4a, 0x9d, + 0xae, 0x59, 0xcc, 0x41, 0x47, 0x12, 0x34, 0xf8, 0xcd, 0x01, 0x4a, 0x03, + 0xb2, 0x63, 0xcc, 0x41, 0x4c, 0x7b, 0x8d, 0x77, 0xcc, 0x01, 0x4a, 0x3c, + 0x29, 0x73, 0xcc, 0x41, 0x49, 0xe1, 0x01, 0x04, 0x23, 0x00, 0x49, 0xfa, + 0xb8, 0x7f, 0x29, 0x00, 0x57, 0xae, 0x30, 0xf1, 0x22, 0x00, 0x44, 0xf5, + 0x38, 0xa4, 0x22, 0xc0, 0x00, 0x52, 0xb1, 0x4f, 0xf1, 0x2a, 0x40, 0x03, + 0x3e, 0x01, 0x06, 0x45, 0xa5, 0xe6, 0x69, 0xf3, 0x41, 0x80, 0xba, 0x01, + 0x8d, 0x17, 0x02, 0x06, 0x00, 0x01, 0xff, 0x4b, 0x13, 0x27, 0xa2, 0x26, + 0x00, 0x49, 0x61, 0x21, 0xa3, 0x26, 0x00, 0x46, 0x16, 0x08, 0xfc, 0x2b, + 0x40, 0x4e, 0x59, 0x77, 0xdf, 0x29, 0x00, 0x05, 0xed, 0x07, 0x66, 0x07, + 0x1a, 0x77, 0x01, 0xff, 0x08, 0xe4, 0x05, 0x36, 0x07, 0x0b, 0xd2, 0x17, + 0x4f, 0x68, 0x70, 0x40, 0x21, 0x00, 0x06, 0x5d, 0x07, 0x01, 0xff, 0x45, + 0x2c, 0x58, 0x3d, 0x21, 0x00, 0x42, 0xe6, 0x05, 0x3c, 0x21, 0x40, 0x49, + 0x02, 0xb7, 0x45, 0x21, 0x00, 0x06, 0x5d, 0x07, 0x01, 0xff, 0xe4, 0x46, + 0x21, 0x00, 0xe5, 0x47, 0x21, 0x00, 0xe9, 0x48, 0x21, 0x00, 0xea, 0x49, + 0x21, 0x40, 0xe3, 0x02, 0x21, 0x00, 0x45, 0x2c, 0x58, 0x3e, 0x21, 0x00, + 0xe8, 0x0d, 0x21, 0x00, 0xee, 0x15, 0x21, 0x00, 0xf0, 0x19, 0x21, 0x80, + 0x0c, 0xf1, 0x1a, 0x21, 0x00, 0xf2, 0x1d, 0x21, 0x00, 0xfa, 0x24, 0x21, + 0x40, 0xe9, 0x3f, 0x21, 0x40, 0x0c, 0x86, 0x28, 0x21, 0x08, 0x9a, 0x00, + 0x01, 0xff, 0x0c, 0x86, 0x28, 0x0c, 0x58, 0xe6, 0x28, 0xfa, 0x2a, 0x00, + 0x55, 0xaa, 0x3c, 0xf9, 0x2a, 0x40, 0x4c, 0x87, 0x00, 0x9c, 0x2a, 0x00, + 0x49, 0xec, 0x00, 0x9b, 0x2a, 0x40, 0x4c, 0x87, 0x00, 0x9a, 0x2a, 0x00, + 0x49, 0xec, 0x00, 0x99, 0x2a, 0x40, 0x4c, 0xfb, 0x8b, 0xdd, 0x02, 0x00, + 0xa3, 0xb1, 0x02, 0xa4, 0xa2, 0x02, 0x50, 0xad, 0x00, 0x3c, 0x20, 0x00, + 0xa8, 0x8d, 0x02, 0x04, 0x35, 0x08, 0xfc, 0x01, 0xac, 0xc8, 0x01, 0x07, + 0x7e, 0xd3, 0xb0, 0x01, 0x4e, 0x31, 0x7a, 0x17, 0x2e, 0x00, 0xb0, 0x8b, + 0x01, 0x4d, 0xa6, 0x34, 0x47, 0x20, 0x00, 0x5b, 0x50, 0x1d, 0x96, 0x29, + 0x00, 0xb3, 0x3e, 0xb5, 0x30, 0x09, 0x32, 0x00, 0x06, 0x4d, 0x7d, 0x8a, + 0x4c, 0xfe, 0x40, 0x43, 0x16, 0x00, 0xf8, 0x23, 0x80, 0x06, 0x44, 0xed, + 0x07, 0x16, 0x20, 0x40, 0x80, 0x01, 0xff, 0x07, 0x3b, 0x01, 0x06, 0x4e, + 0x50, 0x3a, 0xe3, 0x2a, 0x40, 0x4e, 0x50, 0x3a, 0xe5, 0x2a, 0x00, 0x4f, + 0x56, 0x01, 0xab, 0x22, 0x40, 0x44, 0x4e, 0x17, 0xd3, 0x22, 0x00, 0x46, + 0xea, 0xd6, 0xeb, 0x2a, 0x40, 0x4f, 0x1c, 0x71, 0xfd, 0x2a, 0x00, 0x06, + 0xbc, 0x24, 0x29, 0xb4, 0x1b, 0xb5, 0x01, 0xff, 0x44, 0x9b, 0x12, 0xd0, + 0x22, 0x00, 0x46, 0x32, 0xcb, 0xbc, 0x2a, 0x00, 0x46, 0x29, 0x36, 0xd1, + 0x22, 0x00, 0x4d, 0x3e, 0x7e, 0x44, 0x2e, 0x40, 0x4b, 0xb3, 0x98, 0x49, + 0x2e, 0x00, 0x4d, 0x85, 0x73, 0xec, 0x2a, 0x40, 0x4c, 0xa9, 0x0a, 0x4e, + 0x2a, 0x00, 0x45, 0x4d, 0x17, 0x4f, 0x2a, 0x40, 0x43, 0x59, 0x28, 0xfa, + 0x29, 0x00, 0xb2, 0x01, 0xff, 0x46, 0xea, 0xc9, 0xbb, 0x2a, 0x00, 0x43, + 0x29, 0x02, 0x33, 0x20, 0xc0, 0x00, 0x4f, 0x18, 0x05, 0x1e, 0x30, 0x40, + 0x4c, 0x87, 0x00, 0xa2, 0x2a, 0x00, 0x49, 0xec, 0x00, 0xa1, 0x2a, 0xc0, + 0x00, 0x4e, 0x2d, 0x5f, 0xa3, 0x2a, 0x40, 0x5c, 0xa6, 0x17, 0x95, 0x29, + 0x00, 0xaf, 0x01, 0xff, 0x06, 0x2d, 0x22, 0x18, 0xb7, 0x01, 0xff, 0x45, + 0xec, 0x07, 0x17, 0x20, 0x00, 0x8d, 0x01, 0xff, 0x50, 0x61, 0x13, 0x1e, + 0x20, 0x00, 0x59, 0x58, 0x13, 0x42, 0x2e, 0x40, 0x43, 0x1a, 0x00, 0x53, + 0x2a, 0x00, 0x42, 0x0c, 0x00, 0x54, 0x2a, 0x40, 0x44, 0x98, 0x26, 0x2c, + 0x22, 0x00, 0x48, 0xad, 0x0a, 0xd2, 0x22, 0x40, 0x5d, 0x54, 0x13, 0x1f, + 0x20, 0x00, 0x45, 0x97, 0x63, 0x40, 0x2e, 0x40, 0x45, 0xd7, 0xda, 0x21, + 0x20, 0x00, 0x48, 0xf1, 0x38, 0xea, 0x2a, 0x40, 0x07, 0xf6, 0x22, 0x0c, + 0x4a, 0xbb, 0xae, 0x74, 0x2a, 0x00, 0x49, 0x92, 0xc0, 0xbf, 0x27, 0x40, + 0x06, 0xef, 0x06, 0x06, 0x4a, 0x89, 0xae, 0xfe, 0x24, 0x40, 0x45, 0x12, + 0x0b, 0xfc, 0x24, 0x00, 0xa6, 0x29, 0x44, 0xcf, 0x2a, 0xfd, 0x24, 0x00, + 0x43, 0x0e, 0x0b, 0xf5, 0x24, 0x00, 0xb3, 0x0f, 0xb4, 0x01, 0xff, 0x44, + 0x25, 0x01, 0xf7, 0x24, 0x00, 0x42, 0x15, 0x02, 0xf6, 0x24, 0x40, 0x44, + 0xc9, 0x1d, 0xfb, 0x24, 0x00, 0x42, 0x01, 0x26, 0xfa, 0x24, 0x40, 0x43, + 0xd2, 0x05, 0xf9, 0x24, 0x00, 0x43, 0xf6, 0x06, 0xf8, 0x24, 0x40, 0x80, + 0x3f, 0x04, 0x77, 0x00, 0x01, 0xff, 0xa3, 0x2c, 0x45, 0xfa, 0x96, 0x99, + 0x29, 0x00, 0x49, 0x70, 0xbb, 0xe5, 0xfa, 0x01, 0x46, 0x9c, 0xde, 0x13, + 0x2e, 0x00, 0x54, 0x87, 0x0b, 0x16, 0x2e, 0x00, 0xb3, 0x06, 0x54, 0x40, + 0x46, 0x08, 0x2e, 0x40, 0x46, 0x50, 0x31, 0x4a, 0x2e, 0x00, 0x45, 0xd7, + 0x05, 0x1a, 0x2b, 0x40, 0x45, 0x13, 0x03, 0xcc, 0x25, 0x00, 0x44, 0x96, + 0x10, 0x5c, 0x20, 0x40, 0x45, 0x5c, 0x00, 0xd9, 0x02, 0x00, 0x45, 0x91, + 0x1f, 0x38, 0x22, 0x00, 0x48, 0x7e, 0x1d, 0xc5, 0x22, 0x00, 0x44, 0x58, + 0x28, 0x14, 0x22, 0x40, 0x46, 0x8a, 0xbc, 0xab, 0x20, 0x00, 0x43, 0x09, + 0x24, 0xcf, 0xfa, 0x41, 0x0a, 0x0b, 0x00, 0xf4, 0x01, 0x08, 0x32, 0x00, + 0x01, 0xff, 0x45, 0x43, 0x0e, 0x62, 0xf0, 0x01, 0x02, 0x1f, 0x40, 0x01, + 0xff, 0x03, 0x77, 0xf3, 0xc3, 0x01, 0x03, 0x83, 0xf3, 0xa2, 0x01, 0x03, + 0x95, 0xf3, 0x81, 0x01, 0x03, 0xa7, 0xf3, 0x61, 0x03, 0xb3, 0xf3, 0x41, + 0x03, 0xb9, 0xf3, 0x21, 0x03, 0xc5, 0xf3, 0x01, 0xff, 0xd0, 0x8d, 0xf0, + 0x01, 0xd1, 0x8e, 0xf0, 0x01, 0xd2, 0x8f, 0xf0, 0x01, 0xd3, 0x90, 0xf0, + 0x01, 0xd4, 0x91, 0xf0, 0x01, 0xd5, 0x92, 0xf0, 0x01, 0xd6, 0x93, 0xf0, + 0x41, 0xd0, 0x86, 0xf0, 0x01, 0xd1, 0x87, 0xf0, 0x01, 0xd2, 0x88, 0xf0, + 0x01, 0xd3, 0x89, 0xf0, 0x01, 0xd4, 0x8a, 0xf0, 0x01, 0xd5, 0x8b, 0xf0, + 0x01, 0xd6, 0x8c, 0xf0, 0x41, 0xd0, 0x7f, 0xf0, 0x01, 0xd1, 0x80, 0xf0, + 0x01, 0xd2, 0x81, 0xf0, 0x01, 0xd3, 0x82, 0xf0, 0x01, 0xd4, 0x83, 0xf0, + 0x01, 0xd5, 0x84, 0xf0, 0x01, 0xd6, 0x85, 0xf0, 0x41, 0xd0, 0x78, 0xf0, + 0x01, 0xd1, 0x79, 0xf0, 0x01, 0xd2, 0x7a, 0xf0, 0x01, 0xd3, 0x7b, 0xf0, + 0x01, 0xd4, 0x7c, 0xf0, 0x01, 0xd5, 0x7d, 0xf0, 0x01, 0xd6, 0x7e, 0xf0, + 0x41, 0xd0, 0x71, 0xf0, 0x01, 0xd1, 0x72, 0xf0, 0x01, 0xd2, 0x73, 0xf0, + 0x01, 0xd3, 0x74, 0xf0, 0x01, 0xd4, 0x75, 0xf0, 0x01, 0xd5, 0x76, 0xf0, + 0x01, 0xd6, 0x77, 0xf0, 0x41, 0xd0, 0x6a, 0xf0, 0x01, 0xd1, 0x6b, 0xf0, + 0x01, 0xd2, 0x6c, 0xf0, 0x01, 0xd3, 0x6d, 0xf0, 0x01, 0xd4, 0x6e, 0xf0, + 0x01, 0xd5, 0x6f, 0xf0, 0x01, 0xd6, 0x70, 0xf0, 0x41, 0xd0, 0x63, 0xf0, + 0x01, 0xd1, 0x64, 0xf0, 0x01, 0xd2, 0x65, 0xf0, 0x01, 0xd3, 0x66, 0xf0, + 0x01, 0xd4, 0x67, 0xf0, 0x01, 0xd5, 0x68, 0xf0, 0x01, 0xd6, 0x69, 0xf0, + 0x41, 0x45, 0x43, 0x0e, 0x30, 0xf0, 0x01, 0x02, 0x1f, 0x40, 0x01, 0xff, + 0x03, 0x77, 0xf3, 0xc3, 0x01, 0x03, 0x83, 0xf3, 0xa2, 0x01, 0x03, 0x95, + 0xf3, 0x81, 0x01, 0x03, 0xa7, 0xf3, 0x61, 0x03, 0xb3, 0xf3, 0x41, 0x03, + 0xb9, 0xf3, 0x21, 0x03, 0xc5, 0xf3, 0x01, 0xff, 0xd0, 0x5b, 0xf0, 0x01, + 0xd1, 0x5c, 0xf0, 0x01, 0xd2, 0x5d, 0xf0, 0x01, 0xd3, 0x5e, 0xf0, 0x01, + 0xd4, 0x5f, 0xf0, 0x01, 0xd5, 0x60, 0xf0, 0x01, 0xd6, 0x61, 0xf0, 0x41, + 0xd0, 0x54, 0xf0, 0x01, 0xd1, 0x55, 0xf0, 0x01, 0xd2, 0x56, 0xf0, 0x01, + 0xd3, 0x57, 0xf0, 0x01, 0xd4, 0x58, 0xf0, 0x01, 0xd5, 0x59, 0xf0, 0x01, + 0xd6, 0x5a, 0xf0, 0x41, 0xd0, 0x4d, 0xf0, 0x01, 0xd1, 0x4e, 0xf0, 0x01, + 0xd2, 0x4f, 0xf0, 0x01, 0xd3, 0x50, 0xf0, 0x01, 0xd4, 0x51, 0xf0, 0x01, + 0xd5, 0x52, 0xf0, 0x01, 0xd6, 0x53, 0xf0, 0x41, 0xd0, 0x46, 0xf0, 0x01, + 0xd1, 0x47, 0xf0, 0x01, 0xd2, 0x48, 0xf0, 0x01, 0xd3, 0x49, 0xf0, 0x01, + 0xd4, 0x4a, 0xf0, 0x01, 0xd5, 0x4b, 0xf0, 0x01, 0xd6, 0x4c, 0xf0, 0x41, + 0xd0, 0x3f, 0xf0, 0x01, 0xd1, 0x40, 0xf0, 0x01, 0xd2, 0x41, 0xf0, 0x01, + 0xd3, 0x42, 0xf0, 0x01, 0xd4, 0x43, 0xf0, 0x01, 0xd5, 0x44, 0xf0, 0x01, + 0xd6, 0x45, 0xf0, 0x41, 0xd0, 0x38, 0xf0, 0x01, 0xd1, 0x39, 0xf0, 0x01, + 0xd2, 0x3a, 0xf0, 0x01, 0xd3, 0x3b, 0xf0, 0x01, 0xd4, 0x3c, 0xf0, 0x01, + 0xd5, 0x3d, 0xf0, 0x01, 0xd6, 0x3e, 0xf0, 0x41, 0xd0, 0x31, 0xf0, 0x01, + 0xd1, 0x32, 0xf0, 0x01, 0xd2, 0x33, 0xf0, 0x01, 0xd3, 0x34, 0xf0, 0x01, + 0xd4, 0x35, 0xf0, 0x01, 0xd5, 0x36, 0xf0, 0x01, 0xd6, 0x37, 0xf0, 0x41, + 0x48, 0x2d, 0x0e, 0x24, 0x00, 0x00, 0x44, 0x11, 0xf2, 0x2c, 0xf4, 0x41, + 0x45, 0x0b, 0x08, 0x36, 0xf4, 0x01, 0x03, 0x71, 0x00, 0x01, 0xff, 0x51, + 0xdc, 0x57, 0x3b, 0x18, 0x01, 0x07, 0xec, 0x05, 0x59, 0x05, 0x5a, 0x03, + 0x38, 0x0b, 0x40, 0x77, 0x01, 0xff, 0xa1, 0x25, 0xe5, 0x33, 0x18, 0x01, + 0xe9, 0x2d, 0x18, 0x81, 0x18, 0xef, 0x35, 0x18, 0x01, 0xf5, 0x2f, 0x18, + 0x81, 0x0b, 0x49, 0x22, 0xc1, 0x31, 0x18, 0xc1, 0x00, 0xf2, 0x32, 0x18, + 0x41, 0xf5, 0x30, 0x18, 0x41, 0xe9, 0x2e, 0x18, 0x41, 0xe1, 0x2c, 0x18, + 0x01, 0xe9, 0x34, 0x18, 0x01, 0xf5, 0x36, 0x18, 0x41, 0x48, 0x3c, 0x16, + 0x37, 0x18, 0x01, 0x45, 0x3f, 0x3f, 0x3a, 0x18, 0x01, 0x02, 0x02, 0x00, + 0x01, 0xff, 0x44, 0xe5, 0x23, 0x39, 0x18, 0x01, 0x45, 0xec, 0x4b, 0x38, + 0x18, 0x41, 0xe1, 0x00, 0x18, 0x81, 0xee, 0x01, 0xa2, 0xe1, 0x01, 0xa3, + 0xd4, 0x01, 0xa4, 0xbb, 0x01, 0xe5, 0x06, 0x18, 0x01, 0xa7, 0xaa, 0x01, + 0x42, 0x22, 0x00, 0x2a, 0x18, 0x01, 0xe9, 0x02, 0x18, 0x81, 0x9a, 0x01, + 0xaa, 0x8d, 0x01, 0xab, 0x80, 0x01, 0x42, 0x74, 0x00, 0x25, 0x18, 0x01, + 0x42, 0x6c, 0x00, 0x22, 0x18, 0x01, 0xae, 0x5c, 0xef, 0x08, 0x18, 0x01, + 0xb0, 0x4c, 0xb2, 0x40, 0xb3, 0x2e, 0xb4, 0x15, 0xf5, 0x04, 0x18, 0x81, + 0x0c, 0x42, 0xf5, 0x0a, 0x26, 0x18, 0x01, 0x42, 0xbc, 0x22, 0x23, 0x18, + 0x41, 0xf5, 0x05, 0x18, 0x41, 0xe1, 0x19, 0x18, 0x01, 0x42, 0x22, 0x00, + 0x1a, 0x18, 0x01, 0xb4, 0x01, 0xff, 0xe1, 0x14, 0x18, 0x01, 0x42, 0x22, + 0x00, 0x15, 0x18, 0x41, 0xe1, 0x29, 0x18, 0x01, 0x42, 0x22, 0x00, 0x27, + 0x18, 0x01, 0x42, 0x40, 0x06, 0x28, 0x18, 0x41, 0xe1, 0x24, 0x18, 0x01, + 0x42, 0x71, 0x00, 0x2b, 0x18, 0x41, 0xe1, 0x1e, 0x18, 0x01, 0x42, 0x22, + 0x00, 0x1f, 0x18, 0x41, 0xe1, 0x1d, 0x18, 0x01, 0x42, 0x24, 0x02, 0x0e, + 0x18, 0x01, 0x42, 0x2a, 0x05, 0x18, 0x18, 0x01, 0x42, 0xbc, 0x22, 0x13, + 0x18, 0x41, 0xe1, 0x0a, 0x18, 0x01, 0x42, 0x22, 0x00, 0x0b, 0x18, 0x41, + 0xe1, 0x11, 0x18, 0x01, 0x42, 0x22, 0x00, 0x12, 0x18, 0x41, 0xe9, 0x03, + 0x18, 0x41, 0xe1, 0x0c, 0x18, 0x01, 0x42, 0x22, 0x00, 0x0d, 0x18, 0x41, + 0xe1, 0x1b, 0x18, 0x01, 0xa4, 0x06, 0x42, 0x22, 0x00, 0x1c, 0x18, 0x41, + 0xe1, 0x16, 0x18, 0x01, 0x42, 0x22, 0x00, 0x17, 0x18, 0x41, 0xe1, 0x0f, + 0x18, 0x01, 0x42, 0x22, 0x00, 0x10, 0x18, 0x41, 0xe1, 0x20, 0x18, 0x01, + 0x42, 0x22, 0x00, 0x21, 0x18, 0x41, 0xe1, 0x01, 0x18, 0x01, 0xe9, 0x07, + 0x18, 0x01, 0xf5, 0x09, 0x18, 0x41, 0x0b, 0x4a, 0x9a, 0x37, 0x46, 0x00, + 0x00, 0x24, 0x22, 0x80, 0x2a, 0x45, 0x78, 0xe6, 0xae, 0x22, 0x00, 0x02, + 0xdf, 0x0c, 0x0d, 0x47, 0x30, 0xcb, 0x81, 0x22, 0xc0, 0x00, 0x49, 0xf2, + 0x28, 0xe1, 0x22, 0x40, 0x45, 0x57, 0x36, 0x80, 0x22, 0x80, 0x06, 0x43, + 0x5e, 0x00, 0xac, 0x22, 0x40, 0x49, 0xf2, 0x28, 0xe0, 0x22, 0x40, 0x5d, + 0xd7, 0x14, 0xee, 0x2a, 0x40, 0x46, 0xb4, 0x05, 0x0c, 0x22, 0x00, 0x4f, + 0xe9, 0x53, 0xeb, 0x22, 0xc0, 0x00, 0x49, 0xf2, 0x28, 0xed, 0x22, 0x40, + 0x06, 0x50, 0x00, 0x01, 0xff, 0x47, 0x04, 0x8b, 0xbb, 0xf5, 0x01, 0x44, + 0x7c, 0x30, 0xb9, 0xf5, 0xc1, 0x00, 0x4c, 0xff, 0x8a, 0xba, 0xf5, 0x41, + 0xa1, 0xaa, 0x09, 0xa5, 0x85, 0x09, 0x50, 0x36, 0x63, 0x4f, 0x22, 0x00, + 0xa7, 0xc7, 0x06, 0x4e, 0xdd, 0x79, 0x31, 0x23, 0x00, 0x06, 0x42, 0xde, + 0xce, 0x04, 0x05, 0x89, 0x0d, 0xbd, 0x04, 0xb3, 0x8f, 0x04, 0x48, 0xd0, + 0xcb, 0x03, 0x30, 0x00, 0xb6, 0x17, 0x47, 0xc2, 0xd7, 0x94, 0xfa, 0x01, + 0x04, 0x6d, 0xf3, 0x01, 0xff, 0x44, 0x0c, 0x08, 0x35, 0xf6, 0x01, 0x46, + 0x16, 0x08, 0xab, 0xf4, 0x41, 0x09, 0x97, 0xb8, 0x2d, 0xa9, 0x06, 0x4b, + 0xe8, 0xa0, 0xae, 0x26, 0x40, 0x43, 0xf6, 0x27, 0x23, 0x22, 0x00, 0x47, + 0x85, 0xd3, 0x3f, 0xf9, 0x01, 0x05, 0x8b, 0x30, 0x01, 0xff, 0xb3, 0x06, + 0x45, 0x28, 0x02, 0xc7, 0x22, 0x40, 0x43, 0x5b, 0x03, 0xf7, 0x00, 0x00, + 0x44, 0x49, 0x0e, 0x15, 0x22, 0x40, 0xa4, 0xf0, 0x02, 0x50, 0xb6, 0x62, + 0x46, 0x19, 0x01, 0x4a, 0x39, 0x9c, 0x45, 0x19, 0x01, 0x4a, 0xeb, 0xab, + 0x41, 0x19, 0x01, 0x07, 0xec, 0x05, 0x64, 0x07, 0x4c, 0x33, 0x54, 0x53, + 0x2a, 0x4c, 0x3f, 0x19, 0x01, 0x05, 0x5a, 0x03, 0x32, 0xb6, 0x01, 0xff, + 0x45, 0xe4, 0x23, 0x3e, 0x19, 0x01, 0x0a, 0x41, 0x77, 0x01, 0xff, 0xa1, + 0x1a, 0xe5, 0x35, 0x19, 0x01, 0xe9, 0x31, 0x19, 0x81, 0x0d, 0xef, 0x38, + 0x19, 0x01, 0xf5, 0x33, 0x19, 0xc1, 0x00, 0xf5, 0x34, 0x19, 0x41, 0xe9, + 0x32, 0x19, 0x41, 0xe1, 0x30, 0x19, 0x01, 0xe9, 0x37, 0x19, 0x41, 0x48, + 0x3c, 0x16, 0x3b, 0x19, 0x01, 0x4b, 0xd7, 0x23, 0x3c, 0x19, 0x01, 0x47, + 0x71, 0xd1, 0x3d, 0x19, 0x01, 0x45, 0x3f, 0x3f, 0x43, 0x19, 0x41, 0x42, + 0x71, 0x00, 0x42, 0x19, 0x01, 0x42, 0xbc, 0x22, 0x40, 0x19, 0x41, 0xe1, + 0x00, 0x19, 0x81, 0xec, 0x01, 0xa2, 0xdf, 0x01, 0xa3, 0xd2, 0x01, 0xa4, + 0xb9, 0x01, 0xe5, 0x06, 0x19, 0x01, 0xa7, 0xa8, 0x01, 0x42, 0x22, 0x00, + 0x2d, 0x19, 0x01, 0xe9, 0x02, 0x19, 0x81, 0x98, 0x01, 0x42, 0x56, 0x19, + 0x13, 0x19, 0x01, 0xab, 0x85, 0x01, 0xac, 0x79, 0x42, 0x6c, 0x00, 0x24, + 0x19, 0x01, 0xae, 0x5b, 0xef, 0x09, 0x19, 0x01, 0xb0, 0x4b, 0x42, 0x71, + 0x00, 0x27, 0x19, 0x01, 0xb3, 0x33, 0xb4, 0x21, 0xf5, 0x04, 0x19, 0x81, + 0x18, 0x42, 0xf5, 0x0a, 0x29, 0x19, 0x01, 0xb9, 0x06, 0x42, 0x59, 0x00, + 0x2f, 0x19, 0x41, 0xe1, 0x25, 0x19, 0x01, 0x42, 0xbc, 0x22, 0x26, 0x19, + 0x41, 0xf5, 0x05, 0x19, 0x41, 0xe1, 0x1b, 0x19, 0x01, 0x42, 0x22, 0x00, + 0x1c, 0x19, 0x01, 0x42, 0x12, 0x00, 0x16, 0x19, 0x41, 0xe1, 0x2c, 0x19, + 0x01, 0x42, 0x22, 0x00, 0x2a, 0x19, 0x01, 0x42, 0x40, 0x06, 0x2b, 0x19, + 0x41, 0xe1, 0x20, 0x19, 0x01, 0x42, 0x22, 0x00, 0x21, 0x19, 0x41, 0xe1, + 0x1f, 0x19, 0x01, 0x42, 0x24, 0x02, 0x10, 0x19, 0x01, 0x42, 0x2a, 0x05, + 0x1a, 0x19, 0x01, 0x42, 0xbc, 0x22, 0x15, 0x19, 0x41, 0xe1, 0x28, 0x19, + 0x01, 0x42, 0x74, 0x00, 0x2e, 0x19, 0x41, 0xe1, 0x0c, 0x19, 0x01, 0x42, + 0x22, 0x00, 0x0d, 0x19, 0x41, 0xe9, 0x03, 0x19, 0x41, 0xe1, 0x0e, 0x19, + 0x01, 0x42, 0x22, 0x00, 0x0f, 0x19, 0x41, 0xe1, 0x1d, 0x19, 0x01, 0xa4, + 0x06, 0x42, 0x22, 0x00, 0x1e, 0x19, 0x41, 0xe1, 0x18, 0x19, 0x01, 0x42, + 0x22, 0x00, 0x19, 0x19, 0x41, 0xe1, 0x11, 0x19, 0x01, 0x42, 0x22, 0x00, + 0x12, 0x19, 0x41, 0xe1, 0x22, 0x19, 0x01, 0x42, 0x22, 0x00, 0x23, 0x19, + 0x41, 0xe1, 0x01, 0x19, 0x41, 0x05, 0xf0, 0x06, 0x06, 0x4b, 0x09, 0xa1, + 0x44, 0x19, 0x41, 0x45, 0x12, 0x0b, 0x58, 0x19, 0x01, 0xa6, 0x2e, 0x44, + 0xcf, 0x2a, 0x59, 0x19, 0x01, 0x43, 0x0e, 0x0b, 0x51, 0x19, 0x01, 0xb3, + 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, 0x50, 0x19, 0x41, 0x44, 0x25, 0x01, + 0x53, 0x19, 0x01, 0x42, 0x15, 0x02, 0x52, 0x19, 0x41, 0x44, 0xc9, 0x1d, + 0x57, 0x19, 0x01, 0x42, 0x01, 0x26, 0x56, 0x19, 0x41, 0x43, 0xd2, 0x05, + 0x55, 0x19, 0x01, 0x43, 0xf6, 0x06, 0x54, 0x19, 0x41, 0xa1, 0x12, 0x5b, + 0xc8, 0x1a, 0x82, 0x23, 0x00, 0x4b, 0x9c, 0x9c, 0x78, 0xf9, 0x01, 0x4b, + 0xa8, 0xa3, 0xea, 0xfa, 0x41, 0x48, 0x30, 0xc4, 0xcd, 0x26, 0x00, 0x09, + 0x25, 0xbe, 0x01, 0xff, 0x51, 0xdb, 0x58, 0x25, 0xf6, 0x01, 0x44, 0x0c, + 0x08, 0x1e, 0xf6, 0x41, 0x57, 0x13, 0x2e, 0x93, 0x23, 0x00, 0x43, 0xae, + 0x02, 0xaf, 0xf3, 0x41, 0x13, 0xc0, 0x48, 0x9d, 0x01, 0x11, 0xa4, 0x5c, + 0x01, 0xff, 0x06, 0xef, 0x06, 0x57, 0x4a, 0x89, 0xae, 0x7f, 0x27, 0x00, + 0x0b, 0xc8, 0x48, 0x01, 0xff, 0x06, 0xef, 0x06, 0x06, 0x4a, 0x89, 0xae, + 0x93, 0x27, 0x40, 0x45, 0x12, 0x0b, 0x91, 0x27, 0x00, 0xa6, 0x2e, 0x44, + 0xcf, 0x2a, 0x92, 0x27, 0x00, 0x43, 0x0e, 0x0b, 0x8a, 0x27, 0x00, 0xb3, + 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, 0x0c, 0xf1, 0x41, 0x44, 0x25, 0x01, + 0x8c, 0x27, 0x00, 0x42, 0x15, 0x02, 0x8b, 0x27, 0x40, 0x44, 0xc9, 0x1d, + 0x90, 0x27, 0x00, 0x42, 0x01, 0x26, 0x8f, 0x27, 0x40, 0x43, 0xd2, 0x05, + 0x8e, 0x27, 0x00, 0x43, 0xf6, 0x06, 0x8d, 0x27, 0x40, 0x45, 0x12, 0x0b, + 0x7d, 0x27, 0x00, 0xa6, 0x29, 0x44, 0xcf, 0x2a, 0x7e, 0x27, 0x00, 0x43, + 0x0e, 0x0b, 0x76, 0x27, 0x00, 0xb3, 0x0f, 0xb4, 0x01, 0xff, 0x44, 0x25, + 0x01, 0x78, 0x27, 0x00, 0x42, 0x15, 0x02, 0x77, 0x27, 0x40, 0x44, 0xc9, + 0x1d, 0x7c, 0x27, 0x00, 0x42, 0x01, 0x26, 0x7b, 0x27, 0x40, 0x43, 0xd2, + 0x05, 0x7a, 0x27, 0x00, 0x43, 0xf6, 0x06, 0x79, 0x27, 0x40, 0x06, 0xef, + 0x06, 0x06, 0x4a, 0x89, 0xae, 0x89, 0x27, 0x40, 0x45, 0x12, 0x0b, 0x87, + 0x27, 0x00, 0xa6, 0x2e, 0x44, 0xcf, 0x2a, 0x88, 0x27, 0x00, 0x43, 0x0e, + 0x0b, 0x80, 0x27, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, 0x0b, + 0xf1, 0x41, 0x44, 0x25, 0x01, 0x82, 0x27, 0x00, 0x42, 0x15, 0x02, 0x81, + 0x27, 0x40, 0x44, 0xc9, 0x1d, 0x86, 0x27, 0x00, 0x42, 0x01, 0x26, 0x85, + 0x27, 0x40, 0x43, 0xd2, 0x05, 0x84, 0x27, 0x00, 0x43, 0xf6, 0x06, 0x83, + 0x27, 0x40, 0x03, 0xf2, 0x06, 0x4c, 0x08, 0x07, 0x96, 0x01, 0xff, 0x45, + 0x52, 0x72, 0x05, 0xd3, 0x81, 0x2f, 0x09, 0x39, 0xb9, 0x1f, 0xa8, 0x11, + 0x08, 0xb8, 0xc7, 0x01, 0xff, 0x43, 0x1c, 0x01, 0x8e, 0x26, 0x00, 0x42, + 0x9e, 0x01, 0x8d, 0x26, 0x40, 0x4d, 0x50, 0x82, 0x01, 0xd3, 0x01, 0x4a, + 0xa3, 0xb2, 0x02, 0xd3, 0x41, 0x43, 0x1c, 0x01, 0x8c, 0x26, 0x00, 0x42, + 0x9e, 0x01, 0x8f, 0x26, 0x40, 0x04, 0x7a, 0x8e, 0x01, 0xff, 0x45, 0x8a, + 0x7b, 0x03, 0xd3, 0x01, 0x44, 0x4d, 0xa4, 0x04, 0xd3, 0x41, 0x45, 0x12, + 0x0b, 0x38, 0x00, 0x80, 0xce, 0x01, 0xa6, 0x9f, 0x01, 0x44, 0xcf, 0x2a, + 0x39, 0x00, 0x80, 0x88, 0x01, 0x43, 0x0e, 0x0b, 0x31, 0x00, 0x80, 0x72, + 0xb3, 0x44, 0xb4, 0x16, 0x44, 0x43, 0x1e, 0x30, 0x00, 0xc0, 0x00, 0x80, + 0x01, 0xff, 0x45, 0x13, 0x05, 0x01, 0xf1, 0x01, 0x49, 0x81, 0x16, 0x00, + 0xf1, 0x41, 0x44, 0x25, 0x01, 0x33, 0x00, 0x80, 0x16, 0x42, 0x15, 0x02, + 0x32, 0x00, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x45, 0x13, 0x05, 0x03, 0xf1, + 0x01, 0x49, 0x81, 0x16, 0x89, 0x24, 0x40, 0x80, 0x01, 0xff, 0x45, 0x13, + 0x05, 0x04, 0xf1, 0x01, 0x49, 0x81, 0x16, 0x8a, 0x24, 0x40, 0x44, 0xc9, + 0x1d, 0x37, 0x00, 0x80, 0x16, 0x42, 0x01, 0x26, 0x36, 0x00, 0xc0, 0x00, + 0x80, 0x01, 0xff, 0x45, 0x13, 0x05, 0x07, 0xf1, 0x01, 0x49, 0x81, 0x16, + 0x8d, 0x24, 0x40, 0x80, 0x01, 0xff, 0x45, 0x13, 0x05, 0x08, 0xf1, 0x01, + 0x49, 0x81, 0x16, 0x8e, 0x24, 0x40, 0x80, 0x01, 0xff, 0x45, 0x13, 0x05, + 0x02, 0xf1, 0x01, 0x49, 0x81, 0x16, 0x88, 0x24, 0x40, 0x80, 0x01, 0xff, + 0x45, 0x13, 0x05, 0x0a, 0xf1, 0x01, 0x49, 0x81, 0x16, 0x90, 0x24, 0x40, + 0x43, 0xd2, 0x05, 0x35, 0x00, 0x80, 0x16, 0x43, 0xf6, 0x06, 0x34, 0x00, + 0xc0, 0x00, 0x80, 0x01, 0xff, 0x45, 0x13, 0x05, 0x05, 0xf1, 0x01, 0x49, + 0x81, 0x16, 0x8b, 0x24, 0x40, 0x80, 0x01, 0xff, 0x45, 0x13, 0x05, 0x06, + 0xf1, 0x01, 0x49, 0x81, 0x16, 0x8c, 0x24, 0x40, 0x80, 0x01, 0xff, 0x45, + 0x13, 0x05, 0x09, 0xf1, 0x01, 0x49, 0x81, 0x16, 0x8f, 0x24, 0x40, 0x06, + 0x12, 0xd8, 0x06, 0x4e, 0xf1, 0x7b, 0xf2, 0xf6, 0x41, 0xd1, 0x80, 0x26, + 0x00, 0xd2, 0x81, 0x26, 0x00, 0xd3, 0x82, 0x26, 0x00, 0xd4, 0x83, 0x26, + 0x00, 0xd5, 0x84, 0x26, 0x00, 0xd6, 0x85, 0x26, 0x40, 0x46, 0xba, 0x23, + 0xa8, 0x00, 0x00, 0x55, 0x89, 0x21, 0x43, 0xcc, 0x01, 0xad, 0x01, 0xff, + 0x49, 0xa9, 0xb8, 0x00, 0x23, 0x00, 0x04, 0x62, 0x57, 0x01, 0xff, 0x48, + 0x7e, 0x1d, 0xc4, 0x22, 0x00, 0x57, 0x21, 0x31, 0xa0, 0xf4, 0x01, 0x46, + 0x64, 0xe0, 0x9c, 0xf7, 0x01, 0x05, 0x51, 0x00, 0x01, 0xff, 0x51, 0xa8, + 0x58, 0x19, 0x2b, 0x00, 0x4f, 0x78, 0x6f, 0x16, 0x2b, 0x00, 0x50, 0xb6, + 0x66, 0x17, 0x2b, 0x00, 0x4e, 0x33, 0x7d, 0x18, 0x2b, 0x40, 0x49, 0xb5, + 0xb5, 0xcf, 0xf9, 0x01, 0xa3, 0x9f, 0x0d, 0x42, 0x33, 0x00, 0x8c, 0xf9, + 0x01, 0x05, 0xf1, 0xaa, 0x82, 0x0d, 0xac, 0xed, 0x0c, 0xae, 0xd8, 0x0b, + 0x4e, 0x03, 0x7b, 0xec, 0xf3, 0x01, 0x55, 0xa6, 0x3d, 0xda, 0xf3, 0x01, + 0xb3, 0xe5, 0x07, 0xb6, 0x01, 0xff, 0x08, 0xd2, 0xc0, 0x26, 0x0c, 0x4a, + 0x8a, 0x01, 0xff, 0x44, 0xf5, 0x06, 0x14, 0x00, 0x00, 0x43, 0x0e, 0x0b, + 0x11, 0x00, 0x00, 0x46, 0x96, 0x67, 0x90, 0x00, 0x00, 0xb4, 0x01, 0xff, + 0x44, 0x25, 0x01, 0x13, 0x00, 0x00, 0x42, 0x15, 0x02, 0x12, 0x00, 0x40, + 0xa1, 0xa9, 0x07, 0x45, 0x66, 0x7d, 0xfa, 0xa8, 0x00, 0xa4, 0xce, 0x06, + 0xa7, 0xbf, 0x06, 0x04, 0xe6, 0x01, 0xa7, 0x06, 0x47, 0x20, 0xd2, 0xfd, + 0xa8, 0x00, 0x07, 0xec, 0x05, 0xc9, 0x02, 0x42, 0x14, 0x05, 0x50, 0x09, + 0x00, 0xb3, 0x84, 0x01, 0x0b, 0x40, 0x77, 0x01, 0xff, 0xa1, 0x69, 0x07, + 0x36, 0x61, 0x57, 0xe5, 0x47, 0x09, 0x00, 0xe9, 0x3f, 0x09, 0x80, 0x4a, + 0xef, 0x4b, 0x09, 0x80, 0x3b, 0x4f, 0xee, 0x71, 0x4e, 0x09, 0x00, 0x06, + 0x33, 0x07, 0x29, 0xf5, 0x41, 0x09, 0x80, 0x17, 0x08, 0x22, 0xc1, 0x01, + 0xff, 0xec, 0x62, 0x09, 0x80, 0x09, 0xf2, 0x43, 0x09, 0xc0, 0x00, 0xf2, + 0x44, 0x09, 0x40, 0xec, 0x63, 0x09, 0x40, 0xe5, 0x56, 0x09, 0x00, 0xf5, + 0x42, 0x09, 0xc0, 0x00, 0xe5, 0x57, 0x09, 0x40, 0xe5, 0x46, 0x09, 0x00, + 0xef, 0x4a, 0x09, 0x40, 0xe5, 0x3a, 0x09, 0x00, 0x42, 0x60, 0x51, 0x3b, + 0x09, 0x40, 0xe9, 0x40, 0x09, 0x40, 0xe5, 0x45, 0x09, 0x00, 0x46, 0xd6, + 0xdd, 0x55, 0x09, 0x00, 0xef, 0x49, 0x09, 0x40, 0xe1, 0x3e, 0x09, 0x00, + 0xe9, 0x48, 0x09, 0x00, 0xf5, 0x4c, 0x09, 0x00, 0xf7, 0x4f, 0x09, 0x00, + 0xf9, 0xff, 0xa8, 0x40, 0x04, 0x5b, 0x03, 0x11, 0x0b, 0xbe, 0xa3, 0x01, + 0xff, 0x48, 0xc9, 0x7c, 0x52, 0x09, 0x00, 0x46, 0xcb, 0x7c, 0x51, 0x09, + 0x40, 0xa1, 0x98, 0x01, 0x45, 0xd9, 0x2a, 0x02, 0x1b, 0x81, 0x8a, 0x01, + 0x4b, 0xd7, 0x23, 0x01, 0x09, 0x80, 0x66, 0x59, 0xd0, 0x23, 0xf4, 0xa8, + 0x00, 0x4e, 0xad, 0x77, 0x04, 0x1b, 0x81, 0x53, 0x50, 0x66, 0x63, 0x71, + 0x09, 0x00, 0x54, 0x84, 0x43, 0x00, 0x09, 0x00, 0x45, 0xad, 0xe8, 0x09, + 0x1b, 0x01, 0x45, 0x3f, 0x3f, 0x3c, 0x09, 0x00, 0x48, 0x2f, 0x7c, 0xf8, + 0xa8, 0x00, 0x58, 0xc6, 0x2a, 0x08, 0x1b, 0x01, 0xb3, 0x21, 0x02, 0x02, + 0x00, 0x11, 0x08, 0xd9, 0x31, 0x01, 0xff, 0x4f, 0x11, 0x6d, 0x06, 0x1b, + 0x01, 0x4f, 0xcf, 0x2a, 0x07, 0x1b, 0x41, 0x44, 0xe5, 0x23, 0x4d, 0x09, + 0x00, 0x45, 0xec, 0x4b, 0x03, 0x09, 0x40, 0x46, 0xd9, 0xd5, 0xfc, 0xa8, + 0x00, 0x52, 0x79, 0x54, 0xf2, 0xa8, 0x40, 0x4a, 0xa7, 0x24, 0x05, 0x1b, + 0x41, 0x80, 0x01, 0xff, 0x48, 0xae, 0x88, 0xf7, 0xa8, 0x00, 0xb4, 0x06, + 0x46, 0xe3, 0x23, 0xf3, 0xa8, 0x40, 0x44, 0x25, 0x01, 0xf6, 0xa8, 0x00, + 0x42, 0x15, 0x02, 0xf5, 0xa8, 0x40, 0x4a, 0xa7, 0x24, 0x03, 0x1b, 0x41, + 0x47, 0x3d, 0x16, 0x02, 0x09, 0x00, 0x47, 0xaf, 0x88, 0x3d, 0x09, 0x40, + 0xe1, 0x05, 0x09, 0x80, 0xb9, 0x03, 0xa2, 0xa6, 0x03, 0xa3, 0x87, 0x03, + 0xa4, 0xe2, 0x02, 0xe5, 0x0f, 0x09, 0x00, 0x42, 0x0c, 0x08, 0x5e, 0x09, + 0x00, 0xa7, 0xb9, 0x02, 0xa8, 0xac, 0x02, 0xe9, 0x07, 0x09, 0x80, 0xa2, + 0x02, 0xaa, 0x8f, 0x02, 0xab, 0xfb, 0x01, 0xac, 0xe7, 0x01, 0x42, 0x6c, + 0x00, 0x2e, 0x09, 0x80, 0xd9, 0x01, 0xae, 0xba, 0x01, 0xef, 0x13, 0x09, + 0x80, 0xaa, 0x01, 0xb0, 0x9d, 0x01, 0x42, 0x43, 0x14, 0x58, 0x09, 0x00, + 0xb2, 0x84, 0x01, 0xb3, 0x61, 0xb4, 0x48, 0xf5, 0x09, 0x09, 0x80, 0x36, + 0xb6, 0x19, 0xb9, 0x0d, 0xba, 0x01, 0xff, 0xe1, 0x5b, 0x09, 0x00, 0x42, + 0x22, 0x00, 0x79, 0x09, 0x40, 0xe1, 0x2f, 0x09, 0x00, 0x42, 0xbc, 0x22, + 0x5f, 0x09, 0x40, 0xe1, 0x35, 0x09, 0x00, 0x07, 0x23, 0xc1, 0x01, 0xff, + 0xec, 0x0c, 0x09, 0x80, 0x09, 0xf2, 0x0b, 0x09, 0xc0, 0x00, 0xf2, 0x60, + 0x09, 0x40, 0xec, 0x61, 0x09, 0x40, 0xe5, 0x76, 0x09, 0x00, 0xf5, 0x0a, + 0x09, 0xc0, 0x00, 0xe5, 0x77, 0x09, 0x40, 0xe1, 0x24, 0x09, 0x00, 0x42, + 0x22, 0x00, 0x25, 0x09, 0x00, 0xb4, 0x01, 0xff, 0xe1, 0x1f, 0x09, 0x00, + 0x42, 0x22, 0x00, 0x20, 0x09, 0x40, 0xe1, 0x38, 0x09, 0x00, 0xa8, 0x06, + 0x42, 0x40, 0x06, 0x37, 0x09, 0x40, 0xe1, 0x36, 0x09, 0x00, 0x04, 0x35, + 0x07, 0x01, 0xff, 0xe1, 0x04, 0x09, 0x00, 0xe5, 0x0e, 0x09, 0x00, 0xef, + 0x12, 0x09, 0x40, 0xe1, 0x30, 0x09, 0x00, 0x42, 0x22, 0x00, 0x5d, 0x09, + 0x00, 0x42, 0x71, 0x00, 0x31, 0x09, 0x40, 0xe1, 0x2a, 0x09, 0x00, 0x42, + 0x22, 0x00, 0x2b, 0x09, 0x40, 0xe5, 0x73, 0x09, 0x00, 0x42, 0x60, 0x51, + 0x74, 0x09, 0x40, 0xe1, 0x28, 0x09, 0x00, 0x42, 0x24, 0x02, 0x19, 0x09, + 0x00, 0xae, 0x06, 0x42, 0xbc, 0x22, 0x1e, 0x09, 0x40, 0xe1, 0x23, 0x09, + 0x00, 0x42, 0x2a, 0x05, 0x29, 0x09, 0x40, 0x49, 0x0f, 0xbf, 0x78, 0x09, + 0x40, 0xe1, 0x32, 0x09, 0x00, 0xac, 0x01, 0xff, 0xe1, 0x33, 0x09, 0x00, + 0x42, 0x74, 0x00, 0x34, 0x09, 0x40, 0xe1, 0x15, 0x09, 0x00, 0xa8, 0x01, + 0xff, 0xe1, 0x16, 0x09, 0x00, 0x42, 0x22, 0x00, 0x59, 0x09, 0x40, 0xe1, + 0x1c, 0x09, 0x00, 0x42, 0x22, 0x00, 0x1d, 0x09, 0x00, 0x42, 0x56, 0x19, + 0x7c, 0x09, 0x40, 0xe9, 0x08, 0x09, 0x40, 0xe1, 0x39, 0x09, 0x00, 0x47, + 0xa6, 0xd0, 0x7a, 0x09, 0x40, 0xe1, 0x17, 0x09, 0x00, 0x42, 0x24, 0x02, + 0x7b, 0x09, 0x00, 0xa8, 0x06, 0x4b, 0xcf, 0x28, 0x7d, 0x09, 0x40, 0xe1, + 0x18, 0x09, 0x00, 0x42, 0x22, 0x00, 0x5a, 0x09, 0x40, 0xe1, 0x26, 0x09, + 0x00, 0xa4, 0x06, 0x42, 0x22, 0x00, 0x27, 0x09, 0x40, 0xe1, 0x21, 0x09, + 0x00, 0xa4, 0x06, 0x42, 0x22, 0x00, 0x22, 0x09, 0x40, 0xe1, 0x7e, 0x09, + 0x00, 0x42, 0x22, 0x00, 0x5c, 0x09, 0x40, 0xe1, 0x1a, 0x09, 0x80, 0x06, + 0x42, 0x22, 0x00, 0x1b, 0x09, 0x40, 0x05, 0x38, 0x61, 0x01, 0xff, 0xe1, + 0x72, 0x09, 0x00, 0xe5, 0x0d, 0x09, 0x00, 0xef, 0x11, 0x09, 0x40, 0xe1, + 0x2c, 0x09, 0x00, 0x42, 0x16, 0x00, 0x7f, 0x09, 0x00, 0x42, 0x22, 0x00, + 0x2d, 0x09, 0x40, 0xe1, 0x06, 0x09, 0x00, 0xe9, 0x10, 0x09, 0x00, 0xf5, + 0x14, 0x09, 0x00, 0xf7, 0x75, 0x09, 0x00, 0xf9, 0xfe, 0xa8, 0x40, 0x45, + 0xb8, 0x00, 0x00, 0x1b, 0x81, 0x06, 0x46, 0x52, 0x05, 0xfb, 0xa8, 0x40, + 0x50, 0xb6, 0x60, 0x01, 0x1b, 0x41, 0x49, 0x3a, 0x9c, 0xf9, 0xa8, 0x00, + 0x4b, 0x16, 0x23, 0x53, 0x09, 0x40, 0x44, 0x73, 0x20, 0x64, 0x09, 0x00, + 0x05, 0xf0, 0x06, 0x06, 0x4b, 0x09, 0xa1, 0x65, 0x09, 0x40, 0x45, 0x12, + 0x0b, 0x6e, 0x09, 0x00, 0xa6, 0x2e, 0x44, 0xcf, 0x2a, 0x6f, 0x09, 0x00, + 0x43, 0x0e, 0x0b, 0x67, 0x09, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0x43, + 0x1e, 0x66, 0x09, 0x40, 0x44, 0x25, 0x01, 0x69, 0x09, 0x00, 0x42, 0x15, + 0x02, 0x68, 0x09, 0x40, 0x44, 0xc9, 0x1d, 0x6d, 0x09, 0x00, 0x42, 0x01, + 0x26, 0x6c, 0x09, 0x40, 0x43, 0xd2, 0x05, 0x6b, 0x09, 0x00, 0x43, 0xf6, + 0x06, 0x6a, 0x09, 0x40, 0x50, 0xdd, 0x57, 0x70, 0x09, 0x00, 0x4b, 0xfc, + 0x8b, 0x54, 0x09, 0x40, 0x4c, 0x33, 0x8d, 0x0b, 0x26, 0x00, 0x02, 0x33, + 0x00, 0x11, 0x05, 0xe5, 0xe7, 0x01, 0xff, 0x48, 0x9c, 0x4b, 0xa5, 0xf5, + 0x01, 0x46, 0x3c, 0xe1, 0xd4, 0xf5, 0x41, 0x03, 0x68, 0x09, 0x0b, 0xf4, + 0xdc, 0xf3, 0xc1, 0x00, 0x47, 0x34, 0xcd, 0xdd, 0xf3, 0x41, 0x0f, 0xe4, + 0x05, 0xdd, 0x01, 0x0d, 0x76, 0x08, 0x01, 0xff, 0x42, 0xed, 0x10, 0x34, + 0x04, 0x01, 0x43, 0x8d, 0xb6, 0x3a, 0x04, 0x01, 0x44, 0x41, 0x4b, 0x3d, + 0x04, 0x01, 0x43, 0x46, 0x81, 0x3c, 0x04, 0x01, 0xa5, 0x91, 0x01, 0x43, + 0x44, 0x9c, 0x40, 0x04, 0x01, 0xe8, 0x38, 0x04, 0x01, 0x43, 0x3e, 0x38, + 0x3e, 0x04, 0x01, 0x43, 0x11, 0x7f, 0x3f, 0x04, 0x01, 0x05, 0xd7, 0x02, + 0x5d, 0xaf, 0x53, 0x43, 0x70, 0x7c, 0x39, 0x04, 0x01, 0x06, 0x33, 0x07, + 0x2f, 0xb4, 0x21, 0x43, 0xfd, 0x06, 0x42, 0x04, 0x01, 0x42, 0x7c, 0x31, + 0x36, 0x04, 0x01, 0x43, 0xcd, 0xa9, 0x37, 0x04, 0x01, 0xba, 0x01, 0xff, + 0x42, 0x27, 0x01, 0x46, 0x04, 0x01, 0x43, 0x2c, 0x13, 0x48, 0x04, 0x41, + 0x42, 0x27, 0x01, 0x3b, 0x04, 0x01, 0x43, 0x2c, 0x13, 0x44, 0x04, 0x41, + 0xe1, 0x30, 0x04, 0x81, 0x11, 0xe5, 0x2f, 0x04, 0x01, 0xe9, 0x2e, 0x04, + 0x01, 0xef, 0x32, 0x04, 0xc1, 0x00, 0xef, 0x33, 0x04, 0x41, 0xe8, 0x31, + 0x04, 0x41, 0xe9, 0x4e, 0x04, 0x01, 0xf7, 0x35, 0x04, 0x41, 0xe1, 0x2a, + 0x04, 0x81, 0x11, 0xe5, 0x29, 0x04, 0x01, 0xe9, 0x28, 0x04, 0x01, 0xef, + 0x2c, 0x04, 0xc1, 0x00, 0xef, 0x2d, 0x04, 0x41, 0xe8, 0x2b, 0x04, 0x41, + 0xe6, 0x41, 0x04, 0x01, 0xec, 0x4a, 0x04, 0x01, 0xed, 0x4b, 0x04, 0x01, + 0xee, 0x4c, 0x04, 0x81, 0x17, 0xf2, 0x49, 0x04, 0x01, 0xf3, 0x45, 0x04, + 0x81, 0x0a, 0x42, 0x53, 0x00, 0x43, 0x04, 0x01, 0xf7, 0x4f, 0x04, 0x41, + 0xe8, 0x47, 0x04, 0x41, 0xe7, 0x4d, 0x04, 0x41, 0x42, 0xed, 0x10, 0x0c, + 0x04, 0x01, 0x43, 0x8d, 0xb6, 0x12, 0x04, 0x01, 0x44, 0x41, 0x4b, 0x15, + 0x04, 0x01, 0x43, 0x46, 0x81, 0x14, 0x04, 0x01, 0xa5, 0x91, 0x01, 0x43, + 0x44, 0x9c, 0x18, 0x04, 0x01, 0xe8, 0x10, 0x04, 0x01, 0x43, 0x3e, 0x38, + 0x16, 0x04, 0x01, 0x43, 0x11, 0x7f, 0x17, 0x04, 0x01, 0x05, 0xd7, 0x02, + 0x5d, 0xaf, 0x53, 0x43, 0x70, 0x7c, 0x11, 0x04, 0x01, 0x06, 0x33, 0x07, + 0x2f, 0xb4, 0x21, 0x43, 0xfd, 0x06, 0x1a, 0x04, 0x01, 0x42, 0x7c, 0x31, + 0x0e, 0x04, 0x01, 0x43, 0xcd, 0xa9, 0x0f, 0x04, 0x01, 0xba, 0x01, 0xff, + 0x42, 0x27, 0x01, 0x1e, 0x04, 0x01, 0x43, 0x2c, 0x13, 0x20, 0x04, 0x41, + 0x42, 0x27, 0x01, 0x13, 0x04, 0x01, 0x43, 0x2c, 0x13, 0x1c, 0x04, 0x41, + 0xe1, 0x08, 0x04, 0x81, 0x11, 0xe5, 0x07, 0x04, 0x01, 0xe9, 0x06, 0x04, + 0x01, 0xef, 0x0a, 0x04, 0xc1, 0x00, 0xef, 0x0b, 0x04, 0x41, 0xe8, 0x09, + 0x04, 0x41, 0xe9, 0x26, 0x04, 0x01, 0xf7, 0x0d, 0x04, 0x41, 0xe1, 0x02, + 0x04, 0x81, 0x11, 0xe5, 0x01, 0x04, 0x01, 0xe9, 0x00, 0x04, 0x01, 0xef, + 0x04, 0x04, 0xc1, 0x00, 0xef, 0x05, 0x04, 0x41, 0xe8, 0x03, 0x04, 0x41, + 0xe6, 0x19, 0x04, 0x01, 0xec, 0x22, 0x04, 0x01, 0xed, 0x23, 0x04, 0x01, + 0xee, 0x24, 0x04, 0x81, 0x17, 0xf2, 0x21, 0x04, 0x01, 0xf3, 0x1d, 0x04, + 0x81, 0x0a, 0x42, 0x53, 0x00, 0x1b, 0x04, 0x01, 0xf7, 0x27, 0x04, 0x41, + 0xe8, 0x1f, 0x04, 0x41, 0xe7, 0x25, 0x04, 0x41, 0x03, 0x41, 0x04, 0x81, + 0x01, 0x14, 0x2c, 0x46, 0x01, 0xff, 0x53, 0x0c, 0x49, 0xc9, 0x23, 0x80, + 0x5e, 0x51, 0xb3, 0x5e, 0xca, 0x23, 0x80, 0x40, 0x09, 0x32, 0x00, 0x01, + 0xff, 0x04, 0x1a, 0x00, 0x11, 0x05, 0x51, 0x00, 0x01, 0xff, 0x46, 0x12, + 0x03, 0xc0, 0x23, 0x00, 0x48, 0x01, 0x02, 0xc3, 0x23, 0x40, 0x07, 0x9b, + 0x0d, 0x16, 0x04, 0x1e, 0x00, 0x06, 0x44, 0x82, 0x57, 0xc6, 0x23, 0x40, + 0x44, 0xc3, 0x00, 0xcb, 0x23, 0x00, 0x45, 0xc8, 0x00, 0xbe, 0x23, 0x40, + 0x44, 0xc3, 0x00, 0xcc, 0x23, 0x00, 0x45, 0xc8, 0x00, 0xbf, 0x23, 0x40, + 0x06, 0x50, 0x00, 0x01, 0xff, 0x46, 0x12, 0x03, 0xc2, 0x23, 0x00, 0x48, + 0x01, 0x02, 0xc5, 0x23, 0x00, 0x44, 0x82, 0x57, 0xc8, 0x23, 0x40, 0x06, + 0x50, 0x00, 0x01, 0xff, 0x46, 0x12, 0x03, 0xc1, 0x23, 0x00, 0x48, 0x01, + 0x02, 0xc4, 0x23, 0x00, 0x44, 0x82, 0x57, 0xc7, 0x23, 0x40, 0x4f, 0x1f, + 0x6e, 0x45, 0xcc, 0x01, 0x4d, 0x2f, 0x8a, 0x44, 0xcc, 0x41, 0x43, 0x1c, + 0x31, 0x7f, 0x00, 0x00, 0x4b, 0xc5, 0x9d, 0x9a, 0xf6, 0x01, 0x4b, 0x24, + 0xa3, 0x5c, 0x22, 0x40, 0x47, 0xdb, 0xcf, 0x03, 0x21, 0x00, 0x4a, 0x47, + 0xaa, 0x09, 0x21, 0x00, 0x44, 0x5a, 0x03, 0xb0, 0x00, 0x40, 0xa9, 0x06, + 0x56, 0x97, 0x36, 0xdb, 0xf5, 0x41, 0x4a, 0x6b, 0xa9, 0x33, 0xf3, 0x01, + 0x04, 0xd7, 0x0f, 0x01, 0xff, 0x4f, 0x02, 0x6d, 0xe8, 0x23, 0x00, 0x54, + 0xc8, 0x45, 0x96, 0x23, 0x40, 0x44, 0xd8, 0xda, 0x20, 0x20, 0x80, 0x53, + 0x4a, 0xe5, 0xac, 0x38, 0x21, 0x00, 0xae, 0x3f, 0x04, 0xa2, 0x44, 0x2f, + 0x02, 0xa4, 0x02, 0x06, 0x4e, 0xe7, 0x6a, 0x10, 0x00, 0x40, 0x80, 0x17, + 0x03, 0x05, 0x00, 0x01, 0xff, 0x48, 0x75, 0x8a, 0x4d, 0xfe, 0x00, 0x48, + 0x82, 0x8a, 0x49, 0xfe, 0x00, 0x60, 0x93, 0x06, 0x9f, 0x27, 0x40, 0x46, + 0x16, 0x08, 0xa8, 0xf4, 0x01, 0x50, 0xd6, 0x68, 0x43, 0x2e, 0x40, 0x44, + 0x4c, 0x04, 0x93, 0x25, 0x00, 0x49, 0x53, 0xc0, 0x76, 0xf5, 0x41, 0x43, + 0x17, 0x20, 0x83, 0xf4, 0x01, 0x42, 0x06, 0x14, 0x61, 0xf3, 0x41, 0x80, + 0x01, 0xff, 0x45, 0xba, 0xa5, 0xe1, 0xf5, 0x01, 0x05, 0x51, 0x00, 0x01, + 0xff, 0x4a, 0x9f, 0xac, 0x36, 0x2e, 0x00, 0x4b, 0xf0, 0xa1, 0x37, 0x2e, + 0x40, 0xa1, 0x8a, 0xaf, 0x01, 0xa5, 0xc4, 0xae, 0x01, 0xa8, 0xa9, 0x9d, + 0x01, 0xa9, 0xf6, 0x8d, 0x01, 0x03, 0x12, 0x33, 0xbe, 0x85, 0x01, 0xac, + 0xc0, 0x81, 0x01, 0xaf, 0x84, 0x5c, 0xb2, 0xcb, 0x5a, 0xb5, 0xaf, 0x1b, + 0xb9, 0x01, 0xff, 0x45, 0x56, 0xe5, 0x00, 0xf3, 0x01, 0x4a, 0x21, 0xad, + 0x2d, 0x23, 0x00, 0x02, 0xdf, 0x0c, 0xe0, 0x15, 0x07, 0xf9, 0xcc, 0x01, + 0xff, 0x09, 0xe4, 0x05, 0xf2, 0x0b, 0x46, 0xed, 0x4f, 0x7e, 0xa6, 0x00, + 0x07, 0xec, 0x05, 0xd5, 0x0b, 0x47, 0x96, 0xd4, 0x7f, 0xa6, 0x00, 0xb3, + 0x06, 0x4e, 0xfb, 0x7c, 0x82, 0x04, 0x40, 0x06, 0x77, 0x08, 0x99, 0x01, + 0x16, 0xb5, 0x37, 0x01, 0xff, 0xe1, 0x51, 0xe0, 0x01, 0xa2, 0x83, 0x01, + 0x43, 0x6d, 0x14, 0x63, 0xe0, 0x01, 0xa4, 0x6a, 0xa5, 0x5c, 0x43, 0x26, + 0x52, 0x54, 0xe0, 0x81, 0x4f, 0x42, 0x22, 0x00, 0x61, 0xe0, 0x81, 0x42, + 0xe9, 0x59, 0xe0, 0x81, 0x39, 0x42, 0x1b, 0x02, 0x5a, 0xe0, 0x01, 0xef, + 0x5c, 0xe0, 0x01, 0x42, 0x6f, 0x02, 0x5d, 0xe0, 0x01, 0x43, 0xa4, 0x02, + 0x64, 0xe0, 0x01, 0x43, 0xd5, 0x5d, 0x62, 0xe0, 0x01, 0xf5, 0x5f, 0xe0, + 0x01, 0x42, 0x32, 0x00, 0x53, 0xe0, 0x01, 0x44, 0x08, 0xd7, 0x66, 0xe0, + 0x01, 0xba, 0x01, 0xff, 0xe5, 0x58, 0xe0, 0x01, 0x42, 0xb0, 0x01, 0x57, + 0xe0, 0x41, 0xe5, 0x56, 0xe0, 0x41, 0x47, 0xfc, 0x92, 0x65, 0xe0, 0x41, + 0x4c, 0xa7, 0x8b, 0x67, 0xe0, 0x41, 0xe6, 0x60, 0xe0, 0x01, 0xec, 0x5b, + 0xe0, 0x01, 0xf3, 0x5e, 0xe0, 0x41, 0xe5, 0x55, 0xe0, 0x01, 0xba, 0x01, + 0xff, 0xe5, 0x69, 0xe0, 0x01, 0x42, 0xb0, 0x01, 0x6a, 0xe0, 0x41, 0xe5, + 0x52, 0xe0, 0x01, 0x57, 0x84, 0x08, 0x68, 0xe0, 0x41, 0x06, 0xed, 0x05, + 0x17, 0x08, 0x9d, 0x1f, 0x01, 0xff, 0x44, 0xd5, 0xee, 0xd5, 0x04, 0x00, + 0x46, 0x48, 0xdb, 0xa5, 0x04, 0x00, 0x46, 0x76, 0xe0, 0xb5, 0x04, 0x40, + 0xe1, 0x30, 0x04, 0x80, 0xd5, 0x09, 0xa2, 0x99, 0x09, 0xa3, 0xe4, 0x08, + 0xa4, 0x8f, 0x08, 0xe5, 0x4d, 0x04, 0x80, 0x94, 0x07, 0x44, 0xd1, 0xef, + 0x73, 0x04, 0x00, 0xa7, 0xda, 0x06, 0xa8, 0xb0, 0x06, 0xe9, 0x38, 0x04, + 0x80, 0xc0, 0x05, 0x42, 0x80, 0x20, 0x58, 0x04, 0x00, 0xab, 0xc7, 0x04, + 0xac, 0xac, 0x04, 0x04, 0xbe, 0x18, 0x9b, 0x04, 0xae, 0x86, 0x04, 0xef, + 0x3e, 0x04, 0x80, 0xe9, 0x03, 0xb0, 0xc4, 0x03, 0x42, 0x43, 0x14, 0x1b, + 0x05, 0x00, 0xb2, 0x88, 0x03, 0xb3, 0x99, 0x02, 0xb4, 0xba, 0x01, 0xf5, + 0x43, 0x04, 0x80, 0x8b, 0x01, 0x42, 0x32, 0x00, 0x32, 0x04, 0x00, 0xb7, + 0x79, 0xb9, 0x46, 0xba, 0x01, 0xff, 0xe5, 0x37, 0x04, 0x80, 0x28, 0xa8, + 0x01, 0xff, 0xe5, 0x36, 0x04, 0x80, 0x06, 0x42, 0x15, 0x01, 0x85, 0xa6, + 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x45, 0x53, 0x23, 0xc2, 0x04, 0x00, + 0xa4, 0x01, 0xff, 0x48, 0x1e, 0x2b, 0x97, 0x04, 0x00, 0x48, 0xb8, 0x23, + 0xdd, 0x04, 0x40, 0x07, 0x82, 0x07, 0x06, 0x44, 0x39, 0xf1, 0x41, 0xa6, + 0x40, 0x48, 0x1e, 0x2b, 0x99, 0x04, 0x00, 0x48, 0xb8, 0x23, 0xdf, 0x04, + 0x40, 0xe1, 0x4f, 0x04, 0x80, 0x24, 0x43, 0x9c, 0x2b, 0x4b, 0x04, 0x80, + 0x0c, 0xe9, 0x57, 0x04, 0x00, 0xee, 0x5f, 0xa6, 0x00, 0xf5, 0x4e, 0x04, + 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x48, 0x83, 0x75, 0x51, 0xa6, 0x00, + 0x49, 0xb7, 0x23, 0xf9, 0x04, 0x40, 0xe5, 0x19, 0x05, 0x00, 0xf4, 0x63, + 0x04, 0x40, 0xe5, 0x1d, 0x05, 0x00, 0x46, 0xc2, 0xdc, 0x83, 0x1c, 0x40, + 0x06, 0x50, 0x00, 0x11, 0xeb, 0x79, 0x04, 0x80, 0x06, 0x4b, 0xe0, 0x9f, + 0x88, 0x1c, 0x40, 0x4a, 0x08, 0x9e, 0x54, 0x04, 0x40, 0xa4, 0x06, 0x46, + 0xad, 0x70, 0xef, 0x04, 0x40, 0x48, 0xb8, 0x23, 0xf1, 0x04, 0x00, 0x4b, + 0xfe, 0xa0, 0xf3, 0x04, 0x40, 0x04, 0x5f, 0x07, 0x46, 0x43, 0x6d, 0x14, + 0x93, 0xa6, 0x00, 0xe5, 0x42, 0x04, 0x80, 0x2a, 0x4e, 0x55, 0x78, 0x85, + 0x1c, 0x00, 0x42, 0x80, 0x20, 0x8a, 0x1c, 0x00, 0xb3, 0x06, 0x42, 0x15, + 0x01, 0x8d, 0xa6, 0x40, 0xe5, 0x46, 0x04, 0x00, 0x42, 0xb0, 0x01, 0x5b, + 0x04, 0x00, 0x42, 0x46, 0x03, 0x91, 0xa6, 0x00, 0x42, 0x15, 0x01, 0x8f, + 0xa6, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x49, 0x1d, 0x2b, 0xad, 0x04, + 0x00, 0x4b, 0x93, 0x9f, 0x8b, 0xa6, 0x40, 0x49, 0x81, 0xb9, 0x86, 0x1c, + 0x00, 0x42, 0x77, 0x00, 0x84, 0x1c, 0x00, 0x43, 0x9d, 0x32, 0x87, 0x1c, + 0x40, 0x44, 0xb5, 0x7b, 0xd9, 0x04, 0x80, 0x5f, 0x4c, 0x83, 0x8e, 0x8d, + 0x04, 0x00, 0xa8, 0x27, 0x04, 0x03, 0x71, 0x0d, 0x49, 0xf0, 0xbf, 0xaf, + 0x04, 0xc0, 0x00, 0x4c, 0xda, 0x28, 0xb1, 0x04, 0x40, 0x42, 0x04, 0x00, + 0x63, 0xa6, 0x00, 0xa5, 0x06, 0x44, 0x5a, 0x03, 0x4c, 0x04, 0x40, 0xec, + 0x65, 0xa6, 0x00, 0xed, 0x67, 0xa6, 0x40, 0xe1, 0x48, 0x04, 0x00, 0x43, + 0x91, 0x20, 0x49, 0x04, 0x00, 0x42, 0x22, 0x00, 0xbb, 0x04, 0x80, 0x19, + 0x04, 0x35, 0x07, 0x06, 0x42, 0x15, 0x01, 0x97, 0xa6, 0x40, 0xe9, 0x39, + 0x04, 0x80, 0x04, 0xf5, 0x5e, 0x04, 0x40, 0x4a, 0x9b, 0xa6, 0x8b, 0x04, + 0x40, 0x4f, 0xe7, 0x69, 0x27, 0x05, 0x40, 0x4f, 0xf6, 0x69, 0xdb, 0x04, + 0x40, 0x08, 0xde, 0x14, 0x17, 0x42, 0x22, 0x00, 0x17, 0x05, 0x00, 0x04, + 0x41, 0x0b, 0x01, 0xff, 0x46, 0x37, 0xaf, 0x7b, 0x04, 0x00, 0x45, 0x29, + 0x17, 0x80, 0x1c, 0x40, 0x43, 0x28, 0xf4, 0x45, 0xa6, 0x00, 0x43, 0xd5, + 0x5d, 0x61, 0xa6, 0x00, 0x42, 0x2a, 0x4e, 0x55, 0xa6, 0x00, 0x42, 0x4b, + 0x0a, 0x11, 0x05, 0x40, 0x47, 0xc9, 0xc9, 0xcf, 0x04, 0x00, 0xe5, 0x3f, + 0x04, 0x80, 0x06, 0x42, 0x5a, 0x03, 0x71, 0x04, 0x40, 0x06, 0x50, 0x00, + 0x01, 0xff, 0x49, 0x1d, 0x2b, 0x25, 0x05, 0x00, 0x4b, 0x93, 0x9f, 0xa7, + 0x04, 0x40, 0x4f, 0xf6, 0x69, 0xe7, 0x04, 0x00, 0x44, 0xcc, 0x7b, 0x61, + 0x04, 0x80, 0x04, 0xf4, 0x7f, 0x04, 0x40, 0x4b, 0x3a, 0x98, 0x7d, 0x04, + 0x40, 0x47, 0xe5, 0x03, 0x82, 0x1c, 0x00, 0x4a, 0x29, 0xaa, 0x4f, 0xa6, + 0x00, 0x42, 0x80, 0x20, 0x5a, 0x04, 0x40, 0x47, 0x3f, 0x86, 0x69, 0xa6, + 0x00, 0x48, 0x23, 0x92, 0x4b, 0xa6, 0x40, 0x42, 0x22, 0x00, 0x15, 0x05, + 0x00, 0x49, 0x38, 0x59, 0x67, 0x04, 0x00, 0x42, 0x80, 0x20, 0x59, 0x04, + 0x00, 0x4d, 0xfc, 0x86, 0x81, 0x1c, 0x40, 0xe1, 0x3a, 0x04, 0x80, 0x4e, + 0x4d, 0x88, 0x83, 0xcc, 0x04, 0x00, 0x42, 0x80, 0x20, 0x5c, 0x04, 0x00, + 0xaf, 0x06, 0x42, 0x5a, 0x03, 0x6f, 0x04, 0x40, 0x03, 0xb6, 0xd1, 0x06, + 0x43, 0xad, 0x80, 0x81, 0x04, 0x40, 0xa4, 0x1e, 0x43, 0x7f, 0x20, 0x09, + 0x05, 0x00, 0x43, 0xb2, 0x84, 0x0b, 0x05, 0x00, 0x43, 0xda, 0x9d, 0x0d, + 0x05, 0x00, 0x43, 0xa0, 0xf4, 0x0f, 0x05, 0x00, 0x43, 0xd9, 0xf4, 0x05, + 0x05, 0x40, 0xe5, 0x01, 0x05, 0x00, 0x42, 0x80, 0x20, 0x03, 0x05, 0x00, + 0x43, 0xd9, 0xf4, 0x07, 0x05, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x49, + 0x1d, 0x2b, 0x9b, 0x04, 0x00, 0x44, 0xac, 0x0e, 0xc4, 0x04, 0x00, 0x46, + 0x52, 0x05, 0x9f, 0x04, 0x00, 0x4f, 0x9c, 0x33, 0x9d, 0x04, 0x40, 0x06, + 0x50, 0x00, 0x54, 0xe5, 0x35, 0x04, 0x80, 0x3e, 0xef, 0x51, 0x04, 0x80, + 0x0d, 0x46, 0x90, 0xe1, 0x75, 0x04, 0xc0, 0x00, 0x59, 0x08, 0x23, 0x77, + 0x04, 0x40, 0xb4, 0x01, 0xff, 0xe1, 0x47, 0xa6, 0x00, 0x06, 0xf2, 0x02, + 0x01, 0xff, 0xe1, 0x57, 0xa6, 0x00, 0x47, 0x80, 0xcf, 0x6d, 0x04, 0x00, + 0x51, 0x30, 0x59, 0x5d, 0xa6, 0x00, 0xe5, 0x65, 0x04, 0x00, 0x4a, 0x37, + 0x59, 0x69, 0x04, 0x00, 0x43, 0x9d, 0x32, 0x53, 0xa6, 0x40, 0x06, 0x50, + 0x00, 0x01, 0xff, 0x45, 0x53, 0x23, 0xd7, 0x04, 0x00, 0x45, 0x15, 0x23, + 0x50, 0x04, 0x40, 0x49, 0xb7, 0x23, 0xe5, 0x04, 0x00, 0x45, 0x15, 0x23, + 0x5d, 0x04, 0x00, 0x46, 0xad, 0x70, 0xe3, 0x04, 0x40, 0xe1, 0x45, 0x04, + 0x80, 0x06, 0x42, 0x15, 0x01, 0x95, 0xa6, 0x40, 0x06, 0x50, 0x00, 0x06, + 0x47, 0xfc, 0x92, 0x4a, 0x04, 0x40, 0x49, 0x1d, 0x2b, 0xb3, 0x04, 0x00, + 0x44, 0xac, 0x0e, 0xfd, 0x04, 0x00, 0x46, 0x52, 0x05, 0xff, 0x04, 0x40, + 0x42, 0xb0, 0x01, 0x33, 0x04, 0x80, 0x06, 0x42, 0x80, 0x20, 0x53, 0x04, + 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x49, 0x1d, 0x2b, 0xf7, 0x04, 0x00, + 0x4b, 0x93, 0x9f, 0x95, 0x04, 0x00, 0x46, 0x52, 0x05, 0x93, 0x04, 0x80, + 0x06, 0x46, 0xe0, 0x68, 0x91, 0x04, 0x40, 0x49, 0xc0, 0x23, 0xfb, 0x04, + 0x40, 0x4f, 0xf6, 0x69, 0xed, 0x04, 0x00, 0xe6, 0x44, 0x04, 0x00, 0xec, + 0x3b, 0x04, 0x80, 0x49, 0xed, 0x3c, 0x04, 0x80, 0x3e, 0xee, 0x3d, 0x04, + 0x80, 0x16, 0xf2, 0x40, 0x04, 0x80, 0x0b, 0xf3, 0x41, 0x04, 0xc0, 0x00, + 0x4f, 0xe7, 0x69, 0xab, 0x04, 0x40, 0x4a, 0xa5, 0xa6, 0x8f, 0x04, 0x40, + 0x06, 0x50, 0x00, 0x01, 0xff, 0x49, 0x1d, 0x2b, 0xa3, 0x04, 0x00, 0x44, + 0xac, 0x0e, 0xc8, 0x04, 0x00, 0x49, 0xb1, 0x57, 0x29, 0x05, 0x00, 0x4b, + 0x93, 0x9f, 0x23, 0x05, 0x00, 0x44, 0x8f, 0x17, 0xca, 0x04, 0x40, 0x4a, + 0x9b, 0xa6, 0xce, 0x04, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x49, 0x1d, + 0x2b, 0x2f, 0x05, 0x00, 0x44, 0xac, 0x0e, 0x13, 0x05, 0x00, 0x4b, 0x93, + 0x9f, 0x21, 0x05, 0x00, 0x44, 0x8f, 0x17, 0xc6, 0x04, 0x40, 0x43, 0x6d, + 0x14, 0x2d, 0x05, 0x00, 0xe5, 0x34, 0x04, 0x00, 0x42, 0x80, 0x20, 0x52, + 0x04, 0x80, 0x3b, 0x06, 0x3c, 0x01, 0x2d, 0x42, 0x15, 0x01, 0x81, 0xa6, + 0x00, 0xba, 0x01, 0xff, 0xe5, 0x55, 0x04, 0x80, 0x19, 0x42, 0xb0, 0x01, + 0x5f, 0x04, 0x00, 0x42, 0x15, 0x01, 0x83, 0xa6, 0x00, 0xba, 0x01, 0xff, + 0xe5, 0x89, 0xa6, 0x00, 0x42, 0xb0, 0x01, 0x2b, 0x05, 0x40, 0x42, 0x13, + 0x01, 0x43, 0xa6, 0x40, 0x4b, 0xa9, 0x9f, 0x6d, 0xa6, 0x00, 0xef, 0x99, + 0xa6, 0x40, 0x42, 0x78, 0x0f, 0x49, 0xa6, 0x40, 0x43, 0x6d, 0x14, 0x87, + 0xa6, 0x00, 0x42, 0xb0, 0x01, 0x47, 0x04, 0x80, 0x0c, 0x50, 0x31, 0x59, + 0x59, 0xa6, 0x00, 0x48, 0x80, 0xca, 0x9b, 0xa6, 0x40, 0x06, 0x50, 0x00, + 0x01, 0xff, 0xa4, 0x06, 0x4f, 0x9c, 0x33, 0xb9, 0x04, 0x40, 0x48, 0x1e, + 0x2b, 0xb7, 0x04, 0x00, 0x48, 0xb8, 0x23, 0xf5, 0x04, 0x40, 0xa1, 0x24, + 0xe5, 0x31, 0x04, 0x00, 0xa9, 0x12, 0x4a, 0xdb, 0xac, 0x5b, 0xa6, 0x00, + 0x4a, 0x7d, 0xb0, 0x4d, 0xa6, 0x00, 0x57, 0x84, 0x08, 0x56, 0x04, 0x40, + 0x45, 0x82, 0xcf, 0x6b, 0x04, 0x00, 0x49, 0xab, 0x9f, 0x6b, 0xa6, 0x40, + 0x46, 0x0a, 0xcf, 0xe9, 0x04, 0x80, 0x06, 0x48, 0xd0, 0xca, 0xa1, 0x04, + 0x40, 0x4f, 0xf6, 0x69, 0xeb, 0x04, 0x40, 0x06, 0x50, 0x00, 0x23, 0x09, + 0xba, 0xb6, 0x06, 0x47, 0xd6, 0xd2, 0x1f, 0x05, 0x40, 0x43, 0x6d, 0x14, + 0xbd, 0x04, 0x80, 0x0c, 0x43, 0x28, 0xf4, 0xe1, 0x04, 0x00, 0x42, 0x22, + 0x00, 0xa9, 0x04, 0x40, 0x4f, 0xe7, 0x69, 0xbf, 0x04, 0x40, 0x45, 0x53, + 0x23, 0xd1, 0x04, 0x00, 0x49, 0xb7, 0x23, 0xd3, 0x04, 0x40, 0x4d, 0x39, + 0x86, 0x6e, 0xa6, 0x00, 0x48, 0xc8, 0xc9, 0xc0, 0x04, 0x00, 0x50, 0x46, + 0x67, 0x2b, 0x1d, 0x40, 0x06, 0xed, 0x05, 0x17, 0x08, 0x9d, 0x1f, 0x01, + 0xff, 0x44, 0xd5, 0xee, 0xd4, 0x04, 0x00, 0x46, 0x48, 0xdb, 0xa4, 0x04, + 0x00, 0x46, 0x76, 0xe0, 0xb4, 0x04, 0x40, 0xe1, 0x10, 0x04, 0x80, 0x90, + 0x09, 0xa2, 0xd4, 0x08, 0xa3, 0x9f, 0x08, 0xa4, 0xca, 0x07, 0xe5, 0x2d, + 0x04, 0x80, 0xcf, 0x06, 0x44, 0xd1, 0xef, 0x72, 0x04, 0x00, 0xa7, 0x95, + 0x06, 0xa8, 0xeb, 0x05, 0xe9, 0x18, 0x04, 0x80, 0xfb, 0x04, 0x42, 0x80, + 0x20, 0x08, 0x04, 0x00, 0xab, 0x82, 0x04, 0xac, 0xed, 0x03, 0x04, 0xbe, + 0x18, 0xdc, 0x03, 0xae, 0xcd, 0x03, 0xef, 0x1e, 0x04, 0x80, 0xb0, 0x03, + 0xb0, 0x91, 0x03, 0x42, 0x43, 0x14, 0x1a, 0x05, 0x00, 0xb2, 0xe0, 0x02, + 0xb3, 0xf1, 0x01, 0xb4, 0xae, 0x01, 0xf5, 0x23, 0x04, 0x80, 0x85, 0x01, + 0x42, 0x32, 0x00, 0x12, 0x04, 0x00, 0x42, 0x15, 0x01, 0x1c, 0x05, 0x00, + 0xb9, 0x46, 0xba, 0x01, 0xff, 0xe5, 0x17, 0x04, 0x80, 0x28, 0xa8, 0x01, + 0xff, 0xe5, 0x16, 0x04, 0x80, 0x06, 0x42, 0x15, 0x01, 0x84, 0xa6, 0x40, + 0x06, 0x50, 0x00, 0x01, 0xff, 0x45, 0x53, 0x23, 0xc1, 0x04, 0x00, 0xa4, + 0x01, 0xff, 0x48, 0x1e, 0x2b, 0x96, 0x04, 0x00, 0x48, 0xb8, 0x23, 0xdc, + 0x04, 0x40, 0x07, 0x82, 0x07, 0x06, 0x44, 0x39, 0xf1, 0x40, 0xa6, 0x40, + 0x48, 0x1e, 0x2b, 0x98, 0x04, 0x00, 0x48, 0xb8, 0x23, 0xde, 0x04, 0x40, + 0xe1, 0x2f, 0x04, 0x80, 0x24, 0x43, 0x9c, 0x2b, 0x2b, 0x04, 0x80, 0x0c, + 0xe9, 0x07, 0x04, 0x00, 0xee, 0x5e, 0xa6, 0x00, 0xf5, 0x2e, 0x04, 0x40, + 0x06, 0x50, 0x00, 0x01, 0xff, 0x48, 0x83, 0x75, 0x50, 0xa6, 0x00, 0x49, + 0xb7, 0x23, 0xf8, 0x04, 0x40, 0xe5, 0x18, 0x05, 0x00, 0xf4, 0x62, 0x04, + 0x40, 0x06, 0x50, 0x00, 0x0b, 0xeb, 0x78, 0x04, 0xc0, 0x00, 0x4a, 0x08, + 0x9e, 0x04, 0x04, 0x40, 0xa4, 0x06, 0x46, 0xad, 0x70, 0xee, 0x04, 0x40, + 0x48, 0xb8, 0x23, 0xf0, 0x04, 0x00, 0x4b, 0xfe, 0xa0, 0xf2, 0x04, 0x40, + 0x43, 0x6d, 0x14, 0x92, 0xa6, 0x00, 0xe5, 0x22, 0x04, 0x80, 0x24, 0x42, + 0x80, 0x20, 0x89, 0x1c, 0x00, 0xb3, 0x06, 0x42, 0x15, 0x01, 0x8c, 0xa6, + 0x40, 0xe5, 0x26, 0x04, 0x00, 0x42, 0xb0, 0x01, 0x0b, 0x04, 0x00, 0x42, + 0x46, 0x03, 0x90, 0xa6, 0x00, 0x42, 0x15, 0x01, 0x8e, 0xa6, 0x40, 0x06, + 0x50, 0x00, 0x01, 0xff, 0x49, 0x1d, 0x2b, 0xac, 0x04, 0x00, 0x4b, 0x93, + 0x9f, 0x8a, 0xa6, 0x40, 0x44, 0xb5, 0x7b, 0xd8, 0x04, 0x80, 0x5f, 0x4c, + 0x83, 0x8e, 0x8c, 0x04, 0x00, 0xa8, 0x27, 0x04, 0x03, 0x71, 0x0d, 0x49, + 0xf0, 0xbf, 0xae, 0x04, 0xc0, 0x00, 0x4c, 0xda, 0x28, 0xb0, 0x04, 0x40, + 0x42, 0x04, 0x00, 0x62, 0xa6, 0x00, 0xa5, 0x06, 0x44, 0x5a, 0x03, 0x2c, + 0x04, 0x40, 0xec, 0x64, 0xa6, 0x00, 0xed, 0x66, 0xa6, 0x40, 0xe1, 0x28, + 0x04, 0x00, 0x43, 0x91, 0x20, 0x29, 0x04, 0x00, 0x42, 0x22, 0x00, 0xba, + 0x04, 0x80, 0x19, 0x04, 0x35, 0x07, 0x06, 0x42, 0x15, 0x01, 0x96, 0xa6, + 0x40, 0xe9, 0x19, 0x04, 0x80, 0x04, 0xf5, 0x0e, 0x04, 0x40, 0x4a, 0x9b, + 0xa6, 0x8a, 0x04, 0x40, 0x4f, 0xe7, 0x69, 0x26, 0x05, 0x40, 0x4f, 0xf6, + 0x69, 0xda, 0x04, 0x40, 0x08, 0xde, 0x14, 0x0c, 0x42, 0x22, 0x00, 0x16, + 0x05, 0x00, 0x4a, 0x33, 0xaf, 0x7a, 0x04, 0x40, 0x43, 0x28, 0xf4, 0x44, + 0xa6, 0x00, 0x43, 0xd5, 0x5d, 0x60, 0xa6, 0x00, 0x42, 0x2a, 0x4e, 0x54, + 0xa6, 0x00, 0x42, 0x4b, 0x0a, 0x10, 0x05, 0x40, 0xe5, 0x1f, 0x04, 0x80, + 0x06, 0x42, 0x5a, 0x03, 0x70, 0x04, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, + 0x49, 0x1d, 0x2b, 0x24, 0x05, 0x00, 0x4b, 0x93, 0x9f, 0xa6, 0x04, 0x40, + 0x4f, 0xf6, 0x69, 0xe6, 0x04, 0x00, 0x44, 0xcc, 0x7b, 0x60, 0x04, 0x80, + 0x04, 0xf4, 0x7e, 0x04, 0x40, 0x4b, 0x3a, 0x98, 0x7c, 0x04, 0x40, 0x4a, + 0x29, 0xaa, 0x4e, 0xa6, 0x00, 0x42, 0x80, 0x20, 0x0a, 0x04, 0x40, 0x47, + 0x3f, 0x86, 0x68, 0xa6, 0x00, 0x48, 0x23, 0x92, 0x4a, 0xa6, 0x40, 0x42, + 0x22, 0x00, 0x14, 0x05, 0x00, 0x49, 0x38, 0x59, 0x66, 0x04, 0x00, 0x42, + 0x80, 0x20, 0x09, 0x04, 0x40, 0xe1, 0x1a, 0x04, 0x80, 0x4e, 0x4d, 0x88, + 0x83, 0xcb, 0x04, 0x00, 0x42, 0x80, 0x20, 0x0c, 0x04, 0x00, 0xaf, 0x06, + 0x42, 0x5a, 0x03, 0x6e, 0x04, 0x40, 0x03, 0xb6, 0xd1, 0x06, 0x43, 0xad, + 0x80, 0x80, 0x04, 0x40, 0xa4, 0x1e, 0x43, 0x7f, 0x20, 0x08, 0x05, 0x00, + 0x43, 0xb2, 0x84, 0x0a, 0x05, 0x00, 0x43, 0xda, 0x9d, 0x0c, 0x05, 0x00, + 0x43, 0xa0, 0xf4, 0x0e, 0x05, 0x00, 0x43, 0xd9, 0xf4, 0x04, 0x05, 0x40, + 0xe5, 0x00, 0x05, 0x00, 0x42, 0x80, 0x20, 0x02, 0x05, 0x00, 0x43, 0xd9, + 0xf4, 0x06, 0x05, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x49, 0x1d, 0x2b, + 0x9a, 0x04, 0x00, 0x44, 0xac, 0x0e, 0xc3, 0x04, 0x00, 0x46, 0x52, 0x05, + 0x9e, 0x04, 0x00, 0x4f, 0x9c, 0x33, 0x9c, 0x04, 0x40, 0x06, 0x50, 0x00, + 0x54, 0xe5, 0x15, 0x04, 0x80, 0x3e, 0xef, 0x01, 0x04, 0x80, 0x0d, 0x46, + 0x90, 0xe1, 0x74, 0x04, 0xc0, 0x00, 0x59, 0x08, 0x23, 0x76, 0x04, 0x40, + 0xb4, 0x01, 0xff, 0xe1, 0x46, 0xa6, 0x00, 0x06, 0xf2, 0x02, 0x01, 0xff, + 0xe1, 0x56, 0xa6, 0x00, 0x47, 0x80, 0xcf, 0x6c, 0x04, 0x00, 0x51, 0x30, + 0x59, 0x5c, 0xa6, 0x00, 0xe5, 0x64, 0x04, 0x00, 0x4a, 0x37, 0x59, 0x68, + 0x04, 0x00, 0x43, 0x9d, 0x32, 0x52, 0xa6, 0x40, 0x06, 0x50, 0x00, 0x01, + 0xff, 0x45, 0x53, 0x23, 0xd6, 0x04, 0x00, 0x45, 0x15, 0x23, 0x00, 0x04, + 0x40, 0x49, 0xb7, 0x23, 0xe4, 0x04, 0x00, 0x45, 0x15, 0x23, 0x0d, 0x04, + 0x00, 0x46, 0xad, 0x70, 0xe2, 0x04, 0x40, 0xe1, 0x25, 0x04, 0x80, 0x06, + 0x42, 0x15, 0x01, 0x94, 0xa6, 0x40, 0x06, 0x50, 0x00, 0x06, 0x47, 0xfc, + 0x92, 0x2a, 0x04, 0x40, 0x49, 0x1d, 0x2b, 0xb2, 0x04, 0x00, 0x44, 0xac, + 0x0e, 0xfc, 0x04, 0x00, 0x46, 0x52, 0x05, 0xfe, 0x04, 0x40, 0x42, 0xb0, + 0x01, 0x13, 0x04, 0x80, 0x06, 0x42, 0x80, 0x20, 0x03, 0x04, 0x40, 0x06, + 0x50, 0x00, 0x01, 0xff, 0x49, 0x1d, 0x2b, 0xf6, 0x04, 0x00, 0x4b, 0x93, + 0x9f, 0x94, 0x04, 0x00, 0x46, 0x52, 0x05, 0x92, 0x04, 0x80, 0x06, 0x46, + 0xe0, 0x68, 0x90, 0x04, 0x40, 0x49, 0xc0, 0x23, 0xfa, 0x04, 0x40, 0x4f, + 0xf6, 0x69, 0xec, 0x04, 0x00, 0xe6, 0x24, 0x04, 0x00, 0xec, 0x1b, 0x04, + 0x80, 0x49, 0xed, 0x1c, 0x04, 0x80, 0x3e, 0xee, 0x1d, 0x04, 0x80, 0x16, + 0xf2, 0x20, 0x04, 0x80, 0x0b, 0xf3, 0x21, 0x04, 0xc0, 0x00, 0x4f, 0xe7, + 0x69, 0xaa, 0x04, 0x40, 0x4a, 0xa5, 0xa6, 0x8e, 0x04, 0x40, 0x06, 0x50, + 0x00, 0x01, 0xff, 0x49, 0x1d, 0x2b, 0xa2, 0x04, 0x00, 0x44, 0xac, 0x0e, + 0xc7, 0x04, 0x00, 0x49, 0xb1, 0x57, 0x28, 0x05, 0x00, 0x4b, 0x93, 0x9f, + 0x22, 0x05, 0x00, 0x44, 0x8f, 0x17, 0xc9, 0x04, 0x40, 0x4a, 0x9b, 0xa6, + 0xcd, 0x04, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x49, 0x1d, 0x2b, 0x2e, + 0x05, 0x00, 0x44, 0xac, 0x0e, 0x12, 0x05, 0x00, 0x4b, 0x93, 0x9f, 0x20, + 0x05, 0x00, 0x44, 0x8f, 0x17, 0xc5, 0x04, 0x40, 0x43, 0x6d, 0x14, 0x2c, + 0x05, 0x00, 0xe5, 0x14, 0x04, 0x00, 0x42, 0x80, 0x20, 0x02, 0x04, 0x80, + 0x3b, 0x06, 0x3c, 0x01, 0x2d, 0x42, 0x15, 0x01, 0x80, 0xa6, 0x00, 0xba, + 0x01, 0xff, 0xe5, 0x05, 0x04, 0x80, 0x19, 0x42, 0xb0, 0x01, 0x0f, 0x04, + 0x00, 0x42, 0x15, 0x01, 0x82, 0xa6, 0x00, 0xba, 0x01, 0xff, 0xe5, 0x88, + 0xa6, 0x00, 0x42, 0xb0, 0x01, 0x2a, 0x05, 0x40, 0x42, 0x13, 0x01, 0x42, + 0xa6, 0x40, 0x4b, 0xa9, 0x9f, 0x6c, 0xa6, 0x00, 0xef, 0x98, 0xa6, 0x40, + 0x42, 0x78, 0x0f, 0x48, 0xa6, 0x40, 0x43, 0x6d, 0x14, 0x86, 0xa6, 0x00, + 0x42, 0xb0, 0x01, 0x27, 0x04, 0x80, 0x0c, 0x50, 0x31, 0x59, 0x58, 0xa6, + 0x00, 0x48, 0x80, 0xca, 0x9a, 0xa6, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, + 0xa4, 0x06, 0x4f, 0x9c, 0x33, 0xb8, 0x04, 0x40, 0x48, 0x1e, 0x2b, 0xb6, + 0x04, 0x00, 0x48, 0xb8, 0x23, 0xf4, 0x04, 0x40, 0xa1, 0x24, 0xe5, 0x11, + 0x04, 0x00, 0xa9, 0x12, 0x4a, 0xdb, 0xac, 0x5a, 0xa6, 0x00, 0x4a, 0x7d, + 0xb0, 0x4c, 0xa6, 0x00, 0x57, 0x84, 0x08, 0x06, 0x04, 0x40, 0x45, 0x82, + 0xcf, 0x6a, 0x04, 0x00, 0x49, 0xab, 0x9f, 0x6a, 0xa6, 0x40, 0x46, 0x0a, + 0xcf, 0xe8, 0x04, 0x80, 0x06, 0x48, 0xd0, 0xca, 0xa0, 0x04, 0x40, 0x4f, + 0xf6, 0x69, 0xea, 0x04, 0x40, 0x06, 0x50, 0x00, 0x23, 0x09, 0xba, 0xb6, + 0x06, 0x47, 0xd6, 0xd2, 0x1e, 0x05, 0x40, 0x43, 0x6d, 0x14, 0xbc, 0x04, + 0x80, 0x0c, 0x43, 0x28, 0xf4, 0xe0, 0x04, 0x00, 0x42, 0x22, 0x00, 0xa8, + 0x04, 0x40, 0x4f, 0xe7, 0x69, 0xbe, 0x04, 0x40, 0x45, 0x53, 0x23, 0xd0, + 0x04, 0x00, 0x49, 0xb7, 0x23, 0xd2, 0x04, 0x40, 0x0d, 0x65, 0x84, 0xbc, + 0x03, 0x10, 0x76, 0x65, 0x01, 0xff, 0x90, 0x44, 0x91, 0x0d, 0x02, 0xaa, + 0xf3, 0x01, 0xff, 0xd1, 0xf1, 0x2f, 0x01, 0xd2, 0xf2, 0x2f, 0x41, 0x90, + 0x0f, 0x91, 0x01, 0xff, 0xd0, 0xee, 0x2f, 0x01, 0xd2, 0xef, 0x2f, 0x01, + 0xd4, 0xf0, 0x2f, 0x41, 0xd0, 0xe5, 0x2f, 0x01, 0xd1, 0xe6, 0x2f, 0x01, + 0xd2, 0xe7, 0x2f, 0x01, 0xd3, 0xe8, 0x2f, 0x01, 0xd4, 0xe9, 0x2f, 0x01, + 0xd5, 0xea, 0x2f, 0x01, 0xd7, 0xeb, 0x2f, 0x01, 0xd8, 0xec, 0x2f, 0x01, + 0xd9, 0xed, 0x2f, 0x41, 0x90, 0xce, 0x02, 0x91, 0xaa, 0x02, 0x92, 0x87, + 0x02, 0x93, 0xe4, 0x01, 0x94, 0xc9, 0x01, 0x95, 0xa2, 0x01, 0x96, 0x7c, + 0x97, 0x51, 0x98, 0x27, 0x99, 0x01, 0xff, 0xd0, 0xdc, 0x2f, 0x01, 0xd1, + 0xdd, 0x2f, 0x01, 0xd2, 0xde, 0x2f, 0x01, 0xd4, 0xdf, 0x2f, 0x01, 0xd5, + 0xe0, 0x2f, 0x01, 0xd6, 0xe1, 0x2f, 0x01, 0xd7, 0xe2, 0x2f, 0x01, 0xd8, + 0xe3, 0x2f, 0x01, 0xd9, 0xe4, 0x2f, 0x41, 0xd0, 0xd2, 0x2f, 0x01, 0xd1, + 0xd3, 0x2f, 0x01, 0xd2, 0xd4, 0x2f, 0x01, 0xd3, 0xd5, 0x2f, 0x01, 0xd4, + 0xd6, 0x2f, 0x01, 0xd5, 0xd7, 0x2f, 0x01, 0xd6, 0xd8, 0x2f, 0x01, 0xd7, + 0xd9, 0x2f, 0x01, 0xd8, 0xda, 0x2f, 0x01, 0xd9, 0xdb, 0x2f, 0x41, 0xd0, + 0xc8, 0x2f, 0x01, 0xd1, 0xc9, 0x2f, 0x01, 0xd2, 0xca, 0x2f, 0x01, 0xd3, + 0xcb, 0x2f, 0x01, 0xd4, 0xcc, 0x2f, 0x01, 0xd5, 0xcd, 0x2f, 0x81, 0x0c, + 0xd6, 0xcf, 0x2f, 0x01, 0xd8, 0xd0, 0x2f, 0x01, 0xd9, 0xd1, 0x2f, 0x41, + 0xe2, 0xce, 0x2f, 0x41, 0xd0, 0xbf, 0x2f, 0x01, 0xd1, 0xc0, 0x2f, 0x01, + 0xd2, 0xc1, 0x2f, 0x01, 0xd3, 0xc2, 0x2f, 0x01, 0xd4, 0xc3, 0x2f, 0x01, + 0xd6, 0xc4, 0x2f, 0x01, 0xd7, 0xc5, 0x2f, 0x01, 0xd8, 0xc6, 0x2f, 0x01, + 0xd9, 0xc7, 0x2f, 0x41, 0xd0, 0xb6, 0x2f, 0x01, 0xd1, 0xb7, 0x2f, 0x01, + 0xd2, 0xb8, 0x2f, 0x01, 0xd3, 0xb9, 0x2f, 0x01, 0xd4, 0xba, 0x2f, 0x01, + 0xd5, 0xbb, 0x2f, 0x01, 0xd6, 0xbc, 0x2f, 0x01, 0xd8, 0xbd, 0x2f, 0x01, + 0xd9, 0xbe, 0x2f, 0x41, 0xd0, 0xb0, 0x2f, 0x01, 0xd1, 0xb1, 0x2f, 0x01, + 0xd4, 0xb2, 0x2f, 0x01, 0xd6, 0xb3, 0x2f, 0x01, 0xd7, 0xb4, 0x2f, 0x01, + 0xd9, 0xb5, 0x2f, 0x41, 0xd0, 0xa8, 0x2f, 0x01, 0xd3, 0xa9, 0x2f, 0x01, + 0xd4, 0xaa, 0x2f, 0x01, 0xd5, 0xab, 0x2f, 0x01, 0xd6, 0xac, 0x2f, 0x01, + 0xd7, 0xad, 0x2f, 0x01, 0xd8, 0xae, 0x2f, 0x01, 0xd9, 0xaf, 0x2f, 0x41, + 0xd1, 0xa0, 0x2f, 0x01, 0xd3, 0xa1, 0x2f, 0x01, 0xd4, 0xa2, 0x2f, 0x01, + 0xd5, 0xa3, 0x2f, 0x01, 0xd6, 0xa4, 0x2f, 0x01, 0xd7, 0xa5, 0x2f, 0x01, + 0xd8, 0xa6, 0x2f, 0x01, 0xd9, 0xa7, 0x2f, 0x41, 0xd0, 0x98, 0x2f, 0x01, + 0xd1, 0x99, 0x2f, 0x01, 0xd2, 0x9a, 0x2f, 0x81, 0x10, 0xd3, 0x9c, 0x2f, + 0x01, 0xd5, 0x9d, 0x2f, 0x01, 0xd7, 0x9e, 0x2f, 0x01, 0xd9, 0x9f, 0x2f, + 0x41, 0xe2, 0x9b, 0x2f, 0x41, 0xd1, 0x90, 0x2f, 0x01, 0xd2, 0x91, 0x2f, + 0x01, 0xd4, 0x92, 0x2f, 0x01, 0xd5, 0x93, 0x2f, 0x01, 0xd6, 0x94, 0x2f, + 0x01, 0xd7, 0x95, 0x2f, 0x01, 0xd8, 0x96, 0x2f, 0x01, 0xd9, 0x97, 0x2f, + 0x41, 0xe1, 0x00, 0x08, 0x01, 0xe5, 0x01, 0x08, 0x01, 0xe9, 0x02, 0x08, + 0x01, 0xaa, 0xe3, 0x01, 0xab, 0xcc, 0x01, 0xac, 0xb5, 0x01, 0xad, 0x9e, + 0x01, 0xae, 0x87, 0x01, 0xef, 0x03, 0x08, 0x01, 0xb0, 0x6d, 0xb2, 0x57, + 0xb3, 0x41, 0xb4, 0x2b, 0xf5, 0x04, 0x08, 0x01, 0xb7, 0x15, 0xb8, 0x0b, + 0xba, 0x01, 0xff, 0xe1, 0x3c, 0x08, 0x01, 0xef, 0x3f, 0x08, 0x41, 0xe1, + 0x37, 0x08, 0x01, 0xe5, 0x38, 0x08, 0x41, 0xe1, 0x32, 0x08, 0x01, 0xe5, + 0x33, 0x08, 0x01, 0xe9, 0x34, 0x08, 0x01, 0xef, 0x35, 0x08, 0x41, 0xe1, + 0x2d, 0x08, 0x01, 0xe5, 0x2e, 0x08, 0x01, 0xe9, 0x2f, 0x08, 0x01, 0xef, + 0x30, 0x08, 0x01, 0xf5, 0x31, 0x08, 0x41, 0xe1, 0x28, 0x08, 0x01, 0xe5, + 0x29, 0x08, 0x01, 0xe9, 0x2a, 0x08, 0x01, 0xef, 0x2b, 0x08, 0x01, 0xf5, + 0x2c, 0x08, 0x41, 0xe1, 0x23, 0x08, 0x01, 0xe5, 0x24, 0x08, 0x01, 0xe9, + 0x25, 0x08, 0x01, 0xef, 0x26, 0x08, 0x01, 0xf5, 0x27, 0x08, 0x41, 0xe1, + 0x1e, 0x08, 0x01, 0xe5, 0x1f, 0x08, 0x01, 0xe9, 0x20, 0x08, 0x01, 0xef, + 0x21, 0x08, 0x01, 0xf5, 0x22, 0x08, 0x41, 0xe1, 0x19, 0x08, 0x01, 0xe5, + 0x1a, 0x08, 0x01, 0xe9, 0x1b, 0x08, 0x01, 0xef, 0x1c, 0x08, 0x01, 0xf5, + 0x1d, 0x08, 0x41, 0xe1, 0x14, 0x08, 0x01, 0xe5, 0x15, 0x08, 0x01, 0xe9, + 0x16, 0x08, 0x01, 0xef, 0x17, 0x08, 0x01, 0xf5, 0x18, 0x08, 0x41, 0xe1, + 0x0f, 0x08, 0x01, 0xe5, 0x10, 0x08, 0x01, 0xe9, 0x11, 0x08, 0x01, 0xef, + 0x12, 0x08, 0x01, 0xf5, 0x13, 0x08, 0x41, 0xe1, 0x0a, 0x08, 0x01, 0xe5, + 0x0b, 0x08, 0x01, 0xe9, 0x0c, 0x08, 0x01, 0xef, 0x0d, 0x08, 0x01, 0xf5, + 0x0e, 0x08, 0x41, 0xe1, 0x05, 0x08, 0x01, 0xef, 0x08, 0x08, 0x41, 0x47, + 0x8b, 0xb7, 0x1b, 0x22, 0x00, 0x46, 0xc4, 0xda, 0x52, 0xf9, 0x01, 0x08, + 0xa0, 0xc8, 0x80, 0x01, 0xb0, 0x64, 0xb2, 0x16, 0x02, 0x60, 0x01, 0x06, + 0x49, 0x84, 0xbf, 0x69, 0xf9, 0x41, 0x43, 0xaa, 0x01, 0x6e, 0xf3, 0x01, + 0x43, 0x04, 0x67, 0xc3, 0xf6, 0x41, 0xac, 0x1e, 0xb2, 0x06, 0x60, 0x74, + 0x10, 0x61, 0x27, 0x40, 0x05, 0x58, 0x41, 0x06, 0x4a, 0xcf, 0xb3, 0x5b, + 0xf3, 0x41, 0x48, 0x10, 0xc6, 0xb1, 0xf4, 0x01, 0x44, 0x5a, 0x03, 0xa4, + 0x00, 0x40, 0x49, 0x98, 0xba, 0x4c, 0xf9, 0x01, 0x02, 0x09, 0x00, 0x01, + 0xff, 0x51, 0xb9, 0x58, 0xaa, 0x23, 0x00, 0x02, 0x13, 0x01, 0x01, 0xff, + 0x06, 0x2d, 0x22, 0x06, 0x42, 0x1f, 0x00, 0xb0, 0x27, 0x40, 0x43, 0x1a, + 0x00, 0xcf, 0x22, 0x00, 0x42, 0x0c, 0x00, 0xce, 0x22, 0x40, 0x80, 0x0c, + 0x44, 0x5f, 0x2c, 0xc1, 0xf9, 0x01, 0x43, 0x38, 0x66, 0xe0, 0x2b, 0x40, + 0x4f, 0xc5, 0x5f, 0xfe, 0x26, 0x00, 0x4a, 0x9d, 0xb3, 0x64, 0xf9, 0x41, + 0x0d, 0xa1, 0x86, 0xfa, 0x37, 0x11, 0x5f, 0x5d, 0xd3, 0x37, 0x05, 0x5a, + 0x03, 0x01, 0xff, 0xe1, 0x00, 0x20, 0x81, 0xf8, 0x33, 0xa2, 0xd1, 0x32, + 0xa4, 0x9b, 0x2e, 0xe5, 0x8a, 0x20, 0x81, 0x9f, 0x2b, 0xa7, 0xe1, 0x23, + 0xa8, 0xc2, 0x22, 0xe9, 0x3f, 0x21, 0x81, 0xb3, 0x21, 0xab, 0xad, 0x1c, + 0xac, 0x86, 0x13, 0xad, 0xab, 0x11, 0xae, 0xaa, 0x0d, 0xb0, 0xa0, 0x0c, + 0xb2, 0x8c, 0x0c, 0xb3, 0x95, 0x07, 0xb4, 0xb2, 0x05, 0xf5, 0x0b, 0x23, + 0x81, 0x77, 0xba, 0x01, 0xff, 0xe1, 0x5d, 0x23, 0x81, 0x53, 0x42, 0x73, + 0x9b, 0x62, 0x23, 0x01, 0xe9, 0x63, 0x23, 0x81, 0x29, 0xf5, 0x6a, 0x23, + 0xc1, 0x00, 0x51, 0x32, 0x57, 0x42, 0x25, 0x01, 0xd5, 0x6b, 0x23, 0x81, + 0x0a, 0x43, 0x07, 0x36, 0x6d, 0x23, 0x01, 0xed, 0x6e, 0x23, 0x41, 0x07, + 0x27, 0x02, 0x01, 0xff, 0xe1, 0x6c, 0x23, 0x01, 0x4f, 0xa1, 0x73, 0x43, + 0x25, 0x41, 0x48, 0x50, 0xc2, 0x64, 0x23, 0x01, 0xd3, 0x65, 0x23, 0x01, + 0xe2, 0x66, 0x23, 0x81, 0x0a, 0xe7, 0x68, 0x23, 0x01, 0x42, 0x6b, 0xf3, + 0x69, 0x23, 0x41, 0x4a, 0xd3, 0xa5, 0x67, 0x23, 0x41, 0x80, 0x0e, 0xd7, + 0x41, 0x25, 0x01, 0xe7, 0x60, 0x23, 0x01, 0x42, 0xad, 0xf4, 0x61, 0x23, + 0x41, 0x51, 0xf8, 0x5d, 0x5f, 0x23, 0x01, 0x44, 0x82, 0x60, 0x5e, 0x23, + 0x41, 0x80, 0x8c, 0x04, 0xd2, 0x11, 0x23, 0x01, 0xe2, 0x12, 0x23, 0x01, + 0xe4, 0x13, 0x23, 0x81, 0xbf, 0x03, 0xed, 0x1d, 0x23, 0x81, 0xfa, 0x02, + 0xee, 0x26, 0x23, 0x81, 0xee, 0x02, 0xf2, 0x28, 0x23, 0x81, 0x46, 0x42, + 0xa4, 0x02, 0x51, 0x23, 0x81, 0x18, 0x44, 0xc1, 0xf2, 0x59, 0x23, 0x01, + 0xba, 0x01, 0xff, 0xd3, 0x5a, 0x23, 0x81, 0x04, 0xf5, 0x5c, 0x23, 0x41, + 0x4d, 0xac, 0x7f, 0x5b, 0x23, 0x41, 0x07, 0x27, 0x02, 0x0e, 0xd2, 0x57, + 0x23, 0x01, 0x43, 0xac, 0xf4, 0x58, 0x23, 0x01, 0xf8, 0x56, 0x23, 0x41, + 0xe1, 0x52, 0x23, 0x01, 0x42, 0xfe, 0x03, 0x53, 0x23, 0x81, 0x06, 0x44, + 0x10, 0x45, 0x55, 0x23, 0x41, 0xf2, 0x54, 0x23, 0x41, 0x80, 0x94, 0x02, + 0xd2, 0x2b, 0x23, 0x81, 0xc1, 0x01, 0xd4, 0x34, 0x23, 0x01, 0xe9, 0x35, + 0x23, 0x81, 0xb3, 0x01, 0xf5, 0x37, 0x23, 0xc1, 0x00, 0x07, 0x27, 0x02, + 0x0d, 0x42, 0xf0, 0x10, 0x4f, 0x23, 0xc1, 0x00, 0x48, 0x27, 0x02, 0x50, + 0x23, 0x41, 0xe1, 0x38, 0x23, 0x81, 0x91, 0x01, 0x43, 0x16, 0x00, 0x3a, + 0x23, 0x01, 0xa4, 0x7d, 0xa7, 0x64, 0x42, 0x22, 0x00, 0x41, 0x23, 0x01, + 0xa9, 0x4c, 0x42, 0x45, 0x00, 0x45, 0x23, 0x01, 0xac, 0x33, 0x43, 0xcb, + 0x13, 0x47, 0x23, 0x01, 0x42, 0xbb, 0x09, 0x48, 0x23, 0x01, 0xb3, 0x19, + 0x42, 0x5c, 0x01, 0x4b, 0x23, 0x01, 0xb5, 0x01, 0xff, 0x49, 0x95, 0xb4, + 0x4c, 0x23, 0x01, 0xe4, 0x4d, 0x23, 0x01, 0x44, 0xf7, 0xcb, 0x4e, 0x23, + 0x41, 0x42, 0xb0, 0x01, 0x49, 0x23, 0x01, 0x43, 0x85, 0x69, 0x4a, 0x23, + 0x41, 0x46, 0xa4, 0xd9, 0x3f, 0x25, 0x01, 0xb5, 0x01, 0xff, 0xd3, 0x40, + 0x25, 0x01, 0xed, 0x46, 0x23, 0x41, 0x42, 0xf1, 0x06, 0x42, 0x23, 0x01, + 0xed, 0x43, 0x23, 0x01, 0x42, 0xa4, 0x02, 0x44, 0x23, 0x41, 0xe1, 0x3c, + 0x23, 0x81, 0x04, 0xf5, 0x40, 0x23, 0x41, 0xec, 0x3d, 0x23, 0x01, 0x47, + 0x8f, 0x60, 0x3e, 0x23, 0x01, 0xf2, 0x3f, 0x23, 0x41, 0x44, 0x11, 0xef, + 0x3e, 0x25, 0x01, 0x42, 0x42, 0x0b, 0x3b, 0x23, 0x41, 0x45, 0xed, 0xd9, + 0x39, 0x23, 0x41, 0xd3, 0x36, 0x23, 0x41, 0x80, 0x01, 0xff, 0x48, 0x5e, + 0x23, 0x3c, 0x25, 0x01, 0x06, 0x28, 0x02, 0x01, 0xff, 0xa1, 0x29, 0x42, + 0x22, 0x00, 0x2f, 0x23, 0x01, 0x43, 0xdc, 0x22, 0x30, 0x23, 0x01, 0xb5, + 0x01, 0xff, 0xd2, 0x31, 0x23, 0x81, 0x04, 0xe4, 0x3d, 0x25, 0x41, 0x06, + 0x57, 0x28, 0x01, 0xff, 0x43, 0xf9, 0x03, 0x32, 0x23, 0x01, 0x42, 0xe5, + 0x06, 0x33, 0x23, 0x41, 0x06, 0x57, 0x28, 0x04, 0xec, 0x2e, 0x23, 0x41, + 0x42, 0x22, 0x00, 0x2c, 0x23, 0x01, 0x42, 0x2a, 0x05, 0x2d, 0x23, 0x41, + 0x4b, 0x8c, 0x9a, 0x29, 0x23, 0x01, 0x47, 0x1b, 0x7c, 0x2a, 0x23, 0x41, + 0x45, 0xbb, 0x3f, 0x27, 0x23, 0x41, 0x07, 0x27, 0x02, 0x1e, 0x43, 0x35, + 0x16, 0x22, 0x23, 0x01, 0x42, 0x48, 0x04, 0x23, 0x23, 0xc1, 0x00, 0x07, + 0x27, 0x02, 0x01, 0xff, 0x46, 0x1b, 0x02, 0x24, 0x23, 0x01, 0x42, 0xbb, + 0x09, 0x25, 0x23, 0x41, 0x45, 0x22, 0x02, 0x1e, 0x23, 0x01, 0x42, 0x2a, + 0x02, 0x98, 0x23, 0x81, 0x0a, 0x44, 0x49, 0x57, 0x20, 0x23, 0x01, 0xf5, + 0x21, 0x23, 0x41, 0x48, 0xd4, 0x57, 0x1f, 0x23, 0x41, 0x80, 0x06, 0x42, + 0xd2, 0x0e, 0x1c, 0x23, 0x41, 0x44, 0xbc, 0x3f, 0x19, 0x23, 0x01, 0x46, + 0x7c, 0xdd, 0x14, 0x23, 0x01, 0x47, 0x1b, 0x7c, 0x1a, 0x23, 0x81, 0x1e, + 0x06, 0x28, 0x02, 0x01, 0xff, 0x43, 0xe9, 0x70, 0x15, 0x23, 0x01, 0x42, + 0x7d, 0x02, 0x16, 0x23, 0x01, 0x4f, 0x19, 0x74, 0x17, 0x23, 0xc1, 0x00, + 0x45, 0xbb, 0x3f, 0x18, 0x23, 0x41, 0x4a, 0x2c, 0x9d, 0x1b, 0x23, 0x41, + 0x43, 0xec, 0x7a, 0x0c, 0x23, 0x01, 0x07, 0x5f, 0x22, 0x0b, 0xf5, 0x99, + 0x23, 0xc1, 0x00, 0x42, 0x2d, 0x02, 0x0d, 0x23, 0x41, 0x57, 0x52, 0x30, + 0x0e, 0x23, 0x01, 0x4c, 0x7f, 0x95, 0x0f, 0x23, 0x01, 0x5a, 0x54, 0x22, + 0x10, 0x23, 0x41, 0xe1, 0xeb, 0x22, 0x81, 0x69, 0xe5, 0xfc, 0x22, 0x81, + 0x5e, 0xe9, 0xfe, 0x22, 0x81, 0x30, 0xf5, 0x05, 0x23, 0xc1, 0x00, 0x42, + 0xd3, 0x0e, 0x06, 0x23, 0x01, 0xeb, 0x07, 0x23, 0x01, 0xed, 0x08, 0x23, + 0x81, 0x0b, 0xf2, 0x09, 0x23, 0xc1, 0x00, 0x54, 0xc4, 0x3f, 0x0a, 0x23, + 0x41, 0x07, 0x27, 0x02, 0x01, 0xff, 0x49, 0x8d, 0x60, 0x3a, 0x25, 0x01, + 0x4a, 0xa1, 0x73, 0x3b, 0x25, 0x41, 0x45, 0x81, 0x60, 0xff, 0x22, 0x01, + 0xd2, 0x97, 0x23, 0x01, 0xec, 0x00, 0x23, 0x01, 0xf2, 0x01, 0x23, 0xc1, + 0x00, 0x80, 0x01, 0xff, 0x48, 0xa8, 0xc9, 0x03, 0x23, 0x81, 0x06, 0x4a, + 0x0a, 0x45, 0x02, 0x23, 0x41, 0x5a, 0x5e, 0x1e, 0x04, 0x23, 0x41, 0x45, + 0xbb, 0x3f, 0xfd, 0x22, 0x41, 0x80, 0x53, 0xe2, 0xf0, 0x22, 0x81, 0x3f, + 0xe7, 0xf3, 0x22, 0x81, 0x11, 0x42, 0x12, 0x45, 0xfa, 0x22, 0x81, 0x04, + 0xf2, 0xfb, 0x22, 0x41, 0x49, 0xb0, 0xb4, 0x39, 0x25, 0x41, 0x07, 0x27, + 0x02, 0x01, 0xff, 0x42, 0xe5, 0x06, 0xf4, 0x22, 0x01, 0x43, 0xec, 0x7a, + 0xf5, 0x22, 0x01, 0x02, 0xa4, 0x02, 0x0c, 0x44, 0xd1, 0x0e, 0xf8, 0x22, + 0x01, 0x42, 0xb2, 0x0c, 0xf9, 0x22, 0x41, 0xe5, 0xf6, 0x22, 0x01, 0xf5, + 0xf7, 0x22, 0x41, 0x80, 0x01, 0xff, 0x62, 0xbc, 0x0c, 0xf1, 0x22, 0x01, + 0x47, 0xd6, 0x05, 0xf2, 0x22, 0x41, 0x48, 0x3c, 0x0d, 0xec, 0x22, 0x01, + 0x44, 0xbc, 0x3f, 0xef, 0x22, 0x01, 0x06, 0x28, 0x02, 0x01, 0xff, 0x42, + 0x49, 0x00, 0xed, 0x22, 0x01, 0x42, 0x7d, 0x02, 0xee, 0x22, 0x41, 0xe1, + 0x93, 0x22, 0x81, 0xb3, 0x03, 0xa8, 0x5d, 0xe9, 0xdb, 0x22, 0x81, 0x2e, + 0xf5, 0xe2, 0x22, 0xc1, 0x00, 0x48, 0x82, 0x95, 0xe3, 0x22, 0x01, 0xe4, + 0xe4, 0x22, 0x81, 0x1a, 0x43, 0x41, 0x00, 0xe6, 0x22, 0x01, 0xed, 0xe7, + 0x22, 0x81, 0x09, 0xf2, 0xe9, 0x22, 0xc1, 0x00, 0xd9, 0xea, 0x22, 0x41, + 0x43, 0xf9, 0x03, 0xe8, 0x22, 0x41, 0xd2, 0xe5, 0x22, 0x41, 0x80, 0x1c, + 0xe7, 0xdd, 0x22, 0x81, 0x0c, 0x42, 0x45, 0xac, 0xe0, 0x22, 0x01, 0x43, + 0xfd, 0xea, 0xe1, 0x22, 0x41, 0xd4, 0xde, 0x22, 0xc1, 0x00, 0x4f, 0x7e, + 0x69, 0xdf, 0x22, 0x41, 0x44, 0xbc, 0x3f, 0xdc, 0x22, 0x01, 0x4a, 0x0a, + 0x45, 0x38, 0x25, 0x41, 0xe1, 0xad, 0x22, 0x81, 0x80, 0x02, 0xe5, 0xba, + 0x22, 0x81, 0xaa, 0x01, 0xa9, 0x27, 0xf5, 0xd7, 0x22, 0xc1, 0x00, 0x52, + 0x69, 0x4f, 0xd8, 0x22, 0x01, 0xd2, 0xd9, 0x22, 0x81, 0x06, 0x43, 0x07, + 0x36, 0xda, 0x22, 0x41, 0x06, 0x57, 0x28, 0x01, 0xff, 0x4c, 0x53, 0x8e, + 0x36, 0x25, 0x01, 0x4b, 0x73, 0x9b, 0x37, 0x25, 0x41, 0xe4, 0xc3, 0x22, + 0x81, 0x6d, 0xed, 0xc6, 0x22, 0x81, 0x20, 0x43, 0x4e, 0x09, 0xd2, 0x22, + 0x01, 0xf2, 0xd3, 0x22, 0x81, 0x06, 0x42, 0x12, 0x00, 0xd6, 0x22, 0x41, + 0x80, 0x01, 0xff, 0x56, 0x13, 0x36, 0xd5, 0x22, 0x01, 0x44, 0x82, 0x60, + 0xd4, 0x22, 0x41, 0x07, 0x27, 0x02, 0x01, 0xff, 0xe1, 0xc7, 0x22, 0x01, + 0xa2, 0x31, 0x43, 0x04, 0x06, 0xca, 0x22, 0x01, 0x43, 0x6c, 0x1e, 0xcb, + 0x22, 0x01, 0x43, 0xf0, 0x06, 0xcc, 0x22, 0x81, 0x18, 0x46, 0x7c, 0xdd, + 0xce, 0x22, 0x01, 0x43, 0x73, 0xf4, 0xcf, 0x22, 0x01, 0x43, 0x92, 0xb6, + 0xd0, 0x22, 0x01, 0x43, 0x65, 0x0d, 0xd1, 0x22, 0x41, 0x45, 0xbb, 0x3f, + 0xcd, 0x22, 0x41, 0x42, 0x13, 0x00, 0xc8, 0x22, 0x01, 0x44, 0x91, 0x97, + 0xc9, 0x22, 0x41, 0x07, 0x27, 0x02, 0x01, 0xff, 0xe1, 0xc4, 0x22, 0x01, + 0x42, 0x29, 0x02, 0xc5, 0x22, 0x41, 0x80, 0x1b, 0x42, 0x16, 0xf5, 0xbe, + 0x22, 0x01, 0xee, 0xbf, 0x22, 0x01, 0x42, 0xa4, 0x02, 0xc0, 0x22, 0xc1, + 0x00, 0xd2, 0xc1, 0x22, 0x01, 0x43, 0xb0, 0x00, 0xc2, 0x22, 0x41, 0x42, + 0x41, 0x00, 0xbb, 0x22, 0x01, 0x48, 0xa0, 0xc9, 0x32, 0x25, 0x81, 0x17, + 0x05, 0x58, 0x28, 0x01, 0xff, 0x44, 0x5d, 0xf0, 0x33, 0x25, 0x01, 0x44, + 0x5d, 0xf1, 0x34, 0x25, 0x01, 0x43, 0xec, 0x4b, 0x35, 0x25, 0x41, 0x80, + 0x01, 0xff, 0x59, 0x5f, 0x1e, 0xbc, 0x22, 0x01, 0x59, 0x73, 0x26, 0xbd, + 0x22, 0x41, 0xd3, 0xae, 0x22, 0x81, 0x17, 0xd6, 0xb7, 0x22, 0x81, 0x0c, + 0x42, 0xc3, 0xf3, 0xb8, 0x22, 0x01, 0x42, 0xbe, 0x42, 0xb9, 0x22, 0x41, + 0x45, 0x81, 0x60, 0x31, 0x25, 0x41, 0x07, 0x27, 0x02, 0x01, 0xff, 0xe1, + 0xaf, 0x22, 0x01, 0x43, 0xe9, 0x70, 0xb0, 0x22, 0x01, 0x44, 0x05, 0x45, + 0xb1, 0x22, 0x01, 0x42, 0xcd, 0x05, 0xb2, 0x22, 0x01, 0x44, 0x06, 0x67, + 0xb3, 0x22, 0x01, 0x43, 0x5c, 0x01, 0xb4, 0x22, 0x01, 0xf5, 0xb5, 0x22, + 0xc1, 0x00, 0x47, 0x57, 0x28, 0xb6, 0x22, 0x41, 0xe7, 0x95, 0x22, 0x81, + 0x15, 0xec, 0xa9, 0x22, 0x81, 0x0a, 0x44, 0x79, 0xf1, 0xab, 0x22, 0x01, + 0xf2, 0xac, 0x22, 0x41, 0x51, 0x10, 0x57, 0xaa, 0x22, 0x41, 0x80, 0x01, + 0xff, 0x44, 0xbc, 0x3f, 0xa8, 0x22, 0x81, 0x90, 0x01, 0x47, 0x21, 0xc2, + 0x94, 0x22, 0x01, 0x48, 0x98, 0xc9, 0xa7, 0x22, 0x01, 0x06, 0x28, 0x02, + 0x01, 0xff, 0xe1, 0x96, 0x22, 0x01, 0x42, 0x6c, 0x02, 0x97, 0x22, 0x81, + 0x70, 0x42, 0x92, 0x01, 0x2e, 0x25, 0x01, 0x42, 0x22, 0x00, 0x99, 0x22, + 0x01, 0x48, 0xd0, 0x69, 0x96, 0x23, 0x01, 0xab, 0x50, 0x43, 0x89, 0xb4, + 0x9c, 0x22, 0x01, 0x42, 0x7d, 0x02, 0x9d, 0x22, 0x01, 0x43, 0xdc, 0x22, + 0x9e, 0x22, 0x01, 0xb3, 0x27, 0x02, 0x12, 0x00, 0x19, 0xb5, 0x01, 0xff, + 0xd2, 0xa2, 0x22, 0x01, 0xe2, 0xa3, 0x22, 0x01, 0xed, 0xa4, 0x22, 0x01, + 0xf2, 0xa5, 0x22, 0x01, 0x42, 0xa4, 0x02, 0xa6, 0x22, 0x41, 0xe2, 0xa1, + 0x22, 0x01, 0x42, 0x12, 0x45, 0x30, 0x25, 0x41, 0x42, 0x13, 0x00, 0x9f, + 0x22, 0x01, 0xa8, 0x01, 0xff, 0x49, 0xf5, 0xb7, 0x2f, 0x25, 0x01, 0x42, + 0x03, 0x00, 0xa0, 0x22, 0x41, 0x42, 0x6d, 0x00, 0x9a, 0x22, 0x01, 0x42, + 0x42, 0x00, 0x9b, 0x22, 0x41, 0xe2, 0x98, 0x22, 0x41, 0x49, 0xef, 0xb4, + 0x2d, 0x25, 0x41, 0xe1, 0x8f, 0x22, 0x81, 0x08, 0xe9, 0x91, 0x22, 0x01, + 0xf5, 0x92, 0x22, 0x41, 0xe2, 0x90, 0x22, 0x41, 0xe1, 0x7a, 0x22, 0x81, + 0x76, 0x44, 0x6b, 0x75, 0x7e, 0x22, 0x81, 0x69, 0xe9, 0x7f, 0x22, 0xc1, + 0x00, 0x80, 0x2e, 0xb2, 0x01, 0xff, 0xd2, 0x95, 0x23, 0x01, 0x42, 0x3f, + 0x00, 0x8a, 0x22, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x4e, 0x77, 0x7a, 0x8e, + 0x22, 0x01, 0x06, 0x28, 0x02, 0x01, 0xff, 0x43, 0x1e, 0x02, 0x8b, 0x22, + 0x01, 0x42, 0xb2, 0x0c, 0x8c, 0x22, 0x01, 0x42, 0x59, 0x00, 0x8d, 0x22, + 0x41, 0x4b, 0x81, 0x9a, 0x89, 0x22, 0x01, 0x06, 0x28, 0x02, 0x01, 0xff, + 0xe1, 0x80, 0x22, 0x81, 0x20, 0xa2, 0x16, 0xe5, 0x84, 0x22, 0x01, 0xe9, + 0x85, 0x22, 0x81, 0x09, 0xf5, 0x87, 0x22, 0xc1, 0x00, 0xd2, 0x88, 0x22, + 0x41, 0xe2, 0x86, 0x22, 0x41, 0xe9, 0x82, 0x22, 0x01, 0xf5, 0x83, 0x22, + 0x41, 0xe2, 0x81, 0x22, 0x41, 0x49, 0x3b, 0x0d, 0x94, 0x23, 0x41, 0xe4, + 0x7b, 0x22, 0x01, 0xee, 0x7c, 0x22, 0x01, 0xf0, 0x7d, 0x22, 0x41, 0xe1, + 0x3e, 0x22, 0x81, 0xc2, 0x03, 0xe5, 0x48, 0x22, 0x81, 0xa4, 0x03, 0xe9, + 0x4c, 0x22, 0x81, 0xbc, 0x01, 0xf5, 0x61, 0x22, 0xc1, 0x00, 0x42, 0x04, + 0x36, 0x62, 0x22, 0x81, 0x9a, 0x01, 0xee, 0x63, 0x22, 0xc1, 0x00, 0x80, + 0x57, 0x42, 0xac, 0x52, 0x6d, 0x22, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x0a, + 0x45, 0xa7, 0x0d, 0x4f, 0x1e, 0x6f, 0x78, 0x22, 0xc1, 0x00, 0x42, 0x2d, + 0x02, 0x79, 0x22, 0x41, 0x46, 0xec, 0xd9, 0x6e, 0x22, 0x01, 0x42, 0xe5, + 0x06, 0x6f, 0x22, 0x01, 0x43, 0x53, 0x8e, 0x70, 0x22, 0x01, 0x43, 0xec, + 0x7a, 0x71, 0x22, 0x01, 0x48, 0xd0, 0x69, 0x72, 0x22, 0x01, 0x44, 0xc1, + 0xf0, 0x73, 0x22, 0x01, 0x42, 0x74, 0x00, 0x74, 0x22, 0x01, 0x42, 0xcd, + 0x05, 0x75, 0x22, 0x01, 0x45, 0xfb, 0xea, 0x76, 0x22, 0x01, 0x42, 0x08, + 0x67, 0x77, 0x22, 0x41, 0x4c, 0xb7, 0x8d, 0x6b, 0x22, 0x81, 0x2f, 0x0c, + 0xe0, 0x22, 0x0c, 0x48, 0xd7, 0x22, 0x6a, 0x22, 0x01, 0x44, 0x82, 0x60, + 0x69, 0x22, 0x41, 0x43, 0x6c, 0x1e, 0x64, 0x22, 0x01, 0x44, 0x8c, 0x06, + 0x65, 0x22, 0x01, 0x43, 0x65, 0x0d, 0x66, 0x22, 0x81, 0x06, 0x43, 0x30, + 0x7c, 0x68, 0x22, 0x41, 0x59, 0xd6, 0x22, 0x67, 0x22, 0x41, 0x51, 0x21, + 0x57, 0x6c, 0x22, 0x41, 0x80, 0x01, 0xff, 0x56, 0xfd, 0x35, 0xd5, 0x22, + 0x01, 0x56, 0xa4, 0x2c, 0x93, 0x23, 0x01, 0x44, 0x82, 0x60, 0xd4, 0x22, + 0x41, 0x48, 0xd7, 0x97, 0x4d, 0x22, 0x01, 0xd2, 0x4e, 0x22, 0x01, 0xed, + 0x4f, 0x22, 0x81, 0xc1, 0x01, 0xee, 0x8f, 0x23, 0x81, 0x06, 0x43, 0xeb, + 0x88, 0x60, 0x22, 0x41, 0xd9, 0x90, 0x23, 0x01, 0x43, 0x19, 0xf4, 0x52, + 0x22, 0xc1, 0x00, 0x07, 0x27, 0x02, 0x01, 0xff, 0xa1, 0x92, 0x01, 0x43, + 0xcd, 0x1c, 0x91, 0x23, 0x01, 0x48, 0x20, 0xc5, 0x22, 0x25, 0x01, 0xa7, + 0x6e, 0x42, 0x49, 0x00, 0x25, 0x25, 0x01, 0x45, 0xd1, 0xe7, 0x26, 0x25, + 0x01, 0x47, 0xa5, 0xd2, 0x27, 0x25, 0x01, 0xad, 0x4e, 0xae, 0x42, 0x4c, + 0x7c, 0x3d, 0x29, 0x25, 0x01, 0x43, 0x8e, 0x06, 0x5a, 0x22, 0x81, 0x1d, + 0xf5, 0x2a, 0x25, 0xc1, 0x00, 0x47, 0x1a, 0x74, 0x2b, 0x25, 0x01, 0x4a, + 0xeb, 0xa6, 0x5e, 0x22, 0x01, 0x44, 0xf7, 0xcb, 0x2c, 0x25, 0x01, 0x42, + 0xa4, 0x02, 0x5f, 0x22, 0x41, 0x07, 0x57, 0x28, 0x01, 0xff, 0x43, 0x19, + 0x00, 0x5b, 0x22, 0x01, 0x42, 0xa4, 0x02, 0x5c, 0x22, 0xc1, 0x00, 0x49, + 0x18, 0x4d, 0x5d, 0x22, 0x41, 0xe5, 0x58, 0x22, 0x01, 0x42, 0x42, 0x0b, + 0x59, 0x22, 0x41, 0x43, 0xf9, 0x03, 0x28, 0x25, 0x01, 0x50, 0x76, 0x62, + 0x57, 0x22, 0x41, 0xe9, 0x92, 0x23, 0x81, 0x0b, 0xb5, 0x01, 0xff, 0xe4, + 0x56, 0x22, 0x01, 0xec, 0x24, 0x25, 0x41, 0x42, 0xa4, 0x02, 0x23, 0x25, + 0x41, 0xee, 0x53, 0x22, 0x01, 0x42, 0xa4, 0x02, 0x54, 0x22, 0xc1, 0x00, + 0x49, 0x18, 0x4d, 0x55, 0x22, 0x41, 0x09, 0xc0, 0x42, 0x01, 0xff, 0x47, + 0x8f, 0x60, 0x50, 0x22, 0x01, 0x50, 0x26, 0x66, 0x51, 0x22, 0x41, 0x80, + 0x01, 0xff, 0x47, 0x1b, 0x7c, 0x4b, 0x22, 0x01, 0x06, 0x28, 0x02, 0x01, + 0xff, 0xe1, 0x49, 0x22, 0x01, 0x42, 0xb2, 0x0c, 0x4a, 0x22, 0x41, 0xd2, + 0x3f, 0x22, 0x01, 0xd4, 0x8e, 0x23, 0x01, 0x42, 0x24, 0x02, 0x40, 0x22, + 0x81, 0x0f, 0xed, 0x46, 0x22, 0xc1, 0x00, 0x48, 0x20, 0xc2, 0x45, 0x22, + 0x01, 0xd2, 0x47, 0x22, 0x41, 0x80, 0x04, 0xf2, 0x44, 0x22, 0x41, 0x48, + 0x5e, 0x23, 0x41, 0x22, 0x01, 0x4d, 0x23, 0x87, 0x43, 0x22, 0x01, 0x4e, + 0x25, 0x7d, 0x42, 0x22, 0x41, 0xe1, 0x20, 0x22, 0x81, 0xad, 0x01, 0xe5, + 0x28, 0x22, 0x81, 0x9e, 0x01, 0xe9, 0x2a, 0x22, 0x81, 0x8e, 0x01, 0xf5, + 0x2c, 0x22, 0xc1, 0x00, 0x48, 0x48, 0xc2, 0x2d, 0x22, 0x01, 0xe7, 0x2e, + 0x22, 0x81, 0x78, 0x44, 0x99, 0xf1, 0x30, 0x22, 0x01, 0x44, 0x49, 0xf2, + 0x31, 0x22, 0x01, 0x42, 0xa4, 0x02, 0x32, 0x22, 0xc1, 0x00, 0x80, 0x2a, + 0xd3, 0x39, 0x22, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x44, 0xbc, 0x3f, 0x3d, + 0x22, 0x01, 0x06, 0x28, 0x02, 0x01, 0xff, 0xe1, 0x3a, 0x22, 0x81, 0x0c, + 0x42, 0x00, 0x00, 0x3c, 0x22, 0x01, 0x42, 0x59, 0x00, 0x8d, 0x23, 0x41, + 0x48, 0x58, 0xc2, 0x3b, 0x22, 0x41, 0x4d, 0xc1, 0x81, 0x38, 0x22, 0x01, + 0x49, 0xb9, 0xbd, 0x36, 0x22, 0x81, 0x15, 0x06, 0x28, 0x02, 0x01, 0xff, + 0xe1, 0x33, 0x22, 0x01, 0x43, 0x06, 0x5e, 0x34, 0x22, 0x01, 0x42, 0x59, + 0x00, 0x35, 0x22, 0x41, 0x07, 0x27, 0x02, 0x01, 0xff, 0x49, 0x7f, 0xb5, + 0x37, 0x22, 0x01, 0x42, 0x24, 0x02, 0x20, 0x25, 0x01, 0x43, 0x5c, 0x60, + 0x21, 0x25, 0x41, 0x45, 0xbb, 0x3f, 0x2f, 0x22, 0x41, 0x49, 0xc2, 0xb4, + 0x1f, 0x25, 0x01, 0xee, 0x2b, 0x22, 0x41, 0xf3, 0x29, 0x22, 0xc1, 0x00, + 0xe8, 0x8c, 0x23, 0x41, 0x80, 0x17, 0xd2, 0x23, 0x22, 0x01, 0xe8, 0x24, + 0x22, 0x01, 0xf2, 0x25, 0x22, 0x01, 0x42, 0xa4, 0x02, 0x26, 0x22, 0xc1, + 0x00, 0xd2, 0x27, 0x22, 0x41, 0x44, 0xbc, 0x3f, 0x22, 0x22, 0x01, 0x4a, + 0x0a, 0x45, 0x21, 0x22, 0x41, 0xe1, 0xb7, 0x21, 0x81, 0xca, 0x02, 0xe9, + 0xf7, 0x21, 0x81, 0xb4, 0x02, 0xf5, 0xfb, 0x21, 0xc1, 0x00, 0x4a, 0x2c, + 0x9d, 0xfc, 0x21, 0x01, 0xd2, 0xfd, 0x21, 0x81, 0x3c, 0xd3, 0x16, 0x22, + 0x01, 0x43, 0xc7, 0x42, 0x17, 0x22, 0x81, 0x1a, 0xe8, 0x1b, 0x22, 0x01, + 0xec, 0x1c, 0x22, 0x01, 0xed, 0x1d, 0x22, 0xc1, 0x00, 0x49, 0x83, 0xb4, + 0x1e, 0x22, 0xc1, 0x00, 0x4d, 0x6b, 0x1e, 0x1f, 0x22, 0x41, 0x80, 0x01, + 0xff, 0xaf, 0x06, 0x47, 0x1b, 0x7c, 0x1a, 0x22, 0x41, 0x4d, 0x8b, 0x87, + 0x19, 0x22, 0x01, 0x49, 0xe3, 0xc0, 0x18, 0x22, 0x41, 0x80, 0x01, 0xff, + 0x4c, 0xab, 0x8d, 0x12, 0x22, 0x01, 0x4e, 0x1d, 0x78, 0x19, 0x25, 0x01, + 0x4c, 0x57, 0x93, 0x13, 0x22, 0x01, 0xb3, 0xbd, 0x01, 0xb4, 0x01, 0xff, + 0x43, 0x83, 0x60, 0x11, 0x22, 0x01, 0x05, 0x29, 0x02, 0x01, 0xff, 0x42, + 0x13, 0x00, 0xfe, 0x21, 0x01, 0x43, 0xe9, 0x70, 0xff, 0x21, 0x01, 0x44, + 0xd0, 0x0c, 0x1a, 0x25, 0x01, 0x44, 0x6b, 0x75, 0x00, 0x22, 0x81, 0x86, + 0x01, 0x49, 0x8d, 0x60, 0x02, 0x22, 0x01, 0xa8, 0x72, 0x42, 0x29, 0x02, + 0x04, 0x22, 0x01, 0xab, 0x53, 0x02, 0x74, 0x00, 0x43, 0x4a, 0xc1, 0xad, + 0x0b, 0x22, 0x01, 0xae, 0x33, 0x43, 0xef, 0x0e, 0x1c, 0x25, 0x81, 0x26, + 0xb3, 0x0f, 0xb4, 0x01, 0xff, 0x43, 0x11, 0x45, 0x1e, 0x25, 0x01, 0x43, + 0xd2, 0x0e, 0x10, 0x22, 0x41, 0x42, 0x41, 0x00, 0x8b, 0x23, 0x01, 0xa9, + 0x01, 0xff, 0x49, 0x18, 0x4d, 0x0e, 0x22, 0x01, 0x4a, 0x45, 0xac, 0x0f, + 0x22, 0x41, 0x52, 0x7f, 0x3d, 0x1d, 0x25, 0x41, 0xe5, 0x0c, 0x22, 0x01, + 0xf5, 0x0d, 0x22, 0x41, 0x49, 0x18, 0x4d, 0x09, 0x22, 0x01, 0x43, 0x24, + 0x02, 0x0a, 0x22, 0x41, 0x02, 0xe8, 0x01, 0x04, 0xe9, 0x08, 0x22, 0x41, + 0xd2, 0x05, 0x22, 0x01, 0xd3, 0x06, 0x22, 0xc1, 0x00, 0x49, 0x18, 0x4d, + 0x07, 0x22, 0x41, 0x42, 0x13, 0x00, 0x1b, 0x25, 0x01, 0x4b, 0x2b, 0x9d, + 0x03, 0x22, 0x41, 0x80, 0x01, 0xff, 0x48, 0xa8, 0xb4, 0x8a, 0x23, 0x01, + 0x44, 0x82, 0x60, 0x01, 0x22, 0x41, 0x46, 0x1c, 0x7c, 0x15, 0x22, 0x81, + 0x06, 0x46, 0xd7, 0x05, 0x14, 0x22, 0x41, 0x4a, 0x2c, 0x9d, 0x89, 0x23, + 0x41, 0xec, 0xf8, 0x21, 0x01, 0x44, 0x3d, 0xf1, 0xf9, 0x21, 0x01, 0x42, + 0xa4, 0x02, 0xfa, 0x21, 0x41, 0x02, 0x24, 0x02, 0xd0, 0x03, 0x44, 0x59, + 0xf0, 0xf1, 0x21, 0x01, 0x02, 0xb5, 0x10, 0x1d, 0xec, 0xf2, 0x21, 0x81, + 0x12, 0xed, 0xf4, 0x21, 0xc1, 0x00, 0x4a, 0xff, 0x5d, 0xf5, 0x21, 0xc1, + 0x00, 0x48, 0x68, 0xc2, 0xf6, 0x21, 0x41, 0x4a, 0x29, 0x9e, 0xf3, 0x21, + 0x41, 0x90, 0xe8, 0x02, 0x91, 0xd9, 0x02, 0x92, 0xad, 0x02, 0x93, 0x8c, + 0x02, 0x94, 0xae, 0x01, 0x43, 0xbc, 0xf3, 0xff, 0x24, 0x01, 0x96, 0x0f, + 0x97, 0x01, 0xff, 0x42, 0x52, 0xb5, 0x17, 0x25, 0x01, 0x42, 0xfc, 0xf4, + 0x18, 0x25, 0x41, 0x42, 0xb2, 0x75, 0x00, 0x25, 0x01, 0x42, 0xea, 0xf4, + 0x01, 0x25, 0x81, 0x4a, 0x42, 0xf2, 0xf4, 0x0c, 0x25, 0x01, 0x42, 0xfa, + 0xf4, 0x0d, 0x25, 0xc1, 0x00, 0x07, 0x27, 0x02, 0x01, 0xff, 0x43, 0x25, + 0xf4, 0x0e, 0x25, 0x01, 0x42, 0x24, 0x02, 0x0f, 0x25, 0x01, 0x43, 0xf0, + 0x06, 0x10, 0x25, 0x81, 0x1f, 0x42, 0x51, 0x03, 0x12, 0x25, 0x01, 0x55, + 0x7c, 0x3d, 0x13, 0x25, 0x01, 0x4d, 0x8f, 0x88, 0x14, 0x25, 0x01, 0xb5, + 0x01, 0xff, 0xe4, 0x15, 0x25, 0x01, 0x44, 0xf7, 0xcb, 0x16, 0x25, 0x41, + 0x45, 0xbb, 0x3f, 0x11, 0x25, 0x41, 0x07, 0x27, 0x02, 0x01, 0xff, 0x43, + 0xf9, 0x03, 0x02, 0x25, 0x01, 0x43, 0xe9, 0x70, 0x03, 0x25, 0x01, 0x4e, + 0x21, 0x77, 0x04, 0x25, 0x01, 0x43, 0xa4, 0xb4, 0x05, 0x25, 0x01, 0x42, + 0x74, 0x00, 0x06, 0x25, 0x01, 0xb4, 0x11, 0xb5, 0x01, 0xff, 0xd2, 0x09, + 0x25, 0x01, 0xe4, 0x0a, 0x25, 0x01, 0x44, 0xf7, 0xcb, 0x0b, 0x25, 0x41, + 0x42, 0x17, 0x00, 0x07, 0x25, 0x01, 0xe5, 0x08, 0x25, 0x41, 0x94, 0x29, + 0x95, 0x1f, 0x42, 0x17, 0xf4, 0xf9, 0x24, 0x01, 0x42, 0xf5, 0xf4, 0xfa, + 0x24, 0x01, 0x99, 0x01, 0xff, 0xd0, 0xfb, 0x24, 0x01, 0xd2, 0xfc, 0x24, + 0x01, 0xd3, 0xfd, 0x24, 0x01, 0xd5, 0xfe, 0x24, 0x41, 0xd0, 0xf7, 0x24, + 0x01, 0xd7, 0xf8, 0x24, 0x41, 0xd1, 0xf0, 0x24, 0x01, 0xd9, 0xf1, 0x24, + 0xc1, 0x00, 0x07, 0x27, 0x02, 0x01, 0xff, 0x42, 0x1e, 0x01, 0xf2, 0x24, + 0x01, 0x43, 0xf0, 0x06, 0xf3, 0x24, 0x01, 0x09, 0x7c, 0x3d, 0x06, 0x4a, + 0x71, 0xb2, 0xf6, 0x24, 0x41, 0x43, 0x8e, 0x3d, 0xf4, 0x24, 0x01, 0x4c, + 0x85, 0x3d, 0xf5, 0x24, 0x41, 0x94, 0x10, 0x98, 0x06, 0x42, 0x06, 0xf5, + 0xef, 0x24, 0x41, 0xd3, 0xed, 0x24, 0x01, 0xd4, 0xee, 0x24, 0x41, 0xd3, + 0xea, 0x24, 0x01, 0xd7, 0xeb, 0x24, 0x01, 0xd8, 0xec, 0x24, 0x41, 0x91, + 0x1f, 0x92, 0x11, 0x42, 0xf4, 0xf4, 0xe7, 0x24, 0x01, 0x96, 0x01, 0xff, + 0xd5, 0xe8, 0x24, 0x01, 0xd6, 0xe9, 0x24, 0x41, 0xd0, 0xe4, 0x24, 0x01, + 0xd5, 0xe5, 0x24, 0x01, 0xd8, 0xe6, 0x24, 0x41, 0xd0, 0xe2, 0x24, 0x01, + 0xd9, 0xe3, 0x24, 0x41, 0x42, 0xaa, 0xf3, 0xe0, 0x24, 0x01, 0x42, 0x14, + 0xf4, 0xe1, 0x24, 0x41, 0x42, 0xa9, 0xf3, 0xd5, 0x24, 0x01, 0x92, 0x2e, + 0x42, 0xaa, 0xf3, 0xd8, 0x24, 0x01, 0x95, 0x1e, 0x42, 0xc8, 0xf3, 0xdb, + 0x24, 0x01, 0x54, 0x14, 0x40, 0xdc, 0x24, 0x01, 0x98, 0x06, 0x42, 0x08, + 0xf5, 0xdf, 0x24, 0x41, 0xd0, 0xdd, 0x24, 0x01, 0x4e, 0xa7, 0x75, 0xde, + 0x24, 0x41, 0xd0, 0xd9, 0x24, 0x01, 0xd1, 0xda, 0x24, 0x41, 0xd1, 0xd6, + 0x24, 0x01, 0xd5, 0xd7, 0x24, 0x41, 0xe2, 0xb8, 0x21, 0x81, 0x22, 0xf2, + 0xec, 0x21, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x44, 0xbc, 0x3f, 0xef, 0x21, + 0x81, 0x0d, 0x49, 0x38, 0xa6, 0xed, 0x21, 0xc1, 0x00, 0x49, 0x76, 0xa9, + 0xee, 0x21, 0x41, 0x54, 0xb0, 0x3f, 0xf0, 0x21, 0x41, 0x80, 0x01, 0xff, + 0x47, 0xd6, 0x05, 0xeb, 0x21, 0x01, 0x06, 0x28, 0x02, 0x01, 0xff, 0xe1, + 0xb9, 0x21, 0x81, 0xa0, 0x02, 0xa2, 0x93, 0x02, 0x43, 0x27, 0x18, 0xc2, + 0x21, 0x01, 0x42, 0x92, 0x01, 0xc3, 0x21, 0x01, 0xa7, 0xea, 0x01, 0xa8, + 0xd8, 0x01, 0xa9, 0xb9, 0x01, 0xab, 0x9b, 0x01, 0xac, 0x83, 0x01, 0xad, + 0x70, 0x42, 0xcd, 0x05, 0xdb, 0x21, 0x01, 0xb3, 0x3d, 0xb4, 0x29, 0xf5, + 0xe5, 0x21, 0x81, 0x06, 0x4a, 0x1f, 0xb4, 0xd4, 0x24, 0x41, 0x06, 0x57, + 0x28, 0x10, 0x4a, 0xeb, 0xa6, 0xe8, 0x21, 0x01, 0xe4, 0xe9, 0x21, 0x01, + 0x42, 0xa4, 0x02, 0xea, 0x21, 0x41, 0xe1, 0xe6, 0x21, 0x01, 0x48, 0x19, + 0x74, 0xe7, 0x21, 0x41, 0xa1, 0x06, 0x58, 0x56, 0x28, 0xe4, 0x21, 0x41, + 0xe7, 0xe2, 0x21, 0x01, 0x42, 0x12, 0x45, 0xe3, 0x21, 0x41, 0xa8, 0x06, + 0x42, 0x48, 0x04, 0xe1, 0x21, 0x41, 0x4a, 0x75, 0xa9, 0xdc, 0x21, 0x01, + 0x0e, 0xef, 0x78, 0x0d, 0x42, 0x08, 0x67, 0xdf, 0x21, 0xc1, 0x00, 0x4a, + 0xfb, 0xa5, 0xe0, 0x21, 0x41, 0x4a, 0x8d, 0xaf, 0xdd, 0x21, 0x01, 0x44, + 0x82, 0x60, 0xde, 0x21, 0x41, 0xe5, 0xd8, 0x21, 0x81, 0x06, 0x43, 0x30, + 0x7c, 0xda, 0x21, 0x41, 0x48, 0xc3, 0xad, 0xd9, 0x21, 0x41, 0x44, 0x23, + 0x02, 0xd4, 0x21, 0x01, 0x43, 0xd1, 0x0c, 0xd5, 0x21, 0x01, 0xf5, 0xd6, + 0x21, 0xc1, 0x00, 0xec, 0xd7, 0x21, 0x41, 0xe9, 0xcf, 0x21, 0x81, 0x12, + 0xb5, 0x01, 0xff, 0xd3, 0xd1, 0x21, 0x01, 0xec, 0xd2, 0x21, 0xc1, 0x00, + 0x4f, 0x9c, 0x69, 0xd3, 0x21, 0x41, 0xee, 0xd0, 0x21, 0x41, 0x47, 0xd1, + 0x69, 0xcb, 0x21, 0x01, 0xed, 0xcc, 0x21, 0xc1, 0x00, 0x06, 0x57, 0x28, + 0x01, 0xff, 0x42, 0x22, 0x00, 0xcd, 0x21, 0x01, 0x42, 0xc7, 0x15, 0xce, + 0x21, 0x41, 0xe1, 0xc8, 0x21, 0x81, 0x06, 0x4b, 0x36, 0x9d, 0xca, 0x21, + 0x41, 0xec, 0xc9, 0x21, 0x41, 0xe1, 0xc4, 0x21, 0x81, 0x11, 0xe9, 0x88, + 0x23, 0x01, 0x42, 0xb2, 0x0c, 0xc6, 0x21, 0xc1, 0x00, 0x49, 0x95, 0xb4, + 0xc7, 0x21, 0x41, 0xf2, 0xc5, 0x21, 0x41, 0x42, 0xe8, 0x01, 0xc0, 0x21, + 0x01, 0xe9, 0xc1, 0x21, 0x41, 0x06, 0x57, 0x28, 0x0e, 0xec, 0xbd, 0x21, + 0x01, 0xee, 0xbe, 0x21, 0x01, 0x4c, 0x1f, 0x95, 0xbf, 0x21, 0x41, 0x4a, + 0x25, 0xa9, 0xba, 0x21, 0x01, 0x43, 0x6c, 0x1e, 0xbb, 0x21, 0x01, 0x43, + 0xe9, 0x20, 0xbc, 0x21, 0x41, 0xe1, 0x57, 0x21, 0x81, 0x84, 0x01, 0x44, + 0x6b, 0x75, 0x9f, 0x21, 0x01, 0xe9, 0xa0, 0x21, 0x81, 0x44, 0xf5, 0xaa, + 0x21, 0x81, 0x06, 0x45, 0x68, 0xec, 0xb6, 0x21, 0x41, 0x69, 0xea, 0x03, + 0xab, 0x21, 0x01, 0xd3, 0xac, 0x21, 0x01, 0xd4, 0xad, 0x21, 0x81, 0x24, + 0xd7, 0xaf, 0x21, 0x01, 0xec, 0xb0, 0x21, 0x81, 0x15, 0xee, 0xb2, 0x21, + 0x01, 0xf2, 0xb3, 0x21, 0x81, 0x06, 0x44, 0x06, 0x67, 0xb5, 0x21, 0x41, + 0x4d, 0x9f, 0x7f, 0xb4, 0x21, 0x41, 0x45, 0xbb, 0x3f, 0xb1, 0x21, 0x41, + 0x4d, 0xb9, 0x7f, 0xae, 0x21, 0x41, 0x07, 0x27, 0x02, 0x22, 0xe4, 0xa4, + 0x21, 0x01, 0xee, 0xa5, 0x21, 0x01, 0xb3, 0x01, 0xff, 0x42, 0x13, 0x00, + 0xa6, 0x21, 0x01, 0xe8, 0xa7, 0x21, 0x01, 0x43, 0x21, 0x6f, 0xa8, 0x21, + 0xc1, 0x00, 0x4c, 0x5f, 0x8b, 0xa9, 0x21, 0x41, 0x43, 0xe9, 0x70, 0xa1, + 0x21, 0x01, 0xf5, 0xa2, 0x21, 0xc1, 0x00, 0xe4, 0xa3, 0x21, 0x41, 0x07, + 0x27, 0x02, 0x72, 0xd2, 0x8d, 0x21, 0x81, 0x67, 0xe2, 0x8f, 0x21, 0x01, + 0xa4, 0x4a, 0xeb, 0x95, 0x21, 0x81, 0x3f, 0xec, 0x97, 0x21, 0x81, 0x26, + 0xad, 0x1c, 0x49, 0xd4, 0xbd, 0x6f, 0x23, 0x01, 0x44, 0x1d, 0x02, 0x9c, + 0x21, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x60, 0x22, 0x02, 0x9d, 0x21, 0x01, + 0x6c, 0x16, 0x02, 0x9e, 0x21, 0x41, 0xd2, 0x9a, 0x21, 0x01, 0xd4, 0x9b, + 0x21, 0x41, 0x80, 0x06, 0x42, 0x57, 0x00, 0x27, 0x23, 0x41, 0x4c, 0x9f, + 0x8d, 0x99, 0x21, 0x01, 0x49, 0x2d, 0x9d, 0x98, 0x21, 0x41, 0x4f, 0xc9, + 0x69, 0x96, 0x21, 0x41, 0xd2, 0x90, 0x21, 0x01, 0xd3, 0x91, 0x21, 0x01, + 0xd4, 0x92, 0x21, 0x01, 0xd5, 0x93, 0x21, 0xc1, 0x00, 0x4a, 0xf1, 0xa5, + 0x94, 0x21, 0x41, 0x4d, 0x5e, 0x7f, 0x8e, 0x21, 0x41, 0xe1, 0x58, 0x21, + 0x81, 0xdf, 0x02, 0xa2, 0xc4, 0x02, 0xa5, 0xb5, 0x02, 0xa7, 0xe8, 0x01, + 0x4d, 0xf0, 0x03, 0x82, 0x23, 0x01, 0xa9, 0xd5, 0x01, 0xab, 0xc0, 0x01, + 0xac, 0xb0, 0x01, 0xad, 0x86, 0x01, 0xae, 0x7a, 0xb0, 0x70, 0x42, 0x3d, + 0x00, 0x7d, 0x21, 0x01, 0xb3, 0x3a, 0xb4, 0x2e, 0xf5, 0x87, 0x21, 0x81, + 0x06, 0x42, 0xe1, 0x33, 0x8c, 0x21, 0x41, 0x44, 0xab, 0xeb, 0xd2, 0x24, + 0x01, 0xd2, 0x88, 0x21, 0x01, 0xe4, 0x89, 0x21, 0x01, 0x4c, 0x43, 0x92, + 0x8a, 0x21, 0x01, 0xf2, 0xd3, 0x24, 0x81, 0x06, 0x42, 0xa4, 0x02, 0x8b, + 0x21, 0x41, 0xd2, 0x87, 0x23, 0x41, 0x42, 0x17, 0x00, 0x86, 0x21, 0x01, + 0xf5, 0x86, 0x23, 0x41, 0xe1, 0x7e, 0x21, 0x81, 0x25, 0xa8, 0x0c, 0x42, + 0x3f, 0x00, 0x84, 0x21, 0x01, 0x44, 0xd1, 0xf2, 0x85, 0x21, 0x41, 0xe1, + 0x80, 0x21, 0x01, 0xe5, 0x81, 0x21, 0x01, 0x42, 0x03, 0x00, 0x82, 0x21, + 0x01, 0xf5, 0x83, 0x21, 0xc1, 0x00, 0xec, 0x85, 0x23, 0x41, 0xf2, 0x7f, + 0x21, 0x41, 0xe1, 0x84, 0x23, 0x01, 0xe9, 0x7c, 0x21, 0x41, 0xe5, 0x7a, + 0x21, 0x01, 0x42, 0x42, 0x0b, 0x7b, 0x21, 0x41, 0xe5, 0x74, 0x21, 0x81, + 0x0b, 0xe9, 0x78, 0x21, 0xc1, 0x00, 0x4b, 0xab, 0x97, 0x79, 0x21, 0x41, + 0x06, 0x57, 0x28, 0x01, 0xff, 0x42, 0x6c, 0x02, 0x75, 0x21, 0x01, 0x42, + 0xf1, 0x06, 0x76, 0x21, 0x01, 0x42, 0x77, 0x00, 0x77, 0x21, 0x41, 0xe9, + 0x72, 0x21, 0x01, 0xf5, 0x73, 0x21, 0xc1, 0x00, 0xed, 0x83, 0x23, 0x41, + 0xe1, 0xd1, 0x24, 0x81, 0x09, 0xe9, 0x70, 0x21, 0xc1, 0x00, 0xe4, 0x71, + 0x21, 0x41, 0xeb, 0x6f, 0x21, 0x41, 0x42, 0xf1, 0x06, 0x6d, 0x21, 0x01, + 0xed, 0x6e, 0x21, 0x41, 0xe1, 0x62, 0x21, 0x81, 0x30, 0xe9, 0x67, 0x21, + 0x81, 0x0f, 0xf5, 0x6b, 0x21, 0xc1, 0x00, 0xe4, 0x81, 0x23, 0x01, 0x42, + 0x1a, 0xf5, 0x6c, 0x21, 0x41, 0x42, 0xbe, 0x42, 0x68, 0x21, 0x01, 0x42, + 0xa4, 0x02, 0x80, 0x23, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x4d, 0x08, 0x52, + 0x6a, 0x21, 0x01, 0x48, 0x3b, 0x57, 0x69, 0x21, 0x41, 0xec, 0x63, 0x21, + 0x01, 0x47, 0x8f, 0x60, 0x64, 0x21, 0x01, 0xf2, 0x65, 0x21, 0xc1, 0x00, + 0x51, 0x43, 0x57, 0x66, 0x21, 0x41, 0x44, 0x93, 0xaf, 0x60, 0x21, 0x01, + 0x43, 0xfa, 0x03, 0x61, 0x21, 0x41, 0xa1, 0x08, 0xe9, 0x5f, 0x21, 0x01, + 0xf5, 0xd0, 0x24, 0x41, 0xe4, 0x5c, 0x21, 0x01, 0x43, 0x22, 0x02, 0x5d, + 0x21, 0x01, 0xf2, 0x5e, 0x21, 0x41, 0xe4, 0x59, 0x21, 0x81, 0x13, 0x44, + 0x95, 0xf1, 0x7e, 0x23, 0x01, 0x02, 0xa4, 0x02, 0x01, 0xff, 0xd2, 0x5b, + 0x21, 0x01, 0xd3, 0x7f, 0x23, 0x41, 0x49, 0x9e, 0xb4, 0x5a, 0x21, 0x41, + 0x42, 0x19, 0x00, 0x40, 0x21, 0x01, 0xe2, 0x41, 0x21, 0x01, 0x43, 0x6c, + 0x7f, 0x42, 0x21, 0x81, 0x67, 0xe7, 0x45, 0x21, 0x81, 0x42, 0xec, 0x4b, + 0x21, 0x81, 0x33, 0xed, 0x4e, 0x21, 0x81, 0x0e, 0xee, 0x54, 0x21, 0x01, + 0xf2, 0x55, 0x21, 0x01, 0x42, 0xa4, 0x02, 0x56, 0x21, 0x41, 0x80, 0x06, + 0x42, 0x9e, 0x01, 0x53, 0x21, 0x41, 0x4b, 0x76, 0x9a, 0x50, 0x21, 0x01, + 0x4b, 0xd2, 0xa0, 0x51, 0x21, 0x01, 0x47, 0xd6, 0x05, 0x52, 0x21, 0x01, + 0x4a, 0x0a, 0x45, 0x4f, 0x21, 0x41, 0x50, 0x86, 0x60, 0x4c, 0x21, 0x01, + 0xd2, 0x4d, 0x21, 0x41, 0xe9, 0x46, 0x21, 0xc1, 0x00, 0x80, 0x01, 0xff, + 0x43, 0x1f, 0xf4, 0x47, 0x21, 0x01, 0x44, 0xbc, 0x3f, 0x4a, 0x21, 0x01, + 0x62, 0x9a, 0x0c, 0x49, 0x21, 0x01, 0x42, 0x0d, 0x00, 0x48, 0x21, 0x41, + 0x0b, 0x95, 0x97, 0x01, 0xff, 0x43, 0x07, 0x36, 0x43, 0x21, 0x01, 0x47, + 0xd6, 0x05, 0x44, 0x21, 0x41, 0xe1, 0x29, 0x21, 0x81, 0x7e, 0xe9, 0x2d, + 0x21, 0x81, 0x3b, 0xf5, 0x37, 0x21, 0xc1, 0x00, 0x42, 0x06, 0x61, 0x38, + 0x21, 0x81, 0x0c, 0x42, 0x53, 0xed, 0x3e, 0x21, 0x01, 0x42, 0xa4, 0x02, + 0x7d, 0x23, 0x41, 0x07, 0x27, 0x02, 0x01, 0xff, 0x42, 0x1a, 0x00, 0x39, + 0x21, 0x01, 0x43, 0x22, 0x00, 0x3a, 0x21, 0x01, 0x46, 0x1b, 0x02, 0x3b, + 0x21, 0x01, 0x44, 0xdb, 0x91, 0x3c, 0x21, 0x01, 0x42, 0xb2, 0x0c, 0x3d, + 0x21, 0x41, 0x07, 0x27, 0x02, 0x01, 0xff, 0x43, 0xf9, 0x03, 0x2e, 0x21, + 0x81, 0x28, 0x43, 0xe9, 0x70, 0x30, 0x21, 0x01, 0x44, 0xd0, 0x0c, 0x31, + 0x21, 0x01, 0x43, 0x5f, 0x1e, 0x32, 0x21, 0x01, 0x43, 0x3b, 0x04, 0x33, + 0x21, 0x01, 0x43, 0xdc, 0x22, 0x34, 0x21, 0x01, 0x43, 0x8e, 0x06, 0x35, + 0x21, 0x01, 0xf5, 0x36, 0x21, 0x41, 0x52, 0xea, 0x03, 0xcf, 0x24, 0x01, + 0xd2, 0x2f, 0x21, 0x41, 0x80, 0x04, 0xec, 0x2c, 0x21, 0x41, 0x44, 0xbc, + 0x3f, 0x2b, 0x21, 0x01, 0x44, 0x82, 0x60, 0x2a, 0x21, 0xc1, 0x00, 0x45, + 0xbb, 0x3f, 0xce, 0x24, 0x41, 0xe1, 0xb5, 0x20, 0x81, 0xcc, 0x02, 0xa5, + 0xad, 0x02, 0xe9, 0x00, 0x21, 0x81, 0x87, 0x01, 0xf5, 0x16, 0x21, 0xc1, + 0x00, 0x4c, 0x17, 0x8b, 0x17, 0x21, 0x01, 0xd2, 0x18, 0x21, 0x81, 0x4a, + 0xe4, 0x1e, 0x21, 0x81, 0x25, 0xec, 0x22, 0x21, 0x01, 0xed, 0x23, 0x21, + 0x81, 0x16, 0xf2, 0x25, 0x21, 0xc1, 0x00, 0xd7, 0x26, 0x21, 0x01, 0xb5, + 0x01, 0xff, 0xee, 0x27, 0x21, 0x01, 0x42, 0xa4, 0x02, 0x28, 0x21, 0x41, + 0x4a, 0x37, 0xa6, 0x24, 0x21, 0x41, 0x80, 0x01, 0xff, 0x4e, 0xe7, 0x7a, + 0x21, 0x21, 0x01, 0x54, 0x00, 0x45, 0xcd, 0x24, 0x01, 0x06, 0x28, 0x02, + 0x01, 0xff, 0x4a, 0x31, 0xa7, 0x1f, 0x21, 0x01, 0x43, 0x06, 0x5e, 0x20, + 0x21, 0x41, 0x80, 0x01, 0xff, 0x44, 0xbc, 0x3f, 0x1d, 0x21, 0x01, 0x06, + 0x28, 0x02, 0x01, 0xff, 0x48, 0xd0, 0x69, 0xcc, 0x24, 0x01, 0x43, 0x5c, + 0x60, 0x19, 0x21, 0x81, 0x0c, 0x43, 0xdc, 0x22, 0x1b, 0x21, 0x01, 0x4d, + 0x68, 0x88, 0x1c, 0x21, 0x41, 0x4f, 0xc9, 0x69, 0x1a, 0x21, 0x41, 0x80, + 0x8a, 0x01, 0xd4, 0x04, 0x21, 0x81, 0x76, 0x43, 0x6c, 0x7f, 0x07, 0x21, + 0x01, 0xe7, 0x7c, 0x23, 0x01, 0xb2, 0x37, 0xb3, 0x01, 0xff, 0x42, 0x13, + 0x00, 0x10, 0x21, 0x01, 0xe8, 0x11, 0x21, 0xc1, 0x00, 0x80, 0x01, 0xff, + 0x4d, 0x08, 0x52, 0x12, 0x21, 0x01, 0xb4, 0x01, 0xff, 0x43, 0x83, 0x60, + 0x15, 0x21, 0x01, 0x05, 0x29, 0x02, 0x01, 0xff, 0x43, 0xe9, 0x70, 0x13, + 0x21, 0x01, 0x52, 0x03, 0x52, 0xcb, 0x24, 0x01, 0x44, 0x10, 0x45, 0x14, + 0x21, 0x41, 0xd2, 0x08, 0x21, 0x81, 0x28, 0xd3, 0x0a, 0x21, 0xc1, 0x00, + 0x07, 0x27, 0x02, 0x01, 0xff, 0x4a, 0x27, 0xa7, 0x0b, 0x21, 0x01, 0x49, + 0x8d, 0x60, 0x0c, 0x21, 0x01, 0x43, 0xf0, 0x06, 0x0d, 0x21, 0x01, 0x4b, + 0x25, 0x9f, 0x0e, 0x21, 0x01, 0x42, 0xbb, 0x09, 0x0f, 0x21, 0x41, 0x45, + 0xbb, 0x3f, 0x09, 0x21, 0x41, 0x80, 0x01, 0xff, 0x4c, 0x93, 0x8d, 0x06, + 0x21, 0x01, 0x48, 0x90, 0xc9, 0x05, 0x21, 0x41, 0x4b, 0x08, 0x52, 0x03, + 0x21, 0x01, 0x06, 0x28, 0x02, 0x01, 0xff, 0xe5, 0x01, 0x21, 0x01, 0xf5, + 0x02, 0x21, 0x41, 0x42, 0x54, 0xed, 0x7b, 0x23, 0x01, 0x45, 0xf1, 0xea, + 0xfe, 0x20, 0xc1, 0x00, 0x07, 0x27, 0x02, 0x01, 0xff, 0x43, 0x06, 0x5e, + 0xff, 0x20, 0x01, 0xf5, 0xca, 0x24, 0x41, 0x45, 0xbb, 0x3f, 0xb6, 0x20, + 0x01, 0xd2, 0xb7, 0x20, 0x81, 0x64, 0x42, 0x16, 0x00, 0xee, 0x20, 0x81, + 0x4e, 0xe4, 0xf0, 0x20, 0x81, 0x43, 0xec, 0xf2, 0x20, 0x81, 0x32, 0xed, + 0xf5, 0x20, 0x01, 0xee, 0xf6, 0x20, 0x81, 0x0f, 0xf2, 0xfb, 0x20, 0x81, + 0x06, 0x44, 0x36, 0x39, 0xfd, 0x20, 0x41, 0xd3, 0xfc, 0x20, 0x41, 0xd2, + 0xf7, 0x20, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x4d, 0xb4, 0x81, 0xfa, 0x20, + 0x01, 0x49, 0xb0, 0xbd, 0xf9, 0x20, 0x01, 0x44, 0x82, 0x60, 0xf8, 0x20, + 0x41, 0x5a, 0x5e, 0x1e, 0xf3, 0x20, 0x01, 0x42, 0x57, 0x00, 0xf4, 0x20, + 0x41, 0x56, 0x62, 0x1e, 0xf1, 0x20, 0x41, 0x80, 0x01, 0xff, 0x4d, 0xa7, + 0x81, 0xef, 0x20, 0x01, 0x56, 0xa4, 0x2c, 0xc9, 0x24, 0x41, 0x80, 0x01, + 0xff, 0x48, 0x88, 0xc9, 0xed, 0x20, 0x01, 0x06, 0x28, 0x02, 0x01, 0xff, + 0xa1, 0xb0, 0x03, 0xa2, 0x8e, 0x03, 0xa4, 0xd9, 0x02, 0xa5, 0xba, 0x02, + 0xa7, 0x80, 0x02, 0xa8, 0xd6, 0x01, 0xa9, 0xc7, 0x01, 0xab, 0x9c, 0x01, + 0xac, 0x83, 0x01, 0xad, 0x71, 0xae, 0x4c, 0x42, 0xbb, 0x09, 0xe2, 0x20, + 0x01, 0xb3, 0x1c, 0x44, 0x10, 0x45, 0xe9, 0x20, 0x01, 0xf5, 0xea, 0x20, + 0x81, 0x06, 0x44, 0x69, 0xf3, 0xc8, 0x24, 0x41, 0xe4, 0xeb, 0x20, 0xc1, + 0x00, 0x48, 0x60, 0xc2, 0xec, 0x20, 0x41, 0xa1, 0x1e, 0xa8, 0x06, 0x42, + 0x48, 0x04, 0xe8, 0x20, 0x41, 0xe5, 0xe5, 0x20, 0x81, 0x0b, 0xa9, 0x01, + 0xff, 0xe4, 0xe7, 0x20, 0x01, 0xed, 0xc7, 0x24, 0x41, 0x49, 0xb9, 0xb4, + 0xe6, 0x20, 0x41, 0xec, 0xe3, 0x20, 0x01, 0xf2, 0xe4, 0x20, 0x41, 0xe5, + 0xc4, 0x24, 0x81, 0x0d, 0x42, 0x42, 0x0b, 0xe0, 0x20, 0xc1, 0x00, 0x49, + 0xd6, 0x22, 0xe1, 0x20, 0x41, 0x06, 0x57, 0x28, 0x01, 0xff, 0x42, 0x73, + 0x9b, 0xc5, 0x24, 0x01, 0x42, 0xf1, 0x06, 0xc6, 0x24, 0x41, 0x49, 0xc2, + 0xad, 0xde, 0x20, 0x01, 0xe9, 0xdf, 0x20, 0x01, 0x43, 0x30, 0x7c, 0xc3, + 0x24, 0x41, 0xe1, 0xdd, 0x20, 0x81, 0x06, 0x42, 0x1c, 0x58, 0xc2, 0x24, + 0x41, 0xed, 0xc0, 0x24, 0xc1, 0x00, 0x4a, 0xff, 0x5d, 0xc1, 0x24, 0x41, + 0xa1, 0x1c, 0x42, 0x03, 0x00, 0xda, 0x20, 0x81, 0x0f, 0xb5, 0x01, 0xff, + 0x49, 0x5b, 0xb5, 0xdc, 0x20, 0x01, 0x50, 0x06, 0x67, 0xbf, 0x24, 0x41, + 0x49, 0xa7, 0xb4, 0xdb, 0x20, 0x41, 0xeb, 0xd8, 0x20, 0x01, 0x44, 0x1d, + 0x02, 0xd9, 0x20, 0x41, 0x47, 0xd1, 0x69, 0xd6, 0x20, 0x01, 0x53, 0x0e, + 0x4d, 0xd7, 0x20, 0x41, 0xa1, 0x0c, 0x49, 0xdb, 0xb9, 0xd4, 0x20, 0x01, + 0x43, 0x5e, 0xf0, 0xd5, 0x20, 0x41, 0x06, 0x57, 0x28, 0x0b, 0xec, 0xd2, + 0x20, 0xc1, 0x00, 0x48, 0xa7, 0xb4, 0xd3, 0x20, 0x41, 0xe1, 0xbe, 0x24, + 0x01, 0x4c, 0x83, 0x91, 0xd1, 0x20, 0x41, 0xe1, 0xbb, 0x24, 0x81, 0x16, + 0xe9, 0xcd, 0x20, 0xc1, 0x00, 0xd4, 0xce, 0x20, 0x81, 0x06, 0x4a, 0xdd, + 0xaf, 0xd0, 0x20, 0x41, 0x47, 0x57, 0x28, 0xcf, 0x20, 0x41, 0x47, 0x8f, + 0x60, 0xcb, 0x20, 0x01, 0xf2, 0xcc, 0x20, 0xc1, 0x00, 0x06, 0x57, 0x28, + 0x01, 0xff, 0x42, 0x00, 0x00, 0xbc, 0x24, 0x01, 0x42, 0xcd, 0x05, 0xbd, + 0x24, 0x41, 0xec, 0xc7, 0x20, 0x81, 0x11, 0xee, 0xc9, 0x20, 0x81, 0x06, + 0x43, 0xda, 0x21, 0xba, 0x24, 0x41, 0x50, 0x86, 0x60, 0xca, 0x20, 0x41, + 0x48, 0xa7, 0xb4, 0xc8, 0x20, 0x41, 0xe1, 0xc3, 0x20, 0x01, 0xe9, 0xc4, + 0x20, 0x81, 0x18, 0xb5, 0x01, 0xff, 0xe2, 0xc6, 0x20, 0x01, 0x08, 0x21, + 0x7c, 0x01, 0xff, 0x48, 0xd0, 0x69, 0xb8, 0x24, 0x01, 0x46, 0x1b, 0x02, + 0xb9, 0x24, 0x41, 0x02, 0x49, 0x04, 0x01, 0xff, 0x44, 0xbc, 0x3f, 0xb7, + 0x24, 0x01, 0x49, 0x38, 0xa6, 0xc5, 0x20, 0x41, 0xa1, 0x0d, 0x42, 0x42, + 0x00, 0xc1, 0x20, 0xc1, 0x00, 0x48, 0x65, 0xbe, 0xc2, 0x20, 0x41, 0xe4, + 0xbf, 0x20, 0x01, 0x44, 0xbc, 0x42, 0xb6, 0x24, 0x01, 0x49, 0x64, 0xbe, + 0xc0, 0x20, 0x41, 0x06, 0x57, 0x28, 0x23, 0x50, 0x06, 0x61, 0xbb, 0x20, + 0x01, 0xee, 0xbc, 0x20, 0x81, 0x12, 0x42, 0xa4, 0x02, 0xbd, 0x20, 0xc1, + 0x00, 0xd2, 0x7a, 0x23, 0xc1, 0x00, 0x49, 0x8c, 0xb4, 0xbe, 0x20, 0x41, + 0x50, 0x56, 0x60, 0x79, 0x23, 0x41, 0x4a, 0x25, 0xa9, 0xb8, 0x20, 0x01, + 0x42, 0x22, 0x00, 0xb9, 0x20, 0x01, 0x43, 0xf0, 0x06, 0xba, 0x20, 0x41, + 0x80, 0xe7, 0x02, 0xd2, 0x8d, 0x20, 0x81, 0xac, 0x02, 0x43, 0x04, 0x06, + 0x94, 0x20, 0x01, 0x43, 0x8f, 0xe7, 0x95, 0x20, 0x01, 0xec, 0x96, 0x20, + 0x01, 0xee, 0x97, 0x20, 0x81, 0xe9, 0x01, 0xb2, 0xd3, 0x01, 0x43, 0xfa, + 0x03, 0xa0, 0x20, 0x81, 0xc5, 0x01, 0x43, 0x4b, 0x0a, 0xa1, 0x20, 0xc1, + 0x00, 0x80, 0x01, 0xff, 0x0e, 0x1b, 0x7c, 0x88, 0x01, 0x06, 0x28, 0x02, + 0x01, 0xff, 0xe1, 0xa2, 0x20, 0x81, 0x6d, 0x43, 0xe9, 0x70, 0xa6, 0x20, + 0x01, 0x49, 0x21, 0x77, 0xa7, 0x20, 0x81, 0x5a, 0x43, 0xec, 0x7a, 0x77, + 0x23, 0x01, 0x42, 0x22, 0x00, 0xa9, 0x20, 0x81, 0x47, 0x48, 0xd0, 0x69, + 0xab, 0x20, 0x01, 0xab, 0x2c, 0xac, 0x17, 0xb3, 0x0b, 0xb5, 0x01, 0xff, + 0xd2, 0xb3, 0x20, 0x01, 0xe4, 0xb4, 0x20, 0x41, 0x42, 0xb0, 0x01, 0x78, + 0x23, 0x01, 0xf5, 0xb5, 0x24, 0x41, 0xe1, 0xaf, 0x20, 0x81, 0x08, 0xe9, + 0xb1, 0x20, 0x01, 0xf5, 0xb2, 0x20, 0x41, 0x4b, 0x28, 0x9e, 0xb0, 0x20, + 0x41, 0x45, 0x1c, 0x02, 0xac, 0x20, 0x81, 0x06, 0x42, 0x8f, 0x3d, 0xae, + 0x20, 0x41, 0x48, 0xd5, 0x05, 0xad, 0x20, 0x41, 0x45, 0xbb, 0x3f, 0xaa, + 0x20, 0x41, 0x45, 0xbb, 0x3f, 0xa8, 0x20, 0x41, 0x49, 0xa7, 0xb4, 0xa3, + 0x20, 0x81, 0x04, 0xee, 0xa5, 0x20, 0x41, 0x4a, 0x29, 0x9e, 0xa4, 0x20, + 0x41, 0x43, 0xf9, 0x03, 0xad, 0x24, 0x01, 0x42, 0x49, 0x00, 0xae, 0x24, + 0x01, 0x48, 0xd0, 0x69, 0xaf, 0x24, 0x01, 0x42, 0x74, 0x00, 0xb0, 0x24, + 0x81, 0x11, 0x42, 0x2a, 0x02, 0xb2, 0x24, 0x81, 0x06, 0x42, 0x6f, 0x00, + 0xb4, 0x24, 0x41, 0xf3, 0xb3, 0x24, 0x41, 0xec, 0xb1, 0x24, 0x41, 0x4e, + 0x61, 0x75, 0xac, 0x24, 0x41, 0x42, 0x92, 0x01, 0x9e, 0x20, 0x01, 0x43, + 0x94, 0xaf, 0x9f, 0x20, 0xc1, 0x00, 0x42, 0x2b, 0x64, 0xab, 0x24, 0x41, + 0x80, 0x01, 0xff, 0x4b, 0x6b, 0x9a, 0x9b, 0x20, 0x01, 0x4b, 0xc7, 0xa0, + 0x9c, 0x20, 0x01, 0x47, 0xd6, 0x05, 0x9d, 0x20, 0x01, 0x06, 0x28, 0x02, + 0x01, 0xff, 0x44, 0x8d, 0x60, 0x98, 0x20, 0x81, 0x06, 0x42, 0x2a, 0x02, + 0x9a, 0x20, 0x41, 0x45, 0x81, 0x60, 0x99, 0x20, 0x41, 0x07, 0x27, 0x02, + 0x01, 0xff, 0x51, 0xcb, 0x57, 0x8e, 0x20, 0x01, 0x43, 0x6c, 0x1e, 0x8f, + 0x20, 0x01, 0x43, 0x06, 0x5e, 0xa9, 0x24, 0x01, 0x42, 0x7d, 0x02, 0x90, + 0x20, 0x01, 0x43, 0xef, 0x0e, 0xaa, 0x24, 0x01, 0xb3, 0x04, 0xf5, 0x93, + 0x20, 0x41, 0x42, 0x13, 0x00, 0x91, 0x20, 0x01, 0x42, 0xb0, 0x01, 0x92, + 0x20, 0x41, 0x53, 0xf1, 0x4b, 0x8c, 0x20, 0x01, 0x49, 0xd5, 0xbf, 0x8b, + 0x20, 0x41, 0xe1, 0x55, 0x20, 0x81, 0xe6, 0x02, 0xe9, 0x72, 0x20, 0x81, + 0x9e, 0x02, 0xf5, 0x7a, 0x20, 0xc1, 0x00, 0x80, 0x84, 0x02, 0xe2, 0x7e, + 0x20, 0x81, 0xea, 0x01, 0xe7, 0x81, 0x20, 0x81, 0x25, 0xe8, 0x83, 0x20, + 0x01, 0xee, 0x84, 0x20, 0x81, 0x06, 0x42, 0xbe, 0x42, 0x89, 0x20, 0x41, + 0xd3, 0x85, 0x20, 0x81, 0x04, 0xd4, 0x88, 0x20, 0x41, 0x45, 0xbb, 0x3f, + 0x86, 0x20, 0xc1, 0x00, 0x45, 0xbb, 0x3f, 0x87, 0x20, 0x41, 0x07, 0x27, + 0x02, 0x06, 0x42, 0xb2, 0x0c, 0x82, 0x20, 0x41, 0xa1, 0xa0, 0x01, 0xa4, + 0x91, 0x01, 0x45, 0x92, 0xaf, 0x92, 0x24, 0x01, 0xa7, 0x74, 0xa8, 0x6a, + 0x48, 0xd0, 0x69, 0x99, 0x24, 0x01, 0xab, 0x48, 0xac, 0x2d, 0xad, 0x1b, + 0x42, 0x51, 0x03, 0xa5, 0x24, 0x01, 0x42, 0xe6, 0x05, 0xa6, 0x24, 0x01, + 0xb3, 0x01, 0xff, 0x42, 0xb0, 0x01, 0xa7, 0x24, 0x01, 0x46, 0xd2, 0x69, + 0xa8, 0x24, 0x41, 0x43, 0xf9, 0x03, 0xa2, 0x24, 0x01, 0x42, 0xed, 0x00, + 0xa3, 0x24, 0x01, 0xe9, 0xa4, 0x24, 0x41, 0xa1, 0x06, 0x4c, 0x4b, 0x96, + 0xa1, 0x24, 0x41, 0x45, 0xbd, 0xe7, 0x9e, 0x24, 0x01, 0xed, 0x9f, 0x24, + 0xc1, 0x00, 0x4a, 0xff, 0x5d, 0xa0, 0x24, 0x41, 0x45, 0x1c, 0x02, 0x9a, + 0x24, 0x01, 0xb5, 0x01, 0xff, 0xf2, 0x9b, 0x24, 0x01, 0x44, 0x06, 0x67, + 0x9c, 0x24, 0xc1, 0x00, 0x4c, 0x0a, 0x67, 0x9d, 0x24, 0x41, 0xe1, 0x97, + 0x24, 0x01, 0xe9, 0x98, 0x24, 0x41, 0xe1, 0x93, 0x24, 0x01, 0xe9, 0x94, + 0x24, 0xc1, 0x00, 0x47, 0x0d, 0xd5, 0x95, 0x24, 0x01, 0x42, 0xa4, 0x02, + 0x96, 0x24, 0x41, 0x42, 0x9e, 0x01, 0x90, 0x24, 0x01, 0x42, 0x42, 0x0b, + 0x91, 0x24, 0x41, 0x44, 0x95, 0xf1, 0x8d, 0x24, 0x01, 0x42, 0xa4, 0x02, + 0x8e, 0x24, 0xc1, 0x00, 0x48, 0xf6, 0x16, 0x8f, 0x24, 0x41, 0x07, 0x27, + 0x02, 0x04, 0xd2, 0x80, 0x20, 0x41, 0x44, 0x6b, 0x75, 0x7f, 0x20, 0x01, + 0x43, 0x8e, 0x06, 0x76, 0x23, 0x41, 0x44, 0xbc, 0x3f, 0x7c, 0x20, 0x01, + 0x47, 0x49, 0xd4, 0x7b, 0x20, 0x01, 0x47, 0x1b, 0x7c, 0x7d, 0x20, 0x41, + 0xe2, 0x73, 0x20, 0x01, 0xed, 0x74, 0x20, 0x81, 0x18, 0xee, 0x77, 0x20, + 0x81, 0x0d, 0x42, 0xa4, 0x02, 0x79, 0x20, 0xc1, 0x00, 0x49, 0xfb, 0xa5, + 0x75, 0x23, 0x41, 0x53, 0x90, 0x47, 0x78, 0x20, 0x41, 0x07, 0x27, 0x02, + 0x0b, 0xd2, 0x76, 0x20, 0xc1, 0x00, 0x49, 0xf8, 0xb4, 0x8c, 0x24, 0x41, + 0x43, 0xf0, 0x06, 0x8a, 0x24, 0x01, 0x43, 0x8e, 0x06, 0x75, 0x20, 0x01, + 0x45, 0xaa, 0xeb, 0x8b, 0x24, 0x41, 0x4b, 0x09, 0x45, 0x88, 0x24, 0x01, + 0xe7, 0x56, 0x20, 0x81, 0x14, 0xed, 0x6e, 0x20, 0x01, 0xf2, 0x6f, 0x20, + 0xc1, 0x00, 0xa1, 0x01, 0xff, 0xd3, 0x70, 0x20, 0x01, 0xd4, 0x71, 0x20, + 0x41, 0x80, 0x04, 0xd3, 0x74, 0x23, 0x41, 0x0d, 0x1e, 0x6f, 0x06, 0x49, + 0x00, 0x5e, 0x89, 0x24, 0x41, 0xa1, 0x89, 0x01, 0xa2, 0x7d, 0xa7, 0x5f, + 0x42, 0x22, 0x00, 0x60, 0x20, 0x01, 0x42, 0x46, 0x00, 0x61, 0x20, 0x81, + 0x4c, 0x43, 0x5c, 0x60, 0x63, 0x20, 0x01, 0xac, 0x31, 0x42, 0xcd, 0x05, + 0x68, 0x20, 0x01, 0x4c, 0x7c, 0x3d, 0x69, 0x20, 0x01, 0x42, 0x5a, 0x03, + 0x6a, 0x20, 0x01, 0x44, 0x10, 0x45, 0x6b, 0x20, 0x01, 0xb5, 0x01, 0xff, + 0x07, 0x09, 0x67, 0x06, 0x42, 0xa4, 0x02, 0x6d, 0x20, 0x41, 0x44, 0x05, + 0xf0, 0x6c, 0x20, 0x01, 0x44, 0x8c, 0x06, 0x73, 0x23, 0x41, 0xe1, 0x64, + 0x20, 0x01, 0xf5, 0x65, 0x20, 0xc1, 0x00, 0x4b, 0xa0, 0x97, 0x66, 0x20, + 0x01, 0xed, 0x67, 0x20, 0x41, 0x48, 0x88, 0x3d, 0x62, 0x20, 0x41, 0xe1, + 0x5b, 0x20, 0x81, 0x11, 0xe9, 0x5d, 0x20, 0x81, 0x06, 0x42, 0xb2, 0x0c, + 0x5f, 0x20, 0x41, 0x42, 0xbe, 0x42, 0x5e, 0x20, 0x41, 0x4a, 0xa0, 0x97, + 0x5c, 0x20, 0x41, 0x44, 0xa3, 0xe4, 0x59, 0x20, 0x01, 0xe9, 0x5a, 0x20, + 0x41, 0x4a, 0xa0, 0x97, 0x57, 0x20, 0x01, 0x43, 0xb9, 0x00, 0x58, 0x20, + 0x41, 0xe1, 0x40, 0x20, 0x81, 0x54, 0xe9, 0x49, 0x20, 0x81, 0x3a, 0xf5, + 0x4d, 0x20, 0xc1, 0x00, 0x80, 0x16, 0x43, 0xf0, 0x7a, 0x51, 0x20, 0x81, + 0x09, 0xf2, 0x53, 0x20, 0xc1, 0x00, 0xd2, 0x54, 0x20, 0x41, 0x4b, 0x8a, + 0x97, 0x52, 0x20, 0x41, 0x4b, 0x60, 0x9a, 0x50, 0x20, 0x01, 0x08, 0x80, + 0xc9, 0x01, 0xff, 0x42, 0x5c, 0x00, 0x4e, 0x20, 0x01, 0x49, 0xcc, 0xbf, + 0x87, 0x24, 0x01, 0x42, 0x42, 0x0b, 0x4f, 0x20, 0x41, 0x07, 0x27, 0x02, + 0x01, 0xff, 0xe1, 0x4a, 0x20, 0x01, 0x43, 0x6c, 0x1e, 0x4b, 0x20, 0x01, + 0x48, 0xd0, 0x69, 0x4c, 0x20, 0x41, 0xe4, 0x41, 0x20, 0x81, 0x40, 0x42, + 0x14, 0xf5, 0x42, 0x20, 0x01, 0x44, 0xbc, 0x42, 0x43, 0x20, 0x81, 0x1c, + 0xec, 0x44, 0x20, 0x81, 0x0b, 0xf2, 0x47, 0x20, 0xc1, 0x00, 0x42, 0x69, + 0x7f, 0x48, 0x20, 0x41, 0x49, 0x7a, 0xb4, 0x45, 0x20, 0x01, 0x42, 0x23, + 0x02, 0x46, 0x20, 0x41, 0x07, 0x27, 0x02, 0x01, 0xff, 0x43, 0x45, 0xa7, + 0x84, 0x24, 0x01, 0x42, 0x51, 0x03, 0x85, 0x24, 0x01, 0x42, 0x59, 0x00, + 0x86, 0x24, 0x41, 0x50, 0x76, 0x60, 0x83, 0x24, 0x41, 0x07, 0x27, 0x02, + 0x9d, 0x03, 0xd2, 0x09, 0x20, 0x01, 0xe2, 0x0a, 0x20, 0x81, 0x83, 0x02, + 0xe4, 0x1c, 0x20, 0x81, 0xf7, 0x01, 0xeb, 0x1d, 0x20, 0x81, 0xe0, 0x01, + 0xec, 0x20, 0x20, 0x81, 0x9a, 0x01, 0x43, 0xb9, 0x00, 0x2b, 0x20, 0x81, + 0x81, 0x01, 0xee, 0x2d, 0x20, 0x81, 0x58, 0x43, 0x28, 0x13, 0x33, 0x20, + 0x01, 0xb2, 0x3d, 0xb3, 0x01, 0xff, 0x43, 0xe9, 0xf3, 0x37, 0x20, 0x01, + 0xe8, 0x38, 0x20, 0xc1, 0x00, 0x80, 0x0a, 0xd2, 0x3e, 0x20, 0x01, 0x43, + 0x24, 0x02, 0x3f, 0x20, 0x41, 0x49, 0xd4, 0xa5, 0x3a, 0x20, 0x01, 0x09, + 0xa2, 0x10, 0x06, 0x49, 0x22, 0x95, 0x39, 0x20, 0x41, 0x48, 0xa2, 0x10, + 0x3c, 0x20, 0x81, 0x06, 0x61, 0xd1, 0x0e, 0x3b, 0x20, 0x41, 0x5f, 0x94, + 0x10, 0x3d, 0x20, 0x41, 0x42, 0xe8, 0x01, 0x34, 0x20, 0x81, 0x06, 0x43, + 0x1a, 0x9e, 0x36, 0x20, 0x41, 0x4a, 0xff, 0x5d, 0x35, 0x20, 0x41, 0x80, + 0x06, 0x43, 0x8e, 0x06, 0x32, 0x20, 0x41, 0x47, 0x42, 0xd4, 0x2e, 0x20, + 0x01, 0x0a, 0x97, 0xaf, 0x06, 0x4b, 0x7c, 0xa3, 0x2f, 0x20, 0x41, 0x55, + 0x67, 0x3d, 0x30, 0x20, 0x01, 0x47, 0xd6, 0x05, 0x31, 0x20, 0x41, 0x07, + 0x27, 0x02, 0x01, 0xff, 0x43, 0x6a, 0xf4, 0x72, 0x23, 0x01, 0x43, 0x8e, + 0x06, 0x2c, 0x20, 0x41, 0x07, 0x27, 0x02, 0x0c, 0x42, 0x1a, 0x00, 0x29, + 0x20, 0x01, 0x43, 0x19, 0x3d, 0x2a, 0x20, 0x41, 0x42, 0x13, 0x00, 0x21, + 0x20, 0x01, 0x44, 0x8d, 0xef, 0x22, 0x20, 0x01, 0x44, 0x05, 0x45, 0x23, + 0x20, 0x01, 0x42, 0x22, 0x00, 0x24, 0x20, 0x01, 0xab, 0x0c, 0x43, 0x8e, + 0x06, 0x27, 0x20, 0x01, 0x43, 0x30, 0x7c, 0x28, 0x20, 0x41, 0x43, 0xc2, + 0xf0, 0x25, 0x20, 0x01, 0xe9, 0x26, 0x20, 0x41, 0x07, 0x27, 0x02, 0x01, + 0xff, 0x45, 0x92, 0xaf, 0x1e, 0x20, 0x01, 0x4f, 0xfc, 0x72, 0x1f, 0x20, + 0x41, 0x4b, 0xd7, 0x97, 0x82, 0x24, 0x41, 0x80, 0x2c, 0xd2, 0x16, 0x20, + 0xc1, 0x00, 0x07, 0x27, 0x02, 0x01, 0xff, 0xe1, 0x71, 0x23, 0x01, 0x45, + 0xa2, 0xe4, 0x17, 0x20, 0x01, 0x49, 0x8d, 0x60, 0x18, 0x20, 0x01, 0x4a, + 0xc1, 0xad, 0x19, 0x20, 0x01, 0x44, 0x49, 0x57, 0x1a, 0x20, 0x01, 0x44, + 0x10, 0x45, 0x1b, 0x20, 0x41, 0x44, 0xbc, 0x3f, 0x15, 0x20, 0x01, 0x06, + 0x28, 0x02, 0x01, 0xff, 0x44, 0xf9, 0x03, 0x0b, 0x20, 0x01, 0x49, 0x21, + 0x77, 0x0c, 0x20, 0x01, 0x02, 0x24, 0x02, 0x3d, 0x42, 0x22, 0x00, 0x0f, + 0x20, 0x01, 0xa9, 0x29, 0x45, 0x22, 0x02, 0x12, 0x20, 0x01, 0x43, 0xdc, + 0x22, 0x70, 0x23, 0x81, 0x16, 0x02, 0xa4, 0x02, 0x06, 0x4f, 0x19, 0x74, + 0x14, 0x20, 0x41, 0x43, 0x93, 0x5a, 0x13, 0x20, 0x01, 0x42, 0x08, 0x67, + 0x81, 0x24, 0x41, 0x45, 0x81, 0x60, 0x80, 0x24, 0x41, 0x47, 0xd1, 0x69, + 0x10, 0x20, 0x01, 0x43, 0xcb, 0x13, 0x11, 0x20, 0x41, 0xec, 0x0d, 0x20, + 0x01, 0x47, 0x8f, 0x60, 0x0e, 0x20, 0x41, 0xe1, 0x01, 0x20, 0x01, 0x43, + 0xe9, 0x70, 0x02, 0x20, 0x01, 0x49, 0x8d, 0x60, 0x03, 0x20, 0x01, 0x42, + 0x22, 0x00, 0x04, 0x20, 0x01, 0x43, 0xf0, 0x06, 0x05, 0x20, 0x01, 0x4a, + 0xb6, 0x3f, 0x06, 0x20, 0x01, 0x44, 0xca, 0x81, 0x07, 0x20, 0x01, 0x43, + 0xeb, 0x88, 0x08, 0x20, 0x41, 0x09, 0xe3, 0x25, 0x0c, 0x59, 0x2e, 0x25, + 0x70, 0x24, 0x01, 0x4e, 0x67, 0x7e, 0x71, 0x24, 0x41, 0x45, 0x94, 0x3b, + 0x72, 0x24, 0x01, 0x49, 0x40, 0xbe, 0x74, 0x24, 0x01, 0x48, 0xc0, 0xcb, + 0x73, 0x24, 0x41, 0xa5, 0xb5, 0x05, 0xa6, 0xf6, 0x03, 0x02, 0x51, 0x03, + 0xa4, 0x03, 0xaf, 0xb7, 0x02, 0xb3, 0xb5, 0x01, 0xb4, 0x01, 0xff, 0x05, + 0x25, 0x01, 0x4f, 0x03, 0x20, 0x0a, 0x01, 0xff, 0x43, 0xf9, 0x03, 0x00, + 0x24, 0x81, 0x3d, 0xa2, 0x2f, 0x45, 0x1e, 0xe6, 0x59, 0x24, 0x01, 0x04, + 0xe7, 0x6b, 0x1d, 0x04, 0x5f, 0x19, 0x11, 0x07, 0xee, 0x74, 0x01, 0xff, + 0x44, 0xd0, 0x0c, 0x5b, 0x24, 0x01, 0x4e, 0xf7, 0x5e, 0x5e, 0x24, 0x41, + 0xd2, 0x23, 0x24, 0x01, 0xf5, 0x2d, 0x24, 0x41, 0xd2, 0x16, 0x24, 0x01, + 0xf5, 0x1f, 0x24, 0x41, 0x43, 0x8e, 0x60, 0x50, 0x24, 0x01, 0x43, 0xb9, + 0xaa, 0x35, 0x24, 0x41, 0x45, 0x81, 0x60, 0x4a, 0x24, 0x41, 0x43, 0xf9, + 0x03, 0x01, 0x24, 0x81, 0x52, 0xa2, 0x3d, 0x44, 0xd0, 0x0c, 0x08, 0x24, + 0x01, 0x04, 0xe7, 0x6b, 0x2b, 0x04, 0x5f, 0x19, 0x11, 0x10, 0x56, 0x68, + 0x01, 0xff, 0x42, 0xe8, 0xf4, 0x3a, 0x24, 0x01, 0x42, 0x8f, 0xd8, 0x3b, + 0x24, 0x41, 0xd2, 0x24, 0x24, 0x81, 0x0b, 0xf5, 0x2e, 0x24, 0xc1, 0x00, + 0x4d, 0xb9, 0x7f, 0x2f, 0x24, 0x41, 0x4d, 0xb9, 0x7f, 0x25, 0x24, 0x41, + 0xd2, 0x17, 0x24, 0x01, 0xf5, 0x20, 0x24, 0x41, 0x43, 0x8e, 0x60, 0x51, + 0x24, 0x01, 0x43, 0xb9, 0xaa, 0x36, 0x24, 0xc1, 0x00, 0x4d, 0xb9, 0x7f, + 0x37, 0x24, 0x41, 0x45, 0x81, 0x60, 0x4b, 0x24, 0x41, 0x05, 0x70, 0x22, + 0x45, 0x14, 0xbc, 0x42, 0x35, 0x03, 0xff, 0x52, 0x01, 0xff, 0x43, 0xf9, + 0x03, 0x04, 0x24, 0x81, 0x23, 0x44, 0xd0, 0x0c, 0x0b, 0x24, 0x01, 0x45, + 0xa0, 0xe6, 0x1a, 0x24, 0x01, 0x45, 0xd8, 0xea, 0x28, 0x24, 0x01, 0xf5, + 0x11, 0x24, 0x81, 0x06, 0x51, 0xf7, 0x5e, 0x40, 0x24, 0x41, 0x4d, 0xb9, + 0x7f, 0x6b, 0x24, 0x41, 0x45, 0x81, 0x60, 0x4e, 0x24, 0x41, 0x44, 0xd0, + 0x0c, 0x32, 0x24, 0x01, 0x43, 0xcb, 0x13, 0x33, 0x24, 0x41, 0x43, 0xf9, + 0x03, 0x05, 0x24, 0x01, 0x44, 0xd0, 0x0c, 0x0c, 0x24, 0x01, 0x45, 0xa0, + 0xe6, 0x1b, 0x24, 0x01, 0x45, 0xd8, 0xea, 0x29, 0x24, 0x01, 0xf5, 0x12, + 0x24, 0x81, 0x13, 0x11, 0x08, 0x5f, 0x01, 0xff, 0x80, 0x04, 0xd3, 0x41, + 0x24, 0x41, 0xe1, 0x42, 0x24, 0x01, 0xe2, 0x43, 0x24, 0x41, 0x4d, 0xb9, + 0x7f, 0x6c, 0x24, 0x41, 0x10, 0x66, 0x64, 0x5a, 0x03, 0xef, 0x07, 0x01, + 0xff, 0xa2, 0x47, 0xa5, 0x39, 0x04, 0xe7, 0x6b, 0x2d, 0x48, 0x90, 0xc6, + 0x64, 0x24, 0x01, 0x08, 0x04, 0x03, 0x17, 0x45, 0xe2, 0xea, 0x2c, 0x24, + 0x01, 0x06, 0x38, 0x89, 0x01, 0xff, 0x44, 0xd0, 0x0c, 0x5a, 0x24, 0x01, + 0x4e, 0xf7, 0x5e, 0x5d, 0x24, 0x41, 0x43, 0xf9, 0x03, 0x60, 0x24, 0x01, + 0x43, 0x84, 0x80, 0x63, 0x24, 0x41, 0xd2, 0x15, 0x24, 0x01, 0xf5, 0x1e, + 0x24, 0x41, 0x49, 0x1a, 0xba, 0x5f, 0x24, 0x01, 0x44, 0x1f, 0xe6, 0x58, + 0x24, 0x41, 0x43, 0x8e, 0x60, 0x4f, 0x24, 0x01, 0x43, 0xb9, 0xaa, 0x34, + 0x24, 0x41, 0x47, 0x2a, 0x01, 0x62, 0x24, 0x01, 0x45, 0xe6, 0xdf, 0x61, + 0x24, 0x41, 0x04, 0xfd, 0xef, 0x3d, 0x03, 0xef, 0x07, 0x01, 0xff, 0x43, + 0xf9, 0x03, 0x07, 0x24, 0x01, 0x44, 0xd0, 0x0c, 0x0e, 0x24, 0x01, 0x45, + 0xa0, 0xe6, 0x1d, 0x24, 0x01, 0x45, 0xd8, 0xea, 0x2b, 0x24, 0x01, 0xf5, + 0x14, 0x24, 0x81, 0x15, 0x53, 0x64, 0x4e, 0x46, 0x24, 0xc1, 0x00, 0x42, + 0x19, 0x00, 0x49, 0x24, 0x01, 0xd3, 0x47, 0x24, 0x01, 0xd4, 0x48, 0x24, + 0x41, 0x4d, 0xb9, 0x7f, 0x6e, 0x24, 0x41, 0x43, 0x93, 0x5a, 0x57, 0x24, + 0x01, 0x43, 0xcb, 0x13, 0x56, 0x24, 0x41, 0x04, 0xd2, 0x05, 0x65, 0x04, + 0xf6, 0x06, 0x01, 0xff, 0x43, 0xf9, 0x03, 0x02, 0x24, 0x81, 0x53, 0xa2, + 0x3e, 0x44, 0xd0, 0x0c, 0x09, 0x24, 0x01, 0x04, 0xe7, 0x6b, 0x2c, 0x04, + 0x5f, 0x19, 0x20, 0xf5, 0x0f, 0x24, 0x81, 0x15, 0x52, 0x5f, 0x56, 0x3c, + 0x24, 0xc1, 0x00, 0x80, 0x04, 0xd4, 0x3d, 0x24, 0x41, 0xe1, 0x3e, 0x24, + 0x01, 0xe2, 0x3f, 0x24, 0x41, 0x4d, 0xb9, 0x7f, 0x69, 0x24, 0x41, 0xd2, + 0x26, 0x24, 0x01, 0xf5, 0x30, 0x24, 0x41, 0xd2, 0x18, 0x24, 0x01, 0xf5, + 0x21, 0x24, 0x41, 0x43, 0x8e, 0x60, 0x52, 0x24, 0x81, 0x06, 0x43, 0xb9, + 0xaa, 0x38, 0x24, 0x41, 0x4d, 0xb9, 0x7f, 0x53, 0x24, 0x41, 0x45, 0x81, + 0x60, 0x4c, 0x24, 0x41, 0x43, 0xf9, 0x03, 0x03, 0x24, 0x81, 0x46, 0xa2, + 0x31, 0x44, 0xd0, 0x0c, 0x0a, 0x24, 0x01, 0x04, 0xe7, 0x6b, 0x1f, 0xb3, + 0x0b, 0xf5, 0x10, 0x24, 0xc1, 0x00, 0x4d, 0xb9, 0x7f, 0x6a, 0x24, 0x41, + 0x03, 0xc9, 0x02, 0x06, 0x4a, 0x27, 0xac, 0x5c, 0x24, 0x41, 0xd2, 0x27, + 0x24, 0x01, 0xf5, 0x31, 0x24, 0x41, 0xd2, 0x19, 0x24, 0x01, 0xf5, 0x22, + 0x24, 0x41, 0x43, 0x8e, 0x60, 0x54, 0x24, 0x81, 0x06, 0x43, 0xb9, 0xaa, + 0x39, 0x24, 0x41, 0x4d, 0xb9, 0x7f, 0x55, 0x24, 0x41, 0x45, 0x81, 0x60, + 0x4d, 0x24, 0x41, 0x05, 0xc9, 0x00, 0x1f, 0x07, 0xac, 0xd2, 0x01, 0xff, + 0xa6, 0x0c, 0x49, 0x29, 0xbd, 0x65, 0x24, 0x01, 0x4a, 0x53, 0xb2, 0x66, + 0x24, 0x41, 0x44, 0x51, 0x4d, 0x68, 0x24, 0x01, 0x44, 0xce, 0x51, 0x67, + 0x24, 0x41, 0x43, 0xf9, 0x03, 0x06, 0x24, 0x01, 0x44, 0xd0, 0x0c, 0x0d, + 0x24, 0x01, 0x45, 0xa0, 0xe6, 0x1c, 0x24, 0x01, 0x45, 0xd8, 0xea, 0x2a, + 0x24, 0x01, 0xf5, 0x13, 0x24, 0x81, 0x0b, 0x51, 0x19, 0x5f, 0x44, 0x24, + 0xc1, 0x00, 0xd3, 0x45, 0x24, 0x41, 0x4d, 0xb9, 0x7f, 0x6d, 0x24, 0x41, + 0x42, 0x5c, 0x00, 0x80, 0xf9, 0x01, 0xa5, 0xa1, 0x01, 0x45, 0xe9, 0x78, + 0x97, 0xf9, 0x81, 0x93, 0x01, 0xaf, 0x27, 0xb5, 0x19, 0xb9, 0x01, 0xff, + 0x04, 0xa1, 0x01, 0x06, 0x49, 0x69, 0xbf, 0x2e, 0xf5, 0x41, 0x48, 0x62, + 0x1f, 0x3f, 0xf6, 0x01, 0x44, 0x0c, 0x08, 0x22, 0xf6, 0x41, 0x43, 0x96, + 0x21, 0x7c, 0xfa, 0x01, 0x4a, 0x0b, 0xb4, 0xa2, 0x20, 0x40, 0x46, 0xb2, + 0xda, 0x0a, 0xf4, 0x01, 0x46, 0x16, 0xdd, 0x50, 0xf9, 0x01, 0x02, 0xee, + 0x00, 0x06, 0x42, 0xa7, 0x01, 0x51, 0xf4, 0x41, 0x80, 0x1c, 0x03, 0x05, + 0x00, 0x06, 0x49, 0x8f, 0xba, 0xcc, 0x26, 0x40, 0x45, 0x69, 0xe6, 0x8c, + 0xf3, 0x01, 0x67, 0xcd, 0x05, 0x8a, 0xf1, 0x01, 0x46, 0x40, 0xe0, 0x94, + 0x26, 0x40, 0x44, 0xb9, 0x00, 0x4c, 0x27, 0x00, 0x03, 0xf4, 0x01, 0x20, + 0xb0, 0x01, 0xff, 0x0a, 0x0d, 0xa8, 0x0d, 0x45, 0x3f, 0xdf, 0x42, 0xf5, + 0xc1, 0x00, 0x57, 0xba, 0x2c, 0x41, 0xf5, 0x41, 0x4d, 0x01, 0x85, 0x51, + 0x2e, 0x00, 0x4e, 0xb9, 0x7b, 0x50, 0x2e, 0x40, 0x49, 0xe0, 0xba, 0x29, + 0x26, 0x00, 0x48, 0xf0, 0xc7, 0x28, 0x26, 0x40, 0x4d, 0x44, 0x7f, 0xcf, + 0xf3, 0x41, 0x48, 0x28, 0xc5, 0xb3, 0xf4, 0x01, 0x4a, 0x43, 0x41, 0x19, + 0xf3, 0x41, 0x42, 0x8a, 0x00, 0xe5, 0xf9, 0x01, 0xa3, 0x9c, 0x25, 0x44, + 0xc9, 0xef, 0xb0, 0x26, 0x00, 0x42, 0x9e, 0x01, 0x99, 0xfa, 0x01, 0xac, + 0xf1, 0x24, 0xad, 0xbd, 0x0c, 0xae, 0xad, 0x0b, 0x02, 0x55, 0x05, 0x95, + 0x0b, 0xb0, 0xcb, 0x01, 0xb2, 0xb6, 0x01, 0xb5, 0x0b, 0xf7, 0x04, 0xf4, + 0xc1, 0x00, 0x45, 0x0b, 0x08, 0x2e, 0xf4, 0x41, 0x4b, 0x13, 0x9a, 0xcb, + 0xf6, 0x01, 0x02, 0x11, 0x00, 0x06, 0x4e, 0x1f, 0x7b, 0x91, 0xf4, 0x41, + 0x02, 0x33, 0x00, 0x88, 0x01, 0x08, 0x20, 0xc7, 0x01, 0xff, 0x0b, 0x3a, + 0xa3, 0x42, 0x0b, 0x58, 0xa4, 0x01, 0xff, 0x45, 0x12, 0x0b, 0x67, 0xd3, + 0x01, 0xa6, 0x29, 0x44, 0xcf, 0x2a, 0x68, 0xd3, 0x01, 0x43, 0x0e, 0x0b, + 0x60, 0xd3, 0x01, 0xb3, 0x0f, 0xb4, 0x01, 0xff, 0x44, 0x25, 0x01, 0x62, + 0xd3, 0x01, 0x42, 0x15, 0x02, 0x61, 0xd3, 0x41, 0x44, 0xc9, 0x1d, 0x66, + 0xd3, 0x01, 0x42, 0x01, 0x26, 0x65, 0xd3, 0x41, 0x43, 0xd2, 0x05, 0x64, + 0xd3, 0x01, 0x43, 0xf6, 0x06, 0x63, 0xd3, 0x41, 0x45, 0x12, 0x0b, 0x70, + 0xd3, 0x01, 0xa6, 0x29, 0x44, 0xcf, 0x2a, 0x71, 0xd3, 0x01, 0x43, 0x0e, + 0x0b, 0x69, 0xd3, 0x01, 0xb3, 0x0f, 0xb4, 0x01, 0xff, 0x44, 0x25, 0x01, + 0x6b, 0xd3, 0x01, 0x42, 0x15, 0x02, 0x6a, 0xd3, 0x41, 0x44, 0xc9, 0x1d, + 0x6f, 0xd3, 0x01, 0x42, 0x01, 0x26, 0x6e, 0xd3, 0x41, 0x43, 0xd2, 0x05, + 0x6d, 0xd3, 0x01, 0x43, 0xf6, 0x06, 0x6c, 0xd3, 0x41, 0x44, 0x49, 0xef, + 0x34, 0x23, 0x00, 0x44, 0xad, 0xf2, 0x35, 0x23, 0x40, 0x42, 0x13, 0x00, + 0xb8, 0xfa, 0x01, 0x52, 0xd7, 0x53, 0x4f, 0x2e, 0x00, 0x4b, 0xe5, 0xa1, + 0x58, 0x22, 0x40, 0x04, 0x26, 0x20, 0x0f, 0xb9, 0x01, 0xff, 0x4b, 0xa1, + 0x9e, 0x2f, 0xf1, 0x01, 0x4a, 0x55, 0xb0, 0xa9, 0x00, 0x40, 0xa3, 0xed, + 0x05, 0x06, 0x5a, 0xdb, 0x90, 0x04, 0xa6, 0x81, 0x04, 0x55, 0xfe, 0x3c, + 0xff, 0x2c, 0x00, 0x0b, 0x9b, 0xa0, 0xde, 0x03, 0xb3, 0x01, 0xff, 0x0c, + 0x77, 0x08, 0x33, 0x06, 0x60, 0x16, 0x01, 0xff, 0xab, 0x20, 0x45, 0xa3, + 0xe8, 0xe5, 0x2c, 0x00, 0x45, 0xe3, 0xe9, 0xe6, 0x2c, 0x00, 0xb3, 0x06, + 0x46, 0x6a, 0xe0, 0xe8, 0x2c, 0x40, 0x49, 0x9c, 0xb9, 0xea, 0x2c, 0x00, + 0x46, 0x70, 0xe0, 0xe7, 0x2c, 0x40, 0x42, 0x56, 0x07, 0xe4, 0x2c, 0x00, + 0x45, 0x7d, 0xca, 0xe9, 0x2c, 0x40, 0xa1, 0x95, 0x03, 0x4d, 0x25, 0x81, + 0xf3, 0x2c, 0x00, 0x02, 0x75, 0x06, 0xe7, 0x02, 0xa4, 0xbb, 0x02, 0x43, + 0x31, 0xf4, 0x89, 0x2c, 0x00, 0xa6, 0xa8, 0x02, 0x02, 0x24, 0x02, 0x97, + 0x02, 0xa8, 0x88, 0x02, 0x45, 0x40, 0xe7, 0x93, 0x2c, 0x00, 0xab, 0xe7, + 0x01, 0xac, 0xd8, 0x01, 0x42, 0x7d, 0x02, 0x99, 0x2c, 0x00, 0x42, 0x51, + 0x03, 0x9b, 0x2c, 0x00, 0xef, 0x9f, 0x2c, 0x80, 0x54, 0xb0, 0x48, 0x42, + 0xd0, 0x00, 0xa3, 0x2c, 0x00, 0xb3, 0x20, 0xb4, 0x12, 0x42, 0x7d, 0x00, + 0xa9, 0x2c, 0x00, 0x44, 0x05, 0xf3, 0x83, 0x2c, 0x00, 0x44, 0x55, 0xf3, + 0x8d, 0x2c, 0x40, 0x42, 0x5f, 0x24, 0xa7, 0x2c, 0x00, 0x45, 0xfa, 0xe6, + 0x91, 0x2c, 0x40, 0x44, 0x37, 0x94, 0xc1, 0x2c, 0x00, 0xa8, 0x0c, 0x43, + 0xe3, 0x0c, 0xa5, 0x2c, 0x00, 0x42, 0x3c, 0x01, 0x8b, 0x2c, 0x40, 0x42, + 0x12, 0x0b, 0xe3, 0x03, 0x00, 0x43, 0xe3, 0x0c, 0xed, 0x03, 0x40, 0xe9, + 0xa1, 0x2c, 0x00, 0x42, 0x5a, 0x03, 0xaf, 0x2c, 0x40, 0x03, 0x03, 0x24, + 0x06, 0x42, 0x3c, 0x01, 0xb1, 0x2c, 0x40, 0x07, 0x1a, 0xd0, 0x1f, 0x07, + 0x9f, 0xa0, 0x01, 0xff, 0xae, 0x0c, 0x45, 0xe7, 0xea, 0xdd, 0x2c, 0x00, + 0x43, 0x09, 0xa4, 0xe3, 0x2c, 0x40, 0x42, 0xf1, 0x06, 0xdf, 0x2c, 0x00, + 0x42, 0x7e, 0x1a, 0xe1, 0x2c, 0x40, 0x43, 0x56, 0x07, 0xb5, 0x2c, 0x00, + 0x43, 0x22, 0xf4, 0xd9, 0x2c, 0x00, 0x43, 0x93, 0x5a, 0xc7, 0x2c, 0x00, + 0x46, 0xde, 0xdb, 0xd7, 0x2c, 0x00, 0xa8, 0x17, 0x43, 0x7a, 0x93, 0xbf, + 0x2c, 0x00, 0x02, 0xa4, 0x02, 0x01, 0xff, 0x42, 0x12, 0x0b, 0xc5, 0x2c, + 0x00, 0x43, 0xe3, 0x0c, 0xdb, 0x2c, 0x40, 0xe1, 0xcf, 0x2c, 0x80, 0x0c, + 0x42, 0x12, 0x0b, 0xd3, 0x2c, 0x00, 0x43, 0x0c, 0x00, 0xcd, 0x2c, 0x40, + 0xf4, 0xd5, 0x2c, 0x40, 0x4a, 0xb9, 0xa6, 0xd1, 0x2c, 0x00, 0x44, 0x29, + 0xef, 0x97, 0x2c, 0x40, 0x43, 0x7b, 0x3d, 0x95, 0x2c, 0x00, 0xa8, 0x06, + 0x42, 0x5a, 0x03, 0x9d, 0x2c, 0x40, 0x42, 0x12, 0x0b, 0xe7, 0x03, 0x00, + 0xe9, 0xad, 0x2c, 0x40, 0x43, 0x8a, 0x00, 0x8f, 0x2c, 0x00, 0x43, 0x0c, + 0x00, 0xe9, 0x03, 0x40, 0x43, 0x15, 0x05, 0x85, 0x2c, 0x00, 0x44, 0xe0, + 0xdb, 0xeb, 0x03, 0x40, 0x42, 0x12, 0x0b, 0xe5, 0x03, 0x00, 0xe9, 0xab, + 0x2c, 0x40, 0x44, 0xf5, 0xee, 0x87, 0x2c, 0x00, 0x42, 0x12, 0x0b, 0xef, + 0x03, 0x00, 0x09, 0xed, 0xb9, 0x01, 0xff, 0x44, 0x67, 0x00, 0xb3, 0x2c, + 0x00, 0x44, 0x0b, 0x00, 0xcb, 0x2c, 0x00, 0x44, 0xce, 0xc9, 0xb9, 0x2c, + 0x00, 0x42, 0x51, 0x03, 0xbb, 0x2c, 0x40, 0x4a, 0x15, 0xaf, 0xc3, 0x2c, + 0x00, 0x0c, 0xd4, 0x24, 0x01, 0xff, 0x43, 0x31, 0xf4, 0xb7, 0x2c, 0x00, + 0x46, 0xde, 0xdb, 0xee, 0x2c, 0x00, 0x42, 0x51, 0x03, 0xbd, 0x2c, 0x00, + 0x44, 0x1b, 0xaf, 0xec, 0x2c, 0x40, 0x4c, 0xab, 0x90, 0xc9, 0x2c, 0x00, + 0x43, 0x6d, 0xf4, 0x81, 0x2c, 0x40, 0x54, 0x9f, 0x34, 0xfa, 0x2c, 0x00, + 0x49, 0x81, 0x16, 0xf9, 0x2c, 0x00, 0x56, 0x9d, 0x34, 0xfb, 0x2c, 0x00, + 0x4d, 0xdc, 0x53, 0xfc, 0x2c, 0x40, 0x50, 0x1f, 0x5a, 0xfd, 0x2c, 0x00, + 0x48, 0x82, 0x16, 0xfe, 0x2c, 0x40, 0x06, 0xef, 0x06, 0x96, 0x01, 0x07, + 0xff, 0x39, 0x06, 0x4e, 0xed, 0x7c, 0xe0, 0x02, 0x41, 0x05, 0x12, 0x0b, + 0x7e, 0xa6, 0x5f, 0x04, 0xcf, 0x2a, 0x4f, 0x4b, 0x6d, 0x11, 0xf3, 0x02, + 0x01, 0xb3, 0x26, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0xea, 0x02, 0x01, + 0xa8, 0x0f, 0xb7, 0x01, 0xff, 0x44, 0xcb, 0x1d, 0xeb, 0x02, 0x01, 0x49, + 0xbe, 0x1d, 0xf4, 0x02, 0x41, 0x44, 0x7b, 0x11, 0xec, 0x02, 0x01, 0x4b, + 0xfb, 0x17, 0xf5, 0x02, 0x41, 0x04, 0xc9, 0x1d, 0x11, 0x02, 0x01, 0x26, + 0x01, 0xff, 0x48, 0x70, 0x11, 0xf8, 0x02, 0x01, 0x42, 0x7d, 0x11, 0xef, + 0x02, 0x41, 0x48, 0x70, 0x11, 0xf9, 0x02, 0x01, 0x42, 0x7d, 0x11, 0xf0, + 0x02, 0x41, 0x48, 0x70, 0x11, 0xfb, 0x02, 0x01, 0x42, 0x7d, 0x11, 0xf2, + 0x02, 0x41, 0xa9, 0x0f, 0xaf, 0x01, 0xff, 0x43, 0x7c, 0x11, 0xed, 0x02, + 0x01, 0x4a, 0xf3, 0xb2, 0xf6, 0x02, 0x41, 0x43, 0x52, 0x4d, 0xee, 0x02, + 0x01, 0x4a, 0x82, 0x39, 0xf7, 0x02, 0x41, 0x48, 0x70, 0x11, 0xfa, 0x02, + 0x01, 0xf9, 0xf1, 0x02, 0x41, 0x45, 0x12, 0x0b, 0xe8, 0x02, 0x01, 0xa6, + 0x29, 0x44, 0xcf, 0x2a, 0xe9, 0x02, 0x01, 0x43, 0x0e, 0x0b, 0xe1, 0x02, + 0x01, 0xb3, 0x0f, 0xb4, 0x01, 0xff, 0x44, 0x25, 0x01, 0xe3, 0x02, 0x01, + 0x42, 0x15, 0x02, 0xe2, 0x02, 0x41, 0x44, 0xc9, 0x1d, 0xe7, 0x02, 0x01, + 0x42, 0x01, 0x26, 0xe6, 0x02, 0x41, 0x43, 0xd2, 0x05, 0xe5, 0x02, 0x01, + 0x43, 0xf6, 0x06, 0xe4, 0x02, 0x41, 0x0e, 0xe5, 0x05, 0x1c, 0x09, 0x33, + 0x16, 0x01, 0xff, 0x48, 0xb0, 0xc8, 0xef, 0x2c, 0x00, 0x09, 0x57, 0xbf, + 0x01, 0xff, 0x45, 0x7a, 0xe4, 0xf0, 0x2c, 0x00, 0x45, 0x2b, 0xe8, 0xf1, + 0x2c, 0x40, 0xa1, 0x95, 0x03, 0x4d, 0x25, 0x81, 0xf2, 0x2c, 0x00, 0x02, + 0x75, 0x06, 0xe7, 0x02, 0xa4, 0xbb, 0x02, 0x43, 0x31, 0xf4, 0x88, 0x2c, + 0x00, 0xa6, 0xa8, 0x02, 0x02, 0x24, 0x02, 0x97, 0x02, 0xa8, 0x88, 0x02, + 0x45, 0x40, 0xe7, 0x92, 0x2c, 0x00, 0xab, 0xe7, 0x01, 0xac, 0xd8, 0x01, + 0x42, 0x7d, 0x02, 0x98, 0x2c, 0x00, 0x42, 0x51, 0x03, 0x9a, 0x2c, 0x00, + 0xef, 0x9e, 0x2c, 0x80, 0x54, 0xb0, 0x48, 0x42, 0xd0, 0x00, 0xa2, 0x2c, + 0x00, 0xb3, 0x20, 0xb4, 0x12, 0x42, 0x7d, 0x00, 0xa8, 0x2c, 0x00, 0x44, + 0x05, 0xf3, 0x82, 0x2c, 0x00, 0x44, 0x55, 0xf3, 0x8c, 0x2c, 0x40, 0x42, + 0x5f, 0x24, 0xa6, 0x2c, 0x00, 0x45, 0xfa, 0xe6, 0x90, 0x2c, 0x40, 0x44, + 0x37, 0x94, 0xc0, 0x2c, 0x00, 0xa8, 0x0c, 0x43, 0xe3, 0x0c, 0xa4, 0x2c, + 0x00, 0x42, 0x3c, 0x01, 0x8a, 0x2c, 0x40, 0x42, 0x12, 0x0b, 0xe2, 0x03, + 0x00, 0x43, 0xe3, 0x0c, 0xec, 0x03, 0x40, 0xe9, 0xa0, 0x2c, 0x00, 0x42, + 0x5a, 0x03, 0xae, 0x2c, 0x40, 0x03, 0x03, 0x24, 0x06, 0x42, 0x3c, 0x01, + 0xb0, 0x2c, 0x40, 0x07, 0x1a, 0xd0, 0x1f, 0x07, 0x9f, 0xa0, 0x01, 0xff, + 0xae, 0x0c, 0x45, 0xe7, 0xea, 0xdc, 0x2c, 0x00, 0x43, 0x09, 0xa4, 0xe2, + 0x2c, 0x40, 0x42, 0xf1, 0x06, 0xde, 0x2c, 0x00, 0x42, 0x7e, 0x1a, 0xe0, + 0x2c, 0x40, 0x43, 0x56, 0x07, 0xb4, 0x2c, 0x00, 0x43, 0x22, 0xf4, 0xd8, + 0x2c, 0x00, 0x43, 0x93, 0x5a, 0xc6, 0x2c, 0x00, 0x46, 0xde, 0xdb, 0xd6, + 0x2c, 0x00, 0xa8, 0x17, 0x43, 0x7a, 0x93, 0xbe, 0x2c, 0x00, 0x02, 0xa4, + 0x02, 0x01, 0xff, 0x42, 0x12, 0x0b, 0xc4, 0x2c, 0x00, 0x43, 0xe3, 0x0c, + 0xda, 0x2c, 0x40, 0xe1, 0xce, 0x2c, 0x80, 0x0c, 0x42, 0x12, 0x0b, 0xd2, + 0x2c, 0x00, 0x43, 0x0c, 0x00, 0xcc, 0x2c, 0x40, 0xf4, 0xd4, 0x2c, 0x40, + 0x4a, 0xb9, 0xa6, 0xd0, 0x2c, 0x00, 0x44, 0x29, 0xef, 0x96, 0x2c, 0x40, + 0x43, 0x7b, 0x3d, 0x94, 0x2c, 0x00, 0xa8, 0x06, 0x42, 0x5a, 0x03, 0x9c, + 0x2c, 0x40, 0x42, 0x12, 0x0b, 0xe6, 0x03, 0x00, 0xe9, 0xac, 0x2c, 0x40, + 0x43, 0x8a, 0x00, 0x8e, 0x2c, 0x00, 0x43, 0x0c, 0x00, 0xe8, 0x03, 0x40, + 0x43, 0x15, 0x05, 0x84, 0x2c, 0x00, 0x44, 0xe0, 0xdb, 0xea, 0x03, 0x40, + 0x42, 0x12, 0x0b, 0xe4, 0x03, 0x00, 0xe9, 0xaa, 0x2c, 0x40, 0x44, 0xf5, + 0xee, 0x86, 0x2c, 0x00, 0x42, 0x12, 0x0b, 0xee, 0x03, 0x00, 0x09, 0xed, + 0xb9, 0x01, 0xff, 0x44, 0x67, 0x00, 0xb2, 0x2c, 0x00, 0x44, 0x0b, 0x00, + 0xca, 0x2c, 0x00, 0x44, 0xce, 0xc9, 0xb8, 0x2c, 0x00, 0x42, 0x51, 0x03, + 0xba, 0x2c, 0x40, 0x4a, 0x15, 0xaf, 0xc2, 0x2c, 0x00, 0x0c, 0xd4, 0x24, + 0x01, 0xff, 0x43, 0x31, 0xf4, 0xb6, 0x2c, 0x00, 0x46, 0xde, 0xdb, 0xed, + 0x2c, 0x00, 0x42, 0x51, 0x03, 0xbc, 0x2c, 0x00, 0x44, 0x1b, 0xaf, 0xeb, + 0x2c, 0x40, 0x4c, 0xab, 0x90, 0xc8, 0x2c, 0x00, 0x43, 0x6d, 0xf4, 0x80, + 0x2c, 0x40, 0x47, 0xb4, 0xd0, 0x5a, 0xf3, 0x01, 0xa9, 0x01, 0xff, 0xe5, + 0x6a, 0xf3, 0x01, 0x42, 0x1d, 0x01, 0x73, 0xf3, 0x41, 0xa6, 0x79, 0x55, + 0x6f, 0x3b, 0x6d, 0x2a, 0x00, 0x4a, 0x69, 0xab, 0x32, 0x23, 0x00, 0x48, + 0x60, 0xc7, 0x0c, 0x26, 0x00, 0x0a, 0x77, 0xb1, 0x57, 0xb4, 0x06, 0x4e, + 0x4b, 0x7e, 0xea, 0xf3, 0x41, 0x05, 0x7a, 0x69, 0x1d, 0x57, 0xcc, 0x1a, + 0x81, 0x23, 0x00, 0x4c, 0x5b, 0x71, 0x2e, 0x22, 0x00, 0x04, 0x52, 0x8a, + 0x01, 0xff, 0x45, 0xdb, 0xe7, 0x9b, 0xf3, 0x01, 0x53, 0xe8, 0x4c, 0x9b, + 0x00, 0x40, 0x03, 0x4a, 0x03, 0x17, 0x05, 0x51, 0x00, 0x01, 0xff, 0x56, + 0x79, 0x35, 0xfa, 0x22, 0x00, 0x47, 0xe6, 0x7f, 0xfd, 0x22, 0x00, 0x68, + 0x30, 0x05, 0xfb, 0x22, 0x40, 0x46, 0xb4, 0x05, 0x0b, 0x22, 0x00, 0x4f, + 0xe9, 0x53, 0xb3, 0x22, 0xc0, 0x00, 0x4c, 0xf2, 0x28, 0xb5, 0x22, 0x40, + 0x44, 0x5a, 0x03, 0xa7, 0xf6, 0x01, 0x46, 0x54, 0xe1, 0x77, 0xf4, 0x41, + 0x49, 0xbb, 0xb8, 0x8a, 0xf3, 0x01, 0x4b, 0x14, 0xa1, 0x16, 0xf6, 0x01, + 0x49, 0x0d, 0x99, 0x15, 0xf6, 0x41, 0x07, 0x35, 0x16, 0x38, 0x42, 0xed, + 0x05, 0x04, 0x26, 0x00, 0xad, 0x1b, 0xb0, 0x01, 0xff, 0x43, 0x1d, 0x20, + 0xed, 0xf9, 0x01, 0x46, 0x52, 0x92, 0x01, 0x22, 0x00, 0x4e, 0xa1, 0x7a, + 0x84, 0x23, 0x00, 0x47, 0x86, 0x66, 0xdc, 0xf5, 0x41, 0xe1, 0x2c, 0x00, + 0x00, 0x07, 0x85, 0xb8, 0x01, 0xff, 0x42, 0x8a, 0x00, 0x40, 0x00, 0x00, + 0x4a, 0x67, 0x98, 0x52, 0x20, 0x40, 0xa1, 0x8a, 0x17, 0xa2, 0xda, 0x16, + 0xa3, 0x8a, 0x13, 0xa4, 0xae, 0x0f, 0xa5, 0xe9, 0x0e, 0xa6, 0xd4, 0x0e, + 0xa7, 0x8f, 0x0b, 0x02, 0x0b, 0x00, 0xf8, 0x0a, 0xa9, 0xaf, 0x0a, 0x02, + 0x1b, 0x02, 0x89, 0x0a, 0xac, 0xed, 0x05, 0xad, 0x8e, 0x05, 0xae, 0xff, + 0x04, 0xaf, 0xc1, 0x04, 0xb0, 0x8e, 0x04, 0xb2, 0xda, 0x02, 0xb3, 0xfb, + 0x01, 0xb4, 0xb4, 0x01, 0xb5, 0x82, 0x01, 0x08, 0x32, 0x00, 0x41, 0x02, + 0x51, 0x00, 0x27, 0xb8, 0x11, 0x07, 0xe1, 0x33, 0x01, 0xff, 0x45, 0x5c, + 0x00, 0x5b, 0x03, 0x00, 0x45, 0x20, 0x07, 0xcf, 0x1d, 0x40, 0x80, 0x06, + 0x48, 0xd8, 0xc2, 0xb5, 0x1a, 0x40, 0x45, 0x5c, 0x00, 0x3d, 0x03, 0x00, + 0x45, 0x20, 0x07, 0x53, 0x03, 0x40, 0x03, 0x4e, 0x04, 0x06, 0x4f, 0x98, + 0x6d, 0xb6, 0x1a, 0x40, 0x4c, 0xeb, 0x8c, 0xe9, 0x20, 0x00, 0x55, 0x2c, + 0x3c, 0xf9, 0x1d, 0x40, 0x80, 0x25, 0x06, 0x66, 0xd8, 0x01, 0xff, 0x45, + 0xf9, 0x38, 0xd0, 0x1a, 0x80, 0x13, 0x45, 0x15, 0x23, 0xd2, 0x1a, 0x80, + 0x06, 0x46, 0xad, 0x70, 0xd4, 0x1a, 0x40, 0x46, 0x8b, 0x9c, 0xd7, 0x1a, + 0x40, 0x46, 0xce, 0x98, 0xd6, 0x1a, 0x40, 0x05, 0xed, 0x07, 0x06, 0x45, + 0x35, 0x23, 0x3e, 0x03, 0x40, 0x45, 0x5c, 0x00, 0x0d, 0x03, 0x00, 0x45, + 0x20, 0x07, 0x29, 0x03, 0x40, 0xb0, 0x0c, 0x47, 0xf8, 0x06, 0xd1, 0x1d, + 0x00, 0x47, 0xf9, 0x0e, 0xd2, 0x1d, 0x40, 0x06, 0x48, 0xd8, 0x11, 0x0c, + 0xdf, 0x03, 0x01, 0xff, 0x45, 0x5c, 0x00, 0xea, 0x1a, 0x00, 0x45, 0x20, + 0x07, 0x4e, 0x03, 0x40, 0x45, 0x5c, 0x00, 0xf5, 0x1d, 0x00, 0x45, 0x20, + 0x07, 0x1d, 0x03, 0x40, 0x4f, 0xae, 0x12, 0xdb, 0x20, 0x00, 0x44, 0x36, + 0x23, 0x03, 0x03, 0x80, 0x1c, 0x06, 0x6b, 0x1d, 0x06, 0x51, 0xd5, 0x5e, + 0x12, 0x03, 0x40, 0x4c, 0xfb, 0x8b, 0xcb, 0x1a, 0x00, 0x43, 0x23, 0x0a, + 0xb4, 0x1a, 0x00, 0x48, 0x10, 0xcc, 0xe8, 0x20, 0x40, 0x80, 0x01, 0xff, + 0x45, 0x20, 0x07, 0x30, 0x03, 0x00, 0x4f, 0x69, 0x6f, 0x29, 0xfe, 0x00, + 0x47, 0x01, 0x23, 0x34, 0x03, 0x00, 0x50, 0xa6, 0x66, 0x2a, 0xfe, 0x40, + 0x07, 0x9f, 0xd0, 0x4c, 0xa8, 0x2b, 0x4a, 0x2f, 0xae, 0xc2, 0x1d, 0x00, + 0x06, 0xbc, 0x24, 0x0c, 0x61, 0xb0, 0x0e, 0xba, 0x1a, 0x00, 0x4e, 0x3d, + 0x7e, 0xc3, 0x1d, 0x40, 0x45, 0x5c, 0x00, 0xe4, 0x1a, 0x00, 0xa2, 0x01, + 0xff, 0x44, 0x21, 0x07, 0x3b, 0x03, 0x00, 0x4d, 0xb2, 0x87, 0xc5, 0x1a, + 0x40, 0x48, 0xf7, 0xb0, 0xd9, 0x1a, 0x00, 0x04, 0x35, 0x07, 0x01, 0xff, + 0xb3, 0x06, 0x55, 0xcc, 0x3e, 0xd3, 0x20, 0x40, 0x4e, 0x87, 0x33, 0x37, + 0x03, 0x00, 0x4d, 0xf6, 0x49, 0x35, 0x03, 0x40, 0x45, 0x5c, 0x00, 0xe5, + 0x1a, 0x00, 0x45, 0x20, 0x07, 0x3c, 0x03, 0x40, 0xa5, 0x97, 0x01, 0xa9, + 0x01, 0xff, 0x03, 0xca, 0x00, 0x17, 0x03, 0xa2, 0x01, 0x01, 0xff, 0x45, + 0x5c, 0x00, 0x0a, 0x03, 0x00, 0x45, 0x20, 0x07, 0x25, 0x03, 0x00, 0x47, + 0x01, 0x23, 0xd8, 0x20, 0x40, 0x80, 0x06, 0x61, 0x13, 0x0f, 0xec, 0x20, + 0x40, 0x05, 0xce, 0x00, 0x3b, 0x02, 0x22, 0x00, 0x21, 0x0c, 0xd8, 0x21, + 0x11, 0x05, 0x49, 0xd8, 0x01, 0xff, 0x45, 0x5c, 0x00, 0xe1, 0x1a, 0x00, + 0x45, 0x20, 0x07, 0x19, 0x03, 0x40, 0x4b, 0x7f, 0x05, 0xc2, 0x1a, 0x00, + 0x4b, 0x8f, 0x99, 0xc4, 0x1a, 0x40, 0x08, 0xc0, 0xc7, 0x06, 0x4b, 0xcb, + 0x02, 0xd1, 0x20, 0x40, 0x45, 0x5c, 0x00, 0x57, 0x03, 0x00, 0x45, 0x20, + 0x07, 0x39, 0x03, 0x40, 0x80, 0x24, 0x05, 0xa0, 0x1b, 0x01, 0xff, 0xa1, + 0x06, 0x45, 0x20, 0x07, 0x55, 0x03, 0x40, 0x44, 0x5d, 0x00, 0x50, 0x03, + 0x00, 0x03, 0x1b, 0x00, 0x01, 0xff, 0x54, 0xcc, 0x41, 0xff, 0x1d, 0x00, + 0x52, 0x29, 0x56, 0x56, 0x03, 0x40, 0x45, 0x5c, 0x00, 0xd7, 0x20, 0x00, + 0x45, 0x20, 0x07, 0xef, 0x20, 0x40, 0x52, 0xe1, 0x55, 0x22, 0x03, 0x00, + 0x05, 0x3e, 0x04, 0x01, 0xff, 0x50, 0x85, 0x33, 0xe5, 0x20, 0x00, 0x4d, + 0xd9, 0x5e, 0x14, 0x03, 0x40, 0xa1, 0x11, 0x09, 0xe0, 0x71, 0x01, 0xff, + 0x45, 0x5c, 0x00, 0xc8, 0x1a, 0x00, 0x45, 0x20, 0x07, 0x1f, 0x03, 0x40, + 0x54, 0x10, 0x44, 0x21, 0x03, 0x00, 0x0a, 0xf7, 0x60, 0x01, 0xff, 0x45, + 0x5c, 0x00, 0xbb, 0x1a, 0x00, 0x45, 0x20, 0x07, 0xbd, 0x1a, 0x00, 0x47, + 0x01, 0x23, 0xbe, 0x1a, 0x40, 0x45, 0xbb, 0xde, 0x28, 0x03, 0x80, 0x2e, + 0x11, 0xb6, 0x5b, 0x0c, 0x4e, 0x11, 0x7b, 0xb7, 0x1a, 0x00, 0x47, 0x83, + 0x8a, 0x05, 0x03, 0x40, 0x42, 0x1a, 0x00, 0x76, 0x03, 0x01, 0x43, 0x30, + 0x6c, 0x77, 0x03, 0x01, 0x45, 0x07, 0xe9, 0x79, 0x03, 0x01, 0x43, 0x9a, + 0xf4, 0x7a, 0x03, 0x01, 0x44, 0x55, 0xf3, 0x78, 0x03, 0x41, 0x46, 0x5b, + 0x00, 0xce, 0x1d, 0x40, 0x4e, 0xaf, 0x7a, 0x4a, 0x03, 0x00, 0x50, 0x06, + 0x68, 0xc6, 0x1a, 0x40, 0x45, 0xae, 0x70, 0x04, 0x03, 0x80, 0x11, 0x0a, + 0xf5, 0xab, 0x01, 0xff, 0x45, 0x5c, 0x00, 0xe2, 0x1a, 0x00, 0x45, 0x20, + 0x07, 0x20, 0x03, 0x40, 0x80, 0x22, 0x8d, 0x01, 0xff, 0x45, 0xf9, 0x38, + 0xc4, 0x1d, 0x80, 0x12, 0x45, 0x53, 0x23, 0xcc, 0x1d, 0x00, 0x45, 0x15, + 0x23, 0xc6, 0x1d, 0x00, 0x4d, 0x3c, 0x8a, 0xd5, 0x1a, 0x40, 0x46, 0xce, + 0x98, 0xd8, 0x1a, 0x40, 0x45, 0x20, 0x07, 0x31, 0x03, 0x00, 0x49, 0xf9, + 0x13, 0x24, 0xfe, 0x80, 0x0d, 0x4a, 0x55, 0x04, 0x25, 0xfe, 0xc0, 0x00, + 0x46, 0x1f, 0x07, 0x2c, 0xfe, 0x40, 0x46, 0x1f, 0x07, 0x2b, 0xfe, 0x40, + 0x05, 0xdf, 0x05, 0xed, 0x01, 0x03, 0xc4, 0x00, 0x4f, 0x02, 0x3f, 0x00, + 0x27, 0xaf, 0x01, 0xff, 0x03, 0xa2, 0x01, 0x06, 0x46, 0x77, 0x8a, 0x32, + 0x03, 0x40, 0x56, 0x7f, 0x33, 0xeb, 0x20, 0x00, 0xb3, 0x06, 0x55, 0xcc, + 0x3e, 0xd2, 0x20, 0x40, 0x4e, 0x87, 0x33, 0x38, 0x03, 0x00, 0x4d, 0xf6, + 0x49, 0x36, 0x03, 0x40, 0x06, 0x9f, 0x1f, 0x06, 0x5e, 0x71, 0x13, 0xb9, + 0x1a, 0x40, 0x49, 0xf9, 0x13, 0x20, 0xfe, 0x80, 0x0d, 0x4a, 0x55, 0x04, + 0x21, 0xfe, 0xc0, 0x00, 0x46, 0x1f, 0x07, 0x28, 0xfe, 0x40, 0x46, 0x1f, + 0x07, 0x27, 0xfe, 0x40, 0x80, 0x11, 0x06, 0xa9, 0x01, 0x01, 0xff, 0x4d, + 0xd7, 0x80, 0xea, 0x20, 0x00, 0x5b, 0x19, 0x0f, 0xed, 0x20, 0x40, 0xa1, + 0x4b, 0x02, 0x22, 0x00, 0x31, 0x0c, 0xd8, 0x21, 0x21, 0x0c, 0xc8, 0x00, + 0x11, 0x05, 0x49, 0xd8, 0x01, 0xff, 0x45, 0x5c, 0x00, 0xe0, 0x1a, 0x00, + 0x45, 0x20, 0x07, 0x18, 0x03, 0x40, 0x45, 0x5c, 0x00, 0xe1, 0x20, 0x00, + 0x45, 0x20, 0x07, 0x4d, 0x03, 0x40, 0x4a, 0x41, 0x06, 0xc1, 0x1a, 0x00, + 0x4a, 0x35, 0xa8, 0xc3, 0x1a, 0x40, 0x08, 0xc0, 0xc7, 0x06, 0x4b, 0xcb, + 0x02, 0xd0, 0x20, 0x40, 0x45, 0x5c, 0x00, 0x51, 0x03, 0x00, 0x45, 0x20, + 0x07, 0x1c, 0x03, 0x40, 0x05, 0x32, 0x06, 0x24, 0x04, 0xcf, 0x00, 0x01, + 0xff, 0x80, 0x11, 0x05, 0xa0, 0x1b, 0x01, 0xff, 0x45, 0x5c, 0x00, 0xfe, + 0x1d, 0x00, 0x45, 0x20, 0x07, 0x54, 0x03, 0x40, 0x45, 0x5c, 0x00, 0xd6, + 0x20, 0x00, 0x45, 0x20, 0x07, 0xee, 0x20, 0x40, 0x45, 0x5c, 0x00, 0x1a, + 0x03, 0x00, 0x45, 0x20, 0x07, 0x49, 0x03, 0x00, 0x4d, 0x59, 0x81, 0xe9, + 0x1a, 0x40, 0x15, 0xbf, 0x3c, 0x8e, 0x02, 0x0d, 0x76, 0x08, 0x01, 0xff, + 0xe1, 0x63, 0x03, 0x80, 0xeb, 0x01, 0xe2, 0xe8, 0x1d, 0x80, 0xdf, 0x01, + 0xe3, 0x68, 0x03, 0x80, 0xd3, 0x01, 0xe4, 0x69, 0x03, 0x00, 0xe5, 0x64, + 0x03, 0x80, 0xbd, 0x01, 0xe6, 0xeb, 0x1d, 0x80, 0xb1, 0x01, 0xe7, 0xda, + 0x1d, 0x00, 0xe8, 0x6a, 0x03, 0x00, 0xe9, 0x65, 0x03, 0x80, 0x8e, 0x01, + 0xeb, 0xdc, 0x1d, 0x00, 0xec, 0xdd, 0x1d, 0x80, 0x79, 0xed, 0x6b, 0x03, + 0x00, 0xee, 0xe0, 0x1d, 0x00, 0xef, 0x66, 0x03, 0x80, 0x5b, 0xf0, 0xee, + 0x1d, 0x00, 0xf2, 0x6c, 0x03, 0x80, 0x43, 0xf3, 0xe4, 0x1d, 0x80, 0x38, + 0xf4, 0x6d, 0x03, 0x80, 0x2d, 0xf5, 0x67, 0x03, 0x80, 0x17, 0xf6, 0x6e, + 0x03, 0x00, 0xf7, 0xf1, 0x1d, 0x80, 0x08, 0xf8, 0x6f, 0x03, 0x00, 0xfa, + 0xe6, 0x1d, 0x40, 0x46, 0x1f, 0x07, 0xbf, 0x1a, 0x40, 0x06, 0x50, 0x00, + 0x01, 0xff, 0x49, 0xb7, 0x23, 0xf4, 0x1d, 0x00, 0x5b, 0x5d, 0x1c, 0xf0, + 0x1d, 0x40, 0x4d, 0xc7, 0x89, 0xc0, 0x1a, 0x40, 0x44, 0xb5, 0x7b, 0xea, + 0x1d, 0x40, 0x80, 0x01, 0xff, 0x45, 0x20, 0x07, 0xca, 0x1d, 0x00, 0x47, + 0x9c, 0xb2, 0xe3, 0x1d, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x49, 0xb7, + 0x23, 0xf3, 0x1d, 0x00, 0x5b, 0x5d, 0x1c, 0xed, 0x1d, 0x40, 0x59, 0x21, + 0x23, 0xec, 0x1d, 0x00, 0x45, 0x54, 0xad, 0xe5, 0x1d, 0x40, 0x07, 0x15, + 0x70, 0x01, 0xff, 0xe4, 0xd8, 0x1d, 0x00, 0xe7, 0xcc, 0x1a, 0x00, 0xf2, + 0xcd, 0x1a, 0x00, 0xf4, 0xce, 0x1a, 0x40, 0x55, 0x95, 0x3c, 0xd3, 0x1d, + 0x40, 0x42, 0xa4, 0x02, 0xef, 0x1d, 0x00, 0x42, 0x53, 0x00, 0xd9, 0x1d, + 0x40, 0x48, 0xf8, 0xc1, 0xd7, 0x1d, 0x40, 0x43, 0x94, 0x0f, 0xe9, 0x1d, + 0x40, 0x4f, 0xf6, 0x69, 0xf2, 0x1d, 0x00, 0xe5, 0xd4, 0x1d, 0x00, 0x44, + 0x3f, 0xe4, 0xe7, 0x1d, 0x00, 0xef, 0xd5, 0x1d, 0x00, 0xf6, 0xd6, 0x1d, + 0x40, 0xe7, 0xdb, 0x1d, 0x00, 0xec, 0xde, 0x1d, 0x00, 0xed, 0xdf, 0x1d, + 0x00, 0xee, 0xe1, 0x1d, 0x00, 0xf2, 0xe2, 0x1d, 0x40, 0x10, 0xb6, 0x67, + 0x11, 0x0b, 0xe7, 0xa4, 0x01, 0xff, 0x44, 0xc3, 0x00, 0xf7, 0x1d, 0x00, + 0x45, 0xc8, 0x00, 0xf6, 0x1d, 0x40, 0x56, 0x1b, 0x37, 0x9a, 0x30, 0x00, + 0x51, 0x20, 0x37, 0x99, 0x30, 0x40, 0xae, 0x06, 0x47, 0x0c, 0x0f, 0xd0, + 0x1d, 0x40, 0x46, 0x93, 0x6c, 0xb2, 0x1a, 0x00, 0x07, 0x60, 0x23, 0x01, + 0xff, 0x02, 0x63, 0x09, 0x11, 0x0c, 0x23, 0x8e, 0x01, 0xff, 0x45, 0x5c, + 0x00, 0xc7, 0x1a, 0x00, 0x45, 0x20, 0x07, 0x2b, 0x03, 0x40, 0x43, 0x59, + 0x13, 0x11, 0x03, 0x80, 0x11, 0x05, 0x37, 0x3c, 0x01, 0xff, 0x45, 0x5c, + 0x00, 0xe3, 0x1a, 0x00, 0x45, 0x20, 0x07, 0x3a, 0x03, 0x40, 0x46, 0x1f, + 0x07, 0x2f, 0x03, 0x40, 0x4e, 0xf9, 0x79, 0x4b, 0x03, 0x00, 0x48, 0x39, + 0xab, 0x09, 0x03, 0x00, 0x42, 0x5e, 0x01, 0x1b, 0x03, 0x40, 0x11, 0x83, + 0x5b, 0xc7, 0x01, 0xb2, 0x01, 0xff, 0xa1, 0x36, 0x04, 0x88, 0x2e, 0x01, + 0xff, 0x4f, 0x12, 0x6c, 0x44, 0x03, 0x00, 0x47, 0x7b, 0xd2, 0x43, 0x03, + 0x00, 0x08, 0x01, 0x28, 0x0c, 0x4b, 0x40, 0xa1, 0x42, 0x03, 0x00, 0x4d, + 0x38, 0x4f, 0x45, 0x03, 0x40, 0x49, 0x01, 0xbe, 0x44, 0xd2, 0x01, 0xb4, + 0x01, 0xff, 0x48, 0xf0, 0xc5, 0x43, 0xd2, 0x01, 0x46, 0x98, 0xdf, 0x42, + 0xd2, 0x41, 0x05, 0x43, 0xe9, 0x35, 0x4c, 0x9f, 0x93, 0x4f, 0x03, 0x00, + 0x02, 0x32, 0x00, 0x01, 0xff, 0x80, 0x15, 0x8d, 0x01, 0xff, 0x4b, 0xc9, + 0x98, 0xc8, 0x1d, 0x00, 0x46, 0xad, 0x70, 0xc5, 0x1d, 0x00, 0x4d, 0x3c, + 0x8a, 0xd1, 0x1a, 0x40, 0x46, 0xda, 0x04, 0x00, 0x03, 0x80, 0x06, 0x49, + 0x3b, 0x2d, 0x40, 0x03, 0x40, 0x46, 0x1f, 0x07, 0x16, 0x03, 0x40, 0x06, + 0xef, 0x06, 0x21, 0x07, 0xec, 0x05, 0x01, 0xff, 0xe1, 0x70, 0x13, 0x01, + 0x42, 0x1b, 0x02, 0x71, 0x13, 0x01, 0x42, 0x2a, 0x05, 0x72, 0x13, 0x01, + 0x42, 0xbb, 0x09, 0x74, 0x13, 0x01, 0x42, 0x02, 0x00, 0x73, 0x13, 0x41, + 0xa6, 0x20, 0x43, 0x0e, 0x0b, 0x67, 0x13, 0x01, 0x43, 0x00, 0x26, 0x6c, + 0x13, 0x01, 0xb4, 0x06, 0x44, 0x43, 0x1e, 0x66, 0x13, 0x41, 0x44, 0x25, + 0x01, 0x69, 0x13, 0x01, 0x42, 0x15, 0x02, 0x68, 0x13, 0x41, 0x43, 0xd2, + 0x05, 0x6b, 0x13, 0x01, 0x43, 0xf6, 0x06, 0x6a, 0x13, 0x41, 0x43, 0xf2, + 0xf3, 0x00, 0xe0, 0x01, 0xa2, 0xe1, 0x01, 0x46, 0xeb, 0x80, 0x1d, 0xe0, + 0x01, 0xa4, 0xcc, 0x01, 0xa6, 0xbd, 0x01, 0x47, 0x4e, 0xd1, 0x03, 0xe0, + 0x01, 0x44, 0x2d, 0xf0, 0x18, 0xe0, 0x01, 0xe9, 0x0b, 0xe0, 0x81, 0x8f, + 0x01, 0x44, 0xc5, 0xf0, 0x0d, 0xe0, 0x01, 0x47, 0xf2, 0xd2, 0x0e, 0xe0, + 0x01, 0x47, 0xfd, 0x6a, 0x0f, 0xe0, 0x01, 0x45, 0xf3, 0xe8, 0x10, 0xe0, + 0x01, 0x43, 0x64, 0x31, 0x11, 0xe0, 0x01, 0x46, 0x32, 0xdf, 0x12, 0xe0, + 0x01, 0x45, 0x6f, 0xea, 0x13, 0xe0, 0x01, 0xb3, 0x4b, 0xb4, 0x3d, 0x43, + 0x0a, 0xd6, 0x16, 0xe0, 0x01, 0x44, 0xf5, 0xf2, 0x02, 0xe0, 0x01, 0xb9, + 0x0f, 0xba, 0x01, 0xff, 0x45, 0xf1, 0xe5, 0x08, 0xe0, 0x01, 0x46, 0x8c, + 0xdc, 0x06, 0xe0, 0x41, 0x43, 0xb3, 0x00, 0x21, 0xe0, 0x01, 0xa5, 0x08, + 0xef, 0x26, 0xe0, 0x01, 0xf5, 0x23, 0xe0, 0x41, 0xb2, 0x06, 0x43, 0x26, + 0x0a, 0x05, 0xe0, 0x41, 0xe9, 0x20, 0xe0, 0x01, 0xf5, 0x1f, 0xe0, 0x41, + 0x42, 0x5a, 0x03, 0x1c, 0xe0, 0x01, 0x45, 0x27, 0xec, 0x15, 0xe0, 0x41, + 0xa8, 0x0c, 0x44, 0x15, 0xf1, 0x14, 0xe0, 0x01, 0x48, 0x46, 0xbf, 0x24, + 0xe0, 0x41, 0xe1, 0x1e, 0xe0, 0x01, 0x42, 0x12, 0x00, 0x1b, 0xe0, 0x41, + 0x4b, 0x22, 0xa0, 0x0a, 0xe0, 0x01, 0x07, 0x9e, 0x21, 0x06, 0x43, 0x54, + 0x28, 0x09, 0xe0, 0x41, 0x47, 0x80, 0xcf, 0x29, 0xe0, 0x01, 0x49, 0x45, + 0xbf, 0x27, 0xe0, 0x41, 0x43, 0xe7, 0x05, 0x2a, 0xe0, 0x01, 0x44, 0x5a, + 0xbf, 0x17, 0xe0, 0x41, 0x45, 0xa9, 0xe7, 0x0c, 0xe0, 0x01, 0x44, 0xb9, + 0xf1, 0x04, 0xe0, 0x41, 0x46, 0x81, 0xcf, 0x28, 0xe0, 0x01, 0x43, 0x8f, + 0xd2, 0x01, 0xe0, 0x41, 0x46, 0x60, 0xdb, 0x52, 0x03, 0x00, 0x48, 0x04, + 0xb9, 0xda, 0x1a, 0x00, 0x4e, 0xd2, 0x46, 0xdc, 0x20, 0x40, 0x09, 0x2d, + 0xbc, 0x11, 0x0b, 0x82, 0xa1, 0x01, 0xff, 0x45, 0x5c, 0x00, 0xe8, 0x1a, + 0x00, 0x45, 0x20, 0x07, 0x47, 0x03, 0x40, 0x46, 0x12, 0x03, 0xdd, 0x20, + 0x80, 0x20, 0x47, 0x95, 0x44, 0xdf, 0x20, 0x00, 0x46, 0x5e, 0xdd, 0xe3, + 0x20, 0x00, 0xb3, 0x06, 0x58, 0xb6, 0x2b, 0xe4, 0x20, 0x40, 0x45, 0xce, + 0x59, 0xe2, 0x20, 0x00, 0x45, 0xd7, 0x05, 0xde, 0x20, 0x40, 0x4a, 0x43, + 0x0e, 0xe0, 0x20, 0x40, 0xa5, 0xd5, 0x02, 0x48, 0xb8, 0x23, 0x08, 0x03, + 0x80, 0xb9, 0x02, 0xaf, 0x01, 0xff, 0xb4, 0xf7, 0x01, 0x04, 0x3d, 0x01, + 0x1b, 0x02, 0xa7, 0x01, 0x01, 0xff, 0x06, 0x48, 0xd8, 0x06, 0x4b, 0xb8, + 0x02, 0xb3, 0x1a, 0x40, 0x45, 0x5c, 0x00, 0xdb, 0x1a, 0x00, 0x45, 0x20, + 0x07, 0x1e, 0x03, 0x40, 0x80, 0x06, 0x53, 0xe6, 0x48, 0xb0, 0x1a, 0x40, + 0xa1, 0xb6, 0x01, 0x45, 0x53, 0x23, 0x5d, 0x03, 0x80, 0xa8, 0x01, 0xa3, + 0x99, 0x01, 0x4c, 0x15, 0x23, 0x0f, 0x03, 0x00, 0x4e, 0x5e, 0x23, 0x61, + 0x03, 0x80, 0x85, 0x01, 0x48, 0x75, 0x8a, 0x33, 0x03, 0x00, 0x46, 0xad, + 0x70, 0x5e, 0x03, 0x80, 0x72, 0xaf, 0x64, 0xb0, 0x4b, 0x02, 0x0d, 0x00, + 0x31, 0x45, 0x35, 0x23, 0x60, 0x03, 0x80, 0x1b, 0x09, 0x32, 0x00, 0x01, + 0xff, 0x05, 0xed, 0x07, 0x06, 0x4e, 0xf5, 0x49, 0xe6, 0x20, 0x40, 0x45, + 0x5c, 0x00, 0x0e, 0x03, 0x00, 0x45, 0x20, 0x07, 0x48, 0x03, 0x40, 0x80, + 0x01, 0xff, 0x49, 0xf9, 0x13, 0x22, 0xfe, 0x00, 0x4a, 0x55, 0x04, 0x23, + 0xfe, 0x40, 0x0f, 0xdc, 0x03, 0x06, 0x48, 0x1b, 0x6a, 0x5a, 0x03, 0x40, + 0x45, 0x5c, 0x00, 0xeb, 0x1a, 0x00, 0x45, 0x20, 0x07, 0x62, 0x03, 0x40, + 0x50, 0xf6, 0x60, 0xbc, 0x1a, 0x00, 0x09, 0xe0, 0x71, 0x01, 0xff, 0x45, + 0x5c, 0x00, 0xc9, 0x1a, 0x00, 0x45, 0x20, 0x07, 0xca, 0x1a, 0x40, 0x4e, + 0x11, 0x7b, 0xb8, 0x1a, 0x00, 0x47, 0x83, 0x8a, 0x3f, 0x03, 0x40, 0x46, + 0x1f, 0x07, 0x5f, 0x03, 0x40, 0x46, 0x1f, 0x07, 0xfc, 0x1d, 0x40, 0x44, + 0xe7, 0x6c, 0xcf, 0x1a, 0x00, 0x4f, 0x68, 0x32, 0xcd, 0x1d, 0x40, 0x46, + 0x1f, 0x07, 0x5c, 0x03, 0x40, 0x4b, 0xfc, 0x8b, 0x0b, 0x03, 0x00, 0x04, + 0x2b, 0x8e, 0x01, 0xff, 0x45, 0x5c, 0x00, 0xe7, 0x1a, 0x00, 0x45, 0x20, + 0x07, 0xe6, 0x1a, 0x40, 0x80, 0x17, 0x4f, 0x14, 0x6a, 0xdd, 0x1a, 0x00, + 0x04, 0x77, 0x00, 0x01, 0xff, 0x4c, 0xfb, 0x8b, 0xc1, 0x1d, 0x00, 0x4c, + 0x15, 0x23, 0xc0, 0x1d, 0x40, 0x45, 0x5c, 0x00, 0x07, 0x03, 0x80, 0x0d, + 0x45, 0x20, 0x07, 0x23, 0x03, 0xc0, 0x00, 0x45, 0xc2, 0x00, 0xfa, 0x1d, + 0x40, 0x80, 0x01, 0xff, 0x44, 0xc3, 0x00, 0xf8, 0x1d, 0x00, 0x45, 0xc8, + 0x00, 0x58, 0x03, 0x40, 0x80, 0x06, 0x45, 0x18, 0x6a, 0xb1, 0x1a, 0x40, + 0x45, 0x20, 0x07, 0x24, 0x03, 0x00, 0x54, 0xe0, 0x46, 0xdc, 0x1a, 0x40, + 0x4b, 0xac, 0x9e, 0xfb, 0x1d, 0x00, 0x09, 0xd1, 0xc0, 0x01, 0xff, 0x06, + 0xef, 0x06, 0x30, 0x07, 0xec, 0x05, 0x06, 0x4d, 0xa9, 0x88, 0xf1, 0xa8, + 0x40, 0xe1, 0xea, 0xa8, 0x00, 0x42, 0x1b, 0x02, 0xec, 0xa8, 0x00, 0x42, + 0x2a, 0x05, 0xed, 0xa8, 0x00, 0x42, 0xbb, 0x09, 0xee, 0xa8, 0x00, 0x42, + 0x71, 0x00, 0xef, 0xa8, 0x00, 0xf5, 0xeb, 0xa8, 0x00, 0x42, 0x02, 0x00, + 0xf0, 0xa8, 0x40, 0x45, 0x12, 0x0b, 0xe8, 0xa8, 0x00, 0xa6, 0x2e, 0x44, + 0xcf, 0x2a, 0xe9, 0xa8, 0x00, 0x43, 0x0e, 0x0b, 0xe1, 0xa8, 0x00, 0xb3, + 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, 0xe0, 0xa8, 0x40, 0x44, 0x25, 0x01, + 0xe3, 0xa8, 0x00, 0x42, 0x15, 0x02, 0xe2, 0xa8, 0x40, 0x44, 0xc9, 0x1d, + 0xe7, 0xa8, 0x00, 0x42, 0x01, 0x26, 0xe6, 0xa8, 0x40, 0x43, 0xd2, 0x05, + 0xe5, 0xa8, 0x00, 0x43, 0xf6, 0x06, 0xe4, 0xa8, 0x40, 0xa1, 0xb7, 0x03, + 0x46, 0xfa, 0xc1, 0x27, 0x03, 0x00, 0x50, 0xd0, 0x04, 0x02, 0x03, 0x80, + 0xa3, 0x03, 0x09, 0x66, 0x10, 0x92, 0x03, 0xaf, 0xeb, 0x02, 0x08, 0xf8, + 0xcc, 0x01, 0xff, 0x4e, 0xb1, 0x76, 0x85, 0x04, 0x00, 0x08, 0x71, 0x11, + 0xcf, 0x02, 0x46, 0xed, 0x4f, 0x7c, 0xa6, 0x00, 0x07, 0xec, 0x05, 0x52, + 0x4d, 0xf5, 0x3b, 0x89, 0x04, 0x00, 0xb0, 0x30, 0x65, 0x76, 0x08, 0x8f, + 0xe0, 0x01, 0xb4, 0x06, 0x45, 0x2c, 0xec, 0x6f, 0xa6, 0x40, 0x50, 0xa6, + 0x62, 0x70, 0xa6, 0x00, 0x55, 0xed, 0x3b, 0x72, 0xa6, 0x00, 0x44, 0x41, + 0x98, 0x83, 0x04, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x49, 0xf9, 0x13, 0x2e, + 0xfe, 0x00, 0x4a, 0x55, 0x04, 0x2f, 0xfe, 0x40, 0xa1, 0x0c, 0x47, 0xcb, + 0xd3, 0x87, 0x04, 0x00, 0x4d, 0xc3, 0x88, 0x86, 0x04, 0x40, 0x4c, 0xdb, + 0x90, 0x84, 0x04, 0x00, 0x45, 0x98, 0xd4, 0x7d, 0xa6, 0x40, 0xe1, 0xf6, + 0x2d, 0x00, 0xa2, 0xe2, 0x01, 0x43, 0x6d, 0x14, 0xf1, 0x2d, 0x00, 0xa4, + 0xcf, 0x01, 0xa5, 0xad, 0x01, 0x44, 0xd1, 0xef, 0xf4, 0x2d, 0x00, 0x43, + 0x26, 0x52, 0xe2, 0x2d, 0x00, 0x42, 0x22, 0x00, 0xef, 0x2d, 0x80, 0x93, + 0x01, 0xe9, 0x75, 0xa6, 0x80, 0x77, 0x42, 0x1b, 0x02, 0xe6, 0x2d, 0x00, + 0x4a, 0x37, 0x59, 0xfd, 0x2d, 0x00, 0x4c, 0x1f, 0x92, 0xf9, 0x2d, 0x00, + 0xef, 0xea, 0x2d, 0x80, 0x5a, 0x42, 0x6f, 0x02, 0xeb, 0x2d, 0x00, 0xb3, + 0x40, 0xb4, 0x34, 0xf5, 0x77, 0xa6, 0x80, 0x29, 0x42, 0x32, 0x00, 0xe1, + 0x2d, 0x00, 0xb9, 0x0d, 0xba, 0x01, 0xff, 0xe5, 0xe5, 0x2d, 0x00, 0x42, + 0xb0, 0x01, 0xe4, 0x2d, 0x40, 0x42, 0x8a, 0x00, 0xfa, 0x2d, 0x00, 0x43, + 0x9c, 0x2b, 0x79, 0xa6, 0x00, 0xe9, 0x76, 0xa6, 0x00, 0xf5, 0xfb, 0x2d, + 0x40, 0x4b, 0x07, 0x9e, 0x74, 0xa6, 0x40, 0xe5, 0xee, 0x2d, 0x00, 0x42, + 0x46, 0x03, 0xf0, 0x2d, 0x40, 0xa8, 0x06, 0x48, 0x87, 0x8e, 0x7a, 0xa6, + 0x40, 0xe1, 0xf2, 0x2d, 0x00, 0x43, 0x91, 0x20, 0xf3, 0x2d, 0x40, 0x44, + 0xcc, 0x7b, 0x7b, 0xa6, 0x40, 0xe5, 0xf7, 0x2d, 0x00, 0x08, 0x78, 0xc9, + 0x01, 0xff, 0xe1, 0xfc, 0x2d, 0x00, 0x47, 0x80, 0xcf, 0xff, 0x2d, 0x00, + 0xe5, 0x9f, 0xa6, 0x40, 0x47, 0xfc, 0x92, 0x78, 0xa6, 0x40, 0xe6, 0x9e, + 0xa6, 0x00, 0xec, 0xe7, 0x2d, 0x00, 0xed, 0xe8, 0x2d, 0x00, 0xee, 0xe9, + 0x2d, 0x00, 0xf2, 0xec, 0x2d, 0x00, 0xf3, 0xed, 0x2d, 0xc0, 0x00, 0x43, + 0xb4, 0x7c, 0xf5, 0x2d, 0x40, 0xe5, 0xe3, 0x2d, 0x00, 0x44, 0xa9, 0xe7, + 0xf8, 0x2d, 0x40, 0xe5, 0xe0, 0x2d, 0x00, 0x46, 0x81, 0xcf, 0xfe, 0x2d, + 0x40, 0x4d, 0xf5, 0x3b, 0x71, 0xa6, 0x00, 0x4e, 0xfb, 0x7c, 0x88, 0x04, + 0x40, 0x04, 0x15, 0x05, 0x0d, 0x4f, 0xa4, 0x70, 0x26, 0xfe, 0xc0, 0x00, + 0x46, 0x1f, 0x07, 0x2d, 0xfe, 0x40, 0x45, 0x5c, 0x00, 0x13, 0x03, 0x80, + 0x06, 0x45, 0x20, 0x07, 0x26, 0x03, 0x40, 0x46, 0xc7, 0x00, 0x15, 0x03, + 0x40, 0x4b, 0xce, 0x00, 0xd5, 0x20, 0x00, 0x4c, 0x9b, 0x94, 0xd9, 0x20, + 0x40, 0x46, 0x1f, 0x07, 0x2d, 0x03, 0x40, 0x49, 0xd9, 0x23, 0x10, 0x03, + 0x00, 0x43, 0xb1, 0x0e, 0x0c, 0x03, 0xc0, 0x00, 0x46, 0x1f, 0x07, 0x2c, + 0x03, 0x40, 0x4a, 0xc3, 0xab, 0x3b, 0x13, 0x01, 0xb2, 0x01, 0xff, 0x43, + 0x59, 0x13, 0x06, 0x03, 0x80, 0x11, 0x05, 0x37, 0x3c, 0x01, 0xff, 0x45, + 0x5c, 0x00, 0x46, 0x03, 0x00, 0x45, 0x20, 0x07, 0x2a, 0x03, 0x40, 0x46, + 0x1f, 0x07, 0x2e, 0x03, 0x00, 0x47, 0xc7, 0xcd, 0xcb, 0x1d, 0x40, 0x04, + 0xfa, 0x38, 0x3a, 0x0f, 0xd2, 0x6f, 0x2a, 0xae, 0x11, 0x08, 0x66, 0x67, + 0x01, 0xff, 0x45, 0x5c, 0x00, 0xf0, 0x20, 0x00, 0x45, 0x20, 0x07, 0x59, + 0x03, 0x40, 0x4c, 0xdf, 0x92, 0xe7, 0x20, 0x00, 0x0c, 0x63, 0x10, 0x01, + 0xff, 0x4b, 0xce, 0x00, 0xd4, 0x20, 0x00, 0x4c, 0x9b, 0x94, 0xda, 0x20, + 0x40, 0x45, 0x5c, 0x00, 0x4c, 0x03, 0x00, 0x45, 0x20, 0x07, 0xfd, 0x1d, + 0x40, 0x80, 0x15, 0x8d, 0x01, 0xff, 0x4b, 0x86, 0x9c, 0xc9, 0x1d, 0x00, + 0x46, 0xad, 0x70, 0xc7, 0x1d, 0x00, 0x4d, 0x3c, 0x8a, 0xd3, 0x1a, 0x40, + 0x46, 0xda, 0x04, 0x01, 0x03, 0x80, 0x06, 0x49, 0x3b, 0x2d, 0x41, 0x03, + 0x40, 0x46, 0x1f, 0x07, 0x17, 0x03, 0x40, 0x4d, 0x1b, 0x85, 0xa5, 0xf4, + 0x01, 0x42, 0x10, 0x00, 0x3a, 0x00, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x46, + 0x48, 0x13, 0x54, 0x22, 0x00, 0x44, 0x5a, 0x03, 0xa1, 0x20, 0x40, 0xab, + 0x06, 0x44, 0xd1, 0xf1, 0x65, 0xf9, 0x41, 0x45, 0xd7, 0xd4, 0xb3, 0xfa, + 0x01, 0x4a, 0x95, 0xb1, 0x78, 0xf3, 0x41, 0xa1, 0xdb, 0x03, 0x51, 0xc9, + 0x59, 0x9a, 0x23, 0x00, 0xa9, 0xbc, 0x03, 0xaf, 0x01, 0xff, 0x02, 0x36, + 0x01, 0x8f, 0x01, 0x02, 0x46, 0x03, 0x2a, 0x42, 0xb2, 0x0c, 0x01, 0x26, + 0x80, 0x06, 0x47, 0x3e, 0x7c, 0x21, 0xf9, 0x41, 0x06, 0x50, 0x00, 0x01, + 0xff, 0x49, 0x67, 0xbb, 0x29, 0xf3, 0x01, 0x44, 0x92, 0x08, 0x27, 0xf3, + 0x01, 0x44, 0xd9, 0x2e, 0x28, 0xf3, 0x01, 0x47, 0x72, 0xd6, 0x2a, 0xf3, + 0x41, 0x43, 0x4f, 0x02, 0x50, 0x20, 0x00, 0x02, 0x06, 0x00, 0x01, 0xff, + 0x44, 0x45, 0xef, 0xd5, 0xf4, 0x01, 0x58, 0x46, 0x29, 0x4d, 0x2a, 0x00, + 0x4d, 0x35, 0x85, 0x10, 0xf5, 0x01, 0x0d, 0x76, 0x85, 0x34, 0x02, 0x6f, + 0x00, 0x16, 0xb5, 0x01, 0xff, 0x47, 0x5f, 0x61, 0x02, 0xf3, 0x01, 0x50, + 0x56, 0x65, 0x4c, 0x2a, 0xc0, 0x00, 0x52, 0x21, 0x4f, 0x50, 0x2a, 0x40, + 0x44, 0x9b, 0x12, 0xcf, 0x2a, 0x80, 0x0d, 0x46, 0x29, 0x36, 0xd0, 0x2a, + 0xc0, 0x00, 0x4c, 0xf2, 0x28, 0xd2, 0x2a, 0x40, 0x4c, 0xf2, 0x28, 0xd1, + 0x2a, 0x40, 0x4c, 0x77, 0x91, 0xea, 0xf4, 0x01, 0x4b, 0xb9, 0xa1, 0xeb, + 0xf4, 0x41, 0x06, 0x0b, 0x08, 0x51, 0x05, 0x6a, 0x10, 0x01, 0xff, 0xa3, + 0x3e, 0x68, 0xe0, 0x04, 0x03, 0xf5, 0x01, 0x53, 0xa4, 0x49, 0xf3, 0x27, + 0x00, 0x48, 0x94, 0x26, 0x31, 0x22, 0x00, 0x51, 0xf6, 0x04, 0xbb, 0x21, + 0x00, 0x05, 0xc8, 0x00, 0x0f, 0xb4, 0x01, 0xff, 0x53, 0xcb, 0x4b, 0xb7, + 0x21, 0x00, 0x60, 0xf4, 0x0f, 0x6e, 0x2b, 0x40, 0x5b, 0xba, 0x19, 0xd8, + 0xf5, 0x01, 0x66, 0x97, 0x07, 0x01, 0xf5, 0xc1, 0x00, 0x59, 0xef, 0x22, + 0x02, 0xf5, 0x41, 0x52, 0x7d, 0x53, 0x41, 0x29, 0x00, 0x4f, 0x58, 0x71, + 0x32, 0x22, 0x40, 0xa5, 0xac, 0x01, 0xa6, 0x88, 0x01, 0x04, 0xcf, 0x2a, + 0x78, 0x03, 0x0e, 0x0b, 0x68, 0xb3, 0x45, 0xb4, 0x01, 0xff, 0x02, 0x92, + 0x01, 0x32, 0x04, 0x25, 0x01, 0x22, 0xb7, 0x01, 0xff, 0x04, 0xe7, 0x2b, + 0x0f, 0xaf, 0x01, 0xff, 0x47, 0x6c, 0xcd, 0x51, 0xf5, 0x01, 0x47, 0xdc, + 0xcd, 0x5d, 0xf5, 0x41, 0x47, 0x6c, 0xcd, 0x5b, 0xf5, 0x01, 0x47, 0xdc, + 0xcd, 0x67, 0xf5, 0x41, 0x47, 0x6c, 0xcd, 0x52, 0xf5, 0x01, 0x47, 0xdc, + 0xcd, 0x5e, 0xf5, 0x41, 0x47, 0x6c, 0xcd, 0x59, 0xf5, 0x01, 0x47, 0xdc, + 0xcd, 0x65, 0xf5, 0x41, 0x04, 0xc9, 0x1d, 0x11, 0x02, 0x01, 0x26, 0x01, + 0xff, 0x47, 0x6c, 0xcd, 0x55, 0xf5, 0x01, 0x47, 0xdc, 0xcd, 0x61, 0xf5, + 0x41, 0x47, 0x6c, 0xcd, 0x56, 0xf5, 0x01, 0x47, 0xdc, 0xcd, 0x62, 0xf5, + 0x41, 0x47, 0x6c, 0xcd, 0x50, 0xf5, 0x01, 0x47, 0xdc, 0xcd, 0x5c, 0xf5, + 0x41, 0x47, 0x6c, 0xcd, 0x58, 0xf5, 0x01, 0x47, 0xdc, 0xcd, 0x64, 0xf5, + 0x41, 0x03, 0xd2, 0x05, 0x11, 0x03, 0xf6, 0x06, 0x01, 0xff, 0x47, 0x6c, + 0xcd, 0x53, 0xf5, 0x01, 0x47, 0xdc, 0xcd, 0x5f, 0xf5, 0x41, 0x47, 0x6c, + 0xcd, 0x54, 0xf5, 0x01, 0x47, 0xdc, 0xcd, 0x60, 0xf5, 0x41, 0x04, 0xc9, + 0x00, 0x11, 0x05, 0xb4, 0x6f, 0x01, 0xff, 0x47, 0x6c, 0xcd, 0x5a, 0xf5, + 0x01, 0x47, 0xdc, 0xcd, 0x66, 0xf5, 0x41, 0x47, 0x6c, 0xcd, 0x57, 0xf5, + 0x01, 0x47, 0xdc, 0xcd, 0x63, 0xf5, 0x41, 0x06, 0x49, 0x91, 0x06, 0x46, + 0x02, 0xdf, 0xcb, 0xf4, 0x41, 0x49, 0x8d, 0xb6, 0x7b, 0xf3, 0x01, 0x47, + 0x55, 0xc0, 0x42, 0xf9, 0x41, 0x53, 0x46, 0x4b, 0x81, 0xf5, 0x01, 0x02, + 0x6e, 0x02, 0x06, 0x4f, 0x29, 0x73, 0xdb, 0xf3, 0x41, 0x48, 0x72, 0x14, + 0xac, 0xf3, 0x01, 0x4e, 0x7f, 0x78, 0x4f, 0xf4, 0x41, 0x58, 0xae, 0x27, + 0x06, 0xd8, 0x00, 0x08, 0x58, 0xa5, 0xbb, 0x01, 0x07, 0xc5, 0x0e, 0x06, + 0x52, 0x15, 0x33, 0x01, 0xd8, 0x40, 0x43, 0xfe, 0xf3, 0xc3, 0x31, 0x00, + 0xe4, 0xd4, 0x31, 0x00, 0xe8, 0xd0, 0x31, 0x80, 0x5f, 0xee, 0xcf, 0x31, + 0x00, 0xf0, 0xd2, 0x31, 0x80, 0x4a, 0xf1, 0xe3, 0x31, 0x00, 0xf3, 0xd1, + 0x31, 0x80, 0x15, 0xf4, 0xc0, 0x31, 0x80, 0x0c, 0x42, 0xb6, 0x49, 0xc1, + 0x31, 0x00, 0x42, 0xff, 0xf3, 0xc2, 0x31, 0x40, 0xee, 0xdd, 0x31, 0x40, + 0xe7, 0xda, 0x31, 0x00, 0xf0, 0xd3, 0x31, 0x00, 0xf4, 0xd9, 0x31, 0x00, + 0xf7, 0xc4, 0x31, 0x80, 0x13, 0xfa, 0xd7, 0x31, 0xc0, 0x00, 0xf0, 0xe5, + 0x31, 0x00, 0x42, 0xb6, 0x49, 0xc9, 0x31, 0x00, 0xfa, 0xde, 0x31, 0x40, + 0xe7, 0xdf, 0x31, 0x00, 0xfa, 0xd8, 0x31, 0x40, 0xe4, 0xdb, 0x31, 0x00, + 0xe7, 0xe2, 0x31, 0x00, 0xfa, 0xdc, 0x31, 0x40, 0xe7, 0xd6, 0x31, 0x00, + 0xf0, 0xc7, 0x31, 0x80, 0x34, 0xb8, 0x28, 0xfa, 0xd5, 0x31, 0xc0, 0x00, + 0xe7, 0xc6, 0x31, 0x00, 0xf4, 0xca, 0x31, 0x00, 0xf7, 0xcd, 0x31, 0x80, + 0x12, 0xfa, 0xc5, 0x31, 0xc0, 0x00, 0xf0, 0xcb, 0x31, 0x00, 0xfa, 0xce, + 0x31, 0xc0, 0x00, 0xe7, 0xe1, 0x31, 0x40, 0xe7, 0xc8, 0x31, 0x40, 0xe7, + 0xe4, 0x31, 0x00, 0x42, 0xb6, 0x49, 0xe0, 0x31, 0x40, 0x42, 0xb6, 0x49, + 0xcc, 0x31, 0x40, 0xa2, 0xba, 0x06, 0xa3, 0xfb, 0x04, 0xa4, 0xe6, 0x04, + 0xa5, 0xbe, 0x04, 0xa6, 0xaf, 0x04, 0xa7, 0x8c, 0x04, 0xa8, 0xe4, 0x03, + 0xaa, 0xbc, 0x03, 0x06, 0xba, 0xa5, 0xab, 0x03, 0xac, 0xf8, 0x02, 0xad, + 0xc1, 0x02, 0x04, 0x44, 0x49, 0xa1, 0x02, 0x43, 0xe1, 0x1a, 0xb9, 0x2e, + 0x00, 0xb0, 0x82, 0x02, 0xb2, 0xe9, 0x01, 0xb3, 0x51, 0xb4, 0x37, 0xb7, + 0x01, 0xff, 0xa1, 0x11, 0x04, 0xbf, 0x1a, 0x01, 0xff, 0x43, 0x0e, 0x0b, + 0xc3, 0x2e, 0x00, 0x43, 0x1f, 0x0a, 0xc4, 0x2e, 0x40, 0x03, 0x70, 0xf4, + 0x11, 0x04, 0x08, 0x03, 0x01, 0xff, 0x43, 0x0e, 0x0b, 0xa1, 0x2e, 0x00, + 0x43, 0x1f, 0x0a, 0xa2, 0x2e, 0x40, 0x43, 0x0e, 0x0b, 0xcd, 0x2e, 0x00, + 0x43, 0x1f, 0x0a, 0xce, 0x2e, 0x40, 0x44, 0x1e, 0x18, 0x87, 0x2e, 0x00, + 0x45, 0x23, 0x9e, 0x93, 0x2e, 0x00, 0x44, 0x7d, 0xf0, 0xc1, 0x2e, 0x00, + 0x45, 0xf5, 0xeb, 0xf1, 0x2e, 0x40, 0xa5, 0x74, 0x44, 0x25, 0xf0, 0xb6, + 0x2e, 0x00, 0xa9, 0x3f, 0x05, 0x5e, 0x07, 0x2f, 0xae, 0x16, 0x06, 0x2c, + 0xdf, 0x06, 0x42, 0x42, 0x0b, 0x9c, 0x2e, 0x40, 0x43, 0x0e, 0x0b, 0xac, + 0x2e, 0x00, 0x43, 0x1f, 0x0a, 0xad, 0x2e, 0x40, 0x43, 0x92, 0x27, 0x92, + 0x2e, 0x00, 0x04, 0xfd, 0x50, 0x01, 0xff, 0x43, 0x0e, 0x0b, 0x94, 0x2e, + 0x00, 0x43, 0x1f, 0x0a, 0x95, 0x2e, 0x40, 0x43, 0x0e, 0x0b, 0x8c, 0x2e, + 0x00, 0x43, 0x1f, 0x0a, 0x8d, 0x2e, 0x40, 0x42, 0x60, 0x5b, 0xaf, 0x2e, + 0x00, 0x09, 0xd2, 0x88, 0x01, 0xff, 0xa8, 0x14, 0xb7, 0x06, 0x46, 0xde, + 0xd7, 0xe9, 0x2e, 0x40, 0x43, 0x5f, 0x5b, 0xcc, 0x2e, 0x00, 0x44, 0xc8, + 0x9c, 0xe8, 0x2e, 0x40, 0x4e, 0xc3, 0x75, 0xa6, 0x2e, 0x00, 0x43, 0x28, + 0x05, 0xc6, 0x2e, 0x40, 0x42, 0x13, 0x00, 0x8b, 0x2e, 0x00, 0x05, 0xe5, + 0x7b, 0x01, 0xff, 0x43, 0x0e, 0x0b, 0x82, 0x2e, 0x00, 0xb4, 0x01, 0xff, + 0x44, 0x25, 0x01, 0x84, 0x2e, 0x00, 0x42, 0x15, 0x02, 0x83, 0x2e, 0x40, + 0xa1, 0x06, 0x45, 0x9e, 0x6c, 0x80, 0x2e, 0x40, 0x42, 0x9e, 0x01, 0xd7, + 0x2e, 0x00, 0xed, 0xb7, 0x2e, 0x00, 0xf0, 0x99, 0x2e, 0x40, 0x03, 0xa7, + 0x44, 0x06, 0x45, 0x1f, 0x1d, 0x85, 0x2e, 0x40, 0x43, 0x0e, 0x0b, 0xa4, + 0x2e, 0x00, 0x43, 0x1f, 0x0a, 0xa5, 0x2e, 0x40, 0x44, 0xf5, 0x06, 0xb4, + 0x2e, 0x00, 0x43, 0x0e, 0x0b, 0xb1, 0x2e, 0x00, 0xb4, 0x01, 0xff, 0x44, + 0x25, 0x01, 0xb3, 0x2e, 0x00, 0x42, 0x15, 0x02, 0xb2, 0x2e, 0x40, 0xa5, + 0x26, 0xaf, 0x01, 0xff, 0x42, 0x10, 0x00, 0x9d, 0x2e, 0x00, 0x44, 0x6c, + 0x4d, 0xbd, 0x2e, 0x00, 0x44, 0x0f, 0x1a, 0x9f, 0x2e, 0x00, 0x04, 0x5b, + 0x12, 0x01, 0xff, 0x43, 0x0e, 0x0b, 0xd5, 0x2e, 0x00, 0x43, 0x1f, 0x0a, + 0xd6, 0x2e, 0x40, 0x42, 0x8a, 0x00, 0xbc, 0x2e, 0x00, 0x42, 0xa4, 0x02, + 0xb5, 0x2e, 0x40, 0x04, 0xa2, 0xb8, 0x11, 0x04, 0xd8, 0x02, 0x01, 0xff, + 0x43, 0x0e, 0x0b, 0xd1, 0x2e, 0x00, 0x43, 0x1f, 0x0a, 0xd2, 0x2e, 0x40, + 0x44, 0xf5, 0x06, 0x91, 0x2e, 0x00, 0x43, 0x0e, 0x0b, 0x8e, 0x2e, 0x00, + 0xb4, 0x01, 0xff, 0x44, 0x25, 0x01, 0x90, 0x2e, 0x00, 0x42, 0x15, 0x02, + 0x8f, 0x2e, 0x40, 0x43, 0x0e, 0x0b, 0x88, 0x2e, 0x00, 0x43, 0x1f, 0x0a, + 0x89, 0x2e, 0x40, 0x0c, 0xd7, 0x8b, 0x06, 0x43, 0x0c, 0x02, 0xa9, 0x2e, + 0x40, 0x46, 0x55, 0x8f, 0xef, 0x2e, 0x00, 0x44, 0xc9, 0x1d, 0xeb, 0x2e, + 0x00, 0xb4, 0x01, 0xff, 0x44, 0xd9, 0xf1, 0xed, 0x2e, 0x00, 0x45, 0xf5, + 0xeb, 0xf2, 0x2e, 0x40, 0x43, 0x1a, 0x00, 0x98, 0x2e, 0x00, 0x02, 0x89, + 0x00, 0x06, 0x43, 0x28, 0x05, 0xc7, 0x2e, 0x40, 0xe4, 0xe1, 0x2e, 0x00, + 0x03, 0x36, 0x07, 0x01, 0xff, 0x43, 0x0e, 0x0b, 0x96, 0x2e, 0x00, 0x43, + 0x1f, 0x0a, 0x97, 0x2e, 0x40, 0x44, 0xc0, 0x7c, 0xe4, 0x2e, 0x00, 0x05, + 0x1c, 0x20, 0x01, 0xff, 0x43, 0x0e, 0x0b, 0xbe, 0x2e, 0x00, 0xb4, 0x01, + 0xff, 0x44, 0x25, 0x01, 0xc0, 0x2e, 0x00, 0x42, 0x15, 0x02, 0xbf, 0x2e, + 0x40, 0x43, 0x88, 0x0d, 0xa3, 0x2e, 0x00, 0x43, 0xbf, 0x6c, 0xca, 0x2e, + 0x40, 0x03, 0x3d, 0x05, 0x0c, 0x42, 0x15, 0x01, 0xb8, 0x2e, 0x00, 0x42, + 0x4d, 0x00, 0xab, 0x2e, 0x40, 0x43, 0x0e, 0x0b, 0xdd, 0x2e, 0x00, 0xb4, + 0x01, 0xff, 0x44, 0x25, 0x01, 0xdf, 0x2e, 0x00, 0x42, 0x15, 0x02, 0xde, + 0x2e, 0x40, 0x44, 0x73, 0x0f, 0x9e, 0x2e, 0x00, 0x49, 0xd7, 0xba, 0x8a, + 0x2e, 0x00, 0x42, 0xc1, 0x18, 0xa8, 0x2e, 0x40, 0x0c, 0xd7, 0x8b, 0x28, + 0x44, 0x5c, 0xdd, 0x9b, 0x2e, 0x00, 0xa9, 0x14, 0xac, 0x06, 0x42, 0xd1, + 0x00, 0xa7, 0x2e, 0x40, 0x43, 0x56, 0x48, 0x81, 0x2e, 0x00, 0x45, 0x49, + 0x88, 0xc2, 0x2e, 0x40, 0x42, 0x7d, 0x11, 0xcf, 0x2e, 0x00, 0x46, 0x24, + 0xe1, 0xa0, 0x2e, 0x40, 0x44, 0x87, 0xa7, 0xe6, 0x2e, 0x00, 0x44, 0x36, + 0x6c, 0xcb, 0x2e, 0x00, 0x46, 0x55, 0x8f, 0xf0, 0x2e, 0x00, 0xa5, 0x70, + 0xa6, 0x5c, 0xa7, 0x4e, 0x45, 0x20, 0xb3, 0xe2, 0x2e, 0x00, 0xac, 0x3a, + 0xb3, 0x1a, 0xb4, 0x06, 0x44, 0x8e, 0x13, 0xdb, 0x2e, 0x40, 0x4d, 0x6f, + 0x80, 0xd9, 0x2e, 0x00, 0x44, 0xd9, 0xf1, 0xee, 0x2e, 0x00, 0x45, 0xf5, + 0xeb, 0xf3, 0x2e, 0x40, 0x43, 0xf1, 0x11, 0xe7, 0x2e, 0x00, 0x42, 0x27, + 0x01, 0xc5, 0x2e, 0x00, 0x44, 0x5e, 0x09, 0xc9, 0x2e, 0x00, 0x43, 0x38, + 0xb1, 0xb0, 0x2e, 0x00, 0x45, 0x70, 0x7c, 0xc8, 0x2e, 0x40, 0x43, 0x3a, + 0x51, 0xda, 0x2e, 0x00, 0x43, 0xd8, 0x02, 0xd3, 0x2e, 0x40, 0x43, 0x8a, + 0x00, 0xd4, 0x2e, 0x00, 0x43, 0xe1, 0x1a, 0xd0, 0x2e, 0x40, 0x43, 0xd1, + 0x0c, 0xe5, 0x2e, 0x00, 0x42, 0x75, 0x0b, 0xdc, 0x2e, 0x00, 0x43, 0xeb, + 0x2e, 0xea, 0x2e, 0x40, 0x42, 0x8a, 0x00, 0xe0, 0x2e, 0x00, 0x43, 0xca, + 0x1d, 0xec, 0x2e, 0x40, 0x45, 0x5e, 0xcf, 0xae, 0x2e, 0x00, 0x43, 0xd4, + 0x8c, 0xd8, 0x2e, 0x00, 0xaf, 0x11, 0x05, 0xa1, 0xea, 0x01, 0xff, 0x43, + 0x0e, 0x0b, 0xba, 0x2e, 0x00, 0x43, 0x1f, 0x0a, 0xbb, 0x2e, 0x40, 0x4b, + 0xf9, 0x9e, 0xaa, 0x2e, 0x00, 0x42, 0xcd, 0x05, 0xe3, 0x2e, 0x00, 0xf8, + 0x86, 0x2e, 0x40, 0x44, 0x71, 0xf1, 0xa6, 0xf3, 0x01, 0x02, 0x14, 0x03, + 0x0d, 0x47, 0xa3, 0xd6, 0xd9, 0xf3, 0xc1, 0x00, 0x48, 0xf0, 0xc1, 0x06, + 0xf3, 0x41, 0x02, 0x68, 0x00, 0x15, 0xb5, 0x01, 0xff, 0x4f, 0x3c, 0x6f, + 0x10, 0x2a, 0x00, 0x4c, 0xd4, 0x04, 0x5e, 0x00, 0x00, 0x46, 0xc8, 0xdf, + 0xaa, 0xf3, 0x41, 0x80, 0xa7, 0x0e, 0x02, 0x06, 0x00, 0x01, 0xff, 0xa1, + 0x89, 0x0e, 0xa2, 0xfa, 0x0d, 0xa3, 0xbe, 0x0d, 0xa4, 0xcd, 0x0c, 0x46, + 0x48, 0x13, 0x9c, 0x22, 0x00, 0x4c, 0x87, 0x00, 0xc1, 0x29, 0x00, 0xa8, + 0xe1, 0x0a, 0xa9, 0xc7, 0x07, 0xab, 0xdd, 0x05, 0xac, 0xf7, 0x03, 0xad, + 0xe8, 0x03, 0x07, 0xff, 0x39, 0x6f, 0x5e, 0x25, 0x14, 0x42, 0x27, 0x00, + 0xb0, 0x4f, 0xb2, 0x41, 0x46, 0xd6, 0x05, 0xd7, 0xf7, 0x01, 0xb4, 0x26, + 0x4c, 0x32, 0x00, 0xb6, 0x29, 0x00, 0xb7, 0x0a, 0xf8, 0xbe, 0x2b, 0x00, + 0x4f, 0x36, 0x75, 0x0d, 0xf1, 0x41, 0x05, 0xae, 0x02, 0x04, 0xfa, 0x2e, + 0xf1, 0x41, 0x46, 0xb2, 0x21, 0xbe, 0x29, 0x00, 0x44, 0x31, 0x13, 0x2a, + 0x27, 0x40, 0x44, 0x29, 0x02, 0x97, 0x22, 0x00, 0x47, 0x02, 0x02, 0xd5, + 0xf7, 0xc1, 0x00, 0x45, 0xa4, 0x01, 0x8a, 0x23, 0x40, 0x4e, 0x67, 0x72, + 0xb8, 0x29, 0x00, 0x4c, 0x33, 0x90, 0x9a, 0x22, 0x40, 0x47, 0x89, 0x38, + 0xb7, 0x29, 0x00, 0x4c, 0xa7, 0x8e, 0xb9, 0x29, 0x00, 0x43, 0x59, 0x28, + 0x95, 0x22, 0x00, 0x4a, 0x1f, 0xaf, 0x36, 0x30, 0x40, 0xa5, 0xdc, 0x02, + 0xa6, 0xec, 0x01, 0x48, 0xc5, 0x53, 0x72, 0x24, 0x00, 0xb3, 0xc2, 0x01, + 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0x69, 0x24, 0x80, 0xb1, 0x01, 0x04, + 0x7a, 0x11, 0x5a, 0x02, 0x15, 0x01, 0x01, 0xff, 0x43, 0xe8, 0x2b, 0x6b, + 0x24, 0x00, 0x43, 0xcc, 0x1d, 0x73, 0x24, 0xc0, 0x00, 0x80, 0x01, 0xff, + 0x45, 0x12, 0x0b, 0x58, 0x32, 0x00, 0xa6, 0x31, 0x44, 0xcf, 0x2a, 0x59, 0x32, 0x00, 0x02, 0x10, 0x00, 0x1d, 0xb3, 0x0f, 0xb4, 0x01, 0xff, 0x44, - 0x25, 0x01, 0xb8, 0x32, 0x00, 0x42, 0x15, 0x02, 0xb7, 0x32, 0x40, 0x44, - 0x27, 0x1d, 0xbc, 0x32, 0x00, 0x42, 0x60, 0x25, 0xbb, 0x32, 0x40, 0x4d, - 0xf2, 0x10, 0x4b, 0x32, 0x00, 0xe5, 0xb6, 0x32, 0x40, 0x43, 0xa7, 0x05, - 0xba, 0x32, 0x00, 0x43, 0xcb, 0x06, 0xb9, 0x32, 0x40, 0x43, 0x75, 0x09, - 0x6e, 0x24, 0x00, 0xf9, 0xbf, 0x32, 0xc0, 0x00, 0x50, 0x48, 0x5e, 0x4c, - 0x32, 0x40, 0x04, 0xc9, 0x00, 0x06, 0x45, 0x0b, 0x6e, 0x6a, 0x24, 0x40, - 0x43, 0x75, 0x09, 0x71, 0x24, 0x00, 0x51, 0x47, 0x5e, 0x4f, 0x32, 0x40, - 0x44, 0xf0, 0x1e, 0x96, 0x22, 0x00, 0x69, 0x8c, 0x04, 0x36, 0x2a, 0x40, - 0x05, 0xb4, 0x05, 0x06, 0x48, 0xed, 0x00, 0xc0, 0x29, 0x40, 0x0f, 0xb9, - 0x05, 0x6d, 0x0d, 0x4b, 0x08, 0x01, 0xff, 0xe1, 0xd0, 0x24, 0x00, 0xe2, - 0xd1, 0x24, 0x00, 0xe3, 0xd2, 0x24, 0x00, 0xe4, 0xd3, 0x24, 0x00, 0xe5, - 0xd4, 0x24, 0x00, 0xe6, 0xd5, 0x24, 0x00, 0xe7, 0xd6, 0x24, 0x00, 0xe8, - 0xd7, 0x24, 0x00, 0xe9, 0xd8, 0x24, 0x00, 0xea, 0xd9, 0x24, 0x00, 0xeb, - 0xda, 0x24, 0x00, 0xec, 0xdb, 0x24, 0x00, 0xed, 0xdc, 0x24, 0x00, 0xee, - 0xdd, 0x24, 0x00, 0xef, 0xde, 0x24, 0x00, 0xf0, 0xdf, 0x24, 0x00, 0xf1, - 0xe0, 0x24, 0x00, 0xf2, 0xe1, 0x24, 0x00, 0xf3, 0xe2, 0x24, 0x00, 0xf4, - 0xe3, 0x24, 0x00, 0xf5, 0xe4, 0x24, 0x00, 0xf6, 0xe5, 0x24, 0x00, 0xf7, - 0xe6, 0x24, 0x00, 0xf8, 0xe7, 0x24, 0x00, 0xf9, 0xe8, 0x24, 0x00, 0xfa, - 0xe9, 0x24, 0x40, 0xe1, 0xb6, 0x24, 0x00, 0xe2, 0xb7, 0x24, 0x00, 0xe3, - 0xb8, 0x24, 0x00, 0xe4, 0xb9, 0x24, 0x00, 0xe5, 0xba, 0x24, 0x00, 0xe6, - 0xbb, 0x24, 0x00, 0xe7, 0xbc, 0x24, 0x00, 0xe8, 0xbd, 0x24, 0x00, 0xe9, - 0xbe, 0x24, 0x00, 0xea, 0xbf, 0x24, 0x00, 0xeb, 0xc0, 0x24, 0x00, 0xec, - 0xc1, 0x24, 0x00, 0xed, 0xc2, 0x24, 0x00, 0xee, 0xc3, 0x24, 0x00, 0xef, - 0xc4, 0x24, 0x00, 0xf0, 0xc5, 0x24, 0x00, 0xf1, 0xc6, 0x24, 0x00, 0xf2, - 0xc7, 0x24, 0x00, 0xf3, 0xc8, 0x24, 0x00, 0xf4, 0xc9, 0x24, 0x00, 0xf5, - 0xca, 0x24, 0x00, 0xf6, 0xcb, 0x24, 0x00, 0xf7, 0xcc, 0x24, 0x00, 0xf8, - 0xcd, 0x24, 0x00, 0xf9, 0xce, 0x24, 0x00, 0xfa, 0xcf, 0x24, 0x40, 0x08, - 0x2a, 0xc1, 0x11, 0x10, 0xff, 0x51, 0x01, 0xff, 0x46, 0x90, 0xd7, 0x7c, - 0x32, 0x00, 0x45, 0xa3, 0xe4, 0x7d, 0x32, 0x40, 0xe1, 0xd0, 0x32, 0x00, - 0xe5, 0xd3, 0x32, 0x00, 0xa8, 0xb3, 0x01, 0xe9, 0xd1, 0x32, 0x00, 0xab, - 0x98, 0x01, 0xad, 0x81, 0x01, 0xae, 0x6b, 0xef, 0xd4, 0x32, 0x00, 0xb2, - 0x51, 0xb3, 0x3b, 0xb4, 0x25, 0xf5, 0xd2, 0x32, 0x00, 0xb7, 0x0f, 0xb9, - 0x01, 0xff, 0xe1, 0xf3, 0x32, 0x00, 0xef, 0xf5, 0x32, 0x00, 0xf5, 0xf4, - 0x32, 0x40, 0xe1, 0xfb, 0x32, 0x00, 0xe5, 0xfd, 0x32, 0x00, 0xe9, 0xfc, - 0x32, 0x00, 0xef, 0xfe, 0x32, 0x40, 0xe1, 0xdf, 0x32, 0x00, 0xe5, 0xe2, - 0x32, 0x00, 0xe9, 0xe0, 0x32, 0x00, 0xef, 0xe3, 0x32, 0x00, 0xf5, 0xe1, - 0x32, 0x40, 0xe1, 0xda, 0x32, 0x00, 0xe5, 0xdd, 0x32, 0x00, 0xe9, 0xdb, - 0x32, 0x00, 0xef, 0xde, 0x32, 0x00, 0xf5, 0xdc, 0x32, 0x40, 0xe1, 0xf6, - 0x32, 0x00, 0xe5, 0xf9, 0x32, 0x00, 0xe9, 0xf7, 0x32, 0x00, 0xef, 0xfa, - 0x32, 0x00, 0xf5, 0xf8, 0x32, 0x40, 0xe1, 0xe4, 0x32, 0x00, 0xe5, 0xe7, - 0x32, 0x00, 0xe9, 0xe5, 0x32, 0x00, 0xef, 0xe8, 0x32, 0x00, 0xf5, 0xe6, - 0x32, 0x40, 0xe1, 0xee, 0x32, 0x00, 0xe5, 0xf1, 0x32, 0x00, 0xe9, 0xef, - 0x32, 0x00, 0xef, 0xf2, 0x32, 0x00, 0xf5, 0xf0, 0x32, 0x40, 0xe1, 0xd5, - 0x32, 0x00, 0xe5, 0xd8, 0x32, 0x00, 0xe9, 0xd6, 0x32, 0x00, 0xef, 0xd9, - 0x32, 0x00, 0xf5, 0xd7, 0x32, 0x40, 0xe1, 0xe9, 0x32, 0x00, 0xe5, 0xec, - 0x32, 0x00, 0xe9, 0xea, 0x32, 0x00, 0xef, 0xed, 0x32, 0x00, 0xf5, 0xeb, - 0x32, 0x40, 0x09, 0x42, 0xa9, 0x13, 0x51, 0x4a, 0x5b, 0xc8, 0xf6, 0x01, - 0x1b, 0xff, 0x1c, 0x01, 0xff, 0xe3, 0x2b, 0xf1, 0x01, 0xf2, 0x2c, 0xf1, - 0x41, 0xa1, 0xe5, 0x02, 0xa3, 0xc7, 0x02, 0xa5, 0xac, 0x02, 0xa6, 0x89, - 0x02, 0xa8, 0xfa, 0x01, 0x44, 0xee, 0xbe, 0xa0, 0x32, 0x00, 0xab, 0xe5, - 0x01, 0xac, 0xd0, 0x01, 0xad, 0xb3, 0x01, 0xae, 0x9b, 0x01, 0x43, 0xbf, - 0x0a, 0x80, 0x32, 0x00, 0x45, 0xdd, 0xc3, 0x9e, 0x32, 0x00, 0x48, 0xd6, - 0x33, 0x44, 0x32, 0x00, 0xb2, 0x6c, 0xb3, 0x23, 0xb4, 0x0f, 0xb7, 0x01, - 0xff, 0x44, 0x8a, 0x00, 0x8c, 0x32, 0x00, 0x43, 0xfc, 0x2c, 0x8d, 0x32, - 0x40, 0x42, 0x92, 0x01, 0x89, 0x32, 0x00, 0x44, 0x25, 0x01, 0x82, 0x32, - 0x00, 0x42, 0x15, 0x02, 0x81, 0x32, 0x40, 0x45, 0x28, 0xe2, 0x46, 0x32, - 0x00, 0xa5, 0x33, 0x42, 0x60, 0x25, 0x85, 0x32, 0x00, 0x46, 0xb0, 0xdb, - 0x93, 0x32, 0x00, 0x46, 0x10, 0xdc, 0x95, 0x32, 0x00, 0xb4, 0x13, 0xb5, - 0x01, 0xff, 0x46, 0x36, 0xda, 0x9c, 0x32, 0x00, 0xee, 0x90, 0x32, 0x00, - 0x47, 0xdf, 0xd1, 0xac, 0x32, 0x40, 0x43, 0x35, 0x01, 0x91, 0x32, 0x00, - 0x43, 0x59, 0xf1, 0xab, 0x32, 0x40, 0x44, 0x36, 0xec, 0x99, 0x32, 0x00, - 0x43, 0x28, 0x1d, 0x86, 0x32, 0x40, 0xa5, 0x06, 0x44, 0xc9, 0x00, 0xa8, - 0x32, 0x40, 0x46, 0xba, 0xda, 0xaa, 0x32, 0x00, 0xb3, 0x01, 0xff, 0x45, - 0x56, 0x5b, 0xae, 0x32, 0x00, 0xf4, 0xa1, 0x32, 0x40, 0x43, 0x00, 0x05, - 0x94, 0x32, 0x00, 0xa9, 0x01, 0xff, 0x43, 0xca, 0x00, 0xb0, 0x32, 0x00, - 0x42, 0xa2, 0x05, 0x88, 0x32, 0x40, 0x43, 0x67, 0x00, 0x9a, 0x32, 0x00, - 0xa5, 0x06, 0x43, 0x69, 0x05, 0x8a, 0x32, 0x40, 0x46, 0x08, 0xd8, 0xa9, - 0x32, 0x00, 0x43, 0x12, 0x00, 0x8e, 0x32, 0x40, 0x44, 0xf4, 0xe4, 0x98, - 0x32, 0x00, 0x43, 0xc4, 0x00, 0xa7, 0x32, 0x00, 0x42, 0xd1, 0x00, 0xa6, - 0x32, 0x40, 0x4b, 0x5d, 0x9b, 0x45, 0x32, 0x00, 0x43, 0x4a, 0x8c, 0x47, - 0x32, 0x40, 0x43, 0x04, 0x08, 0x92, 0x32, 0x00, 0x43, 0x3f, 0x00, 0xa4, - 0x32, 0x40, 0x45, 0xb5, 0x20, 0x9b, 0x32, 0x00, 0xa9, 0x06, 0x43, 0xcb, - 0x06, 0x83, 0x32, 0x40, 0x47, 0x96, 0xd0, 0x96, 0x32, 0x00, 0x42, 0x88, - 0x00, 0x8b, 0x32, 0x00, 0x42, 0x32, 0x00, 0x84, 0x32, 0x40, 0x44, 0xb9, - 0x70, 0x8f, 0x32, 0x00, 0x44, 0xc9, 0x00, 0x87, 0x32, 0x00, 0x49, 0x3f, - 0xba, 0xad, 0x32, 0x00, 0x48, 0xea, 0xc9, 0x9d, 0x32, 0x40, 0x45, 0x74, - 0x02, 0xa5, 0x32, 0x00, 0xaf, 0x01, 0xff, 0x4c, 0x4d, 0x85, 0x97, 0x32, - 0x00, 0x42, 0x79, 0x1c, 0xa2, 0x32, 0x00, 0x45, 0xa3, 0xd2, 0xa3, 0x32, - 0x40, 0x45, 0xf6, 0xe1, 0x51, 0xf2, 0x01, 0x48, 0xc2, 0xc2, 0x50, 0xf2, - 0x01, 0x47, 0xbb, 0xc0, 0xaf, 0x32, 0x00, 0x48, 0x12, 0xc9, 0x9f, 0x32, - 0x40, 0x06, 0x9f, 0xce, 0x12, 0x5b, 0x77, 0x1a, 0xb2, 0x27, 0x00, 0x58, - 0xc5, 0x29, 0x89, 0x23, 0x00, 0x4b, 0x11, 0xa2, 0x6f, 0xf1, 0x41, 0xa3, - 0xaa, 0x01, 0x45, 0x35, 0xa3, 0x6d, 0x32, 0x80, 0x9c, 0x01, 0x45, 0x68, - 0xc9, 0x67, 0x32, 0x80, 0x89, 0x01, 0xab, 0x6d, 0x45, 0x8e, 0xe5, 0x64, - 0x32, 0x80, 0x60, 0x45, 0xfc, 0xe5, 0x61, 0x32, 0x80, 0x53, 0xb0, 0x37, - 0x45, 0x41, 0xe7, 0x63, 0x32, 0x80, 0x2a, 0x44, 0xf0, 0xbc, 0x66, 0x32, - 0x80, 0x1d, 0xb4, 0x01, 0xff, 0x46, 0x8b, 0xd3, 0x6b, 0x32, 0x80, 0x0d, - 0x45, 0x20, 0xcb, 0x62, 0x32, 0xc0, 0x00, 0x42, 0x19, 0x00, 0x70, 0x32, - 0x40, 0x42, 0x19, 0x00, 0x79, 0x32, 0x40, 0x42, 0x19, 0x00, 0x74, 0x32, - 0x40, 0x42, 0x19, 0x00, 0x71, 0x32, 0x40, 0x46, 0x4c, 0xc0, 0x6c, 0x32, - 0x80, 0x0d, 0x44, 0x33, 0x83, 0x65, 0x32, 0xc0, 0x00, 0x42, 0x19, 0x00, - 0x73, 0x32, 0x40, 0x42, 0x19, 0x00, 0x7a, 0x32, 0x40, 0x42, 0x19, 0x00, - 0x6f, 0x32, 0x40, 0x42, 0x19, 0x00, 0x72, 0x32, 0x40, 0x46, 0x44, 0xc0, - 0x6a, 0x32, 0x80, 0x0d, 0x45, 0xb7, 0xa0, 0x60, 0x32, 0xc0, 0x00, 0x42, - 0x19, 0x00, 0x6e, 0x32, 0x40, 0x42, 0x19, 0x00, 0x78, 0x32, 0x40, 0x80, - 0x01, 0xff, 0xe1, 0x75, 0x32, 0x00, 0xf5, 0x7e, 0x32, 0x40, 0x42, 0x19, - 0x00, 0x7b, 0x32, 0x40, 0x46, 0x17, 0xcd, 0x69, 0x32, 0x80, 0x0d, 0x44, - 0x18, 0xcd, 0x68, 0x32, 0xc0, 0x00, 0x42, 0x19, 0x00, 0x76, 0x32, 0x40, - 0x42, 0x19, 0x00, 0x77, 0x32, 0x40, 0x43, 0xce, 0x03, 0x9d, 0x22, 0x00, - 0xa9, 0x0f, 0xaf, 0x01, 0xff, 0x61, 0xdd, 0x0d, 0x0f, 0xf1, 0x01, 0x4a, - 0x2b, 0x36, 0x99, 0x22, 0x40, 0x04, 0xc6, 0x06, 0x11, 0x08, 0xf4, 0x31, - 0x01, 0xff, 0x43, 0x30, 0x03, 0x38, 0x2a, 0x00, 0x44, 0xfa, 0x0d, 0x98, - 0x22, 0x40, 0x45, 0xc3, 0x0a, 0x67, 0x24, 0x00, 0xa6, 0x2e, 0x44, 0x46, - 0x2a, 0x68, 0x24, 0x00, 0x43, 0xbf, 0x0a, 0x60, 0x24, 0x00, 0xb3, 0x14, - 0xb4, 0x06, 0x44, 0xa1, 0x1d, 0xea, 0x24, 0x40, 0x44, 0x25, 0x01, 0x62, - 0x24, 0x00, 0x42, 0x15, 0x02, 0x61, 0x24, 0x40, 0x44, 0x27, 0x1d, 0x66, - 0x24, 0x00, 0x42, 0x60, 0x25, 0x65, 0x24, 0x40, 0x43, 0xa7, 0x05, 0x64, - 0x24, 0x00, 0x43, 0xcb, 0x06, 0x63, 0x24, 0x40, 0x58, 0xe6, 0x0d, 0x6e, - 0xf1, 0x01, 0xe3, 0x6d, 0xf1, 0x01, 0xe4, 0x2d, 0xf1, 0x01, 0x04, 0x47, - 0x10, 0x01, 0xff, 0x80, 0x06, 0x49, 0x23, 0xb8, 0xd2, 0x26, 0x40, 0x46, - 0xda, 0xd8, 0x02, 0xf9, 0x81, 0x06, 0x46, 0x3a, 0xdc, 0x40, 0xf5, 0x41, - 0x06, 0x50, 0x00, 0x01, 0xff, 0x49, 0x9c, 0x45, 0x00, 0xf9, 0x01, 0x48, - 0xd0, 0x09, 0x01, 0xf9, 0x41, 0x45, 0x65, 0xe6, 0xbf, 0x2b, 0x00, 0x45, - 0x2b, 0x21, 0xbf, 0x29, 0x40, 0x0c, 0xe6, 0x0a, 0x06, 0x50, 0xea, 0x65, - 0x9b, 0x22, 0x40, 0x46, 0xcd, 0x00, 0x0e, 0xf1, 0x01, 0x56, 0xe9, 0x31, - 0xbc, 0x29, 0x40, 0x7e, 0x00, 0x00, 0xba, 0x29, 0x00, 0x05, 0x51, 0x00, - 0x01, 0xff, 0x61, 0x17, 0x0d, 0xd5, 0x25, 0x00, 0x4e, 0x0b, 0x00, 0xb5, - 0x29, 0x00, 0xac, 0x30, 0x50, 0x3a, 0x65, 0xd1, 0x25, 0x00, 0xb3, 0x1c, - 0x63, 0x5b, 0x0b, 0xc3, 0x29, 0x00, 0x06, 0x6d, 0x02, 0x06, 0x4d, 0x72, - 0x88, 0xcd, 0x25, 0x40, 0x4a, 0x4b, 0x25, 0xd3, 0x25, 0x00, 0x54, 0x43, - 0x44, 0xd4, 0x25, 0x40, 0x58, 0x65, 0x29, 0xc2, 0x29, 0x00, 0x4d, 0xd6, - 0x87, 0xbb, 0x29, 0x40, 0x4e, 0xd0, 0x6d, 0xd0, 0x25, 0x00, 0x4f, 0x09, - 0x70, 0xd2, 0x25, 0x40, 0xa1, 0xdf, 0x08, 0xa5, 0x82, 0x02, 0xa9, 0xda, - 0x01, 0xaf, 0x0c, 0x4c, 0xe9, 0x92, 0x84, 0xf3, 0x01, 0x44, 0xbc, 0xd7, - 0xea, 0x26, 0x40, 0x4a, 0x85, 0xa6, 0x6b, 0xf3, 0x01, 0x47, 0x10, 0xd2, - 0x62, 0xf9, 0x01, 0x08, 0x7a, 0xc7, 0x01, 0xff, 0x07, 0xc1, 0x05, 0x34, - 0x07, 0x2f, 0x39, 0x01, 0xff, 0x44, 0xca, 0x06, 0xc8, 0x0f, 0x01, 0x43, - 0xbf, 0x0a, 0xc5, 0x0f, 0x81, 0x1c, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, - 0xc9, 0x0f, 0x01, 0x44, 0x25, 0x01, 0xc7, 0x0f, 0x01, 0xb7, 0x01, 0xff, - 0x44, 0x29, 0x1d, 0xca, 0x0f, 0x01, 0xef, 0xc6, 0x0f, 0x41, 0x48, 0x21, - 0x11, 0xcb, 0x0f, 0x41, 0xa1, 0x75, 0x44, 0x0a, 0xec, 0xb2, 0x0f, 0x01, - 0x4a, 0xb7, 0xa6, 0xb7, 0x0f, 0x01, 0x46, 0xda, 0x48, 0xb4, 0x0f, 0x01, - 0x45, 0xa1, 0xa8, 0xb3, 0x0f, 0x01, 0x42, 0xb0, 0x01, 0xb5, 0x0f, 0x81, - 0x50, 0x44, 0x8e, 0xed, 0xbb, 0x0f, 0x01, 0x46, 0x9c, 0xda, 0xbc, 0x0f, - 0x01, 0x43, 0x89, 0x05, 0xbd, 0x0f, 0x01, 0x43, 0x54, 0x22, 0xbe, 0x0f, - 0x01, 0x42, 0x6f, 0x02, 0xc1, 0x0f, 0x01, 0x44, 0xfa, 0x64, 0xc2, 0x0f, - 0x01, 0xb3, 0x18, 0x43, 0x1e, 0xc2, 0xc4, 0x0f, 0x01, 0x43, 0xc0, 0x88, - 0xb6, 0x0f, 0x01, 0x44, 0x58, 0x51, 0xba, 0x0f, 0x01, 0x45, 0x52, 0x51, - 0xb8, 0x0f, 0x41, 0x45, 0x38, 0xe1, 0xbf, 0x0f, 0x01, 0x43, 0x0e, 0x16, - 0xc3, 0x0f, 0x01, 0x4a, 0x53, 0xab, 0xb1, 0x0f, 0x41, 0x42, 0x53, 0x00, - 0xb9, 0x0f, 0x41, 0x44, 0x48, 0x3c, 0xb0, 0x0f, 0x01, 0x43, 0xf7, 0x19, - 0xc0, 0x0f, 0x41, 0x44, 0x0a, 0x89, 0x27, 0x26, 0x00, 0x44, 0x90, 0x01, - 0x14, 0xf4, 0x01, 0x42, 0x5b, 0x1a, 0xd2, 0xf9, 0x81, 0x0c, 0x45, 0xd8, - 0xe6, 0x3f, 0xf4, 0x01, 0x43, 0x62, 0x0e, 0xb7, 0x26, 0x40, 0x4c, 0x89, - 0x92, 0xb8, 0xf6, 0x41, 0x02, 0x36, 0x01, 0xc2, 0x06, 0xa5, 0xb3, 0x06, - 0x4b, 0x51, 0x9f, 0xc1, 0xf3, 0x01, 0xb2, 0x06, 0x45, 0xf5, 0xe7, 0x30, - 0xf3, 0x41, 0x05, 0x60, 0xe6, 0x0f, 0xb2, 0x01, 0xff, 0x43, 0xee, 0x9b, - 0x52, 0xf3, 0x01, 0x49, 0xfe, 0xbe, 0x38, 0xf3, 0x41, 0x07, 0xc1, 0x05, - 0x89, 0x03, 0x0d, 0x4b, 0x08, 0x01, 0xff, 0xe1, 0x70, 0xab, 0x00, 0xa4, - 0xdf, 0x02, 0xe5, 0x71, 0xab, 0x00, 0xa7, 0xc0, 0x02, 0xa8, 0x9f, 0x02, - 0xe9, 0x72, 0xab, 0x00, 0x42, 0x1b, 0x02, 0x77, 0xab, 0x00, 0xac, 0xfa, - 0x01, 0xad, 0xdf, 0x01, 0xae, 0xbf, 0x01, 0xef, 0x73, 0xab, 0x00, 0x02, - 0x7c, 0x00, 0x9e, 0x01, 0xf3, 0x9d, 0xab, 0x80, 0x80, 0x01, 0xb4, 0x3d, - 0xf5, 0x74, 0xab, 0x00, 0xf6, 0x75, 0xab, 0x00, 0xb7, 0x1b, 0xb9, 0x01, - 0xff, 0xe1, 0xbf, 0xab, 0x00, 0xe5, 0xf8, 0x13, 0x00, 0xe9, 0xf9, 0x13, - 0x00, 0xef, 0xfa, 0x13, 0x00, 0xf5, 0xfb, 0x13, 0x00, 0xf6, 0xfc, 0x13, - 0x40, 0xe1, 0xb9, 0xab, 0x00, 0xe5, 0xba, 0xab, 0x00, 0xe9, 0xbb, 0xab, - 0x00, 0xef, 0xbc, 0xab, 0x00, 0xf5, 0xbd, 0xab, 0x00, 0xf6, 0xbe, 0xab, - 0x40, 0xe1, 0xa4, 0xab, 0x00, 0xe5, 0xa6, 0xab, 0x00, 0xe9, 0xa8, 0xab, - 0x00, 0xac, 0x1b, 0xb3, 0x01, 0xff, 0xe1, 0xb3, 0xab, 0x00, 0xe5, 0xb4, - 0xab, 0x00, 0xe9, 0xb5, 0xab, 0x00, 0xef, 0xb6, 0xab, 0x00, 0xf5, 0xb7, - 0xab, 0x00, 0xf6, 0xb8, 0xab, 0x40, 0xe1, 0xad, 0xab, 0x00, 0xe5, 0xae, - 0xab, 0x00, 0xe9, 0xaf, 0xab, 0x00, 0xef, 0xb0, 0xab, 0x00, 0xf5, 0xb1, - 0xab, 0x00, 0xf6, 0xb2, 0xab, 0x40, 0xe1, 0x9c, 0xab, 0x00, 0xe5, 0x9e, - 0xab, 0x00, 0xe9, 0x9f, 0xab, 0x00, 0xef, 0xa0, 0xab, 0x00, 0xf5, 0xa1, - 0xab, 0x00, 0xf6, 0xa2, 0xab, 0x40, 0xe1, 0x96, 0xab, 0x00, 0xe5, 0x97, - 0xab, 0x00, 0xe9, 0x98, 0xab, 0x00, 0xef, 0x99, 0xab, 0x00, 0xf5, 0x9a, - 0xab, 0x00, 0xf6, 0x9b, 0xab, 0x40, 0xe1, 0x8e, 0xab, 0x80, 0x14, 0xe5, - 0x91, 0xab, 0x00, 0xe9, 0x92, 0xab, 0x00, 0xef, 0x93, 0xab, 0x00, 0xf5, - 0x94, 0xab, 0x00, 0xf6, 0x95, 0xab, 0x40, 0xe8, 0x90, 0xab, 0x40, 0xe1, - 0x89, 0xab, 0x00, 0xe5, 0x8a, 0xab, 0x00, 0xe9, 0x8b, 0xab, 0x00, 0xef, - 0x8c, 0xab, 0x00, 0xf5, 0x8d, 0xab, 0x00, 0xf6, 0xfd, 0x13, 0x40, 0xe1, - 0x83, 0xab, 0x00, 0xe5, 0x84, 0xab, 0x00, 0xe9, 0x85, 0xab, 0x00, 0xef, - 0x86, 0xab, 0x00, 0xf5, 0x87, 0xab, 0x00, 0xf6, 0x88, 0xab, 0x40, 0xe1, - 0x7d, 0xab, 0x00, 0xe5, 0x7e, 0xab, 0x00, 0xe9, 0x7f, 0xab, 0x00, 0x42, - 0xff, 0x04, 0x8f, 0xab, 0x00, 0xef, 0x80, 0xab, 0x00, 0xf5, 0x81, 0xab, - 0x00, 0xf6, 0x82, 0xab, 0x40, 0xe1, 0x76, 0xab, 0x00, 0xe5, 0x78, 0xab, - 0x00, 0xe9, 0x79, 0xab, 0x00, 0xef, 0x7a, 0xab, 0x00, 0xf5, 0x7b, 0xab, - 0x00, 0xf6, 0x7c, 0xab, 0x40, 0xe1, 0xa3, 0xab, 0x00, 0xe5, 0xa5, 0xab, - 0x00, 0xe9, 0xa7, 0xab, 0x00, 0x42, 0x74, 0x00, 0xac, 0xab, 0x00, 0xef, - 0xa9, 0xab, 0x00, 0xf5, 0xaa, 0xab, 0x00, 0xf6, 0xab, 0xab, 0x40, 0xe1, - 0xa0, 0x13, 0x00, 0xa4, 0xdf, 0x02, 0xe5, 0xa1, 0x13, 0x00, 0xa7, 0xc0, - 0x02, 0xa8, 0x9f, 0x02, 0xe9, 0xa2, 0x13, 0x00, 0x42, 0x1b, 0x02, 0xa7, - 0x13, 0x00, 0xac, 0xfa, 0x01, 0xad, 0xdf, 0x01, 0xae, 0xbf, 0x01, 0xef, - 0xa3, 0x13, 0x00, 0x02, 0x7c, 0x00, 0x9e, 0x01, 0xf3, 0xcd, 0x13, 0x80, - 0x80, 0x01, 0xb4, 0x3d, 0xf5, 0xa4, 0x13, 0x00, 0xf6, 0xa5, 0x13, 0x00, - 0xb7, 0x1b, 0xb9, 0x01, 0xff, 0xe1, 0xef, 0x13, 0x00, 0xe5, 0xf0, 0x13, - 0x00, 0xe9, 0xf1, 0x13, 0x00, 0xef, 0xf2, 0x13, 0x00, 0xf5, 0xf3, 0x13, - 0x00, 0xf6, 0xf4, 0x13, 0x40, 0xe1, 0xe9, 0x13, 0x00, 0xe5, 0xea, 0x13, - 0x00, 0xe9, 0xeb, 0x13, 0x00, 0xef, 0xec, 0x13, 0x00, 0xf5, 0xed, 0x13, - 0x00, 0xf6, 0xee, 0x13, 0x40, 0xe1, 0xd4, 0x13, 0x00, 0xe5, 0xd6, 0x13, - 0x00, 0xe9, 0xd8, 0x13, 0x00, 0xac, 0x1b, 0xb3, 0x01, 0xff, 0xe1, 0xe3, - 0x13, 0x00, 0xe5, 0xe4, 0x13, 0x00, 0xe9, 0xe5, 0x13, 0x00, 0xef, 0xe6, - 0x13, 0x00, 0xf5, 0xe7, 0x13, 0x00, 0xf6, 0xe8, 0x13, 0x40, 0xe1, 0xdd, - 0x13, 0x00, 0xe5, 0xde, 0x13, 0x00, 0xe9, 0xdf, 0x13, 0x00, 0xef, 0xe0, - 0x13, 0x00, 0xf5, 0xe1, 0x13, 0x00, 0xf6, 0xe2, 0x13, 0x40, 0xe1, 0xcc, - 0x13, 0x00, 0xe5, 0xce, 0x13, 0x00, 0xe9, 0xcf, 0x13, 0x00, 0xef, 0xd0, - 0x13, 0x00, 0xf5, 0xd1, 0x13, 0x00, 0xf6, 0xd2, 0x13, 0x40, 0xe1, 0xc6, - 0x13, 0x00, 0xe5, 0xc7, 0x13, 0x00, 0xe9, 0xc8, 0x13, 0x00, 0xef, 0xc9, - 0x13, 0x00, 0xf5, 0xca, 0x13, 0x00, 0xf6, 0xcb, 0x13, 0x40, 0xe1, 0xbe, - 0x13, 0x80, 0x14, 0xe5, 0xc1, 0x13, 0x00, 0xe9, 0xc2, 0x13, 0x00, 0xef, - 0xc3, 0x13, 0x00, 0xf5, 0xc4, 0x13, 0x00, 0xf6, 0xc5, 0x13, 0x40, 0xe8, - 0xc0, 0x13, 0x40, 0xe1, 0xb9, 0x13, 0x00, 0xe5, 0xba, 0x13, 0x00, 0xe9, - 0xbb, 0x13, 0x00, 0xef, 0xbc, 0x13, 0x00, 0xf5, 0xbd, 0x13, 0x00, 0xf6, - 0xf5, 0x13, 0x40, 0xe1, 0xb3, 0x13, 0x00, 0xe5, 0xb4, 0x13, 0x00, 0xe9, - 0xb5, 0x13, 0x00, 0xef, 0xb6, 0x13, 0x00, 0xf5, 0xb7, 0x13, 0x00, 0xf6, - 0xb8, 0x13, 0x40, 0xe1, 0xad, 0x13, 0x00, 0xe5, 0xae, 0x13, 0x00, 0xe9, - 0xaf, 0x13, 0x00, 0x42, 0xff, 0x04, 0xbf, 0x13, 0x00, 0xef, 0xb0, 0x13, - 0x00, 0xf5, 0xb1, 0x13, 0x00, 0xf6, 0xb2, 0x13, 0x40, 0xe1, 0xa6, 0x13, - 0x00, 0xe5, 0xa8, 0x13, 0x00, 0xe9, 0xa9, 0x13, 0x00, 0xef, 0xaa, 0x13, - 0x00, 0xf5, 0xab, 0x13, 0x00, 0xf6, 0xac, 0x13, 0x40, 0xe1, 0xd3, 0x13, - 0x00, 0xe5, 0xd5, 0x13, 0x00, 0xe9, 0xd7, 0x13, 0x00, 0x42, 0x74, 0x00, - 0xdc, 0x13, 0x00, 0xef, 0xd9, 0x13, 0x00, 0xf5, 0xda, 0x13, 0x00, 0xf6, - 0xdb, 0x13, 0x40, 0x4e, 0x66, 0x7a, 0xe3, 0xf4, 0x01, 0x48, 0x0a, 0xc8, - 0xc0, 0xf9, 0x41, 0x45, 0xb8, 0x00, 0x13, 0x27, 0x00, 0x48, 0x23, 0x14, - 0x7e, 0xf6, 0xc1, 0x00, 0x45, 0x07, 0x0b, 0x95, 0xfb, 0x41, 0xa9, 0x8d, - 0x08, 0x04, 0xa2, 0xed, 0xb5, 0x04, 0x02, 0x1e, 0x04, 0x3b, 0xb2, 0x01, - 0xff, 0x07, 0xbf, 0xcb, 0x18, 0x07, 0x45, 0x0d, 0x01, 0xff, 0x4f, 0xc3, - 0x6a, 0xc9, 0xf4, 0x01, 0x4d, 0xfd, 0x87, 0xc8, 0xf4, 0xc1, 0x00, 0x4d, - 0xbb, 0x7d, 0xb9, 0xf4, 0x41, 0x49, 0x14, 0x3b, 0x09, 0x00, 0x80, 0x06, - 0x42, 0xc9, 0x02, 0x40, 0x20, 0x40, 0x80, 0x01, 0xff, 0x43, 0x4d, 0x12, - 0x88, 0x00, 0x00, 0x52, 0x5e, 0x55, 0x89, 0x00, 0x40, 0x0f, 0x6d, 0x32, - 0xc7, 0x03, 0x06, 0xc4, 0x06, 0x80, 0x03, 0x07, 0xc1, 0x05, 0x52, 0x0c, - 0x01, 0x16, 0x34, 0x0b, 0xd1, 0x75, 0x01, 0xff, 0xa1, 0x21, 0x42, 0xc3, - 0x0a, 0x2c, 0xaa, 0x00, 0xe9, 0x2a, 0xaa, 0x80, 0x12, 0xef, 0x2f, 0xaa, - 0x80, 0x09, 0xf5, 0x2d, 0xaa, 0xc0, 0x00, 0xe5, 0x32, 0xaa, 0x40, 0xe5, - 0x2e, 0xaa, 0x40, 0xe9, 0x2b, 0xaa, 0x40, 0xe1, 0x29, 0xaa, 0x00, 0xe9, - 0x30, 0xaa, 0x00, 0xf5, 0x31, 0xaa, 0x40, 0xa4, 0x0c, 0x46, 0xa6, 0x83, - 0x5c, 0xaa, 0x00, 0x4c, 0x2d, 0x94, 0x5f, 0xaa, 0x40, 0x44, 0xd1, 0x1f, - 0x5d, 0xaa, 0x00, 0x4b, 0xd8, 0x9e, 0x5e, 0xaa, 0x40, 0xe1, 0x00, 0xaa, - 0x80, 0xa0, 0x02, 0xa2, 0x8d, 0x02, 0x02, 0x1e, 0x14, 0xfe, 0x01, 0xa4, - 0xeb, 0x01, 0xe5, 0x03, 0xaa, 0x00, 0x06, 0x3d, 0x2c, 0xb1, 0x01, 0xa7, - 0xa4, 0x01, 0x42, 0x22, 0x00, 0x28, 0xaa, 0x00, 0xe9, 0x01, 0xaa, 0x00, - 0xaa, 0x8d, 0x01, 0xab, 0x80, 0x01, 0x42, 0x74, 0x00, 0x24, 0xaa, 0x00, - 0xad, 0x6e, 0xae, 0x44, 0xef, 0x05, 0xaa, 0x00, 0xb0, 0x2e, 0x42, 0x71, - 0x00, 0x23, 0xaa, 0x00, 0xb3, 0x1c, 0xb4, 0x10, 0xf5, 0x02, 0xaa, 0x00, - 0x42, 0xa6, 0x0a, 0x25, 0xaa, 0x00, 0x42, 0x34, 0x22, 0x22, 0xaa, 0x40, - 0xe1, 0x13, 0xaa, 0x00, 0x42, 0x22, 0x00, 0x14, 0xaa, 0x40, 0xe1, 0x27, - 0xaa, 0x00, 0x42, 0x15, 0x06, 0x26, 0xaa, 0x40, 0xe1, 0x1a, 0xaa, 0x00, - 0x42, 0x22, 0x00, 0x1c, 0xaa, 0x00, 0x42, 0x6c, 0x09, 0x1b, 0xaa, 0x40, - 0xe1, 0x18, 0xaa, 0x00, 0xa7, 0x18, 0xa8, 0x06, 0x42, 0x87, 0x13, 0x17, - 0xaa, 0x40, 0xe1, 0x11, 0xaa, 0x00, 0x42, 0xbd, 0x26, 0x12, 0xaa, 0x00, - 0x42, 0x87, 0x13, 0x10, 0xaa, 0x40, 0xe1, 0x0b, 0xaa, 0x00, 0x42, 0x87, - 0x13, 0x0a, 0xaa, 0x40, 0xe1, 0x20, 0xaa, 0x00, 0x42, 0x87, 0x13, 0x1f, - 0xaa, 0x40, 0xe1, 0x06, 0xaa, 0x00, 0x42, 0x22, 0x00, 0x07, 0xaa, 0x40, - 0xe1, 0x0e, 0xaa, 0x00, 0x42, 0x22, 0x00, 0x0f, 0xaa, 0x40, 0xe1, 0x08, - 0xaa, 0x00, 0x42, 0x22, 0x00, 0x09, 0xaa, 0x40, 0x42, 0x1e, 0x14, 0x44, - 0xaa, 0x00, 0xe7, 0x41, 0xaa, 0x00, 0xeb, 0x40, 0xaa, 0x00, 0xec, 0x4a, - 0xaa, 0x00, 0xee, 0x46, 0xaa, 0x80, 0x16, 0xf0, 0x47, 0xaa, 0x00, 0xf2, - 0x49, 0xaa, 0x00, 0x42, 0xee, 0x00, 0x4b, 0xaa, 0x00, 0xf4, 0x45, 0xaa, - 0x00, 0xf9, 0x48, 0xaa, 0x40, 0xe7, 0x42, 0xaa, 0x40, 0xe1, 0x15, 0xaa, - 0x00, 0x42, 0xa1, 0x10, 0x19, 0xaa, 0x00, 0x42, 0x22, 0x00, 0x16, 0xaa, - 0x40, 0xe1, 0x0c, 0xaa, 0x00, 0x42, 0x22, 0x00, 0x0d, 0xaa, 0x40, 0xe1, - 0x1d, 0xaa, 0x00, 0x42, 0x16, 0x00, 0x21, 0xaa, 0x00, 0x42, 0x22, 0x00, - 0x1e, 0xaa, 0x40, 0xe9, 0x04, 0xaa, 0x40, 0x45, 0xc3, 0x0a, 0x58, 0xaa, - 0x00, 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0x59, 0xaa, 0x00, 0x43, 0xbf, 0x0a, - 0x51, 0xaa, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xa1, 0x1d, 0x50, 0xaa, - 0x40, 0x44, 0x25, 0x01, 0x53, 0xaa, 0x00, 0x42, 0x15, 0x02, 0x52, 0xaa, - 0x40, 0x44, 0x27, 0x1d, 0x57, 0xaa, 0x00, 0x42, 0x60, 0x25, 0x56, 0xaa, - 0x40, 0x43, 0xa7, 0x05, 0x55, 0xaa, 0x00, 0x43, 0xcb, 0x06, 0x54, 0xaa, - 0x40, 0x06, 0x3d, 0x2c, 0x18, 0x42, 0x74, 0x00, 0x35, 0xaa, 0x00, 0x42, - 0x71, 0x00, 0x34, 0xaa, 0x00, 0x42, 0xa9, 0x01, 0x36, 0xaa, 0x00, 0x42, - 0x34, 0x22, 0x33, 0xaa, 0x40, 0xe8, 0x4d, 0xaa, 0x00, 0xed, 0x4c, 0xaa, - 0x00, 0x42, 0x1d, 0x01, 0x43, 0xaa, 0x40, 0x47, 0x6e, 0xcc, 0x32, 0x11, - 0x01, 0xa4, 0xf8, 0x02, 0x07, 0xc1, 0x05, 0x74, 0x47, 0x3b, 0xd0, 0x34, - 0x11, 0x01, 0x46, 0x1c, 0xc9, 0x31, 0x11, 0x01, 0x4d, 0xd6, 0x33, 0x43, - 0x11, 0x01, 0xb3, 0x43, 0xb6, 0x01, 0xff, 0x45, 0x5c, 0x23, 0x33, 0x11, - 0x01, 0x0a, 0xd2, 0x75, 0x01, 0xff, 0xe1, 0x27, 0x11, 0x81, 0x24, 0xe5, - 0x2c, 0x11, 0x81, 0x1b, 0xe9, 0x28, 0x11, 0x81, 0x12, 0xef, 0x2e, 0x11, - 0x81, 0x09, 0xf5, 0x2a, 0x11, 0xc1, 0x00, 0xf5, 0x2b, 0x11, 0x41, 0xe9, - 0x30, 0x11, 0x41, 0xe9, 0x29, 0x11, 0x41, 0xe9, 0x46, 0x11, 0x41, 0xe1, - 0x45, 0x11, 0x01, 0xe9, 0x2d, 0x11, 0x01, 0xf5, 0x2f, 0x11, 0x41, 0x4b, - 0x58, 0x26, 0x40, 0x11, 0x01, 0x04, 0x30, 0x03, 0x01, 0xff, 0x48, 0xd0, - 0x15, 0x01, 0x11, 0x01, 0x4b, 0x4f, 0x23, 0x00, 0x11, 0x01, 0x47, 0xa1, - 0x4a, 0x02, 0x11, 0x41, 0x42, 0x31, 0x12, 0x03, 0x11, 0x01, 0xa2, 0xeb, - 0x01, 0xa3, 0xdc, 0x01, 0xa4, 0xbf, 0x01, 0xe5, 0x06, 0x11, 0x01, 0xa7, - 0xac, 0x01, 0x43, 0x42, 0x40, 0x26, 0x11, 0x01, 0xe9, 0x04, 0x11, 0x01, - 0xaa, 0x93, 0x01, 0xab, 0x84, 0x01, 0xac, 0x76, 0x43, 0xd5, 0x56, 0x1f, - 0x11, 0x01, 0xae, 0x56, 0xb0, 0x48, 0x43, 0xcd, 0xa8, 0x22, 0x11, 0x01, - 0x43, 0xc4, 0xdc, 0x25, 0x11, 0x01, 0xb4, 0x1f, 0xf5, 0x05, 0x11, 0x01, - 0x43, 0xe5, 0xe8, 0x47, 0x11, 0x01, 0x43, 0xe7, 0x18, 0x24, 0x11, 0x01, - 0xb9, 0x01, 0xff, 0x42, 0x31, 0x12, 0x21, 0x11, 0x01, 0x43, 0x4e, 0xb7, - 0x20, 0x11, 0x41, 0x42, 0x31, 0x12, 0x16, 0x11, 0x01, 0x43, 0x42, 0x40, - 0x17, 0x11, 0x01, 0xb4, 0x01, 0xff, 0x42, 0x31, 0x12, 0x11, 0x11, 0x01, - 0x43, 0x42, 0x40, 0x12, 0x11, 0x41, 0x42, 0x31, 0x12, 0x1b, 0x11, 0x01, - 0x43, 0x42, 0x40, 0x1c, 0x11, 0x41, 0x42, 0x31, 0x12, 0x1a, 0x11, 0x01, - 0x43, 0x50, 0x56, 0x0b, 0x11, 0x01, 0x43, 0xe2, 0x51, 0x15, 0x11, 0x01, - 0x43, 0x4e, 0xb7, 0x10, 0x11, 0x41, 0x42, 0x31, 0x12, 0x23, 0x11, 0x01, - 0x43, 0x42, 0x40, 0x44, 0x11, 0x41, 0x42, 0x31, 0x12, 0x07, 0x11, 0x01, - 0x43, 0x42, 0x40, 0x08, 0x11, 0x41, 0x42, 0x31, 0x12, 0x0e, 0x11, 0x01, - 0x43, 0x42, 0x40, 0x0f, 0x11, 0x41, 0x42, 0x31, 0x12, 0x09, 0x11, 0x01, - 0x43, 0x42, 0x40, 0x0a, 0x11, 0x41, 0x42, 0x31, 0x12, 0x18, 0x11, 0x01, - 0xa4, 0x06, 0x43, 0x42, 0x40, 0x19, 0x11, 0x41, 0x42, 0x31, 0x12, 0x13, - 0x11, 0x01, 0x43, 0x42, 0x40, 0x14, 0x11, 0x41, 0x42, 0x31, 0x12, 0x0c, - 0x11, 0x01, 0x43, 0x42, 0x40, 0x0d, 0x11, 0x41, 0x42, 0x31, 0x12, 0x1d, - 0x11, 0x01, 0x43, 0x42, 0x40, 0x1e, 0x11, 0x41, 0x44, 0xd1, 0x1f, 0x41, - 0x11, 0x01, 0x05, 0xc5, 0x06, 0x06, 0x4b, 0xd8, 0x9e, 0x42, 0x11, 0x41, - 0x45, 0xc3, 0x0a, 0x3e, 0x11, 0x01, 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0x3f, - 0x11, 0x01, 0x43, 0xbf, 0x0a, 0x37, 0x11, 0x01, 0xb3, 0x14, 0xb4, 0x06, - 0x44, 0xa1, 0x1d, 0x36, 0x11, 0x41, 0x44, 0x25, 0x01, 0x39, 0x11, 0x01, - 0x42, 0x15, 0x02, 0x38, 0x11, 0x41, 0x44, 0x27, 0x1d, 0x3d, 0x11, 0x01, - 0x42, 0x60, 0x25, 0x3c, 0x11, 0x41, 0x43, 0xa7, 0x05, 0x3b, 0x11, 0x01, - 0x43, 0xcb, 0x06, 0x3a, 0x11, 0x41, 0x42, 0x5f, 0x01, 0xd3, 0x26, 0x00, - 0xf2, 0x91, 0xfa, 0x41, 0x02, 0x00, 0x00, 0x32, 0x4a, 0x35, 0xab, 0x48, - 0xf5, 0x01, 0x02, 0x11, 0x00, 0x06, 0x43, 0x33, 0x23, 0xb3, 0x26, 0x40, - 0x45, 0x2e, 0x03, 0xa2, 0x00, 0x00, 0x02, 0x88, 0x00, 0x01, 0xff, 0x4c, - 0x71, 0x89, 0x04, 0x21, 0x00, 0x05, 0xc2, 0x07, 0x01, 0xff, 0x48, 0xab, - 0x88, 0x4e, 0xfe, 0x00, 0x48, 0xb8, 0x88, 0x4a, 0xfe, 0x40, 0x45, 0x2e, - 0x03, 0xb5, 0x20, 0x00, 0x43, 0xdd, 0x0d, 0xb8, 0x00, 0x40, 0x44, 0xa6, - 0xd2, 0x35, 0xf3, 0x01, 0xa4, 0xfb, 0x22, 0xac, 0xec, 0x22, 0xad, 0xd6, - 0x22, 0xae, 0xf4, 0x05, 0xb0, 0xe5, 0x05, 0xb2, 0x9a, 0x03, 0x44, 0xbc, - 0x01, 0xeb, 0x26, 0x00, 0xf4, 0x08, 0xf4, 0x81, 0xf6, 0x02, 0xb5, 0x01, - 0xff, 0x10, 0xca, 0x5f, 0x06, 0x49, 0x95, 0x04, 0x21, 0x26, 0x40, 0x4d, - 0xf7, 0x7f, 0x6f, 0x05, 0x01, 0x07, 0xc1, 0x05, 0x01, 0xff, 0xa1, 0xcf, - 0x02, 0x43, 0x71, 0x09, 0x31, 0x05, 0x01, 0xa3, 0x98, 0x02, 0xa4, 0xfa, - 0x01, 0xa5, 0xed, 0x01, 0x43, 0xc8, 0xd8, 0x54, 0x05, 0x01, 0xa7, 0xd8, - 0x01, 0x44, 0xfa, 0xec, 0x46, 0x05, 0x01, 0xa9, 0xbd, 0x01, 0xaa, 0xae, - 0x01, 0xab, 0x9f, 0x01, 0xac, 0x90, 0x01, 0x43, 0x61, 0xe5, 0x4c, 0x05, - 0x01, 0x44, 0x46, 0xee, 0x4e, 0x05, 0x01, 0x42, 0x10, 0x00, 0x52, 0x05, - 0x01, 0xb0, 0x70, 0x02, 0xf4, 0x13, 0x64, 0x43, 0x3a, 0x0e, 0x59, 0x05, - 0x01, 0xb3, 0x44, 0xb4, 0x30, 0x44, 0xb2, 0xef, 0x5b, 0x05, 0x01, 0x44, - 0xe6, 0xef, 0x40, 0x05, 0x01, 0xb9, 0x16, 0xba, 0x01, 0xff, 0x43, 0x65, - 0x34, 0x35, 0x05, 0x01, 0xa8, 0x01, 0xff, 0xe1, 0x3b, 0x05, 0x01, 0x42, - 0x62, 0x01, 0x37, 0x05, 0x41, 0x43, 0xc3, 0x32, 0x61, 0x05, 0x01, 0x43, - 0x2d, 0x23, 0x3a, 0x05, 0x41, 0x42, 0xbb, 0x01, 0x38, 0x05, 0x01, 0x43, - 0x08, 0xf1, 0x5c, 0x05, 0x01, 0x43, 0xe8, 0x51, 0x53, 0x05, 0x41, 0x43, - 0xe1, 0xf0, 0x5a, 0x05, 0x01, 0xa8, 0x01, 0xff, 0xe1, 0x3d, 0x05, 0x81, - 0x06, 0x42, 0xdc, 0x67, 0x5d, 0x05, 0x41, 0xeb, 0x50, 0x05, 0x41, 0xf2, - 0x4d, 0x05, 0x01, 0xf9, 0x47, 0x05, 0x41, 0x42, 0x92, 0x01, 0x57, 0x05, - 0x01, 0x43, 0x08, 0xf1, 0x62, 0x05, 0x41, 0x42, 0x1a, 0x00, 0x3e, 0x05, - 0x01, 0x43, 0xa3, 0x51, 0x45, 0x05, 0x41, 0x42, 0x17, 0x00, 0x44, 0x05, - 0x01, 0x42, 0x4f, 0x3e, 0x63, 0x05, 0x41, 0x43, 0xee, 0x7e, 0x51, 0x05, - 0x01, 0x43, 0xff, 0xf0, 0x43, 0x05, 0x41, 0x43, 0xd6, 0x34, 0x3f, 0x05, - 0x01, 0x42, 0x74, 0x05, 0x3c, 0x05, 0x01, 0x42, 0xa7, 0x01, 0x5e, 0x05, - 0x41, 0x44, 0xf6, 0xec, 0x58, 0x05, 0x01, 0x42, 0x29, 0x02, 0x32, 0x05, - 0x41, 0xe2, 0x34, 0x05, 0x01, 0x42, 0x61, 0x1c, 0x36, 0x05, 0x41, 0x42, - 0x8a, 0x00, 0x33, 0x05, 0x01, 0x43, 0xe8, 0x34, 0x41, 0x05, 0x01, 0xba, - 0x01, 0xff, 0x42, 0x9e, 0x10, 0x55, 0x05, 0x01, 0x43, 0xe8, 0x51, 0x4f, - 0x05, 0x41, 0xa1, 0x22, 0xa8, 0x0d, 0x02, 0x34, 0x22, 0x01, 0xff, 0xf7, - 0x5f, 0x05, 0x01, 0xf9, 0x4b, 0x05, 0x41, 0xe1, 0x39, 0x05, 0x81, 0x0a, - 0xe9, 0x4a, 0x05, 0x01, 0x42, 0xdc, 0x67, 0x49, 0x05, 0x41, 0xf4, 0x56, - 0x05, 0x41, 0xf2, 0x42, 0x05, 0x01, 0x42, 0x61, 0x1c, 0x60, 0x05, 0x41, - 0x42, 0x8d, 0x04, 0x30, 0x05, 0x01, 0x42, 0x0c, 0x00, 0x48, 0x05, 0x41, - 0x45, 0xe0, 0x07, 0x31, 0xf4, 0xc1, 0x00, 0x06, 0x50, 0x00, 0x01, 0xff, - 0x4c, 0xd9, 0x93, 0x39, 0xf6, 0x01, 0x49, 0xe3, 0xbe, 0x3c, 0xf6, 0x41, - 0x48, 0x12, 0xc0, 0xd0, 0x26, 0x00, 0x02, 0x06, 0x00, 0xaa, 0x02, 0xa5, - 0x96, 0x02, 0x0b, 0x8e, 0x8b, 0x29, 0xaf, 0x1d, 0xb0, 0x0f, 0xb2, 0x01, - 0xff, 0x4b, 0x6c, 0x86, 0x0d, 0x00, 0x00, 0x42, 0xf0, 0x04, 0x55, 0xf9, - 0x41, 0x49, 0x8c, 0xb2, 0x8f, 0xf3, 0x01, 0x49, 0x22, 0xb6, 0x9a, 0xfa, - 0x41, 0xee, 0xc7, 0x02, 0x00, 0x4a, 0xcb, 0xb0, 0xa0, 0xf3, 0x41, 0xe1, - 0xa0, 0x02, 0x81, 0xdf, 0x01, 0xe2, 0xa9, 0x02, 0x01, 0x02, 0xbc, 0x06, - 0xca, 0x01, 0xe4, 0xa2, 0x02, 0x81, 0xc0, 0x01, 0xe5, 0xba, 0x02, 0x81, - 0xb6, 0x01, 0xe7, 0xc0, 0x02, 0x81, 0xac, 0x01, 0xe9, 0xb9, 0x02, 0x81, - 0xa2, 0x01, 0xeb, 0xbc, 0x02, 0x81, 0x98, 0x01, 0xec, 0xa3, 0x02, 0x81, - 0x89, 0x01, 0xed, 0xaa, 0x02, 0x81, 0x73, 0xee, 0xb5, 0x02, 0x81, 0x62, - 0xef, 0xab, 0x02, 0x01, 0xf0, 0xb7, 0x02, 0x81, 0x55, 0xf1, 0xa8, 0x02, - 0x01, 0xf2, 0xa5, 0x02, 0x81, 0x48, 0xf3, 0xb0, 0x02, 0x81, 0x2d, 0xf4, - 0xad, 0x02, 0x81, 0x1f, 0xf5, 0xb2, 0x02, 0x81, 0x04, 0xf8, 0xb4, 0x02, - 0x41, 0xf5, 0xbf, 0x02, 0xc1, 0x00, 0xf5, 0xa4, 0x02, 0xc1, 0x00, 0xd2, - 0xc8, 0x02, 0x01, 0xd3, 0xd0, 0x02, 0x01, 0xf5, 0xbb, 0x02, 0x41, 0xf4, - 0xc7, 0x02, 0xc1, 0x00, 0xd2, 0xb6, 0x02, 0x41, 0xe8, 0xae, 0x02, 0x81, - 0x0d, 0xf3, 0xb8, 0x02, 0x01, 0xf4, 0xc2, 0x02, 0xc1, 0x00, 0xd2, 0xc3, - 0x02, 0x41, 0xd2, 0xaf, 0x02, 0x41, 0xf2, 0xc9, 0x02, 0x41, 0xd2, 0xa1, - 0x02, 0x41, 0xe4, 0xbe, 0x02, 0x01, 0xe7, 0xc4, 0x02, 0x01, 0xee, 0xb3, - 0x02, 0x41, 0xe2, 0xca, 0x02, 0xc1, 0x00, 0xd2, 0xcb, 0x02, 0x01, 0xd3, - 0xcc, 0x02, 0x01, 0xd4, 0xcd, 0x02, 0x41, 0xe4, 0xa6, 0x02, 0xc1, 0x00, - 0xd2, 0xce, 0x02, 0x41, 0xd2, 0xbd, 0x02, 0x41, 0xe9, 0xc5, 0x02, 0x41, - 0xd2, 0xc1, 0x02, 0x41, 0xd2, 0xcf, 0x02, 0x41, 0xd2, 0xac, 0x02, 0x41, - 0x42, 0x4e, 0xdf, 0xb1, 0x02, 0x01, 0x42, 0xac, 0xf1, 0xc6, 0x02, 0x41, - 0xd2, 0xa7, 0x02, 0x41, 0x43, 0xf3, 0x01, 0x05, 0x21, 0x00, 0xf4, 0x38, - 0x20, 0xc0, 0x00, 0x50, 0xaa, 0x5e, 0x41, 0x20, 0x40, 0x48, 0x92, 0xc3, - 0xc3, 0xf5, 0x01, 0x45, 0x40, 0x13, 0xc7, 0xf4, 0xc1, 0x00, 0x49, 0xf3, - 0xb1, 0xc2, 0xf5, 0x41, 0x46, 0x42, 0xda, 0x3f, 0x2e, 0x00, 0x46, 0x88, - 0xdc, 0x51, 0x26, 0x40, 0x10, 0x4a, 0x5f, 0x39, 0x02, 0x73, 0x02, 0x18, - 0xa4, 0x0c, 0x48, 0xfa, 0xc5, 0x6b, 0xf9, 0x01, 0x42, 0x17, 0x50, 0xf6, - 0xf6, 0x41, 0x42, 0x68, 0x00, 0x6f, 0xf5, 0x01, 0xf9, 0x6c, 0xf3, 0x41, - 0xec, 0x18, 0x00, 0x80, 0x04, 0xf2, 0x4b, 0x26, 0x40, 0x80, 0x06, 0x48, - 0xfa, 0xc4, 0xd9, 0xf5, 0x41, 0x49, 0xef, 0x1f, 0x94, 0x00, 0x00, 0x43, - 0x13, 0x1b, 0x7f, 0x00, 0x4e, 0xe1, 0x0a, 0x14, 0x80, 0xf0, 0x1b, 0xa2, - 0x89, 0x1b, 0xe3, 0xa1, 0x14, 0x80, 0xe0, 0x13, 0xe5, 0x01, 0x14, 0x80, - 0xd0, 0x13, 0xe6, 0x5d, 0x15, 0x80, 0xb1, 0x12, 0x4c, 0x2d, 0x28, 0x1e, - 0x14, 0x00, 0xa8, 0x9e, 0x12, 0xe9, 0x03, 0x14, 0x80, 0x90, 0x12, 0xeb, - 0x83, 0x14, 0x80, 0xba, 0x11, 0xec, 0xea, 0x14, 0x80, 0xca, 0x10, 0xed, - 0xbb, 0x14, 0x80, 0xe1, 0x0f, 0xee, 0xd0, 0x14, 0x80, 0xd6, 0x0c, 0xef, - 0x05, 0x14, 0x80, 0x89, 0x0c, 0xf0, 0x49, 0x14, 0x80, 0xb1, 0x0b, 0xf1, - 0x85, 0x15, 0x80, 0x87, 0x0b, 0xf2, 0x50, 0x15, 0x80, 0xa7, 0x0a, 0xf3, - 0x05, 0x15, 0x80, 0xf5, 0x07, 0xf4, 0x66, 0x14, 0x80, 0xe0, 0x05, 0xb7, - 0x9f, 0x01, 0xf9, 0x3e, 0x15, 0xc0, 0x00, 0x06, 0x1f, 0x9b, 0x4e, 0xe1, - 0x2d, 0x15, 0x80, 0x3c, 0xe5, 0x26, 0x15, 0x00, 0xe9, 0x28, 0x15, 0x80, - 0x2f, 0xef, 0x2a, 0x15, 0x80, 0x22, 0xb7, 0x01, 0xff, 0xe1, 0x39, 0x15, - 0x80, 0x16, 0xe5, 0x2f, 0x15, 0x00, 0xe9, 0x31, 0x15, 0x80, 0x09, 0xef, - 0x35, 0x15, 0xc0, 0x00, 0xef, 0x37, 0x15, 0x40, 0xe9, 0x33, 0x15, 0x40, - 0xe1, 0x3b, 0x15, 0x40, 0xef, 0x2b, 0x15, 0x00, 0xf9, 0xc3, 0x18, 0x40, - 0xe9, 0x29, 0x15, 0x40, 0xe1, 0x2e, 0x15, 0x80, 0x04, 0xf9, 0xc4, 0x18, - 0x40, 0xe9, 0x27, 0x15, 0x40, 0x43, 0xb3, 0xa1, 0x8f, 0x14, 0x00, 0x43, - 0x27, 0xe0, 0x71, 0x14, 0x00, 0x43, 0x49, 0x1c, 0xd9, 0x14, 0x00, 0x43, - 0x28, 0x1b, 0xa9, 0x14, 0x00, 0x43, 0x10, 0x16, 0xc6, 0x14, 0x00, 0x42, - 0x69, 0x05, 0x07, 0x14, 0x00, 0xb0, 0x16, 0x43, 0xe1, 0x20, 0xf3, 0x14, - 0x00, 0x43, 0x0e, 0x2f, 0x52, 0x14, 0x00, 0xf7, 0x1d, 0x14, 0x00, 0x43, - 0xb9, 0x52, 0x2c, 0x15, 0x40, 0x42, 0x69, 0x05, 0x35, 0x14, 0x00, 0x43, - 0xe7, 0x18, 0x48, 0x14, 0x40, 0xe1, 0x17, 0x14, 0x80, 0xb0, 0x04, 0xe5, - 0x0c, 0x14, 0x80, 0x59, 0xe9, 0x0e, 0x14, 0x80, 0x50, 0xef, 0x12, 0x14, - 0xc0, 0x00, 0xef, 0x14, 0x14, 0xc0, 0x00, 0x08, 0xb2, 0xc2, 0x01, 0xff, - 0x48, 0x9a, 0xc3, 0x7e, 0x16, 0x00, 0x42, 0x53, 0x00, 0x9f, 0x15, 0xc0, - 0x00, 0xe1, 0x9e, 0x15, 0x00, 0xe5, 0x9b, 0x15, 0x00, 0xe9, 0x9c, 0x15, - 0x00, 0xef, 0x9d, 0x15, 0x00, 0xb7, 0x01, 0xff, 0xe1, 0x7c, 0x16, 0x80, - 0x18, 0x42, 0x27, 0x01, 0x77, 0x16, 0x00, 0xe9, 0x78, 0x16, 0x80, 0x09, - 0xef, 0x7a, 0x16, 0xc0, 0x00, 0xef, 0x7b, 0x16, 0x40, 0xe9, 0x79, 0x16, - 0x40, 0xe1, 0x7d, 0x16, 0x40, 0xe9, 0x10, 0x14, 0x40, 0x02, 0x60, 0x01, - 0x01, 0xff, 0x06, 0x1f, 0x9b, 0x06, 0x45, 0x25, 0xc1, 0xdd, 0x18, 0x40, - 0x02, 0x3a, 0xec, 0x9f, 0x03, 0x44, 0x9e, 0xec, 0x5c, 0x15, 0x00, 0x02, - 0xed, 0x0a, 0xf5, 0x02, 0xec, 0xeb, 0x14, 0x80, 0xb7, 0x02, 0xed, 0xbc, - 0x14, 0x80, 0x8f, 0x02, 0x02, 0xa8, 0x01, 0xfd, 0x01, 0xf0, 0x4a, 0x14, - 0x80, 0xd5, 0x01, 0xf2, 0x51, 0x15, 0x80, 0xb9, 0x01, 0xb3, 0x72, 0xb4, - 0x48, 0xb7, 0x27, 0xf9, 0x40, 0x15, 0xc0, 0x00, 0xb7, 0x01, 0xff, 0xe1, - 0x3a, 0x15, 0x80, 0x16, 0xe5, 0x30, 0x15, 0x00, 0xe9, 0x32, 0x15, 0x80, - 0x09, 0xef, 0x36, 0x15, 0xc0, 0x00, 0xef, 0x38, 0x15, 0x40, 0xe9, 0x34, - 0x15, 0x40, 0xe1, 0x3c, 0x15, 0x40, 0xe1, 0x18, 0x14, 0x80, 0x16, 0xe5, - 0x0d, 0x14, 0x00, 0xe9, 0x0f, 0x14, 0x80, 0x09, 0xef, 0x13, 0x14, 0xc0, - 0x00, 0xef, 0x15, 0x14, 0x40, 0xe9, 0x11, 0x14, 0x40, 0xe1, 0x1a, 0x14, - 0x40, 0x44, 0x2a, 0xed, 0x69, 0x15, 0x00, 0xb7, 0x01, 0xff, 0xe1, 0x62, - 0x14, 0x80, 0x16, 0xe5, 0x58, 0x14, 0x00, 0xe9, 0x5a, 0x14, 0x80, 0x09, - 0xef, 0x5e, 0x14, 0xc0, 0x00, 0xef, 0x60, 0x14, 0x40, 0xe9, 0x5c, 0x14, - 0x40, 0xe1, 0x64, 0x14, 0x40, 0x02, 0x36, 0x1a, 0x22, 0xb7, 0x01, 0xff, - 0xe1, 0x01, 0x15, 0x80, 0x16, 0xe5, 0xf7, 0x14, 0x00, 0xe9, 0xf9, 0x14, - 0x80, 0x09, 0xef, 0xfd, 0x14, 0xc0, 0x00, 0xef, 0xff, 0x14, 0x40, 0xe9, - 0xfb, 0x14, 0x40, 0xe1, 0x03, 0x15, 0x40, 0xe1, 0x22, 0x15, 0x80, 0x16, - 0xe5, 0x18, 0x15, 0x00, 0xe9, 0x1a, 0x15, 0x80, 0x09, 0xef, 0x1e, 0x15, - 0xc0, 0x00, 0xef, 0x20, 0x15, 0x40, 0xe9, 0x1c, 0x15, 0x40, 0xe1, 0x24, - 0x15, 0x40, 0xe1, 0x8d, 0x15, 0x00, 0xe5, 0x8a, 0x15, 0x00, 0xe9, 0x8b, - 0x15, 0x00, 0xef, 0x8c, 0x15, 0x00, 0x43, 0xe7, 0x18, 0x4f, 0x15, 0x40, - 0xb7, 0x01, 0xff, 0xe1, 0x45, 0x14, 0x80, 0x16, 0xe5, 0x3b, 0x14, 0x00, - 0xe9, 0x3d, 0x14, 0x80, 0x09, 0xef, 0x41, 0x14, 0xc0, 0x00, 0xef, 0x43, - 0x14, 0x40, 0xe9, 0x3f, 0x14, 0x40, 0xe1, 0x47, 0x14, 0x40, 0xe1, 0xcc, - 0x14, 0x80, 0x04, 0xe5, 0xca, 0x14, 0x40, 0xe1, 0xce, 0x14, 0x40, 0xb7, - 0x01, 0xff, 0xe1, 0xb7, 0x14, 0x80, 0x16, 0xe5, 0xad, 0x14, 0x00, 0xe9, - 0xaf, 0x14, 0x80, 0x09, 0xef, 0xb3, 0x14, 0xc0, 0x00, 0xef, 0xb5, 0x14, - 0x40, 0xe9, 0xb1, 0x14, 0x40, 0xe1, 0xb9, 0x14, 0x40, 0xe1, 0x4d, 0x15, - 0x80, 0x2f, 0xe5, 0x44, 0x15, 0x00, 0xef, 0x4a, 0x15, 0x80, 0x22, 0xb7, - 0x01, 0xff, 0xe1, 0xe7, 0x14, 0x80, 0x16, 0xe5, 0xdd, 0x14, 0x00, 0xe9, - 0xdf, 0x14, 0x80, 0x09, 0xef, 0xe3, 0x14, 0xc0, 0x00, 0xef, 0xe5, 0x14, - 0x40, 0xe9, 0xe1, 0x14, 0x40, 0xe1, 0xe9, 0x14, 0x40, 0xef, 0xe1, 0x18, - 0x40, 0xe1, 0xe2, 0x18, 0x40, 0xe1, 0x7f, 0x14, 0x80, 0x16, 0xe5, 0x75, - 0x14, 0x00, 0xe9, 0x77, 0x14, 0x80, 0x09, 0xef, 0x7b, 0x14, 0xc0, 0x00, - 0xef, 0x7d, 0x14, 0x40, 0xe9, 0x79, 0x14, 0x40, 0xe1, 0x81, 0x14, 0x40, - 0xe1, 0x9d, 0x14, 0x80, 0x16, 0xe5, 0x93, 0x14, 0x00, 0xe9, 0x95, 0x14, - 0x80, 0x09, 0xef, 0x99, 0x14, 0xc0, 0x00, 0xef, 0x9b, 0x14, 0x40, 0xe9, - 0x97, 0x14, 0x40, 0xe1, 0x9f, 0x14, 0x40, 0xe1, 0x19, 0x14, 0x00, 0xf9, - 0xb3, 0x18, 0x40, 0xe1, 0x55, 0x14, 0x80, 0xfc, 0x01, 0xe5, 0x4c, 0x14, - 0x00, 0xe8, 0x6a, 0x15, 0x80, 0x9d, 0x01, 0xe9, 0x4e, 0x14, 0x80, 0x93, - 0x01, 0x02, 0xf1, 0x33, 0x74, 0xef, 0x50, 0x14, 0x80, 0x6b, 0xb4, 0x34, - 0xb7, 0x13, 0xb9, 0x01, 0xff, 0xe1, 0x73, 0x15, 0x00, 0xe5, 0x70, 0x15, - 0x00, 0xe9, 0x71, 0x15, 0x00, 0xef, 0x72, 0x15, 0x40, 0xe1, 0x61, 0x14, - 0x80, 0x16, 0xe5, 0x57, 0x14, 0x00, 0xe9, 0x59, 0x14, 0x80, 0x09, 0xef, - 0x5d, 0x14, 0xc0, 0x00, 0xef, 0x5f, 0x14, 0x40, 0xe9, 0x5b, 0x14, 0x40, - 0xe1, 0x63, 0x14, 0x40, 0xe1, 0x6a, 0x14, 0x00, 0xe5, 0x67, 0x14, 0x00, - 0xe8, 0x6f, 0x15, 0x80, 0x08, 0xe9, 0x68, 0x14, 0x00, 0xef, 0x69, 0x14, - 0x40, 0xe1, 0x6e, 0x15, 0x80, 0x17, 0xe5, 0x6b, 0x15, 0x00, 0xe9, 0x6c, - 0x15, 0x00, 0xef, 0x6d, 0x15, 0x80, 0x06, 0x42, 0x15, 0x01, 0xe5, 0x18, - 0x40, 0xef, 0xe6, 0x18, 0x40, 0xe1, 0xe7, 0x18, 0x40, 0xef, 0x51, 0x14, - 0x40, 0xe1, 0x89, 0x15, 0x00, 0xe5, 0x86, 0x15, 0x00, 0xe9, 0x87, 0x15, - 0x00, 0xef, 0x88, 0x15, 0x80, 0x06, 0x42, 0x15, 0x01, 0xe8, 0x18, 0x40, - 0xef, 0xe9, 0x18, 0x40, 0xe9, 0x4f, 0x14, 0x40, 0x48, 0x32, 0xc0, 0xae, - 0x15, 0x80, 0x2f, 0xe1, 0x66, 0x15, 0x80, 0x26, 0xe5, 0x5e, 0x15, 0x00, - 0xe9, 0x60, 0x15, 0x80, 0x19, 0xef, 0x64, 0x15, 0x80, 0x10, 0xb7, 0x01, - 0xff, 0xe1, 0xe4, 0x18, 0x80, 0x04, 0xe5, 0xe3, 0x18, 0x40, 0xe1, 0x68, - 0x15, 0x40, 0xef, 0x65, 0x15, 0x40, 0xe9, 0x62, 0x15, 0x40, 0xe1, 0x67, - 0x15, 0x40, 0xe1, 0xac, 0x15, 0x80, 0x16, 0xe5, 0xa7, 0x15, 0x00, 0xe9, - 0xa8, 0x15, 0x80, 0x09, 0xef, 0xaa, 0x15, 0xc0, 0x00, 0xef, 0xab, 0x15, - 0x40, 0xe9, 0xa9, 0x15, 0x40, 0xe1, 0xad, 0x15, 0x40, 0xe1, 0x56, 0x14, - 0x80, 0x04, 0xf9, 0xb7, 0x18, 0x40, 0xe9, 0x4d, 0x14, 0x40, 0xe1, 0xf4, - 0x14, 0x80, 0xbe, 0x01, 0xe5, 0xed, 0x14, 0x00, 0xe8, 0x25, 0x15, 0x80, - 0x68, 0xe9, 0xef, 0x14, 0x80, 0x5f, 0xef, 0xf1, 0x14, 0x80, 0x36, 0xb0, - 0x24, 0xf7, 0x07, 0x15, 0xc0, 0x00, 0xe1, 0x00, 0x15, 0x80, 0x16, 0xe5, - 0xf6, 0x14, 0x00, 0xe9, 0xf8, 0x14, 0x80, 0x09, 0xef, 0xfc, 0x14, 0xc0, - 0x00, 0xef, 0xfe, 0x14, 0x40, 0xe9, 0xfa, 0x14, 0x40, 0xe1, 0x02, 0x15, - 0x40, 0xe1, 0xbf, 0x1a, 0x01, 0xe5, 0xbc, 0x1a, 0x01, 0xe9, 0xbd, 0x1a, - 0x01, 0xef, 0xbe, 0x1a, 0x41, 0xef, 0xf2, 0x14, 0x00, 0x0c, 0xbd, 0x94, - 0x04, 0xf9, 0xbe, 0x18, 0x40, 0x42, 0xc9, 0x09, 0x88, 0x14, 0x00, 0x42, - 0x4e, 0x00, 0x85, 0x14, 0x00, 0x42, 0xec, 0x18, 0x86, 0x14, 0x00, 0x42, - 0x5c, 0x28, 0x87, 0x14, 0x40, 0xe9, 0xf0, 0x14, 0x40, 0xe1, 0x15, 0x15, - 0x80, 0x40, 0xe5, 0x10, 0x15, 0x00, 0xe9, 0x11, 0x15, 0x80, 0x33, 0xef, - 0x13, 0x15, 0x80, 0x26, 0xb7, 0x01, 0xff, 0xe1, 0x21, 0x15, 0x80, 0x1a, - 0xe5, 0x17, 0x15, 0x00, 0xe9, 0x19, 0x15, 0x80, 0x0d, 0xef, 0x1d, 0x15, - 0xc0, 0x00, 0xef, 0x1f, 0x15, 0x00, 0xf9, 0xc2, 0x18, 0x40, 0xe9, 0x1b, - 0x15, 0x40, 0xe1, 0x23, 0x15, 0x40, 0xef, 0x14, 0x15, 0x00, 0xf9, 0xc0, - 0x18, 0x40, 0xe9, 0x12, 0x15, 0x40, 0xe1, 0x16, 0x15, 0x00, 0xf9, 0xc1, - 0x18, 0x40, 0xe1, 0xf5, 0x14, 0x80, 0x5f, 0xf9, 0xbf, 0x18, 0xc0, 0x00, - 0x04, 0x6a, 0xed, 0x01, 0xff, 0xa8, 0x3e, 0xaa, 0x2f, 0xed, 0xbf, 0x14, - 0x00, 0x02, 0xa4, 0x02, 0x0c, 0x42, 0x53, 0x00, 0xa2, 0x14, 0x00, 0x42, - 0xf7, 0x19, 0x41, 0x15, 0x40, 0xe1, 0x9a, 0x15, 0x00, 0xe5, 0x97, 0x15, - 0x00, 0xe9, 0x98, 0x15, 0x00, 0xef, 0x99, 0x15, 0x80, 0x06, 0x42, 0x15, - 0x01, 0xea, 0x18, 0x40, 0xef, 0xeb, 0x18, 0x40, 0xe9, 0x1a, 0x16, 0x00, - 0xf5, 0x15, 0x16, 0xc0, 0x00, 0xf5, 0xf1, 0x18, 0x40, 0xe1, 0xc3, 0x15, - 0x00, 0xe5, 0xc0, 0x15, 0x00, 0xe9, 0xc1, 0x15, 0x00, 0xef, 0xc2, 0x15, - 0xc0, 0x00, 0xef, 0xec, 0x18, 0x40, 0xe9, 0xee, 0x14, 0x40, 0x07, 0xf4, - 0xca, 0x4c, 0xe1, 0x4b, 0x15, 0x80, 0x3a, 0xe5, 0x42, 0x15, 0x00, 0xe9, - 0x46, 0x15, 0x80, 0x2d, 0xef, 0x48, 0x15, 0x80, 0x24, 0xb7, 0x01, 0xff, - 0xe1, 0xd3, 0x18, 0x80, 0x18, 0x42, 0x27, 0x01, 0xce, 0x18, 0x00, 0xe9, - 0xcf, 0x18, 0x80, 0x09, 0xef, 0xd1, 0x18, 0xc0, 0x00, 0xef, 0xd2, 0x18, - 0x40, 0xe9, 0xd0, 0x18, 0x40, 0xe1, 0x4e, 0x15, 0x40, 0xef, 0x49, 0x15, - 0x40, 0xe9, 0x47, 0x15, 0x40, 0xe1, 0x4c, 0x15, 0x80, 0x04, 0xf9, 0xc5, - 0x18, 0x40, 0xe9, 0x45, 0x15, 0x40, 0xe5, 0x43, 0x15, 0x00, 0x42, 0x15, - 0x01, 0xe0, 0x18, 0x40, 0xe1, 0x83, 0x15, 0x80, 0x12, 0xe9, 0x7f, 0x15, - 0x80, 0x09, 0xef, 0x81, 0x15, 0xc0, 0x00, 0xef, 0x82, 0x15, 0x40, 0xe9, - 0x80, 0x15, 0x40, 0xe1, 0x84, 0x15, 0x80, 0x04, 0xe9, 0x6f, 0x16, 0x40, - 0xe9, 0x7e, 0x15, 0x40, 0xe1, 0x38, 0x14, 0x80, 0x40, 0xe5, 0x2f, 0x14, - 0x00, 0xe9, 0x31, 0x14, 0x80, 0x33, 0xef, 0x33, 0x14, 0x80, 0x26, 0xb7, - 0x01, 0xff, 0xe1, 0x44, 0x14, 0x80, 0x1a, 0xe5, 0x3a, 0x14, 0x00, 0xe9, - 0x3c, 0x14, 0x80, 0x0d, 0xef, 0x40, 0x14, 0xc0, 0x00, 0xef, 0x42, 0x14, - 0x00, 0xf9, 0xb6, 0x18, 0x40, 0xe9, 0x3e, 0x14, 0x40, 0xe1, 0x46, 0x14, - 0x40, 0xef, 0x34, 0x14, 0x00, 0xf9, 0xb4, 0x18, 0x40, 0xe9, 0x32, 0x14, - 0x40, 0xe1, 0x39, 0x14, 0x80, 0x04, 0xf9, 0xb5, 0x18, 0x40, 0xe9, 0x30, - 0x14, 0x40, 0x07, 0x70, 0xcf, 0x0c, 0xee, 0x2d, 0x14, 0x00, 0xef, 0x06, - 0x14, 0x00, 0xf9, 0xb0, 0x18, 0x40, 0xe3, 0xd7, 0x18, 0x00, 0xeb, 0xd6, - 0x18, 0x00, 0xed, 0xd8, 0x18, 0x00, 0xee, 0xd9, 0x18, 0x80, 0x11, 0xf0, - 0xd4, 0x18, 0x00, 0xf3, 0xda, 0x18, 0x80, 0x04, 0xf4, 0xd5, 0x18, 0x40, - 0xe8, 0xdb, 0x18, 0x40, 0xb7, 0x01, 0xff, 0xe9, 0xc7, 0x18, 0x80, 0x09, - 0xef, 0xcb, 0x18, 0xc0, 0x00, 0xef, 0xcd, 0x18, 0x40, 0xe9, 0xc9, 0x18, - 0x40, 0x08, 0x32, 0xc0, 0xf3, 0x02, 0xe1, 0xc7, 0x14, 0x80, 0xbd, 0x01, - 0xe5, 0xc0, 0x14, 0x00, 0xe7, 0x95, 0x15, 0x80, 0x8f, 0x01, 0xe8, 0xd2, - 0x14, 0x00, 0xe9, 0xc2, 0x14, 0x80, 0x81, 0x01, 0x42, 0x1d, 0x01, 0x96, - 0x15, 0x80, 0x5f, 0xef, 0xc4, 0x14, 0x80, 0x52, 0x04, 0x8a, 0xef, 0x22, - 0xb7, 0x01, 0xff, 0xe1, 0xcb, 0x14, 0x80, 0x16, 0xe5, 0xc9, 0x14, 0x00, - 0xe9, 0xc6, 0x18, 0x80, 0x09, 0xef, 0xca, 0x18, 0xc0, 0x00, 0xef, 0xcc, - 0x18, 0x40, 0xe9, 0xc8, 0x18, 0x40, 0xe1, 0xcd, 0x14, 0x40, 0x44, 0x46, - 0xed, 0x7b, 0x15, 0x80, 0x06, 0x44, 0xb5, 0x4f, 0x7c, 0x15, 0x40, 0xe1, - 0x79, 0x15, 0x80, 0x16, 0xe5, 0x74, 0x15, 0x00, 0xe9, 0x75, 0x15, 0x80, - 0x09, 0xef, 0x77, 0x15, 0xc0, 0x00, 0xef, 0x78, 0x15, 0x40, 0xe9, 0x76, - 0x15, 0x40, 0xe1, 0x7a, 0x15, 0x40, 0xef, 0xc5, 0x14, 0x00, 0xf9, 0xbb, - 0x18, 0x40, 0xe1, 0x75, 0x16, 0x80, 0x12, 0xe9, 0x71, 0x16, 0x80, 0x09, - 0xef, 0x73, 0x16, 0xc0, 0x00, 0xef, 0x74, 0x16, 0x40, 0xe9, 0x72, 0x16, - 0x40, 0xe1, 0x76, 0x16, 0x40, 0xe9, 0xc3, 0x14, 0x40, 0xe1, 0x93, 0x15, - 0x80, 0x12, 0xe9, 0x8f, 0x15, 0x80, 0x09, 0xef, 0x91, 0x15, 0xc0, 0x00, - 0xef, 0x92, 0x15, 0x40, 0xe9, 0x90, 0x15, 0x40, 0xe1, 0x94, 0x15, 0x80, - 0x04, 0xe9, 0x70, 0x16, 0x40, 0xe9, 0x8e, 0x15, 0x40, 0xe1, 0xc8, 0x14, - 0x80, 0xa6, 0x01, 0x06, 0xe2, 0xdc, 0x45, 0x07, 0xd0, 0xd3, 0x04, 0xf9, - 0xbc, 0x18, 0x40, 0xa8, 0x20, 0x03, 0x14, 0x5c, 0x01, 0xff, 0xe1, 0xba, - 0x1a, 0x81, 0x12, 0xe9, 0xb6, 0x1a, 0x81, 0x09, 0xef, 0xb8, 0x1a, 0xc1, - 0x00, 0xef, 0xb9, 0x1a, 0x41, 0xe9, 0xb7, 0x1a, 0x41, 0xe1, 0xbb, 0x1a, - 0x41, 0xe1, 0xb4, 0x1a, 0x81, 0x12, 0xe9, 0xb0, 0x1a, 0x81, 0x09, 0xef, - 0xb2, 0x1a, 0xc1, 0x00, 0xef, 0xb3, 0x1a, 0x41, 0xe9, 0xb1, 0x1a, 0x41, - 0xe1, 0xb5, 0x1a, 0x41, 0x44, 0x3a, 0xec, 0xa0, 0x14, 0x00, 0x44, 0xb6, - 0xed, 0x82, 0x14, 0x00, 0x44, 0x0e, 0xee, 0xba, 0x14, 0x00, 0x44, 0x6a, - 0xee, 0xcf, 0x14, 0x00, 0xb3, 0x1a, 0x44, 0x07, 0xe9, 0x65, 0x14, 0x00, - 0xb7, 0x06, 0x44, 0xfe, 0xef, 0x3d, 0x15, 0x40, 0x42, 0x31, 0x12, 0x1b, - 0x14, 0x00, 0x42, 0x69, 0x05, 0x16, 0x14, 0x40, 0x42, 0x61, 0x1f, 0x0b, - 0x15, 0x00, 0x43, 0x3a, 0xec, 0x0f, 0x15, 0x00, 0x42, 0xed, 0x0a, 0x0a, - 0x15, 0x80, 0x12, 0x43, 0x51, 0x02, 0x0c, 0x15, 0x00, 0x43, 0xed, 0x01, - 0x0d, 0x15, 0x00, 0x43, 0xe7, 0x18, 0x04, 0x15, 0x40, 0xe1, 0x0e, 0x15, - 0x40, 0xe9, 0xc1, 0x14, 0x40, 0xe5, 0x5f, 0x15, 0x00, 0xe9, 0x61, 0x15, - 0xc0, 0x00, 0xe9, 0x63, 0x15, 0x40, 0xe1, 0xaa, 0x14, 0x80, 0x51, 0xe5, - 0xa3, 0x14, 0x80, 0x3f, 0xe8, 0xbd, 0x14, 0x00, 0xe9, 0xa5, 0x14, 0x80, - 0x32, 0xef, 0xa7, 0x14, 0x80, 0x22, 0xb7, 0x01, 0xff, 0xe1, 0xb6, 0x14, - 0x80, 0x16, 0xe5, 0xac, 0x14, 0x00, 0xe9, 0xae, 0x14, 0x80, 0x09, 0xef, - 0xb2, 0x14, 0xc0, 0x00, 0xef, 0xb4, 0x14, 0x40, 0xe9, 0xb0, 0x14, 0x40, - 0xe1, 0xb8, 0x14, 0x40, 0xef, 0xa8, 0x14, 0xc0, 0x00, 0x4a, 0x87, 0xae, - 0x09, 0x15, 0x40, 0xe9, 0xa6, 0x14, 0x40, 0x05, 0x7e, 0x32, 0x01, 0xff, - 0xec, 0xec, 0x14, 0x00, 0xf2, 0x52, 0x15, 0x40, 0xe1, 0xab, 0x14, 0x80, - 0x04, 0xf9, 0xba, 0x18, 0x40, 0xe9, 0xa4, 0x14, 0x40, 0xe1, 0xda, 0x14, - 0x80, 0x58, 0xe5, 0xd3, 0x14, 0x00, 0xe8, 0xa6, 0x15, 0x80, 0x34, 0xe9, - 0xd5, 0x14, 0x80, 0x2b, 0xef, 0xd7, 0x14, 0x80, 0x22, 0xb7, 0x01, 0xff, - 0xe1, 0xe6, 0x14, 0x80, 0x16, 0xe5, 0xdc, 0x14, 0x00, 0xe9, 0xde, 0x14, - 0x80, 0x09, 0xef, 0xe2, 0x14, 0xc0, 0x00, 0xef, 0xe4, 0x14, 0x40, 0xe9, - 0xe0, 0x14, 0x40, 0xe1, 0xe8, 0x14, 0x40, 0xef, 0xd8, 0x14, 0x40, 0xe9, - 0xd6, 0x14, 0x40, 0xe1, 0xa4, 0x15, 0x80, 0x12, 0xe9, 0xa0, 0x15, 0x80, - 0x09, 0xef, 0xa2, 0x15, 0xc0, 0x00, 0xef, 0xa3, 0x15, 0x40, 0xe9, 0xa1, - 0x15, 0x40, 0xe1, 0xa5, 0x15, 0x40, 0xe1, 0xdb, 0x14, 0x80, 0x04, 0xf9, - 0xbd, 0x18, 0x40, 0xe9, 0xd4, 0x14, 0x40, 0xe1, 0x72, 0x14, 0x80, 0x3e, - 0xe5, 0x6b, 0x14, 0x00, 0xe9, 0x6d, 0x14, 0x80, 0x31, 0xef, 0x6f, 0x14, - 0x80, 0x28, 0xf7, 0x84, 0x14, 0xc0, 0x00, 0xe1, 0x7e, 0x14, 0x80, 0x16, - 0xe5, 0x74, 0x14, 0x00, 0xe9, 0x76, 0x14, 0x80, 0x09, 0xef, 0x7a, 0x14, - 0xc0, 0x00, 0xef, 0x7c, 0x14, 0x40, 0xe9, 0x78, 0x14, 0x40, 0xe1, 0x80, - 0x14, 0x00, 0xf9, 0xb9, 0x18, 0x40, 0xef, 0x70, 0x14, 0x40, 0xe9, 0x6e, - 0x14, 0x40, 0xe1, 0x73, 0x14, 0x80, 0x04, 0xf9, 0xb8, 0x18, 0x40, 0xe9, - 0x6c, 0x14, 0x40, 0xe9, 0x04, 0x14, 0x00, 0xee, 0x2c, 0x14, 0x40, 0xeb, - 0x7d, 0x15, 0x00, 0x45, 0x1b, 0x62, 0x00, 0x14, 0x40, 0xe1, 0x59, 0x15, - 0x80, 0x8a, 0x01, 0xe5, 0x53, 0x15, 0x00, 0xe9, 0x55, 0x15, 0x80, 0x15, - 0xef, 0x57, 0x15, 0x80, 0x0c, 0x48, 0x16, 0x16, 0x6e, 0x16, 0x00, 0x43, - 0xe7, 0x18, 0x5b, 0x15, 0x40, 0xef, 0x58, 0x15, 0x40, 0xe9, 0x56, 0x15, - 0x00, 0x04, 0x3b, 0x06, 0x01, 0xff, 0x45, 0x29, 0x38, 0x1f, 0x14, 0x00, - 0x50, 0xaa, 0x5f, 0x21, 0x14, 0x00, 0x02, 0x3b, 0x01, 0x3d, 0x45, 0x8d, - 0x22, 0x20, 0x14, 0x00, 0x4a, 0xb1, 0x44, 0x27, 0x14, 0x00, 0x44, 0xb7, - 0x27, 0x29, 0x14, 0x00, 0xb2, 0x14, 0xb3, 0x06, 0x4d, 0x88, 0x87, 0x22, - 0x14, 0x40, 0x56, 0x75, 0x33, 0x28, 0x14, 0x00, 0x49, 0x79, 0xb9, 0xde, - 0x18, 0x40, 0x49, 0x76, 0xb3, 0xdf, 0x18, 0x00, 0xa9, 0x01, 0xff, 0x4d, - 0xec, 0x70, 0x23, 0x14, 0x00, 0x42, 0x1d, 0x01, 0x24, 0x14, 0x40, 0x05, - 0x3d, 0x01, 0x06, 0x47, 0x22, 0x38, 0x2a, 0x14, 0x40, 0x45, 0x29, 0x38, - 0x25, 0x14, 0x00, 0x56, 0x77, 0x36, 0x26, 0x14, 0x40, 0xe1, 0x5a, 0x15, - 0xc0, 0x00, 0xe9, 0x54, 0x15, 0x40, 0x48, 0x22, 0xc1, 0xdc, 0x18, 0x00, - 0xee, 0x2b, 0x14, 0x40, 0xe1, 0x90, 0x14, 0x80, 0x3e, 0xe5, 0x89, 0x14, - 0x00, 0x47, 0xba, 0xce, 0x6d, 0x16, 0x00, 0xe9, 0x8b, 0x14, 0x80, 0x2b, - 0xef, 0x8d, 0x14, 0x80, 0x22, 0xb7, 0x01, 0xff, 0xe1, 0x9c, 0x14, 0x80, - 0x16, 0xe5, 0x92, 0x14, 0x00, 0xe9, 0x94, 0x14, 0x80, 0x09, 0xef, 0x98, - 0x14, 0xc0, 0x00, 0xef, 0x9a, 0x14, 0x40, 0xe9, 0x96, 0x14, 0x40, 0xe1, - 0x9e, 0x14, 0x40, 0xef, 0x8e, 0x14, 0x40, 0xe9, 0x8c, 0x14, 0x40, 0xe1, - 0x91, 0x14, 0x80, 0xd6, 0x06, 0x06, 0x9b, 0x68, 0x01, 0xff, 0x02, 0x1e, - 0x14, 0xb3, 0x06, 0xa4, 0xe0, 0x05, 0x42, 0x27, 0x01, 0x08, 0x14, 0x00, - 0xa7, 0x93, 0x05, 0xe8, 0x4b, 0x14, 0x80, 0xe7, 0x04, 0xe9, 0x09, 0x14, - 0x80, 0xdb, 0x04, 0xaa, 0x9e, 0x04, 0xab, 0xe2, 0x03, 0xac, 0xab, 0x03, - 0xad, 0x8f, 0x03, 0xae, 0xef, 0x02, 0xf0, 0xee, 0x15, 0x80, 0xd0, 0x02, - 0xb2, 0xb4, 0x02, 0xb3, 0xfa, 0x01, 0xb4, 0x54, 0xb7, 0x39, 0xb9, 0x1e, - 0xfa, 0x46, 0x16, 0xc0, 0x00, 0xe1, 0x45, 0x16, 0x00, 0xe5, 0x42, 0x16, - 0x80, 0x0c, 0xe9, 0x44, 0x16, 0x00, 0xef, 0x41, 0x16, 0x00, 0xf5, 0x40, - 0x16, 0x40, 0xe5, 0x43, 0x16, 0x40, 0xe1, 0x13, 0x16, 0x00, 0xe5, 0x10, - 0x16, 0x80, 0x0c, 0xe9, 0x12, 0x16, 0x00, 0xef, 0x0f, 0x16, 0x00, 0xf5, - 0x0e, 0x16, 0x40, 0xe5, 0x11, 0x16, 0x40, 0xe1, 0xd5, 0x15, 0x00, 0xe5, - 0xd2, 0x15, 0x80, 0x0c, 0xe9, 0xd4, 0x15, 0x00, 0xef, 0xd1, 0x15, 0x00, - 0xf5, 0xd0, 0x15, 0x40, 0xe5, 0xd3, 0x15, 0x40, 0xa8, 0x88, 0x01, 0xac, - 0x52, 0xb3, 0x37, 0xb4, 0x01, 0xff, 0xe1, 0xe7, 0x15, 0x00, 0xe5, 0xe4, - 0x15, 0x80, 0x27, 0xe9, 0xe6, 0x15, 0x00, 0xef, 0xe3, 0x15, 0x00, 0xb3, - 0x04, 0xf5, 0xe2, 0x15, 0x40, 0xe1, 0x6c, 0x16, 0x00, 0xe5, 0x69, 0x16, - 0x80, 0x0c, 0xe9, 0x6b, 0x16, 0x00, 0xef, 0x68, 0x16, 0x00, 0xf5, 0x67, - 0x16, 0x40, 0xe5, 0x6a, 0x16, 0x40, 0xe5, 0xe5, 0x15, 0x40, 0xe1, 0x60, - 0x16, 0x00, 0xe5, 0x5d, 0x16, 0x80, 0x0c, 0xe9, 0x5f, 0x16, 0x00, 0xef, - 0x5c, 0x16, 0x00, 0xf5, 0x5b, 0x16, 0x40, 0xe5, 0x5e, 0x16, 0x40, 0xe1, - 0x3f, 0x16, 0x00, 0xe5, 0x3c, 0x16, 0x80, 0x27, 0xa8, 0x0c, 0xe9, 0x3e, - 0x16, 0x00, 0xef, 0x3b, 0x16, 0x00, 0xf5, 0x3a, 0x16, 0x40, 0xe1, 0x39, - 0x16, 0x00, 0xe5, 0x36, 0x16, 0x80, 0x0c, 0xe9, 0x38, 0x16, 0x00, 0xef, - 0x35, 0x16, 0x00, 0xf5, 0x34, 0x16, 0x40, 0xe5, 0x37, 0x16, 0x40, 0xe5, - 0x3d, 0x16, 0x40, 0xe1, 0xe1, 0x15, 0x00, 0xe5, 0xde, 0x15, 0x80, 0x0c, - 0xe9, 0xe0, 0x15, 0x00, 0xef, 0xdd, 0x15, 0x00, 0xf5, 0xdc, 0x15, 0x40, - 0xe5, 0xdf, 0x15, 0x40, 0xe1, 0x53, 0x16, 0x00, 0xe5, 0x50, 0x16, 0x80, - 0x2a, 0xe8, 0x5a, 0x16, 0x80, 0x0c, 0xe9, 0x52, 0x16, 0x00, 0xef, 0x4f, - 0x16, 0x00, 0xf5, 0x4e, 0x16, 0x40, 0xe1, 0x59, 0x16, 0x00, 0xe5, 0x56, - 0x16, 0x80, 0x0c, 0xe9, 0x58, 0x16, 0x00, 0xef, 0x55, 0x16, 0x00, 0xf5, - 0x54, 0x16, 0x40, 0xe5, 0x57, 0x16, 0x40, 0xe5, 0x51, 0x16, 0x40, 0xe1, - 0xcf, 0x15, 0x00, 0xe5, 0xcc, 0x15, 0x80, 0x0c, 0xe9, 0xce, 0x15, 0x00, - 0xef, 0xcb, 0x15, 0x00, 0xf5, 0xca, 0x15, 0x40, 0xe5, 0xcd, 0x15, 0x40, - 0xe1, 0xed, 0x15, 0x00, 0xe5, 0xea, 0x15, 0x80, 0x0c, 0xe9, 0xec, 0x15, - 0x00, 0xef, 0xe9, 0x15, 0x00, 0xf5, 0xe8, 0x15, 0x40, 0xe5, 0xeb, 0x15, - 0x40, 0xe1, 0x07, 0x16, 0x00, 0xe5, 0x04, 0x16, 0x80, 0x10, 0xe7, 0xd1, - 0x14, 0x00, 0xe9, 0x06, 0x16, 0x00, 0xef, 0x03, 0x16, 0x00, 0xf5, 0x02, - 0x16, 0x40, 0xe5, 0x05, 0x16, 0x40, 0xe1, 0x0d, 0x16, 0x00, 0xe5, 0x0a, - 0x16, 0x80, 0x0c, 0xe9, 0x0c, 0x16, 0x00, 0xef, 0x09, 0x16, 0x00, 0xf5, - 0x08, 0x16, 0x40, 0xe5, 0x0b, 0x16, 0x40, 0xe1, 0x27, 0x16, 0x00, 0xe5, - 0x24, 0x16, 0x80, 0x27, 0xa8, 0x0c, 0xe9, 0x26, 0x16, 0x00, 0xef, 0x23, - 0x16, 0x00, 0xf5, 0x22, 0x16, 0x40, 0xe1, 0x33, 0x16, 0x00, 0xe5, 0x30, - 0x16, 0x80, 0x0c, 0xe9, 0x32, 0x16, 0x00, 0xef, 0x2f, 0x16, 0x00, 0xf5, - 0x2e, 0x16, 0x40, 0xe5, 0x31, 0x16, 0x40, 0xe5, 0x25, 0x16, 0x40, 0xa8, - 0x1e, 0xeb, 0x01, 0x16, 0xc0, 0x00, 0xe1, 0x00, 0x16, 0x00, 0xe5, 0xfd, - 0x15, 0x80, 0x0c, 0xe9, 0xff, 0x15, 0x00, 0xef, 0xfc, 0x15, 0x00, 0xf5, - 0xfb, 0x15, 0x40, 0xe5, 0xfe, 0x15, 0x40, 0xe1, 0xfa, 0x15, 0x00, 0xe5, - 0xf7, 0x15, 0x80, 0x0c, 0xe9, 0xf9, 0x15, 0x00, 0xef, 0xf6, 0x15, 0x00, - 0xf5, 0xf5, 0x15, 0x40, 0xe5, 0xf8, 0x15, 0x40, 0xe1, 0x1b, 0x16, 0x00, - 0xe5, 0x17, 0x16, 0x80, 0x2d, 0xe9, 0x19, 0x16, 0x00, 0xaa, 0x0e, 0xef, - 0x16, 0x16, 0x00, 0xf5, 0x14, 0x16, 0x00, 0x42, 0xa9, 0x01, 0xf2, 0x18, - 0x40, 0xe1, 0x21, 0x16, 0x00, 0xe5, 0x1e, 0x16, 0x80, 0x0c, 0xe9, 0x20, - 0x16, 0x00, 0xef, 0x1d, 0x16, 0x00, 0xf5, 0x1c, 0x16, 0x40, 0xe5, 0x1f, - 0x16, 0x40, 0xe5, 0x18, 0x16, 0x40, 0x48, 0x22, 0xc6, 0x47, 0x16, 0x40, - 0x42, 0x27, 0x01, 0x36, 0x14, 0x00, 0xe9, 0x37, 0x14, 0x00, 0xb7, 0x01, - 0xff, 0xe1, 0xdb, 0x15, 0x00, 0xe5, 0xd8, 0x15, 0x80, 0x0c, 0xe9, 0xda, - 0x15, 0x00, 0xef, 0xd7, 0x15, 0x00, 0xf5, 0xd6, 0x15, 0x40, 0xe5, 0xd9, - 0x15, 0x40, 0xe1, 0xf4, 0x15, 0x80, 0x3b, 0xe5, 0xf1, 0x15, 0x80, 0x32, - 0xa8, 0x17, 0xe9, 0xf3, 0x15, 0x00, 0xef, 0xf0, 0x15, 0x00, 0xf5, 0xef, - 0x15, 0x00, 0xb7, 0x01, 0xff, 0xe1, 0xf0, 0x18, 0x00, 0xf5, 0xed, 0x18, - 0x40, 0xe1, 0xc9, 0x15, 0x00, 0xe5, 0xc6, 0x15, 0x80, 0x0c, 0xe9, 0xc8, - 0x15, 0x00, 0xef, 0xc5, 0x15, 0x00, 0xf5, 0xc4, 0x15, 0x40, 0xe5, 0xc7, - 0x15, 0x40, 0xe5, 0xf2, 0x15, 0x40, 0xe1, 0xef, 0x18, 0x40, 0xa5, 0x3b, - 0xe9, 0x54, 0x14, 0x00, 0xac, 0x1c, 0xba, 0x01, 0xff, 0xe1, 0x4d, 0x16, - 0x00, 0xe5, 0x4a, 0x16, 0x80, 0x0c, 0xe9, 0x4c, 0x16, 0x00, 0xef, 0x49, - 0x16, 0x00, 0xf5, 0x48, 0x16, 0x40, 0xe5, 0x4b, 0x16, 0x40, 0xe1, 0x2d, - 0x16, 0x00, 0xe5, 0x2a, 0x16, 0x80, 0x0c, 0xe9, 0x2c, 0x16, 0x00, 0xef, - 0x29, 0x16, 0x00, 0xf5, 0x28, 0x16, 0x40, 0xe5, 0x2b, 0x16, 0x40, 0xe5, - 0x53, 0x14, 0x00, 0xae, 0x01, 0xff, 0x45, 0xa5, 0xe2, 0xee, 0x18, 0x00, - 0x45, 0x23, 0x05, 0xf5, 0x18, 0x40, 0xe1, 0x66, 0x16, 0x00, 0xe5, 0x63, - 0x16, 0x80, 0x0c, 0xe9, 0x65, 0x16, 0x00, 0xef, 0x62, 0x16, 0x00, 0xf5, - 0x61, 0x16, 0x40, 0xe5, 0x64, 0x16, 0x40, 0xe9, 0x8a, 0x14, 0x40, 0x0b, - 0x63, 0x99, 0x58, 0x4b, 0x1b, 0x9b, 0x3f, 0x15, 0x00, 0x09, 0xce, 0xb8, - 0x01, 0xff, 0xe1, 0xb3, 0x15, 0x00, 0xe5, 0xb0, 0x15, 0x00, 0xe9, 0xb1, - 0x15, 0x00, 0xab, 0x2f, 0xae, 0x1d, 0xef, 0xb2, 0x15, 0x00, 0xf3, 0x08, - 0x15, 0x00, 0xf7, 0x7f, 0x16, 0xc0, 0x00, 0xe1, 0xb7, 0x15, 0x00, 0xe5, - 0xb4, 0x15, 0x00, 0xe9, 0xb5, 0x15, 0x00, 0xef, 0xb6, 0x15, 0x40, 0xe1, - 0xbb, 0x15, 0x00, 0xe5, 0xb8, 0x15, 0x00, 0xe9, 0xb9, 0x15, 0x00, 0xef, - 0xba, 0x15, 0x40, 0xe1, 0xbf, 0x15, 0x00, 0xe5, 0xbc, 0x15, 0x00, 0xe9, - 0xbd, 0x15, 0x00, 0xef, 0xbe, 0x15, 0x40, 0xec, 0xf3, 0x18, 0x00, 0xf2, - 0xf4, 0x18, 0x40, 0xe1, 0x0b, 0x14, 0x80, 0x1f, 0xe9, 0x1c, 0x14, 0x80, - 0x14, 0xee, 0x2e, 0x14, 0x00, 0x0a, 0x81, 0xaf, 0x04, 0xf9, 0xb1, 0x18, - 0x40, 0xed, 0xbe, 0x14, 0x00, 0xf3, 0x06, 0x15, 0x40, 0x47, 0x78, 0xd4, - 0xaf, 0x15, 0x40, 0xe9, 0x02, 0x14, 0x00, 0xf9, 0xb2, 0x18, 0x40, 0x43, - 0xdc, 0x01, 0xf7, 0xf4, 0x81, 0x06, 0x44, 0x45, 0x2f, 0xd5, 0xf3, 0x41, - 0x4b, 0x14, 0x96, 0xf8, 0xf4, 0x41, 0x45, 0xad, 0x7e, 0xc5, 0xf4, 0x01, - 0x49, 0xc5, 0xb8, 0x19, 0xf9, 0x41, 0x45, 0xe3, 0xe0, 0x06, 0x21, 0x00, - 0x45, 0x1b, 0xd8, 0x24, 0x26, 0x40, 0xa1, 0xe6, 0x55, 0xa5, 0xc2, 0x4f, - 0x09, 0xf1, 0xb6, 0xd6, 0x4a, 0xa9, 0xf8, 0x49, 0xac, 0x8c, 0x34, 0xaf, - 0xdf, 0x22, 0xb2, 0xe9, 0x12, 0xb5, 0xc0, 0x0f, 0xb9, 0x01, 0xff, 0x4d, - 0x54, 0x87, 0xff, 0xfe, 0x00, 0x17, 0x38, 0x31, 0x01, 0xff, 0xa1, 0xba, - 0x0d, 0x02, 0x1e, 0x14, 0x80, 0x0d, 0xa4, 0xd9, 0x0b, 0xa5, 0xa0, 0x0b, - 0xa6, 0xf4, 0x09, 0xa7, 0x91, 0x09, 0xa9, 0xcc, 0x08, 0xab, 0xf4, 0x06, - 0xac, 0xbe, 0x06, 0xad, 0xc9, 0x05, 0x44, 0x1e, 0xee, 0x40, 0xd0, 0x01, - 0xaf, 0xfb, 0x04, 0xb0, 0xd4, 0x03, 0xb2, 0xc5, 0x03, 0xb3, 0xa3, 0x02, - 0xb4, 0x8b, 0x01, 0x02, 0xa6, 0x0a, 0x63, 0x4c, 0x1d, 0x95, 0x6a, 0xd0, - 0x01, 0xb9, 0x01, 0xff, 0x02, 0xa0, 0x19, 0x1e, 0xb0, 0x01, 0xff, 0xaf, - 0x06, 0x44, 0x06, 0x87, 0x50, 0xd0, 0x41, 0x46, 0x78, 0xda, 0x0a, 0xd0, - 0x81, 0x06, 0x44, 0x16, 0xef, 0x53, 0xd0, 0x41, 0x46, 0x26, 0xd5, 0x0b, - 0xd0, 0x41, 0x02, 0x92, 0x00, 0x28, 0x04, 0x58, 0x21, 0x01, 0xff, 0x51, - 0xe8, 0x56, 0xd4, 0xd0, 0x01, 0x55, 0x64, 0x39, 0xd6, 0xd0, 0x01, 0x5c, - 0x52, 0x18, 0xd5, 0xd0, 0x01, 0x03, 0x19, 0x01, 0x01, 0xff, 0x55, 0x8a, - 0x3a, 0xd7, 0xd0, 0x01, 0x48, 0x99, 0x33, 0xcd, 0xd0, 0x41, 0x43, 0x36, - 0x6f, 0x7d, 0xd0, 0x01, 0x44, 0xa9, 0x9d, 0x7c, 0xd0, 0x41, 0x04, 0xf6, - 0xee, 0x06, 0x43, 0xb7, 0x52, 0x19, 0xd0, 0x41, 0x80, 0x06, 0x4a, 0x23, - 0xa9, 0x21, 0xd0, 0x41, 0x45, 0x27, 0xd5, 0x06, 0xd0, 0x01, 0x4b, 0x79, - 0x7d, 0x05, 0xd0, 0x01, 0x43, 0x1c, 0x53, 0x58, 0xd0, 0x41, 0xa5, 0x80, - 0x01, 0xa8, 0x52, 0x46, 0xee, 0xd9, 0x27, 0xd0, 0x01, 0xb2, 0x01, 0xff, - 0xa9, 0x37, 0x05, 0xaa, 0xb2, 0x01, 0xff, 0x47, 0x34, 0xd0, 0x6d, 0xd0, - 0x01, 0x02, 0x92, 0x00, 0x14, 0xb0, 0x06, 0x47, 0x44, 0xd3, 0x70, 0xd0, - 0x41, 0x4a, 0x05, 0x9f, 0x6e, 0xd0, 0x01, 0x48, 0x3a, 0xc8, 0x6b, 0xd0, - 0x41, 0xa1, 0x06, 0x43, 0x1c, 0x53, 0x63, 0xd0, 0x41, 0x43, 0x48, 0x1c, - 0x43, 0xd0, 0x01, 0x47, 0x26, 0xa9, 0x36, 0xd0, 0x41, 0xe1, 0x30, 0xd0, - 0x01, 0x46, 0x34, 0xd9, 0x96, 0xd0, 0x01, 0x43, 0x90, 0x04, 0x87, 0xd0, - 0x41, 0xa5, 0x06, 0x43, 0xbc, 0x05, 0x14, 0xd0, 0x41, 0x42, 0x6c, 0x00, - 0x2d, 0xd0, 0x81, 0x06, 0x4d, 0x84, 0x86, 0x79, 0xd0, 0x41, 0x47, 0x5a, - 0xca, 0x78, 0xd0, 0x01, 0x08, 0xea, 0xc8, 0x01, 0xff, 0x42, 0x35, 0x03, - 0x76, 0xd0, 0x01, 0x42, 0xe1, 0x2e, 0x77, 0xd0, 0x41, 0x44, 0x5b, 0x59, - 0x0f, 0xd0, 0x01, 0x45, 0x60, 0x18, 0x31, 0xd0, 0x01, 0x46, 0xa2, 0xdd, - 0x88, 0xd0, 0x41, 0x47, 0x83, 0xcc, 0x1d, 0xd0, 0x01, 0x45, 0xd2, 0xe2, - 0x29, 0xd0, 0x81, 0x8b, 0x01, 0x08, 0x5a, 0xc4, 0x49, 0xb4, 0x2e, 0xb9, - 0x01, 0xff, 0xae, 0x0d, 0x43, 0x60, 0x06, 0x66, 0xd0, 0xc1, 0x00, 0x44, - 0xce, 0xda, 0x08, 0xd0, 0x41, 0x05, 0x15, 0xe1, 0x06, 0x44, 0x39, 0xd1, - 0x13, 0xd0, 0x41, 0x48, 0x25, 0xa9, 0x2a, 0xd0, 0x01, 0x4c, 0x49, 0x90, - 0x2b, 0xd0, 0x01, 0x43, 0x1c, 0x53, 0x65, 0xd0, 0x41, 0x45, 0x79, 0xe1, - 0x7e, 0xd0, 0x81, 0x0c, 0x44, 0x1d, 0x1f, 0xe8, 0xd0, 0x01, 0x4a, 0x97, - 0xad, 0x44, 0xd0, 0x41, 0x49, 0xea, 0xb1, 0x1f, 0xd0, 0x41, 0x46, 0x00, - 0xd7, 0xe2, 0xd0, 0x81, 0x1f, 0x47, 0x83, 0xd3, 0xde, 0xd0, 0xc1, 0x00, - 0x80, 0x01, 0xff, 0x47, 0x94, 0xcd, 0xdf, 0xd0, 0x01, 0xb4, 0x01, 0xff, - 0x49, 0x61, 0xb6, 0xe1, 0xd0, 0x01, 0x47, 0x8e, 0xd2, 0xe0, 0xd0, 0x41, - 0x80, 0x01, 0xff, 0x47, 0x94, 0xcd, 0xe3, 0xd0, 0x01, 0xb4, 0x01, 0xff, - 0x49, 0x61, 0xb6, 0xe5, 0xd0, 0x01, 0x47, 0x8e, 0xd2, 0xe4, 0xd0, 0x41, - 0x44, 0x50, 0x87, 0x69, 0xd0, 0x41, 0x46, 0xe2, 0xd6, 0x3c, 0xd0, 0x01, - 0x44, 0x39, 0xd1, 0x25, 0xd0, 0x41, 0x02, 0x17, 0x00, 0x70, 0xa5, 0x43, - 0x06, 0xbe, 0xd9, 0x33, 0x02, 0x2f, 0x03, 0x01, 0xff, 0x05, 0x3c, 0xc8, - 0x0d, 0xac, 0x01, 0xff, 0xe9, 0x00, 0xd0, 0x01, 0x42, 0x10, 0x00, 0x17, - 0xd0, 0x41, 0x47, 0x34, 0xd0, 0x6c, 0xd0, 0x01, 0xee, 0x39, 0xd0, 0x81, - 0x0c, 0x4b, 0x04, 0x9f, 0x6f, 0xd0, 0x01, 0x47, 0x44, 0xd3, 0x71, 0xd0, - 0x41, 0x44, 0x50, 0x87, 0x5a, 0xd0, 0x41, 0x48, 0x25, 0xa9, 0x26, 0xd0, - 0x01, 0x43, 0x1c, 0x53, 0x59, 0xd0, 0x41, 0x46, 0xa8, 0xda, 0x38, 0xd0, - 0x81, 0x1e, 0x49, 0x11, 0x9f, 0x02, 0xd0, 0x01, 0x03, 0xb9, 0x2c, 0x01, - 0xff, 0x42, 0x6c, 0x00, 0x41, 0xd0, 0x01, 0xb4, 0x01, 0xff, 0xe9, 0x49, - 0xd0, 0x01, 0x49, 0x99, 0xba, 0x4b, 0xd0, 0x41, 0x44, 0x50, 0x87, 0x4d, - 0xd0, 0x41, 0x02, 0x6d, 0x00, 0x06, 0x45, 0x35, 0xe4, 0x1e, 0xd0, 0x41, - 0x07, 0xe2, 0xcb, 0x16, 0x46, 0xcc, 0xda, 0x09, 0xd0, 0xc1, 0x00, 0x80, - 0x01, 0xff, 0x48, 0x25, 0xa9, 0x3e, 0xd0, 0x01, 0x43, 0x1c, 0x53, 0x5e, - 0xd0, 0x41, 0x48, 0x25, 0xa9, 0x3d, 0xd0, 0x01, 0x43, 0x1c, 0x53, 0x5f, - 0xd0, 0x41, 0x06, 0xc0, 0xda, 0x35, 0x45, 0x5c, 0xe5, 0x5b, 0xd0, 0x01, - 0x04, 0xe2, 0xef, 0x11, 0x09, 0x2b, 0xbf, 0x01, 0xff, 0x48, 0x25, 0xa9, - 0x2c, 0xd0, 0x01, 0x43, 0x1c, 0x53, 0x75, 0xd0, 0x41, 0x80, 0x06, 0x4a, - 0x23, 0xa9, 0x20, 0xd0, 0x41, 0x45, 0x27, 0xd5, 0x04, 0xd0, 0x01, 0x4b, - 0x79, 0x7d, 0x03, 0xd0, 0x01, 0x43, 0x1c, 0x53, 0x48, 0xd0, 0x41, 0x48, - 0x25, 0xa9, 0x15, 0xd0, 0x01, 0x43, 0x1c, 0x53, 0x47, 0xd0, 0x41, 0x08, - 0x12, 0xc1, 0x06, 0x4a, 0x69, 0xa9, 0x57, 0xd0, 0x41, 0x05, 0x24, 0xe1, - 0x58, 0x4e, 0x42, 0x75, 0xa4, 0xd0, 0x01, 0x4d, 0x5e, 0x83, 0xaa, 0xd0, - 0x01, 0xb0, 0x29, 0xb4, 0x06, 0x4b, 0x7f, 0xa2, 0xb1, 0xd0, 0x41, 0x08, - 0x55, 0x7b, 0x11, 0x02, 0x0d, 0x00, 0x01, 0xff, 0x46, 0x19, 0xa1, 0xa7, - 0xd0, 0x01, 0x49, 0x59, 0x7b, 0xa6, 0xd0, 0x41, 0x45, 0x4b, 0x75, 0xa8, - 0xd0, 0x01, 0x4d, 0x5e, 0x83, 0xa9, 0xd0, 0x41, 0x07, 0xcb, 0xcf, 0x11, - 0x04, 0x1e, 0x92, 0x01, 0xff, 0x47, 0x49, 0x75, 0xa2, 0xd0, 0x01, 0x4b, - 0x7f, 0xa2, 0xb2, 0xd0, 0x41, 0x45, 0x4b, 0x75, 0xab, 0xd0, 0x01, 0x4e, - 0x54, 0x7b, 0xb3, 0xd0, 0x41, 0x4e, 0x42, 0x75, 0xa5, 0xd0, 0x01, 0x4c, - 0x1d, 0x92, 0xa3, 0xd0, 0x41, 0xa5, 0x06, 0x46, 0x35, 0xd0, 0x5d, 0xd0, - 0x41, 0x05, 0x58, 0xe4, 0x06, 0x43, 0x54, 0xc4, 0x2e, 0xd0, 0x41, 0x4b, - 0x42, 0x99, 0x8b, 0xd0, 0x01, 0x4c, 0xe9, 0x8c, 0x8a, 0xd0, 0x01, 0x4f, - 0xd0, 0x6c, 0x8e, 0xd0, 0x01, 0xb4, 0x01, 0xff, 0x4f, 0x4a, 0x6b, 0x8d, - 0xd0, 0x01, 0x4c, 0xdd, 0x92, 0x8c, 0xd0, 0x41, 0x02, 0x8a, 0x00, 0xba, - 0x01, 0x06, 0x68, 0xd8, 0x70, 0x45, 0x24, 0x95, 0x24, 0xd0, 0x81, 0x5a, - 0xaf, 0x3f, 0xb2, 0x06, 0x46, 0xbe, 0xcf, 0x61, 0xd0, 0x41, 0x04, 0xea, - 0xeb, 0x06, 0x46, 0x50, 0xd8, 0x0c, 0xd0, 0x41, 0xa1, 0x0f, 0xaf, 0x01, - 0xff, 0x48, 0x9a, 0xba, 0x4c, 0xd0, 0x01, 0x48, 0x32, 0xca, 0x54, 0xd0, - 0x41, 0x80, 0x06, 0x42, 0x12, 0x00, 0x32, 0xd0, 0x41, 0xa1, 0x06, 0x43, - 0x1c, 0x53, 0x83, 0xd0, 0x41, 0x43, 0x48, 0x1c, 0x82, 0xd0, 0x01, 0x47, - 0x26, 0xa9, 0x81, 0xd0, 0x41, 0x46, 0x92, 0xdb, 0x3a, 0xd0, 0x81, 0x0c, - 0x45, 0x75, 0x60, 0x89, 0xd0, 0x01, 0x46, 0x9c, 0xba, 0x4a, 0xd0, 0x41, - 0x45, 0xe8, 0xcb, 0x42, 0xd0, 0x41, 0x80, 0x01, 0xff, 0x43, 0x36, 0x6f, - 0x7f, 0xd0, 0x01, 0x44, 0xa9, 0x9d, 0xf4, 0xd0, 0x41, 0x80, 0x27, 0x42, - 0x12, 0x00, 0x10, 0xd0, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x48, 0x25, 0xa9, - 0x1c, 0xd0, 0x01, 0x04, 0x32, 0xee, 0x01, 0xff, 0x43, 0x36, 0x6f, 0x4e, - 0xd0, 0x01, 0x44, 0xa9, 0x9d, 0xf2, 0xd0, 0x01, 0x44, 0xe6, 0xed, 0xf0, - 0xd0, 0x41, 0x48, 0x25, 0xa9, 0x1b, 0xd0, 0x01, 0x04, 0x32, 0xee, 0x01, - 0xff, 0x43, 0x36, 0x6f, 0x4f, 0xd0, 0x01, 0x44, 0xa9, 0x9d, 0xf3, 0xd0, - 0x01, 0x44, 0xe6, 0xed, 0xf1, 0xd0, 0x41, 0x03, 0x18, 0x12, 0x06, 0x45, - 0xf9, 0xe3, 0x07, 0xd0, 0x41, 0x49, 0xa7, 0xb2, 0x37, 0xd0, 0x01, 0x43, - 0x0c, 0x07, 0x7a, 0xd0, 0x41, 0x46, 0x8a, 0xd7, 0x3f, 0xd0, 0x01, 0x02, - 0x7d, 0x02, 0x1a, 0xb3, 0x01, 0xff, 0x55, 0x3e, 0x38, 0xac, 0xd0, 0x01, - 0x03, 0xb6, 0x00, 0x01, 0xff, 0x48, 0x25, 0xa9, 0x1a, 0xd0, 0x01, 0x43, - 0x1c, 0x53, 0x46, 0xd0, 0x41, 0x47, 0x86, 0xcd, 0x98, 0xd0, 0x01, 0xa6, - 0x01, 0xff, 0x44, 0x55, 0x6b, 0xb7, 0xd0, 0x01, 0x04, 0xc3, 0x29, 0x01, - 0xff, 0xe1, 0x35, 0xd0, 0x01, 0x42, 0x10, 0x00, 0xb8, 0xd0, 0x41, 0x06, - 0x62, 0xd8, 0x50, 0x02, 0x0c, 0x00, 0x06, 0x4b, 0x17, 0xa0, 0x45, 0xd0, - 0x41, 0x02, 0xb7, 0x13, 0x11, 0x0a, 0x95, 0xaf, 0x01, 0xff, 0x46, 0x5b, - 0xca, 0xb4, 0xd0, 0x01, 0x47, 0x8d, 0xcd, 0xb5, 0xd0, 0x41, 0x02, 0x92, - 0x00, 0x06, 0x49, 0x38, 0x7f, 0x72, 0xd0, 0x41, 0x48, 0x25, 0xa9, 0x16, - 0xd0, 0x01, 0x04, 0x32, 0xee, 0x11, 0x0e, 0x12, 0x68, 0x01, 0xff, 0x48, - 0xf4, 0xb3, 0x90, 0xd0, 0x01, 0x45, 0xee, 0xb1, 0x91, 0xd0, 0x41, 0x43, - 0x36, 0x6f, 0x8f, 0xd0, 0x01, 0x44, 0xa9, 0x9d, 0xf5, 0xd0, 0x41, 0x46, - 0x0e, 0xd8, 0xd8, 0xd0, 0x01, 0x46, 0x8d, 0x33, 0xd9, 0xd0, 0x41, 0x09, - 0xac, 0xb3, 0x92, 0x01, 0x5a, 0x90, 0x1f, 0xc5, 0xd0, 0x01, 0x06, 0xc6, - 0x3f, 0x01, 0xff, 0x48, 0x25, 0xa9, 0x34, 0xd0, 0x81, 0x7a, 0x0a, 0x07, - 0xa7, 0x45, 0x54, 0x0f, 0x41, 0xcc, 0xd0, 0x01, 0x56, 0x8b, 0x33, 0xcb, - 0xd0, 0x01, 0x0f, 0x74, 0x6e, 0x29, 0xae, 0x1b, 0x08, 0x96, 0x1f, 0x01, - 0xff, 0x07, 0x9e, 0x1f, 0x06, 0x4b, 0xdf, 0x98, 0xbe, 0xd0, 0x41, 0x46, - 0x3c, 0xdd, 0xc6, 0xd0, 0x01, 0x45, 0xa5, 0x1f, 0xc5, 0xd0, 0x41, 0x49, - 0xe2, 0xb3, 0xbc, 0xd0, 0x01, 0x45, 0xeb, 0xe2, 0xc7, 0xd0, 0x41, 0x48, - 0x92, 0xc2, 0xc3, 0xd0, 0x01, 0x4a, 0x99, 0xab, 0xc4, 0xd0, 0x41, 0x42, - 0x00, 0x00, 0xbd, 0xd0, 0x01, 0x42, 0x37, 0x01, 0xbf, 0xd0, 0x01, 0xae, - 0x0c, 0x42, 0x6c, 0x09, 0xba, 0xd0, 0x01, 0x42, 0x0f, 0x00, 0xc0, 0xd0, - 0x41, 0x43, 0xfc, 0x11, 0xbb, 0xd0, 0x01, 0x02, 0xc6, 0x03, 0x01, 0xff, - 0x43, 0x36, 0x6f, 0xc2, 0xd0, 0x01, 0x44, 0xa9, 0x9d, 0xc1, 0xd0, 0x41, - 0x4f, 0xc6, 0x67, 0xb9, 0xd0, 0x41, 0x48, 0x92, 0xc2, 0xb0, 0xd0, 0x01, - 0x4a, 0x99, 0xab, 0xaf, 0xd0, 0x01, 0x4b, 0x14, 0xa1, 0xae, 0xd0, 0x41, - 0x49, 0xaa, 0xb8, 0x64, 0xd0, 0x01, 0x46, 0x90, 0xda, 0x55, 0xd0, 0x01, - 0xae, 0x1c, 0x47, 0xd1, 0xd1, 0x68, 0xd0, 0x01, 0x06, 0x78, 0xdd, 0x06, - 0x4e, 0x76, 0x7d, 0x0e, 0xd0, 0x41, 0x4d, 0x34, 0x7f, 0x74, 0xd0, 0x01, - 0x4b, 0x04, 0x9f, 0x60, 0xd0, 0x41, 0x54, 0xbb, 0x3f, 0xb6, 0xd0, 0x01, - 0x47, 0x9b, 0xcd, 0x7b, 0xd0, 0x41, 0x45, 0x60, 0xe1, 0x01, 0xd0, 0x01, - 0xa9, 0x06, 0x42, 0x60, 0x46, 0x2f, 0xd0, 0x41, 0xa1, 0x6d, 0x05, 0x57, - 0x21, 0x3d, 0x4a, 0x47, 0xa8, 0xe7, 0xd0, 0x01, 0xa7, 0x0d, 0x43, 0x90, - 0x04, 0x86, 0xd0, 0xc1, 0x00, 0x49, 0x24, 0xa9, 0x80, 0xd0, 0x41, 0x45, - 0x35, 0xd9, 0x92, 0xd0, 0x81, 0x06, 0x48, 0x72, 0xc7, 0xe6, 0xd0, 0x41, - 0x0f, 0x11, 0x68, 0x01, 0xff, 0x09, 0xf4, 0xb3, 0x06, 0x45, 0xee, 0xb1, - 0x95, 0xd0, 0x41, 0x43, 0x36, 0x6f, 0x94, 0xd0, 0x01, 0x44, 0xa9, 0x9d, - 0x93, 0xd0, 0x41, 0x51, 0xe8, 0x56, 0xd0, 0xd0, 0x01, 0x55, 0x64, 0x39, - 0xd2, 0xd0, 0x01, 0x5c, 0x52, 0x18, 0xd1, 0xd0, 0x01, 0xb4, 0x01, 0xff, - 0x4c, 0x95, 0x33, 0xcf, 0xd0, 0x01, 0x02, 0x0d, 0x00, 0x01, 0xff, 0x55, - 0x8a, 0x3a, 0xd3, 0xd0, 0x01, 0x48, 0x99, 0x33, 0xce, 0xd0, 0x41, 0x44, - 0x89, 0xcd, 0x99, 0xd0, 0x01, 0x06, 0x18, 0xdd, 0x01, 0xff, 0x06, 0xe8, - 0xd6, 0x0c, 0x45, 0x27, 0xd5, 0xdc, 0xd0, 0x01, 0x47, 0x83, 0xd3, 0xdd, - 0xd0, 0x41, 0x45, 0xbe, 0xe2, 0xdb, 0xd0, 0x01, 0x44, 0x74, 0x93, 0xda, - 0xd0, 0x41, 0x04, 0xff, 0x63, 0x27, 0x07, 0x37, 0xd1, 0x17, 0x04, 0x02, - 0xef, 0x01, 0xff, 0x46, 0x72, 0xda, 0xc9, 0xd0, 0x01, 0x46, 0xf4, 0xdc, - 0xca, 0xd0, 0x01, 0x45, 0x85, 0xe9, 0xc8, 0xd0, 0x41, 0x48, 0x25, 0xa9, - 0x3b, 0xd0, 0x01, 0x43, 0x1c, 0x53, 0x67, 0xd0, 0x41, 0xe9, 0x56, 0xd0, - 0x01, 0x42, 0x10, 0x00, 0x18, 0xd0, 0x41, 0x05, 0x9a, 0xe3, 0xb3, 0x01, - 0xae, 0x99, 0x01, 0xb0, 0x40, 0xb2, 0x01, 0xff, 0x02, 0xb7, 0x13, 0x2f, - 0x06, 0x7e, 0xda, 0x01, 0xff, 0x42, 0x00, 0x00, 0xec, 0xd0, 0x01, 0x42, - 0x24, 0x02, 0xeb, 0xd0, 0x01, 0x42, 0x37, 0x01, 0xed, 0xd0, 0x01, 0x42, - 0x26, 0x03, 0xef, 0xd0, 0x01, 0x42, 0x6c, 0x09, 0xe9, 0xd0, 0x01, 0x43, - 0xe9, 0x2c, 0xea, 0xd0, 0x01, 0x42, 0x0f, 0x00, 0xee, 0xd0, 0x41, 0xee, - 0x97, 0xd0, 0x01, 0x49, 0x38, 0x7f, 0x73, 0xd0, 0x41, 0x05, 0x18, 0xe3, - 0x47, 0x42, 0xc3, 0x01, 0x85, 0xd0, 0x01, 0xaf, 0x01, 0xff, 0x06, 0xfc, - 0xd7, 0x2e, 0x06, 0x1e, 0xdd, 0x06, 0x45, 0x5a, 0x52, 0x23, 0xd0, 0x41, - 0x02, 0xc6, 0x03, 0x14, 0xf3, 0x11, 0xd0, 0xc1, 0x00, 0x80, 0x01, 0xff, - 0x45, 0x27, 0xd5, 0x12, 0xd0, 0x01, 0x43, 0x1c, 0x53, 0x51, 0xd0, 0x41, - 0x4d, 0x47, 0x87, 0x52, 0xd0, 0x01, 0x50, 0x43, 0x38, 0xad, 0xd0, 0x41, - 0x48, 0x25, 0xa9, 0x22, 0xd0, 0x01, 0x43, 0x1c, 0x53, 0x84, 0xd0, 0x41, - 0x4a, 0x7a, 0x7d, 0x0d, 0xd0, 0x01, 0x46, 0x5c, 0xde, 0x33, 0xd0, 0x41, - 0x4a, 0xc7, 0xa5, 0x28, 0xd0, 0x01, 0x06, 0x8a, 0xdd, 0x01, 0xff, 0x47, - 0xbd, 0xcf, 0x62, 0xd0, 0x01, 0x42, 0x6c, 0x00, 0x5c, 0xd0, 0x41, 0x03, - 0xe4, 0x12, 0x2f, 0x04, 0x34, 0xd9, 0x21, 0x02, 0x2a, 0x02, 0x11, 0x05, - 0xdd, 0xe6, 0x01, 0xff, 0x44, 0xde, 0xeb, 0x9a, 0xd0, 0x01, 0x45, 0x9f, - 0xe3, 0xa1, 0xd0, 0x41, 0x42, 0x2f, 0x03, 0x9e, 0xd0, 0x01, 0x44, 0x19, - 0x01, 0x9d, 0xd0, 0x41, 0xe9, 0x9f, 0xd0, 0x01, 0x45, 0x83, 0xe6, 0xa0, - 0xd0, 0x41, 0xe9, 0x9c, 0xd0, 0x01, 0x45, 0x83, 0xe6, 0x9b, 0xd0, 0x41, - 0x04, 0x17, 0x7b, 0x97, 0x03, 0x44, 0x17, 0x09, 0xa3, 0xfa, 0x01, 0xe7, - 0x1b, 0xf4, 0x81, 0xd2, 0x01, 0x04, 0x02, 0xed, 0x57, 0x53, 0xe0, 0x48, - 0xd7, 0xf3, 0x01, 0x02, 0x0f, 0x07, 0x2d, 0x45, 0x64, 0xe7, 0x2f, 0xf3, - 0x01, 0xf3, 0x8c, 0xf6, 0x81, 0x0d, 0x44, 0xc3, 0x05, 0xc8, 0xf9, 0xc1, - 0x00, 0x43, 0xf0, 0xf0, 0x8b, 0xf9, 0x41, 0x45, 0x29, 0x03, 0x8f, 0xf6, - 0x01, 0xb4, 0x01, 0xff, 0x4e, 0xeb, 0x33, 0x64, 0xf4, 0x01, 0x4f, 0x53, - 0x71, 0x65, 0xf4, 0x41, 0x42, 0xc2, 0x05, 0x22, 0x20, 0x80, 0x13, 0x44, - 0xa8, 0x2c, 0x6b, 0xf5, 0x81, 0x06, 0x44, 0x46, 0xef, 0xce, 0x25, 0x40, - 0x51, 0x2d, 0x56, 0x6c, 0xf5, 0x41, 0x49, 0xdb, 0x1c, 0x19, 0x22, 0x40, - 0x07, 0xc1, 0x05, 0x0d, 0x0b, 0xd1, 0x75, 0x01, 0xff, 0xe9, 0x52, 0x17, - 0x00, 0xf5, 0x53, 0x17, 0x40, 0xe1, 0x40, 0x17, 0x00, 0x42, 0x16, 0x00, - 0x4a, 0x17, 0x00, 0x42, 0xa1, 0x10, 0x47, 0x17, 0x00, 0x42, 0x24, 0x02, - 0x44, 0x17, 0x00, 0x42, 0x22, 0x00, 0x51, 0x17, 0x00, 0xe9, 0x41, 0x17, - 0x00, 0x42, 0x1b, 0x02, 0x43, 0x17, 0x00, 0x42, 0x74, 0x00, 0x4e, 0x17, - 0x00, 0x42, 0x6c, 0x00, 0x4b, 0x17, 0x00, 0xae, 0x28, 0x42, 0x6c, 0x09, - 0x49, 0x17, 0x00, 0x42, 0x71, 0x00, 0x4d, 0x17, 0x00, 0x42, 0x15, 0x06, - 0x50, 0x17, 0x00, 0x42, 0x12, 0x00, 0x46, 0x17, 0x00, 0xf5, 0x42, 0x17, - 0x00, 0x42, 0xa9, 0x01, 0x4f, 0x17, 0x00, 0x42, 0x34, 0x22, 0x4c, 0x17, - 0x40, 0xe1, 0x48, 0x17, 0x00, 0x42, 0x24, 0x02, 0x45, 0x17, 0x40, 0x06, - 0x27, 0x82, 0x01, 0xff, 0x4e, 0xdc, 0x75, 0x1f, 0x1a, 0x00, 0x07, 0xc1, - 0x05, 0x21, 0x47, 0xa0, 0xd1, 0x1e, 0x1a, 0x00, 0x0b, 0xd1, 0x75, 0x01, - 0xff, 0x42, 0x44, 0x0f, 0x1b, 0x1a, 0x00, 0xe5, 0x19, 0x1a, 0x00, 0xe9, - 0x17, 0x1a, 0x00, 0xef, 0x1a, 0x1a, 0x00, 0xf5, 0x18, 0x1a, 0x40, 0xe1, - 0x15, 0x1a, 0x00, 0x42, 0x16, 0x00, 0x05, 0x1a, 0x00, 0x42, 0x37, 0x00, - 0x0c, 0x1a, 0x00, 0x42, 0xa1, 0x10, 0x09, 0x1a, 0x00, 0x42, 0x24, 0x02, - 0x01, 0x1a, 0x00, 0x42, 0x22, 0x00, 0x16, 0x1a, 0x00, 0x42, 0xbd, 0x26, - 0x0d, 0x1a, 0x00, 0x42, 0x1b, 0x02, 0x00, 0x1a, 0x00, 0x42, 0x74, 0x00, - 0x12, 0x1a, 0x00, 0xad, 0x49, 0xae, 0x24, 0x42, 0x6c, 0x09, 0x04, 0x1a, - 0x00, 0x42, 0x71, 0x00, 0x11, 0x1a, 0x00, 0x42, 0x15, 0x06, 0x14, 0x1a, - 0x00, 0x42, 0x12, 0x00, 0x08, 0x1a, 0x00, 0x42, 0xa6, 0x0a, 0x13, 0x1a, - 0x00, 0x42, 0x34, 0x22, 0x10, 0x1a, 0x40, 0xe1, 0x0a, 0x1a, 0x00, 0xa7, - 0x13, 0x42, 0x71, 0x00, 0x0b, 0x1a, 0x00, 0xb9, 0x01, 0xff, 0xe1, 0x0e, - 0x1a, 0x00, 0x42, 0x37, 0x00, 0x0f, 0x1a, 0x40, 0xe1, 0x02, 0x1a, 0x00, - 0x42, 0x1b, 0x02, 0x03, 0x1a, 0x40, 0xe1, 0x06, 0x1a, 0x00, 0x42, 0x6c, - 0x09, 0x07, 0x1a, 0x40, 0x44, 0x0e, 0x51, 0xcb, 0xf9, 0x01, 0xf3, 0xe7, - 0xfa, 0x41, 0xa1, 0x6a, 0xa5, 0x50, 0xa9, 0x2b, 0xaf, 0x01, 0xff, 0x45, - 0xfb, 0xe1, 0x66, 0xf9, 0x01, 0x04, 0x24, 0xa6, 0x0c, 0x42, 0xe9, 0x04, - 0xf9, 0xf9, 0x01, 0x48, 0xc2, 0xc9, 0x0e, 0xf9, 0x41, 0x43, 0x16, 0x00, - 0xa6, 0x00, 0x00, 0x5b, 0x26, 0x1a, 0x8b, 0x23, 0x00, 0x45, 0x24, 0x21, - 0x94, 0xf4, 0x41, 0x42, 0x36, 0x01, 0xf1, 0xf9, 0x01, 0xa4, 0x0f, 0x02, - 0x69, 0x00, 0x01, 0xff, 0x44, 0x22, 0xec, 0xbc, 0xf4, 0x01, 0xf3, 0x72, - 0xfa, 0x41, 0x4b, 0x4d, 0x99, 0x70, 0xf4, 0x01, 0x4b, 0x34, 0x9a, 0x09, - 0xf3, 0x41, 0xa1, 0x06, 0x42, 0x32, 0x00, 0xd8, 0x02, 0x40, 0xe4, 0x5e, - 0xf3, 0x01, 0x50, 0xda, 0x62, 0x82, 0x00, 0x00, 0x4a, 0x09, 0xaf, 0x31, - 0xf9, 0x41, 0x04, 0x0a, 0xed, 0x98, 0x09, 0xa9, 0x01, 0xff, 0x0c, 0xad, - 0x8f, 0x04, 0xee, 0xe0, 0xf9, 0x41, 0x45, 0xbe, 0xbd, 0x00, 0x28, 0x00, - 0x05, 0x96, 0xe2, 0x01, 0xff, 0xd1, 0x01, 0x28, 0x80, 0xbe, 0x04, 0xd2, - 0x02, 0x28, 0x80, 0x9c, 0x02, 0xd3, 0x04, 0x28, 0x80, 0x8b, 0x01, 0xd4, - 0x08, 0x28, 0x80, 0x43, 0xd5, 0x10, 0x28, 0x80, 0x1f, 0xd6, 0x20, 0x28, - 0x80, 0x0d, 0xd7, 0x40, 0x28, 0x80, 0x04, 0xd8, 0x80, 0x28, 0x40, 0xd8, - 0xc0, 0x28, 0x40, 0xd7, 0x60, 0x28, 0x80, 0x04, 0xd8, 0xa0, 0x28, 0x40, - 0xd8, 0xe0, 0x28, 0x40, 0xd6, 0x30, 0x28, 0x80, 0x0d, 0xd7, 0x50, 0x28, - 0x80, 0x04, 0xd8, 0x90, 0x28, 0x40, 0xd8, 0xd0, 0x28, 0x40, 0xd7, 0x70, - 0x28, 0x80, 0x04, 0xd8, 0xb0, 0x28, 0x40, 0xd8, 0xf0, 0x28, 0x40, 0xd5, - 0x18, 0x28, 0x80, 0x1f, 0xd6, 0x28, 0x28, 0x80, 0x0d, 0xd7, 0x48, 0x28, - 0x80, 0x04, 0xd8, 0x88, 0x28, 0x40, 0xd8, 0xc8, 0x28, 0x40, 0xd7, 0x68, - 0x28, 0x80, 0x04, 0xd8, 0xa8, 0x28, 0x40, 0xd8, 0xe8, 0x28, 0x40, 0xd6, - 0x38, 0x28, 0x80, 0x0d, 0xd7, 0x58, 0x28, 0x80, 0x04, 0xd8, 0x98, 0x28, - 0x40, 0xd8, 0xd8, 0x28, 0x40, 0xd7, 0x78, 0x28, 0x80, 0x04, 0xd8, 0xb8, - 0x28, 0x40, 0xd8, 0xf8, 0x28, 0x40, 0xd4, 0x0c, 0x28, 0x80, 0x43, 0xd5, - 0x14, 0x28, 0x80, 0x1f, 0xd6, 0x24, 0x28, 0x80, 0x0d, 0xd7, 0x44, 0x28, - 0x80, 0x04, 0xd8, 0x84, 0x28, 0x40, 0xd8, 0xc4, 0x28, 0x40, 0xd7, 0x64, - 0x28, 0x80, 0x04, 0xd8, 0xa4, 0x28, 0x40, 0xd8, 0xe4, 0x28, 0x40, 0xd6, - 0x34, 0x28, 0x80, 0x0d, 0xd7, 0x54, 0x28, 0x80, 0x04, 0xd8, 0x94, 0x28, - 0x40, 0xd8, 0xd4, 0x28, 0x40, 0xd7, 0x74, 0x28, 0x80, 0x04, 0xd8, 0xb4, - 0x28, 0x40, 0xd8, 0xf4, 0x28, 0x40, 0xd5, 0x1c, 0x28, 0x80, 0x1f, 0xd6, - 0x2c, 0x28, 0x80, 0x0d, 0xd7, 0x4c, 0x28, 0x80, 0x04, 0xd8, 0x8c, 0x28, - 0x40, 0xd8, 0xcc, 0x28, 0x40, 0xd7, 0x6c, 0x28, 0x80, 0x04, 0xd8, 0xac, - 0x28, 0x40, 0xd8, 0xec, 0x28, 0x40, 0xd6, 0x3c, 0x28, 0x80, 0x0d, 0xd7, - 0x5c, 0x28, 0x80, 0x04, 0xd8, 0x9c, 0x28, 0x40, 0xd8, 0xdc, 0x28, 0x40, - 0xd7, 0x7c, 0x28, 0x80, 0x04, 0xd8, 0xbc, 0x28, 0x40, 0xd8, 0xfc, 0x28, - 0x40, 0xd3, 0x06, 0x28, 0x80, 0x8b, 0x01, 0xd4, 0x0a, 0x28, 0x80, 0x43, - 0xd5, 0x12, 0x28, 0x80, 0x1f, 0xd6, 0x22, 0x28, 0x80, 0x0d, 0xd7, 0x42, - 0x28, 0x80, 0x04, 0xd8, 0x82, 0x28, 0x40, 0xd8, 0xc2, 0x28, 0x40, 0xd7, - 0x62, 0x28, 0x80, 0x04, 0xd8, 0xa2, 0x28, 0x40, 0xd8, 0xe2, 0x28, 0x40, - 0xd6, 0x32, 0x28, 0x80, 0x0d, 0xd7, 0x52, 0x28, 0x80, 0x04, 0xd8, 0x92, - 0x28, 0x40, 0xd8, 0xd2, 0x28, 0x40, 0xd7, 0x72, 0x28, 0x80, 0x04, 0xd8, - 0xb2, 0x28, 0x40, 0xd8, 0xf2, 0x28, 0x40, 0xd5, 0x1a, 0x28, 0x80, 0x1f, - 0xd6, 0x2a, 0x28, 0x80, 0x0d, 0xd7, 0x4a, 0x28, 0x80, 0x04, 0xd8, 0x8a, - 0x28, 0x40, 0xd8, 0xca, 0x28, 0x40, 0xd7, 0x6a, 0x28, 0x80, 0x04, 0xd8, - 0xaa, 0x28, 0x40, 0xd8, 0xea, 0x28, 0x40, 0xd6, 0x3a, 0x28, 0x80, 0x0d, - 0xd7, 0x5a, 0x28, 0x80, 0x04, 0xd8, 0x9a, 0x28, 0x40, 0xd8, 0xda, 0x28, - 0x40, 0xd7, 0x7a, 0x28, 0x80, 0x04, 0xd8, 0xba, 0x28, 0x40, 0xd8, 0xfa, - 0x28, 0x40, 0xd4, 0x0e, 0x28, 0x80, 0x43, 0xd5, 0x16, 0x28, 0x80, 0x1f, - 0xd6, 0x26, 0x28, 0x80, 0x0d, 0xd7, 0x46, 0x28, 0x80, 0x04, 0xd8, 0x86, - 0x28, 0x40, 0xd8, 0xc6, 0x28, 0x40, 0xd7, 0x66, 0x28, 0x80, 0x04, 0xd8, - 0xa6, 0x28, 0x40, 0xd8, 0xe6, 0x28, 0x40, 0xd6, 0x36, 0x28, 0x80, 0x0d, - 0xd7, 0x56, 0x28, 0x80, 0x04, 0xd8, 0x96, 0x28, 0x40, 0xd8, 0xd6, 0x28, - 0x40, 0xd7, 0x76, 0x28, 0x80, 0x04, 0xd8, 0xb6, 0x28, 0x40, 0xd8, 0xf6, - 0x28, 0x40, 0xd5, 0x1e, 0x28, 0x80, 0x1f, 0xd6, 0x2e, 0x28, 0x80, 0x0d, - 0xd7, 0x4e, 0x28, 0x80, 0x04, 0xd8, 0x8e, 0x28, 0x40, 0xd8, 0xce, 0x28, - 0x40, 0xd7, 0x6e, 0x28, 0x80, 0x04, 0xd8, 0xae, 0x28, 0x40, 0xd8, 0xee, - 0x28, 0x40, 0xd6, 0x3e, 0x28, 0x80, 0x0d, 0xd7, 0x5e, 0x28, 0x80, 0x04, - 0xd8, 0x9e, 0x28, 0x40, 0xd8, 0xde, 0x28, 0x40, 0xd7, 0x7e, 0x28, 0x80, - 0x04, 0xd8, 0xbe, 0x28, 0x40, 0xd8, 0xfe, 0x28, 0x40, 0xd2, 0x03, 0x28, - 0x80, 0x9c, 0x02, 0xd3, 0x05, 0x28, 0x80, 0x8b, 0x01, 0xd4, 0x09, 0x28, - 0x80, 0x43, 0xd5, 0x11, 0x28, 0x80, 0x1f, 0xd6, 0x21, 0x28, 0x80, 0x0d, - 0xd7, 0x41, 0x28, 0x80, 0x04, 0xd8, 0x81, 0x28, 0x40, 0xd8, 0xc1, 0x28, - 0x40, 0xd7, 0x61, 0x28, 0x80, 0x04, 0xd8, 0xa1, 0x28, 0x40, 0xd8, 0xe1, - 0x28, 0x40, 0xd6, 0x31, 0x28, 0x80, 0x0d, 0xd7, 0x51, 0x28, 0x80, 0x04, - 0xd8, 0x91, 0x28, 0x40, 0xd8, 0xd1, 0x28, 0x40, 0xd7, 0x71, 0x28, 0x80, - 0x04, 0xd8, 0xb1, 0x28, 0x40, 0xd8, 0xf1, 0x28, 0x40, 0xd5, 0x19, 0x28, - 0x80, 0x1f, 0xd6, 0x29, 0x28, 0x80, 0x0d, 0xd7, 0x49, 0x28, 0x80, 0x04, - 0xd8, 0x89, 0x28, 0x40, 0xd8, 0xc9, 0x28, 0x40, 0xd7, 0x69, 0x28, 0x80, - 0x04, 0xd8, 0xa9, 0x28, 0x40, 0xd8, 0xe9, 0x28, 0x40, 0xd6, 0x39, 0x28, - 0x80, 0x0d, 0xd7, 0x59, 0x28, 0x80, 0x04, 0xd8, 0x99, 0x28, 0x40, 0xd8, - 0xd9, 0x28, 0x40, 0xd7, 0x79, 0x28, 0x80, 0x04, 0xd8, 0xb9, 0x28, 0x40, - 0xd8, 0xf9, 0x28, 0x40, 0xd4, 0x0d, 0x28, 0x80, 0x43, 0xd5, 0x15, 0x28, - 0x80, 0x1f, 0xd6, 0x25, 0x28, 0x80, 0x0d, 0xd7, 0x45, 0x28, 0x80, 0x04, - 0xd8, 0x85, 0x28, 0x40, 0xd8, 0xc5, 0x28, 0x40, 0xd7, 0x65, 0x28, 0x80, - 0x04, 0xd8, 0xa5, 0x28, 0x40, 0xd8, 0xe5, 0x28, 0x40, 0xd6, 0x35, 0x28, - 0x80, 0x0d, 0xd7, 0x55, 0x28, 0x80, 0x04, 0xd8, 0x95, 0x28, 0x40, 0xd8, - 0xd5, 0x28, 0x40, 0xd7, 0x75, 0x28, 0x80, 0x04, 0xd8, 0xb5, 0x28, 0x40, - 0xd8, 0xf5, 0x28, 0x40, 0xd5, 0x1d, 0x28, 0x80, 0x1f, 0xd6, 0x2d, 0x28, - 0x80, 0x0d, 0xd7, 0x4d, 0x28, 0x80, 0x04, 0xd8, 0x8d, 0x28, 0x40, 0xd8, - 0xcd, 0x28, 0x40, 0xd7, 0x6d, 0x28, 0x80, 0x04, 0xd8, 0xad, 0x28, 0x40, - 0xd8, 0xed, 0x28, 0x40, 0xd6, 0x3d, 0x28, 0x80, 0x0d, 0xd7, 0x5d, 0x28, - 0x80, 0x04, 0xd8, 0x9d, 0x28, 0x40, 0xd8, 0xdd, 0x28, 0x40, 0xd7, 0x7d, - 0x28, 0x80, 0x04, 0xd8, 0xbd, 0x28, 0x40, 0xd8, 0xfd, 0x28, 0x40, 0xd3, - 0x07, 0x28, 0x80, 0x8b, 0x01, 0xd4, 0x0b, 0x28, 0x80, 0x43, 0xd5, 0x13, - 0x28, 0x80, 0x1f, 0xd6, 0x23, 0x28, 0x80, 0x0d, 0xd7, 0x43, 0x28, 0x80, - 0x04, 0xd8, 0x83, 0x28, 0x40, 0xd8, 0xc3, 0x28, 0x40, 0xd7, 0x63, 0x28, - 0x80, 0x04, 0xd8, 0xa3, 0x28, 0x40, 0xd8, 0xe3, 0x28, 0x40, 0xd6, 0x33, - 0x28, 0x80, 0x0d, 0xd7, 0x53, 0x28, 0x80, 0x04, 0xd8, 0x93, 0x28, 0x40, - 0xd8, 0xd3, 0x28, 0x40, 0xd7, 0x73, 0x28, 0x80, 0x04, 0xd8, 0xb3, 0x28, - 0x40, 0xd8, 0xf3, 0x28, 0x40, 0xd5, 0x1b, 0x28, 0x80, 0x1f, 0xd6, 0x2b, - 0x28, 0x80, 0x0d, 0xd7, 0x4b, 0x28, 0x80, 0x04, 0xd8, 0x8b, 0x28, 0x40, - 0xd8, 0xcb, 0x28, 0x40, 0xd7, 0x6b, 0x28, 0x80, 0x04, 0xd8, 0xab, 0x28, - 0x40, 0xd8, 0xeb, 0x28, 0x40, 0xd6, 0x3b, 0x28, 0x80, 0x0d, 0xd7, 0x5b, - 0x28, 0x80, 0x04, 0xd8, 0x9b, 0x28, 0x40, 0xd8, 0xdb, 0x28, 0x40, 0xd7, - 0x7b, 0x28, 0x80, 0x04, 0xd8, 0xbb, 0x28, 0x40, 0xd8, 0xfb, 0x28, 0x40, - 0xd4, 0x0f, 0x28, 0x80, 0x43, 0xd5, 0x17, 0x28, 0x80, 0x1f, 0xd6, 0x27, - 0x28, 0x80, 0x0d, 0xd7, 0x47, 0x28, 0x80, 0x04, 0xd8, 0x87, 0x28, 0x40, - 0xd8, 0xc7, 0x28, 0x40, 0xd7, 0x67, 0x28, 0x80, 0x04, 0xd8, 0xa7, 0x28, - 0x40, 0xd8, 0xe7, 0x28, 0x40, 0xd6, 0x37, 0x28, 0x80, 0x0d, 0xd7, 0x57, - 0x28, 0x80, 0x04, 0xd8, 0x97, 0x28, 0x40, 0xd8, 0xd7, 0x28, 0x40, 0xd7, - 0x77, 0x28, 0x80, 0x04, 0xd8, 0xb7, 0x28, 0x40, 0xd8, 0xf7, 0x28, 0x40, - 0xd5, 0x1f, 0x28, 0x80, 0x1f, 0xd6, 0x2f, 0x28, 0x80, 0x0d, 0xd7, 0x4f, - 0x28, 0x80, 0x04, 0xd8, 0x8f, 0x28, 0x40, 0xd8, 0xcf, 0x28, 0x40, 0xd7, - 0x6f, 0x28, 0x80, 0x04, 0xd8, 0xaf, 0x28, 0x40, 0xd8, 0xef, 0x28, 0x40, - 0xd6, 0x3f, 0x28, 0x80, 0x0d, 0xd7, 0x5f, 0x28, 0x80, 0x04, 0xd8, 0x9f, - 0x28, 0x40, 0xd8, 0xdf, 0x28, 0x40, 0xd7, 0x7f, 0x28, 0x80, 0x04, 0xd8, - 0xbf, 0x28, 0x40, 0xd8, 0xff, 0x28, 0x40, 0xa4, 0x95, 0x05, 0x07, 0xc1, - 0x05, 0xca, 0x02, 0x07, 0x2f, 0x39, 0xb1, 0x01, 0x0c, 0x01, 0x16, 0x89, - 0x01, 0x05, 0x2f, 0x03, 0x61, 0xb6, 0x01, 0xff, 0x45, 0x5c, 0x23, 0x46, - 0x10, 0x01, 0x0a, 0xd2, 0x75, 0x01, 0xff, 0xa1, 0x45, 0x4e, 0xb6, 0x74, - 0x39, 0x10, 0x01, 0xe5, 0x42, 0x10, 0x01, 0xe9, 0x3a, 0x10, 0x81, 0x32, - 0xef, 0x44, 0x10, 0x81, 0x20, 0xf5, 0x3c, 0x10, 0x81, 0x17, 0x08, 0x9b, - 0xbe, 0x01, 0xff, 0xec, 0x40, 0x10, 0x81, 0x09, 0xf2, 0x3e, 0x10, 0xc1, - 0x00, 0xf2, 0x3f, 0x10, 0x41, 0xec, 0x41, 0x10, 0x41, 0xf5, 0x3d, 0x10, - 0x41, 0x0f, 0xa2, 0x6d, 0x01, 0xff, 0xe5, 0x73, 0x10, 0x01, 0xef, 0x74, - 0x10, 0x41, 0xe9, 0x3b, 0x10, 0x41, 0xe1, 0x38, 0x10, 0x01, 0xe9, 0x43, - 0x10, 0x01, 0xf5, 0x45, 0x10, 0x41, 0x48, 0xd0, 0x15, 0x01, 0x10, 0x01, - 0x4b, 0x4f, 0x23, 0x00, 0x10, 0x01, 0x4b, 0xc0, 0x9b, 0x03, 0x10, 0x01, - 0x50, 0xfa, 0x63, 0x70, 0x10, 0x01, 0x4b, 0x32, 0xa2, 0x04, 0x10, 0x01, - 0x47, 0xa1, 0x4a, 0x02, 0x10, 0x41, 0x4c, 0xc9, 0x8b, 0x4c, 0x10, 0x01, - 0x02, 0x3b, 0x01, 0x0f, 0xac, 0x01, 0xff, 0x43, 0xc3, 0x07, 0x4b, 0x10, - 0x01, 0x44, 0x45, 0x78, 0x4d, 0x10, 0x41, 0xf4, 0x49, 0x10, 0x01, 0x48, - 0xad, 0x40, 0x4a, 0x10, 0x41, 0x45, 0xc3, 0x0a, 0x59, 0x10, 0x81, 0x88, - 0x01, 0xa6, 0x69, 0x46, 0x24, 0x60, 0x7f, 0x10, 0x01, 0x44, 0x46, 0x2a, - 0x5a, 0x10, 0x81, 0x56, 0x43, 0xbf, 0x0a, 0x52, 0x10, 0x81, 0x40, 0xb3, - 0x24, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0x5b, 0x10, 0x01, 0xa8, 0x0d, - 0xb7, 0x01, 0xff, 0x44, 0x29, 0x1d, 0x5c, 0x10, 0x01, 0xef, 0x53, 0x10, - 0x41, 0x44, 0x2c, 0x11, 0x5d, 0x10, 0x01, 0x43, 0x26, 0x01, 0x54, 0x10, - 0x41, 0x44, 0x27, 0x1d, 0x58, 0x10, 0x81, 0x0d, 0x42, 0x60, 0x25, 0x57, - 0x10, 0xc1, 0x00, 0x42, 0x2e, 0x11, 0x60, 0x10, 0x41, 0x42, 0x2e, 0x11, - 0x61, 0x10, 0x41, 0x80, 0x01, 0xff, 0x47, 0x22, 0x11, 0x64, 0x10, 0x01, - 0x48, 0xd5, 0x5c, 0x65, 0x10, 0x41, 0x42, 0x2e, 0x11, 0x63, 0x10, 0x41, - 0xa9, 0x0f, 0xaf, 0x01, 0xff, 0x43, 0x2d, 0x11, 0x5e, 0x10, 0x01, 0x42, - 0x42, 0x00, 0x55, 0x10, 0x41, 0x43, 0x09, 0x4c, 0x5f, 0x10, 0x01, 0x42, - 0x32, 0x00, 0x56, 0x10, 0x41, 0xf9, 0x62, 0x10, 0x41, 0xe1, 0x05, 0x10, - 0x81, 0xb4, 0x02, 0xa2, 0xa7, 0x02, 0xa3, 0x9a, 0x02, 0xa4, 0x81, 0x02, - 0xe5, 0x0f, 0x10, 0x01, 0xa7, 0xf0, 0x01, 0x42, 0x22, 0x00, 0x33, 0x10, - 0x01, 0xe9, 0x07, 0x10, 0x81, 0xe0, 0x01, 0xaa, 0xd3, 0x01, 0xab, 0xc6, - 0x01, 0xac, 0xb9, 0x01, 0x42, 0x6c, 0x00, 0x2b, 0x10, 0x01, 0xae, 0x9a, - 0x01, 0xef, 0x11, 0x10, 0x81, 0x69, 0xb0, 0x5d, 0x42, 0x71, 0x00, 0x2d, - 0x10, 0x01, 0xb3, 0x45, 0xb4, 0x2c, 0xf5, 0x09, 0x10, 0x81, 0x23, 0xb6, - 0x06, 0x42, 0x34, 0x22, 0x2c, 0x10, 0x41, 0xe1, 0x2f, 0x10, 0x01, 0x07, - 0x9c, 0xbe, 0x01, 0xff, 0xec, 0x0d, 0x10, 0x81, 0x09, 0xf2, 0x0b, 0x10, - 0xc1, 0x00, 0xf2, 0x0c, 0x10, 0x41, 0xec, 0x0e, 0x10, 0x41, 0xf5, 0x0a, - 0x10, 0x41, 0xe1, 0x22, 0x10, 0x01, 0x42, 0x22, 0x00, 0x23, 0x10, 0x01, - 0xb4, 0x01, 0xff, 0xe1, 0x1d, 0x10, 0x01, 0x42, 0x22, 0x00, 0x1e, 0x10, - 0x41, 0xe1, 0x32, 0x10, 0x01, 0x42, 0x22, 0x00, 0x30, 0x10, 0x01, 0x42, - 0x15, 0x06, 0x31, 0x10, 0x41, 0xe1, 0x27, 0x10, 0x01, 0x42, 0x22, 0x00, - 0x28, 0x10, 0x41, 0x09, 0xfb, 0x63, 0x01, 0xff, 0x02, 0x0f, 0x07, 0x19, - 0x44, 0x42, 0xee, 0x37, 0x10, 0x01, 0x43, 0xc9, 0x64, 0x36, 0x10, 0x01, - 0x06, 0x61, 0x36, 0x01, 0xff, 0xe5, 0x71, 0x10, 0x01, 0xef, 0x72, 0x10, - 0x41, 0xe1, 0x75, 0x10, 0x01, 0x42, 0x74, 0x00, 0x35, 0x10, 0x41, 0xe1, - 0x26, 0x10, 0x01, 0x42, 0x24, 0x02, 0x17, 0x10, 0x01, 0x42, 0xff, 0x04, - 0x21, 0x10, 0x01, 0x42, 0x34, 0x22, 0x1c, 0x10, 0x41, 0xe1, 0x2e, 0x10, - 0x01, 0x42, 0x74, 0x00, 0x34, 0x10, 0x41, 0xe1, 0x13, 0x10, 0x01, 0x42, - 0x22, 0x00, 0x14, 0x10, 0x41, 0xe1, 0x1a, 0x10, 0x01, 0x42, 0x22, 0x00, - 0x1b, 0x10, 0x41, 0xe9, 0x08, 0x10, 0x41, 0xe1, 0x15, 0x10, 0x01, 0x42, - 0x22, 0x00, 0x16, 0x10, 0x41, 0xe1, 0x24, 0x10, 0x01, 0xa4, 0x06, 0x42, - 0x22, 0x00, 0x25, 0x10, 0x41, 0xe1, 0x1f, 0x10, 0x01, 0x42, 0x22, 0x00, - 0x20, 0x10, 0x41, 0xe1, 0x18, 0x10, 0x01, 0x42, 0x22, 0x00, 0x19, 0x10, - 0x41, 0xe1, 0x29, 0x10, 0x01, 0x42, 0x22, 0x00, 0x2a, 0x10, 0x41, 0xe1, - 0x06, 0x10, 0x01, 0xe9, 0x10, 0x10, 0x01, 0xf5, 0x12, 0x10, 0x41, 0x44, - 0xd1, 0x1f, 0x47, 0x10, 0x01, 0x05, 0xc5, 0x06, 0x06, 0x4b, 0xd8, 0x9e, - 0x48, 0x10, 0x41, 0x45, 0xc3, 0x0a, 0x6e, 0x10, 0x01, 0xa6, 0x2e, 0x44, - 0x46, 0x2a, 0x6f, 0x10, 0x01, 0x43, 0xbf, 0x0a, 0x67, 0x10, 0x01, 0xb3, - 0x14, 0xb4, 0x06, 0x44, 0xa1, 0x1d, 0x66, 0x10, 0x41, 0x44, 0x25, 0x01, - 0x69, 0x10, 0x01, 0x42, 0x15, 0x02, 0x68, 0x10, 0x41, 0x44, 0x27, 0x1d, - 0x6d, 0x10, 0x01, 0x42, 0x60, 0x25, 0x6c, 0x10, 0x41, 0x43, 0xa7, 0x05, - 0x6b, 0x10, 0x01, 0x43, 0xcb, 0x06, 0x6a, 0x10, 0x41, 0x42, 0x17, 0x00, - 0x17, 0xf4, 0x01, 0x03, 0x7b, 0x23, 0xee, 0x10, 0x42, 0x8b, 0x05, 0xa3, - 0xf4, 0x01, 0x42, 0xa2, 0x05, 0xb4, 0xf9, 0x01, 0xaf, 0xc3, 0x10, 0x07, - 0xf4, 0xd1, 0xe0, 0x0d, 0x02, 0xc3, 0x05, 0xe6, 0x0b, 0x45, 0xbd, 0xe8, - 0x90, 0xf4, 0x81, 0xd8, 0x0b, 0xb7, 0xa1, 0x0b, 0xb8, 0x0b, 0xf9, 0x66, - 0xf4, 0xc1, 0x00, 0x48, 0x2e, 0x4a, 0xc9, 0xf6, 0x41, 0x0a, 0x8d, 0xa3, - 0x06, 0x49, 0x1a, 0xb8, 0x4a, 0xf9, 0x41, 0x02, 0x3b, 0x01, 0xf6, 0x08, - 0x06, 0x01, 0x15, 0xc2, 0x07, 0xac, 0xae, 0x02, 0x06, 0xc8, 0x00, 0xf1, - 0x01, 0x03, 0x11, 0x15, 0x5e, 0x09, 0x32, 0x00, 0x01, 0xff, 0x0b, 0x0b, - 0x99, 0x43, 0x0a, 0x01, 0x15, 0x2d, 0x0a, 0x1a, 0x63, 0x17, 0x0b, 0x85, - 0xa0, 0x01, 0xff, 0x51, 0x3b, 0x59, 0x6a, 0x25, 0x00, 0x4b, 0x65, 0x9c, - 0x61, 0x25, 0x00, 0x4c, 0xb9, 0x92, 0x5e, 0x25, 0x40, 0x50, 0x93, 0x39, - 0x3f, 0x25, 0x00, 0x4a, 0x59, 0xaa, 0x25, 0x25, 0x00, 0x4b, 0xca, 0x9f, - 0x1d, 0x25, 0x40, 0x50, 0xa8, 0x39, 0x42, 0x25, 0x00, 0x4a, 0x63, 0xaa, - 0x28, 0x25, 0x00, 0x4b, 0x24, 0x63, 0x20, 0x25, 0x40, 0x51, 0x4c, 0x59, - 0x6b, 0x25, 0x00, 0x4b, 0x70, 0x9c, 0x62, 0x25, 0x00, 0x4c, 0xc5, 0x92, - 0x5f, 0x25, 0x40, 0x0b, 0x0b, 0x99, 0x79, 0x0a, 0x01, 0x15, 0x48, 0x0a, - 0x1a, 0x63, 0x17, 0x0b, 0x85, 0xa0, 0x01, 0xff, 0x51, 0x3b, 0x59, 0x67, - 0x25, 0x00, 0x4b, 0x65, 0x9c, 0x5b, 0x25, 0x00, 0x4c, 0xb9, 0x92, 0x58, - 0x25, 0x40, 0x55, 0x8e, 0x39, 0x48, 0x25, 0x00, 0x50, 0x93, 0x39, 0x37, - 0x25, 0x00, 0x05, 0xc3, 0x00, 0x11, 0x06, 0xc8, 0x00, 0x01, 0xff, 0x4a, - 0xfc, 0x14, 0x22, 0x25, 0x00, 0x45, 0x01, 0x15, 0x15, 0x25, 0x40, 0x4a, - 0xfc, 0x14, 0x2a, 0x25, 0x00, 0x45, 0x01, 0x15, 0x19, 0x25, 0x40, 0x55, - 0xa3, 0x39, 0x40, 0x25, 0x00, 0x50, 0xa8, 0x39, 0x38, 0x25, 0x00, 0x05, - 0xc3, 0x00, 0x11, 0x06, 0xc8, 0x00, 0x01, 0xff, 0x4a, 0x6b, 0x16, 0x1e, - 0x25, 0x00, 0x45, 0xc3, 0x01, 0x16, 0x25, 0x40, 0x4a, 0x6b, 0x16, 0x26, - 0x25, 0x00, 0x45, 0xc3, 0x01, 0x1a, 0x25, 0x40, 0x51, 0x4c, 0x59, 0x68, - 0x25, 0x00, 0x4b, 0x70, 0x9c, 0x5c, 0x25, 0x00, 0x4c, 0xc5, 0x92, 0x59, - 0x25, 0x40, 0x5c, 0x02, 0x17, 0x46, 0x25, 0x00, 0x0f, 0x07, 0x17, 0x1c, - 0x0f, 0x1a, 0x6e, 0x06, 0x5c, 0xfa, 0x18, 0x44, 0x25, 0x40, 0x4a, 0xfc, - 0x14, 0x31, 0x25, 0x00, 0x48, 0x58, 0x16, 0x39, 0x25, 0x00, 0x4e, 0x06, - 0x7d, 0x49, 0x25, 0x40, 0x4a, 0x6b, 0x16, 0x2e, 0x25, 0x00, 0x48, 0x11, - 0x15, 0x36, 0x25, 0x00, 0x4e, 0x14, 0x7d, 0x3e, 0x25, 0x40, 0x04, 0xc4, - 0x00, 0xd4, 0x04, 0x05, 0xc9, 0x00, 0x01, 0xff, 0x04, 0x3e, 0x17, 0xa9, - 0x04, 0x55, 0xd1, 0x38, 0x1e, 0xcc, 0x01, 0xa4, 0xc4, 0x01, 0x4a, 0x0b, - 0x00, 0x00, 0x25, 0x80, 0xa3, 0x01, 0x44, 0xc3, 0x00, 0x74, 0x25, 0x80, - 0x95, 0x01, 0x0f, 0x81, 0x70, 0x84, 0x01, 0x45, 0xc8, 0x00, 0x76, 0x25, - 0x00, 0xb4, 0x65, 0x42, 0x50, 0x02, 0x75, 0x25, 0x80, 0x3f, 0x48, 0x32, - 0x00, 0x02, 0x25, 0xc0, 0x00, 0x05, 0x19, 0x00, 0x01, 0xff, 0x07, 0x4c, - 0x0d, 0x23, 0x4a, 0x0b, 0x00, 0x3c, 0x25, 0x00, 0x44, 0xc3, 0x00, 0x24, - 0x25, 0x00, 0x45, 0xc8, 0x00, 0x1c, 0x25, 0x00, 0x04, 0x1e, 0x00, 0x01, - 0xff, 0x44, 0xc3, 0x00, 0x18, 0xce, 0x01, 0x45, 0xc8, 0x00, 0x16, 0xce, - 0x41, 0x44, 0xc3, 0x00, 0x19, 0xce, 0x01, 0x45, 0xc8, 0x00, 0x17, 0xce, - 0x41, 0x05, 0x19, 0x00, 0x01, 0xff, 0xa8, 0x0c, 0x44, 0xc3, 0x00, 0x18, - 0x25, 0x00, 0x45, 0xc8, 0x00, 0x14, 0x25, 0x40, 0x49, 0xad, 0xb5, 0x7d, - 0x25, 0x00, 0x49, 0x0c, 0x00, 0x34, 0x25, 0x40, 0x51, 0x7d, 0x5b, 0x1d, - 0xcc, 0x01, 0x0b, 0xa4, 0x36, 0x01, 0xff, 0x4a, 0x0b, 0x00, 0x04, 0x25, - 0x00, 0x48, 0x32, 0x00, 0x06, 0x25, 0x40, 0x4a, 0x0b, 0x00, 0x08, 0x25, - 0x00, 0x48, 0x32, 0x00, 0x0a, 0x25, 0x40, 0x50, 0x7a, 0x5e, 0x7c, 0x25, - 0x40, 0x80, 0x01, 0xff, 0x04, 0x1a, 0x00, 0x06, 0x54, 0xd6, 0x37, 0xaf, - 0xfb, 0x41, 0x4b, 0xcd, 0x02, 0x1c, 0xcc, 0x01, 0x4b, 0x98, 0x02, 0x1b, - 0xcc, 0x41, 0x08, 0x43, 0x25, 0x31, 0xaf, 0x01, 0xff, 0x0a, 0x3f, 0xb0, - 0x1e, 0x42, 0xa7, 0x01, 0x77, 0x25, 0xc0, 0x00, 0x05, 0x19, 0x00, 0x01, - 0xff, 0x4a, 0x0b, 0x00, 0x2c, 0x25, 0x00, 0x44, 0xc3, 0x00, 0x10, 0x25, - 0x00, 0x45, 0xc8, 0x00, 0x0c, 0x25, 0x40, 0x4a, 0x0b, 0x00, 0x4c, 0x25, - 0x00, 0x48, 0x32, 0x00, 0x4e, 0x25, 0x40, 0x45, 0x46, 0x10, 0x73, 0x25, - 0x00, 0x47, 0x88, 0x43, 0xae, 0xfb, 0x01, 0x0e, 0x6b, 0x03, 0x8a, 0x02, - 0x07, 0x7d, 0x02, 0xc2, 0x01, 0x06, 0x6d, 0x02, 0x01, 0xff, 0x0a, 0x73, - 0x02, 0x6a, 0x08, 0x84, 0x02, 0x2d, 0x09, 0x10, 0x0f, 0x01, 0xff, 0x06, - 0x13, 0x01, 0x18, 0x07, 0x7d, 0x02, 0x01, 0xff, 0x55, 0x80, 0x03, 0xd9, - 0xfb, 0x01, 0x44, 0xc3, 0x00, 0xd1, 0xfb, 0xc1, 0x00, 0x4f, 0x86, 0x03, - 0xdd, 0xfb, 0x41, 0x46, 0x73, 0x02, 0xd6, 0xfb, 0x01, 0x44, 0xc3, 0x00, - 0x71, 0x25, 0x40, 0x06, 0x13, 0x01, 0x22, 0x07, 0x7d, 0x02, 0x01, 0xff, - 0x0a, 0x73, 0x02, 0x0d, 0x45, 0xc8, 0x00, 0xd2, 0xfb, 0xc1, 0x00, 0x4e, - 0x6b, 0x4b, 0xdf, 0xfb, 0x41, 0x4a, 0x6b, 0x03, 0xdb, 0xfb, 0x01, 0x4b, - 0x98, 0x02, 0xd8, 0xfb, 0x41, 0x46, 0x73, 0x02, 0xd4, 0xfb, 0x81, 0x06, - 0x45, 0xc8, 0x00, 0x72, 0x25, 0x40, 0x4f, 0x27, 0x18, 0xdc, 0xfb, 0x41, - 0x06, 0x13, 0x01, 0x3f, 0x07, 0x7d, 0x02, 0x01, 0xff, 0x44, 0xc3, 0x00, - 0xa0, 0xfb, 0x81, 0x1d, 0x45, 0xc8, 0x00, 0xa1, 0xfb, 0xc1, 0x00, 0x80, - 0x01, 0xff, 0x5f, 0xa2, 0x10, 0xa9, 0xfb, 0x01, 0x4f, 0x89, 0x02, 0xa5, - 0xfb, 0xc1, 0x00, 0x4f, 0x79, 0x02, 0xaa, 0xfb, 0x41, 0x80, 0x01, 0xff, - 0x60, 0x05, 0x0f, 0xa8, 0xfb, 0x01, 0x4f, 0x89, 0x02, 0xa4, 0xfb, 0xc1, - 0x00, 0x50, 0x22, 0x19, 0xab, 0xfb, 0x41, 0x44, 0xc3, 0x00, 0xd7, 0xfb, - 0x01, 0x45, 0xc8, 0x00, 0xd5, 0xfb, 0x41, 0x08, 0x84, 0x02, 0x1b, 0x09, - 0x10, 0x0f, 0x01, 0xff, 0x06, 0x13, 0x01, 0x06, 0x6b, 0x6d, 0x02, 0xad, - 0xfb, 0x41, 0x46, 0x73, 0x02, 0xa3, 0xfb, 0x01, 0x44, 0xc3, 0x00, 0xd0, - 0xfb, 0x41, 0x06, 0x13, 0x01, 0x0d, 0x5c, 0x16, 0x19, 0xa7, 0xfb, 0xc1, - 0x00, 0x50, 0x88, 0x02, 0xac, 0xfb, 0x41, 0x46, 0x73, 0x02, 0xa2, 0xfb, - 0x81, 0x06, 0x45, 0xc8, 0x00, 0xd3, 0xfb, 0x41, 0x50, 0x22, 0x19, 0xa6, - 0xfb, 0x41, 0x5c, 0x79, 0x03, 0xda, 0xfb, 0x01, 0x5b, 0x35, 0x1d, 0xde, - 0xfb, 0x41, 0x09, 0xc3, 0x47, 0x11, 0x07, 0x48, 0x5d, 0x01, 0xff, 0x44, - 0xc3, 0x00, 0x6f, 0x25, 0x00, 0x45, 0xc8, 0x00, 0x70, 0x25, 0x40, 0x44, - 0xc3, 0x00, 0x6e, 0x25, 0x00, 0x45, 0xc8, 0x00, 0x6d, 0x25, 0x40, 0x5d, - 0xfc, 0x14, 0x45, 0x25, 0x00, 0x10, 0x01, 0x15, 0x1c, 0x10, 0x1a, 0x63, - 0x06, 0x5d, 0x58, 0x16, 0x43, 0x25, 0x40, 0x4a, 0xfc, 0x14, 0x32, 0x25, - 0x00, 0x48, 0x58, 0x16, 0x3a, 0x25, 0x00, 0x4e, 0x06, 0x7d, 0x4a, 0x25, - 0x40, 0x4a, 0x6b, 0x16, 0x2d, 0x25, 0x00, 0x48, 0x11, 0x15, 0x35, 0x25, - 0x00, 0x4e, 0x14, 0x7d, 0x3d, 0x25, 0x40, 0x02, 0x3b, 0x01, 0x7d, 0x4a, - 0x0b, 0x00, 0x01, 0x25, 0x00, 0x44, 0xc3, 0x00, 0x78, 0x25, 0x80, 0x6a, - 0x0f, 0x81, 0x70, 0x5a, 0x45, 0xc8, 0x00, 0x7a, 0x25, 0x00, 0x0c, 0xa3, - 0x36, 0x44, 0x42, 0x50, 0x02, 0x79, 0x25, 0x80, 0x1e, 0x48, 0x32, 0x00, - 0x03, 0x25, 0xc0, 0x00, 0x05, 0x19, 0x00, 0x01, 0xff, 0x4a, 0x0b, 0x00, - 0x4b, 0x25, 0x00, 0x44, 0xc3, 0x00, 0x2b, 0x25, 0x00, 0x45, 0xc8, 0x00, - 0x23, 0x25, 0x40, 0x05, 0x19, 0x00, 0x01, 0xff, 0x4a, 0x0b, 0x00, 0x3b, - 0x25, 0x00, 0xac, 0x06, 0x45, 0xc8, 0x00, 0x17, 0x25, 0x40, 0x43, 0xc4, - 0x00, 0x1b, 0x25, 0x00, 0x49, 0x66, 0x16, 0x7f, 0x25, 0x40, 0x4a, 0x0b, - 0x00, 0x05, 0x25, 0x00, 0x48, 0x32, 0x00, 0x07, 0x25, 0x40, 0x4a, 0x0b, - 0x00, 0x09, 0x25, 0x00, 0x48, 0x32, 0x00, 0x0b, 0x25, 0x40, 0x50, 0x8a, - 0x5e, 0x7e, 0x25, 0x40, 0x0a, 0x3f, 0xb0, 0x1e, 0x42, 0xa7, 0x01, 0x7b, - 0x25, 0xc0, 0x00, 0x05, 0x19, 0x00, 0x01, 0xff, 0x4a, 0x0b, 0x00, 0x33, - 0x25, 0x00, 0x44, 0xc3, 0x00, 0x13, 0x25, 0x00, 0x45, 0xc8, 0x00, 0x0f, - 0x25, 0x40, 0x4a, 0x0b, 0x00, 0x4d, 0x25, 0x00, 0x48, 0x32, 0x00, 0x4f, - 0x25, 0x40, 0x05, 0x3d, 0x01, 0x92, 0x01, 0x03, 0x51, 0x14, 0x01, 0xff, - 0x0b, 0x0b, 0x99, 0x77, 0x0a, 0x01, 0x15, 0x47, 0x0a, 0x1a, 0x63, 0x17, - 0x0b, 0x85, 0xa0, 0x01, 0xff, 0x51, 0x3b, 0x59, 0x64, 0x25, 0x00, 0x4b, - 0x65, 0x9c, 0x55, 0x25, 0x00, 0x4c, 0xb9, 0x92, 0x52, 0x25, 0x40, 0x50, - 0x93, 0x39, 0x2f, 0x25, 0x00, 0x05, 0xc3, 0x00, 0x16, 0x06, 0xc8, 0x00, - 0x06, 0x53, 0xcf, 0x4c, 0x47, 0x25, 0x40, 0x45, 0x01, 0x15, 0x0d, 0x25, - 0x00, 0x48, 0x58, 0x16, 0x21, 0x25, 0x40, 0x45, 0x01, 0x15, 0x11, 0x25, - 0x00, 0x48, 0x58, 0x16, 0x29, 0x25, 0x40, 0x50, 0xa8, 0x39, 0x30, 0x25, - 0x00, 0x05, 0xc3, 0x00, 0x16, 0x06, 0xc8, 0x00, 0x06, 0x53, 0xe2, 0x4c, - 0x41, 0x25, 0x40, 0x45, 0xc3, 0x01, 0x0e, 0x25, 0x00, 0x48, 0x11, 0x15, - 0x1f, 0x25, 0x40, 0x45, 0xc3, 0x01, 0x12, 0x25, 0x00, 0x48, 0x11, 0x15, - 0x27, 0x25, 0x40, 0x51, 0x4c, 0x59, 0x65, 0x25, 0x00, 0x4b, 0x70, 0x9c, - 0x56, 0x25, 0x00, 0x4c, 0xc5, 0x92, 0x53, 0x25, 0x40, 0xa4, 0x3a, 0x4a, - 0x0b, 0x00, 0x50, 0x25, 0x00, 0x07, 0x48, 0x5d, 0x1e, 0x48, 0x32, 0x00, - 0x51, 0x25, 0xc0, 0x00, 0x05, 0x19, 0x00, 0x01, 0xff, 0x4a, 0x0b, 0x00, - 0x6c, 0x25, 0x00, 0x44, 0xc3, 0x00, 0x63, 0x25, 0x00, 0x45, 0xc8, 0x00, - 0x60, 0x25, 0x40, 0x4a, 0x0b, 0x00, 0x69, 0x25, 0x00, 0x44, 0xc3, 0x00, - 0x5d, 0x25, 0x00, 0x45, 0xc8, 0x00, 0x5a, 0x25, 0x40, 0x08, 0x43, 0x25, - 0x17, 0x08, 0xc4, 0x47, 0x01, 0xff, 0x4a, 0x0b, 0x00, 0x66, 0x25, 0x00, - 0x44, 0xc3, 0x00, 0x57, 0x25, 0x00, 0x45, 0xc8, 0x00, 0x54, 0x25, 0x40, - 0x6a, 0x6b, 0x03, 0x09, 0xce, 0x01, 0x06, 0x6d, 0x02, 0x01, 0xff, 0x08, - 0x84, 0x02, 0x06, 0x53, 0x66, 0x4b, 0x1f, 0xcc, 0x41, 0x4b, 0xcd, 0x02, - 0x20, 0xcc, 0x01, 0x5c, 0x1a, 0x18, 0x0a, 0xce, 0x41, 0x4a, 0x65, 0xa3, - 0xf9, 0xf3, 0x01, 0xac, 0x18, 0x43, 0x37, 0x25, 0xc8, 0x22, 0xc0, 0x00, - 0x06, 0x50, 0x00, 0x01, 0xff, 0x4f, 0xcf, 0x6d, 0xd1, 0x29, 0x00, 0x50, - 0x3a, 0x65, 0xd2, 0x29, 0x40, 0x80, 0x06, 0x43, 0xa1, 0x01, 0xb3, 0xf3, - 0x41, 0x4a, 0x57, 0xac, 0x4f, 0xf5, 0x01, 0x4a, 0x43, 0xb1, 0x63, 0xf9, - 0x41, 0x4b, 0x7a, 0x95, 0x95, 0xf3, 0x41, 0x54, 0x17, 0x43, 0x7e, 0xf3, - 0x01, 0x03, 0x81, 0x05, 0x01, 0xff, 0x57, 0x38, 0x1b, 0x3b, 0x29, 0x00, - 0x4d, 0x23, 0x0b, 0xdf, 0x23, 0x00, 0x05, 0x22, 0x00, 0x65, 0x15, 0xb0, - 0x3b, 0x55, 0x05, 0xc3, 0x00, 0x37, 0x4b, 0x50, 0x21, 0xdd, 0x23, 0x00, - 0x06, 0xc8, 0x00, 0x13, 0x4e, 0x27, 0x26, 0xb5, 0x23, 0x80, 0x06, 0x56, - 0x05, 0x09, 0xe1, 0x23, 0x40, 0x58, 0x1d, 0x26, 0xb6, 0x23, 0x40, 0xa3, - 0x0c, 0x4c, 0xcd, 0x8d, 0x25, 0x2e, 0x00, 0x69, 0x63, 0x04, 0xee, 0xfb, - 0x41, 0x45, 0xcf, 0x0a, 0x1f, 0x23, 0x00, 0x43, 0xd8, 0x0c, 0x0c, 0x23, - 0x40, 0xa3, 0x0c, 0x4c, 0xcd, 0x8d, 0x24, 0x2e, 0x00, 0x6a, 0xed, 0x02, - 0xed, 0xfb, 0x41, 0x45, 0xcf, 0x0a, 0x1e, 0x23, 0x00, 0x43, 0xd8, 0x0c, - 0x0d, 0x23, 0x40, 0x4c, 0xe1, 0x02, 0xea, 0xfb, 0x01, 0x4c, 0xe3, 0x10, - 0xe2, 0xfb, 0x41, 0x4c, 0xe1, 0x02, 0xcb, 0x2b, 0x00, 0x10, 0xda, 0x61, - 0x50, 0x48, 0xf3, 0x25, 0x21, 0x23, 0x00, 0x04, 0xc3, 0x00, 0x28, 0x05, - 0xc8, 0x00, 0x06, 0x4f, 0xda, 0x71, 0xe7, 0xcd, 0x41, 0x4c, 0x4f, 0x21, - 0x5c, 0x2e, 0x00, 0x09, 0xe1, 0x61, 0x01, 0xff, 0x44, 0xf8, 0x42, 0x5f, - 0xcc, 0x01, 0x0c, 0x8d, 0x94, 0x01, 0xff, 0xd1, 0xe9, 0xcd, 0x01, 0xd2, - 0xeb, 0xcd, 0x41, 0x4c, 0x4f, 0x21, 0x5b, 0x2e, 0x00, 0x09, 0xe1, 0x61, - 0x01, 0xff, 0x44, 0xf8, 0x42, 0x5d, 0xcc, 0x01, 0x0c, 0x8d, 0x94, 0x01, - 0xff, 0xd1, 0xed, 0xcd, 0x01, 0xd2, 0xef, 0xcd, 0x41, 0x44, 0xf8, 0x42, - 0x5e, 0xcc, 0x01, 0x0c, 0x8d, 0x94, 0x01, 0xff, 0xd1, 0xf1, 0xcd, 0x01, - 0xd2, 0xf2, 0xcd, 0x01, 0xd3, 0xf3, 0xcd, 0x01, 0xd4, 0xf4, 0xcd, 0x41, - 0x0d, 0x49, 0x81, 0xc5, 0x02, 0x07, 0xc1, 0x05, 0x01, 0xff, 0xe1, 0x1a, - 0x31, 0x80, 0x8f, 0x02, 0xe2, 0x05, 0x31, 0x80, 0x85, 0x02, 0xe3, 0x18, - 0x31, 0x80, 0xfb, 0x01, 0xe4, 0x09, 0x31, 0x00, 0xe5, 0x1c, 0x31, 0x80, - 0xd4, 0x01, 0xe6, 0x08, 0x31, 0x00, 0xe7, 0x0d, 0x31, 0x80, 0xba, 0x01, - 0xe8, 0x0f, 0x31, 0x00, 0xe9, 0x27, 0x31, 0x80, 0x95, 0x01, 0xea, 0x10, - 0x31, 0x80, 0x8b, 0x01, 0xeb, 0x0e, 0x31, 0x80, 0x81, 0x01, 0xec, 0x0c, - 0x31, 0x80, 0x78, 0xed, 0x07, 0x31, 0x00, 0xee, 0x0b, 0x31, 0x80, 0x62, - 0xef, 0x1b, 0x31, 0x80, 0x3d, 0xf0, 0x06, 0x31, 0x00, 0xf1, 0x11, 0x31, - 0x00, 0xf2, 0x16, 0x31, 0x00, 0xf3, 0x19, 0x31, 0x80, 0x28, 0xf4, 0x0a, - 0x31, 0x00, 0xf5, 0x28, 0x31, 0x80, 0x19, 0xf6, 0x2a, 0x31, 0x00, 0xf8, - 0x12, 0x31, 0x00, 0xfa, 0x17, 0x31, 0xc0, 0x00, 0xe8, 0x13, 0x31, 0x00, - 0xe9, 0xa1, 0x31, 0x00, 0xf9, 0xba, 0x31, 0x40, 0x42, 0xac, 0x1e, 0xab, - 0x31, 0x40, 0xe8, 0x15, 0x31, 0x40, 0x4f, 0xa5, 0x3a, 0x2e, 0x31, 0x00, - 0xe5, 0xbe, 0x31, 0x00, 0xed, 0xb1, 0x31, 0x00, 0xae, 0x08, 0xef, 0xa6, - 0x31, 0x00, 0xf5, 0x21, 0x31, 0x40, 0xe7, 0xb2, 0x31, 0x00, 0xee, 0xa7, - 0x31, 0x40, 0xe7, 0x2b, 0x31, 0x80, 0x04, 0xee, 0x2f, 0x31, 0x40, 0xe7, - 0xad, 0x31, 0x40, 0xe8, 0xb9, 0x31, 0x40, 0xf7, 0xbd, 0x31, 0x40, 0xe9, - 0xa2, 0x31, 0x40, 0xe8, 0x2d, 0x31, 0x00, 0xed, 0xac, 0x31, 0x00, 0x42, - 0xac, 0x1e, 0xaa, 0x31, 0x80, 0x08, 0xf2, 0xa8, 0x31, 0x00, 0xf5, 0x29, - 0x31, 0x40, 0xee, 0xb3, 0x31, 0x40, 0xe8, 0xb8, 0x31, 0x00, 0xee, 0x2c, - 0x31, 0x00, 0xf5, 0xa3, 0x31, 0x00, 0xf7, 0xbc, 0x31, 0x40, 0xe5, 0xa4, - 0x31, 0x00, 0xe8, 0x1d, 0x31, 0x00, 0xe9, 0x1f, 0x31, 0x00, 0xee, 0x23, - 0x31, 0x80, 0x04, 0xf2, 0x26, 0x31, 0x40, 0xe7, 0x25, 0x31, 0x00, 0xee, - 0xa5, 0x31, 0x40, 0xe8, 0x14, 0x31, 0x40, 0xf5, 0xa0, 0x31, 0x40, 0xe8, - 0xbf, 0x31, 0x00, 0xe9, 0x1e, 0x31, 0x80, 0x1c, 0xed, 0xb0, 0x31, 0x00, - 0xee, 0x22, 0x31, 0x80, 0x0b, 0xf5, 0x20, 0x31, 0xc0, 0x00, 0x42, 0xac, - 0x1e, 0xaf, 0x31, 0x40, 0xe7, 0x24, 0x31, 0x00, 0xee, 0xa9, 0x31, 0x40, - 0x42, 0xac, 0x1e, 0xae, 0x31, 0x40, 0xe7, 0xbb, 0x31, 0x00, 0xe8, 0xb7, - 0x31, 0x00, 0xeb, 0xb6, 0x31, 0x00, 0xf0, 0xb4, 0x31, 0x00, 0xf4, 0xb5, - 0x31, 0x40, 0xeb, 0x6e, 0xf5, 0x81, 0x06, 0x46, 0x07, 0xd1, 0x83, 0xfa, - 0x41, 0x44, 0xb9, 0x00, 0x16, 0xf5, 0x81, 0x04, 0xf3, 0xda, 0xf4, 0x41, - 0x45, 0xd1, 0xde, 0xd1, 0xf4, 0x41, 0x55, 0xf7, 0x39, 0xbd, 0xf7, 0x01, - 0x54, 0x4b, 0x41, 0xb1, 0xf7, 0x01, 0x4b, 0x9f, 0x5f, 0xa4, 0xf7, 0x01, - 0xb3, 0x11, 0x06, 0xad, 0x02, 0x01, 0xff, 0x46, 0xe7, 0x02, 0x86, 0xf7, - 0x01, 0x46, 0xab, 0x05, 0x90, 0xf7, 0x41, 0x46, 0xa7, 0x18, 0xab, 0xf7, - 0x01, 0x52, 0xb6, 0x51, 0xb7, 0xf7, 0x41, 0xa1, 0xe8, 0x0a, 0xaf, 0x19, - 0x02, 0x87, 0x13, 0x01, 0xff, 0x80, 0x06, 0x47, 0xad, 0xcc, 0xd0, 0xfa, - 0x41, 0x44, 0x0e, 0xec, 0xd8, 0xf4, 0x01, 0x45, 0x24, 0x21, 0x99, 0xf4, - 0x41, 0x03, 0xe4, 0x02, 0x0c, 0x44, 0x03, 0xbf, 0x3c, 0xf3, 0x01, 0x45, - 0x1c, 0xe9, 0x21, 0xf4, 0x41, 0x07, 0xd5, 0xd0, 0x95, 0x02, 0x08, 0x1a, - 0xc8, 0x01, 0xff, 0xd1, 0x00, 0xfb, 0x81, 0x87, 0x01, 0xd2, 0x01, 0xfb, - 0x81, 0x43, 0xd3, 0x03, 0xfb, 0x81, 0x1f, 0xd4, 0x07, 0xfb, 0x81, 0x0d, - 0xd5, 0x0f, 0xfb, 0x81, 0x04, 0xd6, 0x1e, 0xfb, 0x41, 0xd6, 0x2d, 0xfb, - 0x41, 0xd5, 0x16, 0xfb, 0x81, 0x04, 0xd6, 0x26, 0xfb, 0x41, 0xd6, 0x35, - 0xfb, 0x41, 0xd4, 0x0b, 0xfb, 0x81, 0x0d, 0xd5, 0x13, 0xfb, 0x81, 0x04, - 0xd6, 0x22, 0xfb, 0x41, 0xd6, 0x31, 0xfb, 0x41, 0xd5, 0x1a, 0xfb, 0x81, - 0x04, 0xd6, 0x29, 0xfb, 0x41, 0xd6, 0x39, 0xfb, 0x41, 0xd3, 0x05, 0xfb, - 0x81, 0x1b, 0xd4, 0x09, 0xfb, 0x81, 0x0d, 0xd5, 0x11, 0xfb, 0x81, 0x04, - 0xd6, 0x20, 0xfb, 0x41, 0xd6, 0x2f, 0xfb, 0x41, 0xd5, 0x18, 0xfb, 0xc1, - 0x00, 0xd6, 0x37, 0xfb, 0x41, 0xd4, 0x0d, 0xfb, 0x81, 0x0d, 0xd5, 0x14, - 0xfb, 0x81, 0x04, 0xd6, 0x24, 0xfb, 0x41, 0xd6, 0x33, 0xfb, 0x41, 0xd5, - 0x1c, 0xfb, 0x81, 0x04, 0xd6, 0x2b, 0xfb, 0x41, 0xd6, 0x3b, 0xfb, 0x41, - 0xd2, 0x02, 0xfb, 0x81, 0x40, 0xd3, 0x04, 0xfb, 0x81, 0x1f, 0xd4, 0x08, - 0xfb, 0x81, 0x0d, 0xd5, 0x10, 0xfb, 0x81, 0x04, 0xd6, 0x1f, 0xfb, 0x41, - 0xd6, 0x2e, 0xfb, 0x41, 0xd5, 0x17, 0xfb, 0x81, 0x04, 0xd6, 0x27, 0xfb, - 0x41, 0xd6, 0x36, 0xfb, 0x41, 0xd4, 0x0c, 0xfb, 0x81, 0x0a, 0x42, 0x7a, - 0xc0, 0x32, 0xfb, 0x01, 0xd6, 0x23, 0xfb, 0x41, 0xd5, 0x1b, 0xfb, 0x81, - 0x04, 0xd6, 0x2a, 0xfb, 0x41, 0xd6, 0x3a, 0xfb, 0x41, 0xd3, 0x06, 0xfb, - 0x81, 0x1f, 0xd4, 0x0a, 0xfb, 0x81, 0x0d, 0xd5, 0x12, 0xfb, 0x81, 0x04, - 0xd6, 0x21, 0xfb, 0x41, 0xd6, 0x30, 0xfb, 0x41, 0xd5, 0x19, 0xfb, 0x81, - 0x04, 0xd6, 0x28, 0xfb, 0x41, 0xd6, 0x38, 0xfb, 0x41, 0xd4, 0x0e, 0xfb, - 0x81, 0x0d, 0xd5, 0x15, 0xfb, 0x81, 0x04, 0xd6, 0x25, 0xfb, 0x41, 0xd6, - 0x34, 0xfb, 0x41, 0xd5, 0x1d, 0xfb, 0x01, 0xd6, 0x2c, 0xfb, 0x41, 0x91, - 0x86, 0x04, 0x92, 0xf7, 0x01, 0xd3, 0x00, 0xcd, 0x81, 0x6f, 0xd4, 0x03, - 0xcd, 0x81, 0x2a, 0xd5, 0x09, 0xcd, 0x81, 0x0e, 0xd6, 0x18, 0xcd, 0xc1, - 0x00, 0xd7, 0x51, 0xcd, 0xc1, 0x00, 0xd8, 0xcb, 0xcd, 0x41, 0xd6, 0x27, - 0xcd, 0x81, 0x0a, 0x42, 0xba, 0xf1, 0xbb, 0xcd, 0x01, 0xd8, 0x80, 0xcd, - 0x41, 0xd7, 0x61, 0xcd, 0x01, 0xd8, 0x9c, 0xcd, 0x41, 0xd5, 0x10, 0xcd, - 0x81, 0x1c, 0x96, 0x0d, 0xd7, 0x3d, 0xcd, 0x81, 0x04, 0xd8, 0x78, 0xcd, - 0x41, 0xd8, 0xb3, 0xcd, 0x41, 0xd7, 0x59, 0xcd, 0x81, 0x04, 0xd8, 0x96, - 0xcd, 0x41, 0xd8, 0xd3, 0xcd, 0x41, 0xd6, 0x2f, 0xcd, 0x81, 0x0d, 0xd7, - 0x4b, 0xcd, 0x81, 0x04, 0xd8, 0x88, 0xcd, 0x41, 0xd8, 0xc3, 0xcd, 0x41, - 0xd7, 0x69, 0xcd, 0x81, 0x04, 0xd8, 0xa4, 0xcd, 0x41, 0xd8, 0xe1, 0xcd, - 0x41, 0xd4, 0x06, 0xcd, 0x81, 0x40, 0x95, 0x1f, 0xd6, 0x1c, 0xcd, 0x81, - 0x0d, 0xd7, 0x39, 0xcd, 0x81, 0x04, 0xd8, 0x74, 0xcd, 0x41, 0xd8, 0xaf, - 0xcd, 0x41, 0xd7, 0x55, 0xcd, 0x81, 0x04, 0xd8, 0x93, 0xcd, 0x41, 0xd8, - 0xcf, 0xcd, 0x41, 0xd6, 0x2b, 0xcd, 0x81, 0x0d, 0xd7, 0x48, 0xcd, 0x81, - 0x04, 0xd8, 0x84, 0xcd, 0x41, 0xd8, 0xbf, 0xcd, 0x41, 0xd7, 0x65, 0xcd, - 0x81, 0x04, 0xd8, 0xa0, 0xcd, 0x41, 0xd8, 0xde, 0xcd, 0x41, 0xd5, 0x14, - 0xcd, 0x81, 0x1f, 0xd6, 0x23, 0xcd, 0x81, 0x0d, 0xd7, 0x41, 0xcd, 0x81, - 0x04, 0xd8, 0x7c, 0xcd, 0x41, 0xd8, 0xb7, 0xcd, 0x41, 0xd7, 0x5d, 0xcd, - 0x81, 0x04, 0xd8, 0x99, 0xcd, 0x41, 0xd8, 0xd7, 0xcd, 0x41, 0xd6, 0x33, - 0xcd, 0x81, 0x0d, 0xd7, 0x4e, 0xcd, 0x81, 0x04, 0xd8, 0x8c, 0xcd, 0x41, - 0xd8, 0xc7, 0xcd, 0x41, 0xd7, 0x6d, 0xcd, 0x01, 0xd8, 0xa8, 0xcd, 0x41, - 0xd3, 0x01, 0xcd, 0x81, 0x7c, 0x94, 0x43, 0xd5, 0x0b, 0xcd, 0x81, 0x1f, - 0xd6, 0x1a, 0xcd, 0x81, 0x0d, 0xd7, 0x37, 0xcd, 0x81, 0x04, 0xd8, 0x72, - 0xcd, 0x41, 0xd8, 0xad, 0xcd, 0x41, 0xd7, 0x53, 0xcd, 0x81, 0x04, 0xd8, - 0x91, 0xcd, 0x41, 0xd8, 0xcd, 0xcd, 0x41, 0xd6, 0x29, 0xcd, 0x81, 0x0d, - 0xd7, 0x46, 0xcd, 0x81, 0x04, 0xd8, 0x82, 0xcd, 0x41, 0xd8, 0xbd, 0xcd, - 0x41, 0xd7, 0x63, 0xcd, 0x81, 0x04, 0xd8, 0x9e, 0xcd, 0x41, 0xd8, 0xdc, - 0xcd, 0x41, 0xd5, 0x12, 0xcd, 0x81, 0x1b, 0xd6, 0x21, 0xcd, 0x81, 0x0d, - 0xd7, 0x3f, 0xcd, 0x81, 0x04, 0xd8, 0x7a, 0xcd, 0x41, 0xd8, 0xb5, 0xcd, - 0x41, 0xd7, 0x5b, 0xcd, 0xc1, 0x00, 0xd8, 0xd5, 0xcd, 0x41, 0xd6, 0x31, - 0xcd, 0x81, 0x0a, 0x42, 0xba, 0xf1, 0xc5, 0xcd, 0x01, 0xd8, 0x8a, 0xcd, - 0x41, 0xd7, 0x6b, 0xcd, 0x01, 0xd8, 0xa6, 0xcd, 0x41, 0xd4, 0x08, 0xcd, - 0x81, 0x43, 0xd5, 0x0e, 0xcd, 0x81, 0x1f, 0xd6, 0x1e, 0xcd, 0x81, 0x0d, - 0xd7, 0x3b, 0xcd, 0x81, 0x04, 0xd8, 0x76, 0xcd, 0x41, 0xd8, 0xb1, 0xcd, - 0x41, 0xd7, 0x57, 0xcd, 0x81, 0x04, 0xd8, 0x94, 0xcd, 0x41, 0xd8, 0xd1, - 0xcd, 0x41, 0xd6, 0x2d, 0xcd, 0x81, 0x0d, 0xd7, 0x49, 0xcd, 0x81, 0x04, - 0xd8, 0x86, 0xcd, 0x41, 0xd8, 0xc1, 0xcd, 0x41, 0xd7, 0x67, 0xcd, 0x81, - 0x04, 0xd8, 0xa2, 0xcd, 0x41, 0xd8, 0xdf, 0xcd, 0x41, 0xd5, 0x16, 0xcd, - 0x81, 0x1f, 0xd6, 0x25, 0xcd, 0x81, 0x0d, 0xd7, 0x43, 0xcd, 0x81, 0x04, - 0xd8, 0x7e, 0xcd, 0x41, 0xd8, 0xb9, 0xcd, 0x41, 0xd7, 0x5f, 0xcd, 0x81, - 0x04, 0xd8, 0x9b, 0xcd, 0x41, 0xd8, 0xd9, 0xcd, 0x41, 0xd6, 0x35, 0xcd, - 0x81, 0x0d, 0xd7, 0x50, 0xcd, 0x81, 0x04, 0xd8, 0x8e, 0xcd, 0x41, 0xd8, - 0xc9, 0xcd, 0x41, 0xd7, 0x6f, 0xcd, 0x81, 0x04, 0xd8, 0xaa, 0xcd, 0x41, - 0xd8, 0xe5, 0xcd, 0x41, 0x92, 0x8d, 0x02, 0x93, 0x8b, 0x01, 0xd4, 0x04, - 0xcd, 0x81, 0x43, 0xd5, 0x0a, 0xcd, 0x81, 0x1f, 0xd6, 0x19, 0xcd, 0x81, - 0x0d, 0xd7, 0x36, 0xcd, 0x81, 0x04, 0xd8, 0x71, 0xcd, 0x41, 0xd8, 0xac, - 0xcd, 0x41, 0xd7, 0x52, 0xcd, 0x81, 0x04, 0xd8, 0x90, 0xcd, 0x41, 0xd8, - 0xcc, 0xcd, 0x41, 0xd6, 0x28, 0xcd, 0x81, 0x0d, 0xd7, 0x45, 0xcd, 0x81, - 0x04, 0xd8, 0x81, 0xcd, 0x41, 0xd8, 0xbc, 0xcd, 0x41, 0xd7, 0x62, 0xcd, - 0x81, 0x04, 0xd8, 0x9d, 0xcd, 0x41, 0xd8, 0xdb, 0xcd, 0x41, 0xd5, 0x11, - 0xcd, 0x81, 0x1f, 0xd6, 0x20, 0xcd, 0x81, 0x0d, 0xd7, 0x3e, 0xcd, 0x81, - 0x04, 0xd8, 0x79, 0xcd, 0x41, 0xd8, 0xb4, 0xcd, 0x41, 0xd7, 0x5a, 0xcd, - 0x81, 0x04, 0xd8, 0x97, 0xcd, 0x41, 0xd8, 0xd4, 0xcd, 0x41, 0xd6, 0x30, - 0xcd, 0x81, 0x0d, 0xd7, 0x4c, 0xcd, 0x81, 0x04, 0xd8, 0x89, 0xcd, 0x41, - 0xd8, 0xc4, 0xcd, 0x41, 0xd7, 0x6a, 0xcd, 0x81, 0x04, 0xd8, 0xa5, 0xcd, - 0x41, 0xd8, 0xe2, 0xcd, 0x41, 0xd4, 0x07, 0xcd, 0x81, 0x37, 0xd5, 0x0d, - 0xcd, 0x81, 0x1b, 0xd6, 0x1d, 0xcd, 0x81, 0x0d, 0xd7, 0x3a, 0xcd, 0x81, - 0x04, 0xd8, 0x75, 0xcd, 0x41, 0xd8, 0xb0, 0xcd, 0x41, 0xd7, 0x56, 0xcd, - 0xc1, 0x00, 0xd8, 0xd0, 0xcd, 0x41, 0xd6, 0x2c, 0xcd, 0x81, 0x0a, 0x42, - 0xba, 0xf1, 0xc0, 0xcd, 0x01, 0xd8, 0x85, 0xcd, 0x41, 0xd7, 0x66, 0xcd, - 0x01, 0xd8, 0xa1, 0xcd, 0x41, 0xd5, 0x15, 0xcd, 0x81, 0x1f, 0xd6, 0x24, - 0xcd, 0x81, 0x0d, 0xd7, 0x42, 0xcd, 0x81, 0x04, 0xd8, 0x7d, 0xcd, 0x41, - 0xd8, 0xb8, 0xcd, 0x41, 0xd7, 0x5e, 0xcd, 0x81, 0x04, 0xd8, 0x9a, 0xcd, - 0x41, 0xd8, 0xd8, 0xcd, 0x41, 0xd6, 0x34, 0xcd, 0x81, 0x0d, 0xd7, 0x4f, - 0xcd, 0x81, 0x04, 0xd8, 0x8d, 0xcd, 0x41, 0xd8, 0xc8, 0xcd, 0x41, 0xd7, - 0x6e, 0xcd, 0x81, 0x04, 0xd8, 0xa9, 0xcd, 0x41, 0xd8, 0xe4, 0xcd, 0x41, - 0xd3, 0x02, 0xcd, 0x81, 0x8b, 0x01, 0xd4, 0x05, 0xcd, 0x81, 0x43, 0xd5, - 0x0c, 0xcd, 0x81, 0x1f, 0xd6, 0x1b, 0xcd, 0x81, 0x0d, 0xd7, 0x38, 0xcd, - 0x81, 0x04, 0xd8, 0x73, 0xcd, 0x41, 0xd8, 0xae, 0xcd, 0x41, 0xd7, 0x54, - 0xcd, 0x81, 0x04, 0xd8, 0x92, 0xcd, 0x41, 0xd8, 0xce, 0xcd, 0x41, 0xd6, - 0x2a, 0xcd, 0x81, 0x0d, 0xd7, 0x47, 0xcd, 0x81, 0x04, 0xd8, 0x83, 0xcd, - 0x41, 0xd8, 0xbe, 0xcd, 0x41, 0xd7, 0x64, 0xcd, 0x81, 0x04, 0xd8, 0x9f, - 0xcd, 0x41, 0xd8, 0xdd, 0xcd, 0x41, 0xd5, 0x13, 0xcd, 0x81, 0x1f, 0xd6, - 0x22, 0xcd, 0x81, 0x0d, 0xd7, 0x40, 0xcd, 0x81, 0x04, 0xd8, 0x7b, 0xcd, - 0x41, 0xd8, 0xb6, 0xcd, 0x41, 0xd7, 0x5c, 0xcd, 0x81, 0x04, 0xd8, 0x98, - 0xcd, 0x41, 0xd8, 0xd6, 0xcd, 0x41, 0xd6, 0x32, 0xcd, 0x81, 0x0d, 0xd7, - 0x4d, 0xcd, 0x81, 0x04, 0xd8, 0x8b, 0xcd, 0x41, 0xd8, 0xc6, 0xcd, 0x41, - 0xd7, 0x6c, 0xcd, 0x81, 0x04, 0xd8, 0xa7, 0xcd, 0x41, 0xd8, 0xe3, 0xcd, - 0x41, 0x94, 0x43, 0xd5, 0x0f, 0xcd, 0x81, 0x1f, 0xd6, 0x1f, 0xcd, 0x81, - 0x0d, 0xd7, 0x3c, 0xcd, 0x81, 0x04, 0xd8, 0x77, 0xcd, 0x41, 0xd8, 0xb2, - 0xcd, 0x41, 0xd7, 0x58, 0xcd, 0x81, 0x04, 0xd8, 0x95, 0xcd, 0x41, 0xd8, - 0xd2, 0xcd, 0x41, 0xd6, 0x2e, 0xcd, 0x81, 0x0d, 0xd7, 0x4a, 0xcd, 0x81, - 0x04, 0xd8, 0x87, 0xcd, 0x41, 0xd8, 0xc2, 0xcd, 0x41, 0xd7, 0x68, 0xcd, - 0x81, 0x04, 0xd8, 0xa3, 0xcd, 0x41, 0xd8, 0xe0, 0xcd, 0x41, 0xd5, 0x17, - 0xcd, 0x81, 0x1b, 0xd6, 0x26, 0xcd, 0x81, 0x0d, 0xd7, 0x44, 0xcd, 0x81, - 0x04, 0xd8, 0x7f, 0xcd, 0x41, 0xd8, 0xba, 0xcd, 0x41, 0xd7, 0x60, 0xcd, - 0xc1, 0x00, 0xd8, 0xda, 0xcd, 0x41, 0x96, 0x0a, 0x42, 0xba, 0xf1, 0xca, - 0xcd, 0x01, 0xd8, 0x8f, 0xcd, 0x41, 0xd7, 0x70, 0xcd, 0x01, 0xd8, 0xab, - 0xcd, 0x41, 0x02, 0x36, 0x01, 0x06, 0x49, 0x76, 0x97, 0x22, 0x24, 0x40, - 0x80, 0x32, 0x8d, 0x01, 0xff, 0x0a, 0xa0, 0x19, 0x19, 0x0f, 0xed, 0x6d, - 0x01, 0xff, 0xe3, 0x2d, 0x21, 0x00, 0xe8, 0x0c, 0x21, 0x00, 0xe9, 0x11, - 0x21, 0x00, 0xf2, 0x1c, 0x21, 0x00, 0xfa, 0x28, 0x21, 0x40, 0x50, 0x1f, - 0x23, 0xb6, 0x27, 0x00, 0x50, 0xb3, 0x02, 0xb5, 0x27, 0x00, 0x50, 0x83, - 0x3f, 0xb4, 0x27, 0x40, 0x46, 0x5a, 0xd7, 0xd3, 0x29, 0x00, 0xa3, 0xb4, - 0x07, 0xa4, 0xc4, 0x06, 0xa6, 0xa4, 0x06, 0xa8, 0xf7, 0x05, 0xac, 0xd4, - 0x04, 0xad, 0xe5, 0x03, 0xae, 0xd6, 0x03, 0x47, 0xce, 0xd0, 0xc4, 0x2b, - 0x00, 0xb0, 0xb1, 0x03, 0x56, 0xb1, 0x35, 0x53, 0x27, 0x00, 0xb2, 0xaa, - 0x02, 0xb3, 0x9f, 0x01, 0xb4, 0x6f, 0xb5, 0x2c, 0x03, 0x32, 0x00, 0x01, - 0xff, 0x06, 0x35, 0x00, 0x17, 0x08, 0x35, 0x0a, 0x01, 0xff, 0x47, 0x88, - 0x43, 0x98, 0xf7, 0x01, 0x47, 0x19, 0x0a, 0x9e, 0xf7, 0x01, 0x46, 0xab, - 0x05, 0x1d, 0x2b, 0x40, 0x47, 0x63, 0x65, 0x2e, 0x2b, 0x00, 0x49, 0x3a, - 0x46, 0xae, 0x25, 0x40, 0x59, 0x8d, 0x24, 0x7b, 0x26, 0x00, 0xb0, 0x01, - 0xff, 0x58, 0x35, 0x26, 0xa2, 0xf5, 0x01, 0x0a, 0x3d, 0x0b, 0x16, 0x04, - 0x6f, 0x02, 0x06, 0x5b, 0xcf, 0x01, 0x9d, 0x2b, 0x40, 0x4d, 0x7d, 0x34, - 0xe4, 0x25, 0x00, 0x4e, 0xc7, 0x28, 0xe5, 0x25, 0x40, 0x4f, 0xa5, 0x6a, - 0xeb, 0x23, 0x00, 0x58, 0xbd, 0x28, 0x81, 0xf7, 0x01, 0x4e, 0xd7, 0x0b, - 0xb4, 0x25, 0x00, 0x48, 0x01, 0x02, 0xb2, 0x25, 0x40, 0x48, 0x47, 0x3c, - 0x0e, 0x26, 0x00, 0x04, 0x5a, 0xed, 0x12, 0x52, 0x0c, 0x53, 0x7f, 0xf5, - 0x01, 0x44, 0xad, 0x75, 0xdf, 0x26, 0x00, 0x57, 0x21, 0x31, 0xd6, 0x26, - 0x40, 0x47, 0x88, 0x43, 0x97, 0xf7, 0x01, 0x47, 0x19, 0x0a, 0x9d, 0xf7, - 0x01, 0x46, 0xab, 0x05, 0x8c, 0xf7, 0x41, 0x4e, 0x2a, 0x74, 0x00, 0x27, - 0x00, 0x47, 0x62, 0x3d, 0x02, 0x27, 0x00, 0x4a, 0x1b, 0x5e, 0x17, 0x26, - 0x00, 0x53, 0x78, 0x49, 0x71, 0xf5, 0x01, 0x0e, 0x28, 0x78, 0x60, 0xad, - 0x34, 0x46, 0x7a, 0xdb, 0xc7, 0x26, 0x00, 0x49, 0x7a, 0xbb, 0x60, 0x26, - 0x00, 0x45, 0xac, 0x05, 0xa0, 0x25, 0x80, 0x0c, 0x43, 0xe3, 0x12, 0x05, - 0x26, 0x00, 0x4c, 0x81, 0x94, 0x00, 0x26, 0x40, 0x80, 0x01, 0xff, 0x46, - 0x45, 0x8b, 0x32, 0xf5, 0x01, 0x47, 0x3f, 0x67, 0xc0, 0x2b, 0x00, 0x48, - 0xaa, 0xc3, 0xf9, 0x23, 0x40, 0x04, 0x0e, 0x07, 0x06, 0x4a, 0x93, 0x93, - 0x3b, 0x26, 0x40, 0x47, 0x88, 0x43, 0x29, 0x2b, 0x00, 0x47, 0x19, 0x0a, - 0x2a, 0x2b, 0x00, 0xb3, 0x06, 0x53, 0xf5, 0x4c, 0xcd, 0xfb, 0x41, 0x45, - 0xac, 0x05, 0xaa, 0x25, 0x00, 0x43, 0xe3, 0x12, 0x51, 0x2b, 0x40, 0x46, - 0xe7, 0x02, 0x84, 0xf7, 0x01, 0x46, 0xab, 0x05, 0x8d, 0xf7, 0x41, 0x48, - 0x3b, 0x46, 0xac, 0x25, 0x00, 0x04, 0xc9, 0x00, 0x06, 0x46, 0xf2, 0xdb, - 0xf6, 0xf3, 0x41, 0x80, 0x56, 0x0a, 0x3d, 0x0b, 0x1e, 0x06, 0xa9, 0x01, - 0x01, 0xff, 0x45, 0xce, 0x00, 0xa1, 0x27, 0x80, 0x0c, 0x46, 0x2a, 0x21, - 0x4d, 0x20, 0x00, 0x55, 0xd5, 0x01, 0x9e, 0x2b, 0x40, 0x44, 0xe6, 0x01, - 0xa4, 0x27, 0x40, 0x4f, 0xa5, 0x6a, 0xe9, 0x23, 0x80, 0x27, 0x58, 0xbd, - 0x28, 0x82, 0xf7, 0x01, 0xb0, 0x13, 0x4e, 0xd7, 0x0b, 0xb8, 0x25, 0x00, - 0x48, 0x01, 0x02, 0xb6, 0x25, 0xc0, 0x00, 0x59, 0xb2, 0x22, 0xef, 0x23, - 0x40, 0x47, 0x3b, 0xc7, 0x53, 0x2b, 0x00, 0x46, 0xa1, 0x48, 0xba, 0x25, - 0x40, 0x52, 0xf8, 0x1d, 0xed, 0x23, 0x40, 0x09, 0x9c, 0x01, 0x06, 0x4e, - 0xee, 0x7b, 0xb3, 0xce, 0x41, 0x4e, 0x3f, 0x26, 0x9d, 0xf5, 0x01, 0x45, - 0x40, 0x13, 0x1b, 0x26, 0x40, 0x4c, 0xa9, 0x8a, 0xb0, 0x25, 0x00, 0x02, - 0x92, 0x01, 0x06, 0x46, 0x26, 0xd2, 0x88, 0xf5, 0x41, 0x44, 0x5c, 0x32, - 0xf2, 0xf3, 0x01, 0x45, 0x3d, 0xc7, 0x1f, 0x2b, 0x40, 0x4b, 0xe6, 0x90, - 0x6f, 0xcc, 0x01, 0x42, 0xaa, 0x17, 0x12, 0x27, 0x40, 0x06, 0x1a, 0x04, - 0x06, 0x4a, 0x89, 0xac, 0xb8, 0x26, 0x40, 0xa4, 0x4d, 0xac, 0x38, 0x57, - 0x0d, 0x30, 0xf5, 0x23, 0x80, 0x2b, 0xb3, 0x0d, 0x54, 0x47, 0x45, 0xf6, - 0x23, 0xc0, 0x00, 0x48, 0x3e, 0x67, 0xc5, 0x2b, 0x40, 0x05, 0x0d, 0x07, - 0x06, 0x45, 0xac, 0x05, 0xfc, 0x25, 0x40, 0x47, 0x88, 0x43, 0x99, 0xf7, - 0x01, 0x47, 0x19, 0x0a, 0x9f, 0xf7, 0x01, 0x46, 0xab, 0x05, 0xfe, 0x25, - 0x40, 0x48, 0x3e, 0x67, 0xc8, 0x2b, 0x40, 0x55, 0x94, 0x34, 0xf4, 0x23, - 0x80, 0x06, 0x46, 0x1a, 0x0a, 0x27, 0x2b, 0x40, 0x48, 0x3e, 0x67, 0xc7, - 0x2b, 0x40, 0x46, 0x89, 0x43, 0x25, 0x2b, 0x00, 0x55, 0xf2, 0x32, 0xf7, - 0x23, 0xc0, 0x00, 0x48, 0x3e, 0x67, 0xc6, 0x2b, 0x40, 0x05, 0xa1, 0x1b, - 0x70, 0x03, 0xc4, 0x00, 0x19, 0xaf, 0x01, 0xff, 0x04, 0x15, 0x01, 0x06, - 0x45, 0xfc, 0x09, 0xeb, 0x29, 0x40, 0x4d, 0x7d, 0x34, 0xe3, 0x25, 0x00, - 0x4e, 0xc7, 0x28, 0xe2, 0x25, 0x40, 0x80, 0x3a, 0x0a, 0x3d, 0x0b, 0x11, - 0x06, 0xa9, 0x01, 0x01, 0xff, 0x46, 0x2a, 0x21, 0x4c, 0x20, 0x00, 0x55, - 0xd5, 0x01, 0x9c, 0x2b, 0x40, 0x4f, 0xa5, 0x6a, 0xea, 0x23, 0x80, 0x18, - 0x58, 0xbd, 0x28, 0x80, 0xf7, 0x01, 0x47, 0xa0, 0x48, 0xc4, 0x25, 0x00, - 0x4e, 0xd7, 0x0b, 0xc2, 0x25, 0x00, 0x48, 0x01, 0x02, 0xc0, 0x25, 0x40, - 0x52, 0xf8, 0x1d, 0xee, 0x23, 0x40, 0x4a, 0x31, 0xaa, 0xd8, 0x26, 0x00, - 0x09, 0x9c, 0x01, 0x01, 0xff, 0x4e, 0x3f, 0x26, 0x9c, 0xf5, 0x01, 0x45, - 0x40, 0x13, 0x1a, 0x26, 0x40, 0x46, 0xe7, 0x02, 0x24, 0x2b, 0x80, 0x06, - 0x46, 0xab, 0x05, 0x1b, 0x2b, 0x40, 0x07, 0x99, 0xca, 0x01, 0xff, 0xac, - 0x0c, 0x55, 0x00, 0x3d, 0x6d, 0xcc, 0x01, 0x55, 0xd2, 0x3d, 0x6c, 0xcc, - 0x41, 0x53, 0xe9, 0x47, 0x6b, 0xcc, 0x01, 0x54, 0xcb, 0x43, 0x6e, 0xcc, - 0x41, 0x55, 0x7d, 0x38, 0xaa, 0xf5, 0x01, 0xa5, 0x0f, 0xaf, 0x01, 0xff, - 0x50, 0x5a, 0x65, 0x2c, 0x2b, 0x00, 0x47, 0x2b, 0xd4, 0xd7, 0x29, 0x40, - 0x43, 0x2c, 0x01, 0xa4, 0xf5, 0x81, 0x06, 0x45, 0xb5, 0xce, 0x22, 0x2b, - 0x40, 0x45, 0xfd, 0x26, 0x65, 0x26, 0x40, 0xac, 0x0f, 0xaf, 0x01, 0xff, - 0x44, 0x79, 0x1d, 0xbf, 0xf5, 0x01, 0x4f, 0xd9, 0x72, 0x26, 0x27, 0x40, - 0x42, 0x23, 0x02, 0x91, 0x26, 0x00, 0x46, 0x5f, 0x0f, 0x3f, 0x27, 0x40, - 0x46, 0x89, 0x43, 0xc6, 0x25, 0x80, 0x45, 0x03, 0xa6, 0x01, 0x19, 0xb2, - 0x01, 0xff, 0x07, 0x8b, 0xc7, 0x06, 0x45, 0x74, 0xe6, 0x22, 0xf3, 0x41, - 0x44, 0xe2, 0x33, 0xc3, 0x26, 0x00, 0x43, 0xd5, 0x17, 0xc2, 0x26, 0x40, - 0x58, 0x35, 0x26, 0xa3, 0xf5, 0x01, 0x0a, 0x3d, 0x0b, 0x06, 0x5b, 0xcf, - 0x01, 0x9f, 0x2b, 0x40, 0x4f, 0xa5, 0x6a, 0xec, 0x23, 0x00, 0x58, 0xbd, - 0x28, 0x83, 0xf7, 0x01, 0x4e, 0xd7, 0x0b, 0xbe, 0x25, 0x00, 0x48, 0x01, - 0x02, 0xbc, 0x25, 0x40, 0x80, 0x01, 0xff, 0x47, 0x3f, 0x67, 0xc1, 0x2b, - 0x00, 0x4d, 0x55, 0x84, 0x56, 0x27, 0x00, 0x48, 0xa2, 0xc6, 0xde, 0x2b, - 0x00, 0x44, 0xfe, 0x26, 0x66, 0x26, 0x00, 0x4f, 0x42, 0x73, 0xea, 0x29, - 0x40, 0x50, 0x4a, 0x61, 0x2c, 0x27, 0x00, 0x05, 0x8e, 0x86, 0x79, 0x45, - 0xe8, 0x02, 0xcf, 0x25, 0x80, 0x52, 0x48, 0x6a, 0xc5, 0x63, 0x26, 0x00, - 0x4e, 0x74, 0x7a, 0xe8, 0x26, 0x00, 0x06, 0x70, 0x40, 0x01, 0xff, 0x0e, - 0xb5, 0x04, 0x31, 0x0e, 0xe2, 0x77, 0x21, 0x0f, 0x08, 0x71, 0x11, 0x0c, - 0x32, 0x19, 0x01, 0xff, 0x4f, 0x37, 0x07, 0xaa, 0x2b, 0x00, 0x50, 0xb3, - 0x02, 0xab, 0x2b, 0x40, 0x4f, 0xe5, 0x0b, 0xaf, 0x2b, 0x00, 0x4d, 0x1f, - 0x20, 0xad, 0x2b, 0x40, 0x4f, 0xe5, 0x0b, 0xae, 0x2b, 0x00, 0x4d, 0x1f, - 0x20, 0xac, 0x2b, 0x40, 0x4f, 0x37, 0x07, 0xa8, 0x2b, 0x00, 0x50, 0xb3, - 0x02, 0xa9, 0x2b, 0x40, 0x80, 0x01, 0xff, 0x4a, 0x29, 0xa8, 0xfa, 0x23, - 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x4a, 0xbf, 0x40, 0xed, 0x29, 0x00, - 0x4e, 0x42, 0x7c, 0x89, 0x26, 0x00, 0x4f, 0x33, 0x73, 0x88, 0x26, 0x40, - 0x46, 0x48, 0xd7, 0x5d, 0x26, 0x80, 0xe7, 0x01, 0x4a, 0xd9, 0xa7, 0x49, - 0xfa, 0x81, 0xd9, 0x01, 0xab, 0x73, 0x44, 0xb6, 0xee, 0x5f, 0x26, 0x80, - 0x5b, 0x45, 0xe6, 0xbb, 0x5b, 0x26, 0x80, 0x43, 0x44, 0x0a, 0xef, 0x5c, - 0x26, 0x80, 0x2b, 0x07, 0xd8, 0x09, 0x01, 0xff, 0x46, 0x48, 0xd7, 0x27, - 0xfa, 0x01, 0xab, 0x12, 0x44, 0xb6, 0xee, 0x29, 0xfa, 0x01, 0x45, 0xe6, - 0xbb, 0x25, 0xfa, 0x01, 0x44, 0x0a, 0xef, 0x26, 0xfa, 0x41, 0x43, 0xa1, - 0x01, 0x24, 0xfa, 0x01, 0x45, 0xd5, 0x71, 0x28, 0xfa, 0x41, 0x09, 0x02, - 0x2c, 0x01, 0xff, 0x4e, 0x0b, 0x2c, 0x11, 0xfa, 0x01, 0x5b, 0x1a, 0x1d, - 0x3b, 0xfa, 0x41, 0x09, 0x02, 0x2c, 0x01, 0xff, 0x4e, 0x0b, 0x2c, 0x10, - 0xfa, 0x01, 0x5b, 0x1a, 0x1d, 0x3a, 0xfa, 0x41, 0x09, 0x02, 0x2c, 0x01, - 0xff, 0x4e, 0x0b, 0x2c, 0x14, 0xfa, 0x01, 0x5b, 0x1a, 0x1d, 0x3e, 0xfa, - 0x41, 0x43, 0xa1, 0x01, 0x5a, 0x26, 0x80, 0x4c, 0x45, 0xd5, 0x71, 0x5e, - 0x26, 0xc0, 0x00, 0x09, 0x02, 0x2c, 0x15, 0x8d, 0x01, 0xff, 0x46, 0x48, - 0xd7, 0x53, 0xfa, 0x01, 0x45, 0xe6, 0xbb, 0x51, 0xfa, 0x01, 0x44, 0x0a, - 0xef, 0x52, 0xfa, 0x41, 0x52, 0x84, 0x50, 0x07, 0xfa, 0x01, 0x4e, 0x0b, - 0x2c, 0x13, 0xfa, 0x01, 0x5f, 0x1e, 0x11, 0x1c, 0xfa, 0x01, 0xb4, 0x01, - 0xff, 0x5c, 0x8e, 0x17, 0x46, 0xfa, 0x01, 0x0b, 0x1b, 0x1d, 0x01, 0xff, - 0x4f, 0x26, 0x1d, 0x3d, 0xfa, 0x01, 0x53, 0xa9, 0x4c, 0x31, 0xfa, 0x41, - 0x09, 0x02, 0x2c, 0x01, 0xff, 0x4e, 0x0b, 0x2c, 0x0f, 0xfa, 0x01, 0x5b, - 0x1a, 0x1d, 0x39, 0xfa, 0x41, 0x57, 0x02, 0x2c, 0x4c, 0xfa, 0x41, 0x09, - 0x02, 0x2c, 0x01, 0xff, 0x4e, 0x0b, 0x2c, 0x12, 0xfa, 0x01, 0x5b, 0x1a, - 0x1d, 0x3c, 0xfa, 0x41, 0x04, 0x98, 0x24, 0x4d, 0x02, 0xa3, 0x01, 0x3d, - 0x44, 0x9e, 0xed, 0x59, 0xf4, 0x01, 0x02, 0x0f, 0x07, 0x27, 0x4c, 0x45, - 0x91, 0x23, 0x26, 0x00, 0xb2, 0x15, 0x43, 0x7f, 0x1c, 0xac, 0xf9, 0x01, - 0xb4, 0x01, 0xff, 0x49, 0xf9, 0xb4, 0xbf, 0x20, 0x00, 0x47, 0x75, 0x8f, - 0xe6, 0xfa, 0x41, 0xe4, 0x26, 0xf4, 0x01, 0x4a, 0x8b, 0xaf, 0x82, 0xf3, - 0x41, 0x46, 0x32, 0xd8, 0xe2, 0xf9, 0x01, 0x45, 0x2b, 0xe4, 0xb1, 0xf3, - 0x41, 0x4f, 0xcc, 0x70, 0xf9, 0x29, 0x00, 0x47, 0x69, 0x30, 0xf8, 0x29, - 0x40, 0xe5, 0xb2, 0xf6, 0x01, 0x43, 0xa3, 0x23, 0xb4, 0xf6, 0x41, 0xa4, - 0x92, 0x04, 0x0b, 0x1e, 0x9a, 0x85, 0x04, 0x52, 0x38, 0x51, 0x6c, 0x1c, - 0x01, 0x07, 0xc1, 0x05, 0xee, 0x01, 0x07, 0x2f, 0x39, 0x6d, 0x05, 0x2f, - 0x03, 0x44, 0x0b, 0xd1, 0x75, 0x06, 0x4e, 0x68, 0x7d, 0x43, 0x1c, 0x41, - 0xa1, 0x2c, 0xe5, 0x38, 0x1c, 0x01, 0xe9, 0x30, 0x1c, 0x81, 0x1f, 0xef, - 0x3a, 0x1c, 0x01, 0xf5, 0x32, 0x1c, 0x81, 0x12, 0x08, 0x9b, 0xbe, 0x01, - 0xff, 0xec, 0x36, 0x1c, 0x01, 0xf2, 0x34, 0x1c, 0xc1, 0x00, 0xf2, 0x35, - 0x1c, 0x41, 0xf5, 0x33, 0x1c, 0x41, 0xe9, 0x31, 0x1c, 0x41, 0xe1, 0x2f, - 0x1c, 0x01, 0xe9, 0x39, 0x1c, 0x01, 0xf5, 0x3b, 0x1c, 0x41, 0xa1, 0x17, - 0x4b, 0x4f, 0x23, 0x3c, 0x1c, 0x01, 0x02, 0x02, 0x00, 0x01, 0xff, 0x44, - 0x5d, 0x23, 0x3f, 0x1c, 0x01, 0x45, 0xa3, 0x4a, 0x3e, 0x1c, 0x41, 0x47, - 0xd1, 0x15, 0x3d, 0x1c, 0x01, 0x47, 0xf2, 0x86, 0x40, 0x1c, 0x41, 0x45, - 0xc3, 0x0a, 0x61, 0x1c, 0x81, 0x72, 0xa6, 0x53, 0x44, 0x46, 0x2a, 0x62, - 0x1c, 0x81, 0x46, 0x43, 0xbf, 0x0a, 0x5a, 0x1c, 0x01, 0xb3, 0x24, 0xb4, - 0x01, 0xff, 0x42, 0x92, 0x01, 0x63, 0x1c, 0x01, 0xa8, 0x0d, 0xb7, 0x01, - 0xff, 0x44, 0x29, 0x1d, 0x64, 0x1c, 0x01, 0xef, 0x5b, 0x1c, 0x41, 0x44, - 0x2c, 0x11, 0x65, 0x1c, 0x01, 0x43, 0x26, 0x01, 0x5c, 0x1c, 0x41, 0x44, - 0x27, 0x1d, 0x60, 0x1c, 0x81, 0x0d, 0x42, 0x60, 0x25, 0x5f, 0x1c, 0xc1, - 0x00, 0x42, 0x2e, 0x11, 0x68, 0x1c, 0x41, 0x42, 0x2e, 0x11, 0x69, 0x1c, - 0x41, 0x42, 0x2e, 0x11, 0x6b, 0x1c, 0x41, 0xa9, 0x0f, 0xaf, 0x01, 0xff, - 0x43, 0x2d, 0x11, 0x66, 0x1c, 0x01, 0x42, 0x42, 0x00, 0x5d, 0x1c, 0x41, - 0x43, 0x09, 0x4c, 0x67, 0x1c, 0x01, 0x42, 0x32, 0x00, 0x5e, 0x1c, 0x41, - 0xf9, 0x6a, 0x1c, 0x41, 0xe1, 0x00, 0x1c, 0x81, 0xfa, 0x01, 0xa2, 0xed, - 0x01, 0xa3, 0xe0, 0x01, 0xa4, 0xc7, 0x01, 0xe5, 0x0a, 0x1c, 0x01, 0xa7, - 0xb6, 0x01, 0x42, 0x22, 0x00, 0x2e, 0x1c, 0x01, 0xe9, 0x02, 0x1c, 0x81, - 0xa6, 0x01, 0xaa, 0x99, 0x01, 0xab, 0x8c, 0x01, 0x42, 0x74, 0x00, 0x29, - 0x1c, 0x01, 0x42, 0x6c, 0x00, 0x26, 0x1c, 0x01, 0xae, 0x68, 0xef, 0x0c, - 0x1c, 0x01, 0xb0, 0x58, 0x42, 0x71, 0x00, 0x28, 0x1c, 0x01, 0xb3, 0x40, - 0xb4, 0x27, 0xf5, 0x04, 0x1c, 0x81, 0x1e, 0xb6, 0x06, 0x42, 0x34, 0x22, - 0x27, 0x1c, 0x41, 0xe1, 0x2a, 0x1c, 0x01, 0x07, 0x9c, 0xbe, 0x01, 0xff, - 0xec, 0x08, 0x1c, 0x01, 0xf2, 0x06, 0x1c, 0xc1, 0x00, 0xf2, 0x07, 0x1c, - 0x41, 0xf5, 0x05, 0x1c, 0x41, 0xe1, 0x1d, 0x1c, 0x01, 0x42, 0x22, 0x00, - 0x1e, 0x1c, 0x01, 0xb4, 0x01, 0xff, 0xe1, 0x18, 0x1c, 0x01, 0x42, 0x22, - 0x00, 0x19, 0x1c, 0x41, 0xe1, 0x2d, 0x1c, 0x01, 0x42, 0x22, 0x00, 0x2b, - 0x1c, 0x01, 0x42, 0x15, 0x06, 0x2c, 0x1c, 0x41, 0xe1, 0x22, 0x1c, 0x01, - 0x42, 0x22, 0x00, 0x23, 0x1c, 0x41, 0xe1, 0x21, 0x1c, 0x01, 0x42, 0x24, - 0x02, 0x12, 0x1c, 0x01, 0x42, 0xff, 0x04, 0x1c, 0x1c, 0x01, 0x42, 0x34, - 0x22, 0x17, 0x1c, 0x41, 0xe1, 0x0e, 0x1c, 0x01, 0x42, 0x22, 0x00, 0x0f, - 0x1c, 0x41, 0xe1, 0x15, 0x1c, 0x01, 0x42, 0x22, 0x00, 0x16, 0x1c, 0x41, - 0xe9, 0x03, 0x1c, 0x41, 0xe1, 0x10, 0x1c, 0x01, 0x42, 0x22, 0x00, 0x11, - 0x1c, 0x41, 0xe1, 0x1f, 0x1c, 0x01, 0xa4, 0x06, 0x42, 0x22, 0x00, 0x20, - 0x1c, 0x41, 0xe1, 0x1a, 0x1c, 0x01, 0x42, 0x22, 0x00, 0x1b, 0x1c, 0x41, - 0xe1, 0x13, 0x1c, 0x01, 0x42, 0x22, 0x00, 0x14, 0x1c, 0x41, 0xe1, 0x24, - 0x1c, 0x01, 0x42, 0x22, 0x00, 0x25, 0x1c, 0x41, 0xe1, 0x01, 0x1c, 0x01, - 0xe9, 0x0b, 0x1c, 0x01, 0xf5, 0x0d, 0x1c, 0x41, 0xd1, 0x44, 0x1c, 0x01, - 0xd2, 0x45, 0x1c, 0x41, 0x44, 0xd1, 0x1f, 0x41, 0x1c, 0x01, 0x05, 0xc5, - 0x06, 0x06, 0x4b, 0xd8, 0x9e, 0x42, 0x1c, 0x41, 0x45, 0xc3, 0x0a, 0x58, - 0x1c, 0x01, 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0x59, 0x1c, 0x01, 0x43, 0xbf, - 0x0a, 0x51, 0x1c, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xa1, 0x1d, 0x50, - 0x1c, 0x41, 0x44, 0x25, 0x01, 0x53, 0x1c, 0x01, 0x42, 0x15, 0x02, 0x52, - 0x1c, 0x41, 0x44, 0x27, 0x1d, 0x57, 0x1c, 0x01, 0x42, 0x60, 0x25, 0x56, - 0x1c, 0x41, 0x43, 0xa7, 0x05, 0x55, 0x1c, 0x01, 0x43, 0xcb, 0x06, 0x54, - 0x1c, 0x41, 0xa1, 0xdc, 0x05, 0x45, 0xf1, 0xe1, 0x35, 0x22, 0x00, 0xe4, - 0xcf, 0xf6, 0x01, 0xa5, 0xc3, 0x05, 0x42, 0x0f, 0x07, 0x14, 0xf5, 0x81, - 0xa1, 0x05, 0xae, 0x14, 0xb4, 0x06, 0x4a, 0xf3, 0xb0, 0xc3, 0xf9, 0x41, - 0x47, 0xea, 0x07, 0x36, 0x21, 0x00, 0x44, 0x74, 0x09, 0x6c, 0x22, 0x40, - 0x05, 0x9e, 0xb3, 0x1b, 0xb4, 0x0d, 0x49, 0x4f, 0xbf, 0x2c, 0x23, 0xc0, - 0x00, 0x4c, 0x67, 0x22, 0xe3, 0x23, 0x40, 0x69, 0x95, 0x01, 0x5e, 0x2b, - 0x00, 0x45, 0x38, 0xe6, 0x71, 0xf3, 0x41, 0xa1, 0xd7, 0x04, 0x09, 0x5b, - 0x40, 0xa5, 0x04, 0x06, 0xc4, 0x06, 0xde, 0x03, 0x4a, 0x65, 0xa8, 0xfb, - 0x09, 0x00, 0x46, 0x2a, 0xda, 0xfa, 0x09, 0x00, 0x07, 0xc1, 0x05, 0x8c, - 0x01, 0x06, 0xf6, 0x7e, 0x7c, 0xb3, 0x44, 0x0b, 0xd1, 0x75, 0x01, 0xff, - 0xa1, 0x31, 0xe5, 0xc7, 0x09, 0x00, 0xe9, 0xbf, 0x09, 0x80, 0x24, 0xef, - 0xcb, 0x09, 0x00, 0xf5, 0xc1, 0x09, 0x80, 0x17, 0x08, 0x9b, 0xbe, 0x01, - 0xff, 0xec, 0xe2, 0x09, 0x80, 0x09, 0xf2, 0xc3, 0x09, 0xc0, 0x00, 0xf2, - 0xc4, 0x09, 0x40, 0xec, 0xe3, 0x09, 0x40, 0xf5, 0xc2, 0x09, 0x40, 0xe9, - 0xc0, 0x09, 0x40, 0xe1, 0xbe, 0x09, 0x00, 0xe9, 0xc8, 0x09, 0x00, 0xf5, - 0xcc, 0x09, 0x40, 0x4a, 0x81, 0xa5, 0xfe, 0x09, 0x00, 0x04, 0x30, 0x03, - 0x01, 0xff, 0xa1, 0x1d, 0x4b, 0x4f, 0x23, 0x81, 0x09, 0x00, 0x45, 0x5a, - 0x3e, 0xbc, 0x09, 0x00, 0x02, 0x02, 0x00, 0x01, 0xff, 0x44, 0x5d, 0x23, - 0xcd, 0x09, 0x00, 0x45, 0xa3, 0x4a, 0x83, 0x09, 0x40, 0x47, 0xd1, 0x15, - 0x82, 0x09, 0x00, 0x47, 0xf2, 0x86, 0xbd, 0x09, 0x40, 0x44, 0xb9, 0x00, - 0xf2, 0x09, 0x00, 0x44, 0x2f, 0x03, 0xf3, 0x09, 0x40, 0xe1, 0x85, 0x09, - 0x80, 0xaf, 0x02, 0xa2, 0xa2, 0x02, 0xa3, 0x95, 0x02, 0xa4, 0xfc, 0x01, - 0xe5, 0x8f, 0x09, 0x00, 0xa7, 0xeb, 0x01, 0x42, 0x22, 0x00, 0xb9, 0x09, - 0x00, 0xe9, 0x87, 0x09, 0x80, 0xdb, 0x01, 0xaa, 0xce, 0x01, 0xab, 0xba, - 0x01, 0x42, 0x74, 0x00, 0xb2, 0x09, 0x00, 0x42, 0x6c, 0x00, 0xae, 0x09, - 0x00, 0xae, 0x95, 0x01, 0xef, 0x93, 0x09, 0x00, 0xb0, 0x84, 0x01, 0xb2, - 0x60, 0xb3, 0x4e, 0xb4, 0x35, 0xf5, 0x89, 0x09, 0x80, 0x2c, 0xb6, 0x0d, - 0xb9, 0x01, 0xff, 0xe1, 0xaf, 0x09, 0x00, 0x42, 0x34, 0x22, 0xdf, 0x09, - 0x40, 0x4d, 0xd4, 0x80, 0xfc, 0x09, 0x00, 0x07, 0x9c, 0xbe, 0x01, 0xff, - 0xec, 0x8c, 0x09, 0x80, 0x09, 0xf2, 0x8b, 0x09, 0xc0, 0x00, 0xf2, 0xe0, - 0x09, 0x40, 0xec, 0xe1, 0x09, 0x40, 0xf5, 0x8a, 0x09, 0x40, 0xe1, 0xa4, - 0x09, 0x00, 0x42, 0x22, 0x00, 0xa5, 0x09, 0x00, 0xb4, 0x01, 0xff, 0xe1, - 0x9f, 0x09, 0x00, 0x42, 0x22, 0x00, 0xa0, 0x09, 0x40, 0xe1, 0xb8, 0x09, - 0x00, 0x42, 0x22, 0x00, 0xb6, 0x09, 0x00, 0x42, 0x15, 0x06, 0xb7, 0x09, - 0x40, 0xe1, 0xb0, 0x09, 0x80, 0x0c, 0x42, 0x22, 0x00, 0xdd, 0x09, 0x00, - 0x42, 0x71, 0x00, 0xdc, 0x09, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x4e, - 0x52, 0x78, 0xf1, 0x09, 0x00, 0x4f, 0xa1, 0x6e, 0xf0, 0x09, 0x40, 0xe1, - 0xaa, 0x09, 0x00, 0x42, 0x22, 0x00, 0xab, 0x09, 0x40, 0xe1, 0xa8, 0x09, - 0x00, 0x42, 0x24, 0x02, 0x99, 0x09, 0x00, 0x42, 0xff, 0x04, 0xa3, 0x09, - 0x00, 0x42, 0x34, 0x22, 0x9e, 0x09, 0x40, 0xe1, 0x95, 0x09, 0x00, 0x42, - 0x22, 0x00, 0x96, 0x09, 0xc0, 0x00, 0x46, 0x3e, 0xdb, 0xce, 0x09, 0x40, - 0xe1, 0x9c, 0x09, 0x00, 0x42, 0x22, 0x00, 0x9d, 0x09, 0x40, 0xe9, 0x88, - 0x09, 0x40, 0xe1, 0x97, 0x09, 0x00, 0x42, 0x22, 0x00, 0x98, 0x09, 0x40, - 0xe1, 0xa6, 0x09, 0x00, 0xa4, 0x06, 0x42, 0x22, 0x00, 0xa7, 0x09, 0x40, - 0xe1, 0xa1, 0x09, 0x00, 0x42, 0x22, 0x00, 0xa2, 0x09, 0x40, 0xe1, 0x9a, - 0x09, 0x00, 0x42, 0x22, 0x00, 0x9b, 0x09, 0x40, 0xe1, 0xac, 0x09, 0x00, - 0x42, 0x22, 0x00, 0xad, 0x09, 0x40, 0xe1, 0x86, 0x09, 0x00, 0xe9, 0x90, - 0x09, 0x00, 0xf5, 0x94, 0x09, 0x40, 0x45, 0xc3, 0x0a, 0xee, 0x09, 0x00, - 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0xef, 0x09, 0x00, 0x43, 0xbf, 0x0a, 0xe7, - 0x09, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xa1, 0x1d, 0xe6, 0x09, 0x40, - 0x44, 0x25, 0x01, 0xe9, 0x09, 0x00, 0x42, 0x15, 0x02, 0xe8, 0x09, 0x40, - 0x44, 0x27, 0x1d, 0xed, 0x09, 0x00, 0x42, 0x60, 0x25, 0xec, 0x09, 0x40, - 0x43, 0xa7, 0x05, 0xeb, 0x09, 0x00, 0x43, 0xcb, 0x06, 0xea, 0x09, 0x40, - 0x53, 0xb0, 0x47, 0xf9, 0x09, 0x00, 0x0a, 0xd7, 0x84, 0x01, 0xff, 0x44, - 0xca, 0x06, 0xf7, 0x09, 0x00, 0x43, 0xbf, 0x0a, 0xf4, 0x09, 0x80, 0x0f, - 0xb4, 0x01, 0xff, 0x44, 0x25, 0x01, 0xf6, 0x09, 0x00, 0x42, 0x15, 0x02, - 0xf5, 0x09, 0x40, 0x5a, 0xd6, 0x1d, 0xf8, 0x09, 0x40, 0x50, 0x94, 0x56, - 0xfd, 0x09, 0x00, 0x43, 0x9d, 0x85, 0x80, 0x09, 0x00, 0x4d, 0x9b, 0x74, - 0xd7, 0x09, 0x40, 0x80, 0x06, 0x48, 0x2a, 0xc4, 0xce, 0xf6, 0x41, 0x46, - 0x1c, 0xdc, 0xd1, 0xfa, 0x01, 0x46, 0xeb, 0x07, 0x7e, 0x23, 0x00, 0x58, - 0x5d, 0x2b, 0x15, 0xf5, 0x41, 0x45, 0x3f, 0xb4, 0x7a, 0xf3, 0x01, 0x43, - 0xbd, 0x01, 0xb2, 0xfa, 0x41, 0x50, 0xda, 0x5f, 0xd6, 0xf3, 0x01, 0x04, - 0x41, 0x9d, 0x20, 0x42, 0x5f, 0x01, 0xd8, 0xfa, 0x01, 0xb2, 0x0c, 0x4a, - 0xa9, 0xaf, 0x93, 0xf4, 0x01, 0x43, 0x32, 0x00, 0xab, 0xf9, 0x41, 0x45, - 0xe0, 0x07, 0x3b, 0xf4, 0x01, 0x4a, 0xfd, 0xa6, 0xd4, 0xf9, 0x41, 0x57, - 0xba, 0x2c, 0x9c, 0xf3, 0x01, 0x58, 0x55, 0x27, 0x9d, 0xf3, 0x01, 0x4c, - 0xb9, 0x8c, 0x6b, 0x26, 0x00, 0x4f, 0x8f, 0x71, 0x6c, 0x26, 0x40, 0x42, - 0x08, 0x00, 0x76, 0xf4, 0x81, 0x8b, 0x30, 0xa3, 0xcd, 0x2f, 0xa4, 0xbe, - 0x2f, 0xa7, 0xa9, 0x2f, 0xac, 0x8b, 0x27, 0x04, 0x91, 0x90, 0xca, 0x05, - 0xae, 0x99, 0x05, 0xb2, 0x82, 0x05, 0xb3, 0x80, 0x03, 0xf4, 0x87, 0xf9, - 0xc1, 0x00, 0x03, 0x84, 0x4b, 0x11, 0xe8, 0xc0, 0xf6, 0x81, 0x06, 0x44, - 0x14, 0xd7, 0x0b, 0xf5, 0x41, 0x43, 0x10, 0xb3, 0xc1, 0xf6, 0x41, 0x0f, - 0x6d, 0x32, 0xd7, 0x02, 0x07, 0xc1, 0x05, 0x6b, 0x03, 0xa6, 0x42, 0x5b, - 0xb3, 0x33, 0x0b, 0xd1, 0x75, 0x01, 0xff, 0xe5, 0xe7, 0x1b, 0x80, 0x25, - 0xe9, 0xea, 0x1b, 0x00, 0x05, 0x77, 0xcf, 0x15, 0xef, 0xec, 0x1b, 0x00, - 0x48, 0x1a, 0xc7, 0xe8, 0x1b, 0x00, 0xf5, 0xee, 0x1b, 0xc0, 0x00, 0x52, - 0xfc, 0x4d, 0xef, 0x1b, 0x40, 0xe9, 0xeb, 0x1b, 0x00, 0xef, 0xed, 0x1b, - 0x40, 0xe5, 0xe9, 0x1b, 0x40, 0x49, 0xd2, 0xb7, 0xe6, 0x1b, 0x00, 0x0c, - 0x35, 0x95, 0x01, 0xff, 0x45, 0x9e, 0xe4, 0xfe, 0x1b, 0x00, 0x48, 0xda, - 0xc5, 0xfc, 0x1b, 0x00, 0xb0, 0x01, 0xff, 0x47, 0x28, 0xcc, 0xff, 0x1b, - 0x00, 0x49, 0xff, 0xb7, 0xfd, 0x1b, 0x40, 0x45, 0x2a, 0xcc, 0xf2, 0x1b, - 0x00, 0x47, 0x1b, 0xd1, 0xf3, 0x1b, 0x40, 0xe1, 0xc0, 0x1b, 0x00, 0x42, - 0x16, 0x00, 0xc5, 0x1b, 0x00, 0x42, 0x37, 0x00, 0xe1, 0x1b, 0x00, 0x42, - 0xa1, 0x10, 0xd1, 0x1b, 0x00, 0x42, 0x24, 0x02, 0xce, 0x1b, 0x00, 0x42, - 0x22, 0x00, 0xc2, 0x1b, 0x00, 0xe9, 0xe4, 0x1b, 0x00, 0x42, 0xbd, 0x26, - 0xd0, 0x1b, 0x00, 0x47, 0x77, 0xcf, 0xc6, 0x1b, 0x00, 0x42, 0x74, 0x00, - 0xde, 0x1b, 0x00, 0xad, 0x8b, 0x01, 0xae, 0x6d, 0x42, 0x6c, 0x09, 0xc7, - 0x1b, 0x80, 0x60, 0x42, 0x71, 0x00, 0xd2, 0x1b, 0x00, 0xb3, 0x10, 0xf5, - 0xe5, 0x1b, 0x00, 0x42, 0xa9, 0x01, 0xcb, 0x1b, 0x00, 0x42, 0x34, 0x22, - 0xdb, 0x1b, 0x40, 0xe1, 0xd8, 0x1b, 0x00, 0x0a, 0x02, 0x4e, 0x06, 0x4a, - 0x0b, 0xad, 0xd6, 0x1b, 0x40, 0xe1, 0xc1, 0x1b, 0x00, 0x42, 0x24, 0x02, - 0xcf, 0x1b, 0x00, 0x42, 0x22, 0x00, 0xc3, 0x1b, 0x00, 0x42, 0x74, 0x00, - 0xdf, 0x1b, 0x00, 0x42, 0x6c, 0x00, 0xd5, 0x1b, 0x00, 0x42, 0x6c, 0x09, - 0xc8, 0x1b, 0x00, 0x42, 0x71, 0x00, 0xd3, 0x1b, 0x00, 0x42, 0x15, 0x06, - 0xd9, 0x1b, 0x00, 0x42, 0xa9, 0x01, 0xcc, 0x1b, 0x00, 0x42, 0x34, 0x22, - 0xdc, 0x1b, 0x40, 0x47, 0xaf, 0xcf, 0xcd, 0x1b, 0x40, 0xe1, 0xc9, 0x1b, - 0x00, 0x42, 0xa1, 0x10, 0xe2, 0x1b, 0x00, 0x42, 0x24, 0x02, 0xdd, 0x1b, - 0x00, 0x4a, 0xbb, 0xac, 0xd7, 0x1b, 0x00, 0x42, 0x34, 0x22, 0xe0, 0x1b, - 0x40, 0xe1, 0xd4, 0x1b, 0x80, 0x06, 0x42, 0x16, 0x00, 0xe3, 0x1b, 0x40, - 0x09, 0xd3, 0xb9, 0x01, 0xff, 0x42, 0x22, 0x00, 0xc4, 0x1b, 0x00, 0x42, - 0xff, 0x04, 0xca, 0x1b, 0x00, 0x42, 0x15, 0x06, 0xda, 0x1b, 0x40, 0xe8, - 0xf1, 0x1b, 0x00, 0x42, 0x1d, 0x01, 0xf0, 0x1b, 0x40, 0x45, 0xb4, 0xe2, - 0xbe, 0x26, 0x00, 0x43, 0x18, 0x09, 0xfa, 0xf9, 0x81, 0xeb, 0x01, 0x07, - 0xbf, 0xd2, 0x01, 0xff, 0x0a, 0xd6, 0x57, 0xbb, 0x01, 0x49, 0x15, 0x16, - 0xf5, 0x6a, 0x01, 0x07, 0xc1, 0x05, 0x01, 0xff, 0xe1, 0xe7, 0x6a, 0x01, - 0x42, 0x16, 0x00, 0xe2, 0x6a, 0x01, 0x42, 0x73, 0x02, 0xdf, 0x6a, 0x01, - 0xa4, 0x93, 0x01, 0xe5, 0xec, 0x6a, 0x81, 0x83, 0x01, 0x42, 0xe1, 0x07, - 0xd3, 0x6a, 0x01, 0xa7, 0x6f, 0x44, 0xff, 0xec, 0xda, 0x6a, 0x01, 0xe9, - 0xed, 0x6a, 0x01, 0x42, 0x4e, 0x0a, 0xd9, 0x6a, 0x01, 0xab, 0x53, 0x43, - 0x8b, 0x05, 0xd4, 0x6a, 0x01, 0xef, 0xe8, 0x6a, 0x81, 0x44, 0x42, 0x6c, - 0x09, 0xe5, 0x6a, 0x01, 0x42, 0x1b, 0x03, 0xd2, 0x6a, 0x01, 0x42, 0x1e, - 0x00, 0xe1, 0x6a, 0x01, 0xf5, 0xea, 0x6a, 0x81, 0x27, 0x42, 0xeb, 0x60, - 0xe3, 0x6a, 0x01, 0x42, 0xa9, 0x01, 0xdb, 0x6a, 0x81, 0x14, 0xb9, 0x06, - 0x42, 0x0f, 0x00, 0xdc, 0x6a, 0x41, 0x43, 0xdf, 0x10, 0xe4, 0x6a, 0x01, - 0x42, 0xc9, 0x02, 0xd5, 0x6a, 0x41, 0x43, 0xaa, 0x35, 0xe6, 0x6a, 0x41, - 0x42, 0x45, 0x07, 0xe0, 0x6a, 0x41, 0xef, 0xe9, 0x6a, 0x41, 0xe1, 0xd1, - 0x6a, 0x01, 0x43, 0xe9, 0x41, 0xd8, 0x6a, 0x41, 0x42, 0xc9, 0x09, 0xd6, - 0x6a, 0x01, 0x42, 0x1b, 0x0d, 0xdd, 0x6a, 0x41, 0xe5, 0xeb, 0x6a, 0x01, - 0x43, 0xac, 0x1e, 0xd0, 0x6a, 0x41, 0x43, 0x06, 0xed, 0xd7, 0x6a, 0x01, - 0xef, 0xde, 0x6a, 0x41, 0x04, 0xf9, 0x0a, 0x16, 0x03, 0x13, 0x01, 0x06, - 0x48, 0xcc, 0xb2, 0xf2, 0x6a, 0x41, 0x45, 0x82, 0x2c, 0xf1, 0x6a, 0x01, - 0x49, 0xcb, 0xb2, 0xf3, 0x6a, 0x41, 0x45, 0x82, 0x2c, 0xf0, 0x6a, 0x01, - 0x49, 0xc2, 0xb2, 0xf4, 0x6a, 0x41, 0x4d, 0x8f, 0x7f, 0xc0, 0xf3, 0x41, - 0x80, 0x06, 0x48, 0x7a, 0xc1, 0x88, 0xf4, 0x41, 0x45, 0x2d, 0xc2, 0xca, - 0xf4, 0x01, 0x47, 0xe3, 0xd0, 0xfc, 0xf9, 0x41, 0x43, 0xfc, 0x11, 0x4c, - 0xf3, 0x01, 0x42, 0x4e, 0x0a, 0x95, 0xfa, 0x01, 0xeb, 0xe6, 0xf3, 0xc1, - 0x00, 0x0a, 0x1b, 0xac, 0x01, 0xff, 0x4b, 0xf5, 0x98, 0xb5, 0xf4, 0x01, - 0x49, 0x73, 0xb6, 0xb6, 0xf4, 0x01, 0x4a, 0x5b, 0xad, 0xb7, 0xf4, 0x01, - 0x48, 0xc0, 0x7d, 0xb4, 0xf4, 0x41, 0x02, 0xe8, 0x04, 0x98, 0x21, 0x49, - 0x15, 0x16, 0xf3, 0xa6, 0x00, 0x07, 0xc1, 0x05, 0x12, 0x47, 0xc0, 0xd0, - 0xf2, 0xa6, 0x00, 0x4d, 0xd6, 0x33, 0xf7, 0xa6, 0x00, 0x49, 0xac, 0xbc, - 0xf6, 0xa6, 0x40, 0xe1, 0xa0, 0xa6, 0x00, 0x42, 0x27, 0x01, 0xa4, 0xa6, - 0x00, 0xa6, 0xd9, 0x20, 0xe9, 0xa9, 0xa6, 0x00, 0xab, 0x99, 0x20, 0xac, - 0xfe, 0x1f, 0xed, 0xb3, 0xa6, 0x80, 0xce, 0x1f, 0xae, 0xf2, 0x1e, 0xef, - 0xa7, 0xa6, 0x00, 0xb0, 0x93, 0x01, 0xb2, 0x6b, 0xb3, 0x3d, 0xb4, 0x23, - 0xf5, 0xa2, 0xa6, 0x00, 0xb7, 0x13, 0xb9, 0x01, 0xff, 0xe1, 0xc2, 0xa6, - 0x00, 0x42, 0xb1, 0x91, 0xbf, 0xa6, 0x00, 0x42, 0xf0, 0x99, 0xc1, 0xa6, - 0x40, 0xe1, 0xda, 0xa6, 0x00, 0x42, 0x87, 0x13, 0xc9, 0xa6, 0x40, 0xa1, - 0x0e, 0xa5, 0x04, 0xe9, 0xe4, 0xa6, 0x40, 0xee, 0xea, 0xa6, 0x00, 0xf4, - 0xe8, 0xa6, 0x40, 0xe1, 0xb0, 0xa6, 0x00, 0xe5, 0xa6, 0xa6, 0x40, 0x44, - 0xc5, 0xca, 0xec, 0xa6, 0x00, 0x43, 0xd3, 0xe8, 0xb9, 0xa6, 0x00, 0xa8, - 0x0a, 0xe9, 0xb7, 0xa6, 0x00, 0x42, 0x9c, 0x72, 0xb4, 0xa6, 0x40, 0x43, - 0xd3, 0xe8, 0xb8, 0xa6, 0x00, 0x42, 0xb1, 0x27, 0xb6, 0xa6, 0x00, 0xef, - 0xd6, 0xa6, 0x00, 0xf5, 0xc0, 0xa6, 0x40, 0x42, 0x44, 0x0f, 0xd1, 0xa6, - 0x00, 0xa5, 0x10, 0xa9, 0x04, 0xf5, 0xcc, 0xa6, 0x40, 0x42, 0x27, 0x01, - 0xad, 0xa6, 0x00, 0xe9, 0xac, 0xa6, 0x40, 0xe5, 0xa5, 0xa6, 0x00, 0xee, - 0xe1, 0xa6, 0x00, 0x42, 0xb5, 0xdd, 0xd0, 0xa6, 0x40, 0xe1, 0xab, 0xa6, - 0x00, 0xa5, 0xc7, 0x1d, 0x05, 0xd6, 0xe3, 0x11, 0xe9, 0xdd, 0xa6, 0x00, - 0xb5, 0x01, 0xff, 0x42, 0x44, 0x0f, 0xd7, 0xa6, 0x00, 0xe5, 0xc8, 0xa6, - 0x40, 0x02, 0x5a, 0x00, 0xc1, 0x18, 0x02, 0x26, 0x02, 0xac, 0x15, 0x02, - 0x28, 0x03, 0x8e, 0x10, 0x02, 0x06, 0x00, 0x90, 0x0a, 0x02, 0x60, 0x00, - 0xc2, 0x02, 0x02, 0x25, 0x00, 0x01, 0xff, 0x42, 0x27, 0x01, 0x06, 0x6a, - 0x01, 0x43, 0xf3, 0xf0, 0x2b, 0x6a, 0x01, 0xab, 0x8c, 0x02, 0xac, 0xfb, - 0x01, 0xed, 0x11, 0x6a, 0x81, 0xd9, 0x01, 0xae, 0x93, 0x01, 0xb0, 0x7f, - 0xb2, 0x5d, 0xb3, 0x35, 0xb4, 0x23, 0xf5, 0x04, 0x6a, 0x01, 0x44, 0xc2, - 0xef, 0x38, 0x6a, 0x01, 0xb7, 0x0d, 0xb9, 0x01, 0xff, 0xe1, 0x1d, 0x6a, - 0x01, 0x42, 0xb1, 0x91, 0x1b, 0x6a, 0x41, 0xe1, 0x2c, 0x6a, 0x01, 0x42, - 0x87, 0x13, 0x21, 0x6a, 0x41, 0xa1, 0x06, 0x42, 0xc2, 0x05, 0x35, 0x6a, - 0x41, 0xe1, 0x0e, 0x6a, 0x01, 0xe5, 0x08, 0x6a, 0x41, 0x44, 0xc5, 0xca, - 0x37, 0x6a, 0x01, 0x43, 0xd3, 0xe8, 0x15, 0x6a, 0x01, 0xa8, 0x0a, 0xe9, - 0x14, 0x6a, 0x01, 0x42, 0x9c, 0x72, 0x12, 0x6a, 0x41, 0x42, 0xb1, 0x27, - 0x13, 0x6a, 0x01, 0xef, 0x29, 0x6a, 0x01, 0xf5, 0x1c, 0x6a, 0x41, 0xa5, - 0x10, 0xa9, 0x04, 0xf5, 0x23, 0x6a, 0x41, 0x42, 0x27, 0x01, 0x0c, 0x6a, - 0x01, 0xe9, 0x0b, 0x6a, 0x41, 0xe5, 0x07, 0x6a, 0x01, 0xee, 0x31, 0x6a, - 0x01, 0x42, 0xb5, 0xdd, 0x25, 0x6a, 0x41, 0xa5, 0x06, 0x43, 0xc9, 0x93, - 0x2a, 0x6a, 0x41, 0xe5, 0x22, 0x6a, 0x01, 0x42, 0xb5, 0xdd, 0x1f, 0x6a, - 0x41, 0x43, 0x5c, 0x56, 0x0f, 0x6a, 0x01, 0xa7, 0x2f, 0xe9, 0x24, 0x6a, - 0x01, 0xaa, 0x1d, 0x43, 0xa4, 0x02, 0x1e, 0x6a, 0x01, 0x43, 0x9e, 0x17, - 0x20, 0x6a, 0x01, 0xf5, 0x19, 0x6a, 0x81, 0x06, 0x42, 0xf7, 0x19, 0x09, - 0x6a, 0x41, 0x42, 0x44, 0x0f, 0x18, 0x6a, 0x41, 0x43, 0xa4, 0x85, 0x10, - 0x6a, 0x01, 0x43, 0xc9, 0x93, 0x1a, 0x6a, 0x41, 0x42, 0x24, 0x02, 0x28, - 0x6a, 0x01, 0x45, 0xdf, 0xe4, 0x27, 0x6a, 0x41, 0xe1, 0x32, 0x6a, 0x01, - 0xa2, 0x0a, 0x44, 0x61, 0xec, 0x0d, 0x6a, 0x01, 0xef, 0x33, 0x6a, 0x41, - 0x42, 0x31, 0x12, 0x34, 0x6a, 0x01, 0x42, 0x92, 0x01, 0x30, 0x6a, 0x41, - 0xe1, 0x0a, 0x6a, 0x01, 0xe9, 0x2d, 0x6a, 0x01, 0x42, 0xb1, 0x91, 0x2e, - 0x6a, 0x41, 0xe1, 0x03, 0x6a, 0x01, 0xa5, 0x14, 0xef, 0x2f, 0x6a, 0x01, - 0x42, 0x6c, 0x09, 0x36, 0x6a, 0x01, 0xf5, 0x05, 0x6a, 0x01, 0x43, 0x91, - 0xa7, 0x16, 0x6a, 0x41, 0xee, 0x26, 0x6a, 0x01, 0xf4, 0x17, 0x6a, 0x41, - 0xe1, 0xd5, 0x69, 0x01, 0xa6, 0x8f, 0x07, 0xa7, 0xd8, 0x06, 0xe9, 0xd8, - 0x69, 0x01, 0xab, 0x9d, 0x06, 0xac, 0xec, 0x05, 0xad, 0x8e, 0x05, 0xae, - 0x81, 0x03, 0xef, 0xd7, 0x69, 0x01, 0xb0, 0x98, 0x02, 0xb2, 0xff, 0x01, - 0xb3, 0xc9, 0x01, 0xb4, 0x7a, 0xb6, 0x66, 0xb7, 0x53, 0xb9, 0x01, 0xff, - 0x42, 0xba, 0x05, 0xac, 0x69, 0x01, 0x02, 0x97, 0x02, 0x33, 0xa9, 0x27, - 0x03, 0xb1, 0x91, 0x17, 0xb5, 0x01, 0xff, 0x43, 0x0e, 0x41, 0xe1, 0x69, - 0x01, 0x42, 0x7b, 0x00, 0xb2, 0x69, 0x01, 0xee, 0xe5, 0x69, 0x01, 0xf1, - 0xe4, 0x69, 0x41, 0x45, 0xf3, 0x07, 0xe3, 0x69, 0x01, 0x48, 0x92, 0xc8, - 0xe2, 0x69, 0x41, 0x42, 0x27, 0x01, 0x94, 0x69, 0x01, 0xf4, 0xae, 0x69, - 0x41, 0x42, 0x44, 0x0f, 0x97, 0x69, 0x81, 0x08, 0xed, 0xbe, 0x69, 0x01, - 0xf8, 0xdf, 0x69, 0x41, 0xf4, 0xcf, 0x69, 0x41, 0x43, 0xd3, 0xe8, 0x9e, - 0x69, 0x01, 0xb5, 0x01, 0xff, 0xe5, 0xea, 0x69, 0x01, 0xef, 0x75, 0x69, - 0x41, 0xa5, 0x06, 0x42, 0xe9, 0x04, 0x6a, 0x69, 0x41, 0xe5, 0xec, 0x69, - 0x01, 0x43, 0xc9, 0x93, 0x9d, 0x69, 0x41, 0xa1, 0x34, 0xa5, 0x23, 0xaf, - 0x14, 0xb5, 0x01, 0xff, 0x42, 0x44, 0x0f, 0x96, 0x69, 0x01, 0xed, 0xaa, - 0x69, 0xc1, 0x00, 0x42, 0x44, 0x0f, 0x99, 0x69, 0x41, 0xef, 0x79, 0x69, - 0x81, 0x04, 0xf1, 0xd6, 0x69, 0x41, 0xee, 0x67, 0x69, 0x41, 0xee, 0x00, - 0x6a, 0x01, 0xf5, 0xfd, 0x69, 0xc1, 0x00, 0x43, 0xca, 0x93, 0x9c, 0x69, - 0x41, 0xe1, 0xdb, 0x69, 0x81, 0x0e, 0x48, 0x0a, 0xc3, 0x8f, 0x69, 0x01, - 0xed, 0x72, 0x69, 0x01, 0xf1, 0xdc, 0x69, 0x41, 0xf1, 0xa1, 0x69, 0x41, - 0x42, 0x31, 0x12, 0x85, 0x69, 0x01, 0xa5, 0x23, 0xa8, 0x0c, 0x42, 0xe9, - 0x04, 0x6d, 0x69, 0x01, 0x44, 0x70, 0xbe, 0x9b, 0x69, 0x41, 0x45, 0xc8, - 0x93, 0xa4, 0x69, 0x01, 0x42, 0xff, 0x17, 0xde, 0x69, 0x01, 0xef, 0xf3, - 0x69, 0xc1, 0x00, 0xf1, 0xf4, 0x69, 0x41, 0xe5, 0x76, 0x69, 0x01, 0xf4, - 0x90, 0x69, 0x41, 0xa1, 0x0c, 0x43, 0xd3, 0xe8, 0xef, 0x69, 0x01, 0x45, - 0x53, 0xe4, 0x82, 0x69, 0x41, 0xe5, 0xf0, 0x69, 0x01, 0xf1, 0x6e, 0x69, - 0x41, 0xa1, 0x47, 0xa5, 0x34, 0xe9, 0xf7, 0x69, 0x81, 0x22, 0xef, 0x98, - 0x69, 0x81, 0x17, 0xf5, 0xa0, 0x69, 0xc1, 0x00, 0xa1, 0x08, 0xe5, 0xe9, - 0x69, 0x01, 0xed, 0x91, 0x69, 0x41, 0xe5, 0x71, 0x69, 0x01, 0xf1, 0xca, - 0x69, 0x41, 0x42, 0x10, 0x00, 0xc2, 0x69, 0x41, 0xa5, 0x01, 0xff, 0x42, - 0x7b, 0x00, 0xb1, 0x69, 0x01, 0xf4, 0xcd, 0x69, 0x41, 0x42, 0x8a, 0x05, - 0x84, 0x69, 0x01, 0xb5, 0x01, 0xff, 0xf4, 0xbd, 0x69, 0x01, 0xf8, 0xe7, - 0x69, 0x41, 0x02, 0x9b, 0x01, 0x09, 0xe1, 0x6c, 0x69, 0xc1, 0x00, 0xed, - 0x78, 0x69, 0x41, 0x45, 0x04, 0xe3, 0xd1, 0x69, 0x01, 0x45, 0x2f, 0xe5, - 0xda, 0x69, 0x41, 0xe1, 0xf6, 0x69, 0x81, 0x80, 0x02, 0xa4, 0xd5, 0x01, - 0xa7, 0x66, 0xaa, 0x4a, 0x43, 0xe7, 0xc7, 0xa8, 0x69, 0x01, 0x02, 0xa4, - 0x02, 0x2d, 0xb4, 0x1f, 0x03, 0xc3, 0x78, 0x0f, 0xba, 0x01, 0xff, 0x42, - 0xb0, 0x35, 0xa7, 0x69, 0x01, 0x42, 0xf0, 0x99, 0xc1, 0x69, 0x41, 0x47, - 0x71, 0x09, 0xc0, 0x69, 0x01, 0x47, 0x24, 0xcd, 0xad, 0x69, 0x41, 0x42, - 0xba, 0x05, 0xce, 0x69, 0x01, 0x42, 0x1d, 0x04, 0xbc, 0x69, 0x41, 0x43, - 0x57, 0xa1, 0x7c, 0x69, 0x01, 0xb5, 0x01, 0xff, 0xe5, 0x81, 0x69, 0x01, - 0x42, 0x1f, 0x00, 0x6f, 0x69, 0x41, 0x45, 0xc2, 0xd0, 0x8a, 0x69, 0x01, - 0xa5, 0x01, 0xff, 0xe5, 0xd4, 0x69, 0x81, 0x06, 0x42, 0xb5, 0xdd, 0x83, - 0x69, 0x41, 0x46, 0x2c, 0xd5, 0xe8, 0x69, 0x41, 0xe1, 0xf2, 0x69, 0x01, - 0x46, 0x9e, 0xd8, 0xa3, 0x69, 0x01, 0xa7, 0x3b, 0xab, 0x15, 0xaf, 0x0b, - 0x43, 0xc9, 0x93, 0xe0, 0x69, 0xc1, 0x00, 0xf4, 0xf1, 0x69, 0x41, 0xf0, - 0x7d, 0x69, 0x01, 0xf1, 0x80, 0x69, 0x41, 0xe1, 0x73, 0x69, 0x81, 0x19, - 0x02, 0x97, 0x02, 0x0b, 0xb5, 0x01, 0xff, 0xed, 0xcb, 0x69, 0x01, 0xf0, - 0xb6, 0x69, 0x41, 0x43, 0xa4, 0x85, 0x89, 0x69, 0x01, 0xf8, 0x7f, 0x69, - 0x41, 0x43, 0x4d, 0x60, 0xb9, 0x69, 0x41, 0xa5, 0x13, 0xb5, 0x01, 0xff, - 0x4b, 0xda, 0x96, 0x93, 0x69, 0x01, 0xf0, 0xd0, 0x69, 0x01, 0x43, 0xdf, - 0x80, 0x86, 0x69, 0x41, 0x43, 0x37, 0xa7, 0x8d, 0x69, 0x01, 0x43, 0xc9, - 0x93, 0xbf, 0x69, 0xc1, 0x00, 0xf4, 0x77, 0x69, 0x41, 0xa1, 0x12, 0xa9, - 0x06, 0x42, 0xf3, 0x0a, 0x70, 0x69, 0x41, 0x42, 0xb0, 0x35, 0xb0, 0x69, - 0x01, 0xf1, 0x8e, 0x69, 0x41, 0x02, 0x5a, 0x00, 0x04, 0xf0, 0x66, 0x69, - 0x41, 0x48, 0xca, 0xc5, 0xdd, 0x69, 0x01, 0x48, 0x6a, 0xc8, 0x92, 0x69, - 0x41, 0xe5, 0xc5, 0x69, 0x41, 0xe1, 0xfb, 0x69, 0x81, 0x45, 0x02, 0x8c, - 0x05, 0x37, 0x42, 0x92, 0x01, 0xfa, 0x69, 0x01, 0x44, 0x8a, 0xec, 0xaf, - 0x69, 0x01, 0x02, 0x50, 0x47, 0x1d, 0xe9, 0xee, 0x69, 0x81, 0x12, 0x42, - 0x10, 0x00, 0xff, 0x69, 0x01, 0x43, 0xc9, 0x93, 0xc6, 0x69, 0x01, 0x42, - 0x02, 0x00, 0xc9, 0x69, 0x41, 0x42, 0x27, 0x01, 0xc3, 0x69, 0x41, 0xe1, - 0x87, 0x69, 0x01, 0x42, 0x92, 0x01, 0xa5, 0x69, 0x41, 0xe5, 0xa6, 0x69, - 0x01, 0x42, 0x1d, 0x04, 0x68, 0x69, 0x41, 0xe5, 0xb8, 0x69, 0x81, 0x08, - 0xf0, 0x8b, 0x69, 0x01, 0xf1, 0xfc, 0x69, 0x41, 0xed, 0x7e, 0x69, 0x41, - 0xa1, 0x1e, 0x45, 0x22, 0xe3, 0xb3, 0x69, 0x01, 0xaf, 0x04, 0xf5, 0xed, - 0x69, 0x41, 0xed, 0x7b, 0x69, 0x01, 0xaf, 0x04, 0xf1, 0xf8, 0x69, 0x41, - 0xee, 0x6b, 0x69, 0x01, 0xf4, 0x8c, 0x69, 0x41, 0x42, 0x57, 0x00, 0x9f, - 0x69, 0x01, 0xf0, 0x69, 0x69, 0x01, 0xf1, 0xd9, 0x69, 0x41, 0xa5, 0x21, - 0xe9, 0xfe, 0x69, 0x01, 0xef, 0xf9, 0x69, 0x01, 0x44, 0xc2, 0xee, 0x74, - 0x69, 0x01, 0xb5, 0x01, 0xff, 0x42, 0xc2, 0x05, 0xab, 0x69, 0x01, 0x42, - 0x1f, 0x00, 0x7a, 0x69, 0x01, 0xf4, 0xcc, 0x69, 0x41, 0xf4, 0xb7, 0x69, - 0x01, 0xb5, 0x01, 0xff, 0x42, 0x44, 0x0f, 0x9a, 0x69, 0x01, 0xf8, 0xe6, - 0x69, 0x41, 0x02, 0x8c, 0x05, 0x26, 0xa8, 0x01, 0xff, 0x45, 0xf2, 0xe0, - 0xa2, 0x69, 0x01, 0xa5, 0x06, 0x42, 0xe9, 0x04, 0x02, 0x6a, 0x41, 0xf4, - 0xba, 0x69, 0x01, 0xb5, 0x01, 0xff, 0x42, 0x44, 0x0f, 0xc7, 0x69, 0x01, - 0xee, 0x95, 0x69, 0x01, 0xf8, 0x88, 0x69, 0x41, 0xf4, 0xa9, 0x69, 0x01, - 0x42, 0xb5, 0xdd, 0xb5, 0x69, 0x41, 0xe1, 0xbb, 0x69, 0x81, 0x2a, 0x42, - 0x27, 0x01, 0xeb, 0x69, 0x01, 0x42, 0xe9, 0x04, 0xd3, 0x69, 0x01, 0xb5, - 0x01, 0xff, 0x80, 0x09, 0xe5, 0xb4, 0x69, 0xc1, 0x00, 0xf4, 0xc4, 0x69, - 0x41, 0x44, 0xc5, 0x16, 0xd2, 0x69, 0x01, 0xe9, 0xc8, 0x69, 0x01, 0x46, - 0x7c, 0xdc, 0xf5, 0x69, 0x41, 0xf1, 0x01, 0x6a, 0x41, 0xa6, 0xea, 0x05, - 0x02, 0x40, 0x00, 0xd9, 0x05, 0xab, 0x9a, 0x05, 0xac, 0xec, 0x04, 0xed, - 0x51, 0x69, 0x81, 0xeb, 0x03, 0xae, 0xfb, 0x01, 0xb0, 0xd3, 0x01, 0xb2, - 0xb4, 0x01, 0xb3, 0x66, 0xb4, 0x30, 0xb7, 0x22, 0xb9, 0x01, 0xff, 0x46, - 0x94, 0xd6, 0x05, 0x69, 0x01, 0x42, 0x92, 0x01, 0x0d, 0x69, 0x01, 0xb5, - 0x01, 0xff, 0xaf, 0x06, 0x43, 0x7a, 0xf1, 0x25, 0x69, 0x41, 0xed, 0x34, - 0x69, 0x01, 0xf0, 0x36, 0x69, 0x41, 0x42, 0xba, 0x05, 0xf2, 0x68, 0x01, - 0x44, 0x70, 0xbe, 0xfb, 0x68, 0x41, 0x42, 0x44, 0x0f, 0x4b, 0x69, 0x01, - 0xa5, 0x15, 0xe9, 0x61, 0x69, 0x01, 0x42, 0xb1, 0x91, 0x4c, 0x69, 0x01, - 0xf5, 0x11, 0x69, 0xc1, 0x00, 0x42, 0xf0, 0x04, 0x3d, 0x69, 0x41, 0x43, - 0x37, 0xa7, 0x28, 0x69, 0x01, 0xb5, 0x01, 0xff, 0x43, 0x0e, 0x41, 0x23, - 0x69, 0x01, 0xee, 0x41, 0x69, 0x01, 0xf4, 0x00, 0x69, 0x41, 0xa1, 0x42, - 0x45, 0xc8, 0x93, 0x0c, 0x69, 0x01, 0xa8, 0x17, 0x42, 0xf0, 0x04, 0x24, - 0x69, 0x01, 0xb5, 0x01, 0xff, 0x42, 0x44, 0x0f, 0x39, 0x69, 0x01, 0xe5, - 0x03, 0x69, 0x01, 0xf5, 0x52, 0x69, 0x41, 0xa5, 0x10, 0x42, 0xb1, 0x27, - 0x54, 0x69, 0x01, 0x42, 0xb1, 0x91, 0x5c, 0x69, 0x01, 0xf5, 0x58, 0x69, - 0x41, 0xe5, 0xfd, 0x68, 0x01, 0xb5, 0x01, 0xff, 0x42, 0x44, 0x0f, 0x01, - 0x69, 0x01, 0xf8, 0x55, 0x69, 0x41, 0xf0, 0x07, 0x69, 0x01, 0xf1, 0x64, - 0x69, 0x41, 0x43, 0xa4, 0x85, 0x27, 0x69, 0x01, 0x03, 0xb1, 0x01, 0x06, - 0x42, 0xb1, 0x27, 0x4e, 0x69, 0x41, 0x44, 0xb6, 0xe5, 0x60, 0x69, 0x01, - 0x43, 0x5a, 0x1a, 0x4a, 0x69, 0x41, 0x42, 0xba, 0x05, 0x35, 0x69, 0x01, - 0xa5, 0x13, 0x42, 0x8f, 0x04, 0x2d, 0x69, 0x01, 0xb5, 0x01, 0xff, 0xf1, - 0x5d, 0x69, 0x01, 0x42, 0xfe, 0x07, 0x1b, 0x69, 0x41, 0xe5, 0x5a, 0x69, - 0x01, 0x44, 0x9a, 0xef, 0x2e, 0x69, 0x41, 0xa4, 0xd2, 0x01, 0xa7, 0x7e, - 0xe9, 0x5b, 0x69, 0x01, 0xaa, 0x53, 0xb3, 0x31, 0xb4, 0x1d, 0xf5, 0x57, - 0x69, 0x01, 0xb9, 0x01, 0xff, 0x42, 0x57, 0x00, 0xfa, 0x68, 0x01, 0x42, - 0xc2, 0x05, 0x22, 0x69, 0x01, 0xe9, 0x4d, 0x69, 0x01, 0x42, 0x87, 0x13, - 0x2f, 0x69, 0x41, 0xa5, 0x06, 0x42, 0x9c, 0x72, 0x62, 0x69, 0x41, 0xe5, - 0x59, 0x69, 0x01, 0x42, 0x1d, 0x04, 0x38, 0x69, 0x41, 0xa8, 0x12, 0x03, - 0x57, 0xa1, 0x06, 0x42, 0x1d, 0x04, 0x40, 0x69, 0x41, 0xf0, 0x1f, 0x69, - 0x01, 0xf4, 0x2b, 0x69, 0x41, 0x42, 0x27, 0x01, 0xf8, 0x68, 0x01, 0x42, - 0xfe, 0x07, 0x46, 0x69, 0x41, 0x42, 0xba, 0x05, 0x02, 0x69, 0x01, 0x02, - 0x97, 0x02, 0x11, 0xe9, 0xf3, 0x68, 0x81, 0x06, 0x43, 0xc3, 0xef, 0x47, - 0x69, 0x41, 0x42, 0x27, 0x01, 0xf5, 0x68, 0x41, 0x43, 0xa4, 0x85, 0x0e, - 0x69, 0x01, 0xf4, 0xf7, 0x68, 0x41, 0xa7, 0x2b, 0xab, 0x01, 0xff, 0x42, - 0xba, 0x05, 0xfe, 0x68, 0x01, 0x02, 0x97, 0x02, 0x12, 0x43, 0x57, 0xa1, - 0x3c, 0x69, 0x01, 0x42, 0xf3, 0x0a, 0xfc, 0x68, 0x01, 0x43, 0x91, 0xa7, - 0x13, 0x69, 0x41, 0x43, 0xca, 0x93, 0x29, 0x69, 0x01, 0x42, 0x0d, 0x00, - 0x10, 0x69, 0x41, 0xa1, 0x12, 0x43, 0xd3, 0xe8, 0x3b, 0x69, 0x01, 0x43, - 0xa2, 0xca, 0x45, 0x69, 0x01, 0x44, 0xc8, 0xd4, 0x33, 0x69, 0x41, 0x42, - 0x57, 0x00, 0x31, 0x69, 0x81, 0x04, 0xf0, 0x43, 0x69, 0x41, 0x42, 0x44, - 0x0f, 0xf9, 0x68, 0x41, 0x42, 0x57, 0x00, 0x37, 0x69, 0x01, 0xa5, 0x06, - 0x42, 0x10, 0x00, 0x18, 0x69, 0x41, 0xe5, 0x15, 0x69, 0x01, 0x42, 0xb5, - 0xdd, 0x09, 0x69, 0x41, 0xa1, 0x6d, 0xa2, 0x58, 0xa5, 0x45, 0xa6, 0x26, - 0x02, 0x50, 0x47, 0x10, 0x43, 0x99, 0x07, 0x19, 0x69, 0x01, 0xf5, 0x53, - 0x69, 0x01, 0x43, 0x1a, 0xaa, 0x5e, 0x69, 0x41, 0x43, 0x87, 0x67, 0x1a, - 0x69, 0x01, 0x43, 0x57, 0xa1, 0x1c, 0x69, 0x01, 0x44, 0x7e, 0xee, 0x16, - 0x69, 0x41, 0x02, 0x97, 0x02, 0x0f, 0x43, 0x57, 0xa1, 0x32, 0x69, 0x01, - 0xef, 0x1d, 0x69, 0xc1, 0x00, 0xee, 0xf4, 0x68, 0x41, 0x42, 0x44, 0x0f, - 0x2a, 0x69, 0x01, 0xf4, 0x08, 0x69, 0x41, 0x43, 0x37, 0xa7, 0x50, 0x69, - 0x01, 0xb5, 0x01, 0xff, 0xee, 0x3e, 0x69, 0x01, 0xf4, 0x0b, 0x69, 0x41, - 0x42, 0x31, 0x12, 0x20, 0x69, 0x81, 0x06, 0x42, 0xef, 0x04, 0xf1, 0x68, - 0x41, 0x46, 0x25, 0x1d, 0x63, 0x69, 0x41, 0x45, 0xfa, 0xe2, 0x42, 0x69, - 0x01, 0x45, 0x07, 0xe3, 0x0a, 0x69, 0x41, 0xa5, 0x12, 0x43, 0x57, 0xa1, - 0xf6, 0x68, 0x01, 0x42, 0xb1, 0x91, 0x5f, 0x69, 0x01, 0x42, 0x1d, 0x04, - 0x1e, 0x69, 0x41, 0x43, 0x37, 0xa7, 0x4f, 0x69, 0x01, 0xf4, 0x30, 0x69, - 0x01, 0xb5, 0x01, 0xff, 0x43, 0x6d, 0xd8, 0x17, 0x69, 0x01, 0xed, 0x44, - 0x69, 0x41, 0xa5, 0x1f, 0xf5, 0x49, 0x69, 0x81, 0x0c, 0x44, 0xca, 0xef, - 0x21, 0x69, 0x01, 0x43, 0x91, 0xa7, 0x56, 0x69, 0x41, 0xee, 0x3a, 0x69, - 0x01, 0x42, 0xe9, 0x04, 0x06, 0x69, 0x01, 0xf1, 0x3f, 0x69, 0x41, 0xf4, - 0x04, 0x69, 0x01, 0xb5, 0x01, 0xff, 0x47, 0xd4, 0xcb, 0xff, 0x68, 0x01, - 0xed, 0x26, 0x69, 0x01, 0x48, 0xca, 0xc6, 0x0f, 0x69, 0x01, 0xf0, 0x2c, - 0x69, 0x41, 0x42, 0x31, 0x12, 0x12, 0x69, 0x01, 0x44, 0xc8, 0x93, 0x48, - 0x69, 0x41, 0x42, 0x31, 0x12, 0x65, 0x69, 0x01, 0x48, 0x6a, 0xc3, 0x14, - 0x69, 0x41, 0x44, 0x16, 0xec, 0xc0, 0x68, 0x01, 0x43, 0xf6, 0xf0, 0xbc, - 0x68, 0x01, 0xa7, 0xf5, 0x04, 0xab, 0xa7, 0x04, 0xac, 0x90, 0x04, 0xad, - 0x8d, 0x03, 0xae, 0xa3, 0x01, 0xb0, 0x8d, 0x01, 0x42, 0x3d, 0x00, 0xc3, - 0x68, 0x01, 0xb3, 0x63, 0xb4, 0x3e, 0x03, 0x79, 0x5d, 0x30, 0xb7, 0x22, - 0xb9, 0x01, 0xff, 0x42, 0x31, 0x12, 0xd9, 0x68, 0x01, 0x43, 0xef, 0x99, - 0xa7, 0x68, 0x01, 0xb5, 0x01, 0xff, 0x47, 0xa0, 0xca, 0xa2, 0x68, 0x01, - 0xed, 0x91, 0x68, 0x01, 0x43, 0x7a, 0xf1, 0xe4, 0x68, 0x41, 0x47, 0x13, - 0xcc, 0x92, 0x68, 0x01, 0x42, 0x50, 0x02, 0xd1, 0x68, 0x41, 0x45, 0x0b, - 0xe1, 0xc1, 0x68, 0x01, 0xf8, 0xb1, 0x68, 0x41, 0x46, 0x88, 0xd6, 0xac, - 0x68, 0x01, 0xa5, 0x11, 0x02, 0x52, 0x00, 0x01, 0xff, 0x45, 0xe8, 0xe0, - 0xae, 0x68, 0x01, 0x44, 0x7e, 0xd9, 0xc6, 0x68, 0x41, 0xf4, 0xf0, 0x68, - 0x01, 0x45, 0xd1, 0xe8, 0xba, 0x68, 0x41, 0xa5, 0x14, 0xa8, 0x06, 0x44, - 0xd1, 0xab, 0xaf, 0x68, 0x41, 0x42, 0xff, 0x17, 0xe8, 0x68, 0x01, 0x43, - 0xc3, 0xef, 0xdb, 0x68, 0x41, 0x44, 0x6e, 0xef, 0xdc, 0x68, 0x01, 0x42, - 0xb5, 0xdd, 0xaa, 0x68, 0x41, 0x42, 0x92, 0x01, 0xef, 0x68, 0x01, 0xa9, - 0x01, 0xff, 0xee, 0xee, 0x68, 0x01, 0x45, 0x3c, 0xe7, 0x9c, 0x68, 0x41, - 0xa1, 0xda, 0x01, 0xa4, 0xb3, 0x01, 0xa7, 0x74, 0xaa, 0x52, 0xb3, 0x2d, - 0xb4, 0x13, 0x50, 0x7a, 0x67, 0x99, 0x68, 0x01, 0xba, 0x01, 0xff, 0xe1, - 0x90, 0x68, 0x01, 0x43, 0xa5, 0x56, 0xa3, 0x68, 0x41, 0x42, 0x31, 0x12, - 0xb4, 0x68, 0x01, 0xa5, 0x06, 0x46, 0xba, 0xdd, 0x9a, 0x68, 0x41, 0xee, - 0xd4, 0x68, 0x01, 0x45, 0xae, 0xe8, 0xb9, 0x68, 0x41, 0xe1, 0xbe, 0x68, - 0x01, 0x45, 0x6f, 0xbe, 0xa5, 0x68, 0x01, 0x43, 0xf9, 0xf0, 0xbf, 0x68, - 0x01, 0x42, 0xe9, 0x04, 0xd3, 0x68, 0x01, 0xb5, 0x01, 0xff, 0xee, 0xd6, - 0x68, 0x01, 0x47, 0x4c, 0xd1, 0xc7, 0x68, 0x41, 0xa1, 0x14, 0xa5, 0x06, - 0x43, 0xc3, 0xef, 0xad, 0x68, 0x41, 0x43, 0x37, 0xa7, 0xc8, 0x68, 0x01, - 0x42, 0xb5, 0xdd, 0xe5, 0x68, 0x41, 0x42, 0x8a, 0x05, 0xc4, 0x68, 0x01, - 0xed, 0xcf, 0x68, 0x41, 0x42, 0xb0, 0x35, 0xeb, 0x68, 0x01, 0xa7, 0x14, - 0xab, 0x06, 0x42, 0xe9, 0x04, 0xd0, 0x68, 0x41, 0x42, 0xb0, 0x35, 0x95, - 0x68, 0x01, 0x49, 0xb1, 0xbd, 0x8f, 0x68, 0x41, 0x42, 0x92, 0x01, 0x93, - 0x68, 0x01, 0xf5, 0xca, 0x68, 0xc1, 0x00, 0x48, 0xaa, 0xc0, 0xb0, 0x68, - 0x01, 0x43, 0xc0, 0x10, 0xd2, 0x68, 0x01, 0xed, 0xbb, 0x68, 0x01, 0x42, - 0x10, 0x00, 0xb5, 0x68, 0x41, 0xa1, 0x1a, 0x02, 0x97, 0x02, 0x0c, 0x43, - 0x59, 0x93, 0xab, 0x68, 0x01, 0x44, 0x9b, 0xcf, 0x9d, 0x68, 0x41, 0x45, - 0x10, 0xe1, 0x94, 0x68, 0x01, 0xf4, 0xbd, 0x68, 0x41, 0xed, 0xd7, 0x68, - 0x01, 0xf0, 0xda, 0x68, 0x41, 0x46, 0x86, 0xdb, 0xb2, 0x68, 0x01, 0xf1, - 0xec, 0x68, 0x41, 0xa1, 0x61, 0xa2, 0x12, 0x46, 0xf2, 0xd8, 0xb8, 0x68, - 0x01, 0x43, 0x57, 0xa1, 0xe6, 0x68, 0x01, 0x43, 0xc9, 0x93, 0xe7, 0x68, - 0x41, 0xa1, 0x35, 0xa5, 0x1c, 0xe9, 0xdd, 0x68, 0x81, 0x0d, 0xb5, 0x01, - 0xff, 0x43, 0xa4, 0x85, 0xcc, 0x68, 0x01, 0xe5, 0xa4, 0x68, 0x41, 0x45, - 0x3c, 0xe7, 0xb7, 0x68, 0x01, 0xf4, 0xa6, 0x68, 0x41, 0x45, 0xd7, 0xe2, - 0x97, 0x68, 0x01, 0x43, 0xdf, 0x80, 0xc2, 0x68, 0x01, 0xb5, 0x01, 0xff, - 0xed, 0x9b, 0x68, 0x01, 0xf8, 0xe1, 0x68, 0x41, 0x02, 0x5a, 0x00, 0x06, - 0x43, 0xf6, 0x19, 0xdf, 0x68, 0x41, 0x4c, 0x5d, 0x8b, 0x9e, 0x68, 0x01, - 0x46, 0x22, 0xdc, 0xe3, 0x68, 0x41, 0x80, 0x0f, 0xa5, 0x01, 0xff, 0x43, - 0x20, 0x9d, 0xde, 0x68, 0x01, 0x42, 0x2f, 0x03, 0xcb, 0x68, 0x41, 0x47, - 0x85, 0xcf, 0xb3, 0x68, 0x01, 0x45, 0x10, 0xe6, 0xd8, 0x68, 0x41, 0xa1, - 0x0a, 0x42, 0xff, 0x17, 0xed, 0x68, 0x01, 0xf5, 0xcd, 0x68, 0x41, 0xed, - 0xc5, 0x68, 0x01, 0xf0, 0xb6, 0x68, 0x41, 0x42, 0x31, 0x12, 0xa9, 0x68, - 0x01, 0xa5, 0x13, 0x45, 0x80, 0x67, 0xa8, 0x68, 0x01, 0xb5, 0x01, 0xff, - 0x4a, 0x9d, 0xac, 0xd5, 0x68, 0x01, 0xf4, 0xce, 0x68, 0x41, 0x02, 0x92, - 0x00, 0x20, 0xf4, 0xc9, 0x68, 0x01, 0xb5, 0x01, 0xff, 0x43, 0x17, 0xf1, - 0xa1, 0x68, 0x01, 0xed, 0xe2, 0x68, 0x01, 0xb3, 0x01, 0xff, 0x43, 0xd3, - 0xe8, 0xe0, 0x68, 0x01, 0x46, 0x7c, 0xd9, 0x9f, 0x68, 0x41, 0x47, 0x35, - 0xce, 0xea, 0x68, 0x01, 0x43, 0xa3, 0xd1, 0xe9, 0x68, 0x41, 0x44, 0xfe, - 0xeb, 0x98, 0x68, 0x01, 0x02, 0x22, 0x00, 0x01, 0xff, 0xf0, 0xa0, 0x68, - 0x01, 0x43, 0xdf, 0x80, 0x96, 0x68, 0x41, 0x02, 0xa0, 0x19, 0x81, 0x03, - 0x07, 0x6d, 0xce, 0xf2, 0x02, 0xab, 0xc6, 0x02, 0xac, 0xa9, 0x02, 0xad, - 0xcc, 0x01, 0xae, 0x78, 0xb0, 0x5e, 0xb3, 0x34, 0xb4, 0x1b, 0x44, 0xaa, - 0xef, 0x73, 0x68, 0x01, 0x45, 0x3a, 0xe9, 0x76, 0x68, 0x01, 0xb9, 0x01, - 0xff, 0x4c, 0x49, 0x8a, 0x62, 0x68, 0x01, 0x45, 0x27, 0xe3, 0x5e, 0x68, - 0x41, 0x43, 0x9f, 0x87, 0x78, 0x68, 0x01, 0x02, 0x2e, 0x02, 0x01, 0xff, - 0x49, 0x70, 0xb9, 0x58, 0x68, 0x01, 0x45, 0x10, 0xe6, 0x68, 0x68, 0x41, - 0x46, 0x84, 0xcf, 0x77, 0x68, 0x01, 0x45, 0x1d, 0xe3, 0x5a, 0x68, 0x01, - 0x02, 0xb0, 0x01, 0x0c, 0x43, 0x57, 0xa1, 0x59, 0x68, 0x01, 0x42, 0x87, - 0x13, 0x7d, 0x68, 0x41, 0x46, 0x48, 0xdd, 0x69, 0x68, 0x01, 0x46, 0xc0, - 0xdd, 0x6a, 0x68, 0x41, 0x44, 0xe6, 0xeb, 0x72, 0x68, 0x01, 0x45, 0xb9, - 0xe2, 0x61, 0x68, 0x01, 0x42, 0x52, 0x00, 0x67, 0x68, 0x01, 0x46, 0xe4, - 0xdd, 0x81, 0x68, 0x41, 0x47, 0xa9, 0xcd, 0x65, 0x68, 0x01, 0xa7, 0x23, - 0xb3, 0x15, 0x4b, 0x56, 0xa1, 0x64, 0x68, 0x01, 0xb9, 0x01, 0xff, 0x45, - 0x06, 0xe1, 0x80, 0x68, 0x01, 0x47, 0xd6, 0xce, 0x6d, 0x68, 0x41, 0x42, - 0x92, 0x01, 0x8b, 0x68, 0x01, 0x44, 0x00, 0xce, 0x57, 0x68, 0x41, 0xa7, - 0x0c, 0x4a, 0x13, 0xaa, 0x74, 0x68, 0x01, 0x42, 0xe9, 0x04, 0x8e, 0x68, - 0x41, 0x43, 0x9f, 0x87, 0x8a, 0x68, 0x01, 0x46, 0x8c, 0xd8, 0x75, 0x68, - 0x01, 0x43, 0x5e, 0xa1, 0x7a, 0x68, 0xc1, 0x00, 0x46, 0x2a, 0x1c, 0x7b, - 0x68, 0x41, 0xe1, 0x8c, 0x68, 0x81, 0x44, 0xa2, 0x22, 0x02, 0x97, 0x02, - 0x14, 0xa6, 0x06, 0x47, 0x22, 0xd1, 0x7f, 0x68, 0x41, 0x44, 0xae, 0x35, - 0x7c, 0x68, 0x01, 0x49, 0xb4, 0xba, 0x6b, 0x68, 0x41, 0xf1, 0x79, 0x68, - 0x01, 0x48, 0x9a, 0xc8, 0x82, 0x68, 0x41, 0xa1, 0x12, 0x44, 0xc6, 0xe8, - 0x7e, 0x68, 0x01, 0x4a, 0xcd, 0xa9, 0x6c, 0x68, 0x01, 0x43, 0x5e, 0xa1, - 0x84, 0x68, 0x41, 0x47, 0x8b, 0xca, 0x5c, 0x68, 0x01, 0x44, 0xde, 0x80, - 0x5f, 0x68, 0x41, 0x03, 0x9c, 0x85, 0x01, 0xff, 0x46, 0x92, 0xd8, 0x87, - 0x68, 0x01, 0x43, 0x65, 0xf1, 0x88, 0x68, 0x41, 0xa1, 0x0c, 0x42, 0xc2, - 0x05, 0x89, 0x68, 0x01, 0x48, 0x8a, 0xc6, 0x5b, 0x68, 0x41, 0x44, 0xce, - 0xeb, 0x71, 0x68, 0x01, 0x4c, 0xf5, 0x8f, 0x63, 0x68, 0x41, 0x42, 0x57, - 0x00, 0x60, 0x68, 0x01, 0x02, 0x97, 0x02, 0x0d, 0xa9, 0x01, 0xff, 0x43, - 0xdf, 0x17, 0x5d, 0x68, 0x01, 0xf1, 0x8d, 0x68, 0x41, 0x43, 0xa4, 0x85, - 0x86, 0x68, 0x01, 0x43, 0x35, 0xf1, 0x6e, 0x68, 0x01, 0x44, 0xee, 0xef, - 0x70, 0x68, 0x41, 0xee, 0x6f, 0x68, 0x01, 0x44, 0x23, 0xe3, 0x66, 0x68, - 0x41, 0xe5, 0x85, 0x68, 0x01, 0x42, 0xb5, 0xdd, 0x83, 0x68, 0x41, 0x44, - 0x92, 0xec, 0x39, 0x68, 0x01, 0xa7, 0xcc, 0x04, 0xab, 0xa5, 0x04, 0xac, - 0x85, 0x04, 0xad, 0x8a, 0x03, 0xae, 0xdc, 0x01, 0xb0, 0x88, 0x01, 0x43, - 0x80, 0x05, 0x3a, 0x68, 0x01, 0xb3, 0x3b, 0xb4, 0x14, 0xb5, 0x06, 0x43, - 0xd2, 0x06, 0x52, 0x68, 0x41, 0x48, 0x2a, 0xc0, 0x20, 0x68, 0x01, 0x46, - 0x68, 0xdb, 0x44, 0x68, 0x41, 0x02, 0x97, 0x02, 0x15, 0x48, 0xaa, 0xc4, - 0x06, 0x68, 0x01, 0xb5, 0x01, 0xff, 0x47, 0xb3, 0xbd, 0x0c, 0x68, 0x01, - 0x43, 0x6d, 0xd8, 0x2e, 0x68, 0x41, 0x43, 0x0e, 0x41, 0x4a, 0x68, 0x01, - 0x46, 0x7e, 0xdd, 0x31, 0x68, 0x41, 0x46, 0x98, 0xd8, 0x11, 0x68, 0x01, - 0xa8, 0x1c, 0x43, 0xbd, 0x48, 0x23, 0x68, 0x01, 0xaf, 0x06, 0x42, 0x9c, - 0x72, 0x15, 0x68, 0x41, 0x44, 0x3e, 0xee, 0x30, 0x68, 0x01, 0xf1, 0x3c, - 0x68, 0x01, 0xf4, 0x4b, 0x68, 0x41, 0xa9, 0x13, 0x4c, 0xb1, 0x91, 0x40, - 0x68, 0x01, 0xb5, 0x01, 0xff, 0x47, 0xfd, 0xcd, 0x05, 0x68, 0x01, 0xed, - 0x37, 0x68, 0x41, 0x4a, 0xf3, 0xab, 0x08, 0x68, 0x01, 0x43, 0xdf, 0x80, - 0x3e, 0x68, 0x41, 0xa1, 0x31, 0x42, 0xc2, 0x05, 0x2a, 0x68, 0x01, 0x03, - 0xb6, 0x00, 0x06, 0x42, 0x50, 0x02, 0x2d, 0x68, 0x41, 0x0b, 0x4c, 0x9d, - 0x11, 0x0d, 0x9a, 0x85, 0x01, 0xff, 0x42, 0x16, 0x00, 0x0a, 0x68, 0x01, - 0x45, 0x74, 0xb9, 0x09, 0x68, 0x41, 0x42, 0x16, 0x00, 0x03, 0x68, 0x01, - 0x45, 0x74, 0xb9, 0x02, 0x68, 0x41, 0x49, 0x4c, 0x8a, 0x28, 0x68, 0x01, - 0xa1, 0x0c, 0x45, 0xb1, 0xe5, 0x1d, 0x68, 0x01, 0x44, 0xdc, 0x96, 0x1b, - 0x68, 0x41, 0xed, 0x4c, 0x68, 0x01, 0x43, 0xdf, 0x80, 0x42, 0x68, 0x41, - 0xa1, 0x9e, 0x01, 0x02, 0xa1, 0x10, 0x8d, 0x01, 0x42, 0x92, 0x01, 0x54, - 0x68, 0x01, 0xa7, 0x68, 0x43, 0xb0, 0x42, 0x2c, 0x68, 0x01, 0x43, 0x3f, - 0xee, 0x47, 0x68, 0x01, 0xab, 0x4e, 0x02, 0xa4, 0x02, 0x40, 0xb4, 0x22, - 0xb9, 0x0f, 0xba, 0x01, 0xff, 0x46, 0xac, 0xc4, 0x07, 0x68, 0x01, 0x47, - 0xf3, 0xd3, 0x1f, 0x68, 0x41, 0x42, 0xc2, 0x05, 0x49, 0x68, 0x01, 0xe9, - 0x4f, 0x68, 0xc1, 0x00, 0x4c, 0xc1, 0x93, 0x41, 0x68, 0x41, 0x42, 0xba, - 0x05, 0x3f, 0x68, 0x81, 0x06, 0x45, 0x79, 0xe6, 0x12, 0x68, 0x41, 0x80, - 0x01, 0xff, 0x44, 0xea, 0xed, 0x19, 0x68, 0x01, 0x44, 0x5a, 0xee, 0x22, - 0x68, 0x41, 0xe1, 0x51, 0x68, 0x01, 0x43, 0x57, 0xa1, 0x4d, 0x68, 0x41, - 0x45, 0xa2, 0xac, 0x43, 0x68, 0x01, 0x44, 0xbe, 0x06, 0x14, 0x68, 0x41, - 0x44, 0x1c, 0x01, 0x0d, 0x68, 0x01, 0x43, 0xd5, 0x58, 0x45, 0x68, 0x01, - 0x03, 0x1a, 0xf1, 0x01, 0xff, 0x45, 0xad, 0xc4, 0x00, 0x68, 0x01, 0x45, - 0x2e, 0xe6, 0x16, 0x68, 0x41, 0x49, 0x4c, 0x8a, 0x29, 0x68, 0x01, 0x49, - 0xbe, 0xb3, 0x34, 0x68, 0x41, 0x46, 0xac, 0xc4, 0x04, 0x68, 0x01, 0xf1, - 0x55, 0x68, 0x41, 0xa1, 0x39, 0x02, 0x16, 0x00, 0x2b, 0x4b, 0xe7, 0x99, - 0x25, 0x68, 0x01, 0x45, 0xf2, 0xd8, 0x24, 0x68, 0x01, 0xaf, 0x06, 0x49, - 0x6e, 0xbe, 0x10, 0x68, 0x41, 0x4a, 0xcb, 0xab, 0x1e, 0x68, 0x01, 0x02, - 0xe9, 0x04, 0x01, 0xff, 0x43, 0x8f, 0x8c, 0x36, 0x68, 0x01, 0x43, 0x35, - 0xf1, 0x26, 0x68, 0x41, 0x43, 0xf6, 0x19, 0x48, 0x68, 0x01, 0xf1, 0x56, - 0x68, 0x41, 0xa5, 0x0c, 0x45, 0x15, 0xe6, 0x0f, 0x68, 0x01, 0x47, 0x99, - 0xd1, 0x3d, 0x68, 0x41, 0x44, 0x96, 0xed, 0x1a, 0x68, 0x01, 0xed, 0x4e, - 0x68, 0x81, 0x0c, 0x43, 0xf6, 0x19, 0x32, 0x68, 0x01, 0x42, 0x2f, 0x03, - 0x46, 0x68, 0x41, 0x46, 0x3c, 0xd7, 0x0b, 0x68, 0x01, 0x45, 0x74, 0xb9, - 0x0b, 0x68, 0x01, 0x44, 0x17, 0x70, 0x2b, 0x68, 0x01, 0x44, 0xae, 0xef, - 0x0e, 0x68, 0x41, 0x44, 0xd2, 0xeb, 0x17, 0x68, 0x01, 0x46, 0x86, 0xd8, - 0x18, 0x68, 0x01, 0x45, 0x6f, 0xe6, 0x38, 0x68, 0x01, 0xf5, 0x53, 0x68, - 0xc1, 0x00, 0x43, 0x6d, 0xd8, 0x2f, 0x68, 0x41, 0xa1, 0x18, 0xa5, 0x0c, - 0x43, 0x32, 0xf1, 0x3b, 0x68, 0x01, 0x43, 0x5e, 0xa1, 0x35, 0x68, 0x41, - 0xf4, 0x33, 0x68, 0x01, 0x48, 0x4a, 0xc9, 0x13, 0x68, 0x41, 0x42, 0xe1, - 0x07, 0x27, 0x68, 0x01, 0xf1, 0x50, 0x68, 0x41, 0x48, 0x8a, 0xc1, 0x01, - 0x68, 0x01, 0x05, 0x17, 0xd9, 0x01, 0xff, 0x46, 0x16, 0xd9, 0x21, 0x68, - 0x01, 0x43, 0xdf, 0x80, 0x1c, 0x68, 0x41, 0xe5, 0xca, 0xa6, 0x00, 0x42, - 0xb5, 0xdd, 0xc5, 0xa6, 0x40, 0xe1, 0xdb, 0xa6, 0x00, 0x43, 0x5c, 0x56, - 0xb1, 0xa6, 0x00, 0xa7, 0x3d, 0xe9, 0xcf, 0xa6, 0x00, 0xaa, 0x25, 0x43, - 0xa4, 0x02, 0xc3, 0xa6, 0x00, 0xb4, 0x11, 0xf5, 0xbd, 0xa6, 0x80, 0x06, - 0x42, 0xf7, 0x19, 0xa8, 0xa6, 0x40, 0x42, 0x44, 0x0f, 0xbc, 0xa6, 0x40, - 0x42, 0x27, 0x01, 0xc7, 0xa6, 0x00, 0x42, 0x9c, 0x72, 0xeb, 0xa6, 0x40, - 0x43, 0xa4, 0x85, 0xb2, 0xa6, 0x00, 0x42, 0x27, 0x01, 0xc6, 0xa6, 0x00, - 0x43, 0xc9, 0x93, 0xbe, 0xa6, 0x40, 0xe1, 0xd5, 0xa6, 0x00, 0x42, 0x24, - 0x02, 0xd4, 0xa6, 0x00, 0x45, 0xdf, 0xe4, 0xd3, 0xa6, 0x40, 0xe1, 0xe3, - 0xa6, 0x00, 0xa2, 0x18, 0xa5, 0x0c, 0xe9, 0xce, 0xa6, 0x00, 0xef, 0xe6, - 0xa6, 0x00, 0xf5, 0xb5, 0xa6, 0x40, 0x43, 0x37, 0xa7, 0xaf, 0xa6, 0x00, - 0xee, 0xe2, 0xa6, 0x40, 0x42, 0x31, 0x12, 0xe7, 0xa6, 0x00, 0x42, 0x92, - 0x01, 0xe0, 0xa6, 0x40, 0xe1, 0xaa, 0xa6, 0x00, 0x44, 0x62, 0xec, 0xae, - 0xa6, 0x00, 0xe9, 0xdc, 0xa6, 0x00, 0x42, 0xb1, 0x91, 0xde, 0xa6, 0x00, - 0xf5, 0xcd, 0xa6, 0x40, 0xe1, 0xa1, 0xa6, 0x00, 0xa5, 0x25, 0xe9, 0xe5, - 0xa6, 0x00, 0xef, 0xdf, 0xa6, 0x80, 0x10, 0x42, 0x6c, 0x09, 0xe9, 0xa6, - 0x00, 0xf5, 0xa3, 0xa6, 0x00, 0x43, 0x91, 0xa7, 0xba, 0xa6, 0x40, 0x44, - 0xb2, 0xec, 0xef, 0xa6, 0x00, 0x43, 0x74, 0xf1, 0xee, 0xa6, 0x40, 0xee, - 0xd2, 0xa6, 0x00, 0xf4, 0xbb, 0xa6, 0x00, 0x42, 0xb5, 0xdd, 0xc4, 0xa6, - 0x40, 0x45, 0xf2, 0xe0, 0xed, 0xa6, 0x00, 0x42, 0x27, 0x01, 0xcb, 0xa6, - 0x00, 0x42, 0xe9, 0x04, 0xd9, 0xa6, 0x00, 0xf5, 0xd8, 0xa6, 0x40, 0x43, - 0x03, 0x12, 0xf4, 0xa6, 0x00, 0xad, 0x01, 0xff, 0x0c, 0xfd, 0x8a, 0x06, - 0x42, 0x6c, 0x00, 0xf5, 0xa6, 0x40, 0x47, 0xa1, 0xcf, 0xf0, 0xa6, 0x00, - 0x49, 0x96, 0xbd, 0xf1, 0xa6, 0x40, 0x06, 0x27, 0x82, 0x71, 0xac, 0x01, - 0xff, 0x48, 0xaa, 0xbf, 0xf6, 0xf9, 0x01, 0x48, 0x52, 0xc3, 0x70, 0xfa, - 0x01, 0xaf, 0x01, 0xff, 0x42, 0x10, 0x00, 0x88, 0xf3, 0x81, 0x52, 0x02, - 0xc6, 0x00, 0x01, 0xff, 0x02, 0x5d, 0x00, 0x0a, 0x48, 0x47, 0x9c, 0xf4, - 0xf5, 0x01, 0xf8, 0x17, 0x27, 0x40, 0x4b, 0x44, 0x9c, 0xf6, 0xf5, 0x01, - 0xf8, 0x10, 0x26, 0xc0, 0x00, 0x06, 0x50, 0x00, 0x01, 0xff, 0xa2, 0x16, - 0x45, 0x1e, 0x14, 0x11, 0x26, 0x00, 0x47, 0x18, 0xd0, 0xbd, 0x2b, 0x00, - 0x48, 0x47, 0x9c, 0xf5, 0xf5, 0x01, 0xf8, 0x12, 0x26, 0x40, 0x45, 0xe9, - 0xcb, 0xf3, 0xf5, 0x01, 0x04, 0xa6, 0x24, 0x01, 0xff, 0x45, 0x1e, 0x14, - 0xf9, 0xf5, 0x01, 0x48, 0x47, 0x9c, 0xf7, 0xf5, 0x41, 0x50, 0x4d, 0x1c, - 0x49, 0x27, 0x40, 0x49, 0x49, 0xb3, 0x44, 0x1b, 0x00, 0x06, 0x24, 0x6d, - 0x85, 0x07, 0x06, 0xc4, 0x06, 0xbe, 0x06, 0x0f, 0x1b, 0x6d, 0xad, 0x06, - 0x07, 0xc1, 0x05, 0xaa, 0x03, 0x0f, 0x40, 0x31, 0xcd, 0x01, 0x02, 0x6c, - 0x09, 0x9d, 0x01, 0x05, 0x2f, 0x03, 0x70, 0x0b, 0xd1, 0x75, 0x06, 0x45, - 0x26, 0xe9, 0x5c, 0x1b, 0x40, 0x48, 0xf2, 0xc4, 0x3c, 0x1b, 0x80, 0x59, - 0x45, 0xba, 0xe6, 0x42, 0x1b, 0x80, 0x4c, 0x47, 0x41, 0xd2, 0x3a, 0x1b, - 0x80, 0x3f, 0x44, 0x3d, 0xd3, 0x38, 0x1b, 0x80, 0x32, 0xb4, 0x0d, 0x43, - 0x97, 0x95, 0x36, 0x1b, 0xc0, 0x00, 0x45, 0xcc, 0xde, 0x37, 0x1b, 0x40, - 0x45, 0xa3, 0x27, 0x3e, 0x1b, 0x80, 0x06, 0x45, 0xe1, 0xca, 0x35, 0x1b, - 0x40, 0x80, 0x01, 0xff, 0x44, 0x59, 0xcb, 0x3f, 0x1b, 0x80, 0x06, 0x46, - 0xe0, 0xca, 0x40, 0x1b, 0x40, 0x47, 0xdf, 0xca, 0x41, 0x1b, 0x40, 0x45, - 0xb3, 0xde, 0x39, 0x1b, 0x40, 0x47, 0xdf, 0xca, 0x3b, 0x1b, 0x40, 0x47, - 0xdf, 0xca, 0x43, 0x1b, 0x40, 0x47, 0xdf, 0xca, 0x3d, 0x1b, 0x40, 0x45, - 0xb5, 0xe1, 0x04, 0x1b, 0x00, 0x45, 0x05, 0xe2, 0x02, 0x1b, 0x00, 0x47, - 0x79, 0xd2, 0x34, 0x1b, 0x00, 0x46, 0x2a, 0xdd, 0x03, 0x1b, 0x00, 0x04, - 0x86, 0xef, 0x01, 0xff, 0x46, 0x4f, 0x23, 0x01, 0x1b, 0x00, 0x45, 0x37, - 0xe7, 0x00, 0x1b, 0x40, 0xad, 0x16, 0x43, 0x9f, 0x01, 0x5a, 0x1b, 0xc0, - 0x00, 0x80, 0x01, 0xff, 0x45, 0x9c, 0xe1, 0x7f, 0x1b, 0x00, 0x47, 0x9b, - 0xbf, 0x7d, 0x1b, 0x40, 0x43, 0x3c, 0x1e, 0x5b, 0x1b, 0x80, 0x06, 0x45, - 0xf5, 0xe2, 0x60, 0x1b, 0x40, 0x48, 0x9a, 0xbf, 0x7e, 0x1b, 0x40, 0x0a, - 0xd6, 0x57, 0x97, 0x01, 0xa4, 0x51, 0x0a, 0x77, 0xaa, 0x26, 0x0b, 0xd5, - 0x9f, 0x01, 0xff, 0x08, 0xfa, 0x5f, 0x11, 0x06, 0xe0, 0xdb, 0x01, 0xff, - 0x42, 0x23, 0x02, 0x75, 0x1b, 0x00, 0x42, 0x83, 0x0e, 0x74, 0x1b, 0x40, - 0x42, 0x6d, 0x00, 0x77, 0x1b, 0x00, 0x42, 0x65, 0x08, 0x76, 0x1b, 0x40, - 0x09, 0xf0, 0xb4, 0x17, 0x06, 0xe6, 0xdb, 0x01, 0xff, 0x43, 0x1c, 0x01, - 0x78, 0x1b, 0x00, 0x43, 0xa1, 0x01, 0x7c, 0x1b, 0x00, 0x43, 0x75, 0x44, - 0x79, 0x1b, 0x40, 0x42, 0x6d, 0x00, 0x7a, 0x1b, 0x00, 0x42, 0x65, 0x08, - 0x7b, 0x1b, 0x40, 0xa1, 0x20, 0xa5, 0x12, 0x43, 0xa1, 0x01, 0x66, 0x1b, - 0x00, 0x43, 0x63, 0x0e, 0x61, 0x1b, 0x00, 0x43, 0x75, 0x44, 0x63, 0x1b, - 0x40, 0x42, 0x1d, 0x01, 0x62, 0x1b, 0x00, 0x43, 0x75, 0x44, 0x68, 0x1b, - 0x40, 0x43, 0xfd, 0x09, 0x67, 0x1b, 0x00, 0x43, 0xa1, 0x01, 0x69, 0x1b, - 0x00, 0x42, 0x1d, 0x01, 0x64, 0x1b, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x44, - 0xaa, 0xec, 0x6a, 0x1b, 0x00, 0x46, 0x2a, 0xdd, 0x65, 0x1b, 0x40, 0x45, - 0xa6, 0xe1, 0x72, 0x1b, 0x00, 0x45, 0xf0, 0xe2, 0x6c, 0x1b, 0x00, 0x44, - 0x3e, 0x85, 0x73, 0x1b, 0x00, 0x47, 0x6a, 0x7e, 0x6f, 0x1b, 0x00, 0x04, - 0x98, 0xb8, 0x06, 0x45, 0x0e, 0xe8, 0x6b, 0x1b, 0x40, 0x42, 0xc3, 0x01, - 0x6e, 0x1b, 0x80, 0x0d, 0x42, 0x1f, 0x01, 0x6d, 0x1b, 0xc0, 0x00, 0x4d, - 0x64, 0x7e, 0x70, 0x1b, 0x40, 0x4d, 0x64, 0x7e, 0x71, 0x1b, 0x40, 0xa1, - 0xdc, 0x02, 0x42, 0x16, 0x00, 0x29, 0x1b, 0x80, 0xce, 0x02, 0x42, 0x37, - 0x00, 0x18, 0x1b, 0x80, 0xc0, 0x02, 0x42, 0xa1, 0x10, 0x24, 0x1b, 0x80, - 0x9c, 0x02, 0xa5, 0x8d, 0x02, 0x42, 0x24, 0x02, 0x15, 0x1b, 0x80, 0xff, - 0x01, 0x42, 0x22, 0x00, 0x33, 0x1b, 0x00, 0x45, 0x44, 0xe4, 0x07, 0x1b, - 0x80, 0xeb, 0x01, 0x42, 0xbd, 0x26, 0x1a, 0x1b, 0x80, 0xdd, 0x01, 0xab, - 0xc3, 0x01, 0x42, 0x74, 0x00, 0x2e, 0x1b, 0x80, 0xae, 0x01, 0x42, 0x6c, - 0x00, 0x2b, 0x1b, 0x00, 0xae, 0x8e, 0x01, 0x45, 0x5b, 0xe6, 0x11, 0x1b, - 0x80, 0x80, 0x01, 0x42, 0x6c, 0x09, 0x27, 0x1b, 0x80, 0x73, 0x42, 0x71, - 0x00, 0x2d, 0x1b, 0x80, 0x5f, 0x42, 0x15, 0x06, 0x32, 0x1b, 0x80, 0x47, - 0xb4, 0x25, 0x45, 0xa4, 0xe8, 0x09, 0x1b, 0x80, 0x18, 0x48, 0x82, 0xc9, - 0x49, 0x1b, 0x00, 0x42, 0xa9, 0x01, 0x2f, 0x1b, 0x00, 0x42, 0x34, 0x22, - 0x2c, 0x1b, 0x00, 0x49, 0x46, 0xbf, 0x4a, 0x1b, 0x40, 0x47, 0xdf, 0xca, - 0x0a, 0x1b, 0x40, 0xe1, 0x22, 0x1b, 0x80, 0x06, 0x49, 0x61, 0xbf, 0x47, - 0x1b, 0x40, 0x80, 0x01, 0xff, 0x45, 0x02, 0xe5, 0x1d, 0x1b, 0x00, 0x4f, - 0xb0, 0x6e, 0x1e, 0x1b, 0x00, 0x44, 0x1e, 0xc2, 0x23, 0x1b, 0x40, 0x03, - 0x63, 0x22, 0x01, 0xff, 0x42, 0x24, 0x02, 0x30, 0x1b, 0x00, 0x42, 0x6c, - 0x09, 0x31, 0x1b, 0x40, 0x45, 0x43, 0xd2, 0x0b, 0x1b, 0xc0, 0x00, 0x47, - 0xdf, 0xca, 0x0c, 0x1b, 0x40, 0x46, 0x44, 0xd5, 0x28, 0x1b, 0x40, 0x47, - 0xdf, 0xca, 0x12, 0x1b, 0x40, 0xe1, 0x26, 0x1b, 0x80, 0x0c, 0x42, 0x24, - 0x02, 0x17, 0x1b, 0x00, 0x42, 0x34, 0x22, 0x1c, 0x1b, 0x40, 0x47, 0xc3, - 0xca, 0x21, 0x1b, 0x40, 0x46, 0xf4, 0xc4, 0x0d, 0x1b, 0xc0, 0x00, 0x47, - 0xdf, 0xca, 0x0e, 0x1b, 0x40, 0xe1, 0x13, 0x1b, 0x80, 0x06, 0x49, 0x5d, - 0xb7, 0x46, 0x1b, 0x40, 0x4a, 0xb5, 0x6e, 0x14, 0x1b, 0x00, 0x47, 0x2e, - 0xce, 0x45, 0x1b, 0x40, 0x45, 0xb8, 0xde, 0x1b, 0x1b, 0x40, 0x47, 0xdf, - 0xca, 0x08, 0x1b, 0x40, 0x45, 0xa4, 0xde, 0x16, 0x1b, 0x40, 0x47, 0x2e, - 0xce, 0x48, 0x1b, 0x00, 0x44, 0x8b, 0x2c, 0x0f, 0x1b, 0x40, 0x02, 0x6b, - 0x00, 0x01, 0xff, 0x43, 0x6b, 0x02, 0x25, 0x1b, 0x00, 0x05, 0xb1, 0x6e, - 0x01, 0xff, 0x49, 0xa3, 0xb3, 0x1f, 0x1b, 0x00, 0x49, 0xb6, 0x6e, 0x20, - 0x1b, 0x40, 0x45, 0xc2, 0xde, 0x19, 0x1b, 0x40, 0x48, 0x92, 0xbf, 0x2a, - 0x1b, 0x40, 0x45, 0x44, 0xe4, 0x10, 0x1b, 0x00, 0x44, 0x8b, 0x2c, 0x05, - 0x1b, 0x80, 0x0c, 0x4b, 0x9e, 0x9f, 0x4c, 0x1b, 0x00, 0x4b, 0xe8, 0xa0, - 0x4b, 0x1b, 0x40, 0x47, 0xdf, 0xca, 0x06, 0x1b, 0x40, 0x47, 0xb5, 0xd1, - 0x4f, 0x1b, 0x00, 0x44, 0x56, 0xef, 0x4e, 0x1b, 0x40, 0x45, 0xc3, 0x0a, - 0x58, 0x1b, 0x00, 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0x59, 0x1b, 0x00, 0x43, - 0xbf, 0x0a, 0x51, 0x1b, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xa1, 0x1d, - 0x50, 0x1b, 0x40, 0x44, 0x25, 0x01, 0x53, 0x1b, 0x00, 0x42, 0x15, 0x02, - 0x52, 0x1b, 0x40, 0x44, 0x27, 0x1d, 0x57, 0x1b, 0x00, 0x42, 0x60, 0x25, - 0x56, 0x1b, 0x40, 0x43, 0xa7, 0x05, 0x55, 0x1b, 0x00, 0x43, 0xcb, 0x06, - 0x54, 0x1b, 0x40, 0x02, 0x6c, 0x09, 0x06, 0x44, 0x56, 0xef, 0x5e, 0x1b, - 0x40, 0x47, 0x8f, 0xd0, 0x5d, 0x1b, 0x00, 0x45, 0xff, 0x70, 0x5f, 0x1b, - 0x40, 0x42, 0xd8, 0x00, 0x6f, 0xf9, 0x01, 0x4a, 0x5b, 0xa8, 0xc4, 0xf6, - 0x01, 0x4b, 0xe5, 0xa1, 0x56, 0xf9, 0x41, 0x43, 0x8c, 0x09, 0xa1, 0xf9, - 0x01, 0x5e, 0x7c, 0x13, 0xf8, 0xf3, 0x41, 0xab, 0x0c, 0x42, 0x10, 0x00, - 0x53, 0xf9, 0x01, 0x4b, 0x98, 0xa1, 0x2b, 0xf4, 0x41, 0x80, 0x1f, 0x67, - 0x2d, 0x05, 0xab, 0x27, 0x00, 0xb3, 0x01, 0xff, 0x1a, 0xf8, 0x1f, 0x06, - 0x44, 0x88, 0x4b, 0x08, 0x00, 0x40, 0x49, 0x90, 0xba, 0x5b, 0x2b, 0x00, - 0x4d, 0x36, 0x86, 0x5d, 0x2b, 0x40, 0x4b, 0x49, 0x9e, 0x82, 0xf5, 0x01, - 0x5a, 0x1a, 0x22, 0x19, 0xf5, 0x41, 0x80, 0x01, 0xff, 0x45, 0x3d, 0xe1, - 0x7c, 0xf4, 0x01, 0x46, 0xf9, 0x59, 0x7c, 0xf3, 0x01, 0x45, 0x8c, 0x58, - 0x24, 0xf4, 0x01, 0x46, 0xeb, 0x07, 0xbc, 0xf6, 0x41, 0x45, 0x88, 0xe1, - 0xee, 0xf9, 0x01, 0xa3, 0x96, 0x8a, 0x01, 0xa4, 0xaf, 0x85, 0x01, 0xa5, - 0xfa, 0x81, 0x01, 0x4b, 0xf2, 0x99, 0x0b, 0x06, 0x00, 0x04, 0x0e, 0xed, - 0xcc, 0x7e, 0x47, 0x42, 0x33, 0x08, 0x27, 0x80, 0xb5, 0x7e, 0x4b, 0xec, - 0x9b, 0x4d, 0x21, 0x00, 0xac, 0xb3, 0x76, 0xad, 0x8f, 0x76, 0xae, 0xda, - 0x60, 0xb0, 0xff, 0x5b, 0x47, 0x2c, 0xd2, 0x52, 0x26, 0x00, 0xb2, 0xcf, - 0x03, 0xb3, 0x88, 0x03, 0xb4, 0xf9, 0x02, 0xb5, 0xd0, 0x02, 0xb6, 0x06, - 0x42, 0x60, 0x42, 0x93, 0xfa, 0x41, 0x06, 0x80, 0xd8, 0x06, 0x45, 0x51, - 0xe6, 0x51, 0xf9, 0x41, 0x51, 0xb0, 0x4e, 0x39, 0x0b, 0x01, 0x07, 0xc1, - 0x05, 0x01, 0xff, 0xe1, 0x00, 0x0b, 0x81, 0x8f, 0x02, 0xa2, 0x82, 0x02, - 0x42, 0x73, 0x02, 0x17, 0x0b, 0x01, 0xa4, 0xef, 0x01, 0xe5, 0x08, 0x0b, - 0x81, 0xe5, 0x01, 0x42, 0xa0, 0x19, 0x1f, 0x0b, 0x01, 0xa7, 0xcc, 0x01, - 0xa8, 0xbf, 0x01, 0xe9, 0x0c, 0x0b, 0x81, 0xb5, 0x01, 0x42, 0xde, 0x1f, - 0x18, 0x0b, 0x01, 0x42, 0x37, 0x01, 0x10, 0x0b, 0x01, 0x42, 0x68, 0x00, - 0x2e, 0x0b, 0x01, 0x42, 0x2a, 0x02, 0x28, 0x0b, 0x01, 0xae, 0x79, 0xef, - 0x0a, 0x0b, 0x81, 0x70, 0x42, 0x6f, 0x02, 0x1e, 0x0b, 0x01, 0x42, 0x88, - 0x00, 0x2d, 0x0b, 0x01, 0xb3, 0x4c, 0xb4, 0x3a, 0xf5, 0x0e, 0x0b, 0x81, - 0x31, 0x42, 0x32, 0x00, 0x2c, 0x0b, 0x01, 0xb8, 0x19, 0xb9, 0x0d, 0xba, - 0x01, 0xff, 0xe5, 0x30, 0x0b, 0x01, 0x42, 0xb0, 0x01, 0x32, 0x0b, 0x41, - 0xe5, 0x2b, 0x0b, 0x01, 0x42, 0x4d, 0x00, 0x2a, 0x0b, 0x41, 0xe5, 0x11, - 0x0b, 0x01, 0x42, 0x32, 0x00, 0x13, 0x0b, 0x01, 0x42, 0x4d, 0x00, 0x12, - 0x0b, 0x41, 0xf5, 0x0f, 0x0b, 0x41, 0xe5, 0x19, 0x0b, 0x01, 0x42, 0xb0, - 0x01, 0x1a, 0x0b, 0x01, 0x42, 0x77, 0x00, 0x1d, 0x0b, 0x41, 0xe5, 0x2f, - 0x0b, 0x01, 0xa8, 0x06, 0x43, 0x63, 0x06, 0x34, 0x0b, 0x41, 0xe5, 0x31, - 0x0b, 0x01, 0x42, 0x4d, 0x00, 0x33, 0x0b, 0x41, 0xef, 0x0b, 0x0b, 0x41, - 0xe5, 0x25, 0x0b, 0x01, 0xa7, 0x0c, 0x42, 0xa2, 0x05, 0x27, 0x0b, 0x01, - 0x42, 0x4d, 0x00, 0x26, 0x0b, 0x41, 0xe5, 0x22, 0x0b, 0x01, 0x42, 0x32, - 0x00, 0x24, 0x0b, 0x01, 0x42, 0x4d, 0x00, 0x23, 0x0b, 0x41, 0xe9, 0x0d, - 0x0b, 0x41, 0xe5, 0x35, 0x0b, 0x01, 0x42, 0x2a, 0x02, 0x29, 0x0b, 0x41, - 0xe5, 0x14, 0x0b, 0x01, 0x42, 0x8c, 0x09, 0x15, 0x0b, 0x01, 0x42, 0xb0, - 0x01, 0x16, 0x0b, 0x41, 0xe5, 0x09, 0x0b, 0x41, 0xe5, 0x1b, 0x0b, 0x01, - 0x42, 0xb0, 0x01, 0x1c, 0x0b, 0x41, 0xe5, 0x20, 0x0b, 0x01, 0x42, 0xb0, - 0x01, 0x21, 0x0b, 0x41, 0xe1, 0x01, 0x0b, 0x81, 0x11, 0xe5, 0x06, 0x0b, - 0x81, 0x08, 0xee, 0x04, 0x0b, 0x01, 0xef, 0x02, 0x0b, 0x41, 0xe5, 0x07, - 0x0b, 0x41, 0xee, 0x05, 0x0b, 0x01, 0xef, 0x03, 0x0b, 0x41, 0x47, 0xa6, - 0xcc, 0x46, 0xf3, 0x01, 0x4a, 0x13, 0xaf, 0xb3, 0x20, 0x00, 0x02, 0x1e, - 0x00, 0x01, 0xff, 0x49, 0x7a, 0xb2, 0xfa, 0xf6, 0x01, 0xad, 0x01, 0xff, - 0x53, 0x2b, 0x47, 0xe7, 0xf3, 0x01, 0x45, 0x05, 0x4a, 0x97, 0xf6, 0x41, - 0x4b, 0xd9, 0x9a, 0x5f, 0xf4, 0x01, 0x49, 0xa2, 0xba, 0x9b, 0x26, 0x40, - 0xa3, 0x36, 0x47, 0xad, 0x5e, 0xa6, 0x22, 0x00, 0xb4, 0x06, 0x55, 0x8e, - 0x36, 0x43, 0x22, 0x40, 0x04, 0xf0, 0x0c, 0x15, 0x4c, 0x81, 0x91, 0x32, - 0xf6, 0x01, 0xb2, 0x01, 0xff, 0x43, 0xcc, 0x27, 0xd9, 0x2b, 0x00, 0x5a, - 0xc8, 0x20, 0xe2, 0x26, 0x40, 0xeb, 0x2a, 0x00, 0x80, 0x04, 0xed, 0x42, - 0x20, 0x40, 0x49, 0xdb, 0x1c, 0x17, 0x22, 0x40, 0x4b, 0x76, 0x8b, 0x0a, - 0x26, 0x00, 0x49, 0x81, 0xb7, 0x9c, 0x01, 0x41, 0x04, 0xb9, 0x06, 0xbd, - 0x05, 0xe3, 0x12, 0x23, 0x00, 0x43, 0xee, 0x9b, 0x48, 0x26, 0x00, 0x07, - 0x17, 0x32, 0x4b, 0x03, 0xd0, 0x00, 0x11, 0x02, 0x35, 0x00, 0x01, 0xff, - 0x4d, 0x45, 0x80, 0x9b, 0xf6, 0x01, 0x4a, 0xff, 0xae, 0xa8, 0xf3, 0x41, - 0x0a, 0x9b, 0x01, 0x06, 0x53, 0x94, 0x48, 0xb0, 0xfb, 0x41, 0x17, 0x72, - 0x2d, 0x1c, 0x18, 0x55, 0x2a, 0x06, 0x57, 0xc5, 0x30, 0xb0, 0xf8, 0x41, - 0x49, 0xa5, 0x01, 0x35, 0x29, 0x00, 0x4a, 0x97, 0x3f, 0xb1, 0xf8, 0x01, - 0x47, 0x50, 0x02, 0x34, 0x29, 0x40, 0x49, 0xea, 0x01, 0x36, 0x29, 0x00, - 0x4a, 0xb3, 0x02, 0x37, 0x29, 0x40, 0xa1, 0xd5, 0x04, 0xa3, 0xdc, 0x02, - 0x49, 0x92, 0xb5, 0x8f, 0x05, 0x00, 0xa5, 0xc7, 0x02, 0x49, 0x15, 0x16, - 0x89, 0x05, 0x00, 0x46, 0x1a, 0x62, 0x8a, 0x05, 0x00, 0x5e, 0x9a, 0x13, - 0x59, 0x05, 0x00, 0x4d, 0xd6, 0x33, 0x5e, 0x05, 0x00, 0x07, 0x4b, 0x08, - 0x01, 0xff, 0x06, 0xc2, 0x05, 0x2d, 0x08, 0xfb, 0x1e, 0x01, 0xff, 0x48, - 0xe2, 0xc2, 0x87, 0x05, 0x00, 0x04, 0xb5, 0x4d, 0x06, 0x47, 0x71, 0xd4, - 0x16, 0xfb, 0x40, 0x43, 0x0a, 0x40, 0x14, 0xfb, 0x00, 0x43, 0x06, 0x07, - 0x15, 0xfb, 0x00, 0x43, 0x0b, 0x2e, 0x13, 0xfb, 0x00, 0x43, 0x83, 0xf1, - 0x17, 0xfb, 0x40, 0x43, 0x1a, 0xbe, 0x61, 0x05, 0x00, 0x43, 0xfa, 0x1a, - 0x62, 0x05, 0x00, 0xa3, 0xd6, 0x01, 0x42, 0xa1, 0x10, 0x64, 0x05, 0x00, - 0xa5, 0xbf, 0x01, 0x43, 0x85, 0xb6, 0x86, 0x05, 0x00, 0xa7, 0xaa, 0x01, - 0x42, 0x0b, 0x00, 0x70, 0x05, 0x00, 0x43, 0x06, 0x07, 0x6b, 0x05, 0x00, - 0xaa, 0x91, 0x01, 0x02, 0x37, 0x01, 0x84, 0x01, 0x44, 0xca, 0xed, 0x6c, - 0x05, 0x00, 0x43, 0x01, 0x05, 0x74, 0x05, 0x00, 0x43, 0x0b, 0x2e, 0x76, - 0x05, 0x00, 0x42, 0x5c, 0x28, 0x85, 0x05, 0x00, 0xb0, 0x5e, 0xb2, 0x52, - 0xb3, 0x44, 0xb4, 0x32, 0xb6, 0x26, 0x43, 0x83, 0xf1, 0x6d, 0x05, 0x00, - 0x42, 0xf7, 0x19, 0x75, 0x05, 0x80, 0x0d, 0xba, 0x01, 0xff, 0xe1, 0x66, - 0x05, 0x00, 0x42, 0xb0, 0x01, 0x6a, 0x05, 0x40, 0x4c, 0x39, 0x28, 0x88, - 0x05, 0x00, 0x42, 0xa7, 0x01, 0x82, 0x05, 0x40, 0x42, 0x85, 0x1d, 0x7e, - 0x05, 0x00, 0xef, 0x78, 0x05, 0x40, 0x43, 0xe7, 0xc2, 0x7f, 0x05, 0x00, - 0xef, 0x69, 0x05, 0x00, 0x49, 0x14, 0xbe, 0x60, 0x05, 0x40, 0x42, 0x4e, - 0x00, 0x7d, 0x05, 0x00, 0x42, 0x22, 0x00, 0x77, 0x05, 0x40, 0xe1, 0x7c, - 0x05, 0x00, 0x42, 0x4e, 0x00, 0x80, 0x05, 0x40, 0x42, 0x4e, 0x00, 0x7a, - 0x05, 0x00, 0x43, 0x08, 0xf1, 0x83, 0x05, 0x40, 0xe8, 0x84, 0x05, 0x00, - 0xee, 0x6f, 0x05, 0x40, 0xe1, 0x71, 0x05, 0x00, 0x43, 0xfd, 0x41, 0x7b, - 0x05, 0x40, 0x43, 0xa5, 0x02, 0x72, 0x05, 0x00, 0x42, 0x29, 0x02, 0x63, - 0x05, 0x40, 0x42, 0x1e, 0x14, 0x65, 0x05, 0x00, 0xe8, 0x67, 0x05, 0x00, - 0xf4, 0x68, 0x05, 0x40, 0xe1, 0x6e, 0x05, 0x00, 0xa8, 0x04, 0xef, 0x81, - 0x05, 0x40, 0xe1, 0x79, 0x05, 0x00, 0x42, 0x4e, 0x00, 0x73, 0x05, 0x40, - 0x4c, 0x79, 0x90, 0x5b, 0x05, 0x00, 0x4f, 0xae, 0x00, 0x5c, 0x05, 0x40, - 0x0e, 0xba, 0x05, 0x06, 0x44, 0xe9, 0x04, 0x5d, 0x05, 0x40, 0x43, 0x1a, - 0xbe, 0x31, 0x05, 0x00, 0x43, 0xfa, 0x1a, 0x32, 0x05, 0x00, 0xa3, 0xc9, - 0x01, 0x42, 0xa1, 0x10, 0x34, 0x05, 0x00, 0xa5, 0xb2, 0x01, 0x43, 0x85, - 0xb6, 0x56, 0x05, 0x00, 0xa7, 0x9d, 0x01, 0x42, 0x0b, 0x00, 0x40, 0x05, - 0x00, 0x43, 0x06, 0x07, 0x3b, 0x05, 0x00, 0xaa, 0x84, 0x01, 0x02, 0x37, - 0x01, 0x78, 0x44, 0xca, 0xed, 0x3c, 0x05, 0x00, 0x43, 0x01, 0x05, 0x44, - 0x05, 0x00, 0x43, 0x0b, 0x2e, 0x46, 0x05, 0x00, 0x42, 0x5c, 0x28, 0x55, - 0x05, 0x00, 0xb0, 0x52, 0xb2, 0x46, 0xb3, 0x38, 0xb4, 0x2c, 0xb6, 0x20, - 0x43, 0x83, 0xf1, 0x3d, 0x05, 0x00, 0x42, 0xf7, 0x19, 0x45, 0x05, 0x80, - 0x0d, 0xba, 0x01, 0xff, 0xe1, 0x36, 0x05, 0x00, 0x42, 0xb0, 0x01, 0x3a, - 0x05, 0x40, 0x42, 0xa7, 0x01, 0x52, 0x05, 0x40, 0x42, 0x85, 0x1d, 0x4e, - 0x05, 0x00, 0xef, 0x48, 0x05, 0x40, 0x43, 0xe7, 0xc2, 0x4f, 0x05, 0x00, - 0xef, 0x39, 0x05, 0x40, 0x42, 0x4e, 0x00, 0x4d, 0x05, 0x00, 0x42, 0x22, - 0x00, 0x47, 0x05, 0x40, 0xe1, 0x4c, 0x05, 0x00, 0x42, 0x4e, 0x00, 0x50, - 0x05, 0x40, 0x42, 0x4e, 0x00, 0x4a, 0x05, 0x00, 0x43, 0x08, 0xf1, 0x53, - 0x05, 0x40, 0xe8, 0x54, 0x05, 0x00, 0xee, 0x3f, 0x05, 0x40, 0xe1, 0x41, - 0x05, 0x00, 0x43, 0xfd, 0x41, 0x4b, 0x05, 0x40, 0x43, 0xa5, 0x02, 0x42, - 0x05, 0x00, 0x42, 0x29, 0x02, 0x33, 0x05, 0x40, 0x42, 0x1e, 0x14, 0x35, - 0x05, 0x00, 0xe8, 0x37, 0x05, 0x00, 0xf4, 0x38, 0x05, 0x40, 0xe1, 0x3e, - 0x05, 0x00, 0xa8, 0x04, 0xef, 0x51, 0x05, 0x40, 0xe1, 0x49, 0x05, 0x00, - 0x42, 0x4e, 0x00, 0x43, 0x05, 0x40, 0x50, 0xb1, 0x4e, 0x5f, 0x05, 0x00, - 0x49, 0x92, 0x35, 0x5a, 0x05, 0x40, 0x80, 0x68, 0x07, 0xbd, 0x06, 0x01, - 0xff, 0x49, 0x2f, 0xb5, 0x06, 0x06, 0x00, 0x06, 0xc4, 0x06, 0x17, 0x4b, - 0x13, 0x9a, 0x07, 0x06, 0x00, 0x04, 0x6f, 0x02, 0x01, 0xff, 0x4a, 0x85, - 0xab, 0x09, 0x06, 0x00, 0x51, 0xd1, 0x5c, 0x0a, 0x06, 0x40, 0x45, 0xc3, - 0x0a, 0x68, 0x06, 0x00, 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0x69, 0x06, 0x00, - 0x43, 0xbf, 0x0a, 0x61, 0x06, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xa1, - 0x1d, 0x60, 0x06, 0x40, 0x44, 0x25, 0x01, 0x63, 0x06, 0x00, 0x42, 0x15, - 0x02, 0x62, 0x06, 0x40, 0x44, 0x27, 0x1d, 0x67, 0x06, 0x00, 0x42, 0x60, - 0x25, 0x66, 0x06, 0x40, 0x43, 0xa7, 0x05, 0x65, 0x06, 0x00, 0x43, 0xcb, - 0x06, 0x64, 0x06, 0x40, 0x52, 0x40, 0x4f, 0x87, 0x08, 0x00, 0xa3, 0xb6, - 0x51, 0xa4, 0xdf, 0x50, 0xa5, 0xbb, 0x50, 0xa6, 0xed, 0x4f, 0x02, 0x22, - 0x00, 0xd1, 0x4f, 0x4e, 0x56, 0x77, 0x57, 0x06, 0x00, 0x45, 0x5f, 0x4f, - 0x50, 0x06, 0x80, 0xa2, 0x4f, 0xac, 0xe8, 0x0f, 0x02, 0x6c, 0x00, 0xeb, - 0x07, 0x07, 0x2f, 0x39, 0xda, 0x07, 0x05, 0xcb, 0x04, 0xc3, 0x07, 0xb0, - 0x97, 0x07, 0x4d, 0xd6, 0x33, 0x1f, 0x06, 0x00, 0xb2, 0xdf, 0x06, 0xb3, - 0xa4, 0x01, 0xb4, 0x2b, 0xb6, 0x0c, 0x50, 0x2a, 0x67, 0x5f, 0x06, 0x00, - 0x48, 0x4a, 0xca, 0x59, 0x06, 0x40, 0x4c, 0x87, 0x46, 0x8e, 0x08, 0x00, - 0x0a, 0xd2, 0x75, 0x01, 0xff, 0x49, 0x50, 0x12, 0x5c, 0x06, 0x00, 0x56, - 0xf9, 0x33, 0x5b, 0x06, 0x00, 0x4d, 0x02, 0x34, 0x5a, 0x06, 0x40, 0xa1, - 0x47, 0x52, 0x26, 0x51, 0x6c, 0x06, 0x00, 0x04, 0xbf, 0x0a, 0x0c, 0x5a, - 0x7e, 0x21, 0x1e, 0x06, 0x00, 0x51, 0x7b, 0x5d, 0xe3, 0x08, 0x40, 0x05, - 0x25, 0xe5, 0x21, 0x08, 0xb0, 0x0b, 0x11, 0x09, 0xa2, 0x0b, 0x01, 0xff, - 0x45, 0x5c, 0x00, 0xeb, 0x08, 0x00, 0x45, 0xf5, 0x06, 0xee, 0x08, 0x40, - 0x45, 0x5c, 0x00, 0xea, 0x08, 0x00, 0x45, 0xf5, 0x06, 0xed, 0x08, 0x40, - 0x45, 0x5c, 0x00, 0xec, 0x08, 0x00, 0x45, 0xf5, 0x06, 0xef, 0x08, 0x40, - 0x4b, 0x26, 0x9b, 0x73, 0xfe, 0x00, 0x45, 0x8f, 0x20, 0x40, 0x06, 0xc0, - 0x00, 0x06, 0x50, 0x00, 0x01, 0xff, 0x4e, 0x4c, 0x76, 0x71, 0xfe, 0x00, - 0x0b, 0xf9, 0x9e, 0x06, 0x4e, 0xb6, 0x0e, 0x85, 0x08, 0x40, 0x45, 0x56, - 0x00, 0x83, 0x08, 0x00, 0x43, 0xc0, 0x88, 0x84, 0x08, 0x40, 0x48, 0x6f, - 0x58, 0x1b, 0x06, 0x00, 0x45, 0xb8, 0xe3, 0x51, 0x06, 0x80, 0x9b, 0x05, - 0x04, 0x30, 0x03, 0xc7, 0x04, 0x05, 0x0d, 0x07, 0xc1, 0x01, 0x53, 0x24, - 0x4c, 0xde, 0x06, 0x00, 0xb5, 0x90, 0x01, 0x06, 0xf4, 0x15, 0x01, 0xff, - 0x02, 0x3b, 0x01, 0x71, 0x0a, 0x9c, 0x45, 0x61, 0x44, 0xf7, 0x07, 0xbf, - 0xfb, 0x00, 0x0a, 0xcd, 0x73, 0x4b, 0xb4, 0x06, 0x4b, 0xb6, 0xa2, 0xc2, - 0xfb, 0x40, 0x0a, 0x5f, 0x12, 0x22, 0x08, 0xa3, 0x0b, 0x01, 0xff, 0x45, - 0x5c, 0x00, 0xb4, 0xfb, 0x00, 0x45, 0xf5, 0x06, 0xb5, 0xfb, 0x00, 0x0b, - 0x95, 0x2b, 0x01, 0xff, 0x45, 0x5c, 0x00, 0xbd, 0xfb, 0x00, 0x45, 0xf5, - 0x06, 0xbe, 0xfb, 0x40, 0x45, 0x5c, 0x00, 0xb6, 0xfb, 0x00, 0x45, 0xf5, - 0x06, 0xb7, 0xfb, 0x00, 0x13, 0x9c, 0x01, 0x01, 0xff, 0x45, 0x5c, 0x00, - 0xb8, 0xfb, 0x00, 0x45, 0xf5, 0x06, 0xb9, 0xfb, 0x40, 0x45, 0x5c, 0x00, - 0xc0, 0xfb, 0x00, 0x45, 0xf5, 0x06, 0xc1, 0xfb, 0x40, 0x45, 0x5c, 0x00, - 0xba, 0xfb, 0x00, 0x45, 0xf5, 0x06, 0xbb, 0xfb, 0x40, 0x02, 0xc6, 0x00, - 0x06, 0x57, 0x80, 0x30, 0xbc, 0xfb, 0x40, 0x45, 0x5c, 0x00, 0xb2, 0xfb, - 0x00, 0x45, 0xf5, 0x06, 0xb3, 0xfb, 0x40, 0x4c, 0x39, 0x8b, 0x56, 0x06, - 0x00, 0x43, 0xa7, 0x35, 0x52, 0x06, 0x80, 0x06, 0x58, 0x0d, 0x2a, 0x9d, - 0x08, 0x40, 0x80, 0x01, 0xff, 0x45, 0xf5, 0x06, 0xd0, 0x08, 0x00, 0x4d, - 0x34, 0x03, 0x7e, 0xfe, 0x00, 0x4b, 0x4d, 0x6c, 0x7f, 0xfe, 0x40, 0x45, - 0x81, 0x5d, 0x19, 0x06, 0x00, 0x02, 0xe1, 0x07, 0xea, 0x02, 0x05, 0xf9, - 0x0a, 0x5c, 0x45, 0x5f, 0x4f, 0x1a, 0x06, 0x00, 0x04, 0xdd, 0x04, 0x0c, - 0x43, 0xc0, 0x88, 0xe5, 0x06, 0x00, 0x43, 0x4d, 0x00, 0xe6, 0x06, 0x40, - 0x44, 0x7a, 0x20, 0xed, 0x06, 0x00, 0x4f, 0x28, 0x6f, 0xd9, 0x08, 0x00, - 0x44, 0x3a, 0xef, 0xe3, 0x06, 0x00, 0xb7, 0x01, 0xff, 0x42, 0x9a, 0x43, - 0xd3, 0x08, 0x00, 0x04, 0xb4, 0x24, 0x01, 0xff, 0xa9, 0x18, 0x45, 0xc7, - 0x49, 0xff, 0x0e, 0x01, 0x44, 0xe2, 0xee, 0xfe, 0x0e, 0x01, 0x45, 0x91, - 0xe7, 0xfd, 0x0e, 0x01, 0x47, 0x67, 0xd3, 0x9b, 0x08, 0x40, 0x45, 0x43, - 0xe5, 0x9a, 0x08, 0x00, 0x46, 0xd0, 0xdc, 0x99, 0x08, 0x40, 0x43, 0x05, - 0x07, 0xd6, 0x08, 0x00, 0x54, 0x83, 0x40, 0xe1, 0x06, 0x00, 0xa6, 0xef, - 0x01, 0x44, 0x6e, 0x37, 0xda, 0x06, 0x00, 0xac, 0xbf, 0x01, 0xad, 0xa5, - 0x01, 0x44, 0xc4, 0x44, 0xe8, 0x06, 0x80, 0x97, 0x01, 0x43, 0xf4, 0x13, - 0xd7, 0x08, 0x00, 0x4c, 0x0d, 0x93, 0xdf, 0x06, 0x00, 0xb3, 0x77, 0xb4, - 0x69, 0x58, 0xfd, 0x2a, 0xe0, 0x06, 0x00, 0xb7, 0x1c, 0x43, 0x4d, 0x00, - 0xe7, 0x06, 0x80, 0x0f, 0x02, 0x59, 0x00, 0x01, 0xff, 0xe8, 0xcd, 0x08, - 0x00, 0x42, 0x9e, 0x01, 0x17, 0x06, 0x40, 0x5b, 0x69, 0x19, 0xcb, 0x08, - 0x40, 0x42, 0x9a, 0x43, 0xf3, 0x08, 0x00, 0x04, 0xb4, 0x24, 0x01, 0xff, - 0xa1, 0x1a, 0x43, 0x3e, 0xf1, 0xde, 0x08, 0x00, 0x02, 0x15, 0x06, 0x06, - 0x45, 0x0d, 0xe9, 0xdf, 0x08, 0x40, 0xe8, 0xcc, 0x08, 0x00, 0x43, 0x5c, - 0x3e, 0xdd, 0x08, 0x40, 0x45, 0xe9, 0xe4, 0x98, 0x08, 0x00, 0x46, 0x2c, - 0xdb, 0xdc, 0x08, 0x00, 0x45, 0x00, 0xe7, 0xd4, 0x08, 0x00, 0x47, 0xb8, - 0xd2, 0xdb, 0x08, 0x00, 0x4b, 0x1f, 0xa1, 0xda, 0x08, 0x40, 0x42, 0xc9, - 0x09, 0x15, 0x06, 0x00, 0x49, 0xdc, 0x0f, 0xdb, 0x06, 0x40, 0x42, 0xe8, - 0x01, 0xd5, 0x08, 0x00, 0x43, 0x75, 0x09, 0xdc, 0x06, 0x00, 0x49, 0xc9, - 0xb7, 0xe1, 0x08, 0x40, 0x4b, 0x2c, 0x6f, 0xd8, 0x08, 0x40, 0x44, 0xc8, - 0x49, 0xe4, 0x06, 0x00, 0x05, 0x6f, 0x37, 0x01, 0xff, 0x4b, 0x4d, 0x16, - 0xd8, 0x06, 0x00, 0x4c, 0x35, 0x03, 0xe2, 0x06, 0x40, 0x47, 0xf7, 0xcb, - 0xd9, 0x06, 0x00, 0x08, 0xfb, 0x1e, 0x01, 0xff, 0x0a, 0x63, 0xa5, 0x0c, - 0x5e, 0xf4, 0x13, 0xd7, 0x06, 0x00, 0x5e, 0x30, 0x14, 0xd6, 0x06, 0x40, - 0x4c, 0x05, 0x8f, 0x16, 0x06, 0x00, 0x4a, 0x89, 0xb1, 0x16, 0x06, 0x40, - 0x48, 0x0a, 0xc1, 0xca, 0x08, 0x00, 0x4e, 0xfa, 0x78, 0xe0, 0x08, 0x40, - 0x47, 0x0b, 0xc1, 0xc9, 0x08, 0x00, 0x43, 0x8f, 0x00, 0x18, 0x06, 0x40, - 0x4f, 0xf2, 0x68, 0x11, 0x06, 0x00, 0x45, 0x9d, 0xe5, 0x0f, 0x06, 0x00, - 0x02, 0x71, 0x00, 0x33, 0xb3, 0x06, 0x49, 0x2a, 0xbd, 0x14, 0x06, 0x40, - 0xa1, 0x11, 0x06, 0xfa, 0xd9, 0x01, 0xff, 0x49, 0x2d, 0x3d, 0xfd, 0x06, - 0x00, 0x50, 0x5a, 0x64, 0xfe, 0x06, 0x40, 0x43, 0xcf, 0xb7, 0x03, 0x06, - 0x00, 0x5a, 0x46, 0x20, 0x10, 0x06, 0x00, 0x44, 0x0a, 0xee, 0x04, 0x06, - 0x00, 0x43, 0x24, 0x45, 0x01, 0x06, 0x40, 0x4f, 0x69, 0x6a, 0x13, 0x06, - 0x00, 0x50, 0xfa, 0x61, 0x12, 0x06, 0x40, 0x80, 0x01, 0xff, 0x4d, 0x34, - 0x03, 0x7c, 0xfe, 0x00, 0x4b, 0x4d, 0x6c, 0x7d, 0xfe, 0x40, 0xa1, 0x23, - 0x4d, 0x2f, 0x81, 0x5d, 0x06, 0x00, 0x0f, 0x67, 0x31, 0x06, 0x63, 0xf2, - 0x0a, 0xec, 0x06, 0x40, 0x45, 0x5c, 0x00, 0xf8, 0x08, 0x80, 0x06, 0x45, - 0xf5, 0x06, 0xfa, 0x08, 0x40, 0x49, 0xa5, 0x3a, 0xfd, 0x08, 0x40, 0x4e, - 0x72, 0x77, 0x88, 0x08, 0x00, 0xf9, 0x08, 0x06, 0x40, 0xa5, 0x1b, 0x51, - 0x5d, 0x59, 0x91, 0x08, 0x00, 0x4e, 0xd4, 0x77, 0xe9, 0x06, 0x00, 0xaf, - 0x01, 0xff, 0x4f, 0x59, 0x6b, 0x0e, 0x06, 0x00, 0x4e, 0x6c, 0x7c, 0x90, - 0x08, 0x40, 0x43, 0xa8, 0x2a, 0x97, 0x08, 0x00, 0x4a, 0xc7, 0x99, 0x6a, - 0x06, 0x40, 0x48, 0x72, 0xc2, 0xf1, 0x08, 0x00, 0x48, 0x4c, 0x76, 0xf0, - 0x08, 0x00, 0x48, 0xd2, 0xc4, 0xf2, 0x08, 0x40, 0x4a, 0x10, 0x4b, 0x05, - 0x06, 0x00, 0x44, 0x2f, 0x03, 0x00, 0x06, 0x40, 0x03, 0xaa, 0x35, 0xe7, - 0x07, 0x03, 0xbb, 0x00, 0xd6, 0x07, 0x0b, 0x5a, 0x52, 0x01, 0xff, 0xa1, - 0xc2, 0x07, 0x43, 0xe5, 0x8a, 0x01, 0xee, 0x01, 0xa4, 0xe8, 0x05, 0x43, - 0x85, 0xb6, 0x10, 0xee, 0x01, 0x45, 0x4a, 0x9a, 0x1b, 0xee, 0x01, 0x43, - 0x84, 0x20, 0x07, 0xee, 0x01, 0x08, 0x4c, 0x16, 0xd1, 0x04, 0x44, 0x6e, - 0x37, 0x02, 0xee, 0x01, 0xab, 0xbc, 0x04, 0xac, 0xfc, 0x02, 0x44, 0x7a, - 0x20, 0x0c, 0xee, 0x01, 0x44, 0xc4, 0x44, 0x0d, 0xee, 0x01, 0x09, 0x99, - 0x3d, 0xdf, 0x02, 0x43, 0xf4, 0x13, 0x12, 0xee, 0x01, 0x43, 0xee, 0x50, - 0x13, 0xee, 0x01, 0xb3, 0xa0, 0x01, 0xb4, 0x1b, 0x43, 0xc0, 0x88, 0x05, - 0xee, 0x01, 0x43, 0x4d, 0x00, 0x09, 0xee, 0x01, 0x02, 0x59, 0x00, 0x01, - 0xff, 0xe8, 0x1a, 0xee, 0x01, 0x42, 0x9e, 0x01, 0x06, 0xee, 0x41, 0xa1, - 0x15, 0x42, 0x4e, 0x00, 0x15, 0xee, 0x01, 0xa8, 0x01, 0xff, 0x42, 0x13, - 0x00, 0x18, 0xee, 0x01, 0x42, 0x4e, 0x00, 0x16, 0xee, 0x41, 0xe8, 0x08, - 0xee, 0x01, 0x05, 0x25, 0x17, 0x01, 0xff, 0x43, 0x05, 0x07, 0x4f, 0xee, - 0x01, 0xa4, 0x44, 0x45, 0x4a, 0x9a, 0x5b, 0xee, 0x01, 0x43, 0x84, 0x20, - 0x47, 0xee, 0x01, 0x44, 0x6e, 0x37, 0x42, 0xee, 0x01, 0x44, 0x93, 0x40, - 0x57, 0xee, 0x01, 0x43, 0xb0, 0x00, 0x4b, 0xee, 0x01, 0x44, 0xc4, 0x44, - 0x4d, 0xee, 0x01, 0x43, 0xf4, 0x13, 0x52, 0xee, 0x01, 0xb3, 0x06, 0x43, - 0x4d, 0x00, 0x49, 0xee, 0x41, 0x42, 0xe8, 0x01, 0x51, 0xee, 0x01, 0x43, - 0x75, 0x09, 0x4e, 0xee, 0x01, 0x44, 0x60, 0xd8, 0x54, 0xee, 0x41, 0x42, - 0xe8, 0x01, 0x59, 0xee, 0x01, 0x07, 0x84, 0x40, 0x01, 0xff, 0x44, 0xc4, - 0x44, 0x5d, 0xee, 0x01, 0x43, 0xf4, 0x13, 0x5f, 0xee, 0x41, 0x42, 0xe8, - 0x01, 0x11, 0xee, 0x01, 0x43, 0x75, 0x09, 0x0e, 0xee, 0x01, 0x44, 0x60, - 0xd8, 0x14, 0xee, 0x01, 0x09, 0xdb, 0xaf, 0x01, 0xff, 0x43, 0x05, 0x07, - 0x6f, 0xee, 0x01, 0x43, 0xe5, 0x8a, 0x61, 0xee, 0x01, 0xa4, 0x74, 0x43, - 0x85, 0xb6, 0x70, 0xee, 0x01, 0x45, 0x4a, 0x9a, 0x7b, 0xee, 0x01, 0xa8, - 0x5a, 0x44, 0x6e, 0x37, 0x62, 0xee, 0x01, 0xab, 0x46, 0x44, 0x7a, 0x20, - 0x6c, 0xee, 0x01, 0x44, 0xc4, 0x44, 0x6d, 0xee, 0x01, 0x43, 0xf4, 0x13, - 0x72, 0xee, 0x01, 0xb3, 0x20, 0xb4, 0x0c, 0x43, 0x4d, 0x00, 0x69, 0xee, - 0x01, 0x43, 0x92, 0x7d, 0x7a, 0xee, 0x41, 0x42, 0xc9, 0x09, 0x68, 0xee, - 0x01, 0x42, 0x4e, 0x00, 0x75, 0xee, 0x01, 0x43, 0xfd, 0x41, 0x76, 0xee, - 0x41, 0x42, 0xe8, 0x01, 0x71, 0xee, 0x01, 0x43, 0x75, 0x09, 0x6e, 0xee, - 0x01, 0x44, 0x60, 0xd8, 0x74, 0xee, 0x41, 0x42, 0xf5, 0x13, 0x6a, 0xee, - 0x01, 0x43, 0x84, 0x20, 0x77, 0xee, 0x41, 0x42, 0xc9, 0x09, 0x67, 0xee, - 0x01, 0x42, 0x4e, 0x00, 0x64, 0xee, 0x41, 0x42, 0xe8, 0x01, 0x79, 0xee, - 0x01, 0x07, 0x84, 0x40, 0x01, 0xff, 0x43, 0xe5, 0x8a, 0x7c, 0xee, 0x01, - 0x43, 0x85, 0xb6, 0x7e, 0xee, 0x41, 0x4c, 0xc1, 0x8d, 0xf1, 0xee, 0x01, - 0x5a, 0x7a, 0x20, 0xf0, 0xee, 0x41, 0x42, 0x57, 0x00, 0x0b, 0xee, 0x01, - 0x06, 0x93, 0x83, 0x01, 0xff, 0xa1, 0xa3, 0x01, 0x43, 0xe5, 0x8a, 0x81, - 0xee, 0x01, 0x02, 0xa1, 0x10, 0x90, 0x01, 0x43, 0x85, 0xb6, 0x90, 0xee, - 0x01, 0x45, 0x4a, 0x9a, 0x9b, 0xee, 0x01, 0xa8, 0x76, 0x44, 0x6e, 0x37, - 0x82, 0xee, 0x01, 0x44, 0x93, 0x40, 0x97, 0xee, 0x01, 0x43, 0xb0, 0x00, - 0x8b, 0xee, 0x01, 0x44, 0x7a, 0x20, 0x8c, 0xee, 0x01, 0x44, 0xc4, 0x44, - 0x8d, 0xee, 0x01, 0x43, 0xf4, 0x13, 0x92, 0xee, 0x01, 0x43, 0xee, 0x50, - 0x93, 0xee, 0x01, 0xb3, 0x38, 0xb4, 0x1b, 0x43, 0xc0, 0x88, 0x85, 0xee, - 0x01, 0x43, 0x4d, 0x00, 0x89, 0xee, 0x01, 0x02, 0x59, 0x00, 0x01, 0xff, - 0xe8, 0x9a, 0xee, 0x01, 0x42, 0x9e, 0x01, 0x86, 0xee, 0x41, 0x42, 0xc9, - 0x09, 0x88, 0xee, 0x01, 0x42, 0x4e, 0x00, 0x95, 0xee, 0x01, 0xa8, 0x01, - 0xff, 0x42, 0x13, 0x00, 0x98, 0xee, 0x01, 0x42, 0x4e, 0x00, 0x96, 0xee, - 0x41, 0x42, 0xe8, 0x01, 0x91, 0xee, 0x01, 0x43, 0x75, 0x09, 0x8e, 0xee, - 0x01, 0x44, 0x60, 0xd8, 0x94, 0xee, 0x41, 0x42, 0xc9, 0x09, 0x87, 0xee, - 0x01, 0x42, 0x4e, 0x00, 0x84, 0xee, 0x41, 0xe4, 0x99, 0xee, 0x01, 0xec, - 0x83, 0xee, 0x41, 0x42, 0x9e, 0x01, 0x8f, 0xee, 0x01, 0x43, 0x68, 0x00, - 0x80, 0xee, 0x41, 0x42, 0xf5, 0x13, 0x0a, 0xee, 0x01, 0x43, 0x84, 0x20, - 0x17, 0xee, 0x41, 0x43, 0x05, 0x07, 0x2f, 0xee, 0x01, 0x43, 0xe5, 0x8a, - 0x21, 0xee, 0x01, 0x43, 0x4a, 0xb5, 0x39, 0xee, 0x01, 0x43, 0x85, 0xb6, - 0x30, 0xee, 0x01, 0x45, 0x4a, 0x9a, 0x3b, 0xee, 0x01, 0xa8, 0x54, 0x44, - 0x6e, 0x37, 0x22, 0xee, 0x01, 0xab, 0x40, 0x43, 0xb0, 0x00, 0x2b, 0xee, - 0x01, 0x44, 0x7a, 0x20, 0x2c, 0xee, 0x01, 0x44, 0xc4, 0x44, 0x2d, 0xee, - 0x01, 0x43, 0xf4, 0x13, 0x32, 0xee, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x43, - 0x4d, 0x00, 0x29, 0xee, 0x41, 0x42, 0x4e, 0x00, 0x35, 0xee, 0x01, 0x43, - 0xfd, 0x41, 0x36, 0xee, 0x41, 0x42, 0xe8, 0x01, 0x31, 0xee, 0x01, 0x43, - 0x75, 0x09, 0x2e, 0xee, 0x01, 0x44, 0x60, 0xd8, 0x34, 0xee, 0x41, 0x42, - 0xf5, 0x13, 0x2a, 0xee, 0x01, 0x43, 0x84, 0x20, 0x37, 0xee, 0x41, 0x42, - 0xc9, 0x09, 0x27, 0xee, 0x01, 0x42, 0x4e, 0x00, 0x24, 0xee, 0x41, 0xa1, - 0xc6, 0x01, 0xaf, 0x01, 0xff, 0x06, 0x85, 0x40, 0xa6, 0x01, 0x0c, 0xa6, - 0x75, 0x01, 0xff, 0x43, 0x05, 0x07, 0xaf, 0xee, 0x01, 0x43, 0xe5, 0x8a, - 0xa1, 0xee, 0x01, 0x02, 0xa1, 0x10, 0x88, 0x01, 0x43, 0x85, 0xb6, 0xb0, - 0xee, 0x01, 0x45, 0x4a, 0x9a, 0xbb, 0xee, 0x01, 0x43, 0x84, 0x20, 0xa7, - 0xee, 0x01, 0x44, 0x6e, 0x37, 0xa2, 0xee, 0x01, 0x44, 0x93, 0x40, 0xb7, - 0xee, 0x01, 0x43, 0xb0, 0x00, 0xab, 0xee, 0x01, 0x44, 0x7a, 0x20, 0xac, - 0xee, 0x01, 0x44, 0xc4, 0x44, 0xad, 0xee, 0x01, 0x43, 0xf4, 0x13, 0xb2, - 0xee, 0x01, 0x43, 0xee, 0x50, 0xb3, 0xee, 0x01, 0xb3, 0x38, 0xb4, 0x1b, - 0x43, 0xc0, 0x88, 0xa5, 0xee, 0x01, 0x43, 0x4d, 0x00, 0xa9, 0xee, 0x01, - 0x02, 0x59, 0x00, 0x01, 0xff, 0xe8, 0xba, 0xee, 0x01, 0x42, 0x9e, 0x01, - 0xa6, 0xee, 0x41, 0x42, 0xc9, 0x09, 0xa8, 0xee, 0x01, 0x42, 0x4e, 0x00, - 0xb5, 0xee, 0x01, 0xa8, 0x01, 0xff, 0x42, 0x13, 0x00, 0xb8, 0xee, 0x01, - 0x42, 0x4e, 0x00, 0xb6, 0xee, 0x41, 0x42, 0xe8, 0x01, 0xb1, 0xee, 0x01, - 0x43, 0x75, 0x09, 0xae, 0xee, 0x01, 0x44, 0x60, 0xd8, 0xb4, 0xee, 0x41, - 0xe4, 0xb9, 0xee, 0x01, 0xec, 0xa3, 0xee, 0x41, 0x43, 0xe5, 0x8a, 0x1c, - 0xee, 0x01, 0x43, 0x85, 0xb6, 0x1e, 0xee, 0x01, 0x44, 0xc4, 0x44, 0x1d, - 0xee, 0x01, 0x43, 0xf4, 0x13, 0x1f, 0xee, 0x41, 0xe4, 0x19, 0xee, 0x01, - 0xec, 0x03, 0xee, 0x41, 0x42, 0x9e, 0x01, 0x0f, 0xee, 0x01, 0x43, 0x68, - 0x00, 0x00, 0xee, 0x41, 0x4b, 0xc4, 0x44, 0x58, 0x06, 0x00, 0x54, 0xbb, - 0x44, 0xff, 0x08, 0x40, 0x47, 0xe6, 0xca, 0x9c, 0x08, 0x00, 0x47, 0x9c, - 0x2c, 0x53, 0x06, 0x40, 0x05, 0xa1, 0x1b, 0x95, 0x3f, 0xa5, 0xc6, 0x20, - 0x08, 0xfb, 0x1e, 0x01, 0xff, 0xa1, 0xda, 0x1e, 0xa2, 0xa9, 0x1d, 0x09, - 0x4a, 0xb5, 0x8c, 0x1c, 0x09, 0x85, 0xb6, 0x8b, 0x1b, 0x0b, 0x4a, 0x9a, - 0xac, 0x1a, 0xa8, 0xff, 0x18, 0xaa, 0xfa, 0x17, 0xab, 0xec, 0x15, 0x09, - 0xfd, 0x13, 0xa5, 0x13, 0xad, 0xe2, 0x11, 0x0a, 0x28, 0x6f, 0xeb, 0x0f, - 0xb1, 0xf2, 0x0e, 0xb2, 0xb0, 0x0e, 0xb3, 0x83, 0x08, 0xb4, 0x92, 0x04, - 0x36, 0x3e, 0x00, 0xf8, 0x03, 0x56, 0x3d, 0x37, 0xf8, 0xfd, 0x00, 0x09, - 0x4d, 0x00, 0x19, 0x0e, 0x92, 0x7d, 0x01, 0xff, 0xa9, 0x06, 0x4b, 0x4d, - 0x6c, 0x3b, 0xfd, 0x40, 0x4b, 0x4d, 0x16, 0xb9, 0xfc, 0x00, 0x4c, 0x35, - 0x03, 0x28, 0xfc, 0x40, 0x0d, 0x67, 0x00, 0xc4, 0x03, 0xa8, 0x83, 0x01, - 0x05, 0x6e, 0x37, 0x6b, 0x06, 0x07, 0x5a, 0x5b, 0x05, 0x7a, 0x20, 0x22, - 0x4f, 0x19, 0x6f, 0x94, 0xfc, 0x00, 0x4e, 0x3c, 0x7a, 0x91, 0xfc, 0x00, - 0x04, 0x4d, 0x00, 0x06, 0x4f, 0x9c, 0x73, 0x92, 0xfc, 0x40, 0x4a, 0x3d, - 0x2c, 0x96, 0xfc, 0x00, 0x4d, 0x34, 0x03, 0x5a, 0xfc, 0x40, 0x4a, 0x3d, - 0x2c, 0x93, 0xfc, 0x00, 0xa9, 0x21, 0x4b, 0x4d, 0x6c, 0xf0, 0xfc, 0x00, - 0x05, 0x51, 0x00, 0x01, 0xff, 0x05, 0x7a, 0x20, 0x06, 0x4e, 0xa5, 0x4d, - 0xb0, 0xfd, 0x40, 0x4a, 0x3d, 0x2c, 0x9c, 0xfd, 0x00, 0x4c, 0x4c, 0x16, - 0x9d, 0xfd, 0x40, 0x4b, 0x4d, 0x16, 0xdd, 0xfc, 0x00, 0x4c, 0x35, 0x03, - 0x58, 0xfc, 0x40, 0x4b, 0x4d, 0x16, 0xdc, 0xfc, 0x00, 0x4c, 0x35, 0x03, - 0x57, 0xfc, 0x40, 0xa9, 0x06, 0x53, 0xa0, 0x4d, 0xaf, 0xfd, 0x40, 0x4b, - 0x4d, 0x16, 0xda, 0xfc, 0x00, 0x4c, 0x35, 0x03, 0x55, 0xfc, 0x40, 0xa1, - 0x11, 0x03, 0x4e, 0x00, 0x01, 0xff, 0x4c, 0x4c, 0x16, 0xde, 0xfc, 0x00, - 0x4b, 0x4d, 0x6c, 0xf1, 0xfc, 0x40, 0x02, 0x4f, 0x00, 0x92, 0x02, 0x0f, - 0x58, 0x00, 0x01, 0xff, 0xa1, 0xd8, 0x01, 0x02, 0x60, 0x00, 0xbe, 0x01, - 0xa8, 0x9a, 0x01, 0x06, 0x6e, 0x37, 0x89, 0x01, 0x51, 0x07, 0x5a, 0x99, - 0xfc, 0x00, 0x05, 0x7a, 0x20, 0x65, 0x4f, 0x19, 0x6f, 0x67, 0xfc, 0x00, - 0x03, 0xd5, 0x95, 0x4f, 0x4e, 0x3c, 0x7a, 0x64, 0xfc, 0x00, 0x02, 0x2e, - 0x02, 0x39, 0x04, 0xd6, 0xef, 0x29, 0xb9, 0x06, 0x4f, 0x9c, 0x73, 0x65, - 0xfc, 0x40, 0x03, 0x4e, 0x00, 0x11, 0x02, 0x2e, 0x02, 0x01, 0xff, 0x4a, - 0x3d, 0x2c, 0xf5, 0xfb, 0x00, 0x4d, 0x34, 0x03, 0xf4, 0xfb, 0x40, 0x4a, - 0x3d, 0x2c, 0x69, 0xfc, 0x00, 0x4d, 0x34, 0x03, 0x04, 0xfc, 0x40, 0x4a, - 0x3d, 0x2c, 0xef, 0xfb, 0x00, 0x4d, 0x34, 0x03, 0xee, 0xfb, 0x40, 0x4a, - 0x3d, 0x2c, 0xf1, 0xfb, 0x00, 0x4d, 0x34, 0x03, 0xf0, 0xfb, 0x40, 0x4a, - 0x3d, 0x2c, 0xf3, 0xfb, 0x00, 0x4d, 0x34, 0x03, 0xf2, 0xfb, 0x40, 0x4a, - 0x3d, 0x2c, 0x66, 0xfc, 0x00, 0xa9, 0x06, 0x4b, 0x4d, 0x6c, 0xdf, 0xfc, - 0x40, 0x4b, 0x4d, 0x16, 0x9a, 0xfc, 0x00, 0x4c, 0x35, 0x03, 0x02, 0xfc, - 0x40, 0x4b, 0x4d, 0x16, 0x97, 0xfc, 0x00, 0x4c, 0x35, 0x03, 0x00, 0xfc, - 0x40, 0x04, 0x09, 0x59, 0x11, 0x03, 0x4e, 0x00, 0x01, 0xff, 0x4c, 0x4c, - 0x16, 0x9b, 0xfc, 0x00, 0x4b, 0x4d, 0x6c, 0xe0, 0xfc, 0x40, 0x4b, 0x4d, - 0x16, 0x98, 0xfc, 0x00, 0x4c, 0x35, 0x03, 0x01, 0xfc, 0x40, 0x4a, 0x3d, - 0x2c, 0xf7, 0xfb, 0x00, 0xa9, 0x01, 0xff, 0x4b, 0x4d, 0x16, 0xf8, 0xfb, - 0x00, 0x4c, 0x35, 0x03, 0xf6, 0xfb, 0x40, 0x02, 0x60, 0x00, 0x22, 0x04, - 0x68, 0x00, 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0xeb, 0xfb, 0x00, 0x4d, 0x34, - 0x03, 0xea, 0xfb, 0x00, 0x08, 0x6c, 0x00, 0x01, 0xff, 0x4a, 0x3d, 0x2c, - 0x68, 0xfc, 0x00, 0x4d, 0x34, 0x03, 0x03, 0xfc, 0x40, 0x4a, 0x3d, 0x2c, - 0xed, 0xfb, 0x00, 0x4d, 0x34, 0x03, 0xec, 0xfb, 0x40, 0xa9, 0x06, 0x53, - 0xa0, 0x4d, 0xae, 0xfd, 0x40, 0x4b, 0x4d, 0x16, 0xdb, 0xfc, 0x00, 0x4c, - 0x35, 0x03, 0x56, 0xfc, 0x40, 0x4a, 0x3d, 0x2c, 0x95, 0xfc, 0x00, 0x4d, - 0x34, 0x03, 0x59, 0xfc, 0x40, 0x4a, 0x3d, 0x2c, 0xfa, 0xfb, 0x00, 0xa9, - 0x01, 0xff, 0x4b, 0x4d, 0x16, 0xfb, 0xfb, 0x00, 0x4c, 0x35, 0x03, 0xf9, - 0xfb, 0x40, 0xa1, 0xf6, 0x02, 0x08, 0x4e, 0x00, 0x6a, 0xa8, 0x01, 0xff, - 0x66, 0x3c, 0x06, 0x5b, 0xfc, 0x00, 0x08, 0x4e, 0x00, 0x01, 0xff, 0x0d, - 0x67, 0x00, 0x4c, 0x4f, 0x49, 0x6c, 0xe6, 0xfc, 0x00, 0x52, 0xc8, 0x51, - 0x11, 0xfc, 0x00, 0x05, 0x7a, 0x20, 0x22, 0x4f, 0x19, 0x6f, 0x79, 0xfc, - 0x00, 0x4e, 0x3c, 0x7a, 0x76, 0xfc, 0x00, 0x04, 0x4d, 0x00, 0x06, 0x4f, - 0x9c, 0x73, 0x77, 0xfc, 0x40, 0x4a, 0x3d, 0x2c, 0x7b, 0xfc, 0x00, 0x4d, - 0x34, 0x03, 0x14, 0xfc, 0x40, 0x4a, 0x3d, 0x2c, 0x78, 0xfc, 0x00, 0xa9, - 0x06, 0x4b, 0x4d, 0x6c, 0xe5, 0xfc, 0x40, 0x4b, 0x4d, 0x16, 0xa6, 0xfc, - 0x00, 0x4c, 0x35, 0x03, 0x12, 0xfc, 0x40, 0x4a, 0x3d, 0x2c, 0x7a, 0xfc, - 0x00, 0x4d, 0x34, 0x03, 0x13, 0xfc, 0x40, 0x0d, 0x67, 0x00, 0xf7, 0x01, - 0xa8, 0xb6, 0x01, 0x05, 0x6e, 0x37, 0x8c, 0x01, 0x05, 0x07, 0x5a, 0x63, - 0x05, 0x7a, 0x20, 0x22, 0x4f, 0x19, 0x6f, 0x73, 0xfc, 0x00, 0x4e, 0x3c, - 0x7a, 0x70, 0xfc, 0x00, 0x04, 0x4d, 0x00, 0x06, 0x4f, 0x9c, 0x73, 0x71, - 0xfc, 0x40, 0x4a, 0x3d, 0x2c, 0x75, 0xfc, 0x00, 0x4d, 0x34, 0x03, 0x10, - 0xfc, 0x40, 0x4a, 0x3d, 0x2c, 0x72, 0xfc, 0x00, 0xa9, 0x29, 0x4b, 0x4d, - 0x6c, 0xe3, 0xfc, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x57, 0x30, 0x2c, - 0xa4, 0xfd, 0x00, 0x50, 0x08, 0x5a, 0x56, 0xfd, 0x00, 0x51, 0x6e, 0x37, - 0x55, 0xfd, 0x00, 0x51, 0x07, 0x5a, 0x57, 0xfd, 0x00, 0x4e, 0xa5, 0x4d, - 0xa3, 0xfd, 0x40, 0x4b, 0x4d, 0x16, 0xa4, 0xfc, 0x00, 0x4c, 0x35, 0x03, - 0x0e, 0xfc, 0x40, 0xa9, 0x17, 0x05, 0x51, 0x00, 0x01, 0xff, 0x57, 0x30, - 0x2c, 0xa2, 0xfd, 0x00, 0x51, 0xd3, 0x5a, 0x54, 0xfd, 0x00, 0x4e, 0xa5, - 0x4d, 0xa1, 0xfd, 0x40, 0x4b, 0x4d, 0x16, 0xa3, 0xfc, 0x00, 0x4c, 0x35, - 0x03, 0x0d, 0xfc, 0x40, 0xa9, 0x17, 0x05, 0x51, 0x00, 0x01, 0xff, 0x57, - 0x30, 0x2c, 0xa0, 0xfd, 0x00, 0x51, 0xd3, 0x5a, 0x50, 0xfd, 0x00, 0x4e, - 0xa5, 0x4d, 0x9f, 0xfd, 0x40, 0x4b, 0x4d, 0x16, 0xa1, 0xfc, 0x00, 0x4c, - 0x35, 0x03, 0x0b, 0xfc, 0x40, 0x03, 0xc9, 0x09, 0x11, 0x03, 0x4e, 0x00, - 0x01, 0xff, 0x4c, 0x4c, 0x16, 0xa5, 0xfc, 0x00, 0x4b, 0x4d, 0x6c, 0xe4, - 0xfc, 0x40, 0xa9, 0x1b, 0x05, 0x51, 0x00, 0x01, 0xff, 0x05, 0x6e, 0x37, - 0x06, 0x51, 0xd3, 0x5a, 0x53, 0xfd, 0x40, 0x4a, 0x3d, 0x2c, 0x51, 0xfd, - 0x00, 0x4c, 0x4c, 0x16, 0x52, 0xfd, 0x40, 0x4b, 0x4d, 0x16, 0xa2, 0xfc, - 0x00, 0x4c, 0x35, 0x03, 0x0c, 0xfc, 0x40, 0x4a, 0x3d, 0x2c, 0x74, 0xfc, - 0x00, 0x4d, 0x34, 0x03, 0x0f, 0xfc, 0x40, 0x52, 0x2e, 0x4f, 0x4e, 0xfd, - 0x00, 0x07, 0x4f, 0x00, 0x01, 0xff, 0x0d, 0x67, 0x00, 0x5a, 0x05, 0x08, - 0x59, 0x4a, 0x05, 0x7a, 0x20, 0x11, 0x04, 0x4d, 0x00, 0x01, 0xff, 0x4a, - 0x3d, 0x2c, 0x12, 0xfd, 0x00, 0x4d, 0x34, 0x03, 0xf6, 0xfc, 0x40, 0xa9, - 0x27, 0x4b, 0x4d, 0x6c, 0x3a, 0xfd, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, - 0x04, 0x84, 0x20, 0x0c, 0x51, 0xd3, 0x5a, 0x73, 0xfd, 0x00, 0x4e, 0xa5, - 0x4d, 0x74, 0xfd, 0x40, 0x4a, 0x3d, 0x2c, 0x71, 0xfd, 0x00, 0x4c, 0x4c, - 0x16, 0x72, 0xfd, 0x40, 0x4b, 0x4d, 0x16, 0x33, 0xfd, 0x00, 0x4c, 0x35, - 0x03, 0x27, 0xfc, 0x40, 0x4b, 0x4d, 0x16, 0xb8, 0xfc, 0x00, 0x4c, 0x35, - 0x03, 0x26, 0xfc, 0x40, 0x4a, 0x3d, 0x2c, 0x11, 0xfd, 0x00, 0x4d, 0x34, - 0x03, 0xf5, 0xfc, 0x40, 0xa1, 0xde, 0x04, 0x09, 0xd1, 0xb5, 0xde, 0x02, - 0xa8, 0x06, 0x54, 0x1f, 0x45, 0xfe, 0xfd, 0x40, 0x0a, 0x31, 0xa5, 0x8b, - 0x02, 0x09, 0xd1, 0xb5, 0x01, 0xff, 0x0d, 0x67, 0x00, 0xf5, 0x01, 0xa8, - 0xa8, 0x01, 0x05, 0x6e, 0x37, 0x83, 0x01, 0x05, 0x07, 0x5a, 0x65, 0x05, - 0x7a, 0x20, 0x21, 0x04, 0x3c, 0x7a, 0x11, 0x04, 0x4d, 0x00, 0x01, 0xff, - 0x4a, 0x3d, 0x2c, 0x1a, 0xfd, 0x00, 0x4d, 0x34, 0x03, 0xfe, 0xfc, 0x40, - 0x4a, 0x3d, 0x2c, 0x29, 0xfd, 0x00, 0x4d, 0x34, 0x03, 0x0d, 0xfd, 0x40, - 0x4a, 0x3d, 0x2c, 0x28, 0xfd, 0x00, 0xa9, 0x2c, 0x4b, 0x4d, 0x6c, 0xe9, - 0xfc, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x05, 0x07, 0x5a, 0x11, 0x05, - 0x7a, 0x20, 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0x6c, 0xfd, 0x00, 0x4c, 0x4c, - 0x16, 0x6d, 0xfd, 0x40, 0x4a, 0x3d, 0x2c, 0x6a, 0xfd, 0x00, 0x4c, 0x4c, - 0x16, 0x6b, 0xfd, 0x40, 0x4b, 0x4d, 0x16, 0x30, 0xfd, 0x00, 0x4c, 0x35, - 0x03, 0x0c, 0xfd, 0x40, 0x4a, 0x3d, 0x2c, 0x27, 0xfd, 0x00, 0xa9, 0x06, - 0x4b, 0x4d, 0x6c, 0x39, 0xfd, 0x40, 0x4b, 0x4d, 0x16, 0x2f, 0xfd, 0x00, - 0x4c, 0x35, 0x03, 0x0b, 0xfd, 0x40, 0x4a, 0x3d, 0x2c, 0x25, 0xfd, 0x00, - 0xa9, 0x0c, 0x4b, 0x4d, 0x6c, 0x37, 0xfd, 0x00, 0x53, 0xa0, 0x4d, 0x69, - 0xfd, 0x40, 0x4b, 0x4d, 0x16, 0x2d, 0xfd, 0x00, 0x4c, 0x35, 0x03, 0x09, - 0xfd, 0x40, 0x03, 0xc9, 0x09, 0x11, 0x03, 0x4e, 0x00, 0x01, 0xff, 0x4c, - 0x4c, 0x16, 0x32, 0xfd, 0x00, 0x4b, 0x4d, 0x6c, 0xea, 0xfc, 0x40, 0x4a, - 0x3d, 0x2c, 0x26, 0xfd, 0x00, 0xa9, 0x21, 0x4b, 0x4d, 0x6c, 0x38, 0xfd, - 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x05, 0x7a, 0x20, 0x06, 0x4e, 0xa5, - 0x4d, 0xaa, 0xfd, 0x40, 0x4a, 0x3d, 0x2c, 0x67, 0xfd, 0x00, 0x4c, 0x4c, - 0x16, 0x68, 0xfd, 0x40, 0x4b, 0x4d, 0x16, 0x2e, 0xfd, 0x00, 0x4c, 0x35, - 0x03, 0x0a, 0xfd, 0x40, 0x4a, 0x3d, 0x2c, 0x19, 0xfd, 0x00, 0x4d, 0x34, - 0x03, 0xfd, 0xfc, 0x40, 0x05, 0x81, 0x5d, 0x2e, 0x06, 0xce, 0xd8, 0x1e, - 0x05, 0x5f, 0x4f, 0x06, 0x5e, 0x44, 0x06, 0x63, 0xfc, 0x40, 0x80, 0x06, - 0x51, 0xaf, 0x5c, 0x5f, 0xfc, 0x40, 0x4d, 0x34, 0x03, 0x62, 0xfc, 0x00, - 0x4b, 0x4d, 0x6c, 0xf4, 0xfc, 0x40, 0x4d, 0x34, 0x03, 0x60, 0xfc, 0x00, - 0x4b, 0x4d, 0x6c, 0xf2, 0xfc, 0x40, 0x80, 0x06, 0x51, 0xaf, 0x5c, 0x5e, - 0xfc, 0x40, 0x4d, 0x34, 0x03, 0x61, 0xfc, 0x00, 0x4b, 0x4d, 0x6c, 0xf3, - 0xfc, 0x40, 0x0d, 0x67, 0x00, 0xea, 0x01, 0xa8, 0xb8, 0x01, 0x05, 0x6e, - 0x37, 0x8e, 0x01, 0x05, 0x07, 0x5a, 0x65, 0x05, 0x7a, 0x20, 0x21, 0x04, - 0x3c, 0x7a, 0x11, 0x04, 0x4d, 0x00, 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0x18, - 0xfd, 0x00, 0x4d, 0x34, 0x03, 0xfc, 0xfc, 0x40, 0x4a, 0x3d, 0x2c, 0x2a, - 0xfd, 0x00, 0x4d, 0x34, 0x03, 0x0e, 0xfd, 0x40, 0xa9, 0x32, 0x4b, 0x4d, - 0x6c, 0xe7, 0xfc, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x04, 0x84, 0x20, - 0x17, 0x51, 0x6e, 0x37, 0x61, 0xfd, 0x00, 0x05, 0x7a, 0x20, 0x01, 0xff, - 0x4a, 0x3d, 0x2c, 0x62, 0xfd, 0x00, 0x4c, 0x4c, 0x16, 0x63, 0xfd, 0x40, - 0x4a, 0x3d, 0x2c, 0x5f, 0xfd, 0x00, 0x4c, 0x4c, 0x16, 0x60, 0xfd, 0x40, - 0x4b, 0x4d, 0x16, 0xb0, 0xfc, 0x00, 0x4c, 0x35, 0x03, 0x1f, 0xfc, 0x40, - 0xa9, 0x17, 0x4b, 0x4d, 0x6c, 0x36, 0xfd, 0x00, 0x05, 0x51, 0x00, 0x01, - 0xff, 0x57, 0x30, 0x2c, 0xa8, 0xfd, 0x00, 0x4e, 0xa5, 0x4d, 0xc6, 0xfd, - 0x40, 0x4b, 0x4d, 0x16, 0xaf, 0xfc, 0x00, 0x4c, 0x35, 0x03, 0x1e, 0xfc, - 0x40, 0xa9, 0x17, 0x4b, 0x4d, 0x6c, 0x34, 0xfd, 0x00, 0x05, 0x51, 0x00, - 0x01, 0xff, 0x57, 0x30, 0x2c, 0x5e, 0xfd, 0x00, 0x50, 0x08, 0x5a, 0x5d, - 0xfd, 0x40, 0x4b, 0x4d, 0x16, 0xad, 0xfc, 0x00, 0x4c, 0x35, 0x03, 0x1c, - 0xfc, 0x40, 0x03, 0xc9, 0x09, 0x11, 0x03, 0x4e, 0x00, 0x01, 0xff, 0x4c, - 0x4c, 0x16, 0x31, 0xfd, 0x00, 0x4b, 0x4d, 0x6c, 0xe8, 0xfc, 0x40, 0xa9, - 0x0c, 0x4b, 0x4d, 0x6c, 0x35, 0xfd, 0x00, 0x56, 0x69, 0x37, 0x5c, 0xfd, - 0x40, 0x4b, 0x4d, 0x16, 0xae, 0xfc, 0x00, 0x4c, 0x35, 0x03, 0x1d, 0xfc, - 0x40, 0x4a, 0x3d, 0x2c, 0x17, 0xfd, 0x00, 0x4d, 0x34, 0x03, 0xfb, 0xfc, - 0x40, 0x07, 0x53, 0x0a, 0x3e, 0xac, 0x01, 0xff, 0xa1, 0x2d, 0x02, 0x74, - 0x00, 0x01, 0xff, 0x80, 0x1a, 0x03, 0xdd, 0x0d, 0x01, 0xff, 0x53, 0xa6, - 0x46, 0x46, 0xfd, 0x00, 0xa8, 0x01, 0xff, 0x52, 0xfa, 0x52, 0xfa, 0xfd, - 0x00, 0x5c, 0xde, 0x18, 0x4c, 0xfd, 0x40, 0x4d, 0x34, 0x03, 0xf9, 0xfd, - 0x00, 0x67, 0x1a, 0x03, 0xf0, 0xfd, 0x40, 0x4d, 0xe6, 0x7e, 0xcf, 0xfd, - 0x00, 0x4f, 0x44, 0x37, 0xf5, 0xfd, 0x40, 0x0d, 0x67, 0x00, 0x77, 0x04, - 0x84, 0x20, 0x4a, 0x51, 0x07, 0x5a, 0xb2, 0xfc, 0x00, 0x05, 0x7a, 0x20, - 0x21, 0x04, 0x3c, 0x7a, 0x11, 0x04, 0x4d, 0x00, 0x01, 0xff, 0x4a, 0x3d, - 0x2c, 0x22, 0xfd, 0x00, 0x4d, 0x34, 0x03, 0x06, 0xfd, 0x40, 0x4a, 0x3d, - 0x2c, 0x2b, 0xfd, 0x00, 0x4d, 0x34, 0x03, 0x0f, 0xfd, 0x40, 0xa9, 0x11, - 0x0a, 0x96, 0x7d, 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0x66, 0xfd, 0x00, 0x4c, - 0x4c, 0x16, 0xc5, 0xfd, 0x40, 0x4b, 0x4d, 0x16, 0xb3, 0xfc, 0x00, 0x4c, - 0x35, 0x03, 0x21, 0xfc, 0x40, 0xa9, 0x1b, 0x05, 0x51, 0x00, 0x01, 0xff, - 0x04, 0x84, 0x20, 0x06, 0x4e, 0xa5, 0x4d, 0xa9, 0xfd, 0x40, 0x4a, 0x3d, - 0x2c, 0x64, 0xfd, 0x00, 0x4c, 0x4c, 0x16, 0x65, 0xfd, 0x40, 0x4b, 0x4d, - 0x16, 0xb1, 0xfc, 0x00, 0x4c, 0x35, 0x03, 0x20, 0xfc, 0x40, 0x4a, 0x3d, - 0x2c, 0x21, 0xfd, 0x00, 0x4d, 0x34, 0x03, 0x05, 0xfd, 0x40, 0xa1, 0x06, - 0x66, 0x88, 0x06, 0x5c, 0xfc, 0x40, 0x4e, 0x50, 0x75, 0x41, 0xfd, 0x80, - 0x16, 0x06, 0x88, 0xd9, 0x06, 0x52, 0x3e, 0x54, 0xf6, 0xfd, 0x40, 0x47, - 0x52, 0x75, 0x40, 0xfd, 0x00, 0x48, 0x72, 0xc5, 0x4f, 0xfd, 0x40, 0x42, - 0x31, 0x12, 0x42, 0xfd, 0x00, 0xb5, 0x01, 0xff, 0xed, 0x43, 0xfd, 0x80, - 0x06, 0x43, 0xcc, 0x44, 0x45, 0xfd, 0x40, 0x42, 0x31, 0x12, 0x44, 0xfd, - 0x40, 0xa1, 0x06, 0x4d, 0xaf, 0x87, 0x4b, 0xfd, 0x40, 0x07, 0xf6, 0x13, - 0x06, 0x6a, 0x17, 0x03, 0xf1, 0xfd, 0x40, 0x0d, 0x67, 0x00, 0x54, 0x05, - 0x08, 0x59, 0x44, 0x05, 0x7a, 0x20, 0x11, 0x04, 0x4d, 0x00, 0x01, 0xff, - 0x4a, 0x3d, 0x2c, 0x7f, 0xfc, 0x00, 0x4d, 0x34, 0x03, 0x36, 0xfc, 0x40, - 0xa9, 0x21, 0x05, 0x51, 0x00, 0x01, 0xff, 0x04, 0x84, 0x20, 0x0c, 0x4f, - 0x92, 0x6e, 0x7f, 0xfd, 0x00, 0x4e, 0xa5, 0x4d, 0xb2, 0xfd, 0x40, 0x4a, - 0x3d, 0x2c, 0x7e, 0xfd, 0x00, 0x4c, 0x4c, 0x16, 0xb4, 0xfd, 0x40, 0x4b, - 0x4d, 0x16, 0xc3, 0xfc, 0x00, 0x4c, 0x35, 0x03, 0x34, 0xfc, 0x40, 0x4b, - 0x4d, 0x16, 0xc2, 0xfc, 0x00, 0x4c, 0x35, 0x03, 0x33, 0xfc, 0x40, 0x4a, - 0x3d, 0x2c, 0x7e, 0xfc, 0x00, 0x4d, 0x34, 0x03, 0x35, 0xfc, 0x40, 0x0d, - 0x67, 0x00, 0xe1, 0x01, 0xa8, 0xa4, 0x01, 0x05, 0x6e, 0x37, 0x61, 0x06, - 0x07, 0x5a, 0x51, 0x05, 0x7a, 0x20, 0x22, 0x4f, 0x19, 0x6f, 0x8d, 0xfc, - 0x00, 0x4e, 0x3c, 0x7a, 0x8a, 0xfc, 0x00, 0x04, 0x4d, 0x00, 0x06, 0x4f, - 0x9c, 0x73, 0x8b, 0xfc, 0x40, 0x4a, 0x3d, 0x2c, 0x8f, 0xfc, 0x00, 0x4d, - 0x34, 0x03, 0x50, 0xfc, 0x40, 0x4a, 0x3d, 0x2c, 0x8c, 0xfc, 0x00, 0xa9, - 0x17, 0x4b, 0x4d, 0x6c, 0xee, 0xfc, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, - 0x57, 0x30, 0x2c, 0x9b, 0xfd, 0x00, 0x4e, 0xa5, 0x4d, 0x9a, 0xfd, 0x40, - 0x4b, 0x4d, 0x16, 0xd5, 0xfc, 0x00, 0x4c, 0x35, 0x03, 0x4e, 0xfc, 0x40, - 0x4b, 0x4d, 0x16, 0xd4, 0xfc, 0x00, 0x4c, 0x35, 0x03, 0x4d, 0xfc, 0x40, - 0xa9, 0x31, 0x05, 0x51, 0x00, 0x01, 0xff, 0x57, 0x30, 0x2c, 0x99, 0xfd, - 0x00, 0x04, 0x84, 0x20, 0x16, 0x05, 0x7a, 0x20, 0x06, 0x4e, 0xa5, 0x4d, - 0xc7, 0xfd, 0x40, 0x4a, 0x3d, 0x2c, 0x97, 0xfd, 0x00, 0x4c, 0x4c, 0x16, - 0x98, 0xfd, 0x40, 0x4a, 0x3d, 0x2c, 0xbd, 0xfd, 0x00, 0x4c, 0x4c, 0x16, - 0xb8, 0xfd, 0x40, 0x4b, 0x4d, 0x16, 0xd2, 0xfc, 0x00, 0x4c, 0x35, 0x03, - 0x4b, 0xfc, 0x40, 0x03, 0xc9, 0x09, 0x11, 0x03, 0x4e, 0x00, 0x01, 0xff, - 0x4c, 0x4c, 0x16, 0xd6, 0xfc, 0x00, 0x4b, 0x4d, 0x6c, 0xef, 0xfc, 0x40, - 0xa9, 0x17, 0x05, 0x51, 0x00, 0x01, 0xff, 0x57, 0x30, 0x2c, 0x96, 0xfd, - 0x00, 0x51, 0xd3, 0x5a, 0x95, 0xfd, 0x00, 0x4e, 0xa5, 0x4d, 0xb3, 0xfd, - 0x40, 0x4b, 0x4d, 0x16, 0xd3, 0xfc, 0x00, 0x4c, 0x35, 0x03, 0x4c, 0xfc, - 0x40, 0x4a, 0x3d, 0x2c, 0x8e, 0xfc, 0x00, 0x4d, 0x34, 0x03, 0x4f, 0xfc, - 0x40, 0x09, 0x7b, 0x20, 0x06, 0x55, 0x6d, 0x3c, 0xf4, 0xfd, 0x40, 0x05, - 0x67, 0x00, 0xa5, 0x01, 0x04, 0x84, 0x20, 0x7c, 0x05, 0x6e, 0x37, 0x4d, - 0x05, 0x07, 0x5a, 0x24, 0x05, 0x7a, 0x20, 0x06, 0x51, 0x58, 0x5e, 0x4a, - 0xfc, 0x40, 0x4a, 0x3d, 0x2c, 0x89, 0xfc, 0x00, 0xa9, 0x06, 0x53, 0xa0, - 0x4d, 0xb1, 0xfd, 0x40, 0x4b, 0x4d, 0x16, 0xd1, 0xfc, 0x00, 0x4c, 0x35, - 0x03, 0x48, 0xfc, 0x40, 0xa9, 0x17, 0x05, 0x51, 0x00, 0x01, 0xff, 0x51, - 0x6e, 0x37, 0x8e, 0xfd, 0x00, 0x51, 0xd3, 0x5a, 0x8f, 0xfd, 0x00, 0x4e, - 0xa5, 0x4d, 0xb9, 0xfd, 0x40, 0x4b, 0x4d, 0x16, 0xd0, 0xfc, 0x00, 0x4c, - 0x35, 0x03, 0x47, 0xfc, 0x40, 0xa9, 0x1d, 0x05, 0x51, 0x00, 0x01, 0xff, - 0x50, 0x08, 0x5a, 0x8c, 0xfd, 0x00, 0x51, 0x07, 0x5a, 0x92, 0xfd, 0x00, - 0x51, 0xd3, 0x5a, 0x8d, 0xfd, 0x00, 0x4e, 0xa5, 0x4d, 0xc0, 0xfd, 0x40, - 0x4b, 0x4d, 0x16, 0xce, 0xfc, 0x00, 0x4c, 0x35, 0x03, 0x45, 0xfc, 0x40, - 0xa9, 0x17, 0x05, 0x51, 0x00, 0x01, 0xff, 0x51, 0x6e, 0x37, 0x89, 0xfd, - 0x00, 0x51, 0xd3, 0x5a, 0x8a, 0xfd, 0x00, 0x4e, 0xa5, 0x4d, 0x8b, 0xfd, - 0x40, 0x4b, 0x4d, 0x16, 0xcf, 0xfc, 0x00, 0x4c, 0x35, 0x03, 0x46, 0xfc, - 0x40, 0x4a, 0x3d, 0x2c, 0x88, 0xfc, 0x00, 0x55, 0x43, 0x1e, 0x49, 0xfc, - 0x40, 0x05, 0x67, 0x00, 0xe6, 0x01, 0xa8, 0xaa, 0x01, 0x05, 0x6e, 0x37, - 0x6d, 0x05, 0x07, 0x5a, 0x4a, 0x05, 0x7a, 0x20, 0x11, 0x04, 0x4d, 0x00, - 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0x87, 0xfc, 0x00, 0x4d, 0x34, 0x03, 0x44, - 0xfc, 0x40, 0x4a, 0x3d, 0x2c, 0x85, 0xfc, 0x00, 0xa9, 0x21, 0x4b, 0x4d, - 0x6c, 0xed, 0xfc, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x04, 0x84, 0x20, - 0x06, 0x4e, 0xa5, 0x4d, 0xad, 0xfd, 0x40, 0x4a, 0x3d, 0x2c, 0x87, 0xfd, - 0x00, 0x4c, 0x4c, 0x16, 0x88, 0xfd, 0x40, 0x4b, 0x4d, 0x16, 0xcc, 0xfc, - 0x00, 0x4c, 0x35, 0x03, 0x42, 0xfc, 0x40, 0xa9, 0x11, 0x0a, 0x96, 0x7d, - 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0x85, 0xfd, 0x00, 0x4c, 0x4c, 0x16, 0x86, - 0xfd, 0x40, 0x4b, 0x4d, 0x16, 0xcb, 0xfc, 0x00, 0x4c, 0x35, 0x03, 0x41, - 0xfc, 0x40, 0xa9, 0x2b, 0x05, 0x51, 0x00, 0x01, 0xff, 0x05, 0x6e, 0x37, - 0x16, 0x05, 0x7a, 0x20, 0x06, 0x4e, 0xa5, 0x4d, 0xac, 0xfd, 0x40, 0x4a, - 0x3d, 0x2c, 0xbc, 0xfd, 0x00, 0x4c, 0x4c, 0x16, 0xba, 0xfd, 0x40, 0x4a, - 0x3d, 0x2c, 0x84, 0xfd, 0x00, 0x4c, 0x4c, 0x16, 0x83, 0xfd, 0x40, 0x4b, - 0x4d, 0x16, 0xc9, 0xfc, 0x00, 0x4c, 0x35, 0x03, 0x3f, 0xfc, 0x40, 0x03, - 0xc9, 0x09, 0x06, 0x4f, 0x0e, 0x6b, 0xcd, 0xfc, 0x40, 0xa9, 0x21, 0x05, - 0x51, 0x00, 0x01, 0xff, 0x57, 0x30, 0x2c, 0x82, 0xfd, 0x00, 0x05, 0x7a, - 0x20, 0x06, 0x4e, 0xa5, 0x4d, 0x81, 0xfd, 0x40, 0x4a, 0x3d, 0x2c, 0x80, - 0xfd, 0x00, 0x4c, 0x4c, 0x16, 0xb5, 0xfd, 0x40, 0x4b, 0x4d, 0x16, 0xca, - 0xfc, 0x00, 0x4c, 0x35, 0x03, 0x40, 0xfc, 0x40, 0x4a, 0x3d, 0x2c, 0xfc, - 0xfe, 0x00, 0x4d, 0x34, 0x03, 0xfb, 0xfe, 0x00, 0x08, 0x6c, 0x00, 0x3b, - 0x05, 0x51, 0x00, 0x01, 0xff, 0x06, 0x56, 0x00, 0x11, 0x0c, 0x01, 0x90, - 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0xf6, 0xfe, 0x00, 0x4d, 0x34, 0x03, 0xf5, - 0xfe, 0x40, 0x06, 0x5c, 0x00, 0x11, 0x06, 0x54, 0x12, 0x01, 0xff, 0x4a, - 0x3d, 0x2c, 0xfa, 0xfe, 0x00, 0x4d, 0x34, 0x03, 0xf9, 0xfe, 0x40, 0x4a, - 0x3d, 0x2c, 0xf8, 0xfe, 0x00, 0x4d, 0x34, 0x03, 0xf7, 0xfe, 0x40, 0x4a, - 0x3d, 0x2c, 0x86, 0xfc, 0x00, 0x4d, 0x34, 0x03, 0x43, 0xfc, 0x40, 0x08, - 0xf5, 0x13, 0x4c, 0x09, 0x84, 0x20, 0x01, 0xff, 0x0d, 0x67, 0x00, 0x37, - 0x51, 0x08, 0x59, 0x1a, 0xfc, 0x00, 0x06, 0x6e, 0x37, 0x21, 0x06, 0xd3, - 0x5a, 0x11, 0x04, 0x4d, 0x00, 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0x20, 0xfd, - 0x00, 0x4d, 0x34, 0x03, 0x04, 0xfd, 0x40, 0x4b, 0x4d, 0x16, 0xac, 0xfc, - 0x00, 0x4c, 0x35, 0x03, 0x1b, 0xfc, 0x40, 0x4b, 0x4d, 0x16, 0xab, 0xfc, - 0x00, 0x4c, 0x35, 0x03, 0x19, 0xfc, 0x40, 0x4a, 0x3d, 0x2c, 0x1f, 0xfd, - 0x00, 0x4d, 0x34, 0x03, 0x03, 0xfd, 0x40, 0x05, 0x67, 0x00, 0x99, 0x01, - 0x05, 0x08, 0x59, 0x88, 0x01, 0x06, 0x6e, 0x37, 0x78, 0x06, 0x07, 0x5a, - 0x68, 0x04, 0xfd, 0x13, 0x4a, 0x05, 0x7a, 0x20, 0x11, 0x04, 0x4d, 0x00, - 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0x84, 0xfc, 0x00, 0x4d, 0x34, 0x03, 0x3e, - 0xfc, 0x40, 0x4a, 0x3d, 0x2c, 0x82, 0xfc, 0x00, 0xa9, 0x21, 0x4b, 0x4d, - 0x6c, 0xec, 0xfc, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x05, 0x7a, 0x20, - 0x06, 0x4e, 0xa5, 0x4d, 0xb7, 0xfd, 0x40, 0x4a, 0x3d, 0x2c, 0xbb, 0xfd, - 0x00, 0x4c, 0x4c, 0x16, 0xc3, 0xfd, 0x40, 0x4b, 0x4d, 0x16, 0xc8, 0xfc, - 0x00, 0x4c, 0x35, 0x03, 0x3c, 0xfc, 0x40, 0x4a, 0x3d, 0x2c, 0x81, 0xfc, - 0x00, 0xa9, 0x06, 0x4b, 0x4d, 0x6c, 0xeb, 0xfc, 0x40, 0x4b, 0x4d, 0x16, - 0xc7, 0xfc, 0x00, 0x4c, 0x35, 0x03, 0x3b, 0xfc, 0x40, 0x4b, 0x4d, 0x16, - 0xc6, 0xfc, 0x00, 0x4c, 0x35, 0x03, 0x3a, 0xfc, 0x40, 0x4b, 0x4d, 0x16, - 0xc4, 0xfc, 0x00, 0x4c, 0x35, 0x03, 0x38, 0xfc, 0x40, 0x4b, 0x4d, 0x16, - 0xc5, 0xfc, 0x00, 0x4c, 0x35, 0x03, 0x39, 0xfc, 0x40, 0x4a, 0x3d, 0x2c, - 0x80, 0xfc, 0x00, 0x4d, 0x34, 0x03, 0x37, 0xfc, 0x00, 0x08, 0x6c, 0x00, - 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0x83, 0xfc, 0x00, 0x4d, 0x34, 0x03, 0x3d, - 0xfc, 0x40, 0x4e, 0x54, 0x74, 0xfb, 0xfd, 0x00, 0x09, 0x7b, 0x20, 0x01, - 0xff, 0x0d, 0x67, 0x00, 0x67, 0x04, 0x84, 0x20, 0x44, 0x05, 0x7a, 0x20, - 0x11, 0x04, 0x4d, 0x00, 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0x1e, 0xfd, 0x00, - 0x4d, 0x34, 0x03, 0x02, 0xfd, 0x40, 0xa9, 0x21, 0x05, 0x51, 0x00, 0x01, - 0xff, 0x57, 0x30, 0x2c, 0xa7, 0xfd, 0x00, 0x04, 0x84, 0x20, 0x06, 0x4e, - 0xa5, 0x4d, 0xa5, 0xfd, 0x40, 0x4a, 0x3d, 0x2c, 0x58, 0xfd, 0x00, 0x4c, - 0x4c, 0x16, 0x59, 0xfd, 0x40, 0x4b, 0x4d, 0x16, 0xa8, 0xfc, 0x00, 0x4c, - 0x35, 0x03, 0x16, 0xfc, 0x40, 0xa9, 0x11, 0x05, 0x51, 0x00, 0x01, 0xff, - 0x57, 0x30, 0x2c, 0xa6, 0xfd, 0x00, 0x4e, 0xa5, 0x4d, 0xbe, 0xfd, 0x40, - 0x4b, 0x4d, 0x16, 0xa7, 0xfc, 0x00, 0x4c, 0x35, 0x03, 0x15, 0xfc, 0x40, - 0x4a, 0x3d, 0x2c, 0x1d, 0xfd, 0x00, 0x4d, 0x34, 0x03, 0x01, 0xfd, 0x40, - 0x08, 0x85, 0x20, 0x4a, 0x08, 0x4e, 0x00, 0x01, 0xff, 0x5a, 0x3e, 0x1e, - 0x53, 0xfc, 0x00, 0x06, 0x6e, 0x37, 0x2f, 0x05, 0x7a, 0x20, 0x0c, 0x5d, - 0x3b, 0x16, 0xd9, 0xfc, 0x00, 0x51, 0x58, 0x5e, 0x54, 0xfc, 0x40, 0xa9, - 0x11, 0x05, 0x51, 0x00, 0x01, 0xff, 0x51, 0x6e, 0x37, 0x93, 0xfd, 0x00, - 0x51, 0xd3, 0x5a, 0x94, 0xfd, 0x40, 0x4b, 0x4d, 0x16, 0xd8, 0xfc, 0x00, - 0x4c, 0x35, 0x03, 0x52, 0xfc, 0x40, 0x4b, 0x4d, 0x16, 0xd7, 0xfc, 0x00, - 0x4c, 0x35, 0x03, 0x51, 0xfc, 0x40, 0x0d, 0x67, 0x00, 0x4c, 0x05, 0x6e, - 0x37, 0x34, 0x05, 0x7a, 0x20, 0x11, 0x04, 0x4d, 0x00, 0x01, 0xff, 0x4a, - 0x3d, 0x2c, 0x1c, 0xfd, 0x00, 0x4d, 0x34, 0x03, 0x00, 0xfd, 0x40, 0xa9, - 0x11, 0x05, 0x51, 0x00, 0x01, 0xff, 0x57, 0x30, 0x2c, 0x5b, 0xfd, 0x00, - 0x4e, 0xa5, 0x4d, 0x5a, 0xfd, 0x40, 0x4b, 0x4d, 0x16, 0xaa, 0xfc, 0x00, - 0x4c, 0x35, 0x03, 0x18, 0xfc, 0x40, 0xa9, 0x06, 0x53, 0xa0, 0x4d, 0xbf, - 0xfd, 0x40, 0x4b, 0x4d, 0x16, 0xa9, 0xfc, 0x00, 0x4c, 0x35, 0x03, 0x17, - 0xfc, 0x40, 0x4a, 0x3d, 0x2c, 0x1b, 0xfd, 0x00, 0x4d, 0x34, 0x03, 0xff, - 0xfc, 0x40, 0x0d, 0x67, 0x00, 0x4a, 0x06, 0x6e, 0x37, 0x3a, 0x05, 0x7a, - 0x20, 0x11, 0x04, 0x4d, 0x00, 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0x16, 0xfd, - 0x00, 0x4d, 0x34, 0x03, 0xfa, 0xfc, 0x40, 0xa9, 0x17, 0x05, 0x51, 0x00, - 0x01, 0xff, 0x57, 0x30, 0x2c, 0x7b, 0xfd, 0x00, 0x4f, 0x92, 0x6e, 0x79, - 0xfd, 0x00, 0x4e, 0xa5, 0x4d, 0x7a, 0xfd, 0x40, 0x4b, 0x4d, 0x16, 0xbd, - 0xfc, 0x00, 0x4c, 0x35, 0x03, 0x2c, 0xfc, 0x40, 0x4b, 0x4d, 0x16, 0xbc, - 0xfc, 0x00, 0x4c, 0x35, 0x03, 0x2b, 0xfc, 0x40, 0x4a, 0x3d, 0x2c, 0x15, - 0xfd, 0x00, 0x4d, 0x34, 0x03, 0xf9, 0xfc, 0x40, 0x0d, 0x67, 0x00, 0x6c, - 0x05, 0x08, 0x59, 0x5c, 0x06, 0x6e, 0x37, 0x4c, 0x05, 0x07, 0x5a, 0x29, - 0x05, 0x7a, 0x20, 0x11, 0x04, 0x4d, 0x00, 0x01, 0xff, 0x4a, 0x3d, 0x2c, - 0x7d, 0xfc, 0x00, 0x4d, 0x34, 0x03, 0x32, 0xfc, 0x40, 0xa9, 0x06, 0x53, - 0xa0, 0x4d, 0xc1, 0xfd, 0x40, 0x4b, 0x4d, 0x16, 0xc1, 0xfc, 0x00, 0x4c, - 0x35, 0x03, 0x30, 0xfc, 0x40, 0xa9, 0x11, 0x0a, 0x96, 0x7d, 0x01, 0xff, - 0x4a, 0x3d, 0x2c, 0x7c, 0xfd, 0x00, 0x4c, 0x4c, 0x16, 0x7d, 0xfd, 0x40, - 0x4b, 0x4d, 0x16, 0xc0, 0xfc, 0x00, 0x4c, 0x35, 0x03, 0x2f, 0xfc, 0x40, - 0x4b, 0x4d, 0x16, 0xbe, 0xfc, 0x00, 0x4c, 0x35, 0x03, 0x2d, 0xfc, 0x40, - 0x4b, 0x4d, 0x16, 0xbf, 0xfc, 0x00, 0x4c, 0x35, 0x03, 0x2e, 0xfc, 0x40, - 0x4a, 0x3d, 0x2c, 0x7c, 0xfc, 0x00, 0x4d, 0x34, 0x03, 0x31, 0xfc, 0x40, - 0x0d, 0x67, 0x00, 0x87, 0x01, 0x04, 0x84, 0x20, 0x64, 0x06, 0x6e, 0x37, - 0x54, 0x05, 0x07, 0x5a, 0x31, 0x06, 0xd3, 0x5a, 0x21, 0x04, 0x3c, 0x7a, - 0x11, 0x04, 0x4d, 0x00, 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0x24, 0xfd, 0x00, - 0x4d, 0x34, 0x03, 0x08, 0xfd, 0x40, 0x4a, 0x3d, 0x2c, 0x2c, 0xfd, 0x00, - 0x4d, 0x34, 0x03, 0x10, 0xfd, 0x40, 0x4b, 0x4d, 0x16, 0xb7, 0xfc, 0x00, - 0x4c, 0x35, 0x03, 0x25, 0xfc, 0x40, 0xa9, 0x11, 0x0a, 0x96, 0x7d, 0x01, - 0xff, 0x4a, 0x3d, 0x2c, 0x6f, 0xfd, 0x00, 0x4c, 0x4c, 0x16, 0x70, 0xfd, - 0x40, 0x4b, 0x4d, 0x16, 0xb6, 0xfc, 0x00, 0x4c, 0x35, 0x03, 0x24, 0xfc, - 0x40, 0x4b, 0x4d, 0x16, 0xb4, 0xfc, 0x00, 0x4c, 0x35, 0x03, 0x22, 0xfc, - 0x40, 0xa9, 0x11, 0x05, 0x51, 0x00, 0x01, 0xff, 0x57, 0x30, 0x2c, 0x6e, - 0xfd, 0x00, 0x4e, 0xa5, 0x4d, 0xab, 0xfd, 0x40, 0x4b, 0x4d, 0x16, 0xb5, - 0xfc, 0x00, 0x4c, 0x35, 0x03, 0x23, 0xfc, 0x40, 0x4a, 0x3d, 0x2c, 0x23, - 0xfd, 0x00, 0x4d, 0x34, 0x03, 0x07, 0xfd, 0x40, 0x08, 0x4e, 0x00, 0x06, - 0x5c, 0xc6, 0x17, 0xfd, 0xfd, 0x40, 0x0d, 0x67, 0x00, 0x93, 0x01, 0xa8, - 0x68, 0x06, 0x6e, 0x37, 0x58, 0x05, 0x07, 0x5a, 0x40, 0x05, 0x7a, 0x20, - 0x22, 0x4f, 0x19, 0x6f, 0x6d, 0xfc, 0x00, 0x4e, 0x3c, 0x7a, 0x6a, 0xfc, - 0x00, 0x04, 0x4d, 0x00, 0x06, 0x4f, 0x9c, 0x73, 0x6b, 0xfc, 0x40, 0x4a, - 0x3d, 0x2c, 0x6f, 0xfc, 0x00, 0x4d, 0x34, 0x03, 0x0a, 0xfc, 0x40, 0x4a, - 0x3d, 0x2c, 0x6c, 0xfc, 0x00, 0xa9, 0x06, 0x4b, 0x4d, 0x6c, 0xe1, 0xfc, - 0x40, 0x4b, 0x4d, 0x16, 0x9f, 0xfc, 0x00, 0x4c, 0x35, 0x03, 0x08, 0xfc, - 0x40, 0xa9, 0x06, 0x53, 0xa0, 0x4d, 0x9e, 0xfd, 0x40, 0x4b, 0x4d, 0x16, - 0x9e, 0xfc, 0x00, 0x4c, 0x35, 0x03, 0x07, 0xfc, 0x40, 0x4b, 0x4d, 0x16, - 0x9c, 0xfc, 0x00, 0x4c, 0x35, 0x03, 0x05, 0xfc, 0x40, 0x03, 0xc9, 0x09, - 0x11, 0x03, 0x4e, 0x00, 0x01, 0xff, 0x4c, 0x4c, 0x16, 0xa0, 0xfc, 0x00, - 0x4b, 0x4d, 0x6c, 0xe2, 0xfc, 0x40, 0xa9, 0x06, 0x53, 0xa0, 0x4d, 0xc2, - 0xfd, 0x40, 0x4b, 0x4d, 0x16, 0x9d, 0xfc, 0x00, 0x4c, 0x35, 0x03, 0x06, - 0xfc, 0x40, 0x4a, 0x3d, 0x2c, 0x6e, 0xfc, 0x00, 0x4d, 0x34, 0x03, 0x09, - 0xfc, 0x40, 0x08, 0x4d, 0x9a, 0x69, 0x52, 0xec, 0x51, 0xf3, 0xfd, 0x00, - 0xac, 0x06, 0x4b, 0x50, 0xa3, 0xff, 0xfd, 0x40, 0x03, 0xe2, 0x18, 0x2b, - 0x03, 0x69, 0x00, 0x06, 0x51, 0x29, 0x5a, 0xf2, 0xfd, 0x40, 0x1e, 0x5e, - 0x13, 0x11, 0x0e, 0x4c, 0x7d, 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0x3c, 0xfd, - 0x00, 0x4d, 0x34, 0x03, 0x3d, 0xfd, 0x40, 0x4a, 0x3d, 0x2c, 0x90, 0xfc, - 0x00, 0x4d, 0x34, 0x03, 0x5d, 0xfc, 0x40, 0x4c, 0x25, 0x8a, 0x4d, 0xfd, - 0x00, 0x4f, 0xd2, 0x6a, 0xf7, 0xfd, 0x00, 0xa9, 0x01, 0xff, 0x09, 0x27, - 0x8a, 0x0f, 0xad, 0x01, 0xff, 0x4a, 0x27, 0x8a, 0x48, 0xfd, 0x00, 0x4c, - 0x25, 0x8a, 0x49, 0xfd, 0x40, 0xed, 0x47, 0xfd, 0x00, 0x4d, 0x95, 0x87, - 0x4a, 0xfd, 0x40, 0x0d, 0x67, 0x00, 0x67, 0x05, 0x6e, 0x37, 0x44, 0x05, - 0x7a, 0x20, 0x11, 0x04, 0x4d, 0x00, 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0x14, - 0xfd, 0x00, 0x4d, 0x34, 0x03, 0xf8, 0xfc, 0x40, 0xa9, 0x21, 0x05, 0x51, - 0x00, 0x01, 0xff, 0x57, 0x30, 0x2c, 0x78, 0xfd, 0x00, 0x05, 0x7a, 0x20, - 0x06, 0x4e, 0xa5, 0x4d, 0xb6, 0xfd, 0x40, 0x4a, 0x3d, 0x2c, 0x76, 0xfd, - 0x00, 0x4c, 0x4c, 0x16, 0x77, 0xfd, 0x40, 0x4b, 0x4d, 0x16, 0xbb, 0xfc, - 0x00, 0x4c, 0x35, 0x03, 0x2a, 0xfc, 0x40, 0xa9, 0x11, 0x0a, 0x96, 0x7d, - 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0x75, 0xfd, 0x00, 0x4c, 0x4c, 0x16, 0xc4, - 0xfd, 0x40, 0x4b, 0x4d, 0x16, 0xba, 0xfc, 0x00, 0x4c, 0x35, 0x03, 0x29, - 0xfc, 0x40, 0x4a, 0x3d, 0x2c, 0x13, 0xfd, 0x00, 0x4d, 0x34, 0x03, 0xf7, - 0xfc, 0x40, 0x0d, 0x8a, 0x81, 0xbb, 0x1e, 0x05, 0xc3, 0x05, 0x01, 0xff, - 0xa1, 0xf5, 0x1a, 0x02, 0x8c, 0x05, 0xba, 0x19, 0xa4, 0x99, 0x17, 0xe5, - 0xd0, 0x06, 0x80, 0xf6, 0x16, 0xa6, 0xc3, 0x15, 0xa7, 0x9d, 0x14, 0xa8, - 0xe6, 0x11, 0x02, 0xde, 0x1f, 0x8e, 0x11, 0xab, 0xf7, 0x0e, 0xac, 0x90, - 0x0e, 0xad, 0xc8, 0x0d, 0xae, 0xed, 0x0b, 0x42, 0x17, 0x50, 0xc6, 0x06, - 0x80, 0xd6, 0x0b, 0x43, 0x72, 0xe4, 0x7e, 0x06, 0x80, 0xff, 0x0a, 0x43, - 0xf4, 0x13, 0x42, 0x06, 0x80, 0xb8, 0x0a, 0xb2, 0xfb, 0x08, 0xb3, 0x9f, - 0x07, 0xb4, 0xdb, 0x03, 0xf5, 0xc7, 0x06, 0x80, 0xa9, 0x03, 0x42, 0x32, - 0x00, 0xcb, 0x06, 0x80, 0xf1, 0x02, 0x43, 0xc0, 0x88, 0x48, 0x06, 0x80, - 0x93, 0x02, 0xb9, 0x43, 0x02, 0x59, 0x00, 0x01, 0xff, 0xe8, 0x38, 0x06, - 0x80, 0x1c, 0x42, 0x9e, 0x01, 0x32, 0x06, 0xc0, 0x00, 0x80, 0x01, 0xff, - 0x4a, 0x3d, 0x2c, 0xb0, 0xfe, 0x00, 0x4d, 0x34, 0x03, 0xaf, 0xfe, 0x00, - 0x55, 0x26, 0x3e, 0xb2, 0x08, 0x40, 0x80, 0x01, 0xff, 0x4a, 0x3d, 0x2c, - 0xc6, 0xfe, 0x00, 0xa9, 0x06, 0x4b, 0x4d, 0x6c, 0xc8, 0xfe, 0x40, 0x4b, - 0x4d, 0x16, 0xc7, 0xfe, 0x00, 0x4c, 0x35, 0x03, 0xc5, 0xfe, 0x40, 0x42, - 0x4e, 0x00, 0x4a, 0x06, 0x80, 0x14, 0xf5, 0xc8, 0x06, 0xc0, 0x00, 0x80, - 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0xdc, 0xfb, 0x00, 0x4d, 0x34, 0x03, 0xdb, - 0xfb, 0x40, 0x80, 0x01, 0xff, 0x46, 0x6a, 0x19, 0xd2, 0x06, 0x80, 0x6f, - 0x4a, 0x3d, 0x2c, 0xf2, 0xfe, 0x00, 0xa9, 0x5b, 0x4b, 0x4d, 0x6c, 0xf4, - 0xfe, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x4b, 0x56, 0x00, 0x26, 0x06, - 0x80, 0x2c, 0x47, 0x02, 0x34, 0xce, 0x06, 0x00, 0xb4, 0x01, 0xff, 0x43, - 0x24, 0x17, 0xcd, 0x06, 0x00, 0x4f, 0x94, 0x6c, 0xd1, 0x06, 0x00, 0x12, - 0x86, 0x1d, 0x01, 0xff, 0x49, 0x98, 0x1d, 0xa9, 0x08, 0x00, 0x4b, 0x56, - 0x00, 0xa8, 0x08, 0x00, 0x50, 0xda, 0x65, 0xba, 0x08, 0x40, 0x80, 0x01, - 0xff, 0x4a, 0x3d, 0x2c, 0x8a, 0xfe, 0x00, 0xa9, 0x06, 0x4b, 0x4d, 0x6c, - 0x8c, 0xfe, 0x40, 0x4b, 0x4d, 0x16, 0x8b, 0xfe, 0x00, 0x4c, 0x35, 0x03, - 0x89, 0xfe, 0x40, 0x4b, 0x4d, 0x16, 0xf3, 0xfe, 0x00, 0x4c, 0x35, 0x03, - 0xf1, 0xfe, 0x40, 0x80, 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0xaf, 0xfb, 0x00, - 0x4d, 0x34, 0x03, 0xae, 0xfb, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x1d, - 0x70, 0x15, 0x16, 0x4b, 0x56, 0x00, 0xd3, 0x06, 0xc0, 0x00, 0x80, 0x01, - 0xff, 0x4a, 0x3d, 0x2c, 0xb1, 0xfb, 0x00, 0x4d, 0x34, 0x03, 0xb0, 0xfb, - 0x40, 0x4a, 0x0f, 0xa9, 0x7b, 0x07, 0x00, 0x48, 0xca, 0xc9, 0x7a, 0x07, - 0x40, 0x80, 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0xee, 0xfe, 0x00, 0x4d, 0x34, - 0x03, 0xed, 0xfe, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x04, 0xb4, 0x0b, - 0x32, 0x1d, 0x70, 0x15, 0x22, 0x4b, 0x56, 0x00, 0x24, 0x06, 0x80, 0x0c, - 0x44, 0xf7, 0x07, 0xc4, 0x06, 0x00, 0x4e, 0xa3, 0x0e, 0xca, 0x06, 0x40, - 0x80, 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0x86, 0xfe, 0x00, 0x4d, 0x34, 0x03, - 0x85, 0xfe, 0x40, 0x4a, 0x0f, 0xa9, 0x79, 0x07, 0x00, 0x48, 0xca, 0xc9, - 0x78, 0x07, 0x40, 0x45, 0x5c, 0x00, 0xcf, 0x06, 0x00, 0x46, 0x25, 0x1e, - 0xab, 0x08, 0x40, 0x80, 0x22, 0xe8, 0xa4, 0x06, 0xc0, 0x00, 0x80, 0x01, - 0xff, 0x4a, 0x3d, 0x2c, 0x6b, 0xfb, 0x00, 0xa9, 0x06, 0x4b, 0x4d, 0x6c, - 0x6d, 0xfb, 0x40, 0x4b, 0x4d, 0x16, 0x6c, 0xfb, 0x00, 0x4c, 0x35, 0x03, - 0x6a, 0xfb, 0x40, 0x4a, 0x3d, 0x2c, 0xdf, 0xfb, 0x00, 0x4d, 0x34, 0x03, - 0xde, 0xfb, 0x40, 0x80, 0x11, 0x22, 0x07, 0x0c, 0x01, 0xff, 0x4c, 0x4c, - 0x16, 0xe8, 0xfb, 0x00, 0x4b, 0x4d, 0x6c, 0xe9, 0xfb, 0x40, 0x4a, 0x3d, - 0x2c, 0xd8, 0xfb, 0x00, 0x4d, 0x34, 0x03, 0xd7, 0xfb, 0x00, 0x50, 0x51, - 0x00, 0x77, 0x06, 0xc0, 0x00, 0x4e, 0x33, 0x03, 0xdd, 0xfb, 0x40, 0x42, - 0xc9, 0x09, 0x37, 0x06, 0x80, 0xed, 0x02, 0x44, 0xfc, 0x81, 0x86, 0x06, - 0x80, 0x94, 0x02, 0x42, 0x4e, 0x00, 0x2a, 0x06, 0x80, 0x8f, 0x01, 0xa8, - 0x4d, 0x43, 0x63, 0x0f, 0x79, 0x06, 0xc0, 0x00, 0x80, 0x24, 0x42, 0x4e, - 0x00, 0x7a, 0x06, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0x5f, - 0xfb, 0x00, 0xa9, 0x06, 0x4b, 0x4d, 0x6c, 0x61, 0xfb, 0x40, 0x4b, 0x4d, - 0x16, 0x60, 0xfb, 0x00, 0x4c, 0x35, 0x03, 0x5e, 0xfb, 0x40, 0x4a, 0x3d, - 0x2c, 0x67, 0xfb, 0x00, 0xa9, 0x0c, 0x4b, 0x4d, 0x6c, 0x69, 0xfb, 0x00, - 0x4c, 0x11, 0x95, 0xc0, 0x08, 0x40, 0x4b, 0x4d, 0x16, 0x68, 0xfb, 0x00, - 0x4c, 0x35, 0x03, 0x66, 0xfb, 0x40, 0x42, 0x13, 0x00, 0x30, 0x06, 0x80, - 0x2a, 0x42, 0x4e, 0x00, 0x2b, 0x06, 0x80, 0x06, 0x46, 0xe8, 0xd9, 0x86, - 0x08, 0x40, 0x80, 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0x9a, 0xfe, 0x00, 0xa9, - 0x06, 0x4b, 0x4d, 0x6c, 0x9c, 0xfe, 0x40, 0x4b, 0x4d, 0x16, 0x9b, 0xfe, - 0x00, 0x4c, 0x35, 0x03, 0x99, 0xfe, 0x40, 0x80, 0x01, 0xff, 0x4a, 0x3d, - 0x2c, 0xac, 0xfe, 0x00, 0x4d, 0x34, 0x03, 0xab, 0xfe, 0x40, 0x80, 0x24, - 0x42, 0x4e, 0x00, 0x7f, 0x06, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x4a, 0x3d, - 0x2c, 0x63, 0xfb, 0x00, 0xa9, 0x06, 0x4b, 0x4d, 0x6c, 0x65, 0xfb, 0x40, - 0x4b, 0x4d, 0x16, 0x64, 0xfb, 0x00, 0x4c, 0x35, 0x03, 0x62, 0xfb, 0x40, - 0x4a, 0x3d, 0x2c, 0x96, 0xfe, 0x00, 0xa9, 0x43, 0xad, 0x1f, 0x05, 0x51, - 0x00, 0x01, 0xff, 0x44, 0xf7, 0x07, 0x7c, 0x06, 0x00, 0x06, 0x0c, 0x07, - 0x06, 0x5a, 0xb2, 0x21, 0x7d, 0x06, 0x40, 0x49, 0x45, 0xbd, 0xb8, 0x08, - 0x00, 0xf6, 0xbf, 0x08, 0x40, 0x46, 0xfa, 0xd6, 0x29, 0x06, 0x80, 0x06, - 0x4a, 0x4e, 0x6c, 0x98, 0xfe, 0x40, 0x80, 0x01, 0xff, 0x4a, 0x3d, 0x2c, - 0x94, 0xfe, 0x00, 0x44, 0xca, 0xec, 0xc3, 0x06, 0x00, 0x4d, 0x34, 0x03, - 0x93, 0xfe, 0x40, 0x4b, 0x4d, 0x16, 0x97, 0xfe, 0x00, 0x4c, 0x35, 0x03, - 0x95, 0xfe, 0x40, 0x80, 0x24, 0x42, 0x4e, 0x00, 0x87, 0x06, 0xc0, 0x00, - 0x80, 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0x7f, 0xfb, 0x00, 0xa9, 0x06, 0x4b, - 0x4d, 0x6c, 0x81, 0xfb, 0x40, 0x4b, 0x4d, 0x16, 0x80, 0xfb, 0x00, 0x4c, - 0x35, 0x03, 0x7e, 0xfb, 0x40, 0x4a, 0x3d, 0x2c, 0x7b, 0xfb, 0x00, 0xa9, - 0x17, 0x4b, 0x4d, 0x6c, 0x7d, 0xfb, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, - 0x49, 0x98, 0x1d, 0xbf, 0x06, 0x00, 0x47, 0x02, 0x34, 0xc1, 0x08, 0x40, - 0x4b, 0x4d, 0x16, 0x7c, 0xfb, 0x00, 0x4c, 0x35, 0x03, 0x7a, 0xfb, 0x40, - 0x80, 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0xc2, 0xfe, 0x00, 0xa9, 0x35, 0x4b, - 0x4d, 0x6c, 0xc4, 0xfe, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x49, 0x50, - 0x12, 0x8b, 0x08, 0x00, 0xb4, 0x01, 0xff, 0x0a, 0x5f, 0x12, 0x11, 0x08, - 0xa3, 0x0b, 0x01, 0xff, 0x45, 0x5c, 0x00, 0xa3, 0x08, 0x00, 0x50, 0xad, - 0x2b, 0xc3, 0x0e, 0x41, 0x45, 0x5c, 0x00, 0x9f, 0x06, 0x00, 0x45, 0xf5, - 0x06, 0x8c, 0x08, 0x40, 0x4b, 0x4d, 0x16, 0xc3, 0xfe, 0x00, 0x4c, 0x35, - 0x03, 0xc1, 0xfe, 0x40, 0x42, 0xe8, 0x01, 0x35, 0x06, 0x80, 0x99, 0x01, - 0x43, 0x75, 0x09, 0x33, 0x06, 0x80, 0x3c, 0x44, 0x60, 0xd8, 0x34, 0x06, - 0x80, 0x12, 0x4b, 0x77, 0xa1, 0xb1, 0x08, 0x00, 0x4f, 0x45, 0x06, 0x70, - 0x06, 0x00, 0x48, 0xb2, 0xc9, 0xaa, 0x06, 0x40, 0x80, 0x01, 0xff, 0x4a, - 0x3d, 0x2c, 0xb6, 0xfe, 0x00, 0xa9, 0x0c, 0x4b, 0x4d, 0x6c, 0xb8, 0xfe, - 0x00, 0x4e, 0x3e, 0x7d, 0xfa, 0x06, 0x40, 0x4b, 0x4d, 0x16, 0xb7, 0xfe, - 0x00, 0x4c, 0x35, 0x03, 0xb5, 0xfe, 0x40, 0x80, 0x01, 0xff, 0x4a, 0x3d, - 0x2c, 0xb2, 0xfe, 0x00, 0xa9, 0x3f, 0x4b, 0x4d, 0x6c, 0xb4, 0xfe, 0x00, - 0x05, 0x51, 0x00, 0x01, 0xff, 0x57, 0x5b, 0x2d, 0x9a, 0x06, 0x00, 0x66, - 0xae, 0x06, 0x7d, 0x07, 0x00, 0x4f, 0x9c, 0x45, 0x5c, 0x07, 0x00, 0x4a, - 0x2b, 0x3e, 0x7e, 0x07, 0x00, 0x64, 0xb4, 0x09, 0x70, 0x07, 0x00, 0xb4, - 0x01, 0xff, 0x4f, 0x94, 0x6c, 0x9b, 0x06, 0x80, 0x06, 0x58, 0x8d, 0x2b, - 0x6d, 0x07, 0x40, 0x55, 0x59, 0x12, 0x9c, 0x06, 0x40, 0x4b, 0x4d, 0x16, - 0xb3, 0xfe, 0x00, 0x4c, 0x35, 0x03, 0xb1, 0xfe, 0x40, 0x80, 0x01, 0xff, - 0x4a, 0x3d, 0x2c, 0xba, 0xfe, 0x00, 0xa9, 0x21, 0x4b, 0x4d, 0x6c, 0xbc, - 0xfe, 0x00, 0x06, 0xfe, 0x05, 0x01, 0xff, 0x0a, 0x5f, 0x12, 0x06, 0x4d, - 0xb7, 0x0e, 0x9d, 0x06, 0x40, 0x45, 0x5c, 0x00, 0x9e, 0x06, 0x00, 0x45, - 0xf5, 0x06, 0xaf, 0x08, 0x40, 0x4b, 0x4d, 0x16, 0xbb, 0xfe, 0x00, 0x4c, - 0x35, 0x03, 0xb9, 0xfe, 0x40, 0x42, 0x4e, 0x00, 0x31, 0x06, 0x80, 0x40, - 0x44, 0xc4, 0x44, 0xbb, 0x06, 0x80, 0x1c, 0x4b, 0x5f, 0x9e, 0xac, 0x08, - 0x00, 0x43, 0xee, 0x50, 0x91, 0x06, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x4a, - 0x3d, 0x2c, 0x8d, 0xfb, 0x00, 0x4d, 0x34, 0x03, 0x8c, 0xfb, 0x40, 0x80, - 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0xa1, 0xfb, 0x00, 0xa9, 0x06, 0x4b, 0x4d, - 0x6c, 0xa3, 0xfb, 0x40, 0x4b, 0x4d, 0x16, 0xa2, 0xfb, 0x00, 0x4c, 0x35, - 0x03, 0xa0, 0xfb, 0x40, 0x80, 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0xae, 0xfe, - 0x00, 0x4d, 0x34, 0x03, 0xad, 0xfe, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, - 0x49, 0x50, 0x12, 0x94, 0x06, 0x80, 0x52, 0x4f, 0x9c, 0x45, 0x99, 0x06, - 0x00, 0x4b, 0x56, 0x00, 0x6c, 0x07, 0x00, 0x4a, 0x2b, 0x3e, 0xef, 0x06, - 0x00, 0x44, 0x92, 0x83, 0xaa, 0x08, 0x00, 0x44, 0xf7, 0x07, 0x93, 0x06, - 0x00, 0xb3, 0x11, 0x09, 0xa2, 0x0b, 0x01, 0xff, 0x45, 0x5c, 0x00, 0x97, - 0x06, 0x00, 0x50, 0x95, 0x2b, 0x6b, 0x07, 0x40, 0x05, 0x0d, 0x07, 0x06, - 0x45, 0x28, 0x05, 0x5b, 0x07, 0x40, 0x5e, 0xba, 0x09, 0x71, 0x07, 0x00, - 0x4a, 0xe0, 0x65, 0xb9, 0x08, 0x00, 0xf6, 0x92, 0x06, 0xc0, 0x00, 0x46, - 0xf4, 0x06, 0x95, 0x06, 0x40, 0x4e, 0x93, 0x1d, 0x96, 0x06, 0x40, 0x80, - 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0xd6, 0xfe, 0x00, 0xa9, 0x28, 0x4b, 0x4d, - 0x6c, 0xd8, 0xfe, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x04, 0xb4, 0x0b, - 0x06, 0x50, 0x5e, 0x12, 0xa8, 0x06, 0x40, 0x45, 0x5c, 0x00, 0xa7, 0x06, - 0x00, 0x45, 0xf5, 0x06, 0xa5, 0x08, 0xc0, 0x00, 0x52, 0xc6, 0x4d, 0xb5, - 0x08, 0x40, 0x4b, 0x4d, 0x16, 0xd7, 0xfe, 0x00, 0x4c, 0x35, 0x03, 0xd5, - 0xfe, 0x40, 0x80, 0x24, 0x42, 0x4e, 0x00, 0xa6, 0x06, 0xc0, 0x00, 0x80, - 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0x6f, 0xfb, 0x00, 0xa9, 0x06, 0x4b, 0x4d, - 0x6c, 0x71, 0xfb, 0x40, 0x4b, 0x4d, 0x16, 0x70, 0xfb, 0x00, 0x4c, 0x35, - 0x03, 0x6e, 0xfb, 0x40, 0x4a, 0x3d, 0x2c, 0x57, 0xfb, 0x00, 0xa9, 0x15, - 0x4b, 0x4d, 0x6c, 0x59, 0xfb, 0x00, 0x0b, 0x11, 0x95, 0x01, 0xff, 0x4a, - 0x71, 0xab, 0xb7, 0x08, 0x00, 0xf6, 0xbe, 0x08, 0x40, 0x4b, 0x4d, 0x16, - 0x58, 0xfb, 0x00, 0x4c, 0x35, 0x03, 0x56, 0xfb, 0x40, 0x80, 0x01, 0xff, - 0x4a, 0x3d, 0x2c, 0xda, 0xfb, 0x00, 0x4d, 0x34, 0x03, 0xd9, 0xfb, 0x40, - 0xe7, 0xad, 0x06, 0x80, 0x92, 0x01, 0x43, 0x69, 0x05, 0x46, 0x06, 0x80, - 0x24, 0x43, 0x4d, 0x00, 0x83, 0x06, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x4a, - 0x3d, 0x2c, 0x77, 0xfb, 0x00, 0xa9, 0x06, 0x4b, 0x4d, 0x6c, 0x79, 0xfb, - 0x40, 0x4b, 0x4d, 0x16, 0x78, 0xfb, 0x00, 0x4c, 0x35, 0x03, 0x76, 0xfb, - 0x40, 0x80, 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0xe6, 0xfe, 0x00, 0x46, 0xc9, - 0x44, 0xba, 0x06, 0x80, 0x48, 0xa9, 0x3a, 0x4b, 0x4d, 0x6c, 0xe8, 0xfe, - 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x49, 0x50, 0x12, 0xb9, 0x06, 0x00, - 0x50, 0xf9, 0x33, 0x89, 0x08, 0x00, 0x44, 0xf7, 0x07, 0xbc, 0x06, 0x00, - 0x06, 0x0c, 0x07, 0x0f, 0xb4, 0x01, 0xff, 0x4f, 0x5f, 0x12, 0xbd, 0x06, - 0x00, 0x4d, 0xb7, 0x0e, 0x67, 0x07, 0x40, 0x43, 0xc8, 0x09, 0x68, 0x07, - 0x00, 0xf6, 0x69, 0x07, 0x40, 0x4b, 0x4d, 0x16, 0xe7, 0xfe, 0x00, 0x4c, - 0x35, 0x03, 0xe5, 0xfe, 0x40, 0x80, 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0x9f, - 0xfb, 0x00, 0x4d, 0x34, 0x03, 0x9e, 0xfb, 0x40, 0x80, 0x24, 0x43, 0xc1, - 0x9a, 0xb1, 0x06, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0x9b, - 0xfb, 0x00, 0xa9, 0x06, 0x4b, 0x4d, 0x6c, 0x9d, 0xfb, 0x40, 0x4b, 0x4d, - 0x16, 0x9c, 0xfb, 0x00, 0x4c, 0x35, 0x03, 0x9a, 0xfb, 0x40, 0x4a, 0x3d, - 0x2c, 0xd4, 0xfb, 0x00, 0xa9, 0x06, 0x4b, 0x4d, 0x6c, 0xd6, 0xfb, 0x40, - 0x4b, 0x4d, 0x16, 0xd5, 0xfb, 0x00, 0x4c, 0x35, 0x03, 0xd3, 0xfb, 0x40, - 0x43, 0xba, 0x00, 0x1c, 0x06, 0x00, 0x43, 0xdf, 0x17, 0x45, 0x06, 0xc0, - 0x00, 0x80, 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0xe2, 0xfe, 0x00, 0xa9, 0x21, - 0x4b, 0x4d, 0x6c, 0xe4, 0xfe, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x04, - 0xb4, 0x0b, 0x06, 0x50, 0x5e, 0x12, 0xa7, 0x08, 0x40, 0x45, 0x5c, 0x00, - 0x65, 0x07, 0x00, 0x45, 0xf5, 0x06, 0x66, 0x07, 0x40, 0x4b, 0x4d, 0x16, - 0xe3, 0xfe, 0x00, 0x4c, 0x35, 0x03, 0xe1, 0xfe, 0x40, 0x42, 0x57, 0x00, - 0x44, 0x06, 0x80, 0x06, 0x47, 0x7d, 0xd1, 0xad, 0x08, 0x40, 0x80, 0x01, - 0xff, 0x4a, 0x3d, 0x2c, 0xde, 0xfe, 0x00, 0xa9, 0x40, 0x4b, 0x4d, 0x6c, - 0xe0, 0xfe, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x43, 0x16, 0x00, 0x6a, - 0x07, 0x00, 0x02, 0x3b, 0x01, 0x1f, 0x06, 0x0c, 0x07, 0x11, 0x0b, 0x5e, - 0x12, 0x01, 0xff, 0x45, 0x5c, 0x00, 0xb7, 0x06, 0x00, 0x45, 0xf5, 0x06, - 0xb8, 0x06, 0x40, 0x57, 0x8c, 0x2c, 0xc7, 0x08, 0x00, 0xf6, 0xb5, 0x06, - 0x40, 0x47, 0x9a, 0x1d, 0xb6, 0x06, 0x00, 0x48, 0x27, 0xa7, 0xa6, 0x08, - 0x40, 0x4b, 0x4d, 0x16, 0xdf, 0xfe, 0x00, 0x4c, 0x35, 0x03, 0xdd, 0xfe, - 0x40, 0xa1, 0xb4, 0x01, 0x44, 0x6a, 0xec, 0xa9, 0x06, 0x80, 0x55, 0x43, - 0x84, 0x20, 0x2e, 0x06, 0x80, 0x31, 0x07, 0x46, 0x00, 0x01, 0xff, 0x42, - 0x17, 0x50, 0xc5, 0x06, 0x80, 0x16, 0x42, 0xe1, 0x4c, 0xc9, 0x06, 0xc0, - 0x00, 0x80, 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0xe3, 0xfb, 0x00, 0x4d, 0x34, - 0x03, 0xe2, 0xfb, 0x40, 0x80, 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0xe1, 0xfb, - 0x00, 0x4d, 0x34, 0x03, 0xe0, 0xfb, 0x40, 0x80, 0x01, 0xff, 0x4a, 0x3d, - 0x2c, 0xa6, 0xfe, 0x00, 0xa9, 0x06, 0x4b, 0x4d, 0x6c, 0xa8, 0xfe, 0x40, - 0x4b, 0x4d, 0x16, 0xa7, 0xfe, 0x00, 0x4c, 0x35, 0x03, 0xa5, 0xfe, 0x40, - 0x80, 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0x8f, 0xfb, 0x00, 0xa9, 0x41, 0x4b, - 0x4d, 0x6c, 0x91, 0xfb, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x49, 0x98, - 0x1d, 0x62, 0x07, 0x00, 0x47, 0x02, 0x34, 0xc2, 0x08, 0x00, 0xb4, 0x01, - 0xff, 0x0a, 0x5f, 0x12, 0x11, 0x08, 0xa3, 0x0b, 0x01, 0xff, 0x45, 0x5c, - 0x00, 0x3b, 0x06, 0x00, 0x50, 0xad, 0x2b, 0x8d, 0x08, 0x40, 0x45, 0x5c, - 0x00, 0x63, 0x07, 0x00, 0x45, 0xf5, 0x06, 0x3c, 0x06, 0x00, 0x56, 0x6f, - 0x35, 0x64, 0x07, 0x40, 0x4b, 0x4d, 0x16, 0x90, 0xfb, 0x00, 0x4c, 0x35, - 0x03, 0x8e, 0xfb, 0x40, 0xe6, 0x43, 0x06, 0x80, 0x06, 0x4a, 0xaf, 0xae, - 0x20, 0x06, 0x40, 0x80, 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0xda, 0xfe, 0x00, - 0xa9, 0x3b, 0x4b, 0x4d, 0x6c, 0xdc, 0xfe, 0x00, 0x05, 0x51, 0x00, 0x01, - 0xff, 0x04, 0xb4, 0x0b, 0x20, 0x44, 0xf7, 0x07, 0xab, 0x06, 0x00, 0xb4, - 0x01, 0xff, 0x4f, 0x94, 0x6c, 0xae, 0x06, 0x00, 0x08, 0xa3, 0x0b, 0x01, - 0xff, 0x45, 0x5c, 0x00, 0x7f, 0x07, 0x00, 0x50, 0xad, 0x2b, 0xc4, 0x0e, - 0x41, 0x45, 0x5c, 0x00, 0xac, 0x06, 0x00, 0x45, 0xf5, 0x06, 0xb4, 0x08, - 0x40, 0x4b, 0x4d, 0x16, 0xdb, 0xfe, 0x00, 0x4c, 0x35, 0x03, 0xd9, 0xfe, - 0x40, 0x42, 0x8a, 0x05, 0x2c, 0x06, 0x80, 0x14, 0xe8, 0x98, 0x06, 0xc0, - 0x00, 0x80, 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0x8b, 0xfb, 0x00, 0x4d, 0x34, - 0x03, 0x8a, 0xfb, 0x40, 0x80, 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0x9e, 0xfe, - 0x00, 0xa9, 0x21, 0x4b, 0x4d, 0x6c, 0xa0, 0xfe, 0x00, 0x06, 0xfe, 0x05, - 0x01, 0xff, 0x0a, 0x5f, 0x12, 0x06, 0x4d, 0xa4, 0x0e, 0xa2, 0x08, 0x40, - 0x45, 0x5c, 0x00, 0xc5, 0x08, 0x00, 0x45, 0xf5, 0x06, 0xc6, 0x08, 0x40, - 0x4b, 0x4d, 0x16, 0x9f, 0xfe, 0x00, 0x4c, 0x35, 0x03, 0x9d, 0xfe, 0x40, - 0xa1, 0xaf, 0x01, 0x42, 0x4e, 0x00, 0x47, 0x06, 0x80, 0x1c, 0x49, 0xae, - 0xb7, 0x74, 0x06, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x44, 0x67, 0x00, 0x75, - 0x06, 0x00, 0x43, 0xc0, 0x88, 0x76, 0x06, 0x00, 0x43, 0x4d, 0x00, 0x78, - 0x06, 0x40, 0x80, 0x01, 0xff, 0x4b, 0xea, 0x98, 0xbe, 0x06, 0x80, 0x65, - 0x4a, 0x3d, 0x2c, 0xea, 0xfe, 0x00, 0x44, 0xca, 0xec, 0xc1, 0x06, 0x80, - 0x35, 0xa9, 0x27, 0x4b, 0x4d, 0x6c, 0xec, 0xfe, 0x00, 0x05, 0x51, 0x00, - 0x01, 0xff, 0x4a, 0x2b, 0x3e, 0xff, 0x06, 0x00, 0x49, 0x22, 0xbf, 0xc0, - 0x06, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0xa5, 0xfb, 0x00, - 0x4d, 0x34, 0x03, 0xa4, 0xfb, 0x40, 0x4b, 0x4d, 0x16, 0xeb, 0xfe, 0x00, - 0x4c, 0x35, 0x03, 0xe9, 0xfe, 0x40, 0x80, 0x01, 0xff, 0x4a, 0x3d, 0x2c, - 0xa7, 0xfb, 0x00, 0xa9, 0x0c, 0x4b, 0x4d, 0x6c, 0xa9, 0xfb, 0x00, 0x50, - 0x51, 0x00, 0xc2, 0x06, 0x40, 0x4b, 0x4d, 0x16, 0xa8, 0xfb, 0x00, 0x4c, - 0x35, 0x03, 0xa6, 0xfb, 0x40, 0x80, 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0xab, - 0xfb, 0x00, 0xa9, 0x06, 0x4b, 0x4d, 0x6c, 0xad, 0xfb, 0x40, 0x4b, 0x4d, - 0x16, 0xac, 0xfb, 0x00, 0x4c, 0x35, 0x03, 0xaa, 0xfb, 0x40, 0xe8, 0x2d, - 0x06, 0x80, 0x0d, 0x43, 0x58, 0x00, 0x21, 0x06, 0xc0, 0x00, 0x4e, 0x33, - 0x03, 0x80, 0xfe, 0x40, 0x80, 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0xa2, 0xfe, - 0x00, 0xa9, 0x59, 0x4b, 0x4d, 0x6c, 0xa4, 0xfe, 0x00, 0x05, 0x51, 0x00, - 0x01, 0xff, 0x66, 0xd4, 0x06, 0x7c, 0x07, 0x00, 0x4b, 0x56, 0x00, 0x81, - 0x06, 0x00, 0x56, 0x0f, 0x34, 0x8a, 0x08, 0x00, 0x18, 0xb4, 0x09, 0x24, - 0xb4, 0x01, 0xff, 0x0a, 0x5f, 0x12, 0x11, 0x08, 0xa3, 0x0b, 0x01, 0xff, - 0x45, 0x5c, 0x00, 0x57, 0x07, 0x00, 0x4e, 0xea, 0x7c, 0x82, 0x06, 0x40, - 0x45, 0x5c, 0x00, 0x85, 0x06, 0x00, 0x56, 0x6f, 0x35, 0x58, 0x07, 0x40, - 0xa1, 0x06, 0x45, 0xf5, 0x06, 0x6e, 0x07, 0x40, 0x44, 0x5d, 0x00, 0x72, - 0x07, 0x00, 0x4b, 0xcd, 0x09, 0x6f, 0x07, 0x40, 0x4b, 0x4d, 0x16, 0xa3, - 0xfe, 0x00, 0x4c, 0x35, 0x03, 0xa1, 0xfe, 0x40, 0x42, 0xf5, 0x13, 0xaf, - 0x06, 0x80, 0x5f, 0x44, 0x4b, 0x9a, 0x3a, 0x06, 0x80, 0x2a, 0x43, 0x70, - 0x1f, 0xc8, 0x08, 0x00, 0x43, 0x69, 0xec, 0xb3, 0x06, 0xc0, 0x00, 0x80, - 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0x97, 0xfb, 0x00, 0xa9, 0x06, 0x4b, 0x4d, - 0x6c, 0x99, 0xfb, 0x40, 0x4b, 0x4d, 0x16, 0x98, 0xfb, 0x00, 0x4c, 0x35, - 0x03, 0x96, 0xfb, 0x40, 0x80, 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0xce, 0xfe, - 0x00, 0xa9, 0x17, 0x4b, 0x4d, 0x6c, 0xd0, 0xfe, 0x00, 0x05, 0x51, 0x00, - 0x01, 0xff, 0x49, 0x50, 0x12, 0xfc, 0x06, 0x00, 0x50, 0x5e, 0x12, 0xc3, - 0x08, 0x40, 0x4b, 0x4d, 0x16, 0xcf, 0xfe, 0x00, 0x4c, 0x35, 0x03, 0xcd, - 0xfe, 0x40, 0x80, 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0x93, 0xfb, 0x00, 0xa9, - 0x26, 0x4b, 0x4d, 0x6c, 0x95, 0xfb, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, - 0x4f, 0x39, 0x6d, 0xb0, 0x08, 0x00, 0x44, 0xf7, 0x07, 0xb0, 0x06, 0x00, - 0xb4, 0x01, 0xff, 0x4f, 0x5f, 0x12, 0xb4, 0x06, 0x00, 0x4d, 0xb7, 0x0e, - 0xb2, 0x06, 0x40, 0x4b, 0x4d, 0x16, 0x94, 0xfb, 0x00, 0x4c, 0x35, 0x03, - 0x92, 0xfb, 0x40, 0x48, 0x0a, 0xc1, 0xcc, 0x06, 0x80, 0x59, 0x42, 0x4e, - 0x00, 0x41, 0x06, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0xd2, - 0xfe, 0x00, 0xa9, 0x3b, 0x4b, 0x4d, 0x6c, 0xd4, 0xfe, 0x00, 0x05, 0x51, - 0x00, 0x01, 0xff, 0x04, 0xb4, 0x0b, 0x19, 0xb4, 0x01, 0xff, 0x0a, 0x5f, - 0x12, 0x06, 0x4d, 0xb7, 0x0e, 0x60, 0x07, 0x40, 0x45, 0xf5, 0x06, 0xa5, - 0x06, 0x00, 0x56, 0x6f, 0x35, 0x61, 0x07, 0x40, 0x45, 0xf5, 0x06, 0xa3, - 0x06, 0x80, 0x06, 0x4b, 0x8e, 0x9d, 0xa2, 0x06, 0x40, 0x55, 0x59, 0x12, - 0xa4, 0x08, 0x40, 0x4b, 0x4d, 0x16, 0xd3, 0xfe, 0x00, 0x4c, 0x35, 0x03, - 0xd1, 0xfe, 0x40, 0x80, 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0xfd, 0xfb, 0x00, - 0xa9, 0x39, 0x4b, 0x4d, 0x6c, 0xff, 0xfb, 0x00, 0x05, 0x51, 0x00, 0x01, - 0xff, 0x1c, 0xae, 0x06, 0x15, 0x4a, 0x2b, 0x3e, 0x3d, 0x06, 0x00, 0xb4, - 0x01, 0xff, 0x4f, 0x5f, 0x12, 0x3f, 0x06, 0x00, 0x4d, 0xa4, 0x0e, 0x3e, - 0x06, 0x40, 0x4a, 0xf0, 0x06, 0x77, 0x07, 0x00, 0xb4, 0x01, 0xff, 0x4a, - 0x0f, 0xa9, 0x76, 0x07, 0x00, 0x48, 0xca, 0xc9, 0x75, 0x07, 0x40, 0x4b, - 0x4d, 0x16, 0xfe, 0xfb, 0x00, 0x4c, 0x35, 0x03, 0xfc, 0xfb, 0x40, 0x80, - 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0xe5, 0xfb, 0x00, 0xa9, 0x06, 0x4b, 0x4d, - 0x6c, 0xe7, 0xfb, 0x40, 0x4b, 0x4d, 0x16, 0xe6, 0xfb, 0x00, 0x4c, 0x35, - 0x03, 0xe4, 0xfb, 0x40, 0xa1, 0x7e, 0x02, 0xa1, 0x10, 0x50, 0x07, 0x84, - 0x40, 0x3a, 0x42, 0x1f, 0x01, 0x8e, 0x06, 0x80, 0x24, 0x43, 0x4d, 0x00, - 0x84, 0x06, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0x73, 0xfb, - 0x00, 0xa9, 0x06, 0x4b, 0x4d, 0x6c, 0x75, 0xfb, 0x40, 0x4b, 0x4d, 0x16, - 0x74, 0xfb, 0x00, 0x4c, 0x35, 0x03, 0x72, 0xfb, 0x40, 0x80, 0x01, 0xff, - 0x4a, 0x3d, 0x2c, 0x87, 0xfb, 0x00, 0x4d, 0x34, 0x03, 0x86, 0xfb, 0x40, - 0x43, 0xe5, 0x8a, 0x6e, 0x06, 0x00, 0x43, 0x85, 0xb6, 0xa1, 0x06, 0x00, - 0x43, 0xf4, 0x13, 0x6f, 0x06, 0x40, 0x43, 0x22, 0x00, 0x8d, 0x06, 0x80, - 0x14, 0xec, 0x88, 0x06, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x4a, 0x3d, 0x2c, - 0x89, 0xfb, 0x00, 0x4d, 0x34, 0x03, 0x88, 0xfb, 0x40, 0x80, 0x01, 0xff, - 0x4a, 0x3d, 0x2c, 0x83, 0xfb, 0x00, 0x4d, 0x34, 0x03, 0x82, 0xfb, 0x40, - 0xe4, 0x36, 0x06, 0x80, 0x76, 0x43, 0x22, 0x00, 0x8c, 0x06, 0x80, 0x60, - 0xec, 0x2f, 0x06, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0xaa, - 0xfe, 0x00, 0x4d, 0x34, 0x03, 0xa9, 0xfe, 0x00, 0x05, 0x51, 0x00, 0x01, - 0xff, 0x49, 0x50, 0x12, 0x8a, 0x06, 0x80, 0x3a, 0x4f, 0x9c, 0x45, 0x90, - 0x06, 0x00, 0x09, 0xd6, 0x22, 0x26, 0x44, 0xf7, 0x07, 0x89, 0x06, 0x00, - 0xb4, 0x01, 0xff, 0x0a, 0x5f, 0x12, 0x0d, 0x58, 0xa5, 0x2b, 0xc2, 0x0e, - 0xc1, 0x00, 0x4e, 0xc8, 0x73, 0x59, 0x07, 0x40, 0x4f, 0xbd, 0x21, 0x8f, - 0x06, 0x00, 0x45, 0xf5, 0x06, 0xae, 0x08, 0x40, 0x4d, 0x18, 0x34, 0x5a, - 0x07, 0x00, 0xf6, 0xee, 0x06, 0x40, 0x4e, 0xc8, 0x73, 0x8b, 0x06, 0x40, - 0x80, 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0x85, 0xfb, 0x00, 0x4d, 0x34, 0x03, - 0x84, 0xfb, 0x40, 0x80, 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0xbe, 0xfe, 0x00, - 0xa9, 0x0c, 0x4b, 0x4d, 0x6c, 0xc0, 0xfe, 0x00, 0x4e, 0x3e, 0x7d, 0xfb, - 0x06, 0x40, 0x4b, 0x4d, 0x16, 0xbf, 0xfe, 0x00, 0x4c, 0x35, 0x03, 0xbd, - 0xfe, 0x40, 0x42, 0x4e, 0x00, 0x7b, 0x06, 0x80, 0x91, 0x01, 0xe8, 0x28, - 0x06, 0xc0, 0x00, 0x80, 0x24, 0x42, 0x4e, 0x00, 0x80, 0x06, 0xc0, 0x00, - 0x80, 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0x5b, 0xfb, 0x00, 0xa9, 0x06, 0x4b, - 0x4d, 0x6c, 0x5d, 0xfb, 0x40, 0x4b, 0x4d, 0x16, 0x5c, 0xfb, 0x00, 0x4c, - 0x35, 0x03, 0x5a, 0xfb, 0x40, 0x4a, 0x3d, 0x2c, 0x90, 0xfe, 0x00, 0xa9, - 0x52, 0x4b, 0x4d, 0x6c, 0x92, 0xfe, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, - 0x5e, 0x50, 0x12, 0x51, 0x07, 0x00, 0x4b, 0x56, 0x00, 0xa1, 0x08, 0x00, - 0x56, 0x0f, 0x34, 0x55, 0x07, 0x00, 0x06, 0x0c, 0x07, 0x20, 0xb4, 0x01, - 0xff, 0x0a, 0x5f, 0x12, 0x06, 0x5b, 0x86, 0x1d, 0x54, 0x07, 0x40, 0x52, - 0x14, 0x51, 0x50, 0x07, 0x00, 0x56, 0x6f, 0x35, 0x52, 0x07, 0xc0, 0x00, - 0x53, 0xbf, 0x25, 0x53, 0x07, 0x40, 0x4a, 0x71, 0xab, 0xb6, 0x08, 0x00, - 0xf6, 0x56, 0x07, 0xc0, 0x00, 0x46, 0xf4, 0x06, 0xa0, 0x08, 0x40, 0x4b, - 0x4d, 0x16, 0x91, 0xfe, 0x00, 0x4c, 0x35, 0x03, 0x8f, 0xfe, 0x40, 0x80, - 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0x53, 0xfb, 0x00, 0xa9, 0x06, 0x4b, 0x4d, - 0x6c, 0x55, 0xfb, 0x40, 0x4b, 0x4d, 0x16, 0x54, 0xfb, 0x00, 0x4c, 0x35, - 0x03, 0x52, 0xfb, 0x40, 0xe5, 0xd5, 0x06, 0x00, 0x07, 0xba, 0xc3, 0x9c, - 0x03, 0x42, 0x9e, 0x01, 0x39, 0x06, 0x80, 0xcb, 0x02, 0x43, 0x68, 0x00, - 0x27, 0x06, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0x8e, 0xfe, - 0x00, 0x4d, 0x34, 0x03, 0x8d, 0xfe, 0x00, 0x47, 0x6c, 0x00, 0x49, 0x06, - 0x80, 0x9e, 0x02, 0xb7, 0x01, 0xff, 0x44, 0xb7, 0xa2, 0x71, 0x06, 0x80, - 0x84, 0x02, 0x04, 0x52, 0x00, 0x01, 0xff, 0x09, 0x18, 0xb4, 0x8b, 0x01, - 0x49, 0x98, 0x1d, 0x7a, 0x08, 0x00, 0x1d, 0x70, 0x15, 0x75, 0x06, 0x56, - 0x00, 0x45, 0x52, 0x10, 0x52, 0x73, 0x08, 0x00, 0x4b, 0x01, 0x90, 0x22, - 0x06, 0x80, 0x29, 0x53, 0x53, 0x4b, 0x72, 0x08, 0x80, 0x11, 0x0b, 0x2a, - 0x67, 0x01, 0xff, 0x45, 0x5c, 0x00, 0x72, 0x06, 0x00, 0x45, 0xf5, 0x06, - 0x73, 0x06, 0x40, 0x05, 0x19, 0x00, 0x01, 0xff, 0x49, 0x98, 0x1d, 0x7c, - 0x08, 0x00, 0x49, 0xe9, 0xb8, 0x7f, 0x08, 0x40, 0x80, 0x01, 0xff, 0x4a, - 0x3d, 0x2c, 0x82, 0xfe, 0x00, 0x4d, 0x34, 0x03, 0x81, 0xfe, 0x40, 0x45, - 0x5c, 0x00, 0x23, 0x06, 0x80, 0x16, 0x45, 0xf5, 0x06, 0x25, 0x06, 0xc0, - 0x00, 0x80, 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0x88, 0xfe, 0x00, 0x4d, 0x34, - 0x03, 0x87, 0xfe, 0x40, 0x80, 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0x84, 0xfe, - 0x00, 0x4d, 0x34, 0x03, 0x83, 0xfe, 0x40, 0x4a, 0x0f, 0xa9, 0x74, 0x07, - 0x00, 0x48, 0xca, 0xc9, 0x73, 0x07, 0x40, 0x52, 0x52, 0x4f, 0x75, 0x08, - 0x80, 0x57, 0x45, 0x5c, 0x72, 0x70, 0x08, 0x00, 0x45, 0x5f, 0x4f, 0x74, - 0x08, 0x00, 0x05, 0xc3, 0x00, 0x3b, 0xb2, 0x18, 0x4f, 0x52, 0x72, 0x71, - 0x08, 0xc0, 0x00, 0x05, 0x19, 0x00, 0x01, 0xff, 0x49, 0x98, 0x1d, 0x7b, - 0x08, 0x00, 0x49, 0xe9, 0xb8, 0x7e, 0x08, 0x40, 0x05, 0xc9, 0x00, 0x11, - 0x09, 0x42, 0xae, 0x01, 0xff, 0x45, 0x5c, 0x00, 0x76, 0x08, 0x00, 0x45, - 0xf5, 0x06, 0x79, 0x08, 0x40, 0x45, 0x56, 0x00, 0x81, 0x08, 0x00, 0x49, - 0x49, 0x4f, 0x77, 0x08, 0x40, 0x45, 0x56, 0x00, 0x82, 0x08, 0x00, 0x49, - 0x49, 0x4f, 0x78, 0x08, 0x40, 0x05, 0x19, 0x00, 0x01, 0xff, 0x49, 0x98, - 0x1d, 0x7d, 0x08, 0x00, 0x49, 0xe9, 0xb8, 0x80, 0x08, 0x40, 0x80, 0x01, - 0xff, 0x4a, 0x3d, 0x2c, 0x51, 0xfb, 0x00, 0x4d, 0x34, 0x03, 0x50, 0xfb, - 0x40, 0x80, 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0xf0, 0xfe, 0x00, 0x4d, 0x34, - 0x03, 0xef, 0xfe, 0x40, 0x80, 0x01, 0xff, 0x4a, 0x3d, 0x2c, 0xca, 0xfe, - 0x00, 0xa9, 0x32, 0x4b, 0x4d, 0x6c, 0xcc, 0xfe, 0x00, 0x06, 0xfe, 0x05, - 0x01, 0xff, 0x0a, 0x5f, 0x12, 0x11, 0x08, 0xa3, 0x0b, 0x01, 0xff, 0x45, - 0x5c, 0x00, 0x5d, 0x07, 0x00, 0x50, 0x95, 0x2b, 0x5f, 0x07, 0x40, 0x45, - 0x5c, 0x00, 0xa0, 0x06, 0x00, 0x45, 0xf5, 0x06, 0xb3, 0x08, 0x00, 0x58, - 0x25, 0x2a, 0x5e, 0x07, 0x40, 0x4b, 0x4d, 0x16, 0xcb, 0xfe, 0x00, 0x4c, - 0x35, 0x03, 0xc9, 0xfe, 0x40, 0x43, 0x85, 0xb6, 0xbb, 0x08, 0x00, 0x44, - 0xc4, 0x44, 0xbd, 0x08, 0x00, 0x43, 0xf4, 0x13, 0xbc, 0x08, 0xc0, 0x00, - 0x56, 0xd3, 0x31, 0xc4, 0x08, 0x40, 0x45, 0x5c, 0x00, 0xf7, 0x08, 0x00, - 0x45, 0xf5, 0x06, 0xf9, 0x08, 0x40, 0x4c, 0x24, 0x2c, 0xd1, 0x08, 0x00, - 0x0a, 0x41, 0xae, 0x01, 0xff, 0x45, 0x5c, 0x00, 0xce, 0x08, 0x00, 0x45, - 0xf5, 0x06, 0xcf, 0x08, 0x00, 0x53, 0x3f, 0x49, 0xd2, 0x08, 0x40, 0x80, - 0x0d, 0x43, 0xaa, 0x0a, 0x4d, 0x06, 0xc0, 0x00, 0x4e, 0x33, 0x03, 0x74, - 0xfe, 0x40, 0x4d, 0x34, 0x03, 0x7a, 0xfe, 0x00, 0x4b, 0x4d, 0x6c, 0x7b, - 0xfe, 0x00, 0x4e, 0x3e, 0x7d, 0xf6, 0x08, 0x40, 0x53, 0xc4, 0x49, 0x9f, - 0x08, 0x00, 0x04, 0x58, 0x00, 0x01, 0xff, 0x45, 0x5c, 0x00, 0x54, 0x06, - 0x00, 0x45, 0xf5, 0x06, 0x55, 0x06, 0x40, 0x44, 0x25, 0x0f, 0x4e, 0x06, - 0x80, 0x12, 0x50, 0xca, 0x62, 0x6d, 0x06, 0x00, 0x4e, 0xfa, 0x78, 0x02, - 0x06, 0x00, 0x48, 0x16, 0x16, 0xd4, 0x06, 0x40, 0x80, 0x0d, 0x43, 0xaa, - 0x0a, 0x4b, 0x06, 0xc0, 0x00, 0x4e, 0x33, 0x03, 0x70, 0xfe, 0x40, 0x4d, - 0x34, 0x03, 0x76, 0xfe, 0x00, 0x4b, 0x4d, 0x6c, 0x77, 0xfe, 0x00, 0x05, - 0x51, 0x00, 0x01, 0xff, 0x49, 0x98, 0x1d, 0xf5, 0x08, 0x00, 0x44, 0xf7, - 0x07, 0xf4, 0x08, 0x00, 0x48, 0xd0, 0x09, 0x5e, 0x06, 0x40, 0x0c, 0x85, - 0x90, 0x11, 0x06, 0x16, 0x05, 0x01, 0xff, 0x44, 0x61, 0x49, 0xdd, 0x06, - 0x00, 0x49, 0x41, 0x61, 0x1d, 0x06, 0x40, 0x49, 0xf9, 0x0a, 0xeb, 0x06, - 0x00, 0x48, 0x52, 0xc5, 0xea, 0x06, 0x40, 0xa1, 0x24, 0x50, 0x0a, 0x61, - 0x6b, 0x06, 0x00, 0x53, 0x52, 0x49, 0xe2, 0x08, 0x00, 0x05, 0x3c, 0x01, - 0x01, 0xff, 0x56, 0x65, 0x31, 0xfb, 0x08, 0x80, 0x06, 0x47, 0x55, 0xcd, - 0x9e, 0x08, 0x40, 0x49, 0xa5, 0x3a, 0xfc, 0x08, 0x40, 0x43, 0xea, 0x04, - 0x4f, 0x06, 0x80, 0x06, 0x4c, 0xcd, 0x93, 0x0d, 0x06, 0x40, 0x80, 0x0d, - 0x43, 0xaa, 0x0a, 0x4c, 0x06, 0xc0, 0x00, 0x4e, 0x33, 0x03, 0x72, 0xfe, - 0x40, 0x4d, 0x34, 0x03, 0x78, 0xfe, 0x00, 0x4b, 0x4d, 0x6c, 0x79, 0xfe, - 0x00, 0x48, 0xa6, 0x3a, 0xfe, 0x08, 0x40, 0x02, 0xe9, 0x04, 0x2c, 0x05, - 0x24, 0x0b, 0x01, 0xff, 0x45, 0x81, 0x5d, 0xe5, 0x08, 0x80, 0x1a, 0x45, - 0x5c, 0x72, 0xe4, 0x08, 0x80, 0x0d, 0x45, 0x5f, 0x4f, 0xe6, 0x08, 0xc0, - 0x00, 0x43, 0xaa, 0x0a, 0xe9, 0x08, 0x40, 0x43, 0xaa, 0x0a, 0xe7, 0x08, - 0x40, 0x43, 0xaa, 0x0a, 0xe8, 0x08, 0x40, 0x53, 0x51, 0x47, 0xfc, 0x0e, - 0x01, 0x42, 0x6c, 0x00, 0x0c, 0x06, 0x40, 0x14, 0xdb, 0x42, 0x45, 0xaf, - 0x37, 0xb0, 0x01, 0xff, 0x58, 0x1d, 0x29, 0x9f, 0x00, 0x00, 0x02, 0xd0, - 0x00, 0x01, 0xff, 0x4f, 0xd4, 0x68, 0x50, 0x22, 0x00, 0x09, 0x93, 0x0c, - 0x01, 0xff, 0x59, 0xe4, 0x22, 0x46, 0x22, 0x00, 0x06, 0x7b, 0x00, 0x01, - 0xff, 0x4b, 0x52, 0x28, 0x70, 0x2a, 0x00, 0x42, 0x1e, 0x00, 0x45, 0x22, - 0xc0, 0x00, 0x50, 0xca, 0x5e, 0x52, 0x22, 0x40, 0x44, 0x79, 0x43, 0xe4, - 0x2b, 0x00, 0x47, 0x94, 0x35, 0x27, 0x00, 0x40, 0x45, 0x2e, 0xe1, 0x7a, - 0x23, 0x80, 0x81, 0x04, 0x4d, 0x82, 0x7f, 0x40, 0x23, 0x00, 0xa3, 0xc6, - 0x03, 0xa4, 0xea, 0x02, 0x50, 0x6a, 0x61, 0x77, 0x23, 0x00, 0x56, 0x49, - 0x33, 0x69, 0x23, 0x00, 0xa9, 0xc8, 0x02, 0x04, 0x76, 0xed, 0xb7, 0x02, - 0x04, 0xc3, 0x00, 0xa6, 0x02, 0x45, 0xe8, 0xac, 0x75, 0x23, 0x80, 0x98, - 0x02, 0x02, 0x7c, 0x00, 0x6c, 0xb2, 0x5e, 0xb3, 0x3b, 0x4f, 0x34, 0x72, - 0x68, 0x23, 0x00, 0x02, 0x50, 0x02, 0x06, 0x45, 0x7b, 0xe9, 0x6c, 0x23, - 0x40, 0x80, 0x06, 0x4a, 0xf8, 0x76, 0x4f, 0x23, 0x40, 0x4b, 0xd7, 0x97, - 0x72, 0x23, 0x00, 0x48, 0x2a, 0xc8, 0x5d, 0x23, 0x00, 0x05, 0xde, 0x95, - 0x01, 0xff, 0x49, 0x2f, 0x23, 0x61, 0x23, 0x00, 0x43, 0x2f, 0xc8, 0x55, - 0x23, 0x00, 0x47, 0x77, 0x7e, 0x51, 0x23, 0x40, 0x51, 0x6f, 0x58, 0x6e, - 0x23, 0x00, 0x48, 0x87, 0x7f, 0x3f, 0x23, 0x00, 0x4a, 0x83, 0xad, 0x37, - 0x23, 0x00, 0xb4, 0x01, 0xff, 0x4c, 0x9d, 0x8a, 0x63, 0x23, 0x00, 0x49, - 0xdb, 0xb7, 0x6d, 0x23, 0x40, 0x42, 0x0b, 0x00, 0x74, 0x23, 0x00, 0x4e, - 0xf4, 0x76, 0x46, 0x23, 0x40, 0x42, 0xe8, 0x01, 0x95, 0x23, 0x80, 0x11, - 0x04, 0x6f, 0x53, 0x01, 0xff, 0x44, 0x2a, 0x0d, 0x5e, 0x23, 0x00, 0x48, - 0x78, 0x58, 0x58, 0x23, 0x40, 0x80, 0x01, 0xff, 0x49, 0xf5, 0x0d, 0x42, + 0x25, 0x01, 0x53, 0x32, 0x00, 0x42, 0x15, 0x02, 0x52, 0x32, 0x40, 0x44, + 0xc9, 0x1d, 0x57, 0x32, 0x00, 0x42, 0x01, 0x26, 0x56, 0x32, 0x40, 0x4d, + 0x41, 0x11, 0x49, 0x32, 0x00, 0xe5, 0x51, 0x32, 0x40, 0x43, 0xd2, 0x05, + 0x55, 0x32, 0x00, 0x43, 0xf6, 0x06, 0x54, 0x32, 0x40, 0x43, 0xc4, 0x09, + 0x6c, 0x24, 0x00, 0xf9, 0x5a, 0x32, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x45, + 0x12, 0x0b, 0xb3, 0x32, 0x00, 0xa6, 0x31, 0x44, 0xcf, 0x2a, 0xb4, 0x32, + 0x00, 0x02, 0x10, 0x00, 0x1d, 0xb3, 0x0f, 0xb4, 0x01, 0xff, 0x44, 0x25, + 0x01, 0x5d, 0x32, 0x00, 0x42, 0x15, 0x02, 0x5c, 0x32, 0x40, 0x44, 0xc9, + 0x1d, 0xb2, 0x32, 0x00, 0x42, 0x01, 0x26, 0xb1, 0x32, 0x40, 0x4d, 0x41, + 0x11, 0x4a, 0x32, 0x00, 0xe5, 0x5b, 0x32, 0x40, 0x43, 0xd2, 0x05, 0x5f, + 0x32, 0x00, 0x43, 0xf6, 0x06, 0x5e, 0x32, 0x40, 0x50, 0xc4, 0x5f, 0x48, + 0x32, 0x40, 0x05, 0xc9, 0x1d, 0x11, 0x03, 0x01, 0x26, 0x01, 0xff, 0x43, + 0xc4, 0x09, 0x6f, 0x24, 0x00, 0x51, 0xc3, 0x5f, 0x4d, 0x32, 0x40, 0x43, + 0xc4, 0x09, 0x70, 0x24, 0x00, 0x51, 0xc3, 0x5f, 0x4e, 0x32, 0x40, 0x03, + 0x08, 0x18, 0x58, 0xaf, 0x01, 0xff, 0x43, 0x7c, 0x11, 0xb5, 0x32, 0x80, + 0x06, 0x46, 0x0b, 0x5d, 0x6d, 0x24, 0x40, 0x80, 0x01, 0xff, 0x45, 0x12, + 0x0b, 0xbd, 0x32, 0x00, 0xa6, 0x31, 0x44, 0xcf, 0x2a, 0xbe, 0x32, 0x00, + 0x02, 0x10, 0x00, 0x1d, 0xb3, 0x0f, 0xb4, 0x01, 0xff, 0x44, 0x25, 0x01, + 0xb8, 0x32, 0x00, 0x42, 0x15, 0x02, 0xb7, 0x32, 0x40, 0x44, 0xc9, 0x1d, + 0xbc, 0x32, 0x00, 0x42, 0x01, 0x26, 0xbb, 0x32, 0x40, 0x4d, 0x41, 0x11, + 0x4b, 0x32, 0x00, 0xe5, 0xb6, 0x32, 0x40, 0x43, 0xd2, 0x05, 0xba, 0x32, + 0x00, 0x43, 0xf6, 0x06, 0xb9, 0x32, 0x40, 0x43, 0xc4, 0x09, 0x6e, 0x24, + 0x00, 0xf9, 0xbf, 0x32, 0xc0, 0x00, 0x50, 0xc4, 0x5f, 0x4c, 0x32, 0x40, + 0x04, 0xc9, 0x00, 0x06, 0x45, 0xb4, 0x6f, 0x6a, 0x24, 0x40, 0x43, 0xc4, + 0x09, 0x71, 0x24, 0x00, 0x51, 0xc3, 0x5f, 0x4f, 0x32, 0x40, 0x44, 0x92, + 0x1f, 0x96, 0x22, 0x00, 0x69, 0xb7, 0x04, 0x36, 0x2a, 0x40, 0x05, 0xdf, + 0x05, 0x06, 0x48, 0xed, 0x00, 0xc0, 0x29, 0x40, 0x0f, 0xe4, 0x05, 0x6d, + 0x0d, 0x76, 0x08, 0x01, 0xff, 0xe1, 0xd0, 0x24, 0x00, 0xe2, 0xd1, 0x24, + 0x00, 0xe3, 0xd2, 0x24, 0x00, 0xe4, 0xd3, 0x24, 0x00, 0xe5, 0xd4, 0x24, + 0x00, 0xe6, 0xd5, 0x24, 0x00, 0xe7, 0xd6, 0x24, 0x00, 0xe8, 0xd7, 0x24, + 0x00, 0xe9, 0xd8, 0x24, 0x00, 0xea, 0xd9, 0x24, 0x00, 0xeb, 0xda, 0x24, + 0x00, 0xec, 0xdb, 0x24, 0x00, 0xed, 0xdc, 0x24, 0x00, 0xee, 0xdd, 0x24, + 0x00, 0xef, 0xde, 0x24, 0x00, 0xf0, 0xdf, 0x24, 0x00, 0xf1, 0xe0, 0x24, + 0x00, 0xf2, 0xe1, 0x24, 0x00, 0xf3, 0xe2, 0x24, 0x00, 0xf4, 0xe3, 0x24, + 0x00, 0xf5, 0xe4, 0x24, 0x00, 0xf6, 0xe5, 0x24, 0x00, 0xf7, 0xe6, 0x24, + 0x00, 0xf8, 0xe7, 0x24, 0x00, 0xf9, 0xe8, 0x24, 0x00, 0xfa, 0xe9, 0x24, + 0x40, 0xe1, 0xb6, 0x24, 0x00, 0xe2, 0xb7, 0x24, 0x00, 0xe3, 0xb8, 0x24, + 0x00, 0xe4, 0xb9, 0x24, 0x00, 0xe5, 0xba, 0x24, 0x00, 0xe6, 0xbb, 0x24, + 0x00, 0xe7, 0xbc, 0x24, 0x00, 0xe8, 0xbd, 0x24, 0x00, 0xe9, 0xbe, 0x24, + 0x00, 0xea, 0xbf, 0x24, 0x00, 0xeb, 0xc0, 0x24, 0x00, 0xec, 0xc1, 0x24, + 0x00, 0xed, 0xc2, 0x24, 0x00, 0xee, 0xc3, 0x24, 0x00, 0xef, 0xc4, 0x24, + 0x00, 0xf0, 0xc5, 0x24, 0x00, 0xf1, 0xc6, 0x24, 0x00, 0xf2, 0xc7, 0x24, + 0x00, 0xf3, 0xc8, 0x24, 0x00, 0xf4, 0xc9, 0x24, 0x00, 0xf5, 0xca, 0x24, + 0x00, 0xf6, 0xcb, 0x24, 0x00, 0xf7, 0xcc, 0x24, 0x00, 0xf8, 0xcd, 0x24, + 0x00, 0xf9, 0xce, 0x24, 0x00, 0xfa, 0xcf, 0x24, 0x40, 0x08, 0xb0, 0xc3, + 0x11, 0x10, 0x48, 0x53, 0x01, 0xff, 0x46, 0x76, 0xda, 0x7c, 0x32, 0x00, + 0x45, 0xb8, 0xe7, 0x7d, 0x32, 0x40, 0xe1, 0xd0, 0x32, 0x00, 0xe5, 0xd3, + 0x32, 0x00, 0xa8, 0xb3, 0x01, 0xe9, 0xd1, 0x32, 0x00, 0xab, 0x98, 0x01, + 0xad, 0x81, 0x01, 0xae, 0x6b, 0xef, 0xd4, 0x32, 0x00, 0xb2, 0x51, 0xb3, + 0x3b, 0xb4, 0x25, 0xf5, 0xd2, 0x32, 0x00, 0xb7, 0x0f, 0xb9, 0x01, 0xff, + 0xe1, 0xf3, 0x32, 0x00, 0xef, 0xf5, 0x32, 0x00, 0xf5, 0xf4, 0x32, 0x40, + 0xe1, 0xfb, 0x32, 0x00, 0xe5, 0xfd, 0x32, 0x00, 0xe9, 0xfc, 0x32, 0x00, + 0xef, 0xfe, 0x32, 0x40, 0xe1, 0xdf, 0x32, 0x00, 0xe5, 0xe2, 0x32, 0x00, + 0xe9, 0xe0, 0x32, 0x00, 0xef, 0xe3, 0x32, 0x00, 0xf5, 0xe1, 0x32, 0x40, + 0xe1, 0xda, 0x32, 0x00, 0xe5, 0xdd, 0x32, 0x00, 0xe9, 0xdb, 0x32, 0x00, + 0xef, 0xde, 0x32, 0x00, 0xf5, 0xdc, 0x32, 0x40, 0xe1, 0xf6, 0x32, 0x00, + 0xe5, 0xf9, 0x32, 0x00, 0xe9, 0xf7, 0x32, 0x00, 0xef, 0xfa, 0x32, 0x00, + 0xf5, 0xf8, 0x32, 0x40, 0xe1, 0xe4, 0x32, 0x00, 0xe5, 0xe7, 0x32, 0x00, + 0xe9, 0xe5, 0x32, 0x00, 0xef, 0xe8, 0x32, 0x00, 0xf5, 0xe6, 0x32, 0x40, + 0xe1, 0xee, 0x32, 0x00, 0xe5, 0xf1, 0x32, 0x00, 0xe9, 0xef, 0x32, 0x00, + 0xef, 0xf2, 0x32, 0x00, 0xf5, 0xf0, 0x32, 0x40, 0xe1, 0xd5, 0x32, 0x00, + 0xe5, 0xd8, 0x32, 0x00, 0xe9, 0xd6, 0x32, 0x00, 0xef, 0xd9, 0x32, 0x00, + 0xf5, 0xd7, 0x32, 0x40, 0xe1, 0xe9, 0x32, 0x00, 0xe5, 0xec, 0x32, 0x00, + 0xe9, 0xea, 0x32, 0x00, 0xef, 0xed, 0x32, 0x00, 0xf5, 0xeb, 0x32, 0x40, + 0x09, 0x7e, 0xab, 0x13, 0x51, 0xb5, 0x5c, 0xc8, 0xf6, 0x01, 0x1b, 0xa1, + 0x1d, 0x01, 0xff, 0xe3, 0x2b, 0xf1, 0x01, 0xf2, 0x2c, 0xf1, 0x41, 0xa1, + 0xe5, 0x02, 0xa3, 0xc7, 0x02, 0xa5, 0xac, 0x02, 0xa6, 0x89, 0x02, 0xa8, + 0xfa, 0x01, 0x44, 0x75, 0xc1, 0xa0, 0x32, 0x00, 0xab, 0xe5, 0x01, 0xac, + 0xd0, 0x01, 0xad, 0xb3, 0x01, 0xae, 0x9b, 0x01, 0x43, 0x0e, 0x0b, 0x80, + 0x32, 0x00, 0x45, 0x6b, 0xc6, 0x9e, 0x32, 0x00, 0x48, 0xa6, 0x34, 0x44, + 0x32, 0x00, 0xb2, 0x6c, 0xb3, 0x23, 0xb4, 0x0f, 0xb7, 0x01, 0xff, 0x44, + 0x8a, 0x00, 0x8c, 0x32, 0x00, 0x43, 0xb4, 0x2d, 0x8d, 0x32, 0x40, 0x42, + 0x92, 0x01, 0x89, 0x32, 0x00, 0x44, 0x25, 0x01, 0x82, 0x32, 0x00, 0x42, + 0x15, 0x02, 0x81, 0x32, 0x40, 0x45, 0x33, 0xe5, 0x46, 0x32, 0x00, 0xa5, + 0x33, 0x42, 0x01, 0x26, 0x85, 0x32, 0x00, 0x46, 0xa8, 0xde, 0x93, 0x32, + 0x00, 0x46, 0x0e, 0xdf, 0x95, 0x32, 0x00, 0xb4, 0x13, 0xb5, 0x01, 0xff, + 0x46, 0x28, 0xdd, 0x9c, 0x32, 0x00, 0xee, 0x90, 0x32, 0x00, 0x47, 0xb2, + 0xd4, 0xac, 0x32, 0x40, 0x43, 0x35, 0x01, 0x91, 0x32, 0x00, 0x43, 0xa6, + 0xf4, 0xab, 0x32, 0x40, 0x44, 0x6d, 0xef, 0x99, 0x32, 0x00, 0x43, 0xca, + 0x1d, 0x86, 0x32, 0x40, 0xa5, 0x06, 0x44, 0xc9, 0x00, 0xa8, 0x32, 0x40, + 0x46, 0xb2, 0xdd, 0xaa, 0x32, 0x00, 0xb3, 0x01, 0xff, 0x45, 0xc1, 0x5c, + 0xae, 0x32, 0x00, 0xf4, 0xa1, 0x32, 0x40, 0x43, 0x2b, 0x05, 0x94, 0x32, + 0x00, 0xa9, 0x01, 0xff, 0x43, 0xca, 0x00, 0xb0, 0x32, 0x00, 0x42, 0xcd, + 0x05, 0x88, 0x32, 0x40, 0x43, 0x67, 0x00, 0x9a, 0x32, 0x00, 0xa5, 0x06, + 0x43, 0xcd, 0x02, 0x8a, 0x32, 0x40, 0x46, 0xee, 0xda, 0xa9, 0x32, 0x00, + 0x43, 0x12, 0x00, 0x8e, 0x32, 0x40, 0x44, 0x09, 0xe8, 0x98, 0x32, 0x00, + 0x43, 0xc4, 0x00, 0xa7, 0x32, 0x00, 0x42, 0xd1, 0x00, 0xa6, 0x32, 0x40, + 0x4b, 0x83, 0x9d, 0x45, 0x32, 0x00, 0x43, 0x08, 0x8e, 0x47, 0x32, 0x40, + 0x43, 0x2f, 0x08, 0x92, 0x32, 0x00, 0x43, 0x3f, 0x00, 0xa4, 0x32, 0x40, + 0x45, 0x57, 0x21, 0x9b, 0x32, 0x00, 0xa9, 0x06, 0x43, 0xf6, 0x06, 0x83, + 0x32, 0x40, 0x47, 0x69, 0xd3, 0x96, 0x32, 0x00, 0x42, 0x88, 0x00, 0x8b, + 0x32, 0x00, 0x42, 0x32, 0x00, 0x84, 0x32, 0x40, 0x44, 0x53, 0x72, 0x8f, + 0x32, 0x00, 0x44, 0xc9, 0x00, 0x87, 0x32, 0x00, 0x49, 0xa2, 0xbc, 0xad, + 0x32, 0x00, 0x48, 0xa8, 0xcc, 0x9d, 0x32, 0x40, 0x45, 0x74, 0x02, 0xa5, + 0x32, 0x00, 0xaf, 0x01, 0xff, 0x4c, 0x0a, 0x87, 0x97, 0x32, 0x00, 0x42, + 0x1b, 0x1d, 0xa2, 0x32, 0x00, 0x45, 0x76, 0xd5, 0xa3, 0x32, 0x40, 0x45, + 0x06, 0xe5, 0x51, 0xf2, 0x01, 0x48, 0x48, 0xc5, 0x50, 0xf2, 0x01, 0x47, + 0x41, 0xc3, 0xaf, 0x32, 0x00, 0x48, 0xc8, 0xcb, 0x9f, 0x32, 0x40, 0x06, + 0x79, 0xd1, 0x12, 0x5b, 0xfe, 0x1a, 0xb2, 0x27, 0x00, 0x58, 0x4e, 0x2a, + 0x89, 0x23, 0x00, 0x4b, 0x4d, 0xa4, 0x6f, 0xf1, 0x41, 0xa3, 0xaa, 0x01, + 0x45, 0x71, 0xa5, 0x6d, 0x32, 0x80, 0x9c, 0x01, 0x45, 0x1e, 0xcc, 0x67, + 0x32, 0x80, 0x89, 0x01, 0xab, 0x6d, 0x45, 0xa8, 0xe8, 0x64, 0x32, 0x80, + 0x60, 0x45, 0x1b, 0xe9, 0x61, 0x32, 0x80, 0x53, 0xb0, 0x37, 0x45, 0x65, + 0xea, 0x63, 0x32, 0x80, 0x2a, 0x44, 0x65, 0xbf, 0x66, 0x32, 0x80, 0x1d, + 0xb4, 0x01, 0xff, 0x46, 0x57, 0xd6, 0x6b, 0x32, 0x80, 0x0d, 0x45, 0xe5, + 0xcd, 0x62, 0x32, 0xc0, 0x00, 0x42, 0x19, 0x00, 0x70, 0x32, 0x40, 0x42, + 0x19, 0x00, 0x79, 0x32, 0x40, 0x42, 0x19, 0x00, 0x74, 0x32, 0x40, 0x42, + 0x19, 0x00, 0x71, 0x32, 0x40, 0x46, 0xd2, 0xc2, 0x6c, 0x32, 0x80, 0x0d, + 0x44, 0xe3, 0x84, 0x65, 0x32, 0xc0, 0x00, 0x42, 0x19, 0x00, 0x73, 0x32, + 0x40, 0x42, 0x19, 0x00, 0x7a, 0x32, 0x40, 0x42, 0x19, 0x00, 0x6f, 0x32, + 0x40, 0x42, 0x19, 0x00, 0x72, 0x32, 0x40, 0x46, 0xca, 0xc2, 0x6a, 0x32, + 0x80, 0x0d, 0x45, 0xdd, 0xa2, 0x60, 0x32, 0xc0, 0x00, 0x42, 0x19, 0x00, + 0x6e, 0x32, 0x40, 0x42, 0x19, 0x00, 0x78, 0x32, 0x40, 0x80, 0x01, 0xff, + 0xe1, 0x75, 0x32, 0x00, 0xf5, 0x7e, 0x32, 0x40, 0x42, 0x19, 0x00, 0x7b, + 0x32, 0x40, 0x46, 0xea, 0xcf, 0x69, 0x32, 0x80, 0x0d, 0x44, 0xeb, 0xcf, + 0x68, 0x32, 0xc0, 0x00, 0x42, 0x19, 0x00, 0x76, 0x32, 0x40, 0x42, 0x19, + 0x00, 0x77, 0x32, 0x40, 0x43, 0xf9, 0x03, 0x9d, 0x22, 0x00, 0xa9, 0x0f, + 0xaf, 0x01, 0xff, 0x61, 0x2c, 0x0e, 0x0f, 0xf1, 0x01, 0x4a, 0xfb, 0x36, + 0x99, 0x22, 0x40, 0x04, 0xf1, 0x06, 0x11, 0x08, 0xc4, 0x32, 0x01, 0xff, + 0x43, 0x5b, 0x03, 0x38, 0x2a, 0x00, 0x44, 0x49, 0x0e, 0x98, 0x22, 0x40, + 0x45, 0x12, 0x0b, 0x67, 0x24, 0x00, 0xa6, 0x2e, 0x44, 0xcf, 0x2a, 0x68, + 0x24, 0x00, 0x43, 0x0e, 0x0b, 0x60, 0x24, 0x00, 0xb3, 0x14, 0xb4, 0x06, + 0x44, 0x43, 0x1e, 0xea, 0x24, 0x40, 0x44, 0x25, 0x01, 0x62, 0x24, 0x00, + 0x42, 0x15, 0x02, 0x61, 0x24, 0x40, 0x44, 0xc9, 0x1d, 0x66, 0x24, 0x00, + 0x42, 0x01, 0x26, 0x65, 0x24, 0x40, 0x43, 0xd2, 0x05, 0x64, 0x24, 0x00, + 0x43, 0xf6, 0x06, 0x63, 0x24, 0x40, 0x58, 0x35, 0x0e, 0x6e, 0xf1, 0x01, + 0xe3, 0x6d, 0xf1, 0x01, 0xe4, 0x2d, 0xf1, 0x01, 0x04, 0x96, 0x10, 0x01, + 0xff, 0x80, 0x06, 0x49, 0x8f, 0xba, 0xd2, 0x26, 0x40, 0x46, 0xcc, 0xdb, + 0x02, 0xf9, 0x81, 0x06, 0x46, 0x3e, 0xdf, 0x40, 0xf5, 0x41, 0x06, 0x50, + 0x00, 0x01, 0xff, 0x49, 0xd1, 0x46, 0x00, 0xf9, 0x01, 0x48, 0x1f, 0x0a, + 0x01, 0xf9, 0x41, 0x45, 0x89, 0xe9, 0xbf, 0x2b, 0x00, 0x45, 0xb3, 0x21, + 0xbf, 0x29, 0x40, 0x0c, 0x35, 0x0b, 0x06, 0x50, 0x66, 0x67, 0x9b, 0x22, + 0x40, 0x46, 0xcd, 0x00, 0x0e, 0xf1, 0x01, 0x56, 0xb9, 0x32, 0xbc, 0x29, + 0x40, 0x7e, 0x00, 0x00, 0xba, 0x29, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, + 0x61, 0x66, 0x0d, 0xd5, 0x25, 0x00, 0x4e, 0x0b, 0x00, 0xb5, 0x29, 0x00, + 0xac, 0x30, 0x50, 0xb6, 0x66, 0xd1, 0x25, 0x00, 0xb3, 0x1c, 0x63, 0xaa, + 0x0b, 0xc3, 0x29, 0x00, 0x06, 0x6d, 0x02, 0x06, 0x4d, 0x2f, 0x8a, 0xcd, + 0x25, 0x40, 0x4a, 0xec, 0x25, 0xd3, 0x25, 0x00, 0x54, 0x64, 0x45, 0xd4, + 0x25, 0x40, 0x58, 0xee, 0x29, 0xc2, 0x29, 0x00, 0x4d, 0x93, 0x89, 0xbb, + 0x29, 0x40, 0x4e, 0x79, 0x6f, 0xd0, 0x25, 0x00, 0x4f, 0xa3, 0x71, 0xd2, + 0x25, 0x40, 0xa1, 0xfa, 0x08, 0xa5, 0x92, 0x02, 0xa9, 0xda, 0x01, 0xaf, + 0x0c, 0x4c, 0xb3, 0x94, 0x84, 0xf3, 0x01, 0x44, 0xa2, 0xda, 0xea, 0x26, + 0x40, 0x4a, 0xc1, 0xa8, 0x6b, 0xf3, 0x01, 0x47, 0xe3, 0xd4, 0x62, 0xf9, + 0x01, 0x08, 0x28, 0xca, 0x01, 0xff, 0x07, 0xec, 0x05, 0x34, 0x07, 0xff, + 0x39, 0x01, 0xff, 0x44, 0xf5, 0x06, 0xc8, 0x0f, 0x01, 0x43, 0x0e, 0x0b, + 0xc5, 0x0f, 0x81, 0x1c, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0xc9, 0x0f, + 0x01, 0x44, 0x25, 0x01, 0xc7, 0x0f, 0x01, 0xb7, 0x01, 0xff, 0x44, 0xcb, + 0x1d, 0xca, 0x0f, 0x01, 0xef, 0xc6, 0x0f, 0x41, 0x48, 0x70, 0x11, 0xcb, + 0x0f, 0x41, 0xa1, 0x75, 0x44, 0x41, 0xef, 0xb2, 0x0f, 0x01, 0x4a, 0xf3, + 0xa8, 0xb7, 0x0f, 0x01, 0x46, 0x23, 0x4a, 0xb4, 0x0f, 0x01, 0x45, 0xdd, + 0xaa, 0xb3, 0x0f, 0x01, 0x42, 0xb0, 0x01, 0xb5, 0x0f, 0x81, 0x50, 0x44, + 0xcd, 0xf0, 0xbb, 0x0f, 0x01, 0x46, 0x94, 0xdd, 0xbc, 0x0f, 0x01, 0x43, + 0xb4, 0x05, 0xbd, 0x0f, 0x01, 0x43, 0xdc, 0x22, 0xbe, 0x0f, 0x01, 0x42, + 0x6f, 0x02, 0xc1, 0x0f, 0x01, 0x44, 0x76, 0x66, 0xc2, 0x0f, 0x01, 0xb3, + 0x18, 0x43, 0xa4, 0xc4, 0xc4, 0x0f, 0x01, 0x43, 0x8a, 0x8a, 0xb6, 0x0f, + 0x01, 0x44, 0xa1, 0x52, 0xba, 0x0f, 0x01, 0x45, 0x9b, 0x52, 0xb8, 0x0f, + 0x41, 0x45, 0x48, 0xe4, 0xbf, 0x0f, 0x01, 0x43, 0x7a, 0x16, 0xc3, 0x0f, + 0x01, 0x4a, 0xad, 0xad, 0xb1, 0x0f, 0x41, 0x42, 0x53, 0x00, 0xb9, 0x0f, + 0x41, 0x44, 0x18, 0x3d, 0xb0, 0x0f, 0x01, 0x43, 0x7e, 0x1a, 0xc0, 0x0f, + 0x41, 0x44, 0xd4, 0x8a, 0x27, 0x26, 0x00, 0x44, 0x90, 0x01, 0x14, 0xf4, + 0x01, 0x42, 0xe2, 0x1a, 0xd2, 0xf9, 0x81, 0x1c, 0x0b, 0x01, 0xa0, 0x0c, + 0x45, 0xfc, 0xe9, 0x3f, 0xf4, 0x01, 0x43, 0xb1, 0x0e, 0xb7, 0x26, 0x40, + 0x4d, 0xd0, 0x88, 0xf2, 0x6f, 0x01, 0x4e, 0x41, 0x7d, 0xf3, 0x6f, 0x41, + 0x4c, 0x53, 0x94, 0xb8, 0xf6, 0x41, 0x02, 0x36, 0x01, 0xcd, 0x06, 0xa5, + 0xbe, 0x06, 0x4b, 0x8d, 0xa1, 0xc1, 0xf3, 0x01, 0xb2, 0x06, 0x45, 0x19, + 0xeb, 0x30, 0xf3, 0x41, 0x05, 0x84, 0xe9, 0x1a, 0xb2, 0x01, 0xff, 0x43, + 0x14, 0x9e, 0x52, 0xf3, 0x01, 0x02, 0x09, 0x00, 0x01, 0xff, 0x47, 0x8e, + 0xcf, 0x38, 0xf3, 0x01, 0x46, 0x16, 0x08, 0xbe, 0xce, 0x41, 0x07, 0xec, + 0x05, 0x89, 0x03, 0x0d, 0x76, 0x08, 0x01, 0xff, 0xe1, 0x70, 0xab, 0x00, + 0xa4, 0xdf, 0x02, 0xe5, 0x71, 0xab, 0x00, 0xa7, 0xc0, 0x02, 0xa8, 0x9f, + 0x02, 0xe9, 0x72, 0xab, 0x00, 0x42, 0x1b, 0x02, 0x77, 0xab, 0x00, 0xac, + 0xfa, 0x01, 0xad, 0xdf, 0x01, 0xae, 0xbf, 0x01, 0xef, 0x73, 0xab, 0x00, + 0x02, 0x7c, 0x00, 0x9e, 0x01, 0xf3, 0x9d, 0xab, 0x80, 0x80, 0x01, 0xb4, + 0x3d, 0xf5, 0x74, 0xab, 0x00, 0xf6, 0x75, 0xab, 0x00, 0xb7, 0x1b, 0xb9, + 0x01, 0xff, 0xe1, 0xbf, 0xab, 0x00, 0xe5, 0xf8, 0x13, 0x00, 0xe9, 0xf9, + 0x13, 0x00, 0xef, 0xfa, 0x13, 0x00, 0xf5, 0xfb, 0x13, 0x00, 0xf6, 0xfc, + 0x13, 0x40, 0xe1, 0xb9, 0xab, 0x00, 0xe5, 0xba, 0xab, 0x00, 0xe9, 0xbb, + 0xab, 0x00, 0xef, 0xbc, 0xab, 0x00, 0xf5, 0xbd, 0xab, 0x00, 0xf6, 0xbe, + 0xab, 0x40, 0xe1, 0xa4, 0xab, 0x00, 0xe5, 0xa6, 0xab, 0x00, 0xe9, 0xa8, + 0xab, 0x00, 0xac, 0x1b, 0xb3, 0x01, 0xff, 0xe1, 0xb3, 0xab, 0x00, 0xe5, + 0xb4, 0xab, 0x00, 0xe9, 0xb5, 0xab, 0x00, 0xef, 0xb6, 0xab, 0x00, 0xf5, + 0xb7, 0xab, 0x00, 0xf6, 0xb8, 0xab, 0x40, 0xe1, 0xad, 0xab, 0x00, 0xe5, + 0xae, 0xab, 0x00, 0xe9, 0xaf, 0xab, 0x00, 0xef, 0xb0, 0xab, 0x00, 0xf5, + 0xb1, 0xab, 0x00, 0xf6, 0xb2, 0xab, 0x40, 0xe1, 0x9c, 0xab, 0x00, 0xe5, + 0x9e, 0xab, 0x00, 0xe9, 0x9f, 0xab, 0x00, 0xef, 0xa0, 0xab, 0x00, 0xf5, + 0xa1, 0xab, 0x00, 0xf6, 0xa2, 0xab, 0x40, 0xe1, 0x96, 0xab, 0x00, 0xe5, + 0x97, 0xab, 0x00, 0xe9, 0x98, 0xab, 0x00, 0xef, 0x99, 0xab, 0x00, 0xf5, + 0x9a, 0xab, 0x00, 0xf6, 0x9b, 0xab, 0x40, 0xe1, 0x8e, 0xab, 0x80, 0x14, + 0xe5, 0x91, 0xab, 0x00, 0xe9, 0x92, 0xab, 0x00, 0xef, 0x93, 0xab, 0x00, + 0xf5, 0x94, 0xab, 0x00, 0xf6, 0x95, 0xab, 0x40, 0xe8, 0x90, 0xab, 0x40, + 0xe1, 0x89, 0xab, 0x00, 0xe5, 0x8a, 0xab, 0x00, 0xe9, 0x8b, 0xab, 0x00, + 0xef, 0x8c, 0xab, 0x00, 0xf5, 0x8d, 0xab, 0x00, 0xf6, 0xfd, 0x13, 0x40, + 0xe1, 0x83, 0xab, 0x00, 0xe5, 0x84, 0xab, 0x00, 0xe9, 0x85, 0xab, 0x00, + 0xef, 0x86, 0xab, 0x00, 0xf5, 0x87, 0xab, 0x00, 0xf6, 0x88, 0xab, 0x40, + 0xe1, 0x7d, 0xab, 0x00, 0xe5, 0x7e, 0xab, 0x00, 0xe9, 0x7f, 0xab, 0x00, + 0x42, 0x2a, 0x05, 0x8f, 0xab, 0x00, 0xef, 0x80, 0xab, 0x00, 0xf5, 0x81, + 0xab, 0x00, 0xf6, 0x82, 0xab, 0x40, 0xe1, 0x76, 0xab, 0x00, 0xe5, 0x78, + 0xab, 0x00, 0xe9, 0x79, 0xab, 0x00, 0xef, 0x7a, 0xab, 0x00, 0xf5, 0x7b, + 0xab, 0x00, 0xf6, 0x7c, 0xab, 0x40, 0xe1, 0xa3, 0xab, 0x00, 0xe5, 0xa5, + 0xab, 0x00, 0xe9, 0xa7, 0xab, 0x00, 0x42, 0x74, 0x00, 0xac, 0xab, 0x00, + 0xef, 0xa9, 0xab, 0x00, 0xf5, 0xaa, 0xab, 0x00, 0xf6, 0xab, 0xab, 0x40, + 0xe1, 0xa0, 0x13, 0x00, 0xa4, 0xdf, 0x02, 0xe5, 0xa1, 0x13, 0x00, 0xa7, + 0xc0, 0x02, 0xa8, 0x9f, 0x02, 0xe9, 0xa2, 0x13, 0x00, 0x42, 0x1b, 0x02, + 0xa7, 0x13, 0x00, 0xac, 0xfa, 0x01, 0xad, 0xdf, 0x01, 0xae, 0xbf, 0x01, + 0xef, 0xa3, 0x13, 0x00, 0x02, 0x7c, 0x00, 0x9e, 0x01, 0xf3, 0xcd, 0x13, + 0x80, 0x80, 0x01, 0xb4, 0x3d, 0xf5, 0xa4, 0x13, 0x00, 0xf6, 0xa5, 0x13, + 0x00, 0xb7, 0x1b, 0xb9, 0x01, 0xff, 0xe1, 0xef, 0x13, 0x00, 0xe5, 0xf0, + 0x13, 0x00, 0xe9, 0xf1, 0x13, 0x00, 0xef, 0xf2, 0x13, 0x00, 0xf5, 0xf3, + 0x13, 0x00, 0xf6, 0xf4, 0x13, 0x40, 0xe1, 0xe9, 0x13, 0x00, 0xe5, 0xea, + 0x13, 0x00, 0xe9, 0xeb, 0x13, 0x00, 0xef, 0xec, 0x13, 0x00, 0xf5, 0xed, + 0x13, 0x00, 0xf6, 0xee, 0x13, 0x40, 0xe1, 0xd4, 0x13, 0x00, 0xe5, 0xd6, + 0x13, 0x00, 0xe9, 0xd8, 0x13, 0x00, 0xac, 0x1b, 0xb3, 0x01, 0xff, 0xe1, + 0xe3, 0x13, 0x00, 0xe5, 0xe4, 0x13, 0x00, 0xe9, 0xe5, 0x13, 0x00, 0xef, + 0xe6, 0x13, 0x00, 0xf5, 0xe7, 0x13, 0x00, 0xf6, 0xe8, 0x13, 0x40, 0xe1, + 0xdd, 0x13, 0x00, 0xe5, 0xde, 0x13, 0x00, 0xe9, 0xdf, 0x13, 0x00, 0xef, + 0xe0, 0x13, 0x00, 0xf5, 0xe1, 0x13, 0x00, 0xf6, 0xe2, 0x13, 0x40, 0xe1, + 0xcc, 0x13, 0x00, 0xe5, 0xce, 0x13, 0x00, 0xe9, 0xcf, 0x13, 0x00, 0xef, + 0xd0, 0x13, 0x00, 0xf5, 0xd1, 0x13, 0x00, 0xf6, 0xd2, 0x13, 0x40, 0xe1, + 0xc6, 0x13, 0x00, 0xe5, 0xc7, 0x13, 0x00, 0xe9, 0xc8, 0x13, 0x00, 0xef, + 0xc9, 0x13, 0x00, 0xf5, 0xca, 0x13, 0x00, 0xf6, 0xcb, 0x13, 0x40, 0xe1, + 0xbe, 0x13, 0x80, 0x14, 0xe5, 0xc1, 0x13, 0x00, 0xe9, 0xc2, 0x13, 0x00, + 0xef, 0xc3, 0x13, 0x00, 0xf5, 0xc4, 0x13, 0x00, 0xf6, 0xc5, 0x13, 0x40, + 0xe8, 0xc0, 0x13, 0x40, 0xe1, 0xb9, 0x13, 0x00, 0xe5, 0xba, 0x13, 0x00, + 0xe9, 0xbb, 0x13, 0x00, 0xef, 0xbc, 0x13, 0x00, 0xf5, 0xbd, 0x13, 0x00, + 0xf6, 0xf5, 0x13, 0x40, 0xe1, 0xb3, 0x13, 0x00, 0xe5, 0xb4, 0x13, 0x00, + 0xe9, 0xb5, 0x13, 0x00, 0xef, 0xb6, 0x13, 0x00, 0xf5, 0xb7, 0x13, 0x00, + 0xf6, 0xb8, 0x13, 0x40, 0xe1, 0xad, 0x13, 0x00, 0xe5, 0xae, 0x13, 0x00, + 0xe9, 0xaf, 0x13, 0x00, 0x42, 0x2a, 0x05, 0xbf, 0x13, 0x00, 0xef, 0xb0, + 0x13, 0x00, 0xf5, 0xb1, 0x13, 0x00, 0xf6, 0xb2, 0x13, 0x40, 0xe1, 0xa6, + 0x13, 0x00, 0xe5, 0xa8, 0x13, 0x00, 0xe9, 0xa9, 0x13, 0x00, 0xef, 0xaa, + 0x13, 0x00, 0xf5, 0xab, 0x13, 0x00, 0xf6, 0xac, 0x13, 0x40, 0xe1, 0xd3, + 0x13, 0x00, 0xe5, 0xd5, 0x13, 0x00, 0xe9, 0xd7, 0x13, 0x00, 0x42, 0x74, + 0x00, 0xdc, 0x13, 0x00, 0xef, 0xd9, 0x13, 0x00, 0xf5, 0xda, 0x13, 0x00, + 0xf6, 0xdb, 0x13, 0x40, 0x4e, 0xc7, 0x7b, 0xe3, 0xf4, 0x01, 0x48, 0xb8, + 0xca, 0xc0, 0xf9, 0x41, 0x45, 0xb8, 0x00, 0x13, 0x27, 0x00, 0x48, 0x72, + 0x14, 0x7e, 0xf6, 0xc1, 0x00, 0x45, 0x56, 0x0b, 0x95, 0xfb, 0x41, 0xa9, + 0x8d, 0x08, 0x04, 0xe1, 0xf0, 0xb5, 0x04, 0x02, 0x49, 0x04, 0x3b, 0xb2, + 0x01, 0xff, 0x07, 0x84, 0xce, 0x18, 0x07, 0x94, 0x0d, 0x01, 0xff, 0x4f, + 0x5d, 0x6c, 0xc9, 0xf4, 0x01, 0x4d, 0xba, 0x89, 0xc8, 0xf4, 0xc1, 0x00, + 0x4d, 0x2a, 0x7f, 0xb9, 0xf4, 0x41, 0x49, 0xe4, 0x3b, 0x09, 0x00, 0x80, + 0x06, 0x42, 0xf4, 0x02, 0x40, 0x20, 0x40, 0x80, 0x01, 0xff, 0x43, 0x9c, + 0x12, 0x88, 0x00, 0x00, 0x52, 0xa7, 0x56, 0x89, 0x00, 0x40, 0x0f, 0x3d, + 0x33, 0xc7, 0x03, 0x06, 0xef, 0x06, 0x80, 0x03, 0x07, 0xec, 0x05, 0x52, + 0x0c, 0x6d, 0x16, 0x34, 0x0b, 0x40, 0x77, 0x01, 0xff, 0xa1, 0x21, 0x42, + 0x12, 0x0b, 0x2c, 0xaa, 0x00, 0xe9, 0x2a, 0xaa, 0x80, 0x12, 0xef, 0x2f, + 0xaa, 0x80, 0x09, 0xf5, 0x2d, 0xaa, 0xc0, 0x00, 0xe5, 0x32, 0xaa, 0x40, + 0xe5, 0x2e, 0xaa, 0x40, 0xe9, 0x2b, 0xaa, 0x40, 0xe1, 0x29, 0xaa, 0x00, + 0xe9, 0x30, 0xaa, 0x00, 0xf5, 0x31, 0xaa, 0x40, 0xa4, 0x0c, 0x46, 0x56, + 0x85, 0x5c, 0xaa, 0x00, 0x4c, 0x0f, 0x96, 0x5f, 0xaa, 0x40, 0x44, 0x73, + 0x20, 0x5d, 0xaa, 0x00, 0x4b, 0x09, 0xa1, 0x5e, 0xaa, 0x40, 0xe1, 0x00, + 0xaa, 0x80, 0xa0, 0x02, 0xa2, 0x8d, 0x02, 0x02, 0x6d, 0x14, 0xfe, 0x01, + 0xa4, 0xeb, 0x01, 0xe5, 0x03, 0xaa, 0x00, 0x06, 0xf5, 0x2c, 0xb1, 0x01, + 0xa7, 0xa4, 0x01, 0x42, 0x22, 0x00, 0x28, 0xaa, 0x00, 0xe9, 0x01, 0xaa, + 0x00, 0xaa, 0x8d, 0x01, 0xab, 0x80, 0x01, 0x42, 0x74, 0x00, 0x24, 0xaa, + 0x00, 0xad, 0x6e, 0xae, 0x44, 0xef, 0x05, 0xaa, 0x00, 0xb0, 0x2e, 0x42, + 0x71, 0x00, 0x23, 0xaa, 0x00, 0xb3, 0x1c, 0xb4, 0x10, 0xf5, 0x02, 0xaa, + 0x00, 0x42, 0xf5, 0x0a, 0x25, 0xaa, 0x00, 0x42, 0xbc, 0x22, 0x22, 0xaa, + 0x40, 0xe1, 0x13, 0xaa, 0x00, 0x42, 0x22, 0x00, 0x14, 0xaa, 0x40, 0xe1, + 0x27, 0xaa, 0x00, 0x42, 0x40, 0x06, 0x26, 0xaa, 0x40, 0xe1, 0x1a, 0xaa, + 0x00, 0x42, 0x22, 0x00, 0x1c, 0xaa, 0x00, 0x42, 0xbb, 0x09, 0x1b, 0xaa, + 0x40, 0xe1, 0x18, 0xaa, 0x00, 0xa7, 0x18, 0xa8, 0x06, 0x42, 0xd6, 0x13, + 0x17, 0xaa, 0x40, 0xe1, 0x11, 0xaa, 0x00, 0x42, 0x56, 0x19, 0x12, 0xaa, + 0x00, 0x42, 0xd6, 0x13, 0x10, 0xaa, 0x40, 0xe1, 0x0b, 0xaa, 0x00, 0x42, + 0xd6, 0x13, 0x0a, 0xaa, 0x40, 0xe1, 0x20, 0xaa, 0x00, 0x42, 0xd6, 0x13, + 0x1f, 0xaa, 0x40, 0xe1, 0x06, 0xaa, 0x00, 0x42, 0x22, 0x00, 0x07, 0xaa, + 0x40, 0xe1, 0x0e, 0xaa, 0x00, 0x42, 0x22, 0x00, 0x0f, 0xaa, 0x40, 0xe1, + 0x08, 0xaa, 0x00, 0x42, 0x22, 0x00, 0x09, 0xaa, 0x40, 0x42, 0x6d, 0x14, + 0x44, 0xaa, 0x00, 0xe7, 0x41, 0xaa, 0x00, 0xeb, 0x40, 0xaa, 0x00, 0xec, + 0x4a, 0xaa, 0x00, 0xee, 0x46, 0xaa, 0x80, 0x16, 0xf0, 0x47, 0xaa, 0x00, + 0xf2, 0x49, 0xaa, 0x00, 0x42, 0xee, 0x00, 0x4b, 0xaa, 0x00, 0xf4, 0x45, + 0xaa, 0x00, 0xf9, 0x48, 0xaa, 0x40, 0xe7, 0x42, 0xaa, 0x40, 0xe1, 0x15, + 0xaa, 0x00, 0x42, 0xf0, 0x10, 0x19, 0xaa, 0x00, 0x42, 0x22, 0x00, 0x16, + 0xaa, 0x40, 0xe1, 0x0c, 0xaa, 0x00, 0x42, 0x22, 0x00, 0x0d, 0xaa, 0x40, + 0xe1, 0x1d, 0xaa, 0x00, 0x42, 0x16, 0x00, 0x21, 0xaa, 0x00, 0x42, 0x22, + 0x00, 0x1e, 0xaa, 0x40, 0xe9, 0x04, 0xaa, 0x40, 0x45, 0x12, 0x0b, 0x58, + 0xaa, 0x00, 0xa6, 0x2e, 0x44, 0xcf, 0x2a, 0x59, 0xaa, 0x00, 0x43, 0x0e, + 0x0b, 0x51, 0xaa, 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, 0x50, + 0xaa, 0x40, 0x44, 0x25, 0x01, 0x53, 0xaa, 0x00, 0x42, 0x15, 0x02, 0x52, + 0xaa, 0x40, 0x44, 0xc9, 0x1d, 0x57, 0xaa, 0x00, 0x42, 0x01, 0x26, 0x56, + 0xaa, 0x40, 0x43, 0xd2, 0x05, 0x55, 0xaa, 0x00, 0x43, 0xf6, 0x06, 0x54, + 0xaa, 0x40, 0x06, 0xf5, 0x2c, 0x18, 0x42, 0x74, 0x00, 0x35, 0xaa, 0x00, + 0x42, 0x71, 0x00, 0x34, 0xaa, 0x00, 0x42, 0xa9, 0x01, 0x36, 0xaa, 0x00, + 0x42, 0xbc, 0x22, 0x33, 0xaa, 0x40, 0xe8, 0x4d, 0xaa, 0x00, 0xed, 0x4c, + 0xaa, 0x00, 0x42, 0x1d, 0x01, 0x43, 0xaa, 0x40, 0x47, 0x33, 0xcf, 0x32, + 0x11, 0x01, 0xa4, 0xf8, 0x02, 0x07, 0xec, 0x05, 0x74, 0x47, 0x0e, 0xd3, + 0x34, 0x11, 0x01, 0x46, 0xd2, 0xcb, 0x31, 0x11, 0x01, 0x4d, 0xa6, 0x34, + 0x43, 0x11, 0x01, 0xb3, 0x43, 0xb6, 0x01, 0xff, 0x45, 0xe4, 0x23, 0x33, + 0x11, 0x01, 0x0a, 0x41, 0x77, 0x01, 0xff, 0xe1, 0x27, 0x11, 0x81, 0x24, + 0xe5, 0x2c, 0x11, 0x81, 0x1b, 0xe9, 0x28, 0x11, 0x81, 0x12, 0xef, 0x2e, + 0x11, 0x81, 0x09, 0xf5, 0x2a, 0x11, 0xc1, 0x00, 0xf5, 0x2b, 0x11, 0x41, + 0xe9, 0x30, 0x11, 0x41, 0xe9, 0x29, 0x11, 0x41, 0xe9, 0x46, 0x11, 0x41, + 0xe1, 0x45, 0x11, 0x01, 0xe9, 0x2d, 0x11, 0x01, 0xf5, 0x2f, 0x11, 0x41, + 0x4b, 0xf9, 0x26, 0x40, 0x11, 0x01, 0x04, 0x5b, 0x03, 0x01, 0xff, 0x48, + 0x3c, 0x16, 0x01, 0x11, 0x01, 0x4b, 0xd7, 0x23, 0x00, 0x11, 0x01, 0x47, + 0xea, 0x4b, 0x02, 0x11, 0x41, 0x42, 0x80, 0x12, 0x03, 0x11, 0x01, 0xa2, + 0xeb, 0x01, 0xa3, 0xdc, 0x01, 0xa4, 0xbf, 0x01, 0xe5, 0x06, 0x11, 0x01, + 0xa7, 0xac, 0x01, 0x43, 0x3b, 0x41, 0x26, 0x11, 0x01, 0xe9, 0x04, 0x11, + 0x01, 0xaa, 0x93, 0x01, 0xab, 0x84, 0x01, 0xac, 0x76, 0x43, 0x2f, 0x58, + 0x1f, 0x11, 0x01, 0xae, 0x56, 0xb0, 0x48, 0x43, 0x8f, 0x95, 0x22, 0x11, + 0x01, 0x43, 0xce, 0xdf, 0x25, 0x11, 0x01, 0xb4, 0x1f, 0xf5, 0x05, 0x11, + 0x01, 0x43, 0x0e, 0xec, 0x47, 0x11, 0x01, 0x43, 0x11, 0x8c, 0x24, 0x11, + 0x01, 0xb9, 0x01, 0xff, 0x42, 0x80, 0x12, 0x21, 0x11, 0x01, 0x43, 0xb1, + 0xb9, 0x20, 0x11, 0x41, 0x42, 0x80, 0x12, 0x16, 0x11, 0x01, 0x43, 0x3b, + 0x41, 0x17, 0x11, 0x01, 0xb4, 0x01, 0xff, 0x42, 0x80, 0x12, 0x11, 0x11, + 0x01, 0x43, 0x3b, 0x41, 0x12, 0x11, 0x41, 0x42, 0x80, 0x12, 0x1b, 0x11, + 0x01, 0x43, 0x3b, 0x41, 0x1c, 0x11, 0x41, 0x42, 0x80, 0x12, 0x1a, 0x11, + 0x01, 0x43, 0x99, 0x57, 0x0b, 0x11, 0x01, 0x43, 0x72, 0x48, 0x15, 0x11, + 0x01, 0x43, 0xb1, 0xb9, 0x10, 0x11, 0x41, 0x42, 0x80, 0x12, 0x23, 0x11, + 0x01, 0x43, 0x3b, 0x41, 0x44, 0x11, 0x41, 0x42, 0x80, 0x12, 0x07, 0x11, + 0x01, 0x43, 0x3b, 0x41, 0x08, 0x11, 0x41, 0x42, 0x80, 0x12, 0x0e, 0x11, + 0x01, 0x43, 0x3b, 0x41, 0x0f, 0x11, 0x41, 0x42, 0x80, 0x12, 0x09, 0x11, + 0x01, 0x43, 0x3b, 0x41, 0x0a, 0x11, 0x41, 0x42, 0x80, 0x12, 0x18, 0x11, + 0x01, 0xa4, 0x06, 0x43, 0x3b, 0x41, 0x19, 0x11, 0x41, 0x42, 0x80, 0x12, + 0x13, 0x11, 0x01, 0x43, 0x3b, 0x41, 0x14, 0x11, 0x41, 0x42, 0x80, 0x12, + 0x0c, 0x11, 0x01, 0x43, 0x3b, 0x41, 0x0d, 0x11, 0x41, 0x42, 0x80, 0x12, + 0x1d, 0x11, 0x01, 0x43, 0x3b, 0x41, 0x1e, 0x11, 0x41, 0x44, 0x73, 0x20, + 0x41, 0x11, 0x01, 0x05, 0xf0, 0x06, 0x06, 0x4b, 0x09, 0xa1, 0x42, 0x11, + 0x41, 0x45, 0x12, 0x0b, 0x3e, 0x11, 0x01, 0xa6, 0x2e, 0x44, 0xcf, 0x2a, + 0x3f, 0x11, 0x01, 0x43, 0x0e, 0x0b, 0x37, 0x11, 0x01, 0xb3, 0x14, 0xb4, + 0x06, 0x44, 0x43, 0x1e, 0x36, 0x11, 0x41, 0x44, 0x25, 0x01, 0x39, 0x11, + 0x01, 0x42, 0x15, 0x02, 0x38, 0x11, 0x41, 0x44, 0xc9, 0x1d, 0x3d, 0x11, + 0x01, 0x42, 0x01, 0x26, 0x3c, 0x11, 0x41, 0x43, 0xd2, 0x05, 0x3b, 0x11, + 0x01, 0x43, 0xf6, 0x06, 0x3a, 0x11, 0x41, 0x42, 0x5f, 0x01, 0xd3, 0x26, + 0x00, 0xf2, 0x91, 0xfa, 0x41, 0x02, 0x00, 0x00, 0x32, 0x4a, 0x8f, 0xad, + 0x48, 0xf5, 0x01, 0x02, 0x11, 0x00, 0x06, 0x43, 0xbb, 0x23, 0xb3, 0x26, + 0x40, 0x45, 0x59, 0x03, 0xa2, 0x00, 0x00, 0x02, 0x88, 0x00, 0x01, 0xff, + 0x4c, 0x3b, 0x8b, 0x04, 0x21, 0x00, 0x05, 0xed, 0x07, 0x01, 0xff, 0x48, + 0x75, 0x8a, 0x4e, 0xfe, 0x00, 0x48, 0x82, 0x8a, 0x4a, 0xfe, 0x40, 0x45, + 0x59, 0x03, 0xb5, 0x20, 0x00, 0x43, 0x2c, 0x0e, 0xb8, 0x00, 0x40, 0x44, + 0x79, 0xd5, 0x35, 0xf3, 0x01, 0xa4, 0xfb, 0x22, 0xac, 0xec, 0x22, 0xad, + 0xd6, 0x22, 0xae, 0xf4, 0x05, 0xb0, 0xe5, 0x05, 0xb2, 0x9a, 0x03, 0x44, + 0xbc, 0x01, 0xeb, 0x26, 0x00, 0xf4, 0x08, 0xf4, 0x81, 0xf6, 0x02, 0xb5, + 0x01, 0xff, 0x10, 0x46, 0x61, 0x06, 0x49, 0xc0, 0x04, 0x21, 0x26, 0x40, + 0x4d, 0x80, 0x81, 0x6f, 0x05, 0x01, 0x07, 0xec, 0x05, 0x01, 0xff, 0xa1, + 0xcf, 0x02, 0x43, 0xc0, 0x09, 0x31, 0x05, 0x01, 0xa3, 0x98, 0x02, 0xa4, + 0xfa, 0x01, 0xa5, 0xed, 0x01, 0x43, 0xb4, 0xdb, 0x54, 0x05, 0x01, 0xa7, + 0xd8, 0x01, 0x44, 0x39, 0xf0, 0x46, 0x05, 0x01, 0xa9, 0xbd, 0x01, 0xaa, + 0xae, 0x01, 0xab, 0x9f, 0x01, 0xac, 0x90, 0x01, 0x43, 0x76, 0xe8, 0x4c, + 0x05, 0x01, 0x44, 0x89, 0xf1, 0x4e, 0x05, 0x01, 0x42, 0x10, 0x00, 0x52, + 0x05, 0x01, 0xb0, 0x70, 0x02, 0x43, 0x14, 0x64, 0x43, 0x89, 0x0e, 0x59, + 0x05, 0x01, 0xb3, 0x44, 0xb4, 0x30, 0x44, 0x01, 0xf3, 0x5b, 0x05, 0x01, + 0x44, 0x35, 0xf3, 0x40, 0x05, 0x01, 0xb9, 0x16, 0xba, 0x01, 0xff, 0x43, + 0x35, 0x35, 0x35, 0x05, 0x01, 0xa8, 0x01, 0xff, 0xe1, 0x3b, 0x05, 0x01, + 0x42, 0x62, 0x01, 0x37, 0x05, 0x41, 0x43, 0x93, 0x33, 0x61, 0x05, 0x01, + 0x43, 0xb5, 0x23, 0x3a, 0x05, 0x41, 0x42, 0xbb, 0x01, 0x38, 0x05, 0x01, + 0x43, 0x5b, 0xf4, 0x5c, 0x05, 0x01, 0x43, 0x31, 0x53, 0x53, 0x05, 0x41, + 0x43, 0x34, 0xf4, 0x5a, 0x05, 0x01, 0xa8, 0x01, 0xff, 0xe1, 0x3d, 0x05, + 0x81, 0x06, 0x42, 0x58, 0x69, 0x5d, 0x05, 0x41, 0xeb, 0x50, 0x05, 0x41, + 0xf2, 0x4d, 0x05, 0x01, 0xf9, 0x47, 0x05, 0x41, 0x42, 0x92, 0x01, 0x57, + 0x05, 0x01, 0x43, 0x5b, 0xf4, 0x62, 0x05, 0x41, 0x42, 0x1a, 0x00, 0x3e, + 0x05, 0x01, 0x43, 0xec, 0x52, 0x45, 0x05, 0x41, 0x42, 0x17, 0x00, 0x44, + 0x05, 0x01, 0x42, 0x34, 0x3f, 0x63, 0x05, 0x41, 0x43, 0x5d, 0x80, 0x51, + 0x05, 0x01, 0x43, 0x52, 0xf4, 0x43, 0x05, 0x41, 0x43, 0xa6, 0x35, 0x3f, + 0x05, 0x01, 0x42, 0x9f, 0x05, 0x3c, 0x05, 0x01, 0x42, 0xa7, 0x01, 0x5e, + 0x05, 0x41, 0x44, 0x35, 0xf0, 0x58, 0x05, 0x01, 0x42, 0x29, 0x02, 0x32, + 0x05, 0x41, 0xe2, 0x34, 0x05, 0x01, 0x42, 0x03, 0x1d, 0x36, 0x05, 0x41, + 0x42, 0x8a, 0x00, 0x33, 0x05, 0x01, 0x43, 0xb8, 0x35, 0x41, 0x05, 0x01, + 0xba, 0x01, 0xff, 0x42, 0xed, 0x10, 0x55, 0x05, 0x01, 0x43, 0x31, 0x53, + 0x4f, 0x05, 0x41, 0xa1, 0x22, 0xa8, 0x0d, 0x02, 0xbc, 0x22, 0x01, 0xff, + 0xf7, 0x5f, 0x05, 0x01, 0xf9, 0x4b, 0x05, 0x41, 0xe1, 0x39, 0x05, 0x81, + 0x0a, 0xe9, 0x4a, 0x05, 0x01, 0x42, 0x58, 0x69, 0x49, 0x05, 0x41, 0xf4, + 0x56, 0x05, 0x41, 0xf2, 0x42, 0x05, 0x01, 0x42, 0x03, 0x1d, 0x60, 0x05, + 0x41, 0x42, 0xb8, 0x04, 0x30, 0x05, 0x01, 0x42, 0x0c, 0x00, 0x48, 0x05, + 0x41, 0x45, 0x0b, 0x08, 0x31, 0xf4, 0xc1, 0x00, 0x06, 0x50, 0x00, 0x01, + 0xff, 0x4c, 0xaf, 0x95, 0x39, 0xf6, 0x01, 0x49, 0x6a, 0xc1, 0x3c, 0xf6, + 0x41, 0x48, 0x90, 0xc2, 0xd0, 0x26, 0x00, 0x02, 0x06, 0x00, 0xaa, 0x02, + 0xa5, 0x96, 0x02, 0x0b, 0x4c, 0x8d, 0x29, 0xaf, 0x1d, 0xb0, 0x0f, 0xb2, + 0x01, 0xff, 0x4b, 0x29, 0x88, 0x0d, 0x00, 0x00, 0x42, 0x1b, 0x05, 0x55, + 0xf9, 0x41, 0x49, 0xe6, 0xb4, 0x8f, 0xf3, 0x01, 0x49, 0x73, 0xb8, 0x9a, + 0xfa, 0x41, 0xee, 0xc7, 0x02, 0x00, 0x4a, 0x1b, 0xb3, 0xa0, 0xf3, 0x41, + 0xe1, 0xa0, 0x02, 0x81, 0xdf, 0x01, 0xe2, 0xa9, 0x02, 0x01, 0x02, 0xe7, + 0x06, 0xca, 0x01, 0xe4, 0xa2, 0x02, 0x81, 0xc0, 0x01, 0xe5, 0xba, 0x02, + 0x81, 0xb6, 0x01, 0xe7, 0xc0, 0x02, 0x81, 0xac, 0x01, 0xe9, 0xb9, 0x02, + 0x81, 0xa2, 0x01, 0xeb, 0xbc, 0x02, 0x81, 0x98, 0x01, 0xec, 0xa3, 0x02, + 0x81, 0x89, 0x01, 0xed, 0xaa, 0x02, 0x81, 0x73, 0xee, 0xb5, 0x02, 0x81, + 0x62, 0xef, 0xab, 0x02, 0x01, 0xf0, 0xb7, 0x02, 0x81, 0x55, 0xf1, 0xa8, + 0x02, 0x01, 0xf2, 0xa5, 0x02, 0x81, 0x48, 0xf3, 0xb0, 0x02, 0x81, 0x2d, + 0xf4, 0xad, 0x02, 0x81, 0x1f, 0xf5, 0xb2, 0x02, 0x81, 0x04, 0xf8, 0xb4, + 0x02, 0x41, 0xf5, 0xbf, 0x02, 0xc1, 0x00, 0xf5, 0xa4, 0x02, 0xc1, 0x00, + 0xd2, 0xc8, 0x02, 0x01, 0xd3, 0xd0, 0x02, 0x01, 0xf5, 0xbb, 0x02, 0x41, + 0xf4, 0xc7, 0x02, 0xc1, 0x00, 0xd2, 0xb6, 0x02, 0x41, 0xe8, 0xae, 0x02, + 0x81, 0x0d, 0xf3, 0xb8, 0x02, 0x01, 0xf4, 0xc2, 0x02, 0xc1, 0x00, 0xd2, + 0xc3, 0x02, 0x41, 0xd2, 0xaf, 0x02, 0x41, 0xf2, 0xc9, 0x02, 0x41, 0xd2, + 0xa1, 0x02, 0x41, 0xe4, 0xbe, 0x02, 0x01, 0xe7, 0xc4, 0x02, 0x01, 0xee, + 0xb3, 0x02, 0x41, 0xe2, 0xca, 0x02, 0xc1, 0x00, 0xd2, 0xcb, 0x02, 0x01, + 0xd3, 0xcc, 0x02, 0x01, 0xd4, 0xcd, 0x02, 0x41, 0xe4, 0xa6, 0x02, 0xc1, + 0x00, 0xd2, 0xce, 0x02, 0x41, 0xd2, 0xbd, 0x02, 0x41, 0xe9, 0xc5, 0x02, + 0x41, 0xd2, 0xc1, 0x02, 0x41, 0xd2, 0xcf, 0x02, 0x41, 0xd2, 0xac, 0x02, + 0x41, 0x42, 0x59, 0xe2, 0xb1, 0x02, 0x01, 0x42, 0xf6, 0xf4, 0xc6, 0x02, + 0x41, 0xd2, 0xa7, 0x02, 0x41, 0x43, 0xf3, 0x01, 0x05, 0x21, 0x00, 0xf4, + 0x38, 0x20, 0xc0, 0x00, 0x50, 0x26, 0x60, 0x41, 0x20, 0x40, 0x48, 0x20, + 0xc6, 0xc3, 0xf5, 0x01, 0x45, 0x8f, 0x13, 0xc7, 0xf4, 0xc1, 0x00, 0x49, + 0x4d, 0xb4, 0xc2, 0xf5, 0x41, 0x46, 0x3a, 0xdd, 0x3f, 0x2e, 0x00, 0x46, + 0x8c, 0xdf, 0x51, 0x26, 0x40, 0x10, 0xc6, 0x60, 0x39, 0x02, 0x73, 0x02, + 0x18, 0xa4, 0x0c, 0x48, 0x98, 0xc8, 0x6b, 0xf9, 0x01, 0x42, 0x60, 0x51, + 0xf6, 0xf6, 0x41, 0x42, 0x68, 0x00, 0x6f, 0xf5, 0x01, 0xf9, 0x6c, 0xf3, + 0x41, 0xec, 0x18, 0x00, 0x80, 0x04, 0xf2, 0x4b, 0x26, 0x40, 0x80, 0x06, + 0x48, 0xa0, 0xc7, 0xd9, 0xf5, 0x41, 0x49, 0x91, 0x20, 0x94, 0x00, 0x00, + 0x43, 0x9a, 0x1b, 0x7f, 0x00, 0x4e, 0xe1, 0x0a, 0x14, 0x80, 0xf0, 0x1b, + 0xa2, 0x89, 0x1b, 0xe3, 0xa1, 0x14, 0x80, 0xe0, 0x13, 0xe5, 0x01, 0x14, + 0x80, 0xd0, 0x13, 0xe6, 0x5d, 0x15, 0x80, 0xb1, 0x12, 0x4c, 0xce, 0x28, + 0x1e, 0x14, 0x00, 0xa8, 0x9e, 0x12, 0xe9, 0x03, 0x14, 0x80, 0x90, 0x12, + 0xeb, 0x83, 0x14, 0x80, 0xba, 0x11, 0xec, 0xea, 0x14, 0x80, 0xca, 0x10, + 0xed, 0xbb, 0x14, 0x80, 0xe1, 0x0f, 0xee, 0xd0, 0x14, 0x80, 0xd6, 0x0c, + 0xef, 0x05, 0x14, 0x80, 0x89, 0x0c, 0xf0, 0x49, 0x14, 0x80, 0xb1, 0x0b, + 0xf1, 0x85, 0x15, 0x80, 0x87, 0x0b, 0xf2, 0x50, 0x15, 0x80, 0xa7, 0x0a, + 0xf3, 0x05, 0x15, 0x80, 0xf5, 0x07, 0xf4, 0x66, 0x14, 0x80, 0xe0, 0x05, + 0xb7, 0x9f, 0x01, 0xf9, 0x3e, 0x15, 0xc0, 0x00, 0x06, 0x45, 0x9d, 0x4e, + 0xe1, 0x2d, 0x15, 0x80, 0x3c, 0xe5, 0x26, 0x15, 0x00, 0xe9, 0x28, 0x15, + 0x80, 0x2f, 0xef, 0x2a, 0x15, 0x80, 0x22, 0xb7, 0x01, 0xff, 0xe1, 0x39, + 0x15, 0x80, 0x16, 0xe5, 0x2f, 0x15, 0x00, 0xe9, 0x31, 0x15, 0x80, 0x09, + 0xef, 0x35, 0x15, 0xc0, 0x00, 0xef, 0x37, 0x15, 0x40, 0xe9, 0x33, 0x15, + 0x40, 0xe1, 0x3b, 0x15, 0x40, 0xef, 0x2b, 0x15, 0x00, 0xf9, 0xc3, 0x18, + 0x40, 0xe9, 0x29, 0x15, 0x40, 0xe1, 0x2e, 0x15, 0x80, 0x04, 0xf9, 0xc4, + 0x18, 0x40, 0xe9, 0x27, 0x15, 0x40, 0x43, 0x5a, 0xc5, 0x8f, 0x14, 0x00, + 0x43, 0x32, 0xe3, 0x71, 0x14, 0x00, 0x43, 0xd0, 0x1c, 0xd9, 0x14, 0x00, + 0x43, 0xaf, 0x1b, 0xa9, 0x14, 0x00, 0x43, 0x7c, 0x16, 0xc6, 0x14, 0x00, + 0x42, 0xcd, 0x02, 0x07, 0x14, 0x00, 0xb0, 0x16, 0x43, 0x41, 0xe3, 0xf3, + 0x14, 0x00, 0x43, 0xf4, 0x2f, 0x52, 0x14, 0x00, 0xf7, 0x1d, 0x14, 0x00, + 0x43, 0x02, 0x54, 0x2c, 0x15, 0x40, 0x42, 0xcd, 0x02, 0x35, 0x14, 0x00, + 0x43, 0x11, 0x8c, 0x48, 0x14, 0x40, 0xe1, 0x17, 0x14, 0x80, 0xb0, 0x04, + 0xe5, 0x0c, 0x14, 0x80, 0x59, 0xe9, 0x0e, 0x14, 0x80, 0x50, 0xef, 0x12, + 0x14, 0xc0, 0x00, 0xef, 0x14, 0x14, 0xc0, 0x00, 0x08, 0x38, 0xc5, 0x01, + 0xff, 0x48, 0x28, 0xc6, 0x7e, 0x16, 0x00, 0x42, 0x53, 0x00, 0x9f, 0x15, + 0xc0, 0x00, 0xe1, 0x9e, 0x15, 0x00, 0xe5, 0x9b, 0x15, 0x00, 0xe9, 0x9c, + 0x15, 0x00, 0xef, 0x9d, 0x15, 0x00, 0xb7, 0x01, 0xff, 0xe1, 0x7c, 0x16, + 0x80, 0x18, 0x42, 0x27, 0x01, 0x77, 0x16, 0x00, 0xe9, 0x78, 0x16, 0x80, + 0x09, 0xef, 0x7a, 0x16, 0xc0, 0x00, 0xef, 0x7b, 0x16, 0x40, 0xe9, 0x79, + 0x16, 0x40, 0xe1, 0x7d, 0x16, 0x40, 0xe9, 0x10, 0x14, 0x40, 0x02, 0x60, + 0x01, 0x01, 0xff, 0x06, 0x45, 0x9d, 0x06, 0x45, 0xab, 0xc3, 0xdd, 0x18, + 0x40, 0x02, 0x71, 0xef, 0x9f, 0x03, 0x44, 0xd9, 0xef, 0x5c, 0x15, 0x00, + 0x02, 0x3c, 0x0b, 0xf5, 0x02, 0xec, 0xeb, 0x14, 0x80, 0xb7, 0x02, 0xed, + 0xbc, 0x14, 0x80, 0x8f, 0x02, 0x02, 0xa8, 0x01, 0xfd, 0x01, 0xf0, 0x4a, + 0x14, 0x80, 0xd5, 0x01, 0xf2, 0x51, 0x15, 0x80, 0xb9, 0x01, 0xb3, 0x72, + 0xb4, 0x48, 0xb7, 0x27, 0xf9, 0x40, 0x15, 0xc0, 0x00, 0xb7, 0x01, 0xff, + 0xe1, 0x3a, 0x15, 0x80, 0x16, 0xe5, 0x30, 0x15, 0x00, 0xe9, 0x32, 0x15, + 0x80, 0x09, 0xef, 0x36, 0x15, 0xc0, 0x00, 0xef, 0x38, 0x15, 0x40, 0xe9, + 0x34, 0x15, 0x40, 0xe1, 0x3c, 0x15, 0x40, 0xe1, 0x18, 0x14, 0x80, 0x16, + 0xe5, 0x0d, 0x14, 0x00, 0xe9, 0x0f, 0x14, 0x80, 0x09, 0xef, 0x13, 0x14, + 0xc0, 0x00, 0xef, 0x15, 0x14, 0x40, 0xe9, 0x11, 0x14, 0x40, 0xe1, 0x1a, + 0x14, 0x40, 0x44, 0x69, 0xf0, 0x69, 0x15, 0x00, 0xb7, 0x01, 0xff, 0xe1, + 0x62, 0x14, 0x80, 0x16, 0xe5, 0x58, 0x14, 0x00, 0xe9, 0x5a, 0x14, 0x80, + 0x09, 0xef, 0x5e, 0x14, 0xc0, 0x00, 0xef, 0x60, 0x14, 0x40, 0xe9, 0x5c, + 0x14, 0x40, 0xe1, 0x64, 0x14, 0x40, 0x02, 0xbd, 0x1a, 0x22, 0xb7, 0x01, + 0xff, 0xe1, 0x01, 0x15, 0x80, 0x16, 0xe5, 0xf7, 0x14, 0x00, 0xe9, 0xf9, + 0x14, 0x80, 0x09, 0xef, 0xfd, 0x14, 0xc0, 0x00, 0xef, 0xff, 0x14, 0x40, + 0xe9, 0xfb, 0x14, 0x40, 0xe1, 0x03, 0x15, 0x40, 0xe1, 0x22, 0x15, 0x80, + 0x16, 0xe5, 0x18, 0x15, 0x00, 0xe9, 0x1a, 0x15, 0x80, 0x09, 0xef, 0x1e, + 0x15, 0xc0, 0x00, 0xef, 0x20, 0x15, 0x40, 0xe9, 0x1c, 0x15, 0x40, 0xe1, + 0x24, 0x15, 0x40, 0xe1, 0x8d, 0x15, 0x00, 0xe5, 0x8a, 0x15, 0x00, 0xe9, + 0x8b, 0x15, 0x00, 0xef, 0x8c, 0x15, 0x00, 0x43, 0x11, 0x8c, 0x4f, 0x15, + 0x40, 0xb7, 0x01, 0xff, 0xe1, 0x45, 0x14, 0x80, 0x16, 0xe5, 0x3b, 0x14, + 0x00, 0xe9, 0x3d, 0x14, 0x80, 0x09, 0xef, 0x41, 0x14, 0xc0, 0x00, 0xef, + 0x43, 0x14, 0x40, 0xe9, 0x3f, 0x14, 0x40, 0xe1, 0x47, 0x14, 0x40, 0xe1, + 0xcc, 0x14, 0x80, 0x04, 0xe5, 0xca, 0x14, 0x40, 0xe1, 0xce, 0x14, 0x40, + 0xb7, 0x01, 0xff, 0xe1, 0xb7, 0x14, 0x80, 0x16, 0xe5, 0xad, 0x14, 0x00, + 0xe9, 0xaf, 0x14, 0x80, 0x09, 0xef, 0xb3, 0x14, 0xc0, 0x00, 0xef, 0xb5, + 0x14, 0x40, 0xe9, 0xb1, 0x14, 0x40, 0xe1, 0xb9, 0x14, 0x40, 0xe1, 0x4d, + 0x15, 0x80, 0x2f, 0xe5, 0x44, 0x15, 0x00, 0xef, 0x4a, 0x15, 0x80, 0x22, + 0xb7, 0x01, 0xff, 0xe1, 0xe7, 0x14, 0x80, 0x16, 0xe5, 0xdd, 0x14, 0x00, + 0xe9, 0xdf, 0x14, 0x80, 0x09, 0xef, 0xe3, 0x14, 0xc0, 0x00, 0xef, 0xe5, + 0x14, 0x40, 0xe9, 0xe1, 0x14, 0x40, 0xe1, 0xe9, 0x14, 0x40, 0xef, 0xe1, + 0x18, 0x40, 0xe1, 0xe2, 0x18, 0x40, 0xe1, 0x7f, 0x14, 0x80, 0x16, 0xe5, + 0x75, 0x14, 0x00, 0xe9, 0x77, 0x14, 0x80, 0x09, 0xef, 0x7b, 0x14, 0xc0, + 0x00, 0xef, 0x7d, 0x14, 0x40, 0xe9, 0x79, 0x14, 0x40, 0xe1, 0x81, 0x14, + 0x40, 0xe1, 0x9d, 0x14, 0x80, 0x16, 0xe5, 0x93, 0x14, 0x00, 0xe9, 0x95, + 0x14, 0x80, 0x09, 0xef, 0x99, 0x14, 0xc0, 0x00, 0xef, 0x9b, 0x14, 0x40, + 0xe9, 0x97, 0x14, 0x40, 0xe1, 0x9f, 0x14, 0x40, 0xe1, 0x19, 0x14, 0x00, + 0xf9, 0xb3, 0x18, 0x40, 0xe1, 0x55, 0x14, 0x80, 0xfc, 0x01, 0xe5, 0x4c, + 0x14, 0x00, 0xe8, 0x6a, 0x15, 0x80, 0x9d, 0x01, 0xe9, 0x4e, 0x14, 0x80, + 0x93, 0x01, 0x02, 0x2a, 0x09, 0x74, 0xef, 0x50, 0x14, 0x80, 0x6b, 0xb4, + 0x34, 0xb7, 0x13, 0xb9, 0x01, 0xff, 0xe1, 0x73, 0x15, 0x00, 0xe5, 0x70, + 0x15, 0x00, 0xe9, 0x71, 0x15, 0x00, 0xef, 0x72, 0x15, 0x40, 0xe1, 0x61, + 0x14, 0x80, 0x16, 0xe5, 0x57, 0x14, 0x00, 0xe9, 0x59, 0x14, 0x80, 0x09, + 0xef, 0x5d, 0x14, 0xc0, 0x00, 0xef, 0x5f, 0x14, 0x40, 0xe9, 0x5b, 0x14, + 0x40, 0xe1, 0x63, 0x14, 0x40, 0xe1, 0x6a, 0x14, 0x00, 0xe5, 0x67, 0x14, + 0x00, 0xe8, 0x6f, 0x15, 0x80, 0x08, 0xe9, 0x68, 0x14, 0x00, 0xef, 0x69, + 0x14, 0x40, 0xe1, 0x6e, 0x15, 0x80, 0x17, 0xe5, 0x6b, 0x15, 0x00, 0xe9, + 0x6c, 0x15, 0x00, 0xef, 0x6d, 0x15, 0x80, 0x06, 0x42, 0x15, 0x01, 0xe5, + 0x18, 0x40, 0xef, 0xe6, 0x18, 0x40, 0xe1, 0xe7, 0x18, 0x40, 0xef, 0x51, + 0x14, 0x40, 0xe1, 0x89, 0x15, 0x00, 0xe5, 0x86, 0x15, 0x00, 0xe9, 0x87, + 0x15, 0x00, 0xef, 0x88, 0x15, 0x80, 0x06, 0x42, 0x15, 0x01, 0xe8, 0x18, + 0x40, 0xef, 0xe9, 0x18, 0x40, 0xe9, 0x4f, 0x14, 0x40, 0x48, 0xb8, 0xc2, + 0xae, 0x15, 0x80, 0x2f, 0xe1, 0x66, 0x15, 0x80, 0x26, 0xe5, 0x5e, 0x15, + 0x00, 0xe9, 0x60, 0x15, 0x80, 0x19, 0xef, 0x64, 0x15, 0x80, 0x10, 0xb7, + 0x01, 0xff, 0xe1, 0xe4, 0x18, 0x80, 0x04, 0xe5, 0xe3, 0x18, 0x40, 0xe1, + 0x68, 0x15, 0x40, 0xef, 0x65, 0x15, 0x40, 0xe9, 0x62, 0x15, 0x40, 0xe1, + 0x67, 0x15, 0x40, 0xe1, 0xac, 0x15, 0x80, 0x16, 0xe5, 0xa7, 0x15, 0x00, + 0xe9, 0xa8, 0x15, 0x80, 0x09, 0xef, 0xaa, 0x15, 0xc0, 0x00, 0xef, 0xab, + 0x15, 0x40, 0xe9, 0xa9, 0x15, 0x40, 0xe1, 0xad, 0x15, 0x40, 0xe1, 0x56, + 0x14, 0x80, 0x04, 0xf9, 0xb7, 0x18, 0x40, 0xe9, 0x4d, 0x14, 0x40, 0xe1, + 0xf4, 0x14, 0x80, 0xbe, 0x01, 0xe5, 0xed, 0x14, 0x00, 0xe8, 0x25, 0x15, + 0x80, 0x68, 0xe9, 0xef, 0x14, 0x80, 0x5f, 0xef, 0xf1, 0x14, 0x80, 0x36, + 0xb0, 0x24, 0xf7, 0x07, 0x15, 0xc0, 0x00, 0xe1, 0x00, 0x15, 0x80, 0x16, + 0xe5, 0xf6, 0x14, 0x00, 0xe9, 0xf8, 0x14, 0x80, 0x09, 0xef, 0xfc, 0x14, + 0xc0, 0x00, 0xef, 0xfe, 0x14, 0x40, 0xe9, 0xfa, 0x14, 0x40, 0xe1, 0x02, + 0x15, 0x40, 0xe1, 0xbf, 0x1a, 0x01, 0xe5, 0xbc, 0x1a, 0x01, 0xe9, 0xbd, + 0x1a, 0x01, 0xef, 0xbe, 0x1a, 0x41, 0xef, 0xf2, 0x14, 0x00, 0x0c, 0xab, + 0x96, 0x04, 0xf9, 0xbe, 0x18, 0x40, 0x42, 0x18, 0x0a, 0x88, 0x14, 0x00, + 0x42, 0x4e, 0x00, 0x85, 0x14, 0x00, 0x42, 0xda, 0x2c, 0x86, 0x14, 0x00, + 0x42, 0xfd, 0x28, 0x87, 0x14, 0x40, 0xe9, 0xf0, 0x14, 0x40, 0xe1, 0x15, + 0x15, 0x80, 0x40, 0xe5, 0x10, 0x15, 0x00, 0xe9, 0x11, 0x15, 0x80, 0x33, + 0xef, 0x13, 0x15, 0x80, 0x26, 0xb7, 0x01, 0xff, 0xe1, 0x21, 0x15, 0x80, + 0x1a, 0xe5, 0x17, 0x15, 0x00, 0xe9, 0x19, 0x15, 0x80, 0x0d, 0xef, 0x1d, + 0x15, 0xc0, 0x00, 0xef, 0x1f, 0x15, 0x00, 0xf9, 0xc2, 0x18, 0x40, 0xe9, + 0x1b, 0x15, 0x40, 0xe1, 0x23, 0x15, 0x40, 0xef, 0x14, 0x15, 0x00, 0xf9, + 0xc0, 0x18, 0x40, 0xe9, 0x12, 0x15, 0x40, 0xe1, 0x16, 0x15, 0x00, 0xf9, + 0xc1, 0x18, 0x40, 0xe1, 0xf5, 0x14, 0x80, 0x5f, 0xf9, 0xbf, 0x18, 0xc0, + 0x00, 0x04, 0xa9, 0xf0, 0x01, 0xff, 0xa8, 0x3e, 0xaa, 0x2f, 0xed, 0xbf, + 0x14, 0x00, 0x02, 0xa4, 0x02, 0x0c, 0x42, 0x53, 0x00, 0xa2, 0x14, 0x00, + 0x42, 0x7e, 0x1a, 0x41, 0x15, 0x40, 0xe1, 0x9a, 0x15, 0x00, 0xe5, 0x97, + 0x15, 0x00, 0xe9, 0x98, 0x15, 0x00, 0xef, 0x99, 0x15, 0x80, 0x06, 0x42, + 0x15, 0x01, 0xea, 0x18, 0x40, 0xef, 0xeb, 0x18, 0x40, 0xe9, 0x1a, 0x16, + 0x00, 0xf5, 0x15, 0x16, 0xc0, 0x00, 0xf5, 0xf1, 0x18, 0x40, 0xe1, 0xc3, + 0x15, 0x00, 0xe5, 0xc0, 0x15, 0x00, 0xe9, 0xc1, 0x15, 0x00, 0xef, 0xc2, + 0x15, 0xc0, 0x00, 0xef, 0xec, 0x18, 0x40, 0xe9, 0xee, 0x14, 0x40, 0x07, + 0xb9, 0xcd, 0x4c, 0xe1, 0x4b, 0x15, 0x80, 0x3a, 0xe5, 0x42, 0x15, 0x00, + 0xe9, 0x46, 0x15, 0x80, 0x2d, 0xef, 0x48, 0x15, 0x80, 0x24, 0xb7, 0x01, + 0xff, 0xe1, 0xd3, 0x18, 0x80, 0x18, 0x42, 0x27, 0x01, 0xce, 0x18, 0x00, + 0xe9, 0xcf, 0x18, 0x80, 0x09, 0xef, 0xd1, 0x18, 0xc0, 0x00, 0xef, 0xd2, + 0x18, 0x40, 0xe9, 0xd0, 0x18, 0x40, 0xe1, 0x4e, 0x15, 0x40, 0xef, 0x49, + 0x15, 0x40, 0xe9, 0x47, 0x15, 0x40, 0xe1, 0x4c, 0x15, 0x80, 0x04, 0xf9, + 0xc5, 0x18, 0x40, 0xe9, 0x45, 0x15, 0x40, 0xe5, 0x43, 0x15, 0x00, 0x42, + 0x15, 0x01, 0xe0, 0x18, 0x40, 0xe1, 0x83, 0x15, 0x80, 0x12, 0xe9, 0x7f, + 0x15, 0x80, 0x09, 0xef, 0x81, 0x15, 0xc0, 0x00, 0xef, 0x82, 0x15, 0x40, + 0xe9, 0x80, 0x15, 0x40, 0xe1, 0x84, 0x15, 0x80, 0x04, 0xe9, 0x6f, 0x16, + 0x40, 0xe9, 0x7e, 0x15, 0x40, 0xe1, 0x38, 0x14, 0x80, 0x40, 0xe5, 0x2f, + 0x14, 0x00, 0xe9, 0x31, 0x14, 0x80, 0x33, 0xef, 0x33, 0x14, 0x80, 0x26, + 0xb7, 0x01, 0xff, 0xe1, 0x44, 0x14, 0x80, 0x1a, 0xe5, 0x3a, 0x14, 0x00, + 0xe9, 0x3c, 0x14, 0x80, 0x0d, 0xef, 0x40, 0x14, 0xc0, 0x00, 0xef, 0x42, + 0x14, 0x00, 0xf9, 0xb6, 0x18, 0x40, 0xe9, 0x3e, 0x14, 0x40, 0xe1, 0x46, + 0x14, 0x40, 0xef, 0x34, 0x14, 0x00, 0xf9, 0xb4, 0x18, 0x40, 0xe9, 0x32, + 0x14, 0x40, 0xe1, 0x39, 0x14, 0x80, 0x04, 0xf9, 0xb5, 0x18, 0x40, 0xe9, + 0x30, 0x14, 0x40, 0x07, 0x43, 0xd2, 0x0c, 0xee, 0x2d, 0x14, 0x00, 0xef, + 0x06, 0x14, 0x00, 0xf9, 0xb0, 0x18, 0x40, 0xe3, 0xd7, 0x18, 0x00, 0xeb, + 0xd6, 0x18, 0x00, 0xed, 0xd8, 0x18, 0x00, 0xee, 0xd9, 0x18, 0x80, 0x11, + 0xf0, 0xd4, 0x18, 0x00, 0xf3, 0xda, 0x18, 0x80, 0x04, 0xf4, 0xd5, 0x18, + 0x40, 0xe8, 0xdb, 0x18, 0x40, 0xb7, 0x01, 0xff, 0xe9, 0xc7, 0x18, 0x80, + 0x09, 0xef, 0xcb, 0x18, 0xc0, 0x00, 0xef, 0xcd, 0x18, 0x40, 0xe9, 0xc9, + 0x18, 0x40, 0x08, 0xb8, 0xc2, 0xf3, 0x02, 0xe1, 0xc7, 0x14, 0x80, 0xbd, + 0x01, 0xe5, 0xc0, 0x14, 0x00, 0xe7, 0x95, 0x15, 0x80, 0x8f, 0x01, 0xe8, + 0xd2, 0x14, 0x00, 0xe9, 0xc2, 0x14, 0x80, 0x81, 0x01, 0x42, 0x1d, 0x01, + 0x96, 0x15, 0x80, 0x5f, 0xef, 0xc4, 0x14, 0x80, 0x52, 0x04, 0xd9, 0xf2, + 0x22, 0xb7, 0x01, 0xff, 0xe1, 0xcb, 0x14, 0x80, 0x16, 0xe5, 0xc9, 0x14, + 0x00, 0xe9, 0xc6, 0x18, 0x80, 0x09, 0xef, 0xca, 0x18, 0xc0, 0x00, 0xef, + 0xcc, 0x18, 0x40, 0xe9, 0xc8, 0x18, 0x40, 0xe1, 0xcd, 0x14, 0x40, 0x44, + 0x85, 0xf0, 0x7b, 0x15, 0x80, 0x06, 0x44, 0xfe, 0x50, 0x7c, 0x15, 0x40, + 0xe1, 0x79, 0x15, 0x80, 0x16, 0xe5, 0x74, 0x15, 0x00, 0xe9, 0x75, 0x15, + 0x80, 0x09, 0xef, 0x77, 0x15, 0xc0, 0x00, 0xef, 0x78, 0x15, 0x40, 0xe9, + 0x76, 0x15, 0x40, 0xe1, 0x7a, 0x15, 0x40, 0xef, 0xc5, 0x14, 0x00, 0xf9, + 0xbb, 0x18, 0x40, 0xe1, 0x75, 0x16, 0x80, 0x12, 0xe9, 0x71, 0x16, 0x80, + 0x09, 0xef, 0x73, 0x16, 0xc0, 0x00, 0xef, 0x74, 0x16, 0x40, 0xe9, 0x72, + 0x16, 0x40, 0xe1, 0x76, 0x16, 0x40, 0xe9, 0xc3, 0x14, 0x40, 0xe1, 0x93, + 0x15, 0x80, 0x12, 0xe9, 0x8f, 0x15, 0x80, 0x09, 0xef, 0x91, 0x15, 0xc0, + 0x00, 0xef, 0x92, 0x15, 0x40, 0xe9, 0x90, 0x15, 0x40, 0xe1, 0x94, 0x15, + 0x80, 0x04, 0xe9, 0x70, 0x16, 0x40, 0xe9, 0x8e, 0x15, 0x40, 0xe1, 0xc8, + 0x14, 0x80, 0xa6, 0x01, 0x06, 0xec, 0xdf, 0x45, 0x07, 0x9c, 0xd6, 0x04, + 0xf9, 0xbc, 0x18, 0x40, 0xa8, 0x20, 0x03, 0x7f, 0x5d, 0x01, 0xff, 0xe1, + 0xba, 0x1a, 0x81, 0x12, 0xe9, 0xb6, 0x1a, 0x81, 0x09, 0xef, 0xb8, 0x1a, + 0xc1, 0x00, 0xef, 0xb9, 0x1a, 0x41, 0xe9, 0xb7, 0x1a, 0x41, 0xe1, 0xbb, + 0x1a, 0x41, 0xe1, 0xb4, 0x1a, 0x81, 0x12, 0xe9, 0xb0, 0x1a, 0x81, 0x09, + 0xef, 0xb2, 0x1a, 0xc1, 0x00, 0xef, 0xb3, 0x1a, 0x41, 0xe9, 0xb1, 0x1a, + 0x41, 0xe1, 0xb5, 0x1a, 0x41, 0x44, 0x71, 0xef, 0xa0, 0x14, 0x00, 0x44, + 0xf5, 0xf0, 0x82, 0x14, 0x00, 0x44, 0x51, 0xf1, 0xba, 0x14, 0x00, 0x44, + 0xad, 0xf1, 0xcf, 0x14, 0x00, 0xb3, 0x1a, 0x44, 0x30, 0xec, 0x65, 0x14, + 0x00, 0xb7, 0x06, 0x44, 0x51, 0xf3, 0x3d, 0x15, 0x40, 0x42, 0x80, 0x12, + 0x1b, 0x14, 0x00, 0x42, 0xcd, 0x02, 0x16, 0x14, 0x40, 0x42, 0x03, 0x20, + 0x0b, 0x15, 0x00, 0x43, 0x71, 0xef, 0x0f, 0x15, 0x00, 0x42, 0x3c, 0x0b, + 0x0a, 0x15, 0x80, 0x12, 0x43, 0x51, 0x02, 0x0c, 0x15, 0x00, 0x43, 0xed, + 0x01, 0x0d, 0x15, 0x00, 0x43, 0x11, 0x8c, 0x04, 0x15, 0x40, 0xe1, 0x0e, + 0x15, 0x40, 0xe9, 0xc1, 0x14, 0x40, 0xe5, 0x5f, 0x15, 0x00, 0xe9, 0x61, + 0x15, 0xc0, 0x00, 0xe9, 0x63, 0x15, 0x40, 0xe1, 0xaa, 0x14, 0x80, 0x51, + 0xe5, 0xa3, 0x14, 0x80, 0x3f, 0xe8, 0xbd, 0x14, 0x00, 0xe9, 0xa5, 0x14, + 0x80, 0x32, 0xef, 0xa7, 0x14, 0x80, 0x22, 0xb7, 0x01, 0xff, 0xe1, 0xb6, + 0x14, 0x80, 0x16, 0xe5, 0xac, 0x14, 0x00, 0xe9, 0xae, 0x14, 0x80, 0x09, + 0xef, 0xb2, 0x14, 0xc0, 0x00, 0xef, 0xb4, 0x14, 0x40, 0xe9, 0xb0, 0x14, + 0x40, 0xe1, 0xb8, 0x14, 0x40, 0xef, 0xa8, 0x14, 0xc0, 0x00, 0x4a, 0xd7, + 0xb0, 0x09, 0x15, 0x40, 0xe9, 0xa6, 0x14, 0x40, 0x05, 0x4e, 0x33, 0x01, + 0xff, 0xec, 0xec, 0x14, 0x00, 0xf2, 0x52, 0x15, 0x40, 0xe1, 0xab, 0x14, + 0x80, 0x04, 0xf9, 0xba, 0x18, 0x40, 0xe9, 0xa4, 0x14, 0x40, 0xe1, 0xda, + 0x14, 0x80, 0x58, 0xe5, 0xd3, 0x14, 0x00, 0xe8, 0xa6, 0x15, 0x80, 0x34, + 0xe9, 0xd5, 0x14, 0x80, 0x2b, 0xef, 0xd7, 0x14, 0x80, 0x22, 0xb7, 0x01, + 0xff, 0xe1, 0xe6, 0x14, 0x80, 0x16, 0xe5, 0xdc, 0x14, 0x00, 0xe9, 0xde, + 0x14, 0x80, 0x09, 0xef, 0xe2, 0x14, 0xc0, 0x00, 0xef, 0xe4, 0x14, 0x40, + 0xe9, 0xe0, 0x14, 0x40, 0xe1, 0xe8, 0x14, 0x40, 0xef, 0xd8, 0x14, 0x40, + 0xe9, 0xd6, 0x14, 0x40, 0xe1, 0xa4, 0x15, 0x80, 0x12, 0xe9, 0xa0, 0x15, + 0x80, 0x09, 0xef, 0xa2, 0x15, 0xc0, 0x00, 0xef, 0xa3, 0x15, 0x40, 0xe9, + 0xa1, 0x15, 0x40, 0xe1, 0xa5, 0x15, 0x40, 0xe1, 0xdb, 0x14, 0x80, 0x04, + 0xf9, 0xbd, 0x18, 0x40, 0xe9, 0xd4, 0x14, 0x40, 0xe1, 0x72, 0x14, 0x80, + 0x3e, 0xe5, 0x6b, 0x14, 0x00, 0xe9, 0x6d, 0x14, 0x80, 0x31, 0xef, 0x6f, + 0x14, 0x80, 0x28, 0xf7, 0x84, 0x14, 0xc0, 0x00, 0xe1, 0x7e, 0x14, 0x80, + 0x16, 0xe5, 0x74, 0x14, 0x00, 0xe9, 0x76, 0x14, 0x80, 0x09, 0xef, 0x7a, + 0x14, 0xc0, 0x00, 0xef, 0x7c, 0x14, 0x40, 0xe9, 0x78, 0x14, 0x40, 0xe1, + 0x80, 0x14, 0x00, 0xf9, 0xb9, 0x18, 0x40, 0xef, 0x70, 0x14, 0x40, 0xe9, + 0x6e, 0x14, 0x40, 0xe1, 0x73, 0x14, 0x80, 0x04, 0xf9, 0xb8, 0x18, 0x40, + 0xe9, 0x6c, 0x14, 0x40, 0xe9, 0x04, 0x14, 0x00, 0xee, 0x2c, 0x14, 0x40, + 0xeb, 0x7d, 0x15, 0x00, 0x45, 0x97, 0x63, 0x00, 0x14, 0x40, 0xe1, 0x59, + 0x15, 0x80, 0x8a, 0x01, 0xe5, 0x53, 0x15, 0x00, 0xe9, 0x55, 0x15, 0x80, + 0x15, 0xef, 0x57, 0x15, 0x80, 0x0c, 0x48, 0x82, 0x16, 0x6e, 0x16, 0x00, + 0x43, 0x11, 0x8c, 0x5b, 0x15, 0x40, 0xef, 0x58, 0x15, 0x40, 0xe9, 0x56, + 0x15, 0x00, 0x04, 0x66, 0x06, 0x01, 0xff, 0x45, 0xf9, 0x38, 0x1f, 0x14, + 0x00, 0x50, 0x26, 0x61, 0x21, 0x14, 0x00, 0x02, 0x3b, 0x01, 0x3d, 0x45, + 0x15, 0x23, 0x20, 0x14, 0x00, 0x4a, 0xe6, 0x45, 0x27, 0x14, 0x00, 0x44, + 0x58, 0x28, 0x29, 0x14, 0x00, 0xb2, 0x14, 0xb3, 0x06, 0x4d, 0x52, 0x89, + 0x22, 0x14, 0x40, 0x56, 0x45, 0x34, 0x28, 0x14, 0x00, 0x49, 0xdc, 0xbb, + 0xde, 0x18, 0x40, 0x49, 0xd0, 0xb5, 0xdf, 0x18, 0x00, 0xa9, 0x01, 0xff, + 0x4d, 0x86, 0x72, 0x23, 0x14, 0x00, 0x42, 0x1d, 0x01, 0x24, 0x14, 0x40, + 0x05, 0x3d, 0x01, 0x06, 0x47, 0xf2, 0x38, 0x2a, 0x14, 0x40, 0x45, 0xf9, + 0x38, 0x25, 0x14, 0x00, 0x56, 0x47, 0x37, 0x26, 0x14, 0x40, 0xe1, 0x5a, + 0x15, 0xc0, 0x00, 0xe9, 0x54, 0x15, 0x40, 0x48, 0xa8, 0xc3, 0xdc, 0x18, + 0x00, 0xee, 0x2b, 0x14, 0x40, 0xe1, 0x90, 0x14, 0x80, 0x3e, 0xe5, 0x89, + 0x14, 0x00, 0x47, 0x94, 0xd1, 0x6d, 0x16, 0x00, 0xe9, 0x8b, 0x14, 0x80, + 0x2b, 0xef, 0x8d, 0x14, 0x80, 0x22, 0xb7, 0x01, 0xff, 0xe1, 0x9c, 0x14, + 0x80, 0x16, 0xe5, 0x92, 0x14, 0x00, 0xe9, 0x94, 0x14, 0x80, 0x09, 0xef, + 0x98, 0x14, 0xc0, 0x00, 0xef, 0x9a, 0x14, 0x40, 0xe9, 0x96, 0x14, 0x40, + 0xe1, 0x9e, 0x14, 0x40, 0xef, 0x8e, 0x14, 0x40, 0xe9, 0x8c, 0x14, 0x40, + 0xe1, 0x91, 0x14, 0x80, 0xd6, 0x06, 0x06, 0x26, 0x6a, 0x01, 0xff, 0x02, + 0x6d, 0x14, 0xb3, 0x06, 0xa4, 0xe0, 0x05, 0x42, 0x27, 0x01, 0x08, 0x14, + 0x00, 0xa7, 0x93, 0x05, 0xe8, 0x4b, 0x14, 0x80, 0xe7, 0x04, 0xe9, 0x09, + 0x14, 0x80, 0xdb, 0x04, 0xaa, 0x9e, 0x04, 0xab, 0xe2, 0x03, 0xac, 0xab, + 0x03, 0xad, 0x8f, 0x03, 0xae, 0xef, 0x02, 0xf0, 0xee, 0x15, 0x80, 0xd0, + 0x02, 0xb2, 0xb4, 0x02, 0xb3, 0xfa, 0x01, 0xb4, 0x54, 0xb7, 0x39, 0xb9, + 0x1e, 0xfa, 0x46, 0x16, 0xc0, 0x00, 0xe1, 0x45, 0x16, 0x00, 0xe5, 0x42, + 0x16, 0x80, 0x0c, 0xe9, 0x44, 0x16, 0x00, 0xef, 0x41, 0x16, 0x00, 0xf5, + 0x40, 0x16, 0x40, 0xe5, 0x43, 0x16, 0x40, 0xe1, 0x13, 0x16, 0x00, 0xe5, + 0x10, 0x16, 0x80, 0x0c, 0xe9, 0x12, 0x16, 0x00, 0xef, 0x0f, 0x16, 0x00, + 0xf5, 0x0e, 0x16, 0x40, 0xe5, 0x11, 0x16, 0x40, 0xe1, 0xd5, 0x15, 0x00, + 0xe5, 0xd2, 0x15, 0x80, 0x0c, 0xe9, 0xd4, 0x15, 0x00, 0xef, 0xd1, 0x15, + 0x00, 0xf5, 0xd0, 0x15, 0x40, 0xe5, 0xd3, 0x15, 0x40, 0xa8, 0x88, 0x01, + 0xac, 0x52, 0xb3, 0x37, 0xb4, 0x01, 0xff, 0xe1, 0xe7, 0x15, 0x00, 0xe5, + 0xe4, 0x15, 0x80, 0x27, 0xe9, 0xe6, 0x15, 0x00, 0xef, 0xe3, 0x15, 0x00, + 0xb3, 0x04, 0xf5, 0xe2, 0x15, 0x40, 0xe1, 0x6c, 0x16, 0x00, 0xe5, 0x69, + 0x16, 0x80, 0x0c, 0xe9, 0x6b, 0x16, 0x00, 0xef, 0x68, 0x16, 0x00, 0xf5, + 0x67, 0x16, 0x40, 0xe5, 0x6a, 0x16, 0x40, 0xe5, 0xe5, 0x15, 0x40, 0xe1, + 0x60, 0x16, 0x00, 0xe5, 0x5d, 0x16, 0x80, 0x0c, 0xe9, 0x5f, 0x16, 0x00, + 0xef, 0x5c, 0x16, 0x00, 0xf5, 0x5b, 0x16, 0x40, 0xe5, 0x5e, 0x16, 0x40, + 0xe1, 0x3f, 0x16, 0x00, 0xe5, 0x3c, 0x16, 0x80, 0x27, 0xa8, 0x0c, 0xe9, + 0x3e, 0x16, 0x00, 0xef, 0x3b, 0x16, 0x00, 0xf5, 0x3a, 0x16, 0x40, 0xe1, + 0x39, 0x16, 0x00, 0xe5, 0x36, 0x16, 0x80, 0x0c, 0xe9, 0x38, 0x16, 0x00, + 0xef, 0x35, 0x16, 0x00, 0xf5, 0x34, 0x16, 0x40, 0xe5, 0x37, 0x16, 0x40, + 0xe5, 0x3d, 0x16, 0x40, 0xe1, 0xe1, 0x15, 0x00, 0xe5, 0xde, 0x15, 0x80, + 0x0c, 0xe9, 0xe0, 0x15, 0x00, 0xef, 0xdd, 0x15, 0x00, 0xf5, 0xdc, 0x15, + 0x40, 0xe5, 0xdf, 0x15, 0x40, 0xe1, 0x53, 0x16, 0x00, 0xe5, 0x50, 0x16, + 0x80, 0x2a, 0xe8, 0x5a, 0x16, 0x80, 0x0c, 0xe9, 0x52, 0x16, 0x00, 0xef, + 0x4f, 0x16, 0x00, 0xf5, 0x4e, 0x16, 0x40, 0xe1, 0x59, 0x16, 0x00, 0xe5, + 0x56, 0x16, 0x80, 0x0c, 0xe9, 0x58, 0x16, 0x00, 0xef, 0x55, 0x16, 0x00, + 0xf5, 0x54, 0x16, 0x40, 0xe5, 0x57, 0x16, 0x40, 0xe5, 0x51, 0x16, 0x40, + 0xe1, 0xcf, 0x15, 0x00, 0xe5, 0xcc, 0x15, 0x80, 0x0c, 0xe9, 0xce, 0x15, + 0x00, 0xef, 0xcb, 0x15, 0x00, 0xf5, 0xca, 0x15, 0x40, 0xe5, 0xcd, 0x15, + 0x40, 0xe1, 0xed, 0x15, 0x00, 0xe5, 0xea, 0x15, 0x80, 0x0c, 0xe9, 0xec, + 0x15, 0x00, 0xef, 0xe9, 0x15, 0x00, 0xf5, 0xe8, 0x15, 0x40, 0xe5, 0xeb, + 0x15, 0x40, 0xe1, 0x07, 0x16, 0x00, 0xe5, 0x04, 0x16, 0x80, 0x10, 0xe7, + 0xd1, 0x14, 0x00, 0xe9, 0x06, 0x16, 0x00, 0xef, 0x03, 0x16, 0x00, 0xf5, + 0x02, 0x16, 0x40, 0xe5, 0x05, 0x16, 0x40, 0xe1, 0x0d, 0x16, 0x00, 0xe5, + 0x0a, 0x16, 0x80, 0x0c, 0xe9, 0x0c, 0x16, 0x00, 0xef, 0x09, 0x16, 0x00, + 0xf5, 0x08, 0x16, 0x40, 0xe5, 0x0b, 0x16, 0x40, 0xe1, 0x27, 0x16, 0x00, + 0xe5, 0x24, 0x16, 0x80, 0x27, 0xa8, 0x0c, 0xe9, 0x26, 0x16, 0x00, 0xef, + 0x23, 0x16, 0x00, 0xf5, 0x22, 0x16, 0x40, 0xe1, 0x33, 0x16, 0x00, 0xe5, + 0x30, 0x16, 0x80, 0x0c, 0xe9, 0x32, 0x16, 0x00, 0xef, 0x2f, 0x16, 0x00, + 0xf5, 0x2e, 0x16, 0x40, 0xe5, 0x31, 0x16, 0x40, 0xe5, 0x25, 0x16, 0x40, + 0xa8, 0x1e, 0xeb, 0x01, 0x16, 0xc0, 0x00, 0xe1, 0x00, 0x16, 0x00, 0xe5, + 0xfd, 0x15, 0x80, 0x0c, 0xe9, 0xff, 0x15, 0x00, 0xef, 0xfc, 0x15, 0x00, + 0xf5, 0xfb, 0x15, 0x40, 0xe5, 0xfe, 0x15, 0x40, 0xe1, 0xfa, 0x15, 0x00, + 0xe5, 0xf7, 0x15, 0x80, 0x0c, 0xe9, 0xf9, 0x15, 0x00, 0xef, 0xf6, 0x15, + 0x00, 0xf5, 0xf5, 0x15, 0x40, 0xe5, 0xf8, 0x15, 0x40, 0xe1, 0x1b, 0x16, + 0x00, 0xe5, 0x17, 0x16, 0x80, 0x2d, 0xe9, 0x19, 0x16, 0x00, 0xaa, 0x0e, + 0xef, 0x16, 0x16, 0x00, 0xf5, 0x14, 0x16, 0x00, 0x42, 0xa9, 0x01, 0xf2, + 0x18, 0x40, 0xe1, 0x21, 0x16, 0x00, 0xe5, 0x1e, 0x16, 0x80, 0x0c, 0xe9, + 0x20, 0x16, 0x00, 0xef, 0x1d, 0x16, 0x00, 0xf5, 0x1c, 0x16, 0x40, 0xe5, + 0x1f, 0x16, 0x40, 0xe5, 0x18, 0x16, 0x40, 0x48, 0xc0, 0xc8, 0x47, 0x16, + 0x40, 0x42, 0x27, 0x01, 0x36, 0x14, 0x00, 0xe9, 0x37, 0x14, 0x00, 0xb7, + 0x01, 0xff, 0xe1, 0xdb, 0x15, 0x00, 0xe5, 0xd8, 0x15, 0x80, 0x0c, 0xe9, + 0xda, 0x15, 0x00, 0xef, 0xd7, 0x15, 0x00, 0xf5, 0xd6, 0x15, 0x40, 0xe5, + 0xd9, 0x15, 0x40, 0xe1, 0xf4, 0x15, 0x80, 0x3b, 0xe5, 0xf1, 0x15, 0x80, + 0x32, 0xa8, 0x17, 0xe9, 0xf3, 0x15, 0x00, 0xef, 0xf0, 0x15, 0x00, 0xf5, + 0xef, 0x15, 0x00, 0xb7, 0x01, 0xff, 0xe1, 0xf0, 0x18, 0x00, 0xf5, 0xed, + 0x18, 0x40, 0xe1, 0xc9, 0x15, 0x00, 0xe5, 0xc6, 0x15, 0x80, 0x0c, 0xe9, + 0xc8, 0x15, 0x00, 0xef, 0xc5, 0x15, 0x00, 0xf5, 0xc4, 0x15, 0x40, 0xe5, + 0xc7, 0x15, 0x40, 0xe5, 0xf2, 0x15, 0x40, 0xe1, 0xef, 0x18, 0x40, 0xa5, + 0x3b, 0xe9, 0x54, 0x14, 0x00, 0xac, 0x1c, 0xba, 0x01, 0xff, 0xe1, 0x4d, + 0x16, 0x00, 0xe5, 0x4a, 0x16, 0x80, 0x0c, 0xe9, 0x4c, 0x16, 0x00, 0xef, + 0x49, 0x16, 0x00, 0xf5, 0x48, 0x16, 0x40, 0xe5, 0x4b, 0x16, 0x40, 0xe1, + 0x2d, 0x16, 0x00, 0xe5, 0x2a, 0x16, 0x80, 0x0c, 0xe9, 0x2c, 0x16, 0x00, + 0xef, 0x29, 0x16, 0x00, 0xf5, 0x28, 0x16, 0x40, 0xe5, 0x2b, 0x16, 0x40, + 0xe5, 0x53, 0x14, 0x00, 0xae, 0x01, 0xff, 0x45, 0xb0, 0xe5, 0xee, 0x18, + 0x00, 0x45, 0x4e, 0x05, 0xf5, 0x18, 0x40, 0xe1, 0x66, 0x16, 0x00, 0xe5, + 0x63, 0x16, 0x80, 0x0c, 0xe9, 0x65, 0x16, 0x00, 0xef, 0x62, 0x16, 0x00, + 0xf5, 0x61, 0x16, 0x40, 0xe5, 0x64, 0x16, 0x40, 0xe9, 0x8a, 0x14, 0x40, + 0x0b, 0x7e, 0x9b, 0x58, 0x4b, 0x41, 0x9d, 0x3f, 0x15, 0x00, 0x09, 0x3a, + 0xbb, 0x01, 0xff, 0xe1, 0xb3, 0x15, 0x00, 0xe5, 0xb0, 0x15, 0x00, 0xe9, + 0xb1, 0x15, 0x00, 0xab, 0x2f, 0xae, 0x1d, 0xef, 0xb2, 0x15, 0x00, 0xf3, + 0x08, 0x15, 0x00, 0xf7, 0x7f, 0x16, 0xc0, 0x00, 0xe1, 0xb7, 0x15, 0x00, + 0xe5, 0xb4, 0x15, 0x00, 0xe9, 0xb5, 0x15, 0x00, 0xef, 0xb6, 0x15, 0x40, + 0xe1, 0xbb, 0x15, 0x00, 0xe5, 0xb8, 0x15, 0x00, 0xe9, 0xb9, 0x15, 0x00, + 0xef, 0xba, 0x15, 0x40, 0xe1, 0xbf, 0x15, 0x00, 0xe5, 0xbc, 0x15, 0x00, + 0xe9, 0xbd, 0x15, 0x00, 0xef, 0xbe, 0x15, 0x40, 0xec, 0xf3, 0x18, 0x00, + 0xf2, 0xf4, 0x18, 0x40, 0xe1, 0x0b, 0x14, 0x80, 0x1f, 0xe9, 0x1c, 0x14, + 0x80, 0x14, 0xee, 0x2e, 0x14, 0x00, 0x0a, 0xd1, 0xb1, 0x04, 0xf9, 0xb1, + 0x18, 0x40, 0xed, 0xbe, 0x14, 0x00, 0xf3, 0x06, 0x15, 0x40, 0x47, 0x4b, + 0xd7, 0xaf, 0x15, 0x40, 0xe9, 0x02, 0x14, 0x00, 0xf9, 0xb2, 0x18, 0x40, + 0x43, 0xdc, 0x01, 0xf7, 0xf4, 0x81, 0x06, 0x44, 0x2b, 0x30, 0xd5, 0xf3, + 0x41, 0x4b, 0x03, 0x98, 0xf8, 0xf4, 0x41, 0x45, 0x1c, 0x80, 0xc5, 0xf4, + 0x01, 0x49, 0x31, 0xbb, 0x19, 0xf9, 0x41, 0x45, 0xee, 0xe3, 0x06, 0x21, + 0x00, 0x45, 0x07, 0xdb, 0x24, 0x26, 0x40, 0xa1, 0xc3, 0x58, 0xa5, 0xce, + 0x4f, 0x09, 0x54, 0xb9, 0xe2, 0x4a, 0xa9, 0x84, 0x4a, 0xac, 0x8c, 0x34, + 0xaf, 0xdf, 0x22, 0xb2, 0xe9, 0x12, 0xb5, 0xc0, 0x0f, 0xb9, 0x01, 0xff, + 0x4d, 0x1e, 0x89, 0xff, 0xfe, 0x00, 0x17, 0x1e, 0x32, 0x01, 0xff, 0xa1, + 0xba, 0x0d, 0x02, 0x6d, 0x14, 0x80, 0x0d, 0xa4, 0xd9, 0x0b, 0xa5, 0xa0, + 0x0b, 0xa6, 0xf4, 0x09, 0xa7, 0x91, 0x09, 0xa9, 0xcc, 0x08, 0xab, 0xf4, + 0x06, 0xac, 0xbe, 0x06, 0xad, 0xc9, 0x05, 0x44, 0x61, 0xf1, 0x40, 0xd0, + 0x01, 0xaf, 0xfb, 0x04, 0xb0, 0xd4, 0x03, 0xb2, 0xc5, 0x03, 0xb3, 0xa3, + 0x02, 0xb4, 0x8b, 0x01, 0x02, 0xf5, 0x0a, 0x63, 0x4c, 0x0b, 0x97, 0x6a, + 0xd0, 0x01, 0xb9, 0x01, 0xff, 0x02, 0x0c, 0x1a, 0x1e, 0xb0, 0x01, 0xff, + 0xaf, 0x06, 0x44, 0xc3, 0x88, 0x50, 0xd0, 0x41, 0x46, 0x70, 0xdd, 0x0a, + 0xd0, 0x81, 0x06, 0x44, 0x69, 0xf2, 0x53, 0xd0, 0x41, 0x46, 0x00, 0xd8, + 0x0b, 0xd0, 0x41, 0x02, 0x92, 0x00, 0x28, 0x04, 0xe0, 0x21, 0x01, 0xff, + 0x51, 0x42, 0x58, 0xd4, 0xd0, 0x01, 0x55, 0x34, 0x3a, 0xd6, 0xd0, 0x01, + 0x5c, 0xbe, 0x18, 0xd5, 0xd0, 0x01, 0x03, 0x19, 0x01, 0x01, 0xff, 0x55, + 0x5a, 0x3b, 0xd7, 0xd0, 0x01, 0x48, 0x69, 0x34, 0xcd, 0xd0, 0x41, 0x43, + 0x14, 0x7a, 0x7d, 0xd0, 0x01, 0x44, 0xcf, 0x9f, 0x7c, 0xd0, 0x41, 0x04, + 0x41, 0xf2, 0x06, 0x43, 0x00, 0x54, 0x19, 0xd0, 0x41, 0x80, 0x06, 0x4a, + 0x5f, 0xab, 0x21, 0xd0, 0x41, 0x45, 0x01, 0xd8, 0x06, 0xd0, 0x01, 0x4b, + 0xe8, 0x7e, 0x05, 0xd0, 0x01, 0x43, 0x65, 0x54, 0x58, 0xd0, 0x41, 0xa5, + 0x80, 0x01, 0xa8, 0x52, 0x46, 0xe0, 0xdc, 0x27, 0xd0, 0x01, 0xb2, 0x01, + 0xff, 0xa9, 0x37, 0x05, 0x04, 0xb5, 0x01, 0xff, 0x47, 0x07, 0xd3, 0x6d, + 0xd0, 0x01, 0x02, 0x92, 0x00, 0x14, 0xb0, 0x06, 0x47, 0x10, 0xd6, 0x70, + 0xd0, 0x41, 0x4a, 0x36, 0xa1, 0x6e, 0xd0, 0x01, 0x48, 0xe8, 0xca, 0x6b, + 0xd0, 0x41, 0xa1, 0x06, 0x43, 0x65, 0x54, 0x63, 0xd0, 0x41, 0x43, 0xcf, + 0x1c, 0x43, 0xd0, 0x01, 0x47, 0x62, 0xab, 0x36, 0xd0, 0x41, 0xe1, 0x30, + 0xd0, 0x01, 0x46, 0x26, 0xdc, 0x96, 0xd0, 0x01, 0x43, 0xbb, 0x04, 0x87, + 0xd0, 0x41, 0xa5, 0x06, 0x43, 0xe7, 0x05, 0x14, 0xd0, 0x41, 0x42, 0x6c, + 0x00, 0x2d, 0xd0, 0x81, 0x06, 0x4d, 0x41, 0x88, 0x79, 0xd0, 0x41, 0x47, + 0x18, 0xcd, 0x78, 0xd0, 0x01, 0x08, 0xa0, 0xcb, 0x01, 0xff, 0x42, 0x60, + 0x03, 0x76, 0xd0, 0x01, 0x42, 0xc7, 0x2f, 0x77, 0xd0, 0x41, 0x44, 0xc6, + 0x5a, 0x0f, 0xd0, 0x01, 0x45, 0xcc, 0x18, 0x31, 0xd0, 0x01, 0x46, 0xac, + 0xe0, 0x88, 0xd0, 0x41, 0x47, 0x48, 0xcf, 0x1d, 0xd0, 0x01, 0x45, 0xdd, + 0xe5, 0x29, 0xd0, 0x81, 0x8b, 0x01, 0x08, 0xf8, 0xc6, 0x49, 0xb4, 0x2e, + 0xb9, 0x01, 0xff, 0xae, 0x0d, 0x43, 0x8b, 0x06, 0x66, 0xd0, 0xc1, 0x00, + 0x44, 0xc6, 0xdd, 0x08, 0xd0, 0x41, 0x05, 0x20, 0xe4, 0x06, 0x44, 0x0c, + 0xd4, 0x13, 0xd0, 0x41, 0x48, 0x61, 0xab, 0x2a, 0xd0, 0x01, 0x4c, 0xfb, + 0x91, 0x2b, 0xd0, 0x01, 0x43, 0x65, 0x54, 0x65, 0xd0, 0x41, 0x45, 0x8e, + 0xe4, 0x7e, 0xd0, 0x81, 0x0c, 0x44, 0xbf, 0x1f, 0xe8, 0xd0, 0x01, 0x4a, + 0xe7, 0xaf, 0x44, 0xd0, 0x41, 0x49, 0x44, 0xb4, 0x1f, 0xd0, 0x41, 0x46, + 0xe6, 0xd9, 0xe2, 0xd0, 0x81, 0x1f, 0x47, 0x4f, 0xd6, 0xde, 0xd0, 0xc1, + 0x00, 0x80, 0x01, 0xff, 0x47, 0x67, 0xd0, 0xdf, 0xd0, 0x01, 0xb4, 0x01, + 0xff, 0x49, 0xb2, 0xb8, 0xe1, 0xd0, 0x01, 0x47, 0x61, 0xd5, 0xe0, 0xd0, + 0x41, 0x80, 0x01, 0xff, 0x47, 0x67, 0xd0, 0xe3, 0xd0, 0x01, 0xb4, 0x01, + 0xff, 0x49, 0xb2, 0xb8, 0xe5, 0xd0, 0x01, 0x47, 0x61, 0xd5, 0xe4, 0xd0, + 0x41, 0x44, 0x1a, 0x89, 0x69, 0xd0, 0x41, 0x46, 0xc8, 0xd9, 0x3c, 0xd0, + 0x01, 0x44, 0x0c, 0xd4, 0x25, 0xd0, 0x41, 0x02, 0x17, 0x00, 0x70, 0xa5, + 0x43, 0x06, 0xb6, 0xdc, 0x33, 0x02, 0x5a, 0x03, 0x01, 0xff, 0x05, 0xea, + 0xca, 0x0d, 0xac, 0x01, 0xff, 0xe9, 0x00, 0xd0, 0x01, 0x42, 0x10, 0x00, + 0x17, 0xd0, 0x41, 0x47, 0x07, 0xd3, 0x6c, 0xd0, 0x01, 0xee, 0x39, 0xd0, + 0x81, 0x0c, 0x4b, 0x35, 0xa1, 0x6f, 0xd0, 0x01, 0x47, 0x10, 0xd6, 0x71, + 0xd0, 0x41, 0x44, 0x1a, 0x89, 0x5a, 0xd0, 0x41, 0x48, 0x61, 0xab, 0x26, + 0xd0, 0x01, 0x43, 0x65, 0x54, 0x59, 0xd0, 0x41, 0x46, 0xa0, 0xdd, 0x38, + 0xd0, 0x81, 0x1e, 0x49, 0x42, 0xa1, 0x02, 0xd0, 0x01, 0x03, 0x71, 0x2d, + 0x01, 0xff, 0x42, 0x6c, 0x00, 0x41, 0xd0, 0x01, 0xb4, 0x01, 0xff, 0xe9, + 0x49, 0xd0, 0x01, 0x49, 0xfc, 0xbc, 0x4b, 0xd0, 0x41, 0x44, 0x1a, 0x89, + 0x4d, 0xd0, 0x41, 0x02, 0x6d, 0x00, 0x06, 0x45, 0x45, 0xe7, 0x1e, 0xd0, + 0x41, 0x07, 0xa7, 0xce, 0x16, 0x46, 0xc4, 0xdd, 0x09, 0xd0, 0xc1, 0x00, + 0x80, 0x01, 0xff, 0x48, 0x61, 0xab, 0x3e, 0xd0, 0x01, 0x43, 0x65, 0x54, + 0x5e, 0xd0, 0x41, 0x48, 0x61, 0xab, 0x3d, 0xd0, 0x01, 0x43, 0x65, 0x54, + 0x5f, 0xd0, 0x41, 0x06, 0xb8, 0xdd, 0x35, 0x45, 0x71, 0xe8, 0x5b, 0xd0, + 0x01, 0x04, 0x31, 0xf3, 0x11, 0x09, 0xa9, 0xc1, 0x01, 0xff, 0x48, 0x61, + 0xab, 0x2c, 0xd0, 0x01, 0x43, 0x65, 0x54, 0x75, 0xd0, 0x41, 0x80, 0x06, + 0x4a, 0x5f, 0xab, 0x20, 0xd0, 0x41, 0x45, 0x01, 0xd8, 0x04, 0xd0, 0x01, + 0x4b, 0xe8, 0x7e, 0x03, 0xd0, 0x01, 0x43, 0x65, 0x54, 0x48, 0xd0, 0x41, + 0x48, 0x61, 0xab, 0x15, 0xd0, 0x01, 0x43, 0x65, 0x54, 0x47, 0xd0, 0x41, + 0x08, 0x98, 0xc3, 0x06, 0x4a, 0xa5, 0xab, 0x57, 0xd0, 0x41, 0x05, 0x34, + 0xe4, 0x58, 0x4e, 0xbf, 0x76, 0xa4, 0xd0, 0x01, 0x4d, 0x0e, 0x85, 0xaa, + 0xd0, 0x01, 0xb0, 0x29, 0xb4, 0x06, 0x4b, 0xbb, 0xa4, 0xb1, 0xd0, 0x41, + 0x08, 0xb6, 0x7c, 0x11, 0x02, 0x0d, 0x00, 0x01, 0xff, 0x46, 0x4a, 0xa3, + 0xa7, 0xd0, 0x01, 0x49, 0xba, 0x7c, 0xa6, 0xd0, 0x41, 0x45, 0xc8, 0x76, + 0xa8, 0xd0, 0x01, 0x4d, 0x0e, 0x85, 0xa9, 0xd0, 0x41, 0x07, 0x9e, 0xd2, + 0x11, 0x04, 0xd0, 0x93, 0x01, 0xff, 0x47, 0xc6, 0x76, 0xa2, 0xd0, 0x01, + 0x4b, 0xbb, 0xa4, 0xb2, 0xd0, 0x41, 0x45, 0xc8, 0x76, 0xab, 0xd0, 0x01, + 0x4e, 0xb5, 0x7c, 0xb3, 0xd0, 0x41, 0x4e, 0xbf, 0x76, 0xa5, 0xd0, 0x01, + 0x4c, 0xcf, 0x93, 0xa3, 0xd0, 0x41, 0xa5, 0x06, 0x46, 0x08, 0xd3, 0x5d, + 0xd0, 0x41, 0x05, 0x6d, 0xe7, 0x06, 0x43, 0xf2, 0xc6, 0x2e, 0xd0, 0x41, + 0x4b, 0x5d, 0x9b, 0x8b, 0xd0, 0x01, 0x4c, 0x9b, 0x8e, 0x8a, 0xd0, 0x01, + 0x4f, 0x88, 0x6e, 0x8e, 0xd0, 0x01, 0xb4, 0x01, 0xff, 0x4f, 0xe4, 0x6c, + 0x8d, 0xd0, 0x01, 0x4c, 0xa7, 0x94, 0x8c, 0xd0, 0x41, 0x02, 0x8a, 0x00, + 0xba, 0x01, 0x06, 0x54, 0xdb, 0x70, 0x45, 0x12, 0x97, 0x24, 0xd0, 0x81, + 0x5a, 0xaf, 0x3f, 0xb2, 0x06, 0x46, 0x91, 0xd2, 0x61, 0xd0, 0x41, 0x04, + 0x21, 0xef, 0x06, 0x46, 0x3c, 0xdb, 0x0c, 0xd0, 0x41, 0xa1, 0x0f, 0xaf, + 0x01, 0xff, 0x48, 0xfd, 0xbc, 0x4c, 0xd0, 0x01, 0x48, 0xf0, 0xcc, 0x54, + 0xd0, 0x41, 0x80, 0x06, 0x42, 0x12, 0x00, 0x32, 0xd0, 0x41, 0xa1, 0x06, + 0x43, 0x65, 0x54, 0x83, 0xd0, 0x41, 0x43, 0xcf, 0x1c, 0x82, 0xd0, 0x01, + 0x47, 0x62, 0xab, 0x81, 0xd0, 0x41, 0x46, 0x8a, 0xde, 0x3a, 0xd0, 0x81, + 0x0c, 0x45, 0xf1, 0x61, 0x89, 0xd0, 0x01, 0x46, 0xff, 0xbc, 0x4a, 0xd0, + 0x41, 0x45, 0xad, 0xce, 0x42, 0xd0, 0x41, 0x80, 0x01, 0xff, 0x43, 0x14, + 0x7a, 0x7f, 0xd0, 0x01, 0x44, 0xcf, 0x9f, 0xf4, 0xd0, 0x41, 0x80, 0x27, + 0x42, 0x12, 0x00, 0x10, 0xd0, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x48, 0x61, + 0xab, 0x1c, 0xd0, 0x01, 0x04, 0x75, 0xf1, 0x01, 0xff, 0x43, 0x14, 0x7a, + 0x4e, 0xd0, 0x01, 0x44, 0xcf, 0x9f, 0xf2, 0xd0, 0x01, 0x44, 0x29, 0xf1, + 0xf0, 0xd0, 0x41, 0x48, 0x61, 0xab, 0x1b, 0xd0, 0x01, 0x04, 0x75, 0xf1, + 0x01, 0xff, 0x43, 0x14, 0x7a, 0x4f, 0xd0, 0x01, 0x44, 0xcf, 0x9f, 0xf3, + 0xd0, 0x01, 0x44, 0x29, 0xf1, 0xf1, 0xd0, 0x41, 0x03, 0x67, 0x12, 0x06, + 0x45, 0x09, 0xe7, 0x07, 0xd0, 0x41, 0x49, 0x01, 0xb5, 0x37, 0xd0, 0x01, + 0x43, 0x5d, 0x07, 0x7a, 0xd0, 0x41, 0x46, 0x70, 0xda, 0x3f, 0xd0, 0x01, + 0x02, 0x7d, 0x02, 0x1a, 0xb3, 0x01, 0xff, 0x55, 0x0e, 0x39, 0xac, 0xd0, + 0x01, 0x03, 0xb6, 0x00, 0x01, 0xff, 0x48, 0x61, 0xab, 0x1a, 0xd0, 0x01, + 0x43, 0x65, 0x54, 0x46, 0xd0, 0x41, 0x47, 0x59, 0xd0, 0x98, 0xd0, 0x01, + 0xa6, 0x01, 0xff, 0x44, 0xef, 0x6c, 0xb7, 0xd0, 0x01, 0x04, 0x4c, 0x2a, + 0x01, 0xff, 0xe1, 0x35, 0xd0, 0x01, 0x42, 0x10, 0x00, 0xb8, 0xd0, 0x41, + 0x06, 0x4e, 0xdb, 0x50, 0x02, 0x0c, 0x00, 0x06, 0x4b, 0x48, 0xa2, 0x45, + 0xd0, 0x41, 0x02, 0x06, 0x14, 0x11, 0x0a, 0xe5, 0xb1, 0x01, 0xff, 0x46, + 0x19, 0xcd, 0xb4, 0xd0, 0x01, 0x47, 0x60, 0xd0, 0xb5, 0xd0, 0x41, 0x02, + 0x92, 0x00, 0x06, 0x49, 0xb4, 0x80, 0x72, 0xd0, 0x41, 0x48, 0x61, 0xab, + 0x16, 0xd0, 0x01, 0x04, 0x75, 0xf1, 0x11, 0x0e, 0x8e, 0x69, 0x01, 0xff, + 0x48, 0x4e, 0xb6, 0x90, 0xd0, 0x01, 0x45, 0x48, 0xb4, 0x91, 0xd0, 0x41, + 0x43, 0x14, 0x7a, 0x8f, 0xd0, 0x01, 0x44, 0xcf, 0x9f, 0xf5, 0xd0, 0x41, + 0x46, 0xf4, 0xda, 0xd8, 0xd0, 0x01, 0x46, 0x5d, 0x34, 0xd9, 0xd0, 0x41, + 0x09, 0x06, 0xb6, 0x92, 0x01, 0x5a, 0x32, 0x20, 0xc5, 0xd0, 0x01, 0x06, + 0xbf, 0x40, 0x01, 0xff, 0x48, 0x61, 0xab, 0x34, 0xd0, 0x81, 0x7a, 0x0a, + 0x43, 0xa9, 0x45, 0x54, 0x1c, 0x42, 0xcc, 0xd0, 0x01, 0x56, 0x5b, 0x34, + 0xcb, 0xd0, 0x01, 0x0f, 0x1d, 0x70, 0x29, 0xae, 0x1b, 0x08, 0x38, 0x20, + 0x01, 0xff, 0x07, 0x40, 0x20, 0x06, 0x4b, 0xfa, 0x9a, 0xbe, 0xd0, 0x41, + 0x46, 0x46, 0xe0, 0xc6, 0xd0, 0x01, 0x45, 0x47, 0x20, 0xc5, 0xd0, 0x41, + 0x49, 0x3c, 0xb6, 0xbc, 0xd0, 0x01, 0x45, 0xf6, 0xe5, 0xc7, 0xd0, 0x41, + 0x48, 0x18, 0xc5, 0xc3, 0xd0, 0x01, 0x4a, 0xf3, 0xad, 0xc4, 0xd0, 0x41, + 0x42, 0x00, 0x00, 0xbd, 0xd0, 0x01, 0x42, 0x37, 0x01, 0xbf, 0xd0, 0x01, + 0xae, 0x0c, 0x42, 0xbb, 0x09, 0xba, 0xd0, 0x01, 0x42, 0x0f, 0x00, 0xc0, + 0xd0, 0x41, 0x43, 0x4b, 0x12, 0xbb, 0xd0, 0x01, 0x02, 0xf1, 0x03, 0x01, + 0xff, 0x43, 0x14, 0x7a, 0xc2, 0xd0, 0x01, 0x44, 0xcf, 0x9f, 0xc1, 0xd0, + 0x41, 0x4f, 0x42, 0x69, 0xb9, 0xd0, 0x41, 0x48, 0x18, 0xc5, 0xb0, 0xd0, + 0x01, 0x4a, 0xf3, 0xad, 0xaf, 0xd0, 0x01, 0x4b, 0x45, 0xa3, 0xae, 0xd0, + 0x41, 0x49, 0x16, 0xbb, 0x64, 0xd0, 0x01, 0x46, 0x88, 0xdd, 0x55, 0xd0, + 0x01, 0xae, 0x1c, 0x47, 0xa4, 0xd4, 0x68, 0xd0, 0x01, 0x06, 0x82, 0xe0, + 0x06, 0x4e, 0xe5, 0x7e, 0x0e, 0xd0, 0x41, 0x4d, 0xb0, 0x80, 0x74, 0xd0, + 0x01, 0x4b, 0x35, 0xa1, 0x60, 0xd0, 0x41, 0x54, 0xb4, 0x40, 0xb6, 0xd0, + 0x01, 0x47, 0x6e, 0xd0, 0x7b, 0xd0, 0x41, 0x45, 0x75, 0xe4, 0x01, 0xd0, + 0x01, 0xa9, 0x06, 0x42, 0xa9, 0x47, 0x2f, 0xd0, 0x41, 0xa1, 0x6d, 0x05, + 0xdf, 0x21, 0x3d, 0x4a, 0x83, 0xaa, 0xe7, 0xd0, 0x01, 0xa7, 0x0d, 0x43, + 0xbb, 0x04, 0x86, 0xd0, 0xc1, 0x00, 0x49, 0x60, 0xab, 0x80, 0xd0, 0x41, + 0x45, 0x27, 0xdc, 0x92, 0xd0, 0x81, 0x06, 0x48, 0x20, 0xca, 0xe6, 0xd0, + 0x41, 0x0f, 0x8d, 0x69, 0x01, 0xff, 0x09, 0x4e, 0xb6, 0x06, 0x45, 0x48, + 0xb4, 0x95, 0xd0, 0x41, 0x43, 0x14, 0x7a, 0x94, 0xd0, 0x01, 0x44, 0xcf, + 0x9f, 0x93, 0xd0, 0x41, 0x51, 0x42, 0x58, 0xd0, 0xd0, 0x01, 0x55, 0x34, + 0x3a, 0xd2, 0xd0, 0x01, 0x5c, 0xbe, 0x18, 0xd1, 0xd0, 0x01, 0xb4, 0x01, + 0xff, 0x4c, 0x65, 0x34, 0xcf, 0xd0, 0x01, 0x02, 0x0d, 0x00, 0x01, 0xff, + 0x55, 0x5a, 0x3b, 0xd3, 0xd0, 0x01, 0x48, 0x69, 0x34, 0xce, 0xd0, 0x41, + 0x44, 0x5c, 0xd0, 0x99, 0xd0, 0x01, 0x06, 0x22, 0xe0, 0x01, 0xff, 0x06, + 0xce, 0xd9, 0x0c, 0x45, 0x01, 0xd8, 0xdc, 0xd0, 0x01, 0x47, 0x4f, 0xd6, + 0xdd, 0xd0, 0x41, 0x45, 0xc9, 0xe5, 0xdb, 0xd0, 0x01, 0x44, 0x3e, 0x95, + 0xda, 0xd0, 0x41, 0x04, 0x8b, 0x65, 0x27, 0x07, 0x0a, 0xd4, 0x17, 0x04, + 0x55, 0xf2, 0x01, 0xff, 0x46, 0x6a, 0xdd, 0xc9, 0xd0, 0x01, 0x46, 0xfe, + 0xdf, 0xca, 0xd0, 0x01, 0x45, 0xb8, 0xec, 0xc8, 0xd0, 0x41, 0x48, 0x61, + 0xab, 0x3b, 0xd0, 0x01, 0x43, 0x65, 0x54, 0x67, 0xd0, 0x41, 0xe9, 0x56, + 0xd0, 0x01, 0x42, 0x10, 0x00, 0x18, 0xd0, 0x41, 0x05, 0xaf, 0xe6, 0xb3, + 0x01, 0xae, 0x99, 0x01, 0xb0, 0x40, 0xb2, 0x01, 0xff, 0x02, 0x06, 0x14, + 0x2f, 0x06, 0x76, 0xdd, 0x01, 0xff, 0x42, 0x00, 0x00, 0xec, 0xd0, 0x01, + 0x42, 0x24, 0x02, 0xeb, 0xd0, 0x01, 0x42, 0x37, 0x01, 0xed, 0xd0, 0x01, + 0x42, 0x51, 0x03, 0xef, 0xd0, 0x01, 0x42, 0xbb, 0x09, 0xe9, 0xd0, 0x01, + 0x43, 0xa1, 0x2d, 0xea, 0xd0, 0x01, 0x42, 0x0f, 0x00, 0xee, 0xd0, 0x41, + 0xee, 0x97, 0xd0, 0x01, 0x49, 0xb4, 0x80, 0x73, 0xd0, 0x41, 0x05, 0x23, + 0xe6, 0x47, 0x42, 0xc3, 0x01, 0x85, 0xd0, 0x01, 0xaf, 0x01, 0xff, 0x06, + 0xe2, 0xda, 0x2e, 0x06, 0x28, 0xe0, 0x06, 0x45, 0xa3, 0x53, 0x23, 0xd0, + 0x41, 0x02, 0xf1, 0x03, 0x14, 0xf3, 0x11, 0xd0, 0xc1, 0x00, 0x80, 0x01, + 0xff, 0x45, 0x01, 0xd8, 0x12, 0xd0, 0x01, 0x43, 0x65, 0x54, 0x51, 0xd0, + 0x41, 0x4d, 0x11, 0x89, 0x52, 0xd0, 0x01, 0x50, 0x13, 0x39, 0xad, 0xd0, + 0x41, 0x48, 0x61, 0xab, 0x22, 0xd0, 0x01, 0x43, 0x65, 0x54, 0x84, 0xd0, + 0x41, 0x4a, 0xe9, 0x7e, 0x0d, 0xd0, 0x01, 0x46, 0x6c, 0xe1, 0x33, 0xd0, + 0x41, 0x4a, 0x03, 0xa8, 0x28, 0xd0, 0x01, 0x06, 0x94, 0xe0, 0x01, 0xff, + 0x47, 0x90, 0xd2, 0x62, 0xd0, 0x01, 0x42, 0x6c, 0x00, 0x5c, 0xd0, 0x41, + 0x03, 0x33, 0x13, 0x2f, 0x04, 0x26, 0xdc, 0x21, 0x02, 0x2a, 0x02, 0x11, + 0x05, 0x01, 0xea, 0x01, 0xff, 0x44, 0x15, 0xef, 0x9a, 0xd0, 0x01, 0x45, + 0xb4, 0xe6, 0xa1, 0xd0, 0x41, 0x42, 0x5a, 0x03, 0x9e, 0xd0, 0x01, 0x44, + 0x19, 0x01, 0x9d, 0xd0, 0x41, 0xe9, 0x9f, 0xd0, 0x01, 0x45, 0xa7, 0xe9, + 0xa0, 0xd0, 0x41, 0xe9, 0x9c, 0xd0, 0x01, 0x45, 0xa7, 0xe9, 0x9b, 0xd0, + 0x41, 0x04, 0x78, 0x7c, 0x97, 0x03, 0x44, 0x66, 0x09, 0xa3, 0xfa, 0x01, + 0xe7, 0x1b, 0xf4, 0x81, 0xd2, 0x01, 0x04, 0x41, 0xf0, 0x57, 0x53, 0x29, + 0x4a, 0xd7, 0xf3, 0x01, 0x02, 0x60, 0x07, 0x2d, 0x45, 0x88, 0xea, 0x2f, + 0xf3, 0x01, 0xf3, 0x8c, 0xf6, 0x81, 0x0d, 0x44, 0xee, 0x05, 0xc8, 0xf9, + 0xc1, 0x00, 0x43, 0x43, 0xf4, 0x8b, 0xf9, 0x41, 0x45, 0x54, 0x03, 0x8f, + 0xf6, 0x01, 0xb4, 0x01, 0xff, 0x4e, 0xbb, 0x34, 0x64, 0xf4, 0x01, 0x4f, + 0xed, 0x72, 0x65, 0xf4, 0x41, 0x42, 0xed, 0x05, 0x22, 0x20, 0x80, 0x13, + 0x44, 0x60, 0x2d, 0x6b, 0xf5, 0x81, 0x06, 0x44, 0x9d, 0xf2, 0xce, 0x25, + 0x40, 0x51, 0x76, 0x57, 0x6c, 0xf5, 0x41, 0x49, 0x7d, 0x1d, 0x19, 0x22, + 0x40, 0x07, 0xec, 0x05, 0x0d, 0x0b, 0x40, 0x77, 0x01, 0xff, 0xe9, 0x52, + 0x17, 0x00, 0xf5, 0x53, 0x17, 0x40, 0xe1, 0x40, 0x17, 0x00, 0x42, 0x16, + 0x00, 0x4a, 0x17, 0x00, 0x42, 0xf0, 0x10, 0x47, 0x17, 0x00, 0x42, 0x24, + 0x02, 0x44, 0x17, 0x00, 0x42, 0x22, 0x00, 0x51, 0x17, 0x00, 0xe9, 0x41, + 0x17, 0x00, 0x42, 0x1b, 0x02, 0x43, 0x17, 0x00, 0x42, 0x74, 0x00, 0x4e, + 0x17, 0x00, 0x42, 0x6c, 0x00, 0x4b, 0x17, 0x00, 0xae, 0x28, 0x42, 0xbb, + 0x09, 0x49, 0x17, 0x00, 0x42, 0x71, 0x00, 0x4d, 0x17, 0x00, 0x42, 0x40, + 0x06, 0x50, 0x17, 0x00, 0x42, 0x12, 0x00, 0x46, 0x17, 0x00, 0xf5, 0x42, + 0x17, 0x00, 0x42, 0xa9, 0x01, 0x4f, 0x17, 0x00, 0x42, 0xbc, 0x22, 0x4c, + 0x17, 0x40, 0xe1, 0x48, 0x17, 0x00, 0x42, 0x24, 0x02, 0x45, 0x17, 0x40, + 0x06, 0xbd, 0x83, 0x01, 0xff, 0x4e, 0x4b, 0x77, 0x1f, 0x1a, 0x00, 0x07, + 0xec, 0x05, 0x21, 0x47, 0x73, 0xd4, 0x1e, 0x1a, 0x00, 0x0b, 0x40, 0x77, + 0x01, 0xff, 0x42, 0x93, 0x0f, 0x1b, 0x1a, 0x00, 0xe5, 0x19, 0x1a, 0x00, + 0xe9, 0x17, 0x1a, 0x00, 0xef, 0x1a, 0x1a, 0x00, 0xf5, 0x18, 0x1a, 0x40, + 0xe1, 0x15, 0x1a, 0x00, 0x42, 0x16, 0x00, 0x05, 0x1a, 0x00, 0x42, 0x37, + 0x00, 0x0c, 0x1a, 0x00, 0x42, 0xf0, 0x10, 0x09, 0x1a, 0x00, 0x42, 0x24, + 0x02, 0x01, 0x1a, 0x00, 0x42, 0x22, 0x00, 0x16, 0x1a, 0x00, 0x42, 0x56, + 0x19, 0x0d, 0x1a, 0x00, 0x42, 0x1b, 0x02, 0x00, 0x1a, 0x00, 0x42, 0x74, + 0x00, 0x12, 0x1a, 0x00, 0xad, 0x49, 0xae, 0x24, 0x42, 0xbb, 0x09, 0x04, + 0x1a, 0x00, 0x42, 0x71, 0x00, 0x11, 0x1a, 0x00, 0x42, 0x40, 0x06, 0x14, + 0x1a, 0x00, 0x42, 0x12, 0x00, 0x08, 0x1a, 0x00, 0x42, 0xf5, 0x0a, 0x13, + 0x1a, 0x00, 0x42, 0xbc, 0x22, 0x10, 0x1a, 0x40, 0xe1, 0x0a, 0x1a, 0x00, + 0xa7, 0x13, 0x42, 0x71, 0x00, 0x0b, 0x1a, 0x00, 0xb9, 0x01, 0xff, 0xe1, + 0x0e, 0x1a, 0x00, 0x42, 0x37, 0x00, 0x0f, 0x1a, 0x40, 0xe1, 0x02, 0x1a, + 0x00, 0x42, 0x1b, 0x02, 0x03, 0x1a, 0x40, 0xe1, 0x06, 0x1a, 0x00, 0x42, + 0xbb, 0x09, 0x07, 0x1a, 0x40, 0x44, 0x57, 0x52, 0xcb, 0xf9, 0x01, 0xf3, + 0xe7, 0xfa, 0x41, 0xa1, 0x6a, 0xa5, 0x50, 0xa9, 0x2b, 0xaf, 0x01, 0xff, + 0x45, 0x0b, 0xe5, 0x66, 0xf9, 0x01, 0x04, 0x60, 0xa8, 0x0c, 0x42, 0x14, + 0x05, 0xf9, 0xf9, 0x01, 0x48, 0x78, 0xcc, 0x0e, 0xf9, 0x41, 0x43, 0x16, + 0x00, 0xa6, 0x00, 0x00, 0x5b, 0xad, 0x1a, 0x8b, 0x23, 0x00, 0x45, 0xac, + 0x21, 0x94, 0xf4, 0x41, 0x42, 0x36, 0x01, 0xf1, 0xf9, 0x01, 0xa4, 0x0f, + 0x02, 0x69, 0x00, 0x01, 0xff, 0x44, 0x59, 0xef, 0xbc, 0xf4, 0x01, 0xf3, + 0x72, 0xfa, 0x41, 0x4b, 0x68, 0x9b, 0x70, 0xf4, 0x01, 0x4b, 0x4f, 0x9c, + 0x09, 0xf3, 0x41, 0xa1, 0x06, 0x42, 0x32, 0x00, 0xd8, 0x02, 0x40, 0xe4, + 0x5e, 0xf3, 0x01, 0x50, 0x56, 0x64, 0x82, 0x00, 0x00, 0x4a, 0x59, 0xb1, + 0x31, 0xf9, 0x41, 0x04, 0x49, 0xf0, 0x98, 0x09, 0xa9, 0x01, 0xff, 0x0c, + 0x5f, 0x91, 0x04, 0xee, 0xe0, 0xf9, 0x41, 0x45, 0x45, 0xc0, 0x00, 0x28, + 0x00, 0x05, 0xa1, 0xe5, 0x01, 0xff, 0xd1, 0x01, 0x28, 0x80, 0xbe, 0x04, + 0xd2, 0x02, 0x28, 0x80, 0x9c, 0x02, 0xd3, 0x04, 0x28, 0x80, 0x8b, 0x01, + 0xd4, 0x08, 0x28, 0x80, 0x43, 0xd5, 0x10, 0x28, 0x80, 0x1f, 0xd6, 0x20, + 0x28, 0x80, 0x0d, 0xd7, 0x40, 0x28, 0x80, 0x04, 0xd8, 0x80, 0x28, 0x40, + 0xd8, 0xc0, 0x28, 0x40, 0xd7, 0x60, 0x28, 0x80, 0x04, 0xd8, 0xa0, 0x28, + 0x40, 0xd8, 0xe0, 0x28, 0x40, 0xd6, 0x30, 0x28, 0x80, 0x0d, 0xd7, 0x50, + 0x28, 0x80, 0x04, 0xd8, 0x90, 0x28, 0x40, 0xd8, 0xd0, 0x28, 0x40, 0xd7, + 0x70, 0x28, 0x80, 0x04, 0xd8, 0xb0, 0x28, 0x40, 0xd8, 0xf0, 0x28, 0x40, + 0xd5, 0x18, 0x28, 0x80, 0x1f, 0xd6, 0x28, 0x28, 0x80, 0x0d, 0xd7, 0x48, + 0x28, 0x80, 0x04, 0xd8, 0x88, 0x28, 0x40, 0xd8, 0xc8, 0x28, 0x40, 0xd7, + 0x68, 0x28, 0x80, 0x04, 0xd8, 0xa8, 0x28, 0x40, 0xd8, 0xe8, 0x28, 0x40, + 0xd6, 0x38, 0x28, 0x80, 0x0d, 0xd7, 0x58, 0x28, 0x80, 0x04, 0xd8, 0x98, + 0x28, 0x40, 0xd8, 0xd8, 0x28, 0x40, 0xd7, 0x78, 0x28, 0x80, 0x04, 0xd8, + 0xb8, 0x28, 0x40, 0xd8, 0xf8, 0x28, 0x40, 0xd4, 0x0c, 0x28, 0x80, 0x43, + 0xd5, 0x14, 0x28, 0x80, 0x1f, 0xd6, 0x24, 0x28, 0x80, 0x0d, 0xd7, 0x44, + 0x28, 0x80, 0x04, 0xd8, 0x84, 0x28, 0x40, 0xd8, 0xc4, 0x28, 0x40, 0xd7, + 0x64, 0x28, 0x80, 0x04, 0xd8, 0xa4, 0x28, 0x40, 0xd8, 0xe4, 0x28, 0x40, + 0xd6, 0x34, 0x28, 0x80, 0x0d, 0xd7, 0x54, 0x28, 0x80, 0x04, 0xd8, 0x94, + 0x28, 0x40, 0xd8, 0xd4, 0x28, 0x40, 0xd7, 0x74, 0x28, 0x80, 0x04, 0xd8, + 0xb4, 0x28, 0x40, 0xd8, 0xf4, 0x28, 0x40, 0xd5, 0x1c, 0x28, 0x80, 0x1f, + 0xd6, 0x2c, 0x28, 0x80, 0x0d, 0xd7, 0x4c, 0x28, 0x80, 0x04, 0xd8, 0x8c, + 0x28, 0x40, 0xd8, 0xcc, 0x28, 0x40, 0xd7, 0x6c, 0x28, 0x80, 0x04, 0xd8, + 0xac, 0x28, 0x40, 0xd8, 0xec, 0x28, 0x40, 0xd6, 0x3c, 0x28, 0x80, 0x0d, + 0xd7, 0x5c, 0x28, 0x80, 0x04, 0xd8, 0x9c, 0x28, 0x40, 0xd8, 0xdc, 0x28, + 0x40, 0xd7, 0x7c, 0x28, 0x80, 0x04, 0xd8, 0xbc, 0x28, 0x40, 0xd8, 0xfc, + 0x28, 0x40, 0xd3, 0x06, 0x28, 0x80, 0x8b, 0x01, 0xd4, 0x0a, 0x28, 0x80, + 0x43, 0xd5, 0x12, 0x28, 0x80, 0x1f, 0xd6, 0x22, 0x28, 0x80, 0x0d, 0xd7, + 0x42, 0x28, 0x80, 0x04, 0xd8, 0x82, 0x28, 0x40, 0xd8, 0xc2, 0x28, 0x40, + 0xd7, 0x62, 0x28, 0x80, 0x04, 0xd8, 0xa2, 0x28, 0x40, 0xd8, 0xe2, 0x28, + 0x40, 0xd6, 0x32, 0x28, 0x80, 0x0d, 0xd7, 0x52, 0x28, 0x80, 0x04, 0xd8, + 0x92, 0x28, 0x40, 0xd8, 0xd2, 0x28, 0x40, 0xd7, 0x72, 0x28, 0x80, 0x04, + 0xd8, 0xb2, 0x28, 0x40, 0xd8, 0xf2, 0x28, 0x40, 0xd5, 0x1a, 0x28, 0x80, + 0x1f, 0xd6, 0x2a, 0x28, 0x80, 0x0d, 0xd7, 0x4a, 0x28, 0x80, 0x04, 0xd8, + 0x8a, 0x28, 0x40, 0xd8, 0xca, 0x28, 0x40, 0xd7, 0x6a, 0x28, 0x80, 0x04, + 0xd8, 0xaa, 0x28, 0x40, 0xd8, 0xea, 0x28, 0x40, 0xd6, 0x3a, 0x28, 0x80, + 0x0d, 0xd7, 0x5a, 0x28, 0x80, 0x04, 0xd8, 0x9a, 0x28, 0x40, 0xd8, 0xda, + 0x28, 0x40, 0xd7, 0x7a, 0x28, 0x80, 0x04, 0xd8, 0xba, 0x28, 0x40, 0xd8, + 0xfa, 0x28, 0x40, 0xd4, 0x0e, 0x28, 0x80, 0x43, 0xd5, 0x16, 0x28, 0x80, + 0x1f, 0xd6, 0x26, 0x28, 0x80, 0x0d, 0xd7, 0x46, 0x28, 0x80, 0x04, 0xd8, + 0x86, 0x28, 0x40, 0xd8, 0xc6, 0x28, 0x40, 0xd7, 0x66, 0x28, 0x80, 0x04, + 0xd8, 0xa6, 0x28, 0x40, 0xd8, 0xe6, 0x28, 0x40, 0xd6, 0x36, 0x28, 0x80, + 0x0d, 0xd7, 0x56, 0x28, 0x80, 0x04, 0xd8, 0x96, 0x28, 0x40, 0xd8, 0xd6, + 0x28, 0x40, 0xd7, 0x76, 0x28, 0x80, 0x04, 0xd8, 0xb6, 0x28, 0x40, 0xd8, + 0xf6, 0x28, 0x40, 0xd5, 0x1e, 0x28, 0x80, 0x1f, 0xd6, 0x2e, 0x28, 0x80, + 0x0d, 0xd7, 0x4e, 0x28, 0x80, 0x04, 0xd8, 0x8e, 0x28, 0x40, 0xd8, 0xce, + 0x28, 0x40, 0xd7, 0x6e, 0x28, 0x80, 0x04, 0xd8, 0xae, 0x28, 0x40, 0xd8, + 0xee, 0x28, 0x40, 0xd6, 0x3e, 0x28, 0x80, 0x0d, 0xd7, 0x5e, 0x28, 0x80, + 0x04, 0xd8, 0x9e, 0x28, 0x40, 0xd8, 0xde, 0x28, 0x40, 0xd7, 0x7e, 0x28, + 0x80, 0x04, 0xd8, 0xbe, 0x28, 0x40, 0xd8, 0xfe, 0x28, 0x40, 0xd2, 0x03, + 0x28, 0x80, 0x9c, 0x02, 0xd3, 0x05, 0x28, 0x80, 0x8b, 0x01, 0xd4, 0x09, + 0x28, 0x80, 0x43, 0xd5, 0x11, 0x28, 0x80, 0x1f, 0xd6, 0x21, 0x28, 0x80, + 0x0d, 0xd7, 0x41, 0x28, 0x80, 0x04, 0xd8, 0x81, 0x28, 0x40, 0xd8, 0xc1, + 0x28, 0x40, 0xd7, 0x61, 0x28, 0x80, 0x04, 0xd8, 0xa1, 0x28, 0x40, 0xd8, + 0xe1, 0x28, 0x40, 0xd6, 0x31, 0x28, 0x80, 0x0d, 0xd7, 0x51, 0x28, 0x80, + 0x04, 0xd8, 0x91, 0x28, 0x40, 0xd8, 0xd1, 0x28, 0x40, 0xd7, 0x71, 0x28, + 0x80, 0x04, 0xd8, 0xb1, 0x28, 0x40, 0xd8, 0xf1, 0x28, 0x40, 0xd5, 0x19, + 0x28, 0x80, 0x1f, 0xd6, 0x29, 0x28, 0x80, 0x0d, 0xd7, 0x49, 0x28, 0x80, + 0x04, 0xd8, 0x89, 0x28, 0x40, 0xd8, 0xc9, 0x28, 0x40, 0xd7, 0x69, 0x28, + 0x80, 0x04, 0xd8, 0xa9, 0x28, 0x40, 0xd8, 0xe9, 0x28, 0x40, 0xd6, 0x39, + 0x28, 0x80, 0x0d, 0xd7, 0x59, 0x28, 0x80, 0x04, 0xd8, 0x99, 0x28, 0x40, + 0xd8, 0xd9, 0x28, 0x40, 0xd7, 0x79, 0x28, 0x80, 0x04, 0xd8, 0xb9, 0x28, + 0x40, 0xd8, 0xf9, 0x28, 0x40, 0xd4, 0x0d, 0x28, 0x80, 0x43, 0xd5, 0x15, + 0x28, 0x80, 0x1f, 0xd6, 0x25, 0x28, 0x80, 0x0d, 0xd7, 0x45, 0x28, 0x80, + 0x04, 0xd8, 0x85, 0x28, 0x40, 0xd8, 0xc5, 0x28, 0x40, 0xd7, 0x65, 0x28, + 0x80, 0x04, 0xd8, 0xa5, 0x28, 0x40, 0xd8, 0xe5, 0x28, 0x40, 0xd6, 0x35, + 0x28, 0x80, 0x0d, 0xd7, 0x55, 0x28, 0x80, 0x04, 0xd8, 0x95, 0x28, 0x40, + 0xd8, 0xd5, 0x28, 0x40, 0xd7, 0x75, 0x28, 0x80, 0x04, 0xd8, 0xb5, 0x28, + 0x40, 0xd8, 0xf5, 0x28, 0x40, 0xd5, 0x1d, 0x28, 0x80, 0x1f, 0xd6, 0x2d, + 0x28, 0x80, 0x0d, 0xd7, 0x4d, 0x28, 0x80, 0x04, 0xd8, 0x8d, 0x28, 0x40, + 0xd8, 0xcd, 0x28, 0x40, 0xd7, 0x6d, 0x28, 0x80, 0x04, 0xd8, 0xad, 0x28, + 0x40, 0xd8, 0xed, 0x28, 0x40, 0xd6, 0x3d, 0x28, 0x80, 0x0d, 0xd7, 0x5d, + 0x28, 0x80, 0x04, 0xd8, 0x9d, 0x28, 0x40, 0xd8, 0xdd, 0x28, 0x40, 0xd7, + 0x7d, 0x28, 0x80, 0x04, 0xd8, 0xbd, 0x28, 0x40, 0xd8, 0xfd, 0x28, 0x40, + 0xd3, 0x07, 0x28, 0x80, 0x8b, 0x01, 0xd4, 0x0b, 0x28, 0x80, 0x43, 0xd5, + 0x13, 0x28, 0x80, 0x1f, 0xd6, 0x23, 0x28, 0x80, 0x0d, 0xd7, 0x43, 0x28, + 0x80, 0x04, 0xd8, 0x83, 0x28, 0x40, 0xd8, 0xc3, 0x28, 0x40, 0xd7, 0x63, + 0x28, 0x80, 0x04, 0xd8, 0xa3, 0x28, 0x40, 0xd8, 0xe3, 0x28, 0x40, 0xd6, + 0x33, 0x28, 0x80, 0x0d, 0xd7, 0x53, 0x28, 0x80, 0x04, 0xd8, 0x93, 0x28, + 0x40, 0xd8, 0xd3, 0x28, 0x40, 0xd7, 0x73, 0x28, 0x80, 0x04, 0xd8, 0xb3, + 0x28, 0x40, 0xd8, 0xf3, 0x28, 0x40, 0xd5, 0x1b, 0x28, 0x80, 0x1f, 0xd6, + 0x2b, 0x28, 0x80, 0x0d, 0xd7, 0x4b, 0x28, 0x80, 0x04, 0xd8, 0x8b, 0x28, + 0x40, 0xd8, 0xcb, 0x28, 0x40, 0xd7, 0x6b, 0x28, 0x80, 0x04, 0xd8, 0xab, + 0x28, 0x40, 0xd8, 0xeb, 0x28, 0x40, 0xd6, 0x3b, 0x28, 0x80, 0x0d, 0xd7, + 0x5b, 0x28, 0x80, 0x04, 0xd8, 0x9b, 0x28, 0x40, 0xd8, 0xdb, 0x28, 0x40, + 0xd7, 0x7b, 0x28, 0x80, 0x04, 0xd8, 0xbb, 0x28, 0x40, 0xd8, 0xfb, 0x28, + 0x40, 0xd4, 0x0f, 0x28, 0x80, 0x43, 0xd5, 0x17, 0x28, 0x80, 0x1f, 0xd6, + 0x27, 0x28, 0x80, 0x0d, 0xd7, 0x47, 0x28, 0x80, 0x04, 0xd8, 0x87, 0x28, + 0x40, 0xd8, 0xc7, 0x28, 0x40, 0xd7, 0x67, 0x28, 0x80, 0x04, 0xd8, 0xa7, + 0x28, 0x40, 0xd8, 0xe7, 0x28, 0x40, 0xd6, 0x37, 0x28, 0x80, 0x0d, 0xd7, + 0x57, 0x28, 0x80, 0x04, 0xd8, 0x97, 0x28, 0x40, 0xd8, 0xd7, 0x28, 0x40, + 0xd7, 0x77, 0x28, 0x80, 0x04, 0xd8, 0xb7, 0x28, 0x40, 0xd8, 0xf7, 0x28, + 0x40, 0xd5, 0x1f, 0x28, 0x80, 0x1f, 0xd6, 0x2f, 0x28, 0x80, 0x0d, 0xd7, + 0x4f, 0x28, 0x80, 0x04, 0xd8, 0x8f, 0x28, 0x40, 0xd8, 0xcf, 0x28, 0x40, + 0xd7, 0x6f, 0x28, 0x80, 0x04, 0xd8, 0xaf, 0x28, 0x40, 0xd8, 0xef, 0x28, + 0x40, 0xd6, 0x3f, 0x28, 0x80, 0x0d, 0xd7, 0x5f, 0x28, 0x80, 0x04, 0xd8, + 0x9f, 0x28, 0x40, 0xd8, 0xdf, 0x28, 0x40, 0xd7, 0x7f, 0x28, 0x80, 0x04, + 0xd8, 0xbf, 0x28, 0x40, 0xd8, 0xff, 0x28, 0x40, 0xa4, 0x95, 0x05, 0x07, + 0xec, 0x05, 0xca, 0x02, 0x07, 0xff, 0x39, 0xb1, 0x01, 0x0c, 0x6d, 0x16, + 0x89, 0x01, 0x05, 0x5a, 0x03, 0x61, 0xb6, 0x01, 0xff, 0x45, 0xe4, 0x23, + 0x46, 0x10, 0x01, 0x0a, 0x41, 0x77, 0x01, 0xff, 0xa1, 0x45, 0x4e, 0x33, + 0x76, 0x39, 0x10, 0x01, 0xe5, 0x42, 0x10, 0x01, 0xe9, 0x3a, 0x10, 0x81, + 0x32, 0xef, 0x44, 0x10, 0x81, 0x20, 0xf5, 0x3c, 0x10, 0x81, 0x17, 0x08, + 0x22, 0xc1, 0x01, 0xff, 0xec, 0x40, 0x10, 0x81, 0x09, 0xf2, 0x3e, 0x10, + 0xc1, 0x00, 0xf2, 0x3f, 0x10, 0x41, 0xec, 0x41, 0x10, 0x41, 0xf5, 0x3d, + 0x10, 0x41, 0x0f, 0x4b, 0x6f, 0x01, 0xff, 0xe5, 0x73, 0x10, 0x01, 0xef, + 0x74, 0x10, 0x41, 0xe9, 0x3b, 0x10, 0x41, 0xe1, 0x38, 0x10, 0x01, 0xe9, + 0x43, 0x10, 0x01, 0xf5, 0x45, 0x10, 0x41, 0x48, 0x3c, 0x16, 0x01, 0x10, + 0x01, 0x4b, 0xd7, 0x23, 0x00, 0x10, 0x01, 0x4b, 0xe6, 0x9d, 0x03, 0x10, + 0x01, 0x50, 0x86, 0x65, 0x70, 0x10, 0x01, 0x4b, 0x6e, 0xa4, 0x04, 0x10, + 0x01, 0x47, 0xea, 0x4b, 0x02, 0x10, 0x41, 0x4c, 0x87, 0x8d, 0x4c, 0x10, + 0x01, 0x02, 0x3b, 0x01, 0x0f, 0xac, 0x01, 0xff, 0x43, 0xee, 0x07, 0x4b, + 0x10, 0x01, 0x44, 0xa6, 0x79, 0x4d, 0x10, 0x41, 0xf4, 0x49, 0x10, 0x01, + 0x48, 0xba, 0x41, 0x4a, 0x10, 0x41, 0x45, 0x12, 0x0b, 0x59, 0x10, 0x81, + 0x88, 0x01, 0xa6, 0x69, 0x46, 0xa0, 0x61, 0x7f, 0x10, 0x01, 0x44, 0xcf, + 0x2a, 0x5a, 0x10, 0x81, 0x56, 0x43, 0x0e, 0x0b, 0x52, 0x10, 0x81, 0x40, + 0xb3, 0x24, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0x5b, 0x10, 0x01, 0xa8, + 0x0d, 0xb7, 0x01, 0xff, 0x44, 0xcb, 0x1d, 0x5c, 0x10, 0x01, 0xef, 0x53, + 0x10, 0x41, 0x44, 0x7b, 0x11, 0x5d, 0x10, 0x01, 0x43, 0x26, 0x01, 0x54, + 0x10, 0x41, 0x44, 0xc9, 0x1d, 0x58, 0x10, 0x81, 0x0d, 0x42, 0x01, 0x26, + 0x57, 0x10, 0xc1, 0x00, 0x42, 0x7d, 0x11, 0x60, 0x10, 0x41, 0x42, 0x7d, + 0x11, 0x61, 0x10, 0x41, 0x80, 0x01, 0xff, 0x47, 0x71, 0x11, 0x64, 0x10, + 0x01, 0x48, 0x40, 0x5e, 0x65, 0x10, 0x41, 0x42, 0x7d, 0x11, 0x63, 0x10, + 0x41, 0xa9, 0x0f, 0xaf, 0x01, 0xff, 0x43, 0x7c, 0x11, 0x5e, 0x10, 0x01, + 0x42, 0x42, 0x00, 0x55, 0x10, 0x41, 0x43, 0x52, 0x4d, 0x5f, 0x10, 0x01, + 0x42, 0x32, 0x00, 0x56, 0x10, 0x41, 0xf9, 0x62, 0x10, 0x41, 0xe1, 0x05, + 0x10, 0x81, 0xb4, 0x02, 0xa2, 0xa7, 0x02, 0xa3, 0x9a, 0x02, 0xa4, 0x81, + 0x02, 0xe5, 0x0f, 0x10, 0x01, 0xa7, 0xf0, 0x01, 0x42, 0x22, 0x00, 0x33, + 0x10, 0x01, 0xe9, 0x07, 0x10, 0x81, 0xe0, 0x01, 0xaa, 0xd3, 0x01, 0xab, + 0xc6, 0x01, 0xac, 0xb9, 0x01, 0x42, 0x6c, 0x00, 0x2b, 0x10, 0x01, 0xae, + 0x9a, 0x01, 0xef, 0x11, 0x10, 0x81, 0x69, 0xb0, 0x5d, 0x42, 0x71, 0x00, + 0x2d, 0x10, 0x01, 0xb3, 0x45, 0xb4, 0x2c, 0xf5, 0x09, 0x10, 0x81, 0x23, + 0xb6, 0x06, 0x42, 0xbc, 0x22, 0x2c, 0x10, 0x41, 0xe1, 0x2f, 0x10, 0x01, + 0x07, 0x23, 0xc1, 0x01, 0xff, 0xec, 0x0d, 0x10, 0x81, 0x09, 0xf2, 0x0b, + 0x10, 0xc1, 0x00, 0xf2, 0x0c, 0x10, 0x41, 0xec, 0x0e, 0x10, 0x41, 0xf5, + 0x0a, 0x10, 0x41, 0xe1, 0x22, 0x10, 0x01, 0x42, 0x22, 0x00, 0x23, 0x10, + 0x01, 0xb4, 0x01, 0xff, 0xe1, 0x1d, 0x10, 0x01, 0x42, 0x22, 0x00, 0x1e, + 0x10, 0x41, 0xe1, 0x32, 0x10, 0x01, 0x42, 0x22, 0x00, 0x30, 0x10, 0x01, + 0x42, 0x40, 0x06, 0x31, 0x10, 0x41, 0xe1, 0x27, 0x10, 0x01, 0x42, 0x22, + 0x00, 0x28, 0x10, 0x41, 0x09, 0x87, 0x65, 0x01, 0xff, 0x02, 0x60, 0x07, + 0x19, 0x44, 0x85, 0xf1, 0x37, 0x10, 0x01, 0x43, 0x8c, 0x41, 0x36, 0x10, + 0x01, 0x06, 0x33, 0x07, 0x01, 0xff, 0xe5, 0x71, 0x10, 0x01, 0xef, 0x72, + 0x10, 0x41, 0xe1, 0x75, 0x10, 0x01, 0x42, 0x74, 0x00, 0x35, 0x10, 0x41, + 0xe1, 0x26, 0x10, 0x01, 0x42, 0x24, 0x02, 0x17, 0x10, 0x01, 0x42, 0x2a, + 0x05, 0x21, 0x10, 0x01, 0x42, 0xbc, 0x22, 0x1c, 0x10, 0x41, 0xe1, 0x2e, + 0x10, 0x01, 0x42, 0x74, 0x00, 0x34, 0x10, 0x41, 0xe1, 0x13, 0x10, 0x01, + 0x42, 0x22, 0x00, 0x14, 0x10, 0x41, 0xe1, 0x1a, 0x10, 0x01, 0x42, 0x22, + 0x00, 0x1b, 0x10, 0x41, 0xe9, 0x08, 0x10, 0x41, 0xe1, 0x15, 0x10, 0x01, + 0x42, 0x22, 0x00, 0x16, 0x10, 0x41, 0xe1, 0x24, 0x10, 0x01, 0xa4, 0x06, + 0x42, 0x22, 0x00, 0x25, 0x10, 0x41, 0xe1, 0x1f, 0x10, 0x01, 0x42, 0x22, + 0x00, 0x20, 0x10, 0x41, 0xe1, 0x18, 0x10, 0x01, 0x42, 0x22, 0x00, 0x19, + 0x10, 0x41, 0xe1, 0x29, 0x10, 0x01, 0x42, 0x22, 0x00, 0x2a, 0x10, 0x41, + 0xe1, 0x06, 0x10, 0x01, 0xe9, 0x10, 0x10, 0x01, 0xf5, 0x12, 0x10, 0x41, + 0x44, 0x73, 0x20, 0x47, 0x10, 0x01, 0x05, 0xf0, 0x06, 0x06, 0x4b, 0x09, + 0xa1, 0x48, 0x10, 0x41, 0x45, 0x12, 0x0b, 0x6e, 0x10, 0x01, 0xa6, 0x2e, + 0x44, 0xcf, 0x2a, 0x6f, 0x10, 0x01, 0x43, 0x0e, 0x0b, 0x67, 0x10, 0x01, + 0xb3, 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, 0x66, 0x10, 0x41, 0x44, 0x25, + 0x01, 0x69, 0x10, 0x01, 0x42, 0x15, 0x02, 0x68, 0x10, 0x41, 0x44, 0xc9, + 0x1d, 0x6d, 0x10, 0x01, 0x42, 0x01, 0x26, 0x6c, 0x10, 0x41, 0x43, 0xd2, + 0x05, 0x6b, 0x10, 0x01, 0x43, 0xf6, 0x06, 0x6a, 0x10, 0x41, 0x42, 0x17, + 0x00, 0x17, 0xf4, 0x01, 0x03, 0x03, 0x24, 0xee, 0x10, 0x42, 0xb6, 0x05, + 0xa3, 0xf4, 0x01, 0x42, 0xcd, 0x05, 0xb4, 0xf9, 0x01, 0xaf, 0xc3, 0x10, + 0x07, 0xc7, 0xd4, 0xe0, 0x0d, 0x02, 0xee, 0x05, 0xe6, 0x0b, 0x45, 0xe6, + 0xeb, 0x90, 0xf4, 0x81, 0xd8, 0x0b, 0xb7, 0xa1, 0x0b, 0xb8, 0x0b, 0xf9, + 0x66, 0xf4, 0xc1, 0x00, 0x48, 0x77, 0x4b, 0xc9, 0xf6, 0x41, 0x0a, 0xc9, + 0xa5, 0x06, 0x49, 0x86, 0xba, 0x4a, 0xf9, 0x41, 0x02, 0x3b, 0x01, 0xf6, + 0x08, 0x06, 0x6d, 0x15, 0xc2, 0x07, 0xac, 0xae, 0x02, 0x06, 0xc8, 0x00, + 0xf1, 0x01, 0x03, 0x7d, 0x15, 0x5e, 0x09, 0x32, 0x00, 0x01, 0xff, 0x0b, + 0x26, 0x9b, 0x43, 0x0a, 0x6d, 0x15, 0x2d, 0x0a, 0x96, 0x64, 0x17, 0x0b, + 0xab, 0xa2, 0x01, 0xff, 0x51, 0xa6, 0x5a, 0x6a, 0x25, 0x00, 0x4b, 0x8b, + 0x9e, 0x61, 0x25, 0x00, 0x4c, 0x83, 0x94, 0x5e, 0x25, 0x40, 0x50, 0x63, + 0x3a, 0x3f, 0x25, 0x00, 0x4a, 0xa9, 0xac, 0x25, 0x25, 0x00, 0x4b, 0xfb, + 0xa1, 0x1d, 0x25, 0x40, 0x50, 0x78, 0x3a, 0x42, 0x25, 0x00, 0x4a, 0xb3, + 0xac, 0x28, 0x25, 0x00, 0x4b, 0xa0, 0x64, 0x20, 0x25, 0x40, 0x51, 0xb7, + 0x5a, 0x6b, 0x25, 0x00, 0x4b, 0x96, 0x9e, 0x62, 0x25, 0x00, 0x4c, 0x8f, + 0x94, 0x5f, 0x25, 0x40, 0x0b, 0x26, 0x9b, 0x79, 0x0a, 0x6d, 0x15, 0x48, + 0x0a, 0x96, 0x64, 0x17, 0x0b, 0xab, 0xa2, 0x01, 0xff, 0x51, 0xa6, 0x5a, + 0x67, 0x25, 0x00, 0x4b, 0x8b, 0x9e, 0x5b, 0x25, 0x00, 0x4c, 0x83, 0x94, + 0x58, 0x25, 0x40, 0x55, 0x5e, 0x3a, 0x48, 0x25, 0x00, 0x50, 0x63, 0x3a, + 0x37, 0x25, 0x00, 0x05, 0xc3, 0x00, 0x11, 0x06, 0xc8, 0x00, 0x01, 0xff, + 0x4a, 0x68, 0x15, 0x22, 0x25, 0x00, 0x45, 0x6d, 0x15, 0x15, 0x25, 0x40, + 0x4a, 0x68, 0x15, 0x2a, 0x25, 0x00, 0x45, 0x6d, 0x15, 0x19, 0x25, 0x40, + 0x55, 0x73, 0x3a, 0x40, 0x25, 0x00, 0x50, 0x78, 0x3a, 0x38, 0x25, 0x00, + 0x05, 0xc3, 0x00, 0x11, 0x06, 0xc8, 0x00, 0x01, 0xff, 0x4a, 0xd7, 0x16, + 0x1e, 0x25, 0x00, 0x45, 0xc3, 0x01, 0x16, 0x25, 0x40, 0x4a, 0xd7, 0x16, + 0x26, 0x25, 0x00, 0x45, 0xc3, 0x01, 0x1a, 0x25, 0x40, 0x51, 0xb7, 0x5a, + 0x68, 0x25, 0x00, 0x4b, 0x96, 0x9e, 0x5c, 0x25, 0x00, 0x4c, 0x8f, 0x94, + 0x59, 0x25, 0x40, 0x5c, 0x6e, 0x17, 0x46, 0x25, 0x00, 0x0f, 0x73, 0x17, + 0x1c, 0x0f, 0xc3, 0x6f, 0x06, 0x5c, 0x66, 0x19, 0x44, 0x25, 0x40, 0x4a, + 0x68, 0x15, 0x31, 0x25, 0x00, 0x48, 0xc4, 0x16, 0x39, 0x25, 0x00, 0x4e, + 0x75, 0x7e, 0x49, 0x25, 0x40, 0x4a, 0xd7, 0x16, 0x2e, 0x25, 0x00, 0x48, + 0x7d, 0x15, 0x36, 0x25, 0x00, 0x4e, 0x83, 0x7e, 0x3e, 0x25, 0x40, 0x04, + 0xc4, 0x00, 0xd4, 0x04, 0x05, 0xc9, 0x00, 0x01, 0xff, 0x04, 0xaa, 0x17, + 0xa9, 0x04, 0x55, 0xa1, 0x39, 0x1e, 0xcc, 0x01, 0xa4, 0xc4, 0x01, 0x4a, + 0x0b, 0x00, 0x00, 0x25, 0x80, 0xa3, 0x01, 0x44, 0xc3, 0x00, 0x74, 0x25, + 0x80, 0x95, 0x01, 0x0f, 0x1b, 0x72, 0x84, 0x01, 0x45, 0xc8, 0x00, 0x76, + 0x25, 0x00, 0xb4, 0x65, 0x42, 0x50, 0x02, 0x75, 0x25, 0x80, 0x3f, 0x48, + 0x32, 0x00, 0x02, 0x25, 0xc0, 0x00, 0x05, 0x19, 0x00, 0x01, 0xff, 0x07, + 0x9b, 0x0d, 0x23, 0x4a, 0x0b, 0x00, 0x3c, 0x25, 0x00, 0x44, 0xc3, 0x00, + 0x24, 0x25, 0x00, 0x45, 0xc8, 0x00, 0x1c, 0x25, 0x00, 0x04, 0x1e, 0x00, + 0x01, 0xff, 0x44, 0xc3, 0x00, 0x18, 0xce, 0x01, 0x45, 0xc8, 0x00, 0x16, + 0xce, 0x41, 0x44, 0xc3, 0x00, 0x19, 0xce, 0x01, 0x45, 0xc8, 0x00, 0x17, + 0xce, 0x41, 0x05, 0x19, 0x00, 0x01, 0xff, 0xa8, 0x0c, 0x44, 0xc3, 0x00, + 0x18, 0x25, 0x00, 0x45, 0xc8, 0x00, 0x14, 0x25, 0x40, 0x49, 0xfe, 0xb7, + 0x7d, 0x25, 0x00, 0x49, 0x0c, 0x00, 0x34, 0x25, 0x40, 0x51, 0xe8, 0x5c, + 0x1d, 0xcc, 0x01, 0x0b, 0x74, 0x37, 0x01, 0xff, 0x4a, 0x0b, 0x00, 0x04, + 0x25, 0x00, 0x48, 0x32, 0x00, 0x06, 0x25, 0x40, 0x4a, 0x0b, 0x00, 0x08, + 0x25, 0x00, 0x48, 0x32, 0x00, 0x0a, 0x25, 0x40, 0x50, 0xf6, 0x5f, 0x7c, + 0x25, 0x40, 0x80, 0x01, 0xff, 0x04, 0x1a, 0x00, 0x06, 0x54, 0xa6, 0x38, + 0xaf, 0xfb, 0x41, 0x4b, 0xf8, 0x02, 0x1c, 0xcc, 0x01, 0x4b, 0x98, 0x02, + 0x1b, 0xcc, 0x41, 0x08, 0xe4, 0x25, 0x31, 0xaf, 0x01, 0xff, 0x0a, 0x8f, + 0xb2, 0x1e, 0x42, 0xa7, 0x01, 0x77, 0x25, 0xc0, 0x00, 0x05, 0x19, 0x00, + 0x01, 0xff, 0x4a, 0x0b, 0x00, 0x2c, 0x25, 0x00, 0x44, 0xc3, 0x00, 0x10, + 0x25, 0x00, 0x45, 0xc8, 0x00, 0x0c, 0x25, 0x40, 0x4a, 0x0b, 0x00, 0x4c, + 0x25, 0x00, 0x48, 0x32, 0x00, 0x4e, 0x25, 0x40, 0x45, 0x95, 0x10, 0x73, + 0x25, 0x00, 0x47, 0x95, 0x44, 0xae, 0xfb, 0x01, 0x0e, 0x96, 0x03, 0x8a, + 0x02, 0x07, 0x7d, 0x02, 0xc2, 0x01, 0x06, 0x6d, 0x02, 0x01, 0xff, 0x0a, + 0x73, 0x02, 0x6a, 0x08, 0x84, 0x02, 0x2d, 0x09, 0x5f, 0x0f, 0x01, 0xff, + 0x06, 0x13, 0x01, 0x18, 0x07, 0x7d, 0x02, 0x01, 0xff, 0x55, 0xab, 0x03, + 0xd9, 0xfb, 0x01, 0x44, 0xc3, 0x00, 0xd1, 0xfb, 0xc1, 0x00, 0x4f, 0xb1, + 0x03, 0xdd, 0xfb, 0x41, 0x46, 0x73, 0x02, 0xd6, 0xfb, 0x01, 0x44, 0xc3, + 0x00, 0x71, 0x25, 0x40, 0x06, 0x13, 0x01, 0x22, 0x07, 0x7d, 0x02, 0x01, + 0xff, 0x0a, 0x73, 0x02, 0x0d, 0x45, 0xc8, 0x00, 0xd2, 0xfb, 0xc1, 0x00, + 0x4e, 0xb4, 0x4c, 0xdf, 0xfb, 0x41, 0x4a, 0x96, 0x03, 0xdb, 0xfb, 0x01, + 0x4b, 0x98, 0x02, 0xd8, 0xfb, 0x41, 0x46, 0x73, 0x02, 0xd4, 0xfb, 0x81, + 0x06, 0x45, 0xc8, 0x00, 0x72, 0x25, 0x40, 0x4f, 0x93, 0x18, 0xdc, 0xfb, + 0x41, 0x06, 0x13, 0x01, 0x3f, 0x07, 0x7d, 0x02, 0x01, 0xff, 0x44, 0xc3, + 0x00, 0xa0, 0xfb, 0x81, 0x1d, 0x45, 0xc8, 0x00, 0xa1, 0xfb, 0xc1, 0x00, + 0x80, 0x01, 0xff, 0x5f, 0xf1, 0x10, 0xa9, 0xfb, 0x01, 0x4f, 0x89, 0x02, + 0xa5, 0xfb, 0xc1, 0x00, 0x4f, 0x79, 0x02, 0xaa, 0xfb, 0x41, 0x80, 0x01, + 0xff, 0x60, 0x54, 0x0f, 0xa8, 0xfb, 0x01, 0x4f, 0x89, 0x02, 0xa4, 0xfb, + 0xc1, 0x00, 0x50, 0x8e, 0x19, 0xab, 0xfb, 0x41, 0x44, 0xc3, 0x00, 0xd7, + 0xfb, 0x01, 0x45, 0xc8, 0x00, 0xd5, 0xfb, 0x41, 0x08, 0x84, 0x02, 0x1b, + 0x09, 0x5f, 0x0f, 0x01, 0xff, 0x06, 0x13, 0x01, 0x06, 0x6b, 0x6d, 0x02, + 0xad, 0xfb, 0x41, 0x46, 0x73, 0x02, 0xa3, 0xfb, 0x01, 0x44, 0xc3, 0x00, + 0xd0, 0xfb, 0x41, 0x06, 0x13, 0x01, 0x0d, 0x5c, 0x82, 0x19, 0xa7, 0xfb, + 0xc1, 0x00, 0x50, 0x88, 0x02, 0xac, 0xfb, 0x41, 0x46, 0x73, 0x02, 0xa2, + 0xfb, 0x81, 0x06, 0x45, 0xc8, 0x00, 0xd3, 0xfb, 0x41, 0x50, 0x8e, 0x19, + 0xa6, 0xfb, 0x41, 0x5c, 0xa4, 0x03, 0xda, 0xfb, 0x01, 0x5b, 0xd7, 0x1d, + 0xde, 0xfb, 0x41, 0x09, 0x0c, 0x49, 0x11, 0x07, 0xb3, 0x5e, 0x01, 0xff, + 0x44, 0xc3, 0x00, 0x6f, 0x25, 0x00, 0x45, 0xc8, 0x00, 0x70, 0x25, 0x40, + 0x44, 0xc3, 0x00, 0x6e, 0x25, 0x00, 0x45, 0xc8, 0x00, 0x6d, 0x25, 0x40, + 0x5d, 0x68, 0x15, 0x45, 0x25, 0x00, 0x10, 0x6d, 0x15, 0x1c, 0x10, 0x96, + 0x64, 0x06, 0x5d, 0xc4, 0x16, 0x43, 0x25, 0x40, 0x4a, 0x68, 0x15, 0x32, + 0x25, 0x00, 0x48, 0xc4, 0x16, 0x3a, 0x25, 0x00, 0x4e, 0x75, 0x7e, 0x4a, + 0x25, 0x40, 0x4a, 0xd7, 0x16, 0x2d, 0x25, 0x00, 0x48, 0x7d, 0x15, 0x35, + 0x25, 0x00, 0x4e, 0x83, 0x7e, 0x3d, 0x25, 0x40, 0x02, 0x3b, 0x01, 0x7d, + 0x4a, 0x0b, 0x00, 0x01, 0x25, 0x00, 0x44, 0xc3, 0x00, 0x78, 0x25, 0x80, + 0x6a, 0x0f, 0x1b, 0x72, 0x5a, 0x45, 0xc8, 0x00, 0x7a, 0x25, 0x00, 0x0c, + 0x73, 0x37, 0x44, 0x42, 0x50, 0x02, 0x79, 0x25, 0x80, 0x1e, 0x48, 0x32, + 0x00, 0x03, 0x25, 0xc0, 0x00, 0x05, 0x19, 0x00, 0x01, 0xff, 0x4a, 0x0b, + 0x00, 0x4b, 0x25, 0x00, 0x44, 0xc3, 0x00, 0x2b, 0x25, 0x00, 0x45, 0xc8, + 0x00, 0x23, 0x25, 0x40, 0x05, 0x19, 0x00, 0x01, 0xff, 0x4a, 0x0b, 0x00, + 0x3b, 0x25, 0x00, 0xac, 0x06, 0x45, 0xc8, 0x00, 0x17, 0x25, 0x40, 0x43, + 0xc4, 0x00, 0x1b, 0x25, 0x00, 0x49, 0xd2, 0x16, 0x7f, 0x25, 0x40, 0x4a, + 0x0b, 0x00, 0x05, 0x25, 0x00, 0x48, 0x32, 0x00, 0x07, 0x25, 0x40, 0x4a, + 0x0b, 0x00, 0x09, 0x25, 0x00, 0x48, 0x32, 0x00, 0x0b, 0x25, 0x40, 0x50, + 0x06, 0x60, 0x7e, 0x25, 0x40, 0x0a, 0x8f, 0xb2, 0x1e, 0x42, 0xa7, 0x01, + 0x7b, 0x25, 0xc0, 0x00, 0x05, 0x19, 0x00, 0x01, 0xff, 0x4a, 0x0b, 0x00, + 0x33, 0x25, 0x00, 0x44, 0xc3, 0x00, 0x13, 0x25, 0x00, 0x45, 0xc8, 0x00, + 0x0f, 0x25, 0x40, 0x4a, 0x0b, 0x00, 0x4d, 0x25, 0x00, 0x48, 0x32, 0x00, + 0x4f, 0x25, 0x40, 0x05, 0x3d, 0x01, 0x92, 0x01, 0x03, 0xa0, 0x14, 0x01, + 0xff, 0x0b, 0x26, 0x9b, 0x77, 0x0a, 0x6d, 0x15, 0x47, 0x0a, 0x96, 0x64, + 0x17, 0x0b, 0xab, 0xa2, 0x01, 0xff, 0x51, 0xa6, 0x5a, 0x64, 0x25, 0x00, + 0x4b, 0x8b, 0x9e, 0x55, 0x25, 0x00, 0x4c, 0x83, 0x94, 0x52, 0x25, 0x40, + 0x50, 0x63, 0x3a, 0x2f, 0x25, 0x00, 0x05, 0xc3, 0x00, 0x16, 0x06, 0xc8, + 0x00, 0x06, 0x53, 0x18, 0x4e, 0x47, 0x25, 0x40, 0x45, 0x6d, 0x15, 0x0d, + 0x25, 0x00, 0x48, 0xc4, 0x16, 0x21, 0x25, 0x40, 0x45, 0x6d, 0x15, 0x11, + 0x25, 0x00, 0x48, 0xc4, 0x16, 0x29, 0x25, 0x40, 0x50, 0x78, 0x3a, 0x30, + 0x25, 0x00, 0x05, 0xc3, 0x00, 0x16, 0x06, 0xc8, 0x00, 0x06, 0x53, 0x2b, + 0x4e, 0x41, 0x25, 0x40, 0x45, 0xc3, 0x01, 0x0e, 0x25, 0x00, 0x48, 0x7d, + 0x15, 0x1f, 0x25, 0x40, 0x45, 0xc3, 0x01, 0x12, 0x25, 0x00, 0x48, 0x7d, + 0x15, 0x27, 0x25, 0x40, 0x51, 0xb7, 0x5a, 0x65, 0x25, 0x00, 0x4b, 0x96, + 0x9e, 0x56, 0x25, 0x00, 0x4c, 0x8f, 0x94, 0x53, 0x25, 0x40, 0xa4, 0x3a, + 0x4a, 0x0b, 0x00, 0x50, 0x25, 0x00, 0x07, 0xb3, 0x5e, 0x1e, 0x48, 0x32, + 0x00, 0x51, 0x25, 0xc0, 0x00, 0x05, 0x19, 0x00, 0x01, 0xff, 0x4a, 0x0b, + 0x00, 0x6c, 0x25, 0x00, 0x44, 0xc3, 0x00, 0x63, 0x25, 0x00, 0x45, 0xc8, + 0x00, 0x60, 0x25, 0x40, 0x4a, 0x0b, 0x00, 0x69, 0x25, 0x00, 0x44, 0xc3, + 0x00, 0x5d, 0x25, 0x00, 0x45, 0xc8, 0x00, 0x5a, 0x25, 0x40, 0x08, 0xe4, + 0x25, 0x17, 0x08, 0x0d, 0x49, 0x01, 0xff, 0x4a, 0x0b, 0x00, 0x66, 0x25, + 0x00, 0x44, 0xc3, 0x00, 0x57, 0x25, 0x00, 0x45, 0xc8, 0x00, 0x54, 0x25, + 0x40, 0x6a, 0x96, 0x03, 0x09, 0xce, 0x01, 0x06, 0x6d, 0x02, 0x01, 0xff, + 0x08, 0x84, 0x02, 0x06, 0x53, 0xaf, 0x4c, 0x1f, 0xcc, 0x41, 0x4b, 0xf8, + 0x02, 0x20, 0xcc, 0x01, 0x5c, 0x86, 0x18, 0x0a, 0xce, 0x41, 0x4a, 0xa1, + 0xa5, 0xf9, 0xf3, 0x01, 0xac, 0x18, 0x43, 0xd8, 0x25, 0xc8, 0x22, 0xc0, + 0x00, 0x06, 0x50, 0x00, 0x01, 0xff, 0x4f, 0x78, 0x6f, 0xd1, 0x29, 0x00, + 0x50, 0xb6, 0x66, 0xd2, 0x29, 0x40, 0x80, 0x06, 0x43, 0xa1, 0x01, 0xb3, + 0xf3, 0x41, 0x4a, 0xa7, 0xae, 0x4f, 0xf5, 0x01, 0x4a, 0x93, 0xb3, 0x63, + 0xf9, 0x41, 0x4b, 0x74, 0x97, 0x95, 0xf3, 0x41, 0x54, 0x24, 0x44, 0x7e, + 0xf3, 0x01, 0x03, 0xac, 0x05, 0x01, 0xff, 0x57, 0xbf, 0x1b, 0x3b, 0x29, + 0x00, 0x4d, 0x72, 0x0b, 0xdf, 0x23, 0x00, 0x05, 0x22, 0x00, 0x65, 0x15, + 0x80, 0x3c, 0x55, 0x05, 0xc3, 0x00, 0x37, 0x4b, 0xd8, 0x21, 0xdd, 0x23, + 0x00, 0x06, 0xc8, 0x00, 0x13, 0x4e, 0xc8, 0x26, 0xb5, 0x23, 0x80, 0x06, + 0x56, 0x54, 0x09, 0xe1, 0x23, 0x40, 0x58, 0xbe, 0x26, 0xb6, 0x23, 0x40, + 0xa3, 0x0c, 0x4c, 0x7f, 0x8f, 0x25, 0x2e, 0x00, 0x69, 0x8e, 0x04, 0xee, + 0xfb, 0x41, 0x45, 0x1e, 0x0b, 0x1f, 0x23, 0x00, 0x43, 0x27, 0x0d, 0x0c, + 0x23, 0x40, 0xa3, 0x0c, 0x4c, 0x7f, 0x8f, 0x24, 0x2e, 0x00, 0x6a, 0x18, + 0x03, 0xed, 0xfb, 0x41, 0x45, 0x1e, 0x0b, 0x1e, 0x23, 0x00, 0x43, 0x27, + 0x0d, 0x0d, 0x23, 0x40, 0x4c, 0x0c, 0x03, 0xea, 0xfb, 0x01, 0x4c, 0x32, + 0x11, 0xe2, 0xfb, 0x41, 0x4c, 0x0c, 0x03, 0xcb, 0x2b, 0x00, 0x10, 0x56, + 0x63, 0x50, 0x48, 0x94, 0x26, 0x21, 0x23, 0x00, 0x04, 0xc3, 0x00, 0x28, + 0x05, 0xc8, 0x00, 0x06, 0x4f, 0x65, 0x73, 0xe7, 0xcd, 0x41, 0x4c, 0xd7, + 0x21, 0x5c, 0x2e, 0x00, 0x09, 0x5d, 0x63, 0x01, 0xff, 0x44, 0x05, 0x44, + 0x5f, 0xcc, 0x01, 0x0c, 0x7b, 0x96, 0x01, 0xff, 0xd1, 0xe9, 0xcd, 0x01, + 0xd2, 0xeb, 0xcd, 0x41, 0x4c, 0xd7, 0x21, 0x5b, 0x2e, 0x00, 0x09, 0x5d, + 0x63, 0x01, 0xff, 0x44, 0x05, 0x44, 0x5d, 0xcc, 0x01, 0x0c, 0x7b, 0x96, + 0x01, 0xff, 0xd1, 0xed, 0xcd, 0x01, 0xd2, 0xef, 0xcd, 0x41, 0x44, 0x05, + 0x44, 0x5e, 0xcc, 0x01, 0x0c, 0x7b, 0x96, 0x01, 0xff, 0xd1, 0xf1, 0xcd, + 0x01, 0xd2, 0xf2, 0xcd, 0x01, 0xd3, 0xf3, 0xcd, 0x01, 0xd4, 0xf4, 0xcd, + 0x41, 0x0d, 0xdf, 0x82, 0xc5, 0x02, 0x07, 0xec, 0x05, 0x01, 0xff, 0xe1, + 0x1a, 0x31, 0x80, 0x8f, 0x02, 0xe2, 0x05, 0x31, 0x80, 0x85, 0x02, 0xe3, + 0x18, 0x31, 0x80, 0xfb, 0x01, 0xe4, 0x09, 0x31, 0x00, 0xe5, 0x1c, 0x31, + 0x80, 0xd4, 0x01, 0xe6, 0x08, 0x31, 0x00, 0xe7, 0x0d, 0x31, 0x80, 0xba, + 0x01, 0xe8, 0x0f, 0x31, 0x00, 0xe9, 0x27, 0x31, 0x80, 0x95, 0x01, 0xea, + 0x10, 0x31, 0x80, 0x8b, 0x01, 0xeb, 0x0e, 0x31, 0x80, 0x81, 0x01, 0xec, + 0x0c, 0x31, 0x80, 0x78, 0xed, 0x07, 0x31, 0x00, 0xee, 0x0b, 0x31, 0x80, + 0x62, 0xef, 0x1b, 0x31, 0x80, 0x3d, 0xf0, 0x06, 0x31, 0x00, 0xf1, 0x11, + 0x31, 0x00, 0xf2, 0x16, 0x31, 0x00, 0xf3, 0x19, 0x31, 0x80, 0x28, 0xf4, + 0x0a, 0x31, 0x00, 0xf5, 0x28, 0x31, 0x80, 0x19, 0xf6, 0x2a, 0x31, 0x00, + 0xf8, 0x12, 0x31, 0x00, 0xfa, 0x17, 0x31, 0xc0, 0x00, 0xe8, 0x13, 0x31, + 0x00, 0xe9, 0xa1, 0x31, 0x00, 0xf9, 0xba, 0x31, 0x40, 0x42, 0x4e, 0x1f, + 0xab, 0x31, 0x40, 0xe8, 0x15, 0x31, 0x40, 0x4f, 0x75, 0x3b, 0x2e, 0x31, + 0x00, 0xe5, 0xbe, 0x31, 0x00, 0xed, 0xb1, 0x31, 0x00, 0xae, 0x08, 0xef, + 0xa6, 0x31, 0x00, 0xf5, 0x21, 0x31, 0x40, 0xe7, 0xb2, 0x31, 0x00, 0xee, + 0xa7, 0x31, 0x40, 0xe7, 0x2b, 0x31, 0x80, 0x04, 0xee, 0x2f, 0x31, 0x40, + 0xe7, 0xad, 0x31, 0x40, 0xe8, 0xb9, 0x31, 0x40, 0xf7, 0xbd, 0x31, 0x40, + 0xe9, 0xa2, 0x31, 0x40, 0xe8, 0x2d, 0x31, 0x00, 0xed, 0xac, 0x31, 0x00, + 0x42, 0x4e, 0x1f, 0xaa, 0x31, 0x80, 0x08, 0xf2, 0xa8, 0x31, 0x00, 0xf5, + 0x29, 0x31, 0x40, 0xee, 0xb3, 0x31, 0x40, 0xe8, 0xb8, 0x31, 0x00, 0xee, + 0x2c, 0x31, 0x00, 0xf5, 0xa3, 0x31, 0x00, 0xf7, 0xbc, 0x31, 0x40, 0xe5, + 0xa4, 0x31, 0x00, 0xe8, 0x1d, 0x31, 0x00, 0xe9, 0x1f, 0x31, 0x00, 0xee, + 0x23, 0x31, 0x80, 0x04, 0xf2, 0x26, 0x31, 0x40, 0xe7, 0x25, 0x31, 0x00, + 0xee, 0xa5, 0x31, 0x40, 0xe8, 0x14, 0x31, 0x40, 0xf5, 0xa0, 0x31, 0x40, + 0xe8, 0xbf, 0x31, 0x00, 0xe9, 0x1e, 0x31, 0x80, 0x1c, 0xed, 0xb0, 0x31, + 0x00, 0xee, 0x22, 0x31, 0x80, 0x0b, 0xf5, 0x20, 0x31, 0xc0, 0x00, 0x42, + 0x4e, 0x1f, 0xaf, 0x31, 0x40, 0xe7, 0x24, 0x31, 0x00, 0xee, 0xa9, 0x31, + 0x40, 0x42, 0x4e, 0x1f, 0xae, 0x31, 0x40, 0xe7, 0xbb, 0x31, 0x00, 0xe8, + 0xb7, 0x31, 0x00, 0xeb, 0xb6, 0x31, 0x00, 0xf0, 0xb4, 0x31, 0x00, 0xf4, + 0xb5, 0x31, 0x40, 0xeb, 0x6e, 0xf5, 0x81, 0x06, 0x46, 0xda, 0xd3, 0x83, + 0xfa, 0x41, 0x44, 0xb9, 0x00, 0x16, 0xf5, 0x81, 0x04, 0xf3, 0xda, 0xf4, + 0x41, 0x45, 0xe1, 0xe1, 0xd1, 0xf4, 0x41, 0x55, 0xc7, 0x3a, 0xbd, 0xf7, + 0x01, 0x54, 0x58, 0x42, 0xb1, 0xf7, 0x01, 0x4b, 0x1b, 0x61, 0xa4, 0xf7, + 0x01, 0xb3, 0x11, 0x06, 0xad, 0x02, 0x01, 0xff, 0x46, 0x12, 0x03, 0x86, + 0xf7, 0x01, 0x46, 0xd6, 0x05, 0x90, 0xf7, 0x41, 0x46, 0x13, 0x19, 0xab, + 0xf7, 0x01, 0x52, 0xff, 0x52, 0xb7, 0xf7, 0x41, 0xa1, 0xe8, 0x0a, 0xaf, + 0x19, 0x02, 0xd6, 0x13, 0x01, 0xff, 0x80, 0x06, 0x47, 0x79, 0xcf, 0xd0, + 0xfa, 0x41, 0x44, 0x45, 0xef, 0xd8, 0xf4, 0x01, 0x45, 0xac, 0x21, 0x99, + 0xf4, 0x41, 0x03, 0x0f, 0x03, 0x0c, 0x44, 0x91, 0xcf, 0x3c, 0xf3, 0x01, + 0x45, 0x4a, 0xec, 0x21, 0xf4, 0x41, 0x07, 0xa8, 0xd3, 0x95, 0x02, 0x08, + 0xc8, 0xca, 0x01, 0xff, 0xd1, 0x00, 0xfb, 0x81, 0x87, 0x01, 0xd2, 0x01, + 0xfb, 0x81, 0x43, 0xd3, 0x03, 0xfb, 0x81, 0x1f, 0xd4, 0x07, 0xfb, 0x81, + 0x0d, 0xd5, 0x0f, 0xfb, 0x81, 0x04, 0xd6, 0x1e, 0xfb, 0x41, 0xd6, 0x2d, + 0xfb, 0x41, 0xd5, 0x16, 0xfb, 0x81, 0x04, 0xd6, 0x26, 0xfb, 0x41, 0xd6, + 0x35, 0xfb, 0x41, 0xd4, 0x0b, 0xfb, 0x81, 0x0d, 0xd5, 0x13, 0xfb, 0x81, + 0x04, 0xd6, 0x22, 0xfb, 0x41, 0xd6, 0x31, 0xfb, 0x41, 0xd5, 0x1a, 0xfb, + 0x81, 0x04, 0xd6, 0x29, 0xfb, 0x41, 0xd6, 0x39, 0xfb, 0x41, 0xd3, 0x05, + 0xfb, 0x81, 0x1b, 0xd4, 0x09, 0xfb, 0x81, 0x0d, 0xd5, 0x11, 0xfb, 0x81, + 0x04, 0xd6, 0x20, 0xfb, 0x41, 0xd6, 0x2f, 0xfb, 0x41, 0xd5, 0x18, 0xfb, + 0xc1, 0x00, 0xd6, 0x37, 0xfb, 0x41, 0xd4, 0x0d, 0xfb, 0x81, 0x0d, 0xd5, + 0x14, 0xfb, 0x81, 0x04, 0xd6, 0x24, 0xfb, 0x41, 0xd6, 0x33, 0xfb, 0x41, + 0xd5, 0x1c, 0xfb, 0x81, 0x04, 0xd6, 0x2b, 0xfb, 0x41, 0xd6, 0x3b, 0xfb, + 0x41, 0xd2, 0x02, 0xfb, 0x81, 0x40, 0xd3, 0x04, 0xfb, 0x81, 0x1f, 0xd4, + 0x08, 0xfb, 0x81, 0x0d, 0xd5, 0x10, 0xfb, 0x81, 0x04, 0xd6, 0x1f, 0xfb, + 0x41, 0xd6, 0x2e, 0xfb, 0x41, 0xd5, 0x17, 0xfb, 0x81, 0x04, 0xd6, 0x27, + 0xfb, 0x41, 0xd6, 0x36, 0xfb, 0x41, 0xd4, 0x0c, 0xfb, 0x81, 0x0a, 0x42, + 0x00, 0xc3, 0x32, 0xfb, 0x01, 0xd6, 0x23, 0xfb, 0x41, 0xd5, 0x1b, 0xfb, + 0x81, 0x04, 0xd6, 0x2a, 0xfb, 0x41, 0xd6, 0x3a, 0xfb, 0x41, 0xd3, 0x06, + 0xfb, 0x81, 0x1f, 0xd4, 0x0a, 0xfb, 0x81, 0x0d, 0xd5, 0x12, 0xfb, 0x81, + 0x04, 0xd6, 0x21, 0xfb, 0x41, 0xd6, 0x30, 0xfb, 0x41, 0xd5, 0x19, 0xfb, + 0x81, 0x04, 0xd6, 0x28, 0xfb, 0x41, 0xd6, 0x38, 0xfb, 0x41, 0xd4, 0x0e, + 0xfb, 0x81, 0x0d, 0xd5, 0x15, 0xfb, 0x81, 0x04, 0xd6, 0x25, 0xfb, 0x41, + 0xd6, 0x34, 0xfb, 0x41, 0xd5, 0x1d, 0xfb, 0x01, 0xd6, 0x2c, 0xfb, 0x41, + 0x91, 0x86, 0x04, 0x92, 0xf7, 0x01, 0xd3, 0x00, 0xcd, 0x81, 0x6f, 0xd4, + 0x03, 0xcd, 0x81, 0x2a, 0xd5, 0x09, 0xcd, 0x81, 0x0e, 0xd6, 0x18, 0xcd, + 0xc1, 0x00, 0xd7, 0x51, 0xcd, 0xc1, 0x00, 0xd8, 0xcb, 0xcd, 0x41, 0xd6, + 0x27, 0xcd, 0x81, 0x0a, 0x42, 0x04, 0xf5, 0xbb, 0xcd, 0x01, 0xd8, 0x80, + 0xcd, 0x41, 0xd7, 0x61, 0xcd, 0x01, 0xd8, 0x9c, 0xcd, 0x41, 0xd5, 0x10, + 0xcd, 0x81, 0x1c, 0x96, 0x0d, 0xd7, 0x3d, 0xcd, 0x81, 0x04, 0xd8, 0x78, + 0xcd, 0x41, 0xd8, 0xb3, 0xcd, 0x41, 0xd7, 0x59, 0xcd, 0x81, 0x04, 0xd8, + 0x96, 0xcd, 0x41, 0xd8, 0xd3, 0xcd, 0x41, 0xd6, 0x2f, 0xcd, 0x81, 0x0d, + 0xd7, 0x4b, 0xcd, 0x81, 0x04, 0xd8, 0x88, 0xcd, 0x41, 0xd8, 0xc3, 0xcd, + 0x41, 0xd7, 0x69, 0xcd, 0x81, 0x04, 0xd8, 0xa4, 0xcd, 0x41, 0xd8, 0xe1, + 0xcd, 0x41, 0xd4, 0x06, 0xcd, 0x81, 0x40, 0x95, 0x1f, 0xd6, 0x1c, 0xcd, + 0x81, 0x0d, 0xd7, 0x39, 0xcd, 0x81, 0x04, 0xd8, 0x74, 0xcd, 0x41, 0xd8, + 0xaf, 0xcd, 0x41, 0xd7, 0x55, 0xcd, 0x81, 0x04, 0xd8, 0x93, 0xcd, 0x41, + 0xd8, 0xcf, 0xcd, 0x41, 0xd6, 0x2b, 0xcd, 0x81, 0x0d, 0xd7, 0x48, 0xcd, + 0x81, 0x04, 0xd8, 0x84, 0xcd, 0x41, 0xd8, 0xbf, 0xcd, 0x41, 0xd7, 0x65, + 0xcd, 0x81, 0x04, 0xd8, 0xa0, 0xcd, 0x41, 0xd8, 0xde, 0xcd, 0x41, 0xd5, + 0x14, 0xcd, 0x81, 0x1f, 0xd6, 0x23, 0xcd, 0x81, 0x0d, 0xd7, 0x41, 0xcd, + 0x81, 0x04, 0xd8, 0x7c, 0xcd, 0x41, 0xd8, 0xb7, 0xcd, 0x41, 0xd7, 0x5d, + 0xcd, 0x81, 0x04, 0xd8, 0x99, 0xcd, 0x41, 0xd8, 0xd7, 0xcd, 0x41, 0xd6, + 0x33, 0xcd, 0x81, 0x0d, 0xd7, 0x4e, 0xcd, 0x81, 0x04, 0xd8, 0x8c, 0xcd, + 0x41, 0xd8, 0xc7, 0xcd, 0x41, 0xd7, 0x6d, 0xcd, 0x01, 0xd8, 0xa8, 0xcd, + 0x41, 0xd3, 0x01, 0xcd, 0x81, 0x7c, 0x94, 0x43, 0xd5, 0x0b, 0xcd, 0x81, + 0x1f, 0xd6, 0x1a, 0xcd, 0x81, 0x0d, 0xd7, 0x37, 0xcd, 0x81, 0x04, 0xd8, + 0x72, 0xcd, 0x41, 0xd8, 0xad, 0xcd, 0x41, 0xd7, 0x53, 0xcd, 0x81, 0x04, + 0xd8, 0x91, 0xcd, 0x41, 0xd8, 0xcd, 0xcd, 0x41, 0xd6, 0x29, 0xcd, 0x81, + 0x0d, 0xd7, 0x46, 0xcd, 0x81, 0x04, 0xd8, 0x82, 0xcd, 0x41, 0xd8, 0xbd, + 0xcd, 0x41, 0xd7, 0x63, 0xcd, 0x81, 0x04, 0xd8, 0x9e, 0xcd, 0x41, 0xd8, + 0xdc, 0xcd, 0x41, 0xd5, 0x12, 0xcd, 0x81, 0x1b, 0xd6, 0x21, 0xcd, 0x81, + 0x0d, 0xd7, 0x3f, 0xcd, 0x81, 0x04, 0xd8, 0x7a, 0xcd, 0x41, 0xd8, 0xb5, + 0xcd, 0x41, 0xd7, 0x5b, 0xcd, 0xc1, 0x00, 0xd8, 0xd5, 0xcd, 0x41, 0xd6, + 0x31, 0xcd, 0x81, 0x0a, 0x42, 0x04, 0xf5, 0xc5, 0xcd, 0x01, 0xd8, 0x8a, + 0xcd, 0x41, 0xd7, 0x6b, 0xcd, 0x01, 0xd8, 0xa6, 0xcd, 0x41, 0xd4, 0x08, + 0xcd, 0x81, 0x43, 0xd5, 0x0e, 0xcd, 0x81, 0x1f, 0xd6, 0x1e, 0xcd, 0x81, + 0x0d, 0xd7, 0x3b, 0xcd, 0x81, 0x04, 0xd8, 0x76, 0xcd, 0x41, 0xd8, 0xb1, + 0xcd, 0x41, 0xd7, 0x57, 0xcd, 0x81, 0x04, 0xd8, 0x94, 0xcd, 0x41, 0xd8, + 0xd1, 0xcd, 0x41, 0xd6, 0x2d, 0xcd, 0x81, 0x0d, 0xd7, 0x49, 0xcd, 0x81, + 0x04, 0xd8, 0x86, 0xcd, 0x41, 0xd8, 0xc1, 0xcd, 0x41, 0xd7, 0x67, 0xcd, + 0x81, 0x04, 0xd8, 0xa2, 0xcd, 0x41, 0xd8, 0xdf, 0xcd, 0x41, 0xd5, 0x16, + 0xcd, 0x81, 0x1f, 0xd6, 0x25, 0xcd, 0x81, 0x0d, 0xd7, 0x43, 0xcd, 0x81, + 0x04, 0xd8, 0x7e, 0xcd, 0x41, 0xd8, 0xb9, 0xcd, 0x41, 0xd7, 0x5f, 0xcd, + 0x81, 0x04, 0xd8, 0x9b, 0xcd, 0x41, 0xd8, 0xd9, 0xcd, 0x41, 0xd6, 0x35, + 0xcd, 0x81, 0x0d, 0xd7, 0x50, 0xcd, 0x81, 0x04, 0xd8, 0x8e, 0xcd, 0x41, + 0xd8, 0xc9, 0xcd, 0x41, 0xd7, 0x6f, 0xcd, 0x81, 0x04, 0xd8, 0xaa, 0xcd, + 0x41, 0xd8, 0xe5, 0xcd, 0x41, 0x92, 0x8d, 0x02, 0x93, 0x8b, 0x01, 0xd4, + 0x04, 0xcd, 0x81, 0x43, 0xd5, 0x0a, 0xcd, 0x81, 0x1f, 0xd6, 0x19, 0xcd, + 0x81, 0x0d, 0xd7, 0x36, 0xcd, 0x81, 0x04, 0xd8, 0x71, 0xcd, 0x41, 0xd8, + 0xac, 0xcd, 0x41, 0xd7, 0x52, 0xcd, 0x81, 0x04, 0xd8, 0x90, 0xcd, 0x41, + 0xd8, 0xcc, 0xcd, 0x41, 0xd6, 0x28, 0xcd, 0x81, 0x0d, 0xd7, 0x45, 0xcd, + 0x81, 0x04, 0xd8, 0x81, 0xcd, 0x41, 0xd8, 0xbc, 0xcd, 0x41, 0xd7, 0x62, + 0xcd, 0x81, 0x04, 0xd8, 0x9d, 0xcd, 0x41, 0xd8, 0xdb, 0xcd, 0x41, 0xd5, + 0x11, 0xcd, 0x81, 0x1f, 0xd6, 0x20, 0xcd, 0x81, 0x0d, 0xd7, 0x3e, 0xcd, + 0x81, 0x04, 0xd8, 0x79, 0xcd, 0x41, 0xd8, 0xb4, 0xcd, 0x41, 0xd7, 0x5a, + 0xcd, 0x81, 0x04, 0xd8, 0x97, 0xcd, 0x41, 0xd8, 0xd4, 0xcd, 0x41, 0xd6, + 0x30, 0xcd, 0x81, 0x0d, 0xd7, 0x4c, 0xcd, 0x81, 0x04, 0xd8, 0x89, 0xcd, + 0x41, 0xd8, 0xc4, 0xcd, 0x41, 0xd7, 0x6a, 0xcd, 0x81, 0x04, 0xd8, 0xa5, + 0xcd, 0x41, 0xd8, 0xe2, 0xcd, 0x41, 0xd4, 0x07, 0xcd, 0x81, 0x37, 0xd5, + 0x0d, 0xcd, 0x81, 0x1b, 0xd6, 0x1d, 0xcd, 0x81, 0x0d, 0xd7, 0x3a, 0xcd, + 0x81, 0x04, 0xd8, 0x75, 0xcd, 0x41, 0xd8, 0xb0, 0xcd, 0x41, 0xd7, 0x56, + 0xcd, 0xc1, 0x00, 0xd8, 0xd0, 0xcd, 0x41, 0xd6, 0x2c, 0xcd, 0x81, 0x0a, + 0x42, 0x04, 0xf5, 0xc0, 0xcd, 0x01, 0xd8, 0x85, 0xcd, 0x41, 0xd7, 0x66, + 0xcd, 0x01, 0xd8, 0xa1, 0xcd, 0x41, 0xd5, 0x15, 0xcd, 0x81, 0x1f, 0xd6, + 0x24, 0xcd, 0x81, 0x0d, 0xd7, 0x42, 0xcd, 0x81, 0x04, 0xd8, 0x7d, 0xcd, + 0x41, 0xd8, 0xb8, 0xcd, 0x41, 0xd7, 0x5e, 0xcd, 0x81, 0x04, 0xd8, 0x9a, + 0xcd, 0x41, 0xd8, 0xd8, 0xcd, 0x41, 0xd6, 0x34, 0xcd, 0x81, 0x0d, 0xd7, + 0x4f, 0xcd, 0x81, 0x04, 0xd8, 0x8d, 0xcd, 0x41, 0xd8, 0xc8, 0xcd, 0x41, + 0xd7, 0x6e, 0xcd, 0x81, 0x04, 0xd8, 0xa9, 0xcd, 0x41, 0xd8, 0xe4, 0xcd, + 0x41, 0xd3, 0x02, 0xcd, 0x81, 0x8b, 0x01, 0xd4, 0x05, 0xcd, 0x81, 0x43, + 0xd5, 0x0c, 0xcd, 0x81, 0x1f, 0xd6, 0x1b, 0xcd, 0x81, 0x0d, 0xd7, 0x38, + 0xcd, 0x81, 0x04, 0xd8, 0x73, 0xcd, 0x41, 0xd8, 0xae, 0xcd, 0x41, 0xd7, + 0x54, 0xcd, 0x81, 0x04, 0xd8, 0x92, 0xcd, 0x41, 0xd8, 0xce, 0xcd, 0x41, + 0xd6, 0x2a, 0xcd, 0x81, 0x0d, 0xd7, 0x47, 0xcd, 0x81, 0x04, 0xd8, 0x83, + 0xcd, 0x41, 0xd8, 0xbe, 0xcd, 0x41, 0xd7, 0x64, 0xcd, 0x81, 0x04, 0xd8, + 0x9f, 0xcd, 0x41, 0xd8, 0xdd, 0xcd, 0x41, 0xd5, 0x13, 0xcd, 0x81, 0x1f, + 0xd6, 0x22, 0xcd, 0x81, 0x0d, 0xd7, 0x40, 0xcd, 0x81, 0x04, 0xd8, 0x7b, + 0xcd, 0x41, 0xd8, 0xb6, 0xcd, 0x41, 0xd7, 0x5c, 0xcd, 0x81, 0x04, 0xd8, + 0x98, 0xcd, 0x41, 0xd8, 0xd6, 0xcd, 0x41, 0xd6, 0x32, 0xcd, 0x81, 0x0d, + 0xd7, 0x4d, 0xcd, 0x81, 0x04, 0xd8, 0x8b, 0xcd, 0x41, 0xd8, 0xc6, 0xcd, + 0x41, 0xd7, 0x6c, 0xcd, 0x81, 0x04, 0xd8, 0xa7, 0xcd, 0x41, 0xd8, 0xe3, + 0xcd, 0x41, 0x94, 0x43, 0xd5, 0x0f, 0xcd, 0x81, 0x1f, 0xd6, 0x1f, 0xcd, + 0x81, 0x0d, 0xd7, 0x3c, 0xcd, 0x81, 0x04, 0xd8, 0x77, 0xcd, 0x41, 0xd8, + 0xb2, 0xcd, 0x41, 0xd7, 0x58, 0xcd, 0x81, 0x04, 0xd8, 0x95, 0xcd, 0x41, + 0xd8, 0xd2, 0xcd, 0x41, 0xd6, 0x2e, 0xcd, 0x81, 0x0d, 0xd7, 0x4a, 0xcd, + 0x81, 0x04, 0xd8, 0x87, 0xcd, 0x41, 0xd8, 0xc2, 0xcd, 0x41, 0xd7, 0x68, + 0xcd, 0x81, 0x04, 0xd8, 0xa3, 0xcd, 0x41, 0xd8, 0xe0, 0xcd, 0x41, 0xd5, + 0x17, 0xcd, 0x81, 0x1b, 0xd6, 0x26, 0xcd, 0x81, 0x0d, 0xd7, 0x44, 0xcd, + 0x81, 0x04, 0xd8, 0x7f, 0xcd, 0x41, 0xd8, 0xba, 0xcd, 0x41, 0xd7, 0x60, + 0xcd, 0xc1, 0x00, 0xd8, 0xda, 0xcd, 0x41, 0x96, 0x0a, 0x42, 0x04, 0xf5, + 0xca, 0xcd, 0x01, 0xd8, 0x8f, 0xcd, 0x41, 0xd7, 0x70, 0xcd, 0x01, 0xd8, + 0xab, 0xcd, 0x41, 0x02, 0x36, 0x01, 0x06, 0x49, 0x7b, 0x99, 0x22, 0x24, + 0x40, 0x80, 0x32, 0x8d, 0x01, 0xff, 0x0a, 0x0c, 0x1a, 0x19, 0x0f, 0x96, + 0x6f, 0x01, 0xff, 0xe3, 0x2d, 0x21, 0x00, 0xe8, 0x0c, 0x21, 0x00, 0xe9, + 0x11, 0x21, 0x00, 0xf2, 0x1c, 0x21, 0x00, 0xfa, 0x28, 0x21, 0x40, 0x50, + 0xa7, 0x23, 0xb6, 0x27, 0x00, 0x50, 0xb3, 0x02, 0xb5, 0x27, 0x00, 0x50, + 0x7c, 0x40, 0xb4, 0x27, 0x40, 0x46, 0x40, 0xda, 0xd3, 0x29, 0x00, 0xa3, + 0xb4, 0x07, 0xa4, 0xc4, 0x06, 0xa6, 0xa4, 0x06, 0xa8, 0xf7, 0x05, 0xac, + 0xd4, 0x04, 0xad, 0xe5, 0x03, 0xae, 0xd6, 0x03, 0x47, 0xa1, 0xd3, 0xc4, + 0x2b, 0x00, 0xb0, 0xb1, 0x03, 0x56, 0x81, 0x36, 0x53, 0x27, 0x00, 0xb2, + 0xaa, 0x02, 0xb3, 0x9f, 0x01, 0xb4, 0x6f, 0xb5, 0x2c, 0x03, 0x32, 0x00, + 0x01, 0xff, 0x06, 0x35, 0x00, 0x17, 0x08, 0x84, 0x0a, 0x01, 0xff, 0x47, + 0x95, 0x44, 0x98, 0xf7, 0x01, 0x47, 0x68, 0x0a, 0x9e, 0xf7, 0x01, 0x46, + 0xd6, 0x05, 0x1d, 0x2b, 0x40, 0x47, 0xdf, 0x66, 0x2e, 0x2b, 0x00, 0x49, + 0x83, 0x47, 0xae, 0x25, 0x40, 0x59, 0x15, 0x25, 0x7b, 0x26, 0x00, 0xb0, + 0x01, 0xff, 0x58, 0xd6, 0x26, 0xa2, 0xf5, 0x01, 0x0a, 0x8c, 0x0b, 0x16, + 0x04, 0x6f, 0x02, 0x06, 0x5b, 0xcf, 0x01, 0x9d, 0x2b, 0x40, 0x4d, 0x4d, + 0x35, 0xe4, 0x25, 0x00, 0x4e, 0x68, 0x29, 0xe5, 0x25, 0x40, 0x4f, 0x3f, + 0x6c, 0xeb, 0x23, 0x00, 0x58, 0x5e, 0x29, 0x81, 0xf7, 0x01, 0x4e, 0x26, + 0x0c, 0xb4, 0x25, 0x00, 0x48, 0x01, 0x02, 0xb2, 0x25, 0x40, 0x48, 0x17, + 0x3d, 0x0e, 0x26, 0x00, 0x04, 0x99, 0xf0, 0x12, 0x52, 0x55, 0x54, 0x7f, + 0xf5, 0x01, 0x44, 0x1c, 0x77, 0xdf, 0x26, 0x00, 0x57, 0x07, 0x32, 0xd6, + 0x26, 0x40, 0x47, 0x95, 0x44, 0x97, 0xf7, 0x01, 0x47, 0x68, 0x0a, 0x9d, + 0xf7, 0x01, 0x46, 0xd6, 0x05, 0x8c, 0xf7, 0x41, 0x4e, 0xb5, 0x75, 0x00, + 0x27, 0x00, 0x47, 0x47, 0x3e, 0x02, 0x27, 0x00, 0x4a, 0x86, 0x5f, 0x17, + 0x26, 0x00, 0x53, 0xc1, 0x4a, 0x71, 0xf5, 0x01, 0x0e, 0x89, 0x79, 0x60, + 0xad, 0x34, 0x46, 0x72, 0xde, 0xc7, 0x26, 0x00, 0x49, 0xe6, 0xbd, 0x60, + 0x26, 0x00, 0x45, 0xd7, 0x05, 0xa0, 0x25, 0x80, 0x0c, 0x43, 0x32, 0x13, + 0x05, 0x26, 0x00, 0x4c, 0x6f, 0x96, 0x00, 0x26, 0x40, 0x80, 0x01, 0xff, + 0x46, 0x03, 0x8d, 0x32, 0xf5, 0x01, 0x47, 0xbb, 0x68, 0xc0, 0x2b, 0x00, + 0x48, 0x38, 0xc6, 0xf9, 0x23, 0x40, 0x04, 0x5f, 0x07, 0x06, 0x4a, 0x5d, + 0x95, 0x3b, 0x26, 0x40, 0x47, 0x95, 0x44, 0x29, 0x2b, 0x00, 0x47, 0x68, + 0x0a, 0x2a, 0x2b, 0x00, 0xb3, 0x06, 0x53, 0x3e, 0x4e, 0xcd, 0xfb, 0x41, + 0x45, 0xd7, 0x05, 0xaa, 0x25, 0x00, 0x43, 0x32, 0x13, 0x51, 0x2b, 0x40, + 0x46, 0x12, 0x03, 0x84, 0xf7, 0x01, 0x46, 0xd6, 0x05, 0x8d, 0xf7, 0x41, + 0x48, 0x84, 0x47, 0xac, 0x25, 0x00, 0x04, 0xc9, 0x00, 0x06, 0x46, 0xf0, + 0xde, 0xf6, 0xf3, 0x41, 0x80, 0x56, 0x0a, 0x8c, 0x0b, 0x1e, 0x06, 0xa9, + 0x01, 0x01, 0xff, 0x45, 0xce, 0x00, 0xa1, 0x27, 0x80, 0x0c, 0x46, 0xb2, + 0x21, 0x4d, 0x20, 0x00, 0x55, 0xd5, 0x01, 0x9e, 0x2b, 0x40, 0x44, 0xe6, + 0x01, 0xa4, 0x27, 0x40, 0x4f, 0x3f, 0x6c, 0xe9, 0x23, 0x80, 0x27, 0x58, + 0x5e, 0x29, 0x82, 0xf7, 0x01, 0xb0, 0x13, 0x4e, 0x26, 0x0c, 0xb8, 0x25, + 0x00, 0x48, 0x01, 0x02, 0xb6, 0x25, 0xc0, 0x00, 0x59, 0x3a, 0x23, 0xef, + 0x23, 0x40, 0x47, 0xe1, 0xc9, 0x53, 0x2b, 0x00, 0x46, 0xea, 0x49, 0xba, + 0x25, 0x40, 0x52, 0x9a, 0x1e, 0xed, 0x23, 0x40, 0x09, 0x9c, 0x01, 0x06, + 0x4e, 0x5d, 0x7d, 0xb3, 0xce, 0x41, 0x4e, 0xe0, 0x26, 0x9d, 0xf5, 0x01, + 0x45, 0x8f, 0x13, 0x1b, 0x26, 0x40, 0x4c, 0x67, 0x8c, 0xb0, 0x25, 0x00, + 0x02, 0x92, 0x01, 0x06, 0x46, 0xf9, 0xd4, 0x88, 0xf5, 0x41, 0x44, 0x2c, + 0x33, 0xf2, 0xf3, 0x01, 0x45, 0xe3, 0xc9, 0x1f, 0x2b, 0x40, 0x4b, 0x98, + 0x92, 0x6f, 0xcc, 0x01, 0x42, 0x16, 0x18, 0x12, 0x27, 0x40, 0x06, 0x45, + 0x04, 0x06, 0x4a, 0xd9, 0xae, 0xb8, 0x26, 0x40, 0xa4, 0x4d, 0xac, 0x38, + 0x57, 0xf3, 0x30, 0xf5, 0x23, 0x80, 0x2b, 0xb3, 0x0d, 0x54, 0x7c, 0x46, + 0xf6, 0x23, 0xc0, 0x00, 0x48, 0xba, 0x68, 0xc5, 0x2b, 0x40, 0x05, 0x5e, + 0x07, 0x06, 0x45, 0xd7, 0x05, 0xfc, 0x25, 0x40, 0x47, 0x95, 0x44, 0x99, + 0xf7, 0x01, 0x47, 0x68, 0x0a, 0x9f, 0xf7, 0x01, 0x46, 0xd6, 0x05, 0xfe, + 0x25, 0x40, 0x48, 0xba, 0x68, 0xc8, 0x2b, 0x40, 0x55, 0x64, 0x35, 0xf4, + 0x23, 0x80, 0x06, 0x46, 0x69, 0x0a, 0x27, 0x2b, 0x40, 0x48, 0xba, 0x68, + 0xc7, 0x2b, 0x40, 0x46, 0x96, 0x44, 0x25, 0x2b, 0x00, 0x55, 0xc2, 0x33, + 0xf7, 0x23, 0xc0, 0x00, 0x48, 0xba, 0x68, 0xc6, 0x2b, 0x40, 0x05, 0x28, + 0x1c, 0x70, 0x03, 0xc4, 0x00, 0x19, 0xaf, 0x01, 0xff, 0x04, 0x15, 0x01, + 0x06, 0x45, 0x4b, 0x0a, 0xeb, 0x29, 0x40, 0x4d, 0x4d, 0x35, 0xe3, 0x25, + 0x00, 0x4e, 0x68, 0x29, 0xe2, 0x25, 0x40, 0x80, 0x3a, 0x0a, 0x8c, 0x0b, + 0x11, 0x06, 0xa9, 0x01, 0x01, 0xff, 0x46, 0xb2, 0x21, 0x4c, 0x20, 0x00, + 0x55, 0xd5, 0x01, 0x9c, 0x2b, 0x40, 0x4f, 0x3f, 0x6c, 0xea, 0x23, 0x80, + 0x18, 0x58, 0x5e, 0x29, 0x80, 0xf7, 0x01, 0x47, 0xe9, 0x49, 0xc4, 0x25, + 0x00, 0x4e, 0x26, 0x0c, 0xc2, 0x25, 0x00, 0x48, 0x01, 0x02, 0xc0, 0x25, + 0x40, 0x52, 0x9a, 0x1e, 0xee, 0x23, 0x40, 0x4a, 0x81, 0xac, 0xd8, 0x26, + 0x00, 0x09, 0x9c, 0x01, 0x01, 0xff, 0x4e, 0xe0, 0x26, 0x9c, 0xf5, 0x01, + 0x45, 0x8f, 0x13, 0x1a, 0x26, 0x40, 0x46, 0x12, 0x03, 0x24, 0x2b, 0x80, + 0x06, 0x46, 0xd6, 0x05, 0x1b, 0x2b, 0x40, 0x07, 0x57, 0xcd, 0x01, 0xff, + 0xac, 0x0c, 0x55, 0xe5, 0x3d, 0x6d, 0xcc, 0x01, 0x55, 0xb7, 0x3e, 0x6c, + 0xcc, 0x41, 0x53, 0x32, 0x49, 0x6b, 0xcc, 0x01, 0x54, 0xec, 0x44, 0x6e, + 0xcc, 0x41, 0x55, 0x4d, 0x39, 0xaa, 0xf5, 0x01, 0xa5, 0x0f, 0xaf, 0x01, + 0xff, 0x50, 0xd6, 0x66, 0x2c, 0x2b, 0x00, 0x47, 0xfe, 0xd6, 0xd7, 0x29, + 0x40, 0x43, 0x2c, 0x01, 0xa4, 0xf5, 0x81, 0x06, 0x45, 0x8f, 0xd1, 0x22, + 0x2b, 0x40, 0x45, 0x9e, 0x27, 0x65, 0x26, 0x40, 0xac, 0x0f, 0xaf, 0x01, + 0xff, 0x44, 0x1b, 0x1e, 0xbf, 0xf5, 0x01, 0x4f, 0x64, 0x74, 0x26, 0x27, + 0x40, 0x42, 0x23, 0x02, 0x91, 0x26, 0x00, 0x46, 0xae, 0x0f, 0x3f, 0x27, + 0x40, 0x46, 0x96, 0x44, 0xc6, 0x25, 0x80, 0x45, 0x03, 0xa6, 0x01, 0x19, + 0xb2, 0x01, 0xff, 0x07, 0x39, 0xca, 0x06, 0x45, 0x98, 0xe9, 0x22, 0xf3, + 0x41, 0x44, 0xb2, 0x34, 0xc3, 0x26, 0x00, 0x43, 0x41, 0x18, 0xc2, 0x26, + 0x40, 0x58, 0xd6, 0x26, 0xa3, 0xf5, 0x01, 0x0a, 0x8c, 0x0b, 0x06, 0x5b, + 0xcf, 0x01, 0x9f, 0x2b, 0x40, 0x4f, 0x3f, 0x6c, 0xec, 0x23, 0x00, 0x58, + 0x5e, 0x29, 0x83, 0xf7, 0x01, 0x4e, 0x26, 0x0c, 0xbe, 0x25, 0x00, 0x48, + 0x01, 0x02, 0xbc, 0x25, 0x40, 0x80, 0x01, 0xff, 0x47, 0xbb, 0x68, 0xc1, + 0x2b, 0x00, 0x4d, 0x12, 0x86, 0x56, 0x27, 0x00, 0x48, 0x40, 0xc9, 0xde, + 0x2b, 0x00, 0x44, 0x9f, 0x27, 0x66, 0x26, 0x00, 0x4f, 0xcd, 0x74, 0xea, + 0x29, 0x40, 0x50, 0xc6, 0x62, 0x2c, 0x27, 0x00, 0x05, 0x4b, 0x88, 0x79, + 0x45, 0x13, 0x03, 0xcf, 0x25, 0x80, 0x52, 0x48, 0x10, 0xc8, 0x63, 0x26, + 0x00, 0x4e, 0xd5, 0x7b, 0xe8, 0x26, 0x00, 0x06, 0x69, 0x41, 0x01, 0xff, + 0x0e, 0xe0, 0x04, 0x31, 0x0e, 0x43, 0x79, 0x21, 0x0f, 0xa2, 0x72, 0x11, + 0x0c, 0x9e, 0x19, 0x01, 0xff, 0x4f, 0x4d, 0x1a, 0xaa, 0x2b, 0x00, 0x50, + 0xb3, 0x02, 0xab, 0x2b, 0x40, 0x4f, 0x34, 0x0c, 0xaf, 0x2b, 0x00, 0x4d, + 0xc1, 0x20, 0xad, 0x2b, 0x40, 0x4f, 0x34, 0x0c, 0xae, 0x2b, 0x00, 0x4d, + 0xc1, 0x20, 0xac, 0x2b, 0x40, 0x4f, 0x4d, 0x1a, 0xa8, 0x2b, 0x00, 0x50, + 0xb3, 0x02, 0xa9, 0x2b, 0x40, 0x80, 0x01, 0xff, 0x4a, 0x65, 0xaa, 0xfa, + 0x23, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x4a, 0xcc, 0x41, 0xed, 0x29, + 0x00, 0x4e, 0xb1, 0x7d, 0x89, 0x26, 0x00, 0x4f, 0xbe, 0x74, 0x88, 0x26, + 0x40, 0x45, 0x25, 0xe4, 0x57, 0xfa, 0x01, 0x46, 0x2e, 0xda, 0x5d, 0x26, + 0x80, 0xed, 0x01, 0x4a, 0x15, 0xaa, 0x49, 0xfa, 0x81, 0xdf, 0x01, 0x44, + 0xbd, 0xef, 0x56, 0xfa, 0x01, 0xab, 0x73, 0x44, 0xfd, 0xf1, 0x5f, 0x26, + 0x80, 0x5b, 0x45, 0x52, 0xbe, 0x5b, 0x26, 0x80, 0x43, 0x44, 0x5d, 0xf2, + 0x5c, 0x26, 0x80, 0x2b, 0x07, 0x27, 0x0a, 0x01, 0xff, 0x46, 0x2e, 0xda, + 0x27, 0xfa, 0x01, 0xab, 0x12, 0x44, 0xfd, 0xf1, 0x29, 0xfa, 0x01, 0x45, + 0x52, 0xbe, 0x25, 0xfa, 0x01, 0x44, 0x5d, 0xf2, 0x26, 0xfa, 0x41, 0x43, + 0xa1, 0x01, 0x24, 0xfa, 0x01, 0x45, 0x4e, 0x09, 0x28, 0xfa, 0x41, 0x09, + 0xa3, 0x2c, 0x01, 0xff, 0x4e, 0xac, 0x2c, 0x11, 0xfa, 0x01, 0x5b, 0xbc, + 0x1d, 0x3b, 0xfa, 0x41, 0x09, 0xa3, 0x2c, 0x01, 0xff, 0x4e, 0xac, 0x2c, + 0x10, 0xfa, 0x01, 0x5b, 0xbc, 0x1d, 0x3a, 0xfa, 0x41, 0x09, 0xa3, 0x2c, + 0x01, 0xff, 0x4e, 0xac, 0x2c, 0x14, 0xfa, 0x01, 0x5b, 0xbc, 0x1d, 0x3e, + 0xfa, 0x41, 0x43, 0xa1, 0x01, 0x5a, 0x26, 0x80, 0x4c, 0x45, 0x4e, 0x09, + 0x5e, 0x26, 0xc0, 0x00, 0x09, 0xa3, 0x2c, 0x15, 0x8d, 0x01, 0xff, 0x46, + 0x2e, 0xda, 0x53, 0xfa, 0x01, 0x45, 0x52, 0xbe, 0x51, 0xfa, 0x01, 0x44, + 0x5d, 0xf2, 0x52, 0xfa, 0x41, 0x52, 0xcd, 0x51, 0x07, 0xfa, 0x01, 0x4e, + 0xac, 0x2c, 0x13, 0xfa, 0x01, 0x5f, 0x6d, 0x11, 0x1c, 0xfa, 0x01, 0xb4, + 0x01, 0xff, 0x5c, 0xfa, 0x17, 0x46, 0xfa, 0x01, 0x0b, 0xbd, 0x1d, 0x01, + 0xff, 0x4f, 0xc8, 0x1d, 0x3d, 0xfa, 0x01, 0x53, 0xf2, 0x4d, 0x31, 0xfa, + 0x41, 0x09, 0xa3, 0x2c, 0x01, 0xff, 0x4e, 0xac, 0x2c, 0x0f, 0xfa, 0x01, + 0x5b, 0xbc, 0x1d, 0x39, 0xfa, 0x41, 0x57, 0xa3, 0x2c, 0x4c, 0xfa, 0x41, + 0x09, 0xa3, 0x2c, 0x01, 0xff, 0x4e, 0xac, 0x2c, 0x12, 0xfa, 0x01, 0x5b, + 0xbc, 0x1d, 0x3c, 0xfa, 0x41, 0x04, 0x20, 0x25, 0x4d, 0x02, 0xa3, 0x01, + 0x3d, 0x44, 0xdd, 0xf0, 0x59, 0xf4, 0x01, 0x02, 0x60, 0x07, 0x27, 0x4c, + 0xf7, 0x92, 0x23, 0x26, 0x00, 0xb2, 0x15, 0x43, 0x21, 0x1d, 0xac, 0xf9, + 0x01, 0xb4, 0x01, 0xff, 0x49, 0x4a, 0xb7, 0xbf, 0x20, 0x00, 0x47, 0x27, + 0x91, 0xe6, 0xfa, 0x41, 0xe4, 0x26, 0xf4, 0x01, 0x4a, 0xdb, 0xb1, 0x82, + 0xf3, 0x41, 0x46, 0x1e, 0xdb, 0xe2, 0xf9, 0x01, 0x45, 0x3b, 0xe7, 0xb1, + 0xf3, 0x41, 0x4f, 0x66, 0x72, 0xf9, 0x29, 0x00, 0x47, 0x4f, 0x31, 0xf8, + 0x29, 0x40, 0xe5, 0xb2, 0xf6, 0x01, 0x43, 0x2b, 0x24, 0xb4, 0xf6, 0x41, + 0xa4, 0x92, 0x04, 0x0b, 0x39, 0x9c, 0x85, 0x04, 0x52, 0x81, 0x52, 0x6c, + 0x1c, 0x01, 0x07, 0xec, 0x05, 0xee, 0x01, 0x07, 0xff, 0x39, 0x6d, 0x05, + 0x5a, 0x03, 0x44, 0x0b, 0x40, 0x77, 0x06, 0x4e, 0xd7, 0x7e, 0x43, 0x1c, + 0x41, 0xa1, 0x2c, 0xe5, 0x38, 0x1c, 0x01, 0xe9, 0x30, 0x1c, 0x81, 0x1f, + 0xef, 0x3a, 0x1c, 0x01, 0xf5, 0x32, 0x1c, 0x81, 0x12, 0x08, 0x22, 0xc1, + 0x01, 0xff, 0xec, 0x36, 0x1c, 0x01, 0xf2, 0x34, 0x1c, 0xc1, 0x00, 0xf2, + 0x35, 0x1c, 0x41, 0xf5, 0x33, 0x1c, 0x41, 0xe9, 0x31, 0x1c, 0x41, 0xe1, + 0x2f, 0x1c, 0x01, 0xe9, 0x39, 0x1c, 0x01, 0xf5, 0x3b, 0x1c, 0x41, 0xa1, + 0x17, 0x4b, 0xd7, 0x23, 0x3c, 0x1c, 0x01, 0x02, 0x02, 0x00, 0x01, 0xff, + 0x44, 0xe5, 0x23, 0x3f, 0x1c, 0x01, 0x45, 0xec, 0x4b, 0x3e, 0x1c, 0x41, + 0x47, 0x3d, 0x16, 0x3d, 0x1c, 0x01, 0x47, 0xaf, 0x88, 0x40, 0x1c, 0x41, + 0x45, 0x12, 0x0b, 0x61, 0x1c, 0x81, 0x72, 0xa6, 0x53, 0x44, 0xcf, 0x2a, + 0x62, 0x1c, 0x81, 0x46, 0x43, 0x0e, 0x0b, 0x5a, 0x1c, 0x01, 0xb3, 0x24, + 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0x63, 0x1c, 0x01, 0xa8, 0x0d, 0xb7, + 0x01, 0xff, 0x44, 0xcb, 0x1d, 0x64, 0x1c, 0x01, 0xef, 0x5b, 0x1c, 0x41, + 0x44, 0x7b, 0x11, 0x65, 0x1c, 0x01, 0x43, 0x26, 0x01, 0x5c, 0x1c, 0x41, + 0x44, 0xc9, 0x1d, 0x60, 0x1c, 0x81, 0x0d, 0x42, 0x01, 0x26, 0x5f, 0x1c, + 0xc1, 0x00, 0x42, 0x7d, 0x11, 0x68, 0x1c, 0x41, 0x42, 0x7d, 0x11, 0x69, + 0x1c, 0x41, 0x42, 0x7d, 0x11, 0x6b, 0x1c, 0x41, 0xa9, 0x0f, 0xaf, 0x01, + 0xff, 0x43, 0x7c, 0x11, 0x66, 0x1c, 0x01, 0x42, 0x42, 0x00, 0x5d, 0x1c, + 0x41, 0x43, 0x52, 0x4d, 0x67, 0x1c, 0x01, 0x42, 0x32, 0x00, 0x5e, 0x1c, + 0x41, 0xf9, 0x6a, 0x1c, 0x41, 0xe1, 0x00, 0x1c, 0x81, 0xfa, 0x01, 0xa2, + 0xed, 0x01, 0xa3, 0xe0, 0x01, 0xa4, 0xc7, 0x01, 0xe5, 0x0a, 0x1c, 0x01, + 0xa7, 0xb6, 0x01, 0x42, 0x22, 0x00, 0x2e, 0x1c, 0x01, 0xe9, 0x02, 0x1c, + 0x81, 0xa6, 0x01, 0xaa, 0x99, 0x01, 0xab, 0x8c, 0x01, 0x42, 0x74, 0x00, + 0x29, 0x1c, 0x01, 0x42, 0x6c, 0x00, 0x26, 0x1c, 0x01, 0xae, 0x68, 0xef, + 0x0c, 0x1c, 0x01, 0xb0, 0x58, 0x42, 0x71, 0x00, 0x28, 0x1c, 0x01, 0xb3, + 0x40, 0xb4, 0x27, 0xf5, 0x04, 0x1c, 0x81, 0x1e, 0xb6, 0x06, 0x42, 0xbc, + 0x22, 0x27, 0x1c, 0x41, 0xe1, 0x2a, 0x1c, 0x01, 0x07, 0x23, 0xc1, 0x01, + 0xff, 0xec, 0x08, 0x1c, 0x01, 0xf2, 0x06, 0x1c, 0xc1, 0x00, 0xf2, 0x07, + 0x1c, 0x41, 0xf5, 0x05, 0x1c, 0x41, 0xe1, 0x1d, 0x1c, 0x01, 0x42, 0x22, + 0x00, 0x1e, 0x1c, 0x01, 0xb4, 0x01, 0xff, 0xe1, 0x18, 0x1c, 0x01, 0x42, + 0x22, 0x00, 0x19, 0x1c, 0x41, 0xe1, 0x2d, 0x1c, 0x01, 0x42, 0x22, 0x00, + 0x2b, 0x1c, 0x01, 0x42, 0x40, 0x06, 0x2c, 0x1c, 0x41, 0xe1, 0x22, 0x1c, + 0x01, 0x42, 0x22, 0x00, 0x23, 0x1c, 0x41, 0xe1, 0x21, 0x1c, 0x01, 0x42, + 0x24, 0x02, 0x12, 0x1c, 0x01, 0x42, 0x2a, 0x05, 0x1c, 0x1c, 0x01, 0x42, + 0xbc, 0x22, 0x17, 0x1c, 0x41, 0xe1, 0x0e, 0x1c, 0x01, 0x42, 0x22, 0x00, + 0x0f, 0x1c, 0x41, 0xe1, 0x15, 0x1c, 0x01, 0x42, 0x22, 0x00, 0x16, 0x1c, + 0x41, 0xe9, 0x03, 0x1c, 0x41, 0xe1, 0x10, 0x1c, 0x01, 0x42, 0x22, 0x00, + 0x11, 0x1c, 0x41, 0xe1, 0x1f, 0x1c, 0x01, 0xa4, 0x06, 0x42, 0x22, 0x00, + 0x20, 0x1c, 0x41, 0xe1, 0x1a, 0x1c, 0x01, 0x42, 0x22, 0x00, 0x1b, 0x1c, + 0x41, 0xe1, 0x13, 0x1c, 0x01, 0x42, 0x22, 0x00, 0x14, 0x1c, 0x41, 0xe1, + 0x24, 0x1c, 0x01, 0x42, 0x22, 0x00, 0x25, 0x1c, 0x41, 0xe1, 0x01, 0x1c, + 0x01, 0xe9, 0x0b, 0x1c, 0x01, 0xf5, 0x0d, 0x1c, 0x41, 0xd1, 0x44, 0x1c, + 0x01, 0xd2, 0x45, 0x1c, 0x41, 0x44, 0x73, 0x20, 0x41, 0x1c, 0x01, 0x05, + 0xf0, 0x06, 0x06, 0x4b, 0x09, 0xa1, 0x42, 0x1c, 0x41, 0x45, 0x12, 0x0b, + 0x58, 0x1c, 0x01, 0xa6, 0x2e, 0x44, 0xcf, 0x2a, 0x59, 0x1c, 0x01, 0x43, + 0x0e, 0x0b, 0x51, 0x1c, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, + 0x50, 0x1c, 0x41, 0x44, 0x25, 0x01, 0x53, 0x1c, 0x01, 0x42, 0x15, 0x02, + 0x52, 0x1c, 0x41, 0x44, 0xc9, 0x1d, 0x57, 0x1c, 0x01, 0x42, 0x01, 0x26, + 0x56, 0x1c, 0x41, 0x43, 0xd2, 0x05, 0x55, 0x1c, 0x01, 0x43, 0xf6, 0x06, + 0x54, 0x1c, 0x41, 0xa1, 0xad, 0x08, 0x45, 0x01, 0xe5, 0x35, 0x22, 0x00, + 0xe4, 0xcf, 0xf6, 0x01, 0xa5, 0x94, 0x08, 0x42, 0x60, 0x07, 0x14, 0xf5, + 0x81, 0xec, 0x07, 0xae, 0xde, 0x02, 0x09, 0xb5, 0xbe, 0x14, 0xb4, 0x06, + 0x4a, 0x43, 0xb3, 0xc3, 0xf9, 0x41, 0x47, 0x15, 0x08, 0x36, 0x21, 0x00, + 0x44, 0xc3, 0x09, 0x6c, 0x22, 0x40, 0x0f, 0xe4, 0x05, 0xa3, 0x01, 0x0d, + 0x76, 0x08, 0x01, 0xff, 0xa1, 0x91, 0x01, 0x47, 0x6b, 0xcf, 0xbc, 0x6e, + 0x01, 0xa4, 0x7d, 0xa5, 0x6a, 0x45, 0x64, 0xe6, 0xbf, 0x6e, 0x01, 0xa7, + 0x56, 0x48, 0xb8, 0xc6, 0xc1, 0x6e, 0x01, 0xe9, 0xc2, 0x6e, 0x01, 0x44, + 0xd2, 0xe4, 0xc4, 0x6e, 0x01, 0x45, 0x12, 0xe8, 0xc5, 0x6e, 0x01, 0x44, + 0x8e, 0x58, 0xc6, 0x6e, 0x01, 0xae, 0x2c, 0x42, 0x9d, 0x01, 0xca, 0x6e, + 0x01, 0x42, 0xe6, 0x05, 0xcb, 0x6e, 0x01, 0xb3, 0x12, 0x48, 0x68, 0xcb, + 0xd0, 0x6e, 0x01, 0x42, 0x3e, 0x00, 0xd1, 0x6e, 0x01, 0x45, 0x3b, 0xec, + 0xd2, 0x6e, 0x41, 0x43, 0x21, 0x08, 0xce, 0x6e, 0x01, 0x43, 0x69, 0x36, + 0xcf, 0x6e, 0x41, 0x43, 0x44, 0x9c, 0xc9, 0x6e, 0x01, 0x43, 0x57, 0x07, + 0xc7, 0x6e, 0x41, 0x42, 0x2a, 0x05, 0xc8, 0x6e, 0x01, 0x44, 0xf1, 0xf1, + 0xc0, 0x6e, 0x41, 0xe8, 0xbe, 0x6e, 0x01, 0x44, 0x82, 0x7a, 0xcc, 0x6e, + 0xc1, 0x00, 0x47, 0x9d, 0xcd, 0xcd, 0x6e, 0x41, 0x45, 0x61, 0xe4, 0xbd, + 0x6e, 0x01, 0x43, 0x20, 0xd2, 0xc3, 0x6e, 0x41, 0x44, 0x51, 0xf2, 0xbb, + 0x6e, 0x01, 0xf9, 0xd3, 0x6e, 0x41, 0xa1, 0x91, 0x01, 0x47, 0x6b, 0xcf, + 0xa1, 0x6e, 0x01, 0xa4, 0x7d, 0xa5, 0x6a, 0x45, 0x64, 0xe6, 0xa4, 0x6e, + 0x01, 0xa7, 0x56, 0x48, 0xb8, 0xc6, 0xa6, 0x6e, 0x01, 0xe9, 0xa7, 0x6e, + 0x01, 0x44, 0xd2, 0xe4, 0xa9, 0x6e, 0x01, 0x45, 0x12, 0xe8, 0xaa, 0x6e, + 0x01, 0x44, 0x8e, 0x58, 0xab, 0x6e, 0x01, 0xae, 0x2c, 0x42, 0x9d, 0x01, + 0xaf, 0x6e, 0x01, 0x42, 0xe6, 0x05, 0xb0, 0x6e, 0x01, 0xb3, 0x12, 0x48, + 0x68, 0xcb, 0xb5, 0x6e, 0x01, 0x42, 0x3e, 0x00, 0xb6, 0x6e, 0x01, 0x45, + 0x3b, 0xec, 0xb7, 0x6e, 0x41, 0x43, 0x21, 0x08, 0xb3, 0x6e, 0x01, 0x43, + 0x69, 0x36, 0xb4, 0x6e, 0x41, 0x43, 0x44, 0x9c, 0xae, 0x6e, 0x01, 0x43, + 0x57, 0x07, 0xac, 0x6e, 0x41, 0x42, 0x2a, 0x05, 0xad, 0x6e, 0x01, 0x44, + 0xf1, 0xf1, 0xa5, 0x6e, 0x41, 0xe8, 0xa3, 0x6e, 0x01, 0x44, 0x82, 0x7a, + 0xb1, 0x6e, 0xc1, 0x00, 0x47, 0x9d, 0xcd, 0xb2, 0x6e, 0x41, 0x45, 0x61, + 0xe4, 0xa2, 0x6e, 0x01, 0x43, 0x20, 0xd2, 0xa8, 0x6e, 0x41, 0x44, 0x51, + 0xf2, 0xa0, 0x6e, 0x01, 0xf9, 0xb8, 0x6e, 0x41, 0x05, 0xf8, 0xb5, 0x1b, + 0xb4, 0x0d, 0x49, 0xcd, 0xc1, 0x2c, 0x23, 0xc0, 0x00, 0x4c, 0xef, 0x22, + 0xe3, 0x23, 0x40, 0x69, 0x95, 0x01, 0x5e, 0x2b, 0x00, 0x45, 0x5c, 0xe9, + 0x71, 0xf3, 0x41, 0xa1, 0xd7, 0x04, 0x09, 0x54, 0x41, 0xa5, 0x04, 0x06, + 0xef, 0x06, 0xde, 0x03, 0x4a, 0xa1, 0xaa, 0xfb, 0x09, 0x00, 0x46, 0x1c, + 0xdd, 0xfa, 0x09, 0x00, 0x07, 0xec, 0x05, 0x8c, 0x01, 0x06, 0x65, 0x80, + 0x7c, 0xb3, 0x44, 0x0b, 0x40, 0x77, 0x01, 0xff, 0xa1, 0x31, 0xe5, 0xc7, + 0x09, 0x00, 0xe9, 0xbf, 0x09, 0x80, 0x24, 0xef, 0xcb, 0x09, 0x00, 0xf5, + 0xc1, 0x09, 0x80, 0x17, 0x08, 0x22, 0xc1, 0x01, 0xff, 0xec, 0xe2, 0x09, + 0x80, 0x09, 0xf2, 0xc3, 0x09, 0xc0, 0x00, 0xf2, 0xc4, 0x09, 0x40, 0xec, + 0xe3, 0x09, 0x40, 0xf5, 0xc2, 0x09, 0x40, 0xe9, 0xc0, 0x09, 0x40, 0xe1, + 0xbe, 0x09, 0x00, 0xe9, 0xc8, 0x09, 0x00, 0xf5, 0xcc, 0x09, 0x40, 0x4a, + 0xbd, 0xa7, 0xfe, 0x09, 0x00, 0x04, 0x5b, 0x03, 0x01, 0xff, 0xa1, 0x1d, + 0x4b, 0xd7, 0x23, 0x81, 0x09, 0x00, 0x45, 0x3f, 0x3f, 0xbc, 0x09, 0x00, + 0x02, 0x02, 0x00, 0x01, 0xff, 0x44, 0xe5, 0x23, 0xcd, 0x09, 0x00, 0x45, + 0xec, 0x4b, 0x83, 0x09, 0x40, 0x47, 0x3d, 0x16, 0x82, 0x09, 0x00, 0x47, + 0xaf, 0x88, 0xbd, 0x09, 0x40, 0x44, 0xb9, 0x00, 0xf2, 0x09, 0x00, 0x44, + 0x5a, 0x03, 0xf3, 0x09, 0x40, 0xe1, 0x85, 0x09, 0x80, 0xaf, 0x02, 0xa2, + 0xa2, 0x02, 0xa3, 0x95, 0x02, 0xa4, 0xfc, 0x01, 0xe5, 0x8f, 0x09, 0x00, + 0xa7, 0xeb, 0x01, 0x42, 0x22, 0x00, 0xb9, 0x09, 0x00, 0xe9, 0x87, 0x09, + 0x80, 0xdb, 0x01, 0xaa, 0xce, 0x01, 0xab, 0xba, 0x01, 0x42, 0x74, 0x00, + 0xb2, 0x09, 0x00, 0x42, 0x6c, 0x00, 0xae, 0x09, 0x00, 0xae, 0x95, 0x01, + 0xef, 0x93, 0x09, 0x00, 0xb0, 0x84, 0x01, 0xb2, 0x60, 0xb3, 0x4e, 0xb4, + 0x35, 0xf5, 0x89, 0x09, 0x80, 0x2c, 0xb6, 0x0d, 0xb9, 0x01, 0xff, 0xe1, + 0xaf, 0x09, 0x00, 0x42, 0xbc, 0x22, 0xdf, 0x09, 0x40, 0x4d, 0x6a, 0x82, + 0xfc, 0x09, 0x00, 0x07, 0x23, 0xc1, 0x01, 0xff, 0xec, 0x8c, 0x09, 0x80, + 0x09, 0xf2, 0x8b, 0x09, 0xc0, 0x00, 0xf2, 0xe0, 0x09, 0x40, 0xec, 0xe1, + 0x09, 0x40, 0xf5, 0x8a, 0x09, 0x40, 0xe1, 0xa4, 0x09, 0x00, 0x42, 0x22, + 0x00, 0xa5, 0x09, 0x00, 0xb4, 0x01, 0xff, 0xe1, 0x9f, 0x09, 0x00, 0x42, + 0x22, 0x00, 0xa0, 0x09, 0x40, 0xe1, 0xb8, 0x09, 0x00, 0x42, 0x22, 0x00, + 0xb6, 0x09, 0x00, 0x42, 0x40, 0x06, 0xb7, 0x09, 0x40, 0xe1, 0xb0, 0x09, + 0x80, 0x0c, 0x42, 0x22, 0x00, 0xdd, 0x09, 0x00, 0x42, 0x71, 0x00, 0xdc, + 0x09, 0x40, 0x06, 0x50, 0x00, 0x01, 0xff, 0x4e, 0xb3, 0x79, 0xf1, 0x09, + 0x00, 0x4f, 0x4a, 0x70, 0xf0, 0x09, 0x40, 0xe1, 0xaa, 0x09, 0x00, 0x42, + 0x22, 0x00, 0xab, 0x09, 0x40, 0xe1, 0xa8, 0x09, 0x00, 0x42, 0x24, 0x02, + 0x99, 0x09, 0x00, 0x42, 0x2a, 0x05, 0xa3, 0x09, 0x00, 0x42, 0xbc, 0x22, + 0x9e, 0x09, 0x40, 0xe1, 0x95, 0x09, 0x00, 0x42, 0x22, 0x00, 0x96, 0x09, + 0xc0, 0x00, 0x46, 0x36, 0xde, 0xce, 0x09, 0x40, 0xe1, 0x9c, 0x09, 0x00, + 0x42, 0x22, 0x00, 0x9d, 0x09, 0x40, 0xe9, 0x88, 0x09, 0x40, 0xe1, 0x97, + 0x09, 0x00, 0x42, 0x22, 0x00, 0x98, 0x09, 0x40, 0xe1, 0xa6, 0x09, 0x00, + 0xa4, 0x06, 0x42, 0x22, 0x00, 0xa7, 0x09, 0x40, 0xe1, 0xa1, 0x09, 0x00, + 0x42, 0x22, 0x00, 0xa2, 0x09, 0x40, 0xe1, 0x9a, 0x09, 0x00, 0x42, 0x22, + 0x00, 0x9b, 0x09, 0x40, 0xe1, 0xac, 0x09, 0x00, 0x42, 0x22, 0x00, 0xad, + 0x09, 0x40, 0xe1, 0x86, 0x09, 0x00, 0xe9, 0x90, 0x09, 0x00, 0xf5, 0x94, + 0x09, 0x40, 0x45, 0x12, 0x0b, 0xee, 0x09, 0x00, 0xa6, 0x2e, 0x44, 0xcf, + 0x2a, 0xef, 0x09, 0x00, 0x43, 0x0e, 0x0b, 0xe7, 0x09, 0x00, 0xb3, 0x14, + 0xb4, 0x06, 0x44, 0x43, 0x1e, 0xe6, 0x09, 0x40, 0x44, 0x25, 0x01, 0xe9, + 0x09, 0x00, 0x42, 0x15, 0x02, 0xe8, 0x09, 0x40, 0x44, 0xc9, 0x1d, 0xed, + 0x09, 0x00, 0x42, 0x01, 0x26, 0xec, 0x09, 0x40, 0x43, 0xd2, 0x05, 0xeb, + 0x09, 0x00, 0x43, 0xf6, 0x06, 0xea, 0x09, 0x40, 0x53, 0xf9, 0x48, 0xf9, + 0x09, 0x00, 0x0a, 0x94, 0x86, 0x01, 0xff, 0x44, 0xf5, 0x06, 0xf7, 0x09, + 0x00, 0x43, 0x0e, 0x0b, 0xf4, 0x09, 0x80, 0x0f, 0xb4, 0x01, 0xff, 0x44, + 0x25, 0x01, 0xf6, 0x09, 0x00, 0x42, 0x15, 0x02, 0xf5, 0x09, 0x40, 0x5a, + 0x78, 0x1e, 0xf8, 0x09, 0x40, 0x50, 0xdd, 0x57, 0xfd, 0x09, 0x00, 0x43, + 0x5a, 0x87, 0x80, 0x09, 0x00, 0x4d, 0x18, 0x76, 0xd7, 0x09, 0x40, 0x80, + 0x0c, 0x48, 0xc0, 0xc6, 0xce, 0xf6, 0x01, 0x43, 0x50, 0x16, 0xce, 0xce, + 0x41, 0x46, 0x1a, 0xdf, 0xd1, 0xfa, 0x01, 0x46, 0x16, 0x08, 0x7e, 0x23, + 0x00, 0x58, 0xfe, 0x2b, 0x15, 0xf5, 0x41, 0x45, 0x90, 0xb6, 0x7a, 0xf3, + 0x01, 0x43, 0xbd, 0x01, 0xb2, 0xfa, 0x41, 0x50, 0x56, 0x61, 0xd6, 0xf3, + 0x01, 0x04, 0x67, 0x9f, 0x20, 0x42, 0x5f, 0x01, 0xd8, 0xfa, 0x01, 0xb2, + 0x0c, 0x4a, 0xf9, 0xb1, 0x93, 0xf4, 0x01, 0x43, 0x32, 0x00, 0xab, 0xf9, + 0x41, 0x45, 0x0b, 0x08, 0x3b, 0xf4, 0x01, 0x4a, 0x39, 0xa9, 0xd4, 0xf9, + 0x41, 0x57, 0x72, 0x2d, 0x9c, 0xf3, 0x01, 0x58, 0xf6, 0x27, 0x9d, 0xf3, + 0x01, 0x4c, 0x6b, 0x8e, 0x6b, 0x26, 0x00, 0x4f, 0x1a, 0x73, 0x6c, 0x26, + 0x40, 0x42, 0x08, 0x00, 0x76, 0xf4, 0x81, 0xa9, 0x30, 0xa3, 0xeb, 0x2f, + 0xa4, 0xdc, 0x2f, 0xa7, 0xc7, 0x2f, 0xac, 0xa9, 0x27, 0x04, 0x43, 0x92, + 0xca, 0x05, 0xae, 0x99, 0x05, 0xb2, 0x82, 0x05, 0xb3, 0x80, 0x03, 0xf4, + 0x87, 0xf9, 0xc1, 0x00, 0x03, 0xcd, 0x4c, 0x11, 0xe8, 0xc0, 0xf6, 0x81, + 0x06, 0x44, 0xfa, 0xd9, 0x0b, 0xf5, 0x41, 0x43, 0x6a, 0xb5, 0xc1, 0xf6, + 0x41, 0x0f, 0x3d, 0x33, 0xd7, 0x02, 0x07, 0xec, 0x05, 0x6b, 0x03, 0xb3, + 0x43, 0x5b, 0xb3, 0x33, 0x0b, 0x40, 0x77, 0x01, 0xff, 0xe5, 0xe7, 0x1b, + 0x80, 0x25, 0xe9, 0xea, 0x1b, 0x00, 0x05, 0x4a, 0xd2, 0x15, 0xef, 0xec, + 0x1b, 0x00, 0x48, 0xc0, 0xc9, 0xe8, 0x1b, 0x00, 0xf5, 0xee, 0x1b, 0xc0, + 0x00, 0x52, 0x45, 0x4f, 0xef, 0x1b, 0x40, 0xe9, 0xeb, 0x1b, 0x00, 0xef, + 0xed, 0x1b, 0x40, 0xe5, 0xe9, 0x1b, 0x40, 0x49, 0x35, 0xba, 0xe6, 0x1b, + 0x00, 0x0c, 0x23, 0x97, 0x01, 0xff, 0x45, 0xb3, 0xe7, 0xfe, 0x1b, 0x00, + 0x48, 0x78, 0xc8, 0xfc, 0x1b, 0x00, 0xb0, 0x01, 0xff, 0x47, 0xed, 0xce, + 0xff, 0x1b, 0x00, 0x49, 0x62, 0xba, 0xfd, 0x1b, 0x40, 0x45, 0xef, 0xce, + 0xf2, 0x1b, 0x00, 0x47, 0xee, 0xd3, 0xf3, 0x1b, 0x40, 0xe1, 0xc0, 0x1b, + 0x00, 0x42, 0x16, 0x00, 0xc5, 0x1b, 0x00, 0x42, 0x37, 0x00, 0xe1, 0x1b, + 0x00, 0x42, 0xf0, 0x10, 0xd1, 0x1b, 0x00, 0x42, 0x24, 0x02, 0xce, 0x1b, + 0x00, 0x42, 0x22, 0x00, 0xc2, 0x1b, 0x00, 0xe9, 0xe4, 0x1b, 0x00, 0x42, + 0x56, 0x19, 0xd0, 0x1b, 0x00, 0x47, 0x4a, 0xd2, 0xc6, 0x1b, 0x00, 0x42, + 0x74, 0x00, 0xde, 0x1b, 0x00, 0xad, 0x8b, 0x01, 0xae, 0x6d, 0x42, 0xbb, + 0x09, 0xc7, 0x1b, 0x80, 0x60, 0x42, 0x71, 0x00, 0xd2, 0x1b, 0x00, 0xb3, + 0x10, 0xf5, 0xe5, 0x1b, 0x00, 0x42, 0xa9, 0x01, 0xcb, 0x1b, 0x00, 0x42, + 0xbc, 0x22, 0xdb, 0x1b, 0x40, 0xe1, 0xd8, 0x1b, 0x00, 0x0a, 0x4b, 0x4f, + 0x06, 0x4a, 0x5b, 0xaf, 0xd6, 0x1b, 0x40, 0xe1, 0xc1, 0x1b, 0x00, 0x42, + 0x24, 0x02, 0xcf, 0x1b, 0x00, 0x42, 0x22, 0x00, 0xc3, 0x1b, 0x00, 0x42, + 0x74, 0x00, 0xdf, 0x1b, 0x00, 0x42, 0x6c, 0x00, 0xd5, 0x1b, 0x00, 0x42, + 0xbb, 0x09, 0xc8, 0x1b, 0x00, 0x42, 0x71, 0x00, 0xd3, 0x1b, 0x00, 0x42, + 0x40, 0x06, 0xd9, 0x1b, 0x00, 0x42, 0xa9, 0x01, 0xcc, 0x1b, 0x00, 0x42, + 0xbc, 0x22, 0xdc, 0x1b, 0x40, 0x47, 0x82, 0xd2, 0xcd, 0x1b, 0x40, 0xe1, + 0xc9, 0x1b, 0x00, 0x42, 0xf0, 0x10, 0xe2, 0x1b, 0x00, 0x42, 0x24, 0x02, + 0xdd, 0x1b, 0x00, 0x4a, 0x0b, 0xaf, 0xd7, 0x1b, 0x00, 0x42, 0xbc, 0x22, + 0xe0, 0x1b, 0x40, 0xe1, 0xd4, 0x1b, 0x80, 0x06, 0x42, 0x16, 0x00, 0xe3, + 0x1b, 0x40, 0x09, 0x36, 0xbc, 0x01, 0xff, 0x42, 0x22, 0x00, 0xc4, 0x1b, + 0x00, 0x42, 0x2a, 0x05, 0xca, 0x1b, 0x00, 0x42, 0x40, 0x06, 0xda, 0x1b, + 0x40, 0xe8, 0xf1, 0x1b, 0x00, 0x42, 0x1d, 0x01, 0xf0, 0x1b, 0x40, 0x45, + 0xbf, 0xe5, 0xbe, 0x26, 0x00, 0x43, 0x67, 0x09, 0xfa, 0xf9, 0x81, 0xeb, + 0x01, 0x07, 0x92, 0xd5, 0x01, 0xff, 0x0a, 0x41, 0x59, 0xbb, 0x01, 0x49, + 0x81, 0x16, 0xf5, 0x6a, 0x01, 0x07, 0xec, 0x05, 0x01, 0xff, 0xe1, 0xe7, + 0x6a, 0x01, 0x42, 0x16, 0x00, 0xe2, 0x6a, 0x01, 0x42, 0x73, 0x02, 0xdf, + 0x6a, 0x01, 0xa4, 0x93, 0x01, 0xe5, 0xec, 0x6a, 0x81, 0x83, 0x01, 0x42, + 0x0c, 0x08, 0xd3, 0x6a, 0x01, 0xa7, 0x6f, 0x44, 0x3e, 0xf0, 0xda, 0x6a, + 0x01, 0xe9, 0xed, 0x6a, 0x01, 0x42, 0x9d, 0x0a, 0xd9, 0x6a, 0x01, 0xab, + 0x53, 0x43, 0xb6, 0x05, 0xd4, 0x6a, 0x01, 0xef, 0xe8, 0x6a, 0x81, 0x44, + 0x42, 0xbb, 0x09, 0xe5, 0x6a, 0x01, 0x42, 0x46, 0x03, 0xd2, 0x6a, 0x01, + 0x42, 0x1e, 0x00, 0xe1, 0x6a, 0x01, 0xf5, 0xea, 0x6a, 0x81, 0x27, 0x42, + 0x67, 0x62, 0xe3, 0x6a, 0x01, 0x42, 0xa9, 0x01, 0xdb, 0x6a, 0x81, 0x14, + 0xb9, 0x06, 0x42, 0x0f, 0x00, 0xdc, 0x6a, 0x41, 0x43, 0x2e, 0x11, 0xe4, + 0x6a, 0x01, 0x42, 0xf4, 0x02, 0xd5, 0x6a, 0x41, 0x43, 0x7a, 0x36, 0xe6, + 0x6a, 0x41, 0x42, 0x7c, 0x31, 0xe0, 0x6a, 0x41, 0xef, 0xe9, 0x6a, 0x41, + 0xe1, 0xd1, 0x6a, 0x01, 0x43, 0xe2, 0x42, 0xd8, 0x6a, 0x41, 0x42, 0x18, + 0x0a, 0xd6, 0x6a, 0x01, 0x42, 0x6a, 0x0d, 0xdd, 0x6a, 0x41, 0xe5, 0xeb, + 0x6a, 0x01, 0x43, 0x4e, 0x1f, 0xd0, 0x6a, 0x41, 0x43, 0x45, 0xf0, 0xd7, + 0x6a, 0x01, 0xef, 0xde, 0x6a, 0x41, 0x04, 0x48, 0x0b, 0x16, 0x03, 0x13, + 0x01, 0x06, 0x48, 0x26, 0xb5, 0xf2, 0x6a, 0x41, 0x45, 0x3a, 0x2d, 0xf1, + 0x6a, 0x01, 0x49, 0x25, 0xb5, 0xf3, 0x6a, 0x41, 0x45, 0x3a, 0x2d, 0xf0, + 0x6a, 0x01, 0x49, 0x1c, 0xb5, 0xf4, 0x6a, 0x41, 0x4d, 0x0b, 0x81, 0xc0, + 0xf3, 0x41, 0x80, 0x06, 0x48, 0x00, 0xc4, 0x88, 0xf4, 0x41, 0x45, 0xb3, + 0xc4, 0xca, 0xf4, 0x01, 0x47, 0xb6, 0xd3, 0xfc, 0xf9, 0x41, 0x43, 0x4b, + 0x12, 0x4c, 0xf3, 0x01, 0x42, 0x9d, 0x0a, 0x95, 0xfa, 0x01, 0xeb, 0xe6, + 0xf3, 0xc1, 0x00, 0x0a, 0x6b, 0xae, 0x01, 0xff, 0x4b, 0x10, 0x9b, 0xb5, + 0xf4, 0x01, 0x49, 0xc4, 0xb8, 0xb6, 0xf4, 0x01, 0x4a, 0xab, 0xaf, 0xb7, + 0xf4, 0x01, 0x48, 0x2f, 0x7f, 0xb4, 0xf4, 0x41, 0x02, 0x13, 0x05, 0xb6, + 0x21, 0x49, 0x81, 0x16, 0xf3, 0xa6, 0x00, 0x07, 0xec, 0x05, 0x12, 0x47, + 0x93, 0xd3, 0xf2, 0xa6, 0x00, 0x4d, 0xa6, 0x34, 0xf7, 0xa6, 0x00, 0x49, + 0x21, 0xbf, 0xf6, 0xa6, 0x40, 0xe1, 0xa0, 0xa6, 0x00, 0x42, 0x27, 0x01, + 0xa4, 0xa6, 0x00, 0xa6, 0xf7, 0x20, 0xe9, 0xa9, 0xa6, 0x00, 0xab, 0xb7, + 0x20, 0xac, 0x9c, 0x20, 0xed, 0xb3, 0xa6, 0x80, 0xec, 0x1f, 0xae, 0x90, + 0x1f, 0xef, 0xa7, 0xa6, 0x00, 0xb0, 0x93, 0x01, 0xb2, 0x6b, 0xb3, 0x3d, + 0xb4, 0x23, 0xf5, 0xa2, 0xa6, 0x00, 0xb7, 0x13, 0xb9, 0x01, 0xff, 0xe1, + 0xc2, 0xa6, 0x00, 0x42, 0x63, 0x93, 0xbf, 0xa6, 0x00, 0x42, 0x0b, 0x9c, + 0xc1, 0xa6, 0x40, 0xe1, 0xda, 0xa6, 0x00, 0x42, 0xd6, 0x13, 0xc9, 0xa6, + 0x40, 0xa1, 0x0e, 0xa5, 0x04, 0xe9, 0xe4, 0xa6, 0x40, 0xee, 0xea, 0xa6, + 0x00, 0xf4, 0xe8, 0xa6, 0x40, 0xe1, 0xb0, 0xa6, 0x00, 0xe5, 0xa6, 0xa6, + 0x40, 0x44, 0x83, 0xcd, 0xec, 0xa6, 0x00, 0x43, 0xfc, 0xeb, 0xb9, 0xa6, + 0x00, 0xa8, 0x0a, 0xe9, 0xb7, 0xa6, 0x00, 0x42, 0x27, 0x74, 0xb4, 0xa6, + 0x40, 0x43, 0xfc, 0xeb, 0xb8, 0xa6, 0x00, 0x42, 0x52, 0x28, 0xb6, 0xa6, + 0x00, 0xef, 0xd6, 0xa6, 0x00, 0xf5, 0xc0, 0xa6, 0x40, 0x42, 0x93, 0x0f, + 0xd1, 0xa6, 0x00, 0xa5, 0x10, 0xa9, 0x04, 0xf5, 0xcc, 0xa6, 0x40, 0x42, + 0x27, 0x01, 0xad, 0xa6, 0x00, 0xe9, 0xac, 0xa6, 0x40, 0xe5, 0xa5, 0xa6, + 0x00, 0xee, 0xe1, 0xa6, 0x00, 0x42, 0xbf, 0xe0, 0xd0, 0xa6, 0x40, 0xe1, + 0xab, 0xa6, 0x00, 0xa5, 0xe5, 0x1d, 0x05, 0xe6, 0xe6, 0x11, 0xe9, 0xdd, + 0xa6, 0x00, 0xb5, 0x01, 0xff, 0x42, 0x93, 0x0f, 0xd7, 0xa6, 0x00, 0xe5, + 0xc8, 0xa6, 0x40, 0x02, 0x5a, 0x00, 0xdf, 0x18, 0x02, 0x26, 0x02, 0xb8, + 0x15, 0x02, 0x53, 0x03, 0x94, 0x10, 0x02, 0x06, 0x00, 0x96, 0x0a, 0x02, + 0x60, 0x00, 0xc2, 0x02, 0x02, 0x25, 0x00, 0x01, 0xff, 0x42, 0x27, 0x01, + 0x06, 0x6a, 0x01, 0x43, 0x46, 0xf4, 0x2b, 0x6a, 0x01, 0xab, 0x8c, 0x02, + 0xac, 0xfb, 0x01, 0xed, 0x11, 0x6a, 0x81, 0xd9, 0x01, 0xae, 0x93, 0x01, + 0xb0, 0x7f, 0xb2, 0x5d, 0xb3, 0x35, 0xb4, 0x23, 0xf5, 0x04, 0x6a, 0x01, + 0x44, 0x11, 0xf3, 0x38, 0x6a, 0x01, 0xb7, 0x0d, 0xb9, 0x01, 0xff, 0xe1, + 0x1d, 0x6a, 0x01, 0x42, 0x63, 0x93, 0x1b, 0x6a, 0x41, 0xe1, 0x2c, 0x6a, + 0x01, 0x42, 0xd6, 0x13, 0x21, 0x6a, 0x41, 0xa1, 0x06, 0x42, 0xed, 0x05, + 0x35, 0x6a, 0x41, 0xe1, 0x0e, 0x6a, 0x01, 0xe5, 0x08, 0x6a, 0x41, 0x44, + 0x83, 0xcd, 0x37, 0x6a, 0x01, 0x43, 0xfc, 0xeb, 0x15, 0x6a, 0x01, 0xa8, + 0x0a, 0xe9, 0x14, 0x6a, 0x01, 0x42, 0x27, 0x74, 0x12, 0x6a, 0x41, 0x42, + 0x52, 0x28, 0x13, 0x6a, 0x01, 0xef, 0x29, 0x6a, 0x01, 0xf5, 0x1c, 0x6a, + 0x41, 0xa5, 0x10, 0xa9, 0x04, 0xf5, 0x23, 0x6a, 0x41, 0x42, 0x27, 0x01, + 0x0c, 0x6a, 0x01, 0xe9, 0x0b, 0x6a, 0x41, 0xe5, 0x07, 0x6a, 0x01, 0xee, + 0x31, 0x6a, 0x01, 0x42, 0xbf, 0xe0, 0x25, 0x6a, 0x41, 0xa5, 0x06, 0x43, + 0x9f, 0x95, 0x2a, 0x6a, 0x41, 0xe5, 0x22, 0x6a, 0x01, 0x42, 0xbf, 0xe0, + 0x1f, 0x6a, 0x41, 0x43, 0xa5, 0x57, 0x0f, 0x6a, 0x01, 0xa7, 0x2f, 0xe9, + 0x24, 0x6a, 0x01, 0xaa, 0x1d, 0x43, 0xa4, 0x02, 0x1e, 0x6a, 0x01, 0x43, + 0x0a, 0x18, 0x20, 0x6a, 0x01, 0xf5, 0x19, 0x6a, 0x81, 0x06, 0x42, 0x7e, + 0x1a, 0x09, 0x6a, 0x41, 0x42, 0x93, 0x0f, 0x18, 0x6a, 0x41, 0x43, 0x61, + 0x87, 0x10, 0x6a, 0x01, 0x43, 0x9f, 0x95, 0x1a, 0x6a, 0x41, 0x42, 0x24, + 0x02, 0x28, 0x6a, 0x01, 0x45, 0xf4, 0xe7, 0x27, 0x6a, 0x41, 0xe1, 0x32, + 0x6a, 0x01, 0xa2, 0x0a, 0x44, 0x98, 0xef, 0x0d, 0x6a, 0x01, 0xef, 0x33, + 0x6a, 0x41, 0x42, 0x80, 0x12, 0x34, 0x6a, 0x01, 0x42, 0x92, 0x01, 0x30, + 0x6a, 0x41, 0xe1, 0x0a, 0x6a, 0x01, 0xe9, 0x2d, 0x6a, 0x01, 0x42, 0x63, + 0x93, 0x2e, 0x6a, 0x41, 0xe1, 0x03, 0x6a, 0x01, 0xa5, 0x14, 0xef, 0x2f, + 0x6a, 0x01, 0x42, 0xbb, 0x09, 0x36, 0x6a, 0x01, 0xf5, 0x05, 0x6a, 0x01, + 0x43, 0xcd, 0xa9, 0x16, 0x6a, 0x41, 0xee, 0x26, 0x6a, 0x01, 0xf4, 0x17, + 0x6a, 0x41, 0xe1, 0xd5, 0x69, 0x01, 0xa6, 0x95, 0x07, 0xa7, 0xde, 0x06, + 0xe9, 0xd8, 0x69, 0x01, 0xab, 0xa3, 0x06, 0xac, 0xf2, 0x05, 0xad, 0x94, + 0x05, 0xae, 0x81, 0x03, 0xef, 0xd7, 0x69, 0x01, 0xb0, 0x98, 0x02, 0xb2, + 0xff, 0x01, 0xb3, 0xc9, 0x01, 0xb4, 0x7a, 0xb6, 0x66, 0xb7, 0x53, 0xb9, + 0x01, 0xff, 0x42, 0xe5, 0x05, 0xac, 0x69, 0x01, 0x02, 0x97, 0x02, 0x33, + 0xa9, 0x27, 0x03, 0x63, 0x93, 0x17, 0xb5, 0x01, 0xff, 0x43, 0x1b, 0x42, + 0xe1, 0x69, 0x01, 0x42, 0x7b, 0x00, 0xb2, 0x69, 0x01, 0xee, 0xe5, 0x69, + 0x01, 0xf1, 0xe4, 0x69, 0x41, 0x45, 0x1e, 0x08, 0xe3, 0x69, 0x01, 0x48, + 0x40, 0xcb, 0xe2, 0x69, 0x41, 0x42, 0x27, 0x01, 0x94, 0x69, 0x01, 0xf4, + 0xae, 0x69, 0x41, 0x42, 0x93, 0x0f, 0x97, 0x69, 0x81, 0x08, 0xed, 0xbe, + 0x69, 0x01, 0xf8, 0xdf, 0x69, 0x41, 0xf4, 0xcf, 0x69, 0x41, 0x43, 0xfc, + 0xeb, 0x9e, 0x69, 0x01, 0xb5, 0x01, 0xff, 0xe5, 0xea, 0x69, 0x01, 0xef, + 0x75, 0x69, 0x41, 0xa5, 0x06, 0x42, 0x14, 0x05, 0x6a, 0x69, 0x41, 0xe5, + 0xec, 0x69, 0x01, 0x43, 0x9f, 0x95, 0x9d, 0x69, 0x41, 0xa1, 0x34, 0xa5, + 0x23, 0xaf, 0x14, 0xb5, 0x01, 0xff, 0x42, 0x93, 0x0f, 0x96, 0x69, 0x01, + 0xed, 0xaa, 0x69, 0xc1, 0x00, 0x42, 0x93, 0x0f, 0x99, 0x69, 0x41, 0xef, + 0x79, 0x69, 0x81, 0x04, 0xf1, 0xd6, 0x69, 0x41, 0xee, 0x67, 0x69, 0x41, + 0xee, 0x00, 0x6a, 0x01, 0xf5, 0xfd, 0x69, 0xc1, 0x00, 0x43, 0xa0, 0x95, + 0x9c, 0x69, 0x41, 0xe1, 0xdb, 0x69, 0x81, 0x0e, 0x48, 0x98, 0xc5, 0x8f, + 0x69, 0x01, 0xed, 0x72, 0x69, 0x01, 0xf1, 0xdc, 0x69, 0x41, 0xf1, 0xa1, + 0x69, 0x41, 0x42, 0x80, 0x12, 0x85, 0x69, 0x01, 0xa5, 0x23, 0xa8, 0x0c, + 0x42, 0x14, 0x05, 0x6d, 0x69, 0x01, 0x44, 0xf7, 0xc0, 0x9b, 0x69, 0x41, + 0x45, 0x9e, 0x95, 0xa4, 0x69, 0x01, 0x42, 0x6b, 0x18, 0xde, 0x69, 0x01, + 0xef, 0xf3, 0x69, 0xc1, 0x00, 0xf1, 0xf4, 0x69, 0x41, 0xe5, 0x76, 0x69, + 0x01, 0xf4, 0x90, 0x69, 0x41, 0xa1, 0x0c, 0x43, 0xfc, 0xeb, 0xef, 0x69, + 0x01, 0x45, 0x68, 0xe7, 0x82, 0x69, 0x41, 0xe5, 0xf0, 0x69, 0x01, 0xf1, + 0x6e, 0x69, 0x41, 0xa1, 0x47, 0xa5, 0x34, 0xe9, 0xf7, 0x69, 0x81, 0x22, + 0xef, 0x98, 0x69, 0x81, 0x17, 0xf5, 0xa0, 0x69, 0xc1, 0x00, 0xa1, 0x08, + 0xe5, 0xe9, 0x69, 0x01, 0xed, 0x91, 0x69, 0x41, 0xe5, 0x71, 0x69, 0x01, + 0xf1, 0xca, 0x69, 0x41, 0x42, 0x10, 0x00, 0xc2, 0x69, 0x41, 0xa5, 0x01, + 0xff, 0x42, 0x7b, 0x00, 0xb1, 0x69, 0x01, 0xf4, 0xcd, 0x69, 0x41, 0x42, + 0xb5, 0x05, 0x84, 0x69, 0x01, 0xb5, 0x01, 0xff, 0xf4, 0xbd, 0x69, 0x01, + 0xf8, 0xe7, 0x69, 0x41, 0x02, 0x9b, 0x01, 0x09, 0xe1, 0x6c, 0x69, 0xc1, + 0x00, 0xed, 0x78, 0x69, 0x41, 0x45, 0x0f, 0xe6, 0xd1, 0x69, 0x01, 0x45, + 0x44, 0xe8, 0xda, 0x69, 0x41, 0xe1, 0xf6, 0x69, 0x81, 0x86, 0x02, 0xa4, + 0xdb, 0x01, 0xa7, 0x66, 0xaa, 0x4a, 0x43, 0x95, 0xca, 0xa8, 0x69, 0x01, + 0x02, 0xa4, 0x02, 0x2d, 0xb4, 0x1f, 0x03, 0x24, 0x7a, 0x0f, 0xba, 0x01, + 0xff, 0x42, 0x80, 0x36, 0xa7, 0x69, 0x01, 0x42, 0x0b, 0x9c, 0xc1, 0x69, + 0x41, 0x47, 0xc0, 0x09, 0xc0, 0x69, 0x01, 0x47, 0xf7, 0xcf, 0xad, 0x69, + 0x41, 0x42, 0xe5, 0x05, 0xce, 0x69, 0x01, 0x42, 0x48, 0x04, 0xbc, 0x69, + 0x41, 0x43, 0x5e, 0x8e, 0x7c, 0x69, 0x01, 0xb5, 0x01, 0xff, 0xe5, 0x81, + 0x69, 0x01, 0x42, 0x1f, 0x00, 0x6f, 0x69, 0x41, 0x45, 0x95, 0xd3, 0x8a, + 0x69, 0x01, 0xa5, 0x01, 0xff, 0xe5, 0xd4, 0x69, 0x81, 0x06, 0x42, 0xbf, + 0xe0, 0x83, 0x69, 0x41, 0x46, 0x06, 0xd8, 0xe8, 0x69, 0x41, 0xe1, 0xf2, + 0x69, 0x01, 0x46, 0x8a, 0xdb, 0xa3, 0x69, 0x01, 0xa7, 0x3b, 0xab, 0x15, + 0xaf, 0x0b, 0x43, 0x9f, 0x95, 0xe0, 0x69, 0xc1, 0x00, 0xf4, 0xf1, 0x69, + 0x41, 0xf0, 0x7d, 0x69, 0x01, 0xf1, 0x80, 0x69, 0x41, 0xe1, 0x73, 0x69, + 0x81, 0x19, 0x02, 0x97, 0x02, 0x0b, 0xb5, 0x01, 0xff, 0xed, 0xcb, 0x69, + 0x01, 0xf0, 0xb6, 0x69, 0x41, 0x43, 0x61, 0x87, 0x89, 0x69, 0x01, 0xf8, + 0x7f, 0x69, 0x41, 0x43, 0xc9, 0x61, 0xb9, 0x69, 0x41, 0xa5, 0x19, 0x42, + 0x1f, 0x00, 0x7d, 0x69, 0x01, 0xb5, 0x01, 0xff, 0x4b, 0xdf, 0x98, 0x93, + 0x69, 0x01, 0xf0, 0xd0, 0x69, 0x01, 0x43, 0x75, 0x82, 0x86, 0x69, 0x41, + 0x43, 0x73, 0xa9, 0x8d, 0x69, 0x01, 0x43, 0x9f, 0x95, 0xbf, 0x69, 0xc1, + 0x00, 0xf4, 0x77, 0x69, 0x41, 0xa1, 0x12, 0xa9, 0x06, 0x42, 0x42, 0x0b, + 0x70, 0x69, 0x41, 0x42, 0x80, 0x36, 0xb0, 0x69, 0x01, 0xf1, 0x8e, 0x69, + 0x41, 0x02, 0x5a, 0x00, 0x04, 0xf0, 0x66, 0x69, 0x41, 0x48, 0x68, 0xc8, + 0xdd, 0x69, 0x01, 0x48, 0x18, 0xcb, 0x92, 0x69, 0x41, 0xe5, 0xc5, 0x69, + 0x41, 0xe1, 0xfb, 0x69, 0x81, 0x45, 0x02, 0xb7, 0x05, 0x37, 0x42, 0x92, + 0x01, 0xfa, 0x69, 0x01, 0x44, 0xc5, 0xef, 0xaf, 0x69, 0x01, 0x02, 0x99, + 0x48, 0x1d, 0xe9, 0xee, 0x69, 0x81, 0x12, 0x42, 0x10, 0x00, 0xff, 0x69, + 0x01, 0x43, 0x9f, 0x95, 0xc6, 0x69, 0x01, 0x42, 0x02, 0x00, 0xc9, 0x69, + 0x41, 0x42, 0x27, 0x01, 0xc3, 0x69, 0x41, 0xe1, 0x87, 0x69, 0x01, 0x42, + 0x92, 0x01, 0xa5, 0x69, 0x41, 0xe5, 0xa6, 0x69, 0x01, 0x42, 0x48, 0x04, + 0x68, 0x69, 0x41, 0xe5, 0xb8, 0x69, 0x81, 0x08, 0xf0, 0x8b, 0x69, 0x01, + 0xf1, 0xfc, 0x69, 0x41, 0xed, 0x7e, 0x69, 0x41, 0xa1, 0x1e, 0x45, 0x32, + 0xe6, 0xb3, 0x69, 0x01, 0xaf, 0x04, 0xf5, 0xed, 0x69, 0x41, 0xed, 0x7b, + 0x69, 0x01, 0xaf, 0x04, 0xf1, 0xf8, 0x69, 0x41, 0xee, 0x6b, 0x69, 0x01, + 0xf4, 0x8c, 0x69, 0x41, 0x42, 0x57, 0x00, 0x9f, 0x69, 0x01, 0xf0, 0x69, + 0x69, 0x01, 0xf1, 0xd9, 0x69, 0x41, 0xa5, 0x21, 0xe9, 0xfe, 0x69, 0x01, + 0xef, 0xf9, 0x69, 0x01, 0x44, 0x09, 0xf2, 0x74, 0x69, 0x01, 0xb5, 0x01, + 0xff, 0x42, 0xed, 0x05, 0xab, 0x69, 0x01, 0x42, 0x1f, 0x00, 0x7a, 0x69, + 0x01, 0xf4, 0xcc, 0x69, 0x41, 0xf4, 0xb7, 0x69, 0x01, 0xb5, 0x01, 0xff, + 0x42, 0x93, 0x0f, 0x9a, 0x69, 0x01, 0xf8, 0xe6, 0x69, 0x41, 0x02, 0xb7, + 0x05, 0x26, 0xa8, 0x01, 0xff, 0x45, 0xfd, 0xe3, 0xa2, 0x69, 0x01, 0xa5, + 0x06, 0x42, 0x14, 0x05, 0x02, 0x6a, 0x41, 0xf4, 0xba, 0x69, 0x01, 0xb5, + 0x01, 0xff, 0x42, 0x93, 0x0f, 0xc7, 0x69, 0x01, 0xee, 0x95, 0x69, 0x01, + 0xf8, 0x88, 0x69, 0x41, 0xf4, 0xa9, 0x69, 0x01, 0x42, 0xbf, 0xe0, 0xb5, + 0x69, 0x41, 0xe1, 0xbb, 0x69, 0x81, 0x2a, 0x42, 0x27, 0x01, 0xeb, 0x69, + 0x01, 0x42, 0x14, 0x05, 0xd3, 0x69, 0x01, 0xb5, 0x01, 0xff, 0x80, 0x09, + 0xe5, 0xb4, 0x69, 0xc1, 0x00, 0xf4, 0xc4, 0x69, 0x41, 0x44, 0x31, 0x17, + 0xd2, 0x69, 0x01, 0xe9, 0xc8, 0x69, 0x01, 0x46, 0x80, 0xdf, 0xf5, 0x69, + 0x41, 0xf1, 0x01, 0x6a, 0x41, 0xa6, 0xea, 0x05, 0x02, 0x40, 0x00, 0xd9, + 0x05, 0xab, 0x9a, 0x05, 0xac, 0xec, 0x04, 0xed, 0x51, 0x69, 0x81, 0xeb, + 0x03, 0xae, 0xfb, 0x01, 0xb0, 0xd3, 0x01, 0xb2, 0xb4, 0x01, 0xb3, 0x66, + 0xb4, 0x30, 0xb7, 0x22, 0xb9, 0x01, 0xff, 0x46, 0x7a, 0xd9, 0x05, 0x69, + 0x01, 0x42, 0x92, 0x01, 0x0d, 0x69, 0x01, 0xb5, 0x01, 0xff, 0xaf, 0x06, + 0x43, 0xc4, 0xf4, 0x25, 0x69, 0x41, 0xed, 0x34, 0x69, 0x01, 0xf0, 0x36, + 0x69, 0x41, 0x42, 0xe5, 0x05, 0xf2, 0x68, 0x01, 0x44, 0xf7, 0xc0, 0xfb, + 0x68, 0x41, 0x42, 0x93, 0x0f, 0x4b, 0x69, 0x01, 0xa5, 0x15, 0xe9, 0x61, + 0x69, 0x01, 0x42, 0x63, 0x93, 0x4c, 0x69, 0x01, 0xf5, 0x11, 0x69, 0xc1, + 0x00, 0x42, 0x1b, 0x05, 0x3d, 0x69, 0x41, 0x43, 0x73, 0xa9, 0x28, 0x69, + 0x01, 0xb5, 0x01, 0xff, 0x43, 0x1b, 0x42, 0x23, 0x69, 0x01, 0xee, 0x41, + 0x69, 0x01, 0xf4, 0x00, 0x69, 0x41, 0xa1, 0x42, 0x45, 0x9e, 0x95, 0x0c, + 0x69, 0x01, 0xa8, 0x17, 0x42, 0x1b, 0x05, 0x24, 0x69, 0x01, 0xb5, 0x01, + 0xff, 0x42, 0x93, 0x0f, 0x39, 0x69, 0x01, 0xe5, 0x03, 0x69, 0x01, 0xf5, + 0x52, 0x69, 0x41, 0xa5, 0x10, 0x42, 0x52, 0x28, 0x54, 0x69, 0x01, 0x42, + 0x63, 0x93, 0x5c, 0x69, 0x01, 0xf5, 0x58, 0x69, 0x41, 0xe5, 0xfd, 0x68, + 0x01, 0xb5, 0x01, 0xff, 0x42, 0x93, 0x0f, 0x01, 0x69, 0x01, 0xf8, 0x55, + 0x69, 0x41, 0xf0, 0x07, 0x69, 0x01, 0xf1, 0x64, 0x69, 0x41, 0x43, 0x61, + 0x87, 0x27, 0x69, 0x01, 0x03, 0xb1, 0x01, 0x06, 0x42, 0x52, 0x28, 0x4e, + 0x69, 0x41, 0x44, 0xd5, 0xe8, 0x60, 0x69, 0x01, 0x43, 0xe1, 0x1a, 0x4a, + 0x69, 0x41, 0x42, 0xe5, 0x05, 0x35, 0x69, 0x01, 0xa5, 0x13, 0x42, 0xba, + 0x04, 0x2d, 0x69, 0x01, 0xb5, 0x01, 0xff, 0xf1, 0x5d, 0x69, 0x01, 0x42, + 0x29, 0x08, 0x1b, 0x69, 0x41, 0xe5, 0x5a, 0x69, 0x01, 0x44, 0xe9, 0xf2, + 0x2e, 0x69, 0x41, 0xa4, 0xd2, 0x01, 0xa7, 0x7e, 0xe9, 0x5b, 0x69, 0x01, + 0xaa, 0x53, 0xb3, 0x31, 0xb4, 0x1d, 0xf5, 0x57, 0x69, 0x01, 0xb9, 0x01, + 0xff, 0x42, 0x57, 0x00, 0xfa, 0x68, 0x01, 0x42, 0xed, 0x05, 0x22, 0x69, + 0x01, 0xe9, 0x4d, 0x69, 0x01, 0x42, 0xd6, 0x13, 0x2f, 0x69, 0x41, 0xa5, + 0x06, 0x42, 0x27, 0x74, 0x62, 0x69, 0x41, 0xe5, 0x59, 0x69, 0x01, 0x42, + 0x48, 0x04, 0x38, 0x69, 0x41, 0xa8, 0x12, 0x03, 0x5e, 0x8e, 0x06, 0x42, + 0x48, 0x04, 0x40, 0x69, 0x41, 0xf0, 0x1f, 0x69, 0x01, 0xf4, 0x2b, 0x69, + 0x41, 0x42, 0x27, 0x01, 0xf8, 0x68, 0x01, 0x42, 0x29, 0x08, 0x46, 0x69, + 0x41, 0x42, 0xe5, 0x05, 0x02, 0x69, 0x01, 0x02, 0x97, 0x02, 0x11, 0xe9, + 0xf3, 0x68, 0x81, 0x06, 0x43, 0x12, 0xf3, 0x47, 0x69, 0x41, 0x42, 0x27, + 0x01, 0xf5, 0x68, 0x41, 0x43, 0x61, 0x87, 0x0e, 0x69, 0x01, 0xf4, 0xf7, + 0x68, 0x41, 0xa7, 0x2b, 0xab, 0x01, 0xff, 0x42, 0xe5, 0x05, 0xfe, 0x68, + 0x01, 0x02, 0x97, 0x02, 0x12, 0x43, 0x5e, 0x8e, 0x3c, 0x69, 0x01, 0x42, + 0x42, 0x0b, 0xfc, 0x68, 0x01, 0x43, 0xcd, 0xa9, 0x13, 0x69, 0x41, 0x43, + 0xa0, 0x95, 0x29, 0x69, 0x01, 0x42, 0x0d, 0x00, 0x10, 0x69, 0x41, 0xa1, + 0x12, 0x43, 0xfc, 0xeb, 0x3b, 0x69, 0x01, 0x43, 0x60, 0xcd, 0x45, 0x69, + 0x01, 0x44, 0x9b, 0xd7, 0x33, 0x69, 0x41, 0x42, 0x57, 0x00, 0x31, 0x69, + 0x81, 0x04, 0xf0, 0x43, 0x69, 0x41, 0x42, 0x93, 0x0f, 0xf9, 0x68, 0x41, + 0x42, 0x57, 0x00, 0x37, 0x69, 0x01, 0xa5, 0x06, 0x42, 0x10, 0x00, 0x18, + 0x69, 0x41, 0xe5, 0x15, 0x69, 0x01, 0x42, 0xbf, 0xe0, 0x09, 0x69, 0x41, + 0xa1, 0x6d, 0xa2, 0x58, 0xa5, 0x45, 0xa6, 0x26, 0x02, 0x99, 0x48, 0x10, + 0x43, 0x49, 0x07, 0x19, 0x69, 0x01, 0xf5, 0x53, 0x69, 0x01, 0x43, 0x6a, + 0xac, 0x5e, 0x69, 0x41, 0x43, 0x03, 0x69, 0x1a, 0x69, 0x01, 0x43, 0x5e, + 0x8e, 0x1c, 0x69, 0x01, 0x44, 0xc1, 0xf1, 0x16, 0x69, 0x41, 0x02, 0x97, + 0x02, 0x0f, 0x43, 0x5e, 0x8e, 0x32, 0x69, 0x01, 0xef, 0x1d, 0x69, 0xc1, + 0x00, 0xee, 0xf4, 0x68, 0x41, 0x42, 0x93, 0x0f, 0x2a, 0x69, 0x01, 0xf4, + 0x08, 0x69, 0x41, 0x43, 0x73, 0xa9, 0x50, 0x69, 0x01, 0xb5, 0x01, 0xff, + 0xee, 0x3e, 0x69, 0x01, 0xf4, 0x0b, 0x69, 0x41, 0x42, 0x80, 0x12, 0x20, + 0x69, 0x81, 0x06, 0x42, 0x1a, 0x05, 0xf1, 0x68, 0x41, 0x46, 0xc7, 0x1d, + 0x63, 0x69, 0x41, 0x45, 0x05, 0xe6, 0x42, 0x69, 0x01, 0x45, 0x12, 0xe6, + 0x0a, 0x69, 0x41, 0xa5, 0x12, 0x43, 0x5e, 0x8e, 0xf6, 0x68, 0x01, 0x42, + 0x63, 0x93, 0x5f, 0x69, 0x01, 0x42, 0x48, 0x04, 0x1e, 0x69, 0x41, 0x43, + 0x73, 0xa9, 0x4f, 0x69, 0x01, 0xf4, 0x30, 0x69, 0x01, 0xb5, 0x01, 0xff, + 0x43, 0x59, 0xdb, 0x17, 0x69, 0x01, 0xed, 0x44, 0x69, 0x41, 0xa5, 0x1f, + 0xf5, 0x49, 0x69, 0x81, 0x0c, 0x44, 0x19, 0xf3, 0x21, 0x69, 0x01, 0x43, + 0xcd, 0xa9, 0x56, 0x69, 0x41, 0xee, 0x3a, 0x69, 0x01, 0x42, 0x14, 0x05, + 0x06, 0x69, 0x01, 0xf1, 0x3f, 0x69, 0x41, 0xf4, 0x04, 0x69, 0x01, 0xb5, + 0x01, 0xff, 0x47, 0x99, 0xce, 0xff, 0x68, 0x01, 0xed, 0x26, 0x69, 0x01, + 0x48, 0x70, 0xc9, 0x0f, 0x69, 0x01, 0xf0, 0x2c, 0x69, 0x41, 0x42, 0x80, + 0x12, 0x12, 0x69, 0x01, 0x44, 0x9e, 0x95, 0x48, 0x69, 0x41, 0x42, 0x80, + 0x12, 0x65, 0x69, 0x01, 0x48, 0xf8, 0xc5, 0x14, 0x69, 0x41, 0x44, 0x4d, + 0xef, 0xc0, 0x68, 0x01, 0x43, 0x49, 0xf4, 0xbc, 0x68, 0x01, 0xa7, 0xfb, + 0x04, 0xab, 0xad, 0x04, 0xac, 0x96, 0x04, 0xad, 0x93, 0x03, 0xae, 0xa9, + 0x01, 0xb0, 0x93, 0x01, 0x42, 0x3d, 0x00, 0xc3, 0x68, 0x01, 0xb3, 0x63, + 0xb4, 0x3e, 0x03, 0xe4, 0x5e, 0x30, 0xb7, 0x22, 0xb9, 0x01, 0xff, 0x42, + 0x80, 0x12, 0xd9, 0x68, 0x01, 0x43, 0x0a, 0x9c, 0xa7, 0x68, 0x01, 0xb5, + 0x01, 0xff, 0x47, 0x5e, 0xcd, 0xa2, 0x68, 0x01, 0xed, 0x91, 0x68, 0x01, + 0x43, 0xc4, 0xf4, 0xe4, 0x68, 0x41, 0x47, 0xd8, 0xce, 0x92, 0x68, 0x01, + 0x42, 0x50, 0x02, 0xd1, 0x68, 0x41, 0x45, 0x16, 0xe4, 0xc1, 0x68, 0x01, + 0xf8, 0xb1, 0x68, 0x41, 0x46, 0x6e, 0xd9, 0xac, 0x68, 0x01, 0xa5, 0x11, + 0x02, 0x52, 0x00, 0x01, 0xff, 0x45, 0xf3, 0xe3, 0xae, 0x68, 0x01, 0x44, + 0x7c, 0xdc, 0xc6, 0x68, 0x41, 0xf4, 0xf0, 0x68, 0x01, 0x45, 0xfa, 0xeb, + 0xba, 0x68, 0x41, 0xa5, 0x1a, 0xa8, 0x06, 0x44, 0x2b, 0xae, 0xaf, 0x68, + 0x41, 0x45, 0x2d, 0xe6, 0xdc, 0x68, 0x01, 0x42, 0x6b, 0x18, 0xe8, 0x68, + 0x01, 0x43, 0x12, 0xf3, 0xdb, 0x68, 0x41, 0x44, 0x2e, 0xe6, 0xdc, 0x68, + 0x01, 0x42, 0xbf, 0xe0, 0xaa, 0x68, 0x41, 0x42, 0x92, 0x01, 0xef, 0x68, + 0x01, 0xa9, 0x01, 0xff, 0xee, 0xee, 0x68, 0x01, 0x45, 0x60, 0xea, 0x9c, + 0x68, 0x41, 0xa1, 0xda, 0x01, 0xa4, 0xb3, 0x01, 0xa7, 0x74, 0xaa, 0x52, + 0xb3, 0x2d, 0xb4, 0x13, 0x50, 0xf6, 0x68, 0x99, 0x68, 0x01, 0xba, 0x01, + 0xff, 0xe1, 0x90, 0x68, 0x01, 0x43, 0xee, 0x57, 0xa3, 0x68, 0x41, 0x42, + 0x80, 0x12, 0xb4, 0x68, 0x01, 0xa5, 0x06, 0x46, 0xc4, 0xe0, 0x9a, 0x68, + 0x41, 0xee, 0xd4, 0x68, 0x01, 0x45, 0xd2, 0xeb, 0xb9, 0x68, 0x41, 0xe1, + 0xbe, 0x68, 0x01, 0x45, 0xf6, 0xc0, 0xa5, 0x68, 0x01, 0x43, 0x4c, 0xf4, + 0xbf, 0x68, 0x01, 0x42, 0x14, 0x05, 0xd3, 0x68, 0x01, 0xb5, 0x01, 0xff, + 0xee, 0xd6, 0x68, 0x01, 0x47, 0x1f, 0xd4, 0xc7, 0x68, 0x41, 0xa1, 0x14, + 0xa5, 0x06, 0x43, 0x12, 0xf3, 0xad, 0x68, 0x41, 0x43, 0x73, 0xa9, 0xc8, + 0x68, 0x01, 0x42, 0xbf, 0xe0, 0xe5, 0x68, 0x41, 0x42, 0xb5, 0x05, 0xc4, + 0x68, 0x01, 0xed, 0xcf, 0x68, 0x41, 0x42, 0x80, 0x36, 0xeb, 0x68, 0x01, + 0xa7, 0x14, 0xab, 0x06, 0x42, 0x14, 0x05, 0xd0, 0x68, 0x41, 0x42, 0x80, + 0x36, 0x95, 0x68, 0x01, 0x49, 0x38, 0xc0, 0x8f, 0x68, 0x41, 0x42, 0x92, + 0x01, 0x93, 0x68, 0x01, 0xf5, 0xca, 0x68, 0xc1, 0x00, 0x48, 0x30, 0xc3, + 0xb0, 0x68, 0x01, 0x43, 0x0f, 0x11, 0xd2, 0x68, 0x01, 0xed, 0xbb, 0x68, + 0x01, 0x42, 0x10, 0x00, 0xb5, 0x68, 0x41, 0xa1, 0x1a, 0x02, 0x97, 0x02, + 0x0c, 0x43, 0x23, 0x95, 0xab, 0x68, 0x01, 0x44, 0x6e, 0xd2, 0x9d, 0x68, + 0x41, 0x45, 0x1b, 0xe4, 0x94, 0x68, 0x01, 0xf4, 0xbd, 0x68, 0x41, 0xed, + 0xd7, 0x68, 0x01, 0xf0, 0xda, 0x68, 0x41, 0x46, 0x7e, 0xde, 0xb2, 0x68, + 0x01, 0xf1, 0xec, 0x68, 0x41, 0xa1, 0x61, 0xa2, 0x12, 0x46, 0xe4, 0xdb, + 0xb8, 0x68, 0x01, 0x43, 0x5e, 0x8e, 0xe6, 0x68, 0x01, 0x43, 0x9f, 0x95, + 0xe7, 0x68, 0x41, 0xa1, 0x35, 0xa5, 0x1c, 0xe9, 0xdd, 0x68, 0x81, 0x0d, + 0xb5, 0x01, 0xff, 0x43, 0x61, 0x87, 0xcc, 0x68, 0x01, 0xe5, 0xa4, 0x68, + 0x41, 0x45, 0x60, 0xea, 0xb7, 0x68, 0x01, 0xf4, 0xa6, 0x68, 0x41, 0x45, + 0xe2, 0xe5, 0x97, 0x68, 0x01, 0x43, 0x75, 0x82, 0xc2, 0x68, 0x01, 0xb5, + 0x01, 0xff, 0xed, 0x9b, 0x68, 0x01, 0xf8, 0xe1, 0x68, 0x41, 0x02, 0x5a, + 0x00, 0x06, 0x43, 0x7d, 0x1a, 0xdf, 0x68, 0x41, 0x4c, 0x1b, 0x8d, 0x9e, + 0x68, 0x01, 0x46, 0x20, 0xdf, 0xe3, 0x68, 0x41, 0x80, 0x0f, 0xa5, 0x01, + 0xff, 0x43, 0x46, 0x9f, 0xde, 0x68, 0x01, 0x42, 0x5a, 0x03, 0xcb, 0x68, + 0x41, 0x47, 0x58, 0xd2, 0xb3, 0x68, 0x01, 0x45, 0x34, 0xe9, 0xd8, 0x68, + 0x41, 0xa1, 0x0a, 0x42, 0x6b, 0x18, 0xed, 0x68, 0x01, 0xf5, 0xcd, 0x68, + 0x41, 0xed, 0xc5, 0x68, 0x01, 0xf0, 0xb6, 0x68, 0x41, 0x42, 0x80, 0x12, + 0xa9, 0x68, 0x01, 0xa5, 0x13, 0x45, 0xfc, 0x68, 0xa8, 0x68, 0x01, 0xb5, + 0x01, 0xff, 0x4a, 0xed, 0xae, 0xd5, 0x68, 0x01, 0xf4, 0xce, 0x68, 0x41, + 0x02, 0x92, 0x00, 0x20, 0xf4, 0xc9, 0x68, 0x01, 0xb5, 0x01, 0xff, 0x43, + 0x64, 0xf4, 0xa1, 0x68, 0x01, 0xed, 0xe2, 0x68, 0x01, 0xb3, 0x01, 0xff, + 0x43, 0xfc, 0xeb, 0xe0, 0x68, 0x01, 0x46, 0x7a, 0xdc, 0x9f, 0x68, 0x41, + 0x47, 0x0f, 0xd1, 0xea, 0x68, 0x01, 0x43, 0x76, 0xd4, 0xe9, 0x68, 0x41, + 0x44, 0x35, 0xef, 0x98, 0x68, 0x01, 0x02, 0x22, 0x00, 0x01, 0xff, 0xf0, + 0xa0, 0x68, 0x01, 0x43, 0x75, 0x82, 0x96, 0x68, 0x41, 0x02, 0x0c, 0x1a, + 0x93, 0x03, 0x07, 0x47, 0xd1, 0x84, 0x03, 0xab, 0xd8, 0x02, 0xac, 0xbb, + 0x02, 0xad, 0xde, 0x01, 0xae, 0x83, 0x01, 0xb0, 0x5e, 0xb3, 0x34, 0xb4, + 0x1b, 0x44, 0xf9, 0xf2, 0x73, 0x68, 0x01, 0x45, 0x6d, 0xec, 0x76, 0x68, + 0x01, 0xb9, 0x01, 0xff, 0x4c, 0x07, 0x8c, 0x62, 0x68, 0x01, 0x45, 0x37, + 0xe6, 0x5e, 0x68, 0x41, 0x43, 0x69, 0x89, 0x78, 0x68, 0x01, 0x02, 0x2e, + 0x02, 0x01, 0xff, 0x49, 0xd3, 0xbb, 0x58, 0x68, 0x01, 0x45, 0x34, 0xe9, + 0x68, 0x68, 0x41, 0x46, 0x57, 0xd2, 0x77, 0x68, 0x01, 0x45, 0x28, 0xe6, + 0x5a, 0x68, 0x01, 0x02, 0xb0, 0x01, 0x0c, 0x43, 0x5e, 0x8e, 0x59, 0x68, + 0x01, 0x42, 0xd6, 0x13, 0x7d, 0x68, 0x41, 0x46, 0x52, 0xe0, 0x69, 0x68, + 0x01, 0x46, 0xca, 0xe0, 0x6a, 0x68, 0x41, 0x44, 0x1d, 0xef, 0x72, 0x68, + 0x01, 0x45, 0xc4, 0xe5, 0x61, 0x68, 0x01, 0x42, 0x52, 0x00, 0x67, 0x68, + 0x01, 0x03, 0xaa, 0x45, 0x01, 0xff, 0x43, 0x69, 0x89, 0x81, 0x68, 0x01, + 0x44, 0xdd, 0xef, 0x81, 0x68, 0x41, 0x47, 0x7c, 0xd0, 0x65, 0x68, 0x01, + 0xa7, 0x23, 0xb3, 0x15, 0x4b, 0x87, 0xa3, 0x64, 0x68, 0x01, 0xb9, 0x01, + 0xff, 0x45, 0x11, 0xe4, 0x80, 0x68, 0x01, 0x47, 0xb0, 0xd1, 0x6d, 0x68, + 0x41, 0x42, 0x92, 0x01, 0x8b, 0x68, 0x01, 0x44, 0xda, 0xd0, 0x57, 0x68, + 0x41, 0xa7, 0x0c, 0x4a, 0x63, 0xac, 0x74, 0x68, 0x01, 0x42, 0x14, 0x05, + 0x8e, 0x68, 0x41, 0x43, 0x69, 0x89, 0x8a, 0x68, 0x01, 0x46, 0x78, 0xdb, + 0x75, 0x68, 0x01, 0x42, 0x14, 0x05, 0x8e, 0x68, 0x01, 0x43, 0x8f, 0xa3, + 0x7a, 0x68, 0xc1, 0x00, 0x46, 0xb1, 0x1c, 0x7b, 0x68, 0x41, 0xe1, 0x8c, + 0x68, 0x81, 0x44, 0xa2, 0x22, 0x02, 0x97, 0x02, 0x14, 0xa6, 0x06, 0x47, + 0xf5, 0xd3, 0x7f, 0x68, 0x41, 0x44, 0x7e, 0x36, 0x7c, 0x68, 0x01, 0x49, + 0x17, 0xbd, 0x6b, 0x68, 0x41, 0xf1, 0x79, 0x68, 0x01, 0x48, 0x48, 0xcb, + 0x82, 0x68, 0x41, 0xa1, 0x12, 0x44, 0xef, 0xeb, 0x7e, 0x68, 0x01, 0x4a, + 0x13, 0xac, 0x6c, 0x68, 0x01, 0x43, 0x8f, 0xa3, 0x84, 0x68, 0x41, 0x47, + 0x49, 0xcd, 0x5c, 0x68, 0x01, 0x44, 0x74, 0x82, 0x5f, 0x68, 0x41, 0x03, + 0x59, 0x87, 0x01, 0xff, 0x46, 0x7e, 0xdb, 0x87, 0x68, 0x01, 0x43, 0xb2, + 0xf4, 0x88, 0x68, 0x41, 0xa1, 0x0c, 0x42, 0xed, 0x05, 0x89, 0x68, 0x01, + 0x48, 0x28, 0xc9, 0x5b, 0x68, 0x41, 0x44, 0x05, 0xef, 0x71, 0x68, 0x01, + 0x4c, 0xa7, 0x91, 0x63, 0x68, 0x41, 0x42, 0x57, 0x00, 0x60, 0x68, 0x01, + 0x02, 0x97, 0x02, 0x0d, 0xa9, 0x01, 0xff, 0x43, 0x4b, 0x18, 0x5d, 0x68, + 0x01, 0xf1, 0x8d, 0x68, 0x41, 0x43, 0x61, 0x87, 0x86, 0x68, 0x01, 0x43, + 0x82, 0xf4, 0x6e, 0x68, 0x01, 0x44, 0x41, 0xf3, 0x70, 0x68, 0x41, 0xee, + 0x6f, 0x68, 0x01, 0x44, 0x33, 0xe6, 0x66, 0x68, 0x41, 0xe5, 0x85, 0x68, + 0x01, 0x42, 0xbf, 0xe0, 0x83, 0x68, 0x41, 0x44, 0xcd, 0xef, 0x39, 0x68, + 0x01, 0xa7, 0xcc, 0x04, 0xab, 0xa5, 0x04, 0xac, 0x85, 0x04, 0xad, 0x8a, + 0x03, 0xae, 0xdc, 0x01, 0xb0, 0x88, 0x01, 0x43, 0xab, 0x05, 0x3a, 0x68, + 0x01, 0xb3, 0x3b, 0xb4, 0x14, 0xb5, 0x06, 0x43, 0xfd, 0x06, 0x52, 0x68, + 0x41, 0x48, 0xb0, 0xc2, 0x20, 0x68, 0x01, 0x46, 0x60, 0xde, 0x44, 0x68, + 0x41, 0x02, 0x97, 0x02, 0x15, 0x48, 0x48, 0xc7, 0x06, 0x68, 0x01, 0xb5, + 0x01, 0xff, 0x47, 0x3a, 0xc0, 0x0c, 0x68, 0x01, 0x43, 0x59, 0xdb, 0x2e, + 0x68, 0x41, 0x43, 0x1b, 0x42, 0x4a, 0x68, 0x01, 0x46, 0x88, 0xe0, 0x31, + 0x68, 0x41, 0x46, 0x84, 0xdb, 0x11, 0x68, 0x01, 0xa8, 0x1c, 0x43, 0x06, + 0x4a, 0x23, 0x68, 0x01, 0xaf, 0x06, 0x42, 0x27, 0x74, 0x15, 0x68, 0x41, + 0x44, 0x81, 0xf1, 0x30, 0x68, 0x01, 0xf1, 0x3c, 0x68, 0x01, 0xf4, 0x4b, + 0x68, 0x41, 0xa9, 0x13, 0x4c, 0x63, 0x93, 0x40, 0x68, 0x01, 0xb5, 0x01, + 0xff, 0x47, 0xd7, 0xd0, 0x05, 0x68, 0x01, 0xed, 0x37, 0x68, 0x41, 0x4a, + 0x4d, 0xae, 0x08, 0x68, 0x01, 0x43, 0x75, 0x82, 0x3e, 0x68, 0x41, 0xa1, + 0x31, 0x42, 0xed, 0x05, 0x2a, 0x68, 0x01, 0x03, 0xb6, 0x00, 0x06, 0x42, + 0x50, 0x02, 0x2d, 0x68, 0x41, 0x0b, 0x72, 0x9f, 0x11, 0x0d, 0x57, 0x87, + 0x01, 0xff, 0x42, 0x16, 0x00, 0x0a, 0x68, 0x01, 0x45, 0xd7, 0xbb, 0x09, + 0x68, 0x41, 0x42, 0x16, 0x00, 0x03, 0x68, 0x01, 0x45, 0xd7, 0xbb, 0x02, + 0x68, 0x41, 0x49, 0x0a, 0x8c, 0x28, 0x68, 0x01, 0xa1, 0x0c, 0x45, 0xd0, + 0xe8, 0x1d, 0x68, 0x01, 0x44, 0xe1, 0x98, 0x1b, 0x68, 0x41, 0xed, 0x4c, + 0x68, 0x01, 0x43, 0x75, 0x82, 0x42, 0x68, 0x41, 0xa1, 0x9e, 0x01, 0x02, + 0xf0, 0x10, 0x8d, 0x01, 0x42, 0x92, 0x01, 0x54, 0x68, 0x01, 0xa7, 0x68, + 0x43, 0xbd, 0x43, 0x2c, 0x68, 0x01, 0x43, 0x82, 0xf1, 0x47, 0x68, 0x01, + 0xab, 0x4e, 0x02, 0xa4, 0x02, 0x40, 0xb4, 0x22, 0xb9, 0x0f, 0xba, 0x01, + 0xff, 0x46, 0x4a, 0xc7, 0x07, 0x68, 0x01, 0x47, 0xc6, 0xd6, 0x1f, 0x68, + 0x41, 0x42, 0xed, 0x05, 0x49, 0x68, 0x01, 0xe9, 0x4f, 0x68, 0xc1, 0x00, + 0x4c, 0x97, 0x95, 0x41, 0x68, 0x41, 0x42, 0xe5, 0x05, 0x3f, 0x68, 0x81, + 0x06, 0x45, 0x9d, 0xe9, 0x12, 0x68, 0x41, 0x80, 0x01, 0xff, 0x44, 0x2d, + 0xf1, 0x19, 0x68, 0x01, 0x44, 0x9d, 0xf1, 0x22, 0x68, 0x41, 0xe1, 0x51, + 0x68, 0x01, 0x43, 0x5e, 0x8e, 0x4d, 0x68, 0x41, 0x45, 0xf2, 0xae, 0x43, + 0x68, 0x01, 0x44, 0xe9, 0x06, 0x14, 0x68, 0x41, 0x44, 0x1c, 0x01, 0x0d, + 0x68, 0x01, 0x43, 0x40, 0x5a, 0x45, 0x68, 0x01, 0x03, 0x67, 0xf4, 0x01, + 0xff, 0x45, 0x4b, 0xc7, 0x00, 0x68, 0x01, 0x45, 0x52, 0xe9, 0x16, 0x68, + 0x41, 0x49, 0x0a, 0x8c, 0x29, 0x68, 0x01, 0x49, 0x18, 0xb6, 0x34, 0x68, + 0x41, 0x46, 0x4a, 0xc7, 0x04, 0x68, 0x01, 0xf1, 0x55, 0x68, 0x41, 0xa1, + 0x39, 0x02, 0x16, 0x00, 0x2b, 0x4b, 0x02, 0x9c, 0x25, 0x68, 0x01, 0x45, + 0xe4, 0xdb, 0x24, 0x68, 0x01, 0xaf, 0x06, 0x49, 0xf5, 0xc0, 0x10, 0x68, + 0x41, 0x4a, 0x25, 0xae, 0x1e, 0x68, 0x01, 0x02, 0x14, 0x05, 0x01, 0xff, + 0x43, 0x4d, 0x8e, 0x36, 0x68, 0x01, 0x43, 0x82, 0xf4, 0x26, 0x68, 0x41, + 0x43, 0x7d, 0x1a, 0x48, 0x68, 0x01, 0xf1, 0x56, 0x68, 0x41, 0xa5, 0x0c, + 0x45, 0x39, 0xe9, 0x0f, 0x68, 0x01, 0x47, 0x6c, 0xd4, 0x3d, 0x68, 0x41, + 0x44, 0xd5, 0xf0, 0x1a, 0x68, 0x01, 0xed, 0x4e, 0x68, 0x81, 0x0c, 0x43, + 0x7d, 0x1a, 0x32, 0x68, 0x01, 0x42, 0x5a, 0x03, 0x46, 0x68, 0x41, 0x46, + 0x22, 0xda, 0x0b, 0x68, 0x01, 0x45, 0xd7, 0xbb, 0x0b, 0x68, 0x01, 0x44, + 0xb1, 0x71, 0x2b, 0x68, 0x01, 0x44, 0xfd, 0xf2, 0x0e, 0x68, 0x41, 0x44, + 0x09, 0xef, 0x17, 0x68, 0x01, 0x46, 0x72, 0xdb, 0x18, 0x68, 0x01, 0x45, + 0x93, 0xe9, 0x38, 0x68, 0x01, 0xf5, 0x53, 0x68, 0xc1, 0x00, 0x43, 0x59, + 0xdb, 0x2f, 0x68, 0x41, 0xa1, 0x18, 0xa5, 0x0c, 0x43, 0x7f, 0xf4, 0x3b, + 0x68, 0x01, 0x43, 0x8f, 0xa3, 0x35, 0x68, 0x41, 0xf4, 0x33, 0x68, 0x01, + 0x48, 0x00, 0xcc, 0x13, 0x68, 0x41, 0x42, 0x0c, 0x08, 0x27, 0x68, 0x01, + 0xf1, 0x50, 0x68, 0x41, 0x48, 0x10, 0xc4, 0x01, 0x68, 0x01, 0x05, 0x09, + 0xdc, 0x01, 0xff, 0x46, 0x08, 0xdc, 0x21, 0x68, 0x01, 0x43, 0x75, 0x82, + 0x1c, 0x68, 0x41, 0xe5, 0xca, 0xa6, 0x00, 0x42, 0xbf, 0xe0, 0xc5, 0xa6, + 0x40, 0xe1, 0xdb, 0xa6, 0x00, 0x43, 0xa5, 0x57, 0xb1, 0xa6, 0x00, 0xa7, + 0x3d, 0xe9, 0xcf, 0xa6, 0x00, 0xaa, 0x25, 0x43, 0xa4, 0x02, 0xc3, 0xa6, + 0x00, 0xb4, 0x11, 0xf5, 0xbd, 0xa6, 0x80, 0x06, 0x42, 0x7e, 0x1a, 0xa8, + 0xa6, 0x40, 0x42, 0x93, 0x0f, 0xbc, 0xa6, 0x40, 0x42, 0x27, 0x01, 0xc7, + 0xa6, 0x00, 0x42, 0x27, 0x74, 0xeb, 0xa6, 0x40, 0x43, 0x61, 0x87, 0xb2, + 0xa6, 0x00, 0x42, 0x27, 0x01, 0xc6, 0xa6, 0x00, 0x43, 0x9f, 0x95, 0xbe, + 0xa6, 0x40, 0xe1, 0xd5, 0xa6, 0x00, 0x42, 0x24, 0x02, 0xd4, 0xa6, 0x00, + 0x45, 0xf4, 0xe7, 0xd3, 0xa6, 0x40, 0xe1, 0xe3, 0xa6, 0x00, 0xa2, 0x18, + 0xa5, 0x0c, 0xe9, 0xce, 0xa6, 0x00, 0xef, 0xe6, 0xa6, 0x00, 0xf5, 0xb5, + 0xa6, 0x40, 0x43, 0x73, 0xa9, 0xaf, 0xa6, 0x00, 0xee, 0xe2, 0xa6, 0x40, + 0x42, 0x80, 0x12, 0xe7, 0xa6, 0x00, 0x42, 0x92, 0x01, 0xe0, 0xa6, 0x40, + 0xe1, 0xaa, 0xa6, 0x00, 0x44, 0x99, 0xef, 0xae, 0xa6, 0x00, 0xe9, 0xdc, + 0xa6, 0x00, 0x42, 0x63, 0x93, 0xde, 0xa6, 0x00, 0xf5, 0xcd, 0xa6, 0x40, + 0xe1, 0xa1, 0xa6, 0x00, 0xa5, 0x25, 0xe9, 0xe5, 0xa6, 0x00, 0xef, 0xdf, + 0xa6, 0x80, 0x10, 0x42, 0xbb, 0x09, 0xe9, 0xa6, 0x00, 0xf5, 0xa3, 0xa6, + 0x00, 0x43, 0xcd, 0xa9, 0xba, 0xa6, 0x40, 0x44, 0xf1, 0xef, 0xef, 0xa6, + 0x00, 0x43, 0xc1, 0xf4, 0xee, 0xa6, 0x40, 0xee, 0xd2, 0xa6, 0x00, 0xf4, + 0xbb, 0xa6, 0x00, 0x42, 0xbf, 0xe0, 0xc4, 0xa6, 0x40, 0x45, 0xfd, 0xe3, + 0xed, 0xa6, 0x00, 0x42, 0x27, 0x01, 0xcb, 0xa6, 0x00, 0x42, 0x14, 0x05, + 0xd9, 0xa6, 0x00, 0xf5, 0xd8, 0xa6, 0x40, 0x43, 0xd7, 0x02, 0xf4, 0xa6, + 0x00, 0xad, 0x01, 0xff, 0x0c, 0xbb, 0x8c, 0x06, 0x42, 0x6c, 0x00, 0xf5, + 0xa6, 0x40, 0x47, 0x74, 0xd2, 0xf0, 0xa6, 0x00, 0x49, 0x1d, 0xc0, 0xf1, + 0xa6, 0x40, 0x06, 0xbd, 0x83, 0x71, 0xac, 0x01, 0xff, 0x48, 0x28, 0xc2, + 0xf6, 0xf9, 0x01, 0x48, 0xe0, 0xc5, 0x70, 0xfa, 0x01, 0xaf, 0x01, 0xff, + 0x42, 0x10, 0x00, 0x88, 0xf3, 0x81, 0x52, 0x02, 0xc6, 0x00, 0x01, 0xff, + 0x02, 0x5d, 0x00, 0x0a, 0x48, 0x6d, 0x9e, 0xf4, 0xf5, 0x01, 0xf8, 0x17, + 0x27, 0x40, 0x4b, 0x6a, 0x9e, 0xf6, 0xf5, 0x01, 0xf8, 0x10, 0x26, 0xc0, + 0x00, 0x06, 0x50, 0x00, 0x01, 0xff, 0xa2, 0x16, 0x45, 0x6d, 0x14, 0x11, + 0x26, 0x00, 0x47, 0xeb, 0xd2, 0xbd, 0x2b, 0x00, 0x48, 0x6d, 0x9e, 0xf5, + 0xf5, 0x01, 0xf8, 0x12, 0x26, 0x40, 0x45, 0xae, 0xce, 0xf3, 0xf5, 0x01, + 0x04, 0x2e, 0x25, 0x01, 0xff, 0x45, 0x6d, 0x14, 0xf9, 0xf5, 0x01, 0x48, + 0x6d, 0x9e, 0xf7, 0xf5, 0x41, 0x50, 0xd4, 0x1c, 0x49, 0x27, 0x40, 0x49, + 0xa3, 0xb5, 0x44, 0x1b, 0x00, 0x06, 0xcd, 0x6e, 0x85, 0x07, 0x06, 0xef, + 0x06, 0xbe, 0x06, 0x0f, 0xc4, 0x6e, 0xad, 0x06, 0x07, 0xec, 0x05, 0xaa, + 0x03, 0x0f, 0x26, 0x32, 0xcd, 0x01, 0x02, 0xbb, 0x09, 0x9d, 0x01, 0x05, + 0x5a, 0x03, 0x70, 0x0b, 0x40, 0x77, 0x06, 0x45, 0x59, 0xec, 0x5c, 0x1b, + 0x40, 0x48, 0x90, 0xc7, 0x3c, 0x1b, 0x80, 0x59, 0x45, 0xde, 0xe9, 0x42, + 0x1b, 0x80, 0x4c, 0x47, 0x14, 0xd5, 0x3a, 0x1b, 0x80, 0x3f, 0x44, 0x09, + 0xd6, 0x38, 0x1b, 0x80, 0x32, 0xb4, 0x0d, 0x43, 0x91, 0x97, 0x36, 0x1b, + 0xc0, 0x00, 0x45, 0xdc, 0xe1, 0x37, 0x1b, 0x40, 0x45, 0x44, 0x28, 0x3e, + 0x1b, 0x80, 0x06, 0x45, 0xa6, 0xcd, 0x35, 0x1b, 0x40, 0x80, 0x01, 0xff, + 0x44, 0x1e, 0xce, 0x3f, 0x1b, 0x80, 0x06, 0x46, 0xa5, 0xcd, 0x40, 0x1b, + 0x40, 0x47, 0xa4, 0xcd, 0x41, 0x1b, 0x40, 0x45, 0xc3, 0xe1, 0x39, 0x1b, + 0x40, 0x47, 0xa4, 0xcd, 0x3b, 0x1b, 0x40, 0x47, 0xa4, 0xcd, 0x43, 0x1b, + 0x40, 0x47, 0xa4, 0xcd, 0x3d, 0x1b, 0x40, 0x45, 0xca, 0xe4, 0x04, 0x1b, + 0x00, 0x45, 0x15, 0xe5, 0x02, 0x1b, 0x00, 0x47, 0x4c, 0xd5, 0x34, 0x1b, + 0x00, 0x46, 0x34, 0xe0, 0x03, 0x1b, 0x00, 0x04, 0xd5, 0xf2, 0x01, 0xff, + 0x46, 0xd7, 0x23, 0x01, 0x1b, 0x00, 0x45, 0x5b, 0xea, 0x00, 0x1b, 0x40, + 0xad, 0x16, 0x43, 0x9f, 0x01, 0x5a, 0x1b, 0xc0, 0x00, 0x80, 0x01, 0xff, + 0x45, 0xb1, 0xe4, 0x7f, 0x1b, 0x00, 0x47, 0x19, 0xc2, 0x7d, 0x1b, 0x40, + 0x43, 0xde, 0x1e, 0x5b, 0x1b, 0x80, 0x06, 0x45, 0x00, 0xe6, 0x60, 0x1b, + 0x40, 0x48, 0x18, 0xc2, 0x7e, 0x1b, 0x40, 0x0a, 0x41, 0x59, 0x97, 0x01, + 0xa4, 0x51, 0x0a, 0xc7, 0xac, 0x26, 0x0b, 0x06, 0xa2, 0x01, 0xff, 0x08, + 0x76, 0x61, 0x11, 0x06, 0xd8, 0xde, 0x01, 0xff, 0x42, 0x23, 0x02, 0x75, + 0x1b, 0x00, 0x42, 0xd2, 0x0e, 0x74, 0x1b, 0x40, 0x42, 0x6d, 0x00, 0x77, + 0x1b, 0x00, 0x42, 0x90, 0x08, 0x76, 0x1b, 0x40, 0x09, 0x41, 0xb7, 0x17, + 0x06, 0xde, 0xde, 0x01, 0xff, 0x43, 0x1c, 0x01, 0x78, 0x1b, 0x00, 0x43, + 0xa1, 0x01, 0x7c, 0x1b, 0x00, 0x43, 0xaa, 0x45, 0x79, 0x1b, 0x40, 0x42, + 0x6d, 0x00, 0x7a, 0x1b, 0x00, 0x42, 0x90, 0x08, 0x7b, 0x1b, 0x40, 0xa1, + 0x20, 0xa5, 0x12, 0x43, 0xa1, 0x01, 0x66, 0x1b, 0x00, 0x43, 0xd8, 0x02, + 0x61, 0x1b, 0x00, 0x43, 0xaa, 0x45, 0x63, 0x1b, 0x40, 0x42, 0x1d, 0x01, + 0x62, 0x1b, 0x00, 0x43, 0xaa, 0x45, 0x68, 0x1b, 0x40, 0x43, 0x4c, 0x0a, + 0x67, 0x1b, 0x00, 0x43, 0xa1, 0x01, 0x69, 0x1b, 0x00, 0x42, 0x1d, 0x01, + 0x64, 0x1b, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x44, 0xe9, 0xef, 0x6a, 0x1b, + 0x00, 0x46, 0x34, 0xe0, 0x65, 0x1b, 0x40, 0x45, 0xbb, 0xe4, 0x72, 0x1b, + 0x00, 0x45, 0xfb, 0xe5, 0x6c, 0x1b, 0x00, 0x44, 0xfb, 0x86, 0x73, 0x1b, + 0x00, 0x47, 0xd9, 0x7f, 0x6f, 0x1b, 0x00, 0x04, 0x04, 0xbb, 0x06, 0x45, + 0x32, 0xeb, 0x6b, 0x1b, 0x40, 0x42, 0xc3, 0x01, 0x6e, 0x1b, 0x80, 0x0d, + 0x42, 0x1f, 0x01, 0x6d, 0x1b, 0xc0, 0x00, 0x4d, 0xd3, 0x7f, 0x70, 0x1b, + 0x40, 0x4d, 0xd3, 0x7f, 0x71, 0x1b, 0x40, 0xa1, 0xdc, 0x02, 0x42, 0x16, + 0x00, 0x29, 0x1b, 0x80, 0xce, 0x02, 0x42, 0x37, 0x00, 0x18, 0x1b, 0x80, + 0xc0, 0x02, 0x42, 0xf0, 0x10, 0x24, 0x1b, 0x80, 0x9c, 0x02, 0xa5, 0x8d, + 0x02, 0x42, 0x24, 0x02, 0x15, 0x1b, 0x80, 0xff, 0x01, 0x42, 0x22, 0x00, + 0x33, 0x1b, 0x00, 0x45, 0x54, 0xe7, 0x07, 0x1b, 0x80, 0xeb, 0x01, 0x42, + 0x56, 0x19, 0x1a, 0x1b, 0x80, 0xdd, 0x01, 0xab, 0xc3, 0x01, 0x42, 0x74, + 0x00, 0x2e, 0x1b, 0x80, 0xae, 0x01, 0x42, 0x6c, 0x00, 0x2b, 0x1b, 0x00, + 0xae, 0x8e, 0x01, 0x45, 0x7f, 0xe9, 0x11, 0x1b, 0x80, 0x80, 0x01, 0x42, + 0xbb, 0x09, 0x27, 0x1b, 0x80, 0x73, 0x42, 0x71, 0x00, 0x2d, 0x1b, 0x80, + 0x5f, 0x42, 0x40, 0x06, 0x32, 0x1b, 0x80, 0x47, 0xb4, 0x25, 0x45, 0xc8, + 0xeb, 0x09, 0x1b, 0x80, 0x18, 0x48, 0x38, 0xcc, 0x49, 0x1b, 0x00, 0x42, + 0xa9, 0x01, 0x2f, 0x1b, 0x00, 0x42, 0xbc, 0x22, 0x2c, 0x1b, 0x00, 0x49, + 0xc4, 0xc1, 0x4a, 0x1b, 0x40, 0x47, 0xa4, 0xcd, 0x0a, 0x1b, 0x40, 0xe1, + 0x22, 0x1b, 0x80, 0x06, 0x49, 0xdf, 0xc1, 0x47, 0x1b, 0x40, 0x80, 0x01, + 0xff, 0x45, 0x1c, 0xe8, 0x1d, 0x1b, 0x00, 0x4f, 0x59, 0x70, 0x1e, 0x1b, + 0x00, 0x44, 0xa4, 0xc4, 0x23, 0x1b, 0x40, 0x03, 0xeb, 0x22, 0x01, 0xff, + 0x42, 0x24, 0x02, 0x30, 0x1b, 0x00, 0x42, 0xbb, 0x09, 0x31, 0x1b, 0x40, + 0x45, 0x16, 0xd5, 0x0b, 0x1b, 0xc0, 0x00, 0x47, 0xa4, 0xcd, 0x0c, 0x1b, + 0x40, 0x46, 0x1e, 0xd8, 0x28, 0x1b, 0x40, 0x47, 0xa4, 0xcd, 0x12, 0x1b, + 0x40, 0xe1, 0x26, 0x1b, 0x80, 0x0c, 0x42, 0x24, 0x02, 0x17, 0x1b, 0x00, + 0x42, 0xbc, 0x22, 0x1c, 0x1b, 0x40, 0x47, 0x81, 0xcd, 0x21, 0x1b, 0x40, + 0x46, 0x92, 0xc7, 0x0d, 0x1b, 0xc0, 0x00, 0x47, 0xa4, 0xcd, 0x0e, 0x1b, + 0x40, 0xe1, 0x13, 0x1b, 0x80, 0x06, 0x49, 0xc0, 0xb9, 0x46, 0x1b, 0x40, + 0x4a, 0x5e, 0x70, 0x14, 0x1b, 0x00, 0x47, 0x08, 0xd1, 0x45, 0x1b, 0x40, + 0x45, 0xc8, 0xe1, 0x1b, 0x1b, 0x40, 0x47, 0xa4, 0xcd, 0x08, 0x1b, 0x40, + 0x45, 0xb4, 0xe1, 0x16, 0x1b, 0x40, 0x47, 0x08, 0xd1, 0x48, 0x1b, 0x00, + 0x44, 0x43, 0x2d, 0x0f, 0x1b, 0x40, 0x02, 0x6b, 0x00, 0x01, 0xff, 0x43, + 0x6b, 0x02, 0x25, 0x1b, 0x00, 0x05, 0x5a, 0x70, 0x01, 0xff, 0x49, 0xfd, + 0xb5, 0x1f, 0x1b, 0x00, 0x49, 0x5f, 0x70, 0x20, 0x1b, 0x40, 0x45, 0xd2, + 0xe1, 0x19, 0x1b, 0x40, 0x48, 0x10, 0xc2, 0x2a, 0x1b, 0x40, 0x45, 0x54, + 0xe7, 0x10, 0x1b, 0x00, 0x44, 0x43, 0x2d, 0x05, 0x1b, 0x80, 0x0c, 0x4b, + 0xcf, 0xa1, 0x4c, 0x1b, 0x00, 0x4b, 0x0e, 0xa3, 0x4b, 0x1b, 0x40, 0x47, + 0xa4, 0xcd, 0x06, 0x1b, 0x40, 0x47, 0x88, 0xd4, 0x4f, 0x1b, 0x00, 0x44, + 0x58, 0xad, 0x4e, 0x1b, 0x40, 0x45, 0x12, 0x0b, 0x58, 0x1b, 0x00, 0xa6, + 0x2e, 0x44, 0xcf, 0x2a, 0x59, 0x1b, 0x00, 0x43, 0x0e, 0x0b, 0x51, 0x1b, + 0x00, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, 0x50, 0x1b, 0x40, 0x44, + 0x25, 0x01, 0x53, 0x1b, 0x00, 0x42, 0x15, 0x02, 0x52, 0x1b, 0x40, 0x44, + 0xc9, 0x1d, 0x57, 0x1b, 0x00, 0x42, 0x01, 0x26, 0x56, 0x1b, 0x40, 0x43, + 0xd2, 0x05, 0x55, 0x1b, 0x00, 0x43, 0xf6, 0x06, 0x54, 0x1b, 0x40, 0x02, + 0xbb, 0x09, 0x06, 0x44, 0x58, 0xad, 0x5e, 0x1b, 0x40, 0x47, 0x62, 0xd3, + 0x5d, 0x1b, 0x00, 0x45, 0x99, 0x72, 0x5f, 0x1b, 0x40, 0x42, 0xd8, 0x00, + 0x6f, 0xf9, 0x01, 0x4a, 0x97, 0xaa, 0xc4, 0xf6, 0x01, 0x4b, 0x21, 0xa4, + 0x56, 0xf9, 0x41, 0x43, 0xdb, 0x09, 0xa1, 0xf9, 0x01, 0x5e, 0xcb, 0x13, + 0xf8, 0xf3, 0x41, 0xab, 0x0c, 0x42, 0x10, 0x00, 0x53, 0xf9, 0x01, 0x4b, + 0xd4, 0xa3, 0x2b, 0xf4, 0x41, 0x80, 0x1f, 0x67, 0x58, 0x05, 0xab, 0x27, + 0x00, 0xb3, 0x01, 0xff, 0x1a, 0x9a, 0x20, 0x06, 0x44, 0xd1, 0x4c, 0x08, + 0x00, 0x40, 0x49, 0xf3, 0xbc, 0x5b, 0x2b, 0x00, 0x4d, 0xf3, 0x87, 0x5d, + 0x2b, 0x40, 0x4b, 0x7a, 0xa0, 0x82, 0xf5, 0x01, 0x5a, 0xa2, 0x22, 0x19, + 0xf5, 0x41, 0x80, 0x01, 0xff, 0x45, 0x4d, 0xe4, 0x7c, 0xf4, 0x01, 0x46, + 0x64, 0x5b, 0x7c, 0xf3, 0x01, 0x45, 0xf7, 0x59, 0x24, 0xf4, 0x01, 0x46, + 0x16, 0x08, 0xbc, 0xf6, 0x41, 0x45, 0x9d, 0xe4, 0xee, 0xf9, 0x01, 0xa3, + 0x96, 0x8d, 0x01, 0xa4, 0xaf, 0x88, 0x01, 0xa5, 0xfa, 0x84, 0x01, 0x4b, + 0x0d, 0x9c, 0x0b, 0x06, 0x00, 0x04, 0x4d, 0xf0, 0xcb, 0x81, 0x01, 0x47, + 0x12, 0x34, 0x08, 0x27, 0x80, 0xb3, 0x81, 0x01, 0x4b, 0x12, 0x9e, 0x4d, + 0x21, 0x00, 0xac, 0xa6, 0x79, 0xad, 0xf9, 0x78, 0xae, 0xc4, 0x63, 0xb0, + 0xe1, 0x5e, 0x47, 0xff, 0xd4, 0x52, 0x26, 0x00, 0xb2, 0xe1, 0x03, 0xb3, + 0x88, 0x03, 0xb4, 0xf9, 0x02, 0xb5, 0xd0, 0x02, 0xb6, 0x06, 0x42, 0x6d, + 0x43, 0x93, 0xfa, 0x41, 0x06, 0x6c, 0xdb, 0x06, 0x45, 0x75, 0xe9, 0x51, + 0xf9, 0x41, 0x51, 0x0b, 0x50, 0x39, 0x0b, 0x01, 0x07, 0xec, 0x05, 0x01, + 0xff, 0xe1, 0x00, 0x0b, 0x81, 0x8f, 0x02, 0xa2, 0x82, 0x02, 0x42, 0x73, + 0x02, 0x17, 0x0b, 0x01, 0xa4, 0xef, 0x01, 0xe5, 0x08, 0x0b, 0x81, 0xe5, + 0x01, 0x42, 0x0c, 0x1a, 0x1f, 0x0b, 0x01, 0xa7, 0xcc, 0x01, 0xa8, 0xbf, + 0x01, 0xe9, 0x0c, 0x0b, 0x81, 0xb5, 0x01, 0x42, 0x80, 0x20, 0x18, 0x0b, + 0x01, 0x42, 0x37, 0x01, 0x10, 0x0b, 0x01, 0x42, 0x68, 0x00, 0x2e, 0x0b, + 0x01, 0x42, 0x2a, 0x02, 0x28, 0x0b, 0x01, 0xae, 0x79, 0xef, 0x0a, 0x0b, + 0x81, 0x70, 0x42, 0x6f, 0x02, 0x1e, 0x0b, 0x01, 0x42, 0x88, 0x00, 0x2d, + 0x0b, 0x01, 0xb3, 0x4c, 0xb4, 0x3a, 0xf5, 0x0e, 0x0b, 0x81, 0x31, 0x42, + 0x32, 0x00, 0x2c, 0x0b, 0x01, 0xb8, 0x19, 0xb9, 0x0d, 0xba, 0x01, 0xff, + 0xe5, 0x30, 0x0b, 0x01, 0x42, 0xb0, 0x01, 0x32, 0x0b, 0x41, 0xe5, 0x2b, + 0x0b, 0x01, 0x42, 0x4d, 0x00, 0x2a, 0x0b, 0x41, 0xe5, 0x11, 0x0b, 0x01, + 0x42, 0x32, 0x00, 0x13, 0x0b, 0x01, 0x42, 0x4d, 0x00, 0x12, 0x0b, 0x41, + 0xf5, 0x0f, 0x0b, 0x41, 0xe5, 0x19, 0x0b, 0x01, 0x42, 0xb0, 0x01, 0x1a, + 0x0b, 0x01, 0x42, 0x77, 0x00, 0x1d, 0x0b, 0x41, 0xe5, 0x2f, 0x0b, 0x01, + 0xa8, 0x06, 0x43, 0x8e, 0x06, 0x34, 0x0b, 0x41, 0xe5, 0x31, 0x0b, 0x01, + 0x42, 0x4d, 0x00, 0x33, 0x0b, 0x41, 0xef, 0x0b, 0x0b, 0x41, 0xe5, 0x25, + 0x0b, 0x01, 0xa7, 0x0c, 0x42, 0xcd, 0x05, 0x27, 0x0b, 0x01, 0x42, 0x4d, + 0x00, 0x26, 0x0b, 0x41, 0xe5, 0x22, 0x0b, 0x01, 0x42, 0x32, 0x00, 0x24, + 0x0b, 0x01, 0x42, 0x4d, 0x00, 0x23, 0x0b, 0x41, 0xe9, 0x0d, 0x0b, 0x41, + 0xe5, 0x35, 0x0b, 0x01, 0x42, 0x2a, 0x02, 0x29, 0x0b, 0x41, 0xe5, 0x14, + 0x0b, 0x01, 0x42, 0xdb, 0x09, 0x15, 0x0b, 0x01, 0x42, 0xb0, 0x01, 0x16, + 0x0b, 0x41, 0xe5, 0x09, 0x0b, 0x41, 0xe5, 0x1b, 0x0b, 0x01, 0x42, 0xb0, + 0x01, 0x1c, 0x0b, 0x41, 0xe5, 0x20, 0x0b, 0x01, 0x42, 0xb0, 0x01, 0x21, + 0x0b, 0x41, 0xe1, 0x01, 0x0b, 0x81, 0x11, 0xe5, 0x06, 0x0b, 0x81, 0x08, + 0xee, 0x04, 0x0b, 0x01, 0xef, 0x02, 0x0b, 0x41, 0xe5, 0x07, 0x0b, 0x41, + 0xee, 0x05, 0x0b, 0x01, 0xef, 0x03, 0x0b, 0x41, 0x47, 0x72, 0xcf, 0x46, + 0xf3, 0x01, 0x4a, 0x63, 0xb1, 0xb3, 0x20, 0x00, 0x02, 0x1e, 0x00, 0x01, + 0xff, 0x49, 0xd4, 0xb4, 0xfa, 0xf6, 0x01, 0xad, 0x01, 0xff, 0x53, 0x74, + 0x48, 0xe7, 0xf3, 0x01, 0x45, 0x4e, 0x4b, 0x97, 0xf6, 0x41, 0x4b, 0xff, + 0x9c, 0x5f, 0xf4, 0x01, 0x49, 0x05, 0xbd, 0x9b, 0x26, 0x40, 0xa3, 0x48, + 0x47, 0x29, 0x60, 0xa6, 0x22, 0x00, 0xb4, 0x06, 0x55, 0x5e, 0x37, 0x43, + 0x22, 0x40, 0x04, 0x3f, 0x0d, 0x27, 0x4c, 0x33, 0x93, 0x32, 0xf6, 0x01, + 0xb2, 0x01, 0xff, 0x43, 0x6d, 0x28, 0xd9, 0x2b, 0x80, 0x11, 0x14, 0xb0, + 0x44, 0x01, 0xff, 0x53, 0x61, 0x48, 0xcd, 0xce, 0x01, 0x46, 0x00, 0xe1, + 0xe2, 0x26, 0x40, 0x49, 0x21, 0x2e, 0x78, 0xf7, 0x41, 0xeb, 0x2a, 0x00, + 0x80, 0x04, 0xed, 0x42, 0x20, 0x40, 0x49, 0x7d, 0x1d, 0x17, 0x22, 0x40, + 0x4b, 0x34, 0x8d, 0x0a, 0x26, 0x00, 0x49, 0xe4, 0xb9, 0x9c, 0x01, 0x41, + 0x04, 0xe4, 0x06, 0xbd, 0x05, 0xe3, 0x12, 0x23, 0x00, 0x43, 0x14, 0x9e, + 0x48, 0x26, 0x00, 0x07, 0xe7, 0x32, 0x4b, 0x03, 0xd0, 0x00, 0x11, 0x02, + 0x35, 0x00, 0x01, 0xff, 0x4d, 0xce, 0x81, 0x9b, 0xf6, 0x01, 0x4a, 0x4f, + 0xb1, 0xa8, 0xf3, 0x41, 0x0a, 0x9b, 0x01, 0x06, 0x53, 0xdd, 0x49, 0xb0, + 0xfb, 0x41, 0x17, 0x41, 0x2e, 0x1c, 0x18, 0xde, 0x2a, 0x06, 0x57, 0xab, + 0x31, 0xb0, 0xf8, 0x41, 0x49, 0xa5, 0x01, 0x35, 0x29, 0x00, 0x4a, 0x90, + 0x40, 0xb1, 0xf8, 0x01, 0x47, 0x50, 0x02, 0x34, 0x29, 0x40, 0x49, 0xea, + 0x01, 0x36, 0x29, 0x00, 0x4a, 0xb3, 0x02, 0x37, 0x29, 0x40, 0xa1, 0xd5, + 0x04, 0xa3, 0xdc, 0x02, 0x49, 0xe3, 0xb7, 0x8f, 0x05, 0x00, 0xa5, 0xc7, + 0x02, 0x49, 0x81, 0x16, 0x89, 0x05, 0x00, 0x46, 0x96, 0x63, 0x8a, 0x05, + 0x00, 0x5e, 0xe9, 0x13, 0x59, 0x05, 0x00, 0x4d, 0xa6, 0x34, 0x5e, 0x05, + 0x00, 0x07, 0x76, 0x08, 0x01, 0xff, 0x06, 0xed, 0x05, 0x2d, 0x08, 0x9d, + 0x1f, 0x01, 0xff, 0x48, 0x70, 0xc5, 0x87, 0x05, 0x00, 0x04, 0xfe, 0x4e, + 0x06, 0x47, 0x44, 0xd7, 0x16, 0xfb, 0x40, 0x43, 0x03, 0x41, 0x14, 0xfb, + 0x00, 0x43, 0x57, 0x07, 0x15, 0xfb, 0x00, 0x43, 0xda, 0x2e, 0x13, 0xfb, + 0x00, 0x43, 0xcd, 0xf4, 0x17, 0xfb, 0x40, 0x43, 0xa1, 0xc0, 0x61, 0x05, + 0x00, 0x43, 0x81, 0x1b, 0x62, 0x05, 0x00, 0xa3, 0xd6, 0x01, 0x42, 0xf0, + 0x10, 0x64, 0x05, 0x00, 0xa5, 0xbf, 0x01, 0x43, 0xd6, 0xb8, 0x86, 0x05, + 0x00, 0xa7, 0xaa, 0x01, 0x42, 0x0b, 0x00, 0x70, 0x05, 0x00, 0x43, 0x57, + 0x07, 0x6b, 0x05, 0x00, 0xaa, 0x91, 0x01, 0x02, 0x37, 0x01, 0x84, 0x01, + 0x44, 0x0d, 0xf1, 0x6c, 0x05, 0x00, 0x43, 0x2c, 0x05, 0x74, 0x05, 0x00, + 0x43, 0xda, 0x2e, 0x76, 0x05, 0x00, 0x42, 0xfd, 0x28, 0x85, 0x05, 0x00, + 0xb0, 0x5e, 0xb2, 0x52, 0xb3, 0x44, 0xb4, 0x32, 0xb6, 0x26, 0x43, 0xcd, + 0xf4, 0x6d, 0x05, 0x00, 0x42, 0x7e, 0x1a, 0x75, 0x05, 0x80, 0x0d, 0xba, + 0x01, 0xff, 0xe1, 0x66, 0x05, 0x00, 0x42, 0xb0, 0x01, 0x6a, 0x05, 0x40, + 0x4c, 0xda, 0x28, 0x88, 0x05, 0x00, 0x42, 0xa7, 0x01, 0x82, 0x05, 0x40, + 0x42, 0x27, 0x1e, 0x7e, 0x05, 0x00, 0xef, 0x78, 0x05, 0x40, 0x43, 0x75, + 0xc5, 0x7f, 0x05, 0x00, 0xef, 0x69, 0x05, 0x00, 0x49, 0x9b, 0xc0, 0x60, + 0x05, 0x40, 0x42, 0x4e, 0x00, 0x7d, 0x05, 0x00, 0x42, 0x22, 0x00, 0x77, + 0x05, 0x40, 0xe1, 0x7c, 0x05, 0x00, 0x42, 0x4e, 0x00, 0x80, 0x05, 0x40, + 0x42, 0x4e, 0x00, 0x7a, 0x05, 0x00, 0x43, 0x5b, 0xf4, 0x83, 0x05, 0x40, + 0xe8, 0x84, 0x05, 0x00, 0xee, 0x6f, 0x05, 0x40, 0xe1, 0x71, 0x05, 0x00, + 0x43, 0xf6, 0x42, 0x7b, 0x05, 0x40, 0x43, 0xa5, 0x02, 0x72, 0x05, 0x00, + 0x42, 0x29, 0x02, 0x63, 0x05, 0x40, 0x42, 0x6d, 0x14, 0x65, 0x05, 0x00, + 0xe8, 0x67, 0x05, 0x00, 0xf4, 0x68, 0x05, 0x40, 0xe1, 0x6e, 0x05, 0x00, + 0xa8, 0x04, 0xef, 0x81, 0x05, 0x40, 0xe1, 0x79, 0x05, 0x00, 0x42, 0x4e, + 0x00, 0x73, 0x05, 0x40, 0x4c, 0x2b, 0x92, 0x5b, 0x05, 0x00, 0x4f, 0xae, + 0x00, 0x5c, 0x05, 0x40, 0x0e, 0xe5, 0x05, 0x06, 0x44, 0x14, 0x05, 0x5d, + 0x05, 0x40, 0x43, 0xa1, 0xc0, 0x31, 0x05, 0x00, 0x43, 0x81, 0x1b, 0x32, + 0x05, 0x00, 0xa3, 0xc9, 0x01, 0x42, 0xf0, 0x10, 0x34, 0x05, 0x00, 0xa5, + 0xb2, 0x01, 0x43, 0xd6, 0xb8, 0x56, 0x05, 0x00, 0xa7, 0x9d, 0x01, 0x42, + 0x0b, 0x00, 0x40, 0x05, 0x00, 0x43, 0x57, 0x07, 0x3b, 0x05, 0x00, 0xaa, + 0x84, 0x01, 0x02, 0x37, 0x01, 0x78, 0x44, 0x0d, 0xf1, 0x3c, 0x05, 0x00, + 0x43, 0x2c, 0x05, 0x44, 0x05, 0x00, 0x43, 0xda, 0x2e, 0x46, 0x05, 0x00, + 0x42, 0xfd, 0x28, 0x55, 0x05, 0x00, 0xb0, 0x52, 0xb2, 0x46, 0xb3, 0x38, + 0xb4, 0x2c, 0xb6, 0x20, 0x43, 0xcd, 0xf4, 0x3d, 0x05, 0x00, 0x42, 0x7e, + 0x1a, 0x45, 0x05, 0x80, 0x0d, 0xba, 0x01, 0xff, 0xe1, 0x36, 0x05, 0x00, + 0x42, 0xb0, 0x01, 0x3a, 0x05, 0x40, 0x42, 0xa7, 0x01, 0x52, 0x05, 0x40, + 0x42, 0x27, 0x1e, 0x4e, 0x05, 0x00, 0xef, 0x48, 0x05, 0x40, 0x43, 0x75, + 0xc5, 0x4f, 0x05, 0x00, 0xef, 0x39, 0x05, 0x40, 0x42, 0x4e, 0x00, 0x4d, + 0x05, 0x00, 0x42, 0x22, 0x00, 0x47, 0x05, 0x40, 0xe1, 0x4c, 0x05, 0x00, + 0x42, 0x4e, 0x00, 0x50, 0x05, 0x40, 0x42, 0x4e, 0x00, 0x4a, 0x05, 0x00, + 0x43, 0x5b, 0xf4, 0x53, 0x05, 0x40, 0xe8, 0x54, 0x05, 0x00, 0xee, 0x3f, + 0x05, 0x40, 0xe1, 0x41, 0x05, 0x00, 0x43, 0xf6, 0x42, 0x4b, 0x05, 0x40, + 0x43, 0xa5, 0x02, 0x42, 0x05, 0x00, 0x42, 0x29, 0x02, 0x33, 0x05, 0x40, + 0x42, 0x6d, 0x14, 0x35, 0x05, 0x00, 0xe8, 0x37, 0x05, 0x00, 0xf4, 0x38, + 0x05, 0x40, 0xe1, 0x3e, 0x05, 0x00, 0xa8, 0x04, 0xef, 0x51, 0x05, 0x40, + 0xe1, 0x49, 0x05, 0x00, 0x42, 0x4e, 0x00, 0x43, 0x05, 0x40, 0x50, 0x0c, + 0x50, 0x5f, 0x05, 0x00, 0x49, 0x62, 0x36, 0x5a, 0x05, 0x40, 0x80, 0x68, + 0x07, 0xe8, 0x06, 0x01, 0xff, 0x49, 0x89, 0xb7, 0x06, 0x06, 0x00, 0x06, + 0xef, 0x06, 0x17, 0x4b, 0x2e, 0x9c, 0x07, 0x06, 0x00, 0x04, 0x6f, 0x02, + 0x01, 0xff, 0x4a, 0xdf, 0xad, 0x09, 0x06, 0x00, 0x51, 0x3c, 0x5e, 0x0a, + 0x06, 0x40, 0x45, 0x12, 0x0b, 0x68, 0x06, 0x00, 0xa6, 0x2e, 0x44, 0xcf, + 0x2a, 0x69, 0x06, 0x00, 0x43, 0x0e, 0x0b, 0x61, 0x06, 0x00, 0xb3, 0x14, + 0xb4, 0x06, 0x44, 0x43, 0x1e, 0x60, 0x06, 0x40, 0x44, 0x25, 0x01, 0x63, + 0x06, 0x00, 0x42, 0x15, 0x02, 0x62, 0x06, 0x40, 0x44, 0xc9, 0x1d, 0x67, + 0x06, 0x00, 0x42, 0x01, 0x26, 0x66, 0x06, 0x40, 0x43, 0xd2, 0x05, 0x65, + 0x06, 0x00, 0x43, 0xf6, 0x06, 0x64, 0x06, 0x40, 0xa2, 0xbc, 0x54, 0xa3, + 0xfd, 0x53, 0xa4, 0x9e, 0x53, 0xa5, 0xfa, 0x52, 0xa6, 0xac, 0x52, 0x02, + 0x22, 0x00, 0x90, 0x52, 0x4e, 0xb7, 0x78, 0x57, 0x06, 0x00, 0x45, 0xa8, + 0x50, 0x50, 0x06, 0x80, 0xe1, 0x51, 0xac, 0xf6, 0x0f, 0x02, 0x6c, 0x00, + 0xf9, 0x07, 0x07, 0xff, 0x39, 0xe8, 0x07, 0x05, 0xf6, 0x04, 0xd1, 0x07, + 0xb0, 0xa5, 0x07, 0x4d, 0xa6, 0x34, 0x1f, 0x06, 0x00, 0xb2, 0xed, 0x06, + 0xb3, 0xa4, 0x01, 0xb4, 0x2b, 0xb6, 0x0c, 0x50, 0xa6, 0x68, 0x5f, 0x06, + 0x00, 0x48, 0x08, 0xcd, 0x59, 0x06, 0x40, 0x4c, 0xd0, 0x47, 0x8e, 0x08, + 0x00, 0x0a, 0x41, 0x77, 0x01, 0xff, 0x49, 0x9f, 0x12, 0x5c, 0x06, 0x00, + 0x56, 0xc9, 0x34, 0x5b, 0x06, 0x00, 0x4d, 0xd2, 0x34, 0x5a, 0x06, 0x40, + 0xa1, 0x47, 0x52, 0x6f, 0x52, 0x6c, 0x06, 0x00, 0x04, 0x0e, 0x0b, 0x0c, + 0x5a, 0x06, 0x22, 0x1e, 0x06, 0x00, 0x51, 0xe6, 0x5e, 0xe3, 0x08, 0x40, + 0x05, 0x3a, 0xe8, 0x21, 0x08, 0xff, 0x0b, 0x11, 0x09, 0xf1, 0x0b, 0x01, + 0xff, 0x45, 0x5c, 0x00, 0xeb, 0x08, 0x00, 0x45, 0x20, 0x07, 0xee, 0x08, + 0x40, 0x45, 0x5c, 0x00, 0xea, 0x08, 0x00, 0x45, 0x20, 0x07, 0xed, 0x08, + 0x40, 0x45, 0x5c, 0x00, 0xec, 0x08, 0x00, 0x45, 0x20, 0x07, 0xef, 0x08, + 0x40, 0x4b, 0x4c, 0x9d, 0x73, 0xfe, 0x00, 0x45, 0x31, 0x21, 0x40, 0x06, + 0xc0, 0x00, 0x06, 0x50, 0x00, 0x01, 0xff, 0x4e, 0xbb, 0x77, 0x71, 0xfe, + 0x00, 0x0b, 0x2a, 0xa1, 0x06, 0x4e, 0x05, 0x0f, 0x85, 0x08, 0x40, 0x45, + 0x56, 0x00, 0x83, 0x08, 0x00, 0x43, 0x8a, 0x8a, 0x84, 0x08, 0x40, 0x48, + 0xda, 0x59, 0x1b, 0x06, 0x00, 0x45, 0xc8, 0xe6, 0x51, 0x06, 0x80, 0xa9, + 0x05, 0x04, 0x5b, 0x03, 0xd5, 0x04, 0x05, 0x5e, 0x07, 0xc1, 0x01, 0x53, + 0x6d, 0x4d, 0xde, 0x06, 0x00, 0xb5, 0x90, 0x01, 0x06, 0x60, 0x16, 0x01, + 0xff, 0x02, 0x3b, 0x01, 0x71, 0x0a, 0xd1, 0x46, 0x61, 0x44, 0x22, 0x08, + 0xbf, 0xfb, 0x00, 0x0a, 0x58, 0x75, 0x4b, 0xb4, 0x06, 0x4b, 0xf2, 0xa4, + 0xc2, 0xfb, 0x40, 0x0a, 0xae, 0x12, 0x22, 0x08, 0xf2, 0x0b, 0x01, 0xff, + 0x45, 0x5c, 0x00, 0xb4, 0xfb, 0x00, 0x45, 0x20, 0x07, 0xb5, 0xfb, 0x00, + 0x0b, 0x36, 0x2c, 0x01, 0xff, 0x45, 0x5c, 0x00, 0xbd, 0xfb, 0x00, 0x45, + 0x20, 0x07, 0xbe, 0xfb, 0x40, 0x45, 0x5c, 0x00, 0xb6, 0xfb, 0x00, 0x45, + 0x20, 0x07, 0xb7, 0xfb, 0x00, 0x13, 0x9c, 0x01, 0x01, 0xff, 0x45, 0x5c, + 0x00, 0xb8, 0xfb, 0x00, 0x45, 0x20, 0x07, 0xb9, 0xfb, 0x40, 0x45, 0x5c, + 0x00, 0xc0, 0xfb, 0x00, 0x45, 0x20, 0x07, 0xc1, 0xfb, 0x40, 0x45, 0x5c, + 0x00, 0xba, 0xfb, 0x00, 0x45, 0x20, 0x07, 0xbb, 0xfb, 0x40, 0x02, 0xc6, + 0x00, 0x06, 0x57, 0x66, 0x31, 0xbc, 0xfb, 0x40, 0x45, 0x5c, 0x00, 0xb2, + 0xfb, 0x00, 0x45, 0x20, 0x07, 0xb3, 0xfb, 0x40, 0x4c, 0xf7, 0x8c, 0x56, + 0x06, 0x00, 0x43, 0x77, 0x36, 0x52, 0x06, 0x80, 0x06, 0x58, 0x96, 0x2a, + 0x9d, 0x08, 0x40, 0x80, 0x01, 0xff, 0x45, 0x20, 0x07, 0xd0, 0x08, 0x00, + 0x4d, 0x5f, 0x03, 0x7e, 0xfe, 0x00, 0x4b, 0xf6, 0x6d, 0x7f, 0xfe, 0x40, + 0x45, 0xec, 0x5e, 0x19, 0x06, 0x00, 0x02, 0x0c, 0x08, 0xf8, 0x02, 0x05, + 0x48, 0x0b, 0x6a, 0x45, 0xa8, 0x50, 0x1a, 0x06, 0x00, 0x04, 0x08, 0x05, + 0x13, 0x43, 0x8a, 0x8a, 0xe5, 0x06, 0x00, 0x43, 0x4d, 0x00, 0xe6, 0x06, + 0xc0, 0x00, 0x5b, 0xd5, 0x19, 0xc5, 0x0e, 0x41, 0x44, 0x1c, 0x21, 0xed, + 0x06, 0x00, 0x44, 0xf9, 0x45, 0xfb, 0x0e, 0x81, 0x3a, 0x44, 0x8d, 0xf2, + 0xe3, 0x06, 0x00, 0xb7, 0x01, 0xff, 0x42, 0xb7, 0x2d, 0xd3, 0x08, 0x00, + 0x04, 0x3c, 0x25, 0x01, 0xff, 0xa9, 0x18, 0x45, 0x10, 0x4b, 0xff, 0x0e, + 0x01, 0x44, 0x29, 0xf2, 0xfe, 0x0e, 0x01, 0x45, 0xb5, 0xea, 0xfd, 0x0e, + 0x01, 0x47, 0x33, 0xd6, 0x9b, 0x08, 0x40, 0x45, 0x58, 0xe8, 0x9a, 0x08, + 0x00, 0x46, 0xda, 0xdf, 0x99, 0x08, 0x40, 0x4b, 0x19, 0x98, 0xd9, 0x08, + 0x40, 0x43, 0x56, 0x07, 0xd6, 0x08, 0x00, 0x54, 0x90, 0x41, 0xe1, 0x06, + 0x00, 0xa6, 0xef, 0x01, 0x44, 0x3e, 0x38, 0xda, 0x06, 0x00, 0xac, 0xbf, + 0x01, 0xad, 0xa5, 0x01, 0x44, 0xf9, 0x45, 0xe8, 0x06, 0x80, 0x97, 0x01, + 0x43, 0x43, 0x14, 0xd7, 0x08, 0x00, 0x4c, 0xd7, 0x94, 0xdf, 0x06, 0x00, + 0xb3, 0x77, 0xb4, 0x69, 0x58, 0x9e, 0x2b, 0xe0, 0x06, 0x00, 0xb7, 0x1c, + 0x43, 0x4d, 0x00, 0xe7, 0x06, 0x80, 0x0f, 0x02, 0x59, 0x00, 0x01, 0xff, + 0xe8, 0xcd, 0x08, 0x00, 0x42, 0x9e, 0x01, 0x17, 0x06, 0x40, 0x5b, 0xd5, + 0x19, 0xcb, 0x08, 0x40, 0x42, 0xb7, 0x2d, 0xf3, 0x08, 0x00, 0x04, 0x3c, + 0x25, 0x01, 0xff, 0xa1, 0x1a, 0x43, 0x8b, 0xf4, 0xde, 0x08, 0x00, 0x02, + 0x40, 0x06, 0x06, 0x45, 0x36, 0xec, 0xdf, 0x08, 0x40, 0xe8, 0xcc, 0x08, + 0x00, 0x43, 0x41, 0x3f, 0xdd, 0x08, 0x40, 0x45, 0xfe, 0xe7, 0x98, 0x08, + 0x00, 0x46, 0x24, 0xde, 0xdc, 0x08, 0x00, 0x45, 0x24, 0xea, 0xd4, 0x08, + 0x00, 0x47, 0x8b, 0xd5, 0xdb, 0x08, 0x00, 0x4b, 0x50, 0xa3, 0xda, 0x08, + 0x40, 0x42, 0x18, 0x0a, 0x15, 0x06, 0x00, 0x49, 0x2b, 0x10, 0xdb, 0x06, + 0x40, 0x42, 0xe8, 0x01, 0xd5, 0x08, 0x00, 0x43, 0xc4, 0x09, 0xdc, 0x06, + 0x00, 0x49, 0x2c, 0xba, 0xe1, 0x08, 0x40, 0x4b, 0x19, 0x98, 0xd8, 0x08, + 0x40, 0x44, 0x11, 0x4b, 0xe4, 0x06, 0x00, 0x05, 0x3f, 0x38, 0x01, 0xff, + 0x4b, 0xb9, 0x16, 0xd8, 0x06, 0x00, 0x4c, 0x60, 0x03, 0xe2, 0x06, 0x40, + 0x47, 0xbc, 0xce, 0xd9, 0x06, 0x00, 0x08, 0x9d, 0x1f, 0x01, 0xff, 0x0a, + 0x9f, 0xa7, 0x0c, 0x5e, 0x43, 0x14, 0xd7, 0x06, 0x00, 0x5e, 0x7f, 0x14, + 0xd6, 0x06, 0x40, 0x4c, 0xb7, 0x90, 0x16, 0x06, 0x00, 0x4a, 0xe3, 0xb3, + 0x16, 0x06, 0x40, 0x48, 0x90, 0xc3, 0xca, 0x08, 0x00, 0x4e, 0x5b, 0x7a, + 0xe0, 0x08, 0x40, 0x47, 0x91, 0xc3, 0xc9, 0x08, 0x00, 0x43, 0x8f, 0x00, + 0x18, 0x06, 0x40, 0x4f, 0x7d, 0x6a, 0x11, 0x06, 0x00, 0x45, 0xb7, 0xe8, + 0x0f, 0x06, 0x00, 0x02, 0x71, 0x00, 0x33, 0xb3, 0x06, 0x49, 0x9f, 0xbf, + 0x14, 0x06, 0x40, 0xa1, 0x11, 0x06, 0xec, 0xdc, 0x01, 0xff, 0x49, 0x12, + 0x3e, 0xfd, 0x06, 0x00, 0x50, 0xe6, 0x65, 0xfe, 0x06, 0x40, 0x43, 0x32, + 0xba, 0x03, 0x06, 0x00, 0x5a, 0xe8, 0x20, 0x10, 0x06, 0x00, 0x44, 0x4d, + 0xf1, 0x04, 0x06, 0x00, 0x43, 0x59, 0x46, 0x01, 0x06, 0x40, 0x4f, 0x03, + 0x6c, 0x13, 0x06, 0x00, 0x50, 0x76, 0x63, 0x12, 0x06, 0x40, 0x80, 0x01, + 0xff, 0x4d, 0x5f, 0x03, 0x7c, 0xfe, 0x00, 0x4b, 0xf6, 0x6d, 0x7d, 0xfe, + 0x40, 0xa1, 0x23, 0x4d, 0xc5, 0x82, 0x5d, 0x06, 0x00, 0x0f, 0xd1, 0x3d, + 0x06, 0x63, 0x41, 0x0b, 0xec, 0x06, 0x40, 0x45, 0x5c, 0x00, 0xf8, 0x08, + 0x80, 0x06, 0x45, 0x20, 0x07, 0xfa, 0x08, 0x40, 0x49, 0x75, 0x3b, 0xfd, + 0x08, 0x40, 0x4e, 0xd3, 0x78, 0x88, 0x08, 0x00, 0xf9, 0x08, 0x06, 0x40, + 0xa5, 0x1b, 0x51, 0xc8, 0x5a, 0x91, 0x08, 0x00, 0x4e, 0x35, 0x79, 0xe9, + 0x06, 0x00, 0xaf, 0x01, 0xff, 0x4f, 0xf3, 0x6c, 0x0e, 0x06, 0x00, 0x4e, + 0xdb, 0x7d, 0x90, 0x08, 0x40, 0x43, 0x31, 0x2b, 0x97, 0x08, 0x00, 0x4a, + 0xe2, 0x9b, 0x6a, 0x06, 0x40, 0x48, 0xf8, 0xc4, 0xf1, 0x08, 0x00, 0x48, + 0xbb, 0x77, 0xf0, 0x08, 0x00, 0x48, 0x70, 0xc7, 0xf2, 0x08, 0x40, 0x4a, + 0x59, 0x4c, 0x05, 0x06, 0x00, 0x44, 0x5a, 0x03, 0x00, 0x06, 0x40, 0x03, + 0x7a, 0x36, 0xe7, 0x07, 0x03, 0xbb, 0x00, 0xd6, 0x07, 0x0b, 0xa3, 0x53, + 0x01, 0xff, 0xa1, 0xc2, 0x07, 0x43, 0xa3, 0x8c, 0x01, 0xee, 0x01, 0xa4, + 0xe8, 0x05, 0x43, 0xd6, 0xb8, 0x10, 0xee, 0x01, 0x45, 0x65, 0x9c, 0x1b, + 0xee, 0x01, 0x43, 0x26, 0x21, 0x07, 0xee, 0x01, 0x08, 0xb8, 0x16, 0xd1, + 0x04, 0x44, 0x3e, 0x38, 0x02, 0xee, 0x01, 0xab, 0xbc, 0x04, 0xac, 0xfc, + 0x02, 0x44, 0x1c, 0x21, 0x0c, 0xee, 0x01, 0x44, 0xf9, 0x45, 0x0d, 0xee, + 0x01, 0x09, 0x7e, 0x3e, 0xdf, 0x02, 0x43, 0x43, 0x14, 0x12, 0xee, 0x01, + 0x43, 0x37, 0x52, 0x13, 0xee, 0x01, 0xb3, 0xa0, 0x01, 0xb4, 0x1b, 0x43, + 0x8a, 0x8a, 0x05, 0xee, 0x01, 0x43, 0x4d, 0x00, 0x09, 0xee, 0x01, 0x02, + 0x59, 0x00, 0x01, 0xff, 0xe8, 0x1a, 0xee, 0x01, 0x42, 0x9e, 0x01, 0x06, + 0xee, 0x41, 0xa1, 0x15, 0x42, 0x4e, 0x00, 0x15, 0xee, 0x01, 0xa8, 0x01, + 0xff, 0x42, 0x13, 0x00, 0x18, 0xee, 0x01, 0x42, 0x4e, 0x00, 0x16, 0xee, + 0x41, 0xe8, 0x08, 0xee, 0x01, 0x05, 0x91, 0x17, 0x01, 0xff, 0x43, 0x56, + 0x07, 0x4f, 0xee, 0x01, 0xa4, 0x44, 0x45, 0x65, 0x9c, 0x5b, 0xee, 0x01, + 0x43, 0x26, 0x21, 0x47, 0xee, 0x01, 0x44, 0x3e, 0x38, 0x42, 0xee, 0x01, + 0x44, 0xa0, 0x41, 0x57, 0xee, 0x01, 0x43, 0xb0, 0x00, 0x4b, 0xee, 0x01, + 0x44, 0xf9, 0x45, 0x4d, 0xee, 0x01, 0x43, 0x43, 0x14, 0x52, 0xee, 0x01, + 0xb3, 0x06, 0x43, 0x4d, 0x00, 0x49, 0xee, 0x41, 0x42, 0xe8, 0x01, 0x51, + 0xee, 0x01, 0x43, 0xc4, 0x09, 0x4e, 0xee, 0x01, 0x44, 0x4c, 0xdb, 0x54, + 0xee, 0x41, 0x42, 0xe8, 0x01, 0x59, 0xee, 0x01, 0x07, 0x91, 0x41, 0x01, + 0xff, 0x44, 0xf9, 0x45, 0x5d, 0xee, 0x01, 0x43, 0x43, 0x14, 0x5f, 0xee, + 0x41, 0x42, 0xe8, 0x01, 0x11, 0xee, 0x01, 0x43, 0xc4, 0x09, 0x0e, 0xee, + 0x01, 0x44, 0x4c, 0xdb, 0x14, 0xee, 0x01, 0x09, 0x2b, 0xb2, 0x01, 0xff, + 0x43, 0x56, 0x07, 0x6f, 0xee, 0x01, 0x43, 0xa3, 0x8c, 0x61, 0xee, 0x01, + 0xa4, 0x74, 0x43, 0xd6, 0xb8, 0x70, 0xee, 0x01, 0x45, 0x65, 0x9c, 0x7b, + 0xee, 0x01, 0xa8, 0x5a, 0x44, 0x3e, 0x38, 0x62, 0xee, 0x01, 0xab, 0x46, + 0x44, 0x1c, 0x21, 0x6c, 0xee, 0x01, 0x44, 0xf9, 0x45, 0x6d, 0xee, 0x01, + 0x43, 0x43, 0x14, 0x72, 0xee, 0x01, 0xb3, 0x20, 0xb4, 0x0c, 0x43, 0x4d, + 0x00, 0x69, 0xee, 0x01, 0x43, 0x01, 0x7f, 0x7a, 0xee, 0x41, 0x42, 0x18, + 0x0a, 0x68, 0xee, 0x01, 0x42, 0x4e, 0x00, 0x75, 0xee, 0x01, 0x43, 0xf6, + 0x42, 0x76, 0xee, 0x41, 0x42, 0xe8, 0x01, 0x71, 0xee, 0x01, 0x43, 0xc4, + 0x09, 0x6e, 0xee, 0x01, 0x44, 0x4c, 0xdb, 0x74, 0xee, 0x41, 0x42, 0x44, + 0x14, 0x6a, 0xee, 0x01, 0x43, 0x26, 0x21, 0x77, 0xee, 0x41, 0x42, 0x18, + 0x0a, 0x67, 0xee, 0x01, 0x42, 0x4e, 0x00, 0x64, 0xee, 0x41, 0x42, 0xe8, + 0x01, 0x79, 0xee, 0x01, 0x07, 0x91, 0x41, 0x01, 0xff, 0x43, 0xa3, 0x8c, + 0x7c, 0xee, 0x01, 0x43, 0xd6, 0xb8, 0x7e, 0xee, 0x41, 0x4c, 0x73, 0x8f, + 0xf1, 0xee, 0x01, 0x5a, 0x1c, 0x21, 0xf0, 0xee, 0x41, 0x42, 0x57, 0x00, + 0x0b, 0xee, 0x01, 0x06, 0x43, 0x85, 0x01, 0xff, 0xa1, 0xa3, 0x01, 0x43, + 0xa3, 0x8c, 0x81, 0xee, 0x01, 0x02, 0xf0, 0x10, 0x90, 0x01, 0x43, 0xd6, + 0xb8, 0x90, 0xee, 0x01, 0x45, 0x65, 0x9c, 0x9b, 0xee, 0x01, 0xa8, 0x76, + 0x44, 0x3e, 0x38, 0x82, 0xee, 0x01, 0x44, 0xa0, 0x41, 0x97, 0xee, 0x01, + 0x43, 0xb0, 0x00, 0x8b, 0xee, 0x01, 0x44, 0x1c, 0x21, 0x8c, 0xee, 0x01, + 0x44, 0xf9, 0x45, 0x8d, 0xee, 0x01, 0x43, 0x43, 0x14, 0x92, 0xee, 0x01, + 0x43, 0x37, 0x52, 0x93, 0xee, 0x01, 0xb3, 0x38, 0xb4, 0x1b, 0x43, 0x8a, + 0x8a, 0x85, 0xee, 0x01, 0x43, 0x4d, 0x00, 0x89, 0xee, 0x01, 0x02, 0x59, + 0x00, 0x01, 0xff, 0xe8, 0x9a, 0xee, 0x01, 0x42, 0x9e, 0x01, 0x86, 0xee, + 0x41, 0x42, 0x18, 0x0a, 0x88, 0xee, 0x01, 0x42, 0x4e, 0x00, 0x95, 0xee, + 0x01, 0xa8, 0x01, 0xff, 0x42, 0x13, 0x00, 0x98, 0xee, 0x01, 0x42, 0x4e, + 0x00, 0x96, 0xee, 0x41, 0x42, 0xe8, 0x01, 0x91, 0xee, 0x01, 0x43, 0xc4, + 0x09, 0x8e, 0xee, 0x01, 0x44, 0x4c, 0xdb, 0x94, 0xee, 0x41, 0x42, 0x18, + 0x0a, 0x87, 0xee, 0x01, 0x42, 0x4e, 0x00, 0x84, 0xee, 0x41, 0xe4, 0x99, + 0xee, 0x01, 0xec, 0x83, 0xee, 0x41, 0x42, 0x9e, 0x01, 0x8f, 0xee, 0x01, + 0x43, 0x68, 0x00, 0x80, 0xee, 0x41, 0x42, 0x44, 0x14, 0x0a, 0xee, 0x01, + 0x43, 0x26, 0x21, 0x17, 0xee, 0x41, 0x43, 0x56, 0x07, 0x2f, 0xee, 0x01, + 0x43, 0xa3, 0x8c, 0x21, 0xee, 0x01, 0x43, 0x2d, 0xd0, 0x39, 0xee, 0x01, + 0x43, 0xd6, 0xb8, 0x30, 0xee, 0x01, 0x45, 0x65, 0x9c, 0x3b, 0xee, 0x01, + 0xa8, 0x54, 0x44, 0x3e, 0x38, 0x22, 0xee, 0x01, 0xab, 0x40, 0x43, 0xb0, + 0x00, 0x2b, 0xee, 0x01, 0x44, 0x1c, 0x21, 0x2c, 0xee, 0x01, 0x44, 0xf9, + 0x45, 0x2d, 0xee, 0x01, 0x43, 0x43, 0x14, 0x32, 0xee, 0x01, 0xb3, 0x14, + 0xb4, 0x06, 0x43, 0x4d, 0x00, 0x29, 0xee, 0x41, 0x42, 0x4e, 0x00, 0x35, + 0xee, 0x01, 0x43, 0xf6, 0x42, 0x36, 0xee, 0x41, 0x42, 0xe8, 0x01, 0x31, + 0xee, 0x01, 0x43, 0xc4, 0x09, 0x2e, 0xee, 0x01, 0x44, 0x4c, 0xdb, 0x34, + 0xee, 0x41, 0x42, 0x44, 0x14, 0x2a, 0xee, 0x01, 0x43, 0x26, 0x21, 0x37, + 0xee, 0x41, 0x42, 0x18, 0x0a, 0x27, 0xee, 0x01, 0x42, 0x4e, 0x00, 0x24, + 0xee, 0x41, 0xa1, 0xc6, 0x01, 0xaf, 0x01, 0xff, 0x06, 0x92, 0x41, 0xa6, + 0x01, 0x0c, 0x15, 0x77, 0x01, 0xff, 0x43, 0x56, 0x07, 0xaf, 0xee, 0x01, + 0x43, 0xa3, 0x8c, 0xa1, 0xee, 0x01, 0x02, 0xf0, 0x10, 0x88, 0x01, 0x43, + 0xd6, 0xb8, 0xb0, 0xee, 0x01, 0x45, 0x65, 0x9c, 0xbb, 0xee, 0x01, 0x43, + 0x26, 0x21, 0xa7, 0xee, 0x01, 0x44, 0x3e, 0x38, 0xa2, 0xee, 0x01, 0x44, + 0xa0, 0x41, 0xb7, 0xee, 0x01, 0x43, 0xb0, 0x00, 0xab, 0xee, 0x01, 0x44, + 0x1c, 0x21, 0xac, 0xee, 0x01, 0x44, 0xf9, 0x45, 0xad, 0xee, 0x01, 0x43, + 0x43, 0x14, 0xb2, 0xee, 0x01, 0x43, 0x37, 0x52, 0xb3, 0xee, 0x01, 0xb3, + 0x38, 0xb4, 0x1b, 0x43, 0x8a, 0x8a, 0xa5, 0xee, 0x01, 0x43, 0x4d, 0x00, + 0xa9, 0xee, 0x01, 0x02, 0x59, 0x00, 0x01, 0xff, 0xe8, 0xba, 0xee, 0x01, + 0x42, 0x9e, 0x01, 0xa6, 0xee, 0x41, 0x42, 0x18, 0x0a, 0xa8, 0xee, 0x01, + 0x42, 0x4e, 0x00, 0xb5, 0xee, 0x01, 0xa8, 0x01, 0xff, 0x42, 0x13, 0x00, + 0xb8, 0xee, 0x01, 0x42, 0x4e, 0x00, 0xb6, 0xee, 0x41, 0x42, 0xe8, 0x01, + 0xb1, 0xee, 0x01, 0x43, 0xc4, 0x09, 0xae, 0xee, 0x01, 0x44, 0x4c, 0xdb, + 0xb4, 0xee, 0x41, 0xe4, 0xb9, 0xee, 0x01, 0xec, 0xa3, 0xee, 0x41, 0x43, + 0xa3, 0x8c, 0x1c, 0xee, 0x01, 0x43, 0xd6, 0xb8, 0x1e, 0xee, 0x01, 0x44, + 0xf9, 0x45, 0x1d, 0xee, 0x01, 0x43, 0x43, 0x14, 0x1f, 0xee, 0x41, 0xe4, + 0x19, 0xee, 0x01, 0xec, 0x03, 0xee, 0x41, 0x42, 0x9e, 0x01, 0x0f, 0xee, + 0x01, 0x43, 0x68, 0x00, 0x00, 0xee, 0x41, 0x4b, 0xf9, 0x45, 0x58, 0x06, + 0x00, 0x54, 0xf0, 0x45, 0xff, 0x08, 0x40, 0x47, 0xab, 0xcd, 0x9c, 0x08, + 0x00, 0x47, 0x54, 0x2d, 0x53, 0x06, 0x40, 0x05, 0x28, 0x1c, 0xc6, 0x41, + 0xa5, 0xdf, 0x22, 0x08, 0x9d, 0x1f, 0x01, 0xff, 0xa1, 0xbd, 0x20, 0xa2, + 0x8c, 0x1f, 0x02, 0xf0, 0x10, 0xe4, 0x1d, 0x09, 0xd6, 0xb8, 0xe3, 0x1c, + 0x0b, 0x65, 0x9c, 0x84, 0x1c, 0xa8, 0xb4, 0x1a, 0xaa, 0xa5, 0x19, 0xab, + 0x8f, 0x17, 0x09, 0x4c, 0x14, 0xc8, 0x14, 0xad, 0x85, 0x13, 0xae, 0x85, + 0x11, 0xb1, 0xea, 0x0f, 0xb2, 0xc5, 0x0e, 0xb3, 0x83, 0x08, 0xb4, 0x92, + 0x04, 0x36, 0x3e, 0x00, 0xf8, 0x03, 0x56, 0x0d, 0x38, 0xf8, 0xfd, 0x00, + 0x09, 0x4d, 0x00, 0x19, 0x0e, 0x01, 0x7f, 0x01, 0xff, 0xa9, 0x06, 0x4b, + 0xf6, 0x6d, 0x3b, 0xfd, 0x40, 0x4b, 0xb9, 0x16, 0xb9, 0xfc, 0x00, 0x4c, + 0x60, 0x03, 0x28, 0xfc, 0x40, 0x0d, 0x67, 0x00, 0xc4, 0x03, 0xa8, 0x83, + 0x01, 0x05, 0x3e, 0x38, 0x6b, 0x06, 0x72, 0x5b, 0x5b, 0x05, 0x1c, 0x21, + 0x22, 0x4f, 0xc2, 0x70, 0x94, 0xfc, 0x00, 0x4e, 0x9d, 0x7b, 0x91, 0xfc, + 0x00, 0x04, 0x4d, 0x00, 0x06, 0x4f, 0x27, 0x75, 0x92, 0xfc, 0x40, 0x4a, + 0xf5, 0x2c, 0x96, 0xfc, 0x00, 0x4d, 0x5f, 0x03, 0x5a, 0xfc, 0x40, 0x4a, + 0xf5, 0x2c, 0x93, 0xfc, 0x00, 0xa9, 0x21, 0x4b, 0xf6, 0x6d, 0xf0, 0xfc, + 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x05, 0x1c, 0x21, 0x06, 0x4e, 0xee, + 0x4e, 0xb0, 0xfd, 0x40, 0x4a, 0xf5, 0x2c, 0x9c, 0xfd, 0x00, 0x4c, 0xb8, + 0x16, 0x9d, 0xfd, 0x40, 0x4b, 0xb9, 0x16, 0xdd, 0xfc, 0x00, 0x4c, 0x60, + 0x03, 0x58, 0xfc, 0x40, 0x4b, 0xb9, 0x16, 0xdc, 0xfc, 0x00, 0x4c, 0x60, + 0x03, 0x57, 0xfc, 0x40, 0xa9, 0x06, 0x53, 0xe9, 0x4e, 0xaf, 0xfd, 0x40, + 0x4b, 0xb9, 0x16, 0xda, 0xfc, 0x00, 0x4c, 0x60, 0x03, 0x55, 0xfc, 0x40, + 0xa1, 0x11, 0x03, 0x4e, 0x00, 0x01, 0xff, 0x4c, 0xb8, 0x16, 0xde, 0xfc, + 0x00, 0x4b, 0xf6, 0x6d, 0xf1, 0xfc, 0x40, 0x02, 0x4f, 0x00, 0x92, 0x02, + 0x0f, 0x58, 0x00, 0x01, 0xff, 0xa1, 0xd8, 0x01, 0x02, 0x60, 0x00, 0xbe, + 0x01, 0xa8, 0x9a, 0x01, 0x06, 0x3e, 0x38, 0x89, 0x01, 0x51, 0x72, 0x5b, + 0x99, 0xfc, 0x00, 0x05, 0x1c, 0x21, 0x65, 0x4f, 0xc2, 0x70, 0x67, 0xfc, + 0x00, 0x03, 0xcf, 0x97, 0x4f, 0x4e, 0x9d, 0x7b, 0x64, 0xfc, 0x00, 0x02, + 0x2e, 0x02, 0x39, 0x04, 0x25, 0xf3, 0x29, 0xb9, 0x06, 0x4f, 0x27, 0x75, + 0x65, 0xfc, 0x40, 0x03, 0x4e, 0x00, 0x11, 0x02, 0x2e, 0x02, 0x01, 0xff, + 0x4a, 0xf5, 0x2c, 0xf5, 0xfb, 0x00, 0x4d, 0x5f, 0x03, 0xf4, 0xfb, 0x40, + 0x4a, 0xf5, 0x2c, 0x69, 0xfc, 0x00, 0x4d, 0x5f, 0x03, 0x04, 0xfc, 0x40, + 0x4a, 0xf5, 0x2c, 0xef, 0xfb, 0x00, 0x4d, 0x5f, 0x03, 0xee, 0xfb, 0x40, + 0x4a, 0xf5, 0x2c, 0xf1, 0xfb, 0x00, 0x4d, 0x5f, 0x03, 0xf0, 0xfb, 0x40, + 0x4a, 0xf5, 0x2c, 0xf3, 0xfb, 0x00, 0x4d, 0x5f, 0x03, 0xf2, 0xfb, 0x40, + 0x4a, 0xf5, 0x2c, 0x66, 0xfc, 0x00, 0xa9, 0x06, 0x4b, 0xf6, 0x6d, 0xdf, + 0xfc, 0x40, 0x4b, 0xb9, 0x16, 0x9a, 0xfc, 0x00, 0x4c, 0x60, 0x03, 0x02, + 0xfc, 0x40, 0x4b, 0xb9, 0x16, 0x97, 0xfc, 0x00, 0x4c, 0x60, 0x03, 0x00, + 0xfc, 0x40, 0x04, 0x74, 0x5a, 0x11, 0x03, 0x4e, 0x00, 0x01, 0xff, 0x4c, + 0xb8, 0x16, 0x9b, 0xfc, 0x00, 0x4b, 0xf6, 0x6d, 0xe0, 0xfc, 0x40, 0x4b, + 0xb9, 0x16, 0x98, 0xfc, 0x00, 0x4c, 0x60, 0x03, 0x01, 0xfc, 0x40, 0x4a, + 0xf5, 0x2c, 0xf7, 0xfb, 0x00, 0xa9, 0x01, 0xff, 0x4b, 0xb9, 0x16, 0xf8, + 0xfb, 0x00, 0x4c, 0x60, 0x03, 0xf6, 0xfb, 0x40, 0x02, 0x60, 0x00, 0x22, + 0x04, 0x68, 0x00, 0x01, 0xff, 0x4a, 0xf5, 0x2c, 0xeb, 0xfb, 0x00, 0x4d, + 0x5f, 0x03, 0xea, 0xfb, 0x00, 0x08, 0x6c, 0x00, 0x01, 0xff, 0x4a, 0xf5, + 0x2c, 0x68, 0xfc, 0x00, 0x4d, 0x5f, 0x03, 0x03, 0xfc, 0x40, 0x4a, 0xf5, + 0x2c, 0xed, 0xfb, 0x00, 0x4d, 0x5f, 0x03, 0xec, 0xfb, 0x40, 0xa9, 0x06, + 0x53, 0xe9, 0x4e, 0xae, 0xfd, 0x40, 0x4b, 0xb9, 0x16, 0xdb, 0xfc, 0x00, + 0x4c, 0x60, 0x03, 0x56, 0xfc, 0x40, 0x4a, 0xf5, 0x2c, 0x95, 0xfc, 0x00, + 0x4d, 0x5f, 0x03, 0x59, 0xfc, 0x40, 0x4a, 0xf5, 0x2c, 0xfa, 0xfb, 0x00, + 0xa9, 0x01, 0xff, 0x4b, 0xb9, 0x16, 0xfb, 0xfb, 0x00, 0x4c, 0x60, 0x03, + 0xf9, 0xfb, 0x40, 0xa1, 0xf6, 0x02, 0x08, 0x4e, 0x00, 0x6a, 0xa8, 0x01, + 0xff, 0x66, 0x67, 0x06, 0x5b, 0xfc, 0x00, 0x08, 0x4e, 0x00, 0x01, 0xff, + 0x0d, 0x67, 0x00, 0x4c, 0x4f, 0xf2, 0x6d, 0xe6, 0xfc, 0x00, 0x52, 0x11, + 0x53, 0x11, 0xfc, 0x00, 0x05, 0x1c, 0x21, 0x22, 0x4f, 0xc2, 0x70, 0x79, + 0xfc, 0x00, 0x4e, 0x9d, 0x7b, 0x76, 0xfc, 0x00, 0x04, 0x4d, 0x00, 0x06, + 0x4f, 0x27, 0x75, 0x77, 0xfc, 0x40, 0x4a, 0xf5, 0x2c, 0x7b, 0xfc, 0x00, + 0x4d, 0x5f, 0x03, 0x14, 0xfc, 0x40, 0x4a, 0xf5, 0x2c, 0x78, 0xfc, 0x00, + 0xa9, 0x06, 0x4b, 0xf6, 0x6d, 0xe5, 0xfc, 0x40, 0x4b, 0xb9, 0x16, 0xa6, + 0xfc, 0x00, 0x4c, 0x60, 0x03, 0x12, 0xfc, 0x40, 0x4a, 0xf5, 0x2c, 0x7a, + 0xfc, 0x00, 0x4d, 0x5f, 0x03, 0x13, 0xfc, 0x40, 0x0d, 0x67, 0x00, 0xf7, + 0x01, 0xa8, 0xb6, 0x01, 0x05, 0x3e, 0x38, 0x8c, 0x01, 0x05, 0x72, 0x5b, + 0x63, 0x05, 0x1c, 0x21, 0x22, 0x4f, 0xc2, 0x70, 0x73, 0xfc, 0x00, 0x4e, + 0x9d, 0x7b, 0x70, 0xfc, 0x00, 0x04, 0x4d, 0x00, 0x06, 0x4f, 0x27, 0x75, + 0x71, 0xfc, 0x40, 0x4a, 0xf5, 0x2c, 0x75, 0xfc, 0x00, 0x4d, 0x5f, 0x03, + 0x10, 0xfc, 0x40, 0x4a, 0xf5, 0x2c, 0x72, 0xfc, 0x00, 0xa9, 0x29, 0x4b, + 0xf6, 0x6d, 0xe3, 0xfc, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x57, 0xe8, + 0x2c, 0xa4, 0xfd, 0x00, 0x50, 0x73, 0x5b, 0x56, 0xfd, 0x00, 0x51, 0x3e, + 0x38, 0x55, 0xfd, 0x00, 0x51, 0x72, 0x5b, 0x57, 0xfd, 0x00, 0x4e, 0xee, + 0x4e, 0xa3, 0xfd, 0x40, 0x4b, 0xb9, 0x16, 0xa4, 0xfc, 0x00, 0x4c, 0x60, + 0x03, 0x0e, 0xfc, 0x40, 0xa9, 0x17, 0x05, 0x51, 0x00, 0x01, 0xff, 0x57, + 0xe8, 0x2c, 0xa2, 0xfd, 0x00, 0x51, 0x3e, 0x5c, 0x54, 0xfd, 0x00, 0x4e, + 0xee, 0x4e, 0xa1, 0xfd, 0x40, 0x4b, 0xb9, 0x16, 0xa3, 0xfc, 0x00, 0x4c, + 0x60, 0x03, 0x0d, 0xfc, 0x40, 0xa9, 0x17, 0x05, 0x51, 0x00, 0x01, 0xff, + 0x57, 0xe8, 0x2c, 0xa0, 0xfd, 0x00, 0x51, 0x3e, 0x5c, 0x50, 0xfd, 0x00, + 0x4e, 0xee, 0x4e, 0x9f, 0xfd, 0x40, 0x4b, 0xb9, 0x16, 0xa1, 0xfc, 0x00, + 0x4c, 0x60, 0x03, 0x0b, 0xfc, 0x40, 0x03, 0x18, 0x0a, 0x11, 0x03, 0x4e, + 0x00, 0x01, 0xff, 0x4c, 0xb8, 0x16, 0xa5, 0xfc, 0x00, 0x4b, 0xf6, 0x6d, + 0xe4, 0xfc, 0x40, 0xa9, 0x1b, 0x05, 0x51, 0x00, 0x01, 0xff, 0x05, 0x3e, + 0x38, 0x06, 0x51, 0x3e, 0x5c, 0x53, 0xfd, 0x40, 0x4a, 0xf5, 0x2c, 0x51, + 0xfd, 0x00, 0x4c, 0xb8, 0x16, 0x52, 0xfd, 0x40, 0x4b, 0xb9, 0x16, 0xa2, + 0xfc, 0x00, 0x4c, 0x60, 0x03, 0x0c, 0xfc, 0x40, 0x4a, 0xf5, 0x2c, 0x74, + 0xfc, 0x00, 0x4d, 0x5f, 0x03, 0x0f, 0xfc, 0x40, 0x52, 0x89, 0x50, 0x4e, + 0xfd, 0x00, 0x07, 0x4f, 0x00, 0x01, 0xff, 0x0d, 0x67, 0x00, 0x5a, 0x05, + 0x73, 0x5a, 0x4a, 0x05, 0x1c, 0x21, 0x11, 0x04, 0x4d, 0x00, 0x01, 0xff, + 0x4a, 0xf5, 0x2c, 0x12, 0xfd, 0x00, 0x4d, 0x5f, 0x03, 0xf6, 0xfc, 0x40, + 0xa9, 0x27, 0x4b, 0xf6, 0x6d, 0x3a, 0xfd, 0x00, 0x05, 0x51, 0x00, 0x01, + 0xff, 0x04, 0x26, 0x21, 0x0c, 0x51, 0x3e, 0x5c, 0x73, 0xfd, 0x00, 0x4e, + 0xee, 0x4e, 0x74, 0xfd, 0x40, 0x4a, 0xf5, 0x2c, 0x71, 0xfd, 0x00, 0x4c, + 0xb8, 0x16, 0x72, 0xfd, 0x40, 0x4b, 0xb9, 0x16, 0x33, 0xfd, 0x00, 0x4c, + 0x60, 0x03, 0x27, 0xfc, 0x40, 0x4b, 0xb9, 0x16, 0xb8, 0xfc, 0x00, 0x4c, + 0x60, 0x03, 0x26, 0xfc, 0x40, 0x4a, 0xf5, 0x2c, 0x11, 0xfd, 0x00, 0x4d, + 0x5f, 0x03, 0xf5, 0xfc, 0x40, 0xa1, 0xde, 0x04, 0x09, 0x22, 0xb8, 0xde, + 0x02, 0xa8, 0x06, 0x54, 0x54, 0x46, 0xfe, 0xfd, 0x40, 0x0a, 0x6d, 0xa7, + 0x8b, 0x02, 0x09, 0x22, 0xb8, 0x01, 0xff, 0x0d, 0x67, 0x00, 0xf5, 0x01, + 0xa8, 0xa8, 0x01, 0x05, 0x3e, 0x38, 0x83, 0x01, 0x05, 0x72, 0x5b, 0x65, + 0x05, 0x1c, 0x21, 0x21, 0x04, 0x9d, 0x7b, 0x11, 0x04, 0x4d, 0x00, 0x01, + 0xff, 0x4a, 0xf5, 0x2c, 0x1a, 0xfd, 0x00, 0x4d, 0x5f, 0x03, 0xfe, 0xfc, + 0x40, 0x4a, 0xf5, 0x2c, 0x29, 0xfd, 0x00, 0x4d, 0x5f, 0x03, 0x0d, 0xfd, + 0x40, 0x4a, 0xf5, 0x2c, 0x28, 0xfd, 0x00, 0xa9, 0x2c, 0x4b, 0xf6, 0x6d, + 0xe9, 0xfc, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x05, 0x72, 0x5b, 0x11, + 0x05, 0x1c, 0x21, 0x01, 0xff, 0x4a, 0xf5, 0x2c, 0x6c, 0xfd, 0x00, 0x4c, + 0xb8, 0x16, 0x6d, 0xfd, 0x40, 0x4a, 0xf5, 0x2c, 0x6a, 0xfd, 0x00, 0x4c, + 0xb8, 0x16, 0x6b, 0xfd, 0x40, 0x4b, 0xb9, 0x16, 0x30, 0xfd, 0x00, 0x4c, + 0x60, 0x03, 0x0c, 0xfd, 0x40, 0x4a, 0xf5, 0x2c, 0x27, 0xfd, 0x00, 0xa9, + 0x06, 0x4b, 0xf6, 0x6d, 0x39, 0xfd, 0x40, 0x4b, 0xb9, 0x16, 0x2f, 0xfd, + 0x00, 0x4c, 0x60, 0x03, 0x0b, 0xfd, 0x40, 0x4a, 0xf5, 0x2c, 0x25, 0xfd, + 0x00, 0xa9, 0x0c, 0x4b, 0xf6, 0x6d, 0x37, 0xfd, 0x00, 0x53, 0xe9, 0x4e, + 0x69, 0xfd, 0x40, 0x4b, 0xb9, 0x16, 0x2d, 0xfd, 0x00, 0x4c, 0x60, 0x03, + 0x09, 0xfd, 0x40, 0x03, 0x18, 0x0a, 0x11, 0x03, 0x4e, 0x00, 0x01, 0xff, + 0x4c, 0xb8, 0x16, 0x32, 0xfd, 0x00, 0x4b, 0xf6, 0x6d, 0xea, 0xfc, 0x40, + 0x4a, 0xf5, 0x2c, 0x26, 0xfd, 0x00, 0xa9, 0x21, 0x4b, 0xf6, 0x6d, 0x38, + 0xfd, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x05, 0x1c, 0x21, 0x06, 0x4e, + 0xee, 0x4e, 0xaa, 0xfd, 0x40, 0x4a, 0xf5, 0x2c, 0x67, 0xfd, 0x00, 0x4c, + 0xb8, 0x16, 0x68, 0xfd, 0x40, 0x4b, 0xb9, 0x16, 0x2e, 0xfd, 0x00, 0x4c, + 0x60, 0x03, 0x0a, 0xfd, 0x40, 0x4a, 0xf5, 0x2c, 0x19, 0xfd, 0x00, 0x4d, + 0x5f, 0x03, 0xfd, 0xfc, 0x40, 0x05, 0xec, 0x5e, 0x2e, 0x06, 0xba, 0xdb, + 0x1e, 0x05, 0xa8, 0x50, 0x06, 0x5e, 0x6f, 0x06, 0x63, 0xfc, 0x40, 0x80, + 0x06, 0x51, 0x1a, 0x5e, 0x5f, 0xfc, 0x40, 0x4d, 0x5f, 0x03, 0x62, 0xfc, + 0x00, 0x4b, 0xf6, 0x6d, 0xf4, 0xfc, 0x40, 0x4d, 0x5f, 0x03, 0x60, 0xfc, + 0x00, 0x4b, 0xf6, 0x6d, 0xf2, 0xfc, 0x40, 0x80, 0x06, 0x51, 0x1a, 0x5e, + 0x5e, 0xfc, 0x40, 0x4d, 0x5f, 0x03, 0x61, 0xfc, 0x00, 0x4b, 0xf6, 0x6d, + 0xf3, 0xfc, 0x40, 0x0d, 0x67, 0x00, 0xea, 0x01, 0xa8, 0xb8, 0x01, 0x05, + 0x3e, 0x38, 0x8e, 0x01, 0x05, 0x72, 0x5b, 0x65, 0x05, 0x1c, 0x21, 0x21, + 0x04, 0x9d, 0x7b, 0x11, 0x04, 0x4d, 0x00, 0x01, 0xff, 0x4a, 0xf5, 0x2c, + 0x18, 0xfd, 0x00, 0x4d, 0x5f, 0x03, 0xfc, 0xfc, 0x40, 0x4a, 0xf5, 0x2c, + 0x2a, 0xfd, 0x00, 0x4d, 0x5f, 0x03, 0x0e, 0xfd, 0x40, 0xa9, 0x32, 0x4b, + 0xf6, 0x6d, 0xe7, 0xfc, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x04, 0x26, + 0x21, 0x17, 0x51, 0x3e, 0x38, 0x61, 0xfd, 0x00, 0x05, 0x1c, 0x21, 0x01, + 0xff, 0x4a, 0xf5, 0x2c, 0x62, 0xfd, 0x00, 0x4c, 0xb8, 0x16, 0x63, 0xfd, + 0x40, 0x4a, 0xf5, 0x2c, 0x5f, 0xfd, 0x00, 0x4c, 0xb8, 0x16, 0x60, 0xfd, + 0x40, 0x4b, 0xb9, 0x16, 0xb0, 0xfc, 0x00, 0x4c, 0x60, 0x03, 0x1f, 0xfc, + 0x40, 0xa9, 0x17, 0x4b, 0xf6, 0x6d, 0x36, 0xfd, 0x00, 0x05, 0x51, 0x00, + 0x01, 0xff, 0x57, 0xe8, 0x2c, 0xa8, 0xfd, 0x00, 0x4e, 0xee, 0x4e, 0xc6, + 0xfd, 0x40, 0x4b, 0xb9, 0x16, 0xaf, 0xfc, 0x00, 0x4c, 0x60, 0x03, 0x1e, + 0xfc, 0x40, 0xa9, 0x17, 0x4b, 0xf6, 0x6d, 0x34, 0xfd, 0x00, 0x05, 0x51, + 0x00, 0x01, 0xff, 0x57, 0xe8, 0x2c, 0x5e, 0xfd, 0x00, 0x50, 0x73, 0x5b, + 0x5d, 0xfd, 0x40, 0x4b, 0xb9, 0x16, 0xad, 0xfc, 0x00, 0x4c, 0x60, 0x03, + 0x1c, 0xfc, 0x40, 0x03, 0x18, 0x0a, 0x11, 0x03, 0x4e, 0x00, 0x01, 0xff, + 0x4c, 0xb8, 0x16, 0x31, 0xfd, 0x00, 0x4b, 0xf6, 0x6d, 0xe8, 0xfc, 0x40, + 0xa9, 0x0c, 0x4b, 0xf6, 0x6d, 0x35, 0xfd, 0x00, 0x56, 0x39, 0x38, 0x5c, + 0xfd, 0x40, 0x4b, 0xb9, 0x16, 0xae, 0xfc, 0x00, 0x4c, 0x60, 0x03, 0x1d, + 0xfc, 0x40, 0x4a, 0xf5, 0x2c, 0x17, 0xfd, 0x00, 0x4d, 0x5f, 0x03, 0xfb, + 0xfc, 0x40, 0x07, 0xa2, 0x0a, 0x53, 0xac, 0x01, 0xff, 0xa1, 0x42, 0x02, + 0x74, 0x00, 0x01, 0xff, 0x80, 0x2f, 0x03, 0x2c, 0x0e, 0x01, 0xff, 0x04, + 0x57, 0x19, 0x1a, 0xa8, 0x01, 0xff, 0x52, 0x43, 0x54, 0xfa, 0xfd, 0x00, + 0x0b, 0x00, 0xa4, 0x01, 0xff, 0x57, 0xd1, 0x2c, 0xcc, 0xfd, 0x00, 0x51, + 0xd7, 0x2c, 0x4c, 0xfd, 0x40, 0x4f, 0x8c, 0x6a, 0x46, 0xfd, 0x00, 0x58, + 0x56, 0x2b, 0xd0, 0xfb, 0x40, 0x4d, 0x5f, 0x03, 0xf9, 0xfd, 0x00, 0x67, + 0x45, 0x03, 0xf0, 0xfd, 0x40, 0x4d, 0x55, 0x80, 0xcf, 0xfd, 0x00, 0x4f, + 0x14, 0x38, 0xf5, 0xfd, 0x40, 0x0d, 0x67, 0x00, 0x77, 0x04, 0x26, 0x21, + 0x4a, 0x51, 0x72, 0x5b, 0xb2, 0xfc, 0x00, 0x05, 0x1c, 0x21, 0x21, 0x04, + 0x9d, 0x7b, 0x11, 0x04, 0x4d, 0x00, 0x01, 0xff, 0x4a, 0xf5, 0x2c, 0x22, + 0xfd, 0x00, 0x4d, 0x5f, 0x03, 0x06, 0xfd, 0x40, 0x4a, 0xf5, 0x2c, 0x2b, + 0xfd, 0x00, 0x4d, 0x5f, 0x03, 0x0f, 0xfd, 0x40, 0xa9, 0x11, 0x0a, 0x05, + 0x7f, 0x01, 0xff, 0x4a, 0xf5, 0x2c, 0x66, 0xfd, 0x00, 0x4c, 0xb8, 0x16, + 0xc5, 0xfd, 0x40, 0x4b, 0xb9, 0x16, 0xb3, 0xfc, 0x00, 0x4c, 0x60, 0x03, + 0x21, 0xfc, 0x40, 0xa9, 0x1b, 0x05, 0x51, 0x00, 0x01, 0xff, 0x04, 0x26, + 0x21, 0x06, 0x4e, 0xee, 0x4e, 0xa9, 0xfd, 0x40, 0x4a, 0xf5, 0x2c, 0x64, + 0xfd, 0x00, 0x4c, 0xb8, 0x16, 0x65, 0xfd, 0x40, 0x4b, 0xb9, 0x16, 0xb1, + 0xfc, 0x00, 0x4c, 0x60, 0x03, 0x20, 0xfc, 0x40, 0x4a, 0xf5, 0x2c, 0x21, + 0xfd, 0x00, 0x4d, 0x5f, 0x03, 0x05, 0xfd, 0x40, 0xa1, 0x06, 0x66, 0xb3, + 0x06, 0x5c, 0xfc, 0x40, 0x0b, 0xef, 0x9a, 0x5b, 0xa8, 0x06, 0x52, 0x87, + 0x55, 0xf6, 0xfd, 0x40, 0x05, 0x63, 0xe7, 0x25, 0x0d, 0xb7, 0x85, 0x01, + 0xff, 0x45, 0xf2, 0x20, 0x90, 0xfd, 0x80, 0x06, 0x4d, 0x56, 0x2b, 0xc5, + 0xfb, 0x40, 0x42, 0x80, 0x12, 0x91, 0xfd, 0x00, 0x42, 0x29, 0x02, 0xc6, + 0xfb, 0xc0, 0x00, 0x42, 0x80, 0x12, 0xc7, 0xfb, 0x40, 0x47, 0xbd, 0x2d, + 0x40, 0xfd, 0x80, 0x1d, 0xad, 0x01, 0xff, 0x47, 0xbd, 0x2d, 0x4f, 0xfd, + 0x80, 0x0d, 0x49, 0xf9, 0x4f, 0xc9, 0xfb, 0xc0, 0x00, 0x49, 0x02, 0x50, + 0xca, 0xfb, 0x40, 0x49, 0x02, 0x50, 0xc8, 0xfb, 0x40, 0x48, 0x60, 0x46, + 0xc8, 0xfd, 0x40, 0x43, 0x0e, 0x6c, 0x41, 0xfd, 0x80, 0x1a, 0x4b, 0x2f, + 0xa3, 0xc9, 0xfd, 0xc0, 0x00, 0x42, 0x80, 0x12, 0xca, 0xfd, 0x00, 0x42, + 0x48, 0x04, 0xcb, 0xfb, 0xc0, 0x00, 0x42, 0x80, 0x12, 0xcb, 0xfd, 0x40, + 0x42, 0x80, 0x12, 0x42, 0xfd, 0x00, 0xb5, 0x01, 0xff, 0xed, 0x43, 0xfd, + 0x80, 0x06, 0x43, 0x01, 0x46, 0x45, 0xfd, 0x40, 0x42, 0x80, 0x12, 0x44, + 0xfd, 0x40, 0xa1, 0x22, 0x06, 0xe8, 0xe0, 0x01, 0xff, 0x05, 0x89, 0x41, + 0x06, 0x4c, 0x8b, 0x95, 0xd7, 0x0e, 0x41, 0x42, 0x18, 0x0a, 0x4b, 0xfd, + 0x00, 0x44, 0x1c, 0x58, 0xd5, 0x0e, 0xc1, 0x00, 0x42, 0x80, 0x12, 0xd6, + 0x0e, 0x41, 0x54, 0x7c, 0x41, 0xd4, 0x0e, 0x01, 0x07, 0x45, 0x14, 0x06, + 0x6a, 0x42, 0x03, 0xf1, 0xfd, 0x40, 0x0d, 0x67, 0x00, 0x54, 0x05, 0x73, + 0x5a, 0x44, 0x05, 0x1c, 0x21, 0x11, 0x04, 0x4d, 0x00, 0x01, 0xff, 0x4a, + 0xf5, 0x2c, 0x7f, 0xfc, 0x00, 0x4d, 0x5f, 0x03, 0x36, 0xfc, 0x40, 0xa9, + 0x21, 0x05, 0x51, 0x00, 0x01, 0xff, 0x04, 0x26, 0x21, 0x0c, 0x4f, 0x3b, + 0x70, 0x7f, 0xfd, 0x00, 0x4e, 0xee, 0x4e, 0xb2, 0xfd, 0x40, 0x4a, 0xf5, + 0x2c, 0x7e, 0xfd, 0x00, 0x4c, 0xb8, 0x16, 0xb4, 0xfd, 0x40, 0x4b, 0xb9, + 0x16, 0xc3, 0xfc, 0x00, 0x4c, 0x60, 0x03, 0x34, 0xfc, 0x40, 0x4b, 0xb9, + 0x16, 0xc2, 0xfc, 0x00, 0x4c, 0x60, 0x03, 0x33, 0xfc, 0x40, 0x4a, 0xf5, + 0x2c, 0x7e, 0xfc, 0x00, 0x4d, 0x5f, 0x03, 0x35, 0xfc, 0x40, 0x57, 0xb7, + 0x2d, 0xd8, 0x0e, 0x01, 0x09, 0x94, 0x05, 0x01, 0xff, 0x0d, 0x67, 0x00, + 0xe1, 0x01, 0xa8, 0xa4, 0x01, 0x05, 0x3e, 0x38, 0x61, 0x06, 0x72, 0x5b, + 0x51, 0x05, 0x1c, 0x21, 0x22, 0x4f, 0xc2, 0x70, 0x8d, 0xfc, 0x00, 0x4e, + 0x9d, 0x7b, 0x8a, 0xfc, 0x00, 0x04, 0x4d, 0x00, 0x06, 0x4f, 0x27, 0x75, + 0x8b, 0xfc, 0x40, 0x4a, 0xf5, 0x2c, 0x8f, 0xfc, 0x00, 0x4d, 0x5f, 0x03, + 0x50, 0xfc, 0x40, 0x4a, 0xf5, 0x2c, 0x8c, 0xfc, 0x00, 0xa9, 0x17, 0x4b, + 0xf6, 0x6d, 0xee, 0xfc, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x57, 0xe8, + 0x2c, 0x9b, 0xfd, 0x00, 0x4e, 0xee, 0x4e, 0x9a, 0xfd, 0x40, 0x4b, 0xb9, + 0x16, 0xd5, 0xfc, 0x00, 0x4c, 0x60, 0x03, 0x4e, 0xfc, 0x40, 0x4b, 0xb9, + 0x16, 0xd4, 0xfc, 0x00, 0x4c, 0x60, 0x03, 0x4d, 0xfc, 0x40, 0xa9, 0x31, + 0x05, 0x51, 0x00, 0x01, 0xff, 0x57, 0xe8, 0x2c, 0x99, 0xfd, 0x00, 0x04, + 0x26, 0x21, 0x16, 0x05, 0x1c, 0x21, 0x06, 0x4e, 0xee, 0x4e, 0xc7, 0xfd, + 0x40, 0x4a, 0xf5, 0x2c, 0x97, 0xfd, 0x00, 0x4c, 0xb8, 0x16, 0x98, 0xfd, + 0x40, 0x4a, 0xf5, 0x2c, 0xbd, 0xfd, 0x00, 0x4c, 0xb8, 0x16, 0xb8, 0xfd, + 0x40, 0x4b, 0xb9, 0x16, 0xd2, 0xfc, 0x00, 0x4c, 0x60, 0x03, 0x4b, 0xfc, + 0x40, 0x03, 0x18, 0x0a, 0x11, 0x03, 0x4e, 0x00, 0x01, 0xff, 0x4c, 0xb8, + 0x16, 0xd6, 0xfc, 0x00, 0x4b, 0xf6, 0x6d, 0xef, 0xfc, 0x40, 0xa9, 0x17, + 0x05, 0x51, 0x00, 0x01, 0xff, 0x57, 0xe8, 0x2c, 0x96, 0xfd, 0x00, 0x51, + 0x3e, 0x5c, 0x95, 0xfd, 0x00, 0x4e, 0xee, 0x4e, 0xb3, 0xfd, 0x40, 0x4b, + 0xb9, 0x16, 0xd3, 0xfc, 0x00, 0x4c, 0x60, 0x03, 0x4c, 0xfc, 0x40, 0x4a, + 0xf5, 0x2c, 0x8e, 0xfc, 0x00, 0x4d, 0x5f, 0x03, 0x4f, 0xfc, 0x40, 0x09, + 0x1d, 0x21, 0x06, 0x55, 0x3d, 0x3d, 0xf4, 0xfd, 0x40, 0x05, 0x67, 0x00, + 0xa5, 0x01, 0x04, 0x26, 0x21, 0x7c, 0x05, 0x3e, 0x38, 0x4d, 0x05, 0x72, + 0x5b, 0x24, 0x05, 0x1c, 0x21, 0x06, 0x51, 0xd4, 0x5f, 0x4a, 0xfc, 0x40, + 0x4a, 0xf5, 0x2c, 0x89, 0xfc, 0x00, 0xa9, 0x06, 0x53, 0xe9, 0x4e, 0xb1, + 0xfd, 0x40, 0x4b, 0xb9, 0x16, 0xd1, 0xfc, 0x00, 0x4c, 0x60, 0x03, 0x48, + 0xfc, 0x40, 0xa9, 0x17, 0x05, 0x51, 0x00, 0x01, 0xff, 0x51, 0x3e, 0x38, + 0x8e, 0xfd, 0x00, 0x51, 0x3e, 0x5c, 0x8f, 0xfd, 0x00, 0x4e, 0xee, 0x4e, + 0xb9, 0xfd, 0x40, 0x4b, 0xb9, 0x16, 0xd0, 0xfc, 0x00, 0x4c, 0x60, 0x03, + 0x47, 0xfc, 0x40, 0xa9, 0x1d, 0x05, 0x51, 0x00, 0x01, 0xff, 0x50, 0x73, + 0x5b, 0x8c, 0xfd, 0x00, 0x51, 0x72, 0x5b, 0x92, 0xfd, 0x00, 0x51, 0x3e, + 0x5c, 0x8d, 0xfd, 0x00, 0x4e, 0xee, 0x4e, 0xc0, 0xfd, 0x40, 0x4b, 0xb9, + 0x16, 0xce, 0xfc, 0x00, 0x4c, 0x60, 0x03, 0x45, 0xfc, 0x40, 0xa9, 0x17, + 0x05, 0x51, 0x00, 0x01, 0xff, 0x51, 0x3e, 0x38, 0x89, 0xfd, 0x00, 0x51, + 0x3e, 0x5c, 0x8a, 0xfd, 0x00, 0x4e, 0xee, 0x4e, 0x8b, 0xfd, 0x40, 0x4b, + 0xb9, 0x16, 0xcf, 0xfc, 0x00, 0x4c, 0x60, 0x03, 0x46, 0xfc, 0x40, 0x4a, + 0xf5, 0x2c, 0x88, 0xfc, 0x00, 0x55, 0xe5, 0x1e, 0x49, 0xfc, 0x40, 0x05, + 0x67, 0x00, 0xe6, 0x01, 0xa8, 0xaa, 0x01, 0x05, 0x3e, 0x38, 0x6d, 0x05, + 0x72, 0x5b, 0x4a, 0x05, 0x1c, 0x21, 0x11, 0x04, 0x4d, 0x00, 0x01, 0xff, + 0x4a, 0xf5, 0x2c, 0x87, 0xfc, 0x00, 0x4d, 0x5f, 0x03, 0x44, 0xfc, 0x40, + 0x4a, 0xf5, 0x2c, 0x85, 0xfc, 0x00, 0xa9, 0x21, 0x4b, 0xf6, 0x6d, 0xed, + 0xfc, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x04, 0x26, 0x21, 0x06, 0x4e, + 0xee, 0x4e, 0xad, 0xfd, 0x40, 0x4a, 0xf5, 0x2c, 0x87, 0xfd, 0x00, 0x4c, + 0xb8, 0x16, 0x88, 0xfd, 0x40, 0x4b, 0xb9, 0x16, 0xcc, 0xfc, 0x00, 0x4c, + 0x60, 0x03, 0x42, 0xfc, 0x40, 0xa9, 0x11, 0x0a, 0x05, 0x7f, 0x01, 0xff, + 0x4a, 0xf5, 0x2c, 0x85, 0xfd, 0x00, 0x4c, 0xb8, 0x16, 0x86, 0xfd, 0x40, + 0x4b, 0xb9, 0x16, 0xcb, 0xfc, 0x00, 0x4c, 0x60, 0x03, 0x41, 0xfc, 0x40, + 0xa9, 0x2b, 0x05, 0x51, 0x00, 0x01, 0xff, 0x05, 0x3e, 0x38, 0x16, 0x05, + 0x1c, 0x21, 0x06, 0x4e, 0xee, 0x4e, 0xac, 0xfd, 0x40, 0x4a, 0xf5, 0x2c, + 0xbc, 0xfd, 0x00, 0x4c, 0xb8, 0x16, 0xba, 0xfd, 0x40, 0x4a, 0xf5, 0x2c, + 0x84, 0xfd, 0x00, 0x4c, 0xb8, 0x16, 0x83, 0xfd, 0x40, 0x4b, 0xb9, 0x16, + 0xc9, 0xfc, 0x00, 0x4c, 0x60, 0x03, 0x3f, 0xfc, 0x40, 0x03, 0x18, 0x0a, + 0x06, 0x4f, 0xa8, 0x6c, 0xcd, 0xfc, 0x40, 0xa9, 0x21, 0x05, 0x51, 0x00, + 0x01, 0xff, 0x57, 0xe8, 0x2c, 0x82, 0xfd, 0x00, 0x05, 0x1c, 0x21, 0x06, + 0x4e, 0xee, 0x4e, 0x81, 0xfd, 0x40, 0x4a, 0xf5, 0x2c, 0x80, 0xfd, 0x00, + 0x4c, 0xb8, 0x16, 0xb5, 0xfd, 0x40, 0x4b, 0xb9, 0x16, 0xca, 0xfc, 0x00, + 0x4c, 0x60, 0x03, 0x40, 0xfc, 0x40, 0x4a, 0xf5, 0x2c, 0xfc, 0xfe, 0x00, + 0x4d, 0x5f, 0x03, 0xfb, 0xfe, 0x00, 0x08, 0x6c, 0x00, 0x3b, 0x05, 0x51, + 0x00, 0x01, 0xff, 0x06, 0x56, 0x00, 0x11, 0x0c, 0xb3, 0x91, 0x01, 0xff, + 0x4a, 0xf5, 0x2c, 0xf6, 0xfe, 0x00, 0x4d, 0x5f, 0x03, 0xf5, 0xfe, 0x40, + 0x06, 0x5c, 0x00, 0x11, 0x06, 0xa3, 0x12, 0x01, 0xff, 0x4a, 0xf5, 0x2c, + 0xfa, 0xfe, 0x00, 0x4d, 0x5f, 0x03, 0xf9, 0xfe, 0x40, 0x4a, 0xf5, 0x2c, + 0xf8, 0xfe, 0x00, 0x4d, 0x5f, 0x03, 0xf7, 0xfe, 0x40, 0x4a, 0xf5, 0x2c, + 0x86, 0xfc, 0x00, 0x4d, 0x5f, 0x03, 0x43, 0xfc, 0x40, 0xa1, 0x4c, 0x09, + 0x26, 0x21, 0x01, 0xff, 0x0d, 0x67, 0x00, 0x37, 0x51, 0x73, 0x5a, 0x1a, + 0xfc, 0x00, 0x06, 0x3e, 0x38, 0x21, 0x06, 0x3e, 0x5c, 0x11, 0x04, 0x4d, + 0x00, 0x01, 0xff, 0x4a, 0xf5, 0x2c, 0x20, 0xfd, 0x00, 0x4d, 0x5f, 0x03, + 0x04, 0xfd, 0x40, 0x4b, 0xb9, 0x16, 0xac, 0xfc, 0x00, 0x4c, 0x60, 0x03, + 0x1b, 0xfc, 0x40, 0x4b, 0xb9, 0x16, 0xab, 0xfc, 0x00, 0x4c, 0x60, 0x03, + 0x19, 0xfc, 0x40, 0x4a, 0xf5, 0x2c, 0x1f, 0xfd, 0x00, 0x4d, 0x5f, 0x03, + 0x03, 0xfd, 0x40, 0x07, 0x45, 0x14, 0x06, 0x54, 0x8c, 0x45, 0xce, 0xfd, + 0x40, 0x05, 0x67, 0x00, 0x99, 0x01, 0x05, 0x73, 0x5a, 0x88, 0x01, 0x06, + 0x3e, 0x38, 0x78, 0x06, 0x72, 0x5b, 0x68, 0x04, 0x4c, 0x14, 0x4a, 0x05, + 0x1c, 0x21, 0x11, 0x04, 0x4d, 0x00, 0x01, 0xff, 0x4a, 0xf5, 0x2c, 0x84, + 0xfc, 0x00, 0x4d, 0x5f, 0x03, 0x3e, 0xfc, 0x40, 0x4a, 0xf5, 0x2c, 0x82, + 0xfc, 0x00, 0xa9, 0x21, 0x4b, 0xf6, 0x6d, 0xec, 0xfc, 0x00, 0x05, 0x51, + 0x00, 0x01, 0xff, 0x05, 0x1c, 0x21, 0x06, 0x4e, 0xee, 0x4e, 0xb7, 0xfd, + 0x40, 0x4a, 0xf5, 0x2c, 0xbb, 0xfd, 0x00, 0x4c, 0xb8, 0x16, 0xc3, 0xfd, + 0x40, 0x4b, 0xb9, 0x16, 0xc8, 0xfc, 0x00, 0x4c, 0x60, 0x03, 0x3c, 0xfc, + 0x40, 0x4a, 0xf5, 0x2c, 0x81, 0xfc, 0x00, 0xa9, 0x06, 0x4b, 0xf6, 0x6d, + 0xeb, 0xfc, 0x40, 0x4b, 0xb9, 0x16, 0xc7, 0xfc, 0x00, 0x4c, 0x60, 0x03, + 0x3b, 0xfc, 0x40, 0x4b, 0xb9, 0x16, 0xc6, 0xfc, 0x00, 0x4c, 0x60, 0x03, + 0x3a, 0xfc, 0x40, 0x4b, 0xb9, 0x16, 0xc4, 0xfc, 0x00, 0x4c, 0x60, 0x03, + 0x38, 0xfc, 0x40, 0x4b, 0xb9, 0x16, 0xc5, 0xfc, 0x00, 0x4c, 0x60, 0x03, + 0x39, 0xfc, 0x40, 0x4a, 0xf5, 0x2c, 0x80, 0xfc, 0x00, 0x4d, 0x5f, 0x03, + 0x37, 0xfc, 0x00, 0x08, 0x6c, 0x00, 0x01, 0xff, 0x4a, 0xf5, 0x2c, 0x83, + 0xfc, 0x00, 0x4d, 0x5f, 0x03, 0x3d, 0xfc, 0x40, 0x04, 0xea, 0x20, 0x7c, + 0x09, 0x1d, 0x21, 0x01, 0xff, 0x0d, 0x67, 0x00, 0x67, 0x04, 0x26, 0x21, + 0x44, 0x05, 0x1c, 0x21, 0x11, 0x04, 0x4d, 0x00, 0x01, 0xff, 0x4a, 0xf5, + 0x2c, 0x1e, 0xfd, 0x00, 0x4d, 0x5f, 0x03, 0x02, 0xfd, 0x40, 0xa9, 0x21, + 0x05, 0x51, 0x00, 0x01, 0xff, 0x57, 0xe8, 0x2c, 0xa7, 0xfd, 0x00, 0x04, + 0x26, 0x21, 0x06, 0x4e, 0xee, 0x4e, 0xa5, 0xfd, 0x40, 0x4a, 0xf5, 0x2c, + 0x58, 0xfd, 0x00, 0x4c, 0xb8, 0x16, 0x59, 0xfd, 0x40, 0x4b, 0xb9, 0x16, + 0xa8, 0xfc, 0x00, 0x4c, 0x60, 0x03, 0x16, 0xfc, 0x40, 0xa9, 0x11, 0x05, + 0x51, 0x00, 0x01, 0xff, 0x57, 0xe8, 0x2c, 0xa6, 0xfd, 0x00, 0x4e, 0xee, + 0x4e, 0xbe, 0xfd, 0x40, 0x4b, 0xb9, 0x16, 0xa7, 0xfc, 0x00, 0x4c, 0x60, + 0x03, 0x15, 0xfc, 0x40, 0x4a, 0xf5, 0x2c, 0x1d, 0xfd, 0x00, 0x4d, 0x5f, + 0x03, 0x01, 0xfd, 0x40, 0x48, 0xa8, 0xc2, 0xc3, 0xfb, 0x00, 0x4a, 0x31, + 0xac, 0xfb, 0xfd, 0x40, 0xa1, 0x4a, 0x08, 0x4e, 0x00, 0x01, 0xff, 0x5a, + 0xe0, 0x1e, 0x53, 0xfc, 0x00, 0x06, 0x3e, 0x38, 0x2f, 0x05, 0x1c, 0x21, + 0x0c, 0x5d, 0xa7, 0x16, 0xd9, 0xfc, 0x00, 0x51, 0xd4, 0x5f, 0x54, 0xfc, + 0x40, 0xa9, 0x11, 0x05, 0x51, 0x00, 0x01, 0xff, 0x51, 0x3e, 0x38, 0x93, + 0xfd, 0x00, 0x51, 0x3e, 0x5c, 0x94, 0xfd, 0x40, 0x4b, 0xb9, 0x16, 0xd8, + 0xfc, 0x00, 0x4c, 0x60, 0x03, 0x52, 0xfc, 0x40, 0x4b, 0xb9, 0x16, 0xd7, + 0xfc, 0x00, 0x4c, 0x60, 0x03, 0x51, 0xfc, 0x40, 0x06, 0xc6, 0xdb, 0x61, + 0x07, 0x4f, 0x00, 0x01, 0xff, 0x0d, 0x67, 0x00, 0x4c, 0x05, 0x3e, 0x38, + 0x34, 0x05, 0x1c, 0x21, 0x11, 0x04, 0x4d, 0x00, 0x01, 0xff, 0x4a, 0xf5, + 0x2c, 0x1c, 0xfd, 0x00, 0x4d, 0x5f, 0x03, 0x00, 0xfd, 0x40, 0xa9, 0x11, + 0x05, 0x51, 0x00, 0x01, 0xff, 0x57, 0xe8, 0x2c, 0x5b, 0xfd, 0x00, 0x4e, + 0xee, 0x4e, 0x5a, 0xfd, 0x40, 0x4b, 0xb9, 0x16, 0xaa, 0xfc, 0x00, 0x4c, + 0x60, 0x03, 0x18, 0xfc, 0x40, 0xa9, 0x06, 0x53, 0xe9, 0x4e, 0xbf, 0xfd, + 0x40, 0x4b, 0xb9, 0x16, 0xa9, 0xfc, 0x00, 0x4c, 0x60, 0x03, 0x17, 0xfc, + 0x40, 0x4a, 0xf5, 0x2c, 0x1b, 0xfd, 0x00, 0x4d, 0x5f, 0x03, 0xff, 0xfc, + 0x40, 0x47, 0xbd, 0x2d, 0xcc, 0xfb, 0x80, 0x0f, 0xad, 0x01, 0xff, 0x50, + 0xfb, 0x4f, 0xce, 0xfb, 0x00, 0x52, 0xf9, 0x4f, 0xcf, 0xfb, 0x40, 0x49, + 0x02, 0x50, 0xcd, 0xfb, 0x40, 0x0d, 0x67, 0x00, 0x4a, 0x06, 0x3e, 0x38, + 0x3a, 0x05, 0x1c, 0x21, 0x11, 0x04, 0x4d, 0x00, 0x01, 0xff, 0x4a, 0xf5, + 0x2c, 0x16, 0xfd, 0x00, 0x4d, 0x5f, 0x03, 0xfa, 0xfc, 0x40, 0xa9, 0x17, + 0x05, 0x51, 0x00, 0x01, 0xff, 0x57, 0xe8, 0x2c, 0x7b, 0xfd, 0x00, 0x4f, + 0x3b, 0x70, 0x79, 0xfd, 0x00, 0x4e, 0xee, 0x4e, 0x7a, 0xfd, 0x40, 0x4b, + 0xb9, 0x16, 0xbd, 0xfc, 0x00, 0x4c, 0x60, 0x03, 0x2c, 0xfc, 0x40, 0x4b, + 0xb9, 0x16, 0xbc, 0xfc, 0x00, 0x4c, 0x60, 0x03, 0x2b, 0xfc, 0x40, 0x4a, + 0xf5, 0x2c, 0x15, 0xfd, 0x00, 0x4d, 0x5f, 0x03, 0xf9, 0xfc, 0x40, 0x0d, + 0x67, 0x00, 0x6c, 0x05, 0x73, 0x5a, 0x5c, 0x06, 0x3e, 0x38, 0x4c, 0x05, + 0x72, 0x5b, 0x29, 0x05, 0x1c, 0x21, 0x11, 0x04, 0x4d, 0x00, 0x01, 0xff, + 0x4a, 0xf5, 0x2c, 0x7d, 0xfc, 0x00, 0x4d, 0x5f, 0x03, 0x32, 0xfc, 0x40, + 0xa9, 0x06, 0x53, 0xe9, 0x4e, 0xc1, 0xfd, 0x40, 0x4b, 0xb9, 0x16, 0xc1, + 0xfc, 0x00, 0x4c, 0x60, 0x03, 0x30, 0xfc, 0x40, 0xa9, 0x11, 0x0a, 0x05, + 0x7f, 0x01, 0xff, 0x4a, 0xf5, 0x2c, 0x7c, 0xfd, 0x00, 0x4c, 0xb8, 0x16, + 0x7d, 0xfd, 0x40, 0x4b, 0xb9, 0x16, 0xc0, 0xfc, 0x00, 0x4c, 0x60, 0x03, + 0x2f, 0xfc, 0x40, 0x4b, 0xb9, 0x16, 0xbe, 0xfc, 0x00, 0x4c, 0x60, 0x03, + 0x2d, 0xfc, 0x40, 0x4b, 0xb9, 0x16, 0xbf, 0xfc, 0x00, 0x4c, 0x60, 0x03, + 0x2e, 0xfc, 0x40, 0x4a, 0xf5, 0x2c, 0x7c, 0xfc, 0x00, 0x4d, 0x5f, 0x03, + 0x31, 0xfc, 0x40, 0x51, 0x0f, 0x58, 0xc4, 0xfb, 0x00, 0x07, 0xa2, 0x0a, + 0x01, 0xff, 0x0d, 0x67, 0x00, 0x87, 0x01, 0x04, 0x26, 0x21, 0x64, 0x06, + 0x3e, 0x38, 0x54, 0x05, 0x72, 0x5b, 0x31, 0x06, 0x3e, 0x5c, 0x21, 0x04, + 0x9d, 0x7b, 0x11, 0x04, 0x4d, 0x00, 0x01, 0xff, 0x4a, 0xf5, 0x2c, 0x24, + 0xfd, 0x00, 0x4d, 0x5f, 0x03, 0x08, 0xfd, 0x40, 0x4a, 0xf5, 0x2c, 0x2c, + 0xfd, 0x00, 0x4d, 0x5f, 0x03, 0x10, 0xfd, 0x40, 0x4b, 0xb9, 0x16, 0xb7, + 0xfc, 0x00, 0x4c, 0x60, 0x03, 0x25, 0xfc, 0x40, 0xa9, 0x11, 0x0a, 0x05, + 0x7f, 0x01, 0xff, 0x4a, 0xf5, 0x2c, 0x6f, 0xfd, 0x00, 0x4c, 0xb8, 0x16, + 0x70, 0xfd, 0x40, 0x4b, 0xb9, 0x16, 0xb6, 0xfc, 0x00, 0x4c, 0x60, 0x03, + 0x24, 0xfc, 0x40, 0x4b, 0xb9, 0x16, 0xb4, 0xfc, 0x00, 0x4c, 0x60, 0x03, + 0x22, 0xfc, 0x40, 0xa9, 0x11, 0x05, 0x51, 0x00, 0x01, 0xff, 0x57, 0xe8, + 0x2c, 0x6e, 0xfd, 0x00, 0x4e, 0xee, 0x4e, 0xab, 0xfd, 0x40, 0x4b, 0xb9, + 0x16, 0xb5, 0xfc, 0x00, 0x4c, 0x60, 0x03, 0x23, 0xfc, 0x40, 0x4a, 0xf5, + 0x2c, 0x23, 0xfd, 0x00, 0x4d, 0x5f, 0x03, 0x07, 0xfd, 0x40, 0x08, 0x4e, + 0x00, 0x06, 0x5c, 0x32, 0x18, 0xfd, 0xfd, 0x40, 0x0d, 0x67, 0x00, 0x93, + 0x01, 0xa8, 0x68, 0x06, 0x3e, 0x38, 0x58, 0x05, 0x72, 0x5b, 0x40, 0x05, + 0x1c, 0x21, 0x22, 0x4f, 0xc2, 0x70, 0x6d, 0xfc, 0x00, 0x4e, 0x9d, 0x7b, + 0x6a, 0xfc, 0x00, 0x04, 0x4d, 0x00, 0x06, 0x4f, 0x27, 0x75, 0x6b, 0xfc, + 0x40, 0x4a, 0xf5, 0x2c, 0x6f, 0xfc, 0x00, 0x4d, 0x5f, 0x03, 0x0a, 0xfc, + 0x40, 0x4a, 0xf5, 0x2c, 0x6c, 0xfc, 0x00, 0xa9, 0x06, 0x4b, 0xf6, 0x6d, + 0xe1, 0xfc, 0x40, 0x4b, 0xb9, 0x16, 0x9f, 0xfc, 0x00, 0x4c, 0x60, 0x03, + 0x08, 0xfc, 0x40, 0xa9, 0x06, 0x53, 0xe9, 0x4e, 0x9e, 0xfd, 0x40, 0x4b, + 0xb9, 0x16, 0x9e, 0xfc, 0x00, 0x4c, 0x60, 0x03, 0x07, 0xfc, 0x40, 0x4b, + 0xb9, 0x16, 0x9c, 0xfc, 0x00, 0x4c, 0x60, 0x03, 0x05, 0xfc, 0x40, 0x03, + 0x18, 0x0a, 0x11, 0x03, 0x4e, 0x00, 0x01, 0xff, 0x4c, 0xb8, 0x16, 0xa0, + 0xfc, 0x00, 0x4b, 0xf6, 0x6d, 0xe2, 0xfc, 0x40, 0xa9, 0x06, 0x53, 0xe9, + 0x4e, 0xc2, 0xfd, 0x40, 0x4b, 0xb9, 0x16, 0x9d, 0xfc, 0x00, 0x4c, 0x60, + 0x03, 0x06, 0xfc, 0x40, 0x4a, 0xf5, 0x2c, 0x6e, 0xfc, 0x00, 0x4d, 0x5f, + 0x03, 0x09, 0xfc, 0x40, 0x08, 0x68, 0x9c, 0x9e, 0x01, 0x0d, 0xc0, 0x84, + 0x8d, 0x01, 0x52, 0x35, 0x53, 0xf3, 0xfd, 0x00, 0xac, 0x06, 0x4b, 0x8c, + 0xa5, 0xff, 0xfd, 0x40, 0x03, 0xf4, 0x20, 0x2b, 0x03, 0x69, 0x00, 0x06, + 0x51, 0x94, 0x5b, 0xf2, 0xfd, 0x40, 0x1e, 0xad, 0x13, 0x11, 0x0e, 0xbb, + 0x7e, 0x01, 0xff, 0x4a, 0xf5, 0x2c, 0x3c, 0xfd, 0x00, 0x4d, 0x5f, 0x03, + 0x3d, 0xfd, 0x40, 0x4a, 0xf5, 0x2c, 0x90, 0xfc, 0x00, 0x4d, 0x5f, 0x03, + 0x5d, 0xfc, 0x40, 0x0b, 0xa8, 0x98, 0x42, 0x4f, 0x6c, 0x6c, 0xf7, 0xfd, + 0x00, 0xa9, 0x01, 0xff, 0x02, 0x19, 0x00, 0x20, 0xad, 0x01, 0xff, 0x09, + 0xaa, 0x98, 0x0f, 0x0b, 0xa8, 0x98, 0x01, 0xff, 0xed, 0x49, 0xfd, 0x00, + 0x4d, 0x5f, 0x89, 0xd3, 0x0e, 0x41, 0xed, 0x48, 0xfd, 0x00, 0x4d, 0x5f, + 0x89, 0xd2, 0x0e, 0x41, 0x48, 0x18, 0xca, 0xd2, 0xfb, 0x00, 0x07, 0x64, + 0x89, 0x01, 0xff, 0xed, 0x47, 0xfd, 0x00, 0x4d, 0x5f, 0x89, 0x4a, 0xfd, + 0x40, 0xed, 0x4d, 0xfd, 0x00, 0x4d, 0x5f, 0x89, 0xd1, 0x0e, 0x41, 0x54, + 0x52, 0x19, 0xd1, 0xfb, 0x00, 0x5c, 0x4a, 0x19, 0xcd, 0xfd, 0x40, 0x0d, + 0x67, 0x00, 0x67, 0x05, 0x3e, 0x38, 0x44, 0x05, 0x1c, 0x21, 0x11, 0x04, + 0x4d, 0x00, 0x01, 0xff, 0x4a, 0xf5, 0x2c, 0x14, 0xfd, 0x00, 0x4d, 0x5f, + 0x03, 0xf8, 0xfc, 0x40, 0xa9, 0x21, 0x05, 0x51, 0x00, 0x01, 0xff, 0x57, + 0xe8, 0x2c, 0x78, 0xfd, 0x00, 0x05, 0x1c, 0x21, 0x06, 0x4e, 0xee, 0x4e, + 0xb6, 0xfd, 0x40, 0x4a, 0xf5, 0x2c, 0x76, 0xfd, 0x00, 0x4c, 0xb8, 0x16, + 0x77, 0xfd, 0x40, 0x4b, 0xb9, 0x16, 0xbb, 0xfc, 0x00, 0x4c, 0x60, 0x03, + 0x2a, 0xfc, 0x40, 0xa9, 0x11, 0x0a, 0x05, 0x7f, 0x01, 0xff, 0x4a, 0xf5, + 0x2c, 0x75, 0xfd, 0x00, 0x4c, 0xb8, 0x16, 0xc4, 0xfd, 0x40, 0x4b, 0xb9, + 0x16, 0xba, 0xfc, 0x00, 0x4c, 0x60, 0x03, 0x29, 0xfc, 0x40, 0x4a, 0xf5, + 0x2c, 0x13, 0xfd, 0x00, 0x4d, 0x5f, 0x03, 0xf7, 0xfc, 0x40, 0x0d, 0x20, + 0x83, 0xd3, 0x1e, 0x05, 0xee, 0x05, 0x01, 0xff, 0xa1, 0x8d, 0x1b, 0x02, + 0xb7, 0x05, 0xd2, 0x19, 0xa4, 0xb1, 0x17, 0xe5, 0xd0, 0x06, 0x80, 0x8e, + 0x17, 0xa6, 0xdb, 0x15, 0xa7, 0xb5, 0x14, 0xa8, 0xfe, 0x11, 0x02, 0x80, + 0x20, 0xa6, 0x11, 0xab, 0x8f, 0x0f, 0xac, 0xa8, 0x0e, 0xad, 0xe0, 0x0d, + 0xae, 0xfe, 0x0b, 0x42, 0x60, 0x51, 0xc6, 0x06, 0x80, 0xe7, 0x0b, 0x43, + 0x72, 0xdc, 0x7e, 0x06, 0x80, 0x90, 0x0b, 0x43, 0x43, 0x14, 0x42, 0x06, + 0x80, 0xc9, 0x0a, 0xb2, 0x8c, 0x09, 0xb3, 0xb0, 0x07, 0xb4, 0xe1, 0x03, + 0xf5, 0xc7, 0x06, 0x80, 0xaf, 0x03, 0x42, 0x32, 0x00, 0xcb, 0x06, 0x80, + 0xf7, 0x02, 0x43, 0x8a, 0x8a, 0x48, 0x06, 0x80, 0x99, 0x02, 0xb9, 0x43, + 0x02, 0x59, 0x00, 0x01, 0xff, 0xe8, 0x38, 0x06, 0x80, 0x1c, 0x42, 0x9e, + 0x01, 0x32, 0x06, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x4a, 0xf5, 0x2c, 0xb0, + 0xfe, 0x00, 0x4d, 0x5f, 0x03, 0xaf, 0xfe, 0x00, 0x55, 0x0b, 0x3f, 0xb2, + 0x08, 0x40, 0x80, 0x01, 0xff, 0x4a, 0xf5, 0x2c, 0xc6, 0xfe, 0x00, 0xa9, + 0x06, 0x4b, 0xf6, 0x6d, 0xc8, 0xfe, 0x40, 0x4b, 0xb9, 0x16, 0xc7, 0xfe, + 0x00, 0x4c, 0x60, 0x03, 0xc5, 0xfe, 0x40, 0x42, 0x4e, 0x00, 0x4a, 0x06, + 0x80, 0x14, 0xf5, 0xc8, 0x06, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x4a, 0xf5, + 0x2c, 0xdc, 0xfb, 0x00, 0x4d, 0x5f, 0x03, 0xdb, 0xfb, 0x40, 0x80, 0x01, + 0xff, 0x46, 0xd6, 0x19, 0xd2, 0x06, 0x80, 0x75, 0x4a, 0xf5, 0x2c, 0xf2, + 0xfe, 0x00, 0xa9, 0x61, 0x4b, 0xf6, 0x6d, 0xf4, 0xfe, 0x00, 0x05, 0x51, + 0x00, 0x01, 0xff, 0x4f, 0x2f, 0x6d, 0xc7, 0x0e, 0x01, 0x4b, 0x56, 0x00, + 0x26, 0x06, 0x80, 0x2c, 0x47, 0xd2, 0x34, 0xce, 0x06, 0x00, 0xb4, 0x01, + 0xff, 0x43, 0x90, 0x17, 0xcd, 0x06, 0x00, 0x4f, 0x3d, 0x6e, 0xd1, 0x06, + 0x00, 0x12, 0x28, 0x1e, 0x01, 0xff, 0x49, 0x3a, 0x1e, 0xa9, 0x08, 0x00, + 0x4b, 0x56, 0x00, 0xa8, 0x08, 0x00, 0x50, 0x56, 0x67, 0xba, 0x08, 0x40, + 0x80, 0x01, 0xff, 0x4a, 0xf5, 0x2c, 0x8a, 0xfe, 0x00, 0xa9, 0x06, 0x4b, + 0xf6, 0x6d, 0x8c, 0xfe, 0x40, 0x4b, 0xb9, 0x16, 0x8b, 0xfe, 0x00, 0x4c, + 0x60, 0x03, 0x89, 0xfe, 0x40, 0x4b, 0xb9, 0x16, 0xf3, 0xfe, 0x00, 0x4c, + 0x60, 0x03, 0xf1, 0xfe, 0x40, 0x80, 0x01, 0xff, 0x4a, 0xf5, 0x2c, 0xaf, + 0xfb, 0x00, 0x4d, 0x5f, 0x03, 0xae, 0xfb, 0x00, 0x05, 0x51, 0x00, 0x01, + 0xff, 0x1d, 0xdc, 0x15, 0x16, 0x4b, 0x56, 0x00, 0xd3, 0x06, 0xc0, 0x00, + 0x80, 0x01, 0xff, 0x4a, 0xf5, 0x2c, 0xb1, 0xfb, 0x00, 0x4d, 0x5f, 0x03, + 0xb0, 0xfb, 0x40, 0x4a, 0x4b, 0xab, 0x7b, 0x07, 0x00, 0x48, 0x80, 0xcc, + 0x7a, 0x07, 0x40, 0x80, 0x01, 0xff, 0x4a, 0xf5, 0x2c, 0xee, 0xfe, 0x00, + 0x4d, 0x5f, 0x03, 0xed, 0xfe, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x04, + 0x03, 0x0c, 0x32, 0x1d, 0xdc, 0x15, 0x22, 0x4b, 0x56, 0x00, 0x24, 0x06, + 0x80, 0x0c, 0x44, 0x22, 0x08, 0xc4, 0x06, 0x00, 0x4e, 0xf2, 0x0e, 0xca, + 0x06, 0x40, 0x80, 0x01, 0xff, 0x4a, 0xf5, 0x2c, 0x86, 0xfe, 0x00, 0x4d, + 0x5f, 0x03, 0x85, 0xfe, 0x40, 0x4a, 0x4b, 0xab, 0x79, 0x07, 0x00, 0x48, + 0x80, 0xcc, 0x78, 0x07, 0x40, 0x45, 0x5c, 0x00, 0xcf, 0x06, 0x00, 0x46, + 0xc7, 0x1e, 0xab, 0x08, 0x40, 0x80, 0x22, 0xe8, 0xa4, 0x06, 0xc0, 0x00, + 0x80, 0x01, 0xff, 0x4a, 0xf5, 0x2c, 0x6b, 0xfb, 0x00, 0xa9, 0x06, 0x4b, + 0xf6, 0x6d, 0x6d, 0xfb, 0x40, 0x4b, 0xb9, 0x16, 0x6c, 0xfb, 0x00, 0x4c, + 0x60, 0x03, 0x6a, 0xfb, 0x40, 0x4a, 0xf5, 0x2c, 0xdf, 0xfb, 0x00, 0x4d, + 0x5f, 0x03, 0xde, 0xfb, 0x40, 0x80, 0x11, 0x22, 0x56, 0x0c, 0x01, 0xff, + 0x4c, 0xb8, 0x16, 0xe8, 0xfb, 0x00, 0x4b, 0xf6, 0x6d, 0xe9, 0xfb, 0x40, + 0x4a, 0xf5, 0x2c, 0xd8, 0xfb, 0x00, 0x4d, 0x5f, 0x03, 0xd7, 0xfb, 0x00, + 0x50, 0x51, 0x00, 0x77, 0x06, 0xc0, 0x00, 0x4e, 0x5e, 0x03, 0xdd, 0xfb, + 0x40, 0x42, 0x18, 0x0a, 0x37, 0x06, 0x80, 0xf8, 0x02, 0x44, 0x92, 0x83, + 0x86, 0x06, 0x80, 0x9f, 0x02, 0x42, 0x4e, 0x00, 0x2a, 0x06, 0x80, 0x9a, + 0x01, 0xa8, 0x4d, 0x43, 0xb2, 0x0f, 0x79, 0x06, 0xc0, 0x00, 0x80, 0x24, + 0x42, 0x4e, 0x00, 0x7a, 0x06, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x4a, 0xf5, + 0x2c, 0x5f, 0xfb, 0x00, 0xa9, 0x06, 0x4b, 0xf6, 0x6d, 0x61, 0xfb, 0x40, + 0x4b, 0xb9, 0x16, 0x60, 0xfb, 0x00, 0x4c, 0x60, 0x03, 0x5e, 0xfb, 0x40, + 0x4a, 0xf5, 0x2c, 0x67, 0xfb, 0x00, 0xa9, 0x0c, 0x4b, 0xf6, 0x6d, 0x69, + 0xfb, 0x00, 0x4c, 0xff, 0x96, 0xc0, 0x08, 0x40, 0x4b, 0xb9, 0x16, 0x68, + 0xfb, 0x00, 0x4c, 0x60, 0x03, 0x66, 0xfb, 0x40, 0x42, 0x13, 0x00, 0x30, + 0x06, 0x80, 0x35, 0x42, 0x4e, 0x00, 0x2b, 0x06, 0x80, 0x11, 0x03, 0xe1, + 0x05, 0x01, 0xff, 0x44, 0xf9, 0x45, 0xc6, 0x0e, 0x01, 0x43, 0x4d, 0x00, + 0x86, 0x08, 0x40, 0x80, 0x01, 0xff, 0x4a, 0xf5, 0x2c, 0x9a, 0xfe, 0x00, + 0xa9, 0x06, 0x4b, 0xf6, 0x6d, 0x9c, 0xfe, 0x40, 0x4b, 0xb9, 0x16, 0x9b, + 0xfe, 0x00, 0x4c, 0x60, 0x03, 0x99, 0xfe, 0x40, 0x80, 0x01, 0xff, 0x4a, + 0xf5, 0x2c, 0xac, 0xfe, 0x00, 0x4d, 0x5f, 0x03, 0xab, 0xfe, 0x40, 0x80, + 0x24, 0x42, 0x4e, 0x00, 0x7f, 0x06, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x4a, + 0xf5, 0x2c, 0x63, 0xfb, 0x00, 0xa9, 0x06, 0x4b, 0xf6, 0x6d, 0x65, 0xfb, + 0x40, 0x4b, 0xb9, 0x16, 0x64, 0xfb, 0x00, 0x4c, 0x60, 0x03, 0x62, 0xfb, + 0x40, 0x4a, 0xf5, 0x2c, 0x96, 0xfe, 0x00, 0xa9, 0x43, 0xad, 0x1f, 0x05, + 0x51, 0x00, 0x01, 0xff, 0x44, 0x22, 0x08, 0x7c, 0x06, 0x00, 0x06, 0x5d, + 0x07, 0x06, 0x5a, 0x3a, 0x22, 0x7d, 0x06, 0x40, 0x49, 0xba, 0xbf, 0xb8, + 0x08, 0x00, 0xf6, 0xbf, 0x08, 0x40, 0x46, 0xe0, 0xd9, 0x29, 0x06, 0x80, + 0x06, 0x4a, 0xf7, 0x6d, 0x98, 0xfe, 0x40, 0x80, 0x01, 0xff, 0x4a, 0xf5, + 0x2c, 0x94, 0xfe, 0x00, 0x44, 0x09, 0xf0, 0xc3, 0x06, 0x00, 0x4d, 0x5f, + 0x03, 0x93, 0xfe, 0x40, 0x4b, 0xb9, 0x16, 0x97, 0xfe, 0x00, 0x4c, 0x60, + 0x03, 0x95, 0xfe, 0x40, 0x80, 0x24, 0x42, 0x4e, 0x00, 0x87, 0x06, 0xc0, + 0x00, 0x80, 0x01, 0xff, 0x4a, 0xf5, 0x2c, 0x7f, 0xfb, 0x00, 0xa9, 0x06, + 0x4b, 0xf6, 0x6d, 0x81, 0xfb, 0x40, 0x4b, 0xb9, 0x16, 0x80, 0xfb, 0x00, + 0x4c, 0x60, 0x03, 0x7e, 0xfb, 0x40, 0x4a, 0xf5, 0x2c, 0x7b, 0xfb, 0x00, + 0xa9, 0x17, 0x4b, 0xf6, 0x6d, 0x7d, 0xfb, 0x00, 0x05, 0x51, 0x00, 0x01, + 0xff, 0x49, 0x3a, 0x1e, 0xbf, 0x06, 0x00, 0x47, 0xd2, 0x34, 0xc1, 0x08, + 0x40, 0x4b, 0xb9, 0x16, 0x7c, 0xfb, 0x00, 0x4c, 0x60, 0x03, 0x7a, 0xfb, + 0x40, 0x80, 0x01, 0xff, 0x4a, 0xf5, 0x2c, 0xc2, 0xfe, 0x00, 0xa9, 0x35, + 0x4b, 0xf6, 0x6d, 0xc4, 0xfe, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x49, + 0x9f, 0x12, 0x8b, 0x08, 0x00, 0xb4, 0x01, 0xff, 0x0a, 0xae, 0x12, 0x11, + 0x08, 0xf2, 0x0b, 0x01, 0xff, 0x45, 0x5c, 0x00, 0xa3, 0x08, 0x00, 0x50, + 0x4e, 0x2c, 0xc3, 0x0e, 0x41, 0x45, 0x5c, 0x00, 0x9f, 0x06, 0x00, 0x45, + 0x20, 0x07, 0x8c, 0x08, 0x40, 0x4b, 0xb9, 0x16, 0xc3, 0xfe, 0x00, 0x4c, + 0x60, 0x03, 0xc1, 0xfe, 0x40, 0x42, 0xe8, 0x01, 0x35, 0x06, 0x80, 0x99, + 0x01, 0x43, 0xc4, 0x09, 0x33, 0x06, 0x80, 0x3c, 0x44, 0x4c, 0xdb, 0x34, + 0x06, 0x80, 0x12, 0x4b, 0xb3, 0xa3, 0xb1, 0x08, 0x00, 0x4f, 0x70, 0x06, + 0x70, 0x06, 0x00, 0x48, 0x68, 0xcc, 0xaa, 0x06, 0x40, 0x80, 0x01, 0xff, + 0x4a, 0xf5, 0x2c, 0xb6, 0xfe, 0x00, 0xa9, 0x0c, 0x4b, 0xf6, 0x6d, 0xb8, + 0xfe, 0x00, 0x4e, 0xad, 0x7e, 0xfa, 0x06, 0x40, 0x4b, 0xb9, 0x16, 0xb7, + 0xfe, 0x00, 0x4c, 0x60, 0x03, 0xb5, 0xfe, 0x40, 0x80, 0x01, 0xff, 0x4a, + 0xf5, 0x2c, 0xb2, 0xfe, 0x00, 0xa9, 0x3f, 0x4b, 0xf6, 0x6d, 0xb4, 0xfe, + 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x57, 0x2a, 0x2e, 0x9a, 0x06, 0x00, + 0x66, 0xd9, 0x06, 0x7d, 0x07, 0x00, 0x4f, 0xd1, 0x46, 0x5c, 0x07, 0x00, + 0x4a, 0x10, 0x3f, 0x7e, 0x07, 0x00, 0x64, 0x03, 0x0a, 0x70, 0x07, 0x00, + 0xb4, 0x01, 0xff, 0x4f, 0x3d, 0x6e, 0x9b, 0x06, 0x80, 0x06, 0x58, 0x2e, + 0x2c, 0x6d, 0x07, 0x40, 0x55, 0xa8, 0x12, 0x9c, 0x06, 0x40, 0x4b, 0xb9, + 0x16, 0xb3, 0xfe, 0x00, 0x4c, 0x60, 0x03, 0xb1, 0xfe, 0x40, 0x80, 0x01, + 0xff, 0x4a, 0xf5, 0x2c, 0xba, 0xfe, 0x00, 0xa9, 0x21, 0x4b, 0xf6, 0x6d, + 0xbc, 0xfe, 0x00, 0x06, 0x29, 0x06, 0x01, 0xff, 0x0a, 0xae, 0x12, 0x06, + 0x4d, 0x06, 0x0f, 0x9d, 0x06, 0x40, 0x45, 0x5c, 0x00, 0x9e, 0x06, 0x00, + 0x45, 0x20, 0x07, 0xaf, 0x08, 0x40, 0x4b, 0xb9, 0x16, 0xbb, 0xfe, 0x00, + 0x4c, 0x60, 0x03, 0xb9, 0xfe, 0x40, 0x42, 0x4e, 0x00, 0x31, 0x06, 0x80, + 0x40, 0x44, 0xf9, 0x45, 0xbb, 0x06, 0x80, 0x1c, 0x4b, 0x90, 0xa0, 0xac, + 0x08, 0x00, 0x43, 0x37, 0x52, 0x91, 0x06, 0xc0, 0x00, 0x80, 0x01, 0xff, + 0x4a, 0xf5, 0x2c, 0x8d, 0xfb, 0x00, 0x4d, 0x5f, 0x03, 0x8c, 0xfb, 0x40, + 0x80, 0x01, 0xff, 0x4a, 0xf5, 0x2c, 0xa1, 0xfb, 0x00, 0xa9, 0x06, 0x4b, + 0xf6, 0x6d, 0xa3, 0xfb, 0x40, 0x4b, 0xb9, 0x16, 0xa2, 0xfb, 0x00, 0x4c, + 0x60, 0x03, 0xa0, 0xfb, 0x40, 0x80, 0x01, 0xff, 0x4a, 0xf5, 0x2c, 0xae, + 0xfe, 0x00, 0x4d, 0x5f, 0x03, 0xad, 0xfe, 0x00, 0x05, 0x51, 0x00, 0x01, + 0xff, 0x49, 0x9f, 0x12, 0x94, 0x06, 0x80, 0x52, 0x4f, 0xd1, 0x46, 0x99, + 0x06, 0x00, 0x4b, 0x56, 0x00, 0x6c, 0x07, 0x00, 0x4a, 0x10, 0x3f, 0xef, + 0x06, 0x00, 0x44, 0x42, 0x85, 0xaa, 0x08, 0x00, 0x44, 0x22, 0x08, 0x93, + 0x06, 0x00, 0xb3, 0x11, 0x09, 0xf1, 0x0b, 0x01, 0xff, 0x45, 0x5c, 0x00, + 0x97, 0x06, 0x00, 0x50, 0x36, 0x2c, 0x6b, 0x07, 0x40, 0x05, 0x5e, 0x07, + 0x06, 0x45, 0x53, 0x05, 0x5b, 0x07, 0x40, 0x5e, 0x09, 0x0a, 0x71, 0x07, + 0x00, 0x4a, 0x5c, 0x67, 0xb9, 0x08, 0x00, 0xf6, 0x92, 0x06, 0xc0, 0x00, + 0x46, 0x1f, 0x07, 0x95, 0x06, 0x40, 0x4e, 0x35, 0x1e, 0x96, 0x06, 0x40, + 0x80, 0x01, 0xff, 0x4a, 0xf5, 0x2c, 0xd6, 0xfe, 0x00, 0xa9, 0x28, 0x4b, + 0xf6, 0x6d, 0xd8, 0xfe, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x04, 0x03, + 0x0c, 0x06, 0x50, 0xad, 0x12, 0xa8, 0x06, 0x40, 0x45, 0x5c, 0x00, 0xa7, + 0x06, 0x00, 0x45, 0x20, 0x07, 0xa5, 0x08, 0xc0, 0x00, 0x52, 0x0f, 0x4f, + 0xb5, 0x08, 0x40, 0x4b, 0xb9, 0x16, 0xd7, 0xfe, 0x00, 0x4c, 0x60, 0x03, + 0xd5, 0xfe, 0x40, 0x80, 0x24, 0x42, 0x4e, 0x00, 0xa6, 0x06, 0xc0, 0x00, + 0x80, 0x01, 0xff, 0x4a, 0xf5, 0x2c, 0x6f, 0xfb, 0x00, 0xa9, 0x06, 0x4b, + 0xf6, 0x6d, 0x71, 0xfb, 0x40, 0x4b, 0xb9, 0x16, 0x70, 0xfb, 0x00, 0x4c, + 0x60, 0x03, 0x6e, 0xfb, 0x40, 0x4a, 0xf5, 0x2c, 0x57, 0xfb, 0x00, 0xa9, + 0x15, 0x4b, 0xf6, 0x6d, 0x59, 0xfb, 0x00, 0x0b, 0xff, 0x96, 0x01, 0xff, + 0x4a, 0xcb, 0xad, 0xb7, 0x08, 0x00, 0xf6, 0xbe, 0x08, 0x40, 0x4b, 0xb9, + 0x16, 0x58, 0xfb, 0x00, 0x4c, 0x60, 0x03, 0x56, 0xfb, 0x40, 0x80, 0x01, + 0xff, 0x4a, 0xf5, 0x2c, 0xda, 0xfb, 0x00, 0x4d, 0x5f, 0x03, 0xd9, 0xfb, + 0x40, 0xe7, 0xad, 0x06, 0x80, 0x99, 0x01, 0x43, 0xcd, 0x02, 0x46, 0x06, + 0x80, 0x24, 0x43, 0x4d, 0x00, 0x83, 0x06, 0xc0, 0x00, 0x80, 0x01, 0xff, + 0x4a, 0xf5, 0x2c, 0x77, 0xfb, 0x00, 0xa9, 0x06, 0x4b, 0xf6, 0x6d, 0x79, + 0xfb, 0x40, 0x4b, 0xb9, 0x16, 0x78, 0xfb, 0x00, 0x4c, 0x60, 0x03, 0x76, + 0xfb, 0x40, 0x80, 0x01, 0xff, 0x4a, 0xf5, 0x2c, 0xe6, 0xfe, 0x00, 0x46, + 0xfe, 0x45, 0xba, 0x06, 0x80, 0x4f, 0xa9, 0x41, 0x4b, 0xf6, 0x6d, 0xe8, + 0xfe, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x49, 0x9f, 0x12, 0xb9, 0x06, + 0x00, 0x50, 0xc9, 0x34, 0x89, 0x08, 0x00, 0x44, 0x22, 0x08, 0xbc, 0x06, + 0x80, 0x1d, 0x06, 0x5d, 0x07, 0x0f, 0xb4, 0x01, 0xff, 0x4f, 0xae, 0x12, + 0xbd, 0x06, 0x00, 0x4d, 0x06, 0x0f, 0x67, 0x07, 0x40, 0x43, 0x17, 0x0a, + 0x68, 0x07, 0x00, 0xf6, 0x69, 0x07, 0x40, 0x46, 0x5b, 0x00, 0x8f, 0x08, + 0x40, 0x4b, 0xb9, 0x16, 0xe7, 0xfe, 0x00, 0x4c, 0x60, 0x03, 0xe5, 0xfe, + 0x40, 0x80, 0x01, 0xff, 0x4a, 0xf5, 0x2c, 0x9f, 0xfb, 0x00, 0x4d, 0x5f, + 0x03, 0x9e, 0xfb, 0x40, 0x80, 0x24, 0x43, 0xe7, 0x9c, 0xb1, 0x06, 0xc0, + 0x00, 0x80, 0x01, 0xff, 0x4a, 0xf5, 0x2c, 0x9b, 0xfb, 0x00, 0xa9, 0x06, + 0x4b, 0xf6, 0x6d, 0x9d, 0xfb, 0x40, 0x4b, 0xb9, 0x16, 0x9c, 0xfb, 0x00, + 0x4c, 0x60, 0x03, 0x9a, 0xfb, 0x40, 0x4a, 0xf5, 0x2c, 0xd4, 0xfb, 0x00, + 0xa9, 0x06, 0x4b, 0xf6, 0x6d, 0xd6, 0xfb, 0x40, 0x4b, 0xb9, 0x16, 0xd5, + 0xfb, 0x00, 0x4c, 0x60, 0x03, 0xd3, 0xfb, 0x40, 0x43, 0xba, 0x00, 0x1c, + 0x06, 0x00, 0x43, 0x4b, 0x18, 0x45, 0x06, 0xc0, 0x00, 0x80, 0x01, 0xff, + 0x4a, 0xf5, 0x2c, 0xe2, 0xfe, 0x00, 0xa9, 0x21, 0x4b, 0xf6, 0x6d, 0xe4, + 0xfe, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x04, 0x03, 0x0c, 0x06, 0x50, + 0xad, 0x12, 0xa7, 0x08, 0x40, 0x45, 0x5c, 0x00, 0x65, 0x07, 0x00, 0x45, + 0x20, 0x07, 0x66, 0x07, 0x40, 0x4b, 0xb9, 0x16, 0xe3, 0xfe, 0x00, 0x4c, + 0x60, 0x03, 0xe1, 0xfe, 0x40, 0x42, 0x57, 0x00, 0x44, 0x06, 0x80, 0x06, + 0x47, 0x50, 0xd4, 0xad, 0x08, 0x40, 0x80, 0x01, 0xff, 0x4a, 0xf5, 0x2c, + 0xde, 0xfe, 0x00, 0xa9, 0x40, 0x4b, 0xf6, 0x6d, 0xe0, 0xfe, 0x00, 0x05, + 0x51, 0x00, 0x01, 0xff, 0x43, 0x16, 0x00, 0x6a, 0x07, 0x00, 0x02, 0x3b, + 0x01, 0x1f, 0x06, 0x5d, 0x07, 0x11, 0x0b, 0xad, 0x12, 0x01, 0xff, 0x45, + 0x5c, 0x00, 0xb7, 0x06, 0x00, 0x45, 0x20, 0x07, 0xb8, 0x06, 0x40, 0x57, + 0x44, 0x2d, 0xc7, 0x08, 0x00, 0xf6, 0xb5, 0x06, 0x40, 0x47, 0x3c, 0x1e, + 0xb6, 0x06, 0x00, 0x48, 0x63, 0xa9, 0xa6, 0x08, 0x40, 0x4b, 0xb9, 0x16, + 0xdf, 0xfe, 0x00, 0x4c, 0x60, 0x03, 0xdd, 0xfe, 0x40, 0xa1, 0xb4, 0x01, + 0x44, 0xa1, 0xef, 0xa9, 0x06, 0x80, 0x55, 0x43, 0x26, 0x21, 0x2e, 0x06, + 0x80, 0x31, 0x07, 0x46, 0x00, 0x01, 0xff, 0x42, 0x60, 0x51, 0xc5, 0x06, + 0x80, 0x16, 0x42, 0x2a, 0x4e, 0xc9, 0x06, 0xc0, 0x00, 0x80, 0x01, 0xff, + 0x4a, 0xf5, 0x2c, 0xe3, 0xfb, 0x00, 0x4d, 0x5f, 0x03, 0xe2, 0xfb, 0x40, + 0x80, 0x01, 0xff, 0x4a, 0xf5, 0x2c, 0xe1, 0xfb, 0x00, 0x4d, 0x5f, 0x03, + 0xe0, 0xfb, 0x40, 0x80, 0x01, 0xff, 0x4a, 0xf5, 0x2c, 0xa6, 0xfe, 0x00, + 0xa9, 0x06, 0x4b, 0xf6, 0x6d, 0xa8, 0xfe, 0x40, 0x4b, 0xb9, 0x16, 0xa7, + 0xfe, 0x00, 0x4c, 0x60, 0x03, 0xa5, 0xfe, 0x40, 0x80, 0x01, 0xff, 0x4a, + 0xf5, 0x2c, 0x8f, 0xfb, 0x00, 0xa9, 0x41, 0x4b, 0xf6, 0x6d, 0x91, 0xfb, + 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x49, 0x3a, 0x1e, 0x62, 0x07, 0x00, + 0x47, 0xd2, 0x34, 0xc2, 0x08, 0x00, 0xb4, 0x01, 0xff, 0x0a, 0xae, 0x12, + 0x11, 0x08, 0xf2, 0x0b, 0x01, 0xff, 0x45, 0x5c, 0x00, 0x3b, 0x06, 0x00, + 0x50, 0x4e, 0x2c, 0x8d, 0x08, 0x40, 0x45, 0x5c, 0x00, 0x63, 0x07, 0x00, + 0x45, 0x20, 0x07, 0x3c, 0x06, 0x00, 0x56, 0x3f, 0x36, 0x64, 0x07, 0x40, + 0x4b, 0xb9, 0x16, 0x90, 0xfb, 0x00, 0x4c, 0x60, 0x03, 0x8e, 0xfb, 0x40, + 0xe6, 0x43, 0x06, 0x80, 0x06, 0x4a, 0xff, 0xb0, 0x20, 0x06, 0x40, 0x80, + 0x01, 0xff, 0x4a, 0xf5, 0x2c, 0xda, 0xfe, 0x00, 0xa9, 0x3b, 0x4b, 0xf6, + 0x6d, 0xdc, 0xfe, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x04, 0x03, 0x0c, + 0x20, 0x44, 0x22, 0x08, 0xab, 0x06, 0x00, 0xb4, 0x01, 0xff, 0x4f, 0x3d, + 0x6e, 0xae, 0x06, 0x00, 0x08, 0xf2, 0x0b, 0x01, 0xff, 0x45, 0x5c, 0x00, + 0x7f, 0x07, 0x00, 0x50, 0x4e, 0x2c, 0xc4, 0x0e, 0x41, 0x45, 0x5c, 0x00, + 0xac, 0x06, 0x00, 0x45, 0x20, 0x07, 0xb4, 0x08, 0x40, 0x4b, 0xb9, 0x16, + 0xdb, 0xfe, 0x00, 0x4c, 0x60, 0x03, 0xd9, 0xfe, 0x40, 0x42, 0xb5, 0x05, + 0x2c, 0x06, 0x80, 0x14, 0xe8, 0x98, 0x06, 0xc0, 0x00, 0x80, 0x01, 0xff, + 0x4a, 0xf5, 0x2c, 0x8b, 0xfb, 0x00, 0x4d, 0x5f, 0x03, 0x8a, 0xfb, 0x40, + 0x80, 0x01, 0xff, 0x4a, 0xf5, 0x2c, 0x9e, 0xfe, 0x00, 0xa9, 0x21, 0x4b, + 0xf6, 0x6d, 0xa0, 0xfe, 0x00, 0x06, 0x29, 0x06, 0x01, 0xff, 0x0a, 0xae, + 0x12, 0x06, 0x4d, 0xf3, 0x0e, 0xa2, 0x08, 0x40, 0x45, 0x5c, 0x00, 0xc5, + 0x08, 0x00, 0x45, 0x20, 0x07, 0xc6, 0x08, 0x40, 0x4b, 0xb9, 0x16, 0x9f, + 0xfe, 0x00, 0x4c, 0x60, 0x03, 0x9d, 0xfe, 0x40, 0xa1, 0xaf, 0x01, 0x42, + 0x4e, 0x00, 0x47, 0x06, 0x80, 0x1c, 0x49, 0x11, 0xba, 0x74, 0x06, 0xc0, + 0x00, 0x80, 0x01, 0xff, 0x44, 0x67, 0x00, 0x75, 0x06, 0x00, 0x43, 0x8a, + 0x8a, 0x76, 0x06, 0x00, 0x43, 0x4d, 0x00, 0x78, 0x06, 0x40, 0x80, 0x01, + 0xff, 0x4b, 0x05, 0x9b, 0xbe, 0x06, 0x80, 0x65, 0x4a, 0xf5, 0x2c, 0xea, + 0xfe, 0x00, 0x44, 0x09, 0xf0, 0xc1, 0x06, 0x80, 0x35, 0xa9, 0x27, 0x4b, + 0xf6, 0x6d, 0xec, 0xfe, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x4a, 0x10, + 0x3f, 0xff, 0x06, 0x00, 0x49, 0xa0, 0xc1, 0xc0, 0x06, 0xc0, 0x00, 0x80, + 0x01, 0xff, 0x4a, 0xf5, 0x2c, 0xa5, 0xfb, 0x00, 0x4d, 0x5f, 0x03, 0xa4, + 0xfb, 0x40, 0x4b, 0xb9, 0x16, 0xeb, 0xfe, 0x00, 0x4c, 0x60, 0x03, 0xe9, + 0xfe, 0x40, 0x80, 0x01, 0xff, 0x4a, 0xf5, 0x2c, 0xa7, 0xfb, 0x00, 0xa9, + 0x0c, 0x4b, 0xf6, 0x6d, 0xa9, 0xfb, 0x00, 0x50, 0x51, 0x00, 0xc2, 0x06, + 0x40, 0x4b, 0xb9, 0x16, 0xa8, 0xfb, 0x00, 0x4c, 0x60, 0x03, 0xa6, 0xfb, + 0x40, 0x80, 0x01, 0xff, 0x4a, 0xf5, 0x2c, 0xab, 0xfb, 0x00, 0xa9, 0x06, + 0x4b, 0xf6, 0x6d, 0xad, 0xfb, 0x40, 0x4b, 0xb9, 0x16, 0xac, 0xfb, 0x00, + 0x4c, 0x60, 0x03, 0xaa, 0xfb, 0x40, 0xe8, 0x2d, 0x06, 0x80, 0x0d, 0x43, + 0x58, 0x00, 0x21, 0x06, 0xc0, 0x00, 0x4e, 0x5e, 0x03, 0x80, 0xfe, 0x40, + 0x80, 0x01, 0xff, 0x4a, 0xf5, 0x2c, 0xa2, 0xfe, 0x00, 0xa9, 0x59, 0x4b, + 0xf6, 0x6d, 0xa4, 0xfe, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x66, 0xff, + 0x06, 0x7c, 0x07, 0x00, 0x4b, 0x56, 0x00, 0x81, 0x06, 0x00, 0x56, 0xdf, + 0x34, 0x8a, 0x08, 0x00, 0x18, 0x03, 0x0a, 0x24, 0xb4, 0x01, 0xff, 0x0a, + 0xae, 0x12, 0x11, 0x08, 0xf2, 0x0b, 0x01, 0xff, 0x45, 0x5c, 0x00, 0x57, + 0x07, 0x00, 0x4e, 0x59, 0x7e, 0x82, 0x06, 0x40, 0x45, 0x5c, 0x00, 0x85, + 0x06, 0x00, 0x56, 0x3f, 0x36, 0x58, 0x07, 0x40, 0xa1, 0x06, 0x45, 0x20, + 0x07, 0x6e, 0x07, 0x40, 0x44, 0x5d, 0x00, 0x72, 0x07, 0x00, 0x4b, 0x1c, + 0x0a, 0x6f, 0x07, 0x40, 0x4b, 0xb9, 0x16, 0xa3, 0xfe, 0x00, 0x4c, 0x60, + 0x03, 0xa1, 0xfe, 0x40, 0x42, 0x44, 0x14, 0xaf, 0x06, 0x80, 0x5f, 0x44, + 0x66, 0x9c, 0x3a, 0x06, 0x80, 0x2a, 0x43, 0x12, 0x20, 0xc8, 0x08, 0x00, + 0x43, 0xa0, 0xef, 0xb3, 0x06, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x4a, 0xf5, + 0x2c, 0x97, 0xfb, 0x00, 0xa9, 0x06, 0x4b, 0xf6, 0x6d, 0x99, 0xfb, 0x40, + 0x4b, 0xb9, 0x16, 0x98, 0xfb, 0x00, 0x4c, 0x60, 0x03, 0x96, 0xfb, 0x40, + 0x80, 0x01, 0xff, 0x4a, 0xf5, 0x2c, 0xce, 0xfe, 0x00, 0xa9, 0x17, 0x4b, + 0xf6, 0x6d, 0xd0, 0xfe, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x49, 0x9f, + 0x12, 0xfc, 0x06, 0x00, 0x50, 0xad, 0x12, 0xc3, 0x08, 0x40, 0x4b, 0xb9, + 0x16, 0xcf, 0xfe, 0x00, 0x4c, 0x60, 0x03, 0xcd, 0xfe, 0x40, 0x80, 0x01, + 0xff, 0x4a, 0xf5, 0x2c, 0x93, 0xfb, 0x00, 0xa9, 0x26, 0x4b, 0xf6, 0x6d, + 0x95, 0xfb, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x4f, 0xe2, 0x6e, 0xb0, + 0x08, 0x00, 0x44, 0x22, 0x08, 0xb0, 0x06, 0x00, 0xb4, 0x01, 0xff, 0x4f, + 0xae, 0x12, 0xb4, 0x06, 0x00, 0x4d, 0x06, 0x0f, 0xb2, 0x06, 0x40, 0x4b, + 0xb9, 0x16, 0x94, 0xfb, 0x00, 0x4c, 0x60, 0x03, 0x92, 0xfb, 0x40, 0x48, + 0x90, 0xc3, 0xcc, 0x06, 0x80, 0x59, 0x42, 0x4e, 0x00, 0x41, 0x06, 0xc0, + 0x00, 0x80, 0x01, 0xff, 0x4a, 0xf5, 0x2c, 0xd2, 0xfe, 0x00, 0xa9, 0x3b, + 0x4b, 0xf6, 0x6d, 0xd4, 0xfe, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x04, + 0x03, 0x0c, 0x19, 0xb4, 0x01, 0xff, 0x0a, 0xae, 0x12, 0x06, 0x4d, 0x06, + 0x0f, 0x60, 0x07, 0x40, 0x45, 0x20, 0x07, 0xa5, 0x06, 0x00, 0x56, 0x3f, + 0x36, 0x61, 0x07, 0x40, 0x45, 0x20, 0x07, 0xa3, 0x06, 0x80, 0x06, 0x4b, + 0xb4, 0x9f, 0xa2, 0x06, 0x40, 0x55, 0xa8, 0x12, 0xa4, 0x08, 0x40, 0x4b, + 0xb9, 0x16, 0xd3, 0xfe, 0x00, 0x4c, 0x60, 0x03, 0xd1, 0xfe, 0x40, 0x80, + 0x01, 0xff, 0x4a, 0xf5, 0x2c, 0xfd, 0xfb, 0x00, 0xa9, 0x39, 0x4b, 0xf6, + 0x6d, 0xff, 0xfb, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x1c, 0xd9, 0x06, + 0x15, 0x4a, 0x10, 0x3f, 0x3d, 0x06, 0x00, 0xb4, 0x01, 0xff, 0x4f, 0xae, + 0x12, 0x3f, 0x06, 0x00, 0x4d, 0xf3, 0x0e, 0x3e, 0x06, 0x40, 0x4a, 0x1b, + 0x07, 0x77, 0x07, 0x00, 0xb4, 0x01, 0xff, 0x4a, 0x4b, 0xab, 0x76, 0x07, + 0x00, 0x48, 0x80, 0xcc, 0x75, 0x07, 0x40, 0x4b, 0xb9, 0x16, 0xfe, 0xfb, + 0x00, 0x4c, 0x60, 0x03, 0xfc, 0xfb, 0x40, 0x80, 0x01, 0xff, 0x4a, 0xf5, + 0x2c, 0xe5, 0xfb, 0x00, 0xa9, 0x06, 0x4b, 0xf6, 0x6d, 0xe7, 0xfb, 0x40, + 0x4b, 0xb9, 0x16, 0xe6, 0xfb, 0x00, 0x4c, 0x60, 0x03, 0xe4, 0xfb, 0x40, + 0xa1, 0x7e, 0x02, 0xf0, 0x10, 0x50, 0x07, 0x91, 0x41, 0x3a, 0x42, 0x1f, + 0x01, 0x8e, 0x06, 0x80, 0x24, 0x43, 0x4d, 0x00, 0x84, 0x06, 0xc0, 0x00, + 0x80, 0x01, 0xff, 0x4a, 0xf5, 0x2c, 0x73, 0xfb, 0x00, 0xa9, 0x06, 0x4b, + 0xf6, 0x6d, 0x75, 0xfb, 0x40, 0x4b, 0xb9, 0x16, 0x74, 0xfb, 0x00, 0x4c, + 0x60, 0x03, 0x72, 0xfb, 0x40, 0x80, 0x01, 0xff, 0x4a, 0xf5, 0x2c, 0x87, + 0xfb, 0x00, 0x4d, 0x5f, 0x03, 0x86, 0xfb, 0x40, 0x43, 0xa3, 0x8c, 0x6e, + 0x06, 0x00, 0x43, 0xd6, 0xb8, 0xa1, 0x06, 0x00, 0x43, 0x43, 0x14, 0x6f, + 0x06, 0x40, 0x43, 0x22, 0x00, 0x8d, 0x06, 0x80, 0x14, 0xec, 0x88, 0x06, + 0xc0, 0x00, 0x80, 0x01, 0xff, 0x4a, 0xf5, 0x2c, 0x89, 0xfb, 0x00, 0x4d, + 0x5f, 0x03, 0x88, 0xfb, 0x40, 0x80, 0x01, 0xff, 0x4a, 0xf5, 0x2c, 0x83, + 0xfb, 0x00, 0x4d, 0x5f, 0x03, 0x82, 0xfb, 0x40, 0xe4, 0x36, 0x06, 0x80, + 0x76, 0x43, 0x22, 0x00, 0x8c, 0x06, 0x80, 0x60, 0xec, 0x2f, 0x06, 0xc0, + 0x00, 0x80, 0x01, 0xff, 0x4a, 0xf5, 0x2c, 0xaa, 0xfe, 0x00, 0x4d, 0x5f, + 0x03, 0xa9, 0xfe, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x49, 0x9f, 0x12, + 0x8a, 0x06, 0x80, 0x3a, 0x4f, 0xd1, 0x46, 0x90, 0x06, 0x00, 0x09, 0x5e, + 0x23, 0x26, 0x44, 0x22, 0x08, 0x89, 0x06, 0x00, 0xb4, 0x01, 0xff, 0x0a, + 0xae, 0x12, 0x0d, 0x58, 0x46, 0x2c, 0xc2, 0x0e, 0xc1, 0x00, 0x4e, 0x53, + 0x75, 0x59, 0x07, 0x40, 0x4f, 0x45, 0x22, 0x8f, 0x06, 0x00, 0x45, 0x20, + 0x07, 0xae, 0x08, 0x40, 0x4d, 0xe8, 0x34, 0x5a, 0x07, 0x00, 0xf6, 0xee, + 0x06, 0x40, 0x4e, 0x53, 0x75, 0x8b, 0x06, 0x40, 0x80, 0x01, 0xff, 0x4a, + 0xf5, 0x2c, 0x85, 0xfb, 0x00, 0x4d, 0x5f, 0x03, 0x84, 0xfb, 0x40, 0x80, + 0x01, 0xff, 0x4a, 0xf5, 0x2c, 0xbe, 0xfe, 0x00, 0xa9, 0x0c, 0x4b, 0xf6, + 0x6d, 0xc0, 0xfe, 0x00, 0x4e, 0xad, 0x7e, 0xfb, 0x06, 0x40, 0x4b, 0xb9, + 0x16, 0xbf, 0xfe, 0x00, 0x4c, 0x60, 0x03, 0xbd, 0xfe, 0x40, 0x42, 0x4e, + 0x00, 0x7b, 0x06, 0x80, 0x91, 0x01, 0xe8, 0x28, 0x06, 0xc0, 0x00, 0x80, + 0x24, 0x42, 0x4e, 0x00, 0x80, 0x06, 0xc0, 0x00, 0x80, 0x01, 0xff, 0x4a, + 0xf5, 0x2c, 0x5b, 0xfb, 0x00, 0xa9, 0x06, 0x4b, 0xf6, 0x6d, 0x5d, 0xfb, + 0x40, 0x4b, 0xb9, 0x16, 0x5c, 0xfb, 0x00, 0x4c, 0x60, 0x03, 0x5a, 0xfb, + 0x40, 0x4a, 0xf5, 0x2c, 0x90, 0xfe, 0x00, 0xa9, 0x52, 0x4b, 0xf6, 0x6d, + 0x92, 0xfe, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, 0x5e, 0x9f, 0x12, 0x51, + 0x07, 0x00, 0x4b, 0x56, 0x00, 0xa1, 0x08, 0x00, 0x56, 0xdf, 0x34, 0x55, + 0x07, 0x00, 0x06, 0x5d, 0x07, 0x20, 0xb4, 0x01, 0xff, 0x0a, 0xae, 0x12, + 0x06, 0x5b, 0x28, 0x1e, 0x54, 0x07, 0x40, 0x52, 0x5d, 0x52, 0x50, 0x07, + 0x00, 0x56, 0x3f, 0x36, 0x52, 0x07, 0xc0, 0x00, 0x53, 0x60, 0x26, 0x53, + 0x07, 0x40, 0x4a, 0xcb, 0xad, 0xb6, 0x08, 0x00, 0xf6, 0x56, 0x07, 0xc0, + 0x00, 0x46, 0x1f, 0x07, 0xa0, 0x08, 0x40, 0x4b, 0xb9, 0x16, 0x91, 0xfe, + 0x00, 0x4c, 0x60, 0x03, 0x8f, 0xfe, 0x40, 0x80, 0x01, 0xff, 0x4a, 0xf5, + 0x2c, 0x53, 0xfb, 0x00, 0xa9, 0x06, 0x4b, 0xf6, 0x6d, 0x55, 0xfb, 0x40, + 0x4b, 0xb9, 0x16, 0x54, 0xfb, 0x00, 0x4c, 0x60, 0x03, 0x52, 0xfb, 0x40, + 0xe5, 0xd5, 0x06, 0x00, 0x07, 0x48, 0xc6, 0x9c, 0x03, 0x42, 0x9e, 0x01, + 0x39, 0x06, 0x80, 0xcb, 0x02, 0x43, 0x68, 0x00, 0x27, 0x06, 0xc0, 0x00, + 0x80, 0x01, 0xff, 0x4a, 0xf5, 0x2c, 0x8e, 0xfe, 0x00, 0x4d, 0x5f, 0x03, + 0x8d, 0xfe, 0x00, 0x47, 0x6c, 0x00, 0x49, 0x06, 0x80, 0x9e, 0x02, 0xb7, + 0x01, 0xff, 0x44, 0xf3, 0xa4, 0x71, 0x06, 0x80, 0x84, 0x02, 0x04, 0x52, + 0x00, 0x01, 0xff, 0x09, 0x69, 0xb6, 0x8b, 0x01, 0x49, 0x3a, 0x1e, 0x7a, + 0x08, 0x00, 0x1d, 0xdc, 0x15, 0x75, 0x06, 0x56, 0x00, 0x45, 0x52, 0x59, + 0x53, 0x73, 0x08, 0x00, 0x4b, 0xb3, 0x91, 0x22, 0x06, 0x80, 0x29, 0x53, + 0x9c, 0x4c, 0x72, 0x08, 0x80, 0x11, 0x0b, 0xa6, 0x68, 0x01, 0xff, 0x45, + 0x5c, 0x00, 0x72, 0x06, 0x00, 0x45, 0x20, 0x07, 0x73, 0x06, 0x40, 0x05, + 0x19, 0x00, 0x01, 0xff, 0x49, 0x3a, 0x1e, 0x7c, 0x08, 0x00, 0x49, 0x55, + 0xbb, 0x7f, 0x08, 0x40, 0x80, 0x01, 0xff, 0x4a, 0xf5, 0x2c, 0x82, 0xfe, + 0x00, 0x4d, 0x5f, 0x03, 0x81, 0xfe, 0x40, 0x45, 0x5c, 0x00, 0x23, 0x06, + 0x80, 0x16, 0x45, 0x20, 0x07, 0x25, 0x06, 0xc0, 0x00, 0x80, 0x01, 0xff, + 0x4a, 0xf5, 0x2c, 0x88, 0xfe, 0x00, 0x4d, 0x5f, 0x03, 0x87, 0xfe, 0x40, + 0x80, 0x01, 0xff, 0x4a, 0xf5, 0x2c, 0x84, 0xfe, 0x00, 0x4d, 0x5f, 0x03, + 0x83, 0xfe, 0x40, 0x4a, 0x4b, 0xab, 0x74, 0x07, 0x00, 0x48, 0x80, 0xcc, + 0x73, 0x07, 0x40, 0x52, 0x9b, 0x50, 0x75, 0x08, 0x80, 0x57, 0x45, 0xe7, + 0x73, 0x70, 0x08, 0x00, 0x45, 0xa8, 0x50, 0x74, 0x08, 0x00, 0x05, 0xc3, + 0x00, 0x3b, 0xb2, 0x18, 0x4f, 0xdd, 0x73, 0x71, 0x08, 0xc0, 0x00, 0x05, + 0x19, 0x00, 0x01, 0xff, 0x49, 0x3a, 0x1e, 0x7b, 0x08, 0x00, 0x49, 0x55, + 0xbb, 0x7e, 0x08, 0x40, 0x05, 0xc9, 0x00, 0x11, 0x09, 0x92, 0xb0, 0x01, + 0xff, 0x45, 0x5c, 0x00, 0x76, 0x08, 0x00, 0x45, 0x20, 0x07, 0x79, 0x08, + 0x40, 0x45, 0x56, 0x00, 0x81, 0x08, 0x00, 0x49, 0x5b, 0x58, 0x77, 0x08, + 0x40, 0x45, 0x56, 0x00, 0x82, 0x08, 0x00, 0x49, 0x5b, 0x58, 0x78, 0x08, + 0x40, 0x05, 0x19, 0x00, 0x01, 0xff, 0x49, 0x3a, 0x1e, 0x7d, 0x08, 0x00, + 0x49, 0x55, 0xbb, 0x80, 0x08, 0x40, 0x80, 0x01, 0xff, 0x4a, 0xf5, 0x2c, + 0x51, 0xfb, 0x00, 0x4d, 0x5f, 0x03, 0x50, 0xfb, 0x40, 0x80, 0x01, 0xff, + 0x4a, 0xf5, 0x2c, 0xf0, 0xfe, 0x00, 0x4d, 0x5f, 0x03, 0xef, 0xfe, 0x40, + 0x80, 0x01, 0xff, 0x4a, 0xf5, 0x2c, 0xca, 0xfe, 0x00, 0xa9, 0x32, 0x4b, + 0xf6, 0x6d, 0xcc, 0xfe, 0x00, 0x06, 0x29, 0x06, 0x01, 0xff, 0x0a, 0xae, + 0x12, 0x11, 0x08, 0xf2, 0x0b, 0x01, 0xff, 0x45, 0x5c, 0x00, 0x5d, 0x07, + 0x00, 0x50, 0x36, 0x2c, 0x5f, 0x07, 0x40, 0x45, 0x5c, 0x00, 0xa0, 0x06, + 0x00, 0x45, 0x20, 0x07, 0xb3, 0x08, 0x00, 0x58, 0xae, 0x2a, 0x5e, 0x07, + 0x40, 0x4b, 0xb9, 0x16, 0xcb, 0xfe, 0x00, 0x4c, 0x60, 0x03, 0xc9, 0xfe, + 0x40, 0x43, 0xd6, 0xb8, 0xbb, 0x08, 0x00, 0x44, 0xf9, 0x45, 0xbd, 0x08, + 0x00, 0x43, 0x43, 0x14, 0xbc, 0x08, 0xc0, 0x00, 0x56, 0xa3, 0x32, 0xc4, + 0x08, 0x40, 0x45, 0x5c, 0x00, 0xf7, 0x08, 0x00, 0x45, 0x20, 0x07, 0xf9, + 0x08, 0x40, 0x4c, 0xc5, 0x2c, 0xd1, 0x08, 0x00, 0x0a, 0x91, 0xb0, 0x01, + 0xff, 0x45, 0x5c, 0x00, 0xce, 0x08, 0x00, 0x45, 0x20, 0x07, 0xcf, 0x08, + 0x00, 0x53, 0x88, 0x4a, 0xd2, 0x08, 0x40, 0x80, 0x0d, 0x43, 0xf9, 0x0a, + 0x4d, 0x06, 0xc0, 0x00, 0x4e, 0x5e, 0x03, 0x74, 0xfe, 0x40, 0x4d, 0x5f, + 0x03, 0x7a, 0xfe, 0x00, 0x4b, 0xf6, 0x6d, 0x7b, 0xfe, 0x00, 0x4e, 0xad, + 0x7e, 0xf6, 0x08, 0x40, 0x53, 0x0d, 0x4b, 0x9f, 0x08, 0x00, 0x04, 0x58, + 0x00, 0x01, 0xff, 0x45, 0x5c, 0x00, 0x54, 0x06, 0x00, 0x45, 0x20, 0x07, + 0x55, 0x06, 0x40, 0x44, 0x74, 0x0f, 0x4e, 0x06, 0x80, 0x12, 0x50, 0x46, + 0x64, 0x6d, 0x06, 0x00, 0x4e, 0x5b, 0x7a, 0x02, 0x06, 0x00, 0x48, 0x82, + 0x16, 0xd4, 0x06, 0x40, 0x80, 0x0d, 0x43, 0xf9, 0x0a, 0x4b, 0x06, 0xc0, + 0x00, 0x4e, 0x5e, 0x03, 0x70, 0xfe, 0x40, 0x4d, 0x5f, 0x03, 0x76, 0xfe, + 0x00, 0x4b, 0xf6, 0x6d, 0x77, 0xfe, 0x00, 0x05, 0x51, 0x00, 0x01, 0xff, + 0x49, 0x3a, 0x1e, 0xf5, 0x08, 0x00, 0x44, 0x22, 0x08, 0xf4, 0x08, 0x00, + 0x48, 0x1f, 0x0a, 0x5e, 0x06, 0x40, 0x0c, 0x37, 0x92, 0x11, 0x06, 0x41, + 0x05, 0x01, 0xff, 0x44, 0xaa, 0x4a, 0xdd, 0x06, 0x00, 0x49, 0xbd, 0x62, + 0x1d, 0x06, 0x40, 0x49, 0x48, 0x0b, 0xeb, 0x06, 0x00, 0x48, 0xf8, 0xc7, + 0xea, 0x06, 0x40, 0xa1, 0x2c, 0x50, 0x86, 0x62, 0x6b, 0x06, 0x00, 0x53, + 0x9b, 0x4a, 0xe2, 0x08, 0x00, 0x05, 0x3c, 0x01, 0x01, 0xff, 0x80, 0x06, + 0x47, 0x28, 0xd0, 0x9e, 0x08, 0x40, 0x55, 0xd0, 0x3d, 0xfb, 0x08, 0x80, + 0x06, 0x52, 0x6b, 0x31, 0xfa, 0x0e, 0x41, 0x49, 0x75, 0x3b, 0xfc, 0x08, + 0x40, 0x43, 0x15, 0x05, 0x4f, 0x06, 0x80, 0x06, 0x4c, 0xa3, 0x95, 0x0d, + 0x06, 0x40, 0x80, 0x0d, 0x43, 0xf9, 0x0a, 0x4c, 0x06, 0xc0, 0x00, 0x4e, + 0x5e, 0x03, 0x72, 0xfe, 0x40, 0x4d, 0x5f, 0x03, 0x78, 0xfe, 0x00, 0x4b, + 0xf6, 0x6d, 0x79, 0xfe, 0x00, 0x48, 0x76, 0x3b, 0xfe, 0x08, 0x40, 0x02, + 0x14, 0x05, 0x2c, 0x05, 0x73, 0x0b, 0x01, 0xff, 0x45, 0xec, 0x5e, 0xe5, + 0x08, 0x80, 0x1a, 0x45, 0xe7, 0x73, 0xe4, 0x08, 0x80, 0x0d, 0x45, 0xa8, + 0x50, 0xe6, 0x08, 0xc0, 0x00, 0x43, 0xf9, 0x0a, 0xe9, 0x08, 0x40, 0x43, + 0xf9, 0x0a, 0xe7, 0x08, 0x40, 0x43, 0xf9, 0x0a, 0xe8, 0x08, 0x40, 0x53, + 0x9a, 0x48, 0xfc, 0x0e, 0x01, 0x42, 0x6c, 0x00, 0x0c, 0x06, 0x40, 0x51, + 0x53, 0x58, 0x87, 0x08, 0x00, 0x54, 0x0c, 0x43, 0xd0, 0x0e, 0x41, 0x14, + 0xe8, 0x43, 0x4d, 0xaf, 0x3f, 0xb0, 0x01, 0xff, 0xac, 0x2e, 0x02, 0xd0, + 0x00, 0x01, 0xff, 0x4f, 0x5f, 0x6a, 0x50, 0x22, 0x00, 0x09, 0xe2, 0x0c, + 0x01, 0xff, 0x59, 0x6c, 0x23, 0x46, 0x22, 0x00, 0x06, 0x7b, 0x00, 0x01, + 0xff, 0x4b, 0xf3, 0x28, 0x70, 0x2a, 0x00, 0x42, 0x1e, 0x00, 0x45, 0x22, + 0xc0, 0x00, 0x50, 0x46, 0x60, 0x52, 0x22, 0x40, 0x48, 0x42, 0x19, 0xbd, + 0xce, 0x01, 0x57, 0xe2, 0x2e, 0x9f, 0x00, 0x40, 0x44, 0x86, 0x44, 0xe4, + 0x2b, 0x00, 0x47, 0x64, 0x36, 0x27, 0x00, 0x40, 0x45, 0x3e, 0xe4, 0x7a, + 0x23, 0x80, 0x81, 0x04, 0x4d, 0xfe, 0x80, 0x40, 0x23, 0x00, 0xa3, 0xc6, + 0x03, 0xa4, 0xea, 0x02, 0x50, 0xe6, 0x62, 0x77, 0x23, 0x00, 0x56, 0x19, + 0x34, 0x69, 0x23, 0x00, 0xa9, 0xc8, 0x02, 0x04, 0xb5, 0xf0, 0xb7, 0x02, + 0x04, 0xc3, 0x00, 0xa6, 0x02, 0x45, 0x38, 0xaf, 0x75, 0x23, 0x80, 0x98, + 0x02, 0x02, 0x7c, 0x00, 0x6c, 0xb2, 0x5e, 0xb3, 0x3b, 0x4f, 0xbf, 0x73, + 0x68, 0x23, 0x00, 0x02, 0x50, 0x02, 0x06, 0x45, 0xae, 0xec, 0x6c, 0x23, + 0x40, 0x80, 0x06, 0x4a, 0x67, 0x78, 0x4f, 0x23, 0x40, 0x4b, 0xe7, 0x99, + 0x72, 0x23, 0x00, 0x48, 0xd8, 0xca, 0x5d, 0x23, 0x00, 0x05, 0x49, 0xd8, + 0x01, 0xff, 0x49, 0xb7, 0x23, 0x61, 0x23, 0x00, 0x43, 0xdd, 0xca, 0x55, + 0x23, 0x00, 0x47, 0xe6, 0x7f, 0x51, 0x23, 0x40, 0x51, 0xda, 0x59, 0x6e, + 0x23, 0x00, 0x48, 0x03, 0x81, 0x3f, 0x23, 0x00, 0x4a, 0xd3, 0xaf, 0x37, + 0x23, 0x00, 0xb4, 0x01, 0xff, 0x4c, 0x5b, 0x8c, 0x63, 0x23, 0x00, 0x49, + 0x3e, 0xba, 0x6d, 0x23, 0x40, 0x42, 0x0b, 0x00, 0x74, 0x23, 0x00, 0x4e, + 0x63, 0x78, 0x46, 0x23, 0x40, 0x42, 0xe8, 0x01, 0x95, 0x23, 0x80, 0x11, + 0x04, 0xb8, 0x54, 0x01, 0xff, 0x44, 0x79, 0x0d, 0x5e, 0x23, 0x00, 0x48, + 0xe3, 0x59, 0x58, 0x23, 0x40, 0x80, 0x01, 0xff, 0x49, 0x44, 0x0e, 0x42, 0x23, 0x00, 0xa3, 0x79, 0xa4, 0x4b, 0x45, 0x7b, 0x00, 0x38, 0x23, 0x00, - 0x4c, 0x87, 0x00, 0x44, 0x23, 0x00, 0x43, 0x2f, 0xc8, 0x3b, 0x23, 0x00, - 0x02, 0x68, 0x00, 0x29, 0x49, 0x79, 0x2a, 0x6f, 0x23, 0x00, 0x48, 0xd6, - 0x33, 0x70, 0x23, 0x00, 0x50, 0xb3, 0x02, 0x48, 0x23, 0x00, 0x45, 0xf9, - 0x0d, 0x41, 0x23, 0x00, 0x02, 0x50, 0x02, 0x01, 0xff, 0x46, 0xf6, 0x7b, - 0x53, 0x23, 0x00, 0x4b, 0xb8, 0x02, 0x50, 0x23, 0x40, 0x4d, 0x39, 0x07, + 0x4c, 0x87, 0x00, 0x44, 0x23, 0x00, 0x43, 0xdd, 0xca, 0x3b, 0x23, 0x00, + 0x02, 0x68, 0x00, 0x29, 0x49, 0x02, 0x2b, 0x6f, 0x23, 0x00, 0x48, 0xa6, + 0x34, 0x70, 0x23, 0x00, 0x50, 0xb3, 0x02, 0x48, 0x23, 0x00, 0x45, 0x48, + 0x0e, 0x41, 0x23, 0x00, 0x02, 0x50, 0x02, 0x01, 0xff, 0x46, 0x65, 0x7d, + 0x53, 0x23, 0x00, 0x4b, 0xb8, 0x02, 0x50, 0x23, 0x40, 0x4d, 0x4f, 0x1a, 0x47, 0x23, 0x00, 0x47, 0xee, 0x00, 0x43, 0x23, 0x40, 0x42, 0xd8, 0x00, 0x54, 0x23, 0x80, 0x1f, 0xa9, 0x11, 0x03, 0xa6, 0x01, 0x01, 0xff, 0x46, - 0xf6, 0x7b, 0x4c, 0x23, 0x00, 0x4b, 0xb8, 0x02, 0x57, 0x23, 0x40, 0x45, - 0x8a, 0x43, 0x3a, 0x23, 0x00, 0x44, 0x02, 0x00, 0x39, 0x23, 0x40, 0x42, - 0x12, 0x00, 0x4d, 0x23, 0x40, 0x45, 0xe8, 0x02, 0x3c, 0x23, 0x00, 0x44, - 0x02, 0x12, 0x60, 0x23, 0x40, 0x49, 0x77, 0x58, 0x79, 0x23, 0x40, 0x4b, - 0xd2, 0x95, 0x67, 0x23, 0x00, 0x4a, 0xf8, 0x76, 0x45, 0x23, 0x40, 0x49, - 0x2f, 0x23, 0x64, 0x23, 0x00, 0x48, 0x78, 0x58, 0x5b, 0x23, 0x40, 0x45, - 0xe0, 0xde, 0x36, 0x23, 0x00, 0x43, 0xf0, 0x04, 0x73, 0x23, 0xc0, 0x00, - 0x49, 0x77, 0x58, 0x78, 0x23, 0x40, 0x02, 0xd8, 0x00, 0x30, 0x4f, 0xa3, - 0x6c, 0x5a, 0x23, 0x00, 0x03, 0xa6, 0x01, 0x01, 0xff, 0x80, 0x06, 0x4a, - 0xf8, 0x76, 0x56, 0x23, 0x40, 0x4b, 0xd7, 0x97, 0x71, 0x23, 0x00, 0x4a, - 0xd3, 0x95, 0x66, 0x23, 0x00, 0x05, 0xde, 0x95, 0x01, 0xff, 0x43, 0x2f, - 0xc8, 0x4e, 0x23, 0x00, 0x48, 0x78, 0x58, 0x4a, 0x23, 0x40, 0x80, 0x11, - 0x03, 0x4c, 0x22, 0x01, 0xff, 0x45, 0x60, 0x01, 0x4b, 0x23, 0x00, 0x48, - 0x78, 0x58, 0x59, 0x23, 0x40, 0x49, 0x2f, 0x23, 0x62, 0x23, 0x00, 0x45, - 0x60, 0x01, 0x52, 0x23, 0x00, 0x45, 0xad, 0x22, 0x6b, 0x23, 0x40, 0x06, - 0xd1, 0x04, 0x06, 0x48, 0x9a, 0xc6, 0x6a, 0x23, 0x40, 0x49, 0xf5, 0x0d, - 0x49, 0x23, 0x00, 0x49, 0x2f, 0x23, 0x65, 0x23, 0x00, 0x43, 0x2f, 0xc8, - 0x3e, 0x23, 0x00, 0x02, 0x60, 0x01, 0x06, 0x48, 0x78, 0x58, 0x5c, 0x23, + 0x65, 0x7d, 0x4c, 0x23, 0x00, 0x4b, 0xb8, 0x02, 0x57, 0x23, 0x40, 0x45, + 0x97, 0x44, 0x3a, 0x23, 0x00, 0x44, 0x02, 0x00, 0x39, 0x23, 0x40, 0x42, + 0x12, 0x00, 0x4d, 0x23, 0x40, 0x45, 0x13, 0x03, 0x3c, 0x23, 0x00, 0x44, + 0x51, 0x12, 0x60, 0x23, 0x40, 0x49, 0xe2, 0x59, 0x79, 0x23, 0x40, 0x4b, + 0xcc, 0x97, 0x67, 0x23, 0x00, 0x4a, 0x67, 0x78, 0x45, 0x23, 0x40, 0x49, + 0xb7, 0x23, 0x64, 0x23, 0x00, 0x48, 0xe3, 0x59, 0x5b, 0x23, 0x40, 0x45, + 0xf0, 0xe1, 0x36, 0x23, 0x00, 0x43, 0x1b, 0x05, 0x73, 0x23, 0xc0, 0x00, + 0x49, 0xe2, 0x59, 0x78, 0x23, 0x40, 0x02, 0xd8, 0x00, 0x30, 0x4f, 0x5b, + 0x6e, 0x5a, 0x23, 0x00, 0x03, 0xa6, 0x01, 0x01, 0xff, 0x80, 0x06, 0x4a, + 0x67, 0x78, 0x56, 0x23, 0x40, 0x4b, 0xe7, 0x99, 0x71, 0x23, 0x00, 0x4a, + 0xcd, 0x97, 0x66, 0x23, 0x00, 0x05, 0x49, 0xd8, 0x01, 0xff, 0x43, 0xdd, + 0xca, 0x4e, 0x23, 0x00, 0x48, 0xe3, 0x59, 0x4a, 0x23, 0x40, 0x80, 0x11, + 0x03, 0xd4, 0x22, 0x01, 0xff, 0x45, 0x60, 0x01, 0x4b, 0x23, 0x00, 0x48, + 0xe3, 0x59, 0x59, 0x23, 0x40, 0x49, 0xb7, 0x23, 0x62, 0x23, 0x00, 0x45, + 0x60, 0x01, 0x52, 0x23, 0x00, 0x45, 0x35, 0x23, 0x6b, 0x23, 0x40, 0x06, + 0xfc, 0x04, 0x06, 0x48, 0x38, 0xc9, 0x6a, 0x23, 0x40, 0x49, 0x44, 0x0e, + 0x49, 0x23, 0x00, 0x49, 0xb7, 0x23, 0x65, 0x23, 0x00, 0x43, 0xdd, 0xca, + 0x3e, 0x23, 0x00, 0x02, 0x60, 0x01, 0x06, 0x48, 0xe3, 0x59, 0x5c, 0x23, 0x40, 0x42, 0x17, 0x00, 0x5f, 0x23, 0x00, 0x43, 0x62, 0x01, 0x3d, 0x23, - 0x40, 0x49, 0x77, 0x58, 0x76, 0x23, 0x40, 0x03, 0xee, 0x15, 0xad, 0x01, - 0x44, 0xcc, 0xd6, 0x93, 0x26, 0x00, 0x4a, 0xdf, 0xa6, 0xd1, 0x27, 0x00, - 0xa7, 0x6f, 0x42, 0x11, 0x0c, 0x25, 0x26, 0x00, 0xf4, 0x1c, 0xf4, 0xc1, - 0x00, 0x44, 0x6e, 0xbf, 0x08, 0xcc, 0x81, 0x57, 0x0b, 0x15, 0x10, 0x01, - 0xff, 0xa3, 0x44, 0x68, 0xb5, 0x04, 0x04, 0xf5, 0x01, 0x53, 0x5b, 0x48, - 0xf2, 0x27, 0x00, 0x4b, 0x8d, 0x8e, 0x11, 0x2a, 0x00, 0x51, 0xcb, 0x04, - 0xba, 0x21, 0x00, 0xb4, 0x01, 0xff, 0x53, 0x82, 0x4a, 0xb6, 0x21, 0x00, - 0x0f, 0x02, 0x02, 0x01, 0xff, 0x55, 0xe6, 0x38, 0x8d, 0x2b, 0x00, 0x53, - 0xb1, 0x49, 0x8e, 0x2b, 0x00, 0x51, 0xcb, 0x04, 0x6f, 0x2b, 0x00, 0x54, - 0x57, 0x44, 0x8c, 0x2b, 0x00, 0x52, 0x86, 0x54, 0x8f, 0x2b, 0x40, 0x52, - 0x34, 0x52, 0x40, 0x29, 0x00, 0x4f, 0xbe, 0x6f, 0x33, 0x22, 0x40, 0x4a, - 0x05, 0xa4, 0xf6, 0xf4, 0x41, 0x49, 0x5c, 0x29, 0xa2, 0xf4, 0x01, 0x42, - 0x68, 0x00, 0x20, 0x22, 0x80, 0x12, 0x47, 0xb1, 0xd2, 0x20, 0xf6, 0x01, - 0x4a, 0x1d, 0xaf, 0x2b, 0x21, 0x00, 0x4b, 0xfb, 0xa1, 0x27, 0xf6, 0x41, - 0x06, 0x50, 0x00, 0x01, 0xff, 0x48, 0xae, 0x53, 0x9e, 0x29, 0x00, 0x48, - 0x78, 0x58, 0xa4, 0x29, 0x40, 0x11, 0x6d, 0x5a, 0x06, 0x4b, 0x57, 0x9d, + 0x40, 0x49, 0xe2, 0x59, 0x76, 0x23, 0x40, 0x03, 0x5a, 0x16, 0xad, 0x01, + 0x44, 0xb2, 0xd9, 0x93, 0x26, 0x00, 0x4a, 0x1b, 0xa9, 0xd1, 0x27, 0x00, + 0xa7, 0x6f, 0x42, 0x60, 0x0c, 0x25, 0x26, 0x00, 0xf4, 0x1c, 0xf4, 0xc1, + 0x00, 0x44, 0xec, 0xc1, 0x08, 0xcc, 0x81, 0x57, 0x0b, 0x64, 0x10, 0x01, + 0xff, 0xa3, 0x44, 0x68, 0xe0, 0x04, 0x04, 0xf5, 0x01, 0x53, 0xa4, 0x49, + 0xf2, 0x27, 0x00, 0x4b, 0x3f, 0x90, 0x11, 0x2a, 0x00, 0x51, 0xf6, 0x04, + 0xba, 0x21, 0x00, 0xb4, 0x01, 0xff, 0x53, 0xcb, 0x4b, 0xb6, 0x21, 0x00, + 0x0f, 0x02, 0x02, 0x01, 0xff, 0x55, 0xb6, 0x39, 0x8d, 0x2b, 0x00, 0x53, + 0xfa, 0x4a, 0x8e, 0x2b, 0x00, 0x51, 0xf6, 0x04, 0x6f, 0x2b, 0x00, 0x54, + 0x78, 0x45, 0x8c, 0x2b, 0x00, 0x52, 0xcf, 0x55, 0x8f, 0x2b, 0x40, 0x52, + 0x7d, 0x53, 0x40, 0x29, 0x00, 0x4f, 0x58, 0x71, 0x33, 0x22, 0x40, 0x4a, + 0x41, 0xa6, 0xf6, 0xf4, 0x41, 0x49, 0xe5, 0x29, 0xa2, 0xf4, 0x01, 0x42, + 0x68, 0x00, 0x20, 0x22, 0x80, 0x12, 0x47, 0x84, 0xd5, 0x20, 0xf6, 0x01, + 0x4a, 0x6d, 0xb1, 0x2b, 0x21, 0x00, 0x4b, 0x37, 0xa4, 0x27, 0xf6, 0x41, + 0x06, 0x50, 0x00, 0x01, 0xff, 0x48, 0xf7, 0x54, 0x9e, 0x29, 0x00, 0x48, + 0xe3, 0x59, 0xa4, 0x29, 0x40, 0x11, 0xd8, 0x5b, 0x06, 0x4b, 0x7d, 0x9f, 0xc0, 0xfa, 0x41, 0x90, 0x92, 0x10, 0x91, 0x9a, 0x0c, 0x92, 0xb5, 0x08, 0x93, 0xbd, 0x04, 0x94, 0x83, 0x01, 0x95, 0x01, 0xff, 0x90, 0x5a, 0x91, - 0x30, 0x92, 0x06, 0x42, 0x57, 0xf0, 0x46, 0x46, 0x41, 0xd0, 0x3c, 0x46, + 0x30, 0x92, 0x06, 0x42, 0xaa, 0xf3, 0x46, 0x46, 0x41, 0xd0, 0x3c, 0x46, 0x01, 0xd1, 0x3d, 0x46, 0x01, 0xd2, 0x3e, 0x46, 0x01, 0xd3, 0x3f, 0x46, 0x01, 0xd4, 0x40, 0x46, 0x01, 0xd5, 0x41, 0x46, 0x01, 0xd6, 0x42, 0x46, 0x01, 0xd7, 0x43, 0x46, 0x01, 0xd8, 0x44, 0x46, 0x01, 0xd9, 0x45, 0x46, @@ -18674,21 +18918,21 @@ static const unsigned char uname2c_tree[218382] = { 0x45, 0x01, 0xd9, 0xe2, 0x45, 0x41, 0x90, 0x24, 0xd1, 0xd0, 0x45, 0x01, 0xd2, 0xd1, 0x45, 0x01, 0xd3, 0xd2, 0x45, 0x01, 0xd4, 0xd3, 0x45, 0x01, 0xd5, 0xd4, 0x45, 0x01, 0xd6, 0xd5, 0x45, 0x01, 0xd7, 0xd6, 0x45, 0x01, - 0xd8, 0xd7, 0x45, 0x01, 0xd9, 0xd8, 0x45, 0x41, 0x54, 0xb7, 0x3e, 0xce, - 0x45, 0x01, 0x53, 0x93, 0x46, 0xcf, 0x45, 0x41, 0xd0, 0xc4, 0x45, 0x01, + 0xd8, 0xd7, 0x45, 0x01, 0xd9, 0xd8, 0x45, 0x41, 0x54, 0x9c, 0x3f, 0xce, + 0x45, 0x01, 0x53, 0xdc, 0x47, 0xcf, 0x45, 0x41, 0xd0, 0xc4, 0x45, 0x01, 0xd1, 0xc5, 0x45, 0x01, 0xd2, 0xc6, 0x45, 0x01, 0xd3, 0xc7, 0x45, 0x01, 0xd4, 0xc8, 0x45, 0x01, 0xd5, 0xc9, 0x45, 0x01, 0xd6, 0xca, 0x45, 0x01, 0xd7, 0xcb, 0x45, 0x01, 0xd8, 0xcc, 0x45, 0x01, 0xd9, 0xcd, 0x45, 0x41, 0x90, 0xc5, 0x03, 0x91, 0x9a, 0x03, 0x92, 0xea, 0x02, 0x93, 0xa8, 0x02, 0x94, 0xfd, 0x01, 0x95, 0xcd, 0x01, 0x96, 0x98, 0x01, 0x97, 0x69, 0x98, 0x2d, 0x99, 0x01, 0xff, 0xd0, 0xba, 0x45, 0x01, 0xd1, 0xbb, 0x45, 0x01, - 0xd2, 0xbc, 0x45, 0x01, 0x47, 0x5d, 0xcb, 0xbd, 0x45, 0x01, 0xd4, 0xbe, + 0xd2, 0xbc, 0x45, 0x01, 0x47, 0x22, 0xce, 0xbd, 0x45, 0x01, 0xd4, 0xbe, 0x45, 0x01, 0xd5, 0xbf, 0x45, 0x01, 0xd6, 0xc0, 0x45, 0x01, 0xd7, 0xc1, 0x45, 0x01, 0xd8, 0xc2, 0x45, 0x01, 0xd9, 0xc3, 0x45, 0x41, 0xd0, 0xad, 0x45, 0x01, 0xd1, 0xae, 0x45, 0x81, 0x2d, 0xd2, 0xb0, 0x45, 0x01, 0x93, 0x1d, 0xd4, 0xb3, 0x45, 0x01, 0xd5, 0xb4, 0x45, 0x01, 0xd6, 0xb5, 0x45, 0x81, 0x0c, 0xd7, 0xb7, 0x45, 0x01, 0xd8, 0xb8, 0x45, 0x01, 0xd9, 0xb9, - 0x45, 0x41, 0xe1, 0xb6, 0x45, 0x41, 0x49, 0x71, 0xb2, 0xb1, 0x45, 0x01, + 0x45, 0x41, 0xe1, 0xb6, 0x45, 0x41, 0x49, 0xcb, 0xb4, 0xb1, 0x45, 0x01, 0xe1, 0xb2, 0x45, 0x41, 0xe1, 0xaf, 0x45, 0x41, 0xd0, 0xa2, 0x45, 0x01, 0xd1, 0xa3, 0x45, 0x81, 0x20, 0xd2, 0xa5, 0x45, 0x01, 0xd3, 0xa6, 0x45, 0x01, 0xd4, 0xa7, 0x45, 0x01, 0xd5, 0xa8, 0x45, 0x01, 0xd6, 0xa9, 0x45, @@ -18842,239 +19086,242 @@ static const unsigned char uname2c_tree[218382] = { 0x01, 0xd9, 0x13, 0x44, 0x41, 0xe1, 0x0a, 0x44, 0x41, 0xd1, 0x00, 0x44, 0x01, 0xd2, 0x01, 0x44, 0x01, 0xd3, 0x02, 0x44, 0x01, 0xd4, 0x03, 0x44, 0x01, 0xd5, 0x04, 0x44, 0x01, 0xd6, 0x05, 0x44, 0x01, 0xd7, 0x06, 0x44, - 0x01, 0xd8, 0x07, 0x44, 0x01, 0xd9, 0x08, 0x44, 0x41, 0x57, 0x47, 0x2c, - 0x3f, 0x2a, 0x00, 0x47, 0xec, 0xcc, 0x91, 0xf6, 0x01, 0x4f, 0x1d, 0x6b, - 0xc8, 0xf3, 0x01, 0xb0, 0x01, 0xff, 0x46, 0x30, 0x3d, 0x26, 0x00, 0x00, - 0x44, 0xc7, 0x3f, 0xfa, 0xf3, 0x41, 0x49, 0xfd, 0xb3, 0xf0, 0x23, 0x00, - 0x14, 0x1f, 0x40, 0xa8, 0x01, 0xa5, 0x93, 0x01, 0x04, 0x36, 0xed, 0x38, - 0x02, 0x14, 0x00, 0x28, 0x0b, 0x12, 0x69, 0x11, 0x06, 0xa4, 0x11, 0x01, - 0xff, 0x5a, 0x5c, 0x1f, 0xd5, 0x26, 0x00, 0x4e, 0x9c, 0x77, 0x87, 0x23, - 0x40, 0x4b, 0x52, 0x28, 0x4a, 0x22, 0x00, 0x42, 0x1e, 0x00, 0x48, 0x22, - 0xc0, 0x00, 0x57, 0x9e, 0x04, 0x6f, 0x2a, 0x40, 0x4e, 0x8c, 0x74, 0x2e, - 0x23, 0x00, 0x48, 0xa9, 0x0c, 0x4c, 0x22, 0x40, 0x0e, 0x0a, 0x75, 0x47, - 0x47, 0x81, 0xd0, 0x7e, 0xf4, 0x81, 0x24, 0xb3, 0x01, 0xff, 0x06, 0x28, - 0xdc, 0x11, 0x05, 0x00, 0x18, 0x01, 0xff, 0x50, 0xfa, 0x5f, 0x4f, 0xcc, - 0x01, 0x4e, 0x08, 0x79, 0x4e, 0xcc, 0x41, 0x49, 0x26, 0xb5, 0x52, 0xcc, - 0x01, 0x46, 0x7b, 0x2e, 0x53, 0xcc, 0x41, 0x80, 0x01, 0xff, 0x4b, 0x19, - 0x98, 0x4d, 0xcc, 0x01, 0x49, 0xfc, 0xba, 0x4c, 0xcc, 0x01, 0x05, 0xf0, - 0xe7, 0x01, 0xff, 0xd1, 0x54, 0xcc, 0x01, 0xd2, 0x55, 0xcc, 0x41, 0x44, - 0xc3, 0x00, 0x51, 0xcc, 0x01, 0x45, 0xc8, 0x00, 0x50, 0xcc, 0x41, 0x48, - 0x7a, 0x96, 0x35, 0x21, 0x00, 0x44, 0xe2, 0xe2, 0x97, 0x26, 0x00, 0x42, - 0x34, 0x00, 0x07, 0x00, 0x40, 0xa1, 0xde, 0x05, 0xa2, 0xa7, 0x05, 0xa3, - 0xc6, 0x04, 0xa4, 0xa5, 0x04, 0x45, 0xb8, 0x70, 0x03, 0xf7, 0x01, 0x44, - 0x91, 0x8f, 0x02, 0xf7, 0x01, 0xa7, 0x8a, 0x04, 0xa8, 0xe8, 0x03, 0x04, - 0x99, 0x1f, 0xd0, 0x03, 0xac, 0xc1, 0x03, 0xad, 0xa0, 0x03, 0x02, 0x26, - 0x03, 0x8f, 0x03, 0x43, 0x1e, 0xdf, 0x46, 0xf7, 0x01, 0xb0, 0xd6, 0x02, - 0x03, 0xd6, 0x01, 0xc5, 0x02, 0xb2, 0xf3, 0x01, 0xb3, 0x70, 0xb4, 0x45, - 0x45, 0xc2, 0xe8, 0x55, 0xf7, 0x01, 0xb6, 0x0f, 0x02, 0xa9, 0x01, 0x01, - 0xff, 0x43, 0x8b, 0x00, 0x04, 0xf7, 0x01, 0xf8, 0x4a, 0xf7, 0x41, 0x48, - 0x32, 0xc3, 0x28, 0xf7, 0x01, 0xa9, 0x01, 0xff, 0x45, 0xde, 0xe5, 0x0a, - 0xf7, 0x81, 0x0d, 0x45, 0x59, 0xe8, 0x16, 0xf7, 0xc1, 0x00, 0x42, 0x34, - 0xf0, 0x17, 0xf7, 0x41, 0x4c, 0x7d, 0x89, 0x2f, 0xf7, 0x01, 0x8d, 0x01, - 0xff, 0xd2, 0x0b, 0xf7, 0x01, 0xd3, 0x0c, 0xf7, 0x41, 0x45, 0x56, 0xe1, - 0x3f, 0xf7, 0x81, 0x1c, 0x02, 0x9e, 0x01, 0x0c, 0x46, 0x55, 0x7f, 0x51, - 0xf7, 0x01, 0x44, 0xa2, 0xef, 0x4d, 0xf7, 0x41, 0x44, 0x68, 0x96, 0x29, - 0xf7, 0x01, 0x45, 0x3c, 0x89, 0x48, 0xf7, 0x41, 0x42, 0x34, 0xf0, 0x40, - 0xf7, 0x41, 0x02, 0x13, 0x00, 0x61, 0x4e, 0xe0, 0x74, 0x4f, 0xf7, 0x01, - 0x45, 0x4e, 0xe4, 0x1b, 0xf7, 0x01, 0x43, 0xe7, 0xd0, 0x54, 0xf7, 0x01, - 0x45, 0xe3, 0xbc, 0x47, 0xf7, 0x01, 0xb4, 0x34, 0xb5, 0x01, 0xff, 0x06, - 0x83, 0x61, 0x06, 0x44, 0xfe, 0x50, 0x0d, 0xf7, 0x41, 0x05, 0x17, 0x42, - 0x06, 0x43, 0xb5, 0x00, 0x5e, 0xf7, 0x41, 0x48, 0x81, 0x89, 0x2c, 0xf7, - 0x01, 0x46, 0x88, 0x4f, 0x22, 0xf7, 0x01, 0x08, 0xea, 0xc7, 0x01, 0xff, - 0x48, 0x81, 0x89, 0x2e, 0xf7, 0x01, 0x46, 0x88, 0x4f, 0x27, 0xf7, 0x41, - 0x4d, 0x4e, 0x7f, 0x52, 0xf7, 0x01, 0x53, 0x2d, 0x4b, 0x5c, 0xf7, 0xc1, - 0x00, 0x42, 0x34, 0xf0, 0x5d, 0xf7, 0x41, 0x49, 0xb0, 0xb2, 0x39, 0xf7, - 0x01, 0xf4, 0x14, 0xf7, 0xc1, 0x00, 0x04, 0xf3, 0x01, 0x01, 0xff, 0x48, - 0x81, 0x89, 0x2d, 0xf7, 0x01, 0x52, 0x88, 0x4f, 0x26, 0xf7, 0x41, 0xa5, - 0x0d, 0x48, 0x62, 0xc6, 0x18, 0xf7, 0xc1, 0x00, 0x42, 0x34, 0xf0, 0x19, - 0xf7, 0x41, 0x45, 0x1a, 0xe1, 0x3b, 0xf7, 0x81, 0x33, 0x45, 0xa4, 0xe3, - 0x32, 0xf7, 0x81, 0x06, 0x44, 0x05, 0x09, 0x6d, 0xf7, 0x41, 0x04, 0xf3, - 0x01, 0x0f, 0x8d, 0x01, 0xff, 0xd2, 0x33, 0xf7, 0x01, 0xd3, 0x34, 0xf7, - 0x01, 0xd4, 0x35, 0xf7, 0x41, 0x48, 0x81, 0x89, 0x30, 0xf7, 0x81, 0x06, - 0x44, 0x99, 0x1f, 0x1f, 0xf7, 0x41, 0x42, 0x34, 0xf0, 0x31, 0xf7, 0x41, - 0x42, 0x34, 0xf0, 0x3c, 0xf7, 0x41, 0x47, 0x1d, 0xcd, 0x41, 0xf7, 0x01, - 0x49, 0x48, 0xba, 0x00, 0xf7, 0x41, 0x52, 0xf0, 0x50, 0x0e, 0xf7, 0x01, - 0xaf, 0x15, 0x4a, 0xb5, 0xad, 0x5f, 0xf7, 0x01, 0xb5, 0x01, 0xff, 0x44, - 0xfe, 0xee, 0x63, 0xf7, 0x01, 0x4a, 0xc7, 0xaf, 0x64, 0xf7, 0x41, 0x47, - 0x4b, 0xd3, 0x58, 0xf7, 0x01, 0x44, 0xda, 0xef, 0x4b, 0xf7, 0xc1, 0x00, - 0x48, 0xea, 0xc2, 0x5a, 0xf7, 0x41, 0x43, 0xca, 0x00, 0x6f, 0xf7, 0x01, - 0x43, 0x76, 0x02, 0x15, 0xf7, 0x41, 0x48, 0xf2, 0xc0, 0x38, 0xf7, 0x01, - 0x50, 0x7a, 0x61, 0x10, 0xf7, 0x81, 0x06, 0x44, 0x18, 0xa0, 0x71, 0xf7, - 0x41, 0x8d, 0x01, 0xff, 0xd2, 0x11, 0xf7, 0x01, 0xd3, 0x12, 0xf7, 0x41, - 0x47, 0xc5, 0xcd, 0x2a, 0xf7, 0x01, 0x48, 0x72, 0xc6, 0x53, 0xf7, 0x41, - 0x44, 0x68, 0x96, 0x1c, 0xf7, 0x81, 0x06, 0x4b, 0x61, 0x96, 0x21, 0xf7, - 0x41, 0x42, 0x34, 0xf0, 0x1d, 0xf7, 0x41, 0x04, 0x23, 0x00, 0x0f, 0xaf, - 0x01, 0xff, 0x48, 0xda, 0xc7, 0x56, 0xf7, 0x01, 0x42, 0x42, 0x00, 0x6e, - 0xf7, 0x41, 0x44, 0x92, 0xb5, 0x72, 0xf7, 0x01, 0x45, 0x92, 0xe6, 0x73, - 0xf7, 0x41, 0x43, 0x5a, 0x1a, 0x1a, 0xf7, 0x01, 0x42, 0x1d, 0x04, 0x49, - 0xf7, 0x41, 0x48, 0x52, 0xc1, 0x70, 0xf7, 0x01, 0x02, 0x34, 0x03, 0x01, - 0xff, 0x45, 0xe1, 0xe7, 0x61, 0xf7, 0x81, 0x06, 0x44, 0x2e, 0x34, 0x60, - 0xf7, 0x41, 0x42, 0x34, 0xf0, 0x62, 0xf7, 0x41, 0xa1, 0x4a, 0x47, 0x2a, - 0xcf, 0x13, 0xf7, 0x01, 0x06, 0x89, 0x4f, 0x34, 0xb2, 0x01, 0xff, 0x08, - 0x6a, 0xc6, 0x1a, 0x46, 0xd2, 0xdd, 0x65, 0xf7, 0xc1, 0x00, 0x8d, 0x01, - 0xff, 0xd2, 0x66, 0xf7, 0x01, 0xd3, 0x67, 0xf7, 0x01, 0xd4, 0x68, 0xf7, - 0x01, 0xd5, 0x69, 0xf7, 0x41, 0x46, 0x88, 0x4f, 0x23, 0xf7, 0x81, 0x06, - 0x44, 0x99, 0x1f, 0x1e, 0xf7, 0x41, 0x42, 0x34, 0xf0, 0x24, 0xf7, 0x41, - 0x4b, 0x8f, 0x4f, 0x25, 0xf7, 0x01, 0x43, 0x5f, 0x0f, 0x20, 0xf7, 0x41, - 0x46, 0x1a, 0xd8, 0x50, 0xf7, 0x01, 0x42, 0xce, 0xf1, 0x4c, 0xf7, 0x01, - 0x4b, 0x46, 0x9f, 0x4e, 0xf7, 0x41, 0x07, 0x67, 0xcc, 0x24, 0x4a, 0xc3, - 0xa9, 0x3e, 0xf7, 0x01, 0x4b, 0x0d, 0x9c, 0x0f, 0xf7, 0x01, 0x44, 0xa2, - 0xee, 0x42, 0xf7, 0x81, 0x06, 0x44, 0xa4, 0x20, 0x59, 0xf7, 0x41, 0x8d, - 0x01, 0xff, 0xd2, 0x43, 0xf7, 0x01, 0xd3, 0x44, 0xf7, 0x41, 0x44, 0xe2, - 0xed, 0x6b, 0xf7, 0x01, 0x47, 0x4e, 0xd4, 0x6c, 0xf7, 0x41, 0x42, 0x46, - 0x00, 0x01, 0xf7, 0x01, 0xac, 0x44, 0x46, 0x46, 0x2c, 0x5b, 0xf7, 0x01, - 0x4b, 0x07, 0x9e, 0x2b, 0xf7, 0x01, 0x03, 0x7c, 0x00, 0x12, 0x46, 0xa6, - 0xdc, 0x3a, 0xf7, 0x01, 0x44, 0xba, 0x7a, 0x57, 0xf7, 0x01, 0x4a, 0xb7, - 0xb0, 0x3d, 0xf7, 0x41, 0x80, 0x06, 0x46, 0xe0, 0xd8, 0x05, 0xf7, 0x41, - 0x45, 0x1e, 0xe7, 0x06, 0xf7, 0x81, 0x0d, 0x45, 0xf9, 0xe8, 0x08, 0xf7, - 0xc1, 0x00, 0x42, 0x34, 0xf0, 0x09, 0xf7, 0x41, 0x42, 0x34, 0xf0, 0x07, - 0xf7, 0x41, 0x45, 0xe1, 0xe2, 0x6a, 0xf7, 0x01, 0x44, 0x8a, 0xed, 0x36, - 0xf7, 0x81, 0x06, 0x42, 0x1d, 0x04, 0x45, 0xf7, 0x41, 0x42, 0x34, 0xf0, - 0x37, 0xf7, 0x41, 0x80, 0x01, 0xff, 0x48, 0x02, 0xc1, 0xec, 0xf6, 0x01, - 0x49, 0x5c, 0xb5, 0xeb, 0xf6, 0x41, 0x16, 0x6d, 0x32, 0x8c, 0x03, 0x06, - 0xc4, 0x06, 0xc5, 0x02, 0x07, 0xc1, 0x05, 0x6b, 0x08, 0x39, 0xac, 0x5b, - 0xb3, 0x34, 0x0b, 0xd1, 0x75, 0x01, 0xff, 0xe1, 0x20, 0x17, 0x81, 0x1a, - 0xe5, 0x26, 0x17, 0x01, 0xe9, 0x22, 0x17, 0x81, 0x0d, 0xef, 0x28, 0x17, - 0x01, 0xf5, 0x24, 0x17, 0xc1, 0x00, 0xf5, 0x25, 0x17, 0x41, 0xe9, 0x23, - 0x17, 0x41, 0xe1, 0x21, 0x17, 0x01, 0xe9, 0x29, 0x17, 0x01, 0xed, 0x2a, - 0x17, 0x01, 0xf7, 0x27, 0x17, 0x41, 0x04, 0x30, 0x03, 0x06, 0x48, 0xde, - 0xa0, 0x3f, 0x17, 0x41, 0x46, 0x6c, 0xda, 0x2b, 0x17, 0x01, 0x45, 0x73, - 0xe7, 0x3e, 0x17, 0x01, 0xb3, 0x01, 0xff, 0x46, 0x60, 0x0a, 0x3d, 0x17, - 0x01, 0x4c, 0x0d, 0x90, 0x3c, 0x17, 0x41, 0x42, 0x92, 0x01, 0x3a, 0x17, - 0x01, 0x45, 0xde, 0x2b, 0x3b, 0x17, 0x41, 0xe1, 0x12, 0x17, 0x81, 0xb9, - 0x01, 0xa2, 0xac, 0x01, 0xa3, 0x9f, 0x01, 0xa4, 0x86, 0x01, 0xa7, 0x7a, - 0x42, 0x22, 0x00, 0x11, 0x17, 0x01, 0xaa, 0x68, 0xab, 0x5c, 0xac, 0x50, - 0x42, 0x6c, 0x00, 0x09, 0x17, 0x01, 0xae, 0x32, 0xb0, 0x26, 0x42, 0x71, - 0x00, 0x0d, 0x17, 0x01, 0x42, 0x15, 0x06, 0x0f, 0x17, 0x01, 0xb4, 0x01, - 0xff, 0xe1, 0x04, 0x17, 0x01, 0x42, 0x22, 0x00, 0x0c, 0x17, 0x01, 0xb4, - 0x01, 0xff, 0xe1, 0x41, 0x17, 0x01, 0x42, 0x22, 0x00, 0x42, 0x17, 0x41, - 0xe1, 0x06, 0x17, 0x01, 0x42, 0x22, 0x00, 0x07, 0x17, 0x41, 0xe1, 0x03, - 0x17, 0x01, 0x42, 0x24, 0x02, 0x02, 0x17, 0x01, 0x42, 0xff, 0x04, 0x45, - 0x17, 0x01, 0x42, 0x34, 0x22, 0x10, 0x17, 0x41, 0xe1, 0x0e, 0x17, 0x01, - 0x42, 0x74, 0x00, 0x46, 0x17, 0x41, 0xe1, 0x00, 0x17, 0x01, 0x42, 0x22, - 0x00, 0x01, 0x17, 0x41, 0xe1, 0x0a, 0x17, 0x01, 0x42, 0x22, 0x00, 0x19, - 0x17, 0x41, 0xe1, 0x15, 0x17, 0x01, 0x42, 0x22, 0x00, 0x17, 0x17, 0x41, - 0xe1, 0x13, 0x17, 0x01, 0xa4, 0x06, 0x42, 0x22, 0x00, 0x14, 0x17, 0x41, - 0xe1, 0x43, 0x17, 0x01, 0x42, 0x22, 0x00, 0x44, 0x17, 0x41, 0xe1, 0x40, - 0x17, 0x01, 0x42, 0x22, 0x00, 0x0b, 0x17, 0x41, 0xe1, 0x08, 0x17, 0x01, - 0x42, 0x22, 0x00, 0x18, 0x17, 0x41, 0x09, 0xa3, 0x11, 0x01, 0xff, 0x42, - 0x16, 0x00, 0x1a, 0x17, 0x01, 0x42, 0x24, 0x02, 0x16, 0x17, 0x01, 0x42, - 0x12, 0x00, 0x05, 0x17, 0x41, 0x45, 0xc3, 0x0a, 0x38, 0x17, 0x01, 0xa6, - 0x2e, 0x44, 0x46, 0x2a, 0x39, 0x17, 0x01, 0x43, 0xbf, 0x0a, 0x31, 0x17, - 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xa1, 0x1d, 0x30, 0x17, 0x41, 0x44, - 0x25, 0x01, 0x33, 0x17, 0x01, 0x42, 0x15, 0x02, 0x32, 0x17, 0x41, 0x44, - 0x27, 0x1d, 0x37, 0x17, 0x01, 0x42, 0x60, 0x25, 0x36, 0x17, 0x41, 0x43, - 0xa7, 0x05, 0x35, 0x17, 0x01, 0x43, 0xcb, 0x06, 0x34, 0x17, 0x41, 0xac, - 0x06, 0x42, 0x71, 0x00, 0x1e, 0x17, 0x41, 0xe1, 0x1d, 0x17, 0x01, 0x4a, - 0x55, 0xa9, 0x1f, 0x17, 0x41, 0x05, 0x86, 0xe3, 0x06, 0x4c, 0xad, 0x92, - 0xa1, 0xf6, 0x41, 0x4a, 0x67, 0xa6, 0x02, 0x01, 0x01, 0x59, 0x61, 0x23, - 0x3c, 0x01, 0x01, 0x5c, 0xfe, 0x17, 0x3d, 0x01, 0x01, 0x08, 0x05, 0x18, - 0x84, 0x03, 0x07, 0x2f, 0x39, 0x38, 0xb7, 0x01, 0xff, 0x06, 0xe2, 0x13, - 0x11, 0x0e, 0x32, 0x79, 0x01, 0xff, 0x43, 0xd4, 0x09, 0x01, 0x01, 0x01, - 0x44, 0xc2, 0x07, 0x00, 0x01, 0x41, 0x49, 0x33, 0xb4, 0x37, 0x01, 0x01, - 0xa6, 0x0c, 0x4e, 0x82, 0x7a, 0x39, 0x01, 0x01, 0x4d, 0x6e, 0x87, 0x3a, - 0x01, 0x41, 0x4c, 0x0e, 0x18, 0x38, 0x01, 0x01, 0x4d, 0x80, 0x85, 0x3b, - 0x01, 0x41, 0x45, 0xc3, 0x0a, 0x0e, 0x01, 0x81, 0xa7, 0x02, 0xa6, 0xd9, - 0x01, 0x44, 0x46, 0x2a, 0x0f, 0x01, 0x81, 0xb6, 0x01, 0x43, 0xbf, 0x0a, - 0x07, 0x01, 0x81, 0x9f, 0x01, 0xb3, 0x59, 0xb4, 0x01, 0xff, 0x42, 0x92, - 0x01, 0x10, 0x01, 0x81, 0x49, 0xa8, 0x24, 0xb7, 0x01, 0xff, 0x44, 0x29, - 0x1d, 0x11, 0x01, 0x81, 0x14, 0xef, 0x08, 0x01, 0xc1, 0x00, 0x80, 0x01, - 0xff, 0x47, 0x22, 0x11, 0x1a, 0x01, 0x01, 0x48, 0xd5, 0x5c, 0x23, 0x01, - 0x41, 0x49, 0xd4, 0x5c, 0x2c, 0x01, 0x41, 0x44, 0x2c, 0x11, 0x12, 0x01, - 0x81, 0x16, 0x43, 0x26, 0x01, 0x09, 0x01, 0xc1, 0x00, 0x80, 0x01, 0xff, - 0x47, 0x22, 0x11, 0x1b, 0x01, 0x01, 0x48, 0xd5, 0x5c, 0x24, 0x01, 0x41, - 0x49, 0xd4, 0x5c, 0x2d, 0x01, 0x41, 0x49, 0xd4, 0x5c, 0x2b, 0x01, 0x41, - 0x44, 0x27, 0x1d, 0x0d, 0x01, 0x81, 0x22, 0x42, 0x60, 0x25, 0x0c, 0x01, - 0xc1, 0x00, 0x80, 0x0d, 0x42, 0x2e, 0x11, 0x15, 0x01, 0xc1, 0x00, 0x49, - 0xd4, 0x5c, 0x30, 0x01, 0x41, 0x47, 0x22, 0x11, 0x1e, 0x01, 0x01, 0x48, - 0xd5, 0x5c, 0x27, 0x01, 0x41, 0x80, 0x0d, 0x42, 0x2e, 0x11, 0x16, 0x01, - 0xc1, 0x00, 0x49, 0xd4, 0x5c, 0x31, 0x01, 0x41, 0x47, 0x22, 0x11, 0x1f, - 0x01, 0x01, 0x48, 0xd5, 0x5c, 0x28, 0x01, 0x41, 0x80, 0x01, 0xff, 0x47, - 0x22, 0x11, 0x19, 0x01, 0x01, 0x48, 0xd5, 0x5c, 0x22, 0x01, 0x41, 0x80, - 0x0d, 0x42, 0x2e, 0x11, 0x18, 0x01, 0xc1, 0x00, 0x49, 0xd4, 0x5c, 0x33, - 0x01, 0x41, 0x47, 0x22, 0x11, 0x21, 0x01, 0x01, 0x48, 0xd5, 0x5c, 0x2a, - 0x01, 0x41, 0xa9, 0x26, 0xaf, 0x01, 0xff, 0x43, 0x2d, 0x11, 0x13, 0x01, - 0x81, 0x16, 0x42, 0x42, 0x00, 0x0a, 0x01, 0xc1, 0x00, 0x80, 0x01, 0xff, - 0x47, 0x22, 0x11, 0x1c, 0x01, 0x01, 0x48, 0xd5, 0x5c, 0x25, 0x01, 0x41, - 0x49, 0xd4, 0x5c, 0x2e, 0x01, 0x41, 0x43, 0x09, 0x4c, 0x14, 0x01, 0x81, - 0x16, 0x42, 0x32, 0x00, 0x0b, 0x01, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x47, - 0x22, 0x11, 0x1d, 0x01, 0x01, 0x48, 0xd5, 0x5c, 0x26, 0x01, 0x41, 0x49, - 0xd4, 0x5c, 0x2f, 0x01, 0x41, 0x80, 0x0b, 0xf9, 0x17, 0x01, 0xc1, 0x00, - 0x49, 0xd4, 0x5c, 0x32, 0x01, 0x41, 0x47, 0x22, 0x11, 0x20, 0x01, 0x01, - 0x48, 0xd5, 0x5c, 0x29, 0x01, 0x41, 0x4e, 0x82, 0x7a, 0x3e, 0x01, 0x01, - 0x4d, 0x6e, 0x87, 0x3f, 0x01, 0x41, 0x56, 0x1d, 0x33, 0x01, 0x21, 0x00, - 0x4e, 0xca, 0x76, 0x79, 0xfa, 0x01, 0x48, 0x3a, 0xc4, 0x2c, 0x26, 0x00, - 0x04, 0xfd, 0x13, 0x14, 0xad, 0x06, 0x43, 0x8c, 0x04, 0xd1, 0xf9, 0x41, - 0x44, 0x61, 0x83, 0xe5, 0x2b, 0x00, 0x4e, 0x80, 0x77, 0x9f, 0xf3, 0x41, - 0x4f, 0x01, 0x69, 0x44, 0xe9, 0x01, 0xa3, 0xd7, 0x02, 0x06, 0xc4, 0x06, - 0x90, 0x02, 0x07, 0xe0, 0x6b, 0xff, 0x01, 0x45, 0x56, 0x00, 0x47, 0xe9, - 0x01, 0x08, 0x4c, 0x16, 0xe8, 0x01, 0xae, 0xd9, 0x01, 0x0d, 0x4b, 0x08, - 0x06, 0x50, 0x0a, 0x67, 0x45, 0xe9, 0x41, 0x44, 0x01, 0x69, 0x22, 0xe9, - 0x01, 0xa2, 0xbc, 0x01, 0x43, 0x0d, 0x16, 0x37, 0xe9, 0x01, 0xa4, 0xa7, - 0x01, 0xe5, 0x2b, 0xe9, 0x01, 0x42, 0xe1, 0x07, 0x2c, 0xe9, 0x01, 0xa7, - 0x90, 0x01, 0x42, 0x22, 0x00, 0x38, 0xe9, 0x01, 0xe9, 0x2d, 0xe9, 0x01, - 0x44, 0x72, 0xed, 0x36, 0xe9, 0x01, 0xab, 0x6c, 0x44, 0x9e, 0x87, 0x24, - 0xe9, 0x01, 0x44, 0xee, 0xed, 0x25, 0xe9, 0x01, 0xae, 0x4c, 0xef, 0x2e, - 0xe9, 0x01, 0x42, 0x6f, 0x02, 0x28, 0xe9, 0x01, 0x44, 0xf6, 0xe6, 0x39, - 0xe9, 0x01, 0x42, 0x71, 0x00, 0x2a, 0xe9, 0x01, 0xb3, 0x28, 0x42, 0x5c, - 0x01, 0x3c, 0xe9, 0x01, 0xf5, 0x35, 0xe9, 0x01, 0x42, 0xa6, 0x0a, 0x3e, - 0xe9, 0x01, 0x43, 0xc0, 0x88, 0x31, 0xe9, 0x01, 0xb9, 0x06, 0x43, 0x46, - 0xbf, 0x41, 0xe9, 0x41, 0xe1, 0x34, 0xe9, 0x01, 0x42, 0xb0, 0x01, 0x30, - 0xe9, 0x41, 0x42, 0x22, 0x00, 0x43, 0xe9, 0x01, 0x49, 0x3e, 0xb8, 0x27, - 0xe9, 0x41, 0x42, 0x22, 0x00, 0x3d, 0xe9, 0x01, 0x42, 0xf3, 0x0a, 0x32, - 0xe9, 0x01, 0x42, 0x34, 0x22, 0x3b, 0xe9, 0x41, 0x42, 0xf5, 0x13, 0x33, - 0xe9, 0x01, 0x42, 0x22, 0x00, 0x3f, 0xe9, 0x01, 0x42, 0x9c, 0x01, 0x42, - 0xe9, 0x41, 0xe1, 0x3a, 0xe9, 0x01, 0x42, 0x8c, 0x05, 0x40, 0xe9, 0x41, - 0x44, 0xe9, 0x18, 0x23, 0xe9, 0x01, 0x42, 0x22, 0x00, 0x2f, 0xe9, 0x41, - 0xe1, 0x26, 0xe9, 0x01, 0x42, 0xb0, 0x01, 0x29, 0xe9, 0x41, 0x50, 0xf6, - 0x5a, 0x4b, 0xe9, 0x01, 0x44, 0x5b, 0x3e, 0x4a, 0xe9, 0x41, 0x50, 0xad, - 0x00, 0x5e, 0xe9, 0x01, 0x4d, 0xd6, 0x33, 0x5f, 0xe9, 0x41, 0x54, 0xd3, - 0x40, 0x49, 0xe9, 0x01, 0x48, 0xb5, 0x00, 0x46, 0xe9, 0x41, 0x45, 0xc3, - 0x0a, 0x58, 0xe9, 0x01, 0xa6, 0x2e, 0x44, 0x46, 0x2a, 0x59, 0xe9, 0x01, - 0x43, 0xbf, 0x0a, 0x51, 0xe9, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0xa1, - 0x1d, 0x50, 0xe9, 0x41, 0x44, 0x25, 0x01, 0x53, 0xe9, 0x01, 0x42, 0x15, - 0x02, 0x52, 0xe9, 0x41, 0x44, 0x27, 0x1d, 0x57, 0xe9, 0x01, 0x42, 0x60, - 0x25, 0x56, 0xe9, 0x41, 0x43, 0xa7, 0x05, 0x55, 0xe9, 0x01, 0x43, 0xcb, - 0x06, 0x54, 0xe9, 0x41, 0x0e, 0xba, 0x05, 0x06, 0x51, 0x58, 0x32, 0x48, - 0xe9, 0x41, 0x44, 0x01, 0x69, 0x00, 0xe9, 0x01, 0xa2, 0xbc, 0x01, 0x43, - 0x0d, 0x16, 0x15, 0xe9, 0x01, 0xa4, 0xa7, 0x01, 0xe5, 0x09, 0xe9, 0x01, - 0x42, 0xe1, 0x07, 0x0a, 0xe9, 0x01, 0xa7, 0x90, 0x01, 0x42, 0x22, 0x00, - 0x16, 0xe9, 0x01, 0xe9, 0x0b, 0xe9, 0x01, 0x44, 0x72, 0xed, 0x14, 0xe9, - 0x01, 0xab, 0x6c, 0x44, 0x9e, 0x87, 0x02, 0xe9, 0x01, 0x44, 0xee, 0xed, - 0x03, 0xe9, 0x01, 0xae, 0x4c, 0xef, 0x0c, 0xe9, 0x01, 0x42, 0x6f, 0x02, - 0x06, 0xe9, 0x01, 0x44, 0xf6, 0xe6, 0x17, 0xe9, 0x01, 0x42, 0x71, 0x00, - 0x08, 0xe9, 0x01, 0xb3, 0x28, 0x42, 0x5c, 0x01, 0x1a, 0xe9, 0x01, 0xf5, - 0x13, 0xe9, 0x01, 0x42, 0xa6, 0x0a, 0x1c, 0xe9, 0x01, 0x43, 0xc0, 0x88, - 0x0f, 0xe9, 0x01, 0xb9, 0x06, 0x43, 0x46, 0xbf, 0x1f, 0xe9, 0x41, 0xe1, - 0x12, 0xe9, 0x01, 0x42, 0xb0, 0x01, 0x0e, 0xe9, 0x41, 0x42, 0x22, 0x00, - 0x21, 0xe9, 0x01, 0x49, 0x3e, 0xb8, 0x05, 0xe9, 0x41, 0x42, 0x22, 0x00, - 0x1b, 0xe9, 0x01, 0x42, 0xf3, 0x0a, 0x10, 0xe9, 0x01, 0x42, 0x34, 0x22, - 0x19, 0xe9, 0x41, 0x42, 0xf5, 0x13, 0x11, 0xe9, 0x01, 0x42, 0x22, 0x00, - 0x1d, 0xe9, 0x01, 0x42, 0x9c, 0x01, 0x20, 0xe9, 0x41, 0xe1, 0x18, 0xe9, - 0x01, 0x42, 0x8c, 0x05, 0x1e, 0xe9, 0x41, 0x44, 0xe9, 0x18, 0x01, 0xe9, - 0x01, 0x42, 0x22, 0x00, 0x0d, 0xe9, 0x41, 0xe1, 0x04, 0xe9, 0x01, 0x42, - 0xb0, 0x01, 0x07, 0xe9, 0x41, 0x48, 0x43, 0x2d, 0xe6, 0x23, 0x00, 0x02, - 0xe8, 0x04, 0x27, 0x49, 0x9f, 0x50, 0x06, 0x00, 0x00, 0x07, 0x9f, 0xd3, - 0x11, 0x05, 0x2b, 0x38, 0x01, 0xff, 0x45, 0xb0, 0x04, 0xb4, 0x00, 0x00, - 0x44, 0x05, 0x02, 0x9f, 0x29, 0x40, 0x53, 0xf2, 0x46, 0x6d, 0x20, 0x00, - 0x52, 0x50, 0x54, 0x6b, 0x20, 0x40, 0x45, 0x19, 0xe7, 0x97, 0xfa, 0x01, - 0x46, 0x31, 0x69, 0x00, 0x21, 0x40 }; + 0x01, 0xd8, 0x07, 0x44, 0x01, 0xd9, 0x08, 0x44, 0x41, 0x57, 0xff, 0x2c, + 0x3f, 0x2a, 0x00, 0x47, 0xbf, 0xcf, 0x91, 0xf6, 0x01, 0x4f, 0xb7, 0x6c, + 0xc8, 0xf3, 0x01, 0xb0, 0x01, 0xff, 0x46, 0x15, 0x3e, 0x26, 0x00, 0x00, + 0xa8, 0x01, 0xff, 0x46, 0x34, 0xdd, 0xcf, 0xce, 0x01, 0x43, 0x4e, 0x03, + 0xfa, 0xf3, 0x41, 0x04, 0xfe, 0x05, 0xf3, 0x07, 0x14, 0x18, 0x41, 0xa8, + 0x01, 0xa5, 0x93, 0x01, 0x04, 0x75, 0xf0, 0x38, 0x02, 0x14, 0x00, 0x28, + 0x0b, 0xac, 0x6a, 0x11, 0x06, 0xf3, 0x11, 0x01, 0xff, 0x5a, 0xfe, 0x1f, + 0xd5, 0x26, 0x00, 0x4e, 0xfd, 0x78, 0x87, 0x23, 0x40, 0x4b, 0xf3, 0x28, + 0x4a, 0x22, 0x00, 0x42, 0x1e, 0x00, 0x48, 0x22, 0xc0, 0x00, 0x57, 0xc9, + 0x04, 0x6f, 0x2a, 0x40, 0x4e, 0x09, 0x76, 0x2e, 0x23, 0x00, 0x48, 0xf8, + 0x0c, 0x4c, 0x22, 0x40, 0x0e, 0x87, 0x76, 0x47, 0x47, 0x54, 0xd3, 0x7e, + 0xf4, 0x81, 0x24, 0xb3, 0x01, 0xff, 0x06, 0x26, 0xdf, 0x11, 0x05, 0x6c, + 0x18, 0x01, 0xff, 0x50, 0x76, 0x61, 0x4f, 0xcc, 0x01, 0x4e, 0x69, 0x7a, + 0x4e, 0xcc, 0x41, 0x49, 0x80, 0xb7, 0x52, 0xcc, 0x01, 0x46, 0x61, 0x2f, + 0x53, 0xcc, 0x41, 0x80, 0x01, 0xff, 0x4b, 0x29, 0x9a, 0x4d, 0xcc, 0x01, + 0x49, 0x68, 0xbd, 0x4c, 0xcc, 0x01, 0x05, 0x14, 0xeb, 0x01, 0xff, 0xd1, + 0x54, 0xcc, 0x01, 0xd2, 0x55, 0xcc, 0x41, 0x44, 0xc3, 0x00, 0x51, 0xcc, + 0x01, 0x45, 0xc8, 0x00, 0x50, 0xcc, 0x41, 0x48, 0x74, 0x98, 0x35, 0x21, + 0x00, 0x44, 0xed, 0xe5, 0x97, 0x26, 0x00, 0x42, 0x34, 0x00, 0x07, 0x00, + 0x40, 0xa1, 0xde, 0x05, 0xa2, 0xa7, 0x05, 0xa3, 0xc6, 0x04, 0xa4, 0xa5, + 0x04, 0x45, 0x52, 0x72, 0x03, 0xf7, 0x01, 0x44, 0x43, 0x91, 0x02, 0xf7, + 0x01, 0xa7, 0x8a, 0x04, 0xa8, 0xe8, 0x03, 0x04, 0x3b, 0x20, 0xd0, 0x03, + 0xac, 0xc1, 0x03, 0xad, 0xa0, 0x03, 0x02, 0x51, 0x03, 0x8f, 0x03, 0x43, + 0x29, 0xe2, 0x46, 0xf7, 0x01, 0xb0, 0xd6, 0x02, 0x03, 0xd6, 0x01, 0xc5, + 0x02, 0xb2, 0xf3, 0x01, 0xb3, 0x70, 0xb4, 0x45, 0x45, 0xeb, 0xeb, 0x55, + 0xf7, 0x01, 0xb6, 0x0f, 0x02, 0xa9, 0x01, 0x01, 0xff, 0x43, 0x8b, 0x00, + 0x04, 0xf7, 0x01, 0xf8, 0x4a, 0xf7, 0x41, 0x48, 0xc0, 0xc5, 0x28, 0xf7, + 0x01, 0xa9, 0x01, 0xff, 0x45, 0xfd, 0xe8, 0x0a, 0xf7, 0x81, 0x0d, 0x45, + 0x7d, 0xeb, 0x16, 0xf7, 0xc1, 0x00, 0x42, 0x87, 0xf3, 0x17, 0xf7, 0x41, + 0x4c, 0x47, 0x8b, 0x2f, 0xf7, 0x01, 0x8d, 0x01, 0xff, 0xd2, 0x0b, 0xf7, + 0x01, 0xd3, 0x0c, 0xf7, 0x41, 0x45, 0x6b, 0xe4, 0x3f, 0xf7, 0x81, 0x1c, + 0x02, 0x9e, 0x01, 0x0c, 0x46, 0xd1, 0x80, 0x51, 0xf7, 0x01, 0x44, 0xf1, + 0xf2, 0x4d, 0xf7, 0x41, 0x44, 0x62, 0x98, 0x29, 0xf7, 0x01, 0x45, 0x06, + 0x8b, 0x48, 0xf7, 0x41, 0x42, 0x87, 0xf3, 0x40, 0xf7, 0x41, 0x02, 0x13, + 0x00, 0x61, 0x4e, 0x5d, 0x76, 0x4f, 0xf7, 0x01, 0x45, 0x5e, 0xe7, 0x1b, + 0xf7, 0x01, 0x43, 0xba, 0xd3, 0x54, 0xf7, 0x01, 0x45, 0x58, 0xbf, 0x47, + 0xf7, 0x01, 0xb4, 0x34, 0xb5, 0x01, 0xff, 0x06, 0xff, 0x62, 0x06, 0x44, + 0x47, 0x52, 0x0d, 0xf7, 0x41, 0x05, 0x24, 0x43, 0x06, 0x43, 0xb5, 0x00, + 0x5e, 0xf7, 0x41, 0x48, 0x4b, 0x8b, 0x2c, 0xf7, 0x01, 0x46, 0xd1, 0x50, + 0x22, 0xf7, 0x01, 0x08, 0x98, 0xca, 0x01, 0xff, 0x48, 0x4b, 0x8b, 0x2e, + 0xf7, 0x01, 0x46, 0xd1, 0x50, 0x27, 0xf7, 0x41, 0x4d, 0xca, 0x80, 0x52, + 0xf7, 0x01, 0x53, 0x76, 0x4c, 0x5c, 0xf7, 0xc1, 0x00, 0x42, 0x87, 0xf3, + 0x5d, 0xf7, 0x41, 0x49, 0x0a, 0xb5, 0x39, 0xf7, 0x01, 0xf4, 0x14, 0xf7, + 0xc1, 0x00, 0x04, 0xf3, 0x01, 0x01, 0xff, 0x48, 0x4b, 0x8b, 0x2d, 0xf7, + 0x01, 0x52, 0xd1, 0x50, 0x26, 0xf7, 0x41, 0xa5, 0x0d, 0x48, 0x00, 0xc9, + 0x18, 0xf7, 0xc1, 0x00, 0x42, 0x87, 0xf3, 0x19, 0xf7, 0x41, 0x45, 0x2a, + 0xe4, 0x3b, 0xf7, 0x81, 0x33, 0x45, 0xb9, 0xe6, 0x32, 0xf7, 0x81, 0x06, + 0x44, 0x54, 0x09, 0x6d, 0xf7, 0x41, 0x04, 0xf3, 0x01, 0x0f, 0x8d, 0x01, + 0xff, 0xd2, 0x33, 0xf7, 0x01, 0xd3, 0x34, 0xf7, 0x01, 0xd4, 0x35, 0xf7, + 0x41, 0x48, 0x4b, 0x8b, 0x30, 0xf7, 0x81, 0x06, 0x44, 0x3b, 0x20, 0x1f, + 0xf7, 0x41, 0x42, 0x87, 0xf3, 0x31, 0xf7, 0x41, 0x42, 0x87, 0xf3, 0x3c, + 0xf7, 0x41, 0x47, 0xf0, 0xcf, 0x41, 0xf7, 0x01, 0x49, 0xab, 0xbc, 0x00, + 0xf7, 0x41, 0x52, 0x39, 0x52, 0x0e, 0xf7, 0x01, 0xaf, 0x15, 0x4a, 0x05, + 0xb0, 0x5f, 0xf7, 0x01, 0xb5, 0x01, 0xff, 0x44, 0x4d, 0xf2, 0x63, 0xf7, + 0x01, 0x4a, 0x17, 0xb2, 0x64, 0xf7, 0x41, 0x47, 0x17, 0xd6, 0x58, 0xf7, + 0x01, 0x44, 0x29, 0xf3, 0x4b, 0xf7, 0xc1, 0x00, 0x48, 0x78, 0xc5, 0x5a, + 0xf7, 0x41, 0x43, 0xca, 0x00, 0x6f, 0xf7, 0x01, 0x43, 0x76, 0x02, 0x15, + 0xf7, 0x41, 0x48, 0x78, 0xc3, 0x38, 0xf7, 0x01, 0x50, 0xf6, 0x62, 0x10, + 0xf7, 0x81, 0x06, 0x44, 0x49, 0xa2, 0x71, 0xf7, 0x41, 0x8d, 0x01, 0xff, + 0xd2, 0x11, 0xf7, 0x01, 0xd3, 0x12, 0xf7, 0x41, 0x47, 0x98, 0xd0, 0x2a, + 0xf7, 0x01, 0x48, 0x10, 0xc9, 0x53, 0xf7, 0x41, 0x44, 0x62, 0x98, 0x1c, + 0xf7, 0x81, 0x06, 0x4b, 0x5b, 0x98, 0x21, 0xf7, 0x41, 0x42, 0x87, 0xf3, + 0x1d, 0xf7, 0x41, 0x04, 0x23, 0x00, 0x0f, 0xaf, 0x01, 0xff, 0x48, 0x88, + 0xca, 0x56, 0xf7, 0x01, 0x42, 0x42, 0x00, 0x6e, 0xf7, 0x41, 0x44, 0xe3, + 0xb7, 0x72, 0xf7, 0x01, 0x45, 0xb6, 0xe9, 0x73, 0xf7, 0x41, 0x43, 0xe1, + 0x1a, 0x1a, 0xf7, 0x01, 0x42, 0x48, 0x04, 0x49, 0xf7, 0x41, 0x48, 0xd8, + 0xc3, 0x70, 0xf7, 0x01, 0x02, 0x5f, 0x03, 0x01, 0xff, 0x45, 0x05, 0xeb, + 0x61, 0xf7, 0x81, 0x06, 0x44, 0xfe, 0x34, 0x60, 0xf7, 0x41, 0x42, 0x87, + 0xf3, 0x62, 0xf7, 0x41, 0xa1, 0x4a, 0x47, 0xfd, 0xd1, 0x13, 0xf7, 0x01, + 0x06, 0xd2, 0x50, 0x34, 0xb2, 0x01, 0xff, 0x08, 0x08, 0xc9, 0x1a, 0x46, + 0xdc, 0xe0, 0x65, 0xf7, 0xc1, 0x00, 0x8d, 0x01, 0xff, 0xd2, 0x66, 0xf7, + 0x01, 0xd3, 0x67, 0xf7, 0x01, 0xd4, 0x68, 0xf7, 0x01, 0xd5, 0x69, 0xf7, + 0x41, 0x46, 0xd1, 0x50, 0x23, 0xf7, 0x81, 0x06, 0x44, 0x3b, 0x20, 0x1e, + 0xf7, 0x41, 0x42, 0x87, 0xf3, 0x24, 0xf7, 0x41, 0x4b, 0xd8, 0x50, 0x25, + 0xf7, 0x01, 0x43, 0xae, 0x0f, 0x20, 0xf7, 0x41, 0x46, 0x06, 0xdb, 0x50, + 0xf7, 0x01, 0x42, 0x18, 0xf5, 0x4c, 0xf7, 0x01, 0x4b, 0x77, 0xa1, 0x4e, + 0xf7, 0x41, 0x07, 0x2c, 0xcf, 0x24, 0x4a, 0x09, 0xac, 0x3e, 0xf7, 0x01, + 0x4b, 0x33, 0x9e, 0x0f, 0xf7, 0x01, 0x44, 0xe5, 0xf1, 0x42, 0xf7, 0x81, + 0x06, 0x44, 0x46, 0x21, 0x59, 0xf7, 0x41, 0x8d, 0x01, 0xff, 0xd2, 0x43, + 0xf7, 0x01, 0xd3, 0x44, 0xf7, 0x41, 0x44, 0x25, 0xf1, 0x6b, 0xf7, 0x01, + 0x47, 0x21, 0xd7, 0x6c, 0xf7, 0x41, 0x42, 0x46, 0x00, 0x01, 0xf7, 0x01, + 0xac, 0x44, 0x46, 0xfe, 0x2c, 0x5b, 0xf7, 0x01, 0x4b, 0x38, 0xa0, 0x2b, + 0xf7, 0x01, 0x03, 0x7c, 0x00, 0x12, 0x46, 0xaa, 0xdf, 0x3a, 0xf7, 0x01, + 0x44, 0x1b, 0x7c, 0x57, 0xf7, 0x01, 0x4a, 0x07, 0xb3, 0x3d, 0xf7, 0x41, + 0x80, 0x06, 0x46, 0xd2, 0xdb, 0x05, 0xf7, 0x41, 0x45, 0x42, 0xea, 0x06, + 0xf7, 0x81, 0x0d, 0x45, 0x22, 0xec, 0x08, 0xf7, 0xc1, 0x00, 0x42, 0x87, + 0xf3, 0x09, 0xf7, 0x41, 0x42, 0x87, 0xf3, 0x07, 0xf7, 0x41, 0x45, 0xec, + 0xe5, 0x6a, 0xf7, 0x01, 0x44, 0xc9, 0xf0, 0x36, 0xf7, 0x81, 0x06, 0x42, + 0x48, 0x04, 0x45, 0xf7, 0x41, 0x42, 0x87, 0xf3, 0x37, 0xf7, 0x41, 0x4b, + 0x84, 0x99, 0xfa, 0xfb, 0x01, 0x45, 0x38, 0x0b, 0xf0, 0x23, 0x40, 0x80, + 0x01, 0xff, 0x48, 0x88, 0xc3, 0xec, 0xf6, 0x01, 0x49, 0xad, 0xb7, 0xeb, + 0xf6, 0x41, 0x16, 0x3d, 0x33, 0x8c, 0x03, 0x06, 0xef, 0x06, 0xc5, 0x02, + 0x07, 0xec, 0x05, 0x6b, 0x08, 0x89, 0xae, 0x5b, 0xb3, 0x34, 0x0b, 0x40, + 0x77, 0x01, 0xff, 0xe1, 0x20, 0x17, 0x81, 0x1a, 0xe5, 0x26, 0x17, 0x01, + 0xe9, 0x22, 0x17, 0x81, 0x0d, 0xef, 0x28, 0x17, 0x01, 0xf5, 0x24, 0x17, + 0xc1, 0x00, 0xf5, 0x25, 0x17, 0x41, 0xe9, 0x23, 0x17, 0x41, 0xe1, 0x21, + 0x17, 0x01, 0xe9, 0x29, 0x17, 0x01, 0xed, 0x2a, 0x17, 0x01, 0xf7, 0x27, + 0x17, 0x41, 0x04, 0x5b, 0x03, 0x06, 0x48, 0x04, 0xa3, 0x3f, 0x17, 0x41, + 0x46, 0x64, 0xdd, 0x2b, 0x17, 0x01, 0x45, 0x97, 0xea, 0x3e, 0x17, 0x01, + 0xb3, 0x01, 0xff, 0x46, 0xaf, 0x0a, 0x3d, 0x17, 0x01, 0x4c, 0xbf, 0x91, + 0x3c, 0x17, 0x41, 0x42, 0x92, 0x01, 0x3a, 0x17, 0x01, 0x45, 0x7f, 0x2c, + 0x3b, 0x17, 0x41, 0xe1, 0x12, 0x17, 0x81, 0xb9, 0x01, 0xa2, 0xac, 0x01, + 0xa3, 0x9f, 0x01, 0xa4, 0x86, 0x01, 0xa7, 0x7a, 0x42, 0x22, 0x00, 0x11, + 0x17, 0x01, 0xaa, 0x68, 0xab, 0x5c, 0xac, 0x50, 0x42, 0x6c, 0x00, 0x09, + 0x17, 0x01, 0xae, 0x32, 0xb0, 0x26, 0x42, 0x71, 0x00, 0x0d, 0x17, 0x01, + 0x42, 0x40, 0x06, 0x0f, 0x17, 0x01, 0xb4, 0x01, 0xff, 0xe1, 0x04, 0x17, + 0x01, 0x42, 0x22, 0x00, 0x0c, 0x17, 0x01, 0xb4, 0x01, 0xff, 0xe1, 0x41, + 0x17, 0x01, 0x42, 0x22, 0x00, 0x42, 0x17, 0x41, 0xe1, 0x06, 0x17, 0x01, + 0x42, 0x22, 0x00, 0x07, 0x17, 0x41, 0xe1, 0x03, 0x17, 0x01, 0x42, 0x24, + 0x02, 0x02, 0x17, 0x01, 0x42, 0x2a, 0x05, 0x45, 0x17, 0x01, 0x42, 0xbc, + 0x22, 0x10, 0x17, 0x41, 0xe1, 0x0e, 0x17, 0x01, 0x42, 0x74, 0x00, 0x46, + 0x17, 0x41, 0xe1, 0x00, 0x17, 0x01, 0x42, 0x22, 0x00, 0x01, 0x17, 0x41, + 0xe1, 0x0a, 0x17, 0x01, 0x42, 0x22, 0x00, 0x19, 0x17, 0x41, 0xe1, 0x15, + 0x17, 0x01, 0x42, 0x22, 0x00, 0x17, 0x17, 0x41, 0xe1, 0x13, 0x17, 0x01, + 0xa4, 0x06, 0x42, 0x22, 0x00, 0x14, 0x17, 0x41, 0xe1, 0x43, 0x17, 0x01, + 0x42, 0x22, 0x00, 0x44, 0x17, 0x41, 0xe1, 0x40, 0x17, 0x01, 0x42, 0x22, + 0x00, 0x0b, 0x17, 0x41, 0xe1, 0x08, 0x17, 0x01, 0x42, 0x22, 0x00, 0x18, + 0x17, 0x41, 0x09, 0xf2, 0x11, 0x01, 0xff, 0x42, 0x16, 0x00, 0x1a, 0x17, + 0x01, 0x42, 0x24, 0x02, 0x16, 0x17, 0x01, 0x42, 0x12, 0x00, 0x05, 0x17, + 0x41, 0x45, 0x12, 0x0b, 0x38, 0x17, 0x01, 0xa6, 0x2e, 0x44, 0xcf, 0x2a, + 0x39, 0x17, 0x01, 0x43, 0x0e, 0x0b, 0x31, 0x17, 0x01, 0xb3, 0x14, 0xb4, + 0x06, 0x44, 0x43, 0x1e, 0x30, 0x17, 0x41, 0x44, 0x25, 0x01, 0x33, 0x17, + 0x01, 0x42, 0x15, 0x02, 0x32, 0x17, 0x41, 0x44, 0xc9, 0x1d, 0x37, 0x17, + 0x01, 0x42, 0x01, 0x26, 0x36, 0x17, 0x41, 0x43, 0xd2, 0x05, 0x35, 0x17, + 0x01, 0x43, 0xf6, 0x06, 0x34, 0x17, 0x41, 0xac, 0x06, 0x42, 0x71, 0x00, + 0x1e, 0x17, 0x41, 0xe1, 0x1d, 0x17, 0x01, 0x4a, 0x91, 0xab, 0x1f, 0x17, + 0x41, 0x05, 0x9b, 0xe6, 0x06, 0x4c, 0x77, 0x94, 0xa1, 0xf6, 0x41, 0x4a, + 0xa3, 0xa8, 0x02, 0x01, 0x01, 0x59, 0xe9, 0x23, 0x3c, 0x01, 0x01, 0x5c, + 0x6a, 0x18, 0x3d, 0x01, 0x01, 0x08, 0x71, 0x18, 0x84, 0x03, 0x07, 0xff, + 0x39, 0x38, 0xb7, 0x01, 0xff, 0x06, 0x31, 0x14, 0x11, 0x0e, 0x93, 0x7a, + 0x01, 0xff, 0x43, 0x23, 0x0a, 0x01, 0x01, 0x01, 0x44, 0xed, 0x07, 0x00, + 0x01, 0x41, 0x49, 0x84, 0xb6, 0x37, 0x01, 0x01, 0xa6, 0x0c, 0x4e, 0xe3, + 0x7b, 0x39, 0x01, 0x01, 0x4d, 0x38, 0x89, 0x3a, 0x01, 0x41, 0x4c, 0x7a, + 0x18, 0x38, 0x01, 0x01, 0x4d, 0x3d, 0x87, 0x3b, 0x01, 0x41, 0x45, 0x12, + 0x0b, 0x0e, 0x01, 0x81, 0xa7, 0x02, 0xa6, 0xd9, 0x01, 0x44, 0xcf, 0x2a, + 0x0f, 0x01, 0x81, 0xb6, 0x01, 0x43, 0x0e, 0x0b, 0x07, 0x01, 0x81, 0x9f, + 0x01, 0xb3, 0x59, 0xb4, 0x01, 0xff, 0x42, 0x92, 0x01, 0x10, 0x01, 0x81, + 0x49, 0xa8, 0x24, 0xb7, 0x01, 0xff, 0x44, 0xcb, 0x1d, 0x11, 0x01, 0x81, + 0x14, 0xef, 0x08, 0x01, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x47, 0x71, 0x11, + 0x1a, 0x01, 0x01, 0x48, 0x40, 0x5e, 0x23, 0x01, 0x41, 0x49, 0x3f, 0x5e, + 0x2c, 0x01, 0x41, 0x44, 0x7b, 0x11, 0x12, 0x01, 0x81, 0x16, 0x43, 0x26, + 0x01, 0x09, 0x01, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x47, 0x71, 0x11, 0x1b, + 0x01, 0x01, 0x48, 0x40, 0x5e, 0x24, 0x01, 0x41, 0x49, 0x3f, 0x5e, 0x2d, + 0x01, 0x41, 0x49, 0x3f, 0x5e, 0x2b, 0x01, 0x41, 0x44, 0xc9, 0x1d, 0x0d, + 0x01, 0x81, 0x22, 0x42, 0x01, 0x26, 0x0c, 0x01, 0xc1, 0x00, 0x80, 0x0d, + 0x42, 0x7d, 0x11, 0x15, 0x01, 0xc1, 0x00, 0x49, 0x3f, 0x5e, 0x30, 0x01, + 0x41, 0x47, 0x71, 0x11, 0x1e, 0x01, 0x01, 0x48, 0x40, 0x5e, 0x27, 0x01, + 0x41, 0x80, 0x0d, 0x42, 0x7d, 0x11, 0x16, 0x01, 0xc1, 0x00, 0x49, 0x3f, + 0x5e, 0x31, 0x01, 0x41, 0x47, 0x71, 0x11, 0x1f, 0x01, 0x01, 0x48, 0x40, + 0x5e, 0x28, 0x01, 0x41, 0x80, 0x01, 0xff, 0x47, 0x71, 0x11, 0x19, 0x01, + 0x01, 0x48, 0x40, 0x5e, 0x22, 0x01, 0x41, 0x80, 0x0d, 0x42, 0x7d, 0x11, + 0x18, 0x01, 0xc1, 0x00, 0x49, 0x3f, 0x5e, 0x33, 0x01, 0x41, 0x47, 0x71, + 0x11, 0x21, 0x01, 0x01, 0x48, 0x40, 0x5e, 0x2a, 0x01, 0x41, 0xa9, 0x26, + 0xaf, 0x01, 0xff, 0x43, 0x7c, 0x11, 0x13, 0x01, 0x81, 0x16, 0x42, 0x42, + 0x00, 0x0a, 0x01, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x47, 0x71, 0x11, 0x1c, + 0x01, 0x01, 0x48, 0x40, 0x5e, 0x25, 0x01, 0x41, 0x49, 0x3f, 0x5e, 0x2e, + 0x01, 0x41, 0x43, 0x52, 0x4d, 0x14, 0x01, 0x81, 0x16, 0x42, 0x32, 0x00, + 0x0b, 0x01, 0xc1, 0x00, 0x80, 0x01, 0xff, 0x47, 0x71, 0x11, 0x1d, 0x01, + 0x01, 0x48, 0x40, 0x5e, 0x26, 0x01, 0x41, 0x49, 0x3f, 0x5e, 0x2f, 0x01, + 0x41, 0x80, 0x0b, 0xf9, 0x17, 0x01, 0xc1, 0x00, 0x49, 0x3f, 0x5e, 0x32, + 0x01, 0x41, 0x47, 0x71, 0x11, 0x20, 0x01, 0x01, 0x48, 0x40, 0x5e, 0x29, + 0x01, 0x41, 0x4e, 0xe3, 0x7b, 0x3e, 0x01, 0x01, 0x4d, 0x38, 0x89, 0x3f, + 0x01, 0x41, 0x56, 0xed, 0x33, 0x01, 0x21, 0x00, 0x4e, 0x39, 0x78, 0x79, + 0xfa, 0x01, 0x48, 0xd8, 0xc6, 0x2c, 0x26, 0x00, 0x04, 0x4c, 0x14, 0x14, + 0xad, 0x06, 0x43, 0xb7, 0x04, 0xd1, 0xf9, 0x41, 0x44, 0x11, 0x85, 0xe5, + 0x2b, 0x00, 0x4e, 0xe1, 0x78, 0x9f, 0xf3, 0x41, 0x4f, 0x9b, 0x6a, 0x44, + 0xe9, 0x01, 0xa3, 0xd7, 0x02, 0x06, 0xef, 0x06, 0x90, 0x02, 0x07, 0x89, + 0x6d, 0xff, 0x01, 0x45, 0x56, 0x00, 0x47, 0xe9, 0x01, 0x08, 0xb8, 0x16, + 0xe8, 0x01, 0xae, 0xd9, 0x01, 0x0d, 0x76, 0x08, 0x06, 0x50, 0x86, 0x68, + 0x45, 0xe9, 0x41, 0x44, 0x9b, 0x6a, 0x22, 0xe9, 0x01, 0xa2, 0xbc, 0x01, + 0x43, 0x79, 0x16, 0x37, 0xe9, 0x01, 0xa4, 0xa7, 0x01, 0xe5, 0x2b, 0xe9, + 0x01, 0x42, 0x0c, 0x08, 0x2c, 0xe9, 0x01, 0xa7, 0x90, 0x01, 0x42, 0x22, + 0x00, 0x38, 0xe9, 0x01, 0xe9, 0x2d, 0xe9, 0x01, 0x44, 0xb1, 0xf0, 0x36, + 0xe9, 0x01, 0xab, 0x6c, 0x44, 0x68, 0x89, 0x24, 0xe9, 0x01, 0x44, 0x31, + 0xf1, 0x25, 0xe9, 0x01, 0xae, 0x4c, 0xef, 0x2e, 0xe9, 0x01, 0x42, 0x6f, + 0x02, 0x28, 0xe9, 0x01, 0x44, 0x1a, 0xea, 0x39, 0xe9, 0x01, 0x42, 0x71, + 0x00, 0x2a, 0xe9, 0x01, 0xb3, 0x28, 0x42, 0x5c, 0x01, 0x3c, 0xe9, 0x01, + 0xf5, 0x35, 0xe9, 0x01, 0x42, 0xf5, 0x0a, 0x3e, 0xe9, 0x01, 0x43, 0x8a, + 0x8a, 0x31, 0xe9, 0x01, 0xb9, 0x06, 0x43, 0xc4, 0xc1, 0x41, 0xe9, 0x41, + 0xe1, 0x34, 0xe9, 0x01, 0x42, 0xb0, 0x01, 0x30, 0xe9, 0x41, 0x42, 0x22, + 0x00, 0x43, 0xe9, 0x01, 0x49, 0xaa, 0xba, 0x27, 0xe9, 0x41, 0x42, 0x22, + 0x00, 0x3d, 0xe9, 0x01, 0x42, 0x42, 0x0b, 0x32, 0xe9, 0x01, 0x42, 0xbc, + 0x22, 0x3b, 0xe9, 0x41, 0x42, 0x44, 0x14, 0x33, 0xe9, 0x01, 0x42, 0x22, + 0x00, 0x3f, 0xe9, 0x01, 0x42, 0x9c, 0x01, 0x42, 0xe9, 0x41, 0xe1, 0x3a, + 0xe9, 0x01, 0x42, 0xb7, 0x05, 0x40, 0xe9, 0x41, 0x44, 0xd7, 0x2c, 0x23, + 0xe9, 0x01, 0x42, 0x22, 0x00, 0x2f, 0xe9, 0x41, 0xe1, 0x26, 0xe9, 0x01, + 0x42, 0xb0, 0x01, 0x29, 0xe9, 0x41, 0x50, 0x61, 0x5c, 0x4b, 0xe9, 0x01, + 0x44, 0x40, 0x3f, 0x4a, 0xe9, 0x41, 0x50, 0xad, 0x00, 0x5e, 0xe9, 0x01, + 0x4d, 0xa6, 0x34, 0x5f, 0xe9, 0x41, 0x54, 0xe0, 0x41, 0x49, 0xe9, 0x01, + 0x48, 0xb5, 0x00, 0x46, 0xe9, 0x41, 0x45, 0x12, 0x0b, 0x58, 0xe9, 0x01, + 0xa6, 0x2e, 0x44, 0xcf, 0x2a, 0x59, 0xe9, 0x01, 0x43, 0x0e, 0x0b, 0x51, + 0xe9, 0x01, 0xb3, 0x14, 0xb4, 0x06, 0x44, 0x43, 0x1e, 0x50, 0xe9, 0x41, + 0x44, 0x25, 0x01, 0x53, 0xe9, 0x01, 0x42, 0x15, 0x02, 0x52, 0xe9, 0x41, + 0x44, 0xc9, 0x1d, 0x57, 0xe9, 0x01, 0x42, 0x01, 0x26, 0x56, 0xe9, 0x41, + 0x43, 0xd2, 0x05, 0x55, 0xe9, 0x01, 0x43, 0xf6, 0x06, 0x54, 0xe9, 0x41, + 0x0e, 0xe5, 0x05, 0x06, 0x51, 0x28, 0x33, 0x48, 0xe9, 0x41, 0x44, 0x9b, + 0x6a, 0x00, 0xe9, 0x01, 0xa2, 0xbc, 0x01, 0x43, 0x79, 0x16, 0x15, 0xe9, + 0x01, 0xa4, 0xa7, 0x01, 0xe5, 0x09, 0xe9, 0x01, 0x42, 0x0c, 0x08, 0x0a, + 0xe9, 0x01, 0xa7, 0x90, 0x01, 0x42, 0x22, 0x00, 0x16, 0xe9, 0x01, 0xe9, + 0x0b, 0xe9, 0x01, 0x44, 0xb1, 0xf0, 0x14, 0xe9, 0x01, 0xab, 0x6c, 0x44, + 0x68, 0x89, 0x02, 0xe9, 0x01, 0x44, 0x31, 0xf1, 0x03, 0xe9, 0x01, 0xae, + 0x4c, 0xef, 0x0c, 0xe9, 0x01, 0x42, 0x6f, 0x02, 0x06, 0xe9, 0x01, 0x44, + 0x1a, 0xea, 0x17, 0xe9, 0x01, 0x42, 0x71, 0x00, 0x08, 0xe9, 0x01, 0xb3, + 0x28, 0x42, 0x5c, 0x01, 0x1a, 0xe9, 0x01, 0xf5, 0x13, 0xe9, 0x01, 0x42, + 0xf5, 0x0a, 0x1c, 0xe9, 0x01, 0x43, 0x8a, 0x8a, 0x0f, 0xe9, 0x01, 0xb9, + 0x06, 0x43, 0xc4, 0xc1, 0x1f, 0xe9, 0x41, 0xe1, 0x12, 0xe9, 0x01, 0x42, + 0xb0, 0x01, 0x0e, 0xe9, 0x41, 0x42, 0x22, 0x00, 0x21, 0xe9, 0x01, 0x49, + 0xaa, 0xba, 0x05, 0xe9, 0x41, 0x42, 0x22, 0x00, 0x1b, 0xe9, 0x01, 0x42, + 0x42, 0x0b, 0x10, 0xe9, 0x01, 0x42, 0xbc, 0x22, 0x19, 0xe9, 0x41, 0x42, + 0x44, 0x14, 0x11, 0xe9, 0x01, 0x42, 0x22, 0x00, 0x1d, 0xe9, 0x01, 0x42, + 0x9c, 0x01, 0x20, 0xe9, 0x41, 0xe1, 0x18, 0xe9, 0x01, 0x42, 0xb7, 0x05, + 0x1e, 0xe9, 0x41, 0x44, 0xd7, 0x2c, 0x01, 0xe9, 0x01, 0x42, 0x22, 0x00, + 0x0d, 0xe9, 0x41, 0xe1, 0x04, 0xe9, 0x01, 0x42, 0xb0, 0x01, 0x07, 0xe9, + 0x41, 0x48, 0x12, 0x2e, 0xe6, 0x23, 0x00, 0x02, 0x13, 0x05, 0x27, 0x49, + 0xe8, 0x51, 0x06, 0x00, 0x00, 0x07, 0x6b, 0xd6, 0x11, 0x05, 0xfb, 0x38, + 0x01, 0xff, 0x45, 0xdb, 0x04, 0xb4, 0x00, 0x00, 0x44, 0x05, 0x02, 0x9f, + 0x29, 0x40, 0x53, 0x28, 0x48, 0x6d, 0x20, 0x00, 0x52, 0x99, 0x55, 0x6b, + 0x20, 0x40, 0x45, 0x3d, 0xea, 0x97, 0xfa, 0x01, 0x46, 0xcb, 0x6a, 0x00, + 0x21, 0x40 }; static const cppchar_t uname2c_pairs[] = { 0xac00, 0xd7a3 /* HANGUL SYLLABLE */, 0, 0x3400, 0x4dbf /* CJK UNIFIED IDEOGRAPH- */, 0x4e00, 0x9fff /* CJK UNIFIED IDEOGRAPH- */, 0x20000, 0x2a6df /* CJK UNIFIED IDEOGRAPH- */, - 0x2a700, 0x2b739 /* CJK UNIFIED IDEOGRAPH- */, + 0x2a700, 0x2b73f /* CJK UNIFIED IDEOGRAPH- */, 0x2b740, 0x2b81d /* CJK UNIFIED IDEOGRAPH- */, - 0x2b820, 0x2cea1 /* CJK UNIFIED IDEOGRAPH- */, + 0x2b820, 0x2cead /* CJK UNIFIED IDEOGRAPH- */, 0x2ceb0, 0x2ebe0 /* CJK UNIFIED IDEOGRAPH- */, 0x2ebf0, 0x2ee5d /* CJK UNIFIED IDEOGRAPH- */, 0x30000, 0x3134a /* CJK UNIFIED IDEOGRAPH- */, - 0x31350, 0x323af /* CJK UNIFIED IDEOGRAPH- */, 0, + 0x31350, 0x323af /* CJK UNIFIED IDEOGRAPH- */, + 0x323b0, 0x33479 /* CJK UNIFIED IDEOGRAPH- */, 0, 0x13460, 0x143fa /* EGYPTIAN HIEROGLYPH- */, 0, - 0x17000, 0x187f7 /* TANGUT IDEOGRAPH- */, - 0x18d00, 0x18d08 /* TANGUT IDEOGRAPH- */, 0, + 0x17000, 0x187ff /* TANGUT IDEOGRAPH- */, + 0x18d00, 0x18d1e /* TANGUT IDEOGRAPH- */, 0, 0x18b00, 0x18cd5 /* KHITAN SMALL SCRIPT CHARACTER- */, 0, 0x1b170, 0x1b2fb /* NUSHU CHARACTER- */, 0, 0xf900, 0xfa6d /* CJK COMPATIBILITY IDEOGRAPH- */, @@ -19084,11 +19331,11 @@ static const cppchar_t uname2c_pairs[] = { static const unsigned char uname2c_generated[] = { 0 /* HANGUL SYLLABLE */, 3 /* CJK UNIFIED IDEOGRAPH- */, - 24 /* EGYPTIAN HIEROGLYPH- */, - 27 /* TANGUT IDEOGRAPH- */, - 32 /* KHITAN SMALL SCRIPT CHARACTER- */, - 35 /* NUSHU CHARACTER- */, - 38 /* CJK COMPATIBILITY IDEOGRAPH- */ }; + 26 /* EGYPTIAN HIEROGLYPH- */, + 29 /* TANGUT IDEOGRAPH- */, + 34 /* KHITAN SMALL SCRIPT CHARACTER- */, + 37 /* NUSHU CHARACTER- */, + 40 /* CJK COMPATIBILITY IDEOGRAPH- */ }; static const unsigned int uname2c_max_name_len = 88; diff --git a/libffi/ChangeLog b/libffi/ChangeLog index aa96baa27144..fa099adcb70b 100644 --- a/libffi/ChangeLog +++ b/libffi/ChangeLog @@ -1,3 +1,12 @@ +2025-10-05 Sam James + + * Makefile.in: Regenerate. + * aclocal.m4: Regenerate. + * configure: Regenerate. + * include/Makefile.in: Regenerate. + * man/Makefile.in: Regenerate. + * testsuite/Makefile.in: Regenerate. + 2024-10-24 Yang Yujie * src/loongarch64/ffi.c: Avoid defining floats diff --git a/libffi/Makefile.in b/libffi/Makefile.in index 1003b58b9443..35c903548213 100644 --- a/libffi/Makefile.in +++ b/libffi/Makefile.in @@ -100,8 +100,10 @@ ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ $(top_srcdir)/../config/asmcfi.m4 \ $(top_srcdir)/../config/cet.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/depstand.m4 \ $(top_srcdir)/../config/enable.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ $(top_srcdir)/../config/multi.m4 \ $(top_srcdir)/../config/override.m4 \ @@ -356,6 +358,7 @@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ diff --git a/libffi/aclocal.m4 b/libffi/aclocal.m4 index 736ec308d5b7..7d21fa0497c9 100644 --- a/libffi/aclocal.m4 +++ b/libffi/aclocal.m4 @@ -1190,8 +1190,10 @@ AC_SUBST([am__untar]) m4_include([../config/acx.m4]) m4_include([../config/asmcfi.m4]) m4_include([../config/cet.m4]) +m4_include([../config/clang-plugin.m4]) m4_include([../config/depstand.m4]) m4_include([../config/enable.m4]) +m4_include([../config/gcc-plugin.m4]) m4_include([../config/lead-dot.m4]) m4_include([../config/multi.m4]) m4_include([../config/override.m4]) diff --git a/libffi/configure b/libffi/configure index f82a45b13bcb..3876ec06201a 100755 --- a/libffi/configure +++ b/libffi/configure @@ -671,7 +671,6 @@ READELF ENABLE_DARWIN_AT_RPATH_FALSE ENABLE_DARWIN_AT_RPATH_TRUE CXXCPP -CPP OTOOL64 OTOOL LIPO @@ -679,6 +678,8 @@ NMEDIT DSYMUTIL RANLIB AR +LLVM_CONFIG +CPP OBJDUMP LN_S NM @@ -1667,6 +1668,43 @@ fi } # ac_fn_cxx_try_compile +# ac_fn_c_try_cpp LINENO +# ---------------------- +# Try to preprocess conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } > conftest.i && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_cpp + # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. @@ -1744,43 +1782,6 @@ $as_echo "$ac_res" >&6; } } # ac_fn_c_check_header_compile -# ac_fn_c_try_cpp LINENO -# ---------------------- -# Try to preprocess conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_cpp () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } > conftest.i && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_c_try_cpp - # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes @@ -6390,29 +6391,190 @@ test -z "$deplibs_check_method" && deplibs_check_method=unknown -plugin_option= -plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll" -for plugin in $plugin_names; do - plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin` - if test x$plugin_so = x$plugin; then - plugin_so=`${CC} ${CFLAGS} --print-file-name $plugin` - fi - if test x$plugin_so != x$plugin; then - plugin_option="--plugin $plugin_so" - break - fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +$as_echo_n "checking how to run the C preprocessor... " >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if ${ac_cv_prog_CPP+:} false; then : + $as_echo_n "(cached) " >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. -set dummy ${ac_tool_prefix}ar; ac_word=$2 + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +$as_echo "$CPP" >&6; } +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details" "$LINENO" 5; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + +# Try CLANG_PLUGIN_FILE first since GCC_PLUGIN_OPTION may return the +# wrong plugin_option with clang. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang" >&5 +$as_echo_n "checking for clang... " >&6; } +if ${clang_cv_is_clang+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifdef __clang__ + yes +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "yes" >/dev/null 2>&1; then : + clang_cv_is_clang=yes +else + clang_cv_is_clang=no +fi +rm -f conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $clang_cv_is_clang" >&5 +$as_echo "$clang_cv_is_clang" >&6; } + plugin_file= + if test $clang_cv_is_clang = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang plugin file" >&5 +$as_echo_n "checking for clang plugin file... " >&6; } + plugin_names="LLVMgold.so" + for plugin in $plugin_names; do + plugin_file=`${CC} ${CFLAGS} --print-file-name $plugin` + if test x$plugin_file = x$plugin; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}llvm-config", so it can be a program name with args. +set dummy ${ac_tool_prefix}llvm-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_AR+:} false; then : +if ${ac_cv_prog_LLVM_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else - if test -n "$AR"; then - ac_cv_prog_AR="$AR" # Let the user override the test. + if test -n "$LLVM_CONFIG"; then + ac_cv_prog_LLVM_CONFIG="$LLVM_CONFIG" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH @@ -6421,7 +6583,7 @@ do test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_AR="${ac_tool_prefix}ar" + ac_cv_prog_LLVM_CONFIG="${ac_tool_prefix}llvm-config" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi @@ -6431,10 +6593,10 @@ IFS=$as_save_IFS fi fi -AR=$ac_cv_prog_AR -if test -n "$AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 -$as_echo "$AR" >&6; } +LLVM_CONFIG=$ac_cv_prog_LLVM_CONFIG +if test -n "$LLVM_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LLVM_CONFIG" >&5 +$as_echo "$LLVM_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } @@ -6442,13 +6604,120 @@ fi fi -if test -z "$ac_cv_prog_AR"; then - ac_ct_AR=$AR - # Extract the first word of "ar", so it can be a program name with args. -set dummy ar; ac_word=$2 +if test -z "$ac_cv_prog_LLVM_CONFIG"; then + ac_ct_LLVM_CONFIG=$LLVM_CONFIG + # Extract the first word of "llvm-config", so it can be a program name with args. +set dummy llvm-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_AR+:} false; then : +if ${ac_cv_prog_ac_ct_LLVM_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_LLVM_CONFIG"; then + ac_cv_prog_ac_ct_LLVM_CONFIG="$ac_ct_LLVM_CONFIG" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_LLVM_CONFIG="llvm-config" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_LLVM_CONFIG=$ac_cv_prog_ac_ct_LLVM_CONFIG +if test -n "$ac_ct_LLVM_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LLVM_CONFIG" >&5 +$as_echo "$ac_ct_LLVM_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_LLVM_CONFIG" = x; then + LLVM_CONFIG="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + LLVM_CONFIG=$ac_ct_LLVM_CONFIG + fi +else + LLVM_CONFIG="$ac_cv_prog_LLVM_CONFIG" +fi + + if test "$?" != 0; then + as_fn_error $? "Required tool 'llvm-config' not found on PATH." "$LINENO" 5 + fi + clang_lib_dir=`$LLVM_CONFIG --libdir` + if test -f $clang_lib_dir/$plugin; then + plugin_file=$clang_lib_dir/$plugin + fi + if test x$plugin_file != x$plugin; then + break; + fi + fi + done + if test -z $plugin_file; then + as_fn_error $? "Couldn't find clang plugin file for $CC." "$LINENO" 5 + fi + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AR"; then @@ -6481,7 +6750,7 @@ $as_echo "no" >&6; } fi if test "x$ac_ct_AR" = x; then - AR="false" + AR="" else case $cross_compiling:$ac_tool_warned in yes:) @@ -6495,19 +6764,257 @@ else AR="$ac_cv_prog_AR" fi -test -z "$AR" && AR=ar -if test -n "$plugin_option"; then - if $AR --help 2>&1 | grep -q "\--plugin"; then + if test "${AR}" = "" ; then + as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5 + fi + plugin_option="--plugin $plugin_file" touch conftest.c - $AR $plugin_option rc conftest.a conftest.c + ${AR} $plugin_option rc conftest.a conftest.c if test "$?" != 0; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} - else - AR="$AR $plugin_option" + plugin_file= fi rm -f conftest.* + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_file" >&5 +$as_echo "$plugin_file" >&6; } + fi + plugin_file="$plugin_file" + +if test -n "$plugin_file"; then + plugin_option="--plugin $plugin_file" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -plugin option" >&5 +$as_echo_n "checking for -plugin option... " >&6; } + +plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll" +plugin_option= +for plugin in $plugin_names; do + plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin` + if test x$plugin_so = x$plugin; then + plugin_so=`${CC} ${CFLAGS} --print-file-name $plugin` + fi + if test x$plugin_so != x$plugin; then + plugin_option="--plugin $plugin_so" + break + fi +done +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + +if test "${AR}" = "" ; then + as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5 +fi +touch conftest.c +${AR} $plugin_option rc conftest.a conftest.c +if test "$?" != 0; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 +$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} + plugin_option= +fi +rm -f conftest.* +if test -n "$plugin_option"; then + plugin_option="$plugin_option" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_option" >&5 +$as_echo "$plugin_option" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + +fi +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + +test -z "$AR" && AR=ar +if test -n "$plugin_option"; then + case "$AR" in + *"$plugin_option"*) + ;; + *) + if $AR --help 2>&1 | grep -q "\--plugin"; then + AR="$AR $plugin_option" + fi + ;; + esac fi test -z "$AR_FLAGS" && AR_FLAGS=cru @@ -6714,9 +7221,15 @@ fi test -z "$RANLIB" && RANLIB=: if test -n "$plugin_option" && test "$RANLIB" != ":"; then - if $RANLIB --help 2>&1 | grep -q "\--plugin"; then - RANLIB="$RANLIB $plugin_option" - fi + case "$RANLIB" in + *"$plugin_option"*) + ;; + *) + if $RANLIB --help 2>&1 | grep -q "\--plugin"; then + RANLIB="$RANLIB $plugin_option" + fi + ;; + esac fi @@ -7868,144 +8381,6 @@ $as_echo "$lt_cv_ld_force_load" >&6; } ;; esac -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 -$as_echo_n "checking how to run the C preprocessor... " >&6; } -# On Suns, sometimes $CPP names a directory. -if test -n "$CPP" && test -d "$CPP"; then - CPP= -fi -if test -z "$CPP"; then - if ${ac_cv_prog_CPP+:} false; then : - $as_echo_n "(cached) " >&6 -else - # Double quotes because CPP needs to be expanded - for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" - do - ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - break -fi - - done - ac_cv_prog_CPP=$CPP - -fi - CPP=$ac_cv_prog_CPP -else - ac_cv_prog_CPP=$CPP -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 -$as_echo "$CPP" >&6; } -ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "C preprocessor \"$CPP\" fails sanity check -See \`config.log' for more details" "$LINENO" 5; } -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : @@ -11688,7 +12063,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 11691 "configure" +#line 12066 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -11794,7 +12169,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 11797 "configure" +#line 12172 "configure" #include "confdefs.h" #if HAVE_DLFCN_H diff --git a/libffi/include/Makefile.in b/libffi/include/Makefile.in index 9759f0d91dca..df8b9f64caed 100644 --- a/libffi/include/Makefile.in +++ b/libffi/include/Makefile.in @@ -94,8 +94,10 @@ ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ $(top_srcdir)/../config/asmcfi.m4 \ $(top_srcdir)/../config/cet.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/depstand.m4 \ $(top_srcdir)/../config/enable.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ $(top_srcdir)/../config/multi.m4 \ $(top_srcdir)/../config/override.m4 \ @@ -228,6 +230,7 @@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ diff --git a/libffi/man/Makefile.in b/libffi/man/Makefile.in index 18de1e836f5b..2770d403398f 100644 --- a/libffi/man/Makefile.in +++ b/libffi/man/Makefile.in @@ -93,8 +93,10 @@ ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ $(top_srcdir)/../config/asmcfi.m4 \ $(top_srcdir)/../config/cet.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/depstand.m4 \ $(top_srcdir)/../config/enable.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ $(top_srcdir)/../config/multi.m4 \ $(top_srcdir)/../config/override.m4 \ @@ -210,6 +212,7 @@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ diff --git a/libffi/testsuite/Makefile.in b/libffi/testsuite/Makefile.in index 27d48a7ad7a5..28adf7112c84 100644 --- a/libffi/testsuite/Makefile.in +++ b/libffi/testsuite/Makefile.in @@ -93,8 +93,10 @@ ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ $(top_srcdir)/../config/asmcfi.m4 \ $(top_srcdir)/../config/cet.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/depstand.m4 \ $(top_srcdir)/../config/enable.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ $(top_srcdir)/../config/multi.m4 \ $(top_srcdir)/../config/override.m4 \ @@ -183,6 +185,7 @@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ diff --git a/libgcc/ChangeLog b/libgcc/ChangeLog index 23f32f1a1e25..e539f31be44d 100644 --- a/libgcc/ChangeLog +++ b/libgcc/ChangeLog @@ -1,3 +1,26 @@ +2025-10-07 H.J. Lu + + PR target/120691 + * Makefile.in (DECNUMINC): Add -I$(srcdir)/config/$(cpu_type). + * config/i386/dfp-machine.h: New file. + * config/i386/32/dfp-machine.h: Likewise. + * config/i386/64/dfp-machine.h: Likewise. + +2025-09-30 Andre Vieira + + * config/t-softfp: Don't use softfp_wrap for bitint functions. + (softfp_cflags): New parameter that is passed to the building of bitint + functions. + +2025-09-25 John David Anglin + + * config/pa/sync-libfuncs.c (atomic_store_8): Fix asm. + +2025-09-19 Jim Lin + + * config/riscv/save-restore.S: Only save/restore the registers + which are really used for ILP32E/LP64. + 2025-08-21 Dimitar Dimitrov * config/pru/libgcc-eabi.ver: Add __pruabi_softmpyi and diff --git a/libgcc/Makefile.in b/libgcc/Makefile.in index e258f943dddd..32a5a15813f8 100644 --- a/libgcc/Makefile.in +++ b/libgcc/Makefile.in @@ -232,7 +232,8 @@ version := $(shell @get_gcc_base_ver@ $(srcdir)/../gcc/BASE-VER) ifeq ($(decimal_float),yes) ifeq ($(enable_decimal_float),bid) -DECNUMINC = -I$(srcdir)/config/libbid -DENABLE_DECIMAL_BID_FORMAT +DECNUMINC = -I$(srcdir)/config/$(cpu_type) -I$(srcdir)/config/libbid \ + -DENABLE_DECIMAL_BID_FORMAT else DECNUMINC = -I$(srcdir)/../libdecnumber/$(enable_decimal_float) \ -I$(srcdir)/../libdecnumber diff --git a/libgcc/config/avr/libf7/ChangeLog b/libgcc/config/avr/libf7/ChangeLog index b19b5b489bed..561a7536957b 100644 --- a/libgcc/config/avr/libf7/ChangeLog +++ b/libgcc/config/avr/libf7/ChangeLog @@ -1,3 +1,24 @@ +2025-10-06 Georg-Johann Lay + + * libf7-common.mk (F7_ASM_PARTS): Add D_sincos. + * libf7-asm.sx: (D_sincos): New module implements sincos / sincosl. + +2025-10-06 Georg-Johann Lay + + PR target/122177 + * libf7-common.mk (m_ddd): Remove: fmin, fmax. + (F7_ASM_PARTS): Add: D_fminfmax. + * libf7-asm.sx (D_fmanfmax): New module. + * f7-wraps.h: Rebuild. + +2025-10-06 Georg-Johann Lay + + * libf7-common.mk (g_xdd_cmp): Remove le, lt, ge, gt, ne, eq, unord. + (F7_ASM_PARTS): Add D_cmp, D_eq, D_ne, D_ge, D_gt, D_le, D_lt, D_unord. + * libf7-asm.sx (D_cmp, D_eq, D_ne, D_ge, D_gt, D_le, D_lt, D_unord): + New modules. + * f7-wraps.h: Rebuild. + 2025-05-27 Georg-Johann Lay PR target/120442 diff --git a/libgcc/config/avr/libf7/f7-wraps.h b/libgcc/config/avr/libf7/f7-wraps.h index 409492ed1d29..9033e962ad27 100644 --- a/libgcc/config/avr/libf7/f7-wraps.h +++ b/libgcc/config/avr/libf7/f7-wraps.h @@ -79,77 +79,7 @@ _ENDF __divdf3 #endif /* F7MOD_D_div_ */ ;; Functions that usually live in libgcc: __df2 for in: -;; le lt ge gt ne eq unord - -;; bool __ledf2 (double, double) ; le -#ifdef F7MOD_D_le_ -_DEFUN __ledf2 - .global F7_NAME(le_impl) - ldi ZH, hi8(gs(F7_NAME(le_impl))) - ldi ZL, lo8(gs(F7_NAME(le_impl))) - F7jmp call_xdd -_ENDF __ledf2 -#endif /* F7MOD_D_le_ */ - -;; bool __ltdf2 (double, double) ; lt -#ifdef F7MOD_D_lt_ -_DEFUN __ltdf2 - .global F7_NAME(lt_impl) - ldi ZH, hi8(gs(F7_NAME(lt_impl))) - ldi ZL, lo8(gs(F7_NAME(lt_impl))) - F7jmp call_xdd -_ENDF __ltdf2 -#endif /* F7MOD_D_lt_ */ - -;; bool __gedf2 (double, double) ; ge -#ifdef F7MOD_D_ge_ -_DEFUN __gedf2 - .global F7_NAME(ge_impl) - ldi ZH, hi8(gs(F7_NAME(ge_impl))) - ldi ZL, lo8(gs(F7_NAME(ge_impl))) - F7jmp call_xdd -_ENDF __gedf2 -#endif /* F7MOD_D_ge_ */ - -;; bool __gtdf2 (double, double) ; gt -#ifdef F7MOD_D_gt_ -_DEFUN __gtdf2 - .global F7_NAME(gt_impl) - ldi ZH, hi8(gs(F7_NAME(gt_impl))) - ldi ZL, lo8(gs(F7_NAME(gt_impl))) - F7jmp call_xdd -_ENDF __gtdf2 -#endif /* F7MOD_D_gt_ */ - -;; bool __nedf2 (double, double) ; ne -#ifdef F7MOD_D_ne_ -_DEFUN __nedf2 - .global F7_NAME(ne_impl) - ldi ZH, hi8(gs(F7_NAME(ne_impl))) - ldi ZL, lo8(gs(F7_NAME(ne_impl))) - F7jmp call_xdd -_ENDF __nedf2 -#endif /* F7MOD_D_ne_ */ - -;; bool __eqdf2 (double, double) ; eq -#ifdef F7MOD_D_eq_ -_DEFUN __eqdf2 - .global F7_NAME(eq_impl) - ldi ZH, hi8(gs(F7_NAME(eq_impl))) - ldi ZL, lo8(gs(F7_NAME(eq_impl))) - F7jmp call_xdd -_ENDF __eqdf2 -#endif /* F7MOD_D_eq_ */ - -;; bool __unorddf2 (double, double) ; unord -#ifdef F7MOD_D_unord_ -_DEFUN __unorddf2 - .global F7_NAME(unord_impl) - ldi ZH, hi8(gs(F7_NAME(unord_impl))) - ldi ZL, lo8(gs(F7_NAME(unord_impl))) - F7jmp call_xdd -_ENDF __unorddf2 -#endif /* F7MOD_D_unord_ */ +;; (none) ;; Functions that usually live in libgcc: __ for in: ;; fixdfsi fixdfdi fixunsdfdi fixunsdfsi truncdfsf2 @@ -239,7 +169,7 @@ _ENDF __extendsfdf2 ;; Functions that usually live in libm: Depending on [long] double layout, ;; define and l as weak alias(es) of __ for in: -;; pow fmin fmax fmod hypot atan2 fdim +;; pow fmod hypot atan2 fdim ;; double __pow (double, double) #ifdef F7MOD_D_pow_ @@ -253,30 +183,6 @@ _DEFUN __pow _ENDF __pow #endif /* F7MOD_D_pow_ */ -;; double __fmin (double, double) -#ifdef F7MOD_D_fmin_ -_DEFUN __fmin - DALIAS fmin - LALIAS fminl - .global F7_NAME(fmin) - ldi ZH, hi8(gs(F7_NAME(fmin))) - ldi ZL, lo8(gs(F7_NAME(fmin))) - F7jmp call_ddd -_ENDF __fmin -#endif /* F7MOD_D_fmin_ */ - -;; double __fmax (double, double) -#ifdef F7MOD_D_fmax_ -_DEFUN __fmax - DALIAS fmax - LALIAS fmaxl - .global F7_NAME(fmax) - ldi ZH, hi8(gs(F7_NAME(fmax))) - ldi ZL, lo8(gs(F7_NAME(fmax))) - F7jmp call_ddd -_ENDF __fmax -#endif /* F7MOD_D_fmax_ */ - ;; double __fmod (double, double) #ifdef F7MOD_D_fmod_ _DEFUN __fmod diff --git a/libgcc/config/avr/libf7/libf7-asm.sx b/libgcc/config/avr/libf7/libf7-asm.sx index a06792d155ff..4b42947e2ed6 100644 --- a/libgcc/config/avr/libf7/libf7-asm.sx +++ b/libgcc/config/avr/libf7/libf7-asm.sx @@ -1727,6 +1727,321 @@ ENDF class_D #endif /* F7MOD_D_class_ */ +#ifdef F7MOD_D_cmp_ + +#define A0 18 +#define A1 A0 + 1 +#define A2 A0 + 2 +#define A3 A0 + 3 +#define A4 A0 + 4 +#define A5 A0 + 5 +#define A6 A0 + 6 +#define A7 A0 + 7 + +#define B0 10 +#define B1 B0 + 1 +#define B2 B0 + 2 +#define B3 B0 + 3 +#define B4 B0 + 4 +#define B5 B0 + 5 +#define B6 B0 + 6 +#define B7 B0 + 7 + +#define AA5 XH +#define AA6 ZL +#define AA7 ZH + +#define BB0 A0 +#define BB1 A1 +#define BB2 A2 +#define BB3 A3 +#define BB4 A4 +#define BB5 A5 +#define BB6 A6 +#define BB7 A7 + +;;; Helper for __df2 and __unorddf2. +;;; T = 1: Comparison is unordered. +;;; T = 0: Comparison is ordered, and Z, N, C, S flags are set according +;;; to compare (double A, double B) as if set by a signed int comparison. +;;; Note that f(+0) = f(-0) = 0. +;;; In any case: +;;; - return R24 = 1. +;;; - return R25.0 = isNaN (A) +;;; - return R25.1 = isNaN (B) +DEFUN D_cmp + rcall D_cmp.map_i64 + bld __tmp_reg__, 0 + push __tmp_reg__ + ;; Save A somewhere else... + wmov AA6, A6 + mov AA5, A5 + push A4 + push A3 + push A2 + push A1 + mov r0, A0 + ;; ... so that we can use D_cmp.map_i64 on B. + wmov BB6, B6 + wmov BB4, B4 + wmov BB2, B2 + wmov BB0, B0 + rcall D_cmp.map_i64 + ;; Run the following code even when B is NaN (T=1) so as to pop the regs. + ;; In the non-NaN case, AA and BB can be compared like int64_t for the + ;; sake of comparing A and B as double. + CP r0, BB0 $ pop r0 + cpc r0, BB1 $ pop r0 + cpc r0, BB2 $ pop r0 + cpc r0, BB3 $ pop r0 + cpc r0, BB4 + cpc AA5, BB5 + cpc AA6, BB6 + cpc AA7, BB7 + pop r25 + ;; R25.0 <=> A is NaN + ;; R25.1 <=> B is NaN + ;; T <=> comparison is unordered + bld r25, 1 + sbrc r25, 0 + set + ldi r24, 1 + ret + +;;; A is NaN: Set T=1. +;;; A is not a NaN: Set T=0, and map double A to int64_t such that +;;; f(A) f(B) iff A B, i.e. we can treat the result +;;; as int64_t for the matter of double comparison. +;;; Clobbers: XL. +D_cmp.map_i64: + bst A7, 7 + cbr A7, 0x80 + ;; If Inf < |A|, then we have a NaN. + CP __zero_reg__, A0 + cpc __zero_reg__, A1 + cpc __zero_reg__, A2 + cpc __zero_reg__, A3 + cpc __zero_reg__, A4 + cpc __zero_reg__, A5 + ldi XL, lo8(0x7ff0) $ cpc XL, A6 + ldi XL, hi8(0x7ff0) $ cpc XL, A7 + brlo .Lunord + brtc 9f + clt + .global __negdi2 + XJMP __negdi2 +.Lunord: + set +9: ret + +ENDF D_cmp +#endif /* F7MOD_D_cmp_ */ + + +;; bool __ledf2 (double, double); +#ifdef F7MOD_D_le_ +_DEFUN __ledf2 + F7call D_cmp + brts 0f + breq 1f + brlt 1f +0: ldi r24, 0 +1: ret +_ENDF __ledf2 +#endif /* F7MOD_D_le_ */ + +;; bool __ltdf2 (double, double); +#ifdef F7MOD_D_lt_ +_DEFUN __ltdf2 + F7call D_cmp + brts 0f + brlt 1f +0: ldi r24, 0 +1: ret +_ENDF __ltdf2 +#endif /* F7MOD_D_lt_ */ + +;; bool __gedf2 (double, double); +#ifdef F7MOD_D_ge_ +_DEFUN __gedf2 + F7call D_cmp + brts 0f + brge 1f +0: ldi r24, 0 +1: ret +_ENDF __gedf2 +#endif /* F7MOD_D_ge_ */ + +;; bool __gtdf2 (double, double); +#ifdef F7MOD_D_gt_ +_DEFUN __gtdf2 + F7call D_cmp + brts 0f + breq 0f + brge 1f +0: ldi r24, 0 +1: ret +_ENDF __gtdf2 +#endif /* F7MOD_D_gt_ */ + +;; bool __nedf2 (double, double); +#ifdef F7MOD_D_ne_ +_DEFUN __nedf2 + F7call D_cmp + brts 0f + brne 1f +0: ldi r24, 0 +1: ret +_ENDF __nedf2 +#endif /* F7MOD_D_ne_ */ + +;; bool __eqdf2 (double, double); +#ifdef F7MOD_D_eq_ +_DEFUN __eqdf2 + F7call D_cmp + brts 0f + breq 1f +0: ldi r24, 0 +1: ret +_ENDF __eqdf2 +#endif /* F7MOD_D_eq_ */ + +;; bool __unorddf2 (double, double); +#ifdef F7MOD_D_unord_ +_DEFUN __unorddf2 + F7call D_cmp + bld r24, 0 + ret +_ENDF __unorddf2 +#endif /* F7MOD_D_unord_ */ + +#ifdef F7MOD_D_fminfmax_ +_DEFUN __fmin +DALIAS fmin +LALIAS fminl + inc __zero_reg__ + +_LABEL __fmax +DALIAS fmax +LALIAS fmaxl + ;; Push A[]. + push r25 + push r24 + push r23 + push r22 + push r21 + push r20 + push r19 + push r18 + ;; fmin or fmax + push __zero_reg__ + clr __zero_reg__ + + XCALL __gedf2 + + pop __tmp_reg__ + andi r25, 0x3 ; NaNs? + brne .Lnan + ;; No NaNs involved. + eor __tmp_reg__, r24 ; (f == fmin) ^ (A >= B) + brne 1f +2: + ;; Return B since the cases are: + ;; fmax && A < B + ;; fmin && A >= B +#ifdef __AVR_XMEGA__ + in XL, __SP_L__ + in XH, __SP_H__ + adiw XL, 8 + out __SP_L__, XL + out __SP_H__, XH +#else + pop r0 $ pop r0 $ pop r0 $ pop r0 + pop r0 $ pop r0 $ pop r0 $ pop r0 +#endif + wmov r24, r16 + wmov r22, r14 + wmov r20, r12 + wmov r18, r10 + ret +1: + ;; Return A since the cases are: + ;; fmax && A >= B + ;; fmin && A < B + pop r18 + pop r19 + pop r20 + pop r21 + pop r22 + pop r23 + pop r24 + pop r25 + ret + +.Lnan: + ;; There are NaNs. + ;; When only the 1st argument is a NaN, then return the 2nd argument + cpi r25, 0x1 + breq 2b + ;; When the 2nd argument is a NaN, then return the 1st argument. + ;; When both arguments are NaNs, then return NaN (e.g. the 1st argument). + rjmp 1b +_ENDF __fmax +#endif /* F7MOD_D_fminfmax_ */ + + +#ifdef F7MOD_D_sincos_ +;;; void sincos (double R18, double *R16, double *R14); +_DEFUN __sincos +DALIAS sincos +LALIAS sincosl + +#define n_pushed 4 +#define n_frame (2 * F7_SIZEOF) + do_prologue_saves n_pushed, n_frame + ;; Y = FramePointer + 1 + adiw Y, 1 + ;; R16 = frame-arg 1 + wmov r16, Y + ;; The double argument is in R18[]. + XCALL F7_NAME (set_double_impl) + ;; void f7_sincos (f7_t *ss, f7_t *cc, const f7_t *aa) + ;; Note that aa may equal ss or cc. + wmov r20, r16 ; aa + wmov r24, r16 ; ss = FP + 1 + subi r16, lo8(-F7_SIZEOF) + sbci r17, hi8(-F7_SIZEOF) + wmov r22, r16 ; cc = FP + 1 + F7_SIZEOF + XCALL F7_NAME (sincos) + + ;; double R18 = get_double (cc) + wmov r24, r16 + XCALL F7_NAME (get_double) + wmov XL, r14 ; double *pcos + rcall store.r18.X ; *pcos = R18 + + ;; double R18 = get_double (ss) + wmov r24, Y + XCALL F7_NAME (get_double) + ldd XL, Y + n_frame + 3 ; Saved R16 + ldd XH, Y + n_frame + 2 ; Saved R17 + rcall store.r18.X ; *psin = R18 + + do_epilogue_restores n_pushed, n_frame + +store.r18.X: + st X+, r18 + st X+, r19 + st X+, r20 + st X+, r21 + st X+, r22 + st X+, r23 + st X+, r24 + st X+, r25 + ret +_ENDF __sincos +#endif /* F7MOD_D_sincos_ */ + #ifdef F7MOD_call_dd_ ;; Provide double wrappers for functions that operate on f7_t and get f7_t*. @@ -1894,4 +2209,197 @@ _DEFUN __powidf2 _ENDF __powidf2 #endif /* F7MOD_D_powi_ */ + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; Fixed-point -> double conversions. + +;;; The double exponent starts at bit 52 since the encoded mantissa has 52 bits. +;;; Note that when X is a multiple of 16, then dex_lo(x) evaluates to 0. +#define dex_lo(x) hlo8((x) << (52 - 32)) +#define dex_hi(x) hhi8((x) << (52 - 32)) + +#ifdef F7MOD_usa2D_ +_DEFUN __fractusadf + ;; Convert USI to DF. + XCALL __floatunsidf + ;; The MSB indicates a value of 0. + cpse r25, __zero_reg__ + ;; Divide non-zero values by 2^16 in order to adjust for FBIT = 16. + subi r25, dex_hi (16) + ret +_ENDF __fractusadf +#endif /* F7MOD_usa2D_ */ + +#ifdef F7MOD_sa2D_ +_DEFUN __fractsadf + ;; Convert SI to DF. + XCALL __floatsidf + ;; The MSB indicates a value of 0. + tst r25 + breq 0f + ;; Divide non-zero values by 2^15 in order to adjust for FBIT = 15. + subi r24, dex_lo (15) + sbci r25, dex_hi (15) +0: ret +_ENDF __fractsadf +#endif /* F7MOD_sa2D_ */ + +#ifdef F7MOD_uha2D_ +_DEFUN __fractuhadf + ;; Extend UHA to USA. + clr r22 + mov r23, r24 + mov r24, r25 + clr r25 + XJMP __fractusadf +_ENDF __fractuhadf +#endif /* F7MOD_uha2D_ */ + +#ifdef F7MOD_ha2D_ +_DEFUN __fracthadf + ;; Extend HA to SA. + clr r22 + mov r23, r24 + mov r24, r25 + lsl r25 + sbc r25, r25 + XJMP __fractsadf +_ENDF __fracthadf +#endif /* F7MOD_ha2D_ */ + + +#ifdef F7MOD_usq2D_ +_DEFUN __fractusqdf + ;; Convert USI to DF. + XCALL __floatunsidf + ;; The MSB indicates a value of 0. + cpse r25, __zero_reg__ + ;; Divide non-zero values by 2^32 in order to adjust for FBIT = 32. + subi r25, dex_hi (32) + ret +_ENDF __fractusqdf +#endif /* F7MOD_usq2D_ */ + +#ifdef F7MOD_sq2D_ +_DEFUN __fractsqdf + ;; Convert SI to DF. + XCALL __floatsidf + ;; The MSB indicates a value of 0. + tst r25 + breq 0f + ;; Divide non-zero values by 2^31 in order to adjust for FBIT = 31. + subi r24, dex_lo (31) + sbci r25, dex_hi (31) +0: ret +_ENDF __fractsqdf +#endif /* F7MOD_sq2D_ */ + +#ifdef F7MOD_uqq2D_ +_DEFUN __fractuqqdf + ;; Extend UQQ to UHQ. + mov r25, r24 + clr r24 +_LABEL __fractuhqdf + ;; Extend UHQ to USQ. + clr r23 + clr r22 + XJMP __fractusqdf +_ENDF __fractuqqdf +#endif /* F7MOD_uqq2D_ */ + +#ifdef F7MOD_qq2D_ +_DEFUN __fractqqdf + ;; Extend QQ to HQ. + mov r25, r24 + clr r24 +_LABEL __fracthqdf + ;; Extend HQ to SQ. + clr r23 + clr r22 + XJMP __fractsqdf +_ENDF __fractqqdf +#endif /* F7MOD_qq2D_ */ + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; Fixed-point -> double conversions. + +#ifdef F7MOD_D2qq_ +_DEFUN __fractdfqq + ;; Multiply with 2^{24+7} to get a QQ result in r25. + subi r24, dex_lo (-31) + sbci r25, dex_hi (-31) + XCALL __fixdfsi + mov r24, r25 + ret +_ENDF __fractdfqq +#endif /* F7MOD_D2qq_ */ + +#ifdef F7MOD_D2uqq_ +_DEFUN __fractdfuqq + ;; Multiply with 2^{24+8} to get a UQQ result in r25. + subi r25, dex_hi (-32) + XCALL __fixunsdfsi + mov r24, r25 + ret +_ENDF __fractdfuqq +#endif /* F7MOD_D2uqq_ */ + +#ifdef F7MOD_D2ha_ +_DEFUN __fractdfha + ;; Multiply with 2^{16+7} to get a HA result in r25:r24 + subi r24, dex_lo (-23) + sbci r25, dex_hi (-23) + XJMP __fixdfsi +_ENDF __fractdfha +#endif /* F7MOD_D2ha_ */ + +#ifdef F7MOD_D2uha_ +_DEFUN __fractdfuha + ;; Multiply with 2^24 to get a UHA result in r25:r24. + subi r24, dex_lo (-24) + sbci r25, dex_hi (-24) + XJMP __fixunsdfsi +_ENDF __fractdfuha +#endif /* F7MOD_D2uha_ */ + +#ifdef F7MOD_D2hq_ +_DEFUN __fractdfhq + ;; Multiply with 2^{16+15} to get a HQ result in r25:r24 + ;; resp. with 2^31 to get a SQ result in r25:r22. +_LABEL __fractdfsq + subi r24, dex_lo (-31) + sbci r25, dex_hi (-31) + XJMP __fixdfsi +_ENDF __fractdfhq +#endif /* F7MOD_D2hq_ */ + +#ifdef F7MOD_D2uhq_ +_DEFUN __fractdfuhq + ;; Multiply with 2^{16+16} to get a UHQ result in r25:r24 + ;; resp. with 2^32 to get a USQ result in r25:r22. +_LABEL __fractdfusq + subi r25, dex_hi (-32) + XJMP __fixunsdfsi +_ENDF __fractdfuhq +#endif /* F7MOD_D2uhq_ */ + +#ifdef F7MOD_D2sa_ +_DEFUN __fractdfsa + ;; Multiply with 2^15 to get a SA result in r25:r22. + subi r24, dex_lo (-15) + sbci r25, dex_hi (-15) + XJMP __fixdfsi +_ENDF __fractdfsa +#endif /* F7MOD_D2sa_ */ + +#ifdef F7MOD_D2usa_ +_DEFUN __fractdfusa + ;; Multiply with 2^16 to get a USA result in r25:r22. + subi r25, dex_hi (-16) + XJMP __fixunsdfsi +_ENDF __fractdfusa +#endif /* F7MOD_D2usa_ */ + + #endif /* !AVR_TINY */ diff --git a/libgcc/config/avr/libf7/libf7-common.mk b/libgcc/config/avr/libf7/libf7-common.mk index 644be2cf195f..6d35454ee044 100644 --- a/libgcc/config/avr/libf7/libf7-common.mk +++ b/libgcc/config/avr/libf7/libf7-common.mk @@ -22,19 +22,28 @@ F7_ASM_PARTS += addsub_mant_scaled store load F7_ASM_PARTS += to_integer to_unsigned clz normalize_with_carry normalize F7_ASM_PARTS += store_expo sqrt16 sqrt_approx div -F7_ASM_PARTS += D_class D_fma D_powi +F7_ASM_PARTS += D_class D_fma D_powi D_sincos F7_ASM_PARTS += D_isnan D_isinf D_isfinite D_signbit D_copysign D_neg D_fabs +F7_ASM_PARTS += D_cmp D_eq D_ne D_ge D_gt D_le D_lt D_unord D_fminfmax F7_ASM_PARTS += call_dd call_ddd +# Fixed-point -> double conversions +F7_ASM_PARTS += qq2D uqq2D sq2D usq2D +F7_ASM_PARTS += ha2D uha2D sa2D usa2D + +# Double -> fixed-point conversions +F7_ASM_PARTS += D2qq D2uqq D2hq D2uhq +F7_ASM_PARTS += D2ha D2uha D2sa D2usa + # Stuff that will be wrapped in f7-wraps.h (included by libf7-asm.sx) # and give f7_asm_D_*.o modules. g_ddd += add sub mul div -g_xdd_cmp += le lt ge gt ne eq unord +g_xdd_cmp += g_dx += floatunsidf floatsidf extendsfdf2 g_xd += fixdfsi fixdfdi fixunsdfdi fixunsdfsi truncdfsf2 -m_ddd += pow fmin fmax fmod hypot atan2 fdim +m_ddd += pow fmod hypot atan2 fdim m_ddx += ldexp frexp m_dd += sqrt cbrt exp exp10 pow10 log log10 log2 sin cos tan cotan asin acos atan m_dd += ceil floor trunc round sinh cosh tanh diff --git a/libgcc/config/i386/32/dfp-machine.h b/libgcc/config/i386/32/dfp-machine.h new file mode 100644 index 000000000000..ef8fa4f3600c --- /dev/null +++ b/libgcc/config/i386/32/dfp-machine.h @@ -0,0 +1,30 @@ +#ifndef _SOFT_FLOAT +/* Get the rounding mode. */ +#define DFP_GET_ROUNDMODE \ + unsigned int _frnd_orig; \ + do \ + { \ + __asm__ __volatile__ ("fnstcw\t%0" : "=m" (_frnd_orig)); \ + _frnd_orig &= FP_RND_MASK; \ + } \ + while (0); + +/* Set the rounding mode. */ +#define DFP_SET_ROUNDMODE(round) \ + do \ + { \ + unsigned int _cw; \ + __asm__ __volatile__ ("fnstcw\t%0" : "=m" (_cw)); \ + _cw &= ~FP_RND_MASK; \ + _cw |= round; \ + __asm__ __volatile__ ("fldcw\t%0" :: "m" (_cw)); \ + if (__builtin_cpu_supports ("sse")) \ + { \ + __asm__ __volatile__ ("%vstmxcsr\t%0" : "=m" (_cw)); \ + _cw &= ~0x6000; \ + _cw |= round << 3; \ + __asm__ __volatile__ ("%vldmxcsr\t%0" :: "m" (_cw)); \ + } \ + } \ + while (0); +#endif diff --git a/libgcc/config/i386/64/dfp-machine.h b/libgcc/config/i386/64/dfp-machine.h new file mode 100644 index 000000000000..19cc16a9f96d --- /dev/null +++ b/libgcc/config/i386/64/dfp-machine.h @@ -0,0 +1,21 @@ +/* Get the rounding mode. */ +#define DFP_GET_ROUNDMODE \ + unsigned int _frnd_orig; \ + do \ + { \ + __asm__ __volatile__ ("%vstmxcsr\t%0" : "=m" (_frnd_orig)); \ + _frnd_orig &= FP_RND_MASK; \ + } \ + while (0); + +/* Set the rounding mode. */ +#define DFP_SET_ROUNDMODE(round) \ + do \ + { \ + unsigned int _cw; \ + __asm__ __volatile__ ("%vstmxcsr\t%0" : "=m" (_cw)); \ + _cw &= ~FP_RND_MASK; \ + _cw |= round; \ + __asm__ __volatile__ ("%vldmxcsr\t%0" :: "m" (_cw)); \ + } \ + while (0); diff --git a/libgcc/config/i386/dfp-machine.h b/libgcc/config/i386/dfp-machine.h new file mode 100644 index 000000000000..f6efacc7299e --- /dev/null +++ b/libgcc/config/i386/dfp-machine.h @@ -0,0 +1,59 @@ +/* Rounding mode macros for DFP libbid. x86 version. + Copyright (C) 2025 Free Software Foundation, Inc. + + 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 + . */ + +#ifndef _X86_DFP_MACHINE_H +#define _X86_DFP_MACHINE_H + +#ifdef _SOFT_FLOAT +#include_next +#else +#include "config/i386/sfp-machine.h" + +#ifdef __x86_64__ +#include "config/i386/64/dfp-machine.h" +#else +#include "config/i386/32/dfp-machine.h" +#endif + +/* Initialize the rounding mode to round-to-nearest if needed. */ +#define DFP_INIT_ROUNDMODE \ + DFP_GET_ROUNDMODE; \ + do \ + { \ + if (_frnd_orig != FP_RND_NEAREST) \ + DFP_SET_ROUNDMODE (FP_RND_NEAREST); \ + } \ + while (0); + +/* Restore the rounding mode to round-to-nearest if changed. */ +#define DFP_RESTORE_ROUNDMODE \ + do \ + { \ + if (_frnd_orig != FP_RND_NEAREST) \ + DFP_SET_ROUNDMODE (_frnd_orig); \ + } \ + while (0); +#endif + +#endif /* _X86_DFP_MACHINE_H */ diff --git a/libgcc/config/libbid/ChangeLog b/libgcc/config/libbid/ChangeLog index e6727365456e..031c7a8bb38b 100644 --- a/libgcc/config/libbid/ChangeLog +++ b/libgcc/config/libbid/ChangeLog @@ -1,3 +1,15 @@ +2025-10-07 H.J. Lu + + PR target/120691 + * bid128_div.c: Run DFP_INIT_ROUNDMODE at function entrace and + DFP_RESTORE_ROUNDMODE at function exit. + * bid128_rem.c: Likewise. + * bid128_sqrt.c: Likewise. + * bid64_div.c (bid64_div): Likewise. + * bid64_sqrt.c (bid64_sqrt): Likewise. + * bid_conf.h: Include . + * dfp-machine.h: New file. + 2025-08-30 liuhongt Revert: diff --git a/libgcc/config/libbid/bid128_div.c b/libgcc/config/libbid/bid128_div.c index 925bf14a3361..f05f9f468252 100644 --- a/libgcc/config/libbid/bid128_div.c +++ b/libgcc/config/libbid/bid128_div.c @@ -49,6 +49,9 @@ BID128_FUNCTION_ARG2 (bid128_div, x, y) fexcept_t binaryflags = 0; #endif + // Set the rounding mode to round-to-nearest (if different). + DFP_INIT_ROUNDMODE; + valid_y = unpack_BID128_value (&sign_y, &exponent_y, &CY, y); // unpack arguments, check for NaN or Infinity @@ -62,6 +65,8 @@ if ((x.w[1] & 0x7c00000000000000ull) == 0x7c00000000000000ull) { #endif res.w[1] = (CX.w[1]) & QUIET_MASK64; res.w[0] = CX.w[0]; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } // x is Infinity? @@ -75,6 +80,8 @@ if ((x.w[1] & 0x7800000000000000ull) == 0x7800000000000000ull) { #endif res.w[1] = 0x7c00000000000000ull; res.w[0] = 0; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } // y is NaN? @@ -85,6 +92,8 @@ if ((x.w[1] & 0x7800000000000000ull) == 0x7800000000000000ull) { res.w[1] = ((x.w[1] ^ y.w[1]) & 0x8000000000000000ull) | 0x7800000000000000ull; res.w[0] = 0; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } } @@ -97,6 +106,8 @@ if ((y.w[1] & 0x7800000000000000ull) < 0x7800000000000000ull) { // x=y=0, return NaN res.w[1] = 0x7c00000000000000ull; res.w[0] = 0; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } // return 0 @@ -108,6 +119,8 @@ if ((y.w[1] & 0x7800000000000000ull) < 0x7800000000000000ull) { exponent_x = 0; res.w[1] |= (((UINT64) exponent_x) << 49); res.w[0] = 0; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } } @@ -122,6 +135,8 @@ if (!valid_y) { #endif res.w[1] = CY.w[1] & QUIET_MASK64; res.w[0] = CY.w[0]; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } // y is Infinity? @@ -129,6 +144,8 @@ if (!valid_y) { // return +/-0 res.w[1] = sign_x ^ sign_y; res.w[0] = 0; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } // y is 0, return +/-Inf @@ -138,6 +155,8 @@ if (!valid_y) { res.w[1] = ((x.w[1] ^ y.w[1]) & 0x8000000000000000ull) | 0x7800000000000000ull; res.w[0] = 0; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } #ifdef UNCHANGED_BINARY_STATUS_FLAGS @@ -186,6 +205,8 @@ if (__unsigned_compare_gt_128 (CY, CX)) { #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } // get number of decimal digits in CQ @@ -379,6 +400,8 @@ if (!CA4.w[0] && !CA4.w[1]) #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } #endif @@ -469,6 +492,8 @@ if (diff_expon >= 0) { #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } @@ -477,6 +502,8 @@ get_BID128 (&res, sign_x ^ sign_y, diff_expon, CQ, &rnd_mode, pfpsf); #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif +// restore the rounding mode back if it has been changed +DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } @@ -500,6 +527,9 @@ TYPE0_FUNCTION_ARGTYPE1_ARGTYPE2 (UINT128, bid128dd_div, UINT64, x, fexcept_t binaryflags = 0; #endif + // Set the rounding mode to round-to-nearest (if different). + DFP_INIT_ROUNDMODE; + valid_y = unpack_BID64 (&sign_y, &exponent_y, &CY.w[0], y); // unpack arguments, check for NaN or Infinity @@ -519,6 +549,8 @@ if ((x & NAN_MASK64) == NAN_MASK64) { res.w[0] = (CX.w[0] & 0x0003ffffffffffffull); __mul_64x64_to_128 (res, res.w[0], power10_table_128[18].w[0]); res.w[1] |= ((CX.w[0]) & 0xfc00000000000000ull); + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } // x is Infinity? @@ -532,6 +564,8 @@ if (((x) & 0x7800000000000000ull) == 0x7800000000000000ull) { #endif res.w[1] = 0x7c00000000000000ull; res.w[0] = 0; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } if ((((y) & 0x7c00000000000000ull) != 0x7c00000000000000ull)) { @@ -539,6 +573,8 @@ if (((x) & 0x7800000000000000ull) == 0x7800000000000000ull) { res.w[1] = (((x) ^ (y)) & 0x8000000000000000ull) | 0x7800000000000000ull; res.w[0] = 0; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } } @@ -551,6 +587,8 @@ if ((((y) & 0x7800000000000000ull) != 0x7800000000000000ull)) { // x=y=0, return NaN res.w[1] = 0x7c00000000000000ull; res.w[0] = 0; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } // return 0 @@ -566,6 +604,8 @@ else if (exponent_x < 0) exponent_x = 0; res.w[1] |= (((UINT64) exponent_x) << 49); res.w[0] = 0; +// restore the rounding mode back if it has been changed +DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } } @@ -583,6 +623,8 @@ if (!valid_y) { res.w[0] = (CY.w[0] & 0x0003ffffffffffffull); __mul_64x64_to_128 (res, res.w[0], power10_table_128[18].w[0]); res.w[1] |= ((CY.w[0]) & 0xfc00000000000000ull); + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } // y is Infinity? @@ -590,6 +632,8 @@ if (!valid_y) { // return +/-0 res.w[1] = sign_x ^ sign_y; res.w[0] = 0; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } // y is 0, return +/-Inf @@ -599,6 +643,8 @@ if (!valid_y) { #ifdef SET_STATUS_FLAGS __set_status_flags (pfpsf, ZERO_DIVIDE_EXCEPTION); #endif + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } #ifdef UNCHANGED_BINARY_STATUS_FLAGS @@ -647,6 +693,8 @@ if (__unsigned_compare_gt_128 (CY, CX)) { #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } // get number of decimal digits in CQ @@ -843,6 +891,8 @@ __div_256_by_128 (&CQ, &CA4, CY); #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } #endif @@ -932,6 +982,8 @@ if (diff_expon >= 0) { #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } @@ -940,6 +992,8 @@ get_BID128 (&res, sign_x ^ sign_y, diff_expon, CQ, &rnd_mode, pfpsf); #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif +// restore the rounding mode back if it has been changed +DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } @@ -959,6 +1013,9 @@ BID128_FUNCTION_ARGTYPE1_ARG128 (bid128dq_div, UINT64, x, y) fexcept_t binaryflags = 0; #endif + // Set the rounding mode to round-to-nearest (if different) + DFP_INIT_ROUNDMODE; + valid_y = unpack_BID128_value (&sign_y, &exponent_y, &CY, y); // unpack arguments, check for NaN or Infinity @@ -978,6 +1035,8 @@ if ((x & NAN_MASK64) == NAN_MASK64) { res.w[0] = (CX.w[0] & 0x0003ffffffffffffull); __mul_64x64_to_128 (res, res.w[0], power10_table_128[18].w[0]); res.w[1] |= ((CX.w[0]) & 0xfc00000000000000ull); + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } // x is Infinity? @@ -991,6 +1050,8 @@ if ((x & 0x7800000000000000ull) == 0x7800000000000000ull) { #endif res.w[1] = 0x7c00000000000000ull; res.w[0] = 0; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } if (((y.w[1] & 0x7c00000000000000ull) != 0x7c00000000000000ull)) { @@ -998,6 +1059,8 @@ if ((x & 0x7800000000000000ull) == 0x7800000000000000ull) { res.w[1] = ((x ^ y.w[1]) & 0x8000000000000000ull) | 0x7800000000000000ull; res.w[0] = 0; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } } @@ -1010,6 +1073,8 @@ if ((y.w[1] & INFINITY_MASK64) != INFINITY_MASK64) { // x=y=0, return NaN res.w[1] = 0x7c00000000000000ull; res.w[0] = 0; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } // return 0 @@ -1021,6 +1086,8 @@ if ((y.w[1] & INFINITY_MASK64) != INFINITY_MASK64) { exponent_x = 0; res.w[1] |= (((UINT64) exponent_x) << 49); res.w[0] = 0; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } } @@ -1037,6 +1104,8 @@ if (!valid_y) { #endif res.w[1] = CY.w[1] & QUIET_MASK64; res.w[0] = CY.w[0]; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } // y is Infinity? @@ -1044,6 +1113,8 @@ if (!valid_y) { // return +/-0 res.w[1] = sign_x ^ sign_y; res.w[0] = 0; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } // y is 0, return +/-Inf @@ -1053,6 +1124,8 @@ if (!valid_y) { #ifdef SET_STATUS_FLAGS __set_status_flags (pfpsf, ZERO_DIVIDE_EXCEPTION); #endif + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } #ifdef UNCHANGED_BINARY_STATUS_FLAGS @@ -1101,6 +1174,8 @@ if (__unsigned_compare_gt_128 (CY, CX)) { #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } // get number of decimal digits in CQ @@ -1300,6 +1375,8 @@ __div_256_by_128 (&CQ, &CA4, CY); #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } #endif @@ -1389,6 +1466,8 @@ if (diff_expon >= 0) { #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } @@ -1396,6 +1475,8 @@ get_BID128 (&res, sign_x ^ sign_y, diff_expon, CQ, &rnd_mode, pfpsf); #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif +// restore the rounding mode back if it has been changed +DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } @@ -1415,6 +1496,8 @@ BID128_FUNCTION_ARG128_ARGTYPE2 (bid128qd_div, x, UINT64, y) fexcept_t binaryflags = 0; #endif + // Set the rounding mode to round-to-nearest (if different) + DFP_INIT_ROUNDMODE; valid_y = unpack_BID64 (&sign_y, &exponent_y, &CY.w[0], y); // unpack arguments, check for NaN or Infinity @@ -1428,6 +1511,8 @@ if ((x.w[1] & 0x7c00000000000000ull) == 0x7c00000000000000ull) { #endif res.w[1] = (CX.w[1]) & QUIET_MASK64; res.w[0] = CX.w[0]; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } // x is Infinity? @@ -1441,6 +1526,8 @@ if ((x.w[1] & 0x7800000000000000ull) == 0x7800000000000000ull) { #endif res.w[1] = 0x7c00000000000000ull; res.w[0] = 0; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } // y is NaN? @@ -1451,6 +1538,8 @@ if ((x.w[1] & 0x7800000000000000ull) == 0x7800000000000000ull) { res.w[1] = ((x.w[1] ^ y) & 0x8000000000000000ull) | 0x7800000000000000ull; res.w[0] = 0; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } } @@ -1463,6 +1552,8 @@ if ((y & 0x7800000000000000ull) < 0x7800000000000000ull) { // x=y=0, return NaN res.w[1] = 0x7c00000000000000ull; res.w[0] = 0; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } // return 0 @@ -1474,6 +1565,8 @@ if ((y & 0x7800000000000000ull) < 0x7800000000000000ull) { exponent_x = 0; res.w[1] |= (((UINT64) exponent_x) << 49); res.w[0] = 0; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } } @@ -1490,6 +1583,8 @@ if (!valid_y) { res.w[0] = (CY.w[0] & 0x0003ffffffffffffull); __mul_64x64_to_128 (res, res.w[0], power10_table_128[18].w[0]); res.w[1] |= ((CY.w[0]) & 0xfc00000000000000ull); + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } // y is Infinity? @@ -1497,6 +1592,8 @@ if (!valid_y) { // return +/-0 res.w[1] = ((x.w[1] ^ y) & 0x8000000000000000ull); res.w[0] = 0; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } // y is 0 @@ -1505,6 +1602,8 @@ if (!valid_y) { #endif res.w[1] = (sign_x ^ sign_y) | INFINITY_MASK64; res.w[0] = 0; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } #ifdef UNCHANGED_BINARY_STATUS_FLAGS @@ -1553,6 +1652,8 @@ if (__unsigned_compare_gt_128 (CY, CX)) { #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } // get number of decimal digits in CQ @@ -1749,6 +1850,8 @@ __div_256_by_128 (&CQ, &CA4, CY); #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } #endif @@ -1838,6 +1941,8 @@ if (diff_expon >= 0) { #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } @@ -1846,6 +1951,8 @@ get_BID128 (&res, sign_x ^ sign_y, diff_expon, CQ, &rnd_mode, pfpsf); #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif +// restore the rounding mode back if it has been changed +DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } diff --git a/libgcc/config/libbid/bid128_rem.c b/libgcc/config/libbid/bid128_rem.c index f229b2869af3..1c6da70cf590 100644 --- a/libgcc/config/libbid/bid128_rem.c +++ b/libgcc/config/libbid/bid128_rem.c @@ -35,6 +35,9 @@ BID128_FUNCTION_ARG2_NORND_CUSTOMRESTYPE (UINT128, bid128_rem, x, y) int exponent_x, exponent_y, diff_expon, bin_expon_cx, scale, scale0; + // Set the rounding mode to round-to-nearest (if different) + DFP_INIT_ROUNDMODE; + // unpack arguments, check for NaN or Infinity valid_y = unpack_BID128_value (&sign_y, &exponent_y, &CY, y); @@ -52,6 +55,8 @@ if ((x.w[1] & 0x7c00000000000000ull) == 0x7c00000000000000ull) { #endif res.w[1] = CX.w[1] & QUIET_MASK64; res.w[0] = CX.w[0]; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } // x is Infinity? @@ -66,6 +71,8 @@ if ((x.w[1] & 0x7800000000000000ull) == 0x7800000000000000ull) { #endif res.w[1] = 0x7c00000000000000ull; res.w[0] = 0; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } @@ -79,6 +86,8 @@ if ((!CY.w[1]) && (!CY.w[0])) { // x=y=0, return NaN res.w[1] = 0x7c00000000000000ull; res.w[0] = 0; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } if (valid_y || ((y.w[1] & NAN_MASK64) == INFINITY_MASK64)) { @@ -89,6 +98,8 @@ if (valid_y || ((y.w[1] & NAN_MASK64) == INFINITY_MASK64)) { res.w[1] = sign_x | (((UINT64) exponent_x) << 49); res.w[0] = 0; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } } @@ -103,6 +114,8 @@ if (!valid_y) { #endif res.w[1] = CY.w[1] & QUIET_MASK64; res.w[0] = CY.w[0]; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } // y is Infinity? @@ -110,6 +123,8 @@ if (!valid_y) { // return x res.w[1] = x.w[1]; res.w[0] = x.w[0]; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } // y is 0 @@ -119,6 +134,8 @@ if (!valid_y) { #endif res.w[1] = 0x7c00000000000000ull; res.w[0] = 0; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } @@ -130,6 +147,8 @@ if (diff_expon <= 0) { if (diff_expon > 34) { // |x|<|y| in this case res = x; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } // set exponent of y to exponent_x, scale coefficient_y @@ -139,6 +158,8 @@ if (diff_expon <= 0) { if (P256.w[2] || P256.w[3]) { // |x|<|y| in this case res = x; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } @@ -147,6 +168,8 @@ if (diff_expon <= 0) { if (__unsigned_compare_ge_128 (P256, CX2)) { // |x|<|y| in this case res = x; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } @@ -164,6 +187,8 @@ if (diff_expon <= 0) { } get_BID128_very_fast (&res, sign_x, exponent_x, CR); + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } // 2^64 @@ -200,6 +225,8 @@ while (diff_expon > 0) { // check for remainder == 0 if (!CX.w[1] && !CX.w[0]) { get_BID128_very_fast (&res, sign_x, exponent_y, CX); + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } } @@ -213,5 +240,7 @@ if ((__unsigned_compare_gt_128 (CX2, CY)) } get_BID128_very_fast (&res, sign_x, exponent_y, CX); +// restore the rounding mode back if it has been changed +DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } diff --git a/libgcc/config/libbid/bid128_sqrt.c b/libgcc/config/libbid/bid128_sqrt.c index b28038389ad1..71a033f54fe4 100644 --- a/libgcc/config/libbid/bid128_sqrt.c +++ b/libgcc/config/libbid/bid128_sqrt.c @@ -43,6 +43,9 @@ BID128_FUNCTION_ARG1 (bid128_sqrt, x) fexcept_t binaryflags = 0; #endif + // Set the rounding mode to round-to-nearest (if different) + DFP_INIT_ROUNDMODE; + // unpack arguments, check for NaN or Infinity if (!unpack_BID128_value (&sign_x, &exponent_x, &CX, x)) { res.w[1] = CX.w[1]; @@ -54,6 +57,8 @@ if ((x.w[1] & 0x7c00000000000000ull) == 0x7c00000000000000ull) { __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif res.w[1] = CX.w[1] & QUIET_MASK64; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } // x is Infinity? @@ -66,6 +71,8 @@ if ((x.w[1] & 0x7800000000000000ull) == 0x7800000000000000ull) { __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif } + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } // x is 0 otherwise @@ -74,6 +81,8 @@ res.w[1] = sign_x | ((((UINT64) (exponent_x + DECIMAL_EXPONENT_BIAS_128)) >> 1) << 49); res.w[0] = 0; +// restore the rounding mode back if it has been changed +DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } if (sign_x) { @@ -82,6 +91,8 @@ if (sign_x) { #ifdef SET_STATUS_FLAGS __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } #ifdef UNCHANGED_BINARY_STATUS_FLAGS @@ -117,6 +128,8 @@ if (CS.w[0] * CS.w[0] == A10.w[0]) { #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } } @@ -288,6 +301,8 @@ get_BID128_fast (&res, 0, #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif +// restore the rounding mode back if it has been changed +DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } @@ -302,10 +317,14 @@ BID128_FUNCTION_ARGTYPE1 (bid128d_sqrt, UINT64, x) int_float fx, f64; int exponent_x, bin_expon_cx; int digits, scale, exponent_q; + #ifdef UNCHANGED_BINARY_STATUS_FLAGS fexcept_t binaryflags = 0; #endif + // Set the rounding mode to round-to-nearest (if different) + DFP_INIT_ROUNDMODE; + // unpack arguments, check for NaN or Infinity // unpack arguments, check for NaN or Infinity CX.w[1] = 0; @@ -321,6 +340,8 @@ if ((x & 0x7c00000000000000ull) == 0x7c00000000000000ull) { res.w[0] = (CX.w[0] & 0x0003ffffffffffffull); __mul_64x64_to_128 (res, res.w[0], power10_table_128[18].w[0]); res.w[1] |= ((CX.w[0]) & 0xfc00000000000000ull); + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } // x is Infinity? @@ -332,6 +353,8 @@ if ((x & 0x7800000000000000ull) == 0x7800000000000000ull) { __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif } + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } // x is 0 otherwise @@ -342,6 +365,8 @@ res.w[1] = sign_x | ((((UINT64) (exponent_x + DECIMAL_EXPONENT_BIAS_128)) >> 1) << 49); res.w[0] = 0; +// restore the rounding mode back if it has been changed +DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } if (sign_x) { @@ -350,6 +375,8 @@ if (sign_x) { #ifdef SET_STATUS_FLAGS __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } #ifdef UNCHANGED_BINARY_STATUS_FLAGS @@ -387,6 +414,8 @@ if (CS.w[0] * CS.w[0] == A10.w[0]) { #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } } @@ -558,6 +587,8 @@ get_BID128_fast (&res, 0, (exponent_q + DECIMAL_EXPONENT_BIAS_128) >> 1, #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif +// restore the rounding mode back if it has been changed +DFP_RESTORE_ROUNDMODE; BID_RETURN (res); diff --git a/libgcc/config/libbid/bid64_div.c b/libgcc/config/libbid/bid64_div.c index 69758482b89e..5de1a4596cc9 100644 --- a/libgcc/config/libbid/bid64_div.c +++ b/libgcc/config/libbid/bid64_div.c @@ -106,6 +106,9 @@ bid64_div (UINT64 x, y = *py; #endif + // Set the rounding mode to round-to-nearest (if different) + DFP_INIT_ROUNDMODE; + valid_x = unpack_BID64 (&sign_x, &exponent_x, &coefficient_x, x); valid_y = unpack_BID64 (&sign_y, &exponent_y, &coefficient_y, y); @@ -123,6 +126,8 @@ bid64_div (UINT64 x, if ((x & SNAN_MASK64) == SNAN_MASK64) // sNaN __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (coefficient_x & QUIET_MASK64); } // x is Infinity? @@ -134,9 +139,13 @@ bid64_div (UINT64 x, #ifdef SET_STATUS_FLAGS __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (NAN_MASK64); } } else { + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; // otherwise return +/-Inf BID_RETURN (((x ^ y) & 0x8000000000000000ull) | INFINITY_MASK64); @@ -149,6 +158,8 @@ bid64_div (UINT64 x, #ifdef SET_STATUS_FLAGS __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (NAN_MASK64); } if (((y & INFINITY_MASK64) != INFINITY_MASK64)) { @@ -163,6 +174,8 @@ bid64_div (UINT64 x, exponent_x = DECIMAL_MAX_EXPON_64; else if (exponent_x < 0) exponent_x = 0; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN ((sign_x ^ sign_y) | (((UINT64) exponent_x) << 53)); } @@ -176,10 +189,14 @@ bid64_div (UINT64 x, if ((y & SNAN_MASK64) == SNAN_MASK64) // sNaN __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (coefficient_y & QUIET_MASK64); } // y is Infinity? if ((y & INFINITY_MASK64) == INFINITY_MASK64) { + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; // return +/-0 BID_RETURN (((x ^ y) & 0x8000000000000000ull)); } @@ -187,6 +204,8 @@ bid64_div (UINT64 x, #ifdef SET_STATUS_FLAGS __set_status_flags (pfpsf, ZERO_DIVIDE_EXCEPTION); #endif + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN ((sign_x ^ sign_y) | INFINITY_MASK64); } #ifdef UNCHANGED_BINARY_STATUS_FLAGS @@ -255,6 +274,8 @@ bid64_div (UINT64 x, #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } // get decimal digits of Q @@ -424,6 +445,8 @@ bid64_div (UINT64 x, #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } } @@ -494,6 +517,8 @@ bid64_div (UINT64 x, #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } else { // UF occurs @@ -510,6 +535,8 @@ bid64_div (UINT64 x, #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } @@ -532,6 +559,9 @@ unsigned rmode; fexcept_t binaryflags = 0; #endif +// Set the rounding mode to round-to-nearest (if different) +DFP_INIT_ROUNDMODE; + valid_y = unpack_BID128_value (&sign_y, &exponent_y, &CY, y); // unpack arguments, check for NaN or Infinity @@ -545,6 +575,8 @@ if (!unpack_BID64 (&sign_x, &exponent_x, &CX.w[0], (x))) { // test if x is NaN if (((x) & 0x7c00000000000000ull) == 0x7c00000000000000ull) { res = CX.w[0]; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res & QUIET_MASK64); } // x is Infinity? @@ -557,12 +589,16 @@ if (!unpack_BID64 (&sign_x, &exponent_x, &CX.w[0], (x))) { __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif res = 0x7c00000000000000ull; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } if (((y.w[1] & 0x7c00000000000000ull) != 0x7c00000000000000ull)) { // otherwise return +/-Inf res = (((x) ^ y.w[1]) & 0x8000000000000000ull) | 0x7800000000000000ull; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } } @@ -574,6 +610,8 @@ if (!unpack_BID64 (&sign_x, &exponent_x, &CX.w[0], (x))) { #endif // x=y=0, return NaN res = 0x7c00000000000000ull; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } // return 0 @@ -584,6 +622,8 @@ if (!unpack_BID64 (&sign_x, &exponent_x, &CX.w[0], (x))) { else if (exponent_x < 0) exponent_x = 0; res |= (((UINT64) exponent_x) << 53); + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } } @@ -604,12 +644,16 @@ if (!valid_y) { amount = recip_scale[18]; __shr_128 (Tmp, Qh, amount); res = (CY.w[1] & 0xfc00000000000000ull) | Tmp.w[0]; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } // y is Infinity? if ((y.w[1] & 0x7800000000000000ull) == 0x7800000000000000ull) { // return +/-0 res = sign_x ^ sign_y; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } // y is 0, return +/-Inf @@ -618,6 +662,8 @@ if (!valid_y) { #ifdef SET_STATUS_FLAGS __set_status_flags (pfpsf, ZERO_DIVIDE_EXCEPTION); #endif + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } #ifdef UNCHANGED_BINARY_STATUS_FLAGS @@ -680,6 +726,8 @@ if (__unsigned_compare_gt_128 (CY, CX)) { #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } @@ -823,6 +871,8 @@ if (!done) { #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } } @@ -905,6 +955,8 @@ if (!done) { #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } else { // UF occurs @@ -921,6 +973,8 @@ if (!done) { #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } @@ -946,6 +1000,9 @@ unsigned rmode; fexcept_t binaryflags = 0; #endif +// Set the rounding mode to round-to-nearest (if different) +DFP_INIT_ROUNDMODE; + valid_y = unpack_BID64 (&sign_y, &exponent_y, &CY.w[0], (y)); // unpack arguments, check for NaN or Infinity @@ -964,6 +1021,8 @@ if (!unpack_BID128_value (&sign_x, &exponent_x, &CX, x)) { amount = recip_scale[18]; __shr_128 (Tmp, Qh, amount); res = (CX.w[1] & 0xfc00000000000000ull) | Tmp.w[0]; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } // x is Infinity? @@ -976,12 +1035,16 @@ if (!unpack_BID128_value (&sign_x, &exponent_x, &CX, x)) { __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif res = 0x7c00000000000000ull; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } if (((y & 0x7c00000000000000ull) != 0x7c00000000000000ull)) { // otherwise return +/-Inf res = ((x.w[1] ^ (y)) & 0x8000000000000000ull) | 0x7800000000000000ull; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } } @@ -993,6 +1056,8 @@ if (!unpack_BID128_value (&sign_x, &exponent_x, &CX, x)) { #endif // x=y=0, return NaN res = 0x7c00000000000000ull; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } // return 0 @@ -1002,6 +1067,8 @@ if (!unpack_BID128_value (&sign_x, &exponent_x, &CX, x)) { __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif res = 0x7c00000000000000ull; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } exponent_x = @@ -1012,6 +1079,8 @@ if (!unpack_BID128_value (&sign_x, &exponent_x, &CX, x)) { else if (exponent_x < 0) exponent_x = 0; res = (sign_x ^ sign_y) | (((UINT64) exponent_x) << 53); + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } } @@ -1025,12 +1094,16 @@ if (!valid_y) { if ((y & SNAN_MASK64) == SNAN_MASK64) // sNaN __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (CY.w[0] & QUIET_MASK64); } // y is Infinity? if (((y) & 0x7800000000000000ull) == 0x7800000000000000ull) { // return +/-0 res = sign_x ^ sign_y; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } // y is 0, return +/-Inf @@ -1039,6 +1112,8 @@ if (!valid_y) { #ifdef SET_STATUS_FLAGS __set_status_flags (pfpsf, ZERO_DIVIDE_EXCEPTION); #endif + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } #ifdef UNCHANGED_BINARY_STATUS_FLAGS @@ -1103,6 +1178,8 @@ if (__unsigned_compare_gt_128 (CY, CX)) { #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } @@ -1252,6 +1329,8 @@ if (!done) { #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } } @@ -1337,6 +1416,8 @@ if (!done) { #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } else { // UF occurs @@ -1353,6 +1434,8 @@ if (!done) { #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } @@ -1383,6 +1466,9 @@ unsigned rmode; fexcept_t binaryflags = 0; #endif +// Set the rounding mode to round-to-nearest (if different) +DFP_INIT_ROUNDMODE; + valid_y = unpack_BID128_value (&sign_y, &exponent_y, &CY, y); // unpack arguments, check for NaN or Infinity @@ -1401,6 +1487,8 @@ if (!unpack_BID128_value (&sign_x, &exponent_x, &CX, x)) { amount = recip_scale[18]; __shr_128 (Tmp, Qh, amount); res = (CX.w[1] & 0xfc00000000000000ull) | Tmp.w[0]; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } // x is Infinity? @@ -1413,6 +1501,8 @@ if (!unpack_BID128_value (&sign_x, &exponent_x, &CX, x)) { __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif res = 0x7c00000000000000ull; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } if (((y.w[1] & 0x7c00000000000000ull) != 0x7c00000000000000ull)) { @@ -1420,6 +1510,8 @@ if (!unpack_BID128_value (&sign_x, &exponent_x, &CX, x)) { res = ((x.w[1] ^ y. w[1]) & 0x8000000000000000ull) | 0x7800000000000000ull; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } } @@ -1431,6 +1523,8 @@ if (!unpack_BID128_value (&sign_x, &exponent_x, &CX, x)) { #endif // x=y=0, return NaN res = 0x7c00000000000000ull; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } // return 0 @@ -1441,6 +1535,8 @@ if (!unpack_BID128_value (&sign_x, &exponent_x, &CX, x)) { else if (exponent_x < 0) exponent_x = 0; res |= (((UINT64) exponent_x) << 53); + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } } @@ -1460,12 +1556,16 @@ if (!valid_y) { amount = recip_scale[18]; __shr_128 (Tmp, Qh, amount); res = (CY.w[1] & 0xfc00000000000000ull) | Tmp.w[0]; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } // y is Infinity? if ((y.w[1] & 0x7800000000000000ull) == 0x7800000000000000ull) { // return +/-0 res = sign_x ^ sign_y; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } // y is 0, return +/-Inf @@ -1474,6 +1574,8 @@ if (!valid_y) { #ifdef SET_STATUS_FLAGS __set_status_flags (pfpsf, ZERO_DIVIDE_EXCEPTION); #endif + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } #ifdef UNCHANGED_BINARY_STATUS_FLAGS @@ -1536,6 +1638,8 @@ if (__unsigned_compare_gt_128 (CY, CX)) { #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } @@ -1686,6 +1790,8 @@ if (!done) { #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } } @@ -1772,6 +1878,8 @@ if (!done) { #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } else { // UF occurs @@ -1788,6 +1896,8 @@ if (!done) { #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } diff --git a/libgcc/config/libbid/bid64_sqrt.c b/libgcc/config/libbid/bid64_sqrt.c index 29f4cf1f819f..dbd06eaa153d 100644 --- a/libgcc/config/libbid/bid64_sqrt.c +++ b/libgcc/config/libbid/bid64_sqrt.c @@ -73,6 +73,7 @@ bid64_sqrt (UINT64 x _RND_MODE_PARAM _EXC_FLAGS_PARAM int exponent_x, exponent_q, bin_expon_cx; int digits_x; int scale; + #ifdef UNCHANGED_BINARY_STATUS_FLAGS fexcept_t binaryflags = 0; #endif @@ -84,6 +85,9 @@ bid64_sqrt (UINT64 x _RND_MODE_PARAM _EXC_FLAGS_PARAM x = *px; #endif + // Set the rounding mode to round-to-nearest (if different) + DFP_INIT_ROUNDMODE; + // unpack arguments, check for NaN or Infinity if (!unpack_BID64 (&sign_x, &exponent_x, &coefficient_x, x)) { // x is Inf. or NaN or 0 @@ -100,11 +104,15 @@ bid64_sqrt (UINT64 x _RND_MODE_PARAM _EXC_FLAGS_PARAM if ((x & SNAN_MASK64) == SNAN_MASK64) // sNaN __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res & QUIET_MASK64); } // x is 0 exponent_x = (exponent_x + DECIMAL_EXPONENT_BIAS) >> 1; res = sign_x | (((UINT64) exponent_x) << 53); + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } // x<0? @@ -113,6 +121,8 @@ bid64_sqrt (UINT64 x _RND_MODE_PARAM _EXC_FLAGS_PARAM #ifdef SET_STATUS_FLAGS __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } #ifdef UNCHANGED_BINARY_STATUS_FLAGS @@ -141,6 +151,8 @@ bid64_sqrt (UINT64 x _RND_MODE_PARAM _EXC_FLAGS_PARAM #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } // if exponent is odd, scale coefficient by 10 @@ -206,6 +218,8 @@ bid64_sqrt (UINT64 x _RND_MODE_PARAM _EXC_FLAGS_PARAM #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } @@ -224,6 +238,9 @@ int digits, scale, exponent_q = 0, exact = 1, amount, extra_digits; fexcept_t binaryflags = 0; #endif +// Set the rounding mode to round-to-nearest (if different) +DFP_INIT_ROUNDMODE; + // unpack arguments, check for NaN or Infinity if (!unpack_BID128_value (&sign_x, &exponent_x, &CX, x)) { res = CX.w[1]; @@ -240,6 +257,8 @@ if (!unpack_BID128_value (&sign_x, &exponent_x, &CX, x)) { amount = recip_scale[18]; __shr_128 (Tmp, Qh, amount); res = (CX.w[1] & 0xfc00000000000000ull) | Tmp.w[0]; + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } // x is Infinity? @@ -251,6 +270,8 @@ if (!unpack_BID128_value (&sign_x, &exponent_x, &CX, x)) { __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif } + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } // x is 0 otherwise @@ -264,6 +285,8 @@ if (!unpack_BID128_value (&sign_x, &exponent_x, &CX, x)) { exponent_x = DECIMAL_MAX_EXPON_64; //res= sign_x | (((UINT64)exponent_x)<<53); res = get_BID64 (sign_x, exponent_x, 0, rnd_mode, pfpsf); + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } if (sign_x) { @@ -271,6 +294,8 @@ if (sign_x) { #ifdef SET_STATUS_FLAGS __set_status_flags (pfpsf, INVALID_EXCEPTION); #endif + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } #ifdef UNCHANGED_BINARY_STATUS_FLAGS @@ -312,6 +337,8 @@ if (CS.w[0] < 10000000000000000ull) { #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif + // restore the rounding mode back if it has been changed + DFP_RESTORE_ROUNDMODE; BID_RETURN (res); } } @@ -546,6 +573,8 @@ res = get_BID64 (0, exponent_q, CS.w[0], rnd_mode, pfpsf); #ifdef UNCHANGED_BINARY_STATUS_FLAGS (void) fesetexceptflag (&binaryflags, FE_ALL_FLAGS); #endif +// restore the rounding mode back if it has been changed +DFP_RESTORE_ROUNDMODE; BID_RETURN (res); diff --git a/libgcc/config/libbid/bid_conf.h b/libgcc/config/libbid/bid_conf.h index 0f39d58d3061..56f2b348ec03 100644 --- a/libgcc/config/libbid/bid_conf.h +++ b/libgcc/config/libbid/bid_conf.h @@ -559,6 +559,8 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see #endif // #define HPUX_OS +#include + // If DECIMAL_CALL_BY_REFERENCE is defined then numerical arguments and results // are passed by reference otherwise they are passed by value (except that // a pointer is always passed to the status flags) diff --git a/libgcc/config/libbid/dfp-machine.h b/libgcc/config/libbid/dfp-machine.h new file mode 100644 index 000000000000..ae961157abba --- /dev/null +++ b/libgcc/config/libbid/dfp-machine.h @@ -0,0 +1,34 @@ +/* Rounding mode macros for DFP libbid. Dummy version. + Copyright (C) 2025 Free Software Foundation, Inc. + + 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 + . */ + +#ifndef _DFP_MACHINE_H +#define _DFP_MACHINE_H + +/* Initialize the rounding mode to round-to-nearest if needed. */ +#define DFP_INIT_ROUNDMODE + +/* Restore the rounding mode to round-to-nearest if changed. */ +#define DFP_RESTORE_ROUNDMODE + +#endif /* _DFP_MACHINE_H */ diff --git a/libgcc/config/pa/sync-libfuncs.c b/libgcc/config/pa/sync-libfuncs.c index 774c1605572b..28d08caeb6c1 100644 --- a/libgcc/config/pa/sync-libfuncs.c +++ b/libgcc/config/pa/sync-libfuncs.c @@ -133,11 +133,11 @@ atomic_store_8 (volatile void *ptr, u64 value) { double tmp; - asm volatile ("stws|stw} %2,-16(%%sp)\n\t" - "{stws|stw} %R2,-12(%%sp)\n\t" - "{fldds|fldd} -16(%%sp),%1\n\t" - "{fstds|fstd} %1,0(%0)" - : "=m" (ptr), "=&f" (tmp) : "r" (value): "memory"); + asm volatile ("{stws|stw} %1,-16(%%sp)\n\t" + "{stws|stw} %R1,-12(%%sp)\n\t" + "{fldds|fldd} -16(%%sp),%0\n\t" + : "=f" (tmp) : "r" (value): "memory"); + *(volatile double *)ptr = tmp; } #endif diff --git a/libgcc/config/riscv/save-restore.S b/libgcc/config/riscv/save-restore.S index fc654472a4c5..f6519e35e375 100644 --- a/libgcc/config/riscv/save-restore.S +++ b/libgcc/config/riscv/save-restore.S @@ -298,9 +298,8 @@ FUNC_END (__riscv_restore_0) #else #ifdef __riscv_abi_rve + FUNC_BEGIN(__riscv_save_2) -FUNC_BEGIN(__riscv_save_1) -FUNC_BEGIN(__riscv_save_0) .cfi_startproc # __riscv_save_* routine use t0/x5 as return address .cfi_return_column 5 @@ -316,21 +315,56 @@ FUNC_BEGIN(__riscv_save_0) jr t0 .cfi_endproc FUNC_END(__riscv_save_2) + +FUNC_BEGIN(__riscv_save_1) + .cfi_startproc + # __riscv_save_* routine use t0/x5 as return address + .cfi_return_column 5 + addi sp, sp, -8 + .cfi_def_cfa_offset 8 + sw s0, 0(sp) + .cfi_offset 8, -8 + sw ra, 4(sp) + .cfi_offset 1, -4 + SET_LPAD + jr t0 + .cfi_endproc FUNC_END(__riscv_save_1) + +FUNC_BEGIN(__riscv_save_0) + .cfi_startproc + # __riscv_save_* routine use t0/x5 as return address + .cfi_return_column 5 + addi sp, sp, -4 + .cfi_def_cfa_offset 4 + sw ra, 0(sp) + .cfi_offset 1, -4 + SET_LPAD + jr t0 + .cfi_endproc FUNC_END(__riscv_save_0) FUNC_BEGIN(__riscv_restore_2) -FUNC_BEGIN(__riscv_restore_1) -FUNC_BEGIN(__riscv_restore_0) .cfi_startproc - .cfi_def_cfa_offset 14 + .cfi_def_cfa_offset 12 lw s1, 0(sp) .cfi_restore 9 - lw s0, 4(sp) + addi sp, sp, 4 + +FUNC_BEGIN(__riscv_restore_1) + .cfi_restore 9 + .cfi_def_cfa_offset 8 + lw s0, 0(sp) .cfi_restore 8 - lw ra, 8(sp) + addi sp, sp, 4 + +FUNC_BEGIN(__riscv_restore_0) + .cfi_restore 8 + .cfi_restore 9 + .cfi_def_cfa_offset 4 + lw ra, 0(sp) .cfi_restore 1 - addi sp, sp, 12 + addi sp, sp, 4 .cfi_def_cfa_offset 0 ret .cfi_endproc diff --git a/libgcc/config/t-softfp b/libgcc/config/t-softfp index b352dfaa24aa..c08b681b9617 100644 --- a/libgcc/config/t-softfp +++ b/libgcc/config/t-softfp @@ -73,12 +73,15 @@ softfp_bid_list += bitintpow10 \ floatti$(m) floatunti$(m)) endif +softfp_bitint_func_list := \ + $(foreach m,sf df,$(softfp_floatbitint_funcs)) \ + $(bitint_extras) + softfp_func_list := \ $(foreach m,$(softfp_float_modes), \ $(softfp_float_funcs) \ $(foreach i,$(softfp_int_modes), \ $(softfp_floatint_funcs))) \ - $(foreach m,sf df,$(softfp_floatbitint_funcs)) \ $(foreach e,$(softfp_extensions),extend$(e)2) \ $(foreach t,$(softfp_truncations),trunc$(t)2) \ $(softfp_extras) @@ -93,7 +96,8 @@ softfp_func_list := $(filter-out floatdidf floatdisf fixunsdfsi fixunssfsi \ endif ifeq ($(softfp_compat),y) -softfp_file_list := $(addsuffix .c,$(softfp_func_list)) +softfp_file_list := $(addsuffix .c,$(softfp_func_list)) \ + $(addsuffix .c,$(softfp_bitint_func_list)) ifeq ($(enable_shared),yes) softfp_map_dep := libgcc.map.in @@ -124,6 +128,8 @@ else softfp_file_list := \ $(addsuffix .c,$(addprefix $(srcdir)/soft-fp/,$(softfp_func_list))) endif +softfp_file_list += \ + $(addsuffix .c,$(addprefix $(srcdir)/soft-fp/,$(softfp_bitint_func_list))) endif softfp_bid_file_list := \ $(addsuffix .c,$(addprefix $(srcdir)/soft-fp/,$(softfp_bid_list))) @@ -137,7 +143,7 @@ soft-fp-objects-base = $(basename $(notdir $(softfp_file_list))) soft-fp-objects = $(addsuffix $(objext), $(soft-fp-objects-base)) \ $(addsuffix _s$(objext), $(soft-fp-objects-base)) -$(soft-fp-objects) : INTERNAL_CFLAGS += -Wno-missing-prototypes -Wno-type-limits +$(soft-fp-objects) : INTERNAL_CFLAGS += -Wno-missing-prototypes -Wno-type-limits $(softfp_cflags) LIB2ADD += $(softfp_file_list) LIB2ADD_ST += $(softfp_bid_file_list) diff --git a/libgcobol/ChangeLog b/libgcobol/ChangeLog index d6bd7e8121c8..a291753b8ce2 100644 --- a/libgcobol/ChangeLog +++ b/libgcobol/ChangeLog @@ -1,3 +1,9 @@ +2025-10-05 Sam James + + * Makefile.in: Regenerate. + * aclocal.m4: Regenerate. + * configure: Regenerate. + 2025-09-05 Robert Dubner * common-defs.h (enum cbl_field_attr_t): Define register_e. diff --git a/libgcobol/Makefile.in b/libgcobol/Makefile.in index 42dc82323077..61b9e8669d03 100644 --- a/libgcobol/Makefile.in +++ b/libgcobol/Makefile.in @@ -117,7 +117,9 @@ target_triplet = @target@ @BUILD_LIBGCOBOL_TRUE@@ENABLE_DARWIN_AT_RPATH_TRUE@ -Wl,-rpath,@loader_path subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/../config/depstand.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/../config/clang-plugin.m4 \ + $(top_srcdir)/../config/depstand.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/iconv.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ $(top_srcdir)/../config/lib-ld.m4 \ @@ -295,6 +297,7 @@ LIBQUADSPEC = @LIBQUADSPEC@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBOBJS = @LTLIBOBJS@ diff --git a/libgcobol/aclocal.m4 b/libgcobol/aclocal.m4 index c3c69e6ce4b1..e28744caea2f 100644 --- a/libgcobol/aclocal.m4 +++ b/libgcobol/aclocal.m4 @@ -1167,7 +1167,9 @@ AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR +m4_include([../config/clang-plugin.m4]) m4_include([../config/depstand.m4]) +m4_include([../config/gcc-plugin.m4]) m4_include([../config/iconv.m4]) m4_include([../config/lead-dot.m4]) m4_include([../config/lib-ld.m4]) diff --git a/libgcobol/configure b/libgcobol/configure index d130002b2b95..ecbfd33732a7 100755 --- a/libgcobol/configure +++ b/libgcobol/configure @@ -669,6 +669,7 @@ OTOOL LIPO NMEDIT DSYMUTIL +LLVM_CONFIG OBJDUMP LN_S ac_ct_DUMPBIN @@ -6747,8 +6748,266 @@ test -z "$deplibs_check_method" && deplibs_check_method=unknown -plugin_option= + +# Try CLANG_PLUGIN_FILE first since GCC_PLUGIN_OPTION may return the +# wrong plugin_option with clang. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang" >&5 +$as_echo_n "checking for clang... " >&6; } +if ${clang_cv_is_clang+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifdef __clang__ + yes +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "yes" >/dev/null 2>&1; then : + clang_cv_is_clang=yes +else + clang_cv_is_clang=no +fi +rm -f conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $clang_cv_is_clang" >&5 +$as_echo "$clang_cv_is_clang" >&6; } + plugin_file= + if test $clang_cv_is_clang = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang plugin file" >&5 +$as_echo_n "checking for clang plugin file... " >&6; } + plugin_names="LLVMgold.so" + for plugin in $plugin_names; do + plugin_file=`${CC} ${CFLAGS} --print-file-name $plugin` + if test x$plugin_file = x$plugin; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}llvm-config", so it can be a program name with args. +set dummy ${ac_tool_prefix}llvm-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_LLVM_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$LLVM_CONFIG"; then + ac_cv_prog_LLVM_CONFIG="$LLVM_CONFIG" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_LLVM_CONFIG="${ac_tool_prefix}llvm-config" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +LLVM_CONFIG=$ac_cv_prog_LLVM_CONFIG +if test -n "$LLVM_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LLVM_CONFIG" >&5 +$as_echo "$LLVM_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_LLVM_CONFIG"; then + ac_ct_LLVM_CONFIG=$LLVM_CONFIG + # Extract the first word of "llvm-config", so it can be a program name with args. +set dummy llvm-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_LLVM_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_LLVM_CONFIG"; then + ac_cv_prog_ac_ct_LLVM_CONFIG="$ac_ct_LLVM_CONFIG" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_LLVM_CONFIG="llvm-config" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_LLVM_CONFIG=$ac_cv_prog_ac_ct_LLVM_CONFIG +if test -n "$ac_ct_LLVM_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LLVM_CONFIG" >&5 +$as_echo "$ac_ct_LLVM_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_LLVM_CONFIG" = x; then + LLVM_CONFIG="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + LLVM_CONFIG=$ac_ct_LLVM_CONFIG + fi +else + LLVM_CONFIG="$ac_cv_prog_LLVM_CONFIG" +fi + + if test "$?" != 0; then + as_fn_error $? "Required tool 'llvm-config' not found on PATH." "$LINENO" 5 + fi + clang_lib_dir=`$LLVM_CONFIG --libdir` + if test -f $clang_lib_dir/$plugin; then + plugin_file=$clang_lib_dir/$plugin + fi + if test x$plugin_file != x$plugin; then + break; + fi + fi + done + if test -z $plugin_file; then + as_fn_error $? "Couldn't find clang plugin file for $CC." "$LINENO" 5 + fi + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + + if test "${AR}" = "" ; then + as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5 + fi + plugin_option="--plugin $plugin_file" + touch conftest.c + ${AR} $plugin_option rc conftest.a conftest.c + if test "$?" != 0; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 +$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} + plugin_file= + fi + rm -f conftest.* + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_file" >&5 +$as_echo "$plugin_file" >&6; } + fi + plugin_file="$plugin_file" + +if test -n "$plugin_file"; then + plugin_option="--plugin $plugin_file" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -plugin option" >&5 +$as_echo_n "checking for -plugin option... " >&6; } + plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll" +plugin_option= for plugin in $plugin_names; do plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin` if test x$plugin_so = x$plugin; then @@ -6759,7 +7018,119 @@ for plugin in $plugin_names; do break fi done +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + +if test "${AR}" = "" ; then + as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5 +fi +touch conftest.c +${AR} $plugin_option rc conftest.a conftest.c +if test "$?" != 0; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 +$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} + plugin_option= +fi +rm -f conftest.* +if test -n "$plugin_option"; then + plugin_option="$plugin_option" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_option" >&5 +$as_echo "$plugin_option" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + +fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. set dummy ${ac_tool_prefix}ar; ac_word=$2 @@ -6854,17 +7225,15 @@ fi test -z "$AR" && AR=ar if test -n "$plugin_option"; then - if $AR --help 2>&1 | grep -q "\--plugin"; then - touch conftest.c - $AR $plugin_option rc conftest.a conftest.c - if test "$?" != 0; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 -$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} - else + case "$AR" in + *"$plugin_option"*) + ;; + *) + if $AR --help 2>&1 | grep -q "\--plugin"; then AR="$AR $plugin_option" fi - rm -f conftest.* - fi + ;; + esac fi test -z "$AR_FLAGS" && AR_FLAGS=cru @@ -7071,9 +7440,15 @@ fi test -z "$RANLIB" && RANLIB=: if test -n "$plugin_option" && test "$RANLIB" != ":"; then - if $RANLIB --help 2>&1 | grep -q "\--plugin"; then - RANLIB="$RANLIB $plugin_option" - fi + case "$RANLIB" in + *"$plugin_option"*) + ;; + *) + if $RANLIB --help 2>&1 | grep -q "\--plugin"; then + RANLIB="$RANLIB $plugin_option" + fi + ;; + esac fi @@ -11810,7 +12185,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 11813 "configure" +#line 12188 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -11916,7 +12291,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 11919 "configure" +#line 12294 "configure" #include "confdefs.h" #if HAVE_DLFCN_H diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog index dc950cd17431..c4a8b8e982ce 100644 --- a/libgfortran/ChangeLog +++ b/libgfortran/ChangeLog @@ -1,3 +1,9 @@ +2025-10-05 Sam James + + * Makefile.in: Regenerate. + * aclocal.m4: Regenerate. + * configure: Regenerate. + 2025-09-02 Paul Thomas PR fortran/87669 diff --git a/libgfortran/Makefile.in b/libgfortran/Makefile.in index dd88f8893b7f..ce828b2f8d0e 100644 --- a/libgfortran/Makefile.in +++ b/libgfortran/Makefile.in @@ -159,7 +159,9 @@ target_triplet = @target@ subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/../config/depstand.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/../config/clang-plugin.m4 \ + $(top_srcdir)/../config/depstand.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/hwcaps.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ $(top_srcdir)/../config/lthostflags.m4 \ @@ -835,6 +837,7 @@ LIBQUADSPEC = @LIBQUADSPEC@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ diff --git a/libgfortran/aclocal.m4 b/libgfortran/aclocal.m4 index 89e5496db5ed..9cbf1a8922d9 100644 --- a/libgfortran/aclocal.m4 +++ b/libgfortran/aclocal.m4 @@ -1167,7 +1167,9 @@ AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR +m4_include([../config/clang-plugin.m4]) m4_include([../config/depstand.m4]) +m4_include([../config/gcc-plugin.m4]) m4_include([../config/hwcaps.m4]) m4_include([../config/lead-dot.m4]) m4_include([../config/lthostflags.m4]) diff --git a/libgfortran/configure b/libgfortran/configure index 9898a94a372a..c6b00a9a2a4e 100755 --- a/libgfortran/configure +++ b/libgfortran/configure @@ -665,6 +665,7 @@ OTOOL LIPO NMEDIT DSYMUTIL +LLVM_CONFIG OBJDUMP LN_S NM @@ -7786,8 +7787,266 @@ test -z "$deplibs_check_method" && deplibs_check_method=unknown -plugin_option= + +# Try CLANG_PLUGIN_FILE first since GCC_PLUGIN_OPTION may return the +# wrong plugin_option with clang. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang" >&5 +$as_echo_n "checking for clang... " >&6; } +if ${clang_cv_is_clang+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifdef __clang__ + yes +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "yes" >/dev/null 2>&1; then : + clang_cv_is_clang=yes +else + clang_cv_is_clang=no +fi +rm -f conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $clang_cv_is_clang" >&5 +$as_echo "$clang_cv_is_clang" >&6; } + plugin_file= + if test $clang_cv_is_clang = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang plugin file" >&5 +$as_echo_n "checking for clang plugin file... " >&6; } + plugin_names="LLVMgold.so" + for plugin in $plugin_names; do + plugin_file=`${CC} ${CFLAGS} --print-file-name $plugin` + if test x$plugin_file = x$plugin; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}llvm-config", so it can be a program name with args. +set dummy ${ac_tool_prefix}llvm-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_LLVM_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$LLVM_CONFIG"; then + ac_cv_prog_LLVM_CONFIG="$LLVM_CONFIG" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_LLVM_CONFIG="${ac_tool_prefix}llvm-config" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +LLVM_CONFIG=$ac_cv_prog_LLVM_CONFIG +if test -n "$LLVM_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LLVM_CONFIG" >&5 +$as_echo "$LLVM_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_LLVM_CONFIG"; then + ac_ct_LLVM_CONFIG=$LLVM_CONFIG + # Extract the first word of "llvm-config", so it can be a program name with args. +set dummy llvm-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_LLVM_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_LLVM_CONFIG"; then + ac_cv_prog_ac_ct_LLVM_CONFIG="$ac_ct_LLVM_CONFIG" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_LLVM_CONFIG="llvm-config" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_LLVM_CONFIG=$ac_cv_prog_ac_ct_LLVM_CONFIG +if test -n "$ac_ct_LLVM_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LLVM_CONFIG" >&5 +$as_echo "$ac_ct_LLVM_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_LLVM_CONFIG" = x; then + LLVM_CONFIG="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + LLVM_CONFIG=$ac_ct_LLVM_CONFIG + fi +else + LLVM_CONFIG="$ac_cv_prog_LLVM_CONFIG" +fi + + if test "$?" != 0; then + as_fn_error $? "Required tool 'llvm-config' not found on PATH." "$LINENO" 5 + fi + clang_lib_dir=`$LLVM_CONFIG --libdir` + if test -f $clang_lib_dir/$plugin; then + plugin_file=$clang_lib_dir/$plugin + fi + if test x$plugin_file != x$plugin; then + break; + fi + fi + done + if test -z $plugin_file; then + as_fn_error $? "Couldn't find clang plugin file for $CC." "$LINENO" 5 + fi + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + + if test "${AR}" = "" ; then + as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5 + fi + plugin_option="--plugin $plugin_file" + touch conftest.c + ${AR} $plugin_option rc conftest.a conftest.c + if test "$?" != 0; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 +$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} + plugin_file= + fi + rm -f conftest.* + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_file" >&5 +$as_echo "$plugin_file" >&6; } + fi + plugin_file="$plugin_file" + +if test -n "$plugin_file"; then + plugin_option="--plugin $plugin_file" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -plugin option" >&5 +$as_echo_n "checking for -plugin option... " >&6; } + plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll" +plugin_option= for plugin in $plugin_names; do plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin` if test x$plugin_so = x$plugin; then @@ -7798,7 +8057,119 @@ for plugin in $plugin_names; do break fi done +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + +if test "${AR}" = "" ; then + as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5 +fi +touch conftest.c +${AR} $plugin_option rc conftest.a conftest.c +if test "$?" != 0; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 +$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} + plugin_option= +fi +rm -f conftest.* +if test -n "$plugin_option"; then + plugin_option="$plugin_option" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_option" >&5 +$as_echo "$plugin_option" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + +fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. set dummy ${ac_tool_prefix}ar; ac_word=$2 @@ -7893,17 +8264,15 @@ fi test -z "$AR" && AR=ar if test -n "$plugin_option"; then - if $AR --help 2>&1 | grep -q "\--plugin"; then - touch conftest.c - $AR $plugin_option rc conftest.a conftest.c - if test "$?" != 0; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 -$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} - else + case "$AR" in + *"$plugin_option"*) + ;; + *) + if $AR --help 2>&1 | grep -q "\--plugin"; then AR="$AR $plugin_option" fi - rm -f conftest.* - fi + ;; + esac fi test -z "$AR_FLAGS" && AR_FLAGS=cru @@ -8110,9 +8479,15 @@ fi test -z "$RANLIB" && RANLIB=: if test -n "$plugin_option" && test "$RANLIB" != ":"; then - if $RANLIB --help 2>&1 | grep -q "\--plugin"; then - RANLIB="$RANLIB $plugin_option" - fi + case "$RANLIB" in + *"$plugin_option"*) + ;; + *) + if $RANLIB --help 2>&1 | grep -q "\--plugin"; then + RANLIB="$RANLIB $plugin_option" + fi + ;; + esac fi @@ -12847,7 +13222,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 12850 "configure" +#line 13225 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -12953,7 +13328,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 12956 "configure" +#line 13331 "configure" #include "confdefs.h" #if HAVE_DLFCN_H diff --git a/libgm2/ChangeLog b/libgm2/ChangeLog index c068292c09e8..5e3460ff7c6e 100644 --- a/libgm2/ChangeLog +++ b/libgm2/ChangeLog @@ -1,3 +1,26 @@ +2025-10-07 Jonathan Wakely + + * configure.host: Fix spelling in comment. + +2025-10-05 Sam James + + * Makefile.in: Regenerate. + * aclocal.m4: Regenerate. + * configure: Regenerate. + * libm2cor/Makefile.in: Regenerate. + * libm2iso/Makefile.in: Regenerate. + * libm2log/Makefile.in: Regenerate. + * libm2min/Makefile.in: Regenerate. + * libm2pim/Makefile.in: Regenerate. + +2025-09-19 Gaius Mulley + + * libm2pim/Makefile.am (M2MODS): Add M2Diagnostic.mod. + Add M2WIDESET.mod. + (M2DEFS): Add M2Diagnostic.def. + Add M2WIDESET.def. + * libm2pim/Makefile.in: Regenerate. + 2025-07-23 Gaius Mulley PR modula2/121164 diff --git a/libgm2/Makefile.in b/libgm2/Makefile.in index 9cd79824a53d..af46b30ad608 100644 --- a/libgm2/Makefile.in +++ b/libgm2/Makefile.in @@ -91,7 +91,9 @@ target_triplet = @target@ subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/depstand.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ $(top_srcdir)/../config/multi.m4 \ $(top_srcdir)/../config/no-executables.m4 \ @@ -215,6 +217,7 @@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ diff --git a/libgm2/aclocal.m4 b/libgm2/aclocal.m4 index 19cfb0d1eb26..80a7ff961962 100644 --- a/libgm2/aclocal.m4 +++ b/libgm2/aclocal.m4 @@ -1188,7 +1188,9 @@ AC_SUBST([am__untar]) ]) # _AM_PROG_TAR m4_include([../config/acx.m4]) +m4_include([../config/clang-plugin.m4]) m4_include([../config/depstand.m4]) +m4_include([../config/gcc-plugin.m4]) m4_include([../config/lead-dot.m4]) m4_include([../config/multi.m4]) m4_include([../config/no-executables.m4]) diff --git a/libgm2/configure b/libgm2/configure index 8ffdb3116250..95fcbfe2ee5a 100755 --- a/libgm2/configure +++ b/libgm2/configure @@ -656,6 +656,7 @@ OTOOL LIPO NMEDIT DSYMUTIL +LLVM_CONFIG OBJDUMP ac_ct_DUMPBIN DUMPBIN @@ -9791,8 +9792,266 @@ test -z "$deplibs_check_method" && deplibs_check_method=unknown -plugin_option= + +# Try CLANG_PLUGIN_FILE first since GCC_PLUGIN_OPTION may return the +# wrong plugin_option with clang. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang" >&5 +$as_echo_n "checking for clang... " >&6; } +if ${clang_cv_is_clang+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifdef __clang__ + yes +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "yes" >/dev/null 2>&1; then : + clang_cv_is_clang=yes +else + clang_cv_is_clang=no +fi +rm -f conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $clang_cv_is_clang" >&5 +$as_echo "$clang_cv_is_clang" >&6; } + plugin_file= + if test $clang_cv_is_clang = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang plugin file" >&5 +$as_echo_n "checking for clang plugin file... " >&6; } + plugin_names="LLVMgold.so" + for plugin in $plugin_names; do + plugin_file=`${CC} ${CFLAGS} --print-file-name $plugin` + if test x$plugin_file = x$plugin; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}llvm-config", so it can be a program name with args. +set dummy ${ac_tool_prefix}llvm-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_LLVM_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$LLVM_CONFIG"; then + ac_cv_prog_LLVM_CONFIG="$LLVM_CONFIG" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_LLVM_CONFIG="${ac_tool_prefix}llvm-config" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +LLVM_CONFIG=$ac_cv_prog_LLVM_CONFIG +if test -n "$LLVM_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LLVM_CONFIG" >&5 +$as_echo "$LLVM_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_LLVM_CONFIG"; then + ac_ct_LLVM_CONFIG=$LLVM_CONFIG + # Extract the first word of "llvm-config", so it can be a program name with args. +set dummy llvm-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_LLVM_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_LLVM_CONFIG"; then + ac_cv_prog_ac_ct_LLVM_CONFIG="$ac_ct_LLVM_CONFIG" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_LLVM_CONFIG="llvm-config" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_LLVM_CONFIG=$ac_cv_prog_ac_ct_LLVM_CONFIG +if test -n "$ac_ct_LLVM_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LLVM_CONFIG" >&5 +$as_echo "$ac_ct_LLVM_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_LLVM_CONFIG" = x; then + LLVM_CONFIG="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + LLVM_CONFIG=$ac_ct_LLVM_CONFIG + fi +else + LLVM_CONFIG="$ac_cv_prog_LLVM_CONFIG" +fi + + if test "$?" != 0; then + as_fn_error $? "Required tool 'llvm-config' not found on PATH." "$LINENO" 5 + fi + clang_lib_dir=`$LLVM_CONFIG --libdir` + if test -f $clang_lib_dir/$plugin; then + plugin_file=$clang_lib_dir/$plugin + fi + if test x$plugin_file != x$plugin; then + break; + fi + fi + done + if test -z $plugin_file; then + as_fn_error $? "Couldn't find clang plugin file for $CC." "$LINENO" 5 + fi + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + + if test "${AR}" = "" ; then + as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5 + fi + plugin_option="--plugin $plugin_file" + touch conftest.c + ${AR} $plugin_option rc conftest.a conftest.c + if test "$?" != 0; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 +$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} + plugin_file= + fi + rm -f conftest.* + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_file" >&5 +$as_echo "$plugin_file" >&6; } + fi + plugin_file="$plugin_file" + +if test -n "$plugin_file"; then + plugin_option="--plugin $plugin_file" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -plugin option" >&5 +$as_echo_n "checking for -plugin option... " >&6; } + plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll" +plugin_option= for plugin in $plugin_names; do plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin` if test x$plugin_so = x$plugin; then @@ -9803,7 +10062,119 @@ for plugin in $plugin_names; do break fi done +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + +if test "${AR}" = "" ; then + as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5 +fi +touch conftest.c +${AR} $plugin_option rc conftest.a conftest.c +if test "$?" != 0; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 +$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} + plugin_option= +fi +rm -f conftest.* +if test -n "$plugin_option"; then + plugin_option="$plugin_option" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_option" >&5 +$as_echo "$plugin_option" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + +fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. set dummy ${ac_tool_prefix}ar; ac_word=$2 @@ -9898,17 +10269,15 @@ fi test -z "$AR" && AR=ar if test -n "$plugin_option"; then - if $AR --help 2>&1 | grep -q "\--plugin"; then - touch conftest.c - $AR $plugin_option rc conftest.a conftest.c - if test "$?" != 0; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 -$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} - else + case "$AR" in + *"$plugin_option"*) + ;; + *) + if $AR --help 2>&1 | grep -q "\--plugin"; then AR="$AR $plugin_option" fi - rm -f conftest.* - fi + ;; + esac fi test -z "$AR_FLAGS" && AR_FLAGS=cru @@ -10115,9 +10484,15 @@ fi test -z "$RANLIB" && RANLIB=: if test -n "$plugin_option" && test "$RANLIB" != ":"; then - if $RANLIB --help 2>&1 | grep -q "\--plugin"; then - RANLIB="$RANLIB $plugin_option" - fi + case "$RANLIB" in + *"$plugin_option"*) + ;; + *) + if $RANLIB --help 2>&1 | grep -q "\--plugin"; then + RANLIB="$RANLIB $plugin_option" + fi + ;; + esac fi @@ -14854,7 +15229,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 14857 "configure" +#line 15232 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -14960,7 +15335,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 14963 "configure" +#line 15338 "configure" #include "confdefs.h" #if HAVE_DLFCN_H diff --git a/libgm2/configure.host b/libgm2/configure.host index 2806fd6872b3..b96a37cab170 100644 --- a/libgm2/configure.host +++ b/libgm2/configure.host @@ -200,10 +200,10 @@ cpu_opt_ext_random=cpu/generic/opt/bits/opt_random.h # Set any OS-dependent bits. # Set the os_include_dir. -# Set the error_costants_dir. +# Set the error_constants_dir. # Set c_model, c_compatibility here. # If atomic ops and/or numeric limits are OS-specific rather than -# CPU-specifc, set those here too. +# CPU-specific, set those here too. # THIS TABLE IS SORTED. KEEP IT THAT WAY. case "${host_os}" in aix[56789]*) diff --git a/libgm2/libm2cor/Makefile.in b/libgm2/libm2cor/Makefile.in index f9952cff71a7..19efef15b829 100644 --- a/libgm2/libm2cor/Makefile.in +++ b/libgm2/libm2cor/Makefile.in @@ -109,7 +109,9 @@ target_triplet = @target@ subdir = libm2cor ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/depstand.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ $(top_srcdir)/../config/multi.m4 \ $(top_srcdir)/../config/no-executables.m4 \ @@ -292,6 +294,7 @@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ diff --git a/libgm2/libm2iso/Makefile.in b/libgm2/libm2iso/Makefile.in index 308c023b9967..d6b143eaf234 100644 --- a/libgm2/libm2iso/Makefile.in +++ b/libgm2/libm2iso/Makefile.in @@ -109,7 +109,9 @@ target_triplet = @target@ subdir = libm2iso ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/depstand.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ $(top_srcdir)/../config/multi.m4 \ $(top_srcdir)/../config/no-executables.m4 \ @@ -318,6 +320,7 @@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ diff --git a/libgm2/libm2log/Makefile.in b/libgm2/libm2log/Makefile.in index dcd5941ccd00..93dcc6639fd5 100644 --- a/libgm2/libm2log/Makefile.in +++ b/libgm2/libm2log/Makefile.in @@ -109,7 +109,9 @@ target_triplet = @target@ subdir = libm2log ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/depstand.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ $(top_srcdir)/../config/multi.m4 \ $(top_srcdir)/../config/no-executables.m4 \ @@ -281,6 +283,7 @@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ diff --git a/libgm2/libm2min/Makefile.in b/libgm2/libm2min/Makefile.in index 93bf8a4586dc..2c6bb9a77f5c 100644 --- a/libgm2/libm2min/Makefile.in +++ b/libgm2/libm2min/Makefile.in @@ -109,7 +109,9 @@ target_triplet = @target@ subdir = libm2min ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/depstand.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ $(top_srcdir)/../config/multi.m4 \ $(top_srcdir)/../config/no-executables.m4 \ @@ -271,6 +273,7 @@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ diff --git a/libgm2/libm2pim/Makefile.am b/libgm2/libm2pim/Makefile.am index 56bbb3e4a07d..91990d710927 100644 --- a/libgm2/libm2pim/Makefile.am +++ b/libgm2/libm2pim/Makefile.am @@ -99,6 +99,8 @@ toolexeclib_LTLIBRARIES = libm2pim.la M2MODS = ASCII.mod IO.mod \ Args.mod M2RTS.mod \ M2Dependent.mod \ + M2Diagnostic.mod \ + M2WIDESET.mod \ Assertion.mod NumberIO.mod \ Break.mod SYSTEM.mod \ CmdArgs.mod Scan.mod \ @@ -142,8 +144,10 @@ M2DEFS = Args.def ASCII.def \ LegacyReal.def libc.def \ libm.def LMathLib0.def \ M2Dependent.def \ + M2Diagnostic.def \ M2EXCEPTION.def \ M2RTS.def \ + M2WIDESET.def \ MathLib0.def MemUtils.def \ NumberIO.def PushBackInput.def \ RTExceptions.def RTint.def \ diff --git a/libgm2/libm2pim/Makefile.in b/libgm2/libm2pim/Makefile.in index 63f8fc908735..139aec94ec08 100644 --- a/libgm2/libm2pim/Makefile.in +++ b/libgm2/libm2pim/Makefile.in @@ -109,7 +109,9 @@ target_triplet = @target@ subdir = libm2pim ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/depstand.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ $(top_srcdir)/../config/multi.m4 \ $(top_srcdir)/../config/no-executables.m4 \ @@ -158,11 +160,12 @@ am__installdirs = "$(DESTDIR)$(toolexeclibdir)" LTLIBRARIES = $(toolexeclib_LTLIBRARIES) libm2pim_la_LIBADD = @BUILD_PIMLIB_TRUE@am__objects_1 = ASCII.lo IO.lo Args.lo M2RTS.lo \ -@BUILD_PIMLIB_TRUE@ M2Dependent.lo Assertion.lo NumberIO.lo \ -@BUILD_PIMLIB_TRUE@ Break.lo SYSTEM.lo CmdArgs.lo Scan.lo \ -@BUILD_PIMLIB_TRUE@ StrCase.lo FIO.lo StrIO.lo StrLib.lo \ -@BUILD_PIMLIB_TRUE@ TimeString.lo Environment.lo FpuIO.lo \ -@BUILD_PIMLIB_TRUE@ Debug.lo SysStorage.lo Storage.lo StdIO.lo \ +@BUILD_PIMLIB_TRUE@ M2Dependent.lo M2Diagnostic.lo M2WIDESET.lo \ +@BUILD_PIMLIB_TRUE@ Assertion.lo NumberIO.lo Break.lo SYSTEM.lo \ +@BUILD_PIMLIB_TRUE@ CmdArgs.lo Scan.lo StrCase.lo FIO.lo \ +@BUILD_PIMLIB_TRUE@ StrIO.lo StrLib.lo TimeString.lo \ +@BUILD_PIMLIB_TRUE@ Environment.lo FpuIO.lo Debug.lo \ +@BUILD_PIMLIB_TRUE@ SysStorage.lo Storage.lo StdIO.lo \ @BUILD_PIMLIB_TRUE@ SEnvironment.lo DynamicStrings.lo SFIO.lo \ @BUILD_PIMLIB_TRUE@ SArgs.lo SCmdArgs.lo PushBackInput.lo \ @BUILD_PIMLIB_TRUE@ StringConvert.lo FormatStrings.lo \ @@ -308,6 +311,7 @@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ @@ -478,6 +482,8 @@ FLAGS_TO_PASS = $(AM_MAKEFLAGS) @BUILD_PIMLIB_TRUE@M2MODS = ASCII.mod IO.mod \ @BUILD_PIMLIB_TRUE@ Args.mod M2RTS.mod \ @BUILD_PIMLIB_TRUE@ M2Dependent.mod \ +@BUILD_PIMLIB_TRUE@ M2Diagnostic.mod \ +@BUILD_PIMLIB_TRUE@ M2WIDESET.mod \ @BUILD_PIMLIB_TRUE@ Assertion.mod NumberIO.mod \ @BUILD_PIMLIB_TRUE@ Break.mod SYSTEM.mod \ @BUILD_PIMLIB_TRUE@ CmdArgs.mod Scan.mod \ @@ -521,8 +527,10 @@ FLAGS_TO_PASS = $(AM_MAKEFLAGS) @BUILD_PIMLIB_TRUE@ LegacyReal.def libc.def \ @BUILD_PIMLIB_TRUE@ libm.def LMathLib0.def \ @BUILD_PIMLIB_TRUE@ M2Dependent.def \ +@BUILD_PIMLIB_TRUE@ M2Diagnostic.def \ @BUILD_PIMLIB_TRUE@ M2EXCEPTION.def \ @BUILD_PIMLIB_TRUE@ M2RTS.def \ +@BUILD_PIMLIB_TRUE@ M2WIDESET.def \ @BUILD_PIMLIB_TRUE@ MathLib0.def MemUtils.def \ @BUILD_PIMLIB_TRUE@ NumberIO.def PushBackInput.def \ @BUILD_PIMLIB_TRUE@ RTExceptions.def RTint.def \ diff --git a/libgomp/ChangeLog b/libgomp/ChangeLog index 6bcf823dd012..66f26a62a10c 100644 --- a/libgomp/ChangeLog +++ b/libgomp/ChangeLog @@ -1,3 +1,68 @@ +2025-10-05 Sam James + + * Makefile.in: Regenerate. + * aclocal.m4: Regenerate. + * configure: Regenerate. + * testsuite/Makefile.in: Regenerate. + +2025-09-18 Tobias Burnus + Sandra Loosemore + + PR middle-end/121922 + * testsuite/libgomp.c-c++-common/declare-variant-1.c: New test. + +2025-09-17 Tobias Burnus + + PR libgomp/119857 + PR libgomp/114445 + * config/accel/target-indirect.c: Change to use uint128_t instead + of a struct as data structure and add GOMP_INDIRECT_ADDR_HMAP as + host-accessible variable. + (struct indirect_map_t): Remove. + (USE_HASHTAB_LOOKUP, INDIRECT_DEV_ADDR, INDIRECT_HOST_ADDR, + SET_INDIRECT_HOST_ADDR, SET_INDIRECT_ADDRS): Define. + (htab_free): Use __builtin_unreachable. + (htab_hash, htab_eq, GOMP_target_map_indirect_ptr, + build_indirect_map): Update for new representation and new + pointer-to-hash variable. + * config/gcn/team.c (gomp_gcn_enter_kernel): Only call + build_indirect_map when GOMP_INDIRECT_ADDR_MAP. + * config/nvptx/team.c (gomp_nvptx_main): Likewise. + * libgomp-plugin.h (GOMP_INDIRECT_ADDR_HMAP): Define. + * plugin/plugin-gcn.c: Conditionally include + build-target-indirect-htab.h. + (USE_HASHTAB_LOOKUP_FOR_INDIRECT): Define. + (create_target_indirect_map): New prototype. + (GOMP_OFFLOAD_load_image): Update to create the device's + indirect-function hash table on the host. + * plugin/plugin-nvptx.c: Conditionally include + build-target-indirect-htab.h. + (USE_HASHTAB_LOOKUP_FOR_INDIRECT): Define. + (create_target_indirect_map): New prototype. + (GOMP_OFFLOAD_load_image): Update to create the device's + indirect-function hash table on the host. + * plugin/build-target-indirect-htab.h: New file. + +2025-09-17 Tobias Burnus + + * libgomp.map (OACC_2.5): Move previously unimplemented + acc_{copyout,delete}_finalize_async_{32,64,array}_h_ to ... + (OACC_2.6.1): ... here. + * libgomp.texi (acc_copyin, acc_present_or_copyin, acc_create, + acc_present_or_create, acc_copyout, acc_update_device, + acc_update_self, acc_is_present): Use 'type(*), dimension(..)' + instead of 'type, dimension(:[,:]...)' for Fortran. + (acc_delete): Likewise; change acc_delete_async_finalize to + acc_delete_finalize_async. + * openacc.f90 (openacc_internal): Add interfaces for + acc_{copyout,delete}_finalize_async_{{32,64,array}_h,_l}. + (openacc): Add generic interfaces for + acc_copyout_finalize_async and acc_delete_finalize_async. + (acc_{copyout,delete}_finalize_async_{32,64,array}_h): New. + * openacc_lib.h: Add generic interfaces for + acc_copyout_finalize_async and acc_delete_finalize_async. + * testsuite/libgomp.oacc-fortran/pr92970-1.f90: New test. + 2025-09-06 Jakub Jelinek * omp.h.in: Fix up formatting of __cplusplus >= 201103L diff --git a/libgomp/Makefile.in b/libgomp/Makefile.in index 6d22b3d3bfd0..8dc2ace13a99 100644 --- a/libgomp/Makefile.in +++ b/libgomp/Makefile.in @@ -125,9 +125,11 @@ subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ $(top_srcdir)/../config/ax_count_cpus.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/depstand.m4 \ $(top_srcdir)/../config/enable.m4 \ $(top_srcdir)/../config/futex.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ $(top_srcdir)/../config/lthostflags.m4 \ $(top_srcdir)/../config/multi.m4 \ @@ -397,6 +399,7 @@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ diff --git a/libgomp/aclocal.m4 b/libgomp/aclocal.m4 index 55d9d71895a2..94d1b0af1253 100644 --- a/libgomp/aclocal.m4 +++ b/libgomp/aclocal.m4 @@ -1169,9 +1169,11 @@ AC_SUBST([am__untar]) m4_include([../config/acx.m4]) m4_include([../config/ax_count_cpus.m4]) +m4_include([../config/clang-plugin.m4]) m4_include([../config/depstand.m4]) m4_include([../config/enable.m4]) m4_include([../config/futex.m4]) +m4_include([../config/gcc-plugin.m4]) m4_include([../config/lead-dot.m4]) m4_include([../config/lthostflags.m4]) m4_include([../config/multi.m4]) diff --git a/libgomp/config/accel/target-indirect.c b/libgomp/config/accel/target-indirect.c index 30e391c52a0d..a35fffbb1b71 100644 --- a/libgomp/config/accel/target-indirect.c +++ b/libgomp/config/accel/target-indirect.c @@ -25,43 +25,68 @@ . */ #include -#include #include "libgomp.h" -struct indirect_map_t -{ - void *host_addr; - void *target_addr; -}; +void *GOMP_INDIRECT_ADDR_MAP = NULL; + +#define USE_HASHTAB_LOOKUP + +#ifdef USE_HASHTAB_LOOKUP + +#include /* For memset. */ + +/* Use a hashtab to lookup the target address instead of using a linear + search. + + With newer libgomp on the host the hash is already initialized on the host + (i.e plugin/plugin-gcn.c). Thus, build_indirect_map is only used as + fallback with older glibc. */ -typedef struct indirect_map_t *hash_entry_type; +void *GOMP_INDIRECT_ADDR_HMAP = NULL; + +typedef unsigned __int128 hash_entry_type; +#define INDIRECT_DEV_ADDR(p) ((void*) (uintptr_t) (p >> 64)) +#define INDIRECT_HOST_ADDR(p) ((void *) (uintptr_t) p) +#define SET_INDIRECT_HOST_ADDR(p, host) p = (((unsigned __int128) (uintptr_t) host)) +#define SET_INDIRECT_ADDRS(p, h, d) \ + p = (((unsigned __int128) h) + (((unsigned __int128) d) << 64)) + +/* Besides the sizes, also the endianness either needs to agree or + host-device memcpy needs to take care of this. */ +_Static_assert (sizeof (unsigned __int128) == 2*sizeof(void*), + "indirect_target_map_t size mismatch"); static inline void * htab_alloc (size_t size) { return gomp_malloc (size); } -static inline void htab_free (void *ptr) { free (ptr); } +static inline void htab_free (void *ptr) { __builtin_unreachable (); } #include "hashtab.h" static inline hashval_t htab_hash (hash_entry_type element) { - return hash_pointer (element->host_addr); + return hash_pointer (INDIRECT_HOST_ADDR (element)); } static inline bool htab_eq (hash_entry_type x, hash_entry_type y) { - return x->host_addr == y->host_addr; + return INDIRECT_HOST_ADDR (x) == INDIRECT_HOST_ADDR (y); } -void **GOMP_INDIRECT_ADDR_MAP = NULL; - -/* Use a hashtab to lookup the target address instead of using a linear - search. */ -#define USE_HASHTAB_LOOKUP +void * +GOMP_target_map_indirect_ptr (void *ptr) +{ + /* NULL pointers always resolve to NULL. */ + if (!ptr) + return ptr; -#ifdef USE_HASHTAB_LOOKUP + assert (GOMP_INDIRECT_ADDR_HMAP); -static htab_t indirect_htab = NULL; + hash_entry_type element; + SET_INDIRECT_HOST_ADDR (element, ptr); + hash_entry_type entry = htab_find ((htab_t) GOMP_INDIRECT_ADDR_HMAP, element); + return entry ? INDIRECT_DEV_ADDR (entry) : ptr; +} /* Build the hashtab used for host->target address lookups. */ @@ -69,43 +94,28 @@ void build_indirect_map (void) { size_t num_ind_funcs = 0; - void **map_entry; + uint64_t *map_entry; - if (!GOMP_INDIRECT_ADDR_MAP) + if (!GOMP_INDIRECT_ADDR_MAP || GOMP_INDIRECT_ADDR_HMAP) return; - if (!indirect_htab) - { - /* Count the number of entries in the NULL-terminated address map. */ - for (map_entry = GOMP_INDIRECT_ADDR_MAP; *map_entry; - map_entry += 2, num_ind_funcs++); - - /* Build hashtab for address lookup. */ - indirect_htab = htab_create (num_ind_funcs); - map_entry = GOMP_INDIRECT_ADDR_MAP; - - for (int i = 0; i < num_ind_funcs; i++, map_entry += 2) - { - struct indirect_map_t element = { *map_entry, NULL }; - hash_entry_type *slot = htab_find_slot (&indirect_htab, &element, - INSERT); - *slot = (hash_entry_type) map_entry; - } - } -} + /* Count the number of entries in the NULL-terminated address map. */ + for (map_entry = (uint64_t *) GOMP_INDIRECT_ADDR_MAP; *map_entry; + map_entry += 2, num_ind_funcs++); -void * -GOMP_target_map_indirect_ptr (void *ptr) -{ - /* NULL pointers always resolve to NULL. */ - if (!ptr) - return ptr; - - assert (indirect_htab); + /* Build hashtab for address lookup. */ + htab_t indirect_htab = htab_create (num_ind_funcs); + GOMP_INDIRECT_ADDR_HMAP = (void *) indirect_htab; - struct indirect_map_t element = { ptr, NULL }; - hash_entry_type entry = htab_find (indirect_htab, &element); - return entry ? entry->target_addr : ptr; + map_entry = GOMP_INDIRECT_ADDR_MAP; + for (int i = 0; i < num_ind_funcs; i++, map_entry += 2) + { + hash_entry_type element; + SET_INDIRECT_ADDRS (element, *map_entry, *(map_entry + 1)); + hash_entry_type *slot = htab_find_slot (&indirect_htab, element, + INSERT); + *slot = element; + } } #else diff --git a/libgomp/config/gcn/team.c b/libgomp/config/gcn/team.c index 40827ce8560c..df5e065be163 100644 --- a/libgomp/config/gcn/team.c +++ b/libgomp/config/gcn/team.c @@ -32,6 +32,10 @@ #define LITTLEENDIAN_CPU #include "hsa.h" +#define UNLIKELY(x) (__builtin_expect ((x), 0)) + +extern void *GOMP_INDIRECT_ADDR_MAP; + /* Defined in basic-allocator.c via config/amdgcn/allocator.c. */ void __gcn_lowlat_init (void *heap, size_t size); @@ -57,8 +61,8 @@ gomp_gcn_enter_kernel (void) int numthreads = __builtin_gcn_dim_size (1); int teamid = __builtin_gcn_dim_pos(0); - /* Initialize indirect function support. */ - if (teamid == 0) + /* Initialize indirect function support for older libgomp. */ + if (UNLIKELY (GOMP_INDIRECT_ADDR_MAP != NULL && teamid == 0)) build_indirect_map (); /* Set up the global state. diff --git a/libgomp/config/nvptx/team.c b/libgomp/config/nvptx/team.c index 422734459dec..6a34144b1dd8 100644 --- a/libgomp/config/nvptx/team.c +++ b/libgomp/config/nvptx/team.c @@ -31,6 +31,10 @@ #include #include +#define UNLIKELY(x) (__builtin_expect ((x), 0)) + +extern void *GOMP_INDIRECT_ADDR_MAP; + struct gomp_thread *nvptx_thrs __attribute__((shared,nocommon)); int __gomp_team_num __attribute__((shared,nocommon)); @@ -71,10 +75,10 @@ gomp_nvptx_main (void (*fn) (void *), void *fn_data) nvptx_thrs = alloca (ntids * sizeof (*nvptx_thrs)); memset (nvptx_thrs, 0, ntids * sizeof (*nvptx_thrs)); - /* Initialize indirect function support. */ + /* Initialize indirect function support for older libgomp. */ unsigned int block_id; asm ("mov.u32 %0, %%ctaid.x;" : "=r" (block_id)); - if (block_id == 0) + if (UNLIKELY (GOMP_INDIRECT_ADDR_MAP != NULL && block_id == 0)) build_indirect_map (); /* Find the low-latency heap details .... */ diff --git a/libgomp/configure b/libgomp/configure index df1fc8df30e6..4136a0b8cd01 100755 --- a/libgomp/configure +++ b/libgomp/configure @@ -688,12 +688,13 @@ ENABLE_DARWIN_AT_RPATH_TRUE enable_static enable_shared lt_host_flags -CPP OTOOL64 OTOOL LIPO NMEDIT DSYMUTIL +LLVM_CONFIG +CPP OBJDUMP LN_S NM @@ -1636,6 +1637,43 @@ fi } # ac_fn_c_try_compile +# ac_fn_c_try_cpp LINENO +# ---------------------- +# Try to preprocess conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } > conftest.i && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_cpp + # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. @@ -1713,43 +1751,6 @@ $as_echo "$ac_res" >&6; } } # ac_fn_c_check_header_compile -# ac_fn_c_try_cpp LINENO -# ---------------------- -# Try to preprocess conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_cpp () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } > conftest.i && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_c_try_cpp - # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes @@ -6171,29 +6172,191 @@ test -z "$deplibs_check_method" && deplibs_check_method=unknown -plugin_option= -plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll" -for plugin in $plugin_names; do - plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin` - if test x$plugin_so = x$plugin; then - plugin_so=`${CC} ${CFLAGS} --print-file-name $plugin` - fi - if test x$plugin_so != x$plugin; then - plugin_option="--plugin $plugin_so" - break - fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +$as_echo_n "checking how to run the C preprocessor... " >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if ${ac_cv_prog_CPP+:} false; then : + $as_echo_n "(cached) " >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. -set dummy ${ac_tool_prefix}ar; ac_word=$2 + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +$as_echo "$CPP" >&6; } +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details" "$LINENO" 5; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + +# Try CLANG_PLUGIN_FILE first since GCC_PLUGIN_OPTION may return the +# wrong plugin_option with clang. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang" >&5 +$as_echo_n "checking for clang... " >&6; } +if ${clang_cv_is_clang+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifdef __clang__ + yes +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "yes" >/dev/null 2>&1; then : + clang_cv_is_clang=yes +else + clang_cv_is_clang=no +fi +rm -f conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $clang_cv_is_clang" >&5 +$as_echo "$clang_cv_is_clang" >&6; } + plugin_file= + if test $clang_cv_is_clang = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang plugin file" >&5 +$as_echo_n "checking for clang plugin file... " >&6; } + plugin_names="LLVMgold.so" + for plugin in $plugin_names; do + plugin_file=`${CC} ${CFLAGS} --print-file-name $plugin` + if test x$plugin_file = x$plugin; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}llvm-config", so it can be a program name with args. +set dummy ${ac_tool_prefix}llvm-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_AR+:} false; then : +if ${ac_cv_prog_LLVM_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else - if test -n "$AR"; then - ac_cv_prog_AR="$AR" # Let the user override the test. + if test -n "$LLVM_CONFIG"; then + ac_cv_prog_LLVM_CONFIG="$LLVM_CONFIG" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH @@ -6202,7 +6365,7 @@ do test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_AR="${ac_tool_prefix}ar" + ac_cv_prog_LLVM_CONFIG="${ac_tool_prefix}llvm-config" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi @@ -6212,10 +6375,10 @@ IFS=$as_save_IFS fi fi -AR=$ac_cv_prog_AR -if test -n "$AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 -$as_echo "$AR" >&6; } +LLVM_CONFIG=$ac_cv_prog_LLVM_CONFIG +if test -n "$LLVM_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LLVM_CONFIG" >&5 +$as_echo "$LLVM_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } @@ -6223,13 +6386,120 @@ fi fi -if test -z "$ac_cv_prog_AR"; then - ac_ct_AR=$AR - # Extract the first word of "ar", so it can be a program name with args. -set dummy ar; ac_word=$2 +if test -z "$ac_cv_prog_LLVM_CONFIG"; then + ac_ct_LLVM_CONFIG=$LLVM_CONFIG + # Extract the first word of "llvm-config", so it can be a program name with args. +set dummy llvm-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_AR+:} false; then : +if ${ac_cv_prog_ac_ct_LLVM_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_LLVM_CONFIG"; then + ac_cv_prog_ac_ct_LLVM_CONFIG="$ac_ct_LLVM_CONFIG" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_LLVM_CONFIG="llvm-config" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_LLVM_CONFIG=$ac_cv_prog_ac_ct_LLVM_CONFIG +if test -n "$ac_ct_LLVM_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LLVM_CONFIG" >&5 +$as_echo "$ac_ct_LLVM_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_LLVM_CONFIG" = x; then + LLVM_CONFIG="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + LLVM_CONFIG=$ac_ct_LLVM_CONFIG + fi +else + LLVM_CONFIG="$ac_cv_prog_LLVM_CONFIG" +fi + + if test "$?" != 0; then + as_fn_error $? "Required tool 'llvm-config' not found on PATH." "$LINENO" 5 + fi + clang_lib_dir=`$LLVM_CONFIG --libdir` + if test -f $clang_lib_dir/$plugin; then + plugin_file=$clang_lib_dir/$plugin + fi + if test x$plugin_file != x$plugin; then + break; + fi + fi + done + if test -z $plugin_file; then + as_fn_error $? "Couldn't find clang plugin file for $CC." "$LINENO" 5 + fi + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AR"; then @@ -6262,7 +6532,7 @@ $as_echo "no" >&6; } fi if test "x$ac_ct_AR" = x; then - AR="false" + AR="" else case $cross_compiling:$ac_tool_warned in yes:) @@ -6276,19 +6546,257 @@ else AR="$ac_cv_prog_AR" fi -test -z "$AR" && AR=ar -if test -n "$plugin_option"; then - if $AR --help 2>&1 | grep -q "\--plugin"; then + if test "${AR}" = "" ; then + as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5 + fi + plugin_option="--plugin $plugin_file" touch conftest.c - $AR $plugin_option rc conftest.a conftest.c + ${AR} $plugin_option rc conftest.a conftest.c if test "$?" != 0; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} - else - AR="$AR $plugin_option" + plugin_file= fi rm -f conftest.* + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_file" >&5 +$as_echo "$plugin_file" >&6; } + fi + plugin_file="$plugin_file" + +if test -n "$plugin_file"; then + plugin_option="--plugin $plugin_file" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -plugin option" >&5 +$as_echo_n "checking for -plugin option... " >&6; } + +plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll" +plugin_option= +for plugin in $plugin_names; do + plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin` + if test x$plugin_so = x$plugin; then + plugin_so=`${CC} ${CFLAGS} --print-file-name $plugin` + fi + if test x$plugin_so != x$plugin; then + plugin_option="--plugin $plugin_so" + break + fi +done +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR fi +else + AR="$ac_cv_prog_AR" +fi + +if test "${AR}" = "" ; then + as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5 +fi +touch conftest.c +${AR} $plugin_option rc conftest.a conftest.c +if test "$?" != 0; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 +$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} + plugin_option= +fi +rm -f conftest.* +if test -n "$plugin_option"; then + plugin_option="$plugin_option" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_option" >&5 +$as_echo "$plugin_option" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + +fi +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + +test -z "$AR" && AR=ar +if test -n "$plugin_option"; then + case "$AR" in + *"$plugin_option"*) + ;; + *) + if $AR --help 2>&1 | grep -q "\--plugin"; then + AR="$AR $plugin_option" + fi + ;; + esac fi test -z "$AR_FLAGS" && AR_FLAGS=cru @@ -6495,9 +7003,15 @@ fi test -z "$RANLIB" && RANLIB=: if test -n "$plugin_option" && test "$RANLIB" != ":"; then - if $RANLIB --help 2>&1 | grep -q "\--plugin"; then - RANLIB="$RANLIB $plugin_option" - fi + case "$RANLIB" in + *"$plugin_option"*) + ;; + *) + if $RANLIB --help 2>&1 | grep -q "\--plugin"; then + RANLIB="$RANLIB $plugin_option" + fi + ;; + esac fi @@ -6824,7 +7338,6 @@ fi - # Check whether --enable-libtool-lock was given. @@ -7650,144 +8163,6 @@ $as_echo "$lt_cv_ld_force_load" >&6; } ;; esac -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 -$as_echo_n "checking how to run the C preprocessor... " >&6; } -# On Suns, sometimes $CPP names a directory. -if test -n "$CPP" && test -d "$CPP"; then - CPP= -fi -if test -z "$CPP"; then - if ${ac_cv_prog_CPP+:} false; then : - $as_echo_n "(cached) " >&6 -else - # Double quotes because CPP needs to be expanded - for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" - do - ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - break -fi - - done - ac_cv_prog_CPP=$CPP - -fi - CPP=$ac_cv_prog_CPP -else - ac_cv_prog_CPP=$CPP -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 -$as_echo "$CPP" >&6; } -ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "C preprocessor \"$CPP\" fails sanity check -See \`config.log' for more details" "$LINENO" 5; } -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : @@ -11469,7 +11844,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 11472 "configure" +#line 11847 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -11575,7 +11950,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 11578 "configure" +#line 11953 "configure" #include "confdefs.h" #if HAVE_DLFCN_H diff --git a/libgomp/libgomp-plugin.h b/libgomp/libgomp-plugin.h index 191106b52751..f3823c0b4615 100644 --- a/libgomp/libgomp-plugin.h +++ b/libgomp/libgomp-plugin.h @@ -134,7 +134,11 @@ enum gomp_interop_flag must be stringified). */ #define GOMP_ADDITIONAL_ICVS __gomp_additional_icvs +/* GOMP_INDIRECT_ADDR_HMAP points to a hash table and is to be used by + newer libgomp, while GOMP_INDIRECT_ADDR_MAP points to a linear table + and exists for backward compatibility. */ #define GOMP_INDIRECT_ADDR_MAP __gomp_indirect_addr_map +#define GOMP_INDIRECT_ADDR_HMAP __gomp_indirect_addr_hmap /* Miscellaneous functions. */ extern void *GOMP_PLUGIN_malloc (size_t) __attribute__ ((malloc)); diff --git a/libgomp/libgomp.map b/libgomp/libgomp.map index f6aee7c03945..67e08a371166 100644 --- a/libgomp/libgomp.map +++ b/libgomp/libgomp.map @@ -562,9 +562,6 @@ OACC_2.5 { acc_copyout_finalize_64_h_; acc_copyout_finalize_array_h_; acc_copyout_finalize_async; - acc_copyout_finalize_async_32_h_; - acc_copyout_finalize_async_64_h_; - acc_copyout_finalize_async_array_h_; acc_create_async; acc_create_async_32_h_; acc_create_async_64_h_; @@ -578,9 +575,6 @@ OACC_2.5 { acc_delete_finalize_64_h_; acc_delete_finalize_array_h_; acc_delete_finalize_async; - acc_delete_finalize_async_32_h_; - acc_delete_finalize_async_64_h_; - acc_delete_finalize_async_array_h_; acc_memcpy_from_device_async; acc_memcpy_to_device_async; acc_update_device_async; @@ -617,6 +611,12 @@ OACC_2.6 { OACC_2.6.1 { global: + acc_copyout_finalize_async_32_h_; + acc_copyout_finalize_async_64_h_; + acc_copyout_finalize_async_array_h_; + acc_delete_finalize_async_32_h_; + acc_delete_finalize_async_64_h_; + acc_delete_finalize_async_array_h_; acc_memcpy_device; acc_memcpy_device_async; } OACC_2.6; diff --git a/libgomp/libgomp.texi b/libgomp/libgomp.texi index 5518033f1f30..73c8c3edace8 100644 --- a/libgomp/libgomp.texi +++ b/libgomp/libgomp.texi @@ -5361,15 +5361,15 @@ variable or array element and @var{len} specifies the length in bytes. @item @emph{Fortran}: @multitable @columnfractions .20 .80 @item @emph{Interface}: @tab @code{subroutine acc_copyin(a)} -@item @tab @code{type, dimension(:[,:]...) :: a} +@item @tab @code{type(*), dimension(..) :: a} @item @emph{Interface}: @tab @code{subroutine acc_copyin(a, len)} -@item @tab @code{type, dimension(:[,:]...) :: a} +@item @tab @code{type(*), dimension(..) :: a} @item @tab @code{integer len} @item @emph{Interface}: @tab @code{subroutine acc_copyin_async(a, async)} -@item @tab @code{type, dimension(:[,:]...) :: a} +@item @tab @code{type(*), dimension(..) :: a} @item @tab @code{integer(acc_handle_kind) :: async} @item @emph{Interface}: @tab @code{subroutine acc_copyin_async(a, len, async)} -@item @tab @code{type, dimension(:[,:]...) :: a} +@item @tab @code{type(*), dimension(..) :: a} @item @tab @code{integer len} @item @tab @code{integer(acc_handle_kind) :: async} @end multitable @@ -5406,14 +5406,14 @@ backward compatibility with OpenACC 2.0; use @ref{acc_copyin} instead. @item @emph{Fortran}: @multitable @columnfractions .20 .80 @item @emph{Interface}: @tab @code{subroutine acc_present_or_copyin(a)} -@item @tab @code{type, dimension(:[,:]...) :: a} +@item @tab @code{type(*), dimension(..) :: a} @item @emph{Interface}: @tab @code{subroutine acc_present_or_copyin(a, len)} -@item @tab @code{type, dimension(:[,:]...) :: a} +@item @tab @code{type(*), dimension(..) :: a} @item @tab @code{integer len} @item @emph{Interface}: @tab @code{subroutine acc_pcopyin(a)} -@item @tab @code{type, dimension(:[,:]...) :: a} +@item @tab @code{type(*), dimension(..) :: a} @item @emph{Interface}: @tab @code{subroutine acc_pcopyin(a, len)} -@item @tab @code{type, dimension(:[,:]...) :: a} +@item @tab @code{type(*), dimension(..) :: a} @item @tab @code{integer len} @end multitable @@ -5445,15 +5445,15 @@ array element and @var{len} specifies the length in bytes. @item @emph{Fortran}: @multitable @columnfractions .20 .80 @item @emph{Interface}: @tab @code{subroutine acc_create(a)} -@item @tab @code{type, dimension(:[,:]...) :: a} +@item @tab @code{type(*), dimension(..) :: a} @item @emph{Interface}: @tab @code{subroutine acc_create(a, len)} -@item @tab @code{type, dimension(:[,:]...) :: a} +@item @tab @code{type(*), dimension(..) :: a} @item @tab @code{integer len} @item @emph{Interface}: @tab @code{subroutine acc_create_async(a, async)} -@item @tab @code{type, dimension(:[,:]...) :: a} +@item @tab @code{type(*), dimension(..) :: a} @item @tab @code{integer(acc_handle_kind) :: async} @item @emph{Interface}: @tab @code{subroutine acc_create_async(a, len, async)} -@item @tab @code{type, dimension(:[,:]...) :: a} +@item @tab @code{type(*), dimension(..) :: a} @item @tab @code{integer len} @item @tab @code{integer(acc_handle_kind) :: async} @end multitable @@ -5490,14 +5490,14 @@ backward compatibility with OpenACC 2.0; use @ref{acc_create} instead. @item @emph{Fortran}: @multitable @columnfractions .20 .80 @item @emph{Interface}: @tab @code{subroutine acc_present_or_create(a)} -@item @tab @code{type, dimension(:[,:]...) :: a} +@item @tab @code{type(*), dimension(..) :: a} @item @emph{Interface}: @tab @code{subroutine acc_present_or_create(a, len)} -@item @tab @code{type, dimension(:[,:]...) :: a} +@item @tab @code{type(*), dimension(..) :: a} @item @tab @code{integer len} @item @emph{Interface}: @tab @code{subroutine acc_pcreate(a)} -@item @tab @code{type, dimension(:[,:]...) :: a} +@item @tab @code{type(*), dimension(..) :: a} @item @emph{Interface}: @tab @code{subroutine acc_pcreate(a, len)} -@item @tab @code{type, dimension(:[,:]...) :: a} +@item @tab @code{type(*), dimension(..) :: a} @item @tab @code{integer len} @end multitable @@ -5530,27 +5530,27 @@ array element and @var{len} specifies the length in bytes. @item @emph{Fortran}: @multitable @columnfractions .20 .80 @item @emph{Interface}: @tab @code{subroutine acc_copyout(a)} -@item @tab @code{type, dimension(:[,:]...) :: a} +@item @tab @code{type(*), dimension(..) :: a} @item @emph{Interface}: @tab @code{subroutine acc_copyout(a, len)} -@item @tab @code{type, dimension(:[,:]...) :: a} +@item @tab @code{type(*), dimension(..) :: a} @item @tab @code{integer len} @item @emph{Interface}: @tab @code{subroutine acc_copyout_async(a, async)} -@item @tab @code{type, dimension(:[,:]...) :: a} +@item @tab @code{type(*), dimension(..) :: a} @item @tab @code{integer(acc_handle_kind) :: async} @item @emph{Interface}: @tab @code{subroutine acc_copyout_async(a, len, async)} -@item @tab @code{type, dimension(:[,:]...) :: a} +@item @tab @code{type(*), dimension(..) :: a} @item @tab @code{integer len} @item @tab @code{integer(acc_handle_kind) :: async} @item @emph{Interface}: @tab @code{subroutine acc_copyout_finalize(a)} -@item @tab @code{type, dimension(:[,:]...) :: a} +@item @tab @code{type(*), dimension(..) :: a} @item @emph{Interface}: @tab @code{subroutine acc_copyout_finalize(a, len)} -@item @tab @code{type, dimension(:[,:]...) :: a} +@item @tab @code{type(*), dimension(..) :: a} @item @tab @code{integer len} @item @emph{Interface}: @tab @code{subroutine acc_copyout_finalize_async(a, async)} -@item @tab @code{type, dimension(:[,:]...) :: a} +@item @tab @code{type(*), dimension(..) :: a} @item @tab @code{integer(acc_handle_kind) :: async} @item @emph{Interface}: @tab @code{subroutine acc_copyout_finalize_async(a, len, async)} -@item @tab @code{type, dimension(:[,:]...) :: a} +@item @tab @code{type(*), dimension(..) :: a} @item @tab @code{integer len} @item @tab @code{integer(acc_handle_kind) :: async} @end multitable @@ -5584,27 +5584,27 @@ array element and @var{len} specifies the length in bytes. @item @emph{Fortran}: @multitable @columnfractions .20 .80 @item @emph{Interface}: @tab @code{subroutine acc_delete(a)} -@item @tab @code{type, dimension(:[,:]...) :: a} +@item @tab @code{type(*), dimension(..) :: a} @item @emph{Interface}: @tab @code{subroutine acc_delete(a, len)} -@item @tab @code{type, dimension(:[,:]...) :: a} +@item @tab @code{type(*), dimension(..) :: a} @item @tab @code{integer len} @item @emph{Interface}: @tab @code{subroutine acc_delete_async(a, async)} -@item @tab @code{type, dimension(:[,:]...) :: a} +@item @tab @code{type(*), dimension(..) :: a} @item @tab @code{integer(acc_handle_kind) :: async} @item @emph{Interface}: @tab @code{subroutine acc_delete_async(a, len, async)} -@item @tab @code{type, dimension(:[,:]...) :: a} +@item @tab @code{type(*), dimension(..) :: a} @item @tab @code{integer len} @item @tab @code{integer(acc_handle_kind) :: async} @item @emph{Interface}: @tab @code{subroutine acc_delete_finalize(a)} -@item @tab @code{type, dimension(:[,:]...) :: a} +@item @tab @code{type(*), dimension(..) :: a} @item @emph{Interface}: @tab @code{subroutine acc_delete_finalize(a, len)} -@item @tab @code{type, dimension(:[,:]...) :: a} +@item @tab @code{type(*), dimension(..) :: a} @item @tab @code{integer len} -@item @emph{Interface}: @tab @code{subroutine acc_delete_async_finalize(a, async)} -@item @tab @code{type, dimension(:[,:]...) :: a} +@item @emph{Interface}: @tab @code{subroutine acc_delete_finalize_async(a, async)} +@item @tab @code{type(*), dimension(..) :: a} @item @tab @code{integer(acc_handle_kind) :: async} -@item @emph{Interface}: @tab @code{subroutine acc_delete_async_finalize(a, len, async)} -@item @tab @code{type, dimension(:[,:]...) :: a} +@item @emph{Interface}: @tab @code{subroutine acc_delete_finalize_async(a, len, async)} +@item @tab @code{type(*), dimension(..) :: a} @item @tab @code{integer len} @item @tab @code{integer(acc_handle_kind) :: async} @end multitable @@ -5637,15 +5637,15 @@ array element and @var{len} specifies the length in bytes. @item @emph{Fortran}: @multitable @columnfractions .20 .80 @item @emph{Interface}: @tab @code{subroutine acc_update_device(a)} -@item @tab @code{type, dimension(:[,:]...) :: a} +@item @tab @code{type(*), dimension(..) :: a} @item @emph{Interface}: @tab @code{subroutine acc_update_device(a, len)} -@item @tab @code{type, dimension(:[,:]...) :: a} +@item @tab @code{type(*), dimension(..) :: a} @item @tab @code{integer len} @item @emph{Interface}: @tab @code{subroutine acc_update_device_async(a, async)} -@item @tab @code{type, dimension(:[,:]...) :: a} +@item @tab @code{type(*), dimension(..) :: a} @item @tab @code{integer(acc_handle_kind) :: async} @item @emph{Interface}: @tab @code{subroutine acc_update_device_async(a, len, async)} -@item @tab @code{type, dimension(:[,:]...) :: a} +@item @tab @code{type(*), dimension(..) :: a} @item @tab @code{integer len} @item @tab @code{integer(acc_handle_kind) :: async} @end multitable @@ -5678,15 +5678,15 @@ array element and @var{len} specifies the length in bytes. @item @emph{Fortran}: @multitable @columnfractions .20 .80 @item @emph{Interface}: @tab @code{subroutine acc_update_self(a)} -@item @tab @code{type, dimension(:[,:]...) :: a} +@item @tab @code{type(*), dimension(..) :: a} @item @emph{Interface}: @tab @code{subroutine acc_update_self(a, len)} -@item @tab @code{type, dimension(:[,:]...) :: a} +@item @tab @code{type(*), dimension(..) :: a} @item @tab @code{integer len} @item @emph{Interface}: @tab @code{subroutine acc_update_self_async(a, async)} -@item @tab @code{type, dimension(:[,:]...) :: a} +@item @tab @code{type(*), dimension(..) :: a} @item @tab @code{integer(acc_handle_kind) :: async} @item @emph{Interface}: @tab @code{subroutine acc_update_self_async(a, len, async)} -@item @tab @code{type, dimension(:[,:]...) :: a} +@item @tab @code{type(*), dimension(..) :: a} @item @tab @code{integer len} @item @tab @code{integer(acc_handle_kind) :: async} @end multitable @@ -5829,10 +5829,10 @@ a @code{false} is return to indicate the mapped memory is not present. @item @emph{Fortran}: @multitable @columnfractions .20 .80 @item @emph{Interface}: @tab @code{function acc_is_present(a)} -@item @tab @code{type, dimension(:[,:]...) :: a} +@item @tab @code{type(*), dimension(..) :: a} @item @tab @code{logical acc_is_present} @item @emph{Interface}: @tab @code{function acc_is_present(a, len)} -@item @tab @code{type, dimension(:[,:]...) :: a} +@item @tab @code{type(*), dimension(..) :: a} @item @tab @code{integer len} @item @tab @code{logical acc_is_present} @end multitable diff --git a/libgomp/openacc.f90 b/libgomp/openacc.f90 index 3f2db45617b1..1d944275833d 100644 --- a/libgomp/openacc.f90 +++ b/libgomp/openacc.f90 @@ -269,6 +269,30 @@ subroutine acc_copyout_finalize_array_h (a) type (*), dimension (..), contiguous :: a end subroutine + subroutine acc_copyout_finalize_async_32_h (a, len, async) + use iso_c_binding, only: c_int32_t + use openacc_kinds, only: acc_handle_kind + !GCC$ ATTRIBUTES NO_ARG_CHECK :: a + type (*), dimension (*) :: a + integer (c_int32_t) len + integer (acc_handle_kind) async + end subroutine + + subroutine acc_copyout_finalize_async_64_h (a, len, async) + use iso_c_binding, only: c_int64_t + use openacc_kinds, only: acc_handle_kind + !GCC$ ATTRIBUTES NO_ARG_CHECK :: a + type (*), dimension (*) :: a + integer (c_int64_t) len + integer (acc_handle_kind) async + end subroutine + + subroutine acc_copyout_finalize_async_array_h (a, async) + use openacc_kinds, only: acc_handle_kind + type (*), dimension (..), contiguous :: a + integer (acc_handle_kind) async + end subroutine + subroutine acc_delete_32_h (a, len) use iso_c_binding, only: c_int32_t !GCC$ ATTRIBUTES NO_ARG_CHECK :: a @@ -458,6 +482,30 @@ subroutine acc_delete_async_array_h (a, async) integer (acc_handle_kind) async end subroutine + subroutine acc_delete_finalize_async_32_h (a, len, async) + use iso_c_binding, only: c_int32_t + use openacc_kinds, only: acc_handle_kind + !GCC$ ATTRIBUTES NO_ARG_CHECK :: a + type (*), dimension (*) :: a + integer (c_int32_t) len + integer (acc_handle_kind) async + end subroutine + + subroutine acc_delete_finalize_async_64_h (a, len, async) + use iso_c_binding, only: c_int64_t + use openacc_kinds, only: acc_handle_kind + !GCC$ ATTRIBUTES NO_ARG_CHECK :: a + type (*), dimension (*) :: a + integer (c_int64_t) len + integer (acc_handle_kind) async + end subroutine + + subroutine acc_delete_finalize_async_array_h (a, async) + use openacc_kinds, only: acc_handle_kind + type (*), dimension (..), contiguous :: a + integer (acc_handle_kind) async + end subroutine + subroutine acc_update_device_async_32_h (a, len, async) use iso_c_binding, only: c_int32_t use openacc_kinds, only: acc_handle_kind @@ -663,6 +711,15 @@ subroutine acc_copyout_finalize_l (a, len) & integer (c_size_t), value :: len end subroutine + subroutine acc_copyout_finalize_async_l (a, len, async) & + bind (C, name = "acc_copyout_finalize_async") + use iso_c_binding, only: c_size_t, c_int + !GCC$ ATTRIBUTES NO_ARG_CHECK :: a + type (*), dimension (*) :: a + integer (c_size_t), value :: len + integer (c_int), value :: async + end subroutine + subroutine acc_delete_l (a, len) & bind (C, name = "acc_delete") use iso_c_binding, only: c_size_t @@ -679,6 +736,15 @@ subroutine acc_delete_finalize_l (a, len) & integer (c_size_t), value :: len end subroutine + subroutine acc_delete_finalize_async_l (a, len, async) & + bind (C, name = "acc_delete_finalize_async") + use iso_c_binding, only: c_size_t, c_int + !GCC$ ATTRIBUTES NO_ARG_CHECK :: a + type (*), dimension (*) :: a + integer (c_size_t), value :: len + integer (c_int), value :: async + end subroutine + subroutine acc_update_device_l (a, len) & bind (C, name = "acc_update_device") use iso_c_binding, only: c_size_t @@ -794,7 +860,8 @@ module openacc public :: acc_deviceptr, acc_hostptr, acc_is_present public :: acc_copyin_async, acc_create_async, acc_copyout_async public :: acc_delete_async, acc_update_device_async, acc_update_self_async - public :: acc_copyout_finalize, acc_delete_finalize + public :: acc_copyout_finalize, acc_copyout_finalize_async + public :: acc_delete_finalize, acc_delete_finalize_async public :: acc_memcpy_to_device, acc_memcpy_to_device_async public :: acc_memcpy_from_device, acc_memcpy_from_device_async public :: acc_memcpy_device, acc_memcpy_device_async @@ -946,6 +1013,12 @@ subroutine acc_free (data_dev) bind(C) procedure :: acc_copyout_finalize_array_h end interface + interface acc_copyout_finalize_async + procedure :: acc_copyout_finalize_async_32_h + procedure :: acc_copyout_finalize_async_64_h + procedure :: acc_copyout_finalize_async_array_h + end interface + interface acc_delete procedure :: acc_delete_32_h procedure :: acc_delete_64_h @@ -1136,6 +1209,12 @@ subroutine acc_detach_finalize_async (ptr_addr, async_arg) bind(C) procedure :: acc_delete_async_array_h end interface + interface acc_delete_finalize_async + procedure :: acc_delete_finalize_async_32_h + procedure :: acc_delete_finalize_async_64_h + procedure :: acc_delete_finalize_async_array_h + end interface + interface acc_update_device_async procedure :: acc_update_device_async_32_h procedure :: acc_update_device_async_64_h @@ -1439,6 +1518,40 @@ subroutine acc_copyout_finalize_array_h (a) call acc_copyout_finalize_l (a, sizeof (a)) end subroutine +subroutine acc_copyout_finalize_async_32_h (a, len, async) + use iso_c_binding, only: c_int32_t, c_size_t, c_int + use openacc_internal, only: acc_copyout_finalize_async_l + use openacc_kinds, only: acc_handle_kind + !GCC$ ATTRIBUTES NO_ARG_CHECK :: a + type (*), dimension (*) :: a + integer (c_int32_t) len + integer (acc_handle_kind) async + call acc_copyout_finalize_async_l (a, int (len, kind = c_size_t), & + int (async, kind = c_int)) +end subroutine + +subroutine acc_copyout_finalize_async_64_h (a, len, async) + use iso_c_binding, only: c_int64_t, c_size_t, c_int + use openacc_internal, only: acc_copyout_finalize_async_l + use openacc_kinds, only: acc_handle_kind + !GCC$ ATTRIBUTES NO_ARG_CHECK :: a + type (*), dimension (*) :: a + integer (c_int64_t) len + integer (acc_handle_kind) async + call acc_copyout_finalize_async_l (a, int (len, kind = c_size_t), & + int (async, kind = c_int)) +end subroutine + +subroutine acc_copyout_finalize_async_array_h (a, async) + use iso_c_binding, only: c_int + use openacc_internal, only: acc_copyout_finalize_async_l + use openacc_kinds, only: acc_handle_kind + type (*), dimension (..), contiguous :: a + integer (acc_handle_kind) async + call acc_copyout_finalize_async_l (a, sizeof (a), int (async, kind = c_int)) +end subroutine + + subroutine acc_delete_32_h (a, len) use iso_c_binding, only: c_int32_t, c_size_t use openacc_internal, only: acc_delete_l @@ -1686,6 +1799,39 @@ subroutine acc_delete_async_array_h (a, async) call acc_delete_async_l (a, sizeof (a), int (async, kind = c_int)) end subroutine +subroutine acc_delete_finalize_async_32_h (a, len, async) + use iso_c_binding, only: c_int32_t, c_size_t, c_int + use openacc_internal, only: acc_delete_finalize_async_l + use openacc_kinds, only: acc_handle_kind + !GCC$ ATTRIBUTES NO_ARG_CHECK :: a + type (*), dimension (*) :: a + integer (c_int32_t) len + integer (acc_handle_kind) async + call acc_delete_finalize_async_l (a, int (len, kind = c_size_t), & + int (async, kind = c_int)) +end subroutine + +subroutine acc_delete_finalize_async_64_h (a, len, async) + use iso_c_binding, only: c_int64_t, c_size_t, c_int + use openacc_internal, only: acc_delete_finalize_async_l + use openacc_kinds, only: acc_handle_kind + !GCC$ ATTRIBUTES NO_ARG_CHECK :: a + type (*), dimension (*) :: a + integer (c_int64_t) len + integer (acc_handle_kind) async + call acc_delete_finalize_async_l (a, int (len, kind = c_size_t),& + int (async, kind = c_int)) +end subroutine + +subroutine acc_delete_finalize_async_array_h (a, async) + use iso_c_binding, only: c_int + use openacc_internal, only: acc_delete_finalize_async_l + use openacc_kinds, only: acc_handle_kind + type (*), dimension (..), contiguous :: a + integer (acc_handle_kind) async + call acc_delete_finalize_async_l (a, sizeof (a), int (async, kind = c_int)) +end subroutine + subroutine acc_update_device_async_32_h (a, len, async) use iso_c_binding, only: c_int32_t, c_size_t, c_int use openacc_internal, only: acc_update_device_async_l diff --git a/libgomp/openacc_lib.h b/libgomp/openacc_lib.h index dbdc4d7bc402..d3eaaac392d2 100644 --- a/libgomp/openacc_lib.h +++ b/libgomp/openacc_lib.h @@ -350,6 +350,32 @@ end subroutine end interface + interface acc_copyout_finalize_async + subroutine acc_copyout_finalize_async_32_h (a, len, async) + use iso_c_binding, only: c_int32_t + import acc_handle_kind +!GCC$ ATTRIBUTES NO_ARG_CHECK :: a + type (*), dimension (*) :: a + integer (c_int32_t) len + integer (acc_handle_kind) async + end subroutine + + subroutine acc_copyout_finalize_async_64_h (a, len, async) + use iso_c_binding, only: c_int64_t + import acc_handle_kind +!GCC$ ATTRIBUTES NO_ARG_CHECK :: a + type (*), dimension (*) :: a + integer (c_int64_t) len + integer (acc_handle_kind) async + end subroutine + + subroutine acc_copyout_finalize_async_array_h (a, async_) + import acc_handle_kind + type (*), dimension (..), contiguous :: a + integer (acc_handle_kind) async_ + end subroutine + end interface + interface acc_delete subroutine acc_delete_32_h (a, len) use iso_c_binding, only: c_int32_t @@ -390,6 +416,32 @@ end subroutine end interface + interface acc_delete_finalize_async + subroutine acc_delete_finalize_async_32_h (a, len, async) + use iso_c_binding, only: c_int32_t + import acc_handle_kind +!GCC$ ATTRIBUTES NO_ARG_CHECK :: a + type (*), dimension (*) :: a + integer (c_int32_t) len + integer (acc_handle_kind) async + end subroutine + + subroutine acc_delete_finalize_async_64_h (a, len, async) + use iso_c_binding, only: c_int64_t + import acc_handle_kind +!GCC$ ATTRIBUTES NO_ARG_CHECK :: a + type (*), dimension (*) :: a + integer (c_int64_t) len + integer (acc_handle_kind) async + end subroutine + + subroutine acc_delete_finalize_async_array_h (a, async_) + import acc_handle_kind + type (*), dimension (..), contiguous :: a + integer (acc_handle_kind) async_ + end subroutine + end interface + interface acc_update_device subroutine acc_update_device_32_h (a, len) use iso_c_binding, only: c_int32_t diff --git a/libgomp/plugin/build-target-indirect-htab.h b/libgomp/plugin/build-target-indirect-htab.h new file mode 100644 index 000000000000..d732aca3e038 --- /dev/null +++ b/libgomp/plugin/build-target-indirect-htab.h @@ -0,0 +1,83 @@ +/* Copyright (C) 2023-2025 Free Software Foundation, Inc. + + Contributed by Siemens. + + This file is part of the GNU Offloading and Multi Processing Library + (libgomp). + + Libgomp 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. + + Libgomp 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 + . */ + + +/* This file is used to create a hash table on the host that is supposed + to get use on the device - that's for the 'indirect' clause feature. + + In order to habe host initialization work, the pointer sizes must be + the same - and either the the endianess or the host-device memcopy + has to take of it. */ + +typedef unsigned __int128 hash_entry_type; +#define INDIRECT_HOST_ADDR(p) ((void *) (uintptr_t) p) +#define INDIRECT_DEV_ADDR(p) ((void*) (uintptr_t) (p >> 64)) +#define SET_INDIRECT_ADDRS(p, h, d) \ + p = (((unsigned __int128) h) + (((unsigned __int128) d) << 64)) + +_Static_assert (sizeof (unsigned __int128) == 2 * sizeof (void*), + "hash_entry_type size mismatch"); + +static inline void *htab_alloc (size_t size) { + return malloc (size); +} + +static inline void htab_free (void *ptr) { free (ptr); } + +#include "hashtab.h" + +static inline hashval_t +htab_hash (hash_entry_type element) +{ + return hash_pointer (INDIRECT_HOST_ADDR (element)); +} + +static inline bool +htab_eq (hash_entry_type x, hash_entry_type y) +{ + return INDIRECT_HOST_ADDR (x) == INDIRECT_HOST_ADDR (x); +} + +void* +create_target_indirect_map (size_t *h_size, size_t count, + uint64_t *host_addrs, uint64_t *device_addrs) +{ + assert (htab_find); /* Silence -Werror=unused-function. */ + + htab_t indirect_htab = htab_create (count); + + hash_entry_type element; + for (int i = 0; i < count; i++) + { + SET_INDIRECT_ADDRS (element, host_addrs[i], device_addrs[i]); + hash_entry_type *slot = htab_find_slot (&indirect_htab, element, + INSERT); + *slot = element; + } + *h_size = (sizeof (struct htab) + + htab_size (indirect_htab) * sizeof (hash_entry_type)); + return (void*) indirect_htab; +} diff --git a/libgomp/plugin/plugin-gcn.c b/libgomp/plugin/plugin-gcn.c index 498b549886f7..18f01e090023 100644 --- a/libgomp/plugin/plugin-gcn.c +++ b/libgomp/plugin/plugin-gcn.c @@ -51,6 +51,14 @@ #include "oacc-int.h" #include +/* Create hash-table for declare target's indirect clause on the host; + see build-target-indirect-htab.h for details. */ +#define USE_HASHTAB_LOOKUP_FOR_INDIRECT +#ifdef USE_HASHTAB_LOOKUP_FOR_INDIRECT +static void* create_target_indirect_map (size_t *, size_t, + uint64_t *, uint64_t *); +#endif + /* These probably won't be in elf.h for a while. */ #ifndef R_AMDGPU_NONE #define R_AMDGPU_NONE 0 @@ -3688,37 +3696,28 @@ GOMP_OFFLOAD_load_image (int ord, unsigned version, const void *target_data, (void*) ind_funcs_table_addr, sizeof (ind_funcs_table)); - /* Build host->target address map for indirect functions. */ - uint64_t ind_fn_map[ind_func_count * 2 + 1]; - for (unsigned i = 0; i < ind_func_count; i++) - { - ind_fn_map[i * 2] = host_ind_fn_table[i]; - ind_fn_map[i * 2 + 1] = ind_funcs_table[i]; - GCN_DEBUG ("Indirect function %d: %lx->%lx\n", - i, host_ind_fn_table[i], ind_funcs_table[i]); - } - ind_fn_map[ind_func_count * 2] = 0; - - /* Write the map onto the target. */ - void *map_target_addr - = GOMP_OFFLOAD_alloc (agent->device_id, sizeof (ind_fn_map)); - GCN_DEBUG ("Allocated indirect map at %p\n", map_target_addr); - - GOMP_OFFLOAD_host2dev (agent->device_id, map_target_addr, - (void*) ind_fn_map, - sizeof (ind_fn_map)); + /* For newer binaries, the hash table for 'indirect' is created on the + host. Older binaries don't have GOMP_INDIRECT_ADDR_HMAP on the + device side - and have to create the table themselves using + GOMP_INDIRECT_ADDR_MAP. */ - /* Write address of the map onto the target. */ hsa_executable_symbol_t symbol; - + bool host_init_htab = true; + #ifdef USE_HASHTAB_LOOKUP_FOR_INDIRECT status = hsa_fns.hsa_executable_get_symbol_fn (agent->executable, NULL, - XSTRING (GOMP_INDIRECT_ADDR_MAP), + XSTRING (GOMP_INDIRECT_ADDR_HMAP), agent->id, 0, &symbol); + if (status != HSA_STATUS_SUCCESS) + #endif + { + host_init_htab = false; + status = hsa_fns.hsa_executable_get_symbol_fn (agent->executable, NULL, + XSTRING (GOMP_INDIRECT_ADDR_MAP), agent->id, 0, &symbol); + } if (status != HSA_STATUS_SUCCESS) hsa_fatal ("Could not find GOMP_INDIRECT_ADDR_MAP in code object", status); - uint64_t varptr; uint32_t varsize; @@ -3734,9 +3733,51 @@ GOMP_OFFLOAD_load_image (int ord, unsigned version, const void *target_data, hsa_fatal ("Could not extract a variable size from its symbol", status); - GCN_DEBUG ("Found GOMP_INDIRECT_ADDR_MAP at %lx with size %d\n", - varptr, varsize); + GCN_DEBUG ("Found GOMP_INDIRECT_ADDR_%sMAP at %lx with size %d\n", + host_init_htab ? "H" : "", varptr, varsize); + void *map_target_addr; + if (!host_init_htab) + { + /* Build host->target address map for indirect functions. */ + uint64_t ind_fn_map[ind_func_count * 2 + 1]; + for (unsigned i = 0; i < ind_func_count; i++) + { + ind_fn_map[i * 2] = host_ind_fn_table[i]; + ind_fn_map[i * 2 + 1] = ind_funcs_table[i]; + GCN_DEBUG ("Indirect function %d: %lx->%lx\n", + i, host_ind_fn_table[i], ind_funcs_table[i]); + } + ind_fn_map[ind_func_count * 2] = 0; + /* Write the map onto the target. */ + map_target_addr = GOMP_OFFLOAD_alloc (agent->device_id, + sizeof (ind_fn_map)); + GOMP_OFFLOAD_host2dev (agent->device_id, map_target_addr, + (void*) ind_fn_map, sizeof (ind_fn_map)); + } + #ifdef USE_HASHTAB_LOOKUP_FOR_INDIRECT + else + { + /* FIXME: Handle multi-kernel load and unload, cf. PR 114690. */ + size_t host_map_size; + void *host_map; + host_map = create_target_indirect_map (&host_map_size, ind_func_count, + host_ind_fn_table, + ind_funcs_table); + for (unsigned i = 0; i < ind_func_count; i++) + GCN_DEBUG ("Indirect function %d: %lx->%lx\n", + i, host_ind_fn_table[i], ind_funcs_table[i]); + /* Write the map onto the target. */ + map_target_addr = GOMP_OFFLOAD_alloc (agent->device_id, + host_map_size); + GOMP_OFFLOAD_host2dev (agent->device_id, map_target_addr, + host_map, host_map_size); + } + #endif + + GCN_DEBUG ("Allocated indirect map at %p\n", map_target_addr); + + /* Write address of the map onto the target. */ GOMP_OFFLOAD_host2dev (agent->device_id, (void *) varptr, &map_target_addr, sizeof (map_target_addr)); @@ -5247,4 +5288,8 @@ GOMP_OFFLOAD_openacc_destroy_thread_data (void *data) free (data); } +#ifdef USE_HASHTAB_LOOKUP_FOR_INDIRECT + #include "build-target-indirect-htab.h" +#endif + /* }}} */ diff --git a/libgomp/plugin/plugin-nvptx.c b/libgomp/plugin/plugin-nvptx.c index 0ba445eab9b9..eb7b5e59d8f7 100644 --- a/libgomp/plugin/plugin-nvptx.c +++ b/libgomp/plugin/plugin-nvptx.c @@ -60,6 +60,14 @@ #include #include +/* Create hash-table for declare target's indirect clause on the host; + see build-target-indirect-htab.h for details. */ +#define USE_HASHTAB_LOOKUP_FOR_INDIRECT +#ifdef USE_HASHTAB_LOOKUP_FOR_INDIRECT +static void* create_target_indirect_map (size_t *, size_t, + uint64_t *, uint64_t *); +#endif + /* An arbitrary fixed limit (128MB) for the size of the OpenMP soft stacks block to cache between kernel invocations. For soft-stacks blocks bigger than this, we will free the block before attempting another GPU memory @@ -1626,39 +1634,71 @@ GOMP_OFFLOAD_load_image (int ord, unsigned version, const void *target_data, if (r != CUDA_SUCCESS) GOMP_PLUGIN_fatal ("cuMemcpyDtoH error: %s", cuda_error (r)); - /* Build host->target address map for indirect functions. */ - uint64_t ind_fn_map[ind_fn_entries * 2 + 1]; - for (unsigned k = 0; k < ind_fn_entries; k++) - { - ind_fn_map[k * 2] = host_ind_fn_table[k]; - ind_fn_map[k * 2 + 1] = ind_fn_table[k]; - GOMP_PLUGIN_debug (0, "Indirect function %d: %lx->%lx\n", - k, host_ind_fn_table[k], ind_fn_table[k]); - } - ind_fn_map[ind_fn_entries * 2] = 0; - - /* Write the map onto the target. */ - void *map_target_addr - = GOMP_OFFLOAD_alloc (ord, sizeof (ind_fn_map)); - GOMP_PLUGIN_debug (0, "Allocated indirect map at %p\n", map_target_addr); - - GOMP_OFFLOAD_host2dev (ord, map_target_addr, - (void*) ind_fn_map, - sizeof (ind_fn_map)); + /* For newer binaries, the hash table for 'indirect' is created on the + host. Older binaries don't have GOMP_INDIRECT_ADDR_HMAP on the + device side - and have to create the table themselves using + GOMP_INDIRECT_ADDR_MAP. */ - /* Write address of the map onto the target. */ CUdeviceptr varptr; size_t varsize; + bool host_init_htab = true; + #ifdef USE_HASHTAB_LOOKUP_FOR_INDIRECT r = CUDA_CALL_NOCHECK (cuModuleGetGlobal, &varptr, &varsize, - module, XSTRING (GOMP_INDIRECT_ADDR_MAP)); + module, XSTRING (GOMP_INDIRECT_ADDR_HMAP)); + if (r != CUDA_SUCCESS) + #endif + { + host_init_htab = false; + r = CUDA_CALL_NOCHECK (cuModuleGetGlobal, &varptr, &varsize, + module, XSTRING (GOMP_INDIRECT_ADDR_MAP)); + } if (r != CUDA_SUCCESS) GOMP_PLUGIN_fatal ("Indirect map variable not found in image: %s", cuda_error (r)); - GOMP_PLUGIN_debug (0, - "Indirect map variable found at %llx with size %ld\n", + "%s-style indirect map variable found at %llx with " + "size %ld\n", host_init_htab ? "New" : "Old", varptr, varsize); + void *map_target_addr; + if (!host_init_htab) + { + /* Build host->target address map for indirect functions. */ + uint64_t ind_fn_map[ind_fn_entries * 2 + 1]; + for (unsigned k = 0; k < ind_fn_entries; k++) + { + ind_fn_map[k * 2] = host_ind_fn_table[k]; + ind_fn_map[k * 2 + 1] = ind_fn_table[k]; + GOMP_PLUGIN_debug (0, "Indirect function %d: %lx->%lx\n", + k, host_ind_fn_table[k], ind_fn_table[k]); + } + ind_fn_map[ind_fn_entries * 2] = 0; + /* Write the map onto the target. */ + map_target_addr = GOMP_OFFLOAD_alloc (ord, sizeof (ind_fn_map)); + GOMP_OFFLOAD_host2dev (ord, map_target_addr, + (void *) ind_fn_map, sizeof (ind_fn_map)); + } + #ifdef USE_HASHTAB_LOOKUP_FOR_INDIRECT + else + { + /* FIXME: Handle multi-kernel load and unload, cf. PR 114690. */ + size_t host_map_size; + void *host_map; + host_map = create_target_indirect_map (&host_map_size, ind_fn_entries, + host_ind_fn_table, + ind_fn_table); + for (unsigned k = 0; k < ind_fn_entries; k++) + GOMP_PLUGIN_debug (0, "Indirect function %d: %lx->%lx\n", + k, host_ind_fn_table[k], ind_fn_table[k]); + /* Write the map onto the target. */ + map_target_addr = GOMP_OFFLOAD_alloc (ord, host_map_size); + GOMP_OFFLOAD_host2dev (ord, map_target_addr, host_map, host_map_size); + } + #endif + + GOMP_PLUGIN_debug (0, "Allocated indirect map at %p\n", map_target_addr); + + /* Write address of the map onto the target. */ GOMP_OFFLOAD_host2dev (ord, (void *) varptr, &map_target_addr, sizeof (map_target_addr)); } @@ -2898,3 +2938,7 @@ GOMP_OFFLOAD_run (int ord, void *tgt_fn, void *tgt_vars, void **args) } /* TODO: Implement GOMP_OFFLOAD_async_run. */ + +#ifdef USE_HASHTAB_LOOKUP_FOR_INDIRECT + #include "build-target-indirect-htab.h" +#endif diff --git a/libgomp/testsuite/Makefile.in b/libgomp/testsuite/Makefile.in index 4155350cf80e..477bfdb83de3 100644 --- a/libgomp/testsuite/Makefile.in +++ b/libgomp/testsuite/Makefile.in @@ -92,9 +92,11 @@ subdir = testsuite ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ $(top_srcdir)/../config/ax_count_cpus.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/depstand.m4 \ $(top_srcdir)/../config/enable.m4 \ $(top_srcdir)/../config/futex.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ $(top_srcdir)/../config/lthostflags.m4 \ $(top_srcdir)/../config/multi.m4 \ @@ -175,6 +177,7 @@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ diff --git a/libgomp/testsuite/libgomp.c-c++-common/declare-variant-1.c b/libgomp/testsuite/libgomp.c-c++-common/declare-variant-1.c new file mode 100644 index 000000000000..b6fc40ed46de --- /dev/null +++ b/libgomp/testsuite/libgomp.c-c++-common/declare-variant-1.c @@ -0,0 +1,40 @@ +/* { dg-do run } */ +/* { dg-additional-options "-fdump-tree-gimple" } */ + +/* PR middle-end/121922 */ + +/* Failed to re-check the global flag due to tree sharing. */ + +extern int flag; +int flag = 0; + +int +test_with_flag () +{ + return flag; +} + +#pragma omp declare variant (test_with_flag) match (user={condition(score(10): flag > 1)}) +int +test () +{ + return 0; +} + +void +doit () +{ + flag = 0; + if (test () != 0) __builtin_abort (); + flag = 1; + if (test () != 0) __builtin_abort (); + flag = 42; + if (test () != 42) __builtin_abort (); +} + +int main () +{ + doit (); +} + +/* { dg-final { scan-tree-dump-times "flag\\.\[^=\]*= flag;\[\n\r\]+ *if \\(flag\\.\[^>\]*> 1\\)" 3 "gimple" } } */ diff --git a/libgomp/testsuite/libgomp.oacc-fortran/pr92970-1.f90 b/libgomp/testsuite/libgomp.oacc-fortran/pr92970-1.f90 new file mode 100644 index 000000000000..c6235344a678 --- /dev/null +++ b/libgomp/testsuite/libgomp.oacc-fortran/pr92970-1.f90 @@ -0,0 +1,71 @@ +! Verify that 'acc_delete' etc. on non-present data is a no-op. +! +! Fortran version to libgomp.oacc-c-c++-common/pr92970-1.c + +program main +use openacc +implicit none (type, external) + +integer :: a, b, async + +! Side remark: 'sizeof' is a GNU extension; +! for standard conforming code, use c_sizeof or (in bits) storage_size. + +async = 0 +!$acc exit data copyout (a) + call acc_copyout (a, sizeof (a)) +!$acc exit data copyout (a) async (async) + async = async + 1 + call acc_copyout_async (a, sizeof (a), async) + async = async + 1 +!$acc exit data copyout (a) finalize + call acc_copyout_finalize (a, sizeof (a)) +!$acc exit data copyout (a) finalize async (async) + async = async + 1 + call acc_copyout_finalize_async (a, sizeof (a), async) + async = async + 1 + +!$acc exit data delete (a) + call acc_delete (a, sizeof (a)) +!$acc exit data delete (a) async (async) + async = async + 1 + call acc_delete_async (a, sizeof (a), async) + async = async + 1 +!$acc exit data delete (a) finalize + call acc_delete_finalize (a, sizeof (a)) +!$acc exit data delete (a) finalize async (async) + async = async + 1 + call acc_delete_finalize_async (a, sizeof (a), async) + async = async + 1 + + +! Same but taking the byte size from the argument + +!$acc exit data copyout (b) + call acc_copyout (b) +!$acc exit data copyout (b) async (async) + async = async + 1 + call acc_copyout_async (b, async) + async = async + 1 +!$acc exit data copyout (b) finalize + call acc_copyout_finalize (b) +!$acc exit data copyout (b) finalize async (async) + async = async + 1 + call acc_copyout_finalize_async (b, async) + async = async + 1 + +!$acc exit data delete (b) + call acc_delete (b) +!$acc exit data delete (b) async (async) + async = async + 1 + call acc_delete_async (b, async) + async = async + 1 +!$acc exit data delete (b) finalize + call acc_delete_finalize (b) +!$acc exit data delete (b) finalize async (async) + async = async + 1 + call acc_delete_finalize_async (b, async) + async = async + 1 + + call acc_wait_all () +end diff --git a/libgrust/ChangeLog b/libgrust/ChangeLog index 71634f38be9e..dfb93f0dfa24 100644 --- a/libgrust/ChangeLog +++ b/libgrust/ChangeLog @@ -1,3 +1,11 @@ +2025-10-05 Sam James + + * Makefile.in: Regenerate. + * aclocal.m4: Regenerate. + * configure: Regenerate. + * libformat_parser/Makefile.in: Regenerate. + * libproc_macro_internal/Makefile.in: Regenerate. + 2025-08-05 Marc Poulhiès * libproc_macro_internal/ffistring.h (FFIString__new): Likewise. diff --git a/libgrust/Makefile.in b/libgrust/Makefile.in index 6665f8da738f..767aa8b3ad9f 100644 --- a/libgrust/Makefile.in +++ b/libgrust/Makefile.in @@ -93,8 +93,10 @@ subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ $(top_srcdir)/../config/cet.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/depstand.m4 \ $(top_srcdir)/../config/enable.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ $(top_srcdir)/../config/multi.m4 \ $(top_srcdir)/../config/no-executables.m4 \ @@ -210,6 +212,7 @@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ diff --git a/libgrust/aclocal.m4 b/libgrust/aclocal.m4 index e66309232d25..afe66dff53b8 100644 --- a/libgrust/aclocal.m4 +++ b/libgrust/aclocal.m4 @@ -1249,8 +1249,10 @@ AC_SUBST([am__untar]) m4_include([../config/acx.m4]) m4_include([../config/cet.m4]) +m4_include([../config/clang-plugin.m4]) m4_include([../config/depstand.m4]) m4_include([../config/enable.m4]) +m4_include([../config/gcc-plugin.m4]) m4_include([../config/lead-dot.m4]) m4_include([../config/multi.m4]) m4_include([../config/no-executables.m4]) diff --git a/libgrust/configure b/libgrust/configure index 14a391643c69..b6f7c3eac4cd 100755 --- a/libgrust/configure +++ b/libgrust/configure @@ -651,6 +651,7 @@ LIPO NMEDIT DSYMUTIL RANLIB +LLVM_CONFIG OBJDUMP LN_S NM @@ -7593,8 +7594,266 @@ test -z "$deplibs_check_method" && deplibs_check_method=unknown -plugin_option= + +# Try CLANG_PLUGIN_FILE first since GCC_PLUGIN_OPTION may return the +# wrong plugin_option with clang. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang" >&5 +$as_echo_n "checking for clang... " >&6; } +if ${clang_cv_is_clang+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifdef __clang__ + yes +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "yes" >/dev/null 2>&1; then : + clang_cv_is_clang=yes +else + clang_cv_is_clang=no +fi +rm -f conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $clang_cv_is_clang" >&5 +$as_echo "$clang_cv_is_clang" >&6; } + plugin_file= + if test $clang_cv_is_clang = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang plugin file" >&5 +$as_echo_n "checking for clang plugin file... " >&6; } + plugin_names="LLVMgold.so" + for plugin in $plugin_names; do + plugin_file=`${CC} ${CFLAGS} --print-file-name $plugin` + if test x$plugin_file = x$plugin; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}llvm-config", so it can be a program name with args. +set dummy ${ac_tool_prefix}llvm-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_LLVM_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$LLVM_CONFIG"; then + ac_cv_prog_LLVM_CONFIG="$LLVM_CONFIG" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_LLVM_CONFIG="${ac_tool_prefix}llvm-config" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +LLVM_CONFIG=$ac_cv_prog_LLVM_CONFIG +if test -n "$LLVM_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LLVM_CONFIG" >&5 +$as_echo "$LLVM_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_LLVM_CONFIG"; then + ac_ct_LLVM_CONFIG=$LLVM_CONFIG + # Extract the first word of "llvm-config", so it can be a program name with args. +set dummy llvm-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_LLVM_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_LLVM_CONFIG"; then + ac_cv_prog_ac_ct_LLVM_CONFIG="$ac_ct_LLVM_CONFIG" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_LLVM_CONFIG="llvm-config" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_LLVM_CONFIG=$ac_cv_prog_ac_ct_LLVM_CONFIG +if test -n "$ac_ct_LLVM_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LLVM_CONFIG" >&5 +$as_echo "$ac_ct_LLVM_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_LLVM_CONFIG" = x; then + LLVM_CONFIG="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + LLVM_CONFIG=$ac_ct_LLVM_CONFIG + fi +else + LLVM_CONFIG="$ac_cv_prog_LLVM_CONFIG" +fi + + if test "$?" != 0; then + as_fn_error $? "Required tool 'llvm-config' not found on PATH." "$LINENO" 5 + fi + clang_lib_dir=`$LLVM_CONFIG --libdir` + if test -f $clang_lib_dir/$plugin; then + plugin_file=$clang_lib_dir/$plugin + fi + if test x$plugin_file != x$plugin; then + break; + fi + fi + done + if test -z $plugin_file; then + as_fn_error $? "Couldn't find clang plugin file for $CC." "$LINENO" 5 + fi + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + + if test "${AR}" = "" ; then + as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5 + fi + plugin_option="--plugin $plugin_file" + touch conftest.c + ${AR} $plugin_option rc conftest.a conftest.c + if test "$?" != 0; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 +$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} + plugin_file= + fi + rm -f conftest.* + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_file" >&5 +$as_echo "$plugin_file" >&6; } + fi + plugin_file="$plugin_file" + +if test -n "$plugin_file"; then + plugin_option="--plugin $plugin_file" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -plugin option" >&5 +$as_echo_n "checking for -plugin option... " >&6; } + plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll" +plugin_option= for plugin in $plugin_names; do plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin` if test x$plugin_so = x$plugin; then @@ -7605,7 +7864,119 @@ for plugin in $plugin_names; do break fi done +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + +if test "${AR}" = "" ; then + as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5 +fi +touch conftest.c +${AR} $plugin_option rc conftest.a conftest.c +if test "$?" != 0; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 +$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} + plugin_option= +fi +rm -f conftest.* +if test -n "$plugin_option"; then + plugin_option="$plugin_option" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_option" >&5 +$as_echo "$plugin_option" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + +fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. set dummy ${ac_tool_prefix}ar; ac_word=$2 @@ -7700,17 +8071,15 @@ fi test -z "$AR" && AR=ar if test -n "$plugin_option"; then - if $AR --help 2>&1 | grep -q "\--plugin"; then - touch conftest.c - $AR $plugin_option rc conftest.a conftest.c - if test "$?" != 0; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 -$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} - else + case "$AR" in + *"$plugin_option"*) + ;; + *) + if $AR --help 2>&1 | grep -q "\--plugin"; then AR="$AR $plugin_option" fi - rm -f conftest.* - fi + ;; + esac fi test -z "$AR_FLAGS" && AR_FLAGS=cru @@ -7917,9 +8286,15 @@ fi test -z "$RANLIB" && RANLIB=: if test -n "$plugin_option" && test "$RANLIB" != ":"; then - if $RANLIB --help 2>&1 | grep -q "\--plugin"; then - RANLIB="$RANLIB $plugin_option" - fi + case "$RANLIB" in + *"$plugin_option"*) + ;; + *) + if $RANLIB --help 2>&1 | grep -q "\--plugin"; then + RANLIB="$RANLIB $plugin_option" + fi + ;; + esac fi @@ -12657,7 +13032,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 12660 "configure" +#line 13035 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -12763,7 +13138,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 12766 "configure" +#line 13141 "configure" #include "confdefs.h" #if HAVE_DLFCN_H diff --git a/libgrust/libformat_parser/Makefile.in b/libgrust/libformat_parser/Makefile.in index f6c400d81499..b64ca2a41474 100644 --- a/libgrust/libformat_parser/Makefile.in +++ b/libgrust/libformat_parser/Makefile.in @@ -92,8 +92,10 @@ subdir = libformat_parser ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ $(top_srcdir)/../config/cet.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/depstand.m4 \ $(top_srcdir)/../config/enable.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ $(top_srcdir)/../config/multi.m4 \ $(top_srcdir)/../config/no-executables.m4 \ @@ -170,6 +172,7 @@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ diff --git a/libgrust/libproc_macro_internal/Makefile.in b/libgrust/libproc_macro_internal/Makefile.in index 68aa46106899..cc03c1a174cd 100644 --- a/libgrust/libproc_macro_internal/Makefile.in +++ b/libgrust/libproc_macro_internal/Makefile.in @@ -92,8 +92,10 @@ subdir = libproc_macro_internal ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ $(top_srcdir)/../config/cet.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/depstand.m4 \ $(top_srcdir)/../config/enable.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ $(top_srcdir)/../config/multi.m4 \ $(top_srcdir)/../config/no-executables.m4 \ @@ -170,6 +172,7 @@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ diff --git a/libiberty/ChangeLog b/libiberty/ChangeLog index 84edafa690d7..c60cf2859860 100644 --- a/libiberty/ChangeLog +++ b/libiberty/ChangeLog @@ -1,3 +1,9 @@ +2025-10-02 H.J. Lu + + * aclocal.m4: Regenerated. + * configure: Likewise. + * configure.ac: Synced from binutils-gdb. + 2025-08-17 Nathaniel Shead PR c++/120503 diff --git a/libiberty/aclocal.m4 b/libiberty/aclocal.m4 index 364fb6bc3b46..5151f5fee189 100644 --- a/libiberty/aclocal.m4 +++ b/libiberty/aclocal.m4 @@ -14,6 +14,7 @@ m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) m4_include([../config/acx.m4]) m4_include([../config/cet.m4]) +m4_include([../config/clang-plugin.m4]) m4_include([../config/enable.m4]) m4_include([../config/gcc-plugin.m4]) m4_include([../config/hwcaps.m4]) diff --git a/libiberty/configure b/libiberty/configure index 02fbaabe89e7..8996b6ea5e14 100755 --- a/libiberty/configure +++ b/libiberty/configure @@ -640,6 +640,9 @@ INSTALL_PROGRAM OUTPUT_OPTION NO_MINUS_C_MINUS_O ac_libiberty_warn_cflags +RANLIB_PLUGIN_OPTION +AR_PLUGIN_OPTION +LLVM_CONFIG EGREP GREP CPP @@ -650,8 +653,6 @@ CPPFLAGS LDFLAGS CFLAGS CC -RANLIB_PLUGIN_OPTION -AR_PLUGIN_OPTION RANLIB AR host_os @@ -2947,144 +2948,6 @@ else fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for -plugin option" >&5 -$as_echo_n "checking for -plugin option... " >&6; } - -plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll" -plugin_option= -for plugin in $plugin_names; do - plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin` - if test x$plugin_so = x$plugin; then - plugin_so=`${CC} ${CFLAGS} --print-file-name $plugin` - fi - if test x$plugin_so != x$plugin; then - plugin_option="--plugin $plugin_so" - break - fi -done -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. -set dummy ${ac_tool_prefix}ar; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_AR+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$AR"; then - ac_cv_prog_AR="$AR" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_AR="${ac_tool_prefix}ar" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -AR=$ac_cv_prog_AR -if test -n "$AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 -$as_echo "$AR" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_AR"; then - ac_ct_AR=$AR - # Extract the first word of "ar", so it can be a program name with args. -set dummy ar; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_AR+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_AR"; then - ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_AR="ar" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_AR=$ac_cv_prog_ac_ct_AR -if test -n "$ac_ct_AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 -$as_echo "$ac_ct_AR" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_AR" = x; then - AR="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - AR=$ac_ct_AR - fi -else - AR="$ac_cv_prog_AR" -fi - -if test "${AR}" = "" ; then - as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5 -fi -touch conftest.c -${AR} $plugin_option rc conftest.a conftest.c -if test "$?" != 0; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 -$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} - plugin_option= -fi -rm -f conftest.* -if test -n "$plugin_option"; then - PLUGIN_OPTION="$plugin_option" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_option" >&5 -$as_echo "$plugin_option" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - -if test -n "$PLUGIN_OPTION"; then - if $AR --help 2>&1 | grep -q "\--plugin"; then - AR_PLUGIN_OPTION="$PLUGIN_OPTION" - - fi - if $RANLIB --help 2>&1 | grep -q "\--plugin"; then - RANLIB_PLUGIN_OPTION="$PLUGIN_OPTION" - - fi -fi - # Add --enable-multilib to configure. # Default to --enable-multilib # Check whether --enable-multilib was given. @@ -4616,6 +4479,411 @@ fi ac_c_preproc_warn_flag=yes +# Try CLANG_PLUGIN_FILE first since GCC_PLUGIN_OPTION may return the +# wrong PLUGIN_OPTION with clang. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang" >&5 +$as_echo_n "checking for clang... " >&6; } +if ${clang_cv_is_clang+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifdef __clang__ + yes +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "yes" >/dev/null 2>&1; then : + clang_cv_is_clang=yes +else + clang_cv_is_clang=no +fi +rm -f conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $clang_cv_is_clang" >&5 +$as_echo "$clang_cv_is_clang" >&6; } + plugin_file= + if test $clang_cv_is_clang = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang plugin file" >&5 +$as_echo_n "checking for clang plugin file... " >&6; } + plugin_names="LLVMgold.so" + for plugin in $plugin_names; do + plugin_file=`${CC} ${CFLAGS} --print-file-name $plugin` + if test x$plugin_file = x$plugin; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}llvm-config", so it can be a program name with args. +set dummy ${ac_tool_prefix}llvm-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_LLVM_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$LLVM_CONFIG"; then + ac_cv_prog_LLVM_CONFIG="$LLVM_CONFIG" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_LLVM_CONFIG="${ac_tool_prefix}llvm-config" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +LLVM_CONFIG=$ac_cv_prog_LLVM_CONFIG +if test -n "$LLVM_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LLVM_CONFIG" >&5 +$as_echo "$LLVM_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_LLVM_CONFIG"; then + ac_ct_LLVM_CONFIG=$LLVM_CONFIG + # Extract the first word of "llvm-config", so it can be a program name with args. +set dummy llvm-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_LLVM_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_LLVM_CONFIG"; then + ac_cv_prog_ac_ct_LLVM_CONFIG="$ac_ct_LLVM_CONFIG" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_LLVM_CONFIG="llvm-config" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_LLVM_CONFIG=$ac_cv_prog_ac_ct_LLVM_CONFIG +if test -n "$ac_ct_LLVM_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LLVM_CONFIG" >&5 +$as_echo "$ac_ct_LLVM_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_LLVM_CONFIG" = x; then + LLVM_CONFIG="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + LLVM_CONFIG=$ac_ct_LLVM_CONFIG + fi +else + LLVM_CONFIG="$ac_cv_prog_LLVM_CONFIG" +fi + + if test "$?" != 0; then + as_fn_error $? "Required tool 'llvm-config' not found on PATH." "$LINENO" 5 + fi + clang_lib_dir=`$LLVM_CONFIG --libdir` + if test -f $clang_lib_dir/$plugin; then + plugin_file=$clang_lib_dir/$plugin + fi + if test x$plugin_file != x$plugin; then + break; + fi + fi + done + if test -z $plugin_file; then + as_fn_error $? "Couldn't find clang plugin file for $CC." "$LINENO" 5 + fi + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + + if test "${AR}" = "" ; then + as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5 + fi + plugin_option="--plugin $plugin_file" + touch conftest.c + ${AR} $plugin_option rc conftest.a conftest.c + if test "$?" != 0; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 +$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} + plugin_file= + fi + rm -f conftest.* + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_file" >&5 +$as_echo "$plugin_file" >&6; } + fi + PLUGIN_FILE="$plugin_file" + +if test -n "$PLUGIN_FILE"; then + PLUGIN_OPTION="--plugin $PLUGIN_FILE" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -plugin option" >&5 +$as_echo_n "checking for -plugin option... " >&6; } + +plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll" +plugin_option= +for plugin in $plugin_names; do + plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin` + if test x$plugin_so = x$plugin; then + plugin_so=`${CC} ${CFLAGS} --print-file-name $plugin` + fi + if test x$plugin_so != x$plugin; then + plugin_option="--plugin $plugin_so" + break + fi +done +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + +if test "${AR}" = "" ; then + as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5 +fi +touch conftest.c +${AR} $plugin_option rc conftest.a conftest.c +if test "$?" != 0; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 +$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} + plugin_option= +fi +rm -f conftest.* +if test -n "$plugin_option"; then + PLUGIN_OPTION="$plugin_option" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_option" >&5 +$as_echo "$plugin_option" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + +fi +if test -n "$PLUGIN_OPTION"; then + case "$AR" in + *"$PLUGIN_OPTION"*) + ;; + *) + if $AR --help 2>&1 | grep -q "\--plugin"; then + AR_PLUGIN_OPTION="$PLUGIN_OPTION" + + fi + ;; + esac + case "$RANLIB" in + *"$PLUGIN_OPTION"*) + ;; + *) + if $RANLIB --help 2>&1 | grep -q "\--plugin"; then + RANLIB_PLUGIN_OPTION="$PLUGIN_OPTION" + + fi + ;; + esac +fi + ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' diff --git a/libiberty/configure.ac b/libiberty/configure.ac index 3de5eca0df2b..199fa192fe4c 100644 --- a/libiberty/configure.ac +++ b/libiberty/configure.ac @@ -114,18 +114,6 @@ dnl to call AC_CHECK_PROG. AC_CHECK_TOOL(AR, ar) AC_CHECK_TOOL(RANLIB, ranlib, :) -GCC_PLUGIN_OPTION(PLUGIN_OPTION) -if test -n "$PLUGIN_OPTION"; then - if $AR --help 2>&1 | grep -q "\--plugin"; then - AR_PLUGIN_OPTION="$PLUGIN_OPTION" - AC_SUBST(AR_PLUGIN_OPTION) - fi - if $RANLIB --help 2>&1 | grep -q "\--plugin"; then - RANLIB_PLUGIN_OPTION="$PLUGIN_OPTION" - AC_SUBST(RANLIB_PLUGIN_OPTION) - fi -fi - dnl When switching to automake, replace the following with AM_ENABLE_MULTILIB. # Add --enable-multilib to configure. # Default to --enable-multilib @@ -176,6 +164,37 @@ AC_USE_SYSTEM_EXTENSIONS AC_SYS_LARGEFILE AC_PROG_CPP_WERROR +# Try CLANG_PLUGIN_FILE first since GCC_PLUGIN_OPTION may return the +# wrong PLUGIN_OPTION with clang. +CLANG_PLUGIN_FILE(PLUGIN_FILE) +if test -n "$PLUGIN_FILE"; then + PLUGIN_OPTION="--plugin $PLUGIN_FILE" +else + GCC_PLUGIN_OPTION(PLUGIN_OPTION) +fi +if test -n "$PLUGIN_OPTION"; then + case "$AR" in + *"$PLUGIN_OPTION"*) + ;; + *) + if $AR --help 2>&1 | grep -q "\--plugin"; then + AR_PLUGIN_OPTION="$PLUGIN_OPTION" + AC_SUBST(AR_PLUGIN_OPTION) + fi + ;; + esac + case "$RANLIB" in + *"$PLUGIN_OPTION"*) + ;; + *) + if $RANLIB --help 2>&1 | grep -q "\--plugin"; then + RANLIB_PLUGIN_OPTION="$PLUGIN_OPTION" + AC_SUBST(RANLIB_PLUGIN_OPTION) + fi + ;; + esac +fi + ACX_PROG_CC_WARNING_OPTS([-W -Wall -Wwrite-strings -Wc++-compat \ -Wstrict-prototypes \ -Wshadow=local], [ac_libiberty_warn_cflags]) diff --git a/libitm/ChangeLog b/libitm/ChangeLog index 4dab5b48ad72..fd20bb051fba 100644 --- a/libitm/ChangeLog +++ b/libitm/ChangeLog @@ -1,3 +1,10 @@ +2025-10-05 Sam James + + * Makefile.in: Regenerate. + * aclocal.m4: Regenerate. + * configure: Regenerate. + * testsuite/Makefile.in: Regenerate. + 2025-05-09 David Malcolm PR other/116792 diff --git a/libitm/Makefile.in b/libitm/Makefile.in index f02ad05efb19..cbca70267603 100644 --- a/libitm/Makefile.in +++ b/libitm/Makefile.in @@ -97,9 +97,11 @@ subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ $(top_srcdir)/../config/asmcfi.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/depstand.m4 \ $(top_srcdir)/../config/enable.m4 \ $(top_srcdir)/../config/futex.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/hwcaps.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ $(top_srcdir)/../config/mmap.m4 \ @@ -358,6 +360,7 @@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ diff --git a/libitm/aclocal.m4 b/libitm/aclocal.m4 index 4f65f6944b74..4cb1a5f9098f 100644 --- a/libitm/aclocal.m4 +++ b/libitm/aclocal.m4 @@ -1189,9 +1189,11 @@ AC_SUBST([am__untar]) m4_include([../config/acx.m4]) m4_include([../config/asmcfi.m4]) +m4_include([../config/clang-plugin.m4]) m4_include([../config/depstand.m4]) m4_include([../config/enable.m4]) m4_include([../config/futex.m4]) +m4_include([../config/gcc-plugin.m4]) m4_include([../config/hwcaps.m4]) m4_include([../config/lead-dot.m4]) m4_include([../config/mmap.m4]) diff --git a/libitm/configure b/libitm/configure index 9ba7fb03a578..a76c9f5040d2 100755 --- a/libitm/configure +++ b/libitm/configure @@ -665,12 +665,13 @@ ENABLE_DARWIN_AT_RPATH_TRUE enable_static enable_shared CXXCPP -CPP OTOOL64 OTOOL LIPO NMEDIT DSYMUTIL +LLVM_CONFIG +CPP OBJDUMP LN_S ac_ct_DUMPBIN @@ -1662,6 +1663,43 @@ fi } # ac_fn_cxx_try_compile +# ac_fn_c_try_cpp LINENO +# ---------------------- +# Try to preprocess conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } > conftest.i && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_cpp + # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. @@ -1739,43 +1777,6 @@ $as_echo "$ac_res" >&6; } } # ac_fn_c_check_header_compile -# ac_fn_c_try_cpp LINENO -# ---------------------- -# Try to preprocess conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_cpp () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } > conftest.i && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_c_try_cpp - # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes @@ -6832,29 +6833,191 @@ test -z "$deplibs_check_method" && deplibs_check_method=unknown -plugin_option= -plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll" -for plugin in $plugin_names; do - plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin` - if test x$plugin_so = x$plugin; then - plugin_so=`${CC} ${CFLAGS} --print-file-name $plugin` - fi - if test x$plugin_so != x$plugin; then - plugin_option="--plugin $plugin_so" - break - fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +$as_echo_n "checking how to run the C preprocessor... " >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if ${ac_cv_prog_CPP+:} false; then : + $as_echo_n "(cached) " >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. -set dummy ${ac_tool_prefix}ar; ac_word=$2 + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +$as_echo "$CPP" >&6; } +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details" "$LINENO" 5; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + +# Try CLANG_PLUGIN_FILE first since GCC_PLUGIN_OPTION may return the +# wrong plugin_option with clang. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang" >&5 +$as_echo_n "checking for clang... " >&6; } +if ${clang_cv_is_clang+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifdef __clang__ + yes +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "yes" >/dev/null 2>&1; then : + clang_cv_is_clang=yes +else + clang_cv_is_clang=no +fi +rm -f conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $clang_cv_is_clang" >&5 +$as_echo "$clang_cv_is_clang" >&6; } + plugin_file= + if test $clang_cv_is_clang = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang plugin file" >&5 +$as_echo_n "checking for clang plugin file... " >&6; } + plugin_names="LLVMgold.so" + for plugin in $plugin_names; do + plugin_file=`${CC} ${CFLAGS} --print-file-name $plugin` + if test x$plugin_file = x$plugin; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}llvm-config", so it can be a program name with args. +set dummy ${ac_tool_prefix}llvm-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_AR+:} false; then : +if ${ac_cv_prog_LLVM_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else - if test -n "$AR"; then - ac_cv_prog_AR="$AR" # Let the user override the test. + if test -n "$LLVM_CONFIG"; then + ac_cv_prog_LLVM_CONFIG="$LLVM_CONFIG" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH @@ -6863,7 +7026,7 @@ do test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_AR="${ac_tool_prefix}ar" + ac_cv_prog_LLVM_CONFIG="${ac_tool_prefix}llvm-config" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi @@ -6873,10 +7036,10 @@ IFS=$as_save_IFS fi fi -AR=$ac_cv_prog_AR -if test -n "$AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 -$as_echo "$AR" >&6; } +LLVM_CONFIG=$ac_cv_prog_LLVM_CONFIG +if test -n "$LLVM_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LLVM_CONFIG" >&5 +$as_echo "$LLVM_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } @@ -6884,13 +7047,120 @@ fi fi -if test -z "$ac_cv_prog_AR"; then - ac_ct_AR=$AR - # Extract the first word of "ar", so it can be a program name with args. -set dummy ar; ac_word=$2 +if test -z "$ac_cv_prog_LLVM_CONFIG"; then + ac_ct_LLVM_CONFIG=$LLVM_CONFIG + # Extract the first word of "llvm-config", so it can be a program name with args. +set dummy llvm-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_AR+:} false; then : +if ${ac_cv_prog_ac_ct_LLVM_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_LLVM_CONFIG"; then + ac_cv_prog_ac_ct_LLVM_CONFIG="$ac_ct_LLVM_CONFIG" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_LLVM_CONFIG="llvm-config" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_LLVM_CONFIG=$ac_cv_prog_ac_ct_LLVM_CONFIG +if test -n "$ac_ct_LLVM_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LLVM_CONFIG" >&5 +$as_echo "$ac_ct_LLVM_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_LLVM_CONFIG" = x; then + LLVM_CONFIG="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + LLVM_CONFIG=$ac_ct_LLVM_CONFIG + fi +else + LLVM_CONFIG="$ac_cv_prog_LLVM_CONFIG" +fi + + if test "$?" != 0; then + as_fn_error $? "Required tool 'llvm-config' not found on PATH." "$LINENO" 5 + fi + clang_lib_dir=`$LLVM_CONFIG --libdir` + if test -f $clang_lib_dir/$plugin; then + plugin_file=$clang_lib_dir/$plugin + fi + if test x$plugin_file != x$plugin; then + break; + fi + fi + done + if test -z $plugin_file; then + as_fn_error $? "Couldn't find clang plugin file for $CC." "$LINENO" 5 + fi + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AR"; then @@ -6923,7 +7193,7 @@ $as_echo "no" >&6; } fi if test "x$ac_ct_AR" = x; then - AR="false" + AR="" else case $cross_compiling:$ac_tool_warned in yes:) @@ -6937,19 +7207,257 @@ else AR="$ac_cv_prog_AR" fi -test -z "$AR" && AR=ar -if test -n "$plugin_option"; then - if $AR --help 2>&1 | grep -q "\--plugin"; then + if test "${AR}" = "" ; then + as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5 + fi + plugin_option="--plugin $plugin_file" touch conftest.c - $AR $plugin_option rc conftest.a conftest.c + ${AR} $plugin_option rc conftest.a conftest.c if test "$?" != 0; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} - else - AR="$AR $plugin_option" + plugin_file= fi rm -f conftest.* + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_file" >&5 +$as_echo "$plugin_file" >&6; } + fi + plugin_file="$plugin_file" + +if test -n "$plugin_file"; then + plugin_option="--plugin $plugin_file" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -plugin option" >&5 +$as_echo_n "checking for -plugin option... " >&6; } + +plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll" +plugin_option= +for plugin in $plugin_names; do + plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin` + if test x$plugin_so = x$plugin; then + plugin_so=`${CC} ${CFLAGS} --print-file-name $plugin` + fi + if test x$plugin_so != x$plugin; then + plugin_option="--plugin $plugin_so" + break + fi +done +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR fi +else + AR="$ac_cv_prog_AR" +fi + +if test "${AR}" = "" ; then + as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5 +fi +touch conftest.c +${AR} $plugin_option rc conftest.a conftest.c +if test "$?" != 0; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 +$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} + plugin_option= +fi +rm -f conftest.* +if test -n "$plugin_option"; then + plugin_option="$plugin_option" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_option" >&5 +$as_echo "$plugin_option" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + +fi +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + +test -z "$AR" && AR=ar +if test -n "$plugin_option"; then + case "$AR" in + *"$plugin_option"*) + ;; + *) + if $AR --help 2>&1 | grep -q "\--plugin"; then + AR="$AR $plugin_option" + fi + ;; + esac fi test -z "$AR_FLAGS" && AR_FLAGS=cru @@ -7156,9 +7664,15 @@ fi test -z "$RANLIB" && RANLIB=: if test -n "$plugin_option" && test "$RANLIB" != ":"; then - if $RANLIB --help 2>&1 | grep -q "\--plugin"; then - RANLIB="$RANLIB $plugin_option" - fi + case "$RANLIB" in + *"$plugin_option"*) + ;; + *) + if $RANLIB --help 2>&1 | grep -q "\--plugin"; then + RANLIB="$RANLIB $plugin_option" + fi + ;; + esac fi @@ -7485,7 +7999,6 @@ fi - # Check whether --enable-libtool-lock was given. @@ -8311,144 +8824,6 @@ $as_echo "$lt_cv_ld_force_load" >&6; } ;; esac -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 -$as_echo_n "checking how to run the C preprocessor... " >&6; } -# On Suns, sometimes $CPP names a directory. -if test -n "$CPP" && test -d "$CPP"; then - CPP= -fi -if test -z "$CPP"; then - if ${ac_cv_prog_CPP+:} false; then : - $as_echo_n "(cached) " >&6 -else - # Double quotes because CPP needs to be expanded - for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" - do - ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - break -fi - - done - ac_cv_prog_CPP=$CPP - -fi - CPP=$ac_cv_prog_CPP -else - ac_cv_prog_CPP=$CPP -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 -$as_echo "$CPP" >&6; } -ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "C preprocessor \"$CPP\" fails sanity check -See \`config.log' for more details" "$LINENO" 5; } -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : @@ -12131,7 +12506,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 12134 "configure" +#line 12509 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -12237,7 +12612,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 12240 "configure" +#line 12615 "configure" #include "confdefs.h" #if HAVE_DLFCN_H diff --git a/libitm/testsuite/Makefile.in b/libitm/testsuite/Makefile.in index 41db3f5b85fd..2e0446333655 100644 --- a/libitm/testsuite/Makefile.in +++ b/libitm/testsuite/Makefile.in @@ -92,9 +92,11 @@ subdir = testsuite ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ $(top_srcdir)/../config/asmcfi.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/depstand.m4 \ $(top_srcdir)/../config/enable.m4 \ $(top_srcdir)/../config/futex.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/hwcaps.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ $(top_srcdir)/../config/mmap.m4 \ @@ -180,6 +182,7 @@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ diff --git a/libobjc/ChangeLog b/libobjc/ChangeLog index 723002ce4f6a..5ddf80e0e7e2 100644 --- a/libobjc/ChangeLog +++ b/libobjc/ChangeLog @@ -1,3 +1,8 @@ +2025-10-05 Sam James + + * aclocal.m4: Regenerate. + * configure: Regenerate. + 2024-09-23 Andrew Kreimer * Makefile.in: s/overrridden/overridden. diff --git a/libobjc/aclocal.m4 b/libobjc/aclocal.m4 index 9ac0f645b52b..08cc6d0cd4b9 100644 --- a/libobjc/aclocal.m4 +++ b/libobjc/aclocal.m4 @@ -150,6 +150,8 @@ m4_include([../ltsugar.m4]) m4_include([../ltversion.m4]) m4_include([../lt~obsolete.m4]) m4_include([../config/cet.m4]) +m4_include([../config/clang-plugin.m4]) +m4_include([../config/gcc-plugin.m4]) m4_include([../config/lthostflags.m4]) m4_include([../config/multi.m4]) m4_include([../config/override.m4]) diff --git a/libobjc/configure b/libobjc/configure index 68172549137a..c7a5c8f0825a 100755 --- a/libobjc/configure +++ b/libobjc/configure @@ -640,7 +640,6 @@ extra_ldflags_libobjc ENABLE_DARWIN_AT_RPATH_FALSE ENABLE_DARWIN_AT_RPATH_TRUE SET_MAKE -CPP OTOOL64 OTOOL LIPO @@ -648,6 +647,8 @@ NMEDIT DSYMUTIL AWK STRIP +LLVM_CONFIG +CPP LN_S NM ac_ct_DUMPBIN @@ -1556,6 +1557,43 @@ fi } # ac_fn_c_try_compile +# ac_fn_c_try_cpp LINENO +# ---------------------- +# Try to preprocess conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } > conftest.i && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_cpp + # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. @@ -1633,43 +1671,6 @@ $as_echo "$ac_res" >&6; } } # ac_fn_c_check_header_compile -# ac_fn_c_try_cpp LINENO -# ---------------------- -# Try to preprocess conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_cpp () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } > conftest.i && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_c_try_cpp - # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes @@ -5506,29 +5507,190 @@ test -z "$deplibs_check_method" && deplibs_check_method=unknown -plugin_option= -plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll" -for plugin in $plugin_names; do - plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin` - if test x$plugin_so = x$plugin; then - plugin_so=`${CC} ${CFLAGS} --print-file-name $plugin` - fi - if test x$plugin_so != x$plugin; then - plugin_option="--plugin $plugin_so" - break - fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +$as_echo_n "checking how to run the C preprocessor... " >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if ${ac_cv_prog_CPP+:} false; then : + $as_echo_n "(cached) " >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. -set dummy ${ac_tool_prefix}ar; ac_word=$2 + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +$as_echo "$CPP" >&6; } +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details" "$LINENO" 5; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + +# Try CLANG_PLUGIN_FILE first since GCC_PLUGIN_OPTION may return the +# wrong plugin_option with clang. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang" >&5 +$as_echo_n "checking for clang... " >&6; } +if ${clang_cv_is_clang+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifdef __clang__ + yes +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "yes" >/dev/null 2>&1; then : + clang_cv_is_clang=yes +else + clang_cv_is_clang=no +fi +rm -f conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $clang_cv_is_clang" >&5 +$as_echo "$clang_cv_is_clang" >&6; } + plugin_file= + if test $clang_cv_is_clang = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang plugin file" >&5 +$as_echo_n "checking for clang plugin file... " >&6; } + plugin_names="LLVMgold.so" + for plugin in $plugin_names; do + plugin_file=`${CC} ${CFLAGS} --print-file-name $plugin` + if test x$plugin_file = x$plugin; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}llvm-config", so it can be a program name with args. +set dummy ${ac_tool_prefix}llvm-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_AR+:} false; then : +if ${ac_cv_prog_LLVM_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else - if test -n "$AR"; then - ac_cv_prog_AR="$AR" # Let the user override the test. + if test -n "$LLVM_CONFIG"; then + ac_cv_prog_LLVM_CONFIG="$LLVM_CONFIG" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH @@ -5537,7 +5699,7 @@ do test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_AR="${ac_tool_prefix}ar" + ac_cv_prog_LLVM_CONFIG="${ac_tool_prefix}llvm-config" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi @@ -5547,10 +5709,10 @@ IFS=$as_save_IFS fi fi -AR=$ac_cv_prog_AR -if test -n "$AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 -$as_echo "$AR" >&6; } +LLVM_CONFIG=$ac_cv_prog_LLVM_CONFIG +if test -n "$LLVM_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LLVM_CONFIG" >&5 +$as_echo "$LLVM_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } @@ -5558,16 +5720,123 @@ fi fi -if test -z "$ac_cv_prog_AR"; then - ac_ct_AR=$AR - # Extract the first word of "ar", so it can be a program name with args. -set dummy ar; ac_word=$2 +if test -z "$ac_cv_prog_LLVM_CONFIG"; then + ac_ct_LLVM_CONFIG=$LLVM_CONFIG + # Extract the first word of "llvm-config", so it can be a program name with args. +set dummy llvm-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_AR+:} false; then : +if ${ac_cv_prog_ac_ct_LLVM_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else - if test -n "$ac_ct_AR"; then + if test -n "$ac_ct_LLVM_CONFIG"; then + ac_cv_prog_ac_ct_LLVM_CONFIG="$ac_ct_LLVM_CONFIG" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_LLVM_CONFIG="llvm-config" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_LLVM_CONFIG=$ac_cv_prog_ac_ct_LLVM_CONFIG +if test -n "$ac_ct_LLVM_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LLVM_CONFIG" >&5 +$as_echo "$ac_ct_LLVM_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_LLVM_CONFIG" = x; then + LLVM_CONFIG="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + LLVM_CONFIG=$ac_ct_LLVM_CONFIG + fi +else + LLVM_CONFIG="$ac_cv_prog_LLVM_CONFIG" +fi + + if test "$?" != 0; then + as_fn_error $? "Required tool 'llvm-config' not found on PATH." "$LINENO" 5 + fi + clang_lib_dir=`$LLVM_CONFIG --libdir` + if test -f $clang_lib_dir/$plugin; then + plugin_file=$clang_lib_dir/$plugin + fi + if test x$plugin_file != x$plugin; then + break; + fi + fi + done + if test -z $plugin_file; then + as_fn_error $? "Couldn't find clang plugin file for $CC." "$LINENO" 5 + fi + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -5597,7 +5866,7 @@ $as_echo "no" >&6; } fi if test "x$ac_ct_AR" = x; then - AR="false" + AR="" else case $cross_compiling:$ac_tool_warned in yes:) @@ -5611,19 +5880,257 @@ else AR="$ac_cv_prog_AR" fi -test -z "$AR" && AR=ar -if test -n "$plugin_option"; then - if $AR --help 2>&1 | grep -q "\--plugin"; then + if test "${AR}" = "" ; then + as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5 + fi + plugin_option="--plugin $plugin_file" touch conftest.c - $AR $plugin_option rc conftest.a conftest.c + ${AR} $plugin_option rc conftest.a conftest.c if test "$?" != 0; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} - else - AR="$AR $plugin_option" + plugin_file= fi rm -f conftest.* + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_file" >&5 +$as_echo "$plugin_file" >&6; } + fi + plugin_file="$plugin_file" + +if test -n "$plugin_file"; then + plugin_option="--plugin $plugin_file" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -plugin option" >&5 +$as_echo_n "checking for -plugin option... " >&6; } + +plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll" +plugin_option= +for plugin in $plugin_names; do + plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin` + if test x$plugin_so = x$plugin; then + plugin_so=`${CC} ${CFLAGS} --print-file-name $plugin` + fi + if test x$plugin_so != x$plugin; then + plugin_option="--plugin $plugin_so" + break + fi +done +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + +if test "${AR}" = "" ; then + as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5 +fi +touch conftest.c +${AR} $plugin_option rc conftest.a conftest.c +if test "$?" != 0; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 +$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} + plugin_option= +fi +rm -f conftest.* +if test -n "$plugin_option"; then + plugin_option="$plugin_option" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_option" >&5 +$as_echo "$plugin_option" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + +fi +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + +test -z "$AR" && AR=ar +if test -n "$plugin_option"; then + case "$AR" in + *"$plugin_option"*) + ;; + *) + if $AR --help 2>&1 | grep -q "\--plugin"; then + AR="$AR $plugin_option" + fi + ;; + esac fi test -z "$AR_FLAGS" && AR_FLAGS=cru @@ -5830,9 +6337,15 @@ fi test -z "$RANLIB" && RANLIB=: if test -n "$plugin_option" && test "$RANLIB" != ":"; then - if $RANLIB --help 2>&1 | grep -q "\--plugin"; then - RANLIB="$RANLIB $plugin_option" - fi + case "$RANLIB" in + *"$plugin_option"*) + ;; + *) + if $RANLIB --help 2>&1 | grep -q "\--plugin"; then + RANLIB="$RANLIB $plugin_option" + fi + ;; + esac fi @@ -7032,144 +7545,6 @@ $as_echo "$lt_cv_ld_force_load" >&6; } ;; esac -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 -$as_echo_n "checking how to run the C preprocessor... " >&6; } -# On Suns, sometimes $CPP names a directory. -if test -n "$CPP" && test -d "$CPP"; then - CPP= -fi -if test -z "$CPP"; then - if ${ac_cv_prog_CPP+:} false; then : - $as_echo_n "(cached) " >&6 -else - # Double quotes because CPP needs to be expanded - for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" - do - ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - break -fi - - done - ac_cv_prog_CPP=$CPP - -fi - CPP=$ac_cv_prog_CPP -else - ac_cv_prog_CPP=$CPP -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 -$as_echo "$CPP" >&6; } -ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "C preprocessor \"$CPP\" fails sanity check -See \`config.log' for more details" "$LINENO" 5; } -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : @@ -10876,7 +11251,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 10879 "configure" +#line 11254 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -10982,7 +11357,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 10985 "configure" +#line 11360 "configure" #include "confdefs.h" #if HAVE_DLFCN_H diff --git a/libphobos/ChangeLog b/libphobos/ChangeLog index cabed28bb5d2..b803c615a015 100644 --- a/libphobos/ChangeLog +++ b/libphobos/ChangeLog @@ -1,3 +1,12 @@ +2025-10-05 Sam James + + * Makefile.in: Regenerate. + * aclocal.m4: Regenerate. + * configure: Regenerate. + * libdruntime/Makefile.in: Regenerate. + * src/Makefile.in: Regenerate. + * testsuite/Makefile.in: Regenerate. + 2025-09-07 Sam James * configure.tgt: Add hppa[12]*-*-linux* as a supported target. diff --git a/libphobos/Makefile.in b/libphobos/Makefile.in index cd64fd531ca9..6a3c25fd8106 100644 --- a/libphobos/Makefile.in +++ b/libphobos/Makefile.in @@ -109,7 +109,9 @@ subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ $(top_srcdir)/../config/cet.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/enable.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ $(top_srcdir)/../config/multi.m4 \ $(top_srcdir)/../config/override.m4 \ @@ -249,6 +251,7 @@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBZ = @LIBZ@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ diff --git a/libphobos/aclocal.m4 b/libphobos/aclocal.m4 index b2e1cbf0197e..68326d0b2859 100644 --- a/libphobos/aclocal.m4 +++ b/libphobos/aclocal.m4 @@ -874,7 +874,9 @@ AC_SUBST([am__untar]) m4_include([../config/acx.m4]) m4_include([../config/cet.m4]) +m4_include([../config/clang-plugin.m4]) m4_include([../config/enable.m4]) +m4_include([../config/gcc-plugin.m4]) m4_include([../config/lead-dot.m4]) m4_include([../config/multi.m4]) m4_include([../config/override.m4]) diff --git a/libphobos/configure b/libphobos/configure index 4f5be7d4ff4e..70e92efab66e 100755 --- a/libphobos/configure +++ b/libphobos/configure @@ -719,6 +719,7 @@ OTOOL LIPO NMEDIT DSYMUTIL +LLVM_CONFIG OBJDUMP LN_S NM @@ -6835,8 +6836,266 @@ test -z "$deplibs_check_method" && deplibs_check_method=unknown -plugin_option= + +# Try CLANG_PLUGIN_FILE first since GCC_PLUGIN_OPTION may return the +# wrong plugin_option with clang. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang" >&5 +$as_echo_n "checking for clang... " >&6; } +if ${clang_cv_is_clang+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifdef __clang__ + yes +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "yes" >/dev/null 2>&1; then : + clang_cv_is_clang=yes +else + clang_cv_is_clang=no +fi +rm -f conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $clang_cv_is_clang" >&5 +$as_echo "$clang_cv_is_clang" >&6; } + plugin_file= + if test $clang_cv_is_clang = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang plugin file" >&5 +$as_echo_n "checking for clang plugin file... " >&6; } + plugin_names="LLVMgold.so" + for plugin in $plugin_names; do + plugin_file=`${CC} ${CFLAGS} --print-file-name $plugin` + if test x$plugin_file = x$plugin; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}llvm-config", so it can be a program name with args. +set dummy ${ac_tool_prefix}llvm-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_LLVM_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$LLVM_CONFIG"; then + ac_cv_prog_LLVM_CONFIG="$LLVM_CONFIG" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_LLVM_CONFIG="${ac_tool_prefix}llvm-config" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +LLVM_CONFIG=$ac_cv_prog_LLVM_CONFIG +if test -n "$LLVM_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LLVM_CONFIG" >&5 +$as_echo "$LLVM_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_LLVM_CONFIG"; then + ac_ct_LLVM_CONFIG=$LLVM_CONFIG + # Extract the first word of "llvm-config", so it can be a program name with args. +set dummy llvm-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_LLVM_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_LLVM_CONFIG"; then + ac_cv_prog_ac_ct_LLVM_CONFIG="$ac_ct_LLVM_CONFIG" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_LLVM_CONFIG="llvm-config" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_LLVM_CONFIG=$ac_cv_prog_ac_ct_LLVM_CONFIG +if test -n "$ac_ct_LLVM_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LLVM_CONFIG" >&5 +$as_echo "$ac_ct_LLVM_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_LLVM_CONFIG" = x; then + LLVM_CONFIG="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + LLVM_CONFIG=$ac_ct_LLVM_CONFIG + fi +else + LLVM_CONFIG="$ac_cv_prog_LLVM_CONFIG" +fi + + if test "$?" != 0; then + as_fn_error $? "Required tool 'llvm-config' not found on PATH." "$LINENO" 5 + fi + clang_lib_dir=`$LLVM_CONFIG --libdir` + if test -f $clang_lib_dir/$plugin; then + plugin_file=$clang_lib_dir/$plugin + fi + if test x$plugin_file != x$plugin; then + break; + fi + fi + done + if test -z $plugin_file; then + as_fn_error $? "Couldn't find clang plugin file for $CC." "$LINENO" 5 + fi + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + + if test "${AR}" = "" ; then + as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5 + fi + plugin_option="--plugin $plugin_file" + touch conftest.c + ${AR} $plugin_option rc conftest.a conftest.c + if test "$?" != 0; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 +$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} + plugin_file= + fi + rm -f conftest.* + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_file" >&5 +$as_echo "$plugin_file" >&6; } + fi + plugin_file="$plugin_file" + +if test -n "$plugin_file"; then + plugin_option="--plugin $plugin_file" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -plugin option" >&5 +$as_echo_n "checking for -plugin option... " >&6; } + plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll" +plugin_option= for plugin in $plugin_names; do plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin` if test x$plugin_so = x$plugin; then @@ -6847,7 +7106,119 @@ for plugin in $plugin_names; do break fi done +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + +if test "${AR}" = "" ; then + as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5 +fi +touch conftest.c +${AR} $plugin_option rc conftest.a conftest.c +if test "$?" != 0; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 +$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} + plugin_option= +fi +rm -f conftest.* +if test -n "$plugin_option"; then + plugin_option="$plugin_option" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_option" >&5 +$as_echo "$plugin_option" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + +fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. set dummy ${ac_tool_prefix}ar; ac_word=$2 @@ -6942,17 +7313,15 @@ fi test -z "$AR" && AR=ar if test -n "$plugin_option"; then - if $AR --help 2>&1 | grep -q "\--plugin"; then - touch conftest.c - $AR $plugin_option rc conftest.a conftest.c - if test "$?" != 0; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 -$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} - else + case "$AR" in + *"$plugin_option"*) + ;; + *) + if $AR --help 2>&1 | grep -q "\--plugin"; then AR="$AR $plugin_option" fi - rm -f conftest.* - fi + ;; + esac fi test -z "$AR_FLAGS" && AR_FLAGS=cru @@ -7159,9 +7528,15 @@ fi test -z "$RANLIB" && RANLIB=: if test -n "$plugin_option" && test "$RANLIB" != ":"; then - if $RANLIB --help 2>&1 | grep -q "\--plugin"; then - RANLIB="$RANLIB $plugin_option" - fi + case "$RANLIB" in + *"$plugin_option"*) + ;; + *) + if $RANLIB --help 2>&1 | grep -q "\--plugin"; then + RANLIB="$RANLIB $plugin_option" + fi + ;; + esac fi @@ -11864,7 +12239,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 11867 "configure" +#line 12242 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -11970,7 +12345,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 11973 "configure" +#line 12348 "configure" #include "confdefs.h" #if HAVE_DLFCN_H diff --git a/libphobos/libdruntime/Makefile.in b/libphobos/libdruntime/Makefile.in index 1c0fa546dbbf..6d490cf4a9b7 100644 --- a/libphobos/libdruntime/Makefile.in +++ b/libphobos/libdruntime/Makefile.in @@ -135,7 +135,9 @@ subdir = libdruntime ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ $(top_srcdir)/../config/cet.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/enable.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ $(top_srcdir)/../config/multi.m4 \ $(top_srcdir)/../config/override.m4 \ @@ -667,6 +669,7 @@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBZ = @LIBZ@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ diff --git a/libphobos/src/Makefile.in b/libphobos/src/Makefile.in index 64cc9c3d0104..2bbd70f960ad 100644 --- a/libphobos/src/Makefile.in +++ b/libphobos/src/Makefile.in @@ -94,7 +94,9 @@ subdir = src ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ $(top_srcdir)/../config/cet.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/enable.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ $(top_srcdir)/../config/multi.m4 \ $(top_srcdir)/../config/override.m4 \ @@ -402,6 +404,7 @@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBZ = @LIBZ@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ diff --git a/libphobos/testsuite/Makefile.in b/libphobos/testsuite/Makefile.in index 3df08152b740..2f545f9d7239 100644 --- a/libphobos/testsuite/Makefile.in +++ b/libphobos/testsuite/Makefile.in @@ -94,7 +94,9 @@ subdir = testsuite ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ $(top_srcdir)/../config/cet.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/enable.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ $(top_srcdir)/../config/multi.m4 \ $(top_srcdir)/../config/override.m4 \ @@ -193,6 +195,7 @@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBZ = @LIBZ@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ diff --git a/libquadmath/ChangeLog b/libquadmath/ChangeLog index 00af00809826..63eb0ba6d5b3 100644 --- a/libquadmath/ChangeLog +++ b/libquadmath/ChangeLog @@ -1,3 +1,9 @@ +2025-10-05 Sam James + + * Makefile.in: Regenerate. + * aclocal.m4: Regenerate. + * configure: Regenerate. + 2025-04-09 Jakub Jelinek * math/expq.c (C): Fix up THREEp96 constant. diff --git a/libquadmath/Makefile.in b/libquadmath/Makefile.in index ff3373064b17..ef7c3640bcb1 100644 --- a/libquadmath/Makefile.in +++ b/libquadmath/Makefile.in @@ -94,7 +94,9 @@ target_triplet = @target@ subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/depstand.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ $(top_srcdir)/../config/lthostflags.m4 \ $(top_srcdir)/../config/multi.m4 \ @@ -360,6 +362,7 @@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ diff --git a/libquadmath/aclocal.m4 b/libquadmath/aclocal.m4 index f15cc0b9f081..ca5c22a666f2 100644 --- a/libquadmath/aclocal.m4 +++ b/libquadmath/aclocal.m4 @@ -1168,7 +1168,9 @@ AC_SUBST([am__untar]) ]) # _AM_PROG_TAR m4_include([../config/acx.m4]) +m4_include([../config/clang-plugin.m4]) m4_include([../config/depstand.m4]) +m4_include([../config/gcc-plugin.m4]) m4_include([../config/lead-dot.m4]) m4_include([../config/lthostflags.m4]) m4_include([../config/multi.m4]) diff --git a/libquadmath/configure b/libquadmath/configure index f82dd3d0d6d4..c0d6c6abe9dd 100755 --- a/libquadmath/configure +++ b/libquadmath/configure @@ -662,6 +662,7 @@ NMEDIT DSYMUTIL RANLIB AR +LLVM_CONFIG OBJDUMP LN_S NM @@ -5859,8 +5860,266 @@ test -z "$deplibs_check_method" && deplibs_check_method=unknown -plugin_option= + +# Try CLANG_PLUGIN_FILE first since GCC_PLUGIN_OPTION may return the +# wrong plugin_option with clang. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang" >&5 +$as_echo_n "checking for clang... " >&6; } +if ${clang_cv_is_clang+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifdef __clang__ + yes +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "yes" >/dev/null 2>&1; then : + clang_cv_is_clang=yes +else + clang_cv_is_clang=no +fi +rm -f conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $clang_cv_is_clang" >&5 +$as_echo "$clang_cv_is_clang" >&6; } + plugin_file= + if test $clang_cv_is_clang = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang plugin file" >&5 +$as_echo_n "checking for clang plugin file... " >&6; } + plugin_names="LLVMgold.so" + for plugin in $plugin_names; do + plugin_file=`${CC} ${CFLAGS} --print-file-name $plugin` + if test x$plugin_file = x$plugin; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}llvm-config", so it can be a program name with args. +set dummy ${ac_tool_prefix}llvm-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_LLVM_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$LLVM_CONFIG"; then + ac_cv_prog_LLVM_CONFIG="$LLVM_CONFIG" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_LLVM_CONFIG="${ac_tool_prefix}llvm-config" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +LLVM_CONFIG=$ac_cv_prog_LLVM_CONFIG +if test -n "$LLVM_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LLVM_CONFIG" >&5 +$as_echo "$LLVM_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_LLVM_CONFIG"; then + ac_ct_LLVM_CONFIG=$LLVM_CONFIG + # Extract the first word of "llvm-config", so it can be a program name with args. +set dummy llvm-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_LLVM_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_LLVM_CONFIG"; then + ac_cv_prog_ac_ct_LLVM_CONFIG="$ac_ct_LLVM_CONFIG" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_LLVM_CONFIG="llvm-config" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_LLVM_CONFIG=$ac_cv_prog_ac_ct_LLVM_CONFIG +if test -n "$ac_ct_LLVM_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LLVM_CONFIG" >&5 +$as_echo "$ac_ct_LLVM_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_LLVM_CONFIG" = x; then + LLVM_CONFIG="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + LLVM_CONFIG=$ac_ct_LLVM_CONFIG + fi +else + LLVM_CONFIG="$ac_cv_prog_LLVM_CONFIG" +fi + + if test "$?" != 0; then + as_fn_error $? "Required tool 'llvm-config' not found on PATH." "$LINENO" 5 + fi + clang_lib_dir=`$LLVM_CONFIG --libdir` + if test -f $clang_lib_dir/$plugin; then + plugin_file=$clang_lib_dir/$plugin + fi + if test x$plugin_file != x$plugin; then + break; + fi + fi + done + if test -z $plugin_file; then + as_fn_error $? "Couldn't find clang plugin file for $CC." "$LINENO" 5 + fi + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + + if test "${AR}" = "" ; then + as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5 + fi + plugin_option="--plugin $plugin_file" + touch conftest.c + ${AR} $plugin_option rc conftest.a conftest.c + if test "$?" != 0; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 +$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} + plugin_file= + fi + rm -f conftest.* + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_file" >&5 +$as_echo "$plugin_file" >&6; } + fi + plugin_file="$plugin_file" + +if test -n "$plugin_file"; then + plugin_option="--plugin $plugin_file" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -plugin option" >&5 +$as_echo_n "checking for -plugin option... " >&6; } + plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll" +plugin_option= for plugin in $plugin_names; do plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin` if test x$plugin_so = x$plugin; then @@ -5871,7 +6130,119 @@ for plugin in $plugin_names; do break fi done +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + +if test "${AR}" = "" ; then + as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5 +fi +touch conftest.c +${AR} $plugin_option rc conftest.a conftest.c +if test "$?" != 0; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 +$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} + plugin_option= +fi +rm -f conftest.* +if test -n "$plugin_option"; then + plugin_option="$plugin_option" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_option" >&5 +$as_echo "$plugin_option" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + +fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. set dummy ${ac_tool_prefix}ar; ac_word=$2 @@ -5966,17 +6337,15 @@ fi test -z "$AR" && AR=ar if test -n "$plugin_option"; then - if $AR --help 2>&1 | grep -q "\--plugin"; then - touch conftest.c - $AR $plugin_option rc conftest.a conftest.c - if test "$?" != 0; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 -$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} - else + case "$AR" in + *"$plugin_option"*) + ;; + *) + if $AR --help 2>&1 | grep -q "\--plugin"; then AR="$AR $plugin_option" fi - rm -f conftest.* - fi + ;; + esac fi test -z "$AR_FLAGS" && AR_FLAGS=cru @@ -6183,9 +6552,15 @@ fi test -z "$RANLIB" && RANLIB=: if test -n "$plugin_option" && test "$RANLIB" != ":"; then - if $RANLIB --help 2>&1 | grep -q "\--plugin"; then - RANLIB="$RANLIB $plugin_option" - fi + case "$RANLIB" in + *"$plugin_option"*) + ;; + *) + if $RANLIB --help 2>&1 | grep -q "\--plugin"; then + RANLIB="$RANLIB $plugin_option" + fi + ;; + esac fi @@ -10922,7 +11297,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 10925 "configure" +#line 11300 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -11028,7 +11403,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 11031 "configure" +#line 11406 "configure" #include "confdefs.h" #if HAVE_DLFCN_H diff --git a/libsanitizer/ChangeLog b/libsanitizer/ChangeLog index 9151572ce8bb..8bfc854072b5 100644 --- a/libsanitizer/ChangeLog +++ b/libsanitizer/ChangeLog @@ -1,3 +1,17 @@ +2025-10-05 Sam James + + * Makefile.in: Regenerate. + * aclocal.m4: Regenerate. + * asan/Makefile.in: Regenerate. + * configure: Regenerate. + * hwasan/Makefile.in: Regenerate. + * interception/Makefile.in: Regenerate. + * libbacktrace/Makefile.in: Regenerate. + * lsan/Makefile.in: Regenerate. + * sanitizer_common/Makefile.in: Regenerate. + * tsan/Makefile.in: Regenerate. + * ubsan/Makefile.in: Regenerate. + 2025-05-02 Florian Weimer Tom Stellard diff --git a/libsanitizer/Makefile.in b/libsanitizer/Makefile.in index f11219cae849..fa6fe9e26a3e 100644 --- a/libsanitizer/Makefile.in +++ b/libsanitizer/Makefile.in @@ -101,7 +101,9 @@ target_triplet = @target@ subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/depstand.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ $(top_srcdir)/../config/libstdc++-raw-cxx.m4 \ $(top_srcdir)/../config/multi.m4 \ @@ -263,6 +265,7 @@ LIBSTDCXX_RAW_CXX_CXXFLAGS = @LIBSTDCXX_RAW_CXX_CXXFLAGS@ LIBSTDCXX_RAW_CXX_LDFLAGS = @LIBSTDCXX_RAW_CXX_LDFLAGS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ diff --git a/libsanitizer/aclocal.m4 b/libsanitizer/aclocal.m4 index 6aa15694eba0..85284f527b2f 100644 --- a/libsanitizer/aclocal.m4 +++ b/libsanitizer/aclocal.m4 @@ -1188,7 +1188,9 @@ AC_SUBST([am__untar]) ]) # _AM_PROG_TAR m4_include([../config/acx.m4]) +m4_include([../config/clang-plugin.m4]) m4_include([../config/depstand.m4]) +m4_include([../config/gcc-plugin.m4]) m4_include([../config/lead-dot.m4]) m4_include([../config/libstdc++-raw-cxx.m4]) m4_include([../config/multi.m4]) diff --git a/libsanitizer/asan/Makefile.in b/libsanitizer/asan/Makefile.in index 54ee575bdf48..36d34fb5ba8c 100644 --- a/libsanitizer/asan/Makefile.in +++ b/libsanitizer/asan/Makefile.in @@ -96,7 +96,9 @@ target_triplet = @target@ subdir = asan ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/depstand.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ $(top_srcdir)/../config/libstdc++-raw-cxx.m4 \ $(top_srcdir)/../config/multi.m4 \ @@ -316,6 +318,7 @@ LIBSTDCXX_RAW_CXX_CXXFLAGS = @LIBSTDCXX_RAW_CXX_CXXFLAGS@ LIBSTDCXX_RAW_CXX_LDFLAGS = @LIBSTDCXX_RAW_CXX_LDFLAGS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ diff --git a/libsanitizer/configure b/libsanitizer/configure index 6bfd28916d21..d4d987d2acce 100755 --- a/libsanitizer/configure +++ b/libsanitizer/configure @@ -678,6 +678,7 @@ LIPO NMEDIT DSYMUTIL AR +LLVM_CONFIG OBJDUMP LN_S NM @@ -7446,8 +7447,266 @@ test -z "$deplibs_check_method" && deplibs_check_method=unknown -plugin_option= + +# Try CLANG_PLUGIN_FILE first since GCC_PLUGIN_OPTION may return the +# wrong plugin_option with clang. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang" >&5 +$as_echo_n "checking for clang... " >&6; } +if ${clang_cv_is_clang+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifdef __clang__ + yes +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "yes" >/dev/null 2>&1; then : + clang_cv_is_clang=yes +else + clang_cv_is_clang=no +fi +rm -f conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $clang_cv_is_clang" >&5 +$as_echo "$clang_cv_is_clang" >&6; } + plugin_file= + if test $clang_cv_is_clang = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang plugin file" >&5 +$as_echo_n "checking for clang plugin file... " >&6; } + plugin_names="LLVMgold.so" + for plugin in $plugin_names; do + plugin_file=`${CC} ${CFLAGS} --print-file-name $plugin` + if test x$plugin_file = x$plugin; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}llvm-config", so it can be a program name with args. +set dummy ${ac_tool_prefix}llvm-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_LLVM_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$LLVM_CONFIG"; then + ac_cv_prog_LLVM_CONFIG="$LLVM_CONFIG" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_LLVM_CONFIG="${ac_tool_prefix}llvm-config" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +LLVM_CONFIG=$ac_cv_prog_LLVM_CONFIG +if test -n "$LLVM_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LLVM_CONFIG" >&5 +$as_echo "$LLVM_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_LLVM_CONFIG"; then + ac_ct_LLVM_CONFIG=$LLVM_CONFIG + # Extract the first word of "llvm-config", so it can be a program name with args. +set dummy llvm-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_LLVM_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_LLVM_CONFIG"; then + ac_cv_prog_ac_ct_LLVM_CONFIG="$ac_ct_LLVM_CONFIG" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_LLVM_CONFIG="llvm-config" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_LLVM_CONFIG=$ac_cv_prog_ac_ct_LLVM_CONFIG +if test -n "$ac_ct_LLVM_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LLVM_CONFIG" >&5 +$as_echo "$ac_ct_LLVM_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_LLVM_CONFIG" = x; then + LLVM_CONFIG="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + LLVM_CONFIG=$ac_ct_LLVM_CONFIG + fi +else + LLVM_CONFIG="$ac_cv_prog_LLVM_CONFIG" +fi + + if test "$?" != 0; then + as_fn_error $? "Required tool 'llvm-config' not found on PATH." "$LINENO" 5 + fi + clang_lib_dir=`$LLVM_CONFIG --libdir` + if test -f $clang_lib_dir/$plugin; then + plugin_file=$clang_lib_dir/$plugin + fi + if test x$plugin_file != x$plugin; then + break; + fi + fi + done + if test -z $plugin_file; then + as_fn_error $? "Couldn't find clang plugin file for $CC." "$LINENO" 5 + fi + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + + if test "${AR}" = "" ; then + as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5 + fi + plugin_option="--plugin $plugin_file" + touch conftest.c + ${AR} $plugin_option rc conftest.a conftest.c + if test "$?" != 0; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 +$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} + plugin_file= + fi + rm -f conftest.* + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_file" >&5 +$as_echo "$plugin_file" >&6; } + fi + plugin_file="$plugin_file" + +if test -n "$plugin_file"; then + plugin_option="--plugin $plugin_file" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -plugin option" >&5 +$as_echo_n "checking for -plugin option... " >&6; } + plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll" +plugin_option= for plugin in $plugin_names; do plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin` if test x$plugin_so = x$plugin; then @@ -7458,7 +7717,119 @@ for plugin in $plugin_names; do break fi done +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + +if test "${AR}" = "" ; then + as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5 +fi +touch conftest.c +${AR} $plugin_option rc conftest.a conftest.c +if test "$?" != 0; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 +$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} + plugin_option= +fi +rm -f conftest.* +if test -n "$plugin_option"; then + plugin_option="$plugin_option" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_option" >&5 +$as_echo "$plugin_option" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + +fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. set dummy ${ac_tool_prefix}ar; ac_word=$2 @@ -7553,17 +7924,15 @@ fi test -z "$AR" && AR=ar if test -n "$plugin_option"; then - if $AR --help 2>&1 | grep -q "\--plugin"; then - touch conftest.c - $AR $plugin_option rc conftest.a conftest.c - if test "$?" != 0; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 -$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} - else + case "$AR" in + *"$plugin_option"*) + ;; + *) + if $AR --help 2>&1 | grep -q "\--plugin"; then AR="$AR $plugin_option" fi - rm -f conftest.* - fi + ;; + esac fi test -z "$AR_FLAGS" && AR_FLAGS=cru @@ -7770,9 +8139,15 @@ fi test -z "$RANLIB" && RANLIB=: if test -n "$plugin_option" && test "$RANLIB" != ":"; then - if $RANLIB --help 2>&1 | grep -q "\--plugin"; then - RANLIB="$RANLIB $plugin_option" - fi + case "$RANLIB" in + *"$plugin_option"*) + ;; + *) + if $RANLIB --help 2>&1 | grep -q "\--plugin"; then + RANLIB="$RANLIB $plugin_option" + fi + ;; + esac fi @@ -12475,7 +12850,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 12478 "configure" +#line 12853 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -12581,7 +12956,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 12584 "configure" +#line 12959 "configure" #include "confdefs.h" #if HAVE_DLFCN_H diff --git a/libsanitizer/hwasan/Makefile.in b/libsanitizer/hwasan/Makefile.in index 4ff5deccb7f5..9c44a14d3b10 100644 --- a/libsanitizer/hwasan/Makefile.in +++ b/libsanitizer/hwasan/Makefile.in @@ -95,7 +95,9 @@ target_triplet = @target@ subdir = hwasan ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/depstand.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ $(top_srcdir)/../config/libstdc++-raw-cxx.m4 \ $(top_srcdir)/../config/multi.m4 \ @@ -309,6 +311,7 @@ LIBSTDCXX_RAW_CXX_CXXFLAGS = @LIBSTDCXX_RAW_CXX_CXXFLAGS@ LIBSTDCXX_RAW_CXX_LDFLAGS = @LIBSTDCXX_RAW_CXX_LDFLAGS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ diff --git a/libsanitizer/interception/Makefile.in b/libsanitizer/interception/Makefile.in index 1f5a5ef2c860..c7a286c4367b 100644 --- a/libsanitizer/interception/Makefile.in +++ b/libsanitizer/interception/Makefile.in @@ -92,7 +92,9 @@ target_triplet = @target@ subdir = interception ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/depstand.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ $(top_srcdir)/../config/libstdc++-raw-cxx.m4 \ $(top_srcdir)/../config/multi.m4 \ @@ -235,6 +237,7 @@ LIBSTDCXX_RAW_CXX_CXXFLAGS = @LIBSTDCXX_RAW_CXX_CXXFLAGS@ LIBSTDCXX_RAW_CXX_LDFLAGS = @LIBSTDCXX_RAW_CXX_LDFLAGS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ diff --git a/libsanitizer/libbacktrace/Makefile.in b/libsanitizer/libbacktrace/Makefile.in index b9d6e008f2b3..d6898cfcb858 100644 --- a/libsanitizer/libbacktrace/Makefile.in +++ b/libsanitizer/libbacktrace/Makefile.in @@ -123,7 +123,9 @@ target_triplet = @target@ subdir = libbacktrace ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/depstand.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ $(top_srcdir)/../config/libstdc++-raw-cxx.m4 \ $(top_srcdir)/../config/multi.m4 \ @@ -285,6 +287,7 @@ LIBSTDCXX_RAW_CXX_CXXFLAGS = @LIBSTDCXX_RAW_CXX_CXXFLAGS@ LIBSTDCXX_RAW_CXX_LDFLAGS = @LIBSTDCXX_RAW_CXX_LDFLAGS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ diff --git a/libsanitizer/lsan/Makefile.in b/libsanitizer/lsan/Makefile.in index 7c1642a168ed..64e0cca3a3c3 100644 --- a/libsanitizer/lsan/Makefile.in +++ b/libsanitizer/lsan/Makefile.in @@ -94,7 +94,9 @@ target_triplet = @target@ subdir = lsan ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/depstand.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ $(top_srcdir)/../config/libstdc++-raw-cxx.m4 \ $(top_srcdir)/../config/multi.m4 \ @@ -280,6 +282,7 @@ LIBSTDCXX_RAW_CXX_CXXFLAGS = @LIBSTDCXX_RAW_CXX_CXXFLAGS@ LIBSTDCXX_RAW_CXX_LDFLAGS = @LIBSTDCXX_RAW_CXX_LDFLAGS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ diff --git a/libsanitizer/sanitizer_common/Makefile.in b/libsanitizer/sanitizer_common/Makefile.in index 1bc07e51639a..ef2b17401840 100644 --- a/libsanitizer/sanitizer_common/Makefile.in +++ b/libsanitizer/sanitizer_common/Makefile.in @@ -98,7 +98,9 @@ target_triplet = @target@ subdir = sanitizer_common ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/depstand.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ $(top_srcdir)/../config/libstdc++-raw-cxx.m4 \ $(top_srcdir)/../config/multi.m4 \ @@ -273,6 +275,7 @@ LIBSTDCXX_RAW_CXX_CXXFLAGS = @LIBSTDCXX_RAW_CXX_CXXFLAGS@ LIBSTDCXX_RAW_CXX_LDFLAGS = @LIBSTDCXX_RAW_CXX_LDFLAGS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ diff --git a/libsanitizer/tsan/Makefile.in b/libsanitizer/tsan/Makefile.in index 6c8ad7925141..5eadf0dc7375 100644 --- a/libsanitizer/tsan/Makefile.in +++ b/libsanitizer/tsan/Makefile.in @@ -95,7 +95,9 @@ target_triplet = @target@ subdir = tsan ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/depstand.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ $(top_srcdir)/../config/libstdc++-raw-cxx.m4 \ $(top_srcdir)/../config/multi.m4 \ @@ -309,6 +311,7 @@ LIBSTDCXX_RAW_CXX_CXXFLAGS = @LIBSTDCXX_RAW_CXX_CXXFLAGS@ LIBSTDCXX_RAW_CXX_LDFLAGS = @LIBSTDCXX_RAW_CXX_LDFLAGS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ diff --git a/libsanitizer/ubsan/Makefile.in b/libsanitizer/ubsan/Makefile.in index 345190eeb34e..0b1e98e7a9ef 100644 --- a/libsanitizer/ubsan/Makefile.in +++ b/libsanitizer/ubsan/Makefile.in @@ -94,7 +94,9 @@ target_triplet = @target@ subdir = ubsan ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/depstand.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ $(top_srcdir)/../config/libstdc++-raw-cxx.m4 \ $(top_srcdir)/../config/multi.m4 \ @@ -274,6 +276,7 @@ LIBSTDCXX_RAW_CXX_CXXFLAGS = @LIBSTDCXX_RAW_CXX_CXXFLAGS@ LIBSTDCXX_RAW_CXX_LDFLAGS = @LIBSTDCXX_RAW_CXX_LDFLAGS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ diff --git a/libssp/ChangeLog b/libssp/ChangeLog index d66e9f6fb652..37aafa3a86f3 100644 --- a/libssp/ChangeLog +++ b/libssp/ChangeLog @@ -1,3 +1,9 @@ +2025-10-05 Sam James + + * Makefile.in: Regenerate. + * aclocal.m4: Regenerate. + * configure: Regenerate. + 2024-05-07 Rainer Orth * Makefile.am [LIBSSP_USE_SYMVER_SUN] (ssp.map-sun): Pass diff --git a/libssp/Makefile.in b/libssp/Makefile.in index febbc4e5e578..8d8be3e5f778 100644 --- a/libssp/Makefile.in +++ b/libssp/Makefile.in @@ -94,8 +94,10 @@ subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ $(top_srcdir)/../config/cet.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/depstand.m4 \ $(top_srcdir)/../config/enable.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ $(top_srcdir)/../config/lthostflags.m4 \ $(top_srcdir)/../config/multi.m4 \ @@ -262,6 +264,7 @@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ diff --git a/libssp/aclocal.m4 b/libssp/aclocal.m4 index 68fc0a4a718a..47f54fc80cbb 100644 --- a/libssp/aclocal.m4 +++ b/libssp/aclocal.m4 @@ -1169,8 +1169,10 @@ AC_SUBST([am__untar]) m4_include([../config/acx.m4]) m4_include([../config/cet.m4]) +m4_include([../config/clang-plugin.m4]) m4_include([../config/depstand.m4]) m4_include([../config/enable.m4]) +m4_include([../config/gcc-plugin.m4]) m4_include([../config/lead-dot.m4]) m4_include([../config/lthostflags.m4]) m4_include([../config/multi.m4]) diff --git a/libssp/configure b/libssp/configure index 0052e03650d1..72ffc5a35f70 100755 --- a/libssp/configure +++ b/libssp/configure @@ -648,6 +648,7 @@ NMEDIT DSYMUTIL RANLIB AR +LLVM_CONFIG OBJDUMP LN_S NM @@ -6101,8 +6102,266 @@ test -z "$deplibs_check_method" && deplibs_check_method=unknown -plugin_option= + +# Try CLANG_PLUGIN_FILE first since GCC_PLUGIN_OPTION may return the +# wrong plugin_option with clang. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang" >&5 +$as_echo_n "checking for clang... " >&6; } +if ${clang_cv_is_clang+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifdef __clang__ + yes +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "yes" >/dev/null 2>&1; then : + clang_cv_is_clang=yes +else + clang_cv_is_clang=no +fi +rm -f conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $clang_cv_is_clang" >&5 +$as_echo "$clang_cv_is_clang" >&6; } + plugin_file= + if test $clang_cv_is_clang = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang plugin file" >&5 +$as_echo_n "checking for clang plugin file... " >&6; } + plugin_names="LLVMgold.so" + for plugin in $plugin_names; do + plugin_file=`${CC} ${CFLAGS} --print-file-name $plugin` + if test x$plugin_file = x$plugin; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}llvm-config", so it can be a program name with args. +set dummy ${ac_tool_prefix}llvm-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_LLVM_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$LLVM_CONFIG"; then + ac_cv_prog_LLVM_CONFIG="$LLVM_CONFIG" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_LLVM_CONFIG="${ac_tool_prefix}llvm-config" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +LLVM_CONFIG=$ac_cv_prog_LLVM_CONFIG +if test -n "$LLVM_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LLVM_CONFIG" >&5 +$as_echo "$LLVM_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_LLVM_CONFIG"; then + ac_ct_LLVM_CONFIG=$LLVM_CONFIG + # Extract the first word of "llvm-config", so it can be a program name with args. +set dummy llvm-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_LLVM_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_LLVM_CONFIG"; then + ac_cv_prog_ac_ct_LLVM_CONFIG="$ac_ct_LLVM_CONFIG" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_LLVM_CONFIG="llvm-config" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_LLVM_CONFIG=$ac_cv_prog_ac_ct_LLVM_CONFIG +if test -n "$ac_ct_LLVM_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LLVM_CONFIG" >&5 +$as_echo "$ac_ct_LLVM_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_LLVM_CONFIG" = x; then + LLVM_CONFIG="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + LLVM_CONFIG=$ac_ct_LLVM_CONFIG + fi +else + LLVM_CONFIG="$ac_cv_prog_LLVM_CONFIG" +fi + + if test "$?" != 0; then + as_fn_error $? "Required tool 'llvm-config' not found on PATH." "$LINENO" 5 + fi + clang_lib_dir=`$LLVM_CONFIG --libdir` + if test -f $clang_lib_dir/$plugin; then + plugin_file=$clang_lib_dir/$plugin + fi + if test x$plugin_file != x$plugin; then + break; + fi + fi + done + if test -z $plugin_file; then + as_fn_error $? "Couldn't find clang plugin file for $CC." "$LINENO" 5 + fi + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + + if test "${AR}" = "" ; then + as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5 + fi + plugin_option="--plugin $plugin_file" + touch conftest.c + ${AR} $plugin_option rc conftest.a conftest.c + if test "$?" != 0; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 +$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} + plugin_file= + fi + rm -f conftest.* + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_file" >&5 +$as_echo "$plugin_file" >&6; } + fi + plugin_file="$plugin_file" + +if test -n "$plugin_file"; then + plugin_option="--plugin $plugin_file" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -plugin option" >&5 +$as_echo_n "checking for -plugin option... " >&6; } + plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll" +plugin_option= for plugin in $plugin_names; do plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin` if test x$plugin_so = x$plugin; then @@ -6113,7 +6372,119 @@ for plugin in $plugin_names; do break fi done +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + +if test "${AR}" = "" ; then + as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5 +fi +touch conftest.c +${AR} $plugin_option rc conftest.a conftest.c +if test "$?" != 0; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 +$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} + plugin_option= +fi +rm -f conftest.* +if test -n "$plugin_option"; then + plugin_option="$plugin_option" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_option" >&5 +$as_echo "$plugin_option" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + +fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. set dummy ${ac_tool_prefix}ar; ac_word=$2 @@ -6208,17 +6579,15 @@ fi test -z "$AR" && AR=ar if test -n "$plugin_option"; then - if $AR --help 2>&1 | grep -q "\--plugin"; then - touch conftest.c - $AR $plugin_option rc conftest.a conftest.c - if test "$?" != 0; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 -$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} - else + case "$AR" in + *"$plugin_option"*) + ;; + *) + if $AR --help 2>&1 | grep -q "\--plugin"; then AR="$AR $plugin_option" fi - rm -f conftest.* - fi + ;; + esac fi test -z "$AR_FLAGS" && AR_FLAGS=cru @@ -6425,9 +6794,15 @@ fi test -z "$RANLIB" && RANLIB=: if test -n "$plugin_option" && test "$RANLIB" != ":"; then - if $RANLIB --help 2>&1 | grep -q "\--plugin"; then - RANLIB="$RANLIB $plugin_option" - fi + case "$RANLIB" in + *"$plugin_option"*) + ;; + *) + if $RANLIB --help 2>&1 | grep -q "\--plugin"; then + RANLIB="$RANLIB $plugin_option" + fi + ;; + esac fi @@ -11164,7 +11539,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 11167 "configure" +#line 11542 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -11270,7 +11645,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 11273 "configure" +#line 11648 "configure" #include "confdefs.h" #if HAVE_DLFCN_H diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 33b10869759d..5eeb4cffdc22 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,1005 @@ +2025-10-08 Jonathan Wakely + + * doc/xml/manual/status_cxx2017.xml: Replace broken link to PSTL + upstream. + * doc/xml/manual/status_cxx2020.xml: Likewise. + * doc/html/manual/status.html: Regenerate. + +2025-10-08 Jonathan Wakely + + * config/cpu/i486/atomicity.h: Removed. + +2025-10-08 Jonathan Wakely + + PR libstdc++/122172 + * config/cpu/cris/atomicity.h: Removed. + +2025-10-08 Jonathan Wakely + + * include/bits/indirect.h (indirect::operator=(indirect&&)): + Move assign allocator when POCMA is true. + (polymorphic::operator=(polymorphic&&)): Likewise. + * testsuite/std/memory/indirect/copy.cc: Remove constexpr from + functions that use tracker_allocator. Add test_constexpr(). + * testsuite/std/memory/indirect/copy_alloc.cc: Remove constexpr + from all functions and remove static_assert. + * testsuite/std/memory/indirect/ctor.cc: Do not use + scoped_allocator_adaptor during constant evaluation. + * testsuite/std/memory/indirect/move.cc: Remove constexpr from + functions that use tracker_allocator. Add test_constexpr(). + * testsuite/std/memory/indirect/move_alloc.cc: Remove constexpr + from all functions and remove static_assert. + * testsuite/std/memory/indirect/relops.cc: Invoke lambda in + static_assert. + * testsuite/std/memory/polymorphic/copy.cc: Remove constexpr + from functions that use tracker_allocator. Add test_constexpr(). + * testsuite/std/memory/polymorphic/copy_alloc.cc: Remove + constexpr from all functions and remove static_assert. + * testsuite/std/memory/polymorphic/ctor.cc: Do not use + scoped_allocator_adaptor during constant evaluation. + * testsuite/std/memory/polymorphic/ctor_poly.cc: Likewise. + * testsuite/std/memory/polymorphic/move.cc: Remove constexpr + from functions that use tracker_allocator. Add test_constexpr(). + * testsuite/std/memory/polymorphic/move_alloc.cc: Remove + constexpr from all functions and remove static_assert. + * testsuite/util/testsuite_allocator.h (tracker_allocator): + Remove redundant 'inline' from friend. + (uneq_allocator): Make all functions constexpr. + (uneq_allocator::base, uneq_allocator::swap_base): Remove. + (uneq_allocator::~uneq_allocator): Remove. + (uneq_allocator::allocate, uneq_allocator::deallocate): Do not + use map of allocations during constant evaluation. + (propagating_allocator): Make all functions constexpr. + (propagating_allocator::base): Remove. + (propagating_allocator::swap_base): Simplify. + (ExplicitConsAlloc, CustomPointerAlloc, NullablePointer): Add + constexpr to all functions. + +2025-10-08 Jakub Jelinek + + * include/bits/unicode-data.h: Regenerate. + * testsuite/ext/unicode/properties.cc: Test __is_extended_pictographic + on U+1F004 rather than U+1F000. + +2025-10-08 Tomasz Kamiński + + * include/bits/chrono_io.h (_ChronoData::_M_fill_day): Replace + '%' by '/'. + +2025-10-08 Jonathan Wakely + + * testsuite/std/time/format/format.cc: Include . + +2025-10-08 Luc Grosheintz + + PR libstdc++/110352 + * include/std/mdspan (submdspan_mapping_result): New class. + * src/c++23/std.cc.in (submdspan_mapping_result): Add. + +2025-10-08 Luc Grosheintz + + PR libstdc++/110352 + * include/std/mdspan (full_extent_t): New class. + * src/c++23/std.cc.in (full_extent_t): Add. + +2025-10-08 Luc Grosheintz + + PR libstdc++/110352 + * include/bits/version.def (submdspan): New internal macro. + * include/bits/version.h: Regenerate. + * include/std/mdspan (strided_slice): New class. + * src/c++23/std.cc.in (strided_slice): Add. + * testsuite/23_containers/mdspan/submdspan/strided_slice.cc: New test. + * testsuite/23_containers/mdspan/submdspan/strided_slice_neg.cc: New test. + +2025-10-08 Luc Grosheintz + + * include/std/mdspan (__mdspan::__index_type_cast): Optimize by + skipping a __glibcxx_assert if it's know at compile-time. + (std::layout_left_padded, std::layout_righ_padded): Reorder + is_always_strided and is_unique member functions. + * testsuite/23_containers/mdspan/int_like.h: Rename _M_i to + value. + +2025-10-08 Luc Grosheintz + + PR libstdc++/110352 + * include/std/mdspan (_RightPaddedIndices): Traits for right + padded layouts. + (layout_right::mapping::mapping) New overload for right padded + layouts. + (layout_right_padded): Add implementation. + * src/c++23/std.cc.in (layout_right_padded): Add. + * testsuite/23_containers/mdspan/layouts/ctors.cc: Update + test for right padded layouts. + * testsuite/23_containers/mdspan/layouts/empty.cc: Ditto. + * testsuite/23_containers/mdspan/layouts/mapping.cc: Ditto. + * testsuite/23_containers/mdspan/layouts/padded.cc: Ditto. + * testsuite/23_containers/mdspan/layouts/padded_neg.cc: Ditto. + * testsuite/23_containers/mdspan/layouts/padded_traits.h: Ditto. + +2025-10-08 Luc Grosheintz + + PR libstdc++/110352 + * include/bits/version.def (padded_layouts): Add new internal + feature testing macro. + * include/bits/version.h: Regenerate. + * include/std/mdspan (__fwd_prod): New overload. + (layout_left_padded): Add declaration and implementation. + (layout_right_padded): Add declaration only. + (layout_left::mapping::mapping): New overload for left + padded mappings. + (__index_type_cast): New function that performs a checked cast + to index_type. + (__is_left_padded_mapping): New concept. + (__is_right_padded_mapping): Ditto. + (__standardized_mapping): Recognize left and right padded + mappings. + (_LeftPaddedIndices): Traits for left padded details. + (_PaddedStorage): New class for implementing padded layouts. + * src/c++23/std.cc.in (layout_left_padded): Add. + * testsuite/23_containers/mdspan/layouts/class_mandate_neg.cc: + Refactor and add tests for layout_left_padded. + * testsuite/23_containers/mdspan/layouts/ctors.cc: Ditto. + * testsuite/23_containers/mdspan/layouts/empty.cc: Ditto. + * testsuite/23_containers/mdspan/layouts/mapping.cc: Ditto. + * testsuite/23_containers/mdspan/layouts/padded.cc: Ditto. + * testsuite/23_containers/mdspan/layouts/padded_neg.cc: Ditto. + * testsuite/23_containers/mdspan/layouts/padded_traits.h: New + traits. + +2025-10-07 Jonathan Wakely + + * configure.host: Fix spelling in comment. + +2025-10-07 Jonathan Wakely + + * include/ext/ropeimpl.h (rope::_S_fetch): Initialize variable. + +2025-10-07 Jonathan Wakely + + * include/bits/sat_arith.h (mul_sat): Add parentheses around + operands. + +2025-10-07 Jonathan Wakely + + * testsuite/std/time/parse/parse.cc: Initialize variable. + +2025-10-07 Jonathan Wakely + + * testsuite/20_util/shared_ptr/cons/move.cc: Add comment and + dg-prune-output for -Wpessimizing-move warning. + * testsuite/experimental/memory/shared_ptr/cons/move_ctor.cc: + Likewise. + +2025-10-07 Jonathan Wakely + + * include/bits/random.h (philox_engine(result_type)): Reorder + ctor-initializer-list to match declaration order. + +2025-10-07 Jonathan Wakely + + * include/bits/basic_string.h (basic_string::_M_check): Cast + size_type arguments to size_t. + +2025-10-05 Sam James + + * Makefile.in: Regenerate. + * aclocal.m4: Regenerate. + * configure: Regenerate. + * doc/Makefile.in: Regenerate. + * include/Makefile.in: Regenerate. + * libsupc++/Makefile.in: Regenerate. + * po/Makefile.in: Regenerate. + * python/Makefile.in: Regenerate. + * src/Makefile.in: Regenerate. + * src/c++11/Makefile.in: Regenerate. + * src/c++17/Makefile.in: Regenerate. + * src/c++20/Makefile.in: Regenerate. + * src/c++23/Makefile.in: Regenerate. + * src/c++26/Makefile.in: Regenerate. + * src/c++98/Makefile.in: Regenerate. + * src/experimental/Makefile.in: Regenerate. + * src/filesystem/Makefile.in: Regenerate. + * src/libbacktrace/Makefile.in: Regenerate. + * testsuite/Makefile.in: Regenerate. + +2025-10-03 Tomasz Kamiński + + * doc/html/manual/index.html: Regenerated. + * doc/html/manual/status.html: Regenerated. + * doc/xml/manual/status_cxx2020.xml: Added status table. + +2025-10-01 François Dumont + + * include/std/vector (std::erase_if, std::erase): Replace _GLIBCXX20_CONSTEXPR + with 'constexpr' and remove implied 'inline' keyword. + * include/std/string (std::erase_if, std::erase): Likewise. + +2025-10-01 Jonathan Wakely + + * testsuite/28_regex/basic_regex/assign/wchar_t/pstring.cc: Use + wcslen(cs) instead of sizeof(cs)-1. + +2025-10-01 Jonathan Wakely + + * testsuite/20_util/unique_ptr/modifiers/93562.cc: Define a + separate deleter for array cases. + +2025-10-01 Jonathan Wakely + + * testsuite/27_io/basic_filebuf/seekoff/wchar_t/9875_seekoff.cc + (Cvt::do_length): Fix signature to override virtual function in + base. + * testsuite/27_io/basic_filebuf/seekpos/wchar_t/9875_seekpos.cc: + (Cvt::do_length): Likewise. + * testsuite/27_io/basic_filebuf/underflow/char/1.cc + (NoconvCvt::do_in): Likewise. + * testsuite/27_io/basic_filebuf/underflow/wchar_t/11603.cc + (checksumcvt::do_length): Likewise. + +2025-10-01 Jonathan Wakely + + * testsuite/22_locale/time_get/get/char/3.cc: Add parentheses to + x == y|z expression. + * testsuite/22_locale/time_get/get/wchar_t/3.cc: Likewise. + * testsuite/28_regex/algorithms/regex_match/multiline.cc: + Likewise. + +2025-10-01 Jonathan Wakely + + * include/bits/stl_uninitialized.h (uninitialized_copy) + (uninitialized_fill, uninitialized_fill_n): Use pragmas to + suppress -Wclass-memaccess warnings. + +2025-10-01 Jonathan Wakely + + * testsuite/std/memory/polymorphic/copy.cc: Fix spelling of + typedef. + +2025-09-30 François Dumont + + * include/std/inplace_vector: + (std::swap(inplace_vector<>&, inplace_vector<>&)): Remove the duplicated + implementation at std namespace level. Keep the friend inline one. + (inplace_vector::assign(initializer_list<>)): Add missing return + statement. + +2025-09-27 Jonathan Wakely + + * testsuite/20_util/allocator_traits/members/allocate_hint.cc: + Value-initialize variables to avoid -Wmaybe-uninitialized + warning. + * testsuite/20_util/allocator_traits/members/allocate_hint_nonpod.cc: + Likewise. + * testsuite/20_util/duration/114244.cc: Likewise. + * testsuite/20_util/duration/io.cc: Likewise. + +2025-09-27 Jonathan Wakely + + * include/bits/deque.tcc (deque::_M_shrink_to_fit): Cast + difference_type to size_type to avoid -Wsign-compare warning. + * include/std/spanstream (basic_spanbuf::seekoff): Cast + streamoff to size_t to avoid -Wsign-compare warning. + +2025-09-27 Jonathan Wakely + + * testsuite/21_strings/basic_string/numeric_conversions/char/stoi.cc: + Fix assignment used instead of equality comparison. + * testsuite/21_strings/basic_string/numeric_conversions/char/stol.cc: + Likewise. + * testsuite/21_strings/basic_string/numeric_conversions/char/stoll.cc: + Likewise. + * testsuite/21_strings/basic_string/numeric_conversions/char/stoul.cc: + Likewise. + * testsuite/21_strings/basic_string/numeric_conversions/char/stoull.cc: + Likewise. + * testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stoi.cc: + Likewise. + * testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stol.cc: + Likewise. + * testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stoll.cc: + Likewise. + * testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stoul.cc: + Likewise. + * testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stoull.cc: + Likewise. + * testsuite/23_containers/map/cons/from_range.cc: Fix is_equal + function and expected value of comparison functions after + construction. + * testsuite/23_containers/multimap/cons/from_range.cc: Likewise. + * testsuite/23_containers/multiset/cons/from_range.cc: Likewise. + * testsuite/23_containers/set/cons/from_range.cc: Likewise. + * testsuite/23_containers/unordered_map/cons/from_range.cc: Fix + is_equal functions. + * testsuite/23_containers/unordered_multimap/cons/from_range.cc: + Likewise. + * testsuite/23_containers/unordered_multiset/cons/from_range.cc: + Likewise. + * testsuite/23_containers/unordered_set/cons/from_range.cc: + Likewise. + * testsuite/25_algorithms/minmax/constrained.cc: Fix assignment + used instead of equality comparison. + * testsuite/27_io/manipulators/extended/get_time/wchar_t/1.cc: + Likewise. + +2025-09-26 Jonathan Wakely + + * include/bits/stl_algobase.h (__search, __is_permutation): + Reuse predicate instead of creating a new one each time. + * include/bits/stl_algo.h (__is_permutation): Likewise. + +2025-09-26 Jonathan Wakely + + * include/std/deque (erase_if): Move predicate instead of + wrapping with std::ref. + (erase): Forward to erase_if. + * include/std/inplace_vector (erase_if, erase): Likewise. + * include/std/string (erase_if, erase): Likewise. + * include/std/vector (erase_if, erase): Likewise. + +2025-09-26 Jonathan Wakely + + * include/bits/predefined_ops.h (equal_to, less): Define aliases + for std::equal_to and std::less. + (bind1st, bind2nd, not1, __equal_to): New object generator + functions for adapting predicates. + (__iter_less_iter, __iter_less_val, __iter_comp_val) + (__val_less_iter, __val_comp_iter, __iter_equal_to_iter) + (__iter_equal_to_val, __iter_comp_iter, __negate): Remove all + object generator functions and the class templates they return. + * include/bits/stl_algo.h (__move_median_to_first, __find_if_not) + (__find_if_not_n, __search_n_aux, find_end, find_if_not) + (__remove_copy_if, remove_copy, remove_copy_if, remove) + (remove_if, __adjacent_find, __unique, unique, __unique_copy) + (__unique_copy_1, __stable_partition_adaptive, stable_partition) + (__heap_select, __partial_sort_copy, partial_sort_copy) + (__unguarded_linear_insert, __insertion_sort) + (__unguarded_insertion_sort, __unguarded_partition) + (lower_bound, __upper_bound, upper_bound, __equal_range) + (equal_range, binary_search, __move_merge_adaptive) + (__move_merge_adaptive_backward, __merge_adaptive_resize) + (__merge_without_buffer, inplace_merge, __move_merge) + (__includes, includes, __next_permutation, next_permutation) + (__prev_permutation, prev_permutation, __replace_copy_if) + (replace_copy, replace_copy_if, __is_sorted_until) + (is_sorted_until, __minmax_element, minmax_element, minmax) + (is_permutation, __is_permutation, find, find_if, adjacent_find) + (count, count_if, search, search_n, unique_copy, partial_sort) + (nth_element, sort, __merge, merge, stable_sort, __set_union) + (set_union, __set_intersection, set_intersection) + (__set_difference, set_difference, __set_symmetric_difference) + (set_symmetric_difference, __min_element, min_element) + (__max_element, max_element, min, max): Use direct predicates + instead of __iter_equal_to_iter, __iter_comp_iter, and + __iter_less_iter, __negate etc. Dereference iterators when + invoking predicates. + * include/bits/stl_algobase.h (__lexicographical_compare_impl) + (__lexicographical_compare::__lc, __lower_bound, lower_bound) + (lexicographical_compare, __mismatch, mismatch, __find_if) + (__count_if, __remove_if, __search, __is_permutation) + (is_permutation, search): Likewise. + * include/bits/stl_function.h (equal_to, less): + Define transparent comparison functions for C++98 and C++11. + * include/bits/stl_heap.h (__is_heap_until, __is_heap) + (__push_heap, push_heap, __adjust_heap, pop_heap, make_heap) + (sort_heap, is_heap_until, is_heap): Likewise. + * include/std/deque (erase_if): Remove call to __pred_iter. + (erase): Replace __iter_equals_val with __equal_to. + * include/std/inplace_vector (erase_if, erase): Likewise. + * include/std/string (erase_if, erase): Likewise. + * include/std/vector (erase_if, erase): Likewise. + +2025-09-26 Jonathan Wakely + + PR libstdc++/122062 + * include/bits/random.tcc (__detail::__normalize): Use void cast + for operands of comma operator. + (piecewise_linear_distribution): Likewise. + * testsuite/26_numerics/random/piecewise_linear_distribution/cons/122062.cc: + New test. + +2025-09-25 Luc Grosheintz + + * include/std/mdspan (__static_quotient): New overload. + +2025-09-25 Jonathan Wakely + + * include/bits/stl_algo.h: Check robust_nonmodifying_seq_ops + feature test macro instead of checking __cplusplus value. Add + comment to another __cplusplus check. + * include/bits/stl_algobase.h: Add comment to #endif. + +2025-09-25 Jonathan Wakely + + PR libstdc++/79147 + PR libstdc++/103650 + * include/Makefile.am (c++config.h): Adjust sed command to + comment out STDC_HEADERS macro. + * include/Makefile.in: Regenerate. + +2025-09-25 Luc Grosheintz + + * testsuite/23_containers/mdspan/layouts/empty.cc: Fix indent. + * testsuite/23_containers/mdspan/layouts/mapping.cc + (test_stride_1d): Fix test. + (test_stride_2d): Rewrite using a struct. + (test_stride_3d): Ditto. + (has_static_is_exhaustive): New concept. + (test_mapping_properties): Update test. + +2025-09-24 Luc Grosheintz + Tomasz Kamiński + + * testsuite/20_util/function_objects/not_fn/nttp.cc: Move + test of feature testing macro to version.cc + * testsuite/20_util/function_objects/not_fn/version.cc: New test. + +2025-09-24 Tomasz Kamiński + + * include/bits/chrono_io.h (__formatter_duration::_S_spec_for_tp): + Extracted from defition of formatter::__defSpec. + (formatter, _CharT>::parse): Simplify + condition in if contexpr. + (formatter, _CharT>::__stream_insertable): + Remove. + (formatter, _CharT>::__defSpec) + (formatter, _CharT>::__defSpec): + Compute using __formatter_duration::_S_spec_for_tp. + (forrmatter, _CharT>::parse): Check if + parse _M_chrono_spec + * testsuite/std/time/format/empty_spec.cc: Extend tests for floating + point and other non-streamable durations (years). + +2025-09-24 Tomasz Kamiński + + * include/bits/chrono_io.h (__formatter_chrono::_M_parse): + Replace _ParseContext with basic_format_parse_context<_CharT> and + make it non-template. + (__formatter_duration::_M_parse): Replace _ParseContext with + basic_format_parse_context<_CharT> and remove unused default + argument. + +2025-09-24 Patrick Palka + + * testsuite/17_intro/names.cc: Undefine 'u' on s390*-linux. + +2025-09-23 Jonathan Wakely + + * include/bits/random.h: Include instead of + . Change preprocessor checks to use internal feature + test macro. + (philox_engine): Reword doxygen comments. Use typename instead + of class in template parameter lists. Reformat and adjust + whitespace. + (philox_engine::_If_seed_seq): Replace alias template with + __is_seed_seq variable template. + (philox_engine::philox_engine(result_type)): Define inline. + (philox_engine::seed(result_type), philox_engine::set_counter) + (philox_engine::operator(), philox_engine::discard): Likewise. + (operator==): Define as defaulted. + (operator<<): Reuse widened char. + * include/bits/random.tcc: Reformat and adjust whitespace. + (philox_engine::_M_philox): Use std::array copy constructor and + std::array::fill instead of looping. + * testsuite/26_numerics/random/philox4x32.cc: Gate test on + feature test macro. Add static_assert to check typedef. + * testsuite/26_numerics/random/philox4x64.cc: Likewise. + * testsuite/26_numerics/random/philox_engine/cons/copy.cc: Add + VERIFY assertions to check copies are equal. Test different + seeds. + * testsuite/26_numerics/random/philox_engine/cons/default.cc: + Add VERIFY assertions to check construction results. + * testsuite/26_numerics/random/philox_engine/cons/seed.cc: + Likewise. + * testsuite/26_numerics/random/philox_engine/operators/equal.cc: + Also test inequality. + * testsuite/26_numerics/random/philox_engine/operators/serialize.cc: + Remove redundant include and return. + * testsuite/26_numerics/random/philox_engine/requirements/constants.cc: + Check values of all constants. + * testsuite/26_numerics/random/philox_engine/requirements/typedefs.cc: + Check typedefs are correct. + * testsuite/26_numerics/random/philox_engine/cons/119794.cc: + Removed. + * testsuite/26_numerics/random/philox_engine/cons/seed_seq.cc: + Removed. + * testsuite/26_numerics/random/philox_engine/operators/inequal.cc: + Removed. + * testsuite/26_numerics/random/philox_engine/requirements/constexpr_data.cc: + Removed. + * testsuite/26_numerics/random/philox_engine/requirements/constexpr_functions.cc: + Removed. + * testsuite/26_numerics/random/pr60037-neg.cc: Adjust dg-error + line number. + +2025-09-23 1nfocalypse <1nfocalypse@protonmail.com> + + PR libstdc++/119794 + * include/bits/random.h (philox_engine): Define. + * include/bits/random.tcc (philox_engine): Define member + functions. + * include/bits/version.def (philox_engine): New macro. + * include/bits/version.h: Regenerated. + * include/std/random: Define __glibcxx_want_philox_engine and + include . + * testsuite/26_numerics/random/pr60037-neg.cc: Adjust dg-error + line number. + * testsuite/26_numerics/random/philox4x32.cc: New test. + * testsuite/26_numerics/random/philox4x64.cc: New test. + * testsuite/26_numerics/random/philox_engine/cons/119794.cc: New test. + * testsuite/26_numerics/random/philox_engine/cons/copy.cc: New test. + * testsuite/26_numerics/random/philox_engine/cons/default.cc: New test. + * testsuite/26_numerics/random/philox_engine/cons/seed.cc: New test. + * testsuite/26_numerics/random/philox_engine/cons/seed_seq.cc: New test. + * testsuite/26_numerics/random/philox_engine/operators/equal.cc: New test. + * testsuite/26_numerics/random/philox_engine/operators/inequal.cc: New test. + * testsuite/26_numerics/random/philox_engine/operators/serialize.cc: New test. + * testsuite/26_numerics/random/philox_engine/requirements/constants.cc: New test. + * testsuite/26_numerics/random/philox_engine/requirements/constexpr_data.cc: New test. + * testsuite/26_numerics/random/philox_engine/requirements/constexpr_functions.cc: New test. + * testsuite/26_numerics/random/philox_engine/requirements/typedefs.cc: New test. + +2025-09-23 Ben Wu + + PR libstdc++/118087 + * include/bits/deque.tcc: Use _Temporary_value in + _M_emplace_aux. + * include/bits/stl_deque.h: Introduce _Temporary_value. + * testsuite/23_containers/deque/modifiers/emplace/118087.cc: + New test. + +2025-09-23 Tomasz Kamiński + + PR libstdc++/121940 + * include/bits/funcwrap.h (__polyfunc::__deduce_funcref): Return void + for ill-formed constructs. + (function_ref(nontype_t<__f>, _Tp&&)): Constrain on __deduce_funcref + producing non-void results. + * testsuite/20_util/function_ref/deduction.cc: Negative tests. + +2025-09-23 Jonathan Wakely + + PR libstdc++/79147 + * include/Makefile.am (c++config.h): Adjust sed command to + comment out all PACKAGE_XXX macros and to avoid adjusting + PACKAGE_VERSION twice. + * include/Makefile.in: Regenerate. + +2025-09-23 Tomasz Kamiński + + * include/bits/chrono_io.h (formatter): + (formatter, _CharT>) + (formatter, _CharT): Remove + __formatter_chrono base class. + +2025-09-22 Tomasz Kamiński + + * include/bits/chrono_io.h(__formatter_chrono::_M_parse): Update + needed flags for %g, %G, %V, %U, %W. + (__formatter_chrono::_M_format_to): Change how %V is handled. + (__formatter_chrono::_M_g_G): Merged into _M_g_G_V. + (__formatter_chrono::_M_g_G_V): Reworked from _M_g_G. + (__formatter_chrono::_M_U_V_W): Changed into _M_U_V. + (__formatter_chrono::_M_U_W): Reworked implementation. + * testsuite/std/time/year_month_day/io.cc: New tests. + +2025-09-22 Tomasz Kamiński + + PR libstdc++/106658 + * include/bits/stl_construct.h (std::start_lifetime_as_array) + (std::start_lifetime_as): Moved from std/memory, with update + to guard macros. + * include/std/memory (std::start_lifetime_as_array) + (std::start_lifetime_as): Moved to bits/stl_construct.h. + +2025-09-19 Nathan Myers + + PR libstdc++/119744 + * include/bits/version.def: Redefine __cpp_lib_bind_front etc. + * include/bits/version.h: Ditto. + * include/std/functional: Add new bind_front etc. overloads + * testsuite/20_util/function_objects/bind_back/1.cc: + Check plumbing better + * testsuite/20_util/function_objects/bind_back/nttp.cc: New test. + * testsuite/20_util/function_objects/bind_back/nttp_neg.cc: New test. + * testsuite/20_util/function_objects/bind_front/1.cc: + Check plumbing better + * testsuite/20_util/function_objects/bind_front/nttp.cc: New test. + * testsuite/20_util/function_objects/bind_front/nttp_neg.cc: New test. + * testsuite/20_util/function_objects/not_fn/nttp.cc: New test. + * testsuite/20_util/function_objects/not_fn/nttp_neg.cc: New test. + * testsuite/20_util/headers/functional/synopsis.cc: New decls. + +2025-09-19 Jonathan Wakely + + * include/bits/chrono_io.h: Remove unused header. + (operator<<): Constrain overload for chrono::local_time. + * testsuite/std/time/clock/local/io.cc: Check constraints. + +2025-09-19 Jonathan Wakely + + * include/bits/version.def (start_lifetime_as): Move adjacent to + other C++23 macros. + * include/bits/version.h: Regenerate. + +2025-09-18 Jakub Jelinek + + PR c++/106658 + * include/bits/version.def: Implement C++23 P2590R2 - Explicit + lifetime management. + (start_lifetime_as): New. + * include/bits/version.h: Regenerate. + * include/std/memory (std::start_lifetime_as, + std::start_lifetime_as_array): New function templates. + * src/c++23/std.cc.in (std::start_lifetime_as, + std::start_lifetime_as_array): Export. + * testsuite/std/memory/start_lifetime_as/start_lifetime_as.cc: New test. + +2025-09-17 Patrick Palka + + PR libstdc++/111861 + * include/bits/ranges_algo.h (ranges::unique_copy): When + initializing a value type object from *iter, use + direct-initialization and don't use a deduced type. + (ranges::push_heap): Use direct-initialization when initializing + a value type object from ranges::iter_move. + (ranges::max): As in ranges::unique_copy. + * include/bits/ranges_util.h (ranges::min): Likewise. + +2025-09-17 Patrick Palka + + * testsuite/20_util/bind/dangling_ref.cc: Compile with + -Wsystem-headers. + * testsuite/20_util/ratio/operations/ops_overflow_neg.cc: Likewise. + * testsuite/20_util/unique_ptr/lwg4148.cc: Likewise. + * testsuite/29_atomics/atomic/operators/pointer_partial_void.cc: + Likewise. + * testsuite/30_threads/packaged_task/cons/dangling_ref.cc: + Likewise. + +2025-09-16 Jonathan Wakely + + * include/std/ranges (__detail::__repeated_tuple): Use + __make_tuple helper alias directly, instead of doing overload + resolution on std::tuple_cat. + * include/std/tuple (__make_tuple_impl): Remove. + (__do_make_tuple): Replace recursion with _Index_tuple and pack + expansion. + (__make_tuple): Adjust to new __do_make_tuple definition. + (__combine_tuples, tuple, Rem...>): Replace + with a partial specialization for exactly two tuples and a + partial specialization for three or more tuples. + +2025-09-16 Jonathan Wakely + + PR libstdc++/121913 + * include/bits/ranges_algo.h (__rotate_fn::operator()): Use + auto_value_t<_Iter> instead of deduced type. + +2025-09-16 Jonathan Wakely + + PR libstdc++/121956 + * include/std/ranges (adjacent_view::_Iterator::value_type): + Always define as std::tuple, not std::pair. + * testsuite/std/ranges/adaptors/adjacent/1.cc: Check value type + of views::pairwise. + +2025-09-16 Jonathan Wakely + + * include/bits/stl_uninitialized.h (uninitialized_move) + (uninitialized_move_n): Replace _GLIBCXX_MAKE_MOVE_ITERATOR with + std::make_move_iterator. + +2025-09-16 Jonathan Wakely + + PR libstdc++/119820 + * include/bits/ranges_algo.h (__shuffle_fn): Use + ranges::distance to get difference type value to add to + iterator. + * include/std/format (__formatter_str::_M_format_range): + Use ranges::next to increment iterator by a size_t value. + +2025-09-13 Patrick Palka + + PR libstdc++/121917 + * include/bits/ranges_algo.h (__shuffle_fn::operator()): Only + consider the two-at-a-time PRNG optimization if the range is + sized. + * testsuite/25_algorithms/shuffle/constrained.cc (test03): New + test. + +2025-09-12 Jonathan Wakely + + PR libstdc++/121913 + * include/bits/ranges_algo.h (__rotate_fn::operator()): Use + ranges::iter_move(it) instead of std::move(*it). + * testsuite/25_algorithms/rotate/121913.cc: New test. + +2025-09-12 Jonathan Wakely + + PR libstdc++/121890 + * include/bits/ranges_algo.h (ranges::rotate, ranges::shuffle) + (__insertion_sort, __unguarded_partition_pivot, __introselect): + Use ranges::next to advance iterators. Use local variables in + rotate to avoid duplicate expressions. + (ranges::push_heap, ranges::pop_heap, ranges::partial_sort) + (ranges::partial_sort_copy): Use ranges::prev. + (__final_insertion_sort): Use iter_difference_t + for operand of operator+ on iterator. + * include/bits/ranges_base.h (ranges::advance): Use iterator's + difference_type for all iterator arithmetic. + * include/bits/stl_algo.h (__search_n_aux, __rotate) + (__insertion_sort, __unguarded_partition_pivot, __introselect) + (__final_insertion_sort, for_each_n, random_shuffle): Likewise. + Use local variables in __rotate to avoid duplicate expressions. + * include/bits/stl_algobase.h (__fill_n_a, __lc_rai::__newlast1): + Likewise. + * include/bits/stl_heap.h (push_heap): Likewise. + (__is_heap_until): Add static_assert. + (__is_heap): Convert distance to difference_type. + * include/std/functional (boyer_moore_searcher::operator()): Use + iterator's difference_type for iterator arithmetic. + * testsuite/util/testsuite_iterators.h + (random_access_iterator_wrapper): Add deleted overloads of + operators that should be called with difference_type. + * testsuite/24_iterators/range_operations/advance.cc: Use + ranges::next. + * testsuite/25_algorithms/heap/constrained.cc: Use ranges::next + and ranges::prev. + * testsuite/25_algorithms/nth_element/58800.cc: Use std::next. + * testsuite/25_algorithms/nth_element/constrained.cc: Use + ptrdiff_t for loop variable. + * testsuite/25_algorithms/nth_element/random_test.cc: Use + iterator's difference_type instead of int. + * testsuite/25_algorithms/partial_sort/check_compare_by_value.cc: + Use std::next. + * testsuite/25_algorithms/partial_sort/constrained.cc: Use + ptrdiff_t for loop variable. + * testsuite/25_algorithms/partial_sort/random_test.cc: Use + iterator's difference_type instead of int. + * testsuite/25_algorithms/partial_sort_copy/constrained.cc: + Use ptrdiff_t for loop variable. + * testsuite/25_algorithms/partial_sort_copy/random_test.cc: + Use iterator's difference_type instead of int. + * testsuite/std/ranges/adaptors/drop.cc: Use ranges::next. + * testsuite/25_algorithms/fill_n/diff_type.cc: New test. + * testsuite/25_algorithms/lexicographical_compare/diff_type.cc: + New test. + +2025-09-12 Jonathan Wakely + + PR libstdc++/117276 + * include/pstl/parallel_backend_tbb.h (__func_task::finalize): + Make deallocation unconditional. + +2025-09-12 Jonathan Wakely + + PR libstdc++/121046 + * include/debug/bitset (bitset(const CharT*, ...)): Add + constraints on CharT type. + +2025-09-12 Jonathan Wakely + + * config/cpu/generic/atomicity_mutex/atomicity.h + (__exchange_and_add): Use const_cast to remove volatile. + +2025-09-11 Jonathan Wakely + + PR libstdc++/71945 + * include/bits/shared_ptr_base.h (_Sp_counted_base::_S_chk): + Trap if a reference count cannot be incremented any higher. + (_Sp_counted_base::_M_add_ref_copy): Use _S_chk. + (_Sp_counted_base::_M_add_weak_ref): Likewise. + (_Sp_counted_base<_S_mutex>::_M_add_ref_lock_nothrow): Likewise. + (_Sp_counted_base<_S_atomic>::_M_add_ref_lock_nothrow): Likewise. + (_Sp_counted_base<_S_single>::_M_add_ref_copy): Use _S_chk. + +2025-09-11 Jonathan Wakely + + PR libstdc++/71945 + * include/bits/shared_ptr_base.h + (_Sp_counted_base::_M_get_use_count): Cast _M_use_count to + unsigned before returning as long. + (_Sp_counted_base<_S_single>::_M_add_ref_copy): Use atomic + helper function to adjust ref count using unsigned arithmetic. + (_Sp_counted_base<_S_single>::_M_weak_release): Likewise. + (_Sp_counted_base<_S_single>::_M_get_use_count): Cast + _M_use_count to unsigned before returning as long. + (_Sp_counted_base<_S_single>::_M_add_ref_lock_nothrow): Use + _M_add_ref_copy to do increment using unsigned arithmetic. + (_Sp_counted_base<_S_single>::_M_release): Use atomic helper and + _M_weak_release to do decrements using unsigned arithmetic. + (_Sp_counted_base<_S_mutex>::_M_release): Add comment. + (_Sp_counted_base<_S_single>::_M_weak_add_ref): Remove + specialization. + +2025-09-11 Jonathan Wakely + + PR libstdc++/121148 + * config/cpu/generic/atomicity_mutex/atomicity.h + (__exchange_and_add): Call __exchange_and_add_single. + * include/ext/atomicity.h (__exchange_and_add_single): Use an + unsigned type for the addition. + * libsupc++/Makefile.am (atomicity.o): Compile with -fwrapv. + * libsupc++/Makefile.in: Regenerate. + +2025-09-11 Jonathan Wakely + + * include/bits/iterator_concepts.h (_IterMove::_S_noexcept) + (_IterSwap::_S_noexcept): Change constexpr to consteval. + * include/bits/ranges_base.h (_Begin::_S_noexcept) + (_End::_S_noexcept, _RBegin::_S_noexcept, _REnd::_S_noexcept) + (_Size::_S_noexcept, _Empty::_S_noexcept, _Data::_S_noexcept): + Likewise. + * include/std/concepts (_Swap::_S_noexcept): Likewise. + +2025-09-11 Jonathan Wakely + + * include/bits/ranges_base.h (__detail::__to_unsigned_like) + (__access::__possible_const_range, __access::__as_const) + (__distance_fn::operator(), __next_fn::operator()) + (__prev_fn::operator()): Add always_inline attribute. + (_Begin::operator(), _End::operator(), _RBegin::operator()) + (_REnd::operator(), _Size::operator(), _SSize::operator()) + (_Empty::operator(), _Data::operator(), _SSize::operator()): + Likewise. Move nodiscard attribute to start of declaration. + +2025-09-11 Giuseppe D'Angelo + + * include/bits/shared_ptr_base.h (__weak_ptr): Avoid calling + lock() when converting or assigning a weak_ptr to + a weak_ptr in case Base is not a virtual base of Derived. + This logic is centralized in _S_safe_upcast, called by the + various converting constructors/assignment operators. + (_S_safe_upcast): New helper function. + * testsuite/20_util/weak_ptr/cons/virtual_bases.cc: New test. + +2025-09-11 Jonathan Wakely + + * include/std/syncstream: Remove trailing whitespace. + +2025-09-11 Tomasz Kamiński + + * testsuite/std/time/year_month_day/io.cc: Additional tests. + +2025-09-10 Jonathan Wakely + + * include/bits/unique_ptr.h: Remove blank line. + +2025-09-10 Jonathan Wakely + + * include/std/functional (boyer_moore_searcher::operator()): Add + static_assert. + (boyer_moore_horspool_searcher::operator()): Likewise. + * testsuite/20_util/function_objects/121782.cc: New test. + +2025-09-10 Luc Grosheintz + + * include/std/mdspan (_ExtentsStorage::_Base): New name for + _S_base. + (_ExtentsStorage::_Storage): New name for _S_storage. + (extents::_Storage): New name for _S_storage. + (layout_stride::mapping::_Strides): New name for + _S_stries_t. + * testsuite/23_containers/mdspan/class_mandate_neg.cc: Update + test to the new error message. + +2025-09-10 Luc Grosheintz + + * include/std/span (__integral_constant_like): Use + remove_cvref_t before checking if _Tp::value is boolean. + * testsuite/23_containers/mdspan/extents/misc.cc: Update test. + * testsuite/23_containers/mdspan/mdspan.cc: Ditto. + * testsuite/23_containers/span/deduction.cc: Ditto. + +2025-09-10 Tomasz Kamiński + + PR libstdc++/121765 + * include/std/format (__format::_Drop_iter): Define. + (_Iter_for_t::type): Change alias to _Drop_iter. + (__format::__format_padded): Return __fc.out() for + _Drop_iter. + * testsuite/std/format/pr121765.cc: New test. + +2025-09-10 Tomasz Kamiński + + * doc/html/manual/status.html: Regenerate. + * doc/xml/manual/status_cxx2020.xml: Add more entires. + +2025-09-10 Tomasz Kamiński + + * doc/html/index.html: Regenerated. + * doc/html/manual/index.html: Regenerated. + * doc/html/manual/intro.html: Regenerated. + * doc/html/manual/status.html: Regenatered. + * doc/xml/manual/status_cxx2020.xml: Add iso.2020.specific + section with atomic_ref documentation. + +2025-09-09 Jonathan Wakely + + * include/std/type_traits (_CwFixedValue::_S_type): Rename to + __type. + (constant_wrapper): Rename template parameter in declaration to + match later definition. + +2025-09-09 Arsen Arsenović + + * doc/xml/manual/using_exceptions.xml: Replace "Tunables" link + with one that does not have an anchor. + * doc/html/manual/using_exceptions.html: Regenerate. + +2025-09-08 Jonathan Wakely + + * include/std/type_traits (constant_wrapper): Rename template + parameter to avoid BADNAME. + +2025-09-08 Jonathan Wakely + + PR libstdc++/120698 + * doc/xml/manual/configure.xml: Do not claim that vtv is enabled + by default. + * doc/html/manual/configure.html: Regenerate. + +2025-09-08 Nathan Myers + + * src/c++20/Makefile.in: Mention syncbuf.lo. + +2025-09-08 Nathan Myers + + * include/std/syncstream: (syncbuf<>::__mutex) Remove _S_get_mutex, + use extern function instead. + * src/c++20/syncbuf.cc: Define global __syncbuf_get_mutex. + * src/c++20/Makefile.am: Mention syncbuf.cc. + * src/c++20/Makefile.in: Regenerate. + * config/abi/pre/gnu.ver: Mention mangled __syncbuf_get_mutex. + +2025-09-08 Jakub Jelinek + + PR libstdc++/121827 + * include/precompiled/extc++.h: Don't include ext/cast.h which is an + internal header. + * include/ext/pointer.h: Include bits/c++config.h before + #if _GLIBCXX_HOSTED. + +2025-09-08 Gerald Pfeifer + + * doc/xml/manual/using_exceptions.xml: Update link to "Tunables" + section in the Glibc manual. + * doc/html/manual/using_exceptions.html: Regenerate. + +2025-09-08 Luc Grosheintz + + * include/std/span (__integral_constant_like): Allow the member + `value` of a constant wrapping type to be a const reference of + an integer. + * testsuite/23_containers/mdspan/extents/misc.cc: Add test for + cw and constant_wrapper. + * testsuite/23_containers/mdspan/mdspan.cc: Ditto. + * testsuite/23_containers/span/deduction.cc: Ditto. + +2025-09-08 Luc Grosheintz + Tomasz Kamiński + + * include/bits/version.def (constant_wrapper): Add. + * include/bits/version.h: Regenerate. + * include/std/type_traits (_CwFixedValue): New class. + (_IndexSequence): New struct. + (_BuildIndexSequence): New struct. + (_ConstExprParam): New concept. + (_CwOperators): New struct. + (constant_wrapper): New struct. + (cw): New global constant. + * src/c++23/std.cc.in (constant_wrapper): Add. + (cw): Add. + * testsuite/20_util/constant_wrapper/adl.cc: New test. + * testsuite/20_util/constant_wrapper/ex.cc: New test. + * testsuite/20_util/constant_wrapper/generic.cc: New test. + * testsuite/20_util/constant_wrapper/instantiate.cc: New test. + * testsuite/20_util/constant_wrapper/op_comma_neg.cc: New test. + * testsuite/20_util/constant_wrapper/version.cc: New test. + * testsuite/20_util/constant_wrapper/other_wrappers.cc: New file. + 2025-09-05 Patrick Palka PR libstdc++/121804 diff --git a/libstdc++-v3/Makefile.in b/libstdc++-v3/Makefile.in index 5beb3146ee6a..5d2570b31cb8 100644 --- a/libstdc++-v3/Makefile.in +++ b/libstdc++-v3/Makefile.in @@ -91,8 +91,10 @@ target_triplet = @target@ subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/enable.m4 \ $(top_srcdir)/../config/futex.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/hwcaps.m4 \ $(top_srcdir)/../config/iconv.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ @@ -263,6 +265,7 @@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LONG_DOUBLE_128_FLAGS = @LONG_DOUBLE_128_FLAGS@ LONG_DOUBLE_ALT128_COMPAT_FLAGS = @LONG_DOUBLE_ALT128_COMPAT_FLAGS@ diff --git a/libstdc++-v3/aclocal.m4 b/libstdc++-v3/aclocal.m4 index e5af3f62e1c2..0a19b02bf071 100644 --- a/libstdc++-v3/aclocal.m4 +++ b/libstdc++-v3/aclocal.m4 @@ -853,8 +853,10 @@ AC_SUBST([am__untar]) ]) # _AM_PROG_TAR m4_include([../config/acx.m4]) +m4_include([../config/clang-plugin.m4]) m4_include([../config/enable.m4]) m4_include([../config/futex.m4]) +m4_include([../config/gcc-plugin.m4]) m4_include([../config/hwcaps.m4]) m4_include([../config/iconv.m4]) m4_include([../config/lead-dot.m4]) diff --git a/libstdc++-v3/config/cpu/cris/atomicity.h b/libstdc++-v3/config/cpu/cris/atomicity.h deleted file mode 100644 index 9d3cec403a14..000000000000 --- a/libstdc++-v3/config/cpu/cris/atomicity.h +++ /dev/null @@ -1,89 +0,0 @@ -// Low-level functions for atomic operations: CRIS version -*- C++ -*- - -// Copyright (C) 2001-2025 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library 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. - -// This library 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 - -namespace __gnu_cxx _GLIBCXX_VISIBILITY(default) -{ -_GLIBCXX_BEGIN_NAMESPACE_VERSION - - _Atomic_word - __exchange_and_add(volatile _Atomic_word* __mem, int __val) throw () - { - int __tmp; - _Atomic_word __result; - -#if (__CRIS_arch_version >= 32) - __asm__ __volatile__ (" clearf p \n" - "0: \n" - " move.d %4,%2 \n" - " move.d [%3],%0 \n" - " add.d %0,%2 \n" - " ax \n" - " move.d %2,[%3] \n" - " bcs 0b \n" - " clearf p \n" - : "=&r" (__result), "=Q" (*__mem), "=&r" (__tmp) - : "r" (__mem), "g" (__val), "Q" (*__mem) - : "memory"); -#elif (__CRIS_arch_version >= 10) - __asm__ __volatile__ (" clearf \n" - "0: \n" - " move.d %4,%2 \n" - " move.d [%3],%0 \n" - " add.d %0,%2 \n" - " ax \n" - " move.d %2,[%3] \n" - " bwf 0b \n" - " clearf \n" - : "=&r" (__result), "=Q" (*__mem), "=&r" (__tmp) - : "r" (__mem), "g" (__val), "Q" (*__mem) - /* The memory clobber must stay, regardless of - current uses of this function. */ - : "memory"); -#else - __asm__ __volatile__ (" move $ccr,$r9 \n" - " di \n" - " move.d %4,%2 \n" - " move.d [%3],%0 \n" - " add.d %0,%2 \n" - " move.d %2,[%3] \n" - " move $r9,$ccr \n" - : "=&r" (__result), "=Q" (*__mem), "=&r" (__tmp) - : "r" (__mem), "g" (__val), "Q" (*__mem) - : "r9", - /* The memory clobber must stay, regardless of - current uses of this function. */ - "memory"); -#endif - - return __result; - } - - void - __atomic_add(volatile _Atomic_word* __mem, int __val) throw () - { __exchange_and_add(__mem, __val); } - -_GLIBCXX_END_NAMESPACE_VERSION -} // namespace diff --git a/libstdc++-v3/config/cpu/generic/atomicity_mutex/atomicity.h b/libstdc++-v3/config/cpu/generic/atomicity_mutex/atomicity.h index b1328c025bcc..d088f69fe9a4 100644 --- a/libstdc++-v3/config/cpu/generic/atomicity_mutex/atomicity.h +++ b/libstdc++-v3/config/cpu/generic/atomicity_mutex/atomicity.h @@ -44,10 +44,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION __exchange_and_add(volatile _Atomic_word* __mem, int __val) throw () { __gnu_cxx::__scoped_lock sentry(get_atomic_mutex()); - _Atomic_word __result; - __result = *__mem; - *__mem += __val; - return __result; + // The volatile qualification is meaningless. All changes to the memory + // location happen while this mutex is locked so it's not volatile at all. + auto __mem2 = const_cast<_Atomic_word*>(__mem); + return __gnu_cxx::__exchange_and_add_single(__mem2, __val); } void diff --git a/libstdc++-v3/config/cpu/i486/atomicity.h b/libstdc++-v3/config/cpu/i486/atomicity.h deleted file mode 100644 index 092ea9d1e892..000000000000 --- a/libstdc++-v3/config/cpu/i486/atomicity.h +++ /dev/null @@ -1,52 +0,0 @@ -// Low-level functions for atomic operations: x86, x >= 4 version -*- C++ -*- - -// Copyright (C) 1999-2025 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library 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. - -// This library 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 - -namespace __gnu_cxx _GLIBCXX_VISIBILITY(default) -{ -_GLIBCXX_BEGIN_NAMESPACE_VERSION - - _Atomic_word - __attribute__ ((__unused__)) - __exchange_and_add(volatile _Atomic_word* __mem, int __val) throw () - { - register _Atomic_word __result; - __asm__ __volatile__ ("lock; xadd{l} {%0,%1|%1,%0}" - : "=r" (__result), "=m" (*__mem) - : "0" (__val), "m" (*__mem)); - return __result; - } - - void - __attribute__ ((__unused__)) - __atomic_add(volatile _Atomic_word* __mem, int __val) throw () - { - __asm__ __volatile__ ("lock; add{l} {%1,%0|%0,%1}" - : "=m" (*__mem) : "ir" (__val), "m" (*__mem)); - } - -_GLIBCXX_END_NAMESPACE_VERSION -} // namespace - diff --git a/libstdc++-v3/configure b/libstdc++-v3/configure index c0eaeb97c499..713038b390bf 100755 --- a/libstdc++-v3/configure +++ b/libstdc++-v3/configure @@ -802,6 +802,7 @@ OTOOL LIPO NMEDIT DSYMUTIL +LLVM_CONFIG OBJDUMP NM ac_ct_DUMPBIN @@ -7089,8 +7090,266 @@ test -z "$deplibs_check_method" && deplibs_check_method=unknown -plugin_option= + +# Try CLANG_PLUGIN_FILE first since GCC_PLUGIN_OPTION may return the +# wrong plugin_option with clang. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang" >&5 +$as_echo_n "checking for clang... " >&6; } +if ${clang_cv_is_clang+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifdef __clang__ + yes +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "yes" >/dev/null 2>&1; then : + clang_cv_is_clang=yes +else + clang_cv_is_clang=no +fi +rm -f conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $clang_cv_is_clang" >&5 +$as_echo "$clang_cv_is_clang" >&6; } + plugin_file= + if test $clang_cv_is_clang = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang plugin file" >&5 +$as_echo_n "checking for clang plugin file... " >&6; } + plugin_names="LLVMgold.so" + for plugin in $plugin_names; do + plugin_file=`${CC} ${CFLAGS} --print-file-name $plugin` + if test x$plugin_file = x$plugin; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}llvm-config", so it can be a program name with args. +set dummy ${ac_tool_prefix}llvm-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_LLVM_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$LLVM_CONFIG"; then + ac_cv_prog_LLVM_CONFIG="$LLVM_CONFIG" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_LLVM_CONFIG="${ac_tool_prefix}llvm-config" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +LLVM_CONFIG=$ac_cv_prog_LLVM_CONFIG +if test -n "$LLVM_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LLVM_CONFIG" >&5 +$as_echo "$LLVM_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_LLVM_CONFIG"; then + ac_ct_LLVM_CONFIG=$LLVM_CONFIG + # Extract the first word of "llvm-config", so it can be a program name with args. +set dummy llvm-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_LLVM_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_LLVM_CONFIG"; then + ac_cv_prog_ac_ct_LLVM_CONFIG="$ac_ct_LLVM_CONFIG" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_LLVM_CONFIG="llvm-config" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_LLVM_CONFIG=$ac_cv_prog_ac_ct_LLVM_CONFIG +if test -n "$ac_ct_LLVM_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LLVM_CONFIG" >&5 +$as_echo "$ac_ct_LLVM_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_LLVM_CONFIG" = x; then + LLVM_CONFIG="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + LLVM_CONFIG=$ac_ct_LLVM_CONFIG + fi +else + LLVM_CONFIG="$ac_cv_prog_LLVM_CONFIG" +fi + + if test "$?" != 0; then + as_fn_error $? "Required tool 'llvm-config' not found on PATH." "$LINENO" 5 + fi + clang_lib_dir=`$LLVM_CONFIG --libdir` + if test -f $clang_lib_dir/$plugin; then + plugin_file=$clang_lib_dir/$plugin + fi + if test x$plugin_file != x$plugin; then + break; + fi + fi + done + if test -z $plugin_file; then + as_fn_error $? "Couldn't find clang plugin file for $CC." "$LINENO" 5 + fi + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + + if test "${AR}" = "" ; then + as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5 + fi + plugin_option="--plugin $plugin_file" + touch conftest.c + ${AR} $plugin_option rc conftest.a conftest.c + if test "$?" != 0; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 +$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} + plugin_file= + fi + rm -f conftest.* + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_file" >&5 +$as_echo "$plugin_file" >&6; } + fi + plugin_file="$plugin_file" + +if test -n "$plugin_file"; then + plugin_option="--plugin $plugin_file" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -plugin option" >&5 +$as_echo_n "checking for -plugin option... " >&6; } + plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll" +plugin_option= for plugin in $plugin_names; do plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin` if test x$plugin_so = x$plugin; then @@ -7101,7 +7360,119 @@ for plugin in $plugin_names; do break fi done +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + +if test "${AR}" = "" ; then + as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5 +fi +touch conftest.c +${AR} $plugin_option rc conftest.a conftest.c +if test "$?" != 0; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 +$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} + plugin_option= +fi +rm -f conftest.* +if test -n "$plugin_option"; then + plugin_option="$plugin_option" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_option" >&5 +$as_echo "$plugin_option" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + +fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. set dummy ${ac_tool_prefix}ar; ac_word=$2 @@ -7196,17 +7567,15 @@ fi test -z "$AR" && AR=ar if test -n "$plugin_option"; then - if $AR --help 2>&1 | grep -q "\--plugin"; then - touch conftest.c - $AR $plugin_option rc conftest.a conftest.c - if test "$?" != 0; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 -$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} - else + case "$AR" in + *"$plugin_option"*) + ;; + *) + if $AR --help 2>&1 | grep -q "\--plugin"; then AR="$AR $plugin_option" fi - rm -f conftest.* - fi + ;; + esac fi test -z "$AR_FLAGS" && AR_FLAGS=cru @@ -7413,9 +7782,15 @@ fi test -z "$RANLIB" && RANLIB=: if test -n "$plugin_option" && test "$RANLIB" != ":"; then - if $RANLIB --help 2>&1 | grep -q "\--plugin"; then - RANLIB="$RANLIB $plugin_option" - fi + case "$RANLIB" in + *"$plugin_option"*) + ;; + *) + if $RANLIB --help 2>&1 | grep -q "\--plugin"; then + RANLIB="$RANLIB $plugin_option" + fi + ;; + esac fi @@ -12280,7 +12655,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 12283 "configure" +#line 12658 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -12386,7 +12761,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 12389 "configure" +#line 12764 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -16048,7 +16423,7 @@ $as_echo "$glibcxx_cv_atomic_word" >&6; } # Fake what AC_TRY_COMPILE does. cat > conftest.$ac_ext << EOF -#line 16051 "configure" +#line 16426 "configure" #include "${glibcxx_srcdir}/config/$atomic_word_dir/atomic_word.h" int main() { @@ -16194,7 +16569,7 @@ $as_echo "mutex" >&6; } # unnecessary for this test. cat > conftest.$ac_ext << EOF -#line 16197 "configure" +#line 16572 "configure" int main() { _Decimal32 d1; @@ -16236,7 +16611,7 @@ ac_compiler_gnu=$ac_cv_cxx_compiler_gnu # unnecessary for this test. cat > conftest.$ac_ext << EOF -#line 16239 "configure" +#line 16614 "configure" template struct same { typedef T2 type; }; @@ -53544,7 +53919,7 @@ $as_echo "$glibcxx_cv_libbacktrace_atomics" >&6; } CXXFLAGS='-O0 -S' cat > conftest.$ac_ext << EOF -#line 53547 "configure" +#line 53922 "configure" #include int main() { diff --git a/libstdc++-v3/configure.host b/libstdc++-v3/configure.host index 87a1822c661a..ff97216167de 100644 --- a/libstdc++-v3/configure.host +++ b/libstdc++-v3/configure.host @@ -210,10 +210,10 @@ cpu_opt_ext_random=cpu/generic/opt/bits/opt_random.h # Set any OS-dependent bits. # Set the os_include_dir. -# Set the error_costants_dir. +# Set the error_constants_dir. # Set c_model, c_compatibility here. # If atomic ops and/or numeric limits are OS-specific rather than -# CPU-specifc, set those here too. +# CPU-specific, set those here too. # THIS TABLE IS SORTED. KEEP IT THAT WAY. case "${host_os}" in aix[56789]*) diff --git a/libstdc++-v3/doc/Makefile.in b/libstdc++-v3/doc/Makefile.in index c19e3e3044c8..6e7a5a0f9084 100644 --- a/libstdc++-v3/doc/Makefile.in +++ b/libstdc++-v3/doc/Makefile.in @@ -91,8 +91,10 @@ target_triplet = @target@ subdir = doc ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/enable.m4 \ $(top_srcdir)/../config/futex.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/hwcaps.m4 \ $(top_srcdir)/../config/iconv.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ @@ -222,6 +224,7 @@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LONG_DOUBLE_128_FLAGS = @LONG_DOUBLE_128_FLAGS@ LONG_DOUBLE_ALT128_COMPAT_FLAGS = @LONG_DOUBLE_ALT128_COMPAT_FLAGS@ diff --git a/libstdc++-v3/doc/html/index.html b/libstdc++-v3/doc/html/index.html index dd31cff31819..01d7bb787dce 100644 --- a/libstdc++-v3/doc/html/index.html +++ b/libstdc++-v3/doc/html/index.html @@ -23,7 +23,7 @@


Table of Contents

The GNU C++ Library Manual
I. Introduction -
1. Status
Implementation Status
C++ 1998/2003
Implementation Status
Implementation Specific Behavior
C++ 2011
Implementation Specific Behavior
C++ 2014
Implementation Specific Behavior
Filesystem TS
C++ 2017
Implementation Specific Behavior
Parallelism 2 TS
C++ 2020
C++ 2023
C++ TR1
Implementation Specific Behavior
C++ TR 24733
C++ IS 29124
Implementation Specific Behavior
License
The Code: GPL
The Documentation: GPL, FDL
Bugs
Implementation Bugs
Standard Bugs
2. Setup
Prerequisites
Configure
Make
3. Using
Command Options
Headers
Header Files
Mixing Headers
The C Headers and namespace std
Precompiled Headers
Macros
Dual ABI
Troubleshooting
Namespaces
Available Namespaces
namespace std
Using Namespace Composition
Linking
Almost Nothing
Finding Dynamic or Shared Libraries
Experimental Library Extensions
Concurrency
Prerequisites
Thread Safety
Atomics
IO
Structure
Defaults
Future
Alternatives
Containers
Exceptions
Exception Safety
Exception Neutrality
Memory allocation
Doing without
Compatibility
With C
With POSIX thread cancellation
Debugging Support
Using g++
Debug Mode
Tracking uncaught exceptions
Memory Leak Hunting
Non-memory leaks in Pool and MT allocators
Data Race Hunting
Using gdb
Debug Versions of Library Binary Files
Compile Time Checking
II. +
1. Status
Implementation Status
C++ 1998/2003
Implementation Status
Implementation Specific Behavior
C++ 2011
Implementation Specific Behavior
C++ 2014
Implementation Specific Behavior
Filesystem TS
C++ 2017
Implementation Specific Behavior
Parallelism 2 TS
C++ 2020
Implementation Specific Behavior
C++ 2023
C++ TR1
Implementation Specific Behavior
C++ TR 24733
C++ IS 29124
Implementation Specific Behavior
License
The Code: GPL
The Documentation: GPL, FDL
Bugs
Implementation Bugs
Standard Bugs
2. Setup
Prerequisites
Configure
Make
3. Using
Command Options
Headers
Header Files
Mixing Headers
The C Headers and namespace std
Precompiled Headers
Macros
Dual ABI
Troubleshooting
Namespaces
Available Namespaces
namespace std
Using Namespace Composition
Linking
Almost Nothing
Finding Dynamic or Shared Libraries
Experimental Library Extensions
Concurrency
Prerequisites
Thread Safety
Atomics
IO
Structure
Defaults
Future
Alternatives
Containers
Exceptions
Exception Safety
Exception Neutrality
Memory allocation
Doing without
Compatibility
With C
With POSIX thread cancellation
Debugging Support
Using g++
Debug Mode
Tracking uncaught exceptions
Memory Leak Hunting
Non-memory leaks in Pool and MT allocators
Data Race Hunting
Using gdb
Debug Versions of Library Binary Files
Compile Time Checking
II. Standard Contents
4. Support diff --git a/libstdc++-v3/doc/html/manual/configure.html b/libstdc++-v3/doc/html/manual/configure.html index 3564b0c409f0..eb4d42117100 100644 --- a/libstdc++-v3/doc/html/manual/configure.html +++ b/libstdc++-v3/doc/html/manual/configure.html @@ -268,7 +268,7 @@ operations (e.g. the library is configured for armv7 and then code is compiled with -march=armv5t) then the program might rely on support in libgcc to provide the atomics. -

--enable-vtable-verify[default]

Use -fvtable-verify=std to compile the C++ +

--enable-vtable-verify

Use -fvtable-verify=std to compile the C++ runtime with instrumentation for vtable verification. All virtual functions in the standard library will be verified at runtime. Types impacted include locale and diff --git a/libstdc++-v3/doc/html/manual/index.html b/libstdc++-v3/doc/html/manual/index.html index 5f9109276723..fb61205678f2 100644 --- a/libstdc++-v3/doc/html/manual/index.html +++ b/libstdc++-v3/doc/html/manual/index.html @@ -4,7 +4,7 @@


Table of Contents

I. Introduction -
1. Status
Implementation Status
C++ 1998/2003
Implementation Status
Implementation Specific Behavior
C++ 2011
Implementation Specific Behavior
C++ 2014
Implementation Specific Behavior
Filesystem TS
C++ 2017
Implementation Specific Behavior
Parallelism 2 TS
C++ 2020
C++ 2023
C++ TR1
Implementation Specific Behavior
C++ TR 24733
C++ IS 29124
Implementation Specific Behavior
License
The Code: GPL
The Documentation: GPL, FDL
Bugs
Implementation Bugs
Standard Bugs
2. Setup
Prerequisites
Configure
Make
3. Using
Command Options
Headers
Header Files
Mixing Headers
The C Headers and namespace std
Precompiled Headers
Macros
Dual ABI
Troubleshooting
Namespaces
Available Namespaces
namespace std
Using Namespace Composition
Linking
Almost Nothing
Finding Dynamic or Shared Libraries
Experimental Library Extensions
Concurrency
Prerequisites
Thread Safety
Atomics
IO
Structure
Defaults
Future
Alternatives
Containers
Exceptions
Exception Safety
Exception Neutrality
Memory allocation
Doing without
Compatibility
With C
With POSIX thread cancellation
Debugging Support
Using g++
Debug Mode
Tracking uncaught exceptions
Memory Leak Hunting
Non-memory leaks in Pool and MT allocators
Data Race Hunting
Using gdb
Debug Versions of Library Binary Files
Compile Time Checking
II. +
1. Status
Implementation Status
C++ 1998/2003
Implementation Status
Implementation Specific Behavior
C++ 2011
Implementation Specific Behavior
C++ 2014
Implementation Specific Behavior
Filesystem TS
C++ 2017
Implementation Specific Behavior
Parallelism 2 TS
C++ 2020
Implementation Specific Behavior
C++ 2023
C++ TR1
Implementation Specific Behavior
C++ TR 24733
C++ IS 29124
Implementation Specific Behavior
License
The Code: GPL
The Documentation: GPL, FDL
Bugs
Implementation Bugs
Standard Bugs
2. Setup
Prerequisites
Configure
Make
3. Using
Command Options
Headers
Header Files
Mixing Headers
The C Headers and namespace std
Precompiled Headers
Macros
Dual ABI
Troubleshooting
Namespaces
Available Namespaces
namespace std
Using Namespace Composition
Linking
Almost Nothing
Finding Dynamic or Shared Libraries
Experimental Library Extensions
Concurrency
Prerequisites
Thread Safety
Atomics
IO
Structure
Defaults
Future
Alternatives
Containers
Exceptions
Exception Safety
Exception Neutrality
Memory allocation
Doing without
Compatibility
With C
With POSIX thread cancellation
Debugging Support
Using g++
Debug Mode
Tracking uncaught exceptions
Memory Leak Hunting
Non-memory leaks in Pool and MT allocators
Data Race Hunting
Using gdb
Debug Versions of Library Binary Files
Compile Time Checking
II. Standard Contents
4. Support @@ -145,7 +145,7 @@
21.10. Non-unique Mapping Containers
21.11. Point Iterator Hierarchy
21.12. Invalidation Guarantee Tags Hierarchy
21.13. Container Tag Hierarchy
21.14. Hash functions, ranged-hash functions, and range-hashing functions
21.15. Insert hash sequence diagram
21.16. Insert hash sequence diagram with a null policy
21.17. Hash policy class diagram
21.18. Balls and bins
21.19. Insert resize sequence diagram
21.20. Standard resize policy trigger sequence diagram
21.21. Standard resize policy size sequence - diagram
21.22. Tree node invariants
21.23. Tree node invalidation
21.24. A tree and its update policy
21.25. Restoring node invariants
21.26. Insert update sequence
21.27. Useless update path
21.28. A PATRICIA trie
21.29. A trie and its update policy
21.30. A simple list
21.31. The counter algorithm
21.32. Underlying Priority-Queue Data-Structures.
21.33. Priority-Queue Data-Structure Tags.
B.1. Configure and Build File Dependencies

List of Tables

1.1. C++ 1998/2003 Implementation Status
1.2. C++ 2011 Implementation Status
1.3. C++ 2014 Implementation Status
1.4. C++ Technical Specifications Implementation Status
1.5. C++ 2017 Library Features
1.6. C++ 2017 Implementation Status
1.7. C++ Technical Specifications Implementation Status
1.8. Support for Extended ABI Tags
1.9. C++ 2020 Library Features
1.10. C++ 2023 Library Features
1.11. C++ TR1 Implementation Status
1.12. C++ TR 24733 Implementation Status
1.13. C++ Special Functions Implementation Status
3.1. C++ Command Options
3.2. C++ 1998 Library Headers
3.3. C++ 1998 Library Headers for C Library Facilities
3.4. C++ 1998 Deprecated Library Header
3.5. C++ 2011 Library Headers
3.6. C++ 2011 Library Headers for C Library Facilities
3.7. C++ 2014 Library Header
3.8. C++ 2017 Library Headers
3.9. C++ 2020 Library Headers
3.10. C++ 2020 Obsolete Headers
3.11. C++ 2023 Library Headers
3.12. C++ 2026 Library Headers
3.13. File System TS Header
3.14. Library Fundamentals TS Headers
3.15. Networking TS Headers
3.16. C++ TR 1 Library Headers
3.17. C++ TR 1 Library Headers for C Library Facilities
3.18. C++ TR 24733 Decimal Floating-Point Header
3.19. C++ ABI Headers
3.20. Extension Headers
3.21. Extension Debug Headers
3.22. Extension Parallel Headers
17.1. Debugging Containers
17.2. Debugging Containers C++11
18.1. Parallel Algorithms
20.1. Bitmap Allocator Memory Map
B.1. Doxygen Prerequisites
B.2. HTML to Doxygen Markup Comparison
B.3. Docbook Prerequisites
B.4. HTML to Docbook XML Markup Comparison
B.5. Docbook XML Element Use
B.6. Extension Allocators
B.7. Extension Allocators Continued

List of Tables

1.1. C++ 1998/2003 Implementation Status
1.2. C++ 2011 Implementation Status
1.3. C++ 2014 Implementation Status
1.4. C++ Technical Specifications Implementation Status
1.5. C++ 2017 Library Features
1.6. C++ 2017 Implementation Status
1.7. C++ Technical Specifications Implementation Status
1.8. Support for Extended ABI Tags
1.9. C++ 2020 Library Features
1.10. C++ 2020 Implementation Status
1.11. C++ 2023 Library Features
1.12. C++ TR1 Implementation Status
1.13. C++ TR 24733 Implementation Status
1.14. C++ Special Functions Implementation Status
3.1. C++ Command Options
3.2. C++ 1998 Library Headers
3.3. C++ 1998 Library Headers for C Library Facilities
3.4. C++ 1998 Deprecated Library Header
3.5. C++ 2011 Library Headers
3.6. C++ 2011 Library Headers for C Library Facilities
3.7. C++ 2014 Library Header
3.8. C++ 2017 Library Headers
3.9. C++ 2020 Library Headers
3.10. C++ 2020 Obsolete Headers
3.11. C++ 2023 Library Headers
3.12. C++ 2026 Library Headers
3.13. File System TS Header
3.14. Library Fundamentals TS Headers
3.15. Networking TS Headers
3.16. C++ TR 1 Library Headers
3.17. C++ TR 1 Library Headers for C Library Facilities
3.18. C++ TR 24733 Decimal Floating-Point Header
3.19. C++ ABI Headers
3.20. Extension Headers
3.21. Extension Debug Headers
3.22. Extension Parallel Headers
17.1. Debugging Containers
17.2. Debugging Containers C++11
18.1. Parallel Algorithms
20.1. Bitmap Allocator Memory Map
B.1. Doxygen Prerequisites
B.2. HTML to Doxygen Markup Comparison
B.3. Docbook Prerequisites
B.4. HTML to Docbook XML Markup Comparison
B.5. Docbook XML Element Use
B.6. Extension Allocators
B.7. Extension Allocators Continued
\ No newline at end of file + \ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/status.html b/libstdc++-v3/doc/html/manual/status.html index 564679bc6cf1..64a484082689 100644 --- a/libstdc++-v3/doc/html/manual/status.html +++ b/libstdc++-v3/doc/html/manual/status.html @@ -2,7 +2,7 @@ Chapter 1. Status

Chapter 1. Status

Implementation Status

C++ 1998/2003

Implementation Status

Next


Chapter 1. Status

Implementation Status

C++ 1998/2003

Implementation Status

This status table is based on the table of contents of ISO/IEC 14882:2003.

This section describes the C++ support in @@ -970,7 +970,7 @@ 28 Algorithms - 28.1General  28.2Header <algorithm> synopsis  28.3Algorithms requirements  28.4Parallel algorithms Using PSTL28.5Non-modifying sequence operationsY 28.6Mutating sequence operationsY 28.7Sorting and related operationsY 28.8C library algorithmsY  + 28.1General  28.2Header <algorithm> synopsis  28.3Algorithms requirements  28.4Parallel algorithms Uses code from oneDPL28.5Non-modifying sequence operationsY 28.6Mutating sequence operationsY 28.7Sorting and related operationsY 28.8C library algorithmsY  29 Numerics @@ -1759,7 +1759,159 @@ Note 2: The C++20 calendar types are supported since 11.1, time zones and UTC are supported since 13.1, and chrono::parse is supported since 14.1. -

C++ 2023

+

+The following status table is based on the table of contents of +ISO/IEC 14882:2020. +Some subclauses are not shown in the table where the content is unchanged +since C++17 and the implementation is complete. +

Table 1.10. C++ 2020 Implementation Status

SectionDescriptionStatusComments
+ 17 + + Language support library +
17.1General  
17.2Common definitions  
17.2.1Header <cstddef> synopsisY 
17.2.2Header <cstdlib> synopsisY 
17.2.3Null pointersY 
17.2.4Sizes, alignments, and offsetsY 
17.2.5byte type operationsY 
17.3Implementation properties  
17.3.1General  
17.3.2Header <version> synopsisY 
17.3.3Header <limits> synopsisY 
17.3.4Floating-point type properties  
17.3.4.1Type float_round_styleN 
17.3.4.2Type float_denorm_styleN 
17.3.5Class template numeric_limitsY 
17.3.6Header <climits> synopsisY 
17.3.7Header <cfloat> synopsisY 
17.4Integer types  
17.4.1General  
17.4.2Header <cstdint> synopsisY 
17.5Startup and terminationPartialC library dependency for quick_exit, at_quick_exit
17.6Dynamic memory managementY 
17.7Type identificationY 
17.8Source location  
17.8.1Header <source_location> synopsisY 
17.8.2Class source_locationY 
17.9Exception handlingY 
17.10Initializer listsY 
17.11Comparisons  
17.11.1Header <compare> synopsisY 
17.11.2Comparison category typesY 
17.11.3Class template common_comparison_categoryY 
17.11.4Concept three_way_comparableY 
17.11.5Result of three-way comparisonY 
17.11.6Comparison algorithmsY 
17.12Coroutines  
17.12.1General  
17.12.2Header <coroutine> synopsisY 
17.12.3Coroutine traitsY 
17.12.4Class template coroutine_handleY 
17.12.5No-op coroutinesY 
17.13Other runtime supportY 
+ 18 + + Concepts library +
18.1General  
18.2Equality preservation  
18.3Header <concepts> synopsisY 
18.4Language-related concepts  
18.4.1General  
18.4.2Concept same_asY 
18.4.3Concept derived_fromY 
18.4.4Concept convertible_toY 
18.4.5Concept common_reference_withY 
18.4.6Concept common_withY 
18.4.7Arithmetic concepts  
18.4.8Concept assignable_fromY 
18.4.9Concept swappableY 
18.4.10Concept destructibleY 
18.4.11Concept constructible_fromY 
18.4.12Concept default_initializableY 
18.4.13Concept move_constructibleY 
18.4.14Concept copy_constructibleY 
18.5Comparison concepts  
18.5.1General  
18.5.2Boolean testabilityY 
18.5.3Concept equality_comparableY 
18.5.4Concept totally_orderedY 
18.6Object conceptsY 
18.7Callable concepts  
18.7.1General  
18.7.2Concept invocableY 
18.7.3Concept regular_invocableY 
18.7.4Concept predicateY 
18.7.5Concept relationY 
18.7.6Concept equivalence_relationY 
18.7.7Concept strict_weak_orderY 
+ 19 + + Diagnostics library +
19.1General  
19.2Exception classesY 
19.3AssertionsY 
19.4Error numbersY 
19.5System error support  
19.5.1General  
19.5.2Header <system_error> synopsisY 
19.5.3Class error_categoryY 
19.5.4Class error_codeY 
19.5.5Class error_conditionY 
19.5.6Comparison operator functionsY 
19.5.7System error hash supportY 
19.5.8Class system_errorY 
+ 20 + + General utilities library +
20.1General  
20.2Utility components  
20.2.1Header <utility> synopsisY 
20.2.2swapY 
20.2.3exchangeY 
20.2.4Forward/move helpersY 
20.2.5Function template as_constY 
20.2.6Function template declvalY 
20.2.7Integer comparison functionsY 
20.3Compile-time integer sequencesY 
20.4PairsY 
20.5TuplesY 
20.6Optional objectsY 
20.7VariantsY 
20.8Storage for any typeY 
20.9BitsetsY 
20.10MemoryY 
20.11Smart pointers  
20.11.1Class template unique_ptrY 
20.11.2Class bad_weak_ptrY 
20.11.3Class template shared_ptrYUses code from boost::shared_ptr.
20.11.4Class template weak_ptrY 
20.11.5Class template owner_lessY 
20.11.6Class template enable_shared_from_thisY 
20.11.7Smart pointer hash supportY 
20.12Memory resources  
20.12.1Header <memory_resource> synopsisY 
20.12.2Class memory_resourceY 
20.12.3Class template polymorphic_allocatorY 
20.12.4Access to program-wide memory_resource objectsY 
20.12.5Pool resource classesY 
20.12.6Class monotonic_buffer_resourceY 
20.13Class template scoped_allocator_adaptorY 
20.14Function objects  
20.14.1General  
20.14.2Header <functional> synopsisY 
20.14.3Definitions  
20.14.4Requirements  
20.14.5Function template invokeY 
20.14.6Class template reference_wrapperY 
20.14.7Arithmetic operationsY 
20.14.8ComparisonsY 
20.14.9Concept-constrained comparisonsY 
20.14.10Logical operationsY 
20.14.11Bitwise operationsY 
20.14.12Class identityY 
20.14.13Function template not_fnY 
20.14.14Function template bind_frontY 
20.14.15Function object bindersY 
20.14.16Function template mem_fnY 
20.14.17Polymorphic function wrappers  
20.14.17.1General  
20.14.17.2Class bad_function_callY 
20.14.17.3Class template functionY 
20.14.18SearchersY 
20.15Metaprogramming and type traits  
20.15.1General  
20.15.2RequirementsY 
20.15.3Header <type_traits> synopsisY 
20.15.4Helper classesY 
20.15.5Unary type traitsY 
20.15.6Type property queriesY 
20.15.7Relationships between typesY 
20.15.8Transformations between typesY 
20.15.9Logical operator traitsY 
20.15.10Member relationshipsY 
20.15.11Constant evaluation contextY 
20.16Compile-time rational arithmeticY 
20.17Class type_indexY 
20.18Execution policiesY 
20.19Primitive numeric conversions  
20.19.1Header <charconv> synopsisY 
20.19.2Primitive numeric output conversionY + Floating-point types up to 64-bit are formatted using + Ryu. + Types with greater precision are formatted using the C library + (sprintf and conditionally + strfromf128). + For powerpc64le-unknown-linux-gnu __sprintfieee128 + must be provided by Glibc. +
20.19.3Primitive numeric input conversionY + Floating-point types up to 64-bit are parsed using + fast_float. + Types with greater precision are parsed using the C library + (strtold). + For powerpc64le-unknown-linux-gnu __strtoieee128 + must be provided by Glibc. +
20.20Formatting  
20.20.1Header <format> synopsisY 
20.20.2Format string  
20.20.2.1 In generalY 
20.20.2.2Standard format specifiersY 
20.20.3Error reportingY 
20.20.4Formatting functionsY 
20.20.5FormatterY 
20.20.5.1Formatter requirements  
20.20.5.2Formatter specializationsY 
20.20.5.3Class template basic_format_parse_contextY 
20.20.5.4Class template basic_format_contextY 
20.20.6Arguments  
20.20.6.1Class template basic_format_argY 
20.20.6.2Class template format-arg-storeY 
20.20.6.3Class template basic_format_argsY 
20.20.7Class format_errorY 
+ 21 + + Strings library +
21.1General  
21.2Character traitsY 
21.3String classesY 
21.4String view classesY 
21.5Null-terminated sequence utilitiesPartialC library dependency.
+ 22 + + Containers library +
22.1General  
22.2Container requirementsY 
22.3Sequence containersY 
22.4Associative containersY 
22.5Unordered associative containersY 
22.6Container adaptorsY 
22.7Views  
22.7.1General  
22.7.2Header <span> synopsisY 
22.7.3Class template spanY 
+ 23 + + Iterators library +
23.1General  
23.2Header <iterator> synopsisY 
23.3Iterator requirements  
23.3.1In generalY 
23.3.2Associated typesY 
23.3.3Customization pointsY 
23.3.4Iterator conceptsY 
23.3.5C++17 iterator requirementsY 
23.3.6Indirect callable requirementsY 
23.3.7Common algorithm requirementsY 
23.4Iterator primitives  
23.4.1General  
23.4.2Standard iterator tagsY 
23.4.3Iterator operationsY 
23.4.4Range iterator operationsY 
23.5Iterator adaptors  
23.5.1Reverse iteratorsY 
23.5.2Insert iteratorsY 
23.5.3Move iterators and sentinelsY 
23.5.4Common iteratorsY 
23.5.5Default sentinelY 
23.5.6Counted iteratorsY 
23.5.7 Unreachable sentinelY 
23.6 Stream iteratorsY 
23.6.1General  
23.6.2 Class template istream_iteratorY 
23.6.3Class template ostream_iteratorY 
23.6.4Class template istreambuf_iteratorY 
23.6.5Class template ostreambuf_iteratorY 
23.7Range accessY 
+ 24 + + Ranges library +
24.1General  
24.2Header <ranges> synopsisY 
24.3Range accessY 
24.4Range requirements  
24.4.1General  
24.4.2RangesY 
24.4.3Sized rangesY 
24.4.4ViewsY 
24.4.5Other range refinementsY 
24.5Range utilities  
24.5.1General  
24.5.2Helper conceptsY 
24.5.3View interfaceY 
24.5.4Sub-rangesY 
24.5.5Dangling iterator handlingY 
24.6Range factories  
24.6.1General  
24.6.2Empty viewY 
24.6.3Single viewY 
24.6.4Iota viewY 
24.6.5Istream viewY 
24.7Range adaptors  
24.7.1General  
24.7.2Range adaptor objectsY 
24.7.3Semiregular wrapperY 
24.7.4All viewY 
24.7.5Filter viewY 
24.7.6Transform viewY 
24.7.7Take viewY 
24.7.8Take while viewY 
24.7.9Drop viewY 
24.7.10Drop while viewY 
24.7.11Join viewY 
24.7.12Split viewY 
24.7.13Counted viewY 
24.7.14Common viewY 
24.7.15Reverse viewY 
24.7.16Elements viewY 
+ 25 + + Algorithms library +
25.1General  
25.2Algorithms requirementsY 
25.3Parallel algorithms Uses code from oneDPL
25.4Header <algorithm> synopsisY 
25.5Algorithm result typesY 
25.6Non-modifying sequence operations  
25.6.1All ofY 
25.6.2Any ofY 
25.6.3None ofY 
25.6.4For eachY 
25.6.5FindY 
25.6.6Find endY 
25.6.7Find firstY 
25.6.8Adjacent findY 
25.6.9CountY 
25.6.10MismatchY 
25.6.11EqualY 
25.6.12Is permutationY 
25.6.13SearchY 
25.7Mutating sequence operations  
25.7.1CopyY 
25.7.2MoveY 
25.7.3SwapY 
25.7.4TransformY 
25.7.5ReplaceY 
25.7.6FillY 
25.7.7GenerateY 
25.7.8RemoveY 
25.7.9UniqueY 
25.7.10ReverseY 
25.7.11RotateY 
25.7.12SampleY 
25.7.13ShuffleY 
25.7.14ShiftY 
25.8Sorting and related operations  
25.8.1GeneralY 
25.8.2SortingY 
25.8.3Nth elementY 
25.8.4Binary searchY 
25.8.5PartitionsY 
25.8.6MergeY 
25.8.7Set operations on sorted structuresY 
25.8.8Heap operationsY 
25.8.9Minimum and maximumY 
25.8.10Bounded valueY 
25.8.11Lexicographical comparisonY 
25.8.12Three-way comparison algorithmsY 
25.8.13Permutation generatorsY 
25.9Header <numeric> synopsisY 
25.10Generalized numeric operations  
25.10.1General  
25.10.2Definitions  
25.10.3AccumulateY 
25.10.4ReduceY 
25.10.5Inner productY 
25.10.6Transform reduceY 
25.10.7Partial sumY 
25.10.8Exclusive scanY 
25.10.9Inclusive scanY 
25.10.10Transform exclusive scanY 
25.10.11Transform inclusive scanY 
25.10.12Adjacent differenceY 
25.10.13IotaY 
25.10.14Greatest common divisorY 
25.10.15Least common multipleY 
25.10.16MidpointY 
25.11Specialized <memory> algorithms  
25.11.1General  
25.11.2Special memory conceptsY 
25.11.3uninitialized_default_constructY 
25.11.4uninitialized_value_constructY 
25.11.5uninitialized_copyY 
25.11.6uninitialized_moveY 
25.11.7uninitialized_fillY 
25.11.8construct_atY 
25.11.9destroyY 
25.12C library algorithmsY 
+ 26 + + Numerics library +
26.1General  
26.2Numeric type requirementsY 
26.3The floating-point environmentY 
26.4Complex numbersY 
26.5Bit manipulation  
26.5.1General  
26.5.2Header <bit> synopsisY 
26.5.3Function template bit_castY 
26.5.4Integral powers of 2Y 
26.5.5RotatingY 
26.5.6CountingY 
26.5.7EndianY 
26.6Random number generationY 
26.7Numeric arraysY 
26.8Mathematical functions for floating-point typesY 
26.9Numbers  
26.9.1Header <numbers> synopsisY 
26.9.2Mathematical constantsY 
+ 27 + + Time library +
27.1General  
27.2Header <chrono> synopsisY 
27.3Cpp17Clock requirementsY 
27.4Time-related traits  
27.4.1treat_as_floating_pointY 
27.4.2duration_valuesY 
27.4.3Specializations of common_typeY 
27.4.4Class template is_clockY 
27.5Class template duration  
27.5.1GeneralY 
27.5.2ConstructorsY 
27.5.3ObserverY 
27.5.4ArithmeticY 
27.5.5Special valuesY 
27.5.6Non-member arithmeticY 
27.5.7ComparisonsY 
27.5.8ConversionsY 
27.5.9Suffixes for duration literalsY 
27.5.10AlgorithmsY 
27.5.11I/OY 
27.6Class template time_pointY 
27.7Clocks  
27.7.1GeneralY 
27.7.2Class system_clockY 
27.7.3Class utc_clockY 
27.7.4Class tai_clockY 
27.7.5Class gps_clockY 
27.7.6Type file_clockY 
27.7.7Class steady_clockY 
27.7.8Class high_resolution_clockY 
27.7.9Local timeY 
27.7.10time_point conversionsY 
27.8The civil calendar  
27.8.1In general  
27.8.2Class last_specY 
27.8.3Class dayY 
27.8.4Class monthY 
27.8.5Class yearY 
27.8.6Class weekdayY 
27.8.7Class weekday_indexedY 
27.8.8Class weekday_lastY 
27.8.9Class month_dayY 
27.8.10Class month_day_lastY 
27.8.11Class month_weekdayY 
27.8.12Class month_weekday_lastY 
27.8.13Class year_monthY 
27.8.14Class year_month_dayY 
27.8.15Class year_month_day_lastY 
27.8.16Class year_month_weekdayY 
27.8.17Class year_month_weekday_lastY 
27.9Class template hh_mm_ssY 
27.1012/24 hours functionsY 
27.11Time zones  
27.11.1In general  
27.11.2Time zone databaseY 
27.11.3Exception classesY 
27.11.4Information classesY 
27.11.5Class time_zoneY 
27.11.6Class template zoned_traitsY 
27.11.7Class template zoned_timeY 
27.11.8Class leap_secondY 
27.11.9Class time_zone_linkY 
27.12FormattingY 
27.13ParsingY 
27.14Header <ctime> synopsisY 
+ 28 + + Localization library +
28.1General  
28.2Header <locale> synopsisY 
28.3Locales  
28.3.1Class localeY 
28.3.2locale globalsY 
28.3.3Convenience interfaces  
28.3.3.1Character classificationY 
28.3.3.2Character conversionsY 
28.4Standard locale categories  
28.4.1General  
28.4.2The ctype categoryY 
28.4.3The numeric categoryY 
28.4.4The numeric punctuation facetY 
28.4.5The collate categoryY 
28.4.6The time categoryY 
28.4.7The monetary categoryY 
28.4.8The message retrieval categoryY 
28.5C library localesY 
+ 29 + + Input/output library +
29.1 GeneralY 
29.2Iostreams requirements  
29.2.1Imbue limitationsY 
29.2.2Positioning type limitationsY 
29.2.3Thread safetyPartial 
29.3Forward declarationsY 
29.4Standard iostream objectsY 
29.5Iostreams base classesY 
29.6Stream buffersY 
29.7Formatting and manipulatorsY 
29.8String-based streamsY 
29.9File-based streamsY 
29.10Synchronized output streams  
29.10.1Header <syncstream> synopsisY 
29.10.2Class template basic_syncbufY 
29.10.3Class template basic_osyncstreamY 
29.11File systems  
29.11.1General  
29.11.2ConformanceY 
29.11.3RequirementsY 
29.11.4Header <filesystem> synopsisY 
29.11.5Error reportingY 
29.11.6Class pathY 
29.11.7Class filesystem_errorY 
29.11.8Enumerations  
29.11.8.1Enum path::formatY 
29.11.8.2Enum class file_typeY 
29.11.8.3Enum class copy_optionsY 
29.11.8.4Enum class permsY 
29.11.8.5Enum class perm_optionsY 
29.11.8.6Enum class directory_optionsY 
29.11.9Class file_statusY 
29.11.10Class directory_entryY 
29.11.11Class directory_iteratorY 
29.11.12Class recursive_directory_iteratorY 
29.11.13Filesystem operation functionsY 
29.12C library files  
29.12.1Header <cstdio> synopsisY 
29.12.2Header <cinttypes> synopsisY 
+ 30 + + Regular expressions library +
30.1GeneralY 
30.2RequirementsY 
30.3Header <regex> synopsisY 
30.4Namespace std::regex_constantsY 
30.5Class regex_errorY 
30.6Class template regex_traitsPartialtransform_primary is not correctly implemented
30.7Class template basic_regexY 
30.8Class template sub_matchY 
30.9Class template match_resultsY 
30.10Regular expression algorithmsY 
30.11Regular expression iteratorsY 
30.12Modified ECMAScript regular expression grammarY 
+ 31 + + Atomics library +
31.1GeneralY 
31.2Header <atomic> synopsisY 
31.3Type aliasesY 
31.4Order and consistencyY 
31.5Lock-free propertyY 
31.6Waiting and notifyingPartialWaiting and notifying is not supported for volatile objects.
31.7Class template atomic_ref  
31.7.1GeneralY 
31.7.2OperationsPartial + volatile-qualified overloads for wait, + notify_one, and notify_all are not provided. +
31.7.3Specializations for integral typesY 
31.7.4Specializations for floating-point typesY 
31.7.5Partial specialization for pointersY 
31.8Class template atomic  
31.8.1GeneralY 
31.8.2Operations on atomic typesPartialWaiting and notifying is not supported for volatile objects.
31.8.3Specializations for integersY 
31.8.4Specializations for floating-point typesY 
31.8.5Partial specialization for pointersY 
31.8.6Member operators common to integers and pointers to objectsY 
31.8.7Partial specializations for smart pointers  
31.8.7.1GeneralY 
31.8.7.2Partial specialization for shared_ptrY 
31.8.7.3Partial specialization for weak_ptrY 
31.9Non-member functionsY 
31.10Flag type and operationsY 
31.11FencesY 
+ 32 + + Threads library +
32.1GeneralY 
32.2RequirementsY 
32.3Stop tokens  
32.3.1IntroductionY 
32.3.2Header <stop_token> synopsisY 
32.3.3Class stop_tokenY 
32.3.4Class stop_sourceY 
32.3.5Class template stop_callbackY 
32.4Threads  
32.4.1General  
32.4.2Header <thread> synopsisY 
32.4.3Class threadPartialthread::id comparisons not well-defined
32.4.4Class jthreadY 
32.4.5Namespace this_threadY 
32.5Mutual exclusion  
32.5.1General  
32.5.2Header <mutex> synopsis  
32.5.3Header <shared_mutex> synopsis  
32.5.4Mutex requirements  
32.5.4.1In general  
32.5.4.2Mutex typesY 
32.5.4.3Timed mutex typesY 
32.5.4.4Shared mutex typesY 
32.5.4.5Shared timed mutex typesY 
32.5.5LocksY 
32.5.6Generic locking algorithmsY 
32.5.7Call once  
32.5.7.1Struct once_flagY 
32.5.7.2Function call_oncePartialException support is broken. + See PR + 66146. +
32.6Condition variablesY 
32.7SemaphoreY 
32.7.1General  
32.7.2Header <semaphore> synopsisY 
32.7.3Class template counting_semaphoreY 
32.8Coordination types  
32.8.1General  
32.8.2Latches  
32.8.2.1General  
32.8.2.2Header <latch> synopsisY 
32.8.2.3Class latchY 
32.8.3Barriers  
32.8.3.1General  
32.8.3.2Header <barrier> synopsisY 
32.8.3.3Class template barrierY 
32.9FuturesY 
+ Appendix D + + Compatibility features +
D.10C headers  
D.10.1GeneralY 
D.10.2Header <complex.h> synopsisY 
D.10.3Header <iso646.h> synopsisY 
D.10.4Header <stdalign.h> synopsisY 
D.10.5Header <stdbool.h> synopsisY 
D.10.6Header <tgmath.h> synopsisY 
D.10.7Other C headersY 
D.12Relational operatorsY 
D.13char* streamsY 
D.13.1Header <strstream> synopsisY 
D.13.2Class strstreambufY 
D.13.3Class istrstreamY 
D.13.4Class ostrstreamY 
D.13.5Class strstreamY 
D.14Deprecated type traitsY 
D.15TupleY 
D.16VariantY 
D.17Deprecated iterator class templateY 
D.18Deprecated move_iterator accessY 
D.19Deprecated shared_ptr atomic accessY 
D.20Deprecated basic_string capacityY 
D.21Deprecated standard code conversion facets  
D.21.1GeneralY 
D.21.2Header <codecvt> synopsisY 
D.21.3RequirementsY 
D.22Deprecated convenience conversion interfaces  
D.22.1GeneralY 
D.22.2Class template wstring_convertY 
D.22.3Class template wbuffer_convertY 
D.23Deprecated locale category facetsY 
D.24Deprecated filesystem path factory functionsY 
D.25Deprecated atomic operations  
D.25.1GeneralY 
D.25.2Volatile accessY 
D.25.3Non-member functionsY 
D.25.4Operations on atomic typesY 
D.25.5Flag type and operationsY 

Implementation Specific Behavior

For behaviour which is also specified by previous standards, + see C++ 1998/2003 Implementation + Specific Behavior, C++ + 2011 Implementation Specific Behavior, and + C++ 2017 Implementation Specific + Behavior. This section only documents behaviour which is new in + the 2020 standard. +

+ 16.4.2.4 [compliance] The implementation is + freestanding if the -ffreestanding compiler flag is used, + and hosted otherwise. +

+ 16.4.2.4 [compliance] + The support for always lock-free integral atomic types and presence of + atomic_signed_lock_free and + atomic_unsigned_lock_free type aliases depends on the + target. +

+ 27.5.11 [time.duration.io] + The "μs" ("\u00b5\u0073") is used + for std::micro Period::type if the macro + _GLIBCXX_USE_ALT_MICROSECONDS_SUFFIX is defined to a value + other than zero before inclusion of the chrono header, + "us" is used otherwise. +

+ 29.8.2.2 [stringbuf.cons] Sequence pointers are + initialized to null pointers by the + basic_stringbuf(ios_base::openmode) constructor. +

+ 31.7.1 [atomics.ref.generic.general], + 31.7.3 [atomics.ref.int], + 31.7.4 [atomics.ref.float], + 31.7.5 [atomics.ref.pointer] + The values of is_always_lock_free members depend on the + target and cannot be listed here. +

+ 31.7.1 [atomics.ref.generic.general] + If sizeof(T) is equal to either 1, + 2, 4, 8, or 16, + then the value of required_alignment member is equal to + the maximum of alignof(T) and sizeof(T). + Otherwise required_alignment value is alignof(T). +

+ 31.7.3 [atomics.ref.int] + The value of required_alignment member is equal to the + maximum of alignof(value_type) and + sizeof(value_type). +

+ 31.7.4 [atomics.ref.float], + 31.7.5 [atomics.ref.pointer] + The value of required_alignment member is equal to + alignof(value_type). +

+ 32.7.3 [thread.sema.cnt] The value of default + argument for the least_max_value parameter depends on the + target operating system and platform, however the value of + counting_semaphore<>::max() is greater than or equal + to numeric_limits<int>::max(). +

C++ 2023

In this implementation the -std=gnu++23 or -std=c++23 flag must be used to enable language and library @@ -1782,7 +1934,7 @@ SD-6: Feature-testing recommendations for C++ (where applicable) or any notes about the implementation. -

Table 1.10. C++ 2023 Library Features

Library FeatureProposalStatusSD-6 Feature Test / Notes
+

Table 1.11. C++ 2023 Library Features

Library FeatureProposalStatusSD-6 Feature Test / Notes
Ranges and Views
Range constructor for std::string_view @@ -2262,7 +2414,7 @@

This page describes the TR1 support in mainline GCC, not in any particular release. -

Table 1.11. C++ TR1 Implementation Status

SectionDescriptionStatusComments
2General Utilities
2.1Reference wrappers  
2.1.1Additions to header <functional> synopsisY 
2.1.2Class template reference_wrapper  
2.1.2.1reference_wrapper construct/copy/destroyY 
2.1.2.2reference_wrapper assignmentY 
2.1.2.3reference_wrapper accessY 
2.1.2.4reference_wrapper invocationY 
2.1.2.5reference_wrapper helper functionsY 
2.2Smart pointers  
2.2.1Additions to header <memory> synopsisY 
2.2.2Class bad_weak_ptrY 
2.2.3Class template shared_ptr  +

Table 1.12. C++ TR1 Implementation Status

SectionDescriptionStatusComments
2General Utilities
2.1Reference wrappers  
2.1.1Additions to header <functional> synopsisY 
2.1.2Class template reference_wrapper  
2.1.2.1reference_wrapper construct/copy/destroyY 
2.1.2.2reference_wrapper assignmentY 
2.1.2.3reference_wrapper accessY 
2.1.2.4reference_wrapper invocationY 
2.1.2.5reference_wrapper helper functionsY 
2.2Smart pointers  
2.2.1Additions to header <memory> synopsisY 
2.2.2Class bad_weak_ptrY 
2.2.3Class template shared_ptr 

Uses code from boost::shared_ptr. @@ -2283,7 +2435,7 @@

This page describes the TR 24733 support in mainline GCC, not in any particular release. -

Table 1.12. C++ TR 24733 Implementation Status

SectionDescriptionStatusComments
+

Table 1.13. C++ TR 24733 Implementation Status

SectionDescriptionStatusComments
0 Introduction @@ -2323,7 +2475,7 @@ hypergeometric functions and confluent hypergeometric functions from TR1 are also provided, defined in namespace __gnu_cxx. -

Table 1.13. C++ Special Functions Implementation Status

SectionDescriptionStatusComments
7Macro namesPartialNo diagnostic for inconsistent definitions of +

Table 1.14. C++ Special Functions Implementation Status

SectionDescriptionStatusComments
7Macro namesPartialNo diagnostic for inconsistent definitions of __STDCPP_WANT_MATH_SPEC_FUNCS__
8Mathematical special functionsY 
8.1Additions to header <cmath> synopsisY 
8.1.1associated Laguerre polynomialsY 
8.1.2associated Legendre functionsY 
8.1.3beta functionY 
8.1.4(complete) elliptic integral of the first kindY 
8.1.5(complete) elliptic integral of the second kindY 
8.1.6(complete) elliptic integral of the third kindY 
8.1.7regular modified cylindrical Bessel functionsY 
8.1.8cylindrical Bessel functions (of the first kind)Y 
8.1.9irregular modified cylindrical Bessel functionsY 
8.1.10cylindrical Neumann functionsY 
8.1.11(incomplete) elliptic integral of the first kindY 
8.1.12(incomplete) elliptic integral of the second kindY 
8.1.13(incomplete) elliptic integral of the third kindY 
8.1.14exponential integralY 
8.1.15Hermite polynomialsY 
8.1.16Laguerre polynomialsY 
8.1.17Legendre polynomialsY 
8.1.18Riemann zeta functionY 
8.1.19spherical Bessel functions (of the first kind)Y 
8.1.20spherical associated Legendre functionsY 
8.1.21spherical Neumann functionsY 
8.2Additions to header <math.h>Y 
8.3The header <ctgmath>PartialConflicts with C++ 2011 requirements.
8.4The header <tgmath.h>NConflicts with C++ 2011 requirements.

Implementation Specific Behavior

For behaviour which is specified by the 2011 standard, see C++ 2011 Implementation Specific Behavior. This section documents behaviour which diff --git a/libstdc++-v3/doc/html/manual/using_exceptions.html b/libstdc++-v3/doc/html/manual/using_exceptions.html index 67b4365fbbc8..9b53e3688ae7 100644 --- a/libstdc++-v3/doc/html/manual/using_exceptions.html +++ b/libstdc++-v3/doc/html/manual/using_exceptions.html @@ -366,7 +366,7 @@ GCC Bug 25191: exception_defines.h #defines try/catch .

\ No newline at end of file diff --git a/libstdc++-v3/doc/xml/manual/configure.xml b/libstdc++-v3/doc/xml/manual/configure.xml index cd5f44458a2e..460b994009da 100644 --- a/libstdc++-v3/doc/xml/manual/configure.xml +++ b/libstdc++-v3/doc/xml/manual/configure.xml @@ -438,7 +438,7 @@ - --enable-vtable-verify[default] + --enable-vtable-verify Use -fvtable-verify=std to compile the C++ runtime with instrumentation for vtable verification. All virtual diff --git a/libstdc++-v3/doc/xml/manual/status_cxx2017.xml b/libstdc++-v3/doc/xml/manual/status_cxx2017.xml index 253aa4832aa9..9c13caa084b1 100644 --- a/libstdc++-v3/doc/xml/manual/status_cxx2017.xml +++ b/libstdc++-v3/doc/xml/manual/status_cxx2017.xml @@ -1896,7 +1896,7 @@ since C++14 and the implementation is complete. 28.4 Parallel algorithms - Using PSTL + Uses code from oneDPL 28.5 diff --git a/libstdc++-v3/doc/xml/manual/status_cxx2020.xml b/libstdc++-v3/doc/xml/manual/status_cxx2020.xml index 0e3e4c3de7f2..a1d3843abeff 100644 --- a/libstdc++-v3/doc/xml/manual/status_cxx2020.xml +++ b/libstdc++-v3/doc/xml/manual/status_cxx2020.xml @@ -1453,4 +1453,4501 @@ time zones and UTC are supported since 13.1, and chrono::parse is supported since 14.1. + +The following status table is based on the table of contents of +ISO/IEC 14882:2020. +Some subclauses are not shown in the table where the content is unchanged +since C++17 and the implementation is complete. + + + +C++ 2020 Implementation Status + + + + + + + + + Section + Description + Status + Comments + + + + + + + + 17 + + + Language support library + + + + + 17.1 + General + + + + + + 17.2 + Common definitions + + + + + + 17.2.1 + Header <cstddef> synopsis + Y + + + + + 17.2.2 + Header <cstdlib> synopsis + Y + + + + + 17.2.3 + Null pointers + Y + + + + + 17.2.4 + Sizes, alignments, and offsets + Y + + + + + 17.2.5 + byte type operations + Y + + + + + 17.3 + Implementation properties + + + + + + 17.3.1 + General + + + + + + 17.3.2 + Header <version> synopsis + Y + + + + + 17.3.3 + Header <limits> synopsis + Y + + + + + 17.3.4 + Floating-point type properties + + + + + + + 17.3.4.1 + Type float_round_style + N + + + + + + 17.3.4.2 + Type float_denorm_style + N + + + + + 17.3.5 + Class template numeric_limits + Y + + + + + 17.3.6 + Header <climits> synopsis + Y + + + + + 17.3.7 + Header <cfloat> synopsis + Y + + + + + 17.4 + Integer types + + + + + + 17.4.1 + General + + + + + + 17.4.2 + Header <cstdint> synopsis + Y + + + + + + 17.5 + Startup and termination + Partial + C library dependency for quick_exit, at_quick_exit + + + + 17.6 + Dynamic memory management + Y + + + + 17.7 + Type identification + Y + + + + + 17.8 + Source location + + + + + + 17.8.1 + Header <source_location> synopsis + Y + + + + + 17.8.2 + Class source_location + Y + + + + + 17.9 + Exception handling + Y + + + + + 17.10 + Initializer lists + Y + + + + + 17.11 + Comparisons + + + + + + 17.11.1 + Header <compare> synopsis + Y + + + + + 17.11.2 + Comparison category types + Y + + + + + 17.11.3 + Class template common_comparison_category + Y + + + + + 17.11.4 + Concept three_way_comparable + Y + + + + + 17.11.5 + Result of three-way comparison + Y + + + + + 17.11.6 + Comparison algorithms + Y + + + + + 17.12 + Coroutines + + + + + + 17.12.1 + General + + + + + + 17.12.2 + Header <coroutine> synopsis + Y + + + + + 17.12.3 + Coroutine traits + Y + + + + + 17.12.4 + Class template coroutine_handle + Y + + + + + 17.12.5 + No-op coroutines + Y + + + + + 17.13 + Other runtime support + Y + + + + + + 18 + + + Concepts library + + + + + 18.1 + General + + + + + + 18.2 + Equality preservation + + + + + + 18.3 + Header <concepts> synopsis + Y + + + + + 18.4 + Language-related concepts + + + + + + 18.4.1 + General + + + + + + 18.4.2 + Concept same_as + Y + + + + + 18.4.3 + Concept derived_from + Y + + + + + 18.4.4 + Concept convertible_to + Y + + + + + 18.4.5 + Concept common_reference_with + Y + + + + + 18.4.6 + Concept common_with + Y + + + + + 18.4.7 + Arithmetic concepts + + + + + + 18.4.8 + Concept assignable_from + Y + + + + + 18.4.9 + Concept swappable + Y + + + + + 18.4.10 + Concept destructible + Y + + + + + 18.4.11 + Concept constructible_from + Y + + + + + 18.4.12 + Concept default_initializable + Y + + + + + 18.4.13 + Concept move_constructible + Y + + + + + 18.4.14 + Concept copy_constructible + Y + + + + + 18.5 + Comparison concepts + + + + + + 18.5.1 + General + + + + + + 18.5.2 + Boolean testability + Y + + + + + 18.5.3 + Concept equality_comparable + Y + + + + + 18.5.4 + Concept totally_ordered + Y + + + + + 18.6 + Object concepts + Y + + + + + 18.7 + Callable concepts + + + + + + 18.7.1 + General + + + + + + 18.7.2 + Concept invocable + Y + + + + + 18.7.3 + Concept regular_invocable + Y + + + + + 18.7.4 + Concept predicate + Y + + + + + 18.7.5 + Concept relation + Y + + + + + 18.7.6 + Concept equivalence_relation + Y + + + + + 18.7.7 + Concept strict_weak_order + Y + + + + + + 19 + + + Diagnostics library + + + + + 19.1 + General + + + + + + 19.2 + Exception classes + Y + + + + + 19.3 + Assertions + Y + + + + + 19.4 + Error numbers + Y + + + + + 19.5 + System error support + + + + + + 19.5.1 + General + + + + + + 19.5.2 + Header <system_error> synopsis + Y + + + + + 19.5.3 + Class error_category + Y + + + + + 19.5.4 + Class error_code + Y + + + + + 19.5.5 + Class error_condition + Y + + + + + 19.5.6 + Comparison operator functions + Y + + + + + 19.5.7 + System error hash support + Y + + + + + 19.5.8 + Class system_error + Y + + + + + + 20 + + + General utilities library + + + + + 20.1 + General + + + + + + 20.2 + Utility components + + + + + + 20.2.1 + Header <utility> synopsis + Y + + + + + 20.2.2 + swap + Y + + + + + 20.2.3 + exchange + Y + + + + + 20.2.4 + Forward/move helpers + Y + + + + + 20.2.5 + Function template as_const + Y + + + + + 20.2.6 + Function template declval + Y + + + + + 20.2.7 + Integer comparison functions + Y + + + + + 20.3 + Compile-time integer sequences + Y + + + + + 20.4 + Pairs + Y + + + + + 20.5 + Tuples + Y + + + + + 20.6 + Optional objects + Y + + + + + 20.7 + Variants + Y + + + + + 20.8 + Storage for any type + Y + + + + + 20.9 + Bitsets + Y + + + + + 20.10 + Memory + Y + + + + + 20.11 + Smart pointers + + + + + + 20.11.1 + Class template unique_ptr + Y + + + + + 20.11.2 + Class bad_weak_ptr + Y + + + + + 20.11.3 + Class template shared_ptr + Y + Uses code from boost::shared_ptr. + + + + 20.11.4 + Class template weak_ptr + Y + + + + + 20.11.5 + Class template owner_less + Y + + + + + 20.11.6 + Class template enable_shared_from_this + Y + + + + + 20.11.7 + Smart pointer hash support + Y + + + + + 20.12 + Memory resources + + + + + + 20.12.1 + Header <memory_resource> synopsis + Y + + + + + 20.12.2 + Class memory_resource + Y + + + + + 20.12.3 + Class template polymorphic_allocator + Y + + + + + 20.12.4 + Access to program-wide memory_resource objects + Y + + + + + 20.12.5 + Pool resource classes + Y + + + + + 20.12.6 + Class monotonic_buffer_resource + Y + + + + + 20.13 + Class template scoped_allocator_adaptor + Y + + + + + 20.14 + Function objects + + + + + + 20.14.1 + General + + + + + + 20.14.2 + Header <functional> synopsis + Y + + + + + 20.14.3 + Definitions + + + + + + 20.14.4 + Requirements + + + + + + 20.14.5 + Function template invoke + Y + + + + + 20.14.6 + Class template reference_wrapper + Y + + + + + 20.14.7 + Arithmetic operations + Y + + + + + 20.14.8 + Comparisons + Y + + + + + 20.14.9 + Concept-constrained comparisons + Y + + + + + 20.14.10 + Logical operations + Y + + + + + 20.14.11 + Bitwise operations + Y + + + + + 20.14.12 + Class identity + Y + + + + + 20.14.13 + Function template not_fn + Y + + + + + 20.14.14 + Function template bind_front + Y + + + + + 20.14.15 + Function object binders + Y + + + + + 20.14.16 + Function template mem_fn + Y + + + + + 20.14.17 + Polymorphic function wrappers + + + + + + 20.14.17.1 + General + + + + + + 20.14.17.2 + Class bad_function_call + Y + + + + + 20.14.17.3 + Class template function + Y + + + + + 20.14.18 + Searchers + Y + + + + + 20.15 + Metaprogramming and type traits + + + + + + 20.15.1 + General + + + + + + 20.15.2 + Requirements + Y + + + + + 20.15.3 + Header <type_traits> synopsis + Y + + + + + 20.15.4 + Helper classes + Y + + + + + 20.15.5 + Unary type traits + Y + + + + + 20.15.6 + Type property queries + Y + + + + + 20.15.7 + Relationships between types + Y + + + + + 20.15.8 + Transformations between types + Y + + + + + 20.15.9 + Logical operator traits + Y + + + + + 20.15.10 + Member relationships + Y + + + + + 20.15.11 + Constant evaluation context + Y + + + + + 20.16 + Compile-time rational arithmetic + Y + + + + + 20.17 + Class type_index + Y + + + + + 20.18 + Execution policies + Y + + + + + 20.19 + Primitive numeric conversions + + + + + + 20.19.1 + Header <charconv> synopsis + Y + + + + + 20.19.2 + Primitive numeric output conversion + Y + + Floating-point types up to 64-bit are formatted using + Ryu. + Types with greater precision are formatted using the C library + (sprintf and conditionally + strfromf128). + For powerpc64le-unknown-linux-gnu __sprintfieee128 + must be provided by Glibc. + + + + + 20.19.3 + Primitive numeric input conversion + Y + + Floating-point types up to 64-bit are parsed using + fast_float. + Types with greater precision are parsed using the C library + (strtold). + For powerpc64le-unknown-linux-gnu __strtoieee128 + must be provided by Glibc. + + + + + 20.20 + Formatting + + + + + + 20.20.1 + Header <format> synopsis + Y + + + + + 20.20.2 + Format string + + + + + + 20.20.2.1 + In general + Y + + + + + 20.20.2.2 + Standard format specifiers + Y + + + + + 20.20.3 + Error reporting + Y + + + + + 20.20.4 + Formatting functions + Y + + + + + 20.20.5 + Formatter + Y + + + + + 20.20.5.1 + Formatter requirements + + + + + + 20.20.5.2 + Formatter specializations + Y + + + + + 20.20.5.3 + Class template basic_format_parse_context + Y + + + + + 20.20.5.4 + Class template basic_format_context + Y + + + + + 20.20.6 + Arguments + + + + + + 20.20.6.1 + Class template basic_format_arg + Y + + + + + 20.20.6.2 + Class template format-arg-store + Y + + + + + 20.20.6.3 + Class template basic_format_args + Y + + + + + 20.20.7 + Class format_error + Y + + + + + + 21 + + + Strings library + + + + + 21.1 + General + + + + + + 21.2 + Character traits + Y + + + + + 21.3 + String classes + Y + + + + + 21.4 + String view classes + Y + + + + + + 21.5 + Null-terminated sequence utilities + Partial + C library dependency. + + + + + 22 + + + Containers library + + + + + 22.1 + General + + + + + + 22.2 + Container requirements + Y + + + + + 22.3 + Sequence containers + Y + + + + + 22.4 + Associative containers + Y + + + + + 22.5 + Unordered associative containers + Y + + + + + 22.6 + Container adaptors + Y + + + + + 22.7 + Views + + + + + + 22.7.1 + General + + + + + + 22.7.2 + Header <span> synopsis + Y + + + + + 22.7.3 + Class template span + Y + + + + + + 23 + + + Iterators library + + + + + 23.1 + General + + + + + + 23.2 + Header <iterator> synopsis + Y + + + + + 23.3 + Iterator requirements + + + + + + 23.3.1 + In general + Y + + + + + 23.3.2 + Associated types + Y + + + + + 23.3.3 + Customization points + Y + + + + + 23.3.4 + Iterator concepts + Y + + + + + 23.3.5 + C++17 iterator requirements + Y + + + + + 23.3.6 + Indirect callable requirements + Y + + + + + 23.3.7 + Common algorithm requirements + Y + + + + + 23.4 + Iterator primitives + + + + + + 23.4.1 + General + + + + + + 23.4.2 + Standard iterator tags + Y + + + + + 23.4.3 + Iterator operations + Y + + + + + 23.4.4 + Range iterator operations + Y + + + + + 23.5 + Iterator adaptors + + + + + + 23.5.1 + Reverse iterators + Y + + + + + 23.5.2 + Insert iterators + Y + + + + + 23.5.3 + Move iterators and sentinels + Y + + + + + 23.5.4 + Common iterators + Y + + + + + 23.5.5 + Default sentinel + Y + + + + + 23.5.6 + Counted iterators + Y + + + + + 23.5.7 + Unreachable sentinel + Y + + + + + 23.6 + Stream iterators + Y + + + + + 23.6.1 + General + + + + + + 23.6.2 + Class template istream_iterator + Y + + + + + 23.6.3 + Class template ostream_iterator + Y + + + + + 23.6.4 + Class template istreambuf_iterator + Y + + + + + 23.6.5 + Class template ostreambuf_iterator + Y + + + + + 23.7 + Range access + Y + + + + + + 24 + + + Ranges library + + + + + 24.1 + General + + + + + + 24.2 + Header <ranges> synopsis + Y + + + + + 24.3 + Range access + Y + + + + + 24.4 + Range requirements + + + + + + 24.4.1 + General + + + + + + 24.4.2 + Ranges + Y + + + + + 24.4.3 + Sized ranges + Y + + + + + 24.4.4 + Views + Y + + + + + 24.4.5 + Other range refinements + Y + + + + + 24.5 + Range utilities + + + + + + 24.5.1 + General + + + + + + 24.5.2 + Helper concepts + Y + + + + + 24.5.3 + View interface + Y + + + + + 24.5.4 + Sub-ranges + Y + + + + + 24.5.5 + Dangling iterator handling + Y + + + + + 24.6 + Range factories + + + + + + 24.6.1 + General + + + + + + 24.6.2 + Empty view + Y + + + + + 24.6.3 + Single view + Y + + + + + 24.6.4 + Iota view + Y + + + + + 24.6.5 + Istream view + Y + + + + + 24.7 + Range adaptors + + + + + + 24.7.1 + General + + + + + + 24.7.2 + Range adaptor objects + Y + + + + + 24.7.3 + Semiregular wrapper + Y + + + + + 24.7.4 + All view + Y + + + + + 24.7.5 + Filter view + Y + + + + + 24.7.6 + Transform view + Y + + + + + 24.7.7 + Take view + Y + + + + + 24.7.8 + Take while view + Y + + + + + 24.7.9 + Drop view + Y + + + + + 24.7.10 + Drop while view + Y + + + + + 24.7.11 + Join view + Y + + + + + 24.7.12 + Split view + Y + + + + + 24.7.13 + Counted view + Y + + + + + 24.7.14 + Common view + Y + + + + + 24.7.15 + Reverse view + Y + + + + + 24.7.16 + Elements view + Y + + + + + + 25 + + + Algorithms library + + + + + 25.1 + General + + + + + + 25.2 + Algorithms requirements + Y + + + + + 25.3 + Parallel algorithms + + Uses code from oneDPL + + + + 25.4 + Header <algorithm> synopsis + Y + + + + + 25.5 + Algorithm result types + Y + + + + + 25.6 + Non-modifying sequence operations + + + + + + 25.6.1 + All of + Y + + + + + 25.6.2 + Any of + Y + + + + + 25.6.3 + None of + Y + + + + + 25.6.4 + For each + Y + + + + + 25.6.5 + Find + Y + + + + + 25.6.6 + Find end + Y + + + + + 25.6.7 + Find first + Y + + + + + 25.6.8 + Adjacent find + Y + + + + + 25.6.9 + Count + Y + + + + + 25.6.10 + Mismatch + Y + + + + + 25.6.11 + Equal + Y + + + + + 25.6.12 + Is permutation + Y + + + + + 25.6.13 + Search + Y + + + + + 25.7 + Mutating sequence operations + + + + + + 25.7.1 + Copy + Y + + + + + 25.7.2 + Move + Y + + + + + 25.7.3 + Swap + Y + + + + + 25.7.4 + Transform + Y + + + + + 25.7.5 + Replace + Y + + + + + 25.7.6 + Fill + Y + + + + + 25.7.7 + Generate + Y + + + + + 25.7.8 + Remove + Y + + + + + 25.7.9 + Unique + Y + + + + + 25.7.10 + Reverse + Y + + + + + 25.7.11 + Rotate + Y + + + + + 25.7.12 + Sample + Y + + + + + 25.7.13 + Shuffle + Y + + + + + 25.7.14 + Shift + Y + + + + + 25.8 + Sorting and related operations + + + + + + 25.8.1 + General + Y + + + + + 25.8.2 + Sorting + Y + + + + + 25.8.3 + Nth element + Y + + + + + 25.8.4 + Binary search + Y + + + + + 25.8.5 + Partitions + Y + + + + + 25.8.6 + Merge + Y + + + + + 25.8.7 + Set operations on sorted structures + Y + + + + + 25.8.8 + Heap operations + Y + + + + + 25.8.9 + Minimum and maximum + Y + + + + + 25.8.10 + Bounded value + Y + + + + + 25.8.11 + Lexicographical comparison + Y + + + + + 25.8.12 + Three-way comparison algorithms + Y + + + + + 25.8.13 + Permutation generators + Y + + + + + 25.9 + Header <numeric> synopsis + Y + + + + + 25.10 + Generalized numeric operations + + + + + + 25.10.1 + General + + + + + + 25.10.2 + Definitions + + + + + + 25.10.3 + Accumulate + Y + + + + + 25.10.4 + Reduce + Y + + + + + 25.10.5 + Inner product + Y + + + + + 25.10.6 + Transform reduce + Y + + + + + 25.10.7 + Partial sum + Y + + + + + 25.10.8 + Exclusive scan + Y + + + + + 25.10.9 + Inclusive scan + Y + + + + + 25.10.10 + Transform exclusive scan + Y + + + + + 25.10.11 + Transform inclusive scan + Y + + + + + 25.10.12 + Adjacent difference + Y + + + + + 25.10.13 + Iota + Y + + + + + 25.10.14 + Greatest common divisor + Y + + + + + 25.10.15 + Least common multiple + Y + + + + + 25.10.16 + Midpoint + Y + + + + + 25.11 + Specialized <memory> algorithms + + + + + + 25.11.1 + General + + + + + + 25.11.2 + Special memory concepts + Y + + + + + 25.11.3 + uninitialized_default_construct + Y + + + + + 25.11.4 + uninitialized_value_construct + Y + + + + + 25.11.5 + uninitialized_copy + Y + + + + + 25.11.6 + uninitialized_move + Y + + + + + 25.11.7 + uninitialized_fill + Y + + + + + 25.11.8 + construct_at + Y + + + + + 25.11.9 + destroy + Y + + + + + 25.12 + C library algorithms + Y + + + + + + 26 + + + Numerics library + + + + + + 26.1 + General + + + + + + 26.2 + Numeric type requirements + Y + + + + + 26.3 + The floating-point environment + Y + + + + + 26.4 + Complex numbers + Y + + + + + 26.5 + Bit manipulation + + + + + + 26.5.1 + General + + + + + + 26.5.2 + Header <bit> synopsis + Y + + + + + 26.5.3 + Function template bit_cast + Y + + + + + 26.5.4 + Integral powers of 2 + Y + + + + + 26.5.5 + Rotating + Y + + + + + 26.5.6 + Counting + Y + + + + + 26.5.7 + Endian + Y + + + + + 26.6 + Random number generation + Y + + + + + 26.7 + Numeric arrays + Y + + + + + 26.8 + Mathematical functions for floating-point types + Y + + + + + 26.9 + Numbers + + + + + + 26.9.1 + Header <numbers> synopsis + Y + + + + + 26.9.2 + Mathematical constants + Y + + + + + + 27 + + + Time library + + + + + 27.1 + General + + + + + + 27.2 + Header <chrono> synopsis + Y + + + + + 27.3 + Cpp17Clock requirements + Y + + + + + 27.4 + Time-related traits + + + + + + 27.4.1 + treat_as_floating_point + Y + + + + + 27.4.2 + duration_values + Y + + + + + 27.4.3 + Specializations of common_type + Y + + + + + 27.4.4 + Class template is_clock + Y + + + + + 27.5 + Class template duration + + + + + + 27.5.1 + General + Y + + + + + 27.5.2 + Constructors + Y + + + + + 27.5.3 + Observer + Y + + + + + 27.5.4 + Arithmetic + Y + + + + + 27.5.5 + Special values + Y + + + + + 27.5.6 + Non-member arithmetic + Y + + + + + 27.5.7 + Comparisons + Y + + + + + 27.5.8 + Conversions + Y + + + + + 27.5.9 + Suffixes for duration literals + Y + + + + + 27.5.10 + Algorithms + Y + + + + + 27.5.11 + I/O + Y + + + + + 27.6 + Class template time_point + Y + + + + + 27.7 + Clocks + + + + + + 27.7.1 + General + Y + + + + + 27.7.2 + Class system_clock + Y + + + + + 27.7.3 + Class utc_clock + Y + + + + + 27.7.4 + Class tai_clock + Y + + + + + 27.7.5 + Class gps_clock + Y + + + + + 27.7.6 + Type file_clock + Y + + + + + 27.7.7 + Class steady_clock + Y + + + + + 27.7.8 + Class high_resolution_clock + Y + + + + + 27.7.9 + Local time + Y + + + + + 27.7.10 + time_point conversions + Y + + + + + 27.8 + The civil calendar + + + + + + 27.8.1 + In general + + + + + + 27.8.2 + Class last_spec + Y + + + + + 27.8.3 + Class day + Y + + + + + 27.8.4 + Class month + Y + + + + + 27.8.5 + Class year + Y + + + + + 27.8.6 + Class weekday + Y + + + + + 27.8.7 + Class weekday_indexed + Y + + + + + 27.8.8 + Class weekday_last + Y + + + + + 27.8.9 + Class month_day + Y + + + + + 27.8.10 + Class month_day_last + Y + + + + + 27.8.11 + Class month_weekday + Y + + + + + 27.8.12 + Class month_weekday_last + Y + + + + + 27.8.13 + Class year_month + Y + + + + + 27.8.14 + Class year_month_day + Y + + + + + 27.8.15 + Class year_month_day_last + Y + + + + + 27.8.16 + Class year_month_weekday + Y + + + + + 27.8.17 + Class year_month_weekday_last + Y + + + + + 27.9 + Class template hh_mm_ss + Y + + + + + 27.10 + 12/24 hours functions + Y + + + + + 27.11 + Time zones + + + + + + 27.11.1 + In general + + + + + + 27.11.2 + Time zone database + Y + + + + + 27.11.3 + Exception classes + Y + + + + + 27.11.4 + Information classes + Y + + + + + 27.11.5 + Class time_zone + Y + + + + + 27.11.6 + Class template zoned_traits + Y + + + + + 27.11.7 + Class template zoned_time + Y + + + + + 27.11.8 + Class leap_second + Y + + + + + 27.11.9 + Class time_zone_link + Y + + + + + 27.12 + Formatting + Y + + + + + 27.13 + Parsing + Y + + + + + 27.14 + Header <ctime> synopsis + Y + + + + + + 28 + + + Localization library + + + + + 28.1 + General + + + + + + 28.2 + Header <locale> synopsis + Y + + + + + 28.3 + Locales + + + + + + 28.3.1 + Class locale + Y + + + + + 28.3.2 + locale globals + Y + + + + + 28.3.3 + Convenience interfaces + + + + + + 28.3.3.1 + Character classification + Y + + + + + 28.3.3.2 + Character conversions + Y + + + + + 28.4 + Standard locale categories + + + + + + 28.4.1 + General + + + + + + 28.4.2 + The ctype category + Y + + + + + 28.4.3 + The numeric category + Y + + + + + 28.4.4 + The numeric punctuation facet + Y + + + + + 28.4.5 + The collate category + Y + + + + + 28.4.6 + The time category + Y + + + + + 28.4.7 + The monetary category + Y + + + + + 28.4.8 + The message retrieval category + Y + + + + + 28.5 + C library locales + Y + + + + + + 29 + + + Input/output library + + + + + + + 29.1 + General + Y + + + + + 29.2 + Iostreams requirements + + + + + + 29.2.1 + Imbue limitations + Y + + + + + 29.2.2 + Positioning type limitations + Y + + + + + + 29.2.3 + Thread safety + Partial + + + + + 29.3 + Forward declarations + Y + + + + + 29.4 + Standard iostream objects + Y + + + + + 29.5 + Iostreams base classes + Y + + + + + 29.6 + Stream buffers + Y + + + + + 29.7 + Formatting and manipulators + Y + + + + + 29.8 + String-based streams + Y + + + + + 29.9 + File-based streams + Y + + + + + 29.10 + Synchronized output streams + + + + + + 29.10.1 + Header <syncstream> synopsis + Y + + + + + 29.10.2 + Class template basic_syncbuf + Y + + + + + 29.10.3 + Class template basic_osyncstream + Y + + + + + 29.11 + File systems + + + + + + 29.11.1 + General + + + + + + 29.11.2 + Conformance + Y + + + + + 29.11.3 + Requirements + Y + + + + + 29.11.4 + Header <filesystem> synopsis + Y + + + + + 29.11.5 + Error reporting + Y + + + + + 29.11.6 + Class path + Y + + + + + 29.11.7 + Class filesystem_error + Y + + + + + 29.11.8 + Enumerations + + + + + + 29.11.8.1 + Enum path::format + Y + + + + + 29.11.8.2 + Enum class file_type + Y + + + + + 29.11.8.3 + Enum class copy_options + Y + + + + + 29.11.8.4 + Enum class perms + Y + + + + + 29.11.8.5 + Enum class perm_options + Y + + + + + 29.11.8.6 + Enum class directory_options + Y + + + + + 29.11.9 + Class file_status + Y + + + + + 29.11.10 + Class directory_entry + Y + + + + + 29.11.11 + Class directory_iterator + Y + + + + + 29.11.12 + Class recursive_directory_iterator + Y + + + + + 29.11.13 + Filesystem operation functions + Y + + + + + 29.12 + C library files + + + + + + 29.12.1 + Header <cstdio> synopsis + Y + + + + + 29.12.2 + Header <cinttypes> synopsis + Y + + + + + + 30 + + + Regular expressions library + + + + + + 30.1 + General + Y + + + + + 30.2 + Requirements + Y + + + + + 30.3 + Header <regex> synopsis + Y + + + + + 30.4 + Namespace std::regex_constants + Y + + + + + 30.5 + Class regex_error + Y + + + + + + 30.6 + Class template regex_traits + Partial + transform_primary is not correctly implemented + + + + 30.7 + Class template basic_regex + Y + + + + + 30.8 + Class template sub_match + Y + + + + + 30.9 + Class template match_results + Y + + + + + 30.10 + Regular expression algorithms + Y + + + + + 30.11 + Regular expression iterators + Y + + + + + 30.12 + Modified ECMAScript regular expression grammar + Y + + + + + + 31 + + + Atomics library + + + + + + 31.1 + General + Y + + + + + 31.2 + Header <atomic> synopsis + Y + + + + + 31.3 + Type aliases + Y + + + + + 31.4 + Order and consistency + Y + + + + + 31.5 + Lock-free property + Y + + + + + + 31.6 + Waiting and notifying + Partial + Waiting and notifying is not supported for volatile objects. + + + + 31.7 + Class template atomic_ref + + + + + + 31.7.1 + General + Y + + + + + + 31.7.2 + Operations + Partial + + volatile-qualified overloads for wait, + notify_one, and notify_all are not provided. + + + + + 31.7.3 + Specializations for integral types + Y + + + + + 31.7.4 + Specializations for floating-point types + Y + + + + + 31.7.5 + Partial specialization for pointers + Y + + + + + 31.8 + Class template atomic + + + + + + 31.8.1 + General + Y + + + + + + 31.8.2 + Operations on atomic types + Partial + Waiting and notifying is not supported for volatile objects. + + + + 31.8.3 + Specializations for integers + Y + + + + + 31.8.4 + Specializations for floating-point types + Y + + + + + 31.8.5 + Partial specialization for pointers + Y + + + + + 31.8.6 + Member operators common to integers and pointers to objects + Y + + + + + 31.8.7 + Partial specializations for smart pointers + + + + + + 31.8.7.1 + General + Y + + + + + 31.8.7.2 + Partial specialization for shared_ptr + Y + + + + + 31.8.7.3 + Partial specialization for weak_ptr + Y + + + + + 31.9 + Non-member functions + Y + + + + + 31.10 + Flag type and operations + Y + + + + + 31.11 + Fences + Y + + + + + + 32 + + + Threads library + + + + + 32.1 + General + Y + + + + + 32.2 + Requirements + Y + + + + + 32.3 + Stop tokens + + + + + + 32.3.1 + Introduction + Y + + + + + 32.3.2 + Header <stop_token> synopsis + Y + + + + + 32.3.3 + Class stop_token + Y + + + + + 32.3.4 + Class stop_source + Y + + + + + 32.3.5 + Class template stop_callback + Y + + + + + 32.4 + Threads + + + + + + 32.4.1 + General + + + + + + 32.4.2 + Header <thread> synopsis + Y + + + + + + 32.4.3 + Class thread + Partial + thread::id comparisons not well-defined + + + + 32.4.4 + Class jthread + Y + + + + + 32.4.5 + Namespace this_thread + Y + + + + + 32.5 + Mutual exclusion + + + + + + 32.5.1 + General + + + + + + 32.5.2 + Header <mutex> synopsis + + + + + + 32.5.3 + Header <shared_mutex> synopsis + + + + + + 32.5.4 + Mutex requirements + + + + + + 32.5.4.1 + In general + + + + + + 32.5.4.2 + Mutex types + Y + + + + + 32.5.4.3 + Timed mutex types + Y + + + + + 32.5.4.4 + Shared mutex types + Y + + + + + 32.5.4.5 + Shared timed mutex types + Y + + + + + 32.5.5 + Locks + Y + + + + + 32.5.6 + Generic locking algorithms + Y + + + + + 32.5.7 + Call once + + + + + + 32.5.7.1 + Struct once_flag + Y + + + + + + 32.5.7.2 + Function call_once + Partial + Exception support is broken. + See PR + 66146. + + + + + 32.6 + Condition variables + Y + + + + + 32.7 + Semaphore + Y + + + + + 32.7.1 + General + + + + + + 32.7.2 + Header <semaphore> synopsis + Y + + + + + 32.7.3 + Class template counting_semaphore + Y + + + + + 32.8 + Coordination types + + + + + + 32.8.1 + General + + + + + + 32.8.2 + Latches + + + + + + 32.8.2.1 + General + + + + + + 32.8.2.2 + Header <latch> synopsis + Y + + + + + 32.8.2.3 + Class latch + Y + + + + + 32.8.3 + Barriers + + + + + + 32.8.3.1 + General + + + + + + 32.8.3.2 + Header <barrier> synopsis + Y + + + + + 32.8.3.3 + Class template barrier + Y + + + + + 32.9 + Futures + Y + + + + + + Appendix D + + + Compatibility features + + + + + D.10 + C headers + + + + + + D.10.1 + General + Y + + + + + D.10.2 + Header <complex.h> synopsis + Y + + + + + D.10.3 + Header <iso646.h> synopsis + Y + + + + + D.10.4 + Header <stdalign.h> synopsis + Y + + + + + D.10.5 + Header <stdbool.h> synopsis + Y + + + + + D.10.6 + Header <tgmath.h> synopsis + Y + + + + + D.10.7 + Other C headers + Y + + + + + D.12 + Relational operators + Y + + + + + D.13 + char* streams + Y + + + + + D.13.1 + Header <strstream> synopsis + Y + + + + + D.13.2 + Class strstreambuf + Y + + + + + D.13.3 + Class istrstream + Y + + + + + D.13.4 + Class ostrstream + Y + + + + + D.13.5 + Class strstream + Y + + + + + D.14 + Deprecated type traits + Y + + + + + D.15 + Tuple + Y + + + + + D.16 + Variant + Y + + + + + D.17 + Deprecated iterator class template + Y + + + + + D.18 + Deprecated move_iterator access + Y + + + + + D.19 + Deprecated shared_ptr atomic access + Y + + + + + D.20 + Deprecated basic_string capacity + Y + + + + + D.21 + Deprecated standard code conversion facets + + + + + + D.21.1 + General + Y + + + + + D.21.2 + Header <codecvt> synopsis + Y + + + + + D.21.3 + Requirements + Y + + + + + D.22 + Deprecated convenience conversion interfaces + + + + + + D.22.1 + General + Y + + + + + D.22.2 + Class template wstring_convert + Y + + + + + D.22.3 + Class template wbuffer_convert + Y + + + + + D.23 + Deprecated locale category facets + Y + + + + + D.24 + Deprecated filesystem path factory functions + Y + + + + + D.25 + Deprecated atomic operations + + + + + + D.25.1 + General + Y + + + + + D.25.2 + Volatile access + Y + + + + + D.25.3 + Non-member functions + Y + + + + + D.25.4 + Operations on atomic types + Y + + + + + D.25.5 + Flag type and operations + Y + + + + + +
+ +
Implementation Specific Behavior + + For behaviour which is also specified by previous standards, + see C++ 1998/2003 Implementation + Specific Behavior, C++ + 2011 Implementation Specific Behavior, and + C++ 2017 Implementation Specific + Behavior. This section only documents behaviour which is new in + the 2020 standard. + + + + 16.4.2.4 [compliance] The implementation is + freestanding if the -ffreestanding compiler flag is used, + and hosted otherwise. + + + + 16.4.2.4 [compliance] + The support for always lock-free integral atomic types and presence of + atomic_signed_lock_free and + atomic_unsigned_lock_free type aliases depends on the + target. + + + + 27.5.11 [time.duration.io] + The "μs" ("\u00b5\u0073") is used + for std::micro Period::type if the macro + _GLIBCXX_USE_ALT_MICROSECONDS_SUFFIX is defined to a value + other than zero before inclusion of the chrono header, + "us" is used otherwise. + + + + 29.8.2.2 [stringbuf.cons] Sequence pointers are + initialized to null pointers by the + basic_stringbuf(ios_base::openmode) constructor. + + + + 31.7.1 [atomics.ref.generic.general], + 31.7.3 [atomics.ref.int], + 31.7.4 [atomics.ref.float], + 31.7.5 [atomics.ref.pointer] + The values of is_always_lock_free members depend on the + target and cannot be listed here. + + + + 31.7.1 [atomics.ref.generic.general] + If sizeof(T) is equal to either 1, + 2, 4, 8, or 16, + then the value of required_alignment member is equal to + the maximum of alignof(T) and sizeof(T). + Otherwise required_alignment value is alignof(T). + + + + 31.7.3 [atomics.ref.int] + The value of required_alignment member is equal to the + maximum of alignof(value_type) and + sizeof(value_type). + + + + 31.7.4 [atomics.ref.float], + 31.7.5 [atomics.ref.pointer] + The value of required_alignment member is equal to + alignof(value_type). + + + + 32.7.3 [thread.sema.cnt] The value of default + argument for the least_max_value parameter depends on the + target operating system and platform, however the value of + counting_semaphore<>::max() is greater than or equal + to numeric_limits<int>::max(). + + +
+ diff --git a/libstdc++-v3/doc/xml/manual/using_exceptions.xml b/libstdc++-v3/doc/xml/manual/using_exceptions.xml index 784c90c4a29f..c46cff201f17 100644 --- a/libstdc++-v3/doc/xml/manual/using_exceptions.xml +++ b/libstdc++-v3/doc/xml/manual/using_exceptions.xml @@ -622,7 +622,7 @@ is called. <link xmlns:xlink="http://www.w3.org/1999/xlink" - xlink:href="https://sourceware.org/glibc/manual/latest/html_mono/libc.html#Tunables"> + xlink:href="https://sourceware.org/glibc/manual/latest/html_node/Tunables.html"> Tunables, The GNU C Library </link> diff --git a/libstdc++-v3/include/Makefile.am b/libstdc++-v3/include/Makefile.am index 0b0cbe2d3faf..ae7a7ca9073a 100644 --- a/libstdc++-v3/include/Makefile.am +++ b/libstdc++-v3/include/Makefile.am @@ -1420,11 +1420,11 @@ ${host_builddir}/c++config.h: ${CONFIG_HEADER} \ -e "$$verbose_assert" \ < ${glibcxx_srcdir}/include/bits/c++config > $@ ;\ sed -e 's/HAVE_/_GLIBCXX_HAVE_/g' \ - -e 's/PACKAGE/_GLIBCXX_PACKAGE/g' \ - -e 's/VERSION/_GLIBCXX_VERSION/g' \ + -e '/PACKAGE/s,^,// ,' \ + -e '/PACKAGE/!s/VERSION/_GLIBCXX_VERSION/g' \ -e 's/WORDS_/_GLIBCXX_WORDS_/g' \ -e 's/LT_OBJDIR/_GLIBCXX_LT_OBJDIR/g' \ - -e 's/STDC_HEADERS/_GLIBCXX_STDC_HEADERS/g' \ + -e 's,^#.*STDC_HEADERS,// &,' \ -e 's/_DARWIN_USE_64_BIT_INODE/_GLIBCXX_DARWIN_USE_64_BIT_INODE/g' \ -e 's/_FILE_OFFSET_BITS/_GLIBCXX_FILE_OFFSET_BITS/g' \ -e 's/_LARGE_FILES/_GLIBCXX_LARGE_FILES/g' \ diff --git a/libstdc++-v3/include/Makefile.in b/libstdc++-v3/include/Makefile.in index e3a6d5f13905..f07e2326816b 100644 --- a/libstdc++-v3/include/Makefile.in +++ b/libstdc++-v3/include/Makefile.in @@ -91,8 +91,10 @@ target_triplet = @target@ subdir = include ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/enable.m4 \ $(top_srcdir)/../config/futex.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/hwcaps.m4 \ $(top_srcdir)/../config/iconv.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ @@ -222,6 +224,7 @@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LONG_DOUBLE_128_FLAGS = @LONG_DOUBLE_128_FLAGS@ LONG_DOUBLE_ALT128_COMPAT_FLAGS = @LONG_DOUBLE_ALT128_COMPAT_FLAGS@ @@ -1897,11 +1900,11 @@ ${host_builddir}/c++config.h: ${CONFIG_HEADER} \ -e "$$verbose_assert" \ < ${glibcxx_srcdir}/include/bits/c++config > $@ ;\ sed -e 's/HAVE_/_GLIBCXX_HAVE_/g' \ - -e 's/PACKAGE/_GLIBCXX_PACKAGE/g' \ - -e 's/VERSION/_GLIBCXX_VERSION/g' \ + -e '/PACKAGE/s,^,// ,' \ + -e '/PACKAGE/!s/VERSION/_GLIBCXX_VERSION/g' \ -e 's/WORDS_/_GLIBCXX_WORDS_/g' \ -e 's/LT_OBJDIR/_GLIBCXX_LT_OBJDIR/g' \ - -e 's/STDC_HEADERS/_GLIBCXX_STDC_HEADERS/g' \ + -e 's,^#.*STDC_HEADERS,// &,' \ -e 's/_DARWIN_USE_64_BIT_INODE/_GLIBCXX_DARWIN_USE_64_BIT_INODE/g' \ -e 's/_FILE_OFFSET_BITS/_GLIBCXX_FILE_OFFSET_BITS/g' \ -e 's/_LARGE_FILES/_GLIBCXX_LARGE_FILES/g' \ diff --git a/libstdc++-v3/include/bits/basic_string.h b/libstdc++-v3/include/bits/basic_string.h index 708104984d2d..8ae6569f5016 100644 --- a/libstdc++-v3/include/bits/basic_string.h +++ b/libstdc++-v3/include/bits/basic_string.h @@ -411,7 +411,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11 if (__pos > this->size()) __throw_out_of_range_fmt(__N("%s: __pos (which is %zu) > " "this->size() (which is %zu)"), - __s, __pos, this->size()); + __s, (size_t)__pos, (size_t)this->size()); return __pos; } diff --git a/libstdc++-v3/include/bits/chrono_io.h b/libstdc++-v3/include/bits/chrono_io.h index 809d795cbf2b..690c10d79ce5 100644 --- a/libstdc++-v3/include/bits/chrono_io.h +++ b/libstdc++-v3/include/bits/chrono_io.h @@ -37,7 +37,6 @@ #if __cplusplus >= 202002L #include // ostringstream -#include // setw, setfill #include #include // from_chars #include // __sso_string @@ -464,7 +463,7 @@ namespace __format { _M_day = __d; __parts -= _ChronoParts::_Day; - _M_weekday_index = ((unsigned)__d + 6u) % 7u; + _M_weekday_index = ((unsigned)__d + 6u) / 7u; __parts -= _ChronoParts::_WeekdayIndex; return __parts; } @@ -560,282 +559,281 @@ namespace __format __formatter_chrono(_ChronoSpec<_CharT> __spec) noexcept : _M_spec(__spec) { } + + constexpr typename basic_format_parse_context<_CharT>::iterator + _M_parse(basic_format_parse_context<_CharT>& __pc, _ChronoParts __parts, + const _ChronoSpec<_CharT>& __def) + { + auto __first = __pc.begin(); + auto __last = __pc.end(); - template - constexpr typename _ParseContext::iterator - _M_parse(_ParseContext& __pc, _ChronoParts __parts, - const _ChronoSpec<_CharT>& __def) - { - auto __first = __pc.begin(); - auto __last = __pc.end(); - - _ChronoSpec<_CharT> __spec = __def; - - auto __finalize = [this, &__spec, &__def] { - using enum _ChronoParts; - _ChronoParts __checked - = __spec._M_debug ? _YearMonthDay|_IndexedWeekday - : _Month|_Weekday; - // n.b. for calendar types __def._M_needed contains only parts - // copied from the input, remaining ones are computed, and thus ok - __spec._M_needs_ok_check - = __spec._M_needs(__def._M_needed & __checked); - _M_spec = __spec; - }; - - auto __finished = [&] { - if (__first == __last || *__first == '}') - { - __finalize(); - return true; - } - return false; - }; - - if (__finished()) - return __first; - - __first = __spec._M_parse_fill_and_align(__first, __last); - if (__finished()) - return __first; + _ChronoSpec<_CharT> __spec = __def; - __first = __spec._M_parse_width(__first, __last, __pc); - if (__finished()) - return __first; + auto __finalize = [this, &__spec, &__def] { + using enum _ChronoParts; + _ChronoParts __checked + = __spec._M_debug ? _YearMonthDay|_IndexedWeekday + : _Month|_Weekday; + // n.b. for calendar types __def._M_needed contains only parts + // copied from the input, remaining ones are computed, and thus ok + __spec._M_needs_ok_check + = __spec._M_needs(__def._M_needed & __checked); + _M_spec = __spec; + }; - if (*__first == '.') + auto __finished = [&] { + if (__first == __last || *__first == '}') { - if ((__parts & _ChronoParts::_EpochUnits) == 0 - || !__spec._M_floating_point_rep) - __throw_format_error("format error: invalid precision for duration"); - - // Precision is allowed, but value is ignored. - __first = _Spec<_CharT>()._M_parse_precision(__first, __last, __pc); - // Still inditate that there was user supplied precision. - __spec._M_prec_kind = _WP_value; - if (__finished()) - return __first; + __finalize(); + return true; } + return false; + }; - __spec._M_localized = false; - __first = __spec._M_parse_locale(__first, __last); - if (__finished()) - return __first; + if (__finished()) + return __first; + + __first = __spec._M_parse_fill_and_align(__first, __last); + if (__finished()) + return __first; - // Everything up to the end of the string or the first '}' is a - // chrono-specs string. Check it is valid. + __first = __spec._M_parse_width(__first, __last, __pc); + if (__finished()) + return __first; + + if (*__first == '.') { - __string_view __str(__first, __last - __first); - auto __end = __str.find('}'); - if (__end != __str.npos) - { - __str.remove_suffix(__str.length() - __end); - __last = __first + __end; - } - if (__str.find('{') != __str.npos) - __throw_format_error("chrono format error: '{' in chrono-specs"); + if ((__parts & _ChronoParts::_EpochUnits) == 0 + || !__spec._M_floating_point_rep) + __throw_format_error("format error: invalid precision for duration"); + + // Precision is allowed, but value is ignored. + __first = _Spec<_CharT>()._M_parse_precision(__first, __last, __pc); + // Still inditate that there was user supplied precision. + __spec._M_prec_kind = _WP_value; + if (__finished()) + return __first; } - // Parse chrono-specs in [first,last), checking each conversion-spec - // against __parts (so fail for %Y if no year in parts). - // Save range in __spec._M_chrono_specs. - __spec._M_debug = false; - __spec._M_locale_specific = false; - __spec._M_needed = _ChronoParts::_None; - __spec._M_chrono_specs = __string_view(); - - const auto __chrono_specs = __first++; // Skip leading '%' - if (*__chrono_specs != '%') - __throw_format_error("chrono format error: no '%' at start of " - "chrono-specs"); + __spec._M_localized = false; + __first = __spec._M_parse_locale(__first, __last); + if (__finished()) + return __first; - _CharT __mod{}; - bool __conv = true; - while (__first != __last) + // Everything up to the end of the string or the first '}' is a + // chrono-specs string. Check it is valid. + { + __string_view __str(__first, __last - __first); + auto __end = __str.find('}'); + if (__end != __str.npos) { - enum _Mods { _Mod_none, _Mod_E, _Mod_O, _Mod_E_O }; - _Mods __allowed_mods = _Mod_none; + __str.remove_suffix(__str.length() - __end); + __last = __first + __end; + } + if (__str.find('{') != __str.npos) + __throw_format_error("chrono format error: '{' in chrono-specs"); + } - _ChronoParts __needed = _ChronoParts::_None; - bool __locale_specific = false; + // Parse chrono-specs in [first,last), checking each conversion-spec + // against __parts (so fail for %Y if no year in parts). + // Save range in __spec._M_chrono_specs. + __spec._M_debug = false; + __spec._M_locale_specific = false; + __spec._M_needed = _ChronoParts::_None; + __spec._M_chrono_specs = __string_view(); + + const auto __chrono_specs = __first++; // Skip leading '%' + if (*__chrono_specs != '%') + __throw_format_error("chrono format error: no '%' at start of " + "chrono-specs"); + + _CharT __mod{}; + bool __conv = true; + while (__first != __last) + { + enum _Mods { _Mod_none, _Mod_E, _Mod_O, _Mod_E_O }; + _Mods __allowed_mods = _Mod_none; - _CharT __c = *__first++; - switch (__c) - { - using enum _ChronoParts; - case 'a': - case 'A': - __needed = _Weekday; - __locale_specific = true; - break; - case 'b': - case 'h': - case 'B': - __needed = _Month; - __locale_specific = true; - break; - case 'c': - __needed = _Date|_HoursMinutesSeconds; - __allowed_mods = _Mod_E; - __locale_specific = true; - break; - case 'C': - __needed = _Year; - __allowed_mods = _Mod_E; - break; - case 'd': - case 'e': - __needed = _Day; - __allowed_mods = _Mod_O; - break; - case 'D': - case 'F': - __needed = _YearMonthDay; - break; - case 'g': - case 'G': - __needed = _LocalDays|_Weekday; - break; - case 'H': - case 'I': - __needed = _HoursMinutesSeconds; - __allowed_mods = _Mod_O; - break; - case 'j': - __needed = __parts & _DayOfYear; - // If we do not know day-of-year then we must have a duration, - // which is to be formatted as decimal number of days. - if (__needed == _None) - __needed = _HoursMinutesSeconds; - break; - case 'm': - __needed = _Month; - __allowed_mods = _Mod_O; - break; - case 'M': - __needed = _HoursMinutesSeconds; - __allowed_mods = _Mod_O; - break; - case 'p': - case 'r': - __locale_specific = true; - [[fallthrough]]; - case 'R': - __needed = _HoursMinutesSeconds; - break; - case 'T': - __needed = _TimeOfDay; - break; - case 'q': - __needed = _UnitSuffix; - break; - case 'Q': - __needed = _EpochUnits; - break; - case 'S': - __needed = _TimeOfDay; - __allowed_mods = _Mod_O; - break; - case 'u': - case 'w': - __needed = _Weekday; - __allowed_mods = _Mod_O; - break; - case 'U': - case 'V': - case 'W': - __needed = _LocalDays|_Year|_DayOfYear|_Weekday; - __allowed_mods = _Mod_O; - break; - case 'x': - __needed = _Date; - __locale_specific = true; - __allowed_mods = _Mod_E; - break; - case 'X': - __needed = _HoursMinutesSeconds; - __locale_specific = true; - __allowed_mods = _Mod_E; - break; - case 'y': - __needed = _Year; - __allowed_mods = _Mod_E_O; - break; - case 'Y': - __needed = _Year; - __allowed_mods = _Mod_E; - break; - case 'z': - __needed = _ZoneOffset; - __allowed_mods = _Mod_E_O; - break; - case 'Z': - __needed = _ZoneAbbrev; - break; - case 'n': - case 't': - case '%': - break; - case 'O': - case 'E': - if (__mod) [[unlikely]] - { - __allowed_mods = _Mod_none; - break; - } - __mod = __c; - continue; - default: - __throw_format_error("chrono format error: invalid " - " specifier in chrono-specs"); - } + _ChronoParts __needed = _ChronoParts::_None; + bool __locale_specific = false; - if ((__mod == 'E' && !(__allowed_mods & _Mod_E)) - || (__mod == 'O' && !(__allowed_mods & _Mod_O))) - __throw_format_error("chrono format error: invalid " - " modifier in chrono-specs"); - if (__mod && __c != 'z') + _CharT __c = *__first++; + switch (__c) + { + using enum _ChronoParts; + case 'a': + case 'A': + __needed = _Weekday; __locale_specific = true; - __mod = _CharT(); - - // localized formats do not include subseconds - if (__locale_specific) - __needed -= _ChronoParts::_Subseconds; - - if ((__parts & __needed) != __needed) - __throw_format_error("chrono format error: format argument " - "does not contain the information " - "required by the chrono-specs"); - __spec._M_needed |= __needed; - __spec._M_locale_specific |= __locale_specific; - - // Scan for next '%', ignoring literal-chars before it. - size_t __pos = __string_view(__first, __last - __first).find('%'); - if (__pos == 0) - ++__first; - else - { - if (__pos == __string_view::npos) - { - __first = __last; - __conv = false; - } - else - __first += __pos + 1; - } + break; + case 'b': + case 'h': + case 'B': + __needed = _Month; + __locale_specific = true; + break; + case 'c': + __needed = _Date|_HoursMinutesSeconds; + __allowed_mods = _Mod_E; + __locale_specific = true; + break; + case 'C': + __needed = _Year; + __allowed_mods = _Mod_E; + break; + case 'd': + case 'e': + __needed = _Day; + __allowed_mods = _Mod_O; + break; + case 'D': + case 'F': + __needed = _YearMonthDay; + break; + case 'g': + case 'G': + case 'V': + __needed = _LocalDays|_Year|_DayOfYear|_Weekday; + break; + case 'H': + case 'I': + __needed = _HoursMinutesSeconds; + __allowed_mods = _Mod_O; + break; + case 'j': + __needed = __parts & _DayOfYear; + // If we do not know day-of-year then we must have a duration, + // which is to be formatted as decimal number of days. + if (__needed == _None) + __needed = _HoursMinutesSeconds; + break; + case 'm': + __needed = _Month; + __allowed_mods = _Mod_O; + break; + case 'M': + __needed = _HoursMinutesSeconds; + __allowed_mods = _Mod_O; + break; + case 'p': + case 'r': + __locale_specific = true; + [[fallthrough]]; + case 'R': + __needed = _HoursMinutesSeconds; + break; + case 'T': + __needed = _TimeOfDay; + break; + case 'q': + __needed = _UnitSuffix; + break; + case 'Q': + __needed = _EpochUnits; + break; + case 'S': + __needed = _TimeOfDay; + __allowed_mods = _Mod_O; + break; + case 'u': + case 'w': + __needed = _Weekday; + __allowed_mods = _Mod_O; + break; + case 'U': + case 'W': + __needed = _DayOfYear|_Weekday; + __allowed_mods = _Mod_O; + break; + case 'x': + __needed = _Date; + __locale_specific = true; + __allowed_mods = _Mod_E; + break; + case 'X': + __needed = _HoursMinutesSeconds; + __locale_specific = true; + __allowed_mods = _Mod_E; + break; + case 'y': + __needed = _Year; + __allowed_mods = _Mod_E_O; + break; + case 'Y': + __needed = _Year; + __allowed_mods = _Mod_E; + break; + case 'z': + __needed = _ZoneOffset; + __allowed_mods = _Mod_E_O; + break; + case 'Z': + __needed = _ZoneAbbrev; + break; + case 'n': + case 't': + case '%': + break; + case 'O': + case 'E': + if (__mod) [[unlikely]] + { + __allowed_mods = _Mod_none; + break; + } + __mod = __c; + continue; + default: + __throw_format_error("chrono format error: invalid specifier " + "in chrono-specs"); } - // Check for a '%' conversion-spec without a type. - if (__conv || __mod != _CharT()) - __throw_format_error("chrono format error: unescaped '%' in " - "chrono-specs"); + if ((__mod == 'E' && !(__allowed_mods & _Mod_E)) + || (__mod == 'O' && !(__allowed_mods & _Mod_O))) + __throw_format_error("chrono format error: invalid modifier " + "in chrono-specs"); + if (__mod && __c != 'z') + __locale_specific = true; + __mod = _CharT(); + + // localized formats do not include subseconds + if (__locale_specific) + __needed -= _ChronoParts::_Subseconds; + + if ((__parts & __needed) != __needed) + __throw_format_error("chrono format error: format argument does " + "not contain the information required by the " + "chrono-specs"); + __spec._M_needed |= __needed; + __spec._M_locale_specific |= __locale_specific; + + // Scan for next '%', ignoring literal-chars before it. + size_t __pos = __string_view(__first, __last - __first).find('%'); + if (__pos == 0) + ++__first; + else + { + if (__pos == __string_view::npos) + { + __first = __last; + __conv = false; + } + else + __first += __pos + 1; + } + } + + // Check for a '%' conversion-spec without a type. + if (__conv || __mod != _CharT()) + __throw_format_error("chrono format error: unescaped '%' in " + "chrono-specs"); - __spec._M_chrono_specs - = __string_view(__chrono_specs, __first - __chrono_specs); + __spec._M_chrono_specs + = __string_view(__chrono_specs, __first - __chrono_specs); - __finalize(); - return __first; - } + __finalize(); + return __first; + } // pre: !_M_spec._M_chrono_specs.empty() template @@ -870,7 +868,6 @@ namespace __format return __sink._M_finish(_M_spec._M_align, _M_spec._M_fill); } - _ChronoSpec<_CharT> _M_spec; protected: @@ -1148,7 +1145,8 @@ namespace __format break; case 'g': case 'G': - __out = _M_g_G(__t, std::move(__out), __c == 'G'); + case 'V': + __out = _M_g_G_V(__t, std::move(__out), __c); break; case 'H': case 'I': @@ -1190,9 +1188,8 @@ namespace __format __out = _M_u_w(__t._M_weekday, std::move(__out), __c); break; case 'U': - case 'V': case 'W': - __out = _M_U_V_W(__t, std::move(__out), __c); + __out = _M_U_W(__t, std::move(__out), __c); break; case 'z': __out = _M_z(__t._M_zone_offset, std::move(__out), (bool)__mod); @@ -1442,18 +1439,47 @@ namespace __format template _OutIter - _M_g_G(const _ChronoData<_CharT>& __t, _OutIter __out, - bool __full) const + _M_g_G_V(const _ChronoData<_CharT>& __t, _OutIter __out, + _CharT __conv) const { - // %g last two decimal digits of the ISO week-based year. - // %G ISO week-based year. + // %g last two decimal digits of the ISO week-based year. + // %G ISO week-based year. + // %V ISO week-based week number as a decimal number. + // %OV Locale's alternative numeric rep. + + // ISO week-based year of __t is the year that contains the nearest + // Thursday. The ISO week of __t is the number of weeks since + // January 1 of that year. + using namespace chrono; - auto __d = __t._M_ldays; - // Move to nearest Thursday: - __d -= (__t._M_weekday - Monday) - days(3); - // ISO week-based year is the year that contains that Thursday: - year __y = year_month_day(__d).year(); - return _M_C_y_Y(__y, std::move(__out), "yY"[__full]); + // Offset of the nearest Thursday: + const days __offset = (__t._M_weekday - Monday) - days(3); + // Nearest Thursday as local days: + const local_days __ild = __t._M_ldays - __offset; + // Day of year of nearest Thursday: + days __idoy = __t._M_day_of_year - __offset; + + // Year of nearest Thursday: + year __iyear; + if (__idoy <= days(0)) + __iyear = __t._M_year - years(1); + else if (__idoy <= days(365)) + __iyear = __t._M_year; + else if (__idoy == days(366) && __t._M_year.is_leap()) + __iyear = __t._M_year; + else if (__idoy <= days(730)) + __iyear = __t._M_year + years(1); + else [[unlikely]] + __iyear = year_month_day(__ild).year(); + + if (__conv != 'V') + return _M_C_y_Y(__iyear, std::move(__out), "yY"[__conv == 'G']); + + if (__iyear != __t._M_year) + __idoy = __ild - local_days(__iyear/January/0); + + const auto __wi = chrono::floor(__idoy - days(1)).count() + 1; + return __format::__write(std::move(__out), _S_two_digits(__wi)); } template @@ -1710,35 +1736,19 @@ namespace __format template _OutIter - _M_U_V_W(const _ChronoData<_CharT>& __t, _OutIter __out, - _CharT __conv) const + _M_U_W(const _ChronoData<_CharT>& __t, _OutIter __out, + _CharT __conv) const { // %U Week number of the year as a decimal number, from first Sunday. // %OU Locale's alternative numeric rep. - // %V ISO week-based week number as a decimal number. - // %OV Locale's alternative numeric rep. // %W Week number of the year as a decimal number, from first Monday. // %OW Locale's alternative numeric rep. - using namespace chrono; - auto __d = __t._M_ldays; - local_days __first; // First day of week 1. - if (__conv == 'V') // W01 begins on Monday before first Thursday. - { - // Move to nearest Thursday: - __d -= (__t._M_weekday - Monday) - days(3); - // ISO week of __t is number of weeks since January 1 of the - // same year as that nearest Thursday. - __first = local_days(year_month_day(__d).year()/January/1); - } - else - { - const weekday __weekstart = __conv == 'U' ? Sunday : Monday; - __first = local_days(__t._M_year/January/__weekstart[1]); - } - auto __weeks = chrono::floor(__d - __first); - __string_view __sv = _S_two_digits(__weeks.count() + 1); - return __format::__write(std::move(__out), __sv); + using namespace chrono; + const weekday __weekstart = __conv == 'U' ? Sunday : Monday; + const days __offset = __t._M_weekday - __weekstart; + auto __weeks = chrono::floor(__t._M_day_of_year - __offset - days(1)); + return __format::__write(std::move(__out), _S_two_digits(__weeks.count() + 1)); } template @@ -1919,13 +1929,31 @@ namespace __format return __res; }; + template + static consteval + _ChronoSpec<_CharT> + _S_spec_for_tp() + { + using enum _ChronoParts; + // streaming of local_time is defined in terms of sys_time + constexpr bool __stream_insertable = + requires (basic_ostream<_CharT>& __os, chrono::sys_time<_Duration> __t) + { __os << __t; }; + if constexpr (!__stream_insertable) + return _S_spec_for<_Duration>(_None); + else if constexpr (is_convertible_v<_Duration, chrono::days>) + return _S_spec_for<_Duration>(_Date); + else + return _S_spec_for<_Duration>(_DateTime); + } + using __formatter_chrono<_CharT>::__formatter_chrono; using __formatter_chrono<_CharT>::_M_spec; - template - constexpr typename _ParseContext::iterator - _M_parse(_ParseContext& __pc, _ChronoParts __parts, - const _ChronoSpec<_CharT>& __def = {}) + template + constexpr typename basic_format_parse_context<_CharT>::iterator + _M_parse(basic_format_parse_context<_CharT>& __pc, _ChronoParts __parts, + const _ChronoSpec<_CharT>& __def) { using _Rep = typename _Duration::rep; using enum _ChronoParts; @@ -2902,12 +2930,12 @@ namespace __format parse(basic_format_parse_context<_CharT>& __pc) { using enum __format::_ChronoParts; - auto __next + auto __res = _M_f.template _M_parse<_Duration>(__pc, _ZonedDateTime, __defSpec); - if constexpr (!__stream_insertable) + if constexpr (__defSpec._M_chrono_specs.empty()) if (_M_f._M_spec._M_chrono_specs.empty()) __format::__invalid_chrono_spec(); // chrono-specs can't be empty - return __next; + return __res; } template @@ -2925,28 +2953,14 @@ namespace __format } private: - static constexpr bool __stream_insertable - = requires (basic_ostream<_CharT>& __os, - chrono::sys_time<_Duration> __t) { __os << __t; }; - - static constexpr __format::_ChronoSpec<_CharT> __defSpec = [] - { - using enum __format::_ChronoParts; - __format::_ChronoParts __needed = _DateTime; - if constexpr (!__stream_insertable) - __needed = _None; - else if constexpr (is_convertible_v<_Duration, chrono::days>) - __needed = _Date; - return __format::__formatter_duration<_CharT>:: - template _S_spec_for<_Duration>(__needed); - }(); + static constexpr __format::_ChronoSpec<_CharT> __defSpec = + __format::__formatter_duration<_CharT>::template _S_spec_for_tp<_Duration>(); __format::__formatter_duration<_CharT> _M_f{__defSpec}; }; template struct formatter, _CharT> - : __format::__formatter_chrono<_CharT> { constexpr typename basic_format_parse_context<_CharT>::iterator parse(basic_format_parse_context<_CharT>& __pc) @@ -2991,7 +3005,6 @@ namespace __format template struct formatter, _CharT> - : __format::__formatter_chrono<_CharT> { constexpr typename basic_format_parse_context<_CharT>::iterator parse(basic_format_parse_context<_CharT>& __pc) @@ -3027,7 +3040,6 @@ namespace __format template struct formatter, _CharT> - : __format::__formatter_chrono<_CharT> { constexpr typename basic_format_parse_context<_CharT>::iterator parse(basic_format_parse_context<_CharT>& __pc) @@ -3103,7 +3115,12 @@ namespace __format parse(basic_format_parse_context<_CharT>& __pc) { using enum __format::_ChronoParts; - return _M_f.template _M_parse<_Duration>(__pc, _DateTime, __defSpec); + auto __res + = _M_f.template _M_parse<_Duration>(__pc, _DateTime, __defSpec); + if constexpr (__defSpec._M_chrono_specs.empty()) + if (_M_f._M_spec._M_chrono_specs.empty()) + __format::__invalid_chrono_spec(); // chrono-specs can't be empty + return __res; } template @@ -3119,15 +3136,8 @@ namespace __format } private: - static constexpr __format::_ChronoSpec<_CharT> __defSpec = [] - { - using enum __format::_ChronoParts; - __format::_ChronoParts __needed = _DateTime; - if constexpr (is_convertible_v<_Duration, chrono::days>) - __needed = _Date; - return __format::__formatter_duration<_CharT>:: - template _S_spec_for<_Duration>(__needed); - }(); + static constexpr __format::_ChronoSpec<_CharT> __defSpec = + __format::__formatter_duration<_CharT>::template _S_spec_for_tp<_Duration>(); __format::__formatter_duration<_CharT> _M_f{__defSpec}; }; @@ -4014,6 +4024,9 @@ namespace __detail inline basic_ostream<_CharT, _Traits>& operator<<(basic_ostream<_CharT, _Traits>& __os, const local_time<_Duration>& __lt) + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 4257. Stream insertion for chrono::local_time should be constrained + requires requires(const sys_time<_Duration>& __st) { __os << __st; } { __os << sys_time<_Duration>{__lt.time_since_epoch()}; return __os; diff --git a/libstdc++-v3/include/bits/deque.tcc b/libstdc++-v3/include/bits/deque.tcc index dabb6ec53659..20b23fffc9e1 100644 --- a/libstdc++-v3/include/bits/deque.tcc +++ b/libstdc++-v3/include/bits/deque.tcc @@ -381,7 +381,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER const difference_type __back_capacity = (this->_M_impl._M_finish._M_last - this->_M_impl._M_finish._M_cur); - if (__front_capacity + __back_capacity < _S_buffer_size()) + if (size_type(__front_capacity + __back_capacity) < _S_buffer_size()) return false; return std::__shrink_to_fit_aux::_S_do_it(*this); @@ -664,7 +664,10 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER deque<_Tp, _Alloc>:: _M_emplace_aux(iterator __pos, _Args&&... __args) { - value_type __x_copy(std::forward<_Args>(__args)...); // XXX copy + // We should construct this temporary while the deque is + // in its current state in case something in __args... + // depends on that state before shuffling elements around. + _Temporary_value __tmp(this, std::forward<_Args>(__args)...); #else typename deque<_Tp, _Alloc>::iterator deque<_Tp, _Alloc>:: @@ -695,7 +698,11 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER __pos = this->_M_impl._M_start + __index; _GLIBCXX_MOVE_BACKWARD3(__pos, __back2, __back1); } - *__pos = _GLIBCXX_MOVE(__x_copy); +#if __cplusplus >= 201103L + *__pos = std::move(__tmp._M_val()); +#else + *__pos = __x_copy; +#endif return __pos; } diff --git a/libstdc++-v3/include/bits/funcwrap.h b/libstdc++-v3/include/bits/funcwrap.h index 70ecfd93e369..1a81c9a9b466 100644 --- a/libstdc++-v3/include/bits/funcwrap.h +++ b/libstdc++-v3/include/bits/funcwrap.h @@ -538,14 +538,18 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION struct __skip_first_arg<_Ret(*)(_Arg, _Args...) noexcept(_Noex)> { using type = _Ret(_Args...) noexcept(_Noex); }; + // Returns a function pointer to signature to be used with function_ref, or void. template consteval auto __deduce_funcref() { if constexpr (is_member_object_pointer_v<_Fn>) - // TODO Consider reporting issue to make this noexcept - return static_cast(*)()>(nullptr); - else + { + if constexpr (is_invocable_v<_Fn, _Tr>) + // TODO Consider reporting issue to make this noexcept + return static_cast(*)()>(nullptr); + } + else if constexpr (requires { typename __skip_first_arg<_Fn>::type; }) return static_cast<__skip_first_arg<_Fn>::type*>(nullptr); } } // namespace __polyfunc @@ -562,11 +566,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION requires is_function_v<_Fn> function_ref(nontype_t<__f>) -> function_ref<_Fn>; - template - requires is_member_pointer_v<_Fn> || is_function_v> + template())> + requires (!is_void_v<_SignaturePtr>) function_ref(nontype_t<__f>, _Tp&&) - -> function_ref< - remove_pointer_t())>>; + -> function_ref>; #endif // __glibcxx_function_ref diff --git a/libstdc++-v3/include/bits/hashtable.h b/libstdc++-v3/include/bits/hashtable.h index 20f9bd98d5b7..b5a71f516f88 100644 --- a/libstdc++-v3/include/bits/hashtable.h +++ b/libstdc++-v3/include/bits/hashtable.h @@ -477,15 +477,18 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION static constexpr bool _S_nothrow_move() { -#if __cplusplus <= 201402L +#if __cpp_constexpr >= 201304 // >= C++14 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wc++17-extensions" // if constexpr + if constexpr (_No_realloc) + if constexpr (is_nothrow_copy_constructible<_Hash>::value) + return is_nothrow_copy_constructible<_Equal>::value; + return false; +# pragma GCC diagnostic pop +#else // In C++11 a constexpr function must be a single statement. return __and_<__bool_constant<_No_realloc>, is_nothrow_copy_constructible<_Hash>, is_nothrow_copy_constructible<_Equal>>::value; -#else - if constexpr (_No_realloc) - if constexpr (is_nothrow_copy_constructible<_Hash>()) - return is_nothrow_copy_constructible<_Equal>(); - return false; #endif } diff --git a/libstdc++-v3/include/bits/indirect.h b/libstdc++-v3/include/bits/indirect.h index 89fa8c874fbd..2df46cc39a21 100644 --- a/libstdc++-v3/include/bits/indirect.h +++ b/libstdc++-v3/include/bits/indirect.h @@ -263,7 +263,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION _M_reset(__ptr); if constexpr (__pocma) - _M_alloc = __other._M_alloc; + _M_alloc = std::move(__other._M_alloc); return *this; } @@ -736,7 +736,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION _M_reset(__ptr); if constexpr (__pocma) - _M_alloc = __other._M_alloc; + _M_alloc = std::move(__other._M_alloc); return *this; } diff --git a/libstdc++-v3/include/bits/iterator_concepts.h b/libstdc++-v3/include/bits/iterator_concepts.h index 979039e7da53..fd91b22d75a5 100644 --- a/libstdc++-v3/include/bits/iterator_concepts.h +++ b/libstdc++-v3/include/bits/iterator_concepts.h @@ -148,7 +148,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION }; template - static constexpr bool + static consteval bool _S_noexcept() { if constexpr (__adl_imove<_Tp>) @@ -884,7 +884,7 @@ namespace ranges { private: template - static constexpr bool + static consteval bool _S_noexcept() { if constexpr (__adl_iswap<_Tp, _Up>) diff --git a/libstdc++-v3/include/bits/predefined_ops.h b/libstdc++-v3/include/bits/predefined_ops.h index 5759ebd0e5bc..d75b5c2ffc85 100644 --- a/libstdc++-v3/include/bits/predefined_ops.h +++ b/libstdc++-v3/include/bits/predefined_ops.h @@ -30,376 +30,178 @@ #ifndef _GLIBCXX_PREDEFINED_OPS_H #define _GLIBCXX_PREDEFINED_OPS_H 1 -#include +#include // less, equal_to +#if __cplusplus >= 201103L +# include // is_empty, is_scalar, __conditional_t, __or_ +#else +# include // __conditional_type +#endif namespace __gnu_cxx { namespace __ops { - struct _Iter_less_iter - { - template - _GLIBCXX14_CONSTEXPR - bool - operator()(_Iterator1 __it1, _Iterator2 __it2) const - { return *__it1 < *__it2; } - }; - - _GLIBCXX14_CONSTEXPR - inline _Iter_less_iter - __iter_less_iter() - { return _Iter_less_iter(); } - - struct _Iter_less_val - { -#if __cplusplus >= 201103L - constexpr _Iter_less_val() = default; -#else - _Iter_less_val() { } -#endif + // These two explicit specializations are always defined by libstdc++, + // even when __cpp_lib_transparent_operators is not defined. + typedef std::equal_to equal_to; + typedef std::less less; - _GLIBCXX20_CONSTEXPR - explicit - _Iter_less_val(_Iter_less_iter) { } - - template - _GLIBCXX20_CONSTEXPR - bool - operator()(_Iterator __it, _Value& __val) const - { return *__it < __val; } - }; - - _GLIBCXX20_CONSTEXPR - inline _Iter_less_val - __iter_less_val() - { return _Iter_less_val(); } - - _GLIBCXX20_CONSTEXPR - inline _Iter_less_val - __iter_comp_val(_Iter_less_iter) - { return _Iter_less_val(); } - - struct _Val_less_iter - { #if __cplusplus >= 201103L - constexpr _Val_less_iter() = default; -#else - _Val_less_iter() { } -#endif - _GLIBCXX20_CONSTEXPR - explicit - _Val_less_iter(_Iter_less_iter) { } - - template - _GLIBCXX20_CONSTEXPR - bool - operator()(_Value& __val, _Iterator __it) const - { return __val < *__it; } - }; - - _GLIBCXX20_CONSTEXPR - inline _Val_less_iter - __val_less_iter() - { return _Val_less_iter(); } - - _GLIBCXX20_CONSTEXPR - inline _Val_less_iter - __val_comp_iter(_Iter_less_iter) - { return _Val_less_iter(); } - - struct _Iter_equal_to_iter - { - template - _GLIBCXX20_CONSTEXPR - bool - operator()(_Iterator1 __it1, _Iterator2 __it2) const - { return *__it1 == *__it2; } - }; - - _GLIBCXX20_CONSTEXPR - inline _Iter_equal_to_iter - __iter_equal_to_iter() - { return _Iter_equal_to_iter(); } - - struct _Iter_equal_to_val - { - template - _GLIBCXX20_CONSTEXPR - bool - operator()(_Iterator __it, _Value& __val) const - { return *__it == __val; } - }; - - _GLIBCXX20_CONSTEXPR - inline _Iter_equal_to_val - __iter_equal_to_val() - { return _Iter_equal_to_val(); } - - _GLIBCXX20_CONSTEXPR - inline _Iter_equal_to_val - __iter_comp_val(_Iter_equal_to_iter) - { return _Iter_equal_to_val(); } - - template - struct _Iter_comp_iter - { - _Compare _M_comp; - - explicit _GLIBCXX14_CONSTEXPR - _Iter_comp_iter(_Compare __comp) - : _M_comp(_GLIBCXX_MOVE(__comp)) - { } - - template - _GLIBCXX14_CONSTEXPR - bool - operator()(_Iterator1 __it1, _Iterator2 __it2) - { return bool(_M_comp(*__it1, *__it2)); } - }; + template + using __by_ref_or_value_fn + = std::__conditional_t, + std::is_scalar<_Fn>>::value, + _Fn, _Fn&>; - template - _GLIBCXX14_CONSTEXPR - inline _Iter_comp_iter<_Compare> - __iter_comp_iter(_Compare __comp) - { return _Iter_comp_iter<_Compare>(_GLIBCXX_MOVE(__comp)); } + // More generic replacements for the deprecated utilities + // std::bind1st, std::bind2nd, and std::not1. + // These aren't fully "transparent" like std::less because they + // do not use perfect forwarding, everything is treated as an lvalue. - template - struct _Iter_comp_val + template + struct _Comp_with_val { - _Compare _M_comp; - - _GLIBCXX20_CONSTEXPR - explicit - _Iter_comp_val(_Compare __comp) - : _M_comp(_GLIBCXX_MOVE(__comp)) - { } - - _GLIBCXX20_CONSTEXPR - explicit - _Iter_comp_val(const _Iter_comp_iter<_Compare>& __comp) - : _M_comp(__comp._M_comp) - { } - -#if __cplusplus >= 201103L - _GLIBCXX20_CONSTEXPR - explicit - _Iter_comp_val(_Iter_comp_iter<_Compare>&& __comp) - : _M_comp(std::move(__comp._M_comp)) - { } -#endif - - template - _GLIBCXX20_CONSTEXPR - bool - operator()(_Iterator __it, _Value& __val) - { return bool(_M_comp(*__it, __val)); } + using _Fn = __by_ref_or_value_fn<_Func>; + + explicit constexpr + _Comp_with_val(_Fn __f, const _Value& __v) + : _M_f(__f), _M_val(__v) { } + + [[__no_unique_address__]] _Fn _M_f; + const _Value& _M_val; + + template + _GLIBCXX14_CONSTEXPR bool + operator()(_Tp&& __arg) + { +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wc++17-extensions" + if constexpr (_Val_2nd) + return _M_f(__arg, _M_val); + else + return _M_f(_M_val, __arg); +#pragma GCC diagnostic pop + } }; - template - _GLIBCXX20_CONSTEXPR - inline _Iter_comp_val<_Compare> - __iter_comp_val(_Compare __comp) - { return _Iter_comp_val<_Compare>(_GLIBCXX_MOVE(__comp)); } - - template - _GLIBCXX20_CONSTEXPR - inline _Iter_comp_val<_Compare> - __iter_comp_val(_Iter_comp_iter<_Compare> __comp) - { return _Iter_comp_val<_Compare>(_GLIBCXX_MOVE(__comp)); } + template + using _Comp_with_val_1st = _Comp_with_val<_Func, _Value, false>; + template + using _Comp_with_val_2nd = _Comp_with_val<_Func, _Value, true>; - template - struct _Val_comp_iter + template + struct _Unary_negate { - _Compare _M_comp; + using _Fn = __by_ref_or_value_fn<_Func>; - _GLIBCXX20_CONSTEXPR - explicit - _Val_comp_iter(_Compare __comp) - : _M_comp(_GLIBCXX_MOVE(__comp)) - { } - - _GLIBCXX20_CONSTEXPR - explicit - _Val_comp_iter(const _Iter_comp_iter<_Compare>& __comp) - : _M_comp(__comp._M_comp) - { } + explicit constexpr + _Unary_negate(_Fn __f) : _M_f(__f) { } -#if __cplusplus >= 201103L - _GLIBCXX20_CONSTEXPR - explicit - _Val_comp_iter(_Iter_comp_iter<_Compare>&& __comp) - : _M_comp(std::move(__comp._M_comp)) - { } -#endif + [[__no_unique_address__]] _Fn _M_f; - template - _GLIBCXX20_CONSTEXPR - bool - operator()(_Value& __val, _Iterator __it) - { return bool(_M_comp(__val, *__it)); } + template + _GLIBCXX14_CONSTEXPR bool + operator()(_Tp&& __arg) { return !_M_f(__arg); } }; - template - _GLIBCXX20_CONSTEXPR - inline _Val_comp_iter<_Compare> - __val_comp_iter(_Compare __comp) - { return _Val_comp_iter<_Compare>(_GLIBCXX_MOVE(__comp)); } + template + constexpr _Unary_negate<_Func> + not1(_Func& __f) + { return _Unary_negate<_Func>(__f); } - template - _GLIBCXX20_CONSTEXPR - inline _Val_comp_iter<_Compare> - __val_comp_iter(_Iter_comp_iter<_Compare> __comp) - { return _Val_comp_iter<_Compare>(_GLIBCXX_MOVE(__comp)); } +#else // <= C++11 - template - struct _Iter_equals_val - { - _Value& _M_value; + template + struct __by_ref_or_value_fn + : __conditional_type<__is_empty(_Fn), _Fn, _Fn&> + { }; - _GLIBCXX20_CONSTEXPR - explicit - _Iter_equals_val(_Value& __value) - : _M_value(__value) - { } - - template - _GLIBCXX20_CONSTEXPR - bool - operator()(_Iterator __it) - { return *__it == _M_value; } - }; + template + struct __by_ref_or_value_fn<_Fn*> + { typedef _Fn* __type; }; - template - _GLIBCXX20_CONSTEXPR - inline _Iter_equals_val<_Value> - __iter_equals_val(_Value& __val) - { return _Iter_equals_val<_Value>(__val); } + // We don't use std::binder1st, std::binder2nd, or std::unary_negate here + // because they require adaptable function objects, i.e. types with nested + // result_type and argument_type/first_argument_type/second_argument_type. - template - struct _Iter_equals_iter + template + struct _Comp_with_val_1st { - _Iterator1 _M_it1; + typedef typename __by_ref_or_value_fn<_Func>::__type _Fn; - _GLIBCXX20_CONSTEXPR explicit - _Iter_equals_iter(_Iterator1 __it1) - : _M_it1(__it1) - { } + _Comp_with_val_1st(_Fn __f, const _Value& __v) + : _M_f(__f), _M_val(__v) { } - template - _GLIBCXX20_CONSTEXPR - bool - operator()(_Iterator2 __it2) - { return *__it2 == *_M_it1; } - }; + _Fn _M_f; + const _Value& _M_val; - template - _GLIBCXX20_CONSTEXPR - inline _Iter_equals_iter<_Iterator> - __iter_comp_iter(_Iter_equal_to_iter, _Iterator __it) - { return _Iter_equals_iter<_Iterator>(__it); } + template + bool operator()(_Tp& __arg) { return _M_f(_M_val, __arg); } + template + bool operator()(const _Tp& __arg) { return _M_f(_M_val, __arg); } + }; - template - struct _Iter_pred + template + struct _Comp_with_val_2nd { - _Predicate _M_pred; + typedef typename __by_ref_or_value_fn<_Func>::__type _Fn; - _GLIBCXX20_CONSTEXPR explicit - _Iter_pred(_Predicate __pred) - : _M_pred(_GLIBCXX_MOVE(__pred)) - { } - - template - _GLIBCXX20_CONSTEXPR - bool - operator()(_Iterator __it) - { return bool(_M_pred(*__it)); } - }; + _Comp_with_val_2nd(_Fn __f, const _Value& __v) + : _M_f(__f), _M_val(__v) { } - template - _GLIBCXX20_CONSTEXPR - inline _Iter_pred<_Predicate> - __pred_iter(_Predicate __pred) - { return _Iter_pred<_Predicate>(_GLIBCXX_MOVE(__pred)); } + _Fn _M_f; + const _Value& _M_val; - template - struct _Iter_comp_to_val - { - _Compare _M_comp; - _Value& _M_value; - - _GLIBCXX20_CONSTEXPR - _Iter_comp_to_val(_Compare __comp, _Value& __value) - : _M_comp(_GLIBCXX_MOVE(__comp)), _M_value(__value) - { } - - template - _GLIBCXX20_CONSTEXPR - bool - operator()(_Iterator __it) - { return bool(_M_comp(*__it, _M_value)); } + template + bool operator()(_Tp& __arg) { return _M_f(__arg, _M_val); } + template + bool operator()(const _Tp& __arg) { return _M_f(__arg, _M_val); } }; - template - _Iter_comp_to_val<_Compare, _Value> - _GLIBCXX20_CONSTEXPR - __iter_comp_val(_Compare __comp, _Value &__val) + template + struct _Unary_negate_1 // N.B. different name for C++98 to satisfy ODR { - return _Iter_comp_to_val<_Compare, _Value>(_GLIBCXX_MOVE(__comp), __val); - } + typedef typename __by_ref_or_value_fn<_Func>::__type _Fn; - template - struct _Iter_comp_to_iter - { - _Compare _M_comp; - _Iterator1 _M_it1; + explicit _Unary_negate_1(_Fn __f) : _M_f(__f) { } - _GLIBCXX20_CONSTEXPR - _Iter_comp_to_iter(_Compare __comp, _Iterator1 __it1) - : _M_comp(_GLIBCXX_MOVE(__comp)), _M_it1(__it1) - { } + _Fn _M_f; - template - _GLIBCXX20_CONSTEXPR + template + bool + operator()(_Tp& __arg) { return !_M_f(__arg); } + template bool - operator()(_Iterator2 __it2) - { return bool(_M_comp(*__it2, *_M_it1)); } + operator()(const _Tp& __arg) { return !_M_f(__arg); } }; - template - _GLIBCXX20_CONSTEXPR - inline _Iter_comp_to_iter<_Compare, _Iterator> - __iter_comp_iter(_Iter_comp_iter<_Compare> __comp, _Iterator __it) - { - return _Iter_comp_to_iter<_Compare, _Iterator>( - _GLIBCXX_MOVE(__comp._M_comp), __it); - } + template + inline _Unary_negate_1<_Func> + not1(_Func& __f) + { return _Unary_negate_1<_Func>(__f); } +#endif - template - struct _Iter_negate - { - _Predicate _M_pred; + // N.B. these functions take lvalue references because we want to avoid + // returning a call wrapper that has a dangling reference to a prvalue. - _GLIBCXX20_CONSTEXPR - explicit - _Iter_negate(_Predicate __pred) - : _M_pred(_GLIBCXX_MOVE(__pred)) - { } + template + _GLIBCXX_CONSTEXPR inline _Comp_with_val_1st<_Func, _Value> + bind1st(_Func& __f, const _Value& __val) + { return _Comp_with_val_1st<_Func, _Value>(__f, __val); } - template - _GLIBCXX20_CONSTEXPR - bool - operator()(_Iterator __it) - { return !bool(_M_pred(*__it)); } - }; + template + _GLIBCXX_CONSTEXPR inline _Comp_with_val_2nd<_Func, _Value> + bind2nd(_Func& __f, const _Value& __val) + { return _Comp_with_val_2nd<_Func, _Value>(__f, __val); } - template - _GLIBCXX20_CONSTEXPR - inline _Iter_negate<_Predicate> - __negate(_Iter_pred<_Predicate> __pred) - { return _Iter_negate<_Predicate>(_GLIBCXX_MOVE(__pred._M_pred)); } + // Equivalent to bind2nd(equal_to{}, val) + template + _GLIBCXX_CONSTEXPR inline _Comp_with_val_2nd + __equal_to(const _Value& __val) + { return _Comp_with_val_2nd(equal_to(), __val); } } // namespace __ops } // namespace __gnu_cxx diff --git a/libstdc++-v3/include/bits/random.h b/libstdc++-v3/include/bits/random.h index 1fdaf51934fd..ebc863e84534 100644 --- a/libstdc++-v3/include/bits/random.h +++ b/libstdc++-v3/include/bits/random.h @@ -32,6 +32,7 @@ #define _RANDOM_H 1 #include +#include #include namespace std _GLIBCXX_VISIBILITY(default) @@ -1688,6 +1689,263 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { return !(__lhs == __rhs); } #endif +#if __glibcxx_philox_engine // >= C++26 + /** + * @brief A discrete pseudorandom number generator with weak cryptographic + * properties + * + * This algorithm was designed to be used for highly parallel random number + * generation, and is capable of immensely long periods. It provides + * "Crush-resistance", denoting an ability to pass the TestU01 Suite's + * "Big Crush" test, demonstrating significant apparent entropy. + * + * It is not intended for cryptographic use and should not be used for such, + * despite being based on cryptographic primitives. + * + * The typedefs `philox4x32` and `philox4x64` are provided as suitable + * defaults for most use cases, providing high-quality random numbers + * with reasonable performance. + * + * This algorithm was created by John Salmon, Mark Moraes, Ron Dror, and + * David Shaw as a product of D.E. Shaw Research. + * + * @tparam __w Word size + * @tparam __n Buffer size + * @tparam __r Rounds + * @tparam __consts Multiplication and round constant pack, ordered as + * M_{0}, C_{0}, M_{1}, C_{1}, ... , M_{N/2-1}, C_{N/2-1} + * + * @headerfile random + * @since C++26 + */ + template + class philox_engine + { + static_assert(__n == 2 || __n == 4, + "template argument N must be either 2 or 4"); + static_assert(sizeof...(__consts) == __n, + "length of consts array must match specified N"); + static_assert(0 < __r, "a number of rounds must be specified"); + static_assert((0 < __w && __w <= numeric_limits<_UIntType>::digits), + "specified bitlength must match input type"); + + template + static constexpr bool __is_seed_seq = requires { + typename __detail::_If_seed_seq_for<_Sseq, philox_engine, _UIntType>; + }; + + template + static constexpr + array<_UIntType, __n / 2> + _S_popArray() + { + if constexpr (__n == 4) + return {__consts...[__ind0], __consts...[__ind1]}; + else + return {__consts...[__ind0]}; + } + + public: + using result_type = _UIntType; + // public members + static constexpr size_t word_size = __w; + static constexpr size_t word_count = __n; + static constexpr size_t round_count = __r; + static constexpr array multipliers + = _S_popArray<0,2>(); + static constexpr array round_consts + = _S_popArray<1,3>(); + + /// The minimum value that this engine can return + static constexpr result_type + min() + { return 0; } + + /// The maximum value that this engine can return + static constexpr result_type + max() + { + return ((1ull << (__w - 1)) | ((1ull << (__w - 1)) - 1)); + } + // default key value + static constexpr result_type default_seed = 20111115u; + + // constructors + philox_engine() + : philox_engine(default_seed) + { } + + explicit + philox_engine(result_type __value) + : _M_x{}, _M_k{}, _M_y{}, _M_i(__n - 1) + { _M_k[0] = __value & max(); } + + /** @brief seed sequence constructor for %philox_engine + * + * @param __q the seed sequence + */ + template requires __is_seed_seq<_Sseq> + explicit + philox_engine(_Sseq& __q) + { + seed(__q); + } + + void + seed(result_type __value = default_seed) + { + _M_x = {}; + _M_y = {}; + _M_k = {}; + _M_k[0] = __value & max(); + _M_i = __n - 1; + } + + /** @brief seeds %philox_engine by seed sequence + * + * @param __q the seed sequence + */ + template + void + seed(_Sseq& __q) requires __is_seed_seq<_Sseq>; + + /** @brief sets the internal counter "cleartext" + * + * @param __counter std::array of len N + */ + void + set_counter(const array& __counter) + { + for (size_t __j = 0; __j < __n; ++__j) + _M_x[__j] = __counter[__n - 1 - __j] & max(); + _M_i = __n - 1; + } + + /** @brief compares two %philox_engine objects + * + * @returns true if the objects will produce an identical stream, + * false otherwise + */ + friend bool + operator==(const philox_engine&, const philox_engine&) = default; + + /** @brief outputs a single w-bit number and handles state advancement + * + * @returns return_type + */ + result_type + operator()() + { + _M_transition(); + return _M_y[_M_i]; + } + + /** @brief discards __z numbers + * + * @param __z number of iterations to discard + */ + void + discard(unsigned long long __z) + { + while (__z--) + _M_transition(); + } + + /** @brief outputs the state of the generator + * + * @param __os An output stream. + * @param __x A %philox_engine object reference + * + * @returns the state of the Philox Engine in __os + */ + template + friend basic_ostream<_CharT, _Traits>& + operator<<(basic_ostream<_CharT, _Traits>& __os, + const philox_engine& __x) + { + const typename ios_base::fmtflags __flags = __os.flags(); + const _CharT __fill = __os.fill(); + __os.flags(ios_base::dec | ios_base::left); + _CharT __space = __os.widen(' '); + __os.fill(__space); + for (auto& __subkey : __x._M_k) + __os << __subkey << __space; + for (auto& __ctr : __x._M_x) + __os << __ctr << __space; + __os << __x._M_i; + __os.flags(__flags); + __os.fill(__fill); + return __os; + } + + /** @brief takes input to set the state of the %philox_engine object + * + * @param __is An input stream. + * @param __x A %philox_engine object reference + * + * @returns %philox_engine object is set with values from instream + */ + template + friend basic_istream<_CharT, _Traits>& + operator>>(basic_istream<_CharT, _Traits>& __is, + philox_engine& __x) + { + const typename ios_base::fmtflags __flags = __is.flags(); + __is.flags(ios_base::dec | ios_base::skipws); + for (auto& __subkey : __x._M_k) + __is >> __subkey; + for (auto& __ctr : __x._M_x) + __is >> __ctr; + array<_UIntType, __n> __tmpCtr = __x._M_x; + unsigned char __setIndex = 0; + for (size_t __j = 0; __j < __x._M_x.size(); ++__j) + { + if (__x._M_x[__j] > 0) + { + __setIndex = __j; + break; + } + } + for (size_t __j = 0; __j <= __setIndex; ++__j) + { + if (__j != __setIndex) + __x._M_x[__j] = max(); + else + --__x._M_x[__j]; + } + __x._M_philox(); + __x._M_x = __tmpCtr; + __is >> __x._M_i; + __is.flags(__flags); + return __is; + } + + private: + // private state variables + array<_UIntType, __n> _M_x; + array<_UIntType, __n / 2> _M_k; + array<_UIntType, __n> _M_y; + unsigned long long _M_i = 0; + + // The high W bits of the product of __a and __b + static _UIntType + _S_mulhi(_UIntType __a, _UIntType __b); // (A*B)/2^W + + // The low W bits of the product of __a and __b + static _UIntType + _S_mullo(_UIntType __a, _UIntType __b); // (A*B)%2^W + + // An R-round substitution/Feistel Network hybrid for philox_engine + void + _M_philox(); + + // The transition function + void + _M_transition(); + }; +#endif + /** * The classic Minimum Standard rand0 of Lewis, Goodman, and Miller. */ @@ -1742,6 +2000,23 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION typedef minstd_rand0 default_random_engine; +#if __glibcxx_philox_engine + + /// 32-bit four-word Philox engine. + typedef philox_engine< + uint_fast32_t, + 32, 4, 10, + 0xCD9E8D57, 0x9E3779B9, + 0xD2511F53, 0xBB67AE85> philox4x32; + + /// 64-bit four-word Philox engine. + typedef philox_engine< + uint_fast64_t, + 64, 4, 10, + 0xCA5A826395121157, 0x9E3779B97F4A7C15, + 0xD2E7470EE14C6C93, 0xBB67AE8584CAA73B> philox4x64; +#endif + /** * A standard interface to a platform-specific non-deterministic * random number generator (if any are available). diff --git a/libstdc++-v3/include/bits/random.tcc b/libstdc++-v3/include/bits/random.tcc index 53ccacb2e38b..b4273f058b44 100644 --- a/libstdc++-v3/include/bits/random.tcc +++ b/libstdc++-v3/include/bits/random.tcc @@ -83,7 +83,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION __normalize(_InputIterator __first, _InputIterator __last, _OutputIterator __result, const _Tp& __factor) { - for (; __first != __last; ++__first, ++__result) + for (; __first != __last; ++__first, (void) ++__result) *__result = *__first / __factor; return __result; } @@ -907,6 +907,129 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION return __is; } +#if __glibcxx_philox_engine // >= C++26 + + template + _UIntType + philox_engine<_UIntType, __w, __n, __r, __consts...>:: + _S_mulhi(_UIntType __a, _UIntType __b) + { + const __uint128_t __num = + static_cast<__uint128_t>(__a) * static_cast<__uint128_t>(__b); + return static_cast<_UIntType>((__num >> __w) & max()); + } + + template + _UIntType + philox_engine<_UIntType, __w, __n, __r, __consts...>:: + _S_mullo(_UIntType __a, _UIntType __b) + { + return static_cast<_UIntType>((__a * __b) & max()); + } + + template + void + philox_engine<_UIntType, __w, __n, __r, __consts...>::_M_transition() + { + ++_M_i; + if (_M_i != __n) + return; + + _M_philox(); + if constexpr (__n == 4) + { + __uint128_t __uh = + (static_cast<__uint128_t>(_M_x[1]) << __w) + | (static_cast<__uint128_t>(_M_x[0]) + 1); + __uint128_t __lh = + ((static_cast<__uint128_t>(_M_x[3]) << __w) + | (_M_x[2])); + __uint128_t __bigMask = + (static_cast<__uint128_t>(1) << ((2 * __w) - 1)) + | ((static_cast<__uint128_t>(1) << ((2 * __w) - 1)) - 1); + if ((__uh & __bigMask) == 0) + { + ++__lh; + __uh = 0; + } + _M_x[0] = __uh & max(); + _M_x[1] = (__uh >> (__w)) & max(); + _M_x[2] = __lh & max(); + _M_x[3] = (__lh >> (__w)) & max(); + } + else + { + __uint128_t __num = + (static_cast<__uint128_t>(_M_x[1]) << __w) + | (static_cast<__uint128_t>(_M_x[0]) + 1); + _M_x[0] = __num & max(); + _M_x[1] = (__num >> __w) & max(); + } + _M_i = 0; + } + + template + void + philox_engine<_UIntType, __w, __n, __r, __consts...>::_M_philox() + { + array<_UIntType, __n> __outputSeq = _M_x; + for (size_t __j = 0; __j < __r; ++__j) + { + array<_UIntType, __n> __intermedSeq{}; + if constexpr (__n == 4) + { + __intermedSeq[0] = __outputSeq[2]; + __intermedSeq[1] = __outputSeq[1]; + __intermedSeq[2] = __outputSeq[0]; + __intermedSeq[3] = __outputSeq[3]; + } + else + { + __intermedSeq[0] = __outputSeq[0]; + __intermedSeq[1] = __outputSeq[1]; + } + for (unsigned long __k = 0; __k < (__n/2); ++__k) + { + __outputSeq[2*__k] + = _S_mulhi(__intermedSeq[2*__k], multipliers[__k]) + ^ (((_M_k[__k] + (__j * round_consts[__k])) & max())) + ^ __intermedSeq[2*__k+1]; + + __outputSeq[(2*__k)+1] + = _S_mullo(__intermedSeq[2*__k], multipliers[__k]); + } + } + _M_y = __outputSeq; + } + + template + template + void + philox_engine<_UIntType, __w, __n, __r, __consts...>::seed(_Sseq& __q) + requires __is_seed_seq<_Sseq> + { + seed(0); + + const unsigned __p = 1 + ((__w - 1) / 32); + uint_least32_t __tmpArr[(__n/2) * __p]; + __q.generate(__tmpArr + 0, __tmpArr + ((__n/2) * __p)); + for (unsigned __k = 0; __k < (__n/2); ++__k) + { + unsigned long long __precalc = 0; + for (unsigned __j = 0; __j < __p; ++__j) + { + unsigned long long __multiplicand = (1ull << (32 * __j)); + __precalc += (__tmpArr[__k * __p + __j] * __multiplicand) & max(); + } + _M_k[__k] = __precalc; + } + } +#endif // philox_engine template std::basic_ostream<_CharT, _Traits>& @@ -3078,7 +3201,7 @@ namespace __detail _InputIteratorW __wbegin) : _M_int(), _M_den(), _M_cp(), _M_m() { - for (; __bbegin != __bend; ++__bbegin, ++__wbegin) + for (; __bbegin != __bend; ++__bbegin, (void) ++__wbegin) { _M_int.push_back(*__bbegin); _M_den.push_back(*__wbegin); diff --git a/libstdc++-v3/include/bits/ranges_algo.h b/libstdc++-v3/include/bits/ranges_algo.h index 6e1e06cb2d0f..5c9fe627aee0 100644 --- a/libstdc++-v3/include/bits/ranges_algo.h +++ b/libstdc++-v3/include/bits/ranges_algo.h @@ -1529,7 +1529,7 @@ namespace ranges } else // indirectly_copyable_storable<_Iter, _Out> { - auto __value = *__first; + iter_value_t<_Iter> __value(*__first); *__result = __value; while (++__first != __last) { @@ -1683,9 +1683,11 @@ namespace ranges if constexpr (__is_pod(iter_value_t<_Iter>)) if (__k == 1) { - auto __t = std::move(*__p); - ranges::move(__p + 1, __p + __n, __p); - *(__p + __n - 1) = std::move(__t); + auto __mid = ranges::next(__p, __n - 1); + auto __end = ranges::next(__mid); + iter_value_t<_Iter> __t(ranges::iter_move(__p)); + ranges::move(ranges::next(__p), __end, __p); + *__mid = std::move(__t); return {std::move(__ret), std::move(__lasti)}; } auto __q = __p + __k; @@ -1709,8 +1711,10 @@ namespace ranges if constexpr (__is_pod(iter_value_t<_Iter>)) if (__k == 1) { - auto __t = std::move(*(__p + __n - 1)); - ranges::move_backward(__p, __p + __n - 1, __p + __n); + auto __mid = ranges::next(__p, __n - 1); + auto __end = ranges::next(__mid); + iter_value_t<_Iter> __t(ranges::iter_move(__mid)); + ranges::move_backward(__p, __mid, __end); *__p = std::move(__t); return {std::move(__ret), std::move(__lasti)}; } @@ -1964,47 +1968,52 @@ namespace ranges using __uc_type = common_type_t::result_type, __ud_type>; - const __uc_type __urngrange = __g.max() - __g.min(); - const __uc_type __urange = __uc_type(__last - __first); - - if (__urngrange / __urange >= __urange) - // I.e. (__urngrange >= __urange * __urange) but without wrap issues. + if constexpr (sized_sentinel_for<_Sent, _Iter>) { - _Iter __i = __first + 1; - - // Since we know the range isn't empty, an even number of elements - // means an uneven number of elements /to swap/, in which case we - // do the first one up front: + const __uc_type __urngrange = __g.max() - __g.min(); + const __uc_type __urange = __uc_type(__last - __first); - if ((__urange % 2) == 0) + if (__urngrange / __urange >= __urange) + // I.e. (__urngrange >= __urange * __urange) but without wrap issues. { - __distr_type __d{0, 1}; - ranges::iter_swap(__i++, __first + __d(__g)); - } + _Iter __i = ranges::next(__first); - // Now we know that __last - __i is even, so we do the rest in pairs, - // using a single distribution invocation to produce swap positions - // for two successive elements at a time: + // Since we know the range isn't empty, an even number of elements + // means an uneven number of elements /to swap/, in which case we + // do the first one up front: - while (__i != __last) - { - const __uc_type __swap_range = __uc_type(__i - __first) + 1; + if ((__urange % 2) == 0) + { + __distr_type __d{0, 1}; + ranges::iter_swap(__i++, ranges::next(__first, __d(__g))); + } - const pair<__uc_type, __uc_type> __pospos = - __gen_two_uniform_ints(__swap_range, __swap_range + 1, __g); + // Now we know that __last - __i is even, so we do the rest in pairs, + // using a single distribution invocation to produce swap positions + // for two successive elements at a time: - ranges::iter_swap(__i++, __first + __pospos.first); - ranges::iter_swap(__i++, __first + __pospos.second); - } + while (__i != __last) + { + const __uc_type __swap_range = __uc_type(__i - __first) + 1; - return __i; + const pair<_DistanceType, _DistanceType> __pospos = + __gen_two_uniform_ints(__swap_range, __swap_range + 1, __g); + + ranges::iter_swap(__i++, ranges::next(__first, __pospos.first)); + ranges::iter_swap(__i++, ranges::next(__first, __pospos.second)); + } + + return __i; + } } __distr_type __d; - _Iter __i = __first + 1; + _Iter __i = ranges::next(__first); for (; __i != __last; ++__i) - ranges::iter_swap(__i, __first + __d(__g, __p_type(0, __i - __first))); + ranges::iter_swap(__i, + ranges::next(__first, + __d(__g, __p_type(0, __i - __first)))); return __i; } @@ -2015,8 +2024,15 @@ namespace ranges borrowed_iterator_t<_Range> operator()(_Range&& __r, _Gen&& __g) const { - return (*this)(ranges::begin(__r), ranges::end(__r), - std::forward<_Gen>(__g)); + if constexpr (sized_range<_Range> + && !sized_sentinel_for, + iterator_t<_Range>>) + return (*this)(ranges::begin(__r), + ranges::begin(__r) + ranges::distance(__r), + std::forward<_Gen>(__g)); + else + return (*this)(ranges::begin(__r), ranges::end(__r), + std::forward<_Gen>(__g)); } }; @@ -2059,9 +2075,9 @@ namespace ranges else { auto __comp_proj = __detail::__make_comp_proj(__comp, __proj); + iter_value_t<_Iter> __value(ranges::iter_move(ranges::prev(__last))); __detail::__push_heap(__first, (__last - __first) - 1, - 0, ranges::iter_move(__last - 1), - __comp_proj); + 0, std::move(__value), __comp_proj); return __last; } } @@ -2137,8 +2153,9 @@ namespace ranges { if (__last - __first > 1) { + auto __back = ranges::prev(__last); auto __comp_proj = __detail::__make_comp_proj(__comp, __proj); - __detail::__pop_heap(__first, __last - 1, __last - 1, __comp_proj); + __detail::__pop_heap(__first, __back, __back, __comp_proj); } return __last; } @@ -2356,12 +2373,12 @@ namespace ranges if (__first == __last) return; - for (_Iter __i = __first + 1; __i != __last; ++__i) + for (_Iter __i = ranges::next(__first); __i != __last; ++__i) { if (__comp(*__i, *__first)) { iter_value_t<_Iter> __val = ranges::iter_move(__i); - ranges::move_backward(__first, __i, __i + 1); + ranges::move_backward(__first, __i, ranges::next(__i)); *__first = std::move(__val); } else @@ -2383,10 +2400,11 @@ namespace ranges constexpr void __final_insertion_sort(_Iter __first, _Iter __last, _Comp __comp) { - if (__last - __first > __sort_threshold) + constexpr iter_difference_t<_Iter> __threshold = __sort_threshold; + if (__last - __first > __threshold) { - __detail::__insertion_sort(__first, __first + __sort_threshold, __comp); - __detail::__unguarded_insertion_sort(__first + __sort_threshold, __last, + __detail::__insertion_sort(__first, __first + __threshold, __comp); + __detail::__unguarded_insertion_sort(__first + __threshold, __last, __comp); } else @@ -2416,8 +2434,10 @@ namespace ranges __unguarded_partition_pivot(_Iter __first, _Iter __last, _Comp __comp) { _Iter __mid = __first + (__last - __first) / 2; - __detail::__move_median_to_first(__first, __first + 1, __mid, __last - 1, __comp); - return __detail::__unguarded_partition(__first + 1, __last, __first, __comp); + __detail::__move_median_to_first(__first, ranges::next(__first), __mid, + ranges::prev(__last), __comp); + return __detail::__unguarded_partition(ranges::next(__first), __last, + __first, __comp); } template @@ -2745,7 +2765,7 @@ namespace ranges std::__invoke(__proj, *__first))) { ranges::pop_heap(__first, __middle, __comp, __proj); - ranges::iter_swap(__middle-1, __i); + ranges::iter_swap(std::prev(__middle), __i); ranges::push_heap(__first, __middle, __comp, __proj); } ranges::sort_heap(__first, __middle, __comp, __proj); @@ -2812,7 +2832,7 @@ namespace ranges { ranges::pop_heap(__result_first, __result_real_last, __comp, __proj2); - *(__result_real_last-1) = *__first; + *ranges::prev(__result_real_last) = *__first; ranges::push_heap(__result_first, __result_real_last, __comp, __proj2); } @@ -2924,7 +2944,8 @@ namespace ranges { if (__depth_limit == 0) { - __detail::__heap_select(__first, __nth + 1, __last, __comp); + __detail::__heap_select(__first, ranges::next(__nth), __last, + __comp); // Place the nth largest element in its final position. ranges::iter_swap(__first, __nth); return; @@ -4198,7 +4219,7 @@ namespace ranges auto __first = ranges::begin(__r); auto __last = ranges::end(__r); __glibcxx_assert(__first != __last); - auto __result = *__first; + range_value_t<_Range> __result(*__first); while (++__first != __last) { auto&& __tmp = *__first; diff --git a/libstdc++-v3/include/bits/ranges_base.h b/libstdc++-v3/include/bits/ranges_base.h index 7df638db2d6f..1c4bf432c8f4 100644 --- a/libstdc++-v3/include/bits/ranges_base.h +++ b/libstdc++-v3/include/bits/ranges_base.h @@ -68,15 +68,18 @@ namespace ranges namespace __detail { + [[__gnu__::__always_inline__]] constexpr __max_size_type __to_unsigned_like(__max_size_type __t) noexcept { return __t; } + [[__gnu__::__always_inline__]] constexpr __max_size_type __to_unsigned_like(__max_diff_type __t) noexcept { return __max_size_type(__t); } template + [[__gnu__::__always_inline__]] constexpr auto __to_unsigned_like(_Tp __t) noexcept { return static_cast>(__t); } @@ -103,7 +106,7 @@ namespace ranges { private: template - static constexpr bool + static consteval bool _S_noexcept() { if constexpr (is_array_v>) @@ -118,8 +121,9 @@ namespace ranges template<__maybe_borrowed_range _Tp> requires is_array_v> || __member_begin<_Tp> || __adl_begin<_Tp> + [[nodiscard, __gnu__::__always_inline__]] constexpr auto - operator()[[nodiscard]](_Tp&& __t) const noexcept(_S_noexcept<_Tp&>()) + operator()(_Tp&& __t) const noexcept(_S_noexcept<_Tp&>()) { if constexpr (is_array_v>) { @@ -153,7 +157,7 @@ namespace ranges { private: template - static constexpr bool + static consteval bool _S_noexcept() { if constexpr (is_bounded_array_v>) @@ -168,8 +172,9 @@ namespace ranges template<__maybe_borrowed_range _Tp> requires is_bounded_array_v> || __member_end<_Tp> || __adl_end<_Tp> + [[nodiscard, __gnu__::__always_inline__]] constexpr auto - operator()[[nodiscard]](_Tp&& __t) const noexcept(_S_noexcept<_Tp&>()) + operator()(_Tp&& __t) const noexcept(_S_noexcept<_Tp&>()) { if constexpr (is_bounded_array_v>) { @@ -209,7 +214,7 @@ namespace ranges { private: template - static constexpr bool + static consteval bool _S_noexcept() { if constexpr (__member_rbegin<_Tp>) @@ -232,8 +237,9 @@ namespace ranges public: template<__maybe_borrowed_range _Tp> requires __member_rbegin<_Tp> || __adl_rbegin<_Tp> || __reversable<_Tp> + [[nodiscard, __gnu__::__always_inline__]] constexpr auto - operator()[[nodiscard]](_Tp&& __t) const + operator()(_Tp&& __t) const noexcept(_S_noexcept<_Tp&>()) { if constexpr (__member_rbegin<_Tp>) @@ -266,7 +272,7 @@ namespace ranges { private: template - static constexpr bool + static consteval bool _S_noexcept() { if constexpr (__member_rend<_Tp>) @@ -289,8 +295,9 @@ namespace ranges public: template<__maybe_borrowed_range _Tp> requires __member_rend<_Tp> || __adl_rend<_Tp> || __reversable<_Tp> + [[nodiscard, __gnu__::__always_inline__]] constexpr auto - operator()[[nodiscard]](_Tp&& __t) const + operator()(_Tp&& __t) const noexcept(_S_noexcept<_Tp&>()) { if constexpr (__member_rend<_Tp>) @@ -335,7 +342,7 @@ namespace ranges { private: template - static constexpr bool + static consteval bool _S_noexcept() { if constexpr (is_bounded_array_v>) @@ -353,8 +360,9 @@ namespace ranges template requires is_bounded_array_v> || __member_size<_Tp> || __adl_size<_Tp> || __sentinel_size<_Tp> + [[nodiscard, __gnu__::__always_inline__]] constexpr auto - operator()[[nodiscard]](_Tp&& __t) const noexcept(_S_noexcept<_Tp&>()) + operator()(_Tp&& __t) const noexcept(_S_noexcept<_Tp&>()) { if constexpr (is_bounded_array_v>) return extent_v>; @@ -373,8 +381,9 @@ namespace ranges // 3403. Domain of ranges::ssize(E) doesn't match ranges::size(E) template requires requires (_Tp& __t) { _Size{}(__t); } + [[nodiscard, __gnu__::__always_inline__]] constexpr auto - operator()[[nodiscard]](_Tp&& __t) const noexcept(noexcept(_Size{}(__t))) + operator()(_Tp&& __t) const noexcept(noexcept(_Size{}(__t))) { auto __size = _Size{}(__t); using __size_type = decltype(__size); @@ -413,7 +422,7 @@ namespace ranges { private: template - static constexpr bool + static consteval bool _S_noexcept() { if constexpr (__member_empty<_Tp>) @@ -429,8 +438,9 @@ namespace ranges template requires __member_empty<_Tp> || __size0_empty<_Tp> || __eq_iter_empty<_Tp> + [[nodiscard, __gnu__::__always_inline__]] constexpr bool - operator()[[nodiscard]](_Tp&& __t) const noexcept(_S_noexcept<_Tp&>()) + operator()(_Tp&& __t) const noexcept(_S_noexcept<_Tp&>()) { if constexpr (__member_empty<_Tp>) return bool(__t.empty()); @@ -458,7 +468,7 @@ namespace ranges { private: template - static constexpr bool + static consteval bool _S_noexcept() { if constexpr (__member_data<_Tp>) @@ -470,8 +480,9 @@ namespace ranges public: template<__maybe_borrowed_range _Tp> requires __member_data<_Tp> || __begin_data<_Tp> + [[nodiscard, __gnu__::__always_inline__]] constexpr auto - operator()[[nodiscard]](_Tp&& __t) const noexcept(_S_noexcept<_Tp>()) + operator()(_Tp&& __t) const noexcept(_S_noexcept<_Tp>()) { if constexpr (__member_data<_Tp>) return __t.data(); @@ -632,6 +643,7 @@ namespace ranges { #if __glibcxx_ranges_as_const // >= C++23 template + [[__gnu__::__always_inline__]] constexpr auto& __possibly_const_range(_Range& __r) noexcept { @@ -645,6 +657,7 @@ namespace ranges #else // If _To is an lvalue-reference, return const _Tp&, otherwise const _Tp&&. template + [[__gnu__::__always_inline__]] constexpr decltype(auto) __as_const(_Tp& __t) noexcept { @@ -887,7 +900,7 @@ namespace ranges if constexpr (assignable_from<_It&, _Sent>) __it = std::move(__bound); else if constexpr (random_access_iterator<_It>) - __it += 0; + __it += iter_difference_t<_It>(0); return __n; } else if (__diff > 0 ? __n >= __diff : __n <= __diff) @@ -907,7 +920,7 @@ namespace ranges { // inline any possible side effects of advance(it, n) if constexpr (random_access_iterator<_It>) - __it += 0; + __it += iter_difference_t<_It>(0); return 0; } } @@ -967,13 +980,13 @@ namespace ranges } template> _Sent> - [[nodiscard]] + [[nodiscard, __gnu__::__always_inline__]] constexpr iter_difference_t> operator()(_It&& __first, _Sent __last) const { return __last - static_cast&>(__first); } template - [[nodiscard]] + [[nodiscard, __gnu__::__always_inline__]] constexpr range_difference_t<_Range> operator()(_Range&& __r) const { @@ -991,7 +1004,7 @@ namespace ranges struct __next_fn final { template - [[nodiscard]] + [[nodiscard, __gnu__::__always_inline__]] constexpr _It operator()(_It __x) const { @@ -1000,7 +1013,7 @@ namespace ranges } template - [[nodiscard]] + [[nodiscard, __gnu__::__always_inline__]] constexpr _It operator()(_It __x, iter_difference_t<_It> __n) const { @@ -1009,7 +1022,7 @@ namespace ranges } template _Sent> - [[nodiscard]] + [[nodiscard, __gnu__::__always_inline__]] constexpr _It operator()(_It __x, _Sent __bound) const { @@ -1018,7 +1031,7 @@ namespace ranges } template _Sent> - [[nodiscard]] + [[nodiscard, __gnu__::__always_inline__]] constexpr _It operator()(_It __x, iter_difference_t<_It> __n, _Sent __bound) const { @@ -1034,7 +1047,7 @@ namespace ranges struct __prev_fn final { template - [[nodiscard]] + [[nodiscard, __gnu__::__always_inline__]] constexpr _It operator()(_It __x) const { @@ -1043,7 +1056,7 @@ namespace ranges } template - [[nodiscard]] + [[nodiscard, __gnu__::__always_inline__]] constexpr _It operator()(_It __x, iter_difference_t<_It> __n) const { @@ -1052,7 +1065,7 @@ namespace ranges } template - [[nodiscard]] + [[nodiscard, __gnu__::__always_inline__]] constexpr _It operator()(_It __x, iter_difference_t<_It> __n, _It __bound) const { diff --git a/libstdc++-v3/include/bits/ranges_util.h b/libstdc++-v3/include/bits/ranges_util.h index 84de258908ea..2aa8938edf25 100644 --- a/libstdc++-v3/include/bits/ranges_util.h +++ b/libstdc++-v3/include/bits/ranges_util.h @@ -761,7 +761,7 @@ namespace ranges auto __first = ranges::begin(__r); auto __last = ranges::end(__r); __glibcxx_assert(__first != __last); - auto __result = *__first; + range_value_t<_Range> __result(*__first); while (++__first != __last) { auto&& __tmp = *__first; diff --git a/libstdc++-v3/include/bits/sat_arith.h b/libstdc++-v3/include/bits/sat_arith.h index 97545d272ca7..e036fc88e40b 100644 --- a/libstdc++-v3/include/bits/sat_arith.h +++ b/libstdc++-v3/include/bits/sat_arith.h @@ -87,7 +87,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION return __z; if constexpr (is_unsigned_v<_Tp>) return __gnu_cxx::__int_traits<_Tp>::__max; - else if (__x < 0 != __y < 0) + else if ((__x < 0) != (__y < 0)) return __gnu_cxx::__int_traits<_Tp>::__min; else return __gnu_cxx::__int_traits<_Tp>::__max; diff --git a/libstdc++-v3/include/bits/shared_ptr_base.h b/libstdc++-v3/include/bits/shared_ptr_base.h index fb868e7afc36..b8c0d2e67a37 100644 --- a/libstdc++-v3/include/bits/shared_ptr_base.h +++ b/libstdc++-v3/include/bits/shared_ptr_base.h @@ -148,7 +148,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION // Increment the use count (used when the count is greater than zero). void _M_add_ref_copy() - { __gnu_cxx::__atomic_add_dispatch(&_M_use_count, 1); } + { _S_chk(__gnu_cxx::__exchange_and_add_dispatch(&_M_use_count, 1)); } // Increment the use count if it is non-zero, throw otherwise. void @@ -200,7 +200,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION // Increment the weak count. void _M_weak_add_ref() noexcept - { __gnu_cxx::__atomic_add_dispatch(&_M_weak_count, 1); } + { + // _M_weak_count can always use negative values because it cannot be + // observed by users (unlike _M_use_count). See _S_chk for details. + constexpr _Atomic_word __max = -1; + if (__gnu_cxx::__exchange_and_add_dispatch(&_M_weak_count, 1) == __max) + [[__unlikely__]] __builtin_trap(); + } // Decrement the weak count. void @@ -224,19 +230,81 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION long _M_get_use_count() const noexcept { + // If long is wider than _Atomic_word then we can treat _Atomic_word + // as unsigned, and so double its usable range. If the widths are the + // same then casting to unsigned and then to long is a no-op. + using _Up = typename make_unsigned<_Atomic_word>::type; + // No memory barrier is used here so there is no synchronization // with other threads. - return __atomic_load_n(&_M_use_count, __ATOMIC_RELAXED); + return (_Up) __atomic_load_n(&_M_use_count, __ATOMIC_RELAXED); } private: _Sp_counted_base(_Sp_counted_base const&) = delete; _Sp_counted_base& operator=(_Sp_counted_base const&) = delete; + // Called when incrementing _M_use_count to cause a trap on overflow. + // This should be passed the value of the counter before the increment. + static void + _S_chk(_Atomic_word __count) + { + // __max is the maximum allowed value for the shared reference count. + // All valid reference count values need to fit into [0,LONG_MAX) + // because users can observe the count via shared_ptr::use_count(). + // + // When long is wider than _Atomic_word, _M_use_count can go negative + // and the cast in _Sp_counted_base::use_count() will turn it into a + // positive value suitable for returning to users. The implementation + // only cares whether _M_use_count reaches zero after a decrement, + // so negative values are not a problem internally. + // So when possible, use -1 for __max (incrementing past that would + // overflow _M_use_count to 0, which means an empty shared_ptr). + // + // When long is not wider than _Atomic_word, __max is just the type's + // maximum positive value. We cannot use negative counts because they + // would not fit in [0,LONG_MAX) after casting to an unsigned type, + // which would cause use_count() to return bogus values. + constexpr _Atomic_word __max + = sizeof(long) > sizeof(_Atomic_word) + ? -1 : __gnu_cxx::__int_traits<_Atomic_word>::__max; + + if (__count == __max) [[__unlikely__]] + __builtin_trap(); + } + _Atomic_word _M_use_count; // #shared _Atomic_word _M_weak_count; // #weak + (#shared != 0) }; + // We use __atomic_add_single and __exchange_and_add_single in the _S_single + // member specializations because they use unsigned arithmetic and so avoid + // undefined overflow. + template<> + inline void + _Sp_counted_base<_S_single>::_M_add_ref_copy() + { + _S_chk(_M_use_count); + __gnu_cxx::__atomic_add_single(&_M_use_count, 1); + } + + template<> + inline void + _Sp_counted_base<_S_single>::_M_weak_release() noexcept + { + if (__gnu_cxx::__exchange_and_add_single(&_M_weak_count, -1) == 1) + _M_destroy(); + } + + template<> + inline long + _Sp_counted_base<_S_single>::_M_get_use_count() const noexcept + { + using _Up = typename make_unsigned<_Atomic_word>::type; + return (_Up) _M_use_count; + } + + template<> inline bool _Sp_counted_base<_S_single>:: @@ -244,7 +312,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { if (_M_use_count == 0) return false; - ++_M_use_count; + _M_add_ref_copy(); return true; } @@ -254,8 +322,15 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION _M_add_ref_lock_nothrow() noexcept { __gnu_cxx::__scoped_lock sentry(*this); - if (__gnu_cxx::__exchange_and_add_dispatch(&_M_use_count, 1) == 0) + if (auto __c = __gnu_cxx::__exchange_and_add_dispatch(&_M_use_count, 1)) + _S_chk(__c); + else { + // Count was zero, so we cannot lock it to get a shared_ptr. + // Reset to zero. This isn't racy, because there are no shared_ptr + // objects using this count and any other weak_ptr objects using it + // must call this function to modify _M_use_count, so would be + // synchronized by the mutex. _M_use_count = 0; return false; } @@ -279,23 +354,18 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION while (!__atomic_compare_exchange_n(&_M_use_count, &__count, __count + 1, true, __ATOMIC_ACQ_REL, __ATOMIC_RELAXED)); + _S_chk(__count); return true; } - template<> - inline void - _Sp_counted_base<_S_single>::_M_add_ref_copy() - { ++_M_use_count; } - template<> inline void _Sp_counted_base<_S_single>::_M_release() noexcept { - if (--_M_use_count == 0) + if (__gnu_cxx::__exchange_and_add_single(&_M_use_count, -1) == 1) { - _M_dispose(); - if (--_M_weak_count == 0) - _M_destroy(); + _M_dispose(); + _M_weak_release(); } } @@ -364,25 +434,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION #pragma GCC diagnostic pop } - template<> - inline void - _Sp_counted_base<_S_single>::_M_weak_add_ref() noexcept - { ++_M_weak_count; } - - template<> - inline void - _Sp_counted_base<_S_single>::_M_weak_release() noexcept - { - if (--_M_weak_count == 0) - _M_destroy(); - } - - template<> - inline long - _Sp_counted_base<_S_single>::_M_get_use_count() const noexcept - { return _M_use_count; } - - // Forward declarations. template class __shared_ptr; @@ -2012,6 +2063,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION template class __weak_ptr { + public: + using element_type = typename remove_extent<_Tp>::type; + + private: template using _Compatible = typename enable_if<__sp_compatible_with<_Yp*, _Tp*>::value, _Res>::type; @@ -2020,9 +2075,44 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION template using _Assignable = _Compatible<_Yp, __weak_ptr&>; - public: - using element_type = typename remove_extent<_Tp>::type; +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wc++17-extensions" // if constexpr + // Helper for construction/assignment: + template + static element_type* + _S_safe_upcast(const __weak_ptr<_Yp, _Lp>& __r) + { + // We know that _Yp and _Tp are compatible, that is, either + // _Yp* is convertible to _Tp* or _Yp is U[N] and _Tp is U cv []. + + // If _Yp is the same as _Tp after removing extents and cv + // qualifications, there's no pointer adjustments to do. This + // also allows us to support incomplete types. + using _At = typename remove_cv::type>::type; + using _Bt = typename remove_cv::type>::type; + if constexpr (is_same<_At, _Bt>::value) + return __r._M_ptr; + // If they're not the same type, but they're both scalars, + // we again don't need any adjustment. This allows us to support e.g. + // pointers to a differently cv qualified type X. + else if constexpr (__and_, is_scalar<_Bt>>::value) + return __r._M_ptr; +#if _GLIBCXX_USE_BUILTIN_TRAIT(__builtin_is_virtual_base_of) + // If _Tp is not a virtual base class of _Yp, the pointer + // conversion does not require dereferencing __r._M_ptr; just + // rely on the implicit conversion. + else if constexpr (!__builtin_is_virtual_base_of(_Tp, _Yp)) + return __r._M_ptr; +#endif + // Expensive path; must lock() and do the pointer conversion while + // a shared_ptr keeps the pointee alive (because we may need + // to dereference). + else + return __r.lock().get(); + } +#pragma GCC diagnostic pop + public: constexpr __weak_ptr() noexcept : _M_ptr(nullptr), _M_refcount() { } @@ -2047,8 +2137,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION // in multithreaded programs __r._M_ptr may be invalidated at any point. template> __weak_ptr(const __weak_ptr<_Yp, _Lp>& __r) noexcept - : _M_refcount(__r._M_refcount) - { _M_ptr = __r.lock().get(); } + : _M_ptr(_S_safe_upcast(__r)), _M_refcount(__r._M_refcount) + { } template> __weak_ptr(const __shared_ptr<_Yp, _Lp>& __r) noexcept @@ -2061,7 +2151,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION template> __weak_ptr(__weak_ptr<_Yp, _Lp>&& __r) noexcept - : _M_ptr(__r.lock().get()), _M_refcount(std::move(__r._M_refcount)) + : _M_ptr(_S_safe_upcast(__r)), _M_refcount(std::move(__r._M_refcount)) { __r._M_ptr = nullptr; } __weak_ptr& @@ -2071,7 +2161,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION _Assignable<_Yp> operator=(const __weak_ptr<_Yp, _Lp>& __r) noexcept { - _M_ptr = __r.lock().get(); + _M_ptr = _S_safe_upcast(__r); _M_refcount = __r._M_refcount; return *this; } @@ -2096,7 +2186,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION _Assignable<_Yp> operator=(__weak_ptr<_Yp, _Lp>&& __r) noexcept { - _M_ptr = __r.lock().get(); + _M_ptr = _S_safe_upcast(__r); _M_refcount = std::move(__r._M_refcount); __r._M_ptr = nullptr; return *this; diff --git a/libstdc++-v3/include/bits/stl_algo.h b/libstdc++-v3/include/bits/stl_algo.h index 81a2457ae6f2..bbd1800af779 100644 --- a/libstdc++-v3/include/bits/stl_algo.h +++ b/libstdc++-v3/include/bits/stl_algo.h @@ -85,21 +85,21 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION template _GLIBCXX20_CONSTEXPR void - __move_median_to_first(_Iterator __result,_Iterator __a, _Iterator __b, + __move_median_to_first(_Iterator __result, _Iterator __a, _Iterator __b, _Iterator __c, _Compare __comp) { - if (__comp(__a, __b)) + if (__comp(*__a, *__b)) { - if (__comp(__b, __c)) + if (__comp(*__b, *__c)) std::iter_swap(__result, __b); - else if (__comp(__a, __c)) + else if (__comp(*__a, *__c)) std::iter_swap(__result, __c); else std::iter_swap(__result, __a); } - else if (__comp(__a, __c)) + else if (__comp(*__a, *__c)) std::iter_swap(__result, __a); - else if (__comp(__b, __c)) + else if (__comp(*__b, *__c)) std::iter_swap(__result, __c); else std::iter_swap(__result, __b); @@ -113,7 +113,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION _Predicate __pred) { return std::__find_if(__first, __last, - __gnu_cxx::__ops::__negate(__pred)); + __gnu_cxx::__ops::not1(__pred)); } /// Like find_if_not(), but uses and updates a count of the @@ -125,7 +125,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION __find_if_not_n(_InputIterator __first, _Distance& __len, _Predicate __pred) { for (; __len; --__len, (void) ++__first) - if (!__pred(__first)) + if (!__pred(*__first)) break; return __first; } @@ -162,7 +162,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION __n = __count; _ForwardIterator __i = __first; ++__i; - while (__i != __last && __n != 1 && __unary_pred(__i)) + while (__i != __last && __n != 1 && __unary_pred(*__i)) { ++__i; --__n; @@ -201,10 +201,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION // __first here is always pointing to one past the last element of // next possible match. _RandomAccessIter __backTrack = __first; - while (__unary_pred(--__backTrack)) + while (__unary_pred(*--__backTrack)) { if (--__remainder == 0) - return (__first - __count); // Success + return __first - _DistanceType(__count); // Success } __remainder = __count + 1 - (__first - __backTrack); } @@ -339,7 +339,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION return std::__find_end(__first1, __last1, __first2, __last2, std::__iterator_category(__first1), std::__iterator_category(__first2), - __gnu_cxx::__ops::__iter_equal_to_iter()); + __gnu_cxx::__ops::equal_to()); } /** @@ -390,7 +390,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION return std::__find_end(__first1, __last1, __first2, __last2, std::__iterator_category(__first1), std::__iterator_category(__first2), - __gnu_cxx::__ops::__iter_comp_iter(__comp)); + __comp); } #if __cplusplus >= 201103L @@ -470,8 +470,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION __glibcxx_function_requires(_UnaryPredicateConcept<_Predicate, typename iterator_traits<_InputIterator>::value_type>) __glibcxx_requires_valid_range(__first, __last); - return std::__find_if_not(__first, __last, - __gnu_cxx::__ops::__pred_iter(__pred)); + return std::__find_if_not(__first, __last, __pred); } /** @@ -551,7 +550,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION _OutputIterator __result, _Predicate __pred) { for (; __first != __last; ++__first) - if (!__pred(__first)) + if (!__pred(*__first)) { *__result = *__first; ++__result; @@ -588,7 +587,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION __glibcxx_requires_valid_range(__first, __last); return std::__remove_copy_if(__first, __last, __result, - __gnu_cxx::__ops::__iter_equals_val(__value)); + __gnu_cxx::__ops::__equal_to(__value)); } /** @@ -621,8 +620,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION typename iterator_traits<_InputIterator>::value_type>) __glibcxx_requires_valid_range(__first, __last); - return std::__remove_copy_if(__first, __last, __result, - __gnu_cxx::__ops::__pred_iter(__pred)); + return std::__remove_copy_if(__first, __last, __result, __pred); } #if __cplusplus >= 201103L @@ -780,7 +778,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION __glibcxx_requires_valid_range(__first, __last); return std::__remove_if(__first, __last, - __gnu_cxx::__ops::__iter_equals_val(__value)); + __gnu_cxx::__ops::__equal_to(__value)); } /** @@ -813,8 +811,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION typename iterator_traits<_ForwardIterator>::value_type>) __glibcxx_requires_valid_range(__first, __last); - return std::__remove_if(__first, __last, - __gnu_cxx::__ops::__pred_iter(__pred)); + return std::__remove_if(__first, __last, __pred); } template @@ -828,7 +825,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION _ForwardIterator __next = __first; while (++__next != __last) { - if (__binary_pred(__first, __next)) + if (__binary_pred(*__first, *__next)) return __first; __first = __next; } @@ -850,7 +847,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION _ForwardIterator __dest = __first; ++__first; while (++__first != __last) - if (!__binary_pred(__dest, __first)) + if (!__binary_pred(*__dest, *__first)) *++__dest = _GLIBCXX_MOVE(*__first); return ++__dest; } @@ -881,8 +878,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION typename iterator_traits<_ForwardIterator>::value_type>) __glibcxx_requires_valid_range(__first, __last); - return std::__unique(__first, __last, - __gnu_cxx::__ops::__iter_equal_to_iter()); + return std::__unique(__first, __last, __gnu_cxx::__ops::equal_to()); } /** @@ -914,8 +910,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION typename iterator_traits<_ForwardIterator>::value_type>) __glibcxx_requires_valid_range(__first, __last); - return std::__unique(__first, __last, - __gnu_cxx::__ops::__iter_comp_iter(__binary_pred)); + return std::__unique(__first, __last, __binary_pred); } // _GLIBCXX_RESOLVE_LIB_DEFECTS @@ -934,7 +929,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION _ForwardIterator __prev = __first; *__result = *__first; while (++__first != __last) - if (!__binary_pred(__prev, __first)) + if (!__binary_pred(*__prev, *__first)) { *++__result = *__first; __prev = __first; @@ -956,7 +951,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION _Val __value = *__first; *__result = __value; while (++__first != __last) - if (!__binary_pred(std::__addressof(__value), __first)) + if (!__binary_pred(__value, *__first)) { __value = *__first; *++__result = __value; @@ -975,7 +970,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { *__result = *__first; while (++__first != __last) - if (!__binary_pred(__result, __first)) + if (!__binary_pred(*__result, *__first)) *++__result = *__first; return ++__result; } @@ -1258,9 +1253,12 @@ _GLIBCXX_BEGIN_INLINE_ABI_NAMESPACE(_V2) { if (__is_pod(_ValueType) && __k == 1) { + _RandomAccessIterator __mid = __p + _Distance(__n - 1); + _RandomAccessIterator __end = __mid; + ++__end; _ValueType __t = _GLIBCXX_MOVE(*__p); - _GLIBCXX_MOVE3(__p + 1, __p + __n, __p); - *(__p + __n - 1) = _GLIBCXX_MOVE(__t); + _GLIBCXX_MOVE3(__p + _Distance(1), __end, __p); + *__mid = _GLIBCXX_MOVE(__t); return __ret; } _RandomAccessIterator __q = __p + __k; @@ -1281,8 +1279,11 @@ _GLIBCXX_BEGIN_INLINE_ABI_NAMESPACE(_V2) __k = __n - __k; if (__is_pod(_ValueType) && __k == 1) { - _ValueType __t = _GLIBCXX_MOVE(*(__p + __n - 1)); - _GLIBCXX_MOVE_BACKWARD3(__p, __p + __n - 1, __p + __n); + _RandomAccessIterator __mid = __p + _Distance(__n - 1); + _RandomAccessIterator __end = __mid; + ++__end; + _ValueType __t = _GLIBCXX_MOVE(*__mid); + _GLIBCXX_MOVE_BACKWARD3(__p, __mid, __end); *__p = _GLIBCXX_MOVE(__t); return __ret; } @@ -1439,10 +1440,10 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2) // partition /// This is a helper function... - /// Requires __first != __last and !__pred(__first) + /// Requires __first != __last and !__pred(*__first) /// and __len == distance(__first, __last). /// - /// !__pred(__first) allows us to guarantee that we don't + /// !__pred(*__first) allows us to guarantee that we don't /// move-assign an element onto itself. template @@ -1462,14 +1463,14 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2) _ForwardIterator __result1 = __first; _Pointer __result2 = __buffer; - // The precondition guarantees that !__pred(__first), so + // The precondition guarantees that !__pred(*__first), so // move that element to the buffer before starting the loop. // This ensures that we only call __pred once per element. *__result2 = _GLIBCXX_MOVE(*__first); ++__result2; ++__first; for (; __first != __last; ++__first) - if (__pred(__first)) + if (__pred(*__first)) { *__result1 = _GLIBCXX_MOVE(*__first); ++__result1; @@ -1575,8 +1576,7 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2) typename iterator_traits<_ForwardIterator>::value_type>) __glibcxx_requires_valid_range(__first, __last); - return std::__stable_partition(__first, __last, - __gnu_cxx::__ops::__pred_iter(__pred)); + return std::__stable_partition(__first, __last, __pred); } #endif // HOSTED @@ -1592,7 +1592,7 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2) { std::__make_heap(__first, __middle, __comp); for (_RandomAccessIterator __i = __middle; __i < __last; ++__i) - if (__comp(__i, __first)) + if (__comp(*__i, *__first)) std::__pop_heap(__first, __middle, __i, __comp); } @@ -1625,7 +1625,7 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2) std::__make_heap(__result_first, __result_real_last, __comp); while (__first != __last) { - if (__comp(__first, __result_first)) + if (__comp(*__first, *__result_first)) std::__adjust_heap(__result_first, _DistanceType(0), _DistanceType(__result_real_last - __result_first), @@ -1683,7 +1683,7 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2) return std::__partial_sort_copy(__first, __last, __result_first, __result_last, - __gnu_cxx::__ops::__iter_less_iter()); + __gnu_cxx::__ops::less()); } /** @@ -1738,7 +1738,7 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2) return std::__partial_sort_copy(__first, __last, __result_first, __result_last, - __gnu_cxx::__ops::__iter_comp_iter(__comp)); + __comp); } /// @cond undocumented @@ -1754,7 +1754,7 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2) __val = _GLIBCXX_MOVE(*__last); _RandomAccessIterator __next = __last; --__next; - while (__comp(__val, __next)) + while (__comp(__val, *__next)) { *__last = _GLIBCXX_MOVE(*__next); __last = __next; @@ -1770,20 +1770,22 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2) __insertion_sort(_RandomAccessIterator __first, _RandomAccessIterator __last, _Compare __comp) { - if (__first == __last) return; + if (__first == __last) + return; - for (_RandomAccessIterator __i = __first + 1; __i != __last; ++__i) + typedef iterator_traits<_RandomAccessIterator> _IterTraits; + typedef typename _IterTraits::difference_type _Dist; + + for (_RandomAccessIterator __i = __first + _Dist(1); __i != __last; ++__i) { - if (__comp(__i, __first)) + if (__comp(*__i, *__first)) { - typename iterator_traits<_RandomAccessIterator>::value_type - __val = _GLIBCXX_MOVE(*__i); - _GLIBCXX_MOVE_BACKWARD3(__first, __i, __i + 1); + typename _IterTraits::value_type __val = _GLIBCXX_MOVE(*__i); + _GLIBCXX_MOVE_BACKWARD3(__first, __i, __i + _Dist(1)); *__first = _GLIBCXX_MOVE(__val); } else - std::__unguarded_linear_insert(__i, - __gnu_cxx::__ops::__val_comp_iter(__comp)); + std::__unguarded_linear_insert(__i, __comp); } } @@ -1795,8 +1797,7 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2) _RandomAccessIterator __last, _Compare __comp) { for (_RandomAccessIterator __i = __first; __i != __last; ++__i) - std::__unguarded_linear_insert(__i, - __gnu_cxx::__ops::__val_comp_iter(__comp)); + std::__unguarded_linear_insert(__i, __comp); } /** @@ -1812,10 +1813,13 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2) __final_insertion_sort(_RandomAccessIterator __first, _RandomAccessIterator __last, _Compare __comp) { - if (__last - __first > int(_S_threshold)) + typename iterator_traits<_RandomAccessIterator>::difference_type + __threshold = _S_threshold; + + if (__last - __first > __threshold) { - std::__insertion_sort(__first, __first + int(_S_threshold), __comp); - std::__unguarded_insertion_sort(__first + int(_S_threshold), __last, + std::__insertion_sort(__first, __first + __threshold, __comp); + std::__unguarded_insertion_sort(__first + __threshold, __last, __comp); } else @@ -1832,10 +1836,10 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2) { while (true) { - while (__comp(__first, __pivot)) + while (__comp(*__first, *__pivot)) ++__first; --__last; - while (__comp(__pivot, __last)) + while (__comp(*__pivot, *__last)) --__last; if (!(__first < __last)) return __first; @@ -1851,10 +1855,14 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2) __unguarded_partition_pivot(_RandomAccessIterator __first, _RandomAccessIterator __last, _Compare __comp) { - _RandomAccessIterator __mid = __first + (__last - __first) / 2; - std::__move_median_to_first(__first, __first + 1, __mid, __last - 1, + typedef iterator_traits<_RandomAccessIterator> _IterTraits; + typedef typename _IterTraits::difference_type _Dist; + + _RandomAccessIterator __mid = __first + _Dist((__last - __first) / 2); + _RandomAccessIterator __second = __first + _Dist(1); + std::__move_median_to_first(__first, __second, __mid, __last - _Dist(1), __comp); - return std::__unguarded_partition(__first + 1, __last, __first, __comp); + return std::__unguarded_partition(__second, __last, __first, __comp); } template @@ -1916,11 +1924,14 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2) _RandomAccessIterator __last, _Size __depth_limit, _Compare __comp) { + _RandomAccessIterator __after_nth = __nth; + ++__after_nth; + while (__last - __first > 3) { if (__depth_limit == 0) { - std::__heap_select(__first, __nth + 1, __last, __comp); + std::__heap_select(__first, __after_nth, __last, __comp); // Place the nth largest element in its final position. std::iter_swap(__first, __nth); return; @@ -1970,8 +1981,7 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2) __glibcxx_requires_partitioned_lower_pred(__first, __last, __val, __comp); - return std::__lower_bound(__first, __last, __val, - __gnu_cxx::__ops::__iter_comp_val(__comp)); + return std::__lower_bound(__first, __last, __val, __comp); } template @@ -1990,7 +2000,7 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2) _DistanceType __half = __len >> 1; _ForwardIterator __middle = __first; std::advance(__middle, __half); - if (__comp(__val, __middle)) + if (__comp(__val, *__middle)) __len = __half; else { @@ -2026,7 +2036,7 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2) __glibcxx_requires_partitioned_upper(__first, __last, __val); return std::__upper_bound(__first, __last, __val, - __gnu_cxx::__ops::__val_less_iter()); + __gnu_cxx::__ops::less()); } /** @@ -2057,17 +2067,14 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2) __glibcxx_requires_partitioned_upper_pred(__first, __last, __val, __comp); - return std::__upper_bound(__first, __last, __val, - __gnu_cxx::__ops::__val_comp_iter(__comp)); + return std::__upper_bound(__first, __last, __val, __comp); } - template + template _GLIBCXX20_CONSTEXPR pair<_ForwardIterator, _ForwardIterator> __equal_range(_ForwardIterator __first, _ForwardIterator __last, - const _Tp& __val, - _CompareItTp __comp_it_val, _CompareTpIt __comp_val_it) + const _Tp& __val, _Compare __comp) { typedef typename iterator_traits<_ForwardIterator>::difference_type _DistanceType; @@ -2079,21 +2086,21 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2) _DistanceType __half = __len >> 1; _ForwardIterator __middle = __first; std::advance(__middle, __half); - if (__comp_it_val(__middle, __val)) + if (__comp(*__middle, __val)) { __first = __middle; ++__first; __len = __len - __half - 1; } - else if (__comp_val_it(__val, __middle)) + else if (__comp(__val, *__middle)) __len = __half; else { _ForwardIterator __left - = std::__lower_bound(__first, __middle, __val, __comp_it_val); + = std::__lower_bound(__first, __middle, __val, __comp); std::advance(__first, __len); _ForwardIterator __right - = std::__upper_bound(++__middle, __first, __val, __comp_val_it); + = std::__upper_bound(++__middle, __first, __val, __comp); return pair<_ForwardIterator, _ForwardIterator>(__left, __right); } } @@ -2133,8 +2140,7 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2) __glibcxx_requires_partitioned_upper(__first, __last, __val); return std::__equal_range(__first, __last, __val, - __gnu_cxx::__ops::__iter_less_val(), - __gnu_cxx::__ops::__val_less_iter()); + __gnu_cxx::__ops::less()); } /** @@ -2171,9 +2177,7 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2) __glibcxx_requires_partitioned_upper_pred(__first, __last, __val, __comp); - return std::__equal_range(__first, __last, __val, - __gnu_cxx::__ops::__iter_comp_val(__comp), - __gnu_cxx::__ops::__val_comp_iter(__comp)); + return std::__equal_range(__first, __last, __val, __comp); } /** @@ -2202,8 +2206,7 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2) __glibcxx_requires_partitioned_upper(__first, __last, __val); _ForwardIterator __i - = std::__lower_bound(__first, __last, __val, - __gnu_cxx::__ops::__iter_less_val()); + = std::__lower_bound(__first, __last, __val, __gnu_cxx::__ops::less()); return __i != __last && !(__val < *__i); } @@ -2238,8 +2241,7 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2) __val, __comp); _ForwardIterator __i - = std::__lower_bound(__first, __last, __val, - __gnu_cxx::__ops::__iter_comp_val(__comp)); + = std::__lower_bound(__first, __last, __val, __comp); return __i != __last && !bool(__comp(__val, *__i)); } @@ -2255,7 +2257,7 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2) { while (__first1 != __last1 && __first2 != __last2) { - if (__comp(__first2, __first1)) + if (__comp(*__first2, *__first1)) { *__result = _GLIBCXX_MOVE(*__first2); ++__first2; @@ -2294,7 +2296,7 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2) --__last2; while (true) { - if (__comp(__last2, __last1)) + if (__comp(*__last2, *__last1)) { *--__result = _GLIBCXX_MOVE(*__last1); if (__first1 == __last1) @@ -2400,8 +2402,7 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2) __len11 = __len1 / 2; std::advance(__first_cut, __len11); __second_cut - = std::__lower_bound(__middle, __last, *__first_cut, - __gnu_cxx::__ops::__iter_comp_val(__comp)); + = std::__lower_bound(__middle, __last, *__first_cut, __comp); __len22 = std::distance(__middle, __second_cut); } else @@ -2409,8 +2410,7 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2) __len22 = __len2 / 2; std::advance(__second_cut, __len22); __first_cut - = std::__upper_bound(__first, __middle, *__second_cut, - __gnu_cxx::__ops::__val_comp_iter(__comp)); + = std::__upper_bound(__first, __middle, *__second_cut, __comp); __len11 = std::distance(__first, __first_cut); } @@ -2444,7 +2444,7 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2) if (__len1 + __len2 == 2) { - if (__comp(__middle, __first)) + if (__comp(*__middle, *__first)) std::iter_swap(__first, __middle); return; } @@ -2458,8 +2458,7 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2) __len11 = __len1 / 2; std::advance(__first_cut, __len11); __second_cut - = std::__lower_bound(__middle, __last, *__first_cut, - __gnu_cxx::__ops::__iter_comp_val(__comp)); + = std::__lower_bound(__middle, __last, *__first_cut, __comp); __len22 = std::distance(__middle, __second_cut); } else @@ -2467,8 +2466,7 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2) __len22 = __len2 / 2; std::advance(__second_cut, __len22); __first_cut - = std::__upper_bound(__first, __middle, *__second_cut, - __gnu_cxx::__ops::__val_comp_iter(__comp)); + = std::__upper_bound(__first, __middle, *__second_cut, __comp); __len11 = std::distance(__first, __first_cut); } @@ -2562,7 +2560,7 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2) __glibcxx_requires_irreflexive(__first, __last); std::__inplace_merge(__first, __middle, __last, - __gnu_cxx::__ops::__iter_less_iter()); + __gnu_cxx::__ops::less()); } /** @@ -2605,8 +2603,7 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2) __glibcxx_requires_sorted_pred(__middle, __last, __comp); __glibcxx_requires_irreflexive_pred(__first, __last, __comp); - std::__inplace_merge(__first, __middle, __last, - __gnu_cxx::__ops::__iter_comp_iter(__comp)); + std::__inplace_merge(__first, __middle, __last, __comp); } @@ -2620,7 +2617,7 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2) { while (__first1 != __last1 && __first2 != __last2) { - if (__comp(__first2, __first1)) + if (__comp(*__first2, *__first1)) { *__result = _GLIBCXX_MOVE(*__first2); ++__first2; @@ -2785,9 +2782,9 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2) { while (__first1 != __last1 && __first2 != __last2) { - if (__comp(__first2, __first1)) + if (__comp(*__first2, *__first1)) return false; - if (!__comp(__first1, __first2)) + if (!__comp(*__first1, *__first2)) ++__first2; ++__first1; } @@ -2834,7 +2831,7 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2) __glibcxx_requires_irreflexive2(__first2, __last2); return std::__includes(__first1, __last1, __first2, __last2, - __gnu_cxx::__ops::__iter_less_iter()); + __gnu_cxx::__ops::less()); } /** @@ -2880,8 +2877,7 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2) __glibcxx_requires_irreflexive_pred2(__first1, __last1, __comp); __glibcxx_requires_irreflexive_pred2(__first2, __last2, __comp); - return std::__includes(__first1, __last1, __first2, __last2, - __gnu_cxx::__ops::__iter_comp_iter(__comp)); + return std::__includes(__first1, __last1, __first2, __last2, __comp); } // nth_element @@ -2913,10 +2909,10 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2) { _BidirectionalIterator __ii = __i; --__i; - if (__comp(__i, __ii)) + if (__comp(*__i, *__ii)) { _BidirectionalIterator __j = __last; - while (!__comp(__i, --__j)) + while (!__comp(*__i, *--__j)) {} std::iter_swap(__i, __j); std::__reverse(__ii, __last, @@ -2958,8 +2954,7 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2) __glibcxx_requires_valid_range(__first, __last); __glibcxx_requires_irreflexive(__first, __last); - return std::__next_permutation - (__first, __last, __gnu_cxx::__ops::__iter_less_iter()); + return std::__next_permutation(__first, __last, __gnu_cxx::__ops::less()); } /** @@ -2992,8 +2987,7 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2) __glibcxx_requires_valid_range(__first, __last); __glibcxx_requires_irreflexive_pred(__first, __last, __comp); - return std::__next_permutation - (__first, __last, __gnu_cxx::__ops::__iter_comp_iter(__comp)); + return std::__next_permutation(__first, __last, __comp); } template @@ -3015,10 +3009,10 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2) { _BidirectionalIterator __ii = __i; --__i; - if (__comp(__ii, __i)) + if (__comp(*__ii, *__i)) { _BidirectionalIterator __j = __last; - while (!__comp(--__j, __i)) + while (!__comp(*--__j, *__i)) {} std::iter_swap(__i, __j); std::__reverse(__ii, __last, @@ -3061,8 +3055,7 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2) __glibcxx_requires_valid_range(__first, __last); __glibcxx_requires_irreflexive(__first, __last); - return std::__prev_permutation(__first, __last, - __gnu_cxx::__ops::__iter_less_iter()); + return std::__prev_permutation(__first, __last, __gnu_cxx::__ops::less()); } /** @@ -3095,8 +3088,7 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2) __glibcxx_requires_valid_range(__first, __last); __glibcxx_requires_irreflexive_pred(__first, __last, __comp); - return std::__prev_permutation(__first, __last, - __gnu_cxx::__ops::__iter_comp_iter(__comp)); + return std::__prev_permutation(__first, __last, __comp); } // replace @@ -3111,7 +3103,7 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2) _Predicate __pred, const _Tp& __new_value) { for (; __first != __last; ++__first, (void)++__result) - if (__pred(__first)) + if (__pred(*__first)) *__result = __new_value; else *__result = *__first; @@ -3148,8 +3140,8 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2) __glibcxx_requires_valid_range(__first, __last); return std::__replace_copy_if(__first, __last, __result, - __gnu_cxx::__ops::__iter_equals_val(__old_value), - __new_value); + __gnu_cxx::__ops::__equal_to(__old_value), + __new_value); } /** @@ -3183,9 +3175,8 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2) typename iterator_traits<_InputIterator>::value_type>) __glibcxx_requires_valid_range(__first, __last); - return std::__replace_copy_if(__first, __last, __result, - __gnu_cxx::__ops::__pred_iter(__pred), - __new_value); + return std::__replace_copy_if(__first, __last, __result, __pred, + __new_value); } #if __cplusplus >= 201103L @@ -3229,7 +3220,7 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2) _ForwardIterator __next = __first; for (++__next; __next != __last; __first = __next, (void)++__next) - if (__comp(__next, __first)) + if (__comp(*__next, *__first)) return __next; return __next; } @@ -3255,7 +3246,7 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2) __glibcxx_requires_irreflexive(__first, __last); return std::__is_sorted_until(__first, __last, - __gnu_cxx::__ops::__iter_less_iter()); + __gnu_cxx::__ops::less()); } /** @@ -3281,8 +3272,7 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2) __glibcxx_requires_valid_range(__first, __last); __glibcxx_requires_irreflexive_pred(__first, __last, __comp); - return std::__is_sorted_until(__first, __last, - __gnu_cxx::__ops::__iter_comp_iter(__comp)); + return std::__is_sorted_until(__first, __last, __comp); } /** @@ -3335,7 +3325,7 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2) return std::make_pair(__first, __first); _ForwardIterator __min{}, __max{}; - if (__comp(__next, __first)) + if (__comp(*__next, *__first)) { __min = __next; __max = __first; @@ -3354,25 +3344,25 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2) __next = __first; if (++__next == __last) { - if (__comp(__first, __min)) + if (__comp(*__first, *__min)) __min = __first; - else if (!__comp(__first, __max)) + else if (!__comp(*__first, *__max)) __max = __first; break; } - if (__comp(__next, __first)) + if (__comp(*__next, *__first)) { - if (__comp(__next, __min)) + if (__comp(*__next, *__min)) __min = __next; - if (!__comp(__first, __max)) + if (!__comp(*__first, *__max)) __max = __first; } else { - if (__comp(__first, __min)) + if (__comp(*__first, *__min)) __min = __first; - if (!__comp(__next, __max)) + if (!__comp(*__next, *__max)) __max = __next; } @@ -3406,8 +3396,7 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2) __glibcxx_requires_valid_range(__first, __last); __glibcxx_requires_irreflexive(__first, __last); - return std::__minmax_element(__first, __last, - __gnu_cxx::__ops::__iter_less_iter()); + return std::__minmax_element(__first, __last, __gnu_cxx::__ops::less()); } /** @@ -3436,8 +3425,7 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2) __glibcxx_requires_valid_range(__first, __last); __glibcxx_requires_irreflexive_pred(__first, __last, __comp); - return std::__minmax_element(__first, __last, - __gnu_cxx::__ops::__iter_comp_iter(__comp)); + return std::__minmax_element(__first, __last, __comp); } template @@ -3448,7 +3436,7 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2) __glibcxx_requires_irreflexive(__l.begin(), __l.end()); pair __p = std::__minmax_element(__l.begin(), __l.end(), - __gnu_cxx::__ops::__iter_less_iter()); + __gnu_cxx::__ops::less()); return std::make_pair(*__p.first, *__p.second); } @@ -3459,8 +3447,7 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2) { __glibcxx_requires_irreflexive_pred(__l.begin(), __l.end(), __comp); pair __p = - std::__minmax_element(__l.begin(), __l.end(), - __gnu_cxx::__ops::__iter_comp_iter(__comp)); + std::__minmax_element(__l.begin(), __l.end(), __comp); return std::make_pair(*__p.first, *__p.second); } @@ -3493,11 +3480,10 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2) typename iterator_traits<_ForwardIterator2>::value_type>) __glibcxx_requires_valid_range(__first1, __last1); - return std::__is_permutation(__first1, __last1, __first2, - __gnu_cxx::__ops::__iter_comp_iter(__pred)); + return std::__is_permutation(__first1, __last1, __first2, __pred); } -#if __cplusplus > 201103L +#if __glibcxx_robust_nonmodifying_seq_ops // C++ >= 14 #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wc++17-extensions" // if constexpr template= 17 /** @@ -3822,7 +3805,8 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO { if (__n2 <= 0) return __first; - auto __last = __first + __n2; + typename iterator_traits<_InputIterator>::difference_type __d = __n2; + auto __last = __first + __d; std::for_each(__first, __last, std::move(__f)); return __last; } @@ -3892,7 +3876,7 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO #endif return std::__find_if(__first, __last, - __gnu_cxx::__ops::__iter_equals_val(__val)); + __gnu_cxx::__ops::__equal_to(__val)); } /** @@ -3917,8 +3901,7 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO typename iterator_traits<_InputIterator>::value_type>) __glibcxx_requires_valid_range(__first, __last); - return std::__find_if(__first, __last, - __gnu_cxx::__ops::__pred_iter(__pred)); + return std::__find_if(__first, __last, __pred); } /** @@ -4023,7 +4006,7 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO __glibcxx_requires_valid_range(__first, __last); return std::__adjacent_find(__first, __last, - __gnu_cxx::__ops::__iter_equal_to_iter()); + __gnu_cxx::__ops::equal_to()); } /** @@ -4050,8 +4033,7 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO typename iterator_traits<_ForwardIterator>::value_type>) __glibcxx_requires_valid_range(__first, __last); - return std::__adjacent_find(__first, __last, - __gnu_cxx::__ops::__iter_comp_iter(__binary_pred)); + return std::__adjacent_find(__first, __last, __binary_pred); } /** @@ -4075,7 +4057,7 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO __glibcxx_requires_valid_range(__first, __last); return std::__count_if(__first, __last, - __gnu_cxx::__ops::__iter_equals_val(__value)); + __gnu_cxx::__ops::__equal_to(__value)); } /** @@ -4098,8 +4080,7 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO typename iterator_traits<_InputIterator>::value_type>) __glibcxx_requires_valid_range(__first, __last); - return std::__count_if(__first, __last, - __gnu_cxx::__ops::__pred_iter(__pred)); + return std::__count_if(__first, __last, __pred); } /** @@ -4144,7 +4125,7 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO __glibcxx_requires_valid_range(__first2, __last2); return std::__search(__first1, __last1, __first2, __last2, - __gnu_cxx::__ops::__iter_equal_to_iter()); + __gnu_cxx::__ops::equal_to()); } /** @@ -4175,7 +4156,7 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO __glibcxx_requires_valid_range(__first, __last); return std::__search_n(__first, __last, __count, - __gnu_cxx::__ops::__iter_equals_val(__val)); + __gnu_cxx::__ops::__equal_to(__val)); } @@ -4211,7 +4192,7 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO __glibcxx_requires_valid_range(__first, __last); return std::__search_n(__first, __last, __count, - __gnu_cxx::__ops::__iter_comp_val(__binary_pred, __val)); + __gnu_cxx::__ops::bind2nd(__binary_pred, __val)); } #if __cplusplus >= 201703L @@ -4468,7 +4449,7 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO if (__first == __last) return __result; return std::__unique_copy(__first, __last, __result, - __gnu_cxx::__ops::__iter_equal_to_iter(), + __gnu_cxx::__ops::equal_to(), std::__iterator_category(__first)); } @@ -4509,8 +4490,7 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO if (__first == __last) return __result; - return std::__unique_copy(__first, __last, __result, - __gnu_cxx::__ops::__iter_comp_iter(__binary_pred), + return std::__unique_copy(__first, __last, __result, __binary_pred, std::__iterator_category(__first)); } @@ -4544,6 +4524,9 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO if (__first == __last) return; + typedef typename iterator_traits<_RandomAccessIterator>::difference_type + _Dist; + #if RAND_MAX < __INT_MAX__ if (__builtin_expect((__last - __first) >= RAND_MAX / 4, 0)) { @@ -4551,14 +4534,15 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO // instead of using rand() for all the random numbers needed. unsigned __xss = (unsigned)std::rand() ^ ((unsigned)std::rand() << 15); - for (_RandomAccessIterator __i = __first + 1; __i != __last; ++__i) + for (_RandomAccessIterator __i = __first + _Dist(1); __i != __last; + ++__i) { __xss += !__xss; __xss ^= __xss << 13; __xss ^= __xss >> 17; __xss ^= __xss << 5; - _RandomAccessIterator __j = __first - + (__xss % ((__i - __first) + 1)); + _RandomAccessIterator __j + = __first + _Dist(__xss % ((__i - __first) + 1)); if (__i != __j) std::iter_swap(__i, __j); } @@ -4566,11 +4550,11 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO } #endif - for (_RandomAccessIterator __i = __first + 1; __i != __last; ++__i) + for (_RandomAccessIterator __i = __first + _Dist(1); __i != __last; ++__i) { // XXX rand() % N is not uniformly distributed - _RandomAccessIterator __j = __first - + (std::rand() % ((__i - __first) + 1)); + _RandomAccessIterator __j + = __first + _Dist(std::rand() % ((__i - __first) + 1)); if (__i != __j) std::iter_swap(__i, __j); } @@ -4611,9 +4595,14 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO if (__first == __last) return; - for (_RandomAccessIterator __i = __first + 1; __i != __last; ++__i) + + typedef typename iterator_traits<_RandomAccessIterator>::difference_type + _Dist; + + for (_RandomAccessIterator __i = __first + _Dist(1); __i != __last; ++__i) { - _RandomAccessIterator __j = __first + __rand((__i - __first) + 1); + _RandomAccessIterator __j + = __first + _Dist(__rand((__i - __first) + 1)); if (__i != __j) std::iter_swap(__i, __j); } @@ -4688,7 +4677,7 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO __glibcxx_requires_irreflexive(__first, __last); std::__partial_sort(__first, __middle, __last, - __gnu_cxx::__ops::__iter_less_iter()); + __gnu_cxx::__ops::less()); } /** @@ -4728,8 +4717,7 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO __glibcxx_requires_valid_range(__middle, __last); __glibcxx_requires_irreflexive_pred(__first, __last, __comp); - std::__partial_sort(__first, __middle, __last, - __gnu_cxx::__ops::__iter_comp_iter(__comp)); + std::__partial_sort(__first, __middle, __last, __comp); } /** @@ -4767,7 +4755,7 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO std::__introselect(__first, __nth, __last, std::__lg(__last - __first) * 2, - __gnu_cxx::__ops::__iter_less_iter()); + __gnu_cxx::__ops::less()); } /** @@ -4808,7 +4796,7 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO std::__introselect(__first, __nth, __last, std::__lg(__last - __first) * 2, - __gnu_cxx::__ops::__iter_comp_iter(__comp)); + __comp); } /** @@ -4838,7 +4826,7 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO __glibcxx_requires_valid_range(__first, __last); __glibcxx_requires_irreflexive(__first, __last); - std::__sort(__first, __last, __gnu_cxx::__ops::__iter_less_iter()); + std::__sort(__first, __last, __gnu_cxx::__ops::less()); } /** @@ -4871,7 +4859,7 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO __glibcxx_requires_valid_range(__first, __last); __glibcxx_requires_irreflexive_pred(__first, __last, __comp); - std::__sort(__first, __last, __gnu_cxx::__ops::__iter_comp_iter(__comp)); + std::__sort(__first, __last, __comp); } template @@ -5069,7 +5055,7 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO __glibcxx_requires_irreflexive(__first, __last); _GLIBCXX_STD_A::__stable_sort(__first, __last, - __gnu_cxx::__ops::__iter_less_iter()); + __gnu_cxx::__ops::less()); } /** @@ -5105,13 +5091,11 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO __glibcxx_requires_valid_range(__first, __last); __glibcxx_requires_irreflexive_pred(__first, __last, __comp); - _GLIBCXX_STD_A::__stable_sort(__first, __last, - __gnu_cxx::__ops::__iter_comp_iter(__comp)); + _GLIBCXX_STD_A::__stable_sort(__first, __last, __comp); } template + typename _OutputIterator, typename _Compare> _GLIBCXX20_CONSTEXPR _OutputIterator __set_union(_InputIterator1 __first1, _InputIterator1 __last1, @@ -5120,12 +5104,12 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO { while (__first1 != __last1 && __first2 != __last2) { - if (__comp(__first1, __first2)) + if (__comp(*__first1, *__first2)) { *__result = *__first1; ++__first1; } - else if (__comp(__first2, __first1)) + else if (__comp(*__first2, *__first1)) { *__result = *__first2; ++__first2; @@ -5187,9 +5171,8 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO __glibcxx_requires_irreflexive2(__first1, __last1); __glibcxx_requires_irreflexive2(__first2, __last2); - return _GLIBCXX_STD_A::__set_union(__first1, __last1, - __first2, __last2, __result, - __gnu_cxx::__ops::__iter_less_iter()); + return _GLIBCXX_STD_A::__set_union(__first1, __last1, __first2, __last2, + __result, __gnu_cxx::__ops::less()); } /** @@ -5238,14 +5221,12 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO __glibcxx_requires_irreflexive_pred2(__first1, __last1, __comp); __glibcxx_requires_irreflexive_pred2(__first2, __last2, __comp); - return _GLIBCXX_STD_A::__set_union(__first1, __last1, - __first2, __last2, __result, - __gnu_cxx::__ops::__iter_comp_iter(__comp)); + return _GLIBCXX_STD_A::__set_union(__first1, __last1, __first2, __last2, + __result, __comp); } template + typename _OutputIterator, typename _Compare> _GLIBCXX20_CONSTEXPR _OutputIterator __set_intersection(_InputIterator1 __first1, _InputIterator1 __last1, @@ -5253,9 +5234,9 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO _OutputIterator __result, _Compare __comp) { while (__first1 != __last1 && __first2 != __last2) - if (__comp(__first1, __first2)) + if (__comp(*__first1, *__first2)) ++__first1; - else if (__comp(__first2, __first1)) + else if (__comp(*__first2, *__first1)) ++__first2; else { @@ -5309,9 +5290,9 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO __glibcxx_requires_irreflexive2(__first1, __last1); __glibcxx_requires_irreflexive2(__first2, __last2); - return _GLIBCXX_STD_A::__set_intersection(__first1, __last1, - __first2, __last2, __result, - __gnu_cxx::__ops::__iter_less_iter()); + return _GLIBCXX_STD_A:: + __set_intersection(__first1, __last1, __first2, __last2, + __result, __gnu_cxx::__ops::less()); } /** @@ -5359,14 +5340,13 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO __glibcxx_requires_irreflexive_pred2(__first1, __last1, __comp); __glibcxx_requires_irreflexive_pred2(__first2, __last2, __comp); - return _GLIBCXX_STD_A::__set_intersection(__first1, __last1, - __first2, __last2, __result, - __gnu_cxx::__ops::__iter_comp_iter(__comp)); + return _GLIBCXX_STD_A:: + __set_intersection(__first1, __last1, __first2, __last2, + __result, __comp); } template + typename _OutputIterator, typename _Compare> _GLIBCXX20_CONSTEXPR _OutputIterator __set_difference(_InputIterator1 __first1, _InputIterator1 __last1, @@ -5374,13 +5354,13 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO _OutputIterator __result, _Compare __comp) { while (__first1 != __last1 && __first2 != __last2) - if (__comp(__first1, __first2)) + if (__comp(*__first1, *__first2)) { *__result = *__first1; ++__first1; ++__result; } - else if (__comp(__first2, __first1)) + else if (__comp(*__first2, *__first1)) ++__first2; else { @@ -5434,9 +5414,9 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO __glibcxx_requires_irreflexive2(__first1, __last1); __glibcxx_requires_irreflexive2(__first2, __last2); - return _GLIBCXX_STD_A::__set_difference(__first1, __last1, - __first2, __last2, __result, - __gnu_cxx::__ops::__iter_less_iter()); + return _GLIBCXX_STD_A:: + __set_difference(__first1, __last1, __first2, __last2, __result, + __gnu_cxx::__ops::less()); } /** @@ -5486,9 +5466,9 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO __glibcxx_requires_irreflexive_pred2(__first1, __last1, __comp); __glibcxx_requires_irreflexive_pred2(__first2, __last2, __comp); - return _GLIBCXX_STD_A::__set_difference(__first1, __last1, - __first2, __last2, __result, - __gnu_cxx::__ops::__iter_comp_iter(__comp)); + return _GLIBCXX_STD_A:: + __set_difference(__first1, __last1, __first2, __last2, __result, + __comp); } template @@ -5637,7 +5617,7 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO return __first; _ForwardIterator __result = __first; while (++__first != __last) - if (__comp(__first, __result)) + if (__comp(*__first, *__result)) __result = __first; return __result; } @@ -5651,8 +5631,8 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO */ template _GLIBCXX_NODISCARD _GLIBCXX14_CONSTEXPR - _ForwardIterator - inline min_element(_ForwardIterator __first, _ForwardIterator __last) + inline _ForwardIterator + min_element(_ForwardIterator __first, _ForwardIterator __last) { // concept requirements __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>) @@ -5662,7 +5642,7 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO __glibcxx_requires_irreflexive(__first, __last); return _GLIBCXX_STD_A::__min_element(__first, __last, - __gnu_cxx::__ops::__iter_less_iter()); + __gnu_cxx::__ops::less()); } /** @@ -5688,8 +5668,7 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO __glibcxx_requires_valid_range(__first, __last); __glibcxx_requires_irreflexive_pred(__first, __last, __comp); - return _GLIBCXX_STD_A::__min_element(__first, __last, - __gnu_cxx::__ops::__iter_comp_iter(__comp)); + return _GLIBCXX_STD_A::__min_element(__first, __last, __comp); } template @@ -5701,7 +5680,7 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO if (__first == __last) return __first; _ForwardIterator __result = __first; while (++__first != __last) - if (__comp(__result, __first)) + if (__comp(*__result, *__first)) __result = __first; return __result; } @@ -5726,7 +5705,7 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO __glibcxx_requires_irreflexive(__first, __last); return _GLIBCXX_STD_A::__max_element(__first, __last, - __gnu_cxx::__ops::__iter_less_iter()); + __gnu_cxx::__ops::less()); } /** @@ -5752,8 +5731,7 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO __glibcxx_requires_valid_range(__first, __last); __glibcxx_requires_irreflexive_pred(__first, __last, __comp); - return _GLIBCXX_STD_A::__max_element(__first, __last, - __gnu_cxx::__ops::__iter_comp_iter(__comp)); + return _GLIBCXX_STD_A::__max_element(__first, __last, __comp); } #if __cplusplus >= 201103L @@ -5765,7 +5743,7 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO { __glibcxx_requires_irreflexive(__l.begin(), __l.end()); return *_GLIBCXX_STD_A::__min_element(__l.begin(), __l.end(), - __gnu_cxx::__ops::__iter_less_iter()); + __gnu_cxx::__ops::less()); } template @@ -5774,8 +5752,7 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO min(initializer_list<_Tp> __l, _Compare __comp) { __glibcxx_requires_irreflexive_pred(__l.begin(), __l.end(), __comp); - return *_GLIBCXX_STD_A::__min_element(__l.begin(), __l.end(), - __gnu_cxx::__ops::__iter_comp_iter(__comp)); + return *_GLIBCXX_STD_A::__min_element(__l.begin(), __l.end(), __comp); } template @@ -5785,7 +5762,7 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO { __glibcxx_requires_irreflexive(__l.begin(), __l.end()); return *_GLIBCXX_STD_A::__max_element(__l.begin(), __l.end(), - __gnu_cxx::__ops::__iter_less_iter()); + __gnu_cxx::__ops::less()); } template @@ -5794,12 +5771,11 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO max(initializer_list<_Tp> __l, _Compare __comp) { __glibcxx_requires_irreflexive_pred(__l.begin(), __l.end(), __comp); - return *_GLIBCXX_STD_A::__max_element(__l.begin(), __l.end(), - __gnu_cxx::__ops::__iter_comp_iter(__comp)); + return *_GLIBCXX_STD_A::__max_element(__l.begin(), __l.end(), __comp); } #endif // C++11 -#if __cplusplus >= 201402L +#if __cplusplus >= 201402L // C++17 std::sample and C++14 experimental::sample /// Reservoir sampling algorithm. template diff --git a/libstdc++-v3/include/bits/stl_algobase.h b/libstdc++-v3/include/bits/stl_algobase.h index b104ec2536a0..443cbef76dee 100644 --- a/libstdc++-v3/include/bits/stl_algobase.h +++ b/libstdc++-v3/include/bits/stl_algobase.h @@ -1150,10 +1150,12 @@ _GLIBCXX_END_NAMESPACE_CONTAINER if (__n <= 0) return __first; - __glibcxx_requires_can_increment(__first, __n); + typename iterator_traits<_OutputIterator>::difference_type __d = __n; + __glibcxx_requires_can_increment(__first, __d); - std::__fill_a(__first, __first + __n, __value); - return __first + __n; + _OutputIterator __last = __first + __d; + std::__fill_a(__first, __last, __value); + return __last; } /** @@ -1310,11 +1312,11 @@ _GLIBCXX_END_NAMESPACE_CONTAINER __newlast1(_RAI1 __first1, _RAI1 __last1, _RAI2 __first2, _RAI2 __last2) { - const typename iterator_traits<_RAI1>::difference_type - __diff1 = __last1 - __first1; - const typename iterator_traits<_RAI2>::difference_type - __diff2 = __last2 - __first2; - return __diff2 < __diff1 ? __first1 + __diff2 : __last1; + typedef typename iterator_traits<_RAI1>::difference_type _Diff1; + typedef typename iterator_traits<_RAI2>::difference_type _Diff2; + const _Diff1 __diff1 = __last1 - __first1; + const _Diff2 __diff2 = __last2 - __first2; + return __diff2 < __diff1 ? __first1 + _Diff1(__diff2) : __last1; } template @@ -1338,9 +1340,9 @@ _GLIBCXX_END_NAMESPACE_CONTAINER for (; __first1 != __last1 && __rai_type::__cnd2(__first2, __last2); ++__first1, (void)++__first2) { - if (__comp(__first1, __first2)) + if (__comp(*__first1, *__first2)) return true; - if (__comp(__first2, __first1)) + if (__comp(*__first2, *__first1)) return false; } return __first1 == __last1 && __first2 != __last2; @@ -1354,10 +1356,10 @@ _GLIBCXX_END_NAMESPACE_CONTAINER static bool __lc(_II1 __first1, _II1 __last1, _II2 __first2, _II2 __last2) { - using __gnu_cxx::__ops::__iter_less_iter; + using __gnu_cxx::__ops::less; return std::__lexicographical_compare_impl(__first1, __last1, __first2, __last2, - __iter_less_iter()); + less()); } template @@ -1513,7 +1515,7 @@ _GLIBCXX_END_NAMESPACE_CONTAINER _DistanceType __half = __len >> 1; _ForwardIterator __middle = __first; std::advance(__middle, __half); - if (__comp(__middle, __val)) + if (__comp(*__middle, __val)) { __first = __middle; ++__first; @@ -1549,7 +1551,7 @@ _GLIBCXX_END_NAMESPACE_CONTAINER __glibcxx_requires_partitioned_lower(__first, __last, __val); return std::__lower_bound(__first, __last, __val, - __gnu_cxx::__ops::__iter_less_val()); + __gnu_cxx::__ops::less()); } /// This is a helper function for the sort routines and for random.tcc. @@ -1823,8 +1825,7 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO __glibcxx_requires_valid_range(__first2, __last2); return std::__lexicographical_compare_impl - (__first1, __last1, __first2, __last2, - __gnu_cxx::__ops::__iter_comp_iter(__comp)); + (__first1, __last1, __first2, __last2, __comp); } #if __cpp_lib_three_way_comparison @@ -1932,7 +1933,7 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO __mismatch(_InputIterator1 __first1, _InputIterator1 __last1, _InputIterator2 __first2, _BinaryPredicate __binary_pred) { - while (__first1 != __last1 && __binary_pred(__first1, __first2)) + while (__first1 != __last1 && __binary_pred(*__first1, *__first2)) { ++__first1; ++__first2; @@ -1968,7 +1969,7 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO __glibcxx_requires_valid_range(__first1, __last1); return _GLIBCXX_STD_A::__mismatch(__first1, __last1, __first2, - __gnu_cxx::__ops::__iter_equal_to_iter()); + __gnu_cxx::__ops::equal_to()); } /** @@ -2000,7 +2001,7 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO __glibcxx_requires_valid_range(__first1, __last1); return _GLIBCXX_STD_A::__mismatch(__first1, __last1, __first2, - __gnu_cxx::__ops::__iter_comp_iter(__binary_pred)); + __binary_pred); } #if __glibcxx_robust_nonmodifying_seq_ops // C++ >= 14 @@ -2013,7 +2014,7 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO _BinaryPredicate __binary_pred) { while (__first1 != __last1 && __first2 != __last2 - && __binary_pred(__first1, __first2)) + && __binary_pred(*__first1, *__first2)) { ++__first1; ++__first2; @@ -2051,7 +2052,7 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO __glibcxx_requires_valid_range(__first2, __last2); return _GLIBCXX_STD_A::__mismatch(__first1, __last1, __first2, __last2, - __gnu_cxx::__ops::__iter_equal_to_iter()); + __gnu_cxx::__ops::equal_to()); } /** @@ -2086,9 +2087,9 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO __glibcxx_requires_valid_range(__first2, __last2); return _GLIBCXX_STD_A::__mismatch(__first1, __last1, __first2, __last2, - __gnu_cxx::__ops::__iter_comp_iter(__binary_pred)); + __binary_pred); } -#endif +#endif // __glibcxx_robust_nonmodifying_seq_ops _GLIBCXX_END_NAMESPACE_ALGO @@ -2099,7 +2100,7 @@ _GLIBCXX_END_NAMESPACE_ALGO __find_if(_Iterator __first, _Iterator __last, _Predicate __pred) { #pragma GCC unroll 4 - while (__first != __last && !__pred(__first)) + while (__first != __last && !__pred(*__first)) ++__first; return __first; } @@ -2111,7 +2112,7 @@ _GLIBCXX_END_NAMESPACE_ALGO { typename iterator_traits<_InputIterator>::difference_type __n = 0; for (; __first != __last; ++__first) - if (__pred(__first)) + if (__pred(*__first)) ++__n; return __n; } @@ -2128,7 +2129,7 @@ _GLIBCXX_END_NAMESPACE_ALGO _ForwardIterator __result = __first; ++__first; for (; __first != __last; ++__first) - if (!__pred(__first)) + if (!__pred(*__first)) { *__result = _GLIBCXX_MOVE(*__first); ++__result; @@ -2148,20 +2149,21 @@ _GLIBCXX_END_NAMESPACE_ALGO if (__first1 == __last1 || __first2 == __last2) return __first1; + __decltype(*__first2) __first2_val(*__first2); + __decltype(__gnu_cxx::__ops::bind2nd(__predicate, __first2_val)) + __match_first = __gnu_cxx::__ops::bind2nd(__predicate, __first2_val); + // Test for a pattern of length 1. _ForwardIterator2 __p1(__first2); if (++__p1 == __last2) - return std::__find_if(__first1, __last1, - __gnu_cxx::__ops::__iter_comp_iter(__predicate, __first2)); + return std::__find_if(__first1, __last1, __match_first); // General case. _ForwardIterator1 __current = __first1; for (;;) { - __first1 = - std::__find_if(__first1, __last1, - __gnu_cxx::__ops::__iter_comp_iter(__predicate, __first2)); + __first1 = std::__find_if(__first1, __last1, __match_first); if (__first1 == __last1) return __last1; @@ -2171,7 +2173,7 @@ _GLIBCXX_END_NAMESPACE_ALGO if (++__current == __last1) return __last1; - while (__predicate(__current, __p)) + while (__predicate(*__current, *__p)) { if (++__p == __last2) return __first1; @@ -2182,6 +2184,7 @@ _GLIBCXX_END_NAMESPACE_ALGO } return __first1; } +#undef __match_first #if __cplusplus >= 201103L template= 202207L // C++ >= 23 + template + [[__gnu__::__always_inline__]] + inline _Tp* + start_lifetime_as(void* __p) noexcept + { +#if __glibcxx_is_implicit_lifetime >= 202302L + static_assert(is_implicit_lifetime_v<_Tp>); +#endif + auto __q = reinterpret_cast<_Tp*>(__p); + __asm__ __volatile__("" : "=g" (__q), "=m" (*__q) + : "0" (__q), "m" (*__q)); + return __q; + } + + template + [[__gnu__::__always_inline__]] + inline const _Tp* + start_lifetime_as(const void* __p) noexcept + { +#if __glibcxx_is_implicit_lifetime >= 202302L + static_assert(is_implicit_lifetime_v<_Tp>); +#endif + auto __q = reinterpret_cast(__p); + auto __r = reinterpret_cast<_Tp*>(const_cast(__p)); + __asm__ __volatile__("" : "=g" (__q), "=m" (*__r) + : "0" (__q), "m" (*__q)); + return __q; + } + + template + [[__gnu__::__always_inline__]] + inline volatile _Tp* + start_lifetime_as(volatile void* __p) noexcept + { +#if __glibcxx_is_implicit_lifetime >= 202302L + static_assert(is_implicit_lifetime_v<_Tp>); +#endif + auto __q = reinterpret_cast(__p); + auto __r = reinterpret_cast<_Tp*>(const_cast(__p)); + __asm__ __volatile__("" : "=g" (__q), "=m" (*__r) + : "0" (__q), "m" (*__q)); + return __q; + } + + template + [[__gnu__::__always_inline__]] + inline const volatile _Tp* + start_lifetime_as(const volatile void* __p) noexcept + { +#if __glibcxx_is_implicit_lifetime >= 202302L + static_assert(is_implicit_lifetime_v<_Tp>); +#endif + auto __q = reinterpret_cast(__p); + auto __r = reinterpret_cast<_Tp*>(const_cast(__p)); + __asm__ __volatile__("" : "=g" (__q), "=m" (*__r) + : "0" (__q), "m" (*__q)); + return __q; + } + + template + [[__gnu__::__always_inline__]] + inline _Tp* + start_lifetime_as_array(void* __p, size_t __n) noexcept + { + auto __q = reinterpret_cast<_Tp*>(__p); + if (!__n) + return __q; + auto __r = (__extension__ reinterpret_cast<_Tp(*)[__n]>(__p)); + __asm__ __volatile__("" : "=g" (__q), "=m" (*__r) + : "0" (__q), "m" (*__r)); + return __q; + } + + template + [[__gnu__::__always_inline__]] + inline const _Tp* + start_lifetime_as_array(const void* __p, size_t __n) noexcept + { + auto __q = reinterpret_cast(__p); + if (!__n) + return __q; + auto __r = (__extension__ reinterpret_cast(__p)); + auto __s = (__extension__ + reinterpret_cast<_Tp(*)[__n]>(const_cast(__p))); + __asm__ __volatile__("" : "=g" (__q), "=m" (*__s) + : "0" (__q), "m" (*__r)); + return __q; + } + + template + [[__gnu__::__always_inline__]] + inline volatile _Tp* + start_lifetime_as_array(volatile void* __p, size_t __n) noexcept + { + auto __q = reinterpret_cast(__p); + if (!__n) + return __q; + auto __r = (__extension__ reinterpret_cast(__p)); + auto __s = (__extension__ + reinterpret_cast<_Tp(*)[__n]>(const_cast(__p))); + __asm__ __volatile__("" : "=g" (__q), "=m" (*__s) + : "0" (__q), "m" (*__r)); + return __q; + } + + template + [[__gnu__::__always_inline__]] + inline const volatile _Tp* + start_lifetime_as_array(const volatile void* __p, size_t __n) noexcept + { + auto __q = reinterpret_cast(__p); + if (!__n) + return __q; + auto __r = (__extension__ reinterpret_cast(__p)); + auto __s = (__extension__ + reinterpret_cast<_Tp(*)[__n]>(const_cast(__p))); + __asm__ __volatile__("" : "=g" (__q), "=m" (*__s) + : "0" (__q), "m" (*__r)); + return __q; + } +#endif // C++23 + _GLIBCXX_END_NAMESPACE_VERSION } // namespace std diff --git a/libstdc++-v3/include/bits/stl_deque.h b/libstdc++-v3/include/bits/stl_deque.h index 7055641ad4ea..7cc711efca8a 100644 --- a/libstdc++-v3/include/bits/stl_deque.h +++ b/libstdc++-v3/include/bits/stl_deque.h @@ -2163,6 +2163,35 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER iterator _M_insert_aux(iterator __pos, const value_type& __x); #else + struct _Temporary_value + { + template + _GLIBCXX20_CONSTEXPR explicit + _Temporary_value(deque* __deque, _Args&&... __args) : _M_this(__deque) + { + _Alloc_traits::construct(_M_this->_M_impl, _M_ptr(), + std::forward<_Args>(__args)...); + } + + _GLIBCXX20_CONSTEXPR + ~_Temporary_value() + { _Alloc_traits::destroy(_M_this->_M_impl, _M_ptr()); } + + _GLIBCXX20_CONSTEXPR value_type& + _M_val() noexcept { return __tmp_val; } + + private: + _GLIBCXX20_CONSTEXPR _Tp* + _M_ptr() noexcept { return std::__addressof(__tmp_val); } + + union + { + _Tp __tmp_val; + }; + + deque* _M_this; + }; + iterator _M_insert_aux(iterator __pos, const value_type& __x) { return _M_emplace_aux(__pos, __x); } diff --git a/libstdc++-v3/include/bits/stl_function.h b/libstdc++-v3/include/bits/stl_function.h index 136fd01c9847..ff3f8f4c6e79 100644 --- a/libstdc++-v3/include/bits/stl_function.h +++ b/libstdc++-v3/include/bits/stl_function.h @@ -762,6 +762,58 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION is_convertible<_Tp, const volatile void*>, is_convertible<_Up, const volatile void*>>; }; +#else // < C++14 + + // We need less and equal_to for + + template<> + struct equal_to + { +#ifdef __cpp_rvalue_references + template + bool + operator()(_Tp&& __t, _Up&& __u) const + { return __t == __u; } +#else // C++98 + template + bool + operator()(_Tp& __t, _Up& __u) const { return __t == __u; } + template + bool + operator()(const _Tp& __t, _Up& __u) const { return __t == __u; } + template + bool + operator()(_Tp& __t, const _Up& __u) const { return __t == __u; } + template + bool + operator()(const _Tp& __t, const _Up& __u) const { return __t == __u; } +#endif + }; + + template<> + struct less + { +#ifdef __cpp_rvalue_references + template + bool + operator()(_Tp&& __t, _Up&& __u) const + { return __t < __u; } +#else // C++98 + template + bool + operator()(_Tp& __t, _Up& __u) const { return __t < __u; } + template + bool + operator()(const _Tp& __t, _Up& __u) const { return __t < __u; } + template + bool + operator()(_Tp& __t, const _Up& __u) const { return __t < __u; } + template + bool + operator()(const _Tp& __t, const _Up& __u) const { return __t < __u; } +#endif + }; + #endif // __glibcxx_transparent_operators /** @} */ diff --git a/libstdc++-v3/include/bits/stl_heap.h b/libstdc++-v3/include/bits/stl_heap.h index 028ac83eeb70..b10495bc8052 100644 --- a/libstdc++-v3/include/bits/stl_heap.h +++ b/libstdc++-v3/include/bits/stl_heap.h @@ -76,10 +76,16 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION __is_heap_until(_RandomAccessIterator __first, _Distance __n, _Compare& __comp) { +#if __cplusplus >= 201103L + using _IterTraits = iterator_traits<_RandomAccessIterator>; + static_assert(is_same::value, + "Argument 'n' must be the iterator's difference type"); +#endif _Distance __parent = 0; for (_Distance __child = 1; __child < __n; ++__child) { - if (__comp(__first + __parent, __first + __child)) + if (__comp(__first[__parent], __first[__child])) return __child; if ((__child & 1) == 0) ++__parent; @@ -94,8 +100,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION inline bool __is_heap(_RandomAccessIterator __first, _Distance __n) { - __gnu_cxx::__ops::_Iter_less_iter __comp; - return std::__is_heap_until(__first, __n, __comp) == __n; + typename iterator_traits<_RandomAccessIterator>::difference_type __d(__n); + __gnu_cxx::__ops::less __comp; + return std::__is_heap_until(__first, __d, __comp) == __n; } template __cmp(_GLIBCXX_MOVE(__comp)); - return std::__is_heap_until(__first, __n, __cmp) == __n; + typename iterator_traits<_RandomAccessIterator>::difference_type __d(__n); + return std::__is_heap_until(__first, __d, __comp) == __n; } template @@ -137,7 +143,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION _Compare& __comp) { _Distance __parent = (__holeIndex - 1) / 2; - while (__holeIndex > __topIndex && __comp(__first + __parent, __value)) + while (__holeIndex > __topIndex && __comp(__first[__parent], __value)) { *(__first + __holeIndex) = _GLIBCXX_MOVE(*(__first + __parent)); __holeIndex = __parent; @@ -172,10 +178,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION __glibcxx_function_requires(_LessThanComparableConcept<_ValueType>) __glibcxx_requires_valid_range(__first, __last); __glibcxx_requires_irreflexive(__first, __last); - __glibcxx_requires_heap(__first, __last - 1); + __glibcxx_requires_heap(__first, __last - _DistanceType(1)); - __gnu_cxx::__ops::_Iter_less_val __comp; - _ValueType __value = _GLIBCXX_MOVE(*(__last - 1)); + __gnu_cxx::__ops::less __comp; + _ValueType __value = _GLIBCXX_MOVE(*(__last - _DistanceType(1))); std::__push_heap(__first, _DistanceType((__last - __first) - 1), _DistanceType(0), _GLIBCXX_MOVE(__value), __comp); } @@ -208,13 +214,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION _RandomAccessIterator>) __glibcxx_requires_valid_range(__first, __last); __glibcxx_requires_irreflexive_pred(__first, __last, __comp); - __glibcxx_requires_heap_pred(__first, __last - 1, __comp); + __glibcxx_requires_heap_pred(__first, __last - _DistanceType(1), __comp); - __decltype(__gnu_cxx::__ops::__iter_comp_val(_GLIBCXX_MOVE(__comp))) - __cmp(_GLIBCXX_MOVE(__comp)); - _ValueType __value = _GLIBCXX_MOVE(*(__last - 1)); + _ValueType __value = _GLIBCXX_MOVE(*(__last - _DistanceType(1))); std::__push_heap(__first, _DistanceType((__last - __first) - 1), - _DistanceType(0), _GLIBCXX_MOVE(__value), __cmp); + _DistanceType(0), _GLIBCXX_MOVE(__value), __comp); } template @@ -295,7 +297,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION if (__last - __first > 1) { --__last; - __gnu_cxx::__ops::_Iter_less_iter __comp; + __gnu_cxx::__ops::less __comp; std::__pop_heap(__first, __last, __last, __comp); } } @@ -327,10 +329,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION if (__last - __first > 1) { - typedef __decltype(__comp) _Cmp; - __gnu_cxx::__ops::_Iter_comp_iter<_Cmp> __cmp(_GLIBCXX_MOVE(__comp)); --__last; - std::__pop_heap(__first, __last, __last, __cmp); + std::__pop_heap(__first, __last, __last, __comp); } } @@ -382,7 +382,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION __glibcxx_requires_valid_range(__first, __last); __glibcxx_requires_irreflexive(__first, __last); - __gnu_cxx::__ops::_Iter_less_iter __comp; + __gnu_cxx::__ops::less __comp; std::__make_heap(__first, __last, __comp); } @@ -408,9 +408,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION __glibcxx_requires_valid_range(__first, __last); __glibcxx_requires_irreflexive_pred(__first, __last, __comp); - typedef __decltype(__comp) _Cmp; - __gnu_cxx::__ops::_Iter_comp_iter<_Cmp> __cmp(_GLIBCXX_MOVE(__comp)); - std::__make_heap(__first, __last, __cmp); + std::__make_heap(__first, __last, __comp); } template @@ -448,7 +446,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION __glibcxx_requires_irreflexive(__first, __last); __glibcxx_requires_heap(__first, __last); - __gnu_cxx::__ops::_Iter_less_iter __comp; + __gnu_cxx::__ops::less __comp; std::__sort_heap(__first, __last, __comp); } @@ -475,9 +473,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION __glibcxx_requires_irreflexive_pred(__first, __last, __comp); __glibcxx_requires_heap_pred(__first, __last, __comp); - typedef __decltype(__comp) _Cmp; - __gnu_cxx::__ops::_Iter_comp_iter<_Cmp> __cmp(_GLIBCXX_MOVE(__comp)); - std::__sort_heap(__first, __last, __cmp); + std::__sort_heap(__first, __last, __comp); } #if __cplusplus >= 201103L @@ -504,7 +500,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION __glibcxx_requires_valid_range(__first, __last); __glibcxx_requires_irreflexive(__first, __last); - __gnu_cxx::__ops::_Iter_less_iter __comp; + __gnu_cxx::__ops::less __comp; return __first + std::__is_heap_until(__first, std::distance(__first, __last), __comp); } @@ -532,10 +528,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION __glibcxx_requires_valid_range(__first, __last); __glibcxx_requires_irreflexive_pred(__first, __last, __comp); - typedef __decltype(__comp) _Cmp; - __gnu_cxx::__ops::_Iter_comp_iter<_Cmp> __cmp(_GLIBCXX_MOVE(__comp)); return __first - + std::__is_heap_until(__first, std::distance(__first, __last), __cmp); + + std::__is_heap_until(__first, std::distance(__first, __last), + __comp); } /** @@ -572,9 +567,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION __glibcxx_requires_irreflexive_pred(__first, __last, __comp); const auto __dist = std::distance(__first, __last); - typedef __decltype(__comp) _Cmp; - __gnu_cxx::__ops::_Iter_comp_iter<_Cmp> __cmp(_GLIBCXX_MOVE(__comp)); - return std::__is_heap_until(__first, __dist, __cmp) == __dist; + return std::__is_heap_until(__first, __dist, __comp) == __dist; } #endif diff --git a/libstdc++-v3/include/bits/stl_uninitialized.h b/libstdc++-v3/include/bits/stl_uninitialized.h index 351c3a17457f..70a564659814 100644 --- a/libstdc++-v3/include/bits/stl_uninitialized.h +++ b/libstdc++-v3/include/bits/stl_uninitialized.h @@ -236,6 +236,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wc++17-extensions" +#pragma GCC diagnostic ignored "-Wclass-memaccess" /** * @brief Copies the range [first,last) into result. * @param __first An input iterator. @@ -427,6 +428,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION #if __cplusplus >= 201103L #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wc++17-extensions" +#pragma GCC diagnostic ignored "-Wclass-memaccess" #if __glibcxx_raw_memory_algorithms >= 202411L // >= C++26 if consteval { return std::__do_uninit_fill(__first, __last, __x); @@ -529,6 +531,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wc++17-extensions" +#pragma GCC diagnostic ignored "-Wclass-memaccess" // _GLIBCXX_RESOLVE_LIB_DEFECTS // DR 1339. uninitialized_fill_n should return the end of its range /** @@ -1265,9 +1268,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION uninitialized_move(_InputIterator __first, _InputIterator __last, _ForwardIterator __result) { - return std::uninitialized_copy - (_GLIBCXX_MAKE_MOVE_ITERATOR(__first), - _GLIBCXX_MAKE_MOVE_ITERATOR(__last), __result); + return std::uninitialized_copy(std::make_move_iterator(__first), + std::make_move_iterator(__last), + __result); } /** @@ -1284,9 +1287,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION uninitialized_move_n(_InputIterator __first, _Size __count, _ForwardIterator __result) { - auto __res = std::__uninitialized_copy_n_pair - (_GLIBCXX_MAKE_MOVE_ITERATOR(__first), - __count, __result); + auto __res + = std::__uninitialized_copy_n_pair(std::make_move_iterator(__first), + __count, __result); return {__res.first.base(), __res.second}; } #endif // __glibcxx_raw_memory_algorithms diff --git a/libstdc++-v3/include/bits/unicode-data.h b/libstdc++-v3/include/bits/unicode-data.h index 0ab5ecb56a71..45a68de3edb7 100644 --- a/libstdc++-v3/include/bits/unicode-data.h +++ b/libstdc++-v3/include/bits/unicode-data.h @@ -51,17 +51,17 @@ 0x3250, 0xa48d, 0xa490, 0xa4c7, 0xa960, 0xa97d, 0xac00, 0xd7a4, 0xf900, 0xfb00, 0xfe10, 0xfe1a, 0xfe30, 0xfe53, 0xfe54, 0xfe67, 0xfe68, 0xfe6c, 0xff01, 0xff61, 0xffe0, 0xffe7, 0x16fe0, 0x16fe5, - 0x16ff0, 0x16ff2, 0x17000, 0x187f8, 0x18800, 0x18cd6, 0x18cff, 0x18d09, + 0x16ff0, 0x16ff7, 0x17000, 0x18cd6, 0x18cff, 0x18d1f, 0x18d80, 0x18df3, 0x1aff0, 0x1aff4, 0x1aff5, 0x1affc, 0x1affd, 0x1afff, 0x1b000, 0x1b123, 0x1b132, 0x1b133, 0x1b150, 0x1b153, 0x1b155, 0x1b156, 0x1b164, 0x1b168, 0x1b170, 0x1b2fc, 0x1d300, 0x1d357, 0x1d360, 0x1d377, 0x1f004, 0x1f005, 0x1f0cf, 0x1f0d0, 0x1f18e, 0x1f18f, 0x1f191, 0x1f19b, 0x1f200, 0x1f203, 0x1f210, 0x1f23c, 0x1f240, 0x1f249, 0x1f250, 0x1f252, 0x1f260, 0x1f266, 0x1f300, 0x1f650, 0x1f680, 0x1f6c6, 0x1f6cc, 0x1f6cd, 0x1f6d0, 0x1f6d3, - 0x1f6d5, 0x1f6d8, 0x1f6dc, 0x1f6e0, 0x1f6eb, 0x1f6ed, 0x1f6f4, 0x1f6fd, + 0x1f6d5, 0x1f6d9, 0x1f6dc, 0x1f6e0, 0x1f6eb, 0x1f6ed, 0x1f6f4, 0x1f6fd, 0x1f7e0, 0x1f7ec, 0x1f7f0, 0x1f7f1, 0x1f900, 0x1fa00, 0x1fa70, 0x1fa7d, - 0x1fa80, 0x1fa8a, 0x1fa8f, 0x1fac7, 0x1face, 0x1fadd, 0x1fadf, 0x1faea, - 0x1faf0, 0x1faf9, 0x20000, 0x2fffe, 0x30000, 0x3fffe, + 0x1fa80, 0x1fa8b, 0x1fa8e, 0x1fac7, 0x1fac8, 0x1fac9, 0x1facd, 0x1fadd, + 0x1fadf, 0x1faeb, 0x1faef, 0x1faf9, 0x20000, 0x2fffe, 0x30000, 0x3fffe, }; // Values generated by contrib/unicode/gen_libstdcxx_unicode_data.py, @@ -76,7 +76,7 @@ 0xc39, 0xc3a, 0xdbb, 0xdbc, 0xe1d, 0xe20, 0xe97, 0xe9a, 0xf65, 0xf80, 0xff7, 0xffa, 0x105d, 0x1060, 0x107f, 0x1080, 0x10b9, 0x10bc, - 0x10bf, 0x10c0, 0x10d7, 0x10e0, 0x111f, 0x112e, + 0x10bf, 0x10c0, 0x10d7, 0x10e0, 0x1121, 0x112e, 0x11c5, 0x11c6, 0x1309, 0x130a, 0x131b, 0x131e, 0x1323, 0x1326, 0x1353, 0x1354, 0x1363, 0x1364, 0x1367, 0x136c, 0x1375, 0x1378, 0x138b, 0x138e, @@ -104,11 +104,11 @@ 0x17a3, 0x17ae, 0x17b1, 0x17cc, 0x17f7, 0x1800, 0x181b, 0x181c, 0x1823, 0x1824, 0x1853, 0x1854, 0x1875, 0x1878, 0x188b, 0x188c, 0x1893, 0x1894, - 0x189d, 0x18aa, 0x18af, 0x18b0, 0x18b7, 0x18ba, + 0x189d, 0x18aa, 0x18af, 0x18b0, 0x18b7, 0x18b8, 0x18bd, 0x18c0, 0x18c9, 0x18cc, 0x18e1, 0x18ee, 0x191b, 0x191c, 0x1923, 0x1924, 0x1953, 0x1954, 0x1969, 0x196a, 0x1975, 0x1978, 0x198b, 0x198c, - 0x1993, 0x1994, 0x199d, 0x19aa, 0x19af, 0x19ba, + 0x1993, 0x1994, 0x199d, 0x19aa, 0x19af, 0x19b8, 0x19bf, 0x19c0, 0x19c9, 0x19cc, 0x19e1, 0x19e2, 0x19e9, 0x1a00, 0x1a1b, 0x1a1c, 0x1a23, 0x1a24, 0x1a8b, 0x1a8c, 0x1a93, 0x1a94, 0x1aa1, 0x1aa8, @@ -141,19 +141,19 @@ 0x32eb, 0x3300, 0x3359, 0x3360, 0x3395, 0x33a0, 0x33b7, 0x33bc, 0x3439, 0x343c, 0x34bf, 0x34c0, 0x34fb, 0x34fe, 0x3515, 0x3520, 0x3535, 0x3540, - 0x355d, 0x3560, 0x359f, 0x3600, 0x369b, 0x369c, - 0x37e9, 0x37f8, 0x3871, 0x3876, 0x3895, 0x389a, - 0x3917, 0x3920, 0x3977, 0x397a, 0x3991, 0x39a0, - 0x39f7, 0x3a00, 0x3e2d, 0x3e30, 0x3e3d, 0x3e40, - 0x3e8d, 0x3e90, 0x3e9d, 0x3ea0, 0x3eb1, 0x3eb2, - 0x3eb5, 0x3eb6, 0x3eb9, 0x3eba, 0x3ebd, 0x3ebe, - 0x3efd, 0x3f00, 0x3f6b, 0x3f6c, 0x3f8b, 0x3f8c, - 0x3fa9, 0x3fac, 0x3fb9, 0x3fba, 0x3fe1, 0x3fe4, - 0x3feb, 0x3fec, 0x3fff, 0x4020, 0x4051, 0x4060, - 0x40bf, 0x40e0, 0x40e5, 0x40e8, 0x411f, 0x4120, - 0x413b, 0x4140, 0x4183, 0x41a0, 0x41e3, 0x4200, - 0x4319, 0x4320, 0x4855, 0x4880, 0x4897, 0x48c0, - 0x56e9, 0x56ec, 0x572d, 0x572e, 0x59e9, 0x59f2, + 0x355d, 0x3560, 0x35bd, 0x35c0, 0x35d9, 0x3600, + 0x369b, 0x369c, 0x37e9, 0x37f8, 0x3871, 0x3876, + 0x3895, 0x389a, 0x3917, 0x3920, 0x3977, 0x397a, + 0x3991, 0x39a0, 0x39f7, 0x3a00, 0x3e2d, 0x3e30, + 0x3e3d, 0x3e40, 0x3e8d, 0x3e90, 0x3e9d, 0x3ea0, + 0x3eb1, 0x3eb2, 0x3eb5, 0x3eb6, 0x3eb9, 0x3eba, + 0x3ebd, 0x3ebe, 0x3efd, 0x3f00, 0x3f6b, 0x3f6c, + 0x3f8b, 0x3f8c, 0x3fa9, 0x3fac, 0x3fb9, 0x3fba, + 0x3fe1, 0x3fe4, 0x3feb, 0x3fec, 0x3fff, 0x4020, + 0x4051, 0x4060, 0x40bf, 0x40e0, 0x40e5, 0x40e8, + 0x411f, 0x4120, 0x413b, 0x4140, 0x4185, 0x41a0, + 0x41e3, 0x4200, 0x4319, 0x4320, 0x4855, 0x4880, + 0x4897, 0x48c0, 0x56e9, 0x56ec, 0x59e9, 0x59f2, 0x5a4d, 0x5a4e, 0x5a51, 0x5a5a, 0x5a5d, 0x5a60, 0x5ad1, 0x5ade, 0x5ae3, 0x5afe, 0x5b2f, 0x5b40, 0x5b4f, 0x5b50, 0x5b5f, 0x5b60, 0x5b6f, 0x5b70, @@ -164,8 +164,7 @@ 0x6201, 0x620a, 0x6261, 0x6262, 0x631f, 0x6320, 0x63cd, 0x63de, 0x643f, 0x6440, 0x1491b, 0x14920, 0x1498f, 0x149a0, 0x14c59, 0x14c80, 0x14df1, 0x14e00, - 0x14f9d, 0x14fa0, 0x14fa5, 0x14fa6, 0x14fa9, 0x14faa, - 0x14fbb, 0x14fe4, 0x1505b, 0x15060, 0x15075, 0x15080, + 0x14fbb, 0x14fe2, 0x1505b, 0x15060, 0x15075, 0x15080, 0x150f1, 0x15100, 0x1518d, 0x1519c, 0x151b5, 0x151c0, 0x152a9, 0x152be, 0x152fb, 0x15300, 0x1539d, 0x1539e, 0x153b5, 0x153bc, 0x153ff, 0x15400, 0x1546f, 0x15480, @@ -177,7 +176,6 @@ 0x1f4dd, 0x1f4e0, 0x1f5b5, 0x1f600, 0x1f60f, 0x1f626, 0x1f631, 0x1f63a, 0x1f66f, 0x1f670, 0x1f67b, 0x1f67c, 0x1f67f, 0x1f680, 0x1f685, 0x1f686, 0x1f68b, 0x1f68c, - 0x1f787, 0x1f7a6, 0x1fb21, 0x1fb24, 0x1fb91, 0x1fb9e, 0x1fba1, 0x1fbe0, 0x1fc35, 0x1fc40, 0x1fca7, 0x1fca8, 0x1fccf, 0x1fcd0, 0x1fcd9, 0x1fce0, 0x1fceb, 0x1fcec, 0x1fdfb, 0x1fe02, 0x1ff7f, 0x1ff84, 0x1ff91, 0x1ff94, @@ -201,7 +199,7 @@ 0x2106d, 0x2106e, 0x21073, 0x21078, 0x2107b, 0x2107e, 0x210ad, 0x210ae, 0x2113f, 0x2114e, 0x21161, 0x211c0, 0x211e7, 0x211e8, 0x211ed, 0x211f6, 0x21239, 0x2123e, - 0x21275, 0x2127e, 0x21281, 0x21300, 0x21371, 0x21378, + 0x21275, 0x2127e, 0x212b5, 0x21300, 0x21371, 0x21378, 0x213a1, 0x213a4, 0x21409, 0x2140a, 0x2140f, 0x21418, 0x21429, 0x2142a, 0x21431, 0x21432, 0x2146d, 0x21470, 0x21477, 0x2147e, 0x21493, 0x214a0, 0x214b3, 0x214c0, @@ -212,108 +210,112 @@ 0x21a51, 0x21a60, 0x21a75, 0x21a80, 0x21acd, 0x21ad2, 0x21b0d, 0x21b1c, 0x21b21, 0x21cc0, 0x21cff, 0x21d00, 0x21d55, 0x21d56, 0x21d5d, 0x21d60, 0x21d65, 0x21d84, - 0x21d8b, 0x21df8, 0x21e51, 0x21e60, 0x21eb5, 0x21ee0, - 0x21f15, 0x21f60, 0x21f99, 0x21fc0, 0x21fef, 0x22000, - 0x2209d, 0x220a4, 0x220ed, 0x220fe, 0x2217b, 0x2217c, - 0x22187, 0x221a0, 0x221d3, 0x221e0, 0x221f5, 0x22200, - 0x2226b, 0x2226c, 0x22291, 0x222a0, 0x222ef, 0x22300, - 0x223c1, 0x223c2, 0x223eb, 0x22400, 0x22425, 0x22426, - 0x22485, 0x22500, 0x2250f, 0x22510, 0x22513, 0x22514, - 0x2251d, 0x2251e, 0x2253d, 0x2253e, 0x22555, 0x22560, - 0x225d7, 0x225e0, 0x225f5, 0x22600, 0x22609, 0x2260a, - 0x2261b, 0x2261e, 0x22623, 0x22626, 0x22653, 0x22654, - 0x22663, 0x22664, 0x22669, 0x2266a, 0x22675, 0x22676, - 0x2268b, 0x2268e, 0x22693, 0x22696, 0x2269d, 0x226a0, - 0x226a3, 0x226ae, 0x226b1, 0x226ba, 0x226c9, 0x226cc, - 0x226db, 0x226e0, 0x226eb, 0x22700, 0x22715, 0x22716, - 0x22719, 0x2271c, 0x2271f, 0x22720, 0x2276d, 0x2276e, - 0x22783, 0x22784, 0x22787, 0x2278a, 0x2278d, 0x2278e, - 0x22797, 0x22798, 0x227ad, 0x227ae, 0x227b3, 0x227c2, - 0x227c7, 0x22800, 0x228b9, 0x228ba, 0x228c5, 0x22900, - 0x22991, 0x229a0, 0x229b5, 0x22b00, 0x22b6d, 0x22b70, - 0x22bbd, 0x22c00, 0x22c8b, 0x22ca0, 0x22cb5, 0x22cc0, - 0x22cdb, 0x22d00, 0x22d75, 0x22d80, 0x22d95, 0x22da0, - 0x22dc9, 0x22e00, 0x22e37, 0x22e3a, 0x22e59, 0x22e60, - 0x22e8f, 0x23000, 0x23079, 0x23140, 0x231e7, 0x231fe, - 0x2320f, 0x23212, 0x23215, 0x23218, 0x23229, 0x2322a, - 0x2322f, 0x23230, 0x2326d, 0x2326e, 0x23273, 0x23276, - 0x2328f, 0x232a0, 0x232b5, 0x23340, 0x23351, 0x23354, - 0x233b1, 0x233b4, 0x233cb, 0x23400, 0x23491, 0x234a0, - 0x23547, 0x23560, 0x235f3, 0x23600, 0x23615, 0x23780, - 0x237c5, 0x237e0, 0x237f5, 0x23800, 0x23813, 0x23814, - 0x2386f, 0x23870, 0x2388d, 0x238a0, 0x238db, 0x238e0, - 0x23921, 0x23924, 0x23951, 0x23952, 0x2396f, 0x23a00, - 0x23a0f, 0x23a10, 0x23a15, 0x23a16, 0x23a6f, 0x23a74, - 0x23a77, 0x23a78, 0x23a7d, 0x23a7e, 0x23a91, 0x23aa0, - 0x23ab5, 0x23ac0, 0x23acd, 0x23ace, 0x23ad3, 0x23ad4, - 0x23b1f, 0x23b20, 0x23b25, 0x23b26, 0x23b33, 0x23b40, - 0x23b55, 0x23dc0, 0x23df3, 0x23e00, 0x23e23, 0x23e24, - 0x23e77, 0x23e7c, 0x23eb7, 0x23f60, 0x23f63, 0x23f80, - 0x23fe5, 0x23ffe, 0x24735, 0x24800, 0x248df, 0x248e0, - 0x248eb, 0x24900, 0x24a89, 0x25f20, 0x25fe7, 0x26000, - 0x26861, 0x26880, 0x268ad, 0x268c0, 0x287f7, 0x28800, - 0x28c8f, 0x2c200, 0x2c275, 0x2d000, 0x2d473, 0x2d480, - 0x2d4bf, 0x2d4c0, 0x2d4d5, 0x2d4dc, 0x2d57f, 0x2d580, - 0x2d595, 0x2d5a0, 0x2d5dd, 0x2d5e0, 0x2d5ed, 0x2d600, - 0x2d68d, 0x2d6a0, 0x2d6b5, 0x2d6b6, 0x2d6c5, 0x2d6c6, - 0x2d6f1, 0x2d6fa, 0x2d721, 0x2da80, 0x2daf5, 0x2dc80, - 0x2dd37, 0x2de00, 0x2de97, 0x2de9e, 0x2df11, 0x2df1e, - 0x2df41, 0x2dfc0, 0x2dfcb, 0x2dfe0, 0x2dfe5, 0x2e000, - 0x30ff1, 0x31000, 0x319ad, 0x319fe, 0x31a13, 0x35fe0, + 0x21d91, 0x21da0, 0x21db3, 0x21df4, 0x21e51, 0x21e60, + 0x21eb5, 0x21ee0, 0x21f15, 0x21f60, 0x21f99, 0x21fc0, + 0x21fef, 0x22000, 0x2209d, 0x220a4, 0x220ed, 0x220fe, + 0x2217b, 0x2217c, 0x22187, 0x221a0, 0x221d3, 0x221e0, + 0x221f5, 0x22200, 0x2226b, 0x2226c, 0x22291, 0x222a0, + 0x222ef, 0x22300, 0x223c1, 0x223c2, 0x223eb, 0x22400, + 0x22425, 0x22426, 0x22485, 0x22500, 0x2250f, 0x22510, + 0x22513, 0x22514, 0x2251d, 0x2251e, 0x2253d, 0x2253e, + 0x22555, 0x22560, 0x225d7, 0x225e0, 0x225f5, 0x22600, + 0x22609, 0x2260a, 0x2261b, 0x2261e, 0x22623, 0x22626, + 0x22653, 0x22654, 0x22663, 0x22664, 0x22669, 0x2266a, + 0x22675, 0x22676, 0x2268b, 0x2268e, 0x22693, 0x22696, + 0x2269d, 0x226a0, 0x226a3, 0x226ae, 0x226b1, 0x226ba, + 0x226c9, 0x226cc, 0x226db, 0x226e0, 0x226eb, 0x22700, + 0x22715, 0x22716, 0x22719, 0x2271c, 0x2271f, 0x22720, + 0x2276d, 0x2276e, 0x22783, 0x22784, 0x22787, 0x2278a, + 0x2278d, 0x2278e, 0x22797, 0x22798, 0x227ad, 0x227ae, + 0x227b3, 0x227c2, 0x227c7, 0x22800, 0x228b9, 0x228ba, + 0x228c5, 0x22900, 0x22991, 0x229a0, 0x229b5, 0x22b00, + 0x22b6d, 0x22b70, 0x22bbd, 0x22c00, 0x22c8b, 0x22ca0, + 0x22cb5, 0x22cc0, 0x22cdb, 0x22d00, 0x22d75, 0x22d80, + 0x22d95, 0x22da0, 0x22dc9, 0x22e00, 0x22e37, 0x22e3a, + 0x22e59, 0x22e60, 0x22e8f, 0x23000, 0x23079, 0x23140, + 0x231e7, 0x231fe, 0x2320f, 0x23212, 0x23215, 0x23218, + 0x23229, 0x2322a, 0x2322f, 0x23230, 0x2326d, 0x2326e, + 0x23273, 0x23276, 0x2328f, 0x232a0, 0x232b5, 0x23340, + 0x23351, 0x23354, 0x233b1, 0x233b4, 0x233cb, 0x23400, + 0x23491, 0x234a0, 0x23547, 0x23560, 0x235f3, 0x23600, + 0x23615, 0x236c0, 0x236d1, 0x23780, 0x237c5, 0x237e0, + 0x237f5, 0x23800, 0x23813, 0x23814, 0x2386f, 0x23870, + 0x2388d, 0x238a0, 0x238db, 0x238e0, 0x23921, 0x23924, + 0x23951, 0x23952, 0x2396f, 0x23a00, 0x23a0f, 0x23a10, + 0x23a15, 0x23a16, 0x23a6f, 0x23a74, 0x23a77, 0x23a78, + 0x23a7d, 0x23a7e, 0x23a91, 0x23aa0, 0x23ab5, 0x23ac0, + 0x23acd, 0x23ace, 0x23ad3, 0x23ad4, 0x23b1f, 0x23b20, + 0x23b25, 0x23b26, 0x23b33, 0x23b40, 0x23b55, 0x23b60, + 0x23bb9, 0x23bc0, 0x23bd5, 0x23dc0, 0x23df3, 0x23e00, + 0x23e23, 0x23e24, 0x23e77, 0x23e7c, 0x23eb7, 0x23f60, + 0x23f63, 0x23f80, 0x23fe5, 0x23ffe, 0x24735, 0x24800, + 0x248df, 0x248e0, 0x248eb, 0x24900, 0x24a89, 0x25f20, + 0x25fe7, 0x26000, 0x26861, 0x26880, 0x268ad, 0x268c0, + 0x287f7, 0x28800, 0x28c8f, 0x2c200, 0x2c275, 0x2d000, + 0x2d473, 0x2d480, 0x2d4bf, 0x2d4c0, 0x2d4d5, 0x2d4dc, + 0x2d57f, 0x2d580, 0x2d595, 0x2d5a0, 0x2d5dd, 0x2d5e0, + 0x2d5ed, 0x2d600, 0x2d68d, 0x2d6a0, 0x2d6b5, 0x2d6b6, + 0x2d6c5, 0x2d6c6, 0x2d6f1, 0x2d6fa, 0x2d721, 0x2da80, + 0x2daf5, 0x2dc80, 0x2dd37, 0x2dd40, 0x2dd73, 0x2dd76, + 0x2dda9, 0x2de00, 0x2de97, 0x2de9e, 0x2df11, 0x2df1e, + 0x2df41, 0x2dfc0, 0x2dfcb, 0x2dfe0, 0x2dfef, 0x2e000, + 0x319ad, 0x319fe, 0x31a3f, 0x31b00, 0x31be7, 0x35fe0, 0x35fe9, 0x35fea, 0x35ff9, 0x35ffa, 0x35fff, 0x36000, 0x36247, 0x36264, 0x36267, 0x362a0, 0x362a7, 0x362aa, 0x362ad, 0x362c8, 0x362d1, 0x362e0, 0x365f9, 0x37800, 0x378d7, 0x378e0, 0x378fb, 0x37900, 0x37913, 0x37920, - 0x37935, 0x37938, 0x37941, 0x39800, 0x399f5, 0x39a00, - 0x39d69, 0x39e00, 0x39e5d, 0x39e60, 0x39e8f, 0x39ea0, - 0x39f89, 0x3a000, 0x3a1ed, 0x3a200, 0x3a24f, 0x3a252, - 0x3a2e7, 0x3a2f6, 0x3a3d7, 0x3a400, 0x3a48d, 0x3a580, - 0x3a5a9, 0x3a5c0, 0x3a5e9, 0x3a600, 0x3a6af, 0x3a6c0, - 0x3a6f3, 0x3a800, 0x3a8ab, 0x3a8ac, 0x3a93b, 0x3a93c, - 0x3a941, 0x3a944, 0x3a947, 0x3a94a, 0x3a94f, 0x3a952, - 0x3a95b, 0x3a95c, 0x3a975, 0x3a976, 0x3a979, 0x3a97a, - 0x3a989, 0x3a98a, 0x3aa0d, 0x3aa0e, 0x3aa17, 0x3aa1a, - 0x3aa2b, 0x3aa2c, 0x3aa3b, 0x3aa3c, 0x3aa75, 0x3aa76, - 0x3aa7f, 0x3aa80, 0x3aa8b, 0x3aa8c, 0x3aa8f, 0x3aa94, - 0x3aaa3, 0x3aaa4, 0x3ad4d, 0x3ad50, 0x3af99, 0x3af9c, - 0x3b519, 0x3b536, 0x3b541, 0x3b542, 0x3b561, 0x3be00, - 0x3be3f, 0x3be4a, 0x3be57, 0x3c000, 0x3c00f, 0x3c010, - 0x3c033, 0x3c036, 0x3c045, 0x3c046, 0x3c04b, 0x3c04c, - 0x3c057, 0x3c060, 0x3c0dd, 0x3c11e, 0x3c121, 0x3c200, - 0x3c25b, 0x3c260, 0x3c27d, 0x3c280, 0x3c295, 0x3c29c, - 0x3c2a1, 0x3c520, 0x3c55f, 0x3c580, 0x3c5f5, 0x3c5fe, - 0x3c601, 0x3c9a0, 0x3c9f5, 0x3cba0, 0x3cbf7, 0x3cbfe, - 0x3cc01, 0x3cfc0, 0x3cfcf, 0x3cfd0, 0x3cfd9, 0x3cfda, - 0x3cfdf, 0x3cfe0, 0x3cfff, 0x3d000, 0x3d18b, 0x3d18e, - 0x3d1af, 0x3d200, 0x3d299, 0x3d2a0, 0x3d2b5, 0x3d2bc, - 0x3d2c1, 0x3d8e2, 0x3d96b, 0x3da02, 0x3da7d, 0x3dc00, - 0x3dc09, 0x3dc0a, 0x3dc41, 0x3dc42, 0x3dc47, 0x3dc48, - 0x3dc4b, 0x3dc4e, 0x3dc51, 0x3dc52, 0x3dc67, 0x3dc68, - 0x3dc71, 0x3dc72, 0x3dc75, 0x3dc76, 0x3dc79, 0x3dc84, - 0x3dc87, 0x3dc8e, 0x3dc91, 0x3dc92, 0x3dc95, 0x3dc96, - 0x3dc99, 0x3dc9a, 0x3dca1, 0x3dca2, 0x3dca7, 0x3dca8, - 0x3dcab, 0x3dcae, 0x3dcb1, 0x3dcb2, 0x3dcb5, 0x3dcb6, - 0x3dcb9, 0x3dcba, 0x3dcbd, 0x3dcbe, 0x3dcc1, 0x3dcc2, - 0x3dcc7, 0x3dcc8, 0x3dccb, 0x3dcce, 0x3dcd7, 0x3dcd8, - 0x3dce7, 0x3dce8, 0x3dcf1, 0x3dcf2, 0x3dcfb, 0x3dcfc, - 0x3dcff, 0x3dd00, 0x3dd15, 0x3dd16, 0x3dd39, 0x3dd42, - 0x3dd49, 0x3dd4a, 0x3dd55, 0x3dd56, 0x3dd79, 0x3dde0, - 0x3dde5, 0x3e000, 0x3e059, 0x3e060, 0x3e129, 0x3e140, - 0x3e15f, 0x3e162, 0x3e181, 0x3e182, 0x3e1a1, 0x3e1a2, - 0x3e1ed, 0x3e200, 0x3e35d, 0x3e3cc, 0x3e407, 0x3e420, - 0x3e479, 0x3e480, 0x3e493, 0x3e4a0, 0x3e4a5, 0x3e4c0, - 0x3e4cd, 0x3e600, 0x3edb1, 0x3edb8, 0x3eddb, 0x3ede0, - 0x3edfb, 0x3ee00, 0x3eeef, 0x3eef6, 0x3efb5, 0x3efc0, - 0x3efd9, 0x3efe0, 0x3efe3, 0x3f000, 0x3f019, 0x3f020, - 0x3f091, 0x3f0a0, 0x3f0b5, 0x3f0c0, 0x3f111, 0x3f120, - 0x3f15d, 0x3f160, 0x3f179, 0x3f180, 0x3f185, 0x3f200, - 0x3f4a9, 0x3f4c0, 0x3f4dd, 0x3f4e0, 0x3f4fb, 0x3f500, - 0x3f515, 0x3f51e, 0x3f58f, 0x3f59c, 0x3f5bb, 0x3f5be, - 0x3f5d5, 0x3f5e0, 0x3f5f3, 0x3f600, 0x3f727, 0x3f728, - 0x3f7f5, 0x40000, 0x54dc1, 0x54e00, 0x56e75, 0x56e80, - 0x5703d, 0x57040, 0x59d45, 0x59d60, 0x5d7c3, 0x5d7e0, - 0x5dcbd, 0x5f000, 0x5f43d, 0x60000, 0x62697, 0x626a0, - 0x64761, 0x1c0200, 0x1c03e1, + 0x37935, 0x37938, 0x37941, 0x39800, 0x399fb, 0x39a00, + 0x39d69, 0x39d74, 0x39da3, 0x39dc0, 0x39de3, 0x39e00, + 0x39e5d, 0x39e60, 0x39e8f, 0x39ea0, 0x39f89, 0x3a000, + 0x3a1ed, 0x3a200, 0x3a24f, 0x3a252, 0x3a2e7, 0x3a2f6, + 0x3a3d7, 0x3a400, 0x3a48d, 0x3a580, 0x3a5a9, 0x3a5c0, + 0x3a5e9, 0x3a600, 0x3a6af, 0x3a6c0, 0x3a6f3, 0x3a800, + 0x3a8ab, 0x3a8ac, 0x3a93b, 0x3a93c, 0x3a941, 0x3a944, + 0x3a947, 0x3a94a, 0x3a94f, 0x3a952, 0x3a95b, 0x3a95c, + 0x3a975, 0x3a976, 0x3a979, 0x3a97a, 0x3a989, 0x3a98a, + 0x3aa0d, 0x3aa0e, 0x3aa17, 0x3aa1a, 0x3aa2b, 0x3aa2c, + 0x3aa3b, 0x3aa3c, 0x3aa75, 0x3aa76, 0x3aa7f, 0x3aa80, + 0x3aa8b, 0x3aa8c, 0x3aa8f, 0x3aa94, 0x3aaa3, 0x3aaa4, + 0x3ad4d, 0x3ad50, 0x3af99, 0x3af9c, 0x3b519, 0x3b536, + 0x3b541, 0x3b542, 0x3b561, 0x3be00, 0x3be3f, 0x3be4a, + 0x3be57, 0x3c000, 0x3c00f, 0x3c010, 0x3c033, 0x3c036, + 0x3c045, 0x3c046, 0x3c04b, 0x3c04c, 0x3c057, 0x3c060, + 0x3c0dd, 0x3c11e, 0x3c121, 0x3c200, 0x3c25b, 0x3c260, + 0x3c27d, 0x3c280, 0x3c295, 0x3c29c, 0x3c2a1, 0x3c520, + 0x3c55f, 0x3c580, 0x3c5f5, 0x3c5fe, 0x3c601, 0x3c9a0, + 0x3c9f5, 0x3cba0, 0x3cbf7, 0x3cbfe, 0x3cc01, 0x3cd80, + 0x3cdbf, 0x3cdc0, 0x3cded, 0x3cdfc, 0x3ce01, 0x3cfc0, + 0x3cfcf, 0x3cfd0, 0x3cfd9, 0x3cfda, 0x3cfdf, 0x3cfe0, + 0x3cfff, 0x3d000, 0x3d18b, 0x3d18e, 0x3d1af, 0x3d200, + 0x3d299, 0x3d2a0, 0x3d2b5, 0x3d2bc, 0x3d2c1, 0x3d8e2, + 0x3d96b, 0x3da02, 0x3da7d, 0x3dc00, 0x3dc09, 0x3dc0a, + 0x3dc41, 0x3dc42, 0x3dc47, 0x3dc48, 0x3dc4b, 0x3dc4e, + 0x3dc51, 0x3dc52, 0x3dc67, 0x3dc68, 0x3dc71, 0x3dc72, + 0x3dc75, 0x3dc76, 0x3dc79, 0x3dc84, 0x3dc87, 0x3dc8e, + 0x3dc91, 0x3dc92, 0x3dc95, 0x3dc96, 0x3dc99, 0x3dc9a, + 0x3dca1, 0x3dca2, 0x3dca7, 0x3dca8, 0x3dcab, 0x3dcae, + 0x3dcb1, 0x3dcb2, 0x3dcb5, 0x3dcb6, 0x3dcb9, 0x3dcba, + 0x3dcbd, 0x3dcbe, 0x3dcc1, 0x3dcc2, 0x3dcc7, 0x3dcc8, + 0x3dccb, 0x3dcce, 0x3dcd7, 0x3dcd8, 0x3dce7, 0x3dce8, + 0x3dcf1, 0x3dcf2, 0x3dcfb, 0x3dcfc, 0x3dcff, 0x3dd00, + 0x3dd15, 0x3dd16, 0x3dd39, 0x3dd42, 0x3dd49, 0x3dd4a, + 0x3dd55, 0x3dd56, 0x3dd79, 0x3dde0, 0x3dde5, 0x3e000, + 0x3e059, 0x3e060, 0x3e129, 0x3e140, 0x3e15f, 0x3e162, + 0x3e181, 0x3e182, 0x3e1a1, 0x3e1a2, 0x3e1ed, 0x3e200, + 0x3e35d, 0x3e3cc, 0x3e407, 0x3e420, 0x3e479, 0x3e480, + 0x3e493, 0x3e4a0, 0x3e4a5, 0x3e4c0, 0x3e4cd, 0x3e600, + 0x3edb3, 0x3edb8, 0x3eddb, 0x3ede0, 0x3edfb, 0x3ee00, + 0x3efb5, 0x3efc0, 0x3efd9, 0x3efe0, 0x3efe3, 0x3f000, + 0x3f019, 0x3f020, 0x3f091, 0x3f0a0, 0x3f0b5, 0x3f0c0, + 0x3f111, 0x3f120, 0x3f15d, 0x3f160, 0x3f179, 0x3f180, + 0x3f185, 0x3f1a0, 0x3f1b3, 0x3f200, 0x3f4b1, 0x3f4c0, + 0x3f4dd, 0x3f4e0, 0x3f4fb, 0x3f500, 0x3f517, 0x3f51c, + 0x3f58f, 0x3f590, 0x3f593, 0x3f59a, 0x3f5bb, 0x3f5be, + 0x3f5d7, 0x3f5de, 0x3f5f3, 0x3f600, 0x3f727, 0x3f728, + 0x3f7f7, 0x40000, 0x54dc1, 0x54e00, 0x5703d, 0x57040, + 0x59d5d, 0x59d60, 0x5d7c3, 0x5d7e0, 0x5dcbd, 0x5f000, + 0x5f43d, 0x60000, 0x62697, 0x626a0, 0x668f5, 0x1c0200, + 0x1c03e1, }; enum class _Gcb_property { @@ -399,236 +401,238 @@ 0x19336, 0x19394, 0x193c0, 0x1a174, 0x1a196, 0x1a1b4, 0x1a1c0, 0x1a556, 0x1a564, 0x1a576, 0x1a584, 0x1a5f0, 0x1a604, 0x1a610, 0x1a624, 0x1a630, 0x1a654, 0x1a6d6, - 0x1a734, 0x1a7d0, 0x1a7f4, 0x1a800, 0x1ab04, 0x1acf0, - 0x1b004, 0x1b046, 0x1b050, 0x1b344, 0x1b3e6, 0x1b424, - 0x1b450, 0x1b6b4, 0x1b740, 0x1b804, 0x1b826, 0x1b830, - 0x1ba16, 0x1ba24, 0x1ba66, 0x1ba84, 0x1bae0, 0x1be64, - 0x1be76, 0x1be84, 0x1bea6, 0x1bed4, 0x1bee6, 0x1bef4, - 0x1bf40, 0x1c246, 0x1c2c4, 0x1c346, 0x1c364, 0x1c380, - 0x1cd04, 0x1cd30, 0x1cd44, 0x1ce16, 0x1ce24, 0x1ce90, - 0x1ced4, 0x1cee0, 0x1cf44, 0x1cf50, 0x1cf76, 0x1cf84, - 0x1cfa0, 0x1dc04, 0x1e000, 0x200b1, 0x200c4, 0x200da, - 0x200e1, 0x20100, 0x20281, 0x202f0, 0x20601, 0x20700, - 0x20d04, 0x20f10, 0x2cef4, 0x2cf20, 0x2d7f4, 0x2d800, - 0x2de04, 0x2e000, 0x302a4, 0x30300, 0x30994, 0x309b0, - 0xa66f4, 0xa6730, 0xa6744, 0xa67e0, 0xa69e4, 0xa6a00, - 0xa6f04, 0xa6f20, 0xa8024, 0xa8030, 0xa8064, 0xa8070, - 0xa80b4, 0xa80c0, 0xa8236, 0xa8254, 0xa8276, 0xa8280, - 0xa82c4, 0xa82d0, 0xa8806, 0xa8820, 0xa8b46, 0xa8c44, - 0xa8c60, 0xa8e04, 0xa8f20, 0xa8ff4, 0xa9000, 0xa9264, - 0xa92e0, 0xa9474, 0xa9526, 0xa9534, 0xa9540, 0xa9607, - 0xa97d0, 0xa9804, 0xa9836, 0xa9840, 0xa9b34, 0xa9b46, - 0xa9b64, 0xa9ba6, 0xa9bc4, 0xa9be6, 0xa9c04, 0xa9c10, - 0xa9e54, 0xa9e60, 0xaa294, 0xaa2f6, 0xaa314, 0xaa336, - 0xaa354, 0xaa370, 0xaa434, 0xaa440, 0xaa4c4, 0xaa4d6, - 0xaa4e0, 0xaa7c4, 0xaa7d0, 0xaab04, 0xaab10, 0xaab24, - 0xaab50, 0xaab74, 0xaab90, 0xaabe4, 0xaac00, 0xaac14, - 0xaac20, 0xaaeb6, 0xaaec4, 0xaaee6, 0xaaf00, 0xaaf56, - 0xaaf64, 0xaaf70, 0xabe36, 0xabe54, 0xabe66, 0xabe84, - 0xabe96, 0xabeb0, 0xabec6, 0xabed4, 0xabee0, 0xac00b, - 0xac01c, 0xac1cb, 0xac1dc, 0xac38b, 0xac39c, 0xac54b, - 0xac55c, 0xac70b, 0xac71c, 0xac8cb, 0xac8dc, 0xaca8b, - 0xaca9c, 0xacc4b, 0xacc5c, 0xace0b, 0xace1c, 0xacfcb, - 0xacfdc, 0xad18b, 0xad19c, 0xad34b, 0xad35c, 0xad50b, - 0xad51c, 0xad6cb, 0xad6dc, 0xad88b, 0xad89c, 0xada4b, - 0xada5c, 0xadc0b, 0xadc1c, 0xaddcb, 0xadddc, 0xadf8b, - 0xadf9c, 0xae14b, 0xae15c, 0xae30b, 0xae31c, 0xae4cb, - 0xae4dc, 0xae68b, 0xae69c, 0xae84b, 0xae85c, 0xaea0b, - 0xaea1c, 0xaebcb, 0xaebdc, 0xaed8b, 0xaed9c, 0xaef4b, - 0xaef5c, 0xaf10b, 0xaf11c, 0xaf2cb, 0xaf2dc, 0xaf48b, - 0xaf49c, 0xaf64b, 0xaf65c, 0xaf80b, 0xaf81c, 0xaf9cb, - 0xaf9dc, 0xafb8b, 0xafb9c, 0xafd4b, 0xafd5c, 0xaff0b, - 0xaff1c, 0xb00cb, 0xb00dc, 0xb028b, 0xb029c, 0xb044b, - 0xb045c, 0xb060b, 0xb061c, 0xb07cb, 0xb07dc, 0xb098b, - 0xb099c, 0xb0b4b, 0xb0b5c, 0xb0d0b, 0xb0d1c, 0xb0ecb, - 0xb0edc, 0xb108b, 0xb109c, 0xb124b, 0xb125c, 0xb140b, - 0xb141c, 0xb15cb, 0xb15dc, 0xb178b, 0xb179c, 0xb194b, - 0xb195c, 0xb1b0b, 0xb1b1c, 0xb1ccb, 0xb1cdc, 0xb1e8b, - 0xb1e9c, 0xb204b, 0xb205c, 0xb220b, 0xb221c, 0xb23cb, - 0xb23dc, 0xb258b, 0xb259c, 0xb274b, 0xb275c, 0xb290b, - 0xb291c, 0xb2acb, 0xb2adc, 0xb2c8b, 0xb2c9c, 0xb2e4b, - 0xb2e5c, 0xb300b, 0xb301c, 0xb31cb, 0xb31dc, 0xb338b, - 0xb339c, 0xb354b, 0xb355c, 0xb370b, 0xb371c, 0xb38cb, - 0xb38dc, 0xb3a8b, 0xb3a9c, 0xb3c4b, 0xb3c5c, 0xb3e0b, - 0xb3e1c, 0xb3fcb, 0xb3fdc, 0xb418b, 0xb419c, 0xb434b, - 0xb435c, 0xb450b, 0xb451c, 0xb46cb, 0xb46dc, 0xb488b, - 0xb489c, 0xb4a4b, 0xb4a5c, 0xb4c0b, 0xb4c1c, 0xb4dcb, - 0xb4ddc, 0xb4f8b, 0xb4f9c, 0xb514b, 0xb515c, 0xb530b, - 0xb531c, 0xb54cb, 0xb54dc, 0xb568b, 0xb569c, 0xb584b, - 0xb585c, 0xb5a0b, 0xb5a1c, 0xb5bcb, 0xb5bdc, 0xb5d8b, - 0xb5d9c, 0xb5f4b, 0xb5f5c, 0xb610b, 0xb611c, 0xb62cb, - 0xb62dc, 0xb648b, 0xb649c, 0xb664b, 0xb665c, 0xb680b, - 0xb681c, 0xb69cb, 0xb69dc, 0xb6b8b, 0xb6b9c, 0xb6d4b, - 0xb6d5c, 0xb6f0b, 0xb6f1c, 0xb70cb, 0xb70dc, 0xb728b, - 0xb729c, 0xb744b, 0xb745c, 0xb760b, 0xb761c, 0xb77cb, - 0xb77dc, 0xb798b, 0xb799c, 0xb7b4b, 0xb7b5c, 0xb7d0b, - 0xb7d1c, 0xb7ecb, 0xb7edc, 0xb808b, 0xb809c, 0xb824b, - 0xb825c, 0xb840b, 0xb841c, 0xb85cb, 0xb85dc, 0xb878b, - 0xb879c, 0xb894b, 0xb895c, 0xb8b0b, 0xb8b1c, 0xb8ccb, - 0xb8cdc, 0xb8e8b, 0xb8e9c, 0xb904b, 0xb905c, 0xb920b, - 0xb921c, 0xb93cb, 0xb93dc, 0xb958b, 0xb959c, 0xb974b, - 0xb975c, 0xb990b, 0xb991c, 0xb9acb, 0xb9adc, 0xb9c8b, - 0xb9c9c, 0xb9e4b, 0xb9e5c, 0xba00b, 0xba01c, 0xba1cb, - 0xba1dc, 0xba38b, 0xba39c, 0xba54b, 0xba55c, 0xba70b, - 0xba71c, 0xba8cb, 0xba8dc, 0xbaa8b, 0xbaa9c, 0xbac4b, - 0xbac5c, 0xbae0b, 0xbae1c, 0xbafcb, 0xbafdc, 0xbb18b, - 0xbb19c, 0xbb34b, 0xbb35c, 0xbb50b, 0xbb51c, 0xbb6cb, - 0xbb6dc, 0xbb88b, 0xbb89c, 0xbba4b, 0xbba5c, 0xbbc0b, - 0xbbc1c, 0xbbdcb, 0xbbddc, 0xbbf8b, 0xbbf9c, 0xbc14b, - 0xbc15c, 0xbc30b, 0xbc31c, 0xbc4cb, 0xbc4dc, 0xbc68b, - 0xbc69c, 0xbc84b, 0xbc85c, 0xbca0b, 0xbca1c, 0xbcbcb, - 0xbcbdc, 0xbcd8b, 0xbcd9c, 0xbcf4b, 0xbcf5c, 0xbd10b, - 0xbd11c, 0xbd2cb, 0xbd2dc, 0xbd48b, 0xbd49c, 0xbd64b, - 0xbd65c, 0xbd80b, 0xbd81c, 0xbd9cb, 0xbd9dc, 0xbdb8b, - 0xbdb9c, 0xbdd4b, 0xbdd5c, 0xbdf0b, 0xbdf1c, 0xbe0cb, - 0xbe0dc, 0xbe28b, 0xbe29c, 0xbe44b, 0xbe45c, 0xbe60b, - 0xbe61c, 0xbe7cb, 0xbe7dc, 0xbe98b, 0xbe99c, 0xbeb4b, - 0xbeb5c, 0xbed0b, 0xbed1c, 0xbeecb, 0xbeedc, 0xbf08b, - 0xbf09c, 0xbf24b, 0xbf25c, 0xbf40b, 0xbf41c, 0xbf5cb, - 0xbf5dc, 0xbf78b, 0xbf79c, 0xbf94b, 0xbf95c, 0xbfb0b, - 0xbfb1c, 0xbfccb, 0xbfcdc, 0xbfe8b, 0xbfe9c, 0xc004b, - 0xc005c, 0xc020b, 0xc021c, 0xc03cb, 0xc03dc, 0xc058b, - 0xc059c, 0xc074b, 0xc075c, 0xc090b, 0xc091c, 0xc0acb, - 0xc0adc, 0xc0c8b, 0xc0c9c, 0xc0e4b, 0xc0e5c, 0xc100b, - 0xc101c, 0xc11cb, 0xc11dc, 0xc138b, 0xc139c, 0xc154b, - 0xc155c, 0xc170b, 0xc171c, 0xc18cb, 0xc18dc, 0xc1a8b, - 0xc1a9c, 0xc1c4b, 0xc1c5c, 0xc1e0b, 0xc1e1c, 0xc1fcb, - 0xc1fdc, 0xc218b, 0xc219c, 0xc234b, 0xc235c, 0xc250b, - 0xc251c, 0xc26cb, 0xc26dc, 0xc288b, 0xc289c, 0xc2a4b, - 0xc2a5c, 0xc2c0b, 0xc2c1c, 0xc2dcb, 0xc2ddc, 0xc2f8b, - 0xc2f9c, 0xc314b, 0xc315c, 0xc330b, 0xc331c, 0xc34cb, - 0xc34dc, 0xc368b, 0xc369c, 0xc384b, 0xc385c, 0xc3a0b, - 0xc3a1c, 0xc3bcb, 0xc3bdc, 0xc3d8b, 0xc3d9c, 0xc3f4b, - 0xc3f5c, 0xc410b, 0xc411c, 0xc42cb, 0xc42dc, 0xc448b, - 0xc449c, 0xc464b, 0xc465c, 0xc480b, 0xc481c, 0xc49cb, - 0xc49dc, 0xc4b8b, 0xc4b9c, 0xc4d4b, 0xc4d5c, 0xc4f0b, - 0xc4f1c, 0xc50cb, 0xc50dc, 0xc528b, 0xc529c, 0xc544b, - 0xc545c, 0xc560b, 0xc561c, 0xc57cb, 0xc57dc, 0xc598b, - 0xc599c, 0xc5b4b, 0xc5b5c, 0xc5d0b, 0xc5d1c, 0xc5ecb, - 0xc5edc, 0xc608b, 0xc609c, 0xc624b, 0xc625c, 0xc640b, - 0xc641c, 0xc65cb, 0xc65dc, 0xc678b, 0xc679c, 0xc694b, - 0xc695c, 0xc6b0b, 0xc6b1c, 0xc6ccb, 0xc6cdc, 0xc6e8b, - 0xc6e9c, 0xc704b, 0xc705c, 0xc720b, 0xc721c, 0xc73cb, - 0xc73dc, 0xc758b, 0xc759c, 0xc774b, 0xc775c, 0xc790b, - 0xc791c, 0xc7acb, 0xc7adc, 0xc7c8b, 0xc7c9c, 0xc7e4b, - 0xc7e5c, 0xc800b, 0xc801c, 0xc81cb, 0xc81dc, 0xc838b, - 0xc839c, 0xc854b, 0xc855c, 0xc870b, 0xc871c, 0xc88cb, - 0xc88dc, 0xc8a8b, 0xc8a9c, 0xc8c4b, 0xc8c5c, 0xc8e0b, - 0xc8e1c, 0xc8fcb, 0xc8fdc, 0xc918b, 0xc919c, 0xc934b, - 0xc935c, 0xc950b, 0xc951c, 0xc96cb, 0xc96dc, 0xc988b, - 0xc989c, 0xc9a4b, 0xc9a5c, 0xc9c0b, 0xc9c1c, 0xc9dcb, - 0xc9ddc, 0xc9f8b, 0xc9f9c, 0xca14b, 0xca15c, 0xca30b, - 0xca31c, 0xca4cb, 0xca4dc, 0xca68b, 0xca69c, 0xca84b, - 0xca85c, 0xcaa0b, 0xcaa1c, 0xcabcb, 0xcabdc, 0xcad8b, - 0xcad9c, 0xcaf4b, 0xcaf5c, 0xcb10b, 0xcb11c, 0xcb2cb, - 0xcb2dc, 0xcb48b, 0xcb49c, 0xcb64b, 0xcb65c, 0xcb80b, - 0xcb81c, 0xcb9cb, 0xcb9dc, 0xcbb8b, 0xcbb9c, 0xcbd4b, - 0xcbd5c, 0xcbf0b, 0xcbf1c, 0xcc0cb, 0xcc0dc, 0xcc28b, - 0xcc29c, 0xcc44b, 0xcc45c, 0xcc60b, 0xcc61c, 0xcc7cb, - 0xcc7dc, 0xcc98b, 0xcc99c, 0xccb4b, 0xccb5c, 0xccd0b, - 0xccd1c, 0xccecb, 0xccedc, 0xcd08b, 0xcd09c, 0xcd24b, - 0xcd25c, 0xcd40b, 0xcd41c, 0xcd5cb, 0xcd5dc, 0xcd78b, - 0xcd79c, 0xcd94b, 0xcd95c, 0xcdb0b, 0xcdb1c, 0xcdccb, - 0xcdcdc, 0xcde8b, 0xcde9c, 0xce04b, 0xce05c, 0xce20b, - 0xce21c, 0xce3cb, 0xce3dc, 0xce58b, 0xce59c, 0xce74b, - 0xce75c, 0xce90b, 0xce91c, 0xceacb, 0xceadc, 0xcec8b, - 0xcec9c, 0xcee4b, 0xcee5c, 0xcf00b, 0xcf01c, 0xcf1cb, - 0xcf1dc, 0xcf38b, 0xcf39c, 0xcf54b, 0xcf55c, 0xcf70b, - 0xcf71c, 0xcf8cb, 0xcf8dc, 0xcfa8b, 0xcfa9c, 0xcfc4b, - 0xcfc5c, 0xcfe0b, 0xcfe1c, 0xcffcb, 0xcffdc, 0xd018b, - 0xd019c, 0xd034b, 0xd035c, 0xd050b, 0xd051c, 0xd06cb, - 0xd06dc, 0xd088b, 0xd089c, 0xd0a4b, 0xd0a5c, 0xd0c0b, - 0xd0c1c, 0xd0dcb, 0xd0ddc, 0xd0f8b, 0xd0f9c, 0xd114b, - 0xd115c, 0xd130b, 0xd131c, 0xd14cb, 0xd14dc, 0xd168b, - 0xd169c, 0xd184b, 0xd185c, 0xd1a0b, 0xd1a1c, 0xd1bcb, - 0xd1bdc, 0xd1d8b, 0xd1d9c, 0xd1f4b, 0xd1f5c, 0xd210b, - 0xd211c, 0xd22cb, 0xd22dc, 0xd248b, 0xd249c, 0xd264b, - 0xd265c, 0xd280b, 0xd281c, 0xd29cb, 0xd29dc, 0xd2b8b, - 0xd2b9c, 0xd2d4b, 0xd2d5c, 0xd2f0b, 0xd2f1c, 0xd30cb, - 0xd30dc, 0xd328b, 0xd329c, 0xd344b, 0xd345c, 0xd360b, - 0xd361c, 0xd37cb, 0xd37dc, 0xd398b, 0xd399c, 0xd3b4b, - 0xd3b5c, 0xd3d0b, 0xd3d1c, 0xd3ecb, 0xd3edc, 0xd408b, - 0xd409c, 0xd424b, 0xd425c, 0xd440b, 0xd441c, 0xd45cb, - 0xd45dc, 0xd478b, 0xd479c, 0xd494b, 0xd495c, 0xd4b0b, - 0xd4b1c, 0xd4ccb, 0xd4cdc, 0xd4e8b, 0xd4e9c, 0xd504b, - 0xd505c, 0xd520b, 0xd521c, 0xd53cb, 0xd53dc, 0xd558b, - 0xd559c, 0xd574b, 0xd575c, 0xd590b, 0xd591c, 0xd5acb, - 0xd5adc, 0xd5c8b, 0xd5c9c, 0xd5e4b, 0xd5e5c, 0xd600b, - 0xd601c, 0xd61cb, 0xd61dc, 0xd638b, 0xd639c, 0xd654b, - 0xd655c, 0xd670b, 0xd671c, 0xd68cb, 0xd68dc, 0xd6a8b, - 0xd6a9c, 0xd6c4b, 0xd6c5c, 0xd6e0b, 0xd6e1c, 0xd6fcb, - 0xd6fdc, 0xd718b, 0xd719c, 0xd734b, 0xd735c, 0xd750b, - 0xd751c, 0xd76cb, 0xd76dc, 0xd788b, 0xd789c, 0xd7a40, - 0xd7b08, 0xd7c70, 0xd7cb9, 0xd7fc0, 0xfb1e4, 0xfb1f0, - 0xfe004, 0xfe100, 0xfe204, 0xfe300, 0xfeff1, 0xff000, - 0xff9e4, 0xffa00, 0xfff01, 0xfffc0, 0x101fd4, 0x101fe0, - 0x102e04, 0x102e10, 0x103764, 0x1037b0, 0x10a014, 0x10a040, - 0x10a054, 0x10a070, 0x10a0c4, 0x10a100, 0x10a384, 0x10a3b0, - 0x10a3f4, 0x10a400, 0x10ae54, 0x10ae70, 0x10d244, 0x10d280, - 0x10d694, 0x10d6e0, 0x10eab4, 0x10ead0, 0x10efc4, 0x10f000, - 0x10f464, 0x10f510, 0x10f824, 0x10f860, 0x110006, 0x110014, - 0x110026, 0x110030, 0x110384, 0x110470, 0x110704, 0x110710, - 0x110734, 0x110750, 0x1107f4, 0x110826, 0x110830, 0x110b06, - 0x110b34, 0x110b76, 0x110b94, 0x110bb0, 0x110bd5, 0x110be0, - 0x110c24, 0x110c30, 0x110cd5, 0x110ce0, 0x111004, 0x111030, - 0x111274, 0x1112c6, 0x1112d4, 0x111350, 0x111456, 0x111470, - 0x111734, 0x111740, 0x111804, 0x111826, 0x111830, 0x111b36, - 0x111b64, 0x111bf6, 0x111c04, 0x111c10, 0x111c25, 0x111c40, - 0x111c94, 0x111cd0, 0x111ce6, 0x111cf4, 0x111d00, 0x1122c6, - 0x1122f4, 0x112326, 0x112344, 0x112380, 0x1123e4, 0x1123f0, - 0x112414, 0x112420, 0x112df4, 0x112e06, 0x112e34, 0x112eb0, - 0x113004, 0x113026, 0x113040, 0x1133b4, 0x1133d0, 0x1133e4, - 0x1133f6, 0x113404, 0x113416, 0x113450, 0x113476, 0x113490, - 0x1134b6, 0x1134d4, 0x1134e0, 0x113574, 0x113580, 0x113626, - 0x113640, 0x113664, 0x1136d0, 0x113704, 0x113750, 0x113b84, - 0x113b96, 0x113bb4, 0x113c10, 0x113c24, 0x113c30, 0x113c54, - 0x113c60, 0x113c74, 0x113ca6, 0x113cb0, 0x113cc6, 0x113ce4, - 0x113d15, 0x113d24, 0x113d30, 0x113e14, 0x113e30, 0x114356, - 0x114384, 0x114406, 0x114424, 0x114456, 0x114464, 0x114470, - 0x1145e4, 0x1145f0, 0x114b04, 0x114b16, 0x114b34, 0x114b96, - 0x114ba4, 0x114bb6, 0x114bd4, 0x114be6, 0x114bf4, 0x114c16, - 0x114c24, 0x114c40, 0x115af4, 0x115b06, 0x115b24, 0x115b60, - 0x115b86, 0x115bc4, 0x115be6, 0x115bf4, 0x115c10, 0x115dc4, - 0x115de0, 0x116306, 0x116334, 0x1163b6, 0x1163d4, 0x1163e6, - 0x1163f4, 0x116410, 0x116ab4, 0x116ac6, 0x116ad4, 0x116ae6, - 0x116b04, 0x116b80, 0x1171d4, 0x1171e6, 0x1171f4, 0x117200, - 0x117224, 0x117266, 0x117274, 0x1172c0, 0x1182c6, 0x1182f4, - 0x118386, 0x118394, 0x1183b0, 0x119304, 0x119316, 0x119360, - 0x119376, 0x119390, 0x1193b4, 0x1193f5, 0x119406, 0x119415, - 0x119426, 0x119434, 0x119440, 0x119d16, 0x119d44, 0x119d80, - 0x119da4, 0x119dc6, 0x119e04, 0x119e10, 0x119e46, 0x119e50, - 0x11a014, 0x11a0b0, 0x11a334, 0x11a396, 0x11a3a5, 0x11a3b4, - 0x11a3f0, 0x11a474, 0x11a480, 0x11a514, 0x11a576, 0x11a594, - 0x11a5c0, 0x11a845, 0x11a8a4, 0x11a976, 0x11a984, 0x11a9a0, - 0x11c2f6, 0x11c304, 0x11c370, 0x11c384, 0x11c3e6, 0x11c3f4, - 0x11c400, 0x11c924, 0x11ca80, 0x11ca96, 0x11caa4, 0x11cb16, - 0x11cb24, 0x11cb46, 0x11cb54, 0x11cb70, 0x11d314, 0x11d370, - 0x11d3a4, 0x11d3b0, 0x11d3c4, 0x11d3e0, 0x11d3f4, 0x11d465, - 0x11d474, 0x11d480, 0x11d8a6, 0x11d8f0, 0x11d904, 0x11d920, - 0x11d936, 0x11d954, 0x11d966, 0x11d974, 0x11d980, 0x11ef34, - 0x11ef56, 0x11ef70, 0x11f004, 0x11f025, 0x11f036, 0x11f040, - 0x11f346, 0x11f364, 0x11f3b0, 0x11f3e6, 0x11f404, 0x11f430, - 0x11f5a4, 0x11f5b0, 0x134301, 0x134404, 0x134410, 0x134474, - 0x134560, 0x1611e4, 0x1612a6, 0x1612d4, 0x161300, 0x16af04, - 0x16af50, 0x16b304, 0x16b370, 0x16d638, 0x16d640, 0x16d678, - 0x16d6b0, 0x16f4f4, 0x16f500, 0x16f516, 0x16f880, 0x16f8f4, - 0x16f930, 0x16fe44, 0x16fe50, 0x16ff04, 0x16ff20, 0x1bc9d4, - 0x1bc9f0, 0x1bca01, 0x1bca40, 0x1cf004, 0x1cf2e0, 0x1cf304, - 0x1cf470, 0x1d1654, 0x1d16a0, 0x1d16d4, 0x1d1731, 0x1d17b4, - 0x1d1830, 0x1d1854, 0x1d18c0, 0x1d1aa4, 0x1d1ae0, 0x1d2424, - 0x1d2450, 0x1da004, 0x1da370, 0x1da3b4, 0x1da6d0, 0x1da754, - 0x1da760, 0x1da844, 0x1da850, 0x1da9b4, 0x1daa00, 0x1daa14, - 0x1dab00, 0x1e0004, 0x1e0070, 0x1e0084, 0x1e0190, 0x1e01b4, - 0x1e0220, 0x1e0234, 0x1e0250, 0x1e0264, 0x1e02b0, 0x1e08f4, - 0x1e0900, 0x1e1304, 0x1e1370, 0x1e2ae4, 0x1e2af0, 0x1e2ec4, - 0x1e2f00, 0x1e4ec4, 0x1e4f00, 0x1e5ee4, 0x1e5f00, 0x1e8d04, - 0x1e8d70, 0x1e9444, 0x1e94b0, 0x1f1e6d, 0x1f2000, 0x1f3fb4, - 0x1f4000, 0xe00001, 0xe00204, 0xe00801, 0xe01004, 0xe01f01, - 0xe10000, + 0x1a734, 0x1a7d0, 0x1a7f4, 0x1a800, 0x1ab04, 0x1ade0, + 0x1ae04, 0x1aec0, 0x1b004, 0x1b046, 0x1b050, 0x1b344, + 0x1b3e6, 0x1b424, 0x1b450, 0x1b6b4, 0x1b740, 0x1b804, + 0x1b826, 0x1b830, 0x1ba16, 0x1ba24, 0x1ba66, 0x1ba84, + 0x1bae0, 0x1be64, 0x1be76, 0x1be84, 0x1bea6, 0x1bed4, + 0x1bee6, 0x1bef4, 0x1bf40, 0x1c246, 0x1c2c4, 0x1c346, + 0x1c364, 0x1c380, 0x1cd04, 0x1cd30, 0x1cd44, 0x1ce16, + 0x1ce24, 0x1ce90, 0x1ced4, 0x1cee0, 0x1cf44, 0x1cf50, + 0x1cf76, 0x1cf84, 0x1cfa0, 0x1dc04, 0x1e000, 0x200b1, + 0x200c4, 0x200da, 0x200e1, 0x20100, 0x20281, 0x202f0, + 0x20601, 0x20700, 0x20d04, 0x20f10, 0x2cef4, 0x2cf20, + 0x2d7f4, 0x2d800, 0x2de04, 0x2e000, 0x302a4, 0x30300, + 0x30994, 0x309b0, 0xa66f4, 0xa6730, 0xa6744, 0xa67e0, + 0xa69e4, 0xa6a00, 0xa6f04, 0xa6f20, 0xa8024, 0xa8030, + 0xa8064, 0xa8070, 0xa80b4, 0xa80c0, 0xa8236, 0xa8254, + 0xa8276, 0xa8280, 0xa82c4, 0xa82d0, 0xa8806, 0xa8820, + 0xa8b46, 0xa8c44, 0xa8c60, 0xa8e04, 0xa8f20, 0xa8ff4, + 0xa9000, 0xa9264, 0xa92e0, 0xa9474, 0xa9526, 0xa9534, + 0xa9540, 0xa9607, 0xa97d0, 0xa9804, 0xa9836, 0xa9840, + 0xa9b34, 0xa9b46, 0xa9b64, 0xa9ba6, 0xa9bc4, 0xa9be6, + 0xa9c04, 0xa9c10, 0xa9e54, 0xa9e60, 0xaa294, 0xaa2f6, + 0xaa314, 0xaa336, 0xaa354, 0xaa370, 0xaa434, 0xaa440, + 0xaa4c4, 0xaa4d6, 0xaa4e0, 0xaa7c4, 0xaa7d0, 0xaab04, + 0xaab10, 0xaab24, 0xaab50, 0xaab74, 0xaab90, 0xaabe4, + 0xaac00, 0xaac14, 0xaac20, 0xaaeb6, 0xaaec4, 0xaaee6, + 0xaaf00, 0xaaf56, 0xaaf64, 0xaaf70, 0xabe36, 0xabe54, + 0xabe66, 0xabe84, 0xabe96, 0xabeb0, 0xabec6, 0xabed4, + 0xabee0, 0xac00b, 0xac01c, 0xac1cb, 0xac1dc, 0xac38b, + 0xac39c, 0xac54b, 0xac55c, 0xac70b, 0xac71c, 0xac8cb, + 0xac8dc, 0xaca8b, 0xaca9c, 0xacc4b, 0xacc5c, 0xace0b, + 0xace1c, 0xacfcb, 0xacfdc, 0xad18b, 0xad19c, 0xad34b, + 0xad35c, 0xad50b, 0xad51c, 0xad6cb, 0xad6dc, 0xad88b, + 0xad89c, 0xada4b, 0xada5c, 0xadc0b, 0xadc1c, 0xaddcb, + 0xadddc, 0xadf8b, 0xadf9c, 0xae14b, 0xae15c, 0xae30b, + 0xae31c, 0xae4cb, 0xae4dc, 0xae68b, 0xae69c, 0xae84b, + 0xae85c, 0xaea0b, 0xaea1c, 0xaebcb, 0xaebdc, 0xaed8b, + 0xaed9c, 0xaef4b, 0xaef5c, 0xaf10b, 0xaf11c, 0xaf2cb, + 0xaf2dc, 0xaf48b, 0xaf49c, 0xaf64b, 0xaf65c, 0xaf80b, + 0xaf81c, 0xaf9cb, 0xaf9dc, 0xafb8b, 0xafb9c, 0xafd4b, + 0xafd5c, 0xaff0b, 0xaff1c, 0xb00cb, 0xb00dc, 0xb028b, + 0xb029c, 0xb044b, 0xb045c, 0xb060b, 0xb061c, 0xb07cb, + 0xb07dc, 0xb098b, 0xb099c, 0xb0b4b, 0xb0b5c, 0xb0d0b, + 0xb0d1c, 0xb0ecb, 0xb0edc, 0xb108b, 0xb109c, 0xb124b, + 0xb125c, 0xb140b, 0xb141c, 0xb15cb, 0xb15dc, 0xb178b, + 0xb179c, 0xb194b, 0xb195c, 0xb1b0b, 0xb1b1c, 0xb1ccb, + 0xb1cdc, 0xb1e8b, 0xb1e9c, 0xb204b, 0xb205c, 0xb220b, + 0xb221c, 0xb23cb, 0xb23dc, 0xb258b, 0xb259c, 0xb274b, + 0xb275c, 0xb290b, 0xb291c, 0xb2acb, 0xb2adc, 0xb2c8b, + 0xb2c9c, 0xb2e4b, 0xb2e5c, 0xb300b, 0xb301c, 0xb31cb, + 0xb31dc, 0xb338b, 0xb339c, 0xb354b, 0xb355c, 0xb370b, + 0xb371c, 0xb38cb, 0xb38dc, 0xb3a8b, 0xb3a9c, 0xb3c4b, + 0xb3c5c, 0xb3e0b, 0xb3e1c, 0xb3fcb, 0xb3fdc, 0xb418b, + 0xb419c, 0xb434b, 0xb435c, 0xb450b, 0xb451c, 0xb46cb, + 0xb46dc, 0xb488b, 0xb489c, 0xb4a4b, 0xb4a5c, 0xb4c0b, + 0xb4c1c, 0xb4dcb, 0xb4ddc, 0xb4f8b, 0xb4f9c, 0xb514b, + 0xb515c, 0xb530b, 0xb531c, 0xb54cb, 0xb54dc, 0xb568b, + 0xb569c, 0xb584b, 0xb585c, 0xb5a0b, 0xb5a1c, 0xb5bcb, + 0xb5bdc, 0xb5d8b, 0xb5d9c, 0xb5f4b, 0xb5f5c, 0xb610b, + 0xb611c, 0xb62cb, 0xb62dc, 0xb648b, 0xb649c, 0xb664b, + 0xb665c, 0xb680b, 0xb681c, 0xb69cb, 0xb69dc, 0xb6b8b, + 0xb6b9c, 0xb6d4b, 0xb6d5c, 0xb6f0b, 0xb6f1c, 0xb70cb, + 0xb70dc, 0xb728b, 0xb729c, 0xb744b, 0xb745c, 0xb760b, + 0xb761c, 0xb77cb, 0xb77dc, 0xb798b, 0xb799c, 0xb7b4b, + 0xb7b5c, 0xb7d0b, 0xb7d1c, 0xb7ecb, 0xb7edc, 0xb808b, + 0xb809c, 0xb824b, 0xb825c, 0xb840b, 0xb841c, 0xb85cb, + 0xb85dc, 0xb878b, 0xb879c, 0xb894b, 0xb895c, 0xb8b0b, + 0xb8b1c, 0xb8ccb, 0xb8cdc, 0xb8e8b, 0xb8e9c, 0xb904b, + 0xb905c, 0xb920b, 0xb921c, 0xb93cb, 0xb93dc, 0xb958b, + 0xb959c, 0xb974b, 0xb975c, 0xb990b, 0xb991c, 0xb9acb, + 0xb9adc, 0xb9c8b, 0xb9c9c, 0xb9e4b, 0xb9e5c, 0xba00b, + 0xba01c, 0xba1cb, 0xba1dc, 0xba38b, 0xba39c, 0xba54b, + 0xba55c, 0xba70b, 0xba71c, 0xba8cb, 0xba8dc, 0xbaa8b, + 0xbaa9c, 0xbac4b, 0xbac5c, 0xbae0b, 0xbae1c, 0xbafcb, + 0xbafdc, 0xbb18b, 0xbb19c, 0xbb34b, 0xbb35c, 0xbb50b, + 0xbb51c, 0xbb6cb, 0xbb6dc, 0xbb88b, 0xbb89c, 0xbba4b, + 0xbba5c, 0xbbc0b, 0xbbc1c, 0xbbdcb, 0xbbddc, 0xbbf8b, + 0xbbf9c, 0xbc14b, 0xbc15c, 0xbc30b, 0xbc31c, 0xbc4cb, + 0xbc4dc, 0xbc68b, 0xbc69c, 0xbc84b, 0xbc85c, 0xbca0b, + 0xbca1c, 0xbcbcb, 0xbcbdc, 0xbcd8b, 0xbcd9c, 0xbcf4b, + 0xbcf5c, 0xbd10b, 0xbd11c, 0xbd2cb, 0xbd2dc, 0xbd48b, + 0xbd49c, 0xbd64b, 0xbd65c, 0xbd80b, 0xbd81c, 0xbd9cb, + 0xbd9dc, 0xbdb8b, 0xbdb9c, 0xbdd4b, 0xbdd5c, 0xbdf0b, + 0xbdf1c, 0xbe0cb, 0xbe0dc, 0xbe28b, 0xbe29c, 0xbe44b, + 0xbe45c, 0xbe60b, 0xbe61c, 0xbe7cb, 0xbe7dc, 0xbe98b, + 0xbe99c, 0xbeb4b, 0xbeb5c, 0xbed0b, 0xbed1c, 0xbeecb, + 0xbeedc, 0xbf08b, 0xbf09c, 0xbf24b, 0xbf25c, 0xbf40b, + 0xbf41c, 0xbf5cb, 0xbf5dc, 0xbf78b, 0xbf79c, 0xbf94b, + 0xbf95c, 0xbfb0b, 0xbfb1c, 0xbfccb, 0xbfcdc, 0xbfe8b, + 0xbfe9c, 0xc004b, 0xc005c, 0xc020b, 0xc021c, 0xc03cb, + 0xc03dc, 0xc058b, 0xc059c, 0xc074b, 0xc075c, 0xc090b, + 0xc091c, 0xc0acb, 0xc0adc, 0xc0c8b, 0xc0c9c, 0xc0e4b, + 0xc0e5c, 0xc100b, 0xc101c, 0xc11cb, 0xc11dc, 0xc138b, + 0xc139c, 0xc154b, 0xc155c, 0xc170b, 0xc171c, 0xc18cb, + 0xc18dc, 0xc1a8b, 0xc1a9c, 0xc1c4b, 0xc1c5c, 0xc1e0b, + 0xc1e1c, 0xc1fcb, 0xc1fdc, 0xc218b, 0xc219c, 0xc234b, + 0xc235c, 0xc250b, 0xc251c, 0xc26cb, 0xc26dc, 0xc288b, + 0xc289c, 0xc2a4b, 0xc2a5c, 0xc2c0b, 0xc2c1c, 0xc2dcb, + 0xc2ddc, 0xc2f8b, 0xc2f9c, 0xc314b, 0xc315c, 0xc330b, + 0xc331c, 0xc34cb, 0xc34dc, 0xc368b, 0xc369c, 0xc384b, + 0xc385c, 0xc3a0b, 0xc3a1c, 0xc3bcb, 0xc3bdc, 0xc3d8b, + 0xc3d9c, 0xc3f4b, 0xc3f5c, 0xc410b, 0xc411c, 0xc42cb, + 0xc42dc, 0xc448b, 0xc449c, 0xc464b, 0xc465c, 0xc480b, + 0xc481c, 0xc49cb, 0xc49dc, 0xc4b8b, 0xc4b9c, 0xc4d4b, + 0xc4d5c, 0xc4f0b, 0xc4f1c, 0xc50cb, 0xc50dc, 0xc528b, + 0xc529c, 0xc544b, 0xc545c, 0xc560b, 0xc561c, 0xc57cb, + 0xc57dc, 0xc598b, 0xc599c, 0xc5b4b, 0xc5b5c, 0xc5d0b, + 0xc5d1c, 0xc5ecb, 0xc5edc, 0xc608b, 0xc609c, 0xc624b, + 0xc625c, 0xc640b, 0xc641c, 0xc65cb, 0xc65dc, 0xc678b, + 0xc679c, 0xc694b, 0xc695c, 0xc6b0b, 0xc6b1c, 0xc6ccb, + 0xc6cdc, 0xc6e8b, 0xc6e9c, 0xc704b, 0xc705c, 0xc720b, + 0xc721c, 0xc73cb, 0xc73dc, 0xc758b, 0xc759c, 0xc774b, + 0xc775c, 0xc790b, 0xc791c, 0xc7acb, 0xc7adc, 0xc7c8b, + 0xc7c9c, 0xc7e4b, 0xc7e5c, 0xc800b, 0xc801c, 0xc81cb, + 0xc81dc, 0xc838b, 0xc839c, 0xc854b, 0xc855c, 0xc870b, + 0xc871c, 0xc88cb, 0xc88dc, 0xc8a8b, 0xc8a9c, 0xc8c4b, + 0xc8c5c, 0xc8e0b, 0xc8e1c, 0xc8fcb, 0xc8fdc, 0xc918b, + 0xc919c, 0xc934b, 0xc935c, 0xc950b, 0xc951c, 0xc96cb, + 0xc96dc, 0xc988b, 0xc989c, 0xc9a4b, 0xc9a5c, 0xc9c0b, + 0xc9c1c, 0xc9dcb, 0xc9ddc, 0xc9f8b, 0xc9f9c, 0xca14b, + 0xca15c, 0xca30b, 0xca31c, 0xca4cb, 0xca4dc, 0xca68b, + 0xca69c, 0xca84b, 0xca85c, 0xcaa0b, 0xcaa1c, 0xcabcb, + 0xcabdc, 0xcad8b, 0xcad9c, 0xcaf4b, 0xcaf5c, 0xcb10b, + 0xcb11c, 0xcb2cb, 0xcb2dc, 0xcb48b, 0xcb49c, 0xcb64b, + 0xcb65c, 0xcb80b, 0xcb81c, 0xcb9cb, 0xcb9dc, 0xcbb8b, + 0xcbb9c, 0xcbd4b, 0xcbd5c, 0xcbf0b, 0xcbf1c, 0xcc0cb, + 0xcc0dc, 0xcc28b, 0xcc29c, 0xcc44b, 0xcc45c, 0xcc60b, + 0xcc61c, 0xcc7cb, 0xcc7dc, 0xcc98b, 0xcc99c, 0xccb4b, + 0xccb5c, 0xccd0b, 0xccd1c, 0xccecb, 0xccedc, 0xcd08b, + 0xcd09c, 0xcd24b, 0xcd25c, 0xcd40b, 0xcd41c, 0xcd5cb, + 0xcd5dc, 0xcd78b, 0xcd79c, 0xcd94b, 0xcd95c, 0xcdb0b, + 0xcdb1c, 0xcdccb, 0xcdcdc, 0xcde8b, 0xcde9c, 0xce04b, + 0xce05c, 0xce20b, 0xce21c, 0xce3cb, 0xce3dc, 0xce58b, + 0xce59c, 0xce74b, 0xce75c, 0xce90b, 0xce91c, 0xceacb, + 0xceadc, 0xcec8b, 0xcec9c, 0xcee4b, 0xcee5c, 0xcf00b, + 0xcf01c, 0xcf1cb, 0xcf1dc, 0xcf38b, 0xcf39c, 0xcf54b, + 0xcf55c, 0xcf70b, 0xcf71c, 0xcf8cb, 0xcf8dc, 0xcfa8b, + 0xcfa9c, 0xcfc4b, 0xcfc5c, 0xcfe0b, 0xcfe1c, 0xcffcb, + 0xcffdc, 0xd018b, 0xd019c, 0xd034b, 0xd035c, 0xd050b, + 0xd051c, 0xd06cb, 0xd06dc, 0xd088b, 0xd089c, 0xd0a4b, + 0xd0a5c, 0xd0c0b, 0xd0c1c, 0xd0dcb, 0xd0ddc, 0xd0f8b, + 0xd0f9c, 0xd114b, 0xd115c, 0xd130b, 0xd131c, 0xd14cb, + 0xd14dc, 0xd168b, 0xd169c, 0xd184b, 0xd185c, 0xd1a0b, + 0xd1a1c, 0xd1bcb, 0xd1bdc, 0xd1d8b, 0xd1d9c, 0xd1f4b, + 0xd1f5c, 0xd210b, 0xd211c, 0xd22cb, 0xd22dc, 0xd248b, + 0xd249c, 0xd264b, 0xd265c, 0xd280b, 0xd281c, 0xd29cb, + 0xd29dc, 0xd2b8b, 0xd2b9c, 0xd2d4b, 0xd2d5c, 0xd2f0b, + 0xd2f1c, 0xd30cb, 0xd30dc, 0xd328b, 0xd329c, 0xd344b, + 0xd345c, 0xd360b, 0xd361c, 0xd37cb, 0xd37dc, 0xd398b, + 0xd399c, 0xd3b4b, 0xd3b5c, 0xd3d0b, 0xd3d1c, 0xd3ecb, + 0xd3edc, 0xd408b, 0xd409c, 0xd424b, 0xd425c, 0xd440b, + 0xd441c, 0xd45cb, 0xd45dc, 0xd478b, 0xd479c, 0xd494b, + 0xd495c, 0xd4b0b, 0xd4b1c, 0xd4ccb, 0xd4cdc, 0xd4e8b, + 0xd4e9c, 0xd504b, 0xd505c, 0xd520b, 0xd521c, 0xd53cb, + 0xd53dc, 0xd558b, 0xd559c, 0xd574b, 0xd575c, 0xd590b, + 0xd591c, 0xd5acb, 0xd5adc, 0xd5c8b, 0xd5c9c, 0xd5e4b, + 0xd5e5c, 0xd600b, 0xd601c, 0xd61cb, 0xd61dc, 0xd638b, + 0xd639c, 0xd654b, 0xd655c, 0xd670b, 0xd671c, 0xd68cb, + 0xd68dc, 0xd6a8b, 0xd6a9c, 0xd6c4b, 0xd6c5c, 0xd6e0b, + 0xd6e1c, 0xd6fcb, 0xd6fdc, 0xd718b, 0xd719c, 0xd734b, + 0xd735c, 0xd750b, 0xd751c, 0xd76cb, 0xd76dc, 0xd788b, + 0xd789c, 0xd7a40, 0xd7b08, 0xd7c70, 0xd7cb9, 0xd7fc0, + 0xfb1e4, 0xfb1f0, 0xfe004, 0xfe100, 0xfe204, 0xfe300, + 0xfeff1, 0xff000, 0xff9e4, 0xffa00, 0xfff01, 0xfffc0, + 0x101fd4, 0x101fe0, 0x102e04, 0x102e10, 0x103764, 0x1037b0, + 0x10a014, 0x10a040, 0x10a054, 0x10a070, 0x10a0c4, 0x10a100, + 0x10a384, 0x10a3b0, 0x10a3f4, 0x10a400, 0x10ae54, 0x10ae70, + 0x10d244, 0x10d280, 0x10d694, 0x10d6e0, 0x10eab4, 0x10ead0, + 0x10efa4, 0x10f000, 0x10f464, 0x10f510, 0x10f824, 0x10f860, + 0x110006, 0x110014, 0x110026, 0x110030, 0x110384, 0x110470, + 0x110704, 0x110710, 0x110734, 0x110750, 0x1107f4, 0x110826, + 0x110830, 0x110b06, 0x110b34, 0x110b76, 0x110b94, 0x110bb0, + 0x110bd5, 0x110be0, 0x110c24, 0x110c30, 0x110cd5, 0x110ce0, + 0x111004, 0x111030, 0x111274, 0x1112c6, 0x1112d4, 0x111350, + 0x111456, 0x111470, 0x111734, 0x111740, 0x111804, 0x111826, + 0x111830, 0x111b36, 0x111b64, 0x111bf6, 0x111c04, 0x111c10, + 0x111c25, 0x111c40, 0x111c94, 0x111cd0, 0x111ce6, 0x111cf4, + 0x111d00, 0x1122c6, 0x1122f4, 0x112326, 0x112344, 0x112380, + 0x1123e4, 0x1123f0, 0x112414, 0x112420, 0x112df4, 0x112e06, + 0x112e34, 0x112eb0, 0x113004, 0x113026, 0x113040, 0x1133b4, + 0x1133d0, 0x1133e4, 0x1133f6, 0x113404, 0x113416, 0x113450, + 0x113476, 0x113490, 0x1134b6, 0x1134d4, 0x1134e0, 0x113574, + 0x113580, 0x113626, 0x113640, 0x113664, 0x1136d0, 0x113704, + 0x113750, 0x113b84, 0x113b96, 0x113bb4, 0x113c10, 0x113c24, + 0x113c30, 0x113c54, 0x113c60, 0x113c74, 0x113ca6, 0x113cb0, + 0x113cc6, 0x113ce4, 0x113d15, 0x113d24, 0x113d30, 0x113e14, + 0x113e30, 0x114356, 0x114384, 0x114406, 0x114424, 0x114456, + 0x114464, 0x114470, 0x1145e4, 0x1145f0, 0x114b04, 0x114b16, + 0x114b34, 0x114b96, 0x114ba4, 0x114bb6, 0x114bd4, 0x114be6, + 0x114bf4, 0x114c16, 0x114c24, 0x114c40, 0x115af4, 0x115b06, + 0x115b24, 0x115b60, 0x115b86, 0x115bc4, 0x115be6, 0x115bf4, + 0x115c10, 0x115dc4, 0x115de0, 0x116306, 0x116334, 0x1163b6, + 0x1163d4, 0x1163e6, 0x1163f4, 0x116410, 0x116ab4, 0x116ac6, + 0x116ad4, 0x116ae6, 0x116b04, 0x116b80, 0x1171d4, 0x1171e6, + 0x1171f4, 0x117200, 0x117224, 0x117266, 0x117274, 0x1172c0, + 0x1182c6, 0x1182f4, 0x118386, 0x118394, 0x1183b0, 0x119304, + 0x119316, 0x119360, 0x119376, 0x119390, 0x1193b4, 0x1193f5, + 0x119406, 0x119415, 0x119426, 0x119434, 0x119440, 0x119d16, + 0x119d44, 0x119d80, 0x119da4, 0x119dc6, 0x119e04, 0x119e10, + 0x119e46, 0x119e50, 0x11a014, 0x11a0b0, 0x11a334, 0x11a396, + 0x11a3a0, 0x11a3b4, 0x11a3f0, 0x11a474, 0x11a480, 0x11a514, + 0x11a576, 0x11a594, 0x11a5c0, 0x11a845, 0x11a8a4, 0x11a976, + 0x11a984, 0x11a9a0, 0x11b604, 0x11b616, 0x11b624, 0x11b656, + 0x11b664, 0x11b676, 0x11b680, 0x11c2f6, 0x11c304, 0x11c370, + 0x11c384, 0x11c3e6, 0x11c3f4, 0x11c400, 0x11c924, 0x11ca80, + 0x11ca96, 0x11caa4, 0x11cb16, 0x11cb24, 0x11cb46, 0x11cb54, + 0x11cb70, 0x11d314, 0x11d370, 0x11d3a4, 0x11d3b0, 0x11d3c4, + 0x11d3e0, 0x11d3f4, 0x11d465, 0x11d474, 0x11d480, 0x11d8a6, + 0x11d8f0, 0x11d904, 0x11d920, 0x11d936, 0x11d954, 0x11d966, + 0x11d974, 0x11d980, 0x11ef34, 0x11ef56, 0x11ef70, 0x11f004, + 0x11f025, 0x11f036, 0x11f040, 0x11f346, 0x11f364, 0x11f3b0, + 0x11f3e6, 0x11f404, 0x11f430, 0x11f5a4, 0x11f5b0, 0x134301, + 0x134404, 0x134410, 0x134474, 0x134560, 0x1611e4, 0x1612a6, + 0x1612d4, 0x161300, 0x16af04, 0x16af50, 0x16b304, 0x16b370, + 0x16d638, 0x16d640, 0x16d678, 0x16d6b0, 0x16f4f4, 0x16f500, + 0x16f516, 0x16f880, 0x16f8f4, 0x16f930, 0x16fe44, 0x16fe50, + 0x16ff04, 0x16ff20, 0x1bc9d4, 0x1bc9f0, 0x1bca01, 0x1bca40, + 0x1cf004, 0x1cf2e0, 0x1cf304, 0x1cf470, 0x1d1654, 0x1d16a0, + 0x1d16d4, 0x1d1731, 0x1d17b4, 0x1d1830, 0x1d1854, 0x1d18c0, + 0x1d1aa4, 0x1d1ae0, 0x1d2424, 0x1d2450, 0x1da004, 0x1da370, + 0x1da3b4, 0x1da6d0, 0x1da754, 0x1da760, 0x1da844, 0x1da850, + 0x1da9b4, 0x1daa00, 0x1daa14, 0x1dab00, 0x1e0004, 0x1e0070, + 0x1e0084, 0x1e0190, 0x1e01b4, 0x1e0220, 0x1e0234, 0x1e0250, + 0x1e0264, 0x1e02b0, 0x1e08f4, 0x1e0900, 0x1e1304, 0x1e1370, + 0x1e2ae4, 0x1e2af0, 0x1e2ec4, 0x1e2f00, 0x1e4ec4, 0x1e4f00, + 0x1e5ee4, 0x1e5f00, 0x1e6e34, 0x1e6e40, 0x1e6e64, 0x1e6e70, + 0x1e6ee4, 0x1e6f00, 0x1e6f54, 0x1e6f60, 0x1e8d04, 0x1e8d70, + 0x1e9444, 0x1e94b0, 0x1f1e6d, 0x1f2000, 0x1f3fb4, 0x1f4000, + 0xe00001, 0xe00204, 0xe00801, 0xe01004, 0xe01f01, 0xe10000, }; inline constexpr char32_t __incb_linkers[] = { - 0x094d, 0x09cd, 0x0acd, 0x0b4d, 0x0c4d, 0x0d4d, + 0x094d, 0x09cd, 0x0acd, 0x0b4d, 0x0c4d, 0x0d4d, 0x1039, 0x17d2, 0x1a60, 0x1b44, 0x1bab, 0xa9c0, 0xaaf6, 0x10a3f, 0x11133, 0x113d0, 0x1193e, 0x11a47, 0x11a99, 0x11f42, }; enum class _InCB { _Consonant = 1, _Extend = 2 }; @@ -681,94 +685,109 @@ 0x3cd6, 0x3cd8, 0x3cde, 0x3ce0, 0x3ce6, 0x3ce8, 0x3dc6, 0x3dfc, 0x3e02, 0x3e14, 0x3e1a, 0x3e20, 0x3e36, 0x3e60, 0x3e66, 0x3ef4, 0x3f1a, 0x3f1c, - 0x40b6, 0x40c4, 0x40ca, 0x40e0, 0x40e6, 0x40ec, - 0x40f6, 0x40fc, 0x4162, 0x4168, 0x417a, 0x4184, - 0x41c6, 0x41d4, 0x420a, 0x420c, 0x4216, 0x421c, - 0x4236, 0x4238, 0x4276, 0x4278, 0x4d76, 0x4d80, - 0x5c4a, 0x5c58, 0x5cca, 0x5cd4, 0x5d4a, 0x5d50, - 0x5dca, 0x5dd0, 0x5ed2, 0x5ed8, 0x5ede, 0x5ef8, - 0x5f1a, 0x5f1c, 0x5f26, 0x5f50, 0x5f76, 0x5f78, - 0x602e, 0x6038, 0x603e, 0x6040, 0x6216, 0x621c, - 0x62a6, 0x62a8, 0x6482, 0x648c, 0x649e, 0x64a4, - 0x64ca, 0x64cc, 0x64e6, 0x64f0, 0x685e, 0x6864, - 0x686e, 0x6870, 0x695a, 0x695c, 0x6962, 0x697c, - 0x6982, 0x6984, 0x698a, 0x698c, 0x6996, 0x69b4, - 0x69ce, 0x69f4, 0x69fe, 0x6a00, 0x6ac2, 0x6b3c, - 0x6c02, 0x6c10, 0x6cd2, 0x6cf8, 0x6d0a, 0x6d14, - 0x6dae, 0x6dd0, 0x6e02, 0x6e08, 0x6e8a, 0x6e98, - 0x6ea2, 0x6eb8, 0x6f9a, 0x6f9c, 0x6fa2, 0x6fa8, - 0x6fb6, 0x6fb8, 0x6fbe, 0x6fd0, 0x70b2, 0x70d0, - 0x70da, 0x70e0, 0x7342, 0x734c, 0x7352, 0x7384, - 0x738a, 0x73a4, 0x73b6, 0x73b8, 0x73d2, 0x73d4, - 0x73e2, 0x73e8, 0x7702, 0x7800, 0x8036, 0x8038, - 0x8342, 0x83c4, 0xb3be, 0xb3c8, 0xb5fe, 0xb600, - 0xb782, 0xb800, 0xc0aa, 0xc0c0, 0xc266, 0xc26c, - 0x299be, 0x299cc, 0x299d2, 0x299f8, 0x29a7a, 0x29a80, - 0x29bc2, 0x29bc8, 0x2a00a, 0x2a00c, 0x2a01a, 0x2a01c, - 0x2a02e, 0x2a030, 0x2a096, 0x2a09c, 0x2a0b2, 0x2a0b4, - 0x2a312, 0x2a318, 0x2a382, 0x2a3c8, 0x2a3fe, 0x2a400, - 0x2a49a, 0x2a4b8, 0x2a51e, 0x2a548, 0x2a54e, 0x2a550, - 0x2a602, 0x2a60c, 0x2a6ce, 0x2a6d0, 0x2a6da, 0x2a6e8, - 0x2a6f2, 0x2a6f8, 0x2a702, 0x2a704, 0x2a796, 0x2a798, - 0x2a8a6, 0x2a8bc, 0x2a8c6, 0x2a8cc, 0x2a8d6, 0x2a8dc, - 0x2a90e, 0x2a910, 0x2a932, 0x2a934, 0x2a9f2, 0x2a9f4, - 0x2aac2, 0x2aac4, 0x2aaca, 0x2aad4, 0x2aade, 0x2aae4, - 0x2aafa, 0x2ab00, 0x2ab06, 0x2ab08, 0x2abb2, 0x2abb8, - 0x2abda, 0x2abdc, 0x2af96, 0x2af98, 0x2afa2, 0x2afa4, - 0x2afb6, 0x2afb8, 0x3ec7a, 0x3ec7c, 0x3f802, 0x3f840, - 0x3f882, 0x3f8c0, 0x3fe7a, 0x3fe80, 0x407f6, 0x407f8, - 0x40b82, 0x40b84, 0x40dda, 0x40dec, 0x42806, 0x42810, - 0x42816, 0x4281c, 0x42832, 0x42840, 0x428e2, 0x428ec, - 0x428fe, 0x42900, 0x42b96, 0x42b9c, 0x43492, 0x434a0, - 0x435a6, 0x435b8, 0x43aae, 0x43ab4, 0x43bf2, 0x43c00, - 0x43d1a, 0x43d44, 0x43e0a, 0x43e18, 0x44006, 0x44008, - 0x440e2, 0x4411c, 0x441c2, 0x441c4, 0x441ce, 0x441d4, - 0x441fe, 0x44208, 0x442ce, 0x442dc, 0x442e6, 0x442ec, - 0x4430a, 0x4430c, 0x44402, 0x4440c, 0x4449e, 0x444b0, - 0x444b6, 0x444d4, 0x445ce, 0x445d0, 0x44602, 0x44608, - 0x446da, 0x446fc, 0x44702, 0x44704, 0x44726, 0x44734, - 0x4473e, 0x44740, 0x448be, 0x448c8, 0x448d2, 0x448e0, - 0x448fa, 0x448fc, 0x44906, 0x44908, 0x44b7e, 0x44b80, - 0x44b8e, 0x44bac, 0x44c02, 0x44c08, 0x44cee, 0x44cf4, - 0x44cfa, 0x44cfc, 0x44d02, 0x44d04, 0x44d36, 0x44d38, - 0x44d5e, 0x44d60, 0x44d9a, 0x44db4, 0x44dc2, 0x44dd4, - 0x44ee2, 0x44ee4, 0x44eee, 0x44f04, 0x44f0a, 0x44f0c, - 0x44f16, 0x44f18, 0x44f1e, 0x44f28, 0x44f3a, 0x44f44, - 0x44f4a, 0x44f4c, 0x44f86, 0x44f8c, 0x450e2, 0x45100, - 0x4510a, 0x45114, 0x4511a, 0x4511c, 0x4517a, 0x4517c, - 0x452c2, 0x452c4, 0x452ce, 0x452e4, 0x452ea, 0x452ec, - 0x452f6, 0x452f8, 0x452fe, 0x45304, 0x4530a, 0x45310, - 0x456be, 0x456c0, 0x456ca, 0x456d8, 0x456f2, 0x456f8, - 0x456fe, 0x45704, 0x45772, 0x45778, 0x458ce, 0x458ec, - 0x458f6, 0x458f8, 0x458fe, 0x45904, 0x45aae, 0x45ab0, - 0x45ab6, 0x45ab8, 0x45ac2, 0x45ae0, 0x45c76, 0x45c78, - 0x45c7e, 0x45c80, 0x45c8a, 0x45c98, 0x45c9e, 0x45cb0, - 0x460be, 0x460e0, 0x460e6, 0x460ec, 0x464c2, 0x464c4, - 0x464ee, 0x464fc, 0x4650e, 0x46510, 0x46752, 0x46760, - 0x4676a, 0x46770, 0x46782, 0x46784, 0x46806, 0x4682c, - 0x468ce, 0x468e4, 0x468ee, 0x468fc, 0x4691e, 0x46920, - 0x46946, 0x4695c, 0x46966, 0x46970, 0x46a2a, 0x46a5c, - 0x46a62, 0x46a68, 0x470c2, 0x470dc, 0x470e2, 0x470f8, - 0x470fe, 0x47100, 0x4724a, 0x472a0, 0x472aa, 0x472c4, - 0x472ca, 0x472d0, 0x472d6, 0x472dc, 0x474c6, 0x474dc, - 0x474ea, 0x474ec, 0x474f2, 0x474f8, 0x474fe, 0x47518, - 0x4751e, 0x47520, 0x47642, 0x47648, 0x47656, 0x47658, - 0x4765e, 0x47660, 0x47bce, 0x47bd4, 0x47c02, 0x47c08, - 0x47cda, 0x47cec, 0x47d02, 0x47d0c, 0x47d6a, 0x47d6c, - 0x4d102, 0x4d104, 0x4d11e, 0x4d158, 0x5847a, 0x584a8, - 0x584b6, 0x584c0, 0x5abc2, 0x5abd4, 0x5acc2, 0x5acdc, - 0x5bd3e, 0x5bd40, 0x5be3e, 0x5be4c, 0x5bf92, 0x5bf94, - 0x5bfc2, 0x5bfc8, 0x6f276, 0x6f27c, 0x73c02, 0x73cb8, - 0x73cc2, 0x73d1c, 0x74596, 0x745a8, 0x745b6, 0x745cc, - 0x745ee, 0x7460c, 0x74616, 0x74630, 0x746aa, 0x746b8, - 0x7490a, 0x74914, 0x76802, 0x768dc, 0x768ee, 0x769b4, - 0x769d6, 0x769d8, 0x76a12, 0x76a14, 0x76a6e, 0x76a80, - 0x76a86, 0x76ac0, 0x78002, 0x7801c, 0x78022, 0x78064, - 0x7806e, 0x78088, 0x7808e, 0x78094, 0x7809a, 0x780ac, - 0x7823e, 0x78240, 0x784c2, 0x784dc, 0x78aba, 0x78abc, - 0x78bb2, 0x78bc0, 0x793b2, 0x793c0, 0x797ba, 0x797c0, - 0x7a342, 0x7a35c, 0x7a512, 0x7a52c, 0x7cfee, 0x7d000, - 0x380082, 0x380200, 0x380402, 0x3807c0, + 0x4001, 0x40ac, 0x40b6, 0x40c4, 0x40ca, 0x40e0, + 0x40ea, 0x40ec, 0x40f6, 0x40fd, 0x4100, 0x4141, + 0x4158, 0x4162, 0x4169, 0x417a, 0x4185, 0x4188, + 0x4195, 0x419c, 0x41b9, 0x41c6, 0x41d5, 0x420a, + 0x420c, 0x4216, 0x421c, 0x4236, 0x4239, 0x423c, + 0x4276, 0x4278, 0x4d76, 0x4d80, 0x5c4a, 0x5c58, + 0x5cca, 0x5cd4, 0x5d4a, 0x5d50, 0x5dca, 0x5dd0, + 0x5e01, 0x5ed2, 0x5ed8, 0x5ede, 0x5ef8, 0x5f1a, + 0x5f1c, 0x5f26, 0x5f48, 0x5f4e, 0x5f50, 0x5f76, + 0x5f78, 0x602e, 0x6038, 0x603e, 0x6040, 0x6216, + 0x621c, 0x62a6, 0x62a8, 0x6482, 0x648c, 0x649e, + 0x64a4, 0x64ca, 0x64cc, 0x64e6, 0x64f0, 0x685e, + 0x6864, 0x686e, 0x6870, 0x6881, 0x6954, 0x695a, + 0x695c, 0x6962, 0x697c, 0x698a, 0x698c, 0x6996, + 0x69b4, 0x69ce, 0x69f4, 0x69fe, 0x6a00, 0x6ac2, + 0x6b78, 0x6b82, 0x6bb0, 0x6c02, 0x6c10, 0x6c2d, + 0x6c34, 0x6c4d, 0x6cd2, 0x6cf8, 0x6d0a, 0x6d10, + 0x6d15, 0x6d34, 0x6dae, 0x6dd0, 0x6e02, 0x6e08, + 0x6e0d, 0x6e84, 0x6e8a, 0x6e98, 0x6ea2, 0x6eac, + 0x6eb2, 0x6eb9, 0x6ec0, 0x6eed, 0x6ef8, 0x6f9a, + 0x6f9c, 0x6fa2, 0x6fa8, 0x6fb6, 0x6fb8, 0x6fbe, + 0x6fd0, 0x70b2, 0x70d0, 0x70da, 0x70e0, 0x7342, + 0x734c, 0x7352, 0x7384, 0x738a, 0x73a4, 0x73b6, + 0x73b8, 0x73d2, 0x73d4, 0x73e2, 0x73e8, 0x7702, + 0x7800, 0x8036, 0x8038, 0x8342, 0x83c4, 0xb3be, + 0xb3c8, 0xb5fe, 0xb600, 0xb782, 0xb800, 0xc0aa, + 0xc0c0, 0xc266, 0xc26c, 0x299be, 0x299cc, 0x299d2, + 0x299f8, 0x29a7a, 0x29a80, 0x29bc2, 0x29bc8, 0x2a00a, + 0x2a00c, 0x2a01a, 0x2a01c, 0x2a02e, 0x2a030, 0x2a096, + 0x2a09c, 0x2a0b2, 0x2a0b4, 0x2a312, 0x2a318, 0x2a382, + 0x2a3c8, 0x2a3fe, 0x2a400, 0x2a49a, 0x2a4b8, 0x2a51e, + 0x2a548, 0x2a54e, 0x2a550, 0x2a602, 0x2a60c, 0x2a625, + 0x2a630, 0x2a63d, 0x2a6ce, 0x2a6d0, 0x2a6da, 0x2a6e8, + 0x2a6f2, 0x2a6f8, 0x2a781, 0x2a796, 0x2a798, 0x2a79d, + 0x2a7c0, 0x2a7e9, 0x2a7fc, 0x2a8a6, 0x2a8bc, 0x2a8c6, + 0x2a8cc, 0x2a8d6, 0x2a8dc, 0x2a90e, 0x2a910, 0x2a932, + 0x2a934, 0x2a981, 0x2a9c0, 0x2a9c5, 0x2a9d0, 0x2a9e9, + 0x2a9ec, 0x2a9f2, 0x2a9f4, 0x2a9f9, 0x2aa00, 0x2aac2, + 0x2aac4, 0x2aaca, 0x2aad4, 0x2aade, 0x2aae4, 0x2aafa, + 0x2ab00, 0x2ab06, 0x2ab08, 0x2ab81, 0x2abac, 0x2abb2, + 0x2abb8, 0x2af01, 0x2af6c, 0x2af96, 0x2af98, 0x2afa2, + 0x2afa4, 0x2afb6, 0x2afb8, 0x3ec7a, 0x3ec7c, 0x3f802, + 0x3f840, 0x3f882, 0x3f8c0, 0x3fe7a, 0x3fe80, 0x407f6, + 0x407f8, 0x40b82, 0x40b84, 0x40dda, 0x40dec, 0x42801, + 0x42806, 0x42810, 0x42816, 0x4281c, 0x42832, 0x42841, + 0x42850, 0x42855, 0x42860, 0x42865, 0x428d8, 0x428e2, + 0x428ec, 0x42b96, 0x42b9c, 0x43492, 0x434a0, 0x435a6, + 0x435b8, 0x43aae, 0x43ab4, 0x43bea, 0x43c00, 0x43d1a, + 0x43d44, 0x43e0a, 0x43e18, 0x44006, 0x44008, 0x440e2, + 0x4411c, 0x441c2, 0x441c4, 0x441ce, 0x441d4, 0x441fe, + 0x44208, 0x442ce, 0x442dc, 0x442e6, 0x442ec, 0x4430a, + 0x4430c, 0x44402, 0x4440d, 0x4449e, 0x444b0, 0x444b6, + 0x444cc, 0x444d2, 0x444d4, 0x44511, 0x44514, 0x4451d, + 0x44520, 0x445ce, 0x445d0, 0x44602, 0x44608, 0x446da, + 0x446fc, 0x44702, 0x44704, 0x44726, 0x44734, 0x4473e, + 0x44740, 0x448be, 0x448c8, 0x448d2, 0x448e0, 0x448fa, + 0x448fc, 0x44906, 0x44908, 0x44b7e, 0x44b80, 0x44b8e, + 0x44bac, 0x44c02, 0x44c08, 0x44cee, 0x44cf4, 0x44cfa, + 0x44cfc, 0x44d02, 0x44d04, 0x44d36, 0x44d38, 0x44d5e, + 0x44d60, 0x44d9a, 0x44db4, 0x44dc2, 0x44dd4, 0x44e01, + 0x44e28, 0x44e2d, 0x44e30, 0x44e39, 0x44e3c, 0x44e41, + 0x44ed8, 0x44ee2, 0x44ee4, 0x44eee, 0x44f04, 0x44f0a, + 0x44f0c, 0x44f16, 0x44f18, 0x44f1e, 0x44f28, 0x44f3a, + 0x44f40, 0x44f4a, 0x44f4c, 0x44f86, 0x44f8c, 0x450e2, + 0x45100, 0x4510a, 0x45114, 0x4511a, 0x4511c, 0x4517a, + 0x4517c, 0x452c2, 0x452c4, 0x452ce, 0x452e4, 0x452ea, + 0x452ec, 0x452f6, 0x452f8, 0x452fe, 0x45304, 0x4530a, + 0x45310, 0x456be, 0x456c0, 0x456ca, 0x456d8, 0x456f2, + 0x456f8, 0x456fe, 0x45704, 0x45772, 0x45778, 0x458ce, + 0x458ec, 0x458f6, 0x458f8, 0x458fe, 0x45904, 0x45aae, + 0x45ab0, 0x45ab6, 0x45ab8, 0x45ac2, 0x45ae0, 0x45c76, + 0x45c78, 0x45c7e, 0x45c80, 0x45c8a, 0x45c98, 0x45c9e, + 0x45cb0, 0x460be, 0x460e0, 0x460e6, 0x460ec, 0x46401, + 0x4641c, 0x46425, 0x46428, 0x46431, 0x46450, 0x46455, + 0x4645c, 0x46461, 0x464c2, 0x464c4, 0x464ee, 0x464f8, + 0x4650e, 0x46510, 0x46752, 0x46760, 0x4676a, 0x46770, + 0x46782, 0x46784, 0x46801, 0x46806, 0x4682d, 0x468ce, + 0x468e4, 0x468ee, 0x468fc, 0x46941, 0x46946, 0x4695c, + 0x46966, 0x46971, 0x46a10, 0x46a2a, 0x46a5c, 0x46a62, + 0x46a64, 0x46d82, 0x46d84, 0x46d8a, 0x46d94, 0x46d9a, + 0x46d9c, 0x470c2, 0x470dc, 0x470e2, 0x470f8, 0x470fe, + 0x47100, 0x4724a, 0x472a0, 0x472aa, 0x472c4, 0x472ca, + 0x472d0, 0x472d6, 0x472dc, 0x474c6, 0x474dc, 0x474ea, + 0x474ec, 0x474f2, 0x474f8, 0x474fe, 0x47518, 0x4751e, + 0x47520, 0x47642, 0x47648, 0x47656, 0x47658, 0x4765e, + 0x47660, 0x47bce, 0x47bd4, 0x47c02, 0x47c08, 0x47c11, + 0x47c44, 0x47c49, 0x47cd0, 0x47cda, 0x47cec, 0x47d02, + 0x47d08, 0x47d6a, 0x47d6c, 0x4d102, 0x4d104, 0x4d11e, + 0x4d158, 0x5847a, 0x584a8, 0x584b6, 0x584c0, 0x5abc2, + 0x5abd4, 0x5acc2, 0x5acdc, 0x5bd3e, 0x5bd40, 0x5be3e, + 0x5be4c, 0x5bf92, 0x5bf94, 0x5bfc2, 0x5bfc8, 0x6f276, + 0x6f27c, 0x73c02, 0x73cb8, 0x73cc2, 0x73d1c, 0x74596, + 0x745a8, 0x745b6, 0x745cc, 0x745ee, 0x7460c, 0x74616, + 0x74630, 0x746aa, 0x746b8, 0x7490a, 0x74914, 0x76802, + 0x768dc, 0x768ee, 0x769b4, 0x769d6, 0x769d8, 0x76a12, + 0x76a14, 0x76a6e, 0x76a80, 0x76a86, 0x76ac0, 0x78002, + 0x7801c, 0x78022, 0x78064, 0x7806e, 0x78088, 0x7808e, + 0x78094, 0x7809a, 0x780ac, 0x7823e, 0x78240, 0x784c2, + 0x784dc, 0x78aba, 0x78abc, 0x78bb2, 0x78bc0, 0x793b2, + 0x793c0, 0x797ba, 0x797c0, 0x79b8e, 0x79b90, 0x79b9a, + 0x79b9c, 0x79bba, 0x79bc0, 0x79bd6, 0x79bd8, 0x7a342, + 0x7a35c, 0x7a512, 0x7a52c, 0x7cfee, 0x7d000, 0x380082, + 0x380200, 0x380402, 0x3807c0, }; // Table generated by contrib/unicode/gen_libstdcxx_unicode_data.py, @@ -776,24 +795,43 @@ inline constexpr char32_t __xpicto_edges[] = { 0xa9, 0xaa, 0xae, 0xaf, 0x203c, 0x203d, 0x2049, 0x204a, 0x2122, 0x2123, 0x2139, 0x213a, 0x2194, 0x219a, 0x21a9, 0x21ab, - 0x231a, 0x231c, 0x2328, 0x2329, 0x2388, 0x2389, 0x23cf, 0x23d0, - 0x23e9, 0x23f4, 0x23f8, 0x23fb, 0x24c2, 0x24c3, 0x25aa, 0x25ac, - 0x25b6, 0x25b7, 0x25c0, 0x25c1, 0x25fb, 0x25ff, 0x2600, 0x2606, - 0x2607, 0x2613, 0x2614, 0x2686, 0x2690, 0x2706, 0x2708, 0x2713, - 0x2714, 0x2715, 0x2716, 0x2717, 0x271d, 0x271e, 0x2721, 0x2722, - 0x2728, 0x2729, 0x2733, 0x2735, 0x2744, 0x2745, 0x2747, 0x2748, - 0x274c, 0x274d, 0x274e, 0x274f, 0x2753, 0x2756, 0x2757, 0x2758, - 0x2763, 0x2768, 0x2795, 0x2798, 0x27a1, 0x27a2, 0x27b0, 0x27b1, - 0x27bf, 0x27c0, 0x2934, 0x2936, 0x2b05, 0x2b08, 0x2b1b, 0x2b1d, - 0x2b50, 0x2b51, 0x2b55, 0x2b56, 0x3030, 0x3031, 0x303d, 0x303e, - 0x3297, 0x3298, 0x3299, 0x329a, 0x1f000, 0x1f100, 0x1f10d, 0x1f110, - 0x1f12f, 0x1f130, 0x1f16c, 0x1f172, 0x1f17e, 0x1f180, 0x1f18e, 0x1f18f, - 0x1f191, 0x1f19b, 0x1f1ad, 0x1f1e6, 0x1f201, 0x1f210, 0x1f21a, 0x1f21b, - 0x1f22f, 0x1f230, 0x1f232, 0x1f23b, 0x1f23c, 0x1f240, 0x1f249, 0x1f3fb, - 0x1f400, 0x1f53e, 0x1f546, 0x1f650, 0x1f680, 0x1f700, 0x1f774, 0x1f780, - 0x1f7d5, 0x1f800, 0x1f80c, 0x1f810, 0x1f848, 0x1f850, 0x1f85a, 0x1f860, - 0x1f888, 0x1f890, 0x1f8ae, 0x1f900, 0x1f90c, 0x1f93b, 0x1f93c, 0x1f946, - 0x1f947, 0x1fb00, 0x1fc00, 0x1fffe, + 0x231a, 0x231c, 0x2328, 0x2329, 0x23cf, 0x23d0, 0x23e9, 0x23f4, + 0x23f8, 0x23fb, 0x24c2, 0x24c3, 0x25aa, 0x25ac, 0x25b6, 0x25b7, + 0x25c0, 0x25c1, 0x25fb, 0x25ff, 0x2600, 0x2605, 0x260e, 0x260f, + 0x2611, 0x2612, 0x2614, 0x2616, 0x2618, 0x2619, 0x261d, 0x261e, + 0x2620, 0x2621, 0x2622, 0x2624, 0x2626, 0x2627, 0x262a, 0x262b, + 0x262e, 0x2630, 0x2638, 0x263b, 0x2640, 0x2641, 0x2642, 0x2643, + 0x2648, 0x2654, 0x265f, 0x2661, 0x2663, 0x2664, 0x2665, 0x2667, + 0x2668, 0x2669, 0x267b, 0x267c, 0x267e, 0x2680, 0x2692, 0x2698, + 0x2699, 0x269a, 0x269b, 0x269d, 0x26a0, 0x26a2, 0x26a7, 0x26a8, + 0x26aa, 0x26ac, 0x26b0, 0x26b2, 0x26bd, 0x26bf, 0x26c4, 0x26c6, + 0x26c8, 0x26c9, 0x26ce, 0x26d0, 0x26d1, 0x26d2, 0x26d3, 0x26d5, + 0x26e9, 0x26eb, 0x26f0, 0x26f6, 0x26f7, 0x26fb, 0x26fd, 0x26fe, + 0x2702, 0x2703, 0x2705, 0x2706, 0x2708, 0x270e, 0x270f, 0x2710, + 0x2712, 0x2713, 0x2714, 0x2715, 0x2716, 0x2717, 0x271d, 0x271e, + 0x2721, 0x2722, 0x2728, 0x2729, 0x2733, 0x2735, 0x2744, 0x2745, + 0x2747, 0x2748, 0x274c, 0x274d, 0x274e, 0x274f, 0x2753, 0x2756, + 0x2757, 0x2758, 0x2763, 0x2765, 0x2795, 0x2798, 0x27a1, 0x27a2, + 0x27b0, 0x27b1, 0x27bf, 0x27c0, 0x2934, 0x2936, 0x2b05, 0x2b08, + 0x2b1b, 0x2b1d, 0x2b50, 0x2b51, 0x2b55, 0x2b56, 0x3030, 0x3031, + 0x303d, 0x303e, 0x3297, 0x3298, 0x3299, 0x329a, 0x1f004, 0x1f005, + 0x1f02c, 0x1f030, 0x1f094, 0x1f0a0, 0x1f0af, 0x1f0b1, 0x1f0c0, 0x1f0c1, + 0x1f0cf, 0x1f0d1, 0x1f0f6, 0x1f100, 0x1f170, 0x1f172, 0x1f17e, 0x1f180, + 0x1f18e, 0x1f18f, 0x1f191, 0x1f19b, 0x1f1ae, 0x1f1e6, 0x1f201, 0x1f210, + 0x1f21a, 0x1f21b, 0x1f22f, 0x1f230, 0x1f232, 0x1f23b, 0x1f23c, 0x1f240, + 0x1f249, 0x1f260, 0x1f266, 0x1f322, 0x1f324, 0x1f394, 0x1f396, 0x1f398, + 0x1f399, 0x1f39c, 0x1f39e, 0x1f3f1, 0x1f3f3, 0x1f3f6, 0x1f3f7, 0x1f3fb, + 0x1f400, 0x1f4fe, 0x1f4ff, 0x1f53e, 0x1f549, 0x1f54f, 0x1f550, 0x1f568, + 0x1f56f, 0x1f571, 0x1f573, 0x1f57b, 0x1f587, 0x1f588, 0x1f58a, 0x1f58e, + 0x1f590, 0x1f591, 0x1f595, 0x1f597, 0x1f5a4, 0x1f5a6, 0x1f5a8, 0x1f5a9, + 0x1f5b1, 0x1f5b3, 0x1f5bc, 0x1f5bd, 0x1f5c2, 0x1f5c5, 0x1f5d1, 0x1f5d4, + 0x1f5dc, 0x1f5df, 0x1f5e1, 0x1f5e2, 0x1f5e3, 0x1f5e4, 0x1f5e8, 0x1f5e9, + 0x1f5ef, 0x1f5f0, 0x1f5f3, 0x1f5f4, 0x1f5fa, 0x1f650, 0x1f680, 0x1f6c6, + 0x1f6cb, 0x1f6d3, 0x1f6d5, 0x1f6e6, 0x1f6e9, 0x1f6ea, 0x1f6eb, 0x1f6f1, + 0x1f6f3, 0x1f700, 0x1f7da, 0x1f800, 0x1f80c, 0x1f810, 0x1f848, 0x1f850, + 0x1f85a, 0x1f860, 0x1f888, 0x1f890, 0x1f8ae, 0x1f8b0, 0x1f8bc, 0x1f8c0, + 0x1f8c2, 0x1f8d0, 0x1f8d9, 0x1f900, 0x1f90c, 0x1f93b, 0x1f93c, 0x1f946, + 0x1f947, 0x1fa00, 0x1fa58, 0x1fa60, 0x1fa6e, 0x1fb00, 0x1fc00, 0x1fffe, }; #undef _GLIBCXX_GET_UNICODE_DATA diff --git a/libstdc++-v3/include/bits/unique_ptr.h b/libstdc++-v3/include/bits/unique_ptr.h index d76ad63ba7bf..978deb3101f5 100644 --- a/libstdc++-v3/include/bits/unique_ptr.h +++ b/libstdc++-v3/include/bits/unique_ptr.h @@ -1,4 +1,3 @@ - // unique_ptr implementation -*- C++ -*- // Copyright (C) 2008-2025 Free Software Foundation, Inc. diff --git a/libstdc++-v3/include/bits/version.def b/libstdc++-v3/include/bits/version.def index 65b9a278776a..7c91a18c6861 100644 --- a/libstdc++-v3/include/bits/version.def +++ b/libstdc++-v3/include/bits/version.def @@ -471,6 +471,10 @@ ftms = { ftms = { name = not_fn; + values = { + v = 202306; + cxxmin = 26; + }; values = { v = 201603; cxxmin = 17; @@ -802,6 +806,10 @@ ftms = { ftms = { name = bind_front; + values = { + v = 202306; + cxxmin = 26; + }; values = { v = 201907; cxxmin = 20; @@ -810,6 +818,10 @@ ftms = { ftms = { name = bind_back; + values = { + v = 202306; + cxxmin = 26; + }; values = { v = 202202; cxxmin = 23; @@ -1050,6 +1062,25 @@ ftms = { cxxmin = 26; extra_cond = "__glibcxx_assume_aligned " "&& __glibcxx_is_sufficiently_aligned"; + }; +}; + +// Purely internal macro padded layouts. +ftms = { + name = padded_layouts; + no_stdname = true; // internal + values = { + v = 1; + cxxmin = 26; + }; +}; + +ftms = { + name = submdspan; + no_stdname = true; // TODO: change once complete + values = { + v = 1; + cxxmin = 26; }; }; @@ -1860,6 +1891,14 @@ ftms = { }; }; +ftms = { + name = start_lifetime_as; + values = { + v = 202207; + cxxmin = 23; + }; +}; + ftms = { name = string_contains; values = { @@ -2117,6 +2156,15 @@ ftms = { }; }; +ftms = { + name = philox_engine; + values = { + v = 202406; + cxxmin = 26; + extra_cond = "__SIZEOF_INT128__"; + }; +}; + // Standard test specifications. stds[97] = ">= 199711L"; stds[03] = ">= 199711L"; diff --git a/libstdc++-v3/include/bits/version.h b/libstdc++-v3/include/bits/version.h index b05249857d27..7ba78774041a 100644 --- a/libstdc++-v3/include/bits/version.h +++ b/libstdc++-v3/include/bits/version.h @@ -57,7 +57,7 @@ # define __cpp_lib_incomplete_container_elements 201505L # endif # endif -#endif /* !defined(__cpp_lib_incomplete_container_elements) && defined(__glibcxx_want_incomplete_container_elements) */ +#endif /* !defined(__cpp_lib_incomplete_container_elements) */ #undef __glibcxx_want_incomplete_container_elements #if !defined(__cpp_lib_uncaught_exceptions) @@ -67,7 +67,7 @@ # define __cpp_lib_uncaught_exceptions 201411L # endif # endif -#endif /* !defined(__cpp_lib_uncaught_exceptions) && defined(__glibcxx_want_uncaught_exceptions) */ +#endif /* !defined(__cpp_lib_uncaught_exceptions) */ #undef __glibcxx_want_uncaught_exceptions #if !defined(__cpp_lib_allocator_traits_is_always_equal) @@ -77,7 +77,7 @@ # define __cpp_lib_allocator_traits_is_always_equal 201411L # endif # endif -#endif /* !defined(__cpp_lib_allocator_traits_is_always_equal) && defined(__glibcxx_want_allocator_traits_is_always_equal) */ +#endif /* !defined(__cpp_lib_allocator_traits_is_always_equal) */ #undef __glibcxx_want_allocator_traits_is_always_equal #if !defined(__cpp_lib_is_null_pointer) @@ -87,7 +87,7 @@ # define __cpp_lib_is_null_pointer 201309L # endif # endif -#endif /* !defined(__cpp_lib_is_null_pointer) && defined(__glibcxx_want_is_null_pointer) */ +#endif /* !defined(__cpp_lib_is_null_pointer) */ #undef __glibcxx_want_is_null_pointer #if !defined(__cpp_lib_result_of_sfinae) @@ -97,7 +97,7 @@ # define __cpp_lib_result_of_sfinae 201210L # endif # endif -#endif /* !defined(__cpp_lib_result_of_sfinae) && defined(__glibcxx_want_result_of_sfinae) */ +#endif /* !defined(__cpp_lib_result_of_sfinae) */ #undef __glibcxx_want_result_of_sfinae #if !defined(__cpp_lib_shared_ptr_arrays) @@ -112,7 +112,7 @@ # define __cpp_lib_shared_ptr_arrays 201611L # endif # endif -#endif /* !defined(__cpp_lib_shared_ptr_arrays) && defined(__glibcxx_want_shared_ptr_arrays) */ +#endif /* !defined(__cpp_lib_shared_ptr_arrays) */ #undef __glibcxx_want_shared_ptr_arrays #if !defined(__cpp_lib_is_swappable) @@ -122,7 +122,7 @@ # define __cpp_lib_is_swappable 201603L # endif # endif -#endif /* !defined(__cpp_lib_is_swappable) && defined(__glibcxx_want_is_swappable) */ +#endif /* !defined(__cpp_lib_is_swappable) */ #undef __glibcxx_want_is_swappable #if !defined(__cpp_lib_void_t) @@ -132,7 +132,7 @@ # define __cpp_lib_void_t 201411L # endif # endif -#endif /* !defined(__cpp_lib_void_t) && defined(__glibcxx_want_void_t) */ +#endif /* !defined(__cpp_lib_void_t) */ #undef __glibcxx_want_void_t #if !defined(__cpp_lib_enable_shared_from_this) @@ -142,7 +142,7 @@ # define __cpp_lib_enable_shared_from_this 201603L # endif # endif -#endif /* !defined(__cpp_lib_enable_shared_from_this) && defined(__glibcxx_want_enable_shared_from_this) */ +#endif /* !defined(__cpp_lib_enable_shared_from_this) */ #undef __glibcxx_want_enable_shared_from_this #if !defined(__cpp_lib_math_spec_funcs) @@ -152,7 +152,7 @@ # define __STDCPP_MATH_SPEC_FUNCS__ 201003L # endif # endif -#endif /* !defined(__cpp_lib_math_spec_funcs) && defined(__glibcxx_want_math_spec_funcs) */ +#endif /* !defined(__cpp_lib_math_spec_funcs) */ #undef __glibcxx_want_math_spec_funcs #if !defined(__cpp_lib_coroutine) @@ -162,7 +162,7 @@ # define __cpp_lib_coroutine 201902L # endif # endif -#endif /* !defined(__cpp_lib_coroutine) && defined(__glibcxx_want_coroutine) */ +#endif /* !defined(__cpp_lib_coroutine) */ #undef __glibcxx_want_coroutine #if !defined(__cpp_lib_exchange_function) @@ -172,7 +172,7 @@ # define __cpp_lib_exchange_function 201304L # endif # endif -#endif /* !defined(__cpp_lib_exchange_function) && defined(__glibcxx_want_exchange_function) */ +#endif /* !defined(__cpp_lib_exchange_function) */ #undef __glibcxx_want_exchange_function #if !defined(__cpp_lib_integer_sequence) @@ -182,7 +182,7 @@ # define __cpp_lib_integer_sequence 201304L # endif # endif -#endif /* !defined(__cpp_lib_integer_sequence) && defined(__glibcxx_want_integer_sequence) */ +#endif /* !defined(__cpp_lib_integer_sequence) */ #undef __glibcxx_want_integer_sequence #if !defined(__cpp_lib_integral_constant_callable) @@ -192,7 +192,7 @@ # define __cpp_lib_integral_constant_callable 201304L # endif # endif -#endif /* !defined(__cpp_lib_integral_constant_callable) && defined(__glibcxx_want_integral_constant_callable) */ +#endif /* !defined(__cpp_lib_integral_constant_callable) */ #undef __glibcxx_want_integral_constant_callable #if !defined(__cpp_lib_is_final) @@ -202,7 +202,7 @@ # define __cpp_lib_is_final 201402L # endif # endif -#endif /* !defined(__cpp_lib_is_final) && defined(__glibcxx_want_is_final) */ +#endif /* !defined(__cpp_lib_is_final) */ #undef __glibcxx_want_is_final #if !defined(__cpp_lib_make_reverse_iterator) @@ -212,7 +212,7 @@ # define __cpp_lib_make_reverse_iterator 201402L # endif # endif -#endif /* !defined(__cpp_lib_make_reverse_iterator) && defined(__glibcxx_want_make_reverse_iterator) */ +#endif /* !defined(__cpp_lib_make_reverse_iterator) */ #undef __glibcxx_want_make_reverse_iterator #if !defined(__cpp_lib_null_iterators) @@ -222,7 +222,7 @@ # define __cpp_lib_null_iterators 201304L # endif # endif -#endif /* !defined(__cpp_lib_null_iterators) && defined(__glibcxx_want_null_iterators) */ +#endif /* !defined(__cpp_lib_null_iterators) */ #undef __glibcxx_want_null_iterators #if !defined(__cpp_lib_transformation_trait_aliases) @@ -232,7 +232,7 @@ # define __cpp_lib_transformation_trait_aliases 201304L # endif # endif -#endif /* !defined(__cpp_lib_transformation_trait_aliases) && defined(__glibcxx_want_transformation_trait_aliases) */ +#endif /* !defined(__cpp_lib_transformation_trait_aliases) */ #undef __glibcxx_want_transformation_trait_aliases #if !defined(__cpp_lib_transparent_operators) @@ -242,7 +242,7 @@ # define __cpp_lib_transparent_operators 201510L # endif # endif -#endif /* !defined(__cpp_lib_transparent_operators) && defined(__glibcxx_want_transparent_operators) */ +#endif /* !defined(__cpp_lib_transparent_operators) */ #undef __glibcxx_want_transparent_operators #if !defined(__cpp_lib_tuple_element_t) @@ -252,7 +252,7 @@ # define __cpp_lib_tuple_element_t 201402L # endif # endif -#endif /* !defined(__cpp_lib_tuple_element_t) && defined(__glibcxx_want_tuple_element_t) */ +#endif /* !defined(__cpp_lib_tuple_element_t) */ #undef __glibcxx_want_tuple_element_t #if !defined(__cpp_lib_tuples_by_type) @@ -262,7 +262,7 @@ # define __cpp_lib_tuples_by_type 201304L # endif # endif -#endif /* !defined(__cpp_lib_tuples_by_type) && defined(__glibcxx_want_tuples_by_type) */ +#endif /* !defined(__cpp_lib_tuples_by_type) */ #undef __glibcxx_want_tuples_by_type #if !defined(__cpp_lib_robust_nonmodifying_seq_ops) @@ -272,7 +272,7 @@ # define __cpp_lib_robust_nonmodifying_seq_ops 201304L # endif # endif -#endif /* !defined(__cpp_lib_robust_nonmodifying_seq_ops) && defined(__glibcxx_want_robust_nonmodifying_seq_ops) */ +#endif /* !defined(__cpp_lib_robust_nonmodifying_seq_ops) */ #undef __glibcxx_want_robust_nonmodifying_seq_ops #if !defined(__cpp_lib_to_chars) @@ -287,7 +287,7 @@ # define __cpp_lib_to_chars 201611L # endif # endif -#endif /* !defined(__cpp_lib_to_chars) && defined(__glibcxx_want_to_chars) */ +#endif /* !defined(__cpp_lib_to_chars) */ #undef __glibcxx_want_to_chars #if !defined(__cpp_lib_chrono_udls) @@ -297,7 +297,7 @@ # define __cpp_lib_chrono_udls 201304L # endif # endif -#endif /* !defined(__cpp_lib_chrono_udls) && defined(__glibcxx_want_chrono_udls) */ +#endif /* !defined(__cpp_lib_chrono_udls) */ #undef __glibcxx_want_chrono_udls #if !defined(__cpp_lib_complex_udls) @@ -307,7 +307,7 @@ # define __cpp_lib_complex_udls 201309L # endif # endif -#endif /* !defined(__cpp_lib_complex_udls) && defined(__glibcxx_want_complex_udls) */ +#endif /* !defined(__cpp_lib_complex_udls) */ #undef __glibcxx_want_complex_udls #if !defined(__cpp_lib_generic_associative_lookup) @@ -317,7 +317,7 @@ # define __cpp_lib_generic_associative_lookup 201304L # endif # endif -#endif /* !defined(__cpp_lib_generic_associative_lookup) && defined(__glibcxx_want_generic_associative_lookup) */ +#endif /* !defined(__cpp_lib_generic_associative_lookup) */ #undef __glibcxx_want_generic_associative_lookup #if !defined(__cpp_lib_make_unique) @@ -327,7 +327,7 @@ # define __cpp_lib_make_unique 201304L # endif # endif -#endif /* !defined(__cpp_lib_make_unique) && defined(__glibcxx_want_make_unique) */ +#endif /* !defined(__cpp_lib_make_unique) */ #undef __glibcxx_want_make_unique #if !defined(__cpp_lib_quoted_string_io) @@ -337,7 +337,7 @@ # define __cpp_lib_quoted_string_io 201304L # endif # endif -#endif /* !defined(__cpp_lib_quoted_string_io) && defined(__glibcxx_want_quoted_string_io) */ +#endif /* !defined(__cpp_lib_quoted_string_io) */ #undef __glibcxx_want_quoted_string_io #if !defined(__cpp_lib_shared_timed_mutex) @@ -347,7 +347,7 @@ # define __cpp_lib_shared_timed_mutex 201402L # endif # endif -#endif /* !defined(__cpp_lib_shared_timed_mutex) && defined(__glibcxx_want_shared_timed_mutex) */ +#endif /* !defined(__cpp_lib_shared_timed_mutex) */ #undef __glibcxx_want_shared_timed_mutex #if !defined(__cpp_lib_string_udls) @@ -357,7 +357,7 @@ # define __cpp_lib_string_udls 201304L # endif # endif -#endif /* !defined(__cpp_lib_string_udls) && defined(__glibcxx_want_string_udls) */ +#endif /* !defined(__cpp_lib_string_udls) */ #undef __glibcxx_want_string_udls #if !defined(__cpp_lib_addressof_constexpr) @@ -367,7 +367,7 @@ # define __cpp_lib_addressof_constexpr 201603L # endif # endif -#endif /* !defined(__cpp_lib_addressof_constexpr) && defined(__glibcxx_want_addressof_constexpr) */ +#endif /* !defined(__cpp_lib_addressof_constexpr) */ #undef __glibcxx_want_addressof_constexpr #if !defined(__cpp_lib_any) @@ -377,7 +377,7 @@ # define __cpp_lib_any 201606L # endif # endif -#endif /* !defined(__cpp_lib_any) && defined(__glibcxx_want_any) */ +#endif /* !defined(__cpp_lib_any) */ #undef __glibcxx_want_any #if !defined(__cpp_lib_apply) @@ -387,7 +387,7 @@ # define __cpp_lib_apply 201603L # endif # endif -#endif /* !defined(__cpp_lib_apply) && defined(__glibcxx_want_apply) */ +#endif /* !defined(__cpp_lib_apply) */ #undef __glibcxx_want_apply #if !defined(__cpp_lib_as_const) @@ -397,7 +397,7 @@ # define __cpp_lib_as_const 201510L # endif # endif -#endif /* !defined(__cpp_lib_as_const) && defined(__glibcxx_want_as_const) */ +#endif /* !defined(__cpp_lib_as_const) */ #undef __glibcxx_want_as_const #if !defined(__cpp_lib_atomic_is_always_lock_free) @@ -407,7 +407,7 @@ # define __cpp_lib_atomic_is_always_lock_free 201603L # endif # endif -#endif /* !defined(__cpp_lib_atomic_is_always_lock_free) && defined(__glibcxx_want_atomic_is_always_lock_free) */ +#endif /* !defined(__cpp_lib_atomic_is_always_lock_free) */ #undef __glibcxx_want_atomic_is_always_lock_free #if !defined(__cpp_lib_bool_constant) @@ -417,7 +417,7 @@ # define __cpp_lib_bool_constant 201505L # endif # endif -#endif /* !defined(__cpp_lib_bool_constant) && defined(__glibcxx_want_bool_constant) */ +#endif /* !defined(__cpp_lib_bool_constant) */ #undef __glibcxx_want_bool_constant #if !defined(__cpp_lib_byte) @@ -427,7 +427,7 @@ # define __cpp_lib_byte 201603L # endif # endif -#endif /* !defined(__cpp_lib_byte) && defined(__glibcxx_want_byte) */ +#endif /* !defined(__cpp_lib_byte) */ #undef __glibcxx_want_byte #if !defined(__cpp_lib_constant_wrapper) @@ -437,7 +437,7 @@ # define __cpp_lib_constant_wrapper 202506L # endif # endif -#endif /* !defined(__cpp_lib_constant_wrapper) && defined(__glibcxx_want_constant_wrapper) */ +#endif /* !defined(__cpp_lib_constant_wrapper) */ #undef __glibcxx_want_constant_wrapper #if !defined(__cpp_lib_has_unique_object_representations) @@ -447,7 +447,7 @@ # define __cpp_lib_has_unique_object_representations 201606L # endif # endif -#endif /* !defined(__cpp_lib_has_unique_object_representations) && defined(__glibcxx_want_has_unique_object_representations) */ +#endif /* !defined(__cpp_lib_has_unique_object_representations) */ #undef __glibcxx_want_has_unique_object_representations #if !defined(__cpp_lib_hardware_interference_size) @@ -457,7 +457,7 @@ # define __cpp_lib_hardware_interference_size 201703L # endif # endif -#endif /* !defined(__cpp_lib_hardware_interference_size) && defined(__glibcxx_want_hardware_interference_size) */ +#endif /* !defined(__cpp_lib_hardware_interference_size) */ #undef __glibcxx_want_hardware_interference_size #if !defined(__cpp_lib_invoke) @@ -467,7 +467,7 @@ # define __cpp_lib_invoke 201411L # endif # endif -#endif /* !defined(__cpp_lib_invoke) && defined(__glibcxx_want_invoke) */ +#endif /* !defined(__cpp_lib_invoke) */ #undef __glibcxx_want_invoke #if !defined(__cpp_lib_is_aggregate) @@ -477,7 +477,7 @@ # define __cpp_lib_is_aggregate 201703L # endif # endif -#endif /* !defined(__cpp_lib_is_aggregate) && defined(__glibcxx_want_is_aggregate) */ +#endif /* !defined(__cpp_lib_is_aggregate) */ #undef __glibcxx_want_is_aggregate #if !defined(__cpp_lib_is_invocable) @@ -487,7 +487,7 @@ # define __cpp_lib_is_invocable 201703L # endif # endif -#endif /* !defined(__cpp_lib_is_invocable) && defined(__glibcxx_want_is_invocable) */ +#endif /* !defined(__cpp_lib_is_invocable) */ #undef __glibcxx_want_is_invocable #if !defined(__cpp_lib_launder) @@ -497,7 +497,7 @@ # define __cpp_lib_launder 201606L # endif # endif -#endif /* !defined(__cpp_lib_launder) && defined(__glibcxx_want_launder) */ +#endif /* !defined(__cpp_lib_launder) */ #undef __glibcxx_want_launder #if !defined(__cpp_lib_logical_traits) @@ -507,7 +507,7 @@ # define __cpp_lib_logical_traits 201510L # endif # endif -#endif /* !defined(__cpp_lib_logical_traits) && defined(__glibcxx_want_logical_traits) */ +#endif /* !defined(__cpp_lib_logical_traits) */ #undef __glibcxx_want_logical_traits #if !defined(__cpp_lib_make_from_tuple) @@ -517,17 +517,22 @@ # define __cpp_lib_make_from_tuple 201606L # endif # endif -#endif /* !defined(__cpp_lib_make_from_tuple) && defined(__glibcxx_want_make_from_tuple) */ +#endif /* !defined(__cpp_lib_make_from_tuple) */ #undef __glibcxx_want_make_from_tuple #if !defined(__cpp_lib_not_fn) -# if (__cplusplus >= 201703L) +# if (__cplusplus > 202302L) +# define __glibcxx_not_fn 202306L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_not_fn) +# define __cpp_lib_not_fn 202306L +# endif +# elif (__cplusplus >= 201703L) # define __glibcxx_not_fn 201603L # if defined(__glibcxx_want_all) || defined(__glibcxx_want_not_fn) # define __cpp_lib_not_fn 201603L # endif # endif -#endif /* !defined(__cpp_lib_not_fn) && defined(__glibcxx_want_not_fn) */ +#endif /* !defined(__cpp_lib_not_fn) */ #undef __glibcxx_want_not_fn #if !defined(__cpp_lib_type_trait_variable_templates) @@ -537,7 +542,7 @@ # define __cpp_lib_type_trait_variable_templates 201510L # endif # endif -#endif /* !defined(__cpp_lib_type_trait_variable_templates) && defined(__glibcxx_want_type_trait_variable_templates) */ +#endif /* !defined(__cpp_lib_type_trait_variable_templates) */ #undef __glibcxx_want_type_trait_variable_templates #if !defined(__cpp_lib_variant) @@ -557,7 +562,7 @@ # define __cpp_lib_variant 202102L # endif # endif -#endif /* !defined(__cpp_lib_variant) && defined(__glibcxx_want_variant) */ +#endif /* !defined(__cpp_lib_variant) */ #undef __glibcxx_want_variant #if !defined(__cpp_lib_lcm) @@ -567,7 +572,7 @@ # define __cpp_lib_lcm 201606L # endif # endif -#endif /* !defined(__cpp_lib_lcm) && defined(__glibcxx_want_lcm) */ +#endif /* !defined(__cpp_lib_lcm) */ #undef __glibcxx_want_lcm #if !defined(__cpp_lib_gcd) @@ -577,7 +582,7 @@ # define __cpp_lib_gcd 201606L # endif # endif -#endif /* !defined(__cpp_lib_gcd) && defined(__glibcxx_want_gcd) */ +#endif /* !defined(__cpp_lib_gcd) */ #undef __glibcxx_want_gcd #if !defined(__cpp_lib_gcd_lcm) @@ -587,7 +592,7 @@ # define __cpp_lib_gcd_lcm 201606L # endif # endif -#endif /* !defined(__cpp_lib_gcd_lcm) && defined(__glibcxx_want_gcd_lcm) */ +#endif /* !defined(__cpp_lib_gcd_lcm) */ #undef __glibcxx_want_gcd_lcm #if !defined(__cpp_lib_raw_memory_algorithms) @@ -602,7 +607,7 @@ # define __cpp_lib_raw_memory_algorithms 201606L # endif # endif -#endif /* !defined(__cpp_lib_raw_memory_algorithms) && defined(__glibcxx_want_raw_memory_algorithms) */ +#endif /* !defined(__cpp_lib_raw_memory_algorithms) */ #undef __glibcxx_want_raw_memory_algorithms #if !defined(__cpp_lib_array_constexpr) @@ -617,7 +622,7 @@ # define __cpp_lib_array_constexpr 201803L # endif # endif -#endif /* !defined(__cpp_lib_array_constexpr) && defined(__glibcxx_want_array_constexpr) */ +#endif /* !defined(__cpp_lib_array_constexpr) */ #undef __glibcxx_want_array_constexpr #if !defined(__cpp_lib_nonmember_container_access) @@ -627,7 +632,7 @@ # define __cpp_lib_nonmember_container_access 201411L # endif # endif -#endif /* !defined(__cpp_lib_nonmember_container_access) && defined(__glibcxx_want_nonmember_container_access) */ +#endif /* !defined(__cpp_lib_nonmember_container_access) */ #undef __glibcxx_want_nonmember_container_access #if !defined(__cpp_lib_clamp) @@ -637,7 +642,7 @@ # define __cpp_lib_clamp 201603L # endif # endif -#endif /* !defined(__cpp_lib_clamp) && defined(__glibcxx_want_clamp) */ +#endif /* !defined(__cpp_lib_clamp) */ #undef __glibcxx_want_clamp #if !defined(__cpp_lib_sample) @@ -647,7 +652,7 @@ # define __cpp_lib_sample 201603L # endif # endif -#endif /* !defined(__cpp_lib_sample) && defined(__glibcxx_want_sample) */ +#endif /* !defined(__cpp_lib_sample) */ #undef __glibcxx_want_sample #if !defined(__cpp_lib_boyer_moore_searcher) @@ -657,7 +662,7 @@ # define __cpp_lib_boyer_moore_searcher 201603L # endif # endif -#endif /* !defined(__cpp_lib_boyer_moore_searcher) && defined(__glibcxx_want_boyer_moore_searcher) */ +#endif /* !defined(__cpp_lib_boyer_moore_searcher) */ #undef __glibcxx_want_boyer_moore_searcher #if !defined(__cpp_lib_chrono) @@ -672,7 +677,7 @@ # define __cpp_lib_chrono 201611L # endif # endif -#endif /* !defined(__cpp_lib_chrono) && defined(__glibcxx_want_chrono) */ +#endif /* !defined(__cpp_lib_chrono) */ #undef __glibcxx_want_chrono #if !defined(__cpp_lib_chrono_cxx20) @@ -681,7 +686,7 @@ # if defined(__glibcxx_want_all) || defined(__glibcxx_want_chrono_cxx20) # endif # endif -#endif /* !defined(__cpp_lib_chrono_cxx20) && defined(__glibcxx_want_chrono_cxx20) */ +#endif /* !defined(__cpp_lib_chrono_cxx20) */ #undef __glibcxx_want_chrono_cxx20 #if !defined(__cpp_lib_execution) @@ -691,7 +696,7 @@ # define __cpp_lib_execution 201902L # endif # endif -#endif /* !defined(__cpp_lib_execution) && defined(__glibcxx_want_execution) */ +#endif /* !defined(__cpp_lib_execution) */ #undef __glibcxx_want_execution #if !defined(__cpp_lib_filesystem) @@ -701,7 +706,7 @@ # define __cpp_lib_filesystem 201703L # endif # endif -#endif /* !defined(__cpp_lib_filesystem) && defined(__glibcxx_want_filesystem) */ +#endif /* !defined(__cpp_lib_filesystem) */ #undef __glibcxx_want_filesystem #if !defined(__cpp_lib_hypot) @@ -711,7 +716,7 @@ # define __cpp_lib_hypot 201603L # endif # endif -#endif /* !defined(__cpp_lib_hypot) && defined(__glibcxx_want_hypot) */ +#endif /* !defined(__cpp_lib_hypot) */ #undef __glibcxx_want_hypot #if !defined(__cpp_lib_map_try_emplace) @@ -721,7 +726,7 @@ # define __cpp_lib_map_try_emplace 201411L # endif # endif -#endif /* !defined(__cpp_lib_map_try_emplace) && defined(__glibcxx_want_map_try_emplace) */ +#endif /* !defined(__cpp_lib_map_try_emplace) */ #undef __glibcxx_want_map_try_emplace #if !defined(__cpp_lib_math_special_functions) @@ -731,7 +736,7 @@ # define __cpp_lib_math_special_functions 201603L # endif # endif -#endif /* !defined(__cpp_lib_math_special_functions) && defined(__glibcxx_want_math_special_functions) */ +#endif /* !defined(__cpp_lib_math_special_functions) */ #undef __glibcxx_want_math_special_functions #if !defined(__cpp_lib_memory_resource) @@ -746,7 +751,7 @@ # define __cpp_lib_memory_resource 1L # endif # endif -#endif /* !defined(__cpp_lib_memory_resource) && defined(__glibcxx_want_memory_resource) */ +#endif /* !defined(__cpp_lib_memory_resource) */ #undef __glibcxx_want_memory_resource #if !defined(__cpp_lib_node_extract) @@ -756,7 +761,7 @@ # define __cpp_lib_node_extract 201606L # endif # endif -#endif /* !defined(__cpp_lib_node_extract) && defined(__glibcxx_want_node_extract) */ +#endif /* !defined(__cpp_lib_node_extract) */ #undef __glibcxx_want_node_extract #if !defined(__cpp_lib_parallel_algorithm) @@ -766,7 +771,7 @@ # define __cpp_lib_parallel_algorithm 201603L # endif # endif -#endif /* !defined(__cpp_lib_parallel_algorithm) && defined(__glibcxx_want_parallel_algorithm) */ +#endif /* !defined(__cpp_lib_parallel_algorithm) */ #undef __glibcxx_want_parallel_algorithm #if !defined(__cpp_lib_scoped_lock) @@ -776,7 +781,7 @@ # define __cpp_lib_scoped_lock 201703L # endif # endif -#endif /* !defined(__cpp_lib_scoped_lock) && defined(__glibcxx_want_scoped_lock) */ +#endif /* !defined(__cpp_lib_scoped_lock) */ #undef __glibcxx_want_scoped_lock #if !defined(__cpp_lib_shared_mutex) @@ -786,7 +791,7 @@ # define __cpp_lib_shared_mutex 201505L # endif # endif -#endif /* !defined(__cpp_lib_shared_mutex) && defined(__glibcxx_want_shared_mutex) */ +#endif /* !defined(__cpp_lib_shared_mutex) */ #undef __glibcxx_want_shared_mutex #if !defined(__cpp_lib_shared_ptr_weak_type) @@ -796,7 +801,7 @@ # define __cpp_lib_shared_ptr_weak_type 201606L # endif # endif -#endif /* !defined(__cpp_lib_shared_ptr_weak_type) && defined(__glibcxx_want_shared_ptr_weak_type) */ +#endif /* !defined(__cpp_lib_shared_ptr_weak_type) */ #undef __glibcxx_want_shared_ptr_weak_type #if !defined(__cpp_lib_string_view) @@ -811,7 +816,7 @@ # define __cpp_lib_string_view 201803L # endif # endif -#endif /* !defined(__cpp_lib_string_view) && defined(__glibcxx_want_string_view) */ +#endif /* !defined(__cpp_lib_string_view) */ #undef __glibcxx_want_string_view #if !defined(__cpp_lib_unordered_map_try_emplace) @@ -821,7 +826,7 @@ # define __cpp_lib_unordered_map_try_emplace 201411L # endif # endif -#endif /* !defined(__cpp_lib_unordered_map_try_emplace) && defined(__glibcxx_want_unordered_map_try_emplace) */ +#endif /* !defined(__cpp_lib_unordered_map_try_emplace) */ #undef __glibcxx_want_unordered_map_try_emplace #if !defined(__cpp_lib_assume_aligned) @@ -831,7 +836,7 @@ # define __cpp_lib_assume_aligned 201811L # endif # endif -#endif /* !defined(__cpp_lib_assume_aligned) && defined(__glibcxx_want_assume_aligned) */ +#endif /* !defined(__cpp_lib_assume_aligned) */ #undef __glibcxx_want_assume_aligned #if !defined(__cpp_lib_is_sufficiently_aligned) @@ -841,7 +846,7 @@ # define __cpp_lib_is_sufficiently_aligned 202411L # endif # endif -#endif /* !defined(__cpp_lib_is_sufficiently_aligned) && defined(__glibcxx_want_is_sufficiently_aligned) */ +#endif /* !defined(__cpp_lib_is_sufficiently_aligned) */ #undef __glibcxx_want_is_sufficiently_aligned #if !defined(__cpp_lib_atomic_flag_test) @@ -851,7 +856,7 @@ # define __cpp_lib_atomic_flag_test 201907L # endif # endif -#endif /* !defined(__cpp_lib_atomic_flag_test) && defined(__glibcxx_want_atomic_flag_test) */ +#endif /* !defined(__cpp_lib_atomic_flag_test) */ #undef __glibcxx_want_atomic_flag_test #if !defined(__cpp_lib_atomic_float) @@ -861,7 +866,7 @@ # define __cpp_lib_atomic_float 201711L # endif # endif -#endif /* !defined(__cpp_lib_atomic_float) && defined(__glibcxx_want_atomic_float) */ +#endif /* !defined(__cpp_lib_atomic_float) */ #undef __glibcxx_want_atomic_float #if !defined(__cpp_lib_atomic_lock_free_type_aliases) @@ -871,7 +876,7 @@ # define __cpp_lib_atomic_lock_free_type_aliases 201907L # endif # endif -#endif /* !defined(__cpp_lib_atomic_lock_free_type_aliases) && defined(__glibcxx_want_atomic_lock_free_type_aliases) */ +#endif /* !defined(__cpp_lib_atomic_lock_free_type_aliases) */ #undef __glibcxx_want_atomic_lock_free_type_aliases #if !defined(__cpp_lib_atomic_ref) @@ -881,7 +886,7 @@ # define __cpp_lib_atomic_ref 201806L # endif # endif -#endif /* !defined(__cpp_lib_atomic_ref) && defined(__glibcxx_want_atomic_ref) */ +#endif /* !defined(__cpp_lib_atomic_ref) */ #undef __glibcxx_want_atomic_ref #if !defined(__cpp_lib_atomic_value_initialization) @@ -891,27 +896,37 @@ # define __cpp_lib_atomic_value_initialization 201911L # endif # endif -#endif /* !defined(__cpp_lib_atomic_value_initialization) && defined(__glibcxx_want_atomic_value_initialization) */ +#endif /* !defined(__cpp_lib_atomic_value_initialization) */ #undef __glibcxx_want_atomic_value_initialization #if !defined(__cpp_lib_bind_front) -# if (__cplusplus >= 202002L) +# if (__cplusplus > 202302L) +# define __glibcxx_bind_front 202306L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_bind_front) +# define __cpp_lib_bind_front 202306L +# endif +# elif (__cplusplus >= 202002L) # define __glibcxx_bind_front 201907L # if defined(__glibcxx_want_all) || defined(__glibcxx_want_bind_front) # define __cpp_lib_bind_front 201907L # endif # endif -#endif /* !defined(__cpp_lib_bind_front) && defined(__glibcxx_want_bind_front) */ +#endif /* !defined(__cpp_lib_bind_front) */ #undef __glibcxx_want_bind_front #if !defined(__cpp_lib_bind_back) -# if (__cplusplus >= 202100L) && (__cpp_explicit_this_parameter) +# if (__cplusplus > 202302L) +# define __glibcxx_bind_back 202306L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_bind_back) +# define __cpp_lib_bind_back 202306L +# endif +# elif (__cplusplus >= 202100L) && (__cpp_explicit_this_parameter) # define __glibcxx_bind_back 202202L # if defined(__glibcxx_want_all) || defined(__glibcxx_want_bind_back) # define __cpp_lib_bind_back 202202L # endif # endif -#endif /* !defined(__cpp_lib_bind_back) && defined(__glibcxx_want_bind_back) */ +#endif /* !defined(__cpp_lib_bind_back) */ #undef __glibcxx_want_bind_back #if !defined(__cpp_lib_starts_ends_with) @@ -921,7 +936,7 @@ # define __cpp_lib_starts_ends_with 201711L # endif # endif -#endif /* !defined(__cpp_lib_starts_ends_with) && defined(__glibcxx_want_starts_ends_with) */ +#endif /* !defined(__cpp_lib_starts_ends_with) */ #undef __glibcxx_want_starts_ends_with #if !defined(__cpp_lib_bit_cast) @@ -931,7 +946,7 @@ # define __cpp_lib_bit_cast 201806L # endif # endif -#endif /* !defined(__cpp_lib_bit_cast) && defined(__glibcxx_want_bit_cast) */ +#endif /* !defined(__cpp_lib_bit_cast) */ #undef __glibcxx_want_bit_cast #if !defined(__cpp_lib_bitops) @@ -941,7 +956,7 @@ # define __cpp_lib_bitops 201907L # endif # endif -#endif /* !defined(__cpp_lib_bitops) && defined(__glibcxx_want_bitops) */ +#endif /* !defined(__cpp_lib_bitops) */ #undef __glibcxx_want_bitops #if !defined(__cpp_lib_bounded_array_traits) @@ -951,7 +966,7 @@ # define __cpp_lib_bounded_array_traits 201902L # endif # endif -#endif /* !defined(__cpp_lib_bounded_array_traits) && defined(__glibcxx_want_bounded_array_traits) */ +#endif /* !defined(__cpp_lib_bounded_array_traits) */ #undef __glibcxx_want_bounded_array_traits #if !defined(__cpp_lib_concepts) @@ -961,7 +976,7 @@ # define __cpp_lib_concepts 202002L # endif # endif -#endif /* !defined(__cpp_lib_concepts) && defined(__glibcxx_want_concepts) */ +#endif /* !defined(__cpp_lib_concepts) */ #undef __glibcxx_want_concepts #if !defined(__cpp_lib_optional) @@ -981,7 +996,7 @@ # define __cpp_lib_optional 201606L # endif # endif -#endif /* !defined(__cpp_lib_optional) && defined(__glibcxx_want_optional) */ +#endif /* !defined(__cpp_lib_optional) */ #undef __glibcxx_want_optional #if !defined(__cpp_lib_optional_range_support) @@ -991,7 +1006,7 @@ # define __cpp_lib_optional_range_support 202406L # endif # endif -#endif /* !defined(__cpp_lib_optional_range_support) && defined(__glibcxx_want_optional_range_support) */ +#endif /* !defined(__cpp_lib_optional_range_support) */ #undef __glibcxx_want_optional_range_support #if !defined(__cpp_lib_destroying_delete) @@ -1001,7 +1016,7 @@ # define __cpp_lib_destroying_delete 201806L # endif # endif -#endif /* !defined(__cpp_lib_destroying_delete) && defined(__glibcxx_want_destroying_delete) */ +#endif /* !defined(__cpp_lib_destroying_delete) */ #undef __glibcxx_want_destroying_delete #if !defined(__cpp_lib_constexpr_string_view) @@ -1011,7 +1026,7 @@ # define __cpp_lib_constexpr_string_view 201811L # endif # endif -#endif /* !defined(__cpp_lib_constexpr_string_view) && defined(__glibcxx_want_constexpr_string_view) */ +#endif /* !defined(__cpp_lib_constexpr_string_view) */ #undef __glibcxx_want_constexpr_string_view #if !defined(__cpp_lib_endian) @@ -1021,7 +1036,7 @@ # define __cpp_lib_endian 201907L # endif # endif -#endif /* !defined(__cpp_lib_endian) && defined(__glibcxx_want_endian) */ +#endif /* !defined(__cpp_lib_endian) */ #undef __glibcxx_want_endian #if !defined(__cpp_lib_int_pow2) @@ -1031,7 +1046,7 @@ # define __cpp_lib_int_pow2 202002L # endif # endif -#endif /* !defined(__cpp_lib_int_pow2) && defined(__glibcxx_want_int_pow2) */ +#endif /* !defined(__cpp_lib_int_pow2) */ #undef __glibcxx_want_int_pow2 #if !defined(__cpp_lib_integer_comparison_functions) @@ -1041,7 +1056,7 @@ # define __cpp_lib_integer_comparison_functions 202002L # endif # endif -#endif /* !defined(__cpp_lib_integer_comparison_functions) && defined(__glibcxx_want_integer_comparison_functions) */ +#endif /* !defined(__cpp_lib_integer_comparison_functions) */ #undef __glibcxx_want_integer_comparison_functions #if !defined(__cpp_lib_is_constant_evaluated) @@ -1051,7 +1066,7 @@ # define __cpp_lib_is_constant_evaluated 201811L # endif # endif -#endif /* !defined(__cpp_lib_is_constant_evaluated) && defined(__glibcxx_want_is_constant_evaluated) */ +#endif /* !defined(__cpp_lib_is_constant_evaluated) */ #undef __glibcxx_want_is_constant_evaluated #if !defined(__cpp_lib_constexpr_char_traits) @@ -1066,7 +1081,7 @@ # define __cpp_lib_constexpr_char_traits 201611L # endif # endif -#endif /* !defined(__cpp_lib_constexpr_char_traits) && defined(__glibcxx_want_constexpr_char_traits) */ +#endif /* !defined(__cpp_lib_constexpr_char_traits) */ #undef __glibcxx_want_constexpr_char_traits #if !defined(__cpp_lib_is_layout_compatible) @@ -1076,7 +1091,7 @@ # define __cpp_lib_is_layout_compatible 201907L # endif # endif -#endif /* !defined(__cpp_lib_is_layout_compatible) && defined(__glibcxx_want_is_layout_compatible) */ +#endif /* !defined(__cpp_lib_is_layout_compatible) */ #undef __glibcxx_want_is_layout_compatible #if !defined(__cpp_lib_is_nothrow_convertible) @@ -1086,7 +1101,7 @@ # define __cpp_lib_is_nothrow_convertible 201806L # endif # endif -#endif /* !defined(__cpp_lib_is_nothrow_convertible) && defined(__glibcxx_want_is_nothrow_convertible) */ +#endif /* !defined(__cpp_lib_is_nothrow_convertible) */ #undef __glibcxx_want_is_nothrow_convertible #if !defined(__cpp_lib_is_pointer_interconvertible) @@ -1096,7 +1111,7 @@ # define __cpp_lib_is_pointer_interconvertible 201907L # endif # endif -#endif /* !defined(__cpp_lib_is_pointer_interconvertible) && defined(__glibcxx_want_is_pointer_interconvertible) */ +#endif /* !defined(__cpp_lib_is_pointer_interconvertible) */ #undef __glibcxx_want_is_pointer_interconvertible #if !defined(__cpp_lib_math_constants) @@ -1106,7 +1121,7 @@ # define __cpp_lib_math_constants 201907L # endif # endif -#endif /* !defined(__cpp_lib_math_constants) && defined(__glibcxx_want_math_constants) */ +#endif /* !defined(__cpp_lib_math_constants) */ #undef __glibcxx_want_math_constants #if !defined(__cpp_lib_make_obj_using_allocator) @@ -1115,7 +1130,7 @@ # if defined(__glibcxx_want_all) || defined(__glibcxx_want_make_obj_using_allocator) # endif # endif -#endif /* !defined(__cpp_lib_make_obj_using_allocator) && defined(__glibcxx_want_make_obj_using_allocator) */ +#endif /* !defined(__cpp_lib_make_obj_using_allocator) */ #undef __glibcxx_want_make_obj_using_allocator #if !defined(__cpp_lib_remove_cvref) @@ -1125,7 +1140,7 @@ # define __cpp_lib_remove_cvref 201711L # endif # endif -#endif /* !defined(__cpp_lib_remove_cvref) && defined(__glibcxx_want_remove_cvref) */ +#endif /* !defined(__cpp_lib_remove_cvref) */ #undef __glibcxx_want_remove_cvref #if !defined(__cpp_lib_source_location) @@ -1135,7 +1150,7 @@ # define __cpp_lib_source_location 201907L # endif # endif -#endif /* !defined(__cpp_lib_source_location) && defined(__glibcxx_want_source_location) */ +#endif /* !defined(__cpp_lib_source_location) */ #undef __glibcxx_want_source_location #if !defined(__cpp_lib_span) @@ -1150,7 +1165,7 @@ # define __cpp_lib_span 202002L # endif # endif -#endif /* !defined(__cpp_lib_span) && defined(__glibcxx_want_span) */ +#endif /* !defined(__cpp_lib_span) */ #undef __glibcxx_want_span #if !defined(__cpp_lib_mdspan) @@ -1165,7 +1180,7 @@ # define __cpp_lib_mdspan 202207L # endif # endif -#endif /* !defined(__cpp_lib_mdspan) && defined(__glibcxx_want_mdspan) */ +#endif /* !defined(__cpp_lib_mdspan) */ #undef __glibcxx_want_mdspan #if !defined(__cpp_lib_aligned_accessor) @@ -1175,9 +1190,27 @@ # define __cpp_lib_aligned_accessor 202411L # endif # endif -#endif /* !defined(__cpp_lib_aligned_accessor) && defined(__glibcxx_want_aligned_accessor) */ +#endif /* !defined(__cpp_lib_aligned_accessor) */ #undef __glibcxx_want_aligned_accessor +#if !defined(__cpp_lib_padded_layouts) +# if (__cplusplus > 202302L) +# define __glibcxx_padded_layouts 1L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_padded_layouts) +# endif +# endif +#endif /* !defined(__cpp_lib_padded_layouts) */ +#undef __glibcxx_want_padded_layouts + +#if !defined(__cpp_lib_submdspan) +# if (__cplusplus > 202302L) +# define __glibcxx_submdspan 1L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_submdspan) +# endif +# endif +#endif /* !defined(__cpp_lib_submdspan) */ +#undef __glibcxx_want_submdspan + #if !defined(__cpp_lib_ssize) # if (__cplusplus >= 202002L) # define __glibcxx_ssize 201902L @@ -1185,7 +1218,7 @@ # define __cpp_lib_ssize 201902L # endif # endif -#endif /* !defined(__cpp_lib_ssize) && defined(__glibcxx_want_ssize) */ +#endif /* !defined(__cpp_lib_ssize) */ #undef __glibcxx_want_ssize #if !defined(__cpp_lib_three_way_comparison) @@ -1195,7 +1228,7 @@ # define __cpp_lib_three_way_comparison 201907L # endif # endif -#endif /* !defined(__cpp_lib_three_way_comparison) && defined(__glibcxx_want_three_way_comparison) */ +#endif /* !defined(__cpp_lib_three_way_comparison) */ #undef __glibcxx_want_three_way_comparison #if !defined(__cpp_lib_to_address) @@ -1205,7 +1238,7 @@ # define __cpp_lib_to_address 201711L # endif # endif -#endif /* !defined(__cpp_lib_to_address) && defined(__glibcxx_want_to_address) */ +#endif /* !defined(__cpp_lib_to_address) */ #undef __glibcxx_want_to_address #if !defined(__cpp_lib_to_array) @@ -1215,7 +1248,7 @@ # define __cpp_lib_to_array 201907L # endif # endif -#endif /* !defined(__cpp_lib_to_array) && defined(__glibcxx_want_to_array) */ +#endif /* !defined(__cpp_lib_to_array) */ #undef __glibcxx_want_to_array #if !defined(__cpp_lib_type_identity) @@ -1225,7 +1258,7 @@ # define __cpp_lib_type_identity 201806L # endif # endif -#endif /* !defined(__cpp_lib_type_identity) && defined(__glibcxx_want_type_identity) */ +#endif /* !defined(__cpp_lib_type_identity) */ #undef __glibcxx_want_type_identity #if !defined(__cpp_lib_unwrap_ref) @@ -1235,7 +1268,7 @@ # define __cpp_lib_unwrap_ref 201811L # endif # endif -#endif /* !defined(__cpp_lib_unwrap_ref) && defined(__glibcxx_want_unwrap_ref) */ +#endif /* !defined(__cpp_lib_unwrap_ref) */ #undef __glibcxx_want_unwrap_ref #if !defined(__cpp_lib_constexpr_iterator) @@ -1245,7 +1278,7 @@ # define __cpp_lib_constexpr_iterator 201811L # endif # endif -#endif /* !defined(__cpp_lib_constexpr_iterator) && defined(__glibcxx_want_constexpr_iterator) */ +#endif /* !defined(__cpp_lib_constexpr_iterator) */ #undef __glibcxx_want_constexpr_iterator #if !defined(__cpp_lib_interpolate) @@ -1255,7 +1288,7 @@ # define __cpp_lib_interpolate 201902L # endif # endif -#endif /* !defined(__cpp_lib_interpolate) && defined(__glibcxx_want_interpolate) */ +#endif /* !defined(__cpp_lib_interpolate) */ #undef __glibcxx_want_interpolate #if !defined(__cpp_lib_constexpr_utility) @@ -1265,7 +1298,7 @@ # define __cpp_lib_constexpr_utility 201811L # endif # endif -#endif /* !defined(__cpp_lib_constexpr_utility) && defined(__glibcxx_want_constexpr_utility) */ +#endif /* !defined(__cpp_lib_constexpr_utility) */ #undef __glibcxx_want_constexpr_utility #if !defined(__cpp_lib_shift) @@ -1280,7 +1313,7 @@ # define __cpp_lib_shift 201806L # endif # endif -#endif /* !defined(__cpp_lib_shift) && defined(__glibcxx_want_shift) */ +#endif /* !defined(__cpp_lib_shift) */ #undef __glibcxx_want_shift #if !defined(__cpp_lib_ranges) @@ -1300,7 +1333,7 @@ # define __cpp_lib_ranges 202110L # endif # endif -#endif /* !defined(__cpp_lib_ranges) && defined(__glibcxx_want_ranges) */ +#endif /* !defined(__cpp_lib_ranges) */ #undef __glibcxx_want_ranges #if !defined(__cpp_lib_constexpr_numeric) @@ -1310,7 +1343,7 @@ # define __cpp_lib_constexpr_numeric 201911L # endif # endif -#endif /* !defined(__cpp_lib_constexpr_numeric) && defined(__glibcxx_want_constexpr_numeric) */ +#endif /* !defined(__cpp_lib_constexpr_numeric) */ #undef __glibcxx_want_constexpr_numeric #if !defined(__cpp_lib_constexpr_functional) @@ -1320,7 +1353,7 @@ # define __cpp_lib_constexpr_functional 201907L # endif # endif -#endif /* !defined(__cpp_lib_constexpr_functional) && defined(__glibcxx_want_constexpr_functional) */ +#endif /* !defined(__cpp_lib_constexpr_functional) */ #undef __glibcxx_want_constexpr_functional #if !defined(__cpp_lib_constexpr_algorithms) @@ -1335,7 +1368,7 @@ # define __cpp_lib_constexpr_algorithms 201806L # endif # endif -#endif /* !defined(__cpp_lib_constexpr_algorithms) && defined(__glibcxx_want_constexpr_algorithms) */ +#endif /* !defined(__cpp_lib_constexpr_algorithms) */ #undef __glibcxx_want_constexpr_algorithms #if !defined(__cpp_lib_constexpr_tuple) @@ -1345,7 +1378,7 @@ # define __cpp_lib_constexpr_tuple 201811L # endif # endif -#endif /* !defined(__cpp_lib_constexpr_tuple) && defined(__glibcxx_want_constexpr_tuple) */ +#endif /* !defined(__cpp_lib_constexpr_tuple) */ #undef __glibcxx_want_constexpr_tuple #if !defined(__cpp_lib_constexpr_memory) @@ -1360,7 +1393,7 @@ # define __cpp_lib_constexpr_memory 201811L # endif # endif -#endif /* !defined(__cpp_lib_constexpr_memory) && defined(__glibcxx_want_constexpr_memory) */ +#endif /* !defined(__cpp_lib_constexpr_memory) */ #undef __glibcxx_want_constexpr_memory #if !defined(__cpp_lib_atomic_shared_ptr) @@ -1370,7 +1403,7 @@ # define __cpp_lib_atomic_shared_ptr 201711L # endif # endif -#endif /* !defined(__cpp_lib_atomic_shared_ptr) && defined(__glibcxx_want_atomic_shared_ptr) */ +#endif /* !defined(__cpp_lib_atomic_shared_ptr) */ #undef __glibcxx_want_atomic_shared_ptr #if !defined(__cpp_lib_atomic_wait) @@ -1385,7 +1418,7 @@ # define __cpp_lib_atomic_wait 201907L # endif # endif -#endif /* !defined(__cpp_lib_atomic_wait) && defined(__glibcxx_want_atomic_wait) */ +#endif /* !defined(__cpp_lib_atomic_wait) */ #undef __glibcxx_want_atomic_wait #if !defined(__cpp_lib_barrier) @@ -1395,7 +1428,7 @@ # define __cpp_lib_barrier 201907L # endif # endif -#endif /* !defined(__cpp_lib_barrier) && defined(__glibcxx_want_barrier) */ +#endif /* !defined(__cpp_lib_barrier) */ #undef __glibcxx_want_barrier #if !defined(__cpp_lib_format) @@ -1410,7 +1443,7 @@ # define __cpp_lib_format 202304L # endif # endif -#endif /* !defined(__cpp_lib_format) && defined(__glibcxx_want_format) */ +#endif /* !defined(__cpp_lib_format) */ #undef __glibcxx_want_format #if !defined(__cpp_lib_format_uchar) @@ -1420,7 +1453,7 @@ # define __cpp_lib_format_uchar 202311L # endif # endif -#endif /* !defined(__cpp_lib_format_uchar) && defined(__glibcxx_want_format_uchar) */ +#endif /* !defined(__cpp_lib_format_uchar) */ #undef __glibcxx_want_format_uchar #if !defined(__cpp_lib_constexpr_complex) @@ -1430,7 +1463,7 @@ # define __cpp_lib_constexpr_complex 201711L # endif # endif -#endif /* !defined(__cpp_lib_constexpr_complex) && defined(__glibcxx_want_constexpr_complex) */ +#endif /* !defined(__cpp_lib_constexpr_complex) */ #undef __glibcxx_want_constexpr_complex #if !defined(__cpp_lib_constexpr_dynamic_alloc) @@ -1440,7 +1473,7 @@ # define __cpp_lib_constexpr_dynamic_alloc 201907L # endif # endif -#endif /* !defined(__cpp_lib_constexpr_dynamic_alloc) && defined(__glibcxx_want_constexpr_dynamic_alloc) */ +#endif /* !defined(__cpp_lib_constexpr_dynamic_alloc) */ #undef __glibcxx_want_constexpr_dynamic_alloc #if !defined(__cpp_lib_constexpr_string) @@ -1460,7 +1493,7 @@ # define __cpp_lib_constexpr_string 201611L # endif # endif -#endif /* !defined(__cpp_lib_constexpr_string) && defined(__glibcxx_want_constexpr_string) */ +#endif /* !defined(__cpp_lib_constexpr_string) */ #undef __glibcxx_want_constexpr_string #if !defined(__cpp_lib_constexpr_vector) @@ -1470,7 +1503,7 @@ # define __cpp_lib_constexpr_vector 201907L # endif # endif -#endif /* !defined(__cpp_lib_constexpr_vector) && defined(__glibcxx_want_constexpr_vector) */ +#endif /* !defined(__cpp_lib_constexpr_vector) */ #undef __glibcxx_want_constexpr_vector #if !defined(__cpp_lib_constrained_equality) @@ -1485,7 +1518,7 @@ # define __cpp_lib_constrained_equality 202403L # endif # endif -#endif /* !defined(__cpp_lib_constrained_equality) && defined(__glibcxx_want_constrained_equality) */ +#endif /* !defined(__cpp_lib_constrained_equality) */ #undef __glibcxx_want_constrained_equality #if !defined(__cpp_lib_erase_if) @@ -1495,7 +1528,7 @@ # define __cpp_lib_erase_if 202002L # endif # endif -#endif /* !defined(__cpp_lib_erase_if) && defined(__glibcxx_want_erase_if) */ +#endif /* !defined(__cpp_lib_erase_if) */ #undef __glibcxx_want_erase_if #if !defined(__cpp_lib_generic_unordered_lookup) @@ -1505,7 +1538,7 @@ # define __cpp_lib_generic_unordered_lookup 201811L # endif # endif -#endif /* !defined(__cpp_lib_generic_unordered_lookup) && defined(__glibcxx_want_generic_unordered_lookup) */ +#endif /* !defined(__cpp_lib_generic_unordered_lookup) */ #undef __glibcxx_want_generic_unordered_lookup #if !defined(__cpp_lib_jthread) @@ -1515,7 +1548,7 @@ # define __cpp_lib_jthread 201911L # endif # endif -#endif /* !defined(__cpp_lib_jthread) && defined(__glibcxx_want_jthread) */ +#endif /* !defined(__cpp_lib_jthread) */ #undef __glibcxx_want_jthread #if !defined(__cpp_lib_latch) @@ -1525,7 +1558,7 @@ # define __cpp_lib_latch 201907L # endif # endif -#endif /* !defined(__cpp_lib_latch) && defined(__glibcxx_want_latch) */ +#endif /* !defined(__cpp_lib_latch) */ #undef __glibcxx_want_latch #if !defined(__cpp_lib_list_remove_return_type) @@ -1535,7 +1568,7 @@ # define __cpp_lib_list_remove_return_type 201806L # endif # endif -#endif /* !defined(__cpp_lib_list_remove_return_type) && defined(__glibcxx_want_list_remove_return_type) */ +#endif /* !defined(__cpp_lib_list_remove_return_type) */ #undef __glibcxx_want_list_remove_return_type #if !defined(__cpp_lib_polymorphic_allocator) @@ -1545,7 +1578,7 @@ # define __cpp_lib_polymorphic_allocator 201902L # endif # endif -#endif /* !defined(__cpp_lib_polymorphic_allocator) && defined(__glibcxx_want_polymorphic_allocator) */ +#endif /* !defined(__cpp_lib_polymorphic_allocator) */ #undef __glibcxx_want_polymorphic_allocator #if !defined(__cpp_lib_move_iterator_concept) @@ -1555,7 +1588,7 @@ # define __cpp_lib_move_iterator_concept 202207L # endif # endif -#endif /* !defined(__cpp_lib_move_iterator_concept) && defined(__glibcxx_want_move_iterator_concept) */ +#endif /* !defined(__cpp_lib_move_iterator_concept) */ #undef __glibcxx_want_move_iterator_concept #if !defined(__cpp_lib_semaphore) @@ -1565,7 +1598,7 @@ # define __cpp_lib_semaphore 201907L # endif # endif -#endif /* !defined(__cpp_lib_semaphore) && defined(__glibcxx_want_semaphore) */ +#endif /* !defined(__cpp_lib_semaphore) */ #undef __glibcxx_want_semaphore #if !defined(__cpp_lib_smart_ptr_for_overwrite) @@ -1575,7 +1608,7 @@ # define __cpp_lib_smart_ptr_for_overwrite 202002L # endif # endif -#endif /* !defined(__cpp_lib_smart_ptr_for_overwrite) && defined(__glibcxx_want_smart_ptr_for_overwrite) */ +#endif /* !defined(__cpp_lib_smart_ptr_for_overwrite) */ #undef __glibcxx_want_smart_ptr_for_overwrite #if !defined(__cpp_lib_syncbuf) @@ -1585,7 +1618,7 @@ # define __cpp_lib_syncbuf 201803L # endif # endif -#endif /* !defined(__cpp_lib_syncbuf) && defined(__glibcxx_want_syncbuf) */ +#endif /* !defined(__cpp_lib_syncbuf) */ #undef __glibcxx_want_syncbuf #if !defined(__cpp_lib_byteswap) @@ -1595,7 +1628,7 @@ # define __cpp_lib_byteswap 202110L # endif # endif -#endif /* !defined(__cpp_lib_byteswap) && defined(__glibcxx_want_byteswap) */ +#endif /* !defined(__cpp_lib_byteswap) */ #undef __glibcxx_want_byteswap #if !defined(__cpp_lib_constexpr_charconv) @@ -1605,7 +1638,7 @@ # define __cpp_lib_constexpr_charconv 202207L # endif # endif -#endif /* !defined(__cpp_lib_constexpr_charconv) && defined(__glibcxx_want_constexpr_charconv) */ +#endif /* !defined(__cpp_lib_constexpr_charconv) */ #undef __glibcxx_want_constexpr_charconv #if !defined(__cpp_lib_constexpr_typeinfo) @@ -1615,7 +1648,7 @@ # define __cpp_lib_constexpr_typeinfo 202106L # endif # endif -#endif /* !defined(__cpp_lib_constexpr_typeinfo) && defined(__glibcxx_want_constexpr_typeinfo) */ +#endif /* !defined(__cpp_lib_constexpr_typeinfo) */ #undef __glibcxx_want_constexpr_typeinfo #if !defined(__cpp_lib_expected) @@ -1625,7 +1658,7 @@ # define __cpp_lib_expected 202211L # endif # endif -#endif /* !defined(__cpp_lib_expected) && defined(__glibcxx_want_expected) */ +#endif /* !defined(__cpp_lib_expected) */ #undef __glibcxx_want_expected #if !defined(__cpp_lib_format_ranges) @@ -1635,7 +1668,7 @@ # define __cpp_lib_format_ranges 202207L # endif # endif -#endif /* !defined(__cpp_lib_format_ranges) && defined(__glibcxx_want_format_ranges) */ +#endif /* !defined(__cpp_lib_format_ranges) */ #undef __glibcxx_want_format_ranges #if !defined(__cpp_lib_freestanding_algorithm) @@ -1645,7 +1678,7 @@ # define __cpp_lib_freestanding_algorithm 202311L # endif # endif -#endif /* !defined(__cpp_lib_freestanding_algorithm) && defined(__glibcxx_want_freestanding_algorithm) */ +#endif /* !defined(__cpp_lib_freestanding_algorithm) */ #undef __glibcxx_want_freestanding_algorithm #if !defined(__cpp_lib_freestanding_array) @@ -1655,7 +1688,7 @@ # define __cpp_lib_freestanding_array 202311L # endif # endif -#endif /* !defined(__cpp_lib_freestanding_array) && defined(__glibcxx_want_freestanding_array) */ +#endif /* !defined(__cpp_lib_freestanding_array) */ #undef __glibcxx_want_freestanding_array #if !defined(__cpp_lib_freestanding_cstring) @@ -1665,7 +1698,7 @@ # define __cpp_lib_freestanding_cstring 202311L # endif # endif -#endif /* !defined(__cpp_lib_freestanding_cstring) && defined(__glibcxx_want_freestanding_cstring) */ +#endif /* !defined(__cpp_lib_freestanding_cstring) */ #undef __glibcxx_want_freestanding_cstring #if !defined(__cpp_lib_freestanding_expected) @@ -1675,7 +1708,7 @@ # define __cpp_lib_freestanding_expected 202311L # endif # endif -#endif /* !defined(__cpp_lib_freestanding_expected) && defined(__glibcxx_want_freestanding_expected) */ +#endif /* !defined(__cpp_lib_freestanding_expected) */ #undef __glibcxx_want_freestanding_expected #if !defined(__cpp_lib_freestanding_optional) @@ -1685,7 +1718,7 @@ # define __cpp_lib_freestanding_optional 202311L # endif # endif -#endif /* !defined(__cpp_lib_freestanding_optional) && defined(__glibcxx_want_freestanding_optional) */ +#endif /* !defined(__cpp_lib_freestanding_optional) */ #undef __glibcxx_want_freestanding_optional #if !defined(__cpp_lib_freestanding_string_view) @@ -1695,7 +1728,7 @@ # define __cpp_lib_freestanding_string_view 202311L # endif # endif -#endif /* !defined(__cpp_lib_freestanding_string_view) && defined(__glibcxx_want_freestanding_string_view) */ +#endif /* !defined(__cpp_lib_freestanding_string_view) */ #undef __glibcxx_want_freestanding_string_view #if !defined(__cpp_lib_freestanding_variant) @@ -1705,7 +1738,7 @@ # define __cpp_lib_freestanding_variant 202311L # endif # endif -#endif /* !defined(__cpp_lib_freestanding_variant) && defined(__glibcxx_want_freestanding_variant) */ +#endif /* !defined(__cpp_lib_freestanding_variant) */ #undef __glibcxx_want_freestanding_variant #if !defined(__cpp_lib_invoke_r) @@ -1715,7 +1748,7 @@ # define __cpp_lib_invoke_r 202106L # endif # endif -#endif /* !defined(__cpp_lib_invoke_r) && defined(__glibcxx_want_invoke_r) */ +#endif /* !defined(__cpp_lib_invoke_r) */ #undef __glibcxx_want_invoke_r #if !defined(__cpp_lib_is_scoped_enum) @@ -1725,7 +1758,7 @@ # define __cpp_lib_is_scoped_enum 202011L # endif # endif -#endif /* !defined(__cpp_lib_is_scoped_enum) && defined(__glibcxx_want_is_scoped_enum) */ +#endif /* !defined(__cpp_lib_is_scoped_enum) */ #undef __glibcxx_want_is_scoped_enum #if !defined(__cpp_lib_reference_from_temporary) @@ -1735,7 +1768,7 @@ # define __cpp_lib_reference_from_temporary 202202L # endif # endif -#endif /* !defined(__cpp_lib_reference_from_temporary) && defined(__glibcxx_want_reference_from_temporary) */ +#endif /* !defined(__cpp_lib_reference_from_temporary) */ #undef __glibcxx_want_reference_from_temporary #if !defined(__cpp_lib_containers_ranges) @@ -1745,7 +1778,7 @@ # define __cpp_lib_containers_ranges 202202L # endif # endif -#endif /* !defined(__cpp_lib_containers_ranges) && defined(__glibcxx_want_containers_ranges) */ +#endif /* !defined(__cpp_lib_containers_ranges) */ #undef __glibcxx_want_containers_ranges #if !defined(__cpp_lib_ranges_to_container) @@ -1755,7 +1788,7 @@ # define __cpp_lib_ranges_to_container 202202L # endif # endif -#endif /* !defined(__cpp_lib_ranges_to_container) && defined(__glibcxx_want_ranges_to_container) */ +#endif /* !defined(__cpp_lib_ranges_to_container) */ #undef __glibcxx_want_ranges_to_container #if !defined(__cpp_lib_ranges_zip) @@ -1765,7 +1798,7 @@ # define __cpp_lib_ranges_zip 202110L # endif # endif -#endif /* !defined(__cpp_lib_ranges_zip) && defined(__glibcxx_want_ranges_zip) */ +#endif /* !defined(__cpp_lib_ranges_zip) */ #undef __glibcxx_want_ranges_zip #if !defined(__cpp_lib_ranges_chunk) @@ -1775,7 +1808,7 @@ # define __cpp_lib_ranges_chunk 202202L # endif # endif -#endif /* !defined(__cpp_lib_ranges_chunk) && defined(__glibcxx_want_ranges_chunk) */ +#endif /* !defined(__cpp_lib_ranges_chunk) */ #undef __glibcxx_want_ranges_chunk #if !defined(__cpp_lib_ranges_slide) @@ -1785,7 +1818,7 @@ # define __cpp_lib_ranges_slide 202202L # endif # endif -#endif /* !defined(__cpp_lib_ranges_slide) && defined(__glibcxx_want_ranges_slide) */ +#endif /* !defined(__cpp_lib_ranges_slide) */ #undef __glibcxx_want_ranges_slide #if !defined(__cpp_lib_ranges_chunk_by) @@ -1795,7 +1828,7 @@ # define __cpp_lib_ranges_chunk_by 202202L # endif # endif -#endif /* !defined(__cpp_lib_ranges_chunk_by) && defined(__glibcxx_want_ranges_chunk_by) */ +#endif /* !defined(__cpp_lib_ranges_chunk_by) */ #undef __glibcxx_want_ranges_chunk_by #if !defined(__cpp_lib_ranges_join_with) @@ -1805,7 +1838,7 @@ # define __cpp_lib_ranges_join_with 202202L # endif # endif -#endif /* !defined(__cpp_lib_ranges_join_with) && defined(__glibcxx_want_ranges_join_with) */ +#endif /* !defined(__cpp_lib_ranges_join_with) */ #undef __glibcxx_want_ranges_join_with #if !defined(__cpp_lib_ranges_repeat) @@ -1815,7 +1848,7 @@ # define __cpp_lib_ranges_repeat 202207L # endif # endif -#endif /* !defined(__cpp_lib_ranges_repeat) && defined(__glibcxx_want_ranges_repeat) */ +#endif /* !defined(__cpp_lib_ranges_repeat) */ #undef __glibcxx_want_ranges_repeat #if !defined(__cpp_lib_ranges_stride) @@ -1825,7 +1858,7 @@ # define __cpp_lib_ranges_stride 202207L # endif # endif -#endif /* !defined(__cpp_lib_ranges_stride) && defined(__glibcxx_want_ranges_stride) */ +#endif /* !defined(__cpp_lib_ranges_stride) */ #undef __glibcxx_want_ranges_stride #if !defined(__cpp_lib_ranges_cartesian_product) @@ -1835,7 +1868,7 @@ # define __cpp_lib_ranges_cartesian_product 202207L # endif # endif -#endif /* !defined(__cpp_lib_ranges_cartesian_product) && defined(__glibcxx_want_ranges_cartesian_product) */ +#endif /* !defined(__cpp_lib_ranges_cartesian_product) */ #undef __glibcxx_want_ranges_cartesian_product #if !defined(__cpp_lib_ranges_as_rvalue) @@ -1845,7 +1878,7 @@ # define __cpp_lib_ranges_as_rvalue 202207L # endif # endif -#endif /* !defined(__cpp_lib_ranges_as_rvalue) && defined(__glibcxx_want_ranges_as_rvalue) */ +#endif /* !defined(__cpp_lib_ranges_as_rvalue) */ #undef __glibcxx_want_ranges_as_rvalue #if !defined(__cpp_lib_ranges_as_const) @@ -1855,7 +1888,7 @@ # define __cpp_lib_ranges_as_const 202311L # endif # endif -#endif /* !defined(__cpp_lib_ranges_as_const) && defined(__glibcxx_want_ranges_as_const) */ +#endif /* !defined(__cpp_lib_ranges_as_const) */ #undef __glibcxx_want_ranges_as_const #if !defined(__cpp_lib_ranges_enumerate) @@ -1865,7 +1898,7 @@ # define __cpp_lib_ranges_enumerate 202302L # endif # endif -#endif /* !defined(__cpp_lib_ranges_enumerate) && defined(__glibcxx_want_ranges_enumerate) */ +#endif /* !defined(__cpp_lib_ranges_enumerate) */ #undef __glibcxx_want_ranges_enumerate #if !defined(__cpp_lib_ranges_fold) @@ -1875,7 +1908,7 @@ # define __cpp_lib_ranges_fold 202207L # endif # endif -#endif /* !defined(__cpp_lib_ranges_fold) && defined(__glibcxx_want_ranges_fold) */ +#endif /* !defined(__cpp_lib_ranges_fold) */ #undef __glibcxx_want_ranges_fold #if !defined(__cpp_lib_ranges_contains) @@ -1885,7 +1918,7 @@ # define __cpp_lib_ranges_contains 202207L # endif # endif -#endif /* !defined(__cpp_lib_ranges_contains) && defined(__glibcxx_want_ranges_contains) */ +#endif /* !defined(__cpp_lib_ranges_contains) */ #undef __glibcxx_want_ranges_contains #if !defined(__cpp_lib_ranges_iota) @@ -1895,7 +1928,7 @@ # define __cpp_lib_ranges_iota 202202L # endif # endif -#endif /* !defined(__cpp_lib_ranges_iota) && defined(__glibcxx_want_ranges_iota) */ +#endif /* !defined(__cpp_lib_ranges_iota) */ #undef __glibcxx_want_ranges_iota #if !defined(__cpp_lib_ranges_find_last) @@ -1905,7 +1938,7 @@ # define __cpp_lib_ranges_find_last 202207L # endif # endif -#endif /* !defined(__cpp_lib_ranges_find_last) && defined(__glibcxx_want_ranges_find_last) */ +#endif /* !defined(__cpp_lib_ranges_find_last) */ #undef __glibcxx_want_ranges_find_last #if !defined(__cpp_lib_ranges_starts_ends_with) @@ -1915,7 +1948,7 @@ # define __cpp_lib_ranges_starts_ends_with 202106L # endif # endif -#endif /* !defined(__cpp_lib_ranges_starts_ends_with) && defined(__glibcxx_want_ranges_starts_ends_with) */ +#endif /* !defined(__cpp_lib_ranges_starts_ends_with) */ #undef __glibcxx_want_ranges_starts_ends_with #if !defined(__cpp_lib_constexpr_bitset) @@ -1925,7 +1958,7 @@ # define __cpp_lib_constexpr_bitset 202202L # endif # endif -#endif /* !defined(__cpp_lib_constexpr_bitset) && defined(__glibcxx_want_constexpr_bitset) */ +#endif /* !defined(__cpp_lib_constexpr_bitset) */ #undef __glibcxx_want_constexpr_bitset #if !defined(__cpp_lib_stdatomic_h) @@ -1935,7 +1968,7 @@ # define __cpp_lib_stdatomic_h 202011L # endif # endif -#endif /* !defined(__cpp_lib_stdatomic_h) && defined(__glibcxx_want_stdatomic_h) */ +#endif /* !defined(__cpp_lib_stdatomic_h) */ #undef __glibcxx_want_stdatomic_h #if !defined(__cpp_lib_adaptor_iterator_pair_constructor) @@ -1945,7 +1978,7 @@ # define __cpp_lib_adaptor_iterator_pair_constructor 202106L # endif # endif -#endif /* !defined(__cpp_lib_adaptor_iterator_pair_constructor) && defined(__glibcxx_want_adaptor_iterator_pair_constructor) */ +#endif /* !defined(__cpp_lib_adaptor_iterator_pair_constructor) */ #undef __glibcxx_want_adaptor_iterator_pair_constructor #if !defined(__cpp_lib_flat_map) @@ -1955,7 +1988,7 @@ # define __cpp_lib_flat_map 202207L # endif # endif -#endif /* !defined(__cpp_lib_flat_map) && defined(__glibcxx_want_flat_map) */ +#endif /* !defined(__cpp_lib_flat_map) */ #undef __glibcxx_want_flat_map #if !defined(__cpp_lib_flat_set) @@ -1965,7 +1998,7 @@ # define __cpp_lib_flat_set 202207L # endif # endif -#endif /* !defined(__cpp_lib_flat_set) && defined(__glibcxx_want_flat_set) */ +#endif /* !defined(__cpp_lib_flat_set) */ #undef __glibcxx_want_flat_set #if !defined(__cpp_lib_formatters) @@ -1975,7 +2008,7 @@ # define __cpp_lib_formatters 202302L # endif # endif -#endif /* !defined(__cpp_lib_formatters) && defined(__glibcxx_want_formatters) */ +#endif /* !defined(__cpp_lib_formatters) */ #undef __glibcxx_want_formatters #if !defined(__cpp_lib_forward_like) @@ -1985,7 +2018,7 @@ # define __cpp_lib_forward_like 202207L # endif # endif -#endif /* !defined(__cpp_lib_forward_like) && defined(__glibcxx_want_forward_like) */ +#endif /* !defined(__cpp_lib_forward_like) */ #undef __glibcxx_want_forward_like #if !defined(__cpp_lib_generator) @@ -1995,7 +2028,7 @@ # define __cpp_lib_generator 202207L # endif # endif -#endif /* !defined(__cpp_lib_generator) && defined(__glibcxx_want_generator) */ +#endif /* !defined(__cpp_lib_generator) */ #undef __glibcxx_want_generator #if !defined(__cpp_lib_ios_noreplace) @@ -2005,7 +2038,7 @@ # define __cpp_lib_ios_noreplace 202207L # endif # endif -#endif /* !defined(__cpp_lib_ios_noreplace) && defined(__glibcxx_want_ios_noreplace) */ +#endif /* !defined(__cpp_lib_ios_noreplace) */ #undef __glibcxx_want_ios_noreplace #if !defined(__cpp_lib_move_only_function) @@ -2015,7 +2048,7 @@ # define __cpp_lib_move_only_function 202110L # endif # endif -#endif /* !defined(__cpp_lib_move_only_function) && defined(__glibcxx_want_move_only_function) */ +#endif /* !defined(__cpp_lib_move_only_function) */ #undef __glibcxx_want_move_only_function #if !defined(__cpp_lib_copyable_function) @@ -2025,7 +2058,7 @@ # define __cpp_lib_copyable_function 202306L # endif # endif -#endif /* !defined(__cpp_lib_copyable_function) && defined(__glibcxx_want_copyable_function) */ +#endif /* !defined(__cpp_lib_copyable_function) */ #undef __glibcxx_want_copyable_function #if !defined(__cpp_lib_function_ref) @@ -2035,7 +2068,7 @@ # define __cpp_lib_function_ref 202306L # endif # endif -#endif /* !defined(__cpp_lib_function_ref) && defined(__glibcxx_want_function_ref) */ +#endif /* !defined(__cpp_lib_function_ref) */ #undef __glibcxx_want_function_ref #if !defined(__cpp_lib_out_ptr) @@ -2045,7 +2078,7 @@ # define __cpp_lib_out_ptr 202311L # endif # endif -#endif /* !defined(__cpp_lib_out_ptr) && defined(__glibcxx_want_out_ptr) */ +#endif /* !defined(__cpp_lib_out_ptr) */ #undef __glibcxx_want_out_ptr #if !defined(__cpp_lib_print) @@ -2055,7 +2088,7 @@ # define __cpp_lib_print 202211L # endif # endif -#endif /* !defined(__cpp_lib_print) && defined(__glibcxx_want_print) */ +#endif /* !defined(__cpp_lib_print) */ #undef __glibcxx_want_print #if !defined(__cpp_lib_spanstream) @@ -2065,7 +2098,7 @@ # define __cpp_lib_spanstream 202106L # endif # endif -#endif /* !defined(__cpp_lib_spanstream) && defined(__glibcxx_want_spanstream) */ +#endif /* !defined(__cpp_lib_spanstream) */ #undef __glibcxx_want_spanstream #if !defined(__cpp_lib_stacktrace) @@ -2075,9 +2108,19 @@ # define __cpp_lib_stacktrace 202011L # endif # endif -#endif /* !defined(__cpp_lib_stacktrace) && defined(__glibcxx_want_stacktrace) */ +#endif /* !defined(__cpp_lib_stacktrace) */ #undef __glibcxx_want_stacktrace +#if !defined(__cpp_lib_start_lifetime_as) +# if (__cplusplus >= 202100L) +# define __glibcxx_start_lifetime_as 202207L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_start_lifetime_as) +# define __cpp_lib_start_lifetime_as 202207L +# endif +# endif +#endif /* !defined(__cpp_lib_start_lifetime_as) */ +#undef __glibcxx_want_start_lifetime_as + #if !defined(__cpp_lib_string_contains) # if (__cplusplus >= 202100L) && _GLIBCXX_HOSTED # define __glibcxx_string_contains 202011L @@ -2085,7 +2128,7 @@ # define __cpp_lib_string_contains 202011L # endif # endif -#endif /* !defined(__cpp_lib_string_contains) && defined(__glibcxx_want_string_contains) */ +#endif /* !defined(__cpp_lib_string_contains) */ #undef __glibcxx_want_string_contains #if !defined(__cpp_lib_string_resize_and_overwrite) @@ -2095,7 +2138,7 @@ # define __cpp_lib_string_resize_and_overwrite 202110L # endif # endif -#endif /* !defined(__cpp_lib_string_resize_and_overwrite) && defined(__glibcxx_want_string_resize_and_overwrite) */ +#endif /* !defined(__cpp_lib_string_resize_and_overwrite) */ #undef __glibcxx_want_string_resize_and_overwrite #if !defined(__cpp_lib_to_underlying) @@ -2105,7 +2148,7 @@ # define __cpp_lib_to_underlying 202102L # endif # endif -#endif /* !defined(__cpp_lib_to_underlying) && defined(__glibcxx_want_to_underlying) */ +#endif /* !defined(__cpp_lib_to_underlying) */ #undef __glibcxx_want_to_underlying #if !defined(__cpp_lib_tuple_like) @@ -2120,7 +2163,7 @@ # define __cpp_lib_tuple_like 202207L # endif # endif -#endif /* !defined(__cpp_lib_tuple_like) && defined(__glibcxx_want_tuple_like) */ +#endif /* !defined(__cpp_lib_tuple_like) */ #undef __glibcxx_want_tuple_like #if !defined(__cpp_lib_unreachable) @@ -2130,7 +2173,7 @@ # define __cpp_lib_unreachable 202202L # endif # endif -#endif /* !defined(__cpp_lib_unreachable) && defined(__glibcxx_want_unreachable) */ +#endif /* !defined(__cpp_lib_unreachable) */ #undef __glibcxx_want_unreachable #if !defined(__cpp_lib_algorithm_default_value_type) @@ -2140,7 +2183,7 @@ # define __cpp_lib_algorithm_default_value_type 202403L # endif # endif -#endif /* !defined(__cpp_lib_algorithm_default_value_type) && defined(__glibcxx_want_algorithm_default_value_type) */ +#endif /* !defined(__cpp_lib_algorithm_default_value_type) */ #undef __glibcxx_want_algorithm_default_value_type #if !defined(__cpp_lib_constexpr_new) @@ -2150,7 +2193,7 @@ # define __cpp_lib_constexpr_new 202406L # endif # endif -#endif /* !defined(__cpp_lib_constexpr_new) && defined(__glibcxx_want_constexpr_new) */ +#endif /* !defined(__cpp_lib_constexpr_new) */ #undef __glibcxx_want_constexpr_new #if !defined(__cpp_lib_debugging) @@ -2160,7 +2203,7 @@ # define __cpp_lib_debugging 202403L # endif # endif -#endif /* !defined(__cpp_lib_debugging) && defined(__glibcxx_want_debugging) */ +#endif /* !defined(__cpp_lib_debugging) */ #undef __glibcxx_want_debugging #if !defined(__cpp_lib_fstream_native_handle) @@ -2170,7 +2213,7 @@ # define __cpp_lib_fstream_native_handle 202306L # endif # endif -#endif /* !defined(__cpp_lib_fstream_native_handle) && defined(__glibcxx_want_fstream_native_handle) */ +#endif /* !defined(__cpp_lib_fstream_native_handle) */ #undef __glibcxx_want_fstream_native_handle #if !defined(__cpp_lib_is_virtual_base_of) @@ -2180,7 +2223,7 @@ # define __cpp_lib_is_virtual_base_of 202406L # endif # endif -#endif /* !defined(__cpp_lib_is_virtual_base_of) && defined(__glibcxx_want_is_virtual_base_of) */ +#endif /* !defined(__cpp_lib_is_virtual_base_of) */ #undef __glibcxx_want_is_virtual_base_of #if !defined(__cpp_lib_ranges_cache_latest) @@ -2190,7 +2233,7 @@ # define __cpp_lib_ranges_cache_latest 202411L # endif # endif -#endif /* !defined(__cpp_lib_ranges_cache_latest) && defined(__glibcxx_want_ranges_cache_latest) */ +#endif /* !defined(__cpp_lib_ranges_cache_latest) */ #undef __glibcxx_want_ranges_cache_latest #if !defined(__cpp_lib_ranges_concat) @@ -2200,7 +2243,7 @@ # define __cpp_lib_ranges_concat 202403L # endif # endif -#endif /* !defined(__cpp_lib_ranges_concat) && defined(__glibcxx_want_ranges_concat) */ +#endif /* !defined(__cpp_lib_ranges_concat) */ #undef __glibcxx_want_ranges_concat #if !defined(__cpp_lib_ratio) @@ -2210,7 +2253,7 @@ # define __cpp_lib_ratio 202306L # endif # endif -#endif /* !defined(__cpp_lib_ratio) && defined(__glibcxx_want_ratio) */ +#endif /* !defined(__cpp_lib_ratio) */ #undef __glibcxx_want_ratio #if !defined(__cpp_lib_reference_wrapper) @@ -2220,7 +2263,7 @@ # define __cpp_lib_reference_wrapper 202403L # endif # endif -#endif /* !defined(__cpp_lib_reference_wrapper) && defined(__glibcxx_want_reference_wrapper) */ +#endif /* !defined(__cpp_lib_reference_wrapper) */ #undef __glibcxx_want_reference_wrapper #if !defined(__cpp_lib_saturation_arithmetic) @@ -2230,7 +2273,7 @@ # define __cpp_lib_saturation_arithmetic 202311L # endif # endif -#endif /* !defined(__cpp_lib_saturation_arithmetic) && defined(__glibcxx_want_saturation_arithmetic) */ +#endif /* !defined(__cpp_lib_saturation_arithmetic) */ #undef __glibcxx_want_saturation_arithmetic #if !defined(__cpp_lib_span_initializer_list) @@ -2240,7 +2283,7 @@ # define __cpp_lib_span_initializer_list 202311L # endif # endif -#endif /* !defined(__cpp_lib_span_initializer_list) && defined(__glibcxx_want_span_initializer_list) */ +#endif /* !defined(__cpp_lib_span_initializer_list) */ #undef __glibcxx_want_span_initializer_list #if !defined(__cpp_lib_text_encoding) @@ -2250,7 +2293,7 @@ # define __cpp_lib_text_encoding 202306L # endif # endif -#endif /* !defined(__cpp_lib_text_encoding) && defined(__glibcxx_want_text_encoding) */ +#endif /* !defined(__cpp_lib_text_encoding) */ #undef __glibcxx_want_text_encoding #if !defined(__cpp_lib_ranges_to_input) @@ -2260,7 +2303,7 @@ # define __cpp_lib_ranges_to_input 202502L # endif # endif -#endif /* !defined(__cpp_lib_ranges_to_input) && defined(__glibcxx_want_ranges_to_input) */ +#endif /* !defined(__cpp_lib_ranges_to_input) */ #undef __glibcxx_want_ranges_to_input #if !defined(__cpp_lib_to_string) @@ -2270,7 +2313,7 @@ # define __cpp_lib_to_string 202306L # endif # endif -#endif /* !defined(__cpp_lib_to_string) && defined(__glibcxx_want_to_string) */ +#endif /* !defined(__cpp_lib_to_string) */ #undef __glibcxx_want_to_string #if !defined(__cpp_lib_modules) @@ -2280,7 +2323,7 @@ # define __cpp_lib_modules 202207L # endif # endif -#endif /* !defined(__cpp_lib_modules) && defined(__glibcxx_want_modules) */ +#endif /* !defined(__cpp_lib_modules) */ #undef __glibcxx_want_modules #if !defined(__cpp_lib_inplace_vector) @@ -2290,7 +2333,7 @@ # define __cpp_lib_inplace_vector 202406L # endif # endif -#endif /* !defined(__cpp_lib_inplace_vector) && defined(__glibcxx_want_inplace_vector) */ +#endif /* !defined(__cpp_lib_inplace_vector) */ #undef __glibcxx_want_inplace_vector #if !defined(__cpp_lib_indirect) @@ -2300,7 +2343,7 @@ # define __cpp_lib_indirect 202502L # endif # endif -#endif /* !defined(__cpp_lib_indirect) && defined(__glibcxx_want_indirect) */ +#endif /* !defined(__cpp_lib_indirect) */ #undef __glibcxx_want_indirect #if !defined(__cpp_lib_polymorphic) @@ -2310,7 +2353,7 @@ # define __cpp_lib_polymorphic 202502L # endif # endif -#endif /* !defined(__cpp_lib_polymorphic) && defined(__glibcxx_want_polymorphic) */ +#endif /* !defined(__cpp_lib_polymorphic) */ #undef __glibcxx_want_polymorphic #if !defined(__cpp_lib_smart_ptr_owner_equality) @@ -2320,7 +2363,7 @@ # define __cpp_lib_smart_ptr_owner_equality 202306L # endif # endif -#endif /* !defined(__cpp_lib_smart_ptr_owner_equality) && defined(__glibcxx_want_smart_ptr_owner_equality) */ +#endif /* !defined(__cpp_lib_smart_ptr_owner_equality) */ #undef __glibcxx_want_smart_ptr_owner_equality #if !defined(__cpp_lib_sstream_from_string_view) @@ -2330,7 +2373,7 @@ # define __cpp_lib_sstream_from_string_view 202306L # endif # endif -#endif /* !defined(__cpp_lib_sstream_from_string_view) && defined(__glibcxx_want_sstream_from_string_view) */ +#endif /* !defined(__cpp_lib_sstream_from_string_view) */ #undef __glibcxx_want_sstream_from_string_view #if !defined(__cpp_lib_type_order) @@ -2340,7 +2383,7 @@ # define __cpp_lib_type_order 202506L # endif # endif -#endif /* !defined(__cpp_lib_type_order) && defined(__glibcxx_want_type_order) */ +#endif /* !defined(__cpp_lib_type_order) */ #undef __glibcxx_want_type_order #if !defined(__cpp_lib_exception_ptr_cast) @@ -2350,7 +2393,7 @@ # define __cpp_lib_exception_ptr_cast 202506L # endif # endif -#endif /* !defined(__cpp_lib_exception_ptr_cast) && defined(__glibcxx_want_exception_ptr_cast) */ +#endif /* !defined(__cpp_lib_exception_ptr_cast) */ #undef __glibcxx_want_exception_ptr_cast #if !defined(__cpp_lib_bitset) @@ -2360,7 +2403,7 @@ # define __cpp_lib_bitset 202306L # endif # endif -#endif /* !defined(__cpp_lib_bitset) && defined(__glibcxx_want_bitset) */ +#endif /* !defined(__cpp_lib_bitset) */ #undef __glibcxx_want_bitset #if !defined(__cpp_lib_constexpr_exceptions) @@ -2369,7 +2412,17 @@ # if defined(__glibcxx_want_all) || defined(__glibcxx_want_constexpr_exceptions) # endif # endif -#endif /* !defined(__cpp_lib_constexpr_exceptions) && defined(__glibcxx_want_constexpr_exceptions) */ +#endif /* !defined(__cpp_lib_constexpr_exceptions) */ #undef __glibcxx_want_constexpr_exceptions +#if !defined(__cpp_lib_philox_engine) +# if (__cplusplus > 202302L) && (__SIZEOF_INT128__) +# define __glibcxx_philox_engine 202406L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_philox_engine) +# define __cpp_lib_philox_engine 202406L +# endif +# endif +#endif /* !defined(__cpp_lib_philox_engine) */ +#undef __glibcxx_want_philox_engine + #undef __glibcxx_want_all diff --git a/libstdc++-v3/include/bits/version.tpl b/libstdc++-v3/include/bits/version.tpl index ccda71d6bcfe..5d62b2a17f55 100644 --- a/libstdc++-v3/include/bits/version.tpl +++ b/libstdc++-v3/include/bits/version.tpl @@ -132,10 +132,11 @@ h This macro block defines two versions of each FTM: - 1. __glibcxx_NAME, which is defined unconditionally, and - 2. __cpp_lib_NAME, which is defined only if marked as wanted. + 1. __glibcxx_NAME, which is defined as long its conditions are met, and + 2. __cpp_lib_NAME, which is defined only if __glibcxx_want_NAME is defined + and no_stdname is not set. - This allows FTMs to depend on eachother in their definitions without messing + This allows FTMs to depend on each other in their definitions without messing with the exported values. This can also be used by bits that do not want to expose FTMs that they can't @@ -155,7 +156,7 @@ h # endif /*{ ENDFOR values }*/# endif -#endif /* !defined(__cpp_lib_/*{name}*/) && defined(__glibcxx_want_/*{name}*/) */ +#endif /* !defined(__cpp_lib_/*{name}*/) */ #undef __glibcxx_want_/*{name }*//*{ (unless (last-for?) "\n\n" "\n")}*/ /*{ ENDFOR ftms }*//*{ diff --git a/libstdc++-v3/include/debug/bitset b/libstdc++-v3/include/debug/bitset index e4d3e6619c96..2f4bab846397 100644 --- a/libstdc++-v3/include/debug/bitset +++ b/libstdc++-v3/include/debug/bitset @@ -179,7 +179,13 @@ namespace __debug bitset(const _Base& __x) : _Base(__x) { } #if __cplusplus >= 201103L - template + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 4294. bitset(const CharT*) constructor needs to be constrained + template, + is_standard_layout<_CharT>, + is_trivially_default_constructible<_CharT>, + __not_>>> _GLIBCXX23_CONSTEXPR explicit bitset(const _CharT* __str, diff --git a/libstdc++-v3/include/ext/atomicity.h b/libstdc++-v3/include/ext/atomicity.h index 650b786cd8e6..0b970f33f4b6 100644 --- a/libstdc++-v3/include/ext/atomicity.h +++ b/libstdc++-v3/include/ext/atomicity.h @@ -39,6 +39,9 @@ #if __has_include() # include #endif +#if __cplusplus >= 201103L +# include // make_unsigned_t +#endif namespace __gnu_cxx _GLIBCXX_VISIBILITY(default) { @@ -79,19 +82,47 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION __atomic_add(volatile _Atomic_word*, int) _GLIBCXX_NOTHROW; #endif +#if __cplusplus < 201103L + // The array bound will be ill-formed in the very unlikely case that + // _Atomic_word is wider than long and we need to use unsigned long long + // below in __exchange_and_add_single and __atomic_add_single. + typedef int + _Atomic_word_fits_in_long[sizeof(_Atomic_word) <= sizeof(long) ? 1 : -1]; +#endif + inline _Atomic_word __attribute__((__always_inline__)) __exchange_and_add_single(_Atomic_word* __mem, int __val) { _Atomic_word __result = *__mem; - *__mem += __val; + // Do the addition with an unsigned type so that overflow is well defined. +#if __cplusplus >= 201103L + std::make_unsigned<_Atomic_word>::type __u; +#else + // For most targets make_unsigned_t<_Atomic_word> is unsigned int, + // but 64-bit sparc uses long for _Atomic_word. + // Sign-extending to unsigned long works for both cases. + unsigned long __u; +#endif + __u = __result; + __u += __val; + *__mem = __u; return __result; } inline void __attribute__((__always_inline__)) __atomic_add_single(_Atomic_word* __mem, int __val) - { *__mem += __val; } + { +#if __cplusplus >= 201103L + std::make_unsigned<_Atomic_word>::type __u; +#else + unsigned long __u; // see above +#endif + __u = *__mem; + __u += __val; + *__mem = __u; + } inline _Atomic_word __attribute__ ((__always_inline__)) diff --git a/libstdc++-v3/include/ext/ropeimpl.h b/libstdc++-v3/include/ext/ropeimpl.h index 320192706ff9..00b334cb4f4e 100644 --- a/libstdc++-v3/include/ext/ropeimpl.h +++ b/libstdc++-v3/include/ext/ropeimpl.h @@ -1355,7 +1355,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION case __detail::_S_substringfn: { _RopeFunction* __f = (_RopeFunction*)__r; - _CharT __result; + _CharT __result = _CharT(); (*(__f->_M_fn))(__i, 1, &__result); return __result; diff --git a/libstdc++-v3/include/pstl/parallel_backend_tbb.h b/libstdc++-v3/include/pstl/parallel_backend_tbb.h index bb6fa8f18e83..ff5236f39071 100644 --- a/libstdc++-v3/include/pstl/parallel_backend_tbb.h +++ b/libstdc++-v3/include/pstl/parallel_backend_tbb.h @@ -521,7 +521,7 @@ class __root_task friend class __func_task<_Func>; }; -#else // TBB_INTERFACE_VERSION <= 12000 +#else // TBB_INTERFACE_VERSION > 12000 class __task : public tbb::detail::d1::task { protected: @@ -656,10 +656,16 @@ class __func_task : public __task _PSTL_ASSERT(__parent != nullptr); _PSTL_ASSERT(__parent->_M_refcount.load(std::memory_order_relaxed) > 0); - if (--__parent->_M_refcount == 0) + + auto __refcount = --__parent->_M_refcount; + + // Placing the deallocation after the refcount decrement allows another thread to proceed with tree + // folding concurrently with this task cleanup. + __alloc.deallocate(this, *__ed); + + if (__refcount == 0) { _PSTL_ASSERT(__next == nullptr); - __alloc.deallocate(this, *__ed); return __parent; } diff --git a/libstdc++-v3/include/std/concepts b/libstdc++-v3/include/std/concepts index 5899f032434a..d9920a8f20a8 100644 --- a/libstdc++-v3/include/std/concepts +++ b/libstdc++-v3/include/std/concepts @@ -204,7 +204,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { private: template - static constexpr bool + static consteval bool _S_noexcept() { if constexpr (__adl_swap<_Tp, _Up>) diff --git a/libstdc++-v3/include/std/deque b/libstdc++-v3/include/std/deque index 2badab80a6dc..c82f9dff2869 100644 --- a/libstdc++-v3/include/std/deque +++ b/libstdc++-v3/include/std/deque @@ -66,7 +66,6 @@ #include #include #include -#include #include #include @@ -109,7 +108,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION const auto __osz = __cont.size(); const auto __end = __ucont.end(); auto __removed = std::__remove_if(__ucont.begin(), __end, - __ops::__pred_iter(std::ref(__pred))); + std::move(__pred)); if (__removed != __end) { __cont.erase(__niter_wrap(__cont.begin(), __removed), @@ -124,22 +123,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION typename _Up _GLIBCXX26_DEF_VAL_T(_Tp)> inline typename deque<_Tp, _Alloc>::size_type erase(deque<_Tp, _Alloc>& __cont, const _Up& __value) - { - using namespace __gnu_cxx; - _GLIBCXX_STD_C::deque<_Tp, _Alloc>& __ucont = __cont; - const auto __osz = __cont.size(); - const auto __end = __ucont.end(); - auto __removed = std::__remove_if(__ucont.begin(), __end, - __ops::__iter_equals_val(__value)); - if (__removed != __end) - { - __cont.erase(__niter_wrap(__cont.begin(), __removed), - __cont.end()); - return __osz - __cont.size(); - } + { return std::erase_if(__cont, __gnu_cxx::__ops::__equal_to(__value)); } - return 0; - } _GLIBCXX_END_NAMESPACE_VERSION } // namespace std #endif // __cpp_lib_erase_if diff --git a/libstdc++-v3/include/std/format b/libstdc++-v3/include/std/format index d63c6fc9efd5..842972eed4ca 100644 --- a/libstdc++-v3/include/std/format +++ b/libstdc++-v3/include/std/format @@ -56,7 +56,7 @@ #include // input_range, range_reference_t #include // subrange #include // ranges::copy -#include // back_insert_iterator, counted_iterator +#include // counted_iterator #include // __is_pair #include // __is_scalar_value, _Utf_view, etc. #include // tuple_size_v @@ -110,10 +110,14 @@ namespace __format template class _Sink_iter; + // Output iterator that ignores the characters + template + class _Drop_iter; + // An unspecified output iterator type used in the `formattable` concept. template struct _Iter_for - { using type = back_insert_iterator>; }; + { using type = _Drop_iter<_CharT>; }; template using __format_context = basic_format_context<_Sink_iter<_CharT>, _CharT>; @@ -1436,7 +1440,7 @@ namespace __format else if constexpr (ranges::random_access_range<_Rg>) { ranges::iterator_t<_Rg> __first = ranges::begin(__rg); - ranges::subrange __sub(__first, __first + __w); + ranges::subrange __sub(__first, ranges::next(__first, __w)); return _M_format_escaped(_String(from_range, __sub), __fc); } else if (__w <= __n) @@ -3135,6 +3139,43 @@ _GLIBCXX_END_NAMESPACE_CONTAINER /// @cond undocumented namespace __format { + template + class _Drop_iter + { + public: + using iterator_category = output_iterator_tag; + using value_type = void; + using difference_type = ptrdiff_t; + using pointer = void; + using reference = void; + + _Drop_iter() = default; + _Drop_iter(const _Drop_iter&) = default; + _Drop_iter& operator=(const _Drop_iter&) = default; + + [[__gnu__::__always_inline__]] + constexpr _Drop_iter& + operator=(_CharT __c) + { return *this; } + + [[__gnu__::__always_inline__]] + constexpr _Drop_iter& + operator=(basic_string_view<_CharT> __s) + { return *this; } + + [[__gnu__::__always_inline__]] + constexpr _Drop_iter& + operator*() { return *this; } + + [[__gnu__::__always_inline__]] + constexpr _Drop_iter& + operator++() { return *this; } + + [[__gnu__::__always_inline__]] + constexpr _Drop_iter + operator++(int) { return *this; } + }; + template class _Sink_iter { @@ -5503,42 +5544,47 @@ namespace __format const _Spec<_CharT>& __spec, _Callback&& __call) { - // This is required to implement formatting with padding, - // as we need to format to temporary buffer, using the same iterator. - static_assert(is_same_v<_Out, __format::_Sink_iter<_CharT>>); - - const size_t __padwidth = __spec._M_get_width(__fc); - if (__padwidth == 0) - return __call(__fc); - - struct _Restore_out - { - _Restore_out(basic_format_context<_Sink_iter<_CharT>, _CharT>& __fc) - : _M_ctx(std::addressof(__fc)), _M_out(__fc.out()) - { } - - void - _M_disarm() - { _M_ctx = nullptr; } - - ~_Restore_out() - { - if (_M_ctx) - _M_ctx->advance_to(_M_out); - } - - private: - basic_format_context<_Sink_iter<_CharT>, _CharT>* _M_ctx; - _Sink_iter<_CharT> _M_out; - }; + if constexpr (is_same_v<_Out, _Drop_iter<_CharT>>) + return __fc.out(); + else + { + // This is required to implement formatting with padding, + // as we need to format to temporary buffer, using the same iterator. + static_assert(is_same_v<_Out, _Sink_iter<_CharT>>); + + const size_t __padwidth = __spec._M_get_width(__fc); + if (__padwidth == 0) + return __call(__fc); + + struct _Restore_out + { + _Restore_out(basic_format_context<_Sink_iter<_CharT>, _CharT>& __fc) + : _M_ctx(std::addressof(__fc)), _M_out(__fc.out()) + { } + + void + _M_disarm() + { _M_ctx = nullptr; } + + ~_Restore_out() + { + if (_M_ctx) + _M_ctx->advance_to(_M_out); + } - _Restore_out __restore(__fc); - _Padding_sink<_Sink_iter<_CharT>, _CharT> __sink(__fc.out(), __padwidth); - __fc.advance_to(__sink.out()); - __call(__fc); - __fc.advance_to(__sink._M_finish(__spec._M_align, __spec._M_fill)); - __restore._M_disarm(); - return __fc.out(); + private: + basic_format_context<_Sink_iter<_CharT>, _CharT>* _M_ctx; + _Sink_iter<_CharT> _M_out; + }; + + _Restore_out __restore(__fc); + _Padding_sink<_Sink_iter<_CharT>, _CharT> __sink(__fc.out(), __padwidth); + __fc.advance_to(__sink.out()); + __call(__fc); + __fc.advance_to(__sink._M_finish(__spec._M_align, __spec._M_fill)); + __restore._M_disarm(); + return __fc.out(); + } } template diff --git a/libstdc++-v3/include/std/functional b/libstdc++-v3/include/std/functional index 5b329daf184e..8ad73b343bda 100644 --- a/libstdc++-v3/include/std/functional +++ b/libstdc++-v3/include/std/functional @@ -68,7 +68,6 @@ #include #include -#include #include #include #include // std::reference_wrapper and _Mem_fn_traits @@ -88,7 +87,8 @@ # include // std::identity, ranges::equal_to etc. # include #endif -#if __glibcxx_move_only_function || __glibcxx_copyable_function || __glibcxx_function_ref +#if __glibcxx_move_only_function || __glibcxx_copyable_function || \ + __glibcxx_function_ref # include #endif @@ -922,6 +922,20 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION std::forward<_BoundArgs>(__args)...); } +#if __cpp_lib_bind_front >= 202306L || __cpp_lib_bind_back >= 202306L + template + struct _Bind_fn_t + { + using _Fn = const decltype(__fn)&; + template + constexpr static decltype(auto) + operator()(_Args... __args) + noexcept(is_nothrow_invocable_v<_Fn, _Args...>) + requires is_invocable_v<_Fn, _Args...> + { return std::invoke(__fn, std::forward<_Args>(__args)...); } + }; +#endif + #ifdef __cpp_lib_bind_front // C++ >= 20 /** Create call wrapper by partial application of arguments to function. * @@ -941,6 +955,50 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION return _Bind_front_t<_Fn, _Args...>(0, std::forward<_Fn>(__fn), std::forward<_Args>(__args)...); } + +#if __cpp_lib_bind_front >= 202306L + + /** Create call wrapper by partial application of arguments to function. + * + * The result of `std::bind_front(bind_args...)` is a function object + * that stores the bound arguments, `bind_args...`. When that function + * object is invoked with `call_args...` it returns the result of calling + * `fn(bind_args..., call_args...)`. + * + * @since C++26 + */ + template + constexpr decltype(auto) + bind_front(_BindArgs&&... __bind_args) + noexcept(__and_v...>) + { + using _Fn = decltype(__fn); + static_assert( + (is_constructible_v, _BindArgs> && ...) && + (is_move_constructible_v> && ...)); + if constexpr (is_pointer_v<_Fn> || is_member_pointer_v<_Fn>) + static_assert(__fn != nullptr); + + if constexpr (sizeof...(_BindArgs) == 0) + return _Bind_fn_t<__fn>{}; + else { + return [... __bound_args(std::forward<_BindArgs>(__bind_args))] + + (this _Self&&, _CallArgs&&... __call_args) + noexcept(is_nothrow_invocable_v< + const _Fn&, __like_t<_Self, decay_t<_BindArgs>>..., _CallArgs...>) + -> decltype(auto) + requires is_invocable_v< + const _Fn&, __like_t<_Self, decay_t<_BindArgs>>..., _CallArgs...> + { + return std::invoke(__fn, + std::forward_like<_Self>(__bound_args)..., + std::forward<_CallArgs>(__call_args)...); + }; + } + } + +#endif // __cpp_lib_bind_front // C++26 #endif // __cpp_lib_bind_front #ifdef __cpp_lib_bind_back // C++ >= 23 @@ -962,6 +1020,52 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION return _Bind_back_t<_Fn, _Args...>(0, std::forward<_Fn>(__fn), std::forward<_Args>(__args)...); } + +#if __cpp_lib_bind_back >= 202306L + + /** Create call wrapper by partial application of arguments to function. + * + * The result of `std::bind_back(bind_args...)` is a function object + * that stores the arguments, `bind_args...`. When that function object + * is invoked with `call_args...` it returns the result of calling + * `fn(call_args..., bind_args...)`. + * + * @since C++26 + */ + template + constexpr decltype(auto) + bind_back(_BindArgs&&... __bind_args) + noexcept(__and_v...>) + { + using _Fn = decltype(__fn); + static_assert( + (is_constructible_v, _BindArgs> && ...) && + (is_move_constructible_v> && ...)); + if constexpr (is_pointer_v<_Fn> || is_member_pointer_v<_Fn>) + static_assert(__fn != nullptr); + + if constexpr (sizeof...(_BindArgs) == 0) + return _Bind_fn_t<__fn>{}; + else + { + // Capture arguments in a lambda and return that. + return [... __bound_args(std::forward<_BindArgs>(__bind_args))] + + (this _Self&&, _CallArgs&&... __call_args) + noexcept(is_nothrow_invocable_v< + const _Fn&, _CallArgs..., __like_t<_Self, decay_t<_BindArgs>>...>) + -> decltype(auto) + requires is_invocable_v< + const _Fn&, _CallArgs..., __like_t<_Self, decay_t<_BindArgs>>...> + { + return std::invoke(__fn, + std::forward<_CallArgs>(__call_args)..., + std::forward_like<_Self>(__bound_args)...); + }; + } + } + +#endif // __cpp_lib_bind_back // C++26, nttp #endif // __cpp_lib_bind_back #if __cplusplus >= 201402L @@ -1062,7 +1166,39 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { return _Not_fn>{std::forward<_Fn>(__fn), 0}; } -#endif + +#if __cpp_lib_not_fn >= 202306L + + /** Wrap a function type to create a function object that negates its result. + * + * The function template `std::not_fn` creates a "forwarding call wrapper", + * which is a function object that when called forwards its arguments to + * its invocable template argument. + * + * The result of invoking the wrapper is the negation (using `!`) of + * the wrapped function object. + * + * @ingroup functors + * @since C++26 + */ + template + constexpr decltype(auto) + not_fn() noexcept + { + using _Fn = decltype(__fn); + if constexpr (is_pointer_v<_Fn> || is_member_pointer_v<_Fn>) + static_assert(__fn != nullptr); + return [](_Args... __args) static + noexcept(noexcept( + !std::invoke(__fn, std::forward<_Args>(__args)...) )) + -> decltype(auto) + requires requires { + !std::invoke(__fn, std::forward<_Args>(__args)...); } + { return !std::invoke(__fn, std::forward<_Args>(__args)...); }; + }; + +#endif // __cpp_lib_not_fn >= 202306L +#endif // __cpp_lib_not_fn #if __cplusplus >= 201703L // Searchers @@ -1256,6 +1392,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION operator()(_RandomAccessIterator2 __first, _RandomAccessIterator2 __last) const { +#ifdef __glibcxx_concepts // >= C++20 + // Value types must be the same for hash function and predicate + // to give consistent results for lookup in the map. + static_assert(is_same_v, + iter_value_t<_RandomAccessIterator2>>); +#endif const auto& __pred = this->_M_pred(); auto __patlen = _M_pat_end - _M_pat; if (__patlen == 0) @@ -1317,6 +1459,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION operator()(_RandomAccessIterator2 __first, _RandomAccessIterator2 __last) const { +#ifdef __glibcxx_concepts // >= C++20 + // Value types must be the same for hash function and predicate + // to give consistent results for lookup in the map. + static_assert(is_same_v, + iter_value_t<_RandomAccessIterator2>>); +#endif auto __patlen = _M_pat_end - _M_pat; if (__patlen == 0) return std::make_pair(__first, __first); @@ -1333,7 +1481,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION } if (__j < 0) { - const auto __match = __first + __i + 1; + const auto __match = __first + __diff_type(__i + 1); return std::make_pair(__match, __match + __patlen); } __i += std::max(_M_bad_char_shift(__first[__i]), diff --git a/libstdc++-v3/include/std/inplace_vector b/libstdc++-v3/include/std/inplace_vector index b5a81bed3c98..7aa6f9d4ab28 100644 --- a/libstdc++-v3/include/std/inplace_vector +++ b/libstdc++-v3/include/std/inplace_vector @@ -42,7 +42,6 @@ #include // borrowed_iterator_t, __detail::__container_compatible_range #include // subrange #include -#include #include #include #include // rotate @@ -824,6 +823,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION __detail::__synth3way); } + // [inplace.vector.special], specialized algorithms constexpr friend void swap(inplace_vector& __x, inplace_vector& __y) noexcept(is_nothrow_swappable_v<_Tp> && is_nothrow_move_constructible_v<_Tp>) @@ -908,13 +908,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION } }; - // [inplace.vector.special], specialized algorithms - template - constexpr void - swap(inplace_vector<_Tp, _Nm>& __x, inplace_vector<_Tp, _Nm>& __y) - noexcept(noexcept(__x.swap(__y))) - { __x.swap(__y); } - // specialization for zero capacity, that is required to be trivally copyable // and empty regardless of _Tp. template @@ -993,6 +986,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { if (__il.size() != 0) __throw_bad_alloc(); + return *this; } template<__any_input_iterator _InputIterator> @@ -1343,7 +1337,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION const auto __osz = __cont.size(); const auto __end = __cont.end(); auto __removed = std::__remove_if(__cont.begin(), __end, - __ops::__pred_iter(std::ref(__pred))); + std::move(__pred)); if (__removed != __end) { __cont.erase(__niter_wrap(__cont.begin(), __removed), @@ -1357,20 +1351,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION template constexpr size_t erase(inplace_vector<_Tp, _Nm>& __cont, const _Up& __value) - { - using namespace __gnu_cxx; - const auto __osz = __cont.size(); - const auto __end = __cont.end(); - auto __removed = std::__remove_if(__cont.begin(), __end, - __ops::__iter_equals_val(__value)); - if (__removed != __end) - { - __cont.erase(__niter_wrap(__cont.begin(), __removed), - __cont.end()); - return __osz - __cont.size(); - } - return 0; - } + { return std::erase_if(__cont, __gnu_cxx::__ops::__equal_to(__value)); } _GLIBCXX_END_NAMESPACE_VERSION } // namespace diff --git a/libstdc++-v3/include/std/mdspan b/libstdc++-v3/include/std/mdspan index 678b2619ebe4..d555b7f2580a 100644 --- a/libstdc++-v3/include/std/mdspan +++ b/libstdc++-v3/include/std/mdspan @@ -44,6 +44,7 @@ #define __glibcxx_want_mdspan #define __glibcxx_want_aligned_accessor +#define __glibcxx_want_submdspan #include #ifdef __glibcxx_mdspan @@ -71,6 +72,33 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION return true; } + template + constexpr _IndexType + __index_type_cast(_OIndexType&& __other) + { + if constexpr (std::is_integral_v<_OIndexType>) + { + constexpr _IndexType __index_type_max + = __gnu_cxx::__int_traits<_IndexType>::__max; + constexpr _OIndexType __oindex_type_max + = __gnu_cxx::__int_traits<_OIndexType>::__max; + + if constexpr (__index_type_max < __oindex_type_max) + __glibcxx_assert(cmp_less_equal(__other, __index_type_max)); + + if constexpr (std::is_signed_v<_OIndexType>) + __glibcxx_assert(__other >= 0); + return static_cast<_IndexType>(__other); + } + else + { + auto __ret = static_cast<_IndexType>(std::move(__other)); + if constexpr (std::is_signed_v<_IndexType>) + __glibcxx_assert(__ret >= 0); + return __ret; + } + } + template class _StaticExtents { @@ -148,14 +176,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION class _ExtentsStorage : public _StaticExtents<_Extents> { private: - using _S_base = _StaticExtents<_Extents>; + using _Base = _StaticExtents<_Extents>; public: - using _S_base::_S_rank; - using _S_base::_S_rank_dynamic; - using _S_base::_S_dynamic_index; - using _S_base::_S_dynamic_index_inv; - using _S_base::_S_static_extent; + using _Base::_S_rank; + using _Base::_S_rank_dynamic; + using _Base::_S_dynamic_index; + using _Base::_S_dynamic_index_inv; + using _Base::_S_static_extent; static constexpr bool _S_is_dynamic(size_t __r) noexcept @@ -242,8 +270,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION } private: - using _S_storage = __array_traits<_IndexType, _S_rank_dynamic>::_Type; - [[no_unique_address]] _S_storage _M_dyn_exts{}; + using _Storage = __array_traits<_IndexType, _S_rank_dynamic>::_Type; + [[no_unique_address]] _Storage _M_dyn_exts{}; }; template @@ -259,7 +287,15 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION template constexpr const array& __static_extents() noexcept - { return _Extents::_S_storage::_S_static_extents(); } + { return _Extents::_Storage::_S_static_extents(); } + + template + constexpr span + __static_extents(size_t __begin, size_t __end) noexcept + { + const auto& __sta_exts = __static_extents<_Extents>(); + return span(__sta_exts.data() + __begin, __end - __begin); + } // Pre-compute: \prod_{i = 0}^r _Extents[i], for r = 0,..., n (exclusive) template @@ -300,6 +336,40 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { return __exts._M_exts._M_dynamic_extents(__begin, __end); } } +#if __glibcxx_submdspan + struct full_extent_t + { + explicit full_extent_t() = default; + }; + + inline constexpr full_extent_t full_extent{}; + + template + struct strided_slice { + static_assert(__is_standard_integer<_OffsetType>::value + || __detail::__integral_constant_like<_OffsetType>); + static_assert(__is_standard_integer<_ExtentType>::value + || __detail::__integral_constant_like<_ExtentType>); + static_assert(__is_standard_integer<_StrideType>::value + || __detail::__integral_constant_like<_StrideType>); + + using offset_type = _OffsetType; + using extent_type = _ExtentType; + using stride_type = _StrideType; + + [[no_unique_address]] offset_type offset{}; + [[no_unique_address]] extent_type extent{}; + [[no_unique_address]] stride_type stride{}; + }; + + template + struct submdspan_mapping_result + { + [[no_unique_address]] _Mapping mapping = _Mapping(); + size_t offset{}; + }; +#endif + template class extents { @@ -314,10 +384,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION using rank_type = size_t; static constexpr rank_type - rank() noexcept { return _S_storage::_S_rank; } + rank() noexcept { return _Storage::_S_rank; } static constexpr rank_type - rank_dynamic() noexcept { return _S_storage::_S_rank_dynamic; } + rank_dynamic() noexcept { return _Storage::_S_rank_dynamic; } static constexpr size_t static_extent(rank_type __r) noexcept @@ -326,7 +396,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION if constexpr (rank() == 0) __builtin_trap(); else - return _S_storage::_S_static_extent(__r); + return _Storage::_S_static_extent(__r); } constexpr index_type @@ -423,9 +493,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION friend span __mdspan::__dynamic_extents(const extents&, size_t, size_t); - using _S_storage = __mdspan::_ExtentsStorage< + using _Storage = __mdspan::_ExtentsStorage< _IndexType, array{_Extents...}>; - [[no_unique_address]] _S_storage _M_exts; + [[no_unique_address]] _Storage _M_exts; template friend class extents; @@ -476,6 +546,21 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION } // Preconditions: _r < _Extents::rank() + template + constexpr typename _Extents::index_type + __fwd_prod(const _Extents& __exts, size_t __begin, size_t __end) noexcept + { + size_t __sta_prod = [__begin, __end] { + span __sta_exts = __static_extents<_Extents>(__begin, __end); + size_t __ret = 1; + for(auto __ext : __sta_exts) + if (__ext != dynamic_extent) + __ret *= __ext; + return __ret; + }(); + return __extents_prod(__exts, __sta_prod, __begin, __end); + } + template constexpr typename _Extents::index_type __fwd_prod(const _Extents& __exts, size_t __r) noexcept @@ -567,6 +652,22 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION class mapping; }; +#ifdef __glibcxx_padded_layouts + template + struct layout_left_padded + { + template + class mapping; + }; + + template + struct layout_right_padded + { + template + class mapping; + }; +#endif + namespace __mdspan { template @@ -597,13 +698,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION return __res; } - template + template consteval _IndexType - __static_quotient(_IndexType __nom = __gnu_cxx::__int_traits<_IndexType> - ::__max) + __static_quotient(std::span __sta_exts, + _IndexType __nom = __gnu_cxx::__int_traits<_IndexType>::__max) { - std::span __sta_exts = __static_extents<_Extents>(); for (auto __factor : __sta_exts) { if (__factor != dynamic_extent) @@ -614,6 +713,17 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION return __nom; } + template + requires __is_extents<_Extents> + consteval _IndexType + __static_quotient(_IndexType __nom + = __gnu_cxx::__int_traits<_IndexType>::__max) + { + std::span __sta_exts = __static_extents<_Extents>(); + return __static_quotient<_IndexType>(__sta_exts, __nom); + } + template constexpr bool __is_representable_extents(const _Extents& __exts) noexcept @@ -660,10 +770,34 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION is_same_v, _Mapping>; + template typename _Layout, typename _Mapping> + concept __padded_mapping_of = __mapping_of< + _Layout<_Mapping::padding_value>, _Mapping>; + +#ifdef __glibcxx_padded_layouts + template + constexpr bool __is_left_padded_mapping = __padded_mapping_of< + layout_left_padded, _Mapping>; + + template + constexpr bool __is_right_padded_mapping = __padded_mapping_of< + layout_right_padded, _Mapping>; +#endif + + template + consteval size_t + __get_static_stride() + { return _PaddedMapping::_PaddedStorage::_S_static_stride; } + template concept __standardized_mapping = __mapping_of || __mapping_of - || __mapping_of; + || __mapping_of +#ifdef __glibcxx_padded_layouts + || __is_left_padded_mapping<_Mapping> + || __is_right_padded_mapping<_Mapping> +#endif + ; // A tag type to create internal ctors. class __internal_ctor @@ -717,6 +851,32 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION : mapping(__other.extents(), __mdspan::__internal_ctor{}) { __glibcxx_assert(*this == __other); } +#if __glibcxx_padded_layouts + template + requires __mdspan::__is_left_padded_mapping<_LeftpadMapping> + && is_constructible_v + constexpr + explicit(!is_convertible_v) + mapping(const _LeftpadMapping& __other) noexcept + : mapping(__other.extents(), __mdspan::__internal_ctor{}) + { + constexpr size_t __ostride_sta + = __mdspan::__get_static_stride<_LeftpadMapping>(); + + if constexpr (extents_type::rank() > 1) + { + if constexpr (extents_type::static_extent(0) != dynamic_extent + && __ostride_sta != dynamic_extent) + static_assert(extents_type::static_extent(0) == __ostride_sta); + else + __glibcxx_assert(__other.stride(1) + == __other.extents().extent(0)); + } + } +#endif // __glibcxx_padded_layouts + constexpr mapping& operator=(const mapping&) noexcept = default; @@ -858,6 +1018,34 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION : mapping(__other.extents(), __mdspan::__internal_ctor{}) { __glibcxx_assert(*this == __other); } +#if __glibcxx_padded_layouts + template + requires __mdspan::__is_right_padded_mapping<_RightPaddedMapping> + && is_constructible_v + constexpr + explicit(!is_convertible_v) + mapping(const _RightPaddedMapping& __other) noexcept + : mapping(__other.extents(), __mdspan::__internal_ctor{}) + { + constexpr size_t __rank = extents_type::rank(); + constexpr size_t __ostride_sta + = __mdspan::__get_static_stride<_RightPaddedMapping>(); + + if constexpr (__rank > 1) + { + if constexpr (extents_type::static_extent(__rank - 1) != dynamic_extent + && __ostride_sta != dynamic_extent) + static_assert(extents_type::static_extent(__rank - 1) + == __ostride_sta); + else + __glibcxx_assert(__other.stride(__rank - 2) + == __other.extents().extent(__rank - 1)); + } + } +#endif + constexpr mapping& operator=(const mapping&) noexcept = default; @@ -1158,12 +1346,780 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION } private: - using _S_strides_t = typename __array_traits::_Type; + using _Strides = typename __array_traits::_Type; [[no_unique_address]] extents_type _M_extents; - [[no_unique_address]] _S_strides_t _M_strides; + [[no_unique_address]] _Strides _M_strides; }; +#ifdef __glibcxx_padded_layouts + namespace __mdspan + { + constexpr size_t + __least_multiple(size_t __x, size_t __y) + { + if (__x <= 1) + return __y; + return (__y / __x + (__y % __x != 0)) * __x ; + } + + template + constexpr bool + __is_representable_least_multiple(size_t __x, size_t __y) + { + constexpr auto __y_max = __gnu_cxx::__int_traits<_IndexType>::__max; + if(std::cmp_greater(__y, __y_max)) + return false; + + if(__x <= 1) + return true; + + auto __max_delta = __y_max - static_cast<_IndexType>(__y); + auto __y_mod_x = __y % __x; + auto __delta = (__y_mod_x == 0) ? size_t(0) : (__x - __y_mod_x); + return std::cmp_less_equal(__delta, __max_delta); + } + + template + concept __valid_static_stride = (_Extents::rank() <= 1) + || (_PaddingValue == dynamic_extent) + || (_Extents::static_extent(_LayoutTraits::_S_ext_idx) == dynamic_extent) + || (__is_representable_least_multiple( + _PaddingValue, _Extents::static_extent(_LayoutTraits::_S_ext_idx))); + + template + consteval bool + __is_representable_padded_size() + { + using _IndexType = typename _Extents::index_type; + auto __sta_exts = __static_extents<_Extents>( + _LayoutTraits::_S_unpad_begin, _LayoutTraits::_S_unpad_end); + size_t __max = __gnu_cxx::__int_traits<_IndexType>::__max; + return __static_quotient(__sta_exts, __max / _PaddedStride) != 0; + } + + template + concept __valid_padded_size = (_Rank <= 1) + || (_PaddedStride == dynamic_extent) + || (!__all_static(__static_extents<_Extents>())) + || (__contains_zero(__static_extents<_Extents>())) + || (__is_representable_padded_size<_PaddedStride, _Extents, + _LayoutTraits>()); + + template + constexpr typename _Extents::index_type + __linear_index_leftpad(const _Extents& __exts, _Stride __stride, + _Indices... __indices) + { + // i0 + stride*(i1 + extents.extent(1)*...) + using _IndexType = typename _Extents::index_type; + _IndexType __res = 0; + if constexpr (sizeof...(__indices) > 0) + { + _IndexType __mult = 1; + + auto __update_rest = [&, __pos = 1u](_IndexType __idx) mutable + { + __res += __idx * __mult; + __mult *= __exts.extent(__pos); + ++__pos; + }; + + auto __update = [&](_IndexType __idx, auto... __rest) + { + __res += __idx; + __mult = __stride.extent(0); + (__update_rest(__rest), ...); + }; + __update(__indices...); + } + return __res; + } + + template + constexpr typename _Extents::index_type + __linear_index_rightpad(const _Extents& __exts, _Stride __stride, + _Indices... __indices) + { + // i[n-1] + stride*(i[n-2] + extents.extent(n-2])*...) + using _IndexType = typename _Extents::index_type; + _IndexType __res = 0; + if constexpr (sizeof...(__indices) > 0) + { + _IndexType __mult = 1; + array<_IndexType, sizeof...(__indices)> __ind_arr{__indices...}; + + auto __update_rest = [&, __pos = __exts.rank()-1](_IndexType) mutable + { + --__pos; + __res += __ind_arr[__pos] * __mult; + __mult *= __exts.extent(__pos); + }; + + auto __update = [&](_IndexType, auto... __rest) + { + __res += __ind_arr[__exts.rank() - 1]; + __mult = __stride.extent(0); + (__update_rest(__rest), ...); + }; + __update(__indices...); + } + return __res; + } + + template + struct _LeftPaddedLayoutTraits + { + using _LayoutSame = layout_left; + using _LayoutOther = layout_right; + + constexpr static const size_t _S_ext_idx = 0; + constexpr static const size_t _S_stride_idx = 1; + constexpr static const size_t _S_unpad_begin = 1; + constexpr static const size_t _S_unpad_end = _Rank; + + template + constexpr static auto + _S_make_padded_extent( + extents<_IndexType, _StaticStride> __stride, + const extents<_IndexType, _Extents...>& __exts) + { + auto __impl = [&](integer_sequence) + { + return extents<_IndexType, _StaticStride, + (_Extents...[_Is + 1])...>{ + __stride.extent(0), __exts.extent(_Is + 1)...}; + }; + return __impl(make_index_sequence()); + } + }; + + template + struct _RightPaddedLayoutTraits + { + using _LayoutSame = layout_right; + using _LayoutOther = layout_left; + + constexpr static size_t _S_ext_idx = _Rank - 1; + constexpr static size_t _S_stride_idx = _Rank - 2; + constexpr static size_t _S_unpad_begin = 0; + constexpr static size_t _S_unpad_end = _Rank - 1; + + template + constexpr static auto + _S_make_padded_extent( + extents<_IndexType, _StaticStride> __stride, + const extents<_IndexType, _Extents...>& __exts) + { + auto __impl = [&](integer_sequence) + { + return extents<_IndexType, (_Extents...[_Is])..., _StaticStride>{ + __exts.extent(_Is)..., __stride.extent(0)}; + }; + return __impl(make_index_sequence()); + } + }; + + template + class _PaddedStorage + { + using _LayoutSame = typename _LayoutTraits::_LayoutSame; + + public: + using _IndexType = typename _Extents::index_type; + constexpr static size_t _S_rank = _Extents::rank(); + + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 4372. Weaken Mandates: for dynamic padding values in padded layouts + static_assert((_PaddingValue == dynamic_extent) + || (cmp_less_equal(_PaddingValue, + __gnu_cxx::__int_traits<_IndexType>::__max)), + "padding_value must be representable as index_type"); + + static_assert(__representable_size<_Extents, _IndexType>, + "The size of extents_type must be representable as index_type"); + + static_assert(__valid_static_stride<_Extents, _PaddingValue, + _LayoutTraits>, + "The padded stride must be representable as size_t"); + + static constexpr size_t _S_static_stride = [] consteval + { + constexpr size_t __rank = _Extents::rank(); + if constexpr (__rank <= 1) + return 0; + else + { + constexpr size_t __ext_idx = _LayoutTraits::_S_ext_idx; + constexpr size_t __sta_ext = _Extents::static_extent(__ext_idx); + if constexpr (__sta_ext == 0) + return size_t(0); + else if constexpr (_PaddingValue == dynamic_extent + || __sta_ext == dynamic_extent) + return dynamic_extent; + else + return __least_multiple(_PaddingValue, __sta_ext); + } + }(); + + static_assert(_S_static_stride == dynamic_extent + || cmp_less_equal(_S_static_stride, + __gnu_cxx::__int_traits<_IndexType>::__max), + "Padded stride must be representable as index_type"); + + static_assert(__valid_padded_size<_Extents, _S_static_stride, + _LayoutTraits>); + + constexpr + _PaddedStorage() noexcept + { + if constexpr (_S_rank > 1) + if constexpr (_S_static_stride == dynamic_extent + && _S_static_padextent() != dynamic_extent) + _M_stride = _Stride{_S_static_padextent()}; + } + + constexpr explicit + _PaddedStorage(const _Extents& __exts) + : _M_extents(__exts) + { + if constexpr (!__all_static(__static_extents<_Extents>())) + __glibcxx_assert(__is_representable_extents(_M_extents)); + + if constexpr (_S_rank > 1) + { + _IndexType __stride; + if constexpr (_PaddingValue == dynamic_extent) + __stride = _M_padextent(); + else if constexpr (_S_static_padextent() != dynamic_extent) + return; + else + { + __glibcxx_assert( + __is_representable_least_multiple<_IndexType>( + _PaddingValue, _M_padextent())); + + __stride = static_cast<_IndexType>( + __least_multiple(_PaddingValue, _M_padextent())); + + __glibcxx_assert(__is_representable_extents( + _LayoutTraits::_S_make_padded_extent( + std::dextents<_IndexType, 1>{__stride}, + _M_extents))); + } + _M_stride = _Stride{__stride}; + } + } + + constexpr explicit + _PaddedStorage(const _Extents& __exts, _IndexType __pad) + : _M_extents(__exts) + { + if constexpr (_PaddingValue != dynamic_extent) + __glibcxx_assert(cmp_equal(_PaddingValue, __pad)); + if constexpr (_S_rank > 1 && _S_static_stride == dynamic_extent) + { + __glibcxx_assert( + __is_representable_least_multiple<_IndexType>( + __pad, _M_padextent())); + + _M_stride = _Stride{static_cast<_IndexType>( + __least_multiple(__pad, _M_padextent()))}; + + __glibcxx_assert(__is_representable_extents( + _LayoutTraits::_S_make_padded_extent( + _M_stride, _M_extents))); + } + } + + template + constexpr explicit + _PaddedStorage(const typename _LayoutSame::mapping<_OExtents>& + __other) + : _PaddedStorage(_Extents(__other.extents())) + { + constexpr size_t __stride_idx = _LayoutTraits::_S_stride_idx; + constexpr size_t __ext_idx = _LayoutTraits::_S_ext_idx; + if constexpr (_S_rank > 1 && _PaddingValue != dynamic_extent) + { + static_assert(_S_static_stride == dynamic_extent + || _OExtents::static_extent(__ext_idx) == dynamic_extent + || _S_static_stride == _OExtents::static_extent(__ext_idx), + "The padded stride must be compatible with other"); + + if constexpr (_S_static_stride == dynamic_extent + || _OExtents::static_extent(__stride_idx) == dynamic_extent) + __glibcxx_assert(std::cmp_equal(_M_padstride(), + _M_padextent())); + } + } + + template + constexpr explicit + _PaddedStorage(const typename layout_stride::mapping<_OExtents>& + __other) + : _M_extents(__other.extents()) + { + __glibcxx_assert(cmp_less_equal(__other.required_span_size(), + __gnu_cxx::__int_traits<_IndexType> + ::__max)); + + constexpr size_t __stride_idx = _LayoutTraits::_S_stride_idx; + if constexpr (_S_rank > 1) + { + if constexpr (_PaddingValue != dynamic_extent) + __glibcxx_assert(cmp_equal(__other.stride(__stride_idx), + _M_calc_padstride()) + && "The padded stride must be compatible with other"); + if constexpr (_S_static_stride == dynamic_extent) + _M_stride = _Stride{__other.stride(__stride_idx)}; + } + } + + template + constexpr explicit + _PaddedStorage(_LayoutTraits::_LayoutSame, + const _SamePaddedMapping& __other) + : _M_extents(__other.extents()) + { + if constexpr (_S_rank > 1) + { + static_assert(_PaddingValue == dynamic_extent + || _SamePaddedMapping::padding_value == dynamic_extent + || _PaddingValue == _SamePaddedMapping::padding_value, + "If neither PaddingValue is dynamic_extent, then they must " + "be equal"); + + constexpr size_t __stride_idx = _LayoutTraits::_S_stride_idx; + if constexpr (_PaddingValue != dynamic_extent) + __glibcxx_assert(cmp_equal(__other.stride(__stride_idx), + _M_calc_padstride()) + && "The padded stride must be compatible with other"); + if constexpr (_S_static_stride == dynamic_extent) + _M_stride = _Stride{__other.stride(__stride_idx)}; + } + __glibcxx_assert(cmp_less_equal(__other.required_span_size(), + __gnu_cxx::__int_traits<_IndexType>::__max)); + } + + template + constexpr explicit + _PaddedStorage(_LayoutTraits::_LayoutOther, + const _OtherPaddedMapping& __other) noexcept + : _M_extents(__other.extents()) + { + __glibcxx_assert(cmp_less_equal(__other.required_span_size(), + __gnu_cxx::__int_traits<_IndexType>::__max)); + } + + static constexpr bool + _M_is_always_exhaustive() noexcept + { + if constexpr (_S_rank <= 1) + return true; + else + return _S_static_padextent() != dynamic_extent + && _S_static_stride != dynamic_extent + && _S_static_padextent() == _S_static_stride; + } + + constexpr bool + _M_is_exhaustive() const noexcept + { + if constexpr (_M_is_always_exhaustive()) + return true; + else + return cmp_equal(_M_padextent(), _M_padstride()); + } + + constexpr static size_t + _S_static_padextent() noexcept + { return _Extents::static_extent(_LayoutTraits::_S_ext_idx); } + + constexpr _IndexType + _M_padextent() const noexcept + { return _M_extents.extent(_LayoutTraits::_S_ext_idx); } + + constexpr _IndexType + _M_calc_padstride() const noexcept + { + if constexpr (_S_static_stride != dynamic_extent) + return _S_static_stride; + else if constexpr (_PaddingValue != dynamic_extent) + return __least_multiple(_PaddingValue, _M_padextent()); + else + return _M_padextent(); + } + + constexpr _IndexType + _M_padstride() const noexcept + { return _M_stride.extent(0); } + + constexpr _IndexType + _M_required_span_size() const noexcept + { + if constexpr (_S_rank == 0) + return 1; + else if (__mdspan::__empty(_M_extents)) + return 0; + else + { + size_t __stride = static_cast(_M_padstride()); + size_t __prod_rest = __mdspan::__fwd_prod(_M_extents, + _LayoutTraits::_S_unpad_begin, _LayoutTraits::_S_unpad_end); + size_t __delta = _M_padstride() - _M_padextent(); + return static_cast<_IndexType>(__stride * __prod_rest - __delta); + } + } + + template + constexpr bool + _M_equal(const _SamePaddedMapping& __other) const noexcept + { + return _M_extents == __other.extents() + && (_S_rank < 2 + || cmp_equal(_M_stride.extent(0), + __other.stride(_LayoutTraits::_S_stride_idx))); + } + + using _Stride = std::extents<_IndexType, _S_static_stride>; + [[no_unique_address]] _Stride _M_stride; + [[no_unique_address]] _Extents _M_extents; + }; + } + + template + template + class layout_left_padded<_PaddingValue>::mapping + { + public: + static constexpr size_t padding_value = _PaddingValue; + + using extents_type = _Extents; + using index_type = typename extents_type::index_type; + using size_type = typename extents_type::size_type; + using rank_type = typename extents_type::rank_type; + using layout_type = layout_left_padded; + + private: + static constexpr size_t _S_rank = extents_type::rank(); + using _PaddedStorage = __mdspan::_PaddedStorage<_PaddingValue, + _Extents, __mdspan::_LeftPaddedLayoutTraits<_S_rank>>; + [[no_unique_address]] _PaddedStorage _M_storage; + + consteval friend size_t + __mdspan::__get_static_stride(); + + constexpr index_type + _M_extent(size_t __r) const noexcept + { return _M_storage._M_extents.extent(__r); } + + constexpr index_type + _M_padstride() const noexcept + { return _M_storage._M_stride.extent(0); } + + public: + constexpr + mapping() noexcept + { } + + constexpr + mapping(const mapping&) noexcept = default; + + constexpr + mapping(const extents_type& __exts) + : _M_storage(__exts) + { } + + template<__mdspan::__valid_index_type _OIndexType> + constexpr + mapping(const extents_type& __exts, _OIndexType __pad) + : _M_storage(__exts, + __mdspan::__index_type_cast(std::move(__pad))) + { } + + template + requires is_constructible_v + constexpr explicit(!is_convertible_v<_OExtents, extents_type>) + mapping(const layout_left::mapping<_OExtents>& __other) + : _M_storage(__other) + { } + + template + requires is_constructible_v<_OExtents, extents_type> + constexpr explicit(_OExtents::rank() > 0) + mapping(const typename layout_stride::mapping<_OExtents>& __other) + : _M_storage(__other) + { __glibcxx_assert(*this == __other); } + + template + requires __mdspan::__is_left_padded_mapping<_LeftpadMapping> + && is_constructible_v + constexpr explicit(_S_rank > 1 && (padding_value != dynamic_extent + || _LeftpadMapping::padding_value == dynamic_extent)) + mapping(const _LeftpadMapping& __other) + : _M_storage(layout_left{}, __other) + { } + + template + requires (__mdspan::__is_right_padded_mapping<_RightPaddedMapping> + || __mdspan::__mapping_of) + && (_S_rank <= 1) + && is_constructible_v + constexpr explicit(!is_convertible_v< + typename _RightPaddedMapping::extents_type, extents_type>) + mapping(const _RightPaddedMapping& __other) noexcept + : _M_storage(layout_right{}, __other) + { } + + constexpr mapping& + operator=(const mapping&) noexcept = default; + + constexpr const extents_type& + extents() const noexcept { return _M_storage._M_extents; } + + constexpr array + strides() const noexcept + { + array __ret; + if constexpr (_S_rank > 0) + __ret[0] = 1; + if constexpr (_S_rank > 1) + __ret[1] = _M_padstride(); + if constexpr (_S_rank > 2) + for(size_t __i = 2; __i < _S_rank; ++__i) + __ret[__i] = __ret[__i - 1] * _M_extent(__i - 1); + return __ret; + } + + constexpr index_type + required_span_size() const noexcept + { return _M_storage._M_required_span_size(); } + + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 4314. Missing move in mdspan layout mapping::operator() + template<__mdspan::__valid_index_type... _Indices> + requires (sizeof...(_Indices) == _S_rank) + constexpr index_type + operator()(_Indices... __indices) const noexcept + { + return __mdspan::__linear_index_leftpad( + extents(), _M_storage._M_stride, + static_cast(std::move(__indices))...); + } + + static constexpr bool + is_always_exhaustive() noexcept + { return _PaddedStorage::_M_is_always_exhaustive(); } + + constexpr bool + is_exhaustive() noexcept + { return _M_storage._M_is_exhaustive(); } + + static constexpr bool + is_always_unique() noexcept { return true; } + + static constexpr bool + is_unique() noexcept { return true; } + + static constexpr bool + is_always_strided() noexcept { return true; } + + static constexpr bool + is_strided() noexcept { return true; } + + constexpr index_type + stride(rank_type __r) const noexcept + { + __glibcxx_assert(__r < _S_rank); + if (__r == 0) + return 1; + else + return static_cast( + static_cast(_M_padstride()) * + static_cast(__mdspan::__fwd_prod(extents(), 1, __r))); + } + + template + requires(__mdspan::__is_left_padded_mapping<_LeftpadMapping> + && _LeftpadMapping::extents_type::rank() == _S_rank) + friend constexpr bool + operator==(const mapping& __self, const _LeftpadMapping& __other) + noexcept + { return __self._M_storage._M_equal(__other); } + }; + + template + template + class layout_right_padded<_PaddingValue>::mapping { + public: + static constexpr size_t padding_value = _PaddingValue; + using extents_type = _Extents; + using index_type = typename extents_type::index_type; + using size_type = typename extents_type::size_type; + using rank_type = typename extents_type::rank_type; + using layout_type = layout_right_padded<_PaddingValue>; + + private: + static constexpr size_t _S_rank = extents_type::rank(); + using _PaddedStorage = __mdspan::_PaddedStorage<_PaddingValue, + _Extents, __mdspan::_RightPaddedLayoutTraits<_S_rank>>; + [[no_unique_address]] _PaddedStorage _M_storage; + + consteval friend size_t + __mdspan::__get_static_stride(); + + constexpr index_type + _M_extent(size_t __r) const noexcept + { return _M_storage._M_extents.extent(__r); } + + constexpr index_type + _M_padstride() const noexcept + { return _M_storage._M_stride.extent(0); } + + public: + constexpr + mapping() noexcept + { } + + constexpr + mapping(const mapping&) noexcept = default; + + constexpr + mapping(const extents_type& __exts) + : _M_storage(__exts) + { } + + template<__mdspan::__valid_index_type _OIndexType> + constexpr + mapping(const extents_type& __exts, _OIndexType __pad) + : _M_storage(__exts, + __mdspan::__index_type_cast(std::move(__pad))) + { } + + template + requires is_constructible_v + constexpr explicit(!is_convertible_v<_OExtents, extents_type>) + mapping(const layout_right::mapping<_OExtents>& __other) + : _M_storage(__other) + { } + + template + requires is_constructible_v<_OExtents, extents_type> + constexpr explicit(_OExtents::rank() > 0) + mapping(const typename layout_stride::mapping<_OExtents>& __other) + : _M_storage(__other) + { __glibcxx_assert(*this == __other); } + + template + requires __mdspan::__is_right_padded_mapping<_RightPaddedMapping> + && is_constructible_v + constexpr explicit(_S_rank > 1 && (padding_value != dynamic_extent + || _RightPaddedMapping::padding_value == dynamic_extent)) + mapping(const _RightPaddedMapping& __other) + : _M_storage(layout_right{}, __other) + { } + + template + requires (__mdspan::__is_left_padded_mapping<_LeftPaddedMapping> + || __mdspan::__mapping_of) + && (_S_rank <= 1) + && is_constructible_v + constexpr explicit(!is_convertible_v< + typename _LeftPaddedMapping::extents_type, extents_type>) + mapping(const _LeftPaddedMapping& __other) noexcept + : _M_storage(layout_left{}, __other) + { } + + constexpr mapping& operator=(const mapping&) noexcept = default; + + constexpr const extents_type& + extents() const noexcept { return _M_storage._M_extents; } + + constexpr array + strides() const noexcept + { + array __ret; + if constexpr (_S_rank > 0) + __ret[_S_rank - 1] = 1; + if constexpr (_S_rank > 1) + __ret[_S_rank - 2] = _M_padstride(); + if constexpr (_S_rank > 2) + for(size_t __i = _S_rank - 2; __i > 0; --__i) + __ret[__i - 1] = __ret[__i] * _M_extent(__i); + return __ret; + } + + constexpr index_type + required_span_size() const noexcept + { return _M_storage._M_required_span_size(); } + + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 4314. Missing move in mdspan layout mapping::operator() + template<__mdspan::__valid_index_type... _Indices> + requires (sizeof...(_Indices) == _S_rank) + constexpr index_type + operator()(_Indices... __indices) const noexcept + { + return __mdspan::__linear_index_rightpad( + extents(), _M_storage._M_stride, + static_cast(std::move(__indices))...); + } + + static constexpr bool + is_always_exhaustive() noexcept + { return _PaddedStorage::_M_is_always_exhaustive(); } + + constexpr bool + is_exhaustive() noexcept + { return _M_storage._M_is_exhaustive(); } + + static constexpr bool + is_always_unique() noexcept { return true; } + + static constexpr bool + is_unique() noexcept { return true; } + + static constexpr bool + is_always_strided() noexcept { return true; } + + static constexpr bool + is_strided() noexcept { return true; } + + constexpr index_type + stride(rank_type __r) const noexcept + { + __glibcxx_assert(__r < _S_rank); + if constexpr (_S_rank <= 1) + return 1; + else if (__r == _S_rank - 1) + return 1; + else if (__r == _S_rank - 2) + return _M_padstride(); + else + return static_cast( + static_cast(_M_padstride()) * + static_cast(__mdspan::__fwd_prod( + extents(), __r + 1, _S_rank - 1))); + } + + template + requires(__mdspan::__is_right_padded_mapping<_RightPaddedMapping> + && _RightPaddedMapping::extents_type::rank() == _S_rank) + friend constexpr bool + operator==(const mapping& __self, const _RightPaddedMapping& __other) + noexcept + { return __self._M_storage._M_equal(__other); } + }; +#endif // __glibcxx_padded_layouts + template struct default_accessor { @@ -1361,7 +2317,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION mdspan(data_handle_type __handle, const mapping_type& __mapping, const accessor_type& __accessor) : _M_accessor(__accessor), _M_mapping(__mapping), - _M_handle(std::move(__handle)) + _M_handle(std::move(__handle)) { } template #else +#define __glibcxx_want_philox_engine +#include + #include #include // For uint_fast32_t, uint_fast64_t, uint_least32_t #include diff --git a/libstdc++-v3/include/std/ranges b/libstdc++-v3/include/std/ranges index f493da56203b..fd290ea362cc 100644 --- a/libstdc++-v3/include/std/ranges +++ b/libstdc++-v3/include/std/ranges @@ -5383,7 +5383,7 @@ namespace views::__adaptor { // Yields tuple<_Tp, ..., _Tp> with _Nm elements. template - using __repeated_tuple = decltype(std::tuple_cat(std::declval>())); + using __repeated_tuple = typename __make_tuple>::__type; // For a functor F that is callable with N arguments, the expression // declval<__unarize>(x) is equivalent to declval(x, ..., x). @@ -5460,9 +5460,7 @@ namespace views::__adaptor public: using iterator_category = input_iterator_tag; using iterator_concept = decltype(_S_iter_concept()); - using value_type = conditional_t<_Nm == 2, - pair, range_value_t<_Base>>, - __detail::__repeated_tuple, _Nm>>; + using value_type = __detail::__repeated_tuple, _Nm>; using difference_type = range_difference_t<_Base>; _Iterator() = default; diff --git a/libstdc++-v3/include/std/span b/libstdc++-v3/include/std/span index f9aa3c77e8e1..580891135657 100644 --- a/libstdc++-v3/include/std/span +++ b/libstdc++-v3/include/std/span @@ -479,10 +479,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION // deduction guides namespace __detail { + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 4351. integral-constant-like needs more remove_cvref_t template concept __integral_constant_like = is_integral_v> - && !is_same_v> + && !is_same_v> && convertible_to<_Tp, decltype(_Tp::value)> && equality_comparable_with<_Tp, decltype(_Tp::value)> && bool_constant<_Tp() == _Tp::value>::value diff --git a/libstdc++-v3/include/std/spanstream b/libstdc++-v3/include/std/spanstream index 23a340a746e8..fbb40ff1db26 100644 --- a/libstdc++-v3/include/std/spanstream +++ b/libstdc++-v3/include/std/spanstream @@ -152,7 +152,7 @@ template if (__way == ios_base::beg) { - if (0 <= __off && __off <= _M_buf.size()) + if (0 <= __off && (size_t)__off <= _M_buf.size()) { if (__which & ios_base::in) this->setg(this->eback(), this->eback() + __off, this->egptr()); @@ -188,7 +188,7 @@ template if (__builtin_add_overflow(__base, __off, &__off)) [[unlikely]] return __ret; - if (__off < 0 || __off > _M_buf.size()) [[unlikely]] + if (__off < 0 || (size_t)__off > _M_buf.size()) [[unlikely]] return __ret; if (__which & ios_base::in) diff --git a/libstdc++-v3/include/std/string b/libstdc++-v3/include/std/string index 71864715ff75..97ded057a87b 100644 --- a/libstdc++-v3/include/std/string +++ b/libstdc++-v3/include/std/string @@ -51,7 +51,6 @@ #include // For less #include #include -#include #include #include #include @@ -96,33 +95,24 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION template - _GLIBCXX20_CONSTEXPR - inline typename basic_string<_CharT, _Traits, _Alloc>::size_type + constexpr typename basic_string<_CharT, _Traits, _Alloc>::size_type erase_if(basic_string<_CharT, _Traits, _Alloc>& __cont, _Predicate __pred) { using namespace __gnu_cxx; const auto __osz = __cont.size(); const auto __end = __cont.end(); auto __removed = std::__remove_if(__cont.begin(), __end, - __ops::__pred_iter(std::ref(__pred))); + std::move(__pred)); __cont.erase(__removed, __end); return __osz - __cont.size(); } template - _GLIBCXX20_CONSTEXPR - inline typename basic_string<_CharT, _Traits, _Alloc>::size_type + constexpr typename basic_string<_CharT, _Traits, _Alloc>::size_type erase(basic_string<_CharT, _Traits, _Alloc>& __cont, const _Up& __value) - { - using namespace __gnu_cxx; - const auto __osz = __cont.size(); - const auto __end = __cont.end(); - auto __removed = std::__remove_if(__cont.begin(), __end, - __ops::__iter_equals_val(__value)); - __cont.erase(__removed, __end); - return __osz - __cont.size(); - } + { return std::erase_if(__cont, __gnu_cxx::__ops::__equal_to(__value)); } + _GLIBCXX_END_NAMESPACE_VERSION } // namespace std #endif // __cpp_lib_erase_if diff --git a/libstdc++-v3/include/std/syncstream b/libstdc++-v3/include/std/syncstream index 92fbbdc760e7..1e1759714c69 100644 --- a/libstdc++-v3/include/std/syncstream +++ b/libstdc++-v3/include/std/syncstream @@ -201,7 +201,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION mutex* _M_mtx = nullptr; __mutex(void* __t) // __t is the underlying sbuf, as hash seed. - { + { extern mutex& __syncbuf_get_mutex(void*); // in src/c++20/syncbuf.cc if (__t) _M_mtx = &__syncbuf_get_mutex(__t); } diff --git a/libstdc++-v3/include/std/tuple b/libstdc++-v3/include/std/tuple index 2e6499eab22d..0ca616f1b4fb 100644 --- a/libstdc++-v3/include/std/tuple +++ b/libstdc++-v3/include/std/tuple @@ -2681,54 +2681,53 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { return tuple<_Elements&&...>(std::forward<_Elements>(__args)...); } /// @cond undocumented - template - struct __make_tuple_impl; - - template - struct __make_tuple_impl<_Idx, tuple<_Tp...>, _Tuple, _Nm> - : __make_tuple_impl<_Idx + 1, - tuple<_Tp..., __tuple_element_t<_Idx, _Tuple>>, - _Tuple, _Nm> - { }; + template + struct __do_make_tuple; - template - struct __make_tuple_impl<_Nm, tuple<_Tp...>, _Tuple, _Nm> + template + struct __do_make_tuple<_Tuple, _Index_tuple<_Idx...>> { - typedef tuple<_Tp...> __type; + using __type = tuple<__tuple_element_t<_Idx, _Tuple>...>; }; - template - struct __do_make_tuple - : __make_tuple_impl<0, tuple<>, _Tuple, tuple_size<_Tuple>::value> - { }; - // Returns the std::tuple equivalent of a tuple-like type. - template + template, + typename _Indices = _Build_index_tuple::value>> struct __make_tuple - : public __do_make_tuple<__remove_cvref_t<_Tuple>> + : __do_make_tuple<_Tup, typename _Indices::__type> { }; - // Combines several std::tuple's into a single one. + // Combines several std::tuple types into a single one. template struct __combine_tuples; template<> struct __combine_tuples<> { - typedef tuple<> __type; + using __type = tuple<>; }; template struct __combine_tuples> { - typedef tuple<_Ts...> __type; + using __type = tuple<_Ts...>; + }; + + template + struct __combine_tuples, tuple<_T2s...>> + { + using __type = tuple<_T1s..., _T2s...>; }; - template - struct __combine_tuples, tuple<_T2s...>, _Rem...> + template + struct __combine_tuples, tuple<_T2s...>, tuple<_T3s...>, + _Rem...> { - typedef typename __combine_tuples, - _Rem...>::__type __type; + using _First = tuple<_T1s..., _T2s..., _T3s...>; + using _Second = typename __combine_tuples<_Rem...>::__type; + using __type = typename __combine_tuples<_First, _Second>::__type; }; // Computes the result type of tuple_cat given a set of tuple-like types. diff --git a/libstdc++-v3/include/std/type_traits b/libstdc++-v3/include/std/type_traits index 26cbbb4fd5ba..77ebb7e2c2f9 100644 --- a/libstdc++-v3/include/std/type_traits +++ b/libstdc++-v3/include/std/type_traits @@ -4307,19 +4307,19 @@ template template struct _CwFixedValue { - using _S_type = _Tp; + using __type = _Tp; constexpr - _CwFixedValue(_S_type __v) noexcept + _CwFixedValue(__type __v) noexcept : _M_data(__v) { } - _S_type _M_data; + __type _M_data; }; template struct _CwFixedValue<_Tp[_Extent]> { - using _S_type = _Tp[_Extent]; + using __type = _Tp[_Extent]; constexpr _CwFixedValue(_Tp (&__arr)[_Extent]) noexcept @@ -4338,8 +4338,8 @@ template template _CwFixedValue(_Tp (&)[_Extent]) -> _CwFixedValue<_Tp[_Extent]>; - template<_CwFixedValue _Tp, - typename = typename decltype(_CwFixedValue(_Tp))::_S_type> + template<_CwFixedValue _Xv, + typename = typename decltype(_CwFixedValue(_Xv))::__type> struct constant_wrapper; template @@ -4648,12 +4648,12 @@ template } }; - template<_CwFixedValue _X, typename> + template<_CwFixedValue _Xv, typename> struct constant_wrapper : _CwOperators { - static constexpr const auto& value = _X._M_data; + static constexpr const auto& value = _Xv._M_data; using type = constant_wrapper; - using value_type = typename decltype(_X)::_S_type; + using value_type = typename decltype(_Xv)::__type; template<_ConstExprParam _Right> constexpr auto diff --git a/libstdc++-v3/include/std/vector b/libstdc++-v3/include/std/vector index a98ffb179ec0..3146f283944a 100644 --- a/libstdc++-v3/include/std/vector +++ b/libstdc++-v3/include/std/vector @@ -67,7 +67,6 @@ #include #include #include -#include #include #ifndef _GLIBCXX_EXPORT_TEMPLATE @@ -113,8 +112,7 @@ namespace std _GLIBCXX_VISIBILITY(default) _GLIBCXX_BEGIN_NAMESPACE_VERSION template - _GLIBCXX20_CONSTEXPR - inline typename vector<_Tp, _Alloc>::size_type + constexpr typename vector<_Tp, _Alloc>::size_type erase_if(vector<_Tp, _Alloc>& __cont, _Predicate __pred) { using namespace __gnu_cxx; @@ -122,7 +120,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION const auto __osz = __cont.size(); const auto __end = __ucont.end(); auto __removed = std::__remove_if(__ucont.begin(), __end, - __ops::__pred_iter(std::ref(__pred))); + std::move(__pred)); if (__removed != __end) { __cont.erase(__niter_wrap(__cont.begin(), __removed), @@ -135,25 +133,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION template - _GLIBCXX20_CONSTEXPR - inline typename vector<_Tp, _Alloc>::size_type + constexpr typename vector<_Tp, _Alloc>::size_type erase(vector<_Tp, _Alloc>& __cont, const _Up& __value) - { - using namespace __gnu_cxx; - _GLIBCXX_STD_C::vector<_Tp, _Alloc>& __ucont = __cont; - const auto __osz = __cont.size(); - const auto __end = __ucont.end(); - auto __removed = std::__remove_if(__ucont.begin(), __end, - __ops::__iter_equals_val(__value)); - if (__removed != __end) - { - __cont.erase(__niter_wrap(__cont.begin(), __removed), - __cont.end()); - return __osz - __cont.size(); - } + { return std::erase_if(__cont, __gnu_cxx::__ops::__equal_to(__value)); } - return 0; - } _GLIBCXX_END_NAMESPACE_VERSION } // namespace std #endif // __cpp_lib_erase_if diff --git a/libstdc++-v3/libsupc++/Makefile.am b/libstdc++-v3/libsupc++/Makefile.am index 60e7d1594e6d..098d93719ce6 100644 --- a/libstdc++-v3/libsupc++/Makefile.am +++ b/libstdc++-v3/libsupc++/Makefile.am @@ -132,6 +132,11 @@ atomicity_file = ${glibcxx_srcdir}/$(ATOMICITY_SRCDIR)/atomicity.h atomicity.cc: ${atomicity_file} $(LN_S) ${atomicity_file} ./atomicity.cc || true +atomicity.lo: atomicity.cc + $(LTCOMPILE) -fwrapv -c $< +atomicity.o: atomicity.cc + $(CXXCOMPILE) -fwrapv -c $< + if OS_IS_DARWIN # See PR 112397 new_opvnt.lo: new_opvnt.cc diff --git a/libstdc++-v3/libsupc++/Makefile.in b/libstdc++-v3/libsupc++/Makefile.in index 732ab89c8a2e..db5e83803d52 100644 --- a/libstdc++-v3/libsupc++/Makefile.in +++ b/libstdc++-v3/libsupc++/Makefile.in @@ -93,8 +93,10 @@ target_triplet = @target@ subdir = libsupc++ ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/enable.m4 \ $(top_srcdir)/../config/futex.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/hwcaps.m4 \ $(top_srcdir)/../config/iconv.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ @@ -331,6 +333,7 @@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LONG_DOUBLE_128_FLAGS = @LONG_DOUBLE_128_FLAGS@ LONG_DOUBLE_ALT128_COMPAT_FLAGS = @LONG_DOUBLE_ALT128_COMPAT_FLAGS@ @@ -973,6 +976,11 @@ cp-demangle.o: cp-demangle.c atomicity.cc: ${atomicity_file} $(LN_S) ${atomicity_file} ./atomicity.cc || true +atomicity.lo: atomicity.cc + $(LTCOMPILE) -fwrapv -c $< +atomicity.o: atomicity.cc + $(CXXCOMPILE) -fwrapv -c $< + # See PR 112397 @OS_IS_DARWIN_TRUE@new_opvnt.lo: new_opvnt.cc @OS_IS_DARWIN_TRUE@ $(LTCXXCOMPILE) -fno-reorder-blocks-and-partition -I. -c $< diff --git a/libstdc++-v3/po/Makefile.in b/libstdc++-v3/po/Makefile.in index 8e93445acd20..54d8eff693b1 100644 --- a/libstdc++-v3/po/Makefile.in +++ b/libstdc++-v3/po/Makefile.in @@ -91,8 +91,10 @@ target_triplet = @target@ subdir = po ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/enable.m4 \ $(top_srcdir)/../config/futex.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/hwcaps.m4 \ $(top_srcdir)/../config/iconv.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ @@ -222,6 +224,7 @@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LONG_DOUBLE_128_FLAGS = @LONG_DOUBLE_128_FLAGS@ LONG_DOUBLE_ALT128_COMPAT_FLAGS = @LONG_DOUBLE_ALT128_COMPAT_FLAGS@ diff --git a/libstdc++-v3/python/Makefile.in b/libstdc++-v3/python/Makefile.in index c527e6cf1866..105a3a64de21 100644 --- a/libstdc++-v3/python/Makefile.in +++ b/libstdc++-v3/python/Makefile.in @@ -92,8 +92,10 @@ target_triplet = @target@ subdir = python ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/enable.m4 \ $(top_srcdir)/../config/futex.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/hwcaps.m4 \ $(top_srcdir)/../config/iconv.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ @@ -252,6 +254,7 @@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LONG_DOUBLE_128_FLAGS = @LONG_DOUBLE_128_FLAGS@ LONG_DOUBLE_ALT128_COMPAT_FLAGS = @LONG_DOUBLE_ALT128_COMPAT_FLAGS@ diff --git a/libstdc++-v3/src/Makefile.in b/libstdc++-v3/src/Makefile.in index 106b96995aa6..f0ad019a71fd 100644 --- a/libstdc++-v3/src/Makefile.in +++ b/libstdc++-v3/src/Makefile.in @@ -92,8 +92,10 @@ target_triplet = @target@ subdir = src ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/enable.m4 \ $(top_srcdir)/../config/futex.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/hwcaps.m4 \ $(top_srcdir)/../config/iconv.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ @@ -326,6 +328,7 @@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LONG_DOUBLE_128_FLAGS = @LONG_DOUBLE_128_FLAGS@ LONG_DOUBLE_ALT128_COMPAT_FLAGS = @LONG_DOUBLE_ALT128_COMPAT_FLAGS@ diff --git a/libstdc++-v3/src/c++11/Makefile.in b/libstdc++-v3/src/c++11/Makefile.in index 9d04548f1571..bd684bb4209c 100644 --- a/libstdc++-v3/src/c++11/Makefile.in +++ b/libstdc++-v3/src/c++11/Makefile.in @@ -92,8 +92,10 @@ target_triplet = @target@ subdir = src/c++11 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/enable.m4 \ $(top_srcdir)/../config/futex.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/hwcaps.m4 \ $(top_srcdir)/../config/iconv.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ @@ -295,6 +297,7 @@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LONG_DOUBLE_128_FLAGS = @LONG_DOUBLE_128_FLAGS@ LONG_DOUBLE_ALT128_COMPAT_FLAGS = @LONG_DOUBLE_ALT128_COMPAT_FLAGS@ diff --git a/libstdc++-v3/src/c++17/Makefile.in b/libstdc++-v3/src/c++17/Makefile.in index edbee94aaf91..6dff0d9491d5 100644 --- a/libstdc++-v3/src/c++17/Makefile.in +++ b/libstdc++-v3/src/c++17/Makefile.in @@ -92,8 +92,10 @@ target_triplet = @target@ subdir = src/c++17 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/enable.m4 \ $(top_srcdir)/../config/futex.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/hwcaps.m4 \ $(top_srcdir)/../config/iconv.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ @@ -269,6 +271,7 @@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LONG_DOUBLE_128_FLAGS = @LONG_DOUBLE_128_FLAGS@ LONG_DOUBLE_ALT128_COMPAT_FLAGS = @LONG_DOUBLE_ALT128_COMPAT_FLAGS@ diff --git a/libstdc++-v3/src/c++20/Makefile.in b/libstdc++-v3/src/c++20/Makefile.in index 1e005ae3c14e..f481ad08edbe 100644 --- a/libstdc++-v3/src/c++20/Makefile.in +++ b/libstdc++-v3/src/c++20/Makefile.in @@ -92,8 +92,10 @@ target_triplet = @target@ subdir = src/c++20 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/enable.m4 \ $(top_srcdir)/../config/futex.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/hwcaps.m4 \ $(top_srcdir)/../config/iconv.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ @@ -121,7 +123,7 @@ CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libc__20convenience_la_LIBADD = -am__objects_1 = tzdb.lo format.lo atomic.lo clock.lo +am__objects_1 = tzdb.lo format.lo atomic.lo clock.lo syncbuf.lo @ENABLE_EXTERN_TEMPLATE_TRUE@am__objects_2 = sstream-inst.lo @GLIBCXX_HOSTED_TRUE@am_libc__20convenience_la_OBJECTS = \ @GLIBCXX_HOSTED_TRUE@ $(am__objects_1) $(am__objects_2) @@ -264,6 +266,7 @@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LONG_DOUBLE_128_FLAGS = @LONG_DOUBLE_128_FLAGS@ LONG_DOUBLE_ALT128_COMPAT_FLAGS = @LONG_DOUBLE_ALT128_COMPAT_FLAGS@ diff --git a/libstdc++-v3/src/c++23/Makefile.in b/libstdc++-v3/src/c++23/Makefile.in index 715c14c6b815..fd9110ab8ad2 100644 --- a/libstdc++-v3/src/c++23/Makefile.in +++ b/libstdc++-v3/src/c++23/Makefile.in @@ -93,8 +93,10 @@ target_triplet = @target@ subdir = src/c++23 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/enable.m4 \ $(top_srcdir)/../config/futex.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/hwcaps.m4 \ $(top_srcdir)/../config/iconv.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ @@ -295,6 +297,7 @@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LONG_DOUBLE_128_FLAGS = @LONG_DOUBLE_128_FLAGS@ LONG_DOUBLE_ALT128_COMPAT_FLAGS = @LONG_DOUBLE_ALT128_COMPAT_FLAGS@ diff --git a/libstdc++-v3/src/c++23/std.cc.in b/libstdc++-v3/src/c++23/std.cc.in index a217a87330be..9cf5fa7dcb62 100644 --- a/libstdc++-v3/src/c++23/std.cc.in +++ b/libstdc++-v3/src/c++23/std.cc.in @@ -1869,9 +1869,15 @@ export namespace std using std::aligned_accessor; #endif using std::mdspan; - // FIXME layout_left_padded, layout_right_padded, strided_slice, - // submdspan_mapping_result, full_extent_t, full_extent, submdspan_extents, - // mdsubspan +#if __glibcxx_padded_layouts + using std::layout_left_padded; + using std::layout_right_padded; + using strided_slice; + using full_extent_t; + using full_extent; + using submdspan_mapping_result; +#endif + // FIXME submdspan_extents, mdsubspan } #endif @@ -2004,6 +2010,10 @@ export namespace std using std::owner_equal; using std::owner_hash; #endif +#if __cpp_lib_start_lifetime_as + using std::start_lifetime_as; + using std::start_lifetime_as_array; +#endif } // 20.4 diff --git a/libstdc++-v3/src/c++26/Makefile.in b/libstdc++-v3/src/c++26/Makefile.in index 1c317d6ac7c2..13c3a03b236b 100644 --- a/libstdc++-v3/src/c++26/Makefile.in +++ b/libstdc++-v3/src/c++26/Makefile.in @@ -92,8 +92,10 @@ target_triplet = @target@ subdir = src/c++26 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/enable.m4 \ $(top_srcdir)/../config/futex.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/hwcaps.m4 \ $(top_srcdir)/../config/iconv.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ @@ -264,6 +266,7 @@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LONG_DOUBLE_128_FLAGS = @LONG_DOUBLE_128_FLAGS@ LONG_DOUBLE_ALT128_COMPAT_FLAGS = @LONG_DOUBLE_ALT128_COMPAT_FLAGS@ diff --git a/libstdc++-v3/src/c++98/Makefile.in b/libstdc++-v3/src/c++98/Makefile.in index 95e909b10493..c8df597f40d5 100644 --- a/libstdc++-v3/src/c++98/Makefile.in +++ b/libstdc++-v3/src/c++98/Makefile.in @@ -92,8 +92,10 @@ target_triplet = @target@ subdir = src/c++98 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/enable.m4 \ $(top_srcdir)/../config/futex.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/hwcaps.m4 \ $(top_srcdir)/../config/iconv.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ @@ -284,6 +286,7 @@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LONG_DOUBLE_128_FLAGS = @LONG_DOUBLE_128_FLAGS@ LONG_DOUBLE_ALT128_COMPAT_FLAGS = @LONG_DOUBLE_ALT128_COMPAT_FLAGS@ diff --git a/libstdc++-v3/src/experimental/Makefile.in b/libstdc++-v3/src/experimental/Makefile.in index f7b4ee299f33..8cb0acd4e68b 100644 --- a/libstdc++-v3/src/experimental/Makefile.in +++ b/libstdc++-v3/src/experimental/Makefile.in @@ -92,8 +92,10 @@ target_triplet = @target@ subdir = src/experimental ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/enable.m4 \ $(top_srcdir)/../config/futex.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/hwcaps.m4 \ $(top_srcdir)/../config/iconv.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ @@ -291,6 +293,7 @@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LONG_DOUBLE_128_FLAGS = @LONG_DOUBLE_128_FLAGS@ LONG_DOUBLE_ALT128_COMPAT_FLAGS = @LONG_DOUBLE_ALT128_COMPAT_FLAGS@ diff --git a/libstdc++-v3/src/filesystem/Makefile.in b/libstdc++-v3/src/filesystem/Makefile.in index 76ba905087b0..b138a079deb1 100644 --- a/libstdc++-v3/src/filesystem/Makefile.in +++ b/libstdc++-v3/src/filesystem/Makefile.in @@ -92,8 +92,10 @@ target_triplet = @target@ subdir = src/filesystem ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/enable.m4 \ $(top_srcdir)/../config/futex.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/hwcaps.m4 \ $(top_srcdir)/../config/iconv.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ @@ -297,6 +299,7 @@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LONG_DOUBLE_128_FLAGS = @LONG_DOUBLE_128_FLAGS@ LONG_DOUBLE_ALT128_COMPAT_FLAGS = @LONG_DOUBLE_ALT128_COMPAT_FLAGS@ diff --git a/libstdc++-v3/src/libbacktrace/Makefile.in b/libstdc++-v3/src/libbacktrace/Makefile.in index cde092464a40..34fec1ec9a85 100644 --- a/libstdc++-v3/src/libbacktrace/Makefile.in +++ b/libstdc++-v3/src/libbacktrace/Makefile.in @@ -123,8 +123,10 @@ target_triplet = @target@ subdir = src/libbacktrace ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/enable.m4 \ $(top_srcdir)/../config/futex.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/hwcaps.m4 \ $(top_srcdir)/../config/iconv.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ @@ -297,6 +299,7 @@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LONG_DOUBLE_128_FLAGS = @LONG_DOUBLE_128_FLAGS@ LONG_DOUBLE_ALT128_COMPAT_FLAGS = @LONG_DOUBLE_ALT128_COMPAT_FLAGS@ diff --git a/libstdc++-v3/testsuite/17_intro/names.cc b/libstdc++-v3/testsuite/17_intro/names.cc index e94da9defb29..befb5aad2575 100644 --- a/libstdc++-v3/testsuite/17_intro/names.cc +++ b/libstdc++-v3/testsuite/17_intro/names.cc @@ -286,6 +286,8 @@ // defines fpreg_t::d and fpreg_t::f #undef d #undef f +// defines __vector128::u +#undef u #endif #if defined (__linux__) && defined (__sparc__) diff --git a/libstdc++-v3/testsuite/20_util/allocator_traits/members/allocate_hint.cc b/libstdc++-v3/testsuite/20_util/allocator_traits/members/allocate_hint.cc index 214be6ab18b3..94c3fbddb8e1 100644 --- a/libstdc++-v3/testsuite/20_util/allocator_traits/members/allocate_hint.cc +++ b/libstdc++-v3/testsuite/20_util/allocator_traits/members/allocate_hint.cc @@ -74,7 +74,7 @@ void test02() { typedef std::allocator_traits> traits_type; traits_type::allocator_type a; - traits_type::const_void_pointer v; + traits_type::const_void_pointer v = nullptr; X* p __attribute__((unused)) = traits_type::allocate(a, 1, v); VERIFY( a.called ); } diff --git a/libstdc++-v3/testsuite/20_util/allocator_traits/members/allocate_hint_nonpod.cc b/libstdc++-v3/testsuite/20_util/allocator_traits/members/allocate_hint_nonpod.cc index 32bbf2bbf9db..c305b672dc74 100644 --- a/libstdc++-v3/testsuite/20_util/allocator_traits/members/allocate_hint_nonpod.cc +++ b/libstdc++-v3/testsuite/20_util/allocator_traits/members/allocate_hint_nonpod.cc @@ -58,7 +58,7 @@ void test01() { typedef std::allocator_traits> traits_type; traits_type::allocator_type a; - traits_type::const_void_pointer v; + traits_type::const_void_pointer v = nullptr; traits_type::pointer p = traits_type::allocate(a, 1, v); traits_type::deallocate(a, p, 1); } diff --git a/libstdc++-v3/testsuite/20_util/bind/dangling_ref.cc b/libstdc++-v3/testsuite/20_util/bind/dangling_ref.cc index 17e7b21c45cb..32af0a27b8fe 100644 --- a/libstdc++-v3/testsuite/20_util/bind/dangling_ref.cc +++ b/libstdc++-v3/testsuite/20_util/bind/dangling_ref.cc @@ -1,4 +1,5 @@ // { dg-do compile { target c++11 } } +// { dg-additional-options "-Wsystem-headers" } #include int f(); diff --git a/libstdc++-v3/testsuite/20_util/duration/114244.cc b/libstdc++-v3/testsuite/20_util/duration/114244.cc index 55a7670522ae..12701bfe85cb 100644 --- a/libstdc++-v3/testsuite/20_util/duration/114244.cc +++ b/libstdc++-v3/testsuite/20_util/duration/114244.cc @@ -13,8 +13,8 @@ test_pr114244() { using namespace std::chrono; seconds s; - milliseconds ms; - microseconds us; + milliseconds ms{}; + microseconds us{}; std::istringstream is; diff --git a/libstdc++-v3/testsuite/20_util/duration/io.cc b/libstdc++-v3/testsuite/20_util/duration/io.cc index 0117673dbdc0..6ada4fcfa842 100644 --- a/libstdc++-v3/testsuite/20_util/duration/io.cc +++ b/libstdc++-v3/testsuite/20_util/duration/io.cc @@ -193,8 +193,8 @@ test_parse() { using namespace std::chrono; seconds s; - milliseconds ms; - microseconds us; + milliseconds ms{}; + microseconds us{}; std::istringstream is(" 2023-07-24 13:05"); VERIFY( is >> parse(" %Y-%m-%d %H:%M", s) ); @@ -289,13 +289,13 @@ test_parse() is.clear(); is.str("0.5"); - std::chrono::duration ds; + std::chrono::duration ds{}; VERIFY( is >> parse("%S", ds) ); VERIFY( ds == 0.5s ); is.clear(); is.str("0.125"); - std::chrono::duration dms; + std::chrono::duration dms{}; VERIFY( is >> parse("%S", dms) ); VERIFY( dms == 0.125s ); } diff --git a/libstdc++-v3/testsuite/20_util/function_objects/121782.cc b/libstdc++-v3/testsuite/20_util/function_objects/121782.cc new file mode 100644 index 000000000000..f18fb1ef25cc --- /dev/null +++ b/libstdc++-v3/testsuite/20_util/function_objects/121782.cc @@ -0,0 +1,30 @@ +// { dg-do compile { target c++17 } } +// libstdc++/121782 +// Missing Mandates for operator() of std::boyer_moore_[horspool]_searcher + +// N.B. we only enforce this for C++20 and later. +// { dg-error "static assertion failed" "" { target c++20 } 0 } + +#include +#include +#include + +template +using Range = __gnu_test::random_access_container; + +void +test_bm(Range needle, Range haystack) +{ + std::boyer_moore_searcher s(needle.begin(), needle.end()); + (void) std::search(haystack.begin(), haystack.end(), s); // { dg-error "here" "" { target c++20 } } + // { dg-error "'char' is not the same as 'unsigned char'" "" { target c++20 } 0 } +} + +void +test_bmh(Range needle, Range haystack) +{ + std::boyer_moore_horspool_searcher s(needle.begin(), needle.end()); + (void) std::search(haystack.begin(), haystack.end(), s); // { dg-error "here" "" { target c++20 } } + // { dg-error "'char' is not the same as 'signed char'" "" { target c++20 } 0 } +} + diff --git a/libstdc++-v3/testsuite/20_util/function_objects/bind_back/1.cc b/libstdc++-v3/testsuite/20_util/function_objects/bind_back/1.cc index 7141be282c04..743b7b0efb2e 100644 --- a/libstdc++-v3/testsuite/20_util/function_objects/bind_back/1.cc +++ b/libstdc++-v3/testsuite/20_util/function_objects/bind_back/1.cc @@ -266,22 +266,22 @@ test03() static_assert(is_invocable_r_v); } -constexpr int f(int i, int j, int k) { return i + 2*(j + k); } +constexpr int f(int i, int j, int k) { return i + 2*j + 3*k; } constexpr bool test04() { auto g = bind_back(f); - VERIFY( g(1, 2, 3) == 1 + 2*(2 + 3) ); + VERIFY( g(1, 2, 3) == 1 + 2*2 + 3*3 ); auto g1 = bind_back(f, 1); - VERIFY( g1(2, 3) == 2 + 2*(3 + 1) ); - VERIFY( bind_back(g, 1)(2, 3) == 2 + 2*(3 + 1) ); + VERIFY( g1(2, 3) == 3*1 + 2 + 3*2); + VERIFY( bind_back(g, 1)(2, 3) == 3*1 + 2 + 2*3 ); auto g2 = bind_back(f, 1, 2); - VERIFY( g2(3) == 3 + 2*(1 + 2) ); - VERIFY( bind_back(g1, 2)(3) == 3 + 2*(2 + 1) ); + VERIFY( g2(3) == 3 + 2*1 + 3*2); + VERIFY( bind_back(g1, 2)(3) == 3*1 + 2*2 + 3 ); auto g3 = bind_back(f, 1, 2, 3); - VERIFY( g3() == 1 + 2*(2 + 3) ); - VERIFY( bind_back(g2, 3)() == 3 + 2*(1 + 2) ); + VERIFY( g3() == 1 + 2*2 + 3*3 ); + VERIFY( bind_back(g2, 3)() == 3*1 + 1*2 + 2*3); return true; } diff --git a/libstdc++-v3/testsuite/20_util/function_objects/bind_back/nttp.cc b/libstdc++-v3/testsuite/20_util/function_objects/bind_back/nttp.cc new file mode 100644 index 000000000000..4dff909a3873 --- /dev/null +++ b/libstdc++-v3/testsuite/20_util/function_objects/bind_back/nttp.cc @@ -0,0 +1,258 @@ +// { dg-do run { target c++26 } } +// { dg-add-options no_pch } + +// Test NTTP bind_back(Args...), P2714 + +#include + +#ifndef __cpp_lib_bind_back +# error "Feature test macro for bind_back is missing in " +#elif __cpp_lib_bind_back < 202306L +# error "Feature test macro for bind_back has wrong value in " +#endif + +#include + +using std::bind_back; +using std::is_same_v; +using std::is_invocable_v; +using std::is_invocable_r_v; + +void +test01() +{ + struct F { void operator()(int) {} }; + constexpr F f{}; + + // Reference wrappers should be handled: + static_assert(!std::is_same_v< + decltype(bind_back(std::declval())), + decltype(bind_back(std::ref(std::declval()))) + >); + static_assert(!std::is_same_v< + decltype(bind_back(std::declval())), + decltype(bind_back(std::cref(std::declval()))) + >); + static_assert(!std::is_same_v< + decltype(bind_back(std::ref(std::declval()))), + decltype(bind_back(std::cref(std::declval()))) + >); +} + +void +test02() +{ + struct quals + { + bool as_const; + bool as_lvalue; + }; + + struct F + { + quals operator()(int, int) & { return { false, true }; } + quals operator()(int, int) const & { return { true, true }; } + quals operator()(int, int) && { return { false, false }; } + quals operator()(int, int) const && { return { true, false }; } + }; + + // Constness and value category forwarded to the target object? + { // no bound args + constexpr F f; + auto g = bind_back(); + const auto& cg = g; + quals q; + + q = g(0,0); + VERIFY( q.as_const && q.as_lvalue ); + q = std::move(g)(0,0); + VERIFY( q.as_const && q.as_lvalue ); + q = cg(0,0); + VERIFY( q.as_const && q.as_lvalue ); + q = std::move(cg)(0,0); + VERIFY( q.as_const && q.as_lvalue ); + } + { // one bound arg + constexpr F f; + auto g = bind_back(0); + const auto& cg = g; + quals q; + + q = g(0); + VERIFY( q.as_const && q.as_lvalue ); + q = std::move(g)(0); + VERIFY( q.as_const && q.as_lvalue ); + q = cg(0); + VERIFY( q.as_const && q.as_lvalue ); + q = std::move(cg)(0); + VERIFY( q.as_const && q.as_lvalue ); + } + { // two bound args, the general case + constexpr F f; + auto g = bind_back(0,0); + const auto& cg = g; + quals q; + + q = g(); + VERIFY( q.as_const && q.as_lvalue ); + q = std::move(g)(); + VERIFY( q.as_const && q.as_lvalue ); + q = cg(); + VERIFY( q.as_const && q.as_lvalue ); + q = std::move(cg)(); + VERIFY( q.as_const && q.as_lvalue ); + } +} + +void +test02a() +{ + struct quals + { + bool as_const; + bool as_lvalue; + }; + struct F + { + quals operator()(int, int&) const { return { false, true }; } + quals operator()(int, int const&) const { return { true, true }; } + quals operator()(int, int&&) const { return { false, false }; } + quals operator()(int, int const&&) const { return { true, false }; } + }; + constexpr F f{}; + + // verify propagation + auto h = bind_back(10); + auto const& ch = h; + quals q; + + q = h(0); + VERIFY( !q.as_const && q.as_lvalue ); + q = ch(0); + VERIFY( q.as_const && q.as_lvalue ); + q = std::move(h)(0); + VERIFY( !q.as_const && !q.as_lvalue ); + q = std::move(ch)(0); + VERIFY( q.as_const && !q.as_lvalue ); +} + +void +test03() +{ + struct F + { + int& operator()(void*, int& i) { return i; } + void* operator()(void* p, int) const { return p; } + }; + + int i = 5; + void* vp = &vp; // arbitrary void* value + constexpr F f; + + // Bound arg always forwarded as const int& so can only call second overload: + + auto g0 = bind_back(); // call wrapper has no bound arg + using G0 = decltype(g0); + static_assert(is_invocable_r_v); + static_assert(is_invocable_r_v); + static_assert(is_invocable_r_v); + static_assert(is_invocable_r_v); + static_assert(is_invocable_r_v); + void* p0 = static_cast(g0)(vp, i); + VERIFY( p0 == vp ); + + auto g1 = bind_back(i); // call wrapper has bound arg of type int + using G1 = decltype(g1); + static_assert(!is_invocable_r_v); + static_assert(is_invocable_r_v); + static_assert(is_invocable_r_v); + void* p1 = static_cast(g1)(vp); + VERIFY( p1 == vp ); + + auto g2 = bind_back(std::ref(i)); // bound arg of type int& + using G2 = decltype(g2); + static_assert(is_invocable_r_v); + static_assert(is_invocable_r_v); + static_assert(is_invocable_r_v); + static_assert(is_invocable_r_v); + void* p2 = g2(vp); + VERIFY( p2 == vp ); + p2 = static_cast(g2)(vp); + VERIFY( p2 == vp ); + p2 = const_cast(g2)(vp); + VERIFY( p2 == vp ); + + auto g3 = bind_back(std::cref(i)); // bound arg of type const int& + using G3 = decltype(g3); + static_assert(is_invocable_r_v); + static_assert(is_invocable_r_v); + static_assert(is_invocable_r_v); + static_assert(is_invocable_r_v); +} + +void test03a() +{ + struct F + { + int& operator()(void*, int& i) { return i; } + void* operator()(void* p, long) const { return p; } + }; + + int i = 5; + void* vp = &vp; // arbitrary void* value + constexpr F f; + + // Bound arg always forwarded as const int& so can only call second overload: + auto g1 = bind_back(i); // call wrapper has bound arg of type int + using G1 = decltype(g1); + static_assert(is_invocable_r_v); + static_assert(is_invocable_r_v); + static_assert(is_invocable_r_v); + void* p1 = static_cast(g1)(vp); + VERIFY( p1 == vp ); +} + + +constexpr int f(int i, int j, int k) { return i + 2*j + 3*k; } + +consteval bool +test04() +{ + constexpr auto g = bind_back(); + VERIFY( std::is_empty_v ); + VERIFY(g(1, 2, 3) == 1 + 2*2 + 3*3 ); + constexpr auto g1 = bind_back(1); + VERIFY(g1(2, 3) == 3*1 + 1*2 + 2*3 ); + VERIFY(bind_back(1)(2, 3) == 3*1 + 1*2 + 2*3 ); + constexpr auto g2 = bind_back(1, 2); + VERIFY(g2(3) == 2*1 + 3*2 + 1*3 ); + VERIFY(bind_back(2)(3) == 3*1 + 2*2 + 1*3 ); + constexpr auto g3 = bind_back(1, 2, 3); + VERIFY(g3() == 1 + 2*2 + 3*3); + VERIFY(bind_back(3)() == 1*2 + 2*3 + 3*1 ); + return true; +} + +struct C { int i = 0; }; +struct D : C { D(){} D(D&&) { ++i; } }; +int f5(D const& d1, D const& d2, D const& d3) +{ return d1.i + d2.i + d3.i; } + +void test05() +{ + // Must move arguments into capture object, not construct in place + // like normal arguments. + VERIFY( bind_back(D{}, D{})(D{}) == 2 ); +} + +int +main() +{ + test01(); + test02(); + test02a(); + test03(); + test03a(); + static_assert(test04()); + test05(); +} diff --git a/libstdc++-v3/testsuite/20_util/function_objects/bind_back/nttp_neg.cc b/libstdc++-v3/testsuite/20_util/function_objects/bind_back/nttp_neg.cc new file mode 100644 index 000000000000..d64d49e83f4b --- /dev/null +++ b/libstdc++-v3/testsuite/20_util/function_objects/bind_back/nttp_neg.cc @@ -0,0 +1,38 @@ +// { dg-do compile { target c++26 } } + +#include + +void f() {}; +using fp = decltype(&f); +constexpr fp nfp = nullptr; + +struct A { void mf() const {} }; +using mfp = decltype(&A::mf); +constexpr mfp nnmfp = &A::mf; +constexpr mfp nmfp = nullptr; + +struct B { B() = default; B(B const&) = delete; }; +void bf(B const&) {}; + +struct C { C() = default; C(C&&) = delete; }; +void cf(C&&) {}; + +int main() +{ + std::bind_back()(); + // Verify bind_back with fn a null pointer fails. + std::bind_back()(); // { dg-error "here" } + + std::bind_back(A{})(); + // Verify bind_back with mfn a null member pointer fails. + std::bind_back(A{})(); // { dg-error "here" } + + // Verify passing uncopyable type fails. + std::bind_back(B{}); // { dg-error "here" } + // + // Verify passing unmovable type fails. + std::bind_back(C{}); // { dg-error "here" } +} + +// { dg-error "static assertion failed" "" { target *-*-* } 0 } +// { dg-error "use of deleted function" "" { target *-*-* } 0 } diff --git a/libstdc++-v3/testsuite/20_util/function_objects/bind_front/1.cc b/libstdc++-v3/testsuite/20_util/function_objects/bind_front/1.cc index 93efb2efea40..56bdaaa46d0c 100644 --- a/libstdc++-v3/testsuite/20_util/function_objects/bind_front/1.cc +++ b/libstdc++-v3/testsuite/20_util/function_objects/bind_front/1.cc @@ -266,22 +266,22 @@ test03() static_assert(is_invocable_r_v); } -int f(int i, int j, int k) { return i + j + k; } +int f(int i, int j, int k) { return i + 2*j + 3*k; } void test04() { auto g = bind_front(f); - VERIFY( g(1, 2, 3) == 6 ); + VERIFY( g(1, 2, 3) == 14 ); auto g1 = bind_front(f, 1); - VERIFY( g1(2, 3) == 6 ); - VERIFY( bind_front(g, 1)(2, 3) == 6 ); + VERIFY( g1(2, 3) == 14 ); + VERIFY( bind_front(g, 1)(2, 3) == 14 ); auto g2 = bind_front(f, 1, 2); - VERIFY( g2(3) == 6 ); - VERIFY( bind_front(g1, 2)(3) == 6 ); + VERIFY( g2(3) == 14 ); + VERIFY( bind_front(g1, 2)(3) == 14 ); auto g3 = bind_front(f, 1, 2, 3); - VERIFY( g3() == 6 ); - VERIFY( bind_front(g2, 3)() == 6 ); + VERIFY( g3() == 14 ); + VERIFY( bind_front(g2, 3)() == 14 ); } struct CountedArg diff --git a/libstdc++-v3/testsuite/20_util/function_objects/bind_front/nttp.cc b/libstdc++-v3/testsuite/20_util/function_objects/bind_front/nttp.cc new file mode 100644 index 000000000000..0839c849c0ce --- /dev/null +++ b/libstdc++-v3/testsuite/20_util/function_objects/bind_front/nttp.cc @@ -0,0 +1,260 @@ +// { dg-do run { target c++26 } } +// { dg-add-options no_pch } + +// Test NTTP bind_front(Args...), P2714 + +#include + +#ifndef __cpp_lib_bind_front +# error "Feature test macro for bind_front is missing in " +#elif __cpp_lib_bind_front < 202306L +# error "Feature test macro for bind_front has wrong value in " +#endif + +#include + +using std::bind_front; +using std::is_same_v; +using std::is_invocable_v; +using std::is_invocable_r_v; + +void +test01() +{ + struct F { void operator()(int) {} }; + constexpr F f{}; + + // Reference wrappers should be handled: + static_assert(!std::is_same_v< + decltype(bind_front(std::declval())), + decltype(bind_front(std::ref(std::declval()))) + >); + static_assert(!std::is_same_v< + decltype(bind_front(std::declval())), + decltype(bind_front(std::cref(std::declval()))) + >); + static_assert(!std::is_same_v< + decltype(bind_front(std::ref(std::declval()))), + decltype(bind_front(std::cref(std::declval()))) + >); +} + +void +test02() +{ + struct quals + { + bool as_const; + bool as_lvalue; + }; + + struct F + { + quals operator()(int, int) & { return { false, true }; } + quals operator()(int, int) const & { return { true, true }; } + quals operator()(int, int) && { return { false, false }; } + quals operator()(int, int) const && { return { true, false }; } + }; + + // Constness and value category forwarded to the target object? + { // no bound args + constexpr F f; + auto g = bind_front(); + const auto& cg = g; + quals q; + + // Constness and value category forwarded to the target object? + q = g(0,0); + VERIFY( q.as_const && q.as_lvalue ); + q = std::move(g)(0,0); + VERIFY( q.as_const && q.as_lvalue ); + q = cg(0,0); + VERIFY( q.as_const && q.as_lvalue ); + q = std::move(cg)(0,0); + VERIFY( q.as_const && q.as_lvalue ); + } + { // one bound arg (for when we implement that as a separate case) + constexpr F f; + auto g = bind_front(0); + const auto& cg = g; + quals q; + + // Constness and value category forwarded to the target object? + q = g(0); + VERIFY( q.as_const && q.as_lvalue ); + q = std::move(g)(0); + VERIFY( q.as_const && q.as_lvalue ); + q = cg(0); + VERIFY( q.as_const && q.as_lvalue ); + q = std::move(cg)(0); + VERIFY( q.as_const && q.as_lvalue ); + } + { // two bound args, the general case + constexpr F f; + auto g = bind_front(0,0); + const auto& cg = g; + quals q; + + q = g(); + VERIFY( q.as_const && q.as_lvalue ); + q = std::move(g)(); + VERIFY( q.as_const && q.as_lvalue ); + q = cg(); + VERIFY( q.as_const && q.as_lvalue ); + q = std::move(cg)(); + VERIFY( q.as_const && q.as_lvalue ); + } +} + +void +test02a() +{ + struct quals + { + bool as_const; + bool as_lvalue; + }; + + struct F + { + quals operator()(int&, int) const { return { false, true }; } + quals operator()(int const&, int) const { return { true, true }; } + quals operator()(int&&, int) const { return { false, false }; } + quals operator()(int const&&, int) const { return { true, false }; } + }; + constexpr F f{}; + + // verify propagation + auto h = bind_front(10); + auto const& ch = h; + quals q; + + q = h(0); + VERIFY( !q.as_const && q.as_lvalue ); + q = ch(0); + VERIFY( q.as_const && q.as_lvalue ); + q = std::move(h)(0); + VERIFY( !q.as_const && !q.as_lvalue ); + q = std::move(ch)(0); + VERIFY( q.as_const && !q.as_lvalue ); +} + +void +test03() +{ + struct F + { + int& operator()(int& i, void*) { return i; } + void* operator()(long, void* p) const { return p; } + }; + + int i = 5; + void* vp = &vp; // arbitrary void* value + constexpr F f; + + // Bound arg always forwarded as const int& so can only call second overload: + + auto g0 = bind_front(); // call wrapper has no bound arg + using G0 = decltype(g0); + static_assert(is_invocable_r_v); + static_assert(is_invocable_r_v); + static_assert(is_invocable_r_v); + static_assert(is_invocable_r_v); + static_assert(is_invocable_r_v); + void* p0 = static_cast(g0)(i, vp); + VERIFY( p0 == vp ); + + auto g1 = bind_front(i); // call wrapper has bound arg of type int + using G1 = decltype(g1); + static_assert(!is_invocable_r_v); + static_assert(is_invocable_r_v); + static_assert(is_invocable_r_v); + void* p1 = static_cast(g1)(vp); + VERIFY( p1 == vp ); + + auto g2 = bind_front(std::ref(i)); // bound arg of type int& + using G2 = decltype(g2); + static_assert(is_invocable_r_v); + static_assert(is_invocable_r_v); + static_assert(is_invocable_r_v); + static_assert(is_invocable_r_v); + void* p2 = g2(vp); + VERIFY( p2 == vp ); + p2 = static_cast(g2)(vp); + VERIFY( p2 == vp ); + p2 = const_cast(g2)(vp); + VERIFY( p2 == vp ); + + auto g3 = bind_front(std::cref(i)); // bound arg of type const int& + using G3 = decltype(g3); + static_assert(is_invocable_r_v); + static_assert(is_invocable_r_v); + static_assert(is_invocable_r_v); + static_assert(is_invocable_r_v); +} + +void test03a() +{ + struct F + { + int& operator()(int& i, void*) { return i; } + void* operator()(long, void* p) const { return p; } + }; + + int i = 5; + void* vp = &vp; // arbitrary void* value + constexpr F f; + + // Bound arg always forwarded as const int& so can only call second overload: + auto g1 = bind_front(i); // call wrapper has bound arg of type int + using G1 = decltype(g1); + static_assert(is_invocable_r_v); + static_assert(is_invocable_r_v); + static_assert(is_invocable_r_v); + void* p1 = static_cast(g1)(vp); + VERIFY( p1 == vp ); +} + +constexpr int f(int i, int j, int k) { return i + 2*j + 3*k; } + +consteval bool +test04() +{ + constexpr auto g = bind_front(); + VERIFY( std::is_empty_v ); + VERIFY( g(1, 2, 3) == 1 + 2*2 + 3*3 ); + constexpr auto g1 = bind_front(1); + VERIFY( g1(2, 3) == 1 + 2*2 + 3*3 ); + VERIFY( bind_front(1)(2, 3) == 1 + 2*2 + 3*3 ); + constexpr auto g2 = bind_front(1, 2); + VERIFY( g2(3) == 1 + 2*2 + 3*3 ); + VERIFY( bind_front(2)(3) == 1 + 2*2 + 3*3 ); + constexpr auto g3 = bind_front(1, 2, 3); + VERIFY( g3() == 1 + 2*2 + 3*3 ); + VERIFY(bind_front(3)() == 1 + 2*2 + 3*3 ); + return true; +} + +struct C { int i = 0; }; +struct D : C { D(){} D(D&&) { ++i; } }; +int f5(D const& d1, D const& d2, D const& d3) +{ return d1.i + d2.i + d3.i; } + +void test05() +{ + // Must move arguments into capture object, not construct in place + // like normal arguments. + VERIFY( bind_front(D{}, D{})(D{}) == 2 ); +} + +int +main() +{ + test01(); + test02(); + test02a(); + test03(); + test03a(); + static_assert(test04()); + test05(); +} diff --git a/libstdc++-v3/testsuite/20_util/function_objects/bind_front/nttp_neg.cc b/libstdc++-v3/testsuite/20_util/function_objects/bind_front/nttp_neg.cc new file mode 100644 index 000000000000..d274c1916350 --- /dev/null +++ b/libstdc++-v3/testsuite/20_util/function_objects/bind_front/nttp_neg.cc @@ -0,0 +1,38 @@ +// { dg-do compile { target c++26 } } + +#include + +void f() {} +using fp = decltype(&f); +constexpr fp nfp = nullptr; + +struct A { void mf() const {} }; +using mfp = decltype(&A::mf); +constexpr mfp nnmfp = &A::mf; +constexpr mfp nmfp = nullptr; + +struct B { B() = default; B(B const&) = delete; }; +void bf(B const&) {}; + +struct C { C() = default; C(C&&) = delete; }; +void cf(C&&) {}; + +int main() +{ + std::bind_front()(); + // Verify bind_front with fn a null pointer fails: + std::bind_front()(); // { dg-error "here" } + + std::bind_front(A{})(); + // Verify bind_front with mfn a null member pointer fails: + std::bind_front(A{})(); // { dg-error "here" } + + // Verify passing uncopyable type fails: + std::bind_front(B{}); // { dg-error "here" } + // + // Verify passing unmovable type fails: + std::bind_front(C{}); // { dg-error "here" } +} + +// { dg-error "static assertion failed" "" { target *-*-* } 0 } +// { dg-error "use of deleted function" "" { target *-*-* } 0 } diff --git a/libstdc++-v3/testsuite/20_util/function_objects/not_fn/nttp.cc b/libstdc++-v3/testsuite/20_util/function_objects/not_fn/nttp.cc new file mode 100644 index 000000000000..d24ccf8a1872 --- /dev/null +++ b/libstdc++-v3/testsuite/20_util/function_objects/not_fn/nttp.cc @@ -0,0 +1,94 @@ +// Test NTTP version of not_fn, from P2714 + +// { dg-do run { target c++26 } } + +#include +#include + +using std::not_fn; + +int func(int, char) { return 0; } + +struct F +{ + bool operator()() { return false; } + bool operator()() const { return true; } + bool operator()(int) const { return false; } +}; + +void +test01() +{ + auto f1 = not_fn(); + VERIFY( std::is_empty_v ); + VERIFY( f1(1, '2') == true ); + + auto f2 = not_fn<[] { return true; }>(); + VERIFY( std::is_empty_v ); + VERIFY( f2() == false ); + + auto f3 = not_fn(); + VERIFY( f3() == false ); // Prefer the const member. + VERIFY( f3(1) == true ); + const auto f4 = f3; + VERIFY( f4() == false ); +} + +void +test04() +{ + struct abstract { virtual void f() = 0; }; + struct derived : abstract { void f() { } }; + struct F { bool operator()(const abstract&) const { return false; } }; + constexpr F f; + constexpr derived d; + VERIFY( not_fn()(d) ); +} + +void +test05() +{ + auto nf = std::not_fn<[] { return false; }>(); + auto copy(nf); // PR libstdc++/70564 +} + +void +test06() +{ + struct Boolean { + Boolean operator!() const noexcept(false) { return *this; } + }; + struct F { + Boolean operator()() const { return {}; } + }; + const F f; + const auto notf = std::not_fn(); + using NotF = decltype(notf); + static_assert( std::is_invocable::value, "cannot negate" ); + static_assert( !noexcept(notf()), "conversion to bool affects noexcept" ); +} + +void +test07() +{ + struct NonNegatable { }; // there is no operator!(NonNegatable) + struct F { + NonNegatable operator()() const { return {}; } + }; + F f; + constexpr auto notf = std::not_fn(); + using NotF = decltype(notf); + static_assert( !std::is_invocable::value, "cannot negate" ); +} + +int +main() +{ + test01(); + test04(); + test05(); + test06(); + test07(); + constexpr auto f = []{ return false; }; + static_assert(std::not_fn()()); +} diff --git a/libstdc++-v3/testsuite/20_util/function_objects/not_fn/nttp_neg.cc b/libstdc++-v3/testsuite/20_util/function_objects/not_fn/nttp_neg.cc new file mode 100644 index 000000000000..78752735f392 --- /dev/null +++ b/libstdc++-v3/testsuite/20_util/function_objects/not_fn/nttp_neg.cc @@ -0,0 +1,28 @@ +// { dg-do compile { target c++26 } } + +#include + +bool f() { return {}; } +using fp = decltype(&f); +constexpr fp nfp = nullptr; + +struct A { bool mf() const { return {}; } }; +using mfp = decltype(&A::mf); +constexpr mfp nnmfp = &A::mf; +constexpr mfp nmfp = nullptr; +constexpr A a; + +int main() +{ + (void) std::not_fn()(); + + // Verify not_fn with fn a null pointer fails. + (void) std::not_fn()(); // { dg-error "here" } + // + (void) std::not_fn()(a); + + // Verify not_fn with mfn a null member pointer fails. + return std::not_fn()(a); // { dg-error "here" } +} + +// { dg-error "static assertion failed" "" { target *-*-* } 0 } diff --git a/libstdc++-v3/testsuite/20_util/function_objects/not_fn/version.cc b/libstdc++-v3/testsuite/20_util/function_objects/not_fn/version.cc new file mode 100644 index 000000000000..fc8a3c9ed760 --- /dev/null +++ b/libstdc++-v3/testsuite/20_util/function_objects/not_fn/version.cc @@ -0,0 +1,12 @@ +// { dg-do preprocess { target c++17 } } +// { dg-add-options no_pch } + +#include + +#ifndef __cpp_lib_not_fn +# error "Feature test macro for not_fn is missing in " +#elif __cpp_lib_not_fn < 201603L +# error "Feature test macro __cpp_lib_not_fn has the wrong value for C++17 or later" +#elif __cplusplus > 202302L && __cpp_lib_not_fn < 202306L +# error "Feature test macro __cpp_lib_not_fn has the wrong value for C++26 or later" +#endif diff --git a/libstdc++-v3/testsuite/20_util/function_ref/deduction.cc b/libstdc++-v3/testsuite/20_util/function_ref/deduction.cc index 2940b8769541..6ed2b4e5712e 100644 --- a/libstdc++-v3/testsuite/20_util/function_ref/deduction.cc +++ b/libstdc++-v3/testsuite/20_util/function_ref/deduction.cc @@ -10,6 +10,13 @@ using std::function_ref; int i = 0; +template + concept deductible = requires (Args&... args) + { std::function_ref(std::nontype, args...); }; + +static_assert( !deductible<1> ); +static_assert( !deductible<1, int> ); + void f0(); void f0n() noexcept; @@ -21,6 +28,8 @@ static_assert( is_same_v)), function_ref> ); static_assert( is_same_v)), function_ref> ); +static_assert( !deductible ); +static_assert( !deductible ); void f1(int); void f1n(int) noexcept; @@ -37,6 +46,8 @@ static_assert( is_same_v, i)), function_ref> ); static_assert( is_same_v, i)), function_ref> ); +static_assert( !deductible ); +static_assert( !deductible ); void f2(int*, int); void f2n(int*, int) noexcept; @@ -53,6 +64,8 @@ static_assert( is_same_v, &i)), function_ref> ); static_assert( is_same_v, &i)), function_ref> ); +static_assert( !deductible ); +static_assert( !deductible ); struct S { @@ -68,6 +81,9 @@ struct S int fcl(float) const&; int fcln(float) const& noexcept; + + int fr(int) &&; + int frn(int) && noexcept; }; S s{}; const S cs{}; @@ -80,16 +96,23 @@ static_assert( is_same_v, &s)), function_ref> ); static_assert( is_same_v, &cs)), function_ref> ); +static_assert( !deductible<&S::mem, int> ); static_assert( is_same_v, s)), function_ref> ); static_assert( is_same_v, &s)), function_ref> ); +static_assert( !deductible<&S::f, char*> ); +static_assert( !deductible<&S::fn, char*> ); +static_assert( !deductible<&S::f, const S> ); +static_assert( !deductible<&S::fn, const S> ); static_assert( is_same_v, &s)), function_ref> ); static_assert( is_same_v, s)), function_ref> ); +static_assert( !deductible<&S::fc, char*> ); +static_assert( !deductible<&S::fcn, char*> ); static_assert( is_same_v, &s)), function_ref> ); @@ -101,3 +124,8 @@ static_assert( is_same_v, s)), static_assert( is_same_v, &s)), function_ref> ); +static_assert( !deductible<&S::fr, char*> ); +static_assert( !deductible<&S::frn, char*> ); +static_assert( !deductible<&S::fr, S> ); +static_assert( !deductible<&S::frn, S> ); + diff --git a/libstdc++-v3/testsuite/20_util/headers/functional/synopsis.cc b/libstdc++-v3/testsuite/20_util/headers/functional/synopsis.cc index e3e92076f5c3..3ee367971ebe 100644 --- a/libstdc++-v3/testsuite/20_util/headers/functional/synopsis.cc +++ b/libstdc++-v3/testsuite/20_util/headers/functional/synopsis.cc @@ -57,6 +57,13 @@ namespace std { template _GLIBCXX14_CONSTEXPR binary_negate not2(const Predicate&); +#ifdef __cpp_lib_not_fn + template _GLIBCXX20_CONSTEXPR auto not_fn(F&&) + noexcept(std::is_nothrow_constructible, F&&>::value); +#if __cpp_lib_not_fn >= 202306L + template constexpr decltype(auto) not_fn() noexcept; +#endif +#endif // lib.binders, binders: template class binder1st; @@ -65,6 +72,24 @@ namespace std { template class binder2nd; template binder2nd bind2nd(const Operation&, const T&); +#ifdef __cpp_lib_bind_front + template + _GLIBCXX20_CONSTEXPR auto bind_front(F&&, Args&&...); +#if __cpp_lib_bind_front >= 202306L + template + constexpr decltype(auto) bind_front(Args&&...) + noexcept(__and_v...>); +#endif +#endif +#ifdef __cpp_lib_bind_back + template + _GLIBCXX20_CONSTEXPR auto bind_back(F&&, Args&&...); +#if __cpp_lib_bind_back >= 202306L + template + constexpr decltype(auto) bind_back(Args&&...) + noexcept(__and_v...>); +#endif +#endif // lib.function.pointer.adaptors, adaptors: template class pointer_to_unary_function; diff --git a/libstdc++-v3/testsuite/20_util/ratio/operations/ops_overflow_neg.cc b/libstdc++-v3/testsuite/20_util/ratio/operations/ops_overflow_neg.cc index 5eff8e31f82a..368866a63313 100644 --- a/libstdc++-v3/testsuite/20_util/ratio/operations/ops_overflow_neg.cc +++ b/libstdc++-v3/testsuite/20_util/ratio/operations/ops_overflow_neg.cc @@ -1,6 +1,6 @@ // { dg-do compile { target c++11 } } // { dg-require-cstdint "" } - +// { dg-additional-options "-Wsystem-headers" } // 2008-07-03 Chris Fairles // Copyright (C) 2008-2025 Free Software Foundation, Inc. diff --git a/libstdc++-v3/testsuite/20_util/shared_ptr/cons/move.cc b/libstdc++-v3/testsuite/20_util/shared_ptr/cons/move.cc index 2dc161d641a2..e380d767d52a 100644 --- a/libstdc++-v3/testsuite/20_util/shared_ptr/cons/move.cc +++ b/libstdc++-v3/testsuite/20_util/shared_ptr/cons/move.cc @@ -140,6 +140,8 @@ test05() { reset_count_struct __attribute__((unused)) reset; + // The std::move here prevents copy elision, so we construct from a prvalue. + // { dg-prune-output "-Wpessimizing-move" } std::shared_ptr a(std::move(std::shared_ptr(new A))); VERIFY( a.use_count() == 1 ); VERIFY( A::ctor_count == 1 ); diff --git a/libstdc++-v3/testsuite/20_util/unique_ptr/lwg4148.cc b/libstdc++-v3/testsuite/20_util/unique_ptr/lwg4148.cc index c70d7a60631b..f5697e4e4021 100644 --- a/libstdc++-v3/testsuite/20_util/unique_ptr/lwg4148.cc +++ b/libstdc++-v3/testsuite/20_util/unique_ptr/lwg4148.cc @@ -1,4 +1,5 @@ // { dg-do compile { target c++11 } } +// { dg-additional-options "-Wsystem-headers" } // LWG 4148. unique_ptr::operator* should not allow dangling references diff --git a/libstdc++-v3/testsuite/20_util/unique_ptr/modifiers/93562.cc b/libstdc++-v3/testsuite/20_util/unique_ptr/modifiers/93562.cc index 95df7afb9644..044357888ea6 100644 --- a/libstdc++-v3/testsuite/20_util/unique_ptr/modifiers/93562.cc +++ b/libstdc++-v3/testsuite/20_util/unique_ptr/modifiers/93562.cc @@ -76,11 +76,32 @@ test03() VERIFY(p2.get_deleter().id == -1); } +namespace B +{ + struct Deleter + { + Deleter& operator=(const Deleter&) = delete; + + void operator()(int* p) const noexcept { delete[] p; } + + // found by ADL + friend void swap(Deleter& lhs, Deleter& rhs) noexcept + { std::swap(lhs.id, rhs.id); } + + int id; + }; + + static_assert(!std::is_move_assignable::value, "not assignable"); +#if __cplusplus >= 201703L + static_assert(std::is_swappable_v, "but swappable"); +#endif +} // namespace B + void test04() { - std::unique_ptr p1(new int[1]{1}, { -1 }); - std::unique_ptr p2(new int[2]{2, 2}, { -2 }); + std::unique_ptr p1(new int[1]{1}, { -1 }); + std::unique_ptr p2(new int[2]{2, 2}, { -2 }); int* const pi1 = p1.get(); int* const pi2 = p2.get(); // This type must swappable even though the deleter is not move-assignable: diff --git a/libstdc++-v3/testsuite/20_util/weak_ptr/cons/virtual_bases.cc b/libstdc++-v3/testsuite/20_util/weak_ptr/cons/virtual_bases.cc new file mode 100644 index 000000000000..ac3e4bce9da5 --- /dev/null +++ b/libstdc++-v3/testsuite/20_util/weak_ptr/cons/virtual_bases.cc @@ -0,0 +1,80 @@ +// { dg-do run { target c++11 } } + +#include +#include + +struct BaseBase { virtual ~BaseBase() = default; }; +struct Base : BaseBase { virtual ~Base() = default; }; +struct Derived1 : Base { virtual ~Derived1() = default; }; +struct Derived2 : virtual Base { virtual ~Derived2() = default; }; +struct Derived3 : virtual Base { virtual ~Derived3() = default; }; +struct Derived4 : Derived2, Derived3 { virtual ~Derived4() = default; }; +struct Derived5 : Derived4 { virtual ~Derived5() = default; }; + +template +void test01() +{ + std::shared_ptr ptr(new T); + VERIFY(ptr); + + std::weak_ptr wptr1 = ptr; + VERIFY(wptr1.lock()); + + std::weak_ptr wptr2 = ptr; + VERIFY(wptr2.lock()); + + std::weak_ptr wptr3 = wptr1; + VERIFY(wptr3.lock()); + + std::weak_ptr wptr4 = ptr; + VERIFY(wptr4.lock()); + + std::weak_ptr wptr5 = std::move(wptr1); + VERIFY(wptr5.lock()); + + ptr.reset(); + + VERIFY(!wptr1.lock()); + VERIFY(!wptr2.lock()); + VERIFY(!wptr3.lock()); + VERIFY(!wptr4.lock()); + VERIFY(!wptr5.lock()); +} + +template +void test02() +{ + std::shared_ptr ptr(new T); + VERIFY(ptr); + + std::weak_ptr wptr1 = ptr; + VERIFY(wptr1.lock()); + + std::weak_ptr wptr2 = ptr; + VERIFY(wptr2.lock()); + + ptr.reset(); + + std::weak_ptr wptr3 = wptr1; + std::weak_ptr wptr4 = wptr1; + std::weak_ptr wptr5 = std::move(wptr1); + + VERIFY(!wptr1.lock()); + VERIFY(!wptr2.lock()); + VERIFY(!wptr3.lock()); + VERIFY(!wptr4.lock()); + VERIFY(!wptr5.lock()); +} + +int main() +{ + test01(); + test01(); + test01(); + test01(); + + test02(); + test02(); + test02(); + test02(); +} diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/stoi.cc b/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/stoi.cc index 9fc143c1473b..4d2a8ba46c39 100644 --- a/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/stoi.cc +++ b/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/stoi.cc @@ -86,7 +86,7 @@ test01() } VERIFY( test ); VERIFY( i1 == 7 ); - VERIFY( idx1 = 1 ); + VERIFY( idx1 == 1 ); try { diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/stol.cc b/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/stol.cc index 85d5e6dbbf33..55e39dd9e89a 100644 --- a/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/stol.cc +++ b/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/stol.cc @@ -86,7 +86,7 @@ test01() } VERIFY( test ); VERIFY( l1 == 7 ); - VERIFY( idx1 = 1 ); + VERIFY( idx1 == 1 ); try { diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/stoll.cc b/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/stoll.cc index a698baeab814..5b23d6c27b8c 100644 --- a/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/stoll.cc +++ b/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/stoll.cc @@ -87,7 +87,7 @@ test01() } VERIFY( test ); VERIFY( ll1 == 7 ); - VERIFY( idx1 = 1 ); + VERIFY( idx1 == 1 ); try { diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/stoul.cc b/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/stoul.cc index 47c20ce09585..00afc942cdcc 100644 --- a/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/stoul.cc +++ b/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/stoul.cc @@ -86,7 +86,7 @@ test01() } VERIFY( test ); VERIFY( ul1 == 7 ); - VERIFY( idx1 = 1 ); + VERIFY( idx1 == 1 ); try { diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/stoull.cc b/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/stoull.cc index ad81b67af87a..f44eb1ddc316 100644 --- a/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/stoull.cc +++ b/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/stoull.cc @@ -87,7 +87,7 @@ test01() } VERIFY( test ); VERIFY( ull1 == 7 ); - VERIFY( idx1 = 1 ); + VERIFY( idx1 == 1 ); try { diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stoi.cc b/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stoi.cc index 88e1da7dff4e..1aec77f6a698 100644 --- a/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stoi.cc +++ b/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stoi.cc @@ -88,7 +88,7 @@ test01() } VERIFY( test ); VERIFY( i1 == 7 ); - VERIFY( idx1 = 1 ); + VERIFY( idx1 == 1 ); try { diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stol.cc b/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stol.cc index 98388f99f5ce..41e9d669774f 100644 --- a/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stol.cc +++ b/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stol.cc @@ -88,7 +88,7 @@ test01() } VERIFY( test ); VERIFY( l1 == 7 ); - VERIFY( idx1 = 1 ); + VERIFY( idx1 == 1 ); try { diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stoll.cc b/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stoll.cc index d7a49f5cea6f..5c7a25b3e9e6 100644 --- a/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stoll.cc +++ b/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stoll.cc @@ -88,7 +88,7 @@ test01() } VERIFY( test ); VERIFY( ll1 == 7 ); - VERIFY( idx1 = 1 ); + VERIFY( idx1 == 1 ); try { diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stoul.cc b/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stoul.cc index b5537967ceb6..d33289a88931 100644 --- a/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stoul.cc +++ b/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stoul.cc @@ -88,7 +88,7 @@ test01() } VERIFY( test ); VERIFY( ul1 == 7 ); - VERIFY( idx1 = 1 ); + VERIFY( idx1 == 1 ); try { diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stoull.cc b/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stoull.cc index 503101f48749..67c963942212 100644 --- a/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stoull.cc +++ b/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stoull.cc @@ -88,7 +88,7 @@ test01() } VERIFY( test ); VERIFY( ull1 == 7 ); - VERIFY( idx1 = 1 ); + VERIFY( idx1 == 1 ); try { diff --git a/libstdc++-v3/testsuite/22_locale/time_get/get/char/3.cc b/libstdc++-v3/testsuite/22_locale/time_get/get/char/3.cc index 48a5f12e26e8..49bcd2adbcb1 100644 --- a/libstdc++-v3/testsuite/22_locale/time_get/get/char/3.cc +++ b/libstdc++-v3/testsuite/22_locale/time_get/get/char/3.cc @@ -226,7 +226,7 @@ test01() format = "%e"; ret = tget.get(iter(iss), end, iss, err, &time, format.data(), format.data()+format.size()); - VERIFY( err == ios_base::failbit|ios_base::eofbit ); + VERIFY( err == (ios_base::failbit|ios_base::eofbit) ); VERIFY( ret == end ); iss.str("35"); diff --git a/libstdc++-v3/testsuite/22_locale/time_get/get/wchar_t/3.cc b/libstdc++-v3/testsuite/22_locale/time_get/get/wchar_t/3.cc index b7eb5bcb204a..4b1b6e4924e6 100644 --- a/libstdc++-v3/testsuite/22_locale/time_get/get/wchar_t/3.cc +++ b/libstdc++-v3/testsuite/22_locale/time_get/get/wchar_t/3.cc @@ -226,7 +226,7 @@ test01() format = L"%e"; ret = tget.get(iter(iss), end, iss, err, &time, format.data(), format.data()+format.size()); - VERIFY( err == ios_base::failbit|ios_base::eofbit ); + VERIFY( err == (ios_base::failbit|ios_base::eofbit) ); VERIFY( ret == end ); iss.str(L"35"); diff --git a/libstdc++-v3/testsuite/23_containers/deque/modifiers/emplace/118087.cc b/libstdc++-v3/testsuite/23_containers/deque/modifiers/emplace/118087.cc new file mode 100644 index 000000000000..3606e8899807 --- /dev/null +++ b/libstdc++-v3/testsuite/23_containers/deque/modifiers/emplace/118087.cc @@ -0,0 +1,43 @@ +// { dg-do run { target c++11 } } + +// PR libstdc++/118087 +// std::deque::emplace does not do uses-allocator construction + +#include +#include +#include +#include + +template +using Alloc = __gnu_test::propagating_allocator; + +struct X +{ + using allocator_type = Alloc; + X() { } + X(const X&) { } + X(X&&) { } + X(const allocator_type& a) : alloc(a) { } + X(const X&, const allocator_type& a) : alloc(a) { } + X(X&&, const allocator_type& a) : alloc(a) { } + + X& operator=(const X&) = default; + + allocator_type alloc{-1}; +}; + +int main() +{ + std::deque>> d(2, Alloc(50)); + VERIFY(d[0].alloc.get_personality() == 50); + VERIFY(d[1].alloc.get_personality() == 50); + + d.emplace(d.begin() + 1); + VERIFY(d[1].alloc.get_personality() == 50); + + d.emplace_front(); + VERIFY(d[0].alloc.get_personality() == 50); + + d.emplace_back(); + VERIFY(d[d.size() - 1].alloc.get_personality() == 50); +} diff --git a/libstdc++-v3/testsuite/23_containers/map/cons/from_range.cc b/libstdc++-v3/testsuite/23_containers/map/cons/from_range.cc index 3a9fede04348..145390069650 100644 --- a/libstdc++-v3/testsuite/23_containers/map/cons/from_range.cc +++ b/libstdc++-v3/testsuite/23_containers/map/cons/from_range.cc @@ -61,7 +61,7 @@ constexpr bool is_equal(std::less, std::less) { return true; } constexpr bool is_equal(StateCmp lhs, StateCmp rhs) -{ return lhs.state = rhs.state; } +{ return lhs.state == rhs.state; } constexpr auto get0 = [](auto const& t) { using std::get; @@ -103,12 +103,12 @@ do_test(Alloc alloc, Cmp cmp) std::map m4(std::from_range, Range(a, a+4), cmp); VERIFY( eq(m4, {a, 4}) ); VERIFY( m4.get_allocator() == Alloc() ); - VERIFY( is_equal(m4.key_comp(), Cmp()) ); + VERIFY( is_equal(m4.key_comp(), cmp) ); std::map m9(std::from_range, Range(a, a+9), alloc); VERIFY( eq(m9, {a, 9}) ); VERIFY( m9.get_allocator() == alloc ); - VERIFY( is_equal(m9.key_comp(), cmp) ); + VERIFY( is_equal(m9.key_comp(), Cmp()) ); std::map mr(std::from_range, Range(a, a+14), cmp, alloc); VERIFY( eq(mr, {a, 9}) ); diff --git a/libstdc++-v3/testsuite/23_containers/mdspan/class_mandate_neg.cc b/libstdc++-v3/testsuite/23_containers/mdspan/class_mandate_neg.cc index de19b6d85c99..172f149176f7 100644 --- a/libstdc++-v3/testsuite/23_containers/mdspan/class_mandate_neg.cc +++ b/libstdc++-v3/testsuite/23_containers/mdspan/class_mandate_neg.cc @@ -35,7 +35,7 @@ test_element_type_mismatch() static_assert(test_element_type_mismatch()); // { dg-prune-output "Extents must be a specialization of std::extents" } -// { dg-prune-output "no type named '_S_storage'" } +// { dg-prune-output "no type named '_Storage'" } // { dg-prune-output "non-constant condition" } // { dg-prune-output "static assertion failed" } // { dg-prune-output "__glibcxx_assert" } diff --git a/libstdc++-v3/testsuite/23_containers/mdspan/extents/misc.cc b/libstdc++-v3/testsuite/23_containers/mdspan/extents/misc.cc index 94086653a745..33d6f947f0bc 100644 --- a/libstdc++-v3/testsuite/23_containers/mdspan/extents/misc.cc +++ b/libstdc++-v3/testsuite/23_containers/mdspan/extents/misc.cc @@ -121,7 +121,7 @@ test_deduction_from_constant() verify(std::extents(1, c2), std::extents{1}); verify(std::extents(c2), std::extents{}); verify(std::extents(1, c2), std::extents{1}); - verify(std::extents(std::cw, c2), std::extents{}); + verify(std::extents(std::cw, c2), std::extents{1}); #endif return true; } diff --git a/libstdc++-v3/testsuite/23_containers/mdspan/int_like.h b/libstdc++-v3/testsuite/23_containers/mdspan/int_like.h index 310dd8ddf207..e9172c134559 100644 --- a/libstdc++-v3/testsuite/23_containers/mdspan/int_like.h +++ b/libstdc++-v3/testsuite/23_containers/mdspan/int_like.h @@ -15,7 +15,7 @@ template public: explicit CustomIndexType(int i) - : _M_i(i) + : value(i) { } CustomIndexType() = delete; @@ -31,25 +31,25 @@ template constexpr operator int() const noexcept requires (Kind == CustomIndexKind::Const) - { return _M_i; } + { return value; } constexpr operator int() const requires (Kind == CustomIndexKind::Throwing) - { return _M_i; } + { return value; } constexpr operator int() noexcept requires (Kind == CustomIndexKind::Mutating) - { return _M_i; } + { return value; } constexpr operator int() && noexcept requires (Kind == CustomIndexKind::RValue) - { return _M_i; } + { return value; } private: - int _M_i; + int value; }; using IntLike = CustomIndexType; diff --git a/libstdc++-v3/testsuite/23_containers/mdspan/layouts/class_mandate_neg.cc b/libstdc++-v3/testsuite/23_containers/mdspan/layouts/class_mandate_neg.cc index 7091153daba8..edf07c983dac 100644 --- a/libstdc++-v3/testsuite/23_containers/mdspan/layouts/class_mandate_neg.cc +++ b/libstdc++-v3/testsuite/23_containers/mdspan/layouts/class_mandate_neg.cc @@ -46,3 +46,4 @@ auto b6 = B<6, std::layout_stride, std::layout_left>(); // { dg-error "require auto b7 = B<7, std::layout_stride, std::layout_stride>(); // { dg-error "required from" } // { dg-prune-output "must be representable as index_type" } +// { dg-prune-output "static assertion failed" } diff --git a/libstdc++-v3/testsuite/23_containers/mdspan/layouts/ctors.cc b/libstdc++-v3/testsuite/23_containers/mdspan/layouts/ctors.cc index 23c0a55dae19..27065a0dfc6e 100644 --- a/libstdc++-v3/testsuite/23_containers/mdspan/layouts/ctors.cc +++ b/libstdc++-v3/testsuite/23_containers/mdspan/layouts/ctors.cc @@ -1,6 +1,7 @@ // { dg-do run { target c++23 } } #include +#include "padded_traits.h" #include #include @@ -27,7 +28,6 @@ template VERIFY(std::cmp_equal(m.stride(i), other.stride(i))); } - template constexpr void verify_convertible(From from) @@ -40,7 +40,10 @@ template constexpr void verify_nothrow_convertible(From from) { - static_assert(std::is_nothrow_constructible_v); + if constexpr (is_padded_layout) + static_assert(std::is_constructible_v); + else + static_assert(std::is_nothrow_constructible_v); verify_convertible(from); } @@ -57,7 +60,10 @@ template constexpr void verify_nothrow_constructible(From from) { - static_assert(std::is_nothrow_constructible_v); + if constexpr (is_padded_layout) + static_assert(std::is_constructible_v); + else + static_assert(std::is_nothrow_constructible_v); verify_constructible(from); } @@ -196,6 +202,16 @@ namespace from_extents // ctor: mapping(mapping) namespace from_same_layout { + template + constexpr void + verify_convertible(OExtents exts) + { + using Mapping = typename Layout::mapping; + using OMapping = typename Layout::mapping; + + ::verify_convertible(OMapping(exts)); + } + template constexpr void verify_nothrow_convertible(OExtents exts) @@ -223,8 +239,12 @@ namespace from_same_layout verify_nothrow_convertible>( std::extents{}); - verify_nothrow_constructible>( - std::extents{}); + if constexpr (!is_padded_layout) + verify_nothrow_constructible>( + std::extents{}); + else + verify_convertible>( + std::extents{}); assert_not_constructible< typename Layout::mapping>, @@ -234,8 +254,12 @@ namespace from_same_layout typename Layout::mapping>, typename Layout::mapping>>(); - verify_nothrow_constructible>( - std::extents{1}); + if constexpr (!is_padded_layout) + verify_nothrow_constructible>( + std::extents{1}); + else + verify_convertible>( + std::extents{1}); verify_nothrow_convertible>( std::extents{}); @@ -247,8 +271,12 @@ namespace from_same_layout verify_nothrow_constructible>( std::extents{1}); - verify_nothrow_convertible>( - std::extents{}); + if constexpr (!is_padded_layout) + verify_nothrow_convertible>( + std::extents{}); + else + verify_nothrow_constructible>( + std::extents{}); return true; } @@ -424,11 +452,25 @@ template from_stride::test_all(); } +template typename Layout> + constexpr void + test_padded_all() + { + test_all>(); + test_all>(); + test_all>(); + test_all>(); + } + int main() { test_all(); test_all(); +#if __cplusplus > 202302L + test_padded_all(); + test_padded_all(); +#endif from_left_or_right::test_all(); from_left_or_right::test_all(); diff --git a/libstdc++-v3/testsuite/23_containers/mdspan/layouts/empty.cc b/libstdc++-v3/testsuite/23_containers/mdspan/layouts/empty.cc index 655b9b6d6c30..8840d07879cc 100644 --- a/libstdc++-v3/testsuite/23_containers/mdspan/layouts/empty.cc +++ b/libstdc++-v3/testsuite/23_containers/mdspan/layouts/empty.cc @@ -30,96 +30,109 @@ template } template -constexpr void -test_static_overflow() -{ - constexpr Int n1 = std::numeric_limits::max(); - constexpr size_t n2 = std::dynamic_extent - 1; - constexpr size_t n = std::cmp_less(n1, n2) ? size_t(n1) : n2; - - verify_all(typename Layout::mapping>{}); - verify_all(typename Layout::mapping>{}); - verify_all(typename Layout::mapping>{}); - verify_all(typename Layout::mapping>{}); - verify_all(typename Layout::mapping>{}); -} + constexpr void + test_static_overflow() + { + constexpr Int n1 = std::numeric_limits::max(); + constexpr size_t n2 = std::dynamic_extent - 1; + // Allow some room for padding. + constexpr size_t n = (std::cmp_less(n1, n2) ? size_t(n1) : n2) - 4; + + verify_all(typename Layout::mapping>{}); + verify_all(typename Layout::mapping>{}); + verify_all(typename Layout::mapping>{}); + verify_all(typename Layout::mapping>{}); + verify_all(typename Layout::mapping>{}); + } template -constexpr std::array -make_strides() -{ - std::array strides; - std::ranges::fill(strides, Int(1)); - return strides; -} + constexpr std::array + make_strides() + { + std::array strides; + std::ranges::fill(strides, Int(1)); + return strides; + } template -constexpr typename Layout::mapping -make_mapping(Extents exts) -{ - using IndexType = typename Extents::index_type; - constexpr auto rank = Extents::rank(); - constexpr auto strides = make_strides(); - - if constexpr (std::same_as) - return typename Layout::mapping(exts, strides); - else - return typename Layout::mapping(exts); -} + constexpr typename Layout::mapping + make_mapping(Extents exts) + { + using IndexType = typename Extents::index_type; + constexpr auto rank = Extents::rank(); + constexpr auto strides = make_strides(); + + if constexpr (std::same_as) + return typename Layout::mapping(exts, strides); + else + return typename Layout::mapping(exts); + } template -constexpr void -test_dynamic_overflow() -{ - constexpr Int n1 = std::numeric_limits::max(); - constexpr size_t n2 = std::dynamic_extent - 1; - constexpr Int n = std::cmp_less(n1, n2) ? n1 : Int(n2); + constexpr void + test_dynamic_overflow() + { + constexpr Int n1 = std::numeric_limits::max(); + constexpr size_t n2 = std::dynamic_extent - 1; + // Allow some room for padding. + constexpr Int n = (std::cmp_less(n1, n2) ? n1 : Int(n2)) - 4; - verify_all(make_mapping( - std::extents{n, n, n, n})); + verify_all(make_mapping( + std::extents{n, n, n, n})); - verify_all(make_mapping( - std::extents{n, n, 0, n, n})); + verify_all(make_mapping( + std::extents{n, n, 0, n, n})); - verify_all(make_mapping( - std::extents{n, n, n})); + verify_all(make_mapping( + std::extents{n, n, n})); - verify_all(make_mapping( - std::extents{n, n, n, 0})); + verify_all(make_mapping( + std::extents{n, n, n, 0})); - verify_all(make_mapping( - std::extents{n, n, n})); + verify_all(make_mapping( + std::extents{n, n, n})); - verify_all(make_mapping( - std::extents{0, n, n, n})); -} + verify_all(make_mapping( + std::extents{0, n, n, n})); + } template -constexpr void -test_overflow() -{ - test_static_overflow(); - test_dynamic_overflow(); -} + constexpr void + test_overflow() + { + test_static_overflow(); + test_dynamic_overflow(); + } template -constexpr bool -test_all() -{ - test_overflow(); - test_overflow(); - test_overflow(); - test_overflow(); - test_overflow(); - - test_overflow(); - test_overflow(); - test_overflow(); - test_overflow(); - test_overflow(); - test_overflow(); - return true; -} + constexpr bool + test_all() + { + test_overflow(); + test_overflow(); + test_overflow(); + test_overflow(); + test_overflow(); + + test_overflow(); + test_overflow(); + test_overflow(); + test_overflow(); + test_overflow(); + test_overflow(); + return true; + } + +template typename Layout> + constexpr bool + test_padded_all() + { + static_assert(test_all>()); + static_assert(test_all>()); + static_assert(test_all>()); + static_assert(test_all>()); + return true; + } int main() @@ -127,5 +140,9 @@ main() static_assert(test_all()); static_assert(test_all()); static_assert(test_all()); +#if __cplusplus > 202302L + static_assert(test_padded_all()); + static_assert(test_padded_all()); +#endif return 0; } diff --git a/libstdc++-v3/testsuite/23_containers/mdspan/layouts/mapping.cc b/libstdc++-v3/testsuite/23_containers/mdspan/layouts/mapping.cc index 58bce5144354..d1486e4e11c8 100644 --- a/libstdc++-v3/testsuite/23_containers/mdspan/layouts/mapping.cc +++ b/libstdc++-v3/testsuite/23_containers/mdspan/layouts/mapping.cc @@ -2,11 +2,21 @@ #include #include "../int_like.h" +#include "padded_traits.h" #include #include constexpr size_t dyn = std::dynamic_extent; +template + concept has_static_is_exhaustive = requires + { + { Mapping::is_exhaustive() } -> std::same_as; + }; + +static_assert(has_static_is_exhaustive>>); +static_assert(!has_static_is_exhaustive>>); + template constexpr bool test_mapping_properties() @@ -32,7 +42,7 @@ template static_assert(M::is_always_unique() && M::is_unique()); static_assert(M::is_always_strided() && M::is_strided()); - if constexpr (!std::is_same_v) + if constexpr (has_static_is_exhaustive) static_assert(M::is_always_exhaustive() && M::is_exhaustive()); return true; } @@ -306,7 +316,7 @@ template constexpr void test_stride_1d() { - std::layout_left::mapping> m; + typename Layout::mapping> m; VERIFY(m.stride(0) == 1); } @@ -321,73 +331,169 @@ template<> } template - constexpr void - test_stride_2d(); +struct TestStride2D; template<> - constexpr void - test_stride_2d() - { - std::layout_left::mapping> m; - VERIFY(m.stride(0) == 1); - VERIFY(m.stride(1) == 3); - } + struct TestStride2D + { + static constexpr void + run() + { + std::layout_left::mapping> m; + VERIFY(m.stride(0) == 1); + VERIFY(m.stride(1) == 3); + } + }; template<> - constexpr void - test_stride_2d() - { - std::layout_right::mapping> m; - VERIFY(m.stride(0) == 5); - VERIFY(m.stride(1) == 1); - } + struct TestStride2D + { + static constexpr void + run() + { + std::layout_right::mapping> m; + VERIFY(m.stride(0) == 5); + VERIFY(m.stride(1) == 1); + } + }; template<> + struct TestStride2D + { + static constexpr void + run() + { + std::array strides{13, 2}; + std::layout_stride::mapping m(std::extents{}, strides); + VERIFY(m.stride(0) == strides[0]); + VERIFY(m.stride(1) == strides[1]); + VERIFY(m.strides() == strides); + } + }; + +#if __cplusplus > 202302L +template + requires is_left_padded || is_right_padded + struct TestStride2D + { + static constexpr void + run() + { + using Traits = LayoutTraits()>; + using Extents = typename Traits::extents_type>; + using Mapping = typename Layout::mapping; + constexpr size_t padding_value = Mapping::padding_value; + + Mapping m; + size_t effective_pad = (padding_value == 0 || padding_value == dyn) + ? size_t(1) : padding_value; + + constexpr auto i0 = is_left_padded ? 0 : 1; + VERIFY(m.stride(i0) == 1); + + // The next multiple of padding_value, that's greater or equal + // to exts.extent(0) is the unique value in the range: + // [exts.extent(0), exts.extent(0) + padding_value) + // that is divisible by padding_value. + auto stride = Traits::padded_stride(m); + VERIFY((stride % effective_pad) == 0); + VERIFY(3 <= stride && std::cmp_less(stride, 3 + effective_pad)); + } + }; +#endif + +template constexpr void - test_stride_2d() + test_stride_2d() { - std::array strides{13, 2}; - std::layout_stride::mapping m(std::extents{}, strides); - VERIFY(m.stride(0) == strides[0]); - VERIFY(m.stride(1) == strides[1]); - VERIFY(m.strides() == strides); + TestStride2D::run(); } template - constexpr void - test_stride_3d(); +struct TestStride3D; template<> - constexpr void - test_stride_3d() - { - std::layout_left::mapping m(std::dextents(3, 5, 7)); - VERIFY(m.stride(0) == 1); - VERIFY(m.stride(1) == 3); - VERIFY(m.stride(2) == 3*5); - } + struct TestStride3D + { + static constexpr void + run() + { + std::layout_left::mapping m(std::dextents(3, 5, 7)); + VERIFY(m.stride(0) == 1); + VERIFY(m.stride(1) == 3); + VERIFY(m.stride(2) == 3*5); + } + }; + template<> - constexpr void - test_stride_3d() - { - std::layout_right::mapping m(std::dextents(3, 5, 7)); - VERIFY(m.stride(0) == 5*7); - VERIFY(m.stride(1) == 7); - VERIFY(m.stride(2) == 1); - } + struct TestStride3D + { + static constexpr void + run() + { + std::layout_right::mapping m(std::dextents(3, 5, 7)); + VERIFY(m.stride(0) == 5*7); + VERIFY(m.stride(1) == 7); + VERIFY(m.stride(2) == 1); + } + }; template<> + struct TestStride3D + { + static constexpr void + run() + { + std::dextents exts(3, 5, 7); + std::array strides{11, 2, 41}; + std::layout_stride::mapping> m(exts, strides); + VERIFY(m.stride(0) == strides[0]); + VERIFY(m.stride(1) == strides[1]); + VERIFY(m.stride(2) == strides[2]); + VERIFY(m.strides() == strides); + } + }; + +#if __cplusplus > 202302L +template + requires is_left_padded || is_right_padded + struct TestStride3D + { + static constexpr void + run() + { + using Traits = LayoutTraits()>; + using Extents = typename Traits::extents_type>; + using Mapping = typename Layout::mapping; + constexpr size_t padding_value = Mapping::padding_value; + + Mapping m; + size_t effective_pad = (padding_value == 0 || padding_value == dyn) + ? size_t(1) : padding_value; + + constexpr auto i0 = is_left_padded ? 0 : 2; + VERIFY(m.stride(i0) == 1); + + // The next multiple of padding_value, that's greater or equal + // to exts.extent(0) is the unique value in the range: + // [exts.extent(0), exts.extent(0) + padding_value) + // that is divisible by padding_value. + auto stride = Traits::padded_stride(m); + VERIFY((stride % effective_pad) == 0); + VERIFY(3 <= stride && std::cmp_less(stride, 3 + effective_pad)); + + constexpr auto i2 = is_left_padded ? 2 : 0; + VERIFY(stride * 5 == m.stride(i2)); + } + }; +#endif + +template constexpr void - test_stride_3d() + test_stride_3d() { - std::dextents exts(3, 5, 7); - std::array strides{11, 2, 41}; - std::layout_stride::mapping> m(exts, strides); - VERIFY(m.stride(0) == strides[0]); - VERIFY(m.stride(1) == strides[1]); - VERIFY(m.stride(2) == strides[2]); - VERIFY(m.strides() == strides); + TestStride3D::run(); } template @@ -411,7 +517,8 @@ template test_has_stride_0d() { using Mapping = typename Layout::mapping>; - constexpr bool expected = std::is_same_v; + constexpr bool expected = !(std::is_same_v + || std::is_same_v); static_assert(has_stride == expected); } @@ -555,16 +662,56 @@ template test_has_op_eq(); } +#if __cplusplus > 202302L +template typename Layout> + constexpr bool + test_padded_all() + { + test_all>(); + test_all>(); + test_all>(); + test_all>(); + test_all>(); + return true; + } + +template typename Layout> + constexpr bool + test_padded_has_op_eq() + { + using Traits = LayoutTraits()>; + test_has_op_eq, false>(); + test_has_op_eq, false>(); + test_has_op_eq, false>(); + // The next one looks strange, because it's neither. Somehow, the + // conversion rules seem to be playing a critical role again. + // test_has_op_eq, false>(); + + test_has_op_eq, Layout<6>, true>(); + test_has_op_eq, Layout, true>(); + return true; + } +#endif + int main() { test_all(); test_all(); test_all(); +#if __cplusplus > 202302L + test_padded_all(); + test_padded_all(); +#endif test_has_op_eq(); test_has_op_eq(); test_has_op_eq(); +#if __cplusplus > 202302L + test_padded_has_op_eq(); + test_padded_has_op_eq(); +#endif + test_has_op_eq_peculiar(); return 0; } diff --git a/libstdc++-v3/testsuite/23_containers/mdspan/layouts/padded.cc b/libstdc++-v3/testsuite/23_containers/mdspan/layouts/padded.cc new file mode 100644 index 000000000000..cf4821a3c74f --- /dev/null +++ b/libstdc++-v3/testsuite/23_containers/mdspan/layouts/padded.cc @@ -0,0 +1,677 @@ +// { dg-do run { target c++26 } } +#include + +#include +#include "../int_like.h" +#include "padded_traits.h" +#include + +constexpr size_t dyn = std::dynamic_extent; + +template typename Layout> + constexpr bool + test_representable_padded_size() + { + using Traits = LayoutTraits()>; + { + using E = typename Traits::extents_type>; + [[maybe_unused]] typename Layout<1>::mapping m1; + } + + { + using E = typename Traits::extents_type>; + [[maybe_unused]] typename Layout<0>::mapping m1; + [[maybe_unused]] typename Layout<1>::mapping m2; + [[maybe_unused]] typename Layout<128>::mapping m3; + [[maybe_unused]] typename Layout<255>::mapping m4; + } + + { + using E = typename Traits::extents_type>; + [[maybe_unused]] typename Layout::mapping m1(E{}, 0); + [[maybe_unused]] typename Layout::mapping m2(E{}, 1); + [[maybe_unused]] typename Layout::mapping m3(E{}, 128); + [[maybe_unused]] typename Layout::mapping m4(E{}, 255); + } + + { + using E = typename Traits::extents_type>; + [[maybe_unused]] typename Layout<0>::mapping m1; + [[maybe_unused]] typename Layout<1>::mapping m2; + [[maybe_unused]] typename Layout<128>::mapping m3; + [[maybe_unused]] typename Layout<255>::mapping m4; + } + return true; + } + +template + constexpr void + test_default_ctor_single(auto canonical_strides) + { + using Traits = LayoutTraits()>; + using E = typename Traits::extents_type; + auto strides = Traits::make_array(canonical_strides); + + typename Layout::template mapping msta; + VERIFY(msta.stride(0) == strides[0]); + VERIFY(msta.stride(1) == strides[1]); + } + + +template typename Layout> + constexpr bool + test_default_ctor() + { + using E1 = std::extents; + test_default_ctor_single, E1>(std::array{1, 4}); + test_default_ctor_single, E1>(std::array{1, 3}); + + using E2 = std::extents; + test_default_ctor_single, E2>(std::array{1, 0}); + test_default_ctor_single, E2>(std::array{1, 0}); + return true; + } + +template typename Layout> + constexpr bool + test_from_exts() + { + using Traits = LayoutTraits()>; + auto exts = Traits::make_extents(std::dextents{3, 5}); + + typename Layout<0>::mapping m0_sta(exts); + VERIFY(Traits::padded_stride(m0_sta) == Traits::padded_extent(exts)); + + typename Layout<1>::mapping m1_sta(exts); + VERIFY(Traits::padded_stride(m1_sta) == Traits::padded_extent(exts)); + + typename Layout<2>::mapping m2_sta(exts); + VERIFY(Traits::padded_stride(m2_sta) == 4); + + typename Layout::mapping mdyn(exts); + VERIFY(Traits::padded_stride(mdyn) == Traits::padded_extent(exts)); + return true; + } + +template + constexpr bool + test_from_pad_single() + { + using Traits = LayoutTraits()>; + auto pad = 3; + auto exts = Traits::make_extents(std::dextents{pad + 1, 5, 7}); + typename Layout::mapping m(exts, CustomPadType{pad}); + VERIFY(std::cmp_equal(Traits::padded_stride(m), 2*pad)); + VERIFY(m.extents() == exts); + return true; + } + +template + constexpr void + test_from_pad() + { + test_from_pad_single(); + static_assert(test_from_pad_single()); + + test_from_pad_single(); + test_from_pad_single(); + test_from_pad_single(); + + using Extents = std::dims<3>; + using Mapping = Layout::template mapping; + static_assert(!std::is_constructible_v); + static_assert(!std::is_constructible_v); + } + +template typename Layout> + constexpr void + test_from_pad_all() + { + test_from_pad>(); + test_from_pad>(); + } + +constexpr bool +is_same_mapping(const auto& lhs, const auto& rhs) +{ + if (lhs.extents().rank() != rhs.extents().rank()) + return false; + + if (lhs.extents() != rhs.extents()) + return false; + + for (size_t i = 0; i < lhs.extents().rank(); ++i) + if (lhs.stride(i) != rhs.stride(i)) + return false; + return true; +} + +enum class ConversionRule +{ + Never, + Always, + Regular +}; + +template +consteval bool +should_convert(auto rule) +{ + if constexpr (rule == ConversionRule::Never) + return false; + if constexpr (rule == ConversionRule::Always) + return true; + else + return std::is_convertible_v; +} + +template + constexpr void + check_convertible(const From& m, auto conversion_rule) + { + VERIFY(is_same_mapping(m, To(m))); + constexpr bool expected = should_convert(conversion_rule); + static_assert(std::is_convertible_v == expected); + } + +template + constexpr void + check_convertible_variants(auto msta, auto conversion_rule) + { + using LayoutFrom = decltype(msta)::layout_type; + constexpr auto cregular = std::cw; + + // There's a twist when both mappings are left-padded. There's two distinct + // ctors: a defaulted copy ctor and a constrained template that enables + // construction from left-padded mappings even if their layout_type is + // different. The two ctors have different rules regarding conversion. + + if constexpr (!std::same_as) + check_convertible>(msta, conversion_rule); + else + check_convertible>(msta, cregular); + + check_convertible>(msta, conversion_rule); + + auto mdyn = typename LayoutFrom::mapping(msta); + check_convertible>(mdyn, conversion_rule); + if constexpr (!std::same_as) + check_convertible>(mdyn, conversion_rule); + else + check_convertible>(mdyn, cregular); + + static_assert(!std::is_constructible_v< + typename LayoutTo::mapping, typename LayoutFrom::mapping>); + }; + +template + constexpr void + test_from_same_1d() + { + using E1 = std::extents; + using E2 = std::extents; + using E3 = std::extents; + constexpr auto cr = std::cw; + + using Traits = LayoutTraits()>; + auto msta = typename Traits::layout_same::mapping(E1{}); + check_convertible_variants(msta, cr); + } + +template + constexpr void + test_from_same_2d() + { + using Traits = LayoutTraits()>; + using E1 = typename Traits::extents_type>; + using E2 = typename Traits::extents_type>; + using E3 = typename Traits::extents_type>; + constexpr auto cr = std::cw; + + auto msta = typename Traits::layout_same::mapping(E1{}); + check_convertible_variants(msta, cr); + } + +template typename Layout> +constexpr bool +test_from_same() +{ + auto check = [](PaddedLayout) + { + test_from_same_1d(); + test_from_same_2d(); + }; + + check(Layout<0>{}); + check(Layout<1>{}); + check(Layout<2>{}); + check(Layout<6>{}); + check(Layout{}); + + // rank == 1 is more permissive: + test_from_same_1d>(); + return true; +} + +template typename Layout, typename E1_, typename E2_, + typename E3_> + constexpr bool + test_from_stride_nd(auto strides_) + { + using Traits = LayoutTraits()>; + using E1 = typename Traits::extents_type; + using E2 = typename Traits::extents_type; + using E3 = typename Traits::extents_type; + auto strides = Traits::make_array(strides_); + + auto check = [&strides](PaddedLayout) + { + auto exts = E1{}; + constexpr auto cr = std::cw; + + auto m = std::layout_stride::mapping(exts, strides); + check_convertible_variants(m, cr); + }; + + check(Layout<0>{}); + check(Layout<1>{}); + check(Layout<2>{}); + check(Layout<6>{}); + check(Layout{}); + return true; + } + +template typename Layout> + constexpr bool + test_from_stride_2d() + { + using E1 = std::extents; + using E2 = std::dims<2>; + using E3 = std::extents; + + auto strides = std::array{1, 6}; + test_from_stride_nd(strides); + return true; + } + +template typename Layout> + constexpr bool + test_from_stride_3d() + { + using E1 = std::extents; + using E2 = std::dims<3>; + using E3 = std::extents; + + auto strides = std::array{1, 6, 6*5}; + test_from_stride_nd(strides); + return true; + } + +template typename Layout> + constexpr bool + test_from_stride() + { + test_from_stride_2d(); + test_from_stride_3d(); + return true; + } + +template typename Layout> + constexpr void + test_from_samepad_0d() + { + using E1 = std::extents; + using E2 = std::extents; + using E3 = std::extents; + + typename Layout<6>::mapping msta{E1{}}; + + auto check = [](To, auto m) + { + constexpr auto cr = std::cw; + check_convertible_variants(m, cr); + }; + + check(Layout<6>{}, msta); + check(Layout{}, msta); + } + +template typename Layout> + constexpr void + test_from_samepad_1d() + { + using E1 = std::extents; + using E2 = std::extents; + using E3 = std::extents; + + typename Layout<6>::mapping msta{E1{}}; + typename Layout::mapping mdyn{E1{}}; + + auto check = [](To, auto m) + { + constexpr auto cr = std::cw; + check_convertible_variants(m, cr); + }; + + // Remember, for rank <= 1 the padding_value is irrelevant. + check(Layout<6>{}, msta); + check(Layout<6>{}, mdyn); + check(Layout{}, msta); + check(Layout{}, mdyn); + } + +template typename Layout> + constexpr void + test_from_samepad_2d() + { + using Traits = LayoutTraits()>; + using E1 = typename Traits::extents_type>; + using E2 = typename Traits::extents_type>; + using E3 = typename Traits::extents_type>; + + typename Layout<6>::mapping msta{E1{}}; + typename Layout::mapping mdyn{E1{}}; + + constexpr auto calways = std::cw; + constexpr auto cnever = std::cw; + + auto check = [](To, auto m, auto cr) + { check_convertible_variants(m, cr); }; + + check(Layout<6>{}, msta, cnever); + check(Layout<6>{}, mdyn, cnever); + check(Layout{}, msta, calways); + check(Layout{}, mdyn, cnever); + } + +template typename Layout> + constexpr bool + test_from_samepad() + { + test_from_samepad_0d(); + test_from_samepad_1d(); + test_from_samepad_2d(); + return true; + } + +template typename Layout> + constexpr bool + test_from_other() + { + using Traits = LayoutTraits()>; + using E1 = std::extents; + using E2 = std::dims<1>; + using E3 = std::extents; + + auto check = [](PaddedLayout) + { + constexpr auto cr = std::cw; + + using layout_other = typename Traits::layout_other; + auto msta = typename layout_other::mapping(E1{}); + check_convertible_variants(msta, cr); + }; + + + // Remember, the padding_value has no effect for rank <= 1. + check(Layout<0>{}); + check(Layout<1>{}); + check(Layout<2>{}); + check(Layout<5>{}); + check(Layout<6>{}); + check(Layout{}); + return true; + } + +template typename Layout> + constexpr bool + test_to_same() + { + using Traits = LayoutTraits()>; + using E1 = typename Traits::extents_type>; + using E2 = typename Traits::extents_type>; + using E3 = typename Traits::extents_type>; + + auto check = [](auto msta) + { + constexpr auto cr = std::cw; + using LayoutSame = typename Traits::layout_same; + check_convertible_variants(msta, cr); + }; + + check(typename Layout<0>::mapping(E1{})); + check(typename Layout<2>::mapping(E1{})); + check(typename Layout<6>::mapping(E1{})); + check(typename Layout::mapping(E1{}, 0)); + check(typename Layout::mapping(E1{}, 2)); + check(typename Layout::mapping(E1{}, 6)); + return true; + } + +template typename Layout> + constexpr bool + test_never_to_other() + { + using Traits = LayoutTraits()>; + using E1 = std::extents; + using E2 = std::dims<1>; + + auto check = [](PaddedLayout, auto exts) + { + using LayoutOther = typename Traits::layout_other; + auto mr = typename LayoutOther::mapping(exts); + auto mlp = typename PaddedLayout::mapping{mr}; + static_assert(!std::is_constructible_v); + }; + + check(Layout<2>{}, E1{}); + check(Layout<2>{}, E2{E1{}}); + return true; + } + +template + constexpr void + test_strides() + { + auto check = [](auto exts) + { + auto m = typename Layout::mapping(exts); + using IndexType = typename decltype(m)::index_type; + constexpr size_t rank = decltype(m)::extents_type::rank(); + + auto strides = m.strides(); + static_assert(std::same_as>); + VERIFY(strides.size() == rank); + for (size_t i = 0; i < strides.size(); ++i) + VERIFY(strides[i] == m.stride(i)); + }; + + check(std::extents()); + check(std::extents(0)); + check(std::extents(3)); + check(std::extents(3, 5, 7)); + check(std::extents(3, 0, 7)); + } + +template typename Layout> + constexpr bool + test_strides_all() + { + test_strides>(); + test_strides>(); + test_strides>(); + test_strides>(); + return true; + } + +template typename Layout> + constexpr void + test_exhaustive_0d() + { + auto exts = std::extents{}; + + auto check = [](auto m) + { + static_assert(m.is_always_exhaustive()); + VERIFY(m.is_exhaustive()); + }; + + check(typename Layout<0>::mapping(exts)); + check(typename Layout<1>::mapping(exts)); + check(typename Layout<2>::mapping(exts)); + check(typename Layout::mapping(exts)); + } + +template typename Layout> +constexpr void + test_exhaustive_1d() + { + auto check_dyn_and_sta = [](PaddedLayout) + { + auto check = [](auto exts) + { + auto m = typename PaddedLayout::mapping(exts); + static_assert(m.is_always_exhaustive()); + VERIFY(m.is_exhaustive()); + }; + + check(std::extents(4)); + check(std::extents{}); + }; + + check_dyn_and_sta(Layout<1>{}); + check_dyn_and_sta(Layout<2>{}); + check_dyn_and_sta(Layout<6>{}); + check_dyn_and_sta(Layout{}); + } + +template typename Layout> + constexpr void + test_exhaustive_3d() + { + using Traits = LayoutTraits()>; + auto exts_dyn = Traits::make_extents(std::extents(4, 5, 7)); + auto exts_sta = Traits::make_extents(std::extents{}); + auto ctrue = std::cw; + auto cfalse= std::cw; + + auto check = [](auto m, auto static_expected, auto runtime_expected) + { + static_assert(m.is_always_exhaustive() == static_expected); + VERIFY(m.is_exhaustive() == runtime_expected); + }; + + check(typename Layout<0>::mapping(exts_sta), ctrue, true); + check(typename Layout<0>::mapping(exts_dyn), cfalse, true); + check(typename Layout<1>::mapping(exts_sta), ctrue, true); + check(typename Layout<1>::mapping(exts_dyn), cfalse, true); + check(typename Layout<2>::mapping(exts_sta), ctrue, true); + check(typename Layout<2>::mapping(exts_dyn), cfalse, true); + check(typename Layout<6>::mapping(exts_dyn), cfalse, false); + check(typename Layout<6>::mapping(exts_sta), cfalse, false); + check(typename Layout::mapping(exts_sta), cfalse, true); + check(typename Layout::mapping(exts_dyn, 2), cfalse, true); + check(typename Layout::mapping(exts_dyn, 3), cfalse, false); + } + +template typename Layout> + constexpr bool + test_exhaustive() + { + test_exhaustive_0d(); + test_exhaustive_1d(); + test_exhaustive_3d(); + return true; + } + +template typename Layout> + constexpr bool + test_op_eq() + { + // The generic cases are handled in layouts/mapping.cc. Here we check + // special cases related to non exhaustive layouts. + using Traits = LayoutTraits()>; + + auto exts_sta = Traits::make_extents(std::extents{}); + auto exts_dyn = std::dims<3>(exts_sta); + auto exts_other = Traits::make_extents(std::extents{}); + + auto m1 = typename Layout<0>::mapping(exts_sta); + auto m2 = typename Layout<7>::mapping(exts_sta); + + VERIFY(m1 == typename Layout<0>::mapping(exts_sta)); + VERIFY(m1 == typename Layout<1>::mapping(exts_sta)); + VERIFY(m1 == typename Layout<2>::mapping(exts_sta)); + VERIFY(m1 == typename Layout<6>::mapping(exts_sta)); + VERIFY(m1 != typename Layout<7>::mapping(exts_sta)); + VERIFY(m1 == typename Layout::mapping(exts_sta)); + VERIFY(m1 != typename Layout::mapping(exts_sta, 7)); + + VERIFY(m1 == typename Layout<0>::mapping(exts_dyn)); + VERIFY(m1 == typename Layout<1>::mapping(exts_dyn)); + VERIFY(m1 == typename Layout<2>::mapping(exts_dyn)); + VERIFY(m1 == typename Layout<6>::mapping(exts_dyn)); + VERIFY(m1 != typename Layout<7>::mapping(exts_dyn)); + VERIFY(m1 == typename Layout::mapping(exts_dyn)); + VERIFY(m1 != typename Layout::mapping(exts_dyn, 7)); + + VERIFY(m2 == typename Layout<7>::mapping(exts_sta)); + VERIFY(m2 == typename Layout::mapping(exts_sta, 7)); + VERIFY(m2 == typename Layout<7>::mapping(exts_dyn)); + VERIFY(m2 == typename Layout::mapping(exts_dyn, 7)); + + VERIFY(m2 != typename Layout<7>::mapping(exts_other)); + VERIFY(m2 != typename Layout::mapping(exts_other, 7)); + return true; + } + +template typename Layout> + constexpr bool + test_required_span_size_overflow() + { + using Traits = LayoutTraits()>; + using Extents = std::dextents; + auto exts = Traits::make_extents(Extents{64, 2}); + auto strides = Traits::make_array(std::array{1, 128}); + auto ms = std::layout_stride::mapping(exts, strides); + auto m = typename Layout::mapping(ms); + VERIFY(is_same_mapping(m, ms)); + VERIFY(m.required_span_size() == ms.required_span_size()); + return true; + } + +template typename Layout> + constexpr bool + test_all() + { + test_representable_padded_size(); + test_default_ctor(); + test_from_exts(); + test_from_stride(); + test_from_samepad(); + test_from_same(); + test_from_other(); + test_to_same(); + test_never_to_other(); + test_strides_all(); + test_exhaustive(); + test_op_eq(); + test_required_span_size_overflow(); + return true; + } + +int +main() +{ + test_all(); + static_assert(test_all()); + + test_all(); + static_assert(test_all()); + + test_from_pad_all(); + test_from_pad_all(); + return 0; +} diff --git a/libstdc++-v3/testsuite/23_containers/mdspan/layouts/padded_neg.cc b/libstdc++-v3/testsuite/23_containers/mdspan/layouts/padded_neg.cc new file mode 100644 index 000000000000..a758f74287f2 --- /dev/null +++ b/libstdc++-v3/testsuite/23_containers/mdspan/layouts/padded_neg.cc @@ -0,0 +1,352 @@ +// { dg-do compile { target c++26 } } +#include + +#include "padded_traits.h" +#include + +constexpr size_t dyn = std::dynamic_extent; + +template typename Layout> + constexpr bool + test_from_extens_representable_sta() + { + using E1 = std::extents; + auto m = typename Layout::mapping(E1{}); // { dg-error "required from" } + return true; + } +static_assert(test_from_extens_representable_sta()); // { dg-error "from here" } +static_assert(test_from_extens_representable_sta()); // { dg-error "from here" } + +template typename Layout> + constexpr bool + test_from_extents_representable_padded_size() + { + using E1 = std::extents; + using E2 = std::dextents; + + auto m = typename Layout::mapping(E2{E1{}}); // { dg-error "expansion of" } + (void) m; + return true; + } +static_assert(test_from_extents_representable_padded_size()); // { dg-error "expansion of" } +static_assert(test_from_extents_representable_padded_size()); // { dg-error "expansion of" } + +template typename Layout> + constexpr bool + test_from_extents_representable_stride() + { + using Traits = LayoutTraits()>; + using E1 = typename Traits::extents_type>; + auto m = typename Layout<128>::mapping(E1{129}); // { dg-error "expansion of" } + (void) m; + return true; + } +static_assert(test_from_extents_representable_stride()); // { dg-error "expansion of" } +static_assert(test_from_extents_representable_stride()); // { dg-error "expansion of" } + +template typename Layout> + constexpr bool + test_from_pad_representable_stride() + { + using Traits = LayoutTraits()>; + auto exts = Traits::make_extents(std::dextents(129, 2)); + auto m = typename Layout::mapping(exts, 128); // { dg-error "expansion of" } + return true; + } +static_assert(test_from_pad_representable_stride()); // { dg-error "expansion of" } +static_assert(test_from_pad_representable_stride()); // { dg-error "expansion of" } + +template typename Layout> + constexpr bool + test_from_pad_representable_padded_size() + { + using Traits = LayoutTraits()>; + auto exts = Traits::make_extents(std::dextents(64, 2)); + auto m = typename Layout::mapping(exts, 128); // { dg-error "expansion of" } + return true; + } +static_assert(test_from_pad_representable_padded_size()); // { dg-error "expansion of" } +static_assert(test_from_pad_representable_padded_size()); // { dg-error "expansion of" } + +template typename Layout> + constexpr bool + test_from_left() + { + using Traits = LayoutTraits()>; + using LayoutSame = typename Traits::layout_same; + auto exts = Traits::make_extents(std::extents{4}); + auto ml = typename LayoutSame::mapping(exts); + + typename Layout<4>::mapping m(ml); // { dg-error "expansion of" } + return true; + } +static_assert(test_from_left()); // { dg-error "required from here" } +static_assert(test_from_left()); // { dg-error "required from here" } + +template typename Layout> + constexpr bool + test_from_left_bad_runtime_stride() + { + using Traits = LayoutTraits()>; + auto exts = Traits::make_extents(std::extents{6, 4}); + auto ml = typename Traits::layout_same::mapping(exts); + + typename Layout<4>::mapping m(ml); // { dg-error "expansion of" } + (void) m; + return true; + } +static_assert(test_from_left_bad_runtime_stride()); // { dg-error "expansion of" } +static_assert(test_from_left_bad_runtime_stride()); // { dg-error "expansion of" } + +template typename Layout> + constexpr bool + test_from_left_representable_extents() + { + using Traits = LayoutTraits()>; + auto exts = Traits::make_extents(std::extents{8, 128}); + auto ml = typename Traits::layout_same::mapping(exts); + + typename Layout<8>::mapping> m(ml); // { dg-error "expansion of" } + return true; + } +static_assert(test_from_left_representable_extents()); // { dg-error "expansion of" } +static_assert(test_from_left_representable_extents()); // { dg-error "expansion of" } + +template typename Layout, size_t PaddingValue> + constexpr bool + test_pad_overflow() + { + auto exts = std::extents{4}; + auto n = size_t(1) << 9; + auto m = typename Layout::mapping(exts, n); + (void) m; + return true; + } +static_assert(test_pad_overflow()); // { dg-error "expansion of" } +static_assert(test_pad_overflow()); // { dg-error "expansion of" } +static_assert(test_pad_overflow()); // { dg-error "expansion of" } +static_assert(test_pad_overflow()); // { dg-error "expansion of" } + +template typename Layout, size_t PaddingValue> + constexpr bool + test_from_pad_negative() + { + auto exts = std::extents(4); + auto m = typename Layout::mapping(exts, -1); + (void) m; + return true; + } +static_assert(test_from_pad_negative()); // { dg-error "expansion of" } +static_assert(test_from_pad_negative()); // { dg-error "expansion of" } +static_assert(test_from_pad_negative()); // { dg-error "expansion of" } +static_assert(test_from_pad_negative()); // { dg-error "expansion of" } + +template typename Layout, size_t Pad> + constexpr bool + test_static_pad_same() + { + using Extents = std::extents; + using Mapping = typename Layout::mapping; + auto exts = Extents{4}; + auto m = Mapping(exts, Pad + 1); // { dg-error "expansion of" } + (void) m; + return true; + } +static_assert(test_static_pad_same()); // { dg-error "expansion of" } +static_assert(test_static_pad_same()); // { dg-error "expansion of" } +static_assert(test_static_pad_same()); // { dg-error "expansion of" } +static_assert(test_static_pad_same()); // { dg-error "expansion of" } + +template typename Layout> + constexpr bool + test_from_stride_wrong_stride0() + { + using Traits = LayoutTraits()>; + auto e = Traits::make_extents(std::extents{3, 5}); + auto s = Traits::make_array(std::array{2, 7}); + auto ms = std::layout_stride::mapping(e, s); + auto m = typename Layout::mapping(ms); // { dg-error "expansion of" } + (void) m; + return true; + } +static_assert(test_from_stride_wrong_stride0()); // { dg-error "expansion of" } +static_assert(test_from_stride_wrong_stride0()); // { dg-error "expansion of" } + +template typename Layout> + constexpr bool + test_from_stride_wrong_stride1() + { + using Traits = LayoutTraits()>; + auto e = Traits::make_extents(std::extents(3, 5)); + auto s = Traits::make_array(std::array{1, 3}); + auto ms = std::layout_stride::mapping(e, s); + auto m = typename Layout<2>::mapping(ms); // { dg-error "expansion of" } + (void) m; + return true; + } +static_assert(test_from_stride_wrong_stride1()); // { dg-error "expansion of" } +static_assert(test_from_stride_wrong_stride1()); // { dg-error "expansion of" } + +template typename Layout> + constexpr bool + test_from_stride_wrong_stride2() + { + using Traits = LayoutTraits()>; + auto e = Traits::make_extents(std::extents(3, 5, 7)); + auto s = Traits::make_array(std::array{1, 4, 21}); + auto ms = std::layout_stride::mapping(e, s); + auto m = typename Layout::mapping(ms); // here (not implemented) + (void) m; + return true; + } +static_assert(test_from_stride_wrong_stride2()); +static_assert(test_from_stride_wrong_stride2()); + +template typename Layout> + constexpr bool + test_from_stride_oversized() + { + using Traits = LayoutTraits()>; + auto exts = Traits::make_extents(std::extents{3, 6}); + auto s = Traits::make_array(std::array{1, 128}); + auto ms = std::layout_stride::mapping(exts, s); + + using Mapping = typename Layout::mapping>; + Mapping m(ms); // { dg-error "expansion of" } + (void) m; + return true; + } +static_assert(test_from_stride_oversized()); // { dg-error "expansion of" } +static_assert(test_from_stride_oversized()); // { dg-error "expansion of" } + +template typename Layout> + constexpr bool + test_from_samepad_dyn() + { + using Traits = LayoutTraits()>; + auto e = Traits::make_extents(std::extents(3, 5)); + auto mlp = typename Layout::mapping(e); + auto m = typename Layout<2>::mapping(mlp); // { dg-error "expansion of" } + (void) m; + return true; + } +static_assert(test_from_samepad_dyn()); // { dg-error "expansion of" } +static_assert(test_from_samepad_dyn()); // { dg-error "expansion of" } + +template typename Layout> + constexpr bool + test_from_samepad_sta() + { + using Traits = LayoutTraits()>; + auto e = Traits::make_extents(std::extents{3, 5}); + auto mlp = typename Layout<3>::mapping(e); + auto m = typename Layout<2>::mapping(mlp); // { dg-error "expansion of" } + (void) m; + return true; + } +static_assert(test_from_samepad_sta()); // { dg-error "expansion of" } +static_assert(test_from_samepad_sta()); // { dg-error "expansion of" } + +template typename Layout> + constexpr bool + test_from_samepad_oversized() + { + using Traits = LayoutTraits()>; + using E1 = typename Traits::extents_type>; + using E2 = typename Traits::extents_type>; + auto mlp = typename Layout::mapping(E1{}); + auto m = typename Layout::mapping(mlp); // { dg-error "expansion of" } + (void) m; + return true; + } +static_assert(test_from_samepad_oversized()); // { dg-error "expansion of" } +static_assert(test_from_samepad_oversized()); // { dg-error "expansion of" } + +template typename Layout, size_t RunId> + constexpr bool + test_to_same_not_exhaustive() + { + using Traits = LayoutTraits()>; + using E1 = typename Traits::extents_type>; + using E2 = typename Traits::extents_type>; + + [[maybe_unused]] auto msta = typename Layout<7>::mapping(E1{}); + if constexpr (RunId == 0) + { + auto m = typename Traits::layout_same::mapping(msta); // { dg-error "required from" } + (void) m; + } + if constexpr (RunId == 1) + { + auto m = typename Traits::layout_same::mapping(msta); // { dg-error "expansion of" } + (void) m; + } + + [[maybe_unused]] auto mdyn = typename Layout::mapping(E2{E1{}}, 7); + if constexpr (RunId == 2) + { + auto m = typename Traits::layout_same::mapping(mdyn); // { dg-error "expansion of" } + (void) m; + } + if constexpr (RunId == 3) + { + auto m = typename Traits::layout_same::mapping(mdyn); // { dg-error "expansion of" } + (void) m; + } + return true; + } +static_assert(test_to_same_not_exhaustive()); // { dg-error "expansion of" } +static_assert(test_to_same_not_exhaustive()); // { dg-error "expansion of" } +static_assert(test_to_same_not_exhaustive()); // { dg-error "expansion of" } +static_assert(test_to_same_not_exhaustive()); // { dg-error "expansion of" } +static_assert(test_to_same_not_exhaustive()); // { dg-error "expansion of" } +static_assert(test_to_same_not_exhaustive()); // { dg-error "expansion of" } +static_assert(test_to_same_not_exhaustive()); // { dg-error "expansion of" } +static_assert(test_to_same_not_exhaustive()); // { dg-error "expansion of" } + +template typename Layout> + constexpr bool + test_statically_bad_padding_value1() + { + using Traits = LayoutTraits()>; + constexpr auto N = std::numeric_limits::max() - 1; + using Extents = typename Traits::extents_type>; + typename Layout<10>::mapping m; // { dg-error "required from" } + return true; + } +static_assert(test_statically_bad_padding_value1()); // { dg-error "required from" } +static_assert(test_statically_bad_padding_value1()); // { dg-error "required from" } + +template typename Layout> + constexpr bool + test_statically_bad_padding_value2() + { + using Traits = LayoutTraits()>; + using Extents = typename Traits::extents_type>; + typename Layout<2>::mapping m; // { dg-error "required from" } + return true; + } +static_assert(test_statically_bad_padding_value2()); // { dg-error "required from" } +static_assert(test_statically_bad_padding_value2()); // { dg-error "required from" } + +template typename Layout> + constexpr bool + test_statically_oversized() + { + using Traits = LayoutTraits()>; + using Extents = typename Traits::extents_type>; + typename Layout<2>::mapping m; // { dg-error "required from" } + return true; + } +static_assert(test_statically_oversized()); // { dg-error "from here" } +static_assert(test_statically_oversized()); // { dg-error "from here" } + +// { dg-prune-output "padding_value must be representable as index_type" } +// { dg-prune-output "non-constant condition for static assertion" } +// { dg-prune-output "called in a constant expression" } +// { dg-prune-output "no matching function" } +// { dg-prune-output "static assertion failed" } +// { dg-prune-output "__glibcxx_assert_fail()" } +// { dg-prune-output "must be compatible with other.stride" } +// { dg-prune-output "padding_value is dynamic_extent" } +// { dg-prune-output "_S_rank <= 1" } diff --git a/libstdc++-v3/testsuite/23_containers/mdspan/layouts/padded_traits.h b/libstdc++-v3/testsuite/23_containers/mdspan/layouts/padded_traits.h new file mode 100644 index 000000000000..788ae82fcc49 --- /dev/null +++ b/libstdc++-v3/testsuite/23_containers/mdspan/layouts/padded_traits.h @@ -0,0 +1,149 @@ +#ifndef TEST_MDSPAN_PADDED_TRAITS_H +#define TEST_MDSPAN_PADDED_TRAITS_H + +#include + +template + constexpr static bool is_left_padded = false; + +#if __cplusplus > 202302L +template + constexpr static bool is_left_padded> + = true; +#endif + +template + constexpr static bool is_right_padded = false; + +#if __cplusplus > 202302L +template + constexpr static bool is_right_padded> + = true; +#endif + +template + constexpr bool + is_padded_layout = is_left_padded || is_right_padded; + +#if __cplusplus > 202302L +template + constexpr auto + dynamic_extents_array(const Extents& exts) + { + std::array ret; + for(size_t i = 0; i < Extents::rank(); ++i) + ret[i] = exts.extent(i); + return ret; + } + +enum class PaddingSide +{ + Left, + Right +}; + +struct DeducePaddingSide +{ + template typename Layout> + constexpr static PaddingSide + from_template() + { + if constexpr (std::same_as, std::layout_left_padded<0>>) + return PaddingSide::Left; + else + return PaddingSide::Right; + } + + template + constexpr static PaddingSide + from_typename() + { + if constexpr (is_left_padded) + return PaddingSide::Left; + else + return PaddingSide::Right; + } +}; + +template + struct LayoutTraits; + +template<> + struct LayoutTraits + { + using layout_same = std::layout_left; + using layout_other = std::layout_right; + + template + using extents_type = Extents; + + template + constexpr static extents_type + make_extents(const Extents& exts) + { return exts; } + + template + constexpr static std::array + make_array(const std::array& expected) + { return expected; } + + template + constexpr static auto + padded_stride(const Mapping& m) + { return m.stride(1); } + + template + constexpr static auto + padded_extent(const Extents& exts) + { return exts.extent(0); } + }; + +template<> + struct LayoutTraits + { + using layout_same = std::layout_right; + using layout_other = std::layout_left; + + template + constexpr static auto + make_extents(const std::extents& exts) + { + constexpr size_t rank = sizeof...(Extents); + auto impl = [&](std::index_sequence) + { + auto dyn_exts = make_array(dynamic_extents_array(exts)); + return std::extents(dyn_exts); + }; + return impl(std::make_index_sequence()); + } + + template + using extents_type = decltype(make_extents(std::declval())); + + template + constexpr static std::array + make_array(std::array a) + { + std::ranges::reverse(a); + return a; + } + + template + constexpr static auto + padded_stride(const Mapping& m) + { + auto rank = Mapping::extents_type::rank(); + return m.stride(rank - 2); + } + + template + constexpr static auto + padded_extent(const Extents& exts) + { + auto rank = Extents::rank(); + return exts.extent(rank - 1); + } + }; + +#endif +#endif diff --git a/libstdc++-v3/testsuite/23_containers/mdspan/mdspan.cc b/libstdc++-v3/testsuite/23_containers/mdspan/mdspan.cc index ca100b4f314a..a92a05544170 100644 --- a/libstdc++-v3/testsuite/23_containers/mdspan/mdspan.cc +++ b/libstdc++-v3/testsuite/23_containers/mdspan/mdspan.cc @@ -304,8 +304,7 @@ test_from_pointer_and_constant() auto c3 = std::constant_wrapper<3>{}; verify(std::mdspan(ptr, 2, c3), std::extents(2, i3)); verify(std::mdspan(ptr, 2, std::cw<3>), std::extents(2, i3)); - verify(std::mdspan(ptr, std::cw, std::cw<3>), - std::extents(std::cw<1>, i3)); + verify(std::mdspan(ptr, std::cw, std::cw<3>), std::extents(1, i3)); #endif return true; } diff --git a/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/strided_slice.cc b/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/strided_slice.cc new file mode 100644 index 000000000000..c43a82143214 --- /dev/null +++ b/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/strided_slice.cc @@ -0,0 +1,46 @@ +// { dg-do run { target c++26 } } +#include + +#include +#include + +constexpr void +check_strided_slice(auto s, auto offset, auto extent, auto stride) +{ + using slice_type = std::strided_slice; + static_assert(std::same_as); + VERIFY(s.offset == offset); + VERIFY(s.extent == extent); + VERIFY(s.stride == stride); +} + +constexpr void +test_initializers(auto offset, auto extent, auto stride) +{ + auto check = [&](auto s) + { + check_strided_slice(s, offset, extent, stride); + }; + + check(std::strided_slice{.offset=offset, .extent=extent, .stride=stride}); + check(std::strided_slice{offset, extent, stride}); + check(std::strided_slice(offset, extent, stride)); +} + +constexpr bool +test_all() +{ + test_initializers(0, 1, 2); + test_initializers(std::integral_constant{}, size_t{1}, std::cw<2>); + test_initializers(-1, 2, 2); + return true; +} + +int +main() +{ + test_all(); + static_assert(test_all()); + return 0; +} diff --git a/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/strided_slice_neg.cc b/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/strided_slice_neg.cc new file mode 100644 index 000000000000..0f1d791d13aa --- /dev/null +++ b/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/strided_slice_neg.cc @@ -0,0 +1,19 @@ +// { dg-do compile { target c++26 } } +#include + +#include + +template + constexpr bool + test_invalid() + { + auto s1 = std::strided_slice(OffsetType{}, ExtentType{}, StrideType{}); // { dg-error "required from" } + return true; + } + +static_assert(test_invalid()); // { dg-error "required from" } +static_assert(test_invalid()); // { dg-error "required from" } +static_assert(test_invalid()); // { dg-error "required from" } +static_assert(test_invalid()); // { dg-error "required from" } + +// { dg-prune-output "static assertion failed" } diff --git a/libstdc++-v3/testsuite/23_containers/multimap/cons/from_range.cc b/libstdc++-v3/testsuite/23_containers/multimap/cons/from_range.cc index 5907bab9878c..bb79720cdd8e 100644 --- a/libstdc++-v3/testsuite/23_containers/multimap/cons/from_range.cc +++ b/libstdc++-v3/testsuite/23_containers/multimap/cons/from_range.cc @@ -61,7 +61,7 @@ constexpr bool is_equal(std::less, std::less) { return true; } constexpr bool is_equal(StateCmp lhs, StateCmp rhs) -{ return lhs.state = rhs.state; } +{ return lhs.state == rhs.state; } constexpr auto get0 = [](auto const& t) { using std::get; @@ -103,12 +103,12 @@ do_test(Alloc alloc, Cmp cmp) std::multimap m4(std::from_range, Range(a, a+4), cmp); VERIFY( eq(m4, {a, 4}) ); VERIFY( m4.get_allocator() == Alloc() ); - VERIFY( is_equal(m4.key_comp(), Cmp()) ); + VERIFY( is_equal(m4.key_comp(), cmp) ); std::multimap m9(std::from_range, Range(a, a+9), alloc); VERIFY( eq(m9, {a, 9}) ); VERIFY( m9.get_allocator() == alloc ); - VERIFY( is_equal(m9.key_comp(), cmp) ); + VERIFY( is_equal(m9.key_comp(), Cmp()) ); std::multimap mr(std::from_range, Range(a, a+14), cmp, alloc); VERIFY( eq(mr, {a, 14}) ); diff --git a/libstdc++-v3/testsuite/23_containers/multiset/cons/from_range.cc b/libstdc++-v3/testsuite/23_containers/multiset/cons/from_range.cc index cdba7eb2d632..aa9be9c30752 100644 --- a/libstdc++-v3/testsuite/23_containers/multiset/cons/from_range.cc +++ b/libstdc++-v3/testsuite/23_containers/multiset/cons/from_range.cc @@ -48,7 +48,7 @@ constexpr bool is_equal(std::less, std::less) { return true; } constexpr bool is_equal(StateCmp lhs, StateCmp rhs) -{ return lhs.state = rhs.state; } +{ return lhs.state == rhs.state; } template constexpr void @@ -82,12 +82,12 @@ do_test(Alloc alloc, Cmp cmp) std::set s4(std::from_range, Range(a, a+4), cmp); VERIFY( eq(s4, {a, 4}) ); VERIFY( s4.get_allocator() == Alloc() ); - VERIFY( is_equal(s4.key_comp(), Cmp()) ); + VERIFY( is_equal(s4.key_comp(), cmp) ); std::set s9(std::from_range, Range(a, a+9), alloc); VERIFY( eq(s9, {a, 9}) ); VERIFY( s9.get_allocator() == alloc ); - VERIFY( is_equal(s9.key_comp(), cmp) ); + VERIFY( is_equal(s9.key_comp(), Cmp()) ); std::set sr(std::from_range, Range(a, a+14), cmp, alloc); VERIFY( eq(sr, {a, 9}) ); diff --git a/libstdc++-v3/testsuite/23_containers/set/cons/from_range.cc b/libstdc++-v3/testsuite/23_containers/set/cons/from_range.cc index efde05d729cf..23922bf28575 100644 --- a/libstdc++-v3/testsuite/23_containers/set/cons/from_range.cc +++ b/libstdc++-v3/testsuite/23_containers/set/cons/from_range.cc @@ -47,7 +47,7 @@ constexpr bool is_equal(std::less, std::less) { return true; } constexpr bool is_equal(StateCmp lhs, StateCmp rhs) -{ return lhs.state = rhs.state; } +{ return lhs.state == rhs.state; } template constexpr void @@ -81,12 +81,12 @@ do_test(Alloc alloc, Cmp cmp) std::set s4(std::from_range, Range(a, a+4), cmp); VERIFY( eq(s4, {a, 4}) ); VERIFY( s4.get_allocator() == Alloc() ); - VERIFY( is_equal(s4.key_comp(), Cmp()) ); + VERIFY( is_equal(s4.key_comp(), cmp) ); std::set s9(std::from_range, Range(a, a+9), alloc); VERIFY( eq(s9, {a, 9}) ); VERIFY( s9.get_allocator() == alloc ); - VERIFY( is_equal(s9.key_comp(), cmp) ); + VERIFY( is_equal(s9.key_comp(), Cmp()) ); std::set sr(std::from_range, Range(a, a+14), cmp, alloc); VERIFY( eq(sr, {a, 9}) ); diff --git a/libstdc++-v3/testsuite/23_containers/span/deduction.cc b/libstdc++-v3/testsuite/23_containers/span/deduction.cc index e958ad5d6db0..55a586254e86 100644 --- a/libstdc++-v3/testsuite/23_containers/span/deduction.cc +++ b/libstdc++-v3/testsuite/23_containers/span/deduction.cc @@ -99,6 +99,6 @@ test01() static_assert( is_static_span(s17) ); std::span s18(a.data(), std::cw); - static_assert( is_static_span(s18) ); + static_assert( is_dynamic_span(s18) ); #endif } diff --git a/libstdc++-v3/testsuite/23_containers/unordered_map/cons/from_range.cc b/libstdc++-v3/testsuite/23_containers/unordered_map/cons/from_range.cc index 04479a5e54d8..cad102e959f9 100644 --- a/libstdc++-v3/testsuite/23_containers/unordered_map/cons/from_range.cc +++ b/libstdc++-v3/testsuite/23_containers/unordered_map/cons/from_range.cc @@ -100,10 +100,10 @@ constexpr bool is_equal(std::equal_to, std::equal_to) { return true; } constexpr bool is_equal(StateHash lhs, StateHash rhs) -{ return lhs.state = rhs.state; } +{ return lhs.state == rhs.state; } constexpr bool is_equal(StateEq lhs, StateEq rhs) -{ return lhs.state = rhs.state; } +{ return lhs.state == rhs.state; } template constexpr void diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multimap/cons/from_range.cc b/libstdc++-v3/testsuite/23_containers/unordered_multimap/cons/from_range.cc index 4567bd8aa914..ab30e3c6761b 100644 --- a/libstdc++-v3/testsuite/23_containers/unordered_multimap/cons/from_range.cc +++ b/libstdc++-v3/testsuite/23_containers/unordered_multimap/cons/from_range.cc @@ -114,10 +114,10 @@ constexpr bool is_equal(std::equal_to, std::equal_to) { return true; } constexpr bool is_equal(StateHash lhs, StateHash rhs) -{ return lhs.state = rhs.state; } +{ return lhs.state == rhs.state; } constexpr bool is_equal(StateEq lhs, StateEq rhs) -{ return lhs.state = rhs.state; } +{ return lhs.state == rhs.state; } template constexpr void diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multiset/cons/from_range.cc b/libstdc++-v3/testsuite/23_containers/unordered_multiset/cons/from_range.cc index d44598d7d615..ff0547138323 100644 --- a/libstdc++-v3/testsuite/23_containers/unordered_multiset/cons/from_range.cc +++ b/libstdc++-v3/testsuite/23_containers/unordered_multiset/cons/from_range.cc @@ -85,11 +85,11 @@ constexpr bool is_equal(std::equal_to, std::equal_to) { return true; } constexpr bool is_equal(StateHash lhs, StateHash rhs) -{ return lhs.state = rhs.state; } +{ return lhs.state == rhs.state; } constexpr bool is_equal(StateEq lhs, StateEq rhs) -{ return lhs.state = rhs.state; } +{ return lhs.state == rhs.state; } template constexpr void diff --git a/libstdc++-v3/testsuite/23_containers/unordered_set/cons/from_range.cc b/libstdc++-v3/testsuite/23_containers/unordered_set/cons/from_range.cc index 8259be871f6e..e00e2fb6c0ea 100644 --- a/libstdc++-v3/testsuite/23_containers/unordered_set/cons/from_range.cc +++ b/libstdc++-v3/testsuite/23_containers/unordered_set/cons/from_range.cc @@ -84,11 +84,11 @@ constexpr bool is_equal(std::equal_to, std::equal_to) { return true; } constexpr bool is_equal(StateHash lhs, StateHash rhs) -{ return lhs.state = rhs.state; } +{ return lhs.state == rhs.state; } constexpr bool is_equal(StateEq lhs, StateEq rhs) -{ return lhs.state = rhs.state; } +{ return lhs.state == rhs.state; } template constexpr void diff --git a/libstdc++-v3/testsuite/24_iterators/range_operations/advance.cc b/libstdc++-v3/testsuite/24_iterators/range_operations/advance.cc index 2f48181fb675..8229b1ee6c16 100644 --- a/libstdc++-v3/testsuite/24_iterators/range_operations/advance.cc +++ b/libstdc++-v3/testsuite/24_iterators/range_operations/advance.cc @@ -42,7 +42,7 @@ test01() std::ranges::advance(iter, -2); VERIFY( iter == r.begin() ); - std::ranges::advance(iter, r.begin() + 1); + std::ranges::advance(iter, std::ranges::next(r.begin())); VERIFY( iter != r.begin() ); VERIFY( iter != r.end() ); std::ranges::advance(iter, r.begin()); diff --git a/libstdc++-v3/testsuite/25_algorithms/fill_n/diff_type.cc b/libstdc++-v3/testsuite/25_algorithms/fill_n/diff_type.cc new file mode 100644 index 000000000000..7265d396217d --- /dev/null +++ b/libstdc++-v3/testsuite/25_algorithms/fill_n/diff_type.cc @@ -0,0 +1,13 @@ +// { dg-do compile { target c++11 } } + +#include +#include + +void +test_pr121890() +{ + // algorithms do not use iterator's difference_type for arithmetic + int a[1]; + __gnu_test::random_access_container c(a); + std::fill_n(c.begin(), 1U, 0); +} diff --git a/libstdc++-v3/testsuite/25_algorithms/heap/constrained.cc b/libstdc++-v3/testsuite/25_algorithms/heap/constrained.cc index 5486c8552d03..2f818e2b2870 100644 --- a/libstdc++-v3/testsuite/25_algorithms/heap/constrained.cc +++ b/libstdc++-v3/testsuite/25_algorithms/heap/constrained.cc @@ -53,17 +53,17 @@ test01() iter = ranges::pop_heap(rx, pred, proj); VERIFY( iter == rx.end() ); - VERIFY( *(iter-1) == 50 ); - VERIFY( ranges::is_heap_until(rx, pred, proj) == iter-1 ); + VERIFY( *ranges::prev(iter) == 50 ); + VERIFY( ranges::is_heap_until(rx, pred, proj) == ranges::prev(iter) ); - iter = ranges::pop_heap(rx.begin(), iter-1, pred, proj); - VERIFY( iter+1 == rx.end() ); - VERIFY( *(iter-1) == 49 ); - VERIFY( ranges::is_heap_until(rx, pred, proj) == iter-1 ); + iter = ranges::pop_heap(rx.begin(), ranges::prev(iter), pred, proj); + VERIFY( ranges::next(iter) == rx.end() ); + VERIFY( *ranges::prev(iter) == 49 ); + VERIFY( ranges::is_heap_until(rx, pred, proj) == ranges::prev(iter) ); - *(iter-1) = i; + *ranges::prev(iter) = i; iter = ranges::push_heap(rx.begin(), iter, pred, proj); - VERIFY( iter+1 == rx.end() ); + VERIFY( ranges::next(iter) == rx.end() ); VERIFY( ranges::is_heap_until(rx, pred, proj) == iter ); *iter = 2*i; @@ -71,9 +71,9 @@ test01() VERIFY( iter == rx.end() ); VERIFY( ranges::is_heap_until(rx, pred, proj) == iter ); - *(rx.begin()+1) *= -1; + *ranges::next(rx.begin()) *= -1; VERIFY( !ranges::is_heap(rx, pred, proj) ); - *(rx.begin()+1) *= -1; + *ranges::next(rx.begin()) *= -1; VERIFY( ranges::is_heap(rx, pred, proj) ); iter = ranges::sort_heap(rx, pred, proj); diff --git a/libstdc++-v3/testsuite/25_algorithms/lexicographical_compare/diff_type.cc b/libstdc++-v3/testsuite/25_algorithms/lexicographical_compare/diff_type.cc new file mode 100644 index 000000000000..b790197715b6 --- /dev/null +++ b/libstdc++-v3/testsuite/25_algorithms/lexicographical_compare/diff_type.cc @@ -0,0 +1,57 @@ +// { dg-do compile { target c++11 } } + +#include +#include + +struct Iter +{ + using value_type = int; + using difference_type = short; + using iterator_category = std::random_access_iterator_tag; + using pointer = const value_type*; + using reference = const value_type&; + + Iter() : p(nullptr) { } + explicit Iter(pointer p) : p(p) { } + reference operator*() const { return *p; } + pointer operator->() const { return p; } + reference operator[](difference_type n) const { return p[n]; } + Iter& operator++() { ++p; return *this; } + Iter& operator--() { --p; return *this; } + Iter operator++(int) { return Iter(p++); } + Iter operator--(int) { return Iter(p--); } + Iter& operator+=(difference_type n) { p += n; return *this; } + Iter& operator-=(difference_type n) { p -= n; return *this; } + + friend Iter operator+(Iter i, difference_type n) { return i += n; } + friend Iter operator+(difference_type n, Iter i) { return i += n; } + friend Iter operator-(Iter i, difference_type n) { return i -= n; } + friend difference_type operator-(Iter i, Iter j) { return i.p - j.p; } + + template void operator[](D) const = delete; + template void operator+=(D) = delete; + template void operator-=(D) = delete; + template friend void operator+(Iter, difference_type) = delete; + template friend void operator+(difference_type, Iter) = delete; + template friend void operator-(Iter, difference_type) = delete; + + friend bool operator==(Iter i, Iter j) { return i.p == j.p; } + friend bool operator!=(Iter i, Iter j) { return i.p != j.p; } + friend bool operator<(Iter i, Iter j) { return i.p < j.p; } + friend bool operator<=(Iter i, Iter j) { return i.p <= j.p; } + friend bool operator>(Iter i, Iter j) { return i.p > j.p; } + friend bool operator>=(Iter i, Iter j) { return i.p >= j.p; } + +private: + pointer p; +}; + +void +test_pr121890() +{ + // algorithms do not use iterator's difference_type for arithmetic + int a[1] = { }; + __gnu_test::random_access_container c(a); + (void) std::lexicographical_compare(c.begin(), c.end(), Iter(a), Iter(a+1)); + (void) std::lexicographical_compare(Iter(a), Iter(a+1), c.begin(), c.end()); +} diff --git a/libstdc++-v3/testsuite/25_algorithms/minmax/constrained.cc b/libstdc++-v3/testsuite/25_algorithms/minmax/constrained.cc index 270fd45132d1..8f8df4314671 100644 --- a/libstdc++-v3/testsuite/25_algorithms/minmax/constrained.cc +++ b/libstdc++-v3/testsuite/25_algorithms/minmax/constrained.cc @@ -101,26 +101,26 @@ test04() auto p = ranges::minmax({1,2}, counted_less{}); VERIFY( counter == 1 ); - VERIFY( p.min = 1 ); - VERIFY( p.max = 2 ); + VERIFY( p.min == 1 ); + VERIFY( p.max == 2 ); counter = 0; p = ranges::minmax({1,2,3}, counted_less{}); VERIFY( counter == 3 ); - VERIFY( p.min = 1 ); - VERIFY( p.max = 3 ); + VERIFY( p.min == 1 ); + VERIFY( p.max == 3 ); counter = 0; p = ranges::minmax({1,2,3,4,5,6,7,8,9,10}, counted_less{}); VERIFY( counter <= 15 ); - VERIFY( p.min = 1 ); - VERIFY( p.max = 10 ); + VERIFY( p.min == 1 ); + VERIFY( p.max == 10 ); counter = 0; p = ranges::minmax({10,9,8,7,6,5,4,3,2,1}, counted_less{}); VERIFY( counter <= 15 ); - VERIFY( p.min = 1 ); - VERIFY( p.max = 10 ); + VERIFY( p.min == 1 ); + VERIFY( p.max == 10 ); } void diff --git a/libstdc++-v3/testsuite/25_algorithms/nth_element/58800.cc b/libstdc++-v3/testsuite/25_algorithms/nth_element/58800.cc index 3989ee0bbb50..ff86c63614f5 100644 --- a/libstdc++-v3/testsuite/25_algorithms/nth_element/58800.cc +++ b/libstdc++-v3/testsuite/25_algorithms/nth_element/58800.cc @@ -43,7 +43,7 @@ void test01() Container con(v.data(), v.data() + 7); - std::nth_element(con.begin(), con.begin() + 3, con.end()); + std::nth_element(con.begin(), std::next(con.begin(), 3), con.end()); } int main() diff --git a/libstdc++-v3/testsuite/25_algorithms/nth_element/constrained.cc b/libstdc++-v3/testsuite/25_algorithms/nth_element/constrained.cc index 8cb1625dd4d5..8d3a057e93dc 100644 --- a/libstdc++-v3/testsuite/25_algorithms/nth_element/constrained.cc +++ b/libstdc++-v3/testsuite/25_algorithms/nth_element/constrained.cc @@ -38,7 +38,7 @@ test01() auto pred = std::greater{}; auto proj = [] (int a) { return -a; }; - for (int i = 0; i < 50; i++) + for (std::ptrdiff_t i = 0; i < 50; i++) { test_range rx(x); std::ranlux48_base g(i); diff --git a/libstdc++-v3/testsuite/25_algorithms/nth_element/random_test.cc b/libstdc++-v3/testsuite/25_algorithms/nth_element/random_test.cc index 2e9d4b3b6e1e..9eaef61c1690 100644 --- a/libstdc++-v3/testsuite/25_algorithms/nth_element/random_test.cc +++ b/libstdc++-v3/testsuite/25_algorithms/nth_element/random_test.cc @@ -37,9 +37,9 @@ struct testNthElement template void operator()(Container con, RandomGen& rg) { - const int size = con.end() - con.begin(); + const auto size = con.end() - con.begin(); auto dist = std::uniform_int_distribution<>(0, size); - const int element = dist(rg); + const decltype(size) element = dist(rg); std::nth_element(con.begin(), con.begin() + element, con.end()); diff --git a/libstdc++-v3/testsuite/25_algorithms/partial_sort/check_compare_by_value.cc b/libstdc++-v3/testsuite/25_algorithms/partial_sort/check_compare_by_value.cc index 05f4f1cbdb55..e1ba840a5a3c 100644 --- a/libstdc++-v3/testsuite/25_algorithms/partial_sort/check_compare_by_value.cc +++ b/libstdc++-v3/testsuite/25_algorithms/partial_sort/check_compare_by_value.cc @@ -43,7 +43,7 @@ test01() 17, 8, 18, 9, 19 }; const int N = sizeof(s1) / sizeof(V); Container con(s1, s1 + N); - std::partial_sort(con.begin(), con.begin() + 10, con.end()); + std::partial_sort(con.begin(), std::next(con.begin(), 10), con.end()); VERIFY( s1[0].ok ); for(int i = 1; i < 10; ++i) VERIFY( s1[i].val > s1[i - 1].val && s1[i].ok ); @@ -59,7 +59,7 @@ test02() 17, 8, 18, 9, 19 }; const int N = sizeof(s1) / sizeof(V); Container con(s1, s1 + N); - std::partial_sort(con.begin(), con.begin() + 10, con.end(), + std::partial_sort(con.begin(), std::next(con.begin(), 10), con.end(), __gnu_test::order); VERIFY( s1[0].ok ); for(int i = 1; i < 10; ++i) diff --git a/libstdc++-v3/testsuite/25_algorithms/partial_sort/constrained.cc b/libstdc++-v3/testsuite/25_algorithms/partial_sort/constrained.cc index 032ffe75d890..554a8d76a4b8 100644 --- a/libstdc++-v3/testsuite/25_algorithms/partial_sort/constrained.cc +++ b/libstdc++-v3/testsuite/25_algorithms/partial_sort/constrained.cc @@ -47,7 +47,8 @@ test01() ranges::shuffle(c, g1); ranges::shuffle(ranges::begin(r), ranges::end(r), g2); - for (unsigned middle = 0; middle < std::min(size, 10U); ++middle) + for (std::ptrdiff_t middle = 0, end = std::min(size, 10U); + middle < end; ++middle) { auto res1 = ranges::partial_sort(c.begin(), c.begin()+middle, c.end(), {}, std::negate<>{}); diff --git a/libstdc++-v3/testsuite/25_algorithms/partial_sort/random_test.cc b/libstdc++-v3/testsuite/25_algorithms/partial_sort/random_test.cc index 89eb99266608..4e690008e74a 100644 --- a/libstdc++-v3/testsuite/25_algorithms/partial_sort/random_test.cc +++ b/libstdc++-v3/testsuite/25_algorithms/partial_sort/random_test.cc @@ -37,9 +37,9 @@ struct testPartialSort template void operator()(Container con, RandomGen& rg) { - const int size = con.end() - con.begin(); + const auto size = con.end() - con.begin(); auto dist = std::uniform_int_distribution<>(0, size); - const int element = dist(rg); + const decltype(size) element = dist(rg); std::partial_sort(con.begin(), con.begin() + element, con.end()); diff --git a/libstdc++-v3/testsuite/25_algorithms/partial_sort_copy/constrained.cc b/libstdc++-v3/testsuite/25_algorithms/partial_sort_copy/constrained.cc index a0bd48be638b..38b2dda45199 100644 --- a/libstdc++-v3/testsuite/25_algorithms/partial_sort_copy/constrained.cc +++ b/libstdc++-v3/testsuite/25_algorithms/partial_sort_copy/constrained.cc @@ -35,7 +35,7 @@ namespace ranges = std::ranges; void test01() { - for (unsigned size = 0; size < 50; ++size) + for (std::ptrdiff_t size = 0; size < 50; ++size) { std::vector vref(size); std::iota(vref.begin(), vref.end(), 0); @@ -45,7 +45,7 @@ test01() ranges::shuffle(v1, g1); ranges::shuffle(v2, g2); - for (unsigned middle = 0; middle < 10; ++middle) + for (std::ptrdiff_t middle = 0; middle < 10; ++middle) { test_container c = {v1.data(), v1.data() + size}; diff --git a/libstdc++-v3/testsuite/25_algorithms/partial_sort_copy/random_test.cc b/libstdc++-v3/testsuite/25_algorithms/partial_sort_copy/random_test.cc index 2c0b8bca2bef..be033a240140 100644 --- a/libstdc++-v3/testsuite/25_algorithms/partial_sort_copy/random_test.cc +++ b/libstdc++-v3/testsuite/25_algorithms/partial_sort_copy/random_test.cc @@ -38,9 +38,9 @@ struct testPartialSortCopy template void operator()(Container con, RandomGen& rg) { - const int size = con.end() - con.begin(); + const auto size = con.end() - con.begin(); auto dist = std::uniform_int_distribution<>(0, size); - const int element = dist(rg); + const decltype(size) element = dist(rg); std::vector outvec(element + 1); // add +1 to avoid empty issues diff --git a/libstdc++-v3/testsuite/25_algorithms/rotate/121913.cc b/libstdc++-v3/testsuite/25_algorithms/rotate/121913.cc new file mode 100644 index 000000000000..d648699adbda --- /dev/null +++ b/libstdc++-v3/testsuite/25_algorithms/rotate/121913.cc @@ -0,0 +1,45 @@ +// { dg-do compile { target c++20 } } + +// Bug libstdc++/121913 ranges::rotate should use ranges::iter_move + +#include + +struct A { }; + +struct B +{ + B& operator=(const B&) = delete; + B& operator=(const A&) const; + + operator A() const; +}; + +struct I +{ + using value_type = A; + using difference_type = int; + B operator*() const; + B operator[](int) const; + I& operator++(); + I operator++(int); + I& operator--(); + I operator--(int); + I& operator+=(int); + I& operator-=(int); + + auto operator<=>(const I&) const = default; + + friend A iter_move(const I&); + friend I operator+(I, int); + friend I operator-(I, int); + friend I operator+(int, I); + friend int operator-(I, I); +}; + +static_assert( std::random_access_iterator ); + +void +test_pr121913() +{ + std::ranges::rotate(I{}, I{}, I{}); +} diff --git a/libstdc++-v3/testsuite/25_algorithms/shuffle/constrained.cc b/libstdc++-v3/testsuite/25_algorithms/shuffle/constrained.cc index 70c6bdfc3d9e..4d633561508b 100644 --- a/libstdc++-v3/testsuite/25_algorithms/shuffle/constrained.cc +++ b/libstdc++-v3/testsuite/25_algorithms/shuffle/constrained.cc @@ -86,9 +86,27 @@ test02() ranges::shuffle(w, g); } +struct non_default_sentinel_t { }; + +template +bool operator==(const I& i, non_default_sentinel_t) +{ return i == std::default_sentinel; } + +void +test03() +{ + // PR libstdc++/121917 - ranges::shuffle incorrectly requires its arguments + // to model sized_sentinel_for + int a[2]{}; + std::counted_iterator iter(a, 2); + std::default_random_engine e; + std::ranges::shuffle(iter, non_default_sentinel_t{}, e); +} + int main() { test01(); test02(); + test03(); } diff --git a/libstdc++-v3/testsuite/26_numerics/random/philox4x32.cc b/libstdc++-v3/testsuite/26_numerics/random/philox4x32.cc new file mode 100644 index 000000000000..33842bb8db03 --- /dev/null +++ b/libstdc++-v3/testsuite/26_numerics/random/philox4x32.cc @@ -0,0 +1,26 @@ +// { dg-do run { target c++26 } } +// { dg-require-cpp-feature-test __cpp_lib_philox_engine } + +// N5014 29.5.6 Engines and engine adaptors with predefined parameters + +#include +#include + +using test_type = std::philox_engine; +static_assert( std::is_same_v ); + +void +test01() +{ + std::philox4x32 a; + a.discard(9999); + + VERIFY( a() == 1955073260 ); +} + +int main() +{ + test01(); +} diff --git a/libstdc++-v3/testsuite/26_numerics/random/philox4x64.cc b/libstdc++-v3/testsuite/26_numerics/random/philox4x64.cc new file mode 100644 index 000000000000..11a5691804e0 --- /dev/null +++ b/libstdc++-v3/testsuite/26_numerics/random/philox4x64.cc @@ -0,0 +1,26 @@ +// { dg-do run { target c++26 } } +// { dg-require-cpp-feature-test __cpp_lib_philox_engine } + +// N5014 29.5.6 Engines and engine adaptors with predefined parameters + +#include +#include + +using test_type = std::philox_engine; +static_assert( std::is_same_v ); + +void +test01() +{ + std::philox4x64 a; + a.discard(9999); + + VERIFY( a() == 3409172418970261260 ); +} + +int main() +{ + test01(); +} diff --git a/libstdc++-v3/testsuite/26_numerics/random/philox_engine/cons/copy.cc b/libstdc++-v3/testsuite/26_numerics/random/philox_engine/cons/copy.cc new file mode 100644 index 000000000000..163aec082332 --- /dev/null +++ b/libstdc++-v3/testsuite/26_numerics/random/philox_engine/cons/copy.cc @@ -0,0 +1,27 @@ +// { dg-do run { target c++26 } } +// { dg-require-cpp-feature-test __cpp_lib_philox_engine } + +// N5014 29.5.4 Random Number Engine Class Templates +// N5014 29.5.4.5 Class Template philox_engine + +#include +#include + +void +test01(unsigned long seed) +{ + + std::philox_engine e(seed); + + const auto f(e); + VERIFY( f == e ); + auto g(f); + VERIFY( g == f ); +} + +int main() +{ + test01(1ul); + test01(111ul); +} diff --git a/libstdc++-v3/testsuite/26_numerics/random/philox_engine/cons/default.cc b/libstdc++-v3/testsuite/26_numerics/random/philox_engine/cons/default.cc new file mode 100644 index 000000000000..183ca8201093 --- /dev/null +++ b/libstdc++-v3/testsuite/26_numerics/random/philox_engine/cons/default.cc @@ -0,0 +1,49 @@ +// { dg-do run { target c++26 } } +// { dg-require-cpp-feature-test __cpp_lib_philox_engine } + +// N5014 29.5.4.5 Class Template philox_engine + +#include +#include + +void +test_default_ctor() +{ + std::philox_engine philox4x32nullkey(0); + + VERIFY( philox4x32nullkey.min() == 0 ); + VERIFY( philox4x32nullkey.max() == (1ul << 31 | (1ul << 31) - 1) ); + VERIFY( philox4x32nullkey() == 0x6627e8d5ul ); +} + +void +test_seed() +{ + unsigned long seed = 2; + std::philox4x32 seeded(seed); + + std::philox4x32 default_init; + VERIFY( seeded != default_init ); + + std::philox4x32 default_seeded(std::philox4x32::default_seed); + VERIFY( default_seeded == default_init ); +} + +void +test_seed_seq() +{ + std::seed_seq sseq{ 1, 2, 3, 4 }; + std::philox4x32 seeded(sseq); + std::philox4x32 default_init; + VERIFY( seeded != default_init ); +} + +int main() +{ + test_default_ctor(); + test_seed(); + test_seed_seq(); +} diff --git a/libstdc++-v3/testsuite/26_numerics/random/philox_engine/cons/seed.cc b/libstdc++-v3/testsuite/26_numerics/random/philox_engine/cons/seed.cc new file mode 100644 index 000000000000..2b667b233644 --- /dev/null +++ b/libstdc++-v3/testsuite/26_numerics/random/philox_engine/cons/seed.cc @@ -0,0 +1,51 @@ +// { dg-do run { target c++26 } } +// { dg-require-cpp-feature-test __cpp_lib_philox_engine } + +#include +#include + +int f(int x) +{ + std::seed_seq sq(&x, &x + 1); + auto rnd = std::philox4x32(sq); + return std::uniform_int_distribution()(rnd); +} + +int g(int x) +{ + std::seed_seq sq(&x, &x + 1); + auto rnd = std::philox4x32(); + rnd.seed(sq); + return std::uniform_int_distribution()(rnd); +} + +void +test01() +{ + const int f1 = f(0); + const int f2 = f(0); + + const int g1 = g(0); + const int g2 = g(0); + + VERIFY( f1 == f2 ); + VERIFY( g1 == g2 ); + VERIFY( f1 == g1 ); +} + +void +test02() +{ + std::philox4x64 e1(25); + std::philox4x64 e2; + VERIFY( e2 != e1 ); + e2.seed(25); + VERIFY( e2 == e1 ); + +} + +int main() +{ + test01(); + test02(); +} diff --git a/libstdc++-v3/testsuite/26_numerics/random/philox_engine/operators/equal.cc b/libstdc++-v3/testsuite/26_numerics/random/philox_engine/operators/equal.cc new file mode 100644 index 000000000000..cca1654603ef --- /dev/null +++ b/libstdc++-v3/testsuite/26_numerics/random/philox_engine/operators/equal.cc @@ -0,0 +1,33 @@ +// { dg-do run { target c++26 } } +// { dg-require-cpp-feature-test __cpp_lib_philox_engine } + +// N5014 29.5.4.5 Class Template philox_engine + +#include +#include + +void +test01() +{ + std::philox_engine x, y; + + VERIFY ( x == y); + x.discard(100); + y.discard(100); + + VERIFY (x == y); + + x.discard(2); + VERIFY (x != y); + y.discard(2); + VERIFY (x == y); +} + +int +main() +{ + test01(); +} diff --git a/libstdc++-v3/testsuite/26_numerics/random/philox_engine/operators/serialize.cc b/libstdc++-v3/testsuite/26_numerics/random/philox_engine/operators/serialize.cc new file mode 100644 index 000000000000..4bd40e74a6b5 --- /dev/null +++ b/libstdc++-v3/testsuite/26_numerics/random/philox_engine/operators/serialize.cc @@ -0,0 +1,46 @@ +// { dg-do run { target c++26 } } +// { dg-require-cpp-feature-test __cpp_lib_philox_engine } + +// N5014 29.5.4.5 Class Template philox_engine + +#include +#include +#include + +void +test01() +{ + std::stringstream str; + std::philox_engine x, y; + + x(); + str << x; + + VERIFY ( !(x == y) ); + str >> y; + VERIFY ( x == y ); + for (unsigned long i = 0; i < 100; ++i) + { + VERIFY (x() == y()); + } + str.clear(); + str << y; + x(); + x(); + x(); + str >> x; + VERIFY ( x == y ); + for (unsigned long i = 0; i < 1000; ++i) + { + VERIFY (x() == y()); + } +} + +int +main() +{ + test01(); +} diff --git a/libstdc++-v3/testsuite/26_numerics/random/philox_engine/requirements/constants.cc b/libstdc++-v3/testsuite/26_numerics/random/philox_engine/requirements/constants.cc new file mode 100644 index 000000000000..a3cb24eb0667 --- /dev/null +++ b/libstdc++-v3/testsuite/26_numerics/random/philox_engine/requirements/constants.cc @@ -0,0 +1,48 @@ +// { dg-do compile { target c++26 } } +// { dg-require-cpp-feature-test __cpp_lib_philox_engine } + +// N5014 29.5.4.5 Class Template philox_engine + +#include + +namespace test1 +{ + using P = std::philox_engine; + constexpr std::same_as auto min = P::min(); + static_assert( min == 0 ); + constexpr std::same_as auto max = P::max(); + static_assert( max == 0xffffffff ); + constexpr std::same_as auto w = P::word_size; + static_assert( w == 32 ); + constexpr std::same_as auto n = P::word_count; + static_assert( n == 4 ); + constexpr std::same_as auto r = P::round_count; + static_assert( r == 5 ); + constexpr std::array muls = P::multipliers; + static_assert( muls[0] == 9 && muls[1] == 999 ); + constexpr std::array consts = P::round_consts; + static_assert( consts[0] == 99 && consts[1] == 9999 ); + constexpr std::same_as auto def = P::default_seed; + static_assert( def == 20111115u ); +} + +namespace test2 +{ + using P = std::philox_engine; + constexpr std::same_as auto min = P::min(); + static_assert( min == 0 ); + constexpr std::same_as auto max = P::max(); + static_assert( max == 0xffffffffffffffff ); + constexpr std::same_as auto w = P::word_size; + static_assert( w == 64 ); + constexpr std::same_as auto n = P::word_count; + static_assert( n == 2 ); + constexpr std::same_as auto r = P::round_count; + static_assert( r == 12 ); + constexpr std::array muls = P::multipliers; + static_assert( muls[0] == 77 ); + constexpr std::array consts = P::round_consts; + static_assert( consts[0] == 777 ); + constexpr std::same_as auto def = P::default_seed; + static_assert( def == 20111115u ); +} diff --git a/libstdc++-v3/testsuite/26_numerics/random/philox_engine/requirements/typedefs.cc b/libstdc++-v3/testsuite/26_numerics/random/philox_engine/requirements/typedefs.cc new file mode 100644 index 000000000000..1fc8fedc4c69 --- /dev/null +++ b/libstdc++-v3/testsuite/26_numerics/random/philox_engine/requirements/typedefs.cc @@ -0,0 +1,30 @@ +// { dg-do compile { target c++26 } } +// { dg-require-cpp-feature-test __cpp_lib_philox_engine } + +// N5014 29.5.4.5 Class Template philox_engine + +#include + +void +test01() +{ + typedef std::philox_engine testType; + + typedef testType::result_type result_type; + static_assert( std::is_same_v ); +} + +void +test02() +{ + typedef std::philox_engine testType; + + typedef testType::result_type result_type; + static_assert( std::is_same_v ); +} diff --git a/libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/cons/122062.cc b/libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/cons/122062.cc new file mode 100644 index 000000000000..0f0caa7f89b4 --- /dev/null +++ b/libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/cons/122062.cc @@ -0,0 +1,16 @@ +// { dg-do compile { target c++11 } } + +// PR libstdc++/122062 +// piecewise_linear_distribution(firstB, lastB, firstW) invokes comma operator + +#include +#include + +void +test_pr122062() +{ + double b[1]{}; + double w[1]{}; + __gnu_test::random_access_container B(b), W(w); + std::piecewise_linear_distribution p(B.begin(), B.end(), W.begin()); +} diff --git a/libstdc++-v3/testsuite/26_numerics/random/pr60037-neg.cc b/libstdc++-v3/testsuite/26_numerics/random/pr60037-neg.cc index 0afba654152c..4b36f75bba26 100644 --- a/libstdc++-v3/testsuite/26_numerics/random/pr60037-neg.cc +++ b/libstdc++-v3/testsuite/26_numerics/random/pr60037-neg.cc @@ -10,6 +10,6 @@ std::__detail::_Adaptor aurng(urng); auto x = std::generate_canonical::digits>(urng); -// { dg-error "static assertion failed: template argument must be a floating point type" "" { target *-*-* } 270 } +// { dg-error "static assertion failed: template argument must be a floating point type" "" { target *-*-* } 271 } -// { dg-error "static assertion failed: template argument must be a floating point type" "" { target *-*-* } 3357 } +// { dg-error "static assertion failed: template argument must be a floating point type" "" { target *-*-* } 3480 } diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/wchar_t/9875_seekoff.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/wchar_t/9875_seekoff.cc index 052d80fceb72..474a49f83dce 100644 --- a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/wchar_t/9875_seekoff.cc +++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/wchar_t/9875_seekoff.cc @@ -66,7 +66,7 @@ class Cvt : public std::codecvt virtual int do_length(std::mbstate_t&, const char* from, const char* end, - std::size_t max) + std::size_t max) const { std::size_t len = (end - from) / sizeof(wchar_t); return std::min(len, max) * sizeof(wchar_t); diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/wchar_t/9875_seekpos.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/wchar_t/9875_seekpos.cc index 5767f8aa2a9a..f0d3b59f7b23 100644 --- a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/wchar_t/9875_seekpos.cc +++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekpos/wchar_t/9875_seekpos.cc @@ -66,7 +66,7 @@ class Cvt : public std::codecvt virtual int do_length(std::mbstate_t&, const char* from, const char* end, - std::size_t max) + std::size_t max) const { std::size_t len = (end - from) / sizeof(wchar_t); return std::min(len, max) * sizeof(wchar_t); diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/char/1.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/char/1.cc index a0396a4cf1f7..6d4c71fe9a53 100644 --- a/libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/char/1.cc +++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/char/1.cc @@ -35,7 +35,7 @@ class NoconvCvt : public std::codecvt virtual result do_in(state_type&, const char* from, const char*, const char*& from_next, - char* to, char*, char*& to_next) + char* to, char*, char*& to_next) const { from_next = from; to_next = to; diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/11603.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/11603.cc index fcd95a9d5e85..c62ad020b0af 100644 --- a/libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/11603.cc +++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/11603.cc @@ -119,7 +119,7 @@ class checksumcvt : public std::codecvt { return width; } virtual int - do_length(const StateT&, const extern_type* from, + do_length(StateT&, const extern_type* from, const extern_type* end, size_t max) const { size_t len = std::min(max, diff --git a/libstdc++-v3/testsuite/27_io/manipulators/extended/get_time/wchar_t/1.cc b/libstdc++-v3/testsuite/27_io/manipulators/extended/get_time/wchar_t/1.cc index 0f3728299a37..ee3e84d42d82 100644 --- a/libstdc++-v3/testsuite/27_io/manipulators/extended/get_time/wchar_t/1.cc +++ b/libstdc++-v3/testsuite/27_io/manipulators/extended/get_time/wchar_t/1.cc @@ -36,8 +36,8 @@ void test01() tm time1; iss >> get_time(&time1, L"%H:%M:%S %Y"); VERIFY( static_cast(iss) ); - VERIFY(time1.tm_hour = 12); - VERIFY(time1.tm_min = 1); + VERIFY(time1.tm_hour == 12); + VERIFY(time1.tm_min == 1); VERIFY(time1.tm_sec == 30); VERIFY(time1.tm_year == 71); } diff --git a/libstdc++-v3/testsuite/28_regex/algorithms/regex_match/multiline.cc b/libstdc++-v3/testsuite/28_regex/algorithms/regex_match/multiline.cc index a1982fc8f786..f4b3cf03a225 100644 --- a/libstdc++-v3/testsuite/28_regex/algorithms/regex_match/multiline.cc +++ b/libstdc++-v3/testsuite/28_regex/algorithms/regex_match/multiline.cc @@ -27,11 +27,11 @@ test01() VERIFY(std::regex_search("x\nab\nx", ml)); ml.assign("a$\n^b$\n^c", ECMAScript|__multiline); - VERIFY( ml.flags() == ECMAScript|__multiline ); + VERIFY( ml.flags() == (ECMAScript|__multiline) ); VERIFY( regex_search("a\nb\nc", ml) ); ml.assign("a$\n^b$\n^c", ECMAScript|__multiline|icase); - VERIFY( ml.flags() == ECMAScript|__multiline|icase ); + VERIFY( ml.flags() == (ECMAScript|__multiline|icase) ); VERIFY( regex_search("A\nB\nC", ml) ); } diff --git a/libstdc++-v3/testsuite/28_regex/basic_regex/assign/wchar_t/pstring.cc b/libstdc++-v3/testsuite/28_regex/basic_regex/assign/wchar_t/pstring.cc index 2e9dea13a774..91e55129908c 100644 --- a/libstdc++-v3/testsuite/28_regex/basic_regex/assign/wchar_t/pstring.cc +++ b/libstdc++-v3/testsuite/28_regex/basic_regex/assign/wchar_t/pstring.cc @@ -23,6 +23,7 @@ // [28.8.3] class template basic_regex assign() #include +#include // Tests assign operation from a Pascal-style counted-string. void test01() @@ -31,7 +32,7 @@ void test01() const wchar_t cs[] = L"aab"; test_type re; - re.assign(cs, sizeof(cs)-1, std::regex_constants::basic); + re.assign(cs, std::wcslen(cs), std::regex_constants::basic); } int diff --git a/libstdc++-v3/testsuite/29_atomics/atomic/operators/pointer_partial_void.cc b/libstdc++-v3/testsuite/29_atomics/atomic/operators/pointer_partial_void.cc index e959418a1c3c..1e2f71e9c628 100644 --- a/libstdc++-v3/testsuite/29_atomics/atomic/operators/pointer_partial_void.cc +++ b/libstdc++-v3/testsuite/29_atomics/atomic/operators/pointer_partial_void.cc @@ -1,6 +1,7 @@ // { dg-do run { target { c++11_only || c++14_only } } } // { dg-require-atomic-builtins "" } // { dg-require-effective-target hosted } +// { dg-additional-options "-Wsystem-headers" } // Copyright (C) 2012-2025 Free Software Foundation, Inc. // diff --git a/libstdc++-v3/testsuite/30_threads/packaged_task/cons/dangling_ref.cc b/libstdc++-v3/testsuite/30_threads/packaged_task/cons/dangling_ref.cc index 8cc3f78da9f0..30e05b0391a1 100644 --- a/libstdc++-v3/testsuite/30_threads/packaged_task/cons/dangling_ref.cc +++ b/libstdc++-v3/testsuite/30_threads/packaged_task/cons/dangling_ref.cc @@ -1,4 +1,5 @@ // { dg-do compile { target c++11 } } +// { dg-additional-options "-Wsystem-headers" } #include // C++20 [futures.task.members] diff --git a/libstdc++-v3/testsuite/Makefile.in b/libstdc++-v3/testsuite/Makefile.in index 2e42d470645e..aeb3f716216f 100644 --- a/libstdc++-v3/testsuite/Makefile.in +++ b/libstdc++-v3/testsuite/Makefile.in @@ -91,8 +91,10 @@ target_triplet = @target@ subdir = testsuite ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/enable.m4 \ $(top_srcdir)/../config/futex.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/hwcaps.m4 \ $(top_srcdir)/../config/iconv.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ @@ -222,6 +224,7 @@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LONG_DOUBLE_128_FLAGS = @LONG_DOUBLE_128_FLAGS@ LONG_DOUBLE_ALT128_COMPAT_FLAGS = @LONG_DOUBLE_ALT128_COMPAT_FLAGS@ diff --git a/libstdc++-v3/testsuite/experimental/memory/shared_ptr/cons/move_ctor.cc b/libstdc++-v3/testsuite/experimental/memory/shared_ptr/cons/move_ctor.cc index f8ce58e4f094..e414b1f3cea0 100644 --- a/libstdc++-v3/testsuite/experimental/memory/shared_ptr/cons/move_ctor.cc +++ b/libstdc++-v3/testsuite/experimental/memory/shared_ptr/cons/move_ctor.cc @@ -106,6 +106,8 @@ test04() { reset_count_struct __attribute__((unused)) reset; + // The std::move here prevents copy elision, so we construct from a prvalue. + // { dg-prune-output "-Wpessimizing-move" } std::experimental::shared_ptr a(std::move(std::experimental ::shared_ptr (new A[5]))); diff --git a/libstdc++-v3/testsuite/ext/unicode/properties.cc b/libstdc++-v3/testsuite/ext/unicode/properties.cc index 50b215e95635..120192d59f5c 100644 --- a/libstdc++-v3/testsuite/ext/unicode/properties.cc +++ b/libstdc++-v3/testsuite/ext/unicode/properties.cc @@ -122,7 +122,7 @@ static_assert( uc::__is_extended_pictographic(U'\N{SOUTH WEST ARROW}') ); static_assert( ! uc::__is_extended_pictographic(U'\N{SOUTH WEST ARROW}' + 1) ); static_assert( uc::__is_extended_pictographic(U'\N{POSTBOX}') ); static_assert( ! uc::__is_extended_pictographic(U'\U0001EFFF') ); -static_assert( uc::__is_extended_pictographic(U'\U0001F000') ); +static_assert( uc::__is_extended_pictographic(U'\U0001F004') ); static_assert( uc::__is_extended_pictographic(U'\U0001FFFD') ); static_assert( ! uc::__is_extended_pictographic(U'\U0001FFFE') ); static_assert( ! uc::__is_extended_pictographic(U'\U0001FFFF') ); diff --git a/libstdc++-v3/testsuite/std/format/pr121765.cc b/libstdc++-v3/testsuite/std/format/pr121765.cc new file mode 100644 index 000000000000..1358fc110521 --- /dev/null +++ b/libstdc++-v3/testsuite/std/format/pr121765.cc @@ -0,0 +1,53 @@ +// { dg-do compile { target c++23 } } + +#include +#include + +struct MyPair +{ + int x; + int y; +}; + +template +struct std::formatter +{ + template + auto parse(ParseContext& pc) + { return _formatter.parse(pc); } + + template + auto format(const MyPair& mp, FormatContext& fc) const + { return _formatter.format(std::make_pair(mp.x, mp.y), fc); } + +private: + std::formatter, CharT> _formatter; +}; + +static_assert(std::formattable); +static_assert(std::formattable); + +struct MyRange +{ + int* begin; + int* end; +}; + +template +struct std::formatter +{ + template + auto parse(ParseContext& pc) + { return _formatter.parse(pc); } + + template + auto format(const MyRange& mp, FormatContext& fc) const + { return _formatter.format(std::span(mp.begin, mp.end), fc); } + +private: + std::formatter, CharT> _formatter; +}; + +static_assert(std::formattable); +static_assert(std::formattable); + diff --git a/libstdc++-v3/testsuite/std/memory/indirect/copy.cc b/libstdc++-v3/testsuite/std/memory/indirect/copy.cc index 0ac6e92a9213..5ecfbbd898f4 100644 --- a/libstdc++-v3/testsuite/std/memory/indirect/copy.cc +++ b/libstdc++-v3/testsuite/std/memory/indirect/copy.cc @@ -14,7 +14,7 @@ using Vector = std::vector; using Indirect = std::indirect>; const Indirect src(std::in_place, {1, 2, 3}); -constexpr void +void test_ctor() { Counter::reset(); @@ -36,7 +36,7 @@ test_ctor() VERIFY( Counter::get_destruct_count() == 0 ); } -constexpr void +void test_assign() { Indirect i1; @@ -62,7 +62,7 @@ test_assign() VERIFY( Counter::get_destruct_count() == 0 ); } -constexpr void +void test_valueless() { Indirect e; @@ -103,19 +103,54 @@ test_valueless() } constexpr void -test_all() +test_constexpr() { - test_ctor(); - test_assign(); - test_valueless(); + using Alloc = __gnu_test::uneq_allocator; + using Indirect = std::indirect; + const Indirect src(std::in_place, {1, 2, 3}); + + Indirect i1(src); + VERIFY( *i1 == *src ); + VERIFY( &*i1 != &*src ); + VERIFY( i1.get_allocator() == Alloc{} ); + + Indirect i2(std::allocator_arg, Alloc{2}, src); + VERIFY( *i2 == *src ); + VERIFY( &*i2 != &*src ); + VERIFY( i2.get_allocator() == Alloc{2} ); + + Indirect i3(std::allocator_arg, Alloc{3}); + i3 = src; + VERIFY( *i3 == *src ); + VERIFY( &*i3 != &*src ); + VERIFY( i3.get_allocator() == Alloc{3} ); + + Indirect e; + auto(std::move(e)); + VERIFY( e.valueless_after_move() ); + + Indirect e1(e); + VERIFY( e1.valueless_after_move() ); + + Indirect e2(std::allocator_arg, {}, e); + VERIFY( e2.valueless_after_move() ); + + i3 = e; + VERIFY( i3.valueless_after_move() ); + + i3 = e; + VERIFY( i3.valueless_after_move() ); } int main() { - test_all(); + test_ctor(); + test_assign(); + test_valueless(); + test_constexpr(); static_assert([] { - test_all(); + test_constexpr(); return true; - }); + }()); } diff --git a/libstdc++-v3/testsuite/std/memory/indirect/copy_alloc.cc b/libstdc++-v3/testsuite/std/memory/indirect/copy_alloc.cc index d5865b9a580d..e48855a0eac5 100644 --- a/libstdc++-v3/testsuite/std/memory/indirect/copy_alloc.cc +++ b/libstdc++-v3/testsuite/std/memory/indirect/copy_alloc.cc @@ -13,7 +13,7 @@ using __gnu_test::tracker_allocator; using Counter = __gnu_test::tracker_allocator_counter; template -constexpr void +void test_ctor() { using PropAlloc = propagating_allocator; @@ -59,7 +59,7 @@ test_ctor() } template -constexpr void +void test_assign() { using PropAlloc = propagating_allocator; @@ -144,7 +144,7 @@ test_assign() } template -constexpr void +void test_valueless() { using PropAlloc = propagating_allocator; @@ -219,10 +219,4 @@ int main() { test_all(); test_all(); - - static_assert([] { - test_all(); - test_all(); - return true; - }); } diff --git a/libstdc++-v3/testsuite/std/memory/indirect/ctor.cc b/libstdc++-v3/testsuite/std/memory/indirect/ctor.cc index 124874d02fe6..dfd9341582f5 100644 --- a/libstdc++-v3/testsuite/std/memory/indirect/ctor.cc +++ b/libstdc++-v3/testsuite/std/memory/indirect/ctor.cc @@ -58,6 +58,9 @@ test_default_ctor() std::indirect> i2(std::allocator_arg, a); VERIFY( i2.get_allocator() == a ); + if (std::is_constant_evaluated()) + return; + // Object is constructed using allocator-aware constructor. std::indirect, ScopedAlloc> i3(std::allocator_arg, ScopedAlloc(11, 22)); @@ -93,6 +96,9 @@ test_forwarding_ctor() std::indirect i6(7); VERIFY( i6->i == 7 ); + if (std::is_constant_evaluated()) + return; + std::vector v{1, 2, 3, 4, 5}; // Object is constructed using allocator-aware constructor. std::indirect, ScopedAlloc> @@ -165,6 +171,9 @@ test_inplace_ctor() VERIFY( i10->at(2) == 3 ); VERIFY( i10->get_allocator().get_personality() == 42 ); + if (std::is_constant_evaluated()) + return; + std::indirect, ScopedAlloc> i14(std::allocator_arg, ScopedAlloc(11, 22), std::in_place); @@ -200,5 +209,5 @@ int main() test_forwarding_ctor(); test_inplace_ctor(); return true; - }); + }()); } diff --git a/libstdc++-v3/testsuite/std/memory/indirect/move.cc b/libstdc++-v3/testsuite/std/memory/indirect/move.cc index 6e87c60adb0d..9800f7fd1a79 100644 --- a/libstdc++-v3/testsuite/std/memory/indirect/move.cc +++ b/libstdc++-v3/testsuite/std/memory/indirect/move.cc @@ -15,7 +15,7 @@ using Vector = std::vector; using Indirect = std::indirect>; const Indirect val(std::in_place, {1, 2, 3}); -constexpr void +void verifyNoAllocations() { VERIFY( Counter::get_allocation_count() == 0 ); @@ -24,7 +24,7 @@ verifyNoAllocations() VERIFY( Counter::get_destruct_count() == 0 ); } -constexpr void +void test_ctor() { std::optional src; @@ -45,7 +45,7 @@ test_ctor() verifyNoAllocations(); } -constexpr void +void test_assign() { std::optional src; @@ -72,7 +72,7 @@ test_assign() verifyNoAllocations(); } -constexpr void +void test_swap() { const Indirect val1(std::in_place, {1, 2, 3}); @@ -87,7 +87,7 @@ test_swap() verifyNoAllocations(); auto(std::move(i1)); - + Counter::reset(); i1.swap(i2); VERIFY( *i1 == *val1 ); @@ -95,7 +95,7 @@ test_swap() verifyNoAllocations(); } -constexpr void +void test_valueless() { auto e = [] { @@ -125,20 +125,77 @@ test_valueless() } constexpr void -test_all() +test_constexpr() { - test_ctor(); - test_assign(); - test_swap(); - test_valueless(); + using Alloc = __gnu_test::uneq_allocator; + using Indirect = std::indirect; + const Indirect val(std::in_place, {1, 2, 3}); + + std::optional src; + auto make = [&src, &val] -> Indirect&& { + src.emplace(val); + return std::move(*src); + }; + + Indirect i1(make()); + VERIFY( src->valueless_after_move() ); + VERIFY( *i1 == *val ); + + Indirect i2(std::allocator_arg, {}, make()); + VERIFY( src->valueless_after_move() ); + VERIFY( *i2 == *val ); + + i2 = make(); + VERIFY( src->valueless_after_move() ); + VERIFY( *i2 == *val ); + + auto(std::move(i2)); + i2 = make(); + VERIFY( *i2 == *val ); + VERIFY( src->valueless_after_move() ); + + const Indirect val1(std::in_place, {1, 2, 3}); + const Indirect val2(std::in_place, {2, 4, 6}); + + Indirect s1(val1); + Indirect s2(val2); + s1.swap(s2); + VERIFY( *s2 == *val1 ); + VERIFY( *s1 == *val2 ); + + auto(std::move(s1)); + + s1.swap(s2); + VERIFY( *s1 == *val1 ); + VERIFY( s2.valueless_after_move() ); + + auto e = [] { + Indirect res; + auto(std::move(res)); + return res; + }; + + Indirect e1(e()); + VERIFY( e1.valueless_after_move() ); + + Indirect e2(std::allocator_arg, {}, e()); + VERIFY( e2.valueless_after_move() ); + + Indirect e3(val); + e3 = e(); + e3 = e(); } int main() { - test_all(); + test_ctor(); + test_assign(); + test_swap(); + test_valueless(); + test_constexpr(); static_assert([] { - test_all(); + test_constexpr(); return true; - }); + }()); } diff --git a/libstdc++-v3/testsuite/std/memory/indirect/move_alloc.cc b/libstdc++-v3/testsuite/std/memory/indirect/move_alloc.cc index cd6f90dcdc56..cf35e83310f7 100644 --- a/libstdc++-v3/testsuite/std/memory/indirect/move_alloc.cc +++ b/libstdc++-v3/testsuite/std/memory/indirect/move_alloc.cc @@ -13,7 +13,7 @@ using __gnu_test::propagating_allocator; using __gnu_test::tracker_allocator; using Counter = __gnu_test::tracker_allocator_counter; -constexpr void +void verifyNoAllocations() { VERIFY( Counter::get_allocation_count() == 0 ); @@ -23,7 +23,7 @@ verifyNoAllocations() } template -constexpr void +void test_ctor() { using PropAlloc = propagating_allocator; @@ -68,7 +68,7 @@ test_ctor() } template -constexpr void +void test_assign() { using PropAlloc = propagating_allocator; @@ -159,7 +159,7 @@ test_assign() } template -constexpr void +void test_swap() { using PropAlloc = propagating_allocator; @@ -212,7 +212,7 @@ test_swap() } template -constexpr void +void test_valueless() { using PropAlloc = propagating_allocator; @@ -274,7 +274,7 @@ test_valueless() } template -constexpr void +void test_all() { test_ctor(); @@ -287,10 +287,4 @@ int main() { test_all(); test_all(); - - static_assert([] { - test_all(); - test_all(); - return true; - }); } diff --git a/libstdc++-v3/testsuite/std/memory/indirect/relops.cc b/libstdc++-v3/testsuite/std/memory/indirect/relops.cc index d77fef2a4306..77d599c80861 100644 --- a/libstdc++-v3/testsuite/std/memory/indirect/relops.cc +++ b/libstdc++-v3/testsuite/std/memory/indirect/relops.cc @@ -78,5 +78,5 @@ int main() test_relops(); test_comp_with_t(); return true; - }); + }()); } diff --git a/libstdc++-v3/testsuite/std/memory/polymorphic/copy.cc b/libstdc++-v3/testsuite/std/memory/polymorphic/copy.cc index bea05acfcab7..34c78220e320 100644 --- a/libstdc++-v3/testsuite/std/memory/polymorphic/copy.cc +++ b/libstdc++-v3/testsuite/std/memory/polymorphic/copy.cc @@ -44,14 +44,14 @@ struct Derived : Base using __gnu_test::tracker_allocator; using Counter = __gnu_test::tracker_allocator_counter; -using Polymorhic = std::polymorphic>; -const Polymorhic src(std::in_place_type, 1, 2, 3); +using Polymorphic = std::polymorphic>; +const Polymorphic src(std::in_place_type, 1, 2, 3); -constexpr void +void test_ctor() { Counter::reset(); - Polymorhic i1(src); + Polymorphic i1(src); VERIFY( *i1 == *src ); VERIFY( &*i1 != &*src ); VERIFY( Counter::get_allocation_count() >= sizeof(Derived) ); @@ -60,7 +60,7 @@ test_ctor() VERIFY( Counter::get_destruct_count() == 0 ); Counter::reset(); - Polymorhic i2(std::allocator_arg, {}, src); + Polymorphic i2(std::allocator_arg, {}, src); VERIFY( *i2 == *src ); VERIFY( &*i2 != &*src ); VERIFY( Counter::get_allocation_count() >= sizeof(Derived) ); @@ -69,11 +69,11 @@ test_ctor() VERIFY( Counter::get_destruct_count() == 0 ); } -constexpr void +void test_assign() { Counter::reset(); - Polymorhic i1(std::in_place_type); + Polymorphic i1(std::in_place_type); const size_t holderSize = Counter::get_allocation_count(); VERIFY( holderSize >= sizeof(Derived) ); Counter::reset(); @@ -98,29 +98,29 @@ test_assign() VERIFY( Counter::get_destruct_count() == 0 ); } -constexpr void +void test_valueless() { - Polymorhic e(std::in_place_type); + Polymorphic e(std::in_place_type); auto(std::move(e)); VERIFY( e.valueless_after_move() ); Counter::reset(); - Polymorhic i1(e); + Polymorphic i1(e); VERIFY( i1.valueless_after_move() ); VERIFY( Counter::get_allocation_count() == 0 ); VERIFY( Counter::get_deallocation_count() == 0 ); VERIFY( Counter::get_construct_count() == 0 ); VERIFY( Counter::get_destruct_count() == 0 ); - Polymorhic i2(std::allocator_arg, {}, e); + Polymorphic i2(std::allocator_arg, {}, e); VERIFY( i2.valueless_after_move() ); VERIFY( Counter::get_allocation_count() == 0 ); VERIFY( Counter::get_deallocation_count() == 0 ); VERIFY( Counter::get_construct_count() == 0 ); VERIFY( Counter::get_destruct_count() == 0 ); - Polymorhic i3(src); + Polymorphic i3(src); Counter::reset(); i3 = e; VERIFY( i3.valueless_after_move() ); @@ -139,19 +139,54 @@ test_valueless() } constexpr void -test_all() +test_constexpr() { - test_ctor(); - test_assign(); - test_valueless(); + using Polymorphic = std::polymorphic>; + const Polymorphic src(std::in_place_type, 1, 2, 3); + + Polymorphic i1(src); + VERIFY( *i1 == *src ); + VERIFY( &*i1 != &*src ); + + Polymorphic i2(std::allocator_arg, {}, src); + VERIFY( *i2 == *src ); + VERIFY( &*i2 != &*src ); + + i1 = Polymorphic(std::in_place_type); + VERIFY( *i1 != *src ); + i1 = src; + VERIFY( *i1 == *src ); + VERIFY( &*i1 != &*src ); + + auto(std::move(i1)); + i1 = src; + VERIFY( *i1 == *src ); + VERIFY( &*i1 != &*src ); + + Polymorphic e(std::in_place_type); + auto(std::move(e)); + VERIFY( e.valueless_after_move() ); + + Polymorphic e1(e); + VERIFY( e1.valueless_after_move() ); + + Polymorphic e2(std::allocator_arg, {}, e); + VERIFY( e2.valueless_after_move() ); + + Polymorphic e3(src); + e3 = e; + VERIFY( e3.valueless_after_move() ); } int main() { - test_all(); + test_ctor(); + test_assign(); + test_valueless(); + test_constexpr(); static_assert([] { - test_all(); + test_constexpr(); return true; - }); + }()); } diff --git a/libstdc++-v3/testsuite/std/memory/polymorphic/copy_alloc.cc b/libstdc++-v3/testsuite/std/memory/polymorphic/copy_alloc.cc index f41c32e1e1de..f149fc860e02 100644 --- a/libstdc++-v3/testsuite/std/memory/polymorphic/copy_alloc.cc +++ b/libstdc++-v3/testsuite/std/memory/polymorphic/copy_alloc.cc @@ -9,16 +9,16 @@ #include struct Base { - friend constexpr + friend bool operator==(const Base& lhs, const Base& rhs) { return lhs.eq(rhs); } - virtual constexpr int + virtual int get_alloc_personality() const { return -1; } private: - constexpr virtual bool + virtual bool eq(const Base& other) const = 0; }; @@ -29,13 +29,13 @@ struct VecDerived : Base, std::vector using VecBase::VecBase; - constexpr int + int get_alloc_personality() const override { return this->get_allocator().get_personality(); } private: - constexpr bool + bool eq(const Base& other) const override { if (auto op = dynamic_cast(&other)) @@ -50,7 +50,7 @@ using __gnu_test::tracker_allocator; using Counter = __gnu_test::tracker_allocator_counter; template -constexpr void +void test_ctor() { using PropAlloc = propagating_allocator; @@ -96,7 +96,7 @@ test_ctor() } template -constexpr void +void test_assign() { using PropAlloc = propagating_allocator; @@ -185,7 +185,7 @@ test_assign() } template -constexpr void +void test_valueless() { using PropAlloc = propagating_allocator; @@ -249,7 +249,7 @@ test_valueless() } template -constexpr void +void test_all() { test_ctor(); @@ -261,10 +261,4 @@ int main() { test_all(); test_all(); - - static_assert([] { - test_all(); - test_all(); - return true; - }); } diff --git a/libstdc++-v3/testsuite/std/memory/polymorphic/ctor.cc b/libstdc++-v3/testsuite/std/memory/polymorphic/ctor.cc index bb4c947285e7..4d043db0ea4a 100644 --- a/libstdc++-v3/testsuite/std/memory/polymorphic/ctor.cc +++ b/libstdc++-v3/testsuite/std/memory/polymorphic/ctor.cc @@ -45,6 +45,9 @@ test_default_ctor() std::polymorphic> i2(std::allocator_arg, a); VERIFY( i2.get_allocator() == a ); + if (std::is_constant_evaluated()) + return; + // Object is constructed using allocator-aware constructor. std::polymorphic, ScopedAlloc> i3(std::allocator_arg, ScopedAlloc(11, 22)); @@ -76,6 +79,9 @@ test_forwarding_ctor() std::polymorphic i5({1, {'2', '3'}}); verify(i5); + if (std::is_constant_evaluated()) + return; + std::vector v{1, 2, 3, 4, 5}; // Object is constructed using allocator-aware constructor. std::polymorphic, ScopedAlloc> @@ -151,6 +157,9 @@ test_inplace_ctor() VERIFY( i10->at(2) == 3 ); VERIFY( i10->get_allocator().get_personality() == 42 ); + if (std::is_constant_evaluated()) + return; + std::polymorphic, ScopedAlloc> i14(std::allocator_arg, ScopedAlloc(11, 22), std::in_place_type>); @@ -186,5 +195,5 @@ int main() test_forwarding_ctor(); test_inplace_ctor(); return true; - }); + }()); } diff --git a/libstdc++-v3/testsuite/std/memory/polymorphic/ctor_poly.cc b/libstdc++-v3/testsuite/std/memory/polymorphic/ctor_poly.cc index 03519a1db004..cb18031a9037 100644 --- a/libstdc++-v3/testsuite/std/memory/polymorphic/ctor_poly.cc +++ b/libstdc++-v3/testsuite/std/memory/polymorphic/ctor_poly.cc @@ -126,6 +126,9 @@ test_forwarding_ctor() VERIFY( *i4 == src ); VERIFY( i4->get_personality() == -2 ); + if (std::is_constant_evaluated()) + return; + const VecDerived v{1, 2, 3, 4, 5}; // Object is constructed using allocator-aware constructor. std::polymorphic @@ -183,6 +186,9 @@ test_inplace_ctor() VERIFY( *i7 == il ); VERIFY( i7->get_personality() == 42 ); + if (std::is_constant_evaluated()) + return; + std::polymorphic i8(std::allocator_arg, ScopedAlloc(11, 22), std::in_place_type>); @@ -216,5 +222,5 @@ int main() test_forwarding_ctor(); test_inplace_ctor(); return true; - }); + }()); } diff --git a/libstdc++-v3/testsuite/std/memory/polymorphic/move.cc b/libstdc++-v3/testsuite/std/memory/polymorphic/move.cc index c80215983b6c..97e598e69220 100644 --- a/libstdc++-v3/testsuite/std/memory/polymorphic/move.cc +++ b/libstdc++-v3/testsuite/std/memory/polymorphic/move.cc @@ -48,7 +48,7 @@ using Counter = __gnu_test::tracker_allocator_counter; using Polymorphic = std::polymorphic>; const Polymorphic val(std::in_place_type, 1, 2, 3); -constexpr void +void verifyNoAllocations() { VERIFY( Counter::get_allocation_count() == 0 ); @@ -57,7 +57,7 @@ verifyNoAllocations() VERIFY( Counter::get_destruct_count() == 0 ); } -constexpr void +void test_ctor() { std::optional src; @@ -78,7 +78,7 @@ test_ctor() verifyNoAllocations(); } -constexpr void +void test_assign() { std::optional src; @@ -105,7 +105,7 @@ test_assign() verifyNoAllocations(); } -constexpr void +void test_swap() { const Polymorphic val1(std::in_place_type, 1, 2, 3); @@ -128,7 +128,7 @@ test_swap() verifyNoAllocations(); } -constexpr void +void test_valueless() { auto e = [] { @@ -158,20 +158,75 @@ test_valueless() } constexpr void -test_all() +test_constexpr() { - test_ctor(); - test_assign(); - test_swap(); - test_valueless(); + using Polymorphic = std::polymorphic>; + const Polymorphic val(std::in_place_type, 1, 2, 3); + + std::optional src; + auto make = [&src, &val] -> Polymorphic&& { + src.emplace(val); + return std::move(*src); + }; + + Polymorphic i1(make()); + VERIFY( src->valueless_after_move() ); + VERIFY( *i1 == *val ); + + Polymorphic i2(std::allocator_arg, {}, make()); + VERIFY( src->valueless_after_move() ); + VERIFY( *i2 == *val ); + + i1 = make(); + VERIFY( src->valueless_after_move() ); + VERIFY( *i1 == *val ); + + auto(std::move(i1)); + i1 = make(); + VERIFY( *i1 == *val ); + VERIFY( src->valueless_after_move() ); + + const Polymorphic val1(std::in_place_type, 1, 2, 3); + const Polymorphic val2(std::in_place_type, 2, 4, 6); + + Polymorphic s1(val1); + Polymorphic s2(val2); + s1.swap(s2); + VERIFY( *s2 == *val1 ); + VERIFY( *s1 == *val2 ); + + auto(std::move(s1)); + s1.swap(s2); + VERIFY( *s1 == *val1 ); + VERIFY( s2.valueless_after_move() ); + + auto e = [] { + Polymorphic res(std::in_place_type); + auto(std::move(res)); + return res; + }; + + Polymorphic e1(e()); + VERIFY( e1.valueless_after_move() ); + + Polymorphic e2(std::allocator_arg, {}, e()); + VERIFY( e2.valueless_after_move() ); + + Polymorphic e3(val); + e3 = e(); + e3 = e(); } int main() { - test_all(); + test_ctor(); + test_assign(); + test_swap(); + test_valueless(); + test_constexpr(); static_assert([] { - test_all(); + test_constexpr(); return true; - }); + }()); } diff --git a/libstdc++-v3/testsuite/std/memory/polymorphic/move_alloc.cc b/libstdc++-v3/testsuite/std/memory/polymorphic/move_alloc.cc index 09afedb78848..490bffb8c392 100644 --- a/libstdc++-v3/testsuite/std/memory/polymorphic/move_alloc.cc +++ b/libstdc++-v3/testsuite/std/memory/polymorphic/move_alloc.cc @@ -50,7 +50,7 @@ using __gnu_test::propagating_allocator; using __gnu_test::tracker_allocator; using Counter = __gnu_test::tracker_allocator_counter; -constexpr void +void verifyNoAllocations() { VERIFY( Counter::get_allocation_count() == 0 ); @@ -60,7 +60,7 @@ verifyNoAllocations() } template -constexpr void +void test_ctor() { using PropAlloc = propagating_allocator; @@ -105,7 +105,7 @@ test_ctor() } template -constexpr void +void test_assign() { using PropAlloc = propagating_allocator; @@ -201,7 +201,7 @@ test_assign() } template -constexpr void +void test_swap() { using PropAlloc = propagating_allocator; @@ -254,7 +254,7 @@ test_swap() } template -constexpr void +void test_valueless() { using PropAlloc = propagating_allocator; @@ -317,7 +317,7 @@ test_valueless() } template -constexpr void +void test_all() { test_ctor(); @@ -330,10 +330,4 @@ int main() { test_all(); test_all(); - - static_assert([] { - test_all(); - test_all(); - return true; - }); } diff --git a/libstdc++-v3/testsuite/std/memory/start_lifetime_as/start_lifetime_as.cc b/libstdc++-v3/testsuite/std/memory/start_lifetime_as/start_lifetime_as.cc new file mode 100644 index 000000000000..c32e4de292ac --- /dev/null +++ b/libstdc++-v3/testsuite/std/memory/start_lifetime_as/start_lifetime_as.cc @@ -0,0 +1,94 @@ +// { dg-do run { target c++23 } } + +#include +#include + +#include +#include + +struct S { int a; int b; }; +struct T { long long c; }; + +template +void +test01() +{ +} + +template +requires (sizeof(S) == sizeof(T)) +void +test01() +{ + union U { unsigned char a[sizeof(S)]; S b; T c; } u; + u.a[0] = 1; + T v = std::bit_cast (S{1, 2}); + union V { unsigned char a[3 * sizeof(S)]; S b[3]; T c[3]; } w; + T x = std::bit_cast (S{3, 4}); + T y = std::bit_cast (S{5, 6}); + S* d = std::start_lifetime_as(reinterpret_cast(&u.a)); + d->a = 1; + d->b = 2; + T* e = std::start_lifetime_as(reinterpret_cast(d)); + VERIFY( e->c == v.c ); + const T* f = std::start_lifetime_as(reinterpret_cast(d)); + VERIFY( f->c == v.c ); + volatile T* g + = std::start_lifetime_as(reinterpret_cast(d)); + VERIFY( g->c == v.c ); + const volatile T* h + = std::start_lifetime_as(reinterpret_cast(d)); + VERIFY( h->c == v.c ); + S* i = std::start_lifetime_as_array(reinterpret_cast(&w.a), 3); + i[0].a = 1; + i[0].b = 2; + i[1].a = 3; + i[1].b = 4; + i[2].a = 5; + i[2].b = 6; + T* j = std::start_lifetime_as_array(reinterpret_cast(i), 3); + VERIFY( j[0].c == v.c && j[1].c == x.c && j[2].c == y.c ); + const T* k + = std::start_lifetime_as_array(reinterpret_cast(i), 3); + VERIFY( k[0].c == v.c && k[1].c == x.c && k[2].c == y.c ); + volatile T* l + = std::start_lifetime_as_array(reinterpret_cast(i), 3); + VERIFY( l[0].c == v.c && l[1].c == x.c && l[2].c == y.c ); + const volatile T* m + = std::start_lifetime_as_array(reinterpret_cast(i), + 3); + VERIFY( m[0].c == v.c && m[1].c == x.c && m[2].c == y.c ); + T* n = std::start_lifetime_as_array(static_cast(nullptr), 0); + VERIFY( n == nullptr ); + const T* o + = std::start_lifetime_as_array(static_cast(nullptr), 0); + VERIFY( o == nullptr ); + volatile T* p + = std::start_lifetime_as_array(static_cast(nullptr), 0); + VERIFY( p == nullptr ); + const volatile T* q + = std::start_lifetime_as_array(static_cast(nullptr), + 0); + VERIFY( q == nullptr ); + VERIFY( std::start_lifetime_as_array(reinterpret_cast(&w.a), 0) + == &w.c[0] ); + VERIFY( std::start_lifetime_as_array(reinterpret_cast(&w.a), 0) + == static_cast(&w.c[0]) ); + VERIFY( std::start_lifetime_as_array(reinterpret_cast(&w.a), + 0) + == static_cast(&w.c[0]) ); + VERIFY( std::start_lifetime_as_array(reinterpret_cast(&w.a), + 0) + == static_cast(&w.c[0]) ); + static const S r[] = { { 5, 6 }, { 3, 4 } }; + const T* s = std::start_lifetime_as(&r[1]); + VERIFY( s->c == x.c ); + const T* t = std::start_lifetime_as_array(&r[0], 2); + VERIFY( t[0].c == y.c && t[1].c == x.c ); +} + +int +main() +{ + test01(); +} diff --git a/libstdc++-v3/testsuite/std/ranges/adaptors/adjacent/1.cc b/libstdc++-v3/testsuite/std/ranges/adaptors/adjacent/1.cc index 085cd4a8c54c..0a5c67f56140 100644 --- a/libstdc++-v3/testsuite/std/ranges/adaptors/adjacent/1.cc +++ b/libstdc++-v3/testsuite/std/ranges/adaptors/adjacent/1.cc @@ -114,6 +114,18 @@ test04() return true; } +constexpr bool +test05() +{ + // PR libstdc++/121956 + int a[2]{}; + __gnu_test::test_random_access_range r(a); + auto v = r | views::pairwise; + static_assert( std::is_same_v, + std::tuple> ); + return true; +} + int main() { @@ -121,4 +133,5 @@ main() static_assert(test02()); static_assert(test03()); static_assert(test04()); + static_assert(test05()); } diff --git a/libstdc++-v3/testsuite/std/ranges/adaptors/drop.cc b/libstdc++-v3/testsuite/std/ranges/adaptors/drop.cc index 4583fb0e7130..57db806069ed 100644 --- a/libstdc++-v3/testsuite/std/ranges/adaptors/drop.cc +++ b/libstdc++-v3/testsuite/std/ranges/adaptors/drop.cc @@ -243,7 +243,7 @@ test08() long b[10]{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; test_range rb(b); - ranges::subrange sized = {rb.begin(), rb.begin()+6}; + ranges::subrange sized = {rb.begin(), ranges::next(rb.begin(), 6)}; using Sized = decltype(sized); static_assert( ranges::random_access_range ); static_assert( ranges::sized_range ); diff --git a/libstdc++-v3/testsuite/std/time/clock/local/io.cc b/libstdc++-v3/testsuite/std/time/clock/local/io.cc index 67818e876497..6efd81a87c2a 100644 --- a/libstdc++-v3/testsuite/std/time/clock/local/io.cc +++ b/libstdc++-v3/testsuite/std/time/clock/local/io.cc @@ -125,6 +125,14 @@ test_parse() VERIFY( tp.time_since_epoch() == 0s ); } +// LWG 4257. Stream insertion for chrono::local_time should be constrained +template +concept ostream_insertable = requires (std::ostream& o, const T& t) { o << t; }; +using D = std::chrono::duration; +static_assert( ostream_insertable ); +static_assert( ostream_insertable ); +static_assert( ! ostream_insertable> ); + int main() { test_ostream(); diff --git a/libstdc++-v3/testsuite/std/time/format/empty_spec.cc b/libstdc++-v3/testsuite/std/time/format/empty_spec.cc index ef1b19d688c7..a20c074018e8 100644 --- a/libstdc++-v3/testsuite/std/time/format/empty_spec.cc +++ b/libstdc++-v3/testsuite/std/time/format/empty_spec.cc @@ -653,15 +653,15 @@ wall_cast(const local_time& tp) using decadays = duration>; using kilodays = duration>; -template +template void -test_time_point(bool daysAsTime) +test_time_point() { std::basic_string res; const auto lt = local_days(2024y/March/22) + 13h + 24min + 54s + 111222333ns; - auto strip_time = [daysAsTime](std::basic_string_view sv) - { return daysAsTime ? sv : sv.substr(0, 10); }; + auto strip_time = [](std::basic_string_view sv) + { return CustomizedOstream ? sv.substr(0, 10) : sv; }; verify( wall_cast(lt), WIDEN("2024-03-22 13:24:54.111222333") ); @@ -681,6 +681,19 @@ test_time_point(bool daysAsTime) strip_time(WIDEN("2024-03-18 00:00:00")) ); verify( wall_cast(lt), strip_time(WIDEN("2022-01-08 00:00:00")) ); + + if constexpr (!CustomizedOstream) + { + verify( wall_cast>(lt), + WIDEN("2024-03-22 13:24:54") ); + verify( wall_cast(lt), + WIDEN("2024-01-01 02:16:48") ); + } + else + { + test_no_empty_spec>>(); + test_no_empty_spec>(); + } } template @@ -776,20 +789,18 @@ template void test_time_points() { - test_time_point(false); - test_time_point(false); - test_time_point(true); - test_time_point(true); - test_time_point(true); - test_time_point(true); + test_time_point(); + test_time_point(); + test_time_point(); + test_time_point(); + test_time_point(); + test_time_point(); test_leap_second(); #if _GLIBCXX_USE_CXX11_ABI || !_GLIBCXX_USE_DUAL_ABI test_zoned_time(); #endif test_local_time_format(); - test_no_empty_spec>(); - test_no_empty_spec>>(); } #if _GLIBCXX_USE_CXX11_ABI || !_GLIBCXX_USE_DUAL_ABI diff --git a/libstdc++-v3/testsuite/std/time/format/format.cc b/libstdc++-v3/testsuite/std/time/format/format.cc index 00affb9e11a3..d1aee053acd4 100644 --- a/libstdc++-v3/testsuite/std/time/format/format.cc +++ b/libstdc++-v3/testsuite/std/time/format/format.cc @@ -2,6 +2,7 @@ // { dg-timeout-factor 2 } #include +#include #include void diff --git a/libstdc++-v3/testsuite/std/time/parse/parse.cc b/libstdc++-v3/testsuite/std/time/parse/parse.cc index 8bb0fd0bebab..78c761c115f6 100644 --- a/libstdc++-v3/testsuite/std/time/parse/parse.cc +++ b/libstdc++-v3/testsuite/std/time/parse/parse.cc @@ -309,7 +309,7 @@ test_modifiers() is >> parse("%5M", min); VERIFY( is.eof() && is.fail() ); - std::chrono::seconds s; + std::chrono::seconds s{}; is.clear(); is.str("000000000012345"); is >> parse("%12S", s); // Read more than 10 digits to check overflow logic. diff --git a/libstdc++-v3/testsuite/std/time/year_month_day/io.cc b/libstdc++-v3/testsuite/std/time/year_month_day/io.cc index 632b7a0fc2da..5ce2794347a1 100644 --- a/libstdc++-v3/testsuite/std/time/year_month_day/io.cc +++ b/libstdc++-v3/testsuite/std/time/year_month_day/io.cc @@ -43,38 +43,87 @@ test_format() s = std::format("{:%G-W%V-%u}", 2022y/January/3); VERIFY( s == "2022-W01-1" ); + std::chrono::month Quindecember(17); // %U: Week number for weeks starting on Sunday s = std::format("Day {:%w (%a) of Week %U of %Y}", 2022y/January/1); VERIFY( s == "Day 6 (Sat) of Week 00 of 2022" ); s = std::format("Day {:%w (%a) of Week %U of %Y}", 2022y/January/2); VERIFY( s == "Day 0 (Sun) of Week 01 of 2022" ); + s = std::format("Day {:%w (%a) of Week %U of %Y}", 2024y/January/1); + VERIFY( s == "Day 1 (Mon) of Week 00 of 2024" ); + s = std::format("Day {:%w (%a) of Week %U of %Y}", 2024y/January/7); + VERIFY( s == "Day 0 (Sun) of Week 01 of 2024" ); + s = std::format("Day {:%w (%a) of Week %U of %Y}", 2024y/January/8); + VERIFY( s == "Day 1 (Mon) of Week 01 of 2024" ); + s = std::format("Day {:%w (%a) of Week %U of %Y}", 2022y/Quindecember/20); + VERIFY( s == "Day 1 (Mon) of Week 73 of 2022" ); // %W: Week number for weeks starting on Monday s = std::format("Day {:%u (%a) of Week %W of %Y}", 2022y/January/2); VERIFY( s == "Day 7 (Sun) of Week 00 of 2022" ); s = std::format("Day {:%u (%a) of Week %W of %Y}", 2022y/January/3); VERIFY( s == "Day 1 (Mon) of Week 01 of 2022" ); - + s = std::format("Day {:%w (%a) of Week %W of %Y}", 2019y/January/1); + VERIFY( s == "Day 2 (Tue) of Week 00 of 2019" ); + s = std::format("Day {:%w (%a) of Week %W of %Y}", 2019y/January/7); + VERIFY( s == "Day 1 (Mon) of Week 01 of 2019" ); + s = std::format("Day {:%w (%a) of Week %W of %Y}", 2019y/January/8); + VERIFY( s == "Day 2 (Tue) of Week 01 of 2019" ); + s = std::format("Day {:%w (%a) of Week %W of %Y}", 2022y/Quindecember/20); + VERIFY( s == "Day 1 (Mon) of Week 73 of 2022" ); + + // %G: ISO week-calendar year (ISO 8601) // %V: ISO week number (ISO 8601). - s = std::format("W{:%V}", 1977y/1/1); - VERIFY( s == "W53" ); - s = std::format("W{:%V}", 1977y/1/2); - VERIFY( s == "W53" ); - s = std::format("W{:%V}", 1977y/12/31); - VERIFY( s == "W52" ); - s = std::format("W{:%V}", 1978y/1/1); - VERIFY( s == "W52" ); - s = std::format("W{:%V}", 1978y/1/2); - VERIFY( s == "W01" ); - s = std::format("W{:%V}", 1978y/12/31); - VERIFY( s == "W52" ); - s = std::format("W{:%V}", 1979y/1/1); - VERIFY( s == "W01" ); - s = std::format("W{:%V}", 1979y/12/30); - VERIFY( s == "W52" ); - s = std::format("W{:%V}", 1979y/12/31); - VERIFY( s == "W01" ); - s = std::format("W{:%V}", 1980y/1/1); - VERIFY( s == "W01" ); + s = std::format("{:%G-W%V}", 1977y/1/1); + VERIFY( s == "1976-W53" ); + s = std::format("{:%G-W%V}", 1977y/1/2); + VERIFY( s == "1976-W53" ); + s = std::format("{:%G-W%V}", 1977y/1/3); + VERIFY( s == "1977-W01" ); + s = std::format("{:%G-W%V}", 1977y/12/31); + VERIFY( s == "1977-W52" ); + s = std::format("{:%G-W%V}", 1978y/1/1); + VERIFY( s == "1977-W52" ); + s = std::format("{:%G-W%V}", 1978y/1/2); + VERIFY( s == "1978-W01" ); + s = std::format("{:%G-W%V}", 1978y/12/31); + VERIFY( s == "1978-W52" ); + s = std::format("{:%G-W%V}", 1979y/1/1); + VERIFY( s == "1979-W01" ); + s = std::format("{:%G-W%V}", 1979y/12/30); + VERIFY( s == "1979-W52" ); + s = std::format("{:%G-W%V}", 1979y/12/31); + VERIFY( s == "1980-W01" ); + s = std::format("{:%G-W%V}", 1980y/1/1); + VERIFY( s == "1980-W01" ); + s = std::format("{:%G-W%V}", 1980y/18/20); + VERIFY( s == "1981-W26" ); + + // "Leap weak" on year starting on Thursday + s = std::format("{:%G-W%V}", 2009y/12/31); + VERIFY( s == "2009-W53" ); + s = std::format("{:%G-W%V}", 2010y/1/1); + VERIFY( s == "2009-W53" ); + s = std::format("{:%G-W%V}", 2010y/1/3); + VERIFY( s == "2009-W53" ); + s = std::format("{:%G-W%V}", 2010y/1/4); + VERIFY( s == "2010-W01" ); + + // "Leap weak" on leap year stating on Wednesday + // 2020/Dec/31 is Thurday, thus 366 day of year + s = std::format("{:%G-W%V}", 2020y/12/30); + VERIFY( s == "2020-W53" ); + s = std::format("{:%G-W%V}", 2020y/12/31); + VERIFY( s == "2020-W53" ); + s = std::format("{:%G-W%V}", 2021y/1/1); + VERIFY( s == "2020-W53" ); + s = std::format("{:%G-W%V}", 2021y/1/3); + VERIFY( s == "2020-W53" ); + s = std::format("{:%G-W%V}", 2021y/1/4); + VERIFY( s == "2021-W01" ); + s = std::format("{:%G-W%V}", 2021y/1/7); + VERIFY( s == "2021-W01" ); + s = std::format("{:%G-W%V}", 2021y/1/8); + VERIFY( s == "2021-W01" ); s = std::format("{:%x}", 2022y/December/19); VERIFY( s == "12/19/22" ); diff --git a/libstdc++-v3/testsuite/std/time/year_month_day_last/io.cc b/libstdc++-v3/testsuite/std/time/year_month_day_last/io.cc index 3241536a2e64..de4f24795572 100644 --- a/libstdc++-v3/testsuite/std/time/year_month_day_last/io.cc +++ b/libstdc++-v3/testsuite/std/time/year_month_day_last/io.cc @@ -22,9 +22,88 @@ test_ostream() VERIFY( ss.str() == "2023/juil./last" ); } +void +test_format() +{ + using namespace std::chrono; + + std::string s = std::format("{:%Y%t%C%%%y%n%j %b %a}", 2024y/January/last); + VERIFY( s == "2024\t20%24\n031 Jan Wed" ); + std::wstring ws = std::format(L"{:%Y%t%C%%%y%n%j %b %a}", 2024y/December/last); + VERIFY( ws == L"2024\t20%24\n366 Dec Tue" ); + + s = std::format("{0:%Y-%m-%d} {0}", 2023y/May/last); + VERIFY( s == "2023-05-31 2023/May/last" ); + s = std::format("{0:%Y-%m-%d} {0}", 2023y/month(13)/last); + VERIFY( s == "2023-13-30 2023/13 is not a valid month/last" ); + + s = std::format("{:%Y-%m-%d %j}", 2024y/February/last); + VERIFY( s == "2024-02-29 060" ); + s = std::format("{:%Y-%m-%d %j}", 2023y/February/last); + VERIFY( s == "2023-02-28 059" ); + s = std::format("{:%Y-%m-%d %j}", 2024y/September/last); + VERIFY( s == "2024-09-30 274" ); + + // %U: Week number for weeks starting on Sunday + s = std::format("{:%Y-U%U}", 2023y/January/last); + VERIFY( s == "2023-U05" ); + s = std::format("{:%Y-U%U}", 2023y/December/last); + VERIFY( s == "2023-U53" ); + // %W: Week number for weeks starting on Monday + s = std::format("{:%Y-W%W}", 2023y/January/last); + VERIFY( s == "2023-W05" ); + s = std::format("{:%Y-W%W}", 2023y/December/last); + VERIFY( s == "2023-W52" ); + + // %G: ISO week-calendar year (ISO 8601) + // %V: ISO week number (ISO 8601). + s = std::format("{:%G-V%V}", 2019y/December/last); + VERIFY( s == "2020-V01" ); + s = std::format("{:%G-V%V}", 2023y/January/last); + VERIFY( s == "2023-V05" ); + s = std::format("{:%G-V%V}", 2023y/December/last); + VERIFY( s == "2023-V52" ); + + s = std::format("{:%F}", 2023y/July/last); + VERIFY( s == "2023-07-31" ); + s = std::format("{:%x}", 2023y/July/last); + VERIFY( s == "07/31/23" ); + s = std::format("{:L%x}", 2023y/July/last); + VERIFY( s == "07/31/23" ); + std::locale loc_fr(ISO_8859(15,fr_FR)); + s = std::format(loc_fr, "{:%x}", 2023y/July/last); + VERIFY( s == "07/31/23" ); + s = std::format(loc_fr, "{:L%x}", 2023y/July/last); + VERIFY( s == "31/07/2023" || s == "31.07.2023" ); // depends on locale defs + s = std::format(loc_fr, "{:L}", 2023y/July/last); + VERIFY( s == "2023/juil./last" ); + + std::string_view specs = "aAbBcCdDeFgGhHIjmMpqQrRSTuUVwWxXyYzZ"; + std::string_view my_specs = "aAbBCdDeFgGhjmuUVwWxyY"; + for (char c : specs) + { + char fmt[] = { '{', ':', '%', c, '}' }; + try + { + year_month_weekday ymw = 2023y/July/Thursday[2]; + (void) std::vformat(std::string_view(fmt, 5), std::make_format_args(ymw)); + // The call above should throw for any conversion-spec not in my_specs: + VERIFY(my_specs.find(c) != my_specs.npos); + } + catch (const std::format_error& e) + { + VERIFY(my_specs.find(c) == my_specs.npos); + std::string_view s = e.what(); + // Libstdc++-specific message: + VERIFY(s.find("format argument does not contain the information " + "required by the chrono-specs") != s.npos); + } + } +} + int main() { test_ostream(); - // TODO: test_format(); + test_format(); // TODO: test_parse(); } diff --git a/libstdc++-v3/testsuite/std/time/year_month_weekday/io.cc b/libstdc++-v3/testsuite/std/time/year_month_weekday/io.cc index 65baf1d37ae3..92fd67022a24 100644 --- a/libstdc++-v3/testsuite/std/time/year_month_weekday/io.cc +++ b/libstdc++-v3/testsuite/std/time/year_month_weekday/io.cc @@ -34,9 +34,155 @@ test_ostream() VERIFY( ss.str() == "2023/juil./jeu.[2]" ); } +void +test_format() +{ + using namespace std::chrono; + + std::string s = std::format("{:%Y%t%C%%%y%n%j %b %a}", 2024y/January/Friday[2]); + VERIFY( s == "2024\t20%24\n012 Jan Fri" ); + std::wstring ws = std::format(L"{:%Y%t%C%%%y%n%j %b %a}", 2024y/December/Monday[1]); + VERIFY( ws == L"2024\t20%24\n337 Dec Mon" ); + + s = std::format("{0:%Y-%m-%d} {0}", 2023y/May/Monday[1]); + VERIFY( s == "2023-05-01 2023/May/Mon[1]" ); + s = std::format("{0:%Y-%m-%d} {0}", 2023y/month(13)/Monday[1]); + VERIFY( s == "2023-13-01 2023/13 is not a valid month/Mon[1]" ); + + s = std::format("{:%u %w}", Monday[1]); + VERIFY( s == "1 1" ); + s = std::format("{:%u %w}", Sunday[2]); + VERIFY( s == "7 0" ); + // 0 and 7 are both Sundays + s = std::format("{:%u %w}", weekday(0)[1]); + VERIFY( s == "7 0" ); + s = std::format("{:%u %w}", weekday(7)[1]); + VERIFY( s == "7 0" ); + s = std::format("{:%u %w}", weekday(9)[1]); + VERIFY( s == "9 9" ); + + s = std::format("{:%Y-%m-%d %j}", 2024y/February/Thursday[5]); + VERIFY( s == "2024-02-29 060" ); + s = std::format("{:%Y-%m-%d %j}", 2023y/February/Tuesday[4]); + VERIFY( s == "2023-02-28 059" ); + s = std::format("{:%Y-%m-%d %j}", 2024y/September/Sunday[1]); + VERIFY( s == "2024-09-01 245" ); + s = std::format("{:%Y-%m-%d %j}", 2024y/September/Sunday[5]); + VERIFY( s == "2024-09-29 273" ); + // see https://gcc.gnu.org/bugzilla/show_bug.cgi?id=121929 + // first weeks of next month + s = std::format("{:%Y-%m-%d %j}", 2024y/September/Sunday[6]); + VERIFY( s == "2024-09-06 280" ); + s = std::format("{:%Y-%m-%d %j}", 2024y/September/Sunday[7]); + VERIFY( s == "2024-09-13 287" ); + // last week on previous month + s = std::format("{:%Y-%m-%d %j}", 2024y/September/Saturday[0]); + VERIFY( s == "2024-09-31 244" ); + s = std::format("{:%Y-%m-%d %j}", 2024y/September/Sunday[0]); + VERIFY( s == "2024-09-25 238" ); + + // %U: Week number for weeks starting on Sunday + s = std::format("{:%Y-U%U}", 2023y/January/Sunday[0]); + VERIFY( s == "2023-U00" ); + s = std::format("{:%Y-U%U}", 2023y/January/Sunday[1]); + VERIFY( s == "2023-U01" ); + s = std::format("{:%Y-U%U}", 2023y/January/Sunday[4]); + VERIFY( s == "2023-U04" ); + s = std::format("{:%Y-U%U}", 2023y/January/Sunday[7]); + VERIFY( s == "2023-U07" ); + s = std::format("{:%Y-U%U}", 2023y/December/Sunday[0]); + VERIFY( s == "2023-U48" ); + s = std::format("{:%Y-U%U}", 2023y/December/Sunday[1]); + VERIFY( s == "2023-U49" ); + s = std::format("{:%Y-U%U}", 2023y/December/Sunday[4]); + VERIFY( s == "2023-U52" ); + s = std::format("{:%Y-U%U}", 2023y/December/Sunday[7]); + VERIFY( s == "2023-U55" ); + // %W: Week number for weeks starting on Monday + s = std::format("{:%Y-W%W}", 2023y/January/Monday[0]); + VERIFY( s == "2023-W00" ); + s = std::format("{:%Y-W%W}", 2023y/January/Monday[1]); + VERIFY( s == "2023-W01" ); + s = std::format("{:%Y-W%W}", 2023y/January/Monday[4]); + VERIFY( s == "2023-W04" ); + s = std::format("{:%Y-W%W}", 2023y/January/Monday[7]); + VERIFY( s == "2023-W07" ); + s = std::format("{:%Y-W%W}", 2023y/December/Monday[0]); + VERIFY( s == "2023-W48" ); + s = std::format("{:%Y-W%W}", 2023y/December/Monday[1]); + VERIFY( s == "2023-W49" ); + s = std::format("{:%Y-W%W}", 2023y/December/Monday[4]); + VERIFY( s == "2023-W52" ); + s = std::format("{:%Y-W%W}", 2023y/December/Monday[7]); + VERIFY( s == "2023-W55" ); + // First Sunday precedes first Monday, so happens on + // last week of previous month and thus year + s = std::format("{:%Y-W%W}", 2023y/January/Sunday[1]); + VERIFY( s == "2023-W00" ); + // Last Sunday of pevious year happens on second to + // last week on previous year + s = std::format("{:%Y-W%W}", 2023y/January/Sunday[0]); + VERIFY( s == "2023-W99" ); + + // %G: ISO week-calendar year (ISO 8601) + // %V: ISO week number (ISO 8601). + s = std::format("{:%G-V%V}", 2023y/January/Monday[0]); + VERIFY( s == "2022-V52" ); + s = std::format("{:%G-V%V}", 2023y/January/Monday[1]); + VERIFY( s == "2023-V01" ); + s = std::format("{:%G-V%V}", 2023y/January/Monday[4]); + VERIFY( s == "2023-V04" ); + s = std::format("{:%G-V%V}", 2023y/January/Monday[7]); + VERIFY( s == "2023-V07" ); + s = std::format("{:%G-V%V}", 2023y/December/Friday[0]); + VERIFY( s == "2023-V47" ); + s = std::format("{:%G-V%V}", 2023y/December/Friday[1]); + VERIFY( s == "2023-V48" ); + s = std::format("{:%G-V%V}", 2023y/December/Friday[5]); + VERIFY( s == "2023-V52" ); + s = std::format("{:%G-V%V}", 2023y/December/Friday[6]); + VERIFY( s == "2024-V01" ); + + s = std::format("{:%F}", 2023y/July/Thursday[2]); + VERIFY( s == "2023-07-13" ); + s = std::format("{:%x}", 2023y/July/Thursday[2]); + VERIFY( s == "07/13/23" ); + s = std::format("{:L%x}", 2023y/July/Thursday[2]); + VERIFY( s == "07/13/23" ); + std::locale loc_fr(ISO_8859(15,fr_FR)); + s = std::format(loc_fr, "{:%x}", 2023y/July/Thursday[2]); + VERIFY( s == "07/13/23" ); + s = std::format(loc_fr, "{:L%x}", 2023y/July/Thursday[2]); + VERIFY( s == "13/07/2023" || s == "13.07.2023" ); // depends on locale defs + s = std::format(loc_fr, "{:L}", 2023y/July/Thursday[2]); + VERIFY( s == "2023/juil./jeu.[2]" ); + + std::string_view specs = "aAbBcCdDeFgGhHIjmMpqQrRSTuUVwWxXyYzZ"; + std::string_view my_specs = "aAbBCdDeFgGhjmuUVwWxyY"; + for (char c : specs) + { + char fmt[] = { '{', ':', '%', c, '}' }; + try + { + year_month_weekday ymw = 2023y/July/Thursday[2]; + (void) std::vformat(std::string_view(fmt, 5), std::make_format_args(ymw)); + // The call above should throw for any conversion-spec not in my_specs: + VERIFY(my_specs.find(c) != my_specs.npos); + } + catch (const std::format_error& e) + { + VERIFY(my_specs.find(c) == my_specs.npos); + std::string_view s = e.what(); + // Libstdc++-specific message: + VERIFY(s.find("format argument does not contain the information " + "required by the chrono-specs") != s.npos); + } + } +} + int main() { test_ostream(); - // TODO: test_format(); + test_format(); // TODO: test_parse(); } diff --git a/libstdc++-v3/testsuite/std/time/year_month_weekday_last/io.cc b/libstdc++-v3/testsuite/std/time/year_month_weekday_last/io.cc index 17f2244420d7..983589720b5e 100644 --- a/libstdc++-v3/testsuite/std/time/year_month_weekday_last/io.cc +++ b/libstdc++-v3/testsuite/std/time/year_month_weekday_last/io.cc @@ -30,9 +30,104 @@ test_ostream() VERIFY( ss.str() == "2023/juil./jeu.[last]" ); } +void +test_format() +{ + using namespace std::chrono; + + std::string s = std::format("{:%Y%t%C%%%y%n%j %b %a}", 2024y/January/Friday[last]); + VERIFY( s == "2024\t20%24\n026 Jan Fri" ); + std::wstring ws = std::format(L"{:%Y%t%C%%%y%n%j %b %a}", 2024y/December/Monday[last]); + VERIFY( ws == L"2024\t20%24\n365 Dec Mon" ); + + s = std::format("{0:%Y-%m-%d} {0}", 2023y/May/Monday[last]); + VERIFY( s == "2023-05-29 2023/May/Mon[last]" ); + s = std::format("{0:%Y-%m-%d} {0}", 2023y/month(13)/Monday[last]); + VERIFY( s == "2023-13-29 2023/13 is not a valid month/Mon[last]" ); + + s = std::format("{:%u %w}", Monday[last]); + VERIFY( s == "1 1" ); + s = std::format("{:%u %w}", Sunday[2]); + VERIFY( s == "7 0" ); + // 0 and 7 are both Sundays + s = std::format("{:%u %w}", weekday(0)[last]); + VERIFY( s == "7 0" ); + s = std::format("{:%u %w}", weekday(7)[last]); + VERIFY( s == "7 0" ); + s = std::format("{:%u %w}", weekday(9)[last]); + VERIFY( s == "9 9" ); + + s = std::format("{:%Y-%m-%d %j}", 2024y/February/Thursday[last]); + VERIFY( s == "2024-02-29 060" ); + s = std::format("{:%Y-%m-%d %j}", 2023y/February/Tuesday[last]); + VERIFY( s == "2023-02-28 059" ); + s = std::format("{:%Y-%m-%d %j}", 2024y/September/Sunday[last]); + VERIFY( s == "2024-09-29 273" ); + + // %U: Week number for weeks starting on Sunday + s = std::format("{:%Y-U%U}", 2023y/January/Sunday[last]); + VERIFY( s == "2023-U05" ); + s = std::format("{:%Y-U%U}", 2023y/December/Sunday[last]); + VERIFY( s == "2023-U53" ); + // %W: Week number for weeks starting on Monday + s = std::format("{:%Y-W%W}", 2023y/January/Monday[last]); + VERIFY( s == "2023-W05" ); + s = std::format("{:%Y-W%W}", 2023y/December/Monday[last]); + VERIFY( s == "2023-W52" ); + s = std::format("{:%Y-W%W}", 2023y/January/Sunday[last]); + VERIFY( s == "2023-W04" ); + s = std::format("{:%Y-W%W}", 2023y/December/Sunday[last]); + VERIFY( s == "2023-W52" ); + + // %G: ISO week-calendar year (ISO 8601) + // %V: ISO week number (ISO 8601). + s = std::format("{:%G-V%V}", 2019y/December/Tuesday[last]); + VERIFY( s == "2020-V01" ); + s = std::format("{:%G-V%V}", 2023y/January/Monday[last]); + VERIFY( s == "2023-V05" ); + s = std::format("{:%G-V%V}", 2023y/December/Friday[last]); + VERIFY( s == "2023-V52" ); + + s = std::format("{:%F}", 2023y/July/Thursday[last]); + VERIFY( s == "2023-07-27" ); + s = std::format("{:%x}", 2023y/July/Thursday[last]); + VERIFY( s == "07/27/23" ); + s = std::format("{:L%x}", 2023y/July/Thursday[last]); + VERIFY( s == "07/27/23" ); + std::locale loc_fr(ISO_8859(15,fr_FR)); + s = std::format(loc_fr, "{:%x}", 2023y/July/Thursday[last]); + VERIFY( s == "07/27/23" ); + s = std::format(loc_fr, "{:L%x}", 2023y/July/Thursday[last]); + VERIFY( s == "27/07/2023" || s == "27.07.2023" ); // depends on locale defs + s = std::format(loc_fr, "{:L}", 2023y/July/Thursday[last]); + VERIFY( s == "2023/juil./jeu.[last]" ); + + std::string_view specs = "aAbBcCdDeFgGhHIjmMpqQrRSTuUVwWxXyYzZ"; + std::string_view my_specs = "aAbBCdDeFgGhjmuUVwWxyY"; + for (char c : specs) + { + char fmt[] = { '{', ':', '%', c, '}' }; + try + { + year_month_weekday ymw = 2023y/July/Thursday[2]; + (void) std::vformat(std::string_view(fmt, 5), std::make_format_args(ymw)); + // The call above should throw for any conversion-spec not in my_specs: + VERIFY(my_specs.find(c) != my_specs.npos); + } + catch (const std::format_error& e) + { + VERIFY(my_specs.find(c) == my_specs.npos); + std::string_view s = e.what(); + // Libstdc++-specific message: + VERIFY(s.find("format argument does not contain the information " + "required by the chrono-specs") != s.npos); + } + } +} + int main() { test_ostream(); - // TODO: test_format(); + test_format(); // TODO: test_parse(); } diff --git a/libstdc++-v3/testsuite/util/testsuite_allocator.h b/libstdc++-v3/testsuite/util/testsuite_allocator.h index ee9575266a00..086685b4ac6d 100644 --- a/libstdc++-v3/testsuite/util/testsuite_allocator.h +++ b/libstdc++-v3/testsuite/util/testsuite_allocator.h @@ -216,7 +216,7 @@ namespace __gnu_test } // Implement swap for underlying allocators that might need it. - friend inline void + friend void swap(tracker_allocator& a, tracker_allocator& b) { using std::swap; @@ -310,10 +310,6 @@ namespace __gnu_test { typedef __gnu_cxx::__alloc_traits AllocTraits; - Alloc& base() { return *this; } - const Alloc& base() const { return *this; } - void swap_base(Alloc& b) { using std::swap; swap(b, this->base()); } - public: typedef typename check_consistent_alloc_value_type::value_type value_type; @@ -332,9 +328,11 @@ namespace __gnu_test typename AllocTraits::template rebind::other> other; }; + _GLIBCXX_CONSTEXPR uneq_allocator() _GLIBCXX_USE_NOEXCEPT : personality(0) { } + _GLIBCXX_CONSTEXPR uneq_allocator(int person) _GLIBCXX_USE_NOEXCEPT : personality(person) { } @@ -344,21 +342,23 @@ namespace __gnu_test #endif template + _GLIBCXX_CONSTEXPR uneq_allocator(const uneq_allocator::other>& b) _GLIBCXX_USE_NOEXCEPT : personality(b.get_personality()) { } - ~uneq_allocator() _GLIBCXX_USE_NOEXCEPT - { } - - int get_personality() const { return personality; } + _GLIBCXX_CONSTEXPR int get_personality() const { return personality; } + _GLIBCXX20_CONSTEXPR pointer allocate(size_type n, const void* = 0) { pointer p = AllocTraits::allocate(*this, n); + if (std::__is_constant_evaluated()) + return p; + try { get_map().insert(map_type::value_type(reinterpret_cast(p), @@ -373,19 +373,24 @@ namespace __gnu_test return p; } + _GLIBCXX14_CONSTEXPR void deallocate(pointer p, size_type n) { VERIFY( p ); - map_type::iterator it = get_map().find(reinterpret_cast(p)); - VERIFY( it != get_map().end() ); + if (!std::__is_constant_evaluated()) + { + map_type::iterator it = get_map().find(reinterpret_cast(p)); + VERIFY( it != get_map().end() ); + + // Enforce requirements in Table 32 about deallocation vs + // allocator equality. + VERIFY( it->second == personality ); - // Enforce requirements in Table 32 about deallocation vs - // allocator equality. - VERIFY( it->second == personality ); + get_map().erase(it); + } - get_map().erase(it); AllocTraits::deallocate(*this, p, n); } @@ -406,22 +411,23 @@ namespace __gnu_test private: // ... yet swappable! - friend inline void + friend _GLIBCXX_CONSTEXPR void swap(uneq_allocator& a, uneq_allocator& b) { std::swap(a.personality, b.personality); - a.swap_base(b); + using std::swap; + swap(static_cast(a), static_cast(b)); } template - friend inline bool + friend _GLIBCXX_CONSTEXPR bool operator==(const uneq_allocator& a, const uneq_allocator::other>& b) { return a.personality == b.get_personality(); } template - friend inline bool + friend _GLIBCXX_CONSTEXPR bool operator!=(const uneq_allocator& a, const uneq_allocator::other>& b) @@ -438,9 +444,12 @@ namespace __gnu_test typedef __gnu_cxx::__alloc_traits AllocTraits; typedef uneq_allocator base_alloc; - base_alloc& base() { return *this; } - const base_alloc& base() const { return *this; } - void swap_base(base_alloc& b) { swap(b, this->base()); } + _GLIBCXX14_CONSTEXPR void + swap_base(base_alloc& b) + { + using std::swap; + swap(b, static_cast(*this)); + } typedef std::integral_constant trait_type; @@ -454,11 +463,13 @@ namespace __gnu_test typename AllocTraits::template rebind::other> other; }; + constexpr propagating_allocator(int i) noexcept : base_alloc(i) { } template + constexpr propagating_allocator(const propagating_allocator::other>& a) noexcept @@ -469,6 +480,7 @@ namespace __gnu_test propagating_allocator(const propagating_allocator&) noexcept = default; + _GLIBCXX14_CONSTEXPR propagating_allocator& operator=(const propagating_allocator& a) noexcept { @@ -478,6 +490,7 @@ namespace __gnu_test } template + _GLIBCXX14_CONSTEXPR propagating_allocator& operator=(const propagating_allocator& a) noexcept { @@ -487,11 +500,13 @@ namespace __gnu_test } // postcondition: LWG2593 a.get_personality() un-changed. + constexpr propagating_allocator(propagating_allocator&& a) noexcept - : base_alloc(std::move(a.base())) + : base_alloc(static_cast(a)) { } // postcondition: LWG2593 a.get_personality() un-changed + _GLIBCXX14_CONSTEXPR propagating_allocator& operator=(propagating_allocator&& a) noexcept { @@ -503,7 +518,8 @@ namespace __gnu_test typedef trait_type propagate_on_container_move_assignment; typedef trait_type propagate_on_container_swap; - propagating_allocator select_on_container_copy_construction() const + constexpr propagating_allocator + select_on_container_copy_construction() const { return Propagate ? *this : propagating_allocator(); } }; @@ -551,11 +567,11 @@ namespace __gnu_test : state(a.state) { } - constexpr T* + _GLIBCXX14_CONSTEXPR T* allocate(std::size_t n) { return std::allocator().allocate(n); } - constexpr void + _GLIBCXX14_CONSTEXPR void deallocate(T* p, std::size_t n) { std::allocator().deallocate(p, n); } @@ -581,7 +597,7 @@ namespace __gnu_test ExplicitConsAlloc() { } template - explicit + explicit _GLIBCXX_CONSTEXPR ExplicitConsAlloc(const ExplicitConsAlloc&) { } template @@ -600,6 +616,7 @@ namespace __gnu_test CustomPointerAlloc() = default; template + constexpr CustomPointerAlloc(const CustomPointerAlloc&) { } template @@ -611,9 +628,11 @@ namespace __gnu_test typedef Ptr void_pointer; typedef Ptr const_void_pointer; + _GLIBCXX14_CONSTEXPR pointer allocate(std::size_t n, const_void_pointer = {}) { return pointer(std::allocator::allocate(n)); } + _GLIBCXX14_CONSTEXPR void deallocate(pointer p, std::size_t n) { std::allocator::deallocate(std::addressof(*p), n); } }; @@ -631,16 +650,16 @@ namespace __gnu_test explicit operator bool() const noexcept { return value != nullptr; } - friend inline bool + friend constexpr bool operator==(NullablePointer lhs, NullablePointer rhs) noexcept { return lhs.value == rhs.value; } - friend inline bool + friend constexpr bool operator!=(NullablePointer lhs, NullablePointer rhs) noexcept { return lhs.value != rhs.value; } protected: - explicit NullablePointer(Ptr p) noexcept : value(p) { } + constexpr explicit NullablePointer(Ptr p) noexcept : value(p) { } Ptr value; }; @@ -649,16 +668,16 @@ namespace __gnu_test struct NullablePointer { NullablePointer() = default; - NullablePointer(std::nullptr_t) noexcept { } - explicit NullablePointer(const volatile void*) noexcept { } + constexpr NullablePointer(std::nullptr_t) noexcept { } + constexpr explicit NullablePointer(const volatile void*) noexcept { } - explicit operator bool() const noexcept { return false; } + constexpr explicit operator bool() const noexcept { return false; } - friend inline bool + friend constexpr bool operator==(NullablePointer, NullablePointer) noexcept { return true; } - friend inline bool + friend constexpr bool operator!=(NullablePointer, NullablePointer) noexcept { return false; } }; diff --git a/libstdc++-v3/testsuite/util/testsuite_iterators.h b/libstdc++-v3/testsuite/util/testsuite_iterators.h index acd412af0f22..5bf2e704e843 100644 --- a/libstdc++-v3/testsuite/util/testsuite_iterators.h +++ b/libstdc++-v3/testsuite/util/testsuite_iterators.h @@ -607,6 +607,16 @@ namespace __gnu_test T& operator[](std::ptrdiff_t n) const { return *(*this + n); } +#if __cplusplus >= 201103L + // Ensure that the iterator's difference_type is always used. + template void operator+=(D) = delete; + template void operator-=(D) = delete; + template void operator[](D) const = delete; + template + typename std::enable_if::value>::type + operator-(D) const = delete; +#endif + _GLIBCXX14_CONSTEXPR bool operator<(const random_access_iterator_wrapper& in) const { @@ -645,6 +655,14 @@ namespace __gnu_test operator+(std::ptrdiff_t n, random_access_iterator_wrapper it) { return it += n; } +#if __cplusplus >= 201103L + // Ensure that the iterator's difference_type is always used. + template + void operator+(random_access_iterator_wrapper, D) = delete; + template + void operator+(D, random_access_iterator_wrapper) = delete; +#endif + /** * @brief A container-type class for holding iterator wrappers diff --git a/libtool.m4 b/libtool.m4 index add2d4a1e23d..0e639dc98b24 100644 --- a/libtool.m4 +++ b/libtool.m4 @@ -1372,32 +1372,27 @@ need_locks="$enable_libtool_lock" # _LT_CMD_OLD_ARCHIVE # ------------------- m4_defun([_LT_CMD_OLD_ARCHIVE], -[plugin_option= -plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll" -for plugin in $plugin_names; do - plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin` - if test x$plugin_so = x$plugin; then - plugin_so=`${CC} ${CFLAGS} --print-file-name $plugin` - fi - if test x$plugin_so != x$plugin; then - plugin_option="--plugin $plugin_so" - break - fi -done - +[ +# Try CLANG_PLUGIN_FILE first since GCC_PLUGIN_OPTION may return the +# wrong plugin_option with clang. +CLANG_PLUGIN_FILE(plugin_file) +if test -n "$plugin_file"; then + plugin_option="--plugin $plugin_file" +else + GCC_PLUGIN_OPTION(plugin_option) +fi AC_CHECK_TOOL(AR, ar, false) test -z "$AR" && AR=ar if test -n "$plugin_option"; then - if $AR --help 2>&1 | grep -q "\--plugin"; then - touch conftest.c - $AR $plugin_option rc conftest.a conftest.c - if test "$?" != 0; then - AC_MSG_WARN([Failed: $AR $plugin_option rc]) - else + case "$AR" in + *"$plugin_option"*) + ;; + *) + if $AR --help 2>&1 | grep -q "\--plugin"; then AR="$AR $plugin_option" fi - rm -f conftest.* - fi + ;; + esac fi test -z "$AR_FLAGS" && AR_FLAGS=cru _LT_DECL([], [AR], [1], [The archiver]) @@ -1410,9 +1405,15 @@ _LT_DECL([], [STRIP], [1], [A symbol stripping program]) AC_CHECK_TOOL(RANLIB, ranlib, :) test -z "$RANLIB" && RANLIB=: if test -n "$plugin_option" && test "$RANLIB" != ":"; then - if $RANLIB --help 2>&1 | grep -q "\--plugin"; then - RANLIB="$RANLIB $plugin_option" - fi + case "$RANLIB" in + *"$plugin_option"*) + ;; + *) + if $RANLIB --help 2>&1 | grep -q "\--plugin"; then + RANLIB="$RANLIB $plugin_option" + fi + ;; + esac fi _LT_DECL([], [RANLIB], [1], [Commands used to install an old-style archive]) diff --git a/libvtv/ChangeLog b/libvtv/ChangeLog index 4d1bd448bdce..c4f27708a554 100644 --- a/libvtv/ChangeLog +++ b/libvtv/ChangeLog @@ -1,3 +1,10 @@ +2025-10-05 Sam James + + * Makefile.in: Regenerate. + * aclocal.m4: Regenerate. + * configure: Regenerate. + * testsuite/Makefile.in: Regenerate. + 2025-05-09 David Malcolm PR other/116792 diff --git a/libvtv/Makefile.in b/libvtv/Makefile.in index 70b440347126..739b0b4e039c 100644 --- a/libvtv/Makefile.in +++ b/libvtv/Makefile.in @@ -95,7 +95,9 @@ target_triplet = @target@ subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/depstand.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ $(top_srcdir)/../config/libstdc++-raw-cxx.m4 \ $(top_srcdir)/../config/lthostflags.m4 \ @@ -310,6 +312,7 @@ LIBSTDCXX_RAW_CXX_CXXFLAGS = @LIBSTDCXX_RAW_CXX_CXXFLAGS@ LIBSTDCXX_RAW_CXX_LDFLAGS = @LIBSTDCXX_RAW_CXX_LDFLAGS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ diff --git a/libvtv/aclocal.m4 b/libvtv/aclocal.m4 index 7da4c3a5b9ba..ad58419afc9d 100644 --- a/libvtv/aclocal.m4 +++ b/libvtv/aclocal.m4 @@ -1168,7 +1168,9 @@ AC_SUBST([am__untar]) ]) # _AM_PROG_TAR m4_include([../config/acx.m4]) +m4_include([../config/clang-plugin.m4]) m4_include([../config/depstand.m4]) +m4_include([../config/gcc-plugin.m4]) m4_include([../config/lead-dot.m4]) m4_include([../config/libstdc++-raw-cxx.m4]) m4_include([../config/lthostflags.m4]) diff --git a/libvtv/configure b/libvtv/configure index a7889161c50b..1a29d899e3c4 100755 --- a/libvtv/configure +++ b/libvtv/configure @@ -651,6 +651,7 @@ OTOOL LIPO NMEDIT DSYMUTIL +LLVM_CONFIG OBJDUMP LN_S NM @@ -7340,8 +7341,266 @@ test -z "$deplibs_check_method" && deplibs_check_method=unknown -plugin_option= + +# Try CLANG_PLUGIN_FILE first since GCC_PLUGIN_OPTION may return the +# wrong plugin_option with clang. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang" >&5 +$as_echo_n "checking for clang... " >&6; } +if ${clang_cv_is_clang+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifdef __clang__ + yes +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "yes" >/dev/null 2>&1; then : + clang_cv_is_clang=yes +else + clang_cv_is_clang=no +fi +rm -f conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $clang_cv_is_clang" >&5 +$as_echo "$clang_cv_is_clang" >&6; } + plugin_file= + if test $clang_cv_is_clang = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang plugin file" >&5 +$as_echo_n "checking for clang plugin file... " >&6; } + plugin_names="LLVMgold.so" + for plugin in $plugin_names; do + plugin_file=`${CC} ${CFLAGS} --print-file-name $plugin` + if test x$plugin_file = x$plugin; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}llvm-config", so it can be a program name with args. +set dummy ${ac_tool_prefix}llvm-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_LLVM_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$LLVM_CONFIG"; then + ac_cv_prog_LLVM_CONFIG="$LLVM_CONFIG" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_LLVM_CONFIG="${ac_tool_prefix}llvm-config" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +LLVM_CONFIG=$ac_cv_prog_LLVM_CONFIG +if test -n "$LLVM_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LLVM_CONFIG" >&5 +$as_echo "$LLVM_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_LLVM_CONFIG"; then + ac_ct_LLVM_CONFIG=$LLVM_CONFIG + # Extract the first word of "llvm-config", so it can be a program name with args. +set dummy llvm-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_LLVM_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_LLVM_CONFIG"; then + ac_cv_prog_ac_ct_LLVM_CONFIG="$ac_ct_LLVM_CONFIG" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_LLVM_CONFIG="llvm-config" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_LLVM_CONFIG=$ac_cv_prog_ac_ct_LLVM_CONFIG +if test -n "$ac_ct_LLVM_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LLVM_CONFIG" >&5 +$as_echo "$ac_ct_LLVM_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_LLVM_CONFIG" = x; then + LLVM_CONFIG="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + LLVM_CONFIG=$ac_ct_LLVM_CONFIG + fi +else + LLVM_CONFIG="$ac_cv_prog_LLVM_CONFIG" +fi + + if test "$?" != 0; then + as_fn_error $? "Required tool 'llvm-config' not found on PATH." "$LINENO" 5 + fi + clang_lib_dir=`$LLVM_CONFIG --libdir` + if test -f $clang_lib_dir/$plugin; then + plugin_file=$clang_lib_dir/$plugin + fi + if test x$plugin_file != x$plugin; then + break; + fi + fi + done + if test -z $plugin_file; then + as_fn_error $? "Couldn't find clang plugin file for $CC." "$LINENO" 5 + fi + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + + if test "${AR}" = "" ; then + as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5 + fi + plugin_option="--plugin $plugin_file" + touch conftest.c + ${AR} $plugin_option rc conftest.a conftest.c + if test "$?" != 0; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 +$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} + plugin_file= + fi + rm -f conftest.* + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_file" >&5 +$as_echo "$plugin_file" >&6; } + fi + plugin_file="$plugin_file" + +if test -n "$plugin_file"; then + plugin_option="--plugin $plugin_file" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -plugin option" >&5 +$as_echo_n "checking for -plugin option... " >&6; } + plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll" +plugin_option= for plugin in $plugin_names; do plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin` if test x$plugin_so = x$plugin; then @@ -7352,7 +7611,119 @@ for plugin in $plugin_names; do break fi done +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + +if test "${AR}" = "" ; then + as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5 +fi +touch conftest.c +${AR} $plugin_option rc conftest.a conftest.c +if test "$?" != 0; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 +$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} + plugin_option= +fi +rm -f conftest.* +if test -n "$plugin_option"; then + plugin_option="$plugin_option" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_option" >&5 +$as_echo "$plugin_option" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + +fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. set dummy ${ac_tool_prefix}ar; ac_word=$2 @@ -7447,17 +7818,15 @@ fi test -z "$AR" && AR=ar if test -n "$plugin_option"; then - if $AR --help 2>&1 | grep -q "\--plugin"; then - touch conftest.c - $AR $plugin_option rc conftest.a conftest.c - if test "$?" != 0; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 -$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} - else + case "$AR" in + *"$plugin_option"*) + ;; + *) + if $AR --help 2>&1 | grep -q "\--plugin"; then AR="$AR $plugin_option" fi - rm -f conftest.* - fi + ;; + esac fi test -z "$AR_FLAGS" && AR_FLAGS=cru @@ -7664,9 +8033,15 @@ fi test -z "$RANLIB" && RANLIB=: if test -n "$plugin_option" && test "$RANLIB" != ":"; then - if $RANLIB --help 2>&1 | grep -q "\--plugin"; then - RANLIB="$RANLIB $plugin_option" - fi + case "$RANLIB" in + *"$plugin_option"*) + ;; + *) + if $RANLIB --help 2>&1 | grep -q "\--plugin"; then + RANLIB="$RANLIB $plugin_option" + fi + ;; + esac fi @@ -12369,7 +12744,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 12372 "configure" +#line 12747 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -12475,7 +12850,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 12478 "configure" +#line 12853 "configure" #include "confdefs.h" #if HAVE_DLFCN_H diff --git a/libvtv/testsuite/Makefile.in b/libvtv/testsuite/Makefile.in index cb804c442d68..167f8b17eca9 100644 --- a/libvtv/testsuite/Makefile.in +++ b/libvtv/testsuite/Makefile.in @@ -91,7 +91,9 @@ target_triplet = @target@ subdir = testsuite ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/depstand.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ $(top_srcdir)/../config/libstdc++-raw-cxx.m4 \ $(top_srcdir)/../config/lthostflags.m4 \ @@ -175,6 +177,7 @@ LIBSTDCXX_RAW_CXX_CXXFLAGS = @LIBSTDCXX_RAW_CXX_CXXFLAGS@ LIBSTDCXX_RAW_CXX_LDFLAGS = @LIBSTDCXX_RAW_CXX_LDFLAGS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ diff --git a/lto-plugin/ChangeLog b/lto-plugin/ChangeLog index 18c1f5377881..9c4d232cf164 100644 --- a/lto-plugin/ChangeLog +++ b/lto-plugin/ChangeLog @@ -1,3 +1,9 @@ +2025-10-05 Sam James + + * Makefile.in: Regenerate. + * aclocal.m4: Regenerate. + * configure: Regenerate. + 2025-03-06 Michal Jires * lto-plugin.c (cleanup_handler): Keep only files in ltrans diff --git a/lto-plugin/Makefile.in b/lto-plugin/Makefile.in index f6f5b020ff5f..d776474b9b93 100644 --- a/lto-plugin/Makefile.in +++ b/lto-plugin/Makefile.in @@ -93,8 +93,10 @@ subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ $(top_srcdir)/../config/cet.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/depstand.m4 \ $(top_srcdir)/../config/enable.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ $(top_srcdir)/../config/lthostflags.m4 \ $(top_srcdir)/../config/override.m4 \ @@ -245,6 +247,7 @@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ diff --git a/lto-plugin/aclocal.m4 b/lto-plugin/aclocal.m4 index f1fc28d4f13e..5c10b8358883 100644 --- a/lto-plugin/aclocal.m4 +++ b/lto-plugin/aclocal.m4 @@ -1169,8 +1169,10 @@ AC_SUBST([am__untar]) m4_include([../config/acx.m4]) m4_include([../config/cet.m4]) +m4_include([../config/clang-plugin.m4]) m4_include([../config/depstand.m4]) m4_include([../config/enable.m4]) +m4_include([../config/gcc-plugin.m4]) m4_include([../config/lead-dot.m4]) m4_include([../config/lthostflags.m4]) m4_include([../config/override.m4]) diff --git a/lto-plugin/configure b/lto-plugin/configure index 28f5dd79cd70..96f0a5b8e335 100755 --- a/lto-plugin/configure +++ b/lto-plugin/configure @@ -643,6 +643,7 @@ NMEDIT DSYMUTIL RANLIB AR +LLVM_CONFIG OBJDUMP LN_S NM @@ -7211,8 +7212,266 @@ test -z "$deplibs_check_method" && deplibs_check_method=unknown -plugin_option= + +# Try CLANG_PLUGIN_FILE first since GCC_PLUGIN_OPTION may return the +# wrong plugin_option with clang. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang" >&5 +$as_echo_n "checking for clang... " >&6; } +if ${clang_cv_is_clang+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifdef __clang__ + yes +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "yes" >/dev/null 2>&1; then : + clang_cv_is_clang=yes +else + clang_cv_is_clang=no +fi +rm -f conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $clang_cv_is_clang" >&5 +$as_echo "$clang_cv_is_clang" >&6; } + plugin_file= + if test $clang_cv_is_clang = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang plugin file" >&5 +$as_echo_n "checking for clang plugin file... " >&6; } + plugin_names="LLVMgold.so" + for plugin in $plugin_names; do + plugin_file=`${CC} ${CFLAGS} --print-file-name $plugin` + if test x$plugin_file = x$plugin; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}llvm-config", so it can be a program name with args. +set dummy ${ac_tool_prefix}llvm-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_LLVM_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$LLVM_CONFIG"; then + ac_cv_prog_LLVM_CONFIG="$LLVM_CONFIG" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_LLVM_CONFIG="${ac_tool_prefix}llvm-config" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +LLVM_CONFIG=$ac_cv_prog_LLVM_CONFIG +if test -n "$LLVM_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LLVM_CONFIG" >&5 +$as_echo "$LLVM_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_LLVM_CONFIG"; then + ac_ct_LLVM_CONFIG=$LLVM_CONFIG + # Extract the first word of "llvm-config", so it can be a program name with args. +set dummy llvm-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_LLVM_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_LLVM_CONFIG"; then + ac_cv_prog_ac_ct_LLVM_CONFIG="$ac_ct_LLVM_CONFIG" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_LLVM_CONFIG="llvm-config" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_LLVM_CONFIG=$ac_cv_prog_ac_ct_LLVM_CONFIG +if test -n "$ac_ct_LLVM_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LLVM_CONFIG" >&5 +$as_echo "$ac_ct_LLVM_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_LLVM_CONFIG" = x; then + LLVM_CONFIG="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + LLVM_CONFIG=$ac_ct_LLVM_CONFIG + fi +else + LLVM_CONFIG="$ac_cv_prog_LLVM_CONFIG" +fi + + if test "$?" != 0; then + as_fn_error $? "Required tool 'llvm-config' not found on PATH." "$LINENO" 5 + fi + clang_lib_dir=`$LLVM_CONFIG --libdir` + if test -f $clang_lib_dir/$plugin; then + plugin_file=$clang_lib_dir/$plugin + fi + if test x$plugin_file != x$plugin; then + break; + fi + fi + done + if test -z $plugin_file; then + as_fn_error $? "Couldn't find clang plugin file for $CC." "$LINENO" 5 + fi + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + + if test "${AR}" = "" ; then + as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5 + fi + plugin_option="--plugin $plugin_file" + touch conftest.c + ${AR} $plugin_option rc conftest.a conftest.c + if test "$?" != 0; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 +$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} + plugin_file= + fi + rm -f conftest.* + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_file" >&5 +$as_echo "$plugin_file" >&6; } + fi + plugin_file="$plugin_file" + +if test -n "$plugin_file"; then + plugin_option="--plugin $plugin_file" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -plugin option" >&5 +$as_echo_n "checking for -plugin option... " >&6; } + plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll" +plugin_option= for plugin in $plugin_names; do plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin` if test x$plugin_so = x$plugin; then @@ -7223,7 +7482,119 @@ for plugin in $plugin_names; do break fi done +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + +if test "${AR}" = "" ; then + as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5 +fi +touch conftest.c +${AR} $plugin_option rc conftest.a conftest.c +if test "$?" != 0; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 +$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} + plugin_option= +fi +rm -f conftest.* +if test -n "$plugin_option"; then + plugin_option="$plugin_option" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_option" >&5 +$as_echo "$plugin_option" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + +fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. set dummy ${ac_tool_prefix}ar; ac_word=$2 @@ -7318,17 +7689,15 @@ fi test -z "$AR" && AR=ar if test -n "$plugin_option"; then - if $AR --help 2>&1 | grep -q "\--plugin"; then - touch conftest.c - $AR $plugin_option rc conftest.a conftest.c - if test "$?" != 0; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 -$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} - else + case "$AR" in + *"$plugin_option"*) + ;; + *) + if $AR --help 2>&1 | grep -q "\--plugin"; then AR="$AR $plugin_option" fi - rm -f conftest.* - fi + ;; + esac fi test -z "$AR_FLAGS" && AR_FLAGS=cru @@ -7535,9 +7904,15 @@ fi test -z "$RANLIB" && RANLIB=: if test -n "$plugin_option" && test "$RANLIB" != ":"; then - if $RANLIB --help 2>&1 | grep -q "\--plugin"; then - RANLIB="$RANLIB $plugin_option" - fi + case "$RANLIB" in + *"$plugin_option"*) + ;; + *) + if $RANLIB --help 2>&1 | grep -q "\--plugin"; then + RANLIB="$RANLIB $plugin_option" + fi + ;; + esac fi @@ -12241,7 +12616,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 12244 "configure" +#line 12619 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -12347,7 +12722,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 12350 "configure" +#line 12725 "configure" #include "confdefs.h" #if HAVE_DLFCN_H diff --git a/zlib/ChangeLog b/zlib/ChangeLog index b0aebbc394fc..ebe9a0021086 100644 --- a/zlib/ChangeLog +++ b/zlib/ChangeLog @@ -1,3 +1,9 @@ +2025-10-02 H.J. Lu + + * Makefile.in: Regenerated. + * aclocal.m4: Likewise. + * configure: Likewise. + 2025-07-31 Sam James * configure: Regenerate. diff --git a/zlib/Makefile.in b/zlib/Makefile.in index 80fe3b691166..23b5afe576d0 100644 --- a/zlib/Makefile.in +++ b/zlib/Makefile.in @@ -93,8 +93,10 @@ target_triplet = @target@ subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/cet.m4 \ + $(top_srcdir)/../config/clang-plugin.m4 \ $(top_srcdir)/../config/depstand.m4 \ $(top_srcdir)/../config/enable.m4 \ + $(top_srcdir)/../config/gcc-plugin.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ $(top_srcdir)/../config/multi.m4 \ $(top_srcdir)/../config/override.m4 \ @@ -305,6 +307,7 @@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ +LLVM_CONFIG = @LLVM_CONFIG@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ diff --git a/zlib/aclocal.m4 b/zlib/aclocal.m4 index f3676e70476c..b8f66c523266 100644 --- a/zlib/aclocal.m4 +++ b/zlib/aclocal.m4 @@ -1168,8 +1168,10 @@ AC_SUBST([am__untar]) ]) # _AM_PROG_TAR m4_include([../config/cet.m4]) +m4_include([../config/clang-plugin.m4]) m4_include([../config/depstand.m4]) m4_include([../config/enable.m4]) +m4_include([../config/gcc-plugin.m4]) m4_include([../config/lead-dot.m4]) m4_include([../config/multi.m4]) m4_include([../config/override.m4]) diff --git a/zlib/configure b/zlib/configure index 202c15f3b513..9aae63551026 100755 --- a/zlib/configure +++ b/zlib/configure @@ -643,7 +643,6 @@ toolexeclibdir toolexecdir ENABLE_DARWIN_AT_RPATH_FALSE ENABLE_DARWIN_AT_RPATH_TRUE -CPP OTOOL64 OTOOL LIPO @@ -651,6 +650,8 @@ NMEDIT DSYMUTIL RANLIB AR +LLVM_CONFIG +CPP OBJDUMP LN_S NM @@ -1573,6 +1574,43 @@ fi } # ac_fn_c_try_compile +# ac_fn_c_try_cpp LINENO +# ---------------------- +# Try to preprocess conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } > conftest.i && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_cpp + # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. @@ -1650,43 +1688,6 @@ $as_echo "$ac_res" >&6; } } # ac_fn_c_check_header_compile -# ac_fn_c_try_cpp LINENO -# ---------------------- -# Try to preprocess conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_cpp () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } > conftest.i && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_c_try_cpp - # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes @@ -2425,7 +2426,6 @@ test -n "$target_alias" && NONENONEs,x,x, && program_prefix=${target_alias}- - # This works around an automake problem. mkinstalldirs="`cd $ac_aux_dir && ${PWDCMD-pwd}`/mkinstalldirs" @@ -5524,29 +5524,190 @@ test -z "$deplibs_check_method" && deplibs_check_method=unknown -plugin_option= -plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll" -for plugin in $plugin_names; do - plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin` - if test x$plugin_so = x$plugin; then - plugin_so=`${CC} ${CFLAGS} --print-file-name $plugin` - fi - if test x$plugin_so != x$plugin; then - plugin_option="--plugin $plugin_so" - break - fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +$as_echo_n "checking how to run the C preprocessor... " >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if ${ac_cv_prog_CPP+:} false; then : + $as_echo_n "(cached) " >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. -set dummy ${ac_tool_prefix}ar; ac_word=$2 + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +$as_echo "$CPP" >&6; } +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details" "$LINENO" 5; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + +# Try CLANG_PLUGIN_FILE first since GCC_PLUGIN_OPTION may return the +# wrong plugin_option with clang. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang" >&5 +$as_echo_n "checking for clang... " >&6; } +if ${clang_cv_is_clang+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifdef __clang__ + yes +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "yes" >/dev/null 2>&1; then : + clang_cv_is_clang=yes +else + clang_cv_is_clang=no +fi +rm -f conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $clang_cv_is_clang" >&5 +$as_echo "$clang_cv_is_clang" >&6; } + plugin_file= + if test $clang_cv_is_clang = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang plugin file" >&5 +$as_echo_n "checking for clang plugin file... " >&6; } + plugin_names="LLVMgold.so" + for plugin in $plugin_names; do + plugin_file=`${CC} ${CFLAGS} --print-file-name $plugin` + if test x$plugin_file = x$plugin; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}llvm-config", so it can be a program name with args. +set dummy ${ac_tool_prefix}llvm-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_AR+:} false; then : +if ${ac_cv_prog_LLVM_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else - if test -n "$AR"; then - ac_cv_prog_AR="$AR" # Let the user override the test. + if test -n "$LLVM_CONFIG"; then + ac_cv_prog_LLVM_CONFIG="$LLVM_CONFIG" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH @@ -5555,7 +5716,7 @@ do test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_AR="${ac_tool_prefix}ar" + ac_cv_prog_LLVM_CONFIG="${ac_tool_prefix}llvm-config" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi @@ -5565,10 +5726,10 @@ IFS=$as_save_IFS fi fi -AR=$ac_cv_prog_AR -if test -n "$AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 -$as_echo "$AR" >&6; } +LLVM_CONFIG=$ac_cv_prog_LLVM_CONFIG +if test -n "$LLVM_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LLVM_CONFIG" >&5 +$as_echo "$LLVM_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } @@ -5576,16 +5737,123 @@ fi fi -if test -z "$ac_cv_prog_AR"; then - ac_ct_AR=$AR - # Extract the first word of "ar", so it can be a program name with args. -set dummy ar; ac_word=$2 +if test -z "$ac_cv_prog_LLVM_CONFIG"; then + ac_ct_LLVM_CONFIG=$LLVM_CONFIG + # Extract the first word of "llvm-config", so it can be a program name with args. +set dummy llvm-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_AR+:} false; then : +if ${ac_cv_prog_ac_ct_LLVM_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else - if test -n "$ac_ct_AR"; then + if test -n "$ac_ct_LLVM_CONFIG"; then + ac_cv_prog_ac_ct_LLVM_CONFIG="$ac_ct_LLVM_CONFIG" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_LLVM_CONFIG="llvm-config" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_LLVM_CONFIG=$ac_cv_prog_ac_ct_LLVM_CONFIG +if test -n "$ac_ct_LLVM_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LLVM_CONFIG" >&5 +$as_echo "$ac_ct_LLVM_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_LLVM_CONFIG" = x; then + LLVM_CONFIG="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + LLVM_CONFIG=$ac_ct_LLVM_CONFIG + fi +else + LLVM_CONFIG="$ac_cv_prog_LLVM_CONFIG" +fi + + if test "$?" != 0; then + as_fn_error $? "Required tool 'llvm-config' not found on PATH." "$LINENO" 5 + fi + clang_lib_dir=`$LLVM_CONFIG --libdir` + if test -f $clang_lib_dir/$plugin; then + plugin_file=$clang_lib_dir/$plugin + fi + if test x$plugin_file != x$plugin; then + break; + fi + fi + done + if test -z $plugin_file; then + as_fn_error $? "Couldn't find clang plugin file for $CC." "$LINENO" 5 + fi + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -5615,7 +5883,7 @@ $as_echo "no" >&6; } fi if test "x$ac_ct_AR" = x; then - AR="false" + AR="" else case $cross_compiling:$ac_tool_warned in yes:) @@ -5629,19 +5897,257 @@ else AR="$ac_cv_prog_AR" fi -test -z "$AR" && AR=ar -if test -n "$plugin_option"; then - if $AR --help 2>&1 | grep -q "\--plugin"; then + if test "${AR}" = "" ; then + as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5 + fi + plugin_option="--plugin $plugin_file" touch conftest.c - $AR $plugin_option rc conftest.a conftest.c + ${AR} $plugin_option rc conftest.a conftest.c if test "$?" != 0; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} - else - AR="$AR $plugin_option" + plugin_file= fi rm -f conftest.* + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_file" >&5 +$as_echo "$plugin_file" >&6; } + fi + plugin_file="$plugin_file" + +if test -n "$plugin_file"; then + plugin_option="--plugin $plugin_file" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -plugin option" >&5 +$as_echo_n "checking for -plugin option... " >&6; } + +plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll" +plugin_option= +for plugin in $plugin_names; do + plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin` + if test x$plugin_so = x$plugin; then + plugin_so=`${CC} ${CFLAGS} --print-file-name $plugin` + fi + if test x$plugin_so != x$plugin; then + plugin_option="--plugin $plugin_so" + break fi +done +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + +if test "${AR}" = "" ; then + as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5 +fi +touch conftest.c +${AR} $plugin_option rc conftest.a conftest.c +if test "$?" != 0; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5 +$as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;} + plugin_option= +fi +rm -f conftest.* +if test -n "$plugin_option"; then + plugin_option="$plugin_option" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_option" >&5 +$as_echo "$plugin_option" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + +fi +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + +test -z "$AR" && AR=ar +if test -n "$plugin_option"; then + case "$AR" in + *"$plugin_option"*) + ;; + *) + if $AR --help 2>&1 | grep -q "\--plugin"; then + AR="$AR $plugin_option" + fi + ;; + esac fi test -z "$AR_FLAGS" && AR_FLAGS=cru @@ -5848,9 +6354,15 @@ fi test -z "$RANLIB" && RANLIB=: if test -n "$plugin_option" && test "$RANLIB" != ":"; then - if $RANLIB --help 2>&1 | grep -q "\--plugin"; then - RANLIB="$RANLIB $plugin_option" - fi + case "$RANLIB" in + *"$plugin_option"*) + ;; + *) + if $RANLIB --help 2>&1 | grep -q "\--plugin"; then + RANLIB="$RANLIB $plugin_option" + fi + ;; + esac fi @@ -7008,144 +7520,6 @@ $as_echo "$lt_cv_ld_force_load" >&6; } ;; esac -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 -$as_echo_n "checking how to run the C preprocessor... " >&6; } -# On Suns, sometimes $CPP names a directory. -if test -n "$CPP" && test -d "$CPP"; then - CPP= -fi -if test -z "$CPP"; then - if ${ac_cv_prog_CPP+:} false; then : - $as_echo_n "(cached) " >&6 -else - # Double quotes because CPP needs to be expanded - for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" - do - ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - break -fi - - done - ac_cv_prog_CPP=$CPP - -fi - CPP=$ac_cv_prog_CPP -else - ac_cv_prog_CPP=$CPP -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 -$as_echo "$CPP" >&6; } -ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "C preprocessor \"$CPP\" fails sanity check -See \`config.log' for more details" "$LINENO" 5; } -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : @@ -10854,7 +11228,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 10857 "configure" +#line 11231 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -10960,7 +11334,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 10963 "configure" +#line 11337 "configure" #include "confdefs.h" #if HAVE_DLFCN_H diff --git a/zlib/configure.ac b/zlib/configure.ac index 736b760cdf57..434bfcb072a4 100644 --- a/zlib/configure.ac +++ b/zlib/configure.ac @@ -7,7 +7,7 @@ if test -n "${with_target_subdir}"; then AM_ENABLE_MULTILIB(, ..) fi -AC_CANONICAL_SYSTEM +AC_CANONICAL_TARGET # This works around an automake problem. mkinstalldirs="`cd $ac_aux_dir && ${PWDCMD-pwd}`/mkinstalldirs"